Re: [patch c++]: Fix type_info struct for llp64 targets
Ping 2012/12/21 Kai Tietz : > Hello, > > this patch fixes the layout of the info_type-s for llp64 target. We > used here 'long' type instead > of pointer-scalar-witdth type. That's an issue for llp64 targets. > I introduced for that the LONGPTR_T helper-macro, which has either > scalar-size of 'long' type, or > of 'long long' type's size, if pointer is larger then scalar-size of > 'long' type. > > ChangeLog > > 2012-12-21 Kai Tietz > > * rtti.c (LONGPTR_T): New helper-macro. > (get_pseudo_ti_init): Initialize offset_type by LONGPTR_T > type instead of 'long' type. > (create_tinfo_types): Use for offset/flags field LONGPTR_T > type instead of 'long' type. > > Tested for x86_64-w64-mingw32, i686-w64-mingw32, and > x86_64-unknown-linux-gnu. Ok for apply? > > Regards, > Kai > > Index: rtti.c > === > --- rtti.c (Revision 194660) > +++ rtti.c (Arbeitskopie) > @@ -89,6 +89,12 @@ typedef enum tinfo_kind >/* ... abi::__vmi_type_info */ > } tinfo_kind; > > +/* Helper macro to get maximum scalar-width of pointer or of the 'long'-type. > + This of interest for llp64 targets. */ > +#define LONGPTR_T \ > + integer_types[(POINTER_SIZE <= TYPE_PRECISION (integer_types[itk_long]) \ > +? itk_long : itk_long_long)] > + > /* A vector of all tinfo decls that haven't yet been emitted. */ > vec *unemitted_tinfo_decls; > > @@ -1116,7 +1122,7 @@ get_pseudo_ti_init (tree type, unsigned tk_index) > tree binfo = TYPE_BINFO (type); > int nbases = BINFO_N_BASE_BINFOS (binfo); > vec *base_accesses = BINFO_BASE_ACCESSES (binfo); > - tree offset_type = integer_types[itk_long]; > + tree offset_type = LONGPTR_T; > tree base_inits = NULL_TREE; > int ix; > vec *init_vec = NULL; > @@ -1413,14 +1419,15 @@ create_tinfo_types (void) >/* Base class internal helper. Pointer to base type, offset to base, > flags. */ >{ > -tree field, fields; > +tree field, fields, offset_flags_type; > > field = build_decl (BUILTINS_LOCATION, > FIELD_DECL, NULL_TREE, type_info_ptr_type); > fields = field; > > +offset_flags_type = LONGPTR_T; > field = build_decl (BUILTINS_LOCATION, > - FIELD_DECL, NULL_TREE, integer_types[itk_long]); > + FIELD_DECL, NULL_TREE, offset_flags_type); > DECL_CHAIN (field) = fields; > fields = field; -- | (\_/) This is Bunny. Copy and paste | (='.'=) Bunny into your signature to help | (")_(") him gain world domination
Re: [RFC PATCH, i386]: Use %r15 for REAL_PIC_OFFSET_TABLE_REGNUM on x86_64
On Wed, Dec 26, 2012 at 9:16 PM, Andi Kleen wrote: >> Can you please post a real-world example, where using %r15 would break >> existing code? > > I used to run into problems like this when porting code to gcc from icc or VC. > A lot of hyper optimized inline assembler snippets wants to use all registers > and icc/VC support that. With gcc usually had to add some manual > push/pops. In older gcc versions usually more than one because reload > tended to error out otherwise. > > So by try and error used the non fixed registers, but let the compiler know > about the others. This case would break. > > In 64bit it was less a problem than on 32bit, but could still happen. > > Admittedly medium is somewhat obscure and rarely used (and very slow), > but someone could be still using it. The alternative approach is changing cpuid definition in cpuid.h (as in attached patch) to preserve %rbx, but we can't detect various code model settings there. Since the change depends on the definition of __PIC__, we unnecessary preserve %rbx also for -mcmodel=small. However, code that involves cpuid is rarely performance critical, so perhaps we can live with this tradeoff. IMO, this patch can be used on 4.7 branch, too. Uros.
Re: [RFC PATCH, i386]: Use %r15 for REAL_PIC_OFFSET_TABLE_REGNUM on x86_64
On Thu, Dec 27, 2012 at 9:08 AM, Uros Bizjak wrote: > On Wed, Dec 26, 2012 at 9:16 PM, Andi Kleen wrote: >>> Can you please post a real-world example, where using %r15 would break >>> existing code? >> >> I used to run into problems like this when porting code to gcc from icc or >> VC. >> A lot of hyper optimized inline assembler snippets wants to use all registers >> and icc/VC support that. With gcc usually had to add some manual >> push/pops. In older gcc versions usually more than one because reload >> tended to error out otherwise. >> >> So by try and error used the non fixed registers, but let the compiler know >> about the others. This case would break. >> >> In 64bit it was less a problem than on 32bit, but could still happen. >> >> Admittedly medium is somewhat obscure and rarely used (and very slow), >> but someone could be still using it. > > The alternative approach is changing cpuid definition in cpuid.h (as > in attached patch) to preserve %rbx, but we can't detect various code > model settings there. Since the change depends on the definition of > __PIC__, we unnecessary preserve %rbx also for -mcmodel=small. > However, code that involves cpuid is rarely performance critical, so > perhaps we can live with this tradeoff. > > IMO, this patch can be used on 4.7 branch, too. Now with the patch ... Uros. Index: i386/cpuid.h === --- i386/cpuid.h(revision 194723) +++ i386/cpuid.h(working copy) @@ -132,8 +132,9 @@ #define signature_VORTEX_ecx 0x436f5320 #define signature_VORTEX_edx 0x36387865 -#if defined(__i386__) && defined(__PIC__) +#if defined(__PIC__) /* %ebx may be the PIC register. */ +#if defined(__i386__) #if __GNUC__ >= 3 #define __cpuid(level, a, b, c, d) \ __asm__ ("xchg{l}\t{%%}ebx, %1\n\t" \ @@ -165,6 +166,21 @@ : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ : "0" (level), "2" (count)) #endif +#elif defined(__x86_64__) +#define __cpuid(level, a, b, c, d) \ + __asm__ ("xchg{q}\t{%%}rbx, %q1\n\t" \ + "cpuid\n\t" \ + "xchg{q}\t{%%}rbx, %q1\n\t" \ + : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ + : "0" (level)) + +#define __cpuid_count(level, count, a, b, c, d)\ + __asm__ ("xchg{q}\t{%%}rbx, %q1\n\t" \ + "cpuid\n\t" \ + "xchg{q}\t{%%}rbx, %q1\n\t" \ + : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ + : "0" (level), "2" (count)) +#endif #else #define __cpuid(level, a, b, c, d) \ __asm__ ("cpuid\n\t" \
Re: [RFC PATCH, i386]: Use %r15 for REAL_PIC_OFFSET_TABLE_REGNUM on x86_64
* Uros Bizjak: > +#elif defined(__x86_64__) > +#define __cpuid(level, a, b, c, d) \ > + __asm__ ("xchg{q}\t{%%}rbx, %q1\n\t" \ > +"cpuid\n\t" \ > +"xchg{q}\t{%%}rbx, %q1\n\t" \ > +: "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ > +: "0" (level)) > + > +#define __cpuid_count(level, count, a, b, c, d) \ > + __asm__ ("xchg{q}\t{%%}rbx, %q1\n\t" \ > +"cpuid\n\t" \ > +"xchg{q}\t{%%}rbx, %q1\n\t" \ > +: "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ > +: "0" (level), "2" (count)) > +#endif Shouldn't the constraint for b be "=&r"?
Re: [RFC PATCH, i386]: Use %r15 for REAL_PIC_OFFSET_TABLE_REGNUM on x86_64
On Thu, Dec 27, 2012 at 10:10 AM, Florian Weimer wrote: > * Uros Bizjak: > >> +#elif defined(__x86_64__) >> +#define __cpuid(level, a, b, c, d) \ >> + __asm__ ("xchg{q}\t{%%}rbx, %q1\n\t" \ >> +"cpuid\n\t" \ >> +"xchg{q}\t{%%}rbx, %q1\n\t" \ >> +: "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ >> +: "0" (level)) >> + >> +#define __cpuid_count(level, count, a, b, c, d) \ >> + __asm__ ("xchg{q}\t{%%}rbx, %q1\n\t" \ >> +"cpuid\n\t" \ >> +"xchg{q}\t{%%}rbx, %q1\n\t" \ >> +: "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ >> +: "0" (level), "2" (count)) >> +#endif > > Shouldn't the constraint for b be "=&r"? Technically yes, but all input operands are matched to outputs, so in practice it doesn't really matter. Uros.
Re: [PATCH] Function Multiversioning Bug, checking for function versions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 148388d..575e03a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,7 @@ -<<< .mine +2012-12-27 Andreas Schwab + + * target.def (supports_function_versions): Fix typo. + 2012-12-26 Sriraman Tallam * doc/tm.texi.in (TARGET_OPTION_SUPPORTS_FUNCTION_VERSIONS): Document @@ -15,12 +18,10 @@ * (is_function_default_version): Check target string. * TARGET_OPTION_SUPPORTS_FUNCTION_VERSIONS: New macro. -=== 2012-12-27 Steven Bosscher * cgraph.c (verify_cgraph_node): Don't allocate/free visited_nodes set. ->>> .r194729 2012-12-25 John David Anglin PR target/53789 diff --git a/gcc/target.def b/gcc/target.def index 79bb955..d0547be 100644 --- a/gcc/target.def +++ b/gcc/target.def @@ -2839,7 +2839,7 @@ DEFHOOK (supports_function_versions, "", bool, (void), - hool_bool_void_false) + hook_bool_void_false) /* Function to determine if one function can inline another function. */ #undef HOOK_PREFIX -- 1.8.0.2 -- Andreas Schwab, sch...@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."
Re: [patch, fortran] PR48976 INQUIRE with STREAM= not supported
Dear Jerry, thanks for the patch.However, I wonder about the following: Will that be backward compatible with binaries compiled with GCC < 4.8 or will that cause problems? I have the feeling that it is okay as the flag ("cf2") indicating whether "stream=" is present has still the same type and "iqstream" comes last in st_parameter_inquire and is only set if (cf2 & IOPARM_INQUIRE_HAS_STREAM). Can confirm that there is no backward-compatibility issue? If there isn't, the patch is okay. Tobias Jerry DeLisle wrote: 2012-12-27 Jerry DeLisle PR fortran/48976 * gfortran.h (gfc_inquire struct): Add pointer for inquire stream. * io.c (io_tag): Add tag for inquire stream. (match_inquire_element): Add matcher for new tag. (gfc_resolve_inquire): Resolve new tag. * ioparm.def: Add new parameter for inquire stream. * trans-io.c (gfc_trans_inquire): Add tranlste code for inquire stream. 2012-12-27 Jerry DeLisle PR libfortran/48976 * io/inquire.c (inquire_via_unit): Set user stream inquiry variable to appropriate value based on unit access method. (inquire_via_filename): Since filename is not associated with an open unit, set stream inquiry to UNKNOWN. * io/io.h: Define inquire stream parameters.
Re: [Patch, libffi] libffi merge
On Wed, Dec 26, 2012 at 11:29:42AM -0500, Anthony Green wrote: > I've committed this patch. > > Thanks, > > Anthony Green Anthony, Did you run make check in libffi on this merge? These changes appear to have broken the dejagnu testing in libffi... # make -k check Password: Making check in include make[1]: Nothing to be done for `check'. Making check in testsuite make check-DEJAGNU srcdir='../../../../gcc-4.8-20121226/libffi/testsuite'; export srcdir; \ EXPECT=`if [ -f ../../expect/expect ] ; then echo ../../expect/expect ; else echo expect ; fi`; export EXPECT; \ runtest=`if [ -f ../../../../gcc-4.8-20121226/libffi/../dejagnu/runtest ] ; then echo ../../../../gcc-4.8-20121226/libffi/../dejagnu/runtest ; else echo runtest; fi`; \ if /bin/sh -c "$runtest --version" > /dev/null 2>&1; then \ exit_status=0; l='libffi'; for tool in $l; do \ if $runtest --tool $tool --srcdir $srcdir ; \ then :; else exit_status=1; fi; \ done; \ else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi; \ exit $exit_status WARNING: Couldn't find the global config file. Test Run By root on Thu Dec 27 09:48:42 2012 Native configuration is x86_64-apple-darwin12.2.0 === libffi tests === Schedule of variations: unix Running target unix Using /sw/share/dejagnu/baseboards/unix.exp as board description file for target. Using /sw/share/dejagnu/config/unix.exp as generic interface file for target. Using ../../../../gcc-4.8-20121226/libffi/testsuite/config/default.exp as tool-and-target-specific interface file. Running ../../../../gcc-4.8-20121226/libffi/testsuite/libffi.call/call.exp ... ERROR: (DejaGnu) proc "set_ld_library_path_env_vars" does not exist. The error code is NONE The info on the error is: invalid command name "set_ld_library_path_env_vars" while executing "::tcl_unknown set_ld_library_path_env_vars" ("uplevel" body line 1) invoked from within "uplevel 1 ::tcl_unknown $args" === libffi Summary === make[2]: *** [check-DEJAGNU] Error 1 make[1]: *** [check-am] Error 2 make[1]: Target `check' not remade because of errors. This is showing up repeatedly in gcc-regressions. Jack > > > On Sun, Dec 23, 2012 at 4:37 PM, Anthony Green wrote: > > The attached patch is fairly complete merge of the libffi side-stream > > git repo. Highlights include aarch64 support, blackfin support, and > > additional windows ABI support. I will commit this in a day or two > > unless there are any objections. > > > > Thanks, > > > > Anthony Green > > > > > > 2012-10-30 Magnus Granberg > > Pavel Labushev > > > > * configure.ac: New options pax_emutramp > > * configure, fficonfig.h.in: Regenerated > > * src/closures.c: New function emutramp_enabled_check() and > > checks. > > > > 2012-10-30 Frederick Cheung > > > > * configure.ac: Enable FFI_MAP_EXEC_WRIT for Darwin 12 (mountain > > lion) and future version. > > * configure: Rebuild. > > > > 2012-10-30 James Greenhalgh > > Marcus Shawcroft > > > > * README: Add details of aarch64 port. > > * src/aarch64/ffi.c: New. > > * src/aarch64/ffitarget.h: Likewise. > > * src/aarch64/sysv.S: Likewise. > > * Makefile.am: Support aarch64. > > * configure.ac: Support aarch64. > > * Makefile.in, configure: Rebuilt. > > > > 2012-10-30 James Greenhalgh > > Marcus Shawcroft > > > > * testsuite/lib/libffi.exp: Add support for aarch64. > > * testsuite/libffi.call/cls_struct_va1.c: New. > > * testsuite/libffi.call/cls_uchar_va.c: Likewise. > > * testsuite/libffi.call/cls_uint_va.c: Likewise. > > * testsuite/libffi.call/cls_ulong_va.c: Likewise. > > * testsuite/libffi.call/cls_ushort_va.c: Likewise. > > * testsuite/libffi.call/nested_struct11.c: Likewise. > > * testsuite/libffi.call/uninitialized.c: Likewise. > > * testsuite/libffi.call/va_1.c: Likewise. > > * testsuite/libffi.call/va_struct1.c: Likewise. > > * testsuite/libffi.call/va_struct2.c: Likewise. > > * testsuite/libffi.call/va_struct3.c: Likewise. > > > > 2012-10-12 Walter Lee > > > > * Makefile.am: Add TILE-Gx/TILEPro support. > > * configure.ac: Likewise. > > * Makefile.in: Regenerate. > > * configure: Likewise. > > * src/prep_cif.c (ffi_prep_cif_core): Handle TILE-Gx/TILEPro. > > * src/tile: New directory. > > * src/tile/ffi.c: New file. > > * src/tile/ffitarget.h: Ditto. > > * src/tile/tile.S: Ditto. > > > > 2012-10-12 Matthias Klose > > > > * generate-osx-source-and-headers.py: Normalize whitespace. > > > > 2012-05-05 Nicolas Lelong > > > > * libffi.xcodeproj/project.pbxproj: Fixes. > > * README: Update for iOS
Re: [Patch, libffi] libffi merge
Jack Howarth writes: > Did you run make check in libffi on this merge? These changes > appear to have broken the dejagnu testing in libffi... The problem is the wrong definition of load_gcc_lib. @@ -16,7 +16,7 @@ proc load_gcc_lib { filename } { global srcdir -load_file $srcdir/../../gcc/testsuite/lib/$filename +load_file $srcdir/lib/$filename } load_lib dg.exp Andreas. -- Andreas Schwab, sch...@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."
Re: [Patch, libffi] libffi merge
On Thu, Dec 27, 2012 at 04:06:47PM +0100, Andreas Schwab wrote: > Jack Howarth writes: > > > Did you run make check in libffi on this merge? These changes > > appear to have broken the dejagnu testing in libffi... > > The problem is the wrong definition of load_gcc_lib. > > @@ -16,7 +16,7 @@ > > proc load_gcc_lib { filename } { > global srcdir > -load_file $srcdir/../../gcc/testsuite/lib/$filename > +load_file $srcdir/lib/$filename > } > > load_lib dg.exp > > Andreas. Andreas, What do you get for the testsuite results with that change? On x86_64-apple-darwin12, every single test seems to fail the test for excess errors at -m32 (but not -m64) when using... make -k check RUNTESTFLAGS="--target_board=unix'{-m32,-m64}'" === libffi Summary for unix/-m32 === # of unexpected failures663 # of unresolved testcases 663 # of unsupported tests 55 These show up at -m32 as... Executing on host: /sw/src/fink.build/gcc48-4.8.0-1000/darwin_objdir/gcc/xgcc -B/sw/src/fink.build/gcc48-4.8.0-1000/darwin_objdir/gcc/ ../../../../gcc-4.8-20121226/libffi/testsuite/libffi.call/closure_fn0.c -O0 -W -Wall -I/sw/src/fink.build/gcc48-4.8.0-1000/darwin_objdir/x86_64-apple-darwin12.2.0/libffi/testsuite/../include -I../../../../gcc-4.8-20121226/libffi/testsuite/../include -I/sw/src/fink.build/gcc48-4.8.0-1000/darwin_objdir/x86_64-apple-darwin12.2.0/libffi/testsuite/../include/.. -L/sw/src/fink.build/gcc48-4.8.0-1000/darwin_objdir/x86_64-apple-darwin12.2.0/libffi/testsuite/../.libs -Wl,-allow_stack_execute -shared-libgcc -lffi -lm -m32 -o ./closure_fn0.exe (timeout = 300) ld: warning: ignoring file /sw/src/fink.build/gcc48-4.8.0-1000/darwin_objdir/x86_64-apple-darwin12.2.0/libffi/.libs/libffi.dylib, file was built for unsupported file format ( 0xcf 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0 ) which is not the architecture being linked (i386): /sw/src/fink.build/gcc48-4.8.0-1000/darwin_objdir/x86_64-apple-darwin12.2.0/libffi/.libs/libffi.dylib^M Undefined symbols for architecture i386:^M "_ffi_closure_alloc", referenced from:^M _main in ccIwL8dt.o^M "_ffi_prep_cif", referenced from:^M _main in ccIwL8dt.o^M "_ffi_prep_closure_loc", referenced from:^M _main in ccIwL8dt.o^M "_ffi_type_double", referenced from:^M _main in ccIwL8dt.o^M "_ffi_type_float", referenced from:^M _main in ccIwL8dt.o^M "_ffi_type_sint16", referenced from:^M _main in ccIwL8dt.o^M "_ffi_type_sint32", referenced from:^M _main in ccIwL8dt.o^M "_ffi_type_uint64", referenced from:^M _main in ccIwL8dt.o^M ld: symbol(s) not found for architecture i386^M collect2: error: ld returned 1 exit status^M So it appears that the merge also broke the multilib testing of libffi. Jack > > -- > Andreas Schwab, sch...@linux-m68k.org > GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 > "And now for something completely different."
Re: [PATCH] Fix PR54659, include gmp.h from system.h
On Sat, Dec 22, 2012 at 12:03 PM, Andreas Schwab wrote: > Richard Biener writes: > >> On Sat, Dec 22, 2012 at 10:49 AM, Andreas Schwab >> wrote: >>> Richard Biener writes: >>> (I suppose somehow gmp.h is pulled in configure tests?) >>> >>> AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ >>> #include "ansidecl.h" >>> #include "system.h" >>> #ifdef HAVE_SYS_RESOURCE_H >>> #include >>> #endif >>> ]], [[rlim_t l = 0;]])],[],[AC_DEFINE([rlim_t],[long], >>> [Define to `long' if doesn't define.])]) >> >> Huh - looks at least bogus to not include config.h here, no? > > config.h uses auto-host.h which doesn't exist yet, it's created by > configure. All already known config defs are set in conftest.c (see > config.log). I still question the inclusion of system.h here - why is that needed, or why isn't this either a copy of the relevant piece of system.h, or - _just_ including system.h and nothing else ... in fact system.h already includes sys/resource.h the way above. Richard. > Andreas. > > -- > Andreas Schwab, sch...@linux-m68k.org > GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 > "And now for something completely different."
Re: [Patch, libffi] libffi merge
On Thu, Dec 27, 2012 at 10:19:57AM -0500, Jack Howarth wrote: > On Thu, Dec 27, 2012 at 04:06:47PM +0100, Andreas Schwab wrote: > > Jack Howarth writes: > > > > > Did you run make check in libffi on this merge? These changes > > > appear to have broken the dejagnu testing in libffi... > > > > The problem is the wrong definition of load_gcc_lib. > > > > @@ -16,7 +16,7 @@ > > > > proc load_gcc_lib { filename } { > > global srcdir > > -load_file $srcdir/../../gcc/testsuite/lib/$filename > > +load_file $srcdir/lib/$filename > > } > > > > load_lib dg.exp > > > > Andreas. > > Andreas, >What do you get for the testsuite results with that change? On > x86_64-apple-darwin12, every single test seems to fail the > test for excess errors at -m32 (but not -m64) when using... > > make -k check RUNTESTFLAGS="--target_board=unix'{-m32,-m64}'" > > === libffi Summary for unix/-m32 === > > # of unexpected failures663 > # of unresolved testcases 663 > # of unsupported tests 55 > > These show up at -m32 as... > > Executing on host: /sw/src/fink.build/gcc48-4.8.0-1000/darwin_objdir/gcc/xgcc > -B/sw/src/fink.build/gcc48-4.8.0-1000/darwin_objdir/gcc/ > ../../../../gcc-4.8-20121226/libffi/testsuite/libffi.call/closure_fn0.c -O0 > -W -Wall > -I/sw/src/fink.build/gcc48-4.8.0-1000/darwin_objdir/x86_64-apple-darwin12.2.0/libffi/testsuite/../include > -I../../../../gcc-4.8-20121226/libffi/testsuite/../include > -I/sw/src/fink.build/gcc48-4.8.0-1000/darwin_objdir/x86_64-apple-darwin12.2.0/libffi/testsuite/../include/.. > > -L/sw/src/fink.build/gcc48-4.8.0-1000/darwin_objdir/x86_64-apple-darwin12.2.0/libffi/testsuite/../.libs > -Wl,-allow_stack_execute -shared-libgcc -lffi -lm -m32 -o > ./closure_fn0.exe(timeout = 300) > ld: warning: ignoring file > /sw/src/fink.build/gcc48-4.8.0-1000/darwin_objdir/x86_64-apple-darwin12.2.0/libffi/.libs/libffi.dylib, > file was built for unsupported file format ( 0xcf 0xfa 0xed 0xfe 0x 7 0x 0 > 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0 ) which is not the > architecture being linked (i386): > /sw/src/fink.build/gcc48-4.8.0-1000/darwin_objdir/x86_64-apple-darwin12.2.0/libffi/.libs/libffi.dylib^M > Undefined symbols for architecture i386:^M > "_ffi_closure_alloc", referenced from:^M > _main in ccIwL8dt.o^M > "_ffi_prep_cif", referenced from:^M > _main in ccIwL8dt.o^M > "_ffi_prep_closure_loc", referenced from:^M > _main in ccIwL8dt.o^M > "_ffi_type_double", referenced from:^M > _main in ccIwL8dt.o^M > "_ffi_type_float", referenced from:^M > _main in ccIwL8dt.o^M > "_ffi_type_sint16", referenced from:^M > _main in ccIwL8dt.o^M > "_ffi_type_sint32", referenced from:^M > _main in ccIwL8dt.o^M > "_ffi_type_uint64", referenced from:^M > _main in ccIwL8dt.o^M > ld: symbol(s) not found for architecture i386^M > collect2: error: ld returned 1 exit status^M > > So it appears that the merge also broke the multilib testing of libffi. >Jack > > The m4's included in the Makefile.am of the libffi testsuite is wildly different (and misses multi.m4 completely) @@ -37,22 +54,32 @@ subdir = testsuite DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \ - $(top_srcdir)/../config/lead-dot.m4 \ - $(top_srcdir)/../config/multi.m4 \ - $(top_srcdir)/../config/override.m4 \ - $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \ - $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \ - $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/asmcfi.m4 \ + $(top_srcdir)/m4/ax_cc_maxopt.m4 \ + $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ + $(top_srcdir)/m4/ax_check_compile_flag.m4 \ + $(top_srcdir)/m4/ax_compiler_vendor.m4 \ + $(top_srcdir)/m4/ax_configure_args.m4 \ + $(top_srcdir)/m4/ax_enable_builddir.m4 \ + $(top_srcdir)/m4/ax_gcc_archflag.m4 \ + $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/fficonfig.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ +n|no|NO) false;; \ +*) (install-info --version) >/dev/null 2>&1;; \ + esac DEJATOOL = $(PACKAGE) RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFO
Re: [patch, fortran] PR48976 INQUIRE with STREAM= not supported
On 12/27/2012 03:12 AM, Tobias Burnus wrote: Dear Jerry, thanks for the patch.However, I wonder about the following: Will that be backward compatible with binaries compiled with GCC < 4.8 or will that cause problems? I have the feeling that it is okay as the flag ("cf2") indicating whether "stream=" is present has still the same type and "iqstream" comes last in st_parameter_inquire and is only set if (cf2 & IOPARM_INQUIRE_HAS_STREAM). Can confirm that there is no backward-compatibility issue? If there isn't, the patch is okay. Tobias The cf2 flag exists and we are using the next unused bit as defined in ioparm.def. No previous version of the frontend or the runtime library use or look at this bit so there will be no compatibility issues. I named the stream pointer iqstream to avoid it being color highlighted. My editor highlights "stream" has a "C" key word. I will change the constant parameter IOPARM_INQUIRE_HAS_STREAM to IOPARM_INQUIRE_HAS_IQSTREAM just for consistency so that in the future, maintainers will know it is related to the use of the iqstream pointer. I will commit the patch later today and thanks for the review. Regards, Jerry
[PATCH] AIX native TLS support [3/?]
This patch gets GCC support for native TLS on AIX working and passing most tests. The patch shifts the creation of the qualified symbol name from output_toc() to rs6000_legitimize_tls_address_aix(). I was hoping that the separate SYMBOL_REF would prevent RTL fwprop from becoming confused about the symbols, but no such luck. The re-write still makes things a little cleaner. Also, private TLS data (static variables with non-zero initializers) are not decorated with the TLS CSECT qualifier so that the AIX assembler and linker resolve it correctly. To prevent fwprop from breaking things, I need to prevent rs6000_delegitimize_address from associating TLS TOC references with the original symbol. The rs6000 port uses the constant pool to manage the TOC. However, for TLS symbols, the value in the TOC is not equivalent to the symbol itself. The RTL fwprop pass thinks that it can associate the result of a TLS access, which materializes the symbol in a register, with the value in the constant pool and avoid re-loading the TOC value. This does not work and passes a garbage value to subsequent TLS calls, which produce garbage results. The two solutions are either "hide" the TLS constant pool values by not delegitmizing them or completely re-writing the TOC support to use a pool separate from the constant pool. I chose the former because TLS is a scarce resource and its usage should be minimal anyway. Bootstrapped on powerpc-ibm-aix7.1.0.0. Thanks, David * config/rs6000/rs6000.c (rs6000_deligitimze_address): Do not delegitimize TLS addresses on AIX. (rs6000_legitimize_tls_address_aix): Append TLS symbol qualifier. Set SYMBOL_FLAG_LOCAL on module symbol. (output_toc): Do not append TLS symbol qualifier here. * config/rs6000/rs6000.md (tls_get_addr_internal): Add GPR 4 to clobbers. Index: rs6000.c === --- rs6000.c(revision 194725) +++ rs6000.c(working copy) @@ -5826,6 +5826,15 @@ rs6000_delegitimize_address (rtx orig_x) } #endif y = XVECEXP (y, 0, 0); + +#ifdef HAVE_AS_TLS + /* Do not associate thread-local symbols with the original +constant pool symbol. */ + if (TARGET_XCOFF + && SYMBOL_REF_TLS_MODEL (get_pool_constant (y)) >= TLS_MODEL_REAL) + return orig_x; +#endif + if (offset != NULL_RTX) y = gen_rtx_PLUS (Pmode, y, offset); if (!MEM_P (orig_x)) @@ -5899,10 +5908,29 @@ rs6000_got_sym (void) static rtx rs6000_legitimize_tls_address_aix (rtx addr, enum tls_model model) { - rtx sym, mem, tocref, tlsreg, tmpreg, dest; + rtx sym, mem, tocref, tlsreg, tmpreg, dest, tlsaddr; + const char *name; + char *tlsname; + name = XSTR (addr, 0); + /* Append TLS CSECT qualifier, unless the symbol already is qualified + or the symbol will be in TLS private data section. */ + if (name[strlen (name) - 1] != ']' + && (TREE_PUBLIC (SYMBOL_REF_DECL (addr)) + || bss_initializer_p (SYMBOL_REF_DECL (addr +{ + tlsname = XALLOCAVEC (char, strlen (name) + 4); + strcpy (tlsname, name); + strcat (tlsname, + bss_initializer_p (SYMBOL_REF_DECL (addr)) ? "[UL]" : "[TL]"); + tlsaddr = copy_rtx (addr); + XSTR (tlsaddr, 0) = ggc_strdup (tlsname); +} + else +tlsaddr = addr; + /* Place addr into TOC constant pool. */ - sym = force_const_mem (GET_MODE (addr), addr); + sym = force_const_mem (GET_MODE (tlsaddr), tlsaddr); /* Output the TOC entry and create the MEM referencing the value. */ if (constant_pool_expr_p (XEXP (sym, 0)) @@ -5919,27 +5947,28 @@ rs6000_legitimize_tls_address_aix (rtx addr, enum if (model == TLS_MODEL_GLOBAL_DYNAMIC || model == TLS_MODEL_LOCAL_DYNAMIC) { - rtx module = gen_reg_rtx (Pmode); /* Create new TOC reference for @m symbol. */ - const char *name = XSTR (XVECEXP (XEXP (mem, 0), 0, 0), 0); - char *name2 = XALLOCAVEC (char, strlen (name) + 1); - strcpy (name2, "*LCM"); - strcat (name2, name + 3); - tocref = create_TOC_reference (gen_rtx_SYMBOL_REF (Pmode, - ggc_alloc_string (name2, - strlen (name2))), -NULL_RTX); - rtx mem2 = gen_const_mem (Pmode, tocref); - set_mem_alias_set (mem2, get_TOC_alias_set ()); + name = XSTR (XVECEXP (XEXP (mem, 0), 0, 0), 0); + tlsname = XALLOCAVEC (char, strlen (name) + 1); + strcpy (tlsname, "*LCM"); + strcat (tlsname, name + 3); + rtx modaddr = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (tlsname)); + SYMBOL_REF_FLAGS (modaddr) |= SYMBOL_FLAG_LOCAL; + tocref = create_TOC_reference (modaddr, NULL_RTX); + rtx modmem = gen_const_mem (Pmode, tocref); + set_mem_alias_set (modmem, get_TOC_alias_set ()); - dest = gen_reg_rtx (Pmode); + rtx modreg = gen_reg_rtx (Pmode); + emit_insn (gen_rtx_SET (VOIDmode, modreg, modmem)); + tmpreg = gen_reg_rtx
Re: [patch c++]: Fix type_info struct for llp64 targets
OK. Jason
Re: [PATCH] Function Multiversioning Bug, checking for function versions
On Thu, Dec 27, 2012 at 2:05 AM, Andreas Schwab wrote: > diff --git a/gcc/ChangeLog b/gcc/ChangeLog > index 148388d..575e03a 100644 > --- a/gcc/ChangeLog > +++ b/gcc/ChangeLog > @@ -1,4 +1,7 @@ > -<<< .mine > +2012-12-27 Andreas Schwab > + > + * target.def (supports_function_versions): Fix typo. > + > 2012-12-26 Sriraman Tallam > > * doc/tm.texi.in (TARGET_OPTION_SUPPORTS_FUNCTION_VERSIONS): Document > @@ -15,12 +18,10 @@ > * (is_function_default_version): Check target string. > * TARGET_OPTION_SUPPORTS_FUNCTION_VERSIONS: New macro. > > -=== > 2012-12-27 Steven Bosscher > > * cgraph.c (verify_cgraph_node): Don't allocate/free visited_nodes > set. > > ->>> .r194729 > 2012-12-25 John David Anglin > > PR target/53789 > diff --git a/gcc/target.def b/gcc/target.def > index 79bb955..d0547be 100644 > --- a/gcc/target.def > +++ b/gcc/target.def > @@ -2839,7 +2839,7 @@ DEFHOOK > (supports_function_versions, > "", > bool, (void), > - hool_bool_void_false) > + hook_bool_void_false) Thanks for the fix. -Sri. > > /* Function to determine if one function can inline another function. */ > #undef HOOK_PREFIX > -- > 1.8.0.2 > > > -- > Andreas Schwab, sch...@linux-m68k.org > GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 > "And now for something completely different."
Re: [Patch, Fortran] PR55763 - Fix MOVE_ALLOC with CLASS(*)
*ping* http://gcc.gnu.org/ml/fortran/2012-12/msg00167.html Tobias Burnus: Fix one of the remaining issues of PR 55763: MOVE_ALLOC with CLASS(*) either for both arguments or only for TO=. Build and regtested on x86-64-gnu-linux. OK for the trunk? Tobias
[Patch, Fortran] PR55758 - Non-C_Bool handling with BIND(C)
Dear all, See also the discussion in the thread starting at http://gcc.gnu.org/ml/fortran/2012-12/msg00135.html a) The Fortran standard only defines LOGICAL(kind=C_Bool) as being interoperable with C - no other LOGICAL type. That matches GCC: With gcc (the C compiler) only _Bool is a BOOLEAN_TYPE with TYPE_PRECISION == 1. Hence, this patch rejects other logical kinds as dummy argument/result variable in BIND(C) procedures if -std=f2003/f2008/f2008ts is specified (using -pedantic, one gets a warning). b) As GNU extension, other logical kinds are accepted in BIND(C) procedures; however, as the main use of "LOGICAL(kind=4)" (for BIND(C) procedures) is to handle logical expressions which use C's int, one has to deal with all integer values and not only 0 and 1. Hence, a normal integer type is used internally in that case. That has been done to avoid surprises of users and hard to trace bugs. Note: logical(c_bool) and all logicals which are not dummy or result variables of a bind(C) procedure remain BOOLEAN_TYPEs with TYPE_PRECISION == 1 bit. For those a .true. with internal value "-1" will lead the surprising result .not.(-1) => (-2) => .true., i.e. .true. == .not. .true. But that's simply an invaliduse of those logicals and not a bug in the compiler. (-> won't fix). Build and regtested on x86-64-gnu-linux. OK for the trunk? Tobias 2012-12-27 Tobias Burnus PR fortran/55758 * resolve.c (resolve_symbol): Reject non-C_Bool logicals in BIND(C) procedures with -std=f*. * trans-types.c (gfc_sym_type): Use a non-BOOLEAN_TYPE integer for non-C_Bool logicals in BIND(C) procedures. * trans-expr.c (gfc_conv_unary_op): Add fold convert for INTRINSIC_NOT. 2012-12-27 Tobias Burnus PR fortran/55758 * gfortran.dg/bind_c_bool_1.f90: New. * gfortran.dg/bind_c_bool_2.f90: New. * gfortran.dg/bind_c_bool_2_c.c: New. * gfortran.dg/do_5.f90: Add dg-warning. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 873400a..5963acd 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -13640,6 +13636,32 @@ resolve_symbol (gfc_symbol *sym) return; } + if (sym->ts.type == BT_LOGICAL + && ((sym->attr.function && sym->attr.is_bind_c && sym->result == sym) + || ((sym->attr.dummy || sym->attr.result) && sym->ns->proc_name + && sym->ns->proc_name->attr.is_bind_c))) +{ + int i; + for (i = 0; gfc_logical_kinds[i].kind; i++) +if (gfc_logical_kinds[i].kind == sym->ts.kind) + break; + if (!gfc_logical_kinds[i].c_bool && sym->attr.dummy + && gfc_notify_std (GFC_STD_GNU, "LOGICAL dummy argument '%s' at %L " + "with non-C_Bool kind in BIND(C) procedure '%s'", + sym->name, &sym->declared_at, + sym->ns->proc_name->name) == FAILURE) + return; + else if (!gfc_logical_kinds[i].c_bool + && gfc_notify_std (GFC_STD_GNU, "LOGICAL result variable '%s' at" + " %L with non-C_Bool kind in BIND(C) " + "procedure '%s'", sym->name, + &sym->declared_at, + sym->attr.function ? sym->name + : sym->ns->proc_name->name) + == FAILURE) + return; +} + switch (sym->attr.flavor) { case FL_VARIABLE: diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 452f2bc..bbfb162 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -1850,7 +1850,8 @@ gfc_conv_unary_op (enum tree_code code, gfc_se * se, gfc_expr * expr) We must convert it to a compare to 0 (e.g. EQ_EXPR (op1, 0)). All other unary operators have an equivalent GIMPLE unary operator. */ if (code == TRUTH_NOT_EXPR) -se->expr = fold_build2_loc (input_location, EQ_EXPR, type, operand.expr, +se->expr = fold_build2_loc (input_location, EQ_EXPR, type, +fold_convert (type, operand.expr), build_int_cst (type, 0)); else se->expr = fold_build1_loc (input_location, code, type, operand.expr); diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c index 8394bf9..73ed5aa 100644 --- a/gcc/fortran/trans-types.c +++ b/gcc/fortran/trans-types.c @@ -2128,6 +2128,25 @@ gfc_sym_type (gfc_symbol * sym) && sym->ns->proc_name && sym->ns->proc_name->attr.is_bind_c))) type = gfc_character1_type_node; + else if (sym->ts.type == BT_LOGICAL + && ((sym->attr.function && sym->attr.is_bind_c) + || ((sym->attr.dummy || sym->attr.result) && sym->ns->proc_name + && sym->ns->proc_name->attr.is_bind_c))) +{ + /* For LOGICAL dummy arguments or result value of a C binding procedure, + which do not match _Bool (C_Bool kind), a normal integer variable + is used instead of a BOOLEAN_TYPE with a TYPE_PRECISION of 1. The + reason is that on the C side, a normal integer such as "int" is used, + implying that any integer value could be used - not only 0 and 1. */ + int i; + for (i = 0; gfc_logical_kinds[i].kind; i++) +if (gfc_logical_kinds[i].kind == sym->ts.kind) + break; +
Re: [RFC PATCH] Implementing ifunc target hook
On 27/12/2012, at 1:15 AM, Alexander Ivchenko wrote: > Hi, > > Currently Android dynamic loader does not support indirect functions > (And I don't think that > it will someday). But there is no way for us to specify that for gcc, > and for example, tests like > gcc.dg/attr-ifunc-* are failing on android right now. > The attached patch is indended to add the target hook for indicating > the support of ifunc on target. The idea behind the patch looks OK, but implementation needs a bit of tweaking. As Joseph mentioned, you need to convert this macro into a target hook. GCC is making a gradual transition away from target macros to target hook functions, and all new hooks should be added as functions, unless there is a compelling argument to make it a macro. For an example of adding a target hook function see rev 194608 (among many others). > --- a/gcc/config/i386/i386.c > +++ b/gcc/config/i386/i386.c > @@ -29146,7 +29146,7 @@ make_name (tree decl, const char *suffix, bool > make_unique) >return global_var_name; > } > > -#if defined (ASM_OUTPUT_TYPE_DIRECTIVE) && HAVE_GNU_INDIRECT_FUNCTION > +#if defined (ASM_OUTPUT_TYPE_DIRECTIVE) > > /* Make a dispatcher declaration for the multi-versioned function DECL. > Calls to DECL function will be replaced with calls to the dispatcher > @@ -29213,7 +29213,7 @@ ix86_get_function_versions_dispatcher (void *decl) > >tree dispatch_decl = NULL; > > -#if defined (ASM_OUTPUT_TYPE_DIRECTIVE) && HAVE_GNU_INDIRECT_FUNCTION > +#if defined (ASM_OUTPUT_TYPE_DIRECTIVE) >struct cgraph_function_version_info *it_v = NULL; >struct cgraph_node *dispatcher_node = NULL; >struct cgraph_function_version_info *dispatcher_version_info = NULL; It seems you can move these variables inside the 'if (TARGET_HAS_IFUNC)' clause below and make the code cleaner, no? > @@ -29263,24 +29263,33 @@ ix86_get_function_versions_dispatcher (void *decl) > >default_node = default_version_info->this_node; > > -#if defined (ASM_OUTPUT_TYPE_DIRECTIVE) && HAVE_GNU_INDIRECT_FUNCTION > - /* Right now, the dispatching is done via ifunc. */ > - dispatch_decl = make_dispatcher_decl (default_node->symbol.decl); > - > - dispatcher_node = cgraph_get_create_node (dispatch_decl); > - gcc_assert (dispatcher_node != NULL); > - dispatcher_node->dispatcher_function = 1; > - dispatcher_version_info > -= insert_new_cgraph_node_version (dispatcher_node); > - dispatcher_version_info->next = default_version_info; > - dispatcher_node->local.finalized = 1; > - > - /* Set the dispatcher for all the versions. */ > - it_v = default_version_info; > - while (it_v->next != NULL) > +#if defined (ASM_OUTPUT_TYPE_DIRECTIVE) > + if (TARGET_HAS_IFUNC) > +{ > + /* Right now, the dispatching is done via ifunc. */ > + dispatch_decl = make_dispatcher_decl (default_node->symbol.decl); > + > + dispatcher_node = cgraph_get_create_node (dispatch_decl); > + gcc_assert (dispatcher_node != NULL); > + dispatcher_node->dispatcher_function = 1; > + dispatcher_version_info > + = insert_new_cgraph_node_version (dispatcher_node); > + dispatcher_version_info->next = default_version_info; > + dispatcher_node->local.finalized = 1; > + > + /* Set the dispatcher for all the versions. */ > + it_v = default_version_info; > + while (it_v->next != NULL) > + { > + it_v->dispatcher_resolver = dispatch_decl; > + it_v = it_v->next; > + } > +} > + else > { > - it_v->dispatcher_resolver = dispatch_decl; > - it_v = it_v->next; > + error_at (DECL_SOURCE_LOCATION (default_node->symbol.decl), > + "multiversioning needs ifunc which is not supported " > + "on this target"); > } This looks wrong. Before the patch this code would be ignored if !HAVE_GNU_INDIRECT_FUNCTION and after the patch it will produce an error. Removing the else-clause should fix this. > #else >error_at (DECL_SOURCE_LOCATION (default_node->symbol.decl), > diff --git a/gcc/config/linux-android.h b/gcc/config/linux-android.h > index e74e261..f6f44f1 100644 > --- a/gcc/config/linux-android.h > +++ b/gcc/config/linux-android.h > @@ -58,3 +58,6 @@ > > #define ANDROID_ENDFILE_SPEC \ >"%{shared: crtend_so%O%s;: crtend_android%O%s}" > + > +#undef TARGET_HAS_IFUNC > +#define TARGET_HAS_IFUNC (!TARGET_ANDROID) This initialization should be moved to targethooks.c ... > diff --git a/gcc/defaults.h b/gcc/defaults.h > index 76909ab..2180a47 100644 > --- a/gcc/defaults.h > +++ b/gcc/defaults.h > @@ -111,6 +111,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. > If not, see > #endif > #endif > > +#ifndef TARGET_HAS_IFUNC > +#define TARGET_HAS_IFUNC HAVE_GNU_INDIRECT_FUNCTION > +#endif ... and this one too. > + > #ifndef IFUNC_ASM_TYPE > #define IFUNC_ASM_TYPE "gnu_indirect_function" > #endif > diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi > index 75aa867..1c8bc51 100644 > --- a/
Re: [patch] std::unique_ptr improvements
On 12/20/12, Jonathan Wakely wrote: > This patch started when I noticed that it's not possibly to construct > a shared_ptr from unique_ptr, then I discovered we don't > use D::pointer if it exists, and there were a number of other > non-conformance issues with our std::unique_ptr. I ended up > fixing them by implementing Geoffrey's proposed resolution for LWG > issue 2118, which isn't official yet but is better than what we had > before so is a step in the right direction, even if it ends up needing > further revision when 2118 is resolved. > > * include/std/functional (_Require): Move to ... > * include/std/type_traits (_Require): ... here. > * include/bits/shared_ptr_base.h > (__shared_count::_S_create_from_up): > Handle unique_ptr for arrays or with custom pointer types. > (__shared_ptr::__shared_ptr(unique_ptr<_Tp1, _Del>&&): Likewise. > * include/bits/unique_ptr.h (unique_ptr<_Tp[], _Dp>): Use > _Dp::pointer if defined. Implement proposed resolution of LWG 2118. > * testsuite/20_util/shared_ptr/cons/unique_ptr_array.cc: New. > * testsuite/20_util/unique_ptr/assign/cv_qual.cc: New. > * testsuite/20_util/unique_ptr/cons/array_convertible_neg.cc: New. > * testsuite/20_util/unique_ptr/cons/convertible_neg.cc: New. > * testsuite/20_util/unique_ptr/cons/cv_qual.cc: New. > * testsuite/20_util/unique_ptr/modifiers/cv_qual.cc: New. > * testsuite/20_util/unique_ptr/requirements/pointer_type_array.cc: > New. > * testsuite/20_util/shared_ptr/cons/unique_ptr.cc: Adjust comments. > * > testsuite/20_util/unique_ptr/cons/pointer_array_convertible_neg.cc: > Likewise. > * testsuite/20_util/unique_ptr/requirements/pointer_type.cc: > Likewise. > * testsuite/20_util/bind/ref_neg.cc: Adjust dg-error line number. > * testsuite/20_util/declval/requirements/1_neg.cc: Likewise. > * testsuite/20_util/default_delete/48631_neg.cc: Likewise. > * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Likewise. > * testsuite/20_util/unique_ptr/assign/48635_neg.cc: Likewise. > * testsuite/20_util/unique_ptr/modifiers/reset_neg.cc: Adjust > dg-error text. > * testsuite/20_util/unique_ptr/cons/ptr_deleter_neg.cc: Use > different instantiations so static_assert fails for each. > > Thanks to Geoffrey and Lawrence for input and test cases. > > Tested x86_64-linux, committed to trunk. I'm not getting errors when converting from derived to base. E.g. the following compiles, when it should not. std::unique_ptr acb_ad(new derived[3]); -- Lawrence Crowl
[patch, libgfortran] PR55818 Reading a REAL from a file which doesn't end in a new line fails
Hi, The attached patch fixes this problem by not calling hit_eof if EOF can be a valid separator. Regression tested on x86-64. OK for trunk with test case from PR? Regards, Jerry 2012-12-27 Jerry DeLisle PR libfortran/55818 * io/list_read.c (read_real): Do not call hit_eof when EOF can be treated as a value separator Index: list_read.c === --- list_read.c (revision 194731) +++ list_read.c (working copy) @@ -1429,6 +1429,7 @@ read_real (st_parameter_dt *dtp, void * dest, int goto got_sign; CASE_SEPARATORS: +case EOF: unget_char (dtp, c); /* Single null. */ eat_separator (dtp); return; @@ -1484,6 +1485,7 @@ read_real (st_parameter_dt *dtp, void * dest, int goto got_repeat; CASE_SEPARATORS: + case EOF: if (c != '\n' && c != ',' && c != '\r' && c != ';') unget_char (dtp, c); goto done;
Re: [PATCH] Function Multiversioning Bug, checking for function versions
I'm sorry - I didn't notice that it works only for c++ frontend. It works for me now! thanks, Alexander 2012/12/27 Sriraman Tallam : > On Thu, Dec 27, 2012 at 2:05 AM, Andreas Schwab wrote: >> diff --git a/gcc/ChangeLog b/gcc/ChangeLog >> index 148388d..575e03a 100644 >> --- a/gcc/ChangeLog >> +++ b/gcc/ChangeLog >> @@ -1,4 +1,7 @@ >> -<<< .mine >> +2012-12-27 Andreas Schwab >> + >> + * target.def (supports_function_versions): Fix typo. >> + > >> 2012-12-26 Sriraman Tallam >> >> * doc/tm.texi.in (TARGET_OPTION_SUPPORTS_FUNCTION_VERSIONS): Document >> @@ -15,12 +18,10 @@ >> * (is_function_default_version): Check target string. >> * TARGET_OPTION_SUPPORTS_FUNCTION_VERSIONS: New macro. >> >> -=== >> 2012-12-27 Steven Bosscher >> >> * cgraph.c (verify_cgraph_node): Don't allocate/free visited_nodes >> set. >> >> ->>> .r194729 >> 2012-12-25 John David Anglin >> >> PR target/53789 >> diff --git a/gcc/target.def b/gcc/target.def >> index 79bb955..d0547be 100644 >> --- a/gcc/target.def >> +++ b/gcc/target.def >> @@ -2839,7 +2839,7 @@ DEFHOOK >> (supports_function_versions, >> "", >> bool, (void), >> - hool_bool_void_false) >> + hook_bool_void_false) > > Thanks for the fix. > > -Sri. > >> >> /* Function to determine if one function can inline another function. */ >> #undef HOOK_PREFIX >> -- >> 1.8.0.2 >> >> >> -- >> Andreas Schwab, sch...@linux-m68k.org >> GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 >> "And now for something completely different."