Changeset 88af5df
- Timestamp:
- Nov 11, 2013, 9:52:32 PM (11 years ago)
- Branches:
- clfs-3.0.0-systemd, clfs-3.0.0-sysvinit, master, systemd, sysvinit
- Children:
- 1437142
- Parents:
- d52b1ef2
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
BOOK/patches.ent
rd52b1ef2 r88af5df 29 29 <!-- GCC branch update area --> 30 30 <!ENTITY gcc-branch_update-patch "gcc-&gcc-version;-branch_update-1.patch"> 31 <!ENTITY gcc-branch_update-patch-md5 " cd292840ba0b7eddc3154262f99fd3d0">32 <!ENTITY gcc-branch_update-patch-size "2 23KB">31 <!ENTITY gcc-branch_update-patch-md5 "7739dbf68ba5736cbf4676f30b358e74"> 32 <!ENTITY gcc-branch_update-patch-size "258 KB"> 33 33 34 34 <!ENTITY iana-etc-get_fix-patch "iana-etc-&iana-etc-version;-get_fix-1.patch"> -
patches/gcc-4.8.2-branch_update-1.patch
rd52b1ef2 r88af5df 1 1 Submitted By: Jim Gifford (jim at cross-lfs dot org) 2 Date: 1 0-24-20132 Date: 11-01-2013 3 3 Initial Package Version: 4.8.2 4 4 Origin: Upstream … … 7 7 rechecked periodically. 8 8 9 This patch was made from Revision # 204009. 9 Includes PR tree-optimization/54094 10 10 11 This patch was made from Revision # 204292. 12 13 diff -Naur gcc-4.8.2.orig/ChangeLog gcc-4.8.2/ChangeLog 14 --- gcc-4.8.2.orig/ChangeLog 2013-10-16 07:18:46.000000000 +0000 15 +++ gcc-4.8.2/ChangeLog 2013-11-01 16:12:34.459877324 +0000 16 @@ -7,6 +7,13 @@ 17 * configure.ac: Also allow ISL 0.12. 18 * configure: Regenerated. 19 20 + PR tree-optimization/54094 21 + * graphite-clast-to-gimple.c (translate_clast_for_loop): Derive the 22 + scheduling dimension for the parallelism check from the polyhedral 23 + information in the AST. 24 + * graphite-dependences.c (carries_deps): Do not assume the schedule is 25 + in 2D + 1 form. 26 + 27 2013-05-31 Release Manager 28 29 * GCC 4.8.1 released. 11 30 diff -Naur gcc-4.8.2.orig/contrib/gcc_update gcc-4.8.2/contrib/gcc_update 12 --- gcc-4.8.2.orig/contrib/gcc_update 2012-11-14 05:09:00.000000000 -060013 +++ gcc-4.8.2/contrib/gcc_update 2013-1 0-21 05:38:03.471259000 -050031 --- gcc-4.8.2.orig/contrib/gcc_update 2012-11-14 11:09:00.000000000 +0000 32 +++ gcc-4.8.2/contrib/gcc_update 2013-11-01 16:12:29.807076533 +0000 14 33 @@ -382,7 +382,7 @@ 15 34 fi … … 21 40 s,.*/branches/,, 22 41 s,.*/tags/,, 42 diff -Naur gcc-4.8.2.orig/gcc/DATESTAMP gcc-4.8.2/gcc/DATESTAMP 43 --- gcc-4.8.2.orig/gcc/DATESTAMP 2013-10-16 00:16:34.000000000 +0000 44 +++ gcc-4.8.2/gcc/DATESTAMP 2013-11-01 16:12:33.423698996 +0000 45 @@ -1 +1 @@ 46 -20131016 47 +20131101 23 48 diff -Naur gcc-4.8.2.orig/gcc/ada/gcc-interface/utils.c gcc-4.8.2/gcc/ada/gcc-interface/utils.c 24 --- gcc-4.8.2.orig/gcc/ada/gcc-interface/utils.c 2013-06-13 0 2:51:32.000000000 -050025 +++ gcc-4.8.2/gcc/ada/gcc-interface/utils.c 2013-1 0-19 06:11:47.006516000 -050049 --- gcc-4.8.2.orig/gcc/ada/gcc-interface/utils.c 2013-06-13 07:51:32.000000000 +0000 50 +++ gcc-4.8.2/gcc/ada/gcc-interface/utils.c 2013-11-01 16:12:30.359171559 +0000 26 51 @@ -232,6 +232,7 @@ 27 52 static tree split_plus (tree, tree *); … … 248 273 unless we can prove these 2 fields are laid out in such a way that no gap 249 274 exist between the end of PREV_FIELD and the beginning of CURR_FIELD. OFFSET 275 diff -Naur gcc-4.8.2.orig/gcc/alias.c gcc-4.8.2/gcc/alias.c 276 --- gcc-4.8.2.orig/gcc/alias.c 2013-03-05 09:40:38.000000000 +0000 277 +++ gcc-4.8.2/gcc/alias.c 2013-11-01 16:12:30.359171559 +0000 278 @@ -2871,16 +2871,13 @@ 279 /* Wipe the reg_seen array clean. */ 280 bitmap_clear (reg_seen); 281 282 - /* Mark all hard registers which may contain an address. 283 - The stack, frame and argument pointers may contain an address. 284 - An argument register which can hold a Pmode value may contain 285 - an address even if it is not in BASE_REGS. 286 - 287 - The address expression is VOIDmode for an argument and 288 - Pmode for other registers. */ 289 - 290 - memcpy (new_reg_base_value, static_reg_base_value, 291 - FIRST_PSEUDO_REGISTER * sizeof (rtx)); 292 + /* Initialize the alias information for this pass. */ 293 + for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) 294 + if (static_reg_base_value[i]) 295 + { 296 + new_reg_base_value[i] = static_reg_base_value[i]; 297 + bitmap_set_bit (reg_seen, i); 298 + } 299 300 /* Walk the insns adding values to the new_reg_base_value array. */ 301 for (i = 0; i < rpo_cnt; i++) 302 diff -Naur gcc-4.8.2.orig/gcc/cfgexpand.c gcc-4.8.2/gcc/cfgexpand.c 303 --- gcc-4.8.2.orig/gcc/cfgexpand.c 2013-03-05 22:31:50.000000000 +0000 304 +++ gcc-4.8.2/gcc/cfgexpand.c 2013-11-01 16:12:30.363172247 +0000 305 @@ -4707,14 +4707,18 @@ 306 if (e->insns.r) 307 { 308 rebuild_jump_labels_chain (e->insns.r); 309 - /* Avoid putting insns before parm_birth_insn. */ 310 + /* Put insns after parm birth, but before 311 + NOTE_INSNS_FUNCTION_BEG. */ 312 if (e->src == ENTRY_BLOCK_PTR 313 - && single_succ_p (ENTRY_BLOCK_PTR) 314 - && parm_birth_insn) 315 + && single_succ_p (ENTRY_BLOCK_PTR)) 316 { 317 rtx insns = e->insns.r; 318 e->insns.r = NULL_RTX; 319 - emit_insn_after_noloc (insns, parm_birth_insn, e->dest); 320 + if (NOTE_P (parm_birth_insn) 321 + && NOTE_KIND (parm_birth_insn) == NOTE_INSN_FUNCTION_BEG) 322 + emit_insn_before_noloc (insns, parm_birth_insn, e->dest); 323 + else 324 + emit_insn_after_noloc (insns, parm_birth_insn, e->dest); 325 } 326 else 327 commit_one_edge_insertion (e); 328 diff -Naur gcc-4.8.2.orig/gcc/cgraph.c gcc-4.8.2/gcc/cgraph.c 329 --- gcc-4.8.2.orig/gcc/cgraph.c 2013-05-22 07:50:40.000000000 +0000 330 +++ gcc-4.8.2/gcc/cgraph.c 2013-11-01 16:12:30.367172935 +0000 331 @@ -2596,4 +2596,47 @@ 332 FOR_EACH_FUNCTION (node) 333 verify_cgraph_node (node); 334 } 335 + 336 +/* Create external decl node for DECL. 337 + The difference i nbetween cgraph_get_create_node and 338 + cgraph_get_create_real_symbol_node is that cgraph_get_create_node 339 + may return inline clone, while cgraph_get_create_real_symbol_node 340 + will create a new node in this case. 341 + FIXME: This function should be removed once clones are put out of decl 342 + hash. */ 343 + 344 +struct cgraph_node * 345 +cgraph_get_create_real_symbol_node (tree decl) 346 +{ 347 + struct cgraph_node *first_clone = cgraph_get_node (decl); 348 + struct cgraph_node *node; 349 + /* create symbol table node. even if inline clone exists, we can not take 350 + it as a target of non-inlined call. */ 351 + node = cgraph_get_node (decl); 352 + if (node && !node->global.inlined_to) 353 + return node; 354 + 355 + node = cgraph_create_node (decl); 356 + 357 + /* ok, we previously inlined the function, then removed the offline copy and 358 + now we want it back for external call. this can happen when devirtualizing 359 + while inlining function called once that happens after extern inlined and 360 + virtuals are already removed. in this case introduce the external node 361 + and make it available for call. */ 362 + if (first_clone) 363 + { 364 + first_clone->clone_of = node; 365 + node->clones = first_clone; 366 + symtab_prevail_in_asm_name_hash ((symtab_node) node); 367 + symtab_insert_node_to_hashtable ((symtab_node) node); 368 + if (dump_file) 369 + fprintf (dump_file, "Introduced new external node " 370 + "(%s/%i) and turned into root of the clone tree.\n", 371 + xstrdup (cgraph_node_name (node)), node->uid); 372 + } 373 + else if (dump_file) 374 + fprintf (dump_file, "Introduced new external node " 375 + "(%s/%i).\n", xstrdup (cgraph_node_name (node)), node->uid); 376 + return node; 377 +} 378 #include "gt-cgraph.h" 379 diff -Naur gcc-4.8.2.orig/gcc/cgraph.h gcc-4.8.2/gcc/cgraph.h 380 --- gcc-4.8.2.orig/gcc/cgraph.h 2013-01-17 11:43:14.000000000 +0000 381 +++ gcc-4.8.2/gcc/cgraph.h 2013-11-01 16:12:30.371173624 +0000 382 @@ -575,6 +575,7 @@ 383 struct cgraph_node * cgraph_create_node (tree); 384 struct cgraph_node * cgraph_create_empty_node (void); 385 struct cgraph_node * cgraph_get_create_node (tree); 386 +struct cgraph_node * cgraph_get_create_real_symbol_node (tree); 387 struct cgraph_node * cgraph_same_body_alias (struct cgraph_node *, tree, tree); 388 struct cgraph_node * cgraph_add_thunk (struct cgraph_node *, tree, tree, bool, HOST_WIDE_INT, 389 HOST_WIDE_INT, tree, tree); 390 diff -Naur gcc-4.8.2.orig/gcc/cgraphbuild.c gcc-4.8.2/gcc/cgraphbuild.c 391 --- gcc-4.8.2.orig/gcc/cgraphbuild.c 2013-01-10 20:38:27.000000000 +0000 392 +++ gcc-4.8.2/gcc/cgraphbuild.c 2013-11-01 16:12:30.367172935 +0000 393 @@ -73,7 +73,7 @@ 394 decl = get_base_var (*tp); 395 if (TREE_CODE (decl) == FUNCTION_DECL) 396 { 397 - struct cgraph_node *node = cgraph_get_create_node (decl); 398 + struct cgraph_node *node = cgraph_get_create_real_symbol_node (decl); 399 if (!ctx->only_vars) 400 cgraph_mark_address_taken_node (node); 401 ipa_record_reference ((symtab_node)ctx->varpool_node, 402 @@ -143,7 +143,7 @@ 403 { 404 struct cgraph_node *per_node; 405 406 - per_node = cgraph_get_create_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl)); 407 + per_node = cgraph_get_create_real_symbol_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl)); 408 ipa_record_reference ((symtab_node)node, (symtab_node)per_node, IPA_REF_ADDR, NULL); 409 cgraph_mark_address_taken_node (per_node); 410 } 411 @@ -223,7 +223,7 @@ 412 addr = get_base_address (addr); 413 if (TREE_CODE (addr) == FUNCTION_DECL) 414 { 415 - struct cgraph_node *node = cgraph_get_create_node (addr); 416 + struct cgraph_node *node = cgraph_get_create_real_symbol_node (addr); 417 cgraph_mark_address_taken_node (node); 418 ipa_record_reference ((symtab_node)data, 419 (symtab_node)node, 420 @@ -252,7 +252,7 @@ 421 { 422 /* ??? This can happen on platforms with descriptors when these are 423 directly manipulated in the code. Pretend that it's an address. */ 424 - struct cgraph_node *node = cgraph_get_create_node (t); 425 + struct cgraph_node *node = cgraph_get_create_real_symbol_node (t); 426 cgraph_mark_address_taken_node (node); 427 ipa_record_reference ((symtab_node)data, 428 (symtab_node)node, 429 @@ -330,7 +330,7 @@ 430 { 431 tree fn = gimple_omp_parallel_child_fn (stmt); 432 ipa_record_reference ((symtab_node)node, 433 - (symtab_node)cgraph_get_create_node (fn), 434 + (symtab_node)cgraph_get_create_real_symbol_node (fn), 435 IPA_REF_ADDR, stmt); 436 } 437 if (gimple_code (stmt) == GIMPLE_OMP_TASK) 438 @@ -338,12 +338,12 @@ 439 tree fn = gimple_omp_task_child_fn (stmt); 440 if (fn) 441 ipa_record_reference ((symtab_node)node, 442 - (symtab_node) cgraph_get_create_node (fn), 443 + (symtab_node) cgraph_get_create_real_symbol_node (fn), 444 IPA_REF_ADDR, stmt); 445 fn = gimple_omp_task_copy_fn (stmt); 446 if (fn) 447 ipa_record_reference ((symtab_node)node, 448 - (symtab_node)cgraph_get_create_node (fn), 449 + (symtab_node)cgraph_get_create_real_symbol_node (fn), 450 IPA_REF_ADDR, stmt); 451 } 452 } 453 diff -Naur gcc-4.8.2.orig/gcc/combine.c gcc-4.8.2/gcc/combine.c 454 --- gcc-4.8.2.orig/gcc/combine.c 2013-05-03 13:19:51.000000000 +0000 455 +++ gcc-4.8.2/gcc/combine.c 2013-11-01 16:12:30.379175001 +0000 456 @@ -5798,8 +5798,15 @@ 457 return x; 458 } 459 460 - /* If the code changed, return a whole new comparison. */ 461 - if (new_code != code) 462 + /* If the code changed, return a whole new comparison. 463 + We also need to avoid using SUBST in cases where 464 + simplify_comparison has widened a comparison with a CONST_INT, 465 + since in that case the wider CONST_INT may fail the sanity 466 + checks in do_SUBST. */ 467 + if (new_code != code 468 + || (CONST_INT_P (op1) 469 + && GET_MODE (op0) != GET_MODE (XEXP (x, 0)) 470 + && GET_MODE (op0) != GET_MODE (XEXP (x, 1)))) 471 return gen_rtx_fmt_ee (new_code, mode, op0, op1); 472 473 /* Otherwise, keep this operation, but maybe change its operands. 250 474 diff -Naur gcc-4.8.2.orig/gcc/config/i386/i386.c gcc-4.8.2/gcc/config/i386/i386.c 251 --- gcc-4.8.2.orig/gcc/config/i386/i386.c 2013-08-23 05:01:34.000000000 -0500252 +++ gcc-4.8.2/gcc/config/i386/i386.c 2013-1 0-16 05:47:13.444609000 -0500475 --- gcc-4.8.2.orig/gcc/config/i386/i386.c 2013-08-23 10:01:34.000000000 +0000 476 +++ gcc-4.8.2/gcc/config/i386/i386.c 2013-11-01 16:12:30.487193593 +0000 253 477 @@ -2983,7 +2983,7 @@ 254 478 {"bdver3", PROCESSOR_BDVER3, CPU_BDVER3, … … 260 484 | PTA_FMA | PTA_PRFCHW | PTA_FXSR | PTA_XSAVE 261 485 | PTA_XSAVEOPT}, 486 @@ -7235,9 +7235,15 @@ 487 switch (regno) 488 { 489 case AX_REG: 490 + case DX_REG: 491 return true; 492 - 493 - case FIRST_FLOAT_REG: 494 + case DI_REG: 495 + case SI_REG: 496 + return TARGET_64BIT && ix86_abi != MS_ABI; 497 + 498 + /* Complex values are returned in %st(0)/%st(1) pair. */ 499 + case ST0_REG: 500 + case ST1_REG: 501 /* TODO: The function should depend on current function ABI but 502 builtins.c would need updating then. Therefore we use the 503 default ABI. */ 504 @@ -7245,10 +7251,12 @@ 505 return false; 506 return TARGET_FLOAT_RETURNS_IN_80387; 507 508 - case FIRST_SSE_REG: 509 + /* Complex values are returned in %xmm0/%xmm1 pair. */ 510 + case XMM0_REG: 511 + case XMM1_REG: 512 return TARGET_SSE; 513 514 - case FIRST_MMX_REG: 515 + case MM0_REG: 516 if (TARGET_MACHO || TARGET_64BIT) 517 return false; 518 return TARGET_MMX; 519 @@ -13817,8 +13825,6 @@ 520 Those same assemblers have the same but opposite lossage on cmov. */ 521 if (mode == CCmode) 522 suffix = fp ? "nbe" : "a"; 523 - else if (mode == CCCmode) 524 - suffix = "b"; 525 else 526 gcc_unreachable (); 527 break; 528 @@ -13840,8 +13846,12 @@ 529 } 530 break; 531 case LTU: 532 - gcc_assert (mode == CCmode || mode == CCCmode); 533 - suffix = "b"; 534 + if (mode == CCmode) 535 + suffix = "b"; 536 + else if (mode == CCCmode) 537 + suffix = "c"; 538 + else 539 + gcc_unreachable (); 540 break; 541 case GE: 542 switch (mode) 543 @@ -13861,20 +13871,20 @@ 544 } 545 break; 546 case GEU: 547 - /* ??? As above. */ 548 - gcc_assert (mode == CCmode || mode == CCCmode); 549 - suffix = fp ? "nb" : "ae"; 550 + if (mode == CCmode) 551 + suffix = fp ? "nb" : "ae"; 552 + else if (mode == CCCmode) 553 + suffix = "nc"; 554 + else 555 + gcc_unreachable (); 556 break; 557 case LE: 558 gcc_assert (mode == CCmode || mode == CCGCmode || mode == CCNOmode); 559 suffix = "le"; 560 break; 561 case LEU: 562 - /* ??? As above. */ 563 if (mode == CCmode) 564 suffix = "be"; 565 - else if (mode == CCCmode) 566 - suffix = fp ? "nb" : "ae"; 567 else 568 gcc_unreachable (); 569 break; 570 @@ -18486,12 +18496,7 @@ 571 return CCmode; 572 case GTU: /* CF=0 & ZF=0 */ 573 case LEU: /* CF=1 | ZF=1 */ 574 - /* Detect overflow checks. They need just the carry flag. */ 575 - if (GET_CODE (op0) == MINUS 576 - && rtx_equal_p (op1, XEXP (op0, 0))) 577 - return CCCmode; 578 - else 579 - return CCmode; 580 + return CCmode; 581 /* Codes possibly doable only with sign flag when 582 comparing against zero. */ 583 case GE: /* SF=OF or SF=0 */ 584 diff -Naur gcc-4.8.2.orig/gcc/config/i386/i386.md gcc-4.8.2/gcc/config/i386/i386.md 585 --- gcc-4.8.2.orig/gcc/config/i386/i386.md 2013-08-13 12:45:06.000000000 +0000 586 +++ gcc-4.8.2/gcc/config/i386/i386.md 2013-11-01 16:12:31.467362295 +0000 587 @@ -6589,7 +6589,7 @@ 588 (set_attr "use_carry" "1") 589 (set_attr "mode" "<MODE>")]) 590 591 592 -;; Overflow setting add and subtract instructions 593 +;; Overflow setting add instructions 594 595 (define_insn "*add<mode>3_cconly_overflow" 596 [(set (reg:CCC FLAGS_REG) 597 @@ -6604,43 +6604,31 @@ 598 [(set_attr "type" "alu") 599 (set_attr "mode" "<MODE>")]) 600 601 -(define_insn "*sub<mode>3_cconly_overflow" 602 +(define_insn "*add<mode>3_cc_overflow" 603 [(set (reg:CCC FLAGS_REG) 604 (compare:CCC 605 - (minus:SWI 606 - (match_operand:SWI 0 "nonimmediate_operand" "<r>m,<r>") 607 - (match_operand:SWI 1 "<general_operand>" "<r><i>,<r>m")) 608 - (match_dup 0)))] 609 - "" 610 - "cmp{<imodesuffix>}\t{%1, %0|%0, %1}" 611 - [(set_attr "type" "icmp") 612 - (set_attr "mode" "<MODE>")]) 613 - 614 -(define_insn "*<plusminus_insn><mode>3_cc_overflow" 615 - [(set (reg:CCC FLAGS_REG) 616 - (compare:CCC 617 - (plusminus:SWI 618 - (match_operand:SWI 1 "nonimmediate_operand" "<comm>0,0") 619 + (plus:SWI 620 + (match_operand:SWI 1 "nonimmediate_operand" "%0,0") 621 (match_operand:SWI 2 "<general_operand>" "<r><i>,<r>m")) 622 (match_dup 1))) 623 (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>") 624 - (plusminus:SWI (match_dup 1) (match_dup 2)))] 625 - "ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)" 626 - "<plusminus_mnemonic>{<imodesuffix>}\t{%2, %0|%0, %2}" 627 + (plus:SWI (match_dup 1) (match_dup 2)))] 628 + "ix86_binary_operator_ok (PLUS, <MODE>mode, operands)" 629 + "add{<imodesuffix>}\t{%2, %0|%0, %2}" 630 [(set_attr "type" "alu") 631 (set_attr "mode" "<MODE>")]) 632 633 -(define_insn "*<plusminus_insn>si3_zext_cc_overflow" 634 +(define_insn "*addsi3_zext_cc_overflow" 635 [(set (reg:CCC FLAGS_REG) 636 (compare:CCC 637 - (plusminus:SI 638 - (match_operand:SI 1 "nonimmediate_operand" "<comm>0") 639 + (plus:SI 640 + (match_operand:SI 1 "nonimmediate_operand" "%0") 641 (match_operand:SI 2 "x86_64_general_operand" "rme")) 642 (match_dup 1))) 643 (set (match_operand:DI 0 "register_operand" "=r") 644 - (zero_extend:DI (plusminus:SI (match_dup 1) (match_dup 2))))] 645 - "TARGET_64BIT && ix86_binary_operator_ok (<CODE>, SImode, operands)" 646 - "<plusminus_mnemonic>{l}\t{%2, %k0|%k0, %2}" 647 + (zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))] 648 + "TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands)" 649 + "add{l}\t{%2, %k0|%k0, %2}" 650 [(set_attr "type" "alu") 651 (set_attr "mode" "SI")]) 652 262 653 diff -Naur gcc-4.8.2.orig/gcc/config/rs6000/rs6000.md gcc-4.8.2/gcc/config/rs6000/rs6000.md 263 --- gcc-4.8.2.orig/gcc/config/rs6000/rs6000.md 2013-09-23 09:27:06.000000000 -0500264 +++ gcc-4.8.2/gcc/config/rs6000/rs6000.md 2013-1 0-24 07:53:51.516366000 -0500654 --- gcc-4.8.2.orig/gcc/config/rs6000/rs6000.md 2013-09-23 14:27:06.000000000 +0000 655 +++ gcc-4.8.2/gcc/config/rs6000/rs6000.md 2013-11-01 16:12:31.479364360 +0000 265 656 @@ -2412,7 +2412,7 @@ 266 657 (match_operand:SI 2 "gpc_reg_operand" "r,r")) … … 300 691 (set (match_dup 3) 301 692 diff -Naur gcc-4.8.2.orig/gcc/config/sh/sh.opt gcc-4.8.2/gcc/config/sh/sh.opt 302 --- gcc-4.8.2.orig/gcc/config/sh/sh.opt 2013-03-13 1 3:09:10.000000000 -0500303 +++ gcc-4.8.2/gcc/config/sh/sh.opt 2013-1 0-17 08:49:40.145734000 -0500693 --- gcc-4.8.2.orig/gcc/config/sh/sh.opt 2013-03-13 18:09:10.000000000 +0000 694 +++ gcc-4.8.2/gcc/config/sh/sh.opt 2013-11-01 16:12:32.375518598 +0000 304 695 @@ -21,7 +21,7 @@ 305 696 ;; Used for various architecture options. … … 312 703 ;; Set if the a double-precision FPU is present but is restricted to 313 704 diff -Naur gcc-4.8.2.orig/gcc/cp/decl2.c gcc-4.8.2/gcc/cp/decl2.c 314 --- gcc-4.8.2.orig/gcc/cp/decl2.c 2013-05-20 08:37:44.000000000 -0500315 +++ gcc-4.8.2/gcc/cp/decl2.c 2013-1 0-16 16:58:58.729529000 -0500705 --- gcc-4.8.2.orig/gcc/cp/decl2.c 2013-05-20 13:37:44.000000000 +0000 706 +++ gcc-4.8.2/gcc/cp/decl2.c 2013-11-01 16:12:32.379519286 +0000 316 707 @@ -3960,6 +3960,22 @@ 317 708 expand_or_defer_fn (finish_function (0)); … … 363 754 if (flag_detailed_statistics) 364 755 { 756 diff -Naur gcc-4.8.2.orig/gcc/cp/except.c gcc-4.8.2/gcc/cp/except.c 757 --- gcc-4.8.2.orig/gcc/cp/except.c 2013-01-10 20:38:27.000000000 +0000 758 +++ gcc-4.8.2/gcc/cp/except.c 2013-11-01 16:12:32.995625323 +0000 759 @@ -380,6 +380,9 @@ 760 { 761 tree type = body ? TREE_TYPE (body) : void_type_node; 762 763 + if (!flag_exceptions) 764 + return body; 765 + 766 if (cond && !value_dependent_expression_p (cond)) 767 { 768 cond = cxx_constant_value (cond); 365 769 diff -Naur gcc-4.8.2.orig/gcc/cp/parser.c gcc-4.8.2/gcc/cp/parser.c 366 --- gcc-4.8.2.orig/gcc/cp/parser.c 2013-10-02 1 3:27:30.000000000 -0500367 +++ gcc-4.8.2/gcc/cp/parser.c 2013-1 0-16 17:19:18.772609000 -0500770 --- gcc-4.8.2.orig/gcc/cp/parser.c 2013-10-02 18:27:30.000000000 +0000 771 +++ gcc-4.8.2/gcc/cp/parser.c 2013-11-01 16:12:33.015628766 +0000 368 772 @@ -6421,10 +6421,6 @@ 369 773 /* Look for the `~'. */ … … 378 782 *type = cp_parser_nonclass_name (parser); 379 783 diff -Naur gcc-4.8.2.orig/gcc/cp/semantics.c gcc-4.8.2/gcc/cp/semantics.c 380 --- gcc-4.8.2.orig/gcc/cp/semantics.c 2013-10-08 17:29:49.000000000 -0500381 +++ gcc-4.8.2/gcc/cp/semantics.c 2013-1 0-17 12:15:46.188630000 -0500784 --- gcc-4.8.2.orig/gcc/cp/semantics.c 2013-10-08 22:29:49.000000000 +0000 785 +++ gcc-4.8.2/gcc/cp/semantics.c 2013-11-01 16:12:33.423698996 +0000 382 786 @@ -9481,7 +9481,14 @@ 383 787 /* In unevaluated context this isn't an odr-use, so just return the … … 396 800 /* Try to default capture 'this' if we can. */ 397 801 if (!this_capture 398 diff -Naur gcc-4.8.2.orig/gcc/DATESTAMP gcc-4.8.2/gcc/DATESTAMP 399 --- gcc-4.8.2.orig/gcc/DATESTAMP 2013-10-15 19:16:34.000000000 -0500 400 +++ gcc-4.8.2/gcc/DATESTAMP 2013-10-23 19:16:46.751448000 -0500 401 @@ -1 +1 @@ 402 -20131016 403 +20131024 802 diff -Naur gcc-4.8.2.orig/gcc/gimple-fold.c gcc-4.8.2/gcc/gimple-fold.c 803 --- gcc-4.8.2.orig/gcc/gimple-fold.c 2013-01-13 12:33:43.000000000 +0000 804 +++ gcc-4.8.2/gcc/gimple-fold.c 2013-11-01 16:12:33.427699685 +0000 805 @@ -178,7 +178,7 @@ 806 /* Make sure we create a cgraph node for functions we'll reference. 807 They can be non-existent if the reference comes from an entry 808 of an external vtable for example. */ 809 - cgraph_get_create_node (base); 810 + cgraph_get_create_real_symbol_node (base); 811 } 812 /* Fixup types in global initializers. */ 813 if (TREE_TYPE (TREE_TYPE (cval)) != TREE_TYPE (TREE_OPERAND (cval, 0))) 814 diff -Naur gcc-4.8.2.orig/gcc/go/go-gcc.cc gcc-4.8.2/gcc/go/go-gcc.cc 815 --- gcc-4.8.2.orig/gcc/go/go-gcc.cc 2013-10-04 18:07:35.000000000 +0000 816 +++ gcc-4.8.2/gcc/go/go-gcc.cc 2013-11-01 16:12:34.067809850 +0000 817 @@ -232,6 +232,9 @@ 818 Bexpression* 819 convert_expression(Btype* type, Bexpression* expr, Location); 820 821 + Bexpression* 822 + function_code_expression(Bfunction*, Location); 823 + 824 // Statements. 825 826 Bstatement* 827 @@ -334,6 +337,17 @@ 828 Bexpression* 829 label_address(Blabel*, Location); 830 831 + // Functions. 832 + 833 + Bfunction* 834 + error_function() 835 + { return this->make_function(error_mark_node); } 836 + 837 + Bfunction* 838 + function(Btype* fntype, const std::string& name, const std::string& asm_name, 839 + bool is_visible, bool is_declaration, bool is_inlinable, 840 + bool disable_split_stack, bool in_unique_section, Location); 841 + 842 private: 843 // Make a Bexpression from a tree. 844 Bexpression* 845 @@ -350,6 +364,10 @@ 846 make_type(tree t) 847 { return new Btype(t); } 848 849 + Bfunction* 850 + make_function(tree t) 851 + { return new Bfunction(t); } 852 + 853 Btype* 854 fill_in_struct(Btype*, const std::vector<Btyped_identifier>&); 855 856 @@ -966,6 +984,19 @@ 857 return tree_to_expr(ret); 858 } 859 860 +// Get the address of a function. 861 + 862 +Bexpression* 863 +Gcc_backend::function_code_expression(Bfunction* bfunc, Location location) 864 +{ 865 + tree func = bfunc->get_tree(); 866 + if (func == error_mark_node) 867 + return this->error_expression(); 868 + 869 + tree ret = build_fold_addr_expr_loc(location.gcc_location(), func); 870 + return this->make_expression(ret); 871 +} 872 + 873 // An expression as a statement. 874 875 Bstatement* 876 @@ -1724,6 +1755,56 @@ 877 return this->make_expression(ret); 878 } 879 880 +// Declare or define a new function. 881 + 882 +Bfunction* 883 +Gcc_backend::function(Btype* fntype, const std::string& name, 884 + const std::string& asm_name, bool is_visible, 885 + bool is_declaration, bool is_inlinable, 886 + bool disable_split_stack, bool in_unique_section, 887 + Location location) 888 +{ 889 + tree functype = fntype->get_tree(); 890 + if (functype != error_mark_node) 891 + { 892 + gcc_assert(FUNCTION_POINTER_TYPE_P(functype)); 893 + functype = TREE_TYPE(functype); 894 + } 895 + tree id = get_identifier_from_string(name); 896 + if (functype == error_mark_node || id == error_mark_node) 897 + return this->error_function(); 898 + 899 + tree decl = build_decl(location.gcc_location(), FUNCTION_DECL, id, functype); 900 + if (!asm_name.empty()) 901 + SET_DECL_ASSEMBLER_NAME(decl, get_identifier_from_string(asm_name)); 902 + if (is_visible) 903 + TREE_PUBLIC(decl) = 1; 904 + if (is_declaration) 905 + DECL_EXTERNAL(decl) = 1; 906 + else 907 + { 908 + tree restype = TREE_TYPE(functype); 909 + tree resdecl = 910 + build_decl(location.gcc_location(), RESULT_DECL, NULL_TREE, restype); 911 + DECL_ARTIFICIAL(resdecl) = 1; 912 + DECL_IGNORED_P(resdecl) = 1; 913 + DECL_CONTEXT(resdecl) = decl; 914 + DECL_RESULT(decl) = resdecl; 915 + } 916 + if (!is_inlinable) 917 + DECL_UNINLINABLE(decl) = 1; 918 + if (disable_split_stack) 919 + { 920 + tree attr = get_identifier("__no_split_stack__"); 921 + DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE); 922 + } 923 + if (in_unique_section) 924 + resolve_unique_section(decl, 0, 1); 925 + 926 + go_preserve_from_gc(decl); 927 + return new Bfunction(decl); 928 +} 929 + 930 // The single backend. 931 932 static Gcc_backend gcc_backend; 933 @@ -1799,3 +1880,9 @@ 934 { 935 return bv->get_tree(); 936 } 937 + 938 +tree 939 +function_to_tree(Bfunction* bf) 940 +{ 941 + return bf->get_tree(); 942 +} 404 943 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/backend.h gcc-4.8.2/gcc/go/gofrontend/backend.h 405 --- gcc-4.8.2.orig/gcc/go/gofrontend/backend.h 2013-10-04 1 3:07:35.000000000 -0500406 +++ gcc-4.8.2/gcc/go/gofrontend/backend.h 2013-1 0-16 12:27:53.564070000 -0500944 --- gcc-4.8.2.orig/gcc/go/gofrontend/backend.h 2013-10-04 18:07:35.000000000 +0000 945 +++ gcc-4.8.2/gcc/go/gofrontend/backend.h 2013-11-01 16:12:33.427699685 +0000 407 946 @@ -23,7 +23,7 @@ 408 947 // The backend representation of a statement. … … 467 1006 #endif // !defined(GO_BACKEND_H) 468 1007 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/expressions.cc gcc-4.8.2/gcc/go/gofrontend/expressions.cc 469 --- gcc-4.8.2.orig/gcc/go/gofrontend/expressions.cc 2013-10-08 18:54:31.000000000 -0500470 +++ gcc-4.8.2/gcc/go/gofrontend/expressions.cc 2013-1 0-16 12:27:53.564070000 -05001008 --- gcc-4.8.2.orig/gcc/go/gofrontend/expressions.cc 2013-10-08 23:54:31.000000000 +0000 1009 +++ gcc-4.8.2/gcc/go/gofrontend/expressions.cc 2013-11-01 16:12:33.435701062 +0000 471 1010 @@ -1219,7 +1219,7 @@ 472 1011 … … 739 1278 std::string sval; 740 1279 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/expressions.h gcc-4.8.2/gcc/go/gofrontend/expressions.h 741 --- gcc-4.8.2.orig/gcc/go/gofrontend/expressions.h 2013-10-08 18:54:31.000000000 -0500742 +++ gcc-4.8.2/gcc/go/gofrontend/expressions.h 2013-1 0-16 12:27:53.564070000 -05001280 --- gcc-4.8.2.orig/gcc/go/gofrontend/expressions.h 2013-10-08 23:54:31.000000000 +0000 1281 +++ gcc-4.8.2/gcc/go/gofrontend/expressions.h 2013-11-01 16:12:33.963791948 +0000 743 1282 @@ -1514,8 +1514,8 @@ 744 1283 closure() … … 752 1291 753 1292 protected: 1293 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/gogo-tree.cc gcc-4.8.2/gcc/go/gofrontend/gogo-tree.cc 1294 --- gcc-4.8.2.orig/gcc/go/gofrontend/gogo-tree.cc 2013-09-28 20:23:56.000000000 +0000 1295 +++ gcc-4.8.2/gcc/go/gofrontend/gogo-tree.cc 2013-11-01 16:12:33.975794014 +0000 1296 @@ -985,74 +985,6 @@ 1297 delete[] vec; 1298 } 1299 1300 -// Get a tree for the identifier for a named object. 1301 - 1302 -tree 1303 -Named_object::get_id(Gogo* gogo) 1304 -{ 1305 - go_assert(!this->is_variable() && !this->is_result_variable()); 1306 - std::string decl_name; 1307 - if (this->is_function_declaration() 1308 - && !this->func_declaration_value()->asm_name().empty()) 1309 - decl_name = this->func_declaration_value()->asm_name(); 1310 - else if (this->is_type() 1311 - && Linemap::is_predeclared_location(this->type_value()->location())) 1312 - { 1313 - // We don't need the package name for builtin types. 1314 - decl_name = Gogo::unpack_hidden_name(this->name_); 1315 - } 1316 - else 1317 - { 1318 - std::string package_name; 1319 - if (this->package_ == NULL) 1320 - package_name = gogo->package_name(); 1321 - else 1322 - package_name = this->package_->package_name(); 1323 - 1324 - // Note that this will be misleading if this is an unexported 1325 - // method generated for an embedded imported type. In that case 1326 - // the unexported method should have the package name of the 1327 - // package from which it is imported, but we are going to give 1328 - // it our package name. Fixing this would require knowing the 1329 - // package name, but we only know the package path. It might be 1330 - // better to use package paths here anyhow. This doesn't affect 1331 - // the assembler code, because we always set that name in 1332 - // Function::get_or_make_decl anyhow. FIXME. 1333 - 1334 - decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_); 1335 - 1336 - Function_type* fntype; 1337 - if (this->is_function()) 1338 - fntype = this->func_value()->type(); 1339 - else if (this->is_function_declaration()) 1340 - fntype = this->func_declaration_value()->type(); 1341 - else 1342 - fntype = NULL; 1343 - if (fntype != NULL && fntype->is_method()) 1344 - { 1345 - decl_name.push_back('.'); 1346 - decl_name.append(fntype->receiver()->type()->mangled_name(gogo)); 1347 - } 1348 - } 1349 - if (this->is_type()) 1350 - { 1351 - unsigned int index; 1352 - const Named_object* in_function = this->type_value()->in_function(&index); 1353 - if (in_function != NULL) 1354 - { 1355 - decl_name += '$' + Gogo::unpack_hidden_name(in_function->name()); 1356 - if (index > 0) 1357 - { 1358 - char buf[30]; 1359 - snprintf(buf, sizeof buf, "%u", index); 1360 - decl_name += '$'; 1361 - decl_name += buf; 1362 - } 1363 - } 1364 - } 1365 - return get_identifier_from_string(decl_name); 1366 -} 1367 - 1368 // Get a tree for a named object. 1369 1370 tree 1371 @@ -1067,11 +999,6 @@ 1372 return error_mark_node; 1373 } 1374 1375 - tree name; 1376 - if (this->classification_ == NAMED_OBJECT_TYPE) 1377 - name = NULL_TREE; 1378 - else 1379 - name = this->get_id(gogo); 1380 tree decl; 1381 switch (this->classification_) 1382 { 1383 @@ -1099,6 +1026,7 @@ 1384 decl = error_mark_node; 1385 else if (INTEGRAL_TYPE_P(TREE_TYPE(expr_tree))) 1386 { 1387 + tree name = get_identifier_from_string(this->get_id(gogo)); 1388 decl = build_decl(named_constant->location().gcc_location(), 1389 CONST_DECL, name, TREE_TYPE(expr_tree)); 1390 DECL_INITIAL(decl) = expr_tree; 1391 @@ -1161,7 +1089,7 @@ 1392 case NAMED_OBJECT_FUNC: 1393 { 1394 Function* func = this->u_.func_value; 1395 - decl = func->get_or_make_decl(gogo, this, name); 1396 + decl = function_to_tree(func->get_or_make_decl(gogo, this)); 1397 if (decl != error_mark_node) 1398 { 1399 if (func->block() != NULL) 1400 @@ -1286,123 +1214,12 @@ 1401 return block_tree; 1402 } 1403 1404 -// Get a tree for a function decl. 1405 +// Get the backend representation. 1406 1407 -tree 1408 -Function::get_or_make_decl(Gogo* gogo, Named_object* no, tree id) 1409 +Bfunction* 1410 +Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no) 1411 { 1412 - if (this->fndecl_ == NULL_TREE) 1413 - { 1414 - tree functype = type_to_tree(this->type_->get_backend(gogo)); 1415 - 1416 - if (functype != error_mark_node) 1417 - { 1418 - // The type of a function comes back as a pointer to a 1419 - // struct whose first field is the function, but we want the 1420 - // real function type for a function declaration. 1421 - go_assert(POINTER_TYPE_P(functype) 1422 - && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE); 1423 - functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype))); 1424 - go_assert(FUNCTION_POINTER_TYPE_P(functype)); 1425 - functype = TREE_TYPE(functype); 1426 - } 1427 - 1428 - if (functype == error_mark_node) 1429 - this->fndecl_ = error_mark_node; 1430 - else 1431 - { 1432 - tree decl = build_decl(this->location().gcc_location(), FUNCTION_DECL, 1433 - id, functype); 1434 - 1435 - this->fndecl_ = decl; 1436 - 1437 - if (no->package() != NULL) 1438 - ; 1439 - else if (this->enclosing_ != NULL || Gogo::is_thunk(no)) 1440 - ; 1441 - else if (Gogo::unpack_hidden_name(no->name()) == "init" 1442 - && !this->type_->is_method()) 1443 - ; 1444 - else if (Gogo::unpack_hidden_name(no->name()) == "main" 1445 - && gogo->is_main_package()) 1446 - TREE_PUBLIC(decl) = 1; 1447 - // Methods have to be public even if they are hidden because 1448 - // they can be pulled into type descriptors when using 1449 - // anonymous fields. 1450 - else if (!Gogo::is_hidden_name(no->name()) 1451 - || this->type_->is_method()) 1452 - { 1453 - TREE_PUBLIC(decl) = 1; 1454 - std::string pkgpath = gogo->pkgpath_symbol(); 1455 - if (this->type_->is_method() 1456 - && Gogo::is_hidden_name(no->name()) 1457 - && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath()) 1458 - { 1459 - // This is a method we created for an unexported 1460 - // method of an imported embedded type. We need to 1461 - // use the pkgpath of the imported package to avoid 1462 - // a possible name collision. See bug478 for a test 1463 - // case. 1464 - pkgpath = Gogo::hidden_name_pkgpath(no->name()); 1465 - pkgpath = Gogo::pkgpath_for_symbol(pkgpath); 1466 - } 1467 - 1468 - std::string asm_name = pkgpath; 1469 - asm_name.append(1, '.'); 1470 - asm_name.append(Gogo::unpack_hidden_name(no->name())); 1471 - if (this->type_->is_method()) 1472 - { 1473 - asm_name.append(1, '.'); 1474 - Type* rtype = this->type_->receiver()->type(); 1475 - asm_name.append(rtype->mangled_name(gogo)); 1476 - } 1477 - SET_DECL_ASSEMBLER_NAME(decl, 1478 - get_identifier_from_string(asm_name)); 1479 - } 1480 - 1481 - // Why do we have to do this in the frontend? 1482 - tree restype = TREE_TYPE(functype); 1483 - tree resdecl = 1484 - build_decl(this->location().gcc_location(), RESULT_DECL, NULL_TREE, 1485 - restype); 1486 - DECL_ARTIFICIAL(resdecl) = 1; 1487 - DECL_IGNORED_P(resdecl) = 1; 1488 - DECL_CONTEXT(resdecl) = decl; 1489 - DECL_RESULT(decl) = resdecl; 1490 - 1491 - // If a function calls the predeclared recover function, we 1492 - // can't inline it, because recover behaves differently in a 1493 - // function passed directly to defer. If this is a recover 1494 - // thunk that we built to test whether a function can be 1495 - // recovered, we can't inline it, because that will mess up 1496 - // our return address comparison. 1497 - if (this->calls_recover_ || this->is_recover_thunk_) 1498 - DECL_UNINLINABLE(decl) = 1; 1499 - 1500 - // If this is a thunk created to call a function which calls 1501 - // the predeclared recover function, we need to disable 1502 - // stack splitting for the thunk. 1503 - if (this->is_recover_thunk_) 1504 - { 1505 - tree attr = get_identifier("__no_split_stack__"); 1506 - DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE); 1507 - } 1508 - 1509 - if (this->in_unique_section_) 1510 - resolve_unique_section (decl, 0, 1); 1511 - 1512 - go_preserve_from_gc(decl); 1513 - } 1514 - } 1515 - return this->fndecl_; 1516 -} 1517 - 1518 -// Get a tree for a function declaration. 1519 - 1520 -tree 1521 -Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no, tree id) 1522 -{ 1523 - if (this->fndecl_ == NULL_TREE) 1524 + if (this->fndecl_ == NULL) 1525 { 1526 // Let Go code use an asm declaration to pick up a builtin 1527 // function. 1528 @@ -1412,56 +1229,44 @@ 1529 builtin_functions.find(this->asm_name_); 1530 if (p != builtin_functions.end()) 1531 { 1532 - this->fndecl_ = p->second; 1533 + this->fndecl_ = tree_to_function(p->second); 1534 return this->fndecl_; 1535 } 1536 } 1537 1538 - tree functype = type_to_tree(this->fntype_->get_backend(gogo)); 1539 + std::string asm_name; 1540 + if (this->asm_name_.empty()) 1541 + { 1542 + asm_name = (no->package() == NULL 1543 + ? gogo->pkgpath_symbol() 1544 + : no->package()->pkgpath_symbol()); 1545 + asm_name.append(1, '.'); 1546 + asm_name.append(Gogo::unpack_hidden_name(no->name())); 1547 + if (this->fntype_->is_method()) 1548 + { 1549 + asm_name.append(1, '.'); 1550 + Type* rtype = this->fntype_->receiver()->type(); 1551 + asm_name.append(rtype->mangled_name(gogo)); 1552 + } 1553 + } 1554 + 1555 + Btype* functype = this->fntype_->get_backend_fntype(gogo); 1556 + this->fndecl_ = 1557 + gogo->backend()->function(functype, no->get_id(gogo), asm_name, 1558 + true, true, true, false, false, 1559 + this->location()); 1560 + } 1561 1562 - if (functype != error_mark_node) 1563 - { 1564 - // The type of a function comes back as a pointer to a 1565 - // struct whose first field is the function, but we want the 1566 - // real function type for a function declaration. 1567 - go_assert(POINTER_TYPE_P(functype) 1568 - && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE); 1569 - functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype))); 1570 - go_assert(FUNCTION_POINTER_TYPE_P(functype)); 1571 - functype = TREE_TYPE(functype); 1572 - } 1573 + return this->fndecl_; 1574 +} 1575 1576 - tree decl; 1577 - if (functype == error_mark_node) 1578 - decl = error_mark_node; 1579 - else 1580 - { 1581 - decl = build_decl(this->location().gcc_location(), FUNCTION_DECL, id, 1582 - functype); 1583 - TREE_PUBLIC(decl) = 1; 1584 - DECL_EXTERNAL(decl) = 1; 1585 +// Return the function's decl after it has been built. 1586 1587 - if (this->asm_name_.empty()) 1588 - { 1589 - std::string asm_name = (no->package() == NULL 1590 - ? gogo->pkgpath_symbol() 1591 - : no->package()->pkgpath_symbol()); 1592 - asm_name.append(1, '.'); 1593 - asm_name.append(Gogo::unpack_hidden_name(no->name())); 1594 - if (this->fntype_->is_method()) 1595 - { 1596 - asm_name.append(1, '.'); 1597 - Type* rtype = this->fntype_->receiver()->type(); 1598 - asm_name.append(rtype->mangled_name(gogo)); 1599 - } 1600 - SET_DECL_ASSEMBLER_NAME(decl, 1601 - get_identifier_from_string(asm_name)); 1602 - } 1603 - } 1604 - this->fndecl_ = decl; 1605 - go_preserve_from_gc(decl); 1606 - } 1607 - return this->fndecl_; 1608 +tree 1609 +Function::get_decl() const 1610 +{ 1611 + go_assert(this->fndecl_ != NULL); 1612 + return function_to_tree(this->fndecl_); 1613 } 1614 1615 // We always pass the receiver to a method as a pointer. If the 1616 @@ -1558,7 +1363,7 @@ 1617 void 1618 Function::build_tree(Gogo* gogo, Named_object* named_function) 1619 { 1620 - tree fndecl = this->fndecl_; 1621 + tree fndecl = this->get_decl(); 1622 go_assert(fndecl != NULL_TREE); 1623 1624 tree params = NULL_TREE; 1625 @@ -1796,7 +1601,7 @@ 1626 set = NULL_TREE; 1627 else 1628 set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node, 1629 - DECL_RESULT(this->fndecl_), retval); 1630 + DECL_RESULT(this->get_decl()), retval); 1631 tree ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR, 1632 void_type_node, set); 1633 append_to_statement_list(ret_stmt, &stmt_list); 1634 @@ -1851,7 +1656,7 @@ 1635 retval = this->return_value(gogo, named_function, end_loc, 1636 &stmt_list); 1637 set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node, 1638 - DECL_RESULT(this->fndecl_), retval); 1639 + DECL_RESULT(this->get_decl()), retval); 1640 ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR, 1641 void_type_node, set); 1642 1643 @@ -1869,7 +1674,7 @@ 1644 *fini = stmt_list; 1645 } 1646 1647 -// Return the value to assign to DECL_RESULT(this->fndecl_). This may 1648 +// Return the value to assign to DECL_RESULT(this->get_decl()). This may 1649 // also add statements to STMT_LIST, which need to be executed before 1650 // the assignment. This is used for a return statement with no 1651 // explicit values. 1652 @@ -1902,7 +1707,7 @@ 1653 } 1654 else 1655 { 1656 - tree rettype = TREE_TYPE(DECL_RESULT(this->fndecl_)); 1657 + tree rettype = TREE_TYPE(DECL_RESULT(this->get_decl())); 1658 retval = create_tmp_var(rettype, "RESULT"); 1659 tree field = TYPE_FIELDS(rettype); 1660 int index = 0; 1661 @@ -2323,18 +2128,14 @@ 1662 go_assert(m != NULL); 1663 1664 Named_object* no = m->named_object(); 1665 - 1666 - tree fnid = no->get_id(this); 1667 - 1668 - tree fndecl; 1669 + Bfunction* bf; 1670 if (no->is_function()) 1671 - fndecl = no->func_value()->get_or_make_decl(this, no, fnid); 1672 + bf = no->func_value()->get_or_make_decl(this, no); 1673 else if (no->is_function_declaration()) 1674 - fndecl = no->func_declaration_value()->get_or_make_decl(this, no, 1675 - fnid); 1676 + bf = no->func_declaration_value()->get_or_make_decl(this, no); 1677 else 1678 go_unreachable(); 1679 - fndecl = build_fold_addr_expr(fndecl); 1680 + tree fndecl = build_fold_addr_expr(function_to_tree(bf)); 1681 1682 elt = pointers->quick_push(empty); 1683 elt->index = size_int(i); 1684 @@ -2353,10 +2154,11 @@ 1685 TREE_CONSTANT(decl) = 1; 1686 DECL_INITIAL(decl) = constructor; 1687 1688 - // If the interface type has hidden methods, then this is the only 1689 - // definition of the table. Otherwise it is a comdat table which 1690 - // may be defined in multiple packages. 1691 - if (has_hidden_methods) 1692 + // If the interface type has hidden methods, and the table is for a 1693 + // named type, then this is the only definition of the table. 1694 + // Otherwise it is a comdat table which may be defined in multiple 1695 + // packages. 1696 + if (has_hidden_methods && type->named_type() != NULL) 1697 TREE_PUBLIC(decl) = 1; 1698 else 1699 { 754 1700 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/gogo.cc gcc-4.8.2/gcc/go/gofrontend/gogo.cc 755 --- gcc-4.8.2.orig/gcc/go/gofrontend/gogo.cc 2013-09-28 15:23:56.000000000 -0500756 +++ gcc-4.8.2/gcc/go/gofrontend/gogo.cc 2013-1 0-16 12:27:53.564070000 -05001701 --- gcc-4.8.2.orig/gcc/go/gofrontend/gogo.cc 2013-09-28 20:23:56.000000000 +0000 1702 +++ gcc-4.8.2/gcc/go/gofrontend/gogo.cc 2013-11-01 16:12:33.967792637 +0000 757 1703 @@ -3320,7 +3320,8 @@ 758 1704 closure_var_(NULL), block_(block), location_(location), labels_(), … … 924 1870 Bindings::Bindings(Bindings* enclosing) 925 1871 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/gogo.h gcc-4.8.2/gcc/go/gofrontend/gogo.h 926 --- gcc-4.8.2.orig/gcc/go/gofrontend/gogo.h 2013-09-28 15:23:56.000000000 -0500927 +++ gcc-4.8.2/gcc/go/gofrontend/gogo.h 2013-1 0-16 12:27:53.564070000 -05001872 --- gcc-4.8.2.orig/gcc/go/gofrontend/gogo.h 2013-09-28 20:23:56.000000000 +0000 1873 +++ gcc-4.8.2/gcc/go/gofrontend/gogo.h 2013-11-01 16:12:33.971793325 +0000 928 1874 @@ -48,6 +48,7 @@ 929 1875 class Bblock; … … 1024 1970 1025 1971 // Return a tree representing this object. 1026 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/gogo-tree.cc gcc-4.8.2/gcc/go/gofrontend/gogo-tree.cc1027 --- gcc-4.8.2.orig/gcc/go/gofrontend/gogo-tree.cc 2013-09-28 15:23:56.000000000 -05001028 +++ gcc-4.8.2/gcc/go/gofrontend/gogo-tree.cc 2013-10-16 12:27:53.564070000 -05001029 @@ -985,74 +985,6 @@1030 delete[] vec;1031 }1032 1033 -// Get a tree for the identifier for a named object.1034 -1035 -tree1036 -Named_object::get_id(Gogo* gogo)1037 -{1038 - go_assert(!this->is_variable() && !this->is_result_variable());1039 - std::string decl_name;1040 - if (this->is_function_declaration()1041 - && !this->func_declaration_value()->asm_name().empty())1042 - decl_name = this->func_declaration_value()->asm_name();1043 - else if (this->is_type()1044 - && Linemap::is_predeclared_location(this->type_value()->location()))1045 - {1046 - // We don't need the package name for builtin types.1047 - decl_name = Gogo::unpack_hidden_name(this->name_);1048 - }1049 - else1050 - {1051 - std::string package_name;1052 - if (this->package_ == NULL)1053 - package_name = gogo->package_name();1054 - else1055 - package_name = this->package_->package_name();1056 -1057 - // Note that this will be misleading if this is an unexported1058 - // method generated for an embedded imported type. In that case1059 - // the unexported method should have the package name of the1060 - // package from which it is imported, but we are going to give1061 - // it our package name. Fixing this would require knowing the1062 - // package name, but we only know the package path. It might be1063 - // better to use package paths here anyhow. This doesn't affect1064 - // the assembler code, because we always set that name in1065 - // Function::get_or_make_decl anyhow. FIXME.1066 -1067 - decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);1068 -1069 - Function_type* fntype;1070 - if (this->is_function())1071 - fntype = this->func_value()->type();1072 - else if (this->is_function_declaration())1073 - fntype = this->func_declaration_value()->type();1074 - else1075 - fntype = NULL;1076 - if (fntype != NULL && fntype->is_method())1077 - {1078 - decl_name.push_back('.');1079 - decl_name.append(fntype->receiver()->type()->mangled_name(gogo));1080 - }1081 - }1082 - if (this->is_type())1083 - {1084 - unsigned int index;1085 - const Named_object* in_function = this->type_value()->in_function(&index);1086 - if (in_function != NULL)1087 - {1088 - decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());1089 - if (index > 0)1090 - {1091 - char buf[30];1092 - snprintf(buf, sizeof buf, "%u", index);1093 - decl_name += '$';1094 - decl_name += buf;1095 - }1096 - }1097 - }1098 - return get_identifier_from_string(decl_name);1099 -}1100 -1101 // Get a tree for a named object.1102 1103 tree1104 @@ -1067,11 +999,6 @@1105 return error_mark_node;1106 }1107 1108 - tree name;1109 - if (this->classification_ == NAMED_OBJECT_TYPE)1110 - name = NULL_TREE;1111 - else1112 - name = this->get_id(gogo);1113 tree decl;1114 switch (this->classification_)1115 {1116 @@ -1099,6 +1026,7 @@1117 decl = error_mark_node;1118 else if (INTEGRAL_TYPE_P(TREE_TYPE(expr_tree)))1119 {1120 + tree name = get_identifier_from_string(this->get_id(gogo));1121 decl = build_decl(named_constant->location().gcc_location(),1122 CONST_DECL, name, TREE_TYPE(expr_tree));1123 DECL_INITIAL(decl) = expr_tree;1124 @@ -1161,7 +1089,7 @@1125 case NAMED_OBJECT_FUNC:1126 {1127 Function* func = this->u_.func_value;1128 - decl = func->get_or_make_decl(gogo, this, name);1129 + decl = function_to_tree(func->get_or_make_decl(gogo, this));1130 if (decl != error_mark_node)1131 {1132 if (func->block() != NULL)1133 @@ -1286,123 +1214,12 @@1134 return block_tree;1135 }1136 1137 -// Get a tree for a function decl.1138 +// Get the backend representation.1139 1140 -tree1141 -Function::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)1142 +Bfunction*1143 +Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no)1144 {1145 - if (this->fndecl_ == NULL_TREE)1146 - {1147 - tree functype = type_to_tree(this->type_->get_backend(gogo));1148 -1149 - if (functype != error_mark_node)1150 - {1151 - // The type of a function comes back as a pointer to a1152 - // struct whose first field is the function, but we want the1153 - // real function type for a function declaration.1154 - go_assert(POINTER_TYPE_P(functype)1155 - && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);1156 - functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));1157 - go_assert(FUNCTION_POINTER_TYPE_P(functype));1158 - functype = TREE_TYPE(functype);1159 - }1160 -1161 - if (functype == error_mark_node)1162 - this->fndecl_ = error_mark_node;1163 - else1164 - {1165 - tree decl = build_decl(this->location().gcc_location(), FUNCTION_DECL,1166 - id, functype);1167 -1168 - this->fndecl_ = decl;1169 -1170 - if (no->package() != NULL)1171 - ;1172 - else if (this->enclosing_ != NULL || Gogo::is_thunk(no))1173 - ;1174 - else if (Gogo::unpack_hidden_name(no->name()) == "init"1175 - && !this->type_->is_method())1176 - ;1177 - else if (Gogo::unpack_hidden_name(no->name()) == "main"1178 - && gogo->is_main_package())1179 - TREE_PUBLIC(decl) = 1;1180 - // Methods have to be public even if they are hidden because1181 - // they can be pulled into type descriptors when using1182 - // anonymous fields.1183 - else if (!Gogo::is_hidden_name(no->name())1184 - || this->type_->is_method())1185 - {1186 - TREE_PUBLIC(decl) = 1;1187 - std::string pkgpath = gogo->pkgpath_symbol();1188 - if (this->type_->is_method()1189 - && Gogo::is_hidden_name(no->name())1190 - && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())1191 - {1192 - // This is a method we created for an unexported1193 - // method of an imported embedded type. We need to1194 - // use the pkgpath of the imported package to avoid1195 - // a possible name collision. See bug478 for a test1196 - // case.1197 - pkgpath = Gogo::hidden_name_pkgpath(no->name());1198 - pkgpath = Gogo::pkgpath_for_symbol(pkgpath);1199 - }1200 -1201 - std::string asm_name = pkgpath;1202 - asm_name.append(1, '.');1203 - asm_name.append(Gogo::unpack_hidden_name(no->name()));1204 - if (this->type_->is_method())1205 - {1206 - asm_name.append(1, '.');1207 - Type* rtype = this->type_->receiver()->type();1208 - asm_name.append(rtype->mangled_name(gogo));1209 - }1210 - SET_DECL_ASSEMBLER_NAME(decl,1211 - get_identifier_from_string(asm_name));1212 - }1213 -1214 - // Why do we have to do this in the frontend?1215 - tree restype = TREE_TYPE(functype);1216 - tree resdecl =1217 - build_decl(this->location().gcc_location(), RESULT_DECL, NULL_TREE,1218 - restype);1219 - DECL_ARTIFICIAL(resdecl) = 1;1220 - DECL_IGNORED_P(resdecl) = 1;1221 - DECL_CONTEXT(resdecl) = decl;1222 - DECL_RESULT(decl) = resdecl;1223 -1224 - // If a function calls the predeclared recover function, we1225 - // can't inline it, because recover behaves differently in a1226 - // function passed directly to defer. If this is a recover1227 - // thunk that we built to test whether a function can be1228 - // recovered, we can't inline it, because that will mess up1229 - // our return address comparison.1230 - if (this->calls_recover_ || this->is_recover_thunk_)1231 - DECL_UNINLINABLE(decl) = 1;1232 -1233 - // If this is a thunk created to call a function which calls1234 - // the predeclared recover function, we need to disable1235 - // stack splitting for the thunk.1236 - if (this->is_recover_thunk_)1237 - {1238 - tree attr = get_identifier("__no_split_stack__");1239 - DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);1240 - }1241 -1242 - if (this->in_unique_section_)1243 - resolve_unique_section (decl, 0, 1);1244 -1245 - go_preserve_from_gc(decl);1246 - }1247 - }1248 - return this->fndecl_;1249 -}1250 -1251 -// Get a tree for a function declaration.1252 -1253 -tree1254 -Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)1255 -{1256 - if (this->fndecl_ == NULL_TREE)1257 + if (this->fndecl_ == NULL)1258 {1259 // Let Go code use an asm declaration to pick up a builtin1260 // function.1261 @@ -1412,56 +1229,44 @@1262 builtin_functions.find(this->asm_name_);1263 if (p != builtin_functions.end())1264 {1265 - this->fndecl_ = p->second;1266 + this->fndecl_ = tree_to_function(p->second);1267 return this->fndecl_;1268 }1269 }1270 1271 - tree functype = type_to_tree(this->fntype_->get_backend(gogo));1272 + std::string asm_name;1273 + if (this->asm_name_.empty())1274 + {1275 + asm_name = (no->package() == NULL1276 + ? gogo->pkgpath_symbol()1277 + : no->package()->pkgpath_symbol());1278 + asm_name.append(1, '.');1279 + asm_name.append(Gogo::unpack_hidden_name(no->name()));1280 + if (this->fntype_->is_method())1281 + {1282 + asm_name.append(1, '.');1283 + Type* rtype = this->fntype_->receiver()->type();1284 + asm_name.append(rtype->mangled_name(gogo));1285 + }1286 + }1287 +1288 + Btype* functype = this->fntype_->get_backend_fntype(gogo);1289 + this->fndecl_ =1290 + gogo->backend()->function(functype, no->get_id(gogo), asm_name,1291 + true, true, true, false, false,1292 + this->location());1293 + }1294 1295 - if (functype != error_mark_node)1296 - {1297 - // The type of a function comes back as a pointer to a1298 - // struct whose first field is the function, but we want the1299 - // real function type for a function declaration.1300 - go_assert(POINTER_TYPE_P(functype)1301 - && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);1302 - functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));1303 - go_assert(FUNCTION_POINTER_TYPE_P(functype));1304 - functype = TREE_TYPE(functype);1305 - }1306 + return this->fndecl_;1307 +}1308 1309 - tree decl;1310 - if (functype == error_mark_node)1311 - decl = error_mark_node;1312 - else1313 - {1314 - decl = build_decl(this->location().gcc_location(), FUNCTION_DECL, id,1315 - functype);1316 - TREE_PUBLIC(decl) = 1;1317 - DECL_EXTERNAL(decl) = 1;1318 +// Return the function's decl after it has been built.1319 1320 - if (this->asm_name_.empty())1321 - {1322 - std::string asm_name = (no->package() == NULL1323 - ? gogo->pkgpath_symbol()1324 - : no->package()->pkgpath_symbol());1325 - asm_name.append(1, '.');1326 - asm_name.append(Gogo::unpack_hidden_name(no->name()));1327 - if (this->fntype_->is_method())1328 - {1329 - asm_name.append(1, '.');1330 - Type* rtype = this->fntype_->receiver()->type();1331 - asm_name.append(rtype->mangled_name(gogo));1332 - }1333 - SET_DECL_ASSEMBLER_NAME(decl,1334 - get_identifier_from_string(asm_name));1335 - }1336 - }1337 - this->fndecl_ = decl;1338 - go_preserve_from_gc(decl);1339 - }1340 - return this->fndecl_;1341 +tree1342 +Function::get_decl() const1343 +{1344 + go_assert(this->fndecl_ != NULL);1345 + return function_to_tree(this->fndecl_);1346 }1347 1348 // We always pass the receiver to a method as a pointer. If the1349 @@ -1558,7 +1363,7 @@1350 void1351 Function::build_tree(Gogo* gogo, Named_object* named_function)1352 {1353 - tree fndecl = this->fndecl_;1354 + tree fndecl = this->get_decl();1355 go_assert(fndecl != NULL_TREE);1356 1357 tree params = NULL_TREE;1358 @@ -1796,7 +1601,7 @@1359 set = NULL_TREE;1360 else1361 set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,1362 - DECL_RESULT(this->fndecl_), retval);1363 + DECL_RESULT(this->get_decl()), retval);1364 tree ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,1365 void_type_node, set);1366 append_to_statement_list(ret_stmt, &stmt_list);1367 @@ -1851,7 +1656,7 @@1368 retval = this->return_value(gogo, named_function, end_loc,1369 &stmt_list);1370 set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,1371 - DECL_RESULT(this->fndecl_), retval);1372 + DECL_RESULT(this->get_decl()), retval);1373 ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,1374 void_type_node, set);1375 1376 @@ -1869,7 +1674,7 @@1377 *fini = stmt_list;1378 }1379 1380 -// Return the value to assign to DECL_RESULT(this->fndecl_). This may1381 +// Return the value to assign to DECL_RESULT(this->get_decl()). This may1382 // also add statements to STMT_LIST, which need to be executed before1383 // the assignment. This is used for a return statement with no1384 // explicit values.1385 @@ -1902,7 +1707,7 @@1386 }1387 else1388 {1389 - tree rettype = TREE_TYPE(DECL_RESULT(this->fndecl_));1390 + tree rettype = TREE_TYPE(DECL_RESULT(this->get_decl()));1391 retval = create_tmp_var(rettype, "RESULT");1392 tree field = TYPE_FIELDS(rettype);1393 int index = 0;1394 @@ -2323,18 +2128,14 @@1395 go_assert(m != NULL);1396 1397 Named_object* no = m->named_object();1398 -1399 - tree fnid = no->get_id(this);1400 -1401 - tree fndecl;1402 + Bfunction* bf;1403 if (no->is_function())1404 - fndecl = no->func_value()->get_or_make_decl(this, no, fnid);1405 + bf = no->func_value()->get_or_make_decl(this, no);1406 else if (no->is_function_declaration())1407 - fndecl = no->func_declaration_value()->get_or_make_decl(this, no,1408 - fnid);1409 + bf = no->func_declaration_value()->get_or_make_decl(this, no);1410 else1411 go_unreachable();1412 - fndecl = build_fold_addr_expr(fndecl);1413 + tree fndecl = build_fold_addr_expr(function_to_tree(bf));1414 1415 elt = pointers->quick_push(empty);1416 elt->index = size_int(i);1417 @@ -2353,10 +2154,11 @@1418 TREE_CONSTANT(decl) = 1;1419 DECL_INITIAL(decl) = constructor;1420 1421 - // If the interface type has hidden methods, then this is the only1422 - // definition of the table. Otherwise it is a comdat table which1423 - // may be defined in multiple packages.1424 - if (has_hidden_methods)1425 + // If the interface type has hidden methods, and the table is for a1426 + // named type, then this is the only definition of the table.1427 + // Otherwise it is a comdat table which may be defined in multiple1428 + // packages.1429 + if (has_hidden_methods && type->named_type() != NULL)1430 TREE_PUBLIC(decl) = 1;1431 else1432 {1433 1972 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/import.h gcc-4.8.2/gcc/go/gofrontend/import.h 1434 --- gcc-4.8.2.orig/gcc/go/gofrontend/import.h 2012-10-3 0 19:38:49.000000000 -05001435 +++ gcc-4.8.2/gcc/go/gofrontend/import.h 2013-1 0-16 12:27:53.564070000 -05001973 --- gcc-4.8.2.orig/gcc/go/gofrontend/import.h 2012-10-31 00:38:49.000000000 +0000 1974 +++ gcc-4.8.2/gcc/go/gofrontend/import.h 2013-11-01 16:12:33.975794014 +0000 1436 1975 @@ -149,6 +149,11 @@ 1437 1976 location() const … … 1447 1986 peek_char() 1448 1987 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/lex.cc gcc-4.8.2/gcc/go/gofrontend/lex.cc 1449 --- gcc-4.8.2.orig/gcc/go/gofrontend/lex.cc 2012-12-03 0 0:57:04.000000000 -06001450 +++ gcc-4.8.2/gcc/go/gofrontend/lex.cc 2013-1 0-16 12:27:53.564070000 -05001988 --- gcc-4.8.2.orig/gcc/go/gofrontend/lex.cc 2012-12-03 06:57:04.000000000 +0000 1989 +++ gcc-4.8.2/gcc/go/gofrontend/lex.cc 2013-11-01 16:12:33.979794702 +0000 1451 1990 @@ -873,7 +873,28 @@ 1452 1991 && (cc < 'a' || cc > 'z') … … 1480 2019 { 1481 2020 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/parse.cc gcc-4.8.2/gcc/go/gofrontend/parse.cc 1482 --- gcc-4.8.2.orig/gcc/go/gofrontend/parse.cc 2013-10-08 18:54:31.000000000 -05001483 +++ gcc-4.8.2/gcc/go/gofrontend/parse.cc 2013-1 0-16 12:27:53.564070000 -05002021 --- gcc-4.8.2.orig/gcc/go/gofrontend/parse.cc 2013-10-08 23:54:31.000000000 +0000 2022 +++ gcc-4.8.2/gcc/go/gofrontend/parse.cc 2013-11-01 16:12:33.979794702 +0000 1484 2023 @@ -744,6 +744,8 @@ 1485 2024 return NULL; … … 1492 2031 if (results != NULL) 1493 2032 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/runtime.cc gcc-4.8.2/gcc/go/gofrontend/runtime.cc 1494 --- gcc-4.8.2.orig/gcc/go/gofrontend/runtime.cc 2012-12-21 09:59:27.000000000 -06001495 +++ gcc-4.8.2/gcc/go/gofrontend/runtime.cc 2013-1 0-16 12:27:53.564070000 -05002033 --- gcc-4.8.2.orig/gcc/go/gofrontend/runtime.cc 2012-12-21 15:59:27.000000000 +0000 2034 +++ gcc-4.8.2/gcc/go/gofrontend/runtime.cc 2013-11-01 16:12:34.055807784 +0000 1496 2035 @@ -42,6 +42,8 @@ 1497 2036 RFT_RUNE, … … 1523 2062 case RFT_POINTER: 1524 2063 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/runtime.def gcc-4.8.2/gcc/go/gofrontend/runtime.def 1525 --- gcc-4.8.2.orig/gcc/go/gofrontend/runtime.def 2013-06-18 18:50:42.000000000 -05001526 +++ gcc-4.8.2/gcc/go/gofrontend/runtime.def 2013-1 0-16 12:27:53.564070000 -05002064 --- gcc-4.8.2.orig/gcc/go/gofrontend/runtime.def 2013-06-18 23:50:42.000000000 +0000 2065 +++ gcc-4.8.2/gcc/go/gofrontend/runtime.def 2013-11-01 16:12:34.055807784 +0000 1527 2066 @@ -68,6 +68,12 @@ 1528 2067 P1(STRING), R1(SLICE)) … … 1539 2078 DEF_GO_RUNTIME(MAKESLICE2, "__go_make_slice2", P3(TYPE, UINTPTR, UINTPTR), 1540 2079 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/types.cc gcc-4.8.2/gcc/go/gofrontend/types.cc 1541 --- gcc-4.8.2.orig/gcc/go/gofrontend/types.cc 2013-10-02 1 4:22:30.000000000 -05001542 +++ gcc-4.8.2/gcc/go/gofrontend/types.cc 2013-1 0-17 15:08:21.970831000 -05002080 --- gcc-4.8.2.orig/gcc/go/gofrontend/types.cc 2013-10-02 19:22:30.000000000 +0000 2081 +++ gcc-4.8.2/gcc/go/gofrontend/types.cc 2013-11-01 16:12:34.063809161 +0000 1543 2082 @@ -3383,6 +3383,68 @@ 1544 2083 // Get the backend representation for a function type. … … 1775 2314 { 1776 2315 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/types.h gcc-4.8.2/gcc/go/gofrontend/types.h 1777 --- gcc-4.8.2.orig/gcc/go/gofrontend/types.h 2013-09-18 16:54:08.000000000 -05001778 +++ gcc-4.8.2/gcc/go/gofrontend/types.h 2013-1 0-17 15:08:21.970831000 -05002316 --- gcc-4.8.2.orig/gcc/go/gofrontend/types.h 2013-09-18 21:54:08.000000000 +0000 2317 +++ gcc-4.8.2/gcc/go/gofrontend/types.h 2013-11-01 16:12:34.063809161 +0000 1779 2318 @@ -1717,7 +1717,8 @@ 1780 2319 Typed_identifier_list* results, Location location) … … 1850 2389 1851 2390 // A list of struct fields. 1852 diff -Naur gcc-4.8.2.orig/gcc/go/go-gcc.cc gcc-4.8.2/gcc/go/go-gcc.cc 1853 --- gcc-4.8.2.orig/gcc/go/go-gcc.cc 2013-10-04 13:07:35.000000000 -0500 1854 +++ gcc-4.8.2/gcc/go/go-gcc.cc 2013-10-16 12:27:53.564070000 -0500 1855 @@ -232,6 +232,9 @@ 1856 Bexpression* 1857 convert_expression(Btype* type, Bexpression* expr, Location); 1858 1859 + Bexpression* 1860 + function_code_expression(Bfunction*, Location); 1861 + 1862 // Statements. 1863 1864 Bstatement* 1865 @@ -334,6 +337,17 @@ 1866 Bexpression* 1867 label_address(Blabel*, Location); 1868 1869 + // Functions. 1870 + 1871 + Bfunction* 1872 + error_function() 1873 + { return this->make_function(error_mark_node); } 1874 + 1875 + Bfunction* 1876 + function(Btype* fntype, const std::string& name, const std::string& asm_name, 1877 + bool is_visible, bool is_declaration, bool is_inlinable, 1878 + bool disable_split_stack, bool in_unique_section, Location); 1879 + 1880 private: 1881 // Make a Bexpression from a tree. 1882 Bexpression* 1883 @@ -350,6 +364,10 @@ 1884 make_type(tree t) 1885 { return new Btype(t); } 1886 1887 + Bfunction* 1888 + make_function(tree t) 1889 + { return new Bfunction(t); } 1890 + 1891 Btype* 1892 fill_in_struct(Btype*, const std::vector<Btyped_identifier>&); 1893 1894 @@ -966,6 +984,19 @@ 1895 return tree_to_expr(ret); 2391 diff -Naur gcc-4.8.2.orig/gcc/graphite-clast-to-gimple.c gcc-4.8.2/gcc/graphite-clast-to-gimple.c 2392 --- gcc-4.8.2.orig/gcc/graphite-clast-to-gimple.c 2013-01-10 20:38:27.000000000 +0000 2393 +++ gcc-4.8.2/gcc/graphite-clast-to-gimple.c 2013-11-01 16:12:34.503884898 +0000 2394 @@ -1170,8 +1170,11 @@ 2395 redirect_edge_succ_nodup (next_e, after); 2396 set_immediate_dominator (CDI_DOMINATORS, next_e->dest, next_e->src); 2397 2398 + isl_set *domain = isl_set_from_cloog_domain (stmt->domain); 2399 + int scheduling_dim = isl_set_n_dim (domain); 2400 + 2401 if (flag_loop_parallelize_all 2402 - && loop_is_parallel_p (loop, bb_pbb_mapping, level)) 2403 + && loop_is_parallel_p (loop, bb_pbb_mapping, scheduling_dim)) 2404 loop->can_be_parallel = true; 2405 2406 return last_e; 2407 diff -Naur gcc-4.8.2.orig/gcc/graphite-dependences.c gcc-4.8.2/gcc/graphite-dependences.c 2408 --- gcc-4.8.2.orig/gcc/graphite-dependences.c 2013-01-10 20:38:27.000000000 +0000 2409 +++ gcc-4.8.2/gcc/graphite-dependences.c 2013-11-01 16:12:34.503884898 +0000 2410 @@ -297,7 +297,7 @@ 2411 int depth) 2412 { 2413 bool res; 2414 - int idx, i; 2415 + int i; 2416 isl_space *space; 2417 isl_map *lex, *x; 2418 isl_constraint *ineq; 2419 @@ -312,13 +312,12 @@ 2420 space = isl_map_get_space (x); 2421 ineq = isl_inequality_alloc (isl_local_space_from_space (space)); 2422 2423 - idx = 2 * depth + 1; 2424 - for (i = 0; i < idx; i++) 2425 + for (i = 0; i < depth - 1; i++) 2426 lex = isl_map_equate (lex, isl_dim_in, i, isl_dim_out, i); 2427 2428 /* in + 1 <= out */ 2429 - ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_out, idx, 1); 2430 - ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_in, idx, -1); 2431 + ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_out, depth - 1, 1); 2432 + ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_in, depth - 1, -1); 2433 ineq = isl_constraint_set_constant_si (ineq, -1); 2434 lex = isl_map_add_constraint (lex, ineq); 2435 x = isl_map_intersect (x, lex); 2436 diff -Naur gcc-4.8.2.orig/gcc/ipa-prop.c gcc-4.8.2/gcc/ipa-prop.c 2437 --- gcc-4.8.2.orig/gcc/ipa-prop.c 2013-06-24 12:57:52.000000000 +0000 2438 +++ gcc-4.8.2/gcc/ipa-prop.c 2013-11-01 16:12:34.071810538 +0000 2439 @@ -2126,7 +2126,6 @@ 2440 we may create the first reference to the object in the unit. */ 2441 if (!callee || callee->global.inlined_to) 2442 { 2443 - struct cgraph_node *first_clone = callee; 2444 2445 /* We are better to ensure we can refer to it. 2446 In the case of static functions we are out of luck, since we already 2447 @@ -2142,31 +2141,7 @@ 2448 xstrdup (cgraph_node_name (ie->callee)), ie->callee->uid); 2449 return NULL; 2450 } 2451 - 2452 - /* Create symbol table node. Even if inline clone exists, we can not take 2453 - it as a target of non-inlined call. */ 2454 - callee = cgraph_create_node (target); 2455 - 2456 - /* OK, we previously inlined the function, then removed the offline copy and 2457 - now we want it back for external call. This can happen when devirtualizing 2458 - while inlining function called once that happens after extern inlined and 2459 - virtuals are already removed. In this case introduce the external node 2460 - and make it available for call. */ 2461 - if (first_clone) 2462 - { 2463 - first_clone->clone_of = callee; 2464 - callee->clones = first_clone; 2465 - symtab_prevail_in_asm_name_hash ((symtab_node)callee); 2466 - symtab_insert_node_to_hashtable ((symtab_node)callee); 2467 - if (dump_file) 2468 - fprintf (dump_file, "ipa-prop: Introduced new external node " 2469 - "(%s/%i) and turned into root of the clone tree.\n", 2470 - xstrdup (cgraph_node_name (callee)), callee->uid); 2471 - } 2472 - else if (dump_file) 2473 - fprintf (dump_file, "ipa-prop: Introduced new external node " 2474 - "(%s/%i).\n", 2475 - xstrdup (cgraph_node_name (callee)), callee->uid); 2476 + callee = cgraph_get_create_real_symbol_node (target); 2477 } 2478 ipa_check_create_node_params (); 2479 2480 diff -Naur gcc-4.8.2.orig/gcc/optabs.c gcc-4.8.2/gcc/optabs.c 2481 --- gcc-4.8.2.orig/gcc/optabs.c 2013-03-09 07:54:02.000000000 +0000 2482 +++ gcc-4.8.2/gcc/optabs.c 2013-11-01 16:12:34.075811227 +0000 2483 @@ -7035,8 +7035,7 @@ 2484 2485 create_output_operand (&ops[0], target, mode); 2486 create_fixed_operand (&ops[1], mem); 2487 - /* VAL may have been promoted to a wider mode. Shrink it if so. */ 2488 - create_convert_operand_to (&ops[2], val, mode, true); 2489 + create_input_operand (&ops[2], val, mode); 2490 create_integer_operand (&ops[3], model); 2491 if (maybe_expand_insn (icode, 4, ops)) 2492 return ops[0].value; 2493 @@ -7075,8 +7074,7 @@ 2494 struct expand_operand ops[3]; 2495 create_output_operand (&ops[0], target, mode); 2496 create_fixed_operand (&ops[1], mem); 2497 - /* VAL may have been promoted to a wider mode. Shrink it if so. */ 2498 - create_convert_operand_to (&ops[2], val, mode, true); 2499 + create_input_operand (&ops[2], val, mode); 2500 if (maybe_expand_insn (icode, 3, ops)) 2501 return ops[0].value; 2502 } 2503 @@ -7118,8 +7116,6 @@ 2504 { 2505 if (!target || !register_operand (target, mode)) 2506 target = gen_reg_rtx (mode); 2507 - if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode) 2508 - val = convert_modes (mode, GET_MODE (val), val, 1); 2509 if (expand_compare_and_swap_loop (mem, target, val, NULL_RTX)) 2510 return target; 2511 } 2512 @@ -7331,8 +7327,8 @@ 2513 create_output_operand (&ops[0], target_bool, bool_mode); 2514 create_output_operand (&ops[1], target_oval, mode); 2515 create_fixed_operand (&ops[2], mem); 2516 - create_convert_operand_to (&ops[3], expected, mode, true); 2517 - create_convert_operand_to (&ops[4], desired, mode, true); 2518 + create_input_operand (&ops[3], expected, mode); 2519 + create_input_operand (&ops[4], desired, mode); 2520 create_integer_operand (&ops[5], is_weak); 2521 create_integer_operand (&ops[6], succ_model); 2522 create_integer_operand (&ops[7], fail_model); 2523 @@ -7353,8 +7349,8 @@ 2524 2525 create_output_operand (&ops[0], target_oval, mode); 2526 create_fixed_operand (&ops[1], mem); 2527 - create_convert_operand_to (&ops[2], expected, mode, true); 2528 - create_convert_operand_to (&ops[3], desired, mode, true); 2529 + create_input_operand (&ops[2], expected, mode); 2530 + create_input_operand (&ops[3], desired, mode); 2531 if (!maybe_expand_insn (icode, 4, ops)) 2532 return false; 2533 2534 diff -Naur gcc-4.8.2.orig/gcc/recog.c gcc-4.8.2/gcc/recog.c 2535 --- gcc-4.8.2.orig/gcc/recog.c 2013-08-05 20:24:39.000000000 +0000 2536 +++ gcc-4.8.2/gcc/recog.c 2013-11-01 16:12:34.219836014 +0000 2537 @@ -3061,6 +3061,9 @@ 2538 return 1; 1896 2539 } 1897 2540 1898 +// Get the address of a function. 1899 + 1900 +Bexpression* 1901 +Gcc_backend::function_code_expression(Bfunction* bfunc, Location location) 2541 +/* Regno offset to be used in the register search. */ 2542 +static int search_ofs; 2543 + 2544 /* Try to find a hard register of mode MODE, matching the register class in 2545 CLASS_STR, which is available at the beginning of insn CURRENT_INSN and 2546 remains available until the end of LAST_INSN. LAST_INSN may be NULL_RTX, 2547 @@ -3076,7 +3079,6 @@ 2548 peep2_find_free_register (int from, int to, const char *class_str, 2549 enum machine_mode mode, HARD_REG_SET *reg_set) 2550 { 2551 - static int search_ofs; 2552 enum reg_class cl; 2553 HARD_REG_SET live; 2554 df_ref *def_rec; 2555 @@ -3541,6 +3543,7 @@ 2556 /* Initialize the regsets we're going to use. */ 2557 for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i) 2558 peep2_insn_data[i].live_before = BITMAP_ALLOC (®_obstack); 2559 + search_ofs = 0; 2560 live = BITMAP_ALLOC (®_obstack); 2561 2562 FOR_EACH_BB_REVERSE (bb) 2563 diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/decltype57.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/decltype57.C 2564 --- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/decltype57.C 1970-01-01 00:00:00.000000000 +0000 2565 +++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/decltype57.C 2013-11-01 16:12:34.223836702 +0000 2566 @@ -0,0 +1,8 @@ 2567 +// PR c++/58633 2568 +// { dg-do compile { target c++11 } } 2569 + 2570 +void foo(int i) 1902 2571 +{ 1903 + tree func = bfunc->get_tree(); 1904 + if (func == error_mark_node) 1905 + return this->error_expression(); 1906 + 1907 + tree ret = build_fold_addr_expr_loc(location.gcc_location(), func); 1908 + return this->make_expression(ret); 2572 + typedef int I; 2573 + decltype(i.I::~I())* p; 1909 2574 +} 1910 + 1911 // An expression as a statement. 1912 1913 Bstatement* 1914 @@ -1724,6 +1755,56 @@ 1915 return this->make_expression(ret); 2575 diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/enum18.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/enum18.C 2576 --- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/enum18.C 2011-05-28 22:01:28.000000000 +0000 2577 +++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/enum18.C 2013-11-01 16:12:34.227837390 +0000 2578 @@ -4,5 +4,5 @@ 2579 int main(void) { 2580 enum e {}; 2581 e ev; 2582 - ev.e::~e_u(); // { dg-error "e_u. has not been declared" } 2583 + ev.e::~e_u(); // { dg-error "" } 1916 2584 } 1917 1918 +// Declare or define a new function. 1919 + 1920 +Bfunction* 1921 +Gcc_backend::function(Btype* fntype, const std::string& name, 1922 + const std::string& asm_name, bool is_visible, 1923 + bool is_declaration, bool is_inlinable, 1924 + bool disable_split_stack, bool in_unique_section, 1925 + Location location) 2585 diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C 2586 --- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C 1970-01-01 00:00:00.000000000 +0000 2587 +++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C 2013-11-01 16:12:34.227837390 +0000 2588 @@ -0,0 +1,7 @@ 2589 +// PR c++/58596 2590 +// { dg-do compile { target c++11 } } 2591 + 2592 +struct A 1926 2593 +{ 1927 + tree functype = fntype->get_tree(); 1928 + if (functype != error_mark_node) 2594 + int i = [] { return decltype(i)(); }(); 2595 +}; 2596 diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/tm/noexcept-6.C gcc-4.8.2/gcc/testsuite/g++.dg/tm/noexcept-6.C 2597 --- gcc-4.8.2.orig/gcc/testsuite/g++.dg/tm/noexcept-6.C 1970-01-01 00:00:00.000000000 +0000 2598 +++ gcc-4.8.2/gcc/testsuite/g++.dg/tm/noexcept-6.C 2013-11-01 16:12:34.227837390 +0000 2599 @@ -0,0 +1,23 @@ 2600 +// { dg-do compile } 2601 +// { dg-options "-fno-exceptions -fgnu-tm -O -std=c++0x -fdump-tree-tmlower" } 2602 + 2603 +struct TrueFalse 2604 +{ 2605 + static constexpr bool v() { return true; } 2606 +}; 2607 + 2608 +int global; 2609 + 2610 +template<typename T> int foo() 2611 +{ 2612 + return __transaction_atomic noexcept(T::v()) (global + 1); 2613 +} 2614 + 2615 +int f1() 2616 +{ 2617 + return foo<TrueFalse>(); 2618 +} 2619 + 2620 +/* { dg-final { scan-tree-dump-times "eh_must_not_throw" 0 "tmlower" } } */ 2621 +/* { dg-final { scan-tree-dump-times "__transaction_atomic" 1 "tmlower" } } */ 2622 +/* { dg-final { cleanup-tree-dump "tmlower" } } */ 2623 diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr58831.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr58831.c 2624 --- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr58831.c 1970-01-01 00:00:00.000000000 +0000 2625 +++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr58831.c 2013-11-01 16:12:34.223836702 +0000 2626 @@ -0,0 +1,40 @@ 2627 +#include <assert.h> 2628 + 2629 +int a, *b, c, d, f, **i, p, q, *r; 2630 +short o, j; 2631 + 2632 +static int __attribute__((noinline, noclone)) 2633 +fn1 (int *p1, int **p2) 2634 +{ 2635 + int **e = &b; 2636 + for (; p; p++) 2637 + *p1 = 1; 2638 + *e = *p2 = &d; 2639 + 2640 + assert (r); 2641 + 2642 + return c; 2643 +} 2644 + 2645 +static int ** __attribute__((noinline, noclone)) 2646 +fn2 (void) 2647 +{ 2648 + for (f = 0; f != 42; f++) 1929 2649 + { 1930 + gcc_assert(FUNCTION_POINTER_TYPE_P(functype)); 1931 + functype = TREE_TYPE(functype); 2650 + int *g[3] = {0, 0, 0}; 2651 + for (o = 0; o; o--) 2652 + for (; a > 1;) 2653 + { 2654 + int **h[1] = { &g[2] }; 2655 + } 1932 2656 + } 1933 + tree id = get_identifier_from_string(name); 1934 + if (functype == error_mark_node || id == error_mark_node) 1935 + return this->error_function(); 1936 + 1937 + tree decl = build_decl(location.gcc_location(), FUNCTION_DECL, id, functype); 1938 + if (!asm_name.empty()) 1939 + SET_DECL_ASSEMBLER_NAME(decl, get_identifier_from_string(asm_name)); 1940 + if (is_visible) 1941 + TREE_PUBLIC(decl) = 1; 1942 + if (is_declaration) 1943 + DECL_EXTERNAL(decl) = 1; 1944 + else 1945 + { 1946 + tree restype = TREE_TYPE(functype); 1947 + tree resdecl = 1948 + build_decl(location.gcc_location(), RESULT_DECL, NULL_TREE, restype); 1949 + DECL_ARTIFICIAL(resdecl) = 1; 1950 + DECL_IGNORED_P(resdecl) = 1; 1951 + DECL_CONTEXT(resdecl) = decl; 1952 + DECL_RESULT(decl) = resdecl; 1953 + } 1954 + if (!is_inlinable) 1955 + DECL_UNINLINABLE(decl) = 1; 1956 + if (disable_split_stack) 1957 + { 1958 + tree attr = get_identifier("__no_split_stack__"); 1959 + DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE); 1960 + } 1961 + if (in_unique_section) 1962 + resolve_unique_section(decl, 0, 1); 1963 + 1964 + go_preserve_from_gc(decl); 1965 + return new Bfunction(decl); 2657 + return &r; 1966 2658 +} 1967 2659 + 1968 // The single backend. 1969 1970 static Gcc_backend gcc_backend; 1971 @@ -1799,3 +1880,9 @@ 1972 { 1973 return bv->get_tree(); 1974 } 1975 + 1976 +tree 1977 +function_to_tree(Bfunction* bf) 2660 +int 2661 +main (void) 1978 2662 +{ 1979 + return bf->get_tree(); 2663 + i = fn2 (); 2664 + fn1 (b, i); 2665 + return 0; 1980 2666 +} 2667 diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/atomic-store-6.c gcc-4.8.2/gcc/testsuite/gcc.dg/atomic-store-6.c 2668 --- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/atomic-store-6.c 1970-01-01 00:00:00.000000000 +0000 2669 +++ gcc-4.8.2/gcc/testsuite/gcc.dg/atomic-store-6.c 2013-11-01 16:12:34.223836702 +0000 2670 @@ -0,0 +1,13 @@ 2671 +/* { dg-do run } */ 2672 +/* { dg-require-effective-target sync_int_128_runtime } */ 2673 +/* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */ 2674 + 2675 +__int128_t i; 2676 + 2677 +int main() 2678 +{ 2679 + __atomic_store_16(&i, -1, 0); 2680 + if (i != -1) 2681 + __builtin_abort(); 2682 + return 0; 2683 +} 2684 diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/graphite/pr54094.c gcc-4.8.2/gcc/testsuite/gcc.dg/graphite/pr54094.c 2685 --- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/graphite/pr54094.c 1970-01-01 00:00:00.000000000 +0000 2686 +++ gcc-4.8.2/gcc/testsuite/gcc.dg/graphite/pr54094.c 2013-11-01 16:12:34.503884898 +0000 2687 @@ -0,0 +1,10 @@ 2688 +/* { dg-options "-O2 -floop-parallelize-all -floop-nest-optimize" } */ 2689 +void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas) 2690 +{ 2691 + int i; 2692 + for (i=0; i<sn; i++) 2693 + b[i]=a[2*i+cas]; 2694 + for (i=0; i<dn; i++) 2695 + b[sn+i]=a[(2*i+1-cas)]; 2696 +} 2697 + 1981 2698 diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr58805.c gcc-4.8.2/gcc/testsuite/gcc.dg/pr58805.c 1982 --- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr58805.c 19 69-12-31 18:00:00.000000000 -06001983 +++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr58805.c 2013-1 0-23 14:16:55.651450000 -05002699 --- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr58805.c 1970-01-01 00:00:00.000000000 +0000 2700 +++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr58805.c 2013-11-01 16:12:34.223836702 +0000 1984 2701 @@ -0,0 +1,24 @@ 1985 2702 +/* { dg-do compile } */ … … 2008 2725 +/* { dg-final { cleanup-tree-dump "pre" } } */ 2009 2726 diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57488.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57488.c 2010 --- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57488.c 19 69-12-31 18:00:00.000000000 -06002011 +++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57488.c 2013-1 0-23 06:59:05.236596000 -05002727 --- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57488.c 1970-01-01 00:00:00.000000000 +0000 2728 +++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57488.c 2013-11-01 16:12:34.223836702 +0000 2012 2729 @@ -0,0 +1,58 @@ 2013 2730 +/* { dg-do run } */ … … 2069 2786 + return 0; 2070 2787 +} 2788 diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58079.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58079.c 2789 --- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58079.c 1970-01-01 00:00:00.000000000 +0000 2790 +++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58079.c 2013-11-01 16:12:34.223836702 +0000 2791 @@ -0,0 +1,107 @@ 2792 +/* { dg-options "-mlong-calls" { target mips*-*-* } } */ 2793 + 2794 +typedef unsigned char u8; 2795 +typedef unsigned short u16; 2796 +typedef unsigned int __kernel_size_t; 2797 +typedef __kernel_size_t size_t; 2798 +struct list_head { 2799 + struct list_head *next; 2800 +}; 2801 + 2802 +struct dmx_ts_feed { 2803 + int is_filtering; 2804 +}; 2805 +struct dmx_section_feed { 2806 + u16 secbufp; 2807 + u16 seclen; 2808 + u16 tsfeedp; 2809 +}; 2810 + 2811 +typedef int (*dmx_ts_cb) ( 2812 + const u8 * buffer1, 2813 + size_t buffer1_length, 2814 + const u8 * buffer2, 2815 + size_t buffer2_length 2816 +); 2817 + 2818 +struct dvb_demux_feed { 2819 + union { 2820 + struct dmx_ts_feed ts; 2821 + struct dmx_section_feed sec; 2822 + } feed; 2823 + union { 2824 + dmx_ts_cb ts; 2825 + } cb; 2826 + int type; 2827 + u16 pid; 2828 + int ts_type; 2829 + struct list_head list_head; 2830 +}; 2831 + 2832 +struct dvb_demux { 2833 + int (*stop_feed)(struct dvb_demux_feed *feed); 2834 + struct list_head feed_list; 2835 +}; 2836 + 2837 + 2838 +static 2839 +inline 2840 +__attribute__((always_inline)) 2841 +u8 2842 +payload(const u8 *tsp) 2843 +{ 2844 + if (tsp[3] & 0x20) { 2845 + return 184 - 1 - tsp[4]; 2846 + } 2847 + return 184; 2848 +} 2849 + 2850 +static 2851 +inline 2852 +__attribute__((always_inline)) 2853 +int 2854 +dvb_dmx_swfilter_payload(struct dvb_demux_feed *feed, const u8 *buf) 2855 +{ 2856 + int count = payload(buf); 2857 + int p; 2858 + if (count == 0) 2859 + return -1; 2860 + return feed->cb.ts(&buf[p], count, ((void *)0), 0); 2861 +} 2862 + 2863 +static 2864 +inline 2865 +__attribute__((always_inline)) 2866 +void 2867 +dvb_dmx_swfilter_packet_type(struct dvb_demux_feed *feed, const u8 *buf) 2868 +{ 2869 + switch (feed->type) { 2870 + case 0: 2871 + if (feed->ts_type & 1) { 2872 + dvb_dmx_swfilter_payload(feed, buf); 2873 + } 2874 + if (dvb_dmx_swfilter_section_packet(feed, buf) < 0) 2875 + feed->feed.sec.seclen = feed->feed.sec.secbufp = 0; 2876 + } 2877 +} 2878 + 2879 +static 2880 +void 2881 +dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf) 2882 +{ 2883 + struct dvb_demux_feed *feed; 2884 + int dvr_done = 0; 2885 + 2886 + for (feed = ({ const typeof( ((typeof(*feed) *)0)->list_head ) *__mptr = ((&demux->feed_list)->next); (typeof(*feed) *)( (char *)__mptr - __builtin_offsetof(typeof(*feed),list_head) );}); __builtin_prefetch(feed->list_head.next), &feed->list_head != (&demux->feed_list); feed = ({ const typeof( ((typeof(*feed) *)0)->list_head ) *__mptr = (feed->list_head.next); (typeof(*feed) *)( (char *)__mptr - __builtin_offsetof(typeof(*feed),list_head) );})) { 2887 + if (((((feed)->type == 0) && ((feed)->feed.ts.is_filtering) && (((feed)->ts_type & (1 | 8)) == 1))) && (dvr_done++)) 2888 + dvb_dmx_swfilter_packet_type(feed, buf); 2889 + else if (feed->pid == 0x2000) 2890 + feed->cb.ts(buf, 188, ((void *)0), 0); 2891 + } 2892 +} 2893 +void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, size_t count) 2894 +{ 2895 + while (count--) { 2896 + dvb_dmx_swfilter_packet(demux, buf); 2897 + } 2898 +} 2899 diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58779.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58779.c 2900 --- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58779.c 1970-01-01 00:00:00.000000000 +0000 2901 +++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58779.c 2013-11-01 16:12:34.223836702 +0000 2902 @@ -0,0 +1,12 @@ 2903 +/* { dg-do run } */ 2904 + 2905 +int a, c; 2906 + 2907 +int main () 2908 +{ 2909 + int e = -1; 2910 + short d = (c <= 0) ^ e; 2911 + if ((unsigned int) a - (a || d) <= (unsigned int) a) 2912 + __builtin_abort (); 2913 + return 0; 2914 +} 2071 2915 diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58830.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58830.c 2072 --- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58830.c 19 69-12-31 18:00:00.000000000 -06002073 +++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58830.c 2013-1 0-23 06:59:05.236596000 -05002916 --- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58830.c 1970-01-01 00:00:00.000000000 +0000 2917 +++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58830.c 2013-11-01 16:12:34.223836702 +0000 2074 2918 @@ -0,0 +1,42 @@ 2075 2919 +/* { dg-do run } */ … … 2115 2959 + return 0; 2116 2960 +} 2961 diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c gcc-4.8.2/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c 2962 --- gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c 1970-01-01 00:00:00.000000000 +0000 2963 +++ gcc-4.8.2/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c 2013-11-01 16:12:34.223836702 +0000 2964 @@ -0,0 +1,29 @@ 2965 +/* { dg-do compile } */ 2966 +/* { dg-options "-g -fPIC" } */ 2967 + 2968 +void *v; 2969 +void a (void *x) { } 2970 +void b (void) { } 2971 + /* line 7. */ 2972 +int /* line 8. */ 2973 +main (int argc) /* line 9. */ 2974 +{ /* line 10. */ 2975 + if (argc == 12345) /* line 11. */ 2976 + { 2977 + a (v); 2978 + return 1; 2979 + } 2980 + b (); 2981 + 2982 + return 0; 2983 +} 2984 + 2985 +/* { dg-final { scan-assembler-not "\.loc 1 7 0" } } */ 2986 +/* { dg-final { scan-assembler-not "\.loc 1 8 0" } } */ 2987 +/* { dg-final { scan-assembler-not "\.loc 1 9 0" } } */ 2988 + 2989 +/* The loc at the start of the prologue. */ 2990 +/* { dg-final { scan-assembler-times "\.loc 1 10 0" 1 } } */ 2991 + 2992 +/* The loc at the end of the prologue, with the first user line. */ 2993 +/* { dg-final { scan-assembler-times "\.loc 1 11 0" 1 } } */ 2994 diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr30315.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr30315.c 2995 --- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr30315.c 2007-08-14 14:39:24.000000000 +0000 2996 +++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr30315.c 2013-11-01 16:12:34.223836702 +0000 2997 @@ -1,6 +1,6 @@ 2998 /* { dg-do compile } */ 2999 /* { dg-options "-O2" } */ 3000 -/* { dg-final { scan-assembler-times "cmp" 4 } } */ 3001 +/* { dg-final { scan-assembler-not "cmp" } } */ 3002 3003 extern void abort (void); 3004 int c; 3005 @@ -34,39 +34,10 @@ 3006 } 3007 #define PLUSCCONLY(T, t) PLUSCCONLY1(T, t, a) PLUSCCONLY1(T, t, b) 3008 3009 -#define MINUSCC(T, t) \ 3010 -T minuscc##t (T a, T b) \ 3011 -{ \ 3012 - T difference = a - b; \ 3013 - if (difference > a) \ 3014 - abort (); \ 3015 - return difference; \ 3016 -} 3017 - 3018 -#define DECCC(T, t) \ 3019 -T deccc##t (T a, T b) \ 3020 -{ \ 3021 - T difference = a - b; \ 3022 - if (difference > a) \ 3023 - c --; \ 3024 - return difference; \ 3025 -} 3026 - 3027 -#define MINUSCCONLY(T, t) \ 3028 -void minuscconly##t (T a, T b) \ 3029 -{ \ 3030 - T difference = a - b; \ 3031 - if (difference > a) \ 3032 - abort (); \ 3033 -} 3034 - 3035 #define TEST(T, t) \ 3036 PLUSCC(T, t) \ 3037 PLUSCCONLY(T, t) \ 3038 - INCCC(T, t) \ 3039 - MINUSCC(T, t) \ 3040 - MINUSCCONLY(T, t) \ 3041 - DECCC(T, t) 3042 + INCCC(T, t) 3043 3044 TEST (unsigned long, l) 3045 TEST (unsigned int, i) 3046 @@ -84,14 +55,3 @@ 3047 3048 PLUSCCZEXT(a) 3049 PLUSCCZEXT(b) 3050 - 3051 -#define MINUSCCZEXT \ 3052 -unsigned long minuscczext (unsigned int a, unsigned int b) \ 3053 -{ \ 3054 - unsigned int difference = a - b; \ 3055 - if (difference > a) \ 3056 - abort (); \ 3057 - return difference; \ 3058 -} 3059 - 3060 -MINUSCCZEXT 2117 3061 diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/sh/pr54089-3.c gcc-4.8.2/gcc/testsuite/gcc.target/sh/pr54089-3.c 2118 --- gcc-4.8.2.orig/gcc/testsuite/gcc.target/sh/pr54089-3.c 2012-09-10 15:35:25.000000000 -05002119 +++ gcc-4.8.2/gcc/testsuite/gcc.target/sh/pr54089-3.c 2013-1 0-19 08:27:49.531298000 -05003062 --- gcc-4.8.2.orig/gcc/testsuite/gcc.target/sh/pr54089-3.c 2012-09-10 20:35:25.000000000 +0000 3063 +++ gcc-4.8.2/gcc/testsuite/gcc.target/sh/pr54089-3.c 2013-11-01 16:12:34.223836702 +0000 2120 3064 @@ -5,7 +5,7 @@ 2121 3065 /* { dg-options "-O1" } */ … … 2127 3071 int 2128 3072 test00 (unsigned int a, int* b, int c, int* d, unsigned int e) 2129 diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/decltype57.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/decltype57.C2130 --- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/decltype57.C 1969-12-31 18:00:00.000000000 -06002131 +++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/decltype57.C 2013-10-16 17:19:18.772609000 -05002132 @@ -0,0 +1,8 @@2133 +// PR c++/586332134 +// { dg-do compile { target c++11 } }2135 +2136 +void foo(int i)2137 +{2138 + typedef int I;2139 + decltype(i.I::~I())* p;2140 +}2141 diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/enum18.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/enum18.C2142 --- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/enum18.C 2011-05-28 17:01:28.000000000 -05002143 +++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/enum18.C 2013-10-16 17:19:18.772609000 -05002144 @@ -4,5 +4,5 @@2145 int main(void) {2146 enum e {};2147 e ev;2148 - ev.e::~e_u(); // { dg-error "e_u. has not been declared" }2149 + ev.e::~e_u(); // { dg-error "" }2150 }2151 diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C2152 --- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C 1969-12-31 18:00:00.000000000 -06002153 +++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C 2013-10-17 12:15:46.188630000 -05002154 @@ -0,0 +1,7 @@2155 +// PR c++/585962156 +// { dg-do compile { target c++11 } }2157 +2158 +struct A2159 +{2160 + int i = [] { return decltype(i)(); }();2161 +};2162 3073 diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-pre.c gcc-4.8.2/gcc/tree-ssa-pre.c 2163 --- gcc-4.8.2.orig/gcc/tree-ssa-pre.c 2013-02-19 0 0:43:34.000000000 -06002164 +++ gcc-4.8.2/gcc/tree-ssa-pre.c 2013-1 0-23 06:59:05.236596000 -05003074 --- gcc-4.8.2.orig/gcc/tree-ssa-pre.c 2013-02-19 06:43:34.000000000 +0000 3075 +++ gcc-4.8.2/gcc/tree-ssa-pre.c 2013-11-01 16:12:34.227837390 +0000 2165 3076 @@ -3664,6 +3664,12 @@ 2166 3077 if (dump_file && dump_flags & TDF_DETAILS) … … 2177 3088 } 2178 3089 diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-tail-merge.c gcc-4.8.2/gcc/tree-ssa-tail-merge.c 2179 --- gcc-4.8.2.orig/gcc/tree-ssa-tail-merge.c 2013-01-31 0 2:52:56.000000000 -06002180 +++ gcc-4.8.2/gcc/tree-ssa-tail-merge.c 2013-1 0-23 14:16:55.651450000 -05003090 --- gcc-4.8.2.orig/gcc/tree-ssa-tail-merge.c 2013-01-31 08:52:56.000000000 +0000 3091 +++ gcc-4.8.2/gcc/tree-ssa-tail-merge.c 2013-11-01 16:12:34.231838079 +0000 2181 3092 @@ -297,7 +297,8 @@ 2182 3093 tree val; … … 2190 3101 def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF); 2191 3102 diff -Naur gcc-4.8.2.orig/gcc/version.c gcc-4.8.2/gcc/version.c 2192 --- gcc-4.8.2.orig/gcc/version.c 2013-01-10 14:38:27.000000000 -06002193 +++ gcc-4.8.2/gcc/version.c 2013-1 0-24 10:18:17.893329498 -05003103 --- gcc-4.8.2.orig/gcc/version.c 2013-01-10 20:38:27.000000000 +0000 3104 +++ gcc-4.8.2/gcc/version.c 2013-11-01 16:12:34.231838079 +0000 2194 3105 @@ -32,4 +32,4 @@ 2195 3106 Makefile. */ … … 2197 3108 const char version_string[] = BASEVER DATESTAMP DEVPHASE REVISION; 2198 3109 -const char pkgversion_string[] = PKGVERSION; 2199 +const char pkgversion_string[] = "(GCC for Cross-LFS 4.8.2.20131 024) ";3110 +const char pkgversion_string[] = "(GCC for Cross-LFS 4.8.2.20131101) "; 2200 3111 diff -Naur gcc-4.8.2.orig/libffi/doc/libffi.info gcc-4.8.2/libffi/doc/libffi.info 2201 --- gcc-4.8.2.orig/libffi/doc/libffi.info 2013-10-16 0 3:21:34.000000000 -05002202 +++ gcc-4.8.2/libffi/doc/libffi.info 19 69-12-31 18:00:00.000000000 -06003112 --- gcc-4.8.2.orig/libffi/doc/libffi.info 2013-10-16 08:21:34.000000000 +0000 3113 +++ gcc-4.8.2/libffi/doc/libffi.info 1970-01-01 00:00:00.000000000 +0000 2203 3114 @@ -1,614 +0,0 @@ 2204 3115 -This is libffi.info, produced by makeinfo version 5.1 from libffi.texi. … … 2816 3727 - 2817 3728 -End Tag Table 2818 diff -Naur gcc-4.8.2.orig/libgo/config.h.in gcc-4.8.2/libgo/config.h.in2819 --- gcc-4.8.2.orig/libgo/config.h.in 2013-10-02 12:32:00.000000000 -05002820 +++ gcc-4.8.2/libgo/config.h.in 2013-10-17 13:41:40.134537000 -05002821 @@ -39,6 +39,9 @@2822 /* Define to 1 if you have the `dl_iterate_phdr' function. */2823 #undef HAVE_DL_ITERATE_PHDR2824 2825 +/* Define to 1 if you have the `dup3' function. */2826 +#undef HAVE_DUP32827 +2828 /* Define to 1 if you have the `epoll_create1' function. */2829 #undef HAVE_EPOLL_CREATE12830 2831 @@ -66,6 +69,9 @@2832 /* Define if _Unwind_GetIPInfo is available. */2833 #undef HAVE_GETIPINFO2834 2835 +/* Define to 1 if you have the `getxattr' function. */2836 +#undef HAVE_GETXATTR2837 +2838 /* Define to 1 if you have the `inotify_add_watch' function. */2839 #undef HAVE_INOTIFY_ADD_WATCH2840 2841 @@ -111,6 +117,9 @@2842 /* Define to 1 if you have the <linux/rtnetlink.h> header file. */2843 #undef HAVE_LINUX_RTNETLINK_H2844 2845 +/* Define to 1 if you have the `listxattr' function. */2846 +#undef HAVE_LISTXATTR2847 +2848 /* Define to 1 if the system has the type `loff_t'. */2849 #undef HAVE_LOFF_T2850 2851 @@ -171,6 +180,9 @@2852 /* Define to 1 if you have the `pipe2' function. */2853 #undef HAVE_PIPE22854 2855 +/* Define to 1 if you have the `removexattr' function. */2856 +#undef HAVE_REMOVEXATTR2857 +2858 /* Define to 1 if you have the `renameat' function. */2859 #undef HAVE_RENAMEAT2860 2861 @@ -180,6 +192,9 @@2862 /* Define to 1 if you have the `setenv' function. */2863 #undef HAVE_SETENV2864 2865 +/* Define to 1 if you have the `setxattr' function. */2866 +#undef HAVE_SETXATTR2867 +2868 /* Define to 1 if you have the `sinl' function. */2869 #undef HAVE_SINL2870 2871 diff -Naur gcc-4.8.2.orig/libgo/configure gcc-4.8.2/libgo/configure2872 --- gcc-4.8.2.orig/libgo/configure 2013-10-02 12:32:00.000000000 -05002873 +++ gcc-4.8.2/libgo/configure 2013-10-17 13:41:40.134537000 -05002874 @@ -14700,7 +14700,7 @@2875 fi2876 2877 2878 -for ac_func in accept4 epoll_create1 faccessat fallocate fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_init1 inotify_rm_watch mkdirat mknodat openat pipe2 renameat sync_file_range splice tee unlinkat unshare utimensat2879 +for ac_func in accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat openat pipe2 removexattr renameat setxattr sync_file_range splice tee unlinkat unshare utimensat2880 do :2881 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`2882 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"2883 diff -Naur gcc-4.8.2.orig/libgo/configure.ac gcc-4.8.2/libgo/configure.ac2884 --- gcc-4.8.2.orig/libgo/configure.ac 2013-10-02 12:32:00.000000000 -05002885 +++ gcc-4.8.2/libgo/configure.ac 2013-10-17 13:41:40.134537000 -05002886 @@ -503,7 +503,7 @@2887 AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)2888 AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)2889 2890 -AC_CHECK_FUNCS(accept4 epoll_create1 faccessat fallocate fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_init1 inotify_rm_watch mkdirat mknodat openat pipe2 renameat sync_file_range splice tee unlinkat unshare utimensat)2891 +AC_CHECK_FUNCS(accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat openat pipe2 removexattr renameat setxattr sync_file_range splice tee unlinkat unshare utimensat)2892 AC_TYPE_OFF_T2893 AC_CHECK_TYPES([loff_t])2894 2895 diff -Naur gcc-4.8.2.orig/libgo/go/syscall/libcall_linux.go gcc-4.8.2/libgo/go/syscall/libcall_linux.go2896 --- gcc-4.8.2.orig/libgo/go/syscall/libcall_linux.go 2013-02-08 13:24:26.000000000 -06002897 +++ gcc-4.8.2/libgo/go/syscall/libcall_linux.go 2013-10-17 13:41:40.134537000 -05002898 @@ -190,6 +190,9 @@2899 //sys Adjtimex(buf *Timex) (state int, err error)2900 //adjtimex(buf *Timex) _C_int2901 2902 +//sysnb Dup3(oldfd int, newfd int, flags int) (err error)2903 +//dup3(oldfd _C_int, newfd _C_int, flags _C_int) _C_int2904 +2905 //sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)2906 //faccessat(dirfd _C_int, pathname *byte, mode _C_int, flags _C_int) _C_int2907 2908 @@ -268,6 +271,9 @@2909 return origlen - len(buf), count, names2910 }2911 2912 +//sys Getxattr(path string, attr string, dest []byte) (sz int, err error)2913 +//getxattr(path *byte, attr *byte, buf *byte, count Size_t) Ssize_t2914 +2915 //sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)2916 //inotify_add_watch(fd _C_int, pathname *byte, mask uint32) _C_int2917 2918 @@ -283,6 +289,9 @@2919 //sys Klogctl(typ int, buf []byte) (n int, err error)2920 //klogctl(typ _C_int, bufp *byte, len _C_int) _C_int2921 2922 +//sys Listxattr(path string, dest []byte) (sz int, err error)2923 +//listxattr(path *byte, list *byte, size Size_t) Ssize_t2924 +2925 //sys Mkdirat(dirfd int, path string, mode uint32) (err error)2926 //mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int2927 2928 @@ -305,6 +314,9 @@2929 //sys PivotRoot(newroot string, putold string) (err error)2930 //pivot_root(newroot *byte, putold *byte) _C_int2931 2932 +//sys Removexattr(path string, attr string) (err error)2933 +//removexattr(path *byte, name *byte) _C_int2934 +2935 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)2936 //renameat(olddirfd _C_int, oldpath *byte, newdirfd _C_int, newpath *byte) _C_int2937 2938 @@ -338,6 +350,9 @@2939 //sysnb Setresuid(ruid int, eguid int, suid int) (err error)2940 //setresuid(ruid Uid_t, euid Uid_t, suid Uid_t) _C_int2941 2942 +//sys Setxattr(path string, attr string, data []byte, flags int) (err error)2943 +//setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int2944 +2945 //sys splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error)2946 //splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t2947 func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {2948 diff -Naur gcc-4.8.2.orig/libgo/go/syscall/libcall_posix.go gcc-4.8.2/libgo/go/syscall/libcall_posix.go2949 --- gcc-4.8.2.orig/libgo/go/syscall/libcall_posix.go 2013-02-08 13:24:26.000000000 -06002950 +++ gcc-4.8.2/libgo/go/syscall/libcall_posix.go 2013-10-17 13:41:40.134537000 -05002951 @@ -238,6 +238,9 @@2952 //sysnb Getppid() (ppid int)2953 //getppid() Pid_t2954 2955 +//sys Getpriority(which int, who int) (prio int, err error)2956 +//getpriority(which _C_int, who _C_int) _C_int2957 +2958 //sysnb Getrlimit(resource int, rlim *Rlimit) (err error)2959 //getrlimit(resource _C_int, rlim *Rlimit) _C_int2960 2961 @@ -307,6 +310,9 @@2962 //sysnb Setpgid(pid int, pgid int) (err error)2963 //setpgid(pid Pid_t, pgid Pid_t) _C_int2964 2965 +//sys Setpriority(which int, who int, prio int) (err error)2966 +//setpriority(which _C_int, who _C_int, prio _C_int) _C_int2967 +2968 //sysnb Setreuid(ruid int, euid int) (err error)2969 //setreuid(ruid Uid_t, euid Uid_t) _C_int2970 2971 3729 diff -Naur gcc-4.8.2.orig/libgo/Makefile.am gcc-4.8.2/libgo/Makefile.am 2972 --- gcc-4.8.2.orig/libgo/Makefile.am 2013-09-27 16:34:43.000000000 -05002973 +++ gcc-4.8.2/libgo/Makefile.am 2013-1 0-16 12:27:53.564070000 -05003730 --- gcc-4.8.2.orig/libgo/Makefile.am 2013-09-27 21:34:43.000000000 +0000 3731 +++ gcc-4.8.2/libgo/Makefile.am 2013-11-01 16:12:34.291848407 +0000 2974 3732 @@ -424,6 +424,7 @@ 2975 3733 runtime/go-caller.c \ … … 2981 3739 runtime/go-construct-map.c \ 2982 3740 diff -Naur gcc-4.8.2.orig/libgo/Makefile.in gcc-4.8.2/libgo/Makefile.in 2983 --- gcc-4.8.2.orig/libgo/Makefile.in 2013-09-27 16:34:43.000000000 -05002984 +++ gcc-4.8.2/libgo/Makefile.in 2013-1 0-16 12:27:53.564070000 -05003741 --- gcc-4.8.2.orig/libgo/Makefile.in 2013-09-27 21:34:43.000000000 +0000 3742 +++ gcc-4.8.2/libgo/Makefile.in 2013-11-01 16:12:34.299849784 +0000 2985 3743 @@ -195,7 +195,7 @@ 2986 3744 @LIBGO_IS_LINUX_TRUE@am__objects_5 = getncpu-linux.lo … … 3022 3780 @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-cgo.lo -MD -MP -MF $(DEPDIR)/go-cgo.Tpo -c -o go-cgo.lo `test -f 'runtime/go-cgo.c' || echo '$(srcdir)/'`runtime/go-cgo.c 3023 3781 @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/go-cgo.Tpo $(DEPDIR)/go-cgo.Plo 3782 diff -Naur gcc-4.8.2.orig/libgo/config.h.in gcc-4.8.2/libgo/config.h.in 3783 --- gcc-4.8.2.orig/libgo/config.h.in 2013-10-02 17:32:00.000000000 +0000 3784 +++ gcc-4.8.2/libgo/config.h.in 2013-11-01 16:12:34.235838767 +0000 3785 @@ -39,6 +39,9 @@ 3786 /* Define to 1 if you have the `dl_iterate_phdr' function. */ 3787 #undef HAVE_DL_ITERATE_PHDR 3788 3789 +/* Define to 1 if you have the `dup3' function. */ 3790 +#undef HAVE_DUP3 3791 + 3792 /* Define to 1 if you have the `epoll_create1' function. */ 3793 #undef HAVE_EPOLL_CREATE1 3794 3795 @@ -66,6 +69,9 @@ 3796 /* Define if _Unwind_GetIPInfo is available. */ 3797 #undef HAVE_GETIPINFO 3798 3799 +/* Define to 1 if you have the `getxattr' function. */ 3800 +#undef HAVE_GETXATTR 3801 + 3802 /* Define to 1 if you have the `inotify_add_watch' function. */ 3803 #undef HAVE_INOTIFY_ADD_WATCH 3804 3805 @@ -111,6 +117,9 @@ 3806 /* Define to 1 if you have the <linux/rtnetlink.h> header file. */ 3807 #undef HAVE_LINUX_RTNETLINK_H 3808 3809 +/* Define to 1 if you have the `listxattr' function. */ 3810 +#undef HAVE_LISTXATTR 3811 + 3812 /* Define to 1 if the system has the type `loff_t'. */ 3813 #undef HAVE_LOFF_T 3814 3815 @@ -171,6 +180,9 @@ 3816 /* Define to 1 if you have the `pipe2' function. */ 3817 #undef HAVE_PIPE2 3818 3819 +/* Define to 1 if you have the `removexattr' function. */ 3820 +#undef HAVE_REMOVEXATTR 3821 + 3822 /* Define to 1 if you have the `renameat' function. */ 3823 #undef HAVE_RENAMEAT 3824 3825 @@ -180,6 +192,9 @@ 3826 /* Define to 1 if you have the `setenv' function. */ 3827 #undef HAVE_SETENV 3828 3829 +/* Define to 1 if you have the `setxattr' function. */ 3830 +#undef HAVE_SETXATTR 3831 + 3832 /* Define to 1 if you have the `sinl' function. */ 3833 #undef HAVE_SINL 3834 3835 diff -Naur gcc-4.8.2.orig/libgo/configure gcc-4.8.2/libgo/configure 3836 --- gcc-4.8.2.orig/libgo/configure 2013-10-02 17:32:00.000000000 +0000 3837 +++ gcc-4.8.2/libgo/configure 2013-11-01 16:12:34.243840144 +0000 3838 @@ -14700,7 +14700,7 @@ 3839 fi 3840 3841 3842 -for ac_func in accept4 epoll_create1 faccessat fallocate fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_init1 inotify_rm_watch mkdirat mknodat openat pipe2 renameat sync_file_range splice tee unlinkat unshare utimensat 3843 +for ac_func in accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat openat pipe2 removexattr renameat setxattr sync_file_range splice tee unlinkat unshare utimensat 3844 do : 3845 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` 3846 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" 3847 diff -Naur gcc-4.8.2.orig/libgo/configure.ac gcc-4.8.2/libgo/configure.ac 3848 --- gcc-4.8.2.orig/libgo/configure.ac 2013-10-02 17:32:00.000000000 +0000 3849 +++ gcc-4.8.2/libgo/configure.ac 2013-11-01 16:12:34.291848407 +0000 3850 @@ -503,7 +503,7 @@ 3851 AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes) 3852 AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes) 3853 3854 -AC_CHECK_FUNCS(accept4 epoll_create1 faccessat fallocate fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_init1 inotify_rm_watch mkdirat mknodat openat pipe2 renameat sync_file_range splice tee unlinkat unshare utimensat) 3855 +AC_CHECK_FUNCS(accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat openat pipe2 removexattr renameat setxattr sync_file_range splice tee unlinkat unshare utimensat) 3856 AC_TYPE_OFF_T 3857 AC_CHECK_TYPES([loff_t]) 3858 3859 diff -Naur gcc-4.8.2.orig/libgo/go/syscall/libcall_linux.go gcc-4.8.2/libgo/go/syscall/libcall_linux.go 3860 --- gcc-4.8.2.orig/libgo/go/syscall/libcall_linux.go 2013-02-08 19:24:26.000000000 +0000 3861 +++ gcc-4.8.2/libgo/go/syscall/libcall_linux.go 2013-11-01 16:12:34.291848407 +0000 3862 @@ -190,6 +190,9 @@ 3863 //sys Adjtimex(buf *Timex) (state int, err error) 3864 //adjtimex(buf *Timex) _C_int 3865 3866 +//sysnb Dup3(oldfd int, newfd int, flags int) (err error) 3867 +//dup3(oldfd _C_int, newfd _C_int, flags _C_int) _C_int 3868 + 3869 //sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) 3870 //faccessat(dirfd _C_int, pathname *byte, mode _C_int, flags _C_int) _C_int 3871 3872 @@ -268,6 +271,9 @@ 3873 return origlen - len(buf), count, names 3874 } 3875 3876 +//sys Getxattr(path string, attr string, dest []byte) (sz int, err error) 3877 +//getxattr(path *byte, attr *byte, buf *byte, count Size_t) Ssize_t 3878 + 3879 //sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) 3880 //inotify_add_watch(fd _C_int, pathname *byte, mask uint32) _C_int 3881 3882 @@ -283,6 +289,9 @@ 3883 //sys Klogctl(typ int, buf []byte) (n int, err error) 3884 //klogctl(typ _C_int, bufp *byte, len _C_int) _C_int 3885 3886 +//sys Listxattr(path string, dest []byte) (sz int, err error) 3887 +//listxattr(path *byte, list *byte, size Size_t) Ssize_t 3888 + 3889 //sys Mkdirat(dirfd int, path string, mode uint32) (err error) 3890 //mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int 3891 3892 @@ -305,6 +314,9 @@ 3893 //sys PivotRoot(newroot string, putold string) (err error) 3894 //pivot_root(newroot *byte, putold *byte) _C_int 3895 3896 +//sys Removexattr(path string, attr string) (err error) 3897 +//removexattr(path *byte, name *byte) _C_int 3898 + 3899 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) 3900 //renameat(olddirfd _C_int, oldpath *byte, newdirfd _C_int, newpath *byte) _C_int 3901 3902 @@ -338,6 +350,9 @@ 3903 //sysnb Setresuid(ruid int, eguid int, suid int) (err error) 3904 //setresuid(ruid Uid_t, euid Uid_t, suid Uid_t) _C_int 3905 3906 +//sys Setxattr(path string, attr string, data []byte, flags int) (err error) 3907 +//setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int 3908 + 3909 //sys splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error) 3910 //splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t 3911 func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { 3912 diff -Naur gcc-4.8.2.orig/libgo/go/syscall/libcall_posix.go gcc-4.8.2/libgo/go/syscall/libcall_posix.go 3913 --- gcc-4.8.2.orig/libgo/go/syscall/libcall_posix.go 2013-02-08 19:24:26.000000000 +0000 3914 +++ gcc-4.8.2/libgo/go/syscall/libcall_posix.go 2013-11-01 16:12:34.291848407 +0000 3915 @@ -238,6 +238,9 @@ 3916 //sysnb Getppid() (ppid int) 3917 //getppid() Pid_t 3918 3919 +//sys Getpriority(which int, who int) (prio int, err error) 3920 +//getpriority(which _C_int, who _C_int) _C_int 3921 + 3922 //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) 3923 //getrlimit(resource _C_int, rlim *Rlimit) _C_int 3924 3925 @@ -307,6 +310,9 @@ 3926 //sysnb Setpgid(pid int, pgid int) (err error) 3927 //setpgid(pid Pid_t, pgid Pid_t) _C_int 3928 3929 +//sys Setpriority(which int, who int, prio int) (err error) 3930 +//setpriority(which _C_int, who _C_int, prio _C_int) _C_int 3931 + 3932 //sysnb Setreuid(ruid int, euid int) (err error) 3933 //setreuid(ruid Uid_t, euid Uid_t) _C_int 3934 3024 3935 diff -Naur gcc-4.8.2.orig/libgo/mksysinfo.sh gcc-4.8.2/libgo/mksysinfo.sh 3025 --- gcc-4.8.2.orig/libgo/mksysinfo.sh 2013-02-11 1 3:03:04.000000000 -06003026 +++ gcc-4.8.2/libgo/mksysinfo.sh 2013-1 0-17 13:41:40.134537000 -05003936 --- gcc-4.8.2.orig/libgo/mksysinfo.sh 2013-02-11 19:03:04.000000000 +0000 3937 +++ gcc-4.8.2/libgo/mksysinfo.sh 2013-11-01 16:12:34.299849784 +0000 3027 3938 @@ -1035,6 +1035,10 @@ 3028 3939 grep '^const _LOCK_' gen-sysinfo.go | … … 3037 3948 sed -e 's/^\(const \)_\(LINUX_REBOOT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} 3038 3949 diff -Naur gcc-4.8.2.orig/libgo/runtime/go-cdiv.c gcc-4.8.2/libgo/runtime/go-cdiv.c 3039 --- gcc-4.8.2.orig/libgo/runtime/go-cdiv.c 19 69-12-31 18:00:00.000000000 -06003040 +++ gcc-4.8.2/libgo/runtime/go-cdiv.c 2013-1 0-16 12:27:53.564070000 -05003950 --- gcc-4.8.2.orig/libgo/runtime/go-cdiv.c 1970-01-01 00:00:00.000000000 +0000 3951 +++ gcc-4.8.2/libgo/runtime/go-cdiv.c 2013-11-01 16:12:34.299849784 +0000 3041 3952 @@ -0,0 +1,46 @@ 3042 3953 +/* go-cdiv.c -- complex division routines … … 3087 3998 +} 3088 3999 diff -Naur gcc-4.8.2.orig/libgo/runtime/go-make-slice.c gcc-4.8.2/libgo/runtime/go-make-slice.c 3089 --- gcc-4.8.2.orig/libgo/runtime/go-make-slice.c 2012-11-21 0 1:03:38.000000000 -06003090 +++ gcc-4.8.2/libgo/runtime/go-make-slice.c 2013-1 0-16 12:27:53.564070000 -05004000 --- gcc-4.8.2.orig/libgo/runtime/go-make-slice.c 2012-11-21 07:03:38.000000000 +0000 4001 +++ gcc-4.8.2/libgo/runtime/go-make-slice.c 2013-11-01 16:12:34.303850472 +0000 3091 4002 @@ -34,7 +34,10 @@ 3092 4003 std = (const struct __go_slice_type *) td; … … 3102 4013 icap = (intgo) cap; 3103 4014 diff -Naur gcc-4.8.2.orig/libgo/runtime/go-nosys.c gcc-4.8.2/libgo/runtime/go-nosys.c 3104 --- gcc-4.8.2.orig/libgo/runtime/go-nosys.c 2013-01-29 14:52:43.000000000 -06003105 +++ gcc-4.8.2/libgo/runtime/go-nosys.c 2013-1 0-18 08:26:14.115640000 -05004015 --- gcc-4.8.2.orig/libgo/runtime/go-nosys.c 2013-01-29 20:52:43.000000000 +0000 4016 +++ gcc-4.8.2/libgo/runtime/go-nosys.c 2013-11-01 16:12:34.303850472 +0000 3106 4017 @@ -43,6 +43,17 @@ 3107 4018 } … … 3197 4108 3198 4109 diff -Naur gcc-4.8.2.orig/libgo/runtime/go-signal.c gcc-4.8.2/libgo/runtime/go-signal.c 3199 --- gcc-4.8.2.orig/libgo/runtime/go-signal.c 2013-07-2 2 23:42:18.000000000 -05003200 +++ gcc-4.8.2/libgo/runtime/go-signal.c 2013-1 0-16 12:27:53.564070000 -05004110 --- gcc-4.8.2.orig/libgo/runtime/go-signal.c 2013-07-23 04:42:18.000000000 +0000 4111 +++ gcc-4.8.2/libgo/runtime/go-signal.c 2013-11-01 16:12:34.303850472 +0000 3201 4112 @@ -399,6 +399,9 @@ 3202 4113 { … … 3228 4139 } 3229 4140 diff -Naur gcc-4.8.2.orig/libitm/libitm.info gcc-4.8.2/libitm/libitm.info 3230 --- gcc-4.8.2.orig/libitm/libitm.info 2013-10-16 0 3:29:00.000000000 -05003231 +++ gcc-4.8.2/libitm/libitm.info 19 69-12-31 18:00:00.000000000 -06004141 --- gcc-4.8.2.orig/libitm/libitm.info 2013-10-16 08:29:00.000000000 +0000 4142 +++ gcc-4.8.2/libitm/libitm.info 1970-01-01 00:00:00.000000000 +0000 3232 4143 @@ -1,1293 +0,0 @@ 3233 4144 -This is libitm.info, produced by makeinfo version 5.1 from libitm.texi. … … 4525 5436 -End Tag Table 4526 5437 diff -Naur gcc-4.8.2.orig/libquadmath/libquadmath.info gcc-4.8.2/libquadmath/libquadmath.info 4527 --- gcc-4.8.2.orig/libquadmath/libquadmath.info 2013-10-16 0 3:18:56.000000000 -05004528 +++ gcc-4.8.2/libquadmath/libquadmath.info 19 69-12-31 18:00:00.000000000 -06005438 --- gcc-4.8.2.orig/libquadmath/libquadmath.info 2013-10-16 08:18:56.000000000 +0000 5439 +++ gcc-4.8.2/libquadmath/libquadmath.info 1970-01-01 00:00:00.000000000 +0000 4529 5440 @@ -1,808 +0,0 @@ 4530 5441 -This is libquadmath.info, produced by makeinfo version 5.1 from … … 5336 6247 - 5337 6248 -End Tag Table 6249 diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/bits/shared_ptr_base.h gcc-4.8.2/libstdc++-v3/include/bits/shared_ptr_base.h 6250 --- gcc-4.8.2.orig/libstdc++-v3/include/bits/shared_ptr_base.h 2013-10-08 13:38:21.000000000 +0000 6251 +++ gcc-4.8.2/libstdc++-v3/include/bits/shared_ptr_base.h 2013-11-01 16:12:34.311851849 +0000 6252 @@ -391,7 +391,7 @@ 6253 public: 6254 template<typename... _Args> 6255 _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args) 6256 - : _M_impl(__a), _M_storage() 6257 + : _M_impl(__a) 6258 { 6259 _M_impl._M_ptr = static_cast<_Tp*>(static_cast<void*>(&_M_storage)); 6260 // _GLIBCXX_RESOLVE_LIB_DEFECTS 6261 @@ -819,7 +819,7 @@ 6262 : _M_ptr(__r.get()), _M_refcount() 6263 { 6264 __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>) 6265 - auto __tmp = std::__addressof(*__r.get()); 6266 + auto __tmp = __r.get(); 6267 _M_refcount = __shared_count<_Lp>(std::move(__r)); 6268 __enable_shared_from_this_helper(_M_refcount, __tmp, __tmp); 6269 } 5338 6270 diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/bits/stl_algo.h gcc-4.8.2/libstdc++-v3/include/bits/stl_algo.h 5339 --- gcc-4.8.2.orig/libstdc++-v3/include/bits/stl_algo.h 2013-09-30 1 2:42:52.000000000 -05005340 +++ gcc-4.8.2/libstdc++-v3/include/bits/stl_algo.h 2013-1 0-20 04:08:12.578223000 -05006271 --- gcc-4.8.2.orig/libstdc++-v3/include/bits/stl_algo.h 2013-09-30 17:42:52.000000000 +0000 6272 +++ gcc-4.8.2/libstdc++-v3/include/bits/stl_algo.h 2013-11-01 16:12:34.399866997 +0000 5341 6273 @@ -2279,7 +2279,7 @@ 5342 6274 _RandomAccessIterator __last) … … 5357 6289 return std::__unguarded_partition(__first + 1, __last, *__first, __comp); 5358 6290 } 6291 diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/c_global/cstdio gcc-4.8.2/libstdc++-v3/include/c_global/cstdio 6292 --- gcc-4.8.2.orig/libstdc++-v3/include/c_global/cstdio 2013-02-03 17:54:05.000000000 +0000 6293 +++ gcc-4.8.2/libstdc++-v3/include/c_global/cstdio 2013-11-01 16:12:34.399866997 +0000 6294 @@ -69,6 +69,7 @@ 6295 #undef ftell 6296 #undef fwrite 6297 #undef getc 6298 +#undef getchar 6299 #undef gets 6300 #undef perror 6301 #undef printf 5359 6302 diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/debug/functions.h gcc-4.8.2/libstdc++-v3/include/debug/functions.h 5360 --- gcc-4.8.2.orig/libstdc++-v3/include/debug/functions.h 2013-02-03 1 1:54:05.000000000 -06005361 +++ gcc-4.8.2/libstdc++-v3/include/debug/functions.h 2013-1 0-16 15:09:18.884767000 -05006303 --- gcc-4.8.2.orig/libstdc++-v3/include/debug/functions.h 2013-02-03 17:54:05.000000000 +0000 6304 +++ gcc-4.8.2/libstdc++-v3/include/debug/functions.h 2013-11-01 16:12:34.399866997 +0000 5362 6305 @@ -345,11 +345,13 @@ 5363 6306 return __check_sorted_set_aux(__first, __last, __pred, _SameType()); … … 5531 6474 struct __is_safe_random_iterator 5532 6475 diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/debug/macros.h gcc-4.8.2/libstdc++-v3/include/debug/macros.h 5533 --- gcc-4.8.2.orig/libstdc++-v3/include/debug/macros.h 2013-02-03 1 1:54:05.000000000 -06005534 +++ gcc-4.8.2/libstdc++-v3/include/debug/macros.h 2013-1 0-16 15:09:18.884767000 -05006476 --- gcc-4.8.2.orig/libstdc++-v3/include/debug/macros.h 2013-02-03 17:54:05.000000000 +0000 6477 +++ gcc-4.8.2/libstdc++-v3/include/debug/macros.h 2013-11-01 16:12:34.403867685 +0000 5535 6478 @@ -261,8 +261,9 @@ 5536 6479 w.r.t. the value _Value. */ … … 5581 6524 ._M_iterator(_First, #_First) \ 5582 6525 ._M_iterator(_Last, #_Last) \ 6526 diff -Naur gcc-4.8.2.orig/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc gcc-4.8.2/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc 6527 --- gcc-4.8.2.orig/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc 1970-01-01 00:00:00.000000000 +0000 6528 +++ gcc-4.8.2/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc 2013-11-01 16:12:34.403867685 +0000 6529 @@ -0,0 +1,33 @@ 6530 +// { dg-options "-std=gnu++11" } 6531 +// { dg-do compile } 6532 + 6533 +// Copyright (C) 2013 Free Software Foundation, Inc. 6534 +// 6535 +// This file is part of the GNU ISO C++ Library. This library is free 6536 +// software; you can redistribute it and/or modify it under the 6537 +// terms of the GNU General Public License as published by the 6538 +// Free Software Foundation; either version 3, or (at your option) 6539 +// any later version. 6540 + 6541 +// This library is distributed in the hope that it will be useful, 6542 +// but WITHOUT ANY WARRANTY; without even the implied warranty of 6543 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 6544 +// GNU General Public License for more details. 6545 + 6546 +// You should have received a copy of the GNU General Public License along 6547 +// with this library; see the file COPYING3. If not see 6548 +// <http://www.gnu.org/licenses/>. 6549 + 6550 +#include <memory> 6551 + 6552 +// libstdc++/58839 6553 + 6554 +struct D { 6555 + void operator()(void*) const noexcept { } 6556 +}; 6557 + 6558 +void test01() 6559 +{ 6560 + std::unique_ptr<void, D> y; 6561 + std::shared_ptr<void> x = std::move(y); 6562 +} 5583 6563 diff -Naur gcc-4.8.2.orig/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc gcc-4.8.2/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc 5584 --- gcc-4.8.2.orig/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc 19 69-12-31 18:00:00.000000000 -06005585 +++ gcc-4.8.2/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc 2013-1 0-20 04:08:12.578223000 -05006564 --- gcc-4.8.2.orig/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc 1970-01-01 00:00:00.000000000 +0000 6565 +++ gcc-4.8.2/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc 2013-11-01 16:12:34.403867685 +0000 5586 6566 @@ -0,0 +1,52 @@ 5587 6567 +// Copyright (C) 2013 Free Software Foundation, Inc.
Note:
See TracChangeset
for help on using the changeset viewer.