[4.8] Request to backport patch to the 4.8 branch
Hi, guys I encounter a gcc failure when I build mysql on opensuse[1] 5.6.17/storage/perfschema/pfs_account.cc:320:1: error: could not split insn [ 1245s] } [ 1245s] ^ [ 1245s] (insn 482 1770 1461 (parallel [ [ 1245s] (set (reg:SI 1 x1 [orig:167 D.16835 ] [167]) [ 1245s] (mem/v:SI (reg/f:DI 0 x0 [orig:166 D.16844 ] [166]) [-1 S4 A32])) [ 1245s] (set (mem/v:SI (reg/f:DI 0 x0 [orig:166 D.16844 ] [166]) [-1 S4 A32]) [ 1245s] (unspec_volatile:SI [ [ 1245s] (ior:SI (mem/v:SI (reg/f:DI 0 x0 [orig:166 D.16844 ] [166]) [-1 S4 A32]) [ 1245s] (const_int 0 [0])) [ 1245s] (const_int 5 [0x5]) [ 1245s] ] UNSPECV_ATOMIC_OP)) [ 1245s] (clobber (reg:CC 66 cc)) [ 1245s] (clobber (reg:SI 4 x4)) [ 1245s] (clobber (reg:SI 3 x3)) [ 1245s] ]) /home/abuild/rpmbuild/BUILD/mysql-5.6.17/include/my_atomic.h:217 1814 {atomic_fetch_orsi} [ 1245s] (expr_list:REG_UNUSED (reg:CC 66 cc) [ 1245s] (expr_list:REG_UNUSED (reg:SI 4 x4) [ 1245s] (expr_list:REG_UNUSED (reg:SI 3 x3) [ 1245s] (nil) [ 1245s] /home/abuild/rpmbuild/BUILD/mysql-5.6.17/storage/perfschema/pfs_account.cc:320:1: internal compiler error: in final_scan_insn, at final.c:2897 Ihis bug could be fixed by Michael's patch(r217076): 2014-11-04 Michael Collison * config/aarch64/iterators.md (lconst_atomic): New mode attribute to support constraints for CONST_INT in atomic operations. * config/aarch64/atomics.md (atomic_): Use lconst_atomic constraint. (atomic_nand): Likewise. (atomic_fetch_): Likewise. (atomic_fetch_nand): Likewise. (atomic__fetch): Likewise. (atomic_nand_fetch): Likewise. Michael's patch could be applied on the top of gcc 4.8 branch except the gcc/ChangeLog. Is it possible backport this patch to gcc 4.8 branch? I am new to here, I am not sure if I need send the patch with modified ChangeLog. Sorry if I break the rules. regards bamvor [1] https://bugzilla.opensuse.org/show_bug.cgi?id=896667
Re: [4.8] Request to backport patch to the 4.8 branch
On Wed, Dec 24, 2014 at 4:35 PM, zhangjian wrote: > Hi, guys > > I encounter a gcc failure when I build mysql on opensuse[1] > 5.6.17/storage/perfschema/pfs_account.cc:320:1: error: could not split insn > [ 1245s] } > [ 1245s] ^ > [ 1245s] (insn 482 1770 1461 (parallel [ > [ 1245s] (set (reg:SI 1 x1 [orig:167 D.16835 ] [167]) > [ 1245s] (mem/v:SI (reg/f:DI 0 x0 [orig:166 D.16844 ] [166]) > [-1 S4 A32])) > [ 1245s] (set (mem/v:SI (reg/f:DI 0 x0 [orig:166 D.16844 ] [166]) > [-1 S4 A32]) > [ 1245s] (unspec_volatile:SI [ > [ 1245s] (ior:SI (mem/v:SI (reg/f:DI 0 x0 [orig:166 > D.16844 ] [166]) [-1 S4 A32]) > [ 1245s] (const_int 0 [0])) > [ 1245s] (const_int 5 [0x5]) > [ 1245s] ] UNSPECV_ATOMIC_OP)) > [ 1245s] (clobber (reg:CC 66 cc)) > [ 1245s] (clobber (reg:SI 4 x4)) > [ 1245s] (clobber (reg:SI 3 x3)) > [ 1245s] ]) > /home/abuild/rpmbuild/BUILD/mysql-5.6.17/include/my_atomic.h:217 1814 > {atomic_fetch_orsi} > [ 1245s] (expr_list:REG_UNUSED (reg:CC 66 cc) > [ 1245s] (expr_list:REG_UNUSED (reg:SI 4 x4) > [ 1245s] (expr_list:REG_UNUSED (reg:SI 3 x3) > [ 1245s] (nil) > [ 1245s] > /home/abuild/rpmbuild/BUILD/mysql-5.6.17/storage/perfschema/pfs_account.cc:320:1: > internal compiler error: in final_scan_insn, at final.c:2897 > > Ihis bug could be fixed by Michael's patch(r217076): > 2014-11-04 Michael Collison > > * config/aarch64/iterators.md (lconst_atomic): New mode attribute > to support constraints for CONST_INT in atomic operations. > * config/aarch64/atomics.md > (atomic_): Use lconst_atomic constraint. > (atomic_nand): Likewise. > (atomic_fetch_): Likewise. > (atomic_fetch_nand): Likewise. > (atomic__fetch): Likewise. > (atomic_nand_fetch): Likewise. > > Michael's patch could be applied on the top of gcc 4.8 branch except the > gcc/ChangeLog. > Is it possible backport this patch to gcc 4.8 branch? > I am new to here, I am not sure if I need send the patch with modified > ChangeLog. Sorry if I break the rules. Hi, Since the patch applies to 4.8 smoothly, and you already provided the revision number, I don't think an additional patch is needed. But is the original patch for an existing bug? And what's about gcc 4_9 branch? Maybe you can create a PR against 4.8 (or 4.9) for tracking. Another problem is you may need to wait for a while since it's holiday time. Thanks, bin > > regards > > bamvor > > [1] https://bugzilla.opensuse.org/show_bug.cgi?id=896667 >
[PATCH, libiberty, gcc]: Introduce xasprintf to libiberty and use it in gengtype
Hello! Based on a suggestion from [1] and on previous work by Manuel and Ben. The new code is almost the same as existing asprintf.c, but uses recently added xvasprintf. Thes patch removes local xasprintf definition from gengtype.c and uses the new one there. libiberty/ChangeLog: 2014-12-24 Uros Bizjak Ben Elliston Manuel Lopez-Ibanez * xasprintf.c: New file. * Makefile.in (CFILES): Add xasprintf.c. (REQUIRED_OFILES): Add xasprintf.$(objext). (xasprintf.$(objext)): New target. * functions.texi: Regenerate. include/ChangeLog: 2014-12-24 Uros Bizjak Ben Elliston Manuel Lopez-Ibanez * libiberty.h (xasprintf): Declare. gcc/ChangeLog: 2014-12-24 Uros Bizjak * gengtype.h (xasprintf): Remove declaration. * gengtype.c (xasprintf): Remove. Bootstrapped and regression tested on x86_64-linux-gnu. OK for mainline? [1] https://gcc.gnu.org/ml/gcc-patches/2014-12/msg00848.html Uros. Index: gcc/gengtype.c === --- gcc/gengtype.c (revision 219042) +++ gcc/gengtype.c (working copy) @@ -119,23 +119,6 @@ error_at_line (const struct fileloc *pos, const ch va_end (ap); } - -/* asprintf, but produces fatal message on out-of-memory. */ -char * -xasprintf (const char *format, ...) -{ - int n; - char *result; - va_list ap; - - va_start (ap, format); - n = vasprintf (&result, format, ap); - if (result == NULL || n < 0) -fatal ("out of memory"); - va_end (ap); - - return result; -} /* Locate the ultimate base class of struct S. */ Index: gcc/gengtype.h === --- gcc/gengtype.h (revision 219042) +++ gcc/gengtype.h (working copy) @@ -418,9 +418,6 @@ void write_state (const char* path); extern void error_at_line (const struct fileloc *pos, const char *msg, ...) ATTRIBUTE_PRINTF_2; -/* Like asprintf, but calls fatal() on out of memory. */ -extern char *xasprintf (const char *, ...) ATTRIBUTE_PRINTF_1; - /* Constructor routines for types. */ extern void do_typedef (const char *s, type_p t, struct fileloc *pos); extern void do_scalar_typedef (const char *s, struct fileloc *pos); Index: include/libiberty.h === --- include/libiberty.h (revision 219042) +++ include/libiberty.h (working copy) @@ -629,6 +629,11 @@ extern int pwait (int, int *, int); extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2; #endif +/* Like asprintf but allocates memory without fail. This works like + xmalloc. */ + +extern char *xasprintf (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_PRINTF_1; + #if !HAVE_DECL_VASPRINTF /* Like vsprintf but provides a pointer to malloc'd storage, which must be freed by the caller. */ Index: libiberty/Makefile.in === --- libiberty/Makefile.in (revision 219042) +++ libiberty/Makefile.in (working copy) @@ -158,8 +158,8 @@ CFILES = alloca.c argv.c asprintf.c atexit.c \ vasprintf.c vfork.c vfprintf.c vprintf.c vprintf-support.c \ vsnprintf.c vsprintf.c \ waitpid.c \ - xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c xstrerror.c \ -xstrndup.c xvasprintf.c + xasprintf.c xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c \ +xstrerror.c xstrndup.c xvasprintf.c # These are always included in the library. The first four are listed # first and by compile time to optimize parallel builds. @@ -190,9 +190,10 @@ REQUIRED_OFILES = \ ./splay-tree.$(objext) ./stack-limit.$(objext) \ ./strerror.$(objext) ./strsignal.$(objext) \ ./timeval-utils.$(objext) ./unlink-if-ordinary.$(objext)\ - ./xatexit.$(objext) ./xexit.$(objext) ./xmalloc.$(objext) \ - ./xmemdup.$(objext) ./xstrdup.$(objext) ./xstrerror.$(objext) \ - ./xstrndup.$(objext) ./xvasprintf.$(objext) + ./xasprintf.$(objext) ./xatexit.$(objext) ./xexit.$(objext) \ + ./xmalloc.$(objext) ./xmemdup.$(objext) ./xstrdup.$(objext) \ + ./xstrerror.$(objext) ./xstrndup.$(objext) \ + ./xvasprintf.$(objext) # These are all the objects that configure may add to the library via # $funcs or EXTRA_OFILES. This list exists here only for "make @@ -1618,6 +1619,16 @@ $(CONFIGURED_OFILES): stamp-picdir stamp-noasandir else true; fi $(COMPILE.c) $(srcdir)/waitpid.c $(OUTPUT_OPTION) +./xasprintf.$(objext): $(srcdir)/xasprintf.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/x
Re: [4.8] Request to backport patch to the 4.8 branch
On 2014/12/24 17:41, Bin.Cheng wrote: > On Wed, Dec 24, 2014 at 4:35 PM, zhangjian > wrote: >> Hi, guys >> >> I encounter a gcc failure when I build mysql on opensuse[1] >> 5.6.17/storage/perfschema/pfs_account.cc:320:1: error: could not split insn >> [ 1245s] } >> [ 1245s] ^ >> [ 1245s] (insn 482 1770 1461 (parallel [ >> [ 1245s] (set (reg:SI 1 x1 [orig:167 D.16835 ] [167]) >> [ 1245s] (mem/v:SI (reg/f:DI 0 x0 [orig:166 D.16844 ] [166]) >> [-1 S4 A32])) >> [ 1245s] (set (mem/v:SI (reg/f:DI 0 x0 [orig:166 D.16844 ] >> [166]) [-1 S4 A32]) >> [ 1245s] (unspec_volatile:SI [ >> [ 1245s] (ior:SI (mem/v:SI (reg/f:DI 0 x0 [orig:166 >> D.16844 ] [166]) [-1 S4 A32]) >> [ 1245s] (const_int 0 [0])) >> [ 1245s] (const_int 5 [0x5]) >> [ 1245s] ] UNSPECV_ATOMIC_OP)) >> [ 1245s] (clobber (reg:CC 66 cc)) >> [ 1245s] (clobber (reg:SI 4 x4)) >> [ 1245s] (clobber (reg:SI 3 x3)) >> [ 1245s] ]) >> /home/abuild/rpmbuild/BUILD/mysql-5.6.17/include/my_atomic.h:217 1814 >> {atomic_fetch_orsi} >> [ 1245s] (expr_list:REG_UNUSED (reg:CC 66 cc) >> [ 1245s] (expr_list:REG_UNUSED (reg:SI 4 x4) >> [ 1245s] (expr_list:REG_UNUSED (reg:SI 3 x3) >> [ 1245s] (nil) >> [ 1245s] >> /home/abuild/rpmbuild/BUILD/mysql-5.6.17/storage/perfschema/pfs_account.cc:320:1: >> internal compiler error: in final_scan_insn, at final.c:2897 >> >> Ihis bug could be fixed by Michael's patch(r217076): >> 2014-11-04 Michael Collison >> >> * config/aarch64/iterators.md (lconst_atomic): New mode attribute >> to support constraints for CONST_INT in atomic operations. >> * config/aarch64/atomics.md >> (atomic_): Use lconst_atomic constraint. >> (atomic_nand): Likewise. >> (atomic_fetch_): Likewise. >> (atomic_fetch_nand): Likewise. >> (atomic__fetch): Likewise. >> (atomic_nand_fetch): Likewise. >> >> Michael's patch could be applied on the top of gcc 4.8 branch except the >> gcc/ChangeLog. >> Is it possible backport this patch to gcc 4.8 branch? >> I am new to here, I am not sure if I need send the patch with modified >> ChangeLog. Sorry if I break the rules. Hi, bin > Hi, > Since the patch applies to 4.8 smoothly, and you already provided the > revision number, I don't think an additional patch is needed. But is > the original patch for an existing bug? After check the original discussion, I found that it is a bug reported by d...@ubuntu.com[1]. > And what's about gcc 4_9 > branch? I am not sure. It seems that the original patch is tested on gcc 4.9[1]: --- ../../../../linaro-gcc4_9_git/gcc/config/aarch64/iterators.md 2014-09-22 10:10:04.520258964 -0700 +++ iterators.md2014-09-16 14:27:10.459050672 -0700 @@ -349,6 +349,9 @@ > Maybe you can create a PR against 4.8 (or 4.9) for tracking. Thanks your suggestion. I am sorry I do not know what should be included in PR and how to create a PR after google. > Another problem is you may need to wait for a while since it's holiday > time. > > Thanks, > bin > regards bamvor [1] https://gcc.gnu.org/ml/gcc-patches/2014-09/msg02209.html >> >> regards >> >> bamvor >> >> [1] https://bugzilla.opensuse.org/show_bug.cgi?id=896667 >> > > . >
Flatten tree.h and tree-core.h (Version 2)
This patch flattens tree.h and tree-core.h. This is a revised patch that does not include tree-core.h as a result of flattening. I removed the includes in tree.h and tree-core.h except for the include of tree-core.h in tree.h. I modified genattrtab.c, genautomata.c, genemit.c, gengtype.c, gengtype.c, genoptinit.c, genoutput.c, genpeep.c, genpreds.c, and optc-save-gen-awk to include the the necessary include files removed from tree.h and tree-core.h when generating their respective files. I removed three inline functions from tree.h and relocated them to fold-const.c and exported them in fold-const.h. The functions are: convert_to_ptrofftype-loc fold_build_pointer_plus_loc fold_build_pointer_plus_hwi_loc All other changes include the necessary include files removed from tree.h and tree-core.h. Note the patches modifies all the front-ends. I bootstrapped on x86 with all languages. I also bootstrapped on all targets listed in contrib/config-list.mk with c and c++ enabled. Is this okay for trunk? 2014-12-24 Michael Collison * genattrtab.c (write_header): Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, options.h fold-const.h, wide-int.h, and inchash.h when generating insn-attrtab.c. * genautomata.c (main) : Include hash-set.h, macInclude hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, options.h fold-const.h, wide-int.h, and inchash.h when generating insn-automata.c. * genemit.c (main): Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, options.h fold-const.h, wide-int.h, and inchash.h when generating insn-emit.c. * gengtype.c (open_base_files): Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, options.h fold-const.h, wide-int.h, and inchash.h when generating gtype-desc.c. * genopinit.c (main): Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, options.h fold-const.h, wide-int.h, and inchash.h when generating insn-opinit.c. * genoutput.c (output_prologue): Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, options.h fold-const.h, wide-int.h, and inchash.h when generating insn-output.c. * genpeep.c (main): Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, options.h fold-const.h, wide-int.h, and inchash.h when generating insn-peep.c. * genpreds.c (write_insn_preds_c): Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, options.h fold-const.h, wide-int.h, and inchash.h when generating insn-preds.c. * optc-save-gen-awk: Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, options.h fold-const.h, wide-int.h, and inchash.h when generating options-save.c. * opth-gen.awk: Change include guard from GCC_C_COMMON_H to GCC_C_COMMON_C when generating options.h. 2014-12-24 Michael Collison * ada/gcc-interface/cuintp.c: Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, fold-const.h, wide-int.h, and inchash.h due to flattening of tree.h. * ada/gcc-interface/decl.c: ditto. * ada/gcc-interface/misc.c: ditto. * ada/gcc-interface/targtyps.c: Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, options.h, fold-const.h, wide-int.h, and inchash.h due to flattening of tree.h. * ada/gcc-interface/trans.c: Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, real.h, fold-const.h, wide-int.h, inchash.h due to flattening of tree.h. * ada/gcc-interface/utils.c: Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, fold-const.h, wide-int.h, and inchash.h due to flattening of tree.h. * ada/gcc-interface/utils2.c: ditto. * alias.c: Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, options.h fold-const.h, wide-int.h, and inchash.h due to flattening of tree.h. * asan.c: ditto. * attribs.c: ditto. * auto-inc-dec.c: ditto. * auto-profile.c: ditto * bb-reorder.c: ditto. * bt-load.c: Include symtab.h due to flattening of tree.h. * builtins.c: Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, options.h fold-const.h, wide-int.h, and inchash.h due to flattening of tree.h. * c/c-array-notation.c: ditto. * c/c-aux-info.c: ditto. * c/c-convert.c: ditto. * c/c-decl.c: ditto. * c/c-errors.c: ditto. * c/c-lang.c: dittoxs. * c/c-objc-common.c: ditto. * c/c-parser.c: ditto. * c/c-typeck.c: Include hash-set.h, machmode.h, vec.h, double-int.h, input.h, alias.h, symtab.h, options.h fold-const.h, wide-int.h, inchash.h, real.h and fixed-value.h due to flattening of tree.
[PATCH, libgo]: Double StackMin size for 64bit non-split-stack targets
Hello! The attached patch doubles StackMin size for 64bit non-split-stack targets. This patch fixes regexp libgo failure (tracked as gcc PR61871 [1]) on alpha-linux-gnu. --cut here-- Index: runtime/proc.c === --- runtime/proc.c (revision 219035) +++ runtime/proc.c (working copy) @@ -51,7 +51,7 @@ #if defined(USING_SPLIT_STACK) && defined(LINKER_SUPPORTS_SPLIT_STACK) # define StackMin PTHREAD_STACK_MIN #else -# define StackMin 2 * 1024 * 1024 +# define StackMin ((sizeof(char *) < 8) ? 2 * 1024 * 1024 : 4 * 1024 * 1024) #endif uintptr runtime_stacks_sys; --cut here-- Bootstrapped and regression tested on alphaev68-linux-gnu. [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61871 Uros.
[Patch, moxie] Add -mmul.x option
I am committing the attached patch, which adds support for the mul.x and umul.x instructions, which compute the high 32 bits of a 64-bit result for a 32-bit multiply (signed and unsigned). These instructions are enabled by default for moxiebox-* configurations. This patch also updates the add, sub, mul, div and udiv instruction names by removing the trailing ".l". 2014-12-24 Anthony Green * config/moxie/moxie.opt (mul.x): New option. * doc/invoke.texi (Moxie Options): Document -mmul.x. * config/moxie/moxie.md (addsi3, mulsi3, subsi3, divsi3, udivs3): Remove trailing ".l" from add, mul, sub, div and udiv instructions. (si3_highpart, sidi3): Add mul.x & umul.x instruction support (high 32-bit result of multiply). * config/moxie/moxie.c (moxie_option_override): Force availability of mul.x instructions for moxiebox target. * config/moxie/moxiebox.h (TARGET_MOXIEBOX): Define. Index: gcc/config/moxie/moxie.c === --- gcc/config/moxie/moxie.c(revision 219054) +++ gcc/config/moxie/moxie.c(working copy) @@ -249,13 +249,16 @@ } -/* The TARGET_OPTION_OVERRIDE worker. - All this curently does is set init_machine_status. */ +/* The TARGET_OPTION_OVERRIDE worker. */ static void moxie_option_override (void) { /* Set the per-function-data initializer. */ init_machine_status = moxie_init_machine_status; + +#ifdef TARGET_MOXIEBOX + target_flags &= ~MASK_HAS_MULX; +#endif } /* Compute the size of the local area and the size to be adjusted by the Index: gcc/config/moxie/moxie.md === --- gcc/config/moxie/moxie.md (revision 219054) +++ gcc/config/moxie/moxie.md (working copy) @@ -50,7 +50,7 @@ "@ inc%0, %2 dec %0, -%2 - add.l %0, %2") + add%0, %2") (define_insn "subsi3" [(set (match_operand:SI 0 "register_operand" "=r,r") @@ -60,7 +60,7 @@ "" "@ dec%0, %2 - sub.l %0, %2") + sub%0, %2") (define_insn "mulsi3" [(set (match_operand:SI 0 "register_operand" "=r") @@ -68,15 +68,44 @@ (match_operand:SI 1 "register_operand" "0") (match_operand:SI 2 "register_operand" "r")))] "" - "mul.l %0, %2") + "mul%0, %2") +(define_code_iterator EXTEND [sign_extend zero_extend]) +(define_code_attr mul [(sign_extend "mul") (zero_extend "umul")]) + +(define_insn "si3_highpart" + [(set (match_operand:SI 0 "register_operand" "=r") +(truncate:SI + (lshiftrt:DI + (mult:DI (EXTEND:DI (match_operand:SI 1 "register_operand" "0")) + (EXTEND:DI (match_operand:SI 2 "register_operand" "r"))) + (const_int 32] + "TARGET_HAS_MULX" + ".x\\t%0, %2") + +(define_expand "sidi3" + [(set (match_operand:DI 0 "register_operand" "") + (mult:DI (EXTEND:DI (match_operand:SI 1 "register_operand" "0")) +(EXTEND:DI (match_operand:SI 2 "register_operand" "r"] + "TARGET_HAS_MULX" +{ + rtx hi = gen_reg_rtx (SImode); + rtx lo = gen_reg_rtx (SImode); + + emit_insn (gen_si3_highpart (hi, operands[1], operands[2])); + emit_insn (gen_mulsi3 (lo, operands[1], operands[2])); + emit_move_insn (gen_lowpart (SImode, operands[0]), lo); + emit_move_insn (gen_highpart (SImode, operands[0]), hi); + DONE; +}) + (define_insn "divsi3" [(set (match_operand:SI 0 "register_operand" "=r") (div:SI (match_operand:SI 1 "register_operand" "0") (match_operand:SI 2 "register_operand" "r")))] "" - "div.l %0, %2") + "div%0, %2") (define_insn "udivsi3" [(set (match_operand:SI 0 "register_operand" "=r") @@ -84,7 +113,7 @@ (match_operand:SI 1 "register_operand" "0") (match_operand:SI 2 "register_operand" "r")))] "" - "udiv.l %0, %2") + "udiv %0, %2") (define_insn "modsi3" [(set (match_operand:SI 0 "register_operand" "=r") @@ -92,7 +121,7 @@ (match_operand:SI 1 "register_operand" "0") (match_operand:SI 2 "register_operand" "r")))] "" - "mod.l %0, %2") + "mod%0, %2") (define_insn "umodsi3" [(set (match_operand:SI 0 "register_operand" "=r") @@ -100,7 +129,7 @@ (match_operand:SI 1 "register_operand" "0") (match_operand:SI 2 "register_operand" "r")))] "" - "umod.l %0, %2") + "umod %0, %2") ;; - ;; Unary arithmetic instructions Index: gcc/config/moxie/moxie.opt === --- gcc/config/moxie/moxie.opt (revision 219054) +++ gcc/config/moxie/moxie.opt (working copy) @@ -26,6 +26,10 @@ Target RejectNegative Report Mask(LITTLE_ENDIAN) Generate little-endian code +mmul.x +Target Report Mask(HAS_MULX) +Enable MUL.X and UMUL.X instructions + ; Ignored by the compiler mno-crt0 Target
Commit: 4.9 branch: Backport RX alignment fix
Hi Guys, I am backporting an RX-specific patch from the mainline to the 4.9 branch as this fixes an internal error in the assembler (!) when running the gcc test gcc.c-torture/compile/pr53748.c. Cheers Nick gcc/ChangeLog 2014-12-24 Nick Clifton Backport from mainline: 2014-06-13 Nick Clifton * config/rx/rx.h (JUMP_ALIGN): Return the log value if user requested alignment is active. (LABEL_ALIGN): Likewise. (LOOP_ALIGN): Likewise. Index: gcc/config/rx/rx.h === --- gcc/config/rx/rx.h (revision 219053) +++ gcc/config/rx/rx.h (working copy) @@ -433,9 +433,9 @@ /* Compute the alignment needed for label X in various situations. If the user has specified an alignment then honour that, otherwise use rx_align_for_label. */ -#define JUMP_ALIGN(x) (align_jumps ? align_jumps : rx_align_for_label (x, 0)) -#define LABEL_ALIGN(x) (align_labels ? align_labels : rx_align_for_label (x, 3)) -#define LOOP_ALIGN(x) (align_loops ? align_loops : rx_align_for_label (x, 2)) +#define JUMP_ALIGN(x) (align_jumps > 1 ? align_jumps_log : rx_align_for_label (x, 0)) +#define LABEL_ALIGN(x) (align_labels > 1 ? align_labels_log : rx_align_for_label (x, 3)) +#define LOOP_ALIGN(x) (align_loops > 1 ? align_loops_log : rx_align_for_label (x, 2)) #define LABEL_ALIGN_AFTER_BARRIER(x) rx_align_for_label (x, 0) #define ASM_OUTPUT_MAX_SKIP_ALIGN(STREAM, LOG, MAX_SKIP) \
Commit: 4.9 branch: Backport RX 'R' operator fix
Hi Guys, I am backporting an RX-specific patch from the mainline to the 4.9 branch as it fixes an ICE running the gcc test gcc.c-torture/compile/pr39423-2.c. Cheers Nick gcc/ChangeLog 2014-12-24 Nick Clifton Backport from mainline: 2014-03-25 Nick Clifton * config/rx/rx.c (rx_print_operand): Allow R operator to accept SImode values. Index: gcc/config/rx/rx.c === --- gcc/config/rx/rx.c (revision 219054) +++ gcc/config/rx/rx.c (working copy) @@ -733,7 +733,7 @@ break; case 'R': - gcc_assert (GET_MODE_SIZE (GET_MODE (op)) < 4); + gcc_assert (GET_MODE_SIZE (GET_MODE (op)) <= 4); unsigned_load = true; /* Fall through. */ case 'Q':
Commit: MSP430: Fix addsi splitter (PR 64160)
Hi Guys. I am applying the patch below to fix PR 64160 for the MSP430. Cheers Nick gcc/ChangeLog 2014-12-24 Nick Clifton PR target/64160 * config/msp430/msp430.md (addsi splitter): Do not split when the destination partially overlaps the source. Index: config/msp430/msp430.md === --- config/msp430/msp430.md (revision 219057) +++ config/msp430/msp430.md (working copy) @@ -402,14 +402,16 @@ operands[6] = msp430_subreg (HImode, operands[0], SImode, 2); operands[7] = msp430_subreg (HImode, operands[1], SImode, 2); operands[8] = msp430_subreg (HImode, operands[2], SImode, 2); + + /* BZ 64160: Do not use this splitter when the dest partially overlaps the source. */ + if (reg_overlap_mentioned_p (operands[3], operands[7]) + || reg_overlap_mentioned_p (operands[3], operands[8])) + FAIL; + if (GET_CODE (operands[5]) == CONST_INT) - { - operands[9] = GEN_INT (INTVAL (operands[5]) & 0x); - } + operands[9] = GEN_INT (INTVAL (operands[5]) & 0x); else - { - operands[9] = gen_rtx_ZERO_EXTEND (SImode, operands[5]); - } + operands[9] = gen_rtx_ZERO_EXTEND (SImode, operands[5]); " )
Re: [PATCH, libiberty, gcc]: Introduce xasprintf to libiberty and use it in gengtype
On Wed, Dec 24, 2014 at 1:52 AM, Uros Bizjak wrote: > > libiberty/ChangeLog: > > 2014-12-24 Uros Bizjak > Ben Elliston > Manuel Lopez-Ibanez > > * xasprintf.c: New file. > * Makefile.in (CFILES): Add xasprintf.c. > (REQUIRED_OFILES): Add xasprintf.$(objext). > (xasprintf.$(objext)): New target. > * functions.texi: Regenerate. > > include/ChangeLog: > > 2014-12-24 Uros Bizjak > Ben Elliston > Manuel Lopez-Ibanez > > * libiberty.h (xasprintf): Declare. > > gcc/ChangeLog: > > 2014-12-24 Uros Bizjak > > * gengtype.h (xasprintf): Remove declaration. > * gengtype.c (xasprintf): Remove. > > Bootstrapped and regression tested on x86_64-linux-gnu. > > OK for mainline? This is OK. Thanks. Ian
[PATCH] combine: Correct cost calculation and display for split I2
If we have split a parallel I2 to two insns, we will count its RTL cost twice. This currently does not matter since the cost is 0 always (it is not a single set insn), but let's fix it anyway. Also do not display the fake I1 in the cost calculation in the dump file. Tested on powerpc64-linux. Okay for mainline? Segher 2014-12-24 Segher Boessenkool gcc/ * combine.c (combine_validate_cost): Do not count the cost of a split I2 twice. Do not display it twice in the dump, either. --- gcc/combine.c | 10 -- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gcc/combine.c b/gcc/combine.c index ed247bd..56ac34c 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -909,6 +909,12 @@ combine_validate_cost (rtx_insn *i0, rtx_insn *i1, rtx_insn *i2, rtx_insn *i3, i1_cost = i0_cost = 0; } + /* If we have split a PARALLEL I2 to I1,I2, we have counted its cost twice; + correct that. */ + if (old_cost && i1 && INSN_UID (i1) == INSN_UID (i2)) +old_cost -= i1_cost; + + /* Calculate the replacement insn_rtx_costs. */ new_i3_cost = insn_rtx_cost (newpat, optimize_this_for_speed_p); if (newi2pat) @@ -948,14 +954,14 @@ combine_validate_cost (rtx_insn *i0, rtx_insn *i1, rtx_insn *i2, rtx_insn *i3, reject ? "rejecting" : "allowing"); if (i0) fprintf (dump_file, "%d, ", INSN_UID (i0)); - if (i1) + if (i1 && INSN_UID (i1) != INSN_UID (i2)) fprintf (dump_file, "%d, ", INSN_UID (i1)); fprintf (dump_file, "%d and %d\n", INSN_UID (i2), INSN_UID (i3)); fprintf (dump_file, "original costs "); if (i0) fprintf (dump_file, "%d + ", i0_cost); - if (i1) + if (i1 && INSN_UID (i1) != INSN_UID (i2)) fprintf (dump_file, "%d + ", i1_cost); fprintf (dump_file, "%d + %d = %d\n", i2_cost, i3_cost, old_cost); -- 1.8.1.4
[PATCH] rs6000: Fix the dlmzb. testcases
The dlmzb. instruction requires an 8-byte aligned operand. The testcases try to enforce that by passing an arg as "long long *", but current GCC still assumes an alignment of 1 (correctly I think -- the pointer is only used as pointer to char). This patch changes the testcases to explicitly have an 8-byte aligned datum. Okay for mainline? Segher 2014-12-24 Segher Boessenkool gcc/testsuite/ * gcc.target/powerpc/405-dlmzb-strlen-1.c: Explicitly align arg. * gcc.target/powerpc/440-dlmzb-strlen-1.c: Ditto. --- gcc/testsuite/gcc.target/powerpc/405-dlmzb-strlen-1.c | 6 -- gcc/testsuite/gcc.target/powerpc/440-dlmzb-strlen-1.c | 6 -- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/gcc/testsuite/gcc.target/powerpc/405-dlmzb-strlen-1.c b/gcc/testsuite/gcc.target/powerpc/405-dlmzb-strlen-1.c index b06a74f..52675ba 100644 --- a/gcc/testsuite/gcc.target/powerpc/405-dlmzb-strlen-1.c +++ b/gcc/testsuite/gcc.target/powerpc/405-dlmzb-strlen-1.c @@ -12,8 +12,10 @@ typedef __SIZE_TYPE__ size_t; size_t strlen(const char *); +char s[100] __attribute__ ((aligned (8))); + size_t -strlen8(const long long *s) +strlen8(void) { - return strlen((const char *)s); + return strlen(s); } diff --git a/gcc/testsuite/gcc.target/powerpc/440-dlmzb-strlen-1.c b/gcc/testsuite/gcc.target/powerpc/440-dlmzb-strlen-1.c index d255bd7..0373466 100644 --- a/gcc/testsuite/gcc.target/powerpc/440-dlmzb-strlen-1.c +++ b/gcc/testsuite/gcc.target/powerpc/440-dlmzb-strlen-1.c @@ -12,8 +12,10 @@ typedef __SIZE_TYPE__ size_t; size_t strlen(const char *); +char s[100] __attribute__ ((aligned (8))); + size_t -strlen8(const long long *s) +strlen8(void) { - return strlen((const char *)s); + return strlen(s); } -- 1.8.1.4
[PATCH] simplify-rtx: Generalize (and X (ior (not X) Y) -> (and X Y)
The existing transform (and X (ior (not X) Y) -> (and X Y) has two shortcomings: it only handles identical RTX for X, i.e. registers, not e.g. subregs of registers; and it only handles the case where the NOT is the first arm of the IOR (it can be the second arm e.g. if the first arm is a NOT as well). Fix both. This fixes gcc.dg/and-1.c on powerpc64. Bootstrapped and tested on powerpc64-linux; okay for mainline? Segher 2014-12-24 Segher Boessenkool gcc/ * simplify-rtx.c (simplify_binary_operation_1): Handle more cases for the "(and X (ior (not X) Y) -> (and X Y)" transform. --- gcc/simplify-rtx.c | 16 ++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 277288a..ae0b49d 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -2933,15 +2933,27 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode, /* (and X (ior (not X) Y) -> (and X Y) */ if (GET_CODE (op1) == IOR && GET_CODE (XEXP (op1, 0)) == NOT - && op0 == XEXP (XEXP (op1, 0), 0)) + && rtx_equal_p (op0, XEXP (XEXP (op1, 0), 0))) return simplify_gen_binary (AND, mode, op0, XEXP (op1, 1)); /* (and (ior (not X) Y) X) -> (and X Y) */ if (GET_CODE (op0) == IOR && GET_CODE (XEXP (op0, 0)) == NOT - && op1 == XEXP (XEXP (op0, 0), 0)) + && rtx_equal_p (op1, XEXP (XEXP (op0, 0), 0))) return simplify_gen_binary (AND, mode, op1, XEXP (op0, 1)); + /* (and X (ior Y (not X)) -> (and X Y) */ + if (GET_CODE (op1) == IOR + && GET_CODE (XEXP (op1, 1)) == NOT + && rtx_equal_p (op0, XEXP (XEXP (op1, 1), 0))) + return simplify_gen_binary (AND, mode, op0, XEXP (op1, 0)); + + /* (and (ior Y (not X)) X) -> (and X Y) */ + if (GET_CODE (op0) == IOR + && GET_CODE (XEXP (op0, 1)) == NOT + && rtx_equal_p (op1, XEXP (XEXP (op0, 1), 0))) + return simplify_gen_binary (AND, mode, op1, XEXP (op0, 0)); + tem = simplify_byte_swapping_operation (code, mode, op0, op1); if (tem) return tem; -- 1.8.1.4
[Patch, MIPS] Remove some multilibs from mips-mti-linux-gnu target
This patch removes mips32[r1] and mips64[r1] from the list of mips-mti-linux-gnu architectures built with -mnan=2008. They should never have been included since these architectures do not support the ieee 2008 format (GCC warns and ignores the nan flag). The recent changes to glibc to use -Werror mean that the warning GCC gives is treated as an error and that glibc will not build with these flag combinations so I would like to remove them from the GCC mips-mti-linux-gnu multilib list. This does not affect any GCC target other then mips-mti-linux.gnu. OK to checkin? Steve Ellcey sell...@imgtec.com 2014-12-24 Steve Ellcey * config/mips/t-mti-linux (MULTILIB_EXCEPTIONS): Add exceptions for mips32[r1] and mips64[r1] with -mnan=2008. diff --git a/gcc/config/mips/t-mti-linux b/gcc/config/mips/t-mti-linux index 487a015..c111532 100644 --- a/gcc/config/mips/t-mti-linux +++ b/gcc/config/mips/t-mti-linux @@ -41,5 +41,8 @@ MULTILIB_EXCEPTIONS += *mips32/mmicromips* MULTILIB_EXCEPTIONS += *mips64*/mmicromips* MULTILIB_EXCEPTIONS += *mmicromips/mabi=64* -# We do not want nan2008 libraries for soft-float. +# We do not want nan2008 libraries for soft-float, +# mips32[r1], or mips64[r1]. MULTILIB_EXCEPTIONS += *msoft-float*/*mnan=2008* +MULTILIB_EXCEPTIONS += *mips32/*mnan=2008* +MULTILIB_EXCEPTIONS += *mips64/*mnan=2008*
[PATCH] libobjc: Properly handle classes without instance variables in class_copyIvarList ().
Hello, The attached patch fixes an issue reported a couple of years ago in Bug 51891 (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51891). The problem is caused because classes without instance variables have no ivar list at all, so that their ivars pointer is NULL, but the code in class_copyIvarList () is unaware of this. That this is in fact so can be easily verified by checking the code of class_addIvar in the same source file, where the ivars list is allocated when the first ivar is added. The code there also checks for a NULL ivars pointer. The patch also adds a simple test-case for this issue. I think that the ChangeLog entry should be something along the lines of: 2014-12-24 Dimitris Papavasiliou PR libobjc/51891 * libobjc/ivars.c: Add a check for classes without instance variables, which have a NULL ivar list pointer. * gcc/testsuite/objc.dg/gnu-api-2-class.m: Add a test case for the above change. I hope I got the formatting right. I've run make -k check-objc and all tests pass without problems. Let me know if there are any problems, or if I can do anything else to facilitate the acceptance of the patch. Regards, Dimitris Index: gcc/testsuite/objc.dg/gnu-api-2-class.m === --- gcc/testsuite/objc.dg/gnu-api-2-class.m (revision 219054) +++ gcc/testsuite/objc.dg/gnu-api-2-class.m (working copy) @@ -239,6 +239,19 @@ abort (); } + printf ("Testing class_copyIvarList () on class with no instance variables...\n"); + { +unsigned int count; +Ivar * list = class_copyIvarList (objc_getClass ("MyOtherSubClass"), + &count); + +if (count != 0) + abort (); + +if (list != NULL) + abort (); + } + printf ("Testing class_copyMethodList ()...\n"); { unsigned int count; Index: libobjc/ivars.c === --- libobjc/ivars.c (revision 219054) +++ libobjc/ivars.c (working copy) @@ -179,7 +179,7 @@ struct objc_ivar **returnValue = NULL; struct objc_ivar_list* ivar_list; - if (class_ == Nil || CLS_IS_IN_CONSTRUCTION (class_)) + if (class_ == Nil || CLS_IS_IN_CONSTRUCTION (class_) || !class_->ivars) { if (numberOfReturnedIvars) *numberOfReturnedIvars = 0;
Re: [PATCH] rs6000: Fix the dlmzb. testcases
On Wed, Dec 24, 2014 at 12:05 PM, Segher Boessenkool wrote: > The dlmzb. instruction requires an 8-byte aligned operand. The testcases > try to enforce that by passing an arg as "long long *", but current GCC > still assumes an alignment of 1 (correctly I think -- the pointer is only > used as pointer to char). > > This patch changes the testcases to explicitly have an 8-byte aligned datum. > > Okay for mainline? > > > Segher > > > 2014-12-24 Segher Boessenkool > > gcc/testsuite/ > * gcc.target/powerpc/405-dlmzb-strlen-1.c: Explicitly align arg. > * gcc.target/powerpc/440-dlmzb-strlen-1.c: Ditto. Okay. Thanks, David
[PATCH] Cleaning up incomplete type warning.
This removes an unnecessary static variable from the code and also makes it a single warning instead of two. Patch originally proposed by Manuel López-Ibáñez. Luis Strano gcc/c/ChangeLog: 2014-12-24 Luis Felipe Strano Moraes * c-decl.c (get_parm_info): cleaning up incomplete type warning. Index: gcc/c/c-decl.c === --- gcc/c/c-decl.c (revision 219059) +++ gcc/c/c-decl.c (working copy) @@ -6897,7 +6897,6 @@ get_parm_info (bool ellipsis, tree expr) tree types= 0; tree others = 0; - static bool explained_incomplete_types = false; bool gave_void_only_once_err = false; arg_info->had_vla_unspec = current_scope->had_vla_unspec; @@ -7000,19 +6999,15 @@ get_parm_info (bool ellipsis, tree expr) { if (b->id) /* The %s will be one of 'struct', 'union', or 'enum'. */ - warning (0, "%<%s %E%> declared inside parameter list", -keyword, b->id); + warning (0, "%<%s %E%> declared inside parameter list and will" +" not be visible outside of this definition or" +" declaration", keyword, b->id); else /* The %s will be one of 'struct', 'union', or 'enum'. */ - warning (0, "anonymous %s declared inside parameter list", -keyword); + warning (0, "anonymous %s declared inside parameter list and" +" will not be visible outside of this definition or" +" declaration", keyword); - if (!explained_incomplete_types) - { - warning (0, "its scope is only this definition or declaration," - " which is probably not what you want"); - explained_incomplete_types = true; - } } tag.id = b->id; Index: gcc/testsuite/gcc.dg/parm-incomplete-1.c === --- gcc/testsuite/gcc.dg/parm-incomplete-1.c(revision 219059) +++ gcc/testsuite/gcc.dg/parm-incomplete-1.c(working copy) @@ -17,7 +17,6 @@ struct s { int b; }; void h (struct s x) { } void j(struct t2); /* { dg-warning "'struct t2' declared inside parameter list" } */ -/* { dg-warning "its scope is only" "explanation" { target *-*-* } 19 } */ union u; Index: gcc/testsuite/gcc.dg/pr18809-1.c === --- gcc/testsuite/gcc.dg/pr18809-1.c(revision 219059) +++ gcc/testsuite/gcc.dg/pr18809-1.c(working copy) @@ -5,6 +5,5 @@ void foo(enum E e) {} /* { dg-error "forward ref" "forward" } */ /* { dg-warning "declared" "declared" { target *-*-* } 6 } */ - /* { dg-warning "scope" "scope" { target *-*-* } 6 } */ /* { dg-error "incomplete" "incomplete" { target *-*-* } 6 } */ void bar() { foo(0); } Index: gcc/testsuite/gcc.dg/pr27953.c === --- gcc/testsuite/gcc.dg/pr27953.c (revision 219059) +++ gcc/testsuite/gcc.dg/pr27953.c (working copy) @@ -1,7 +1,6 @@ /* PR c/27953 */ void foo(struct A a) {} /* { dg-warning "declared inside parameter list" "inside" } */ -/* { dg-warning "its scope is only" "scope" { target *-*-* } 3 } */ /* { dg-error "incomplete type" "incomplete" { target *-*-* } 3 } */ void foo() {}/* { dg-error "redefinition" "redef" } */ Index: gcc/testsuite/gcc.dg/vla-11.c === --- gcc/testsuite/gcc.dg/vla-11.c (revision 219059) +++ gcc/testsuite/gcc.dg/vla-11.c (working copy) @@ -10,4 +10,3 @@ void foo11a(int x[sizeof(int *(*)[*])]); /* { dg-w void foo11b(__SIZE_TYPE__ x, int y[(__UINTPTR_TYPE__)(int (*)[*])x]); /* { dg-warning "not in a declaration" } */ void foo11c(struct s { int (*x)[*]; } *y); /* { dg-error "a member of a structure or union cannot have a variably modified type" "variably modified" } */ /* { dg-warning "'struct s' declared inside parameter list" "struct decl" { target *-*-* } 11 } */ -/* { dg-warning "its scope is only this definition or declaration" "struct scope" { target *-*-* } 11 } */
[SH][committed] Fix pr51244-12.c failures on SH2A
Hi, Attached patch fixes the failures on SH2A that started to show recently in the gcc.target/sh/pr51244-12.c test case. Tested with make -k check-gcc RUNTESTFLAGS="--target_board=sh-sim \{-m2/-ml,-m2/-mb,-m2a/-mb,-m4/-ml,-m4/-mb,-m4a/-ml,-m4a/-mb}" Committed as r219062. Cheers, Oleg gcc/ChangeLog: PR target/51244 * config/sh/sh.md (*mov_t_msb_neg): Convert split into insn_and_split. Index: gcc/config/sh/sh.md === --- gcc/config/sh/sh.md (revision 219029) +++ gcc/config/sh/sh.md (working copy) @@ -11601,8 +11601,8 @@ (set (match_dup 0) (xor:SI (match_dup 0) (const_int 1)))]) ;; Use negc to store the T bit in a MSB of a reg in the following way: -;; T = 1: 0x8000 -> reg -;; T = 0: 0x7FFF -> reg +;; T = 0: 0x8000 -> reg +;; T = 1: 0x7FFF -> reg ;; This works because 0 - 0x8000 = 0x8000. ;; ;; This insn must not match again after it has been split into the constant @@ -11635,27 +11635,27 @@ "negc %1,%0" [(set_attr "type" "arith")]) -;; These are essentially the same as above, but with the inverted T bit. -;; Combine recognizes the split patterns, but does not take them sometimes -;; if the T_REG clobber is specified. Instead it tries to split out the -;; T bit negation. Since these splits are supposed to be taken only by -;; combine, it will see the T_REG clobber of the *mov_t_msb_neg insn, so this -;; should be fine. -(define_split +(define_insn_and_split "*mov_t_msb_neg" [(set (match_operand:SI 0 "arith_reg_dest") (plus:SI (match_operand 1 "negt_reg_operand") - (const_int 2147483647)))] ;; 0x7fff - "TARGET_SH1 && can_create_pseudo_p ()" + (const_int 2147483647))) ;; 0x7fff + (clobber (reg:SI T_REG))] + "TARGET_SH1" + "#" + "&& can_create_pseudo_p ()" [(parallel [(set (match_dup 0) (minus:SI (const_int -2147483648) (reg:SI T_REG))) (clobber (reg:SI T_REG))])]) -(define_split +(define_insn_and_split "*mov_t_msb_neg" [(set (match_operand:SI 0 "arith_reg_dest") (if_then_else:SI (match_operand 1 "t_reg_operand") (const_int 2147483647) ;; 0x7fff - (const_int -2147483648)))] ;; 0x8000 - "TARGET_SH1 && can_create_pseudo_p ()" + (const_int -2147483648))) ;; 0x8000 + (clobber (reg:SI T_REG))] + "TARGET_SH1" + "#" + "&& can_create_pseudo_p ()" [(parallel [(set (match_dup 0) (minus:SI (const_int -2147483648) (reg:SI T_REG))) (clobber (reg:SI T_REG))])])
[PATCH] ubsan: Do not run the testsuite if ubsan does not work at all
I normally build with --disable-libsanitizer, because the sanitizers testresults are very unreproducable, so just annoying noise. This however makes most (all?) ubsan testcases fail, since they want to load a shared library that does not exist. This patch disables the ubsan testcases if a trivial program does not run when compiled with ubsan. Tested on powerpc64-linux, -m32,-m32/-mpowerpc64,-m64,-m64/-mlra; 5452 failures gone, no other changes. Okay for mainline? Segher 2014-12-24 Segher Boessenkool gcc/testsuite/ * lib/ubsan-dg.exp (check_effective_target_fsanitize_undefined): Check if testcases run without errors, not just if they compile. --- gcc/testsuite/lib/ubsan-dg.exp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/lib/ubsan-dg.exp b/gcc/testsuite/lib/ubsan-dg.exp index 3bfdcc8..cea3e0e 100644 --- a/gcc/testsuite/lib/ubsan-dg.exp +++ b/gcc/testsuite/lib/ubsan-dg.exp @@ -18,7 +18,7 @@ # code, 0 otherwise. proc check_effective_target_fsanitize_undefined {} { -return [check_no_compiler_messages fsanitize_undefined executable { +return [check_runtime fsanitize_undefined { int main (void) { return 0; } } "-fsanitize=undefined"] } -- 1.8.1.4
C++ PATCH for c++/63522 (ICE with unexpanded parameter pack)
Things later in compilation were getting confused because we didn't catch the unexpanded parameter pack soon enough. While looking at this I also fixed a location issue with the error about a parameter pack before the end of a class template parameter list, and avoided some follow-on errors when a template parameter is erroneous. Tested x86_64-pc-linux-gnu, applying to trunk. commit 93c26661038b76775f56a4a277ee78aa03b23578 Author: Jason Merrill Date: Mon Dec 22 21:41:40 2014 -0500 PR c++/63522 * parser.c (cp_parser_type_parameter): Call check_for_bare_parameter_packs on default argument. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index e57a5bd..2af1576 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -13499,6 +13499,8 @@ cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack) "default arguments"); default_argument = NULL_TREE; } + else if (check_for_bare_parameter_packs (default_argument)) + default_argument = error_mark_node; pop_deferring_access_checks (); } else diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic164.C b/gcc/testsuite/g++.dg/cpp0x/variadic164.C new file mode 100644 index 000..8f9cdb1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic164.C @@ -0,0 +1,12 @@ +// PR c++/63522 +// { dg-do compile { target c++11 } } + +template struct tuple; +template void slice(); +template using slice_result = decltype(slice); +template , + slice_result...>::type> // { dg-error "parameter pack" } +void zip_with(Tuple...); +decltype(zip_with(0)) d; // { dg-error "no match" } diff --git a/gcc/testsuite/g++.dg/cpp0x/vt-34052.C b/gcc/testsuite/g++.dg/cpp0x/vt-34052.C index 1036537..31d2831 100644 --- a/gcc/testsuite/g++.dg/cpp0x/vt-34052.C +++ b/gcc/testsuite/g++.dg/cpp0x/vt-34052.C @@ -1,8 +1,8 @@ // { dg-do compile { target c++11 } } -template struct A {}; // { dg-error "must be at the end" } +template struct A {}; // { dg-error "parameter pack" } -template class U> struct B // { dg-error "must be at the end" } +template class U> struct B // { dg-error "parameter pack" } { - template U foo(); // { dg-error "mismatch|constant|invalid|invalid" } + template U foo(); // { dg-error "mismatch|constant|wrong|invalid" } }; commit 9fede37842c061ad13cf7ee82d9d94befc68463d Author: Jason Merrill Date: Tue Dec 23 13:50:27 2014 -0500 * pt.c (check_default_tmpl_args): Uses the parameter source location in the diagnostic. (convert_template_argument): Just return if parm is error_mark_node. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index f5bd842..21d0d3a 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -4578,13 +4578,8 @@ check_default_tmpl_args (tree decl, tree parms, bool is_primary, parameter pack, at the end of the template parameter list. */ - if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL) - error ("parameter pack %qE must be at the end of the" - " template parameter list", TREE_VALUE (parm)); - else - error ("parameter pack %qT must be at the end of the" - " template parameter list", - TREE_TYPE (TREE_VALUE (parm))); + error ("parameter pack %q+D must be at the end of the" + " template parameter list", TREE_VALUE (parm)); TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) = error_mark_node; @@ -6524,6 +6519,9 @@ convert_template_argument (tree parm, tree val; int is_type, requires_type, is_tmpl_type, requires_tmpl_type; + if (parm == error_mark_node) +return error_mark_node; + if (TREE_CODE (arg) == TREE_LIST && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF) { diff --git a/gcc/testsuite/g++.dg/cpp0x/pr31432.C b/gcc/testsuite/g++.dg/cpp0x/pr31432.C index 1f2ea50..2048077 100644 --- a/gcc/testsuite/g++.dg/cpp0x/pr31432.C +++ b/gcc/testsuite/g++.dg/cpp0x/pr31432.C @@ -4,5 +4,5 @@ template struct A // { dg-error "parameter pack" } static int i; }; -A a; // { dg-error "mismatch|expected|invalid type" } -A b; // { dg-error "mismatch|expected|invalid type" } +A a; +A b; diff --git a/gcc/testsuite/g++.dg/cpp0x/pr31442.C b/gcc/testsuite/g++.dg/cpp0x/pr31442.C index 7fd20e7..b4c737c 100644 --- a/gcc/testsuite/g++.dg/cpp0x/pr31442.C +++ b/gcc/testsuite/g++.dg/cpp0x/pr31442.C @@ -6,4 +6,4 @@ struct B template class C> B(C); }; -B b = A(); // { dg-error "mismatch|expected" } +B b = A(); diff --git a/gcc/testsuite/g++.dg/cpp0x/pr32115.C b/gcc/testsuite/g++.dg/cpp0x/pr32115.C index 5722aa3..fafa4ee 100644 --- a/gcc/testsuite/g++.dg/cpp0x/pr32115.C +++ b/gcc/testsuite/g++.dg/cpp0x/pr32115.C @@ -1,4 +1,4 @@ // { dg-do compile { target c++11 } } template struct A {}; // { dg-error "end of" } -A a; // { dg-error "mismatch|expected|invalid" } +A a; diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic40.C b/gcc/testsuite/g++.dg/cpp0x/variadic40.C index e4df9b8..e62d62c 100644 --- a/gcc/testsuite/g++.dg/cpp0x/variadic40.C +++ b/gcc/testsuite/g++.dg/cpp0x/variadic40.C @@ -1
Re: [PATCH] pr31397 - implement -Wsuggest-override
OK. Jason