diff options
author | Cary Coutant <ccoutant@google.com> | 2012-03-09 11:50:43 -0800 |
---|---|---|
committer | Cary Coutant <ccoutant@google.com> | 2012-03-09 11:50:43 -0800 |
commit | 4ed2fc3a6bbaaf1f2ea4d1c077dc7fa0867cd005 (patch) | |
tree | 7774dcb772ccc005c2fd8f8831dc45b90a8f6060 | |
parent | 2400d467a903f32c96df9f9fcb0de7be8a655afa (diff) | |
parent | f9c681635d1850543f547fdbb6efd5a010aca015 (diff) | |
download | gcc-4ed2fc3a6bbaaf1f2ea4d1c077dc7fa0867cd005.tar.gz |
Merge branch 'master' into google-debugfission
1553 files changed, 78557 insertions, 42585 deletions
diff --git a/ChangeLog b/ChangeLog index 64ac4f65b58..b6922b18b52 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-03-05 Tristan Gingold <gingold@adacore.com> + + * configure.ac: Enable gdb and readline for ia64*-*-*vms*. + * configure: Regenerate. + 2012-02-17 Walter Lee <walt@tilera.com> * MAINTAINERS: (Write After Approval): Delete myself. diff --git a/MAINTAINERS b/MAINTAINERS index a8b43de32c7..d65c854d848 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -254,14 +254,6 @@ register allocation Vladimir Makarov vmakarov@redhat.com Note that individuals who maintain parts of the compiler need approval to check in changes outside of the parts of the compiler they maintain. - Non-Algorithmic Maintainers - -loop optimizer Daniel Berlin dberlin@dberlin.org - -Note that individuals who maintain parts of the compiler as non-algorithmic -maintainers need approval to check in algorithmic changes or changes -outside of the parts of the compiler they maintain. - Reviewers dataflow Paolo Bonzini bonzini@gnu.org @@ -288,6 +280,7 @@ Graphite Tobias Grosser grosser@fim.uni-passau.de Graphite Sebastian Pop sebastian.pop@amd.com libcpp Tom Tromey tromey@redhat.com loop optimizer Zdenek Dvorak ook@ucw.cz +loop optimizer Daniel Berlin dberlin@dberlin.org LTO Diego Novillo dnovillo@google.com LTO Richard Guenther rguenther@suse.de LTO plugin Cary Coutant ccoutant@google.com diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index e9d1eb5a6e8..fcefa849157 100644 --- a/boehm-gc/ChangeLog +++ b/boehm-gc/ChangeLog @@ -1,3 +1,19 @@ +2012-02-27 Jack Howarth <howarth@bromo.med.uc.edu> + Patrick Marlier <patrick.marlier@gmail.com> + + PR boehm-gc/48299 + * testsuite/boehm-gc.c/thread_leak_test.c: Merge upstream changes. + +2012-02-23 Patrick Marlier <patrick.marlier@gmail.com> + Jack Howarth <howarth@bromo.med.uc.edu> + + PR boehm-gc/52179 + * include/gc_config.h.in: Undefine HAVE_PTHREAD_GET_STACKADDR_NP. + * include/private/gcconfig.h (DARWIN): Define STACKBOTTOM with + pthread_get_stackaddr_np when available. + * configure.ac (THREADS): Check availability of pthread_get_stackaddr_np. + * configure: Regenerate. + 2012-02-10 Kai Tietz <ktietz@redhat.com> PR boehm-gc/48514 diff --git a/boehm-gc/configure b/boehm-gc/configure index a901e505b73..c76ea447af5 100755 --- a/boehm-gc/configure +++ b/boehm-gc/configure @@ -15141,6 +15141,17 @@ _ACEOF fi done +for ac_func in pthread_get_stackaddr_np +do : + ac_fn_c_check_func "$LINENO" "pthread_get_stackaddr_np" "ac_cv_func_pthread_get_stackaddr_np" +if test "x$ac_cv_func_pthread_get_stackaddr_np" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PTHREAD_GET_STACKADDR_NP 1 +_ACEOF + +fi +done + LIBS="$oldLIBS" # Configuration of machine-dependent code diff --git a/boehm-gc/configure.ac b/boehm-gc/configure.ac index a741ca6d27a..2eddc9fe7ab 100644 --- a/boehm-gc/configure.ac +++ b/boehm-gc/configure.ac @@ -380,6 +380,7 @@ esac oldLIBS="$LIBS" LIBS="$LIBS $THREADLIBS" AC_CHECK_FUNCS([pthread_getattr_np]) +AC_CHECK_FUNCS([pthread_get_stackaddr_np]) LIBS="$oldLIBS" # Configuration of machine-dependent code diff --git a/boehm-gc/include/gc_config.h.in b/boehm-gc/include/gc_config.h.in index ea6cb03d22a..6bdd807bcfa 100644 --- a/boehm-gc/include/gc_config.h.in +++ b/boehm-gc/include/gc_config.h.in @@ -87,6 +87,9 @@ /* Define to 1 if you have the `pthread_getattr_np' function. */ #undef HAVE_PTHREAD_GETATTR_NP +/* Define to 1 if you have the `pthread_get_stackaddr_np_np' function. */ +#undef HAVE_PTHREAD_GET_STACKADDR_NP + /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H diff --git a/boehm-gc/include/private/gcconfig.h b/boehm-gc/include/private/gcconfig.h index 25fff6e7e6a..fb09cf73cc0 100644 --- a/boehm-gc/include/private/gcconfig.h +++ b/boehm-gc/include/private/gcconfig.h @@ -1331,7 +1331,11 @@ These aren't used when dyld support is enabled (it is by default) */ # define DATASTART ((ptr_t) get_etext()) # define DATAEND ((ptr_t) get_end()) -# define STACKBOTTOM ((ptr_t) 0xc0000000) +# ifdef HAVE_PTHREAD_GET_STACKADDR_NP +# define STACKBOTTOM (ptr_t)pthread_get_stackaddr_np(pthread_self()) +# else +# define STACKBOTTOM ((ptr_t) 0xc0000000) +# endif # define USE_MMAP # define USE_MMAP_ANON # define USE_ASM_PUSH_REGS @@ -2014,7 +2018,11 @@ These aren't used when dyld support is enabled (it is by default) */ # define DATASTART ((ptr_t) get_etext()) # define DATAEND ((ptr_t) get_end()) -# define STACKBOTTOM ((ptr_t) 0x7fff5fc00000) +# ifdef HAVE_PTHREAD_GET_STACKADDR_NP +# define STACKBOTTOM (ptr_t)pthread_get_stackaddr_np(pthread_self()) +# else +# define STACKBOTTOM ((ptr_t) 0x7fff5fc00000) +# endif # define USE_MMAP # define USE_MMAP_ANON # ifdef GC_DARWIN_THREADS diff --git a/boehm-gc/testsuite/boehm-gc.c/thread_leak_test.c b/boehm-gc/testsuite/boehm-gc.c/thread_leak_test.c index eb4cb9bd018..89014651261 100644 --- a/boehm-gc/testsuite/boehm-gc.c/thread_leak_test.c +++ b/boehm-gc/testsuite/boehm-gc.c/thread_leak_test.c @@ -1,13 +1,22 @@ -#define GC_LINUX_THREADS +#ifndef GC_THREADS +# define GC_THREADS +#endif #include "leak_detector.h" -#include <pthread.h> +#ifdef GC_PTHREADS +# include <pthread.h> +#else +# include <windows.h> +#endif #include <stdio.h> -void * test(void * arg) { +#ifdef GC_PTHREADS + void * test(void * arg) +#else + DWORD WINAPI test(LPVOID arg) +#endif +{ int *p[10]; int i; - GC_find_leak = 1; /* for new collect versions not compiled */ - /* with -DFIND_LEAK. */ for (i = 0; i < 10; ++i) { p[i] = malloc(sizeof(int)+i); } @@ -15,23 +24,47 @@ void * test(void * arg) { for (i = 1; i < 10; ++i) { free(p[i]); } -} +#ifdef GC_PTHREADS + return arg; +#else + return (DWORD)(GC_word)arg; +#endif +} #define NTHREADS 5 -int main() { +int main(void) { int i; +#ifdef GC_PTHREADS pthread_t t[NTHREADS]; +#else + HANDLE t[NTHREADS]; + DWORD thread_id; +#endif int code; + GC_find_leak = 1; /* for new collect versions not compiled */ + GC_INIT(); for (i = 0; i < NTHREADS; ++i) { - if ((code = pthread_create(t + i, 0, test, 0)) != 0) { - printf("Thread creation failed %d\n", code); +#ifdef GC_PTHREADS + code = pthread_create(t + i, 0, test, 0); +#else + t[i] = CreateThread(NULL, 0, test, 0, 0, &thread_id); + code = t[i] != NULL ? 0 : (int)GetLastError(); +#endif + if (code != 0) { + printf("Thread creation failed %d\n", code); } } for (i = 0; i < NTHREADS; ++i) { - if ((code = pthread_join(t[i], 0)) != 0) { - printf("Thread join failed %lu\n", code); +#ifdef GC_PTHREADS + code = pthread_join(t[i], 0); +#else + code = WaitForSingleObject(t[i], INFINITE) == WAIT_OBJECT_0 ? 0 : + (int)GetLastError(); +#endif + if (code != 0) { + printf("Thread join failed %d\n", code); } } CHECK_LEAKS(); diff --git a/configure b/configure index 9136c24fbe9..267e137858b 100755 --- a/configure +++ b/configure @@ -3502,8 +3502,8 @@ case "${target}" in noconfigdirs="$noconfigdirs libgui itcl ld" ;; ia64*-*-*vms*) - # No gdb or ld support yet. - noconfigdirs="$noconfigdirs readline libgui itcl gdb ld" + # No ld support yet. + noconfigdirs="$noconfigdirs libgui itcl ld" ;; i[3456789]86-w64-mingw*) ;; diff --git a/configure.ac b/configure.ac index 92e6db39851..9deab72c7f3 100644 --- a/configure.ac +++ b/configure.ac @@ -928,8 +928,8 @@ case "${target}" in noconfigdirs="$noconfigdirs libgui itcl ld" ;; ia64*-*-*vms*) - # No gdb or ld support yet. - noconfigdirs="$noconfigdirs readline libgui itcl gdb ld" + # No ld support yet. + noconfigdirs="$noconfigdirs libgui itcl ld" ;; i[[3456789]]86-w64-mingw*) ;; diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 7f952888aa2..aac4f9ba7b9 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,19 @@ +2012-03-02 Diego Novillo <dnovillo@google.com> + + * testsuite-management/validate_failures.py (class TestResult): Fix + match pattern for the summary line. If there is a parsing failure, + show the line we failed to parse. + +2012-02-27 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR libstdc++/52188 + * make_sunver.pl: Remove #ifdef handling. + +2012-02-17 Doug Kwan <dougkwan@google.com> + + * contrib/testsuite-management/validate_failures.py + (GetMakefileValue): Check for cross compilers. + 2012-02-15 Quentin Neill <quentin.neill@amd.com> * compare_tests: Fix trailing paths in dir arguments. diff --git a/contrib/make_sunver.pl b/contrib/make_sunver.pl index 96ad22c2311..afdf973f5da 100644 --- a/contrib/make_sunver.pl +++ b/contrib/make_sunver.pl @@ -156,9 +156,6 @@ my $glob = 'glob'; # We're currently inside `extern "C++"', which Sun ld doesn't understand. my $in_extern = 0; -# We're currently inside a conditional section: just skip it. -my $in_ifdef = 0; - # The c++filt command to use. This *must* be GNU c++filt; the Sun Studio # c++filt doesn't handle the GNU mangling style. my $cxxfilt = $ENV{'CXXFILT'} || "c++filt"; @@ -183,15 +180,6 @@ printf "# Omitted archives with corresponding shared libraries: %s\n", print "#\n\n"; while (<F>) { - # End of skipped section. - if (/^[ \t]*\#endif/) { - $in_ifdef = 0; - next; - } - - # Just skip a conditional section. - if ($in_ifdef) { next; } - # Lines of the form '};' if (/^([ \t]*)(\}[ \t]*;[ \t]*)$/) { $glob = 'glob'; @@ -216,15 +204,6 @@ while (<F>) { print; next; } - # Special comments that look like C preprocessor conditionals. - # Just skip the contents for now. - # FIXME: Allow passing in conditionals from the command line to really - # control the skipping. - if (/^[ \t]*\#ifdef/) { - $in_ifdef = 1; - next; - } - # Comment and blank lines if (/^[ \t]*\#/) { print; next; } if (/^[ \t]*$/) { print; next; } diff --git a/contrib/testsuite-management/validate_failures.py b/contrib/testsuite-management/validate_failures.py index be2ffcee5c6..7bc50896a66 100755 --- a/contrib/testsuite-management/validate_failures.py +++ b/contrib/testsuite-management/validate_failures.py @@ -97,10 +97,14 @@ class TestResult(object): self.attrs = '' if '|' in summary_line: (self.attrs, summary_line) = summary_line.split('|', 1) - (self.state, - self.name, - self.description) = re.match(r' *([A-Z]+): ([^ ]+) (.*)', - summary_line).groups() + try: + (self.state, + self.name, + self.description) = re.match(r' *([A-Z]+): (\S+)\s(.*)', + summary_line).groups() + except: + print 'Failed to parse summary line: "%s"' % summary_line + raise self.attrs = self.attrs.strip() self.state = self.state.strip() self.description = self.description.strip() @@ -146,7 +150,8 @@ def GetMakefileValue(makefile_name, value_name): def ValidBuildDirectory(builddir, target): if (not os.path.exists(builddir) or not os.path.exists('%s/Makefile' % builddir) or - not os.path.exists('%s/build-%s' % (builddir, target))): + (not os.path.exists('%s/build-%s' % (builddir, target)) and + not os.path.exists('%s/%s' % (builddir, target)))): return False return True diff --git a/gcc/BASE-VER b/gcc/BASE-VER index f6cdf40983f..88f181192c4 100644 --- a/gcc/BASE-VER +++ b/gcc/BASE-VER @@ -1 +1 @@ -4.7.0 +4.8.0 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6127cec26bf..5020eddc111 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,1448 @@ +2012-03-09 Uros Bizjak <ubizjak@gmail.com> + + PR target/52530 + * config/i386/i386.c (ix86_print_operand): Handle 'E' operand modifier. + (ix86_print_operand_address): Handle UNSPEC_LEA_ADDR. Do not fallback + to set code to 'q'. + * config/i386/i386.md (UNSPEC_LEA_ADDR): New unspec. + (*movdi_internal_rex64): Use %E operand modifier for lea. + (*movsi_internal): Ditto. + (*lea_1): Ditto. + (*lea<mode>_2): Ditto. + (*lea_{3,4,5,6}_zext): Ditto. + (*tls_global_dynamic_32_gnu): Ditto. + (*tls_global_dynamic_64): Ditto. + (*tls_dynamic_gnu2_lea_32): Ditto. + (*tls_dynamic_gnu2_lea_64): Ditto. + (pro_epilogue_adjust_stack_<mode>_add): Ditto. + +2012-03-09 Michael Meissner <meissner@linux.vnet.ibm.com> + + * config/rs6000/linux64.h (OPTION_TARGET_CPU_DEFAULT): Do not + redefine to be NULL if the current bit-size is different from the + configured bit-size. + + * config/rs6000/rs6000.c (rs6000_option_override_internal): If the + cpu is defaulted, use PROCESSOR_DEFAULT and PROCESSOR_DEFAULT64 to + set the default tuning. Add asserts to make sure the cpu and tune + indexes are defined. Fix tests for cpu/tune index to use >= 0 to + test whether the index is set, instead of > 0. + (rs6000_file_start): Do not reset the default cpu if the current + bit-size is different from the configured bit-size. + +2012-03-09 Tristan Gingold <gingold@adacore.com> + + * config/vms/vms-crtlmap.map: Add comments. + Add entries needed to build Ada RTS. + +2012-03-09 Tristan Gingold <gingold@adacore.com> + + * ginclude/stddef.h: Do not define __size_t on VMS. + +2012-03-09 Tristan Gingold <gingold@adacore.com> + + * c-tree.h (c_default_pointer_mode): New variable. + * c-decl.c (c_default_pointer_mode): New variable. + (c_build_pointer_type): New function. + (grokdeclarator): Call c_build_pointer_type instead + of build_pointer_type. + + * config/vms/vms-c.c: Include c-tree.h + (saved_pointer_mode): New variable. + (handle_pragma_pointer_size): New function. + (vms_pragma_pointer_size, vms_pragma_required_pointer_size): Likewise. + (vms_c_register_pragma): Register __pointer_size and + __required_pointer_size pragmas. + +2012-03-09 Tristan Gingold <gingold@adacore.com> + + * config/vms/vms-c.c (vms_construct_include_filename): New function. + (vms_c_register_includes): Reference it. + +2012-03-09 Andrew Pinski <apinski@cavium.com> + + PR middle-end/51988 + * tree-ssa-phiopt.c: Include tree-pretty-print.h for + print_generic_expr. + (tree_ssa_phiopt_worker): Go through all the PHIs for + value_replacement instead of just the singleton one. + (value_replacement): Change return type to int. Return 0 instead of + false. + Allow the middle basic block to contain more than just the defining + statement. + Handle non empty middle basic blocks. + * Makefile.in (tree-ssa-phiopt.o): Add tree-pretty-print.h. + +2012-03-09 Jiangning Liu <jiangning.liu@arm.com> + + * tree-scalar-evolution (interpret_rhs_expr): generate chrec for + array reference and component reference. + (analyze_scalar_evolution_for_address_of): New. + +2012-03-08 Jie Zhang <jzhang918@gmail.com> + + PR target/49862 + * config/bfin/bfin.c (hwloop_optimize): Fix unused variable warnings. + (hwloop_pattern_reg): Fix set but not used warning. + (bfin_reorg_loops): Remove unused parameter. + (bfin_reorg): Update use of bfin_reorg_loops. + +2012-03-08 H.J. Lu <hongjiu.lu@intel.com> + + * config/i386/i386.c (setup_incoming_varargs_64): Use word_mode + with integer parameters in registers. + (gen_push): Push register in word_mode instead of Pmode. + (ix86_emit_save_regs): Likewise. + (ix86_emit_save_regs_using_mov): Save integer registers in word_mode. + (gen_pop): Pop register in word_mode instead of Pmode. + (ix86_emit_restore_regs_using_pop): Likewise. + (ix86_expand_prologue): Replace Pmode with word_mode for push + immediate. Use ix86_gen_pro_epilogue_adjust_stack. Save and + restore RAX and R10 in word_mode. + (ix86_emit_restore_regs_using_mov): Restore integer registers + in word_mode. + (ix86_expand_split_stack_prologue): Save R10_REG and restore in + word_mode. + (ix86_split_to_parts): Use word_mode with PUT_MODE for push. + (ix86_split_long_move): Likewise. + + * config/i386/i386.md (W): New. + (*push<mode>2_prologue): Replace :P with :W. + (*pop<mode>1): Likewise. + (*pop<mode>1_epilogue): Likewise. + (push/pop peephole2): Use word_mode scratch registers. + +2012-03-08 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/predicates.md (indirect_branch_operand): Simplify. + +2012-03-08 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.md (*addhi3, addhi3_clobber): Add "w" alternative + for constants in [-63,63]. + +2012-03-08 Uros Bizjak <ubizjak@gmail.com> + + PR target/52530 + Revert: + 2012-03-04 H.J. Lu <hongjiu.lu@intel.com> + + * config/i386/i386.c (ix86_print_operand_address): Only handle + zero-extended DImode addresses. + +2012-03-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * configure.ac (gcc_cv_as_ix86_tlsldmplt): Add label. + * configure: Regenerate. + +2012-03-08 Georg-Johann Lay <avr@gjlay.de> + + PR target/52496 + * config/avr/avr.c (avr_mem_clobber): New static function. + (avr_expand_delay_cycles): Add memory clobber operand to + delay_cycles_1, delay_cycles_2, delay_cycles_3, delay_cycles_4. + * config/avr/avr.md (unspec): Add UNSPEC_MEMORY_BARRIER. + (enable_interrupt, disable_interrupt): New expander. + (nopv, sleep, wdr): New expanders. + (delay_cycles_1): Add memory clobber. + (delay_cycles_2): Add memory clobber. + (delay_cycles_3): Add memory clobber. + (delay_cycles_4): Add memory clobber. + (cli_sei): New insn from former "enable_interrupt", + "disable_interrupt" with memory clobber. + (*wdt): New insn from former "wdt" with memory clobber. + (*nopv): Similar, but for "nopv". + (*sleep): Similar, but for "sleep". + +2012-03-07 Oleg Endo <olegendo@gcc.gnu.org> + Kaz Kojima <kkojima@gcc.gnu.org> + + PR target/52503 + * config/sh/sh.opt (msoft-atomic): Use Var instead of Mask. + * config/sh/linux.h (TARGET_DEFAULT): Remove MASK_SOFT_ATOMIC. + (SUBTARGET_OVERRIDE_OPTIONS): Define. + +2012-03-07 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/predicates.md (x86_64_zext_general_operand): New. + * config/i386/i386.md (*zero_extendsidi2_rex64): Change operand 1 + predicate to x86_64_zext_general_operand. Accept "Z" constraint. + +2012-03-07 Walter Lee <walt@tilera.com> + + * config/tilegx/tilegx.c (tilegx_expand_prologue): Don't generate + REG_CFA_* notes for the stack pointer. + (tilegx_expand_epilogue): Restore stack pointer by adjusting it by + EH_RETURN_STACKADJ_RTX. + * config/tilepro/tilepro.c (tilepro_expand_prologue): Don't + generate REG_CFA_* notes for the stack pointer. + (tilepro_expand_epilogue): Restore stack pointer by adjusting it + by EH_RETURN_STACKADJ_RTX. + +2012-03-07 Georg-Johann Lay <avr@gjlay.de> + + * doc/invoke.texi (AVR Built-in Macros): Correct condition for + when __AVR_3_BYTE_PC__ is defined. + +2012-03-07 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/i386.c (ix86_print_operand_punct_valid_p): Add '^'. + (ix86_print_operand): Handle '^'. + * config/i386/i386.md (*strmovdi_rex_1): Macroize memory operands + using P mode iterator. Add %^ to asm template to conditionally emit + addr32 prefix. + (*rep_movdi_rex64): Ditto. + (*strsetdi_rex_1): Ditto. + (*rep_stosdi_rex64): Ditto. + (*strmov{si,hi,qi}_1): Add %^ to asm template to + conditionally emit addr32 prefix. + (*rep_mov{si,qi}): Ditto. + (*strset{si,hi,qi}): Ditto. + (*rep_stos{si,qi}): Ditto. + (*cmpstrnqi_nz_1): Ditto. + (*cmpstrnqi_1): Ditto. + (*strlenqi_1): Ditto. + +2012-03-07 H.J. Lu <hongjiu.lu@intel.com> + + * config/i386/i386.c (function_value_64): Return pointers in + word_mode instead of Pmode. + (ix86_promote_function_mode): Likewise. + +2012-03-07 Richard Guenther <rguenther@suse.de> + + * coverage.c (get_gcov_type): Use type_for_mode. + (get_gcov_unsigned_t): Likewise. + * expr.c (store_constructor): Use type_for_mode. + (try_casesi): Likewise. + * tree-ssa-loop-ivopts.c (add_standard_iv_candidates_for_size): Remove. + (add_standard_iv_candidates): Use standard type trees. + * dojump.c (do_jump): Remove dead code. + +2012-03-07 Richard Guenther <rguenther@suse.de> + + * c-typeck.c (pointer_diff): Use c_common_type_for_size. + +2012-03-07 Richard Guenther <rguenther@suse.de> + + * convert.c (strip_float_extensions): Move ... + * tree.c (strip_float_extensions): ... here. + +2012-03-07 Georg-Johann Lay <avr@gjlay.de> + + PR target/52484 + * config/avr/avr.md (xload<mode>_A): Add R22... to register footprint. + +2012-03-07 Richard Guenther <rguenther@suse.de> + + * omp-low.c (extract_omp_for_data): Use signed_type_for. + (expand_omp_for_generic): Likewise. + (expand_omp_for_static_nochunk): Likewise. + (expand_omp_for_static_chunk): Likewise. + * tree-vect-stmts.c (vect_gen_perm_mask): Use type_for_mode. + * tree-vect-slp.c (vect_transform_slp_perm_load): Likewise. + * tree-vect-loop-manip.c (vect_gen_niters_for_prolog_loop): + Use unsigned_type_for. + (vect_create_cond_for_align_checks): Use signed_type_for. + +2012-03-07 Andrey Belevantsev <abel@ispras.ru> + + PR rtl-optimization/52203 + * sel-sched.c (estimate_insn_cost): New parameter pempty. Adjust + all callers to pass NULL except ... + (reset_sched_cycles_in_current_ebb): ... here, save the value + in new variable 'empty'. Increase issue_rate only for + non-empty insns. + +2012-03-07 Ralf Corsépius <ralf.corsepius@rtems.org> + + PR target/51417 + * Makefile.in: Let install-gcc-ar depend on installdirs, + gcc-ar$(exeext), gcc-nm$(exeext), gcc-ranlib$(exeext). + Don't double canonicalize if cross-compiling. + +2012-03-07 Georg-Johann Lay <avr@gjlay.de> + + PR target/52506 + * gcc/config/avr/avr.c (expand_epilogue): Fix order of restoration + to: RAMPZ, RAMPY, RAMPX, RAMPD. + (expand_prologue): Only clear RAMPZ if it has effect on RAM-read. + +2012-03-07 Georg-Johann Lay <avr@gjlay.de> + + PR target/52505 + * config/avr/avr.c (avr_out_xload): Don't read unintentionally + from RAM. + * config/avr/avr.md (xload_8): Adjust insn length. + +2012-03-07 Georg-Johann Lay <avr@gjlay.de> + + PR target/52461 + * gcc/config/avr/avr.c (avr_out_lpm): Clear RAMPZ after usage + if RAMPZ affects reading from RAM. + +2012-03-07 Richard Guenther <rguenther@suse.de> + + PR pch/52518 + PR pch/38987 + * doc/invoke.texi (Precompiled Headers): Remove sentence that + suggests you can include PCHs from inside another header. + +2012-03-07 Richard Sandiford <rdsandiford@googlemail.com> + + PR middle-end/52515 + * rtl.h (pc_rtx, cc0_rtx, ret_rtx, simple_return_rtx): Add GTY markers. + +2012-03-07 Kai Tietz <ktietz@redhat.com> + + * doc/invoke.texi (fwritable-relocated-rdata): Document + new Cygwin/MinGW target option. + * config/i386/winnt.c (i386_pe_unique_section): Ignore + reloc if flag -fwritable-relocated-rdata is not set. + (i386_pe_section_type_flags): Likewise. + * config/i386/cygming.opt (fwritable-relocated-rdata): + Add new flag variable flag_writable_rel_rdata. + +2012-03-07 Richard Guenther <rguenther@suse.de> + + * tree-ssa-math-opts.c (convert_mult_to_widen): Check actual + precision against gimple constraints. + +2012-03-06 Richard Sandiford <rdsandiford@googlemail.com> + + PR middle-end/52372 + * rtl.h (pc_rtx, ret_rtx, simple_return_rtx, cc0_rtx): Redefine as + variables. + (GR_PC, GR_CC0, GR_RETURN, GR_SIMPLE_RETURN): Delete. + * emit-rtl.c (pc_rtx, ret_rtx, simple_return_rtx, cc0_rtx): New + variables. + (init_emit_regs): Move associated initialization to... + (init_emit_once): ...here. + +2012-03-06 Richard Henderson <rth@redhat.com> + + * config/m68k/m68k.h (ISA_HAS_TAS): New. + * config/m68k/sync.md (atomic_test_and_set): Use it. + (atomic_test_and_set_1): Likewise. + +2012-03-06 Michael Meissner <meissner@linux.vnet.ibm.com> + + PR target/50310 + * config/rs6000/vector.md (vector_uneq<mode>): Add support for + UNEQ, LTGT, ORDERED, and UNORDERED IEEE vector comparisons. + (vector_ltgt<mode>): Likewise. + (vector_ordered<mode>): Likewise. + (vector_unordered<mode>): Likewise. + * config/rs6000/rs6000.c (rs6000_emit_vector_compare_inner): Likewise. + +2012-03-06 Aldy Hernandez <aldyh@redhat.com> + + * trans-mem.c: New typedef for tm_region_p. + Define vector types for tm_region_p. + (tm_region_init): Replace region_worklist to a vector called + bb_regions. + +2012-03-06 Richard Guenther <rguenther@suse.de> + + * fold-const.c (build_fold_addr_expr_with_type_loc): Fold + MEM_REF with constant pointer operand. + +2012-03-06 Richard Guenther <rguenther@suse.de> + + PR middle-end/52493 + * tree-ssa-alias.c (ptr_derefs_may_alias_p): Robustify. + +2012-03-06 Tristan Gingold <gingold@adacore.com> + + * config/vms/vms-c.c (vms_pragma_nomember_alignment): Handle octaword. + (external_model_kind): Improve documentation. + (vms_pragma_extern_model): Handle relaxed_redef. + (vms_c_register_pragma): Allow expansion for nomember_alignment. + +2012-03-06 Georg-Johann Lay <avr@gjlay.de> + + * doc/invoke.texi (AVR Options): -mmcu=: Document the XMEGA cores. + Explain RAMPD, RAMPX, RAMPDY, RAMPZ usage by avr-gcc. + Some more notes on EIND usage and reorder EIND subsection. + +2012-03-06 Tristan Gingold <gingold@adacore.com> + + * config/vms/vms.c (VMS_CRTL_LDBL): Rename from VMS_CRTL_PRNTF. + * config/vms/vms-crtlmap.map: Rename PRNTF to LDBL. + +2012-03-06 Tristan Gingold <gingold@adacore.com> + + * config/vms/t-vmsnative (version): Define. + * config/vms/t-vms (STMP_FIXPROTO, STMP_FIXINC, version): Remove. + +2012-03-06 Andrey Belevantsev <abel@ispras.ru> + + PR rtl-optimization/52250 + * sel-sched-ir.c (maybe_tidy_empty_bb): Try harder to find a bb + to put note list into. Unconditionally call move_bb_info. + (move_bb_info): Do not assert the blocks being in the same region, + just drop the note list if they are not. + +2012-03-06 Oleg Endo <olegendo@gcc.gnu.org> + + PR target/51244 + * config/sh/sh.c (sh_expand_t_scc): Remove SH2A special case + and use unified expansion logic. + * config/sh/sh.md (xorsi3_movrt): Rename to movrt. Move + closer to the existing movt insn. + (negc): Rename insn to *negc. Add new expander. + (movnegt): Use xor pattern for T bit negation. Reserve helper + constant for negc pattern. + (*movnegt): New insn and splitter. + +2012-03-05 Bernd Schmidt <bernds@codesourcery.com> + + * c-typeck.c (pointer_diff): Check for POINTER_PLUS_EXPR, not + PLUS_EXPR. + +2012-03-05 Richard Henderson <rth@redhat.com> + + * genemit.c (main): Include "target.h" in insn-emit.c. + * Makefile.in (insn-emit.o): Depend on TARGET_H. + * config/sh/sync.md (atomic_test_and_set): Reference + targetm.atomic_test_and_set_trueval instead of + TARGET_ATOMIC_TEST_AND_SET_TRUEVAL. + +2012-03-05 Joern Rennecke <joern.rennecke@embecosm.com> + + * config/epiphany/epiphany.c (epiphany_function_value_regno_p): + Make static. + +2012-03-05 Steven Bosscher <steven@gcc.gnu.org> + + * langhooks.c (add_builtin_type): New function. + * langhooks.h (add_builtin_type): Export it. + * config/mep/mep.c (mep_init_builtins): Use it. + * config/rs6000/rs6000.c (rs6000_init_builtins): Use it. + +2012-03-05 Jakub Jelinek <jakub@redhat.com> + + PR debug/51902 + * tree.h (BLOCK_SAME_RANGE): Define. + * function.c (block_fragments_nreverse): Clear BLOCK_SAME_RANGE + if BLOCK_FRAGMENT_CHAIN is non-NULL, but has it cleared. + Also clear BLOCK_SAME_RANGE if fragment chain's supercontext fragment + isn't equal to supercontext fragment's fragment chain. + Adjust BLOCK_SUPERCONTEXT to point to supercontext fragment's + fragment origin. + (blocks_nreverse_all): Likewise. + (reorder_blocks_1): Compute BLOCK_SAME_RANGE bits. Set + BLOCK_SUPERCONTEXT to supercontext fragment instead of + supercontext fragment's fragment origin. + * dwarf2out.c (add_high_low_attributes): If stmt has the same + range as its parent (or parents thereof etc.), use the parent's + DW_AT_ranges value instead of creating a new .debug_ranges range. + +2012-03-05 Richard Henderson <rth@redhat.com> + + PR tree-opt/52242 + Revert: 2011-11-26 Richard Henderson <rth@redhat.com> + * omp-low.c (expand_omp_atomic): Assume anything aligned to + BIGGEST_ALIGNMENT is aligned. + +2012-03-05 Richard Henderson <rth@redhat.com> + + * config/sh/sh.h (TARGET_ATOMIC_TEST_AND_SET_TRUEVAL): Move... + * config/sh/sh.c: ... here. + +2012-03-05 Richard Henderson <rth@redhat.com> + + PR target/52481 + * config/m68k/sync.md (atomic_test_and_set): Use expand_simple_unop + instead of calling negqi2 directly. + +2012-03-05 Aldy Hernandez <aldyh@redhat.com> + + PR middle-end/52463 + * trans-mem.c (tm_region_init): Use last_basic_block. + +2012-03-05 Oleg Endo <olegendo@gcc.gnu.org> + + * config/sh/sh.h (TARGET_ATOMIC_TEST_AND_SET_TRUEVAL): New hook. + * config/sh/sync.md (atomic_test_and_set): New expander. + (tasb, atomic_test_and_set_soft): New insns. + * config/sh/sh.opt (menable-tas): New option. + * doc/invoke.texi (SH Options): Document it. + +2012-03-05 Richard Guenther <rguenther@suse.de> + + * cfgloop.c (verify_loop_structure): Verify dominators before + using them. + * graphite-clast-to-gimple.c (graphite_verify): Do not verify + dominators from here. + * graphite-scop-detection.c (create_sese_edges): Likewise. + * loop-doloop.c (doloop_optimize_loops): Likewise. + * loop-init.c (loop_optimizer_init): Likewise. + * loop-unroll.c (unroll_and_peel_loops): Likewise. + * loop-unswitch.c (unswitch_loops): Likewise. + * tree-ssa-loop-manip.c (tree_transform_and_unroll_loop): Likewise. + * tree-parloops.c (parallelize_loops): Likewise. Verify + only when checking is enabled. + * tree-loop-distribution.c (tree_loop_distribution): Likewise. + +2012-03-05 Bernd Schmidt <bernds@codesourcery.com> + + * genautomata.c (parse_automata_opt): New static function. + (initiate_automaton_gen): Remove all option handling code. Remove + argc argument. All callers changed. + (main): Call init_rtx_reader_args_cb with the new function as argument. + +2012-03-05 Richard Guenther <rguenther@suse.de> + + * cfgexpand.c (gimple_expand_cfg): Free dominator info. + * tree-if-conv.c (combine_blocks): Free post-dominator info + after breaking it. + * tree-parloops.c (create_parallel_loop): Free and re-compute + dominator info after breaking it. + +2012-03-05 Richard Guenther <rguenther@suse.de> + + PR middle-end/52353 + * optabs.h (trapv_unoptab_p): New function. + (trapv_binoptab_p): Likewise. + * optabs.c (expand_binop): Use emit_libcall_block_1 with + a proper equiv_may_trap argument. + (expand_unop): Likewise. + (emit_libcall_block_1): Take extra argument whether the + instruction may trap. Renamed from ... + (emit_libcall_block): ... this. New wrapper. + +2012-03-05 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/51721 + * tree-vrp.c (register_edge_assert_for_2): If comparing + lhs of right shift by constant with an integer constant, + add ASSERT_EXPRs for the rhs1 of the right shift. + + * cfgrtl.c (cfg_layout_merge_blocks): Cleanup. + +2012-03-05 Richard Guenther <rguenther@suse.de> + + * tree.c (integer_zerop): Handle VECTOR_CSTs. + (integer_onep): Likewise. + (integer_all_onesp): Likewise. + +2012-03-05 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.md (*umaddqihi4.2): New insn-and-split. + +2012-03-04 H.J. Lu <hongjiu.lu@intel.com> + + * config/i386/i386.c (pro_epilogue_adjust_stack): Check Pmode + instead of TARGET_64BIT. + +2012-03-04 H.J. Lu <hongjiu.lu@intel.com> + + * config/i386/i386.c (ix86_expand_prologue): Check Pmode to set + adjust_stack_insn. + +2012-03-04 H.J. Lu <hongjiu.lu@intel.com> + + * config/i386/i386.c (ix86_print_operand_address): Only handle + zero-extended DImode addresses. + +2012-03-04 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/i386.c (ix86_print_operand) <case '+'>: Declare + taken and cputaken as bool. + +2012-03-04 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/constraints.md (Ya): New internal constraint. + * config/i386/i386.md (zero_extendsidi2): Remove expansion. + (*zero_extendsidi2_rex64): Add x,x alternative. + (*zero_extendsidi2): Ditto. Add o,0 alternative. + Remove flags reg clobber. Adjust corresponding splits. + (zero_extend<mode>si2): Macroize expander from zero_extendhisi2 and + zero_extendqisi2 expanders using SWI12 mode iterator. + (zero_extend<mode>si2_and): Macroize insn from + zero_extendhisi2_and and zero_extendqisi2_and. Merge corresponding + splitters. + (*zero_extend<mode>si2): Macroize insn from + *zero_extendhisi2_movzbl and *zero_extendqisi2_movzbl. + (*zero_extend*2_movzbl_and): Remove insn patterns. + (zero_extendqihi2_and): Merge corresponding splitter. + (*zero_extendqihi2): Rename from *zero_extendqihi2_movzbl. + (*zero_extend*2_movzbl_and): Remove insn patterns. + (*anddi_1): Split TYPE_IMOVX instructions. + (*andsi_1): Use Ya for alternative 2. Split TYPE_IMOVX instructions. + (*andhi_1): Ditto. + (and->zext splitter): Add splitter pattern. + (zero extend with andsi3 splitter): Adjust zero_extend pattern. + +2012-03-04 Sandra Loosemore <sandra@codesourcery.com> + + * doc/invoke.texi (C++ Dialect Options): Minor copy-edits to + x86-specific text. + (Debugging Options): Likewise. + (Optimize Options): Likewise. + (i386 and x86-64 Options): Discuss -march before -mtune, consistently + with other architectures. Use official processor names with correct + spelling/capitalization. Fix formatting and grammar issues. + (i386 and x86-64 Windows Options): Similar cleanup here. + +2012-03-03 Kaz Kojima <kkojima@gcc.gnu.org> + + * config/sh/sh.md (abssi2): Add TARGET_SH1 condition. + +2012-03-03 Kaz Kojima <kkojima@gcc.gnu.org> + + * config/sh/sh.c (sh_dwarf_register_span): Don't apply + DBX_REGISTER_NUMBER. + +2012-03-03 Kaz Kojima <kkojima@gcc.gnu.org> + + * config/sh/sh.c (shiftcosts): Return MAX_COST when the first + operand is CONST_INT. Take COSTS_N_INSNS into account. + (sh_rtx_costs): Don't apply COSTS_N_INSNS to the return value + of shiftcosts. + +2012-03-02 Richard Henderson <rth@redhat.com> + + * optabs.c (expand_atomic_test_and_set): Honor + atomic_test_and_set_trueval even when atomic_test_and_set + optab is not in use. + +2012-03-02 Kaz Kojima <kkojima@gcc.gnu.org> + + PR target/48596 + PR target/48806 + * config/sh/sh.c (sh_register_move_cost): Increase cost between + GENERAL_REGS and FP_REGS for SImode. + +2012-03-02 Oleg Endo <olegendo@gcc.gnu.org> + + PR target/49486 + * config/sh/sh.md (negdi2): Add TARGET_SH1 condition. + (absdi2): New expander. + (*absdi2, *negabsdi2, negdi_cond): New insns and splits. + +2012-03-02 Oleg Endo <olegendo@gcc.gnu.org> + + * config/sh/sync.md (atomic_exchange<mode>): New expander. + (atomic_exchange<mode>_soft): New insn. + +2012-03-02 Oleg Endo <olegendo@gcc.gnu.org> + + * config/sh/sync.md: Update copyright notice dates. + (atomic_compare_and_swap<mode>): Use SImode for return value instead + of QImode. + (atomic_compare_and_swap<mode>_soft): Likewise. + +2012-03-02 Oleg Endo <olegendo@gcc.gnu.org> + + PR target/31640 + * config/sh/sh.h (LOOP_ALIGN): Move logic to sh_loop_align. + * config/sh/sh.c: Update copyright notice dates. + (sh_loop_align): Add logic from LOOP_ALIGN. Don't disable loop + alignment for TARGET_HARD_SH4. + (sh_option_override): Reduce default function alignment. Set + loop alignment to 4 bytes when not optimizing for size. + +2012-03-02 Maxim Kuvyrkov <maxim@codesourcery.com> + + PR middle-end/50335 + * doc/invoke.texi (floop-flatten): Remove. + * toplev.c (process_options): Remove references to flag_loop_flatten. + * tree-ssa-loop.c (gate_graphite_transform): Same. + * common.opt (floop-flatten): Obsolete. + * graphite-poly.c (apply_poly_transforms): Remove reference to + flag_loop_flatten. + * Makefile.in (graphite-flattening.o): Remove. + * graphite-flattening.c: Remove. + +2012-03-02 Uros Bizjak <ubizjak@gmail.com> + + * compare-elim.c (find_comparisons_in_bb): Eliminate only compares + having mode compatible with the mode of previous compare. Substitute + compare mode of previous compare with the mode, compatible + with eliminated and previous compare. + +2012-03-02 Peter Bergner <bergner@vnet.ibm.com> + + * config/rs6000/dfp.md (floatdidd2): New define_insn. + +2012-03-02 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/i386.c (ix86_cc_modes_compatible): Declare CCZmode + compatible with CCGOCmode and CCGCmode. + +2012-03-02 Peter Bergner <bergner@vnet.ibm.com> + + * config/rs6000/vsx.md (vsx_set_<mode>): Reorder operands. + +2012-03-02 Ulrich Weigand <ulrich.weigand@linaro.org> + + * config/arm/arm.c (arm_sat_operator_match): New function. + * config/arm/arm-protos.h (arm_sat_operator_match): Add prototype. + * config/arm/arm.md ("insn" attribute): Add "sat" value. + ("SAT", "SATrev"): New code iterators. + ("SATlo", "SAThi"): New code iterator attributes. + ("*satsi_<SAT:code>"): New pattern. + ("*satsi_<SAT:code>_shift"): Likewise. + * config/arm/arm-fixed.md ("arm_ssatsihi_shift"): Add "insn" + and "shift" attributes. + ("arm_usatsihi"): Add "insn" attribute. + * config/arm/predicates.md (sat_shift_operator): Allow multiplication + by powers of two. Do not allow shift by 32. + +2012-03-02 Uros Bizjak <ubizjak@gmail.com> + + PR target/46716 + * config/i386/i386.c (construct_container): Use gen_reg_or_parallel + to pass the argument in the register of "natural" mode. + +2012-03-02 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/52406 + * tree-data-ref.h: Update documentation about DR_BASE_OBJECT. + (struct indices): Add unconstrained_base member. + (struct dr_alias): Remove unused vops member. + (DR_UNCONSTRAINED_BASE): New define. + * tree-data-ref.c (dr_analyze_indices): For COMPONENT_REFs + add indices to allow their disambiguation. Make DR_BASE_OBJECT + be an artificial access that covers the whole indexed object, + or mark it with DR_UNCONSTRAINED_BASE if we cannot do so. Canonicalize + plain decl base-objects to their MEM_REF variant. + (dr_may_alias_p): When the base-object of either data reference + has unknown size use only points-to information. + (compute_affine_dependence): Make dumps easier to read and + more verbose. + * tree-vect-data-ref.c (vector_alignment_reachable_p): Use + DR_REF when looking for packed references. + (vect_supportable_dr_alignment): Likewise. + +2012-03-02 Greta Yorsh <Greta.Yorsh@arm.com> + + * config/arm/arm-ldmstm.ml (write_ldm_commutative_peephole): + Improve conditions for peepholes of loads followed by commutative + operators. + * config/arm/ldmstm.md: Regenerated. + +2012-03-02 Richard Guenther <rguenther@suse.de> + + * BASE-VER: Set to 4.8.0. + +2012-03-01 Richard Earnshaw <rearnsha@arm.com> + + * config.gcc (obsolete): Add all ARM targets using the FPA. + (with_fpu): Obsolete selection of the FPA or Maverick on ARM. + * doc/install.texi: Avoid references to obsolete ARM ports. + +2012-03-01 Joern Rennecke <joern.rennecke@embecosm.com> + + * config/epiphany/epiphany.md (movmisalign<mode>): New patterns. + +2012-03-01 Jeremy Bennett <jeremy.bennett@embecosm.com> + Joern Rennecke <joern.rennecke@embecosm.com> + + * doc/extend.texi: Expand and update information on interrupt + attribute for Epiphany. + +2012-03-01 Oleg Endo <olegendo@gcc.gnu.org> + + * config/sh/sh-protos.h: Update copyright notice dates. + * config/sh/sh.h: Likewise. + * config/sh/sh.md: Likewise. + * config/sh/constraints.md: Likewise. + * config/sh/predicates.md: Likewise. + +2012-03-01 Oleg Endo <olegendo@gcc.gnu.org> + + * config/sh/sh-protos.h (tertiary_reload_operand): Remove dead function. + * config/sh/sh.c (tertiary_reload_operand): Likewise. + +2012-03-01 Oleg Endo <olegendo@gcc.gnu.org> + + * config/sh/constraints.md: Fix comment typo. + +2012-03-01 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + PR target/52408 + * config/pa/pa.md (zvdep_imm32): Change type of variable x from int to + unsigned HOST_WIDE_INT. + (zvdep_imm64): Likewise. + (vdepi_ior): Change type of variable x from int to HOST_WIDE_INT. + (vdepi_and): Likewise. + Likewise for unamed 64-bit patterns. + * config/pa/predicates.md (lhs_lshift_cint_operand): Update comment. + +2012-03-01 Alexandre Oliva <aoliva@redhat.com> + + PR debug/52001 + PR rtl-optimization/52417 + * cselib.c (cselib_any_perm_equivs): New variable. + (cselib_reset_table): Check that it's not set when not + preserving constants. + (cselib_add_permanent_equiv): Set it. + (cselib_have_permanent_equivalences): New. + (cselib_init, cselib_finish): Reset it. + * cselib.h (cselib_have_permanent_equivalences): Declare. + * alias.c (get_addr): Restore earlier behavior when there + aren't permanent equivalences. + +2012-03-01 Steven Bosscher <steven@gcc.gnu.org> + + * config/mn10300/mn10300-modes.def: Fix copyright notice. + * config/v850/v850-modes.def: Fix copyright notice. + +2012-03-01 Georg-Johann Lay <avr@gjlay.de> + + * doc/extend.texi (AVR Built-in Functions): Document + __builtin_avr_flash_segment. + + * config/avr/builtins.def (__builtin_avr_flash_segment): New entry. + * config/avr/avr.md (flash_segment, flash_segment1): New expanders. + (*split.flash_segment): New insn-and-split. + * config/avr/avr.c (avr_init_builtins): Add local variables: + const_memx_void_node, const_memx_ptr_type_node, + char_ftype_const_memx_ptr. + +2012-03-01 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/52445 + * tree-ssa-phiopt.c (struct name_to_bb): Remove ssa_name field, + add ssa_name_ver, offset and size fields and change store field + to bool. + (name_to_bb_hash, name_to_bb_eq): Adjust for the above changes. + (add_or_mark_expr): Likewise. Only consider previous stores + with the same size and offset. + (nt_init_block): Only look at gimple_assign_single_p stmts, + doesn't look at rhs2. + +2012-03-01 Richard Guenther <rguenther@suse.de> + + PR middle-end/52443 + * tree-cfg.c (verify_gimple_assign_unary): Allow any + conversions from integral types to pointer types. + +2012-03-01 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr-c.c (avr_cpu_cpp_builtins): Restore built-in + defines for __UINT24_MAX__, __INT24_MAX__, __INT24_MIN__ + unintentionally removed in r184616. + +2012-03-01 Venkataramanan Kumar <venkataramanan.kumar@amd.com> + + * doc/invoke.texi: Document AMD bdver2 and remove mentioning + 3DNow from bdver1. + +2012-02-29 Jakub Jelinek <jakub@redhat.com> + Uros Bizjak <ubizjak@gmail.com> + + PR target/52437 + * config/i386/sse.md (vec_set<mode>_0): Swap "*r" and "fF" + alternatives, add "e" constraint to the new last alternative + and ! to last 3 alternatives. + +2012-02-29 Eric Botcazou <ebotcazou@adacore.com> + + * dwarf2out.c (modified_type_die): Set DW_AT_GNAT_descriptive_type and + DW_AT_artificial attributes at the end of the processing. + (gen_array_type_die): Likewise. + (gen_enumeration_type_die): Likewise. + (gen_struct_or_union_type_die): Likewise. + (add_gnat_descriptive_type_attribute): Do not suppress debug info for + the parent type. + +2012-02-29 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/52419 + * expr.c (expand_assignment): If doing misaligned store that doesn't + cover all mode bits, perform a RMW cycle. + + PR tree-optimization/52429 + * tree-parloops.c (separate_decls_in_region_debug): Return early + if var is LABEL_DECL. + +2012-02-29 Bill Schmidt <wschmidt@linux.vnet.ibm.com> + + PR tree-optimization/52424 + * tree-ssa-dom.c (dom_opt_leave_block): Push a marker before + calling dom_thread_across_edge. + +2012-02-29 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.c: Move definition of TARGET macros to end of file. + +2012-02-29 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr-protos.h (avr_output_bld): Remove unused prototype. + * config/avr/avr.c (avr_output_bld): Remove unused function. + (avr_out_sbxx_branch): Use "%T" to print bit position. + +2012-02-29 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.md: Untabify. + +2012-02-29 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.md (eqne): New code iterator. + (*dec-and-branchsi): Use it in text peephole's condition. + (*dec-and-branchhi): Ditto. + (*dec-and-branchqi): Ditto. + +2012-02-29 Georg-Johann Lay <avr@gjlay.de> + + PR target/49939 + * config/avr/avr.h (ASM_SPEC): Add -mno-skip-bug if we know that + the device does not have the skip-bug. + +2012-02-29 Oleg Endo <olegendo@gcc.gnu.org> + + * doc/invoke.texi (-msoft-atomic): Add more detailed description. + (-mbranch-cost, -mcbranchdi -mcmpeqdi -mfused-madd + -mpretend-cmove): New. + +2012-02-29 Jakub Jelinek <jakub@redhat.com> + + PR bootstrap/52397 + * df.h (struct df_d): Adjust comment that hard_regs_live_count + doesn't count DEBUG_INSN refs. + * df-scan.c (df_ref_create_structure): Don't set DF_HARD_REG_LIVE + for DEBUG_INSN refs. + +2012-02-28 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> + + Partially revert: + + 2012-02-20 Richard Guenther <rguenther@suse.de> + PR tree-optimization/52298 + * tree-vect-stmts.c (vectorizable_load): Properly use + STMT_VINFO_DR_STEP instead of DR_STEP when vectorizing + outer loops. + +2012-02-28 Aldy Hernandez <aldyh@redhat.com> + + PR middle-end/51752 + * gimple.h (gimple_in_transaction): New. + (gimple_set_in_transaction): New. + (struct gimple_statement_base): Add in_transaction field. + * tree-ssa-loop-im.c: (movement_possibility): Restrict movement of + transaction loads. + (tree_ssa_lim_initialize): Compute transaction bits. + * tree.h (compute_transaction_bits): Protoize. + * trans-mem.c (tm_region_init): Use the heap to store BB + auxilliary data. + (compute_transaction_bits): New. + +2012-02-28 Bernhard Reutner-Fischer <aldot@gcc.gnu.org> + + * gcc.c (display_help): Document --help=common and sort entries + alphabetically. + +2012-02-28 Bernhard Reutner-Fischer <aldot@gcc.gnu.org> + + * doc/install.texi: Document check-$LANG specific shortcuts + +2012-02-28 Matthew Gretton-Dann <matthew.gretton-dann@arm.com> + + PR target/51534 + * config/arm/arm.c (neon_builtin_data): Add entries for vcgeu + and vcgtu. + * config/arm/arm_neon.h: Regenerate. + * config/arm/neon.md (unspec): Add UNSPEC_VCGEU, and UNSPEC_VCGTU. + (neon_vcgeu): New insn. + (neon_vcgtu): Likewise. + * config/arm/neon.ml (s_8_32, u_8_32): New lists. + (ops): Unsigned comparison intrinsics call a different builtin. + +2012-02-28 Richard Guenther <rguenther@suse.de> + + PR target/52407 + * config/i386/i386.c (ix86_expand_vector_set): Fix element + ordering for the VEC_CONCAT for two element vectors for + V2SFmode, V2SImode and V2DImode. + +2012-02-28 Richard Earnshaw <rearnsha@arm.com> + + PR target/49448 + * config.gcc (arm*-*-linux*): Use an unambiguous pattern for + detecting big-endian triplets. + +2012-02-28 Richard Earnshaw <rearnsha@arm.com> + + * arm.c (aapcs_vfp_is_call_or_return_candidate): Only use the machine + mode if there is no type information available. + +2012-02-28 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR tree-optimization/53207 + * doc/invoke.texi: Document as experimental and relying on graphite. + +2012-02-28 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr-devices.c (avr_mcu_type): Adjust NULL part + of initializer to changes from r184614. + +2012-02-28 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/52395 + * tree-sra.c (build_ref_for_offset): Also look at the base + TYPE_ALIGN when figuring out the alignment of the replacement. + +2012-02-28 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/52402 + * ipa-prop.c (ipa_modify_call_arguments): Properly use + mis-aligned types when creating the accesses at the call site. + +2012-02-28 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/builtins.def: New file. + * config/avr/t-avr (avr.o, avr-c.o): Depend on it. + * config/avr/avr.c (enum avr_builtin_id): Use it. + (avr_init_builtins): Use it. And use avr_bdesc. + (bdesc_1arg): Remove. + (bdesc_2arg): Remove. + (bdesc_3arg): Remove. + (struct avr_builtin_description): Add field n_args. + (avr_bdesc): New static variable using builtins.def. + (avr_expand_builtin): Use it. + Don't call avr_expand_delay_cycles if op0 is not CONST_INT. + (avr_fold_builtin): Fold AVR_BUILTIN_SWAP. + Don't fold AVR_BUILTIN_INSERT_BITS if arg0 is not INTEGER_CST. + +2012-02-28 Georg-Johann Lay <avr@gjlay.de> + + PR target/52148 + * config/avr/avr.md (movmem_<mode>): Replace match_operand that + match only one single hard register with respective hard reg rtx. + (movmemx_<mode>): Ditto. + * config/avr/avr.c (avr_emit_movmemhi): Adapt expanding to new + insn anatomy of movmem[x]_<mode>. + (avr_out_movmem): Same for printing assembler and operand usage. + +2012-02-28 Georg-Johann Lay <avr@gjlay.de> + + PR target/49868 + PR target/52261 + * doc/extend.texi (AVR Named Address Spaces): No more try to fix + address spaces located outside of device flash. + + * config/avr/avr.h (base_arch_s): Remove field n_segments. + (mcu_type_s): Add field n_flash. + * config/avr/avr-devices.c (avr_arch_types): Remove .n_segments. + Set .have_elpm and .have_elpmx to 1 for avrxmega4 and avrxmega5. + (AVR_MCU): Add N_FLASH argument. + * config/avr/avr-mcus.def (AVR_MCU): Add initializer for .n_flash. + * config/avr/avr-c.c (avr_cpu_cpp_builtins): Only define built-in + macro __FLASH<n> if that address space makes sense for the device. + * config/avr/avr.c (avr_out_lpm): Don't try to fix address spaces + outside of target flash. + (avr_asm_named_section): Ditto. + (avr_asm_select_section): Ditto. + (avr_addr_space_convert): Ditto. + (avr_emit_movmemhi): Ditto. + (avr_nonconst_pointer_addrspace, avr_pgm_check_var_decl): Error if + address space is outside of device flash. + (avr_insert_attributes): Ditto. + (avr_xload_libgcc_p): Use avr_current_device->n_flash instead of + avr_current_arch->n_segments. + +2012-02-27 H.J. Lu <hongjiu.lu@intel.com> + + PR target/52352 + * config/i386/i386.md (*movabs<mode>_1): Enable only for TARGET_LP64. + (*movabs<mode>_2): Likewise. + +2012-02-27 Jakub Jelinek <jakub@redhat.com> + + PR target/52375 + * config/arm/neon.md (vashr<mode>3, vlshr<mode>3): Use + s_register_operand in the test instead of REG_P. Don't call + gen_reg_rtx if it won't be used. + + PR tree-optimization/52376 + * ipa-split.c (split_function): Ignore CLOBBER stmts. + +2012-02-27 Stuart Henderson <shenders@gcc.gnu.org> + + * ifcvt.c (noce_get_condition): Check condition variable is not + small_register_classes_for_mode_p before accepting. + +2012-02-27 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/i386.md (*movabs<mode>_1): Fix operand 1 constraints. + +2012-02-27 Matthew Gretton-Dann <matthew.gretton-dann@arm.com> + + Revert: + 2012-01-09 Matthew Gretton-Dann <matthew.gretton-dann@arm.com> + * config/arm/arm-cores.def (cortex-a15): Use cortex_a15_tune for + tuning parameters. + * config/arm/arm.c (arm_cortex_a15_tune): New static variable. + +2012-02-27 Oleg Endo <olegendo@gcc.gnu.org> + + * config/sh/sh.h: Delete dead GO_IF_LEGITIMATE_INDEX macro. + +2012-02-26 Oleg Endo <olegendo@gcc.gnu.org> + + * config/sh/predicates.md: Remove blank lines. + * config/sh/sh.c: Fix typos in comments. + * config/sh/constraints.md: Likewise. + * config/sh/sh.md: Remove blank lines. + Fix typos in comments. Use ;; as comment characters. + +2012-02-26 Walter Lee <walt@tilera.com> + + * config/tilegx/tilegx.c (match_pcrel_step2): Fix instruction pattern. + (replace_mov_pcrel_step2): Ditto. + +2012-02-25 Alexandre Oliva <aoliva@redhat.com> + + PR debug/52001 + * alias.c (refs_newer_value_cb, refs_newer_value_p): New. + (get_addr): Walk canonical value's locs. Avoid returning VALUEs + and locs that reference values newer than the non-canonical value + at hand. Return the canonical value as a worst case. + (memrefs_conflict_p): Walk canonical value's locs. + + PR debug/52001 + * cselib.c (preserve_only_constants): Rename to... + (preserve_constants_and_equivs): ... this. Split out... + (invariant_or_equiv_p): ... this. Preserve plus expressions + of other preserved expressions too. + (cselib_reset_table): Adjust. + * var-tracking.c (reverse_op): Use canonical value to build + reverse operation. + +2012-02-23 Kai Tietz <ktietz@redhat.com> + + * config/i386/i386.c (ix86_delegitimize_address): Handle + UNSPEC_PCREL plus displacement. + +2012-02-24 Georg-Johann Lay <avr@gjlay.de> + + PR target/52261 + * config/avr/avr.c (avr_out_movhi_mr_r_xmega): Use base + to test for unusedness in st X addressing. + +2012-02-24 Richard Guenther <rguenther@suse.de> + + PR middle-end/52361 + * gimple.c (walk_gimple_op): Use predicates with less redundant tests. + (is_gimple_reg_type): Move inline ... + * gimple.h (is_gimple_reg_type): ... here. + +2012-02-24 Richard Guenther <rguenther@suse.de> + + PR middle-end/52361 + * passes.c (execute_function_todo): When verifying SSA form + verify gimple form first. + * tree-ssa.c (verify_ssa): Do not verify gimple form here. + +2012-02-24 Richard Guenther <rguenther@suse.de> + + PR middle-end/52355 + * fold-const.c (fold_addr_of_array_ref_difference): New function. + (fold_binary_loc): Use it to extend the existing &a[i] - &a[j] folding. + +2012-02-13 Bernhard Reutner-Fischer <aldot@gcc.gnu.org> + + * tree-if-conv (predicate_scalar_phi): Commentary typo fix. + +2012-02-23 Bernhard Reutner-Fischer <aldot@gcc.gnu.org> + + * tree-phinodes.c (make_phi_node): Mark static. + * tree-flow.h (make_phi_node): Remove extern decl. + * doc/gimple.texi (make_phi_node): Remove documentation. + +2012-02-23 Bernhard Reutner-Fischer <aldot@gcc.gnu.org> + + * tree-into-ssa (update_ssa): Avoid trailing whitespace in dump_file. + * tree-ssa-sccvn.c (print_scc): Ditto. + +2012-02-23 Bernhard Reutner-Fischer <aldot@gcc.gnu.org> + + * doc/passes.texi (Full redundancy elimination): Fix typo. + +2012-02-23 Bernhard Reutner-Fischer <aldot@gcc.gnu.org> + + * doc/invoke.texi (-fdse, -fdce): Remove duplicate entries. + +2012-02-23 Eric Botcazou <ebotcazou@adacore.com> + + PR bootstrap/52287 + * haifa-sched.c (rank_for_schedule): Stabilize sort for debug insns. + +2012-02-23 Uros Bizjak <ubizjak@gmail.com> + + PR c/52290 + * c-decl.c (start_function): Exit early if decl1 is not FUNTION_DECL. + +2012-02-23 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.md (code_stdname): Add ior, xor. + (xior): New code iterator. + (*<code_stdname><mode>qi.byte0): Use xior instead of ior. + (*<code_stdname><mode>qi.byte1-3): Ditto. + +2012-02-23 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/52019 + * ipa-split.c (find_return_bb, find_retval, visit_bb): Ignore + CLOBBER stmts. + +2012-02-23 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> + + * acinclude.m4: Use HAVE_INITFINI_ARRAY_SUPPORT instead of + HAVE_INITFINI_ARRAY to work around namespace pollution in + certain versions of newlib system headers. + * config.in: Regenerate. + * configure: Regenerate. + * config/initfini-array.h: Use HAVE_INITFINI_ARRAY_SUPPORT + instead of HAVE_INITFINI_ARRAY. + +2012-02-22 Uros Bizjak <ubizjak@gmail.com> + + PR target/52330 + * config/i386/i386.c (ix86_print_operand) <case 'H'>: Error out if x + is not offsettable memory reference. + +2012-02-22 Georg-Johann Lay <avr@gjlay.de> + + PR target/18145 + * config/avr/avr.c (avr_asm_output_aligned_decl_common): Skip + setting avr_need_clear_bss_p for __gnu_lto* symbols. + +2012-02-22 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.h (avr_accumulate_outgoing_args): Return int. + * config/avr/avr.c (avr_accumulate_outgoing_args): Return int. + +2012-02-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * configure.ac (LIB_TLS_SPEC): Enforce use of alternate thread + library on Solaris 8 even without TLS support. + * configure: Regenerate. + +2012-02-22 Richard Guenther <rguenther@suse.de> + + PR middle-end/52329 + * gimple-fold.c (fold_stmt_1): Also canonicalize ADDR_EXPRs + for GIMPLE_DEBUG stmts. + +2012-02-22 Martin Jambor <mjambor@suse.cz> + + PR middle-end/51782 + * emit-rtl.c (set_mem_attributes_minus_bitpos): Set address space + according to the base object. + +2012-02-22 Georg-Johann Lay <avr@gjlay.de> + + PR rtl-optimization/50063 + * config/avr/avr.md (movhi_sp_r): Handle -1 (unknown IRQ state) + and 2 (8-bit SP) in operand 2. + * config/avr/avr.c (avr_prologue_setup_frame): Adjust prologue + setup to use movhi_sp_r instead of vanilla move to write SP. + Adjust REG_CFA notes to superseed unspec. + (expand_epilogue): Adjust epilogue setup to use movhi_sp_r instead + of vanilla move. + As function body might contain CLI or SEI: Use irq_state 0 (IRQ + known to be off) only with TARGET_NO_INTERRUPTS. Never use + irq_state 1 (IRQ known to be on) here. + +2012-02-21 Bernd Schmidt <bernds@codesourcery.com> + + * ira.c (check_allocation): Use REG_WORDS_BIG_ENDIAN, not + WORDS_BIG_ENDIAN. + * ira-color.c (setup_profitable_hard_regs, check_hard_reg_p, + assign_hard_reg): Likewise. + +2012-02-21 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.md (neghi2): Remove "!d,0" alternative. Tweak "r,0". + +2012-02-21 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.md + (*dec-and-branchhi!=-1.d.clobber): New text peephole. + (*dec-and-branchhi!=-1.l.clobber): New text peephole. + +2012-02-21 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr-protos.h (avr_accumulate_outgoing_args): Move + prototype from here to... + * config/avr/avr.h: ...here. + +2012-02-21 Richard Earnshaw <rearnsha@arm.com> + + PR target/52294 + * thumb2.md (thumb2_shiftsi3_short): Split register and + immediate shifts. For register shifts tie operands 0 and 1. + (peephole2 for above): Check that register-controlled shifts + have suitably tied operands. + +2012-02-21 Quentin Neill <quentin.neill@amd.com> + + PR target/52137 + * config/i386/bdver1.md (bdver1_call, bdver1_push, + bdver1_pop, bdver1_leave, bdver1_lea, bdver1_imul_DI, bdver1_imul, + bdver1_imul_mem_DI, bdver1_imul_mem, bdver1_idiv, bdver1_idiv_mem, + bdver1_str, bdver1_idirect, bdver1_ivector, bdver1_idirect_loadmov, + bdver1_idirect_load, bdver1_ivector_load, bdver1_idirect_movstore, + bdver1_idirect_both, bdver1_ivector_both, bdver1_idirect_store, + bdver1_ivector_store, bdver1_fldxf, bdver1_fld, bdver1_fstxf, + bdver1_fst, bdver1_fist, bdver1_fmov_bdver1, bdver1_fadd_load, + bdver1_fadd, bdver1_fmul_load, bdver1_fmul, bdver1_fsgn, + bdver1_fdiv_load, bdver1_fdiv, bdver1_fpspc_load, bdver1_fpspc, + bdver1_fcmov_load, bdver1_fcmov, bdver1_fcomi_load, + bdver1_fcomi, bdver1_fcom_load, bdver1_fcom, + bdver1_fxch, bdver1_ssevector_avx128_unaligned_load, + bdver1_ssevector_avx256_unaligned_load, + bdver1_ssevector_sse128_unaligned_load, + bdver1_ssevector_avx128_load, bdver1_ssevector_avx256_load, + bdver1_ssevector_sse128_load, bdver1_ssescalar_movq_load, + bdver1_ssescalar_vmovss_load, bdver1_ssescalar_sse128_load, + bdver1_mmxsse_load, bdver1_sse_store_avx256, bdver1_sse_store, + bdver1_mmxsse_store_short, bdver1_ssevector_avx256, + bdver1_movss_movsd, bdver1_mmxssemov, bdver1_sselog_load_256, + bdver1_sselog_256, bdver1_sselog_load, bdver1_sselog, + bdver1_ssecmp_load, bdver1_ssecmp, bdver1_ssecomi_load, + bdver1_ssecomi, bdver1_vcvtX2Y_avx256_load, bdver1_vcvtX2Y_avx256, + bdver1_ssecvt_cvtss2sd_load, bdver1_ssecvt_cvtss2sd, + bdver1_sseicvt_cvtsi2sd_load, bdver1_sseicvt_cvtsi2sd, + bdver1_ssecvt_cvtpd2ps_load, bdver1_ssecvt_cvtpd2ps, + bdver1_ssecvt_cvtdq2ps_load, bdver1_ssecvt_cvtdq2ps, + bdver1_ssecvt_cvtdq2pd_load, bdver1_ssecvt_cvtdq2pd, + bdver1_ssecvt_cvtps2pd_load, bdver1_ssecvt_cvtps2pd, + bdver1_ssecvt_cvtsX2si_load, bdver1_ssecvt_cvtsX2si, + bdver1_ssecvt_cvtpd2pi_load, bdver1_ssecvt_cvtpd2pi, + bdver1_ssecvt_cvtpd2dq_load, bdver1_ssecvt_cvtpd2dq, + bdver1_ssecvt_cvtps2pi_load, bdver1_ssecvt_cvtps2pi, + bdver1_ssemuladd_load_256, bdver1_ssemuladd_256, + bdver1_ssemuladd_load, bdver1_ssemuladd, bdver1_sseimul_load, + bdver1_sseimul, bdver1_sseiadd_load, bdver1_sseiadd, + bdver1_ssediv_double_load_256, bdver1_ssediv_double_256, + bdver1_ssediv_single_load_256, bdver1_ssediv_single_256, + bdver1_ssediv_double_load, bdver1_ssediv_double, + bdver1_ssediv_single_load, bdver1_ssediv_single, bdver1_sseins): + Add "bdver2" attribute. + +2012-02-21 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> + + * config/s390/s390.c (s390_option_override): Make -mhard-dfp the + default if possible and not specified otherwise. + +2012-02-21 Richard Guenther <rguenther@suse.de> + + PR middle-end/52314 + * gimplify.c (create_tmp_from_val): Use the main variant type + for the type of the temporary we create. + +2012-02-21 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/52324 + * gimplify.c (gimplify_expr): When re-gimplifying expressions + do not gimplify a MEM_REF address operand if it is already + in suitable form. + +2012-02-21 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> + + * config/s390/s390.md ("fixuns_trunc<mode>si2"): Replace + TARGET_HARD_FLOAT with TARGET_HARD_DFP. + +2012-02-21 Richard Guenther <rguenther@suse.de> + + * tree-vect-stmts.c (vectorizable_load): Use pre-computed + nested_in_vect_loop. + +2012-02-21 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/52318 + * gimple-fold.c (gimplify_and_update_call_from_tree): Add + vdef also to non-pure/const call stmts in the sequence. + +2012-02-21 Tristan Gingold <gingold@adacore.com> + + * config/vms/vms-ld.c (main): Fix IDENTIFICATION padding. + +2012-02-20 David S. Miller <davem@davemloft.net> + + * config/sparc/sparc.md (load_pcrel_sym<P:mode>): Explain why we + don't use the "rd %pc" instruction on v9 for PIC register loads. + +2012-02-20 Aldy Hernandez <aldyh@redhat.com> + + PR middle-end/52141 + * trans-mem.c (ipa_tm_scan_irr_block): Error out on GIMPLE_ASM's + in a transaction safe function. + +2012-02-20 Kai Tietz <ktietz@redhat.com> + + PR target/52238 + * stor-layout.c (place_field): Handle desired_align for + ms-bitfields, too. + +2012-02-20 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/52298 + * tree-vect-stmts.c (vectorizable_store): Properly use + STMT_VINFO_DR_STEP instead of DR_STEP when vectorizing + outer loops. + (vectorizable_load): Likewise. + * tree-vect-data-refs.c (vect_analyze_data_ref_access): + Access DR_STEP after ensuring it is not NULL. + +2012-02-20 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/52286 + * fold-const.c (fold_binary_loc): For (X & C1) | C2 + optimization use double_int_to_tree instead of build_int_cst_wide, + rewrite to use double_int vars. + +2012-02-20 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR target/50166 + * acinclude.m4 (gcc_AC_INITFINI_ARRAY): Require gcc_SUN_LD_VERSION. + Define _start. + Remove -e 0 from $gcc_cv_ld invocation. + Only use __GLIBC_PREREQ if defined. + Enable on Solaris since Solaris 8 patch. + (gcc_SUN_LD_VERSION): New macro. + * configure.ac (ld_ver) <*-*-solaris2*>: Refer to + gcc_SUN_LD_VERSION for version number format. + * configure: Regenerate. + * varasm.c (get_elf_initfini_array_priority_section): Set + SECTION_NOTYPE for non-default priority. + Use get_section instead of get_unnamed_section to emit + .init_array/.fini_array with default priority. + +2012-02-19 Richard Sandiford <rdsandiford@googlemail.com> + + * config/mips/mips.c (mips_need_mips16_rdhwr_p): New variable. + (mips_get_tp): Set it. Record that __mips16_rdhwr binds locally. + (mips_start_unique_function, mips_output_mips16_rdhwr) + (mips_code_end): New functions. + (TARGET_ASM_CODE_END): Define. + +2012-02-19 Richard Sandiford <rdsandiford@googlemail.com> + + * config/mips/mips.c (mips16_build_call_stub): Add CFI information + to stubs with non-sibling calls. + +2012-02-18 Sandra Loosemore <sandra@codesourcery.com> + + * doc/invoke.texi (-fira-* options): Copy-edit. + (ira-* parameters): Copy-edit. + +2012-02-17 Sandra Loosemore <sandra@codesourcery.com> + + * doc/invoke.texi: Minor copy-edits to bring into conformance with + GCC coding conventions. + +2012-02-17 Sandra Loosemore <sandra@codesourcery.com> + + * doc/invoke.texi: Consistently hyphenate "big-endian"/"little-endian" + when used as adjectives. + 2012-02-16 Sandra Loosemore <sandra@codesourcery.com> * doc/invoke.texi: Clean up "that"/"which" confusion. @@ -189,8 +1634,7 @@ 2012-02-14 Bernd Schmidt <bernds@codesourcery.com> * haifa-sched.c (prune_ready_list): Ensure that if there is a - sched-group insn, it either remains alone or the entire list is - pruned. + sched-group insn, it either remains alone or the entire list is pruned. 2012-02-14 Jonathan Wakely <jwakely.gcc@gmail.com> @@ -310,8 +1754,8 @@ * gcc.c (LINK_COMMAND_SPEC): Deal with -fgnu-tm. (GTM_SELF_SPECS): Define if not already defined. (driver_self_specs): Add GTM_SELF_SPECS. - * config/darwin.h (LINK_COMMAND_SPEC_A): Deal with -fgnu-tm. - (GTM_SELF_SPECS): Define. + * config/darwin.h (LINK_COMMAND_SPEC_A): Deal with -fgnu-tm. + (GTM_SELF_SPECS): Define. * config/i386/cygwin.h (GTM_SELF_SPECS): Likewise. * config/i386/mingw32.h (GTM_SELF_SPECS): Likewise. @@ -320,13 +1764,11 @@ * cselib.c (expand_loc): Return sp, fp, hfp or cfa base reg right away if seen. - * cselib.c (dump_cselib_val): Don't assume l->setting_insn is - non-NULL. + * cselib.c (dump_cselib_val): Don't assume l->setting_insn is non-NULL. PR middle-end/52230 - * omp-low.c (expand_omp_for): If a static schedule without - chunk size has NULL region->cont, force fd.chunk_size to be - integer_zero_node. + * omp-low.c (expand_omp_for): If a static schedule without chunk size + has NULL region->cont, force fd.chunk_size to be integer_zero_node. 2012-02-13 Andrew MacLeod <amacleod@redhat.com> @@ -350,7 +1792,7 @@ disallow changes from SFmode to mode with different size in FP regs. 2012-02-12 Robert Millan <rmh@gnu.org> - Gerald Pfeifer <gerald@pfeifer.com> + Gerald Pfeifer <gerald@pfeifer.com> * ginclude/stddef.h [__FreeBSD_kernel__] (__size_t): Do not define. Tweak comment. @@ -374,8 +1816,7 @@ 2012-02-11 Jakub Jelinek <jakub@redhat.com> PR debug/52132 - * reg-stack.c (subst_stack_regs_in_debug_insn): Don't use - get_true_reg. + * reg-stack.c (subst_stack_regs_in_debug_insn): Don't use get_true_reg. 2012-02-11 Uros Bizjak <ubizjak@gmail.com> @@ -736,8 +2177,8 @@ * config/mips/mips-dspr2.md (mips_prepend): Mask operand 3 rather than operand 2. -2012-02-02 Jan Hubicka <jh@suse.cz> - Tom de Vries <tom@codesourcery.com> +2012-02-02 Jan Hubicka <jh@suse.cz> + Tom de Vries <tom@codesourcery.com> PR middle-end/51998 * cgraphunit.c (cgraph_analyze_function): Break cyclic aliases. diff --git a/gcc/ChangeLog-2011 b/gcc/ChangeLog-2011 index 534ba130f83..ce92ab2febb 100644 --- a/gcc/ChangeLog-2011 +++ b/gcc/ChangeLog-2011 @@ -32664,7 +32664,7 @@ * ira-conflicts.c: Remove mentioning cover classes from the file. Use ALLOCNO_CLASS instead of ALLOCNO_COVER_CLASS. Use - ALLOCNO_COVER_CLASS_COST instead of ALLOCNO_CLASS_COST. Fix formatting. + ALLOCNO_CLASS_COST instead of ALLOCNO_COVER_CLASS_COST. Fix formatting. * targhooks.c (default_ira_cover_classes): Remove. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index cb944191e7e..4aeb8f283e4 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20120217 +20120309 diff --git a/gcc/Makefile.in b/gcc/Makefile.in index f6cf8ffca33..b5190991180 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1241,7 +1241,6 @@ OBJS = \ graphite-clast-to-gimple.o \ graphite-cloog-util.o \ graphite-dependences.o \ - graphite-flattening.o \ graphite-interchange.o \ graphite-poly.o \ graphite-ppl.o \ @@ -2356,7 +2355,7 @@ tree-ssa-phiopt.o : tree-ssa-phiopt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) $(GGC_H) $(TREE_H) $(TM_P_H) $(BASIC_BLOCK_H) \ $(TREE_FLOW_H) $(TREE_PASS_H) $(TREE_DUMP_H) langhooks.h $(FLAGS_H) \ $(DIAGNOSTIC_H) $(TIMEVAR_H) pointer-set.h domwalk.h $(CFGLOOP_H) \ - $(TREE_DATA_REF_H) + $(TREE_DATA_REF_H) tree-pretty-print.h tree-nrv.o : tree-nrv.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) $(TREE_H) $(FUNCTION_H) $(BASIC_BLOCK_H) $(FLAGS_H) \ $(DIAGNOSTIC_H) $(TREE_FLOW_H) $(TIMEVAR_H) $(TREE_DUMP_H) $(TREE_PASS_H) \ @@ -2619,9 +2618,6 @@ graphite-dependences.o : graphite-dependences.c $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) \ sese.h graphite-ppl.h graphite-poly.h graphite-dependences.h \ graphite-cloog-util.h -graphite-flattening.o : graphite-flattening.c $(CONFIG_H) $(SYSTEM_H) \ - coretypes.h $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) \ - sese.h graphite-ppl.h graphite-poly.h graphite-interchange.o : graphite-interchange.c $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) \ sese.h graphite-ppl.h graphite-poly.h @@ -3499,8 +3495,8 @@ insn-automata.o : insn-automata.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ insn-emit.o : insn-emit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(RTL_H) $(TM_P_H) $(FUNCTION_H) $(EXPR_H) $(OPTABS_H) \ dfp.h $(FLAGS_H) output.h insn-config.h hard-reg-set.h $(RECOG_H) \ - $(RESOURCE_H) reload.h $(DIAGNOSTIC_CORE_H) $(REGS_H) tm-constrs.h $(GGC_H) \ - $(BASIC_BLOCK_H) $(INTEGRATE_H) + $(RESOURCE_H) reload.h $(DIAGNOSTIC_CORE_H) $(REGS_H) tm-constrs.h \ + $(GGC_H) $(BASIC_BLOCK_H) $(INTEGRATE_H) $(TARGET_H) insn-enums.o : insn-enums.c $(CONFIG_H) $(SYSTEM_H) insn-constants.h insn-extract.o : insn-extract.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) $(RTL_H) $(DIAGNOSTIC_CORE_H) insn-config.h $(RECOG_H) @@ -4811,20 +4807,18 @@ install-collect2: collect2 installdirs install-lto-wrapper: lto-wrapper$(exeext) $(INSTALL_PROGRAM) lto-wrapper$(exeext) $(DESTDIR)$(libexecsubdir)/lto-wrapper$(exeext) -install-gcc-ar: - set -e ; \ - for i in ar nm ranlib ; do \ - install_name=`echo gcc-$$i|sed '$(program_transform_name)'`$(exeext) ;\ - target_install_name=$(target_noncanonical)-`echo gcc-$$i|sed '$(program_transform_name)'`$(exeext) ; \ - binname=gcc-$$i$(exeext) ; \ - rm -f $(DESTDIR)$(bindir)/$$install_name ; \ - rm -f $(DESTDIR)$(bindir)/$$target_install_name ; \ - $(INSTALL_PROGRAM) $$binname $(DESTDIR)$(bindir)/$$install_name ;\ - if test -f $(DESTDIR)$(bindir)$$target_install_name ; then \ +install-gcc-ar: installdirs gcc-ar$(exeext) gcc-nm$(exeext) gcc-ranlib$(exeext) + for i in gcc-ar gcc-nm gcc-ranlib; do \ + install_name=`echo $$i|sed '$(program_transform_name)'` ;\ + target_install_name=$(target_noncanonical)-`echo $$i|sed '$(program_transform_name)'` ; \ + rm -f $(DESTDIR)$(bindir)/$$install_name$(exeext) ; \ + $(INSTALL_PROGRAM) $$i$(exeext) $(DESTDIR)$(bindir)/$$install_name$(exeext) ;\ + if test -f gcc-cross$(exeext); then \ :; \ else \ + rm -f $(DESTDIR)$(bindir)/$$target_install_name$(exeext); \ ( cd $(DESTDIR)$(bindir) && \ - $(LN) $$install_name $$target_install_name ) ; \ + $(LN) $$install_name$(exeext) $$target_install_name$(exeext) ) ; \ fi ; \ done diff --git a/gcc/acinclude.m4 b/gcc/acinclude.m4 index 933f81167c6..a3948471048 100644 --- a/gcc/acinclude.m4 +++ b/gcc/acinclude.m4 @@ -1,4 +1,5 @@ -dnl Copyright (C) 2005, 2006, 2007, 2008, 2011 Free Software Foundation, Inc. +dnl Copyright (C) 2005, 2006, 2007, 2008, 2011, 2012 +dnl Free Software Foundation, Inc. dnl dnl This file is part of GCC. dnl @@ -370,7 +371,8 @@ fi fi]) AC_DEFUN([gcc_AC_INITFINI_ARRAY], -[AC_ARG_ENABLE(initfini-array, +[AC_REQUIRE([gcc_SUN_LD_VERSION])dnl +AC_ARG_ENABLE(initfini-array, [ --enable-initfini-array use .init_array/.fini_array sections], [], [ AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support, @@ -427,9 +429,11 @@ int (*fp) (void) __attribute__ ((section (".init_array"))) = foo; .balign 4 .byte 'H', 'H', 'H', 'H' .text +.globl _start +_start: EOF if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \ - && $gcc_cv_ld -e 0 -o conftest conftest.o > /dev/null 2>&1 \ + && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1 \ && $gcc_cv_objdump -s -j .init_array conftest \ | grep HHHHFFFFDDDDBBBB > /dev/null 2>&1 \ && $gcc_cv_objdump -s -j .fini_array conftest \ @@ -442,14 +446,38 @@ changequote([,])dnl fi AC_PREPROC_IFELSE([AC_LANG_SOURCE([ #ifndef __ELF__ -#error Not an ELF OS +# error Not an ELF OS #endif #include <stdlib.h> -#if defined __GLIBC_PREREQ && __GLIBC_PREREQ (2, 4) +#if defined __GLIBC_PREREQ +# if __GLIBC_PREREQ (2, 4) +# else +# error GLIBC 2.4 required +# endif #else -#error The C library not known to support .init_array/.fini_array +# if defined __sun__ && defined __svr4__ + /* Solaris ld.so.1 supports .init_array/.fini_array since Solaris 8. */ +# else +# error The C library not known to support .init_array/.fini_array +# endif #endif -])],, [gcc_cv_initfini_array=no]);; +])],[ + case "${target}" in + *-*-solaris2.8*) + # .init_array/.fini_array support was introduced in Solaris 8 + # patches 109147-08 (sparc) and 109148-08 (x86). Since ld.so.1 and + # ld are guaranteed to be updated in lockstep, we can check ld -V + # instead. Unfortunately, proper ld version numbers were only + # introduced in rev. -14, so we check for that. + if test "$gcc_cv_sun_ld_vers_minor" -lt 272; then + gcc_cv_initfini_array=no + fi + ;; + *-*-solaris2.9* | *-*-solaris2.1[[0-9]]*) + # .init_array/.fini_array support is present since Solaris 9 FCS. + ;; + esac +], [gcc_cv_initfini_array=no]);; esac else AC_MSG_CHECKING(cross compile... guessing) @@ -458,7 +486,7 @@ changequote([,])dnl enable_initfini_array=$gcc_cv_initfini_array ]) if test $enable_initfini_array = yes; then - AC_DEFINE(HAVE_INITFINI_ARRAY, 1, + AC_DEFINE(HAVE_INITFINI_ARRAY_SUPPORT, 1, [Define .init_array/.fini_array sections are available and working.]) fi]) @@ -569,6 +597,43 @@ if test $[$2] = yes; then $7 fi])]) +dnl gcc_SUN_LD_VERSION +dnl +dnl Determines Sun linker version numbers, setting gcc_cv_sun_ld_vers to +dnl the complete version number and gcc_cv_sun_ld_vers_{major, minor} to +dnl the corresponding fields. +dnl +dnl ld and ld.so.1 are guaranteed to be updated in lockstep, so ld version +dnl numbers can be used in ld.so.1 feature checks even if a different +dnl linker is configured. +dnl +AC_DEFUN([gcc_SUN_LD_VERSION], +[changequote(,)dnl +if test "x${build}" = "x${target}" && test "x${build}" = "x${host}"; then + case "${target}" in + *-*-solaris2*) + # + # Solaris 2 ld -V output looks like this for a regular version: + # + # ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1699 + # + # but test versions add stuff at the end: + # + # ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1701:onnv-ab196087-6931056-03/25/10 + # + gcc_cv_sun_ld_ver=`/usr/ccs/bin/ld -V 2>&1` + if echo "$gcc_cv_sun_ld_ver" | grep 'Solaris Link Editors' > /dev/null; then + gcc_cv_sun_ld_vers=`echo $gcc_cv_sun_ld_ver | sed -n \ + -e 's,^.*: 5\.[0-9][0-9]*-\([0-9]\.[0-9][0-9]*\).*$,\1,p'` + gcc_cv_sun_ld_vers_major=`expr "$gcc_cv_sun_ld_vers" : '\([0-9]*\)'` + gcc_cv_sun_ld_vers_minor=`expr "$gcc_cv_sun_ld_vers" : '[0-9]*\.\([0-9]*\)'` + fi + ;; + esac +fi +changequote([,])dnl +]) + dnl GCC_TARGET_TEMPLATE(KEY) dnl ------------------------ dnl Define KEY as a valid configure key on the target machine. diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index be95913fe49..61dc3bef199 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,574 @@ +2012-03-09 Robert Dewar <dewar@adacore.com> + + * a-direct.adb, comperr.adb, freeze.adb: Minor reformatting. + +2012-03-09 Arnaud Charlet <charlet@adacore.com> + + * s-taskin.adb (Initialize_ATCB): Set Task_Image_Len to + 0 so that we never access this field uninitialized (e.g. in + Task_Primitives.Operations.Enter_Task for the environment task). + +2012-03-09 Vincent Pucci <pucci@adacore.com> + + * exp_ch5.adb (Expand_Iterator_Loop): + Call to Expand_Iterator_Loop_Over_Array added. + (Expand_Iterator_Loop_Over_Array): New routine. Expansion of + "of" iterator loop over arrays. Multidimensional array case added. + +2012-03-09 Eric Botcazou <ebotcazou@adacore.com> + + * uintp.ads: Fix minor pasto in comment. + +2012-03-09 Vasiliy Fofanov <fofanov@adacore.com> + + * a-direct.adb: Do not strip the trailing directory separator + from path, as this is already done inside Normalize_Pathname; + doing it again produces the wrong result on Windows for the + drive's root dir (i.e. "X:\" becomes "X:"). + +2012-03-09 Thomas Quinot <quinot@adacore.com> + + * exp_attr.adb, freeze.adb, sem_attr.adb, aspects.adb, aspects.ads, + sem_ch13.adb, snames.ads-tmpl (Exp_Attr.Expand_N_Attribute_Reference): + Add Attribute_Scalar_Storage_Order. + (Sem_Attr.Analyze_Attribute, Eval_Attribute): Ditto. + (Aspects): Add Aspect_Scalar_Storage_Order (Snames): Add + Name_Scalar_Storage_Order and Attribute_Scalar_Storage_Order. + (Sem_Ch13.Analyze_Attribute_Definition_Clause): Add processing + for Scalar_Storage_Order. + (Freeze): If Scalar_Storage_Order is specified, check that it + is compatible with Bit_Order. + +2012-03-09 Robert Dewar <dewar@adacore.com> + + * s-osinte-linux.ads, sem_util.adb, s-taprop-linux.adb, exp_ch4.adb, + a-strsup.ads, sem_ch6.adb, a-stwisu.ads, exp_ch3.adb, + a-stzsup.ads: Minor reformatting. + +2012-03-09 Thomas Quinot <quinot@adacore.com> + + * s-ransee-vms.adb: Minor reformatting. + +2012-03-09 Arnaud Charlet <charlet@adacore.com> + + * comperr.adb (Delete_SCIL_Files): Fix handling of + N_Package_Renaming_Declaration and N_Generic_Package_Declaration. + +2012-03-09 Javier Miranda <miranda@adacore.com> + + * sem_ch6.adb (Check_Body_To_Inline): In AAMP and VM targets + use frontend inlining at all optimization levels. + * sem_util.adb (Must_Inline): In AAMP and VM targets, given that + there is no inlining support in the backend, use also frontend + inlining when compiling with optimizations enabled. + * exp_ch6.adb (Expand_Call): Minor code reorganization. + +2012-03-09 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/ada-tree.h (TYPE_VAX_FLOATING_POINT_P): Move around. + (TYPE_UNCONSTRAINED_ARRAY): Adjust comment. + * gcc-interface/trans.c (Attribute_to_gnu) <Attr_Pool_Address>: Tidy + up. Add comment and use canonical predicate for thin pointers. + (gnat_to_gnu) <N_Free_Statement>: Tidy up and reorder. Add comment + and use canonical predicate for thin pointers. + * gcc-interface/utils.c (convert_to_fat_pointer): Remove superfluous + 'else' and use standard name. + (convert_to_thin_pointer): Delete. + (convert) <POINTER_TYPE>: Do the difference in sizetype directly and + change obsolete idioms. Do not call above function. + (unchecked_convert): Fix formatting. + * gcc-interface/utils2.c (build_unary_op) <INDIRECT_REF>: In the thin + pointer case, use byte_position to get the field position. + +2012-03-07 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity): Do not set flags on the + DECL node built for a type which has a non-trivial equivalent type. + +2012-03-07 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/gigi.h (rest_of_type_decl_compilation): Delete. + * gcc-interface/decl.c (defer_finalize_level): Likewise. + (defer_finalize_list): Likewise. + (gnat_to_gnu_entity): Delete references to above variables and do not + call rest_of_type_decl_compilation. + (rest_of_type_decl_compilation): Delete. + (rest_of_type_decl_compilation_no_defer): Likewise. + * gcc-interface/utils.c (rest_of_record_type_compilation): Do not call + rest_of_type_decl_compilation. + (create_type_decl): Likewise. + (update_pointer_to): Likewise. + +2012-03-07 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (Identifier_to_gnu): Don't unshare initializer. + (add_decl_expr): Mark external DECLs as used. + * gcc-interface/utils.c (convert) <CONSTRUCTOR>: Copy the vector. + +2012-03-07 Tristan Gingold <gingold@adacore.com> + + * s-ransee-vms.adb: New file. + * gcc-interface/Makefile.in: Use s-ransee-vms.adb on VMS. + * gcc-interface/Make-lang.in: Update dependencies. + +2012-03-07 Bob Duff <duff@adacore.com> + + * rtsfind.ads: Add support for finding Super_String types. + * sem_util.ads, sem_util.adb (Is_Bounded_String): New function + to determine whether a given type is a bounded string type. + (Is_Fully_Initialized_Type): Return True for bounded + string types, to suppress bogus warnings. + * exp_ch4.adb (Expand_Composite_Equality): Special case for bounded + strings: equality composes. This allows us to remove default values in + super strings. + * a-strsup.ads, a-stwisu.ads, a-stzsup.ads: Update comments. + * exp_ch3.adb (Expand_Freeze_Record_Type): Comment. + +2012-03-07 Robert Dewar <dewar@adacore.com> + + * sem_util.adb, exp_ch4.adb, exp_ch6.adb, sem_ch6.adb: Minor + reformatting. + +2012-03-07 Sergey Rybin <rybin@adacore.com frybin> + + * gnat_ugn.texi: gnatpp: fix paragraph about sources with + preprocessor directives. + +2012-03-07 Arnaud Charlet <charlet@adacore.com> + + * s-osinte-linux.ads, s-taprop-linux.adb (prctl): New function. + (Enter_Task): Call prctl when relevant. + +2012-03-07 Tristan Gingold <gingold@adacore.com> + + * s-osinte-vms.ads: pthread_mutex_setname_np: new function. + +2012-03-07 Ed Schonberg <schonberg@adacore.com> + + * sem_ch6.adb (Process_Formals): a generic subprogram with + a formal incomplete type does not require a freeze node. + +2012-03-07 Bob Duff <duff@adacore.com> + + * sem_util.ads: Minor reformatting. + +2012-03-07 Geert Bosch <bosch@adacore.com> + + * targparm.ads: New target parameter Atomic_Sync_Default, + defaulting to True. + * targparm.adb (Get_Target_Parameters): Add processing for + Atomic_Sync_Default. + * gnat1drv.adb (Adjust_Global_Switches): Adjust Supress_Options + based on ASD. + +2012-03-07 Javier Miranda <miranda@adacore.com> + + * sem_ch3.adb (Analyze_Object_Declaration): If the object + declaration has an init expression then stop the analysis of the + object declaration if the expression which initializes the object + is a call to an inlined function which returns an unconstrained + and has been expanded into a procedure call. + * sem_ch5.adb (Has_Call_Using_Secondary_Stack): Add missing + support to handle selected components. + * sem_ch6.ads (Cannot_Inline): Adding parameter Is_Serious plus + documentation. + * sem_ch6.adb (Check_And_Build_Body_To_Inline): New + subprogram which implements the checks required by the + new rules for frontend inlining and builds the body to inline. + (Analyze_Subprogram_Body_Helper): Move code that + checks inlining of subprogram that has nested subprogram + to Check_And_Build_Body_To_Inline. Replace call to + Build_Body_To_Inline by call to the new subprogram + Check_And_Build_Body_To_Inline. + (Cannot_Inline): New implementation. + * sem_ch12.adb (Analyze_Package_Instantiation.Must_Inline_Subp): + New subprogram. + * sem_util.ad[sb] (Must_Inline): New subprogram. + (Returns_Unconstrained_Type): New subprogram. + * sem_res.adb (Resolve_Call): Do not create a transient scope + for inlined calls. + * inline.ads (Analyzing_Inlined_Bodies): Remove unreferenced variable. + * inline.adb (Analyze_Inlined_Bodies, Initialize): Remove setting + to false the variable Analyzing_Inlined_Bodies. Fix comments. + * exp_ch4.adb (Expand_N_Allocator): Fix handling of finalization master. + * exp_ch6.ads (List_Inlining_Info): New subprogram. + * exp_ch6.adb (Expand_Call.Do_Inline): New subprogram. + (Expand_Call.Do_Inline_Always): New subprogram. + (In_Unfrozen_Instance): Move the declaration of this subprogram. + (Expand_Inlined_Call.Reset_Dispatching_Calls): New subprogram. + (Expand_Inlined_Call): Adding new support for inlining functions + that return unconstrained types. + (List_Inlining_Info): New subprogram. + * debug.adb Document flags -gnatd.j and -gnatd.k + * gnat1drv.adb Add call to generate the new listing of inlined + calls and calls passed to the backend. + +2012-03-07 Robert Dewar <dewar@adacore.com> + + * sem_ch5.adb, s-vaflop.adb, s-taprop-vms.adb, exp_ch6.adb, + s-gearop.adb, sem_ch6.adb, g-trasym.adb: Minor reformatting. + +2012-03-07 Javier Miranda <miranda@adacore.com> + + * a-ngrear.ads: Add documentation. + +2012-03-07 Tristan Gingold <gingold@adacore.com> + + * s-taprop-vms.adb (Create_Task): set thread name. + * s-osinte-vms.ads (pthread_attr_setname_np): Declare. + +2012-03-07 Arnaud Charlet <charlet@adacore.com> + + * g-trasym.adb: Minor reformatting. + +2012-03-07 Robert Dewar <dewar@adacore.com> + + * a-ngrear.ads: Minor addition of ??? comment. + +2012-03-07 Gary Dismukes <dismukes@adacore.com> + + * exp_ch4.adb (Apply_Accessibility_Check): Call + Remove_Side_Effects in the build-in-place case, to ensure that + we capture the call and don't end up with two calls. + +2012-03-07 Javier Miranda <miranda@adacore.com> + + * exp_ch6.adb (Expand_Inlined_Call): Skip inlining of functions + that return unconstrained types using an extended return statement + since the support for inlining these functions has not been yet + added to the frontend. + * s-vaflop.adb, s-vaflop-vms-alpha.adb: Code reorganization. + * a-ngrear.ads: Replace all the Inline_Always pragmas by pragma + Inline. + * a-ngrear.adb (Eigenvalues, Transpose): Restructured to use + extended return statement. + * a-strsup.adb, a-stzsup.adb, a-stwisu.adb (Concat, Super_Slice, + Super_To_String): Restructured to use extended return statement. + * a-chahan.adb (To_Basic, To_Lower, To_Upper): Restructured to + use extended return statement. + * s-gearop.adb (Diagonal, Matrix_Elementwise_Operation, + Vector_Elementwise_Operation, Matrix_Elementwise_Operation, + Matrix_Matrix_Scalar_Elementwise_Operation, + Vector_Vector_Elementwise_Operation, + Vector_Vector_Scalar_Elementwise_Operation, + Matrix_Scalar_Elementwise_Operation, + Vector_Scalar_Elementwise_Operation, + Scalar_Matrix_Elementwise_Operation, + Scalar_Vector_Elementwise_Operation, Matrix_Matrix_Product, + Matrix_Vector_Product, Outer_Product, Unit_Matrix, Unit_Vector, + Vector_Matrix_Product): Restructured to use extended return + statement. + +2012-03-07 Vincent Pucci <pucci@adacore.com> + + * sem_ch5.adb (One_Bound): Minor reformatting. + +2012-03-07 Tristan Gingold <gingold@adacore.com> + + * s-osinte-vms-ia64.adb, s-osinte-vms-ia64.ads, s-osinte-vms.adb, + s-osinte-vms.ads, gcc-interface/Makefile.in: Merge s-osinte-vms and + s-osinte-vms-ia64. + +2012-03-07 Ed Schonberg <schonberg@adacore.com> + + * checks.adb (Apply_Predicate_Check): Do not generate a predicate + check is the context is an internally generated type-specific + function. + * sem_ch6.adb (Process_PPCs); the formals of internally generated + type-specific functions do not get assertion checks. + +2012-03-07 Yannick Moy <moy@adacore.com> + + * gnat_rm.texi: Minor renaming of title. + * gnat_ugn.texi: Minor correction. + +2012-03-07 Vincent Pucci <pucci@adacore.com> + + * exp_ch4.adb (Expand_N_Quantified_Expression): Minor + reformating. + * sem_ch4.adb (Analyze_Quantified_Expression): Creation and + analysis of the iteration scheme added in all cases. + * sem_ch5.adb (Analyze_Iteration_Scheme): Minor reformating. + (Analyze_Iterator_Specification): Minor reformating. + * sem_res.adb (Resolve_Quantified_Expression): Resolution of + the condition added in all cases. + +2012-03-07 Thomas Quinot <quinot@adacore.com> + + * einfo.adb, einfo.ads: Add flag Reverse_Storage_Order. + +2012-03-07 Yannick Moy <moy@adacore.com> + + * gnat_rm.texi, gnat_ugn.texi: Rewording of GNAT UG and GNAT RM to + account for Ada 2012 assertions, and their pragma counterparts in GNAT. + +2012-03-07 Thomas Quinot <quinot@adacore.com> + + * exp_attr.adb, sem_attr.adb: Minor reformatting. + +2012-03-07 Bob Duff <duff@adacore.com> + + * hostparm.ads (Max_Instantiations): Increase parameter. + +2012-03-07 Bob Duff <duff@adacore.com> + + * par-prag.adb: Minor code rearrangement. + +2012-03-07 Bob Duff <duff@adacore.com> + + * a-strsup.ads, a-stwisu.ads, a-stzsup.ads (Super_String): + Remove default initial value for Data. It is no longer needed + because "=" now composes properly for untagged records. This + default has caused efficiency problems. + +2012-03-07 Ed Schonberg <schonberg@adacore.com> + + * sem_res.adb (Resolve_Actuals): If the actual is a selected + component of an anonymous access type, whose prefix is a variable, + treat the variable as if it may be modified by the call, to + suppress spurious warnings that a variable might be declared as + a constant. + +2012-03-07 Thomas Quinot <quinot@adacore.com> + + * einfo.adb, einfo.ads: Remove unused entity flags. + +2012-03-07 Eric Botcazou <ebotcazou@adacore.com> + + * gnat_ugn.texi (Inline Assembler): Fix swapping of Input and + Output operands throughout. + +2012-03-07 Hristian Kirtchev <kirtchev@adacore.com> + + * sem_ch12.adb (Earlier): When two nodes come from the same + generic instantiation, compare their locations. Otherwise always + use the top level locations of the nodes. + +2012-03-07 Thomas Quinot <quinot@adacore.com> + + * einfo.ads, sem_prag.adb: Minor reformatting. + +2012-03-05 Jason Merrill <jason@redhat.com> + + * gcc-interface/Make-lang.in (doc/gnat_ugn.texi): Build xgnatugn + before using it. + +2012-03-04 Eric Botcazou <ebotcazou@adacore.com> + + * gnatvsn.ads (Library_Version): Bump to 4.8. + +2012-03-03 H.J. Lu <hongjiu.lu@intel.com> + + * init.c (__gnat_adjust_context_for_raise): Also check + "orq $0x0,(%esp)" for x32. + + * link.c (__gnat_default_libgcc_subdir): Set to libx32 for x32. + + * gcc-interface/Makefile.in (arch): Set to x32 if MULTISUBDIR + is /x32 and add support for x32. + +2012-02-29 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (components_to_record): Add ARTIFICIAL parameter + and set TYPE_ARTIFICIAL according to it. Adjust recursive call. + (gnat_to_gnu_entity) <E_Record_Type>: Adjust call to above function. + * gcc-interface/utils.c (rest_of_record_type_compilation): Do not + invoke rest_of_type_decl_compilation on the parallel type, if any. + +2012-02-29 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/utils.c (gnat_write_global_declarations): Make sure the + dummy global built for global types is preserved. + +2012-02-27 Tristan Gingold <gingold@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity) [E_String_Type, + E_Array_Type]: Reuse dummy fat type for gnu_ptr_template and + gnu_template_type. + +2012-02-27 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/ada-tree.h (TYPE_PACKED_ARRAY_TYPE_P): Add checking. + (TYPE_BY_REFERENCE_P): New flag. + (TYPE_IS_BY_REFERENCE_P): New macro. + (TYPE_DUMMY_P): Add checking and remove VOID_TYPE. + (TYPE_IS_DUMMY_P): Adjust for above change. + * gcc-interface/decl.c (gnat_to_gnu_entity): Use TYPE_BY_REFERENCE_P + and TYPE_IS_BY_REFERENCE_P instead of TREE_ADDRESSABLE. + (gnat_to_gnu_param): Likewise. + (maybe_pad_type): Likewise. + (make_type_from_size): Use TYPE_IS_PACKED_ARRAY_TYPE_P. + * gcc-interface/misc.c (must_pass_by_ref): Use TYPE_IS_BY_REFERENCE_P + instead of TREE_ADDRESSABLE. + * gcc-interface/trans.c (finalize_nrv): Likewise. + (call_to_gnu): Likewise. Do not create a temporary for return values + with by-reference type here. + (gnat_to_gnu): Test TYPE_IS_DUMMY_P instead of TYPE_DUMMY_P. + (gnat_gimplify_expr) <ADDR_EXPR>: Don't do anything for non-constant + CONSTRUCTORs and calls. + * gcc-interface/utils.c (make_dummy_type): Get the equivalent type of + the underlying type and use it throughout. Use TYPE_IS_BY_REFERENCE_P + instead of TREE_ADDRESSABLE. + * gcc-interface/utils2.c (build_cond_expr): Deal with by-reference + types explicitly. + +2012-02-27 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity) <object>: Revert previous + change that creates a special VAR_DECL for debugging purposes. For an + aliased object with an unconstrained nominal subtype, make its type a + thin reference to the underlying object. + * gcc-interface/utils2.c (build_unary_op) <INDIRECT_REF>: Deal with + expressions built for the initialization of above objects. + +2012-02-24 Dave Korn <dave.korn.cygwin@gmail.com> + + * gcc-interface/Makefile.in (WIN_SO_PREFIX [windows targets]): New + Windows-specific make variable. + (WIN_SO_INSTALL_DIR [windows targets]): Likewise. + (install-gnatlib): Respect the above during installation when set, + and also install any windows import library that has been built. + (gnatlib-shared-win32): Use WIN_SO_PREFIX to name output DLL and also + build a corresponding import library. + +2012-02-22 Robert Dewar <dewar@adacore.com> + + * exp_util.adb, make.adb, sem_dim.adb, sem_ch4.adb, exp_disp.adb: Minor + reformatting. + +2012-02-22 Geert Bosch <bosch@adacore.com> + + * g-bytswa-x86.adb, g-bytswa.adb, gcc-interface/Makefile.in: Remove + x86-specific version of byteswap and use GCC builtins instead. + +2012-02-22 Tristan Gingold <gingold@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity) [E_String_Type, + E_Array_Type]: Translate component ealier. + +2012-02-22 Robert Dewar <dewar@adacore.com> + + * par-ch3.adb (P_Signed_Integer_Type_Definition): Specialize + error message for 'Range. + +2012-02-22 Pascal Obry <obry@adacore.com> + + * s-taprop-mingw.adb (Finalize_TCB): Do not wait on thread handle as + this is our own thread. + +2012-02-22 Sergey Rybin <rybin@adacore.com frybin> + + * tree_io.ads: Update ASIS_Version_Number because of the changes + in Snames. + +2012-02-22 Hristian Kirtchev <kirtchev@adacore.com> + + * exp_ch7.adb (Create_Finalizer): Suppress elaboration checks on + stack-related finalizers. + +2012-02-22 Ed Schonberg <schonberg@adacore.com> + + * sem_ch6.adb (Analyze_Expression_Function): If the construct + is a completion, indicate that its formals are the formals of + a completion, and as such do not get a cross- reference entry. + (Analyze_Subprogram_Specification): Do not generate a definition + for the entity of an expression function, because it may be a + completion. Definition will be generated if needed when analyzing + the generated subprogram declaration. + +2012-02-22 Vincent Celier <celier@adacore.com> + + * make.adb (Check): When checking if an object file is in the + correct object directory, get the unit name from a previous call + to Check_Source_Info_In_ALI. + * makeutl.adb (Check_Source_Info_In_ALI): Return the name of + the unit when everything is OK, otherwise return No_Name. + * makeutl.ads (Check_Source_Info_In_ALI): Return Name_Id instead + of Boolean + +2012-02-22 Ed Schonberg <schonberg@adacore.com> + + * sem_ch4.adb (Find_Equality_Types, Try_One_Interp): In an + instance, the operator is visible if an operand is of some + numeric type which is not in use or directly visible, and the + other operand is a numeric literal. + +2012-02-22 Tristan Gingold <gingold@adacore.com> + + * init.c: Minor code clean up. + * gcc-interface/Make-lang.in: Update dependencies. + +2012-02-22 Arnaud Charlet <charlet@adacore.com> + + * gnatlink.adb (Gnatlink): Use -gnatcC in CodePeer_Node, + otherwise GCC will generate an object file. + +2012-02-22 Vincent Celier <celier@adacore.com> + + * projects.texi: Correct typo related to "**" in Source_Dirs. + +2012-02-22 Steve Baird <baird@adacore.com> + + * sem_prag.adb (Analyze_PPC_In_Decl_Part): Clean up generation of + error message text. + +2012-02-22 Vincent Pucci <pucci@adacore.com> + + * rtsfind.adb (Get_Unit_Name): Ada_Numerics_Child and + System_Dim_Child cases added. + * rtsfind.ads: Ada_Numerics, + Ada_Numerics_Generic_Elementary_Functions, System_Dim, + System_Dim_Float_IO and System_Dim_Integer_IO added to the list + of RTU_Id. Ada_Numerics_Child and System_Dim_Child added as + new RTU_Id subtypes. + * sem_dim.adb (Is_Dim_IO_Package_Entity): Use of + Rtsfind to verify the package entity is located either + in System.Dim.Integer_IO or in System.Dim.Float_IO. + (Is_Dim_IO_Package_Instantiation): Minor + changes. (Is_Elementary_Function_Call): Removed. + (Is_Elementary_Function_Entity): New routine. + (Is_Procedure_Put_Call): Is_Dim_IO_Package_Entity call added. + * snames.ads-tmpl: Name_Dim and Name_Generic_Elementary_Functions + removed. + +2012-02-22 Vincent Pucci <pucci@adacore.com> + + * sem_prag.adb: Minor reformatting. + +2012-02-22 Ed Schonberg <schonberg@adacore.com> + + * sem_ch3.adb (Find_Type_Name): When analyzing a private type + declaration that is the completion of a tagged incomplete type, do + not associate the class-wide type already created with the private + type to prevent order-of-elaboration issues in the back-end. + * exp_disp.adb (Find_Specific_Type): Find specific type of + a class-wide type, and handle the case of an incomplete type + coming either from a limited_with clause or from an incomplete + type declaration. Used when expanding a dispatchin call and + generating tag checks (minor refactoring). + +2012-02-22 Robert Dewar <dewar@adacore.com> + + * exp_ch5.adb: Add comment. + * sem_ch12.adb, exp_ch6.adb: minor reformatting + +2012-02-22 Ed Schonberg <schonberg@adacore.com> + + * freeze.adb (Freeze_Entity): Do not perform type layout within + a generic unit. + +2012-02-22 Eric Botcazou <ebotcazou@adacore.com> + + * init.c (__gnat_error_handler) [Linux]: Map SIGBUS to + Storage_Error. + +2012-02-22 Ed Schonberg <schonberg@adacore.com> + + * exp_ch5.adb (Expand_N_Assignment_Statement): Reject an + assignment to a classwide type whose type is limited, as + can happen in an instantiation in programs that run afoul or + AI05-0087. + 2012-02-17 Ed Schonberg <schonberg@adacore.com> * exp_ch6.adb (Legal_Copy): If layout is not diff --git a/gcc/ada/a-chahan.adb b/gcc/ada/a-chahan.adb index 61419b090ee..c7a77ea57dc 100644 --- a/gcc/ada/a-chahan.adb +++ b/gcc/ada/a-chahan.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -422,14 +422,12 @@ package body Ada.Characters.Handling is end To_Basic; function To_Basic (Item : String) return String is - Result : String (1 .. Item'Length); - begin - for J in Item'Range loop - Result (J - (Item'First - 1)) := Value (Basic_Map, Item (J)); - end loop; - - return Result; + return Result : String (1 .. Item'Length) do + for J in Item'Range loop + Result (J - (Item'First - 1)) := Value (Basic_Map, Item (J)); + end loop; + end return; end To_Basic; ------------------ @@ -485,14 +483,12 @@ package body Ada.Characters.Handling is end To_Lower; function To_Lower (Item : String) return String is - Result : String (1 .. Item'Length); - begin - for J in Item'Range loop - Result (J - (Item'First - 1)) := Value (Lower_Case_Map, Item (J)); - end loop; - - return Result; + return Result : String (1 .. Item'Length) do + for J in Item'Range loop + Result (J - (Item'First - 1)) := Value (Lower_Case_Map, Item (J)); + end loop; + end return; end To_Lower; --------------- @@ -527,14 +523,12 @@ package body Ada.Characters.Handling is function To_Upper (Item : String) return String is - Result : String (1 .. Item'Length); - begin - for J in Item'Range loop - Result (J - (Item'First - 1)) := Value (Upper_Case_Map, Item (J)); - end loop; - - return Result; + return Result : String (1 .. Item'Length) do + for J in Item'Range loop + Result (J - (Item'First - 1)) := Value (Upper_Case_Map, Item (J)); + end loop; + end return; end To_Upper; ----------------------- diff --git a/gcc/ada/a-direct.adb b/gcc/ada/a-direct.adb index e27bb3fdd6d..903440b11f2 100644 --- a/gcc/ada/a-direct.adb +++ b/gcc/ada/a-direct.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2004-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -514,18 +514,10 @@ package body Ada.Directories is begin Local_Get_Current_Dir (Buffer'Address, Path_Len'Address); - declare - -- We need to resolve links because of A.16(47), since we must not - -- return alternative names for files - Cur : constant String := Normalize_Pathname (Buffer (1 .. Path_Len)); + -- We need to resolve links because of RM A.16(47), which requires + -- that we not return alternative names for files. - begin - if Cur'Length > 1 and then Cur (Cur'Last) = Dir_Separator then - return Cur (1 .. Cur'Last - 1); - else - return Cur; - end if; - end; + return Normalize_Pathname (Buffer (1 .. Path_Len)); end Current_Directory; ---------------------- diff --git a/gcc/ada/a-ngrear.adb b/gcc/ada/a-ngrear.adb index 2a740b5c6b4..68d536513ad 100644 --- a/gcc/ada/a-ngrear.adb +++ b/gcc/ada/a-ngrear.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2006-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 2006-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -482,12 +482,15 @@ package body Ada.Numerics.Generic_Real_Arrays is ----------------- function Eigenvalues (A : Real_Matrix) return Real_Vector is - Values : Real_Vector (A'Range (1)); - Vectors : Real_Matrix (1 .. 0, 1 .. 0); begin - Jacobi (A, Values, Vectors, Compute_Vectors => False); - Sort_Eigensystem (Values, Vectors); - return Values; + return Values : Real_Vector (A'Range (1)) do + declare + Vectors : Real_Matrix (1 .. 0, 1 .. 0); + begin + Jacobi (A, Values, Vectors, Compute_Vectors => False); + Sort_Eigensystem (Values, Vectors); + end; + end return; end Eigenvalues; ------------- @@ -742,10 +745,10 @@ package body Ada.Numerics.Generic_Real_Arrays is --------------- function Transpose (X : Real_Matrix) return Real_Matrix is - R : Real_Matrix (X'Range (2), X'Range (1)); begin - Transpose (X, R); - return R; + return R : Real_Matrix (X'Range (2), X'Range (1)) do + Transpose (X, R); + end return; end Transpose; ----------------- diff --git a/gcc/ada/a-ngrear.ads b/gcc/ada/a-ngrear.ads index f244d6519ce..2f38b9051eb 100644 --- a/gcc/ada/a-ngrear.ads +++ b/gcc/ada/a-ngrear.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2009, Free Software Foundation, Inc. -- +-- Copyright (C) 2009-2012, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -122,18 +122,21 @@ private -- The following operations are either relatively simple compared to the -- expense of returning unconstrained arrays, or are just function wrappers -- calling procedures implementing the actual operation. By having the - -- front end always inline these, the expense of the unconstrained returns + -- front end inline these, the expense of the unconstrained returns -- can be avoided. - pragma Inline_Always ("+"); - pragma Inline_Always ("-"); - pragma Inline_Always ("*"); - pragma Inline_Always ("/"); - pragma Inline_Always ("abs"); - pragma Inline_Always (Eigenvalues); - pragma Inline_Always (Inverse); - pragma Inline_Always (Solve); - pragma Inline_Always (Transpose); - pragma Inline_Always (Unit_Matrix); - pragma Inline_Always (Unit_Vector); + -- Note: We use an extended return statement in their implementation to + -- allow the frontend to inline these functions. + + pragma Inline ("+"); + pragma Inline ("-"); + pragma Inline ("*"); + pragma Inline ("/"); + pragma Inline ("abs"); + pragma Inline (Eigenvalues); + pragma Inline (Inverse); + pragma Inline (Solve); + pragma Inline (Transpose); + pragma Inline (Unit_Matrix); + pragma Inline (Unit_Vector); end Ada.Numerics.Generic_Real_Arrays; diff --git a/gcc/ada/a-strsup.adb b/gcc/ada/a-strsup.adb index 707d9ec7055..ed14e58964c 100644 --- a/gcc/ada/a-strsup.adb +++ b/gcc/ada/a-strsup.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -42,100 +42,107 @@ package body Ada.Strings.Superbounded is (Left : Super_String; Right : Super_String) return Super_String is - Result : Super_String (Left.Max_Length); - Llen : constant Natural := Left.Current_Length; - Rlen : constant Natural := Right.Current_Length; - Nlen : constant Natural := Llen + Rlen; - begin - if Nlen > Left.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Nlen; - Result.Data (1 .. Llen) := Left.Data (1 .. Llen); - Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen); - end if; + return Result : Super_String (Left.Max_Length) do + declare + Llen : constant Natural := Left.Current_Length; + Rlen : constant Natural := Right.Current_Length; + Nlen : constant Natural := Llen + Rlen; + begin + if Nlen > Left.Max_Length then + raise Ada.Strings.Length_Error; + end if; - return Result; + Result.Current_Length := Nlen; + Result.Data (1 .. Llen) := Left.Data (1 .. Llen); + Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen); + end; + end return; end Concat; function Concat (Left : Super_String; Right : String) return Super_String is - Result : Super_String (Left.Max_Length); - Llen : constant Natural := Left.Current_Length; - - Nlen : constant Natural := Llen + Right'Length; - begin - if Nlen > Left.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Nlen; - Result.Data (1 .. Llen) := Left.Data (1 .. Llen); - Result.Data (Llen + 1 .. Nlen) := Right; - end if; - return Result; + return Result : Super_String (Left.Max_Length) do + declare + Llen : constant Natural := Left.Current_Length; + Nlen : constant Natural := Llen + Right'Length; + begin + if Nlen > Left.Max_Length then + raise Ada.Strings.Length_Error; + end if; + + Result.Current_Length := Nlen; + Result.Data (1 .. Llen) := Left.Data (1 .. Llen); + Result.Data (Llen + 1 .. Nlen) := Right; + end; + end return; end Concat; function Concat (Left : String; Right : Super_String) return Super_String is - Result : Super_String (Right.Max_Length); - Llen : constant Natural := Left'Length; - Rlen : constant Natural := Right.Current_Length; - Nlen : constant Natural := Llen + Rlen; begin - if Nlen > Right.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Nlen; - Result.Data (1 .. Llen) := Left; - Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen); - end if; + return Result : Super_String (Right.Max_Length) do + declare + Llen : constant Natural := Left'Length; + Rlen : constant Natural := Right.Current_Length; + Nlen : constant Natural := Llen + Rlen; + begin + if Nlen > Right.Max_Length then + raise Ada.Strings.Length_Error; + end if; - return Result; + Result.Current_Length := Nlen; + Result.Data (1 .. Llen) := Left; + Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen); + end; + end return; end Concat; function Concat (Left : Super_String; Right : Character) return Super_String is - Result : Super_String (Left.Max_Length); - Llen : constant Natural := Left.Current_Length; - begin - if Llen = Left.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Llen + 1; - Result.Data (1 .. Llen) := Left.Data (1 .. Llen); - Result.Data (Result.Current_Length) := Right; - end if; + return Result : Super_String (Left.Max_Length) do + declare + Llen : constant Natural := Left.Current_Length; + begin + if Llen = Left.Max_Length then + raise Ada.Strings.Length_Error; + end if; - return Result; + Result.Current_Length := Llen + 1; + Result.Data (1 .. Llen) := Left.Data (1 .. Llen); + Result.Data (Result.Current_Length) := Right; + end; + end return; end Concat; function Concat (Left : Character; Right : Super_String) return Super_String is - Result : Super_String (Right.Max_Length); - Rlen : constant Natural := Right.Current_Length; - begin - if Rlen = Right.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Rlen + 1; - Result.Data (1) := Left; - Result.Data (2 .. Result.Current_Length) := Right.Data (1 .. Rlen); - end if; + return Result : Super_String (Right.Max_Length) do + declare + Rlen : constant Natural := Right.Current_Length; + begin + if Rlen = Right.Max_Length then + raise Ada.Strings.Length_Error; + end if; - return Result; + Result.Current_Length := Rlen + 1; + Result.Data (1) := Left; + Result.Data (2 .. Result.Current_Length) := + Right.Data (1 .. Rlen); + end; + end return; end Concat; ----------- @@ -1459,13 +1466,15 @@ package body Ada.Strings.Superbounded is begin -- Note: test of High > Length is in accordance with AI95-00128 - if Low > Source.Current_Length + 1 - or else High > Source.Current_Length - then - raise Index_Error; - else - return Source.Data (Low .. High); - end if; + return R : String (Low .. High) do + if Low > Source.Current_Length + 1 + or else High > Source.Current_Length + then + raise Index_Error; + end if; + + R := Source.Data (Low .. High); + end return; end Super_Slice; function Super_Slice @@ -1473,19 +1482,17 @@ package body Ada.Strings.Superbounded is Low : Positive; High : Natural) return Super_String is - Result : Super_String (Source.Max_Length); - begin - if Low > Source.Current_Length + 1 - or else High > Source.Current_Length - then - raise Index_Error; - else + return Result : Super_String (Source.Max_Length) do + if Low > Source.Current_Length + 1 + or else High > Source.Current_Length + then + raise Index_Error; + end if; + Result.Current_Length := High - Low + 1; Result.Data (1 .. Result.Current_Length) := Source.Data (Low .. High); - end if; - - return Result; + end return; end Super_Slice; procedure Super_Slice @@ -1615,7 +1622,9 @@ package body Ada.Strings.Superbounded is function Super_To_String (Source : Super_String) return String is begin - return Source.Data (1 .. Source.Current_Length); + return R : String (1 .. Source.Current_Length) do + R := Source.Data (1 .. Source.Current_Length); + end return; end Super_To_String; --------------------- diff --git a/gcc/ada/a-strsup.ads b/gcc/ada/a-strsup.ads index c88c563d3d6..d43a560a543 100644 --- a/gcc/ada/a-strsup.ads +++ b/gcc/ada/a-strsup.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2003-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -41,12 +41,17 @@ with Ada.Strings.Maps; package Ada.Strings.Superbounded is pragma Preelaborate; + -- Type Bounded_String in Ada.Strings.Bounded.Generic_Bounded_Length is + -- derived from Super_String, with the constraint of the maximum length. + type Super_String (Max_Length : Positive) is record Current_Length : Natural := 0; - Data : String (1 .. Max_Length) := (others => ASCII.NUL); + Data : String (1 .. Max_Length); + -- A previous version had a default initial value for Data, which is + -- no longer necessary, because we now special-case this type in the + -- compiler, so "=" composes properly for descendants of this type. + -- Leaving it out is more efficient. end record; - -- Type Bounded_String in Ada.Strings.Bounded.Generic_Bounded_Length is - -- derived from this type, with the constraint of the maximum length. -- The subprograms defined for Super_String are similar to those -- defined for Bounded_String, except that they have different names, so diff --git a/gcc/ada/a-stwisu.adb b/gcc/ada/a-stwisu.adb index 2ffae814682..10c2b237b8f 100644 --- a/gcc/ada/a-stwisu.adb +++ b/gcc/ada/a-stwisu.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -42,100 +42,111 @@ package body Ada.Strings.Wide_Superbounded is (Left : Super_String; Right : Super_String) return Super_String is - Result : Super_String (Left.Max_Length); - Llen : constant Natural := Left.Current_Length; - Rlen : constant Natural := Right.Current_Length; - Nlen : constant Natural := Llen + Rlen; - begin - if Nlen > Left.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Nlen; - Result.Data (1 .. Llen) := Left.Data (1 .. Llen); - Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen); - end if; + return Result : Super_String (Left.Max_Length) do + declare + Llen : constant Natural := Left.Current_Length; + Rlen : constant Natural := Right.Current_Length; + Nlen : constant Natural := Llen + Rlen; - return Result; + begin + if Nlen > Left.Max_Length then + raise Ada.Strings.Length_Error; + else + Result.Current_Length := Nlen; + Result.Data (1 .. Llen) := Left.Data (1 .. Llen); + Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen); + end if; + end; + end return; end Concat; function Concat (Left : Super_String; Right : Wide_String) return Super_String is - Result : Super_String (Left.Max_Length); - Llen : constant Natural := Left.Current_Length; - - Nlen : constant Natural := Llen + Right'Length; - begin - if Nlen > Left.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Nlen; - Result.Data (1 .. Llen) := Left.Data (1 .. Llen); - Result.Data (Llen + 1 .. Nlen) := Right; - end if; - return Result; + return Result : Super_String (Left.Max_Length) do + declare + Llen : constant Natural := Left.Current_Length; + Nlen : constant Natural := Llen + Right'Length; + + begin + if Nlen > Left.Max_Length then + raise Ada.Strings.Length_Error; + else + Result.Current_Length := Nlen; + Result.Data (1 .. Llen) := Left.Data (1 .. Llen); + Result.Data (Llen + 1 .. Nlen) := Right; + end if; + end; + end return; end Concat; function Concat (Left : Wide_String; Right : Super_String) return Super_String is - Result : Super_String (Right.Max_Length); - Llen : constant Natural := Left'Length; - Rlen : constant Natural := Right.Current_Length; - Nlen : constant Natural := Llen + Rlen; - begin - if Nlen > Right.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Nlen; - Result.Data (1 .. Llen) := Left; - Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen); - end if; + return Result : Super_String (Right.Max_Length) do + declare + Llen : constant Natural := Left'Length; + Rlen : constant Natural := Right.Current_Length; + Nlen : constant Natural := Llen + Rlen; - return Result; + begin + if Nlen > Right.Max_Length then + raise Ada.Strings.Length_Error; + else + Result.Current_Length := Nlen; + Result.Data (1 .. Llen) := Left; + Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen); + end if; + end; + end return; end Concat; function Concat (Left : Super_String; Right : Wide_Character) return Super_String is - Result : Super_String (Left.Max_Length); - Llen : constant Natural := Left.Current_Length; - begin - if Llen = Left.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Llen + 1; - Result.Data (1 .. Llen) := Left.Data (1 .. Llen); - Result.Data (Result.Current_Length) := Right; - end if; + return Result : Super_String (Left.Max_Length) do + declare + Llen : constant Natural := Left.Current_Length; - return Result; + begin + if Llen = Left.Max_Length then + raise Ada.Strings.Length_Error; + else + Result.Current_Length := Llen + 1; + Result.Data (1 .. Llen) := Left.Data (1 .. Llen); + Result.Data (Result.Current_Length) := Right; + end if; + end; + end return; end Concat; function Concat (Left : Wide_Character; Right : Super_String) return Super_String is - Result : Super_String (Right.Max_Length); - Rlen : constant Natural := Right.Current_Length; - begin - if Rlen = Right.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Rlen + 1; - Result.Data (1) := Left; - Result.Data (2 .. Result.Current_Length) := Right.Data (1 .. Rlen); - end if; + return Result : Super_String (Right.Max_Length) do + declare + Rlen : constant Natural := Right.Current_Length; - return Result; + begin + if Rlen = Right.Max_Length then + raise Ada.Strings.Length_Error; + else + Result.Current_Length := Rlen + 1; + Result.Data (1) := Left; + Result.Data (2 .. Result.Current_Length) := + Right.Data (1 .. Rlen); + end if; + end; + end return; end Concat; ----------- @@ -1462,13 +1473,15 @@ package body Ada.Strings.Wide_Superbounded is begin -- Note: test of High > Length is in accordance with AI95-00128 - if Low > Source.Current_Length + 1 - or else High > Source.Current_Length - then - raise Index_Error; - else - return Source.Data (Low .. High); - end if; + return R : Wide_String (Low .. High) do + if Low > Source.Current_Length + 1 + or else High > Source.Current_Length + then + raise Index_Error; + end if; + + R := Source.Data (Low .. High); + end return; end Super_Slice; function Super_Slice @@ -1476,19 +1489,17 @@ package body Ada.Strings.Wide_Superbounded is Low : Positive; High : Natural) return Super_String is - Result : Super_String (Source.Max_Length); - begin - if Low > Source.Current_Length + 1 - or else High > Source.Current_Length - then - raise Index_Error; - else + return Result : Super_String (Source.Max_Length) do + if Low > Source.Current_Length + 1 + or else High > Source.Current_Length + then + raise Index_Error; + end if; + Result.Current_Length := High - Low + 1; Result.Data (1 .. Result.Current_Length) := Source.Data (Low .. High); - end if; - - return Result; + end return; end Super_Slice; procedure Super_Slice @@ -1618,7 +1629,9 @@ package body Ada.Strings.Wide_Superbounded is function Super_To_String (Source : Super_String) return Wide_String is begin - return Source.Data (1 .. Source.Current_Length); + return R : Wide_String (1 .. Source.Current_Length) do + R := Source.Data (1 .. Source.Current_Length); + end return; end Super_To_String; --------------------- diff --git a/gcc/ada/a-stwisu.ads b/gcc/ada/a-stwisu.ads index 0390031f3da..e2f3c570040 100644 --- a/gcc/ada/a-stwisu.ads +++ b/gcc/ada/a-stwisu.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2003-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -44,12 +44,17 @@ package Ada.Strings.Wide_Superbounded is Wide_NUL : constant Wide_Character := Wide_Character'Val (0); + -- Ada.Strings.Wide_Bounded.Generic_Bounded_Length.Wide_Bounded_String is + -- derived from Super_String, with the constraint of the maximum length. + type Super_String (Max_Length : Positive) is record Current_Length : Natural := 0; - Data : Wide_String (1 .. Max_Length) := (others => Wide_NUL); + Data : Wide_String (1 .. Max_Length); + -- A previous version had a default initial value for Data, which is + -- no longer necessary, because we now special-case this type in the + -- compiler, so "=" composes properly for descendants of this type. + -- Leaving it out is more efficient. end record; - -- Ada.Strings.Wide_Bounded.Generic_Bounded_Length.Wide_Bounded_String is - -- derived from this type, with the constraint of the maximum length. -- The subprograms defined for Super_String are similar to those defined -- for Bounded_Wide_String, except that they have different names, so that diff --git a/gcc/ada/a-stzsup.adb b/gcc/ada/a-stzsup.adb index efad7b0f8c7..a79dfa0cce5 100644 --- a/gcc/ada/a-stzsup.adb +++ b/gcc/ada/a-stzsup.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2003-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -42,100 +42,111 @@ package body Ada.Strings.Wide_Wide_Superbounded is (Left : Super_String; Right : Super_String) return Super_String is - Result : Super_String (Left.Max_Length); - Llen : constant Natural := Left.Current_Length; - Rlen : constant Natural := Right.Current_Length; - Nlen : constant Natural := Llen + Rlen; - begin - if Nlen > Left.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Nlen; - Result.Data (1 .. Llen) := Left.Data (1 .. Llen); - Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen); - end if; + return Result : Super_String (Left.Max_Length) do + declare + Llen : constant Natural := Left.Current_Length; + Rlen : constant Natural := Right.Current_Length; + Nlen : constant Natural := Llen + Rlen; - return Result; + begin + if Nlen > Left.Max_Length then + raise Ada.Strings.Length_Error; + else + Result.Current_Length := Nlen; + Result.Data (1 .. Llen) := Left.Data (1 .. Llen); + Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen); + end if; + end; + end return; end Concat; function Concat (Left : Super_String; Right : Wide_Wide_String) return Super_String is - Result : Super_String (Left.Max_Length); - Llen : constant Natural := Left.Current_Length; - - Nlen : constant Natural := Llen + Right'Length; - begin - if Nlen > Left.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Nlen; - Result.Data (1 .. Llen) := Left.Data (1 .. Llen); - Result.Data (Llen + 1 .. Nlen) := Right; - end if; - return Result; + return Result : Super_String (Left.Max_Length) do + declare + Llen : constant Natural := Left.Current_Length; + Nlen : constant Natural := Llen + Right'Length; + + begin + if Nlen > Left.Max_Length then + raise Ada.Strings.Length_Error; + else + Result.Current_Length := Nlen; + Result.Data (1 .. Llen) := Left.Data (1 .. Llen); + Result.Data (Llen + 1 .. Nlen) := Right; + end if; + end; + end return; end Concat; function Concat (Left : Wide_Wide_String; Right : Super_String) return Super_String is - Result : Super_String (Right.Max_Length); - Llen : constant Natural := Left'Length; - Rlen : constant Natural := Right.Current_Length; - Nlen : constant Natural := Llen + Rlen; - begin - if Nlen > Right.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Nlen; - Result.Data (1 .. Llen) := Left; - Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen); - end if; + return Result : Super_String (Right.Max_Length) do + declare + Llen : constant Natural := Left'Length; + Rlen : constant Natural := Right.Current_Length; + Nlen : constant Natural := Llen + Rlen; - return Result; + begin + if Nlen > Right.Max_Length then + raise Ada.Strings.Length_Error; + else + Result.Current_Length := Nlen; + Result.Data (1 .. Llen) := Left; + Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen); + end if; + end; + end return; end Concat; function Concat (Left : Super_String; Right : Wide_Wide_Character) return Super_String is - Result : Super_String (Left.Max_Length); - Llen : constant Natural := Left.Current_Length; - begin - if Llen = Left.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Llen + 1; - Result.Data (1 .. Llen) := Left.Data (1 .. Llen); - Result.Data (Result.Current_Length) := Right; - end if; + return Result : Super_String (Left.Max_Length) do + declare + Llen : constant Natural := Left.Current_Length; - return Result; + begin + if Llen = Left.Max_Length then + raise Ada.Strings.Length_Error; + else + Result.Current_Length := Llen + 1; + Result.Data (1 .. Llen) := Left.Data (1 .. Llen); + Result.Data (Result.Current_Length) := Right; + end if; + end; + end return; end Concat; function Concat (Left : Wide_Wide_Character; Right : Super_String) return Super_String is - Result : Super_String (Right.Max_Length); - Rlen : constant Natural := Right.Current_Length; - begin - if Rlen = Right.Max_Length then - raise Ada.Strings.Length_Error; - else - Result.Current_Length := Rlen + 1; - Result.Data (1) := Left; - Result.Data (2 .. Result.Current_Length) := Right.Data (1 .. Rlen); - end if; + return Result : Super_String (Right.Max_Length) do + declare + Rlen : constant Natural := Right.Current_Length; - return Result; + begin + if Rlen = Right.Max_Length then + raise Ada.Strings.Length_Error; + else + Result.Current_Length := Rlen + 1; + Result.Data (1) := Left; + Result.Data (2 .. Result.Current_Length) := + Right.Data (1 .. Rlen); + end if; + end; + end return; end Concat; ----------- @@ -1469,13 +1480,15 @@ package body Ada.Strings.Wide_Wide_Superbounded is begin -- Note: test of High > Length is in accordance with AI95-00128 - if Low > Source.Current_Length + 1 - or else High > Source.Current_Length - then - raise Index_Error; - else - return Source.Data (Low .. High); - end if; + return R : Wide_Wide_String (Low .. High) do + if Low > Source.Current_Length + 1 + or else High > Source.Current_Length + then + raise Index_Error; + end if; + + R := Source.Data (Low .. High); + end return; end Super_Slice; function Super_Slice @@ -1483,19 +1496,18 @@ package body Ada.Strings.Wide_Wide_Superbounded is Low : Positive; High : Natural) return Super_String is - Result : Super_String (Source.Max_Length); - begin - if Low > Source.Current_Length + 1 - or else High > Source.Current_Length - then - raise Index_Error; - else - Result.Current_Length := High - Low + 1; - Result.Data (1 .. Result.Current_Length) := Source.Data (Low .. High); - end if; - - return Result; + return Result : Super_String (Source.Max_Length) do + if Low > Source.Current_Length + 1 + or else High > Source.Current_Length + then + raise Index_Error; + else + Result.Current_Length := High - Low + 1; + Result.Data (1 .. Result.Current_Length) := + Source.Data (Low .. High); + end if; + end return; end Super_Slice; procedure Super_Slice @@ -1627,7 +1639,9 @@ package body Ada.Strings.Wide_Wide_Superbounded is (Source : Super_String) return Wide_Wide_String is begin - return Source.Data (1 .. Source.Current_Length); + return R : Wide_Wide_String (1 .. Source.Current_Length) do + R := Source.Data (1 .. Source.Current_Length); + end return; end Super_To_String; --------------------- diff --git a/gcc/ada/a-stzsup.ads b/gcc/ada/a-stzsup.ads index 7e67f53bae8..728b0bc71f8 100644 --- a/gcc/ada/a-stzsup.ads +++ b/gcc/ada/a-stzsup.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2003-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 2003-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -45,13 +45,17 @@ package Ada.Strings.Wide_Wide_Superbounded is Wide_Wide_NUL : constant Wide_Wide_Character := Wide_Wide_Character'Val (0); + -- Wide_Wide_Bounded.Generic_Bounded_Length.Wide_Wide_Bounded_String is + -- derived from Super_String, with the constraint of the maximum length. + type Super_String (Max_Length : Positive) is record Current_Length : Natural := 0; - Data : Wide_Wide_String (1 .. Max_Length) := - (others => Wide_Wide_NUL); + Data : Wide_Wide_String (1 .. Max_Length); + -- A previous version had a default initial value for Data, which is + -- no longer necessary, because we now special-case this type in the + -- compiler, so "=" composes properly for descendants of this type. + -- Leaving it out is more efficient. end record; - -- Wide_Wide_Bounded.Generic_Bounded_Length.Wide_Wide_Bounded_String is - -- derived from this type, with the constraint of the maximum length. -- The subprograms defined for Super_String are similar to those defined -- for Bounded_Wide_Wide_String, except that they have different names, so diff --git a/gcc/ada/aspects.adb b/gcc/ada/aspects.adb index 89af1d975f3..51f468c7889 100755 --- a/gcc/ada/aspects.adb +++ b/gcc/ada/aspects.adb @@ -278,6 +278,7 @@ package body Aspects is Aspect_Pure_12 => Aspect_Pure_12, Aspect_Remote_Call_Interface => Aspect_Remote_Call_Interface, Aspect_Remote_Types => Aspect_Remote_Types, + Aspect_Scalar_Storage_Order => Aspect_Scalar_Storage_Order, Aspect_Shared_Passive => Aspect_Shared_Passive, Aspect_Universal_Data => Aspect_Universal_Data, Aspect_Input => Aspect_Input, diff --git a/gcc/ada/aspects.ads b/gcc/ada/aspects.ads index 3c28af83b8f..84548a9d20d 100755 --- a/gcc/ada/aspects.ads +++ b/gcc/ada/aspects.ads @@ -74,6 +74,7 @@ package Aspects is Aspect_Predicate, -- GNAT Aspect_Priority, Aspect_Read, + Aspect_Scalar_Storage_Order, -- GNAT Aspect_Simple_Storage_Pool, -- GNAT Aspect_Size, Aspect_Small, @@ -188,6 +189,7 @@ package Aspects is Aspect_Pure_Function => True, Aspect_Remote_Access_Type => True, Aspect_Shared => True, + Aspect_Scalar_Storage_Order => True, Aspect_Simple_Storage_Pool => True, Aspect_Simple_Storage_Pool_Type => True, Aspect_Suppress_Debug_Info => True, @@ -281,6 +283,7 @@ package Aspects is Aspect_Predicate => Expression, Aspect_Priority => Expression, Aspect_Read => Name, + Aspect_Scalar_Storage_Order => Expression, Aspect_Simple_Storage_Pool => Name, Aspect_Size => Expression, Aspect_Small => Expression, @@ -367,6 +370,7 @@ package Aspects is Aspect_Remote_Access_Type => Name_Remote_Access_Type, Aspect_Remote_Call_Interface => Name_Remote_Call_Interface, Aspect_Remote_Types => Name_Remote_Types, + Aspect_Scalar_Storage_Order => Name_Scalar_Storage_Order, Aspect_Shared => Name_Shared, Aspect_Shared_Passive => Name_Shared_Passive, Aspect_Simple_Storage_Pool => Name_Simple_Storage_Pool, diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index 059253fd903..ab628b30f8b 100644 --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,6 +31,7 @@ with Exp_Ch2; use Exp_Ch2; with Exp_Ch4; use Exp_Ch4; with Exp_Ch11; use Exp_Ch11; with Exp_Pakd; use Exp_Pakd; +with Exp_Tss; use Exp_Tss; with Exp_Util; use Exp_Util; with Elists; use Elists; with Eval_Fat; use Eval_Fat; @@ -1778,10 +1779,29 @@ package body Checks is --------------------------- procedure Apply_Predicate_Check (N : Node_Id; Typ : Entity_Id) is + S : Entity_Id; begin if Present (Predicate_Function (Typ)) then - Insert_Action (N, - Make_Predicate_Check (Typ, Duplicate_Subexpr (N))); + + -- A predicate check does not apply within internally generated + -- subprograms, such as TSS functions. + + S := Current_Scope; + while Present (S) + and then not Is_Subprogram (S) + loop + S := Scope (S); + end loop; + + if Present (S) + and then Get_TSS_Name (S) /= TSS_Null + then + return; + + else + Insert_Action (N, + Make_Predicate_Check (Typ, Duplicate_Subexpr (N))); + end if; end if; end Apply_Predicate_Check; diff --git a/gcc/ada/comperr.adb b/gcc/ada/comperr.adb index 9bf83f3879d..ac620e6227c 100644 --- a/gcc/ada/comperr.adb +++ b/gcc/ada/comperr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -477,7 +477,7 @@ package body Comperr is Name_Len := K; end Decode_Name_Buffer; - -- Start of processing for Decode_Name_Buffer + -- Start of processing for Delete_SCIL_Files begin -- If parsing was not successful, no Main_Unit is available, so return @@ -499,6 +499,14 @@ package body Comperr is when N_Package_Body => Unit_Name := Corresponding_Spec (Main); + when N_Package_Renaming_Declaration => + Unit_Name := Defining_Unit_Name (Main); + + -- No SCIL file generated for generic package declarations + + when N_Generic_Package_Declaration => + return; + -- Should never happen, but can be ignored in production when others => diff --git a/gcc/ada/debug.adb b/gcc/ada/debug.adb index 99ba3d5585d..3fd2d645115 100644 --- a/gcc/ada/debug.adb +++ b/gcc/ada/debug.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -100,8 +100,8 @@ package body Debug is -- d.g Enable conversion of raise into goto -- d.h -- d.i Ignore Warnings pragmas - -- d.j - -- d.k + -- d.j Generate listing of frontend inlined calls + -- d.k Enable new support for frontend inlining -- d.l Use Ada 95 semantics for limited function returns -- d.m For -gnatl, print full source only for main unit -- d.n Print source file names @@ -533,6 +533,13 @@ package body Debug is -- be used in particular to disable Warnings (Off) to check if any of -- these statements are inappropriate. + -- d.j Generate listing of frontend inlined calls and inline calls passed + -- to the backend. This is useful to locate skipped calls that must be + -- inlined by the frontend. + + -- d.k Enable new semantics of frontend inlining. This is useful to test + -- this new feature in all the platforms. + -- d.l Use Ada 95 semantics for limited function returns. This may be -- used to work around the incompatibility introduced by AI-318-2. -- It is useful only in -gnat05 mode. diff --git a/gcc/ada/einfo.adb b/gcc/ada/einfo.adb index d5cbc22baec..0fdc83c3086 100644 --- a/gcc/ada/einfo.adb +++ b/gcc/ada/einfo.adb @@ -348,7 +348,7 @@ package body Einfo is -- Is_Itype Flag91 -- Size_Known_At_Compile_Time Flag92 - -- Has_Subprogram_Descriptor Flag93 + -- Reverse_Storage_Order Flag93 -- Is_Generic_Actual_Type Flag94 -- Uses_Sec_Stack Flag95 -- Warnings_Off Flag96 @@ -452,7 +452,6 @@ package body Einfo is -- Is_Ada_2005_Only Flag185 -- Is_Interface Flag186 -- Has_Constrained_Partial_View Flag187 - -- Has_Persistent_BSS Flag188 -- Is_Pure_Unit_Access_Type Flag189 -- Has_Specified_Stream_Input Flag190 @@ -467,7 +466,6 @@ package body Einfo is -- Is_Ada_2012_Only Flag199 -- Has_Delayed_Aspects Flag200 - -- Has_Anon_Block_Suffix Flag201 -- Itype_Printed Flag202 -- Has_Pragma_Pure Flag203 -- Is_Known_Null Flag204 @@ -527,6 +525,9 @@ package body Einfo is -- Has_Anonymous_Master Flag253 -- Is_Implementation_Defined Flag254 + -- (unused) Flag188 + -- (unused) Flag201 + ----------------------- -- Local subprograms -- ----------------------- @@ -1198,11 +1199,6 @@ package body Einfo is return Flag79 (Id); end Has_All_Calls_Remote; - function Has_Anon_Block_Suffix (Id : E) return B is - begin - return Flag201 (Id); - end Has_Anon_Block_Suffix; - function Has_Anonymous_Master (Id : E) return B is begin pragma Assert @@ -1398,11 +1394,6 @@ package body Einfo is return Flag154 (Id); end Has_Per_Object_Constraint; - function Has_Persistent_BSS (Id : E) return B is - begin - return Flag188 (Id); - end Has_Persistent_BSS; - function Has_Postconditions (Id : E) return B is begin pragma Assert (Is_Subprogram (Id)); @@ -1579,11 +1570,6 @@ package body Einfo is return Flag184 (Id); end Has_Stream_Size_Clause; - function Has_Subprogram_Descriptor (Id : E) return B is - begin - return Flag93 (Id); - end Has_Subprogram_Descriptor; - function Has_Task (Id : E) return B is begin return Flag30 (Base_Type (Id)); @@ -2624,6 +2610,12 @@ package body Einfo is return Flag164 (Base_Type (Id)); end Reverse_Bit_Order; + function Reverse_Storage_Order (Id : E) return B is + begin + pragma Assert (Is_Record_Type (Id)); + return Flag93 (Base_Type (Id)); + end Reverse_Storage_Order; + function RM_Size (Id : E) return U is begin pragma Assert (Is_Type (Id)); @@ -3707,11 +3699,6 @@ package body Einfo is Set_Flag79 (Id, V); end Set_Has_All_Calls_Remote; - procedure Set_Has_Anon_Block_Suffix (Id : E; V : B := True) is - begin - Set_Flag201 (Id, V); - end Set_Has_Anon_Block_Suffix; - procedure Set_Has_Anonymous_Master (Id : E; V : B := True) is begin pragma Assert @@ -3922,11 +3909,6 @@ package body Einfo is Set_Flag154 (Id, V); end Set_Has_Per_Object_Constraint; - procedure Set_Has_Persistent_BSS (Id : E; V : B := True) is - begin - Set_Flag188 (Id, V); - end Set_Has_Persistent_BSS; - procedure Set_Has_Postconditions (Id : E; V : B := True) is begin pragma Assert (Is_Subprogram (Id)); @@ -4107,11 +4089,6 @@ package body Einfo is Set_Flag184 (Id, V); end Set_Has_Stream_Size_Clause; - procedure Set_Has_Subprogram_Descriptor (Id : E; V : B := True) is - begin - Set_Flag93 (Id, V); - end Set_Has_Subprogram_Descriptor; - procedure Set_Has_Task (Id : E; V : B := True) is begin pragma Assert (Id = Base_Type (Id)); @@ -5192,6 +5169,13 @@ package body Einfo is Set_Flag164 (Id, V); end Set_Reverse_Bit_Order; + procedure Set_Reverse_Storage_Order (Id : E; V : B := True) is + begin + pragma Assert + (Is_Record_Type (Id) and then Is_Base_Type (Id)); + Set_Flag93 (Id, V); + end Set_Reverse_Storage_Order; + procedure Set_RM_Size (Id : E; V : U) is begin pragma Assert (Is_Type (Id)); @@ -7479,7 +7463,6 @@ package body Einfo is W ("Has_Aliased_Components", Flag135 (Id)); W ("Has_Alignment_Clause", Flag46 (Id)); W ("Has_All_Calls_Remote", Flag79 (Id)); - W ("Has_Anon_Block_Suffix", Flag201 (Id)); W ("Has_Anonymous_Master", Flag253 (Id)); W ("Has_Atomic_Components", Flag86 (Id)); W ("Has_Biased_Representation", Flag139 (Id)); @@ -7513,7 +7496,6 @@ package body Einfo is W ("Has_Non_Standard_Rep", Flag75 (Id)); W ("Has_Object_Size_Clause", Flag172 (Id)); W ("Has_Per_Object_Constraint", Flag154 (Id)); - W ("Has_Persistent_BSS", Flag188 (Id)); W ("Has_Postconditions", Flag240 (Id)); W ("Has_Pragma_Controlled", Flag27 (Id)); W ("Has_Pragma_Elaborate_Body", Flag150 (Id)); @@ -7546,7 +7528,6 @@ package body Einfo is W ("Has_Static_Discriminants", Flag211 (Id)); W ("Has_Storage_Size_Clause", Flag23 (Id)); W ("Has_Stream_Size_Clause", Flag184 (Id)); - W ("Has_Subprogram_Descriptor", Flag93 (Id)); W ("Has_Task", Flag30 (Id)); W ("Has_Thunks", Flag228 (Id)); W ("Has_Unchecked_Union", Flag123 (Id)); @@ -7688,6 +7669,7 @@ package body Einfo is W ("Return_Present", Flag54 (Id)); W ("Returns_By_Ref", Flag90 (Id)); W ("Reverse_Bit_Order", Flag164 (Id)); + W ("Reverse_Storage_Order", Flag93 (Id)); W ("Sec_Stack_Needed_For_Return", Flag167 (Id)); W ("Size_Depends_On_Discriminant", Flag177 (Id)); W ("Size_Known_At_Compile_Time", Flag92 (Id)); diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads index e0d76544f9c..84775779d12 100644 --- a/gcc/ada/einfo.ads +++ b/gcc/ada/einfo.ads @@ -1359,11 +1359,6 @@ package Einfo is -- be RCI entities, so the flag Is_Remote_Call_Interface will always -- be set if this flag is set. --- Has_Anon_Block_Suffix (Flag201) --- Present in all entities. Set if the entity is nested within one or --- more anonymous blocks and the Chars field contains a name with an --- anonymous block suffix (see Exp_Dbug for further details). - -- Has_Anonymous_Master (Flag253) -- Present in units (top-level functions and procedures, library-level -- packages). Set to True if the associated unit contains a heterogeneous @@ -1638,13 +1633,6 @@ package Einfo is -- 5. N_Range_Constraint - when the range expression uses the -- discriminant of the enclosing type. --- Has_Persistent_BSS (Flag188) --- Present in all entities. Set True for entities to which a valid --- pragma Persistent_BSS applies. Note that although the pragma is --- only meaningful for objects, we set it for all entities in a unit --- to which the pragma applies, as well as the unit entity itself, for --- convenience in propagating the flag to contained entities. - -- Has_Postconditions (Flag240) -- Present in subprogram entities. Set if postconditions are active for -- the procedure, and a _postconditions procedure has been generated. @@ -1831,13 +1819,6 @@ package Einfo is -- given entity, and also whether it is necessary to check for a stream -- size clause. --- Has_Subprogram_Descriptor (Flag93) --- This flag is set on entities for which zero-cost exception subprogram --- descriptors can be generated (subprograms and library level package --- declarations and bodies). It indicates that a subprogram descriptor --- has been generated, and is used to suppress generation of multiple --- descriptors (e.g. when instantiating generic bodies). - -- Has_Task (Flag30) [base type only] -- Present in all type entities. Set on task types themselves, and also -- (recursively) on any composite type which has a component for which @@ -2819,7 +2800,7 @@ package Einfo is -- interface types. At run-time thunks displace the pointer to the object -- (pointer named "this" in the C++ terminology) from a secondary -- dispatch table to the primary dispatch table associated with a given --- tagged type. Set by Expand_Interface Thunk and used by Expand_Call to +-- tagged type. Set by Expand_Interface_Thunk and used by Expand_Call to -- handle extra actuals associated with accessibility level. -- Is_Trivial_Subprogram (Flag235) @@ -3567,6 +3548,13 @@ package Einfo is -- a single storage unit (Ada 95) or within a single machine scalar (see -- Ada 2005 AI-133), or must occupy an integral number of storage units. +-- Reverse_Storage_Order (Flag93) [base type only] +-- Present in all record type entities. Set if entity has a +-- Scalar_Storage_Order aspect (set by an aspect clause or attribute +-- definition clause) that has reversed the order of storage elements +-- from the default value. When this flag is set, the Bit_Order aspect +-- must be set to the same value. + -- RM_Size (Uint13) -- Present in all type and subtype entities. Contains the value of -- type'Size as defined in the RM. See also the Esize field and @@ -4783,14 +4771,12 @@ package Einfo is -- Can_Never_Be_Null (Flag38) -- Checks_May_Be_Suppressed (Flag31) -- Debug_Info_Off (Flag166) - -- Has_Anon_Block_Suffix (Flag201) -- Has_Convention_Pragma (Flag119) -- Has_Delayed_Aspects (Flag200) -- Has_Delayed_Freeze (Flag18) -- Has_Fully_Qualified_Name (Flag173) -- Has_Gigi_Rep_Item (Flag82) -- Has_Homonym (Flag56) - -- Has_Persistent_BSS (Flag188) -- Has_Pragma_Elaborate_Body (Flag150) -- Has_Pragma_Inline (Flag157) -- Has_Pragma_Inline_Always (Flag230) @@ -5297,7 +5283,6 @@ package Einfo is -- Has_Nested_Block_With_Handler (Flag101) -- Has_Postconditions (Flag240) -- Has_Recursive_Call (Flag143) - -- Has_Subprogram_Descriptor (Flag93) -- Is_Abstract_Subprogram (Flag19) (non-generic case only) -- Is_Called (Flag102) (non-generic case only) -- Is_Constructor (Flag76) @@ -5487,7 +5472,6 @@ package Einfo is -- Has_Forward_Instantiation (Flag175) -- Has_Master_Entity (Flag21) -- Has_RACW (Flag214) (non-generic case only) - -- Has_Subprogram_Descriptor (Flag93) -- In_Package_Body (Flag48) -- In_Use (Flag8) -- Is_Instantiated (Flag126) @@ -5508,7 +5492,6 @@ package Einfo is -- Finalizer (Node24) (non-generic case only) -- Delay_Subprogram_Descriptors (Flag50) -- Has_Anonymous_Master (Flag253) - -- Has_Subprogram_Descriptor (Flag93) -- Scope_Depth (synth) -- E_Private_Type @@ -5566,7 +5549,6 @@ package Einfo is -- Has_Master_Entity (Flag21) -- Has_Nested_Block_With_Handler (Flag101) -- Has_Postconditions (Flag240) - -- Has_Subprogram_Descriptor (Flag93) -- Is_Abstract_Subprogram (Flag19) (non-generic case only) -- Is_Asynchronous (Flag81) -- Is_Called (Flag102) (non-generic case only) @@ -5650,6 +5632,7 @@ package Einfo is -- Is_Limited_Interface (Flag197) -- OK_To_Reorder_Components (Flag239) (base type only) -- Reverse_Bit_Order (Flag164) (base type only) + -- Reverse_Storage_Order (Flag93) (base type only) -- First_Component (synth) -- First_Component_Or_Discriminant (synth) -- (plus type attributes) @@ -5676,6 +5659,7 @@ package Einfo is -- Is_Limited_Interface (Flag197) -- OK_To_Reorder_Components (Flag239) (base type only) -- Reverse_Bit_Order (Flag164) (base type only) + -- Reverse_Storage_Order (Flag93) (base type only) -- First_Component (synth) -- First_Component_Or_Discriminant (synth) -- (plus type attributes) @@ -6136,7 +6120,6 @@ package Einfo is function Has_Aliased_Components (Id : E) return B; function Has_Alignment_Clause (Id : E) return B; function Has_All_Calls_Remote (Id : E) return B; - function Has_Anon_Block_Suffix (Id : E) return B; function Has_Anonymous_Master (Id : E) return B; function Has_Atomic_Components (Id : E) return B; function Has_Biased_Representation (Id : E) return B; @@ -6173,7 +6156,6 @@ package Einfo is function Has_Non_Standard_Rep (Id : E) return B; function Has_Object_Size_Clause (Id : E) return B; function Has_Per_Object_Constraint (Id : E) return B; - function Has_Persistent_BSS (Id : E) return B; function Has_Postconditions (Id : E) return B; function Has_Pragma_Controlled (Id : E) return B; function Has_Pragma_Elaborate_Body (Id : E) return B; @@ -6205,7 +6187,6 @@ package Einfo is function Has_Static_Discriminants (Id : E) return B; function Has_Storage_Size_Clause (Id : E) return B; function Has_Stream_Size_Clause (Id : E) return B; - function Has_Subprogram_Descriptor (Id : E) return B; function Has_Task (Id : E) return B; function Has_Thunks (Id : E) return B; function Has_Unchecked_Union (Id : E) return B; @@ -6388,6 +6369,7 @@ package Einfo is function Return_Present (Id : E) return B; function Returns_By_Ref (Id : E) return B; function Reverse_Bit_Order (Id : E) return B; + function Reverse_Storage_Order (Id : E) return B; function Scalar_Range (Id : E) return N; function Scale_Value (Id : E) return U; function Scope_Depth_Value (Id : E) return U; @@ -6728,7 +6710,6 @@ package Einfo is procedure Set_Has_Aliased_Components (Id : E; V : B := True); procedure Set_Has_Alignment_Clause (Id : E; V : B := True); procedure Set_Has_All_Calls_Remote (Id : E; V : B := True); - procedure Set_Has_Anon_Block_Suffix (Id : E; V : B := True); procedure Set_Has_Anonymous_Master (Id : E; V : B := True); procedure Set_Has_Atomic_Components (Id : E; V : B := True); procedure Set_Has_Biased_Representation (Id : E; V : B := True); @@ -6764,7 +6745,6 @@ package Einfo is procedure Set_Has_Non_Standard_Rep (Id : E; V : B := True); procedure Set_Has_Object_Size_Clause (Id : E; V : B := True); procedure Set_Has_Per_Object_Constraint (Id : E; V : B := True); - procedure Set_Has_Persistent_BSS (Id : E; V : B := True); procedure Set_Has_Postconditions (Id : E; V : B := True); procedure Set_Has_Pragma_Controlled (Id : E; V : B := True); procedure Set_Has_Pragma_Elaborate_Body (Id : E; V : B := True); @@ -6797,7 +6777,6 @@ package Einfo is procedure Set_Has_Static_Discriminants (Id : E; V : B := True); procedure Set_Has_Storage_Size_Clause (Id : E; V : B := True); procedure Set_Has_Stream_Size_Clause (Id : E; V : B := True); - procedure Set_Has_Subprogram_Descriptor (Id : E; V : B := True); procedure Set_Has_Task (Id : E; V : B := True); procedure Set_Has_Thunks (Id : E; V : B := True); procedure Set_Has_Unchecked_Union (Id : E; V : B := True); @@ -6986,6 +6965,7 @@ package Einfo is procedure Set_Return_Present (Id : E; V : B := True); procedure Set_Returns_By_Ref (Id : E; V : B := True); procedure Set_Reverse_Bit_Order (Id : E; V : B := True); + procedure Set_Reverse_Storage_Order (Id : E; V : B := True); procedure Set_Scalar_Range (Id : E; V : N); procedure Set_Scale_Value (Id : E; V : U); procedure Set_Scope_Depth_Value (Id : E; V : U); @@ -7432,7 +7412,6 @@ package Einfo is pragma Inline (Has_Aliased_Components); pragma Inline (Has_Alignment_Clause); pragma Inline (Has_All_Calls_Remote); - pragma Inline (Has_Anon_Block_Suffix); pragma Inline (Has_Anonymous_Master); pragma Inline (Has_Atomic_Components); pragma Inline (Has_Biased_Representation); @@ -7468,7 +7447,6 @@ package Einfo is pragma Inline (Has_Non_Standard_Rep); pragma Inline (Has_Object_Size_Clause); pragma Inline (Has_Per_Object_Constraint); - pragma Inline (Has_Persistent_BSS); pragma Inline (Has_Postconditions); pragma Inline (Has_Pragma_Controlled); pragma Inline (Has_Pragma_Elaborate_Body); @@ -7501,7 +7479,6 @@ package Einfo is pragma Inline (Has_Static_Discriminants); pragma Inline (Has_Storage_Size_Clause); pragma Inline (Has_Stream_Size_Clause); - pragma Inline (Has_Subprogram_Descriptor); pragma Inline (Has_Task); pragma Inline (Has_Thunks); pragma Inline (Has_Unchecked_Union); @@ -7733,6 +7710,7 @@ package Einfo is pragma Inline (Return_Present); pragma Inline (Returns_By_Ref); pragma Inline (Reverse_Bit_Order); + pragma Inline (Reverse_Storage_Order); pragma Inline (Scalar_Range); pragma Inline (Scale_Value); pragma Inline (Scope_Depth_Value); @@ -7879,7 +7857,6 @@ package Einfo is pragma Inline (Set_Has_Aliased_Components); pragma Inline (Set_Has_Alignment_Clause); pragma Inline (Set_Has_All_Calls_Remote); - pragma Inline (Set_Has_Anon_Block_Suffix); pragma Inline (Set_Has_Anonymous_Master); pragma Inline (Set_Has_Atomic_Components); pragma Inline (Set_Has_Biased_Representation); @@ -7915,7 +7892,6 @@ package Einfo is pragma Inline (Set_Has_Non_Standard_Rep); pragma Inline (Set_Has_Object_Size_Clause); pragma Inline (Set_Has_Per_Object_Constraint); - pragma Inline (Set_Has_Persistent_BSS); pragma Inline (Set_Has_Postconditions); pragma Inline (Set_Has_Pragma_Controlled); pragma Inline (Set_Has_Pragma_Elaborate_Body); @@ -7948,7 +7924,6 @@ package Einfo is pragma Inline (Set_Has_Static_Discriminants); pragma Inline (Set_Has_Storage_Size_Clause); pragma Inline (Set_Has_Stream_Size_Clause); - pragma Inline (Set_Has_Subprogram_Descriptor); pragma Inline (Set_Has_Task); pragma Inline (Set_Has_Thunks); pragma Inline (Set_Has_Unchecked_Union); @@ -8137,6 +8112,7 @@ package Einfo is pragma Inline (Set_Return_Present); pragma Inline (Set_Returns_By_Ref); pragma Inline (Set_Reverse_Bit_Order); + pragma Inline (Set_Reverse_Storage_Order); pragma Inline (Set_Scalar_Range); pragma Inline (Set_Scale_Value); pragma Inline (Set_Scope_Depth_Value); diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index 4e0c60cdb57..4f67ef97dce 100644 --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -678,13 +678,13 @@ package body Exp_Attr is case Id is - -- Attributes related to Ada 2012 iterators (placeholder ???) + -- Attributes related to Ada 2012 iterators (placeholder ???) - when Attribute_Constant_Indexing => null; - when Attribute_Default_Iterator => null; - when Attribute_Implicit_Dereference => null; - when Attribute_Iterator_Element => null; - when Attribute_Variable_Indexing => null; + when Attribute_Constant_Indexing => null; + when Attribute_Default_Iterator => null; + when Attribute_Implicit_Dereference => null; + when Attribute_Iterator_Element => null; + when Attribute_Variable_Indexing => null; ------------ -- Access -- @@ -5672,7 +5672,8 @@ package body Exp_Attr is Attribute_Definite | Attribute_Null_Parameter | Attribute_Passed_By_Reference | - Attribute_Pool_Address => + Attribute_Pool_Address | + Attribute_Scalar_Storage_Order => null; -- The following attributes are also handled by the back end, but return diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index d1865038361..5035751e390 100644 --- a/gcc/ada/exp_ch3.adb +++ b/gcc/ada/exp_ch3.adb @@ -6115,9 +6115,8 @@ package body Exp_Ch3 is -- This is done unconditionally to ensure that tools can be linked -- properly with user programs compiled with older language versions. - -- It might be worth including a switch to revert to a non-composable - -- equality for untagged records, even though no program depending on - -- non-composability has surfaced ??? + -- In addition, this is needed because "=" composes for bounded strings + -- in all language versions (see Exp_Ch4.Expand_Composite_Equality). elsif Comes_From_Source (Def_Id) and then Convention (Def_Id) = Convention_Ada diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index d90b54c1e3e..075c9e8a995 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -149,10 +149,10 @@ package body Exp_Ch4 is -- Local recursive function used to expand equality for nested composite -- types. Used by Expand_Record/Array_Equality, Bodies is a list on which -- to attach bodies of local functions that are created in the process. - -- This is the responsibility of the caller to insert those bodies at the + -- It is the responsibility of the caller to insert those bodies at the -- right place. Nod provides the Sloc value for generated code. Lhs and Rhs -- are the left and right sides for the comparison, and Typ is the type of - -- the arrays to compare. + -- the objects to compare. procedure Expand_Concatenate (Cnode : Node_Id; Opnds : List_Id); -- Routine to expand concatenation of a sequence of two or more operands @@ -702,13 +702,16 @@ package body Exp_Ch4 is (Is_Class_Wide_Type (Etype (Exp)) and then Scope (PtrT) /= Current_Scope)) then - -- If the allocator was built in place Ref is already a reference + -- If the allocator was built in place, Ref is already a reference -- to the access object initialized to the result of the allocator - -- (see Exp_Ch6.Make_Build_In_Place_Call_In_Allocator). Otherwise - -- it is the entity associated with the object containing the - -- address of the allocated object. + -- (see Exp_Ch6.Make_Build_In_Place_Call_In_Allocator). We call + -- Remove_Side_Effects for cases where the build-in-place call may + -- still be the prefix of the reference (to avoid generating + -- duplicate calls). Otherwise, it is the entity associated with + -- the object containing the address of the allocated object. if Built_In_Place then + Remove_Side_Effects (Ref); New_Node := New_Copy (Ref); else New_Node := New_Reference_To (Ref, Loc); @@ -2485,21 +2488,28 @@ package body Exp_Ch4 is end if; end if; - elsif Ada_Version >= Ada_2012 then + -- Equality composes in Ada 2012 for untagged record types. It also + -- composes for bounded strings, because they are part of the + -- predefined environment. We could make it compose for bounded + -- strings by making them tagged, or by making sure all subcomponents + -- are set to the same value, even when not used. Instead, we have + -- this special case in the compiler, because it's more efficient. + + elsif Ada_Version >= Ada_2012 or else Is_Bounded_String (Typ) then -- if no TSS has been created for the type, check whether there is -- a primitive equality declared for it. declare - Ada_2012_Op : constant Node_Id := Find_Primitive_Eq; + Op : constant Node_Id := Find_Primitive_Eq; begin - if Present (Ada_2012_Op) then - return Ada_2012_Op; - else - - -- Use predefined equality if no user-defined primitive exists + -- Use user-defined primitive if it exists, otherwise use + -- predefined equality. + if Present (Op) then + return Op; + else return Make_Op_Eq (Loc, Lhs, Rhs); end if; end; @@ -3522,19 +3532,19 @@ package body Exp_Ch4 is -- Processing for anonymous access-to-controlled types. These access -- types receive a special finalization master which appears in the -- declarations of the enclosing semantic unit. This expansion is done - -- now to ensure that any additional types generated by this routine - -- or Expand_Allocator_Expression inherit the proper type attributes. + -- now to ensure that any additional types generated by this routine or + -- Expand_Allocator_Expression inherit the proper type attributes. - if Ekind (PtrT) = E_Anonymous_Access_Type + if (Ekind (PtrT) = E_Anonymous_Access_Type + or else + (Is_Itype (PtrT) and then No (Finalization_Master (PtrT)))) and then Needs_Finalization (Dtyp) then -- Anonymous access-to-controlled types allocate on the global pool. -- Do not set this attribute on .NET/JVM since those targets do not -- support pools. - if No (Associated_Storage_Pool (PtrT)) - and then VM_Target = No_VM - then + if No (Associated_Storage_Pool (PtrT)) and then VM_Target = No_VM then Set_Associated_Storage_Pool (PtrT, Get_Global_Pool_For_Access_Type (PtrT)); end if; @@ -7916,14 +7926,9 @@ package body Exp_Ch4 is Make_Exit_Statement (Loc))); if Present (Loop_Parameter_Specification (N)) then - I_Scheme := - Make_Iteration_Scheme (Loc, - Loop_Parameter_Specification => - Loop_Parameter_Specification (N)); + I_Scheme := Relocate_Node (Parent (Loop_Parameter_Specification (N))); else - I_Scheme := - Make_Iteration_Scheme (Loc, - Iterator_Specification => Iterator_Specification (N)); + I_Scheme := Relocate_Node (Parent (Iterator_Specification (N))); end if; Append_To (Actions, diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb index 34ff36a63b5..6d8e0537d39 100644 --- a/gcc/ada/exp_ch5.adb +++ b/gcc/ada/exp_ch5.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -28,6 +28,7 @@ with Atree; use Atree; with Checks; use Checks; with Debug; use Debug; with Einfo; use Einfo; +with Errout; use Errout; with Exp_Aggr; use Exp_Aggr; with Exp_Ch6; use Exp_Ch6; with Exp_Ch7; use Exp_Ch7; @@ -106,6 +107,9 @@ package body Exp_Ch5 is -- Expand loop over arrays and containers that uses the form "for X of C" -- with an optional subtype mark, or "for Y in C". + procedure Expand_Iterator_Loop_Over_Array (N : Node_Id); + -- Expand loop over arrays that uses the form "for X of C" + procedure Expand_Predicated_Loop (N : Node_Id); -- Expand for loop over predicated subtype @@ -2086,6 +2090,21 @@ package body Exp_Ch5 is and then not Restriction_Active (No_Dispatching_Calls)) then + if Is_Limited_Type (Typ) then + + -- This can happen in an instance when the formal is an + -- extension of a limited interface, and the actual is + -- limited. This is an error according to AI05-0087, but + -- is not caught at the point of instantiation in earlier + -- versions. + + -- This is wrong, error messages cannot be issued during + -- expansion, since they would be missed in -gnatc mode ??? + + Error_Msg_N ("assignment not available on limited type", N); + return; + end if; + -- Fetch the primitive op _assign and proper type to call it. -- Because of possible conflicts between private and full view, -- fetch the proper type directly from the operation profile. @@ -2930,369 +2949,432 @@ package body Exp_Ch5 is -- Processing for arrays if Is_Array_Type (Container_Typ) then + Expand_Iterator_Loop_Over_Array (N); + return; + end if; - -- for Element of Array loop - -- - -- This case requires an internally generated cursor to iterate over - -- the array. + -- Processing for containers - if Of_Present (I_Spec) then - Iterator := Make_Temporary (Loc, 'C'); + -- For an "of" iterator the name is a container expression, which + -- is transformed into a call to the default iterator. - -- Generate: - -- Element : Component_Type renames Container (Iterator); + -- For an iterator of the form "in" the name is a function call + -- that delivers an iterator type. - Prepend_To (Stats, - Make_Object_Renaming_Declaration (Loc, - Defining_Identifier => Id, - Subtype_Mark => - New_Reference_To (Component_Type (Container_Typ), Loc), - Name => - Make_Indexed_Component (Loc, - Prefix => Relocate_Node (Container), - Expressions => New_List ( - New_Reference_To (Iterator, Loc))))); + -- In both cases, analysis of the iterator has introduced an object + -- declaration to capture the domain, so that Container is an entity. + + -- The for loop is expanded into a while loop which uses a container + -- specific cursor to desgnate each element. + + -- Iter : Iterator_Type := Container.Iterate; + -- Cursor : Cursor_type := First (Iter); + -- while Has_Element (Iter) loop + -- declare + -- -- The block is added when Element_Type is controlled + + -- Obj : Pack.Element_Type := Element (Cursor); + -- -- for the "of" loop form + -- begin + -- <original loop statements> + -- end; + + -- Cursor := Iter.Next (Cursor); + -- end loop; - -- for Index in Array loop + -- If "reverse" is present, then the initialization of the cursor + -- uses Last and the step becomes Prev. Pack is the name of the + -- scope where the container package is instantiated. - -- This case utilizes the already given iterator name + declare + Element_Type : constant Entity_Id := Etype (Id); + Iter_Type : Entity_Id; + Pack : Entity_Id; + Decl : Node_Id; + Name_Init : Name_Id; + Name_Step : Name_Id; + begin + -- The type of the iterator is the return type of the Iterate + -- function used. For the "of" form this is the default iterator + -- for the type, otherwise it is the type of the explicit + -- function used in the iterator specification. The most common + -- case will be an Iterate function in the container package. + + -- The primitive operations of the container type may not be + -- use-visible, so we introduce the name of the enclosing package + -- in the declarations below. The Iterator type is declared in a + -- an instance within the container package itself. + + -- If the container type is a derived type, the cursor type is + -- found in the package of the parent type. + + if Is_Derived_Type (Container_Typ) then + Pack := Scope (Root_Type (Container_Typ)); else - Iterator := Id; + Pack := Scope (Container_Typ); end if; - -- Generate: - -- for Iterator in [reverse] Container'Range loop - -- Element : Component_Type renames Container (Iterator); - -- -- for the "of" form + Iter_Type := Etype (Name (I_Spec)); - -- <original loop statements> - -- end loop; + -- The "of" case uses an internally generated cursor whose type + -- is found in the container package. The domain of iteration + -- is expanded into a call to the default Iterator function, but + -- this expansion does not take place in quantified expressions + -- that are analyzed with expansion disabled, and in that case the + -- type of the iterator must be obtained from the aspect. - New_Loop := - Make_Loop_Statement (Loc, - Iteration_Scheme => - Make_Iteration_Scheme (Loc, - Loop_Parameter_Specification => - Make_Loop_Parameter_Specification (Loc, - Defining_Identifier => Iterator, - Discrete_Subtype_Definition => - Make_Attribute_Reference (Loc, - Prefix => Relocate_Node (Container), - Attribute_Name => Name_Range), - Reverse_Present => Reverse_Present (I_Spec))), - Statements => Stats, - End_Label => Empty); + if Of_Present (I_Spec) then + declare + Default_Iter : constant Entity_Id := + Entity + (Find_Aspect + (Etype (Container), + Aspect_Default_Iterator)); - -- Processing for containers + Container_Arg : Node_Id; + Ent : Entity_Id; - else - -- For an "of" iterator the name is a container expression, which - -- is transformed into a call to the default iterator. + begin + Cursor := Make_Temporary (Loc, 'I'); + + -- For an container element iterator, the iterator type + -- is obtained from the corresponding aspect. + + Iter_Type := Etype (Default_Iter); + Pack := Scope (Iter_Type); + + -- Rewrite domain of iteration as a call to the default + -- iterator for the container type. If the container is + -- a derived type and the aspect is inherited, convert + -- container to parent type. The Cursor type is also + -- inherited from the scope of the parent. - -- For an iterator of the form "in" the name is a function call - -- that delivers an iterator type. + if Base_Type (Etype (Container)) = + Base_Type (Etype (First_Formal (Default_Iter))) + then + Container_Arg := New_Copy_Tree (Container); - -- In both cases, analysis of the iterator has introduced an object - -- declaration to capture the domain, so that Container is an entity. + else + Container_Arg := + Make_Type_Conversion (Loc, + Subtype_Mark => + New_Occurrence_Of + (Etype (First_Formal (Default_Iter)), Loc), + Expression => New_Copy_Tree (Container)); + end if; - -- The for loop is expanded into a while loop which uses a container - -- specific cursor to desgnate each element. + Rewrite (Name (I_Spec), + Make_Function_Call (Loc, + Name => New_Occurrence_Of (Default_Iter, Loc), + Parameter_Associations => + New_List (Container_Arg))); + Analyze_And_Resolve (Name (I_Spec)); + + -- Find cursor type in proper iterator package, which is an + -- instantiation of Iterator_Interfaces. + + Ent := First_Entity (Pack); + while Present (Ent) loop + if Chars (Ent) = Name_Cursor then + Set_Etype (Cursor, Etype (Ent)); + exit; + end if; + Next_Entity (Ent); + end loop; - -- Iter : Iterator_Type := Container.Iterate; - -- Cursor : Cursor_type := First (Iter); - -- while Has_Element (Iter) loop - -- declare - -- -- The block is added when Element_Type is controlled + -- Generate: + -- Id : Element_Type renames Container (Cursor); + -- This assumes that the container type has an indexing + -- operation with Cursor. The check that this operation + -- exists is performed in Check_Container_Indexing. - -- Obj : Pack.Element_Type := Element (Cursor); - -- -- for the "of" loop form - -- begin - -- <original loop statements> - -- end; + Decl := + Make_Object_Renaming_Declaration (Loc, + Defining_Identifier => Id, + Subtype_Mark => + New_Reference_To (Element_Type, Loc), + Name => + Make_Indexed_Component (Loc, + Prefix => Relocate_Node (Container_Arg), + Expressions => + New_List (New_Occurrence_Of (Cursor, Loc)))); + + -- If the container holds controlled objects, wrap the loop + -- statements and element renaming declaration with a block. + -- This ensures that the result of Element (Cusor) is + -- cleaned up after each iteration of the loop. + + if Needs_Finalization (Element_Type) then - -- Cursor := Iter.Next (Cursor); - -- end loop; + -- Generate: + -- declare + -- Id : Element_Type := Element (curosr); + -- begin + -- <original loop statements> + -- end; + + Stats := New_List ( + Make_Block_Statement (Loc, + Declarations => New_List (Decl), + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + Statements => Stats))); + + -- Elements do not need finalization + + else + Prepend_To (Stats, Decl); + end if; + end; + + -- X in Iterate (S) : type of iterator is type of explicitly + -- given Iterate function, and the loop variable is the cursor. + -- It will be assigned in the loop and must be a variable. + + else + Cursor := Id; + Set_Ekind (Cursor, E_Variable); + end if; - -- If "reverse" is present, then the initialization of the cursor - -- uses Last and the step becomes Prev. Pack is the name of the - -- scope where the container package is instantiated. + Iterator := Make_Temporary (Loc, 'I'); + + -- Determine the advancement and initialization steps for the + -- cursor. + + -- Analysis of the expanded loop will verify that the container + -- has a reverse iterator. + + if Reverse_Present (I_Spec) then + Name_Init := Name_Last; + Name_Step := Name_Previous; + + else + Name_Init := Name_First; + Name_Step := Name_Next; + end if; + + -- For both iterator forms, add a call to the step operation to + -- advance the cursor. Generate: + + -- Cursor := Iterator.Next (Cursor); + + -- or else + + -- Cursor := Next (Cursor); declare - Element_Type : constant Entity_Id := Etype (Id); - Iter_Type : Entity_Id; - Pack : Entity_Id; - Decl : Node_Id; - Name_Init : Name_Id; - Name_Step : Name_Id; + Rhs : Node_Id; begin - -- The type of the iterator is the return type of the Iterate - -- function used. For the "of" form this is the default iterator - -- for the type, otherwise it is the type of the explicit - -- function used in the iterator specification. The most common - -- case will be an Iterate function in the container package. - - -- The primitive operations of the container type may not be - -- use-visible, so we introduce the name of the enclosing package - -- in the declarations below. The Iterator type is declared in a - -- an instance within the container package itself. - - -- If the container type is a derived type, the cursor type is - -- found in the package of the parent type. - - if Is_Derived_Type (Container_Typ) then - Pack := Scope (Root_Type (Container_Typ)); - else - Pack := Scope (Container_Typ); - end if; + Rhs := + Make_Function_Call (Loc, + Name => + Make_Selected_Component (Loc, + Prefix => New_Reference_To (Iterator, Loc), + Selector_Name => Make_Identifier (Loc, Name_Step)), + Parameter_Associations => New_List ( + New_Reference_To (Cursor, Loc))); - Iter_Type := Etype (Name (I_Spec)); + Append_To (Stats, + Make_Assignment_Statement (Loc, + Name => New_Occurrence_Of (Cursor, Loc), + Expression => Rhs)); + end; - -- The "of" case uses an internally generated cursor whose type - -- is found in the container package. The domain of iteration - -- is expanded into a call to the default Iterator function, but - -- this expansion does not take place in quantified expressions - -- that are analyzed with expansion disabled, and in that case the - -- type of the iterator must be obtained from the aspect. + -- Generate: + -- while Iterator.Has_Element loop + -- <Stats> + -- end loop; - if Of_Present (I_Spec) then - declare - Default_Iter : constant Entity_Id := - Entity - (Find_Aspect - (Etype (Container), - Aspect_Default_Iterator)); + -- Has_Element is the second actual in the iterator package - Container_Arg : Node_Id; - Ent : Entity_Id; + New_Loop := + Make_Loop_Statement (Loc, + Iteration_Scheme => + Make_Iteration_Scheme (Loc, + Condition => + Make_Function_Call (Loc, + Name => + New_Occurrence_Of ( + Next_Entity (First_Entity (Pack)), Loc), + Parameter_Associations => + New_List (New_Reference_To (Cursor, Loc)))), + + Statements => Stats, + End_Label => Empty); + + -- Create the declarations for Iterator and cursor and insert them + -- before the source loop. Given that the domain of iteration is + -- already an entity, the iterator is just a renaming of that + -- entity. Possible optimization ??? + -- Generate: - begin - Cursor := Make_Temporary (Loc, 'I'); + -- I : Iterator_Type renames Container; + -- C : Cursor_Type := Container.[First | Last]; - -- For an container element iterator, the iterator type - -- is obtained from the corresponding aspect. + Insert_Action (N, + Make_Object_Renaming_Declaration (Loc, + Defining_Identifier => Iterator, + Subtype_Mark => New_Occurrence_Of (Iter_Type, Loc), + Name => Relocate_Node (Name (I_Spec)))); - Iter_Type := Etype (Default_Iter); - Pack := Scope (Iter_Type); + -- Create declaration for cursor - -- Rewrite domain of iteration as a call to the default - -- iterator for the container type. If the container is - -- a derived type and the aspect is inherited, convert - -- container to parent type. The Cursor type is also - -- inherited from the scope of the parent. + declare + Decl : Node_Id; - if Base_Type (Etype (Container)) = - Base_Type (Etype (First_Formal (Default_Iter))) - then - Container_Arg := New_Copy_Tree (Container); + begin + Decl := + Make_Object_Declaration (Loc, + Defining_Identifier => Cursor, + Object_Definition => + New_Occurrence_Of (Etype (Cursor), Loc), + Expression => + Make_Selected_Component (Loc, + Prefix => New_Reference_To (Iterator, Loc), + Selector_Name => + Make_Identifier (Loc, Name_Init))); - else - Container_Arg := - Make_Type_Conversion (Loc, - Subtype_Mark => - New_Occurrence_Of - (Etype (First_Formal (Default_Iter)), Loc), - Expression => New_Copy_Tree (Container)); - end if; + -- The cursor is only modified in expanded code, so it appears + -- as unassigned to the warning machinery. We must suppress + -- this spurious warning explicitly. - Rewrite (Name (I_Spec), - Make_Function_Call (Loc, - Name => New_Occurrence_Of (Default_Iter, Loc), - Parameter_Associations => - New_List (Container_Arg))); - Analyze_And_Resolve (Name (I_Spec)); - - -- Find cursor type in proper iterator package, which is an - -- instantiation of Iterator_Interfaces. - - Ent := First_Entity (Pack); - while Present (Ent) loop - if Chars (Ent) = Name_Cursor then - Set_Etype (Cursor, Etype (Ent)); - exit; - end if; - Next_Entity (Ent); - end loop; + Set_Warnings_Off (Cursor); + Set_Assignment_OK (Decl); - -- Generate: - -- Id : Element_Type renames Container (Cursor); - -- This assumes that the container type has an indexing - -- operation with Cursor. The check that this operation - -- exists is performed in Check_Container_Indexing. - - Decl := - Make_Object_Renaming_Declaration (Loc, - Defining_Identifier => Id, - Subtype_Mark => - New_Reference_To (Element_Type, Loc), - Name => - Make_Indexed_Component (Loc, - Prefix => Relocate_Node (Container_Arg), - Expressions => - New_List (New_Occurrence_Of (Cursor, Loc)))); - - -- If the container holds controlled objects, wrap the loop - -- statements and element renaming declaration with a block. - -- This ensures that the result of Element (Cusor) is - -- cleaned up after each iteration of the loop. - - if Needs_Finalization (Element_Type) then - - -- Generate: - -- declare - -- Id : Element_Type := Element (curosr); - -- begin - -- <original loop statements> - -- end; - - Stats := New_List ( - Make_Block_Statement (Loc, - Declarations => New_List (Decl), - Handled_Statement_Sequence => - Make_Handled_Sequence_Of_Statements (Loc, - Statements => Stats))); - - -- Elements do not need finalization + Insert_Action (N, Decl); + end; - else - Prepend_To (Stats, Decl); - end if; - end; + -- If the range of iteration is given by a function call that + -- returns a container, the finalization actions have been saved + -- in the Condition_Actions of the iterator. Insert them now at + -- the head of the loop. - -- X in Iterate (S) : type of iterator is type of explicitly - -- given Iterate function, and the loop variable is the cursor. - -- It will be assigned in the loop and must be a variable. + if Present (Condition_Actions (Isc)) then + Insert_List_Before (N, Condition_Actions (Isc)); + end if; + end; - else - Cursor := Id; - Set_Ekind (Cursor, E_Variable); - end if; + Rewrite (N, New_Loop); + Analyze (N); + end Expand_Iterator_Loop; - Iterator := Make_Temporary (Loc, 'I'); + ------------------------------------- + -- Expand_Iterator_Loop_Over_Array -- + ------------------------------------- + + procedure Expand_Iterator_Loop_Over_Array (N : Node_Id) is + Isc : constant Node_Id := Iteration_Scheme (N); + I_Spec : constant Node_Id := Iterator_Specification (Isc); + Array_Node : constant Node_Id := Name (I_Spec); + Array_Typ : constant Entity_Id := Base_Type (Etype (Array_Node)); + Array_Dim : constant Pos := Number_Dimensions (Array_Typ); + Id : constant Entity_Id := Defining_Identifier (I_Spec); + Loc : constant Source_Ptr := Sloc (N); + Stats : constant List_Id := Statements (N); + Core_Loop : Node_Id; + Ind_Comp : Node_Id; + Iterator : Entity_Id; + + -- Start of processing for Expand_Iterator_Loop_Over_Array - -- Determine the advancement and initialization steps for the - -- cursor. + begin + -- for Element of Array loop - -- Analysis of the expanded loop will verify that the container - -- has a reverse iterator. + -- This case requires an internally generated cursor to iterate over + -- the array. - if Reverse_Present (I_Spec) then - Name_Init := Name_Last; - Name_Step := Name_Previous; + if Of_Present (I_Spec) then + Iterator := Make_Temporary (Loc, 'C'); - else - Name_Init := Name_First; - Name_Step := Name_Next; - end if; + -- Generate: + -- Element : Component_Type renames Array (Iterator); - -- For both iterator forms, add a call to the step operation to - -- advance the cursor. Generate: + Ind_Comp := + Make_Indexed_Component (Loc, + Prefix => Relocate_Node (Array_Node), + Expressions => New_List (New_Reference_To (Iterator, Loc))); - -- Cursor := Iterator.Next (Cursor); + Prepend_To (Stats, + Make_Object_Renaming_Declaration (Loc, + Defining_Identifier => Id, + Subtype_Mark => + New_Reference_To (Component_Type (Array_Typ), Loc), + Name => Ind_Comp)); - -- or else + -- for Index in Array loop - -- Cursor := Next (Cursor); + -- This case utilizes the already given iterator name - declare - Rhs : Node_Id; + else + Iterator := Id; + end if; - begin - Rhs := - Make_Function_Call (Loc, - Name => - Make_Selected_Component (Loc, - Prefix => New_Reference_To (Iterator, Loc), - Selector_Name => Make_Identifier (Loc, Name_Step)), - Parameter_Associations => New_List ( - New_Reference_To (Cursor, Loc))); + -- Generate: - Append_To (Stats, - Make_Assignment_Statement (Loc, - Name => New_Occurrence_Of (Cursor, Loc), - Expression => Rhs)); - end; + -- for Iterator in [reverse] Array'Range (Array_Dim) loop + -- Element : Component_Type renames Array (Iterator); + -- <original loop statements> + -- end loop; - -- Generate: - -- while Iterator.Has_Element loop - -- <Stats> - -- end loop; + Core_Loop := + Make_Loop_Statement (Loc, + Iteration_Scheme => + Make_Iteration_Scheme (Loc, + Loop_Parameter_Specification => + Make_Loop_Parameter_Specification (Loc, + Defining_Identifier => Iterator, + Discrete_Subtype_Definition => + Make_Attribute_Reference (Loc, + Prefix => Relocate_Node (Array_Node), + Attribute_Name => Name_Range, + Expressions => New_List ( + Make_Integer_Literal (Loc, Array_Dim))), + Reverse_Present => Reverse_Present (I_Spec))), + Statements => Stats, + End_Label => Empty); + + -- Processing for multidimensional array + + if Array_Dim > 1 then + for Dim in 1 .. Array_Dim - 1 loop + Iterator := Make_Temporary (Loc, 'C'); + + -- Generate the dimension loops starting from the innermost one - -- Has_Element is the second actual in the iterator package + -- for Iterator in [reverse] Array'Range (Array_Dim - Dim) loop + -- <core loop> + -- end loop; - New_Loop := + Core_Loop := Make_Loop_Statement (Loc, Iteration_Scheme => Make_Iteration_Scheme (Loc, - Condition => - Make_Function_Call (Loc, - Name => - New_Occurrence_Of ( - Next_Entity (First_Entity (Pack)), Loc), - Parameter_Associations => - New_List ( - New_Reference_To (Cursor, Loc)))), - - Statements => Stats, - End_Label => Empty); - - -- Create the declarations for Iterator and cursor and insert them - -- before the source loop. Given that the domain of iteration is - -- already an entity, the iterator is just a renaming of that - -- entity. Possible optimization ??? - -- Generate: - - -- I : Iterator_Type renames Container; - -- C : Cursor_Type := Container.[First | Last]; - - Insert_Action (N, - Make_Object_Renaming_Declaration (Loc, - Defining_Identifier => Iterator, - Subtype_Mark => New_Occurrence_Of (Iter_Type, Loc), - Name => Relocate_Node (Name (I_Spec)))); - - -- Create declaration for cursor - - declare - Decl : Node_Id; - - begin - Decl := - Make_Object_Declaration (Loc, - Defining_Identifier => Cursor, - Object_Definition => - New_Occurrence_Of (Etype (Cursor), Loc), - Expression => - Make_Selected_Component (Loc, - Prefix => New_Reference_To (Iterator, Loc), - Selector_Name => - Make_Identifier (Loc, Name_Init))); - - -- The cursor is only modified in expanded code, so it appears - -- as unassigned to the warning machinery. We must suppress - -- this spurious warning explicitly. - - Set_Warnings_Off (Cursor); - Set_Assignment_OK (Decl); - - Insert_Action (N, Decl); - end; - - -- If the range of iteration is given by a function call that - -- returns a container, the finalization actions have been saved - -- in the Condition_Actions of the iterator. Insert them now at - -- the head of the loop. - - if Present (Condition_Actions (Isc)) then - Insert_List_Before (N, Condition_Actions (Isc)); - end if; - end; + Loop_Parameter_Specification => + Make_Loop_Parameter_Specification (Loc, + Defining_Identifier => Iterator, + Discrete_Subtype_Definition => + Make_Attribute_Reference (Loc, + Prefix => Relocate_Node (Array_Node), + Attribute_Name => Name_Range, + Expressions => New_List ( + Make_Integer_Literal (Loc, Array_Dim - Dim))), + Reverse_Present => Reverse_Present (I_Spec))), + Statements => New_List (Core_Loop), + End_Label => Empty); + + -- Update the previously created object renaming declaration with + -- the new iterator. + + Prepend_To (Expressions (Ind_Comp), + New_Reference_To (Iterator, Loc)); + end loop; end if; - Rewrite (N, New_Loop); + Rewrite (N, Core_Loop); Analyze (N); - end Expand_Iterator_Loop; + end Expand_Iterator_Loop_Over_Array; ----------------------------- -- Expand_N_Loop_Statement -- diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb index b4d46b4c1aa..7b6b296456c 100644 --- a/gcc/ada/exp_ch6.adb +++ b/gcc/ada/exp_ch6.adb @@ -51,6 +51,7 @@ with Namet; use Namet; with Nlists; use Nlists; with Nmake; use Nmake; with Opt; use Opt; +with Output; use Output; with Restrict; use Restrict; with Rident; use Rident; with Rtsfind; use Rtsfind; @@ -69,6 +70,7 @@ with Sem_Res; use Sem_Res; with Sem_SCIL; use Sem_SCIL; with Sem_Util; use Sem_Util; with Sinfo; use Sinfo; +with Sinput; use Sinput; with Snames; use Snames; with Stand; use Stand; with Targparm; use Targparm; @@ -78,6 +80,10 @@ with Validsw; use Validsw; package body Exp_Ch6 is + Inlined_Calls : Elist_Id := No_Elist; + Backend_Calls : Elist_Id := No_Elist; + -- List of frontend inlined calls and inline calls passed to the backend + ----------------------- -- Local Subprograms -- ----------------------- @@ -1418,11 +1424,14 @@ package body Exp_Ch6 is if Is_By_Reference_Type (Etype (Formal)) then - -- If the front-end does not perform full type layout, the actual - -- may in fact be properly aligned but there is not enough front-end - -- information to determine this. In that case gigi will emit an - -- error if a copy is not legal, or generate the proper code. - -- For other backends we report the error now. + -- If the front-end does not perform full type layout, the actual + -- may in fact be properly aligned but there is not enough front- + -- end information to determine this. In that case gigi will emit + -- an error if a copy is not legal, or generate the proper code. + -- For other backends we report the error now. + + -- Seems wrong to be issuing an error in the expander, since it + -- will be missed in -gnatc mode ??? if Frontend_Layout_On_Target then Error_Msg_N @@ -1856,6 +1865,19 @@ package body Exp_Ch6 is -- expression for the value of the actual, EF is the entity for the -- extra formal. + procedure Do_Inline (Subp : Entity_Id; Orig_Subp : Entity_Id); + -- Check and inline the body of Subp. Invoked when compiling with + -- optimizations enabled and Subp has pragma inline or inline always. + -- If the subprogram is a renaming, or if it is inherited, then Subp + -- references the renamed entity and Orig_Subp is the entity of the + -- call node N. + + procedure Do_Inline_Always (Subp : Entity_Id; Orig_Subp : Entity_Id); + -- Check and inline the body of Subp. Invoked when compiling without + -- optimizations and Subp has pragma inline always. If the subprogram is + -- a renaming, or if it is inherited, then Subp references the renamed + -- entity and Orig_Subp is the entity of the call node N. + function Inherited_From_Formal (S : Entity_Id) return Entity_Id; -- Within an instance, a type derived from a non-tagged formal derived -- type inherits from the original parent, not from the actual. The @@ -1865,6 +1887,9 @@ package body Exp_Ch6 is -- convoluted tree traversal before setting the proper subprogram to be -- called. + function In_Unfrozen_Instance (E : Entity_Id) return Boolean; + -- Return true if E comes from an instance that is not yet frozen + function Is_Direct_Deep_Call (Subp : Entity_Id) return Boolean; -- Determine if Subp denotes a non-dispatching call to a Deep routine @@ -1939,6 +1964,228 @@ package body Exp_Ch6 is end if; end Add_Extra_Actual; + ---------------- + -- Do_Inline -- + ---------------- + + procedure Do_Inline (Subp : Entity_Id; Orig_Subp : Entity_Id) is + Spec : constant Node_Id := Unit_Declaration_Node (Subp); + + procedure Do_Backend_Inline; + -- Check that the call can be safely passed to the backend. If true + -- then register the enclosing unit of Subp to Inlined_Bodies so that + -- the body of Subp can be retrieved and analyzed by the backend. + + procedure Register_Backend_Call (N : Node_Id); + -- Append N to the list Backend_Calls + + ----------------------- + -- Do_Backend_Inline -- + ----------------------- + + procedure Do_Backend_Inline is + begin + -- No extra test needed for init subprograms since we know they + -- are available to the backend! + + if Is_Init_Proc (Subp) then + Add_Inlined_Body (Subp); + Register_Backend_Call (Call_Node); + + -- Verify that if the body to inline is located in the current + -- unit the inlining does not occur earlier. This avoids + -- order-of-elaboration problems in the back end. + + elsif In_Same_Extended_Unit (Call_Node, Subp) + and then Nkind (Spec) = N_Subprogram_Declaration + and then Earlier_In_Extended_Unit + (Loc, Sloc (Body_To_Inline (Spec))) + then + Error_Msg_NE + ("cannot inline& (body not seen yet)?", + Call_Node, Subp); + + else + declare + Backend_Inline : Boolean := True; + + begin + -- If we are compiling a package body that is not the + -- main unit, it must be for inlining/instantiation + -- purposes, in which case we inline the call to insure + -- that the same temporaries are generated when compiling + -- the body by itself. Otherwise link errors can occur. + + -- If the function being called is itself in the main + -- unit, we cannot inline, because there is a risk of + -- double elaboration and/or circularity: the inlining + -- can make visible a private entity in the body of the + -- main unit, that gigi will see before its sees its + -- proper definition. + + if not (In_Extended_Main_Code_Unit (Call_Node)) + and then In_Package_Body + then + Backend_Inline := + not In_Extended_Main_Source_Unit (Subp); + end if; + + if Backend_Inline then + Add_Inlined_Body (Subp); + Register_Backend_Call (Call_Node); + end if; + end; + end if; + end Do_Backend_Inline; + + --------------------------- + -- Register_Backend_Call -- + --------------------------- + + procedure Register_Backend_Call (N : Node_Id) is + begin + if Backend_Calls = No_Elist then + Backend_Calls := New_Elmt_List; + end if; + + Append_Elmt (N, To => Backend_Calls); + end Register_Backend_Call; + + -- Start of processing for Do_Inline + + begin + -- Verify that the body to inline has already been seen + + if No (Spec) + or else Nkind (Spec) /= N_Subprogram_Declaration + or else No (Body_To_Inline (Spec)) + then + if Comes_From_Source (Subp) + and then Must_Inline (Subp) + then + Cannot_Inline + ("cannot inline& (body not seen yet)?", Call_Node, Subp); + + -- Let the back end handle it + + else + Do_Backend_Inline; + return; + end if; + + -- If this an inherited function that returns a private type, do not + -- inline if the full view is an unconstrained array, because such + -- calls cannot be inlined. + + elsif Present (Orig_Subp) + and then Is_Array_Type (Etype (Orig_Subp)) + and then not Is_Constrained (Etype (Orig_Subp)) + then + Cannot_Inline + ("cannot inline& (unconstrained array)?", Call_Node, Subp); + + else + Expand_Inlined_Call (Call_Node, Subp, Orig_Subp); + end if; + end Do_Inline; + + ---------------------- + -- Do_Inline_Always -- + ---------------------- + + procedure Do_Inline_Always (Subp : Entity_Id; Orig_Subp : Entity_Id) is + Spec : constant Node_Id := Unit_Declaration_Node (Subp); + Body_Id : Entity_Id; + + begin + if No (Spec) + or else Nkind (Spec) /= N_Subprogram_Declaration + or else No (Body_To_Inline (Spec)) + or else Serious_Errors_Detected /= 0 + then + return; + end if; + + Body_Id := Corresponding_Body (Spec); + + -- Verify that the body to inline has already been seen + + if No (Body_Id) + or else not Analyzed (Body_Id) + then + Set_Is_Inlined (Subp, False); + + if Comes_From_Source (Subp) then + + -- Report a warning only if the call is located in the unit of + -- the called subprogram; otherwise it is an error. + + if not In_Same_Extended_Unit (Call_Node, Subp) then + Cannot_Inline + ("cannot inline& (body not seen yet)", Call_Node, Subp, + Is_Serious => True); + + elsif In_Open_Scopes (Subp) then + + -- For backward compatibility we generate the same error + -- or warning of the previous implementation. This will + -- be changed when we definitely incorporate the new + -- support ??? + + if Front_End_Inlining + and then Optimization_Level = 0 + then + Error_Msg_N + ("call to recursive subprogram cannot be inlined?", + N); + + -- Do not emit error compiling runtime packages + + elsif Is_Predefined_File_Name + (Unit_File_Name (Get_Source_Unit (Subp))) + then + Error_Msg_N + ("call to recursive subprogram cannot be inlined?", + N); + + else + Error_Msg_N + ("call to recursive subprogram cannot be inlined", + N); + end if; + + else + Cannot_Inline + ("cannot inline& (body not seen yet)?", Call_Node, Subp); + end if; + end if; + + return; + + -- If this an inherited function that returns a private type, do not + -- inline if the full view is an unconstrained array, because such + -- calls cannot be inlined. + + elsif Present (Orig_Subp) + and then Is_Array_Type (Etype (Orig_Subp)) + and then not Is_Constrained (Etype (Orig_Subp)) + then + Cannot_Inline + ("cannot inline& (unconstrained array)?", Call_Node, Subp); + + -- If the called subprogram comes from an instance in the same + -- unit, and the instance is not yet frozen, inlining might + -- trigger order-of-elaboration problems. + + elsif In_Unfrozen_Instance (Scope (Subp)) then + Cannot_Inline + ("cannot inline& (unfrozen instance)?", Call_Node, Subp); + + else + Expand_Inlined_Call (Call_Node, Subp, Orig_Subp); + end if; + end Do_Inline_Always; + --------------------------- -- Inherited_From_Formal -- --------------------------- @@ -2038,6 +2285,29 @@ package body Exp_Ch6 is raise Program_Error; end Inherited_From_Formal; + -------------------------- + -- In_Unfrozen_Instance -- + -------------------------- + + function In_Unfrozen_Instance (E : Entity_Id) return Boolean is + S : Entity_Id; + + begin + S := E; + while Present (S) and then S /= Standard_Standard loop + if Is_Generic_Instance (S) + and then Present (Freeze_Node (S)) + and then not Analyzed (Freeze_Node (S)) + then + return True; + end if; + + S := Scope (S); + end loop; + + return False; + end In_Unfrozen_Instance; + ------------------------- -- Is_Direct_Deep_Call -- ------------------------- @@ -2082,9 +2352,7 @@ package body Exp_Ch6 is Res : constant Node_Id := Duplicate_Subexpr (From); begin if Is_Access_Type (Etype (From)) then - return - Make_Explicit_Dereference (Sloc (From), - Prefix => Res); + return Make_Explicit_Dereference (Sloc (From), Prefix => Res); else return Res; end if; @@ -3428,45 +3696,13 @@ package body Exp_Ch6 is return; end if; - if Is_Inlined (Subp) then + -- Handle inlining (old semantics) + if Is_Inlined (Subp) and then not Debug_Flag_Dot_K then Inlined_Subprogram : declare Bod : Node_Id; Must_Inline : Boolean := False; Spec : constant Node_Id := Unit_Declaration_Node (Subp); - Scop : constant Entity_Id := Scope (Subp); - - function In_Unfrozen_Instance return Boolean; - -- If the subprogram comes from an instance in the same unit, - -- and the instance is not yet frozen, inlining might trigger - -- order-of-elaboration problems in gigi. - - -------------------------- - -- In_Unfrozen_Instance -- - -------------------------- - - function In_Unfrozen_Instance return Boolean is - S : Entity_Id; - - begin - S := Scop; - while Present (S) - and then S /= Standard_Standard - loop - if Is_Generic_Instance (S) - and then Present (Freeze_Node (S)) - and then not Analyzed (Freeze_Node (S)) - then - return True; - end if; - - S := Scope (S); - end loop; - - return False; - end In_Unfrozen_Instance; - - -- Start of processing for Inlined_Subprogram begin -- Verify that the body to inline has already been seen, and @@ -3492,7 +3728,7 @@ package body Exp_Ch6 is then Must_Inline := False; - elsif In_Unfrozen_Instance then + elsif In_Unfrozen_Instance (Scope (Subp)) then Must_Inline := False; else @@ -3546,6 +3782,38 @@ package body Exp_Ch6 is end if; end if; end Inlined_Subprogram; + + -- Handle inlining (new semantics) + + elsif Is_Inlined (Subp) then + declare + Spec : constant Node_Id := Unit_Declaration_Node (Subp); + + begin + if Must_Inline (Subp) then + if In_Extended_Main_Code_Unit (Call_Node) + and then In_Same_Extended_Unit (Sloc (Spec), Loc) + and then not Has_Completion (Subp) + then + Cannot_Inline + ("cannot inline& (body not seen yet)?", + Call_Node, Subp); + + else + Do_Inline_Always (Subp, Orig_Subp); + end if; + + elsif Optimization_Level > 0 then + Do_Inline (Subp, Orig_Subp); + end if; + + -- The call may have been inlined or may have been passed to + -- the backend. No further action needed if it was inlined. + + if Nkind (N) /= N_Function_Call then + return; + end if; + end; end if; end if; @@ -3776,9 +4044,9 @@ package body Exp_Ch6 is Remove_Side_Effects (N); end Expand_Ctrl_Function_Call; - -------------------------- + ------------------------- -- Expand_Inlined_Call -- - -------------------------- + ------------------------- procedure Expand_Inlined_Call (N : Node_Id; @@ -3793,7 +4061,6 @@ package body Exp_Ch6 is Body_To_Inline (Unit_Declaration_Node (Subp)); Blk : Node_Id; - Bod : Node_Id; Decl : Node_Id; Decls : constant List_Id := New_List; Exit_Lab : Entity_Id := Empty; @@ -3807,7 +4074,7 @@ package body Exp_Ch6 is Targ : Node_Id; -- The target of the call. If context is an assignment statement then - -- this is the left-hand side of the assignment. else it is a temporary + -- this is the left-hand side of the assignment, else it is a temporary -- to which the return value is assigned prior to rewriting the call. Targ1 : Node_Id; @@ -3819,9 +4086,8 @@ package body Exp_Ch6 is Return_Object : Entity_Id := Empty; -- Entity in declaration in an extended_return_statement - Is_Unc : constant Boolean := - Is_Array_Type (Etype (Subp)) - and then not Is_Constrained (Etype (Subp)); + Is_Unc : Boolean; + Is_Unc_Decl : Boolean; -- If the type returned by the function is unconstrained and the call -- can be inlined, special processing is required. @@ -3842,6 +4108,12 @@ package body Exp_Ch6 is -- Ada.Tags. If Debug_Generated_Code is true, suppress this change to -- simplify our own development. + procedure Reset_Dispatching_Calls (N : Node_Id); + -- In subtree N search for occurrences of dispatching calls that use the + -- Ada 2005 Object.Operation notation and the object is a formal of the + -- inlined subprogram. Reset the entity associated with Operation in all + -- the found occurrences. + procedure Rewrite_Function_Call (N : Node_Id; Blk : Node_Id); -- If the function body is a single expression, replace call with -- expression, else insert block appropriately. @@ -4020,6 +4292,13 @@ package body Exp_Ch6 is end if; Set_Assignment_OK (Name (Assign)); + + if No (Handled_Statement_Sequence (N)) then + Set_Handled_Statement_Sequence (N, + Make_Handled_Sequence_Of_Statements (Loc, + Statements => New_List)); + end if; + Prepend (Assign, Statements (Handled_Statement_Sequence (N))); end if; @@ -4065,6 +4344,47 @@ package body Exp_Ch6 is procedure Reset_Slocs is new Traverse_Proc (Process_Sloc); + ------------------------------ + -- Reset_Dispatching_Calls -- + ------------------------------ + + procedure Reset_Dispatching_Calls (N : Node_Id) is + + function Do_Reset (N : Node_Id) return Traverse_Result; + -- Comment required ??? + + -------------- + -- Do_Reset -- + -------------- + + function Do_Reset (N : Node_Id) return Traverse_Result is + begin + if Nkind (N) = N_Procedure_Call_Statement + and then Nkind (Name (N)) = N_Selected_Component + and then Nkind (Prefix (Name (N))) = N_Identifier + and then Is_Formal (Entity (Prefix (Name (N)))) + and then Is_Dispatching_Operation + (Entity (Selector_Name (Name (N)))) + then + Set_Entity (Selector_Name (Name (N)), Empty); + end if; + + return OK; + end Do_Reset; + + function Do_Reset_Calls is new Traverse_Func (Do_Reset); + + -- Local variables + + Dummy : constant Traverse_Result := Do_Reset_Calls (N); + pragma Unreferenced (Dummy); + + -- Start of processing for Reset_Dispatching_Calls + + begin + null; + end Reset_Dispatching_Calls; + --------------------------- -- Rewrite_Function_Call -- --------------------------- @@ -4135,10 +4455,20 @@ package body Exp_Ch6 is end; elsif Nkind (Parent (N)) = N_Object_Declaration then - Set_Expression (Parent (N), Empty); - Insert_After (Parent (N), Blk); - elsif Is_Unc then + -- A call to a function which returns an unconstrained type + -- found in the expression initializing an object-declaration is + -- expanded into a procedure call which must be added after the + -- object declaration. + + if Is_Unc_Decl and then Debug_Flag_Dot_K then + Insert_Action_After (Parent (N), Blk); + else + Set_Expression (Parent (N), Empty); + Insert_After (Parent (N), Blk); + end if; + + elsif Is_Unc and then not Debug_Flag_Dot_K then Insert_Before (Parent (N), Blk); end if; end Rewrite_Function_Call; @@ -4231,6 +4561,19 @@ package body Exp_Ch6 is -- Start of processing for Expand_Inlined_Call begin + -- Initializations for old/new semantics + + if not Debug_Flag_Dot_K then + Is_Unc := Is_Array_Type (Etype (Subp)) + and then not Is_Constrained (Etype (Subp)); + Is_Unc_Decl := False; + else + Is_Unc := Returns_Unconstrained_Type (Subp) + and then Optimization_Level > 0; + Is_Unc_Decl := Nkind (Parent (N)) = N_Object_Declaration + and then Is_Unc; + end if; + -- Check for an illegal attempt to inline a recursive procedure. If the -- subprogram has parameters this is detected when trying to supply a -- binding for parameters that already have one. For parameterless @@ -4240,6 +4583,24 @@ package body Exp_Ch6 is Error_Msg_N ("call to recursive subprogram cannot be inlined?", N); Set_Is_Inlined (Subp, False); return; + + -- Skip inlining if this is not a true inlining since the attribute + -- Body_To_Inline is also set for renamings (see sinfo.ads) + + elsif Nkind (Orig_Bod) in N_Entity then + return; + + -- Skip inlining if the function returns an unconstrained type using + -- an extended return statement since this part of the new inlining + -- model which is not yet supported by the current implementation. ??? + + elsif Is_Unc + and then + Nkind (First (Statements (Handled_Statement_Sequence (Orig_Bod)))) + = N_Extended_Return_Statement + and then not Debug_Flag_Dot_K + then + return; end if; if Nkind (Orig_Bod) = N_Defining_Identifier @@ -4261,6 +4622,14 @@ package body Exp_Ch6 is return; end if; + -- Register the call in the list of inlined calls + + if Inlined_Calls = No_Elist then + Inlined_Calls := New_Elmt_List; + end if; + + Append_Elmt (N, To => Inlined_Calls); + -- Use generic machinery to copy body of inlined subprogram, as if it -- were an instantiation, resetting source locations appropriately, so -- that nested inlined calls appear in the main unit. @@ -4268,32 +4637,137 @@ package body Exp_Ch6 is Save_Env (Subp, Empty); Set_Copied_Sloc_For_Inlined_Body (N, Defining_Entity (Orig_Bod)); - Bod := Copy_Generic_Node (Orig_Bod, Empty, Instantiating => True); - Blk := - Make_Block_Statement (Loc, - Declarations => Declarations (Bod), - Handled_Statement_Sequence => Handled_Statement_Sequence (Bod)); + -- Old semantics - if No (Declarations (Bod)) then - Set_Declarations (Blk, New_List); - end if; + if not Debug_Flag_Dot_K then + declare + Bod : Node_Id; - -- For the unconstrained case, capture the name of the local variable - -- that holds the result. This must be the first declaration in the - -- block, because its bounds cannot depend on local variables. Otherwise - -- there is no way to declare the result outside of the block. Needless - -- to say, in general the bounds will depend on the actuals in the call. + begin + Bod := Copy_Generic_Node (Orig_Bod, Empty, Instantiating => True); + Blk := + Make_Block_Statement (Loc, + Declarations => Declarations (Bod), + Handled_Statement_Sequence => + Handled_Statement_Sequence (Bod)); - -- If the context is an assignment statement, as is the case for the - -- expansion of an extended return, the left-hand side provides bounds - -- even if the return type is unconstrained. + if No (Declarations (Bod)) then + Set_Declarations (Blk, New_List); + end if; - if Is_Unc then - if Nkind (Parent (N)) /= N_Assignment_Statement then - Targ1 := Defining_Identifier (First (Declarations (Blk))); - else - Targ1 := Name (Parent (N)); - end if; + -- For the unconstrained case, capture the name of the local + -- variable that holds the result. This must be the first + -- declaration in the block, because its bounds cannot depend + -- on local variables. Otherwise there is no way to declare the + -- result outside of the block. Needless to say, in general the + -- bounds will depend on the actuals in the call. + + -- If the context is an assignment statement, as is the case + -- for the expansion of an extended return, the left-hand side + -- provides bounds even if the return type is unconstrained. + + if Is_Unc then + declare + First_Decl : Node_Id; + + begin + First_Decl := First (Declarations (Blk)); + + if Nkind (First_Decl) /= N_Object_Declaration then + return; + end if; + + if Nkind (Parent (N)) /= N_Assignment_Statement then + Targ1 := Defining_Identifier (First_Decl); + else + Targ1 := Name (Parent (N)); + end if; + end; + end if; + end; + + -- New semantics + + else + declare + Bod : Node_Id; + + begin + -- General case + + if not Is_Unc then + Bod := + Copy_Generic_Node (Orig_Bod, Empty, Instantiating => True); + Blk := + Make_Block_Statement (Loc, + Declarations => Declarations (Bod), + Handled_Statement_Sequence => + Handled_Statement_Sequence (Bod)); + + -- Inline a call to a function that returns an unconstrained type. + -- The semantic analyzer checked that frontend-inlined functions + -- returning unconstrained types have no declarations and have + -- a single extended return statement. As part of its processing + -- the function was split in two subprograms: a procedure P and + -- a function F that has a block with a call to procedure P (see + -- Split_Unconstrained_Function). + + else + pragma Assert + (Nkind + (First + (Statements (Handled_Statement_Sequence (Orig_Bod)))) + = N_Block_Statement); + + declare + Blk_Stmt : constant Node_Id := + First + (Statements + (Handled_Statement_Sequence (Orig_Bod))); + First_Stmt : constant Node_Id := + First + (Statements + (Handled_Statement_Sequence (Blk_Stmt))); + Second_Stmt : constant Node_Id := Next (First_Stmt); + + begin + pragma Assert + (Nkind (First_Stmt) = N_Procedure_Call_Statement + and then Nkind (Second_Stmt) = Sinfo.N_Return_Statement + and then No (Next (Second_Stmt))); + + Bod := + Copy_Generic_Node + (First + (Statements (Handled_Statement_Sequence (Orig_Bod))), + Empty, Instantiating => True); + Blk := Bod; + + -- Capture the name of the local variable that holds the + -- result. This must be the first declaration in the block, + -- because its bounds cannot depend on local variables. + -- Otherwise there is no way to declare the result outside + -- of the block. Needless to say, in general the bounds will + -- depend on the actuals in the call. + + if Nkind (Parent (N)) /= N_Assignment_Statement then + Targ1 := Defining_Identifier (First (Declarations (Blk))); + + -- If the context is an assignment statement, as is the case + -- for the expansion of an extended return, the left-hand + -- side provides bounds even if the return type is + -- unconstrained. + + else + Targ1 := Name (Parent (N)); + end if; + end; + end if; + + if No (Declarations (Bod)) then + Set_Declarations (Blk, New_List); + end if; + end; end if; -- If this is a derived function, establish the proper return type @@ -4463,6 +4937,16 @@ package body Exp_Ch6 is then Targ := Defining_Identifier (Parent (N)); + -- New semantics: In an object declaration avoid an extra copy + -- of the result of a call to an inlined function that returns + -- an unconstrained type + + elsif Debug_Flag_Dot_K + and then Nkind (Parent (N)) = N_Object_Declaration + and then Is_Unc + then + Targ := Defining_Identifier (Parent (N)); + else -- Replace call with temporary and create its declaration @@ -4503,6 +4987,80 @@ package body Exp_Ch6 is Insert_Actions (N, Decls); + if Is_Unc_Decl then + + -- Special management for inlining a call to a function that returns + -- an unconstrained type and initializes an object declaration: we + -- avoid generating undesired extra calls and goto statements. + + -- Given: + -- function Func (...) return ... + -- begin + -- declare + -- Result : String (1 .. 4); + -- begin + -- Proc (Result, ...); + -- return Result; + -- end; + -- end F; + + -- Result : String := Func (...); + + -- Replace this object declaration by: + + -- Result : String (1 .. 4); + -- Proc (Result, ...); + + Remove_Homonym (Targ); + + Decl := + Make_Object_Declaration + (Loc, + Defining_Identifier => Targ, + Object_Definition => + New_Copy_Tree (Object_Definition (Parent (Targ1)))); + Replace_Formals (Decl); + Rewrite (Parent (N), Decl); + Analyze (Parent (N)); + + -- Avoid spurious warnings since we know that this declaration is + -- referenced by the procedure call. + + Set_Never_Set_In_Source (Targ, False); + + -- Remove the local declaration of the extended return stmt from the + -- inlined code + + Remove (Parent (Targ1)); + + -- Update the reference to the result (since we have rewriten the + -- object declaration) + + declare + Blk_Call_Stmt : Node_Id; + + begin + -- Capture the call to the procedure + + Blk_Call_Stmt := + First (Statements (Handled_Statement_Sequence (Blk))); + pragma Assert + (Nkind (Blk_Call_Stmt) = N_Procedure_Call_Statement); + + Remove (First (Parameter_Associations (Blk_Call_Stmt))); + Prepend_To (Parameter_Associations (Blk_Call_Stmt), + New_Reference_To (Targ, Loc)); + end; + + -- Remove the return statement + + pragma Assert + (Nkind (Last (Statements (Handled_Statement_Sequence (Blk)))) + = Sinfo.N_Return_Statement); + + Remove (Last (Statements (Handled_Statement_Sequence (Blk)))); + end if; + -- Traverse the tree and replace formals with actuals or their thunks. -- Attach block to tree before analysis and rewriting. @@ -4513,7 +5071,13 @@ package body Exp_Ch6 is Reset_Slocs (Blk); end if; - if Present (Exit_Lab) then + if Is_Unc_Decl then + + -- No action needed since return statement has been already removed! + + null; + + elsif Present (Exit_Lab) then -- If the body was a single expression, the single return statement -- and the corresponding label are useless. @@ -4544,8 +5108,18 @@ package body Exp_Ch6 is if Is_Predef then declare Style : constant Boolean := Style_Check; + begin Style_Check := False; + + -- Search for dispatching calls that use the Object.Operation + -- notation using an Object that is a parameter of the inlined + -- function. We reset the decoration of Operation to force + -- the reanalysis of the inlined dispatching call because + -- the actual object has been inlined. + + Reset_Dispatching_Calls (Blk); + Analyze (Blk, Suppress => All_Checks); Style_Check := Style; end; @@ -4563,11 +5137,14 @@ package body Exp_Ch6 is else Rewrite_Function_Call (N, Blk); + if Is_Unc_Decl then + null; + -- For the unconstrained case, the replacement of the call has been -- made prior to the complete analysis of the generated declarations. -- Propagate the proper type now. - if Is_Unc then + elsif Is_Unc then if Nkind (N) = N_Identifier then Set_Etype (N, Etype (Entity (N))); else @@ -5546,8 +6123,8 @@ package body Exp_Ch6 is -- Alpha/VMS, no-op everywhere else). -- Comes_From_Source intercepts recursive expansion. - if Vax_Float (Etype (N)) - and then Nkind (N) = N_Function_Call + if Nkind (N) = N_Function_Call + and then Vax_Float (Etype (N)) and then Present (Name (N)) and then Present (Entity (Name (N))) and then Has_Foreign_Convention (Entity (Name (N))) @@ -6130,7 +6707,6 @@ package body Exp_Ch6 is begin Set_Has_Completion (Subp, False); - -- Set_Has_Delayed_Freeze (Subp); Append_Freeze_Action (Subp, Bod); -- The body now contains raise statements, so calls to it will @@ -8623,4 +9199,75 @@ package body Exp_Ch6 is end if; end Needs_Result_Accessibility_Level; + ------------------------ + -- List_Inlining_Info -- + ------------------------ + + procedure List_Inlining_Info is + Elmt : Elmt_Id; + Nod : Node_Id; + Count : Nat; + + begin + if not Debug_Flag_Dot_J then + return; + end if; + + -- Generate listing of calls inlined by the frontend + + if Present (Inlined_Calls) then + Count := 0; + Elmt := First_Elmt (Inlined_Calls); + while Present (Elmt) loop + Nod := Node (Elmt); + + if In_Extended_Main_Code_Unit (Nod) then + Count := Count + 1; + + if Count = 1 then + Write_Str ("Listing of frontend inlined calls"); + Write_Eol; + end if; + + Write_Str (" "); + Write_Int (Count); + Write_Str (":"); + Write_Location (Sloc (Nod)); + Write_Str (":"); + Output.Write_Eol; + end if; + + Next_Elmt (Elmt); + end loop; + end if; + + -- Generate listing of calls passed to the backend + + if Present (Backend_Calls) then + Count := 0; + + Elmt := First_Elmt (Backend_Calls); + while Present (Elmt) loop + Nod := Node (Elmt); + + if In_Extended_Main_Code_Unit (Nod) then + Count := Count + 1; + + if Count = 1 then + Write_Str ("Listing of inlined calls passed to the backend"); + Write_Eol; + end if; + + Write_Str (" "); + Write_Int (Count); + Write_Str (":"); + Write_Location (Sloc (Nod)); + Output.Write_Eol; + end if; + + Next_Elmt (Elmt); + end loop; + end if; + end List_Inlining_Info; + end Exp_Ch6; diff --git a/gcc/ada/exp_ch6.ads b/gcc/ada/exp_ch6.ads index 77df2b7da42..42ba07d20c2 100644 --- a/gcc/ada/exp_ch6.ads +++ b/gcc/ada/exp_ch6.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -157,6 +157,10 @@ package Exp_Ch6 is -- Predicate to recognize stubbed procedures and null procedures, which -- can be inlined unconditionally in all cases. + procedure List_Inlining_Info; + -- Generate listing of calls inlined by the frontend plus listing of + -- calls to inline subprograms passed to the backend. + procedure Make_Build_In_Place_Call_In_Allocator (Allocator : Node_Id; Function_Call : Node_Id); diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb index 9aac1230483..0347dcc5bd7 100644 --- a/gcc/ada/exp_ch7.adb +++ b/gcc/ada/exp_ch7.adb @@ -1372,6 +1372,37 @@ package body Exp_Ch7 is Fin_Id := Make_Defining_Identifier (Loc, Chars => New_External_Name (Name_uFinalizer)); + + -- The visibility semantics of AT_END handlers force a strange + -- separation of spec and body for stack-related finalizers: + + -- declare : Enclosing_Scope + -- procedure _finalizer; + -- begin + -- <controlled objects> + -- procedure _finalizer is + -- ... + -- at end + -- _finalizer; + -- end; + + -- Both spec and body are within the same construct and scope, but + -- the body is part of the handled sequence of statements. This + -- placement confuses the elaboration mechanism on targets where + -- AT_END handlers are expanded into "when all others" handlers: + + -- exception + -- when all others => + -- _finalizer; -- appears to require elab checks + -- at end + -- _finalizer; + -- end; + + -- Since the compiler guarantees that the body of a _finalizer is + -- always inserted in the same construct where the AT_END handler + -- resides, there is no need for elaboration checks. + + Set_Kill_Elaboration_Checks (Fin_Id); end if; -- Step 2: Creation of the finalizer specification @@ -1785,7 +1816,7 @@ package body Exp_Ch7 is and then Needs_Finalization (Obj_Typ) and then not (Ekind (Obj_Id) = E_Constant and then not Has_Completion (Obj_Id)) - and then not Is_Tag_To_CW_Conversion (Obj_Id) + and then not Is_Tag_To_Class_Wide_Conversion (Obj_Id) then Processing_Actions; @@ -1863,10 +1894,7 @@ package body Exp_Ch7 is -- Specific cases of object renamings - elsif Nkind (Decl) = N_Object_Renaming_Declaration - and then Nkind (Name (Decl)) = N_Explicit_Dereference - and then Nkind (Prefix (Name (Decl))) = N_Identifier - then + elsif Nkind (Decl) = N_Object_Renaming_Declaration then Obj_Id := Defining_Identifier (Decl); Obj_Typ := Base_Type (Etype (Obj_Id)); @@ -1888,6 +1916,19 @@ package body Exp_Ch7 is and then Present (Return_Flag_Or_Transient_Decl (Obj_Id)) then Processing_Actions (Has_No_Init => True); + + -- Detect a case where a source object has been initialized by + -- a controlled function call which was later rewritten as a + -- class-wide conversion of Ada.Tags.Displace. + + -- Obj : Class_Wide_Type := Function_Call (...); + + -- Temp : ... := Function_Call (...)'reference; + -- Obj : Class_Wide_Type renames + -- (... Ada.Tags.Displace (Temp)); + + elsif Is_Displacement_Of_Ctrl_Function_Result (Obj_Id) then + Processing_Actions (Has_No_Init => True); end if; -- Inspect the freeze node of an access-to-controlled type and diff --git a/gcc/ada/exp_disp.adb b/gcc/ada/exp_disp.adb index 23ffe90c5fd..e065538c72b 100644 --- a/gcc/ada/exp_disp.adb +++ b/gcc/ada/exp_disp.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -75,6 +75,12 @@ package body Exp_Disp is -- Ada 2005 (AI-251): Returns the fixed position in the dispatch table -- of the default primitive operations. + function Find_Specific_Type (CW : Entity_Id) return Entity_Id; + -- Find specific type of a class-wide type, and handle the case of an + -- incomplete type coming either from a limited_with clause or from an + -- incomplete type declaration. Shouldn't this be in Sem_Util? It seems + -- like a general purpose semantic routine ??? + function Has_DT (Typ : Entity_Id) return Boolean; pragma Inline (Has_DT); -- Returns true if we generate a dispatch table for tagged type Typ @@ -178,11 +184,7 @@ package body Exp_Disp is CW_Typ := Class_Wide_Type (Ctrl_Typ); end if; - Typ := Root_Type (CW_Typ); - - if Ekind (Typ) = E_Incomplete_Type then - Typ := Non_Limited_View (Typ); - end if; + Typ := Find_Specific_Type (CW_Typ); if not Is_Limited_Type (Typ) then Eq_Prim_Op := Find_Prim_Op (Typ, Name_Op_Eq); @@ -746,11 +748,7 @@ package body Exp_Disp is CW_Typ := Class_Wide_Type (Ctrl_Typ); end if; - Typ := Root_Type (CW_Typ); - - if Ekind (Typ) = E_Incomplete_Type then - Typ := Non_Limited_View (Typ); - end if; + Typ := Find_Specific_Type (CW_Typ); if not Is_Limited_Type (Typ) then Eq_Prim_Op := Find_Prim_Op (Typ, Name_Op_Eq); @@ -1884,6 +1882,25 @@ package body Exp_Disp is end if; end Expand_Interface_Thunk; + ------------------------ + -- Find_Specific_Type -- + ------------------------ + + function Find_Specific_Type (CW : Entity_Id) return Entity_Id is + Typ : Entity_Id := Root_Type (CW); + + begin + if Ekind (Typ) = E_Incomplete_Type then + if From_With_Type (Typ) then + Typ := Non_Limited_View (Typ); + else + Typ := Full_View (Typ); + end if; + end if; + + return Typ; + end Find_Specific_Type; + -------------------------- -- Has_CPP_Constructors -- -------------------------- diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index 98bd2f3b491..96498c2aa11 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -3940,6 +3940,92 @@ package body Exp_Util is return True; end Is_All_Null_Statements; + --------------------------------------------- + -- Is_Displacement_Of_Ctrl_Function_Result -- + --------------------------------------------- + + function Is_Displacement_Of_Ctrl_Function_Result + (Obj_Id : Entity_Id) return Boolean + is + function Initialized_By_Ctrl_Function (N : Node_Id) return Boolean; + -- Determine whether object declaration N is initialized by a controlled + -- function call. + + function Is_Displace_Call (N : Node_Id) return Boolean; + -- Determine whether a particular node is a call to Ada.Tags.Displace. + -- The call might be nested within other actions such as conversions. + + ---------------------------------- + -- Initialized_By_Ctrl_Function -- + ---------------------------------- + + function Initialized_By_Ctrl_Function (N : Node_Id) return Boolean is + Expr : constant Node_Id := Original_Node (Expression (N)); + begin + return + Nkind (Expr) = N_Function_Call + and then Needs_Finalization (Etype (Expr)); + end Initialized_By_Ctrl_Function; + + ---------------------- + -- Is_Displace_Call -- + ---------------------- + + function Is_Displace_Call (N : Node_Id) return Boolean is + Call : Node_Id := N; + + begin + -- Strip various actions which may precede a call to Displace + + loop + if Nkind (Call) = N_Explicit_Dereference then + Call := Prefix (Call); + + elsif Nkind_In (Call, N_Type_Conversion, + N_Unchecked_Type_Conversion) + then + Call := Expression (Call); + + else + exit; + end if; + end loop; + + return + Nkind (Call) = N_Function_Call + and then Is_RTE (Entity (Name (Call)), RE_Displace); + end Is_Displace_Call; + + -- Local variables + + Decl : constant Node_Id := Parent (Obj_Id); + Obj_Typ : constant Entity_Id := Base_Type (Etype (Obj_Id)); + Orig_Decl : constant Node_Id := Original_Node (Decl); + + -- Start of processing for Is_Displacement_Of_Ctrl_Function_Result + + begin + -- Detect the following case: + + -- Obj : Class_Wide_Type := Function_Call (...); + + -- which is rewritten into: + + -- Temp : ... := Function_Call (...)'reference; + -- Obj : Class_Wide_Type renames (... Ada.Tags.Displace (Temp)); + + -- when the return type of the function and the class-wide type require + -- dispatch table pointer displacement. + + return + Nkind (Decl) = N_Object_Renaming_Declaration + and then Nkind (Orig_Decl) = N_Object_Declaration + and then Comes_From_Source (Orig_Decl) + and then Initialized_By_Ctrl_Function (Orig_Decl) + and then Is_Class_Wide_Type (Obj_Typ) + and then Is_Displace_Call (Renamed_Object (Obj_Id)); + end Is_Displacement_Of_Ctrl_Function_Result; + ------------------------------ -- Is_Finalizable_Transient -- ------------------------------ @@ -4321,7 +4407,7 @@ package body Exp_Util is -- Do not consider conversions of tags to class-wide types - and then not Is_Tag_To_CW_Conversion (Obj_Id) + and then not Is_Tag_To_Class_Wide_Conversion (Obj_Id) -- Do not consider containers in the context of iterator loops. Such -- transient objects must exist for as long as the loop is around, @@ -4851,11 +4937,13 @@ package body Exp_Util is end if; end Is_Renamed_Object; - ----------------------------- - -- Is_Tag_To_CW_Conversion -- - ----------------------------- + ------------------------------------- + -- Is_Tag_To_Class_Wide_Conversion -- + ------------------------------------- - function Is_Tag_To_CW_Conversion (Obj_Id : Entity_Id) return Boolean is + function Is_Tag_To_Class_Wide_Conversion + (Obj_Id : Entity_Id) return Boolean + is Expr : constant Node_Id := Expression (Parent (Obj_Id)); begin @@ -4864,7 +4952,7 @@ package body Exp_Util is and then Present (Expr) and then Nkind (Expr) = N_Unchecked_Type_Conversion and then Etype (Expression (Expr)) = RTE (RE_Tag); - end Is_Tag_To_CW_Conversion; + end Is_Tag_To_Class_Wide_Conversion; ---------------------------- -- Is_Untagged_Derivation -- @@ -7015,7 +7103,7 @@ package body Exp_Util is and then Needs_Finalization (Obj_Typ) and then not (Ekind (Obj_Id) = E_Constant and then not Has_Completion (Obj_Id)) - and then not Is_Tag_To_CW_Conversion (Obj_Id) + and then not Is_Tag_To_Class_Wide_Conversion (Obj_Id) then return True; @@ -7064,10 +7152,7 @@ package body Exp_Util is -- Specific cases of object renamings - elsif Nkind (Decl) = N_Object_Renaming_Declaration - and then Nkind (Name (Decl)) = N_Explicit_Dereference - and then Nkind (Prefix (Name (Decl))) = N_Identifier - then + elsif Nkind (Decl) = N_Object_Renaming_Declaration then Obj_Id := Defining_Identifier (Decl); Obj_Typ := Base_Type (Etype (Obj_Id)); @@ -7089,6 +7174,19 @@ package body Exp_Util is and then Present (Return_Flag_Or_Transient_Decl (Obj_Id)) then return True; + + -- Detect a case where a source object has been initialized by a + -- controlled function call which was later rewritten as a class- + -- wide conversion of Ada.Tags.Displace. + + -- Obj : Class_Wide_Type := Function_Call (...); + + -- Temp : ... := Function_Call (...)'reference; + -- Obj : Class_Wide_Type renames + -- (... Ada.Tags.Displace (Temp)); + + elsif Is_Displacement_Of_Ctrl_Function_Result (Obj_Id) then + return True; end if; -- Inspect the freeze node of an access-to-controlled type and look diff --git a/gcc/ada/exp_util.ads b/gcc/ada/exp_util.ads index c0e0082185d..97e9b5c9a56 100644 --- a/gcc/ada/exp_util.ads +++ b/gcc/ada/exp_util.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -521,6 +521,12 @@ package Exp_Util is -- False otherwise. True for an empty list. It is an error to call this -- routine with No_List as the argument. + function Is_Displacement_Of_Ctrl_Function_Result + (Obj_Id : Entity_Id) return Boolean; + -- Determine whether Obj_Id is a source object that has been initialized by + -- a controlled function call later rewritten as a class-wide conversion of + -- Ada.Tags.Displace. + function Is_Finalizable_Transient (Decl : Node_Id; Rel_Node : Node_Id) return Boolean; @@ -587,7 +593,8 @@ package Exp_Util is -- We consider that a (1 .. 2) is a renamed object since it is the prefix -- of the name in the renaming declaration. - function Is_Tag_To_CW_Conversion (Obj_Id : Entity_Id) return Boolean; + function Is_Tag_To_Class_Wide_Conversion + (Obj_Id : Entity_Id) return Boolean; -- Determine whether object Obj_Id is the result of a tag-to-class-wide -- type conversion. diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 6325b4521c3..fc7600070f7 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -2129,6 +2129,26 @@ package body Freeze is Next_Entity (Comp); end loop; + -- Check compatibility of Scalar_Storage_Order with Bit_Order, if the + -- former is specified. + + ADC := Get_Attribute_Definition_Clause + (Rec, Attribute_Scalar_Storage_Order); + + if Present (ADC) + and then Reverse_Bit_Order (Rec) /= Reverse_Storage_Order (Rec) + then + if Bytes_Big_Endian = not Reverse_Storage_Order (Rec) then + Error_Msg_N + ("Scalar_Storage_Order High_Order_First is inconsistent with" + & " Bit_Order", ADC); + else + Error_Msg_N + ("Scalar_Storage_Order Low_Order_First is inconsistent with" + & " Bit_Order", ADC); + end if; + end if; + -- Deal with Bit_Order aspect specifying a non-default bit order if Reverse_Bit_Order (Rec) and then Base_Type (Rec) = Rec then @@ -4407,10 +4427,12 @@ package body Freeze is -- the size and alignment values. This processing is not required for -- generic types, since generic types do not play any part in code -- generation, and so the size and alignment values for such types - -- are irrelevant. + -- are irrelevant. Ditto for types declared within a generic unit, + -- which may have components that depend on generic parameters, and + -- that will be recreated in an instance. - if Is_Generic_Type (E) then - return Result; + if Inside_A_Generic then + null; -- Otherwise we call the layout procedure diff --git a/gcc/ada/g-bytswa-x86.adb b/gcc/ada/g-bytswa-x86.adb deleted file mode 100644 index cc47b729835..00000000000 --- a/gcc/ada/g-bytswa-x86.adb +++ /dev/null @@ -1,192 +0,0 @@ ------------------------------------------------------------------------------- --- -- --- GNAT RUN-TIME COMPONENTS -- --- -- --- G N A T . B Y T E _ S W A P P I N G -- --- -- --- B o d y -- --- -- --- Copyright (C) 2006-2010, AdaCore -- --- -- --- GNAT is free software; you can redistribute it and/or modify it under -- --- terms of the GNU General Public License as published by the Free Soft- -- --- ware Foundation; either version 3, or (at your option) any later ver- -- --- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- --- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- --- or FITNESS FOR A PARTICULAR PURPOSE. -- --- -- --- As a special exception under Section 7 of GPL version 3, you are granted -- --- additional permissions described in the GCC Runtime Library Exception, -- --- version 3.1, as published by the Free Software Foundation. -- --- -- --- You should have received a copy of the GNU General Public License and -- --- a copy of the GCC Runtime Library Exception along with this program; -- --- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- --- <http://www.gnu.org/licenses/>. -- --- -- --- GNAT was originally developed by the GNAT team at New York University. -- --- Extensive contributions were provided by Ada Core Technologies Inc. -- --- -- ------------------------------------------------------------------------------- - --- This is a machine-specific version of this package. --- It uses instructions available on Intel 486 processors (or later). - -with Interfaces; use Interfaces; -with System.Machine_Code; use System.Machine_Code; -with Ada.Unchecked_Conversion; - -package body GNAT.Byte_Swapping is - - ----------------------- - -- Local Subprograms -- - ----------------------- - - function Swapped32 (Value : Unsigned_32) return Unsigned_32; - pragma Inline_Always (Swapped32); - - -------------- - -- Swapped2 -- - -------------- - - function Swapped2 (Input : Item) return Item is - - function As_U16 is new Ada.Unchecked_Conversion - (Source => Item, Target => Unsigned_16); - - function As_Item is new Ada.Unchecked_Conversion - (Source => Unsigned_16, Target => Item); - - X : Unsigned_16 := As_U16 (Input); - - begin - Asm ("xchgb %b0,%h0", - Unsigned_16'Asm_Output ("=q", X), - Unsigned_16'Asm_Input ("0", X)); - return As_Item (X); - end Swapped2; - - -------------- - -- Swapped4 -- - -------------- - - function Swapped4 (Input : Item) return Item is - - function As_U32 is new Ada.Unchecked_Conversion - (Source => Item, Target => Unsigned_32); - - function As_Item is new Ada.Unchecked_Conversion - (Source => Unsigned_32, Target => Item); - - X : Unsigned_32 := As_U32 (Input); - - begin - Asm ("bswap %0", - Unsigned_32'Asm_Output ("=r", X), - Unsigned_32'Asm_Input ("0", X)); - return As_Item (X); - end Swapped4; - - -------------- - -- Swapped8 -- - -------------- - - function Swapped8 (Input : Item) return Item is - - function As_U64 is new Ada.Unchecked_Conversion - (Source => Item, Target => Unsigned_64); - - X : constant Unsigned_64 := As_U64 (Input); - - type Two_Words is array (0 .. 1) of Unsigned_32; - for Two_Words'Component_Size use Unsigned_32'Size; - - function As_Item is new Ada.Unchecked_Conversion - (Source => Two_Words, Target => Item); - - Result : Two_Words; - - begin - Asm ("xchgl %0,%1", - Outputs => - (Unsigned_32'Asm_Output ("=r", Result (0)), - Unsigned_32'Asm_Output ("=r", Result (1))), - Inputs => - (Unsigned_32'Asm_Input ("0", - Swapped32 (Unsigned_32 (X and 16#0000_0000_FFFF_FFFF#))), - Unsigned_32'Asm_Input ("1", - Swapped32 (Unsigned_32 (Shift_Right (X, 32)))))); - return As_Item (Result); - end Swapped8; - - ----------- - -- Swap2 -- - ----------- - - procedure Swap2 (Location : System.Address) is - - X : Unsigned_16; - for X'Address use Location; - - begin - Asm ("xchgb %b0,%h0", - Unsigned_16'Asm_Output ("=q", X), - Unsigned_16'Asm_Input ("0", X)); - end Swap2; - - ----------- - -- Swap4 -- - ----------- - - procedure Swap4 (Location : System.Address) is - - X : Unsigned_32; - for X'Address use Location; - - begin - Asm ("bswap %0", - Unsigned_32'Asm_Output ("=r", X), - Unsigned_32'Asm_Input ("0", X)); - end Swap4; - - --------------- - -- Swapped32 -- - --------------- - - function Swapped32 (Value : Unsigned_32) return Unsigned_32 is - X : Unsigned_32 := Value; - begin - Asm ("bswap %0", - Unsigned_32'Asm_Output ("=r", X), - Unsigned_32'Asm_Input ("0", X)); - return X; - end Swapped32; - - ----------- - -- Swap8 -- - ----------- - - procedure Swap8 (Location : System.Address) is - - X : Unsigned_64; - for X'Address use Location; - - type Two_Words is array (0 .. 1) of Unsigned_32; - for Two_Words'Component_Size use Unsigned_32'Size; - - Words : Two_Words; - for Words'Address use Location; - - begin - Asm ("xchgl %0,%1", - Outputs => - (Unsigned_32'Asm_Output ("=r", Words (0)), - Unsigned_32'Asm_Output ("=r", Words (1))), - Inputs => - (Unsigned_32'Asm_Input ("0", - Swapped32 (Unsigned_32 (X and 16#0000_0000_FFFF_FFFF#))), - Unsigned_32'Asm_Input ("1", - Swapped32 (Unsigned_32 (Shift_Right (X, 32)))))); - end Swap8; - -end GNAT.Byte_Swapping; diff --git a/gcc/ada/g-bytswa.adb b/gcc/ada/g-bytswa.adb index a4e629d16e7..329c078fff4 100644 --- a/gcc/ada/g-bytswa.adb +++ b/gcc/ada/g-bytswa.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2006-2010, AdaCore -- +-- Copyright (C) 2006-2012, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -29,31 +29,40 @@ -- -- ------------------------------------------------------------------------------ --- This is a general implementation that does not take advantage of --- any machine-specific instructions. +-- This is a general implementation that uses GCC intrinsics to take +-- advantage of any machine-specific instructions. -with Interfaces; use Interfaces; -with Ada.Unchecked_Conversion; +with Ada.Unchecked_Conversion; use Ada; package body GNAT.Byte_Swapping is + type U16 is mod 2**16; + type U32 is mod 2**32; + type U64 is mod 2**64; + + function Bswap_16 (X : U16) return U16 is (X / 256 or X * 256); + -- The above is an idiom recognized by GCC + + function Bswap_32 (X : U32) return U32; + pragma Import (Intrinsic, Bswap_32, "__builtin_bswap32"); + + function Bswap_64 (X : U64) return U64; + pragma Import (Intrinsic, Bswap_64, "__builtin_bswap64"); + -------------- -- Swapped2 -- -------------- function Swapped2 (Input : Item) return Item is + function As_U16 is new Unchecked_Conversion (Item, U16); + function As_Item is new Unchecked_Conversion (U16, Item); - function As_U16 is new Ada.Unchecked_Conversion - (Source => Item, Target => Unsigned_16); - - function As_Item is new Ada.Unchecked_Conversion - (Source => Unsigned_16, Target => Item); - - X : constant Unsigned_16 := As_U16 (Input); - + function Bswap_16 (X : U16) return U16 is (X / 256 or X * 256); + -- ??? Need to have function local here to allow inlining + pragma Compile_Time_Error (Item'Max_Size_In_Storage_Elements /= 2, + "storage size must be 2 bytes"); begin - return As_Item ((Shift_Left (X, 8) and 16#FF00#) or - (Shift_Right (X, 8) and 16#00FF#)); + return As_Item (Bswap_16 (As_U16 (Input))); end Swapped2; -------------- @@ -61,20 +70,12 @@ package body GNAT.Byte_Swapping is -------------- function Swapped4 (Input : Item) return Item is - - function As_U32 is new Ada.Unchecked_Conversion - (Source => Item, Target => Unsigned_32); - - function As_Item is new Ada.Unchecked_Conversion - (Source => Unsigned_32, Target => Item); - - X : constant Unsigned_32 := As_U32 (Input); - + function As_U32 is new Unchecked_Conversion (Item, U32); + function As_Item is new Unchecked_Conversion (U32, Item); + pragma Compile_Time_Error (Item'Max_Size_In_Storage_Elements /= 4, + "storage size must be 4 bytes"); begin - return As_Item ((Shift_Right (X, 24) and 16#0000_00FF#) or - (Shift_Right (X, 8) and 16#0000_FF00#) or - (Shift_Left (X, 8) and 16#00FF_0000#) or - (Shift_Left (X, 24) and 16#FF00_0000#)); + return As_Item (Bswap_32 (As_U32 (Input))); end Swapped4; -------------- @@ -82,24 +83,12 @@ package body GNAT.Byte_Swapping is -------------- function Swapped8 (Input : Item) return Item is - - function As_U64 is new Ada.Unchecked_Conversion - (Source => Item, Target => Unsigned_64); - - function As_Item is new Ada.Unchecked_Conversion - (Source => Unsigned_64, Target => Item); - - X : constant Unsigned_64 := As_U64 (Input); - - Low, High : aliased Unsigned_32; - + function As_U64 is new Unchecked_Conversion (Item, U64); + function As_Item is new Unchecked_Conversion (U64, Item); + pragma Compile_Time_Error (Item'Max_Size_In_Storage_Elements /= 8, + "storage size must be 8 bytes"); begin - Low := Unsigned_32 (X and 16#0000_0000_FFFF_FFFF#); - Swap4 (Low'Address); - High := Unsigned_32 (Shift_Right (X, 32)); - Swap4 (High'Address); - return As_Item - (Shift_Left (Unsigned_64 (Low), 32) or Unsigned_64 (High)); + return As_Item (Bswap_64 (As_U64 (Input))); end Swapped8; ----------- @@ -107,11 +96,10 @@ package body GNAT.Byte_Swapping is ----------- procedure Swap2 (Location : System.Address) is - X : Unsigned_16; + X : U16; for X'Address use Location; begin - X := (Shift_Left (X, 8) and 16#FF00#) or - (Shift_Right (X, 8) and 16#00FF#); + X := Bswap_16 (X); end Swap2; ----------- @@ -119,13 +107,10 @@ package body GNAT.Byte_Swapping is ----------- procedure Swap4 (Location : System.Address) is - X : Unsigned_32; + X : U32; for X'Address use Location; begin - X := (Shift_Right (X, 24) and 16#0000_00FF#) or - (Shift_Right (X, 8) and 16#0000_FF00#) or - (Shift_Left (X, 8) and 16#00FF_0000#) or - (Shift_Left (X, 24) and 16#FF00_0000#); + X := Bswap_32 (X); end Swap4; ----------- @@ -133,17 +118,9 @@ package body GNAT.Byte_Swapping is ----------- procedure Swap8 (Location : System.Address) is - X : Unsigned_64; + X : U64; for X'Address use Location; - - Low, High : aliased Unsigned_32; - begin - Low := Unsigned_32 (X and 16#0000_0000_FFFF_FFFF#); - Swap4 (Low'Address); - High := Unsigned_32 (Shift_Right (X, 32)); - Swap4 (High'Address); - X := Shift_Left (Unsigned_64 (Low), 32) or Unsigned_64 (High); + X := Bswap_64 (X); end Swap8; - end GNAT.Byte_Swapping; diff --git a/gcc/ada/g-trasym.adb b/gcc/ada/g-trasym.adb index ac2444e001e..a825f80b704 100644 --- a/gcc/ada/g-trasym.adb +++ b/gcc/ada/g-trasym.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2011, AdaCore -- +-- Copyright (C) 1999-2012, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -42,8 +42,7 @@ package body GNAT.Traceback.Symbolic is -- Symbolic_Traceback -- ------------------------ - function Symbolic_Traceback (Traceback : Tracebacks_Array) return String - is + function Symbolic_Traceback (Traceback : Tracebacks_Array) return String is begin if Traceback'Length = 0 then return ""; @@ -70,8 +69,7 @@ package body GNAT.Traceback.Symbolic is end if; end Symbolic_Traceback; - function Symbolic_Traceback (E : Exception_Occurrence) return String - is + function Symbolic_Traceback (E : Exception_Occurrence) return String is begin return Symbolic_Traceback (Tracebacks (E)); end Symbolic_Traceback; diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in index 46ee5434429..35ae15abf20 100644 --- a/gcc/ada/gcc-interface/Make-lang.in +++ b/gcc/ada/gcc-interface/Make-lang.in @@ -667,6 +667,7 @@ ada/doctools/xgnatugn$(build_exeext): ada/xgnatugn.adb doc/gnat_ugn.texi: $(srcdir)/ada/gnat_ugn.texi $(srcdir)/ada/ug_words \ doc/projects.texi $(gcc_docdir)/include/gcc-common.texi gcc-vers.texi + $(MAKE) ada/doctools/xgnatugn$(build_exeext) ada/doctools/xgnatugn unw $(srcdir)/ada/gnat_ugn.texi \ $(srcdir)/ada/ug_words doc/gnat_ugn.texi @@ -2079,19 +2080,20 @@ ada/exp_ch5.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \ ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \ ada/atree.adb ada/casing.ads ada/checks.ads ada/checks.adb \ ada/csets.ads ada/debug.ads ada/debug_a.ads ada/einfo.ads ada/einfo.adb \ - ada/elists.ads ada/err_vars.ads ada/errout.ads ada/erroutc.ads \ - ada/eval_fat.ads ada/exp_aggr.ads ada/exp_ch11.ads ada/exp_ch2.ads \ - ada/exp_ch4.ads ada/exp_ch5.ads ada/exp_ch5.adb ada/exp_ch6.ads \ - ada/exp_ch7.ads ada/exp_dbug.ads ada/exp_disp.ads ada/exp_pakd.ads \ - ada/exp_tss.ads ada/exp_util.ads ada/exp_util.adb ada/expander.ads \ - ada/fname.ads ada/fname-uf.ads ada/freeze.ads ada/get_targ.ads \ - ada/gnat.ads ada/g-hesorg.ads ada/g-htable.ads ada/hlo.ads \ - ada/hostparm.ads ada/inline.ads ada/interfac.ads ada/itypes.ads \ - ada/lib.ads ada/lib-load.ads ada/lib-util.ads ada/lib-xref.ads \ - ada/namet.ads ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads \ - ada/nmake.adb ada/opt.ads ada/output.ads ada/put_alfa.ads \ - ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \ - ada/scans.ads ada/sem.ads ada/sem.adb ada/sem_attr.ads ada/sem_aux.ads \ + ada/elists.ads ada/err_vars.ads ada/errout.ads ada/errout.adb \ + ada/erroutc.ads ada/erroutc.adb ada/eval_fat.ads ada/exp_aggr.ads \ + ada/exp_ch11.ads ada/exp_ch2.ads ada/exp_ch4.ads ada/exp_ch5.ads \ + ada/exp_ch5.adb ada/exp_ch6.ads ada/exp_ch7.ads ada/exp_dbug.ads \ + ada/exp_disp.ads ada/exp_pakd.ads ada/exp_tss.ads ada/exp_util.ads \ + ada/exp_util.adb ada/expander.ads ada/fname.ads ada/fname-uf.ads \ + ada/freeze.ads ada/get_targ.ads ada/gnat.ads ada/g-hesorg.ads \ + ada/g-htable.ads ada/gnatvsn.ads ada/hlo.ads ada/hostparm.ads \ + ada/inline.ads ada/interfac.ads ada/itypes.ads ada/lib.ads \ + ada/lib-load.ads ada/lib-util.ads ada/lib-xref.ads ada/namet.ads \ + ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \ + ada/opt.ads ada/output.ads ada/put_alfa.ads ada/restrict.ads \ + ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/scans.ads \ + ada/sem.ads ada/sem.adb ada/sem_attr.ads ada/sem_aux.ads \ ada/sem_aux.adb ada/sem_cat.ads ada/sem_ch10.ads ada/sem_ch11.ads \ ada/sem_ch12.ads ada/sem_ch13.ads ada/sem_ch13.adb ada/sem_ch2.ads \ ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch5.ads ada/sem_ch6.ads \ @@ -2853,40 +2855,41 @@ ada/gnat1drv.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \ ada/checks.ads ada/comperr.ads ada/csets.ads ada/debug.ads \ ada/debug_a.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ ada/elists.adb ada/err_vars.ads ada/errout.ads ada/errout.adb \ - ada/erroutc.ads ada/erroutc.adb ada/exp_cg.ads ada/exp_ch7.ads \ - ada/exp_disp.ads ada/exp_tss.ads ada/exp_util.ads ada/expander.ads \ - ada/fmap.ads ada/fname.ads ada/fname-uf.ads ada/frontend.ads \ - ada/get_targ.ads ada/gnat.ads ada/g-byorma.ads ada/g-hesorg.ads \ - ada/g-htable.ads ada/g-table.ads ada/g-table.adb ada/gnat1drv.ads \ - ada/gnat1drv.adb ada/gnatvsn.ads ada/hlo.ads ada/hostparm.ads \ - ada/inline.ads ada/inline.adb ada/interfac.ads ada/lib.ads ada/lib.adb \ - ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb ada/lib-util.ads \ - ada/lib-writ.ads ada/lib-writ.adb ada/lib-xref.ads ada/namet.ads \ - ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/opt.ads \ - ada/osint.ads ada/osint-c.ads ada/output.ads ada/par.ads \ - ada/par_sco.ads ada/prepcomp.ads ada/put_alfa.ads ada/repinfo.ads \ - ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \ - ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/scos.ads \ - ada/scos.adb ada/sem.ads ada/sem.adb ada/sem_attr.ads ada/sem_aux.ads \ - ada/sem_aux.adb ada/sem_ch10.ads ada/sem_ch11.ads ada/sem_ch12.ads \ - ada/sem_ch13.ads ada/sem_ch13.adb ada/sem_ch2.ads ada/sem_ch3.ads \ - ada/sem_ch4.ads ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch7.ads \ - ada/sem_ch8.ads ada/sem_ch9.ads ada/sem_dim.ads ada/sem_elim.ads \ - ada/sem_eval.ads ada/sem_prag.ads ada/sem_res.ads ada/sem_type.ads \ - ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \ - ada/sinput.ads ada/sinput.adb ada/sinput-l.ads ada/snames.ads \ - ada/sprint.ads ada/stand.ads ada/stringt.ads ada/style.ads \ - ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \ - ada/s-assert.ads ada/s-bitops.ads ada/s-casuti.ads ada/s-crc32.ads \ - ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \ - ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \ - ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/targparm.ads ada/tbuild.ads ada/tree_gen.ads ada/tree_io.ads \ - ada/treepr.ads ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb \ - ada/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \ - ada/usage.ads ada/validsw.ads ada/warnsw.ads ada/widechar.ads + ada/erroutc.ads ada/erroutc.adb ada/exp_cg.ads ada/exp_ch6.ads \ + ada/exp_ch7.ads ada/exp_disp.ads ada/exp_tss.ads ada/exp_util.ads \ + ada/expander.ads ada/fmap.ads ada/fname.ads ada/fname-uf.ads \ + ada/frontend.ads ada/get_targ.ads ada/gnat.ads ada/g-byorma.ads \ + ada/g-hesorg.ads ada/g-htable.ads ada/g-table.ads ada/g-table.adb \ + ada/gnat1drv.ads ada/gnat1drv.adb ada/gnatvsn.ads ada/hlo.ads \ + ada/hostparm.ads ada/inline.ads ada/inline.adb ada/interfac.ads \ + ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-load.ads \ + ada/lib-sort.adb ada/lib-util.ads ada/lib-writ.ads ada/lib-writ.adb \ + ada/lib-xref.ads ada/namet.ads ada/namet.adb ada/nlists.ads \ + ada/nlists.adb ada/nmake.ads ada/opt.ads ada/osint.ads ada/osint-c.ads \ + ada/output.ads ada/par.ads ada/par_sco.ads ada/prepcomp.ads \ + ada/put_alfa.ads ada/repinfo.ads ada/restrict.ads ada/restrict.adb \ + ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \ + ada/scng.adb ada/scos.ads ada/scos.adb ada/sem.ads ada/sem.adb \ + ada/sem_attr.ads ada/sem_aux.ads ada/sem_aux.adb ada/sem_ch10.ads \ + ada/sem_ch11.ads ada/sem_ch12.ads ada/sem_ch13.ads ada/sem_ch13.adb \ + ada/sem_ch2.ads ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch5.ads \ + ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_ch9.ads \ + ada/sem_dim.ads ada/sem_elim.ads ada/sem_eval.ads ada/sem_prag.ads \ + ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads \ + ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \ + ada/sinput-l.ads ada/snames.ads ada/sprint.ads ada/stand.ads \ + ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \ + ada/stylesw.ads ada/system.ads ada/s-assert.ads ada/s-bitops.ads \ + ada/s-casuti.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \ + ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \ + ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \ + ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \ + ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \ + ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \ + ada/tree_gen.ads ada/tree_io.ads ada/treepr.ads ada/ttypes.ads \ + ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ + ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/usage.ads \ + ada/validsw.ads ada/warnsw.ads ada/widechar.ads ada/gnatbind.o : ada/ada.ads ada/a-comlin.ads ada/a-clrefi.ads \ ada/a-except.ads ada/a-unccon.ads ada/a-uncdea.ads ada/ali.ads \ @@ -4338,29 +4341,30 @@ ada/sem_dim.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \ ada/atree.adb ada/casing.ads ada/csets.ads ada/debug.ads \ ada/debug_a.ads ada/einfo.ads ada/einfo.adb ada/elists.ads \ ada/err_vars.ads ada/errout.ads ada/errout.adb ada/erroutc.ads \ - ada/erroutc.adb ada/exp_tss.ads ada/expander.ads ada/fname.ads \ - ada/gnat.ads ada/g-hesorg.ads ada/g-htable.ads ada/gnatvsn.ads \ - ada/hlo.ads ada/hostparm.ads ada/inline.ads ada/interfac.ads \ - ada/lib.ads ada/lib.adb ada/lib-list.adb ada/lib-load.ads \ - ada/lib-sort.adb ada/namet.ads ada/namet.adb ada/nlists.ads \ - ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \ - ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/scans.ads \ - ada/sem.ads ada/sem.adb ada/sem_attr.ads ada/sem_aux.ads \ - ada/sem_ch10.ads ada/sem_ch11.ads ada/sem_ch12.ads ada/sem_ch13.ads \ - ada/sem_ch2.ads ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch5.ads \ - ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_ch9.ads \ - ada/sem_dim.ads ada/sem_dim.adb ada/sem_eval.ads ada/sem_prag.ads \ - ada/sem_res.ads ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb \ - ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \ - ada/stringt.adb ada/stylesw.ads ada/system.ads ada/s-exctab.ads \ - ada/s-htable.ads ada/s-htable.adb ada/s-imenne.ads ada/s-memory.ads \ - ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \ - ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \ - ada/s-stoele.adb ada/s-strhas.ads ada/s-string.ads ada/s-traent.ads \ - ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \ - ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \ - ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \ - ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads + ada/erroutc.adb ada/exp_dist.ads ada/exp_tss.ads ada/expander.ads \ + ada/fname.ads ada/fname-uf.ads ada/gnat.ads ada/g-hesorg.ads \ + ada/g-htable.ads ada/gnatvsn.ads ada/hlo.ads ada/hostparm.ads \ + ada/inline.ads ada/interfac.ads ada/lib.ads ada/lib.adb \ + ada/lib-list.adb ada/lib-load.ads ada/lib-sort.adb ada/namet.ads \ + ada/namet.adb ada/nlists.ads ada/nlists.adb ada/nmake.ads ada/nmake.adb \ + ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \ + ada/rtsfind.ads ada/rtsfind.adb ada/scans.ads ada/sem.ads ada/sem.adb \ + ada/sem_attr.ads ada/sem_aux.ads ada/sem_ch10.ads ada/sem_ch11.ads \ + ada/sem_ch12.ads ada/sem_ch13.ads ada/sem_ch2.ads ada/sem_ch3.ads \ + ada/sem_ch4.ads ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch7.ads \ + ada/sem_ch8.ads ada/sem_ch9.ads ada/sem_dim.ads ada/sem_dim.adb \ + ada/sem_dist.ads ada/sem_eval.ads ada/sem_prag.ads ada/sem_res.ads \ + ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \ + ada/snames.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \ + ada/stylesw.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \ + ada/s-htable.adb ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \ + ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \ + ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \ + ada/s-strhas.ads ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \ + ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \ + ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/types.ads \ + ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \ + ada/unchdeal.ads ada/urealp.ads ada/widechar.ads ada/sem_disp.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \ ada/a-uncdea.ads ada/alloc.ads ada/aspects.ads ada/atree.ads \ diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in index d81c66312a0..eb6e7bcdd45 100644 --- a/gcc/ada/gcc-interface/Makefile.in +++ b/gcc/ada/gcc-interface/Makefile.in @@ -349,6 +349,10 @@ GNATMAKE_OBJS = a-except.o ali.o ali-util.o aspects.o s-casuti.o alloc.o \ ifeq ($(strip $(filter-out %x86_64, $(arch))),) ifeq ($(strip $(MULTISUBDIR)),/32) arch:=i686 + else + ifeq ($(strip $(MULTISUBDIR)),/x32) + arch:=x32 + endif endif endif @@ -430,13 +434,11 @@ ATOMICS_BUILTINS_TARGET_PAIRS = \ X86_TARGET_PAIRS = \ a-numaux.ads<a-numaux-x86.ads \ a-numaux.adb<a-numaux-x86.adb \ - g-bytswa.adb<g-bytswa-x86.adb \ s-atocou.adb<s-atocou-x86.adb X86_64_TARGET_PAIRS = \ a-numaux.ads<a-numaux-x86.ads \ a-numaux.adb<a-numaux-x86.adb \ - g-bytswa.adb<g-bytswa-x86.adb \ s-atocou.adb<s-atocou-builtin.adb LIB_VERSION = $(strip $(shell grep ' Library_Version :' $(fsrcpfx)ada/gnatvsn.ads | sed -e 's/.*"\(.*\)".*/\1/')) @@ -1511,8 +1513,11 @@ ifeq ($(strip $(filter-out alpha64 ia64 dec hp vms% openvms% alphavms%,$(targ))) s-intman.ads<s-intman-vms.ads \ s-memory.adb<s-memory-vms_64.adb \ s-memory.ads<s-memory-vms_64.ads \ + s-ransee.adb<s-ransee-vms.adb \ s-osprim.adb<s-osprim-vms.adb \ s-osprim.ads<s-osprim-vms.ads \ + s-osinte.adb<s-osinte-vms.adb \ + s-osinte.ads<s-osinte-vms.ads \ s-taprop.adb<s-taprop-vms.adb \ s-tasdeb.adb<s-tasdeb-vms.adb \ s-taspri.ads<s-taspri-vms.ads \ @@ -1526,8 +1531,6 @@ ifeq ($(strip $(filter-out alpha64 ia64 dec hp vms% openvms% alphavms%,$(targ))) g-trasym.adb<g-trasym-vms-ia64.adb \ s-asthan.adb<s-asthan-vms-ia64.adb \ s-auxdec.adb<s-auxdec-vms-ia64.adb \ - s-osinte.adb<s-osinte-vms-ia64.adb \ - s-osinte.ads<s-osinte-vms-ia64.ads \ s-vaflop.adb<s-vaflop-vms-ia64.adb \ system.ads<system-vms-ia64.ads \ s-parame.ads<s-parame-vms-ia64.ads \ @@ -1545,8 +1548,6 @@ ifeq ($(strip $(filter-out alpha64 ia64 dec hp vms% openvms% alphavms%,$(targ))) g-trasym.adb<g-trasym-vms-alpha.adb \ s-asthan.adb<s-asthan-vms-alpha.adb \ s-auxdec.adb<s-auxdec-vms-alpha.adb \ - s-osinte.adb<s-osinte-vms.adb \ - s-osinte.ads<s-osinte-vms.ads \ s-traent.adb<s-traent-vms.adb \ s-traent.ads<s-traent-vms.ads \ s-vaflop.adb<s-vaflop-vms-alpha.adb \ @@ -1591,16 +1592,19 @@ ifeq ($(strip $(filter-out cygwin% mingw32% pe,$(osys))),) # the Cygwin port has always been a CygMing frankenhybrid and it is # a long-term project to disentangle them. ifeq ($(strip $(filter-out cygwin%,$(osys))),) + WIN_SO_PREFIX=cyg LIBGNAT_TARGET_PAIRS = \ s-memory.adb<s-memory.adb \ g-socthi.ads<g-socthi.ads \ g-socthi.adb<g-socthi.adb else + WIN_SO_PREFIX=lib LIBGNAT_TARGET_PAIRS = \ s-memory.adb<s-memory-mingw.adb \ g-socthi.ads<g-socthi-mingw.ads \ g-socthi.adb<g-socthi-mingw.adb endif + WIN_SO_INSTALL_DIR = $(bindir) LIBGNAT_TARGET_PAIRS += \ a-dirval.adb<a-dirval-mingw.adb \ a-excpol.adb<a-excpol-abort.adb \ @@ -2133,6 +2137,43 @@ ifeq ($(strip $(filter-out %x86_64 linux%,$(arch) $(osys))),) LIBRARY_VERSION := $(LIB_VERSION) endif +ifeq ($(strip $(filter-out %x32 linux%,$(arch) $(osys))),) + LIBGNAT_TARGET_PAIRS = \ + a-exetim.adb<a-exetim-posix.adb \ + a-exetim.ads<a-exetim-default.ads \ + a-intnam.ads<a-intnam-linux.ads \ + a-synbar.adb<a-synbar-posix.adb \ + a-synbar.ads<a-synbar-posix.ads \ + s-inmaop.adb<s-inmaop-posix.adb \ + s-intman.adb<s-intman-posix.adb \ + s-linux.ads<s-linux.ads \ + s-mudido.adb<s-mudido-affinity.adb \ + s-osinte.ads<s-osinte-linux.ads \ + s-osinte.adb<s-osinte-posix.adb \ + s-osprim.adb<s-osprim-posix.adb \ + s-taprop.adb<s-taprop-linux.adb \ + s-tasinf.ads<s-tasinf-linux.ads \ + s-tasinf.adb<s-tasinf-linux.adb \ + s-tpopsp.adb<s-tpopsp-tls.adb \ + s-taspri.ads<s-taspri-posix.ads \ + g-sercom.adb<g-sercom-linux.adb \ + $(ATOMICS_TARGET_PAIRS) \ + $(X86_64_TARGET_PAIRS) \ + system.ads<system-linux-x86.ads + + TOOLS_TARGET_PAIRS = \ + mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \ + indepsw.adb<indepsw-gnu.adb + + EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o + EXTRA_GNATRTL_TASKING_OBJS=s-linux.o a-exetim.o + EH_MECHANISM=-gcc + THREADSLIB=-lpthread -lrt + GNATLIB_SHARED=gnatlib-shared-dual + GMEM_LIB = gmemlib + LIBRARY_VERSION := $(LIB_VERSION) +endif + ifeq ($(strip $(filter-out darwin%,$(osys))),) SO_OPTS = -shared-libgcc LIBGNAT_TARGET_PAIRS = \ @@ -2451,11 +2492,14 @@ install-gnatlib: ../stamp-gnatlib-$(RTSDIR) # for shared libraries on some targets, e.g. on HP-UX where the x # permission is required. # Also install the .dSYM directories if they exist (these directories -# contain the debug information for the shared libraries on darwin) +# contain the debug information for the shared libraries on darwin), +# and the windows import libraries if they exist. + libpfx=$(if $(WIN_SO_PREFIX),$(WIN_SO_PREFIX),lib); \ + librtlobjdir=$(if $(WIN_SO_INSTALL_DIR),$(WIN_SO_INSTALL_DIR),$(ADA_RTL_OBJ_DIR)); \ for file in gnat gnarl; do \ - if [ -f $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) ]; then \ - $(INSTALL) $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \ - $(DESTDIR)$(ADA_RTL_OBJ_DIR); \ + if [ -f $(RTSDIR)/$${libpfx}$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) ]; then \ + $(INSTALL) $(RTSDIR)/$${libpfx}$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \ + $(DESTDIR)$${librtlobjdir}; \ fi; \ if [ -f $(RTSDIR)/lib$${file}$(soext) ]; then \ $(LN_S) lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \ @@ -2465,6 +2509,10 @@ install-gnatlib: ../stamp-gnatlib-$(RTSDIR) $(CP) -r $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext).dSYM \ $(DESTDIR)$(ADA_RTL_OBJ_DIR); \ fi; \ + if [ -f $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext)$(arext) ]; then \ + $(INSTALL_DATA) $(RTSDIR)/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext)$(arext) \ + $(DESTDIR)$(ADA_RTL_OBJ_DIR); \ + fi; \ done # This copy must be done preserving the date on the original file. for file in $(RTSDIR)/*.ad?; do \ @@ -2676,16 +2724,18 @@ gnatlib-shared-win32: cd $(RTSDIR); `echo "$(GCC_FOR_TARGET)" \ | sed -e 's,\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'` -shared -shared-libgcc \ $(PICFLAG_FOR_TARGET) \ - -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \ + -o $(WIN_SO_PREFIX)gnat$(hyphen)$(LIBRARY_VERSION)$(soext) \ + -Wl,-out-implib,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)$(arext) \ $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \ - $(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) $(MISCLIB) + $(SO_OPTS)$(WIN_SO_PREFIX)gnat$(hyphen)$(LIBRARY_VERSION)$(soext) $(MISCLIB) cd $(RTSDIR); `echo "$(GCC_FOR_TARGET)" \ | sed -e 's,\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'` -shared -shared-libgcc \ $(PICFLAG_FOR_TARGET) \ - -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ + -o $(WIN_SO_PREFIX)gnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ + -Wl,-out-implib,libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext)$(arext) \ $(GNATRTL_TASKING_OBJS) \ - $(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ - $(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) + $(SO_OPTS)$(WIN_SO_PREFIX)gnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ + $(THREADSLIB) -L. -lgnat$(hyphen)$(LIBRARY_VERSION) gnatlib-shared-darwin: $(MAKE) $(FLAGS_TO_PASS) \ diff --git a/gcc/ada/gcc-interface/ada-tree.h b/gcc/ada/gcc-interface/ada-tree.h index 0c32f210dea..ec00cc4775f 100644 --- a/gcc/ada/gcc-interface/ada-tree.h +++ b/gcc/ada/gcc-interface/ada-tree.h @@ -80,7 +80,8 @@ do { \ /* For integral types and array types, nonzero if this is a packed array type used for bit-packed types. Such types should not be extended to a larger size or validated against a specified size. */ -#define TYPE_PACKED_ARRAY_TYPE_P(NODE) TYPE_LANG_FLAG_0 (NODE) +#define TYPE_PACKED_ARRAY_TYPE_P(NODE) \ + TYPE_LANG_FLAG_0 (TREE_CHECK2 (NODE, INTEGER_TYPE, ARRAY_TYPE)) #define TYPE_IS_PACKED_ARRAY_TYPE_P(NODE) \ ((TREE_CODE (NODE) == INTEGER_TYPE || TREE_CODE (NODE) == ARRAY_TYPE) \ @@ -108,17 +109,32 @@ do { \ front-end. */ #define TYPE_EXTRA_SUBTYPE_P(NODE) TYPE_LANG_FLAG_2 (INTEGER_TYPE_CHECK (NODE)) -/* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is the - type for an object whose type includes its template in addition to - its value (only true for RECORD_TYPE). */ -#define TYPE_CONTAINS_TEMPLATE_P(NODE) \ - TYPE_LANG_FLAG_3 (RECORD_OR_UNION_CHECK (NODE)) +/* Nonzero for an aggregate type if this is a by-reference type. We also + set this on an ENUMERAL_TYPE that is dummy. */ +#define TYPE_BY_REFERENCE_P(NODE) \ + TYPE_LANG_FLAG_2 (TREE_CHECK5 (NODE, RECORD_TYPE, UNION_TYPE, \ + ARRAY_TYPE, UNCONSTRAINED_ARRAY_TYPE, \ + ENUMERAL_TYPE)) + +#define TYPE_IS_BY_REFERENCE_P(NODE) \ + ((TREE_CODE (NODE) == RECORD_TYPE \ + || TREE_CODE (NODE) == UNION_TYPE \ + || TREE_CODE (NODE) == ARRAY_TYPE \ + || TREE_CODE (NODE) == UNCONSTRAINED_ARRAY_TYPE \ + || TREE_CODE (NODE) == ENUMERAL_TYPE) \ + && TYPE_BY_REFERENCE_P (NODE)) /* For INTEGER_TYPE, nonzero if this really represents a VAX floating-point type. */ #define TYPE_VAX_FLOATING_POINT_P(NODE) \ TYPE_LANG_FLAG_3 (INTEGER_TYPE_CHECK (NODE)) +/* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is the + type for an object whose type includes its template in addition to + its value (only true for RECORD_TYPE). */ +#define TYPE_CONTAINS_TEMPLATE_P(NODE) \ + TYPE_LANG_FLAG_3 (RECORD_OR_UNION_CHECK (NODE)) + /* True if NODE is a thin pointer. */ #define TYPE_IS_THIN_POINTER_P(NODE) \ (POINTER_TYPE_P (NODE) \ @@ -144,13 +160,15 @@ do { \ #define TYPE_RETURN_BY_DIRECT_REF_P(NODE) \ TYPE_LANG_FLAG_4 (FUNCTION_TYPE_CHECK (NODE)) -/* For VOID_TYPE, ENUMERAL_TYPE, UNION_TYPE, and RECORD_TYPE, nonzero if this - is a dummy type, made to correspond to a private or incomplete type. */ -#define TYPE_DUMMY_P(NODE) TYPE_LANG_FLAG_4 (NODE) +/* For RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE, nonzero if this is a dummy + type, made to correspond to a private or incomplete type. */ +#define TYPE_DUMMY_P(NODE) \ + TYPE_LANG_FLAG_4 (TREE_CHECK3 (NODE, RECORD_TYPE, UNION_TYPE, ENUMERAL_TYPE)) -#define TYPE_IS_DUMMY_P(NODE) \ - ((TREE_CODE (NODE) == VOID_TYPE || TREE_CODE (NODE) == RECORD_TYPE \ - || TREE_CODE (NODE) == UNION_TYPE || TREE_CODE (NODE) == ENUMERAL_TYPE) \ +#define TYPE_IS_DUMMY_P(NODE) \ + ((TREE_CODE (NODE) == RECORD_TYPE \ + || TREE_CODE (NODE) == UNION_TYPE \ + || TREE_CODE (NODE) == ENUMERAL_TYPE) \ && TYPE_DUMMY_P (NODE)) /* For an INTEGER_TYPE, nonzero if TYPE_ACTUAL_BOUNDS is present. */ @@ -167,7 +185,7 @@ do { \ /* True if TYPE can alias any other types. */ #define TYPE_UNIVERSAL_ALIASING_P(NODE) TYPE_LANG_FLAG_6 (NODE) -/* In an UNCONSTRAINED_ARRAY_TYPE, this is the record containing both the +/* For an UNCONSTRAINED_ARRAY_TYPE, this is the record containing both the template and the object. ??? We also put this on an ENUMERAL_TYPE that is dummy. Technically, @@ -310,8 +328,10 @@ do { \ SET_TYPE_LANG_SPECIFIC (POINTER_TYPE_CHECK (NODE), X) /* For a RECORD_TYPE that is a fat pointer, this is the type for the - unconstrained object. Likewise for a RECORD_TYPE that is pointed - to by a thin pointer. */ + unconstrained array. Likewise for a RECORD_TYPE that is pointed + to by a thin pointer, if it is made for the unconstrained array + type itself; the field is NULL_TREE if the RECORD_TYPE is made + for a constrained subtype of the array type. */ #define TYPE_UNCONSTRAINED_ARRAY(NODE) \ GET_TYPE_LANG_SPECIFIC (RECORD_TYPE_CHECK (NODE)) #define SET_TYPE_UNCONSTRAINED_ARRAY(NODE, X) \ diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index c3c4f994fe6..34183bac2ff 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -97,11 +97,6 @@ static struct incomplete *defer_incomplete_list; end of the spec. */ static struct incomplete *defer_limited_with; -/* These variables are used to defer finalizing types. The element of the - list is the TYPE_DECL associated with the type. */ -static int defer_finalize_level = 0; -static VEC (tree,heap) *defer_finalize_list; - typedef struct subst_pair_d { tree discriminant; tree replacement; @@ -160,7 +155,7 @@ static bool compile_time_known_address_p (Node_Id); static bool cannot_be_superflat_p (Node_Id); static bool constructor_address_p (tree); static void components_to_record (tree, Node_Id, tree, int, bool, bool, bool, - bool, bool, bool, bool, tree, tree *); + bool, bool, bool, bool, bool, tree, tree *); static Uint annotate_value (tree); static void annotate_rep (Entity_Id, tree); static tree build_position_list (tree, bool, tree, tree, unsigned int, tree); @@ -181,7 +176,6 @@ static tree get_rep_part (tree); static tree create_variant_part_from (tree, VEC(variant_desc,heap) *, tree, tree, VEC(subst_pair,heap) *); static void copy_and_substitute_in_size (tree, tree, VEC(subst_pair,heap) *); -static void rest_of_type_decl_compilation_no_defer (tree); /* The relevant constituents of a subprogram binding to a GCC builtin. Used to pass around calls performing profile compatibility checks. */ @@ -1379,6 +1373,49 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) const_flag = true; } + /* If this is an aliased object with an unconstrained nominal subtype, + we make its type a thin reference, i.e. the reference counterpart + of a thin pointer, so that it points to the array part. This is + aimed at making it easier for the debugger to decode the object. + Note that we have to do that this late because of the couple of + allocation adjustments that might be made just above. */ + if (Is_Constr_Subt_For_UN_Aliased (Etype (gnat_entity)) + && Is_Array_Type (Etype (gnat_entity)) + && !type_annotate_only) + { + tree gnu_array + = gnat_to_gnu_type (Base_Type (Etype (gnat_entity))); + + /* In case the object with the template has already been allocated + just above, we have nothing to do here. */ + if (!TYPE_IS_THIN_POINTER_P (gnu_type)) + { + gnu_size = NULL_TREE; + used_by_ref = true; + + if (definition && !imported_p) + { + tree gnu_unc_var + = create_var_decl (concat_name (gnu_entity_name, "UNC"), + NULL_TREE, gnu_type, gnu_expr, + const_flag, Is_Public (gnat_entity), + false, static_p, NULL, gnat_entity); + gnu_expr + = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_unc_var); + TREE_CONSTANT (gnu_expr) = 1; + const_flag = true; + } + else + { + gnu_expr = NULL_TREE; + const_flag = false; + } + } + + gnu_type + = build_reference_type (TYPE_OBJECT_RECORD_TYPE (gnu_array)); + } + if (const_flag) gnu_type = build_qualified_type (gnu_type, (TYPE_QUALS (gnu_type) | TYPE_QUAL_CONST)); @@ -1469,41 +1506,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) } } - /* If this is an aliased object with an unconstrained nominal subtype - and optimization isn't enabled, create a VAR_DECL for debugging - purposes whose type is a thin reference (the reference counterpart - of a thin pointer), so that it will be directly initialized to the - address of the array part. */ - else if (Is_Constr_Subt_For_UN_Aliased (Etype (gnat_entity)) - && Is_Array_Type (Etype (gnat_entity)) - && !type_annotate_only - && !optimize - && debug_info_p) - { - tree gnu_array - = gnat_to_gnu_type (Base_Type (Etype (gnat_entity))); - tree gnu_thin_type - = build_reference_type (TYPE_OBJECT_RECORD_TYPE (gnu_array)); - tree gnu_ref, gnu_debug_decl; - - /* In case the object with the template has already been indirectly - allocated, we have nothing to do here. */ - if (TYPE_IS_THIN_POINTER_P (gnu_type)) - gnu_ref = gnu_decl; - else - gnu_ref = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_decl); - gnu_ref = convert (gnu_thin_type, gnu_ref); - - gnu_debug_decl - = create_var_decl (gnu_entity_name, gnu_ext_name, - gnu_thin_type, NULL_TREE, const_flag, - Is_Public (gnat_entity), !definition, - static_p, attr_list, gnat_entity); - SET_DECL_VALUE_EXPR (gnu_debug_decl, gnu_ref); - DECL_HAS_VALUE_EXPR_P (gnu_debug_decl) = 1; - DECL_IGNORED_P (gnu_decl) = 1; - } - /* If this is a constant and we are defining it or it generates a real symbol at the object level and we are referencing it, we may want or need to have a true variable to represent it: @@ -1995,14 +1997,26 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) const bool convention_fortran_p = (Convention (gnat_entity) == Convention_Fortran); const int ndim = Number_Dimensions (gnat_entity); - tree gnu_template_type = make_node (RECORD_TYPE); - tree gnu_ptr_template = build_pointer_type (gnu_template_type); + tree gnu_template_type; + tree gnu_ptr_template; tree gnu_template_reference, gnu_template_fields, gnu_fat_type; tree *gnu_index_types = XALLOCAVEC (tree, ndim); tree *gnu_temp_fields = XALLOCAVEC (tree, ndim); tree gnu_max_size = size_one_node, gnu_max_size_unit, tem, t; Entity_Id gnat_index, gnat_name; int index; + tree comp_type; + + /* Create the type for the component now, as it simplifies breaking + type reference loops. */ + comp_type + = gnat_to_gnu_component_type (gnat_entity, definition, debug_info_p); + if (present_gnu_tree (gnat_entity)) + { + /* As a side effect, the type may have been translated. */ + maybe_present = true; + break; + } /* We complete an existing dummy fat pointer type in place. This both avoids further complex adjustments in update_pointer_to and yields @@ -2015,9 +2029,16 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) TYPE_NAME (gnu_fat_type) = NULL_TREE; /* Save the contents of the dummy type for update_pointer_to. */ TYPE_POINTER_TO (gnu_type) = copy_type (gnu_fat_type); + gnu_ptr_template = + TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (gnu_fat_type))); + gnu_template_type = TREE_TYPE (gnu_ptr_template); } else - gnu_fat_type = make_node (RECORD_TYPE); + { + gnu_fat_type = make_node (RECORD_TYPE); + gnu_template_type = make_node (RECORD_TYPE); + gnu_ptr_template = build_pointer_type (gnu_template_type); + } /* Make a node for the array. If we are not defining the array suppress expanding incomplete types. */ @@ -2173,29 +2194,28 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) debug_info_p); TYPE_READONLY (gnu_template_type) = 1; - /* Now make the array of arrays and update the pointer to the array - in the fat pointer. Note that it is the first field. */ - tem - = gnat_to_gnu_component_type (gnat_entity, definition, debug_info_p); + /* Now build the array type. */ /* If Component_Size is not already specified, annotate it with the size of the component. */ if (Unknown_Component_Size (gnat_entity)) - Set_Component_Size (gnat_entity, annotate_value (TYPE_SIZE (tem))); + Set_Component_Size (gnat_entity, + annotate_value (TYPE_SIZE (comp_type))); /* Compute the maximum size of the array in units and bits. */ if (gnu_max_size) { gnu_max_size_unit = size_binop (MULT_EXPR, gnu_max_size, - TYPE_SIZE_UNIT (tem)); + TYPE_SIZE_UNIT (comp_type)); gnu_max_size = size_binop (MULT_EXPR, convert (bitsizetype, gnu_max_size), - TYPE_SIZE (tem)); + TYPE_SIZE (comp_type)); } else gnu_max_size_unit = NULL_TREE; /* Now build the array type. */ + tem = comp_type; for (index = ndim - 1; index >= 0; index--) { tem = build_nonshared_array_type (tem, gnu_index_types[index]); @@ -3102,7 +3122,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) /* Add the fields into the record type and finish it up. */ components_to_record (gnu_type, Component_List (record_definition), gnu_field_list, packed, definition, false, - all_rep, is_unchecked_union, debug_info_p, + all_rep, is_unchecked_union, + !Comes_From_Source (gnat_entity), debug_info_p, false, OK_To_Reorder_Components (gnat_entity), all_rep ? NULL_TREE : bitsize_zero_node, NULL); @@ -3853,10 +3874,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) care of those situations. */ if (defer_incomplete_level == 0 && !is_from_limited_with) { - defer_finalize_level++; update_pointer_to (TYPE_MAIN_VARIANT (gnu_old_desig_type), gnat_to_gnu_type (gnat_desig_equiv)); - defer_finalize_level--; } else { @@ -4125,7 +4144,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) return_by_invisi_ref_p = true; /* Likewise, if the return type is itself By_Reference. */ - else if (TREE_ADDRESSABLE (gnu_return_type)) + else if (TYPE_IS_BY_REFERENCE_P (gnu_return_type)) return_by_invisi_ref_p = true; /* If the type is a padded type and the underlying type would not @@ -4654,10 +4673,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) || Is_Class_Wide_Equivalent_Type (gnat_entity)) TYPE_ALIGN_OK (gnu_type) = 1; - /* If the type is passed by reference, objects of this type must be - fully addressable and cannot be copied. */ - if (Is_By_Reference_Type (gnat_entity)) - TREE_ADDRESSABLE (gnu_type) = 1; + /* Record whether the type is passed by reference. */ + if (!VOID_TYPE_P (gnu_type) && Is_By_Reference_Type (gnat_entity)) + TYPE_BY_REFERENCE_P (gnu_type) = 1; /* ??? Don't set the size for a String_Literal since it is either confirming or we don't handle it properly (if the low bound is @@ -5043,9 +5061,11 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) } /* If we really have a ..._DECL node, set a couple of flags on it. But we - cannot do so if we are reusing the ..._DECL node made for an alias or a - renamed object as the predicates don't apply to it but to GNAT_ENTITY. */ + cannot do so if we are reusing the ..._DECL node made for an equivalent + type or an alias or a renamed object as the predicates don't apply to it + but to GNAT_ENTITY. */ if (DECL_P (gnu_decl) + && !(is_type && gnat_equiv_type != gnat_entity) && !Present (Alias (gnat_entity)) && !(Present (Renamed_Object (gnat_entity)) && saved)) { @@ -5086,11 +5106,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) /* Enumeration types have specific RM bounds. */ SET_TYPE_RM_MIN_VALUE (gnu_scalar_type, gnu_low_bound); SET_TYPE_RM_MAX_VALUE (gnu_scalar_type, gnu_high_bound); - - /* Write full debugging information. */ - rest_of_type_decl_compilation (gnu_decl); } - else { /* Floating-point types don't have specific RM bounds. */ @@ -5113,11 +5129,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) p = defer_incomplete_list; defer_incomplete_list = NULL; - /* For finalization, however, all types must be complete so we - cannot do the same because deferred incomplete types may end up - referencing each other. Process them all recursively first. */ - defer_finalize_level++; - for (; p; p = next) { next = p->next; @@ -5127,23 +5138,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) gnat_to_gnu_type (p->full_type)); free (p); } - - defer_finalize_level--; - } - - /* If all the deferred incomplete types have been processed, we can proceed - with the finalization of the deferred types. */ - if (defer_incomplete_level == 0 - && defer_finalize_level == 0 - && defer_finalize_list) - { - unsigned int i; - tree t; - - FOR_EACH_VEC_ELT (tree, defer_finalize_list, i, t) - rest_of_type_decl_compilation_no_defer (t); - - VEC_free (tree, heap, defer_finalize_list); } /* If we are not defining this type, see if it's on one of the lists of @@ -5264,45 +5258,6 @@ get_minimal_subprog_decl (Entity_Id gnat_entity) create_subprog_decl (gnu_entity_name, gnu_ext_name, void_ftype, NULL_TREE, false, true, true, true, attr_list, gnat_entity); } - -/* Wrap up compilation of DECL, a TYPE_DECL, possibly deferring it. - Every TYPE_DECL generated for a type definition must be passed - to this function once everything else has been done for it. */ - -void -rest_of_type_decl_compilation (tree decl) -{ - /* We need to defer finalizing the type if incomplete types - are being deferred or if they are being processed. */ - if (defer_incomplete_level != 0 || defer_finalize_level != 0) - VEC_safe_push (tree, heap, defer_finalize_list, decl); - else - rest_of_type_decl_compilation_no_defer (decl); -} - -/* Same as above but without deferring the compilation. This - function should not be invoked directly on a TYPE_DECL. */ - -static void -rest_of_type_decl_compilation_no_defer (tree decl) -{ - const int toplev = global_bindings_p (); - tree t = TREE_TYPE (decl); - - rest_of_decl_compilation (decl, toplev, 0); - - /* Now process all the variants. This is needed for STABS. */ - for (t = TYPE_MAIN_VARIANT (t); t; t = TYPE_NEXT_VARIANT (t)) - { - if (t == TREE_TYPE (decl)) - continue; - - if (!TYPE_STUB_DECL (t)) - TYPE_STUB_DECL (t) = create_type_stub_decl (DECL_NAME (decl), t); - - rest_of_type_compilation (t, toplev); - } -} /* Finalize the processing of From_With_Type incomplete types. */ @@ -5602,7 +5557,7 @@ gnat_to_gnu_param (Entity_Id gnat_param, Mechanism_Type mech, parameters whose type isn't by-ref and for which the mechanism hasn't been forced to by-ref are restrict-qualified in the C sense. */ bool restrict_p - = !TREE_ADDRESSABLE (gnu_param_type) && mech != By_Reference; + = !TYPE_IS_BY_REFERENCE_P (gnu_param_type) && mech != By_Reference; gnu_param_type = build_reference_type (gnu_param_type); if (restrict_p) gnu_param_type @@ -6634,7 +6589,7 @@ maybe_pad_type (tree type, tree size, unsigned int align, if (align != 0 && RECORD_OR_UNION_TYPE_P (type) && TYPE_MODE (type) == BLKmode - && !TREE_ADDRESSABLE (type) + && !TYPE_BY_REFERENCE_P (type) && TREE_CODE (orig_size) == INTEGER_CST && !TREE_OVERFLOW (orig_size) && compare_tree_int (orig_size, MAX_FIXED_MODE_SIZE) <= 0 @@ -7250,6 +7205,8 @@ compare_field_bitpos (const PTR rt1, const PTR rt2) UNCHECKED_UNION is true if we are building this type for a record with a Pragma Unchecked_Union. + ARTIFICIAL is true if this is a type that was generated by the compiler. + DEBUG_INFO is true if we need to write debug information about the type. MAYBE_UNUSED is true if this type may be unused in the end; this doesn't @@ -7269,8 +7226,8 @@ static void components_to_record (tree gnu_record_type, Node_Id gnat_component_list, tree gnu_field_list, int packed, bool definition, bool cancel_alignment, bool all_rep, - bool unchecked_union, bool debug_info, - bool maybe_unused, bool reorder, + bool unchecked_union, bool artificial, + bool debug_info, bool maybe_unused, bool reorder, tree first_free_pos, tree *p_gnu_rep_list) { bool all_rep_and_size = all_rep && TYPE_SIZE (gnu_record_type); @@ -7439,7 +7396,8 @@ components_to_record (tree gnu_record_type, Node_Id gnat_component_list, components_to_record (gnu_variant_type, Component_List (variant), NULL_TREE, packed, definition, !all_rep_and_size, all_rep, unchecked_union, - debug_info, true, reorder, this_first_free_pos, + true, debug_info, true, reorder, + this_first_free_pos, all_rep || this_first_free_pos ? NULL : &gnu_rep_list); @@ -7681,7 +7639,10 @@ components_to_record (tree gnu_record_type, Node_Id gnat_component_list, TYPE_ALIGN (gnu_record_type) = 0; finish_record_type (gnu_record_type, nreverse (gnu_field_list), - layout_with_rep ? 1 : 0, debug_info && !maybe_unused); + layout_with_rep ? 1 : 0, false); + TYPE_ARTIFICIAL (gnu_record_type) = artificial; + if (debug_info && !maybe_unused) + rest_of_record_type_compilation (gnu_record_type); } /* Given GNU_SIZE, a GCC tree representing a size, return a Uint to be @@ -8334,7 +8295,7 @@ make_type_from_size (tree type, tree size_tree, bool for_biased) /* Only do something if the type is not a packed array type and doesn't already have the proper size. */ - if (TYPE_PACKED_ARRAY_TYPE_P (type) + if (TYPE_IS_PACKED_ARRAY_TYPE_P (type) || (TYPE_PRECISION (type) == size && biased_p == for_biased)) break; diff --git a/gcc/ada/gcc-interface/gigi.h b/gcc/ada/gcc-interface/gigi.h index 00f64651de1..5e6495ad27c 100644 --- a/gcc/ada/gcc-interface/gigi.h +++ b/gcc/ada/gcc-interface/gigi.h @@ -51,9 +51,6 @@ extern tree gnat_to_gnu_field_decl (Entity_Id gnat_entity); the GCC type corresponding to that entity. */ extern tree gnat_to_gnu_type (Entity_Id gnat_entity); -/* Wrap up compilation of T, a TYPE_DECL, possibly deferring it. */ -extern void rest_of_type_decl_compilation (tree t); - /* Start a new statement group chained to the previous group. */ extern void start_stmt_group (void); diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c index 4b2fba0c191..08ca5bb92b3 100644 --- a/gcc/ada/gcc-interface/misc.c +++ b/gcc/ada/gcc-interface/misc.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 1992-2011, Free Software Foundation, Inc. * + * Copyright (C) 1992-2012, Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -624,7 +624,7 @@ must_pass_by_ref (tree gnu_type) and does not produce compatibility problems with C, since C does not have such objects. */ return (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE - || TREE_ADDRESSABLE (gnu_type) + || TYPE_IS_BY_REFERENCE_P (gnu_type) || (TYPE_SIZE (gnu_type) && TREE_CODE (TYPE_SIZE (gnu_type)) != INTEGER_CST)); } diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index 52a5ea99173..cd6626fe450 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -1102,11 +1102,9 @@ Identifier_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p) = lvalue_required_p (gnat_node, gnu_result_type, true, address_of_constant, Is_Aliased (gnat_temp)); - /* ??? We need to unshare the initializer if the object is external - as such objects are not marked for unsharing if we are not at the - global level. This should be fixed in add_decl_expr. */ + /* Finally retrieve the initializer if this is deemed valid. */ if ((constant_only && !address_of_constant) || !require_lvalue) - gnu_result = unshare_expr (DECL_INITIAL (gnu_result)); + gnu_result = DECL_INITIAL (gnu_result); } /* The GNAT tree has the type of a function set to its result type, so we @@ -1417,14 +1415,14 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute) case Attr_Pool_Address: { - tree gnu_obj_type; tree gnu_ptr = gnu_prefix; + tree gnu_obj_type; gnu_result_type = get_unpadded_type (Etype (gnat_node)); - /* If this is an unconstrained array, we know the object has been - allocated with the template in front of the object. So compute - the template address. */ + /* If this is fat pointer, the object must have been allocated with the + template in front of the array. So compute the template address; do + it by converting to a thin pointer. */ if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (gnu_ptr))) gnu_ptr = convert (build_pointer_type @@ -1433,16 +1431,15 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute) gnu_ptr); gnu_obj_type = TREE_TYPE (TREE_TYPE (gnu_ptr)); - if (TREE_CODE (gnu_obj_type) == RECORD_TYPE - && TYPE_CONTAINS_TEMPLATE_P (gnu_obj_type)) - { - tree gnu_char_ptr_type - = build_pointer_type (unsigned_char_type_node); - tree gnu_pos = byte_position (TYPE_FIELDS (gnu_obj_type)); - gnu_ptr = convert (gnu_char_ptr_type, gnu_ptr); - gnu_ptr = build_binary_op (POINTER_PLUS_EXPR, gnu_char_ptr_type, - gnu_ptr, gnu_pos); - } + + /* If this is a thin pointer, the object must have been allocated with + the template in front of the array. So compute the template address + and return it. */ + if (TYPE_IS_THIN_POINTER_P (TREE_TYPE (gnu_ptr))) + gnu_ptr + = build_binary_op (POINTER_PLUS_EXPR, TREE_TYPE (gnu_ptr), + gnu_ptr, + byte_position (TYPE_FIELDS (gnu_obj_type))); gnu_result = convert (gnu_result_type, gnu_ptr); } @@ -2654,7 +2651,7 @@ establish_gnat_vms_condition_handler (void) on the C++ optimization of the same name. The main difference is that we disregard any semantical considerations when applying it here, the counterpart being that we don't try to apply it to semantically loaded - return types, i.e. types with the TREE_ADDRESSABLE flag set. + return types, i.e. types with the TYPE_BY_REFERENCE_P flag set. We consider a function body of the following GENERIC form: @@ -3012,7 +3009,7 @@ finalize_nrv (tree fndecl, bitmap nrv, VEC(tree,gc) *other, Node_Id gnat_ret) /* We shouldn't be applying the optimization to return types that we aren't allowed to manipulate freely. */ - gcc_assert (!TREE_ADDRESSABLE (TREE_TYPE (TREE_TYPE (fndecl)))); + gcc_assert (!TYPE_IS_BY_REFERENCE_P (TREE_TYPE (TREE_TYPE (fndecl)))); /* Prune the candidates that are referenced by other return values. */ data.nrv = nrv; @@ -3656,8 +3653,8 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target, parameters. 2. There is no target and this is not an object declaration, and the - return type is by-reference or has variable size, because in these - cases the gimplifier cannot create the temporary. + return type has variable size, because in these cases the gimplifier + cannot create the temporary. 3. There is a target and it is a slice or an array with fixed size, and the return type has variable size, because the gimplifier @@ -3669,8 +3666,7 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target, && ((!gnu_target && TYPE_CI_CO_LIST (gnu_subprog_type)) || (!gnu_target && Nkind (Parent (gnat_node)) != N_Object_Declaration - && (TREE_ADDRESSABLE (gnu_result_type) - || TREE_CODE (TYPE_SIZE (gnu_result_type)) != INTEGER_CST)) + && TREE_CODE (TYPE_SIZE (gnu_result_type)) != INTEGER_CST) || (gnu_target && (TREE_CODE (gnu_target) == ARRAY_RANGE_REF || (TREE_CODE (TREE_TYPE (gnu_target)) == ARRAY_TYPE @@ -3740,7 +3736,7 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target, ; /* If the type is passed by reference, a copy is not allowed. */ - else if (TREE_ADDRESSABLE (gnu_formal_type)) + else if (TYPE_IS_BY_REFERENCE_P (gnu_formal_type)) post_error ("misaligned actual cannot be passed by reference", gnat_actual); @@ -6596,23 +6592,20 @@ gnat_to_gnu (Node_Id gnat_node) { tree gnu_ptr = gnat_to_gnu (Expression (gnat_node)); tree gnu_ptr_type = TREE_TYPE (gnu_ptr); - tree gnu_obj_type; - tree gnu_actual_obj_type = 0; - tree gnu_obj_size; - - /* If this is a thin pointer, we must dereference it to create - a fat pointer, then go back below to a thin pointer. The - reason for this is that we need a fat pointer someplace in - order to properly compute the size. */ + tree gnu_obj_type, gnu_actual_obj_type; + + /* If this is a thin pointer, we must first dereference it to create + a fat pointer, then go back below to a thin pointer. The reason + for this is that we need to have a fat pointer someplace in order + to properly compute the size. */ if (TYPE_IS_THIN_POINTER_P (TREE_TYPE (gnu_ptr))) gnu_ptr = build_unary_op (ADDR_EXPR, NULL_TREE, build_unary_op (INDIRECT_REF, NULL_TREE, gnu_ptr)); - /* If this is an unconstrained array, we know the object must - have been allocated with the template in front of the object. - So pass the template address, but get the total size. Do this - by converting to a thin pointer. */ + /* If this is a fat pointer, the object must have been allocated with + the template in front of the array. So pass the template address, + and get the total size; do it by converting to a thin pointer. */ if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (gnu_ptr))) gnu_ptr = convert (build_pointer_type @@ -6622,6 +6615,17 @@ gnat_to_gnu (Node_Id gnat_node) gnu_obj_type = TREE_TYPE (TREE_TYPE (gnu_ptr)); + /* If this is a thin pointer, the object must have been allocated with + the template in front of the array. So pass the template address, + and get the total size. */ + if (TYPE_IS_THIN_POINTER_P (TREE_TYPE (gnu_ptr))) + gnu_ptr + = build_binary_op (POINTER_PLUS_EXPR, TREE_TYPE (gnu_ptr), + gnu_ptr, + byte_position (TYPE_FIELDS (gnu_obj_type))); + + /* If we have a special dynamic constrained subtype on the node, use + it to compute the size; otherwise, use the designated subtype. */ if (Present (Actual_Designated_Subtype (gnat_node))) { gnu_actual_obj_type @@ -6637,21 +6641,10 @@ gnat_to_gnu (Node_Id gnat_node) else gnu_actual_obj_type = gnu_obj_type; - gnu_obj_size = TYPE_SIZE_UNIT (gnu_actual_obj_type); - - if (TREE_CODE (gnu_obj_type) == RECORD_TYPE - && TYPE_CONTAINS_TEMPLATE_P (gnu_obj_type)) - { - tree gnu_char_ptr_type - = build_pointer_type (unsigned_char_type_node); - tree gnu_pos = byte_position (TYPE_FIELDS (gnu_obj_type)); - gnu_ptr = convert (gnu_char_ptr_type, gnu_ptr); - gnu_ptr = build_binary_op (POINTER_PLUS_EXPR, gnu_char_ptr_type, - gnu_ptr, gnu_pos); - } - gnu_result - = build_call_alloc_dealloc (gnu_ptr, gnu_obj_size, gnu_obj_type, + = build_call_alloc_dealloc (gnu_ptr, + TYPE_SIZE_UNIT (gnu_actual_obj_type), + gnu_obj_type, Procedure_To_Call (gnat_node), Storage_Pool (gnat_node), gnat_node); @@ -6786,12 +6779,12 @@ gnat_to_gnu (Node_Id gnat_node) : NULL_TREE; tree gnu_target_desig_type = TREE_TYPE (gnu_target_type); - if ((TYPE_DUMMY_P (gnu_target_desig_type) + if ((TYPE_IS_DUMMY_P (gnu_target_desig_type) || get_alias_set (gnu_target_desig_type) != 0) && (!POINTER_TYPE_P (gnu_source_type) - || (TYPE_DUMMY_P (gnu_source_desig_type) - != TYPE_DUMMY_P (gnu_target_desig_type)) - || (TYPE_DUMMY_P (gnu_source_desig_type) + || (TYPE_IS_DUMMY_P (gnu_source_desig_type) + != TYPE_IS_DUMMY_P (gnu_target_desig_type)) + || (TYPE_IS_DUMMY_P (gnu_source_desig_type) && gnu_source_desig_type != gnu_target_desig_type) || !alias_sets_conflict_p (get_alias_set (gnu_source_desig_type), @@ -6820,12 +6813,12 @@ gnat_to_gnu (Node_Id gnat_node) tree gnu_target_array_type = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (gnu_target_type))); - if ((TYPE_DUMMY_P (gnu_target_array_type) + if ((TYPE_IS_DUMMY_P (gnu_target_array_type) || get_alias_set (gnu_target_array_type) != 0) && (!TYPE_IS_FAT_POINTER_P (gnu_source_type) - || (TYPE_DUMMY_P (gnu_source_array_type) - != TYPE_DUMMY_P (gnu_target_array_type)) - || (TYPE_DUMMY_P (gnu_source_array_type) + || (TYPE_IS_DUMMY_P (gnu_source_array_type) + != TYPE_IS_DUMMY_P (gnu_target_array_type)) + || (TYPE_IS_DUMMY_P (gnu_source_array_type) && gnu_source_array_type != gnu_target_array_type) || !alias_sets_conflict_p (get_alias_set (gnu_source_array_type), @@ -7114,10 +7107,10 @@ add_decl_expr (tree gnu_decl, Entity_Id gnat_entity) gnu_stmt = build1 (DECL_EXPR, void_type_node, gnu_decl); - /* If we are global, we don't want to actually output the DECL_EXPR for - this decl since we already have evaluated the expressions in the + /* If we are external or global, we don't want to output the DECL_EXPR for + this DECL node since we already have evaluated the expressions in the sizes and positions as globals and doing it again would be wrong. */ - if (global_bindings_p ()) + if (DECL_EXTERNAL (gnu_decl) || global_bindings_p ()) { /* Mark everything as used to prevent node sharing with subprograms. Note that walk_tree knows how to deal with TYPE_DECL, but neither @@ -7136,7 +7129,7 @@ add_decl_expr (tree gnu_decl, Entity_Id gnat_entity) && !TYPE_FAT_POINTER_P (type)) MARK_VISITED (TYPE_ADA_SIZE (type)); } - else if (!DECL_EXTERNAL (gnu_decl)) + else add_stmt_with_node (gnu_stmt, gnat_entity); /* If this is a variable and an initializer is attached to it, it must be @@ -7334,23 +7327,6 @@ gnat_gimplify_expr (tree *expr_p, gimple_seq *pre_p, return GS_ALL_DONE; } - /* Otherwise, if we are taking the address of a non-constant CONSTRUCTOR - or of a call, explicitly create the local temporary. That's required - if the type is passed by reference. */ - if (TREE_CODE (op) == CONSTRUCTOR || TREE_CODE (op) == CALL_EXPR) - { - tree mod, new_var = create_tmp_var_raw (TREE_TYPE (op), "C"); - TREE_ADDRESSABLE (new_var) = 1; - gimple_add_tmp_var (new_var); - - mod = build2 (INIT_EXPR, TREE_TYPE (new_var), new_var, op); - gimplify_and_add (mod, pre_p); - - TREE_OPERAND (expr, 0) = new_var; - recompute_tree_invariant_for_addr_expr (expr); - return GS_ALL_DONE; - } - return GS_UNHANDLED; case VIEW_CONVERT_EXPR: diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index ab8ca9d5561..4f8ab205d0b 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -220,7 +220,6 @@ static tree compute_related_constant (tree, tree); static tree split_plus (tree, tree *); static tree float_type_for_precision (int, enum machine_mode); static tree convert_to_fat_pointer (tree, tree); -static tree convert_to_thin_pointer (tree, tree); static bool potential_alignment_gap (tree, tree, tree); static void process_attributes (tree, struct attrib *); @@ -291,7 +290,7 @@ make_dummy_type (Entity_Id gnat_type) /* If there is an equivalent type, get its underlying type. */ if (Present (gnat_underlying)) - gnat_underlying = Underlying_Type (gnat_underlying); + gnat_underlying = Gigi_Equivalent_Type (Underlying_Type (gnat_underlying)); /* If there was no equivalent type (can only happen when just annotating types) or underlying type, go back to the original type. */ @@ -311,8 +310,8 @@ make_dummy_type (Entity_Id gnat_type) TYPE_DUMMY_P (gnu_type) = 1; TYPE_STUB_DECL (gnu_type) = create_type_stub_decl (TYPE_NAME (gnu_type), gnu_type); - if (Is_By_Reference_Type (gnat_type)) - TREE_ADDRESSABLE (gnu_type) = 1; + if (Is_By_Reference_Type (gnat_underlying)) + TYPE_BY_REFERENCE_P (gnu_type) = 1; SET_DUMMY_NODE (gnat_underlying, gnu_type); @@ -918,8 +917,6 @@ rest_of_record_type_compilation (tree record_type) TYPE_SIZE_UNIT (new_record_type) = size_int (TYPE_ALIGN (record_type) / BITS_PER_UNIT); - add_parallel_type (TYPE_STUB_DECL (record_type), new_record_type); - /* Now scan all the fields, replacing each field with a new field corresponding to the new encoding. */ for (old_field = TYPE_FIELDS (record_type); old_field; @@ -1058,10 +1055,8 @@ rest_of_record_type_compilation (tree record_type) TYPE_FIELDS (new_record_type) = nreverse (TYPE_FIELDS (new_record_type)); - rest_of_type_decl_compilation (TYPE_STUB_DECL (new_record_type)); + add_parallel_type (TYPE_STUB_DECL (record_type), new_record_type); } - - rest_of_type_decl_compilation (TYPE_STUB_DECL (record_type)); } /* Append PARALLEL_TYPE on the chain of parallel types for decl. */ @@ -1351,21 +1346,10 @@ create_type_decl (tree type_name, tree type, struct attrib *attr_list, if (!named) TYPE_STUB_DECL (type) = type_decl; - /* Pass the type declaration to the debug back-end unless this is an - UNCONSTRAINED_ARRAY_TYPE that the back-end does not support, or a - type for which debugging information was not requested, or else an - ENUMERAL_TYPE or RECORD_TYPE (except for fat pointers) which are - handled separately. And do not pass dummy types either. */ + /* Do not generate debug info for UNCONSTRAINED_ARRAY_TYPE that the + back-end doesn't support, and for others if we don't need to. */ if (code == UNCONSTRAINED_ARRAY_TYPE || !debug_info_p) DECL_IGNORED_P (type_decl) = 1; - else if (code != ENUMERAL_TYPE - && (code != RECORD_TYPE || TYPE_FAT_POINTER_P (type)) - && !((code == POINTER_TYPE || code == REFERENCE_TYPE) - && TYPE_IS_DUMMY_P (TREE_TYPE (type))) - && !(code == RECORD_TYPE - && TYPE_IS_DUMMY_P - (TREE_TYPE (TREE_TYPE (TYPE_FIELDS (type)))))) - rest_of_type_decl_compilation (type_decl); return type_decl; } @@ -3528,12 +3512,6 @@ update_pointer_to (tree old_type, tree new_type) TREE_TYPE (TREE_OPERAND (TYPE_NULL_BOUNDS (t), 0)) = new_type; } - /* If we have adjusted named types, finalize them. This is necessary - since we had forced a DWARF typedef for them in gnat_pushdecl. */ - for (ptr = TYPE_POINTER_TO (old_type); ptr; ptr = TYPE_NEXT_PTR_TO (ptr)) - if (TYPE_NAME (ptr) && TREE_CODE (TYPE_NAME (ptr)) == TYPE_DECL) - rest_of_type_decl_compilation (TYPE_NAME (ptr)); - /* Chain REF and its variants at the end. */ new_ref = TYPE_REFERENCE_TO (new_type); if (new_ref) @@ -3629,10 +3607,10 @@ convert_to_fat_pointer (tree type, tree expr) return t; } - /* If EXPR is a thin pointer, make template and data from the record.. */ - else if (TYPE_IS_THIN_POINTER_P (etype)) + /* If EXPR is a thin pointer, make template and data from the record. */ + if (TYPE_IS_THIN_POINTER_P (etype)) { - tree fields = TYPE_FIELDS (TREE_TYPE (etype)); + tree field = TYPE_FIELDS (TREE_TYPE (etype)); expr = gnat_protect_expr (expr); if (TREE_CODE (expr) == ADDR_EXPR) @@ -3640,10 +3618,10 @@ convert_to_fat_pointer (tree type, tree expr) else expr = build1 (INDIRECT_REF, TREE_TYPE (etype), expr); - template_tree = build_component_ref (expr, NULL_TREE, fields, false); + template_tree = build_component_ref (expr, NULL_TREE, field, false); expr = build_unary_op (ADDR_EXPR, NULL_TREE, build_component_ref (expr, NULL_TREE, - DECL_CHAIN (fields), false)); + DECL_CHAIN (field), false)); } /* Otherwise, build the constructor for the template. */ @@ -3670,27 +3648,6 @@ convert_to_fat_pointer (tree type, tree expr) return gnat_build_constructor (type, v); } -/* Convert to a thin pointer type, TYPE. The only thing we know how to convert - is something that is a fat pointer, so convert to it first if it EXPR - is not already a fat pointer. */ - -static tree -convert_to_thin_pointer (tree type, tree expr) -{ - if (!TYPE_IS_FAT_POINTER_P (TREE_TYPE (expr))) - expr - = convert_to_fat_pointer - (TREE_TYPE (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))), expr); - - /* We get the pointer to the data and use a NOP_EXPR to make it the - proper GCC type. */ - expr = build_component_ref (expr, NULL_TREE, TYPE_FIELDS (TREE_TYPE (expr)), - false); - expr = build1 (NOP_EXPR, type, expr); - - return expr; -} - /* Create an expression whose value is that of EXPR, converted to type TYPE. The TREE_TYPE of the value is always TYPE. This function implements all reasonable @@ -3891,6 +3848,8 @@ convert (tree type, tree expr) { expr = copy_node (expr); TREE_TYPE (expr) = type; + CONSTRUCTOR_ELTS (expr) + = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (expr)); return expr; } @@ -4143,33 +4102,25 @@ convert (tree type, tree expr) case POINTER_TYPE: case REFERENCE_TYPE: - /* If converting between two pointers to records denoting - both a template and type, adjust if needed to account - for any differing offsets, since one might be negative. */ + /* If converting between two thin pointers, adjust if needed to account + for any differing offsets, since one of them might be negative. */ if (TYPE_IS_THIN_POINTER_P (etype) && TYPE_IS_THIN_POINTER_P (type)) { - tree bit_diff - = size_diffop (bit_position (TYPE_FIELDS (TREE_TYPE (etype))), - bit_position (TYPE_FIELDS (TREE_TYPE (type)))); tree byte_diff - = size_binop (CEIL_DIV_EXPR, bit_diff, sbitsize_unit_node); + = size_diffop (byte_position (TYPE_FIELDS (TREE_TYPE (etype))), + byte_position (TYPE_FIELDS (TREE_TYPE (type)))); + expr = build1 (NOP_EXPR, type, expr); - TREE_CONSTANT (expr) = TREE_CONSTANT (TREE_OPERAND (expr, 0)); if (integer_zerop (byte_diff)) return expr; return build_binary_op (POINTER_PLUS_EXPR, type, expr, - fold (convert (sizetype, byte_diff))); + fold_convert (sizetype, byte_diff)); } - /* If converting to a thin pointer, handle specially. */ - if (TYPE_IS_THIN_POINTER_P (type) - && TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))) - return convert_to_thin_pointer (type, expr); - - /* If converting fat pointer to normal pointer, get the pointer to the - array and then convert it. */ - else if (TYPE_IS_FAT_POINTER_P (etype)) + /* If converting fat pointer to normal or thin pointer, get the pointer + to the array and then convert it. */ + if (TYPE_IS_FAT_POINTER_P (etype)) expr = build_component_ref (expr, NULL_TREE, TYPE_FIELDS (etype), false); @@ -4540,7 +4491,7 @@ unchecked_convert (tree type, tree expr, bool notrunc_p) Likewise for a conversion to an unconstrained array. */ if ((((INTEGRAL_TYPE_P (type) && !(code == INTEGER_TYPE && TYPE_VAX_FLOATING_POINT_P (type))) - || (POINTER_TYPE_P (type) && ! TYPE_IS_THIN_POINTER_P (type)) + || (POINTER_TYPE_P (type) && !TYPE_IS_THIN_POINTER_P (type)) || (code == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (type))) && ((INTEGRAL_TYPE_P (etype) && !(ecode == INTEGER_TYPE && TYPE_VAX_FLOATING_POINT_P (etype))) @@ -4892,11 +4843,14 @@ gnat_write_global_declarations (void) the global hash table. We use a dummy variable for this purpose. */ if (!VEC_empty (tree, types_used_by_cur_var_decl)) { + struct varpool_node *node; dummy_global = build_decl (BUILTINS_LOCATION, VAR_DECL, NULL_TREE, void_type_node); TREE_STATIC (dummy_global) = 1; TREE_ASM_WRITTEN (dummy_global) = 1; - varpool_mark_needed_node (varpool_node (dummy_global)); + node = varpool_node (dummy_global); + node->force_output = 1; + varpool_mark_needed_node (node); while (!VEC_empty (tree, types_used_by_cur_var_decl)) { diff --git a/gcc/ada/gcc-interface/utils2.c b/gcc/ada/gcc-interface/utils2.c index e0ddf2f6a37..79c5a1face3 100644 --- a/gcc/ada/gcc-interface/utils2.c +++ b/gcc/ada/gcc-interface/utils2.c @@ -1365,8 +1365,8 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand) default: common: - /* If we are taking the address of a padded record whose field is - contains a template, take the address of the template. */ + /* If we are taking the address of a padded record whose field + contains a template, take the address of the field. */ if (TYPE_IS_PADDING_P (type) && TREE_CODE (TREE_TYPE (TYPE_FIELDS (type))) == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (TYPE_FIELDS (type)))) @@ -1387,14 +1387,30 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand) tree t = remove_conversions (operand, false); bool can_never_be_null = DECL_P (t) && DECL_CAN_NEVER_BE_NULL_P (t); - /* If TYPE is a thin pointer, first convert to the fat pointer. */ - if (TYPE_IS_THIN_POINTER_P (type) - && TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))) + /* If TYPE is a thin pointer, either first retrieve the base if this + is an expression with an offset built for the initialization of an + object with an unconstrained nominal subtype, or else convert to + the fat pointer. */ + if (TYPE_IS_THIN_POINTER_P (type)) { - operand = convert - (TREE_TYPE (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))), - operand); - type = TREE_TYPE (operand); + tree rec_type = TREE_TYPE (type); + + if (TREE_CODE (operand) == POINTER_PLUS_EXPR + && integer_zerop + (size_binop (PLUS_EXPR, TREE_OPERAND (operand, 1), + byte_position (TYPE_FIELDS (rec_type)))) + && TREE_CODE (TREE_OPERAND (operand, 0)) == NOP_EXPR) + { + operand = TREE_OPERAND (TREE_OPERAND (operand, 0), 0); + type = TREE_TYPE (operand); + } + else if (TYPE_UNCONSTRAINED_ARRAY (rec_type)) + { + operand + = convert (TREE_TYPE (TYPE_UNCONSTRAINED_ARRAY (rec_type)), + operand); + type = TREE_TYPE (operand); + } } /* If we want to refer to an unconstrained array, use the appropriate @@ -1538,8 +1554,9 @@ build_cond_expr (tree result_type, tree condition_operand, /* If the result type is unconstrained, take the address of the operands and then dereference the result. Likewise if the result type is passed by - reference, but this is natively handled in the gimplifier. */ + reference, because creating a temporary of this type is not allowed. */ if (TREE_CODE (result_type) == UNCONSTRAINED_ARRAY_TYPE + || TYPE_IS_BY_REFERENCE_P (result_type) || CONTAINS_PLACEHOLDER_P (TYPE_SIZE (result_type))) { result_type = build_pointer_type (result_type); diff --git a/gcc/ada/gnat1drv.adb b/gcc/ada/gnat1drv.adb index cd992513a3c..7d96468e5f4 100644 --- a/gcc/ada/gnat1drv.adb +++ b/gcc/ada/gnat1drv.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -31,6 +31,7 @@ with Debug; use Debug; with Elists; with Errout; use Errout; with Exp_CG; +with Exp_Ch6; use Exp_Ch6; with Fmap; with Fname; use Fname; with Fname.UF; use Fname.UF; @@ -344,6 +345,13 @@ procedure Gnat1drv is Suppress_Options (Overflow_Check) := True; end if; + -- Set default for atomic synchronization. As this synchronization + -- between atomic accesses can be expensive, and not typically needed + -- on some targets, an optional target parameter can turn the option + -- off. Note Atomic Synchronization is implemented as check. + + Suppress_Options (Atomic_Synchronization) := not Atomic_Sync_Default; + -- Set switch indicating if we can use N_Expression_With_Actions -- Debug flag -gnatd.X decisively sets usage on @@ -1160,6 +1168,7 @@ begin Errout.Finalize (Last_Call => True); Errout.Output_Messages; List_Rep_Info; + List_Inlining_Info; -- Only write the library if the backend did not generate any error -- messages. Otherwise signal errors to the driver program so that diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index 9b10794e5c9..4fccee30085 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -71,7 +71,7 @@ AdaCore * About This Guide:: * Implementation Defined Pragmas:: * Implementation Defined Attributes:: -* Implementation Defined Restrictions:: +* Standard and Implementation Defined Restrictions:: * Implementation Advice:: * Implementation Defined Characteristics:: * Intrinsic Subprograms:: @@ -289,7 +289,7 @@ Implementation Defined Attributes * Wchar_T_Size:: * Word_Size:: -Implementation Defined Restrictions +Standard and Implementation Defined Restrictions * Partition-Wide Restrictions:: * Program Unit Level Restrictions:: @@ -650,7 +650,7 @@ implementation-dependent attributes, which can be used to extend and enhance the functionality of the compiler. @item -@ref{Implementation Defined Restrictions}, lists GNAT +@ref{Standard and Implementation Defined Restrictions}, lists GNAT implementation-dependent restrictions, which can be used to extend and enhance the functionality of the compiler. @@ -1202,11 +1202,23 @@ pragma Assertion_Policy (CHECK | DISABLE | IGNORE); @end smallexample @noindent -If the argument is @code{CHECK}, then pragma @code{Assert} is enabled. -If the argument is @code{IGNORE}, then pragma @code{Assert} is ignored. +If the argument is @code{CHECK}, then assertions are enabled. +If the argument is @code{IGNORE}, then assertions are ignored. This pragma overrides the effect of the @option{-gnata} switch on the command line. +Assertions are of three kinds: + +@itemize @bullet +@item +Pragma @code{Assert}. +@item +In Ada 2012, all assertions defined in the RM as aspects: preconditions, +postconditions, type invariants and (sub)type predicates. +@item +Corresponding pragmas for type invariants and (sub)type predicates. +@end itemize + The implementation defined policy @code{DISABLE} is like @code{IGNORE} except that it completely disables semantic checking of the argument to @code{pragma Assert}. This may @@ -1423,17 +1435,20 @@ pragma Check_Policy (Critical_Error, OFF); @noindent is given, then subsequent @code{Check} pragmas whose first argument is also @code{Critical_Error} will be disabled. The special identifier @code{Assertion} -controls the behavior of normal @code{Assert} pragmas (thus a pragma +controls the behavior of normal assertions (thus a pragma @code{Check_Policy} with this identifier is similar to the normal @code{Assertion_Policy} pragma except that it can appear within a declarative part). The special identifiers @code{Precondition} and @code{Postcondition} control -the status of preconditions and postconditions. If a @code{Precondition} pragma +the status of preconditions and postconditions given as pragmas. +If a @code{Precondition} pragma is encountered, it is ignored if turned off by a @code{Check_Policy} specifying that @code{Precondition} checks are @code{Off} or @code{Ignored}. Similarly use of the name @code{Postcondition} controls whether @code{Postcondition} pragmas -are recognized. +are recognized. Note that preconditions and postconditions given as aspects +are controlled differently, either by the @code{Assertion_Policy} pragma or +by the @code{Check_Policy} pragma with identifier @code{Assertion}. The check policy is @code{OFF} to turn off corresponding checks, and @code{ON} to turn on corresponding checks. The default for a set of checks for which no @@ -6904,8 +6919,8 @@ package @code{Interfaces.C}. @code{Standard'Word_Size} (@code{Standard} is the only permissible prefix) provides the value @code{System.Word_Size}. -@node Implementation Defined Restrictions -@chapter Implementation Defined Restrictions +@node Standard and Implementation Defined Restrictions +@chapter Standard and Implementation Defined Restrictions @noindent All RM defined Restriction identifiers are implemented: @@ -9920,7 +9935,7 @@ See documentation in the sources of the run time mentioned in paragraph @code{Restrictions}. See 13.12(7). @end cartouche @noindent -@xref{Implementation Defined Restrictions}. +@xref{Standard and Implementation Defined Restrictions}. @sp 1 @cartouche diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index 4d0c01c335c..6885eed89d2 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -4073,7 +4073,11 @@ activated. Note that these pragmas can also be controlled using the configuration pragmas @code{Assertion_Policy} and @code{Debug_Policy}. It also activates pragmas @code{Check}, @code{Precondition}, and @code{Postcondition}. Note that these pragmas can also be controlled -using the configuration pragma @code{Check_Policy}. +using the configuration pragma @code{Check_Policy}. In Ada 2012, it +also activates all assertions defined in the RM as aspects: preconditions, +postconditions, type invariants and (sub)type predicates. In all Ada modes, +corresponding pragmas for type invariants and (sub)type predicates are +also activated. @item -gnatA @cindex @option{-gnatA} (@command{gcc}) @@ -5949,6 +5953,7 @@ When no switch @option{^-gnatw^/WARNINGS^} is used, this is equivalent to: @table @option @c !sort! +@item -gnatw.a @item -gnatwB @item -gnatw.b @item -gnatwC @@ -13040,12 +13045,8 @@ semantically legal. If this condition is not met, @command{gnatpp} will terminate with an error message; no output file will be generated. -If the source files presented to @command{gnatpp} contain -preprocessing directives, then the output file will -correspond to the generated source after all -preprocessing is carried out. There is no way -using @command{gnatpp} to obtain pretty printed files that -include the preprocessing directives. +@command{gnatpp} cannot process sources that contain +preprocessing directives. If the compilation unit contained in the input source depends semantically upon units located @@ -26107,8 +26108,8 @@ procedure Increment is Result : Unsigned_32; begin Asm ("incl %0", - Inputs => Unsigned_32'Asm_Input ("a", Value), - Outputs => Unsigned_32'Asm_Output ("=a", Result)); + Outputs => Unsigned_32'Asm_Output ("=a", Result), + Inputs => Unsigned_32'Asm_Input ("a", Value)); return Result; end Incr; @@ -26134,10 +26135,8 @@ The @code{"="} constraint, indicating an output value, is not present. You can have multiple input variables, in the same way that you can have more than one output variable. -The parameter count (%0, %1) etc, now starts at the first input -statement, and continues with the output statements. -When both parameters use the same variable, the -compiler will treat them as the same %n operand, which is the case here. +The parameter count (%0, %1) etc, still starts at the first output statement, +and continues with the input statements. Just as the @code{Outputs} parameter causes the register to be stored into the target variable after execution of the assembler statements, so does the @@ -26191,8 +26190,8 @@ procedure Increment_2 is Result : Unsigned_32; begin Asm ("incl %0", - Inputs => Unsigned_32'Asm_Input ("a", Value), - Outputs => Unsigned_32'Asm_Output ("=a", Result)); + Outputs => Unsigned_32'Asm_Output ("=a", Result), + Inputs => Unsigned_32'Asm_Input ("a", Value)); return Result; end Incr; pragma Inline (Increment); @@ -26274,8 +26273,8 @@ assembly code; for example: @group Asm ("movl %0, %%ebx" & LF & HT & "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), - Outputs => Unsigned_32'Asm_Output ("=g", Var_Out)); + Outputs => Unsigned_32'Asm_Output ("=g", Var_Out), + Inputs => Unsigned_32'Asm_Input ("g", Var_In)); @end group @end smallexample @noindent @@ -26289,8 +26288,8 @@ to identify the registers that will be used by your assembly code: @group Asm ("movl %0, %%ebx" & LF & HT & "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), Outputs => Unsigned_32'Asm_Output ("=g", Var_Out), + Inputs => Unsigned_32'Asm_Input ("g", Var_In), Clobber => "ebx"); @end group @end smallexample @@ -26324,8 +26323,8 @@ the @code{Volatile} parameter to @code{True}; for example: @group Asm ("movl %0, %%ebx" & LF & HT & "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), Outputs => Unsigned_32'Asm_Output ("=g", Var_Out), + Inputs => Unsigned_32'Asm_Input ("g", Var_In), Clobber => "ebx", Volatile => True); @end group diff --git a/gcc/ada/gnatlink.adb b/gcc/ada/gnatlink.adb index 9a1aab4c071..09ce5bb0f5d 100644 --- a/gcc/ada/gnatlink.adb +++ b/gcc/ada/gnatlink.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1996-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -1653,7 +1653,7 @@ begin -- because bindgen uses brackets encoding for all upper -- half and wide characters in identifier names. - -- In addition, in CodePeer mode compile with -gnatC + -- In addition, in CodePeer mode compile with -gnatcC Binder_Options_From_ALI.Increment_Last; Binder_Options_From_ALI.Table (Binder_Options_From_ALI.Last) := @@ -1668,7 +1668,7 @@ begin if Opt.CodePeer_Mode then Binder_Options_From_ALI.Increment_Last; Binder_Options_From_ALI.Table (Binder_Options_From_ALI.Last) := - new String'("-gnatC"); + new String'("-gnatcC"); end if; -- Locate all the necessary programs and verify required files are present diff --git a/gcc/ada/gnatvsn.ads b/gcc/ada/gnatvsn.ads index ba9ad07a53f..66c9d1c50c1 100644 --- a/gcc/ada/gnatvsn.ads +++ b/gcc/ada/gnatvsn.ads @@ -82,7 +82,7 @@ package Gnatvsn is -- Prefix generated by binder. If it is changed, be sure to change -- GNAT.Compiler_Version.Ver_Prefix as well. - Library_Version : constant String := "4.7"; + Library_Version : constant String := "4.8"; -- Library version. This value must be updated when the compiler -- version number Gnat_Static_Version_String is updated. -- diff --git a/gcc/ada/hostparm.ads b/gcc/ada/hostparm.ads index 64164f327f4..67a7f1d4c3c 100644 --- a/gcc/ada/hostparm.ads +++ b/gcc/ada/hostparm.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -69,7 +69,7 @@ package Hostparm is -- of file names in the library, must be at least Max_Line_Length, but -- can be larger. - Max_Instantiations : constant := 4000; + Max_Instantiations : constant := 8000; -- Maximum number of instantiations permitted (to stop runaway cases -- of nested instantiations). These situations probably only occur in -- specially concocted test cases. diff --git a/gcc/ada/init.c b/gcc/ada/init.c index 79c5c5b535b..80a02b1734f 100644 --- a/gcc/ada/init.c +++ b/gcc/ada/init.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 1992-2011, Free Software Foundation, Inc. * + * Copyright (C) 1992-2012, Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -615,9 +615,13 @@ __gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext) if (signo == SIGSEGV && pc && *pc == 0x00240c83) mcontext->gregs[REG_ESP] += 4096 + 4 * sizeof (unsigned long); #elif defined (__x86_64__) - unsigned long *pc = (unsigned long *)mcontext->gregs[REG_RIP]; - /* The pattern is "orq $0x0,(%rsp)" for a probe in 64-bit mode. */ - if (signo == SIGSEGV && pc && (*pc & 0xffffffffff) == 0x00240c8348) + unsigned long long *pc = (unsigned long long *)mcontext->gregs[REG_RIP]; + if (signo == SIGSEGV && pc + /* The pattern is "orq $0x0,(%rsp)" for a probe in 64-bit mode. */ + && ((*pc & 0xffffffffffLL) == 0x00240c8348LL + /* The pattern may also be "orl $0x0,(%esp)" for a probe in + x32 mode. */ + || (*pc & 0xffffffffLL) == 0x00240c83LL)) mcontext->gregs[REG_RSP] += 4096 + 4 * sizeof (unsigned long); #elif defined (__ia64__) /* ??? The IA-64 unwinder doesn't compensate for signals. */ @@ -661,8 +665,8 @@ __gnat_error_handler (int sig, siginfo_t *si ATTRIBUTE_UNUSED, void *ucontext) break; case SIGBUS: - exception = &constraint_error; - msg = "SIGBUS"; + exception = &storage_error; + msg = "SIGBUS: possible stack overflow"; break; case SIGFPE: @@ -1239,8 +1243,6 @@ static const struct cond_except dec_ada_cond_except_table [] = { {ADA$_KEY_MISMATCH, &Use_Error}, {ADA$_MAXLINEXC, &constraint_error}, {ADA$_LINEXCMRS, &constraint_error}, - {0, 0} -}; #if 0 /* Already handled by a pragma Import_Exception @@ -1250,6 +1252,9 @@ static const struct cond_except dec_ada_cond_except_table [] = { {ADA$_KEY_ERROR, &Key_Error}, #endif + {0, 0} +}; + #endif /* IN_RTS */ /* Non-DEC Ada specific conditions. We could probably also put diff --git a/gcc/ada/inline.adb b/gcc/ada/inline.adb index 609c803db69..473553584dd 100644 --- a/gcc/ada/inline.adb +++ b/gcc/ada/inline.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -642,11 +642,9 @@ package body Inline is end if; end Is_Ancestor_Of_Main; - -- Start of processing for Analyze_Inlined_Bodies + -- Start of processing for Analyze_Inlined_Bodies begin - Analyzing_Inlined_Bodies := False; - if Serious_Errors_Detected = 0 then Push_Scope (Standard_Standard); @@ -669,8 +667,8 @@ package body Inline is Comp_Unit := Parent (Comp_Unit); end loop; - -- Load the body, unless it the main unit, or is an instance whose - -- body has already been analyzed. + -- Load the body, unless it is the main unit, or is an instance + -- whose body has already been analyzed. if Present (Comp_Unit) and then Comp_Unit /= Cunit (Main_Unit) @@ -1035,7 +1033,6 @@ package body Inline is procedure Initialize is begin - Analyzing_Inlined_Bodies := False; Pending_Descriptor.Init; Pending_Instantiations.Init; Inlined_Bodies.Init; diff --git a/gcc/ada/inline.ads b/gcc/ada/inline.ads index 04cb3234400..63c043def68 100644 --- a/gcc/ada/inline.ads +++ b/gcc/ada/inline.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -110,11 +110,6 @@ package Inline is Table_Increment => Alloc.Pending_Instantiations_Increment, Table_Name => "Pending_Descriptor"); - Analyzing_Inlined_Bodies : Boolean; - -- This flag is set False by the call to Initialize, and then is set - -- True by the call to Analyze_Inlined_Bodies. It is used to suppress - -- generation of subprogram descriptors for inlined bodies. - ----------------- -- Subprograms -- ----------------- diff --git a/gcc/ada/lib-load.adb b/gcc/ada/lib-load.adb index 0ac729ece6c..be4c5376c36 100644 --- a/gcc/ada/lib-load.adb +++ b/gcc/ada/lib-load.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -406,9 +406,25 @@ package body Lib.Load is New_Child (Load_Name, Get_Unit_Name (Name (Unit (Cunit (Unump))))); + -- If the load is for a with_clause, for visibility purposes both + -- the renamed entity and renaming one must be available in the + -- current unit: the renamed one in order to retrieve the child + -- unit, and the original one because it may be used as a prefix + -- in the body of the current unit. We add an explicit with_clause + -- for the original parent so that the renaming declaration is + -- properly loaded and analyzed. + + if Present (With_Node) then + Insert_After (With_Node, + Make_With_Clause (Sloc (With_Node), + Name => Copy_Separate_Tree (Prefix (Name (With_Node))))); + end if; + -- Save the renaming entity, to establish its visibility when -- installing the context. The implicit with is on this entity, - -- not on the package it renames. + -- not on the package it renames. This is somewhat redundant given + -- the with_clause just created, but it simplifies subsequent + -- expansion of the current with_clause. Optimizable ??? if Nkind (Error_Node) = N_With_Clause and then Nkind (Name (Error_Node)) = N_Selected_Component diff --git a/gcc/ada/link.c b/gcc/ada/link.c index 8bcad27d86b..cb1a928584a 100644 --- a/gcc/ada/link.c +++ b/gcc/ada/link.c @@ -187,7 +187,11 @@ unsigned char __gnat_using_gnu_linker = 1; const char *__gnat_object_library_extension = ".a"; unsigned char __gnat_separate_run_path_options = 0; #if defined (__x86_64) +# if defined (__LP64__) const char *__gnat_default_libgcc_subdir = "lib64"; +# else +const char *__gnat_default_libgcc_subdir = "libx32"; +# endif #else const char *__gnat_default_libgcc_subdir = "lib"; #endif diff --git a/gcc/ada/make.adb b/gcc/ada/make.adb index dd211cb4857..e2512a0678c 100644 --- a/gcc/ada/make.adb +++ b/gcc/ada/make.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -1863,44 +1863,44 @@ package body Make is end if; elsif not Read_Only and then Main_Project /= No_Project then - if not Check_Source_Info_In_ALI (ALI, Project_Tree) then - ALI := No_ALI_Id; - return; - end if; + declare + Uname : constant Name_Id := + Check_Source_Info_In_ALI (ALI, Project_Tree); - -- Check that the ALI file is in the correct object directory. - -- If it is in the object directory of a project that is - -- extended and it depends on a source that is in one of its - -- extending projects, then the ALI file is not in the correct - -- object directory. + Udata : Prj.Unit_Index; - -- First, find the project of this ALI file. As there may be - -- several projects with the same object directory, we first - -- need to find the project of the source. + begin + if Uname = No_Name then + ALI := No_ALI_Id; + return; + end if; - ALI_Project := No_Project; + -- Check that ALI file is in the correct object directory. + -- If it is in the object directory of a project that is + -- extended and it depends on a source that is in one of + -- its extending projects, then the ALI file is not in the + -- correct object directory. - declare - Udata : Prj.Unit_Index; + -- First, find the project of this ALI file. As there may be + -- several projects with the same object directory, we first + -- need to find the project of the source. - begin - Udata := Units_Htable.Get_First (Project_Tree.Units_HT); - while Udata /= No_Unit_Index loop + ALI_Project := No_Project; + + Udata := Units_Htable.Get (Project_Tree.Units_HT, Uname); + + if Udata /= No_Unit_Index then if Udata.File_Names (Impl) /= null and then Udata.File_Names (Impl).File = Source_File then ALI_Project := Udata.File_Names (Impl).Project; - exit; elsif Udata.File_Names (Spec) /= null and then Udata.File_Names (Spec).File = Source_File then ALI_Project := Udata.File_Names (Spec).Project; - exit; end if; - - Udata := Units_Htable.Get_Next (Project_Tree.Units_HT); - end loop; + end if; end; if ALI_Project = No_Project then diff --git a/gcc/ada/makeutl.adb b/gcc/ada/makeutl.adb index 413fb6a0b7a..bc3a0ee1409 100644 --- a/gcc/ada/makeutl.adb +++ b/gcc/ada/makeutl.adb @@ -186,8 +186,9 @@ package body Makeutl is function Check_Source_Info_In_ALI (The_ALI : ALI_Id; - Tree : Project_Tree_Ref) return Boolean + Tree : Project_Tree_Ref) return Name_Id is + Result : Name_Id := No_Name; Unit_Name : Name_Id; begin @@ -203,7 +204,11 @@ package body Makeutl is Unit_Name := Name_Find; if File_Not_A_Source_Of (Tree, Unit_Name, Units.Table (U).Sfile) then - return False; + return No_Name; + end if; + + if Result = No_Name then + Result := Unit_Name; end if; -- Loop to do same check for each of the withed units @@ -219,7 +224,7 @@ package body Makeutl is Unit_Name := Name_Find; if File_Not_A_Source_Of (Tree, Unit_Name, WR.Sfile) then - return False; + return No_Name; end if; end if; end; @@ -258,7 +263,7 @@ package body Makeutl is Get_Name_String (Replacement)); end if; - return False; + return No_Name; end if; end; end if; @@ -294,14 +299,14 @@ package body Makeutl is & " parsing the project. Will recompile"); end if; - return False; + return No_Name; end if; end if; end if; end; end loop; - return True; + return Result; end Check_Source_Info_In_ALI; -------------------------------- diff --git a/gcc/ada/makeutl.ads b/gcc/ada/makeutl.ads index 402c92dde49..3ddb2085dd8 100644 --- a/gcc/ada/makeutl.ads +++ b/gcc/ada/makeutl.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2004-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 2004-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -123,10 +123,10 @@ package Makeutl is function Check_Source_Info_In_ALI (The_ALI : ALI.ALI_Id; - Tree : Project_Tree_Ref) return Boolean; + Tree : Project_Tree_Ref) return Name_Id; -- Check whether all file references in ALI are still valid (i.e. the - -- source files are still associated with the same units). Return True - -- if everything is still valid. + -- source files are still associated with the same units). Return the name + -- of the unit if everything is still valid. Return No_Name otherwise. function Is_Subunit (Source : Source_Id) return Boolean; -- Return True if source is a subunit diff --git a/gcc/ada/par-ch3.adb b/gcc/ada/par-ch3.adb index ef017f08960..bfc4f592bf3 100644 --- a/gcc/ada/par-ch3.adb +++ b/gcc/ada/par-ch3.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -2279,13 +2279,30 @@ package body Ch3 is Scan; -- past RANGE end if; - Expr_Node := P_Expression; - Check_Simple_Expression (Expr_Node); - Set_Low_Bound (Typedef_Node, Expr_Node); - T_Dot_Dot; - Expr_Node := P_Expression; - Check_Simple_Expression (Expr_Node); - Set_High_Bound (Typedef_Node, Expr_Node); + Expr_Node := P_Expression_Or_Range_Attribute; + + -- Range case (not permitted by the grammar, this is surprising but + -- the grammar in the RM is as quoted above, and does not allow Range). + + if Expr_Form = EF_Range_Attr then + Error_Msg_N + ("Range attribute not allowed here, use First .. Last", Expr_Node); + Set_Low_Bound (Typedef_Node, Expr_Node); + Set_Attribute_Name (Expr_Node, Name_First); + Set_High_Bound (Typedef_Node, Copy_Separate_Tree (Expr_Node)); + Set_Attribute_Name (High_Bound (Typedef_Node), Name_Last); + + -- Normal case of explicit range + + else + Check_Simple_Expression (Expr_Node); + Set_Low_Bound (Typedef_Node, Expr_Node); + T_Dot_Dot; + Expr_Node := P_Expression; + Check_Simple_Expression (Expr_Node); + Set_High_Bound (Typedef_Node, Expr_Node); + end if; + return Typedef_Node; end P_Signed_Integer_Type_Definition; diff --git a/gcc/ada/par-prag.adb b/gcc/ada/par-prag.adb index 2e4d9b1332c..629540a4fe4 100644 --- a/gcc/ada/par-prag.adb +++ b/gcc/ada/par-prag.adb @@ -310,7 +310,7 @@ begin when Pragma_Ada_83 => Ada_Version := Ada_83; - Ada_Version_Explicit := Ada_Version; + Ada_Version_Explicit := Ada_83; ------------ -- Ada_95 -- @@ -322,7 +322,7 @@ begin when Pragma_Ada_95 => Ada_Version := Ada_95; - Ada_Version_Explicit := Ada_Version; + Ada_Version_Explicit := Ada_95; --------------------- -- Ada_05/Ada_2005 -- diff --git a/gcc/ada/projects.texi b/gcc/ada/projects.texi index 88a623d4c31..fd0de1bb8f2 100644 --- a/gcc/ada/projects.texi +++ b/gcc/ada/projects.texi @@ -403,12 +403,12 @@ If the order of the source directories is known statically, that is if be several files with the same source file name sitting in different directories of the project. In this case, only the file in the first directory is considered as a source of the project and the others are hidden. If -@code{"**"} is not used in the string list @code{Source_Dirs}, it is an error +@code{"**"} is used in the string list @code{Source_Dirs}, it is an error to have several files with the same source file name in the same directory @code{"**"} subtree, since there would be an ambiguity as to which one should -be used. However, two files with the same source file name may in two single -directories or directory subtrees. In this case, the one in the first directory -or directory subtree is a source of the project. +be used. However, two files with the same source file name may exist in two +single directories or directory subtrees. In this case, the one in the first +directory or directory subtree is a source of the project. @c --------------------------------------------- @node Object and Exec Directory diff --git a/gcc/ada/rtsfind.adb b/gcc/ada/rtsfind.adb index b8a6b1fe9c1..3b3e768adaa 100644 --- a/gcc/ada/rtsfind.adb +++ b/gcc/ada/rtsfind.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -313,6 +313,9 @@ package body Rtsfind is elsif U_Id in Ada_Interrupts_Child then Name_Buffer (15) := '.'; + elsif U_Id in Ada_Numerics_Child then + Name_Buffer (13) := '.'; + elsif U_Id in Ada_Real_Time_Child then Name_Buffer (14) := '.'; @@ -338,6 +341,10 @@ package body Rtsfind is elsif U_Id in System_Child then Name_Buffer (7) := '.'; + if U_Id in System_Dim_Child then + Name_Buffer (11) := '.'; + end if; + if U_Id in System_Multiprocessors_Child then Name_Buffer (23) := '.'; end if; diff --git a/gcc/ada/rtsfind.ads b/gcc/ada/rtsfind.ads index 64d10566067..88e61dc893c 100644 --- a/gcc/ada/rtsfind.ads +++ b/gcc/ada/rtsfind.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -125,6 +125,7 @@ package Rtsfind is Ada_Exceptions, Ada_Finalization, Ada_Interrupts, + Ada_Numerics, Ada_Real_Time, Ada_Streams, Ada_Strings, @@ -144,6 +145,10 @@ package Rtsfind is Ada_Interrupts_Names, + -- Children of Ada.Numerics + + Ada_Numerics_Generic_Elementary_Functions, + -- Children of Ada.Real_Time Ada_Real_Time_Delays, @@ -155,6 +160,9 @@ package Rtsfind is -- Children of Ada.Strings + Ada_Strings_Superbounded, + Ada_Strings_Wide_Superbounded, + Ada_Strings_Wide_Wide_Superbounded, Ada_Strings_Unbounded, -- Children of Ada.Text_IO (for Text_IO_Kludge) @@ -223,6 +231,7 @@ package Rtsfind is System_Concat_7, System_Concat_8, System_Concat_9, + System_Dim, System_DSA_Services, System_DSA_Types, System_Exception_Table, @@ -372,6 +381,11 @@ package Rtsfind is System_WWd_Enum, System_WWd_Wchar, + -- Children of System.Dim + + System_Dim_Float_IO, + System_Dim_Integer_IO, + -- Children of System.Multiprocessors System_Multiprocessors_Dispatching_Domains, @@ -413,6 +427,11 @@ package Rtsfind is Ada_Interrupts_Names .. Ada_Interrupts_Names; -- Range of values for children of Ada.Interrupts + subtype Ada_Numerics_Child is Ada_Child + range Ada_Numerics_Generic_Elementary_Functions .. + Ada_Numerics_Generic_Elementary_Functions; + -- Range of values for children of Ada.Numerics + subtype Ada_Real_Time_Child is Ada_Child range Ada_Real_Time_Delays .. Ada_Real_Time_Timing_Events; -- Range of values for children of Ada.Real_Time @@ -422,7 +441,7 @@ package Rtsfind is -- Range of values for children of Ada.Streams subtype Ada_Strings_Child is Ada_Child - range Ada_Strings_Unbounded .. Ada_Strings_Unbounded; + range Ada_Strings_Superbounded .. Ada_Strings_Unbounded; -- Range of values for children of Ada.Strings subtype Ada_Text_IO_Child is Ada_Child @@ -445,6 +464,10 @@ package Rtsfind is range System_Address_Image .. System_Tasking_Stages; -- Range of values for children or grandchildren of System + subtype System_Dim_Child is RTU_Id + range System_Dim_Float_IO .. System_Dim_Integer_IO; + -- Range of values for children of System.Dim + subtype System_Multiprocessors_Child is RTU_Id range System_Multiprocessors_Dispatching_Domains .. System_Multiprocessors_Dispatching_Domains; @@ -568,6 +591,12 @@ package Rtsfind is RE_Stream_Access, -- Ada.Streams.Stream_IO + RO_SU_Super_String, -- Ada.Strings.Superbounded + + RO_WI_Super_String, -- Ada.Strings.Wide_Superbounded + + RO_WW_Super_String, -- Ada.Strings.Wide_Wide_Superbounded + RE_Unbounded_String, -- Ada.Strings.Unbounded RE_Access_Level, -- Ada.Tags @@ -1770,6 +1799,12 @@ package Rtsfind is RE_Stream_Access => Ada_Streams_Stream_IO, + RO_SU_Super_String => Ada_Strings_Superbounded, + + RO_WI_Super_String => Ada_Strings_Wide_Superbounded, + + RO_WW_Super_String => Ada_Strings_Wide_Wide_Superbounded, + RE_Unbounded_String => Ada_Strings_Unbounded, RE_Access_Level => Ada_Tags, diff --git a/gcc/ada/s-gearop.adb b/gcc/ada/s-gearop.adb index db18a7ebec0..e1ce7e5d517 100644 --- a/gcc/ada/s-gearop.adb +++ b/gcc/ada/s-gearop.adb @@ -33,17 +33,15 @@ with Ada.Numerics; use Ada.Numerics; package body System.Generic_Array_Operations is - -- The local function Check_Unit_Last computes the index of the last - -- element returned by Unit_Vector or Unit_Matrix. A separate function is - -- needed to allow raising Constraint_Error before declaring the function - -- result variable. The result variable needs to be declared first, to - -- allow front-end inlining. - function Check_Unit_Last (Index : Integer; Order : Positive; First : Integer) return Integer; pragma Inline_Always (Check_Unit_Last); + -- Compute index of last element returned by Unit_Vector or Unit_Matrix. + -- A separate function is needed to allow raising Constraint_Error before + -- declaring the function result variable. The result variable needs to be + -- declared first, to allow front-end inlining. -------------- -- Diagonal -- @@ -51,14 +49,12 @@ package body System.Generic_Array_Operations is function Diagonal (A : Matrix) return Vector is N : constant Natural := Natural'Min (A'Length (1), A'Length (2)); - R : Vector (A'First (1) .. A'First (1) + N - 1); - begin - for J in 0 .. N - 1 loop - R (R'First + J) := A (A'First (1) + J, A'First (2) + J); - end loop; - - return R; + return R : Vector (A'First (1) .. A'First (1) + N - 1) do + for J in 0 .. N - 1 loop + R (R'First + J) := A (A'First (1) + J, A'First (2) + J); + end loop; + end return; end Diagonal; -------------------------- @@ -69,9 +65,9 @@ package body System.Generic_Array_Operations is begin if A'Length (1) /= A'Length (2) then raise Constraint_Error with "matrix is not square"; + else + return A'Length (1); end if; - - return A'Length (1); end Square_Matrix_Length; --------------------- @@ -113,6 +109,10 @@ package body System.Generic_Array_Operations is -- Elementary row operation that subtracts Factor * M (Source, <>) from -- M (Target, <>) + ------------- + -- Sub_Row -- + ------------- + procedure Sub_Row (M : in out Matrix; Target : Integer; @@ -257,6 +257,10 @@ package body System.Generic_Array_Operations is procedure Swap (X, Y : in out Scalar); -- Exchange the values of X and Y + ---------- + -- Swap -- + ---------- + procedure Swap (X, Y : in out Scalar) is T : constant Scalar := X; begin @@ -386,16 +390,14 @@ package body System.Generic_Array_Operations is ---------------------------------- function Matrix_Elementwise_Operation (X : X_Matrix) return Result_Matrix is - R : Result_Matrix (X'Range (1), X'Range (2)); - begin - for J in R'Range (1) loop - for K in R'Range (2) loop - R (J, K) := Operation (X (J, K)); + return R : Result_Matrix (X'Range (1), X'Range (2)) do + for J in R'Range (1) loop + for K in R'Range (2) loop + R (J, K) := Operation (X (J, K)); + end loop; end loop; - end loop; - - return R; + end return; end Matrix_Elementwise_Operation; ---------------------------------- @@ -403,14 +405,12 @@ package body System.Generic_Array_Operations is ---------------------------------- function Vector_Elementwise_Operation (X : X_Vector) return Result_Vector is - R : Result_Vector (X'Range); - begin - for J in R'Range loop - R (J) := Operation (X (J)); - end loop; - - return R; + return R : Result_Vector (X'Range) do + for J in R'Range loop + R (J) := Operation (X (J)); + end loop; + end return; end Vector_Elementwise_Operation; ----------------------------------------- @@ -421,29 +421,27 @@ package body System.Generic_Array_Operations is (Left : Left_Matrix; Right : Right_Matrix) return Result_Matrix is - R : Result_Matrix (Left'Range (1), Left'Range (2)); - begin - if Left'Length (1) /= Right'Length (1) - or else - Left'Length (2) /= Right'Length (2) - then - raise Constraint_Error with - "matrices are of different dimension in elementwise operation"; - end if; + return R : Result_Matrix (Left'Range (1), Left'Range (2)) do + if Left'Length (1) /= Right'Length (1) + or else + Left'Length (2) /= Right'Length (2) + then + raise Constraint_Error with + "matrices are of different dimension in elementwise operation"; + end if; - for J in R'Range (1) loop - for K in R'Range (2) loop - R (J, K) := - Operation - (Left (J, K), - Right - (J - R'First (1) + Right'First (1), - K - R'First (2) + Right'First (2))); + for J in R'Range (1) loop + for K in R'Range (2) loop + R (J, K) := + Operation + (Left (J, K), + Right + (J - R'First (1) + Right'First (1), + K - R'First (2) + Right'First (2))); + end loop; end loop; - end loop; - - return R; + end return; end Matrix_Matrix_Elementwise_Operation; ------------------------------------------------ @@ -451,33 +449,31 @@ package body System.Generic_Array_Operations is ------------------------------------------------ function Matrix_Matrix_Scalar_Elementwise_Operation - (X : X_Matrix; - Y : Y_Matrix; - Z : Z_Scalar) return Result_Matrix + (X : X_Matrix; + Y : Y_Matrix; + Z : Z_Scalar) return Result_Matrix is - R : Result_Matrix (X'Range (1), X'Range (2)); - begin - if X'Length (1) /= Y'Length (1) - or else - X'Length (2) /= Y'Length (2) - then - raise Constraint_Error with - "matrices are of different dimension in elementwise operation"; - end if; + return R : Result_Matrix (X'Range (1), X'Range (2)) do + if X'Length (1) /= Y'Length (1) + or else + X'Length (2) /= Y'Length (2) + then + raise Constraint_Error with + "matrices are of different dimension in elementwise operation"; + end if; - for J in R'Range (1) loop - for K in R'Range (2) loop - R (J, K) := - Operation - (X (J, K), - Y (J - R'First (1) + Y'First (1), - K - R'First (2) + Y'First (2)), - Z); + for J in R'Range (1) loop + for K in R'Range (2) loop + R (J, K) := + Operation + (X (J, K), + Y (J - R'First (1) + Y'First (1), + K - R'First (2) + Y'First (2)), + Z); + end loop; end loop; - end loop; - - return R; + end return; end Matrix_Matrix_Scalar_Elementwise_Operation; ----------------------------------------- @@ -488,19 +484,17 @@ package body System.Generic_Array_Operations is (Left : Left_Vector; Right : Right_Vector) return Result_Vector is - R : Result_Vector (Left'Range); - begin - if Left'Length /= Right'Length then - raise Constraint_Error with - "vectors are of different length in elementwise operation"; - end if; - - for J in R'Range loop - R (J) := Operation (Left (J), Right (J - R'First + Right'First)); - end loop; + return R : Result_Vector (Left'Range) do + if Left'Length /= Right'Length then + raise Constraint_Error with + "vectors are of different length in elementwise operation"; + end if; - return R; + for J in R'Range loop + R (J) := Operation (Left (J), Right (J - R'First + Right'First)); + end loop; + end return; end Vector_Vector_Elementwise_Operation; ------------------------------------------------ @@ -510,21 +504,18 @@ package body System.Generic_Array_Operations is function Vector_Vector_Scalar_Elementwise_Operation (X : X_Vector; Y : Y_Vector; - Z : Z_Scalar) return Result_Vector - is - R : Result_Vector (X'Range); - + Z : Z_Scalar) return Result_Vector is begin - if X'Length /= Y'Length then - raise Constraint_Error with - "vectors are of different length in elementwise operation"; - end if; - - for J in R'Range loop - R (J) := Operation (X (J), Y (J - X'First + Y'First), Z); - end loop; + return R : Result_Vector (X'Range) do + if X'Length /= Y'Length then + raise Constraint_Error with + "vectors are of different length in elementwise operation"; + end if; - return R; + for J in R'Range loop + R (J) := Operation (X (J), Y (J - X'First + Y'First), Z); + end loop; + end return; end Vector_Vector_Scalar_Elementwise_Operation; ----------------------------------------- @@ -535,16 +526,14 @@ package body System.Generic_Array_Operations is (Left : Left_Matrix; Right : Right_Scalar) return Result_Matrix is - R : Result_Matrix (Left'Range (1), Left'Range (2)); - begin - for J in R'Range (1) loop - for K in R'Range (2) loop - R (J, K) := Operation (Left (J, K), Right); + return R : Result_Matrix (Left'Range (1), Left'Range (2)) do + for J in R'Range (1) loop + for K in R'Range (2) loop + R (J, K) := Operation (Left (J, K), Right); + end loop; end loop; - end loop; - - return R; + end return; end Matrix_Scalar_Elementwise_Operation; ----------------------------------------- @@ -555,14 +544,12 @@ package body System.Generic_Array_Operations is (Left : Left_Vector; Right : Right_Scalar) return Result_Vector is - R : Result_Vector (Left'Range); - begin - for J in R'Range loop - R (J) := Operation (Left (J), Right); - end loop; - - return R; + return R : Result_Vector (Left'Range) do + for J in R'Range loop + R (J) := Operation (Left (J), Right); + end loop; + end return; end Vector_Scalar_Elementwise_Operation; ----------------------------------------- @@ -573,16 +560,14 @@ package body System.Generic_Array_Operations is (Left : Left_Scalar; Right : Right_Matrix) return Result_Matrix is - R : Result_Matrix (Right'Range (1), Right'Range (2)); - begin - for J in R'Range (1) loop - for K in R'Range (2) loop - R (J, K) := Operation (Left, Right (J, K)); + return R : Result_Matrix (Right'Range (1), Right'Range (2)) do + for J in R'Range (1) loop + for K in R'Range (2) loop + R (J, K) := Operation (Left, Right (J, K)); + end loop; end loop; - end loop; - - return R; + end return; end Scalar_Matrix_Elementwise_Operation; ----------------------------------------- @@ -593,14 +578,12 @@ package body System.Generic_Array_Operations is (Left : Left_Scalar; Right : Right_Vector) return Result_Vector is - R : Result_Vector (Right'Range); - begin - for J in R'Range loop - R (J) := Operation (Left, Right (J)); - end loop; - - return R; + return R : Result_Vector (Right'Range) do + for J in R'Range loop + R (J) := Operation (Left, Right (J)); + end loop; + end return; end Scalar_Vector_Elementwise_Operation; ---------- @@ -662,31 +645,30 @@ package body System.Generic_Array_Operations is (Left : Left_Matrix; Right : Right_Matrix) return Result_Matrix is - R : Result_Matrix (Left'Range (1), Right'Range (2)); - begin - if Left'Length (2) /= Right'Length (1) then - raise Constraint_Error with - "incompatible dimensions in matrix multiplication"; - end if; + return R : Result_Matrix (Left'Range (1), Right'Range (2)) do + if Left'Length (2) /= Right'Length (1) then + raise Constraint_Error with + "incompatible dimensions in matrix multiplication"; + end if; - for J in R'Range (1) loop - for K in R'Range (2) loop - declare - S : Result_Scalar := Zero; + for J in R'Range (1) loop + for K in R'Range (2) loop + declare + S : Result_Scalar := Zero; - begin - for M in Left'Range (2) loop - S := S + Left (J, M) * - Right (M - Left'First (2) + Right'First (1), K); - end loop; + begin + for M in Left'Range (2) loop + S := S + Left (J, M) * + Right + (M - Left'First (2) + Right'First (1), K); + end loop; - R (J, K) := S; - end; + R (J, K) := S; + end; + end loop; end loop; - end loop; - - return R; + end return; end Matrix_Matrix_Product; ---------------------------- @@ -766,28 +748,27 @@ package body System.Generic_Array_Operations is (Left : Matrix; Right : Right_Vector) return Result_Vector is - R : Result_Vector (Left'Range (1)); - begin - if Left'Length (2) /= Right'Length then - raise Constraint_Error with - "incompatible dimensions in matrix-vector multiplication"; - end if; - - for J in Left'Range (1) loop - declare - S : Result_Scalar := Zero; + return R : Result_Vector (Left'Range (1)) do + if Left'Length (2) /= Right'Length then + raise Constraint_Error with + "incompatible dimensions in matrix-vector multiplication"; + end if; - begin - for K in Left'Range (2) loop - S := S + Left (J, K) * Right (K - Left'First (2) + Right'First); - end loop; + for J in Left'Range (1) loop + declare + S : Result_Scalar := Zero; - R (J) := S; - end; - end loop; + begin + for K in Left'Range (2) loop + S := S + Left (J, K) + * Right (K - Left'First (2) + Right'First); + end loop; - return R; + R (J) := S; + end; + end loop; + end return; end Matrix_Vector_Product; ------------------- @@ -798,16 +779,14 @@ package body System.Generic_Array_Operations is (Left : Left_Vector; Right : Right_Vector) return Matrix is - R : Matrix (Left'Range, Right'Range); - begin - for J in R'Range (1) loop - for K in R'Range (2) loop - R (J, K) := Left (J) * Right (K); + return R : Matrix (Left'Range, Right'Range) do + for J in R'Range (1) loop + for K in R'Range (2) loop + R (J, K) := Left (J) * Right (K); + end loop; end loop; - end loop; - - return R; + end return; end Outer_Product; ----------------- @@ -845,7 +824,8 @@ package body System.Generic_Array_Operations is procedure Update_Matrix_With_Matrix (X : in out X_Matrix; Y : Y_Matrix) is begin if X'Length (1) /= Y'Length (1) - or else X'Length (2) /= Y'Length (2) + or else + X'Length (2) /= Y'Length (2) then raise Constraint_Error with "matrices are of different dimension in update operation"; @@ -884,17 +864,16 @@ package body System.Generic_Array_Operations is First_1 : Integer := 1; First_2 : Integer := 1) return Matrix is - R : Matrix (First_1 .. Check_Unit_Last (First_1, Order, First_1), - First_2 .. Check_Unit_Last (First_2, Order, First_2)); - begin - R := (others => (others => Zero)); - - for J in 0 .. Order - 1 loop - R (First_1 + J, First_2 + J) := One; - end loop; + return R : Matrix (First_1 .. Check_Unit_Last (First_1, Order, First_1), + First_2 .. Check_Unit_Last (First_2, Order, First_2)) + do + R := (others => (others => Zero)); - return R; + for J in 0 .. Order - 1 loop + R (First_1 + J, First_2 + J) := One; + end loop; + end return; end Unit_Matrix; ----------------- @@ -906,11 +885,11 @@ package body System.Generic_Array_Operations is Order : Positive; First : Integer := 1) return Vector is - R : Vector (First .. Check_Unit_Last (Index, Order, First)); begin - R := (others => Zero); - R (Index) := One; - return R; + return R : Vector (First .. Check_Unit_Last (Index, Order, First)) do + R := (others => Zero); + R (Index) := One; + end return; end Unit_Vector; --------------------------- @@ -921,28 +900,27 @@ package body System.Generic_Array_Operations is (Left : Left_Vector; Right : Matrix) return Result_Vector is - R : Result_Vector (Right'Range (2)); - begin - if Left'Length /= Right'Length (2) then - raise Constraint_Error with - "incompatible dimensions in vector-matrix multiplication"; - end if; - - for J in Right'Range (2) loop - declare - S : Result_Scalar := Zero; + return R : Result_Vector (Right'Range (2)) do + if Left'Length /= Right'Length (2) then + raise Constraint_Error with + "incompatible dimensions in vector-matrix multiplication"; + end if; - begin - for K in Right'Range (1) loop - S := S + Left (J - Right'First (1) + Left'First) * Right (K, J); - end loop; + for J in Right'Range (2) loop + declare + S : Result_Scalar := Zero; - R (J) := S; - end; - end loop; + begin + for K in Right'Range (1) loop + S := S + Left (J - Right'First (1) + + Left'First) * Right (K, J); + end loop; - return R; + R (J) := S; + end; + end loop; + end return; end Vector_Matrix_Product; end System.Generic_Array_Operations; diff --git a/gcc/ada/s-osinte-linux.ads b/gcc/ada/s-osinte-linux.ads index 38748663797..a99c4e53f93 100644 --- a/gcc/ada/s-osinte-linux.ads +++ b/gcc/ada/s-osinte-linux.ads @@ -7,7 +7,7 @@ -- S p e c -- -- -- -- Copyright (C) 1991-1994, Florida State University -- --- Copyright (C) 1995-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1995-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -255,6 +255,13 @@ package System.OS_Interface is function getpid return pid_t; pragma Import (C, getpid, "getpid"); + PR_SET_NAME : constant := 15; + + function prctl + (option : int; + arg2, arg3, arg4, arg5 : unsigned_long := 0) return int; + pragma Import (C, prctl); + ------------- -- Threads -- ------------- diff --git a/gcc/ada/s-osinte-vms-ia64.ads b/gcc/ada/s-osinte-vms-ia64.ads deleted file mode 100644 index 99b91aa3455..00000000000 --- a/gcc/ada/s-osinte-vms-ia64.ads +++ /dev/null @@ -1,652 +0,0 @@ ------------------------------------------------------------------------------- --- -- --- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- --- -- --- S Y S T E M . O S _ I N T E R F A C E -- --- -- --- S p e c -- --- -- --- Copyright (C) 1991-1994, Florida State University -- --- Copyright (C) 1995-2010, Free Software Foundation, Inc. -- --- -- --- GNAT is free software; you can redistribute it and/or modify it under -- --- terms of the GNU General Public License as published by the Free Soft- -- --- ware Foundation; either version 3, or (at your option) any later ver- -- --- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- --- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- --- or FITNESS FOR A PARTICULAR PURPOSE. -- --- -- --- As a special exception under Section 7 of GPL version 3, you are granted -- --- additional permissions described in the GCC Runtime Library Exception, -- --- version 3.1, as published by the Free Software Foundation. -- --- -- --- You should have received a copy of the GNU General Public License and -- --- a copy of the GCC Runtime Library Exception along with this program; -- --- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- --- <http://www.gnu.org/licenses/>. -- --- -- --- GNARL was developed by the GNARL team at Florida State University. -- --- Extensive contributions were provided by Ada Core Technologies, Inc. -- --- -- ------------------------------------------------------------------------------- - --- This is a OpenVMS/IA64 version of this package - --- This package encapsulates all direct interfaces to OS services --- that are needed by the tasking run-time (libgnarl). - --- PLEASE DO NOT add any with-clauses to this package or remove the pragma --- Preelaborate. This package is designed to be a bottom-level (leaf) package. - -with Interfaces.C; - -with Ada.Unchecked_Conversion; - -with System.Aux_DEC; - -package System.OS_Interface is - pragma Preelaborate; - - pragma Linker_Options ("--for-linker=ia64$library:pthread$rtl.exe"); - -- Link in the DEC threads library - - -- pragma Linker_Options ("--for-linker=/threads_enable"); - -- Enable upcalls and multiple kernel threads. - - subtype int is Interfaces.C.int; - subtype short is Interfaces.C.short; - subtype long is Interfaces.C.long; - subtype unsigned is Interfaces.C.unsigned; - subtype unsigned_short is Interfaces.C.unsigned_short; - subtype unsigned_long is Interfaces.C.unsigned_long; - subtype unsigned_char is Interfaces.C.unsigned_char; - subtype plain_char is Interfaces.C.plain_char; - subtype size_t is Interfaces.C.size_t; - - ----------------------------- - -- Signals (Interrupt IDs) -- - ----------------------------- - - -- Type signal has an arbitrary limit of 31 - - Max_Interrupt : constant := 31; - type Signal is new unsigned range 0 .. Max_Interrupt; - for Signal'Size use unsigned'Size; - - type sigset_t is array (Signal) of Boolean; - pragma Pack (sigset_t); - - -- Interrupt_Number_Type - -- Unsigned long integer denoting the number of an interrupt - - subtype Interrupt_Number_Type is unsigned_long; - - -- OpenVMS system services return values of type Cond_Value_Type - - subtype Cond_Value_Type is unsigned_long; - subtype Short_Cond_Value_Type is unsigned_short; - - type IO_Status_Block_Type is record - Status : Short_Cond_Value_Type; - Count : unsigned_short; - Dev_Info : unsigned_long; - end record; - - type AST_Handler is access procedure (Param : Address); - pragma Convention (C, AST_Handler); - No_AST_Handler : constant AST_Handler := null; - - CMB_M_READONLY : constant := 16#00000001#; - CMB_M_WRITEONLY : constant := 16#00000002#; - AGN_M_READONLY : constant := 16#00000001#; - AGN_M_WRITEONLY : constant := 16#00000002#; - - IO_WRITEVBLK : constant := 48; -- WRITE VIRTUAL BLOCK - IO_READVBLK : constant := 49; -- READ VIRTUAL BLOCK - - ---------------- - -- Sys_Assign -- - ---------------- - -- - -- Assign I/O Channel - -- - -- Status = returned status - -- Devnam = address of device name or logical name string - -- descriptor - -- Chan = address of word to receive channel number assigned - -- Acmode = access mode associated with channel - -- Mbxnam = address of mailbox logical name string descriptor, if - -- mailbox associated with device - -- Flags = optional channel flags longword for specifying options - -- for the $ASSIGN operation - -- - - procedure Sys_Assign - (Status : out Cond_Value_Type; - Devnam : String; - Chan : out unsigned_short; - Acmode : unsigned_short := 0; - Mbxnam : String := String'Null_Parameter; - Flags : unsigned_long := 0); - pragma Interface (External, Sys_Assign); - pragma Import_Valued_Procedure - (Sys_Assign, "SYS$ASSIGN", - (Cond_Value_Type, String, unsigned_short, - unsigned_short, String, unsigned_long), - (Value, Descriptor (s), Reference, - Value, Descriptor (s), Value), - Flags); - - ---------------- - -- Sys_Cantim -- - ---------------- - -- - -- Cancel Timer - -- - -- Status = returned status - -- Reqidt = ID of timer to be cancelled - -- Acmode = Access mode - -- - procedure Sys_Cantim - (Status : out Cond_Value_Type; - Reqidt : Address; - Acmode : unsigned); - pragma Interface (External, Sys_Cantim); - pragma Import_Valued_Procedure - (Sys_Cantim, "SYS$CANTIM", - (Cond_Value_Type, Address, unsigned), - (Value, Value, Value)); - - ---------------- - -- Sys_Crembx -- - ---------------- - -- - -- Create mailbox - -- - -- Status = returned status - -- Prmflg = permanent flag - -- Chan = channel - -- Maxmsg = maximum message - -- Bufquo = buufer quote - -- Promsk = protection mast - -- Acmode = access mode - -- Lognam = logical name - -- Flags = flags - -- - procedure Sys_Crembx - (Status : out Cond_Value_Type; - Prmflg : unsigned_char; - Chan : out unsigned_short; - Maxmsg : unsigned_long := 0; - Bufquo : unsigned_long := 0; - Promsk : unsigned_short := 0; - Acmode : unsigned_short := 0; - Lognam : String; - Flags : unsigned_long := 0); - pragma Interface (External, Sys_Crembx); - pragma Import_Valued_Procedure - (Sys_Crembx, "SYS$CREMBX", - (Cond_Value_Type, unsigned_char, unsigned_short, - unsigned_long, unsigned_long, unsigned_short, - unsigned_short, String, unsigned_long), - (Value, Value, Reference, - Value, Value, Value, - Value, Descriptor (s), Value)); - - ------------- - -- Sys_QIO -- - ------------- - -- - -- Queue I/O - -- - -- Status = Returned status of call - -- EFN = event flag to be set when I/O completes - -- Chan = channel - -- Func = function - -- Iosb = I/O status block - -- Astadr = system trap to be generated when I/O completes - -- Astprm = AST parameter - -- P1-6 = optional parameters - - procedure Sys_QIO - (Status : out Cond_Value_Type; - EFN : unsigned_long := 0; - Chan : unsigned_short; - Func : unsigned_long := 0; - Iosb : out IO_Status_Block_Type; - Astadr : AST_Handler := No_AST_Handler; - Astprm : Address := Null_Address; - P1 : unsigned_long := 0; - P2 : unsigned_long := 0; - P3 : unsigned_long := 0; - P4 : unsigned_long := 0; - P5 : unsigned_long := 0; - P6 : unsigned_long := 0); - - procedure Sys_QIO - (Status : out Cond_Value_Type; - EFN : unsigned_long := 0; - Chan : unsigned_short; - Func : unsigned_long := 0; - Iosb : Address := Null_Address; - Astadr : AST_Handler := No_AST_Handler; - Astprm : Address := Null_Address; - P1 : unsigned_long := 0; - P2 : unsigned_long := 0; - P3 : unsigned_long := 0; - P4 : unsigned_long := 0; - P5 : unsigned_long := 0; - P6 : unsigned_long := 0); - - pragma Interface (External, Sys_QIO); - pragma Import_Valued_Procedure - (Sys_QIO, "SYS$QIO", - (Cond_Value_Type, unsigned_long, unsigned_short, unsigned_long, - IO_Status_Block_Type, AST_Handler, Address, - unsigned_long, unsigned_long, unsigned_long, - unsigned_long, unsigned_long, unsigned_long), - (Value, Value, Value, Value, - Reference, Value, Value, - Value, Value, Value, - Value, Value, Value)); - - pragma Import_Valued_Procedure - (Sys_QIO, "SYS$QIO", - (Cond_Value_Type, unsigned_long, unsigned_short, unsigned_long, - Address, AST_Handler, Address, - unsigned_long, unsigned_long, unsigned_long, - unsigned_long, unsigned_long, unsigned_long), - (Value, Value, Value, Value, - Value, Value, Value, - Value, Value, Value, - Value, Value, Value)); - - ---------------- - -- Sys_Setimr -- - ---------------- - -- - -- Set Timer - -- - -- Status = Returned status of call - -- EFN = event flag to be set when timer expires - -- Tim = expiration time - -- AST = system trap to be generated when timer expires - -- Redidt = returned ID of timer (e.g. to cancel timer) - -- Flags = flags - -- - procedure Sys_Setimr - (Status : out Cond_Value_Type; - EFN : unsigned_long; - Tim : Long_Integer; - AST : AST_Handler; - Reqidt : Address; - Flags : unsigned_long); - pragma Interface (External, Sys_Setimr); - pragma Import_Valued_Procedure - (Sys_Setimr, "SYS$SETIMR", - (Cond_Value_Type, unsigned_long, Long_Integer, - AST_Handler, Address, unsigned_long), - (Value, Value, Reference, - Value, Value, Value)); - - Interrupt_ID_0 : constant := 0; - Interrupt_ID_1 : constant := 1; - Interrupt_ID_2 : constant := 2; - Interrupt_ID_3 : constant := 3; - Interrupt_ID_4 : constant := 4; - Interrupt_ID_5 : constant := 5; - Interrupt_ID_6 : constant := 6; - Interrupt_ID_7 : constant := 7; - Interrupt_ID_8 : constant := 8; - Interrupt_ID_9 : constant := 9; - Interrupt_ID_10 : constant := 10; - Interrupt_ID_11 : constant := 11; - Interrupt_ID_12 : constant := 12; - Interrupt_ID_13 : constant := 13; - Interrupt_ID_14 : constant := 14; - Interrupt_ID_15 : constant := 15; - Interrupt_ID_16 : constant := 16; - Interrupt_ID_17 : constant := 17; - Interrupt_ID_18 : constant := 18; - Interrupt_ID_19 : constant := 19; - Interrupt_ID_20 : constant := 20; - Interrupt_ID_21 : constant := 21; - Interrupt_ID_22 : constant := 22; - Interrupt_ID_23 : constant := 23; - Interrupt_ID_24 : constant := 24; - Interrupt_ID_25 : constant := 25; - Interrupt_ID_26 : constant := 26; - Interrupt_ID_27 : constant := 27; - Interrupt_ID_28 : constant := 28; - Interrupt_ID_29 : constant := 29; - Interrupt_ID_30 : constant := 30; - Interrupt_ID_31 : constant := 31; - - ----------- - -- Errno -- - ----------- - - function errno return int; - pragma Import (C, errno, "__get_errno"); - - EINTR : constant := 4; -- Interrupted system call - EAGAIN : constant := 11; -- No more processes - ENOMEM : constant := 12; -- Not enough core - - ------------------------- - -- Priority Scheduling -- - ------------------------- - - SCHED_FIFO : constant := 1; - SCHED_RR : constant := 2; - SCHED_OTHER : constant := 3; - SCHED_BG : constant := 4; - SCHED_LFI : constant := 5; - SCHED_LRR : constant := 6; - - ------------- - -- Process -- - ------------- - - type pid_t is private; - - function kill (pid : pid_t; sig : Signal) return int; - pragma Import (C, kill); - - function getpid return pid_t; - pragma Import (C, getpid); - - ------------- - -- Threads -- - ------------- - - type Thread_Body is access - function (arg : System.Address) return System.Address; - pragma Convention (C, Thread_Body); - - function Thread_Body_Access is new - Ada.Unchecked_Conversion (System.Aux_DEC.Short_Address, Thread_Body); - - type pthread_t is private; - subtype Thread_Id is pthread_t; - - type pthread_mutex_t is limited private; - type pthread_cond_t is limited private; - type pthread_attr_t is limited private; - type pthread_mutexattr_t is limited private; - type pthread_condattr_t is limited private; - type pthread_key_t is private; - - PTHREAD_CREATE_JOINABLE : constant := 0; - PTHREAD_CREATE_DETACHED : constant := 1; - - PTHREAD_CANCEL_DISABLE : constant := 0; - PTHREAD_CANCEL_ENABLE : constant := 1; - - PTHREAD_CANCEL_DEFERRED : constant := 0; - PTHREAD_CANCEL_ASYNCHRONOUS : constant := 1; - - -- Don't use ERRORCHECK mutexes, they don't work when a thread is not - -- the owner. AST's, at least, unlock others threads mutexes. Even - -- if the error is ignored, they don't work. - PTHREAD_MUTEX_NORMAL_NP : constant := 0; - PTHREAD_MUTEX_RECURSIVE_NP : constant := 1; - PTHREAD_MUTEX_ERRORCHECK_NP : constant := 2; - - PTHREAD_INHERIT_SCHED : constant := 0; - PTHREAD_EXPLICIT_SCHED : constant := 1; - - function pthread_cancel (thread : pthread_t) return int; - pragma Import (C, pthread_cancel, "PTHREAD_CANCEL"); - - procedure pthread_testcancel; - pragma Import (C, pthread_testcancel, "PTHREAD_TESTCANCEL"); - - function pthread_setcancelstate - (newstate : int; oldstate : access int) return int; - pragma Import (C, pthread_setcancelstate, "PTHREAD_SETCANCELSTATE"); - - function pthread_setcanceltype - (newtype : int; oldtype : access int) return int; - pragma Import (C, pthread_setcanceltype, "PTHREAD_SETCANCELTYPE"); - - ------------------------- - -- POSIX.1c Section 3 -- - ------------------------- - - function pthread_lock_global_np return int; - pragma Import (C, pthread_lock_global_np, "PTHREAD_LOCK_GLOBAL_NP"); - - function pthread_unlock_global_np return int; - pragma Import (C, pthread_unlock_global_np, "PTHREAD_UNLOCK_GLOBAL_NP"); - - -------------------------- - -- POSIX.1c Section 11 -- - -------------------------- - - function pthread_mutexattr_init - (attr : access pthread_mutexattr_t) return int; - pragma Import (C, pthread_mutexattr_init, "PTHREAD_MUTEXATTR_INIT"); - - function pthread_mutexattr_destroy - (attr : access pthread_mutexattr_t) return int; - pragma Import (C, pthread_mutexattr_destroy, "PTHREAD_MUTEXATTR_DESTROY"); - - function pthread_mutexattr_settype_np - (attr : access pthread_mutexattr_t; - mutextype : int) return int; - pragma Import (C, pthread_mutexattr_settype_np, - "PTHREAD_MUTEXATTR_SETTYPE_NP"); - - function pthread_mutex_init - (mutex : access pthread_mutex_t; - attr : access pthread_mutexattr_t) return int; - pragma Import (C, pthread_mutex_init, "PTHREAD_MUTEX_INIT"); - - function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int; - pragma Import (C, pthread_mutex_destroy, "PTHREAD_MUTEX_DESTROY"); - - function pthread_mutex_lock (mutex : access pthread_mutex_t) return int; - pragma Import (C, pthread_mutex_lock, "PTHREAD_MUTEX_LOCK"); - - function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int; - pragma Import (C, pthread_mutex_unlock, "PTHREAD_MUTEX_UNLOCK"); - - function pthread_condattr_init - (attr : access pthread_condattr_t) return int; - pragma Import (C, pthread_condattr_init, "PTHREAD_CONDATTR_INIT"); - - function pthread_condattr_destroy - (attr : access pthread_condattr_t) return int; - pragma Import (C, pthread_condattr_destroy, "PTHREAD_CONDATTR_DESTROY"); - - function pthread_cond_init - (cond : access pthread_cond_t; - attr : access pthread_condattr_t) return int; - pragma Import (C, pthread_cond_init, "PTHREAD_COND_INIT"); - - function pthread_cond_destroy (cond : access pthread_cond_t) return int; - pragma Import (C, pthread_cond_destroy, "PTHREAD_COND_DESTROY"); - - function pthread_cond_signal (cond : access pthread_cond_t) return int; - pragma Import (C, pthread_cond_signal, "PTHREAD_COND_SIGNAL"); - - function pthread_cond_signal_int_np - (cond : access pthread_cond_t) return int; - pragma Import (C, pthread_cond_signal_int_np, - "PTHREAD_COND_SIGNAL_INT_NP"); - - function pthread_cond_wait - (cond : access pthread_cond_t; - mutex : access pthread_mutex_t) return int; - pragma Import (C, pthread_cond_wait, "PTHREAD_COND_WAIT"); - - -------------------------- - -- POSIX.1c Section 13 -- - -------------------------- - - function pthread_mutexattr_setprotocol - (attr : access pthread_mutexattr_t; protocol : int) return int; - pragma Import (C, pthread_mutexattr_setprotocol, - "PTHREAD_MUTEXATTR_SETPROTOCOL"); - - type struct_sched_param is record - sched_priority : int; -- scheduling priority - end record; - for struct_sched_param'Size use 8*4; - pragma Convention (C, struct_sched_param); - - function pthread_setschedparam - (thread : pthread_t; - policy : int; - param : access struct_sched_param) return int; - pragma Import (C, pthread_setschedparam, "PTHREAD_SETSCHEDPARAM"); - - function pthread_attr_setscope - (attr : access pthread_attr_t; - contentionscope : int) return int; - pragma Import (C, pthread_attr_setscope, "PTHREAD_ATTR_SETSCOPE"); - - function pthread_attr_setinheritsched - (attr : access pthread_attr_t; - inheritsched : int) return int; - pragma Import (C, pthread_attr_setinheritsched, - "PTHREAD_ATTR_SETINHERITSCHED"); - - function pthread_attr_setschedpolicy - (attr : access pthread_attr_t; policy : int) return int; - pragma Import (C, pthread_attr_setschedpolicy, - "PTHREAD_ATTR_SETSCHEDPOLICY"); - - function pthread_attr_setschedparam - (attr : access pthread_attr_t; - sched_param : int) return int; - pragma Import (C, pthread_attr_setschedparam, "PTHREAD_ATTR_SETSCHEDPARAM"); - - function sched_yield return int; - - -------------------------- - -- P1003.1c Section 16 -- - -------------------------- - - function pthread_attr_init (attributes : access pthread_attr_t) return int; - pragma Import (C, pthread_attr_init, "PTHREAD_ATTR_INIT"); - - function pthread_attr_destroy - (attributes : access pthread_attr_t) return int; - pragma Import (C, pthread_attr_destroy, "PTHREAD_ATTR_DESTROY"); - - function pthread_attr_setdetachstate - (attr : access pthread_attr_t; - detachstate : int) return int; - pragma Import (C, pthread_attr_setdetachstate, - "PTHREAD_ATTR_SETDETACHSTATE"); - - function pthread_attr_setstacksize - (attr : access pthread_attr_t; - stacksize : size_t) return int; - pragma Import (C, pthread_attr_setstacksize, "PTHREAD_ATTR_SETSTACKSIZE"); - - function pthread_create - (thread : access pthread_t; - attributes : access pthread_attr_t; - start_routine : Thread_Body; - arg : System.Address) return int; - pragma Import (C, pthread_create, "PTHREAD_CREATE"); - - procedure pthread_exit (status : System.Address); - pragma Import (C, pthread_exit, "PTHREAD_EXIT"); - - function pthread_self return pthread_t; - pragma Import (C, pthread_self, "PTHREAD_SELF"); - -- ??? This can be inlined, see pthread.h - - -------------------------- - -- POSIX.1c Section 17 -- - -------------------------- - - function pthread_setspecific - (key : pthread_key_t; - value : System.Address) return int; - pragma Import (C, pthread_setspecific, "PTHREAD_SETSPECIFIC"); - - function pthread_getspecific (key : pthread_key_t) return System.Address; - pragma Import (C, pthread_getspecific, "PTHREAD_GETSPECIFIC"); - - type destructor_pointer is access procedure (arg : System.Address); - pragma Convention (C, destructor_pointer); - - function pthread_key_create - (key : access pthread_key_t; - destructor : destructor_pointer) return int; - pragma Import (C, pthread_key_create, "PTHREAD_KEY_CREATE"); - -private - - type pid_t is new int; - - type pthreadLongAddr_p is mod 2 ** Long_Integer'Size; - - type pthreadLongAddr_t is mod 2 ** Long_Integer'Size; - type pthreadLongAddr_t_ptr is mod 2 ** Long_Integer'Size; - - type pthreadLongString_t is mod 2 ** Long_Integer'Size; - - type pthreadLongUint_t is mod 2 ** Long_Integer'Size; - type pthreadLongUint_array is array (Natural range <>) - of pthreadLongUint_t; - - type pthread_t is mod 2 ** Long_Integer'Size; - - type pthread_cond_t is record - state : unsigned; - valid : unsigned; - name : pthreadLongString_t; - arg : unsigned; - sequence : unsigned; - block : pthreadLongAddr_t_ptr; - end record; - for pthread_cond_t'Size use 8*32; - pragma Convention (C, pthread_cond_t); - - type pthread_attr_t is record - valid : long; - name : pthreadLongString_t; - arg : pthreadLongUint_t; - reserved : pthreadLongUint_array (0 .. 18); - end record; - for pthread_attr_t'Size use 8*176; - pragma Convention (C, pthread_attr_t); - - type pthread_mutex_t is record - lock : unsigned; - valid : unsigned; - name : pthreadLongString_t; - arg : unsigned; - sequence : unsigned; - block : pthreadLongAddr_p; - owner : unsigned; - depth : unsigned; - end record; - for pthread_mutex_t'Size use 8*40; - pragma Convention (C, pthread_mutex_t); - - type pthread_mutexattr_t is record - valid : long; - reserved : pthreadLongUint_array (0 .. 14); - end record; - for pthread_mutexattr_t'Size use 8*128; - pragma Convention (C, pthread_mutexattr_t); - - type pthread_condattr_t is record - valid : long; - reserved : pthreadLongUint_array (0 .. 12); - end record; - for pthread_condattr_t'Size use 8*112; - pragma Convention (C, pthread_condattr_t); - - type pthread_key_t is new unsigned; - - pragma Inline (pthread_self); - -end System.OS_Interface; diff --git a/gcc/ada/s-osinte-vms.adb b/gcc/ada/s-osinte-vms.adb index 277b8374e9a..ae8fc38c984 100644 --- a/gcc/ada/s-osinte-vms.adb +++ b/gcc/ada/s-osinte-vms.adb @@ -7,7 +7,7 @@ -- B o d y -- -- -- -- Copyright (C) 1991-1994, Florida State University -- --- Copyright (C) 1995-2010, AdaCore -- +-- Copyright (C) 1995-2012, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -30,7 +30,7 @@ -- -- ------------------------------------------------------------------------------ --- This is a OpenVMS/Alpha version of this package +-- This is the OpenVMS version of this package -- This package encapsulates all direct interfaces to OS services -- that are needed by children of System. @@ -40,27 +40,9 @@ pragma Polling (Off); -- tasking operations. It causes infinite loops and other problems. with Interfaces.C; use Interfaces.C; -with System.Machine_Code; use System.Machine_Code; package body System.OS_Interface is - ------------------ - -- pthread_self -- - ------------------ - - function pthread_self return pthread_t is - use ASCII; - Self : pthread_t; - - begin - Asm ("call_pal 0x9e" & LF & HT & - "bis $31, $0, %0", - Outputs => pthread_t'Asm_Output ("=r", Self), - Clobber => "$0", - Volatile => True); - return Self; - end pthread_self; - ----------------- -- sched_yield -- ----------------- diff --git a/gcc/ada/s-osinte-vms.ads b/gcc/ada/s-osinte-vms.ads index 7747d59ba1f..cadc6526aca 100644 --- a/gcc/ada/s-osinte-vms.ads +++ b/gcc/ada/s-osinte-vms.ads @@ -7,7 +7,7 @@ -- S p e c -- -- -- -- Copyright (C) 1991-1994, Florida State University -- --- Copyright (C) 1995-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 1995-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -30,7 +30,7 @@ -- -- ------------------------------------------------------------------------------ --- This is a OpenVMS/Alpha version of this package +-- This is the OpenVMS version of this package -- This package encapsulates all direct interfaces to OS services -- that are needed by the tasking run-time (libgnarl). @@ -47,9 +47,6 @@ with System.Aux_DEC; package System.OS_Interface is pragma Preelaborate; - pragma Linker_Options ("--for-linker=sys$library:pthread$rtl.exe"); - -- Link in the DEC threads library - -- pragma Linker_Options ("--for-linker=/threads_enable"); -- Enable upcalls and multiple kernel threads. @@ -452,6 +449,12 @@ package System.OS_Interface is function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int; pragma Import (C, pthread_mutex_unlock, "PTHREAD_MUTEX_UNLOCK"); + function pthread_mutex_setname_np + (attr : access pthread_mutex_t; + name : System.Address; + mbz : System.Address) return int; + pragma Import (C, pthread_mutex_setname_np, "PTHREAD_MUTEX_SETNAME_NP"); + function pthread_condattr_init (attr : access pthread_condattr_t) return int; pragma Import (C, pthread_condattr_init, "PTHREAD_CONDATTR_INIT"); @@ -523,6 +526,12 @@ package System.OS_Interface is sched_param : int) return int; pragma Import (C, pthread_attr_setschedparam, "PTHREAD_ATTR_SETSCHEDPARAM"); + function pthread_attr_setname_np + (attr : access pthread_attr_t; + name : System.Address; + mbz : System.Address) return int; + pragma Import (C, pthread_attr_setname_np, "PTHREAD_ATTR_SETNAME_NP"); + function sched_yield return int; -------------------------- @@ -558,6 +567,7 @@ package System.OS_Interface is pragma Import (C, pthread_exit, "PTHREAD_EXIT"); function pthread_self return pthread_t; + pragma Import (C, pthread_self, "PTHREAD_SELF"); -------------------------- -- POSIX.1c Section 17 -- diff --git a/gcc/ada/s-osinte-vms-ia64.adb b/gcc/ada/s-ransee-vms.adb index e37d3d20b2f..713edaef79f 100644 --- a/gcc/ada/s-osinte-vms-ia64.adb +++ b/gcc/ada/s-ransee-vms.adb @@ -1,12 +1,12 @@ ------------------------------------------------------------------------------ -- -- --- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- +-- GNAT RUN-TIME COMPONENTS -- -- -- --- S Y S T E M . O S _ I N T E R F A C E -- +-- S Y S T E M . R A N D O M _ S E E D -- -- -- --- B o d y -- +-- B o d y -- -- -- --- Copyright (C) 2003-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 2011-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,35 +24,28 @@ -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- -- <http://www.gnu.org/licenses/>. -- -- -- --- GNARL was developed by the GNARL team at Florida State University. -- --- Extensive contributions were provided by Ada Core Technologies, Inc. -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- -- -- ------------------------------------------------------------------------------ --- This is a OpenVMS/IA64 version of this package +-- Version used on OpenVMS systems, where Clock accuracy is too low for +-- RM A.5.2(45). --- This package encapsulates all direct interfaces to OS services --- that are needed by children of System. +with Interfaces; use Interfaces; -pragma Polling (Off); --- Turn off polling, we do not want ATC polling to take place during --- tasking operations. It causes infinite loops and other problems. +package body System.Random_Seed is -with Interfaces.C; use Interfaces.C; + function Sys_Rpcc_64 return Unsigned_64; + pragma Import (C, Sys_Rpcc_64, "SYS$RPCC_64"); -package body System.OS_Interface is - - ----------------- - -- sched_yield -- - ----------------- - - function sched_yield return int is - procedure sched_yield_base; - pragma Import (C, sched_yield_base, "PTHREAD_YIELD_NP"); + -------------- + -- Get_Seed -- + -------------- + function Get_Seed return Interfaces.Unsigned_64 is begin - sched_yield_base; - return 0; - end sched_yield; + return Sys_Rpcc_64; + end Get_Seed; -end System.OS_Interface; +end System.Random_Seed; diff --git a/gcc/ada/s-taprop-linux.adb b/gcc/ada/s-taprop-linux.adb index 4e69ea4b321..6047d312567 100644 --- a/gcc/ada/s-taprop-linux.adb +++ b/gcc/ada/s-taprop-linux.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -767,6 +767,23 @@ package body System.Task_Primitives.Operations is Self_ID.Common.LL.Thread := pthread_self; Self_ID.Common.LL.LWP := lwp_self; + if Self_ID.Common.Task_Image_Len > 0 then + declare + Task_Name : String (1 .. Parameters.Max_Task_Image_Length + 1); + Result : int; + + begin + -- Set thread name to ease debugging + + Task_Name (1 .. Self_ID.Common.Task_Image_Len) := + Self_ID.Common.Task_Image (1 .. Self_ID.Common.Task_Image_Len); + Task_Name (Self_ID.Common.Task_Image_Len + 1) := ASCII.NUL; + + Result := prctl (PR_SET_NAME, unsigned_long (Task_Name'Address)); + pragma Assert (Result = 0); + end; + end if; + Specific.Set (Self_ID); if Use_Alternate_Stack diff --git a/gcc/ada/s-taprop-mingw.adb b/gcc/ada/s-taprop-mingw.adb index 50723076122..2aa5fd7c0b6 100644 --- a/gcc/ada/s-taprop-mingw.adb +++ b/gcc/ada/s-taprop-mingw.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -41,13 +41,13 @@ pragma Polling (Off); with Interfaces.C; with Interfaces.C.Strings; +with System.Float_Control; +with System.Interrupt_Management; with System.Multiprocessors; -with System.Tasking.Debug; with System.OS_Primitives; with System.Task_Info; -with System.Interrupt_Management; +with System.Tasking.Debug; with System.Win32.Ext; -with System.Float_Control; with System.Soft_Links; -- We use System.Soft_Links instead of System.Tasking.Initialization because @@ -59,14 +59,14 @@ package body System.Task_Primitives.Operations is package SSL renames System.Soft_Links; - use System.Tasking.Debug; - use System.Tasking; use Interfaces.C; use Interfaces.C.Strings; use System.OS_Interface; - use System.Parameters; use System.OS_Primitives; + use System.Parameters; use System.Task_Info; + use System.Tasking; + use System.Tasking.Debug; use System.Win32; use System.Win32.Ext; @@ -979,7 +979,6 @@ package body System.Task_Primitives.Operations is ------------------ procedure Finalize_TCB (T : Task_Id) is - Result : DWORD; Succeeded : BOOL; begin @@ -995,11 +994,9 @@ package body System.Task_Primitives.Operations is if T.Common.LL.Thread /= 0 then - -- This task has been activated. Wait for the thread to terminate - -- then close it. This is needed to release system resources. + -- This task has been activated. Close the thread handle. This + -- is needed to release system resources. - Result := WaitForSingleObject (T.Common.LL.Thread, Wait_Infinite); - pragma Assert (Result /= WAIT_FAILED); Succeeded := CloseHandle (T.Common.LL.Thread); pragma Assert (Succeeded = Win32.TRUE); end if; diff --git a/gcc/ada/s-taprop-vms.adb b/gcc/ada/s-taprop-vms.adb index 67cf363dd4e..046aa037b6d 100644 --- a/gcc/ada/s-taprop-vms.adb +++ b/gcc/ada/s-taprop-vms.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -780,6 +780,8 @@ package body System.Task_Primitives.Operations is function Thread_Body_Access is new Ada.Unchecked_Conversion (System.Aux_DEC.Short_Address, Thread_Body); + Task_Name : String (1 .. System.Parameters.Max_Task_Image_Length + 1); + begin -- Since the initial signal mask of a thread is inherited from the -- creator, we need to set our local signal mask to mask all signals @@ -809,6 +811,19 @@ package body System.Task_Primitives.Operations is (Attributes'Access, PTHREAD_EXPLICIT_SCHED); pragma Assert (Result = 0); + if T.Common.Task_Image_Len > 0 then + + -- Set thread name to ease debugging + + Task_Name (1 .. T.Common.Task_Image_Len) := + T.Common.Task_Image (1 .. T.Common.Task_Image_Len); + Task_Name (T.Common.Task_Image_Len + 1) := ASCII.NUL; + + Result := pthread_attr_setname_np + (Attributes'Access, Task_Name'Address, Null_Address); + pragma Assert (Result = 0); + end if; + -- Note: the use of Unrestricted_Access in the following call is needed -- because otherwise we have an error of getting a access-to-volatile -- value which points to a non-volatile object. But in this case it is diff --git a/gcc/ada/s-taskin.adb b/gcc/ada/s-taskin.adb index 17af0620b14..519626cb9c4 100644 --- a/gcc/ada/s-taskin.adb +++ b/gcc/ada/s-taskin.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -137,6 +137,7 @@ package body System.Tasking is T.Common.Fall_Back_Handler := null; T.Common.Specific_Handler := null; T.Common.Debug_Events := (others => False); + T.Common.Task_Image_Len := 0; if T.Common.Parent = null then diff --git a/gcc/ada/s-vaflop-vms-alpha.adb b/gcc/ada/s-vaflop-vms-alpha.adb index d03b04734a5..51571720b67 100644 --- a/gcc/ada/s-vaflop-vms-alpha.adb +++ b/gcc/ada/s-vaflop-vms-alpha.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2012, Free Software Foundation, Inc. -- -- (Version for Alpha OpenVMS) -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- @@ -202,15 +202,6 @@ package body System.Vax_Float_Operations is end S_To_F; ------------ - -- T_To_D -- - ------------ - - function T_To_D (X : T) return D is - begin - return G_To_D (T_To_G (X)); - end T_To_D; - - ------------ -- T_To_G -- ------------ @@ -223,6 +214,15 @@ package body System.Vax_Float_Operations is return B; end T_To_G; + ------------ + -- T_To_D -- + ------------ + + function T_To_D (X : T) return D is + begin + return G_To_D (T_To_G (X)); + end T_To_D; + ----------- -- Abs_F -- ----------- diff --git a/gcc/ada/s-vaflop.adb b/gcc/ada/s-vaflop.adb index dbaa1297648..ac50817c8d7 100644 --- a/gcc/ada/s-vaflop.adb +++ b/gcc/ada/s-vaflop.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-2009, Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 210e49c0a01..3df48228dea 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -2134,15 +2134,15 @@ package body Sem_Attr is case Attr_Id is - -- Attributes related to Ada 2012 iterators. Attribute specifications - -- exist for these, but they cannot be queried. + -- Attributes related to Ada 2012 iterators. Attribute specifications + -- exist for these, but they cannot be queried. - when Attribute_Constant_Indexing | - Attribute_Default_Iterator | - Attribute_Implicit_Dereference | - Attribute_Iterator_Element | - Attribute_Variable_Indexing => - Error_Msg_N ("illegal attribute", N); + when Attribute_Constant_Indexing | + Attribute_Default_Iterator | + Attribute_Implicit_Dereference | + Attribute_Iterator_Element | + Attribute_Variable_Indexing => + Error_Msg_N ("illegal attribute", N); ------------------ -- Abort_Signal -- @@ -4442,6 +4442,35 @@ package body Sem_Attr is Check_Object_Reference (E1); Set_Etype (N, Standard_Boolean); + -------------------------- + -- Scalar_Storage_Order -- + -------------------------- + + when Attribute_Scalar_Storage_Order => Scalar_Storage_Order : + begin + Check_E0; + Check_Type; + + if not Is_Record_Type (P_Type) then + Error_Attr_P ("prefix of % attribute must be record type"); + end if; + + if Bytes_Big_Endian xor Reverse_Storage_Order (P_Type) then + Rewrite (N, + New_Occurrence_Of (RTE (RE_High_Order_First), Loc)); + else + Rewrite (N, + New_Occurrence_Of (RTE (RE_Low_Order_First), Loc)); + end if; + + Set_Etype (N, RTE (RE_Bit_Order)); + Resolve (N); + + -- Reset incorrect indication of staticness + + Set_Is_Static_Expression (N, False); + end Scalar_Storage_Order; + ----------- -- Scale -- ----------- @@ -7963,6 +7992,7 @@ package body Sem_Attr is Attribute_Priority | Attribute_Read | Attribute_Result | + Attribute_Scalar_Storage_Order | Attribute_Simple_Storage_Pool | Attribute_Storage_Pool | Attribute_Storage_Size | diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb index e2d1c2b5cd6..1aa25c2a542 100644 --- a/gcc/ada/sem_ch10.adb +++ b/gcc/ada/sem_ch10.adb @@ -2936,32 +2936,11 @@ package body Sem_Ch10 is function Build_Unit_Name (Nam : Node_Id) return Node_Id is Ent : Entity_Id; - Renaming : Entity_Id; Result : Node_Id; begin if Nkind (Nam) = N_Identifier then - - -- If the parent unit P in the name of the with_clause for P.Q is - -- a renaming of package R, then the entity of the parent is set - -- to R, but the identifier retains Chars (P) to be consistent - -- with the source (see details in lib-load). However the implicit - -- with_clause for the parent must make the entity for P visible, - -- because P.Q may be used as a prefix within the current unit. - -- The entity for P is the current_entity with that name, because - -- the package renaming declaration for it has just been analyzed. - -- Note that this case can only happen if P.Q has already appeared - -- in a previous with_clause in a related unit, such as the - -- library body of the current unit. - - if Chars (Nam) /= Chars (Entity (Nam)) then - Renaming := Current_Entity (Nam); - pragma Assert (Renamed_Entity (Renaming) = Entity (Nam)); - return New_Occurrence_Of (Renaming, Loc); - - else - return New_Occurrence_Of (Entity (Nam), Loc); - end if; + return New_Occurrence_Of (Entity (Nam), Loc); else Ent := Entity (Nam); diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index 9d823164145..5acd7dc6a33 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -25,6 +25,7 @@ with Aspects; use Aspects; with Atree; use Atree; +with Debug; use Debug; with Einfo; use Einfo; with Elists; use Elists; with Errout; use Errout; @@ -3294,6 +3295,11 @@ package body Sem_Ch12 is -- but it is simpler than detecting the need for the body at the point -- of inlining, when the context of the instance is not available. + function Must_Inline_Subp return Boolean; + -- If inlining is active and the generic contains inlined subprograms, + -- return True if some of the inlined subprograms must be inlined by + -- the frontend. + ----------------------- -- Delay_Descriptors -- ----------------------- @@ -3333,6 +3339,34 @@ package body Sem_Ch12 is return False; end Might_Inline_Subp; + ---------------------- + -- Must_Inline_Subp -- + ---------------------- + + function Must_Inline_Subp return Boolean is + E : Entity_Id; + + begin + if not Inline_Processing_Required then + return False; + + else + E := First_Entity (Gen_Unit); + while Present (E) loop + if Is_Subprogram (E) + and then Is_Inlined (E) + and then Must_Inline (E) + then + return True; + end if; + + Next_Entity (E); + end loop; + end if; + + return False; + end Must_Inline_Subp; + -- Local declarations Vis_Prims_List : Elist_Id := No_Elist; @@ -3613,7 +3647,16 @@ package body Sem_Ch12 is and then Might_Inline_Subp and then not Is_Actual_Pack then - if Front_End_Inlining + if not Debug_Flag_Dot_K + and then Front_End_Inlining + and then (Is_In_Main_Unit (N) + or else In_Main_Context (Current_Scope)) + and then Nkind (Parent (N)) /= N_Compilation_Unit + then + Inline_Now := True; + + elsif Debug_Flag_Dot_K + and then Must_Inline_Subp and then (Is_In_Main_Unit (N) or else In_Main_Context (Current_Scope)) and then Nkind (Parent (N)) /= N_Compilation_Unit @@ -3730,8 +3773,8 @@ package body Sem_Ch12 is -- (Could we do better and remove the original body???) if Distribution_Stub_Mode = Generate_Caller_Stub_Body - and then Comes_From_Source (N) - and then Nkind (Parent (N)) = N_Compilation_Unit + and then Comes_From_Source (N) + and then Nkind (Parent (N)) = N_Compilation_Unit then Needs_Body := False; end if; @@ -3741,9 +3784,7 @@ package body Sem_Ch12 is -- Here is a defence against a ludicrous number of instantiations -- caused by a circular set of instantiation attempts. - if Pending_Instantiations.Last > - Hostparm.Max_Instantiations - then + if Pending_Instantiations.Last > Hostparm.Max_Instantiations then Error_Msg_N ("too many instantiations", N); raise Unrecoverable_Error; end if; @@ -3857,13 +3898,13 @@ package body Sem_Ch12 is Insert_Before (N, Act_Decl); Analyze (Act_Decl); - -- For an instantiation that is a compilation unit, place declaration - -- on current node so context is complete for analysis (including - -- nested instantiations). If this is the main unit, the declaration - -- eventually replaces the instantiation node. If the instance body - -- is created later, it replaces the instance node, and the - -- declaration is attached to it (see - -- Build_Instance_Compilation_Unit_Nodes). + -- For an instantiation that is a compilation unit, place + -- declaration on current node so context is complete for analysis + -- (including nested instantiations). If this is the main unit, + -- the declaration eventually replaces the instantiation node. + -- If the instance body is created later, it replaces the + -- instance node, and the declaration is attached to it + -- (see Build_Instance_Compilation_Unit_Nodes). else if Cunit_Entity (Current_Sem_Unit) = Defining_Entity (N) then @@ -7161,12 +7202,22 @@ package body Sem_Ch12 is end if; -- At this point either both nodes came from source or we approximated - -- their source locations through neighbouring source statements. There - -- is no need to look at the top level locations of P1 and P2 because - -- both nodes are in the same list and whether the enclosing context is - -- instantiated is irrelevant. + -- their source locations through neighbouring source statements. + + -- When two nodes come from the same instance, they have identical top + -- level locations. To determine proper relation within the tree, check + -- their locations within the template. - return Sloc (P1) < Sloc (P2); + if Top_Level_Location (Sloc (P1)) = Top_Level_Location (Sloc (P2)) then + return Sloc (P1) < Sloc (P2); + + -- The two nodes either come from unrelated instances or do not come + -- from instantiated code at all. + + else + return Top_Level_Location (Sloc (P1)) + < Top_Level_Location (Sloc (P2)); + end if; end Earlier; ---------------------- diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index 9e552ec1118..2a925584968 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -1064,24 +1064,25 @@ package body Sem_Ch13 is -- Aspects corresponding to attribute definition clauses - when Aspect_Address | - Aspect_Alignment | - Aspect_Bit_Order | - Aspect_Component_Size | - Aspect_External_Tag | - Aspect_Input | - Aspect_Machine_Radix | - Aspect_Object_Size | - Aspect_Output | - Aspect_Read | - Aspect_Size | - Aspect_Small | - Aspect_Simple_Storage_Pool | - Aspect_Storage_Pool | - Aspect_Storage_Size | - Aspect_Stream_Size | - Aspect_Value_Size | - Aspect_Write => + when Aspect_Address | + Aspect_Alignment | + Aspect_Bit_Order | + Aspect_Component_Size | + Aspect_External_Tag | + Aspect_Input | + Aspect_Machine_Radix | + Aspect_Object_Size | + Aspect_Output | + Aspect_Read | + Aspect_Scalar_Storage_Order | + Aspect_Size | + Aspect_Small | + Aspect_Simple_Storage_Pool | + Aspect_Storage_Pool | + Aspect_Storage_Size | + Aspect_Stream_Size | + Aspect_Value_Size | + Aspect_Write => -- Construct the attribute definition clause @@ -2989,6 +2990,40 @@ package body Sem_Ch13 is Analyze_Stream_TSS_Definition (TSS_Stream_Read); Set_Has_Specified_Stream_Read (Ent); + -------------------------- + -- Scalar_Storage_Order -- + -------------------------- + + -- Scalar_Storage_Order attribute definition clause + + when Attribute_Scalar_Storage_Order => Scalar_Storage_Order : declare + begin + if not Is_Record_Type (U_Ent) then + Error_Msg_N + ("Scalar_Storage_Order can only be defined for record type", + Nam); + + elsif Duplicate_Clause then + null; + + else + Analyze_And_Resolve (Expr, RTE (RE_Bit_Order)); + + if Etype (Expr) = Any_Type then + return; + + elsif not Is_Static_Expression (Expr) then + Flag_Non_Static_Expr + ("Scalar_Storage_Order requires static expression!", Expr); + + else + if (Expr_Value (Expr) = 0) /= Bytes_Big_Endian then + Set_Reverse_Storage_Order (U_Ent, True); + end if; + end if; + end if; + end Scalar_Storage_Order; + ---------- -- Size -- ---------- @@ -6147,7 +6182,7 @@ package body Sem_Ch13 is when Aspect_Address => T := RTE (RE_Address); - when Aspect_Bit_Order => + when Aspect_Bit_Order | Aspect_Scalar_Storage_Order => T := RTE (RE_Bit_Order); when Aspect_CPU => diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index d56c59fd64a..3e1059f59a3 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -3163,6 +3163,24 @@ package body Sem_Ch3 is Set_Etype (Id, T); Resolve (E, T); + -- No further action needed if E is a call to an inlined function + -- which returns an unconstrained type and it has been expanded into + -- a procedure call. In that case N has been replaced by an object + -- declaration without initializing expression and it has been + -- analyzed (see Expand_Inlined_Call). + + if Debug_Flag_Dot_K + and then Expander_Active + and then Nkind (E) = N_Function_Call + and then Nkind (Name (E)) in N_Has_Entity + and then Is_Inlined (Entity (Name (E))) + and then not Is_Constrained (Etype (E)) + and then Analyzed (N) + and then No (Expression (N)) + then + return; + end if; + -- If E is null and has been replaced by an N_Raise_Constraint_Error -- node (which was marked already-analyzed), we need to set the type -- to something other than Any_Access in order to keep gigi happy. @@ -14968,7 +14986,15 @@ package body Sem_Ch3 is then Set_Ekind (Id, Ekind (Prev)); -- will be reset later Set_Class_Wide_Type (Id, Class_Wide_Type (Prev)); - Set_Etype (Class_Wide_Type (Id), Id); + + -- If the incomplete type is completed by a private declaration + -- the class-wide type remains associated with the incomplete + -- type, to prevent order-of-elaboration issues in gigi, else + -- we associate the class-wide type with the known full view. + + if Nkind (N) /= N_Private_Type_Declaration then + Set_Etype (Class_Wide_Type (Id), Id); + end if; end if; -- Case of full declaration of private type diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 32300126b48..357053354b3 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -3398,22 +3398,12 @@ package body Sem_Ch4 is Iterator : Node_Id; begin - Set_Etype (Ent, Standard_Void_Type); + Set_Etype (Ent, Standard_Void_Type); Set_Scope (Ent, Current_Scope); Set_Parent (Ent, N); Check_SPARK_Restriction ("quantified expression is not allowed", N); - -- If expansion is enabled (and not in Alfa mode), the condition is - -- analyzed after rewritten as a loop. So we only need to set the type. - - if Operating_Mode /= Check_Semantics - and then not Alfa_Mode - then - Set_Etype (N, Standard_Boolean); - return; - end if; - if Present (Loop_Parameter_Specification (N)) then Iterator := Make_Iteration_Scheme (Loc, @@ -3438,6 +3428,7 @@ package body Sem_Ch4 is Set_Iterator_Specification (N, Iterator_Specification (Iterator)); Set_Loop_Parameter_Specification (N, Empty); + Set_Parent (Iterator_Specification (Iterator), Iterator); end if; Analyze (Condition (N)); @@ -5543,19 +5534,24 @@ package body Sem_Ch4 is return; end if; - -- If we have infix notation, the operator must be usable. - -- Within an instance, if the type is already established we - -- know it is correct. + -- If we have infix notation, the operator must be usable. Within + -- an instance, if the type is already established we know it is + -- correct. If an operand is universal it is compatible with any + -- numeric type. + -- In Ada 2005, the equality on anonymous access types is declared -- in Standard, and is always visible. elsif In_Open_Scopes (Scope (Bas)) or else Is_Potentially_Use_Visible (Bas) or else In_Use (Bas) - or else (In_Use (Scope (Bas)) - and then not Is_Hidden (Bas)) + or else (In_Use (Scope (Bas)) and then not Is_Hidden (Bas)) or else (In_Instance - and then First_Subtype (T1) = First_Subtype (Etype (R))) + and then + (First_Subtype (T1) = First_Subtype (Etype (R)) + or else + (Is_Numeric_Type (T1) + and then Is_Universal_Numeric_Type (Etype (R))))) or else Ekind (T1) = E_Anonymous_Access_Type then null; diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index f3188b07fcb..42d7756db00 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -1655,8 +1655,8 @@ package body Sem_Ch5 is Analyzed_Bound : Node_Id) return Node_Id is Assign : Node_Id; - Id : Entity_Id; Decl : Node_Id; + Id : Entity_Id; begin -- If the bound is a constant or an object, no need for a separate @@ -1677,10 +1677,6 @@ package body Sem_Ch5 is return Original_Bound; end if; - -- Here we need to capture the value - - Analyze_And_Resolve (Original_Bound, Typ); - -- Normally, the best approach is simply to generate a constant -- declaration that captures the bound. However, there is a nasty -- case where this is wrong. If the bound is complex, and has a @@ -1692,7 +1688,8 @@ package body Sem_Ch5 is -- proper trace of the value, useful in optimizations that get rid -- of junk range checks. - if not Has_Call_Using_Secondary_Stack (Original_Bound) then + if not Has_Call_Using_Secondary_Stack (Analyzed_Bound) then + Analyze_And_Resolve (Original_Bound, Typ); Force_Evaluation (Original_Bound); return Original_Bound; end if; @@ -1712,14 +1709,6 @@ package body Sem_Ch5 is Name => New_Occurrence_Of (Id, Loc), Expression => Relocate_Node (Original_Bound)); - -- We must recursively clean in the relocated expression the flag - -- analyzed to ensure that the expression is reanalyzed. Required - -- to ensure that the transient scope is established now (because - -- Establish_Transient_Scope discarded generating transient scopes - -- in the analysis of the iteration scheme). - - Reset_Analyzed_Flags (Expression (Assign)); - Insert_Actions (Parent (N), New_List (Decl, Assign)); -- Now that this temporary variable is initialized we decorate it @@ -1863,7 +1852,13 @@ package body Sem_Ch5 is if Nkind (Nam) = N_Explicit_Dereference then Subp := Etype (Nam); - -- Normal case + -- Call using a selected component notation or Ada 2005 object + -- operation notation + + elsif Nkind (Nam) = N_Selected_Component then + Subp := Entity (Selector_Name (Nam)); + + -- Common case else Subp := Entity (Nam); @@ -2102,7 +2097,14 @@ package body Sem_Ch5 is -- because the second one may be created in a different scope, -- e.g. a precondition procedure, leading to a crash in GIGI. - if No (Etype (Id)) or else Etype (Id) = Any_Type then + -- Note that if the parent node is a quantified expression, + -- this preservation is delayed until the expansion of the + -- quantified expression where the node is rewritten as an + -- expression with actions. + + if (No (Etype (Id)) or else Etype (Id) = Any_Type) + and then Nkind (Parent (N)) /= N_Quantified_Expression + then Set_Etype (Id, Etype (DS)); end if; @@ -2214,9 +2216,9 @@ package body Sem_Ch5 is end; end Analyze_Iteration_Scheme; - ------------------------------------- - -- Analyze_Iterator_Specification -- - ------------------------------------- + ------------------------------------ + -- Analyze_Iterator_Specification -- + ------------------------------------ procedure Analyze_Iterator_Specification (N : Node_Id) is Loc : constant Source_Ptr := Sloc (N); @@ -2228,15 +2230,7 @@ package body Sem_Ch5 is Typ : Entity_Id; begin - -- In semantics/Alfa modes, we won't be further expanding the loop, so - -- introduce loop variable so that loop body can be properly analyzed. - -- Otherwise this happens after expansion. - - if Operating_Mode = Check_Semantics - or else Alfa_Mode - then - Enter_Name (Def_Id); - end if; + Enter_Name (Def_Id); Set_Ekind (Def_Id, E_Variable); @@ -2249,7 +2243,13 @@ package body Sem_Ch5 is -- The declaration must be a renaming because the body of the loop may -- assign to elements. - if not Is_Entity_Name (Iter_Name) then + -- Note that if the parent node is a quantified expression, this + -- declaration is created during the expansion of the quantified + -- expression where the node is rewritten as an expression with actions. + + if not Is_Entity_Name (Iter_Name) + and then Nkind (Parent (Parent (N))) /= N_Quantified_Expression + then declare Id : constant Entity_Id := Make_Temporary (Loc, 'R', Iter_Name); Decl : Node_Id; @@ -2281,7 +2281,7 @@ package body Sem_Ch5 is -- Iterate is not a reserved name. What matter is that the return type -- of the function is an iterator type. - else + elsif Is_Entity_Name (Iter_Name) then Analyze (Iter_Name); if Nkind (Iter_Name) = N_Function_Call then diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index 8df63dc958a..60d07c66edb 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -132,6 +132,15 @@ package body Sem_Ch6 is function Can_Override_Operator (Subp : Entity_Id) return Boolean; -- Returns true if Subp can override a predefined operator. + procedure Check_And_Build_Body_To_Inline + (N : Node_Id; + Spec_Id : Entity_Id; + Body_Id : Entity_Id); + -- Spec_Id and Body_Id are the entities of the specification and body of + -- the subprogram body N. If N can be inlined by the frontend (supported + -- cases documented in Check_Body_To_Inline) then build the body-to-inline + -- associated with N and attach it to the declaration node of Spec_Id. + procedure Check_Conformance (New_Id : Entity_Id; Old_Id : Entity_Id; @@ -273,7 +282,6 @@ package body Sem_Ch6 is Spec : constant Node_Id := Specification (N); Def_Id : Entity_Id; - pragma Unreferenced (Def_Id); Prev : Entity_Id; -- If the expression is a completion, Prev is the entity whose @@ -371,6 +379,26 @@ package body Sem_Ch6 is if Has_Completion (Prev) then Set_Is_Inlined (Prev); + + -- The formals of the expression function are body formals, + -- and do not appear in the ali file, which will only contain + -- references to the formals of the original subprogram spec. + + declare + F1 : Entity_Id; + F2 : Entity_Id; + + begin + F1 := First_Formal (Def_Id); + F2 := First_Formal (Prev); + + while Present (F1) loop + Set_Spec_Entity (F1, F2); + Next_Formal (F1); + Next_Formal (F2); + end loop; + end; + else Set_Is_Inlined (Defining_Entity (New_Body)); end if; @@ -2495,6 +2523,7 @@ package body Sem_Ch6 is if Comes_From_Source (Body_Id) and then Serious_Errors_Detected = 0 + and then not Debug_Flag_Dot_K then P_Ent := Body_Id; loop @@ -2515,6 +2544,8 @@ package body Sem_Ch6 is end loop; end if; + -- Look ahead to recognize a pragma inline that appears after the body + Check_Inline_Pragma (Spec_Id); -- Deal with special case of a fully private operation in the body of @@ -2823,14 +2854,31 @@ package body Sem_Ch6 is if Nkind (N) = N_Subprogram_Body_Stub then return; + end if; - elsif Present (Spec_Id) - and then Expander_Active - and then - (Has_Pragma_Inline_Always (Spec_Id) - or else (Has_Pragma_Inline (Spec_Id) and Front_End_Inlining)) + -- Handle frontend inlining. There is no need to prepare us for inlining + -- if we will not generate the code. + + -- Old semantics + + if not Debug_Flag_Dot_K then + if Present (Spec_Id) + and then Expander_Active + and then + (Has_Pragma_Inline_Always (Spec_Id) + or else (Has_Pragma_Inline (Spec_Id) and Front_End_Inlining)) + then + Build_Body_To_Inline (N, Spec_Id); + end if; + + -- New semantics + + elsif Expander_Active + and then Serious_Errors_Detected = 0 + and then Present (Spec_Id) + and then Has_Pragma_Inline (Spec_Id) then - Build_Body_To_Inline (N, Spec_Id); + Check_And_Build_Body_To_Inline (N, Spec_Id, Body_Id); end if; -- Ada 2005 (AI-262): In library subprogram bodies, after the analysis @@ -3198,8 +3246,12 @@ package body Sem_Ch6 is end if; Designator := Analyze_Subprogram_Specification (Specification (N)); + + -- A reference may already have been generated for the unit name, in + -- which case the following call is redundant. However it is needed for + -- declarations that are the rewriting of an expression function. + Generate_Definition (Designator); - -- ??? why this call, already in Analyze_Subprogram_Specification if Debug_Flag_C then Write_Str ("==> subprogram spec "); @@ -3399,9 +3451,15 @@ package body Sem_Ch6 is Check_SPARK_Restriction ("user-defined operator is not allowed", N); end if; - -- Proceed with analysis + -- Proceed with analysis. Do not emit a cross-reference entry if the + -- specification comes from an expression function, because it may be + -- the completion of a previous declaration. It is is not, the cross- + -- reference entry will be emitted for the new subprogram declaration. + + if Nkind (Parent (N)) /= N_Expression_Function then + Generate_Definition (Designator); + end if; - Generate_Definition (Designator); Set_Contract (Designator, Make_Contract (Sloc (Designator))); if Nkind (N) = N_Function_Specification then @@ -4057,29 +4115,1231 @@ package body Sem_Ch6 is -- Cannot_Inline -- ------------------- - procedure Cannot_Inline (Msg : String; N : Node_Id; Subp : Entity_Id) is + procedure Cannot_Inline + (Msg : String; + N : Node_Id; + Subp : Entity_Id; + Is_Serious : Boolean := False) + is begin - -- Do not emit warning if this is a predefined unit which is not the - -- main unit. With validity checks enabled, some predefined subprograms - -- may contain nested subprograms and become ineligible for inlining. + pragma Assert (Msg (Msg'Last) = '?'); - if Is_Predefined_File_Name (Unit_File_Name (Get_Source_Unit (Subp))) - and then not In_Extended_Main_Source_Unit (Subp) - then - null; + -- Old semantics + + if not Debug_Flag_Dot_K then - elsif Has_Pragma_Inline_Always (Subp) then + -- Do not emit warning if this is a predefined unit which is not + -- the main unit. With validity checks enabled, some predefined + -- subprograms may contain nested subprograms and become ineligible + -- for inlining. - -- Remove last character (question mark) to make this into an error, - -- because the Inline_Always pragma cannot be obeyed. + if Is_Predefined_File_Name (Unit_File_Name (Get_Source_Unit (Subp))) + and then not In_Extended_Main_Source_Unit (Subp) + then + null; + + elsif Has_Pragma_Inline_Always (Subp) then + + -- Remove last character (question mark) to make this into an + -- error, because the Inline_Always pragma cannot be obeyed. + + Error_Msg_NE (Msg (Msg'First .. Msg'Last - 1), N, Subp); + + elsif Ineffective_Inline_Warnings then + Error_Msg_NE (Msg, N, Subp); + end if; + + return; + + -- New semantics + + elsif Is_Serious then + + -- Remove last character (question mark) to make this into an error. Error_Msg_NE (Msg (Msg'First .. Msg'Last - 1), N, Subp); - elsif Ineffective_Inline_Warnings then - Error_Msg_NE (Msg, N, Subp); + elsif Optimization_Level = 0 then + + -- Do not emit warning if this is a predefined unit which is not + -- the main unit. This behavior is currently provided for backward + -- compatibility but it will be removed when we enforce the + -- strictness of the new rules. + + if Is_Predefined_File_Name (Unit_File_Name (Get_Source_Unit (Subp))) + and then not In_Extended_Main_Source_Unit (Subp) + then + null; + + elsif Has_Pragma_Inline_Always (Subp) then + + -- Emit a warning if this is a call to a runtime subprogram + -- which is located inside a generic. Previously this call + -- was silently skipped! + + if Is_Generic_Instance (Subp) then + declare + Gen_P : constant Entity_Id := Generic_Parent (Parent (Subp)); + begin + if Is_Predefined_File_Name + (Unit_File_Name (Get_Source_Unit (Gen_P))) + then + Set_Is_Inlined (Subp, False); + Error_Msg_NE (Msg, N, Subp); + return; + end if; + end; + end if; + + -- Remove last character (question mark) to make this into an + -- error, because the Inline_Always pragma cannot be obeyed. + + Error_Msg_NE (Msg (Msg'First .. Msg'Last - 1), N, Subp); + + else pragma Assert (Front_End_Inlining); + Set_Is_Inlined (Subp, False); + + -- When inlining cannot take place we must issue an error. + -- For backward compatibility we still report a warning. + + if Ineffective_Inline_Warnings then + Error_Msg_NE (Msg, N, Subp); + end if; + end if; + + -- Compiling with optimizations enabled it is too early to report + -- problems since the backend may still perform inlining. In order + -- to report unhandled inlinings the program must be compiled with + -- -Winline and the error is reported by the backend. + + else + null; end if; end Cannot_Inline; + ------------------------------------ + -- Check_And_Build_Body_To_Inline -- + ------------------------------------ + + procedure Check_And_Build_Body_To_Inline + (N : Node_Id; + Spec_Id : Entity_Id; + Body_Id : Entity_Id) + is + procedure Build_Body_To_Inline (N : Node_Id; Spec_Id : Entity_Id); + -- Use generic machinery to build an unexpanded body for the subprogram. + -- This body is subsequently used for inline expansions at call sites. + + function Can_Split_Unconstrained_Function (N : Node_Id) return Boolean; + -- Return true if the function body N has no local declarations and its + -- unique statement is a single extended return statement with a handled + -- statements sequence. + + function Check_Body_To_Inline + (N : Node_Id; + Subp : Entity_Id) return Boolean; + -- N is the N_Subprogram_Body of Subp. Return true if Subp can be + -- inlined by the frontend. These are the rules: + -- * At -O0 use fe inlining when inline_always is specified except if + -- the function returns a controlled type. + -- * At other optimization levels use the fe inlining for both inline + -- and inline_always in the following cases: + -- - function returning a known at compile time constant + -- - function returning a call to an intrinsic function + -- - function returning an unconstrained type (see Can_Split + -- Unconstrained_Function). + -- - function returning a call to a frontend-inlined function + -- Use the back-end mechanism otherwise + -- + -- In addition, in the following cases the function cannot be inlined by + -- the frontend: + -- - functions that uses the secondary stack + -- - functions that have declarations of: + -- - Concurrent types + -- - Packages + -- - Instantiations + -- - Subprograms + -- - functions that have some of the following statements: + -- - abort + -- - asynchronous-select + -- - conditional-entry-call + -- - delay-relative + -- - delay-until + -- - selective-accept + -- - timed-entry-call + -- - functions that have exception handlers + -- - functions that have some enclosing body containing instantiations + -- that appear before the corresponding generic body. + + procedure Generate_Body_To_Inline + (N : Node_Id; + Body_To_Inline : out Node_Id); + -- Generate a parameterless duplicate of subprogram body N. Occurrences + -- of pragmas referencing the formals are removed since they have no + -- meaning when the body is inlined and the formals are rewritten (the + -- analysis of the non-inlined body will handle these pragmas properly). + -- A new internal name is associated with Body_To_Inline. + + procedure Preanalyze (N : Node_Id); + -- Performs a pre-analysis of node N. During pre-analysis no expansion + -- is carried out for N or its children. For more info on pre-analysis + -- read the spec of Sem. + + procedure Split_Unconstrained_Function + (N : Node_Id; + Spec_Id : Entity_Id); + -- N is an inlined function body that returns an unconstrained type and + -- has a single extended return statement. Split N in two subprograms: + -- a procedure P' and a function F'. The formals of P' duplicate the + -- formals of N plus an extra formal which is used return a value; + -- its body is composed by the declarations and list of statements + -- of the extended return statement of N. + + -------------------------- + -- Build_Body_To_Inline -- + -------------------------- + + procedure Build_Body_To_Inline (N : Node_Id; Spec_Id : Entity_Id) is + Decl : constant Node_Id := Unit_Declaration_Node (Spec_Id); + Original_Body : Node_Id; + Body_To_Analyze : Node_Id; + + begin + pragma Assert (Current_Scope = Spec_Id); + + -- Within an instance, the body to inline must be treated as a nested + -- generic, so that the proper global references are preserved. We + -- do not do this at the library level, because it is not needed, and + -- furthermore this causes trouble if front end inlining is activated + -- (-gnatN). + + if In_Instance + and then Scope (Current_Scope) /= Standard_Standard + then + Save_Env (Scope (Current_Scope), Scope (Current_Scope)); + end if; + + -- We need to capture references to the formals in order + -- to substitute the actuals at the point of inlining, i.e. + -- instantiation. To treat the formals as globals to the body to + -- inline, we nest it within a dummy parameterless subprogram, + -- declared within the real one. + + Generate_Body_To_Inline (N, Original_Body); + Body_To_Analyze := Copy_Generic_Node (Original_Body, Empty, False); + + -- Set return type of function, which is also global and does not + -- need to be resolved. + + if Ekind (Spec_Id) = E_Function then + Set_Result_Definition (Specification (Body_To_Analyze), + New_Occurrence_Of (Etype (Spec_Id), Sloc (N))); + end if; + + if No (Declarations (N)) then + Set_Declarations (N, New_List (Body_To_Analyze)); + else + Append_To (Declarations (N), Body_To_Analyze); + end if; + + Preanalyze (Body_To_Analyze); + + Push_Scope (Defining_Entity (Body_To_Analyze)); + Save_Global_References (Original_Body); + End_Scope; + Remove (Body_To_Analyze); + + -- Restore environment if previously saved + + if In_Instance + and then Scope (Current_Scope) /= Standard_Standard + then + Restore_Env; + end if; + + pragma Assert (No (Body_To_Inline (Decl))); + Set_Body_To_Inline (Decl, Original_Body); + Set_Ekind (Defining_Entity (Original_Body), Ekind (Spec_Id)); + end Build_Body_To_Inline; + + -------------------------- + -- Check_Body_To_Inline -- + -------------------------- + + function Check_Body_To_Inline + (N : Node_Id; + Subp : Entity_Id) return Boolean + is + Max_Size : constant := 10; + Stat_Count : Integer := 0; + + function Has_Excluded_Declaration (Decls : List_Id) return Boolean; + -- Check for declarations that make inlining not worthwhile + + function Has_Excluded_Statement (Stats : List_Id) return Boolean; + -- Check for statements that make inlining not worthwhile: any + -- tasking statement, nested at any level. Keep track of total + -- number of elementary statements, as a measure of acceptable size. + + function Has_Pending_Instantiation return Boolean; + -- Return True if some enclosing body contains instantiations that + -- appear before the corresponding generic body. + + function Returns_Compile_Time_Constant (N : Node_Id) return Boolean; + -- Return True if all the return statements of the function body N + -- are simple return statements and return a compile time constant + + function Returns_Intrinsic_Function_Call (N : Node_Id) return Boolean; + -- Return True if all the return statements of the function body N + -- are simple return statements and return an intrinsic function call + + function Uses_Secondary_Stack (N : Node_Id) return Boolean; + -- If the body of the subprogram includes a call that returns an + -- unconstrained type, the secondary stack is involved, and it + -- is not worth inlining. + + ------------------------------ + -- Has_Excluded_Declaration -- + ------------------------------ + + function Has_Excluded_Declaration (Decls : List_Id) return Boolean is + D : Node_Id; + + function Is_Unchecked_Conversion (D : Node_Id) return Boolean; + -- Nested subprograms make a given body ineligible for inlining, + -- but we make an exception for instantiations of unchecked + -- conversion. The body has not been analyzed yet, so check the + -- name, and verify that the visible entity with that name is the + -- predefined unit. + + ----------------------------- + -- Is_Unchecked_Conversion -- + ----------------------------- + + function Is_Unchecked_Conversion (D : Node_Id) return Boolean is + Id : constant Node_Id := Name (D); + Conv : Entity_Id; + + begin + if Nkind (Id) = N_Identifier + and then Chars (Id) = Name_Unchecked_Conversion + then + Conv := Current_Entity (Id); + + elsif Nkind_In (Id, N_Selected_Component, N_Expanded_Name) + and then Chars (Selector_Name (Id)) + = Name_Unchecked_Conversion + then + Conv := Current_Entity (Selector_Name (Id)); + else + return False; + end if; + + return Present (Conv) + and then Is_Predefined_File_Name + (Unit_File_Name (Get_Source_Unit (Conv))) + and then Is_Intrinsic_Subprogram (Conv); + end Is_Unchecked_Conversion; + + -- Start of processing for Has_Excluded_Declaration + + begin + D := First (Decls); + while Present (D) loop + if (Nkind (D) = N_Function_Instantiation + and then not Is_Unchecked_Conversion (D)) + or else Nkind_In (D, N_Protected_Type_Declaration, + N_Package_Declaration, + N_Package_Instantiation, + N_Subprogram_Body, + N_Procedure_Instantiation, + N_Task_Type_Declaration) + then + Cannot_Inline + ("cannot inline & (non-allowed declaration)?", D, Subp); + + return True; + end if; + + Next (D); + end loop; + + return False; + end Has_Excluded_Declaration; + + ---------------------------- + -- Has_Excluded_Statement -- + ---------------------------- + + function Has_Excluded_Statement (Stats : List_Id) return Boolean is + S : Node_Id; + E : Node_Id; + + begin + S := First (Stats); + while Present (S) loop + Stat_Count := Stat_Count + 1; + + if Nkind_In (S, N_Abort_Statement, + N_Asynchronous_Select, + N_Conditional_Entry_Call, + N_Delay_Relative_Statement, + N_Delay_Until_Statement, + N_Selective_Accept, + N_Timed_Entry_Call) + then + Cannot_Inline + ("cannot inline & (non-allowed statement)?", S, Subp); + return True; + + elsif Nkind (S) = N_Block_Statement then + if Present (Declarations (S)) + and then Has_Excluded_Declaration (Declarations (S)) + then + return True; + + elsif Present (Handled_Statement_Sequence (S)) then + if Present + (Exception_Handlers (Handled_Statement_Sequence (S))) + then + Cannot_Inline + ("cannot inline& (exception handler)?", + First (Exception_Handlers + (Handled_Statement_Sequence (S))), + Subp); + return True; + + elsif Has_Excluded_Statement + (Statements (Handled_Statement_Sequence (S))) + then + return True; + end if; + end if; + + elsif Nkind (S) = N_Case_Statement then + E := First (Alternatives (S)); + while Present (E) loop + if Has_Excluded_Statement (Statements (E)) then + return True; + end if; + + Next (E); + end loop; + + elsif Nkind (S) = N_If_Statement then + if Has_Excluded_Statement (Then_Statements (S)) then + return True; + end if; + + if Present (Elsif_Parts (S)) then + E := First (Elsif_Parts (S)); + while Present (E) loop + if Has_Excluded_Statement (Then_Statements (E)) then + return True; + end if; + Next (E); + end loop; + end if; + + if Present (Else_Statements (S)) + and then Has_Excluded_Statement (Else_Statements (S)) + then + return True; + end if; + + elsif Nkind (S) = N_Loop_Statement + and then Has_Excluded_Statement (Statements (S)) + then + return True; + + elsif Nkind (S) = N_Extended_Return_Statement then + if Present (Handled_Statement_Sequence (S)) + and then + Has_Excluded_Statement + (Statements (Handled_Statement_Sequence (S))) + then + return True; + + elsif Present (Handled_Statement_Sequence (S)) + and then + Present (Exception_Handlers + (Handled_Statement_Sequence (S))) + then + Cannot_Inline + ("cannot inline& (exception handler)?", + First (Exception_Handlers + (Handled_Statement_Sequence (S))), + Subp); + return True; + end if; + end if; + + Next (S); + end loop; + + return False; + end Has_Excluded_Statement; + + ------------------------------- + -- Has_Pending_Instantiation -- + ------------------------------- + + function Has_Pending_Instantiation return Boolean is + S : Entity_Id; + + begin + S := Current_Scope; + while Present (S) loop + if Is_Compilation_Unit (S) + or else Is_Child_Unit (S) + then + return False; + + elsif Ekind (S) = E_Package + and then Has_Forward_Instantiation (S) + then + return True; + end if; + + S := Scope (S); + end loop; + + return False; + end Has_Pending_Instantiation; + + ------------------------------------ + -- Returns_Compile_Time_Constant -- + ------------------------------------ + + function Returns_Compile_Time_Constant (N : Node_Id) return Boolean is + + function Check_Return (N : Node_Id) return Traverse_Result; + + ------------------ + -- Check_Return -- + ------------------ + + function Check_Return (N : Node_Id) return Traverse_Result is + begin + if Nkind (N) = N_Extended_Return_Statement then + return Abandon; + + elsif Nkind (N) = N_Simple_Return_Statement then + if Present (Expression (N)) then + declare + Orig_Expr : constant Node_Id := + Original_Node (Expression (N)); + + begin + if Nkind_In (Orig_Expr, N_Integer_Literal, + N_Real_Literal, + N_Character_Literal) + then + return OK; + + elsif Is_Entity_Name (Orig_Expr) + and then Ekind (Entity (Orig_Expr)) = E_Constant + and then Is_Static_Expression (Orig_Expr) + then + return OK; + else + return Abandon; + end if; + end; + + -- Expression has wrong form + + else + return Abandon; + end if; + + -- Continue analyzing statements + + else + return OK; + end if; + end Check_Return; + + function Check_All_Returns is new Traverse_Func (Check_Return); + + -- Start of processing for Returns_Compile_Time_Constant + + begin + return Check_All_Returns (N) = OK; + end Returns_Compile_Time_Constant; + + -------------------------------------- + -- Returns_Intrinsic_Function_Call -- + -------------------------------------- + + function Returns_Intrinsic_Function_Call + (N : Node_Id) return Boolean + is + function Check_Return (N : Node_Id) return Traverse_Result; + + ------------------ + -- Check_Return -- + ------------------ + + function Check_Return (N : Node_Id) return Traverse_Result is + begin + if Nkind (N) = N_Extended_Return_Statement then + return Abandon; + + elsif Nkind (N) = N_Simple_Return_Statement then + if Present (Expression (N)) then + declare + Orig_Expr : constant Node_Id := + Original_Node (Expression (N)); + + begin + if Nkind (Orig_Expr) in N_Op + and then Is_Intrinsic_Subprogram (Entity (Orig_Expr)) + then + return OK; + + elsif Nkind (Orig_Expr) in N_Has_Entity + and then Present (Entity (Orig_Expr)) + and then Ekind (Entity (Orig_Expr)) = E_Function + and then Is_Inlined (Entity (Orig_Expr)) + then + return OK; + + elsif Nkind (Orig_Expr) in N_Has_Entity + and then Present (Entity (Orig_Expr)) + and then Is_Intrinsic_Subprogram (Entity (Orig_Expr)) + then + return OK; + + else + return Abandon; + end if; + end; + + -- Expression has wrong form + + else + return Abandon; + end if; + + -- Continue analyzing statements + + else + return OK; + end if; + end Check_Return; + + function Check_All_Returns is new Traverse_Func (Check_Return); + + -- Start of processing for Returns_Intrinsic_Function_Call + + begin + return Check_All_Returns (N) = OK; + end Returns_Intrinsic_Function_Call; + + -------------------------- + -- Uses_Secondary_Stack -- + -------------------------- + + function Uses_Secondary_Stack (N : Node_Id) return Boolean is + + function Check_Call (N : Node_Id) return Traverse_Result; + -- Look for function calls that return an unconstrained type + + ---------------- + -- Check_Call -- + ---------------- + + function Check_Call (N : Node_Id) return Traverse_Result is + begin + if Nkind (N) = N_Function_Call + and then Is_Entity_Name (Name (N)) + and then Is_Composite_Type (Etype (Entity (Name (N)))) + and then not Is_Constrained (Etype (Entity (Name (N)))) + then + Cannot_Inline + ("cannot inline & (call returns unconstrained type)?", + N, Subp); + + return Abandon; + else + return OK; + end if; + end Check_Call; + + function Check_Calls is new Traverse_Func (Check_Call); + + -- Start of processing for Uses_Secondary_Stack + + begin + return Check_Calls (N) = Abandon; + end Uses_Secondary_Stack; + + -- Local variables + + Decl : constant Node_Id := Unit_Declaration_Node (Spec_Id); + May_Inline : constant Boolean := + Has_Pragma_Inline_Always (Spec_Id) + or else (Has_Pragma_Inline (Spec_Id) + and then ((Optimization_Level > 0 + and then Ekind (Spec_Id) + = E_Function) + or else Front_End_Inlining)); + Body_To_Analyze : Node_Id; + + -- Start of processing for Check_Body_To_Inline + + begin + -- No action needed in stubs since the attribute Body_To_Inline + -- is not available + + if Nkind (Decl) = N_Subprogram_Body_Stub then + return False; + + -- Cannot build the body to inline if the attribute is already set. + -- This attribute may have been set if this is a subprogram renaming + -- declarations (see Freeze.Build_Renamed_Body). + + elsif Present (Body_To_Inline (Decl)) then + return False; + + -- No action needed if the subprogram does not fulfill the minimum + -- conditions to be inlined by the frontend + + elsif not May_Inline then + return False; + end if; + + -- Check excluded declarations + + if Present (Declarations (N)) + and then Has_Excluded_Declaration (Declarations (N)) + then + return False; + end if; + + -- Check excluded statements + + if Present (Handled_Statement_Sequence (N)) then + if Present + (Exception_Handlers (Handled_Statement_Sequence (N))) + then + Cannot_Inline + ("cannot inline& (exception handler)?", + First + (Exception_Handlers (Handled_Statement_Sequence (N))), + Subp); + + return False; + + elsif Has_Excluded_Statement + (Statements (Handled_Statement_Sequence (N))) + then + return False; + end if; + end if; + + -- For backward compatibility, compiling under -gnatN we do not + -- inline a subprogram that is too large, unless it is marked + -- Inline_Always. This pragma does not suppress the other checks + -- on inlining (forbidden declarations, handlers, etc). + + if Front_End_Inlining + and then not Has_Pragma_Inline_Always (Subp) + and then Stat_Count > Max_Size + then + Cannot_Inline ("cannot inline& (body too large)?", N, Subp); + return False; + end if; + + -- If some enclosing body contains instantiations that appear before + -- the corresponding generic body, the enclosing body has a freeze + -- node so that it can be elaborated after the generic itself. This + -- might conflict with subsequent inlinings, so that it is unsafe to + -- try to inline in such a case. + + if Has_Pending_Instantiation then + Cannot_Inline + ("cannot inline& (forward instance within enclosing body)?", + N, Subp); + + return False; + end if; + + -- Generate and preanalyze the body to inline (needed to perform + -- the rest of the checks) + + Generate_Body_To_Inline (N, Body_To_Analyze); + + if Ekind (Subp) = E_Function then + Set_Result_Definition (Specification (Body_To_Analyze), + New_Occurrence_Of (Etype (Subp), Sloc (N))); + end if; + + -- Nest the body to analyze within the real one + + if No (Declarations (N)) then + Set_Declarations (N, New_List (Body_To_Analyze)); + else + Append_To (Declarations (N), Body_To_Analyze); + end if; + + Preanalyze (Body_To_Analyze); + Remove (Body_To_Analyze); + + -- Keep separate checks needed when compiling without optimizations + + if Optimization_Level = 0 + + -- AAMP and VM targets have no support for inlining in the backend + -- and hence we use frontend inlining at all optimization levels. + + or else AAMP_On_Target + or else VM_Target /= No_VM + then + -- Cannot inline functions whose body has a call that returns an + -- unconstrained type since the secondary stack is involved, and + -- it is not worth inlining. + + if Uses_Secondary_Stack (Body_To_Analyze) then + return False; + + -- Cannot inline functions that return controlled types since + -- controlled actions interfere in complex ways with inlining. + + elsif Ekind (Subp) = E_Function + and then Needs_Finalization (Etype (Subp)) + then + Cannot_Inline + ("cannot inline & (controlled return type)?", N, Subp); + return False; + + elsif Returns_Unconstrained_Type (Subp) then + Cannot_Inline + ("cannot inline & (unconstrained return type)?", N, Subp); + return False; + end if; + + -- Compiling with optimizations enabled + + else + -- Procedures are never frontend inlined in this case! + + if Ekind (Subp) /= E_Function then + return False; + + -- Functions returning unconstrained types are tested + -- separately (see Can_Split_Unconstrained_Function). + + elsif Returns_Unconstrained_Type (Subp) then + null; + + -- Check supported cases + + elsif not Returns_Compile_Time_Constant (Body_To_Analyze) + and then Convention (Subp) /= Convention_Intrinsic + and then not Returns_Intrinsic_Function_Call (Body_To_Analyze) + then + return False; + end if; + end if; + + return True; + end Check_Body_To_Inline; + + -------------------------------------- + -- Can_Split_Unconstrained_Function -- + -------------------------------------- + + function Can_Split_Unconstrained_Function (N : Node_Id) return Boolean + is + Ret_Node : constant Node_Id := + First (Statements (Handled_Statement_Sequence (N))); + D : Node_Id; + + begin + -- No user defined declarations allowed in the function except inside + -- the unique return statement; implicit labels are the only allowed + -- declarations. + + if not Is_Empty_List (Declarations (N)) then + D := First (Declarations (N)); + while Present (D) loop + if Nkind (D) /= N_Implicit_Label_Declaration then + return False; + end if; + + Next (D); + end loop; + end if; + + return Present (Ret_Node) + and then Nkind (Ret_Node) = N_Extended_Return_Statement + and then No (Next (Ret_Node)) + and then Present (Handled_Statement_Sequence (Ret_Node)); + end Can_Split_Unconstrained_Function; + + ----------------------------- + -- Generate_Body_To_Inline -- + ----------------------------- + + procedure Generate_Body_To_Inline + (N : Node_Id; + Body_To_Inline : out Node_Id) + is + procedure Remove_Pragmas (N : Node_Id); + -- Remove occurrences of pragmas that may reference the formals of + -- N. The analysis of the non-inlined body will handle these pragmas + -- properly. + + -------------------- + -- Remove_Pragmas -- + -------------------- + + procedure Remove_Pragmas (N : Node_Id) is + Decl : Node_Id; + Nxt : Node_Id; + + begin + Decl := First (Declarations (N)); + while Present (Decl) loop + Nxt := Next (Decl); + + if Nkind (Decl) = N_Pragma + and then (Pragma_Name (Decl) = Name_Unreferenced + or else + Pragma_Name (Decl) = Name_Unmodified) + then + Remove (Decl); + end if; + + Decl := Nxt; + end loop; + end Remove_Pragmas; + + -- Start of processing for Generate_Body_To_Inline + + begin + -- Within an instance, the body to inline must be treated as a nested + -- generic, so that the proper global references are preserved. + + -- Note that we do not do this at the library level, because it + -- is not needed, and furthermore this causes trouble if front + -- end inlining is activated (-gnatN). + + if In_Instance + and then Scope (Current_Scope) /= Standard_Standard + then + Body_To_Inline := Copy_Generic_Node (N, Empty, True); + else + Body_To_Inline := Copy_Separate_Tree (N); + end if; + + -- A pragma Unreferenced or pragma Unmodified that mentions a formal + -- parameter has no meaning when the body is inlined and the formals + -- are rewritten. Remove it from body to inline. The analysis of the + -- non-inlined body will handle the pragma properly. + + Remove_Pragmas (Body_To_Inline); + + -- We need to capture references to the formals in order + -- to substitute the actuals at the point of inlining, i.e. + -- instantiation. To treat the formals as globals to the body to + -- inline, we nest it within a dummy parameterless subprogram, + -- declared within the real one. + + Set_Parameter_Specifications + (Specification (Body_To_Inline), No_List); + + -- A new internal name is associated with Body_To_Inline to avoid + -- conflicts when the non-inlined body N is analyzed. + + Set_Defining_Unit_Name (Specification (Body_To_Inline), + Make_Defining_Identifier (Sloc (N), New_Internal_Name ('P'))); + Set_Corresponding_Spec (Body_To_Inline, Empty); + end Generate_Body_To_Inline; + + ---------------- + -- Preanalyze -- + ---------------- + + procedure Preanalyze (N : Node_Id) is + Save_Full_Analysis : constant Boolean := Full_Analysis; + + begin + Full_Analysis := False; + Expander_Mode_Save_And_Set (False); + + Analyze (N); + + Expander_Mode_Restore; + Full_Analysis := Save_Full_Analysis; + end Preanalyze; + + ---------------------------------- + -- Split_Unconstrained_Function -- + ---------------------------------- + + procedure Split_Unconstrained_Function + (N : Node_Id; + Spec_Id : Entity_Id) + is + Loc : constant Source_Ptr := Sloc (N); + Ret_Node : constant Node_Id := + First (Statements (Handled_Statement_Sequence (N))); + Ret_Obj : constant Node_Id := + First (Return_Object_Declarations (Ret_Node)); + + procedure Build_Procedure + (Proc_Id : out Entity_Id; + Decl_List : out List_Id); + -- Build a procedure containing the statements found in the extended + -- return statement of the unconstrained function body N. + + procedure Build_Procedure + (Proc_Id : out Entity_Id; + Decl_List : out List_Id) + is + Formal : Entity_Id; + Formal_List : constant List_Id := New_List; + Proc_Spec : Node_Id; + Proc_Body : Node_Id; + Subp_Name : constant Name_Id := New_Internal_Name ('F'); + Body_Decl_List : List_Id := No_List; + Param_Type : Node_Id; + + begin + if Nkind (Object_Definition (Ret_Obj)) = N_Identifier then + Param_Type := New_Copy (Object_Definition (Ret_Obj)); + else + Param_Type := + New_Copy (Subtype_Mark (Object_Definition (Ret_Obj))); + end if; + + Append_To (Formal_List, + Make_Parameter_Specification (Loc, + Defining_Identifier => + Make_Defining_Identifier (Loc, + Chars => Chars (Defining_Identifier (Ret_Obj))), + In_Present => False, + Out_Present => True, + Null_Exclusion_Present => False, + Parameter_Type => Param_Type)); + + Formal := First_Formal (Spec_Id); + while Present (Formal) loop + Append_To (Formal_List, + Make_Parameter_Specification (Loc, + Defining_Identifier => + Make_Defining_Identifier (Sloc (Formal), + Chars => Chars (Formal)), + In_Present => In_Present (Parent (Formal)), + Out_Present => Out_Present (Parent (Formal)), + Null_Exclusion_Present => + Null_Exclusion_Present (Parent (Formal)), + Parameter_Type => + New_Reference_To (Etype (Formal), Loc), + Expression => + Copy_Separate_Tree (Expression (Parent (Formal))))); + + Next_Formal (Formal); + end loop; + + Proc_Id := + Make_Defining_Identifier (Loc, Chars => Subp_Name); + + Proc_Spec := + Make_Procedure_Specification (Loc, + Defining_Unit_Name => Proc_Id, + Parameter_Specifications => Formal_List); + + Decl_List := New_List; + + Append_To (Decl_List, + Make_Subprogram_Declaration (Loc, Proc_Spec)); + + -- Can_Convert_Unconstrained_Function checked that the function + -- has no local declarations except implicit label declarations. + -- Copy these declarations to the built procedure. + + if Present (Declarations (N)) then + Body_Decl_List := New_List; + + declare + D : Node_Id; + New_D : Node_Id; + + begin + D := First (Declarations (N)); + while Present (D) loop + pragma Assert (Nkind (D) = N_Implicit_Label_Declaration); + + New_D := + Make_Implicit_Label_Declaration (Loc, + Make_Defining_Identifier (Loc, + Chars => Chars (Defining_Identifier (D))), + Label_Construct => Empty); + Append_To (Body_Decl_List, New_D); + + Next (D); + end loop; + end; + end if; + + pragma Assert (Present (Handled_Statement_Sequence (Ret_Node))); + + Proc_Body := + Make_Subprogram_Body (Loc, + Specification => Copy_Separate_Tree (Proc_Spec), + Declarations => Body_Decl_List, + Handled_Statement_Sequence => + Copy_Separate_Tree (Handled_Statement_Sequence (Ret_Node))); + + Set_Defining_Unit_Name (Specification (Proc_Body), + Make_Defining_Identifier (Loc, Subp_Name)); + + Append_To (Decl_List, Proc_Body); + end Build_Procedure; + + -- Local variables + + New_Obj : constant Node_Id := Copy_Separate_Tree (Ret_Obj); + Blk_Stmt : Node_Id; + Proc_Id : Entity_Id; + Proc_Call : Node_Id; + + -- Start of processing for Split_Unconstrained_Function + + begin + -- Build the associated procedure, analyze it and insert it before + -- the function body N + + declare + Scope : constant Entity_Id := Current_Scope; + Decl_List : List_Id; + begin + Pop_Scope; + Build_Procedure (Proc_Id, Decl_List); + Insert_Actions (N, Decl_List); + Push_Scope (Scope); + end; + + -- Build the call to the generated procedure + + declare + Actual_List : constant List_Id := New_List; + Formal : Entity_Id; + + begin + Append_To (Actual_List, + New_Reference_To (Defining_Identifier (New_Obj), Loc)); + + Formal := First_Formal (Spec_Id); + while Present (Formal) loop + Append_To (Actual_List, New_Reference_To (Formal, Loc)); + + -- Avoid spurious warning on unreferenced formals + + Set_Referenced (Formal); + Next_Formal (Formal); + end loop; + + Proc_Call := + Make_Procedure_Call_Statement (Loc, + Name => New_Reference_To (Proc_Id, Loc), + Parameter_Associations => Actual_List); + end; + + -- Generate + + -- declare + -- New_Obj : ... + -- begin + -- main_1__F1b (New_Obj, ...); + -- return Obj; + -- end B10b; + + Blk_Stmt := + Make_Block_Statement (Loc, + Declarations => New_List (New_Obj), + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + Statements => New_List ( + + Proc_Call, + + Make_Simple_Return_Statement (Loc, + Expression => + New_Reference_To + (Defining_Identifier (New_Obj), Loc))))); + + Rewrite (Ret_Node, Blk_Stmt); + end Split_Unconstrained_Function; + + -- Start of processing for Check_And_Build_Body_To_Inline + + begin + -- Do not inline any subprogram that contains nested subprograms, since + -- the backend inlining circuit seems to generate uninitialized + -- references in this case. We know this happens in the case of front + -- end ZCX support, but it also appears it can happen in other cases as + -- well. The backend often rejects attempts to inline in the case of + -- nested procedures anyway, so little if anything is lost by this. + -- Note that this is test is for the benefit of the back-end. There is + -- a separate test for front-end inlining that also rejects nested + -- subprograms. + + -- Do not do this test if errors have been detected, because in some + -- error cases, this code blows up, and we don't need it anyway if + -- there have been errors, since we won't get to the linker anyway. + + if Comes_From_Source (Body_Id) + and then (Has_Pragma_Inline_Always (Spec_Id) + or else Optimization_Level > 0) + and then Serious_Errors_Detected = 0 + then + declare + P_Ent : Node_Id; + + begin + P_Ent := Body_Id; + loop + P_Ent := Scope (P_Ent); + exit when No (P_Ent) or else P_Ent = Standard_Standard; + + if Is_Subprogram (P_Ent) then + Set_Is_Inlined (P_Ent, False); + + if Comes_From_Source (P_Ent) + and then Has_Pragma_Inline (P_Ent) + then + Cannot_Inline + ("cannot inline& (nested subprogram)?", N, P_Ent, + Is_Serious => True); + end if; + end if; + end loop; + end; + end if; + + -- Build the body to inline only if really needed! + + if Check_Body_To_Inline (N, Spec_Id) + and then Serious_Errors_Detected = 0 + then + if Returns_Unconstrained_Type (Spec_Id) then + if Can_Split_Unconstrained_Function (N) then + Split_Unconstrained_Function (N, Spec_Id); + Build_Body_To_Inline (N, Spec_Id); + Set_Is_Inlined (Spec_Id); + end if; + else + Build_Body_To_Inline (N, Spec_Id); + Set_Is_Inlined (Spec_Id); + end if; + end if; + end Check_And_Build_Body_To_Inline; + ----------------------- -- Check_Conformance -- ----------------------- @@ -9339,9 +10599,15 @@ package body Sem_Ch6 is -- Check is done on package exit. For access to subprograms, -- the use is legal for Taft-amendment types. + -- Ada 2012: tagged incomplete types are allowed as generic + -- formal types. They do not introduce dependencies and the + -- corresponding generic subprogram does not have a delayed + -- freeze, because it does not need a freeze node. + if Is_Tagged_Type (Formal_Type) then if Ekind (Scope (Current_Scope)) = E_Package and then not From_With_Type (Formal_Type) + and then not Is_Generic_Type (Formal_Type) and then not Is_Class_Wide_Type (Formal_Type) then if not Nkind_In @@ -9863,6 +11129,13 @@ package body Sem_Ch6 is Designator := Body_Id; end if; + -- Internally generated subprograms, such as type-specific functions, + -- don't get assertion checks. + + if Get_TSS_Name (Designator) /= TSS_Null then + return; + end if; + -- Grab preconditions from spec if Present (Spec_Id) then diff --git a/gcc/ada/sem_ch6.ads b/gcc/ada/sem_ch6.ads index 6d5496c6ae6..7b38792d071 100644 --- a/gcc/ada/sem_ch6.ads +++ b/gcc/ada/sem_ch6.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -50,13 +50,33 @@ package Sem_Ch6 is -- and body declarations. Returns the defining entity for the -- specification N. - procedure Cannot_Inline (Msg : String; N : Node_Id; Subp : Entity_Id); + procedure Cannot_Inline + (Msg : String; + N : Node_Id; + Subp : Entity_Id; + Is_Serious : Boolean := False); -- This procedure is called if the node N, an instance of a call to -- subprogram Subp, cannot be inlined. Msg is the message to be issued, - -- and has a ? as the last character. If Subp has a pragma Always_Inlined, - -- then an error message is issued (by removing the last character of Msg). - -- If Subp is not Always_Inlined, then a warning is issued if the flag - -- Ineffective_Inline_Warnings is set, and if not, the call has no effect. + -- and has a ? as the last character. Temporarily the behavior of this + -- routine depends on the value of -gnatd.k: + -- * If -gnatd.k is not set (ie. old inlining model) then if Subp has + -- a pragma Always_Inlined, then an error message is issued (by + -- removing the last character of Msg). If Subp is not Always_Inlined, + -- then a warning is issued if the flag Ineffective_Inline_Warnings + -- is set, and if not, the call has no effect. + -- * If -gnatd.k is set (ie. new inlining model) then: + -- - If Is_Serious is true, then an error is reported (by removing the + -- last character of Msg); + -- - otherwise: + -- * Compiling without optimizations if Subp has a pragma + -- Always_Inlined, then an error message is issued; if Subp is + -- not Always_Inlined, then a warning is issued if the flag + -- Ineffective_Inline_Warnings is set, and if not, the call + -- has no effect. + -- * Compiling with optimizations then a warning is issued if + -- the flag Ineffective_Inline_Warnings is set; otherwise the + -- call has no effect since inlining may be performed by the + -- backend. procedure Check_Conventions (Typ : Entity_Id); -- Ada 2005 (AI-430): Check that the conventions of all inherited and diff --git a/gcc/ada/sem_dim.adb b/gcc/ada/sem_dim.adb index 4ba81f822d2..7e0d5d4a7dc 100644 --- a/gcc/ada/sem_dim.adb +++ b/gcc/ada/sem_dim.adb @@ -36,7 +36,6 @@ with Rtsfind; use Rtsfind; with Sem; use Sem; with Sem_Eval; use Sem_Eval; with Sem_Res; use Sem_Res; -with Sem_Util; use Sem_Util; with Sinfo; use Sinfo; with Snames; use Snames; with Stand; use Stand; @@ -1359,94 +1358,102 @@ package body Sem_Dim is -- Analyze_Dimension_Function_Call -- ------------------------------------- + -- Propagate the dimensions from the returned type to the call node. Note + -- that there is a special treatment for elementary function calls. Indeed + -- for Sqrt call, the resulting dimensions equal to half the dimensions of + -- the actual, and for other elementary calls, this routine check that + -- every actuals are dimensionless. + procedure Analyze_Dimension_Function_Call (N : Node_Id) is - Name_Call : constant Node_Id := Name (N); Actuals : constant List_Id := Parameter_Associations (N); + Name_Call : constant Node_Id := Name (N); Actual : Node_Id; Dims_Of_Actual : Dimension_Type; Dims_Of_Call : Dimension_Type; + Ent : Entity_Id; - function Is_Elementary_Function_Call return Boolean; - -- Return True if the call is a call of an elementary function (see - -- Ada.Numerics.Generic_Elementary_Functions). + function Is_Elementary_Function_Entity (E : Entity_Id) return Boolean; + -- Given E, the original subprogram entity, return True if call is to an + -- elementary function (see Ada.Numerics.Generic_Elementary_Functions). - --------------------------------- - -- Is_Elementary_Function_Call -- - --------------------------------- + ----------------------------------- + -- Is_Elementary_Function_Entity -- + ----------------------------------- - function Is_Elementary_Function_Call return Boolean is - Ent : Entity_Id; + function Is_Elementary_Function_Entity (E : Entity_Id) return Boolean is + Loc : constant Source_Ptr := Sloc (E); begin - if Is_Entity_Name (Name_Call) then - Ent := Entity (Name_Call); + -- Is function entity in Ada.Numerics.Generic_Elementary_Functions? - -- Check the procedure is defined in an instantiation of a generic - -- package. + return + Loc > No_Location + and then + Is_RTU + (Cunit_Entity (Get_Source_Unit (Loc)), + Ada_Numerics_Generic_Elementary_Functions); + end Is_Elementary_Function_Entity; - if Is_Generic_Instance (Scope (Ent)) then - Ent := Cunit_Entity (Get_Source_Unit (Ent)); + -- Start of processing for Analyze_Dimension_Function_Call - -- Check the name of the generic package is - -- Generic_Elementary_Functions + begin + -- Look for elementary function call - return - Is_Library_Level_Entity (Ent) - and then Chars (Ent) = Name_Generic_Elementary_Functions; - end if; - end if; + if Is_Entity_Name (Name_Call) then + Ent := Entity (Name_Call); - return False; - end Is_Elementary_Function_Call; + -- Get the original subprogram entity following the renaming chain - -- Start of processing for Analyze_Dimension_Function_Call + if Present (Alias (Ent)) then + Ent := Alias (Ent); + end if; - begin - -- Elementary function case + -- Elementary function case - if Is_Elementary_Function_Call then + if Is_Elementary_Function_Entity (Ent) then -- Sqrt function call case - if Chars (Name_Call) = Name_Sqrt then - Dims_Of_Call := Dimensions_Of (First (Actuals)); + if Chars (Ent) = Name_Sqrt then + Dims_Of_Call := Dimensions_Of (First (Actuals)); - if Exists (Dims_Of_Call) then - for Position in Dims_Of_Call'Range loop - Dims_Of_Call (Position) := - Dims_Of_Call (Position) * Rational'(Numerator => 1, - Denominator => 2); - end loop; + if Exists (Dims_Of_Call) then + for Position in Dims_Of_Call'Range loop + Dims_Of_Call (Position) := + Dims_Of_Call (Position) * Rational'(Numerator => 1, + Denominator => 2); + end loop; - Set_Dimensions (N, Dims_Of_Call); - end if; + Set_Dimensions (N, Dims_Of_Call); + end if; - -- All other functions in Ada.Numerics.Generic_Elementary_Functions - -- case. Note that all parameters here should be dimensionless. + -- All other elementary functions case. Note that every actual + -- here should be dimensionless. - else - Actual := First (Actuals); - while Present (Actual) loop - Dims_Of_Actual := Dimensions_Of (Actual); - - if Exists (Dims_Of_Actual) then - Error_Msg_NE ("parameter should be dimensionless for " & - "elementary function&", - Actual, - Name_Call); - Error_Msg_N ("\parameter " & Dimensions_Msg_Of (Actual), - Actual); - end if; + else + Actual := First (Actuals); + while Present (Actual) loop + Dims_Of_Actual := Dimensions_Of (Actual); + + if Exists (Dims_Of_Actual) then + Error_Msg_NE ("parameter should be dimensionless for " & + "elementary function&", + Actual, Name_Call); + Error_Msg_N ("\parameter " & Dimensions_Msg_Of (Actual), + Actual); + end if; - Next (Actual); - end loop; + Next (Actual); + end loop; + end if; + + return; end if; + end if; - -- Other case + -- Other cases - else - Analyze_Dimension_Has_Etype (N); - end if; + Analyze_Dimension_Has_Etype (N); end Analyze_Dimension_Function_Call; --------------------------------- @@ -2226,28 +2233,31 @@ package body Sem_Dim is function Is_Procedure_Put_Call return Boolean is Ent : Entity_Id; + Loc : Source_Ptr; begin - -- There are three different Put routine in each generic package - -- Check that the current procedure call is one of them + -- There are three different Put routines in each generic dim IO + -- package. Verify the current procedure call is one of them. if Is_Entity_Name (Name_Call) then Ent := Entity (Name_Call); - -- Check that the name of the procedure is Put - -- Check the procedure is defined in an instantiation of a - -- generic package. + -- Get the original subprogram entity following the renaming chain - if Chars (Name_Call) = Name_Put - and then Is_Generic_Instance (Scope (Ent)) - then - Ent := Cunit_Entity (Get_Source_Unit (Ent)); + if Present (Alias (Ent)) then + Ent := Alias (Ent); + end if; - -- Verify that the generic package is either - -- System.Dim.Float_IO or System.Dim.Integer_IO. + Loc := Sloc (Ent); - return Is_Dim_IO_Package_Entity (Ent); - end if; + -- Check the name of the entity subprogram is Put and verify this + -- entity is located in either System.Dim.Float_IO or + -- System.Dim.Integer_IO. + + return Chars (Ent) = Name_Put + and then Loc > No_Location + and then Is_Dim_IO_Package_Entity + (Cunit_Entity (Get_Source_Unit (Loc))); end if; return False; @@ -2499,22 +2509,14 @@ package body Sem_Dim is -- Is_Dim_IO_Package_Entity -- ------------------------------ - -- Why all this comparison of names, why not use Is_RTE and Is_RTU ??? - function Is_Dim_IO_Package_Entity (E : Entity_Id) return Boolean is begin - -- Check the package entity is standard and its scope is either - -- System.Dim.Float_IO or System.Dim.Integer_IO. - - if Is_Library_Level_Entity (E) - and then (Chars (E) = Name_Float_IO - or else Chars (E) = Name_Integer_IO) - then - return Chars (Scope (E)) = Name_Dim - and Chars (Scope (Scope (E))) = Name_System; - end if; + -- Check the package entity corresponds to System.Dim.Float_IO or + -- System.Dim.Integer_IO. - return False; + return + Is_RTU (E, System_Dim_Float_IO) + or Is_RTU (E, System_Dim_Integer_IO); end Is_Dim_IO_Package_Entity; ------------------------------------- @@ -2523,19 +2525,14 @@ package body Sem_Dim is function Is_Dim_IO_Package_Instantiation (N : Node_Id) return Boolean is Gen_Id : constant Node_Id := Name (N); - Ent : Entity_Id; begin - if Is_Entity_Name (Gen_Id) then - Ent := Entity (Gen_Id); - - -- Verify that the instantiated package is either System.Dim.Float_IO - -- or System.Dim.Integer_IO. - - return Is_Dim_IO_Package_Entity (Ent); - end if; + -- Check that the instantiated package is either System.Dim.Float_IO + -- or System.Dim.Integer_IO. - return False; + return + Is_Entity_Name (Gen_Id) + and then Is_Dim_IO_Package_Entity (Entity (Gen_Id)); end Is_Dim_IO_Package_Instantiation; ---------------- diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index f1ea658a10b..39d406e8828 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -285,12 +285,6 @@ package body Sem_Prag is -- Access to T'class, created if there is a controlling formal -- that is an access parameter. - function Aspect_Name return String; - -- Return the name of the aspect being specified ("Pre" or "Post") - -- properly capitalized for use in an error message. Precondition - -- is Present (Corresponding_Aspect (N)), which will be satisfied - -- if Class_Present (N). - function Get_ACW return Entity_Id; -- If the expression has a reference to an controlling access -- parameter, create an access to T'class for the necessary @@ -305,19 +299,6 @@ package body Sem_Prag is -- type access-to-T'Class. This ensures the expression is well- -- defined for a primitive subprogram of a type descended from T. - ----------------- - -- Aspect_Name -- - ----------------- - - function Aspect_Name return String is - begin - if Chars (Identifier (Corresponding_Aspect (N))) = Name_Pre then - return "Pre"; - else - return "Post"; - end if; - end Aspect_Name; - ------------- -- Get_ACW -- ------------- @@ -388,20 +369,14 @@ package body Sem_Prag is begin if not Present (T) then + Error_Msg_Name_1 := + Chars (Identifier (Corresponding_Aspect (N))); - -- This is weird code, why not just set Err_Msg_Name_1 to - -- Identifier (Corresponding_Aspect (N)), and Err_Msg_Name_2 - -- to Name_Class and then use - - -- "aspect `%''%` can only be specified ... - - -- That would be the more normal way of doing things ??? - -- Then you get proper identifier casing mode as well, - -- instead of presuming mixed case ??? + Error_Msg_Name_2 := Name_Class; Error_Msg_N - ("aspect " & Aspect_Name & "''Class can only be specified " & - "for a primitive operation of a tagged type", + ("aspect `%''%` can only be specified for a primitive " & + "operation of a tagged type", Corresponding_Aspect (N)); end if; @@ -11990,8 +11965,8 @@ package body Sem_Prag is if not Is_Entity_Name (Get_Pragma_Arg (Arg1)) or else not - Ekind_In (Entity (Get_Pragma_Arg (Arg1)), E_Variable, - E_Constant) + Ekind_In (Entity (Get_Pragma_Arg (Arg1)), E_Variable, + E_Constant) then Error_Pragma_Arg ("pragma% only applies to objects", Arg1); end if; @@ -14970,14 +14945,15 @@ package body Sem_Prag is -- Follow subprogram renaming chain Result := Def_Id; - while Is_Subprogram (Result) + + if Is_Subprogram (Result) and then Nkind (Parent (Declaration_Node (Result))) = N_Subprogram_Renaming_Declaration and then Present (Alias (Result)) - loop + then Result := Alias (Result); - end loop; + end if; return Result; end Get_Base_Subprogram; diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index 1b2eef0a90d..46a8b194853 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -3968,6 +3968,20 @@ package body Sem_Res is Error_Msg_N ("invalid implicit conversion for access parameter", A); end if; + + -- If the actual is an access selected component of a variable, + -- the call may modify its designated object. It is reasonable + -- to treat this as a potential modification of the enclosing + -- record, to prevent spurious warnings that it should be + -- declared as a constant, because intuitively programmers + -- regard the designated subcomponent as part of the record. + + if Nkind (A) = N_Selected_Component + and then Is_Entity_Name (Prefix (A)) + and then not Is_Constant_Object (Entity (Prefix (A))) + then + Note_Possible_Modification (A, Sure => False); + end if; end if; -- Check bad case of atomic/volatile argument (RM C.6(12)) @@ -5597,6 +5611,15 @@ package body Sem_Res is and then Has_Pragma_Inline_Always (Nam) and then Nkind (Unit_Declaration_Node (Nam)) = N_Subprogram_Declaration and then Present (Body_To_Inline (Unit_Declaration_Node (Nam))) + and then not Debug_Flag_Dot_K + then + null; + + elsif Is_Inlined (Nam) + and then Has_Pragma_Inline (Nam) + and then Nkind (Unit_Declaration_Node (Nam)) = N_Subprogram_Declaration + and then Present (Body_To_Inline (Unit_Declaration_Node (Nam))) + and then Debug_Flag_Dot_K then null; @@ -8264,13 +8287,6 @@ package body Sem_Res is begin if not Alfa_Mode then - -- If expansion is enabled, analysis is delayed until the expresssion - -- is rewritten as a loop. - - if Operating_Mode /= Check_Semantics then - return; - end if; - -- The loop structure is already resolved during its analysis, only -- the resolution of the condition needs to be done. Expansion is -- disabled so that checks and other generated code are inserted in diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 14376bbfa08..6886408a18e 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -6746,6 +6746,25 @@ package body Sem_Util is end if; end Is_Atomic_Object; + ----------------------- + -- Is_Bounded_String -- + ----------------------- + + function Is_Bounded_String (T : Entity_Id) return Boolean is + Under : constant Entity_Id := Underlying_Type (Root_Type (T)); + + begin + -- Check whether T is ultimately derived from Ada.Strings.Superbounded. + -- Super_String, or one of the [Wide_]Wide_ versions. This will + -- be True for all the Bounded_String types in instances of the + -- Generic_Bounded_Length generics, and for types derived from those. + + return Present (Under) + and then (Is_RTE (Root_Type (Under), RO_SU_Super_String) or else + Is_RTE (Root_Type (Under), RO_WI_Super_String) or else + Is_RTE (Root_Type (Under), RO_WW_Super_String)); + end Is_Bounded_String; + ----------------------------- -- Is_Concurrent_Interface -- ----------------------------- @@ -7215,6 +7234,14 @@ package body Sem_Util is return True; end if; + -- We consider bounded string types to be fully initialized, because + -- otherwise we get false alarms when the Data component is not + -- default-initialized. + + if Is_Bounded_String (Typ) then + return True; + end if; + -- Controlled records are considered to be fully initialized if -- there is a user defined Initialize routine. This may not be -- entirely correct, but as the spec notes, we are guessing here @@ -9389,6 +9416,24 @@ package body Sem_Util is Mark_Allocators (Root_Nod); end Mark_Coextensions; + ----------------- + -- Must_Inline -- + ----------------- + + function Must_Inline (Subp : Entity_Id) return Boolean is + begin + return + (Optimization_Level = 0 + + -- AAMP and VM targets have no support for inlining in the backend. + -- Hence we do as much inlining as possible in the front end. + + or else AAMP_On_Target + or else VM_Target /= No_VM) + and then Has_Pragma_Inline (Subp) + and then (Has_Pragma_Inline_Always (Subp) or else Front_End_Inlining); + end Must_Inline; + ---------------------- -- Needs_One_Actual -- ---------------------- @@ -11767,6 +11812,18 @@ package body Sem_Util is Reset_Analyzed (N); end Reset_Analyzed_Flags; + -------------------------------- + -- Returns_Unconstrained_Type -- + -------------------------------- + + function Returns_Unconstrained_Type (Subp : Entity_Id) return Boolean is + begin + return Ekind (Subp) = E_Function + and then not Is_Scalar_Type (Etype (Subp)) + and then not Is_Access_Type (Etype (Subp)) + and then not Is_Constrained (Etype (Subp)); + end Returns_Unconstrained_Type; + --------------------------- -- Safe_To_Capture_Value -- --------------------------- diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index d7154a26aec..0df5450205f 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -793,6 +793,10 @@ package Sem_Util is -- Determines if the given node denotes an atomic object in the sense of -- the legality checks described in RM C.6(12). + function Is_Bounded_String (T : Entity_Id) return Boolean; + -- True if T is a bounded string type. Used to make sure "=" composes + -- properly for bounded string types. + function Is_Controlling_Limited_Procedure (Proc_Nam : Entity_Id) return Boolean; -- Ada 2005 (AI-345): Determine whether Proc_Nam is a primitive procedure @@ -1094,7 +1098,7 @@ package Sem_Util is -- and the one in Nmake are both potentially use-visible, it will cause -- a compilation error. Note that type and value are irrelevant. - N_Return_Statement : constant := -2**33; + N_Return_Statement : constant := -2 ** 33; -- Attempt to prevent accidental uses of N_Return_Statement; similar to -- Make_Return_Statement above. @@ -1115,6 +1119,9 @@ package Sem_Util is -- to guarantee this in all cases. Note that it is more possible to give -- correct answer if the tree is fully analyzed. + function Must_Inline (Subp : Entity_Id) return Boolean; + -- Return true if Subp must be inlined by the frontend + function Needs_One_Actual (E : Entity_Id) return Boolean; -- Returns True if a function has defaults for all but its first -- formal. Used in Ada 2005 mode to solve the syntactic ambiguity that @@ -1307,6 +1314,9 @@ package Sem_Util is procedure Reset_Analyzed_Flags (N : Node_Id); -- Reset the Analyzed flags in all nodes of the tree whose root is N + function Returns_Unconstrained_Type (Subp : Entity_Id) return Boolean; + -- Return true if Subp is a function that returns an unconstrained type + function Safe_To_Capture_Value (N : Node_Id; Ent : Entity_Id; diff --git a/gcc/ada/snames.ads-tmpl b/gcc/ada/snames.ads-tmpl index b1c6a2d80b0..26cb3d9b605 100644 --- a/gcc/ada/snames.ads-tmpl +++ b/gcc/ada/snames.ads-tmpl @@ -120,7 +120,7 @@ package Snames is Name_uY : constant Name_Id := First_Name_Id + Character'Pos ('Y'); Name_uZ : constant Name_Id := First_Name_Id + Character'Pos ('Z'); - -- Note: the following table is read by the utility program XSNAMES and + -- Note: the following table is read by the utility program XSNAMES, and -- its format should not be changed without coordinating with this program. N : constant Name_Id := First_Name_Id + 256; @@ -225,8 +225,6 @@ package Snames is -- Names used by the analyzer and expander for aspect Dimension and -- Dimension_System to deal with Sqrt and IO routines. - Name_Dim : constant Name_Id := N + $; -- Ada 12 - Name_Generic_Elementary_Functions : constant Name_Id := N + $; -- Ada 12 Name_Item : constant Name_Id := N + $; -- Ada 12 Name_Sqrt : constant Name_Id := N + $; -- Ada 12 Name_Symbols : constant Name_Id := N + $; -- Ada 12 @@ -828,6 +826,7 @@ package Snames is Name_Safe_Last : constant Name_Id := N + $; Name_Safe_Small : constant Name_Id := N + $; -- Ada 83 Name_Same_Storage : constant Name_Id := N + $; -- Ada 12 + Name_Scalar_Storage_Order : constant Name_Id := N + $; -- GNAT Name_Scale : constant Name_Id := N + $; Name_Scaling : constant Name_Id := N + $; Name_Signed_Zeros : constant Name_Id := N + $; @@ -1389,6 +1388,7 @@ package Snames is Attribute_Safe_Last, Attribute_Safe_Small, Attribute_Same_Storage, + Attribute_Scalar_Storage_Order, Attribute_Scale, Attribute_Scaling, Attribute_Signed_Zeros, diff --git a/gcc/ada/targparm.adb b/gcc/ada/targparm.adb index 7868446e862..193858ac898 100644 --- a/gcc/ada/targparm.adb +++ b/gcc/ada/targparm.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1999-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -40,6 +40,7 @@ package body Targparm is type Targparm_Tags is (AAM, -- AAMP ACR, -- Always_Compatible_Rep + ASD, -- Atomic_Sync_Default BDC, -- Backend_Divide_Checks BOC, -- Backend_Overflow_Checks CLA, -- Command_Line_Args @@ -75,6 +76,7 @@ package body Targparm is AAM_Str : aliased constant Source_Buffer := "AAMP"; ACR_Str : aliased constant Source_Buffer := "Always_Compatible_Rep"; + ASD_Str : aliased constant Source_Buffer := "Atomic_Sync_Default"; BDC_Str : aliased constant Source_Buffer := "Backend_Divide_Checks"; BOC_Str : aliased constant Source_Buffer := "Backend_Overflow_Checks"; CLA_Str : aliased constant Source_Buffer := "Command_Line_Args"; @@ -110,6 +112,7 @@ package body Targparm is Targparm_Str : constant array (Targparm_Tags) of Buffer_Ptr := (AAM_Str'Access, ACR_Str'Access, + ASD_Str'Access, BDC_Str'Access, BOC_Str'Access, CLA_Str'Access, @@ -548,6 +551,7 @@ package body Targparm is case K is when AAM => AAMP_On_Target := Result; when ACR => Always_Compatible_Rep_On_Target := Result; + when ASD => Atomic_Sync_Default := Result; when BDC => Backend_Divide_Checks_On_Target := Result; when BOC => Backend_Overflow_Checks_On_Target := Result; when CLA => Command_Line_Args_On_Target := Result; @@ -556,6 +560,10 @@ package body Targparm is VM_Target := CLI_Target; Tagged_Type_Expansion := False; end if; + -- This is wrong, this processing should be done in + -- Gnat1drv.Adjust_Global_Switches. It is not the + -- right level for targparm to know about tagged + -- type extension??? when CRT => Configurable_Run_Time_On_Target := Result; when D32 => Duration_32_Bits_On_Target := Result; @@ -568,6 +576,10 @@ package body Targparm is VM_Target := JVM_Target; Tagged_Type_Expansion := False; end if; + -- This is wrong, this processing should be done in + -- Gnat1drv.Adjust_Global_Switches. It is not the + -- right level for targparm to know about tagged + -- type extension??? when MOV => Machine_Overflows_On_Target := Result; when MRN => Machine_Rounds_On_Target := Result; diff --git a/gcc/ada/targparm.ads b/gcc/ada/targparm.ads index 971769b9957..be1c9af0218 100644 --- a/gcc/ada/targparm.ads +++ b/gcc/ada/targparm.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1999-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1999-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -388,6 +388,19 @@ package Targparm is -- used at the source level, and the corresponding flag is false, then an -- error message will be issued saying the feature is not supported. + Atomic_Sync_Default : Boolean := True; + -- Access to atomic variables requires memory barrier synchronization in + -- the general case to ensure proper behavior when such accesses are used + -- on a multi-processor to synchronize tasks (e.g. by using spin locks). + -- The setting of this flag determines the default behavior. Normally this + -- is True, which will mean that appropriate synchronization instructions + -- are generated by default. If it is False, then the default will be that + -- these synchronization instructions are not generated. This may be a more + -- appropriate default in some cases, e.g. on embedded targets which do not + -- allow the possibility of multi-processors. The default can be overridden + -- using pragmas Enable/Disable_Atomic_Synchronization and also by use of + -- the debug flags gnat.d and gnatd.e. + Support_Aggregates_On_Target : Boolean := True; -- In the general case, the use of aggregates may generate calls -- to run-time routines in the C library, including memset, memcpy, diff --git a/gcc/ada/tree_io.ads b/gcc/ada/tree_io.ads index 982943628e7..12c1ae545fe 100644 --- a/gcc/ada/tree_io.ads +++ b/gcc/ada/tree_io.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -47,7 +47,7 @@ package Tree_IO is Tree_Format_Error : exception; -- Raised if a format error is detected in the input file - ASIS_Version_Number : constant := 27; + ASIS_Version_Number : constant := 28; -- ASIS Version. This is used to check for consistency between the compiler -- used to generate trees and an ASIS application that is reading the -- trees. It must be incremented whenever a change is made to the tree @@ -55,6 +55,7 @@ package Tree_IO is -- older version of ASIS. -- -- 27 Changes in the tree structures for expression functions + -- 28 Changes in Snames procedure Tree_Read_Initialize (Desc : File_Descriptor); -- Called to initialize reading of a tree file. This call must be made diff --git a/gcc/ada/uintp.ads b/gcc/ada/uintp.ads index 38863716770..41c6ff57050 100644 --- a/gcc/ada/uintp.ads +++ b/gcc/ada/uintp.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -32,7 +32,7 @@ -- Support for universal integer arithmetic -- WARNING: There is a C version of this package. Any changes to this --- source file must be properly reflected in the C header file sinfo.h +-- source file must be properly reflected in the C header file uintp.h with Alloc; with Table; diff --git a/gcc/alias.c b/gcc/alias.c index b9b9676b173..e9d701f9636 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -1773,6 +1773,29 @@ base_alias_check (rtx x, rtx y, enum machine_mode x_mode, return 1; } +/* Callback for for_each_rtx, that returns 1 upon encountering a VALUE + whose UID is greater than the int uid that D points to. */ + +static int +refs_newer_value_cb (rtx *x, void *d) +{ + if (GET_CODE (*x) == VALUE && CSELIB_VAL_PTR (*x)->uid > *(int *)d) + return 1; + + return 0; +} + +/* Return TRUE if EXPR refers to a VALUE whose uid is greater than + that of V. */ + +static bool +refs_newer_value_p (rtx expr, rtx v) +{ + int minuid = CSELIB_VAL_PTR (v)->uid; + + return for_each_rtx (&expr, refs_newer_value_cb, &minuid); +} + /* Convert the address X into something we can use. This is done by returning it unchanged unless it is a value; in the latter case we call cselib to get a more useful rtx. */ @@ -1788,12 +1811,32 @@ get_addr (rtx x) v = CSELIB_VAL_PTR (x); if (v) { + bool have_equivs = cselib_have_permanent_equivalences (); + if (have_equivs) + v = canonical_cselib_val (v); for (l = v->locs; l; l = l->next) if (CONSTANT_P (l->loc)) return l->loc; for (l = v->locs; l; l = l->next) - if (!REG_P (l->loc) && !MEM_P (l->loc)) + if (!REG_P (l->loc) && !MEM_P (l->loc) + /* Avoid infinite recursion when potentially dealing with + var-tracking artificial equivalences, by skipping the + equivalences themselves, and not choosing expressions + that refer to newer VALUEs. */ + && (!have_equivs + || (GET_CODE (l->loc) != VALUE + && !refs_newer_value_p (l->loc, x)))) return l->loc; + if (have_equivs) + { + for (l = v->locs; l; l = l->next) + if (REG_P (l->loc) + || (GET_CODE (l->loc) != VALUE + && !refs_newer_value_p (l->loc, x))) + return l->loc; + /* Return the canonical value. */ + return v->val_rtx; + } if (v->locs) return v->locs->loc; } @@ -1873,7 +1916,8 @@ memrefs_conflict_p (int xsize, rtx x, int ysize, rtx y, HOST_WIDE_INT c) { struct elt_loc_list *l = NULL; if (CSELIB_VAL_PTR (x)) - for (l = CSELIB_VAL_PTR (x)->locs; l; l = l->next) + for (l = canonical_cselib_val (CSELIB_VAL_PTR (x))->locs; + l; l = l->next) if (REG_P (l->loc) && rtx_equal_for_memref_p (l->loc, y)) break; if (l) @@ -1891,7 +1935,8 @@ memrefs_conflict_p (int xsize, rtx x, int ysize, rtx y, HOST_WIDE_INT c) { struct elt_loc_list *l = NULL; if (CSELIB_VAL_PTR (y)) - for (l = CSELIB_VAL_PTR (y)->locs; l; l = l->next) + for (l = canonical_cselib_val (CSELIB_VAL_PTR (y))->locs; + l; l = l->next) if (REG_P (l->loc) && rtx_equal_for_memref_p (l->loc, x)) break; if (l) diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 93fb16d71ff..160d393e7ba 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -146,6 +146,10 @@ static int warn_about_return_type; static bool undef_nested_function; +/* Mode used to build pointers (VOIDmode means ptr_mode). */ + +enum machine_mode c_default_pointer_mode = VOIDmode; + /* Each c_binding structure describes one binding of an identifier to a decl. All the decls in a scope - irrespective of namespace - are @@ -558,6 +562,23 @@ add_stmt (tree t) return t; } +/* Build a pointer type using the default pointer mode. */ + +static tree +c_build_pointer_type (tree to_type) +{ + addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC + : TYPE_ADDR_SPACE (to_type); + enum machine_mode pointer_mode; + + if (as != ADDR_SPACE_GENERIC || c_default_pointer_mode == VOIDmode) + pointer_mode = targetm.addr_space.pointer_mode (as); + else + pointer_mode = c_default_pointer_mode; + return build_pointer_type_for_mode (to_type, pointer_mode, false); +} + + /* Return true if we will want to say something if a goto statement crosses DECL. */ @@ -5683,7 +5704,7 @@ grokdeclarator (const struct c_declarator *declarator, TYPE_NAME (type) = decl; } - type = build_pointer_type (type); + type = c_build_pointer_type (type); /* Process type qualifiers (such as const or volatile) that were given inside the `*'. */ @@ -5918,7 +5939,7 @@ grokdeclarator (const struct c_declarator *declarator, type = TREE_TYPE (type); if (type_quals) type = c_build_qualified_type (type, type_quals); - type = build_pointer_type (type); + type = c_build_pointer_type (type); type_quals = array_ptr_quals; if (type_quals) type = c_build_qualified_type (type, type_quals); @@ -5937,7 +5958,7 @@ grokdeclarator (const struct c_declarator *declarator, "ISO C forbids qualified function types"); if (type_quals) type = c_build_qualified_type (type, type_quals); - type = build_pointer_type (type); + type = c_build_pointer_type (type); type_quals = TYPE_UNQUALIFIED; } else if (type_quals) @@ -7702,7 +7723,8 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, /* If the declarator is not suitable for a function definition, cause a syntax error. */ - if (decl1 == 0) + if (decl1 == 0 + || TREE_CODE (decl1) != FUNCTION_DECL) return 0; loc = DECL_SOURCE_LOCATION (decl1); diff --git a/gcc/c-tree.h b/gcc/c-tree.h index 51c660c0346..db60935d7de 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -625,6 +625,10 @@ extern int current_function_returns_abnormally; extern int system_header_p; +/* Mode used to build pointers (VOIDmode means ptr_mode). */ + +extern enum machine_mode c_default_pointer_mode; + /* In c-decl.c */ extern void c_finish_incomplete_decl (tree); extern void c_write_global_declarations (void); diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 2de1e5c6672..9891348029c 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -3413,8 +3413,7 @@ pointer_diff (location_t loc, tree op0, tree op1) be the same as the result type (ptrdiff_t), but may need to be a wider type if pointers for the address space are wider than ptrdiff_t. */ if (TYPE_PRECISION (restype) < TYPE_PRECISION (TREE_TYPE (op0))) - inttype = lang_hooks.types.type_for_size - (TYPE_PRECISION (TREE_TYPE (op0)), 0); + inttype = c_common_type_for_size (TYPE_PRECISION (TREE_TYPE (op0)), 0); else inttype = restype; @@ -3447,7 +3446,9 @@ pointer_diff (location_t loc, tree op0, tree op1) else con1 = op1; - if (TREE_CODE (con0) == PLUS_EXPR) + gcc_assert (TREE_CODE (con0) != PLUS_EXPR + && TREE_CODE (con1) != PLUS_EXPR); + if (TREE_CODE (con0) == POINTER_PLUS_EXPR) { lit0 = TREE_OPERAND (con0, 1); con0 = TREE_OPERAND (con0, 0); @@ -3455,7 +3456,7 @@ pointer_diff (location_t loc, tree op0, tree op1) else lit0 = integer_zero_node; - if (TREE_CODE (con1) == PLUS_EXPR) + if (TREE_CODE (con1) == POINTER_PLUS_EXPR) { lit1 = TREE_OPERAND (con1, 1); con1 = TREE_OPERAND (con1, 0); diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index bde15f69683..2f38bb4ee85 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -4362,6 +4362,8 @@ gimple_expand_cfg (void) /* Some backends want to know that we are expanding to RTL. */ currently_expanding_to_rtl = 1; + /* Dominators are not kept up-to-date as we may create new basic-blocks. */ + free_dominance_info (CDI_DOMINATORS); rtl_profile_for_bb (ENTRY_BLOCK_PTR); diff --git a/gcc/cfgloop.c b/gcc/cfgloop.c index fa64797f550..160486f13b1 100644 --- a/gcc/cfgloop.c +++ b/gcc/cfgloop.c @@ -1318,6 +1318,9 @@ verify_loop_structure (void) loop_iterator li; struct loop_exit *exit, *mexit; + /* We need up-to-date dominators, verify them. */ + verify_dominators (CDI_DOMINATORS); + /* Check sizes. */ sizes = XCNEWVEC (unsigned, num); sizes[0] = 2; diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 8283da09992..b86cc74b6a4 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -2818,6 +2818,7 @@ static void cfg_layout_merge_blocks (basic_block a, basic_block b) { bool forwarder_p = (b->flags & BB_FORWARDER_BLOCK) != 0; + rtx insn; gcc_checking_assert (cfg_layout_can_merge_blocks_p (a, b)); @@ -2883,40 +2884,28 @@ cfg_layout_merge_blocks (basic_block a, basic_block b) /* In the case basic blocks are not adjacent, move them around. */ if (NEXT_INSN (BB_END (a)) != BB_HEAD (b)) { - rtx first = unlink_insn_chain (BB_HEAD (b), BB_END (b)); - - emit_insn_after_noloc (first, BB_END (a), a); - /* Skip possible DELETED_LABEL insn. */ - if (!NOTE_INSN_BASIC_BLOCK_P (first)) - first = NEXT_INSN (first); - gcc_assert (NOTE_INSN_BASIC_BLOCK_P (first)); - BB_HEAD (b) = NULL; - - /* emit_insn_after_noloc doesn't call df_insn_change_bb. - We need to explicitly call. */ - update_bb_for_insn_chain (NEXT_INSN (first), - BB_END (b), - a); + insn = unlink_insn_chain (BB_HEAD (b), BB_END (b)); - delete_insn (first); + emit_insn_after_noloc (insn, BB_END (a), a); } /* Otherwise just re-associate the instructions. */ else { - rtx insn; - - update_bb_for_insn_chain (BB_HEAD (b), BB_END (b), a); - insn = BB_HEAD (b); - /* Skip possible DELETED_LABEL insn. */ - if (!NOTE_INSN_BASIC_BLOCK_P (insn)) - insn = NEXT_INSN (insn); - gcc_assert (NOTE_INSN_BASIC_BLOCK_P (insn)); - BB_HEAD (b) = NULL; BB_END (a) = BB_END (b); - delete_insn (insn); } + /* emit_insn_after_noloc doesn't call df_insn_change_bb. + We need to explicitly call. */ + update_bb_for_insn_chain (insn, BB_END (b), a); + + /* Skip possible DELETED_LABEL insn. */ + if (!NOTE_INSN_BASIC_BLOCK_P (insn)) + insn = NEXT_INSN (insn); + gcc_assert (NOTE_INSN_BASIC_BLOCK_P (insn)); + BB_HEAD (b) = NULL; + delete_insn (insn); + df_bb_delete (b->index); /* Possible tablejumps and barriers should appear after the block. */ diff --git a/gcc/common.opt b/gcc/common.opt index 0ea0732a1ac..43959b63fb1 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -1198,8 +1198,8 @@ Common Report Var(flag_tm) Enable support for GNU transactional memory floop-flatten -Common Report Var(flag_loop_flatten) Optimization -Enable Loop Flattening transformation +Common Ignore +Does nothing. Preserved for backward compatibility. fstrict-volatile-bitfields Common Report Var(flag_strict_volatile_bitfields) Init(-1) diff --git a/gcc/compare-elim.c b/gcc/compare-elim.c index 15d8d622585..5157e766e8a 100644 --- a/gcc/compare-elim.c +++ b/gcc/compare-elim.c @@ -301,15 +301,37 @@ find_comparisons_in_bb (struct dom_walk_data *data ATTRIBUTE_UNUSED, /* Eliminate a compare that's redundant with the previous. */ if (last_cmp_valid - && src_mode == last_cmp->orig_mode && rtx_equal_p (last_cmp->in_a, XEXP (src, 0)) && rtx_equal_p (last_cmp->in_b, XEXP (src, 1))) { + rtx flags, x; + enum machine_mode new_mode + = targetm.cc_modes_compatible (last_cmp->orig_mode, src_mode); + + /* New mode is incompatible with the previous compare mode. */ + if (new_mode == VOIDmode) + continue; + + if (new_mode != last_cmp->orig_mode) + { + flags = gen_rtx_REG (src_mode, targetm.flags_regnum); + + /* Generate new comparison for substitution. */ + x = gen_rtx_COMPARE (new_mode, XEXP (src, 0), XEXP (src, 1)); + x = gen_rtx_SET (VOIDmode, flags, x); + + if (!validate_change (last_cmp->insn, + &PATTERN (last_cmp->insn), x, false)) + continue; + + last_cmp->orig_mode = new_mode; + } + delete_insn (insn); continue; } - last_cmp = XCNEW (struct comparison); + last_cmp = XCNEW (struct comparison); last_cmp->insn = insn; last_cmp->prev_clobber = last_clobber; last_cmp->in_a = XEXP (src, 0); diff --git a/gcc/config.gcc b/gcc/config.gcc index bdd5eb31890..99f0b4738a6 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -242,7 +242,18 @@ md_file= # Obsolete configurations. case ${target} in + # Avoid special cases that are not obsolete + arm*-*-*eabi* \ + ) + ;; alpha*-dec-osf5.1* \ + | arm*-*-ecos-elf \ + | arm*-*-elf \ + | arm*-*-freebsd* \ + | arm*-*-linux* \ + | arm*-*-rtems* \ + | arm*-*-uclinux* \ + | arm*-wince-pe* \ | mips-sgi-irix6.5 \ | mips*-*-openbsd* \ | score-* \ @@ -825,7 +836,7 @@ arm*-*-netbsdelf*) arm*-*-linux*) # ARM GNU/Linux with ELF tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h arm/elf.h arm/linux-gas.h arm/linux-elf.h" case $target in - arm*b-*) + arm*b-*-linux*) tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1" ;; esac @@ -3043,12 +3054,20 @@ case "${target}" in case "$with_fpu" in "" \ - | fpa | fpe2 | fpe3 | maverick | vfp | vfp3 | vfpv3 \ + | vfp | vfp3 | vfpv3 \ | vfpv3-fp16 | vfpv3-d16 | vfpv3-d16-fp16 | vfpv3xd \ | vfpv3xd-fp16 | neon | neon-fp16 | vfpv4 | vfpv4-d16 \ | fpv4-sp-d16 | neon-vfpv4) # OK ;; + fpa | fpe2 | fpe3 | maverick) + if test "x$enable_obsolete" != xyes; then + echo "*** Configuration option --with-fpu=${with_fpu} is obsolete." >&2 + echo "*** Specify --enable-obsolete to build it anyway." >&2 + echo "*** Support will be REMOVED in the next major release of GCC." >&2 + exit 1 + fi + ;; *) echo "Unknown fpu used in --with-fpu=$with_fpu" 2>&1 exit 1 diff --git a/gcc/config.in b/gcc/config.in index 28332110dbb..9b8d206c98d 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -1123,7 +1123,7 @@ /* Define .init_array/.fini_array sections are available and working. */ #ifndef USED_FOR_TARGET -#undef HAVE_INITFINI_ARRAY +#undef HAVE_INITFINI_ARRAY_SUPPORT #endif diff --git a/gcc/config/arm/arm-cores.def b/gcc/config/arm/arm-cores.def index b0bd17237c6..80609e0850d 100644 --- a/gcc/config/arm/arm-cores.def +++ b/gcc/config/arm/arm-cores.def @@ -129,7 +129,7 @@ ARM_CORE("cortex-a5", cortexa5, 7A, FL_LDSCHED, cortex_a5) ARM_CORE("cortex-a7", cortexa7, 7A, FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV, cortex) ARM_CORE("cortex-a8", cortexa8, 7A, FL_LDSCHED, cortex) ARM_CORE("cortex-a9", cortexa9, 7A, FL_LDSCHED, cortex_a9) -ARM_CORE("cortex-a15", cortexa15, 7A, FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV, cortex_a15) +ARM_CORE("cortex-a15", cortexa15, 7A, FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV, cortex) ARM_CORE("cortex-r4", cortexr4, 7R, FL_LDSCHED, cortex) ARM_CORE("cortex-r4f", cortexr4f, 7R, FL_LDSCHED, cortex) ARM_CORE("cortex-r5", cortexr5, 7R, FL_LDSCHED | FL_ARM_DIV, cortex) diff --git a/gcc/config/arm/arm-fixed.md b/gcc/config/arm/arm-fixed.md index bd33ce28b38..920c262b425 100644 --- a/gcc/config/arm/arm-fixed.md +++ b/gcc/config/arm/arm-fixed.md @@ -374,6 +374,8 @@ "TARGET_32BIT && arm_arch6" "ssat%?\\t%0, #16, %2%S1" [(set_attr "predicable" "yes") + (set_attr "insn" "sat") + (set_attr "shift" "1") (set_attr "type" "alu_shift")]) (define_insn "arm_usatsihi" @@ -381,4 +383,5 @@ (us_truncate:HI (match_operand:SI 1 "s_register_operand")))] "TARGET_INT_SIMD" "usat%?\\t%0, #16, %1" - [(set_attr "predicable" "yes")]) + [(set_attr "predicable" "yes") + (set_attr "insn" "sat")]) diff --git a/gcc/config/arm/arm-ldmstm.ml b/gcc/config/arm/arm-ldmstm.ml index 221edd2aa31..1d98ef038ef 100644 --- a/gcc/config/arm/arm-ldmstm.ml +++ b/gcc/config/arm/arm-ldmstm.ml @@ -216,9 +216,14 @@ let write_ldm_commutative_peephole thumb = Printf.printf "%s (match_operand:SI %d \"s_register_operand\" \"\")]))\n" indent (nregs * 2 + 3); Printf.printf "%s (clobber (reg:CC CC_REGNUM))])]\n" indent end; - Printf.printf " \"(((operands[%d] == operands[0] && operands[%d] == operands[1])\n" (nregs * 2 + 2) (nregs * 2 + 3); - Printf.printf " || (operands[%d] == operands[0] && operands[%d] == operands[1]))\n" (nregs * 2 + 3) (nregs * 2 + 2); - Printf.printf " && peep2_reg_dead_p (%d, operands[0]) && peep2_reg_dead_p (%d, operands[1]))\"\n" (nregs + 1) (nregs + 1); + Printf.printf " \"((((REGNO (operands[%d]) == REGNO (operands[0]))\n" (nregs * 2 + 2); + Printf.printf " && (REGNO (operands[%d]) == REGNO (operands[1])))\n" (nregs * 2 + 3); + Printf.printf " || ((REGNO (operands[%d]) == REGNO (operands[0]))\n" (nregs * 2 + 3); + Printf.printf " && (REGNO (operands[%d]) == REGNO (operands[1]))))\n" (nregs * 2 + 2); + Printf.printf " && (peep2_regno_dead_p (%d, REGNO (operands[0]))\n" (nregs + 1); + Printf.printf " || (REGNO (operands[0]) == REGNO (operands[%d])))\n" (nregs * 2); + Printf.printf " && (peep2_regno_dead_p (%d, REGNO (operands[1]))\n" (nregs + 1); + Printf.printf " || (REGNO (operands[1]) == REGNO (operands[%d]))))\"\n" (nregs * 2); begin if thumb then Printf.printf " [(set (match_dup %d) (match_op_dup %d [(match_dup %d) (match_dup %d)]))]\n" diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h index 1767128c8d5..900d09a09a3 100644 --- a/gcc/config/arm/arm-protos.h +++ b/gcc/config/arm/arm-protos.h @@ -107,6 +107,7 @@ extern int tls_mentioned_p (rtx); extern int symbol_mentioned_p (rtx); extern int label_mentioned_p (rtx); extern RTX_CODE minmax_code (rtx); +extern bool arm_sat_operator_match (rtx, rtx, int *, bool *); extern int adjacent_mem_locations (rtx, rtx); extern bool gen_ldm_seq (rtx *, int, bool); extern bool gen_stm_seq (rtx *, int); diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 7f0dc6b4aa3..dfba8e15fc1 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -968,17 +968,6 @@ const struct tune_params arm_cortex_a9_tune = arm_default_branch_cost }; -const struct tune_params arm_cortex_a15_tune = -{ - arm_9e_rtx_costs, - NULL, - 1, /* Constant limit. */ - 1, /* Max cond insns. */ - ARM_PREFETCH_NOT_BENEFICIAL, /* TODO: Calculate correct values. */ - false, /* Prefer constant pool. */ - arm_cortex_a5_branch_cost -}; - const struct tune_params arm_fa726te_tune = { arm_9e_rtx_costs, @@ -4275,6 +4264,11 @@ use_vfp_abi (enum arm_pcs pcs_variant, bool is_double) (TARGET_VFP_DOUBLE || !is_double)); } +/* Return true if an argument whose type is TYPE, or mode is MODE, is + suitable for passing or returning in VFP registers for the PCS + variant selected. If it is, then *BASE_MODE is updated to contain + a machine mode describing each element of the argument's type and + *COUNT to hold the number of such elements. */ static bool aapcs_vfp_is_call_or_return_candidate (enum arm_pcs pcs_variant, enum machine_mode mode, const_tree type, @@ -4282,9 +4276,20 @@ aapcs_vfp_is_call_or_return_candidate (enum arm_pcs pcs_variant, { enum machine_mode new_mode = VOIDmode; - if (GET_MODE_CLASS (mode) == MODE_FLOAT - || GET_MODE_CLASS (mode) == MODE_VECTOR_INT - || GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT) + /* If we have the type information, prefer that to working things + out from the mode. */ + if (type) + { + int ag_count = aapcs_vfp_sub_candidate (type, &new_mode); + + if (ag_count > 0 && ag_count <= 4) + *count = ag_count; + else + return false; + } + else if (GET_MODE_CLASS (mode) == MODE_FLOAT + || GET_MODE_CLASS (mode) == MODE_VECTOR_INT + || GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT) { *count = 1; new_mode = mode; @@ -4294,15 +4299,6 @@ aapcs_vfp_is_call_or_return_candidate (enum arm_pcs pcs_variant, *count = 2; new_mode = (mode == DCmode ? DFmode : SFmode); } - else if (type && (mode == BLKmode || TREE_CODE (type) == VECTOR_TYPE)) - { - int ag_count = aapcs_vfp_sub_candidate (type, &new_mode); - - if (ag_count > 0 && ag_count <= 4) - *count = ag_count; - else - return false; - } else return false; @@ -10041,6 +10037,42 @@ minmax_code (rtx x) } } +/* Match pair of min/max operators that can be implemented via usat/ssat. */ + +bool +arm_sat_operator_match (rtx lo_bound, rtx hi_bound, + int *mask, bool *signed_sat) +{ + /* The high bound must be a power of two minus one. */ + int log = exact_log2 (INTVAL (hi_bound) + 1); + if (log == -1) + return false; + + /* The low bound is either zero (for usat) or one less than the + negation of the high bound (for ssat). */ + if (INTVAL (lo_bound) == 0) + { + if (mask) + *mask = log; + if (signed_sat) + *signed_sat = false; + + return true; + } + + if (INTVAL (lo_bound) == -INTVAL (hi_bound) - 1) + { + if (mask) + *mask = log + 1; + if (signed_sat) + *signed_sat = true; + + return true; + } + + return false; +} + /* Return 1 if memory locations are adjacent. */ int adjacent_mem_locations (rtx a, rtx b) @@ -19108,7 +19140,9 @@ static neon_builtin_datum neon_builtin_data[] = VAR3 (BINOP, vsubhn, v8hi, v4si, v2di), VAR8 (BINOP, vceq, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf), VAR8 (BINOP, vcge, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf), + VAR6 (BINOP, vcgeu, v8qi, v4hi, v2si, v16qi, v8hi, v4si), VAR8 (BINOP, vcgt, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf), + VAR6 (BINOP, vcgtu, v8qi, v4hi, v2si, v16qi, v8hi, v4si), VAR2 (BINOP, vcage, v2sf, v4sf), VAR2 (BINOP, vcagt, v2sf, v4sf), VAR6 (BINOP, vtst, v8qi, v4hi, v2si, v16qi, v8hi, v4si), diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index b21d0d2539c..4f6d96575b9 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -283,7 +283,7 @@ ;; scheduling information. (define_attr "insn" - "mov,mvn,smulxy,smlaxy,smlalxy,smulwy,smlawx,mul,muls,mla,mlas,umull,umulls,umlal,umlals,smull,smulls,smlal,smlals,smlawy,smuad,smuadx,smlad,smladx,smusd,smusdx,smlsd,smlsdx,smmul,smmulr,smmla,umaal,smlald,smlsld,clz,mrs,msr,xtab,sdiv,udiv,other" + "mov,mvn,smulxy,smlaxy,smlalxy,smulwy,smlawx,mul,muls,mla,mlas,umull,umulls,umlal,umlals,smull,smulls,smlal,smlals,smlawy,smuad,smuadx,smlad,smladx,smusd,smusdx,smlsd,smlsdx,smmul,smmulr,smmla,umaal,smlald,smlsld,clz,mrs,msr,xtab,sdiv,udiv,sat,other" (const_string "other")) ; TYPE attribute is used to detect floating point instructions which, if @@ -3446,6 +3446,60 @@ (const_int 12)))] ) +(define_code_iterator SAT [smin smax]) +(define_code_iterator SATrev [smin smax]) +(define_code_attr SATlo [(smin "1") (smax "2")]) +(define_code_attr SAThi [(smin "2") (smax "1")]) + +(define_insn "*satsi_<SAT:code>" + [(set (match_operand:SI 0 "s_register_operand" "=r") + (SAT:SI (SATrev:SI (match_operand:SI 3 "s_register_operand" "r") + (match_operand:SI 1 "const_int_operand" "i")) + (match_operand:SI 2 "const_int_operand" "i")))] + "TARGET_32BIT && arm_arch6 && <SAT:CODE> != <SATrev:CODE> + && arm_sat_operator_match (operands[<SAT:SATlo>], operands[<SAT:SAThi>], NULL, NULL)" +{ + int mask; + bool signed_sat; + if (!arm_sat_operator_match (operands[<SAT:SATlo>], operands[<SAT:SAThi>], + &mask, &signed_sat)) + gcc_unreachable (); + + operands[1] = GEN_INT (mask); + if (signed_sat) + return "ssat%?\t%0, %1, %3"; + else + return "usat%?\t%0, %1, %3"; +} + [(set_attr "predicable" "yes") + (set_attr "insn" "sat")]) + +(define_insn "*satsi_<SAT:code>_shift" + [(set (match_operand:SI 0 "s_register_operand" "=r") + (SAT:SI (SATrev:SI (match_operator:SI 3 "sat_shift_operator" + [(match_operand:SI 4 "s_register_operand" "r") + (match_operand:SI 5 "const_int_operand" "i")]) + (match_operand:SI 1 "const_int_operand" "i")) + (match_operand:SI 2 "const_int_operand" "i")))] + "TARGET_32BIT && arm_arch6 && <SAT:CODE> != <SATrev:CODE> + && arm_sat_operator_match (operands[<SAT:SATlo>], operands[<SAT:SAThi>], NULL, NULL)" +{ + int mask; + bool signed_sat; + if (!arm_sat_operator_match (operands[<SAT:SATlo>], operands[<SAT:SAThi>], + &mask, &signed_sat)) + gcc_unreachable (); + + operands[1] = GEN_INT (mask); + if (signed_sat) + return "ssat%?\t%0, %1, %4%S3"; + else + return "usat%?\t%0, %1, %4%S3"; +} + [(set_attr "predicable" "yes") + (set_attr "insn" "sat") + (set_attr "shift" "3") + (set_attr "type" "alu_shift")]) ;; Shift and rotation insns diff --git a/gcc/config/arm/arm_neon.h b/gcc/config/arm/arm_neon.h index 9cba0a90a0f..0567895912b 100644 --- a/gcc/config/arm/arm_neon.h +++ b/gcc/config/arm/arm_neon.h @@ -1893,19 +1893,19 @@ vcge_f32 (float32x2_t __a, float32x2_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vcge_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t)__builtin_neon_vcgev8qi ((int8x8_t) __a, (int8x8_t) __b, 0); + return (uint8x8_t)__builtin_neon_vcgeuv8qi ((int8x8_t) __a, (int8x8_t) __b, 0); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vcge_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t)__builtin_neon_vcgev4hi ((int16x4_t) __a, (int16x4_t) __b, 0); + return (uint16x4_t)__builtin_neon_vcgeuv4hi ((int16x4_t) __a, (int16x4_t) __b, 0); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcge_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t)__builtin_neon_vcgev2si ((int32x2_t) __a, (int32x2_t) __b, 0); + return (uint32x2_t)__builtin_neon_vcgeuv2si ((int32x2_t) __a, (int32x2_t) __b, 0); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) @@ -1935,19 +1935,19 @@ vcgeq_f32 (float32x4_t __a, float32x4_t __b) __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcgeq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t)__builtin_neon_vcgev16qi ((int8x16_t) __a, (int8x16_t) __b, 0); + return (uint8x16_t)__builtin_neon_vcgeuv16qi ((int8x16_t) __a, (int8x16_t) __b, 0); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcgeq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t)__builtin_neon_vcgev8hi ((int16x8_t) __a, (int16x8_t) __b, 0); + return (uint16x8_t)__builtin_neon_vcgeuv8hi ((int16x8_t) __a, (int16x8_t) __b, 0); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcgeq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t)__builtin_neon_vcgev4si ((int32x4_t) __a, (int32x4_t) __b, 0); + return (uint32x4_t)__builtin_neon_vcgeuv4si ((int32x4_t) __a, (int32x4_t) __b, 0); } __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) @@ -1977,19 +1977,19 @@ vcle_f32 (float32x2_t __a, float32x2_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vcle_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t)__builtin_neon_vcgev8qi ((int8x8_t) __b, (int8x8_t) __a, 0); + return (uint8x8_t)__builtin_neon_vcgeuv8qi ((int8x8_t) __b, (int8x8_t) __a, 0); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vcle_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t)__builtin_neon_vcgev4hi ((int16x4_t) __b, (int16x4_t) __a, 0); + return (uint16x4_t)__builtin_neon_vcgeuv4hi ((int16x4_t) __b, (int16x4_t) __a, 0); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcle_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t)__builtin_neon_vcgev2si ((int32x2_t) __b, (int32x2_t) __a, 0); + return (uint32x2_t)__builtin_neon_vcgeuv2si ((int32x2_t) __b, (int32x2_t) __a, 0); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) @@ -2019,19 +2019,19 @@ vcleq_f32 (float32x4_t __a, float32x4_t __b) __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcleq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t)__builtin_neon_vcgev16qi ((int8x16_t) __b, (int8x16_t) __a, 0); + return (uint8x16_t)__builtin_neon_vcgeuv16qi ((int8x16_t) __b, (int8x16_t) __a, 0); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcleq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t)__builtin_neon_vcgev8hi ((int16x8_t) __b, (int16x8_t) __a, 0); + return (uint16x8_t)__builtin_neon_vcgeuv8hi ((int16x8_t) __b, (int16x8_t) __a, 0); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcleq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t)__builtin_neon_vcgev4si ((int32x4_t) __b, (int32x4_t) __a, 0); + return (uint32x4_t)__builtin_neon_vcgeuv4si ((int32x4_t) __b, (int32x4_t) __a, 0); } __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) @@ -2061,19 +2061,19 @@ vcgt_f32 (float32x2_t __a, float32x2_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vcgt_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t)__builtin_neon_vcgtv8qi ((int8x8_t) __a, (int8x8_t) __b, 0); + return (uint8x8_t)__builtin_neon_vcgtuv8qi ((int8x8_t) __a, (int8x8_t) __b, 0); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vcgt_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t)__builtin_neon_vcgtv4hi ((int16x4_t) __a, (int16x4_t) __b, 0); + return (uint16x4_t)__builtin_neon_vcgtuv4hi ((int16x4_t) __a, (int16x4_t) __b, 0); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcgt_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t)__builtin_neon_vcgtv2si ((int32x2_t) __a, (int32x2_t) __b, 0); + return (uint32x2_t)__builtin_neon_vcgtuv2si ((int32x2_t) __a, (int32x2_t) __b, 0); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) @@ -2103,19 +2103,19 @@ vcgtq_f32 (float32x4_t __a, float32x4_t __b) __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcgtq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t)__builtin_neon_vcgtv16qi ((int8x16_t) __a, (int8x16_t) __b, 0); + return (uint8x16_t)__builtin_neon_vcgtuv16qi ((int8x16_t) __a, (int8x16_t) __b, 0); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcgtq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t)__builtin_neon_vcgtv8hi ((int16x8_t) __a, (int16x8_t) __b, 0); + return (uint16x8_t)__builtin_neon_vcgtuv8hi ((int16x8_t) __a, (int16x8_t) __b, 0); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcgtq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t)__builtin_neon_vcgtv4si ((int32x4_t) __a, (int32x4_t) __b, 0); + return (uint32x4_t)__builtin_neon_vcgtuv4si ((int32x4_t) __a, (int32x4_t) __b, 0); } __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) @@ -2145,19 +2145,19 @@ vclt_f32 (float32x2_t __a, float32x2_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vclt_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t)__builtin_neon_vcgtv8qi ((int8x8_t) __b, (int8x8_t) __a, 0); + return (uint8x8_t)__builtin_neon_vcgtuv8qi ((int8x8_t) __b, (int8x8_t) __a, 0); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vclt_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t)__builtin_neon_vcgtv4hi ((int16x4_t) __b, (int16x4_t) __a, 0); + return (uint16x4_t)__builtin_neon_vcgtuv4hi ((int16x4_t) __b, (int16x4_t) __a, 0); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vclt_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t)__builtin_neon_vcgtv2si ((int32x2_t) __b, (int32x2_t) __a, 0); + return (uint32x2_t)__builtin_neon_vcgtuv2si ((int32x2_t) __b, (int32x2_t) __a, 0); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) @@ -2187,19 +2187,19 @@ vcltq_f32 (float32x4_t __a, float32x4_t __b) __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcltq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t)__builtin_neon_vcgtv16qi ((int8x16_t) __b, (int8x16_t) __a, 0); + return (uint8x16_t)__builtin_neon_vcgtuv16qi ((int8x16_t) __b, (int8x16_t) __a, 0); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcltq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t)__builtin_neon_vcgtv8hi ((int16x8_t) __b, (int16x8_t) __a, 0); + return (uint16x8_t)__builtin_neon_vcgtuv8hi ((int16x8_t) __b, (int16x8_t) __a, 0); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcltq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t)__builtin_neon_vcgtv4si ((int32x4_t) __b, (int32x4_t) __a, 0); + return (uint32x4_t)__builtin_neon_vcgtuv4si ((int32x4_t) __b, (int32x4_t) __a, 0); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) diff --git a/gcc/config/arm/ldmstm.md b/gcc/config/arm/ldmstm.md index 5db4a326996..0835f1637a8 100644 --- a/gcc/config/arm/ldmstm.md +++ b/gcc/config/arm/ldmstm.md @@ -1160,9 +1160,14 @@ [(match_operand:SI 6 "s_register_operand" "") (match_operand:SI 7 "s_register_operand" "")])) (clobber (reg:CC CC_REGNUM))])] - "(((operands[6] == operands[0] && operands[7] == operands[1]) - || (operands[7] == operands[0] && operands[6] == operands[1])) - && peep2_reg_dead_p (3, operands[0]) && peep2_reg_dead_p (3, operands[1]))" + "((((REGNO (operands[6]) == REGNO (operands[0])) + && (REGNO (operands[7]) == REGNO (operands[1]))) + || ((REGNO (operands[7]) == REGNO (operands[0])) + && (REGNO (operands[6]) == REGNO (operands[1])))) + && (peep2_regno_dead_p (3, REGNO (operands[0])) + || (REGNO (operands[0]) == REGNO (operands[4]))) + && (peep2_regno_dead_p (3, REGNO (operands[1])) + || (REGNO (operands[1]) == REGNO (operands[4]))))" [(parallel [(set (match_dup 4) (match_op_dup 5 [(match_dup 6) (match_dup 7)])) (clobber (reg:CC CC_REGNUM))])] @@ -1180,9 +1185,14 @@ (match_operator:SI 5 "commutative_binary_operator" [(match_operand:SI 6 "s_register_operand" "") (match_operand:SI 7 "s_register_operand" "")]))] - "(((operands[6] == operands[0] && operands[7] == operands[1]) - || (operands[7] == operands[0] && operands[6] == operands[1])) - && peep2_reg_dead_p (3, operands[0]) && peep2_reg_dead_p (3, operands[1]))" + "((((REGNO (operands[6]) == REGNO (operands[0])) + && (REGNO (operands[7]) == REGNO (operands[1]))) + || ((REGNO (operands[7]) == REGNO (operands[0])) + && (REGNO (operands[6]) == REGNO (operands[1])))) + && (peep2_regno_dead_p (3, REGNO (operands[0])) + || (REGNO (operands[0]) == REGNO (operands[4]))) + && (peep2_regno_dead_p (3, REGNO (operands[1])) + || (REGNO (operands[1]) == REGNO (operands[4]))))" [(set (match_dup 4) (match_op_dup 5 [(match_dup 6) (match_dup 7)]))] { if (!gen_ldm_seq (operands, 2, true)) diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index a6c891dafd6..078a8fd47ee 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -34,7 +34,9 @@ UNSPEC_VCAGT UNSPEC_VCEQ UNSPEC_VCGE + UNSPEC_VCGEU UNSPEC_VCGT + UNSPEC_VCGTU UNSPEC_VCLS UNSPEC_VCONCAT UNSPEC_VCVT @@ -1064,9 +1066,9 @@ (match_operand:VDQIW 2 "imm_rshift_or_reg_neon" "")))] "TARGET_NEON" { - rtx neg = gen_reg_rtx (<MODE>mode); - if (REG_P (operands[2])) + if (s_register_operand (operands[2], <MODE>mode)) { + rtx neg = gen_reg_rtx (<MODE>mode); emit_insn (gen_neg<mode>2 (neg, operands[2])); emit_insn (gen_ashl<mode>3_signed (operands[0], operands[1], neg)); } @@ -1081,9 +1083,9 @@ (match_operand:VDQIW 2 "imm_rshift_or_reg_neon" "")))] "TARGET_NEON" { - rtx neg = gen_reg_rtx (<MODE>mode); - if (REG_P (operands[2])) + if (s_register_operand (operands[2], <MODE>mode)) { + rtx neg = gen_reg_rtx (<MODE>mode); emit_insn (gen_neg<mode>2 (neg, operands[2])); emit_insn (gen_ashl<mode>3_unsigned (operands[0], operands[1], neg)); } @@ -2146,6 +2148,18 @@ (const_string "neon_int_5")))] ) +(define_insn "neon_vcgeu<mode>" + [(set (match_operand:<V_cmp_result> 0 "s_register_operand" "=w") + (unspec:<V_cmp_result> + [(match_operand:VDQIW 1 "s_register_operand" "w") + (match_operand:VDQIW 2 "s_register_operand" "w") + (match_operand:SI 3 "immediate_operand" "i")] + UNSPEC_VCGEU))] + "TARGET_NEON" + "vcge.%T3%#<V_sz_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2" + [(set_attr "neon_type" "neon_int_5")] +) + (define_insn "neon_vcgt<mode>" [(set (match_operand:<V_cmp_result> 0 "s_register_operand" "=w,w") (unspec:<V_cmp_result> @@ -2165,6 +2179,18 @@ (const_string "neon_int_5")))] ) +(define_insn "neon_vcgtu<mode>" + [(set (match_operand:<V_cmp_result> 0 "s_register_operand" "=w") + (unspec:<V_cmp_result> + [(match_operand:VDQIW 1 "s_register_operand" "w") + (match_operand:VDQIW 2 "s_register_operand" "w") + (match_operand:SI 3 "immediate_operand" "i")] + UNSPEC_VCGTU))] + "TARGET_NEON" + "vcgt.%T3%#<V_sz_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2" + [(set_attr "neon_type" "neon_int_5")] +) + ;; VCLE and VCLT only support comparisons with immediate zero (register ;; variants are VCGE and VCGT with operands reversed). diff --git a/gcc/config/arm/neon.ml b/gcc/config/arm/neon.ml index b5b9cab7309..363e55c713c 100644 --- a/gcc/config/arm/neon.ml +++ b/gcc/config/arm/neon.ml @@ -700,6 +700,8 @@ let bit_select shape elt = (* Common lists of supported element types. *) +let s_8_32 = [S8; S16; S32] +let u_8_32 = [U8; U16; U32] let su_8_32 = [S8; S16; S32; U8; U16; U32] let su_8_64 = S64 :: U64 :: su_8_32 let su_16_64 = [S16; S32; S64; U16; U32; U64] @@ -777,26 +779,40 @@ let ops = Vceq, [], All (3, Qreg), "vceqQ", cmp_sign_invar, P8 :: F32 :: su_8_32; (* Comparison, greater-than or equal. *) - Vcge, [], All (3, Dreg), "vcge", cmp_sign_matters, F32 :: su_8_32; - Vcge, [], All (3, Qreg), "vcgeQ", cmp_sign_matters, F32 :: su_8_32; + Vcge, [], All (3, Dreg), "vcge", cmp_sign_matters, F32 :: s_8_32; + Vcge, [Builtin_name "vcgeu"], All (3, Dreg), "vcge", cmp_sign_matters, u_8_32; + Vcge, [], All (3, Qreg), "vcgeQ", cmp_sign_matters, F32 :: s_8_32; + Vcge, [Builtin_name "vcgeu"], All (3, Qreg), "vcgeQ", cmp_sign_matters, u_8_32; (* Comparison, less-than or equal. *) Vcle, [Flipped "vcge"], All (3, Dreg), "vcle", cmp_sign_matters, - F32 :: su_8_32; + F32 :: s_8_32; + Vcle, [Flipped "vcgeu"], All (3, Dreg), "vcle", cmp_sign_matters, + u_8_32; Vcle, [Instruction_name ["vcge"]; Flipped "vcgeQ"], All (3, Qreg), "vcleQ", cmp_sign_matters, - F32 :: su_8_32; + F32 :: s_8_32; + Vcle, [Instruction_name ["vcge"]; Flipped "vcgeuQ"], + All (3, Qreg), "vcleQ", cmp_sign_matters, + u_8_32; (* Comparison, greater-than. *) - Vcgt, [], All (3, Dreg), "vcgt", cmp_sign_matters, F32 :: su_8_32; - Vcgt, [], All (3, Qreg), "vcgtQ", cmp_sign_matters, F32 :: su_8_32; + Vcgt, [], All (3, Dreg), "vcgt", cmp_sign_matters, F32 :: s_8_32; + Vcgt, [Builtin_name "vcgtu"], All (3, Dreg), "vcgt", cmp_sign_matters, u_8_32; + Vcgt, [], All (3, Qreg), "vcgtQ", cmp_sign_matters, F32 :: s_8_32; + Vcgt, [Builtin_name "vcgtu"], All (3, Qreg), "vcgtQ", cmp_sign_matters, u_8_32; (* Comparison, less-than. *) Vclt, [Flipped "vcgt"], All (3, Dreg), "vclt", cmp_sign_matters, - F32 :: su_8_32; + F32 :: s_8_32; + Vclt, [Flipped "vcgtu"], All (3, Dreg), "vclt", cmp_sign_matters, + u_8_32; Vclt, [Instruction_name ["vcgt"]; Flipped "vcgtQ"], All (3, Qreg), "vcltQ", cmp_sign_matters, - F32 :: su_8_32; + F32 :: s_8_32; + Vclt, [Instruction_name ["vcgt"]; Flipped "vcgtuQ"], + All (3, Qreg), "vcltQ", cmp_sign_matters, + u_8_32; (* Compare absolute greater-than or equal. *) Vcage, [Instruction_name ["vacge"]], diff --git a/gcc/config/arm/predicates.md b/gcc/config/arm/predicates.md index fa2f695356b..dea3a96368e 100644 --- a/gcc/config/arm/predicates.md +++ b/gcc/config/arm/predicates.md @@ -243,9 +243,11 @@ ;; True for shift operators which can be used with saturation instructions. (define_special_predicate "sat_shift_operator" - (and (match_code "ashift,ashiftrt") - (match_test "GET_CODE (XEXP (op, 1)) == CONST_INT - && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1)) <= 32)") + (and (ior (and (match_code "mult") + (match_test "power_of_two_operand (XEXP (op, 1), mode)")) + (and (match_code "ashift,ashiftrt") + (match_test "GET_CODE (XEXP (op, 1)) == CONST_INT + && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1)) < 32)"))) (match_test "mode == GET_MODE (op)"))) ;; True for MULT, to identify which variant of shift_operator is in use. diff --git a/gcc/config/arm/thumb2.md b/gcc/config/arm/thumb2.md index ad05feb8958..39a2138a689 100644 --- a/gcc/config/arm/thumb2.md +++ b/gcc/config/arm/thumb2.md @@ -686,6 +686,7 @@ (match_operand:SI 2 "low_reg_or_int_operand" "")]))] "TARGET_THUMB2 && peep2_regno_dead_p(0, CC_REGNUM) + && (CONST_INT_P (operands[2]) || operands[1] == operands[0]) && ((GET_CODE(operands[3]) != ROTATE && GET_CODE(operands[3]) != ROTATERT) || REG_P(operands[2]))" [(parallel @@ -698,10 +699,10 @@ ) (define_insn "*thumb2_shiftsi3_short" - [(set (match_operand:SI 0 "low_register_operand" "=l") + [(set (match_operand:SI 0 "low_register_operand" "=l,l") (match_operator:SI 3 "shift_operator" - [(match_operand:SI 1 "low_register_operand" "l") - (match_operand:SI 2 "low_reg_or_int_operand" "lM")])) + [(match_operand:SI 1 "low_register_operand" "0,l") + (match_operand:SI 2 "low_reg_or_int_operand" "l,M")])) (clobber (reg:CC CC_REGNUM))] "TARGET_THUMB2 && reload_completed && ((GET_CODE(operands[3]) != ROTATE && GET_CODE(operands[3]) != ROTATERT) diff --git a/gcc/config/avr/avr-c.c b/gcc/config/avr/avr-c.c index aabeb2177a1..1babb5372c2 100644 --- a/gcc/config/avr/avr-c.c +++ b/gcc/config/avr/avr-c.c @@ -71,9 +71,19 @@ avr_toupper (char *up, const char *lo) /* Worker function for TARGET_CPU_CPP_BUILTINS. */ +static const char *const avr_builtin_name[] = + { +#define DEF_BUILTIN(NAME, N_ARGS, ID, TYPE, CODE) NAME, +#include "builtins.def" +#undef DEF_BUILTIN + NULL + }; + void avr_cpu_cpp_builtins (struct cpp_reader *pfile) { + int i; + builtin_define_std ("AVR"); if (avr_current_arch->macro) @@ -140,10 +150,12 @@ avr_cpu_cpp_builtins (struct cpp_reader *pfile) if (!strcmp (lang_hooks.name, "GNU C")) { - int i; - for (i = 0; avr_addrspace[i].name; i++) - if (!ADDR_SPACE_GENERIC_P (i)) + if (!ADDR_SPACE_GENERIC_P (i) + /* Only supply __FLASH<n> macro if the address space is reasonable + for this target. The address space qualifier itself is still + supported, but using it will throw an error. */ + && avr_addrspace[i].segment < avr_current_device->n_flash) { const char *name = avr_addrspace[i].name; char *Name = (char*) alloca (1 + strlen (name)); @@ -153,22 +165,18 @@ avr_cpu_cpp_builtins (struct cpp_reader *pfile) } } - /* Define builtin macros so that the user can - easily query if or if not a specific builtin - is available. */ - - cpp_define (pfile, "__BUILTIN_AVR_NOP"); - cpp_define (pfile, "__BUILTIN_AVR_SEI"); - cpp_define (pfile, "__BUILTIN_AVR_CLI"); - cpp_define (pfile, "__BUILTIN_AVR_WDR"); - cpp_define (pfile, "__BUILTIN_AVR_SLEEP"); - cpp_define (pfile, "__BUILTIN_AVR_SWAP"); - cpp_define (pfile, "__BUILTIN_AVR_INSERT_BITS"); - cpp_define (pfile, "__BUILTIN_AVR_DELAY_CYCLES"); - - cpp_define (pfile, "__BUILTIN_AVR_FMUL"); - cpp_define (pfile, "__BUILTIN_AVR_FMULS"); - cpp_define (pfile, "__BUILTIN_AVR_FMULSU"); + /* Define builtin macros so that the user can easily query if or + if not a specific builtin is available. */ + + for (i = 0; avr_builtin_name[i]; i++) + { + const char *name = avr_builtin_name[i]; + char *Name = (char*) alloca (1 + strlen (name)); + + cpp_define (pfile, avr_toupper (Name, name)); + } + + /* Builtin macros for the __int24 and __uint24 type. */ cpp_define (pfile, "__INT24_MAX__=8388607L"); cpp_define (pfile, "__INT24_MIN__=(-__INT24_MAX__-1)"); diff --git a/gcc/config/avr/avr-devices.c b/gcc/config/avr/avr-devices.c index d04485420c9..41688c82553 100644 --- a/gcc/config/avr/avr-devices.c +++ b/gcc/config/avr/avr-devices.c @@ -30,37 +30,37 @@ const struct base_arch_s avr_arch_types[] = { /* unknown device specified */ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 32, 1, NULL, "avr2" }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 32, NULL, "avr2" }, /* - A M J LM E E E X R d S S O # F A - S U M PO L L I M A a t F ff 6 l r - M L P MV P P J E M t a R s 4 a c - XW M M M G P a r e s h - X P A D t t k h ID */ - { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 32, 1, "1", "avr1" }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 32, 1, "2", "avr2" }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0x0060, 32, 1, "25", "avr25" }, - { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0x0060, 32, 1, "3", "avr3" }, - { 0, 0, 1, 0, 1, 0, 0, 0, 0, 0x0060, 32, 2, "31", "avr31" }, - { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0x0060, 32, 1, "35", "avr35" }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0x0060, 32, 1, "4", "avr4" }, - { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0x0060, 32, 1, "5", "avr5" }, - { 0, 1, 1, 1, 1, 1, 0, 0, 0, 0x0060, 32, 2, "51", "avr51" }, - { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0x0060, 32, 4, "6", "avr6" }, + A M J LM E E E X R d S S O A + S U M PO L L I M A a t F ff r + M L P MV P P J E M t a R s c + XW M M M G P a r e h + X P A D t t ID */ + { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 32, "1", "avr1" }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 32, "2", "avr2" }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0x0060, 32, "25", "avr25" }, + { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0x0060, 32, "3", "avr3" }, + { 0, 0, 1, 0, 1, 0, 0, 0, 0, 0x0060, 32, "31", "avr31" }, + { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0x0060, 32, "35", "avr35" }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0x0060, 32, "4", "avr4" }, + { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0x0060, 32, "5", "avr5" }, + { 0, 1, 1, 1, 1, 1, 0, 0, 0, 0x0060, 32, "51", "avr51" }, + { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0x0060, 32, "6", "avr6" }, - { 0, 1, 1, 1, 0, 0, 0, 1, 0, 0x2000, 0, 1, "102", "avrxmega2" }, - { 0, 1, 1, 1, 0, 0, 0, 1, 0, 0x2000, 0, 1, "104", "avrxmega4" }, /* Same */ - { 0, 1, 1, 1, 0, 0, 0, 1, 1, 0x2000, 0, 1, "105", "avrxmega5" }, - { 0, 1, 1, 1, 1, 1, 1, 1, 0, 0x2000, 0, 4, "106", "avrxmega6" }, - { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0x2000, 0, 4, "107", "avrxmega7" } + { 0, 1, 1, 1, 0, 0, 0, 1, 0, 0x2000, 0, "102", "avrxmega2" }, + { 0, 1, 1, 1, 1, 1, 0, 1, 0, 0x2000, 0, "104", "avrxmega4" }, + { 0, 1, 1, 1, 1, 1, 0, 1, 1, 0x2000, 0, "105", "avrxmega5" }, + { 0, 1, 1, 1, 1, 1, 1, 1, 0, 0x2000, 0, "106", "avrxmega6" }, + { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0x2000, 0, "107", "avrxmega7" } }; const struct mcu_type_s avr_mcu_types[] = { -#define AVR_MCU(NAME, ARCH, MACRO, SHORT_SP, ERRATA_SKIP, DATA_SEC, LIBRARY_NAME) \ - { NAME, ARCH, MACRO, SHORT_SP, ERRATA_SKIP, DATA_SEC, LIBRARY_NAME }, +#define AVR_MCU(NAME,ARCH,MACRO,SHORT_SP,ERRATA_SKIP,DATA_SEC,N_FLASH,LIB_NAME)\ + { NAME, ARCH, MACRO, SHORT_SP, ERRATA_SKIP, DATA_SEC, N_FLASH, LIB_NAME }, #include "avr-mcus.def" #undef AVR_MCU /* End of list. */ - { NULL, ARCH_UNKNOWN, NULL, 0, 0, 0, NULL } + { NULL, ARCH_UNKNOWN, NULL, 0, 0, 0, 0, NULL } }; diff --git a/gcc/config/avr/avr-mcus.def b/gcc/config/avr/avr-mcus.def index 03a92b458c0..462d6a26f7c 100644 --- a/gcc/config/avr/avr-mcus.def +++ b/gcc/config/avr/avr-mcus.def @@ -26,215 +26,215 @@ Before including this file, define a macro: - AVR_MCU (NAME, ARCH, MACRO, SHORT_SP, ERRATA_SKIP, DATA_SEC, LIBRARY_NAME) + AVR_MCU (NAME, ARCH, MACRO, SHORT_SP, ERRATA_SKIP, DATA_SEC, N_FLASH, LIBRARY_NAME) where the arguments are the fields of struct mcu_type_s. */ /* "avr2" must be first for the "0" default to work as intended. */ /* Classic, <= 8K. */ -AVR_MCU ("avr2", ARCH_AVR2, NULL, 0, 1, 0x0060, "s8515") -AVR_MCU ("at90s2313", ARCH_AVR2, "__AVR_AT90S2313__", 1, 0, 0x0060, "s2313") -AVR_MCU ("at90s2323", ARCH_AVR2, "__AVR_AT90S2323__", 1, 0, 0x0060, "s2323") -AVR_MCU ("at90s2333", ARCH_AVR2, "__AVR_AT90S2333__", 1, 0, 0x0060, "s2333") -AVR_MCU ("at90s2343", ARCH_AVR2, "__AVR_AT90S2343__", 1, 0, 0x0060, "s2343") -AVR_MCU ("attiny22", ARCH_AVR2, "__AVR_ATtiny22__", 1, 0, 0x0060, "tn22") -AVR_MCU ("attiny26", ARCH_AVR2, "__AVR_ATtiny26__", 1, 0, 0x0060, "tn26") -AVR_MCU ("at90s4414", ARCH_AVR2, "__AVR_AT90S4414__", 0, 0, 0x0060, "s4414") -AVR_MCU ("at90s4433", ARCH_AVR2, "__AVR_AT90S4433__", 1, 0, 0x0060, "s4433") -AVR_MCU ("at90s4434", ARCH_AVR2, "__AVR_AT90S4434__", 0, 0, 0x0060, "s4434") -AVR_MCU ("at90s8515", ARCH_AVR2, "__AVR_AT90S8515__", 0, 1, 0x0060, "s8515") -AVR_MCU ("at90c8534", ARCH_AVR2, "__AVR_AT90C8534__", 0, 0, 0x0060, "c8534") -AVR_MCU ("at90s8535", ARCH_AVR2, "__AVR_AT90S8535__", 0, 0, 0x0060, "s8535") +AVR_MCU ("avr2", ARCH_AVR2, NULL, 0, 1, 0x0060, 6, "s8515") +AVR_MCU ("at90s2313", ARCH_AVR2, "__AVR_AT90S2313__", 1, 0, 0x0060, 1, "s2313") +AVR_MCU ("at90s2323", ARCH_AVR2, "__AVR_AT90S2323__", 1, 0, 0x0060, 1, "s2323") +AVR_MCU ("at90s2333", ARCH_AVR2, "__AVR_AT90S2333__", 1, 0, 0x0060, 1, "s2333") +AVR_MCU ("at90s2343", ARCH_AVR2, "__AVR_AT90S2343__", 1, 0, 0x0060, 1, "s2343") +AVR_MCU ("attiny22", ARCH_AVR2, "__AVR_ATtiny22__", 1, 0, 0x0060, 1, "tn22") +AVR_MCU ("attiny26", ARCH_AVR2, "__AVR_ATtiny26__", 1, 0, 0x0060, 1, "tn26") +AVR_MCU ("at90s4414", ARCH_AVR2, "__AVR_AT90S4414__", 0, 0, 0x0060, 1, "s4414") +AVR_MCU ("at90s4433", ARCH_AVR2, "__AVR_AT90S4433__", 1, 0, 0x0060, 1, "s4433") +AVR_MCU ("at90s4434", ARCH_AVR2, "__AVR_AT90S4434__", 0, 0, 0x0060, 1, "s4434") +AVR_MCU ("at90s8515", ARCH_AVR2, "__AVR_AT90S8515__", 0, 1, 0x0060, 1, "s8515") +AVR_MCU ("at90c8534", ARCH_AVR2, "__AVR_AT90C8534__", 0, 0, 0x0060, 1, "c8534") +AVR_MCU ("at90s8535", ARCH_AVR2, "__AVR_AT90S8535__", 0, 0, 0x0060, 1, "s8535") /* Classic + MOVW, <= 8K. */ -AVR_MCU ("avr25", ARCH_AVR25, NULL, 0, 0, 0x0060, "tn85") -AVR_MCU ("ata6289", ARCH_AVR25, "__AVR_ATA6289__", 0, 0, 0x0100, "a6289") -AVR_MCU ("attiny13", ARCH_AVR25, "__AVR_ATtiny13__", 1, 0, 0x0060, "tn13") -AVR_MCU ("attiny13a", ARCH_AVR25, "__AVR_ATtiny13A__", 1, 0, 0x0060, "tn13a") -AVR_MCU ("attiny2313", ARCH_AVR25, "__AVR_ATtiny2313__", 1, 0, 0x0060, "tn2313") -AVR_MCU ("attiny2313a", ARCH_AVR25, "__AVR_ATtiny2313A__", 1, 0, 0x0060, "tn2313a") -AVR_MCU ("attiny24", ARCH_AVR25, "__AVR_ATtiny24__", 1, 0, 0x0060, "tn24") -AVR_MCU ("attiny24a", ARCH_AVR25, "__AVR_ATtiny24A__", 1, 0, 0x0060, "tn24a") -AVR_MCU ("attiny4313", ARCH_AVR25, "__AVR_ATtiny4313__", 0, 0, 0x0060, "tn4313") -AVR_MCU ("attiny44", ARCH_AVR25, "__AVR_ATtiny44__", 0, 0, 0x0060, "tn44") -AVR_MCU ("attiny44a", ARCH_AVR25, "__AVR_ATtiny44A__", 0, 0, 0x0060, "tn44a") -AVR_MCU ("attiny84", ARCH_AVR25, "__AVR_ATtiny84__", 0, 0, 0x0060, "tn84") -AVR_MCU ("attiny84a", ARCH_AVR25, "__AVR_ATtiny84A__", 0, 0, 0x0060, "tn84") -AVR_MCU ("attiny25", ARCH_AVR25, "__AVR_ATtiny25__", 1, 0, 0x0060, "tn25") -AVR_MCU ("attiny45", ARCH_AVR25, "__AVR_ATtiny45__", 0, 0, 0x0060, "tn45") -AVR_MCU ("attiny85", ARCH_AVR25, "__AVR_ATtiny85__", 0, 0, 0x0060, "tn85") -AVR_MCU ("attiny261", ARCH_AVR25, "__AVR_ATtiny261__", 1, 0, 0x0060, "tn261") -AVR_MCU ("attiny261a", ARCH_AVR25, "__AVR_ATtiny261A__", 1, 0, 0x0060, "tn261a") -AVR_MCU ("attiny461", ARCH_AVR25, "__AVR_ATtiny461__", 0, 0, 0x0060, "tn461") -AVR_MCU ("attiny461a", ARCH_AVR25, "__AVR_ATtiny461A__", 0, 0, 0x0060, "tn461a") -AVR_MCU ("attiny861", ARCH_AVR25, "__AVR_ATtiny861__", 0, 0, 0x0060, "tn861") -AVR_MCU ("attiny861a", ARCH_AVR25, "__AVR_ATtiny861A__", 0, 0, 0x0060, "tn861a") -AVR_MCU ("attiny43u", ARCH_AVR25, "__AVR_ATtiny43U__", 0, 0, 0x0060, "tn43u") -AVR_MCU ("attiny87", ARCH_AVR25, "__AVR_ATtiny87__", 0, 0, 0x0100, "tn87") -AVR_MCU ("attiny48", ARCH_AVR25, "__AVR_ATtiny48__", 0, 0, 0x0100, "tn48") -AVR_MCU ("attiny88", ARCH_AVR25, "__AVR_ATtiny88__", 0, 0, 0x0100, "tn88") -AVR_MCU ("at86rf401", ARCH_AVR25, "__AVR_AT86RF401__", 0, 0, 0x0060, "86401") +AVR_MCU ("avr25", ARCH_AVR25, NULL, 0, 0, 0x0060, 1, "tn85") +AVR_MCU ("ata6289", ARCH_AVR25, "__AVR_ATA6289__", 0, 0, 0x0100, 1, "a6289") +AVR_MCU ("attiny13", ARCH_AVR25, "__AVR_ATtiny13__", 1, 0, 0x0060, 1, "tn13") +AVR_MCU ("attiny13a", ARCH_AVR25, "__AVR_ATtiny13A__", 1, 0, 0x0060, 1, "tn13a") +AVR_MCU ("attiny2313", ARCH_AVR25, "__AVR_ATtiny2313__", 1, 0, 0x0060, 1, "tn2313") +AVR_MCU ("attiny2313a", ARCH_AVR25, "__AVR_ATtiny2313A__", 1, 0, 0x0060, 1, "tn2313a") +AVR_MCU ("attiny24", ARCH_AVR25, "__AVR_ATtiny24__", 1, 0, 0x0060, 1, "tn24") +AVR_MCU ("attiny24a", ARCH_AVR25, "__AVR_ATtiny24A__", 1, 0, 0x0060, 1, "tn24a") +AVR_MCU ("attiny4313", ARCH_AVR25, "__AVR_ATtiny4313__", 0, 0, 0x0060, 1, "tn4313") +AVR_MCU ("attiny44", ARCH_AVR25, "__AVR_ATtiny44__", 0, 0, 0x0060, 1, "tn44") +AVR_MCU ("attiny44a", ARCH_AVR25, "__AVR_ATtiny44A__", 0, 0, 0x0060, 1, "tn44a") +AVR_MCU ("attiny84", ARCH_AVR25, "__AVR_ATtiny84__", 0, 0, 0x0060, 1, "tn84") +AVR_MCU ("attiny84a", ARCH_AVR25, "__AVR_ATtiny84A__", 0, 0, 0x0060, 1, "tn84") +AVR_MCU ("attiny25", ARCH_AVR25, "__AVR_ATtiny25__", 1, 0, 0x0060, 1, "tn25") +AVR_MCU ("attiny45", ARCH_AVR25, "__AVR_ATtiny45__", 0, 0, 0x0060, 1, "tn45") +AVR_MCU ("attiny85", ARCH_AVR25, "__AVR_ATtiny85__", 0, 0, 0x0060, 1, "tn85") +AVR_MCU ("attiny261", ARCH_AVR25, "__AVR_ATtiny261__", 1, 0, 0x0060, 1, "tn261") +AVR_MCU ("attiny261a", ARCH_AVR25, "__AVR_ATtiny261A__", 1, 0, 0x0060, 1, "tn261a") +AVR_MCU ("attiny461", ARCH_AVR25, "__AVR_ATtiny461__", 0, 0, 0x0060, 1, "tn461") +AVR_MCU ("attiny461a", ARCH_AVR25, "__AVR_ATtiny461A__", 0, 0, 0x0060, 1, "tn461a") +AVR_MCU ("attiny861", ARCH_AVR25, "__AVR_ATtiny861__", 0, 0, 0x0060, 1, "tn861") +AVR_MCU ("attiny861a", ARCH_AVR25, "__AVR_ATtiny861A__", 0, 0, 0x0060, 1, "tn861a") +AVR_MCU ("attiny43u", ARCH_AVR25, "__AVR_ATtiny43U__", 0, 0, 0x0060, 1, "tn43u") +AVR_MCU ("attiny87", ARCH_AVR25, "__AVR_ATtiny87__", 0, 0, 0x0100, 1, "tn87") +AVR_MCU ("attiny48", ARCH_AVR25, "__AVR_ATtiny48__", 0, 0, 0x0100, 1, "tn48") +AVR_MCU ("attiny88", ARCH_AVR25, "__AVR_ATtiny88__", 0, 0, 0x0100, 1, "tn88") +AVR_MCU ("at86rf401", ARCH_AVR25, "__AVR_AT86RF401__", 0, 0, 0x0060, 1, "86401") /* Classic, > 8K, <= 64K. */ -AVR_MCU ("avr3", ARCH_AVR3, NULL, 0, 0, 0x0060, "43355") -AVR_MCU ("at43usb355", ARCH_AVR3, "__AVR_AT43USB355__", 0, 0, 0x0060, "43355") -AVR_MCU ("at76c711", ARCH_AVR3, "__AVR_AT76C711__", 0, 0, 0x0060, "76711") +AVR_MCU ("avr3", ARCH_AVR3, NULL, 0, 0, 0x0060, 1, "43355") +AVR_MCU ("at43usb355", ARCH_AVR3, "__AVR_AT43USB355__", 0, 0, 0x0060, 1, "43355") +AVR_MCU ("at76c711", ARCH_AVR3, "__AVR_AT76C711__", 0, 0, 0x0060, 1, "76711") /* Classic, == 128K. */ -AVR_MCU ("avr31", ARCH_AVR31, NULL, 0, 1, 0x0060, "m103") -AVR_MCU ("atmega103", ARCH_AVR31, "__AVR_ATmega103__", 0, 1, 0x0060, "m103") -AVR_MCU ("at43usb320", ARCH_AVR31, "__AVR_AT43USB320__", 0, 0, 0x0060, "43320") +AVR_MCU ("avr31", ARCH_AVR31, NULL, 0, 1, 0x0060, 2, "m103") +AVR_MCU ("atmega103", ARCH_AVR31, "__AVR_ATmega103__", 0, 1, 0x0060, 2, "m103") +AVR_MCU ("at43usb320", ARCH_AVR31, "__AVR_AT43USB320__", 0, 0, 0x0060, 2, "43320") /* Classic + MOVW + JMP/CALL. */ -AVR_MCU ("avr35", ARCH_AVR35, NULL, 0, 0, 0x0100, "usb162") -AVR_MCU ("at90usb82", ARCH_AVR35, "__AVR_AT90USB82__", 0, 0, 0x0100, "usb82") -AVR_MCU ("at90usb162", ARCH_AVR35, "__AVR_AT90USB162__", 0, 0, 0x0100, "usb162") -AVR_MCU ("atmega8u2", ARCH_AVR35, "__AVR_ATmega8U2__", 0, 0, 0x0100, "m8u2") -AVR_MCU ("atmega16u2", ARCH_AVR35, "__AVR_ATmega16U2__", 0, 0, 0x0100, "m16u2") -AVR_MCU ("atmega32u2", ARCH_AVR35, "__AVR_ATmega32U2__", 0, 0, 0x0100, "m32u2") -AVR_MCU ("attiny167", ARCH_AVR35, "__AVR_ATtiny167__", 0, 0, 0x0100, "tn167") +AVR_MCU ("avr35", ARCH_AVR35, NULL, 0, 0, 0x0100, 1, "usb162") +AVR_MCU ("at90usb82", ARCH_AVR35, "__AVR_AT90USB82__", 0, 0, 0x0100, 1, "usb82") +AVR_MCU ("at90usb162", ARCH_AVR35, "__AVR_AT90USB162__", 0, 0, 0x0100, 1, "usb162") +AVR_MCU ("atmega8u2", ARCH_AVR35, "__AVR_ATmega8U2__", 0, 0, 0x0100, 1, "m8u2") +AVR_MCU ("atmega16u2", ARCH_AVR35, "__AVR_ATmega16U2__", 0, 0, 0x0100, 1, "m16u2") +AVR_MCU ("atmega32u2", ARCH_AVR35, "__AVR_ATmega32U2__", 0, 0, 0x0100, 1, "m32u2") +AVR_MCU ("attiny167", ARCH_AVR35, "__AVR_ATtiny167__", 0, 0, 0x0100, 1, "tn167") /* Enhanced, <= 8K. */ -AVR_MCU ("avr4", ARCH_AVR4, NULL, 0, 0, 0x0060, "m8") -AVR_MCU ("atmega8", ARCH_AVR4, "__AVR_ATmega8__", 0, 0, 0x0060, "m8") -AVR_MCU ("atmega48", ARCH_AVR4, "__AVR_ATmega48__", 0, 0, 0x0100, "m48") -AVR_MCU ("atmega48a", ARCH_AVR4, "__AVR_ATmega48A__", 0, 0, 0x0100, "m48a") -AVR_MCU ("atmega48p", ARCH_AVR4, "__AVR_ATmega48P__", 0, 0, 0x0100, "m48p") -AVR_MCU ("atmega88", ARCH_AVR4, "__AVR_ATmega88__", 0, 0, 0x0100, "m88") -AVR_MCU ("atmega88a", ARCH_AVR4, "__AVR_ATmega88A__", 0, 0, 0x0100, "m88a") -AVR_MCU ("atmega88p", ARCH_AVR4, "__AVR_ATmega88P__", 0, 0, 0x0100, "m88p") -AVR_MCU ("atmega88pa", ARCH_AVR4, "__AVR_ATmega88PA__", 0, 0, 0x0100, "m88pa") -AVR_MCU ("atmega8515", ARCH_AVR4, "__AVR_ATmega8515__", 0, 0, 0x0060, "m8515") -AVR_MCU ("atmega8535", ARCH_AVR4, "__AVR_ATmega8535__", 0, 0, 0x0060, "m8535") -AVR_MCU ("atmega8hva", ARCH_AVR4, "__AVR_ATmega8HVA__", 0, 0, 0x0100, "m8hva") -AVR_MCU ("at90pwm1", ARCH_AVR4, "__AVR_AT90PWM1__", 0, 0, 0x0100, "90pwm1") -AVR_MCU ("at90pwm2", ARCH_AVR4, "__AVR_AT90PWM2__", 0, 0, 0x0100, "90pwm2") -AVR_MCU ("at90pwm2b", ARCH_AVR4, "__AVR_AT90PWM2B__", 0, 0, 0x0100, "90pwm2b") -AVR_MCU ("at90pwm3", ARCH_AVR4, "__AVR_AT90PWM3__", 0, 0, 0x0100, "90pwm3") -AVR_MCU ("at90pwm3b", ARCH_AVR4, "__AVR_AT90PWM3B__", 0, 0, 0x0100, "90pwm3b") -AVR_MCU ("at90pwm81", ARCH_AVR4, "__AVR_AT90PWM81__", 0, 0, 0x0100, "90pwm81") +AVR_MCU ("avr4", ARCH_AVR4, NULL, 0, 0, 0x0060, 1, "m8") +AVR_MCU ("atmega8", ARCH_AVR4, "__AVR_ATmega8__", 0, 0, 0x0060, 1, "m8") +AVR_MCU ("atmega48", ARCH_AVR4, "__AVR_ATmega48__", 0, 0, 0x0100, 1, "m48") +AVR_MCU ("atmega48a", ARCH_AVR4, "__AVR_ATmega48A__", 0, 0, 0x0100, 1, "m48a") +AVR_MCU ("atmega48p", ARCH_AVR4, "__AVR_ATmega48P__", 0, 0, 0x0100, 1, "m48p") +AVR_MCU ("atmega88", ARCH_AVR4, "__AVR_ATmega88__", 0, 0, 0x0100, 1, "m88") +AVR_MCU ("atmega88a", ARCH_AVR4, "__AVR_ATmega88A__", 0, 0, 0x0100, 1, "m88a") +AVR_MCU ("atmega88p", ARCH_AVR4, "__AVR_ATmega88P__", 0, 0, 0x0100, 1, "m88p") +AVR_MCU ("atmega88pa", ARCH_AVR4, "__AVR_ATmega88PA__", 0, 0, 0x0100, 1, "m88pa") +AVR_MCU ("atmega8515", ARCH_AVR4, "__AVR_ATmega8515__", 0, 0, 0x0060, 1, "m8515") +AVR_MCU ("atmega8535", ARCH_AVR4, "__AVR_ATmega8535__", 0, 0, 0x0060, 1, "m8535") +AVR_MCU ("atmega8hva", ARCH_AVR4, "__AVR_ATmega8HVA__", 0, 0, 0x0100, 1, "m8hva") +AVR_MCU ("at90pwm1", ARCH_AVR4, "__AVR_AT90PWM1__", 0, 0, 0x0100, 1, "90pwm1") +AVR_MCU ("at90pwm2", ARCH_AVR4, "__AVR_AT90PWM2__", 0, 0, 0x0100, 1, "90pwm2") +AVR_MCU ("at90pwm2b", ARCH_AVR4, "__AVR_AT90PWM2B__", 0, 0, 0x0100, 1, "90pwm2b") +AVR_MCU ("at90pwm3", ARCH_AVR4, "__AVR_AT90PWM3__", 0, 0, 0x0100, 1, "90pwm3") +AVR_MCU ("at90pwm3b", ARCH_AVR4, "__AVR_AT90PWM3B__", 0, 0, 0x0100, 1, "90pwm3b") +AVR_MCU ("at90pwm81", ARCH_AVR4, "__AVR_AT90PWM81__", 0, 0, 0x0100, 1, "90pwm81") /* Enhanced, > 8K, <= 64K. */ -AVR_MCU ("avr5", ARCH_AVR5, NULL, 0, 0, 0x0060, "m16") -AVR_MCU ("atmega16", ARCH_AVR5, "__AVR_ATmega16__", 0, 0, 0x0060, "m16") -AVR_MCU ("atmega16a", ARCH_AVR5, "__AVR_ATmega16A__", 0, 0, 0x0060, "m16a") -AVR_MCU ("atmega161", ARCH_AVR5, "__AVR_ATmega161__", 0, 0, 0x0060, "m161") -AVR_MCU ("atmega162", ARCH_AVR5, "__AVR_ATmega162__", 0, 0, 0x0100, "m162") -AVR_MCU ("atmega163", ARCH_AVR5, "__AVR_ATmega163__", 0, 0, 0x0060, "m163") -AVR_MCU ("atmega164a", ARCH_AVR5, "__AVR_ATmega164A__", 0, 0, 0x0100, "m164a") -AVR_MCU ("atmega164p", ARCH_AVR5, "__AVR_ATmega164P__", 0, 0, 0x0100, "m164p") -AVR_MCU ("atmega165", ARCH_AVR5, "__AVR_ATmega165__", 0, 0, 0x0100, "m165") -AVR_MCU ("atmega165a", ARCH_AVR5, "__AVR_ATmega165A__", 0, 0, 0x0100, "m165a") -AVR_MCU ("atmega165p", ARCH_AVR5, "__AVR_ATmega165P__", 0, 0, 0x0100, "m165p") -AVR_MCU ("atmega168", ARCH_AVR5, "__AVR_ATmega168__", 0, 0, 0x0100, "m168") -AVR_MCU ("atmega168a", ARCH_AVR5, "__AVR_ATmega168A__", 0, 0, 0x0100, "m168a") -AVR_MCU ("atmega168p", ARCH_AVR5, "__AVR_ATmega168P__", 0, 0, 0x0100, "m168p") -AVR_MCU ("atmega169", ARCH_AVR5, "__AVR_ATmega169__", 0, 0, 0x0100, "m169") -AVR_MCU ("atmega169a", ARCH_AVR5, "__AVR_ATmega169A__", 0, 0, 0x0100, "m169a") -AVR_MCU ("atmega169p", ARCH_AVR5, "__AVR_ATmega169P__", 0, 0, 0x0100, "m169p") -AVR_MCU ("atmega169pa", ARCH_AVR5, "__AVR_ATmega169PA__", 0, 0, 0x0100, "m169pa") -AVR_MCU ("atmega32", ARCH_AVR5, "__AVR_ATmega32__", 0, 0, 0x0060, "m32") -AVR_MCU ("atmega323", ARCH_AVR5, "__AVR_ATmega323__", 0, 0, 0x0060, "m323") -AVR_MCU ("atmega324a", ARCH_AVR5, "__AVR_ATmega324A__", 0, 0, 0x0100, "m324a") -AVR_MCU ("atmega324p", ARCH_AVR5, "__AVR_ATmega324P__", 0, 0, 0x0100, "m324p") -AVR_MCU ("atmega324pa", ARCH_AVR5, "__AVR_ATmega324PA__", 0, 0, 0x0100, "m324pa") -AVR_MCU ("atmega325", ARCH_AVR5, "__AVR_ATmega325__", 0, 0, 0x0100, "m325") -AVR_MCU ("atmega325a", ARCH_AVR5, "__AVR_ATmega325A__", 0, 0, 0x0100, "m325a") -AVR_MCU ("atmega325p", ARCH_AVR5, "__AVR_ATmega325P__", 0, 0, 0x0100, "m325p") -AVR_MCU ("atmega3250", ARCH_AVR5, "__AVR_ATmega3250__", 0, 0, 0x0100, "m3250") -AVR_MCU ("atmega3250a", ARCH_AVR5, "__AVR_ATmega3250A__", 0, 0, 0x0100, "m3250a") -AVR_MCU ("atmega3250p", ARCH_AVR5, "__AVR_ATmega3250P__", 0, 0, 0x0100, "m3250p") -AVR_MCU ("atmega328", ARCH_AVR5, "__AVR_ATmega328__", 0, 0, 0x0100, "m328") -AVR_MCU ("atmega328p", ARCH_AVR5, "__AVR_ATmega328P__", 0, 0, 0x0100, "m328p") -AVR_MCU ("atmega329", ARCH_AVR5, "__AVR_ATmega329__", 0, 0, 0x0100, "m329") -AVR_MCU ("atmega329a", ARCH_AVR5, "__AVR_ATmega329A__", 0, 0, 0x0100, "m329a") -AVR_MCU ("atmega329p", ARCH_AVR5, "__AVR_ATmega329P__", 0, 0, 0x0100, "m329p") -AVR_MCU ("atmega329pa", ARCH_AVR5, "__AVR_ATmega329PA__", 0, 0, 0x0100, "m329pa") -AVR_MCU ("atmega3290", ARCH_AVR5, "__AVR_ATmega3290__", 0, 0, 0x0100, "m3290") -AVR_MCU ("atmega3290a", ARCH_AVR5, "__AVR_ATmega3290A__", 0, 0, 0x0100, "m3290a") -AVR_MCU ("atmega3290p", ARCH_AVR5, "__AVR_ATmega3290P__", 0, 0, 0x0100, "m3290p") -AVR_MCU ("atmega406", ARCH_AVR5, "__AVR_ATmega406__", 0, 0, 0x0100, "m406") -AVR_MCU ("atmega64", ARCH_AVR5, "__AVR_ATmega64__", 0, 0, 0x0100, "m64") -AVR_MCU ("atmega640", ARCH_AVR5, "__AVR_ATmega640__", 0, 0, 0x0200, "m640") -AVR_MCU ("atmega644", ARCH_AVR5, "__AVR_ATmega644__", 0, 0, 0x0100, "m644") -AVR_MCU ("atmega644a", ARCH_AVR5, "__AVR_ATmega644A__", 0, 0, 0x0100, "m644a") -AVR_MCU ("atmega644p", ARCH_AVR5, "__AVR_ATmega644P__", 0, 0, 0x0100, "m644p") -AVR_MCU ("atmega644pa", ARCH_AVR5, "__AVR_ATmega644PA__", 0, 0, 0x0100, "m644pa") -AVR_MCU ("atmega645", ARCH_AVR5, "__AVR_ATmega645__", 0, 0, 0x0100, "m645") -AVR_MCU ("atmega645a", ARCH_AVR5, "__AVR_ATmega645A__", 0, 0, 0x0100, "m645a") -AVR_MCU ("atmega645p", ARCH_AVR5, "__AVR_ATmega645P__", 0, 0, 0x0100, "m645p") -AVR_MCU ("atmega6450", ARCH_AVR5, "__AVR_ATmega6450__", 0, 0, 0x0100, "m6450") -AVR_MCU ("atmega6450a", ARCH_AVR5, "__AVR_ATmega6450A__", 0, 0, 0x0100, "m6450a") -AVR_MCU ("atmega6450p", ARCH_AVR5, "__AVR_ATmega6450P__", 0, 0, 0x0100, "m6450p") -AVR_MCU ("atmega649", ARCH_AVR5, "__AVR_ATmega649__", 0, 0, 0x0100, "m649") -AVR_MCU ("atmega649a", ARCH_AVR5, "__AVR_ATmega649A__", 0, 0, 0x0100, "m649a") -AVR_MCU ("atmega649p", ARCH_AVR5, "__AVR_ATmega649P__", 0, 0, 0x0100, "m649p") -AVR_MCU ("atmega6490", ARCH_AVR5, "__AVR_ATmega6490__", 0, 0, 0x0100, "m6490") -AVR_MCU ("atmega16hva", ARCH_AVR5, "__AVR_ATmega16HVA__", 0, 0, 0x0100, "m16hva") -AVR_MCU ("atmega16hva2", ARCH_AVR5, "__AVR_ATmega16HVA2__", 0, 0, 0x0100, "m16hva2") -AVR_MCU ("atmega16hvb", ARCH_AVR5, "__AVR_ATmega16HVB__", 0, 0, 0x0100, "m16hvb") -AVR_MCU ("atmega32hvb", ARCH_AVR5, "__AVR_ATmega32HVB__", 0, 0, 0x0100, "m32hvb") -AVR_MCU ("atmega64hve", ARCH_AVR5, "__AVR_ATmega64HVE__", 0, 0, 0x0100, "m64hve") -AVR_MCU ("at90can32", ARCH_AVR5, "__AVR_AT90CAN32__", 0, 0, 0x0100, "can32") -AVR_MCU ("at90can64", ARCH_AVR5, "__AVR_AT90CAN64__", 0, 0, 0x0100, "can64") -AVR_MCU ("at90pwm216", ARCH_AVR5, "__AVR_AT90PWM216__", 0, 0, 0x0100, "90pwm216") -AVR_MCU ("at90pwm316", ARCH_AVR5, "__AVR_AT90PWM316__", 0, 0, 0x0100, "90pwm316") -AVR_MCU ("atmega32c1", ARCH_AVR5, "__AVR_ATmega32C1__", 0, 0, 0x0100, "m32c1") -AVR_MCU ("atmega64c1", ARCH_AVR5, "__AVR_ATmega64C1__", 0, 0, 0x0100, "m64c1") -AVR_MCU ("atmega16m1", ARCH_AVR5, "__AVR_ATmega16M1__", 0, 0, 0x0100, "m16m1") -AVR_MCU ("atmega32m1", ARCH_AVR5, "__AVR_ATmega32M1__", 0, 0, 0x0100, "m32m1") -AVR_MCU ("atmega64m1", ARCH_AVR5, "__AVR_ATmega64M1__", 0, 0, 0x0100, "m64m1") -AVR_MCU ("atmega16u4", ARCH_AVR5, "__AVR_ATmega16U4__", 0, 0, 0x0100, "m16u4") -AVR_MCU ("atmega32u4", ARCH_AVR5, "__AVR_ATmega32U4__", 0, 0, 0x0100, "m32u4") -AVR_MCU ("atmega32u6", ARCH_AVR5, "__AVR_ATmega32U6__", 0, 0, 0x0100, "m32u6") -AVR_MCU ("at90scr100", ARCH_AVR5, "__AVR_AT90SCR100__", 0, 0, 0x0100, "90scr100") -AVR_MCU ("at90usb646", ARCH_AVR5, "__AVR_AT90USB646__", 0, 0, 0x0100, "usb646") -AVR_MCU ("at90usb647", ARCH_AVR5, "__AVR_AT90USB647__", 0, 0, 0x0100, "usb647") -AVR_MCU ("at94k", ARCH_AVR5, "__AVR_AT94K__", 0, 0, 0x0060, "at94k") -AVR_MCU ("m3000", ARCH_AVR5, "__AVR_M3000__", 0, 0, 0x1000, "m3000") +AVR_MCU ("avr5", ARCH_AVR5, NULL, 0, 0, 0x0060, 1, "m16") +AVR_MCU ("atmega16", ARCH_AVR5, "__AVR_ATmega16__", 0, 0, 0x0060, 1, "m16") +AVR_MCU ("atmega16a", ARCH_AVR5, "__AVR_ATmega16A__", 0, 0, 0x0060, 1, "m16a") +AVR_MCU ("atmega161", ARCH_AVR5, "__AVR_ATmega161__", 0, 0, 0x0060, 1, "m161") +AVR_MCU ("atmega162", ARCH_AVR5, "__AVR_ATmega162__", 0, 0, 0x0100, 1, "m162") +AVR_MCU ("atmega163", ARCH_AVR5, "__AVR_ATmega163__", 0, 0, 0x0060, 1, "m163") +AVR_MCU ("atmega164a", ARCH_AVR5, "__AVR_ATmega164A__", 0, 0, 0x0100, 1, "m164a") +AVR_MCU ("atmega164p", ARCH_AVR5, "__AVR_ATmega164P__", 0, 0, 0x0100, 1, "m164p") +AVR_MCU ("atmega165", ARCH_AVR5, "__AVR_ATmega165__", 0, 0, 0x0100, 1, "m165") +AVR_MCU ("atmega165a", ARCH_AVR5, "__AVR_ATmega165A__", 0, 0, 0x0100, 1, "m165a") +AVR_MCU ("atmega165p", ARCH_AVR5, "__AVR_ATmega165P__", 0, 0, 0x0100, 1, "m165p") +AVR_MCU ("atmega168", ARCH_AVR5, "__AVR_ATmega168__", 0, 0, 0x0100, 1, "m168") +AVR_MCU ("atmega168a", ARCH_AVR5, "__AVR_ATmega168A__", 0, 0, 0x0100, 1, "m168a") +AVR_MCU ("atmega168p", ARCH_AVR5, "__AVR_ATmega168P__", 0, 0, 0x0100, 1, "m168p") +AVR_MCU ("atmega169", ARCH_AVR5, "__AVR_ATmega169__", 0, 0, 0x0100, 1, "m169") +AVR_MCU ("atmega169a", ARCH_AVR5, "__AVR_ATmega169A__", 0, 0, 0x0100, 1, "m169a") +AVR_MCU ("atmega169p", ARCH_AVR5, "__AVR_ATmega169P__", 0, 0, 0x0100, 1, "m169p") +AVR_MCU ("atmega169pa", ARCH_AVR5, "__AVR_ATmega169PA__", 0, 0, 0x0100, 1, "m169pa") +AVR_MCU ("atmega32", ARCH_AVR5, "__AVR_ATmega32__", 0, 0, 0x0060, 1, "m32") +AVR_MCU ("atmega323", ARCH_AVR5, "__AVR_ATmega323__", 0, 0, 0x0060, 1, "m323") +AVR_MCU ("atmega324a", ARCH_AVR5, "__AVR_ATmega324A__", 0, 0, 0x0100, 1, "m324a") +AVR_MCU ("atmega324p", ARCH_AVR5, "__AVR_ATmega324P__", 0, 0, 0x0100, 1, "m324p") +AVR_MCU ("atmega324pa", ARCH_AVR5, "__AVR_ATmega324PA__", 0, 0, 0x0100, 1, "m324pa") +AVR_MCU ("atmega325", ARCH_AVR5, "__AVR_ATmega325__", 0, 0, 0x0100, 1, "m325") +AVR_MCU ("atmega325a", ARCH_AVR5, "__AVR_ATmega325A__", 0, 0, 0x0100, 1, "m325a") +AVR_MCU ("atmega325p", ARCH_AVR5, "__AVR_ATmega325P__", 0, 0, 0x0100, 1, "m325p") +AVR_MCU ("atmega3250", ARCH_AVR5, "__AVR_ATmega3250__", 0, 0, 0x0100, 1, "m3250") +AVR_MCU ("atmega3250a", ARCH_AVR5, "__AVR_ATmega3250A__", 0, 0, 0x0100, 1, "m3250a") +AVR_MCU ("atmega3250p", ARCH_AVR5, "__AVR_ATmega3250P__", 0, 0, 0x0100, 1, "m3250p") +AVR_MCU ("atmega328", ARCH_AVR5, "__AVR_ATmega328__", 0, 0, 0x0100, 1, "m328") +AVR_MCU ("atmega328p", ARCH_AVR5, "__AVR_ATmega328P__", 0, 0, 0x0100, 1, "m328p") +AVR_MCU ("atmega329", ARCH_AVR5, "__AVR_ATmega329__", 0, 0, 0x0100, 1, "m329") +AVR_MCU ("atmega329a", ARCH_AVR5, "__AVR_ATmega329A__", 0, 0, 0x0100, 1, "m329a") +AVR_MCU ("atmega329p", ARCH_AVR5, "__AVR_ATmega329P__", 0, 0, 0x0100, 1, "m329p") +AVR_MCU ("atmega329pa", ARCH_AVR5, "__AVR_ATmega329PA__", 0, 0, 0x0100, 1, "m329pa") +AVR_MCU ("atmega3290", ARCH_AVR5, "__AVR_ATmega3290__", 0, 0, 0x0100, 1, "m3290") +AVR_MCU ("atmega3290a", ARCH_AVR5, "__AVR_ATmega3290A__", 0, 0, 0x0100, 1, "m3290a") +AVR_MCU ("atmega3290p", ARCH_AVR5, "__AVR_ATmega3290P__", 0, 0, 0x0100, 1, "m3290p") +AVR_MCU ("atmega406", ARCH_AVR5, "__AVR_ATmega406__", 0, 0, 0x0100, 1, "m406") +AVR_MCU ("atmega64", ARCH_AVR5, "__AVR_ATmega64__", 0, 0, 0x0100, 1, "m64") +AVR_MCU ("atmega640", ARCH_AVR5, "__AVR_ATmega640__", 0, 0, 0x0200, 1, "m640") +AVR_MCU ("atmega644", ARCH_AVR5, "__AVR_ATmega644__", 0, 0, 0x0100, 1, "m644") +AVR_MCU ("atmega644a", ARCH_AVR5, "__AVR_ATmega644A__", 0, 0, 0x0100, 1, "m644a") +AVR_MCU ("atmega644p", ARCH_AVR5, "__AVR_ATmega644P__", 0, 0, 0x0100, 1, "m644p") +AVR_MCU ("atmega644pa", ARCH_AVR5, "__AVR_ATmega644PA__", 0, 0, 0x0100, 1, "m644pa") +AVR_MCU ("atmega645", ARCH_AVR5, "__AVR_ATmega645__", 0, 0, 0x0100, 1, "m645") +AVR_MCU ("atmega645a", ARCH_AVR5, "__AVR_ATmega645A__", 0, 0, 0x0100, 1, "m645a") +AVR_MCU ("atmega645p", ARCH_AVR5, "__AVR_ATmega645P__", 0, 0, 0x0100, 1, "m645p") +AVR_MCU ("atmega6450", ARCH_AVR5, "__AVR_ATmega6450__", 0, 0, 0x0100, 1, "m6450") +AVR_MCU ("atmega6450a", ARCH_AVR5, "__AVR_ATmega6450A__", 0, 0, 0x0100, 1, "m6450a") +AVR_MCU ("atmega6450p", ARCH_AVR5, "__AVR_ATmega6450P__", 0, 0, 0x0100, 1, "m6450p") +AVR_MCU ("atmega649", ARCH_AVR5, "__AVR_ATmega649__", 0, 0, 0x0100, 1, "m649") +AVR_MCU ("atmega649a", ARCH_AVR5, "__AVR_ATmega649A__", 0, 0, 0x0100, 1, "m649a") +AVR_MCU ("atmega649p", ARCH_AVR5, "__AVR_ATmega649P__", 0, 0, 0x0100, 1, "m649p") +AVR_MCU ("atmega6490", ARCH_AVR5, "__AVR_ATmega6490__", 0, 0, 0x0100, 1, "m6490") +AVR_MCU ("atmega16hva", ARCH_AVR5, "__AVR_ATmega16HVA__", 0, 0, 0x0100, 1, "m16hva") +AVR_MCU ("atmega16hva2", ARCH_AVR5, "__AVR_ATmega16HVA2__", 0, 0, 0x0100, 1, "m16hva2") +AVR_MCU ("atmega16hvb", ARCH_AVR5, "__AVR_ATmega16HVB__", 0, 0, 0x0100, 1, "m16hvb") +AVR_MCU ("atmega32hvb", ARCH_AVR5, "__AVR_ATmega32HVB__", 0, 0, 0x0100, 1, "m32hvb") +AVR_MCU ("atmega64hve", ARCH_AVR5, "__AVR_ATmega64HVE__", 0, 0, 0x0100, 1, "m64hve") +AVR_MCU ("at90can32", ARCH_AVR5, "__AVR_AT90CAN32__", 0, 0, 0x0100, 1, "can32") +AVR_MCU ("at90can64", ARCH_AVR5, "__AVR_AT90CAN64__", 0, 0, 0x0100, 1, "can64") +AVR_MCU ("at90pwm216", ARCH_AVR5, "__AVR_AT90PWM216__", 0, 0, 0x0100, 1, "90pwm216") +AVR_MCU ("at90pwm316", ARCH_AVR5, "__AVR_AT90PWM316__", 0, 0, 0x0100, 1, "90pwm316") +AVR_MCU ("atmega32c1", ARCH_AVR5, "__AVR_ATmega32C1__", 0, 0, 0x0100, 1, "m32c1") +AVR_MCU ("atmega64c1", ARCH_AVR5, "__AVR_ATmega64C1__", 0, 0, 0x0100, 1, "m64c1") +AVR_MCU ("atmega16m1", ARCH_AVR5, "__AVR_ATmega16M1__", 0, 0, 0x0100, 1, "m16m1") +AVR_MCU ("atmega32m1", ARCH_AVR5, "__AVR_ATmega32M1__", 0, 0, 0x0100, 1, "m32m1") +AVR_MCU ("atmega64m1", ARCH_AVR5, "__AVR_ATmega64M1__", 0, 0, 0x0100, 1, "m64m1") +AVR_MCU ("atmega16u4", ARCH_AVR5, "__AVR_ATmega16U4__", 0, 0, 0x0100, 1, "m16u4") +AVR_MCU ("atmega32u4", ARCH_AVR5, "__AVR_ATmega32U4__", 0, 0, 0x0100, 1, "m32u4") +AVR_MCU ("atmega32u6", ARCH_AVR5, "__AVR_ATmega32U6__", 0, 0, 0x0100, 1, "m32u6") +AVR_MCU ("at90scr100", ARCH_AVR5, "__AVR_AT90SCR100__", 0, 0, 0x0100, 1, "90scr100") +AVR_MCU ("at90usb646", ARCH_AVR5, "__AVR_AT90USB646__", 0, 0, 0x0100, 1, "usb646") +AVR_MCU ("at90usb647", ARCH_AVR5, "__AVR_AT90USB647__", 0, 0, 0x0100, 1, "usb647") +AVR_MCU ("at94k", ARCH_AVR5, "__AVR_AT94K__", 0, 0, 0x0060, 1, "at94k") +AVR_MCU ("m3000", ARCH_AVR5, "__AVR_M3000__", 0, 0, 0x1000, 1, "m3000") /* Enhanced, == 128K. */ -AVR_MCU ("avr51", ARCH_AVR51, NULL, 0, 0, 0x0100, "m128") -AVR_MCU ("atmega128", ARCH_AVR51, "__AVR_ATmega128__", 0, 0, 0x0100, "m128") -AVR_MCU ("atmega1280", ARCH_AVR51, "__AVR_ATmega1280__", 0, 0, 0x0200, "m1280") -AVR_MCU ("atmega1281", ARCH_AVR51, "__AVR_ATmega1281__", 0, 0, 0x0200, "m1281") -AVR_MCU ("atmega1284p", ARCH_AVR51, "__AVR_ATmega1284P__", 0, 0, 0x0100, "m1284p") -AVR_MCU ("atmega128rfa1", ARCH_AVR51, "__AVR_ATmega128RFA1__", 0, 0, 0x0200, "m128rfa1") -AVR_MCU ("at90can128", ARCH_AVR51, "__AVR_AT90CAN128__", 0, 0, 0x0100, "can128") -AVR_MCU ("at90usb1286", ARCH_AVR51, "__AVR_AT90USB1286__", 0, 0, 0x0100, "usb1286") -AVR_MCU ("at90usb1287", ARCH_AVR51, "__AVR_AT90USB1287__", 0, 0, 0x0100, "usb1286") +AVR_MCU ("avr51", ARCH_AVR51, NULL, 0, 0, 0x0100, 2, "m128") +AVR_MCU ("atmega128", ARCH_AVR51, "__AVR_ATmega128__", 0, 0, 0x0100, 2, "m128") +AVR_MCU ("atmega1280", ARCH_AVR51, "__AVR_ATmega1280__", 0, 0, 0x0200, 2, "m1280") +AVR_MCU ("atmega1281", ARCH_AVR51, "__AVR_ATmega1281__", 0, 0, 0x0200, 2, "m1281") +AVR_MCU ("atmega1284p", ARCH_AVR51, "__AVR_ATmega1284P__", 0, 0, 0x0100, 2, "m1284p") +AVR_MCU ("atmega128rfa1", ARCH_AVR51, "__AVR_ATmega128RFA1__", 0, 0, 0x0200, 2, "m128rfa1") +AVR_MCU ("at90can128", ARCH_AVR51, "__AVR_AT90CAN128__", 0, 0, 0x0100, 2, "can128") +AVR_MCU ("at90usb1286", ARCH_AVR51, "__AVR_AT90USB1286__", 0, 0, 0x0100, 2, "usb1286") +AVR_MCU ("at90usb1287", ARCH_AVR51, "__AVR_AT90USB1287__", 0, 0, 0x0100, 2, "usb1286") /* 3-Byte PC. */ -AVR_MCU ("avr6", ARCH_AVR6, NULL, 0, 0, 0x0200, "m2561") -AVR_MCU ("atmega2560", ARCH_AVR6, "__AVR_ATmega2560__", 0, 0, 0x0200, "m2560") -AVR_MCU ("atmega2561", ARCH_AVR6, "__AVR_ATmega2561__", 0, 0, 0x0200, "m2561") +AVR_MCU ("avr6", ARCH_AVR6, NULL, 0, 0, 0x0200, 4, "m2561") +AVR_MCU ("atmega2560", ARCH_AVR6, "__AVR_ATmega2560__", 0, 0, 0x0200, 4, "m2560") +AVR_MCU ("atmega2561", ARCH_AVR6, "__AVR_ATmega2561__", 0, 0, 0x0200, 4, "m2561") /* Xmega, 16K <= Flash < 64K, RAM <= 64K */ -AVR_MCU ("avrxmega2", ARCH_AVRXMEGA2, NULL, 0, 0, 0x2000, "x32a4") -AVR_MCU ("atxmega16a4", ARCH_AVRXMEGA2, "__AVR_ATxmega16A4__", 0, 0, 0x2000, "x16a4") -AVR_MCU ("atxmega16d4", ARCH_AVRXMEGA2, "__AVR_ATxmega16D4__", 0, 0, 0x2000, "x16d4") -AVR_MCU ("atxmega16x1", ARCH_AVRXMEGA2, "__AVR_ATxmega16X1__", 0, 0, 0x2000, "x16x1") -AVR_MCU ("atxmega32a4", ARCH_AVRXMEGA2, "__AVR_ATxmega32A4__", 0, 0, 0x2000, "x32a4") -AVR_MCU ("atxmega32d4", ARCH_AVRXMEGA2, "__AVR_ATxmega32D4__", 0, 0, 0x2000, "x32d4") -AVR_MCU ("atxmega32x1", ARCH_AVRXMEGA2, "__AVR_ATxmega32X1__", 0, 0, 0x2000, "x32x1") -/* Xmega, Flash == 64K, RAM <= 64K */ -AVR_MCU ("avrxmega4", ARCH_AVRXMEGA4, NULL, 0, 0, 0x2000, "x64a4") -AVR_MCU ("atxmega64a3", ARCH_AVRXMEGA4, "__AVR_ATxmega64A3__", 0, 0, 0x2000, "x64a3") -AVR_MCU ("atxmega64d3", ARCH_AVRXMEGA4, "__AVR_ATxmega64D3__", 0, 0, 0x2000, "x64d3") -/* Xmega, Flash == 64K, RAM > 64K */ -AVR_MCU ("avrxmega5", ARCH_AVRXMEGA5, NULL, 0, 0, 0x2000, "x64a1") -AVR_MCU ("atxmega64a1", ARCH_AVRXMEGA5, "__AVR_ATxmega64A1__", 0, 0, 0x2000, "x64a1") -AVR_MCU ("atxmega64a1u", ARCH_AVRXMEGA5, "__AVR_ATxmega64A1U__", 0, 0, 0x2000, "x64a1u") -/* Xmega, 128K <= Flash <= 256K, RAM <= 64K */ -AVR_MCU ("avrxmega6", ARCH_AVRXMEGA6, NULL, 0, 0, 0x2000, "x128a3") -AVR_MCU ("atxmega128a3", ARCH_AVRXMEGA6, "__AVR_ATxmega128A3__", 0, 0, 0x2000, "x128a3") -AVR_MCU ("atxmega128d3", ARCH_AVRXMEGA6, "__AVR_ATxmega128D3__", 0, 0, 0x2000, "x128d3") -AVR_MCU ("atxmega192a3", ARCH_AVRXMEGA6, "__AVR_ATxmega192A3__", 0, 0, 0x2000, "x192a3") -AVR_MCU ("atxmega192d3", ARCH_AVRXMEGA6, "__AVR_ATxmega192D3__", 0, 0, 0x2000, "x192d3") -AVR_MCU ("atxmega256a3", ARCH_AVRXMEGA6, "__AVR_ATxmega256A3__", 0, 0, 0x2000, "x256a3") -AVR_MCU ("atxmega256a3b", ARCH_AVRXMEGA6, "__AVR_ATxmega256A3B__", 0, 0, 0x2000, "x256a3b") -AVR_MCU ("atxmega256a3bu", ARCH_AVRXMEGA6, "__AVR_ATxmega256A3BU__", 0, 0, 0x2000, "x256a3bu") -AVR_MCU ("atxmega256d3", ARCH_AVRXMEGA6, "__AVR_ATxmega256D3__", 0, 0, 0x2000, "x256d3") -/* Xmega, 128K <= Flash <= 256K, RAM > 64K RAM. */ -AVR_MCU ("avrxmega7", ARCH_AVRXMEGA7, NULL, 0, 0, 0x2000, "x128a1") -AVR_MCU ("atxmega128a1", ARCH_AVRXMEGA7, "__AVR_ATxmega128A1__", 0, 0, 0x2000, "x128a1") -AVR_MCU ("atxmega128a1u", ARCH_AVRXMEGA7, "__AVR_ATxmega128A1U__", 0, 0, 0x2000, "x128a1u") +AVR_MCU ("avrxmega2", ARCH_AVRXMEGA2, NULL, 0, 0, 0x2000, 1, "x32a4") +AVR_MCU ("atxmega16a4", ARCH_AVRXMEGA2, "__AVR_ATxmega16A4__", 0, 0, 0x2000, 1, "x16a4") +AVR_MCU ("atxmega16d4", ARCH_AVRXMEGA2, "__AVR_ATxmega16D4__", 0, 0, 0x2000, 1, "x16d4") +AVR_MCU ("atxmega16x1", ARCH_AVRXMEGA2, "__AVR_ATxmega16X1__", 0, 0, 0x2000, 1, "x16x1") +AVR_MCU ("atxmega32a4", ARCH_AVRXMEGA2, "__AVR_ATxmega32A4__", 0, 0, 0x2000, 1, "x32a4") +AVR_MCU ("atxmega32d4", ARCH_AVRXMEGA2, "__AVR_ATxmega32D4__", 0, 0, 0x2000, 1, "x32d4") +AVR_MCU ("atxmega32x1", ARCH_AVRXMEGA2, "__AVR_ATxmega32X1__", 0, 0, 0x2000, 1, "x32x1") +/* Xmega, 64K < Flash <= 128K, RAM <= 64K */ +AVR_MCU ("avrxmega4", ARCH_AVRXMEGA4, NULL, 0, 0, 0x2000, 2, "x64a4") +AVR_MCU ("atxmega64a3", ARCH_AVRXMEGA4, "__AVR_ATxmega64A3__", 0, 0, 0x2000, 2, "x64a3") +AVR_MCU ("atxmega64d3", ARCH_AVRXMEGA4, "__AVR_ATxmega64D3__", 0, 0, 0x2000, 2, "x64d3") +/* Xmega, 64K < Flash <= 128K, RAM > 64K */ +AVR_MCU ("avrxmega5", ARCH_AVRXMEGA5, NULL, 0, 0, 0x2000, 2, "x64a1") +AVR_MCU ("atxmega64a1", ARCH_AVRXMEGA5, "__AVR_ATxmega64A1__", 0, 0, 0x2000, 2, "x64a1") +AVR_MCU ("atxmega64a1u", ARCH_AVRXMEGA5, "__AVR_ATxmega64A1U__", 0, 0, 0x2000, 2, "x64a1u") +/* Xmega, 128K < Flash, RAM <= 64K */ +AVR_MCU ("avrxmega6", ARCH_AVRXMEGA6, NULL, 0, 0, 0x2000, 5, "x128a3") +AVR_MCU ("atxmega128a3", ARCH_AVRXMEGA6, "__AVR_ATxmega128A3__", 0, 0, 0x2000, 3, "x128a3") +AVR_MCU ("atxmega128d3", ARCH_AVRXMEGA6, "__AVR_ATxmega128D3__", 0, 0, 0x2000, 3, "x128d3") +AVR_MCU ("atxmega192a3", ARCH_AVRXMEGA6, "__AVR_ATxmega192A3__", 0, 0, 0x2000, 4, "x192a3") +AVR_MCU ("atxmega192d3", ARCH_AVRXMEGA6, "__AVR_ATxmega192D3__", 0, 0, 0x2000, 4, "x192d3") +AVR_MCU ("atxmega256a3", ARCH_AVRXMEGA6, "__AVR_ATxmega256A3__", 0, 0, 0x2000, 5, "x256a3") +AVR_MCU ("atxmega256a3b", ARCH_AVRXMEGA6, "__AVR_ATxmega256A3B__", 0, 0, 0x2000, 5, "x256a3b") +AVR_MCU ("atxmega256a3bu", ARCH_AVRXMEGA6, "__AVR_ATxmega256A3BU__", 0, 0, 0x2000, 5, "x256a3bu") +AVR_MCU ("atxmega256d3", ARCH_AVRXMEGA6, "__AVR_ATxmega256D3__", 0, 0, 0x2000, 5, "x256d3") +/* Xmega, 128K < Flash, RAM > 64K RAM. */ +AVR_MCU ("avrxmega7", ARCH_AVRXMEGA7, NULL, 0, 0, 0x2000, 3, "x128a1") +AVR_MCU ("atxmega128a1", ARCH_AVRXMEGA7, "__AVR_ATxmega128A1__", 0, 0, 0x2000, 3, "x128a1") +AVR_MCU ("atxmega128a1u", ARCH_AVRXMEGA7, "__AVR_ATxmega128A1U__", 0, 0, 0x2000, 3, "x128a1u") /* Assembler only. */ -AVR_MCU ("avr1", ARCH_AVR1, NULL, 0, 0, 0x0060, "s1200") -AVR_MCU ("at90s1200", ARCH_AVR1, "__AVR_AT90S1200__", 0, 0, 0x0060, "s1200") -AVR_MCU ("attiny11", ARCH_AVR1, "__AVR_ATtiny11__", 0, 0, 0x0060, "tn11") -AVR_MCU ("attiny12", ARCH_AVR1, "__AVR_ATtiny12__", 0, 0, 0x0060, "tn12") -AVR_MCU ("attiny15", ARCH_AVR1, "__AVR_ATtiny15__", 0, 0, 0x0060, "tn15") -AVR_MCU ("attiny28", ARCH_AVR1, "__AVR_ATtiny28__", 0, 0, 0x0060, "tn28") +AVR_MCU ("avr1", ARCH_AVR1, NULL, 0, 0, 0x0060, 1, "s1200") +AVR_MCU ("at90s1200", ARCH_AVR1, "__AVR_AT90S1200__", 0, 0, 0x0060, 1, "s1200") +AVR_MCU ("attiny11", ARCH_AVR1, "__AVR_ATtiny11__", 0, 0, 0x0060, 1, "tn11") +AVR_MCU ("attiny12", ARCH_AVR1, "__AVR_ATtiny12__", 0, 0, 0x0060, 1, "tn12") +AVR_MCU ("attiny15", ARCH_AVR1, "__AVR_ATtiny15__", 0, 0, 0x0060, 1, "tn15") +AVR_MCU ("attiny28", ARCH_AVR1, "__AVR_ATtiny28__", 0, 0, 0x0060, 1, "tn28") diff --git a/gcc/config/avr/avr-protos.h b/gcc/config/avr/avr-protos.h index fa8c421addc..f9e893d14f9 100644 --- a/gcc/config/avr/avr-protos.h +++ b/gcc/config/avr/avr-protos.h @@ -33,7 +33,6 @@ extern int avr_simple_epilogue (void); extern int avr_hard_regno_rename_ok (unsigned int, unsigned int); extern rtx avr_return_addr_rtx (int count, rtx tem); extern void avr_register_target_pragmas (void); -extern bool avr_accumulate_outgoing_args (void); extern void avr_init_expanders (void); #ifdef TREE_CODE @@ -84,7 +83,6 @@ extern bool avr_emit_movmemhi (rtx*); extern int avr_epilogue_uses (int regno); extern int avr_starting_frame_offset (void); -extern void avr_output_bld (rtx operands[], int bit_nr); extern void avr_output_addr_vec_elt (FILE *stream, int value); extern const char *avr_out_sbxx_branch (rtx insn, rtx operands[]); extern const char* avr_out_bitop (rtx, rtx*, int*); diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index 8a0d69ae3ea..e52c5d85f6b 100644 --- a/gcc/config/avr/avr.c +++ b/gcc/config/avr/avr.c @@ -225,137 +225,6 @@ bool avr_need_clear_bss_p = false; bool avr_need_copy_data_p = false; -/* Initialize the GCC target structure. */ -#undef TARGET_ASM_ALIGNED_HI_OP -#define TARGET_ASM_ALIGNED_HI_OP "\t.word\t" -#undef TARGET_ASM_ALIGNED_SI_OP -#define TARGET_ASM_ALIGNED_SI_OP "\t.long\t" -#undef TARGET_ASM_UNALIGNED_HI_OP -#define TARGET_ASM_UNALIGNED_HI_OP "\t.word\t" -#undef TARGET_ASM_UNALIGNED_SI_OP -#define TARGET_ASM_UNALIGNED_SI_OP "\t.long\t" -#undef TARGET_ASM_INTEGER -#define TARGET_ASM_INTEGER avr_assemble_integer -#undef TARGET_ASM_FILE_START -#define TARGET_ASM_FILE_START avr_file_start -#undef TARGET_ASM_FILE_END -#define TARGET_ASM_FILE_END avr_file_end - -#undef TARGET_ASM_FUNCTION_END_PROLOGUE -#define TARGET_ASM_FUNCTION_END_PROLOGUE avr_asm_function_end_prologue -#undef TARGET_ASM_FUNCTION_BEGIN_EPILOGUE -#define TARGET_ASM_FUNCTION_BEGIN_EPILOGUE avr_asm_function_begin_epilogue - -#undef TARGET_FUNCTION_VALUE -#define TARGET_FUNCTION_VALUE avr_function_value -#undef TARGET_LIBCALL_VALUE -#define TARGET_LIBCALL_VALUE avr_libcall_value -#undef TARGET_FUNCTION_VALUE_REGNO_P -#define TARGET_FUNCTION_VALUE_REGNO_P avr_function_value_regno_p - -#undef TARGET_ATTRIBUTE_TABLE -#define TARGET_ATTRIBUTE_TABLE avr_attribute_table -#undef TARGET_INSERT_ATTRIBUTES -#define TARGET_INSERT_ATTRIBUTES avr_insert_attributes -#undef TARGET_SECTION_TYPE_FLAGS -#define TARGET_SECTION_TYPE_FLAGS avr_section_type_flags - -#undef TARGET_ASM_NAMED_SECTION -#define TARGET_ASM_NAMED_SECTION avr_asm_named_section -#undef TARGET_ASM_INIT_SECTIONS -#define TARGET_ASM_INIT_SECTIONS avr_asm_init_sections -#undef TARGET_ENCODE_SECTION_INFO -#define TARGET_ENCODE_SECTION_INFO avr_encode_section_info -#undef TARGET_ASM_SELECT_SECTION -#define TARGET_ASM_SELECT_SECTION avr_asm_select_section - -#undef TARGET_REGISTER_MOVE_COST -#define TARGET_REGISTER_MOVE_COST avr_register_move_cost -#undef TARGET_MEMORY_MOVE_COST -#define TARGET_MEMORY_MOVE_COST avr_memory_move_cost -#undef TARGET_RTX_COSTS -#define TARGET_RTX_COSTS avr_rtx_costs -#undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST avr_address_cost -#undef TARGET_MACHINE_DEPENDENT_REORG -#define TARGET_MACHINE_DEPENDENT_REORG avr_reorg -#undef TARGET_FUNCTION_ARG -#define TARGET_FUNCTION_ARG avr_function_arg -#undef TARGET_FUNCTION_ARG_ADVANCE -#define TARGET_FUNCTION_ARG_ADVANCE avr_function_arg_advance - -#undef TARGET_RETURN_IN_MEMORY -#define TARGET_RETURN_IN_MEMORY avr_return_in_memory - -#undef TARGET_STRICT_ARGUMENT_NAMING -#define TARGET_STRICT_ARGUMENT_NAMING hook_bool_CUMULATIVE_ARGS_true - -#undef TARGET_BUILTIN_SETJMP_FRAME_VALUE -#define TARGET_BUILTIN_SETJMP_FRAME_VALUE avr_builtin_setjmp_frame_value - -#undef TARGET_HARD_REGNO_SCRATCH_OK -#define TARGET_HARD_REGNO_SCRATCH_OK avr_hard_regno_scratch_ok -#undef TARGET_CASE_VALUES_THRESHOLD -#define TARGET_CASE_VALUES_THRESHOLD avr_case_values_threshold - -#undef TARGET_FRAME_POINTER_REQUIRED -#define TARGET_FRAME_POINTER_REQUIRED avr_frame_pointer_required_p -#undef TARGET_CAN_ELIMINATE -#define TARGET_CAN_ELIMINATE avr_can_eliminate - -#undef TARGET_CLASS_LIKELY_SPILLED_P -#define TARGET_CLASS_LIKELY_SPILLED_P avr_class_likely_spilled_p - -#undef TARGET_OPTION_OVERRIDE -#define TARGET_OPTION_OVERRIDE avr_option_override - -#undef TARGET_CANNOT_MODIFY_JUMPS_P -#define TARGET_CANNOT_MODIFY_JUMPS_P avr_cannot_modify_jumps_p - -#undef TARGET_FUNCTION_OK_FOR_SIBCALL -#define TARGET_FUNCTION_OK_FOR_SIBCALL avr_function_ok_for_sibcall - -#undef TARGET_INIT_BUILTINS -#define TARGET_INIT_BUILTINS avr_init_builtins - -#undef TARGET_EXPAND_BUILTIN -#define TARGET_EXPAND_BUILTIN avr_expand_builtin - -#undef TARGET_FOLD_BUILTIN -#define TARGET_FOLD_BUILTIN avr_fold_builtin - -#undef TARGET_ASM_FUNCTION_RODATA_SECTION -#define TARGET_ASM_FUNCTION_RODATA_SECTION avr_asm_function_rodata_section - -#undef TARGET_SCALAR_MODE_SUPPORTED_P -#define TARGET_SCALAR_MODE_SUPPORTED_P avr_scalar_mode_supported_p - -#undef TARGET_ADDR_SPACE_SUBSET_P -#define TARGET_ADDR_SPACE_SUBSET_P avr_addr_space_subset_p - -#undef TARGET_ADDR_SPACE_CONVERT -#define TARGET_ADDR_SPACE_CONVERT avr_addr_space_convert - -#undef TARGET_ADDR_SPACE_ADDRESS_MODE -#define TARGET_ADDR_SPACE_ADDRESS_MODE avr_addr_space_address_mode - -#undef TARGET_ADDR_SPACE_POINTER_MODE -#define TARGET_ADDR_SPACE_POINTER_MODE avr_addr_space_pointer_mode - -#undef TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P -#define TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P avr_addr_space_legitimate_address_p - -#undef TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS -#define TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS avr_addr_space_legitimize_address - -#undef TARGET_PRINT_OPERAND -#define TARGET_PRINT_OPERAND avr_print_operand -#undef TARGET_PRINT_OPERAND_ADDRESS -#define TARGET_PRINT_OPERAND_ADDRESS avr_print_operand_address -#undef TARGET_PRINT_OPERAND_PUNCT_VALID_P -#define TARGET_PRINT_OPERAND_PUNCT_VALID_P avr_print_operand_punct_valid_p - - /* Custom function to count number of set bits. */ @@ -654,7 +523,8 @@ avr_OS_main_function_p (tree func) /* Implement `ACCUMULATE_OUTGOING_ARGS'. */ -bool + +int avr_accumulate_outgoing_args (void) { if (!cfun) @@ -1062,8 +932,8 @@ avr_prologue_setup_frame (HOST_WIDE_INT size, HARD_REG_SET set) !frame_pointer_needed can only occur if the function is not a leaf function and thus X has already been saved. */ + int irq_state = -1; rtx fp_plus_insns, fp, my_fp; - rtx sp_minus_size = plus_constant (stack_pointer_rtx, -size); gcc_assert (frame_pointer_needed || !isr_p @@ -1076,7 +946,7 @@ avr_prologue_setup_frame (HOST_WIDE_INT size, HARD_REG_SET set) if (AVR_HAVE_8BIT_SP) { /* The high byte (r29) does not change: - Prefer SUBI (1 cycle) over ABIW (2 cycles, same size). */ + Prefer SUBI (1 cycle) over SBIW (2 cycles, same size). */ my_fp = all_regs_rtx[FRAME_POINTER_REGNUM]; } @@ -1092,43 +962,50 @@ avr_prologue_setup_frame (HOST_WIDE_INT size, HARD_REG_SET set) the frame pointer subtraction is done. */ insn = emit_move_insn (fp, stack_pointer_rtx); - if (!frame_pointer_needed) - RTX_FRAME_RELATED_P (insn) = 1; + if (frame_pointer_needed) + { + RTX_FRAME_RELATED_P (insn) = 1; + add_reg_note (insn, REG_CFA_ADJUST_CFA, + gen_rtx_SET (VOIDmode, fp, stack_pointer_rtx)); + } insn = emit_move_insn (my_fp, plus_constant (my_fp, -size)); - RTX_FRAME_RELATED_P (insn) = 1; - if (frame_pointer_needed) { + RTX_FRAME_RELATED_P (insn) = 1; add_reg_note (insn, REG_CFA_ADJUST_CFA, - gen_rtx_SET (VOIDmode, fp, sp_minus_size)); + gen_rtx_SET (VOIDmode, fp, + plus_constant (fp, -size))); } /* Copy to stack pointer. Note that since we've already changed the CFA to the frame pointer this operation - need not be annotated if frame pointer is needed. */ - - if (AVR_HAVE_8BIT_SP || AVR_XMEGA) - { - insn = emit_move_insn (stack_pointer_rtx, fp); - } - else if (TARGET_NO_INTERRUPTS - || isr_p - || cfun->machine->is_OS_main) - { - rtx irqs_are_on = GEN_INT (!!cfun->machine->is_interrupt); - - insn = emit_insn (gen_movhi_sp_r (stack_pointer_rtx, - fp, irqs_are_on)); - } - else - { - insn = emit_move_insn (stack_pointer_rtx, fp); - } + need not be annotated if frame pointer is needed. + Always move through unspec, see PR50063. + For meaning of irq_state see movhi_sp_r insn. */ - if (!frame_pointer_needed) - RTX_FRAME_RELATED_P (insn) = 1; + if (cfun->machine->is_interrupt) + irq_state = 1; + + if (TARGET_NO_INTERRUPTS + || cfun->machine->is_signal + || cfun->machine->is_OS_main) + irq_state = 0; + + if (AVR_HAVE_8BIT_SP) + irq_state = 2; + insn = emit_insn (gen_movhi_sp_r (stack_pointer_rtx, + fp, GEN_INT (irq_state))); + if (!frame_pointer_needed) + { + RTX_FRAME_RELATED_P (insn) = 1; + add_reg_note (insn, REG_CFA_ADJUST_CFA, + gen_rtx_SET (VOIDmode, stack_pointer_rtx, + plus_constant (stack_pointer_rtx, + -size))); + } + fp_plus_insns = get_insns (); end_sequence (); @@ -1143,9 +1020,13 @@ avr_prologue_setup_frame (HOST_WIDE_INT size, HARD_REG_SET set) start_sequence (); - insn = emit_move_insn (stack_pointer_rtx, sp_minus_size); + insn = emit_move_insn (stack_pointer_rtx, + plus_constant (stack_pointer_rtx, -size)); RTX_FRAME_RELATED_P (insn) = 1; - + add_reg_note (insn, REG_CFA_ADJUST_CFA, + gen_rtx_SET (VOIDmode, stack_pointer_rtx, + plus_constant (stack_pointer_rtx, + -size))); if (frame_pointer_needed) { insn = emit_move_insn (fp, stack_pointer_rtx); @@ -1242,11 +1123,11 @@ expand_prologue (void) emit_push_sfr (rampy_rtx, false /* frame-related */, true /* clr */); } - if (AVR_HAVE_RAMPZ + if (AVR_HAVE_RAMPZ && TEST_HARD_REG_BIT (set, REG_Z) && TEST_HARD_REG_BIT (set, REG_Z + 1)) { - emit_push_sfr (rampz_rtx, false /* frame-related */, true /* clr */); + emit_push_sfr (rampz_rtx, false /* frame-related */, AVR_HAVE_RAMPD); } } /* is_interrupt is_signal */ @@ -1376,7 +1257,8 @@ expand_epilogue (bool sibcall_p) if (size) { /* Try two methods to adjust stack and select shortest. */ - + + int irq_state = -1; rtx fp, my_fp; rtx fp_plus_insns; @@ -1406,23 +1288,15 @@ expand_epilogue (bool sibcall_p) emit_move_insn (my_fp, plus_constant (my_fp, size)); /* Copy to stack pointer. */ - - if (AVR_HAVE_8BIT_SP || AVR_XMEGA) - { - emit_move_insn (stack_pointer_rtx, fp); - } - else if (TARGET_NO_INTERRUPTS - || isr_p - || cfun->machine->is_OS_main) - { - rtx irqs_are_on = GEN_INT (!!cfun->machine->is_interrupt); - - emit_insn (gen_movhi_sp_r (stack_pointer_rtx, fp, irqs_are_on)); - } - else - { - emit_move_insn (stack_pointer_rtx, fp); - } + + if (TARGET_NO_INTERRUPTS) + irq_state = 0; + + if (AVR_HAVE_8BIT_SP) + irq_state = 2; + + emit_insn (gen_movhi_sp_r (stack_pointer_rtx, fp, + GEN_INT (irq_state))); fp_plus_insns = get_insns (); end_sequence (); @@ -1473,12 +1347,12 @@ expand_epilogue (bool sibcall_p) /* Restore RAMPZ/Y/X/D using tmp_reg as scratch. The conditions to restore them must be tha same as in prologue. */ - if (AVR_HAVE_RAMPX - && TEST_HARD_REG_BIT (set, REG_X) - && TEST_HARD_REG_BIT (set, REG_X + 1)) + if (AVR_HAVE_RAMPZ + && TEST_HARD_REG_BIT (set, REG_Z) + && TEST_HARD_REG_BIT (set, REG_Z + 1)) { emit_pop_byte (TMP_REGNO); - emit_move_insn (rampx_rtx, tmp_reg_rtx); + emit_move_insn (rampz_rtx, tmp_reg_rtx); } if (AVR_HAVE_RAMPY @@ -1490,12 +1364,12 @@ expand_epilogue (bool sibcall_p) emit_move_insn (rampy_rtx, tmp_reg_rtx); } - if (AVR_HAVE_RAMPZ - && TEST_HARD_REG_BIT (set, REG_Z) - && TEST_HARD_REG_BIT (set, REG_Z + 1)) + if (AVR_HAVE_RAMPX + && TEST_HARD_REG_BIT (set, REG_X) + && TEST_HARD_REG_BIT (set, REG_X + 1)) { emit_pop_byte (TMP_REGNO); - emit_move_insn (rampz_rtx, tmp_reg_rtx); + emit_move_insn (rampx_rtx, tmp_reg_rtx); } if (AVR_HAVE_RAMPD) @@ -2572,7 +2446,7 @@ avr_xload_libgcc_p (enum machine_mode mode) int n_bytes = GET_MODE_SIZE (mode); return (n_bytes > 1 - || avr_current_arch->n_segments > 1); + || avr_current_device->n_flash > 1); } @@ -2768,10 +2642,7 @@ avr_out_lpm (rtx insn, rtx *op, int *plen) regno_dest = REGNO (dest); - /* Cut down segment number to a number the device actually supports. - We do this late to preserve the address space's name for diagnostics. */ - - segment = avr_addrspace[as].segment % avr_current_arch->n_segments; + segment = avr_addrspace[as].segment; /* Set RAMPZ as needed. */ @@ -2891,7 +2762,14 @@ avr_out_lpm (rtx insn, rtx *op, int *plen) break; /* POST_INC */ } /* switch CODE (addr) */ + + if (xop[4] == xstring_e && AVR_HAVE_RAMPD) + { + /* Reset RAMPZ to 0 so that EBI devices don't read garbage from RAM */ + avr_asm_len ("out __RAMPZ__,__zero_reg__", xop, plen, 1); + } + return ""; } @@ -2911,8 +2789,9 @@ avr_out_xload (rtx insn ATTRIBUTE_UNUSED, rtx *op, int *plen) if (plen) *plen = 0; - avr_asm_len ("ld %3,%a2" CR_TAB - "sbrs %1,7", xop, plen, 2); + avr_asm_len ("sbrc %1,7" CR_TAB + "ld %3,%a2" CR_TAB + "sbrs %1,7", xop, plen, 3); avr_asm_len (AVR_HAVE_LPMX ? "lpm %3,%a2" : "lpm", xop, plen, 1); @@ -4014,8 +3893,8 @@ avr_out_movhi_mr_r_xmega (rtx insn, rtx op[], int *plen) else avr_asm_len ("st X+,%A1" CR_TAB "st X,%B1", op, plen, -2); - - return reg_unused_after (insn, src) + + return reg_unused_after (insn, base) ? "" : avr_asm_len ("sbiw r26,1", op, plen, 1); } @@ -7096,6 +6975,7 @@ avr_nonconst_pointer_addrspace (tree typ) if (POINTER_TYPE_P (typ)) { + addr_space_t as; tree target = TREE_TYPE (typ); /* Pointer to function: Test the function's return type. */ @@ -7108,12 +6988,16 @@ avr_nonconst_pointer_addrspace (tree typ) while (TREE_CODE (target) == ARRAY_TYPE) target = TREE_TYPE (target); - if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (target)) - && !TYPE_READONLY (target)) - { - /* Pointers to non-generic address space must be const. */ + /* Pointers to non-generic address space must be const. + Refuse address spaces outside the device's flash. */ - return TYPE_ADDR_SPACE (target); + as = TYPE_ADDR_SPACE (target); + + if (!ADDR_SPACE_GENERIC_P (as) + && (!TYPE_READONLY (target) + || avr_addrspace[as].segment >= avr_current_device->n_flash)) + { + return as; } /* Scan pointer's target type. */ @@ -7175,12 +7059,29 @@ avr_pgm_check_var_decl (tree node) if (reason) { - if (TYPE_P (node)) - error ("pointer targeting address space %qs must be const in %qT", - avr_addrspace[as].name, node); + avr_edump ("%?: %s, %d, %d\n", + avr_addrspace[as].name, + avr_addrspace[as].segment, avr_current_device->n_flash); + if (avr_addrspace[as].segment >= avr_current_device->n_flash) + { + if (TYPE_P (node)) + error ("%qT uses address space %qs beyond flash of %qs", + node, avr_addrspace[as].name, avr_current_device->name); + else + error ("%s %q+D uses address space %qs beyond flash of %qs", + reason, node, avr_addrspace[as].name, + avr_current_device->name); + } else - error ("pointer targeting address space %qs must be const in %s %q+D", - avr_addrspace[as].name, reason, node); + { + if (TYPE_P (node)) + error ("pointer targeting address space %qs must be const in %qT", + avr_addrspace[as].name, node); + else + error ("pointer targeting address space %qs must be const" + " in %s %q+D", + avr_addrspace[as].name, reason, node); + } } return reason == NULL; @@ -7198,6 +7099,7 @@ avr_insert_attributes (tree node, tree *attributes) && (TREE_STATIC (node) || DECL_EXTERNAL (node)) && avr_progmem_p (node, *attributes)) { + addr_space_t as; tree node0 = node; /* For C++, we have to peel arrays in order to get correct @@ -7209,11 +7111,19 @@ avr_insert_attributes (tree node, tree *attributes) if (error_mark_node == node0) return; + + as = TYPE_ADDR_SPACE (TREE_TYPE (node)); + + if (avr_addrspace[as].segment >= avr_current_device->n_flash) + { + error ("variable %q+D located in address space %qs" + " beyond flash of %qs", + node, avr_addrspace[as].name, avr_current_device->name); + } if (!TYPE_READONLY (node0) && !TREE_READONLY (node)) { - addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (node)); const char *reason = "__attribute__((progmem))"; if (!ADDR_SPACE_GENERIC_P (as)) @@ -7240,7 +7150,11 @@ avr_asm_output_aligned_decl_common (FILE * stream, unsigned HOST_WIDE_INT size, unsigned int align, bool local_p) { - avr_need_clear_bss_p = true; + /* __gnu_lto_v1 etc. are just markers for the linker injected by toplev.c. + There is no need to trigger __do_clear_bss code for them. */ + + if (!STR_PREFIX_P (name, "__gnu_lto")) + avr_need_clear_bss_p = true; if (local_p) ASM_OUTPUT_ALIGNED_LOCAL (stream, name, size, align); @@ -7394,7 +7308,7 @@ avr_asm_named_section (const char *name, unsigned int flags, tree decl) if (flags & AVR_SECTION_PROGMEM) { addr_space_t as = (flags & AVR_SECTION_PROGMEM) / SECTION_MACH_DEP; - int segment = avr_addrspace[as].segment % avr_current_arch->n_segments; + int segment = avr_addrspace[as].segment; const char *old_prefix = ".rodata"; const char *new_prefix = progmem_section_prefix[segment]; @@ -7509,7 +7423,7 @@ avr_asm_select_section (tree decl, int reloc, unsigned HOST_WIDE_INT align) && avr_progmem_p (decl, DECL_ATTRIBUTES (decl))) { addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (decl)); - int segment = avr_addrspace[as].segment % avr_current_arch->n_segments; + int segment = avr_addrspace[as].segment; if (sect->common.flags & SECTION_NAMED) { @@ -9466,15 +9380,6 @@ avr_out_reload_inpsi (rtx *op, rtx clobber_reg, int *len) return ""; } -void -avr_output_bld (rtx operands[], int bit_nr) -{ - static char s[] = "bld %A0,0"; - - s[5] = 'A' + (bit_nr >> 3); - s[8] = '0' + (bit_nr & 7); - output_asm_insn (s, operands); -} void avr_output_addr_vec_elt (FILE *stream, int value) @@ -9589,23 +9494,10 @@ avr_out_sbxx_branch (rtx insn, rtx operands[]) case REG: - if (GET_MODE (operands[1]) == QImode) - { - if (comp == EQ) - output_asm_insn ("sbrs %1,%2", operands); - else - output_asm_insn ("sbrc %1,%2", operands); - } - else /* HImode, PSImode or SImode */ - { - static char buf[] = "sbrc %A1,0"; - unsigned int bit_nr = UINTVAL (operands[2]); - - buf[3] = (comp == EQ) ? 's' : 'c'; - buf[6] = 'A' + (bit_nr / 8); - buf[9] = '0' + (bit_nr % 8); - output_asm_insn (buf, operands); - } + if (comp == EQ) + output_asm_insn ("sbrs %T1%T2", operands); + else + output_asm_insn ("sbrc %T1%T2", operands); break; /* REG */ } /* switch */ @@ -9843,7 +9735,7 @@ avr_addr_space_convert (rtx src, tree type_from, tree type_to) msb = ADDR_SPACE_GENERIC_P (as_from) ? 0x80 - : avr_addrspace[as_from].segment % avr_current_arch->n_segments; + : avr_addrspace[as_from].segment; src = force_reg (Pmode, src); @@ -9898,7 +9790,7 @@ avr_emit_movmemhi (rtx *xop) HOST_WIDE_INT count; enum machine_mode loop_mode; addr_space_t as = MEM_ADDR_SPACE (xop[1]); - rtx loop_reg, addr0, addr1, a_src, a_dest, insn, xas, reg_x; + rtx loop_reg, addr1, a_src, a_dest, insn, xas; rtx a_hi8 = NULL_RTX; if (avr_mem_flash_p (xop[0])) @@ -9927,10 +9819,10 @@ avr_emit_movmemhi (rtx *xop) } else { - int segment = avr_addrspace[as].segment % avr_current_arch->n_segments; + int segment = avr_addrspace[as].segment; if (segment - && avr_current_arch->n_segments > 1) + && avr_current_device->n_flash > 1) { a_hi8 = GEN_INT (segment); emit_move_insn (rampz_rtx, a_hi8 = copy_to_mode_reg (QImode, a_hi8)); @@ -9954,11 +9846,7 @@ avr_emit_movmemhi (rtx *xop) X = destination address */ emit_move_insn (lpm_addr_reg_rtx, addr1); - addr1 = lpm_addr_reg_rtx; - - reg_x = gen_rtx_REG (HImode, REG_X); - emit_move_insn (reg_x, a_dest); - addr0 = reg_x; + emit_move_insn (gen_rtx_REG (HImode, REG_X), a_dest); /* FIXME: Register allocator does a bad job and might spill address register(s) inside the loop leading to additional move instruction @@ -9973,23 +9861,19 @@ avr_emit_movmemhi (rtx *xop) /* Load instruction ([E]LPM or LD) is known at compile time: Do the copy-loop inline. */ - rtx (*fun) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx) + rtx (*fun) (rtx, rtx, rtx) = QImode == loop_mode ? gen_movmem_qi : gen_movmem_hi; - insn = fun (addr0, addr1, xas, loop_reg, - addr0, addr1, tmp_reg_rtx, loop_reg); + insn = fun (xas, loop_reg, loop_reg); } else { - rtx loop_reg16 = gen_rtx_REG (HImode, 24); - rtx r23 = gen_rtx_REG (QImode, 23); - rtx (*fun) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx) + rtx (*fun) (rtx, rtx) = QImode == loop_mode ? gen_movmemx_qi : gen_movmemx_hi; - emit_move_insn (r23, a_hi8); + emit_move_insn (gen_rtx_REG (QImode, 23), a_hi8); - insn = fun (addr0, addr1, xas, loop_reg, addr0, addr1, - lpm_reg_rtx, loop_reg16, r23, r23, GEN_INT (avr_addr.rampz)); + insn = fun (xas, GEN_INT (avr_addr.rampz)); } set_mem_addr_space (SET_SRC (XVECEXP (insn, 0, 0)), as); @@ -10000,32 +9884,27 @@ avr_emit_movmemhi (rtx *xop) /* Print assembler for movmem_qi, movmem_hi insns... - $0, $4 : & dest - $1, $5 : & src - $2 : Address Space - $3, $7 : Loop register - $6 : Scratch register - - ...and movmem_qi_elpm, movmem_hi_elpm insns. - - $8, $9 : hh8 (& src) - $10 : RAMPZ_ADDR + $0 : Address Space + $1, $2 : Loop register + Z : Source address + X : Destination address */ const char* -avr_out_movmem (rtx insn ATTRIBUTE_UNUSED, rtx *xop, int *plen) +avr_out_movmem (rtx insn ATTRIBUTE_UNUSED, rtx *op, int *plen) { - addr_space_t as = (addr_space_t) INTVAL (xop[2]); - enum machine_mode loop_mode = GET_MODE (xop[3]); - - bool sbiw_p = test_hard_reg_class (ADDW_REGS, xop[3]); - - gcc_assert (REG_X == REGNO (xop[0]) - && REG_Z == REGNO (xop[1])); + addr_space_t as = (addr_space_t) INTVAL (op[0]); + enum machine_mode loop_mode = GET_MODE (op[1]); + bool sbiw_p = test_hard_reg_class (ADDW_REGS, op[1]); + rtx xop[3]; if (plen) *plen = 0; + xop[0] = op[0]; + xop[1] = op[1]; + xop[2] = tmp_reg_rtx; + /* Loop label */ avr_asm_len ("0:", xop, plen, 0); @@ -10039,16 +9918,16 @@ avr_out_movmem (rtx insn ATTRIBUTE_UNUSED, rtx *xop, int *plen) case ADDR_SPACE_GENERIC: - avr_asm_len ("ld %6,%a1+", xop, plen, 1); + avr_asm_len ("ld %2,Z+", xop, plen, 1); break; case ADDR_SPACE_FLASH: if (AVR_HAVE_LPMX) - avr_asm_len ("lpm %6,%a1+", xop, plen, 1); + avr_asm_len ("lpm %2,%Z+", xop, plen, 1); else avr_asm_len ("lpm" CR_TAB - "adiw %1,1", xop, plen, 2); + "adiw r30,1", xop, plen, 2); break; case ADDR_SPACE_FLASH1: @@ -10058,31 +9937,31 @@ avr_out_movmem (rtx insn ATTRIBUTE_UNUSED, rtx *xop, int *plen) case ADDR_SPACE_FLASH5: if (AVR_HAVE_ELPMX) - avr_asm_len ("elpm %6,%a1+", xop, plen, 1); + avr_asm_len ("elpm %2,Z+", xop, plen, 1); else avr_asm_len ("elpm" CR_TAB - "adiw %1,1", xop, plen, 2); + "adiw r30,1", xop, plen, 2); break; } /* Store with post-increment */ - avr_asm_len ("st %a0+,%6", xop, plen, 1); + avr_asm_len ("st X+,%2", xop, plen, 1); /* Decrement loop-counter and set Z-flag */ if (QImode == loop_mode) { - avr_asm_len ("dec %3", xop, plen, 1); + avr_asm_len ("dec %1", xop, plen, 1); } else if (sbiw_p) { - avr_asm_len ("sbiw %3,1", xop, plen, 1); + avr_asm_len ("sbiw %1,1", xop, plen, 1); } else { - avr_asm_len ("subi %A3,1" CR_TAB - "sbci %B3,0", xop, plen, 2); + avr_asm_len ("subi %A1,1" CR_TAB + "sbci %B1,0", xop, plen, 2); } /* Loop until zero */ @@ -10094,6 +9973,14 @@ avr_out_movmem (rtx insn ATTRIBUTE_UNUSED, rtx *xop, int *plen) /* Helper for __builtin_avr_delay_cycles */ +static rtx +avr_mem_clobber (void) +{ + rtx mem = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode)); + MEM_VOLATILE_P (mem) = 1; + return mem; +} + static void avr_expand_delay_cycles (rtx operands0) { @@ -10105,7 +9992,8 @@ avr_expand_delay_cycles (rtx operands0) { loop_count = ((cycles - 9) / 6) + 1; cycles_used = ((loop_count - 1) * 6) + 9; - emit_insn (gen_delay_cycles_4 (gen_int_mode (loop_count, SImode))); + emit_insn (gen_delay_cycles_4 (gen_int_mode (loop_count, SImode), + avr_mem_clobber())); cycles -= cycles_used; } @@ -10115,7 +10003,8 @@ avr_expand_delay_cycles (rtx operands0) if (loop_count > 0xFFFFFF) loop_count = 0xFFFFFF; cycles_used = ((loop_count - 1) * 5) + 7; - emit_insn (gen_delay_cycles_3 (gen_int_mode (loop_count, SImode))); + emit_insn (gen_delay_cycles_3 (gen_int_mode (loop_count, SImode), + avr_mem_clobber())); cycles -= cycles_used; } @@ -10125,7 +10014,8 @@ avr_expand_delay_cycles (rtx operands0) if (loop_count > 0xFFFF) loop_count = 0xFFFF; cycles_used = ((loop_count - 1) * 4) + 5; - emit_insn (gen_delay_cycles_2 (gen_int_mode (loop_count, HImode))); + emit_insn (gen_delay_cycles_2 (gen_int_mode (loop_count, HImode), + avr_mem_clobber())); cycles -= cycles_used; } @@ -10135,7 +10025,8 @@ avr_expand_delay_cycles (rtx operands0) if (loop_count > 255) loop_count = 255; cycles_used = loop_count * 3; - emit_insn (gen_delay_cycles_1 (gen_int_mode (loop_count, QImode))); + emit_insn (gen_delay_cycles_1 (gen_int_mode (loop_count, QImode), + avr_mem_clobber())); cycles -= cycles_used; } @@ -10504,17 +10395,12 @@ avr_out_insert_bits (rtx *op, int *plen) enum avr_builtin_id { - AVR_BUILTIN_NOP, - AVR_BUILTIN_SEI, - AVR_BUILTIN_CLI, - AVR_BUILTIN_WDR, - AVR_BUILTIN_SLEEP, - AVR_BUILTIN_SWAP, - AVR_BUILTIN_INSERT_BITS, - AVR_BUILTIN_FMUL, - AVR_BUILTIN_FMULS, - AVR_BUILTIN_FMULSU, - AVR_BUILTIN_DELAY_CYCLES + +#define DEF_BUILTIN(NAME, N_ARGS, ID, TYPE, CODE) ID, +#include "builtins.def" +#undef DEF_BUILTIN + + AVR_BUILTIN_COUNT }; static void @@ -10527,14 +10413,6 @@ avr_init_builtin_int24 (void) (*lang_hooks.types.register_builtin_type) (uint24_type, "__uint24"); } -#define DEF_BUILTIN(NAME, TYPE, CODE) \ - do \ - { \ - add_builtin_function ((NAME), (TYPE), (CODE), BUILT_IN_MD, \ - NULL, NULL_TREE); \ - } while (0) - - /* Implement `TARGET_INIT_BUILTINS' */ /* Set up all builtin functions for this target. */ @@ -10574,58 +10452,49 @@ avr_init_builtins (void) unsigned_char_type_node, NULL_TREE); - DEF_BUILTIN ("__builtin_avr_nop", void_ftype_void, AVR_BUILTIN_NOP); - DEF_BUILTIN ("__builtin_avr_sei", void_ftype_void, AVR_BUILTIN_SEI); - DEF_BUILTIN ("__builtin_avr_cli", void_ftype_void, AVR_BUILTIN_CLI); - DEF_BUILTIN ("__builtin_avr_wdr", void_ftype_void, AVR_BUILTIN_WDR); - DEF_BUILTIN ("__builtin_avr_sleep", void_ftype_void, AVR_BUILTIN_SLEEP); - DEF_BUILTIN ("__builtin_avr_swap", uchar_ftype_uchar, AVR_BUILTIN_SWAP); - DEF_BUILTIN ("__builtin_avr_delay_cycles", void_ftype_ulong, - AVR_BUILTIN_DELAY_CYCLES); - - DEF_BUILTIN ("__builtin_avr_fmul", uint_ftype_uchar_uchar, - AVR_BUILTIN_FMUL); - DEF_BUILTIN ("__builtin_avr_fmuls", int_ftype_char_char, - AVR_BUILTIN_FMULS); - DEF_BUILTIN ("__builtin_avr_fmulsu", int_ftype_char_uchar, - AVR_BUILTIN_FMULSU); - - DEF_BUILTIN ("__builtin_avr_insert_bits", uchar_ftype_ulong_uchar_uchar, - AVR_BUILTIN_INSERT_BITS); + tree const_memx_void_node + = build_qualified_type (void_type_node, + TYPE_QUAL_CONST + | ENCODE_QUAL_ADDR_SPACE (ADDR_SPACE_MEMX)); + + tree const_memx_ptr_type_node + = build_pointer_type_for_mode (const_memx_void_node, PSImode, false); + + tree char_ftype_const_memx_ptr + = build_function_type_list (char_type_node, + const_memx_ptr_type_node, + NULL); +#define DEF_BUILTIN(NAME, N_ARGS, ID, TYPE, CODE) \ + add_builtin_function (NAME, TYPE, ID, BUILT_IN_MD, NULL, NULL_TREE); +#include "builtins.def" +#undef DEF_BUILTIN + avr_init_builtin_int24 (); } -#undef DEF_BUILTIN struct avr_builtin_description { - const enum insn_code icode; - const char *const name; - const enum avr_builtin_id id; + enum insn_code icode; + const char *name; + enum avr_builtin_id id; + int n_args; }; static const struct avr_builtin_description -bdesc_1arg[] = +avr_bdesc[] = { - { CODE_FOR_rotlqi3_4, "__builtin_avr_swap", AVR_BUILTIN_SWAP } - }; -static const struct avr_builtin_description -bdesc_2arg[] = - { - { CODE_FOR_fmul, "__builtin_avr_fmul", AVR_BUILTIN_FMUL }, - { CODE_FOR_fmuls, "__builtin_avr_fmuls", AVR_BUILTIN_FMULS }, - { CODE_FOR_fmulsu, "__builtin_avr_fmulsu", AVR_BUILTIN_FMULSU } - }; +#define DEF_BUILTIN(NAME, N_ARGS, ID, TYPE, ICODE) \ + { ICODE, NAME, ID, N_ARGS }, +#include "builtins.def" +#undef DEF_BUILTIN -static const struct avr_builtin_description -bdesc_3arg[] = - { - { CODE_FOR_insert_bits, "__builtin_avr_insert_bits", - AVR_BUILTIN_INSERT_BITS } + { CODE_FOR_nothing, NULL, 0, -1 } }; + /* Subroutine of avr_expand_builtin to take care of unop insns. */ static rtx @@ -10807,7 +10676,6 @@ avr_expand_builtin (tree exp, rtx target, int ignore ATTRIBUTE_UNUSED) { size_t i; - const struct avr_builtin_description *d; tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0); const char* bname = IDENTIFIER_POINTER (DECL_NAME (fndecl)); unsigned int id = DECL_FUNCTION_CODE (fndecl); @@ -10820,31 +10688,16 @@ avr_expand_builtin (tree exp, rtx target, emit_insn (gen_nopv (GEN_INT(1))); return 0; - case AVR_BUILTIN_SEI: - emit_insn (gen_enable_interrupt ()); - return 0; - - case AVR_BUILTIN_CLI: - emit_insn (gen_disable_interrupt ()); - return 0; - - case AVR_BUILTIN_WDR: - emit_insn (gen_wdr ()); - return 0; - - case AVR_BUILTIN_SLEEP: - emit_insn (gen_sleep ()); - return 0; - case AVR_BUILTIN_DELAY_CYCLES: { arg0 = CALL_EXPR_ARG (exp, 0); op0 = expand_expr (arg0, NULL_RTX, VOIDmode, EXPAND_NORMAL); - if (! CONST_INT_P (op0)) + if (!CONST_INT_P (op0)) error ("%s expects a compile time integer constant", bname); + else + avr_expand_delay_cycles (op0); - avr_expand_delay_cycles (op0); return 0; } @@ -10862,18 +10715,31 @@ avr_expand_builtin (tree exp, rtx target, } } - for (i = 0, d = bdesc_1arg; i < ARRAY_SIZE (bdesc_1arg); i++, d++) - if (d->id == id) - return avr_expand_unop_builtin (d->icode, exp, target); - - for (i = 0, d = bdesc_2arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++) - if (d->id == id) - return avr_expand_binop_builtin (d->icode, exp, target); - - for (i = 0, d = bdesc_3arg; i < ARRAY_SIZE (bdesc_3arg); i++, d++) - if (d->id == id) - return avr_expand_triop_builtin (d->icode, exp, target); - + for (i = 0; avr_bdesc[i].name; i++) + { + const struct avr_builtin_description *d = &avr_bdesc[i]; + + if (d->id == id) + switch (d->n_args) + { + case 0: + emit_insn ((GEN_FCN (d->icode)) (target)); + return 0; + + case 1: + return avr_expand_unop_builtin (d->icode, exp, target); + + case 2: + return avr_expand_binop_builtin (d->icode, exp, target); + + case 3: + return avr_expand_triop_builtin (d->icode, exp, target); + + default: + gcc_unreachable(); + } + } + gcc_unreachable (); } @@ -10895,17 +10761,32 @@ avr_fold_builtin (tree fndecl, int n_args ATTRIBUTE_UNUSED, tree *arg, default: break; + case AVR_BUILTIN_SWAP: + { + return fold_build2 (LROTATE_EXPR, val_type, arg[0], + build_int_cst (val_type, 4)); + } + case AVR_BUILTIN_INSERT_BITS: { tree tbits = arg[1]; tree tval = arg[2]; tree tmap; tree map_type = TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (fndecl))); - double_int map = tree_to_double_int (arg[0]); + double_int map; bool changed = false; unsigned i; avr_map_op_t best_g; + + if (TREE_CODE (arg[0]) != INTEGER_CST) + { + /* No constant as first argument: Don't fold this and run into + error in avr_expand_builtin. */ + + break; + } + map = tree_to_double_int (arg[0]); tmap = double_int_to_tree (map_type, map); if (TREE_CODE (tval) != INTEGER_CST @@ -11019,8 +10900,141 @@ avr_fold_builtin (tree fndecl, int n_args ATTRIBUTE_UNUSED, tree *arg, return NULL_TREE; } - + +/* Initialize the GCC target structure. */ + +#undef TARGET_ASM_ALIGNED_HI_OP +#define TARGET_ASM_ALIGNED_HI_OP "\t.word\t" +#undef TARGET_ASM_ALIGNED_SI_OP +#define TARGET_ASM_ALIGNED_SI_OP "\t.long\t" +#undef TARGET_ASM_UNALIGNED_HI_OP +#define TARGET_ASM_UNALIGNED_HI_OP "\t.word\t" +#undef TARGET_ASM_UNALIGNED_SI_OP +#define TARGET_ASM_UNALIGNED_SI_OP "\t.long\t" +#undef TARGET_ASM_INTEGER +#define TARGET_ASM_INTEGER avr_assemble_integer +#undef TARGET_ASM_FILE_START +#define TARGET_ASM_FILE_START avr_file_start +#undef TARGET_ASM_FILE_END +#define TARGET_ASM_FILE_END avr_file_end + +#undef TARGET_ASM_FUNCTION_END_PROLOGUE +#define TARGET_ASM_FUNCTION_END_PROLOGUE avr_asm_function_end_prologue +#undef TARGET_ASM_FUNCTION_BEGIN_EPILOGUE +#define TARGET_ASM_FUNCTION_BEGIN_EPILOGUE avr_asm_function_begin_epilogue + +#undef TARGET_FUNCTION_VALUE +#define TARGET_FUNCTION_VALUE avr_function_value +#undef TARGET_LIBCALL_VALUE +#define TARGET_LIBCALL_VALUE avr_libcall_value +#undef TARGET_FUNCTION_VALUE_REGNO_P +#define TARGET_FUNCTION_VALUE_REGNO_P avr_function_value_regno_p + +#undef TARGET_ATTRIBUTE_TABLE +#define TARGET_ATTRIBUTE_TABLE avr_attribute_table +#undef TARGET_INSERT_ATTRIBUTES +#define TARGET_INSERT_ATTRIBUTES avr_insert_attributes +#undef TARGET_SECTION_TYPE_FLAGS +#define TARGET_SECTION_TYPE_FLAGS avr_section_type_flags + +#undef TARGET_ASM_NAMED_SECTION +#define TARGET_ASM_NAMED_SECTION avr_asm_named_section +#undef TARGET_ASM_INIT_SECTIONS +#define TARGET_ASM_INIT_SECTIONS avr_asm_init_sections +#undef TARGET_ENCODE_SECTION_INFO +#define TARGET_ENCODE_SECTION_INFO avr_encode_section_info +#undef TARGET_ASM_SELECT_SECTION +#define TARGET_ASM_SELECT_SECTION avr_asm_select_section + +#undef TARGET_REGISTER_MOVE_COST +#define TARGET_REGISTER_MOVE_COST avr_register_move_cost +#undef TARGET_MEMORY_MOVE_COST +#define TARGET_MEMORY_MOVE_COST avr_memory_move_cost +#undef TARGET_RTX_COSTS +#define TARGET_RTX_COSTS avr_rtx_costs +#undef TARGET_ADDRESS_COST +#define TARGET_ADDRESS_COST avr_address_cost +#undef TARGET_MACHINE_DEPENDENT_REORG +#define TARGET_MACHINE_DEPENDENT_REORG avr_reorg +#undef TARGET_FUNCTION_ARG +#define TARGET_FUNCTION_ARG avr_function_arg +#undef TARGET_FUNCTION_ARG_ADVANCE +#define TARGET_FUNCTION_ARG_ADVANCE avr_function_arg_advance + +#undef TARGET_RETURN_IN_MEMORY +#define TARGET_RETURN_IN_MEMORY avr_return_in_memory + +#undef TARGET_STRICT_ARGUMENT_NAMING +#define TARGET_STRICT_ARGUMENT_NAMING hook_bool_CUMULATIVE_ARGS_true + +#undef TARGET_BUILTIN_SETJMP_FRAME_VALUE +#define TARGET_BUILTIN_SETJMP_FRAME_VALUE avr_builtin_setjmp_frame_value + +#undef TARGET_HARD_REGNO_SCRATCH_OK +#define TARGET_HARD_REGNO_SCRATCH_OK avr_hard_regno_scratch_ok +#undef TARGET_CASE_VALUES_THRESHOLD +#define TARGET_CASE_VALUES_THRESHOLD avr_case_values_threshold + +#undef TARGET_FRAME_POINTER_REQUIRED +#define TARGET_FRAME_POINTER_REQUIRED avr_frame_pointer_required_p +#undef TARGET_CAN_ELIMINATE +#define TARGET_CAN_ELIMINATE avr_can_eliminate + +#undef TARGET_CLASS_LIKELY_SPILLED_P +#define TARGET_CLASS_LIKELY_SPILLED_P avr_class_likely_spilled_p + +#undef TARGET_OPTION_OVERRIDE +#define TARGET_OPTION_OVERRIDE avr_option_override + +#undef TARGET_CANNOT_MODIFY_JUMPS_P +#define TARGET_CANNOT_MODIFY_JUMPS_P avr_cannot_modify_jumps_p + +#undef TARGET_FUNCTION_OK_FOR_SIBCALL +#define TARGET_FUNCTION_OK_FOR_SIBCALL avr_function_ok_for_sibcall + +#undef TARGET_INIT_BUILTINS +#define TARGET_INIT_BUILTINS avr_init_builtins + +#undef TARGET_EXPAND_BUILTIN +#define TARGET_EXPAND_BUILTIN avr_expand_builtin + +#undef TARGET_FOLD_BUILTIN +#define TARGET_FOLD_BUILTIN avr_fold_builtin + +#undef TARGET_ASM_FUNCTION_RODATA_SECTION +#define TARGET_ASM_FUNCTION_RODATA_SECTION avr_asm_function_rodata_section + +#undef TARGET_SCALAR_MODE_SUPPORTED_P +#define TARGET_SCALAR_MODE_SUPPORTED_P avr_scalar_mode_supported_p + +#undef TARGET_ADDR_SPACE_SUBSET_P +#define TARGET_ADDR_SPACE_SUBSET_P avr_addr_space_subset_p + +#undef TARGET_ADDR_SPACE_CONVERT +#define TARGET_ADDR_SPACE_CONVERT avr_addr_space_convert + +#undef TARGET_ADDR_SPACE_ADDRESS_MODE +#define TARGET_ADDR_SPACE_ADDRESS_MODE avr_addr_space_address_mode + +#undef TARGET_ADDR_SPACE_POINTER_MODE +#define TARGET_ADDR_SPACE_POINTER_MODE avr_addr_space_pointer_mode + +#undef TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P +#define TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P \ + avr_addr_space_legitimate_address_p + +#undef TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS +#define TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS avr_addr_space_legitimize_address + +#undef TARGET_PRINT_OPERAND +#define TARGET_PRINT_OPERAND avr_print_operand +#undef TARGET_PRINT_OPERAND_ADDRESS +#define TARGET_PRINT_OPERAND_ADDRESS avr_print_operand_address +#undef TARGET_PRINT_OPERAND_PUNCT_VALID_P +#define TARGET_PRINT_OPERAND_PUNCT_VALID_P avr_print_operand_punct_valid_p + struct gcc_target targetm = TARGET_INITIALIZER; + #include "gt-avr.h" diff --git a/gcc/config/avr/avr.h b/gcc/config/avr/avr.h index 1b7bd3551cc..8488e15dcad 100644 --- a/gcc/config/avr/avr.h +++ b/gcc/config/avr/avr.h @@ -60,9 +60,6 @@ struct base_arch_s SFR-address = RAM-address - sfr_offset */ int sfr_offset; - /* Number of 64k segments in the flash. */ - int n_segments; - /* Architecture id to built-in define __AVR_ARCH__ (NULL -> no macro) */ const char *const macro; @@ -129,6 +126,9 @@ struct mcu_type_s { /* Start of data section. */ int data_section_start; + /* Number of 64k segments in the flash. */ + int n_flash; + /* Name of device library. */ const char *const library_name; }; @@ -595,7 +595,9 @@ extern const char *avr_device_to_devicelib (int argc, const char **argv); pass to `cc1plus'. */ #define ASM_SPEC "%{mmcu=avr25:-mmcu=avr2;mmcu=avr35:-mmcu=avr3;mmcu=avr31:-mmcu=avr3;mmcu=avr51:-mmcu=avr5;\ -mmcu=*:-mmcu=%*}" +mmcu=*:-mmcu=%*} \ +%{mmcu=*:%{!mmcu=avr2:%{!mmcu=at90s8515:%{!mmcu=avr31:%{!mmcu=atmega103:\ +-mno-skip-bug}}}}}" #define LINK_SPEC "\ %{mrelax:--relax\ @@ -676,6 +678,10 @@ struct GTY(()) machine_function required in order for pushes to be generated. */ #define PUSH_ROUNDING(X) (X) +/* Define prototype here to avoid build warning. Some files using + ACCUMULATE_OUTGOING_ARGS (directly or indirectly) include + tm.h but not tm_p.h. */ +extern int avr_accumulate_outgoing_args (void); #define ACCUMULATE_OUTGOING_ARGS avr_accumulate_outgoing_args() #define INIT_EXPANDERS avr_init_expanders() diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md index 88117b1cc37..3d1adf8b267 100644 --- a/gcc/config/avr/avr.md +++ b/gcc/config/avr/avr.md @@ -49,14 +49,14 @@ (define_constants - [(REG_X 26) - (REG_Y 28) - (REG_Z 30) - (REG_W 24) - (REG_SP 32) - (LPM_REGNO 0) ; implicit target register of LPM - (TMP_REGNO 0) ; temporary register r0 - (ZERO_REGNO 1) ; zero register r1 + [(REG_X 26) + (REG_Y 28) + (REG_Z 30) + (REG_W 24) + (REG_SP 32) + (LPM_REGNO 0) ; implicit target register of LPM + (TMP_REGNO 0) ; temporary register r0 + (ZERO_REGNO 1) ; zero register r1 ]) (define_c_enum "unspec" @@ -69,6 +69,7 @@ UNSPEC_COPYSIGN UNSPEC_IDENTITY UNSPEC_INSERT_BITS + UNSPEC_MEMORY_BARRIER ]) (define_c_enum "unspecv" @@ -123,10 +124,10 @@ (const_int 2043))) (const_int 3) (const_int 4))) - (eq_attr "type" "xcall") - (if_then_else (match_test "!AVR_HAVE_JMP_CALL") - (const_int 1) - (const_int 2))] + (eq_attr "type" "xcall") + (if_then_else (match_test "!AVR_HAVE_JMP_CALL") + (const_int 1) + (const_int 2))] (const_int 2))) ;; Lengths of several insns are adjusted in avr.c:adjust_insn_length(). @@ -231,6 +232,9 @@ (define_code_iterator any_extend [sign_extend zero_extend]) (define_code_iterator any_extend2 [sign_extend zero_extend]) +(define_code_iterator xior [xor ior]) +(define_code_iterator eqne [eq ne]) + ;; Define code attributes (define_code_attr extend_su [(sign_extend "s") @@ -254,6 +258,8 @@ [(ashift "ashl") (ashiftrt "ashr") (lshiftrt "lshr") + (ior "ior") + (xor "xor") (rotate "rotl")]) ;;======================================================================== @@ -267,13 +273,13 @@ (define_expand "nonlocal_goto_receiver" [(set (reg:HI REG_Y) - (unspec_volatile:HI [(const_int 0)] UNSPECV_GOTO_RECEIVER))] + (unspec_volatile:HI [(const_int 0)] UNSPECV_GOTO_RECEIVER))] "" { emit_move_insn (virtual_stack_vars_rtx, - gen_rtx_PLUS (Pmode, hard_frame_pointer_rtx, - gen_int_mode (STARTING_FRAME_OFFSET, - Pmode))); + gen_rtx_PLUS (Pmode, hard_frame_pointer_rtx, + gen_int_mode (STARTING_FRAME_OFFSET, + Pmode))); /* This might change the hard frame pointer in ways that aren't apparent to early optimization passes, so force a clobber. */ emit_clobber (hard_frame_pointer_rtx); @@ -338,7 +344,7 @@ { rtx part = simplify_gen_subreg (QImode, operands[0], <MODE>mode, i); if (part != const0_rtx) - part = force_reg (QImode, part); + part = force_reg (QImode, part); emit_insn (gen_pushqi1 (part)); } DONE; @@ -358,6 +364,11 @@ ;;======================================================================== ;; Move stuff around +;; "loadqi_libgcc" +;; "loadhi_libgcc" +;; "loadpsi_libgcc" +;; "loadsi_libgcc" +;; "loadsf_libgcc" (define_expand "load<mode>_libgcc" [(set (match_dup 3) (match_dup 2)) @@ -372,7 +383,12 @@ operands[1] = replace_equiv_address (operands[1], operands[3]); set_mem_addr_space (operands[1], ADDR_SPACE_FLASH); }) - + +;; "load_qi_libgcc" +;; "load_hi_libgcc" +;; "load_psi_libgcc" +;; "load_si_libgcc" +;; "load_sf_libgcc" (define_insn "load_<mode>_libgcc" [(set (reg:MOVMODE 22) (match_operand:MOVMODE 0 "memory_operand" "m,m"))] @@ -413,9 +429,15 @@ DONE; }) +;; "xloadqi_A" +;; "xloadhi_A" +;; "xloadpsi_A" +;; "xloadsi_A" +;; "xloadsf_A" (define_insn_and_split "xload<mode>_A" [(set (match_operand:MOVMODE 0 "register_operand" "=r") (match_operand:MOVMODE 1 "memory_operand" "m")) + (clobber (reg:MOVMODE 22)) (clobber (reg:QI 21)) (clobber (reg:HI REG_Z))] "can_create_pseudo_p() @@ -456,11 +478,14 @@ { return avr_out_xload (insn, operands, NULL); } - [(set_attr "length" "3,4") + [(set_attr "length" "4,4") (set_attr "adjust_len" "*,xload") (set_attr "isa" "lpmx,lpm") (set_attr "cc" "none")]) +;; R21:Z : 24-bit source address +;; R22 : 1-4 byte output + ;; "xload_qi_libgcc" ;; "xload_hi_libgcc" ;; "xload_psi_libgcc" @@ -559,7 +584,7 @@ (define_insn "*reload_inqi" [(set (match_operand:QI 0 "register_operand" "=l") - (match_operand:QI 1 "immediate_operand" "i")) + (match_operand:QI 1 "immediate_operand" "i")) (clobber (match_operand:QI 2 "register_operand" "=&d"))] "reload_completed" "ldi %2,lo8(%1) @@ -570,12 +595,12 @@ (define_peephole2 [(match_scratch:QI 2 "d") (set (match_operand:QI 0 "l_register_operand" "") - (match_operand:QI 1 "immediate_operand" ""))] + (match_operand:QI 1 "immediate_operand" ""))] "(operands[1] != const0_rtx && operands[1] != const1_rtx && operands[1] != constm1_rtx)" [(parallel [(set (match_dup 0) (match_dup 1)) - (clobber (match_dup 2))])] + (clobber (match_dup 2))])] "") ;;============================================================================ @@ -583,23 +608,26 @@ ;; Move register $1 to the Stack Pointer register SP. ;; This insn is emit during function prologue/epilogue generation. -;; $2 = 0: We know that IRQs are off -;; $2 = 1: We know that IRQs are on -;; Remaining cases when the state of the I-Flag is unknown are -;; handled by generic movhi insn. +;; $2 = 0: We know that IRQs are off +;; $2 = 1: We know that IRQs are on +;; $2 = 2: SP has 8 bits only, IRQ state does not matter +;; $2 = -1: We don't know anything about IRQ on/off +;; Always write SP via unspec, see PR50063 (define_insn "movhi_sp_r" - [(set (match_operand:HI 0 "stack_register_operand" "=q,q,q") - (unspec_volatile:HI [(match_operand:HI 1 "register_operand" "r,r,r") - (match_operand:HI 2 "const_int_operand" "L,P,LP")] + [(set (match_operand:HI 0 "stack_register_operand" "=q,q,q,q,q") + (unspec_volatile:HI [(match_operand:HI 1 "register_operand" "r,r,r,r,r") + (match_operand:HI 2 "const_int_operand" "L,P,N,K,LPN")] UNSPECV_WRITE_SP))] - "!AVR_HAVE_8BIT_SP" + "" "@ - out __SP_H__,%B1\;out __SP_L__,%A1 - cli\;out __SP_H__,%B1\;sei\;out __SP_L__,%A1 - out __SP_L__,%A1\;out __SP_H__,%B1" - [(set_attr "length" "2,4,2") - (set_attr "isa" "no_xmega,no_xmega,xmega") + out %B0,%B1\;out %A0,%A1 + cli\;out %B0,%B1\;sei\;out %A0,%A1 + in __tmp_reg__,__SREG__\;cli\;out %B0,%B1\;out __SREG__,__tmp_reg__\;out %A0,%A1 + out %A0,%A1 + out %A0,%A1\;out %B0,%B1" + [(set_attr "length" "2,4,5,1,2") + (set_attr "isa" "no_xmega,no_xmega,no_xmega,*,xmega") (set_attr "cc" "none")]) (define_peephole2 @@ -609,7 +637,7 @@ "(operands[1] != const0_rtx && operands[1] != constm1_rtx)" [(parallel [(set (match_dup 0) (match_dup 1)) - (clobber (match_dup 2))])] + (clobber (match_dup 2))])] "") ;; '*' because it is not used in rtl generation, only in above peephole @@ -712,7 +740,7 @@ && operands[1] != constm1_rtx" [(parallel [(set (match_dup 0) (match_dup 1)) - (clobber (match_dup 2))])] + (clobber (match_dup 2))])] "") ;; '*' because it is not used in rtl generation. @@ -752,7 +780,7 @@ "(operands[1] != const0_rtx && operands[1] != constm1_rtx)" [(parallel [(set (match_dup 0) (match_dup 1)) - (clobber (match_dup 2))])] + (clobber (match_dup 2))])] "") ;; '*' because it is not used in rtl generation. @@ -841,24 +869,23 @@ (define_mode_attr MOVMEM_r_d [(QI "r") (HI "wd")]) -;; $0, $4 : & dest (REG_X) -;; $1, $5 : & src (REG_Z) -;; $2 : Address Space -;; $3, $7 : Loop register -;; $6 : Scratch register +;; $0 : Address Space +;; $1, $2 : Loop register +;; R30 : source address +;; R26 : destination address ;; "movmem_qi" ;; "movmem_hi" (define_insn "movmem_<mode>" - [(set (mem:BLK (match_operand:HI 0 "register_operand" "x")) - (mem:BLK (match_operand:HI 1 "register_operand" "z"))) - (unspec [(match_operand:QI 2 "const_int_operand" "n")] + [(set (mem:BLK (reg:HI REG_X)) + (mem:BLK (reg:HI REG_Z))) + (unspec [(match_operand:QI 0 "const_int_operand" "n")] UNSPEC_MOVMEM) - (use (match_operand:QIHI 3 "register_operand" "<MOVMEM_r_d>")) - (clobber (match_operand:HI 4 "register_operand" "=0")) - (clobber (match_operand:HI 5 "register_operand" "=1")) - (clobber (match_operand:QI 6 "register_operand" "=&r")) - (clobber (match_operand:QIHI 7 "register_operand" "=3"))] + (use (match_operand:QIHI 1 "register_operand" "<MOVMEM_r_d>")) + (clobber (reg:HI REG_X)) + (clobber (reg:HI REG_Z)) + (clobber (reg:QI LPM_REGNO)) + (clobber (match_operand:QIHI 2 "register_operand" "=1"))] "" { return avr_out_movmem (insn, operands, NULL); @@ -866,26 +893,28 @@ [(set_attr "adjust_len" "movmem") (set_attr "cc" "clobber")]) -;; Ditto and -;; $3, $7 : Loop register = R24 -;; $8, $9 : hh8 (& src) = R23 -;; $10 : RAMPZ_ADDR + +;; $0 : Address Space +;; $1 : RAMPZ RAM address +;; R24 : #bytes and loop register +;; R23:Z : 24-bit source address +;; R26 : 16-bit destination address ;; "movmemx_qi" ;; "movmemx_hi" (define_insn "movmemx_<mode>" - [(set (mem:BLK (match_operand:HI 0 "register_operand" "x")) - (mem:BLK (lo_sum:PSI (match_operand:QI 8 "register_operand" "r") - (match_operand:HI 1 "register_operand" "z")))) - (unspec [(match_operand:QI 2 "const_int_operand" "n")] + [(set (mem:BLK (reg:HI REG_X)) + (mem:BLK (lo_sum:PSI (reg:QI 23) + (reg:HI REG_Z)))) + (unspec [(match_operand:QI 0 "const_int_operand" "n")] UNSPEC_MOVMEM) - (use (match_operand:QIHI 3 "register_operand" "w")) - (clobber (match_operand:HI 4 "register_operand" "=0")) - (clobber (match_operand:HI 5 "register_operand" "=1")) - (clobber (match_operand:QI 6 "register_operand" "=&r")) - (clobber (match_operand:HI 7 "register_operand" "=3")) - (clobber (match_operand:QI 9 "register_operand" "=8")) - (clobber (mem:QI (match_operand:QI 10 "io_address_operand" "n")))] + (use (reg:QIHI 24)) + (clobber (reg:HI REG_X)) + (clobber (reg:HI REG_Z)) + (clobber (reg:QI LPM_REGNO)) + (clobber (reg:HI 24)) + (clobber (reg:QI 23)) + (clobber (mem:QI (match_operand:QI 1 "io_address_operand" "n")))] "" "%~call __movmemx_<mode>" [(set_attr "type" "xcall") @@ -1005,8 +1034,8 @@ (define_expand "addhi3" [(set (match_operand:HI 0 "register_operand" "") - (plus:HI (match_operand:HI 1 "register_operand" "") - (match_operand:HI 2 "nonmemory_operand" "")))] + (plus:HI (match_operand:HI 1 "register_operand" "") + (match_operand:HI 2 "nonmemory_operand" "")))] "" { if (CONST_INT_P (operands[2])) @@ -1069,15 +1098,16 @@ (set_attr "adjust_len" "addto_sp")]) (define_insn "*addhi3" - [(set (match_operand:HI 0 "register_operand" "=r,d,d") - (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0") - (match_operand:HI 2 "nonmemory_operand" "r,s,n")))] + [(set (match_operand:HI 0 "register_operand" "=r,d,!w,d") + (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0 ,0") + (match_operand:HI 2 "nonmemory_operand" "r,s,IJ,n")))] "" { static const char * const asm_code[] = { "add %A0,%A2\;adc %B0,%B2", "subi %A0,lo8(-(%2))\;sbci %B0,hi8(-(%2))", + "", "" }; @@ -1086,9 +1116,9 @@ return avr_out_plus_noclobber (operands, NULL, NULL); } - [(set_attr "length" "2,2,2") - (set_attr "adjust_len" "*,*,out_plus_noclobber") - (set_attr "cc" "set_n,set_czn,out_plus_noclobber")]) + [(set_attr "length" "2,2,2,2") + (set_attr "adjust_len" "*,*,out_plus_noclobber,out_plus_noclobber") + (set_attr "cc" "set_n,set_czn,out_plus_noclobber,out_plus_noclobber")]) ;; Adding a constant to NO_LD_REGS might have lead to a reload of ;; that constant to LD_REGS. We don't add a scratch to *addhi3 @@ -1126,10 +1156,10 @@ (clobber (match_dup 2))])]) (define_insn "addhi3_clobber" - [(set (match_operand:HI 0 "register_operand" "=d,l") - (plus:HI (match_operand:HI 1 "register_operand" "%0,0") - (match_operand:HI 2 "const_int_operand" "n,n"))) - (clobber (match_scratch:QI 3 "=X,&d"))] + [(set (match_operand:HI 0 "register_operand" "=!w,d,r") + (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0") + (match_operand:HI 2 "const_int_operand" "IJ,n,n"))) + (clobber (match_scratch:QI 3 "=X,X,&d"))] "" { gcc_assert (REGNO (operands[0]) == REGNO (operands[1])); @@ -1286,7 +1316,7 @@ (define_insn "subhi3" [(set (match_operand:HI 0 "register_operand" "=r,d") (minus:HI (match_operand:HI 1 "register_operand" "0,0") - (match_operand:HI 2 "nonmemory_operand" "r,i")))] + (match_operand:HI 2 "nonmemory_operand" "r,i")))] "" "@ sub %A0,%A2\;sbc %B0,%B2 @@ -1348,8 +1378,8 @@ (define_expand "mulqi3" [(set (match_operand:QI 0 "register_operand" "") - (mult:QI (match_operand:QI 1 "register_operand" "") - (match_operand:QI 2 "register_operand" "")))] + (mult:QI (match_operand:QI 1 "register_operand" "") + (match_operand:QI 2 "register_operand" "")))] "" { if (!AVR_HAVE_MUL) @@ -1361,8 +1391,8 @@ (define_insn "*mulqi3_enh" [(set (match_operand:QI 0 "register_operand" "=r") - (mult:QI (match_operand:QI 1 "register_operand" "r") - (match_operand:QI 2 "register_operand" "r")))] + (mult:QI (match_operand:QI 1 "register_operand" "r") + (match_operand:QI 2 "register_operand" "r")))] "AVR_HAVE_MUL" "mul %1,%2 mov %0,r0 @@ -1374,7 +1404,7 @@ [(set (reg:QI 24) (match_operand:QI 1 "register_operand" "")) (set (reg:QI 22) (match_operand:QI 2 "register_operand" "")) (parallel [(set (reg:QI 24) (mult:QI (reg:QI 24) (reg:QI 22))) - (clobber (reg:QI 22))]) + (clobber (reg:QI 22))]) (set (match_operand:QI 0 "register_operand" "") (reg:QI 24))] "" "") @@ -1680,6 +1710,29 @@ ;; Handle small constants +;; Special case of a += 2*b as frequently seen with accesses to int arrays. +;; This is shorter, faster than MUL and has lower register pressure. + +(define_insn_and_split "*umaddqihi4.2" + [(set (match_operand:HI 0 "register_operand" "=r") + (plus:HI (mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "r")) + (const_int 2)) + (match_operand:HI 2 "register_operand" "r")))] + "!reload_completed + && !reg_overlap_mentioned_p (operands[0], operands[1])" + { gcc_unreachable(); } + "&& 1" + [(set (match_dup 0) + (match_dup 2)) + ; *addhi3_zero_extend + (set (match_dup 0) + (plus:HI (zero_extend:HI (match_dup 1)) + (match_dup 0))) + ; *addhi3_zero_extend + (set (match_dup 0) + (plus:HI (zero_extend:HI (match_dup 1)) + (match_dup 0)))]) + ;; "umaddqihi4.uconst" ;; "maddqihi4.sconst" (define_insn_and_split "*<extend_u>maddqihi4.<extend_su>const" @@ -2057,8 +2110,8 @@ (define_insn "*mulhi3_enh" [(set (match_operand:HI 0 "register_operand" "=&r") - (mult:HI (match_operand:HI 1 "register_operand" "r") - (match_operand:HI 2 "register_operand" "r")))] + (mult:HI (match_operand:HI 1 "register_operand" "r") + (match_operand:HI 2 "register_operand" "r")))] "AVR_HAVE_MUL" { return REGNO (operands[1]) == REGNO (operands[2]) @@ -2072,8 +2125,8 @@ [(set (reg:HI 24) (match_operand:HI 1 "register_operand" "")) (set (reg:HI 22) (match_operand:HI 2 "register_operand" "")) (parallel [(set (reg:HI 24) (mult:HI (reg:HI 24) (reg:HI 22))) - (clobber (reg:HI 22)) - (clobber (reg:QI 21))]) + (clobber (reg:HI 22)) + (clobber (reg:QI 21))]) (set (match_operand:HI 0 "register_operand" "") (reg:HI 24))] "" "") @@ -2434,9 +2487,9 @@ [(set (reg:QI 24) (match_dup 1)) (set (reg:QI 22) (match_dup 2)) (parallel [(set (reg:QI 24) (div:QI (reg:QI 24) (reg:QI 22))) - (set (reg:QI 25) (mod:QI (reg:QI 24) (reg:QI 22))) - (clobber (reg:QI 22)) - (clobber (reg:QI 23))]) + (set (reg:QI 25) (mod:QI (reg:QI 24) (reg:QI 22))) + (clobber (reg:QI 22)) + (clobber (reg:QI 23))]) (set (match_dup 0) (reg:QI 24)) (set (match_dup 3) (reg:QI 25))] "") @@ -2455,7 +2508,7 @@ [(parallel [(set (match_operand:QI 0 "pseudo_register_operand" "") (udiv:QI (match_operand:QI 1 "pseudo_register_operand" "") (match_operand:QI 2 "pseudo_register_operand" ""))) - (set (match_operand:QI 3 "pseudo_register_operand" "") + (set (match_operand:QI 3 "pseudo_register_operand" "") (umod:QI (match_dup 1) (match_dup 2))) (clobber (reg:QI 22)) (clobber (reg:QI 23)) @@ -2467,8 +2520,8 @@ [(set (reg:QI 24) (match_dup 1)) (set (reg:QI 22) (match_dup 2)) (parallel [(set (reg:QI 24) (udiv:QI (reg:QI 24) (reg:QI 22))) - (set (reg:QI 25) (umod:QI (reg:QI 24) (reg:QI 22))) - (clobber (reg:QI 23))]) + (set (reg:QI 25) (umod:QI (reg:QI 24) (reg:QI 22))) + (clobber (reg:QI 23))]) (set (match_dup 0) (reg:QI 24)) (set (match_dup 3) (reg:QI 25))] "") @@ -2498,9 +2551,9 @@ [(set (reg:HI 24) (match_dup 1)) (set (reg:HI 22) (match_dup 2)) (parallel [(set (reg:HI 22) (div:HI (reg:HI 24) (reg:HI 22))) - (set (reg:HI 24) (mod:HI (reg:HI 24) (reg:HI 22))) - (clobber (reg:HI 26)) - (clobber (reg:QI 21))]) + (set (reg:HI 24) (mod:HI (reg:HI 24) (reg:HI 22))) + (clobber (reg:HI 26)) + (clobber (reg:QI 21))]) (set (match_dup 0) (reg:HI 22)) (set (match_dup 3) (reg:HI 24))] "") @@ -2519,7 +2572,7 @@ [(parallel [(set (match_operand:HI 0 "pseudo_register_operand" "") (udiv:HI (match_operand:HI 1 "pseudo_register_operand" "") (match_operand:HI 2 "pseudo_register_operand" ""))) - (set (match_operand:HI 3 "pseudo_register_operand" "") + (set (match_operand:HI 3 "pseudo_register_operand" "") (umod:HI (match_dup 1) (match_dup 2))) (clobber (reg:QI 21)) (clobber (reg:HI 22)) @@ -2531,9 +2584,9 @@ [(set (reg:HI 24) (match_dup 1)) (set (reg:HI 22) (match_dup 2)) (parallel [(set (reg:HI 22) (udiv:HI (reg:HI 24) (reg:HI 22))) - (set (reg:HI 24) (umod:HI (reg:HI 24) (reg:HI 22))) - (clobber (reg:HI 26)) - (clobber (reg:QI 21))]) + (set (reg:HI 24) (umod:HI (reg:HI 24) (reg:HI 22))) + (clobber (reg:HI 26)) + (clobber (reg:QI 21))]) (set (match_dup 0) (reg:HI 22)) (set (match_dup 3) (reg:HI 24))] "") @@ -2764,9 +2817,9 @@ [(set (reg:SI 22) (match_dup 1)) (set (reg:SI 18) (match_dup 2)) (parallel [(set (reg:SI 18) (div:SI (reg:SI 22) (reg:SI 18))) - (set (reg:SI 22) (mod:SI (reg:SI 22) (reg:SI 18))) - (clobber (reg:HI 26)) - (clobber (reg:HI 30))]) + (set (reg:SI 22) (mod:SI (reg:SI 22) (reg:SI 18))) + (clobber (reg:HI 26)) + (clobber (reg:HI 30))]) (set (match_dup 0) (reg:SI 18)) (set (match_dup 3) (reg:SI 22))] "") @@ -2797,9 +2850,9 @@ [(set (reg:SI 22) (match_dup 1)) (set (reg:SI 18) (match_dup 2)) (parallel [(set (reg:SI 18) (udiv:SI (reg:SI 22) (reg:SI 18))) - (set (reg:SI 22) (umod:SI (reg:SI 22) (reg:SI 18))) - (clobber (reg:HI 26)) - (clobber (reg:HI 30))]) + (set (reg:SI 22) (umod:SI (reg:SI 22) (reg:SI 18))) + (clobber (reg:HI 26)) + (clobber (reg:HI 30))]) (set (match_dup 0) (reg:SI 18)) (set (match_dup 3) (reg:SI 22))] "") @@ -2886,10 +2939,10 @@ (define_peephole2 ; andi [(set (match_operand:QI 0 "d_register_operand" "") (and:QI (match_dup 0) - (match_operand:QI 1 "const_int_operand" ""))) + (match_operand:QI 1 "const_int_operand" ""))) (set (match_dup 0) (and:QI (match_dup 0) - (match_operand:QI 2 "const_int_operand" "")))] + (match_operand:QI 2 "const_int_operand" "")))] "" [(set (match_dup 0) (and:QI (match_dup 0) (match_dup 1)))] { @@ -3230,8 +3283,8 @@ (define_split ; ashlqi3_const4 [(set (match_operand:QI 0 "d_register_operand" "") - (ashift:QI (match_dup 0) - (const_int 4)))] + (ashift:QI (match_dup 0) + (const_int 4)))] "" [(set (match_dup 0) (rotate:QI (match_dup 0) (const_int 4))) (set (match_dup 0) (and:QI (match_dup 0) (const_int -16)))] @@ -3239,8 +3292,8 @@ (define_split ; ashlqi3_const5 [(set (match_operand:QI 0 "d_register_operand" "") - (ashift:QI (match_dup 0) - (const_int 5)))] + (ashift:QI (match_dup 0) + (const_int 5)))] "" [(set (match_dup 0) (rotate:QI (match_dup 0) (const_int 4))) (set (match_dup 0) (ashift:QI (match_dup 0) (const_int 1))) @@ -3249,8 +3302,8 @@ (define_split ; ashlqi3_const6 [(set (match_operand:QI 0 "d_register_operand" "") - (ashift:QI (match_dup 0) - (const_int 6)))] + (ashift:QI (match_dup 0) + (const_int 6)))] "" [(set (match_dup 0) (rotate:QI (match_dup 0) (const_int 4))) (set (match_dup 0) (ashift:QI (match_dup 0) (const_int 2))) @@ -3379,8 +3432,8 @@ (define_peephole2 ; ashlqi3_l_const4 [(set (match_operand:QI 0 "l_register_operand" "") - (ashift:QI (match_dup 0) - (const_int 4))) + (ashift:QI (match_dup 0) + (const_int 4))) (match_scratch:QI 1 "d")] "" [(set (match_dup 0) (rotate:QI (match_dup 0) (const_int 4))) @@ -3390,8 +3443,8 @@ (define_peephole2 ; ashlqi3_l_const5 [(set (match_operand:QI 0 "l_register_operand" "") - (ashift:QI (match_dup 0) - (const_int 5))) + (ashift:QI (match_dup 0) + (const_int 5))) (match_scratch:QI 1 "d")] "" [(set (match_dup 0) (rotate:QI (match_dup 0) (const_int 4))) @@ -3402,8 +3455,8 @@ (define_peephole2 ; ashlqi3_l_const6 [(set (match_operand:QI 0 "l_register_operand" "") - (ashift:QI (match_dup 0) - (const_int 6))) + (ashift:QI (match_dup 0) + (const_int 6))) (match_scratch:QI 1 "d")] "" [(set (match_dup 0) (rotate:QI (match_dup 0) (const_int 4))) @@ -3415,11 +3468,11 @@ (define_peephole2 [(match_scratch:QI 3 "d") (set (match_operand:HI 0 "register_operand" "") - (ashift:HI (match_operand:HI 1 "register_operand" "") - (match_operand:QI 2 "const_int_operand" "")))] + (ashift:HI (match_operand:HI 1 "register_operand" "") + (match_operand:QI 2 "const_int_operand" "")))] "" [(parallel [(set (match_dup 0) (ashift:HI (match_dup 1) (match_dup 2))) - (clobber (match_dup 3))])] + (clobber (match_dup 3))])] "") (define_insn "*ashlhi3_const" @@ -3438,11 +3491,11 @@ (define_peephole2 [(match_scratch:QI 3 "d") (set (match_operand:SI 0 "register_operand" "") - (ashift:SI (match_operand:SI 1 "register_operand" "") - (match_operand:QI 2 "const_int_operand" "")))] + (ashift:SI (match_operand:SI 1 "register_operand" "") + (match_operand:QI 2 "const_int_operand" "")))] "" [(parallel [(set (match_dup 0) (ashift:SI (match_dup 1) (match_dup 2))) - (clobber (match_dup 3))])] + (clobber (match_dup 3))])] "") (define_insn "*ashlsi3_const" @@ -3553,11 +3606,11 @@ (define_peephole2 [(match_scratch:QI 3 "d") (set (match_operand:HI 0 "register_operand" "") - (ashiftrt:HI (match_operand:HI 1 "register_operand" "") - (match_operand:QI 2 "const_int_operand" "")))] + (ashiftrt:HI (match_operand:HI 1 "register_operand" "") + (match_operand:QI 2 "const_int_operand" "")))] "" [(parallel [(set (match_dup 0) (ashiftrt:HI (match_dup 1) (match_dup 2))) - (clobber (match_dup 3))])] + (clobber (match_dup 3))])] "") (define_insn "*ashrhi3_const" @@ -3576,11 +3629,11 @@ (define_peephole2 [(match_scratch:QI 3 "d") (set (match_operand:SI 0 "register_operand" "") - (ashiftrt:SI (match_operand:SI 1 "register_operand" "") - (match_operand:QI 2 "const_int_operand" "")))] + (ashiftrt:SI (match_operand:SI 1 "register_operand" "") + (match_operand:QI 2 "const_int_operand" "")))] "" [(parallel [(set (match_dup 0) (ashiftrt:SI (match_dup 1) (match_dup 2))) - (clobber (match_dup 3))])] + (clobber (match_dup 3))])] "") (define_insn "*ashrsi3_const" @@ -3606,8 +3659,8 @@ (define_split ; lshrqi3_const4 [(set (match_operand:QI 0 "d_register_operand" "") - (lshiftrt:QI (match_dup 0) - (const_int 4)))] + (lshiftrt:QI (match_dup 0) + (const_int 4)))] "" [(set (match_dup 0) (rotate:QI (match_dup 0) (const_int 4))) (set (match_dup 0) (and:QI (match_dup 0) (const_int 15)))] @@ -3615,8 +3668,8 @@ (define_split ; lshrqi3_const5 [(set (match_operand:QI 0 "d_register_operand" "") - (lshiftrt:QI (match_dup 0) - (const_int 5)))] + (lshiftrt:QI (match_dup 0) + (const_int 5)))] "" [(set (match_dup 0) (rotate:QI (match_dup 0) (const_int 4))) (set (match_dup 0) (lshiftrt:QI (match_dup 0) (const_int 1))) @@ -3625,8 +3678,8 @@ (define_split ; lshrqi3_const6 [(set (match_operand:QI 0 "d_register_operand" "") - (lshiftrt:QI (match_dup 0) - (const_int 6)))] + (lshiftrt:QI (match_dup 0) + (const_int 6)))] "" [(set (match_dup 0) (rotate:QI (match_dup 0) (const_int 4))) (set (match_dup 0) (lshiftrt:QI (match_dup 0) (const_int 2))) @@ -3685,8 +3738,8 @@ (define_peephole2 ; lshrqi3_l_const4 [(set (match_operand:QI 0 "l_register_operand" "") - (lshiftrt:QI (match_dup 0) - (const_int 4))) + (lshiftrt:QI (match_dup 0) + (const_int 4))) (match_scratch:QI 1 "d")] "" [(set (match_dup 0) (rotate:QI (match_dup 0) (const_int 4))) @@ -3696,8 +3749,8 @@ (define_peephole2 ; lshrqi3_l_const5 [(set (match_operand:QI 0 "l_register_operand" "") - (lshiftrt:QI (match_dup 0) - (const_int 5))) + (lshiftrt:QI (match_dup 0) + (const_int 5))) (match_scratch:QI 1 "d")] "" [(set (match_dup 0) (rotate:QI (match_dup 0) (const_int 4))) @@ -3708,8 +3761,8 @@ (define_peephole2 ; lshrqi3_l_const6 [(set (match_operand:QI 0 "l_register_operand" "") - (lshiftrt:QI (match_dup 0) - (const_int 6))) + (lshiftrt:QI (match_dup 0) + (const_int 6))) (match_scratch:QI 1 "d")] "" [(set (match_dup 0) (rotate:QI (match_dup 0) (const_int 4))) @@ -3721,11 +3774,11 @@ (define_peephole2 [(match_scratch:QI 3 "d") (set (match_operand:HI 0 "register_operand" "") - (lshiftrt:HI (match_operand:HI 1 "register_operand" "") - (match_operand:QI 2 "const_int_operand" "")))] + (lshiftrt:HI (match_operand:HI 1 "register_operand" "") + (match_operand:QI 2 "const_int_operand" "")))] "" [(parallel [(set (match_dup 0) (lshiftrt:HI (match_dup 1) (match_dup 2))) - (clobber (match_dup 3))])] + (clobber (match_dup 3))])] "") (define_insn "*lshrhi3_const" @@ -3744,11 +3797,11 @@ (define_peephole2 [(match_scratch:QI 3 "d") (set (match_operand:SI 0 "register_operand" "") - (lshiftrt:SI (match_operand:SI 1 "register_operand" "") - (match_operand:QI 2 "const_int_operand" "")))] + (lshiftrt:SI (match_operand:SI 1 "register_operand" "") + (match_operand:QI 2 "const_int_operand" "")))] "" [(parallel [(set (match_dup 0) (lshiftrt:SI (match_dup 1) (match_dup 2))) - (clobber (match_dup 3))])] + (clobber (match_dup 3))])] "") (define_insn "*lshrsi3_const" @@ -3807,15 +3860,14 @@ (set_attr "cc" "set_n")]) (define_insn "neghi2" - [(set (match_operand:HI 0 "register_operand" "=!d,r,&r") - (neg:HI (match_operand:HI 1 "register_operand" "0,0,r")))] + [(set (match_operand:HI 0 "register_operand" "=r,&r") + (neg:HI (match_operand:HI 1 "register_operand" "0,r")))] "" "@ - com %B0\;neg %A0\;sbci %B0,lo8(-1) - com %B0\;neg %A0\;sbc %B0,__zero_reg__\;inc %B0 + neg %B0\;neg %A0\;sbc %B0,__zero_reg__ clr %A0\;clr %B0\;sub %A0,%A1\;sbc %B0,%B1" - [(set_attr "length" "3,4,4") - (set_attr "cc" "set_czn,set_n,set_czn")]) + [(set_attr "length" "3,4") + (set_attr "cc" "set_czn")]) (define_insn "negpsi2" [(set (match_operand:PSI 0 "register_operand" "=!d,r,&r") @@ -4130,7 +4182,7 @@ (define_insn "*negated_tstqi" [(set (cc0) (compare (neg:QI (match_operand:QI 0 "register_operand" "r")) - (const_int 0)))] + (const_int 0)))] "(!flag_wrapv && !flag_trapv && flag_strict_overflow)" "cp __zero_reg__,%0" [(set_attr "cc" "compare") @@ -4139,7 +4191,7 @@ (define_insn "*reversed_tstqi" [(set (cc0) (compare (const_int 0) - (match_operand:QI 0 "register_operand" "r")))] + (match_operand:QI 0 "register_operand" "r")))] "" "cp __zero_reg__,%0" [(set_attr "cc" "compare") @@ -4148,7 +4200,7 @@ (define_insn "*negated_tsthi" [(set (cc0) (compare (neg:HI (match_operand:HI 0 "register_operand" "r")) - (const_int 0)))] + (const_int 0)))] "(!flag_wrapv && !flag_trapv && flag_strict_overflow)" "cp __zero_reg__,%A0 cpc __zero_reg__,%B0" @@ -4160,7 +4212,7 @@ (define_insn "*reversed_tsthi" [(set (cc0) (compare (const_int 0) - (match_operand:HI 0 "register_operand" "r"))) + (match_operand:HI 0 "register_operand" "r"))) (clobber (match_scratch:QI 1 "=X"))] "" "cp __zero_reg__,%A0 @@ -4190,7 +4242,7 @@ (define_insn "*negated_tstsi" [(set (cc0) (compare (neg:SI (match_operand:SI 0 "register_operand" "r")) - (const_int 0)))] + (const_int 0)))] "(!flag_wrapv && !flag_trapv && flag_strict_overflow)" "cp __zero_reg__,%A0 cpc __zero_reg__,%B0 @@ -4202,7 +4254,7 @@ (define_insn "*reversed_tstsi" [(set (cc0) (compare (const_int 0) - (match_operand:SI 0 "register_operand" "r"))) + (match_operand:SI 0 "register_operand" "r"))) (clobber (match_scratch:QI 1 "=X"))] "" "cp __zero_reg__,%A0 @@ -4216,7 +4268,7 @@ (define_insn "*cmpqi" [(set (cc0) (compare (match_operand:QI 0 "register_operand" "r,r,d") - (match_operand:QI 1 "nonmemory_operand" "L,r,i")))] + (match_operand:QI 1 "nonmemory_operand" "L,r,i")))] "" "@ tst %0 @@ -4321,9 +4373,9 @@ (define_expand "cbranchsi4" [(parallel [(set (cc0) - (compare (match_operand:SI 1 "register_operand" "") - (match_operand:SI 2 "nonmemory_operand" ""))) - (clobber (match_scratch:QI 4 ""))]) + (compare (match_operand:SI 1 "register_operand" "") + (match_operand:SI 2 "nonmemory_operand" ""))) + (clobber (match_scratch:QI 4 ""))]) (set (pc) (if_then_else (match_operator 0 "ordered_comparison_operator" [(cc0) @@ -4346,9 +4398,9 @@ (define_expand "cbranchhi4" [(parallel [(set (cc0) - (compare (match_operand:HI 1 "register_operand" "") - (match_operand:HI 2 "nonmemory_operand" ""))) - (clobber (match_scratch:QI 4 ""))]) + (compare (match_operand:HI 1 "register_operand" "") + (match_operand:HI 2 "nonmemory_operand" ""))) + (clobber (match_scratch:QI 4 ""))]) (set (pc) (if_then_else (match_operator 0 "ordered_comparison_operator" [(cc0) @@ -4377,25 +4429,25 @@ (define_insn "*sbrx_branch<mode>" [(set (pc) (if_then_else - (match_operator 0 "eqne_operator" - [(zero_extract:QIDI - (match_operand:VOID 1 "register_operand" "r") - (const_int 1) - (match_operand 2 "const_int_operand" "n")) - (const_int 0)]) - (label_ref (match_operand 3 "" "")) - (pc)))] + (match_operator 0 "eqne_operator" + [(zero_extract:QIDI + (match_operand:VOID 1 "register_operand" "r") + (const_int 1) + (match_operand 2 "const_int_operand" "n")) + (const_int 0)]) + (label_ref (match_operand 3 "" "")) + (pc)))] "" { return avr_out_sbxx_branch (insn, operands); } [(set (attr "length") - (if_then_else (and (ge (minus (pc) (match_dup 3)) (const_int -2046)) - (le (minus (pc) (match_dup 3)) (const_int 2046))) - (const_int 2) - (if_then_else (match_test "!AVR_HAVE_JMP_CALL") - (const_int 2) - (const_int 4)))) + (if_then_else (and (ge (minus (pc) (match_dup 3)) (const_int -2046)) + (le (minus (pc) (match_dup 3)) (const_int 2046))) + (const_int 2) + (if_then_else (match_test "!AVR_HAVE_JMP_CALL") + (const_int 2) + (const_int 4)))) (set_attr "cc" "clobber")]) ;; Same test based on Bitwise AND RTL. Keep this incase gcc changes patterns. @@ -4405,13 +4457,13 @@ (define_insn "*sbrx_and_branch<mode>" [(set (pc) (if_then_else - (match_operator 0 "eqne_operator" - [(and:QISI - (match_operand:QISI 1 "register_operand" "r") - (match_operand:QISI 2 "single_one_operand" "n")) - (const_int 0)]) - (label_ref (match_operand 3 "" "")) - (pc)))] + (match_operator 0 "eqne_operator" + [(and:QISI + (match_operand:QISI 1 "register_operand" "r") + (match_operand:QISI 2 "single_one_operand" "n")) + (const_int 0)]) + (label_ref (match_operand 3 "" "")) + (pc)))] "" { HOST_WIDE_INT bitnumber; @@ -4420,99 +4472,99 @@ return avr_out_sbxx_branch (insn, operands); } [(set (attr "length") - (if_then_else (and (ge (minus (pc) (match_dup 3)) (const_int -2046)) - (le (minus (pc) (match_dup 3)) (const_int 2046))) - (const_int 2) - (if_then_else (match_test "!AVR_HAVE_JMP_CALL") - (const_int 2) - (const_int 4)))) + (if_then_else (and (ge (minus (pc) (match_dup 3)) (const_int -2046)) + (le (minus (pc) (match_dup 3)) (const_int 2046))) + (const_int 2) + (if_then_else (match_test "!AVR_HAVE_JMP_CALL") + (const_int 2) + (const_int 4)))) (set_attr "cc" "clobber")]) ;; Convert sign tests to bit 7/15/31 tests that match the above insns. (define_peephole2 [(set (cc0) (compare (match_operand:QI 0 "register_operand" "") - (const_int 0))) + (const_int 0))) (set (pc) (if_then_else (ge (cc0) (const_int 0)) - (label_ref (match_operand 1 "" "")) - (pc)))] + (label_ref (match_operand 1 "" "")) + (pc)))] "" [(set (pc) (if_then_else (eq (zero_extract:HI (match_dup 0) - (const_int 1) - (const_int 7)) - (const_int 0)) - (label_ref (match_dup 1)) - (pc)))] + (const_int 1) + (const_int 7)) + (const_int 0)) + (label_ref (match_dup 1)) + (pc)))] "") (define_peephole2 [(set (cc0) (compare (match_operand:QI 0 "register_operand" "") - (const_int 0))) + (const_int 0))) (set (pc) (if_then_else (lt (cc0) (const_int 0)) - (label_ref (match_operand 1 "" "")) - (pc)))] + (label_ref (match_operand 1 "" "")) + (pc)))] "" [(set (pc) (if_then_else (ne (zero_extract:HI (match_dup 0) - (const_int 1) - (const_int 7)) - (const_int 0)) - (label_ref (match_dup 1)) - (pc)))] + (const_int 1) + (const_int 7)) + (const_int 0)) + (label_ref (match_dup 1)) + (pc)))] "") (define_peephole2 [(parallel [(set (cc0) (compare (match_operand:HI 0 "register_operand" "") - (const_int 0))) - (clobber (match_operand:HI 2 ""))]) + (const_int 0))) + (clobber (match_operand:HI 2 ""))]) (set (pc) (if_then_else (ge (cc0) (const_int 0)) - (label_ref (match_operand 1 "" "")) - (pc)))] + (label_ref (match_operand 1 "" "")) + (pc)))] "" [(set (pc) (if_then_else (eq (and:HI (match_dup 0) (const_int -32768)) - (const_int 0)) - (label_ref (match_dup 1)) - (pc)))] + (const_int 0)) + (label_ref (match_dup 1)) + (pc)))] "") (define_peephole2 [(parallel [(set (cc0) (compare (match_operand:HI 0 "register_operand" "") - (const_int 0))) - (clobber (match_operand:HI 2 ""))]) + (const_int 0))) + (clobber (match_operand:HI 2 ""))]) (set (pc) (if_then_else (lt (cc0) (const_int 0)) - (label_ref (match_operand 1 "" "")) - (pc)))] + (label_ref (match_operand 1 "" "")) + (pc)))] "" [(set (pc) (if_then_else (ne (and:HI (match_dup 0) (const_int -32768)) - (const_int 0)) - (label_ref (match_dup 1)) - (pc)))] + (const_int 0)) + (label_ref (match_dup 1)) + (pc)))] "") (define_peephole2 [(parallel [(set (cc0) (compare (match_operand:SI 0 "register_operand" "") - (const_int 0))) - (clobber (match_operand:SI 2 ""))]) + (const_int 0))) + (clobber (match_operand:SI 2 ""))]) (set (pc) (if_then_else (ge (cc0) (const_int 0)) - (label_ref (match_operand 1 "" "")) - (pc)))] + (label_ref (match_operand 1 "" "")) + (pc)))] "" [(set (pc) (if_then_else (eq (and:SI (match_dup 0) (match_dup 2)) - (const_int 0)) - (label_ref (match_dup 1)) - (pc)))] + (const_int 0)) + (label_ref (match_dup 1)) + (pc)))] "operands[2] = GEN_INT (-2147483647 - 1);") (define_peephole2 [(parallel [(set (cc0) (compare (match_operand:SI 0 "register_operand" "") - (const_int 0))) - (clobber (match_operand:SI 2 ""))]) + (const_int 0))) + (clobber (match_operand:SI 2 ""))]) (set (pc) (if_then_else (lt (cc0) (const_int 0)) - (label_ref (match_operand 1 "" "")) - (pc)))] + (label_ref (match_operand 1 "" "")) + (pc)))] "" [(set (pc) (if_then_else (ne (and:SI (match_dup 0) (match_dup 2)) - (const_int 0)) - (label_ref (match_dup 1)) - (pc)))] + (const_int 0)) + (label_ref (match_dup 1)) + (pc)))] "operands[2] = GEN_INT (-2147483647 - 1);") ;; ************************************************************************ @@ -4577,8 +4629,8 @@ (define_insn "rvbranch" [(set (pc) (if_then_else (match_operator 1 "simple_comparison_operator" - [(cc0) - (const_int 0)]) + [(cc0) + (const_int 0)]) (pc) (label_ref (match_operand 0 "" ""))))] "" @@ -4591,8 +4643,8 @@ (define_insn "difficult_rvbranch" [(set (pc) (if_then_else (match_operator 1 "difficult_comparison_operator" - [(cc0) - (const_int 0)]) + [(cc0) + (const_int 0)]) (pc) (label_ref (match_operand 0 "" ""))))] "" @@ -4615,7 +4667,7 @@ : "rjmp %x0"; } [(set (attr "length") - (if_then_else (match_operand 0 "symbol_ref_operand" "") + (if_then_else (match_operand 0 "symbol_ref_operand" "") (if_then_else (match_test "!AVR_HAVE_JMP_CALL") (const_int 1) (const_int 2)) @@ -4759,25 +4811,25 @@ (define_expand "casesi" [(set (match_dup 6) - (minus:HI (subreg:HI (match_operand:SI 0 "register_operand" "") 0) - (match_operand:HI 1 "register_operand" ""))) + (minus:HI (subreg:HI (match_operand:SI 0 "register_operand" "") 0) + (match_operand:HI 1 "register_operand" ""))) (parallel [(set (cc0) - (compare (match_dup 6) - (match_operand:HI 2 "register_operand" ""))) - (clobber (match_scratch:QI 9 ""))]) + (compare (match_dup 6) + (match_operand:HI 2 "register_operand" ""))) + (clobber (match_scratch:QI 9 ""))]) (set (pc) - (if_then_else (gtu (cc0) - (const_int 0)) - (label_ref (match_operand 4 "" "")) - (pc))) + (if_then_else (gtu (cc0) + (const_int 0)) + (label_ref (match_operand 4 "" "")) + (pc))) (set (match_dup 6) - (plus:HI (match_dup 6) (label_ref (match_operand:HI 3 "" "")))) + (plus:HI (match_dup 6) (label_ref (match_operand:HI 3 "" "")))) (parallel [(set (pc) (unspec:HI [(match_dup 6)] UNSPEC_INDEX_JMP)) - (use (label_ref (match_dup 3))) - (clobber (match_dup 6))])] + (use (label_ref (match_dup 3))) + (clobber (match_dup 6))])] "" { operands[6] = gen_reg_rtx (HImode); @@ -4823,21 +4875,21 @@ ;; Lower half of the I/O space - use sbic/sbis directly. (define_insn "*sbix_branch" [(set (pc) - (if_then_else - (match_operator 0 "eqne_operator" - [(zero_extract:QIHI - (mem:QI (match_operand 1 "low_io_address_operand" "n")) - (const_int 1) - (match_operand 2 "const_int_operand" "n")) - (const_int 0)]) - (label_ref (match_operand 3 "" "")) - (pc)))] + (if_then_else + (match_operator 0 "eqne_operator" + [(zero_extract:QIHI + (mem:QI (match_operand 1 "low_io_address_operand" "n")) + (const_int 1) + (match_operand 2 "const_int_operand" "n")) + (const_int 0)]) + (label_ref (match_operand 3 "" "")) + (pc)))] "" { return avr_out_sbxx_branch (insn, operands); } [(set (attr "length") - (if_then_else (and (ge (minus (pc) (match_dup 3)) (const_int -2046)) + (if_then_else (and (ge (minus (pc) (match_dup 3)) (const_int -2046)) (le (minus (pc) (match_dup 3)) (const_int 2046))) (const_int 2) (if_then_else (match_test "!AVR_HAVE_JMP_CALL") @@ -4848,12 +4900,12 @@ ;; Tests of bit 7 are pessimized to sign tests, so we need this too... (define_insn "*sbix_branch_bit7" [(set (pc) - (if_then_else - (match_operator 0 "gelt_operator" - [(mem:QI (match_operand 1 "low_io_address_operand" "n")) - (const_int 0)]) - (label_ref (match_operand 2 "" "")) - (pc)))] + (if_then_else + (match_operator 0 "gelt_operator" + [(mem:QI (match_operand 1 "low_io_address_operand" "n")) + (const_int 0)]) + (label_ref (match_operand 2 "" "")) + (pc)))] "" { operands[3] = operands[2]; @@ -4861,7 +4913,7 @@ return avr_out_sbxx_branch (insn, operands); } [(set (attr "length") - (if_then_else (and (ge (minus (pc) (match_dup 2)) (const_int -2046)) + (if_then_else (and (ge (minus (pc) (match_dup 2)) (const_int -2046)) (le (minus (pc) (match_dup 2)) (const_int 2046))) (const_int 2) (if_then_else (match_test "!AVR_HAVE_JMP_CALL") @@ -4872,21 +4924,21 @@ ;; Upper half of the I/O space - read port to __tmp_reg__ and use sbrc/sbrs. (define_insn "*sbix_branch_tmp" [(set (pc) - (if_then_else - (match_operator 0 "eqne_operator" - [(zero_extract:QIHI - (mem:QI (match_operand 1 "high_io_address_operand" "n")) - (const_int 1) - (match_operand 2 "const_int_operand" "n")) - (const_int 0)]) - (label_ref (match_operand 3 "" "")) - (pc)))] + (if_then_else + (match_operator 0 "eqne_operator" + [(zero_extract:QIHI + (mem:QI (match_operand 1 "high_io_address_operand" "n")) + (const_int 1) + (match_operand 2 "const_int_operand" "n")) + (const_int 0)]) + (label_ref (match_operand 3 "" "")) + (pc)))] "" { return avr_out_sbxx_branch (insn, operands); } [(set (attr "length") - (if_then_else (and (ge (minus (pc) (match_dup 3)) (const_int -2046)) + (if_then_else (and (ge (minus (pc) (match_dup 3)) (const_int -2046)) (le (minus (pc) (match_dup 3)) (const_int 2045))) (const_int 3) (if_then_else (match_test "!AVR_HAVE_JMP_CALL") @@ -4896,12 +4948,12 @@ (define_insn "*sbix_branch_tmp_bit7" [(set (pc) - (if_then_else - (match_operator 0 "gelt_operator" - [(mem:QI (match_operand 1 "high_io_address_operand" "n")) - (const_int 0)]) - (label_ref (match_operand 2 "" "")) - (pc)))] + (if_then_else + (match_operator 0 "gelt_operator" + [(mem:QI (match_operand 1 "high_io_address_operand" "n")) + (const_int 0)]) + (label_ref (match_operand 2 "" "")) + (pc)))] "" { operands[3] = operands[2]; @@ -4909,17 +4961,17 @@ return avr_out_sbxx_branch (insn, operands); } [(set (attr "length") - (if_then_else (and (ge (minus (pc) (match_dup 2)) (const_int -2046)) - (le (minus (pc) (match_dup 2)) (const_int 2045))) - (const_int 3) + (if_then_else (and (ge (minus (pc) (match_dup 2)) (const_int -2046)) + (le (minus (pc) (match_dup 2)) (const_int 2045))) + (const_int 3) (if_then_else (match_test "!AVR_HAVE_JMP_CALL") - (const_int 3) - (const_int 5)))) + (const_int 3) + (const_int 5)))) (set_attr "cc" "clobber")]) ;; ************************* Peepholes ******************************** -(define_peephole +(define_peephole ; "*dec-and-branchsi!=-1.d.clobber" [(parallel [(set (match_operand:SI 0 "d_register_operand" "") (plus:SI (match_dup 0) (const_int -1))) @@ -4929,12 +4981,14 @@ (const_int -1))) (clobber (match_operand:QI 1 "d_register_operand" ""))]) (set (pc) - (if_then_else (ne (cc0) - (const_int 0)) + (if_then_else (eqne (cc0) + (const_int 0)) (label_ref (match_operand 2 "" "")) (pc)))] "" { + const char *op; + int jump_mode; CC_STATUS_INIT; if (test_hard_reg_class (ADDW_REGS, operands[0])) output_asm_insn ("sbiw %0,1" CR_TAB @@ -4946,35 +5000,38 @@ "sbc %C0,__zero_reg__" CR_TAB "sbc %D0,__zero_reg__", operands); - switch (avr_jump_mode (operands[2], insn)) + jump_mode = avr_jump_mode (operands[2], insn); + op = ((EQ == <CODE>) ^ (jump_mode == 1)) ? "brcc" : "brcs"; + operands[1] = gen_rtx_CONST_STRING (VOIDmode, op); + + switch (jump_mode) { - case 1: - return "brcc %2"; - case 2: - return "brcs .+2\;rjmp %2"; - case 3: - return "brcs .+4\;jmp %2"; + case 1: return "%1 %2"; + case 2: return "%1 .+2\;rjmp %2"; + case 3: return "%1 .+4\;jmp %2"; } gcc_unreachable(); return ""; }) -(define_peephole +(define_peephole ; "*dec-and-branchhi!=-1" [(set (match_operand:HI 0 "d_register_operand" "") (plus:HI (match_dup 0) (const_int -1))) - (parallel - [(set (cc0) - (compare (match_dup 0) - (const_int -1))) - (clobber (match_operand:QI 1 "d_register_operand" ""))]) + (parallel [(set (cc0) + (compare (match_dup 0) + (const_int -1))) + (clobber (match_operand:QI 1 "d_register_operand" ""))]) (set (pc) - (if_then_else (ne (cc0) (const_int 0)) - (label_ref (match_operand 2 "" "")) - (pc)))] + (if_then_else (eqne (cc0) + (const_int 0)) + (label_ref (match_operand 2 "" "")) + (pc)))] "" { + const char *op; + int jump_mode; CC_STATUS_INIT; if (test_hard_reg_class (ADDW_REGS, operands[0])) output_asm_insn ("sbiw %0,1", operands); @@ -4982,47 +5039,132 @@ output_asm_insn ("subi %A0,1" CR_TAB "sbc %B0,__zero_reg__", operands); - switch (avr_jump_mode (operands[2], insn)) + jump_mode = avr_jump_mode (operands[2], insn); + op = ((EQ == <CODE>) ^ (jump_mode == 1)) ? "brcc" : "brcs"; + operands[1] = gen_rtx_CONST_STRING (VOIDmode, op); + + switch (jump_mode) { - case 1: - return "brcc %2"; - case 2: - return "brcs .+2\;rjmp %2"; - case 3: - return "brcs .+4\;jmp %2"; + case 1: return "%1 %2"; + case 2: return "%1 .+2\;rjmp %2"; + case 3: return "%1 .+4\;jmp %2"; + } + + gcc_unreachable(); + return ""; + }) + +;; Same as above but with clobber flavour of addhi3 +(define_peephole ; "*dec-and-branchhi!=-1.d.clobber" + [(parallel [(set (match_operand:HI 0 "d_register_operand" "") + (plus:HI (match_dup 0) + (const_int -1))) + (clobber (scratch:QI))]) + (parallel [(set (cc0) + (compare (match_dup 0) + (const_int -1))) + (clobber (match_operand:QI 1 "d_register_operand" ""))]) + (set (pc) + (if_then_else (eqne (cc0) + (const_int 0)) + (label_ref (match_operand 2 "" "")) + (pc)))] + "" + { + const char *op; + int jump_mode; + CC_STATUS_INIT; + if (test_hard_reg_class (ADDW_REGS, operands[0])) + output_asm_insn ("sbiw %0,1", operands); + else + output_asm_insn ("subi %A0,1" CR_TAB + "sbc %B0,__zero_reg__", operands); + + jump_mode = avr_jump_mode (operands[2], insn); + op = ((EQ == <CODE>) ^ (jump_mode == 1)) ? "brcc" : "brcs"; + operands[1] = gen_rtx_CONST_STRING (VOIDmode, op); + + switch (jump_mode) + { + case 1: return "%1 %2"; + case 2: return "%1 .+2\;rjmp %2"; + case 3: return "%1 .+4\;jmp %2"; + } + + gcc_unreachable(); + return ""; + }) + +;; Same as above but with clobber flavour of addhi3 +(define_peephole ; "*dec-and-branchhi!=-1.l.clobber" + [(parallel [(set (match_operand:HI 0 "l_register_operand" "") + (plus:HI (match_dup 0) + (const_int -1))) + (clobber (match_operand:QI 3 "d_register_operand" ""))]) + (parallel [(set (cc0) + (compare (match_dup 0) + (const_int -1))) + (clobber (match_operand:QI 1 "d_register_operand" ""))]) + (set (pc) + (if_then_else (eqne (cc0) + (const_int 0)) + (label_ref (match_operand 2 "" "")) + (pc)))] + "" + { + const char *op; + int jump_mode; + CC_STATUS_INIT; + output_asm_insn ("ldi %3,1" CR_TAB + "sub %A0,%3" CR_TAB + "sbc %B0,__zero_reg__", operands); + + jump_mode = avr_jump_mode (operands[2], insn); + op = ((EQ == <CODE>) ^ (jump_mode == 1)) ? "brcc" : "brcs"; + operands[1] = gen_rtx_CONST_STRING (VOIDmode, op); + + switch (jump_mode) + { + case 1: return "%1 %2"; + case 2: return "%1 .+2\;rjmp %2"; + case 3: return "%1 .+4\;jmp %2"; } gcc_unreachable(); return ""; }) -(define_peephole +(define_peephole ; "*dec-and-branchqi!=-1" [(set (match_operand:QI 0 "d_register_operand" "") (plus:QI (match_dup 0) (const_int -1))) (set (cc0) - (compare (match_dup 0) - (const_int -1))) + (compare (match_dup 0) + (const_int -1))) (set (pc) - (if_then_else (ne (cc0) (const_int 0)) - (label_ref (match_operand 1 "" "")) - (pc)))] + (if_then_else (eqne (cc0) + (const_int 0)) + (label_ref (match_operand 1 "" "")) + (pc)))] "" { + const char *op; + int jump_mode; CC_STATUS_INIT; cc_status.value1 = operands[0]; cc_status.flags |= CC_OVERFLOW_UNUSABLE; output_asm_insn ("subi %A0,1", operands); - switch (avr_jump_mode (operands[1], insn)) + jump_mode = avr_jump_mode (operands[1], insn); + op = ((EQ == <CODE>) ^ (jump_mode == 1)) ? "brcc" : "brcs"; + operands[0] = gen_rtx_CONST_STRING (VOIDmode, op); + + switch (jump_mode) { - case 1: - return "brcc %1"; - case 2: - return "brcs .+2\;rjmp %1"; - case 3: - return "brcs .+4\;jmp %1"; + case 1: return "%0 %1"; + case 2: return "%0 .+2\;rjmp %1"; + case 3: return "%0 .+4\;jmp %1"; } gcc_unreachable(); @@ -5072,8 +5214,8 @@ (set (pc) (if_then_else (ne (cc0) (const_int 0)) - (label_ref (match_operand 0 "" "")) - (pc)))] + (label_ref (match_operand 0 "" "")) + (pc)))] "!AVR_HAVE_JMP_CALL || !avr_current_device->errata_skip" { @@ -5097,18 +5239,36 @@ (set_attr "length" "1")]) ;; Enable Interrupts -(define_insn "enable_interrupt" - [(unspec_volatile [(const_int 1)] UNSPECV_ENABLE_IRQS)] +(define_expand "enable_interrupt" + [(clobber (const_int 0))] "" - "sei" - [(set_attr "length" "1") - (set_attr "cc" "none")]) + { + rtx mem = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode)); + MEM_VOLATILE_P (mem) = 1; + emit_insn (gen_cli_sei (const1_rtx, mem)); + DONE; + }) ;; Disable Interrupts -(define_insn "disable_interrupt" - [(unspec_volatile [(const_int 0)] UNSPECV_ENABLE_IRQS)] +(define_expand "disable_interrupt" + [(clobber (const_int 0))] + "" + { + rtx mem = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode)); + MEM_VOLATILE_P (mem) = 1; + emit_insn (gen_cli_sei (const0_rtx, mem)); + DONE; + }) + +(define_insn "cli_sei" + [(unspec_volatile [(match_operand:QI 0 "const_int_operand" "L,P")] + UNSPECV_ENABLE_IRQS) + (set (match_operand:BLK 1 "" "") + (unspec:BLK [(match_dup 1)] UNSPEC_MEMORY_BARRIER))] "" - "cli" + "@ + cli + sei" [(set_attr "length" "1") (set_attr "cc" "none")]) @@ -5215,10 +5375,12 @@ [(unspec_volatile [(match_operand:QI 0 "const_int_operand" "n") (const_int 1)] UNSPECV_DELAY_CYCLES) - (clobber (match_scratch:QI 1 "=&d"))] + (set (match_operand:BLK 1 "" "") + (unspec:BLK [(match_dup 1)] UNSPEC_MEMORY_BARRIER)) + (clobber (match_scratch:QI 2 "=&d"))] "" - "ldi %1,lo8(%0) - 1: dec %1 + "ldi %2,lo8(%0) + 1: dec %2 brne 1b" [(set_attr "length" "3") (set_attr "cc" "clobber")]) @@ -5227,11 +5389,13 @@ [(unspec_volatile [(match_operand:HI 0 "const_int_operand" "n") (const_int 2)] UNSPECV_DELAY_CYCLES) - (clobber (match_scratch:HI 1 "=&w"))] + (set (match_operand:BLK 1 "" "") + (unspec:BLK [(match_dup 1)] UNSPEC_MEMORY_BARRIER)) + (clobber (match_scratch:HI 2 "=&w"))] "" - "ldi %A1,lo8(%0) - ldi %B1,hi8(%0) - 1: sbiw %A1,1 + "ldi %A2,lo8(%0) + ldi %B2,hi8(%0) + 1: sbiw %A2,1 brne 1b" [(set_attr "length" "4") (set_attr "cc" "clobber")]) @@ -5240,16 +5404,18 @@ [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "n") (const_int 3)] UNSPECV_DELAY_CYCLES) - (clobber (match_scratch:QI 1 "=&d")) + (set (match_operand:BLK 1 "" "") + (unspec:BLK [(match_dup 1)] UNSPEC_MEMORY_BARRIER)) (clobber (match_scratch:QI 2 "=&d")) - (clobber (match_scratch:QI 3 "=&d"))] + (clobber (match_scratch:QI 3 "=&d")) + (clobber (match_scratch:QI 4 "=&d"))] "" - "ldi %1,lo8(%0) - ldi %2,hi8(%0) - ldi %3,hlo8(%0) - 1: subi %1,1 - sbci %2,0 + "ldi %2,lo8(%0) + ldi %3,hi8(%0) + ldi %4,hlo8(%0) + 1: subi %2,1 sbci %3,0 + sbci %4,0 brne 1b" [(set_attr "length" "7") (set_attr "cc" "clobber")]) @@ -5258,19 +5424,21 @@ [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "n") (const_int 4)] UNSPECV_DELAY_CYCLES) - (clobber (match_scratch:QI 1 "=&d")) + (set (match_operand:BLK 1 "" "") + (unspec:BLK [(match_dup 1)] UNSPEC_MEMORY_BARRIER)) (clobber (match_scratch:QI 2 "=&d")) (clobber (match_scratch:QI 3 "=&d")) - (clobber (match_scratch:QI 4 "=&d"))] - "" - "ldi %1,lo8(%0) - ldi %2,hi8(%0) - ldi %3,hlo8(%0) - ldi %4,hhi8(%0) - 1: subi %1,1 - sbci %2,0 + (clobber (match_scratch:QI 4 "=&d")) + (clobber (match_scratch:QI 5 "=&d"))] + "" + "ldi %2,lo8(%0) + ldi %3,hi8(%0) + ldi %4,hlo8(%0) + ldi %5,hhi8(%0) + 1: subi %2,1 sbci %3,0 sbci %4,0 + sbci %5,0 brne 1b" [(set_attr "length" "9") (set_attr "cc" "clobber")]) @@ -5292,6 +5460,53 @@ (set_attr "cc" "clobber")]) +;; __builtin_avr_flash_segment + +;; Just a helper for the next "official" expander. + +(define_expand "flash_segment1" + [(set (match_operand:QI 0 "register_operand" "") + (subreg:QI (match_operand:PSI 1 "register_operand" "") + 2)) + (set (cc0) + (compare (match_dup 0) + (const_int 0))) + (set (pc) + (if_then_else (ge (cc0) + (const_int 0)) + (label_ref (match_operand 2 "" "")) + (pc))) + (set (match_dup 0) + (const_int -1))]) + +(define_expand "flash_segment" + [(parallel [(match_operand:QI 0 "register_operand" "") + (match_operand:PSI 1 "register_operand" "")])] + "" + { + rtx label = gen_label_rtx (); + emit (gen_flash_segment1 (operands[0], operands[1], label)); + emit_label (label); + DONE; + }) + +;; Actually, it's too late now to work out address spaces known at compiletime. +;; Best place would be to fold ADDR_SPACE_CONVERT_EXPR in avr_fold_builtin. +;; However, avr_addr_space_convert can add some built-in knowledge for PSTR +;; so that ADDR_SPACE_CONVERT_EXPR in the built-in must not be resolved. + +(define_insn_and_split "*split.flash_segment" + [(set (match_operand:QI 0 "register_operand" "=d") + (subreg:QI (lo_sum:PSI (match_operand:QI 1 "nonmemory_operand" "ri") + (match_operand:HI 2 "register_operand" "r")) + 2))] + "" + { gcc_unreachable(); } + "" + [(set (match_dup 0) + (match_dup 1))]) + + ;; Parity ;; Postpone expansion of 16-bit parity to libgcc call until after combine for @@ -5609,9 +5824,22 @@ ;; CPU instructions ;; NOP taking 1 or 2 Ticks -(define_insn "nopv" +(define_expand "nopv" + [(parallel [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "")] + UNSPECV_NOP) + (set (match_dup 1) + (unspec:BLK [(match_dup 1)] UNSPEC_MEMORY_BARRIER))])] + "" + { + operands[1] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode)); + MEM_VOLATILE_P (operands[1]) = 1; + }) + +(define_insn "*nopv" [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "P,K")] - UNSPECV_NOP)] + UNSPECV_NOP) + (set (match_operand:BLK 1 "" "") + (unspec:BLK [(match_dup 1)] UNSPEC_MEMORY_BARRIER))] "" "@ nop @@ -5620,16 +5848,40 @@ (set_attr "cc" "none")]) ;; SLEEP -(define_insn "sleep" - [(unspec_volatile [(const_int 0)] UNSPECV_SLEEP)] +(define_expand "sleep" + [(parallel [(unspec_volatile [(const_int 0)] UNSPECV_SLEEP) + (set (match_dup 0) + (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER))])] + "" + { + operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode)); + MEM_VOLATILE_P (operands[0]) = 1; + }) + +(define_insn "*sleep" + [(unspec_volatile [(const_int 0)] UNSPECV_SLEEP) + (set (match_operand:BLK 0 "" "") + (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER))] "" "sleep" [(set_attr "length" "1") (set_attr "cc" "none")]) ;; WDR -(define_insn "wdr" - [(unspec_volatile [(const_int 0)] UNSPECV_WDR)] +(define_expand "wdr" + [(parallel [(unspec_volatile [(const_int 0)] UNSPECV_WDR) + (set (match_dup 0) + (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER))])] + "" + { + operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode)); + MEM_VOLATILE_P (operands[0]) = 1; + }) + +(define_insn "*wdr" + [(unspec_volatile [(const_int 0)] UNSPECV_WDR) + (set (match_operand:BLK 0 "" "") + (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER))] "" "wdr" [(set_attr "length" "1") @@ -5884,24 +6136,28 @@ ;; in particular when subreg lowering (-fsplit-wide-types) is turned on. ;; That switch obfuscates things here and in many other places. -(define_insn_and_split "*ior<mode>qi.byte0" +;; "*iorhiqi.byte0" "*iorpsiqi.byte0" "*iorsiqi.byte0" +;; "*xorhiqi.byte0" "*xorpsiqi.byte0" "*xorsiqi.byte0" +(define_insn_and_split "*<code_stdname><mode>qi.byte0" [(set (match_operand:HISI 0 "register_operand" "=r") - (ior:HISI + (xior:HISI (zero_extend:HISI (match_operand:QI 1 "register_operand" "r")) (match_operand:HISI 2 "register_operand" "0")))] "" "#" "reload_completed" [(set (match_dup 3) - (ior:QI (match_dup 3) - (match_dup 1)))] + (xior:QI (match_dup 3) + (match_dup 1)))] { operands[3] = simplify_gen_subreg (QImode, operands[0], <MODE>mode, 0); }) -(define_insn_and_split "*ior<mode>qi.byte1-3" +;; "*iorhiqi.byte1-3" "*iorpsiqi.byte1-3" "*iorsiqi.byte1-3" +;; "*xorhiqi.byte1-3" "*xorpsiqi.byte1-3" "*xorsiqi.byte1-3" +(define_insn_and_split "*<code_stdname><mode>qi.byte1-3" [(set (match_operand:HISI 0 "register_operand" "=r") - (ior:HISI + (xior:HISI (ashift:HISI (zero_extend:HISI (match_operand:QI 1 "register_operand" "r")) (match_operand:QI 2 "const_8_16_24_operand" "n")) (match_operand:HISI 3 "register_operand" "0")))] @@ -5909,8 +6165,8 @@ "#" "&& reload_completed" [(set (match_dup 4) - (ior:QI (match_dup 4) - (match_dup 1)))] + (xior:QI (match_dup 4) + (match_dup 1)))] { int byteno = INTVAL(operands[2]) / BITS_PER_UNIT; operands[4] = simplify_gen_subreg (QImode, operands[0], <MODE>mode, byteno); diff --git a/gcc/config/avr/builtins.def b/gcc/config/avr/builtins.def new file mode 100644 index 00000000000..24537052eb0 --- /dev/null +++ b/gcc/config/avr/builtins.def @@ -0,0 +1,51 @@ +/* Copyright (C) 2012 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 3, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING3. If not see + <http://www.gnu.org/licenses/>. */ + +/* This file contains the definitions and documentation for the + builtins defined in the AVR part of the GNU compiler. + Befor including this file, define a macro + + DEF_BUILTIN(NAME, N_ARGS, ID, TYPE, ICODE) + + NAME: The name as visible by the user as a C string. + ID: An integer to identify the built-in. + N_ARGS: Number of input arguments. If special treatment is needed, + set to -1 and handle it by hand, see avr.c:avr_expand_builtin(). + TYPE: A tree node describing the prototype of the built-in. + ICODE: Insn code number for the insn attached to the built-in. + If special treatment is needed to expand the built-in, set to -1. +*/ + +/* Mapped to respective instruction. */ +DEF_BUILTIN ("__builtin_avr_nop", -1, AVR_BUILTIN_NOP, void_ftype_void, -1) +DEF_BUILTIN ("__builtin_avr_sei", 0, AVR_BUILTIN_SEI, void_ftype_void, CODE_FOR_enable_interrupt) +DEF_BUILTIN ("__builtin_avr_cli", 0, AVR_BUILTIN_CLI, void_ftype_void, CODE_FOR_disable_interrupt) +DEF_BUILTIN ("__builtin_avr_wdr", 0, AVR_BUILTIN_WDR, void_ftype_void, CODE_FOR_wdr) +DEF_BUILTIN ("__builtin_avr_sleep", 0, AVR_BUILTIN_SLEEP, void_ftype_void, CODE_FOR_sleep) + +/* Mapped to respective instruction but might alse be folded away + or emit as libgcc call if ISA does not provide the instruction. */ +DEF_BUILTIN ("__builtin_avr_swap", 1, AVR_BUILTIN_SWAP, uchar_ftype_uchar, CODE_FOR_rotlqi3_4) +DEF_BUILTIN ("__builtin_avr_fmul", 2, AVR_BUILTIN_FMUL, uint_ftype_uchar_uchar, CODE_FOR_fmul) +DEF_BUILTIN ("__builtin_avr_fmuls", 2, AVR_BUILTIN_FMULS, int_ftype_char_char, CODE_FOR_fmuls) +DEF_BUILTIN ("__builtin_avr_fmulsu", 2, AVR_BUILTIN_FMULSU, int_ftype_char_uchar, CODE_FOR_fmulsu) + +/* More complex stuff that cannot be mapped 1:1 to an instruction. */ +DEF_BUILTIN ("__builtin_avr_delay_cycles", -1, AVR_BUILTIN_DELAY_CYCLES, void_ftype_ulong, -1) +DEF_BUILTIN ("__builtin_avr_insert_bits", 3, AVR_BUILTIN_INSERT_BITS, uchar_ftype_ulong_uchar_uchar, CODE_FOR_insert_bits) +DEF_BUILTIN ("__builtin_avr_flash_segment", 1, AVR_BUILTIN_FLASH_SEGMENT, char_ftype_const_memx_ptr, CODE_FOR_flash_segment) diff --git a/gcc/config/avr/t-avr b/gcc/config/avr/t-avr index 732ca005688..e6b4adee182 100644 --- a/gcc/config/avr/t-avr +++ b/gcc/config/avr/t-avr @@ -34,6 +34,8 @@ avr-log.o: $(srcdir)/config/avr/avr-log.c \ $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(INPUT_H) $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< +avr.o avr-c.o: $(srcdir)/config/avr/builtins.def + # Files and Variables auto-generated from avr-mcus.def AVR_MCUS = $(srcdir)/config/avr/avr-mcus.def diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c index 28ec6ef0b0c..577f091a473 100644 --- a/gcc/config/bfin/bfin.c +++ b/gcc/config/bfin/bfin.c @@ -3411,14 +3411,12 @@ static bool hwloop_optimize (hwloop_info loop) { basic_block bb; - hwloop_info inner; rtx insn, last_insn; rtx loop_init, start_label, end_label; rtx iter_reg, scratchreg, scratch_init, scratch_init_insn; rtx lc_reg, lt_reg, lb_reg; rtx seq, seq_end; int length; - unsigned ix; bool clobber0, clobber1; if (loop->depth > MAX_LOOP_DEPTH) @@ -3840,12 +3838,11 @@ hwloop_fail (hwloop_info loop) static rtx hwloop_pattern_reg (rtx insn) { - rtx pat, reg; + rtx reg; if (!JUMP_P (insn) || recog_memoized (insn) != CODE_FOR_loop_end) return NULL_RTX; - pat = PATTERN (insn); reg = SET_DEST (XVECEXP (PATTERN (insn), 0, 1)); if (!REG_P (reg)) return NULL_RTX; @@ -3864,7 +3861,7 @@ static struct hw_doloop_hooks bfin_doloop_hooks = hardware loops are generated. */ static void -bfin_reorg_loops (FILE *dump_file) +bfin_reorg_loops (void) { reorg_loops (true, &bfin_doloop_hooks); } @@ -4601,7 +4598,7 @@ bfin_reorg (void) /* Doloop optimization */ if (cfun->machine->has_hardware_loops) - bfin_reorg_loops (dump_file); + bfin_reorg_loops (); workaround_speculation (); diff --git a/gcc/config/epiphany/epiphany.c b/gcc/config/epiphany/epiphany.c index aff3d1cde6d..422fe2fe795 100644 --- a/gcc/config/epiphany/epiphany.c +++ b/gcc/config/epiphany/epiphany.c @@ -1417,7 +1417,7 @@ epiphany_libcall_value (enum machine_mode mode, const_rtx fun ATTRIBUTE_UNUSED) return gen_rtx_REG (mode, 0); } -bool +static bool epiphany_function_value_regno_p (const unsigned int regno ATTRIBUTE_UNUSED) { return regno == 0; diff --git a/gcc/config/epiphany/epiphany.md b/gcc/config/epiphany/epiphany.md index 7f8f2a95231..b192153ccf4 100644 --- a/gcc/config/epiphany/epiphany.md +++ b/gcc/config/epiphany/epiphany.md @@ -1,6 +1,6 @@ ;; Machine description of the Adaptiva epiphany cpu for GNU C compiler ;; Copyright (C) 1994, 1997, 1998, 1999, 2000, 2004, 2005, 2007, 2009, 2010, -;; 2011 Free Software Foundation, Inc. +;; 2011, 2012 Free Software Foundation, Inc. ;; Contributed by Embecosm on behalf of Adapteva, Inc. ;; This file is part of GCC. @@ -2439,6 +2439,24 @@ emit_move_insn (operands[0], operands[1]); DONE; }) + +(define_expand "movmisalign<mode>" + [(set (match_operand:DWV2MODE 0 "nonimmediate_operand" "") + (match_operand:DWV2MODE 1 "general_operand" ""))] + "" +{ + rtx op00, op01, op10, op11; + + op00 = simplify_gen_subreg (<vmode_PART>mode, operands[0], <MODE>mode, 0); + op01 = simplify_gen_subreg (<vmode_PART>mode, operands[0], <MODE>mode, + UNITS_PER_WORD); + op10 = simplify_gen_subreg (<vmode_PART>mode, operands[1], <MODE>mode, 0); + op11 = simplify_gen_subreg (<vmode_PART>mode, operands[1], <MODE>mode, + UNITS_PER_WORD); + emit_move_insn (op00, op10); + emit_move_insn (op01, op11); + DONE; +}) (define_insn "nop" [(const_int 0)] diff --git a/gcc/config/i386/bdver1.md b/gcc/config/i386/bdver1.md index 3cde476b5fd..10f95ffa75e 100644 --- a/gcc/config/i386/bdver1.md +++ b/gcc/config/i386/bdver1.md @@ -123,50 +123,50 @@ ;; Jump instructions are executed in the branch unit completely transparent to us. (define_insn_reservation "bdver1_call" 0 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "call,callv")) "bdver1-double,bdver1-agu,bdver1-ieu") ;; PUSH mem is double path. (define_insn_reservation "bdver1_push" 1 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "push")) "bdver1-direct,bdver1-agu,bdver1-store") ;; POP r16/mem are double path. (define_insn_reservation "bdver1_pop" 1 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "pop")) "bdver1-direct,(bdver1-ieu+bdver1-load)") ;; LEAVE no latency info so far, assume same with amdfam10. (define_insn_reservation "bdver1_leave" 3 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "leave")) "bdver1-vector,(bdver1-ieu+bdver1-load)") ;; LEA executes in AGU unit with 1 cycle latency on BDVER1. (define_insn_reservation "bdver1_lea" 1 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "lea")) "bdver1-direct,bdver1-agu,nothing") ;; MUL executes in special multiplier unit attached to IEU1. (define_insn_reservation "bdver1_imul_DI" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "imul") (and (eq_attr "mode" "DI") (eq_attr "memory" "none,unknown")))) "bdver1-direct1,bdver1-ieu1,bdver1-mult,nothing,bdver1-ieu1") (define_insn_reservation "bdver1_imul" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "imul") (eq_attr "memory" "none,unknown"))) "bdver1-direct1,bdver1-ieu1,bdver1-mult,bdver1-ieu1") (define_insn_reservation "bdver1_imul_mem_DI" 10 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "imul") (and (eq_attr "mode" "DI") (eq_attr "memory" "load,both")))) "bdver1-direct1,bdver1-load,bdver1-ieu,bdver1-mult,nothing,bdver1-ieu") (define_insn_reservation "bdver1_imul_mem" 8 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "imul") (eq_attr "memory" "load,both"))) "bdver1-direct1,bdver1-load,bdver1-ieu,bdver1-mult,bdver1-ieu") @@ -178,13 +178,13 @@ ;; ??? Experiments show that the IDIV can overlap with roughly 6 cycles ;; of the other code. (define_insn_reservation "bdver1_idiv" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "idiv") (eq_attr "memory" "none,unknown"))) "bdver1-vector,(bdver1-ieu0*6+(bdver1-fpsched,bdver1-fvector))") (define_insn_reservation "bdver1_idiv_mem" 10 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "idiv") (eq_attr "memory" "load,both"))) "bdver1-vector,((bdver1-load,bdver1-ieu0*6)+(bdver1-fpsched,bdver1-fvector))") @@ -193,48 +193,48 @@ ;; as IDIV to create smaller automata. This probably does not matter much. ;; Using the same heuristics for bdver1 as amdfam10 and K8 with IDIV. (define_insn_reservation "bdver1_str" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "str") (eq_attr "memory" "load,both,store"))) "bdver1-vector,bdver1-load,bdver1-ieu0*6") ;; Integer instructions. (define_insn_reservation "bdver1_idirect" 1 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "bdver1_decode" "direct") (and (eq_attr "unit" "integer,unknown") (eq_attr "memory" "none,unknown")))) "bdver1-direct,bdver1-ieu") (define_insn_reservation "bdver1_ivector" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "bdver1_decode" "vector") (and (eq_attr "unit" "integer,unknown") (eq_attr "memory" "none,unknown")))) "bdver1-vector,bdver1-ieu,bdver1-ieu") (define_insn_reservation "bdver1_idirect_loadmov" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "imov") (eq_attr "memory" "load"))) "bdver1-direct,bdver1-load") (define_insn_reservation "bdver1_idirect_load" 5 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "bdver1_decode" "direct") (and (eq_attr "unit" "integer,unknown") (eq_attr "memory" "load")))) "bdver1-direct,bdver1-load,bdver1-ieu") (define_insn_reservation "bdver1_ivector_load" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "bdver1_decode" "vector") (and (eq_attr "unit" "integer,unknown") (eq_attr "memory" "load")))) "bdver1-vector,bdver1-load,bdver1-ieu,bdver1-ieu") (define_insn_reservation "bdver1_idirect_movstore" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "imov") (eq_attr "memory" "store"))) "bdver1-direct,bdver1-agu,bdver1-store") (define_insn_reservation "bdver1_idirect_both" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "bdver1_decode" "direct") (and (eq_attr "unit" "integer,unknown") (eq_attr "memory" "both")))) @@ -242,7 +242,7 @@ bdver1-ieu,bdver1-store, bdver1-store") (define_insn_reservation "bdver1_ivector_both" 5 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "bdver1_decode" "vector") (and (eq_attr "unit" "integer,unknown") (eq_attr "memory" "both")))) @@ -251,14 +251,14 @@ bdver1-ieu, bdver1-store") (define_insn_reservation "bdver1_idirect_store" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "bdver1_decode" "direct") (and (eq_attr "unit" "integer,unknown") (eq_attr "memory" "store")))) "bdver1-direct,(bdver1-ieu+bdver1-agu), bdver1-store") (define_insn_reservation "bdver1_ivector_store" 5 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "bdver1_decode" "vector") (and (eq_attr "unit" "integer,unknown") (eq_attr "memory" "store")))) @@ -267,113 +267,113 @@ ;; BDVER1 floating point units. (define_insn_reservation "bdver1_fldxf" 13 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "fmov") (and (eq_attr "memory" "load") (eq_attr "mode" "XF")))) "bdver1-vector,bdver1-fpload2,bdver1-fvector*9") (define_insn_reservation "bdver1_fld" 5 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "fmov") (eq_attr "memory" "load"))) "bdver1-direct,bdver1-fpload,bdver1-ffma") (define_insn_reservation "bdver1_fstxf" 8 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "fmov") (and (eq_attr "memory" "store,both") (eq_attr "mode" "XF")))) "bdver1-vector,(bdver1-fpsched+bdver1-agu),(bdver1-store2+(bdver1-fvector*6))") (define_insn_reservation "bdver1_fst" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "fmov") (eq_attr "memory" "store,both"))) "bdver1-double,(bdver1-fpsched+bdver1-agu),(bdver1-fsto+bdver1-store)") (define_insn_reservation "bdver1_fist" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "fistp,fisttp")) "bdver1-double,(bdver1-fpsched+bdver1-agu),(bdver1-fsto+bdver1-store)") (define_insn_reservation "bdver1_fmov_bdver1" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "fmov")) "bdver1-direct,bdver1-fpsched,bdver1-ffma") (define_insn_reservation "bdver1_fadd_load" 10 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "fop") (eq_attr "memory" "load"))) "bdver1-direct,bdver1-fpload,bdver1-ffma") (define_insn_reservation "bdver1_fadd" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "fop")) "bdver1-direct,bdver1-fpsched,bdver1-ffma") (define_insn_reservation "bdver1_fmul_load" 10 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "fmul") (eq_attr "memory" "load"))) "bdver1-double,bdver1-fpload,bdver1-ffma") (define_insn_reservation "bdver1_fmul" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "fmul")) "bdver1-direct,bdver1-fpsched,bdver1-ffma") (define_insn_reservation "bdver1_fsgn" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "fsgn")) "bdver1-direct,bdver1-fpsched,bdver1-ffma") (define_insn_reservation "bdver1_fdiv_load" 46 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "fdiv") (eq_attr "memory" "load"))) "bdver1-direct,bdver1-fpload,bdver1-ffma") (define_insn_reservation "bdver1_fdiv" 42 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "fdiv")) "bdver1-direct,bdver1-fpsched,bdver1-ffma") (define_insn_reservation "bdver1_fpspc_load" 103 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "fpspc") (eq_attr "memory" "load"))) "bdver1-vector,bdver1-fpload,bdver1-fvector") (define_insn_reservation "bdver1_fpspc" 100 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "fpspc") (eq_attr "memory" "load"))) "bdver1-vector,bdver1-fpload,bdver1-fvector") (define_insn_reservation "bdver1_fcmov_load" 17 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "fcmov") (eq_attr "memory" "load"))) "bdver1-vector,bdver1-fpload,bdver1-fvector") (define_insn_reservation "bdver1_fcmov" 15 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "fcmov")) "bdver1-vector,bdver1-fpsched,bdver1-fvector") (define_insn_reservation "bdver1_fcomi_load" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "fcmp") (and (eq_attr "bdver1_decode" "double") (eq_attr "memory" "load")))) "bdver1-double,bdver1-fpload,(bdver1-ffma | bdver1-fsto)") (define_insn_reservation "bdver1_fcomi" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "bdver1_decode" "double") (eq_attr "type" "fcmp"))) "bdver1-double,bdver1-fpsched,(bdver1-ffma | bdver1-fsto)") (define_insn_reservation "bdver1_fcom_load" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "fcmp") (eq_attr "memory" "load"))) "bdver1-direct,bdver1-fpload,bdver1-ffma") (define_insn_reservation "bdver1_fcom" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "fcmp")) "bdver1-direct,bdver1-fpsched,bdver1-ffma") (define_insn_reservation "bdver1_fxch" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "fxch")) "bdver1-direct,bdver1-fpsched,bdver1-ffma") ;; SSE loads. (define_insn_reservation "bdver1_ssevector_avx128_unaligned_load" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemov") (and (eq_attr "prefix" "vex") (and (eq_attr "movu" "1") @@ -381,139 +381,139 @@ (eq_attr "memory" "load")))))) "bdver1-direct,bdver1-fpload") (define_insn_reservation "bdver1_ssevector_avx256_unaligned_load" 5 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemov") (and (eq_attr "movu" "1") (and (eq_attr "mode" "V8SF,V4DF") (eq_attr "memory" "load"))))) "bdver1-double,bdver1-fpload") (define_insn_reservation "bdver1_ssevector_sse128_unaligned_load" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemov") (and (eq_attr "movu" "1") (and (eq_attr "mode" "V4SF,V2DF") (eq_attr "memory" "load"))))) "bdver1-direct,bdver1-fpload,bdver1-fmal") (define_insn_reservation "bdver1_ssevector_avx128_load" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemov") (and (eq_attr "prefix" "vex") (and (eq_attr "mode" "V4SF,V2DF,TI") (eq_attr "memory" "load"))))) "bdver1-direct,bdver1-fpload,bdver1-fmal") (define_insn_reservation "bdver1_ssevector_avx256_load" 5 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemov") (and (eq_attr "mode" "V8SF,V4DF,OI") (eq_attr "memory" "load")))) "bdver1-double,bdver1-fpload,bdver1-fmal") (define_insn_reservation "bdver1_ssevector_sse128_load" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemov") (and (eq_attr "mode" "V4SF,V2DF,TI") (eq_attr "memory" "load")))) "bdver1-direct,bdver1-fpload") (define_insn_reservation "bdver1_ssescalar_movq_load" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemov") (and (eq_attr "mode" "DI") (eq_attr "memory" "load")))) "bdver1-direct,bdver1-fpload,bdver1-fmal") (define_insn_reservation "bdver1_ssescalar_vmovss_load" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemov") (and (eq_attr "prefix" "vex") (and (eq_attr "mode" "SF") (eq_attr "memory" "load"))))) "bdver1-direct,bdver1-fpload") (define_insn_reservation "bdver1_ssescalar_sse128_load" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemov") (and (eq_attr "mode" "SF,DF") (eq_attr "memory" "load")))) "bdver1-direct,bdver1-fpload, bdver1-ffma") (define_insn_reservation "bdver1_mmxsse_load" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "mmxmov,ssemov") (eq_attr "memory" "load"))) "bdver1-direct,bdver1-fpload, bdver1-fmal") ;; SSE stores. (define_insn_reservation "bdver1_sse_store_avx256" 5 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemov") (and (eq_attr "mode" "V8SF,V4DF,OI") (eq_attr "memory" "store,both")))) "bdver1-double,(bdver1-fpsched+bdver1-agu),((bdver1-fsto+bdver1-store)*2)") (define_insn_reservation "bdver1_sse_store" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemov") (and (eq_attr "mode" "V4SF,V2DF,TI") (eq_attr "memory" "store,both")))) "bdver1-direct,(bdver1-fpsched+bdver1-agu),((bdver1-fsto+bdver1-store)*2)") (define_insn_reservation "bdver1_mmxsse_store_short" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "mmxmov,ssemov") (eq_attr "memory" "store,both"))) "bdver1-direct,(bdver1-fpsched+bdver1-agu),(bdver1-fsto+bdver1-store)") ;; Register moves. (define_insn_reservation "bdver1_ssevector_avx256" 3 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemov") (and (eq_attr "mode" "V8SF,V4DF,OI") (eq_attr "memory" "none")))) "bdver1-double,bdver1-fpsched,bdver1-fmal") (define_insn_reservation "bdver1_movss_movsd" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemov") (and (eq_attr "mode" "SF,DF") (eq_attr "memory" "none")))) "bdver1-direct,bdver1-fpsched,bdver1-ffma") (define_insn_reservation "bdver1_mmxssemov" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "mmxmov,ssemov") (eq_attr "memory" "none"))) "bdver1-direct,bdver1-fpsched,bdver1-fmal") ;; SSE logs. (define_insn_reservation "bdver1_sselog_load_256" 7 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "sselog,sselog1") (and (eq_attr "mode" "V8SF") (eq_attr "memory" "load")))) "bdver1-double,bdver1-fpload,bdver1-fmal") (define_insn_reservation "bdver1_sselog_256" 3 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "sselog,sselog1") (eq_attr "mode" "V8SF"))) "bdver1-double,bdver1-fpsched,bdver1-fmal") (define_insn_reservation "bdver1_sselog_load" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "sselog,sselog1") (eq_attr "memory" "load"))) "bdver1-direct,bdver1-fpload,bdver1-fxbar") (define_insn_reservation "bdver1_sselog" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "sselog,sselog1")) "bdver1-direct,bdver1-fpsched,bdver1-fxbar") ;; PCMP actually executes in FMAL. (define_insn_reservation "bdver1_ssecmp_load" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecmp") (eq_attr "memory" "load"))) "bdver1-direct,bdver1-fpload,bdver1-ffma") (define_insn_reservation "bdver1_ssecmp" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "ssecmp")) "bdver1-direct,bdver1-fpsched,bdver1-ffma") (define_insn_reservation "bdver1_ssecomi_load" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecomi") (eq_attr "memory" "load"))) "bdver1-double,bdver1-fpload,(bdver1-ffma | bdver1-fsto)") (define_insn_reservation "bdver1_ssecomi" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (eq_attr "type" "ssecomi")) "bdver1-double,bdver1-fpsched,(bdver1-ffma | bdver1-fsto)") @@ -522,7 +522,7 @@ ;; 256 bit conversion. (define_insn_reservation "bdver1_vcvtX2Y_avx256_load" 8 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "load") (ior (ior (match_operand:V4DF 0 "register_operand") @@ -533,7 +533,7 @@ (match_operand:V8SI 1 "nonimmediate_operand"))))))) "bdver1-vector,bdver1-fpload,bdver1-fvector") (define_insn_reservation "bdver1_vcvtX2Y_avx256" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "none") (ior (ior (match_operand:V4DF 0 "register_operand") @@ -545,40 +545,40 @@ "bdver1-vector,bdver1-fpsched,bdver1-fvector") ;; CVTSS2SD, CVTSD2SS. (define_insn_reservation "bdver1_ssecvt_cvtss2sd_load" 8 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "mode" "SF,DF") (eq_attr "memory" "load")))) "bdver1-direct,bdver1-fpload,bdver1-fcvt") (define_insn_reservation "bdver1_ssecvt_cvtss2sd" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "mode" "SF,DF") (eq_attr "memory" "none")))) "bdver1-direct,bdver1-fpsched,bdver1-fcvt") ;; CVTSI2SD, CVTSI2SS, CVTSI2SDQ, CVTSI2SSQ. (define_insn_reservation "bdver1_sseicvt_cvtsi2sd_load" 8 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "sseicvt") (and (eq_attr "mode" "SF,DF") (eq_attr "memory" "load")))) "bdver1-direct,bdver1-fpload,bdver1-fcvt") (define_insn_reservation "bdver1_sseicvt_cvtsi2sd" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "sseicvt") (and (eq_attr "mode" "SF,DF") (eq_attr "memory" "none")))) "bdver1-double,bdver1-fpsched,(nothing | bdver1-fcvt)") ;; CVTPD2PS. (define_insn_reservation "bdver1_ssecvt_cvtpd2ps_load" 8 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "load") (and (match_operand:V4SF 0 "register_operand") (match_operand:V2DF 1 "nonimmediate_operand"))))) "bdver1-double,bdver1-fpload,(bdver1-fxbar | bdver1-fcvt)") (define_insn_reservation "bdver1_ssecvt_cvtpd2ps" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "none") (and (match_operand:V4SF 0 "register_operand") @@ -586,7 +586,7 @@ "bdver1-double,bdver1-fpsched,(bdver1-fxbar | bdver1-fcvt)") ;; CVTPI2PS, CVTDQ2PS. (define_insn_reservation "bdver1_ssecvt_cvtdq2ps_load" 8 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "load") (and (match_operand:V4SF 0 "register_operand") @@ -594,7 +594,7 @@ (match_operand:V4SI 1 "nonimmediate_operand")))))) "bdver1-direct,bdver1-fpload,bdver1-fcvt") (define_insn_reservation "bdver1_ssecvt_cvtdq2ps" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "none") (and (match_operand:V4SF 0 "register_operand") @@ -603,14 +603,14 @@ "bdver1-direct,bdver1-fpsched,bdver1-fcvt") ;; CVTDQ2PD. (define_insn_reservation "bdver1_ssecvt_cvtdq2pd_load" 8 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "load") (and (match_operand:V2DF 0 "register_operand") (match_operand:V4SI 1 "nonimmediate_operand"))))) "bdver1-double,bdver1-fpload,(bdver1-fxbar | bdver1-fcvt)") (define_insn_reservation "bdver1_ssecvt_cvtdq2pd" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "none") (and (match_operand:V2DF 0 "register_operand") @@ -618,7 +618,7 @@ "bdver1-double,bdver1-fpsched,(bdver1-fxbar | bdver1-fcvt)") ;; CVTPS2PD, CVTPI2PD. (define_insn_reservation "bdver1_ssecvt_cvtps2pd_load" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "load") (and (match_operand:V2DF 0 "register_operand") @@ -626,7 +626,7 @@ (match_operand:V4SF 1 "nonimmediate_operand")))))) "bdver1-double,bdver1-fpload,(bdver1-fxbar | bdver1-fcvt)") (define_insn_reservation "bdver1_ssecvt_cvtps2pd" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "load") (and (match_operand:V2DF 0 "register_operand") @@ -635,27 +635,27 @@ "bdver1-double,bdver1-fpsched,(bdver1-fxbar | bdver1-fcvt)") ;; CVTSD2SI, CVTSD2SIQ, CVTSS2SI, CVTSS2SIQ, CVTTSD2SI, CVTTSD2SIQ, CVTTSS2SI, CVTTSS2SIQ. (define_insn_reservation "bdver1_ssecvt_cvtsX2si_load" 8 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "sseicvt") (and (eq_attr "mode" "SI,DI") (eq_attr "memory" "load")))) "bdver1-double,bdver1-fpload,(bdver1-fcvt | bdver1-fsto)") (define_insn_reservation "bdver1_ssecvt_cvtsX2si" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "sseicvt") (and (eq_attr "mode" "SI,DI") (eq_attr "memory" "none")))) "bdver1-double,bdver1-fpsched,(bdver1-fcvt | bdver1-fsto)") ;; CVTPD2PI, CVTTPD2PI. (define_insn_reservation "bdver1_ssecvt_cvtpd2pi_load" 8 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "load") (and (match_operand:V2DF 1 "nonimmediate_operand") (match_operand:V2SI 0 "register_operand"))))) "bdver1-double,bdver1-fpload,(bdver1-fcvt | bdver1-fxbar)") (define_insn_reservation "bdver1_ssecvt_cvtpd2pi" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "none") (and (match_operand:V2DF 1 "nonimmediate_operand") @@ -663,14 +663,14 @@ "bdver1-double,bdver1-fpsched,(bdver1-fcvt | bdver1-fxbar)") ;; CVTPD2DQ, CVTTPD2DQ. (define_insn_reservation "bdver1_ssecvt_cvtpd2dq_load" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "load") (and (match_operand:V2DF 1 "nonimmediate_operand") (match_operand:V4SI 0 "register_operand"))))) "bdver1-double,bdver1-fpload,(bdver1-fcvt | bdver1-fxbar)") (define_insn_reservation "bdver1_ssecvt_cvtpd2dq" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "none") (and (match_operand:V2DF 1 "nonimmediate_operand") @@ -678,7 +678,7 @@ "bdver1-double,bdver1-fpsched,(bdver1-fcvt | bdver1-fxbar)") ;; CVTPS2PI, CVTTPS2PI, CVTPS2DQ, CVTTPS2DQ. (define_insn_reservation "bdver1_ssecvt_cvtps2pi_load" 8 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "load") (and (match_operand:V4SF 1 "nonimmediate_operand") @@ -686,7 +686,7 @@ (match_operand: V4SI 0 "register_operand")))))) "bdver1-direct,bdver1-fpload,bdver1-fcvt") (define_insn_reservation "bdver1_ssecvt_cvtps2pi" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssecvt") (and (eq_attr "memory" "none") (and (match_operand:V4SF 1 "nonimmediate_operand") @@ -696,100 +696,100 @@ ;; SSE MUL, ADD, and MULADD. (define_insn_reservation "bdver1_ssemuladd_load_256" 11 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemul,sseadd,ssemuladd") (and (eq_attr "mode" "V8SF,V4DF") (eq_attr "memory" "load")))) "bdver1-double,bdver1-fpload,bdver1-ffma") (define_insn_reservation "bdver1_ssemuladd_256" 7 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemul,sseadd,ssemuladd") (and (eq_attr "mode" "V8SF,V4DF") (eq_attr "memory" "none")))) "bdver1-double,bdver1-fpsched,bdver1-ffma") (define_insn_reservation "bdver1_ssemuladd_load" 10 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemul,sseadd,ssemuladd") (eq_attr "memory" "load"))) "bdver1-direct,bdver1-fpload,bdver1-ffma") (define_insn_reservation "bdver1_ssemuladd" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssemul,sseadd,ssemuladd") (eq_attr "memory" "none"))) "bdver1-direct,bdver1-fpsched,bdver1-ffma") (define_insn_reservation "bdver1_sseimul_load" 8 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "sseimul") (eq_attr "memory" "load"))) "bdver1-direct,bdver1-fpload,bdver1-fmma") (define_insn_reservation "bdver1_sseimul" 4 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "sseimul") (eq_attr "memory" "none"))) "bdver1-direct,bdver1-fpsched,bdver1-fmma") (define_insn_reservation "bdver1_sseiadd_load" 6 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "sseiadd") (eq_attr "memory" "load"))) "bdver1-direct,bdver1-fpload,bdver1-fmal") (define_insn_reservation "bdver1_sseiadd" 2 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "sseiadd") (eq_attr "memory" "none"))) "bdver1-direct,bdver1-fpsched,bdver1-fmal") ;; SSE DIV: no throughput information (assume same as amdfam10). (define_insn_reservation "bdver1_ssediv_double_load_256" 31 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssediv") (and (eq_attr "mode" "V4DF") (eq_attr "memory" "load")))) "bdver1-double,bdver1-fpload,(bdver1-ffma0*17 | bdver1-ffma1*17)") (define_insn_reservation "bdver1_ssediv_double_256" 27 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssediv") (and (eq_attr "mode" "V4DF") (eq_attr "memory" "none")))) "bdver1-double,bdver1-fpsched,(bdver1-ffma0*17 | bdver1-ffma1*17)") (define_insn_reservation "bdver1_ssediv_single_load_256" 28 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssediv") (and (eq_attr "mode" "V8SF") (eq_attr "memory" "load")))) "bdver1-double,bdver1-fpload,(bdver1-ffma0*17 | bdver1-ffma1*17)") (define_insn_reservation "bdver1_ssediv_single_256" 24 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssediv") (and (eq_attr "mode" "V8SF") (eq_attr "memory" "none")))) "bdver1-double,bdver1-fpsched,(bdver1-ffma0*17 | bdver1-ffma1*17)") (define_insn_reservation "bdver1_ssediv_double_load" 31 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssediv") (and (eq_attr "mode" "DF,V2DF") (eq_attr "memory" "load")))) "bdver1-direct,bdver1-fpload,(bdver1-ffma0*17 | bdver1-ffma1*17)") (define_insn_reservation "bdver1_ssediv_double" 27 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssediv") (and (eq_attr "mode" "DF,V2DF") (eq_attr "memory" "none")))) "bdver1-direct,bdver1-fpsched,(bdver1-ffma0*17 | bdver1-ffma1*17)") (define_insn_reservation "bdver1_ssediv_single_load" 28 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssediv") (and (eq_attr "mode" "SF,V4SF") (eq_attr "memory" "load")))) "bdver1-direct,bdver1-fpload,(bdver1-ffma0*17 | bdver1-ffma1*17)") (define_insn_reservation "bdver1_ssediv_single" 24 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "ssediv") (and (eq_attr "mode" "SF,V4SF") (eq_attr "memory" "none")))) "bdver1-direct,bdver1-fpsched,(bdver1-ffma0*17 | bdver1-ffma1*17)") (define_insn_reservation "bdver1_sseins" 3 - (and (eq_attr "cpu" "bdver1") + (and (eq_attr "cpu" "bdver1,bdver2") (and (eq_attr "type" "sseins") (eq_attr "mode" "TI"))) "bdver1-direct,bdver1-fpsched,bdver1-fxbar") diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md index c231779b90b..9537d934ade 100644 --- a/gcc/config/i386/constraints.md +++ b/gcc/config/i386/constraints.md @@ -89,6 +89,7 @@ ;; z First SSE register. ;; i SSE2 inter-unit moves enabled ;; m MMX inter-unit moves enabled +;; a Integer register when zero extensions with AND are disabled ;; p Integer register when TARGET_PARTIAL_REG_STALL is disabled ;; d Integer register when integer DFmode moves are enabled ;; x Integer register when integer XFmode moves are enabled @@ -108,6 +109,11 @@ "TARGET_PARTIAL_REG_STALL ? NO_REGS : GENERAL_REGS" "@internal Any integer register when TARGET_PARTIAL_REG_STALL is disabled.") +(define_register_constraint "Ya" + "TARGET_ZERO_EXTEND_WITH_AND && optimize_function_for_speed_p (cfun) + ? NO_REGS : GENERAL_REGS" + "@internal Any integer register when zero extensions with AND are disabled.") + (define_register_constraint "Yd" "(TARGET_64BIT || (TARGET_INTEGER_DFMODE_MOVES && optimize_function_for_speed_p (cfun))) diff --git a/gcc/config/i386/cygming.opt b/gcc/config/i386/cygming.opt index 2d235237039..bcee9d4dc91 100644 --- a/gcc/config/i386/cygming.opt +++ b/gcc/config/i386/cygming.opt @@ -53,4 +53,8 @@ Compile code that relies on Cygwin DLL wrappers to support C++ operator new/dele posix Driver +fwritable-relocated-rdata +Common Report Var(flag_writable_rel_rdata) Init(0) +Put relocated read-only data into .data section. + ; Retain blank line above diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 7c5ed4da579..567a41de70a 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -5829,7 +5829,8 @@ classify_argument (enum machine_mode mode, const_tree type, { HOST_WIDE_INT bytes = (mode == BLKmode) ? int_size_in_bytes (type) : (int) GET_MODE_SIZE (mode); - int words = (bytes + (bit_offset % 64) / 8 + UNITS_PER_WORD - 1) / UNITS_PER_WORD; + int words + = (bytes + (bit_offset % 64) / 8 + UNITS_PER_WORD - 1) / UNITS_PER_WORD; /* Variable sized entities are always passed/returned in memory. */ if (bytes < 0) @@ -5879,7 +5880,8 @@ classify_argument (enum machine_mode mode, const_tree type, misaligned integers. */ if (DECL_BIT_FIELD (field)) { - for (i = (int_bit_position (field) + (bit_offset % 64)) / 8 / 8; + for (i = (int_bit_position (field) + + (bit_offset % 64)) / 8 / 8; i < ((int_bit_position (field) + (bit_offset % 64)) + tree_low_cst (DECL_SIZE (field), 0) + 63) / 8 / 8; i++) @@ -5919,7 +5921,8 @@ classify_argument (enum machine_mode mode, const_tree type, + bit_offset) % 256); if (!num) return 0; - pos = (int_bit_position (field) + (bit_offset % 64)) / 8 / 8; + pos = (int_bit_position (field) + + (bit_offset % 64)) / 8 / 8; for (i = 0; i < num && (i + pos) < words; i++) classes[i + pos] = merge_classes (subclasses[i], classes[i + pos]); @@ -6336,21 +6339,27 @@ construct_container (enum machine_mode mode, enum machine_mode orig_mode, default: gcc_unreachable (); } - if (n == 2 && regclass[0] == X86_64_SSE_CLASS - && regclass[1] == X86_64_SSEUP_CLASS && mode != BLKmode) - return gen_rtx_REG (mode, SSE_REGNO (sse_regno)); + if (n == 2 + && regclass[0] == X86_64_SSE_CLASS + && regclass[1] == X86_64_SSEUP_CLASS + && mode != BLKmode) + return gen_reg_or_parallel (mode, orig_mode, + SSE_REGNO (sse_regno)); if (n == 4 && regclass[0] == X86_64_SSE_CLASS && regclass[1] == X86_64_SSEUP_CLASS && regclass[2] == X86_64_SSEUP_CLASS && regclass[3] == X86_64_SSEUP_CLASS && mode != BLKmode) - return gen_rtx_REG (mode, SSE_REGNO (sse_regno)); - + return gen_reg_or_parallel (mode, orig_mode, + SSE_REGNO (sse_regno)); if (n == 2 - && regclass[0] == X86_64_X87_CLASS && regclass[1] == X86_64_X87UP_CLASS) + && regclass[0] == X86_64_X87_CLASS + && regclass[1] == X86_64_X87UP_CLASS) return gen_rtx_REG (XFmode, FIRST_STACK_REG); - if (n == 2 && regclass[0] == X86_64_INTEGER_CLASS + + if (n == 2 + && regclass[0] == X86_64_INTEGER_CLASS && regclass[1] == X86_64_INTEGER_CLASS && (mode == CDImode || mode == TImode || mode == TFmode) && intreg[0] + 1 == intreg[1]) @@ -6369,31 +6378,36 @@ construct_container (enum machine_mode mode, enum machine_mode orig_mode, case X86_64_INTEGERSI_CLASS: /* Merge TImodes on aligned occasions here too. */ if (i * 8 + 8 > bytes) - tmpmode = mode_for_size ((bytes - i * 8) * BITS_PER_UNIT, MODE_INT, 0); + tmpmode + = mode_for_size ((bytes - i * 8) * BITS_PER_UNIT, MODE_INT, 0); else if (regclass[i] == X86_64_INTEGERSI_CLASS) tmpmode = SImode; else tmpmode = DImode; - /* We've requested 24 bytes we don't have mode for. Use DImode. */ + /* We've requested 24 bytes we + don't have mode for. Use DImode. */ if (tmpmode == BLKmode) tmpmode = DImode; - exp [nexps++] = gen_rtx_EXPR_LIST (VOIDmode, - gen_rtx_REG (tmpmode, *intreg), - GEN_INT (i*8)); + exp [nexps++] + = gen_rtx_EXPR_LIST (VOIDmode, + gen_rtx_REG (tmpmode, *intreg), + GEN_INT (i*8)); intreg++; break; case X86_64_SSESF_CLASS: - exp [nexps++] = gen_rtx_EXPR_LIST (VOIDmode, - gen_rtx_REG (SFmode, - SSE_REGNO (sse_regno)), - GEN_INT (i*8)); + exp [nexps++] + = gen_rtx_EXPR_LIST (VOIDmode, + gen_rtx_REG (SFmode, + SSE_REGNO (sse_regno)), + GEN_INT (i*8)); sse_regno++; break; case X86_64_SSEDF_CLASS: - exp [nexps++] = gen_rtx_EXPR_LIST (VOIDmode, - gen_rtx_REG (DFmode, - SSE_REGNO (sse_regno)), - GEN_INT (i*8)); + exp [nexps++] + = gen_rtx_EXPR_LIST (VOIDmode, + gen_rtx_REG (DFmode, + SSE_REGNO (sse_regno)), + GEN_INT (i*8)); sse_regno++; break; case X86_64_SSE_CLASS: @@ -6423,10 +6437,11 @@ construct_container (enum machine_mode mode, enum machine_mode orig_mode, default: gcc_unreachable (); } - exp [nexps++] = gen_rtx_EXPR_LIST (VOIDmode, - gen_rtx_REG (tmpmode, - SSE_REGNO (sse_regno)), - GEN_INT (pos*8)); + exp [nexps++] + = gen_rtx_EXPR_LIST (VOIDmode, + gen_rtx_REG (tmpmode, + SSE_REGNO (sse_regno)), + GEN_INT (pos*8)); sse_regno++; break; default: @@ -7225,8 +7240,8 @@ function_value_64 (enum machine_mode orig_mode, enum machine_mode mode, } else if (POINTER_TYPE_P (valtype)) { - /* Pointers are always returned in Pmode. */ - mode = Pmode; + /* Pointers are always returned in word_mode. */ + mode = word_mode; } ret = construct_container (mode, orig_mode, valtype, 1, @@ -7297,7 +7312,8 @@ ix86_function_value (const_tree valtype, const_tree fntype_or_decl, return ix86_function_value_1 (valtype, fntype_or_decl, orig_mode, mode); } -/* Pointer function arguments and return values are promoted to Pmode. */ +/* Pointer function arguments and return values are promoted to + word_mode. */ static enum machine_mode ix86_promote_function_mode (const_tree type, enum machine_mode mode, @@ -7307,7 +7323,7 @@ ix86_promote_function_mode (const_tree type, enum machine_mode mode, if (type != NULL_TREE && POINTER_TYPE_P (type)) { *punsignedp = POINTERS_EXTEND_UNSIGNED; - return Pmode; + return word_mode; } return default_promote_function_mode (type, mode, punsignedp, fntype, for_return); @@ -7585,12 +7601,13 @@ setup_incoming_varargs_64 (CUMULATIVE_ARGS *cum) for (i = cum->regno; i < max; i++) { - mem = gen_rtx_MEM (Pmode, + mem = gen_rtx_MEM (word_mode, plus_constant (save_area, i * UNITS_PER_WORD)); MEM_NOTRAP_P (mem) = 1; set_mem_alias_set (mem, set); - emit_move_insn (mem, gen_rtx_REG (Pmode, - x86_64_int_parameter_registers[i])); + emit_move_insn (mem, + gen_rtx_REG (word_mode, + x86_64_int_parameter_registers[i])); } if (ix86_varargs_fpr_size) @@ -8645,8 +8662,11 @@ gen_push (rtx arg) m->fs.cfa_offset += UNITS_PER_WORD; m->fs.sp_offset += UNITS_PER_WORD; + if (REG_P (arg) && GET_MODE (arg) != word_mode) + arg = gen_rtx_REG (word_mode, REGNO (arg)); + return gen_rtx_SET (VOIDmode, - gen_rtx_MEM (Pmode, + gen_rtx_MEM (word_mode, gen_rtx_PRE_DEC (Pmode, stack_pointer_rtx)), arg); @@ -8657,9 +8677,12 @@ gen_push (rtx arg) static rtx gen_pop (rtx arg) { + if (REG_P (arg) && GET_MODE (arg) != word_mode) + arg = gen_rtx_REG (word_mode, REGNO (arg)); + return gen_rtx_SET (VOIDmode, arg, - gen_rtx_MEM (Pmode, + gen_rtx_MEM (word_mode, gen_rtx_POST_INC (Pmode, stack_pointer_rtx))); } @@ -9126,7 +9149,7 @@ ix86_emit_save_regs (void) for (regno = FIRST_PSEUDO_REGISTER - 1; regno-- > 0; ) if (!SSE_REGNO_P (regno) && ix86_save_reg (regno, true)) { - insn = emit_insn (gen_push (gen_rtx_REG (Pmode, regno))); + insn = emit_insn (gen_push (gen_rtx_REG (word_mode, regno))); RTX_FRAME_RELATED_P (insn) = 1; } } @@ -9206,7 +9229,7 @@ ix86_emit_save_regs_using_mov (HOST_WIDE_INT cfa_offset) for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (!SSE_REGNO_P (regno) && ix86_save_reg (regno, true)) { - ix86_emit_save_reg_using_mov (Pmode, regno, cfa_offset); + ix86_emit_save_reg_using_mov (word_mode, regno, cfa_offset); cfa_offset -= UNITS_PER_WORD; } } @@ -9281,7 +9304,7 @@ pro_epilogue_adjust_stack (rtx dest, rtx src, rtx offset, rtx insn; bool add_frame_related_expr = false; - if (! TARGET_64BIT) + if (Pmode == SImode) insn = gen_pro_epilogue_adjust_stack_si_add (dest, src, offset); else if (x86_64_immediate_operand (offset, DImode)) insn = gen_pro_epilogue_adjust_stack_di_add (dest, src, offset); @@ -10143,7 +10166,7 @@ ix86_expand_prologue (void) to implement macro RETURN_ADDR_RTX and intrinsic function expand_builtin_return_addr etc. */ t = plus_constant (crtl->drap_reg, -UNITS_PER_WORD); - t = gen_frame_mem (Pmode, t); + t = gen_frame_mem (word_mode, t); insn = emit_insn (gen_push (t)); RTX_FRAME_RELATED_P (insn) = 1; @@ -10315,7 +10338,7 @@ ix86_expand_prologue (void) emit_insn (ix86_gen_allocate_stack_worker (eax, eax)); /* Use the fact that AX still contains ALLOCATE. */ - adjust_stack_insn = (TARGET_64BIT + adjust_stack_insn = (Pmode == DImode ? gen_pro_epilogue_adjust_stack_di_sub : gen_pro_epilogue_adjust_stack_si_sub); @@ -10340,14 +10363,18 @@ ix86_expand_prologue (void) if (r10_live && eax_live) { t = choose_baseaddr (m->fs.sp_offset - allocate); - emit_move_insn (r10, gen_frame_mem (Pmode, t)); + emit_move_insn (gen_rtx_REG (word_mode, R10_REG), + gen_frame_mem (word_mode, t)); t = choose_baseaddr (m->fs.sp_offset - allocate - UNITS_PER_WORD); - emit_move_insn (eax, gen_frame_mem (Pmode, t)); + emit_move_insn (gen_rtx_REG (word_mode, AX_REG), + gen_frame_mem (word_mode, t)); } else if (eax_live || r10_live) { t = choose_baseaddr (m->fs.sp_offset - allocate); - emit_move_insn ((eax_live ? eax : r10), gen_frame_mem (Pmode, t)); + emit_move_insn (gen_rtx_REG (word_mode, + (eax_live ? AX_REG : R10_REG)), + gen_frame_mem (word_mode, t)); } } gcc_assert (m->fs.sp_offset == frame.stack_pointer_offset); @@ -10517,7 +10544,7 @@ ix86_emit_restore_regs_using_pop (void) for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (!SSE_REGNO_P (regno) && ix86_save_reg (regno, false)) - ix86_emit_restore_reg_using_pop (gen_rtx_REG (Pmode, regno)); + ix86_emit_restore_reg_using_pop (gen_rtx_REG (word_mode, regno)); } /* Emit code and notes for the LEAVE instruction. */ @@ -10560,11 +10587,11 @@ ix86_emit_restore_regs_using_mov (HOST_WIDE_INT cfa_offset, for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (!SSE_REGNO_P (regno) && ix86_save_reg (regno, maybe_eh_return)) { - rtx reg = gen_rtx_REG (Pmode, regno); + rtx reg = gen_rtx_REG (word_mode, regno); rtx insn, mem; mem = choose_baseaddr (cfa_offset); - mem = gen_frame_mem (Pmode, mem); + mem = gen_frame_mem (word_mode, mem); insn = emit_move_insn (reg, mem); if (m->fs.cfa_reg == crtl->drap_reg && regno == REGNO (crtl->drap_reg)) @@ -11169,8 +11196,8 @@ ix86_expand_split_stack_prologue (void) { rtx rax; - rax = gen_rtx_REG (Pmode, AX_REG); - emit_move_insn (rax, reg10); + rax = gen_rtx_REG (word_mode, AX_REG); + emit_move_insn (rax, gen_rtx_REG (word_mode, R10_REG)); use_reg (&call_fusage, rax); } @@ -11249,8 +11276,8 @@ ix86_expand_split_stack_prologue (void) /* If we are in 64-bit mode and this function uses a static chain, we saved %r10 in %rax before calling _morestack. */ if (TARGET_64BIT && DECL_STATIC_CHAIN (cfun->decl)) - emit_move_insn (gen_rtx_REG (Pmode, R10_REG), - gen_rtx_REG (Pmode, AX_REG)); + emit_move_insn (gen_rtx_REG (word_mode, R10_REG), + gen_rtx_REG (word_mode, AX_REG)); /* If this function calls va_start, we need to store a pointer to the arguments on the old stack, because they may not have been @@ -13241,6 +13268,19 @@ ix86_delegitimize_address (rtx x) if (TARGET_64BIT) { + if (GET_CODE (x) == CONST + && GET_CODE (XEXP (x, 0)) == PLUS + && GET_MODE (XEXP (x, 0)) == Pmode + && CONST_INT_P (XEXP (XEXP (x, 0), 1)) + && GET_CODE (XEXP (XEXP (x, 0), 0)) == UNSPEC + && XINT (XEXP (XEXP (x, 0), 0), 1) == UNSPEC_PCREL) + { + rtx x2 = XVECEXP (XEXP (XEXP (x, 0), 0), 0, 0); + x = gen_rtx_PLUS (Pmode, XEXP (XEXP (x, 0), 1), x2); + if (MEM_P (orig_x)) + x = replace_equiv_address_nv (orig_x, x); + return x; + } if (GET_CODE (x) != CONST || GET_CODE (XEXP (x, 0)) != UNSPEC || (XINT (XEXP (x, 0), 1) != UNSPEC_GOTPCREL @@ -13690,6 +13730,7 @@ get_some_local_dynamic_name (void) Z -- likewise, with special suffixes for x87 instructions. * -- print a star (in certain assembler syntax) A -- print an absolute memory reference. + E -- print address with DImode register names if TARGET_64BIT. w -- print the operand as if it's a "word" (HImode) even if it isn't. s -- print a shift double count, followed by the assemblers argument delimiter. @@ -13714,6 +13755,7 @@ get_some_local_dynamic_name (void) ; -- print a semicolon (after prefixes due to bug in older gas). ~ -- print "i" if TARGET_AVX2, "f" otherwise. @ -- print a segment register of thread base pointer load + ^ -- print addr32 prefix if TARGET_64BIT and Pmode != word_mode */ void @@ -13765,7 +13807,14 @@ ix86_print_operand (FILE *file, rtx x, int code) ix86_print_operand (file, x, 0); return; + case 'E': + /* Wrap address in an UNSPEC to declare special handling. */ + if (TARGET_64BIT) + x = gen_rtx_UNSPEC (DImode, gen_rtvec (1, x), UNSPEC_LEA_ADDR); + output_address (x); + return; + case 'L': if (ASSEMBLER_DIALECT == ASM_ATT) putc ('l', file); @@ -14091,6 +14140,13 @@ ix86_print_operand (FILE *file, rtx x, int code) return; case 'H': + if (!offsettable_memref_p (x)) + { + output_operand_lossage ("operand is not an offsettable memory " + "reference, invalid operand " + "code 'H'"); + return; + } /* It doesn't actually matter what mode we use here, as we're only going to use this for printing. */ x = adjust_address_nv (x, DImode, 8); @@ -14101,7 +14157,8 @@ ix86_print_operand (FILE *file, rtx x, int code) rtx x; if (!optimize - || optimize_function_for_size_p (cfun) || !TARGET_BRANCH_PREDICTION_HINTS) + || optimize_function_for_size_p (cfun) + || !TARGET_BRANCH_PREDICTION_HINTS) return; x = find_reg_note (current_output_insn, REG_BR_PROB, 0); @@ -14112,8 +14169,9 @@ ix86_print_operand (FILE *file, rtx x, int code) if (pred_val < REG_BR_PROB_BASE * 45 / 100 || pred_val > REG_BR_PROB_BASE * 55 / 100) { - int taken = pred_val > REG_BR_PROB_BASE / 2; - int cputaken = final_forward_branch_p (current_output_insn) == 0; + bool taken = pred_val > REG_BR_PROB_BASE / 2; + bool cputaken + = final_forward_branch_p (current_output_insn) == 0; /* Emit hints only in the case default branch prediction heuristics would fail. */ @@ -14210,6 +14268,11 @@ ix86_print_operand (FILE *file, rtx x, int code) putc (TARGET_AVX2 ? 'i' : 'f', file); return; + case '^': + if (TARGET_64BIT && Pmode != word_mode) + fputs ("addr32 ", file); + return; + default: output_operand_lossage ("invalid operand code '%c'", code); } @@ -14349,8 +14412,8 @@ ix86_print_operand (FILE *file, rtx x, int code) static bool ix86_print_operand_punct_valid_p (unsigned char code) { - return (code == '@' || code == '*' || code == '+' - || code == '&' || code == ';' || code == '~'); + return (code == '@' || code == '*' || code == '+' || code == '&' + || code == ';' || code == '~' || code == '^'); } /* Print a memory operand whose address is ADDR. */ @@ -14363,6 +14426,7 @@ ix86_print_operand_address (FILE *file, rtx addr) int scale; int ok; bool vsib = false; + int code = 0; if (GET_CODE (addr) == UNSPEC && XINT (addr, 1) == UNSPEC_VSIBADDR) { @@ -14373,6 +14437,12 @@ ix86_print_operand_address (FILE *file, rtx addr) addr = XVECEXP (addr, 0, 0); vsib = true; } + else if (GET_CODE (addr) == UNSPEC && XINT (addr, 1) == UNSPEC_LEA_ADDR) + { + gcc_assert (TARGET_64BIT); + ok = ix86_decompose_address (XVECEXP (addr, 0, 0), &parts); + code = 'q'; + } else ok = ix86_decompose_address (addr, &parts); @@ -14443,15 +14513,15 @@ ix86_print_operand_address (FILE *file, rtx addr) } else { - int code = 0; - - /* Print SImode registers for zero-extended addresses to force - addr32 prefix. Otherwise print DImode registers to avoid it. */ - if (TARGET_64BIT) - code = ((GET_CODE (addr) == ZERO_EXTEND - || GET_CODE (addr) == AND) - ? 'l' - : 'q'); + /* Print SImode register names for zero-extended + addresses to force addr32 prefix. */ + if (TARGET_64BIT + && (GET_CODE (addr) == ZERO_EXTEND + || GET_CODE (addr) == AND)) + { + gcc_assert (!code); + code = 'l'; + } if (ASSEMBLER_DIALECT == ASM_ATT) { @@ -17792,6 +17862,11 @@ ix86_cc_modes_compatible (enum machine_mode m1, enum machine_mode m2) || (m1 == CCGOCmode && m2 == CCGCmode)) return CCGCmode; + if (m1 == CCZmode && (m2 == CCGCmode || m2 == CCGOCmode)) + return m2; + else if (m2 == CCZmode && (m1 == CCGCmode || m1 == CCGOCmode)) + return m1; + switch (m1) { default: @@ -20226,7 +20301,7 @@ ix86_split_to_parts (rtx operand, rtx *parts, enum machine_mode mode) gcc_assert (ok); operand = copy_rtx (operand); - PUT_MODE (operand, Pmode); + PUT_MODE (operand, word_mode); parts[0] = parts[1] = parts[2] = parts[3] = operand; return size; } @@ -20379,7 +20454,7 @@ ix86_split_long_move (rtx operands[]) if (push_operand (operands[0], VOIDmode)) { operands[0] = copy_rtx (operands[0]); - PUT_MODE (operands[0], Pmode); + PUT_MODE (operands[0], word_mode); } else operands[0] = gen_lowpart (DImode, operands[0]); @@ -33542,9 +33617,9 @@ ix86_expand_vector_set (bool mmx_ok, rtx target, rtx val, int elt) tmp = gen_reg_rtx (GET_MODE_INNER (mode)); ix86_expand_vector_extract (true, tmp, target, 1 - elt); if (elt == 0) - tmp = gen_rtx_VEC_CONCAT (mode, tmp, val); - else tmp = gen_rtx_VEC_CONCAT (mode, val, tmp); + else + tmp = gen_rtx_VEC_CONCAT (mode, tmp, val); emit_insn (gen_rtx_SET (VOIDmode, target, tmp)); return; } @@ -33558,9 +33633,9 @@ ix86_expand_vector_set (bool mmx_ok, rtx target, rtx val, int elt) tmp = gen_reg_rtx (GET_MODE_INNER (mode)); ix86_expand_vector_extract (false, tmp, target, 1 - elt); if (elt == 0) - tmp = gen_rtx_VEC_CONCAT (mode, tmp, val); - else tmp = gen_rtx_VEC_CONCAT (mode, val, tmp); + else + tmp = gen_rtx_VEC_CONCAT (mode, tmp, val); emit_insn (gen_rtx_SET (VOIDmode, target, tmp)); return; diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 6e2c1230de3..a4a7d3ab1b8 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -38,6 +38,7 @@ ;; Z -- likewise, with special suffixes for x87 instructions. ;; * -- print a star (in certain assembler syntax) ;; A -- print an absolute memory reference. +;; E -- print address with DImode register names if TARGET_64BIT. ;; w -- print the operand as if it's a "word" (HImode) even if it isn't. ;; s -- print a shift double count, followed by the assemblers argument ;; delimiter. @@ -60,7 +61,9 @@ ;; Y -- print condition for XOP pcom* instruction. ;; + -- print a branch hint as 'cs' or 'ds' prefix ;; ; -- print a semicolon (after prefixes due to bug in older gas). +;; ~ -- print "i" if TARGET_AVX2, "f" otherwise. ;; @ -- print a segment register of thread base pointer load +;; ^ -- print addr32 prefix if TARGET_64BIT and Pmode != word_mode (define_c_enum "unspec" [ ;; Relocation specifiers @@ -109,6 +112,7 @@ UNSPEC_MS_TO_SYSV_CALL UNSPEC_CALL_NEEDS_VZEROUPPER UNSPEC_PAUSE + UNSPEC_LEA_ADDR ;; For SSE/MMX support: UNSPEC_FIX_NOTRUNC @@ -892,6 +896,11 @@ ;; pointer-sized quantities. Exactly one of the two alternatives will match. (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) +;; This mode iterator allows :W to be used for patterns that operate on +;; word_mode sized quantities. +(define_mode_iterator W + [(SI "word_mode == SImode") (DI "word_mode == DImode")]) + ;; This mode iterator allows :PTR to be used for patterns that operate on ;; ptr_mode sized quantities. (define_mode_iterator PTR @@ -1700,8 +1709,8 @@ (set_attr "mode" "SI")]) (define_insn "*push<mode>2_prologue" - [(set (match_operand:P 0 "push_operand" "=<") - (match_operand:P 1 "general_no_elim_operand" "r<i>*m")) + [(set (match_operand:W 0 "push_operand" "=<") + (match_operand:W 1 "general_no_elim_operand" "r<i>*m")) (clobber (mem:BLK (scratch)))] "" "push{<imodesuffix>}\t%1" @@ -1709,16 +1718,16 @@ (set_attr "mode" "<MODE>")]) (define_insn "*pop<mode>1" - [(set (match_operand:P 0 "nonimmediate_operand" "=r*m") - (match_operand:P 1 "pop_operand" ">"))] + [(set (match_operand:W 0 "nonimmediate_operand" "=r*m") + (match_operand:W 1 "pop_operand" ">"))] "" "pop{<imodesuffix>}\t%0" [(set_attr "type" "pop") (set_attr "mode" "<MODE>")]) (define_insn "*pop<mode>1_epilogue" - [(set (match_operand:P 0 "nonimmediate_operand" "=r*m") - (match_operand:P 1 "pop_operand" ">")) + [(set (match_operand:W 0 "nonimmediate_operand" "=r*m") + (match_operand:W 1 "pop_operand" ">")) (clobber (mem:BLK (scratch)))] "" "pop{<imodesuffix>}\t%0" @@ -1958,7 +1967,7 @@ return "#"; case TYPE_LEA: - return "lea{q}\t{%a1, %0|%0, %a1}"; + return "lea{q}\t{%E1, %0|%0, %E1}"; default: gcc_assert (!flag_pic || LEGITIMATE_PIC_OPERAND_P (operands[1])); @@ -1967,7 +1976,7 @@ else if (which_alternative == 2) return "movabs{q}\t{%1, %0|%0, %1}"; else if (ix86_use_lea_for_mov (insn, operands)) - return "lea{q}\t{%a1, %0|%0, %a1}"; + return "lea{q}\t{%E1, %0|%0, %E1}"; else return "mov{q}\t{%1, %0|%0, %1}"; } @@ -2199,12 +2208,12 @@ return "movd\t{%1, %0|%0, %1}"; case TYPE_LEA: - return "lea{l}\t{%a1, %0|%0, %a1}"; + return "lea{l}\t{%E1, %0|%0, %E1}"; default: gcc_assert (!flag_pic || LEGITIMATE_PIC_OPERAND_P (operands[1])); if (ix86_use_lea_for_mov (insn, operands)) - return "lea{l}\t{%a1, %0|%0, %a1}"; + return "lea{l}\t{%E1, %0|%0, %E1}"; else return "mov{l}\t{%1, %0|%0, %1}"; } @@ -2361,8 +2370,8 @@ ;; into register when rax is not available (define_insn "*movabs<mode>_1" [(set (mem:SWI1248x (match_operand:DI 0 "x86_64_movabs_operand" "i,r")) - (match_operand:SWI1248x 1 "nonmemory_operand" "a,er"))] - "TARGET_64BIT && ix86_check_movabs (insn, 0)" + (match_operand:SWI1248x 1 "nonmemory_operand" "a,r<i>"))] + "TARGET_LP64 && ix86_check_movabs (insn, 0)" "@ movabs{<imodesuffix>}\t{%1, %P0|%P0, %1} mov{<imodesuffix>}\t{%1, %a0|%a0, %1}" @@ -2376,7 +2385,7 @@ (define_insn "*movabs<mode>_2" [(set (match_operand:SWI1248x 0 "register_operand" "=a,r") (mem:SWI1248x (match_operand:DI 1 "x86_64_movabs_operand" "i,r")))] - "TARGET_64BIT && ix86_check_movabs (insn, 1)" + "TARGET_LP64 && ix86_check_movabs (insn, 1)" "@ movabs{<imodesuffix>}\t{%P1, %0|%0, %P1} mov{<imodesuffix>}\t{%a1, %0|%0, %a1}" @@ -3371,20 +3380,14 @@ (define_expand "zero_extendsidi2" [(set (match_operand:DI 0 "nonimmediate_operand" "") - (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "")))] - "" -{ - if (!TARGET_64BIT) - { - emit_insn (gen_zero_extendsidi2_1 (operands[0], operands[1])); - DONE; - } -}) + (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "")))]) (define_insn "*zero_extendsidi2_rex64" - [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o,?*Ym,?*y,?*Yi,*x") + [(set (match_operand:DI 0 "nonimmediate_operand" + "=r ,o,?*Ym,?*y,?*Yi,!*x") (zero_extend:DI - (match_operand:SI 1 "nonimmediate_operand" "rm,0,r ,m ,r ,m")))] + (match_operand:SI 1 "x86_64_zext_general_operand" + "rmZ,0,r ,m ,r ,m*x")))] "TARGET_64BIT" "@ mov{l}\t{%1, %k0|%k0, %1} @@ -3393,24 +3396,17 @@ movd\t{%1, %0|%0, %1} %vmovd\t{%1, %0|%0, %1} %vmovd\t{%1, %0|%0, %1}" - [(set_attr "type" "imovx,imov,mmxmov,mmxmov,ssemov,ssemov") + [(set_attr "isa" "*,*,*,*,*,sse2") + (set_attr "type" "imovx,multi,mmxmov,mmxmov,ssemov,ssemov") (set_attr "prefix" "orig,*,orig,orig,maybe_vex,maybe_vex") (set_attr "prefix_0f" "0,*,*,*,*,*") - (set_attr "mode" "SI,DI,DI,DI,TI,TI")]) - -(define_split - [(set (match_operand:DI 0 "memory_operand" "") - (zero_extend:DI (match_dup 0)))] - "TARGET_64BIT" - [(set (match_dup 4) (const_int 0))] - "split_double_mode (DImode, &operands[0], 1, &operands[3], &operands[4]);") + (set_attr "mode" "SI,SI,DI,DI,TI,TI")]) -;; %%% Kill me once multi-word ops are sane. -(define_insn "zero_extendsidi2_1" - [(set (match_operand:DI 0 "nonimmediate_operand" "=r,?r,?o,?*Ym,?*y,?*Yi,*x") - (zero_extend:DI - (match_operand:SI 1 "nonimmediate_operand" "0,rm,r ,r ,m ,r ,m"))) - (clobber (reg:CC FLAGS_REG))] +(define_insn "*zero_extendsidi2" + [(set (match_operand:DI 0 "nonimmediate_operand" + "=ro,?r,?o,?*Ym,?*y,?*Yi,!*x") + (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" + "0 ,rm,r ,r ,m ,r ,m*x")))] "!TARGET_64BIT" "@ # @@ -3426,19 +3422,26 @@ (set_attr "mode" "SI,SI,SI,DI,DI,TI,TI")]) (define_split + [(set (match_operand:DI 0 "memory_operand" "") + (zero_extend:DI (match_operand:SI 1 "memory_operand" "")))] + "reload_completed" + [(set (match_dup 4) (const_int 0))] + "split_double_mode (DImode, &operands[0], 1, &operands[3], &operands[4]);") + +(define_split [(set (match_operand:DI 0 "register_operand" "") - (zero_extend:DI (match_operand:SI 1 "register_operand" ""))) - (clobber (reg:CC FLAGS_REG))] + (zero_extend:DI (match_operand:SI 1 "register_operand" "")))] "!TARGET_64BIT && reload_completed + && !(MMX_REG_P (operands[0]) || SSE_REG_P (operands[0])) && true_regnum (operands[0]) == true_regnum (operands[1])" [(set (match_dup 4) (const_int 0))] "split_double_mode (DImode, &operands[0], 1, &operands[3], &operands[4]);") (define_split [(set (match_operand:DI 0 "nonimmediate_operand" "") - (zero_extend:DI (match_operand:SI 1 "general_operand" ""))) - (clobber (reg:CC FLAGS_REG))] + (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "")))] "!TARGET_64BIT && reload_completed + && !(MEM_P (operands[0]) && MEM_P (operands[1])) && !(MMX_REG_P (operands[0]) || SSE_REG_P (operands[0]))" [(set (match_dup 3) (match_dup 1)) (set (match_dup 4) (const_int 0))] @@ -3453,112 +3456,100 @@ [(set_attr "type" "imovx") (set_attr "mode" "SI")]) -(define_expand "zero_extendhisi2" +(define_expand "zero_extend<mode>si2" [(set (match_operand:SI 0 "register_operand" "") - (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "")))] + (zero_extend:SI (match_operand:SWI12 1 "nonimmediate_operand" "")))] "" { if (TARGET_ZERO_EXTEND_WITH_AND && optimize_function_for_speed_p (cfun)) { - operands[1] = force_reg (HImode, operands[1]); - emit_insn (gen_zero_extendhisi2_and (operands[0], operands[1])); + operands[1] = force_reg (<MODE>mode, operands[1]); + emit_insn (gen_zero_extend<mode>si2_and (operands[0], operands[1])); DONE; } }) -(define_insn_and_split "zero_extendhisi2_and" - [(set (match_operand:SI 0 "register_operand" "=r") - (zero_extend:SI (match_operand:HI 1 "register_operand" "0"))) +(define_insn_and_split "zero_extend<mode>si2_and" + [(set (match_operand:SI 0 "register_operand" "=r,?&<r>") + (zero_extend:SI + (match_operand:SWI12 1 "nonimmediate_operand" "0,<r>m"))) (clobber (reg:CC FLAGS_REG))] "TARGET_ZERO_EXTEND_WITH_AND && optimize_function_for_speed_p (cfun)" "#" "&& reload_completed" - [(parallel [(set (match_dup 0) (and:SI (match_dup 0) (const_int 65535))) + [(parallel [(set (match_dup 0) (and:SI (match_dup 0) (match_dup 2))) (clobber (reg:CC FLAGS_REG))])] - "" +{ + if (true_regnum (operands[0]) != true_regnum (operands[1])) + { + ix86_expand_clear (operands[0]); + + gcc_assert (!TARGET_PARTIAL_REG_STALL); + emit_insn (gen_movstrict<mode> + (gen_lowpart (<MODE>mode, operands[0]), operands[1])); + DONE; + } + + operands[2] = GEN_INT (GET_MODE_MASK (<MODE>mode)); +} [(set_attr "type" "alu1") (set_attr "mode" "SI")]) -(define_insn "*zero_extendhisi2_movzwl" +(define_insn "*zero_extend<mode>si2" [(set (match_operand:SI 0 "register_operand" "=r") - (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "rm")))] - "!TARGET_ZERO_EXTEND_WITH_AND - || optimize_function_for_size_p (cfun)" - "movz{wl|x}\t{%1, %0|%0, %1}" + (zero_extend:SI + (match_operand:SWI12 1 "nonimmediate_operand" "<r>m")))] + "!(TARGET_ZERO_EXTEND_WITH_AND && optimize_function_for_speed_p (cfun))" + "movz{<imodesuffix>l|x}\t{%1, %0|%0, %1}" [(set_attr "type" "imovx") (set_attr "mode" "SI")]) -(define_expand "zero_extendqi<mode>2" - [(parallel - [(set (match_operand:SWI24 0 "register_operand" "") - (zero_extend:SWI24 (match_operand:QI 1 "nonimmediate_operand" ""))) - (clobber (reg:CC FLAGS_REG))])]) +(define_expand "zero_extendqihi2" + [(set (match_operand:HI 0 "register_operand" "") + (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "")))] + "" +{ + if (TARGET_ZERO_EXTEND_WITH_AND && optimize_function_for_speed_p (cfun)) + { + operands[1] = force_reg (QImode, operands[1]); + emit_insn (gen_zero_extendqihi2_and (operands[0], operands[1])); + DONE; + } +}) -(define_insn "*zero_extendqi<mode>2_and" - [(set (match_operand:SWI24 0 "register_operand" "=r,?&q") - (zero_extend:SWI24 (match_operand:QI 1 "nonimmediate_operand" "0,qm"))) +(define_insn_and_split "zero_extendqihi2_and" + [(set (match_operand:HI 0 "register_operand" "=r,?&q") + (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "0,qm"))) (clobber (reg:CC FLAGS_REG))] "TARGET_ZERO_EXTEND_WITH_AND && optimize_function_for_speed_p (cfun)" "#" - [(set_attr "type" "alu1") - (set_attr "mode" "<MODE>")]) - -;; When source and destination does not overlap, clear destination -;; first and then do the movb -(define_split - [(set (match_operand:SWI24 0 "register_operand" "") - (zero_extend:SWI24 (match_operand:QI 1 "nonimmediate_operand" ""))) - (clobber (reg:CC FLAGS_REG))] - "reload_completed - && (TARGET_ZERO_EXTEND_WITH_AND && optimize_function_for_speed_p (cfun)) - && ANY_QI_REG_P (operands[0]) - && (ANY_QI_REG_P (operands[1]) || MEM_P (operands[1])) - && !reg_overlap_mentioned_p (operands[0], operands[1])" - [(set (strict_low_part (match_dup 2)) (match_dup 1))] + "&& reload_completed" + [(parallel [(set (match_dup 0) (and:SI (match_dup 0) (const_int 255))) + (clobber (reg:CC FLAGS_REG))])] { - operands[2] = gen_lowpart (QImode, operands[0]); - ix86_expand_clear (operands[0]); -}) + if (true_regnum (operands[0]) != true_regnum (operands[1])) + { + ix86_expand_clear (operands[0]); -(define_insn "*zero_extendqi<mode>2_movzbl_and" - [(set (match_operand:SWI24 0 "register_operand" "=r,r") - (zero_extend:SWI24 (match_operand:QI 1 "nonimmediate_operand" "qm,0"))) - (clobber (reg:CC FLAGS_REG))] - "!TARGET_ZERO_EXTEND_WITH_AND || optimize_function_for_size_p (cfun)" - "#" - [(set_attr "type" "imovx,alu1") - (set_attr "mode" "<MODE>")]) + gcc_assert (!TARGET_PARTIAL_REG_STALL); + emit_insn (gen_movstrictqi + (gen_lowpart (QImode, operands[0]), operands[1])); + DONE; + } -;; For the movzbl case strip only the clobber -(define_split - [(set (match_operand:SWI24 0 "register_operand" "") - (zero_extend:SWI24 (match_operand:QI 1 "nonimmediate_operand" ""))) - (clobber (reg:CC FLAGS_REG))] - "reload_completed - && (!TARGET_ZERO_EXTEND_WITH_AND || optimize_function_for_size_p (cfun)) - && (!REG_P (operands[1]) || ANY_QI_REG_P (operands[1]))" - [(set (match_dup 0) - (zero_extend:SWI24 (match_dup 1)))]) + operands[0] = gen_lowpart (SImode, operands[0]); +} + [(set_attr "type" "alu1") + (set_attr "mode" "SI")]) ; zero extend to SImode to avoid partial register stalls -(define_insn "*zero_extendqi<mode>2_movzbl" - [(set (match_operand:SWI24 0 "register_operand" "=r") - (zero_extend:SWI24 (match_operand:QI 1 "nonimmediate_operand" "qm")))] - "reload_completed - && (!TARGET_ZERO_EXTEND_WITH_AND || optimize_function_for_size_p (cfun))" +(define_insn "*zero_extendqihi2" + [(set (match_operand:HI 0 "register_operand" "=r") + (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "qm")))] + "!(TARGET_ZERO_EXTEND_WITH_AND && optimize_function_for_speed_p (cfun))" "movz{bl|x}\t{%1, %k0|%k0, %1}" [(set_attr "type" "imovx") (set_attr "mode" "SI")]) - -;; Rest is handled by single and. -(define_split - [(set (match_operand:SWI24 0 "register_operand" "") - (zero_extend:SWI24 (match_operand:QI 1 "register_operand" ""))) - (clobber (reg:CC FLAGS_REG))] - "reload_completed - && true_regnum (operands[0]) == true_regnum (operands[1])" - [(parallel [(set (match_dup 0) (and:SWI24 (match_dup 0) (const_int 255))) - (clobber (reg:CC FLAGS_REG))])]) ;; Sign extension instructions @@ -5437,7 +5428,7 @@ [(set (match_operand:SI 0 "register_operand" "=r") (subreg:SI (match_operand:DI 1 "lea_address_operand" "p") 0))] "TARGET_64BIT" - "lea{l}\t{%a1, %0|%0, %a1}" + "lea{l}\t{%E1, %0|%0, %E1}" "&& reload_completed && ix86_avoid_lea_for_addr (insn, operands)" [(const_int 0)] { @@ -5451,7 +5442,7 @@ [(set (match_operand:SWI48 0 "register_operand" "=r") (match_operand:SWI48 1 "lea_address_operand" "p"))] "" - "lea{<imodesuffix>}\t{%a1, %0|%0, %a1}" + "lea{<imodesuffix>}\t{%E1, %0|%0, %E1}" "reload_completed && ix86_avoid_lea_for_addr (insn, operands)" [(const_int 0)] { @@ -5466,7 +5457,7 @@ (zero_extend:DI (subreg:SI (match_operand:DI 1 "lea_address_operand" "j") 0)))] "TARGET_64BIT" - "lea{l}\t{%a1, %k0|%k0, %a1}" + "lea{l}\t{%E1, %k0|%k0, %E1}" [(set_attr "type" "lea") (set_attr "mode" "SI")]) @@ -5475,7 +5466,7 @@ (zero_extend:DI (match_operand:SI 1 "lea_address_operand" "j")))] "TARGET_64BIT" - "lea{l}\t{%a1, %k0|%k0, %a1}" + "lea{l}\t{%E1, %k0|%k0, %E1}" [(set_attr "type" "lea") (set_attr "mode" "SI")]) @@ -5485,7 +5476,7 @@ (subreg:DI (match_operand:SI 1 "lea_address_operand" "p") 0) (match_operand:DI 2 "const_32bit_mask" "n")))] "TARGET_64BIT" - "lea{l}\t{%a1, %k0|%k0, %a1}" + "lea{l}\t{%E1, %k0|%k0, %E1}" [(set_attr "type" "lea") (set_attr "mode" "SI")]) @@ -5495,7 +5486,7 @@ (match_operand:DI 1 "lea_address_operand" "p") (match_operand:DI 2 "const_32bit_mask" "n")))] "TARGET_64BIT" - "lea{l}\t{%a1, %k0|%k0, %a1}" + "lea{l}\t{%E1, %k0|%k0, %E1}" [(set_attr "type" "lea") (set_attr "mode" "SI")]) @@ -7674,28 +7665,7 @@ switch (get_attr_type (insn)) { case TYPE_IMOVX: - { - enum machine_mode mode; - - gcc_assert (CONST_INT_P (operands[2])); - if (INTVAL (operands[2]) == (HOST_WIDE_INT) 0xffffffff) - mode = SImode; - else if (INTVAL (operands[2]) == 0xffff) - mode = HImode; - else - { - gcc_assert (INTVAL (operands[2]) == 0xff); - mode = QImode; - } - - operands[1] = gen_lowpart (mode, operands[1]); - if (mode == SImode) - return "mov{l}\t{%1, %k0|%k0, %1}"; - else if (mode == HImode) - return "movz{wl|x}\t{%1, %k0|%k0, %1}"; - else - return "movz{bl|x}\t{%1, %k0|%k0, %1}"; - } + return "#"; default: gcc_assert (rtx_equal_p (operands[0], operands[1])); @@ -7717,7 +7687,7 @@ (set_attr "mode" "SI,DI,DI,SI")]) (define_insn "*andsi_1" - [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r,r") + [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r,Ya") (and:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0,qm") (match_operand:SI 2 "x86_64_general_operand" "re,rm,L"))) (clobber (reg:CC FLAGS_REG))] @@ -7726,24 +7696,7 @@ switch (get_attr_type (insn)) { case TYPE_IMOVX: - { - enum machine_mode mode; - - gcc_assert (CONST_INT_P (operands[2])); - if (INTVAL (operands[2]) == 0xffff) - mode = HImode; - else - { - gcc_assert (INTVAL (operands[2]) == 0xff); - mode = QImode; - } - - operands[1] = gen_lowpart (mode, operands[1]); - if (mode == HImode) - return "movz{wl|x}\t{%1, %0|%0, %1}"; - else - return "movz{bl|x}\t{%1, %0|%0, %1}"; - } + return "#"; default: gcc_assert (rtx_equal_p (operands[0], operands[1])); @@ -7774,7 +7727,7 @@ (set_attr "mode" "SI")]) (define_insn "*andhi_1" - [(set (match_operand:HI 0 "nonimmediate_operand" "=rm,r,r") + [(set (match_operand:HI 0 "nonimmediate_operand" "=rm,r,Ya") (and:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0,qm") (match_operand:HI 2 "general_operand" "rn,rm,L"))) (clobber (reg:CC FLAGS_REG))] @@ -7783,13 +7736,10 @@ switch (get_attr_type (insn)) { case TYPE_IMOVX: - gcc_assert (CONST_INT_P (operands[2])); - gcc_assert (INTVAL (operands[2]) == 0xff); - return "movz{bl|x}\t{%b1, %k0|%k0, %b1}"; + return "#"; default: gcc_assert (rtx_equal_p (operands[0], operands[1])); - return "and{w}\t{%2, %0|%0, %2}"; } } @@ -7829,6 +7779,44 @@ (set_attr "mode" "QI")]) (define_split + [(set (match_operand:SWI248 0 "register_operand" "") + (and:SWI248 (match_operand:SWI248 1 "nonimmediate_operand" "") + (match_operand:SWI248 2 "const_int_operand" ""))) + (clobber (reg:CC FLAGS_REG))] + "reload_completed + && true_regnum (operands[0]) != true_regnum (operands[1])" + [(const_int 0)] +{ + enum machine_mode mode; + + if (INTVAL (operands[2]) == (HOST_WIDE_INT) 0xffffffff) + mode = SImode; + else if (INTVAL (operands[2]) == 0xffff) + mode = HImode; + else + { + gcc_assert (INTVAL (operands[2]) == 0xff); + mode = QImode; + } + + operands[1] = gen_lowpart (mode, operands[1]); + + if (mode == SImode) + emit_insn (gen_zero_extendsidi2 (operands[0], operands[1])); + else + { + rtx (*insn) (rtx, rtx); + + /* Zero extend to SImode to avoid partial register stalls. */ + operands[0] = gen_lowpart (SImode, operands[0]); + + insn = (mode == HImode) ? gen_zero_extendhisi2 : gen_zero_extendqisi2; + emit_insn (insn (operands[0], operands[1])); + } + DONE; +}) + +(define_split [(set (match_operand 0 "register_operand" "") (and (match_dup 0) (const_int -65536))) @@ -11175,18 +11163,17 @@ ix86_expand_clear (operands[3]); }) -;; Similar, but match zero_extendhisi2_and, which adds a clobber. +;; Similar, but match zero extend with andsi3. (define_peephole2 [(set (reg FLAGS_REG) (match_operand 0 "" "")) (set (match_operand:QI 1 "register_operand" "") (match_operator:QI 2 "ix86_comparison_operator" [(reg FLAGS_REG) (const_int 0)])) - (parallel [(set (match_operand 3 "q_regs_operand" "") - (zero_extend (match_dup 1))) + (parallel [(set (match_operand:SI 3 "q_regs_operand" "") + (and:SI (match_dup 3) (const_int 255))) (clobber (reg:CC FLAGS_REG))])] - "(peep2_reg_dead_p (3, operands[1]) - || operands_match_p (operands[1], operands[3])) + "REGNO (operands[1]) == REGNO (operands[3]) && ! reg_overlap_mentioned_p (operands[3], operands[0])" [(set (match_dup 4) (match_dup 0)) (set (strict_low_part (match_dup 5)) @@ -12556,7 +12543,7 @@ "!TARGET_64BIT && TARGET_GNU_TLS" { output_asm_insn - ("lea{l}\t{%a2@tlsgd(,%1,1), %0|%0, %a2@tlsgd[%1*1]}", operands); + ("lea{l}\t{%E2@tlsgd(,%1,1), %0|%0, %E2@tlsgd[%1*1]}", operands); if (TARGET_SUN_TLS) #ifdef HAVE_AS_IX86_TLSGDPLT return "call\t%a2@tlsgdplt"; @@ -12591,7 +12578,7 @@ if (!TARGET_X32) fputs (ASM_BYTE "0x66\n", asm_out_file); output_asm_insn - ("lea{q}\t{%a1@tlsgd(%%rip), %%rdi|rdi, %a1@tlsgd[rip]}", operands); + ("lea{q}\t{%E1@tlsgd(%%rip), %%rdi|rdi, %E1@tlsgd[rip]}", operands); fputs (ASM_SHORT "0x6666\n", asm_out_file); fputs ("\trex64\n", asm_out_file); if (TARGET_SUN_TLS) @@ -12817,7 +12804,7 @@ (unspec:SI [(match_operand:SI 2 "tls_symbolic_operand" "")] UNSPEC_TLSDESC))))] "!TARGET_64BIT && TARGET_GNU2_TLS" - "lea{l}\t{%a2@TLSDESC(%1), %0|%0, %a2@TLSDESC[%1]}" + "lea{l}\t{%E2@TLSDESC(%1), %0|%0, %E2@TLSDESC[%1]}" [(set_attr "type" "lea") (set_attr "mode" "SI") (set_attr "length" "6") @@ -12879,7 +12866,7 @@ (unspec:DI [(match_operand 1 "tls_symbolic_operand" "")] UNSPEC_TLSDESC))] "TARGET_64BIT && TARGET_GNU2_TLS" - "lea{q}\t{%a1@TLSDESC(%%rip), %0|%0, %a1@TLSDESC[rip]}" + "lea{q}\t{%E1@TLSDESC(%%rip), %0|%0, %E1@TLSDESC[rip]}" [(set_attr "type" "lea") (set_attr "mode" "DI") (set_attr "length" "7") @@ -15700,17 +15687,17 @@ "ix86_current_function_needs_cld = 1;") (define_insn "*strmovdi_rex_1" - [(set (mem:DI (match_operand:DI 2 "register_operand" "0")) - (mem:DI (match_operand:DI 3 "register_operand" "1"))) - (set (match_operand:DI 0 "register_operand" "=D") - (plus:DI (match_dup 2) - (const_int 8))) - (set (match_operand:DI 1 "register_operand" "=S") - (plus:DI (match_dup 3) - (const_int 8)))] + [(set (mem:DI (match_operand:P 2 "register_operand" "0")) + (mem:DI (match_operand:P 3 "register_operand" "1"))) + (set (match_operand:P 0 "register_operand" "=D") + (plus:P (match_dup 2) + (const_int 8))) + (set (match_operand:P 1 "register_operand" "=S") + (plus:P (match_dup 3) + (const_int 8)))] "TARGET_64BIT && !(fixed_regs[SI_REG] || fixed_regs[DI_REG])" - "movsq" + "%^movsq" [(set_attr "type" "str") (set_attr "memory" "both") (set_attr "mode" "DI")]) @@ -15725,7 +15712,7 @@ (plus:P (match_dup 3) (const_int 4)))] "!(fixed_regs[SI_REG] || fixed_regs[DI_REG])" - "movs{l|d}" + "%^movs{l|d}" [(set_attr "type" "str") (set_attr "memory" "both") (set_attr "mode" "SI")]) @@ -15740,7 +15727,7 @@ (plus:P (match_dup 3) (const_int 2)))] "!(fixed_regs[SI_REG] || fixed_regs[DI_REG])" - "movsw" + "%^movsw" [(set_attr "type" "str") (set_attr "memory" "both") (set_attr "mode" "HI")]) @@ -15755,7 +15742,7 @@ (plus:P (match_dup 3) (const_int 1)))] "!(fixed_regs[SI_REG] || fixed_regs[DI_REG])" - "movsb" + "%^movsb" [(set_attr "type" "str") (set_attr "memory" "both") (set (attr "prefix_rex") @@ -15778,20 +15765,20 @@ "ix86_current_function_needs_cld = 1;") (define_insn "*rep_movdi_rex64" - [(set (match_operand:DI 2 "register_operand" "=c") (const_int 0)) - (set (match_operand:DI 0 "register_operand" "=D") - (plus:DI (ashift:DI (match_operand:DI 5 "register_operand" "2") - (const_int 3)) - (match_operand:DI 3 "register_operand" "0"))) - (set (match_operand:DI 1 "register_operand" "=S") - (plus:DI (ashift:DI (match_dup 5) (const_int 3)) - (match_operand:DI 4 "register_operand" "1"))) + [(set (match_operand:P 2 "register_operand" "=c") (const_int 0)) + (set (match_operand:P 0 "register_operand" "=D") + (plus:P (ashift:P (match_operand:P 5 "register_operand" "2") + (const_int 3)) + (match_operand:P 3 "register_operand" "0"))) + (set (match_operand:P 1 "register_operand" "=S") + (plus:P (ashift:P (match_dup 5) (const_int 3)) + (match_operand:P 4 "register_operand" "1"))) (set (mem:BLK (match_dup 3)) (mem:BLK (match_dup 4))) (use (match_dup 5))] "TARGET_64BIT && !(fixed_regs[CX_REG] || fixed_regs[SI_REG] || fixed_regs[DI_REG])" - "rep{%;} movsq" + "%^rep{%;} movsq" [(set_attr "type" "str") (set_attr "prefix_rep" "1") (set_attr "memory" "both") @@ -15810,7 +15797,7 @@ (mem:BLK (match_dup 4))) (use (match_dup 5))] "!(fixed_regs[CX_REG] || fixed_regs[SI_REG] || fixed_regs[DI_REG])" - "rep{%;} movs{l|d}" + "%^rep{%;} movs{l|d}" [(set_attr "type" "str") (set_attr "prefix_rep" "1") (set_attr "memory" "both") @@ -15827,7 +15814,7 @@ (mem:BLK (match_dup 4))) (use (match_dup 5))] "!(fixed_regs[CX_REG] || fixed_regs[SI_REG] || fixed_regs[DI_REG])" - "rep{%;} movsb" + "%^rep{%;} movsb" [(set_attr "type" "str") (set_attr "prefix_rep" "1") (set_attr "memory" "both") @@ -15888,14 +15875,14 @@ "ix86_current_function_needs_cld = 1;") (define_insn "*strsetdi_rex_1" - [(set (mem:DI (match_operand:DI 1 "register_operand" "0")) + [(set (mem:DI (match_operand:P 1 "register_operand" "0")) (match_operand:DI 2 "register_operand" "a")) - (set (match_operand:DI 0 "register_operand" "=D") - (plus:DI (match_dup 1) - (const_int 8)))] + (set (match_operand:P 0 "register_operand" "=D") + (plus:P (match_dup 1) + (const_int 8)))] "TARGET_64BIT && !(fixed_regs[AX_REG] || fixed_regs[DI_REG])" - "stosq" + "%^stosq" [(set_attr "type" "str") (set_attr "memory" "store") (set_attr "mode" "DI")]) @@ -15907,7 +15894,7 @@ (plus:P (match_dup 1) (const_int 4)))] "!(fixed_regs[AX_REG] || fixed_regs[DI_REG])" - "stos{l|d}" + "%^stos{l|d}" [(set_attr "type" "str") (set_attr "memory" "store") (set_attr "mode" "SI")]) @@ -15919,7 +15906,7 @@ (plus:P (match_dup 1) (const_int 2)))] "!(fixed_regs[AX_REG] || fixed_regs[DI_REG])" - "stosw" + "%^stosw" [(set_attr "type" "str") (set_attr "memory" "store") (set_attr "mode" "HI")]) @@ -15931,7 +15918,7 @@ (plus:P (match_dup 1) (const_int 1)))] "!(fixed_regs[AX_REG] || fixed_regs[DI_REG])" - "stosb" + "%^stosb" [(set_attr "type" "str") (set_attr "memory" "store") (set (attr "prefix_rex") @@ -15952,18 +15939,18 @@ "ix86_current_function_needs_cld = 1;") (define_insn "*rep_stosdi_rex64" - [(set (match_operand:DI 1 "register_operand" "=c") (const_int 0)) - (set (match_operand:DI 0 "register_operand" "=D") - (plus:DI (ashift:DI (match_operand:DI 4 "register_operand" "1") - (const_int 3)) - (match_operand:DI 3 "register_operand" "0"))) + [(set (match_operand:P 1 "register_operand" "=c") (const_int 0)) + (set (match_operand:P 0 "register_operand" "=D") + (plus:P (ashift:P (match_operand:P 4 "register_operand" "1") + (const_int 3)) + (match_operand:P 3 "register_operand" "0"))) (set (mem:BLK (match_dup 3)) (const_int 0)) (use (match_operand:DI 2 "register_operand" "a")) (use (match_dup 4))] "TARGET_64BIT && !(fixed_regs[AX_REG] || fixed_regs[CX_REG] || fixed_regs[DI_REG])" - "rep{%;} stosq" + "%^rep{%;} stosq" [(set_attr "type" "str") (set_attr "prefix_rep" "1") (set_attr "memory" "store") @@ -15980,7 +15967,7 @@ (use (match_operand:SI 2 "register_operand" "a")) (use (match_dup 4))] "!(fixed_regs[AX_REG] || fixed_regs[CX_REG] || fixed_regs[DI_REG])" - "rep{%;} stos{l|d}" + "%^rep{%;} stos{l|d}" [(set_attr "type" "str") (set_attr "prefix_rep" "1") (set_attr "memory" "store") @@ -15996,7 +15983,7 @@ (use (match_operand:QI 2 "register_operand" "a")) (use (match_dup 4))] "!(fixed_regs[AX_REG] || fixed_regs[CX_REG] || fixed_regs[DI_REG])" - "rep{%;} stosb" + "%^rep{%;} stosb" [(set_attr "type" "str") (set_attr "prefix_rep" "1") (set_attr "memory" "store") @@ -16117,7 +16104,7 @@ (clobber (match_operand:P 1 "register_operand" "=D")) (clobber (match_operand:P 2 "register_operand" "=c"))] "!(fixed_regs[CX_REG] || fixed_regs[SI_REG] || fixed_regs[DI_REG])" - "repz{%;} cmpsb" + "%^repz{%;} cmpsb" [(set_attr "type" "str") (set_attr "mode" "QI") (set (attr "prefix_rex") @@ -16157,7 +16144,7 @@ (clobber (match_operand:P 1 "register_operand" "=D")) (clobber (match_operand:P 2 "register_operand" "=c"))] "!(fixed_regs[CX_REG] || fixed_regs[SI_REG] || fixed_regs[DI_REG])" - "repz{%;} cmpsb" + "%^repz{%;} cmpsb" [(set_attr "type" "str") (set_attr "mode" "QI") (set (attr "prefix_rex") @@ -16198,7 +16185,7 @@ (clobber (match_operand:P 1 "register_operand" "=D")) (clobber (reg:CC FLAGS_REG))] "!(fixed_regs[AX_REG] || fixed_regs[CX_REG] || fixed_regs[DI_REG])" - "repnz{%;} scasb" + "%^repnz{%;} scasb" [(set_attr "type" "str") (set_attr "mode" "QI") (set (attr "prefix_rex") @@ -16629,7 +16616,7 @@ default: operands[2] = SET_SRC (XVECEXP (PATTERN (insn), 0, 0)); - return "lea{<imodesuffix>}\t{%a2, %0|%0, %a2}"; + return "lea{<imodesuffix>}\t{%E2, %0|%0, %E2}"; } } [(set (attr "type") @@ -17354,131 +17341,131 @@ ;; alternative when no register is available later. (define_peephole2 - [(match_scratch:P 1 "r") + [(match_scratch:W 1 "r") (parallel [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_operand:P 0 "const_int_operand" ""))) (clobber (reg:CC FLAGS_REG)) (clobber (mem:BLK (scratch)))])] "(TARGET_SINGLE_PUSH || optimize_insn_for_size_p ()) - && INTVAL (operands[0]) == -GET_MODE_SIZE (Pmode)" + && INTVAL (operands[0]) == -GET_MODE_SIZE (word_mode)" [(clobber (match_dup 1)) - (parallel [(set (mem:P (pre_dec:P (reg:P SP_REG))) (match_dup 1)) + (parallel [(set (mem:W (pre_dec:P (reg:P SP_REG))) (match_dup 1)) (clobber (mem:BLK (scratch)))])]) (define_peephole2 - [(match_scratch:P 1 "r") + [(match_scratch:W 1 "r") (parallel [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_operand:P 0 "const_int_operand" ""))) (clobber (reg:CC FLAGS_REG)) (clobber (mem:BLK (scratch)))])] "(TARGET_DOUBLE_PUSH || optimize_insn_for_size_p ()) - && INTVAL (operands[0]) == -2*GET_MODE_SIZE (Pmode)" + && INTVAL (operands[0]) == -2*GET_MODE_SIZE (word_mode)" [(clobber (match_dup 1)) - (set (mem:P (pre_dec:P (reg:P SP_REG))) (match_dup 1)) - (parallel [(set (mem:P (pre_dec:P (reg:P SP_REG))) (match_dup 1)) + (set (mem:W (pre_dec:P (reg:P SP_REG))) (match_dup 1)) + (parallel [(set (mem:W (pre_dec:P (reg:P SP_REG))) (match_dup 1)) (clobber (mem:BLK (scratch)))])]) ;; Convert esp subtractions to push. (define_peephole2 - [(match_scratch:P 1 "r") + [(match_scratch:W 1 "r") (parallel [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_operand:P 0 "const_int_operand" ""))) (clobber (reg:CC FLAGS_REG))])] "(TARGET_SINGLE_PUSH || optimize_insn_for_size_p ()) - && INTVAL (operands[0]) == -GET_MODE_SIZE (Pmode)" + && INTVAL (operands[0]) == -GET_MODE_SIZE (word_mode)" [(clobber (match_dup 1)) - (set (mem:P (pre_dec:P (reg:P SP_REG))) (match_dup 1))]) + (set (mem:W (pre_dec:P (reg:P SP_REG))) (match_dup 1))]) (define_peephole2 - [(match_scratch:P 1 "r") + [(match_scratch:W 1 "r") (parallel [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_operand:P 0 "const_int_operand" ""))) (clobber (reg:CC FLAGS_REG))])] "(TARGET_DOUBLE_PUSH || optimize_insn_for_size_p ()) - && INTVAL (operands[0]) == -2*GET_MODE_SIZE (Pmode)" + && INTVAL (operands[0]) == -2*GET_MODE_SIZE (word_mode)" [(clobber (match_dup 1)) - (set (mem:P (pre_dec:P (reg:P SP_REG))) (match_dup 1)) - (set (mem:P (pre_dec:P (reg:P SP_REG))) (match_dup 1))]) + (set (mem:W (pre_dec:P (reg:P SP_REG))) (match_dup 1)) + (set (mem:W (pre_dec:P (reg:P SP_REG))) (match_dup 1))]) ;; Convert epilogue deallocator to pop. (define_peephole2 - [(match_scratch:P 1 "r") + [(match_scratch:W 1 "r") (parallel [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_operand:P 0 "const_int_operand" ""))) (clobber (reg:CC FLAGS_REG)) (clobber (mem:BLK (scratch)))])] "(TARGET_SINGLE_POP || optimize_insn_for_size_p ()) - && INTVAL (operands[0]) == GET_MODE_SIZE (Pmode)" - [(parallel [(set (match_dup 1) (mem:P (post_inc:P (reg:P SP_REG)))) + && INTVAL (operands[0]) == GET_MODE_SIZE (word_mode)" + [(parallel [(set (match_dup 1) (mem:W (post_inc:P (reg:P SP_REG)))) (clobber (mem:BLK (scratch)))])]) ;; Two pops case is tricky, since pop causes dependency ;; on destination register. We use two registers if available. (define_peephole2 - [(match_scratch:P 1 "r") - (match_scratch:P 2 "r") + [(match_scratch:W 1 "r") + (match_scratch:W 2 "r") (parallel [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_operand:P 0 "const_int_operand" ""))) (clobber (reg:CC FLAGS_REG)) (clobber (mem:BLK (scratch)))])] "(TARGET_DOUBLE_POP || optimize_insn_for_size_p ()) - && INTVAL (operands[0]) == 2*GET_MODE_SIZE (Pmode)" - [(parallel [(set (match_dup 1) (mem:P (post_inc:P (reg:P SP_REG)))) + && INTVAL (operands[0]) == 2*GET_MODE_SIZE (word_mode)" + [(parallel [(set (match_dup 1) (mem:W (post_inc:P (reg:P SP_REG)))) (clobber (mem:BLK (scratch)))]) - (set (match_dup 2) (mem:P (post_inc:P (reg:P SP_REG))))]) + (set (match_dup 2) (mem:W (post_inc:P (reg:P SP_REG))))]) (define_peephole2 - [(match_scratch:P 1 "r") + [(match_scratch:W 1 "r") (parallel [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_operand:P 0 "const_int_operand" ""))) (clobber (reg:CC FLAGS_REG)) (clobber (mem:BLK (scratch)))])] "optimize_insn_for_size_p () - && INTVAL (operands[0]) == 2*GET_MODE_SIZE (Pmode)" - [(parallel [(set (match_dup 1) (mem:P (post_inc:P (reg:P SP_REG)))) + && INTVAL (operands[0]) == 2*GET_MODE_SIZE (word_mode)" + [(parallel [(set (match_dup 1) (mem:W (post_inc:P (reg:P SP_REG)))) (clobber (mem:BLK (scratch)))]) - (set (match_dup 1) (mem:P (post_inc:P (reg:P SP_REG))))]) + (set (match_dup 1) (mem:W (post_inc:P (reg:P SP_REG))))]) ;; Convert esp additions to pop. (define_peephole2 - [(match_scratch:P 1 "r") + [(match_scratch:W 1 "r") (parallel [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_operand:P 0 "const_int_operand" ""))) (clobber (reg:CC FLAGS_REG))])] - "INTVAL (operands[0]) == GET_MODE_SIZE (Pmode)" - [(set (match_dup 1) (mem:P (post_inc:P (reg:P SP_REG))))]) + "INTVAL (operands[0]) == GET_MODE_SIZE (word_mode)" + [(set (match_dup 1) (mem:W (post_inc:P (reg:P SP_REG))))]) ;; Two pops case is tricky, since pop causes dependency ;; on destination register. We use two registers if available. (define_peephole2 - [(match_scratch:P 1 "r") - (match_scratch:P 2 "r") + [(match_scratch:W 1 "r") + (match_scratch:W 2 "r") (parallel [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_operand:P 0 "const_int_operand" ""))) (clobber (reg:CC FLAGS_REG))])] - "INTVAL (operands[0]) == 2*GET_MODE_SIZE (Pmode)" - [(set (match_dup 1) (mem:P (post_inc:P (reg:P SP_REG)))) - (set (match_dup 2) (mem:P (post_inc:P (reg:P SP_REG))))]) + "INTVAL (operands[0]) == 2*GET_MODE_SIZE (word_mode)" + [(set (match_dup 1) (mem:W (post_inc:P (reg:P SP_REG)))) + (set (match_dup 2) (mem:W (post_inc:P (reg:P SP_REG))))]) (define_peephole2 - [(match_scratch:P 1 "r") + [(match_scratch:W 1 "r") (parallel [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_operand:P 0 "const_int_operand" ""))) (clobber (reg:CC FLAGS_REG))])] "optimize_insn_for_size_p () - && INTVAL (operands[0]) == 2*GET_MODE_SIZE (Pmode)" - [(set (match_dup 1) (mem:P (post_inc:P (reg:P SP_REG)))) - (set (match_dup 1) (mem:P (post_inc:P (reg:P SP_REG))))]) + && INTVAL (operands[0]) == 2*GET_MODE_SIZE (word_mode)" + [(set (match_dup 1) (mem:W (post_inc:P (reg:P SP_REG)))) + (set (match_dup 1) (mem:W (post_inc:P (reg:P SP_REG))))]) ;; Convert compares with 1 to shorter inc/dec operations when CF is not ;; required and register dies. Similarly for 128 to -128. @@ -17589,7 +17576,7 @@ ;; leal (%edx,%eax,4), %eax (define_peephole2 - [(match_scratch:P 5 "r") + [(match_scratch:W 5 "r") (parallel [(set (match_operand 0 "register_operand" "") (ashift (match_operand 1 "register_operand" "") (match_operand 2 "const_int_operand" ""))) @@ -17615,16 +17602,16 @@ enum machine_mode op1mode = GET_MODE (operands[1]); enum machine_mode mode = op1mode == DImode ? DImode : SImode; int scale = 1 << INTVAL (operands[2]); - rtx index = gen_lowpart (Pmode, operands[1]); - rtx base = gen_lowpart (Pmode, operands[5]); + rtx index = gen_lowpart (word_mode, operands[1]); + rtx base = gen_lowpart (word_mode, operands[5]); rtx dest = gen_lowpart (mode, operands[3]); - operands[1] = gen_rtx_PLUS (Pmode, base, - gen_rtx_MULT (Pmode, index, GEN_INT (scale))); + operands[1] = gen_rtx_PLUS (word_mode, base, + gen_rtx_MULT (word_mode, index, GEN_INT (scale))); operands[5] = base; - if (mode != Pmode) + if (mode != word_mode) operands[1] = gen_rtx_SUBREG (mode, operands[1], 0); - if (op1mode != Pmode) + if (op1mode != word_mode) operands[5] = gen_rtx_SUBREG (op1mode, operands[5], 0); operands[0] = dest; }) diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md index 32f73dacdd8..dad8bf3d29a 100644 --- a/gcc/config/i386/predicates.md +++ b/gcc/config/i386/predicates.md @@ -341,6 +341,14 @@ (match_operand 0 "general_operand"))) ;; Return true if OP is general operand representable on x86_64 +;; as zero extended constant. +(define_predicate "x86_64_zext_general_operand" + (if_then_else (match_test "TARGET_64BIT") + (ior (match_operand 0 "nonimmediate_operand") + (match_operand 0 "x86_64_zext_immediate_operand")) + (match_operand 0 "general_operand"))) + +;; Return true if OP is general operand representable on x86_64 ;; as either sign extended or zero extended constant. (define_predicate "x86_64_szext_general_operand" (if_then_else (match_test "TARGET_64BIT") @@ -558,9 +566,9 @@ ;; Test for a valid operand for indirect branch. (define_predicate "indirect_branch_operand" - (if_then_else (match_test "TARGET_X32") - (match_operand 0 "register_operand") - (match_operand 0 "nonimmediate_operand"))) + (ior (match_operand 0 "register_operand") + (and (not (match_test "TARGET_X32")) + (match_operand 0 "memory_operand")))) ;; Test for a valid operand for a call instruction. (define_predicate "call_insn_operand" diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index d07069de5cb..4afc4b3e249 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -3895,13 +3895,13 @@ ;; see comment above inline_secondary_memory_needed function in i386.c (define_insn "vec_set<mode>_0" [(set (match_operand:VI4F_128 0 "nonimmediate_operand" - "=x,x,x ,x,x,x,x ,x ,m,m ,m") + "=x,x,x ,x,x,x,x ,x ,m ,m ,m") (vec_merge:VI4F_128 (vec_duplicate:VI4F_128 (match_operand:<ssescalarmode> 2 "general_operand" - " x,m,*r,m,x,x,*rm,*rm,x,fF,*r")) + " x,m,*r,m,x,x,*rm,*rm,!x,!*re,!*fF")) (match_operand:VI4F_128 1 "vector_move_operand" - " C,C,C ,C,0,x,0 ,x ,0,0 ,0") + " C,C,C ,C,0,x,0 ,x ,0 ,0 ,0") (const_int 1)))] "TARGET_SSE" "@ @@ -3921,9 +3921,9 @@ (cond [(eq_attr "alternative" "0,6,7") (const_string "sselog") (eq_attr "alternative" "9") - (const_string "fmov") - (eq_attr "alternative" "10") (const_string "imov") + (eq_attr "alternative" "10") + (const_string "fmov") ] (const_string "ssemov"))) (set_attr "prefix_extra" "*,*,*,*,*,*,1,1,*,*,*") diff --git a/gcc/config/i386/winnt.c b/gcc/config/i386/winnt.c index 79cbb6b4a28..c1ed1c04369 100644 --- a/gcc/config/i386/winnt.c +++ b/gcc/config/i386/winnt.c @@ -395,6 +395,10 @@ i386_pe_unique_section (tree decl, int reloc) const char *name, *prefix; char *string; + /* Ignore RELOC, if we are allowed to put relocated + const data into read-only section. */ + if (!flag_writable_rel_rdata) + reloc = 0; name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); name = i386_pe_strip_name_encoding_full (name); @@ -441,6 +445,10 @@ i386_pe_section_type_flags (tree decl, const char *name, int reloc) unsigned int flags; unsigned int **slot; + /* Ignore RELOC, if we are allowed to put relocated + const data into read-only section. */ + if (!flag_writable_rel_rdata) + reloc = 0; /* The names we put in the hashtable will always be the unique versions given to us by the stringtable, so we can just use their addresses as the keys. */ diff --git a/gcc/config/initfini-array.h b/gcc/config/initfini-array.h index bb48c70a920..ade9fcd634c 100644 --- a/gcc/config/initfini-array.h +++ b/gcc/config/initfini-array.h @@ -19,7 +19,7 @@ along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>. */ -#ifdef HAVE_INITFINI_ARRAY +#ifdef HAVE_INITFINI_ARRAY_SUPPORT #define USE_INITFINI_ARRAY diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h index dbb97561d57..42d377942e7 100644 --- a/gcc/config/m68k/m68k.h +++ b/gcc/config/m68k/m68k.h @@ -249,6 +249,7 @@ along with GCC; see the file COPYING3. If not see /* Some instructions are common to more than one ISA. */ #define ISA_HAS_MVS_MVZ (TARGET_ISAB || TARGET_ISAC) #define ISA_HAS_FF1 (TARGET_ISAAPLUS || TARGET_ISAC) +#define ISA_HAS_TAS (!TARGET_COLDFIRE || TARGET_ISAB || TARGET_ISAC) #define TUNE_68000 (m68k_tune == u68000) #define TUNE_68010 (m68k_tune == u68010) diff --git a/gcc/config/m68k/sync.md b/gcc/config/m68k/sync.md index 5d5002a9c81..d5cab792ba4 100644 --- a/gcc/config/m68k/sync.md +++ b/gcc/config/m68k/sync.md @@ -60,10 +60,13 @@ [(match_operand:QI 0 "register_operand" "") ;; bool success output (match_operand:QI 1 "memory_operand" "") ;; memory (match_operand:SI 2 "const_int_operand" "")] ;; model - "" + "ISA_HAS_TAS" { - emit_insn (gen_atomic_test_and_set_1 (operands[0], operands[1])); - emit_insn (gen_negqi2 (operands[0], operands[0])); + rtx t = gen_reg_rtx (QImode); + emit_insn (gen_atomic_test_and_set_1 (t, operands[1])); + t = expand_simple_unop (QImode, NEG, t, operands[0], 0); + if (t != operands[0]) + emit_move_insn (operands[0], t); DONE; }) @@ -74,5 +77,5 @@ UNSPECV_TAS_1)) (set (match_dup 1) (unspec_volatile:QI [(match_dup 1)] UNSPECV_TAS_2))] - "" + "ISA_HAS_TAS" "tas %1\;sne %0") diff --git a/gcc/config/mep/mep.c b/gcc/config/mep/mep.c index 39d9cf95d30..4351702fa4b 100644 --- a/gcc/config/mep/mep.c +++ b/gcc/config/mep/mep.c @@ -6059,33 +6059,17 @@ mep_init_builtins (void) v4uhi_type_node = build_vector_type (unsigned_intHI_type_node, 4); v2usi_type_node = build_vector_type (unsigned_intSI_type_node, 2); - (*lang_hooks.decls.pushdecl) - (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_data_bus_int"), - cp_data_bus_int_type_node)); - - (*lang_hooks.decls.pushdecl) - (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_vector"), - opaque_vector_type_node)); - - (*lang_hooks.decls.pushdecl) - (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_v8qi"), - v8qi_type_node)); - (*lang_hooks.decls.pushdecl) - (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_v4hi"), - v4hi_type_node)); - (*lang_hooks.decls.pushdecl) - (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_v2si"), - v2si_type_node)); - - (*lang_hooks.decls.pushdecl) - (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_v8uqi"), - v8uqi_type_node)); - (*lang_hooks.decls.pushdecl) - (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_v4uhi"), - v4uhi_type_node)); - (*lang_hooks.decls.pushdecl) - (build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("cp_v2usi"), - v2usi_type_node)); + add_builtin_type ("cp_data_bus_int", cp_data_bus_int_type_node); + + add_builtin_type ("cp_vector", opaque_vector_type_node); + + add_builtin_type ("cp_v8qi", v8qi_type_node); + add_builtin_type ("cp_v4hi", v4hi_type_node); + add_builtin_type ("cp_v2si", v2si_type_node); + + add_builtin_type ("cp_v8uqi", v8uqi_type_node); + add_builtin_type ("cp_v4uhi", v4uhi_type_node); + add_builtin_type ("cp_v2usi", v2usi_type_node); /* Intrinsics like mep_cadd3 are implemented with two groups of instructions, one which uses UNSPECs and one which uses a specific diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 56863fa88ea..1a262675290 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -592,6 +592,9 @@ struct target_globals *mips16_globals; and returned from mips_sched_reorder2. */ static int cached_can_issue_more; +/* True if the output uses __mips16_rdhwr. */ +static bool mips_need_mips16_rdhwr_p; + /* Index R is the smallest register class that contains register R. */ const enum reg_class mips_regno_to_class[FIRST_PSEUDO_REGISTER] = { LEA_REGS, LEA_REGS, M16_REGS, V1_REG, @@ -2842,7 +2845,9 @@ mips_get_tp (void) tp = gen_reg_rtx (Pmode); if (TARGET_MIPS16) { + mips_need_mips16_rdhwr_p = true; fn = mips16_stub_function ("__mips16_rdhwr"); + SYMBOL_REF_FLAGS (fn) |= SYMBOL_FLAG_LOCAL; if (!call_insn_operand (fn, VOIDmode)) fn = force_reg (Pmode, fn); emit_insn (PMODE_INSN (gen_tls_get_tp_mips16, (tp, fn))); @@ -5827,6 +5832,33 @@ mips_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, return addr; } +/* Declare a unique, locally-binding function called NAME, then start + its definition. */ + +static void +mips_start_unique_function (const char *name) +{ + tree decl; + + decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL, + get_identifier (name), + build_function_type_list (void_type_node, NULL_TREE)); + DECL_RESULT (decl) = build_decl (BUILTINS_LOCATION, RESULT_DECL, + NULL_TREE, void_type_node); + TREE_PUBLIC (decl) = 1; + TREE_STATIC (decl) = 1; + + DECL_COMDAT_GROUP (decl) = DECL_ASSEMBLER_NAME (decl); + + targetm.asm_out.unique_section (decl, 0); + switch_to_section (get_named_section (decl, NULL, 0)); + + targetm.asm_out.globalize_label (asm_out_file, name); + fputs ("\t.hidden\t", asm_out_file); + assemble_name (asm_out_file, name); + putc ('\n', asm_out_file); +} + /* Start a definition of function NAME. MIPS16_P indicates whether the function contains MIPS16 code. */ @@ -5865,6 +5897,26 @@ mips_end_function_definition (const char *name) } } +/* Output a definition of the __mips16_rdhwr function. */ + +static void +mips_output_mips16_rdhwr (void) +{ + const char *name; + + name = "__mips16_rdhwr"; + mips_start_unique_function (name); + mips_start_function_definition (name, false); + fprintf (asm_out_file, + "\t.set\tpush\n" + "\t.set\tmips32r2\n" + "\t.set\tnoreorder\n" + "\trdhwr\t$3,$29\n" + "\t.set\tpop\n" + "\tj\t$31\n"); + mips_end_function_definition (name); +} + /* Return true if calls to X can use R_MIPS_CALL* relocations. */ static bool @@ -6387,7 +6439,20 @@ mips16_build_call_stub (rtx retval, rtx *fn_ptr, rtx args_size, int fp_code) assemble_start_function (stubdecl, stubname); mips_start_function_definition (stubname, false); - if (!fp_ret_p) + if (fp_ret_p) + { + fprintf (asm_out_file, "\t.cfi_startproc\n"); + + /* Create a fake CFA 4 bytes below the stack pointer. + This works around unwinders (like libgcc's) that expect + the CFA for non-signal frames to be unique. */ + fprintf (asm_out_file, "\t.cfi_def_cfa 29,-4\n"); + + /* "Save" $sp in itself so we don't use the fake CFA. + This is: DW_CFA_val_expression r29, { DW_OP_reg29 }. */ + fprintf (asm_out_file, "\t.cfi_escape 0x16,29,1,0x6d\n"); + } + else { /* Load the address of the MIPS16 function into $25. Do this first so that targets with coprocessor interlocks can use @@ -6405,12 +6470,7 @@ mips16_build_call_stub (rtx retval, rtx *fn_ptr, rtx args_size, int fp_code) registers. */ mips_output_args_xfer (fp_code, 't'); - if (!fp_ret_p) - { - /* Jump to the previously-loaded address. */ - output_asm_insn ("jr\t%^", NULL); - } - else + if (fp_ret_p) { /* Save the return address in $18 and call the non-MIPS16 function. The stub's caller knows that $18 might be clobbered, even though @@ -6418,6 +6478,7 @@ mips16_build_call_stub (rtx retval, rtx *fn_ptr, rtx args_size, int fp_code) fprintf (asm_out_file, "\tmove\t%s,%s\n", reg_names[GP_REG_FIRST + 18], reg_names[RETURN_ADDR_REGNUM]); output_asm_insn (MIPS_CALL ("jal", &fn, 0, -1), &fn); + fprintf (asm_out_file, "\t.cfi_register 31,18\n"); /* Move the result from floating-point registers to general registers. */ @@ -6470,6 +6531,12 @@ mips16_build_call_stub (rtx retval, rtx *fn_ptr, rtx args_size, int fp_code) gcc_unreachable (); } fprintf (asm_out_file, "\tjr\t%s\n", reg_names[GP_REG_FIRST + 18]); + fprintf (asm_out_file, "\t.cfi_endproc\n"); + } + else + { + /* Jump to the previously-loaded address. */ + output_asm_insn ("jr\t%^", NULL); } #ifdef ASM_DECLARE_FUNCTION_SIZE @@ -8452,6 +8519,15 @@ mips_file_start (void) ASM_COMMENT_START, mips_small_data_threshold, mips_arch_info->name, mips_isa); } + +/* Implement TARGET_ASM_CODE_END. */ + +static void +mips_code_end (void) +{ + if (mips_need_mips16_rdhwr_p) + mips_output_mips16_rdhwr (); +} /* Make the last instruction frame-related and note that it performs the operation described by FRAME_PATTERN. */ @@ -17342,6 +17418,8 @@ mips_expand_vec_minmax (rtx target, rtx op0, rtx op1, #define TARGET_ASM_FILE_START mips_file_start #undef TARGET_ASM_FILE_START_FILE_DIRECTIVE #define TARGET_ASM_FILE_START_FILE_DIRECTIVE true +#undef TARGET_ASM_CODE_END +#define TARGET_ASM_CODE_END mips_code_end #undef TARGET_INIT_LIBFUNCS #define TARGET_INIT_LIBFUNCS mips_init_libfuncs diff --git a/gcc/config/mn10300/mn10300-modes.def b/gcc/config/mn10300/mn10300-modes.def index 832663edb2a..b37b9cc4fd3 100644 --- a/gcc/config/mn10300/mn10300-modes.def +++ b/gcc/config/mn10300/mn10300-modes.def @@ -6,7 +6,7 @@ GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 2, or (at your + by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT @@ -15,9 +15,8 @@ License for more details. You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING. If not, write to - the Free Software Foundation, , Inc., 51 Franklin Street - Fifth - Floor, Boston, MA 02110-1301, USA. */ + along with GCC; see the file COPYING3. If not see + <http://www.gnu.org/licenses/>. */ CC_MODE (CCZN); CC_MODE (CCZNC); diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index d5417febe8b..a69f2b8a365 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -6349,7 +6349,7 @@ "" "* { - int x = INTVAL (operands[1]); + unsigned HOST_WIDE_INT x = UINTVAL (operands[1]); operands[2] = GEN_INT (4 + exact_log2 ((x >> 4) + 1)); operands[1] = GEN_INT ((x & 0xf) - 0x10); return \"{zvdepi %1,%2,%0|depwi,z %1,%%sar,%2,%0}\"; @@ -6367,7 +6367,7 @@ "exact_log2 (INTVAL (operands[1]) + 1) > 0" "* { - int x = INTVAL (operands[1]); + HOST_WIDE_INT x = INTVAL (operands[1]); operands[2] = GEN_INT (exact_log2 (x + 1)); return \"{vdepi -1,%2,%0|depwi -1,%%sar,%2,%0}\"; }" @@ -6384,7 +6384,7 @@ "INTVAL (operands[1]) == -2" "* { - int x = INTVAL (operands[1]); + HOST_WIDE_INT x = INTVAL (operands[1]); operands[2] = GEN_INT (exact_log2 ((~x) + 1)); return \"{vdepi 0,%2,%0|depwi 0,%%sar,%2,%0}\"; }" @@ -6448,7 +6448,7 @@ "TARGET_64BIT" "* { - int x = INTVAL (operands[1]); + unsigned HOST_WIDE_INT x = UINTVAL (operands[1]); operands[2] = GEN_INT (4 + exact_log2 ((x >> 4) + 1)); operands[1] = GEN_INT ((x & 0x1f) - 0x20); return \"depdi,z %1,%%sar,%2,%0\"; @@ -6466,7 +6466,7 @@ "TARGET_64BIT && exact_log2 (INTVAL (operands[1]) + 1) > 0" "* { - int x = INTVAL (operands[1]); + HOST_WIDE_INT x = INTVAL (operands[1]); operands[2] = GEN_INT (exact_log2 (x + 1)); return \"depdi -1,%%sar,%2,%0\"; }" @@ -6483,7 +6483,7 @@ "TARGET_64BIT && INTVAL (operands[1]) == -2" "* { - int x = INTVAL (operands[1]); + HOST_WIDE_INT x = INTVAL (operands[1]); operands[2] = GEN_INT (exact_log2 ((~x) + 1)); return \"depdi 0,%%sar,%2,%0\"; }" diff --git a/gcc/config/pa/predicates.md b/gcc/config/pa/predicates.md index 962e2f6e817..4a871194c29 100644 --- a/gcc/config/pa/predicates.md +++ b/gcc/config/pa/predicates.md @@ -247,9 +247,9 @@ (ior (match_operand 0 "ireg_operand") (match_operand 0 "int5_operand"))) -;; True iff OP is a CONST_INT of the forms 0...0xxxx or -;; 0...01...1xxxx. Such values can be the left hand side x in (x << -;; r), using the zvdepi instruction. +;; True iff OP is a CONST_INT of the forms 0...0xxxx, 0...01...1xxxx, +;; or 1...1xxxx. Such values can be the left hand side x in (x << r), +;; using the zvdepi instruction. (define_predicate "lhs_lshift_cint_operand" (match_code "const_int") diff --git a/gcc/config/rs6000/dfp.md b/gcc/config/rs6000/dfp.md index d57ac93fbb9..4fc7310636f 100644 --- a/gcc/config/rs6000/dfp.md +++ b/gcc/config/rs6000/dfp.md @@ -546,6 +546,13 @@ "dcmpuq %0,%1,%2" [(set_attr "type" "fpcompare")]) +(define_insn "floatdidd2" + [(set (match_operand:DD 0 "gpc_reg_operand" "=d") + (float:DD (match_operand:DI 1 "gpc_reg_operand" "d")))] + "TARGET_DFP && TARGET_POPCNTD" + "dcffix %0,%1" + [(set_attr "type" "fp")]) + (define_insn "floatditd2" [(set (match_operand:TD 0 "gpc_reg_operand" "=d") (float:TD (match_operand:DI 1 "gpc_reg_operand" "d")))] diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index 972f353061a..7c516eb56a8 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -159,15 +159,6 @@ extern int dot_symbols; } \ while (0) -#ifdef RS6000_BI_ARCH - -#undef OPTION_TARGET_CPU_DEFAULT -#define OPTION_TARGET_CPU_DEFAULT \ - (((TARGET_DEFAULT ^ target_flags) & MASK_64BIT) \ - ? (char *) 0 : TARGET_CPU_DEFAULT) - -#endif - #undef ASM_DEFAULT_SPEC #undef ASM_SPEC #undef LINK_OS_LINUX_SPEC diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 3ffc48c7e31..bdd11cc01c6 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -2596,6 +2596,7 @@ static bool rs6000_option_override_internal (bool global_init_p) { bool ret = true; + bool have_cpu = false; const char *default_cpu = OPTION_TARGET_CPU_DEFAULT; int set_masks; int cpu_index; @@ -2652,43 +2653,55 @@ rs6000_option_override_internal (bool global_init_p) /* Don't override by the processor default if given explicitly. */ set_masks &= ~target_flags_explicit; - /* Identify the processor type. */ - if (!default_cpu) - { - if (TARGET_POWERPC64) - default_cpu = "powerpc64"; - else if (TARGET_POWERPC) - default_cpu = "powerpc"; - } - /* Process the -mcpu=<xxx> and -mtune=<xxx> argument. If the user changed the cpu in a target attribute or pragma, but did not specify a tuning option, use the cpu for the tuning option rather than the option specified with -mtune on the command line. */ - if (rs6000_cpu_index > 0) - cpu_index = rs6000_cpu_index; - else if (main_target_opt != NULL && main_target_opt->x_rs6000_cpu_index > 0) - rs6000_cpu_index = cpu_index = main_target_opt->x_rs6000_cpu_index; + if (rs6000_cpu_index >= 0) + { + cpu_index = rs6000_cpu_index; + have_cpu = true; + } + else if (main_target_opt != NULL && main_target_opt->x_rs6000_cpu_index >= 0) + { + rs6000_cpu_index = cpu_index = main_target_opt->x_rs6000_cpu_index; + have_cpu = true; + } else - rs6000_cpu_index = cpu_index = rs6000_cpu_name_lookup (default_cpu); + { + if (!default_cpu) + default_cpu = (TARGET_POWERPC64 ? "powerpc64" : "powerpc"); - if (rs6000_tune_index > 0) + rs6000_cpu_index = cpu_index = rs6000_cpu_name_lookup (default_cpu); + } + + gcc_assert (cpu_index >= 0); + + target_flags &= ~set_masks; + target_flags |= (processor_target_table[cpu_index].target_enable + & set_masks); + + if (rs6000_tune_index >= 0) tune_index = rs6000_tune_index; - else + else if (have_cpu) rs6000_tune_index = tune_index = cpu_index; - - if (cpu_index >= 0) + else { - target_flags &= ~set_masks; - target_flags |= (processor_target_table[cpu_index].target_enable - & set_masks); + size_t i; + enum processor_type tune_proc + = (TARGET_POWERPC64 ? PROCESSOR_DEFAULT64 : PROCESSOR_DEFAULT); + + tune_index = -1; + for (i = 0; i < ARRAY_SIZE (processor_target_table); i++) + if (processor_target_table[i].processor == tune_proc) + { + rs6000_tune_index = tune_index = i; + break; + } } - rs6000_cpu = ((tune_index >= 0) - ? processor_target_table[tune_index].processor - : (TARGET_POWERPC64 - ? PROCESSOR_DEFAULT64 - : PROCESSOR_DEFAULT)); + gcc_assert (tune_index >= 0); + rs6000_cpu = processor_target_table[tune_index].processor; if (rs6000_cpu == PROCESSOR_PPCE300C2 || rs6000_cpu == PROCESSOR_PPCE300C3 || rs6000_cpu == PROCESSOR_PPCE500MC || rs6000_cpu == PROCESSOR_PPCE500MC64) @@ -4023,11 +4036,6 @@ rs6000_file_start (void) default_file_start (); -#ifdef TARGET_BI_ARCH - if ((TARGET_DEFAULT ^ target_flags) & MASK_64BIT) - rs6000_default_cpu = 0; -#endif - if (flag_verbose_asm) { sprintf (buffer, "\n%s rs6000/powerpc options:", ASM_COMMENT_START); @@ -11567,25 +11575,17 @@ rs6000_init_builtins (void) builtin_mode_to_type[V16QImode][0] = V16QI_type_node; builtin_mode_to_type[V16QImode][1] = unsigned_V16QI_type_node; - tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, - get_identifier ("__bool char"), - bool_char_type_node); + tdecl = add_builtin_type ("__bool char", bool_char_type_node); TYPE_NAME (bool_char_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, - get_identifier ("__bool short"), - bool_short_type_node); + + tdecl = add_builtin_type ("__bool short", bool_short_type_node); TYPE_NAME (bool_short_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, - get_identifier ("__bool int"), - bool_int_type_node); + + tdecl = add_builtin_type ("__bool int", bool_int_type_node); TYPE_NAME (bool_int_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, get_identifier ("__pixel"), - pixel_type_node); + + tdecl = add_builtin_type ("__pixel", pixel_type_node); TYPE_NAME (pixel_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); bool_V16QI_type_node = build_vector_type (bool_char_type_node, 16); bool_V8HI_type_node = build_vector_type (bool_short_type_node, 8); @@ -11593,88 +11593,50 @@ rs6000_init_builtins (void) bool_V2DI_type_node = build_vector_type (bool_long_type_node, 2); pixel_V8HI_type_node = build_vector_type (pixel_type_node, 8); - tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, - get_identifier ("__vector unsigned char"), - unsigned_V16QI_type_node); + tdecl = add_builtin_type ("__vector unsigned char", unsigned_V16QI_type_node); TYPE_NAME (unsigned_V16QI_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, - TYPE_DECL, get_identifier ("__vector signed char"), - V16QI_type_node); + + tdecl = add_builtin_type ("__vector signed char", V16QI_type_node); TYPE_NAME (V16QI_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, - TYPE_DECL, get_identifier ("__vector __bool char"), - bool_V16QI_type_node); + + tdecl = add_builtin_type ("__vector __bool char", bool_V16QI_type_node); TYPE_NAME ( bool_V16QI_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, - TYPE_DECL, get_identifier ("__vector unsigned short"), - unsigned_V8HI_type_node); + tdecl = add_builtin_type ("__vector unsigned short", unsigned_V8HI_type_node); TYPE_NAME (unsigned_V8HI_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, - TYPE_DECL, get_identifier ("__vector signed short"), - V8HI_type_node); + + tdecl = add_builtin_type ("__vector signed short", V8HI_type_node); TYPE_NAME (V8HI_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, - get_identifier ("__vector __bool short"), - bool_V8HI_type_node); + + tdecl = add_builtin_type ("__vector __bool short", bool_V8HI_type_node); TYPE_NAME (bool_V8HI_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, - get_identifier ("__vector unsigned int"), - unsigned_V4SI_type_node); + tdecl = add_builtin_type ("__vector unsigned int", unsigned_V4SI_type_node); TYPE_NAME (unsigned_V4SI_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, - TYPE_DECL, get_identifier ("__vector signed int"), - V4SI_type_node); + + tdecl = add_builtin_type ("__vector signed int", V4SI_type_node); TYPE_NAME (V4SI_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, - TYPE_DECL, get_identifier ("__vector __bool int"), - bool_V4SI_type_node); + + tdecl = add_builtin_type ("__vector __bool int", bool_V4SI_type_node); TYPE_NAME (bool_V4SI_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, - TYPE_DECL, get_identifier ("__vector float"), - V4SF_type_node); + tdecl = add_builtin_type ("__vector float", V4SF_type_node); TYPE_NAME (V4SF_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, - TYPE_DECL, get_identifier ("__vector __pixel"), - pixel_V8HI_type_node); + + tdecl = add_builtin_type ("__vector __pixel", pixel_V8HI_type_node); TYPE_NAME (pixel_V8HI_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, - TYPE_DECL, get_identifier ("__vector double"), - V2DF_type_node); + tdecl = add_builtin_type ("__vector double", V2DF_type_node); TYPE_NAME (V2DF_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, - TYPE_DECL, get_identifier ("__vector long"), - V2DI_type_node); + tdecl = add_builtin_type ("__vector long", V2DI_type_node); TYPE_NAME (V2DI_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, - TYPE_DECL, get_identifier ("__vector unsigned long"), - unsigned_V2DI_type_node); + tdecl = add_builtin_type ("__vector unsigned long", unsigned_V2DI_type_node); TYPE_NAME (unsigned_V2DI_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); - tdecl = build_decl (BUILTINS_LOCATION, - TYPE_DECL, get_identifier ("__vector __bool long"), - bool_V2DI_type_node); + tdecl = add_builtin_type ("__vector __bool long", bool_V2DI_type_node); TYPE_NAME (bool_V2DI_type_node) = tdecl; - (*lang_hooks.decls.pushdecl) (tdecl); /* Paired and SPE builtins are only available if you build a compiler with the appropriate options, so only create those builtins with the @@ -11843,10 +11805,7 @@ spe_init_builtins (void) signed_char_type_node, NULL_TREE); - (*lang_hooks.decls.pushdecl) - (build_decl (BUILTINS_LOCATION, TYPE_DECL, - get_identifier ("__ev64_opaque__"), - opaque_V2SI_type_node)); + add_builtin_type ("__ev64_opaque__", opaque_V2SI_type_node); /* Initialize irregular SPE builtins. */ @@ -16126,6 +16085,10 @@ rs6000_emit_vector_compare_inner (enum rtx_code code, rtx op0, rtx op1) case EQ: case GT: case GTU: + case ORDERED: + case UNORDERED: + case UNEQ: + case LTGT: mask = gen_reg_rtx (mode); emit_insn (gen_rtx_SET (VOIDmode, mask, diff --git a/gcc/config/rs6000/vector.md b/gcc/config/rs6000/vector.md index bcb23ac5de6..6674054223b 100644 --- a/gcc/config/rs6000/vector.md +++ b/gcc/config/rs6000/vector.md @@ -516,6 +516,94 @@ "VECTOR_UNIT_ALTIVEC_P (<MODE>mode)" "") +(define_insn_and_split "*vector_uneq<mode>" + [(set (match_operand:VEC_F 0 "vfloat_operand" "") + (uneq:VEC_F (match_operand:VEC_F 1 "vfloat_operand" "") + (match_operand:VEC_F 2 "vfloat_operand" "")))] + "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)" + "#" + "" + [(set (match_dup 3) + (gt:VEC_F (match_dup 1) + (match_dup 2))) + (set (match_dup 4) + (gt:VEC_F (match_dup 2) + (match_dup 1))) + (set (match_dup 0) + (not:VEC_F (ior:VEC_F (match_dup 3) + (match_dup 4))))] + " +{ + operands[3] = gen_reg_rtx (<MODE>mode); + operands[4] = gen_reg_rtx (<MODE>mode); +}") + +(define_insn_and_split "*vector_ltgt<mode>" + [(set (match_operand:VEC_F 0 "vfloat_operand" "") + (ltgt:VEC_F (match_operand:VEC_F 1 "vfloat_operand" "") + (match_operand:VEC_F 2 "vfloat_operand" "")))] + "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)" + "#" + "" + [(set (match_dup 3) + (gt:VEC_F (match_dup 1) + (match_dup 2))) + (set (match_dup 4) + (gt:VEC_F (match_dup 2) + (match_dup 1))) + (set (match_dup 0) + (ior:VEC_F (match_dup 3) + (match_dup 4)))] + " +{ + operands[3] = gen_reg_rtx (<MODE>mode); + operands[4] = gen_reg_rtx (<MODE>mode); +}") + +(define_insn_and_split "*vector_ordered<mode>" + [(set (match_operand:VEC_F 0 "vfloat_operand" "") + (ordered:VEC_F (match_operand:VEC_F 1 "vfloat_operand" "") + (match_operand:VEC_F 2 "vfloat_operand" "")))] + "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)" + "#" + "" + [(set (match_dup 3) + (ge:VEC_F (match_dup 1) + (match_dup 2))) + (set (match_dup 4) + (ge:VEC_F (match_dup 2) + (match_dup 1))) + (set (match_dup 0) + (ior:VEC_F (match_dup 3) + (match_dup 4)))] + " +{ + operands[3] = gen_reg_rtx (<MODE>mode); + operands[4] = gen_reg_rtx (<MODE>mode); +}") + +(define_insn_and_split "*vector_unordered<mode>" + [(set (match_operand:VEC_F 0 "vfloat_operand" "") + (unordered:VEC_F (match_operand:VEC_F 1 "vfloat_operand" "") + (match_operand:VEC_F 2 "vfloat_operand" "")))] + "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)" + "#" + "" + [(set (match_dup 3) + (ge:VEC_F (match_dup 1) + (match_dup 2))) + (set (match_dup 4) + (ge:VEC_F (match_dup 2) + (match_dup 1))) + (set (match_dup 0) + (not:VEC_F (ior:VEC_F (match_dup 3) + (match_dup 4))))] + " +{ + operands[3] = gen_reg_rtx (<MODE>mode); + operands[4] = gen_reg_rtx (<MODE>mode); +}") + ;; Note the arguments for __builtin_altivec_vsel are op2, op1, mask ;; which is in the reverse order that we want (define_expand "vector_select_<mode>" diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md index c23a835367f..37cb2486c8d 100644 --- a/gcc/config/rs6000/vsx.md +++ b/gcc/config/rs6000/vsx.md @@ -1119,9 +1119,9 @@ "VECTOR_MEM_VSX_P (<MODE>mode)" { if (INTVAL (operands[3]) == 0) - return \"xxpermdi %x0,%x1,%x2,1\"; + return \"xxpermdi %x0,%x2,%x1,1\"; else if (INTVAL (operands[3]) == 1) - return \"xxpermdi %x0,%x2,%x1,0\"; + return \"xxpermdi %x0,%x1,%x2,0\"; else gcc_unreachable (); } diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 824308addc6..d6e250fd5a8 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -1540,6 +1540,11 @@ s390_option_override (void) if (TARGET_64BIT && !TARGET_ZARCH) error ("64-bit ABI not supported in ESA/390 mode"); + /* Use hardware DFP if available and not explicitly disabled by + user. E.g. with -m31 -march=z10 -mzarch */ + if (!(target_flags_explicit & MASK_HARD_DFP) && TARGET_DFP) + target_flags |= MASK_HARD_DFP; + if (TARGET_HARD_DFP && !TARGET_DFP) { if (target_flags_explicit & MASK_HARD_DFP) diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index 6f854a565b3..a875eec7b9f 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -4012,7 +4012,7 @@ (unsigned_fix:SI (match_operand:DFP 1 "register_operand" ""))) (unspec:SI [(const_int 5)] UNSPEC_ROUND) (clobber (reg:CC CC_REGNUM))])] - "TARGET_Z196 && TARGET_HARD_FLOAT" + "TARGET_Z196 && TARGET_HARD_DFP" "") ; fixuns_trunc(tf|df|sf|td|dd)(di|si)2 instruction patterns. diff --git a/gcc/config/sh/constraints.md b/gcc/config/sh/constraints.md index 59e7de66662..12a4a990201 100644 --- a/gcc/config/sh/constraints.md +++ b/gcc/config/sh/constraints.md @@ -1,5 +1,5 @@ ;; Constraint definitions for Renesas / SuperH SH. -;; Copyright (C) 2007, 2008, 2011 Free Software Foundation, Inc. +;; Copyright (C) 2007, 2008, 2011, 2012 Free Software Foundation, Inc. ;; ;; This file is part of GCC. ;; @@ -139,7 +139,7 @@ (match_test "ival >= 0 && ival <= 255"))) (define_constraint "K12" - "An unsigned 8-bit constant, as used in SH2A 12-bit display." + "An unsigned 12-bit constant, as used in SH2A 12-bit displacement addressing." (and (match_code "const_int") (match_test "ival >= 0 && ival <= 4095"))) diff --git a/gcc/config/sh/linux.h b/gcc/config/sh/linux.h index a5c2734214b..904a7823bf2 100644 --- a/gcc/config/sh/linux.h +++ b/gcc/config/sh/linux.h @@ -1,5 +1,6 @@ /* Definitions for SH running Linux-based GNU systems using ELF - Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2010, 2011 + Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2010, 2011, + 2012 Free Software Foundation, Inc. Contributed by Kazumoto Kojima <kkojima@rr.iij4u.or.jp> @@ -41,7 +42,7 @@ along with GCC; see the file COPYING3. If not see #undef TARGET_DEFAULT #define TARGET_DEFAULT \ (TARGET_CPU_DEFAULT | MASK_USERMODE | TARGET_ENDIAN_DEFAULT \ - | TARGET_OPT_DEFAULT | MASK_SOFT_ATOMIC) + | TARGET_OPT_DEFAULT) #define TARGET_ASM_FILE_END file_end_indicate_exec_stack @@ -135,3 +136,13 @@ along with GCC; see the file COPYING3. If not see /* Install the __sync libcalls. */ #undef TARGET_INIT_LIBFUNCS #define TARGET_INIT_LIBFUNCS sh_init_sync_libfuncs + +#undef SUBTARGET_OVERRIDE_OPTIONS +#define SUBTARGET_OVERRIDE_OPTIONS \ + do \ + { \ + /* Defaulting to -msoft-atomic. */ \ + if (global_options_set.x_TARGET_SOFT_ATOMIC == 0) \ + TARGET_SOFT_ATOMIC = 1; \ + } \ + while (0) diff --git a/gcc/config/sh/predicates.md b/gcc/config/sh/predicates.md index 3cf1cf574c6..9745d63267e 100644 --- a/gcc/config/sh/predicates.md +++ b/gcc/config/sh/predicates.md @@ -1,5 +1,5 @@ ;; Predicate definitions for Renesas / SuperH SH. -;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 +;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2012 ;; Free Software Foundation, Inc. ;; ;; This file is part of GCC. @@ -448,7 +448,6 @@ return general_operand (op, mode); }) - ;; Returns 1 if OP is a POST_INC on stack pointer register. (define_predicate "sh_no_delay_pop_operand" @@ -466,7 +465,6 @@ return 0; }) - ;; Returns 1 if OP is a MEM that can be source of a simple move operation. (define_predicate "unaligned_load_operand" diff --git a/gcc/config/sh/sh-protos.h b/gcc/config/sh/sh-protos.h index ff94b1072f5..a2331e19bb4 100644 --- a/gcc/config/sh/sh-protos.h +++ b/gcc/config/sh/sh-protos.h @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler for Renesas / SuperH SH. Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2003, - 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 + 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com). Improved by Jim Wilson (wilson@cygnus.com). @@ -104,7 +104,6 @@ extern int fp_arith_reg_operand (rtx, enum machine_mode); extern int arith_operand (rtx, enum machine_mode); extern int arith_reg_or_0_operand (rtx, enum machine_mode); extern int logical_operand (rtx, enum machine_mode); -extern int tertiary_reload_operand (rtx, enum machine_mode); extern int fpscr_operand (rtx, enum machine_mode); extern int fpul_operand (rtx, enum machine_mode); extern int commutative_float_operator (rtx, enum machine_mode); diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 744c49a5fa8..4c2d710aea3 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -1,6 +1,6 @@ /* Output routines for GCC for Renesas / SuperH SH. Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, - 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 + 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com). Improved by Jim Wilson (wilson@cygnus.com). @@ -575,6 +575,11 @@ static const struct attribute_spec sh_attribute_table[] = /* Machine-specific symbol_ref flags. */ #define SYMBOL_FLAG_FUNCVEC_FUNCTION (SYMBOL_FLAG_MACH_DEP << 0) +/* The tas.b instruction sets the 7th bit in the byte, i.e. 0x80. This value + is used by optabs.c atomic op expansion code as well as in sync.md. */ +#undef TARGET_ATOMIC_TEST_AND_SET_TRUEVAL +#define TARGET_ATOMIC_TEST_AND_SET_TRUEVAL 0x80 + struct gcc_target targetm = TARGET_INITIALIZER; /* Implement TARGET_OPTION_OVERRIDE macro. Validate and override @@ -816,20 +821,42 @@ sh_option_override (void) } } + /* Adjust loop, jump and function alignment values (in bytes), if those + were not specified by the user using -falign-loops, -falign-jumps + and -falign-functions options. + 32 bit alignment is better for speed, because instructions can be + fetched as a pair from a longword boundary. For size use 16 bit + alignment to get more compact code. + Aligning all jumps increases the code size, even if it might + result in slightly faster code. Thus, it is set to the smallest + alignment possible if not specified by the user. */ if (align_loops == 0) - align_loops = 1 << (TARGET_SH5 ? 3 : 2); + { + if (TARGET_SH5) + align_loops = 8; + else + align_loops = optimize_size ? 2 : 4; + } + if (align_jumps == 0) - align_jumps = 1 << CACHE_LOG; + { + if (TARGET_SHMEDIA) + align_jumps = 1 << CACHE_LOG; + else + align_jumps = 2; + } else if (align_jumps < (TARGET_SHMEDIA ? 4 : 2)) align_jumps = TARGET_SHMEDIA ? 4 : 2; - /* Allocation boundary (in *bytes*) for the code of a function. - SH1: 32 bit alignment is faster, because instructions are always - fetched as a pair from a longword boundary. - SH2 .. SH5 : align to cache line start. */ if (align_functions == 0) - align_functions - = optimize_size ? FUNCTION_BOUNDARY/8 : (1 << CACHE_LOG); + { + if (TARGET_SHMEDIA) + align_functions = optimize_size + ? FUNCTION_BOUNDARY/8 : (1 << CACHE_LOG); + else + align_functions = optimize_size ? 2 : 4; + } + /* The linker relaxation code breaks when a function contains alignments that are larger than that at the start of a compilation unit. */ @@ -1850,7 +1877,7 @@ expand_cbranchsi4 (rtx *operands, enum rtx_code comparison, int probability) } /* ??? How should we distribute probabilities when more than one branch - is generated. So far we only have soem ad-hoc observations: + is generated. So far we only have some ad-hoc observations: - If the operands are random, they are likely to differ in both parts. - If comparing items in a hash chain, the operands are random or equal; operation should be EQ or NE. @@ -2806,22 +2833,26 @@ shiftcosts (rtx x) { int value; + /* There is no pattern for constant first operand. */ + if (CONST_INT_P (XEXP (x, 0))) + return MAX_COST; + if (TARGET_SHMEDIA) - return 1; + return COSTS_N_INSNS (1); if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD) { if (GET_MODE (x) == DImode && CONST_INT_P (XEXP (x, 1)) && INTVAL (XEXP (x, 1)) == 1) - return 2; + return COSTS_N_INSNS (2); /* Everything else is invalid, because there is no pattern for it. */ return MAX_COST; } /* If shift by a non constant, then this will be expensive. */ if (!CONST_INT_P (XEXP (x, 1))) - return SH_DYNAMIC_SHIFT_COST; + return COSTS_N_INSNS (SH_DYNAMIC_SHIFT_COST); /* Otherwise, return the true cost in instructions. Cope with out of range shift counts more or less arbitrarily. */ @@ -2833,10 +2864,10 @@ shiftcosts (rtx x) /* If SH3, then we put the constant in a reg and use shad. */ if (cost > 1 + SH_DYNAMIC_SHIFT_COST) cost = 1 + SH_DYNAMIC_SHIFT_COST; - return cost; + return COSTS_N_INSNS (cost); } else - return shift_insns[value]; + return COSTS_N_INSNS (shift_insns[value]); } /* Return the cost of an AND/XOR/IOR operation. */ @@ -3069,7 +3100,7 @@ sh_rtx_costs (rtx x, int code, int outer_code, int opno ATTRIBUTE_UNUSED, case ASHIFT: case ASHIFTRT: case LSHIFTRT: - *total = COSTS_N_INSNS (shiftcosts (x)); + *total = shiftcosts (x); return true; case DIV: @@ -5342,6 +5373,9 @@ sh_loop_align (rtx label) { rtx next = label; + if (! optimize || optimize_size) + return 0; + do next = next_nonnote_insn (next); while (next && LABEL_P (next)); @@ -5380,7 +5414,7 @@ sh_reorg (void) /* If relaxing, generate pseudo-ops to associate function calls with the symbols they call. It does no harm to not generate these - pseudo-ops. However, when we can generate them, it enables to + pseudo-ops. However, when we can generate them, it enables the linker to potentially relax the jsr to a bsr, and eliminate the register load and, possibly, the constant pool entry. */ @@ -8133,10 +8167,8 @@ sh_dwarf_register_span (rtx reg) return gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, - gen_rtx_REG (SFmode, - DBX_REGISTER_NUMBER (regno+1)), - gen_rtx_REG (SFmode, - DBX_REGISTER_NUMBER (regno)))); + gen_rtx_REG (SFmode, regno + 1), + gen_rtx_REG (SFmode, regno))); } static enum machine_mode @@ -9201,13 +9233,6 @@ fldi_ok (void) return 1; } -int -tertiary_reload_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) -{ - enum rtx_code code = GET_CODE (op); - return code == MEM || (TARGET_SH4 && code == CONST_DOUBLE); -} - /* Return the TLS type for TLS symbols, 0 for otherwise. */ enum tls_model tls_symbolic_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) @@ -9259,7 +9284,7 @@ reg_unused_after (rtx reg, rtx insn) #if 0 /* If this is a label that existed before reload, then the register - if dead here. However, if this is a label added by reorg, then + is dead here. However, if this is a label added by reorg, then the register may still be live here. We can't tell the difference, so we just ignore labels completely. */ if (code == CODE_LABEL) @@ -9569,7 +9594,7 @@ sh_legitimate_index_p (enum machine_mode mode, rtx op) { int size; - /* Check if this the address of an unaligned load / store. */ + /* Check if this is the address of an unaligned load / store. */ if (mode == VOIDmode) return CONST_OK_FOR_I06 (INTVAL (op)); @@ -11499,8 +11524,15 @@ sh_register_move_cost (enum machine_mode mode, && REGCLASS_HAS_GENERAL_REG (srcclass)) || (REGCLASS_HAS_GENERAL_REG (dstclass) && REGCLASS_HAS_FP_REG (srcclass))) - return ((TARGET_SHMEDIA ? 4 : TARGET_FMOVD ? 8 : 12) - * ((GET_MODE_SIZE (mode) + 7) / 8U)); + { + /* Discourage trying to use fp regs for a pointer. This also + discourages fp regs with SImode because Pmode is an alias + of SImode on this target. See PR target/48596. */ + int addend = (mode == Pmode) ? 40 : 0; + + return (((TARGET_SHMEDIA ? 4 : TARGET_FMOVD ? 8 : 12) + addend) + * ((GET_MODE_SIZE (mode) + 7) / 8U)); + } if ((dstclass == FPUL_REGS && REGCLASS_HAS_GENERAL_REG (srcclass)) @@ -11856,15 +11888,8 @@ sh_expand_t_scc (rtx operands[]) val = INTVAL (op1); if ((code == EQ && val == 1) || (code == NE && val == 0)) emit_insn (gen_movt (result)); - else if (TARGET_SH2A && ((code == EQ && val == 0) - || (code == NE && val == 1))) - emit_insn (gen_xorsi3_movrt (result)); else if ((code == EQ && val == 0) || (code == NE && val == 1)) - { - emit_clobber (result); - emit_insn (gen_subc (result, result, result)); - emit_insn (gen_addsi3 (result, result, const1_rtx)); - } + emit_insn (gen_movnegt (result)); else if (code == EQ || code == NE) emit_insn (gen_move_insn (result, GEN_INT (code == NE))); else diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index 0f06fb8de24..7a2af0a2841 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler for Renesas / SuperH SH. Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, - 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 + 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com). Improved by Jim Wilson (wilson@cygnus.com). @@ -579,9 +579,7 @@ extern enum sh_divide_strategy_e sh_div_strategy; #define LABEL_ALIGN_AFTER_BARRIER(LABEL_AFTER_BARRIER) \ barrier_align (LABEL_AFTER_BARRIER) -#define LOOP_ALIGN(A_LABEL) \ - ((! optimize || TARGET_HARD_SH4 || optimize_size) \ - ? 0 : sh_loop_align (A_LABEL)) +#define LOOP_ALIGN(A_LABEL) sh_loop_align (A_LABEL) #define LABEL_ALIGN(A_LABEL) \ ( \ @@ -1909,12 +1907,6 @@ struct sh_args { #define ALLOW_INDEXED_ADDRESS \ ((!TARGET_SHMEDIA32 && !TARGET_SHCOMPACT) || TARGET_ALLOW_INDEXED_ADDRESS) - -#define GO_IF_LEGITIMATE_INDEX(MODE, OP, WIN) \ - do { \ - if (sh_legitimate_index_p ((MODE), (OP))) \ - goto WIN; \ - } while (0) /* A C compound statement that attempts to replace X, which is an address that needs reloading, with a valid memory address for an operand of diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index 4e0213495b8..eb1c85267f3 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -1,6 +1,6 @@ ;;- Machine description for Renesas / SuperH SH. ;; Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -;; 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +;; 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 ;; Free Software Foundation, Inc. ;; Contributed by Steve Chamberlain (sac@cygnus.com). ;; Improved by Jim Wilson (wilson@cygnus.com). @@ -3354,15 +3354,6 @@ label: xori %1, %2, %0" [(set_attr "type" "arith_media")]) -;; Store the complements of the T bit in a register. -(define_insn "xorsi3_movrt" - [(set (match_operand:SI 0 "arith_reg_dest" "=r") - (xor:SI (reg:SI T_REG) - (const_int 1)))] - "TARGET_SH2A" - "movrt\\t%0" - [(set_attr "type" "arith")]) - (define_insn "xordi3" [(set (match_operand:DI 0 "arith_reg_dest" "=r,r") (xor:DI (match_operand:DI 1 "arith_reg_operand" "%r,r") @@ -4387,7 +4378,17 @@ label: ;; Unary arithmetic ;; ------------------------------------------------------------------------- -(define_insn "negc" +(define_expand "negc" + [(parallel [(set (match_operand:SI 0 "arith_reg_dest" "") + (neg:SI (plus:SI (reg:SI T_REG) + (match_operand:SI 1 "arith_reg_operand" "")))) + (set (reg:SI T_REG) + (ne:SI (ior:SI (reg:SI T_REG) (match_dup 1)) + (const_int 0)))])] + "" + "") + +(define_insn "*negc" [(set (match_operand:SI 0 "arith_reg_dest" "=r") (neg:SI (plus:SI (reg:SI T_REG) (match_operand:SI 1 "arith_reg_operand" "r")))) @@ -4405,15 +4406,13 @@ label: "sub r63, %1, %0" [(set_attr "type" "arith_media")]) - - ;; Don't expand immediately because otherwise neg:DI (abs:DI) will not be ;; combined. (define_expand "negdi2" [(set (match_operand:DI 0 "arith_reg_dest" "") (neg:DI (match_operand:DI 1 "arith_reg_operand" ""))) (clobber (reg:SI T_REG))] - "" + "TARGET_SH1" "") (define_insn_and_split "*negdi2" @@ -4464,7 +4463,7 @@ label: [(set (match_operand:SI 0 "arith_reg_dest" "") (abs:SI (match_operand:SI 1 "arith_reg_operand" ""))) (clobber (reg:SI T_REG))] - "" + "TARGET_SH1" "") (define_insn_and_split "*abssi2" @@ -4497,7 +4496,6 @@ label: DONE; }") - ;; The SH4 202 can do zero-offset branches without pipeline stalls. ;; This can be used as some kind of conditional execution, which is useful ;; for abs. @@ -4534,6 +4532,82 @@ label: [(set_attr "type" "arith") ;; poor approximation (set_attr "length" "4")]) +(define_expand "absdi2" + [(set (match_operand:DI 0 "arith_reg_dest" "") + (abs:DI (match_operand:DI 1 "arith_reg_operand" ""))) + (clobber (reg:SI T_REG))] + "TARGET_SH1" + "") + +(define_insn_and_split "*absdi2" + [(set (match_operand:DI 0 "arith_reg_dest" "=r") + (abs:DI (match_operand:DI 1 "arith_reg_operand" "r")))] + "TARGET_SH1" + "#" + "&& reload_completed" + [(const_int 0)] +{ + int high_word = (TARGET_LITTLE_ENDIAN ? 1 : 0); + rtx high_src = operand_subword (operands[1], high_word, 0, DImode); + emit_insn (gen_cmpgesi_t (high_src, const0_rtx)); + emit_insn (gen_negdi_cond (operands[0], operands[1], operands[1], + const1_rtx)); + DONE; +}) + +(define_insn_and_split "*negabsdi2" + [(set (match_operand:DI 0 "arith_reg_dest" "=r") + (neg:DI (abs:DI (match_operand:DI 1 "arith_reg_operand" "r"))))] + "TARGET_SH1" + "#" + "&& reload_completed" + [(const_int 0)] +{ + int high_word = (TARGET_LITTLE_ENDIAN ? 1 : 0); + rtx high_src = operand_subword (operands[1], high_word, 0, DImode); + + emit_insn (gen_cmpgesi_t (high_src, const0_rtx)); + emit_insn (gen_negdi_cond (operands[0], operands[1], operands[1], + const0_rtx)); + DONE; +}) + +(define_insn_and_split "negdi_cond" + [(set (match_operand:DI 0 "arith_reg_dest" "=r,r") + (if_then_else:DI (eq:SI (reg:SI T_REG) + (match_operand:SI 3 "const_int_operand" "M,N")) + (match_operand:DI 1 "arith_reg_operand" "r,r") + (neg:DI (match_operand:DI 2 "arith_reg_operand" "1,1"))))] + "TARGET_SH1" + "#" + "TARGET_SH1" + [(const_int 0)] +{ + int low_word = (TARGET_LITTLE_ENDIAN ? 0 : 1); + int high_word = (TARGET_LITTLE_ENDIAN ? 1 : 0); + + rtx low_src = operand_subword (operands[1], low_word, 0, DImode); + rtx high_src = operand_subword (operands[1], high_word, 0, DImode); + + rtx low_dst = operand_subword (operands[0], low_word, 1, DImode); + rtx high_dst = operand_subword (operands[0], high_word, 1, DImode); + + rtx skip_neg_label = gen_label_rtx (); + + emit_insn (gen_movsi (low_dst, low_src)); + emit_insn (gen_movsi (high_dst, high_src)); + + emit_jump_insn (INTVAL (operands[3]) + ? gen_branch_true (skip_neg_label) + : gen_branch_false (skip_neg_label)); + + if (!INTVAL (operands[3])) + emit_insn (gen_clrt ()); + + emit_insn (gen_negc (low_dst, low_src)); + emit_label_after (skip_neg_label, emit_insn (gen_negc (high_dst, high_src))); + DONE; +}) ;; ------------------------------------------------------------------------- ;; Zero extension instructions @@ -5468,7 +5542,7 @@ label: operands[3] = gen_rtx_REG (DImode, REGNO (operands[2])); }") -/* When storing r0, we have to avoid reg+reg addressing. */ +;; When storing r0, we have to avoid reg+reg addressing. (define_insn "movhi_i" [(set (match_operand:HI 0 "general_movdst_operand" "=r,r,r,r,m,r,l,r") (match_operand:HI 1 "general_movsrc_operand" "Q,rI08,m,t,r,l,r,i"))] @@ -7472,7 +7546,7 @@ label: (set_attr "fp_set" "unknown")]) ;; This is TBR relative jump instruction for SH2A architecture. -;; Its use is enabled assigning an attribute "function_vector" +;; Its use is enabled by assigning an attribute "function_vector" ;; and the vector number to a function during its declaration. (define_insn "call_valuei_tbr_rel" @@ -9455,6 +9529,13 @@ mov.l\\t1f,r0\\n\\ "movt %0" [(set_attr "type" "arith")]) +(define_insn "movrt" + [(set (match_operand:SI 0 "arith_reg_dest" "=r") + (xor:SI (reg:SI T_REG) (const_int 1)))] + "TARGET_SH2A" + "movrt %0" + [(set_attr "type" "arith")]) + (define_expand "cstore4_media" [(set (match_operand:SI 0 "register_operand" "=r") (match_operator:SI 1 "sh_float_comparison_operator" @@ -9581,43 +9662,55 @@ mov.l\\t1f,r0\\n\\ DONE; ") - - -;; sne moves the complement of the T reg to DEST like this: -;; cmp/eq ... -;; mov #-1,temp -;; negc temp,dest -;; This is better than xoring compare result with 1 because it does -;; not require r0 and further, the -1 may be CSE-ed or lifted out of a -;; loop. +;; Move the complement of the T reg to a reg. +;; On SH2A the movrt insn can be used. +;; On anything else than SH2A this has to be done with multiple instructions. +;; One obvious way would be: +;; cmp/eq ... +;; movt r0 +;; xor #1,r0 +;; +;; However, this puts pressure on r0 in most cases and thus the following is +;; more appealing: +;; cmp/eq ... +;; mov #-1,temp +;; negc temp,dest +;; +;; If the constant -1 can be CSE-ed or lifted out of a loop it effectively +;; becomes a one instruction operation. Moreover, care must be taken that +;; the insn can still be combined with inverted compare and branch code +;; around it. +;; The expander will reserve the constant -1, the insn makes the whole thing +;; combinable, the splitter finally emits the insn if it was not combined +;; away. +;; Notice that when using the negc variant the T bit also gets inverted. (define_expand "movnegt" [(set (match_dup 1) (const_int -1)) - (parallel [(set (match_operand:SI 0 "" "") - (neg:SI (plus:SI (reg:SI T_REG) - (match_dup 1)))) - (set (reg:SI T_REG) - (ne:SI (ior:SI (reg:SI T_REG) (match_dup 1)) - (const_int 0)))])] + (parallel [(set (match_operand:SI 0 "arith_reg_dest" "") + (xor:SI (reg:SI T_REG) (const_int 1))) + (use (match_dup 1))])] "" - " { operands[1] = gen_reg_rtx (SImode); -}") - - -;; Recognize mov #-1/negc/neg sequence, and change it to movt/add #-1. -;; This prevents a regression that occurred when we switched from xor to -;; mov/neg for sne. +}) -(define_split - [(set (match_operand:SI 0 "arith_reg_dest" "") - (plus:SI (reg:SI T_REG) - (const_int -1)))] +(define_insn_and_split "*movnegt" + [(set (match_operand:SI 0 "arith_reg_dest" "=r") + (xor:SI (reg:SI T_REG) (const_int 1))) + (use (match_operand:SI 1 "arith_reg_operand" "r"))] "TARGET_SH1" - [(set (match_dup 0) (eq:SI (reg:SI T_REG) (const_int 1))) - (set (match_dup 0) (plus:SI (match_dup 0) (const_int -1)))] - "") + "#" + "&& 1" + [(const_int 0)] +{ + if (TARGET_SH2A) + emit_insn (gen_movrt (operands[0])); + else + emit_insn (gen_negc (operands[0], operands[1])); + DONE; +} + [(set_attr "type" "arith")]) (define_expand "cstoresf4" [(set (match_operand:SI 0 "register_operand" "=r") @@ -9659,7 +9752,6 @@ mov.l\\t1f,r0\\n\\ DONE; ") - ;; ------------------------------------------------------------------------- ;; Instructions to cope with inline literal tables ;; ------------------------------------------------------------------------- @@ -12688,7 +12780,7 @@ mov.l\\t1f,r0\\n\\ [(set_attr "type" "arith_media") (set_attr "highpart" "ignore")]) -/* These are useful to expand ANDs and as combiner patterns. */ +;; These are useful to expand ANDs and as combiner patterns. (define_insn_and_split "mshfhi_l_di" [(set (match_operand:DI 0 "arith_reg_dest" "=r,f") (ior:DI (lshiftrt:DI (match_operand:DI 1 "arith_reg_or_0_operand" "rZ,f") diff --git a/gcc/config/sh/sh.opt b/gcc/config/sh/sh.opt index ea87d259f39..de23d5eb0b8 100644 --- a/gcc/config/sh/sh.opt +++ b/gcc/config/sh/sh.opt @@ -320,9 +320,13 @@ Target Mask(HITACHI) MaskExists Follow Renesas (formerly Hitachi) / SuperH calling conventions msoft-atomic -Target Report Mask(SOFT_ATOMIC) +Target Report Var(TARGET_SOFT_ATOMIC) Use software atomic sequences supported by kernel +menable-tas +Target Report RejectNegative Var(TARGET_ENABLE_TAS) +Use tas.b instruction for __atomic_test_and_set + mspace Target RejectNegative Alias(Os) Deprecated. Use -Os instead diff --git a/gcc/config/sh/sync.md b/gcc/config/sh/sync.md index 6b397e28db6..258e048f3c7 100644 --- a/gcc/config/sh/sync.md +++ b/gcc/config/sh/sync.md @@ -1,5 +1,5 @@ ;; GCC machine description for SH synchronization instructions. -;; Copyright (C) 2011 +;; Copyright (C) 2011, 2012 ;; Free Software Foundation, Inc. ;; ;; This file is part of GCC. @@ -109,7 +109,7 @@ [(plus "add") (minus "sub") (ior "or") (xor "xor") (and "and")]) (define_expand "atomic_compare_and_swap<mode>" - [(match_operand:QI 0 "register_operand" "") ;; bool success output + [(match_operand:SI 0 "register_operand" "") ;; bool success output (match_operand:I124 1 "register_operand" "") ;; oldval output (match_operand:I124 2 "memory_operand" "") ;; memory (match_operand:I124 3 "register_operand" "") ;; expected input @@ -131,7 +131,7 @@ else if (<MODE>mode == HImode) emit_insn (gen_zero_extendhisi2 (gen_lowpart (SImode, operands[1]), operands[1])); - emit_insn (gen_movqi (operands[0], gen_rtx_REG (QImode, T_REG))); + emit_insn (gen_movsi (operands[0], gen_rtx_REG (SImode, T_REG))); DONE; }) @@ -144,8 +144,8 @@ UNSPECV_CMPXCHG_1)) (set (mem:I124 (match_dup 1)) (unspec_volatile:I124 [(const_int 0)] UNSPECV_CMPXCHG_2)) - (set (reg:QI T_REG) - (unspec_volatile:QI [(const_int 0)] UNSPECV_CMPXCHG_3)) + (set (reg:SI T_REG) + (unspec_volatile:SI [(const_int 0)] UNSPECV_CMPXCHG_3)) (clobber (match_scratch:SI 4 "=&u")) (clobber (reg:SI R0_REG)) (clobber (reg:SI R1_REG))] @@ -164,6 +164,45 @@ } [(set_attr "length" "20")]) +(define_expand "atomic_exchange<mode>" + [(match_operand:I124 0 "register_operand" "") ;; oldval output + (match_operand:I124 1 "memory_operand" "") ;; memory + (match_operand:I124 2 "register_operand" "") ;; newval input + (match_operand:SI 3 "const_int_operand" "")] ;; memory model + "TARGET_SOFT_ATOMIC && !TARGET_SHMEDIA" +{ + rtx addr = force_reg (Pmode, XEXP (operands[1], 0)); + emit_insn (gen_atomic_exchange<mode>_soft + (operands[0], addr, operands[2])); + if (<MODE>mode == QImode) + emit_insn (gen_zero_extendqisi2 (gen_lowpart (SImode, operands[0]), + operands[0])); + else if (<MODE>mode == HImode) + emit_insn (gen_zero_extendhisi2 (gen_lowpart (SImode, operands[0]), + operands[0])); + DONE; +}) + +(define_insn "atomic_exchange<mode>_soft" + [(set (match_operand:I124 0 "register_operand" "=&u") + (mem:I124 (match_operand:SI 1 "register_operand" "u"))) + (set (mem:I124 (match_dup 1)) + (unspec:I124 + [(match_operand:I124 2 "register_operand" "u")] UNSPEC_ATOMIC)) + (clobber (reg:SI R0_REG)) + (clobber (reg:SI R1_REG))] + "TARGET_SOFT_ATOMIC && !TARGET_SHMEDIA" +{ + return "mova 1f,r0" "\n" + " .align 2" "\n" + " mov r15,r1" "\n" + " mov #(0f-1f),r15" "\n" + "0: mov.<i124suffix> @%1,%0" "\n" + " mov.<i124suffix> %2,@%1" "\n" + "1: mov r1,r15"; +} + [(set_attr "length" "14")]) + (define_expand "atomic_fetch_<fetchop_name><mode>" [(set (match_operand:I124 0 "register_operand" "") (match_operand:I124 1 "memory_operand" "")) @@ -365,3 +404,62 @@ "1: mov r1,r15"; } [(set_attr "length" "18")]) + +(define_expand "atomic_test_and_set" + [(match_operand:SI 0 "register_operand" "") ;; bool result output + (match_operand:QI 1 "memory_operand" "") ;; memory + (match_operand:SI 2 "const_int_operand" "")] ;; model + "(TARGET_SOFT_ATOMIC || TARGET_ENABLE_TAS) && !TARGET_SHMEDIA" +{ + rtx addr = force_reg (Pmode, XEXP (operands[1], 0)); + + if (TARGET_ENABLE_TAS) + emit_insn (gen_tasb (addr)); + else + { + rtx val; + + val = gen_int_mode (targetm.atomic_test_and_set_trueval, QImode); + val = force_reg (QImode, val); + emit_insn (gen_atomic_test_and_set_soft (addr, val)); + } + + /* The result of the test op is the inverse of what we are + supposed to return. Thus invert the T bit. The inversion will be + potentially optimized away and integrated into surrounding code. */ + emit_insn (gen_movnegt (operands[0])); + DONE; +}) + +(define_insn "tasb" + [(set (reg:SI T_REG) + (eq:SI (mem:QI (match_operand:SI 0 "register_operand" "r")) + (const_int 0))) + (set (mem:QI (match_dup 0)) + (unspec:QI [(const_int 128)] UNSPEC_ATOMIC))] + "TARGET_ENABLE_TAS && !TARGET_SHMEDIA" + "tas.b @%0" + [(set_attr "insn_class" "co_group")]) + +(define_insn "atomic_test_and_set_soft" + [(set (reg:SI T_REG) + (eq:SI (mem:QI (match_operand:SI 0 "register_operand" "u")) + (const_int 0))) + (set (mem:QI (match_dup 0)) + (unspec:QI [(match_operand:QI 1 "register_operand" "u")] UNSPEC_ATOMIC)) + (clobber (match_scratch:QI 2 "=&u")) + (clobber (reg:SI R0_REG)) + (clobber (reg:SI R1_REG))] + "TARGET_SOFT_ATOMIC && !TARGET_ENABLE_TAS && !TARGET_SHMEDIA" +{ + return "mova 1f,r0" "\n" + " .align 2" "\n" + " mov r15,r1" "\n" + " mov #(0f-1f),r15" "\n" + "0: mov.b @%0,%2" "\n" + " mov.b %1,@%0" "\n" + "1: mov r1,r15" "\n" + " tst %2,%2"; +} + [(set_attr "length" "16")]) + diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md index f70acd37337..c0c1ef8ac38 100644 --- a/gcc/config/sparc/sparc.md +++ b/gcc/config/sparc/sparc.md @@ -1352,6 +1352,10 @@ ;; Load in operand 0 the (absolute) address of operand 1, which is a symbolic ;; value subject to a PC-relative relocation. Operand 2 is a helper function ;; that adds the PC value at the call point to register #(operand 3). +;; +;; Even on V9 we use this call sequence with a stub, instead of "rd %pc, ..." +;; because the RDPC instruction is extremely expensive and incurs a complete +;; instruction pipeline flush. (define_insn "load_pcrel_sym<P:mode>" [(set (match_operand:P 0 "register_operand" "=r") diff --git a/gcc/config/tilegx/tilegx.c b/gcc/config/tilegx/tilegx.c index 276b5d21672..217682eaa66 100644 --- a/gcc/config/tilegx/tilegx.c +++ b/gcc/config/tilegx/tilegx.c @@ -3881,9 +3881,8 @@ tilegx_expand_prologue (void) { /* Copy the old stack pointer aside so we can save it later. */ sp_copy_regno = next_scratch_regno--; - insn = FRP (emit_move_insn (gen_rtx_REG (Pmode, sp_copy_regno), - stack_pointer_rtx)); - add_reg_note (insn, REG_CFA_REGISTER, NULL_RTX); + emit_move_insn (gen_rtx_REG (Pmode, sp_copy_regno), + stack_pointer_rtx); } if (tilegx_current_function_is_leaf ()) @@ -3925,8 +3924,8 @@ tilegx_expand_prologue (void) } /* Save our frame pointer for backtrace chaining. */ - FRP (frame_emit_store (sp_copy_regno, STACK_POINTER_REGNUM, - chain_addr, cfa, cfa_offset)); + emit_insn (gen_movdi (gen_frame_mem (DImode, chain_addr), + gen_rtx_REG (DImode, sp_copy_regno))); } /* Compute where to start storing registers we need to save. */ @@ -4067,16 +4066,7 @@ tilegx_expand_epilogue (bool sibcall_p) emit_insn (gen_blockage ()); - if (crtl->calls_eh_return) - { - rtx r = compute_frame_addr (-total_size + UNITS_PER_WORD, - &next_scratch_regno); - insn = emit_move_insn (gen_lowpart (DImode, stack_pointer_rtx), - gen_frame_mem (DImode, r)); - RTX_FRAME_RELATED_P (insn) = 1; - REG_NOTES (insn) = cfa_restores; - } - else if (frame_pointer_needed) + if (frame_pointer_needed) { /* Restore the old stack pointer by copying from the frame pointer. */ @@ -4100,6 +4090,16 @@ tilegx_expand_epilogue (bool sibcall_p) cfa_restores); } + if (crtl->calls_eh_return) + { + if (TARGET_32BIT) + emit_insn (gen_sp_adjust_32bit (stack_pointer_rtx, stack_pointer_rtx, + EH_RETURN_STACKADJ_RTX)); + else + emit_insn (gen_sp_adjust (stack_pointer_rtx, stack_pointer_rtx, + EH_RETURN_STACKADJ_RTX)); + } + /* Restore the old frame pointer. */ if (frame_pointer_needed) { @@ -4420,7 +4420,9 @@ replace_mov_pcrel_step1 (rtx insn) static bool match_pcrel_step2 (rtx insn) { - rtx src; + rtx unspec; + rtx addr; + if (TARGET_32BIT) { if (recog_memoized (insn) != CODE_FOR_insn_addr_shl16insli_32bit) @@ -4432,11 +4434,12 @@ match_pcrel_step2 (rtx insn) return false; } - src = SET_SRC (PATTERN (insn)); + unspec = SET_SRC (PATTERN (insn)); + addr = XVECEXP (unspec, 0, 1); - return (GET_CODE (src) == CONST - && GET_CODE (XEXP (src, 0)) == UNSPEC - && XINT (XEXP (src, 0), 1) == UNSPEC_HW0_PCREL); + return (GET_CODE (addr) == CONST + && GET_CODE (XEXP (addr, 0)) == UNSPEC + && XINT (XEXP (addr, 0), 1) == UNSPEC_HW0_PCREL); } @@ -4446,6 +4449,7 @@ replace_mov_pcrel_step2 (rtx insn) { rtx pattern = PATTERN (insn); rtx unspec; + rtx addr; rtx opnds[3]; rtx new_insns; rtx got_rtx = tilegx_got_rtx (); @@ -4453,10 +4457,18 @@ replace_mov_pcrel_step2 (rtx insn) gcc_assert (GET_CODE (pattern) == SET); opnds[0] = SET_DEST (pattern); - unspec = XEXP (SET_SRC (pattern), 0); + unspec = SET_SRC (pattern); + gcc_assert (GET_CODE (unspec) == UNSPEC); + gcc_assert (XINT (unspec, 1) == UNSPEC_INSN_ADDR_SHL16INSLI); + + opnds[1] = XVECEXP (unspec, 0, 0); + + addr = XVECEXP (unspec, 0, 1); + gcc_assert (GET_CODE (addr) == CONST); + + unspec = XEXP (addr, 0); gcc_assert (GET_CODE (unspec) == UNSPEC); gcc_assert (XINT (unspec, 1) == UNSPEC_HW0_PCREL); - opnds[1] = XEXP (XEXP (SET_SRC (pattern), 0), 0); opnds[2] = XVECEXP (unspec, 0, 0); /* We only need to replace SYMBOL_REFs, not LABEL_REFs. */ diff --git a/gcc/config/tilepro/tilepro.c b/gcc/config/tilepro/tilepro.c index 71b5807c5de..011ac083add 100644 --- a/gcc/config/tilepro/tilepro.c +++ b/gcc/config/tilepro/tilepro.c @@ -3556,9 +3556,8 @@ tilepro_expand_prologue (void) { /* Copy the old stack pointer aside so we can save it later. */ sp_copy_regno = next_scratch_regno--; - insn = FRP (emit_move_insn (gen_rtx_REG (Pmode, sp_copy_regno), - stack_pointer_rtx)); - add_reg_note (insn, REG_CFA_REGISTER, NULL_RTX); + emit_move_insn (gen_rtx_REG (Pmode, sp_copy_regno), + stack_pointer_rtx); } if (tilepro_current_function_is_leaf ()) @@ -3600,8 +3599,8 @@ tilepro_expand_prologue (void) } /* Save our frame pointer for backtrace chaining. */ - FRP (frame_emit_store (sp_copy_regno, STACK_POINTER_REGNUM, - chain_addr, cfa, cfa_offset)); + emit_insn (gen_movsi (gen_frame_mem (SImode, chain_addr), + gen_rtx_REG (SImode, sp_copy_regno))); } /* Compute where to start storing registers we need to save. */ @@ -3742,16 +3741,7 @@ tilepro_expand_epilogue (bool sibcall_p) emit_insn (gen_blockage ()); - if (crtl->calls_eh_return) - { - rtx r = compute_frame_addr (-total_size + UNITS_PER_WORD, - &next_scratch_regno); - insn = emit_move_insn (gen_rtx_REG (Pmode, STACK_POINTER_REGNUM), - gen_frame_mem (Pmode, r)); - RTX_FRAME_RELATED_P (insn) = 1; - REG_NOTES (insn) = cfa_restores; - } - else if (frame_pointer_needed) + if (frame_pointer_needed) { /* Restore the old stack pointer by copying from the frame pointer. */ @@ -3767,6 +3757,10 @@ tilepro_expand_epilogue (bool sibcall_p) cfa_restores); } + if (crtl->calls_eh_return) + emit_insn (gen_sp_adjust (stack_pointer_rtx, stack_pointer_rtx, + EH_RETURN_STACKADJ_RTX)); + /* Restore the old frame pointer. */ if (frame_pointer_needed) { diff --git a/gcc/config/v850/v850-modes.def b/gcc/config/v850/v850-modes.def index d90ce5456c2..42220ba0b9a 100644 --- a/gcc/config/v850/v850-modes.def +++ b/gcc/config/v850/v850-modes.def @@ -1,24 +1,22 @@ /* Definitions of target machine for GNU compiler. NEC V850 series - Copyright (C) 2005 - Free Software Foundation, Inc. + Copyright (C) 2005 Free Software Foundation, Inc. Contributed by NEC EL This file is part of GCC. - GCC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. - GCC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GCC is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + along with GCC; see the file COPYING3. If not see + <http://www.gnu.org/licenses/>. */ CC_MODE (CC_FPU_LT); CC_MODE (CC_FPU_LE); diff --git a/gcc/config/vms/t-vms b/gcc/config/vms/t-vms index 6af3df806a9..4e20bde8070 100644 --- a/gcc/config/vms/t-vms +++ b/gcc/config/vms/t-vms @@ -17,13 +17,8 @@ # along with GCC; see the file COPYING3. If not see # <http://www.gnu.org/licenses/>. -STMP_FIXPROTO = -STMP_FIXINC = LIMITS_H_TEST = false -# Under VMS, directory names cannot contain dots. -version:=$(shell echo $(BASEVER_c) | sed -e 's/\./_/g') - vms-crtlmap.h: $(srcdir)/config/vms/vms-crtlmap.map \ $(srcdir)/config/vms/make-crtlmap.awk $(AWK) -f $(srcdir)/config/vms/make-crtlmap.awk \ diff --git a/gcc/config/vms/t-vmsnative b/gcc/config/vms/t-vmsnative index a7fc031d4c1..27d3ca07ef4 100644 --- a/gcc/config/vms/t-vmsnative +++ b/gcc/config/vms/t-vmsnative @@ -17,6 +17,11 @@ # along with GCC; see the file COPYING3. If not see # <http://www.gnu.org/licenses/>. +# Under VMS, directory names cannot contain dots. +version:=$(shell echo $(BASEVER_c) | sed -e 's/\./_/g') + +# Wrappers around native VMS tools for ld and ar. + vms-ld.o: $(srcdir)/config/vms/vms-ld.c $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) diff --git a/gcc/config/vms/vms-c.c b/gcc/config/vms/vms-c.c index b3e0d955f19..4377eac04ad 100644 --- a/gcc/config/vms/vms-c.c +++ b/gcc/config/vms/vms-c.c @@ -27,6 +27,7 @@ along with GCC; see the file COPYING3. If not see #include "tree.h" #include "c-family/c-pragma.h" #include "c-family/c-common.h" +#include "c-tree.h" #include "toplev.h" #include "ggc.h" #include "tm_p.h" @@ -125,6 +126,8 @@ vms_pragma_nomember_alignment (cpp_reader *pfile ATTRIBUTE_UNUSED) maximum_field_alignment = 4 * BITS_PER_UNIT; else if (strcmp (arg, "quadword") == 0) maximum_field_alignment = 8 * BITS_PER_UNIT; + else if (strcmp (arg, "octaword") == 0) + maximum_field_alignment = 16 * BITS_PER_UNIT; else { error ("unhandled alignment for '#pragma nomember_alignment'"); @@ -145,17 +148,33 @@ vms_pragma_nomember_alignment (cpp_reader *pfile ATTRIBUTE_UNUSED) } } -/* The 'extern model' for public data. */ +/* The 'extern model' for public data. This drives how the following + declarations are handled: + 1) extern int name; + 2) int name; + 3) int name = 5; + See below for the behaviour as implemented by the native compiler. +*/ enum extern_model_kind { - /* Create one overlaid section per variable. */ + /* Create one overlaid section per variable. All the above declarations (1, + 2 and 3) are handled the same way: they create an overlaid section named + NAME (and initialized only for 3). No global symbol is created. + This is the VAX C behavior. */ extern_model_common_block, - /* Like unix: multiple not-initialized declarations are allowed. */ + /* Like unix: multiple not-initialized declarations are allowed. + Only one initialized definition (case 3) is allows, but multiple + uninitialize definition (case 2) are allowed. + For case 2, this creates both a section named NAME and a global symbol. + For case 3, this creates a conditional global symbol defenition and a + conditional section definition. + This is the traditional UNIX C behavior. */ extern_model_relaxed_refdef, - /* Like -fno-common. */ + /* Like -fno-common. Only one definition (cases 2 and 3) are allowed. + This is the ANSI-C model. */ extern_model_strict_refdef, /* Declarations creates symbols without storage. */ @@ -192,6 +211,8 @@ vms_pragma_extern_model (cpp_reader *pfile ATTRIBUTE_UNUSED) saved_extern_model = current_extern_model; else if (strcmp (arg, "restore") == 0) current_extern_model = saved_extern_model; + else if (strcmp (arg, "relaxed_refdef") == 0) + current_extern_model = extern_model_relaxed_refdef; else if (strcmp (arg, "strict_refdef") == 0) current_extern_model = extern_model_strict_refdef; else if (strcmp (arg, "common_block") == 0) @@ -263,6 +284,70 @@ vms_pragma_extern_prefix (cpp_reader * ARG_UNUSED (dummy)) } } +/* #pragma __pointer_size */ + +static enum machine_mode saved_pointer_mode; + +static void +handle_pragma_pointer_size (const char *pragma_name) +{ + enum cpp_ttype tok; + tree x; + + tok = pragma_lex (&x); + if (tok == CPP_NAME) + { + const char *op = IDENTIFIER_POINTER (x); + + if (!strcmp (op, "__save")) + saved_pointer_mode = c_default_pointer_mode; + else if (!strcmp (op, "__restore")) + c_default_pointer_mode = saved_pointer_mode; + else if (!strcmp (op, "__short")) + c_default_pointer_mode = SImode; + else if (!strcmp (op, "__long")) + c_default_pointer_mode = DImode; + else + error ("malformed %<#pragma %s%>, ignoring", pragma_name); + } + else if (tok == CPP_NUMBER) + { + int val; + + if (TREE_CODE (x) == INTEGER_CST) + val = TREE_INT_CST_LOW (x); + else + val = -1; + + if (val == 32) + c_default_pointer_mode = SImode; + else if (val == 64) + c_default_pointer_mode = DImode; + else + error ("invalid constant in %<#pragma %s%>", pragma_name); + } + else + { + error ("malformed %<#pragma %s%>, ignoring", pragma_name); + } +} + +static void +vms_pragma_pointer_size (cpp_reader * ARG_UNUSED (dummy)) +{ + /* Ignore if 32 bit only. */ + if (POINTER_SIZE != 64) + return; + + handle_pragma_pointer_size ("pointer_size"); +} + +static void +vms_pragma_required_pointer_size (cpp_reader * ARG_UNUSED (dummy)) +{ + handle_pragma_pointer_size ("required_pointer_size"); +} + /* Add vms-specific pragma. */ void @@ -274,16 +359,50 @@ vms_c_register_pragma (void) c_register_pragma (NULL, "standard", vms_pragma_standard); c_register_pragma (NULL, "__member_alignment", vms_pragma_member_alignment); c_register_pragma (NULL, "member_alignment", vms_pragma_member_alignment); - c_register_pragma (NULL, "__nomember_alignment", - vms_pragma_nomember_alignment); - c_register_pragma (NULL, "nomember_alignment", - vms_pragma_nomember_alignment); + c_register_pragma_with_expansion (NULL, "__nomember_alignment", + vms_pragma_nomember_alignment); + c_register_pragma_with_expansion (NULL, "nomember_alignment", + vms_pragma_nomember_alignment); + c_register_pragma (NULL, "__pointer_size", + vms_pragma_pointer_size); + c_register_pragma (NULL, "__required_pointer_size", + vms_pragma_required_pointer_size); c_register_pragma (NULL, "__extern_model", vms_pragma_extern_model); c_register_pragma (NULL, "extern_model", vms_pragma_extern_model); c_register_pragma (NULL, "__message", vms_pragma_message); c_register_pragma (NULL, "__extern_prefix", vms_pragma_extern_prefix); } +/* Canonicalize the filename (remove directory prefix, force the .h extension), + and append it to the directory to create the path, but don't + turn / into // or // into ///; // may be a namespace escape. */ + +static char * +vms_construct_include_filename (const char *fname, cpp_dir *dir) +{ + size_t dlen, flen; + char *path; + const char *fbasename = lbasename (fname); + size_t i; + + dlen = dir->len; + flen = strlen (fbasename) + 2; + path = XNEWVEC (char, dlen + 1 + flen + 1); + memcpy (path, dir->name, dlen); + if (dlen && !IS_DIR_SEPARATOR (path[dlen - 1])) + path[dlen++] = '/'; + for (i = 0; i < flen; i++) + if (fbasename[i] == '.') + break; + else + path[dlen + i] = TOLOWER (fbasename[i]); + path[dlen + i + 0] = '.'; + path[dlen + i + 1] = 'h'; + path[dlen + i + 2] = 0; + + return path; +} + /* Standard modules list. */ static const char * const vms_std_modules[] = { "rtldef", "starlet_c", NULL }; @@ -321,7 +440,7 @@ vms_c_register_includes (const char *sysroot, p->next = NULL; p->name = path; p->sysp = 1; - p->construct = 0; + p->construct = vms_construct_include_filename; p->user_supplied_p = 0; add_cpp_dir_path (p, SYSTEM); } diff --git a/gcc/config/vms/vms-crtlmap.map b/gcc/config/vms/vms-crtlmap.map index 8df87678a39..d98afacc17f 100644 --- a/gcc/config/vms/vms-crtlmap.map +++ b/gcc/config/vms/vms-crtlmap.map @@ -13,10 +13,11 @@ # - map lines consist in an identifier optionnaly followed by at most 2 # space-separated flags. # Flags are: -# FLOAT: will be prefixed by 'x' -# 64: There is a 64-bit variant -# BSD44: name will be prefixed by __bsd44__ -# PRNTF: a 't' prefix will be added. +# FLOAT: will be prefixed by 't'/'g'/'d'. +# 64: There is a 64-bit variant. +# GLOBAL: name will be prefixed by ga_ +# BSD44: name will be prefixed by __bsd44__. +# LDBL: a 'x' prefix will be added if 128 bit long doubles are enabled. # MALLOC: malloc related function. # # Keep entries alpha-sorted - this is enforced by the awk script. @@ -25,24 +26,36 @@ __32_signal __32_ssignal __64_signal __64_ssignal +__posix__exit +__posix_exit +__posix_kill +__posix_long_gid_kill +__unix_getuid +__utc_fstat __utc_localtime -__utc_localtime_t +__utc_localtime_r +__utc_lstat __utc_stat +__utc_strftime __utc_time __utctz_gmtime __utctz_localtime -__utctz_localtime_t +__utctz_localtime_r abort abs accept access acos FLOAT alarm +asctime +asctime_r asin FLOAT atan FLOAT atan2 FLOAT atexit +atof FLOAT atoi +atol atoll atoq basename 64 @@ -53,38 +66,55 @@ bzero calloc 64 MALLOC ceil FLOAT chdir +chmod chown clearerr clock close +closedir connect cos FLOAT ctermid 64 ctime +dlclose +dlerror +dlopen +dlsym dup dup2 environ GLOBAL +execv +execve +execvp exit exp FLOAT fabs FLOAT fclose +fcntl fdopen +feof +ferror fflush ffs fgetc +fgetname 64 MALLOC fgets 64 +fileno floor FLOAT fopen -fprintf FLOAT PRNTF +fpathconf +fprintf FLOAT LDBL fputc fputs fread free freopen +frexp FLOAT fseek ftell fwrite getc +getchar getcwd 64 getegid getenv @@ -92,10 +122,14 @@ geteuid getgid gethostbyaddr gethostbyname +getname getpagesize getpid +getpwent +getpwnam getservbyname getservbyport +getsockopt gettimeofday getuid gmtime @@ -103,16 +137,29 @@ htons iconv index 64 ioctl +isalnum +isalpha +isapipe +isascii isatty +iscntrl isdigit +isgraph islower isprint +ispunct isspace isupper +isxdigit kill +ldexp FLOAT +locale +localeconv localtime +localtime_r log FLOAT log10 FLOAT +longjmp lseek malloc 64 MALLOC mbstowcs 64 @@ -126,75 +173,100 @@ mkstemp mktemp 64 mmap 64 munmap +nanosleep nl_langinfo open +opendir +pathconf pclose perror +pipe popen pow FLOAT -printf FLOAT PRNTF +printf FLOAT LDBL putc putchar putenv puts qsort 64 +raise random read +readdir realloc 64 MALLOC recv recvfrom recvmsg BSD44 64 +remove rename rewind rindex 64 rmdir +scanf FLOAT LDBL +select send sendmsg BSD44 64 sendto +setbuf setenv setlocale +setpwent +setsockopt setvbuf +siglongjmp signal +sigsetjmp sigsetmask sin FLOAT -snprintf FLOAT PRNTF +sleep +snprintf FLOAT LDBL socket -sprintf FLOAT PRNTF +sprintf FLOAT LDBL sqrt FLOAT +sscanf FLOAT LDBL stat strcasecmp strcat 64 strchr 64 strcmp strcpy 64 +strcspn strdup 64 MALLOC strerror strlen strncasecmp +strncat 64 strncmp strncpy 64 +strpbrk 64 strrchr 64 +strspn strstr 64 strtod 64 FLOAT +strtok 64 MALLOC +strtok_r 64 MALLOC strtol 64 strtoul 64 sysconf system tan FLOAT +tempnam time times tmpfile tmpnam 64 tolower toupper +ttyname umask ungetc unlink +usleep utime -vfprintf FLOAT PRNTF -vprintf FLOAT PRNTF -vsnprintf FLOAT PRNTF -vsprintf FLOAT PRNTF +vfprintf FLOAT LDBL +vprintf FLOAT LDBL +vsnprintf FLOAT LDBL +vsprintf FLOAT LDBL wait waitpid wcswidth diff --git a/gcc/config/vms/vms-ld.c b/gcc/config/vms/vms-ld.c index 18776fa2e38..cc57d8a24be 100644 --- a/gcc/config/vms/vms-ld.c +++ b/gcc/config/vms/vms-ld.c @@ -640,7 +640,7 @@ main (int argc, char **argv) { /* Comes from pragma Ident (). */ fprintf (optfile, "case_sensitive=yes\n"); - fprintf (optfile, "IDENTIFICATION=\"%15.15s\"\n", &argv[i][17]); + fprintf (optfile, "IDENTIFICATION=\"%-.15s\"\n", &argv[i][17]); fprintf (optfile, "case_sensitive=NO\n"); } } diff --git a/gcc/config/vms/vms.c b/gcc/config/vms/vms.c index 95cc5defd63..64185365a13 100644 --- a/gcc/config/vms/vms.c +++ b/gcc/config/vms/vms.c @@ -42,8 +42,9 @@ along with GCC; see the file COPYING3. If not see rule. */ #define VMS_CRTL_BSD44 (1 << 3) -/* Prepend x before the name for printf like functions. */ -#define VMS_CRTL_PRNTF (1 << 4) +/* Prepend x before the name for if 128 bit long doubles are enabled. This + concern mostly 'printf'-like functions. */ +#define VMS_CRTL_LDBL (1 << 4) /* Prepend ga_ for global data. */ #define VMS_CRTL_GLOBAL (1 << 5) @@ -135,7 +136,7 @@ vms_patch_builtins (void) if (n->flags & VMS_CRTL_FLOAT) res[rlen++] = 't'; - if (n->flags & VMS_CRTL_PRNTF) + if (n->flags & VMS_CRTL_LDBL) res[rlen++] = 'x'; nlen = strlen (n->name); diff --git a/gcc/configure b/gcc/configure index 15a9ece5e6f..e2a0aea9f09 100755 --- a/gcc/configure +++ b/gcc/configure @@ -22214,15 +22214,11 @@ if test $in_tree_ld != yes ; then else case "${target}" in *-*-solaris2*) + # See acinclude.m4 (gcc_SUN_LD_VERSION) for the version number + # format. # - # Solaris 2 ld -V output looks like this for a regular version: - # - # ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1699 - # - # but test versions add stuff at the end: - # - # ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1701:onnv-ab196087-6931056-03/25/10 - # + # Don't reuse gcc_gv_sun_ld_vers_* in case a linker other than + # /usr/ccs/bin/ld has been configured. ld_ver=`$gcc_cv_ld -V 2>&1` if echo "$ld_ver" | grep 'Solaris Link Editors' > /dev/null; then ld_vers=`echo $ld_ver | sed -n \ @@ -22350,6 +22346,29 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_ro_rw_mix" >&5 $as_echo "$gcc_cv_ld_ro_rw_mix" >&6; } +if test "x${build}" = "x${target}" && test "x${build}" = "x${host}"; then + case "${target}" in + *-*-solaris2*) + # + # Solaris 2 ld -V output looks like this for a regular version: + # + # ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1699 + # + # but test versions add stuff at the end: + # + # ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1701:onnv-ab196087-6931056-03/25/10 + # + gcc_cv_sun_ld_ver=`/usr/ccs/bin/ld -V 2>&1` + if echo "$gcc_cv_sun_ld_ver" | grep 'Solaris Link Editors' > /dev/null; then + gcc_cv_sun_ld_vers=`echo $gcc_cv_sun_ld_ver | sed -n \ + -e 's,^.*: 5\.[0-9][0-9]*-\([0-9]\.[0-9][0-9]*\).*$,\1,p'` + gcc_cv_sun_ld_vers_major=`expr "$gcc_cv_sun_ld_vers" : '\([0-9]*\)'` + gcc_cv_sun_ld_vers_minor=`expr "$gcc_cv_sun_ld_vers" : '[0-9]*\.\([0-9]*\)'` + fi + ;; + esac +fi + # Check whether --enable-initfini-array was given. if test "${enable_initfini_array+set}" = set; then : enableval=$enable_initfini_array; @@ -22425,9 +22444,11 @@ fi .balign 4 .byte 'H', 'H', 'H', 'H' .text +.globl _start +_start: EOF if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \ - && $gcc_cv_ld -e 0 -o conftest conftest.o > /dev/null 2>&1 \ + && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1 \ && $gcc_cv_objdump -s -j .init_array conftest \ | grep HHHHFFFFDDDDBBBB > /dev/null 2>&1 \ && $gcc_cv_objdump -s -j .fini_array conftest \ @@ -22440,17 +22461,41 @@ EOF /* end confdefs.h. */ #ifndef __ELF__ -#error Not an ELF OS +# error Not an ELF OS #endif #include <stdlib.h> -#if defined __GLIBC_PREREQ && __GLIBC_PREREQ (2, 4) +#if defined __GLIBC_PREREQ +# if __GLIBC_PREREQ (2, 4) +# else +# error GLIBC 2.4 required +# endif #else -#error The C library not known to support .init_array/.fini_array +# if defined __sun__ && defined __svr4__ + /* Solaris ld.so.1 supports .init_array/.fini_array since Solaris 8. */ +# else +# error The C library not known to support .init_array/.fini_array +# endif #endif _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : + case "${target}" in + *-*-solaris2.8*) + # .init_array/.fini_array support was introduced in Solaris 8 + # patches 109147-08 (sparc) and 109148-08 (x86). Since ld.so.1 and + # ld are guaranteed to be updated in lockstep, we can check ld -V + # instead. Unfortunately, proper ld version numbers were only + # introduced in rev. -14, so we check for that. + if test "$gcc_cv_sun_ld_vers_minor" -lt 272; then + gcc_cv_initfini_array=no + fi + ;; + *-*-solaris2.9* | *-*-solaris2.1[0-9]*) + # .init_array/.fini_array support is present since Solaris 9 FCS. + ;; + esac + else gcc_cv_initfini_array=no fi @@ -22470,7 +22515,7 @@ fi if test $enable_initfini_array = yes; then -$as_echo "#define HAVE_INITFINI_ARRAY 1" >>confdefs.h +$as_echo "#define HAVE_INITFINI_ARRAY_SUPPORT 1" >>confdefs.h fi @@ -23729,6 +23774,13 @@ fi if test $set_have_as_tls = no; then LIBS= fi + # Even without TLS support on Solaris 8, explicitly link with libthread + # to guarantee that the alternate thread library is used. + case "$target" in + *-*-solaris2.8) + LIBS=-lthread + ;; + esac # Always define LIB_TLS_SPEC, even without TLS support. cat >>confdefs.h <<_ACEOF @@ -24859,7 +24911,8 @@ if test "${gcc_cv_as_ix86_tlsldmplt+set}" = set; then : else gcc_cv_as_ix86_tlsldmplt=no if test x$gcc_cv_as != x; then - $as_echo 'call tls_ld@tlsldmplt' > conftest.s + $as_echo 'tls_ld: + call tls_ld@tlsldmplt' > conftest.s if { ac_try='$gcc_cv_as $gcc_cv_as_flags -o conftest.o conftest.s >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 diff --git a/gcc/configure.ac b/gcc/configure.ac index 5d6aa5d3c28..39302ad76c3 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -2296,15 +2296,11 @@ if test $in_tree_ld != yes ; then else case "${target}" in *-*-solaris2*) + # See acinclude.m4 (gcc_SUN_LD_VERSION) for the version number + # format. # - # Solaris 2 ld -V output looks like this for a regular version: - # - # ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1699 - # - # but test versions add stuff at the end: - # - # ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1701:onnv-ab196087-6931056-03/25/10 - # + # Don't reuse gcc_gv_sun_ld_vers_* in case a linker other than + # /usr/ccs/bin/ld has been configured. ld_ver=`$gcc_cv_ld -V 2>&1` if echo "$ld_ver" | grep 'Solaris Link Editors' > /dev/null; then ld_vers=`echo $ld_ver | sed -n \ @@ -3268,6 +3264,13 @@ case "$target" in if test $set_have_as_tls = no; then LIBS= fi + # Even without TLS support on Solaris 8, explicitly link with libthread + # to guarantee that the alternate thread library is used. + case "$target" in + *-*-solaris2.8) + LIBS=-lthread + ;; + esac # Always define LIB_TLS_SPEC, even without TLS support. AC_DEFINE_UNQUOTED(LIB_TLS_SPEC, "$LIBS", [Define to the library containing __tls_get_addr/___tls_get_addr.]) @@ -3721,7 +3724,8 @@ foo: nop gcc_GAS_CHECK_FEATURE([R_386_TLS_LDM_PLT reloc], gcc_cv_as_ix86_tlsldmplt,,, - [call tls_ld@tlsldmplt], + [tls_ld: + call tls_ld@tlsldmplt], [if test x$gcc_cv_ld != x \ && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then gcc_cv_as_ix86_tlsldmplt=yes diff --git a/gcc/convert.c b/gcc/convert.c index dbe2c7eb32e..dc9b7f29ea4 100644 --- a/gcc/convert.c +++ b/gcc/convert.c @@ -90,52 +90,6 @@ convert_to_pointer (tree type, tree expr) } } -/* Avoid any floating point extensions from EXP. */ -tree -strip_float_extensions (tree exp) -{ - tree sub, expt, subt; - - /* For floating point constant look up the narrowest type that can hold - it properly and handle it like (type)(narrowest_type)constant. - This way we can optimize for instance a=a*2.0 where "a" is float - but 2.0 is double constant. */ - if (TREE_CODE (exp) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (TREE_TYPE (exp))) - { - REAL_VALUE_TYPE orig; - tree type = NULL; - - orig = TREE_REAL_CST (exp); - if (TYPE_PRECISION (TREE_TYPE (exp)) > TYPE_PRECISION (float_type_node) - && exact_real_truncate (TYPE_MODE (float_type_node), &orig)) - type = float_type_node; - else if (TYPE_PRECISION (TREE_TYPE (exp)) - > TYPE_PRECISION (double_type_node) - && exact_real_truncate (TYPE_MODE (double_type_node), &orig)) - type = double_type_node; - if (type) - return build_real (type, real_value_truncate (TYPE_MODE (type), orig)); - } - - if (!CONVERT_EXPR_P (exp)) - return exp; - - sub = TREE_OPERAND (exp, 0); - subt = TREE_TYPE (sub); - expt = TREE_TYPE (exp); - - if (!FLOAT_TYPE_P (subt)) - return exp; - - if (DECIMAL_FLOAT_TYPE_P (expt) != DECIMAL_FLOAT_TYPE_P (subt)) - return exp; - - if (TYPE_PRECISION (subt) > TYPE_PRECISION (expt)) - return exp; - - return strip_float_extensions (sub); -} - /* Convert EXPR to some floating-point type TYPE. diff --git a/gcc/coverage.c b/gcc/coverage.c index ce8b175d2f7..14fe52f404b 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -131,7 +131,8 @@ static void coverage_obj_finish (VEC(constructor_elt,gc) *); tree get_gcov_type (void) { - return lang_hooks.types.type_for_size (GCOV_TYPE_SIZE, false); + enum machine_mode mode = smallest_mode_for_size (GCOV_TYPE_SIZE, MODE_INT); + return lang_hooks.types.type_for_mode (mode, false); } /* Return the type node for gcov_unsigned_t. */ @@ -139,7 +140,8 @@ get_gcov_type (void) static tree get_gcov_unsigned_t (void) { - return lang_hooks.types.type_for_size (32, true); + enum machine_mode mode = smallest_mode_for_size (32, MODE_INT); + return lang_hooks.types.type_for_mode (mode, true); } static hashval_t diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index faa85939428..24e629fe8cd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,80 @@ +2012-03-08 Paolo Carlini <paolo.carlini@oracle.com> + + * typeck.c (build_array_ref, cp_build_addr_expr_1, convert_ptrmem, + build_ptrmemfunc): Consistently forward the tsubst_flags_t + parameter. + * call.c (resolve_args): Likewise. + +2012-03-07 Jason Merrill <jason@redhat.com> + + PR c++/52521 + * mangle.c (write_literal_operator_name): The length comes after the + operator prefix. + +2012-03-05 Jakub Jelinek <jakub@redhat.com> + + * pt.c (local_specializations): Change from htab_t into + struct pointer_map_t *. + (retrieve_local_specializations, register_local_specialization, + tsubst_pack_expansion, instantiate_decl): Adjust users. + (eq_local_specializations, hash_local_specialization): Remove. + +2012-03-05 Jason Merrill <jason@redhat.com> + + PR c++/51930 + * decl2.c (determine_visibility): Correct calculation of class + args depth. + * decl.c (check_tag_decl): Adjust warning. + + * method.c (synthesized_method_walk): Cleanups don't affect the EH + spec either. + +2012-03-03 Jason Merrill <jason@redhat.com> + + * init.c (perform_member_init): Cope with uninstantiated NSDMI. + + Core 1270 + * call.c (build_aggr_conv): Call reshape_init. + (convert_like_real): Likewise. + * typeck2.c (process_init_constructor): Clear TREE_CONSTANT if + not all constant. + + * mangle.c (write_nested_name): Use decl_mangling_context. + (write_prefix, write_template_prefix): Likewise. + + PR c++/36797 + * mangle.c (write_expression): Improve diagnostic for TRAIT_EXPR. + + * class.c (add_method): Always build an OVERLOAD for using-decls. + * search.c (lookup_member): Handle getting an OVERLOAD for a + single function. + +2012-03-02 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/51989 + * typeck2.c (build_x_arrow): Take a tsubst_flags_t argument and + propagate it. + * cp-tree.h (build_x_arrow): Adjust prototype. + * pt.c (tsubst_copy_and_build): Adjust call. + * parser.c (cp_parser_postfix_dot_deref_expression): Likewise. + +2012-03-02 Paolo Carlini <paolo.carlini@oracle.com> + + * name-lookup.c (binding_to_template_parms_of_scope_p): Clean up. + +2012-02-29 Jason Merrill <jason@redhat.com> + + PR c++/51930 + * decl.c (check_tag_decl): Move warning for misplaced attributes here. + (shadow_tag): From here. + * parser.c (cp_parser_explicit_instantiation): Don't warn here. + +2012-02-21 Jakub Jelinek <jakub@redhat.com> + + PR c++/52312 + * typeck.c (check_literal_operator_args): Initialize *long_double_p + and *long_long_unsigned_p even if processing_template_decl. + 2012-02-16 Jason Merrill <jason@redhat.com> PR c++/52248 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index c962ca0bd53..0bf3bb187c0 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -886,6 +886,10 @@ build_aggr_conv (tree type, tree ctor, int flags) tree field = next_initializable_field (TYPE_FIELDS (type)); tree empty_ctor = NULL_TREE; + ctor = reshape_init (type, ctor, tf_none); + if (ctor == error_mark_node) + return NULL; + for (; field; field = next_initializable_field (DECL_CHAIN (field))) { tree ftype = TREE_TYPE (field); @@ -3736,7 +3740,7 @@ resolve_args (VEC(tree,gc) *args, tsubst_flags_t complain) error ("invalid use of void expression"); return NULL; } - else if (invalid_nonstatic_memfn_p (arg, tf_warning_or_error)) + else if (invalid_nonstatic_memfn_p (arg, complain)) return NULL; } return args; @@ -5795,6 +5799,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, expr = build2 (COMPLEX_EXPR, totype, real, imag); return fold_if_not_in_template (expr); } + expr = reshape_init (totype, expr, complain); return get_target_expr (digest_init (totype, expr, complain)); default: diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 5d834d9ae5d..6ed4cde6b51 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -1117,9 +1117,13 @@ add_method (tree type, tree method, tree using_decl) return false; /* Add the new binding. */ - overload = build_overload (method, current_fns); - if (using_decl && TREE_CODE (overload) == OVERLOAD) - OVL_USED (overload) = true; + if (using_decl) + { + overload = ovl_cons (method, current_fns); + OVL_USED (overload) = true; + } + else + overload = build_overload (method, current_fns); if (conv_p) TYPE_HAS_CONVERSION (type) = 1; diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index d435dbdaa0a..71573ff0b37 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -5880,7 +5880,7 @@ extern void check_narrowing (tree, tree); extern tree digest_init (tree, tree, tsubst_flags_t); extern tree digest_init_flags (tree, tree, int); extern tree build_scoped_ref (tree, tree, tree *); -extern tree build_x_arrow (tree); +extern tree build_x_arrow (tree, tsubst_flags_t); extern tree build_m_component_ref (tree, tree); extern tree build_functional_cast (tree, tree, tsubst_flags_t); extern tree add_exception_specifier (tree, tree, int); diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 2a6a5160fb6..a18b312841d 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -4216,6 +4216,22 @@ check_tag_decl (cp_decl_specifier_seq *declspecs) error ("%<constexpr%> cannot be used for type declarations"); } + if (declspecs->attributes && warn_attributes) + { + location_t loc; + if (!CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type)) + /* For a non-template class, use the name location. */ + loc = location_of (declared_type); + else + /* For a template class (an explicit instantiation), use the + current location. */ + loc = input_location; + warning_at (loc, OPT_Wattributes, "attribute ignored in declaration " + "of %q#T", declared_type); + inform (loc, "attribute for %q#T must follow the %qs keyword", + declared_type, class_key_or_enum_as_string (declared_type)); + } + return declared_type; } @@ -4240,14 +4256,6 @@ shadow_tag (cp_decl_specifier_seq *declspecs) if (!t) return NULL_TREE; - if (declspecs->attributes) - { - warning (0, "attribute ignored in declaration of %q+#T", t); - warning (0, "attribute for %q+#T must follow the %qs keyword", - t, class_key_or_enum_as_string (t)); - - } - if (maybe_process_partial_specialization (t) == error_mark_node) return NULL_TREE; diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index bdc962abcf9..7eccf672546 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -2181,12 +2181,8 @@ determine_visibility (tree decl) ? TYPE_ATTRIBUTES (TREE_TYPE (decl)) : DECL_ATTRIBUTES (decl)); - if (args != error_mark_node - /* Template argument visibility outweighs #pragma or namespace - visibility, but not an explicit attribute. */ - && !lookup_attribute ("visibility", attribs)) + if (args != error_mark_node) { - int depth = TMPL_ARGS_DEPTH (args); tree pattern = DECL_TEMPLATE_RESULT (TI_TEMPLATE (tinfo)); if (!DECL_VISIBILITY_SPECIFIED (decl)) @@ -2202,10 +2198,31 @@ determine_visibility (tree decl) } } - /* FIXME should TMPL_ARGS_DEPTH really return 1 for null input? */ - if (args && depth > template_class_depth (class_type)) - /* Limit visibility based on its template arguments. */ - constrain_visibility_for_template (decl, args); + if (args + /* Template argument visibility outweighs #pragma or namespace + visibility, but not an explicit attribute. */ + && !lookup_attribute ("visibility", attribs)) + { + int depth = TMPL_ARGS_DEPTH (args); + int class_depth = 0; + if (class_type && CLASSTYPE_TEMPLATE_INFO (class_type)) + class_depth = TMPL_ARGS_DEPTH (CLASSTYPE_TI_ARGS (class_type)); + if (DECL_VISIBILITY_SPECIFIED (decl)) + { + /* A class template member with explicit visibility + overrides the class visibility, so we need to apply + all the levels of template args directly. */ + int i; + for (i = 1; i <= depth; ++i) + { + tree lev = TMPL_ARGS_LEVEL (args, i); + constrain_visibility_for_template (decl, lev); + } + } + else if (depth > class_depth) + /* Limit visibility based on its template arguments. */ + constrain_visibility_for_template (decl, args); + } } } diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 2355a04de23..1b2a1ef15ae 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -540,6 +540,12 @@ perform_member_init (tree member, tree init) else { init = DECL_INITIAL (member); + if (init && TREE_CODE (init) == DEFAULT_ARG) + { + error ("constructor required before non-static data member " + "for %qD has been parsed", member); + init = NULL_TREE; + } /* Strip redundant TARGET_EXPR so we don't need to remap it, and so the aggregate init code below will see a CONSTRUCTOR. */ if (init && TREE_CODE (init) == TARGET_EXPR diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index 34f19efc42e..5d6beb5d578 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -942,7 +942,7 @@ write_nested_name (const tree decl) } else { - write_prefix (CP_DECL_CONTEXT (decl)); + write_prefix (decl_mangling_context (decl)); write_unqualified_name (decl); } } @@ -1030,7 +1030,7 @@ write_prefix (const tree node) } else { - write_prefix (CP_DECL_CONTEXT (decl)); + write_prefix (decl_mangling_context (decl)); write_unqualified_name (decl); } } @@ -1060,7 +1060,7 @@ write_template_prefix (const tree node) { tree decl = DECL_P (node) ? node : TYPE_NAME (node); tree type = DECL_P (node) ? TREE_TYPE (node) : node; - tree context = CP_DECL_CONTEXT (decl); + tree context = decl_mangling_context (decl); tree template_info; tree templ; tree substitution; @@ -1292,18 +1292,16 @@ write_source_name (tree identifier) } /* Write a user-defined literal operator. + ::= li <source-name> # "" <source-name> IDENTIFIER is an LITERAL_IDENTIFIER_NODE. */ static void write_literal_operator_name (tree identifier) { const char* suffix = UDLIT_OP_SUFFIX (identifier); - char* buffer = XNEWVEC (char, strlen (UDLIT_OP_MANGLED_PREFIX) - + strlen (suffix) + 10); - sprintf (buffer, UDLIT_OP_MANGLED_FORMAT, suffix); - - write_unsigned_number (strlen (buffer)); - write_identifier (buffer); + write_identifier (UDLIT_OP_MANGLED_PREFIX); + write_unsigned_number (strlen (suffix)); + write_identifier (suffix); } /* Encode 0 as _, and 1+ as n-1_. */ @@ -2808,7 +2806,17 @@ write_expression (tree expr) if (name == NULL) { - sorry ("mangling %C", code); + switch (code) + { + case TRAIT_EXPR: + error ("use of built-in trait %qE in function signature; " + "use library traits instead", expr); + break; + + default: + sorry ("mangling %C", code); + break; + } return; } else diff --git a/gcc/cp/method.c b/gcc/cp/method.c index cf2a713aa2a..07189168d1f 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -1272,8 +1272,11 @@ synthesized_method_walk (tree ctype, special_function_kind sfk, bool const_p, rval = locate_fn_flags (base_binfo, complete_dtor_identifier, NULL_TREE, flags, complain); /* Note that we don't pass down trivial_p; the subobject - destructors don't affect triviality of the constructor. */ - process_subob_fn (rval, false, spec_p, NULL, + destructors don't affect triviality of the constructor. Nor + do they affect constexpr-ness (a constant expression doesn't + throw) or exception-specification (a throw from one of the + dtors would be a double-fault). */ + process_subob_fn (rval, false, NULL, NULL, deleted_p, NULL, NULL, basetype); } diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 235134249ac..e85d603d22f 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -4467,20 +4467,17 @@ binding_to_template_parms_of_scope_p (cxx_binding *binding, cp_binding_level *scope) { tree binding_value; + tree tinfo; - if (!binding || !scope) + if (!binding || !scope || !scope->this_entity) return false; binding_value = binding->value ? binding->value : binding->type; + tinfo = get_template_info (scope->this_entity); - return (scope - && scope->this_entity - && get_template_info (scope->this_entity) - && PRIMARY_TEMPLATE_P (TI_TEMPLATE - (get_template_info (scope->this_entity))) - && parameter_of_template_p (binding_value, - TI_TEMPLATE (get_template_info \ - (scope->this_entity)))); + return (tinfo + && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo)) + && parameter_of_template_p (binding_value, TI_TEMPLATE (tinfo))); } /* Return the innermost non-namespace binding for NAME from a scope diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 3e2be97f9c9..c6bd2906203 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -5910,7 +5910,8 @@ cp_parser_postfix_dot_deref_expression (cp_parser *parser, /* If this is a `->' operator, dereference the pointer. */ if (token_type == CPP_DEREF) - postfix_expression = build_x_arrow (postfix_expression); + postfix_expression = build_x_arrow (postfix_expression, + tf_warning_or_error); /* Check to see whether or not the expression is type-dependent. */ dependent_p = type_dependent_expression_p (postfix_expression); /* The identifier following the `->' or `.' is not qualified. */ @@ -13122,9 +13123,6 @@ cp_parser_explicit_instantiation (cp_parser* parser) tree type; type = check_tag_decl (&decl_specifiers); - if (decl_specifiers.attributes) - warning (OPT_Wattributes, - "attributes ignored on explicit type instantiation"); /* Turn access control back on for names used during template instantiation. */ pop_deferring_access_checks (); diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index c9cd953decc..4980c19ae06 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -79,7 +79,7 @@ static tree cur_stmt_expr; /* A map from local variable declarations in the body of the template presently being instantiated to the corresponding instantiated local variables. */ -static htab_t local_specializations; +static struct pointer_map_t *local_specializations; typedef struct GTY(()) spec_entry { @@ -189,7 +189,6 @@ static tree for_each_template_parm_r (tree *, int *, void *); static tree copy_default_args_to_explicit_spec_1 (tree, tree); static void copy_default_args_to_explicit_spec (tree); static int invalid_nontype_parm_type_p (tree, tsubst_flags_t); -static int eq_local_specializations (const void *, const void *); static bool dependent_template_arg_p (tree); static bool any_template_arguments_need_structural_equality_p (tree); static bool dependent_type_p_r (tree); @@ -1078,14 +1077,13 @@ retrieve_specialization (tree tmpl, tree args, hashval_t hash) static tree retrieve_local_specialization (tree tmpl) { - tree spec; + void **slot; if (local_specializations == NULL) return NULL_TREE; - spec = (tree) htab_find_with_hash (local_specializations, tmpl, - htab_hash_pointer (tmpl)); - return spec ? TREE_PURPOSE (spec) : NULL_TREE; + slot = pointer_map_contains (local_specializations, tmpl); + return slot ? (tree) *slot : NULL_TREE; } /* Returns nonzero iff DECL is a specialization of TMPL. */ @@ -1677,24 +1675,6 @@ reregister_specialization (tree spec, tree tinfo, tree new_spec) return 0; } -/* Compare an entry in the local specializations hash table P1 (which - is really a pointer to a TREE_LIST) with P2 (which is really a - DECL). */ - -static int -eq_local_specializations (const void *p1, const void *p2) -{ - return TREE_VALUE ((const_tree) p1) == (const_tree) p2; -} - -/* Hash P1, an entry in the local specializations table. */ - -static hashval_t -hash_local_specialization (const void* p1) -{ - return htab_hash_pointer (TREE_VALUE ((const_tree) p1)); -} - /* Like register_specialization, but for local declarations. We are registering SPEC, an instantiation of TMPL. */ @@ -1703,9 +1683,8 @@ register_local_specialization (tree spec, tree tmpl) { void **slot; - slot = htab_find_slot_with_hash (local_specializations, tmpl, - htab_hash_pointer (tmpl), INSERT); - *slot = build_tree_list (spec, tmpl); + slot = pointer_map_insert (local_specializations, tmpl); + *slot = spec; } /* TYPE is a class type. Returns true if TYPE is an explicitly @@ -9307,7 +9286,7 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain, int missing_level = 0; int i, len = -1; tree result; - htab_t saved_local_specializations = NULL; + struct pointer_map_t *saved_local_specializations = NULL; bool need_local_specializations = false; int levels; @@ -9492,14 +9471,11 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain, if (need_local_specializations) { /* We're in a late-specified return type, so create our own local - specializations table; the current table is either NULL or (in the + specializations map; the current map is either NULL or (in the case of recursive unification) might have bindings that we don't want to use or alter. */ saved_local_specializations = local_specializations; - local_specializations = htab_create (37, - hash_local_specialization, - eq_local_specializations, - NULL); + local_specializations = pointer_map_create (); } /* For each argument in each argument pack, substitute into the @@ -9586,7 +9562,7 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain, if (need_local_specializations) { - htab_delete (local_specializations); + pointer_map_destroy (local_specializations); local_specializations = saved_local_specializations; } @@ -13691,7 +13667,7 @@ tsubst_copy_and_build (tree t, /* Remember that there was a reference to this entity. */ if (DECL_P (op1)) mark_used (op1); - return build_x_arrow (op1); + return build_x_arrow (op1, complain); case NEW_EXPR: { @@ -18704,7 +18680,7 @@ instantiate_decl (tree d, int defer_ok, synthesize_method (d); else if (TREE_CODE (d) == FUNCTION_DECL) { - htab_t saved_local_specializations; + struct pointer_map_t *saved_local_specializations; tree subst_decl; tree tmpl_parm; tree spec_parm; @@ -18714,10 +18690,7 @@ instantiate_decl (tree d, int defer_ok, saved_local_specializations = local_specializations; /* Set up the list of local specializations. */ - local_specializations = htab_create (37, - hash_local_specialization, - eq_local_specializations, - NULL); + local_specializations = pointer_map_create (); /* Set up context. */ start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED); @@ -18759,7 +18732,7 @@ instantiate_decl (tree d, int defer_ok, input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus; /* We don't need the local specializations any more. */ - htab_delete (local_specializations); + pointer_map_destroy (local_specializations); local_specializations = saved_local_specializations; /* Finish the function. */ diff --git a/gcc/cp/search.c b/gcc/cp/search.c index e48dcec0589..a1f8a3db173 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -1250,10 +1250,12 @@ lookup_member (tree xbasetype, tree name, int protect, bool want_type, only the first call to "f" is valid. However, if the function is static, we can check. */ if (rval && protect - && !really_overloaded_fn (rval) - && !(TREE_CODE (rval) == FUNCTION_DECL - && DECL_NONSTATIC_MEMBER_FUNCTION_P (rval))) - perform_or_defer_access_check (basetype_path, rval, rval); + && !really_overloaded_fn (rval)) + { + tree decl = is_overloaded_fn (rval) ? get_first_fn (rval) : rval; + if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)) + perform_or_defer_access_check (basetype_path, decl, decl); + } if (errstr && protect) { diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 91e7a0a09ca..643454cf227 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -2884,7 +2884,7 @@ cp_build_array_ref (location_t loc, tree array, tree idx, complain), cp_build_array_ref (loc, TREE_OPERAND (array, 2), idx, complain), - tf_warning_or_error); + complain); protected_set_expr_location (ret, loc); return ret; @@ -5033,7 +5033,7 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain) build_ptrmemfunc_type (argtype); val = build_ptrmemfunc (argtype, val, 0, /*c_cast_p=*/false, - tf_warning_or_error); + complain); } return val; @@ -5781,11 +5781,11 @@ convert_ptrmem (tree type, tree expr, bool allow_inverse_p, EQ_EXPR, expr, build_int_cst (TREE_TYPE (expr), -1), - tf_warning_or_error); + complain); op1 = build_nop (ptrdiff_type_node, expr); op2 = cp_build_binary_op (input_location, PLUS_EXPR, op1, delta, - tf_warning_or_error); + complain); expr = fold_build3_loc (input_location, COND_EXPR, ptrdiff_type_node, cond, op1, op2); @@ -7208,7 +7208,7 @@ build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p, return pfn; else if (integer_zerop (n)) return build_reinterpret_cast (to_type, pfn, - tf_warning_or_error); + complain); } if (TREE_SIDE_EFFECTS (pfn)) @@ -7229,9 +7229,9 @@ build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p, if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta) n = cp_build_binary_op (input_location, LSHIFT_EXPR, n, integer_one_node, - tf_warning_or_error); + complain); delta = cp_build_binary_op (input_location, - PLUS_EXPR, delta, n, tf_warning_or_error); + PLUS_EXPR, delta, n, complain); return build_ptrmemfunc1 (to_type, delta, npfn); } @@ -7245,7 +7245,7 @@ build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p, } if (type_unknown_p (pfn)) - return instantiate_type (type, pfn, tf_warning_or_error); + return instantiate_type (type, pfn, complain); fn = TREE_OPERAND (pfn, 0); gcc_assert (TREE_CODE (fn) == FUNCTION_DECL @@ -8483,6 +8483,9 @@ check_literal_operator_args (const_tree decl, bool *long_long_unsigned_p, bool *long_double_p) { tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl)); + + *long_long_unsigned_p = false; + *long_double_p = false; if (processing_template_decl || processing_specialization) return argtypes == void_list_node; else @@ -8491,9 +8494,6 @@ check_literal_operator_args (const_tree decl, int arity; int max_arity = 2; - *long_long_unsigned_p = false; - *long_double_p = false; - /* Count the number and type of arguments and check for ellipsis. */ for (argtype = argtypes, arity = 0; argtype && argtype != void_list_node; diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index 7793744ae4f..974f92ff89c 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -1392,7 +1392,10 @@ process_init_constructor (tree type, tree init, tsubst_flags_t complain) TREE_TYPE (init) = type; if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE) cp_complete_array_type (&TREE_TYPE (init), init, /*do_default=*/0); - if (!(flags & PICFLAG_NOT_ALL_CONSTANT)) + if (flags & PICFLAG_NOT_ALL_CONSTANT) + /* Make sure TREE_CONSTANT isn't set from build_constructor. */ + TREE_CONSTANT (init) = false; + else { TREE_CONSTANT (init) = 1; if (!(flags & PICFLAG_NOT_ALL_SIMPLE)) @@ -1462,7 +1465,7 @@ build_scoped_ref (tree datum, tree basetype, tree* binfo_p) delegation is detected. */ tree -build_x_arrow (tree expr) +build_x_arrow (tree expr, tsubst_flags_t complain) { tree orig_expr = expr; tree type = TREE_TYPE (expr); @@ -1486,7 +1489,7 @@ build_x_arrow (tree expr) while ((expr = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, expr, NULL_TREE, NULL_TREE, - &fn, tf_warning_or_error))) + &fn, complain))) { if (expr == error_mark_node) return error_mark_node; @@ -1497,7 +1500,8 @@ build_x_arrow (tree expr) if (vec_member (TREE_TYPE (expr), types_memoized)) { - error ("circular pointer delegation detected"); + if (complain & tf_error) + error ("circular pointer delegation detected"); return error_mark_node; } @@ -1510,7 +1514,8 @@ build_x_arrow (tree expr) if (last_rval == NULL_TREE) { - error ("base operand of %<->%> has non-pointer type %qT", type); + if (complain & tf_error) + error ("base operand of %<->%> has non-pointer type %qT", type); return error_mark_node; } @@ -1530,13 +1535,16 @@ build_x_arrow (tree expr) return expr; } - return cp_build_indirect_ref (last_rval, RO_NULL, tf_warning_or_error); + return cp_build_indirect_ref (last_rval, RO_NULL, complain); } - if (types_memoized) - error ("result of %<operator->()%> yields non-pointer result"); - else - error ("base operand of %<->%> is not a pointer"); + if (complain & tf_error) + { + if (types_memoized) + error ("result of %<operator->()%> yields non-pointer result"); + else + error ("base operand of %<->%> is not a pointer"); + } return error_mark_node; } diff --git a/gcc/cselib.c b/gcc/cselib.c index d7cb355fc33..56f2b7f9ffe 100644 --- a/gcc/cselib.c +++ b/gcc/cselib.c @@ -52,6 +52,7 @@ struct elt_list { static bool cselib_record_memory; static bool cselib_preserve_constants; +static bool cselib_any_perm_equivs; static int entry_and_rtx_equal_p (const void *, const void *); static hashval_t get_value_hash (const void *); static struct elt_list *new_elt_list (struct elt_list *, cselib_val *); @@ -383,22 +384,29 @@ cselib_clear_table (void) cselib_reset_table (1); } -/* Remove from hash table all VALUEs except constants - and function invariants. */ +/* Return TRUE if V is a constant, a function invariant or a VALUE + equivalence; FALSE otherwise. */ -static int -preserve_only_constants (void **x, void *info ATTRIBUTE_UNUSED) +static bool +invariant_or_equiv_p (cselib_val *v) { - cselib_val *v = (cselib_val *)*x; struct elt_loc_list *l; + if (v == cfa_base_preserved_val) + return true; + + /* Keep VALUE equivalences around. */ + for (l = v->locs; l; l = l->next) + if (GET_CODE (l->loc) == VALUE) + return true; + if (v->locs != NULL && v->locs->next == NULL) { if (CONSTANT_P (v->locs->loc) && (GET_CODE (v->locs->loc) != CONST || !references_value_p (v->locs->loc, 0))) - return 1; + return true; /* Although a debug expr may be bound to different expressions, we can preserve it as if it was constant, to get unification and proper merging within var-tracking. */ @@ -406,24 +414,29 @@ preserve_only_constants (void **x, void *info ATTRIBUTE_UNUSED) || GET_CODE (v->locs->loc) == DEBUG_IMPLICIT_PTR || GET_CODE (v->locs->loc) == ENTRY_VALUE || GET_CODE (v->locs->loc) == DEBUG_PARAMETER_REF) - return 1; - if (cfa_base_preserved_val) - { - if (v == cfa_base_preserved_val) - return 1; - if (GET_CODE (v->locs->loc) == PLUS - && CONST_INT_P (XEXP (v->locs->loc, 1)) - && XEXP (v->locs->loc, 0) == cfa_base_preserved_val->val_rtx) - return 1; - } + return true; + + /* (plus (value V) (const_int C)) is invariant iff V is invariant. */ + if (GET_CODE (v->locs->loc) == PLUS + && CONST_INT_P (XEXP (v->locs->loc, 1)) + && GET_CODE (XEXP (v->locs->loc, 0)) == VALUE + && invariant_or_equiv_p (CSELIB_VAL_PTR (XEXP (v->locs->loc, 0)))) + return true; } - /* Keep VALUE equivalences around. */ - for (l = v->locs; l; l = l->next) - if (GET_CODE (l->loc) == VALUE) - return 1; + return false; +} + +/* Remove from hash table all VALUEs except constants, function + invariants and VALUE equivalences. */ + +static int +preserve_constants_and_equivs (void **x, void *info ATTRIBUTE_UNUSED) +{ + cselib_val *v = (cselib_val *)*x; - htab_clear_slot (cselib_hash_table, x); + if (!invariant_or_equiv_p (v)) + htab_clear_slot (cselib_hash_table, x); return 1; } @@ -463,9 +476,12 @@ cselib_reset_table (unsigned int num) } if (cselib_preserve_constants) - htab_traverse (cselib_hash_table, preserve_only_constants, NULL); + htab_traverse (cselib_hash_table, preserve_constants_and_equivs, NULL); else - htab_empty (cselib_hash_table); + { + htab_empty (cselib_hash_table); + gcc_checking_assert (!cselib_any_perm_equivs); + } n_useless_values = 0; n_useless_debug_values = 0; @@ -2376,6 +2392,8 @@ cselib_add_permanent_equiv (cselib_val *elt, rtx x, rtx insn) if (nelt != elt) { + cselib_any_perm_equivs = true; + if (!PRESERVED_VALUE_P (nelt->val_rtx)) cselib_preserve_value (nelt); @@ -2385,6 +2403,14 @@ cselib_add_permanent_equiv (cselib_val *elt, rtx x, rtx insn) cselib_current_insn = save_cselib_current_insn; } +/* Return TRUE if any permanent equivalences have been recorded since + the table was last initialized. */ +bool +cselib_have_permanent_equivalences (void) +{ + return cselib_any_perm_equivs; +} + /* There is no good way to determine how many elements there can be in a PARALLEL. Since it's fairly cheap, use a really large number. */ #define MAX_SETS (FIRST_PSEUDO_REGISTER * 2) @@ -2639,6 +2665,7 @@ cselib_init (int record_what) value_pool = create_alloc_pool ("value", RTX_CODE_SIZE (VALUE), 100); cselib_record_memory = record_what & CSELIB_RECORD_MEMORY; cselib_preserve_constants = record_what & CSELIB_PRESERVE_CONSTANTS; + cselib_any_perm_equivs = false; /* (mem:BLK (scratch)) is a special mechanism to conflict with everything, see canon_true_dependence. This is only created once. */ @@ -2672,6 +2699,7 @@ cselib_finish (void) { cselib_discard_hook = NULL; cselib_preserve_constants = false; + cselib_any_perm_equivs = false; cfa_base_preserved_val = NULL; cfa_base_preserved_regno = INVALID_REGNUM; free_alloc_pool (elt_list_pool); diff --git a/gcc/cselib.h b/gcc/cselib.h index 5b5fe23ae40..96575f985e0 100644 --- a/gcc/cselib.h +++ b/gcc/cselib.h @@ -98,6 +98,7 @@ extern bool cselib_preserved_value_p (cselib_val *); extern void cselib_preserve_only_values (void); extern void cselib_preserve_cfa_base_value (cselib_val *, unsigned int); extern void cselib_add_permanent_equiv (cselib_val *, rtx, rtx); +extern bool cselib_have_permanent_equivalences (void); extern void dump_cselib_table (FILE *); diff --git a/gcc/df-scan.c b/gcc/df-scan.c index deaa9f96d53..39f444f9fc5 100644 --- a/gcc/df-scan.c +++ b/gcc/df-scan.c @@ -1,6 +1,6 @@ /* Scanning of rtl for dataflow analysis. Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, - 2008, 2009, 2010, 2011 Free Software Foundation, Inc. + 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. Originally contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com) Major rewrite contributed by Danny Berlin (dberlin@dberlin.org) @@ -2794,8 +2794,9 @@ df_ref_create_structure (enum df_ref_class cl, DF_REF_FLAGS_CLEAR (this_ref, DF_HARD_REG_LIVE); /* See if this ref needs to have DF_HARD_REG_LIVE bit set. */ - if ((regno < FIRST_PSEUDO_REGISTER) - && (!DF_REF_IS_ARTIFICIAL (this_ref))) + if (regno < FIRST_PSEUDO_REGISTER + && !DF_REF_IS_ARTIFICIAL (this_ref) + && !DEBUG_INSN_P (DF_REF_INSN (this_ref))) { if (DF_REF_REG_DEF_P (this_ref)) { @@ -1,7 +1,7 @@ /* Form lists of pseudo register references for autoinc optimization for GNU compiler. This is part of flow optimization. Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, - 2009, 2010 Free Software Foundation, Inc. + 2009, 2010, 2011, 2012 Free Software Foundation, Inc. Originally contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com) Major rewrite contributed by Danny Berlin (dberlin@dberlin.org) @@ -574,7 +574,7 @@ struct df_d uses and defs as well as refs in eq notes are ignored. If the ref is a def, it cannot be a MAY_CLOBBER def. If the ref is a use, it cannot be the emim_reg_set or be the frame or arg pointer - register. + register. Uses in debug insns are ignored. IT IS NOT ACCEPTABLE TO MANUALLY CHANGE THIS ARRAY. This array always reflects the actual number of refs in the insn stream that diff --git a/gcc/doc/contrib.texi b/gcc/doc/contrib.texi index face894ff48..ccfa0ca36a9 100644 --- a/gcc/doc/contrib.texi +++ b/gcc/doc/contrib.texi @@ -344,6 +344,9 @@ the support for System V Release 4. He has also worked heavily on the Intel 386 and 860 support. @item +Sumanth Gundapaneni for contributing the CR16 port. + +@item Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload GCSE@. @item @@ -882,6 +885,9 @@ Zdenek Sojka for running automated regression testing of GCC and reporting numerous bugs. @item +Jayant Sonar for contributing the CR16 port. + +@item Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. @item diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index e4d17cf48ff..c770e35cb7f 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -1266,14 +1266,6 @@ address space @code{__flash@var{N}}. The compiler will set the @code{RAMPZ} segment register approptiately before reading data by means of the @code{ELPM} instruction. -On devices with less 64@tie{}kiB flash segments as indicated by the address -space, the compiler will cut down the segment number to a number the -device actually supports. Counting starts at@tie{}@code{0} -for space @code{__flash}. For example, if you access address space -@code{__flash3} on an ATmega128 device with two 64@tie{}kiB flash segments, -the compiler will generate a read from @code{__flash1}, i.e.@: it -will load @code{RAMPZ} with@tie{}@code{1} before reading. - @item __memx @cindex @code{__memx} AVR Named Address Spaces This is a 24-bit address space that linearizes flash and RAM: @@ -2727,7 +2719,8 @@ Use this attribute on the ARM, AVR, CR16, Epiphany, M32C, M32R/D, m68k, MeP, MIP RL78, RX and Xstormy16 ports to indicate that the specified function is an interrupt handler. The compiler will generate function entry and exit sequences suitable for use in an interrupt handler when this attribute -is present. +is present. With Epiphany targets it may also generate a special section with +code to initialize the interrupt vector table. Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S, MicroBlaze, and SH processors can be specified via the @code{interrupt_handler} attribute. @@ -2746,6 +2739,48 @@ Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT and UNDEF@. On ARMv7-M the interrupt type is ignored, and the attribute means the function may be called with a word aligned stack pointer. +On Epiphany targets one or more optional parameters can be added like this: + +@smallexample +void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); +@end smallexample + +Permissible values for these parameters are: @w{@code{reset}}, +@w{@code{software_exception}}, @w{@code{page_miss}}, +@w{@code{timer0}}, @w{@code{timer1}}, @w{@code{message}}, +@w{@code{dma0}}, @w{@code{dma1}}, @w{@code{wand}} and @w{@code{swi}}. +Multiple parameters indicate that multiple entries in the interrupt +vector table should be initialized for this function, i.e. for each +parameter @w{@var{name}}, a jump to the function will be emitted in +the section @w{ivt_entry_@var{name}}. The parameter(s) may be omitted +entirely, in which case no interrupt vector table entry will be provided. + +Note, on Epiphany targets, interrupts are enabled inside the function +unless the @code{disinterrupt} attribute is also specified. + +On Epiphany targets, you can also use the following attribute to +modify the behavior of an interrupt handler: +@table @code +@item forwarder_section +@cindex @code{forwarder_section} attribute +The interrupt handler may be in external memory which cannot be +reached by a branch instruction, so generate a local memory trampoline +to transfer control. The single parameter identifies the section where +the trampoline will be placed. +@end table + +The following examples are all valid uses of these attributes on +Epiphany targets: +@smallexample +void __attribute__ ((interrupt)) universal_handler (); +void __attribute__ ((interrupt ("dma1"))) dma1_handler (); +void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); +void __attribute__ ((interrupt ("timer0"), disinterrupt)) + fast_timer_handler (); +void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp"))) + external_dma_handler (); +@end smallexample + On MIPS targets, you can use the following attributes to modify the behavior of an interrupt handler: @table @code @@ -8817,7 +8852,18 @@ might increase delay time. @code{ticks} must be a compile time integer constant; delays with a variable number of cycles are not supported. @smallexample - unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val) +char __builtin_avr_flash_segment (const __memx void*) +@end smallexample + +@noindent +This built-in takes a byte address to the 24-bit +@ref{AVR Named Address Spaces,address space} @code{__memx} and returns +the number of the flash segment (the 64 KiB chunk) where the address +points to. Counting starts at @code{0}. +If the address does not point to flash memory, return @code{-1}. + +@smallexample +unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val) @end smallexample @noindent diff --git a/gcc/doc/gimple.texi b/gcc/doc/gimple.texi index b75dc7278a1..fa31eb00ea0 100644 --- a/gcc/doc/gimple.texi +++ b/gcc/doc/gimple.texi @@ -1963,10 +1963,6 @@ Set @code{CLAUSES} to be the clauses associated with @code{OMP_SINGLE} @code{G}. @subsection @code{GIMPLE_PHI} @cindex @code{GIMPLE_PHI} -@deftypefn {GIMPLE function} gimple make_phi_node (tree var, int len) -Build a @code{PHI} node with len argument slots for variable var. -@end deftypefn - @deftypefn {GIMPLE function} unsigned gimple_phi_capacity (gimple g) Return the maximum number of arguments supported by @code{GIMPLE_PHI} @code{G}. @end deftypefn diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 7aa1553d80f..53109ba0d64 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -2525,7 +2525,10 @@ on a simulator as described at @uref{http://gcc.gnu.org/simtest-howto.html}. @section How can you run the testsuite on selected tests? In order to run sets of tests selectively, there are targets -@samp{make check-gcc} and @samp{make check-g++} +@samp{make check-gcc} and language specific @samp{make check-c}, +@samp{make check-c++}, @samp{make check-fortran}, @samp{make check-java}, +@samp{make check-ada}, @samp{make check-objc}, @samp{make check-obj-c++}, +@samp{make check-lto} in the @file{gcc} subdirectory of the object directory. You can also just run @samp{make check} in a subdirectory of the object directory. @@ -3001,7 +3004,7 @@ information are. @item @uref{#amd64-x-solaris210,,amd64-*-solaris2.10} @item -@uref{#arm-x-elf,,arm-*-elf} +@uref{#arm-x-eabi,,arm-*-eabi} @item @uref{#avr,,avr} @item @@ -3216,11 +3219,11 @@ This is a synonym for @samp{x86_64-*-solaris2.1[0-9]*}. @html <hr /> @end html -@heading @anchor{arm-x-elf}arm-*-elf +@heading @anchor{arm-x-eabi}arm-*-eabi ARM-family processors. Subtargets that use the ELF object format require GNU binutils 2.13 or newer. Such subtargets include: -@code{arm-*-freebsd}, @code{arm-*-netbsdelf}, @code{arm-*-*linux} -and @code{arm-*-rtems}. +@code{arm-*-netbsdelf}, @code{arm-*-*linux-gnueabi} +and @code{arm-*-rtemseabi}. @html <hr /> @@ -4611,7 +4614,7 @@ Presently Windows for Itanium is not supported. @subheading Windows CE -Windows CE is supported as a target only on ARM (arm-wince-pe), Hitachi +Windows CE is supported as a target only on Hitachi SuperH (sh-wince-pe), and MIPS (mips-wince-pe). @subheading Other Windows Platforms diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 0889ca88d3c..42285a7e565 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -356,8 +356,8 @@ Objective-C and Objective-C++ Dialects}. -fcompare-elim -fcprop-registers -fcrossjumping @gol -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules @gol -fcx-limited-range @gol --fdata-sections -fdce -fdce -fdelayed-branch @gol --fdelete-null-pointer-checks -fdse -fdevirtualize -fdse @gol +-fdata-sections -fdce -fdelayed-branch @gol +-fdelete-null-pointer-checks -fdevirtualize -fdse @gol -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects @gol -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=@var{style} @gol -fforward-propagate -ffp-contract=@var{style} -ffunction-sections @gol @@ -371,7 +371,7 @@ Objective-C and Objective-C++ Dialects}. -fira-loop-pressure -fno-ira-share-save-slots @gol -fno-ira-share-spill-slots -fira-verbose=@var{n} @gol -fivopts -fkeep-inline-functions -fkeep-static-consts @gol --floop-block -floop-flatten -floop-interchange -floop-strip-mine @gol +-floop-block -floop-interchange -floop-strip-mine @gol -floop-parallelize-all -flto -flto-compression-level @gol -flto-partition=@var{alg} -flto-report -fmerge-all-constants @gol -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves @gol @@ -886,7 +886,9 @@ See RS/6000 and PowerPC Options. -mprefergot -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol -mdivsi3_libfunc=@var{name} -mfixed-range=@var{register-range} @gol -madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol --maccumulate-outgoing-args -minvalid-symbols -msoft-atomic} +-maccumulate-outgoing-args -minvalid-symbols -msoft-atomic @gol +-mbranch-cost=@var{num} -mcbranchdi -mcmpeqdi -mfused-madd -mpretend-cmove @gol +-menable-tas} @emph{Solaris 2 Options} @gccoptlist{-mimpure-text -mno-impure-text @gol @@ -2128,11 +2130,11 @@ This information is generally only useful to the G++ development team. @item -fstrict-enums @opindex fstrict-enums Allow the compiler to optimize using the assumption that a value of -enumeration type can only be one of the values of the enumeration (as +enumerated type can only be one of the values of the enumeration (as defined in the C++ standard; basically, a value that can be represented in the minimum number of bits needed to represent all the enumerators). This assumption may not be valid if the program uses a -cast to convert an arbitrary integer value to the enumeration type. +cast to convert an arbitrary integer value to the enumerated type. @item -ftemplate-depth=@var{n} @opindex ftemplate-depth @@ -2375,14 +2377,14 @@ Instantiations of these templates may be mangled incorrectly. @end itemize -It also warns psABI related changes. The known psABI changes at this +It also warns about psABI-related changes. The known psABI changes at this point include: @itemize @bullet @item -For SYSV/x86-64, when passing union with long double, it is changed to -pass in memory as specified in psABI. For example: +For SysV/x86-64, unions with @code{long double} members are +passed in memory as specified in psABI. For example: @smallexample union U @{ @@ -2392,7 +2394,7 @@ union U @{ @end smallexample @noindent -@code{union U} will always be passed in memory. +@code{union U} is always passed in memory. @end itemize @@ -3738,20 +3740,20 @@ Possibly useful when higher levels do not warn but -fstrict-aliasing still breaks the code, as it has very few false negatives. However, it has many false positives. Warns for all pointer conversions between possibly incompatible types, -even if never dereferenced. Runs in the frontend only. +even if never dereferenced. Runs in the front end only. Level 2: Aggressive, quick, not too precise. May still have many false positives (not as many as level 1 though), and few false negatives (but possibly more than level 1). Unlike level 1, it only warns when an address is taken. Warns about -incomplete types. Runs in the frontend only. +incomplete types. Runs in the front end only. Level 3 (default for @option{-Wstrict-aliasing}): Should have very few false positives and few false negatives. Slightly slower than levels 1 or 2 when optimization is enabled. -Takes care of the common pun+dereference pattern in the frontend: +Takes care of the common pun+dereference pattern in the front end: @code{*(int*)&some_float}. -If optimization is enabled, it also runs in the backend, where it deals +If optimization is enabled, it also runs in the back end, where it deals with multiple statement cases using flow-sensitive points-to information. Only warns when the converted pointer is dereferenced. Does not warn about incomplete types. @@ -4212,7 +4214,7 @@ while} statement. This warning is also enabled by @option{-Wextra}. @item -Wenum-compare @opindex Wenum-compare @opindex Wno-enum-compare -Warn about a comparison between values of different enum types. In C++ +Warn about a comparison between values of different enumerated types. In C++ this warning is enabled by default. In C this warning is enabled by @option{-Wall}. @@ -4223,7 +4225,7 @@ Warn if a @code{goto} statement or a @code{switch} statement jumps forward across the initialization of a variable, or jumps backward to a label after the variable has been initialized. This only warns about variables that are initialized when they are declared. This warning is -only supported for C and Objective C; in C++ this sort of branch is an +only supported for C and Objective-C; in C++ this sort of branch is an error in any case. @option{-Wjump-misses-init} is included in @option{-Wc++-compat}. It @@ -5432,7 +5434,7 @@ Dump after post-reload optimizations. @itemx -fdump-rtl-pro_and_epilogue @opindex fdump-rtl-pro_and_epilogue -Dump after generating the function pro and epilogues. +Dump after generating the function prologues and epilogues. @item -fdump-rtl-regmove @opindex fdump-rtl-regmove @@ -5483,7 +5485,7 @@ architectures. @item -fdump-rtl-stack @opindex fdump-rtl-stack -Dump after conversion from GCC's "flat register file" registers to the +Dump after conversion from GCC's ``flat register file'' registers to the x87's stack-like registers. This pass is only run on x86 variants. @item -fdump-rtl-subreg1 @@ -6332,7 +6334,7 @@ whether a target machine supports this flag. @xref{Registers,,Register Usage, gccint, GNU Compiler Collection (GCC) Internals}. Starting with GCC version 4.6, the default setting (when not optimizing for -size) for 32-bit Linux x86 and 32-bit Darwin x86 targets has been changed to +size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86 targets has been changed to @option{-fomit-frame-pointer}. The default can be reverted to @option{-fno-omit-frame-pointer} by configuring GCC with the @option{--enable-frame-pointer} configure option. @@ -6739,7 +6741,7 @@ Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. @item -free @opindex free Attempt to remove redundant extension instructions. This is especially -helpful for the x86-64 architecture which implicitly zero-extends in 64-bit +helpful for the x86-64 architecture, which implicitly zero-extends in 64-bit registers after writing to their lower 32-bit half. Enabled for x86 at levels @option{-O2}, @option{-O3}. @@ -6759,56 +6761,65 @@ optimization. Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. @item -fira-algorithm=@var{algorithm} -Use specified coloring algorithm for the integrated register -allocator. The @var{algorithm} argument should be @code{priority} or -@code{CB}. The first algorithm specifies Chow's priority coloring, -the second one specifies Chaitin-Briggs coloring. The second -algorithm can be unimplemented for some architectures. If it is -implemented, it is the default because Chaitin-Briggs coloring as a -rule generates a better code. +Use the specified coloring algorithm for the integrated register +allocator. The @var{algorithm} argument can be @samp{priority}, which +specifies Chow's priority coloring, or @samp{CB}, which specifies +Chaitin-Briggs coloring. Chaitin-Briggs coloring is not implemented +for all architectures, but for those targets that do support it, it is +the default because it generates better code. @item -fira-region=@var{region} Use specified regions for the integrated register allocator. The -@var{region} argument should be one of @code{all}, @code{mixed}, or -@code{one}. The first value means using all loops as register -allocation regions, the second value which is enabled by default when -compiling with optimization for speed (@option{-O}, @option{-O2}, -@dots{}) means using all loops except for loops with small register -pressure as the regions, and third one which is enabled by default for -@option{-Os} or @option{-O0} means using all function as a single -region. The first value can give best result for machines with small -size and irregular register set, the third one results in faster and -generates decent code and the smallest size code, and the second value -usually give the best results in most cases and for most -architectures. +@var{region} argument should be one of the following: + +@table @samp + +@item all +Use all loops as register allocation regions. +This can give the best results for machines with a small and/or +irregular register set. + +@item mixed +Use all loops except for loops with small register pressure +as the regions. This value usually gives +the best results in most cases and for most architectures, +and is enabled by default when compiling with optimization for speed +(@option{-O}, @option{-O2}, @dots{}). + +@item one +Use all functions as a single region. +This typically results in the smallest code size, and is enabled by default for +@option{-Os} or @option{-O0}. + +@end table @item -fira-loop-pressure @opindex fira-loop-pressure -Use IRA to evaluate register pressure in loops for decision to move -loop invariants. Usage of this option usually results in generation -of faster and smaller code on machines with big register files (>= 32 -registers) but it can slow compiler down. +Use IRA to evaluate register pressure in loops for decisions to move +loop invariants. This option usually results in generation +of faster and smaller code on machines with large register files (>= 32 +registers), but it can slow the compiler down. This option is enabled at level @option{-O3} for some targets. @item -fno-ira-share-save-slots @opindex fno-ira-share-save-slots -Switch off sharing stack slots used for saving call used hard -registers living through a call. Each hard register will get a -separate stack slot and as a result function stack frame will be -bigger. +Disable sharing of stack slots used for saving call-used hard +registers living through a call. Each hard register gets a +separate stack slot, and as a result function stack frames are +larger. @item -fno-ira-share-spill-slots @opindex fno-ira-share-spill-slots -Switch off sharing stack slots allocated for pseudo-registers. Each -pseudo-register that did not get a hard register will get a separate -stack slot and as a result function stack frame will be bigger. +Disable sharing of stack slots allocated for pseudo-registers. Each +pseudo-register that does not get a hard register gets a separate +stack slot, and as a result function stack frames are larger. @item -fira-verbose=@var{n} @opindex fira-verbose -Set up how verbose dump file for the integrated register allocator -will be. Default value is 5. If the value is greater or equal to 10, -the dump file will be stderr as if the value were @var{n} minus 10. +Control the verbosity of the dump file for the integrated register allocator. +The default value is 5. If the value @var{n} is greater or equal to 10, +the dump output is sent to stderr using the same format as @var{n} minus 10. @item -fdelayed-branch @opindex fdelayed-branch @@ -7277,12 +7288,6 @@ GIMPLE -> GRAPHITE -> GIMPLE transformation. Some minimal optimizations are also performed by the code generator CLooG, like index splitting and dead code elimination in loops. -@item -floop-flatten -@opindex floop-flatten -Removes the loop nesting structure: transforms the loop nest into a -single loop. This transformation can be useful to vectorize all the -levels of the loop nest. - @item -floop-parallelize-all @opindex floop-parallelize-all Use the Graphite data dependence analysis to identify loops that can @@ -8599,7 +8604,7 @@ The limit specifying really large functions. For functions larger than this limit after inlining, inlining is constrained by @option{--param large-function-growth}. This parameter is useful primarily to avoid extreme compilation time caused by non-linear algorithms used by the -backend. +back end. The default value is 2700. @item large-function-growth @@ -8716,7 +8721,7 @@ of huge functions. The default value is 30. @item max-tail-merge-comparisons The maximum amount of similar bbs to compare a bb with. This is used to -avoid quadratic behaviour in tree tail merging. The default value is 10. +avoid quadratic behavior in tree tail merging. The default value is 10. @item max-tail-merge-iterations The maximum amount of iterations of the pass over the function. This is used to @@ -9103,28 +9108,28 @@ function will not be done and optimizations depending on it will be disabled. The default maximum SCC size is 10000. @item ira-max-loops-num -IRA uses a regional register allocation by default. If a function -contains loops more than number given by the parameter, only at most -given number of the most frequently executed loops will form regions -for the regional register allocation. The default value of the +IRA uses regional register allocation by default. If a function +contains more loops than the number given by this parameter, only at most +the given number of the most frequently-executed loops form regions +for regional register allocation. The default value of the parameter is 100. -@item ira-max-conflict-table-size -Although IRA uses a sophisticated algorithm of compression conflict -table, the table can be still big for huge functions. If the conflict -table for a function could be more than size in MB given by the -parameter, the conflict table is not built and faster, simpler, and -lower quality register allocation algorithm will be used. The -algorithm do not use pseudo-register conflicts. The default value of -the parameter is 2000. +@item ira-max-conflict-table-size +Although IRA uses a sophisticated algorithm to compress the conflict +table, the table can still require excessive amounts of memory for +huge functions. If the conflict table for a function could be more +than the size in MB given by this parameter, the register allocator +instead uses a faster, simpler, and lower-quality +algorithm that does not require building a pseudo-register conflict table. +The default value of the parameter is 2000. @item ira-loop-reserved-regs IRA can be used to evaluate more accurate register pressure in loops -for decision to move loop invariants (see @option{-O3}). The number -of available registers reserved for some other purposes is described -by this parameter. The default value of the parameter is 2 which is -minimal number of registers needed for execution of typical -instruction. This value is the best found from numerous experiments. +for decisions to move loop invariants (see @option{-O3}). The number +of available registers reserved for some other purposes is given +by this parameter. The default value of the parameter is 2, which is +the minimal number of registers needed by typical instructions. +This value is the best found from numerous experiments. @item loop-invariant-max-bbs-in-loop Loop invariant motion can be very expensive, both in compilation time and @@ -10585,7 +10590,7 @@ configurations this option is meaningless. @item -mno-sched-prolog @opindex mno-sched-prolog -Prevent the reordering of instructions in the function prolog, or the +Prevent the reordering of instructions in the function prologue, or the merging of those instruction with the instructions in the function's body. This means that all functions will start with a recognizable set of instructions (or in fact one of a choice from a small set of @@ -10666,7 +10671,7 @@ See @option{-mtune} for more information. @option{-mcpu=native} causes the compiler to auto-detect the CPU of the build computer. At present, this feature is only supported on -Linux, and not all architectures are recognised. If the auto-detect is +Linux, and not all architectures are recognized. If the auto-detect is unsuccessful the option has no effect. @item -mtune=@var{name} @@ -10689,7 +10694,7 @@ this option may change in future GCC versions as CPU models come and go. @option{-mtune=native} causes the compiler to auto-detect the CPU of the build computer. At present, this feature is only supported on -Linux, and not all architectures are recognised. If the auto-detect is +Linux, and not all architectures are recognized. If the auto-detect is unsuccessful the option has no effect. @item -march=@var{name} @@ -10707,7 +10712,7 @@ of the @option{-mcpu=} option. Permissible names are: @samp{armv2}, @option{-march=native} causes the compiler to auto-detect the architecture of the build computer. At present, this feature is only supported on -Linux, and not all architectures are recognised. If the auto-detect is +Linux, and not all architectures are recognized. If the auto-detect is unsuccessful the option has no effect. @item -mfpu=@var{name} @@ -10988,6 +10993,32 @@ memory and with the @code{MOVW} instruction. of program memory. @*@var{mcu}@tie{}= @code{atmega2560}, @code{atmega2561}. +@item avrxmega2 +``XMEGA'' devices with more than 8@tie{}KiB and up to 64@tie{}KiB +of program memory. +@*@var{mcu}@tie{}= @code{atxmega16a4}, @code{atxmega16d4}, +@dots{} + +@item avrxmega4 +``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB +of program memory. +@*@var{mcu}@tie{}= @code{atxmega64a3}, @code{atxmega64d3}. + +@item avrxmega5 +``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB +of program memory and more than 64@tie{}KiB of RAM. +@*@var{mcu}@tie{}= @code{atxmega64a1}, @code{atxmega64a1u}. + +@item avrxmega6 +``XMEGA'' devices with more than 128@tie{}KiB of program memory. +@*@var{mcu}@tie{}= @code{atxmega128a3}, @code{atxmega192d3}, +@dots{} + +@item avrxmega7 +``XMEGA'' devices with more than 128@tie{}KiB of program memory and +more than 64@tie{}KiB of RAM. +@*@var{mcu}@tie{}= @code{atxmega128a1}, @code{atxmega128a1u}. + @end table @@ -11076,7 +11107,7 @@ byte of SP is always zero. @end table @subsubsection @code{EIND} and Devices with more than 128 Ki Bytes of Flash - +@cindex @code{EIND} Pointers in the implementation are 16@tie{}bits wide. The address of a function or label is represented as word address so that indirect jumps and calls can target any code address in the @@ -11096,12 +11127,6 @@ the compiler and are subject to some limitations: The compiler never sets @code{EIND}. @item -The startup code from libgcc never sets @code{EIND}. -Notice that startup code is a blend of code from libgcc and avr-libc. -For the impact of avr-libc on @code{EIND}, see the -@w{@uref{http://nongnu.org/avr-libc/user-manual,avr-libc user manual}}. - -@item The compiler uses @code{EIND} implicitely in @code{EICALL}/@code{EIJMP} instructions or might read @code{EIND} directly in order to emulate an indirect call/jump by means of a @code{RET} instruction. @@ -11113,18 +11138,47 @@ saved/restored in function or interrupt service routine prologue/epilogue. @item -It is legitimate for user-specific startup code to set up @code{EIND} -early, for example by means of initialization code located in -section @code{.init3}. Such code runs prior to general startup code -that initializes RAM and calls constructors. - -@item For indirect calls to functions and computed goto, the linker will generate @emph{stubs}. Stubs are jump pads sometimes also called @emph{trampolines}. Thus, the indirect call/jump will jump to such a stub. The stub contains a direct jump to the desired address. @item +The default linker script is arranged for code with @code{EIND = 0}. +If code is supposed to work for a setup with @code{EIND != 0}, a custom +linker script has to be used in order to place the sections whose +name start with @code{.trampolines} into the segment where @code{EIND} +points to. + +@item +The startup code from libgcc never sets @code{EIND}. +Notice that startup code is a blend of code from libgcc and AVR-Libc. +For the impact of AVR-Libc on @code{EIND}, see the +@w{@uref{http://nongnu.org/avr-libc/user-manual,AVR-Libc user manual}}. + +@item +It is legitimate for user-specific startup code to set up @code{EIND} +early, for example by means of initialization code located in +section @code{.init3}. Such code runs prior to general startup code +that initializes RAM and calls constructors, but after the bit +of startup code from AVR-Libc that sets @code{EIND} to the segment +where the vector table is located. +@example +#include <avr/io.h> + +static void +__attribute__ ((section (".init3"), naked, used, no_instrument_function)) +init3_set_eind (void) +@{ + __asm volatile ("ldi r24, pm_hh8(__trampolines_start)" "\n\t" + "out %i0, r24" :: "n" (&EIND) : "r24", "memory"); +@} +@end example + +@noindent +The @code{__trampolines_start} symbol is defined in the linker script. + +@item Stubs will be generated automatically by the linker if the following two conditions are met: @itemize @minus @@ -11154,13 +11208,6 @@ tables you can specify the @option{-fno-jump-tables} command-line option. @end itemize @item -The default linker script is arranged for code with @code{EIND = 0}. -If code is supposed to work for a setup with @code{EIND != 0}, a custom -linker script has to be used in order to place the sections whose -name start with @code{.trampolines} into the segment where @code{EIND} -points to. - -@item Jumping to non-symbolic addresses like so is @emph{not} supported: @example @@ -11188,6 +11235,48 @@ and the application be linked with @code{-Wl,--defsym,func_4=0x4}. Alternatively, @code{func_4} can be defined in the linker script. @end itemize +@subsubsection Handling of the @code{RAMPD}, @code{RAMPX}, @code{RAMPY} and @code{RAMPZ} Special Function Registers +@cindex @code{RAMPD} +@cindex @code{RAMPX} +@cindex @code{RAMPY} +@cindex @code{RAMPZ} +Some AVR devices support memories larger than the 64@tie{}KiB range +that can be accessed with 16-bit pointers. To access memory locations +outside this 64@tie{}KiB range, the contentent of a @code{RAMP} +register is used as high part of the address: +The @code{X}, @code{Y}, @code{Z} address register is concatenated +with the @code{RAMPX}, @code{RAMPY}, @code{RAMPZ} special function +register, respectively, to get a wide address. Similarly, +@code{RAMPD} is used together with direct addressing. + +@itemize +@item +The startup code initializes the @code{RAMP} special function +registers with zero. + +@item +If a @ref{AVR Named Address Spaces,named address space} other than +generic or @code{__flash} is used, then @code{RAMPZ} will be set +as needed before the operation. + +@item +If the device supports RAM larger than 64@tie{KiB} and the compiler +needs to change @code{RAMPZ} to accomplish an operation, @code{RAMPZ} +will be reset to zero after the operation. + +@item +If the device comes with a specific @code{RAMP} register, the ISR +prologue/epilogue will save/restore that SFR and initialize it with +zero in case the ISR code might (implicitly) use it. + +@item +RAM larger than 64@tie{KiB} is not supported by avr-gcc. +If you use inline assembler to read from locations outside the +16-bit address range and change one of the @code{RAMP} registers, +you must reset it to zero after the access. + +@end itemize + @subsubsection AVR Built-in Macros avr-gcc defines several built-in macros so that the user code can test @@ -11210,12 +11299,10 @@ The built-in macros' names follow the scheme @code{__AVR_@var{Device}__} where @var{Device} is the device name as from the AVR user manual. The difference between @var{Device} in the built-in macro and @var{device} in -@code{-mmcu=@var{device}} is that the latter is always lower case. +@code{-mmcu=@var{device}} is that the latter is always lowercase. -@item __AVR_HAVE_RAMPZ__ @item __AVR_HAVE_ELPM__ -The device has the @code{RAMPZ} special function register and thus the -@code{ELPM} instruction. +The device has the the @code{ELPM} instruction. @item __AVR_HAVE_ELPMX__ The device has the @code{ELPM R@var{n},Z} and @code{ELPM @@ -11240,7 +11327,7 @@ memory and if @code{-mshort-calls} is not set. @item __AVR_HAVE_EIJMP_EICALL__ @item __AVR_3_BYTE_PC__ The device has the @code{EIJMP} and @code{EICALL} instructions. -This is the case for devices with at least 256@tie{}KiB of program memory. +This is the case for devices with more than 128@tie{}KiB of program memory. This also means that the program counter (PC) is 3@tie{}bytes wide. @@ -11253,6 +11340,13 @@ with up to 128@tie{}KiB of program memory. The stack pointer (SP) is respectively 8 or 16 bits wide. The definition of these macros is affected by @code{-mtiny-stack}. +@item __AVR_HAVE_RAMPD__ +@item __AVR_HAVE_RAMPX__ +@item __AVR_HAVE_RAMPY__ +@item __AVR_HAVE_RAMPZ__ +The device has the @code{RAMPD}, @code{RAMPX}, @code{RAMPY}, +@code{RAMPZ} special function register, respectively. + @item __NO_INTERRUPTS__ This macro reflects the @code{-mno-interrupts} command line option. @@ -11486,11 +11580,11 @@ assembly code. Permissible names are: @samp{c62x}, @item -mbig-endian @opindex mbig-endian -Generate code for a big endian target. +Generate code for a big-endian target. @item -mlittle-endian @opindex mlittle-endian -Generate code for a little endian target. This is the default. +Generate code for a little-endian target. This is the default. @item -msim @opindex msim @@ -12973,137 +13067,203 @@ These @samp{-m} options are defined for the i386 and x86-64 family of computers: @table @gcctabopt -@item -mtune=@var{cpu-type} -@opindex mtune -Tune to @var{cpu-type} everything applicable about the generated code, except -for the ABI and the set of available instructions. The choices for -@var{cpu-type} are: -@table @emph -@item generic -Produce code optimized for the most common IA32/@/AMD64/@/EM64T processors. -If you know the CPU on which your code will run, then you should use -the corresponding @option{-mtune} option instead of -@option{-mtune=generic}. But, if you do not know exactly what CPU users -of your application will have, then you should use this option. -As new processors are deployed in the marketplace, the behavior of this -option will change. Therefore, if you upgrade to a newer version of -GCC, the code generated option will change to reflect the processors -that were most common when that version of GCC was released. +@item -march=@var{cpu-type} +@opindex march +Generate instructions for the machine type @var{cpu-type}. In contrast to +@option{-mtune=@var{cpu-type}}, which merely tunes the generated code +for the specified @var{cpu-type}, @option{-march=@var{cpu-type}} allows GCC +to generate code that may not run at all on processors other than the one +indicated. Specifying @option{-march=@var{cpu-type}} implies +@option{-mtune=@var{cpu-type}}. -There is no @option{-march=generic} option because @option{-march} -indicates the instruction set the compiler can use, and there is no -generic instruction set applicable to all processors. In contrast, -@option{-mtune} indicates the processor (or, in this case, collection of -processors) for which the code is optimized. +The choices for @var{cpu-type} are: + +@table @samp @item native -This selects the CPU to tune for at compilation time by determining -the processor type of the compiling machine. Using @option{-mtune=native} -will produce code optimized for the local machine under the constraints -of the selected instruction set. Using @option{-march=native} will -enable all instruction subsets supported by the local machine (hence -the result might not run on different machines). +This selects the CPU to generate code for at compilation time by determining +the processor type of the compiling machine. Using @option{-march=native} +enables all instruction subsets supported by the local machine (hence +the result might not run on different machines). Using @option{-mtune=native} +produces code optimized for the local machine under the constraints +of the selected instruction set. + @item i386 -Original Intel's i386 CPU@. +Original Intel i386 CPU@. + @item i486 -Intel's i486 CPU@. (No scheduling is implemented for this chip.) -@item i586, pentium +Intel i486 CPU@. (No scheduling is implemented for this chip.) + +@item i586 +@itemx pentium Intel Pentium CPU with no MMX support. + @item pentium-mmx -Intel PentiumMMX CPU based on Pentium core with MMX instruction set support. +Intel Pentium MMX CPU, based on Pentium core with MMX instruction set support. + @item pentiumpro -Intel PentiumPro CPU@. +Intel Pentium Pro CPU@. + @item i686 -Same as @code{generic}, but when used as @code{march} option, PentiumPro -instruction set will be used, so the code will run on all i686 family chips. +When used with @option{-march}, the Pentium Pro +instruction set is used, so the code runs on all i686 family chips. +When used with @option{-mtune}, it has the same meaning as @samp{generic}. + @item pentium2 -Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support. -@item pentium3, pentium3m -Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set +Intel Pentium II CPU, based on Pentium Pro core with MMX instruction set support. + +@item pentium3 +@itemx pentium3m +Intel Pentium III CPU, based on Pentium Pro core with MMX and SSE instruction +set support. + @item pentium-m -Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set -support. Used by Centrino notebooks. -@item pentium4, pentium4m -Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support. +Intel Pentium M; low-power version of Intel Pentium III CPU +with MMX, SSE and SSE2 instruction set support. Used by Centrino notebooks. + +@item pentium4 +@itemx pentium4m +Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set support. + @item prescott -Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction +Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and SSE3 instruction set support. + @item nocona -Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE, +Improved version of Intel Pentium 4 CPU with 64-bit extensions, MMX, SSE, SSE2 and SSE3 instruction set support. + @item core2 -Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3 +Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3 instruction set support. + @item corei7 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support. + @item corei7-avx Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction set support. + @item core-avx-i Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and F16C instruction set support. + @item atom Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3 instruction set support. + @item k6 AMD K6 CPU with MMX instruction set support. -@item k6-2, k6-3 + +@item k6-2 +@itemx k6-3 Improved versions of AMD K6 CPU with MMX and 3DNow!@: instruction set support. -@item athlon, athlon-tbird + +@item athlon +@itemx athlon-tbird AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow!@: and SSE prefetch instructions support. -@item athlon-4, athlon-xp, athlon-mp + +@item athlon-4 +@itemx athlon-xp +@itemx athlon-mp Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow!@: and full SSE instruction set support. -@item k8, opteron, athlon64, athlon-fx -AMD K8 core based CPUs with x86-64 instruction set support. (This supersets -MMX, SSE, SSE2, 3DNow!, enhanced 3DNow!@: and 64-bit instruction set extensions.) -@item k8-sse3, opteron-sse3, athlon64-sse3 -Improved versions of k8, opteron and athlon64 with SSE3 instruction set support. -@item amdfam10, barcelona -AMD Family 10h core based CPUs with x86-64 instruction set support. (This + +@item k8 +@itemx opteron +@itemx athlon64 +@itemx athlon-fx +Processors based on the AMD K8 core with x86-64 instruction set support, +including the AMD Opteron, Athlon 64, and Athlon 64 FX processors. +(This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow!@: and 64-bit +instruction set extensions.) + +@item k8-sse3 +@itemx opteron-sse3 +@itemx athlon64-sse3 +Improved versions of AMD K8 cores with SSE3 instruction set support. + +@item amdfam10 +@itemx barcelona +CPUs based on AMD Family 10h cores with x86-64 instruction set support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set extensions.) + @item bdver1 -AMD Family 15h core based CPUs with x86-64 instruction set support. (This +CPUs based on AMD Family 15h cores with x86-64 instruction set support. (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, -SSSE3, SSE4.1, SSE4.2, 3DNow!, enhanced 3DNow!, ABM and 64-bit -instruction set extensions.) +SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.) +@item bdver2 +AMD Family 15h core based CPUs with x86-64 instruction set support. (This +supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, +SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set +extensions.) + @item btver1 -AMD Family 14h core based CPUs with x86-64 instruction set support. (This +CPUs based on AMD Family 14h cores with x86-64 instruction set support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 64-bit instruction set extensions.) + @item winchip-c6 -IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction +IDT WinChip C6 CPU, dealt in same way as i486 with additional MMX instruction set support. + @item winchip2 -IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3DNow!@: +IDT WinChip 2 CPU, dealt in same way as i486 with additional MMX and 3DNow!@: instruction set support. + @item c3 -Via C3 CPU with MMX and 3DNow!@: instruction set support. (No scheduling is +VIA C3 CPU with MMX and 3DNow!@: instruction set support. (No scheduling is implemented for this chip.) + @item c3-2 -Via C3-2 CPU with MMX and SSE instruction set support. (No scheduling is +VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set support. +(No scheduling is implemented for this chip.) + @item geode -Embedded AMD CPU with MMX and 3DNow!@: instruction set support. +AMD Geode embedded processor with MMX and 3DNow!@: instruction set support. @end table -While picking a specific @var{cpu-type} will schedule things appropriately -for that particular chip, the compiler will not generate any code that -does not run on the default machine type without the @option{-march=@var{cpu-type}} -option being used. For example, if GCC is configured for i686-pc-linux-gnu -then @option{-mtune=pentium4} will generate code that is tuned for Pentium4 -but will still run on i686 machines. +@item -mtune=@var{cpu-type} +@opindex mtune +Tune to @var{cpu-type} everything applicable about the generated code, except +for the ABI and the set of available instructions. +While picking a specific @var{cpu-type} schedules things appropriately +for that particular chip, the compiler does not generate any code that +cannot run on the default machine type unless you use a +@option{-march=@var{cpu-type}} option. +For example, if GCC is configured for i686-pc-linux-gnu +then @option{-mtune=pentium4} generates code that is tuned for Pentium 4 +but still runs on i686 machines. + +The choices for @var{cpu-type} are the same as for @option{-march}. +In addition, @option{-mtune} supports an extra choice for @var{cpu-type}: -@item -march=@var{cpu-type} -@opindex march -Generate instructions for the machine type @var{cpu-type}. The choices -for @var{cpu-type} are the same as for @option{-mtune}. Moreover, -specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}. +@table @samp +@item generic +Produce code optimized for the most common IA32/@/AMD64/@/EM64T processors. +If you know the CPU on which your code will run, then you should use +the corresponding @option{-mtune} or @option{-march} option instead of +@option{-mtune=generic}. But, if you do not know exactly what CPU users +of your application will have, then you should use this option. + +As new processors are deployed in the marketplace, the behavior of this +option will change. Therefore, if you upgrade to a newer version of +GCC, code generation controlled by this option will change to reflect +the processors +that are most common at the time that version of GCC is released. + +There is no @option{-march=generic} option because @option{-march} +indicates the instruction set the compiler can use, and there is no +generic instruction set applicable to all processors. In contrast, +@option{-mtune} indicates the processor (or, in this case, collection of +processors) for which the code is optimized. +@end table @item -mcpu=@var{cpu-type} @opindex mcpu @@ -13126,14 +13286,15 @@ This is the default choice for i386 compiler. @item sse Use scalar floating-point instructions present in the SSE instruction set. -This instruction set is supported by Pentium3 and newer chips, in the AMD line -by Athlon-4, Athlon-xp and Athlon-mp chips. The earlier version of SSE +This instruction set is supported by Pentium III and newer chips, +and in the AMD line +by Athlon-4, Athlon XP and Athlon MP chips. The earlier version of the SSE instruction set supports only single-precision arithmetic, thus the double and extended-precision arithmetic are still done using 387. A later version, present -only in Pentium4 and the future AMD x86-64 chips, supports double-precision +only in Pentium 4 and AMD x86-64 chips, supports double-precision arithmetic too. -For the i386 compiler, you need to use @option{-march=@var{cpu-type}}, @option{-msse} +For the i386 compiler, you must use @option{-march=@var{cpu-type}}, @option{-msse} or @option{-msse2} switches to enable SSE extensions and make this option effective. For the x86-64 compiler, these extensions are enabled by default. @@ -13146,17 +13307,17 @@ This is the default choice for the x86-64 compiler. @item sse,387 @itemx sse+387 @itemx both -Attempt to utilize both instruction sets at once. This effectively double the -amount of available registers and on chips with separate execution units for +Attempt to utilize both instruction sets at once. This effectively doubles the +amount of available registers, and on chips with separate execution units for 387 and SSE the execution resources too. Use this option with care, as it is still experimental, because the GCC register allocator does not model separate -functional units well resulting in instable performance. +functional units well, resulting in unstable performance. @end table @item -masm=@var{dialect} @opindex masm=@var{dialect} -Output asm instructions using selected @var{dialect}. Supported -choices are @samp{intel} or @samp{att} (the default one). Darwin does +Output assembly instructions using selected @var{dialect}. Supported +choices are @samp{intel} or @samp{att} (the default). Darwin does not support @samp{intel}. @item -mieee-fp @@ -13164,12 +13325,13 @@ not support @samp{intel}. @opindex mieee-fp @opindex mno-ieee-fp Control whether or not the compiler uses IEEE floating-point -comparisons. These handle correctly the case where the result of a +comparisons. These correctly handle the case where the result of a comparison is unordered. @item -msoft-float @opindex msoft-float Generate output containing library calls for floating point. + @strong{Warning:} the requisite libraries are not part of GCC@. Normally the facilities of the machine's usual C compiler are used, but this can't be done directly in cross-compilation. You must make your @@ -13198,8 +13360,8 @@ Some 387 emulators do not support the @code{sin}, @code{cos} and @code{sqrt} instructions for the 387. Specify this option to avoid generating those instructions. This option is the default on FreeBSD, OpenBSD and NetBSD@. This option is overridden when @option{-march} -indicates that the target CPU will always have an FPU and so the -instruction will not need emulation. As of revision 2.6.1, these +indicates that the target CPU always has an FPU and so the +instruction does not need emulation. These instructions are not generated unless you also use the @option{-funsafe-math-optimizations} switch. @@ -13210,15 +13372,15 @@ instructions are not generated unless you also use the Control whether GCC aligns @code{double}, @code{long double}, and @code{long long} variables on a two-word boundary or a one-word boundary. Aligning @code{double} variables on a two-word boundary -produces code that runs somewhat faster on a @samp{Pentium} at the +produces code that runs somewhat faster on a Pentium at the expense of more memory. On x86-64, @option{-malign-double} is enabled by default. @strong{Warning:} if you use the @option{-malign-double} switch, -structures containing the above types will be aligned differently than +structures containing the above types are aligned differently than the published application binary interface specifications for the 386 -and will not be binary compatible with structures in code compiled +and are not binary compatible with structures in code compiled without that switch. @item -m96bit-long-double @@ -13237,27 +13399,28 @@ to a 16-byte boundary by padding the @code{long double} with an additional 32-bit zero. In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as -its ABI specifies that @code{long double} is to be aligned on 16-byte boundary. +its ABI specifies that @code{long double} is aligned on 16-byte boundary. Notice that neither of these options enable any extra precision over the x87 standard of 80 bits for a @code{long double}. -@strong{Warning:} if you override the default value for your target ABI, the -structures and arrays containing @code{long double} variables will change -their size as well as function calling convention for function taking -@code{long double} will be modified. Hence they will not be binary -compatible with arrays or structures in code compiled without that switch. +@strong{Warning:} if you override the default value for your target ABI, this +changes the size of +structures and arrays containing @code{long double} variables, +as well as modifying the function calling convention for functions taking +@code{long double}. Hence they are not binary-compatible +with code compiled without that switch. -@item -mlarge-data-threshold=@var{number} -@opindex mlarge-data-threshold=@var{number} -When @option{-mcmodel=medium} is specified, the data greater than -@var{threshold} are placed in large data section. This value must be the -same across all object linked into the binary and defaults to 65535. +@item -mlarge-data-threshold=@var{threshold} +@opindex mlarge-data-threshold +When @option{-mcmodel=medium} is specified, data objects larger than +@var{threshold} are placed in the large data section. This value must be the +same across all objects linked into the binary, and defaults to 65535. @item -mrtd @opindex mrtd Use a different function-calling convention, in which functions that -take a fixed number of arguments return with the @code{ret} @var{num} +take a fixed number of arguments return with the @code{ret @var{num}} instruction, which pops their arguments while returning. This saves one instruction in the caller since there is no need to pop the arguments there. @@ -13273,10 +13436,10 @@ libraries compiled with the Unix compiler. Also, you must provide function prototypes for all functions that take variable numbers of arguments (including @code{printf}); -otherwise incorrect code will be generated for calls to those +otherwise incorrect code is generated for calls to those functions. -In addition, seriously incorrect code will result if you call a +In addition, seriously incorrect code results if you call a function with too many arguments. (Normally, extra arguments are harmlessly ignored.) @@ -13312,7 +13475,7 @@ Studio compilers until version 12. Later compiler versions (starting with Studio 12 Update@tie{}1) follow the ABI used by other x86 targets, which is the default on Solaris@tie{}10 and later. @emph{Only} use this option if you need to remain compatible with existing code produced by those -previous compiler versions or older versions of GCC. +previous compiler versions or older versions of GCC@. @item -mpc32 @itemx -mpc64 @@ -13335,15 +13498,15 @@ Setting the rounding of floating-point operations to less than the default 80 bits can speed some programs by 2% or more. Note that some mathematical libraries assume that extended-precision (80-bit) floating-point operations are enabled by default; routines in such libraries could suffer significant -loss of accuracy, typically through so-called "catastrophic cancellation", +loss of accuracy, typically through so-called ``catastrophic cancellation'', when this option is used to set the precision to less than extended precision. @item -mstackrealign @opindex mstackrealign Realign the stack at entry. On the Intel x86, the @option{-mstackrealign} -option will generate an alternate prologue and epilogue that realigns the +option generates an alternate prologue and epilogue that realigns the run-time stack if necessary. This supports mixing legacy codes that keep -a 4-byte aligned stack with modern codes that keep a 16-byte stack for +4-byte stack alignment with modern codes that keep 16-byte stack alignment for SSE compatibility. See also the attribute @code{force_align_arg_pointer}, applicable to individual functions. @@ -13357,9 +13520,9 @@ the default is 4 (16 bytes or 128 bits). @opindex mincoming-stack-boundary Assume the incoming stack is aligned to a 2 raised to @var{num} byte boundary. If @option{-mincoming-stack-boundary} is not specified, -the one specified by @option{-mpreferred-stack-boundary} will be used. +the one specified by @option{-mpreferred-stack-boundary} is used. -On Pentium and PentiumPro, @code{double} and @code{long double} values +On Pentium and Pentium Pro, @code{double} and @code{long double} values should be aligned to an 8-byte boundary (see @option{-malign-double}) or suffer significant run time performance penalties. On Pentium III, the Streaming SIMD Extension (SSE) data type @code{__m128} may not work @@ -13370,7 +13533,7 @@ must be as aligned as that required by any value stored on the stack. Further, every function must be generated such that it keeps the stack aligned. Thus calling a function compiled with a higher preferred stack boundary from a function compiled with a lower preferred stack -boundary will most likely misalign the stack. It is recommended that +boundary most likely misaligns the stack. It is recommended that libraries that use callbacks always use the default setting. This extra alignment does consume extra stack space, and generally @@ -13443,20 +13606,20 @@ preferred alignment to @option{-mpreferred-stack-boundary=2}. @opindex mno-3dnow These switches enable or disable the use of instructions in the MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, -FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, LZCNT or 3DNow! -@: extended instruction sets. +FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, LZCNT or 3DNow!@: +extended instruction sets. These extensions are also available as built-in functions: see @ref{X86 Built-in Functions}, for details of the functions enabled and disabled by these switches. -To have SSE/SSE2 instructions generated automatically from floating-point +To generate SSE/SSE2 instructions automatically from floating-point code (as opposed to 387 instructions), see @option{-mfpmath=sse}. GCC depresses SSEx instructions when @option{-mavx} is used. Instead, it generates new AVX instructions or AVX equivalence for all SSEx instructions when needed. -These options will enable GCC to use these extended instructions in +These options enable GCC to use these extended instructions in generated code, even without @option{-mfpmath=sse}. Applications that perform run-time CPU detection must compile separate files for each supported architecture, using the appropriate flags. In particular, @@ -13481,43 +13644,49 @@ in this case. @opindex mvzeroupper This option instructs GCC to emit a @code{vzeroupper} instruction before a transfer of control flow out of the function to minimize -AVX to SSE transition penalty as well as remove unnecessary zeroupper +the AVX to SSE transition penalty as well as remove unnecessary @code{zeroupper} intrinsics. @item -mcx16 @opindex mcx16 -This option will enable GCC to use CMPXCHG16B instruction in generated code. -CMPXCHG16B allows for atomic operations on 128-bit double quadword (or oword) -data types. This is useful for high resolution counters that could be updated +This option enables GCC to generate @code{CMPXCHG16B} instructions. +@code{CMPXCHG16B} allows for atomic operations on 128-bit double quadword +(or oword) data types. +This is useful for high-resolution counters that can be updated by multiple processors (or cores). This instruction is generated as part of atomic built-in functions: see @ref{__sync Builtins} or @ref{__atomic Builtins} for details. @item -msahf @opindex msahf -This option will enable GCC to use SAHF instruction in generated 64-bit code. -Early Intel CPUs with Intel 64 lacked LAHF and SAHF instructions supported -by AMD64 until introduction of Pentium 4 G1 step in December 2005. LAHF and -SAHF are load and store instructions, respectively, for certain status flags. -In 64-bit mode, SAHF instruction is used to optimize @code{fmod}, @code{drem} -or @code{remainder} built-in functions: see @ref{Other Builtins} for details. +This option enables generation of @code{SAHF} instructions in 64-bit code. +Early Intel Pentium 4 CPUs with Intel 64 support, +prior to the introduction of Pentium 4 G1 step in December 2005, +lacked the @code{LAHF} and @code{SAHF} instructions +which were supported by AMD64. +These are load and store instructions, respectively, for certain status flags. +In 64-bit mode, the @code{SAHF} instruction is used to optimize @code{fmod}, +@code{drem}, and @code{remainder} built-in functions; +see @ref{Other Builtins} for details. @item -mmovbe @opindex mmovbe -This option will enable GCC to use movbe instruction to implement +This option enables use of the @code{movbe} instruction to implement @code{__builtin_bswap32} and @code{__builtin_bswap64}. @item -mcrc32 @opindex mcrc32 -This option will enable built-in functions, @code{__builtin_ia32_crc32qi}, -@code{__builtin_ia32_crc32hi}. @code{__builtin_ia32_crc32si} and -@code{__builtin_ia32_crc32di} to generate the crc32 machine instruction. +This option enables built-in functions @code{__builtin_ia32_crc32qi}, +@code{__builtin_ia32_crc32hi}, @code{__builtin_ia32_crc32si} and +@code{__builtin_ia32_crc32di} to generate the @code{crc32} machine instruction. @item -mrecip @opindex mrecip -This option will enable GCC to use RCPSS and RSQRTSS instructions (and their -vectorized variants RCPPS and RSQRTPS) with an additional Newton-Raphson step -to increase precision instead of DIVSS and SQRTSS (and their vectorized +This option enables use of @code{RCPSS} and @code{RSQRTSS} instructions +(and their vectorized variants @code{RCPPS} and @code{RSQRTPS}) +with an additional Newton-Raphson step +to increase precision instead of @code{DIVSS} and @code{SQRTSS} +(and their vectorized variants) for single-precision floating-point arguments. These instructions are generated only when @option{-funsafe-math-optimizations} is enabled together with @option{-finite-math-only} and @option{-fno-trapping-math}. @@ -13525,8 +13694,8 @@ Note that while the throughput of the sequence is higher than the throughput of the non-reciprocal instruction, the precision of the sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994). -Note that GCC implements @code{1.0f/sqrtf(@var{x})} in terms of RSQRTSS -(or RSQRTPS) already with @option{-ffast-math} (or the above option +Note that GCC implements @code{1.0f/sqrtf(@var{x})} in terms of @code{RSQRTSS} +(or @code{RSQRTPS}) already with @option{-ffast-math} (or the above option combination), and doesn't need @option{-mrecip}. Also note that GCC emits the above sequence with additional Newton-Raphson step @@ -13536,26 +13705,47 @@ doesn't need @option{-mrecip}. @item -mrecip=@var{opt} @opindex mrecip=opt -This option allows to control which reciprocal estimate instructions -may be used. @var{opt} is a comma separated list of options, which may -be preceded by a @code{!} to invert the option: -@code{all}: enable all estimate instructions, -@code{default}: enable the default instructions, equivalent to @option{-mrecip}, -@code{none}: disable all estimate instructions, equivalent to @option{-mno-recip}, -@code{div}: enable the approximation for scalar division, -@code{vec-div}: enable the approximation for vectorized division, -@code{sqrt}: enable the approximation for scalar square root, -@code{vec-sqrt}: enable the approximation for vectorized square root. +This option controls which reciprocal estimate instructions +may be used. @var{opt} is a comma-separated list of options, which may +be preceded by a @samp{!} to invert the option: + +@table @samp +@item all +Enable all estimate instructions. + +@item default +Enable the default instructions, equivalent to @option{-mrecip}. + +@item none +Disable all estimate instructions, equivalent to @option{-mno-recip}. + +@item div +Enable the approximation for scalar division. -So for example, @option{-mrecip=all,!sqrt} would enable +@item vec-div +Enable the approximation for vectorized division. + +@item sqrt +Enable the approximation for scalar square root. + +@item vec-sqrt +Enable the approximation for vectorized square root. +@end table + +So, for example, @option{-mrecip=all,!sqrt} enables all of the reciprocal approximations, except for square root. @item -mveclibabi=@var{type} @opindex mveclibabi Specifies the ABI type to use for vectorizing intrinsics using an -external library. Supported types are @code{svml} for the Intel short -vector math library and @code{acml} for the AMD math core library style -of interfacing. GCC will currently emit calls to @code{vmldExp2}, +external library. Supported values for @var{type} are @samp{svml} +for the Intel short +vector math library and @samp{acml} for the AMD math core library. +To use this option, both @option{-ftree-vectorize} and +@option{-funsafe-math-optimizations} have to be enabled, and an SVML or ACML +ABI-compatible library must be specified at link time. + +GCC currently emits calls to @code{vmldExp2}, @code{vmldLn2}, @code{vmldLog102}, @code{vmldLog102}, @code{vmldPow2}, @code{vmldTanh2}, @code{vmldTan2}, @code{vmldAtan2}, @code{vmldAtanh2}, @code{vmldCbrt2}, @code{vmldSinh2}, @code{vmldSin2}, @code{vmldAsinh2}, @@ -13565,22 +13755,20 @@ of interfacing. GCC will currently emit calls to @code{vmldExp2}, @code{vmlsAtan4}, @code{vmlsAtanh4}, @code{vmlsCbrt4}, @code{vmlsSinh4}, @code{vmlsSin4}, @code{vmlsAsinh4}, @code{vmlsAsin4}, @code{vmlsCosh4}, @code{vmlsCos4}, @code{vmlsAcosh4} and @code{vmlsAcos4} for corresponding -function type when @option{-mveclibabi=svml} is used and @code{__vrd2_sin}, +function type when @option{-mveclibabi=svml} is used, and @code{__vrd2_sin}, @code{__vrd2_cos}, @code{__vrd2_exp}, @code{__vrd2_log}, @code{__vrd2_log2}, @code{__vrd2_log10}, @code{__vrs4_sinf}, @code{__vrs4_cosf}, @code{__vrs4_expf}, @code{__vrs4_logf}, @code{__vrs4_log2f}, -@code{__vrs4_log10f} and @code{__vrs4_powf} for corresponding function type -when @option{-mveclibabi=acml} is used. Both @option{-ftree-vectorize} and -@option{-funsafe-math-optimizations} have to be enabled. A SVML or ACML ABI -compatible library will have to be specified at link time. +@code{__vrs4_log10f} and @code{__vrs4_powf} for the corresponding function type +when @option{-mveclibabi=acml} is used. @item -mabi=@var{name} @opindex mabi Generate code for the specified calling convention. Permissible values -are: @samp{sysv} for the ABI used on GNU/Linux and other systems and +are @samp{sysv} for the ABI used on GNU/Linux and other systems, and @samp{ms} for the Microsoft ABI. The default is to use the Microsoft -ABI when targeting Windows. On all other systems, the default is the -SYSV ABI. You can control this behavior for a specific function by +ABI when targeting Microsoft Windows and the SysV ABI on all other systems. +You can control this behavior for a specific function by using the function attribute @samp{ms_abi}/@samp{sysv_abi}. @xref{Function Attributes}. @@ -13602,23 +13790,23 @@ improved scheduling and reduced dependencies. @item -maccumulate-outgoing-args @opindex maccumulate-outgoing-args -If enabled, the maximum amount of space required for outgoing arguments will be +If enabled, the maximum amount of space required for outgoing arguments is computed in the function prologue. This is faster on most modern CPUs because of reduced dependencies, improved scheduling and reduced stack usage -when preferred stack boundary is not equal to 2. The drawback is a notable +when the preferred stack boundary is not equal to 2. The drawback is a notable increase in code size. This switch implies @option{-mno-push-args}. @item -mthreads @opindex mthreads -Support thread-safe exception handling on @samp{Mingw32}. Code that relies +Support thread-safe exception handling on MinGW. Programs that rely on thread-safe exception handling must compile and link all code with the @option{-mthreads} option. When compiling, @option{-mthreads} defines -@option{-D_MT}; when linking, it links in a special thread helper library -@option{-lmingwthrd} which cleans up per thread exception handling data. +@code{-D_MT}; when linking, it links in a special thread helper library +@option{-lmingwthrd} which cleans up per-thread exception-handling data. @item -mno-align-stringops @opindex mno-align-stringops -Do not align destination of inlined string operations. This switch reduces +Do not align the destination of inlined string operations. This switch reduces code size and improves performance in case the destination is already aligned, but GCC doesn't know about it. @@ -13626,9 +13814,10 @@ but GCC doesn't know about it. @opindex minline-all-stringops By default GCC inlines string operations only when the destination is known to be aligned to least a 4-byte boundary. -This enables more inlining, increase code -size, but may improve performance of code that depends on fast memcpy, strlen -and memset for short lengths. +This enables more inlining and increases code +size, but may improve performance of code that depends on fast +@code{memcpy}, @code{strlen}, +and @code{memset} for short lengths. @item -minline-stringops-dynamically @opindex minline-stringops-dynamically @@ -13637,18 +13826,30 @@ inline code for small blocks and a library call for large blocks. @item -mstringop-strategy=@var{alg} @opindex mstringop-strategy=@var{alg} -Overwrite internal decision heuristic about particular algorithm to inline -string operation with. The allowed values are @code{rep_byte}, -@code{rep_4byte}, @code{rep_8byte} for expanding using i386 @code{rep} prefix -of specified size, @code{byte_loop}, @code{loop}, @code{unrolled_loop} for -expanding inline loop, @code{libcall} for always expanding library call. +Override the internal decision heuristic for the particular algorithm to use +for inlining string operations. The allowed values for @var{alg} are: + +@table @samp +@item rep_byte +@itemx rep_4byte +@itemx rep_8byte +Expand using i386 @code{rep} prefix of the specified size. + +@item byte_loop +@itemx loop +@itemx unrolled_loop +Expand into an inline loop. + +@item libcall +Always use a library call. +@end table @item -momit-leaf-frame-pointer @opindex momit-leaf-frame-pointer Don't keep the frame pointer in a register for leaf functions. This -avoids the instructions to save, set up and restore frame pointers and +avoids the instructions to save, set up, and restore frame pointers and makes an extra register available in leaf functions. The option -@option{-fomit-frame-pointer} removes the frame pointer for all functions, +@option{-fomit-leaf-frame-pointer} removes the frame pointer for leaf functions, which might make debugging harder. @item -mtls-direct-seg-refs @@ -13657,10 +13858,10 @@ which might make debugging harder. Controls whether TLS variables may be accessed with offsets from the TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit), or whether the thread base pointer must be added. Whether or not this -is legal depends on the operating system, and whether it maps the +is valid depends on the operating system, and whether it maps the segment to cover the entire TLS area. -For systems that use GNU libc, the default is on. +For systems that use the GNU C Library, the default is on. @item -msse2avx @itemx -mno-sse2avx @@ -13671,8 +13872,8 @@ prefix. The option @option{-mavx} turns this on by default. @item -mfentry @itemx -mno-fentry @opindex mfentry -If profiling is active @option{-pg} put the profiling -counter call before prologue. +If profiling is active (@option{-pg}), put the profiling +counter call before the prologue. Note: On x86 architectures the attribute @code{ms_hook_prologue} isn't possible at the moment for @option{-mfentry} and @option{-pg}. @@ -13686,7 +13887,7 @@ to 255, 8-bit unsigned integer divide is used instead of 32-bit/64-bit integer divide. @item -mavx256-split-unaligned-load -@item -mavx256-split-unaligned-store +@itemx -mavx256-split-unaligned-store @opindex avx256-split-unaligned-load @opindex avx256-split-unaligned-store Split 32-byte AVX unaligned load and store. @@ -13694,7 +13895,7 @@ Split 32-byte AVX unaligned load and store. @end table These @samp{-m} switches are supported in addition to the above -on AMD x86-64 processors in 64-bit environments. +on x86-64 processors in 64-bit environments. @table @gcctabopt @item -m32 @@ -13704,20 +13905,24 @@ on AMD x86-64 processors in 64-bit environments. @opindex m64 @opindex mx32 Generate code for a 32-bit or 64-bit environment. -The @option{-m32} option sets int, long and pointer to 32 bits and +The @option{-m32} option sets @code{int}, @code{long}, and pointer types +to 32 bits, and generates code that runs on any i386 system. -The @option{-m64} option sets int to 32 bits and long and pointer -to 64 bits and generates code for AMD's x86-64 architecture. -The @option{-mx32} option sets int, long and pointer to 32 bits and -generates code for AMD's x86-64 architecture. -For darwin only the @option{-m64} option turns off the @option{-fno-pic} + +The @option{-m64} option sets @code{int} to 32 bits and @code{long} and pointer +types to 64 bits, and generates code for the x86-64 architecture. +For Darwin only the @option{-m64} option also turns off the @option{-fno-pic} and @option{-mdynamic-no-pic} options. +The @option{-mx32} option sets @code{int}, @code{long}, and pointer types +to 32 bits, and +generates code for the x86-64 architecture. + @item -mno-red-zone @opindex mno-red-zone -Do not use a so called red zone for x86-64 code. The red zone is mandated -by the x86-64 ABI, it is a 128-byte area beyond the location of the -stack pointer that will not be modified by signal or interrupt handlers +Do not use a so-called ``red zone'' for x86-64 code. The red zone is mandated +by the x86-64 ABI; it is a 128-byte area beyond the location of the +stack pointer that is not modified by signal or interrupt handlers and therefore can be used for temporary data without adjusting the stack pointer. The flag @option{-mno-red-zone} disables this red zone. @@ -13736,15 +13941,15 @@ This model has to be used for Linux kernel code. @item -mcmodel=medium @opindex mcmodel=medium -Generate code for the medium model: The program is linked in the lower 2 +Generate code for the medium model: the program is linked in the lower 2 GB of the address space. Small symbols are also placed there. Symbols with sizes larger than @option{-mlarge-data-threshold} are put into -large data or bss sections and can be located above 2GB. Programs can +large data or BSS sections and can be located above 2GB. Programs can be statically or dynamically linked. @item -mcmodel=large @opindex mcmodel=large -Generate code for the large model: This model makes no assumptions +Generate code for the large model. This model makes no assumptions about addresses and sizes of sections. @end table @@ -13752,28 +13957,29 @@ about addresses and sizes of sections. @subsection i386 and x86-64 Windows Options @cindex i386 and x86-64 Windows Options -These additional options are available for Windows targets: +These additional options are available for Microsoft Windows targets: @table @gcctabopt @item -mconsole @opindex mconsole -This option is available for Cygwin and MinGW targets. It +This option specifies that a console application is to be generated, by instructing the linker to set the PE header subsystem type required for console applications. -This is the default behavior for Cygwin and MinGW targets. +This option is available for Cygwin and MinGW targets and is +enabled by default on those targets. @item -mdll @opindex mdll This option is available for Cygwin and MinGW targets. It -specifies that a DLL - a dynamic link library - is to be +specifies that a DLL---a dynamic link library---is to be generated, enabling the selection of the required runtime startup object and entry point. @item -mnop-fun-dllimport @opindex mnop-fun-dllimport This option is available for Cygwin and MinGW targets. It -specifies that the dllimport attribute should be ignored. +specifies that the @code{dllimport} attribute should be ignored. @item -mthread @opindex mthread @@ -13782,14 +13988,14 @@ that MinGW-specific thread support is to be used. @item -municode @opindex municode -This option is available for mingw-w64 targets. It specifies -that the UNICODE macro is getting pre-defined and that the -unicode capable runtime startup code is chosen. +This option is available for MinGW-w64 targets. It causes +the @code{UNICODE} preprocessor macro to be predefined, and +chooses Unicode-capable runtime startup code. @item -mwin32 @opindex mwin32 This option is available for Cygwin and MinGW targets. It -specifies that the typical Windows pre-defined macros are to +specifies that the typical Microsoft Windows predefined macros are to be set in the pre-processor, but does not influence the choice of runtime library/startup code. @@ -13803,17 +14009,24 @@ appropriately. @item -fno-set-stack-executable @opindex fno-set-stack-executable This option is available for MinGW targets. It specifies that -the executable flag for stack used by nested functions isn't +the executable flag for the stack used by nested functions isn't set. This is necessary for binaries running in kernel mode of -Windows, as there the user32 API, which is used to set executable +Microsoft Windows, as there the User32 API, which is used to set executable privileges, isn't available. +@item -fwritable-relocated-rdata +@opindex fno-writable-relocated-rdata +This option is available for MinGW and Cygwin targets. It specifies +that relocated-data in read-only section is put into .data +section. This is a necessary for older runtimes not supporting +modification of .rdata sections for pseudo-relocation. + @item -mpe-aligned-commons @opindex mpe-aligned-commons This option is available for Cygwin and MinGW targets. It specifies that the GNU extension to the PE file format that permits the correct alignment of COMMON variables should be -used when generating code. It will be enabled by default if +used when generating code. It is enabled by default if GCC detects that the target assembler found during configuration supports the feature. @end table @@ -13829,11 +14042,11 @@ These are the @samp{-m} options defined for the Intel IA-64 architecture. @table @gcctabopt @item -mbig-endian @opindex mbig-endian -Generate code for a big endian target. This is the default for HP-UX@. +Generate code for a big-endian target. This is the default for HP-UX@. @item -mlittle-endian @opindex mlittle-endian -Generate code for a little endian target. This is the default for AIX5 +Generate code for a little-endian target. This is the default for AIX5 and GNU/Linux. @item -mgnu-as @@ -13928,7 +14141,7 @@ using the maximum throughput algorithm. @item -mno-inline-sqrt @opindex mno-inline-sqrt -Do not generate inline code for sqrt. +Do not generate inline code for @code{sqrt}. @item -mfused-madd @itemx -mno-fused-madd @@ -13941,7 +14154,7 @@ instructions. The default is to use these instructions. @itemx -mdwarf2-asm @opindex mno-dwarf2-asm @opindex mdwarf2-asm -Don't (or do) generate assembler code for the DWARF2 line number debugging +Don't (or do) generate assembler code for the DWARF 2 line number debugging info. This may be useful when not using the GNU assembler. @item -mearly-stop-bits @@ -13955,7 +14168,7 @@ scheduling, but does not always do so. @item -mfixed-range=@var{register-range} @opindex mfixed-range Generate code treating the given register range as fixed registers. -A fixed register is one that the register allocator can not use. This is +A fixed register is one that the register allocator cannot use. This is useful when compiling kernel code. A register range is specified as two registers separated by a dash. Multiple register ranges can be specified separated by a comma. @@ -13968,7 +14181,8 @@ Specify bit size of immediate TLS offsets. Valid values are 14, 22, and @item -mtune=@var{cpu-type} @opindex mtune Tune the instruction scheduling for a particular CPU, Valid values are -itanium, itanium1, merced, itanium2, and mckinley. +@samp{itanium}, @samp{itanium1}, @samp{merced}, @samp{itanium2}, +and @samp{mckinley}. @item -milp32 @itemx -mlp64 @@ -13984,8 +14198,8 @@ to 64 bits. These are HP-UX specific flags. @opindex mno-sched-br-data-spec @opindex msched-br-data-spec (Dis/En)able data speculative scheduling before reload. -This will result in generation of the ld.a instructions and -the corresponding check instructions (ld.c / chk.a). +This results in generation of @code{ld.a} instructions and +the corresponding check instructions (@code{ld.c} / @code{chk.a}). The default is 'disable'. @item -msched-ar-data-spec @@ -13993,8 +14207,8 @@ The default is 'disable'. @opindex msched-ar-data-spec @opindex mno-sched-ar-data-spec (En/Dis)able data speculative scheduling after reload. -This will result in generation of the ld.a instructions and -the corresponding check instructions (ld.c / chk.a). +This results in generation of @code{ld.a} instructions and +the corresponding check instructions (@code{ld.c} / @code{chk.a}). The default is 'enable'. @item -mno-sched-control-spec @@ -14003,8 +14217,8 @@ The default is 'enable'. @opindex msched-control-spec (Dis/En)able control speculative scheduling. This feature is available only during region scheduling (i.e.@: before reload). -This will result in generation of the ld.s instructions and -the corresponding check instructions chk.s . +This results in generation of the @code{ld.s} instructions and +the corresponding check instructions @code{chk.s}. The default is 'disable'. @item -msched-br-in-data-spec @@ -14038,8 +14252,8 @@ The default is 'enable'. @itemx -msched-prefer-non-data-spec-insns @opindex mno-sched-prefer-non-data-spec-insns @opindex msched-prefer-non-data-spec-insns -If enabled, data speculative instructions will be chosen for schedule -only if there are no other choices at the moment. This will make +If enabled, data-speculative instructions are chosen for schedule +only if there are no other choices at the moment. This makes the use of the data speculation much more conservative. The default is 'disable'. @@ -14047,8 +14261,8 @@ The default is 'disable'. @itemx -msched-prefer-non-control-spec-insns @opindex mno-sched-prefer-non-control-spec-insns @opindex msched-prefer-non-control-spec-insns -If enabled, control speculative instructions will be chosen for schedule -only if there are no other choices at the moment. This will make +If enabled, control-speculative instructions are chosen for schedule +only if there are no other choices at the moment. This makes the use of the control speculation much more conservative. The default is 'disable'. @@ -14056,8 +14270,8 @@ The default is 'disable'. @itemx -msched-count-spec-in-critical-path @opindex mno-sched-count-spec-in-critical-path @opindex msched-count-spec-in-critical-path -If enabled, speculative dependencies will be considered during -computation of the instructions priorities. This will make the use of the +If enabled, speculative dependencies are considered during +computation of the instructions priorities. This makes the use of the speculation a bit more conservative. The default is 'disable'. @@ -14094,9 +14308,11 @@ The default value is 1. @item -msched-max-memory-insns-hard-limit @opindex msched-max-memory-insns-hard-limit -Disallow more than `msched-max-memory-insns' in instruction group. -Otherwise, limit is `soft' meaning that we would prefer non-memory operations -when limit is reached but may still schedule memory operations. +Makes the limit specified by @option{msched-max-memory-insns} a hard limit, +disallowing more than that number in an instruction group. +Otherwise, the limit is ``soft'', meaning that non-memory operations +are preferred when the limit is reached, but memory operations may still +be scheduled. @end table @@ -14108,8 +14324,8 @@ These @samp{-m} options are defined for the IA-64/VMS implementations: @table @gcctabopt @item -mvms-return-codes @opindex mvms-return-codes -Return VMS condition codes from main. The default is to return POSIX -style condition (e.g.@ error) codes. +Return VMS condition codes from @code{main}. The default is to return POSIX-style +condition (e.g.@ error) codes. @item -mdebug-main=@var{prefix} @opindex mdebug-main=@var{prefix} @@ -14745,7 +14961,7 @@ Prefer word access when reading byte quantities. @itemx -mbig-endian @opindex mlittle-endian @opindex mbig-endian -Generate code for a little endian target. +Generate code for a little-endian target. @item -m210 @itemx -m340 @@ -16671,10 +16887,10 @@ Perform optimizations for the floating-point unit on Xilinx PPC 405/440. Generate code that uses (does not use) the load multiple word instructions and the store multiple word instructions. These instructions are generated by default on POWER systems, and not -generated on PowerPC systems. Do not use @option{-mmultiple} on little -endian PowerPC systems, since those instructions do not work when the -processor is in little endian mode. The exceptions are PPC740 and -PPC750 which permit the instructions usage in little endian mode. +generated on PowerPC systems. Do not use @option{-mmultiple} on little-endian +PowerPC systems, since those instructions do not work when the +processor is in little-endian mode. The exceptions are PPC740 and +PPC750 which permit these instructions in little-endian mode. @item -mstring @itemx -mno-string @@ -16684,10 +16900,10 @@ Generate code that uses (does not use) the load string instructions and the store string word instructions to save multiple registers and do small block moves. These instructions are generated by default on POWER systems, and not generated on PowerPC systems. Do not use -@option{-mstring} on little endian PowerPC systems, since those -instructions do not work when the processor is in little endian mode. -The exceptions are PPC740 and PPC750 which permit the instructions -usage in little endian mode. +@option{-mstring} on little-endian PowerPC systems, since those +instructions do not work when the processor is in little-endian mode. +The exceptions are PPC740 and PPC750 which permit these instructions +in little-endian mode. @item -mupdate @itemx -mno-update @@ -16797,7 +17013,7 @@ used in the program. @opindex mlittle @opindex mlittle-endian On System V.4 and embedded PowerPC systems compile code for the -processor in little endian mode. The @option{-mlittle-endian} option is +processor in little-endian mode. The @option{-mlittle-endian} option is the same as @option{-mlittle}. @item -mbig @@ -16805,7 +17021,7 @@ the same as @option{-mlittle}. @opindex mbig @opindex mbig-endian On System V.4 and embedded PowerPC systems compile code for the -processor in big endian mode. The @option{-mbig-endian} option is +processor in big-endian mode. The @option{-mbig-endian} option is the same as @option{-mbig}. @item -mdynamic-no-pic @@ -17270,7 +17486,7 @@ selected. @opindex mbig-endian-data @opindex mlittle-endian-data Store data (but not code) in the big-endian format. The default is -@option{-mlittle-endian-data}, i.e.@: to store data in the little endian +@option{-mlittle-endian-data}, i.e.@: to store data in the little-endian format. @item -msmall-data-limit=@var{N} @@ -17286,7 +17502,7 @@ could result in slower and/or larger code if variables which once could have been held in the reserved register are now pushed onto the stack. -Note, common variables (variables that have not been initialised) and +Note, common variables (variables that have not been initialized) and constants are not placed into the small data area as they are assigned to other sections in the output executable. @@ -17600,11 +17816,11 @@ These options are defined for Score implementations: @table @gcctabopt @item -meb @opindex meb -Compile code for big endian mode. This is the default. +Compile code for big-endian mode. This is the default. @item -mel @opindex mel -Compile code for little endian mode. +Compile code for little-endian mode. @item -mnhwloop @opindex mnhwloop @@ -17725,11 +17941,11 @@ instructions at the moment. @item -mb @opindex mb -Compile code for the processor in big endian mode. +Compile code for the processor in big-endian mode. @item -ml @opindex ml -Compile code for the processor in little endian mode. +Compile code for the processor in little-endian mode. @item -mdalign @opindex mdalign @@ -17808,8 +18024,21 @@ which is incompatible with the SH ABI@. @item -msoft-atomic @opindex msoft-atomic -Generate software atomic sequences for the atomic operations. -This is the default when the target is @code{sh-*-linux*}. +Generate GNU/Linux compatible gUSA software atomic sequences for the atomic +built-in functions. The generated atomic sequences require support from the +interrupt / exception handling code of the system and are only suitable for +single-core systems. They will not perform correctly on multi-core systems. +This option is enabled by default when the target is @code{sh-*-linux*}. +For details on the atomic built-in functions see @ref{__atomic Builtins}. + +@item -menable-tas +@opindex menable-tas +Generate the @code{tas.b} opcode for @code{__atomic_test_and_set}. +Notice that depending on the particular hardware and software configuration +this can degrade overall performance due to the operand cache line flushes +that are implied by the @code{tas.b} instruction. On multi-core SH4A +processors the @code{tas.b} instruction must be used with caution since it +can result in data corruption for certain cache configurations. @item -mspace @opindex mspace @@ -17940,6 +18169,35 @@ to generate symbols that will cause ptabs / ptrel to trap. This option is only meaningful when @option{-mno-pt-fixed} is in effect. It will then prevent cross-basic-block cse, hoisting and most scheduling of symbol loads. The default is @option{-mno-invalid-symbols}. + +@item -mbranch-cost=@var{num} +@opindex mbranch-cost=@var{num} +Assume @var{num} to be the cost for a branch instruction. Higher numbers +will make the compiler try to generate more branch-free code if possible. +If not specified the value is selected depending on the processor type that +is being compiled for. + +@item -mcbranchdi +@opindex mcbranchdi +Enable the @code{cbranchdi4} instruction pattern. + +@item -mcmpeqdi +@opindex mcmpeqdi +Emit the @code{cmpeqdi_t} instruction pattern even when @option{-mcbranchdi} +is in effect. + +@item -mfused-madd +@opindex mfused-madd +Allow the usage of the @code{fmac} instruction (floating-point +multiply-accumulate) if the processor type supports it. Enabling this +option might generate code that produces different numeric floating-point +results compared to strict IEEE 754 arithmetic. + +@item -mpretend-cmove +@opindex mpretend-cmove +Prefer zero-displacement conditional branches for conditional move instruction +patterns. This can result in faster code on the SH4 processor. + @end table @node Solaris 2 Options @@ -18848,9 +19106,9 @@ it. @table @gcctabopt @item -fbounds-check @opindex fbounds-check -For front-ends that support it, generate additional code to check that +For front ends that support it, generate additional code to check that indices used to access arrays are within the declared range. This is -currently only supported by the Java and Fortran front-ends, where +currently only supported by the Java and Fortran front ends, where this option defaults to true and false respectively. @item -ftrapv @@ -18864,7 +19122,7 @@ This option instructs the compiler to assume that signed arithmetic overflow of addition, subtraction and multiplication wraps around using twos-complement representation. This flag enables some optimizations and disables others. This option is enabled by default for the Java -front-end, as required by the Java language specification. +front end, as required by the Java language specification. @item -fexceptions @opindex fexceptions @@ -19279,7 +19537,7 @@ The resulting program has a discontiguous stack which can only overflow if the program is unable to allocate any more memory. This is most useful when running threaded programs, as it is no longer necessary to calculate a good stack size to use for each thread. This -is currently only implemented for the i386 and x86_64 backends running +is currently only implemented for the i386 and x86_64 back ends running GNU/Linux. When code compiled with @option{-fsplit-stack} calls code compiled @@ -19381,20 +19639,20 @@ is at @uref{http://gcc.gnu.org/@/wiki/@/Visibility}. @item -fstrict-volatile-bitfields @opindex fstrict-volatile-bitfields -This option should be used if accesses to volatile bitfields (or other +This option should be used if accesses to volatile bit-fields (or other structure fields, although the compiler usually honors those types anyway) should use a single access of the width of the field's type, aligned to a natural alignment if possible. For example, targets with memory-mapped peripheral registers might require all such accesses to be 16 bits wide; with this flag the user could -declare all peripheral bitfields as ``unsigned short'' (assuming short +declare all peripheral bit-fields as ``unsigned short'' (assuming short is 16 bits on these targets) to force GCC to use 16-bit accesses instead of, perhaps, a more efficient 32-bit access. If this option is disabled, the compiler will use the most efficient instruction. In the previous example, that might be a 32-bit load instruction, even though that will access bytes that do not contain -any portion of the bitfield, or memory-mapped registers unrelated to +any portion of the bit-field, or memory-mapped registers unrelated to the one being updated. If the target requires strict alignment, and honoring the field @@ -19633,9 +19891,8 @@ Only one precompiled header can be used in a particular compilation. @item A precompiled header can't be used once the first C token is seen. You -can have preprocessor directives before a precompiled header; you can -even include a precompiled header from inside another header, so long as -there are no C tokens before the @code{#include}. +can have preprocessor directives before a precompiled header; you cannot +include a precompiled header from inside another header. @item The precompiled header file must be produced for the same language as diff --git a/gcc/doc/passes.texi b/gcc/doc/passes.texi index 1fee7d9020e..8329dddd987 100644 --- a/gcc/doc/passes.texi +++ b/gcc/doc/passes.texi @@ -393,7 +393,7 @@ in @file{tree-ssa-math-opts.c} and is described by @item Full redundancy elimination This is a simpler form of PRE that only eliminates redundancies that -occur an all paths. It is located in @file{tree-ssa-pre.c} and +occur on all paths. It is located in @file{tree-ssa-pre.c} and described by @code{pass_fre}. @item Loop optimization diff --git a/gcc/dojump.c b/gcc/dojump.c index 91bebee1400..67452005e90 100644 --- a/gcc/dojump.c +++ b/gcc/dojump.c @@ -444,36 +444,6 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label, int prob) /* Lowered by gimplify.c. */ gcc_unreachable (); - case COMPONENT_REF: - case BIT_FIELD_REF: - case ARRAY_REF: - case ARRAY_RANGE_REF: - { - HOST_WIDE_INT bitsize, bitpos; - int unsignedp; - enum machine_mode mode; - tree type; - tree offset; - int volatilep = 0; - - /* Get description of this reference. We don't actually care - about the underlying object here. */ - get_inner_reference (exp, &bitsize, &bitpos, &offset, &mode, - &unsignedp, &volatilep, false); - - type = lang_hooks.types.type_for_size (bitsize, unsignedp); - if (! SLOW_BYTE_ACCESS - && type != 0 && bitsize >= 0 - && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp)) - && have_insn_for (COMPARE, TYPE_MODE (type))) - { - do_jump (fold_convert (type, exp), if_false_label, if_true_label, - prob); - break; - } - goto normal; - } - case MINUS_EXPR: /* Nonzero iff operands of minus differ. */ code = NE_EXPR; diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 5c5388b73f7..49ef29dd876 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -10231,9 +10231,6 @@ modified_type_die (tree type, int is_const_type, int is_volatile_type, useful source coordinates anyway. */ name = DECL_NAME (name); add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name)); - add_gnat_descriptive_type_attribute (mod_type_die, type, context_die); - if (TYPE_ARTIFICIAL (type)) - add_AT_flag (mod_type_die, DW_AT_artificial, 1); } /* This probably indicates a bug. */ else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type) @@ -10262,6 +10259,10 @@ modified_type_die (tree type, int is_const_type, int is_volatile_type, if (sub_die != NULL) add_AT_die_ref (mod_type_die, DW_AT_type, sub_die); + add_gnat_descriptive_type_attribute (mod_type_die, type, context_die); + if (TYPE_ARTIFICIAL (type)) + add_AT_flag (mod_type_die, DW_AT_artificial, 1); + return mod_type_die; } @@ -15795,11 +15796,7 @@ add_gnat_descriptive_type_attribute (dw_die_ref die, tree type, dtype_die = lookup_type_die (dtype); if (!dtype_die) { - /* The descriptive type indirectly references TYPE if this is also the - case for TYPE itself. Do not deal with the circularity here. */ - TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 1; gen_type_die (dtype, context_die); - TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 0; dtype_die = lookup_type_die (dtype); gcc_assert (dtype_die); } @@ -16686,9 +16683,6 @@ gen_array_type_die (tree type, dw_die_ref context_die) array_die = new_die (DW_TAG_array_type, scope_die, type); add_name_attribute (array_die, type_tag (type)); - add_gnat_descriptive_type_attribute (array_die, type, context_die); - if (TYPE_ARTIFICIAL (type)) - add_AT_flag (array_die, DW_AT_artificial, 1); equate_type_number_to_die (type, array_die); if (TREE_CODE (type) == VECTOR_TYPE) @@ -16748,6 +16742,10 @@ gen_array_type_die (tree type, dw_die_ref context_die) add_type_attribute (array_die, element_type, 0, 0, context_die); + add_gnat_descriptive_type_attribute (array_die, type, context_die); + if (TYPE_ARTIFICIAL (type)) + add_AT_flag (array_die, DW_AT_artificial, 1); + if (get_AT (array_die, DW_AT_name)) add_pubtype (type, array_die); } @@ -16991,9 +16989,6 @@ gen_enumeration_type_die (tree type, dw_die_ref context_die) scope_die_for (type, context_die), type); equate_type_number_to_die (type, type_die); add_name_attribute (type_die, type_tag (type)); - add_gnat_descriptive_type_attribute (type_die, type, context_die); - if (TYPE_ARTIFICIAL (type)) - add_AT_flag (type_die, DW_AT_artificial, 1); if (dwarf_version >= 4 || !dwarf_strict) { if (ENUM_IS_SCOPED (type)) @@ -17049,6 +17044,10 @@ gen_enumeration_type_die (tree type, dw_die_ref context_die) add_AT_int (enum_die, DW_AT_const_value, tree_low_cst (value, tree_int_cst_sgn (value) > 0)); } + + add_gnat_descriptive_type_attribute (type_die, type, context_die); + if (TYPE_ARTIFICIAL (type)) + add_AT_flag (type_die, DW_AT_artificial, 1); } else add_AT_flag (type_die, DW_AT_declaration, 1); @@ -18437,7 +18436,9 @@ add_high_low_attributes (tree stmt, dw_die_ref die) if (BLOCK_FRAGMENT_CHAIN (stmt) && (dwarf_version >= 3 || !dwarf_strict)) { - tree chain; + tree chain, superblock = NULL_TREE; + dw_die_ref pdie; + dw_attr_ref attr = NULL; if (inlined_function_outer_scope_p (stmt)) { @@ -18446,6 +18447,56 @@ add_high_low_attributes (tree stmt, dw_die_ref die) add_AT_lbl_id (die, DW_AT_entry_pc, label); } + /* Optimize duplicate .debug_ranges lists or even tails of + lists. If this BLOCK has same ranges as its supercontext, + lookup DW_AT_ranges attribute in the supercontext (and + recursively so), verify that the ranges_table contains the + right values and use it instead of adding a new .debug_range. */ + for (chain = stmt, pdie = die; + BLOCK_SAME_RANGE (chain); + chain = BLOCK_SUPERCONTEXT (chain)) + { + dw_attr_ref new_attr; + + pdie = pdie->die_parent; + if (pdie == NULL) + break; + if (BLOCK_SUPERCONTEXT (chain) == NULL_TREE) + break; + new_attr = get_AT (pdie, DW_AT_ranges); + if (new_attr == NULL + || new_attr->dw_attr_val.val_class != dw_val_class_range_list) + break; + attr = new_attr; + superblock = BLOCK_SUPERCONTEXT (chain); + } + if (attr != NULL + && (ranges_table[attr->dw_attr_val.v.val_offset + / 2 / DWARF2_ADDR_SIZE].num + == BLOCK_NUMBER (superblock)) + && BLOCK_FRAGMENT_CHAIN (superblock)) + { + unsigned long off = attr->dw_attr_val.v.val_offset + / 2 / DWARF2_ADDR_SIZE; + unsigned long supercnt = 0, thiscnt = 0; + for (chain = BLOCK_FRAGMENT_CHAIN (superblock); + chain; chain = BLOCK_FRAGMENT_CHAIN (chain)) + { + ++supercnt; + gcc_checking_assert (ranges_table[off + supercnt].num + == BLOCK_NUMBER (chain)); + } + gcc_checking_assert (ranges_table[off + supercnt + 1].num == 0); + for (chain = BLOCK_FRAGMENT_CHAIN (stmt); + chain; chain = BLOCK_FRAGMENT_CHAIN (chain)) + ++thiscnt; + gcc_assert (supercnt >= thiscnt); + add_AT_range_list (die, DW_AT_ranges, + (off + supercnt - thiscnt) + * 2 * DWARF2_ADDR_SIZE); + return; + } + add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt)); chain = BLOCK_FRAGMENT_CHAIN (stmt); @@ -18961,12 +19012,7 @@ gen_struct_or_union_type_die (tree type, dw_die_ref context_die, if (old_die) add_AT_specification (type_die, old_die); else - { - add_name_attribute (type_die, type_tag (type)); - add_gnat_descriptive_type_attribute (type_die, type, context_die); - if (TYPE_ARTIFICIAL (type)) - add_AT_flag (type_die, DW_AT_artificial, 1); - } + add_name_attribute (type_die, type_tag (type)); } else remove_AT (type_die, DW_AT_declaration); @@ -18999,6 +19045,10 @@ gen_struct_or_union_type_die (tree type, dw_die_ref context_die, gen_member_die (type, type_die); pop_decl_scope (); + add_gnat_descriptive_type_attribute (type_die, type, context_die); + if (TYPE_ARTIFICIAL (type)) + add_AT_flag (type_die, DW_AT_artificial, 1); + /* GNU extension: Record what type our vtable lives in. */ if (TYPE_VFIELD (type)) { diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 765dd942ad0..fd19fb6ace0 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -117,6 +117,12 @@ FIXED_VALUE_TYPE fconst1[MAX_FCONST1]; rtx const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1]; +/* Standard pieces of rtx, to be substituted directly into things. */ +rtx pc_rtx; +rtx ret_rtx; +rtx simple_return_rtx; +rtx cc0_rtx; + /* A hash table storing CONST_INTs whose absolute value is greater than MAX_SAVED_CONST_INT. */ @@ -1548,6 +1554,7 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp, HOST_WIDE_INT apply_bitpos = 0; tree type; struct mem_attrs attrs, *defattrs, *refattrs; + addr_space_t as; /* It can happen that type_for_mode was given a mode for which there is no language-level type. In which case it returns NULL, which @@ -1681,17 +1688,29 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp, MEM_NOTRAP_P (ref) = !tree_could_trap_p (t); base = get_base_address (t); - if (base && DECL_P (base) - && TREE_READONLY (base) - && (TREE_STATIC (base) || DECL_EXTERNAL (base)) - && !TREE_THIS_VOLATILE (base)) - MEM_READONLY_P (ref) = 1; - - /* Mark static const strings readonly as well. */ - if (base && TREE_CODE (base) == STRING_CST - && TREE_READONLY (base) - && TREE_STATIC (base)) - MEM_READONLY_P (ref) = 1; + if (base) + { + if (DECL_P (base) + && TREE_READONLY (base) + && (TREE_STATIC (base) || DECL_EXTERNAL (base)) + && !TREE_THIS_VOLATILE (base)) + MEM_READONLY_P (ref) = 1; + + /* Mark static const strings readonly as well. */ + if (TREE_CODE (base) == STRING_CST + && TREE_READONLY (base) + && TREE_STATIC (base)) + MEM_READONLY_P (ref) = 1; + + if (TREE_CODE (base) == MEM_REF + || TREE_CODE (base) == TARGET_MEM_REF) + as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (base, + 0)))); + else + as = TYPE_ADDR_SPACE (TREE_TYPE (base)); + } + else + as = TYPE_ADDR_SPACE (type); /* If this expression uses it's parent's alias set, mark it such that we won't change it. */ @@ -1830,6 +1849,8 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp, attrs.align = MAX (attrs.align, obj_align); } } + else + as = TYPE_ADDR_SPACE (type); /* If we modified OFFSET based on T, then subtract the outstanding bit position offset. Similarly, increase the size of the accessed @@ -1843,7 +1864,7 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp, } /* Now set the attributes we computed above. */ - attrs.addrspace = TYPE_ADDR_SPACE (type); + attrs.addrspace = as; set_mem_attrs (ref, &attrs); } @@ -5521,10 +5542,6 @@ init_emit_regs (void) init_reg_modes_target (); /* Assign register numbers to the globally defined register rtx. */ - pc_rtx = gen_rtx_fmt_ (PC, VOIDmode); - ret_rtx = gen_rtx_fmt_ (RETURN, VOIDmode); - simple_return_rtx = gen_rtx_fmt_ (SIMPLE_RETURN, VOIDmode); - cc0_rtx = gen_rtx_fmt_ (CC0, VOIDmode); stack_pointer_rtx = gen_raw_REG (Pmode, STACK_POINTER_REGNUM); frame_pointer_rtx = gen_raw_REG (Pmode, FRAME_POINTER_REGNUM); hard_frame_pointer_rtx = gen_raw_REG (Pmode, HARD_FRAME_POINTER_REGNUM); @@ -5840,6 +5857,11 @@ init_emit_once (void) const_tiny_rtx[0][(int) BImode] = const0_rtx; if (STORE_FLAG_VALUE == 1) const_tiny_rtx[1][(int) BImode] = const1_rtx; + + pc_rtx = gen_rtx_fmt_ (PC, VOIDmode); + ret_rtx = gen_rtx_fmt_ (RETURN, VOIDmode); + simple_return_rtx = gen_rtx_fmt_ (SIMPLE_RETURN, VOIDmode); + cc0_rtx = gen_rtx_fmt_ (CC0, VOIDmode); } /* Produce exact duplicate of insn INSN after AFTER. diff --git a/gcc/expr.c b/gcc/expr.c index 2e716cc328d..e6fc100f9f8 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4666,6 +4666,7 @@ expand_assignment (tree to, tree from, bool nontemporal) int volatilep = 0; tree tem; bool misalignp; + rtx mem = NULL_RTX; push_temp_slots (); tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1, @@ -4686,8 +4687,44 @@ expand_assignment (tree to, tree from, bool nontemporal) && ((icode = optab_handler (movmisalign_optab, mode)) != CODE_FOR_nothing)) { + enum machine_mode address_mode; + rtx op0; + struct expand_operand ops[2]; + addr_space_t as = TYPE_ADDR_SPACE + (TREE_TYPE (TREE_TYPE (TREE_OPERAND (tem, 0)))); + tree base = TREE_OPERAND (tem, 0); + misalignp = true; to_rtx = gen_reg_rtx (mode); + + address_mode = targetm.addr_space.address_mode (as); + op0 = expand_expr (base, NULL_RTX, VOIDmode, EXPAND_NORMAL); + op0 = convert_memory_address_addr_space (address_mode, op0, as); + if (!integer_zerop (TREE_OPERAND (tem, 1))) + { + rtx off = immed_double_int_const (mem_ref_offset (tem), + address_mode); + op0 = simplify_gen_binary (PLUS, address_mode, op0, off); + } + op0 = memory_address_addr_space (mode, op0, as); + mem = gen_rtx_MEM (mode, op0); + set_mem_attributes (mem, tem, 0); + set_mem_addr_space (mem, as); + if (TREE_THIS_VOLATILE (tem)) + MEM_VOLATILE_P (mem) = 1; + + /* If the misaligned store doesn't overwrite all bits, perform + rmw cycle on MEM. */ + if (bitsize != GET_MODE_BITSIZE (mode)) + { + create_input_operand (&ops[0], to_rtx, mode); + create_fixed_operand (&ops[1], mem); + /* The movmisalign<mode> pattern cannot fail, else the assignment + would silently be omitted. */ + expand_insn (icode, 2, ops); + + mem = copy_rtx (mem); + } } else { @@ -4842,26 +4879,6 @@ expand_assignment (tree to, tree from, bool nontemporal) if (misalignp) { struct expand_operand ops[2]; - enum machine_mode address_mode; - rtx op0, mem; - addr_space_t as = TYPE_ADDR_SPACE - (TREE_TYPE (TREE_TYPE (TREE_OPERAND (tem, 0)))); - tree base = TREE_OPERAND (tem, 0); - address_mode = targetm.addr_space.address_mode (as); - op0 = expand_expr (base, NULL_RTX, VOIDmode, EXPAND_NORMAL); - op0 = convert_memory_address_addr_space (address_mode, op0, as); - if (!integer_zerop (TREE_OPERAND (tem, 1))) - { - rtx off = immed_double_int_const (mem_ref_offset (tem), - address_mode); - op0 = simplify_gen_binary (PLUS, address_mode, op0, off); - } - op0 = memory_address_addr_space (mode, op0, as); - mem = gen_rtx_MEM (mode, op0); - set_mem_attributes (mem, tem, 0); - set_mem_addr_space (mem, as); - if (TREE_THIS_VOLATILE (tem)) - MEM_VOLATILE_P (mem) = 1; create_fixed_operand (&ops[0], mem); create_input_operand (&ops[1], to_rtx, mode); @@ -5876,8 +5893,8 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size) if (TYPE_PRECISION (type) < BITS_PER_WORD) { - type = lang_hooks.types.type_for_size - (BITS_PER_WORD, TYPE_UNSIGNED (type)); + type = lang_hooks.types.type_for_mode + (word_mode, TYPE_UNSIGNED (type)); value = fold_convert (type, value); } @@ -10709,7 +10726,6 @@ try_casesi (tree index_type, tree index_expr, tree minval, tree range, { struct expand_operand ops[5]; enum machine_mode index_mode = SImode; - int index_bits = GET_MODE_BITSIZE (index_mode); rtx op1, op2, index; if (! HAVE_casesi) @@ -10736,7 +10752,7 @@ try_casesi (tree index_type, tree index_expr, tree minval, tree range, { if (TYPE_MODE (index_type) != index_mode) { - index_type = lang_hooks.types.type_for_size (index_bits, 0); + index_type = lang_hooks.types.type_for_mode (index_mode, 0); index_expr = fold_convert (index_type, index_expr); } diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 40a0986dda8..0f806752dd3 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -1,7 +1,7 @@ /* Fold a constant sub-tree into a single node for C-compiler Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 - Free Software Foundation, Inc. + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, + 2012 Free Software Foundation, Inc. This file is part of GCC. @@ -7626,8 +7626,13 @@ build_fold_addr_expr_with_type_loc (location_t loc, tree t, tree ptrtype) t = build1_loc (loc, NOP_EXPR, ptrtype, t); } else if (TREE_CODE (t) == MEM_REF - && integer_zerop (TREE_OPERAND (t, 1))) + && integer_zerop (TREE_OPERAND (t, 1))) return TREE_OPERAND (t, 0); + else if (TREE_CODE (t) == MEM_REF + && TREE_CODE (TREE_OPERAND (t, 0)) == INTEGER_CST) + return fold_binary (POINTER_PLUS_EXPR, ptrtype, + TREE_OPERAND (t, 0), + convert_to_ptrofftype (TREE_OPERAND (t, 1))); else if (TREE_CODE (t) == VIEW_CONVERT_EXPR) { t = build_fold_addr_expr_loc (loc, TREE_OPERAND (t, 0)); @@ -9671,6 +9676,44 @@ fold_vec_perm (tree type, tree arg0, tree arg1, const unsigned char *sel) } } +/* Try to fold a pointer difference of type TYPE two address expressions of + array references AREF0 and AREF1 using location LOC. Return a + simplified expression for the difference or NULL_TREE. */ + +static tree +fold_addr_of_array_ref_difference (location_t loc, tree type, + tree aref0, tree aref1) +{ + tree base0 = TREE_OPERAND (aref0, 0); + tree base1 = TREE_OPERAND (aref1, 0); + tree base_offset = build_int_cst (type, 0); + + /* If the bases are array references as well, recurse. If the bases + are pointer indirections compute the difference of the pointers. + If the bases are equal, we are set. */ + if ((TREE_CODE (base0) == ARRAY_REF + && TREE_CODE (base1) == ARRAY_REF + && (base_offset + = fold_addr_of_array_ref_difference (loc, type, base0, base1))) + || (INDIRECT_REF_P (base0) + && INDIRECT_REF_P (base1) + && (base_offset = fold_binary_loc (loc, MINUS_EXPR, type, + TREE_OPERAND (base0, 0), + TREE_OPERAND (base1, 0)))) + || operand_equal_p (base0, base1, 0)) + { + tree op0 = fold_convert_loc (loc, type, TREE_OPERAND (aref0, 1)); + tree op1 = fold_convert_loc (loc, type, TREE_OPERAND (aref1, 1)); + tree esz = fold_convert_loc (loc, type, array_ref_element_size (aref0)); + tree diff = build2 (MINUS_EXPR, type, op0, op1); + return fold_build2_loc (loc, PLUS_EXPR, type, + base_offset, + fold_build2_loc (loc, MULT_EXPR, type, + diff, esz)); + } + return NULL_TREE; +} + /* Fold a binary expression of code CODE and type TYPE with operands OP0 and OP1. LOC is the location of the resulting expression. Return the folded expression if folding is successful. Otherwise, @@ -10582,19 +10625,11 @@ fold_binary_loc (location_t loc, && TREE_CODE (arg1) == ADDR_EXPR && TREE_CODE (TREE_OPERAND (arg1, 0)) == ARRAY_REF) { - tree aref0 = TREE_OPERAND (arg0, 0); - tree aref1 = TREE_OPERAND (arg1, 0); - if (operand_equal_p (TREE_OPERAND (aref0, 0), - TREE_OPERAND (aref1, 0), 0)) - { - tree op0 = fold_convert_loc (loc, type, TREE_OPERAND (aref0, 1)); - tree op1 = fold_convert_loc (loc, type, TREE_OPERAND (aref1, 1)); - tree esz = array_ref_element_size (aref0); - tree diff = build2 (MINUS_EXPR, type, op0, op1); - return fold_build2_loc (loc, MULT_EXPR, type, diff, - fold_convert_loc (loc, type, esz)); - - } + tree tem = fold_addr_of_array_ref_difference (loc, type, + TREE_OPERAND (arg0, 0), + TREE_OPERAND (arg1, 0)); + if (tem) + return tem; } if (FLOAT_TYPE_P (type) @@ -10959,66 +10994,50 @@ fold_binary_loc (location_t loc, && TREE_CODE (arg1) == INTEGER_CST && TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST) { - unsigned HOST_WIDE_INT hi1, lo1, hi2, lo2, hi3, lo3, mlo, mhi; + double_int c1, c2, c3, msk; int width = TYPE_PRECISION (type), w; - hi1 = TREE_INT_CST_HIGH (TREE_OPERAND (arg0, 1)); - lo1 = TREE_INT_CST_LOW (TREE_OPERAND (arg0, 1)); - hi2 = TREE_INT_CST_HIGH (arg1); - lo2 = TREE_INT_CST_LOW (arg1); + c1 = tree_to_double_int (TREE_OPERAND (arg0, 1)); + c2 = tree_to_double_int (arg1); /* If (C1&C2) == C1, then (X&C1)|C2 becomes (X,C2). */ - if ((hi1 & hi2) == hi1 && (lo1 & lo2) == lo1) + if (double_int_equal_p (double_int_and (c1, c2), c1)) return omit_one_operand_loc (loc, type, arg1, - TREE_OPERAND (arg0, 0)); + TREE_OPERAND (arg0, 0)); - if (width > HOST_BITS_PER_WIDE_INT) - { - mhi = (unsigned HOST_WIDE_INT) -1 - >> (2 * HOST_BITS_PER_WIDE_INT - width); - mlo = -1; - } - else - { - mhi = 0; - mlo = (unsigned HOST_WIDE_INT) -1 - >> (HOST_BITS_PER_WIDE_INT - width); - } + msk = double_int_mask (width); /* If (C1|C2) == ~0 then (X&C1)|C2 becomes X|C2. */ - if ((~(hi1 | hi2) & mhi) == 0 && (~(lo1 | lo2) & mlo) == 0) + if (double_int_zero_p (double_int_and_not (msk, + double_int_ior (c1, c2)))) return fold_build2_loc (loc, BIT_IOR_EXPR, type, - TREE_OPERAND (arg0, 0), arg1); + TREE_OPERAND (arg0, 0), arg1); /* Minimize the number of bits set in C1, i.e. C1 := C1 & ~C2, unless (C1 & ~C2) | (C2 & C3) for some C3 is a mask of some mode which allows further optimizations. */ - hi1 &= mhi; - lo1 &= mlo; - hi2 &= mhi; - lo2 &= mlo; - hi3 = hi1 & ~hi2; - lo3 = lo1 & ~lo2; + c1 = double_int_and (c1, msk); + c2 = double_int_and (c2, msk); + c3 = double_int_and_not (c1, c2); for (w = BITS_PER_UNIT; w <= width && w <= HOST_BITS_PER_WIDE_INT; w <<= 1) { unsigned HOST_WIDE_INT mask = (unsigned HOST_WIDE_INT) -1 >> (HOST_BITS_PER_WIDE_INT - w); - if (((lo1 | lo2) & mask) == mask - && (lo1 & ~mask) == 0 && hi1 == 0) + if (((c1.low | c2.low) & mask) == mask + && (c1.low & ~mask) == 0 && c1.high == 0) { - hi3 = 0; - lo3 = mask; + c3 = uhwi_to_double_int (mask); break; } } - if (hi3 != hi1 || lo3 != lo1) + if (!double_int_equal_p (c3, c1)) return fold_build2_loc (loc, BIT_IOR_EXPR, type, - fold_build2_loc (loc, BIT_AND_EXPR, type, - TREE_OPERAND (arg0, 0), - build_int_cst_wide (type, - lo3, hi3)), - arg1); + fold_build2_loc (loc, BIT_AND_EXPR, type, + TREE_OPERAND (arg0, 0), + double_int_to_tree (type, + c3)), + arg1); } /* (X & Y) | Y is (X, Y). */ diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d88120b2b5a..d3ef58d21ae 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,148 @@ +2012-03-08 Tobias Burnus <burnus@net-b.de> + + PR fortran/52469 + * trans-types.c (gfc_get_function_type): Handle backend_decl + of a procedure pointer. + +2012-03-06 Steven Bosscher <steven@gcc.gnu.org> + + * f95-lang.c (yyerror, yylex): Remove. + (clear_binding_stack): Remove, fold into its only user. + (LANG_HOOKS_PRINT_IDENTIFIER): Do not re-define. + (ridpointers): Remove. + (gfc_eh_initialized_p): Make static. + (gfc_truthvalue_conversion): Move to convert.c. + (gfc_be_parse_file): Clear binding level stack when done. + (gfc_print_identifier): Remove. + (pushlevel): Remove ignored 'ignore' argument. Update all callers. + (poplevel): Remove unused 'reverse' argument. Update all callers. + (ggc_p): Remove. + (gfc_builtin_function): Make static. Do not attempt to make RTL for + builtin functions. + * convert.c (gfc_truthvalue_conversion): Moved here from f95-lang.c, + and made static. + * trans.h (pushlevel, poplevel): Adjust prototypes. + (gfc_truthvalue_conversion, gfc_builtin_function): Remove prototypes. + * trans-openmp.c: Update calls to pushlevel and poplevel. + * trans.c: Likewise. + * trans-decl.c: Likewise. + +2012-03-04 Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/50981 + * gfortran.h (gfc_is_class_container_ref): New prototype. + * class.c (gfc_is_class_container_ref): New function. + * trans-expr.c (gfc_conv_procedure_call): Add a "_data" component + reference to polymorphic actual arguments. + +2012-03-04 Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/50981 + * trans-expr.c (gfc_conv_procedure_call): Save se->ss's value. + Handle the case of unallocated arrays passed to elemental procedures. + +2012-03-04 Mikael Morin <mikael@gcc.gnu.org> + + * trans.h (struct gfc_ss_info): Move can_be_null_ref component from + the data::scalar subcomponent to the toplevel. + * trans-expr.c (gfc_conv_expr): Update component reference. + * trans-array.c (gfc_add_loop_ss_code): Ditto. + (gfc_walk_elemental_function_args): Ditto. Move the conditional setting + the field out of the scalar-only block. + +2012-03-04 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> + + PR fortran/36160 + * error.c (gfc_widechar_display_length, gfc_wide_display_length): + New functions. + (print_wide_char_into_buffer): Return length written. + (show_locus): Fix locus displayed when wide characters are present. + +2012-03-04 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> + + * module.c (gfc_use_module): Improve error message some more. + +2012-03-03 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> + + PR fortran/52313 + * module.c (gfc_use_module): Improve error messages. + +2012-03-03 Tobias Burnus <burnus@net-b.de> + + PR fortran/48820 + * resolve.c (resolve_actual_arglist): Properly reset + assumed_type_expr_allowed. + +2012-03-03 Tobias Burnus <burnus@net-b.de> + + * lang.opt (Wc-binding-type): New flag. + * options.c (gfc_init_options, gfc_handle_option): Handle it. + * invoke.texi (Wc-binding-type): Document it. + * gfortran.h (gfc_option_t): Add warn_c_binding_type. + * decl.c (verify_bind_c_sym): Handle -Wc-binding-type. + * symbol.c (gfc_set_default_type, verify_bind_c_derived_type): + Ditto. + +2012-03-03 Tobias Burnus <burnus@net-b.de> + + PR fortran/48820 + * decl.c (gfc_match_decl_type_spec): Support type(*). + (gfc_verify_c_interop): Allow type(*). + * dump-parse-tree.c (show_typespec): Handle type(*). + * expr.c (gfc_copy_expr): Ditto. + * interface.c (compare_type_rank, compare_parameter, + compare_actual_formal, gfc_procedure_use): Ditto. + * libgfortran.h (bt): Add BT_ASSUMED. + * misc.c (gfc_basic_typename, gfc_typename): Handle type(*). + * module.c (bt_types): Ditto. + * resolve.c (assumed_type_expr_allowed): New static variable. + (resolve_actual_arglist, resolve_variable, resolve_symbol): + Handle type(*). + * trans-expr.c (gfc_conv_procedure_call): Ditto. + * trans-types.c (gfc_typenode_for_spec, gfc_get_dtype): Ditto. + +2012-03-02 Tobias Burnus <burnus@net-b.de> + + PR fortran/52325 + * primary.c (gfc_match_varspec): Add missing ;. + +2012-03-02 Tobias Burnus <burnus@net-b.de> + + PR fortran/52325 + * primary.c (gfc_match_varspec): Add diagnostic for % with + nonderived types. + +2012-03-02 Tobias Burnus <burnus@net-b.de> + + PR fortran/52270 + * expr.c (gfc_check_vardef_context): Fix check for + intent-in polymorphic pointer . + * interface.c (compare_parameter): Allow passing TYPE to + intent-in polymorphic pointer. + +2012-03-02 Tobias Burnus <burnus@net-b.de> + + PR fortran/52452 + * resolve.c (resolve_intrinsic): Don't search for a + function if we know that it is a subroutine. + +2012-02-29 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/52386 + * trans-expr.c (fcncall_realloc_result): Dereference the + descriptor if needed. + +2012-02-22 Tobias Burnus <burnus@net-b.de> + + PR fortran/52335 + * io.c (gfc_match_open): Remove bogus F2003 DELIM= check. + +2012-02-18 Tobias Burnus <burnus@net-b.de> + + PR fortran/52295 + * interface.c (check_interface0): Internal procs in + generic interfaces are allowed in Fortran 2008. + 2012-02-17 Tobias Burnus <burnus@net-b.de> Roland Stigge <stigge@antcom.de> diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index bfa8740288a..a27513646c9 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -361,6 +361,39 @@ gfc_is_class_scalar_expr (gfc_expr *e) } +/* Tells whether the expression E is a reference to a (scalar) class container. + Scalar because array class containers usually have an array reference after + them, and gfc_fix_class_refs will add the missing "_data" component reference + in that case. */ + +bool +gfc_is_class_container_ref (gfc_expr *e) +{ + gfc_ref *ref; + bool result; + + if (e->expr_type != EXPR_VARIABLE) + return e->ts.type == BT_CLASS; + + if (e->symtree->n.sym->ts.type == BT_CLASS) + result = true; + else + result = false; + + for (ref = e->ref; ref; ref = ref->next) + { + if (ref->type != REF_COMPONENT) + result = false; + else if (ref->u.c.component->ts.type == BT_CLASS) + result = true; + else + result = false; + } + + return result; +} + + /* Build a NULL initializer for CLASS pointers, initializing the _data component to NULL and the _vptr component to the declared type. */ diff --git a/gcc/fortran/convert.c b/gcc/fortran/convert.c index 96874fa65e0..be681a51c56 100644 --- a/gcc/fortran/convert.c +++ b/gcc/fortran/convert.c @@ -60,6 +60,50 @@ along with GCC; see the file COPYING3. If not see /* Subroutines of `convert'. */ +/* Prepare expr to be an argument of a TRUTH_NOT_EXPR, + or validate its data type for an `if' or `while' statement or ?..: exp. + + This preparation consists of taking the ordinary + representation of an expression expr and producing a valid tree + boolean expression describing whether expr is nonzero. We could + simply always do build_binary_op (NE_EXPR, expr, boolean_false_node, 1), + but we optimize comparisons, &&, ||, and !. + + The resulting type should always be `boolean_type_node'. + This is much simpler than the corresponding C version because we have a + distinct boolean type. */ + +static tree +gfc_truthvalue_conversion (tree expr) +{ + switch (TREE_CODE (TREE_TYPE (expr))) + { + case BOOLEAN_TYPE: + if (TREE_TYPE (expr) == boolean_type_node) + return expr; + else if (COMPARISON_CLASS_P (expr)) + { + TREE_TYPE (expr) = boolean_type_node; + return expr; + } + else if (TREE_CODE (expr) == NOP_EXPR) + return fold_build1_loc (input_location, NOP_EXPR, + boolean_type_node, TREE_OPERAND (expr, 0)); + else + return fold_build1_loc (input_location, NOP_EXPR, boolean_type_node, + expr); + + case INTEGER_TYPE: + if (TREE_CODE (expr) == INTEGER_CST) + return integer_zerop (expr) ? boolean_false_node : boolean_true_node; + else + return fold_build2_loc (input_location, NE_EXPR, boolean_type_node, + expr, build_int_cst (TREE_TYPE (expr), 0)); + + default: + internal_error ("Unexpected type in truthvalue_conversion"); + } +} /* Create an expression whose value is that of EXPR, converted to type TYPE. The TREE_TYPE of the value diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 43c558a5571..75b8a899c5e 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -2600,9 +2600,31 @@ gfc_match_decl_type_spec (gfc_typespec *ts, int implicit_flag) } - m = gfc_match (" type ( %n", name); + m = gfc_match (" type ("); matched_type = (m == MATCH_YES); - + if (matched_type) + { + gfc_gobble_whitespace (); + if (gfc_peek_ascii_char () == '*') + { + if ((m = gfc_match ("*)")) != MATCH_YES) + return m; + if (gfc_current_state () == COMP_DERIVED) + { + gfc_error ("Assumed type at %C is not allowed for components"); + return MATCH_ERROR; + } + if (gfc_notify_std (GFC_STD_F2008_TS, "TS 29113: Assumed type " + "at %C") == FAILURE) + return MATCH_ERROR; + ts->type = BT_ASSUMED; + return MATCH_YES; + } + + m = gfc_match ("%n", name); + matched_type = (m == MATCH_YES); + } + if ((matched_type && strcmp ("integer", name) == 0) || (!matched_type && gfc_match (" integer") == MATCH_YES)) { @@ -3854,9 +3876,9 @@ gfc_verify_c_interop (gfc_typespec *ts) ? SUCCESS : FAILURE; else if (ts->type == BT_CLASS) return FAILURE; - else if (ts->is_c_interop != 1) + else if (ts->is_c_interop != 1 && ts->type != BT_ASSUMED) return FAILURE; - + return SUCCESS; } @@ -3908,7 +3930,7 @@ verify_bind_c_sym (gfc_symbol *tmp_sym, gfc_typespec *ts, { tmp_sym = tmp_sym->result; /* Make sure it wasn't an implicitly typed result. */ - if (tmp_sym->attr.implicit_type) + if (tmp_sym->attr.implicit_type && gfc_option.warn_c_binding_type) { gfc_warning ("Implicitly declared BIND(C) function '%s' at " "%L may not be C interoperable", tmp_sym->name, @@ -3929,7 +3951,7 @@ verify_bind_c_sym (gfc_symbol *tmp_sym, gfc_typespec *ts, if (gfc_verify_c_interop (&(tmp_sym->ts)) != SUCCESS) { /* See if we're dealing with a sym in a common block or not. */ - if (is_in_common == 1) + if (is_in_common == 1 && gfc_option.warn_c_binding_type) { gfc_warning ("Variable '%s' in common block '%s' at %L " "may not be a C interoperable " @@ -3943,7 +3965,7 @@ verify_bind_c_sym (gfc_symbol *tmp_sym, gfc_typespec *ts, gfc_error ("Type declaration '%s' at %L is not C " "interoperable but it is BIND(C)", tmp_sym->name, &(tmp_sym->declared_at)); - else + else if (gfc_option.warn_c_binding_type) gfc_warning ("Variable '%s' at %L " "may not be a C interoperable " "kind but it is bind(c)", diff --git a/gcc/fortran/dump-parse-tree.c b/gcc/fortran/dump-parse-tree.c index c715b30d397..7f1d28fd7c9 100644 --- a/gcc/fortran/dump-parse-tree.c +++ b/gcc/fortran/dump-parse-tree.c @@ -94,6 +94,12 @@ show_indent (void) static void show_typespec (gfc_typespec *ts) { + if (ts->type == BT_ASSUMED) + { + fputs ("(TYPE(*))", dumpfile); + return; + } + fprintf (dumpfile, "(%s ", gfc_basic_typename (ts->type)); switch (ts->type) diff --git a/gcc/fortran/error.c b/gcc/fortran/error.c index aee9173b669..a8c2b63a6d9 100644 --- a/gcc/fortran/error.c +++ b/gcc/fortran/error.c @@ -175,7 +175,39 @@ error_integer (long int i) } -static void +static size_t +gfc_widechar_display_length (gfc_char_t c) +{ + if (gfc_wide_is_printable (c)) + /* Simple ASCII character */ + return 1; + else if (c < ((gfc_char_t) 1 << 8)) + /* Displayed as \x?? */ + return 4; + else if (c < ((gfc_char_t) 1 << 16)) + /* Displayed as \u???? */ + return 6; + else + /* Displayed as \U???????? */ + return 10; +} + + +/* Length of the ASCII representation of the wide string, escaping wide + characters as print_wide_char_into_buffer() does. */ + +static size_t +gfc_wide_display_length (const gfc_char_t *str) +{ + size_t i, len; + + for (i = 0, len = 0; str[i]; i++) + len += gfc_widechar_display_length (str[i]); + + return len; +} + +static int print_wide_char_into_buffer (gfc_char_t c, char *buf) { static const char xdigit[16] = { '0', '1', '2', '3', '4', '5', '6', @@ -185,6 +217,7 @@ print_wide_char_into_buffer (gfc_char_t c, char *buf) { buf[1] = '\0'; buf[0] = (unsigned char) c; + return 1; } else if (c < ((gfc_char_t) 1 << 8)) { @@ -195,6 +228,7 @@ print_wide_char_into_buffer (gfc_char_t c, char *buf) buf[1] = 'x'; buf[0] = '\\'; + return 4; } else if (c < ((gfc_char_t) 1 << 16)) { @@ -209,6 +243,7 @@ print_wide_char_into_buffer (gfc_char_t c, char *buf) buf[1] = 'u'; buf[0] = '\\'; + return 6; } else { @@ -231,6 +266,7 @@ print_wide_char_into_buffer (gfc_char_t c, char *buf) buf[1] = 'U'; buf[0] = '\\'; + return 10; } } @@ -326,16 +362,12 @@ show_locus (locus *loc, int c1, int c2) show up on the terminal. Tabs are converted to spaces, and nonprintable characters are converted to a "\xNN" sequence. */ - /* TODO: Although setting i to the terminal width is clever, it fails - to work correctly when nonprintable characters exist. A better - solution should be found. */ - p = &(lb->line[offset]); - i = gfc_wide_strlen (p); + i = gfc_wide_display_length (p); if (i > terminal_width) i = terminal_width - 1; - for (; i > 0; i--) + while (i > 0) { static char buffer[11]; @@ -343,7 +375,7 @@ show_locus (locus *loc, int c1, int c2) if (c == '\t') c = ' '; - print_wide_char_into_buffer (c, buffer); + i -= print_wide_char_into_buffer (c, buffer); error_string (buffer); } @@ -356,13 +388,18 @@ show_locus (locus *loc, int c1, int c2) c1 -= offset; c2 -= offset; + p = &(lb->line[offset]); for (i = 0; i <= cmax; i++) { + int spaces, j; + spaces = gfc_widechar_display_length (*p++); + if (i == c1) - error_char ('1'); + error_char ('1'), spaces--; else if (i == c2) - error_char ('2'); - else + error_char ('2'), spaces--; + + for (j = 0; j < spaces; j++) error_char (' '); } diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index 129ece35507..e6a9c885f02 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -336,6 +336,7 @@ gfc_copy_expr (gfc_expr *p) case BT_LOGICAL: case BT_DERIVED: case BT_CLASS: + case BT_ASSUMED: break; /* Already done. */ case BT_PROCEDURE: @@ -4648,7 +4649,8 @@ gfc_check_vardef_context (gfc_expr* e, bool pointer, bool alloc_obj, the component of sub-component of a pointer. Obviously, procedure pointers are of no interest here. */ check_intentin = true; - ptr_component = sym->attr.pointer; + ptr_component = (sym->ts.type == BT_CLASS && CLASS_DATA (sym)) + ? CLASS_DATA (sym)->attr.class_pointer : sym->attr.pointer; for (ref = e->ref; ref && check_intentin; ref = ref->next) { if (ptr_component && ref->type == REF_COMPONENT) diff --git a/gcc/fortran/f95-lang.c b/gcc/fortran/f95-lang.c index a68d2fc8382..08d22172e18 100644 --- a/gcc/fortran/f95-lang.c +++ b/gcc/fortran/f95-lang.c @@ -60,7 +60,6 @@ lang_identifier { union GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"), chain_next ("CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL"))) - lang_tree_node { union tree_node GTY((tag ("0"), desc ("tree_node_structure (&%h)"))) generic; @@ -77,25 +76,18 @@ language_function { struct binding_level *binding_level; }; -/* We don't have a lex/yacc lexer/parser, but toplev expects these to - exist anyway. */ -void yyerror (const char *str); -int yylex (void); - static void gfc_init_decl_processing (void); static void gfc_init_builtin_functions (void); +static bool global_bindings_p (void); /* Each front end provides its own. */ static bool gfc_init (void); static void gfc_finish (void); static void gfc_write_global_declarations (void); -static void gfc_print_identifier (FILE *, tree, int); -void do_function_end (void); -bool global_bindings_p (void); -static void clear_binding_stack (void); static void gfc_be_parse_file (void); static alias_set_type gfc_get_alias_set (tree); static void gfc_init_ts (void); +static tree gfc_builtin_function (tree); #undef LANG_HOOKS_NAME #undef LANG_HOOKS_INIT @@ -106,7 +98,6 @@ static void gfc_init_ts (void); #undef LANG_HOOKS_INIT_OPTIONS #undef LANG_HOOKS_HANDLE_OPTION #undef LANG_HOOKS_POST_OPTIONS -#undef LANG_HOOKS_PRINT_IDENTIFIER #undef LANG_HOOKS_PARSE_FILE #undef LANG_HOOKS_MARK_ADDRESSABLE #undef LANG_HOOKS_TYPE_FOR_MODE @@ -125,6 +116,7 @@ static void gfc_init_ts (void); #undef LANG_HOOKS_OMP_PRIVATE_OUTER_REF #undef LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES #undef LANG_HOOKS_BUILTIN_FUNCTION +#undef LANG_HOOKS_BUILTIN_FUNCTION #undef LANG_HOOKS_GET_ARRAY_DESCR_INFO /* Define lang hooks. */ @@ -137,7 +129,6 @@ static void gfc_init_ts (void); #define LANG_HOOKS_INIT_OPTIONS gfc_init_options #define LANG_HOOKS_HANDLE_OPTION gfc_handle_option #define LANG_HOOKS_POST_OPTIONS gfc_post_options -#define LANG_HOOKS_PRINT_IDENTIFIER gfc_print_identifier #define LANG_HOOKS_PARSE_FILE gfc_be_parse_file #define LANG_HOOKS_TYPE_FOR_MODE gfc_type_for_mode #define LANG_HOOKS_TYPE_FOR_SIZE gfc_type_for_size @@ -166,64 +157,13 @@ struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; static GTY(()) struct binding_level *free_binding_level; -/* The elements of `ridpointers' are identifier nodes - for the reserved type names and storage classes. - It is indexed by a RID_... value. */ -tree *ridpointers = NULL; - /* True means we've initialized exception handling. */ -bool gfc_eh_initialized_p; +static bool gfc_eh_initialized_p; /* The current translation unit. */ static GTY(()) tree current_translation_unit; -/* Prepare expr to be an argument of a TRUTH_NOT_EXPR, - or validate its data type for an `if' or `while' statement or ?..: exp. - - This preparation consists of taking the ordinary - representation of an expression expr and producing a valid tree - boolean expression describing whether expr is nonzero. We could - simply always do build_binary_op (NE_EXPR, expr, boolean_false_node, 1), - but we optimize comparisons, &&, ||, and !. - - The resulting type should always be `boolean_type_node'. - This is much simpler than the corresponding C version because we have a - distinct boolean type. */ - -tree -gfc_truthvalue_conversion (tree expr) -{ - switch (TREE_CODE (TREE_TYPE (expr))) - { - case BOOLEAN_TYPE: - if (TREE_TYPE (expr) == boolean_type_node) - return expr; - else if (COMPARISON_CLASS_P (expr)) - { - TREE_TYPE (expr) = boolean_type_node; - return expr; - } - else if (TREE_CODE (expr) == NOP_EXPR) - return fold_build1_loc (input_location, NOP_EXPR, - boolean_type_node, TREE_OPERAND (expr, 0)); - else - return fold_build1_loc (input_location, NOP_EXPR, boolean_type_node, - expr); - - case INTEGER_TYPE: - if (TREE_CODE (expr) == INTEGER_CST) - return integer_zerop (expr) ? boolean_false_node : boolean_true_node; - else - return fold_build2_loc (input_location, NE_EXPR, boolean_type_node, - expr, build_int_cst (TREE_TYPE (expr), 0)); - - default: - internal_error ("Unexpected type in truthvalue_conversion"); - } -} - - static void gfc_create_decls (void) { @@ -255,7 +195,9 @@ gfc_be_parse_file (void) errorcount += errors; warningcount += warnings; - clear_binding_stack (); + /* Clear the binding level stack. */ + while (!global_bindings_p ()) + poplevel (0, 0); } @@ -322,16 +264,6 @@ gfc_write_global_declarations (void) write_global_declarations (); } - -static void -gfc_print_identifier (FILE * file ATTRIBUTE_UNUSED, - tree node ATTRIBUTE_UNUSED, - int indent ATTRIBUTE_UNUSED) -{ - return; -} - - /* These functions and variables deal with binding contours. We only need these functions for the list of PARM_DECLs, but we leave the functions more general; these are a simplified version of the @@ -351,9 +283,7 @@ struct GTY(()) binding_level { /* A chain of ..._DECL nodes for all variables, constants, functions, parameters and type declarations. These ..._DECL nodes are chained - through the DECL_CHAIN field. Note that these ..._DECL nodes are stored - in the reverse of the order supplied to be compatible with the - back-end. */ + through the DECL_CHAIN field. */ tree names; /* For each level (except the global one), a chain of BLOCK nodes for all the levels that were entered and exited one level down from this one. */ @@ -387,11 +317,10 @@ getdecls (void) return current_binding_level->names; } -/* Enter a new binding level. The input parameter is ignored, but has to be - specified for back-end compatibility. */ +/* Enter a new binding level. */ void -pushlevel (int ignore ATTRIBUTE_UNUSED) +pushlevel (void) { struct binding_level *newlevel = ggc_alloc_binding_level (); @@ -413,29 +342,19 @@ pushlevel (int ignore ATTRIBUTE_UNUSED) If FUNCTIONBODY is nonzero, this level is the body of a function, so create a block as if KEEP were set and also clear out all - label names. - - If REVERSE is nonzero, reverse the order of decls before putting - them into the BLOCK. */ + label names. */ tree -poplevel (int keep, int reverse, int functionbody) +poplevel (int keep, int functionbody) { /* Points to a BLOCK tree node. This is the BLOCK node constructed for the binding level that we are about to exit and which is returned by this routine. */ tree block_node = NULL_TREE; - tree decl_chain; + tree decl_chain = current_binding_level->names; tree subblock_chain = current_binding_level->blocks; tree subblock_node; - /* Reverse the list of XXXX_DECL nodes if desired. Note that the ..._DECL - nodes chained through the `names' field of current_binding_level are in - reverse order except for PARM_DECL node, which are explicitly stored in - the right order. */ - decl_chain = (reverse) ? nreverse (current_binding_level->names) - : current_binding_level->names; - /* If there were any declarations in the current binding level, or if this binding level is a function body, or if there are any nested blocks then create a BLOCK node to record them for the life of this function. */ @@ -513,10 +432,7 @@ pushdecl (tree decl) DECL_CONTEXT (decl) = current_function_decl; } - /* Put the declaration on the list. The list of declarations is in reverse - order. The list will be reversed later if necessary. This needs to be - this way for compatibility with the back-end. */ - + /* Put the declaration on the list. */ DECL_CHAIN (decl) = current_binding_level->names; current_binding_level->names = decl; @@ -548,16 +464,6 @@ pushdecl_top_level (tree x) return t; } - -/* Clear the binding stack. */ -static void -clear_binding_stack (void) -{ - while (!global_bindings_p ()) - poplevel (0, 0, 0); -} - - #ifndef CHAR_TYPE_SIZE #define CHAR_TYPE_SIZE BITS_PER_UNIT #endif @@ -582,7 +488,7 @@ gfc_init_decl_processing (void) /* Make the binding_level structure for global names. We move all variables that are in a COMMON block to this binding level. */ - pushlevel (0); + pushlevel (); global_binding_level = current_binding_level; /* Build common tree nodes. char_type_node is unsigned because we @@ -617,17 +523,11 @@ gfc_get_alias_set (tree t) return -1; } - -/* press the big red button - garbage (ggc) collection is on */ - -int ggc_p = 1; - /* Builtin function initialization. */ -tree +static tree gfc_builtin_function (tree decl) { - make_decl_rtl (decl); pushdecl (decl); return decl; } diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index a5edd1306ad..d764b62b729 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -2200,6 +2200,7 @@ typedef struct int warn_aliasing; int warn_ampersand; int gfc_warn_conversion; + int warn_c_binding_type; int warn_conversion_extra; int warn_function_elimination; int warn_implicit_interface; @@ -2929,6 +2930,7 @@ void gfc_add_class_array_ref (gfc_expr *); #define gfc_add_def_init_component(e) gfc_add_component_ref(e,"_def_init") bool gfc_is_class_array_ref (gfc_expr *, bool *); bool gfc_is_class_scalar_expr (gfc_expr *); +bool gfc_is_class_container_ref (gfc_expr *e); gfc_expr *gfc_class_null_initializer (gfc_typespec *); unsigned int gfc_hash_value (gfc_symbol *); gfc_try gfc_build_class_symbol (gfc_typespec *, symbol_attribute *, diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 16a2be9c9bb..298ae23d260 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -514,7 +514,8 @@ compare_type_rank (gfc_symbol *s1, gfc_symbol *s2) if (r1 != r2) return 0; /* Ranks differ. */ - return gfc_compare_types (&s1->ts, &s2->ts); + return gfc_compare_types (&s1->ts, &s2->ts) + || s1->ts.type == BT_ASSUMED || s2->ts.type == BT_ASSUMED; } @@ -1292,9 +1293,10 @@ check_interface0 (gfc_interface *p, const char *interface_name) return 1; } + /* F2003, C1207. F2008, C1207. */ if (p->sym->attr.proc == PROC_INTERNAL - && gfc_notify_std (GFC_STD_GNU, "Extension: Internal procedure '%s' " - "in %s at %L", p->sym->name, interface_name, + && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: Internal procedure " + "'%s' in %s at %L", p->sym->name, interface_name, &p->sym->declared_at) == FAILURE) return 1; } @@ -1578,7 +1580,9 @@ compare_pointer (gfc_symbol *formal, gfc_expr *actual) { symbol_attribute attr; - if (formal->attr.pointer) + if (formal->attr.pointer + || (formal->ts.type == BT_CLASS && CLASS_DATA (formal) + && CLASS_DATA (formal)->attr.class_pointer)) { attr = gfc_expr_attr (actual); @@ -1694,6 +1698,7 @@ compare_parameter (gfc_symbol *formal, gfc_expr *actual, if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN) && actual->ts.type != BT_HOLLERITH + && formal->ts.type != BT_ASSUMED && !gfc_compare_types (&formal->ts, &actual->ts) && !(formal->ts.type == BT_DERIVED && actual->ts.type == BT_CLASS && gfc_compare_derived_types (formal->ts.u.derived, @@ -1705,10 +1710,11 @@ compare_parameter (gfc_symbol *formal, gfc_expr *actual, gfc_typename (&formal->ts)); return 0; } - - /* F2008, 12.5.2.5. */ + + /* F2008, 12.5.2.5; IR F08/0073. */ if (formal->ts.type == BT_CLASS - && (CLASS_DATA (formal)->attr.class_pointer + && ((CLASS_DATA (formal)->attr.class_pointer + && !formal->attr.intent == INTENT_IN) || CLASS_DATA (formal)->attr.allocatable)) { if (actual->ts.type != BT_CLASS) @@ -2270,6 +2276,27 @@ compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal, is_elemental, where)) return 0; + /* TS 29113, 6.3p2. */ + if (f->sym->ts.type == BT_ASSUMED + && (a->expr->ts.type == BT_DERIVED + || (a->expr->ts.type == BT_CLASS && CLASS_DATA (a->expr)))) + { + gfc_namespace *f2k_derived; + + f2k_derived = a->expr->ts.type == BT_DERIVED + ? a->expr->ts.u.derived->f2k_derived + : CLASS_DATA (a->expr)->ts.u.derived->f2k_derived; + + if (f2k_derived + && (f2k_derived->finalizers || f2k_derived->tb_sym_root)) + { + gfc_error ("Actual argument at %L to assumed-type dummy is of " + "derived type with type-bound or FINAL procedures", + &a->expr->where); + return FAILURE; + } + } + /* Special case for character arguments. For allocatable, pointer and assumed-shape dummies, the string length needs to match exactly. */ @@ -2881,7 +2908,6 @@ check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a) void gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where) { - /* Warn about calls with an implicit interface. Special case for calling a ISO_C_BINDING becase c_loc and c_funloc are pseudo-unknown. Additionally, warn about procedures not @@ -2934,6 +2960,16 @@ gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where) break; } + /* TS 29113, 6.2. */ + if (a->expr && a->expr->ts.type == BT_ASSUMED + && sym->intmod_sym_id != ISOCBINDING_LOC) + { + gfc_error ("Assumed-type argument %s at %L requires an explicit " + "interface", a->expr->symtree->n.sym->name, + &a->expr->where); + break; + } + /* F2008, C1303 and C1304. */ if (a->expr && (a->expr->ts.type == BT_DERIVED || a->expr->ts.type == BT_CLASS) diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi index 1f6de84b99f..38ebfe991b2 100644 --- a/gcc/fortran/invoke.texi +++ b/gcc/fortran/invoke.texi @@ -142,7 +142,7 @@ by type. Explanations are in the following sections. @xref{Error and Warning Options,,Options to request or suppress errors and warnings}. @gccoptlist{-Waliasing -Wall -Wampersand -Warray-bounds --Wcharacter-truncation @gol +-Wc-binding-type -Wcharacter-truncation @gol -Wconversion -Wfunction-elimination -Wimplicit-interface @gol -Wimplicit-procedure -Wintrinsic-shadow -Wintrinsics-std @gol -Wline-truncation -Wno-align-commons -Wno-tabs -Wreal-q-constant @gol @@ -773,6 +773,14 @@ Warn about array temporaries generated by the compiler. The information generated by this warning is sometimes useful in optimization, in order to avoid such temporaries. +@item -Wc-binding-type +@opindex @code{Wc-binding-type} +@cindex warning, C binding type +Warn if the a variable might not be C interoperable. In particular, warn if +the variable has been declared using an intrinsic type with default kind +instead of using a kind parameter defined for C interoperability in the +intrinsic @code{ISO_C_Binding} module. + @item -Wcharacter-truncation @opindex @code{Wcharacter-truncation} @cindex warnings, character truncation diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index b7eac6c9be1..7caadc5056c 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -1947,10 +1947,6 @@ gfc_match_open (void) /* Checks on the DELIM specifier. */ if (open->delim) { - if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: DELIM= at %C " - "not allowed in Fortran 95") == FAILURE) - goto cleanup; - if (open->delim->expr_type == EXPR_CONSTANT) { static const char *delim[] = { "APOSTROPHE", "QUOTE", "NONE", NULL }; diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt index 56c589c6bdf..7e160a0c456 100644 --- a/gcc/fortran/lang.opt +++ b/gcc/fortran/lang.opt @@ -210,6 +210,10 @@ Warray-temporaries Fortran Warning Warn about creation of array temporaries +Wc-binding-type +Fortran Warning +Warn if the type of a variable might be not interoperable with C + Wcharacter-truncation Fortran Warning Warn about truncated character expressions diff --git a/gcc/fortran/libgfortran.h b/gcc/fortran/libgfortran.h index 3f36fe88bbf..62afc21e12e 100644 --- a/gcc/fortran/libgfortran.h +++ b/gcc/fortran/libgfortran.h @@ -129,6 +129,7 @@ libgfortran_stat_codes; used in the run-time library for IO. */ typedef enum { BT_UNKNOWN = 0, BT_INTEGER, BT_LOGICAL, BT_REAL, BT_COMPLEX, - BT_DERIVED, BT_CHARACTER, BT_CLASS, BT_PROCEDURE, BT_HOLLERITH, BT_VOID + BT_DERIVED, BT_CHARACTER, BT_CLASS, BT_PROCEDURE, BT_HOLLERITH, BT_VOID, + BT_ASSUMED } bt; diff --git a/gcc/fortran/misc.c b/gcc/fortran/misc.c index 05aef9f02ea..012364ae774 100644 --- a/gcc/fortran/misc.c +++ b/gcc/fortran/misc.c @@ -107,6 +107,9 @@ gfc_basic_typename (bt type) case BT_UNKNOWN: p = "UNKNOWN"; break; + case BT_ASSUMED: + p = "TYPE(*)"; + break; default: gfc_internal_error ("gfc_basic_typename(): Undefined type"); } @@ -157,6 +160,9 @@ gfc_typename (gfc_typespec *ts) sprintf (buffer, "CLASS(%s)", ts->u.derived->components->ts.u.derived->name); break; + case BT_ASSUMED: + sprintf (buffer, "TYPE(*)"); + break; case BT_PROCEDURE: strcpy (buffer, "PROCEDURE"); break; diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 5e0f26e1e5f..05ed2a2b9fd 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -2244,6 +2244,7 @@ static const mstring bt_types[] = { minit ("PROCEDURE", BT_PROCEDURE), minit ("UNKNOWN", BT_UNKNOWN), minit ("VOID", BT_VOID), + minit ("ASSUMED", BT_ASSUMED), minit (NULL, -1) }; @@ -6089,22 +6090,17 @@ gfc_use_module (gfc_use_list *module) parse_name (c); if ((start == 1 && strcmp (atom_name, "GFORTRAN") != 0) || (start == 2 && strcmp (atom_name, " module") != 0)) - gfc_fatal_error ("File '%s' opened at %C is not a GFORTRAN module " - "file", filename); + gfc_fatal_error ("File '%s' opened at %C is not a GNU Fortran" + " module file", filename); if (start == 3) { if (strcmp (atom_name, " version") != 0 || module_char () != ' ' - || parse_atom () != ATOM_STRING) - gfc_fatal_error ("Parse error when checking module version" - " for file '%s' opened at %C", filename); - - if (strcmp (atom_string, MOD_VERSION)) - { - gfc_fatal_error ("Wrong module version '%s' (expected '%s') " - "for file '%s' opened at %C", atom_string, - MOD_VERSION, filename); - } + || parse_atom () != ATOM_STRING + || strcmp (atom_string, MOD_VERSION)) + gfc_fatal_error ("Cannot read module file '%s' opened at %C," + " because it was created by a different" + " version of GNU Fortran", filename); free (atom_string); } diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index b6929fce1f2..1010a93844c 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -97,6 +97,7 @@ gfc_init_options (unsigned int decoded_options_count, gfc_option.warn_ampersand = 0; gfc_option.warn_character_truncation = 0; gfc_option.warn_array_temp = 0; + gfc_option.warn_c_binding_type = 0; gfc_option.gfc_warn_conversion = 0; gfc_option.warn_conversion_extra = 0; gfc_option.warn_function_elimination = 0; @@ -456,6 +457,7 @@ set_Wall (int setting) { gfc_option.warn_aliasing = setting; gfc_option.warn_ampersand = setting; + gfc_option.warn_c_binding_type = setting; gfc_option.gfc_warn_conversion = setting; gfc_option.warn_line_truncation = setting; gfc_option.warn_surprising = setting; @@ -620,6 +622,10 @@ gfc_handle_option (size_t scode, const char *arg, int value, gfc_option.warn_array_temp = value; break; + case OPT_Wc_binding_type: + gfc_option.warn_c_binding_type = value; + break; + case OPT_Wcharacter_truncation: gfc_option.warn_character_truncation = value; break; diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index d1d96ffa68e..41e2fa81efb 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -1910,6 +1910,19 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag, && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED) gfc_set_default_type (sym, 0, sym->ns); + if (sym->ts.type == BT_UNKNOWN && gfc_match_char ('%') == MATCH_YES) + { + gfc_error ("Symbol '%s' at %C has no IMPLICIT type", sym->name); + return MATCH_ERROR; + } + else if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS) + && gfc_match_char ('%') == MATCH_YES) + { + gfc_error ("Unexpected '%%' for nonderived-type variable '%s' at %C", + sym->name); + return MATCH_ERROR; + } + if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS) || gfc_match_char ('%') != MATCH_YES) goto check_substring; diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 4dcf9b1b07c..b63a0c69e6a 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -63,6 +63,8 @@ static code_stack *cs_base = NULL; static int forall_flag; static int do_concurrent_flag; +static bool assumed_type_expr_allowed = false; + /* Nonzero if we're inside a OpenMP WORKSHARE or PARALLEL WORKSHARE block. */ static int omp_workshare_flag; @@ -1496,7 +1498,7 @@ resolve_intrinsic (gfc_symbol *sym, locus *loc) if (sym->intmod_sym_id) isym = gfc_intrinsic_function_by_id ((gfc_isym_id) sym->intmod_sym_id); - else + else if (!sym->attr.subroutine) isym = gfc_find_function (sym->name); if (isym) @@ -1597,6 +1599,8 @@ resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype, gfc_expr *e; int save_need_full_assumed_size; + assumed_type_expr_allowed = true; + for (; arg; arg = arg->next) { e = arg->expr; @@ -1829,6 +1833,7 @@ resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype, return FAILURE; } } + assumed_type_expr_allowed = false; return SUCCESS; } @@ -5057,6 +5062,24 @@ resolve_variable (gfc_expr *e) return FAILURE; sym = e->symtree->n.sym; + /* TS 29113, 407b. */ + if (e->ts.type == BT_ASSUMED && !assumed_type_expr_allowed) + { + gfc_error ("Invalid expression with assumed-type variable %s at %L", + sym->name, &e->where); + return FAILURE; + } + + /* TS 29113, 407b. */ + if (e->ts.type == BT_ASSUMED && e->ref + && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL + && e->ref->next == NULL)) + { + gfc_error ("Assumed-type variable %s with designator at %L", + sym->name, &e->ref->u.ar.where); + return FAILURE; + } + /* If this is an associate-name, it may be parsed with an array reference in error even though the target is scalar. Fail directly in this case. */ if (sym->assoc && !sym->attr.dimension && e->ref && e->ref->type == REF_ARRAY) @@ -12435,6 +12458,31 @@ resolve_symbol (gfc_symbol *sym) } } + if (sym->ts.type == BT_ASSUMED) + { + /* TS 29113, C407a. */ + if (!sym->attr.dummy) + { + gfc_error ("Assumed type of variable %s at %L is only permitted " + "for dummy variables", sym->name, &sym->declared_at); + return; + } + if (sym->attr.allocatable || sym->attr.codimension + || sym->attr.pointer || sym->attr.value) + { + gfc_error ("Assumed-type variable %s at %L may not have the " + "ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute", + sym->name, &sym->declared_at); + return; + } + if (sym->attr.dimension && sym->as->type == AS_EXPLICIT) + { + gfc_error ("Assumed-type variable %s at %L shall not be an " + "explicit-shape array", sym->name, &sym->declared_at); + return; + } + } + /* If the symbol is marked as bind(c), verify it's type and kind. Do not do this for something that was implicitly typed because that is handled in gfc_set_default_type. Handle dummy arguments and procedure diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index 0cd7cc8d3e3..46e5f56feee 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -274,7 +274,7 @@ gfc_set_default_type (gfc_symbol *sym, int error_flag, gfc_namespace *ns) if (ts->type == BT_CHARACTER && ts->u.cl) sym->ts.u.cl = gfc_new_charlen (sym->ns, ts->u.cl); - if (sym->attr.is_bind_c == 1) + if (sym->attr.is_bind_c == 1 && gfc_option.warn_c_binding_type) { /* BIND(C) variables should not be implicitly declared. */ gfc_warning_now ("Implicitly declared BIND(C) variable '%s' at %L may " @@ -287,7 +287,8 @@ gfc_set_default_type (gfc_symbol *sym, int error_flag, gfc_namespace *ns) if (sym->ns->proc_name != NULL && (sym->ns->proc_name->attr.subroutine != 0 || sym->ns->proc_name->attr.function != 0) - && sym->ns->proc_name->attr.is_bind_c != 0) + && sym->ns->proc_name->attr.is_bind_c != 0 + && gfc_option.warn_c_binding_type) { /* Dummy args to a BIND(C) routine may not be interoperable if they are implicitly typed. */ @@ -3694,7 +3695,8 @@ verify_bind_c_derived_type (gfc_symbol *derived_sym) recompiles with different flags (e.g., -m32 and -m64 on x86_64 and using integer(4) to claim interop with a C_LONG). */ - if (derived_sym->attr.is_bind_c == 1) + if (derived_sym->attr.is_bind_c == 1 + && gfc_option.warn_c_binding_type) /* If the derived type is bind(c), all fields must be interop. */ gfc_warning ("Component '%s' in derived type '%s' at %L " @@ -3702,7 +3704,7 @@ verify_bind_c_derived_type (gfc_symbol *derived_sym) "derived type '%s' is BIND(C)", curr_comp->name, derived_sym->name, &(curr_comp->loc), derived_sym->name); - else + else if (gfc_option.warn_c_binding_type) /* If derived type is param to bind(c) routine, or to one of the iso_c_binding procs, it must be interoperable, so all fields must interop too. */ diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index bbe5afeebbf..b54c95b4087 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -2448,7 +2448,7 @@ gfc_add_loop_ss_code (gfc_loopinfo * loop, gfc_ss * ss, bool subscript, case GFC_SS_REFERENCE: /* Scalar argument to elemental procedure. */ gfc_init_se (&se, NULL); - if (ss_info->data.scalar.can_be_null_ref) + if (ss_info->can_be_null_ref) { /* If the actual argument can be absent (in other words, it can be a NULL reference), don't try to evaluate it; pass instead @@ -8493,17 +8493,18 @@ gfc_walk_elemental_function_args (gfc_ss * ss, gfc_actual_arglist *arg, newss = gfc_get_scalar_ss (head, arg->expr); newss->info->type = type; - if (dummy_arg != NULL - && dummy_arg->sym->attr.optional - && arg->expr->expr_type == EXPR_VARIABLE - && (gfc_expr_attr (arg->expr).optional - || gfc_expr_attr (arg->expr).allocatable - || gfc_expr_attr (arg->expr).pointer)) - newss->info->data.scalar.can_be_null_ref = true; } else scalar = 0; + if (dummy_arg != NULL + && dummy_arg->sym->attr.optional + && arg->expr->expr_type == EXPR_VARIABLE + && (gfc_expr_attr (arg->expr).optional + || gfc_expr_attr (arg->expr).allocatable + || gfc_expr_attr (arg->expr).pointer)) + newss->info->can_be_null_ref = true; + head = newss; if (!tail) { diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index e497fd6ede3..8a1dd2ecd97 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -2256,7 +2256,7 @@ trans_function_start (gfc_symbol * sym) init_function_start (fndecl); /* function.c requires a push at the start of the function. */ - pushlevel (0); + pushlevel (); } /* Create thunks for alternate entry points. */ @@ -2398,7 +2398,7 @@ build_entry_thunks (gfc_namespace * ns, bool global) /* Finish off this function and send it for code generation. */ DECL_SAVED_TREE (thunk_fndecl) = gfc_finish_block (&body); tmp = getdecls (); - poplevel (1, 0, 1); + poplevel (1, 1); BLOCK_SUPERCONTEXT (DECL_INITIAL (thunk_fndecl)) = thunk_fndecl; DECL_SAVED_TREE (thunk_fndecl) = build3_v (BIND_EXPR, tmp, DECL_SAVED_TREE (thunk_fndecl), @@ -4400,7 +4400,7 @@ generate_coarray_init (gfc_namespace * ns __attribute((unused))) make_decl_rtl (fndecl); init_function_start (fndecl); - pushlevel (0); + pushlevel (); gfc_init_block (&caf_init_block); gfc_traverse_ns (ns, generate_coarray_sym_init); @@ -4408,7 +4408,7 @@ generate_coarray_init (gfc_namespace * ns __attribute((unused))) DECL_SAVED_TREE (fndecl) = gfc_finish_block (&caf_init_block); decl = getdecls (); - poplevel (1, 0, 1); + poplevel (1, 1); BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl; DECL_SAVED_TREE (fndecl) @@ -4971,7 +4971,7 @@ create_main_function (tree fndecl) rest_of_decl_compilation (ftn_main, 1, 0); make_decl_rtl (ftn_main); init_function_start (ftn_main); - pushlevel (0); + pushlevel (); gfc_init_block (&body); @@ -5139,7 +5139,7 @@ create_main_function (tree fndecl) decl = getdecls (); /* Finish off this function and send it for code generation. */ - poplevel (1, 0, 1); + poplevel (1, 1); BLOCK_SUPERCONTEXT (DECL_INITIAL (ftn_main)) = ftn_main; DECL_SAVED_TREE (ftn_main) @@ -5428,7 +5428,7 @@ gfc_generate_function_code (gfc_namespace * ns) decl = getdecls (); /* Finish off this function and send it for code generation. */ - poplevel (1, 0, 1); + poplevel (1, 1); BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl; DECL_SAVED_TREE (fndecl) @@ -5522,7 +5522,7 @@ gfc_generate_constructors (void) init_function_start (fndecl); - pushlevel (0); + pushlevel (); for (; gfc_static_ctors; gfc_static_ctors = TREE_CHAIN (gfc_static_ctors)) { @@ -5532,7 +5532,7 @@ gfc_generate_constructors (void) } decl = getdecls (); - poplevel (1, 0, 1); + poplevel (1, 1); BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl; DECL_SAVED_TREE (fndecl) diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index ec218384b76..036b55bdf96 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -3522,12 +3522,16 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, } else if (se->ss && se->ss->info->useflags) { + gfc_ss *ss; + + ss = se->ss; + /* An elemental function inside a scalarized loop. */ gfc_init_se (&parmse, se); parm_kind = ELEMENTAL; - if (se->ss->dimen > 0 && e->expr_type == EXPR_VARIABLE - && se->ss->info->data.array.ref == NULL) + if (ss->dimen > 0 && e->expr_type == EXPR_VARIABLE + && ss->info->data.array.ref == NULL) { gfc_conv_tmp_array_ref (&parmse); if (e->ts.type == BT_CHARACTER) @@ -3538,6 +3542,33 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, else gfc_conv_expr_reference (&parmse, e); + if (fsym && fsym->ts.type == BT_DERIVED + && gfc_is_class_container_ref (e)) + parmse.expr = gfc_class_data_get (parmse.expr); + + /* If we are passing an absent array as optional dummy to an + elemental procedure, make sure that we pass NULL when the data + pointer is NULL. We need this extra conditional because of + scalarization which passes arrays elements to the procedure, + ignoring the fact that the array can be absent/unallocated/... */ + if (ss->info->can_be_null_ref && ss->info->type != GFC_SS_REFERENCE) + { + tree descriptor_data; + + descriptor_data = ss->info->data.array.data; + tmp = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node, + descriptor_data, + fold_convert (TREE_TYPE (descriptor_data), + null_pointer_node)); + parmse.expr + = fold_build3_loc (input_location, COND_EXPR, + TREE_TYPE (parmse.expr), + gfc_unlikely (tmp), + fold_convert (TREE_TYPE (parmse.expr), + null_pointer_node), + parmse.expr); + } + /* The scalarizer does not repackage the reference to a class array - instead it returns a pointer to the data element. */ if (fsym && fsym->ts.type == BT_CLASS && e->ts.type == BT_CLASS) @@ -3619,7 +3650,8 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, && CLASS_DATA (e)->attr.dimension) gfc_conv_class_to_class (&parmse, e, fsym->ts, false); - if (fsym && fsym->ts.type == BT_DERIVED + if (fsym && (fsym->ts.type == BT_DERIVED + || fsym->ts.type == BT_ASSUMED) && e->ts.type == BT_CLASS && !CLASS_DATA (e)->attr.dimension && !CLASS_DATA (e)->attr.codimension) @@ -5457,7 +5489,7 @@ gfc_conv_expr (gfc_se * se, gfc_expr * expr) se->expr = ss_info->data.scalar.value; /* If the reference can be NULL, the value field contains the reference, not the value the reference points to (see gfc_add_loop_ss_code). */ - if (ss_info->data.scalar.can_be_null_ref) + if (ss_info->can_be_null_ref) se->expr = build_fold_indirect_ref_loc (input_location, se->expr); se->string_length = ss_info->string_length; @@ -6299,6 +6331,8 @@ fcncall_realloc_result (gfc_se *se, int rank) /* Use the allocation done by the library. Substitute the lhs descriptor with a copy, whose data field is nulled.*/ desc = build_fold_indirect_ref_loc (input_location, se->expr); + if (POINTER_TYPE_P (TREE_TYPE (desc))) + desc = build_fold_indirect_ref_loc (input_location, desc); /* Unallocated, the descriptor does not have a dtype. */ tmp = gfc_conv_descriptor_dtype (desc); diff --git a/gcc/fortran/trans-openmp.c b/gcc/fortran/trans-openmp.c index f8b3e2280d0..8d7aa5fe3c3 100644 --- a/gcc/fortran/trans-openmp.c +++ b/gcc/fortran/trans-openmp.c @@ -651,7 +651,7 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where) gcc_assert (t == SUCCESS); /* Create the init statement list. */ - pushlevel (0); + pushlevel (); if (GFC_DESCRIPTOR_TYPE_P (type) && GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE) { @@ -691,13 +691,13 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where) else stmt = gfc_trans_assignment (e1, e2, false, false); if (TREE_CODE (stmt) != BIND_EXPR) - stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0)); else - poplevel (0, 0, 0); + poplevel (0, 0); OMP_CLAUSE_REDUCTION_INIT (c) = stmt; /* Create the merge statement list. */ - pushlevel (0); + pushlevel (); if (GFC_DESCRIPTOR_TYPE_P (type) && GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE) { @@ -714,9 +714,9 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where) else stmt = gfc_trans_assignment (e3, e4, false, true); if (TREE_CODE (stmt) != BIND_EXPR) - stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0)); else - poplevel (0, 0, 0); + poplevel (0, 0); OMP_CLAUSE_REDUCTION_MERGE (c) = stmt; /* And stick the placeholder VAR_DECL into the clause as well. */ @@ -1001,20 +1001,20 @@ gfc_trans_omp_code (gfc_code *code, bool force_empty) { tree stmt; - pushlevel (0); + pushlevel (); stmt = gfc_trans_code (code); if (TREE_CODE (stmt) != BIND_EXPR) { if (!IS_EMPTY_STMT (stmt) || force_empty) { - tree block = poplevel (1, 0, 0); + tree block = poplevel (1, 0); stmt = build3_v (BIND_EXPR, NULL, stmt, block); } else - poplevel (0, 0, 0); + poplevel (0, 0); } else - poplevel (0, 0, 0); + poplevel (0, 0); return stmt; } @@ -1501,7 +1501,7 @@ gfc_trans_omp_do (gfc_code *code, stmtblock_t *pblock, if (pblock != &block) { - pushlevel (0); + pushlevel (); gfc_start_block (&block); } @@ -1612,12 +1612,12 @@ gfc_trans_omp_parallel_do (gfc_code *code) if (!do_clauses.ordered && do_clauses.sched_kind != OMP_SCHED_STATIC) pblock = █ else - pushlevel (0); + pushlevel (); stmt = gfc_trans_omp_do (code, pblock, &do_clauses, omp_clauses); if (TREE_CODE (stmt) != BIND_EXPR) - stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0)); else - poplevel (0, 0, 0); + poplevel (0, 0); stmt = build2_loc (input_location, OMP_PARALLEL, void_type_node, stmt, omp_clauses); OMP_PARALLEL_COMBINED (stmt) = 1; @@ -1638,12 +1638,12 @@ gfc_trans_omp_parallel_sections (gfc_code *code) gfc_start_block (&block); omp_clauses = gfc_trans_omp_clauses (&block, code->ext.omp_clauses, code->loc); - pushlevel (0); + pushlevel (); stmt = gfc_trans_omp_sections (code, §ion_clauses); if (TREE_CODE (stmt) != BIND_EXPR) - stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0)); else - poplevel (0, 0, 0); + poplevel (0, 0); stmt = build2_loc (input_location, OMP_PARALLEL, void_type_node, stmt, omp_clauses); OMP_PARALLEL_COMBINED (stmt) = 1; @@ -1664,12 +1664,12 @@ gfc_trans_omp_parallel_workshare (gfc_code *code) gfc_start_block (&block); omp_clauses = gfc_trans_omp_clauses (&block, code->ext.omp_clauses, code->loc); - pushlevel (0); + pushlevel (); stmt = gfc_trans_omp_workshare (code, &workshare_clauses); if (TREE_CODE (stmt) != BIND_EXPR) - stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0)); else - poplevel (0, 0, 0); + poplevel (0, 0); stmt = build2_loc (input_location, OMP_PARALLEL, void_type_node, stmt, omp_clauses); OMP_PARALLEL_COMBINED (stmt) = 1; @@ -1763,7 +1763,7 @@ gfc_trans_omp_workshare (gfc_code *code, gfc_omp_clauses *clauses) code = code->block->next; - pushlevel (0); + pushlevel (); gfc_start_block (&block); pblock = █ @@ -1892,14 +1892,14 @@ gfc_trans_omp_workshare (gfc_code *code, gfc_omp_clauses *clauses) { if (!IS_EMPTY_STMT (stmt)) { - tree bindblock = poplevel (1, 0, 0); + tree bindblock = poplevel (1, 0); stmt = build3_v (BIND_EXPR, NULL, stmt, bindblock); } else - poplevel (0, 0, 0); + poplevel (0, 0); } else - poplevel (0, 0, 0); + poplevel (0, 0); if (IS_EMPTY_STMT (stmt) && !clauses->nowait) stmt = gfc_trans_omp_barrier (); diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c index 2579e2356ab..0f2912de1af 100644 --- a/gcc/fortran/trans-types.c +++ b/gcc/fortran/trans-types.c @@ -1118,6 +1118,7 @@ gfc_typenode_for_spec (gfc_typespec * spec) } break; case BT_VOID: + case BT_ASSUMED: /* This is for the second arg to c_f_pointer and c_f_procpointer of the iso_c_binding module, to accept any ptr type. */ basetype = ptr_type_node; @@ -1416,6 +1417,10 @@ gfc_get_dtype (tree type) n = BT_CHARACTER; break; + case POINTER_TYPE: + n = BT_ASSUMED; + break; + default: /* TODO: Don't do dtype for temporary descriptorless arrays. */ /* We can strange array types for temporary arrays. */ @@ -2673,7 +2678,11 @@ gfc_get_function_type (gfc_symbol * sym) || sym->attr.flavor == FL_PROGRAM); if (sym->backend_decl) - return TREE_TYPE (sym->backend_decl); + { + if (sym->attr.proc_pointer) + return TREE_TYPE (TREE_TYPE (sym->backend_decl)); + return TREE_TYPE (sym->backend_decl); + } alternate_return = 0; typelist = NULL; diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c index 8075dbc32e1..5d6e6ef5190 100644 --- a/gcc/fortran/trans.c +++ b/gcc/fortran/trans.c @@ -182,7 +182,7 @@ void gfc_start_block (stmtblock_t * block) { /* Start a new binding level. */ - pushlevel (0); + pushlevel (); block->has_scope = 1; /* The block is empty. */ @@ -215,7 +215,7 @@ gfc_merge_block_scope (stmtblock_t * block) /* Remember the decls in this scope. */ decl = getdecls (); - poplevel (0, 0, 0); + poplevel (0, 0); /* Add them to the parent scope. */ while (decl != NULL_TREE) @@ -250,11 +250,11 @@ gfc_finish_block (stmtblock_t * stmtblock) if (decl) { - block = poplevel (1, 0, 0); + block = poplevel (1, 0); expr = build3_v (BIND_EXPR, decl, expr, block); } else - poplevel (0, 0, 0); + poplevel (0, 0); } return expr; diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index e685a84c388..08a67325274 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -198,9 +198,6 @@ typedef struct gfc_ss_info struct { tree value; - /* Tells whether the reference can be null in the GFC_SS_REFERENCE case. - Used to handle elemental procedures' optional arguments. */ - bool can_be_null_ref; } scalar; @@ -223,6 +220,11 @@ typedef struct gfc_ss_info /* Suppresses precalculation of scalars in WHERE assignments. */ unsigned where:1; + + /* Tells whether the SS is for an actual argument which can be a NULL + reference. In other words, the associated dummy argument is OPTIONAL. + Used to handle elemental procedures. */ + bool can_be_null_ref; } gfc_ss_info; @@ -425,8 +427,6 @@ int gfc_conv_procedure_call (gfc_se *, gfc_symbol *, gfc_actual_arglist *, void gfc_conv_subref_array_arg (gfc_se *, gfc_expr *, int, sym_intent, bool); -/* gfc_trans_* shouldn't call push/poplevel, use gfc_push/pop_scope */ - /* Generate code for a scalar assignment. */ tree gfc_trans_scalar_assign (gfc_se *, gfc_se *, gfc_typespec, bool, bool, bool); @@ -630,11 +630,9 @@ void gfc_trans_deferred_vars (gfc_symbol*, gfc_wrapped_block *); /* In f95-lang.c. */ tree pushdecl (tree); tree pushdecl_top_level (tree); -void pushlevel (int); -tree poplevel (int, int, int); +void pushlevel (void); +tree poplevel (int, int); tree getdecls (void); -tree gfc_truthvalue_conversion (tree); -tree gfc_builtin_function (tree); /* In trans-types.c. */ struct array_descr_info; diff --git a/gcc/function.c b/gcc/function.c index 4508ae22de4..9add7c1a007 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -3998,18 +3998,35 @@ generate_setjmp_warnings (void) /* Reverse the order of elements in the fragment chain T of blocks, - and return the new head of the chain (old last element). */ + and return the new head of the chain (old last element). + In addition to that clear BLOCK_SAME_RANGE flags when needed + and adjust BLOCK_SUPERCONTEXT from the super fragment to + its super fragment origin. */ static tree block_fragments_nreverse (tree t) { - tree prev = 0, block, next; + tree prev = 0, block, next, prev_super = 0; + tree super = BLOCK_SUPERCONTEXT (t); + if (BLOCK_FRAGMENT_ORIGIN (super)) + super = BLOCK_FRAGMENT_ORIGIN (super); for (block = t; block; block = next) { next = BLOCK_FRAGMENT_CHAIN (block); BLOCK_FRAGMENT_CHAIN (block) = prev; + if ((prev && !BLOCK_SAME_RANGE (prev)) + || (BLOCK_FRAGMENT_CHAIN (BLOCK_SUPERCONTEXT (block)) + != prev_super)) + BLOCK_SAME_RANGE (block) = 0; + prev_super = BLOCK_SUPERCONTEXT (block); + BLOCK_SUPERCONTEXT (block) = super; prev = block; } + t = BLOCK_FRAGMENT_ORIGIN (t); + if (BLOCK_FRAGMENT_CHAIN (BLOCK_SUPERCONTEXT (t)) + != prev_super) + BLOCK_SAME_RANGE (t) = 0; + BLOCK_SUPERCONTEXT (t) = super; return prev; } @@ -4026,11 +4043,15 @@ blocks_nreverse_all (tree t) { next = BLOCK_CHAIN (block); BLOCK_CHAIN (block) = prev; - BLOCK_SUBBLOCKS (block) = blocks_nreverse_all (BLOCK_SUBBLOCKS (block)); if (BLOCK_FRAGMENT_CHAIN (block) && BLOCK_FRAGMENT_ORIGIN (block) == NULL_TREE) - BLOCK_FRAGMENT_CHAIN (block) - = block_fragments_nreverse (BLOCK_FRAGMENT_CHAIN (block)); + { + BLOCK_FRAGMENT_CHAIN (block) + = block_fragments_nreverse (BLOCK_FRAGMENT_CHAIN (block)); + if (!BLOCK_SAME_RANGE (BLOCK_FRAGMENT_CHAIN (block))) + BLOCK_SAME_RANGE (block) = 0; + } + BLOCK_SUBBLOCKS (block) = blocks_nreverse_all (BLOCK_SUBBLOCKS (block)); prev = block; } return prev; @@ -4085,6 +4106,7 @@ static void reorder_blocks_1 (rtx insns, tree current_block, VEC(tree,heap) **p_block_stack) { rtx insn; + tree prev_beg = NULL_TREE, prev_end = NULL_TREE; for (insn = insns; insn; insn = NEXT_INSN (insn)) { @@ -4098,12 +4120,17 @@ reorder_blocks_1 (rtx insns, tree current_block, VEC(tree,heap) **p_block_stack) gcc_assert (BLOCK_FRAGMENT_ORIGIN (block) == NULL_TREE); origin = block; + if (prev_end) + BLOCK_SAME_RANGE (prev_end) = 0; + prev_end = NULL_TREE; + /* If we have seen this block before, that means it now spans multiple address regions. Create a new fragment. */ if (TREE_ASM_WRITTEN (block)) { tree new_block = copy_node (block); + BLOCK_SAME_RANGE (new_block) = 0; BLOCK_FRAGMENT_ORIGIN (new_block) = origin; BLOCK_FRAGMENT_CHAIN (new_block) = BLOCK_FRAGMENT_CHAIN (origin); @@ -4113,6 +4140,11 @@ reorder_blocks_1 (rtx insns, tree current_block, VEC(tree,heap) **p_block_stack) block = new_block; } + if (prev_beg == current_block && prev_beg) + BLOCK_SAME_RANGE (block) = 1; + + prev_beg = origin; + BLOCK_SUBBLOCKS (block) = 0; TREE_ASM_WRITTEN (block) = 1; /* When there's only one block for the entire function, @@ -4120,10 +4152,22 @@ reorder_blocks_1 (rtx insns, tree current_block, VEC(tree,heap) **p_block_stack) will cause infinite recursion. */ if (block != current_block) { + tree super; if (block != origin) - gcc_assert (BLOCK_SUPERCONTEXT (origin) == current_block); - - BLOCK_SUPERCONTEXT (block) = current_block; + gcc_assert (BLOCK_SUPERCONTEXT (origin) == current_block + || BLOCK_FRAGMENT_ORIGIN (BLOCK_SUPERCONTEXT + (origin)) + == current_block); + if (VEC_empty (tree, *p_block_stack)) + super = current_block; + else + { + super = VEC_last (tree, *p_block_stack); + gcc_assert (super == current_block + || BLOCK_FRAGMENT_ORIGIN (super) + == current_block); + } + BLOCK_SUPERCONTEXT (block) = super; BLOCK_CHAIN (block) = BLOCK_SUBBLOCKS (current_block); BLOCK_SUBBLOCKS (current_block) = block; current_block = origin; @@ -4134,8 +4178,20 @@ reorder_blocks_1 (rtx insns, tree current_block, VEC(tree,heap) **p_block_stack) { NOTE_BLOCK (insn) = VEC_pop (tree, *p_block_stack); current_block = BLOCK_SUPERCONTEXT (current_block); + if (BLOCK_FRAGMENT_ORIGIN (current_block)) + current_block = BLOCK_FRAGMENT_ORIGIN (current_block); + prev_beg = NULL_TREE; + prev_end = BLOCK_SAME_RANGE (NOTE_BLOCK (insn)) + ? NOTE_BLOCK (insn) : NULL_TREE; } } + else + { + prev_beg = NULL_TREE; + if (prev_end) + BLOCK_SAME_RANGE (prev_end) = 0; + prev_end = NULL_TREE; + } } } diff --git a/gcc/gcc.c b/gcc/gcc.c index c7c8c053ba3..cc6a08eb091 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -2958,7 +2958,7 @@ display_help (void) fputs (_(" -pass-exit-codes Exit with highest error code from a phase\n"), stdout); fputs (_(" --help Display this information\n"), stdout); fputs (_(" --target-help Display target specific command line options\n"), stdout); - fputs (_(" --help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...]\n"), stdout); + fputs (_(" --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...]\n"), stdout); fputs (_(" Display specific types of command line options\n"), stdout); if (! verbose_flag) fputs (_(" (Use '-v --help' to display command line options of sub-processes)\n"), stdout); diff --git a/gcc/genautomata.c b/gcc/genautomata.c index f331f507dae..434b42e0ed3 100644 --- a/gcc/genautomata.c +++ b/gcc/genautomata.c @@ -9285,46 +9285,45 @@ base_file_name (const char *file_name) return file_name + directory_name_length + 1; } +/* A function passed as argument to init_rtx_reader_args_cb. It parses the + options available for genautomata. Returns true if the option was + recognized. */ +static bool +parse_automata_opt (const char *str) +{ + if (strcmp (str, NO_MINIMIZATION_OPTION) == 0) + no_minimization_flag = 1; + else if (strcmp (str, TIME_OPTION) == 0) + time_flag = 1; + else if (strcmp (str, STATS_OPTION) == 0) + stats_flag = 1; + else if (strcmp (str, V_OPTION) == 0) + v_flag = 1; + else if (strcmp (str, W_OPTION) == 0) + w_flag = 1; + else if (strcmp (str, NDFA_OPTION) == 0) + ndfa_flag = 1; + else if (strcmp (str, COLLAPSE_OPTION) == 0) + collapse_flag = 1; + else if (strcmp (str, PROGRESS_OPTION) == 0) + progress_flag = 1; + else if (strcmp (str, "-split") == 0) + { + fatal ("option `-split' has not been implemented yet\n"); + /* split_argument = atoi (argument_vect [i + 1]); */ + } + else + return false; + + return true; +} + /* The following is top level function to initialize the work of pipeline hazards description translator. */ static void -initiate_automaton_gen (int argc, char **argv) +initiate_automaton_gen (char **argv) { const char *base_name; - int i; - - ndfa_flag = 0; - split_argument = 0; /* default value */ - no_minimization_flag = 0; - time_flag = 0; - stats_flag = 0; - v_flag = 0; - w_flag = 0; - progress_flag = 0; - for (i = 2; i < argc; i++) - if (strcmp (argv [i], NO_MINIMIZATION_OPTION) == 0) - no_minimization_flag = 1; - else if (strcmp (argv [i], TIME_OPTION) == 0) - time_flag = 1; - else if (strcmp (argv [i], STATS_OPTION) == 0) - stats_flag = 1; - else if (strcmp (argv [i], V_OPTION) == 0) - v_flag = 1; - else if (strcmp (argv [i], W_OPTION) == 0) - w_flag = 1; - else if (strcmp (argv [i], NDFA_OPTION) == 0) - ndfa_flag = 1; - else if (strcmp (argv [i], COLLAPSE_OPTION) == 0) - collapse_flag = 1; - else if (strcmp (argv [i], PROGRESS_OPTION) == 0) - progress_flag = 1; - else if (strcmp (argv [i], "-split") == 0) - { - if (i + 1 >= argc) - fatal ("-split has no argument."); - fatal ("option `-split' has not been implemented yet\n"); - /* split_argument = atoi (argument_vect [i + 1]); */ - } /* Initialize IR storage. */ obstack_init (&irp); @@ -9620,10 +9619,10 @@ main (int argc, char **argv) progname = "genautomata"; - if (!init_rtx_reader_args (argc, argv)) + if (!init_rtx_reader_args_cb (argc, argv, parse_automata_opt)) return (FATAL_EXIT_CODE); - initiate_automaton_gen (argc, argv); + initiate_automaton_gen (argv); while (1) { int lineno; diff --git a/gcc/genemit.c b/gcc/genemit.c index 662d8ca59b3..173e4d30ab2 100644 --- a/gcc/genemit.c +++ b/gcc/genemit.c @@ -812,7 +812,8 @@ from the machine description file `md'. */\n\n"); printf ("#include \"tm-constrs.h\"\n"); printf ("#include \"ggc.h\"\n"); printf ("#include \"basic-block.h\"\n"); - printf ("#include \"integrate.h\"\n\n"); + printf ("#include \"integrate.h\"\n"); + printf ("#include \"target.h\"\n\n"); printf ("#define FAIL return (end_sequence (), _val)\n"); printf ("#define DONE return (_val = get_insns (), end_sequence (), _val)\n\n"); diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 935bbdae9ee..5ba7178b0da 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -1,5 +1,5 @@ /* Statement simplification on GIMPLE. - Copyright (C) 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc. Split out from tree-ssa-ccp.c. This file is part of GCC. @@ -591,8 +591,11 @@ gimplify_and_update_call_from_tree (gimple_stmt_iterator *si_p, tree expr) for (i = gsi_last (stmts); !gsi_end_p (i); gsi_prev (&i)) { new_stmt = gsi_stmt (i); - if (gimple_assign_single_p (new_stmt) - && !is_gimple_reg (gimple_assign_lhs (new_stmt))) + if ((gimple_assign_single_p (new_stmt) + && !is_gimple_reg (gimple_assign_lhs (new_stmt))) + || (is_gimple_call (new_stmt) + && (gimple_call_flags (new_stmt) + & (ECF_NOVOPS | ECF_PURE | ECF_CONST | ECF_NORETURN)) == 0)) { tree vdef; if (!laststore) @@ -1247,6 +1250,18 @@ fold_stmt_1 (gimple_stmt_iterator *gsi, bool inplace) changed = true; } } + else if (val + && TREE_CODE (val) == ADDR_EXPR) + { + tree ref = TREE_OPERAND (val, 0); + tree tem = maybe_fold_reference (ref, false); + if (tem) + { + tem = build_fold_addr_expr_with_type (tem, TREE_TYPE (val)); + gimple_debug_bind_set_value (stmt, tem); + changed = true; + } + } } break; diff --git a/gcc/gimple.c b/gcc/gimple.c index 805ad2d77b2..3876912e471 100644 --- a/gcc/gimple.c +++ b/gcc/gimple.c @@ -1481,7 +1481,7 @@ walk_gimple_op (gimple stmt, walk_tree_fn callback_op, tree lhs = gimple_assign_lhs (stmt); wi->val_only = (is_gimple_reg_type (TREE_TYPE (lhs)) && !is_gimple_reg (lhs)) - || !gimple_assign_single_p (stmt); + || gimple_assign_rhs_class (stmt) != GIMPLE_SINGLE_RHS; } for (i = 1; i < gimple_num_ops (stmt); i++) @@ -1497,11 +1497,14 @@ walk_gimple_op (gimple stmt, walk_tree_fn callback_op, if (wi) { /* If the RHS has more than 1 operand, it is not appropriate - for the memory. */ - wi->val_only = !(is_gimple_mem_rhs (gimple_assign_rhs1 (stmt)) - || TREE_CODE (gimple_assign_rhs1 (stmt)) - == CONSTRUCTOR) - || !gimple_assign_single_p (stmt); + for the memory. + ??? A lhs always requires an lvalue, checking the val_only flag + does not make any sense, so we should be able to avoid computing + it here. */ + tree rhs1 = gimple_assign_rhs1 (stmt); + wi->val_only = !(is_gimple_mem_rhs (rhs1) + || TREE_CODE (rhs1) == CONSTRUCTOR) + || gimple_assign_rhs_class (stmt) != GIMPLE_SINGLE_RHS; wi->is_lhs = true; } @@ -2908,14 +2911,6 @@ is_gimple_id (tree t) || TREE_CODE (t) == STRING_CST); } -/* Return true if TYPE is a suitable type for a scalar register variable. */ - -bool -is_gimple_reg_type (tree type) -{ - return !AGGREGATE_TYPE_P (type); -} - /* Return true if T is a non-aggregate register variable. */ bool diff --git a/gcc/gimple.h b/gcc/gimple.h index ec32f2577a3..92edd181059 100644 --- a/gcc/gimple.h +++ b/gcc/gimple.h @@ -305,8 +305,10 @@ struct GTY(()) gimple_statement_base { /* Nonzero if this statement contains volatile operands. */ unsigned has_volatile_ops : 1; - /* Padding to get subcode to 16 bit alignment. */ - unsigned pad : 1; + /* Nonzero if this statement appears inside a transaction. This bit + is calculated on de-mand and has relevant information only after + it has been calculated with compute_transaction_bits. */ + unsigned in_transaction : 1; /* The SUBCODE field can be used for tuple-specific flags for tuples that do not require subcodes. Note that SUBCODE should be at @@ -963,8 +965,6 @@ tree gimple_extract_devirt_binfo_from_cst (tree); /* Returns true iff T is a valid GIMPLE statement. */ extern bool is_gimple_stmt (tree); -/* Returns true iff TYPE is a valid type for a scalar register variable. */ -extern bool is_gimple_reg_type (tree); /* Returns true iff T is a scalar register variable. */ extern bool is_gimple_reg (tree); /* Returns true iff T is any sort of variable. */ @@ -1122,6 +1122,7 @@ extern tree omp_reduction_init (tree, tree); /* In trans-mem.c. */ extern void diagnose_tm_safe_errors (tree); +extern void compute_transaction_bits (void); /* In tree-nested.c. */ extern void lower_nested_functions (tree); @@ -1586,6 +1587,21 @@ gimple_set_has_volatile_ops (gimple stmt, bool volatilep) stmt->gsbase.has_volatile_ops = (unsigned) volatilep; } +/* Return true if STMT is in a transaction. */ + +static inline bool +gimple_in_transaction (gimple stmt) +{ + return stmt->gsbase.in_transaction; +} + +/* Set the IN_TRANSACTION flag to TRANSACTIONP. */ + +static inline void +gimple_set_in_transaction (gimple stmt, bool transactionp) +{ + stmt->gsbase.in_transaction = (unsigned) transactionp; +} /* Return true if statement STMT may access memory. */ @@ -4838,6 +4854,13 @@ gimple_expr_type (const_gimple stmt) return void_type_node; } +/* Return true if TYPE is a suitable type for a scalar register variable. */ + +static inline bool +is_gimple_reg_type (tree type) +{ + return !AGGREGATE_TYPE_P (type); +} /* Return a new iterator pointing to GIMPLE_SEQ's first statement. */ diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 782adc34caf..07eb8fd81df 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -504,7 +504,8 @@ create_tmp_reg (tree type, const char *prefix) static inline tree create_tmp_from_val (tree val) { - return create_tmp_var (TREE_TYPE (val), get_name (val)); + /* Drop all qualifiers and address-space information from the value type. */ + return create_tmp_var (TYPE_MAIN_VARIANT (TREE_TYPE (val)), get_name (val)); } /* Create a temporary to hold the value of VAL. If IS_FORMAL, try to reuse @@ -7061,15 +7062,23 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, ret = GS_OK; break; } - ret = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p, - is_gimple_mem_ref_addr, fb_rvalue); - if (ret == GS_ERROR) - break; + /* Avoid re-gimplifying the address operand if it is already + in suitable form. Re-gimplifying would mark the address + operand addressable. Always gimplify when not in SSA form + as we still may have to gimplify decls with value-exprs. */ + if (!gimplify_ctxp || !gimplify_ctxp->into_ssa + || !is_gimple_mem_ref_addr (TREE_OPERAND (*expr_p, 0))) + { + ret = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p, + is_gimple_mem_ref_addr, fb_rvalue); + if (ret == GS_ERROR) + break; + } recalculate_side_effects (*expr_p); ret = GS_ALL_DONE; break; - /* Constants need not be gimplified. */ + /* Constants need not be gimplified. */ case INTEGER_CST: case REAL_CST: case FIXED_CST: diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h index 8a03948ee78..ebe0190c20a 100644 --- a/gcc/ginclude/stddef.h +++ b/gcc/ginclude/stddef.h @@ -203,6 +203,8 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t; #if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \ || defined(__FreeBSD_kernel__) /* __size_t is a typedef on FreeBSD 5, must not trash it. */ +#elif defined (VMS) +/* __size_t is also a typedef on VMS. */ #else #define __size_t #endif diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog index 255b3f55424..f779e9b89cf 100644 --- a/gcc/go/ChangeLog +++ b/gcc/go/ChangeLog @@ -1,3 +1,39 @@ +2012-03-09 Ian Lance Taylor <iant@google.com> + + * go-gcc.cc (Gcc_backend::assignment_statement): Convert the rhs + to the lhs type if necessary. + +2012-03-08 Ian Lance Taylor <iant@google.com> + + * go-gcc.cc (Gcc_backend::init_statement): Don't initialize a + zero-sized variable. + (go_non_zero_struct): New global variable. + (Gcc_backend::non_zero_size_type): New function. + (Gcc_backend::global_variable): Don't build an assignment for a + zero-sized value. + * go-c.h (go_non_zero_struct): Declare. + * config-lang.in (gtfiles): Add go-c.h. + +2012-02-29 Ian Lance Taylor <iant@google.com> + + * go-gcc.cc (class Gcc_tree): Add set_tree method. + (set_placeholder_pointer_type): When setting to a pointer to + error, set to error_mark_node. + +2012-02-23 Richard Guenther <rguenther@suse.de> + + * go-gcc.cc (Gcc_backend::placeholder_pointer_type): Use + build_distinct_type_copy. + +2012-02-17 Ian Lance Taylor <iant@google.com> + + * Make-lang.in (go/import.o): Add dependency on $(GO_LEX_H). + +2012-02-17 Ian Lance Taylor <iant@google.com> + + * gospec.c (lang_specific_driver): If linking, and no -o option + was used, add one. + 2012-02-14 Ian Lance Taylor <iant@google.com> PR go/48411 diff --git a/gcc/go/Make-lang.in b/gcc/go/Make-lang.in index 2994fe185ae..34e5584cc09 100644 --- a/gcc/go/Make-lang.in +++ b/gcc/go/Make-lang.in @@ -295,7 +295,8 @@ go/gogo.o: go/gofrontend/gogo.cc $(GO_SYSTEM_H) $(GO_C_H) \ $(GO_IMPORT_H) $(GO_EXPORT_H) go/gofrontend/backend.h $(GO_GOGO_H) go/import.o: go/gofrontend/import.cc $(GO_SYSTEM_H) \ $(srcdir)/../include/filenames.h $(srcdir)/../include/simple-object.h \ - $(GO_C_H) $(GO_GOGO_H) $(GO_TYPES_H) $(GO_EXPORT_H) $(GO_IMPORT_H) + $(GO_C_H) $(GO_GOGO_H) $(GO_LEX_H) $(GO_TYPES_H) $(GO_EXPORT_H) \ + $(GO_IMPORT_H) go/import-archive.o: go/gofrontend/import-archive.cc $(GO_SYSTEM_H) \ $(GO_IMPORT_H) go/lex.o: go/gofrontend/lex.cc $(GO_LEX_H) $(GO_SYSTEM_H) diff --git a/gcc/go/config-lang.in b/gcc/go/config-lang.in index 4b5886eb758..586e070e7d1 100644 --- a/gcc/go/config-lang.in +++ b/gcc/go/config-lang.in @@ -34,7 +34,7 @@ target_libs="target-libgo target-libffi" # compiler during stage 1. lang_requires_boot_languages=c++ -gtfiles="\$(srcdir)/go/go-lang.c" +gtfiles="\$(srcdir)/go/go-lang.c \$(srcdir)/go/go-c.h" # Do not build by default. build_by_default="no" diff --git a/gcc/go/go-c.h b/gcc/go/go-c.h index 0bfed85322a..e123d52d8d1 100644 --- a/gcc/go/go-c.h +++ b/gcc/go/go-c.h @@ -69,6 +69,8 @@ extern void go_write_export_data (const char *, unsigned int); extern const char *go_read_export_data (int, off_t, char **, size_t *, int *); +extern GTY(()) tree go_non_zero_struct; + #if defined(__cplusplus) && !defined(ENABLE_BUILD_WITH_CXX) } /* End extern "C". */ #endif diff --git a/gcc/go/go-gcc.cc b/gcc/go/go-gcc.cc index e6967a830e1..96c171835c4 100644 --- a/gcc/go/go-gcc.cc +++ b/gcc/go/go-gcc.cc @@ -56,6 +56,10 @@ class Gcc_tree get_tree() const { return this->t_; } + void + set_tree(tree t) + { this->t_ = t; } + private: tree t_; }; @@ -334,6 +338,9 @@ class Gcc_backend : public Backend Btype* fill_in_array(Btype*, Btype*, Bexpression*); + + tree + non_zero_size_type(tree); }; // A helper function. @@ -602,7 +609,7 @@ Btype* Gcc_backend::placeholder_pointer_type(const std::string& name, Location location, bool) { - tree ret = build_variant_type_copy(ptr_type_node); + tree ret = build_distinct_type_copy(ptr_type_node); if (!name.empty()) { tree decl = build_decl(location.gcc_location(), TYPE_DECL, @@ -626,7 +633,7 @@ Gcc_backend::set_placeholder_pointer_type(Btype* placeholder, tree tt = to_type->get_tree(); if (tt == error_mark_node) { - TREE_TYPE(pt) = tt; + placeholder->set_tree(error_mark_node); return false; } gcc_assert(TREE_CODE(tt) == POINTER_TYPE); @@ -866,9 +873,27 @@ Gcc_backend::init_statement(Bvariable* var, Bexpression* init) if (var_tree == error_mark_node || init_tree == error_mark_node) return this->error_statement(); gcc_assert(TREE_CODE(var_tree) == VAR_DECL); - DECL_INITIAL(var_tree) = init_tree; - return this->make_statement(build1_loc(DECL_SOURCE_LOCATION(var_tree), - DECL_EXPR, void_type_node, var_tree)); + + // To avoid problems with GNU ld, we don't make zero-sized + // externally visible variables. That might lead us to doing an + // initialization of a zero-sized expression to a non-zero sized + // variable, or vice-versa. Avoid crashes by omitting the + // initializer. Such initializations don't mean anything anyhow. + if (int_size_in_bytes(TREE_TYPE(var_tree)) != 0 + && init_tree != NULL_TREE + && int_size_in_bytes(TREE_TYPE(init_tree)) != 0) + { + DECL_INITIAL(var_tree) = init_tree; + init_tree = NULL_TREE; + } + + tree ret = build1_loc(DECL_SOURCE_LOCATION(var_tree), DECL_EXPR, + void_type_node, var_tree); + if (init_tree != NULL_TREE) + ret = build2_loc(DECL_SOURCE_LOCATION(var_tree), COMPOUND_EXPR, + void_type_node, init_tree, ret); + + return this->make_statement(ret); } // Assignment. @@ -881,6 +906,42 @@ Gcc_backend::assignment_statement(Bexpression* lhs, Bexpression* rhs, tree rhs_tree = rhs->get_tree(); if (lhs_tree == error_mark_node || rhs_tree == error_mark_node) return this->error_statement(); + + // To avoid problems with GNU ld, we don't make zero-sized + // externally visible variables. That might lead us to doing an + // assignment of a zero-sized expression to a non-zero sized + // expression; avoid crashes here by avoiding assignments of + // zero-sized expressions. Such assignments don't really mean + // anything anyhow. + if (int_size_in_bytes(TREE_TYPE(lhs_tree)) == 0 + || int_size_in_bytes(TREE_TYPE(rhs_tree)) == 0) + return this->compound_statement(this->expression_statement(lhs), + this->expression_statement(rhs)); + + // Sometimes the same unnamed Go type can be created multiple times + // and thus have multiple tree representations. Make sure this does + // not confuse the middle-end. + if (TREE_TYPE(lhs_tree) != TREE_TYPE(rhs_tree)) + { + tree lhs_type_tree = TREE_TYPE(lhs_tree); + gcc_assert(TREE_CODE(lhs_type_tree) == TREE_CODE(TREE_TYPE(rhs_tree))); + if (POINTER_TYPE_P(lhs_type_tree) + || INTEGRAL_TYPE_P(lhs_type_tree) + || SCALAR_FLOAT_TYPE_P(lhs_type_tree) + || COMPLEX_FLOAT_TYPE_P(lhs_type_tree)) + rhs_tree = fold_convert_loc(location.gcc_location(), lhs_type_tree, + rhs_tree); + else if (TREE_CODE(lhs_type_tree) == RECORD_TYPE + || TREE_CODE(lhs_type_tree) == ARRAY_TYPE) + { + gcc_assert(int_size_in_bytes(lhs_type_tree) + == int_size_in_bytes(TREE_TYPE(rhs_tree))); + rhs_tree = fold_build1_loc(location.gcc_location(), + VIEW_CONVERT_EXPR, + lhs_type_tree, rhs_tree); + } + } + return this->make_statement(fold_build2_loc(location.gcc_location(), MODIFY_EXPR, void_type_node, @@ -1174,6 +1235,48 @@ Gcc_backend::block_statement(Bblock* bblock) return this->make_statement(bind_tree); } +// This is not static because we declare it with GTY(()) in go-c.h. +tree go_non_zero_struct; + +// Return a type corresponding to TYPE with non-zero size. + +tree +Gcc_backend::non_zero_size_type(tree type) +{ + if (int_size_in_bytes(type) != 0) + return type; + + switch (TREE_CODE(type)) + { + case RECORD_TYPE: + { + if (go_non_zero_struct == NULL_TREE) + { + type = make_node(RECORD_TYPE); + tree field = build_decl(UNKNOWN_LOCATION, FIELD_DECL, + get_identifier("dummy"), + boolean_type_node); + DECL_CONTEXT(field) = type; + TYPE_FIELDS(type) = field; + layout_type(type); + go_non_zero_struct = type; + } + return go_non_zero_struct; + } + + case ARRAY_TYPE: + { + tree element_type = non_zero_size_type(TREE_TYPE(type)); + return build_array_type_nelts(element_type, 1); + } + + default: + gcc_unreachable(); + } + + gcc_unreachable(); +} + // Make a global variable. Bvariable* @@ -1189,6 +1292,10 @@ Gcc_backend::global_variable(const std::string& package_name, if (type_tree == error_mark_node) return this->error_variable(); + // The GNU linker does not like dynamic variables with zero size. + if ((is_external || !is_hidden) && int_size_in_bytes(type_tree) == 0) + type_tree = this->non_zero_size_type(type_tree); + std::string var_name(package_name); var_name.push_back('.'); var_name.append(name); diff --git a/gcc/go/gofrontend/export.cc b/gcc/go/gofrontend/export.cc index b6c0740cade..174596753ef 100644 --- a/gcc/go/gofrontend/export.cc +++ b/gcc/go/gofrontend/export.cc @@ -93,6 +93,7 @@ void Export::export_globals(const std::string& package_name, const std::string& unique_prefix, int package_priority, + const std::map<std::string, Package*>& imports, const std::string& import_init_fn, const std::set<Import_init>& imported_init_fns, const Bindings* bindings) @@ -149,6 +150,8 @@ Export::export_globals(const std::string& package_name, snprintf(buf, sizeof buf, "priority %d;\n", package_priority); this->write_c_string(buf); + this->write_imports(imports); + this->write_imported_init_fns(package_name, package_priority, import_init_fn, imported_init_fns); @@ -177,7 +180,46 @@ Export::export_globals(const std::string& package_name, this->stream_->write_checksum(s); } -// Write out the import control variables for this package. +// Sort imported packages. + +static bool +import_compare(const std::pair<std::string, Package*>& a, + const std::pair<std::string, Package*>& b) +{ + return a.first < b.first; +} + +// Write out the imported packages. + +void +Export::write_imports(const std::map<std::string, Package*>& imports) +{ + // Sort the imports for more consistent output. + std::vector<std::pair<std::string, Package*> > imp; + for (std::map<std::string, Package*>::const_iterator p = imports.begin(); + p != imports.end(); + ++p) + imp.push_back(std::make_pair(p->first, p->second)); + + std::sort(imp.begin(), imp.end(), import_compare); + + for (std::vector<std::pair<std::string, Package*> >::const_iterator p = + imp.begin(); + p != imp.end(); + ++p) + { + this->write_c_string("import "); + this->write_string(p->second->name()); + this->write_c_string(" "); + this->write_string(p->second->unique_prefix()); + this->write_c_string(" \""); + this->write_string(p->first); + this->write_c_string("\";\n"); + } +} + +// Write out the initialization functions which need to run for this +// package. void Export::write_imported_init_fns( @@ -189,7 +231,7 @@ Export::write_imported_init_fns( if (import_init_fn.empty() && imported_init_fns.empty()) return; - this->write_c_string("import"); + this->write_c_string("init"); if (!import_init_fn.empty()) { @@ -229,6 +271,17 @@ Export::write_imported_init_fns( this->write_c_string(";\n"); } +// Write a name to the export stream. + +void +Export::write_name(const std::string& name) +{ + if (name.empty()) + this->write_c_string("?"); + else + this->write_string(Gogo::message_name(name)); +} + // Export a type. We have to ensure that on import we create a single // Named_type node for each named type. We do this by keeping a hash // table mapping named types to reference numbers. The first time we diff --git a/gcc/go/gofrontend/export.h b/gcc/go/gofrontend/export.h index 087f477e482..0e03f4853d6 100644 --- a/gcc/go/gofrontend/export.h +++ b/gcc/go/gofrontend/export.h @@ -14,6 +14,7 @@ class Gogo; class Import_init; class Bindings; class Type; +class Package; // Codes used for the builtin types. These are all negative to make // them easily distinct from the codes assigned by Export::write_type. @@ -126,6 +127,7 @@ class Export : public String_dump export_globals(const std::string& package_name, const std::string& unique_prefix, int package_priority, + const std::map<std::string, Package*>& imports, const std::string& import_init_fn, const std::set<Import_init>& imported_init_fns, const Bindings* bindings); @@ -145,6 +147,10 @@ class Export : public String_dump write_bytes(const char* bytes, size_t length) { this->stream_->write_bytes(bytes, length); } + // Write a name to the export stream. If NAME is empty, write "?". + void + write_name(const std::string& name); + // Write out a type. This handles references back to previous // definitions. void @@ -154,6 +160,10 @@ class Export : public String_dump Export(const Export&); Export& operator=(const Export&); + // Write out the imported packages. + void + write_imports(const std::map<std::string, Package*>& imports); + // Write out the imported initialization functions. void write_imported_init_fns(const std::string& package_name, int priority, diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 20c49f13b0e..90cf6f32dab 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -205,9 +205,6 @@ Expression::convert_for_assignment(Translate_context* context, Type* lhs_type, Type* rhs_type, tree rhs_tree, Location location) { - if (lhs_type == rhs_type) - return rhs_tree; - if (lhs_type->is_error() || rhs_type->is_error()) return error_mark_node; @@ -220,7 +217,7 @@ Expression::convert_for_assignment(Translate_context* context, Type* lhs_type, if (lhs_type_tree == error_mark_node) return error_mark_node; - if (lhs_type->interface_type() != NULL) + if (lhs_type != rhs_type && lhs_type->interface_type() != NULL) { if (rhs_type->interface_type() == NULL) return Expression::convert_type_to_interface(context, lhs_type, @@ -231,7 +228,7 @@ Expression::convert_for_assignment(Translate_context* context, Type* lhs_type, rhs_type, rhs_tree, false, location); } - else if (rhs_type->interface_type() != NULL) + else if (lhs_type != rhs_type && rhs_type->interface_type() != NULL) return Expression::convert_interface_to_type(context, lhs_type, rhs_type, rhs_tree, location); else if (lhs_type->is_slice_type() && rhs_type->is_nil_type()) @@ -284,13 +281,21 @@ Expression::convert_for_assignment(Translate_context* context, Type* lhs_type, || SCALAR_FLOAT_TYPE_P(lhs_type_tree) || COMPLEX_FLOAT_TYPE_P(lhs_type_tree)) return fold_convert_loc(location.gcc_location(), lhs_type_tree, rhs_tree); - else if (TREE_CODE(lhs_type_tree) == RECORD_TYPE - && TREE_CODE(TREE_TYPE(rhs_tree)) == RECORD_TYPE) + else if ((TREE_CODE(lhs_type_tree) == RECORD_TYPE + && TREE_CODE(TREE_TYPE(rhs_tree)) == RECORD_TYPE) + || (TREE_CODE(lhs_type_tree) == ARRAY_TYPE + && TREE_CODE(TREE_TYPE(rhs_tree)) == ARRAY_TYPE)) { + // Avoid confusion from zero sized variables which may be + // represented as non-zero-sized. + if (int_size_in_bytes(lhs_type_tree) == 0 + || int_size_in_bytes(TREE_TYPE(rhs_tree)) == 0) + return rhs_tree; + // This conversion must be permitted by Go, or we wouldn't have // gotten here. go_assert(int_size_in_bytes(lhs_type_tree) - == int_size_in_bytes(TREE_TYPE(rhs_tree))); + == int_size_in_bytes(TREE_TYPE(rhs_tree))); return fold_build1_loc(location.gcc_location(), VIEW_CONVERT_EXPR, lhs_type_tree, rhs_tree); } @@ -3942,10 +3947,6 @@ Unsafe_type_conversion_expression::do_get_tree(Translate_context* context) go_assert(et->map_type() != NULL); else if (t->channel_type() != NULL) go_assert(et->channel_type() != NULL); - else if (t->points_to() != NULL && t->points_to()->channel_type() != NULL) - go_assert((et->points_to() != NULL - && et->points_to()->channel_type() != NULL) - || et->is_nil_type()); else if (t->points_to() != NULL) go_assert(et->points_to() != NULL || et->is_nil_type()); else if (et->is_unsafe_pointer_type()) @@ -4304,14 +4305,23 @@ Unary_expression::eval_integer(Operator op, Type* utype, mpz_t uval, mpz_t val, unsigned HOST_WIDE_INT* phwi = new unsigned HOST_WIDE_INT[count]; memset(phwi, 0, count * sizeof(HOST_WIDE_INT)); + size_t obits = utype->integer_type()->bits(); + + if (!utype->integer_type()->is_unsigned() + && mpz_sgn(uval) < 0) + { + mpz_t adj; + mpz_init_set_ui(adj, 1); + mpz_mul_2exp(adj, adj, obits); + mpz_add(uval, uval, adj); + mpz_clear(adj); + } + size_t ecount; mpz_export(phwi, &ecount, -1, sizeof(HOST_WIDE_INT), 0, 0, uval); go_assert(ecount <= count); // Trim down to the number of words required by the type. - size_t obits = utype->integer_type()->bits(); - if (!utype->integer_type()->is_unsigned()) - ++obits; size_t ocount = ((obits + HOST_BITS_PER_WIDE_INT - 1) / HOST_BITS_PER_WIDE_INT); go_assert(ocount <= count); @@ -4326,6 +4336,16 @@ Unary_expression::eval_integer(Operator op, Type* utype, mpz_t uval, mpz_t val, mpz_import(val, ocount, -1, sizeof(HOST_WIDE_INT), 0, 0, phwi); + if (!utype->integer_type()->is_unsigned() + && mpz_tstbit(val, obits - 1)) + { + mpz_t adj; + mpz_init_set_ui(adj, 1); + mpz_mul_2exp(adj, adj, obits); + mpz_sub(val, val, adj); + mpz_clear(adj); + } + delete[] phwi; } return Integer_expression::check_constant(val, utype, location); @@ -4690,29 +4710,33 @@ Unary_expression::do_get_tree(Translate_context* context) // need to check for nil. We don't bother to check for small // structs because we expect the system to crash on a nil // pointer dereference. - HOST_WIDE_INT s = int_size_in_bytes(TREE_TYPE(TREE_TYPE(expr))); - if (s == -1 || s >= 4096) + tree target_type_tree = TREE_TYPE(TREE_TYPE(expr)); + if (!VOID_TYPE_P(target_type_tree)) { - if (!DECL_P(expr)) - expr = save_expr(expr); - tree compare = fold_build2_loc(loc.gcc_location(), EQ_EXPR, - boolean_type_node, - expr, - fold_convert(TREE_TYPE(expr), - null_pointer_node)); - tree crash = Gogo::runtime_error(RUNTIME_ERROR_NIL_DEREFERENCE, - loc); - expr = fold_build2_loc(loc.gcc_location(), COMPOUND_EXPR, - TREE_TYPE(expr), build3(COND_EXPR, - void_type_node, - compare, crash, - NULL_TREE), - expr); + HOST_WIDE_INT s = int_size_in_bytes(target_type_tree); + if (s == -1 || s >= 4096) + { + if (!DECL_P(expr)) + expr = save_expr(expr); + tree compare = fold_build2_loc(loc.gcc_location(), EQ_EXPR, + boolean_type_node, + expr, + fold_convert(TREE_TYPE(expr), + null_pointer_node)); + tree crash = Gogo::runtime_error(RUNTIME_ERROR_NIL_DEREFERENCE, + loc); + expr = fold_build2_loc(loc.gcc_location(), COMPOUND_EXPR, + TREE_TYPE(expr), build3(COND_EXPR, + void_type_node, + compare, crash, + NULL_TREE), + expr); + } } // If the type of EXPR is a recursive pointer type, then we // need to insert a cast before indirecting. - if (TREE_TYPE(TREE_TYPE(expr)) == ptr_type_node) + if (VOID_TYPE_P(target_type_tree)) { Type* pt = this->expr_->type()->points_to(); tree ind = type_to_tree(pt->get_backend(context->gogo())); @@ -5564,6 +5588,7 @@ Binary_expression::do_lower(Gogo* gogo, Named_object*, && op != OPERATOR_RSHIFT) { // May be a type error--let it be diagnosed later. + return this; } else if (is_comparison) { @@ -5667,6 +5692,7 @@ Binary_expression::do_lower(Gogo* gogo, Named_object*, && op != OPERATOR_RSHIFT) { // May be a type error--let it be diagnosed later. + return this; } else if (is_comparison) { @@ -5750,6 +5776,7 @@ Binary_expression::do_lower(Gogo* gogo, Named_object*, && left_type->base() != right_type->base()) { // May be a type error--let it be diagnosed later. + return this; } else if (op == OPERATOR_EQEQ || op == OPERATOR_NOTEQ) { @@ -8499,6 +8526,7 @@ Builtin_call_expression::do_check_types(Gogo*) case BUILTIN_INVALID: case BUILTIN_NEW: case BUILTIN_MAKE: + case BUILTIN_DELETE: return; case BUILTIN_LEN: @@ -8667,13 +8695,17 @@ Builtin_call_expression::do_check_types(Gogo*) this->report_error(_("too many arguments")); break; } + if (args->front()->type()->is_error() + || args->back()->type()->is_error()) + break; + + Array_type* at = args->front()->type()->array_type(); + Type* e = at->element_type(); // The language permits appending a string to a []byte, as a // special case. if (args->back()->type()->is_string_type()) { - const Array_type* at = args->front()->type()->array_type(); - const Type* e = at->element_type()->forwarded(); if (e->integer_type() != NULL && e->integer_type()->is_byte()) break; } @@ -8682,8 +8714,7 @@ Builtin_call_expression::do_check_types(Gogo*) // assignable to a slice of the element type of the first // argument. We already know the first argument is a slice // type. - Array_type* at = args->front()->type()->array_type(); - Type* arg2_type = Type::make_array_type(at->element_type(), NULL); + Type* arg2_type = Type::make_array_type(e, NULL); std::string reason; if (!Type::are_assignable(arg2_type, args->back()->type(), &reason)) { @@ -8979,7 +9010,10 @@ Builtin_call_expression::do_get_tree(Translate_context* context) fnname = "__go_print_slice"; } else - go_unreachable(); + { + go_assert(saw_errors()); + return error_mark_node; + } tree call = Gogo::call_builtin(pfndecl, location, @@ -9662,8 +9696,11 @@ Call_expression::result_count() const Temporary_statement* Call_expression::result(size_t i) const { - go_assert(this->results_ != NULL - && this->results_->size() > i); + if (this->results_ == NULL || this->results_->size() <= i) + { + go_assert(saw_errors()); + return NULL; + } return (*this->results_)[i]; } @@ -10150,6 +10187,11 @@ Call_expression::set_results(Translate_context* context, tree call_tree) go_assert(field != NULL_TREE); Temporary_statement* temp = this->result(i); + if (temp == NULL) + { + go_assert(saw_errors()); + return error_mark_node; + } Temporary_reference_expression* ref = Expression::make_temporary_reference(temp, loc); ref->set_is_lvalue(); @@ -10329,8 +10371,17 @@ tree Call_result_expression::do_get_tree(Translate_context* context) { Call_expression* ce = this->call_->call_expression(); - go_assert(ce != NULL); + if (ce == NULL) + { + go_assert(this->call_->is_error_expression()); + return error_mark_node; + } Temporary_statement* ts = ce->result(this->index_); + if (ts == NULL) + { + go_assert(saw_errors()); + return error_mark_node; + } Expression* ref = Expression::make_temporary_reference(ts, this->location()); return ref->get_tree(context); } @@ -11780,7 +11831,7 @@ Selector_expression::lower_method_expression(Gogo* gogo) p != method_parameters->end(); ++p, ++i) { - if (!p->name().empty() && p->name() != Import::import_marker) + if (!p->name().empty()) parameters->push_back(*p); else { @@ -13836,7 +13887,7 @@ tree Heap_composite_expression::do_get_tree(Translate_context* context) { tree expr_tree = this->expr_->get_tree(context); - if (expr_tree == error_mark_node) + if (expr_tree == error_mark_node || TREE_TYPE(expr_tree) == error_mark_node) return error_mark_node; tree expr_size = TYPE_SIZE_UNIT(TREE_TYPE(expr_tree)); go_assert(TREE_CODE(expr_size) == INTEGER_CST); diff --git a/gcc/go/gofrontend/expressions.h b/gcc/go/gofrontend/expressions.h index 6672b684e47..0a3f2050dd4 100644 --- a/gcc/go/gofrontend/expressions.h +++ b/gcc/go/gofrontend/expressions.h @@ -1066,6 +1066,10 @@ class Set_and_use_temporary_expression : public Expression { return this->expr_; } protected: + int + do_traverse(Traverse* traverse) + { return Expression::traverse(&this->expr_, traverse); } + Type* do_type(); diff --git a/gcc/go/gofrontend/gogo-tree.cc b/gcc/go/gofrontend/gogo-tree.cc index 603b97ec0c1..fa229320c96 100644 --- a/gcc/go/gofrontend/gogo-tree.cc +++ b/gcc/go/gofrontend/gogo-tree.cc @@ -843,7 +843,9 @@ Gogo::write_globals() this->backend()->global_variable_set_init(var, tree_to_expr(init)); } - else if (is_sink) + else if (is_sink + || int_size_in_bytes(TREE_TYPE(init)) == 0 + || int_size_in_bytes(TREE_TYPE(vec[i])) == 0) var_init_tree = init; else var_init_tree = fold_build2_loc(no->location().gcc_location(), diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc index a90ce1df384..5fe5aead9c0 100644 --- a/gcc/go/gofrontend/gogo.cc +++ b/gcc/go/gofrontend/gogo.cc @@ -628,7 +628,7 @@ Gogo::start_function(const std::string& name, Function_type* type, Variable* this_param = new Variable(receiver->type(), NULL, false, true, true, location); std::string rname = receiver->name(); - if (rname.empty()) + if (rname.empty() || Gogo::is_sink_name(rname)) { // We need to give receivers a name since they wind up in // DECL_ARGUMENTS. FIXME. @@ -638,8 +638,7 @@ Gogo::start_function(const std::string& name, Function_type* type, ++count; rname = buf; } - if (!Gogo::is_sink_name(rname)) - block->bindings()->add_variable(rname, NULL, this_param); + block->bindings()->add_variable(rname, NULL, this_param); } const Typed_identifier_list* parameters = type->parameters(); @@ -2500,6 +2499,9 @@ Build_recover_thunks::function(Named_object* orig_no) Call_expression* call = Expression::make_call(fn, args, false, location); + // Any varargs call has already been lowered. + call->set_varargs_are_lowered(); + Statement* s; if (orig_fntype->results() == NULL || orig_fntype->results()->empty()) s = Statement::make_statement(call, true); @@ -2859,6 +2861,7 @@ Gogo::do_exports() exp.export_globals(this->package_name(), this->unique_prefix(), this->package_priority(), + this->imports_, (this->need_init_fn_ && !this->is_main_package() ? this->get_init_fn_name() : ""), @@ -3274,7 +3277,10 @@ Function::export_func_with_type(Export* exp, const std::string& name, if (fntype->is_method()) { exp->write_c_string("("); - exp->write_type(fntype->receiver()->type()); + const Typed_identifier* receiver = fntype->receiver(); + exp->write_name(receiver->name()); + exp->write_c_string(" "); + exp->write_type(receiver->type()); exp->write_c_string(") "); } @@ -3294,6 +3300,8 @@ Function::export_func_with_type(Export* exp, const std::string& name, first = false; else exp->write_c_string(", "); + exp->write_name(p->name()); + exp->write_c_string(" "); if (!is_varargs || p + 1 != parameters->end()) exp->write_type(p->type()); else @@ -3308,7 +3316,7 @@ Function::export_func_with_type(Export* exp, const std::string& name, const Typed_identifier_list* results = fntype->results(); if (results != NULL) { - if (results->size() == 1) + if (results->size() == 1 && results->begin()->name().empty()) { exp->write_c_string(" "); exp->write_type(results->begin()->type()); @@ -3325,6 +3333,8 @@ Function::export_func_with_type(Export* exp, const std::string& name, first = false; else exp->write_c_string(", "); + exp->write_name(p->name()); + exp->write_c_string(" "); exp->write_type(p->type()); } exp->write_c_string(")"); @@ -3348,9 +3358,10 @@ Function::import_func(Import* imp, std::string* pname, if (imp->peek_char() == '(') { imp->require_c_string("("); + std::string name = imp->read_name(); + imp->require_c_string(" "); Type* rtype = imp->read_type(); - *preceiver = new Typed_identifier(Import::import_marker, rtype, - imp->location()); + *preceiver = new Typed_identifier(name, rtype, imp->location()); imp->require_c_string(") "); } @@ -3366,6 +3377,9 @@ Function::import_func(Import* imp, std::string* pname, parameters = new Typed_identifier_list(); while (true) { + std::string name = imp->read_name(); + imp->require_c_string(" "); + if (imp->match_c_string("...")) { imp->advance(3); @@ -3375,8 +3389,8 @@ Function::import_func(Import* imp, std::string* pname, Type* ptype = imp->read_type(); if (*is_varargs) ptype = Type::make_array_type(ptype, NULL); - parameters->push_back(Typed_identifier(Import::import_marker, - ptype, imp->location())); + parameters->push_back(Typed_identifier(name, ptype, + imp->location())); if (imp->peek_char() != ',') break; go_assert(!*is_varargs); @@ -3396,17 +3410,18 @@ Function::import_func(Import* imp, std::string* pname, if (imp->peek_char() != '(') { Type* rtype = imp->read_type(); - results->push_back(Typed_identifier(Import::import_marker, rtype, - imp->location())); + results->push_back(Typed_identifier("", rtype, imp->location())); } else { imp->require_c_string("("); while (true) { + std::string name = imp->read_name(); + imp->require_c_string(" "); Type* rtype = imp->read_type(); - results->push_back(Typed_identifier(Import::import_marker, - rtype, imp->location())); + results->push_back(Typed_identifier(name, rtype, + imp->location())); if (imp->peek_char() != ',') break; imp->require_c_string(", "); @@ -5333,5 +5348,5 @@ Statement_inserter::insert(Statement* s) else if (this->var_ != NULL) this->var_->add_preinit_statement(this->gogo_, s); else - go_unreachable(); + go_assert(saw_errors()); } diff --git a/gcc/go/gofrontend/gogo.h b/gcc/go/gofrontend/gogo.h index 008c8a09872..6c77c3bd9e9 100644 --- a/gcc/go/gofrontend/gogo.h +++ b/gcc/go/gofrontend/gogo.h @@ -398,6 +398,11 @@ class Gogo void write_specific_type_functions(); + // Whether we are done writing out specific type functions. + bool + specific_type_functions_are_written() const + { return this->specific_type_functions_are_written_; } + // Traverse the tree. See the Traverse class. void traverse(Traverse*); diff --git a/gcc/go/gofrontend/import.cc b/gcc/go/gofrontend/import.cc index 44ffda61fba..58b0355c6c6 100644 --- a/gcc/go/gofrontend/import.cc +++ b/gcc/go/gofrontend/import.cc @@ -11,6 +11,7 @@ #include "go-c.h" #include "gogo.h" +#include "lex.h" #include "types.h" #include "export.h" #include "import.h" @@ -33,11 +34,6 @@ go_add_search_path(const char* path) search_path.push_back(std::string(path)); } -// The name used for parameters, receivers, and results in imported -// function types. - -const char* const Import::import_marker = "*imported*"; - // Find import data. This searches the file system for FILENAME and // returns a pointer to a Stream object to read the data that it // exports. If the file is not found, it returns NULL. @@ -308,7 +304,10 @@ Import::import(Gogo* gogo, const std::string& local_name, this->package_->set_priority(prio); this->require_c_string(";\n"); - if (stream->match_c_string("import ")) + while (stream->match_c_string("import")) + this->read_one_import(); + + if (stream->match_c_string("init")) this->read_import_init_fns(gogo); // Loop over all the input data for this package. @@ -348,12 +347,24 @@ Import::import(Gogo* gogo, const std::string& local_name, return this->package_; } +// Read an import line. We don't actually care about these. + +void +Import::read_one_import() +{ + this->require_c_string("import "); + Stream* stream = this->stream_; + while (stream->peek_char() != ';') + stream->advance(1); + this->require_c_string(";\n"); +} + // Read the list of import control functions. void Import::read_import_init_fns(Gogo* gogo) { - this->require_c_string("import"); + this->require_c_string("init"); while (!this->match_c_string(";")) { this->require_c_string(" "); @@ -749,6 +760,21 @@ Import::read_identifier() return ret; } +// Read a name from the stream. + +std::string +Import::read_name() +{ + std::string ret = this->read_identifier(); + if (ret == "?") + ret.clear(); + else if (!Lex::is_exported_name(ret)) + ret = ('.' + this->package_->unique_prefix() + + '.' + this->package_->name() + + '.' + ret); + return ret; +} + // Turn a string into a integer with appropriate error handling. bool diff --git a/gcc/go/gofrontend/import.h b/gcc/go/gofrontend/import.h index bdff0c2a9e1..67bdcb02d57 100644 --- a/gcc/go/gofrontend/import.h +++ b/gcc/go/gofrontend/import.h @@ -181,14 +181,15 @@ class Import std::string read_identifier(); + // Read a name. This is like read_identifier, except that a "?" is + // returned as an empty string. This matches Export::write_name. + std::string + read_name(); + // Read a type. Type* read_type(); - // The name used for parameters, receivers, and results in imported - // function types. - static const char* const import_marker; - private: static Stream* try_package_in_directory(const std::string&, Location); @@ -212,6 +213,10 @@ class Import find_archive_export_data(const std::string& filename, int fd, Location); + // Read an import line. + void + read_one_import(); + // Read the import control functions. void read_import_init_fns(Gogo*); diff --git a/gcc/go/gofrontend/parse.cc b/gcc/go/gofrontend/parse.cc index 6eb1981a4be..1a9c153a578 100644 --- a/gcc/go/gofrontend/parse.cc +++ b/gcc/go/gofrontend/parse.cc @@ -2491,7 +2491,7 @@ Parse::operand(bool may_be_sink) if (token->is_op(OPERATOR_LPAREN)) { this->advance_token(); - ret = this->expression(PRECEDENCE_NORMAL, false, true, NULL); + ret = this->expression(PRECEDENCE_NORMAL, may_be_sink, true, NULL); if (!this->peek_token()->is_op(OPERATOR_RPAREN)) error_at(this->location(), "missing %<)%>"); else @@ -3948,8 +3948,9 @@ Parse::return_stat() ++p) { Named_object* no = this->gogo_->lookup((*p)->name(), NULL); - go_assert(no != NULL); - if (!no->is_result_variable()) + if (no == NULL) + go_assert(saw_errors()); + else if (!no->is_result_variable()) error_at(location, "%qs is shadowed during return", (*p)->message_name().c_str()); } diff --git a/gcc/go/gofrontend/statements.cc b/gcc/go/gofrontend/statements.cc index e55dc74b3b7..65c64c5e906 100644 --- a/gcc/go/gofrontend/statements.cc +++ b/gcc/go/gofrontend/statements.cc @@ -1013,7 +1013,7 @@ Tuple_assignment_statement::do_lower(Gogo*, Named_object*, Block* enclosing, b->add_statement(s); ++ptemp; } - go_assert(ptemp == temps.end()); + go_assert(ptemp == temps.end() || saw_errors()); return Statement::make_block_statement(b, loc); } @@ -3452,7 +3452,7 @@ Case_clauses::Case_clause::get_backend(Translate_context* context, { // Value was already present. error_at(this->location_, "duplicate case in switch"); - continue; + e = Expression::make_error(this->location_); } tree case_tree = e->get_tree(context); diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index 4ed54bb5358..03f1b3ea0c6 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -622,16 +622,24 @@ Type::are_assignable_check_hidden(const Type* lhs, const Type* rhs, std::string* reason) { // Do some checks first. Make sure the types are defined. - if (rhs != NULL - && rhs->forwarded()->forward_declaration_type() == NULL - && rhs->is_void_type()) + if (rhs != NULL && !rhs->is_undefined()) { - if (reason != NULL) - *reason = "non-value used as value"; - return false; + if (rhs->is_void_type()) + { + if (reason != NULL) + *reason = "non-value used as value"; + return false; + } + if (rhs->is_call_multiple_result_type()) + { + if (reason != NULL) + reason->assign(_("multiple value function call in " + "single value context")); + return false; + } } - if (lhs != NULL && lhs->forwarded()->forward_declaration_type() == NULL) + if (lhs != NULL && !lhs->is_undefined()) { // Any value may be assigned to the blank identifier. if (lhs->is_sink_type()) @@ -639,9 +647,7 @@ Type::are_assignable_check_hidden(const Type* lhs, const Type* rhs, // All fields of a struct must be exported, or the assignment // must be in the same package. - if (check_hidden_fields - && rhs != NULL - && rhs->forwarded()->forward_declaration_type() == NULL) + if (check_hidden_fields && rhs != NULL && !rhs->is_undefined()) { if (lhs->has_hidden_fields(NULL, reason) || rhs->has_hidden_fields(NULL, reason)) @@ -715,9 +721,6 @@ Type::are_assignable_check_hidden(const Type* lhs, const Type* rhs, { if (rhs->interface_type() != NULL) reason->assign(_("need explicit conversion")); - else if (rhs->is_call_multiple_result_type()) - reason->assign(_("multiple value function call in " - "single value context")); else if (lhs->named_type() != NULL && rhs->named_type() != NULL) { size_t len = (lhs->named_type()->name().length() @@ -1787,6 +1790,12 @@ Type::write_specific_type_functions(Gogo* gogo, Named_type* name, { Location bloc = Linemap::predeclared_location(); + if (gogo->specific_type_functions_are_written()) + { + go_assert(saw_errors()); + return; + } + Named_object* hash_fn = gogo->start_function(hash_name, hash_fntype, false, bloc); gogo->start_block(bloc); @@ -3111,9 +3120,7 @@ Function_type::is_valid_redeclaration(const Function_type* t, // A redeclaration of a function is required to use the same names // for the receiver and parameters. if (this->receiver() != NULL - && this->receiver()->name() != t->receiver()->name() - && this->receiver()->name() != Import::import_marker - && t->receiver()->name() != Import::import_marker) + && this->receiver()->name() != t->receiver()->name()) { if (reason != NULL) *reason = "receiver name changed"; @@ -3129,9 +3136,7 @@ Function_type::is_valid_redeclaration(const Function_type* t, p2 != parms2->end(); ++p2, ++p1) { - if (p1->name() != p2->name() - && p1->name() != Import::import_marker - && p2->name() != Import::import_marker) + if (p1->name() != p2->name()) { if (reason != NULL) *reason = "parameter name changed"; @@ -3160,9 +3165,7 @@ Function_type::is_valid_redeclaration(const Function_type* t, res2 != results2->end(); ++res2, ++res1) { - if (res1->name() != res2->name() - && res1->name() != Import::import_marker - && res2->name() != Import::import_marker) + if (res1->name() != res2->name()) { if (reason != NULL) *reason = "result name changed"; @@ -3609,6 +3612,8 @@ Function_type::do_export(Export* exp) const first = false; else exp->write_c_string(", "); + exp->write_name(p->name()); + exp->write_c_string(" "); if (!is_varargs || p + 1 != this->parameters_->end()) exp->write_type(p->type()); else @@ -3624,7 +3629,7 @@ Function_type::do_export(Export* exp) const if (results != NULL) { exp->write_c_string(" "); - if (results->size() == 1) + if (results->size() == 1 && results->begin()->name().empty()) exp->write_type(results->begin()->type()); else { @@ -3638,6 +3643,8 @@ Function_type::do_export(Export* exp) const first = false; else exp->write_c_string(", "); + exp->write_name(p->name()); + exp->write_c_string(" "); exp->write_type(p->type()); } exp->write_c_string(")"); @@ -3660,6 +3667,9 @@ Function_type::do_import(Import* imp) parameters = new Typed_identifier_list(); while (true) { + std::string name = imp->read_name(); + imp->require_c_string(" "); + if (imp->match_c_string("...")) { imp->advance(3); @@ -3669,8 +3679,8 @@ Function_type::do_import(Import* imp) Type* ptype = imp->read_type(); if (is_varargs) ptype = Type::make_array_type(ptype, NULL); - parameters->push_back(Typed_identifier(Import::import_marker, - ptype, imp->location())); + parameters->push_back(Typed_identifier(name, ptype, + imp->location())); if (imp->peek_char() != ',') break; go_assert(!is_varargs); @@ -3689,17 +3699,18 @@ Function_type::do_import(Import* imp) if (imp->peek_char() != '(') { Type* rtype = imp->read_type(); - results->push_back(Typed_identifier(Import::import_marker, rtype, - imp->location())); + results->push_back(Typed_identifier("", rtype, imp->location())); } else { imp->advance(1); while (true) { + std::string name = imp->read_name(); + imp->require_c_string(" "); Type* rtype = imp->read_type(); - results->push_back(Typed_identifier(Import::import_marker, - rtype, imp->location())); + results->push_back(Typed_identifier(name, rtype, + imp->location())); if (imp->peek_char() != ',') break; imp->require_c_string(", "); @@ -3739,8 +3750,12 @@ Function_type::copy_with_receiver(Type* receiver_type) const go_assert(!this->is_method()); Typed_identifier* receiver = new Typed_identifier("", receiver_type, this->location_); - return Type::make_function_type(receiver, this->parameters_, - this->results_, this->location_); + Function_type* ret = Type::make_function_type(receiver, this->parameters_, + this->results_, + this->location_); + if (this->is_varargs_) + ret->set_is_varargs(); + return ret; } // Make a function type. @@ -4114,7 +4129,6 @@ Struct_type::do_verify() Struct_field_list* fields = this->fields_; if (fields == NULL) return true; - bool ret = true; for (Struct_field_list::iterator p = fields->begin(); p != fields->end(); ++p) @@ -4124,7 +4138,6 @@ Struct_type::do_verify() { error_at(p->location(), "struct field type is incomplete"); p->set_type(Type::make_error_type()); - ret = false; } else if (p->is_anonymous()) { @@ -4132,19 +4145,17 @@ Struct_type::do_verify() { error_at(p->location(), "embedded type may not be a pointer"); p->set_type(Type::make_error_type()); - return false; } - if (t->points_to() != NULL - && t->points_to()->interface_type() != NULL) + else if (t->points_to() != NULL + && t->points_to()->interface_type() != NULL) { error_at(p->location(), "embedded type may not be pointer to interface"); p->set_type(Type::make_error_type()); - return false; } } } - return ret; + return true; } // Whether this contains a pointer. @@ -5204,10 +5215,7 @@ bool Array_type::do_verify() { if (!this->verify_length()) - { - this->length_ = Expression::make_error(this->length_->location()); - return false; - } + this->length_ = Expression::make_error(this->length_->location()); return true; } @@ -5897,10 +5905,7 @@ Map_type::do_verify() { // The runtime support uses "map[void]void". if (!this->key_type_->is_comparable() && !this->key_type_->is_void_type()) - { - error_at(this->location_, "invalid map key type"); - return false; - } + error_at(this->location_, "invalid map key type"); return true; } @@ -6469,7 +6474,7 @@ Interface_type::finalize_methods() } Named_type* nt = t->named_type(); - if (nt != NULL) + if (nt != NULL && it->parse_methods_ != NULL) { std::vector<Named_type*>::const_iterator q; for (q = seen.begin(); q != seen.end(); ++q) @@ -7185,7 +7190,7 @@ Interface_type::do_export(Export* exp) const { if (pm->name().empty()) { - exp->write_c_string("$ "); + exp->write_c_string("? "); exp->write_type(pm->type()); } else @@ -7209,6 +7214,8 @@ Interface_type::do_export(Export* exp) const first = false; else exp->write_c_string(", "); + exp->write_name(pp->name()); + exp->write_c_string(" "); if (!is_varargs || pp + 1 != parameters->end()) exp->write_type(pp->type()); else @@ -7226,7 +7233,7 @@ Interface_type::do_export(Export* exp) const if (results != NULL) { exp->write_c_string(" "); - if (results->size() == 1) + if (results->size() == 1 && results->begin()->name().empty()) exp->write_type(results->begin()->type()); else { @@ -7241,6 +7248,8 @@ Interface_type::do_export(Export* exp) const first = false; else exp->write_c_string(", "); + exp->write_name(p->name()); + exp->write_c_string(" "); exp->write_type(p->type()); } exp->write_c_string(")"); @@ -7267,7 +7276,7 @@ Interface_type::do_import(Import* imp) { std::string name = imp->read_identifier(); - if (name == "$") + if (name == "?") { imp->require_c_string(" "); Type* t = imp->read_type(); @@ -7287,6 +7296,9 @@ Interface_type::do_import(Import* imp) parameters = new Typed_identifier_list; while (true) { + std::string name = imp->read_name(); + imp->require_c_string(" "); + if (imp->match_c_string("...")) { imp->advance(3); @@ -7296,8 +7308,8 @@ Interface_type::do_import(Import* imp) Type* ptype = imp->read_type(); if (is_varargs) ptype = Type::make_array_type(ptype, NULL); - parameters->push_back(Typed_identifier(Import::import_marker, - ptype, imp->location())); + parameters->push_back(Typed_identifier(name, ptype, + imp->location())); if (imp->peek_char() != ',') break; go_assert(!is_varargs); @@ -7316,17 +7328,18 @@ Interface_type::do_import(Import* imp) if (imp->peek_char() != '(') { Type* rtype = imp->read_type(); - results->push_back(Typed_identifier(Import::import_marker, - rtype, imp->location())); + results->push_back(Typed_identifier("", rtype, imp->location())); } else { imp->advance(1); while (true) { + std::string name = imp->read_name(); + imp->require_c_string(" "); Type* rtype = imp->read_type(); - results->push_back(Typed_identifier(Import::import_marker, - rtype, imp->location())); + results->push_back(Typed_identifier(name, rtype, + imp->location())); if (imp->peek_char() != ',') break; imp->require_c_string(", "); @@ -7875,7 +7888,6 @@ Named_type::do_verify() if (this->local_methods_ != NULL) { Struct_type* st = this->type_->struct_type(); - bool found_dup = false; if (st != NULL) { for (Bindings::const_declarations_iterator p = @@ -7889,12 +7901,9 @@ Named_type::do_verify() error_at(p->second->location(), "method %qs redeclares struct field name", Gogo::message_name(name).c_str()); - found_dup = true; } } } - if (found_dup) - return false; } return true; diff --git a/gcc/go/gofrontend/types.h b/gcc/go/gofrontend/types.h index 72c42ebb4ba..3fe80488a49 100644 --- a/gcc/go/gofrontend/types.h +++ b/gcc/go/gofrontend/types.h @@ -510,7 +510,8 @@ class Type // Verify the type. This is called after parsing, and verifies that // types are complete and meet the language requirements. This - // returns false if the type is invalid. + // returns false if the type is invalid and we should not continue + // traversing it. bool verify() { return this->do_verify(); } diff --git a/gcc/go/gofrontend/unsafe.cc b/gcc/go/gofrontend/unsafe.cc index 6e8a4042e72..bc949c6b56e 100644 --- a/gcc/go/gofrontend/unsafe.cc +++ b/gcc/go/gofrontend/unsafe.cc @@ -34,6 +34,8 @@ Gogo::import_unsafe(const std::string& local_name, bool is_local_name_exported, package->set_location(location); package->set_is_imported(); + this->imports_.insert(std::make_pair("unsafe", package)); + Bindings* bindings = package->bindings(); // The type may have already been created by an import. @@ -86,60 +88,6 @@ Gogo::import_unsafe(const std::string& local_name, bool is_local_name_exported, if (add_to_globals) this->add_named_object(no); - // Typeof. - Type* empty_interface = Type::make_empty_interface_type(bloc); - Typed_identifier_list* parameters = new Typed_identifier_list; - parameters->push_back(Typed_identifier("i", empty_interface, bloc)); - results = new Typed_identifier_list; - results->push_back(Typed_identifier("", empty_interface, bloc)); - fntype = Type::make_function_type(NULL, parameters, results, bloc); - no = bindings->add_function_declaration("Typeof", package, fntype, bloc); - if (add_to_globals) - this->add_named_object(no); - - // Reflect. - parameters = new Typed_identifier_list; - parameters->push_back(Typed_identifier("it", empty_interface, bloc)); - results = new Typed_identifier_list; - results->push_back(Typed_identifier("", empty_interface, bloc)); - results->push_back(Typed_identifier("", pointer_type, bloc)); - fntype = Type::make_function_type(NULL, parameters, results, bloc); - no = bindings->add_function_declaration("Reflect", package, fntype, bloc); - if (add_to_globals) - this->add_named_object(no); - - // Unreflect. - parameters = new Typed_identifier_list; - parameters->push_back(Typed_identifier("typ", empty_interface, bloc)); - parameters->push_back(Typed_identifier("addr", pointer_type, bloc)); - results = new Typed_identifier_list; - results->push_back(Typed_identifier("", empty_interface, bloc)); - fntype = Type::make_function_type(NULL, parameters, results, bloc); - no = bindings->add_function_declaration("Unreflect", package, fntype, bloc); - if (add_to_globals) - this->add_named_object(no); - - // New. - parameters = new Typed_identifier_list; - parameters->push_back(Typed_identifier("typ", empty_interface, bloc)); - results = new Typed_identifier_list; - results->push_back(Typed_identifier("", pointer_type, bloc)); - fntype = Type::make_function_type(NULL, parameters, results, bloc); - no = bindings->add_function_declaration("New", package, fntype, bloc); - if (add_to_globals) - this->add_named_object(no); - - // NewArray. - parameters = new Typed_identifier_list; - parameters->push_back(Typed_identifier("typ", empty_interface, bloc)); - parameters->push_back(Typed_identifier("n", int_type, bloc)); - results = new Typed_identifier_list; - results->push_back(Typed_identifier("", pointer_type, bloc)); - fntype = Type::make_function_type(NULL, parameters, results, bloc); - no = bindings->add_function_declaration("NewArray", package, fntype, bloc); - if (add_to_globals) - this->add_named_object(no); - if (!this->imported_unsafe_) { go_imported_unsafe(); diff --git a/gcc/go/gospec.c b/gcc/go/gospec.c index 8e8aa2dd2de..20372f0f470 100644 --- a/gcc/go/gospec.c +++ b/gcc/go/gospec.c @@ -109,6 +109,11 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options, /* Whether the -o option was used. */ bool saw_opt_o = false; + /* Whether the -c option was used. Also used for -E, -fsyntax-only, + in general anything which implies only compilation and not + linking. */ + bool saw_opt_c = false; + /* Whether the -S option was used. */ bool saw_opt_S = false; @@ -172,6 +177,7 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options, case OPT_fsyntax_only: /* Don't specify libraries if we won't link, since that would cause a warning. */ + saw_opt_c = true; library = -1; break; @@ -272,31 +278,39 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options, j++; } - /* If we are not linking, add a -o option. This is because we need + /* If we didn't see a -o option, add one. This is because we need the driver to pass all .go files to go1. Without a -o option the - driver will invoke go1 separately for each input file. */ - if (library < 0 && first_go_file != NULL && !saw_opt_o) + driver will invoke go1 separately for each input file. FIXME: + This should probably use some other interface to force the driver + to set combine_inputs. */ + if (first_go_file != NULL && !saw_opt_o) { - const char *base; - int baselen; - int alen; - char *out; - - base = lbasename (first_go_file); - baselen = strlen (base) - 3; - alen = baselen + 3; - out = XNEWVEC (char, alen); - memcpy (out, base, baselen); - /* The driver will convert .o to some other suffix (e.g., .obj) - if appropriate. */ - out[baselen] = '.'; - if (saw_opt_S) - out[baselen + 1] = 's'; + if (saw_opt_c || saw_opt_S) + { + const char *base; + int baselen; + int alen; + char *out; + + base = lbasename (first_go_file); + baselen = strlen (base) - 3; + alen = baselen + 3; + out = XNEWVEC (char, alen); + memcpy (out, base, baselen); + /* The driver will convert .o to some other suffix (e.g., + .obj) if appropriate. */ + out[baselen] = '.'; + if (saw_opt_S) + out[baselen + 1] = 's'; + else + out[baselen + 1] = 'o'; + out[baselen + 2] = '\0'; + generate_option (OPT_o, out, 1, CL_DRIVER, + &new_decoded_options[j]); + } else - out[baselen + 1] = 'o'; - out[baselen + 2] = '\0'; - generate_option (OPT_o, out, 1, CL_DRIVER, - &new_decoded_options[j]); + generate_option (OPT_o, "a.out", 1, CL_DRIVER, + &new_decoded_options[j]); j++; } diff --git a/gcc/graphite-clast-to-gimple.c b/gcc/graphite-clast-to-gimple.c index abf88778f9e..6b6969be1e0 100644 --- a/gcc/graphite-clast-to-gimple.c +++ b/gcc/graphite-clast-to-gimple.c @@ -55,7 +55,6 @@ graphite_verify (void) { #ifdef ENABLE_CHECKING verify_loop_structure (); - verify_dominators (CDI_DOMINATORS); verify_loop_closed_ssa (true); #endif } diff --git a/gcc/graphite-flattening.c b/gcc/graphite-flattening.c deleted file mode 100644 index 33f25e01b03..00000000000 --- a/gcc/graphite-flattening.c +++ /dev/null @@ -1,460 +0,0 @@ -/* Loop flattening for Graphite. - Copyright (C) 2010 Free Software Foundation, Inc. - Contributed by Sebastian Pop <sebastian.pop@amd.com>. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#include "config.h" -#include "system.h" -#include "coretypes.h" -#include "tree-flow.h" -#include "tree-dump.h" -#include "cfgloop.h" -#include "tree-chrec.h" -#include "tree-data-ref.h" -#include "tree-scalar-evolution.h" -#include "sese.h" - -#ifdef HAVE_cloog -#include "ppl_c.h" -#include "graphite-ppl.h" -#include "graphite-poly.h" - -/* The loop flattening pass transforms loop nests into a single loop, - removing the loop nesting structure. The auto-vectorization can - then apply on the full loop body, without needing the outer-loop - vectorization. - - The loop flattening pass that has been described in a very Fortran - specific way in the 1992 paper by Reinhard von Hanxleden and Ken - Kennedy: "Relaxing SIMD Control Flow Constraints using Loop - Transformations" available from - http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.54.5033 - - The canonical example is as follows: suppose that we have a loop - nest with known iteration counts - - | for (i = 1; i <= 6; i++) - | for (j = 1; j <= 6; j++) - | S1(i,j); - - The loop flattening is performed by linearizing the iteration space - using the function "f (x) = 6 * i + j". In this case, CLooG would - produce this code: - - | for (c1=7;c1<=42;c1++) { - | i = floord(c1-1,6); - | S1(i,c1-6*i); - | } - - There are several limitations for loop flattening that are linked - to the expressivity of the polyhedral model. One has to take an - upper bound approximation to deal with the parametric case of loop - flattening. For example, in the loop nest: - - | for (i = 1; i <= N; i++) - | for (j = 1; j <= M; j++) - | S1(i,j); - - One would like to flatten this loop using a linearization function - like this "f (x) = M * i + j". However CLooG's schedules are not - expressive enough to deal with this case, and so the parameter M - has to be replaced by an integer upper bound approximation. If we - further know in the context of the scop that "M <= 6", then it is - possible to linearize the loop with "f (x) = 6 * i + j". In this - case, CLooG would produce this code: - - | for (c1=7;c1<=6*M+N;c1++) { - | i = ceild(c1-N,6); - | if (i <= floord(c1-1,6)) { - | S1(i,c1-6*i); - | } - | } - - For an arbitrarily complex loop nest the algorithm proceeds in two - steps. First, the LST is flattened by removing the loops structure - and by inserting the statements in the order they appear in - depth-first order. Then, the scattering of each statement is - transformed accordingly. - - Supposing that the original program is represented by the following - LST: - - | (loop_1 - | stmt_1 - | (loop_2 stmt_3 - | (loop_3 stmt_4) - | (loop_4 stmt_5 stmt_6) - | stmt_7 - | ) - | stmt_2 - | ) - - Loop flattening traverses the LST in depth-first order, and - flattens pairs of loops successively by projecting the inner loops - in the iteration domain of the outer loops: - - lst_project_loop (loop_2, loop_3, stride) - - | (loop_1 - | stmt_1 - | (loop_2 stmt_3 stmt_4 - | (loop_4 stmt_5 stmt_6) - | stmt_7 - | ) - | stmt_2 - | ) - - lst_project_loop (loop_2, loop_4, stride) - - | (loop_1 - | stmt_1 - | (loop_2 stmt_3 stmt_4 stmt_5 stmt_6 stmt_7) - | stmt_2 - | ) - - lst_project_loop (loop_1, loop_2, stride) - - | (loop_1 - | stmt_1 stmt_3 stmt_4 stmt_5 stmt_6 stmt_7 stmt_2 - | ) - - At each step, the iteration domain of the outer loop is enlarged to - contain enough points to iterate over the inner loop domain. */ - -/* Initializes RES to the number of iterations of the linearized loop - LST. RES is the cardinal of the iteration domain of LST. */ - -static void -lst_linearized_niter (lst_p lst, mpz_t res) -{ - int i; - lst_p l; - mpz_t n; - - mpz_init (n); - mpz_set_si (res, 0); - - FOR_EACH_VEC_ELT (lst_p, LST_SEQ (lst), i, l) - if (LST_LOOP_P (l)) - { - lst_linearized_niter (l, n); - mpz_add (res, res, n); - } - - if (LST_LOOP_P (lst)) - { - lst_niter_for_loop (lst, n); - - if (mpz_cmp_si (res, 0) != 0) - mpz_mul (res, res, n); - else - mpz_set (res, n); - } - - mpz_clear (n); -} - -/* Applies the translation "f (x) = x + OFFSET" to the loop containing - STMT. */ - -static void -lst_offset (lst_p stmt, mpz_t offset) -{ - lst_p inner = LST_LOOP_FATHER (stmt); - poly_bb_p pbb = LST_PBB (stmt); - ppl_Polyhedron_t poly = PBB_TRANSFORMED_SCATTERING (pbb); - int inner_depth = lst_depth (inner); - ppl_dimension_type inner_dim = psct_dynamic_dim (pbb, inner_depth); - ppl_Linear_Expression_t expr; - ppl_dimension_type dim; - ppl_Coefficient_t one; - mpz_t x; - - mpz_init (x); - mpz_set_si (x, 1); - ppl_new_Coefficient (&one); - ppl_assign_Coefficient_from_mpz_t (one, x); - - ppl_Polyhedron_space_dimension (poly, &dim); - ppl_new_Linear_Expression_with_dimension (&expr, dim); - - ppl_set_coef (expr, inner_dim, 1); - ppl_set_inhomogeneous_gmp (expr, offset); - ppl_Polyhedron_affine_image (poly, inner_dim, expr, one); - ppl_delete_Linear_Expression (expr); - ppl_delete_Coefficient (one); -} - -/* Scale by FACTOR the loop LST containing STMT. */ - -static void -lst_scale (lst_p lst, lst_p stmt, mpz_t factor) -{ - mpz_t x; - ppl_Coefficient_t one; - int outer_depth = lst_depth (lst); - poly_bb_p pbb = LST_PBB (stmt); - ppl_Polyhedron_t poly = PBB_TRANSFORMED_SCATTERING (pbb); - ppl_dimension_type outer_dim = psct_dynamic_dim (pbb, outer_depth); - ppl_Linear_Expression_t expr; - ppl_dimension_type dim; - - mpz_init (x); - mpz_set_si (x, 1); - ppl_new_Coefficient (&one); - ppl_assign_Coefficient_from_mpz_t (one, x); - - ppl_Polyhedron_space_dimension (poly, &dim); - ppl_new_Linear_Expression_with_dimension (&expr, dim); - - /* outer_dim = factor * outer_dim. */ - ppl_set_coef_gmp (expr, outer_dim, factor); - ppl_Polyhedron_affine_image (poly, outer_dim, expr, one); - ppl_delete_Linear_Expression (expr); - - mpz_clear (x); - ppl_delete_Coefficient (one); -} - -/* Project the INNER loop into the iteration domain of the OUTER loop. - STRIDE is the number of iterations between two iterations of the - outer loop. */ - -static void -lst_project_loop (lst_p outer, lst_p inner, mpz_t stride) -{ - int i; - lst_p stmt; - mpz_t x; - ppl_Coefficient_t one; - int outer_depth = lst_depth (outer); - int inner_depth = lst_depth (inner); - - mpz_init (x); - mpz_set_si (x, 1); - ppl_new_Coefficient (&one); - ppl_assign_Coefficient_from_mpz_t (one, x); - - FOR_EACH_VEC_ELT (lst_p, LST_SEQ (inner), i, stmt) - { - poly_bb_p pbb = LST_PBB (stmt); - ppl_Polyhedron_t poly = PBB_TRANSFORMED_SCATTERING (pbb); - ppl_dimension_type outer_dim = psct_dynamic_dim (pbb, outer_depth); - ppl_dimension_type inner_dim = psct_dynamic_dim (pbb, inner_depth); - ppl_Linear_Expression_t expr; - ppl_dimension_type dim; - ppl_dimension_type *ds; - - /* There should be no loops under INNER. */ - gcc_assert (!LST_LOOP_P (stmt)); - ppl_Polyhedron_space_dimension (poly, &dim); - ppl_new_Linear_Expression_with_dimension (&expr, dim); - - /* outer_dim = outer_dim * stride + inner_dim. */ - ppl_set_coef (expr, inner_dim, 1); - ppl_set_coef_gmp (expr, outer_dim, stride); - ppl_Polyhedron_affine_image (poly, outer_dim, expr, one); - ppl_delete_Linear_Expression (expr); - - /* Project on inner_dim. */ - ppl_new_Linear_Expression_with_dimension (&expr, dim - 1); - ppl_Polyhedron_affine_image (poly, inner_dim, expr, one); - ppl_delete_Linear_Expression (expr); - - /* Remove inner loop and the static schedule of its body. */ - /* FIXME: As long as we use PPL we are not able to remove the old - scattering dimensions. The reason is that these dimensions are not - entirely unused. They are not necessary as part of the scheduling - vector, as the earlier dimensions already unambiguously define the - execution time, however they may still be needed to carry modulo - constraints as introduced e.g. by strip mining. The correct solution - would be to project these dimensions out of the scattering polyhedra. - In case they are still required to carry modulo constraints they should be kept - internally as existentially quantified dimensions. PPL does only support - projection of rational polyhedra, however in this case we need an integer - projection. With isl this will be trivial to implement. For now we just - leave the dimensions. This is a little ugly, but should be correct. */ - if (0) { - ds = XNEWVEC (ppl_dimension_type, 2); - ds[0] = inner_dim; - ds[1] = inner_dim + 1; - ppl_Polyhedron_remove_space_dimensions (poly, ds, 2); - PBB_NB_SCATTERING_TRANSFORM (pbb) -= 2; - free (ds); - } - } - - mpz_clear (x); - ppl_delete_Coefficient (one); -} - -/* Flattens the loop nest LST. Return true when something changed. - OFFSET is used to compute the number of iterations of the outermost - loop before the current LST is executed. */ - -static bool -lst_flatten_loop (lst_p lst, mpz_t init_offset) -{ - int i; - lst_p l; - bool res = false; - mpz_t n, one, offset, stride; - - mpz_init (n); - mpz_init (one); - mpz_init (offset); - mpz_init (stride); - mpz_set (offset, init_offset); - mpz_set_si (one, 1); - - lst_linearized_niter (lst, stride); - lst_niter_for_loop (lst, n); - mpz_tdiv_q (stride, stride, n); - - FOR_EACH_VEC_ELT (lst_p, LST_SEQ (lst), i, l) - if (LST_LOOP_P (l)) - { - res = true; - - lst_flatten_loop (l, offset); - lst_niter_for_loop (l, n); - - lst_project_loop (lst, l, stride); - - /* The offset is the number of iterations minus 1, as we want - to execute the next statements at the same iteration as the - last iteration of the loop. */ - mpz_sub (n, n, one); - mpz_add (offset, offset, n); - } - else - { - lst_scale (lst, l, stride); - if (mpz_cmp_si (offset, 0) != 0) - lst_offset (l, offset); - } - - FOR_EACH_VEC_ELT (lst_p, LST_SEQ (lst), i, l) - if (LST_LOOP_P (l)) - lst_remove_loop_and_inline_stmts_in_loop_father (l); - - mpz_clear (n); - mpz_clear (one); - mpz_clear (offset); - mpz_clear (stride); - return res; -} - -/* Remove all but the first 3 dimensions of the scattering: - - dim0: the static schedule for the loop - - dim1: the dynamic schedule of the loop - - dim2: the static schedule for the loop body. */ - -static void -remove_unused_scattering_dimensions (lst_p lst) -{ - int i; - lst_p stmt; - mpz_t x; - ppl_Coefficient_t one; - - mpz_init (x); - mpz_set_si (x, 1); - ppl_new_Coefficient (&one); - ppl_assign_Coefficient_from_mpz_t (one, x); - - FOR_EACH_VEC_ELT (lst_p, LST_SEQ (lst), i, stmt) - { - poly_bb_p pbb = LST_PBB (stmt); - ppl_Polyhedron_t poly = PBB_TRANSFORMED_SCATTERING (pbb); - int j, nb_dims_to_remove = PBB_NB_SCATTERING_TRANSFORM (pbb) - 3; - ppl_dimension_type *ds; - - /* There should be no loops inside LST after flattening. */ - gcc_assert (!LST_LOOP_P (stmt)); - - if (!nb_dims_to_remove) - continue; - - ds = XNEWVEC (ppl_dimension_type, nb_dims_to_remove); - for (j = 0; j < nb_dims_to_remove; j++) - ds[j] = j + 3; - - ppl_Polyhedron_remove_space_dimensions (poly, ds, nb_dims_to_remove); - PBB_NB_SCATTERING_TRANSFORM (pbb) -= nb_dims_to_remove; - free (ds); - } - - mpz_clear (x); - ppl_delete_Coefficient (one); -} - -/* Flattens all the loop nests of LST. Return true when something - changed. */ - -static bool -lst_do_flatten (lst_p lst) -{ - int i; - lst_p l; - bool res = false; - mpz_t zero; - - if (!lst - || !LST_LOOP_P (lst)) - return false; - - mpz_init (zero); - mpz_set_si (zero, 0); - - FOR_EACH_VEC_ELT (lst_p, LST_SEQ (lst), i, l) - if (LST_LOOP_P (l)) - { - res |= lst_flatten_loop (l, zero); - - /* FIXME: As long as we use PPL we are not able to remove the old - scattering dimensions. The reason is that these dimensions are not - entirely unused. They are not necessary as part of the scheduling - vector, as the earlier dimensions already unambiguously define the - execution time, however they may still be needed to carry modulo - constraints as introduced e.g. by strip mining. The correct solution - would be to project these dimensions out of the scattering polyhedra. - In case they are still required to carry modulo constraints they should be kept - internally as existentially quantified dimensions. PPL does only support - projection of rational polyhedra, however in this case we need an integer - projection. With isl this will be trivial to implement. For now we just - leave the dimensions. This is a little ugly, but should be correct. */ - if (0) - remove_unused_scattering_dimensions (l); - } - - lst_update_scattering (lst); - mpz_clear (zero); - return res; -} - -/* Flatten all the loop nests in SCOP. Returns true when something - changed. */ - -bool -flatten_all_loops (scop_p scop) -{ - return lst_do_flatten (SCOP_TRANSFORMED_SCHEDULE (scop)); -} - -#endif diff --git a/gcc/graphite-poly.c b/gcc/graphite-poly.c index db5b0cbf3ad..9f3ba1db347 100644 --- a/gcc/graphite-poly.c +++ b/gcc/graphite-poly.c @@ -771,9 +771,6 @@ apply_poly_transforms (scop_p scop) transform_done |= scop_do_interchange (scop); } - if (flag_loop_flatten) - transform_done |= flatten_all_loops (scop); - /* This feature is only enabled in the Graphite branch. */ if (0) { diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c index 0a3680b1fa1..3f4d7d8eb19 100644 --- a/gcc/graphite-scop-detection.c +++ b/gcc/graphite-scop-detection.c @@ -1026,7 +1026,6 @@ create_sese_edges (VEC (sd_region, heap) *regions) #ifdef ENABLE_CHECKING verify_loop_structure (); - verify_dominators (CDI_DOMINATORS); verify_ssa (false); #endif } diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index b6a8b0c8884..09c6af22d43 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -1647,8 +1647,10 @@ rank_for_schedule (const void *x, const void *y) /* Schedule debug insns as early as possible. */ if (DEBUG_INSN_P (tmp) && !DEBUG_INSN_P (tmp2)) return -1; - else if (DEBUG_INSN_P (tmp2)) + else if (!DEBUG_INSN_P (tmp) && DEBUG_INSN_P (tmp2)) return 1; + else if (DEBUG_INSN_P (tmp) && DEBUG_INSN_P (tmp2)) + return INSN_LUID (tmp) - INSN_LUID (tmp2); } /* The insn in a schedule group should be issued the first. */ diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c index 8d81c8913da..e4e13abe0aa 100644 --- a/gcc/ifcvt.c +++ b/gcc/ifcvt.c @@ -2295,7 +2295,9 @@ noce_get_condition (rtx jump, rtx *earliest, bool then_else_reversed) cond = XEXP (SET_SRC (set), 0); tmp = XEXP (cond, 0); - if (REG_P (tmp) && GET_MODE_CLASS (GET_MODE (tmp)) == MODE_INT) + if (REG_P (tmp) && GET_MODE_CLASS (GET_MODE (tmp)) == MODE_INT + && (GET_MODE (tmp) != BImode + || !targetm.small_register_classes_for_mode_p (BImode))) { *earliest = jump; diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 6d76adbbfb6..3856793b054 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -2508,9 +2508,27 @@ ipa_modify_call_arguments (struct cgraph_edge *cs, gimple stmt, } } - expr = fold_build2_loc (loc, MEM_REF, adj->type, base, off); - if (adj->by_ref) - expr = build_fold_addr_expr (expr); + if (!adj->by_ref) + { + tree type = adj->type; + unsigned int align; + unsigned HOST_WIDE_INT misalign; + align = get_pointer_alignment_1 (base, &misalign); + misalign += (double_int_sext (tree_to_double_int (off), + TYPE_PRECISION (TREE_TYPE (off))).low + * BITS_PER_UNIT); + misalign = misalign & (align - 1); + if (misalign != 0) + align = (misalign & -misalign); + if (align < TYPE_ALIGN (type)) + type = build_aligned_type (type, align); + expr = fold_build2_loc (loc, MEM_REF, type, base, off); + } + else + { + expr = fold_build2_loc (loc, MEM_REF, adj->type, base, off); + expr = build_fold_addr_expr (expr); + } expr = force_gimple_operand_gsi (&gsi, expr, adj->by_ref diff --git a/gcc/ipa-split.c b/gcc/ipa-split.c index 124098ce669..9dddf393fa7 100644 --- a/gcc/ipa-split.c +++ b/gcc/ipa-split.c @@ -1,5 +1,5 @@ /* Function splitting pass - Copyright (C) 2010, 2011 + Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc. Contributed by Jan Hubicka <jh@suse.cz> @@ -624,7 +624,9 @@ find_return_bb (void) for (bsi = gsi_last_bb (e->src); !gsi_end_p (bsi); gsi_prev (&bsi)) { gimple stmt = gsi_stmt (bsi); - if (gimple_code (stmt) == GIMPLE_LABEL || is_gimple_debug (stmt)) + if (gimple_code (stmt) == GIMPLE_LABEL + || is_gimple_debug (stmt) + || gimple_clobber_p (stmt)) ; else if (gimple_code (stmt) == GIMPLE_ASSIGN && found_return @@ -657,7 +659,8 @@ find_retval (basic_block return_bb) for (bsi = gsi_start_bb (return_bb); !gsi_end_p (bsi); gsi_next (&bsi)) if (gimple_code (gsi_stmt (bsi)) == GIMPLE_RETURN) return gimple_return_retval (gsi_stmt (bsi)); - else if (gimple_code (gsi_stmt (bsi)) == GIMPLE_ASSIGN) + else if (gimple_code (gsi_stmt (bsi)) == GIMPLE_ASSIGN + && !gimple_clobber_p (gsi_stmt (bsi))) return gimple_assign_rhs1 (gsi_stmt (bsi)); return NULL; } @@ -733,6 +736,9 @@ visit_bb (basic_block bb, basic_block return_bb, if (is_gimple_debug (stmt)) continue; + if (gimple_clobber_p (stmt)) + continue; + /* FIXME: We can split regions containing EH. We can not however split RESX, EH_DISPATCH and EH_POINTER referring to same region into different partitions. This would require tracking of @@ -1294,7 +1300,8 @@ split_function (struct split_point *split_point) gimple_return_set_retval (gsi_stmt (bsi), retval); break; } - else if (gimple_code (gsi_stmt (bsi)) == GIMPLE_ASSIGN) + else if (gimple_code (gsi_stmt (bsi)) == GIMPLE_ASSIGN + && !gimple_clobber_p (gsi_stmt (bsi))) { gimple_assign_set_rhs1 (gsi_stmt (bsi), retval); break; diff --git a/gcc/ira-color.c b/gcc/ira-color.c index c638e58f333..a01d050fbb7 100644 --- a/gcc/ira-color.c +++ b/gcc/ira-color.c @@ -1,5 +1,5 @@ /* IRA allocation based on graph coloring. - Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 + Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. Contributed by Vladimir Makarov <vmakarov@redhat.com>. @@ -1067,7 +1067,7 @@ setup_profitable_hard_regs (void) { int num = OBJECT_SUBWORD (conflict_obj); - if (WORDS_BIG_ENDIAN) + if (REG_WORDS_BIG_ENDIAN) CLEAR_HARD_REG_BIT (ALLOCNO_COLOR_DATA (conflict_a)->profitable_hard_regs, hard_regno + nobj - num - 1); @@ -1451,7 +1451,7 @@ check_hard_reg_p (ira_allocno_t a, int hard_regno, if (nregs == nwords) { - if (WORDS_BIG_ENDIAN) + if (REG_WORDS_BIG_ENDIAN) set_to_test_start = nwords - j - 1; else set_to_test_start = j; @@ -1610,7 +1610,7 @@ assign_hard_reg (ira_allocno_t a, bool retry_p) { int num = OBJECT_SUBWORD (conflict_obj); - if (WORDS_BIG_ENDIAN) + if (REG_WORDS_BIG_ENDIAN) SET_HARD_REG_BIT (conflicting_regs[word], hard_regno + n_objects - num - 1); else diff --git a/gcc/ira.c b/gcc/ira.c index 2bdf9fd7fb6..41a2928d0c9 100644 --- a/gcc/ira.c +++ b/gcc/ira.c @@ -1,5 +1,5 @@ /* Integrated Register Allocator (IRA) entry point. - Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 + Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. Contributed by Vladimir Makarov <vmakarov@redhat.com>. @@ -2089,7 +2089,7 @@ check_allocation (void) int this_regno = hard_regno; if (n > 1) { - if (WORDS_BIG_ENDIAN) + if (REG_WORDS_BIG_ENDIAN) this_regno += n - i - 1; else this_regno += i; @@ -2108,7 +2108,7 @@ check_allocation (void) if (ALLOCNO_NUM_OBJECTS (conflict_a) > 1 && conflict_nregs == ALLOCNO_NUM_OBJECTS (conflict_a)) { - if (WORDS_BIG_ENDIAN) + if (REG_WORDS_BIG_ENDIAN) conflict_hard_regno += (ALLOCNO_NUM_OBJECTS (conflict_a) - OBJECT_SUBWORD (conflict_obj) - 1); else diff --git a/gcc/langhooks.c b/gcc/langhooks.c index 80efd32580d..017e024e248 100644 --- a/gcc/langhooks.c +++ b/gcc/langhooks.c @@ -605,6 +605,16 @@ lhd_builtin_function (tree decl) return decl; } +/* Create a builtin type. */ + +tree +add_builtin_type (const char *name, tree type) +{ + tree id = get_identifier (name); + tree decl = build_decl (BUILTINS_LOCATION, TYPE_DECL, id, type); + return lang_hooks.decls.pushdecl (decl); +} + /* LTO hooks. */ /* Used to save and restore any previously active section. */ diff --git a/gcc/langhooks.h b/gcc/langhooks.h index 89e74f93681..15497225cbd 100644 --- a/gcc/langhooks.h +++ b/gcc/langhooks.h @@ -479,6 +479,7 @@ struct lang_hooks /* Each front end provides its own. */ extern struct lang_hooks lang_hooks; + extern tree add_builtin_function (const char *name, tree type, int function_code, enum built_in_class cl, const char *library_name, @@ -489,5 +490,6 @@ extern tree add_builtin_function_ext_scope (const char *name, tree type, enum built_in_class cl, const char *library_name, tree attrs); - +extern tree add_builtin_type (const char *name, tree type); + #endif /* GCC_LANG_HOOKS_H */ diff --git a/gcc/loop-doloop.c b/gcc/loop-doloop.c index 5f645694107..65ba651d675 100644 --- a/gcc/loop-doloop.c +++ b/gcc/loop-doloop.c @@ -747,7 +747,6 @@ doloop_optimize_loops (void) iv_analysis_done (); #ifdef ENABLE_CHECKING - verify_dominators (CDI_DOMINATORS); verify_loop_structure (); #endif } diff --git a/gcc/loop-init.c b/gcc/loop-init.c index 9184a148c40..daf5fa07410 100644 --- a/gcc/loop-init.c +++ b/gcc/loop-init.c @@ -91,7 +91,6 @@ loop_optimizer_init (unsigned flags) flow_loops_dump (dump_file, NULL, 1); #ifdef ENABLE_CHECKING - verify_dominators (CDI_DOMINATORS); verify_loop_structure (); #endif } diff --git a/gcc/loop-unroll.c b/gcc/loop-unroll.c index 378b933baf0..5a658d85bcb 100644 --- a/gcc/loop-unroll.c +++ b/gcc/loop-unroll.c @@ -198,7 +198,6 @@ unroll_and_peel_loops (int flags) if (check) { #ifdef ENABLE_CHECKING - verify_dominators (CDI_DOMINATORS); verify_loop_structure (); #endif } @@ -255,7 +254,6 @@ peel_loops_completely (int flags) { peel_loop_completely (loop); #ifdef ENABLE_CHECKING - verify_dominators (CDI_DOMINATORS); verify_loop_structure (); #endif } diff --git a/gcc/loop-unswitch.c b/gcc/loop-unswitch.c index 78da1154299..d6c4c226961 100644 --- a/gcc/loop-unswitch.c +++ b/gcc/loop-unswitch.c @@ -149,7 +149,6 @@ unswitch_loops (void) { unswitch_single_loop (loop, NULL_RTX, 0); #ifdef ENABLE_CHECKING - verify_dominators (CDI_DOMINATORS); verify_loop_structure (); #endif } diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 825d268e290..16624e61482 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,14 @@ +2012-03-06 Richard Guenther <rguenther@suse.de> + + PR lto/52097 + * lto.c (uniquify_nodes): Merge TYPE_FIELDS of variant types. + +2012-02-28 Richard Guenther <rguenther@suse.de> + + PR lto/52400 + * lto.c (lto_register_function_decl_in_symtab): Do not register + a reverse renamed decl mapping. + 2012-01-06 Jakub Jelinek <jakub@redhat.com> PR lto/51774 diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index 2ec6c44906e..83b53918f98 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -689,13 +689,6 @@ lto_register_function_decl_in_symtab (struct data_in *data_in, tree decl) lto_record_renamed_decl (data_in->file_data, IDENTIFIER_POINTER (old_assembler_name), IDENTIFIER_POINTER (new_assembler_name)); - - /* Also register the reverse mapping so that we can find the - new name given to an existing assembler name (used when - restoring alias pairs in input_constructors_or_inits. */ - lto_record_renamed_decl (data_in->file_data, - IDENTIFIER_POINTER (new_assembler_name), - IDENTIFIER_POINTER (old_assembler_name)); } } @@ -805,6 +798,41 @@ uniquify_nodes (struct data_in *data_in, unsigned from) TYPE_NEXT_VARIANT (mv) = t; if (RECORD_OR_UNION_TYPE_P (t)) TYPE_BINFO (t) = TYPE_BINFO (mv); + /* Preserve the invariant that type variants share their + TYPE_FIELDS. */ + if (RECORD_OR_UNION_TYPE_P (t) + && TYPE_FIELDS (mv) != TYPE_FIELDS (t)) + { + tree f1, f2; + for (f1 = TYPE_FIELDS (mv), f2 = TYPE_FIELDS (t); + f1 && f2; f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2)) + { + unsigned ix; + gcc_assert (f1 != f2 + && DECL_NAME (f1) == DECL_NAME (f2)); + if (!streamer_tree_cache_lookup (cache, f2, &ix)) + gcc_unreachable (); + /* If we're going to replace an element which we'd + still visit in the next iterations, we wouldn't + handle it, so do it here. We do have to handle it + even though the field_decl itself will be removed, + as it could refer to e.g. integer_cst which we + wouldn't reach via any other way, hence they + (and their type) would stay uncollected. */ + /* ??? We should rather make sure to replace all + references to f2 with f1. That means handling + COMPONENT_REFs and CONSTRUCTOR elements in + lto_fixup_types and special-case the field-decl + operand handling. */ + /* ??? Not sure the above is all relevant in this + path canonicalizing TYPE_FIELDS to that of the + main variant. */ + if (ix < i) + lto_fixup_types (f2); + streamer_tree_cache_insert_at (cache, f1, ix); + } + TYPE_FIELDS (t) = TYPE_FIELDS (mv); + } } /* Finally adjust our main variant and fix it up. */ diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog index 3c176e823b4..70912141660 100644 --- a/gcc/objc/ChangeLog +++ b/gcc/objc/ChangeLog @@ -1,3 +1,8 @@ +2012-03-05 Jason Merrill <jason@redhat.com> + + * objc-map.c (objc_map_private_resize, objc_map_alloc_ggc): Don't + call _stat functions without MEM_STAT_INFO. + 2011-11-12 Iain Sandoe <iains@gcc.gnu.org> * objc-next-runtime-abi-01.c (objc_eh_personality): Use gcc personality diff --git a/gcc/objc/objc-map.c b/gcc/objc/objc-map.c index 77a98c1d825..a4a1eecfde4 100644 --- a/gcc/objc/objc-map.c +++ b/gcc/objc/objc-map.c @@ -56,7 +56,7 @@ next_power_of_two (size_t x) objc_map_t objc_map_alloc_ggc (size_t initial_capacity) { - objc_map_t map = (objc_map_t) ggc_internal_cleared_vec_alloc_stat (1, sizeof (struct objc_map_private)); + objc_map_t map = (objc_map_t) ggc_internal_cleared_vec_alloc (1, sizeof (struct objc_map_private)); if (map == NULL) OUT_OF_MEMORY; @@ -67,8 +67,8 @@ objc_map_alloc_ggc (size_t initial_capacity) map->maximum_load_factor = 70; map->max_number_of_non_empty_slots = (initial_capacity * map->maximum_load_factor) / 100; - map->slots = (tree *)ggc_internal_cleared_vec_alloc_stat (initial_capacity, sizeof (tree)); - map->values = (tree *)ggc_internal_cleared_vec_alloc_stat (initial_capacity, sizeof (tree)); + map->slots = (tree *)ggc_internal_cleared_vec_alloc (initial_capacity, sizeof (tree)); + map->values = (tree *)ggc_internal_cleared_vec_alloc (initial_capacity, sizeof (tree)); if (map->slots == NULL) OUT_OF_MEMORY; @@ -112,8 +112,8 @@ objc_map_private_resize (objc_map_t map, size_t new_number_of_slots) map->max_number_of_non_empty_slots = (map->number_of_slots * map->maximum_load_factor) / 100; - map->slots = (tree *)ggc_internal_cleared_vec_alloc_stat (map->number_of_slots, sizeof (tree)); - map->values = (tree *)ggc_internal_cleared_vec_alloc_stat (map->number_of_slots, sizeof (tree)); + map->slots = (tree *)ggc_internal_cleared_vec_alloc (map->number_of_slots, sizeof (tree)); + map->values = (tree *)ggc_internal_cleared_vec_alloc (map->number_of_slots, sizeof (tree)); if (map->slots == NULL) OUT_OF_MEMORY; diff --git a/gcc/omp-low.c b/gcc/omp-low.c index db715947df0..84986efcdda 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -407,8 +407,7 @@ extract_omp_for_data (gimple for_stmt, struct omp_for_data *fd, tree itype = TREE_TYPE (loop->v); if (POINTER_TYPE_P (itype)) - itype - = lang_hooks.types.type_for_size (TYPE_PRECISION (itype), 0); + itype = signed_type_for (itype); t = build_int_cst (itype, (loop->cond_code == LT_EXPR ? -1 : 1)); t = fold_build2_loc (loc, PLUS_EXPR, itype, @@ -3772,7 +3771,7 @@ expand_omp_for_generic (struct omp_region *region, tree itype = TREE_TYPE (fd->loops[i].v); if (POINTER_TYPE_P (itype)) - itype = lang_hooks.types.type_for_size (TYPE_PRECISION (itype), 0); + itype = signed_type_for (itype); t = build_int_cst (itype, (fd->loops[i].cond_code == LT_EXPR ? -1 : 1)); t = fold_build2 (PLUS_EXPR, itype, @@ -3836,8 +3835,7 @@ expand_omp_for_generic (struct omp_region *region, && TYPE_PRECISION (type) != TYPE_PRECISION (fd->iter_type)) { /* Avoid casting pointers to integer of a different size. */ - tree itype - = lang_hooks.types.type_for_size (TYPE_PRECISION (type), 0); + tree itype = signed_type_for (type); t1 = fold_convert (fd->iter_type, fold_convert (itype, fd->loop.n2)); t0 = fold_convert (fd->iter_type, fold_convert (itype, fd->loop.n1)); } @@ -3904,8 +3902,7 @@ expand_omp_for_generic (struct omp_region *region, if (bias) t = fold_build2 (MINUS_EXPR, fd->iter_type, t, bias); if (POINTER_TYPE_P (type)) - t = fold_convert (lang_hooks.types.type_for_size (TYPE_PRECISION (type), - 0), t); + t = fold_convert (signed_type_for (type), t); t = fold_convert (type, t); t = force_gimple_operand_gsi (&gsi, t, false, NULL_TREE, false, GSI_CONTINUE_LINKING); @@ -3916,8 +3913,7 @@ expand_omp_for_generic (struct omp_region *region, if (bias) t = fold_build2 (MINUS_EXPR, fd->iter_type, t, bias); if (POINTER_TYPE_P (type)) - t = fold_convert (lang_hooks.types.type_for_size (TYPE_PRECISION (type), - 0), t); + t = fold_convert (signed_type_for (type), t); t = fold_convert (type, t); iend = force_gimple_operand_gsi (&gsi, t, true, NULL_TREE, false, GSI_CONTINUE_LINKING); @@ -3932,7 +3928,7 @@ expand_omp_for_generic (struct omp_region *region, tree vtype = TREE_TYPE (fd->loops[i].v), itype; itype = vtype; if (POINTER_TYPE_P (vtype)) - itype = lang_hooks.types.type_for_size (TYPE_PRECISION (vtype), 0); + itype = signed_type_for (vtype); t = fold_build2 (TRUNC_MOD_EXPR, type, tem, counts[i]); t = fold_convert (itype, t); t = fold_build2 (MULT_EXPR, itype, t, @@ -4162,7 +4158,7 @@ expand_omp_for_static_nochunk (struct omp_region *region, itype = type = TREE_TYPE (fd->loop.v); if (POINTER_TYPE_P (type)) - itype = lang_hooks.types.type_for_size (TYPE_PRECISION (type), 0); + itype = signed_type_for (type); entry_bb = region->entry; cont_bb = region->cont; @@ -4379,7 +4375,7 @@ expand_omp_for_static_chunk (struct omp_region *region, struct omp_for_data *fd) itype = type = TREE_TYPE (fd->loop.v); if (POINTER_TYPE_P (type)) - itype = lang_hooks.types.type_for_size (TYPE_PRECISION (type), 0); + itype = signed_type_for (type); entry_bb = region->entry; se = split_block (entry_bb, last_stmt (entry_bb)); @@ -5504,9 +5500,7 @@ expand_omp_atomic (struct omp_region *region) unsigned int align = TYPE_ALIGN_UNIT (type); /* __sync builtins require strict data alignment. */ - /* ??? Assume BIGGEST_ALIGNMENT *is* aligned. */ - if (exact_log2 (align) >= index - || align * BITS_PER_UNIT >= BIGGEST_ALIGNMENT) + if (exact_log2 (align) >= index) { /* Atomic load. */ if (loaded_val == stored_val diff --git a/gcc/optabs.c b/gcc/optabs.c index b0ecdf0513e..565db428045 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -60,6 +60,7 @@ optab code_to_optab[NUM_RTX_CODE + 1]; static void prepare_float_lib_cmp (rtx, rtx, enum rtx_code, rtx *, enum machine_mode *); static rtx expand_unop_direct (enum machine_mode, optab, rtx, rtx, int); +static void emit_libcall_block_1 (rtx, rtx, rtx, rtx, bool); /* Debug facility for use in GDB. */ void debug_optab_libfuncs (void); @@ -2115,8 +2116,9 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1, end_sequence (); target = gen_reg_rtx (mode); - emit_libcall_block (insns, target, value, - gen_rtx_fmt_ee (binoptab->code, mode, op0, op1)); + emit_libcall_block_1 (insns, target, value, + gen_rtx_fmt_ee (binoptab->code, mode, op0, op1), + trapv_binoptab_p (binoptab)); return target; } @@ -3197,7 +3199,8 @@ expand_unop (enum machine_mode mode, optab unoptab, rtx op0, rtx target, eq_value = simplify_gen_unary (TRUNCATE, outmode, eq_value, mode); else if (GET_MODE_SIZE (outmode) > GET_MODE_SIZE (mode)) eq_value = simplify_gen_unary (ZERO_EXTEND, outmode, eq_value, mode); - emit_libcall_block (insns, target, value, eq_value); + emit_libcall_block_1 (insns, target, value, eq_value, + trapv_unoptab_p (unoptab)); return target; } @@ -3775,8 +3778,9 @@ no_conflict_move_test (rtx dest, const_rtx set, void *p0) an insn to move RESULT to TARGET. This last insn will have a REQ_EQUAL note with an operand of EQUIV. */ -void -emit_libcall_block (rtx insns, rtx target, rtx result, rtx equiv) +static void +emit_libcall_block_1 (rtx insns, rtx target, rtx result, rtx equiv, + bool equiv_may_trap) { rtx final_dest = target; rtx next, last, insn; @@ -3789,7 +3793,8 @@ emit_libcall_block (rtx insns, rtx target, rtx result, rtx equiv) /* If we're using non-call exceptions, a libcall corresponding to an operation that may trap may also trap. */ /* ??? See the comment in front of make_reg_eh_region_note. */ - if (cfun->can_throw_non_call_exceptions && may_trap_p (equiv)) + if (cfun->can_throw_non_call_exceptions + && (equiv_may_trap || may_trap_p (equiv))) { for (insn = insns; insn; insn = NEXT_INSN (insn)) if (CALL_P (insn)) @@ -3870,6 +3875,12 @@ emit_libcall_block (rtx insns, rtx target, rtx result, rtx equiv) if (final_dest != target) emit_move_insn (final_dest, target); } + +void +emit_libcall_block (rtx insns, rtx target, rtx result, rtx equiv) +{ + emit_libcall_block_1 (insns, target, result, equiv, false); +} /* Nonzero if we can perform a comparison of mode MODE straightforwardly. PURPOSE describes how this comparison will be used. CODE is the rtx @@ -7384,34 +7395,57 @@ rtx expand_atomic_test_and_set (rtx target, rtx mem, enum memmodel model) { enum machine_mode mode = GET_MODE (mem); - rtx ret; + rtx ret, trueval, subtarget; ret = maybe_emit_atomic_test_and_set (target, mem, model); if (ret) return ret; - if (target == NULL_RTX) - target = gen_reg_rtx (mode); + /* Be binary compatible with non-default settings of trueval, and different + cpu revisions. E.g. one revision may have atomic-test-and-set, but + another only has atomic-exchange. */ + if (targetm.atomic_test_and_set_trueval == 1) + { + trueval = const1_rtx; + subtarget = target ? target : gen_reg_rtx (mode); + } + else + { + trueval = gen_int_mode (targetm.atomic_test_and_set_trueval, mode); + subtarget = gen_reg_rtx (mode); + } - /* If there is no test and set, try exchange, then a compare_and_swap loop, - then __sync_test_and_set. */ - ret = maybe_emit_atomic_exchange (target, mem, const1_rtx, model); - if (ret) - return ret; + /* Try the atomic-exchange optab... */ + ret = maybe_emit_atomic_exchange (subtarget, mem, trueval, model); - ret = maybe_emit_compare_and_swap_exchange_loop (target, mem, const1_rtx); - if (ret) - return ret; + /* ... then an atomic-compare-and-swap loop ... */ + if (!ret) + ret = maybe_emit_compare_and_swap_exchange_loop (subtarget, mem, trueval); - ret = maybe_emit_sync_lock_test_and_set (target, mem, const1_rtx, model); - if (ret) - return ret; + /* ... before trying the vaguely defined legacy lock_test_and_set. */ + if (!ret) + ret = maybe_emit_sync_lock_test_and_set (subtarget, mem, trueval, model); - /* Failing all else, assume a single threaded environment and simply perform - the operation. */ - emit_move_insn (target, mem); - emit_move_insn (mem, const1_rtx); - return target; + /* Recall that the legacy lock_test_and_set optab was allowed to do magic + things with the value 1. Thus we try again without trueval. */ + if (!ret && targetm.atomic_test_and_set_trueval != 1) + ret = maybe_emit_sync_lock_test_and_set (subtarget, mem, const1_rtx, model); + + /* Failing all else, assume a single threaded environment and simply + perform the operation. */ + if (!ret) + { + emit_move_insn (subtarget, mem); + emit_move_insn (mem, trueval); + ret = subtarget; + } + + /* Recall that have to return a boolean value; rectify if trueval + is not exactly one. */ + if (targetm.atomic_test_and_set_trueval != 1) + ret = emit_store_flag_force (target, NE, ret, const0_rtx, mode, 0, 1); + + return ret; } /* This function expands the atomic exchange operation: diff --git a/gcc/optabs.h b/gcc/optabs.h index 6ad6dae9ab6..70a7395cc05 100644 --- a/gcc/optabs.h +++ b/gcc/optabs.h @@ -1103,6 +1103,25 @@ set_direct_optab_handler (direct_optab op, enum machine_mode mode, op->handlers[(int) mode].insn_code = (int) code - (int) CODE_FOR_nothing; } +/* Return true if UNOPTAB is for a trapping-on-overflow operation. */ + +static inline bool +trapv_unoptab_p (optab unoptab) +{ + return (unoptab == negv_optab + || unoptab == absv_optab); +} + +/* Return true if BINOPTAB is for a trapping-on-overflow operation. */ + +static inline bool +trapv_binoptab_p (optab binoptab) +{ + return (binoptab == addv_optab + || binoptab == subv_optab + || binoptab == smulv_optab); +} + extern rtx optab_libfunc (optab optab, enum machine_mode mode); extern rtx convert_optab_libfunc (convert_optab optab, enum machine_mode mode1, enum machine_mode mode2); diff --git a/gcc/passes.c b/gcc/passes.c index bd10cbc0d86..6e58d8bbd51 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -1724,11 +1724,14 @@ execute_function_todo (void *data) #if defined ENABLE_CHECKING if (flags & TODO_verify_ssa || (current_loops && loops_state_satisfies_p (LOOP_CLOSED_SSA))) - verify_ssa (true); + { + verify_gimple_in_cfg (cfun); + verify_ssa (true); + } + else if (flags & TODO_verify_stmts) + verify_gimple_in_cfg (cfun); if (flags & TODO_verify_flow) verify_flow_info (); - if (flags & TODO_verify_stmts) - verify_gimple_in_cfg (cfun); if (current_loops && loops_state_satisfies_p (LOOP_CLOSED_SSA)) verify_loop_closed_ssa (false); if (flags & TODO_verify_rtl_sharing) diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index fdb99b81e4f..56d6e87a4a8 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,23 @@ +2012-03-05 Joseph Myers <joseph@codesourcery.com> + + * sv.po: Update. + +2012-03-03 Joseph Myers <joseph@codesourcery.com> + + * de.po: Update. + +2012-03-03 Joseph Myers <joseph@codesourcery.com> + + * gcc.pot: Regenerate. + +2012-02-26 Joseph Myers <joseph@codesourcery.com> + + * sv.po: Update. + +2012-02-19 Joseph Myers <joseph@codesourcery.com> + + * sv.po: Update. + 2012-02-16 Joseph Myers <joseph@codesourcery.com> * de.po: Update. diff --git a/gcc/po/de.po b/gcc/po/de.po index 75926b20a58..10b4d2a5004 100644 --- a/gcc/po/de.po +++ b/gcc/po/de.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gcc 4.7-b20120128\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2012-01-27 16:13+0000\n" -"PO-Revision-Date: 2012-02-15 21:55+0200\n" +"PO-Revision-Date: 2012-03-03 13:30+0200\n" "Last-Translator: Roland Stigge <stigge@antcom.de>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language: de\n" @@ -42848,7 +42848,7 @@ msgstr "Implizit deklarierte BIND(C)-Variable »%s« bei %L kann nicht C-kompati #: fortran/symbol.c:294 #, gcc-internal-format, gfc-internal-format msgid "Implicitly declared variable '%s' at %L may not be C interoperable but it is a dummy argument to the BIND(C) procedure '%s' at %L" -msgstr "Implizit deklarierte Variable »%s« bei %L ist nicht C-kompatibel, sondern ein Scheinargument für BIND(C)-Prozedur »%s« bei %L" +msgstr "Implizit deklarierte Variable »%s« bei %L könnte nicht C-kompatibel sein, ist aber ein Scheinargument für BIND(C)-Prozedur »%s« bei %L" #: fortran/symbol.c:335 #, gcc-internal-format, gfc-internal-format diff --git a/gcc/po/gcc.pot b/gcc/po/gcc.pot index 107b6a2d5e0..aaa8ed2f1b8 100644 --- a/gcc/po/gcc.pot +++ b/gcc/po/gcc.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" -"POT-Creation-Date: 2012-01-27 16:13+0000\n" +"POT-Creation-Date: 2012-03-03 12:05+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: c-decl.c:4712 c-typeck.c:5944 toplev.c:1013 c-family/c-pretty-print.c:424 +#: c-decl.c:4713 c-typeck.c:5944 toplev.c:1013 c-family/c-pretty-print.c:424 #: cp/error.c:656 cp/error.c:938 msgid "<anonymous>" msgstr "" @@ -27,7 +27,7 @@ msgstr "" msgid "({anonymous})" msgstr "" -#: c-parser.c:946 cp/parser.c:22252 +#: c-parser.c:946 cp/parser.c:22253 #, gcc-internal-format msgid "expected end of line" msgstr "" @@ -37,8 +37,8 @@ msgstr "" #: c-parser.c:7303 c-parser.c:7338 c-parser.c:7369 c-parser.c:7416 #: c-parser.c:7597 c-parser.c:8364 c-parser.c:8434 c-parser.c:8477 #: c-parser.c:9755 c-parser.c:9770 c-parser.c:9779 c-parser.c:9924 -#: c-parser.c:9963 c-parser.c:2500 c-parser.c:7590 cp/parser.c:21775 -#: cp/parser.c:22198 +#: c-parser.c:9963 c-parser.c:2500 c-parser.c:7590 cp/parser.c:21776 +#: cp/parser.c:22199 #, gcc-internal-format msgid "expected %<;%>" msgstr "" @@ -50,13 +50,13 @@ msgstr "" #: c-parser.c:6698 c-parser.c:6722 c-parser.c:7888 c-parser.c:7960 #: c-parser.c:8786 c-parser.c:8807 c-parser.c:8857 c-parser.c:9010 #: c-parser.c:9089 c-parser.c:9173 c-parser.c:9887 c-parser.c:10711 -#: c-parser.c:8930 c-parser.c:8955 cp/parser.c:22201 +#: c-parser.c:8930 c-parser.c:8955 cp/parser.c:22202 #, gcc-internal-format msgid "expected %<(%>" msgstr "" #: c-parser.c:1845 c-parser.c:6389 c-parser.c:6427 c-parser.c:6555 -#: cp/parser.c:21773 cp/parser.c:22216 +#: cp/parser.c:21774 cp/parser.c:22217 #, gcc-internal-format msgid "expected %<,%>" msgstr "" @@ -72,14 +72,14 @@ msgstr "" #: c-parser.c:7682 c-parser.c:7703 c-parser.c:7911 c-parser.c:7964 #: c-parser.c:8336 c-parser.c:8789 c-parser.c:8810 c-parser.c:8888 #: c-parser.c:9017 c-parser.c:9154 c-parser.c:9237 c-parser.c:9815 -#: c-parser.c:9932 c-parser.c:9974 c-parser.c:10720 cp/parser.c:22246 +#: c-parser.c:9932 c-parser.c:9974 c-parser.c:10720 cp/parser.c:22247 #, gcc-internal-format msgid "expected %<)%>" msgstr "" #: c-parser.c:3095 c-parser.c:3904 c-parser.c:3938 c-parser.c:5224 #: c-parser.c:6491 c-parser.c:6755 c-parser.c:6861 c-parser.c:10623 -#: c-parser.c:10625 cp/parser.c:22210 +#: c-parser.c:10625 cp/parser.c:22211 #, gcc-internal-format msgid "expected %<]%>" msgstr "" @@ -88,25 +88,25 @@ msgstr "" msgid "expected %<;%>, %<,%> or %<)%>" msgstr "" -#: c-parser.c:3767 c-parser.c:9771 cp/parser.c:22204 cp/parser.c:24021 +#: c-parser.c:3767 c-parser.c:9771 cp/parser.c:22205 cp/parser.c:24022 #, gcc-internal-format msgid "expected %<}%>" msgstr "" #: c-parser.c:4057 c-parser.c:7931 c-parser.c:10217 c-parser.c:2318 -#: c-parser.c:2521 c-parser.c:7485 cp/parser.c:14416 cp/parser.c:22207 +#: c-parser.c:2521 c-parser.c:7485 cp/parser.c:14417 cp/parser.c:22208 #, gcc-internal-format msgid "expected %<{%>" msgstr "" #: c-parser.c:4276 c-parser.c:4285 c-parser.c:5128 c-parser.c:5469 #: c-parser.c:7696 c-parser.c:8071 c-parser.c:8128 c-parser.c:9143 -#: cp/parser.c:22240 cp/parser.c:23242 +#: cp/parser.c:22241 cp/parser.c:23243 #, gcc-internal-format msgid "expected %<:%>" msgstr "" -#: c-parser.c:4824 cp/parser.c:22134 +#: c-parser.c:4824 cp/parser.c:22135 #, gcc-internal-format msgid "expected %<while%>" msgstr "" @@ -115,34 +115,34 @@ msgstr "" msgid "expected %<.%>" msgstr "" -#: c-parser.c:7156 c-parser.c:7188 c-parser.c:7428 cp/parser.c:23805 -#: cp/parser.c:23879 +#: c-parser.c:7156 c-parser.c:7188 c-parser.c:7428 cp/parser.c:23806 +#: cp/parser.c:23880 #, gcc-internal-format msgid "expected %<@end%>" msgstr "" -#: c-parser.c:7845 cp/parser.c:22225 +#: c-parser.c:7845 cp/parser.c:22226 #, gcc-internal-format msgid "expected %<>%>" msgstr "" -#: c-parser.c:9241 cp/parser.c:22249 +#: c-parser.c:9241 cp/parser.c:22250 #, gcc-internal-format msgid "expected %<,%> or %<)%>" msgstr "" #: c-parser.c:9494 c-parser.c:9525 c-parser.c:9761 c-parser.c:9913 -#: c-parser.c:3961 cp/parser.c:22228 +#: c-parser.c:3961 cp/parser.c:22229 #, gcc-internal-format msgid "expected %<=%>" msgstr "" -#: c-parser.c:10274 c-parser.c:10264 cp/parser.c:26658 +#: c-parser.c:10274 c-parser.c:10264 cp/parser.c:26659 #, gcc-internal-format msgid "expected %<#pragma omp section%> or %<}%>" msgstr "" -#: c-parser.c:10611 cp/parser.c:22213 +#: c-parser.c:10611 cp/parser.c:22214 #, gcc-internal-format msgid "expected %<[%>" msgstr "" @@ -223,12 +223,12 @@ msgstr "" #: diagnostic.c:136 #, c-format -msgid "%s: all warnings being treated as errors\n" +msgid "%s: all warnings being treated as errors" msgstr "" #: diagnostic.c:141 #, c-format -msgid "%s: some warnings being treated as errors\n" +msgid "%s: some warnings being treated as errors" msgstr "" #: diagnostic.c:219 @@ -312,281 +312,281 @@ msgstr "" #. TARGET_PRINT_OPERAND must handle them. #. We can't handle floating point constants; #. PRINT_OPERAND must handle them. -#: final.c:3615 config/i386/i386.c:13019 config/pdp11/pdp11.c:1689 +#: final.c:3615 config/i386/i386.c:13048 config/pdp11/pdp11.c:1689 #, c-format msgid "floating constant misused" msgstr "" -#: final.c:3673 config/i386/i386.c:13117 config/pdp11/pdp11.c:1730 +#: final.c:3673 config/i386/i386.c:13146 config/pdp11/pdp11.c:1730 #, c-format msgid "invalid expression as operand" msgstr "" -#: gcc.c:1323 +#: gcc.c:1329 #, c-format msgid "Using built-in specs.\n" msgstr "" -#: gcc.c:1520 +#: gcc.c:1526 #, c-format msgid "" "Setting spec %s to '%s'\n" "\n" msgstr "" -#: gcc.c:1630 +#: gcc.c:1636 #, c-format msgid "Reading specs from %s\n" msgstr "" -#: gcc.c:1755 +#: gcc.c:1761 #, c-format msgid "could not find specs file %s\n" msgstr "" -#: gcc.c:1824 +#: gcc.c:1830 #, c-format msgid "rename spec %s to %s\n" msgstr "" -#: gcc.c:1826 +#: gcc.c:1832 #, c-format msgid "" "spec is '%s'\n" "\n" msgstr "" -#: gcc.c:2243 +#: gcc.c:2249 #, c-format msgid "%s\n" msgstr "" -#: gcc.c:2607 +#: gcc.c:2613 #, c-format msgid "" "\n" "Go ahead? (y or n) " msgstr "" -#: gcc.c:2747 +#: gcc.c:2753 #, c-format msgid "# %s %.2f %.2f\n" msgstr "" -#: gcc.c:2949 +#: gcc.c:2955 #, c-format msgid "Usage: %s [options] file...\n" msgstr "" -#: gcc.c:2950 +#: gcc.c:2956 msgid "Options:\n" msgstr "" -#: gcc.c:2952 +#: gcc.c:2958 msgid " -pass-exit-codes Exit with highest error code from a phase\n" msgstr "" -#: gcc.c:2953 +#: gcc.c:2959 msgid " --help Display this information\n" msgstr "" -#: gcc.c:2954 +#: gcc.c:2960 msgid "" " --target-help Display target specific command line options\n" msgstr "" -#: gcc.c:2955 +#: gcc.c:2961 msgid "" -" --help={target|optimizers|warnings|params|[^]{joined|separate|" +" --help={common|optimizers|params|target|warnings|[^]{joined|separate|" "undocumented}}[,...]\n" msgstr "" -#: gcc.c:2956 +#: gcc.c:2962 msgid "" " Display specific types of command line options\n" msgstr "" -#: gcc.c:2958 +#: gcc.c:2964 msgid " (Use '-v --help' to display command line options of sub-processes)\n" msgstr "" -#: gcc.c:2959 +#: gcc.c:2965 msgid " --version Display compiler version information\n" msgstr "" -#: gcc.c:2960 +#: gcc.c:2966 msgid " -dumpspecs Display all of the built in spec strings\n" msgstr "" -#: gcc.c:2961 +#: gcc.c:2967 msgid " -dumpversion Display the version of the compiler\n" msgstr "" -#: gcc.c:2962 +#: gcc.c:2968 msgid " -dumpmachine Display the compiler's target processor\n" msgstr "" -#: gcc.c:2963 +#: gcc.c:2969 msgid "" " -print-search-dirs Display the directories in the compiler's search " "path\n" msgstr "" -#: gcc.c:2964 +#: gcc.c:2970 msgid "" " -print-libgcc-file-name Display the name of the compiler's companion " "library\n" msgstr "" -#: gcc.c:2965 +#: gcc.c:2971 msgid " -print-file-name=<lib> Display the full path to library <lib>\n" msgstr "" -#: gcc.c:2966 +#: gcc.c:2972 msgid "" " -print-prog-name=<prog> Display the full path to compiler component " "<prog>\n" msgstr "" -#: gcc.c:2967 +#: gcc.c:2973 msgid "" " -print-multi-directory Display the root directory for versions of " "libgcc\n" msgstr "" -#: gcc.c:2968 +#: gcc.c:2974 msgid "" " -print-multi-lib Display the mapping between command line options " "and\n" " multiple library search directories\n" msgstr "" -#: gcc.c:2971 +#: gcc.c:2977 msgid " -print-multi-os-directory Display the relative path to OS libraries\n" msgstr "" -#: gcc.c:2972 +#: gcc.c:2978 msgid " -print-sysroot Display the target libraries directory\n" msgstr "" -#: gcc.c:2973 +#: gcc.c:2979 msgid "" " -print-sysroot-headers-suffix Display the sysroot suffix used to find " "headers\n" msgstr "" -#: gcc.c:2974 +#: gcc.c:2980 msgid "" " -Wa,<options> Pass comma-separated <options> on to the " "assembler\n" msgstr "" -#: gcc.c:2975 +#: gcc.c:2981 msgid "" " -Wp,<options> Pass comma-separated <options> on to the " "preprocessor\n" msgstr "" -#: gcc.c:2976 +#: gcc.c:2982 msgid "" " -Wl,<options> Pass comma-separated <options> on to the linker\n" msgstr "" -#: gcc.c:2977 +#: gcc.c:2983 msgid " -Xassembler <arg> Pass <arg> on to the assembler\n" msgstr "" -#: gcc.c:2978 +#: gcc.c:2984 msgid " -Xpreprocessor <arg> Pass <arg> on to the preprocessor\n" msgstr "" -#: gcc.c:2979 +#: gcc.c:2985 msgid " -Xlinker <arg> Pass <arg> on to the linker\n" msgstr "" -#: gcc.c:2980 +#: gcc.c:2986 msgid " -save-temps Do not delete intermediate files\n" msgstr "" -#: gcc.c:2981 +#: gcc.c:2987 msgid " -save-temps=<arg> Do not delete intermediate files\n" msgstr "" -#: gcc.c:2982 +#: gcc.c:2988 msgid "" " -no-canonical-prefixes Do not canonicalize paths when building relative\n" " prefixes to other gcc components\n" msgstr "" -#: gcc.c:2985 +#: gcc.c:2991 msgid " -pipe Use pipes rather than intermediate files\n" msgstr "" -#: gcc.c:2986 +#: gcc.c:2992 msgid " -time Time the execution of each subprocess\n" msgstr "" -#: gcc.c:2987 +#: gcc.c:2993 msgid "" " -specs=<file> Override built-in specs with the contents of " "<file>\n" msgstr "" -#: gcc.c:2988 +#: gcc.c:2994 msgid "" " -std=<standard> Assume that the input sources are for <standard>\n" msgstr "" -#: gcc.c:2989 +#: gcc.c:2995 msgid "" " --sysroot=<directory> Use <directory> as the root directory for " "headers\n" " and libraries\n" msgstr "" -#: gcc.c:2992 +#: gcc.c:2998 msgid "" " -B <directory> Add <directory> to the compiler's search paths\n" msgstr "" -#: gcc.c:2993 +#: gcc.c:2999 msgid "" " -v Display the programs invoked by the compiler\n" msgstr "" -#: gcc.c:2994 +#: gcc.c:3000 msgid "" " -### Like -v but options quoted and commands not " "executed\n" msgstr "" -#: gcc.c:2995 +#: gcc.c:3001 msgid "" " -E Preprocess only; do not compile, assemble or " "link\n" msgstr "" -#: gcc.c:2996 +#: gcc.c:3002 msgid " -S Compile only; do not assemble or link\n" msgstr "" -#: gcc.c:2997 +#: gcc.c:3003 msgid " -c Compile and assemble, but do not link\n" msgstr "" -#: gcc.c:2998 +#: gcc.c:3004 msgid " -o <file> Place the output into <file>\n" msgstr "" -#: gcc.c:2999 +#: gcc.c:3005 msgid " -pie Create a position independent executable\n" msgstr "" -#: gcc.c:3000 +#: gcc.c:3006 msgid " -shared Create a shared library\n" msgstr "" -#: gcc.c:3001 +#: gcc.c:3007 msgid "" " -x <language> Specify the language of the following input " "files\n" @@ -597,7 +597,7 @@ msgid "" "extension\n" msgstr "" -#: gcc.c:3008 +#: gcc.c:3014 #, c-format msgid "" "\n" @@ -606,43 +606,43 @@ msgid "" " other options on to these processes the -W<letter> options must be used.\n" msgstr "" -#: gcc.c:5233 +#: gcc.c:5239 #, c-format msgid "Processing spec (%s), which is '%s'\n" msgstr "" -#: gcc.c:6472 +#: gcc.c:6497 #, c-format msgid "install: %s%s\n" msgstr "" -#: gcc.c:6475 +#: gcc.c:6500 #, c-format msgid "programs: %s\n" msgstr "" -#: gcc.c:6477 +#: gcc.c:6502 #, c-format msgid "libraries: %s\n" msgstr "" -#: gcc.c:6552 +#: gcc.c:6577 #, c-format msgid "" "\n" "For bug reporting instructions, please see:\n" msgstr "" -#: gcc.c:6568 +#: gcc.c:6593 #, c-format msgid "%s %s%s\n" msgstr "" -#: gcc.c:6571 gcov.c:488 fortran/gfortranspec.c:305 java/jcf-dump.c:1165 +#: gcc.c:6596 gcov.c:488 fortran/gfortranspec.c:305 java/jcf-dump.c:1165 msgid "(C)" msgstr "" -#: gcc.c:6572 java/jcf-dump.c:1166 +#: gcc.c:6597 java/jcf-dump.c:1166 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" @@ -650,32 +650,32 @@ msgid "" "\n" msgstr "" -#: gcc.c:6589 +#: gcc.c:6614 #, c-format msgid "Target: %s\n" msgstr "" -#: gcc.c:6590 +#: gcc.c:6615 #, c-format msgid "Configured with: %s\n" msgstr "" -#: gcc.c:6604 +#: gcc.c:6629 #, c-format msgid "Thread model: %s\n" msgstr "" -#: gcc.c:6615 +#: gcc.c:6640 #, c-format msgid "gcc version %s %s\n" msgstr "" -#: gcc.c:6618 +#: gcc.c:6643 #, c-format msgid "gcc driver version %s %sexecuting gcc version %s\n" msgstr "" -#: gcc.c:6865 +#: gcc.c:6897 #, c-format msgid "" "\n" @@ -684,14 +684,14 @@ msgid "" "\n" msgstr "" -#: gcc.c:6866 +#: gcc.c:6898 #, c-format msgid "" "Use \"-Wl,OPTION\" to pass \"OPTION\" to the linker.\n" "\n" msgstr "" -#: gcc.c:8058 +#: gcc.c:8090 #, c-format msgid "" "Assembler options\n" @@ -699,7 +699,7 @@ msgid "" "\n" msgstr "" -#: gcc.c:8059 +#: gcc.c:8091 #, c-format msgid "" "Use \"-Wa,OPTION\" to pass \"OPTION\" to the assembler.\n" @@ -1165,27 +1165,27 @@ msgstr "" msgid "At top level:" msgstr "" -#: langhooks.c:394 cp/error.c:2985 +#: langhooks.c:394 cp/error.c:2987 #, c-format msgid "In member function %qs" msgstr "" -#: langhooks.c:398 cp/error.c:2988 +#: langhooks.c:398 cp/error.c:2990 #, c-format msgid "In function %qs" msgstr "" -#: langhooks.c:449 cp/error.c:2938 +#: langhooks.c:449 cp/error.c:2940 #, c-format msgid " inlined from %qs at %s:%d:%d" msgstr "" -#: langhooks.c:454 cp/error.c:2943 +#: langhooks.c:454 cp/error.c:2945 #, c-format msgid " inlined from %qs at %s:%d" msgstr "" -#: langhooks.c:460 cp/error.c:2949 +#: langhooks.c:460 cp/error.c:2951 #, c-format msgid " inlined from %qs" msgstr "" @@ -1382,7 +1382,7 @@ msgstr "" msgid "VOIDmode on an output" msgstr "" -#: reload1.c:8653 +#: reload1.c:8658 msgid "failure trying to reload:" msgstr "" @@ -1394,39 +1394,39 @@ msgstr "" msgid "insn does not satisfy its constraints:" msgstr "" -#: targhooks.c:1403 +#: targhooks.c:1404 #, c-format msgid "created and used with differing settings of '%s'" msgstr "" -#: targhooks.c:1405 +#: targhooks.c:1406 msgid "out of memory" msgstr "" -#: targhooks.c:1420 +#: targhooks.c:1421 msgid "created and used with different settings of -fpic" msgstr "" -#: targhooks.c:1422 +#: targhooks.c:1423 msgid "created and used with different settings of -fpie" msgstr "" -#: tlink.c:387 +#: tlink.c:392 #, c-format msgid "collect: reading %s\n" msgstr "" -#: tlink.c:537 +#: tlink.c:548 #, c-format msgid "collect: recompiling %s\n" msgstr "" -#: tlink.c:744 +#: tlink.c:632 #, c-format msgid "collect: tweaking %s in %s\n" msgstr "" -#: tlink.c:794 +#: tlink.c:848 #, c-format msgid "collect: relinking\n" msgstr "" @@ -2635,121 +2635,121 @@ msgstr "" msgid "<return-value>" msgstr "" -#: c-family/c-pretty-print.c:2138 cp/error.c:1802 cp/error.c:2711 +#: c-family/c-pretty-print.c:2138 cp/error.c:1802 cp/error.c:2713 msgid "<unknown>" msgstr "" -#: config/alpha/alpha.c:5017 +#: config/alpha/alpha.c:5022 #, c-format msgid "invalid %%H value" msgstr "" -#: config/alpha/alpha.c:5038 config/bfin/bfin.c:1423 +#: config/alpha/alpha.c:5043 config/bfin/bfin.c:1423 #, c-format msgid "invalid %%J value" msgstr "" -#: config/alpha/alpha.c:5068 config/ia64/ia64.c:5291 +#: config/alpha/alpha.c:5073 config/ia64/ia64.c:5291 #, c-format msgid "invalid %%r value" msgstr "" -#: config/alpha/alpha.c:5078 config/ia64/ia64.c:5245 -#: config/rs6000/rs6000.c:15003 config/xtensa/xtensa.c:2350 +#: config/alpha/alpha.c:5083 config/ia64/ia64.c:5245 +#: config/rs6000/rs6000.c:15008 config/xtensa/xtensa.c:2350 #, c-format msgid "invalid %%R value" msgstr "" -#: config/alpha/alpha.c:5084 config/rs6000/rs6000.c:14922 +#: config/alpha/alpha.c:5089 config/rs6000/rs6000.c:14927 #: config/xtensa/xtensa.c:2317 #, c-format msgid "invalid %%N value" msgstr "" -#: config/alpha/alpha.c:5092 config/rs6000/rs6000.c:14950 +#: config/alpha/alpha.c:5097 config/rs6000/rs6000.c:14955 #, c-format msgid "invalid %%P value" msgstr "" -#: config/alpha/alpha.c:5100 +#: config/alpha/alpha.c:5105 #, c-format msgid "invalid %%h value" msgstr "" -#: config/alpha/alpha.c:5108 config/xtensa/xtensa.c:2343 +#: config/alpha/alpha.c:5113 config/xtensa/xtensa.c:2343 #, c-format msgid "invalid %%L value" msgstr "" -#: config/alpha/alpha.c:5147 config/rs6000/rs6000.c:14904 +#: config/alpha/alpha.c:5152 config/rs6000/rs6000.c:14909 #, c-format msgid "invalid %%m value" msgstr "" -#: config/alpha/alpha.c:5155 config/rs6000/rs6000.c:14912 +#: config/alpha/alpha.c:5160 config/rs6000/rs6000.c:14917 #, c-format msgid "invalid %%M value" msgstr "" -#: config/alpha/alpha.c:5199 +#: config/alpha/alpha.c:5204 #, c-format msgid "invalid %%U value" msgstr "" -#: config/alpha/alpha.c:5207 config/alpha/alpha.c:5218 -#: config/rs6000/rs6000.c:15011 +#: config/alpha/alpha.c:5212 config/alpha/alpha.c:5223 +#: config/rs6000/rs6000.c:15016 #, c-format msgid "invalid %%s value" msgstr "" -#: config/alpha/alpha.c:5229 +#: config/alpha/alpha.c:5234 #, c-format msgid "invalid %%C value" msgstr "" -#: config/alpha/alpha.c:5266 config/rs6000/rs6000.c:14769 +#: config/alpha/alpha.c:5271 config/rs6000/rs6000.c:14774 #, c-format msgid "invalid %%E value" msgstr "" -#: config/alpha/alpha.c:5291 config/alpha/alpha.c:5339 +#: config/alpha/alpha.c:5296 config/alpha/alpha.c:5344 #, c-format msgid "unknown relocation unspec" msgstr "" -#: config/alpha/alpha.c:5300 config/rs6000/rs6000.c:15377 -#: config/spu/spu.c:1744 +#: config/alpha/alpha.c:5305 config/cr16/cr16.c:1537 +#: config/rs6000/rs6000.c:15382 config/spu/spu.c:1744 #, c-format msgid "invalid %%xn code" msgstr "" -#: config/arm/arm.c:17110 config/arm/arm.c:17128 +#: config/arm/arm.c:17149 config/arm/arm.c:17167 #, c-format msgid "predicated Thumb instruction" msgstr "" -#: config/arm/arm.c:17116 +#: config/arm/arm.c:17155 #, c-format msgid "predicated instruction in conditional sequence" msgstr "" -#: config/arm/arm.c:17247 +#: config/arm/arm.c:17286 #, c-format msgid "Unsupported operand for code '%c'" msgstr "" -#: config/arm/arm.c:17295 +#: config/arm/arm.c:17334 #, c-format msgid "invalid shift operand" msgstr "" -#: config/arm/arm.c:17352 config/arm/arm.c:17374 config/arm/arm.c:17384 -#: config/arm/arm.c:17394 config/arm/arm.c:17404 config/arm/arm.c:17443 -#: config/arm/arm.c:17461 config/arm/arm.c:17496 config/arm/arm.c:17515 -#: config/arm/arm.c:17530 config/arm/arm.c:17557 config/arm/arm.c:17564 -#: config/arm/arm.c:17582 config/arm/arm.c:17589 config/arm/arm.c:17597 -#: config/arm/arm.c:17618 config/arm/arm.c:17625 config/arm/arm.c:17750 -#: config/arm/arm.c:17757 config/arm/arm.c:17780 config/arm/arm.c:17787 +#: config/arm/arm.c:17391 config/arm/arm.c:17413 config/arm/arm.c:17423 +#: config/arm/arm.c:17433 config/arm/arm.c:17443 config/arm/arm.c:17482 +#: config/arm/arm.c:17500 config/arm/arm.c:17535 config/arm/arm.c:17554 +#: config/arm/arm.c:17569 config/arm/arm.c:17596 config/arm/arm.c:17603 +#: config/arm/arm.c:17621 config/arm/arm.c:17628 config/arm/arm.c:17636 +#: config/arm/arm.c:17657 config/arm/arm.c:17664 config/arm/arm.c:17789 +#: config/arm/arm.c:17796 config/arm/arm.c:17819 config/arm/arm.c:17826 #: config/bfin/bfin.c:1436 config/bfin/bfin.c:1443 config/bfin/bfin.c:1450 #: config/bfin/bfin.c:1457 config/bfin/bfin.c:1466 config/bfin/bfin.c:1473 #: config/bfin/bfin.c:1480 config/bfin/bfin.c:1487 @@ -2757,78 +2757,79 @@ msgstr "" msgid "invalid operand for code '%c'" msgstr "" -#: config/arm/arm.c:17456 +#: config/arm/arm.c:17495 #, c-format msgid "instruction never executed" msgstr "" -#: config/arm/arm.c:17799 +#: config/arm/arm.c:17838 #, c-format msgid "missing operand" msgstr "" -#: config/arm/arm.c:20399 +#: config/arm/arm.c:20440 msgid "function parameters cannot have __fp16 type" msgstr "" -#: config/arm/arm.c:20409 +#: config/arm/arm.c:20450 msgid "functions cannot return __fp16 type" msgstr "" -#: config/avr/avr.c:1698 +#: config/avr/avr.c:1695 #, c-format msgid "address operand requires constraint for X, Y, or Z register" msgstr "" -#: config/avr/avr.c:1851 +#: config/avr/avr.c:1848 msgid "operands to %T/%t must be reg + const_int:" msgstr "" -#: config/avr/avr.c:1883 config/avr/avr.c:1938 +#: config/avr/avr.c:1886 config/avr/avr.c:1941 msgid "bad address, not an I/O address:" msgstr "" -#: config/avr/avr.c:1892 +#: config/avr/avr.c:1895 msgid "bad address, not a constant:" msgstr "" -#: config/avr/avr.c:1910 +#: config/avr/avr.c:1913 msgid "bad address, not (reg+disp):" msgstr "" -#: config/avr/avr.c:1917 +#: config/avr/avr.c:1920 msgid "bad address, not post_inc or pre_dec:" msgstr "" -#: config/avr/avr.c:1928 +#: config/avr/avr.c:1931 msgid "internal compiler error. Bad address:" msgstr "" -#: config/avr/avr.c:1958 +#: config/avr/avr.c:1961 msgid "internal compiler error. Unknown mode:" msgstr "" -#: config/avr/avr.c:2918 config/avr/avr.c:3491 config/avr/avr.c:3776 +#: config/avr/avr.c:2922 config/avr/avr.c:3495 config/avr/avr.c:3780 msgid "invalid insn:" msgstr "" -#: config/avr/avr.c:2947 config/avr/avr.c:3022 config/avr/avr.c:3065 -#: config/avr/avr.c:3084 config/avr/avr.c:3175 config/avr/avr.c:3344 -#: config/avr/avr.c:3554 config/avr/avr.c:3669 config/avr/avr.c:3805 -#: config/avr/avr.c:3898 +#: config/avr/avr.c:2951 config/avr/avr.c:3026 config/avr/avr.c:3069 +#: config/avr/avr.c:3088 config/avr/avr.c:3179 config/avr/avr.c:3348 +#: config/avr/avr.c:3558 config/avr/avr.c:3673 config/avr/avr.c:3809 +#: config/avr/avr.c:3900 config/avr/avr.c:4022 msgid "incorrect insn:" msgstr "" -#: config/avr/avr.c:3099 config/avr/avr.c:3260 config/avr/avr.c:3415 -#: config/avr/avr.c:3622 config/avr/avr.c:3715 config/avr/avr.c:3953 +#: config/avr/avr.c:3103 config/avr/avr.c:3264 config/avr/avr.c:3419 +#: config/avr/avr.c:3626 config/avr/avr.c:3719 config/avr/avr.c:3956 +#: config/avr/avr.c:4077 msgid "unknown move insn:" msgstr "" -#: config/avr/avr.c:4367 +#: config/avr/avr.c:4491 msgid "bad shift insn:" msgstr "" -#: config/avr/avr.c:4475 config/avr/avr.c:4958 config/avr/avr.c:5375 +#: config/avr/avr.c:4599 config/avr/avr.c:5080 config/avr/avr.c:5495 msgid "internal compiler error. Incorrect shift:" msgstr "" @@ -2843,7 +2844,7 @@ msgid "invalid const_double operand" msgstr "" #: config/cris/cris.c:579 config/moxie/moxie.c:111 final.c:3129 final.c:3131 -#: fold-const.c:287 gcc.c:4603 gcc.c:4617 loop-iv.c:2968 loop-iv.c:2977 +#: fold-const.c:287 gcc.c:4609 gcc.c:4623 loop-iv.c:2968 loop-iv.c:2977 #: rtl-error.c:103 toplev.c:346 tree-ssa-loop-niter.c:1916 tree-vrp.c:6041 #: cp/typeck.c:5334 java/expr.c:390 lto/lto-object.c:184 lto/lto-object.c:282 #: lto/lto-object.c:339 lto/lto-object.c:363 @@ -2944,7 +2945,7 @@ msgstr "" #. Unknown flag. #. Undocumented flag. -#: config/epiphany/epiphany.c:1193 config/m32r/m32r.c:2217 +#: config/epiphany/epiphany.c:1196 config/m32r/m32r.c:2217 #: config/sparc/sparc.c:8293 #, c-format msgid "invalid operand output code" @@ -3074,71 +3075,77 @@ msgstr "" msgid "bad output_condmove_single operand" msgstr "" -#: config/i386/i386.c:13111 +#: config/i386/i386.c:13140 #, c-format msgid "invalid UNSPEC as operand" msgstr "" -#: config/i386/i386.c:13721 +#: config/i386/i386.c:13763 #, c-format msgid "'%%&' used without any local dynamic TLS references" msgstr "" -#: config/i386/i386.c:13812 config/i386/i386.c:13887 +#: config/i386/i386.c:13854 config/i386/i386.c:13929 #, c-format msgid "invalid operand size for operand code '%c'" msgstr "" -#: config/i386/i386.c:13882 +#: config/i386/i386.c:13924 #, c-format msgid "invalid operand type used with operand code '%c'" msgstr "" -#: config/i386/i386.c:13963 config/i386/i386.c:14003 +#: config/i386/i386.c:14005 config/i386/i386.c:14045 #, c-format msgid "operand is not a condition code, invalid operand code 'D'" msgstr "" -#: config/i386/i386.c:14029 +#: config/i386/i386.c:14071 #, c-format msgid "" "operand is neither a constant nor a condition code, invalid operand code 'C'" msgstr "" -#: config/i386/i386.c:14039 +#: config/i386/i386.c:14081 #, c-format msgid "" "operand is neither a constant nor a condition code, invalid operand code 'F'" msgstr "" -#: config/i386/i386.c:14057 +#: config/i386/i386.c:14099 #, c-format msgid "" "operand is neither a constant nor a condition code, invalid operand code 'c'" msgstr "" -#: config/i386/i386.c:14067 +#: config/i386/i386.c:14109 #, c-format msgid "" "operand is neither a constant nor a condition code, invalid operand code 'f'" msgstr "" -#: config/i386/i386.c:14170 +#: config/i386/i386.c:14124 +#, c-format +msgid "" +"operand is not an offsettable memory reference, invalid operand code 'H'" +msgstr "" + +#: config/i386/i386.c:14219 #, c-format msgid "operand is not a condition code, invalid operand code 'Y'" msgstr "" -#: config/i386/i386.c:14200 +#: config/i386/i386.c:14249 #, c-format msgid "invalid operand code '%c'" msgstr "" -#: config/i386/i386.c:14255 +#: config/i386/i386.c:14304 #, c-format msgid "invalid constraints for operand" msgstr "" -#: config/i386/i386.c:23269 +#: config/i386/i386.c:23323 msgid "unknown insn mode" msgstr "" @@ -3189,12 +3196,13 @@ msgstr "" msgid "invalid operation on %<__fpreg%>" msgstr "" -#: config/iq2000/iq2000.c:3130 +#: config/iq2000/iq2000.c:3130 config/tilegx/tilegx.c:5131 +#: config/tilepro/tilepro.c:4702 #, c-format msgid "invalid %%P operand" msgstr "" -#: config/iq2000/iq2000.c:3138 config/rs6000/rs6000.c:14940 +#: config/iq2000/iq2000.c:3138 config/rs6000/rs6000.c:14945 #, c-format msgid "invalid %%p value" msgstr "" @@ -3273,7 +3281,7 @@ msgid "post-increment address is not a register" msgstr "" #: config/m32r/m32r.c:2321 config/m32r/m32r.c:2335 -#: config/rs6000/rs6000.c:24531 +#: config/rs6000/rs6000.c:24537 msgid "bad address" msgstr "" @@ -3320,19 +3328,19 @@ msgstr "" msgid "letter %c was found & insn was not CONST_INT" msgstr "" -#: config/mips/mips.c:7547 config/mips/mips.c:7568 config/mips/mips.c:7688 +#: config/mips/mips.c:7703 config/mips/mips.c:7724 config/mips/mips.c:7844 #, c-format msgid "'%%%c' is not a valid operand prefix" msgstr "" -#: config/mips/mips.c:7625 config/mips/mips.c:7632 config/mips/mips.c:7639 -#: config/mips/mips.c:7646 config/mips/mips.c:7706 config/mips/mips.c:7720 -#: config/mips/mips.c:7733 config/mips/mips.c:7742 +#: config/mips/mips.c:7781 config/mips/mips.c:7788 config/mips/mips.c:7795 +#: config/mips/mips.c:7802 config/mips/mips.c:7862 config/mips/mips.c:7876 +#: config/mips/mips.c:7889 config/mips/mips.c:7898 #, c-format msgid "invalid use of '%%%c'" msgstr "" -#: config/mips/mips.c:7964 +#: config/mips/mips.c:8120 msgid "mips_debugger_offset called with non stack/frame/arg pointer" msgstr "" @@ -3432,170 +3440,170 @@ msgstr "" msgid "-mno-altivec disables vsx" msgstr "" -#: config/rs6000/rs6000.c:7311 +#: config/rs6000/rs6000.c:7316 msgid "bad move" msgstr "" -#: config/rs6000/rs6000.c:14750 +#: config/rs6000/rs6000.c:14755 #, c-format msgid "invalid %%c value" msgstr "" -#: config/rs6000/rs6000.c:14778 +#: config/rs6000/rs6000.c:14783 #, c-format msgid "invalid %%f value" msgstr "" -#: config/rs6000/rs6000.c:14787 +#: config/rs6000/rs6000.c:14792 #, c-format msgid "invalid %%F value" msgstr "" -#: config/rs6000/rs6000.c:14796 +#: config/rs6000/rs6000.c:14801 #, c-format msgid "invalid %%G value" msgstr "" -#: config/rs6000/rs6000.c:14831 +#: config/rs6000/rs6000.c:14836 #, c-format msgid "invalid %%j code" msgstr "" -#: config/rs6000/rs6000.c:14841 +#: config/rs6000/rs6000.c:14846 #, c-format msgid "invalid %%J code" msgstr "" -#: config/rs6000/rs6000.c:14851 +#: config/rs6000/rs6000.c:14856 #, c-format msgid "invalid %%k value" msgstr "" -#: config/rs6000/rs6000.c:14866 config/xtensa/xtensa.c:2336 +#: config/rs6000/rs6000.c:14871 config/xtensa/xtensa.c:2336 #, c-format msgid "invalid %%K value" msgstr "" -#: config/rs6000/rs6000.c:14930 +#: config/rs6000/rs6000.c:14935 #, c-format msgid "invalid %%O value" msgstr "" -#: config/rs6000/rs6000.c:14977 +#: config/rs6000/rs6000.c:14982 #, c-format msgid "invalid %%q value" msgstr "" -#: config/rs6000/rs6000.c:15021 +#: config/rs6000/rs6000.c:15026 #, c-format msgid "invalid %%S value" msgstr "" -#: config/rs6000/rs6000.c:15061 +#: config/rs6000/rs6000.c:15066 #, c-format msgid "invalid %%T value" msgstr "" -#: config/rs6000/rs6000.c:15071 +#: config/rs6000/rs6000.c:15076 #, c-format msgid "invalid %%u value" msgstr "" -#: config/rs6000/rs6000.c:15080 config/xtensa/xtensa.c:2306 +#: config/rs6000/rs6000.c:15085 config/xtensa/xtensa.c:2306 #, c-format msgid "invalid %%v value" msgstr "" -#: config/rs6000/rs6000.c:15179 config/xtensa/xtensa.c:2357 +#: config/rs6000/rs6000.c:15184 config/xtensa/xtensa.c:2357 #, c-format msgid "invalid %%x value" msgstr "" -#: config/rs6000/rs6000.c:15325 +#: config/rs6000/rs6000.c:15330 #, c-format msgid "invalid %%y value, try using the 'Z' constraint" msgstr "" -#: config/rs6000/rs6000.c:26941 +#: config/rs6000/rs6000.c:26947 msgid "AltiVec argument passed to unprototyped function" msgstr "" -#: config/s390/s390.c:5135 +#: config/s390/s390.c:5140 #, c-format msgid "symbolic memory references are only supported on z10 or later" msgstr "" -#: config/s390/s390.c:5146 +#: config/s390/s390.c:5151 #, c-format msgid "cannot decompose address" msgstr "" -#: config/s390/s390.c:5205 +#: config/s390/s390.c:5210 #, c-format msgid "invalid comparison operator for 'E' output modifier" msgstr "" -#: config/s390/s390.c:5226 +#: config/s390/s390.c:5231 #, c-format msgid "invalid reference for 'J' output modifier" msgstr "" -#: config/s390/s390.c:5240 +#: config/s390/s390.c:5245 #, c-format msgid "memory reference expected for 'O' output modifier" msgstr "" -#: config/s390/s390.c:5251 +#: config/s390/s390.c:5256 #, c-format msgid "invalid address for 'O' output modifier" msgstr "" -#: config/s390/s390.c:5269 +#: config/s390/s390.c:5274 #, c-format msgid "memory reference expected for 'R' output modifier" msgstr "" -#: config/s390/s390.c:5280 +#: config/s390/s390.c:5285 #, c-format msgid "invalid address for 'R' output modifier" msgstr "" -#: config/s390/s390.c:5298 +#: config/s390/s390.c:5303 #, c-format msgid "memory reference expected for 'S' output modifier" msgstr "" -#: config/s390/s390.c:5308 +#: config/s390/s390.c:5313 #, c-format msgid "invalid address for 'S' output modifier" msgstr "" -#: config/s390/s390.c:5328 +#: config/s390/s390.c:5333 #, c-format msgid "register or memory expression expected for 'N' output modifier" msgstr "" -#: config/s390/s390.c:5338 +#: config/s390/s390.c:5343 #, c-format msgid "register or memory expression expected for 'M' output modifier" msgstr "" -#: config/s390/s390.c:5403 +#: config/s390/s390.c:5408 #, c-format msgid "invalid constant - try using an output modifier" msgstr "" -#: config/s390/s390.c:5406 +#: config/s390/s390.c:5411 #, c-format msgid "invalid constant for output modifier '%c'" msgstr "" -#: config/s390/s390.c:5413 +#: config/s390/s390.c:5418 #, c-format msgid "invalid expression - try using an output modifier" msgstr "" -#: config/s390/s390.c:5416 +#: config/s390/s390.c:5421 #, c-format msgid "invalid expression for output modifier '%c'" msgstr "" @@ -3605,25 +3613,25 @@ msgstr "" msgid "invalid operand for code: '%c'" msgstr "" -#: config/sh/sh.c:1026 +#: config/sh/sh.c:1048 #, c-format msgid "invalid operand to %%R" msgstr "" -#: config/sh/sh.c:1053 +#: config/sh/sh.c:1075 #, c-format msgid "invalid operand to %%S" msgstr "" -#: config/sh/sh.c:9137 +#: config/sh/sh.c:9162 msgid "created and used with different architectures / ABIs" msgstr "" -#: config/sh/sh.c:9139 +#: config/sh/sh.c:9164 msgid "created and used with different ABIs" msgstr "" -#: config/sh/sh.c:9141 +#: config/sh/sh.c:9166 msgid "created and used with different endianness" msgstr "" @@ -3642,12 +3650,13 @@ msgstr "" msgid "invalid %%B operand" msgstr "" -#: config/sparc/sparc.c:8232 +#: config/sparc/sparc.c:8232 config/tilegx/tilegx.c:4934 +#: config/tilepro/tilepro.c:4505 #, c-format msgid "invalid %%C operand" msgstr "" -#: config/sparc/sparc.c:8249 +#: config/sparc/sparc.c:8249 config/tilegx/tilegx.c:4967 #, c-format msgid "invalid %%D operand" msgstr "" @@ -3692,6 +3701,91 @@ msgstr "" msgid "xstormy16_print_operand: unknown code" msgstr "" +#: config/tilegx/tilegx.c:4919 config/tilepro/tilepro.c:4490 +#, c-format +msgid "invalid %%c operand" +msgstr "" + +#: config/tilegx/tilegx.c:4950 +#, c-format +msgid "invalid %%d operand" +msgstr "" + +#: config/tilegx/tilegx.c:5033 +#, c-format +msgid "invalid %%H specifier" +msgstr "" + +#: config/tilegx/tilegx.c:5069 config/tilepro/tilepro.c:4519 +#, c-format +msgid "invalid %%h operand" +msgstr "" + +#: config/tilegx/tilegx.c:5081 config/tilepro/tilepro.c:4583 +#, c-format +msgid "invalid %%I operand" +msgstr "" + +#: config/tilegx/tilegx.c:5095 config/tilepro/tilepro.c:4597 +#, c-format +msgid "invalid %%i operand" +msgstr "" + +#: config/tilegx/tilegx.c:5118 config/tilepro/tilepro.c:4620 +#, c-format +msgid "invalid %%j operand" +msgstr "" + +#: config/tilegx/tilegx.c:5149 +#, c-format +msgid "invalid %%%c operand" +msgstr "" + +#: config/tilegx/tilegx.c:5164 config/tilepro/tilepro.c:4734 +#, c-format +msgid "invalid %%N operand" +msgstr "" + +#: config/tilegx/tilegx.c:5208 +#, c-format +msgid "invalid operand for 'r' specifier" +msgstr "" + +#: config/tilegx/tilegx.c:5233 config/tilepro/tilepro.c:4816 +#, c-format +msgid "unable to print out operand yet; code == %d (%c)" +msgstr "" + +#: config/tilepro/tilepro.c:4555 +#, c-format +msgid "invalid %%H operand" +msgstr "" + +#: config/tilepro/tilepro.c:4659 +#, c-format +msgid "invalid %%L operand" +msgstr "" + +#: config/tilepro/tilepro.c:4719 +#, c-format +msgid "invalid %%M operand" +msgstr "" + +#: config/tilepro/tilepro.c:4762 +#, c-format +msgid "invalid %%t operand" +msgstr "" + +#: config/tilepro/tilepro.c:4769 +#, c-format +msgid "invalid %%t operand '" +msgstr "" + +#: config/tilepro/tilepro.c:4790 +#, c-format +msgid "invalid %%r operand" +msgstr "" + #: config/v850/v850.c:260 msgid "const_double_split got a bad insn:" msgstr "" @@ -3840,7 +3934,7 @@ msgstr "" msgid "<declaration error>" msgstr "" -#: cp/error.c:1432 cp/error.c:2802 +#: cp/error.c:1432 cp/error.c:2804 msgid "with" msgstr "" @@ -3858,111 +3952,111 @@ msgstr "" msgid "<throw-expression>" msgstr "" -#: cp/error.c:2334 +#: cp/error.c:2336 msgid "<unparsed>" msgstr "" -#: cp/error.c:2484 +#: cp/error.c:2486 msgid "<expression error>" msgstr "" -#: cp/error.c:2498 +#: cp/error.c:2500 msgid "<unknown operator>" msgstr "" -#: cp/error.c:2754 +#: cp/error.c:2756 msgid "{unknown}" msgstr "" -#: cp/error.c:2869 +#: cp/error.c:2871 msgid "At global scope:" msgstr "" -#: cp/error.c:2975 +#: cp/error.c:2977 #, c-format msgid "In static member function %qs" msgstr "" -#: cp/error.c:2977 +#: cp/error.c:2979 #, c-format msgid "In copy constructor %qs" msgstr "" -#: cp/error.c:2979 +#: cp/error.c:2981 #, c-format msgid "In constructor %qs" msgstr "" -#: cp/error.c:2981 +#: cp/error.c:2983 #, c-format msgid "In destructor %qs" msgstr "" -#: cp/error.c:2983 +#: cp/error.c:2985 msgid "In lambda function" msgstr "" -#: cp/error.c:3003 +#: cp/error.c:3005 #, c-format msgid "%s: In substitution of %qS:\n" msgstr "" -#: cp/error.c:3004 +#: cp/error.c:3006 msgid "%s: In instantiation of %q#D:\n" msgstr "" -#: cp/error.c:3027 +#: cp/error.c:3029 #, c-format msgid "%s:%d:%d: " msgstr "" -#: cp/error.c:3030 +#: cp/error.c:3032 #, c-format msgid "%s:%d: " msgstr "" -#: cp/error.c:3038 +#: cp/error.c:3040 #, c-format msgid "recursively required by substitution of %qS\n" msgstr "" -#: cp/error.c:3039 +#: cp/error.c:3041 #, c-format msgid "required by substitution of %qS\n" msgstr "" -#: cp/error.c:3044 +#: cp/error.c:3046 msgid "recursively required from %q#D\n" msgstr "" -#: cp/error.c:3045 +#: cp/error.c:3047 msgid "required from %q#D\n" msgstr "" -#: cp/error.c:3052 +#: cp/error.c:3054 msgid "recursively required from here" msgstr "" -#: cp/error.c:3053 +#: cp/error.c:3055 msgid "required from here" msgstr "" -#: cp/error.c:3095 +#: cp/error.c:3097 #, c-format msgid "%s:%d:%d: [ skipping %d instantiation contexts ]\n" msgstr "" -#: cp/error.c:3099 +#: cp/error.c:3101 #, c-format msgid "%s:%d: [ skipping %d instantiation contexts ]\n" msgstr "" -#: cp/error.c:3161 +#: cp/error.c:3163 #, c-format msgid "%s:%d:%d: in constexpr expansion of %qs" msgstr "" -#: cp/error.c:3165 +#: cp/error.c:3167 #, c-format msgid "%s:%d: in constexpr expansion of %qs" msgstr "" @@ -3971,7 +4065,7 @@ msgstr "" msgid "candidates are:" msgstr "" -#: cp/pt.c:17792 cp/call.c:3289 +#: cp/pt.c:17805 cp/call.c:3289 #, gcc-internal-format msgid "candidate is:" msgid_plural "candidates are:" @@ -4123,22 +4217,22 @@ msgstr "" msgid "Fatal Error:" msgstr "" -#: fortran/expr.c:620 +#: fortran/expr.c:621 #, c-format msgid "Constant expression required at %C" msgstr "" -#: fortran/expr.c:623 +#: fortran/expr.c:624 #, c-format msgid "Integer expression required at %C" msgstr "" -#: fortran/expr.c:628 +#: fortran/expr.c:629 #, c-format msgid "Integer value too large in expression at %C" msgstr "" -#: fortran/expr.c:3166 +#: fortran/expr.c:3167 msgid "array assignment" msgstr "" @@ -4157,7 +4251,7 @@ msgstr "" msgid "Driving:" msgstr "" -#: fortran/interface.c:2477 fortran/intrinsic.c:3641 +#: fortran/interface.c:2504 fortran/intrinsic.c:3641 msgid "actual argument to INTENT = OUT/INOUT" msgstr "" @@ -4223,13 +4317,13 @@ msgstr "" msgid "%s tag" msgstr "" -#: fortran/io.c:2872 +#: fortran/io.c:2868 msgid "internal unit in WRITE" msgstr "" #. For INQUIRE, all tags except FILE, ID and UNIT are variable definition #. contexts. Thus, use an extended RESOLVE_TAG macro for that. -#: fortran/io.c:4066 +#: fortran/io.c:4062 #, c-format msgid "%s tag with INQUIRE" msgstr "" @@ -4239,75 +4333,75 @@ msgstr "" msgid "Syntax error in expression at %C" msgstr "" -#: fortran/module.c:1054 +#: fortran/module.c:1061 msgid "Unexpected EOF" msgstr "" -#: fortran/module.c:1139 +#: fortran/module.c:1146 msgid "Integer overflow" msgstr "" -#: fortran/module.c:1169 +#: fortran/module.c:1176 msgid "Name too long" msgstr "" -#: fortran/module.c:1271 fortran/module.c:1374 +#: fortran/module.c:1278 fortran/module.c:1381 msgid "Bad name" msgstr "" -#: fortran/module.c:1398 +#: fortran/module.c:1405 msgid "Expected name" msgstr "" -#: fortran/module.c:1401 +#: fortran/module.c:1408 msgid "Expected left parenthesis" msgstr "" -#: fortran/module.c:1404 +#: fortran/module.c:1411 msgid "Expected right parenthesis" msgstr "" -#: fortran/module.c:1407 +#: fortran/module.c:1414 msgid "Expected integer" msgstr "" -#: fortran/module.c:1410 fortran/module.c:2312 +#: fortran/module.c:1417 fortran/module.c:2333 msgid "Expected string" msgstr "" -#: fortran/module.c:1435 +#: fortran/module.c:1442 msgid "find_enum(): Enum not found" msgstr "" -#: fortran/module.c:2065 +#: fortran/module.c:2085 msgid "Expected attribute bit name" msgstr "" -#: fortran/module.c:2963 +#: fortran/module.c:2984 msgid "Expected integer string" msgstr "" -#: fortran/module.c:2967 +#: fortran/module.c:2988 msgid "Error converting integer" msgstr "" -#: fortran/module.c:2989 +#: fortran/module.c:3010 msgid "Expected real string" msgstr "" -#: fortran/module.c:3211 +#: fortran/module.c:3232 msgid "Expected expression type" msgstr "" -#: fortran/module.c:3265 +#: fortran/module.c:3286 msgid "Bad operator" msgstr "" -#: fortran/module.c:3354 +#: fortran/module.c:3375 msgid "Bad type in constant expression" msgstr "" -#: fortran/module.c:6050 +#: fortran/module.c:6088 msgid "Unexpected end of module" msgstr "" @@ -4335,11 +4429,11 @@ msgstr "" msgid "implied END DO" msgstr "" -#: fortran/parse.c:1475 fortran/resolve.c:9409 +#: fortran/parse.c:1475 fortran/resolve.c:9419 msgid "assignment" msgstr "" -#: fortran/parse.c:1478 fortran/resolve.c:9448 fortran/resolve.c:9451 +#: fortran/parse.c:1478 fortran/resolve.c:9458 fortran/resolve.c:9461 msgid "pointer assignment" msgstr "" @@ -4347,123 +4441,123 @@ msgstr "" msgid "simple IF" msgstr "" -#: fortran/resolve.c:533 +#: fortran/resolve.c:535 msgid "module procedure" msgstr "" -#: fortran/resolve.c:534 +#: fortran/resolve.c:536 msgid "internal function" msgstr "" -#: fortran/resolve.c:1983 +#: fortran/resolve.c:1978 msgid "elemental procedure" msgstr "" -#: fortran/resolve.c:3811 +#: fortran/resolve.c:3803 #, c-format msgid "Invalid context for NULL() pointer at %%L" msgstr "" -#: fortran/resolve.c:3827 +#: fortran/resolve.c:3819 #, c-format msgid "Operand of unary numeric operator '%s' at %%L is %s" msgstr "" -#: fortran/resolve.c:3843 +#: fortran/resolve.c:3835 #, c-format msgid "Operands of binary numeric operator '%s' at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:3858 +#: fortran/resolve.c:3850 #, c-format msgid "Operands of string concatenation operator at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:3877 +#: fortran/resolve.c:3869 #, c-format msgid "Operands of logical operator '%s' at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:3891 +#: fortran/resolve.c:3883 #, c-format msgid "Operand of .not. operator at %%L is %s" msgstr "" -#: fortran/resolve.c:3905 +#: fortran/resolve.c:3897 msgid "COMPLEX quantities cannot be compared at %L" msgstr "" -#: fortran/resolve.c:3934 +#: fortran/resolve.c:3926 #, c-format msgid "Logicals at %%L must be compared with %s instead of %s" msgstr "" -#: fortran/resolve.c:3940 +#: fortran/resolve.c:3932 #, c-format msgid "Operands of comparison operator '%s' at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:3948 +#: fortran/resolve.c:3940 #, c-format msgid "Unknown operator '%s' at %%L" msgstr "" -#: fortran/resolve.c:3950 +#: fortran/resolve.c:3942 #, c-format msgid "Operand of user operator '%s' at %%L is %s" msgstr "" -#: fortran/resolve.c:3954 +#: fortran/resolve.c:3946 #, c-format msgid "Operands of user operator '%s' at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:4042 +#: fortran/resolve.c:4034 #, c-format msgid "Inconsistent ranks for operator at %%L and %%L" msgstr "" -#: fortran/resolve.c:6415 +#: fortran/resolve.c:6425 msgid "Loop variable" msgstr "" -#: fortran/resolve.c:6419 +#: fortran/resolve.c:6429 msgid "iterator variable" msgstr "" -#: fortran/resolve.c:6424 +#: fortran/resolve.c:6434 msgid "Start expression in DO loop" msgstr "" -#: fortran/resolve.c:6428 +#: fortran/resolve.c:6438 msgid "End expression in DO loop" msgstr "" -#: fortran/resolve.c:6432 +#: fortran/resolve.c:6442 msgid "Step expression in DO loop" msgstr "" -#: fortran/resolve.c:6688 fortran/resolve.c:6691 +#: fortran/resolve.c:6698 fortran/resolve.c:6701 msgid "DEALLOCATE object" msgstr "" -#: fortran/resolve.c:7033 fortran/resolve.c:7035 +#: fortran/resolve.c:7043 fortran/resolve.c:7045 msgid "ALLOCATE object" msgstr "" -#: fortran/resolve.c:7215 fortran/resolve.c:8448 +#: fortran/resolve.c:7225 fortran/resolve.c:8458 msgid "STAT variable" msgstr "" -#: fortran/resolve.c:7258 fortran/resolve.c:8460 +#: fortran/resolve.c:7268 fortran/resolve.c:8470 msgid "ERRMSG variable" msgstr "" -#: fortran/resolve.c:8326 +#: fortran/resolve.c:8336 msgid "item in READ" msgstr "" -#: fortran/resolve.c:8472 +#: fortran/resolve.c:8482 msgid "ACQUIRED_LOCK variable" msgstr "" @@ -4476,21 +4570,21 @@ msgstr "" msgid "Integer overflow when calculating the amount of memory to allocate" msgstr "" -#: fortran/trans-decl.c:4776 +#: fortran/trans-decl.c:4791 #, c-format msgid "" "Actual string length does not match the declared one for dummy argument " "'%s' (%ld/%ld)" msgstr "" -#: fortran/trans-decl.c:4784 +#: fortran/trans-decl.c:4799 #, c-format msgid "" "Actual string length is shorter than the declared one for dummy argument " "'%s' (%ld/%ld)" msgstr "" -#: fortran/trans-expr.c:5960 +#: fortran/trans-expr.c:5965 #, c-format msgid "Target of rank remapping is too small (%ld < %ld)" msgstr "" @@ -4521,16 +4615,16 @@ msgstr "" msgid "Assigned label is not a target label" msgstr "" -#: fortran/trans-stmt.c:771 +#: fortran/trans-stmt.c:793 #, c-format msgid "Invalid image number %d in SYNC IMAGES" msgstr "" -#: fortran/trans-stmt.c:1347 fortran/trans-stmt.c:1628 +#: fortran/trans-stmt.c:1369 fortran/trans-stmt.c:1650 msgid "Loop variable has been modified" msgstr "" -#: fortran/trans-stmt.c:1487 +#: fortran/trans-stmt.c:1509 msgid "DO step value is zero" msgstr "" @@ -4725,26 +4819,26 @@ msgstr "" msgid "-fuse-linker-plugin is not supported in this configuration" msgstr "" -#: gcc.c:777 ada/gcc-interface/lang-specs.h:33 java/jvspec.c:80 +#: gcc.c:778 ada/gcc-interface/lang-specs.h:33 java/jvspec.c:80 msgid "-pg and -fomit-frame-pointer are incompatible" msgstr "" -#: gcc.c:939 +#: gcc.c:945 msgid "GNU C no longer supports -traditional without -E" msgstr "" -#: gcc.c:948 +#: gcc.c:954 msgid "-E or -x required when input is from standard input" msgstr "" -#: config/alpha/freebsd.h:34 config/ia64/freebsd.h:26 config/i386/freebsd.h:96 -#: config/i386/freebsd64.h:35 config/arm/freebsd.h:31 -#: config/rs6000/sysv4.h:772 config/sparc/freebsd.h:46 -msgid "consider using '-pg' instead of '-p' with gprof(1)" +#: config/cris/cris.h:192 +msgid "do not specify both -march=... and -mcpu=..." msgstr "" -#: fortran/lang-specs.h:55 fortran/lang-specs.h:69 -msgid "gfortran does not support -E without -cpp" +#: config/alpha/freebsd.h:34 config/sparc/freebsd.h:46 +#: config/ia64/freebsd.h:26 config/arm/freebsd.h:31 config/i386/freebsd.h:96 +#: config/i386/freebsd64.h:35 config/rs6000/sysv4.h:772 +msgid "consider using '-pg' instead of '-p' with gprof(1)" msgstr "" #: config/i386/mingw-w64.h:83 config/i386/mingw32.h:116 @@ -4752,34 +4846,40 @@ msgstr "" msgid "shared and mdll are not compatible" msgstr "" -#: config/vax/netbsd-elf.h:51 -msgid "the -shared option is not currently supported for VAX ELF" +#: config/rx/rx.h:57 +msgid "-mas100-syntax is incompatible with -gdwarf" msgstr "" -#: config/sparc/netbsd-elf.h:109 config/sparc/netbsd-elf.h:118 -#: config/sparc/sol2.h:201 config/sparc/sol2.h:207 config/sparc/linux64.h:158 -#: config/sparc/linux64.h:165 -msgid "may not use both -m32 and -m64" +#: config/rx/rx.h:58 +msgid "rx200 cpu does not have FPU hardware" msgstr "" -#: config/vax/vax.h:50 config/vax/vax.h:51 -msgid "profiling not supported with -mg" +#: config/sparc/linux64.h:158 config/sparc/linux64.h:165 +#: config/sparc/netbsd-elf.h:109 config/sparc/netbsd-elf.h:118 +#: config/sparc/sol2.h:201 config/sparc/sol2.h:207 +msgid "may not use both -m32 and -m64" msgstr "" #: config/s390/tpf.h:116 msgid "static is not supported on TPF-OS" msgstr "" -#: config/mips/mips.h:1169 -msgid "may not use both -EB and -EL" +#: config/pa/pa64-hpux.h:30 config/pa/pa64-hpux.h:33 config/pa/pa64-hpux.h:42 +#: config/pa/pa64-hpux.h:45 config/pa/pa-hpux10.h:89 config/pa/pa-hpux10.h:92 +#: config/pa/pa-hpux10.h:100 config/pa/pa-hpux10.h:103 +#: config/pa/pa-hpux11.h:108 config/pa/pa-hpux11.h:111 +msgid "warning: consider linking with '-static' as system libraries with" msgstr "" -#: config/mips/r3900.h:38 -msgid "-mhard-float not supported" +#: config/pa/pa64-hpux.h:31 config/pa/pa64-hpux.h:34 config/pa/pa64-hpux.h:43 +#: config/pa/pa64-hpux.h:46 config/pa/pa-hpux10.h:90 config/pa/pa-hpux10.h:93 +#: config/pa/pa-hpux10.h:101 config/pa/pa-hpux10.h:104 +#: config/pa/pa-hpux11.h:109 config/pa/pa-hpux11.h:112 +msgid " profiling support are only provided in archive format" msgstr "" -#: config/mips/r3900.h:40 -msgid "-msingle-float and -msoft-float cannot both be specified" +#: config/mips/mips.h:1169 +msgid "may not use both -EB and -EL" msgstr "" #: config/lynx.h:70 @@ -4790,11 +4890,6 @@ msgstr "" msgid "cannot use mshared and static together" msgstr "" -#: objcp/lang-specs.h:58 -msgid "" -"objc++-cpp-output is deprecated; please use objective-c++-cpp-output instead" -msgstr "" - #: ada/gcc-interface/lang-specs.h:34 msgid "-c or -S required for Ada" msgstr "" @@ -4803,24 +4898,25 @@ msgstr "" msgid "-c required for gnat2why" msgstr "" -#: java/lang-specs.h:33 -msgid "-fjni and -femit-class-files are incompatible" +#: config/mips/r3900.h:38 +msgid "-mhard-float not supported" msgstr "" -#: java/lang-specs.h:34 -msgid "-fjni and -femit-class-file are incompatible" +#: config/mips/r3900.h:40 +msgid "-msingle-float and -msoft-float cannot both be specified" msgstr "" -#: java/lang-specs.h:35 java/lang-specs.h:36 -msgid "-femit-class-file should used along with -fsyntax-only" +#: config/sol2-bi.h:108 config/sol2-bi.h:113 +msgid "does not support multilib" msgstr "" -#: config/mcore/mcore.h:54 -msgid "the m210 does not have little endian support" +#: objc/lang-specs.h:31 objc/lang-specs.h:42 +msgid "GNU Objective C no longer supports traditional compilation" msgstr "" -#: config/sol2-bi.h:108 config/sol2-bi.h:113 -msgid "does not support multilib" +#: objc/lang-specs.h:56 +msgid "" +"objc-cpp-output is deprecated; please use objective-c-cpp-output instead" msgstr "" #: config/arm/arm.h:157 @@ -4835,79 +4931,77 @@ msgstr "" msgid "no processor type specified for linking" msgstr "" -#: config/sh/sh.h:430 config/sh/sh.h:433 -msgid "SH2a does not support little-endian" -msgstr "" - -#: config/pa/pa-hpux10.h:89 config/pa/pa-hpux10.h:92 config/pa/pa-hpux10.h:100 -#: config/pa/pa-hpux10.h:103 config/pa/pa-hpux11.h:108 -#: config/pa/pa-hpux11.h:111 config/pa/pa64-hpux.h:30 config/pa/pa64-hpux.h:33 -#: config/pa/pa64-hpux.h:42 config/pa/pa64-hpux.h:45 -msgid "warning: consider linking with '-static' as system libraries with" +#: fortran/lang-specs.h:55 fortran/lang-specs.h:69 +msgid "gfortran does not support -E without -cpp" msgstr "" -#: config/pa/pa-hpux10.h:90 config/pa/pa-hpux10.h:93 config/pa/pa-hpux10.h:101 -#: config/pa/pa-hpux10.h:104 config/pa/pa-hpux11.h:109 -#: config/pa/pa-hpux11.h:112 config/pa/pa64-hpux.h:31 config/pa/pa64-hpux.h:34 -#: config/pa/pa64-hpux.h:43 config/pa/pa64-hpux.h:46 -msgid " profiling support are only provided in archive format" +#: config/mcore/mcore.h:54 +msgid "the m210 does not have little endian support" msgstr "" #: config/vxworks.h:71 msgid "-Xbind-now and -Xbind-lazy are incompatible" msgstr "" -#: config/darwin.h:242 +#: config/darwin.h:244 msgid "-current_version only allowed with -dynamiclib" msgstr "" -#: config/darwin.h:244 +#: config/darwin.h:246 msgid "-install_name only allowed with -dynamiclib" msgstr "" -#: config/darwin.h:249 +#: config/darwin.h:251 msgid "-bundle not allowed with -dynamiclib" msgstr "" -#: config/darwin.h:250 +#: config/darwin.h:252 msgid "-bundle_loader not allowed with -dynamiclib" msgstr "" -#: config/darwin.h:251 +#: config/darwin.h:253 msgid "-client_name not allowed with -dynamiclib" msgstr "" -#: config/darwin.h:256 +#: config/darwin.h:258 msgid "-force_flat_namespace not allowed with -dynamiclib" msgstr "" -#: config/darwin.h:258 +#: config/darwin.h:260 msgid "-keep_private_externs not allowed with -dynamiclib" msgstr "" -#: config/darwin.h:259 +#: config/darwin.h:261 msgid "-private_bundle not allowed with -dynamiclib" msgstr "" -#: config/cris/cris.h:192 -msgid "do not specify both -march=... and -mcpu=..." +#: objcp/lang-specs.h:58 +msgid "" +"objc++-cpp-output is deprecated; please use objective-c++-cpp-output instead" msgstr "" -#: objc/lang-specs.h:31 objc/lang-specs.h:42 -msgid "GNU Objective C no longer supports traditional compilation" +#: config/vax/netbsd-elf.h:51 +msgid "the -shared option is not currently supported for VAX ELF" msgstr "" -#: objc/lang-specs.h:56 -msgid "" -"objc-cpp-output is deprecated; please use objective-c-cpp-output instead" +#: config/vax/vax.h:50 config/vax/vax.h:51 +msgid "profiling not supported with -mg" msgstr "" -#: config/rx/rx.h:57 -msgid "-mas100-syntax is incompatible with -gdwarf" +#: java/lang-specs.h:33 +msgid "-fjni and -femit-class-files are incompatible" msgstr "" -#: config/rx/rx.h:58 -msgid "rx200 cpu does not have FPU hardware" +#: java/lang-specs.h:34 +msgid "-fjni and -femit-class-file are incompatible" +msgstr "" + +#: java/lang-specs.h:35 java/lang-specs.h:36 +msgid "-femit-class-file should used along with -fsyntax-only" +msgstr "" + +#: config/sh/sh.h:430 config/sh/sh.h:433 +msgid "SH2a does not support little-endian" msgstr "" #: config/rs6000/darwin.h:96 @@ -5224,7 +5318,7 @@ msgid "Allow dollar signs in entity names" msgstr "" #: fortran/lang.opt:371 common.opt:659 common.opt:826 common.opt:830 -#: common.opt:834 common.opt:838 common.opt:1323 +#: common.opt:834 common.opt:838 common.opt:1202 common.opt:1320 msgid "Does nothing. Preserved for backward compatibility." msgstr "" @@ -5358,7 +5452,7 @@ msgid "Enable range checking during compilation" msgstr "" #: fortran/lang.opt:503 -msgid "Interpret any REAl(4) as a REAL(8)" +msgid "Interpret any REAL(4) as a REAL(8)" msgstr "" #: fortran/lang.opt:507 @@ -5366,7 +5460,7 @@ msgid "Interpret any REAL(4) as a REAL(10)" msgstr "" #: fortran/lang.opt:511 -msgid "Interpret any REAL(4) as a REAl(16)" +msgid "Interpret any REAL(4) as a REAL(16)" msgstr "" #: fortran/lang.opt:515 @@ -5378,7 +5472,7 @@ msgid "Interpret any REAL(8) as a REAL(10)" msgstr "" #: fortran/lang.opt:523 -msgid "Interpret any REAL(8) as a REAl(16)" +msgid "Interpret any REAL(8) as a REAL(16)" msgstr "" #: fortran/lang.opt:527 @@ -8927,6 +9021,58 @@ msgstr "" msgid "Set register to hold -1." msgstr "" +#: config/cr16/cr16.opt:23 +msgid "-msim Use simulator runtime" +msgstr "" + +#: config/cr16/cr16.opt:27 +msgid "Generate SBIT, CBIT instructions" +msgstr "" + +#: config/cr16/cr16.opt:31 +msgid "Support multiply accumulate instructions" +msgstr "" + +#: config/cr16/cr16.opt:38 +msgid "Treat data references as near, far or medium. medium is default" +msgstr "" + +#: config/cr16/cr16.opt:42 +msgid "Generate code for CR16C architecture" +msgstr "" + +#: config/cr16/cr16.opt:46 +msgid "Generate code for CR16C+ architecture (Default)" +msgstr "" + +#: config/cr16/cr16.opt:50 +msgid "Treat integers as 32-bit." +msgstr "" + +#: config/tilegx/tilegx.opt:24 config/tilepro/tilepro.opt:29 +msgid "-mcpu=CPU\tUse features of and schedule code for given CPU" +msgstr "" + +#: config/tilegx/tilegx.opt:28 +msgid "Known TILE-Gx CPUs (for use with the -mcpu= option):" +msgstr "" + +#: config/tilegx/tilegx.opt:35 +msgid "Compile with 32 bit longs and pointers." +msgstr "" + +#: config/tilegx/tilegx.opt:39 +msgid "Compile with 64 bit longs and pointers." +msgstr "" + +#: config/tilepro/tilepro.opt:24 +msgid "Compile with 32 bit longs and pointers, which is the only supported" +msgstr "" + +#: config/tilepro/tilepro.opt:33 +msgid "Known TILEPro CPUs (for use with the -mcpu= option):" +msgstr "" + #: config/picochip/picochip.opt:23 msgid "" "Specify which type of AE to target. This option sets the mul-type and byte-" @@ -8967,7 +9113,7 @@ msgstr "" #: config/darwin.opt:53 c-family/c.opt:71 c-family/c.opt:74 c-family/c.opt:77 #: c-family/c.opt:80 c-family/c.opt:179 c-family/c.opt:182 c-family/c.opt:220 #: c-family/c.opt:224 c-family/c.opt:236 c-family/c.opt:1125 -#: c-family/c.opt:1133 common.opt:301 common.opt:304 common.opt:2281 +#: c-family/c.opt:1133 common.opt:301 common.opt:304 common.opt:2278 #, c-format msgid "missing filename after %qs" msgstr "" @@ -9875,7 +10021,7 @@ msgid "Warn about unsuffixed float constants" msgstr "" #: c-family/c.opt:666 -msgid "Warn about" +msgid "Warn when typedefs locally defined in a function are not used" msgstr "" #: c-family/c.opt:670 @@ -9986,9 +10132,9 @@ msgid "" msgstr "" #: c-family/c.opt:768 c-family/c.opt:955 common.opt:937 common.opt:1115 -#: common.opt:1393 common.opt:1647 common.opt:1683 common.opt:1768 -#: common.opt:1772 common.opt:1848 common.opt:1926 common.opt:1942 -#: common.opt:2026 +#: common.opt:1390 common.opt:1644 common.opt:1680 common.opt:1765 +#: common.opt:1769 common.opt:1845 common.opt:1923 common.opt:1939 +#: common.opt:2023 msgid "Does nothing. Preserved for backward compatibility." msgstr "" @@ -11067,10 +11213,6 @@ msgstr "" msgid "Enable support for GNU transactional memory" msgstr "" -#: common.opt:1202 -msgid "Enable Loop Flattening transformation" -msgstr "" - #: common.opt:1206 msgid "Force bitfield accesses to match their type width" msgstr "" @@ -11107,951 +11249,954 @@ msgstr "" msgid "Perform indirect inlining" msgstr "" -#: common.opt:1255 -msgid "Pay attention to the \"inline\" keyword" +#: common.opt:1252 +msgid "" +"Enable inlining of function declared \"inline\", disabling disables all " +"inlining" msgstr "" -#: common.opt:1259 +#: common.opt:1256 msgid "" -"Integrate simple functions into their callers when code size is known to not " -"growth" +"Integrate functions into their callers when code size is known not to grow" msgstr "" -#: common.opt:1263 -msgid "Integrate simple functions into their callers" +#: common.opt:1260 +msgid "" +"Integrate functions not declared \"inline\" into their callers when " +"profitable" msgstr "" -#: common.opt:1267 -msgid "Integrate functions called once into their callers" +#: common.opt:1264 +msgid "Integrate functions only required by their single caller" msgstr "" -#: common.opt:1274 +#: common.opt:1271 msgid "" "-finline-limit=<number>\tLimit the size of inlined functions to <number>" msgstr "" -#: common.opt:1278 +#: common.opt:1275 msgid "" "Inline __atomic operations when a lock free instruction sequence is " "available." msgstr "" -#: common.opt:1282 +#: common.opt:1279 msgid "Instrument function entry and exit with profiling calls" msgstr "" -#: common.opt:1286 +#: common.opt:1283 msgid "" "-finstrument-functions-exclude-function-list=name,... Do not instrument " "listed functions" msgstr "" -#: common.opt:1290 +#: common.opt:1287 msgid "" "-finstrument-functions-exclude-file-list=filename,... Do not instrument " "functions listed in files" msgstr "" -#: common.opt:1294 +#: common.opt:1291 msgid "Perform Interprocedural constant propagation" msgstr "" -#: common.opt:1298 +#: common.opt:1295 msgid "Perform cloning to make Interprocedural constant propagation stronger" msgstr "" -#: common.opt:1302 +#: common.opt:1299 msgid "Perform interprocedural profile propagation" msgstr "" -#: common.opt:1306 +#: common.opt:1303 msgid "Perform interprocedural points-to analysis" msgstr "" -#: common.opt:1310 +#: common.opt:1307 msgid "Discover pure and const functions" msgstr "" -#: common.opt:1314 +#: common.opt:1311 msgid "Discover readonly and non addressable static variables" msgstr "" -#: common.opt:1318 +#: common.opt:1315 msgid "Perform matrix layout flattening and transposing based" msgstr "" -#: common.opt:1327 +#: common.opt:1324 msgid "-fira-algorithm=[CB|priority] Set the used IRA algorithm" msgstr "" -#: common.opt:1330 +#: common.opt:1327 #, c-format msgid "unknown IRA algorithm %qs" msgstr "" -#: common.opt:1340 +#: common.opt:1337 msgid "-fira-region=[one|all|mixed] Set regions for IRA" msgstr "" -#: common.opt:1343 +#: common.opt:1340 #, c-format msgid "unknown IRA region %qs" msgstr "" -#: common.opt:1356 +#: common.opt:1353 msgid "Use IRA based register pressure calculation" msgstr "" -#: common.opt:1361 +#: common.opt:1358 msgid "Share slots for saving different hard registers." msgstr "" -#: common.opt:1365 +#: common.opt:1362 msgid "Share stack slots for spilled pseudo-registers." msgstr "" -#: common.opt:1369 +#: common.opt:1366 msgid "-fira-verbose=<number>\tControl IRA's level of diagnostic messages." msgstr "" -#: common.opt:1373 +#: common.opt:1370 msgid "Optimize induction variables on trees" msgstr "" -#: common.opt:1377 +#: common.opt:1374 msgid "Use jump tables for sufficiently large switch statements" msgstr "" -#: common.opt:1381 +#: common.opt:1378 msgid "Generate code for functions even if they are fully inlined" msgstr "" -#: common.opt:1385 +#: common.opt:1382 msgid "Emit static const variables even if they are not used" msgstr "" -#: common.opt:1389 +#: common.opt:1386 msgid "Give external symbols a leading underscore" msgstr "" -#: common.opt:1397 +#: common.opt:1394 msgid "Enable link-time optimization." msgstr "" -#: common.opt:1401 +#: common.opt:1398 msgid "Link-time optimization with number of parallel jobs or jobserver." msgstr "" -#: common.opt:1405 +#: common.opt:1402 msgid "" "Partition functions and vars at linktime based on object files they " "originate from" msgstr "" -#: common.opt:1409 +#: common.opt:1406 msgid "" "Partition functions and vars at linktime into approximately same sized " "buckets" msgstr "" -#: common.opt:1413 +#: common.opt:1410 msgid "Disable partioning and streaming" msgstr "" -#: common.opt:1418 +#: common.opt:1415 msgid "" "-flto-compression-level=<number>\tUse zlib compression level <number> for IL" msgstr "" -#: common.opt:1422 +#: common.opt:1419 msgid "Report various link-time optimization statistics" msgstr "" -#: common.opt:1426 +#: common.opt:1423 msgid "Set errno after built-in math functions" msgstr "" -#: common.opt:1430 +#: common.opt:1427 msgid "-fmax-errors=<number>\tMaximum number of errors to report" msgstr "" -#: common.opt:1434 +#: common.opt:1431 msgid "Report on permanent memory allocation" msgstr "" -#: common.opt:1441 +#: common.opt:1438 msgid "Attempt to merge identical constants and constant variables" msgstr "" -#: common.opt:1445 +#: common.opt:1442 msgid "Attempt to merge identical constants across compilation units" msgstr "" -#: common.opt:1449 +#: common.opt:1446 msgid "Attempt to merge identical debug strings across compilation units" msgstr "" -#: common.opt:1453 +#: common.opt:1450 msgid "" "-fmessage-length=<number>\tLimit diagnostics to <number> characters per " "line. 0 suppresses line-wrapping" msgstr "" -#: common.opt:1457 +#: common.opt:1454 msgid "Perform SMS based modulo scheduling before the first scheduling pass" msgstr "" -#: common.opt:1461 +#: common.opt:1458 msgid "Perform SMS based modulo scheduling with register moves allowed" msgstr "" -#: common.opt:1465 +#: common.opt:1462 msgid "Move loop invariant computations out of loops" msgstr "" -#: common.opt:1469 +#: common.opt:1466 msgid "Use the RTL dead code elimination pass" msgstr "" -#: common.opt:1473 +#: common.opt:1470 msgid "Use the RTL dead store elimination pass" msgstr "" -#: common.opt:1477 +#: common.opt:1474 msgid "" "Enable/Disable the traditional scheduling in loops that already passed " "modulo scheduling" msgstr "" -#: common.opt:1481 +#: common.opt:1478 msgid "Support synchronous non-call exceptions" msgstr "" -#: common.opt:1485 +#: common.opt:1482 msgid "When possible do not generate stack frames" msgstr "" -#: common.opt:1489 +#: common.opt:1486 msgid "Do the full register move optimization pass" msgstr "" -#: common.opt:1493 +#: common.opt:1490 msgid "Optimize sibling and tail recursive calls" msgstr "" -#: common.opt:1497 +#: common.opt:1494 msgid "Perform partial inlining" msgstr "" -#: common.opt:1501 common.opt:1505 +#: common.opt:1498 common.opt:1502 msgid "Report on memory allocation before interprocedural optimization" msgstr "" -#: common.opt:1509 +#: common.opt:1506 msgid "Pack structure members together without holes" msgstr "" -#: common.opt:1513 +#: common.opt:1510 msgid "-fpack-struct=<number>\tSet initial maximum structure member alignment" msgstr "" -#: common.opt:1517 +#: common.opt:1514 msgid "Return small aggregates in memory, not registers" msgstr "" -#: common.opt:1521 +#: common.opt:1518 msgid "Perform loop peeling" msgstr "" -#: common.opt:1525 +#: common.opt:1522 msgid "Enable machine specific peephole optimizations" msgstr "" -#: common.opt:1529 +#: common.opt:1526 msgid "Enable an RTL peephole pass before sched2" msgstr "" -#: common.opt:1533 +#: common.opt:1530 msgid "Generate position-independent code if possible (large mode)" msgstr "" -#: common.opt:1537 +#: common.opt:1534 msgid "" "Generate position-independent code for executables if possible (large mode)" msgstr "" -#: common.opt:1541 +#: common.opt:1538 msgid "Generate position-independent code if possible (small mode)" msgstr "" -#: common.opt:1545 +#: common.opt:1542 msgid "" "Generate position-independent code for executables if possible (small mode)" msgstr "" -#: common.opt:1549 +#: common.opt:1546 msgid "Specify a plugin to load" msgstr "" -#: common.opt:1553 +#: common.opt:1550 msgid "" "-fplugin-arg-<name>-<key>[=<value>]\tSpecify argument <key>=<value> for " "plugin <name>" msgstr "" -#: common.opt:1557 +#: common.opt:1554 msgid "Run predictive commoning optimization." msgstr "" -#: common.opt:1561 +#: common.opt:1558 msgid "Generate prefetch instructions, if available, for arrays in loops" msgstr "" -#: common.opt:1565 +#: common.opt:1562 msgid "Enable basic program profiling code" msgstr "" -#: common.opt:1569 +#: common.opt:1566 msgid "Insert arc-based program profiling code" msgstr "" -#: common.opt:1573 +#: common.opt:1570 msgid "Set the top-level directory for storing the profile data." msgstr "" -#: common.opt:1578 +#: common.opt:1575 msgid "Enable correction of flow inconsistent profile data input" msgstr "" -#: common.opt:1582 +#: common.opt:1579 msgid "" "Enable common options for generating profile info for profile feedback " "directed optimizations" msgstr "" -#: common.opt:1586 +#: common.opt:1583 msgid "" "Enable common options for generating profile info for profile feedback " "directed optimizations, and set -fprofile-dir=" msgstr "" -#: common.opt:1590 +#: common.opt:1587 msgid "" "Enable common options for performing profile feedback directed optimizations" msgstr "" -#: common.opt:1594 +#: common.opt:1591 msgid "" "Enable common options for performing profile feedback directed " "optimizations, and set -fprofile-dir=" msgstr "" -#: common.opt:1598 +#: common.opt:1595 msgid "Insert code to profile values of expressions" msgstr "" -#: common.opt:1605 +#: common.opt:1602 msgid "-frandom-seed=<string>\tMake compile reproducible using <string>" msgstr "" -#: common.opt:1615 +#: common.opt:1612 msgid "Record gcc command line switches in the object file." msgstr "" -#: common.opt:1619 +#: common.opt:1616 msgid "Return small aggregates in registers" msgstr "" -#: common.opt:1623 +#: common.opt:1620 msgid "Enables a register move optimization" msgstr "" -#: common.opt:1627 +#: common.opt:1624 msgid "Perform a register renaming optimization pass" msgstr "" -#: common.opt:1631 +#: common.opt:1628 msgid "Reorder basic blocks to improve code placement" msgstr "" -#: common.opt:1635 +#: common.opt:1632 msgid "Reorder basic blocks and partition into hot and cold sections" msgstr "" -#: common.opt:1639 +#: common.opt:1636 msgid "Reorder functions to improve code placement" msgstr "" -#: common.opt:1643 +#: common.opt:1640 msgid "Add a common subexpression elimination pass after loop optimizations" msgstr "" -#: common.opt:1651 +#: common.opt:1648 msgid "Disable optimizations that assume default FP rounding behavior" msgstr "" -#: common.opt:1655 +#: common.opt:1652 msgid "Enable scheduling across basic blocks" msgstr "" -#: common.opt:1659 +#: common.opt:1656 msgid "Enable register pressure sensitive insn scheduling" msgstr "" -#: common.opt:1663 +#: common.opt:1660 msgid "Allow speculative motion of non-loads" msgstr "" -#: common.opt:1667 +#: common.opt:1664 msgid "Allow speculative motion of some loads" msgstr "" -#: common.opt:1671 +#: common.opt:1668 msgid "Allow speculative motion of more loads" msgstr "" -#: common.opt:1675 +#: common.opt:1672 msgid "-fsched-verbose=<number>\tSet the verbosity level of the scheduler" msgstr "" -#: common.opt:1679 +#: common.opt:1676 msgid "If scheduling post reload, do superblock scheduling" msgstr "" -#: common.opt:1687 +#: common.opt:1684 msgid "Reschedule instructions before register allocation" msgstr "" -#: common.opt:1691 +#: common.opt:1688 msgid "Reschedule instructions after register allocation" msgstr "" -#: common.opt:1698 +#: common.opt:1695 msgid "Schedule instructions using selective scheduling algorithm" msgstr "" -#: common.opt:1702 +#: common.opt:1699 msgid "Run selective scheduling after reload" msgstr "" -#: common.opt:1706 +#: common.opt:1703 msgid "Perform software pipelining of inner loops during selective scheduling" msgstr "" -#: common.opt:1710 +#: common.opt:1707 msgid "Perform software pipelining of outer loops during selective scheduling" msgstr "" -#: common.opt:1714 +#: common.opt:1711 msgid "Reschedule pipelined regions without pipelining" msgstr "" -#: common.opt:1720 +#: common.opt:1717 msgid "Allow premature scheduling of queued insns" msgstr "" -#: common.opt:1724 +#: common.opt:1721 msgid "" "-fsched-stalled-insns=<number>\tSet number of queued insns that can be " "prematurely scheduled" msgstr "" -#: common.opt:1732 +#: common.opt:1729 msgid "" "Set dependence distance checking in premature scheduling of queued insns" msgstr "" -#: common.opt:1736 +#: common.opt:1733 msgid "" "-fsched-stalled-insns-dep=<number>\tSet dependence distance checking in " "premature scheduling of queued insns" msgstr "" -#: common.opt:1740 +#: common.opt:1737 msgid "Enable the group heuristic in the scheduler" msgstr "" -#: common.opt:1744 +#: common.opt:1741 msgid "Enable the critical path heuristic in the scheduler" msgstr "" -#: common.opt:1748 +#: common.opt:1745 msgid "Enable the speculative instruction heuristic in the scheduler" msgstr "" -#: common.opt:1752 +#: common.opt:1749 msgid "Enable the rank heuristic in the scheduler" msgstr "" -#: common.opt:1756 +#: common.opt:1753 msgid "Enable the last instruction heuristic in the scheduler" msgstr "" -#: common.opt:1760 +#: common.opt:1757 msgid "Enable the dependent count heuristic in the scheduler" msgstr "" -#: common.opt:1764 +#: common.opt:1761 msgid "Access data in the same section from shared anchor points" msgstr "" -#: common.opt:1776 +#: common.opt:1773 msgid "Turn on Redundant Extensions Elimination pass." msgstr "" -#: common.opt:1780 +#: common.opt:1777 msgid "Show column numbers in diagnostics, when available. Default on" msgstr "" -#: common.opt:1784 +#: common.opt:1781 msgid "Emit function prologues only before parts of the function that need it," msgstr "" -#: common.opt:1789 +#: common.opt:1786 msgid "Disable optimizations observable by IEEE signaling NaNs" msgstr "" -#: common.opt:1793 +#: common.opt:1790 msgid "" "Disable floating point optimizations that ignore the IEEE signedness of zero" msgstr "" -#: common.opt:1797 +#: common.opt:1794 msgid "Convert floating point constants to single precision constants" msgstr "" -#: common.opt:1801 +#: common.opt:1798 msgid "Split lifetimes of induction variables when loops are unrolled" msgstr "" -#: common.opt:1805 +#: common.opt:1802 msgid "Generate discontiguous stack frames" msgstr "" -#: common.opt:1809 +#: common.opt:1806 msgid "Split wide types into independent registers" msgstr "" -#: common.opt:1813 +#: common.opt:1810 msgid "Apply variable expansion when loops are unrolled" msgstr "" -#: common.opt:1817 +#: common.opt:1814 msgid "" "-fstack-check=[no|generic|specific]\tInsert stack checking code into the " "program" msgstr "" -#: common.opt:1821 +#: common.opt:1818 msgid "" "Insert stack checking code into the program. Same as -fstack-check=specific" msgstr "" -#: common.opt:1828 +#: common.opt:1825 msgid "" "-fstack-limit-register=<register>\tTrap if the stack goes past <register>" msgstr "" -#: common.opt:1832 +#: common.opt:1829 msgid "-fstack-limit-symbol=<name>\tTrap if the stack goes past symbol <name>" msgstr "" -#: common.opt:1836 +#: common.opt:1833 msgid "Use propolice as a stack protection method" msgstr "" -#: common.opt:1840 +#: common.opt:1837 msgid "Use a stack protection method for every function" msgstr "" -#: common.opt:1844 +#: common.opt:1841 msgid "Output stack usage information on a per-function basis" msgstr "" -#: common.opt:1856 +#: common.opt:1853 msgid "Assume strict aliasing rules apply" msgstr "" -#: common.opt:1860 +#: common.opt:1857 msgid "Treat signed overflow as undefined" msgstr "" -#: common.opt:1864 +#: common.opt:1861 msgid "Check for syntax errors, then stop" msgstr "" -#: common.opt:1868 +#: common.opt:1865 msgid "Create data files needed by \"gcov\"" msgstr "" -#: common.opt:1872 +#: common.opt:1869 msgid "Perform jump threading optimizations" msgstr "" -#: common.opt:1876 +#: common.opt:1873 msgid "Report the time taken by each compiler pass" msgstr "" -#: common.opt:1880 +#: common.opt:1877 msgid "" "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tSet the " "default thread-local storage code generation model" msgstr "" -#: common.opt:1883 +#: common.opt:1880 #, c-format msgid "unknown TLS model %qs" msgstr "" -#: common.opt:1899 +#: common.opt:1896 msgid "Reorder top level functions, variables, and asms" msgstr "" -#: common.opt:1903 +#: common.opt:1900 msgid "Perform superblock formation via tail duplication" msgstr "" -#: common.opt:1910 +#: common.opt:1907 msgid "Assume floating-point operations can trap" msgstr "" -#: common.opt:1914 +#: common.opt:1911 msgid "Trap for signed overflow in addition, subtraction and multiplication" msgstr "" -#: common.opt:1918 +#: common.opt:1915 msgid "Enable SSA-CCP optimization on trees" msgstr "" -#: common.opt:1922 +#: common.opt:1919 msgid "Enable SSA-BIT-CCP optimization on trees" msgstr "" -#: common.opt:1930 +#: common.opt:1927 msgid "Enable loop header copying on trees" msgstr "" -#: common.opt:1934 +#: common.opt:1931 msgid "Replace SSA temporaries with better names in copies" msgstr "" -#: common.opt:1938 +#: common.opt:1935 msgid "Enable copy propagation on trees" msgstr "" -#: common.opt:1946 +#: common.opt:1943 msgid "Transform condition stores into unconditional ones" msgstr "" -#: common.opt:1950 +#: common.opt:1947 msgid "Perform conversions of switch initializations." msgstr "" -#: common.opt:1954 +#: common.opt:1951 msgid "Enable SSA dead code elimination optimization on trees" msgstr "" -#: common.opt:1958 +#: common.opt:1955 msgid "Enable dominator optimizations" msgstr "" -#: common.opt:1962 +#: common.opt:1959 msgid "Enable tail merging on trees" msgstr "" -#: common.opt:1966 +#: common.opt:1963 msgid "Enable dead store elimination" msgstr "" -#: common.opt:1970 +#: common.opt:1967 msgid "Enable forward propagation on trees" msgstr "" -#: common.opt:1974 +#: common.opt:1971 msgid "Enable Full Redundancy Elimination (FRE) on trees" msgstr "" -#: common.opt:1978 +#: common.opt:1975 msgid "Enable string length optimizations on trees" msgstr "" -#: common.opt:1982 +#: common.opt:1979 msgid "Enable loop distribution on trees" msgstr "" -#: common.opt:1986 +#: common.opt:1983 msgid "Enable loop distribution for patterns transformed into a library call" msgstr "" -#: common.opt:1990 +#: common.opt:1987 msgid "Enable loop invariant motion on trees" msgstr "" -#: common.opt:1994 +#: common.opt:1991 msgid "Enable loop interchange transforms. Same as -floop-interchange" msgstr "" -#: common.opt:1998 +#: common.opt:1995 msgid "Create canonical induction variables in loops" msgstr "" -#: common.opt:2002 +#: common.opt:1999 msgid "Enable loop optimizations on tree level" msgstr "" -#: common.opt:2006 +#: common.opt:2003 msgid "Enable automatic parallelization of loops" msgstr "" -#: common.opt:2010 +#: common.opt:2007 msgid "Enable hoisting loads from conditional pointers." msgstr "" -#: common.opt:2014 +#: common.opt:2011 msgid "Enable SSA-PRE optimization on trees" msgstr "" -#: common.opt:2018 +#: common.opt:2015 msgid "Perform function-local points-to analysis on trees." msgstr "" -#: common.opt:2022 +#: common.opt:2019 msgid "Enable reassociation on tree level" msgstr "" -#: common.opt:2030 +#: common.opt:2027 msgid "Enable SSA code sinking on trees" msgstr "" -#: common.opt:2034 +#: common.opt:2031 msgid "Perform scalar replacement of aggregates" msgstr "" -#: common.opt:2038 +#: common.opt:2035 msgid "Replace temporary expressions in the SSA->normal pass" msgstr "" -#: common.opt:2042 +#: common.opt:2039 msgid "Perform live range splitting during the SSA->normal pass" msgstr "" -#: common.opt:2046 +#: common.opt:2043 msgid "Perform Value Range Propagation on trees" msgstr "" -#: common.opt:2050 +#: common.opt:2047 msgid "Compile whole compilation unit at a time" msgstr "" -#: common.opt:2054 +#: common.opt:2051 msgid "Perform loop unrolling when iteration count is known" msgstr "" -#: common.opt:2058 +#: common.opt:2055 msgid "Perform loop unrolling for all loops" msgstr "" -#: common.opt:2065 +#: common.opt:2062 msgid "Allow loop optimizations to assume that the loops behave in normal way" msgstr "" -#: common.opt:2069 +#: common.opt:2066 msgid "Allow optimization for floating-point arithmetic which may change the" msgstr "" -#: common.opt:2074 +#: common.opt:2071 msgid "Same as -fassociative-math for expressions which include division." msgstr "" -#: common.opt:2082 +#: common.opt:2079 msgid "Allow math optimizations that may violate IEEE or ISO standards" msgstr "" -#: common.opt:2086 +#: common.opt:2083 msgid "Perform loop unswitching" msgstr "" -#: common.opt:2090 +#: common.opt:2087 msgid "Just generate unwind tables for exception handling" msgstr "" -#: common.opt:2102 +#: common.opt:2099 msgid "Perform variable tracking" msgstr "" -#: common.opt:2110 +#: common.opt:2107 msgid "Perform variable tracking by annotating assignments" msgstr "" -#: common.opt:2116 +#: common.opt:2113 msgid "Toggle -fvar-tracking-assignments" msgstr "" -#: common.opt:2120 +#: common.opt:2117 msgid "Perform variable tracking and also tag variables that are uninitialized" msgstr "" -#: common.opt:2124 +#: common.opt:2121 msgid "Enable loop vectorization on trees" msgstr "" -#: common.opt:2128 +#: common.opt:2125 msgid "Enable basic block vectorization (SLP) on trees" msgstr "" -#: common.opt:2132 +#: common.opt:2129 msgid "Enable use of cost model in vectorization" msgstr "" -#: common.opt:2136 +#: common.opt:2133 msgid "Enable loop versioning when doing loop vectorization on trees" msgstr "" -#: common.opt:2140 +#: common.opt:2137 msgid "" "-ftree-vectorizer-verbose=<number>\tSet the verbosity level of the vectorizer" msgstr "" -#: common.opt:2144 +#: common.opt:2141 msgid "Enable copy propagation of scalar-evolution information." msgstr "" -#: common.opt:2154 +#: common.opt:2151 msgid "Add extra commentary to assembler output" msgstr "" -#: common.opt:2158 +#: common.opt:2155 msgid "" "-fvisibility=[default|internal|hidden|protected]\tSet the default symbol " "visibility" msgstr "" -#: common.opt:2161 +#: common.opt:2158 #, c-format msgid "unrecognized visibility value %qs" msgstr "" -#: common.opt:2177 +#: common.opt:2174 msgid "Use expression value profiles in optimizations" msgstr "" -#: common.opt:2181 +#: common.opt:2178 msgid "Construct webs and split unrelated uses of single variable" msgstr "" -#: common.opt:2185 +#: common.opt:2182 msgid "Enable conditional dead code elimination for builtin calls" msgstr "" -#: common.opt:2189 +#: common.opt:2186 msgid "Perform whole program optimizations" msgstr "" -#: common.opt:2193 +#: common.opt:2190 msgid "Assume signed arithmetic overflow wraps around" msgstr "" -#: common.opt:2197 +#: common.opt:2194 msgid "Put zero initialized data in the bss section" msgstr "" -#: common.opt:2201 +#: common.opt:2198 msgid "Generate debug information in default format" msgstr "" -#: common.opt:2205 +#: common.opt:2202 msgid "Generate debug information in COFF format" msgstr "" -#: common.opt:2209 +#: common.opt:2206 msgid "Generate debug information in DWARF v2 (or later) format" msgstr "" -#: common.opt:2213 +#: common.opt:2210 msgid "Generate debug information in default extended format" msgstr "" -#: common.opt:2217 +#: common.opt:2214 msgid "Don't record gcc command line switches in DWARF DW_AT_producer." msgstr "" -#: common.opt:2221 +#: common.opt:2218 msgid "Record gcc command line switches in DWARF DW_AT_producer." msgstr "" -#: common.opt:2225 +#: common.opt:2222 msgid "Generate debug information in STABS format" msgstr "" -#: common.opt:2229 +#: common.opt:2226 msgid "Generate debug information in extended STABS format" msgstr "" -#: common.opt:2233 +#: common.opt:2230 msgid "Emit DWARF additions beyond selected version" msgstr "" -#: common.opt:2237 +#: common.opt:2234 msgid "Don't emit DWARF additions beyond selected version" msgstr "" -#: common.opt:2241 +#: common.opt:2238 msgid "Toggle debug information generation" msgstr "" -#: common.opt:2245 +#: common.opt:2242 msgid "Generate debug information in VMS format" msgstr "" -#: common.opt:2249 +#: common.opt:2246 msgid "Generate debug information in XCOFF format" msgstr "" -#: common.opt:2253 +#: common.opt:2250 msgid "Generate debug information in extended XCOFF format" msgstr "" -#: common.opt:2260 +#: common.opt:2257 msgid "-iplugindir=<dir>\tSet <dir> to be the default plugin directory" msgstr "" -#: common.opt:2282 +#: common.opt:2279 msgid "-o <file>\tPlace output into <file>" msgstr "" -#: common.opt:2286 +#: common.opt:2283 msgid "Enable function profiling" msgstr "" -#: common.opt:2293 +#: common.opt:2290 msgid "Issue warnings needed for strict compliance to the standard" msgstr "" -#: common.opt:2297 +#: common.opt:2294 msgid "Like -pedantic but issue them as errors" msgstr "" -#: common.opt:2334 +#: common.opt:2331 msgid "Do not display functions compiled or elapsed time" msgstr "" -#: common.opt:2366 +#: common.opt:2363 msgid "Enable verbose output" msgstr "" -#: common.opt:2370 +#: common.opt:2367 msgid "Display the compiler's version" msgstr "" -#: common.opt:2374 +#: common.opt:2371 msgid "Suppress warnings" msgstr "" -#: common.opt:2384 +#: common.opt:2381 msgid "Create a shared library" msgstr "" -#: common.opt:2417 +#: common.opt:2414 msgid "Create a position independent executable" msgstr "" @@ -12068,208 +12213,208 @@ msgstr "" msgid "constant refers to itself" msgstr "" -#: go/gofrontend/expressions.cc:4537 +#: go/gofrontend/expressions.cc:4552 msgid "expected numeric type" msgstr "" -#: go/gofrontend/expressions.cc:4544 +#: go/gofrontend/expressions.cc:4559 msgid "expected integer or boolean type" msgstr "" -#: go/gofrontend/expressions.cc:4551 +#: go/gofrontend/expressions.cc:4566 msgid "invalid operand for unary %<&%>" msgstr "" -#: go/gofrontend/expressions.cc:4560 +#: go/gofrontend/expressions.cc:4575 msgid "expected pointer" msgstr "" -#: go/gofrontend/expressions.cc:6258 go/gofrontend/expressions.cc:6509 -#: go/gofrontend/expressions.cc:6527 +#: go/gofrontend/expressions.cc:6311 go/gofrontend/expressions.cc:6562 +#: go/gofrontend/expressions.cc:6580 msgid "incompatible types in binary expression" msgstr "" -#: go/gofrontend/expressions.cc:6541 +#: go/gofrontend/expressions.cc:6594 msgid "shift of non-integer operand" msgstr "" -#: go/gofrontend/expressions.cc:6546 +#: go/gofrontend/expressions.cc:6599 msgid "shift count not unsigned integer" msgstr "" -#: go/gofrontend/expressions.cc:6556 +#: go/gofrontend/expressions.cc:6609 msgid "negative shift count" msgstr "" -#: go/gofrontend/expressions.cc:7264 +#: go/gofrontend/expressions.cc:7317 msgid "object is not a method" msgstr "" -#: go/gofrontend/expressions.cc:7273 +#: go/gofrontend/expressions.cc:7326 msgid "method type does not match object type" msgstr "" -#: go/gofrontend/expressions.cc:7553 +#: go/gofrontend/expressions.cc:7606 msgid "invalid use of %<...%> with builtin function" msgstr "" -#: go/gofrontend/expressions.cc:7615 go/gofrontend/expressions.cc:7669 -#: go/gofrontend/expressions.cc:7714 go/gofrontend/expressions.cc:8421 -#: go/gofrontend/expressions.cc:8565 go/gofrontend/expressions.cc:8608 -#: go/gofrontend/expressions.cc:8657 go/gofrontend/expressions.cc:9829 -#: go/gofrontend/expressions.cc:9848 +#: go/gofrontend/expressions.cc:7668 go/gofrontend/expressions.cc:7725 +#: go/gofrontend/expressions.cc:7770 go/gofrontend/expressions.cc:8497 +#: go/gofrontend/expressions.cc:8642 go/gofrontend/expressions.cc:8685 +#: go/gofrontend/expressions.cc:8741 go/gofrontend/expressions.cc:9919 +#: go/gofrontend/expressions.cc:9938 msgid "not enough arguments" msgstr "" -#: go/gofrontend/expressions.cc:7617 go/gofrontend/expressions.cc:7671 -#: go/gofrontend/expressions.cc:8426 go/gofrontend/expressions.cc:8548 -#: go/gofrontend/expressions.cc:8570 go/gofrontend/expressions.cc:8613 -#: go/gofrontend/expressions.cc:8659 go/gofrontend/expressions.cc:9546 -#: go/gofrontend/expressions.cc:9834 go/gofrontend/expressions.cc:9855 +#: go/gofrontend/expressions.cc:7670 go/gofrontend/expressions.cc:7727 +#: go/gofrontend/expressions.cc:8502 go/gofrontend/expressions.cc:8625 +#: go/gofrontend/expressions.cc:8647 go/gofrontend/expressions.cc:8690 +#: go/gofrontend/expressions.cc:8743 go/gofrontend/expressions.cc:9633 +#: go/gofrontend/expressions.cc:9924 go/gofrontend/expressions.cc:9945 msgid "too many arguments" msgstr "" -#: go/gofrontend/expressions.cc:7673 +#: go/gofrontend/expressions.cc:7729 msgid "argument 1 must be a map" msgstr "" -#: go/gofrontend/expressions.cc:7740 +#: go/gofrontend/expressions.cc:7796 msgid "invalid type for make function" msgstr "" -#: go/gofrontend/expressions.cc:7750 +#: go/gofrontend/expressions.cc:7810 msgid "length required when allocating a slice" msgstr "" -#: go/gofrontend/expressions.cc:7764 +#: go/gofrontend/expressions.cc:7824 msgid "bad size for make" msgstr "" -#: go/gofrontend/expressions.cc:7776 +#: go/gofrontend/expressions.cc:7839 msgid "bad capacity when making slice" msgstr "" -#: go/gofrontend/expressions.cc:7784 +#: go/gofrontend/expressions.cc:7850 msgid "too many arguments to make" msgstr "" -#: go/gofrontend/expressions.cc:8467 +#: go/gofrontend/expressions.cc:8544 msgid "argument must be array or slice or channel" msgstr "" -#: go/gofrontend/expressions.cc:8477 +#: go/gofrontend/expressions.cc:8554 msgid "argument must be string or array or slice or map or channel" msgstr "" -#: go/gofrontend/expressions.cc:8523 +#: go/gofrontend/expressions.cc:8600 msgid "unsupported argument type to builtin function" msgstr "" -#: go/gofrontend/expressions.cc:8534 +#: go/gofrontend/expressions.cc:8611 msgid "argument must be channel" msgstr "" -#: go/gofrontend/expressions.cc:8536 +#: go/gofrontend/expressions.cc:8613 msgid "cannot close receive-only channel" msgstr "" -#: go/gofrontend/expressions.cc:8556 +#: go/gofrontend/expressions.cc:8633 msgid "argument must be a field reference" msgstr "" -#: go/gofrontend/expressions.cc:8583 +#: go/gofrontend/expressions.cc:8660 msgid "left argument must be a slice" msgstr "" -#: go/gofrontend/expressions.cc:8591 +#: go/gofrontend/expressions.cc:8668 msgid "element types must be the same" msgstr "" -#: go/gofrontend/expressions.cc:8596 +#: go/gofrontend/expressions.cc:8673 msgid "first argument must be []byte" msgstr "" -#: go/gofrontend/expressions.cc:8599 +#: go/gofrontend/expressions.cc:8676 msgid "second argument must be slice or string" msgstr "" -#: go/gofrontend/expressions.cc:8632 -msgid "arguments 1 and 2 have different types" +#: go/gofrontend/expressions.cc:8717 +msgid "argument 2 has invalid type" msgstr "" -#: go/gofrontend/expressions.cc:8649 +#: go/gofrontend/expressions.cc:8733 msgid "argument must have complex type" msgstr "" -#: go/gofrontend/expressions.cc:8667 +#: go/gofrontend/expressions.cc:8751 msgid "complex arguments must have identical types" msgstr "" -#: go/gofrontend/expressions.cc:8669 +#: go/gofrontend/expressions.cc:8753 msgid "complex arguments must have floating-point type" msgstr "" -#: go/gofrontend/expressions.cc:9792 go/gofrontend/expressions.cc:10217 +#: go/gofrontend/expressions.cc:9882 go/gofrontend/expressions.cc:10313 msgid "expected function" msgstr "" -#: go/gofrontend/expressions.cc:9811 +#: go/gofrontend/expressions.cc:9901 msgid "incompatible type for receiver" msgstr "" -#: go/gofrontend/expressions.cc:10226 go/gofrontend/expressions.cc:10240 +#: go/gofrontend/expressions.cc:10322 go/gofrontend/expressions.cc:10336 msgid "number of results does not match number of values" msgstr "" -#: go/gofrontend/expressions.cc:10535 go/gofrontend/expressions.cc:10943 +#: go/gofrontend/expressions.cc:10640 go/gofrontend/expressions.cc:11060 msgid "index must be integer" msgstr "" -#: go/gofrontend/expressions.cc:10541 go/gofrontend/expressions.cc:10947 +#: go/gofrontend/expressions.cc:10646 go/gofrontend/expressions.cc:11064 msgid "slice end must be integer" msgstr "" -#: go/gofrontend/expressions.cc:10596 +#: go/gofrontend/expressions.cc:10701 msgid "slice of unaddressable value" msgstr "" -#: go/gofrontend/expressions.cc:11175 +#: go/gofrontend/expressions.cc:11292 msgid "incompatible type for map index" msgstr "" -#: go/gofrontend/expressions.cc:11523 +#: go/gofrontend/expressions.cc:11640 msgid "expected interface or pointer to interface" msgstr "" -#: go/gofrontend/expressions.cc:12049 +#: go/gofrontend/expressions.cc:12177 msgid "too many expressions for struct" msgstr "" -#: go/gofrontend/expressions.cc:12062 +#: go/gofrontend/expressions.cc:12190 msgid "too few expressions for struct" msgstr "" -#: go/gofrontend/expressions.cc:12342 +#: go/gofrontend/expressions.cc:12470 msgid "too many elements in composite literal" msgstr "" -#: go/gofrontend/expressions.cc:13611 go/gofrontend/expressions.cc:13619 +#: go/gofrontend/expressions.cc:13739 go/gofrontend/expressions.cc:13747 msgid "invalid unsafe.Pointer conversion" msgstr "" -#: go/gofrontend/expressions.cc:13624 go/gofrontend/statements.cc:1539 +#: go/gofrontend/expressions.cc:13752 go/gofrontend/statements.cc:1539 msgid "type assertion only valid for interface types" msgstr "" -#: go/gofrontend/expressions.cc:13636 +#: go/gofrontend/expressions.cc:13764 msgid "impossible type assertion: type does not implement interface" msgstr "" -#: go/gofrontend/expressions.cc:13820 go/gofrontend/statements.cc:1387 +#: go/gofrontend/expressions.cc:13948 go/gofrontend/statements.cc:1387 msgid "expected channel" msgstr "" -#: go/gofrontend/expressions.cc:13825 go/gofrontend/statements.cc:1392 +#: go/gofrontend/expressions.cc:13953 go/gofrontend/statements.cc:1392 msgid "invalid receive on send-only channel" msgstr "" @@ -12317,117 +12462,117 @@ msgstr "" msgid "range clause must have array, slice, string, map, or channel type" msgstr "" -#: go/gofrontend/types.cc:509 +#: go/gofrontend/types.cc:527 msgid "invalid comparison of non-ordered type" msgstr "" -#: go/gofrontend/types.cc:525 +#: go/gofrontend/types.cc:543 msgid "slice can only be compared to nil" msgstr "" -#: go/gofrontend/types.cc:527 +#: go/gofrontend/types.cc:545 msgid "map can only be compared to nil" msgstr "" -#: go/gofrontend/types.cc:529 +#: go/gofrontend/types.cc:547 msgid "func can only be compared to nil" msgstr "" -#: go/gofrontend/types.cc:535 +#: go/gofrontend/types.cc:553 #, c-format msgid "invalid operation (%s)" msgstr "" -#: go/gofrontend/types.cc:558 +#: go/gofrontend/types.cc:576 msgid "invalid comparison of non-comparable type" msgstr "" -#: go/gofrontend/types.cc:576 +#: go/gofrontend/types.cc:594 msgid "invalid comparison of non-comparable struct" msgstr "" -#: go/gofrontend/types.cc:587 +#: go/gofrontend/types.cc:605 msgid "invalid comparison of non-comparable array" msgstr "" -#: go/gofrontend/types.cc:699 -msgid "need explicit conversion" +#: go/gofrontend/types.cc:636 +msgid "multiple value function call in single value context" msgstr "" -#: go/gofrontend/types.cc:701 -msgid "multiple value function call in single value context" +#: go/gofrontend/types.cc:723 +msgid "need explicit conversion" msgstr "" -#: go/gofrontend/types.cc:709 +#: go/gofrontend/types.cc:730 #, c-format msgid "cannot use type %s as type %s" msgstr "" -#: go/gofrontend/types.cc:2980 +#: go/gofrontend/types.cc:3199 msgid "different receiver types" msgstr "" -#: go/gofrontend/types.cc:3000 go/gofrontend/types.cc:3013 -#: go/gofrontend/types.cc:3028 +#: go/gofrontend/types.cc:3219 go/gofrontend/types.cc:3232 +#: go/gofrontend/types.cc:3247 msgid "different number of parameters" msgstr "" -#: go/gofrontend/types.cc:3021 +#: go/gofrontend/types.cc:3240 msgid "different parameter types" msgstr "" -#: go/gofrontend/types.cc:3036 +#: go/gofrontend/types.cc:3255 msgid "different varargs" msgstr "" -#: go/gofrontend/types.cc:3045 go/gofrontend/types.cc:3058 -#: go/gofrontend/types.cc:3073 +#: go/gofrontend/types.cc:3264 go/gofrontend/types.cc:3277 +#: go/gofrontend/types.cc:3292 msgid "different number of results" msgstr "" -#: go/gofrontend/types.cc:3066 +#: go/gofrontend/types.cc:3285 msgid "different result types" msgstr "" -#: go/gofrontend/types.cc:4054 +#: go/gofrontend/types.cc:4237 #, c-format msgid "implicit assignment of %s%s%s hidden field %s%s%s" msgstr "" -#: go/gofrontend/types.cc:6423 +#: go/gofrontend/types.cc:6641 #, c-format msgid "need explicit conversion; missing method %s%s%s" msgstr "" -#: go/gofrontend/types.cc:6440 go/gofrontend/types.cc:6582 +#: go/gofrontend/types.cc:6658 go/gofrontend/types.cc:6800 #, c-format msgid "incompatible type for method %s%s%s" msgstr "" -#: go/gofrontend/types.cc:6444 go/gofrontend/types.cc:6586 +#: go/gofrontend/types.cc:6662 go/gofrontend/types.cc:6804 #, c-format msgid "incompatible type for method %s%s%s (%s)" msgstr "" -#: go/gofrontend/types.cc:6523 go/gofrontend/types.cc:6536 +#: go/gofrontend/types.cc:6741 go/gofrontend/types.cc:6754 msgid "pointer to interface type has no methods" msgstr "" -#: go/gofrontend/types.cc:6525 go/gofrontend/types.cc:6538 +#: go/gofrontend/types.cc:6743 go/gofrontend/types.cc:6756 msgid "type has no methods" msgstr "" -#: go/gofrontend/types.cc:6559 +#: go/gofrontend/types.cc:6777 #, c-format msgid "ambiguous method %s%s%s" msgstr "" -#: go/gofrontend/types.cc:6562 +#: go/gofrontend/types.cc:6780 #, c-format msgid "missing method %s%s%s" msgstr "" -#: go/gofrontend/types.cc:6602 +#: go/gofrontend/types.cc:6820 #, c-format msgid "method %s%s%s requires a pointer" msgstr "" @@ -12495,7 +12640,7 @@ msgstr "" msgid "invalid third argument to %<__builtin_prefetch%>; using zero" msgstr "" -#: builtins.c:4214 gimplify.c:2406 +#: builtins.c:4214 gimplify.c:2407 #, gcc-internal-format msgid "too few arguments to function %<va_start%>" msgstr "" @@ -12547,100 +12692,100 @@ msgstr "" msgid "both arguments to %<__builtin___clear_cache%> must be pointers" msgstr "" -#: builtins.c:4903 +#: builtins.c:4908 #, gcc-internal-format msgid "trampoline generated for nested function %qD" msgstr "" -#: builtins.c:5198 builtins.c:5211 +#: builtins.c:5204 builtins.c:5217 #, gcc-internal-format msgid "%qD changed semantics in GCC 4.4" msgstr "" -#: builtins.c:5310 +#: builtins.c:5316 #, gcc-internal-format msgid "invalid memory model argument to builtin" msgstr "" -#: builtins.c:5330 +#: builtins.c:5336 #, gcc-internal-format msgid "invalid memory model for %<__atomic_exchange%>" msgstr "" -#: builtins.c:5366 +#: builtins.c:5372 #, gcc-internal-format msgid "invalid failure memory model for %<__atomic_compare_exchange%>" msgstr "" -#: builtins.c:5372 +#: builtins.c:5378 #, gcc-internal-format msgid "" "failure memory model cannot be stronger than success memory model for " "%<__atomic_compare_exchange%>" msgstr "" -#: builtins.c:5418 +#: builtins.c:5424 #, gcc-internal-format msgid "invalid memory model for %<__atomic_load%>" msgstr "" -#: builtins.c:5448 builtins.c:5554 +#: builtins.c:5454 builtins.c:5560 #, gcc-internal-format msgid "invalid memory model for %<__atomic_store%>" msgstr "" -#: builtins.c:5663 +#: builtins.c:5669 #, gcc-internal-format msgid "non-constant argument 1 to __atomic_always_lock_free" msgstr "" -#: builtins.c:5705 +#: builtins.c:5711 #, gcc-internal-format msgid "non-integer argument 1 to __atomic_is_lock_free" msgstr "" #. All valid uses of __builtin_va_arg_pack () are removed during #. inlining. -#: builtins.c:5989 expr.c:9944 +#: builtins.c:5994 expr.c:9989 #, gcc-internal-format msgid "%Kinvalid use of %<__builtin_va_arg_pack ()%>" msgstr "" #. All valid uses of __builtin_va_arg_pack_len () are removed during #. inlining. -#: builtins.c:5995 +#: builtins.c:6000 #, gcc-internal-format msgid "%Kinvalid use of %<__builtin_va_arg_pack_len ()%>" msgstr "" -#: builtins.c:6234 +#: builtins.c:6239 #, gcc-internal-format msgid "%<__builtin_longjmp%> second argument must be 1" msgstr "" -#: builtins.c:7077 +#: builtins.c:7084 #, gcc-internal-format msgid "target format does not support infinity" msgstr "" -#: builtins.c:12058 +#: builtins.c:12065 #, gcc-internal-format msgid "%<va_start%> used in function with fixed args" msgstr "" -#: builtins.c:12066 +#: builtins.c:12073 #, gcc-internal-format msgid "wrong number of arguments to function %<va_start%>" msgstr "" #. Evidently an out of date version of <stdarg.h>; can't validate #. va_start's second argument, but can still work as intended. -#: builtins.c:12079 +#: builtins.c:12086 #, gcc-internal-format msgid "%<__builtin_next_arg%> called without an argument" msgstr "" -#: builtins.c:12084 +#: builtins.c:12091 #, gcc-internal-format msgid "wrong number of arguments to function %<__builtin_next_arg%>" msgstr "" @@ -12650,44 +12795,44 @@ msgstr "" #. argument. We just warn and set the arg to be the last #. argument so that we will get wrong-code because of #. it. -#: builtins.c:12114 +#: builtins.c:12121 #, gcc-internal-format msgid "second parameter of %<va_start%> not last named argument" msgstr "" -#: builtins.c:12124 +#: builtins.c:12131 #, gcc-internal-format msgid "" "undefined behaviour when second parameter of %<va_start%> is declared with " "%<register%> storage" msgstr "" -#: builtins.c:12360 +#: builtins.c:12367 #, gcc-internal-format msgid "%Kfirst argument of %D must be a pointer, second integer constant" msgstr "" -#: builtins.c:12373 +#: builtins.c:12380 #, gcc-internal-format msgid "%Klast argument of %D is not integer constant between 0 and 3" msgstr "" -#: builtins.c:12418 builtins.c:12569 builtins.c:12626 +#: builtins.c:12425 builtins.c:12576 builtins.c:12633 #, gcc-internal-format msgid "%Kcall to %D will always overflow destination buffer" msgstr "" -#: builtins.c:12559 +#: builtins.c:12566 #, gcc-internal-format msgid "%Kcall to %D might overflow destination buffer" msgstr "" -#: builtins.c:12647 +#: builtins.c:12654 #, gcc-internal-format msgid "%Kattempt to free a non-heap object %qD" msgstr "" -#: builtins.c:12650 +#: builtins.c:12657 #, gcc-internal-format msgid "%Kattempt to free a non-heap object" msgstr "" @@ -12758,7 +12903,7 @@ msgstr "" msgid "type of array %q+D completed incompatibly with implicit initialization" msgstr "" -#: c-decl.c:1462 c-decl.c:5851 c-decl.c:6681 c-decl.c:7393 +#: c-decl.c:1462 c-decl.c:5852 c-decl.c:6682 c-decl.c:7394 #, gcc-internal-format msgid "originally defined here" msgstr "" @@ -12827,7 +12972,7 @@ msgstr "" msgid "built-in function %q+D declared as non-function" msgstr "" -#: c-decl.c:1674 c-decl.c:1847 c-decl.c:2558 +#: c-decl.c:1674 c-decl.c:1847 c-decl.c:2559 #, gcc-internal-format msgid "declaration of %q+D shadows a built-in function" msgstr "" @@ -12961,217 +13106,217 @@ msgstr "" msgid "redundant redeclaration of %q+D" msgstr "" -#: c-decl.c:2545 +#: c-decl.c:2546 #, gcc-internal-format msgid "declaration of %q+D shadows previous non-variable" msgstr "" -#: c-decl.c:2550 +#: c-decl.c:2551 #, gcc-internal-format msgid "declaration of %q+D shadows a parameter" msgstr "" -#: c-decl.c:2553 +#: c-decl.c:2554 #, gcc-internal-format msgid "declaration of %q+D shadows a global declaration" msgstr "" -#: c-decl.c:2563 +#: c-decl.c:2564 #, gcc-internal-format msgid "declaration of %q+D shadows a previous local" msgstr "" -#: c-decl.c:2567 cp/name-lookup.c:1150 cp/name-lookup.c:1193 +#: c-decl.c:2568 cp/name-lookup.c:1150 cp/name-lookup.c:1193 #, gcc-internal-format msgid "shadowed declaration is here" msgstr "" -#: c-decl.c:2694 +#: c-decl.c:2695 #, gcc-internal-format msgid "nested extern declaration of %qD" msgstr "" -#: c-decl.c:2870 c-decl.c:2873 +#: c-decl.c:2871 c-decl.c:2874 #, gcc-internal-format msgid "implicit declaration of function %qE" msgstr "" -#: c-decl.c:2936 +#: c-decl.c:2937 #, gcc-internal-format msgid "incompatible implicit declaration of built-in function %qD" msgstr "" -#: c-decl.c:2945 +#: c-decl.c:2946 #, gcc-internal-format msgid "incompatible implicit declaration of function %qD" msgstr "" -#: c-decl.c:2998 +#: c-decl.c:2999 #, gcc-internal-format msgid "%qE undeclared here (not in a function)" msgstr "" -#: c-decl.c:3004 +#: c-decl.c:3005 #, gcc-internal-format msgid "%qE undeclared (first use in this function)" msgstr "" -#: c-decl.c:3007 +#: c-decl.c:3008 #, gcc-internal-format msgid "" "each undeclared identifier is reported only once for each function it " "appears in" msgstr "" -#: c-decl.c:3057 cp/decl.c:2593 +#: c-decl.c:3058 cp/decl.c:2598 #, gcc-internal-format msgid "label %qE referenced outside of any function" msgstr "" -#: c-decl.c:3093 +#: c-decl.c:3094 #, gcc-internal-format msgid "jump into scope of identifier with variably modified type" msgstr "" -#: c-decl.c:3096 +#: c-decl.c:3097 #, gcc-internal-format msgid "jump skips variable initialization" msgstr "" -#: c-decl.c:3097 c-decl.c:3153 c-decl.c:3242 +#: c-decl.c:3098 c-decl.c:3154 c-decl.c:3243 #, gcc-internal-format msgid "label %qD defined here" msgstr "" -#: c-decl.c:3098 c-decl.c:3370 +#: c-decl.c:3099 c-decl.c:3371 #, gcc-internal-format msgid "%qD declared here" msgstr "" -#: c-decl.c:3152 c-decl.c:3241 +#: c-decl.c:3153 c-decl.c:3242 #, gcc-internal-format msgid "jump into statement expression" msgstr "" -#: c-decl.c:3174 +#: c-decl.c:3175 #, gcc-internal-format msgid "duplicate label declaration %qE" msgstr "" -#: c-decl.c:3272 cp/decl.c:2916 +#: c-decl.c:3273 cp/decl.c:2921 #, gcc-internal-format msgid "duplicate label %qD" msgstr "" -#: c-decl.c:3303 +#: c-decl.c:3304 #, gcc-internal-format msgid "" "traditional C lacks a separate namespace for labels, identifier %qE conflicts" msgstr "" -#: c-decl.c:3368 +#: c-decl.c:3369 #, gcc-internal-format msgid "switch jumps over variable initialization" msgstr "" -#: c-decl.c:3369 c-decl.c:3380 +#: c-decl.c:3370 c-decl.c:3381 #, gcc-internal-format msgid "switch starts here" msgstr "" -#: c-decl.c:3379 +#: c-decl.c:3380 #, gcc-internal-format msgid "switch jumps into statement expression" msgstr "" -#: c-decl.c:3450 +#: c-decl.c:3451 #, gcc-internal-format msgid "%qE defined as wrong kind of tag" msgstr "" -#: c-decl.c:3673 c-typeck.c:10999 c-family/c-common.c:4164 +#: c-decl.c:3674 c-typeck.c:10999 c-family/c-common.c:4164 #, gcc-internal-format msgid "invalid use of %<restrict%>" msgstr "" -#: c-decl.c:3683 +#: c-decl.c:3684 #, gcc-internal-format msgid "unnamed struct/union that defines no instances" msgstr "" -#: c-decl.c:3693 +#: c-decl.c:3694 #, gcc-internal-format msgid "empty declaration with storage class specifier does not redeclare tag" msgstr "" -#: c-decl.c:3707 +#: c-decl.c:3708 #, gcc-internal-format msgid "empty declaration with type qualifier does not redeclare tag" msgstr "" -#: c-decl.c:3718 +#: c-decl.c:3719 #, gcc-internal-format msgid "empty declaration with %<_Alignas%> does not redeclare tag" msgstr "" -#: c-decl.c:3740 c-decl.c:3747 +#: c-decl.c:3741 c-decl.c:3748 #, gcc-internal-format msgid "useless type name in empty declaration" msgstr "" -#: c-decl.c:3755 +#: c-decl.c:3756 #, gcc-internal-format msgid "%<inline%> in empty declaration" msgstr "" -#: c-decl.c:3761 +#: c-decl.c:3762 #, gcc-internal-format msgid "%<_Noreturn%> in empty declaration" msgstr "" -#: c-decl.c:3767 +#: c-decl.c:3768 #, gcc-internal-format msgid "%<auto%> in file-scope empty declaration" msgstr "" -#: c-decl.c:3773 +#: c-decl.c:3774 #, gcc-internal-format msgid "%<register%> in file-scope empty declaration" msgstr "" -#: c-decl.c:3779 +#: c-decl.c:3780 #, gcc-internal-format msgid "useless storage class specifier in empty declaration" msgstr "" -#: c-decl.c:3785 +#: c-decl.c:3786 #, gcc-internal-format msgid "useless %<__thread%> in empty declaration" msgstr "" -#: c-decl.c:3794 +#: c-decl.c:3795 #, gcc-internal-format msgid "useless type qualifier in empty declaration" msgstr "" -#: c-decl.c:3800 +#: c-decl.c:3801 #, gcc-internal-format msgid "useless %<_Alignas%> in empty declaration" msgstr "" -#: c-decl.c:3807 c-parser.c:1498 +#: c-decl.c:3808 c-parser.c:1498 #, gcc-internal-format msgid "empty declaration" msgstr "" -#: c-decl.c:3879 +#: c-decl.c:3880 #, gcc-internal-format msgid "" "ISO C90 does not support %<static%> or type qualifiers in parameter array " "declarators" msgstr "" -#: c-decl.c:3883 +#: c-decl.c:3884 #, gcc-internal-format msgid "ISO C90 does not support %<[*]%> array declarators" msgstr "" @@ -13179,28 +13324,28 @@ msgstr "" #. C99 6.7.5.2p4 #. A function definition isn't function prototype scope C99 6.2.1p4. #. C99 6.7.5.2p4 -#: c-decl.c:3890 c-decl.c:6249 +#: c-decl.c:3891 c-decl.c:6250 #, gcc-internal-format msgid "%<[*]%> not allowed in other than function prototype scope" msgstr "" -#: c-decl.c:4003 +#: c-decl.c:4004 #, gcc-internal-format msgid "%q+D is usually a function" msgstr "" -#: c-decl.c:4012 +#: c-decl.c:4013 #, gcc-internal-format msgid "typedef %qD is initialized (use __typeof__ instead)" msgstr "" -#: c-decl.c:4017 +#: c-decl.c:4018 #, gcc-internal-format msgid "function %qD is initialized like a variable" msgstr "" #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. -#: c-decl.c:4023 +#: c-decl.c:4024 #, gcc-internal-format msgid "parameter %qD is initialized" msgstr "" @@ -13209,272 +13354,272 @@ msgstr "" #. of VLAs themselves count as VLAs, it does not make #. sense to permit them to be initialized given that #. ordinary VLAs may not be initialized. -#: c-decl.c:4042 c-decl.c:4057 c-typeck.c:6374 +#: c-decl.c:4043 c-decl.c:4058 c-typeck.c:6374 #, gcc-internal-format msgid "variable-sized object may not be initialized" msgstr "" -#: c-decl.c:4048 +#: c-decl.c:4049 #, gcc-internal-format msgid "variable %qD has initializer but incomplete type" msgstr "" -#: c-decl.c:4137 cp/decl.c:4418 cp/decl.c:12643 +#: c-decl.c:4138 cp/decl.c:4428 cp/decl.c:12657 #, gcc-internal-format msgid "inline function %q+D given attribute noinline" msgstr "" -#: c-decl.c:4188 +#: c-decl.c:4189 #, gcc-internal-format msgid "uninitialized const member in %qT is invalid in C++" msgstr "" -#: c-decl.c:4190 cp/init.c:2115 cp/init.c:2130 +#: c-decl.c:4191 cp/init.c:2115 cp/init.c:2130 #, gcc-internal-format msgid "%qD should be initialized" msgstr "" -#: c-decl.c:4268 +#: c-decl.c:4269 #, gcc-internal-format msgid "initializer fails to determine size of %q+D" msgstr "" -#: c-decl.c:4273 +#: c-decl.c:4274 #, gcc-internal-format msgid "array size missing in %q+D" msgstr "" -#: c-decl.c:4285 +#: c-decl.c:4286 #, gcc-internal-format msgid "zero or negative size array %q+D" msgstr "" -#: c-decl.c:4340 varasm.c:1966 +#: c-decl.c:4341 varasm.c:1966 #, gcc-internal-format msgid "storage size of %q+D isn%'t known" msgstr "" -#: c-decl.c:4351 +#: c-decl.c:4352 #, gcc-internal-format msgid "storage size of %q+D isn%'t constant" msgstr "" -#: c-decl.c:4401 +#: c-decl.c:4402 #, gcc-internal-format msgid "ignoring asm-specifier for non-static local variable %q+D" msgstr "" -#: c-decl.c:4431 +#: c-decl.c:4432 #, gcc-internal-format msgid "cannot put object with volatile field into register" msgstr "" -#: c-decl.c:4518 +#: c-decl.c:4519 #, gcc-internal-format msgid "uninitialized const %qD is invalid in C++" msgstr "" -#: c-decl.c:4576 +#: c-decl.c:4577 #, gcc-internal-format msgid "ISO C forbids forward parameter declarations" msgstr "" -#: c-decl.c:4666 +#: c-decl.c:4667 #, gcc-internal-format msgid "defining a type in a compound literal is invalid in C++" msgstr "" -#: c-decl.c:4718 c-decl.c:4733 +#: c-decl.c:4719 c-decl.c:4734 #, gcc-internal-format msgid "bit-field %qs width not an integer constant" msgstr "" -#: c-decl.c:4728 +#: c-decl.c:4729 #, gcc-internal-format msgid "bit-field %qs width not an integer constant expression" msgstr "" -#: c-decl.c:4739 +#: c-decl.c:4740 #, gcc-internal-format msgid "negative width in bit-field %qs" msgstr "" -#: c-decl.c:4744 +#: c-decl.c:4745 #, gcc-internal-format msgid "zero width for bit-field %qs" msgstr "" -#: c-decl.c:4754 +#: c-decl.c:4755 #, gcc-internal-format msgid "bit-field %qs has invalid type" msgstr "" -#: c-decl.c:4764 +#: c-decl.c:4765 #, gcc-internal-format msgid "type of bit-field %qs is a GCC extension" msgstr "" -#: c-decl.c:4770 +#: c-decl.c:4771 #, gcc-internal-format msgid "width of %qs exceeds its type" msgstr "" -#: c-decl.c:4783 +#: c-decl.c:4784 #, gcc-internal-format msgid "%qs is narrower than values of its type" msgstr "" -#: c-decl.c:4802 +#: c-decl.c:4803 #, gcc-internal-format msgid "ISO C90 forbids array %qE whose size can%'t be evaluated" msgstr "" -#: c-decl.c:4806 +#: c-decl.c:4807 #, gcc-internal-format msgid "ISO C90 forbids array whose size can%'t be evaluated" msgstr "" -#: c-decl.c:4813 +#: c-decl.c:4814 #, gcc-internal-format msgid "ISO C90 forbids variable length array %qE" msgstr "" -#: c-decl.c:4816 +#: c-decl.c:4817 #, gcc-internal-format msgid "ISO C90 forbids variable length array" msgstr "" -#: c-decl.c:4825 +#: c-decl.c:4826 #, gcc-internal-format msgid "the size of array %qE can%'t be evaluated" msgstr "" -#: c-decl.c:4829 +#: c-decl.c:4830 #, gcc-internal-format msgid "the size of array can %'t be evaluated" msgstr "" -#: c-decl.c:4835 +#: c-decl.c:4836 #, gcc-internal-format msgid "variable length array %qE is used" msgstr "" -#: c-decl.c:4839 cp/decl.c:8053 +#: c-decl.c:4840 cp/decl.c:8063 #, gcc-internal-format msgid "variable length array is used" msgstr "" -#: c-decl.c:4998 c-decl.c:5346 c-decl.c:5356 +#: c-decl.c:4999 c-decl.c:5347 c-decl.c:5357 #, gcc-internal-format msgid "variably modified %qE at file scope" msgstr "" -#: c-decl.c:5000 +#: c-decl.c:5001 #, gcc-internal-format msgid "variably modified field at file scope" msgstr "" -#: c-decl.c:5020 +#: c-decl.c:5021 #, gcc-internal-format msgid "type defaults to %<int%> in declaration of %qE" msgstr "" -#: c-decl.c:5024 +#: c-decl.c:5025 #, gcc-internal-format msgid "type defaults to %<int%> in type name" msgstr "" -#: c-decl.c:5057 +#: c-decl.c:5058 #, gcc-internal-format msgid "duplicate %<const%>" msgstr "" -#: c-decl.c:5059 +#: c-decl.c:5060 #, gcc-internal-format msgid "duplicate %<restrict%>" msgstr "" -#: c-decl.c:5061 +#: c-decl.c:5062 #, gcc-internal-format msgid "duplicate %<volatile%>" msgstr "" -#: c-decl.c:5065 +#: c-decl.c:5066 #, gcc-internal-format, gfc-internal-format msgid "conflicting named address spaces (%s vs %s)" msgstr "" -#: c-decl.c:5089 +#: c-decl.c:5090 #, gcc-internal-format msgid "function definition declared %<auto%>" msgstr "" -#: c-decl.c:5091 +#: c-decl.c:5092 #, gcc-internal-format msgid "function definition declared %<register%>" msgstr "" -#: c-decl.c:5093 +#: c-decl.c:5094 #, gcc-internal-format msgid "function definition declared %<typedef%>" msgstr "" -#: c-decl.c:5095 +#: c-decl.c:5096 #, gcc-internal-format msgid "function definition declared %<__thread%>" msgstr "" -#: c-decl.c:5112 +#: c-decl.c:5113 #, gcc-internal-format msgid "storage class specified for structure field %qE" msgstr "" -#: c-decl.c:5115 +#: c-decl.c:5116 #, gcc-internal-format msgid "storage class specified for structure field" msgstr "" -#: c-decl.c:5119 +#: c-decl.c:5120 #, gcc-internal-format msgid "storage class specified for parameter %qE" msgstr "" -#: c-decl.c:5122 +#: c-decl.c:5123 #, gcc-internal-format msgid "storage class specified for unnamed parameter" msgstr "" -#: c-decl.c:5125 cp/decl.c:9020 +#: c-decl.c:5126 cp/decl.c:9030 #, gcc-internal-format msgid "storage class specified for typename" msgstr "" -#: c-decl.c:5142 +#: c-decl.c:5143 #, gcc-internal-format msgid "%qE initialized and declared %<extern%>" msgstr "" -#: c-decl.c:5146 +#: c-decl.c:5147 #, gcc-internal-format msgid "%qE has both %<extern%> and initializer" msgstr "" -#: c-decl.c:5151 +#: c-decl.c:5152 #, gcc-internal-format msgid "file-scope declaration of %qE specifies %<auto%>" msgstr "" -#: c-decl.c:5155 +#: c-decl.c:5156 #, gcc-internal-format msgid "file-scope declaration of %qE specifies %<register%>" msgstr "" -#: c-decl.c:5160 +#: c-decl.c:5161 #, gcc-internal-format msgid "nested function %qE declared %<extern%>" msgstr "" -#: c-decl.c:5163 +#: c-decl.c:5164 #, gcc-internal-format msgid "function-scope %qE implicitly auto and declared %<__thread%>" msgstr "" @@ -13482,659 +13627,659 @@ msgstr "" #. Only the innermost declarator (making a parameter be of #. array type which is converted to pointer type) #. may have static or type qualifiers. -#: c-decl.c:5210 c-decl.c:5540 +#: c-decl.c:5211 c-decl.c:5541 #, gcc-internal-format msgid "static or type qualifiers in non-parameter array declarator" msgstr "" -#: c-decl.c:5258 +#: c-decl.c:5259 #, gcc-internal-format msgid "declaration of %qE as array of voids" msgstr "" -#: c-decl.c:5260 +#: c-decl.c:5261 #, gcc-internal-format msgid "declaration of type name as array of voids" msgstr "" -#: c-decl.c:5267 +#: c-decl.c:5268 #, gcc-internal-format msgid "declaration of %qE as array of functions" msgstr "" -#: c-decl.c:5270 +#: c-decl.c:5271 #, gcc-internal-format msgid "declaration of type name as array of functions" msgstr "" -#: c-decl.c:5277 c-decl.c:7177 +#: c-decl.c:5278 c-decl.c:7178 #, gcc-internal-format msgid "invalid use of structure with flexible array member" msgstr "" -#: c-decl.c:5303 +#: c-decl.c:5304 #, gcc-internal-format msgid "size of array %qE has non-integer type" msgstr "" -#: c-decl.c:5307 +#: c-decl.c:5308 #, gcc-internal-format msgid "size of unnamed array has non-integer type" msgstr "" -#: c-decl.c:5317 +#: c-decl.c:5318 #, gcc-internal-format msgid "ISO C forbids zero-size array %qE" msgstr "" -#: c-decl.c:5320 +#: c-decl.c:5321 #, gcc-internal-format msgid "ISO C forbids zero-size array" msgstr "" -#: c-decl.c:5329 +#: c-decl.c:5330 #, gcc-internal-format msgid "size of array %qE is negative" msgstr "" -#: c-decl.c:5331 +#: c-decl.c:5332 #, gcc-internal-format msgid "size of unnamed array is negative" msgstr "" -#: c-decl.c:5405 c-decl.c:5808 +#: c-decl.c:5406 c-decl.c:5809 #, gcc-internal-format msgid "size of array %qE is too large" msgstr "" -#: c-decl.c:5408 c-decl.c:5810 +#: c-decl.c:5409 c-decl.c:5811 #, gcc-internal-format msgid "size of unnamed array is too large" msgstr "" -#: c-decl.c:5445 +#: c-decl.c:5446 #, gcc-internal-format msgid "ISO C90 does not support flexible array members" msgstr "" #. C99 6.7.5.2p4 -#: c-decl.c:5466 +#: c-decl.c:5467 #, gcc-internal-format msgid "%<[*]%> not in a declaration" msgstr "" -#: c-decl.c:5479 +#: c-decl.c:5480 #, gcc-internal-format msgid "array type has incomplete element type" msgstr "" -#: c-decl.c:5573 +#: c-decl.c:5574 #, gcc-internal-format msgid "%qE declared as function returning a function" msgstr "" -#: c-decl.c:5576 +#: c-decl.c:5577 #, gcc-internal-format msgid "type name declared as function returning a function" msgstr "" -#: c-decl.c:5583 +#: c-decl.c:5584 #, gcc-internal-format msgid "%qE declared as function returning an array" msgstr "" -#: c-decl.c:5586 +#: c-decl.c:5587 #, gcc-internal-format msgid "type name declared as function returning an array" msgstr "" -#: c-decl.c:5614 +#: c-decl.c:5615 #, gcc-internal-format msgid "function definition has qualified void return type" msgstr "" -#: c-decl.c:5617 cp/decl.c:9126 +#: c-decl.c:5618 cp/decl.c:9136 #, gcc-internal-format msgid "type qualifiers ignored on function return type" msgstr "" -#: c-decl.c:5646 c-decl.c:5824 c-decl.c:5936 c-decl.c:6031 +#: c-decl.c:5647 c-decl.c:5825 c-decl.c:5937 c-decl.c:6032 #, gcc-internal-format msgid "ISO C forbids qualified function types" msgstr "" -#: c-decl.c:5713 +#: c-decl.c:5714 #, gcc-internal-format msgid "%qs combined with %<auto%> qualifier for %qE" msgstr "" -#: c-decl.c:5717 +#: c-decl.c:5718 #, gcc-internal-format msgid "%qs combined with %<register%> qualifier for %qE" msgstr "" -#: c-decl.c:5723 +#: c-decl.c:5724 #, gcc-internal-format msgid "%qs specified for auto variable %qE" msgstr "" -#: c-decl.c:5739 +#: c-decl.c:5740 #, gcc-internal-format msgid "%qs specified for parameter %qE" msgstr "" -#: c-decl.c:5742 +#: c-decl.c:5743 #, gcc-internal-format msgid "%qs specified for unnamed parameter" msgstr "" -#: c-decl.c:5748 +#: c-decl.c:5749 #, gcc-internal-format msgid "%qs specified for structure field %qE" msgstr "" -#: c-decl.c:5751 +#: c-decl.c:5752 #, gcc-internal-format msgid "%qs specified for structure field" msgstr "" -#: c-decl.c:5764 +#: c-decl.c:5765 #, gcc-internal-format msgid "alignment specified for typedef %qE" msgstr "" -#: c-decl.c:5766 +#: c-decl.c:5767 #, gcc-internal-format msgid "alignment specified for %<register%> object %qE" msgstr "" -#: c-decl.c:5771 +#: c-decl.c:5772 #, gcc-internal-format msgid "alignment specified for parameter %qE" msgstr "" -#: c-decl.c:5773 +#: c-decl.c:5774 #, gcc-internal-format msgid "alignment specified for unnamed parameter" msgstr "" -#: c-decl.c:5778 +#: c-decl.c:5779 #, gcc-internal-format msgid "alignment specified for bit-field %qE" msgstr "" -#: c-decl.c:5780 +#: c-decl.c:5781 #, gcc-internal-format msgid "alignment specified for unnamed bit-field" msgstr "" -#: c-decl.c:5783 +#: c-decl.c:5784 #, gcc-internal-format msgid "alignment specified for function %qE" msgstr "" -#: c-decl.c:5790 +#: c-decl.c:5791 #, gcc-internal-format msgid "%<_Alignas%> specifiers cannot reduce alignment of %qE" msgstr "" -#: c-decl.c:5793 +#: c-decl.c:5794 #, gcc-internal-format msgid "%<_Alignas%> specifiers cannot reduce alignment of unnamed field" msgstr "" -#: c-decl.c:5832 +#: c-decl.c:5833 #, gcc-internal-format msgid "typedef %q+D declared %<inline%>" msgstr "" -#: c-decl.c:5834 +#: c-decl.c:5835 #, gcc-internal-format msgid "typedef %q+D declared %<_Noreturn%>" msgstr "" -#: c-decl.c:5870 +#: c-decl.c:5871 #, gcc-internal-format msgid "ISO C forbids const or volatile function types" msgstr "" #. C99 6.7.2.1p8 -#: c-decl.c:5880 +#: c-decl.c:5881 #, gcc-internal-format msgid "a member of a structure or union cannot have a variably modified type" msgstr "" -#: c-decl.c:5897 cp/decl.c:8281 +#: c-decl.c:5898 cp/decl.c:8291 #, gcc-internal-format msgid "variable or field %qE declared void" msgstr "" -#: c-decl.c:5928 +#: c-decl.c:5929 #, gcc-internal-format msgid "attributes in parameter array declarator ignored" msgstr "" -#: c-decl.c:5962 +#: c-decl.c:5963 #, gcc-internal-format msgid "parameter %q+D declared %<inline%>" msgstr "" -#: c-decl.c:5964 +#: c-decl.c:5965 #, gcc-internal-format msgid "parameter %q+D declared %<_Noreturn%>" msgstr "" -#: c-decl.c:5977 +#: c-decl.c:5978 #, gcc-internal-format msgid "field %qE declared as a function" msgstr "" -#: c-decl.c:5984 +#: c-decl.c:5985 #, gcc-internal-format msgid "field %qE has incomplete type" msgstr "" -#: c-decl.c:5986 +#: c-decl.c:5987 #, gcc-internal-format msgid "unnamed field has incomplete type" msgstr "" -#: c-decl.c:6003 c-decl.c:6014 c-decl.c:6017 +#: c-decl.c:6004 c-decl.c:6015 c-decl.c:6018 #, gcc-internal-format msgid "invalid storage class for function %qE" msgstr "" -#: c-decl.c:6068 +#: c-decl.c:6069 #, gcc-internal-format msgid "cannot inline function %<main%>" msgstr "" -#: c-decl.c:6070 +#: c-decl.c:6071 #, gcc-internal-format msgid "%<main%> declared %<_Noreturn%>" msgstr "" -#: c-decl.c:6083 +#: c-decl.c:6084 #, gcc-internal-format msgid "ISO C99 does not support %<_Noreturn%>" msgstr "" -#: c-decl.c:6086 +#: c-decl.c:6087 #, gcc-internal-format msgid "ISO C90 does not support %<_Noreturn%>" msgstr "" -#: c-decl.c:6115 +#: c-decl.c:6116 #, gcc-internal-format msgid "variable previously declared %<static%> redeclared %<extern%>" msgstr "" -#: c-decl.c:6125 +#: c-decl.c:6126 #, gcc-internal-format msgid "variable %q+D declared %<inline%>" msgstr "" -#: c-decl.c:6127 +#: c-decl.c:6128 #, gcc-internal-format msgid "variable %q+D declared %<_Noreturn%>" msgstr "" -#: c-decl.c:6162 +#: c-decl.c:6163 #, gcc-internal-format msgid "non-nested function with variably modified type" msgstr "" -#: c-decl.c:6164 +#: c-decl.c:6165 #, gcc-internal-format msgid "object with variably modified type must have no linkage" msgstr "" -#: c-decl.c:6254 c-decl.c:7813 +#: c-decl.c:6255 c-decl.c:7815 #, gcc-internal-format msgid "function declaration isn%'t a prototype" msgstr "" -#: c-decl.c:6263 +#: c-decl.c:6264 #, gcc-internal-format msgid "parameter names (without types) in function declaration" msgstr "" -#: c-decl.c:6301 +#: c-decl.c:6302 #, gcc-internal-format msgid "parameter %u (%q+D) has incomplete type" msgstr "" -#: c-decl.c:6305 +#: c-decl.c:6306 #, gcc-internal-format, gfc-internal-format msgid "parameter %u has incomplete type" msgstr "" -#: c-decl.c:6316 +#: c-decl.c:6317 #, gcc-internal-format msgid "parameter %u (%q+D) has void type" msgstr "" -#: c-decl.c:6320 +#: c-decl.c:6321 #, gcc-internal-format, gfc-internal-format msgid "parameter %u has void type" msgstr "" -#: c-decl.c:6405 +#: c-decl.c:6406 #, gcc-internal-format msgid "%<void%> as only parameter may not be qualified" msgstr "" -#: c-decl.c:6409 c-decl.c:6444 +#: c-decl.c:6410 c-decl.c:6445 #, gcc-internal-format msgid "%<void%> must be the only parameter" msgstr "" -#: c-decl.c:6438 +#: c-decl.c:6439 #, gcc-internal-format msgid "parameter %q+D has just a forward declaration" msgstr "" #. The %s will be one of 'struct', 'union', or 'enum'. -#: c-decl.c:6483 +#: c-decl.c:6484 #, gcc-internal-format msgid "%<%s %E%> declared inside parameter list" msgstr "" #. The %s will be one of 'struct', 'union', or 'enum'. -#: c-decl.c:6487 +#: c-decl.c:6488 #, gcc-internal-format, gfc-internal-format msgid "anonymous %s declared inside parameter list" msgstr "" -#: c-decl.c:6492 +#: c-decl.c:6493 #, gcc-internal-format msgid "" "its scope is only this definition or declaration, which is probably not what " "you want" msgstr "" -#: c-decl.c:6592 +#: c-decl.c:6593 #, gcc-internal-format msgid "enum type defined here" msgstr "" -#: c-decl.c:6598 +#: c-decl.c:6599 #, gcc-internal-format msgid "struct defined here" msgstr "" -#: c-decl.c:6604 +#: c-decl.c:6605 #, gcc-internal-format msgid "union defined here" msgstr "" -#: c-decl.c:6677 +#: c-decl.c:6678 #, gcc-internal-format msgid "redefinition of %<union %E%>" msgstr "" -#: c-decl.c:6679 +#: c-decl.c:6680 #, gcc-internal-format msgid "redefinition of %<struct %E%>" msgstr "" -#: c-decl.c:6688 +#: c-decl.c:6689 #, gcc-internal-format msgid "nested redefinition of %<union %E%>" msgstr "" -#: c-decl.c:6690 +#: c-decl.c:6691 #, gcc-internal-format msgid "nested redefinition of %<struct %E%>" msgstr "" -#: c-decl.c:6722 c-decl.c:7411 +#: c-decl.c:6723 c-decl.c:7412 #, gcc-internal-format msgid "defining type in %qs expression is invalid in C++" msgstr "" -#: c-decl.c:6791 cp/decl.c:4147 +#: c-decl.c:6792 cp/decl.c:4152 #, gcc-internal-format msgid "declaration does not declare anything" msgstr "" -#: c-decl.c:6798 +#: c-decl.c:6799 #, gcc-internal-format msgid "ISO C99 doesn%'t support unnamed structs/unions" msgstr "" -#: c-decl.c:6801 +#: c-decl.c:6802 #, gcc-internal-format msgid "ISO C90 doesn%'t support unnamed structs/unions" msgstr "" -#: c-decl.c:6893 c-decl.c:6912 c-decl.c:6975 +#: c-decl.c:6894 c-decl.c:6913 c-decl.c:6976 #, gcc-internal-format msgid "duplicate member %q+D" msgstr "" -#: c-decl.c:7085 +#: c-decl.c:7086 #, gcc-internal-format msgid "union has no named members" msgstr "" -#: c-decl.c:7087 +#: c-decl.c:7088 #, gcc-internal-format msgid "union has no members" msgstr "" -#: c-decl.c:7092 +#: c-decl.c:7093 #, gcc-internal-format msgid "struct has no named members" msgstr "" -#: c-decl.c:7094 +#: c-decl.c:7095 #, gcc-internal-format msgid "struct has no members" msgstr "" -#: c-decl.c:7157 +#: c-decl.c:7158 #, gcc-internal-format msgid "flexible array member in union" msgstr "" -#: c-decl.c:7163 +#: c-decl.c:7164 #, gcc-internal-format msgid "flexible array member not at end of struct" msgstr "" -#: c-decl.c:7169 +#: c-decl.c:7170 #, gcc-internal-format msgid "flexible array member in otherwise empty struct" msgstr "" -#: c-decl.c:7288 +#: c-decl.c:7289 #, gcc-internal-format msgid "union cannot be made transparent" msgstr "" -#: c-decl.c:7384 +#: c-decl.c:7385 #, gcc-internal-format msgid "nested redefinition of %<enum %E%>" msgstr "" #. This enum is a named one that has been declared already. -#: c-decl.c:7391 +#: c-decl.c:7392 #, gcc-internal-format msgid "redeclaration of %<enum %E%>" msgstr "" -#: c-decl.c:7466 +#: c-decl.c:7467 #, gcc-internal-format msgid "enumeration values exceed range of largest integer" msgstr "" -#: c-decl.c:7483 +#: c-decl.c:7484 #, gcc-internal-format msgid "specified mode too small for enumeral values" msgstr "" -#: c-decl.c:7588 c-decl.c:7604 +#: c-decl.c:7589 c-decl.c:7605 #, gcc-internal-format msgid "enumerator value for %qE is not an integer constant" msgstr "" -#: c-decl.c:7599 +#: c-decl.c:7600 #, gcc-internal-format msgid "enumerator value for %qE is not an integer constant expression" msgstr "" -#: c-decl.c:7623 +#: c-decl.c:7624 #, gcc-internal-format msgid "overflow in enumeration values" msgstr "" -#: c-decl.c:7631 +#: c-decl.c:7632 #, gcc-internal-format msgid "ISO C restricts enumerator values to range of %<int%>" msgstr "" -#: c-decl.c:7715 +#: c-decl.c:7717 #, gcc-internal-format msgid "inline function %qD given attribute noinline" msgstr "" -#: c-decl.c:7733 +#: c-decl.c:7735 #, gcc-internal-format msgid "return type is an incomplete type" msgstr "" -#: c-decl.c:7743 +#: c-decl.c:7745 #, gcc-internal-format msgid "return type defaults to %<int%>" msgstr "" -#: c-decl.c:7821 +#: c-decl.c:7823 #, gcc-internal-format msgid "no previous prototype for %qD" msgstr "" -#: c-decl.c:7830 +#: c-decl.c:7832 #, gcc-internal-format msgid "%qD was used with no prototype before its definition" msgstr "" -#: c-decl.c:7837 +#: c-decl.c:7839 #, gcc-internal-format msgid "no previous declaration for %qD" msgstr "" -#: c-decl.c:7847 +#: c-decl.c:7849 #, gcc-internal-format msgid "%qD was used with no declaration before its definition" msgstr "" -#: c-decl.c:7866 +#: c-decl.c:7868 #, gcc-internal-format msgid "return type of %qD is not %<int%>" msgstr "" -#: c-decl.c:7872 +#: c-decl.c:7874 #, gcc-internal-format msgid "%qD is normally a non-static function" msgstr "" -#: c-decl.c:7909 +#: c-decl.c:7911 #, gcc-internal-format msgid "old-style parameter declarations in prototyped function definition" msgstr "" -#: c-decl.c:7923 +#: c-decl.c:7925 #, gcc-internal-format msgid "traditional C rejects ISO C style function definitions" msgstr "" -#: c-decl.c:7939 +#: c-decl.c:7941 #, gcc-internal-format msgid "parameter name omitted" msgstr "" -#: c-decl.c:7976 +#: c-decl.c:7978 #, gcc-internal-format msgid "old-style function definition" msgstr "" -#: c-decl.c:7985 +#: c-decl.c:7987 #, gcc-internal-format msgid "parameter name missing from parameter list" msgstr "" -#: c-decl.c:8000 +#: c-decl.c:8002 #, gcc-internal-format msgid "%qD declared as a non-parameter" msgstr "" -#: c-decl.c:8006 +#: c-decl.c:8008 #, gcc-internal-format msgid "multiple parameters named %qD" msgstr "" -#: c-decl.c:8015 +#: c-decl.c:8017 #, gcc-internal-format msgid "parameter %qD declared with void type" msgstr "" -#: c-decl.c:8044 c-decl.c:8048 +#: c-decl.c:8046 c-decl.c:8050 #, gcc-internal-format msgid "type of %qD defaults to %<int%>" msgstr "" -#: c-decl.c:8068 +#: c-decl.c:8070 #, gcc-internal-format msgid "parameter %qD has incomplete type" msgstr "" -#: c-decl.c:8075 +#: c-decl.c:8077 #, gcc-internal-format msgid "declaration for parameter %qD but no such parameter" msgstr "" -#: c-decl.c:8127 +#: c-decl.c:8129 #, gcc-internal-format msgid "number of arguments doesn%'t match built-in prototype" msgstr "" -#: c-decl.c:8138 +#: c-decl.c:8140 #, gcc-internal-format msgid "number of arguments doesn%'t match prototype" msgstr "" -#: c-decl.c:8141 c-decl.c:8183 c-decl.c:8197 +#: c-decl.c:8143 c-decl.c:8185 c-decl.c:8199 #, gcc-internal-format msgid "prototype declaration" msgstr "" -#: c-decl.c:8175 +#: c-decl.c:8177 #, gcc-internal-format msgid "promoted argument %qD doesn%'t match built-in prototype" msgstr "" -#: c-decl.c:8180 +#: c-decl.c:8182 #, gcc-internal-format msgid "promoted argument %qD doesn%'t match prototype" msgstr "" -#: c-decl.c:8190 +#: c-decl.c:8192 #, gcc-internal-format msgid "argument %qD doesn%'t match built-in prototype" msgstr "" -#: c-decl.c:8195 +#: c-decl.c:8197 #, gcc-internal-format msgid "argument %qD doesn%'t match prototype" msgstr "" -#: c-decl.c:8378 cp/decl.c:13501 +#: c-decl.c:8380 cp/decl.c:13515 #, gcc-internal-format msgid "no return statement in function returning non-void" msgstr "" -#: c-decl.c:8398 +#: c-decl.c:8400 #, gcc-internal-format msgid "parameter %qD set but not used" msgstr "" @@ -14142,173 +14287,173 @@ msgstr "" #. If we get here, declarations have been used in a for loop without #. the C99 for loop scope. This doesn't make much sense, so don't #. allow it. -#: c-decl.c:8487 +#: c-decl.c:8489 #, gcc-internal-format msgid "%<for%> loop initial declarations are only allowed in C99 mode" msgstr "" -#: c-decl.c:8492 +#: c-decl.c:8494 #, gcc-internal-format msgid "use option -std=c99 or -std=gnu99 to compile your code" msgstr "" -#: c-decl.c:8526 +#: c-decl.c:8528 #, gcc-internal-format msgid "declaration of static variable %qD in %<for%> loop initial declaration" msgstr "" -#: c-decl.c:8530 +#: c-decl.c:8532 #, gcc-internal-format msgid "" "declaration of %<extern%> variable %qD in %<for%> loop initial declaration" msgstr "" -#: c-decl.c:8537 +#: c-decl.c:8539 #, gcc-internal-format msgid "%<struct %E%> declared in %<for%> loop initial declaration" msgstr "" -#: c-decl.c:8542 +#: c-decl.c:8544 #, gcc-internal-format msgid "%<union %E%> declared in %<for%> loop initial declaration" msgstr "" -#: c-decl.c:8546 +#: c-decl.c:8548 #, gcc-internal-format msgid "%<enum %E%> declared in %<for%> loop initial declaration" msgstr "" -#: c-decl.c:8550 +#: c-decl.c:8552 #, gcc-internal-format msgid "declaration of non-variable %qD in %<for%> loop initial declaration" msgstr "" -#: c-decl.c:8819 +#: c-decl.c:8821 #, gcc-internal-format msgid "incompatible address space qualifiers %qs and %qs" msgstr "" -#: c-decl.c:8858 c-decl.c:9169 c-decl.c:9563 +#: c-decl.c:8860 c-decl.c:9171 c-decl.c:9565 #, gcc-internal-format msgid "duplicate %qE" msgstr "" -#: c-decl.c:8884 c-decl.c:9180 c-decl.c:9437 +#: c-decl.c:8886 c-decl.c:9182 c-decl.c:9439 #, gcc-internal-format msgid "two or more data types in declaration specifiers" msgstr "" -#: c-decl.c:8896 cp/parser.c:2512 +#: c-decl.c:8898 cp/parser.c:2512 #, gcc-internal-format msgid "%<long long long%> is too long for GCC" msgstr "" -#: c-decl.c:8909 +#: c-decl.c:8911 #, gcc-internal-format msgid "ISO C90 does not support %<long long%>" msgstr "" -#: c-decl.c:9075 c-parser.c:6639 +#: c-decl.c:9077 c-parser.c:6639 #, gcc-internal-format msgid "ISO C90 does not support complex types" msgstr "" -#: c-decl.c:9114 +#: c-decl.c:9116 #, gcc-internal-format msgid "ISO C does not support saturating types" msgstr "" -#: c-decl.c:9188 +#: c-decl.c:9190 #, gcc-internal-format msgid "%<__int128%> is not supported for this target" msgstr "" -#: c-decl.c:9193 +#: c-decl.c:9195 #, gcc-internal-format msgid "ISO C does not support %<__int128%> type" msgstr "" -#: c-decl.c:9396 +#: c-decl.c:9398 #, gcc-internal-format msgid "ISO C does not support decimal floating point" msgstr "" -#: c-decl.c:9418 c-decl.c:9644 c-parser.c:6232 +#: c-decl.c:9420 c-decl.c:9646 c-parser.c:6232 #, gcc-internal-format msgid "fixed-point types not supported for this target" msgstr "" -#: c-decl.c:9420 +#: c-decl.c:9422 #, gcc-internal-format msgid "ISO C does not support fixed-point types" msgstr "" -#: c-decl.c:9454 +#: c-decl.c:9456 #, gcc-internal-format msgid "C++ lookup of %qD would return a field, not a type" msgstr "" -#: c-decl.c:9467 +#: c-decl.c:9469 #, gcc-internal-format msgid "%qE fails to be a typedef or built in type" msgstr "" -#: c-decl.c:9509 +#: c-decl.c:9511 #, gcc-internal-format msgid "%qE is not at beginning of declaration" msgstr "" -#: c-decl.c:9528 +#: c-decl.c:9530 #, gcc-internal-format msgid "%<__thread%> used with %<auto%>" msgstr "" -#: c-decl.c:9530 +#: c-decl.c:9532 #, gcc-internal-format msgid "%<__thread%> used with %<register%>" msgstr "" -#: c-decl.c:9532 +#: c-decl.c:9534 #, gcc-internal-format msgid "%<__thread%> used with %<typedef%>" msgstr "" -#: c-decl.c:9543 +#: c-decl.c:9545 #, gcc-internal-format msgid "%<__thread%> before %<extern%>" msgstr "" -#: c-decl.c:9552 +#: c-decl.c:9554 #, gcc-internal-format msgid "%<__thread%> before %<static%>" msgstr "" -#: c-decl.c:9568 +#: c-decl.c:9570 #, gcc-internal-format msgid "multiple storage classes in declaration specifiers" msgstr "" -#: c-decl.c:9575 +#: c-decl.c:9577 #, gcc-internal-format msgid "%<__thread%> used with %qE" msgstr "" -#: c-decl.c:9642 +#: c-decl.c:9644 #, gcc-internal-format msgid "%<_Sat%> is used without %<_Fract%> or %<_Accum%>" msgstr "" -#: c-decl.c:9656 +#: c-decl.c:9658 #, gcc-internal-format msgid "ISO C does not support plain %<complex%> meaning %<double complex%>" msgstr "" -#: c-decl.c:9701 c-decl.c:9714 c-decl.c:9740 +#: c-decl.c:9703 c-decl.c:9716 c-decl.c:9742 #, gcc-internal-format msgid "ISO C does not support complex integer types" msgstr "" -#: c-decl.c:9894 toplev.c:484 +#: c-decl.c:9896 toplev.c:484 #, gcc-internal-format msgid "%q+F used but never defined" msgstr "" @@ -14333,7 +14478,7 @@ msgstr "" msgid "unknown type name %qE" msgstr "" -#: c-parser.c:1486 c-parser.c:8563 cp/parser.c:27364 +#: c-parser.c:1486 c-parser.c:8563 cp/parser.c:27365 #, gcc-internal-format msgid "expected declaration specifiers" msgstr "" @@ -14343,7 +14488,7 @@ msgstr "" msgid "expected %<;%>, identifier or %<(%>" msgstr "" -#: c-parser.c:1529 cp/parser.c:23794 cp/parser.c:23868 +#: c-parser.c:1529 cp/parser.c:23795 cp/parser.c:23869 #, gcc-internal-format msgid "prefix attributes are ignored for methods" msgstr "" @@ -14363,7 +14508,7 @@ msgstr "" msgid "data definition has no type or storage class" msgstr "" -#: c-parser.c:1703 cp/parser.c:10466 +#: c-parser.c:1703 cp/parser.c:10467 #, gcc-internal-format msgid "expected %<,%> or %<;%>" msgstr "" @@ -14391,7 +14536,7 @@ msgstr "" msgid "ISO C90 does not support %<_Static_assert%>" msgstr "" -#: c-parser.c:1862 c-parser.c:3383 c-parser.c:8618 cp/parser.c:27235 +#: c-parser.c:1862 c-parser.c:3383 c-parser.c:8618 cp/parser.c:27236 #, gcc-internal-format msgid "expected string literal" msgstr "" @@ -14423,13 +14568,13 @@ msgstr "" #: c-parser.c:7355 c-parser.c:7363 c-parser.c:7392 c-parser.c:7405 #: c-parser.c:7710 c-parser.c:7834 c-parser.c:8261 c-parser.c:8296 #: c-parser.c:8349 c-parser.c:8402 c-parser.c:8418 c-parser.c:8464 -#: c-parser.c:8743 c-parser.c:9818 c-parser.c:10621 cp/parser.c:22255 -#: cp/parser.c:24638 cp/parser.c:24668 cp/parser.c:24738 cp/parser.c:26955 +#: c-parser.c:8743 c-parser.c:9818 c-parser.c:10621 cp/parser.c:22256 +#: cp/parser.c:24639 cp/parser.c:24669 cp/parser.c:24739 cp/parser.c:26956 #, gcc-internal-format msgid "expected identifier" msgstr "" -#: c-parser.c:2295 cp/parser.c:14609 +#: c-parser.c:2295 cp/parser.c:14610 #, gcc-internal-format msgid "comma at end of enumerator list" msgstr "" @@ -14559,7 +14704,7 @@ msgstr "" msgid "expected %<}%> before %<else%>" msgstr "" -#: c-parser.c:4218 cp/parser.c:8987 +#: c-parser.c:4218 cp/parser.c:8988 #, gcc-internal-format msgid "%<else%> without a previous %<if%>" msgstr "" @@ -14589,17 +14734,17 @@ msgstr "" #. c_parser_skip_until_found stops at a closing nesting #. delimiter without consuming it, but here we need to consume #. it to proceed further. -#: c-parser.c:4559 cp/parser.c:8715 +#: c-parser.c:4559 cp/parser.c:8716 #, gcc-internal-format msgid "expected statement" msgstr "" -#: c-parser.c:4657 cp/parser.c:9069 +#: c-parser.c:4657 cp/parser.c:9070 #, gcc-internal-format msgid "suggest braces around empty body in an %<if%> statement" msgstr "" -#: c-parser.c:4685 cp/parser.c:9092 +#: c-parser.c:4685 cp/parser.c:9093 #, gcc-internal-format msgid "suggest braces around empty body in an %<else%> statement" msgstr "" @@ -14759,79 +14904,79 @@ msgstr "" msgid "no type or storage class may be specified here," msgstr "" -#: c-parser.c:8265 c-parser.c:8322 cp/parser.c:24698 +#: c-parser.c:8265 c-parser.c:8322 cp/parser.c:24699 #, gcc-internal-format msgid "unknown property attribute" msgstr "" -#: c-parser.c:8286 cp/parser.c:24658 +#: c-parser.c:8286 cp/parser.c:24659 #, gcc-internal-format msgid "missing %<=%> (after %<getter%> attribute)" msgstr "" -#: c-parser.c:8289 cp/parser.c:24661 +#: c-parser.c:8289 cp/parser.c:24662 #, gcc-internal-format msgid "missing %<=%> (after %<setter%> attribute)" msgstr "" -#: c-parser.c:8303 cp/parser.c:24676 +#: c-parser.c:8303 cp/parser.c:24677 #, gcc-internal-format msgid "the %<setter%> attribute may only be specified once" msgstr "" -#: c-parser.c:8308 cp/parser.c:24682 +#: c-parser.c:8308 cp/parser.c:24683 #, gcc-internal-format msgid "setter name must terminate with %<:%>" msgstr "" -#: c-parser.c:8315 cp/parser.c:24690 +#: c-parser.c:8315 cp/parser.c:24691 #, gcc-internal-format msgid "the %<getter%> attribute may only be specified once" msgstr "" -#: c-parser.c:8501 cp/parser.c:27279 +#: c-parser.c:8501 cp/parser.c:27280 #, gcc-internal-format msgid "%<#pragma omp barrier%> may only be used in compound statements" msgstr "" -#: c-parser.c:8512 cp/parser.c:27294 +#: c-parser.c:8512 cp/parser.c:27295 #, gcc-internal-format msgid "%<#pragma omp flush%> may only be used in compound statements" msgstr "" -#: c-parser.c:8523 cp/parser.c:27310 +#: c-parser.c:8523 cp/parser.c:27311 #, gcc-internal-format msgid "%<#pragma omp taskwait%> may only be used in compound statements" msgstr "" -#: c-parser.c:8534 cp/parser.c:27326 +#: c-parser.c:8534 cp/parser.c:27327 #, gcc-internal-format msgid "%<#pragma omp taskyield%> may only be used in compound statements" msgstr "" -#: c-parser.c:8547 cp/parser.c:27354 +#: c-parser.c:8547 cp/parser.c:27355 #, gcc-internal-format msgid "" "%<#pragma omp section%> may only be used in %<#pragma omp sections%> " "construct" msgstr "" -#: c-parser.c:8553 cp/parser.c:27269 +#: c-parser.c:8553 cp/parser.c:27270 #, gcc-internal-format msgid "%<#pragma GCC pch_preprocess%> must be first" msgstr "" -#: c-parser.c:8718 cp/parser.c:24946 +#: c-parser.c:8718 cp/parser.c:24947 #, gcc-internal-format msgid "too many %qs clauses" msgstr "" -#: c-parser.c:8820 cp/parser.c:25061 +#: c-parser.c:8820 cp/parser.c:25062 #, gcc-internal-format msgid "collapse argument needs positive constant integer expression" msgstr "" -#: c-parser.c:8886 cp/parser.c:25112 +#: c-parser.c:8886 cp/parser.c:25113 #, gcc-internal-format msgid "expected %<none%> or %<shared%>" msgstr "" @@ -14846,44 +14991,44 @@ msgstr "" msgid "%<num_threads%> value must be positive" msgstr "" -#: c-parser.c:9137 cp/parser.c:25331 +#: c-parser.c:9137 cp/parser.c:25332 #, gcc-internal-format msgid "" "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, %<min%> " "or %<max%>" msgstr "" -#: c-parser.c:9226 cp/parser.c:25416 +#: c-parser.c:9226 cp/parser.c:25417 #, gcc-internal-format msgid "schedule %<runtime%> does not take a %<chunk_size%> parameter" msgstr "" -#: c-parser.c:9230 cp/parser.c:25419 +#: c-parser.c:9230 cp/parser.c:25420 #, gcc-internal-format msgid "schedule %<auto%> does not take a %<chunk_size%> parameter" msgstr "" -#: c-parser.c:9248 cp/parser.c:25435 +#: c-parser.c:9248 cp/parser.c:25436 #, gcc-internal-format msgid "invalid schedule kind" msgstr "" -#: c-parser.c:9376 cp/parser.c:25567 +#: c-parser.c:9376 cp/parser.c:25568 #, gcc-internal-format msgid "expected %<#pragma omp%> clause" msgstr "" -#: c-parser.c:9385 cp/parser.c:25576 +#: c-parser.c:9385 cp/parser.c:25577 #, gcc-internal-format msgid "%qs is not valid for %qs" msgstr "" -#: c-parser.c:9677 cp/parser.c:25860 +#: c-parser.c:9677 cp/parser.c:25861 #, gcc-internal-format msgid "invalid form of %<#pragma omp atomic%>" msgstr "" -#: c-parser.c:9717 c-parser.c:9735 cp/parser.c:25891 cp/parser.c:25908 +#: c-parser.c:9717 c-parser.c:9735 cp/parser.c:25892 cp/parser.c:25909 #, gcc-internal-format msgid "invalid operator for %<#pragma omp atomic%>" msgstr "" @@ -14893,7 +15038,7 @@ msgstr "" msgid "expected %<(%> or end of line" msgstr "" -#: c-parser.c:9877 cp/parser.c:26179 +#: c-parser.c:9877 cp/parser.c:26180 #, gcc-internal-format msgid "for statement expected" msgstr "" @@ -14908,12 +15053,12 @@ msgstr "" msgid "not enough perfectly nested loops" msgstr "" -#: c-parser.c:10064 cp/parser.c:26521 +#: c-parser.c:10064 cp/parser.c:26522 #, gcc-internal-format msgid "collapsed loops not perfectly nested" msgstr "" -#: c-parser.c:10102 cp/parser.c:26364 cp/parser.c:26402 cp/pt.c:12677 +#: c-parser.c:10102 cp/parser.c:26365 cp/parser.c:26403 cp/pt.c:12690 #, gcc-internal-format msgid "iteration variable %qD should not be firstprivate" msgstr "" @@ -14938,28 +15083,28 @@ msgstr "" msgid "%<threadprivate%> %qE has incomplete type" msgstr "" -#: c-parser.c:10768 cp/parser.c:27165 +#: c-parser.c:10768 cp/parser.c:27166 #, gcc-internal-format msgid "%<__transaction_cancel%> without transactional memory support enabled" msgstr "" -#: c-parser.c:10774 cp/parser.c:27171 +#: c-parser.c:10774 cp/parser.c:27172 #, gcc-internal-format msgid "%<__transaction_cancel%> within a %<__transaction_relaxed%>" msgstr "" -#: c-parser.c:10783 cp/parser.c:27180 +#: c-parser.c:10783 cp/parser.c:27181 #, gcc-internal-format msgid "" "outer %<__transaction_cancel%> not within outer %<__transaction_atomic%>" msgstr "" -#: c-parser.c:10785 cp/parser.c:27183 +#: c-parser.c:10785 cp/parser.c:27184 #, gcc-internal-format msgid " or a %<transaction_may_cancel_outer%> function" msgstr "" -#: c-parser.c:10791 cp/parser.c:27189 +#: c-parser.c:10791 cp/parser.c:27190 #, gcc-internal-format msgid "%<__transaction_cancel%> not within %<__transaction_atomic%>" msgstr "" @@ -15147,7 +15292,7 @@ msgstr "" msgid "too many arguments to method %qE" msgstr "" -#: c-typeck.c:3036 c-family/c-common.c:8433 c-family/c-common.c:9359 +#: c-typeck.c:3036 c-family/c-common.c:8433 c-family/c-common.c:9361 #, gcc-internal-format msgid "too many arguments to function %qE" msgstr "" @@ -15381,7 +15526,7 @@ msgstr "" msgid "pointer/integer type mismatch in conditional expression" msgstr "" -#: c-typeck.c:4373 tree-cfg.c:3824 +#: c-typeck.c:4373 tree-cfg.c:3821 #, gcc-internal-format msgid "type mismatch in conditional expression" msgstr "" @@ -15801,7 +15946,7 @@ msgstr "" msgid "invalid initializer" msgstr "" -#: c-typeck.c:6652 cp/decl.c:5526 +#: c-typeck.c:6652 cp/decl.c:5536 #, gcc-internal-format msgid "opaque vector types cannot be initialized" msgstr "" @@ -15981,7 +16126,7 @@ msgstr "" msgid "case label is not an integer constant expression" msgstr "" -#: c-typeck.c:8944 cp/parser.c:8818 +#: c-typeck.c:8944 cp/parser.c:8819 #, gcc-internal-format msgid "case label not within a switch statement" msgstr "" @@ -15991,22 +16136,22 @@ msgstr "" msgid "%<default%> label not within a switch statement" msgstr "" -#: c-typeck.c:9029 cp/parser.c:9118 +#: c-typeck.c:9029 cp/parser.c:9119 #, gcc-internal-format msgid "suggest explicit braces to avoid ambiguous %<else%>" msgstr "" -#: c-typeck.c:9138 cp/parser.c:9845 +#: c-typeck.c:9138 cp/parser.c:9846 #, gcc-internal-format msgid "break statement not within loop or switch" msgstr "" -#: c-typeck.c:9140 cp/parser.c:9866 +#: c-typeck.c:9140 cp/parser.c:9867 #, gcc-internal-format msgid "continue statement not within a loop" msgstr "" -#: c-typeck.c:9145 cp/parser.c:9856 +#: c-typeck.c:9145 cp/parser.c:9857 #, gcc-internal-format msgid "break statement used with OpenMP for loop" msgstr "" @@ -16188,7 +16333,7 @@ msgstr "" msgid "C++ requires promoted type, not enum type, in %<va_arg%>" msgstr "" -#: calls.c:2311 +#: calls.c:2316 #, gcc-internal-format msgid "function call has aggregate value" msgstr "" @@ -16655,221 +16800,226 @@ msgstr "" msgid "caller edge frequency %i does not match BB frequency %i" msgstr "" -#: cgraphunit.c:501 +#: cgraphunit.c:507 #, gcc-internal-format, gfc-internal-format msgid "aux field set for edge %s->%s" msgstr "" -#: cgraphunit.c:508 +#: cgraphunit.c:514 #, gcc-internal-format msgid "execution count is negative" msgstr "" -#: cgraphunit.c:513 +#: cgraphunit.c:519 #, gcc-internal-format msgid "externally visible inline clone" msgstr "" -#: cgraphunit.c:518 +#: cgraphunit.c:524 #, gcc-internal-format msgid "inline clone with address taken" msgstr "" -#: cgraphunit.c:523 +#: cgraphunit.c:529 #, gcc-internal-format msgid "inline clone is needed" msgstr "" -#: cgraphunit.c:530 +#: cgraphunit.c:536 #, gcc-internal-format, gfc-internal-format msgid "aux field set for indirect edge from %s" msgstr "" -#: cgraphunit.c:537 +#: cgraphunit.c:543 #, gcc-internal-format, gfc-internal-format msgid "" "An indirect edge from %s is not marked as indirect or has associated " "indirect_info, the corresponding statement is: " msgstr "" -#: cgraphunit.c:554 +#: cgraphunit.c:560 #, gcc-internal-format msgid "inlined_to pointer is wrong" msgstr "" -#: cgraphunit.c:559 +#: cgraphunit.c:565 #, gcc-internal-format msgid "multiple inline callers" msgstr "" -#: cgraphunit.c:566 +#: cgraphunit.c:572 #, gcc-internal-format msgid "inlined_to pointer set for noninline callers" msgstr "" -#: cgraphunit.c:575 +#: cgraphunit.c:581 #, gcc-internal-format msgid "inlined_to pointer is set but no predecessors found" msgstr "" -#: cgraphunit.c:580 +#: cgraphunit.c:586 #, gcc-internal-format msgid "inlined_to pointer refers to itself" msgstr "" -#: cgraphunit.c:586 +#: cgraphunit.c:592 #, gcc-internal-format msgid "node not found in cgraph_hash" msgstr "" -#: cgraphunit.c:598 +#: cgraphunit.c:604 #, gcc-internal-format msgid "node has wrong clone_of" msgstr "" -#: cgraphunit.c:610 +#: cgraphunit.c:616 #, gcc-internal-format msgid "node has wrong clone list" msgstr "" -#: cgraphunit.c:616 +#: cgraphunit.c:622 #, gcc-internal-format msgid "node is in clone list but it is not clone" msgstr "" -#: cgraphunit.c:621 +#: cgraphunit.c:627 #, gcc-internal-format msgid "node has wrong prev_clone pointer" msgstr "" -#: cgraphunit.c:626 +#: cgraphunit.c:632 #, gcc-internal-format msgid "double linked list of clones corrupted" msgstr "" -#: cgraphunit.c:635 +#: cgraphunit.c:641 #, gcc-internal-format msgid "non-DECL_ONE_ONLY node in a same_comdat_group list" msgstr "" -#: cgraphunit.c:640 +#: cgraphunit.c:646 #, gcc-internal-format msgid "node is alone in a comdat group" msgstr "" -#: cgraphunit.c:647 +#: cgraphunit.c:653 #, gcc-internal-format msgid "same_comdat_group is not a circular list" msgstr "" -#: cgraphunit.c:664 +#: cgraphunit.c:670 #, gcc-internal-format msgid "Alias has call edges" msgstr "" -#: cgraphunit.c:670 +#: cgraphunit.c:676 #, gcc-internal-format -msgid "Alias has non-alias refernece" +msgid "Alias has non-alias reference" msgstr "" -#: cgraphunit.c:675 +#: cgraphunit.c:681 #, gcc-internal-format msgid "Alias has more than one alias reference" msgstr "" -#: cgraphunit.c:682 +#: cgraphunit.c:688 #, gcc-internal-format msgid "Analyzed alias has no reference" msgstr "" -#: cgraphunit.c:690 +#: cgraphunit.c:696 #, gcc-internal-format msgid "No edge out of thunk node" msgstr "" -#: cgraphunit.c:695 +#: cgraphunit.c:701 #, gcc-internal-format msgid "More than one edge out of thunk node" msgstr "" -#: cgraphunit.c:700 +#: cgraphunit.c:706 #, gcc-internal-format msgid "Thunk is not supposed to have body" msgstr "" -#: cgraphunit.c:730 +#: cgraphunit.c:736 #, gcc-internal-format msgid "shared call_stmt:" msgstr "" -#: cgraphunit.c:738 +#: cgraphunit.c:744 #, gcc-internal-format msgid "edge points to wrong declaration:" msgstr "" -#: cgraphunit.c:747 +#: cgraphunit.c:753 #, gcc-internal-format msgid "" "an indirect edge with unknown callee corresponding to a call_stmt with a " "known declaration:" msgstr "" -#: cgraphunit.c:757 +#: cgraphunit.c:763 #, gcc-internal-format msgid "missing callgraph edge for call stmt:" msgstr "" -#: cgraphunit.c:773 +#: cgraphunit.c:779 #, gcc-internal-format, gfc-internal-format msgid "edge %s->%s has no corresponding call_stmt" msgstr "" -#: cgraphunit.c:785 +#: cgraphunit.c:791 #, gcc-internal-format, gfc-internal-format msgid "an indirect edge from %s has no corresponding call_stmt" msgstr "" -#: cgraphunit.c:796 +#: cgraphunit.c:802 #, gcc-internal-format msgid "verify_cgraph_node failed" msgstr "" -#: cgraphunit.c:940 +#: cgraphunit.c:851 +#, gcc-internal-format +msgid "function %q+D part of alias cycle" +msgstr "" + +#: cgraphunit.c:956 #, gcc-internal-format msgid "%<weakref%> attribute should be accompanied with an %<alias%> attribute" msgstr "" -#: cgraphunit.c:995 cgraphunit.c:1040 +#: cgraphunit.c:1011 cgraphunit.c:1056 #, gcc-internal-format msgid "%<externally_visible%> attribute have effect only on public objects" msgstr "" -#: cgraphunit.c:1004 +#: cgraphunit.c:1020 #, gcc-internal-format msgid "%<weakref%> attribute ignored because function is defined" msgstr "" -#: cgraphunit.c:1016 +#: cgraphunit.c:1032 #, gcc-internal-format msgid "always_inline function might not be inlinable" msgstr "" -#: cgraphunit.c:1050 +#: cgraphunit.c:1066 #, gcc-internal-format msgid "%<weakref%> attribute ignored because variable is initialized" msgstr "" -#: cgraphunit.c:1404 +#: cgraphunit.c:1420 #, gcc-internal-format msgid "failed to reclaim unneeded function" msgstr "" -#: cgraphunit.c:1430 +#: cgraphunit.c:1447 #, gcc-internal-format -msgid "failed to reclaim unneeded functionin same comdat group" +msgid "failed to reclaim unneeded function in same comdat group" msgstr "" -#: cgraphunit.c:2233 +#: cgraphunit.c:2251 #, gcc-internal-format msgid "nodes with unreleased memory found" msgstr "" @@ -16939,12 +17089,12 @@ msgstr "" msgid "cannot find '%s'" msgstr "" -#: collect2.c:2081 collect2.c:2617 collect2.c:2813 gcc.c:2652 +#: collect2.c:2081 collect2.c:2617 collect2.c:2813 gcc.c:2658 #, gcc-internal-format msgid "pex_init failed: %m" msgstr "" -#: collect2.c:2090 collect2.c:2626 collect2.c:2821 gcc.c:6995 +#: collect2.c:2090 collect2.c:2626 collect2.c:2821 gcc.c:7027 #, gcc-internal-format msgid "%s: %m" msgstr "" @@ -17054,88 +17204,88 @@ msgstr "" msgid "aggregate value used where a fixed-point was expected" msgstr "" -#: coverage.c:188 +#: coverage.c:189 #, gcc-internal-format msgid "%qs is not a gcov data file" msgstr "" -#: coverage.c:199 +#: coverage.c:200 #, gcc-internal-format msgid "%qs is version %q.*s, expected version %q.*s" msgstr "" -#: coverage.c:275 coverage.c:284 +#: coverage.c:276 coverage.c:285 #, gcc-internal-format, gfc-internal-format msgid "Profile data for function %u is corrupted" msgstr "" -#: coverage.c:276 +#: coverage.c:277 #, gcc-internal-format msgid "checksum is (%x,%x) instead of (%x,%x)" msgstr "" -#: coverage.c:285 +#: coverage.c:286 #, gcc-internal-format, gfc-internal-format msgid "number of counters is %d instead of %d" msgstr "" -#: coverage.c:291 +#: coverage.c:292 #, gcc-internal-format, gfc-internal-format msgid "cannot merge separate %s counters for function %u" msgstr "" -#: coverage.c:310 +#: coverage.c:311 #, gcc-internal-format msgid "%qs has overflowed" msgstr "" -#: coverage.c:360 +#: coverage.c:361 #, gcc-internal-format msgid "" "the control flow of function %qE does not match its profile data (counter " "%qs)" msgstr "" -#: coverage.c:364 +#: coverage.c:365 #, gcc-internal-format msgid "" "use -Wno-error=coverage-mismatch to tolerate the mismatch but performance " "may drop if the function is hot" msgstr "" -#: coverage.c:370 +#: coverage.c:371 #, gcc-internal-format msgid "coverage mismatch ignored" msgstr "" -#: coverage.c:372 +#: coverage.c:373 #, gcc-internal-format msgid "execution counts estimated" msgstr "" -#: coverage.c:373 +#: coverage.c:374 #, gcc-internal-format msgid "execution counts assumed to be zero" msgstr "" -#: coverage.c:376 +#: coverage.c:377 #, gcc-internal-format msgid "this can result in poorly optimized code" msgstr "" -#: coverage.c:384 +#: coverage.c:385 #, gcc-internal-format msgid "" "source locations for function %qE have changed, the profile data may be out " "of date" msgstr "" -#: coverage.c:602 +#: coverage.c:603 #, gcc-internal-format msgid "error writing %qs" msgstr "" -#: coverage.c:1098 +#: coverage.c:1111 #, gcc-internal-format, gfc-internal-format msgid "cannot open %s" msgstr "" @@ -17212,27 +17362,27 @@ msgid "" "cfi_personality directive" msgstr "" -#: dwarf2out.c:10672 +#: dwarf2out.c:10704 #, gcc-internal-format, gfc-internal-format msgid "non-delegitimized UNSPEC %s (%d) found in variable location" msgstr "" -#: emit-rtl.c:2541 +#: emit-rtl.c:2556 #, gcc-internal-format msgid "invalid rtl sharing found in the insn" msgstr "" -#: emit-rtl.c:2543 +#: emit-rtl.c:2558 #, gcc-internal-format msgid "shared rtx" msgstr "" -#: emit-rtl.c:2545 +#: emit-rtl.c:2560 #, gcc-internal-format msgid "internal consistency failure" msgstr "" -#: emit-rtl.c:3676 +#: emit-rtl.c:3691 #, gcc-internal-format msgid "ICE: emit_insn used where emit_jump_insn needed:\n" msgstr "" @@ -17333,17 +17483,17 @@ msgid "" "code may fail at runtime if the hardware does not allow this access" msgstr "" -#: expr.c:7479 +#: expr.c:7523 #, gcc-internal-format msgid "local frame unavailable (naked function?)" msgstr "" -#: expr.c:9951 +#: expr.c:9996 #, gcc-internal-format msgid "%Kcall to %qs declared with attribute error: %s" msgstr "" -#: expr.c:9958 +#: expr.c:10003 #, gcc-internal-format msgid "%Kcall to %qs declared with attribute warning: %s" msgstr "" @@ -17358,12 +17508,12 @@ msgstr "" msgid "the frame size of %wd bytes is larger than %wd bytes" msgstr "" -#: final.c:4430 toplev.c:1421 tree-optimize.c:171 +#: final.c:4430 toplev.c:1420 tree-optimize.c:173 #, gcc-internal-format msgid "could not open final insn dump file %qs: %m" msgstr "" -#: final.c:4483 tree-optimize.c:187 +#: final.c:4483 tree-optimize.c:189 #, gcc-internal-format msgid "could not close final insn dump file %qs: %m" msgstr "" @@ -17423,7 +17573,7 @@ msgid "" "comparison" msgstr "" -#: fold-const.c:14205 +#: fold-const.c:14219 #, gcc-internal-format msgid "fold check: original tree changed by fold" msgstr "" @@ -17433,7 +17583,7 @@ msgstr "" msgid "total size of local objects too large" msgstr "" -#: function.c:1732 gimplify.c:5155 +#: function.c:1732 gimplify.c:5156 #, gcc-internal-format msgid "impossible constraint in %<asm%>" msgstr "" @@ -17458,132 +17608,132 @@ msgstr "" msgid "unused parameter %q+D" msgstr "" -#: gcc.c:1726 gcc.c:1746 +#: gcc.c:1732 gcc.c:1752 #, gcc-internal-format, gfc-internal-format msgid "specs %%include syntax malformed after %ld characters" msgstr "" -#: gcc.c:1772 gcc.c:1781 gcc.c:1791 gcc.c:1801 +#: gcc.c:1778 gcc.c:1787 gcc.c:1797 gcc.c:1807 #, gcc-internal-format, gfc-internal-format msgid "specs %%rename syntax malformed after %ld characters" msgstr "" -#: gcc.c:1811 +#: gcc.c:1817 #, gcc-internal-format, gfc-internal-format msgid "specs %s spec was not found to be renamed" msgstr "" -#: gcc.c:1818 +#: gcc.c:1824 #, gcc-internal-format msgid "%s: attempt to rename spec %qs to already defined spec %qs" msgstr "" -#: gcc.c:1839 +#: gcc.c:1845 #, gcc-internal-format, gfc-internal-format msgid "specs unknown %% command after %ld characters" msgstr "" -#: gcc.c:1850 gcc.c:1863 +#: gcc.c:1856 gcc.c:1869 #, gcc-internal-format, gfc-internal-format msgid "specs file malformed after %ld characters" msgstr "" -#: gcc.c:1915 +#: gcc.c:1921 #, gcc-internal-format msgid "spec file has no spec for linking" msgstr "" -#: gcc.c:2444 +#: gcc.c:2450 #, gcc-internal-format msgid "system path %qs is not absolute" msgstr "" -#: gcc.c:2529 +#: gcc.c:2535 #, gcc-internal-format msgid "-pipe not supported" msgstr "" -#: gcc.c:2691 +#: gcc.c:2697 #, gcc-internal-format msgid "failed to get exit status: %m" msgstr "" -#: gcc.c:2697 +#: gcc.c:2703 #, gcc-internal-format msgid "failed to get process times: %m" msgstr "" -#: gcc.c:2723 +#: gcc.c:2729 #, gcc-internal-format, gfc-internal-format msgid "%s (program %s)" msgstr "" -#: gcc.c:3142 opts-common.c:986 opts-common.c:1058 +#: gcc.c:3148 opts-common.c:986 opts-common.c:1058 #, gcc-internal-format msgid "unrecognized command line option %qs" msgstr "" -#: gcc.c:3395 +#: gcc.c:3401 #, gcc-internal-format msgid "%qs is an unknown -save-temps option" msgstr "" -#: gcc.c:3856 +#: gcc.c:3862 #, gcc-internal-format msgid "-pipe ignored because -save-temps specified" msgstr "" -#: gcc.c:3942 +#: gcc.c:3948 #, gcc-internal-format msgid "%<-x %s%> after last input file has no effect" msgstr "" -#: gcc.c:4109 +#: gcc.c:4115 #, gcc-internal-format msgid "unable to locate default linker script %qs in the library search paths" msgstr "" -#: gcc.c:4312 +#: gcc.c:4318 #, gcc-internal-format msgid "switch %qs does not start with %<-%>" msgstr "" -#: gcc.c:4315 +#: gcc.c:4321 #, gcc-internal-format msgid "spec-generated switch is just %<-%>" msgstr "" -#: gcc.c:4406 +#: gcc.c:4412 #, gcc-internal-format, gfc-internal-format msgid "could not open temporary response file %s" msgstr "" -#: gcc.c:4412 +#: gcc.c:4418 #, gcc-internal-format, gfc-internal-format msgid "could not write to temporary response file %s" msgstr "" -#: gcc.c:4418 +#: gcc.c:4424 #, gcc-internal-format, gfc-internal-format msgid "could not close temporary response file %s" msgstr "" -#: gcc.c:4541 +#: gcc.c:4547 #, gcc-internal-format msgid "spec %qs invalid" msgstr "" -#: gcc.c:4690 +#: gcc.c:4696 #, gcc-internal-format msgid "spec %qs has invalid %<%%0%c%>" msgstr "" -#: gcc.c:5000 +#: gcc.c:5006 #, gcc-internal-format msgid "spec %qs has invalid %<%%W%c%>" msgstr "" -#: gcc.c:5022 +#: gcc.c:5028 #, gcc-internal-format msgid "spec %qs has invalid %<%%x%c%>" msgstr "" @@ -17591,210 +17741,210 @@ msgstr "" #. Catch the case where a spec string contains something like #. '%{foo:%*}'. i.e. there is no * in the pattern on the left #. hand side of the :. -#: gcc.c:5210 +#: gcc.c:5216 #, gcc-internal-format msgid "spec failure: %<%%*%> has not been initialized by pattern match" msgstr "" -#: gcc.c:5253 +#: gcc.c:5259 #, gcc-internal-format msgid "spec failure: unrecognized spec option %qc" msgstr "" -#: gcc.c:5313 +#: gcc.c:5319 #, gcc-internal-format msgid "unknown spec function %qs" msgstr "" -#: gcc.c:5331 +#: gcc.c:5337 #, gcc-internal-format msgid "error in args to spec function %qs" msgstr "" -#: gcc.c:5379 +#: gcc.c:5385 #, gcc-internal-format msgid "malformed spec function name" msgstr "" #. ) -#: gcc.c:5382 +#: gcc.c:5388 #, gcc-internal-format msgid "no arguments for spec function" msgstr "" -#: gcc.c:5401 +#: gcc.c:5407 #, gcc-internal-format msgid "malformed spec function arguments" msgstr "" -#: gcc.c:5647 +#: gcc.c:5668 #, gcc-internal-format msgid "braced spec %qs is invalid at %qc" msgstr "" -#: gcc.c:5735 +#: gcc.c:5756 #, gcc-internal-format msgid "braced spec body %qs is invalid" msgstr "" -#: gcc.c:5984 +#: gcc.c:6005 #, gcc-internal-format, gfc-internal-format msgid "%s: could not determine length of compare-debug file %s" msgstr "" -#: gcc.c:5995 +#: gcc.c:6016 #, gcc-internal-format, gfc-internal-format msgid "%s: -fcompare-debug failure (length)" msgstr "" -#: gcc.c:6005 gcc.c:6046 +#: gcc.c:6026 gcc.c:6067 #, gcc-internal-format, gfc-internal-format msgid "%s: could not open compare-debug file %s" msgstr "" -#: gcc.c:6025 gcc.c:6062 +#: gcc.c:6046 gcc.c:6083 #, gcc-internal-format, gfc-internal-format msgid "%s: -fcompare-debug failure" msgstr "" -#: gcc.c:6140 +#: gcc.c:6161 #, gcc-internal-format msgid "atexit failed" msgstr "" -#: gcc.c:6281 +#: gcc.c:6302 #, gcc-internal-format msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC" msgstr "" -#: gcc.c:6304 +#: gcc.c:6325 #, gcc-internal-format msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC" msgstr "" -#: gcc.c:6466 +#: gcc.c:6491 #, gcc-internal-format msgid "unrecognized option %<-%s%>" msgstr "" #. The error status indicates that only one set of fixed #. headers should be built. -#: gcc.c:6543 +#: gcc.c:6568 #, gcc-internal-format msgid "not configured with sysroot headers suffix" msgstr "" -#: gcc.c:6626 +#: gcc.c:6651 #, gcc-internal-format msgid "no input files" msgstr "" -#: gcc.c:6675 +#: gcc.c:6700 #, gcc-internal-format msgid "cannot specify -o with -c, -S or -E with multiple files" msgstr "" -#: gcc.c:6705 +#: gcc.c:6730 #, gcc-internal-format, gfc-internal-format msgid "%s: %s compiler not installed on this system" msgstr "" -#: gcc.c:6727 +#: gcc.c:6752 #, gcc-internal-format msgid "recompiling with -fcompare-debug" msgstr "" -#: gcc.c:6743 +#: gcc.c:6768 #, gcc-internal-format msgid "during -fcompare-debug recompilation" msgstr "" -#: gcc.c:6752 +#: gcc.c:6777 #, gcc-internal-format msgid "comparing final insns dumps" msgstr "" -#: gcc.c:6853 +#: gcc.c:6883 #, gcc-internal-format, gfc-internal-format msgid "-fuse-linker-plugin, but %s not found" msgstr "" -#: gcc.c:6883 +#: gcc.c:6915 #, gcc-internal-format, gfc-internal-format msgid "%s: linker input file unused because linking not done" msgstr "" -#: gcc.c:6924 +#: gcc.c:6956 #, gcc-internal-format, gfc-internal-format msgid "language %s not recognized" msgstr "" -#: gcc.c:7150 +#: gcc.c:7182 #, gcc-internal-format msgid "multilib spec %qs is invalid" msgstr "" -#: gcc.c:7342 +#: gcc.c:7374 #, gcc-internal-format msgid "multilib exclusions %qs is invalid" msgstr "" -#: gcc.c:7400 gcc.c:7541 +#: gcc.c:7432 gcc.c:7573 #, gcc-internal-format msgid "multilib select %qs is invalid" msgstr "" -#: gcc.c:7579 +#: gcc.c:7611 #, gcc-internal-format msgid "multilib exclusion %qs is invalid" msgstr "" -#: gcc.c:7785 +#: gcc.c:7817 #, gcc-internal-format msgid "environment variable %qs not defined" msgstr "" -#: gcc.c:7897 gcc.c:7902 +#: gcc.c:7929 gcc.c:7934 #, gcc-internal-format msgid "invalid version number %qs" msgstr "" -#: gcc.c:7945 +#: gcc.c:7977 #, gcc-internal-format, gfc-internal-format msgid "too few arguments to %%:version-compare" msgstr "" -#: gcc.c:7951 +#: gcc.c:7983 #, gcc-internal-format, gfc-internal-format msgid "too many arguments to %%:version-compare" msgstr "" -#: gcc.c:7992 +#: gcc.c:8024 #, gcc-internal-format msgid "unknown operator %qs in %%:version-compare" msgstr "" -#: gcc.c:8115 +#: gcc.c:8147 #, gcc-internal-format, gfc-internal-format msgid "too many arguments to %%:compare-debug-dump-opt" msgstr "" -#: gcc.c:8183 +#: gcc.c:8215 #, gcc-internal-format, gfc-internal-format msgid "too many arguments to %%:compare-debug-self-opt" msgstr "" -#: gcc.c:8218 +#: gcc.c:8250 #, gcc-internal-format, gfc-internal-format msgid "too few arguments to %%:compare-debug-auxbase-opt" msgstr "" -#: gcc.c:8221 +#: gcc.c:8253 #, gcc-internal-format, gfc-internal-format msgid "too many arguments to %%:compare-debug-auxbase-opt" msgstr "" -#: gcc.c:8228 +#: gcc.c:8260 #, gcc-internal-format, gfc-internal-format msgid "argument to %%:compare-debug-auxbase-opt does not end in .gk" msgstr "" @@ -17877,67 +18027,67 @@ msgstr "" msgid "gimple check: expected %s(%s), have %s(%s) in %s, at %s:%d" msgstr "" -#: gimplify.c:2510 +#: gimplify.c:2511 #, gcc-internal-format msgid "using result of function returning %<void%>" msgstr "" -#: gimplify.c:5040 +#: gimplify.c:5041 #, gcc-internal-format, gfc-internal-format msgid "invalid lvalue in asm output %d" msgstr "" -#: gimplify.c:5156 +#: gimplify.c:5157 #, gcc-internal-format, gfc-internal-format msgid "non-memory input %d must stay in memory" msgstr "" -#: gimplify.c:5178 +#: gimplify.c:5179 #, gcc-internal-format, gfc-internal-format msgid "memory input %d is not directly addressable" msgstr "" -#: gimplify.c:5673 +#: gimplify.c:5674 #, gcc-internal-format msgid "threadprivate variable %qE used in untied task" msgstr "" -#: gimplify.c:5675 gimplify.c:5737 +#: gimplify.c:5676 gimplify.c:5738 #, gcc-internal-format msgid "enclosing task" msgstr "" -#: gimplify.c:5734 +#: gimplify.c:5735 #, gcc-internal-format msgid "%qE not specified in enclosing parallel" msgstr "" -#: gimplify.c:5739 +#: gimplify.c:5740 #, gcc-internal-format msgid "enclosing parallel" msgstr "" -#: gimplify.c:5844 +#: gimplify.c:5845 #, gcc-internal-format msgid "iteration variable %qE should be private" msgstr "" -#: gimplify.c:5858 +#: gimplify.c:5859 #, gcc-internal-format msgid "iteration variable %qE should not be firstprivate" msgstr "" -#: gimplify.c:5861 +#: gimplify.c:5862 #, gcc-internal-format msgid "iteration variable %qE should not be reduction" msgstr "" -#: gimplify.c:6024 +#: gimplify.c:6025 #, gcc-internal-format msgid "%s variable %qE is private in outer context" msgstr "" -#: gimplify.c:7778 +#: gimplify.c:7787 #, gcc-internal-format msgid "gimplification failed" msgstr "" @@ -17952,7 +18102,7 @@ msgstr "" msgid "could not open Go dump file %qs: %m" msgstr "" -#: graph.c:411 toplev.c:1531 java/jcf-parse.c:1751 java/jcf-parse.c:1889 +#: graph.c:411 toplev.c:1530 java/jcf-parse.c:1751 java/jcf-parse.c:1889 #: objc/objc-act.c:449 #, gcc-internal-format msgid "can%'t open %s: %m" @@ -18189,18 +18339,18 @@ msgid "" "critical region may not be nested inside a critical region with the same name" msgstr "" -#: omp-low.c:7011 cp/decl.c:2880 cp/parser.c:9853 cp/parser.c:9873 +#: omp-low.c:7014 cp/decl.c:2885 cp/parser.c:9854 cp/parser.c:9874 #, gcc-internal-format msgid "invalid exit from OpenMP structured block" msgstr "" -#: omp-low.c:7013 omp-low.c:7018 +#: omp-low.c:7016 omp-low.c:7021 #, gcc-internal-format msgid "invalid entry to OpenMP structured block" msgstr "" #. Otherwise, be vague and lazy, but efficient. -#: omp-low.c:7021 +#: omp-low.c:7024 #, gcc-internal-format msgid "invalid branch to/from an OpenMP structured block" msgstr "" @@ -18445,7 +18595,7 @@ msgstr "" #: passes.c:712 #, gcc-internal-format, gfc-internal-format -msgid "unknown pass %s specified in -fdisble" +msgid "unknown pass %s specified in -fdisable" msgstr "" #: passes.c:739 passes.c:829 @@ -18656,49 +18806,49 @@ msgstr "" msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" msgstr "" -#: reginfo.c:820 +#: reginfo.c:822 #, gcc-internal-format msgid "can%'t use %qs as a call-saved register" msgstr "" -#: reginfo.c:824 +#: reginfo.c:826 #, gcc-internal-format msgid "can%'t use %qs as a call-used register" msgstr "" -#: reginfo.c:836 +#: reginfo.c:838 #, gcc-internal-format msgid "can%'t use %qs as a fixed register" msgstr "" -#: reginfo.c:862 config/ia64/ia64.c:5749 config/ia64/ia64.c:5756 -#: config/pa/pa.c:424 config/pa/pa.c:431 config/sh/sh.c:8744 -#: config/sh/sh.c:8751 config/spu/spu.c:5198 config/spu/spu.c:5205 +#: reginfo.c:864 config/ia64/ia64.c:5749 config/ia64/ia64.c:5756 +#: config/pa/pa.c:424 config/pa/pa.c:431 config/sh/sh.c:8769 +#: config/sh/sh.c:8776 config/spu/spu.c:5198 config/spu/spu.c:5205 #, gcc-internal-format, gfc-internal-format msgid "unknown register name: %s" msgstr "" -#: reginfo.c:875 +#: reginfo.c:877 #, gcc-internal-format msgid "stack register used for global register variable" msgstr "" -#: reginfo.c:881 +#: reginfo.c:883 #, gcc-internal-format msgid "global register variable follows a function definition" msgstr "" -#: reginfo.c:886 +#: reginfo.c:888 #, gcc-internal-format msgid "register of %qD used for multiple global register variables" msgstr "" -#: reginfo.c:889 +#: reginfo.c:891 #, gcc-internal-format msgid "conflicts with %qD" msgstr "" -#: reginfo.c:894 +#: reginfo.c:896 #, gcc-internal-format msgid "call-clobbered register used for global register variable" msgstr "" @@ -18948,7 +19098,7 @@ msgstr "" msgid "packed attribute is unnecessary for %q+D" msgstr "" -#: stor-layout.c:1153 +#: stor-layout.c:1152 #, gcc-internal-format msgid "padding struct to align %q+D" msgstr "" @@ -18993,49 +19143,49 @@ msgstr "" msgid "__builtin_saveregs not supported by this target" msgstr "" -#: targhooks.c:806 +#: targhooks.c:807 #, gcc-internal-format msgid "nested functions not supported on this target" msgstr "" -#: targhooks.c:819 +#: targhooks.c:820 #, gcc-internal-format msgid "nested function trampolines not supported on this target" msgstr "" -#: targhooks.c:1153 +#: targhooks.c:1154 #, gcc-internal-format msgid "target attribute is not supported on this machine" msgstr "" -#: targhooks.c:1163 +#: targhooks.c:1164 #, gcc-internal-format msgid "#pragma GCC target is not supported for this machine" msgstr "" -#: tlink.c:481 +#: tlink.c:492 #, gcc-internal-format msgid "removing .rpo file: %m" msgstr "" -#: tlink.c:483 +#: tlink.c:494 #, gcc-internal-format msgid "renaming .rpo file: %m" msgstr "" -#: tlink.c:487 +#: tlink.c:498 #, gcc-internal-format, gfc-internal-format msgid "repository file '%s' does not contain command-line arguments" msgstr "" -#: tlink.c:735 +#: tlink.c:624 #, gcc-internal-format, gfc-internal-format msgid "" "'%s' was assigned to '%s', but was not defined during recompilation, or vice " "versa" msgstr "" -#: tlink.c:805 +#: tlink.c:859 #, gcc-internal-format, gfc-internal-format msgid "ld returned %d exit status" msgstr "" @@ -19080,118 +19230,118 @@ msgstr "" msgid "this target does not support %qs" msgstr "" -#: toplev.c:1322 +#: toplev.c:1321 #, gcc-internal-format msgid "" "Graphite loop optimizations cannot be used (-fgraphite, -fgraphite-identity, " -"-floop-block, -floop-flatten, -floop-interchange, -floop-strip-mine, -floop-" -"parallelize-all, and -ftree-loop-linear)" +"-floop-block, -floop-interchange, -floop-strip-mine, -floop-parallelize-all, " +"and -ftree-loop-linear)" msgstr "" -#: toplev.c:1329 +#: toplev.c:1328 #, gcc-internal-format msgid "mudflap cannot be used together with link-time optimization" msgstr "" -#: toplev.c:1338 +#: toplev.c:1337 #, gcc-internal-format msgid "" "-fstrict-volatile-bitfields disabled; it is incompatible with ABI versions < " "2" msgstr "" -#: toplev.c:1366 +#: toplev.c:1365 #, gcc-internal-format msgid "instruction scheduling not supported on this target machine" msgstr "" -#: toplev.c:1370 +#: toplev.c:1369 #, gcc-internal-format msgid "this target machine does not have delayed branches" msgstr "" -#: toplev.c:1384 +#: toplev.c:1383 #, gcc-internal-format, gfc-internal-format msgid "-f%sleading-underscore not supported on this target machine" msgstr "" -#: toplev.c:1427 +#: toplev.c:1426 #, gcc-internal-format msgid "could not close zeroed insn dump file %qs: %m" msgstr "" -#: toplev.c:1466 +#: toplev.c:1465 #, gcc-internal-format, gfc-internal-format msgid "target system does not support the \"%s\" debug format" msgstr "" -#: toplev.c:1478 +#: toplev.c:1477 #, gcc-internal-format msgid "variable tracking requested, but useless unless producing debug info" msgstr "" -#: toplev.c:1481 +#: toplev.c:1480 #, gcc-internal-format msgid "variable tracking requested, but not supported by this debug format" msgstr "" -#: toplev.c:1515 +#: toplev.c:1514 #, gcc-internal-format msgid "var-tracking-assignments changes selective scheduling" msgstr "" -#: toplev.c:1538 +#: toplev.c:1537 #, gcc-internal-format msgid "-ffunction-sections not supported for this target" msgstr "" -#: toplev.c:1543 +#: toplev.c:1542 #, gcc-internal-format msgid "-fdata-sections not supported for this target" msgstr "" -#: toplev.c:1550 +#: toplev.c:1549 #, gcc-internal-format msgid "-ffunction-sections disabled; it makes profiling impossible" msgstr "" -#: toplev.c:1557 +#: toplev.c:1556 #, gcc-internal-format msgid "-fprefetch-loop-arrays not supported for this target" msgstr "" -#: toplev.c:1563 +#: toplev.c:1562 #, gcc-internal-format msgid "" "-fprefetch-loop-arrays not supported for this target (try -march switches)" msgstr "" -#: toplev.c:1572 +#: toplev.c:1571 #, gcc-internal-format msgid "-fprefetch-loop-arrays is not supported with -Os" msgstr "" -#: toplev.c:1583 +#: toplev.c:1582 #, gcc-internal-format msgid "-fassociative-math disabled; other options take precedence" msgstr "" -#: toplev.c:1599 +#: toplev.c:1598 #, gcc-internal-format msgid "-fstack-protector not supported for this target" msgstr "" -#: toplev.c:1612 +#: toplev.c:1611 #, gcc-internal-format msgid "unwind tables currently require a frame pointer for correctness" msgstr "" -#: toplev.c:1873 +#: toplev.c:1872 #, gcc-internal-format msgid "error writing to %s: %m" msgstr "" -#: toplev.c:1875 java/jcf-parse.c:1770 +#: toplev.c:1874 java/jcf-parse.c:1770 #, gcc-internal-format msgid "error closing %s: %m" msgstr "" @@ -19208,7 +19358,7 @@ msgid "" "or %<transaction_may_cancel_outer%>" msgstr "" -#: trans-mem.c:664 trans-mem.c:4137 +#: trans-mem.c:664 trans-mem.c:4189 #, gcc-internal-format msgid "unsafe function call %qD within atomic transaction" msgstr "" @@ -19223,7 +19373,7 @@ msgstr "" msgid "unsafe indirect function call within atomic transaction" msgstr "" -#: trans-mem.c:682 trans-mem.c:4070 +#: trans-mem.c:682 trans-mem.c:4122 #, gcc-internal-format msgid "unsafe function call %qD within %<transaction_safe%> function" msgstr "" @@ -19238,7 +19388,7 @@ msgstr "" msgid "unsafe indirect function call within %<transaction_safe%> function" msgstr "" -#: trans-mem.c:707 trans-mem.c:4109 +#: trans-mem.c:707 trans-mem.c:4161 #, gcc-internal-format msgid "asm not allowed in atomic transaction" msgstr "" @@ -19273,6 +19423,11 @@ msgstr "" msgid "outer transaction in %<transaction_safe%> function" msgstr "" +#: trans-mem.c:3787 +#, gcc-internal-format +msgid "%Kasm not allowed in %<transaction_safe%> function" +msgstr "" + #: tree-cfg.c:2616 #, gcc-internal-format msgid "constant not recomputed when ADDR_EXPR changed" @@ -19293,7 +19448,7 @@ msgstr "" msgid "SSA name in freelist but still referenced" msgstr "" -#: tree-cfg.c:2667 tree-cfg.c:3953 +#: tree-cfg.c:2667 tree-cfg.c:3950 #, gcc-internal-format msgid "INDIRECT_REF in gimple IL" msgstr "" @@ -19538,349 +19693,349 @@ msgstr "" msgid "invalid operand in unary operation" msgstr "" -#: tree-cfg.c:3369 +#: tree-cfg.c:3366 #, gcc-internal-format msgid "invalid types in nop conversion" msgstr "" -#: tree-cfg.c:3384 +#: tree-cfg.c:3381 #, gcc-internal-format msgid "invalid types in address space conversion" msgstr "" -#: tree-cfg.c:3398 +#: tree-cfg.c:3395 #, gcc-internal-format msgid "invalid types in fixed-point conversion" msgstr "" -#: tree-cfg.c:3413 +#: tree-cfg.c:3410 #, gcc-internal-format msgid "invalid types in conversion to floating point" msgstr "" -#: tree-cfg.c:3428 +#: tree-cfg.c:3425 #, gcc-internal-format msgid "invalid types in conversion to integer" msgstr "" -#: tree-cfg.c:3462 +#: tree-cfg.c:3459 #, gcc-internal-format msgid "non-trivial conversion in unary operation" msgstr "" -#: tree-cfg.c:3487 +#: tree-cfg.c:3484 #, gcc-internal-format msgid "non-register as LHS of binary operation" msgstr "" -#: tree-cfg.c:3494 +#: tree-cfg.c:3491 #, gcc-internal-format msgid "invalid operands in binary operation" msgstr "" -#: tree-cfg.c:3509 +#: tree-cfg.c:3506 #, gcc-internal-format msgid "type mismatch in complex expression" msgstr "" -#: tree-cfg.c:3538 +#: tree-cfg.c:3535 #, gcc-internal-format msgid "type mismatch in shift expression" msgstr "" -#: tree-cfg.c:3561 +#: tree-cfg.c:3558 #, gcc-internal-format msgid "type mismatch in vector shift expression" msgstr "" -#: tree-cfg.c:3574 +#: tree-cfg.c:3571 #, gcc-internal-format msgid "non-element sized vector shift of floating point vector" msgstr "" -#: tree-cfg.c:3588 tree-cfg.c:3609 +#: tree-cfg.c:3585 tree-cfg.c:3606 #, gcc-internal-format msgid "type mismatch in widening vector shift expression" msgstr "" -#: tree-cfg.c:3631 +#: tree-cfg.c:3628 #, gcc-internal-format msgid "invalid non-vector operands to vector valued plus" msgstr "" -#: tree-cfg.c:3651 +#: tree-cfg.c:3648 #, gcc-internal-format msgid "invalid (pointer) operands to plus/minus" msgstr "" -#: tree-cfg.c:3666 +#: tree-cfg.c:3663 #, gcc-internal-format msgid "type mismatch in pointer plus expression" msgstr "" -#: tree-cfg.c:3743 +#: tree-cfg.c:3740 #, gcc-internal-format msgid "type mismatch in binary expression" msgstr "" -#: tree-cfg.c:3771 +#: tree-cfg.c:3768 #, gcc-internal-format msgid "non-register as LHS of ternary operation" msgstr "" -#: tree-cfg.c:3780 +#: tree-cfg.c:3777 #, gcc-internal-format msgid "invalid operands in ternary operation" msgstr "" -#: tree-cfg.c:3796 +#: tree-cfg.c:3793 #, gcc-internal-format msgid "type mismatch in widening multiply-accumulate expression" msgstr "" -#: tree-cfg.c:3810 +#: tree-cfg.c:3807 #, gcc-internal-format msgid "type mismatch in fused multiply-add expression" msgstr "" -#: tree-cfg.c:3836 +#: tree-cfg.c:3833 #, gcc-internal-format msgid "type mismatch in vector permute expression" msgstr "" -#: tree-cfg.c:3848 +#: tree-cfg.c:3845 #, gcc-internal-format msgid "vector types expected in vector permute expression" msgstr "" -#: tree-cfg.c:3862 +#: tree-cfg.c:3859 #, gcc-internal-format msgid "" "vectors with different element number found in vector permute expression" msgstr "" -#: tree-cfg.c:3875 +#: tree-cfg.c:3872 #, gcc-internal-format msgid "invalid mask type in vector permute expression" msgstr "" -#: tree-cfg.c:3911 +#: tree-cfg.c:3908 #, gcc-internal-format msgid "non-trivial conversion at assignment" msgstr "" -#: tree-cfg.c:3928 +#: tree-cfg.c:3925 #, gcc-internal-format msgid "invalid operand in unary expression" msgstr "" -#: tree-cfg.c:3942 +#: tree-cfg.c:3939 #, gcc-internal-format msgid "type mismatch in address expression" msgstr "" -#: tree-cfg.c:3968 tree-cfg.c:3994 +#: tree-cfg.c:3965 tree-cfg.c:3991 #, gcc-internal-format msgid "invalid rhs for gimple memory store" msgstr "" -#: tree-cfg.c:4056 +#: tree-cfg.c:4053 #, gcc-internal-format msgid "invalid operand in return statement" msgstr "" -#: tree-cfg.c:4070 +#: tree-cfg.c:4067 #, gcc-internal-format msgid "invalid conversion in return statement" msgstr "" -#: tree-cfg.c:4094 +#: tree-cfg.c:4091 #, gcc-internal-format msgid "goto destination is neither a label nor a pointer" msgstr "" -#: tree-cfg.c:4109 +#: tree-cfg.c:4106 #, gcc-internal-format msgid "invalid operand to switch statement" msgstr "" -#: tree-cfg.c:4151 +#: tree-cfg.c:4148 #, gcc-internal-format msgid "incorrect entry in label_to_block_map" msgstr "" -#: tree-cfg.c:4161 +#: tree-cfg.c:4158 #, gcc-internal-format msgid "incorrect setting of landing pad number" msgstr "" -#: tree-cfg.c:4189 +#: tree-cfg.c:4186 #, gcc-internal-format msgid "invalid comparison code in gimple cond" msgstr "" -#: tree-cfg.c:4197 +#: tree-cfg.c:4194 #, gcc-internal-format msgid "invalid labels in gimple cond" msgstr "" -#: tree-cfg.c:4258 tree-cfg.c:4267 +#: tree-cfg.c:4255 tree-cfg.c:4264 #, gcc-internal-format msgid "invalid PHI result" msgstr "" -#: tree-cfg.c:4277 +#: tree-cfg.c:4274 #, gcc-internal-format msgid "missing PHI def" msgstr "" -#: tree-cfg.c:4291 +#: tree-cfg.c:4288 #, gcc-internal-format msgid "invalid PHI argument" msgstr "" -#: tree-cfg.c:4298 +#: tree-cfg.c:4295 #, gcc-internal-format, gfc-internal-format msgid "incompatible types in PHI argument %u" msgstr "" -#: tree-cfg.c:4382 tree-cfg.c:4578 +#: tree-cfg.c:4379 tree-cfg.c:4575 #, gcc-internal-format msgid "verify_gimple failed" msgstr "" -#: tree-cfg.c:4443 +#: tree-cfg.c:4440 #, gcc-internal-format msgid "dead STMT in EH table" msgstr "" -#: tree-cfg.c:4477 +#: tree-cfg.c:4474 #, gcc-internal-format msgid "gimple_bb (phi) is set to a wrong basic block" msgstr "" -#: tree-cfg.c:4489 tree-cfg.c:4523 +#: tree-cfg.c:4486 tree-cfg.c:4520 #, gcc-internal-format msgid "incorrect sharing of tree nodes" msgstr "" -#: tree-cfg.c:4512 +#: tree-cfg.c:4509 #, gcc-internal-format msgid "gimple_bb (stmt) is set to a wrong basic block" msgstr "" -#: tree-cfg.c:4538 +#: tree-cfg.c:4535 #, gcc-internal-format msgid "in statement" msgstr "" -#: tree-cfg.c:4553 +#: tree-cfg.c:4550 #, gcc-internal-format msgid "statement marked for throw, but doesn%'t" msgstr "" -#: tree-cfg.c:4560 +#: tree-cfg.c:4557 #, gcc-internal-format msgid "statement marked for throw in middle of block" msgstr "" -#: tree-cfg.c:4601 +#: tree-cfg.c:4598 #, gcc-internal-format msgid "ENTRY_BLOCK has IL associated with it" msgstr "" -#: tree-cfg.c:4607 +#: tree-cfg.c:4604 #, gcc-internal-format msgid "EXIT_BLOCK has IL associated with it" msgstr "" -#: tree-cfg.c:4614 +#: tree-cfg.c:4611 #, gcc-internal-format, gfc-internal-format msgid "fallthru to exit from bb %d" msgstr "" -#: tree-cfg.c:4638 +#: tree-cfg.c:4635 #, gcc-internal-format msgid "nonlocal label " msgstr "" -#: tree-cfg.c:4647 +#: tree-cfg.c:4644 #, gcc-internal-format msgid "EH landing pad label " msgstr "" -#: tree-cfg.c:4656 tree-cfg.c:4665 tree-cfg.c:4690 +#: tree-cfg.c:4653 tree-cfg.c:4662 tree-cfg.c:4687 #, gcc-internal-format msgid "label " msgstr "" -#: tree-cfg.c:4680 +#: tree-cfg.c:4677 #, gcc-internal-format, gfc-internal-format msgid "control flow in the middle of basic block %d" msgstr "" -#: tree-cfg.c:4713 +#: tree-cfg.c:4710 #, gcc-internal-format, gfc-internal-format msgid "fallthru edge after a control statement in bb %d" msgstr "" -#: tree-cfg.c:4726 +#: tree-cfg.c:4723 #, gcc-internal-format, gfc-internal-format msgid "true/false edge after a non-GIMPLE_COND in bb %d" msgstr "" -#: tree-cfg.c:4749 tree-cfg.c:4771 tree-cfg.c:4788 tree-cfg.c:4857 +#: tree-cfg.c:4746 tree-cfg.c:4768 tree-cfg.c:4785 tree-cfg.c:4854 #, gcc-internal-format, gfc-internal-format msgid "wrong outgoing edge flags at end of bb %d" msgstr "" -#: tree-cfg.c:4759 +#: tree-cfg.c:4756 #, gcc-internal-format, gfc-internal-format msgid "explicit goto at end of bb %d" msgstr "" -#: tree-cfg.c:4793 +#: tree-cfg.c:4790 #, gcc-internal-format, gfc-internal-format msgid "return edge does not point to exit in bb %d" msgstr "" -#: tree-cfg.c:4823 +#: tree-cfg.c:4820 #, gcc-internal-format msgid "found default case not at the start of case vector" msgstr "" -#: tree-cfg.c:4831 +#: tree-cfg.c:4828 #, gcc-internal-format msgid "case labels not sorted: " msgstr "" -#: tree-cfg.c:4848 +#: tree-cfg.c:4845 #, gcc-internal-format, gfc-internal-format msgid "extra outgoing edge %d->%d" msgstr "" -#: tree-cfg.c:4871 +#: tree-cfg.c:4868 #, gcc-internal-format, gfc-internal-format msgid "missing edge %i->%i" msgstr "" -#: tree-cfg.c:7527 +#: tree-cfg.c:7524 #, gcc-internal-format msgid "%<noreturn%> function does return" msgstr "" -#: tree-cfg.c:7547 +#: tree-cfg.c:7544 #, gcc-internal-format msgid "control reaches end of non-void function" msgstr "" -#: tree-cfg.c:7685 +#: tree-cfg.c:7682 #, gcc-internal-format msgid "" "ignoring return value of %qD, declared with attribute warn_unused_result" msgstr "" -#: tree-cfg.c:7690 +#: tree-cfg.c:7687 #, gcc-internal-format msgid "" "ignoring return value of function declared with attribute warn_unused_result" @@ -20043,12 +20198,12 @@ msgstr "" msgid "mudflap: this language is not supported" msgstr "" -#: tree-optimize.c:448 +#: tree-optimize.c:450 #, gcc-internal-format msgid "size of return value of %q+D is %u bytes" msgstr "" -#: tree-optimize.c:451 +#: tree-optimize.c:453 #, gcc-internal-format msgid "size of return value of %q+D is larger than %wd bytes" msgstr "" @@ -20064,52 +20219,52 @@ msgstr "" msgid "unimplemented functionality" msgstr "" -#: tree-ssa-operands.c:1116 +#: tree-ssa-operands.c:1127 #, gcc-internal-format msgid "virtual definition of statement not up-to-date" msgstr "" -#: tree-ssa-operands.c:1123 +#: tree-ssa-operands.c:1134 #, gcc-internal-format msgid "virtual def operand missing for stmt" msgstr "" -#: tree-ssa-operands.c:1133 +#: tree-ssa-operands.c:1144 #, gcc-internal-format msgid "virtual use of statement not up-to-date" msgstr "" -#: tree-ssa-operands.c:1140 +#: tree-ssa-operands.c:1151 #, gcc-internal-format msgid "virtual use operand missing for stmt" msgstr "" -#: tree-ssa-operands.c:1156 +#: tree-ssa-operands.c:1167 #, gcc-internal-format msgid "excess use operand for stmt" msgstr "" -#: tree-ssa-operands.c:1164 +#: tree-ssa-operands.c:1175 #, gcc-internal-format msgid "use operand missing for stmt" msgstr "" -#: tree-ssa-operands.c:1181 +#: tree-ssa-operands.c:1192 #, gcc-internal-format msgid "excess def operand for stmt" msgstr "" -#: tree-ssa-operands.c:1189 +#: tree-ssa-operands.c:1200 #, gcc-internal-format msgid "def operand missing for stmt" msgstr "" -#: tree-ssa-operands.c:1196 +#: tree-ssa-operands.c:1207 #, gcc-internal-format msgid "stmt volatile flag not up-to-date" msgstr "" -#: tree-ssa-uninit.c:1958 tree-ssa.c:1655 +#: tree-ssa-uninit.c:1958 tree-ssa.c:1653 #, gcc-internal-format msgid "%qD may be used uninitialized in this function" msgstr "" @@ -20159,7 +20314,7 @@ msgstr "" msgid "SSA_NAME created in two different blocks %i and %i" msgstr "" -#: tree-ssa.c:709 tree-ssa.c:1023 +#: tree-ssa.c:709 tree-ssa.c:1021 #, gcc-internal-format msgid "SSA_NAME_DEF_STMT is wrong" msgstr "" @@ -20214,37 +20369,37 @@ msgstr "" msgid "wrong edge %d->%d for PHI argument" msgstr "" -#: tree-ssa.c:970 +#: tree-ssa.c:968 #, gcc-internal-format, gfc-internal-format msgid "AUX pointer initialized for edge %d->%d" msgstr "" -#: tree-ssa.c:995 +#: tree-ssa.c:993 #, gcc-internal-format msgid "stmt (%p) marked modified after optimization pass: " msgstr "" -#: tree-ssa.c:1052 +#: tree-ssa.c:1050 #, gcc-internal-format msgid "verify_ssa failed" msgstr "" -#: tree-ssa.c:1618 varasm.c:321 +#: tree-ssa.c:1616 varasm.c:321 #, gcc-internal-format msgid "%qD was declared here" msgstr "" -#: tree-ssa.c:1650 +#: tree-ssa.c:1648 #, gcc-internal-format msgid "%qD is used uninitialized in this function" msgstr "" -#: tree-ssa.c:1687 +#: tree-ssa.c:1685 #, gcc-internal-format msgid "%qE is used uninitialized in this function" msgstr "" -#: tree-ssa.c:1692 +#: tree-ssa.c:1690 #, gcc-internal-format msgid "%qE may be used uninitialized in this function" msgstr "" @@ -20352,24 +20507,24 @@ msgstr "" msgid "ignoring attributes applied to %qT after definition" msgstr "" -#: tree.c:5457 +#: tree.c:5459 #, gcc-internal-format msgid "%q+D already declared with dllexport attribute: dllimport ignored" msgstr "" -#: tree.c:5469 +#: tree.c:5471 #, gcc-internal-format msgid "" "%q+D redeclared without dllimport attribute after being referenced with dll " "linkage" msgstr "" -#: tree.c:5484 +#: tree.c:5486 #, gcc-internal-format msgid "%q+D redeclared without dllimport attribute: previous dllimport ignored" msgstr "" -#: tree.c:5527 tree.c:5539 tree.c:5549 c-family/c-common.c:5865 +#: tree.c:5529 tree.c:5541 tree.c:5551 c-family/c-common.c:5865 #: c-family/c-common.c:5884 c-family/c-common.c:5902 c-family/c-common.c:5930 #: c-family/c-common.c:5957 c-family/c-common.c:5983 c-family/c-common.c:6002 #: c-family/c-common.c:6019 c-family/c-common.c:6043 c-family/c-common.c:6066 @@ -20384,146 +20539,146 @@ msgstr "" #: c-family/c-common.c:7680 c-family/c-common.c:7971 c-family/c-common.c:7994 #: c-family/c-common.c:8033 c-family/c-common.c:8111 c-family/c-common.c:8260 #: config/darwin.c:1942 config/arm/arm.c:5007 config/arm/arm.c:5035 -#: config/arm/arm.c:5052 config/avr/avr.c:6728 config/h8300/h8300.c:5418 -#: config/h8300/h8300.c:5442 config/i386/i386.c:4944 config/i386/i386.c:31811 -#: config/ia64/ia64.c:734 config/rs6000/rs6000.c:24318 config/spu/spu.c:4035 -#: ada/gcc-interface/utils.c:5482 lto/lto-lang.c:215 +#: config/arm/arm.c:5052 config/avr/avr.c:6846 config/h8300/h8300.c:5418 +#: config/h8300/h8300.c:5442 config/i386/i386.c:4944 config/i386/i386.c:31865 +#: config/ia64/ia64.c:734 config/rs6000/rs6000.c:24324 config/spu/spu.c:4035 +#: ada/gcc-interface/utils.c:5488 lto/lto-lang.c:215 #, gcc-internal-format msgid "%qE attribute ignored" msgstr "" -#: tree.c:5567 +#: tree.c:5569 #, gcc-internal-format msgid "inline function %q+D declared as dllimport: attribute ignored" msgstr "" -#: tree.c:5575 +#: tree.c:5577 #, gcc-internal-format msgid "function %q+D definition is marked dllimport" msgstr "" -#: tree.c:5583 +#: tree.c:5585 #, gcc-internal-format msgid "variable %q+D definition is marked dllimport" msgstr "" -#: tree.c:5611 +#: tree.c:5613 #, gcc-internal-format msgid "external linkage required for symbol %q+D because of %qE attribute" msgstr "" -#: tree.c:5625 +#: tree.c:5627 #, gcc-internal-format msgid "" "%qE implies default visibility, but %qD has already been declared with a " "different visibility" msgstr "" -#: tree.c:7375 +#: tree.c:7377 #, gcc-internal-format msgid "arrays of functions are not meaningful" msgstr "" -#: tree.c:7542 +#: tree.c:7544 #, gcc-internal-format msgid "function return type cannot be function" msgstr "" -#: tree.c:8838 tree.c:8923 tree.c:8984 +#: tree.c:8840 tree.c:8925 tree.c:8986 #, gcc-internal-format, gfc-internal-format msgid "tree check: %s, have %s in %s, at %s:%d" msgstr "" -#: tree.c:8875 +#: tree.c:8877 #, gcc-internal-format, gfc-internal-format msgid "tree check: expected none of %s, have %s in %s, at %s:%d" msgstr "" -#: tree.c:8888 +#: tree.c:8890 #, gcc-internal-format msgid "tree check: expected class %qs, have %qs (%s) in %s, at %s:%d" msgstr "" -#: tree.c:8937 +#: tree.c:8939 #, gcc-internal-format msgid "tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d" msgstr "" -#: tree.c:8950 +#: tree.c:8952 #, gcc-internal-format, gfc-internal-format msgid "tree check: expected omp_clause %s, have %s in %s, at %s:%d" msgstr "" -#: tree.c:9010 +#: tree.c:9012 #, gcc-internal-format msgid "" "tree check: expected tree that contains %qs structure, have %qs in %s, at %s:" "%d" msgstr "" -#: tree.c:9024 +#: tree.c:9026 #, gcc-internal-format, gfc-internal-format msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d" msgstr "" -#: tree.c:9037 +#: tree.c:9039 #, gcc-internal-format, gfc-internal-format msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d" msgstr "" -#: tree.c:9050 +#: tree.c:9052 #, gcc-internal-format, gfc-internal-format msgid "" "tree check: accessed operand %d of omp_clause %s with %d operands in %s, at " "%s:%d" msgstr "" -#: tree.c:11330 +#: tree.c:11336 #, gcc-internal-format msgid "%qD is deprecated (declared at %s:%d): %s" msgstr "" -#: tree.c:11334 +#: tree.c:11340 #, gcc-internal-format msgid "%qD is deprecated (declared at %s:%d)" msgstr "" -#: tree.c:11359 +#: tree.c:11365 #, gcc-internal-format msgid "%qE is deprecated (declared at %s:%d): %s" msgstr "" -#: tree.c:11363 +#: tree.c:11369 #, gcc-internal-format msgid "%qE is deprecated (declared at %s:%d)" msgstr "" -#: tree.c:11370 +#: tree.c:11376 #, gcc-internal-format, gfc-internal-format msgid "type is deprecated (declared at %s:%d): %s" msgstr "" -#: tree.c:11374 +#: tree.c:11380 #, gcc-internal-format, gfc-internal-format msgid "type is deprecated (declared at %s:%d)" msgstr "" -#: tree.c:11383 +#: tree.c:11389 #, gcc-internal-format msgid "%qE is deprecated: %s" msgstr "" -#: tree.c:11386 +#: tree.c:11392 #, gcc-internal-format msgid "%qE is deprecated" msgstr "" -#: tree.c:11391 +#: tree.c:11397 #, gcc-internal-format, gfc-internal-format msgid "type is deprecated: %s" msgstr "" -#: tree.c:11394 +#: tree.c:11400 #, gcc-internal-format msgid "type is deprecated" msgstr "" @@ -20569,14 +20724,14 @@ msgstr "" msgid "Skipping target %s with mismatching types for icall " msgstr "" -#: var-tracking.c:6582 +#: var-tracking.c:6586 #, gcc-internal-format msgid "" "variable tracking size limit exceeded with -fvar-tracking-assignments, " "retrying without" msgstr "" -#: var-tracking.c:6586 +#: var-tracking.c:6590 #, gcc-internal-format msgid "variable tracking size limit exceeded" msgstr "" @@ -20731,6 +20886,11 @@ msgstr "" msgid "visibility attribute not supported in this configuration; ignored" msgstr "" +#: varpool.c:486 +#, gcc-internal-format +msgid "variable %q+D part of alias cycle" +msgstr "" + #: vec.c:527 #, gcc-internal-format, gfc-internal-format msgid "vector %s %s domain error, in %s at %s:%u" @@ -20764,8 +20924,8 @@ msgid "" "required to support" msgstr "" -#: c-family/c-common.c:1494 c-family/c-common.c:1506 cp/semantics.c:6634 -#: cp/semantics.c:8017 +#: c-family/c-common.c:1494 c-family/c-common.c:1506 cp/semantics.c:6649 +#: cp/semantics.c:8032 #, gcc-internal-format msgid "overflow in constant expression" msgstr "" @@ -21396,41 +21556,41 @@ msgstr "" msgid "invalid vector type for attribute %qE" msgstr "" -#: c-family/c-common.c:7720 ada/gcc-interface/utils.c:5600 -#: ada/gcc-interface/utils.c:5694 +#: c-family/c-common.c:7720 ada/gcc-interface/utils.c:5606 +#: ada/gcc-interface/utils.c:5700 #, gcc-internal-format msgid "vector size not an integral multiple of component size" msgstr "" -#: c-family/c-common.c:7726 ada/gcc-interface/utils.c:5606 -#: ada/gcc-interface/utils.c:5700 +#: c-family/c-common.c:7726 ada/gcc-interface/utils.c:5612 +#: ada/gcc-interface/utils.c:5706 #, gcc-internal-format msgid "zero vector size" msgstr "" -#: c-family/c-common.c:7734 ada/gcc-interface/utils.c:5614 -#: ada/gcc-interface/utils.c:5707 +#: c-family/c-common.c:7734 ada/gcc-interface/utils.c:5620 +#: ada/gcc-interface/utils.c:5713 #, gcc-internal-format msgid "number of components of the vector not a power of two" msgstr "" -#: c-family/c-common.c:7762 ada/gcc-interface/utils.c:5341 +#: c-family/c-common.c:7762 ada/gcc-interface/utils.c:5347 #, gcc-internal-format msgid "nonnull attribute without arguments on a non-prototype" msgstr "" -#: c-family/c-common.c:7776 ada/gcc-interface/utils.c:5355 +#: c-family/c-common.c:7776 ada/gcc-interface/utils.c:5361 #, gcc-internal-format, gfc-internal-format msgid "nonnull argument has invalid operand number (argument %lu)" msgstr "" -#: c-family/c-common.c:7798 ada/gcc-interface/utils.c:5377 +#: c-family/c-common.c:7798 ada/gcc-interface/utils.c:5383 #, gcc-internal-format, gfc-internal-format msgid "" "nonnull argument with out-of-range operand number (argument %lu, operand %lu)" msgstr "" -#: c-family/c-common.c:7806 ada/gcc-interface/utils.c:5386 +#: c-family/c-common.c:7806 ada/gcc-interface/utils.c:5392 #, gcc-internal-format, gfc-internal-format msgid "" "nonnull argument references non-pointer operand (argument %lu, operand %lu)" @@ -21471,12 +21631,12 @@ msgstr "" msgid "%qE attribute only applies to variadic functions" msgstr "" -#: c-family/c-common.c:8069 ada/gcc-interface/utils.c:5428 +#: c-family/c-common.c:8069 ada/gcc-interface/utils.c:5434 #, gcc-internal-format msgid "requested position is not an integer constant" msgstr "" -#: c-family/c-common.c:8077 ada/gcc-interface/utils.c:5435 +#: c-family/c-common.c:8077 ada/gcc-interface/utils.c:5441 #, gcc-internal-format msgid "requested position is less than zero" msgstr "" @@ -21728,181 +21888,181 @@ msgstr "" msgid "size of array is too large" msgstr "" -#: c-family/c-common.c:9425 +#: c-family/c-common.c:9427 #, gcc-internal-format msgid "incorrect number of arguments to function %qE" msgstr "" -#: c-family/c-common.c:9433 +#: c-family/c-common.c:9435 #, gcc-internal-format msgid "argument 1 of %qE must be a non-void pointer type" msgstr "" -#: c-family/c-common.c:9442 +#: c-family/c-common.c:9444 #, gcc-internal-format msgid "argument 1 of %qE must be a pointer to a constant size type" msgstr "" -#: c-family/c-common.c:9453 +#: c-family/c-common.c:9455 #, gcc-internal-format msgid "argument 1 of %qE must be a pointer to a nonzero size object" msgstr "" -#: c-family/c-common.c:9468 +#: c-family/c-common.c:9470 #, gcc-internal-format msgid "argument %d of %qE must be a pointer type" msgstr "" -#: c-family/c-common.c:9475 +#: c-family/c-common.c:9477 #, gcc-internal-format msgid "size mismatch in argument %d of %qE" msgstr "" -#: c-family/c-common.c:9491 +#: c-family/c-common.c:9493 #, gcc-internal-format msgid "invalid memory model argument %d of %qE" msgstr "" -#: c-family/c-common.c:9498 +#: c-family/c-common.c:9500 #, gcc-internal-format msgid "non-integer memory model argument %d of %qE" msgstr "" -#: c-family/c-common.c:10024 +#: c-family/c-common.c:10026 #, gcc-internal-format msgid "array subscript has type %<char%>" msgstr "" -#: c-family/c-common.c:10059 +#: c-family/c-common.c:10061 #, gcc-internal-format msgid "suggest parentheses around %<+%> inside %<<<%>" msgstr "" -#: c-family/c-common.c:10062 +#: c-family/c-common.c:10064 #, gcc-internal-format msgid "suggest parentheses around %<-%> inside %<<<%>" msgstr "" -#: c-family/c-common.c:10068 +#: c-family/c-common.c:10070 #, gcc-internal-format msgid "suggest parentheses around %<+%> inside %<>>%>" msgstr "" -#: c-family/c-common.c:10071 +#: c-family/c-common.c:10073 #, gcc-internal-format msgid "suggest parentheses around %<-%> inside %<>>%>" msgstr "" -#: c-family/c-common.c:10077 +#: c-family/c-common.c:10079 #, gcc-internal-format msgid "suggest parentheses around %<&&%> within %<||%>" msgstr "" -#: c-family/c-common.c:10086 +#: c-family/c-common.c:10088 #, gcc-internal-format msgid "suggest parentheses around arithmetic in operand of %<|%>" msgstr "" -#: c-family/c-common.c:10091 +#: c-family/c-common.c:10093 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<|%>" msgstr "" -#: c-family/c-common.c:10095 +#: c-family/c-common.c:10097 #, gcc-internal-format msgid "" "suggest parentheses around operand of %<!%> or change %<|%> to %<||%> or %<!" "%> to %<~%>" msgstr "" -#: c-family/c-common.c:10105 +#: c-family/c-common.c:10107 #, gcc-internal-format msgid "suggest parentheses around arithmetic in operand of %<^%>" msgstr "" -#: c-family/c-common.c:10110 +#: c-family/c-common.c:10112 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<^%>" msgstr "" -#: c-family/c-common.c:10116 +#: c-family/c-common.c:10118 #, gcc-internal-format msgid "suggest parentheses around %<+%> in operand of %<&%>" msgstr "" -#: c-family/c-common.c:10119 +#: c-family/c-common.c:10121 #, gcc-internal-format msgid "suggest parentheses around %<-%> in operand of %<&%>" msgstr "" -#: c-family/c-common.c:10124 +#: c-family/c-common.c:10126 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<&%>" msgstr "" -#: c-family/c-common.c:10128 +#: c-family/c-common.c:10130 #, gcc-internal-format msgid "" "suggest parentheses around operand of %<!%> or change %<&%> to %<&&%> or %<!" "%> to %<~%>" msgstr "" -#: c-family/c-common.c:10136 +#: c-family/c-common.c:10138 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<==%>" msgstr "" -#: c-family/c-common.c:10142 +#: c-family/c-common.c:10144 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<!=%>" msgstr "" -#: c-family/c-common.c:10153 +#: c-family/c-common.c:10155 #, gcc-internal-format msgid "comparisons like %<X<=Y<=Z%> do not have their mathematical meaning" msgstr "" -#: c-family/c-common.c:10168 +#: c-family/c-common.c:10170 #, gcc-internal-format msgid "label %q+D defined but not used" msgstr "" -#: c-family/c-common.c:10170 +#: c-family/c-common.c:10172 #, gcc-internal-format msgid "label %q+D declared but not defined" msgstr "" -#: c-family/c-common.c:10186 +#: c-family/c-common.c:10188 #, gcc-internal-format msgid "division by zero" msgstr "" -#: c-family/c-common.c:10218 +#: c-family/c-common.c:10220 #, gcc-internal-format msgid "comparison between types %qT and %qT" msgstr "" -#: c-family/c-common.c:10269 +#: c-family/c-common.c:10271 #, gcc-internal-format msgid "comparison between signed and unsigned integer expressions" msgstr "" -#: c-family/c-common.c:10320 +#: c-family/c-common.c:10322 #, gcc-internal-format msgid "promoted ~unsigned is always non-zero" msgstr "" -#: c-family/c-common.c:10323 +#: c-family/c-common.c:10325 #, gcc-internal-format msgid "comparison of promoted ~unsigned with constant" msgstr "" -#: c-family/c-common.c:10333 +#: c-family/c-common.c:10335 #, gcc-internal-format msgid "comparison of promoted ~unsigned with unsigned" msgstr "" -#: c-family/c-common.c:10511 +#: c-family/c-common.c:10513 #, gcc-internal-format msgid "typedef %qD locally defined but not used" msgstr "" @@ -23190,7 +23350,7 @@ msgstr "" #. coalesced sections. Weak aliases (or any other kind of aliases) are #. not supported. Weak symbols that aren't visible outside the .s file #. are not supported. -#: config/darwin.h:439 +#: config/darwin.h:441 #, gcc-internal-format msgid "alias definitions not supported in Mach-O; ignored" msgstr "" @@ -23201,289 +23361,290 @@ msgstr "" msgid "profiler support for VxWorks" msgstr "" -#: config/alpha/alpha.c:277 +#: config/alpha/alpha.c:282 #, gcc-internal-format msgid "bad value %qs for -mtrap-precision switch" msgstr "" -#: config/alpha/alpha.c:291 +#: config/alpha/alpha.c:296 #, gcc-internal-format msgid "bad value %qs for -mfp-rounding-mode switch" msgstr "" -#: config/alpha/alpha.c:306 +#: config/alpha/alpha.c:311 #, gcc-internal-format msgid "bad value %qs for -mfp-trap-mode switch" msgstr "" -#: config/alpha/alpha.c:320 +#: config/alpha/alpha.c:325 #, gcc-internal-format msgid "bad value %qs for -mcpu switch" msgstr "" -#: config/alpha/alpha.c:332 +#: config/alpha/alpha.c:337 #, gcc-internal-format msgid "bad value %qs for -mtune switch" msgstr "" -#: config/alpha/alpha.c:340 +#: config/alpha/alpha.c:345 #, gcc-internal-format msgid "fp software completion requires -mtrap-precision=i" msgstr "" -#: config/alpha/alpha.c:356 +#: config/alpha/alpha.c:361 #, gcc-internal-format msgid "rounding mode not supported for VAX floats" msgstr "" -#: config/alpha/alpha.c:361 +#: config/alpha/alpha.c:366 #, gcc-internal-format msgid "trap mode not supported for VAX floats" msgstr "" -#: config/alpha/alpha.c:365 +#: config/alpha/alpha.c:370 #, gcc-internal-format msgid "128-bit long double not supported for VAX floats" msgstr "" -#: config/alpha/alpha.c:393 +#: config/alpha/alpha.c:398 #, gcc-internal-format, gfc-internal-format msgid "L%d cache latency unknown for %s" msgstr "" -#: config/alpha/alpha.c:408 +#: config/alpha/alpha.c:413 #, gcc-internal-format msgid "bad value %qs for -mmemory-latency" msgstr "" -#: config/alpha/alpha.c:6551 config/alpha/alpha.c:6554 config/s390/s390.c:9157 -#: config/s390/s390.c:9160 +#: config/alpha/alpha.c:6556 config/alpha/alpha.c:6559 config/s390/s390.c:9162 +#: config/s390/s390.c:9165 config/tilegx/tilegx.c:3394 +#: config/tilepro/tilepro.c:3098 #, gcc-internal-format msgid "bad builtin fcode" msgstr "" -#: config/arm/arm.c:1523 +#: config/arm/arm.c:1512 #, gcc-internal-format, gfc-internal-format msgid "switch -mcpu=%s conflicts with -march=%s switch" msgstr "" -#: config/arm/arm.c:1640 +#: config/arm/arm.c:1629 #, gcc-internal-format msgid "target CPU does not support ARM mode" msgstr "" -#: config/arm/arm.c:1646 +#: config/arm/arm.c:1635 #, gcc-internal-format msgid "target CPU does not support interworking" msgstr "" -#: config/arm/arm.c:1652 +#: config/arm/arm.c:1641 #, gcc-internal-format msgid "target CPU does not support THUMB instructions" msgstr "" -#: config/arm/arm.c:1670 +#: config/arm/arm.c:1659 #, gcc-internal-format msgid "" "enabling backtrace support is only meaningful when compiling for the Thumb" msgstr "" -#: config/arm/arm.c:1673 +#: config/arm/arm.c:1662 #, gcc-internal-format msgid "" "enabling callee interworking support is only meaningful when compiling for " "the Thumb" msgstr "" -#: config/arm/arm.c:1677 +#: config/arm/arm.c:1666 #, gcc-internal-format msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" msgstr "" -#: config/arm/arm.c:1685 +#: config/arm/arm.c:1674 #, gcc-internal-format msgid "-fpic and -mapcs-reent are incompatible" msgstr "" -#: config/arm/arm.c:1688 +#: config/arm/arm.c:1677 #, gcc-internal-format msgid "APCS reentrant code not supported. Ignored" msgstr "" -#: config/arm/arm.c:1696 +#: config/arm/arm.c:1685 #, gcc-internal-format msgid "-g with -mno-apcs-frame may not give sensible debugging" msgstr "" -#: config/arm/arm.c:1699 +#: config/arm/arm.c:1688 #, gcc-internal-format msgid "passing floating point arguments in fp regs not yet supported" msgstr "" -#: config/arm/arm.c:1702 +#: config/arm/arm.c:1691 #, gcc-internal-format msgid "" "%<mwords-little-endian%> is deprecated and will be removed in a future " "release" msgstr "" -#: config/arm/arm.c:1764 +#: config/arm/arm.c:1753 #, gcc-internal-format msgid "iwmmxt requires an AAPCS compatible ABI for proper operation" msgstr "" -#: config/arm/arm.c:1767 +#: config/arm/arm.c:1756 #, gcc-internal-format msgid "iwmmxt abi requires an iwmmxt capable cpu" msgstr "" -#: config/arm/arm.c:1815 +#: config/arm/arm.c:1804 #, gcc-internal-format msgid "FPA is unsupported in the AAPCS" msgstr "" -#: config/arm/arm.c:1820 +#: config/arm/arm.c:1809 #, gcc-internal-format msgid "AAPCS does not support -mcaller-super-interworking" msgstr "" -#: config/arm/arm.c:1823 +#: config/arm/arm.c:1812 #, gcc-internal-format msgid "AAPCS does not support -mcallee-super-interworking" msgstr "" -#: config/arm/arm.c:1830 +#: config/arm/arm.c:1819 #, gcc-internal-format msgid "iWMMXt and hardware floating point" msgstr "" -#: config/arm/arm.c:1834 +#: config/arm/arm.c:1823 #, gcc-internal-format msgid "Thumb-2 iWMMXt" msgstr "" -#: config/arm/arm.c:1838 +#: config/arm/arm.c:1827 #, gcc-internal-format msgid "__fp16 and no ldrh" msgstr "" -#: config/arm/arm.c:1858 +#: config/arm/arm.c:1847 #, gcc-internal-format msgid "-mfloat-abi=hard and VFP" msgstr "" -#: config/arm/arm.c:1883 +#: config/arm/arm.c:1872 #, gcc-internal-format msgid "can not use -mtp=cp15 with 16-bit Thumb" msgstr "" -#: config/arm/arm.c:1899 +#: config/arm/arm.c:1888 #, gcc-internal-format msgid "structure size boundary can only be set to 8, 32 or 64" msgstr "" -#: config/arm/arm.c:1901 +#: config/arm/arm.c:1890 #, gcc-internal-format msgid "structure size boundary can only be set to 8 or 32" msgstr "" -#: config/arm/arm.c:1909 +#: config/arm/arm.c:1898 #, gcc-internal-format msgid "RTP PIC is incompatible with Thumb" msgstr "" -#: config/arm/arm.c:1918 +#: config/arm/arm.c:1907 #, gcc-internal-format msgid "RTP PIC is incompatible with -msingle-pic-base" msgstr "" -#: config/arm/arm.c:1930 +#: config/arm/arm.c:1919 #, gcc-internal-format msgid "-mpic-register= is useless without -fpic" msgstr "" -#: config/arm/arm.c:1939 +#: config/arm/arm.c:1928 #, gcc-internal-format, gfc-internal-format msgid "unable to use '%s' for PIC register" msgstr "" -#: config/arm/arm.c:1971 +#: config/arm/arm.c:1960 #, gcc-internal-format msgid "target CPU does not support unaligned accesses" msgstr "" -#: config/arm/arm.c:1995 +#: config/arm/arm.c:1984 #, gcc-internal-format msgid "-freorder-blocks-and-partition not supported on this architecture" msgstr "" -#: config/arm/arm.c:4043 +#: config/arm/arm.c:4036 #, gcc-internal-format msgid "non-AAPCS derived PCS variant" msgstr "" -#: config/arm/arm.c:4045 +#: config/arm/arm.c:4038 #, gcc-internal-format msgid "variadic functions must use the base AAPCS variant" msgstr "" -#: config/arm/arm.c:4064 +#: config/arm/arm.c:4057 #, gcc-internal-format msgid "PCS variant" msgstr "" -#: config/arm/arm.c:4259 +#: config/arm/arm.c:4252 #, gcc-internal-format msgid "Thumb-1 hard-float VFP ABI" msgstr "" -#: config/arm/arm.c:4975 config/arm/arm.c:4993 config/avr/avr.c:6748 -#: config/avr/avr.c:6764 config/bfin/bfin.c:4636 config/bfin/bfin.c:4697 +#: config/arm/arm.c:4975 config/arm/arm.c:4993 config/avr/avr.c:6866 +#: config/avr/avr.c:6882 config/bfin/bfin.c:4636 config/bfin/bfin.c:4697 #: config/bfin/bfin.c:4726 config/h8300/h8300.c:5394 config/i386/i386.c:4899 -#: config/i386/i386.c:31712 config/i386/i386.c:31763 config/i386/i386.c:31836 +#: config/i386/i386.c:31766 config/i386/i386.c:31817 config/i386/i386.c:31890 #: config/m68k/m68k.c:725 config/mcore/mcore.c:3076 config/mep/mep.c:4011 #: config/mep/mep.c:4025 config/mep/mep.c:4099 config/rl78/rl78.c:478 -#: config/rs6000/rs6000.c:24244 config/rx/rx.c:2502 config/sh/sh.c:8885 -#: config/sh/sh.c:8903 config/sh/sh.c:8932 config/sh/sh.c:9014 -#: config/sh/sh.c:9037 config/spu/spu.c:3977 config/stormy16/stormy16.c:2200 +#: config/rs6000/rs6000.c:24250 config/rx/rx.c:2502 config/sh/sh.c:8910 +#: config/sh/sh.c:8928 config/sh/sh.c:8957 config/sh/sh.c:9039 +#: config/sh/sh.c:9062 config/spu/spu.c:3977 config/stormy16/stormy16.c:2200 #: config/v850/v850.c:2057 #, gcc-internal-format msgid "%qE attribute only applies to functions" msgstr "" -#: config/arm/arm.c:18922 +#: config/arm/arm.c:18961 #, gcc-internal-format msgid "unable to compute real location of stacked parameter" msgstr "" -#: config/arm/arm.c:20660 +#: config/arm/arm.c:20701 #, gcc-internal-format msgid "argument must be a constant" msgstr "" #. @@@ better error message -#: config/arm/arm.c:21029 config/arm/arm.c:21066 +#: config/arm/arm.c:21070 config/arm/arm.c:21107 #, gcc-internal-format msgid "selector must be an immediate" msgstr "" #. @@@ better error message -#: config/arm/arm.c:21109 +#: config/arm/arm.c:21150 #, gcc-internal-format msgid "mask must be an immediate" msgstr "" -#: config/arm/arm.c:21893 +#: config/arm/arm.c:21934 #, gcc-internal-format msgid "no low registers available for popping high registers" msgstr "" -#: config/arm/arm.c:22118 +#: config/arm/arm.c:22159 #, gcc-internal-format msgid "interrupt Service Routines cannot be coded in Thumb mode" msgstr "" -#: config/arm/arm.c:24404 +#: config/arm/arm.c:24445 #, gcc-internal-format msgid "the mangling of %<va_list%> has changed in GCC 4.4" msgstr "" @@ -23498,93 +23659,103 @@ msgstr "" msgid "static variable %q+D is marked dllimport" msgstr "" -#: config/avr/avr.c:742 +#: config/avr/avr.c:666 #, gcc-internal-format msgid "'builtin_return_address' contains only 2 bytes of address" msgstr "" -#: config/avr/avr.c:1778 +#: config/avr/avr.c:1775 #, gcc-internal-format msgid "pointer offset from symbol maybe incorrect" msgstr "" -#: config/avr/avr.c:1895 +#: config/avr/avr.c:1898 #, gcc-internal-format msgid "accessing data memory with program memory address" msgstr "" -#: config/avr/avr.c:1944 +#: config/avr/avr.c:1947 #, gcc-internal-format msgid "accessing program memory with data memory address" msgstr "" -#: config/avr/avr.c:2350 +#: config/avr/avr.c:2353 #, gcc-internal-format, gfc-internal-format msgid "fixed register %s used to pass parameter to function" msgstr "" -#: config/avr/avr.c:2622 +#: config/avr/avr.c:2625 #, gcc-internal-format msgid "writing to address space %qs not supported" msgstr "" -#: config/avr/avr.c:6660 +#: config/avr/avr.c:6778 #, gcc-internal-format msgid "%qs appears to be a misspelled interrupt handler" msgstr "" -#: config/avr/avr.c:6669 +#: config/avr/avr.c:6787 #, gcc-internal-format msgid "%qs appears to be a misspelled signal handler" msgstr "" -#: config/avr/avr.c:6932 +#: config/avr/avr.c:7060 +#, gcc-internal-format +msgid "%qT uses address space %qs beyond flash of %qs" +msgstr "" + +#: config/avr/avr.c:7063 +#, gcc-internal-format +msgid "%s %q+D uses address space %qs beyond flash of %qs" +msgstr "" + +#: config/avr/avr.c:7070 #, gcc-internal-format msgid "pointer targeting address space %qs must be const in %qT" msgstr "" -#: config/avr/avr.c:6935 +#: config/avr/avr.c:7073 #, gcc-internal-format msgid "pointer targeting address space %qs must be const in %s %q+D" msgstr "" -#: config/avr/avr.c:6978 +#: config/avr/avr.c:7111 +#, gcc-internal-format +msgid "variable %q+D located in address space %qs beyond flash of %qs" +msgstr "" + +#: config/avr/avr.c:7127 #, gcc-internal-format msgid "" "variable %q+D must be const in order to be put into read-only section by " "means of %qs" msgstr "" -#: config/avr/avr.c:7188 +#: config/avr/avr.c:7341 #, gcc-internal-format msgid "only uninitialized variables can be placed in the .noinit section" msgstr "" -#: config/avr/avr.c:7229 +#: config/avr/avr.c:7382 #, gcc-internal-format msgid "uninitialized variable %q+D put into program memory area" msgstr "" -#: config/avr/avr.c:7296 +#: config/avr/avr.c:7449 #, gcc-internal-format msgid "MCU %qs supported for assembler only" msgstr "" -#: config/avr/avr.c:10519 +#: config/avr/avr.c:10677 #, gcc-internal-format, gfc-internal-format msgid "%s expects a compile time integer constant" msgstr "" -#: config/avr/avr.c:10532 +#: config/avr/avr.c:10691 #, gcc-internal-format, gfc-internal-format msgid "%s expects a compile time long integer constant as first argument" msgstr "" -#: config/avr/avr.c:10545 -#, gcc-internal-format, gfc-internal-format -msgid "%s expects a compile time long long integer constant as first argument" -msgstr "" - #: config/bfin/bfin.c:2348 #, gcc-internal-format msgid "-mfdpic is not supported, please use a bfin-linux-uclibc target" @@ -23667,6 +23838,21 @@ msgstr "" msgid "profiling is not yet implemented for this architecture" msgstr "" +#: config/cr16/cr16.c:294 +#, gcc-internal-format +msgid "data-model=far not valid for cr16c architecture" +msgstr "" + +#: config/cr16/cr16.c:297 +#, gcc-internal-format, gfc-internal-format +msgid "invalid data model option -mdata-model=%s" +msgstr "" + +#: config/cr16/cr16.h:431 +#, gcc-internal-format +msgid "profiler support for CR16" +msgstr "" + #. This function is for retrieving a part of an instruction name for #. an operator, for immediate output. If that ever happens for #. MULT, we need to apply TARGET_MUL_BUG in the caller. Make sure @@ -23806,12 +23992,12 @@ msgstr "" msgid "no FUNCTION_PROFILER for CRIS" msgstr "" -#: config/epiphany/epiphany.c:433 +#: config/epiphany/epiphany.c:441 config/epiphany/epiphany.c:481 #, gcc-internal-format msgid "argument of %qE attribute is not a string constant" msgstr "" -#: config/epiphany/epiphany.c:448 +#: config/epiphany/epiphany.c:456 #, gcc-internal-format msgid "" "argument of %qE attribute is not \"reset\", \"software_exception\", " @@ -23819,12 +24005,12 @@ msgid "" "\"wand\" or \"swi\"" msgstr "" -#: config/epiphany/epiphany.c:1428 +#: config/epiphany/epiphany.c:1431 #, gcc-internal-format msgid "stack_offset must be at least 4" msgstr "" -#: config/epiphany/epiphany.c:1430 +#: config/epiphany/epiphany.c:1433 #, gcc-internal-format msgid "stack_offset must be a multiple of 4" msgstr "" @@ -24060,7 +24246,7 @@ msgstr "" msgid "regparam and thiscall attributes are not compatible" msgstr "" -#: config/i386/i386.c:4924 config/i386/i386.c:31732 +#: config/i386/i386.c:4924 config/i386/i386.c:31786 #, gcc-internal-format msgid "%qE attribute requires an integer constant argument" msgstr "" @@ -24137,75 +24323,75 @@ msgstr "" msgid "AVX vector argument without AVX enabled changes the ABI" msgstr "" -#: config/i386/i386.c:5910 +#: config/i386/i386.c:5912 #, gcc-internal-format msgid "" "the ABI of passing struct with a flexible array member has changed in GCC 4.4" msgstr "" -#: config/i386/i386.c:6026 +#: config/i386/i386.c:6029 #, gcc-internal-format msgid "the ABI of passing union with long double has changed in GCC 4.4" msgstr "" -#: config/i386/i386.c:6141 +#: config/i386/i386.c:6144 #, gcc-internal-format msgid "" "the ABI of passing structure with complex float member has changed in GCC 4.4" msgstr "" -#: config/i386/i386.c:6287 +#: config/i386/i386.c:6290 #, gcc-internal-format msgid "SSE register return with SSE disabled" msgstr "" -#: config/i386/i386.c:6293 +#: config/i386/i386.c:6296 #, gcc-internal-format msgid "SSE register argument with SSE disabled" msgstr "" -#: config/i386/i386.c:6309 +#: config/i386/i386.c:6312 #, gcc-internal-format msgid "x87 register return with x87 disabled" msgstr "" -#: config/i386/i386.c:6688 +#: config/i386/i386.c:6703 #, gcc-internal-format msgid "SSE vector argument without SSE enabled changes the ABI" msgstr "" -#: config/i386/i386.c:6726 +#: config/i386/i386.c:6741 #, gcc-internal-format msgid "MMX vector argument without MMX enabled changes the ABI" msgstr "" -#: config/i386/i386.c:7101 +#: config/i386/i386.c:7116 #, gcc-internal-format, gfc-internal-format msgid "" "The ABI for passing parameters with %d-byte alignment has changed in GCC 4.6" msgstr "" -#: config/i386/i386.c:7437 +#: config/i386/i386.c:7452 #, gcc-internal-format msgid "SSE vector return without SSE enabled changes the ABI" msgstr "" -#: config/i386/i386.c:7447 +#: config/i386/i386.c:7462 #, gcc-internal-format msgid "MMX vector return without MMX enabled changes the ABI" msgstr "" -#: config/i386/i386.c:10033 +#: config/i386/i386.c:10048 #, gcc-internal-format msgid "ms_hook_prologue attribute isn%'t compatible with -mfentry for 32-bit" msgstr "" -#: config/i386/i386.c:11030 +#: config/i386/i386.c:11045 #, gcc-internal-format msgid "-fsplit-stack does not support fastcall with nested function" msgstr "" -#: config/i386/i386.c:11044 +#: config/i386/i386.c:11059 #, gcc-internal-format msgid "" "-fsplit-stack does not support 2 register parameters for a nested function" @@ -24213,117 +24399,117 @@ msgstr "" #. FIXME: We could make this work by pushing a register #. around the addition and comparison. -#: config/i386/i386.c:11055 +#: config/i386/i386.c:11070 #, gcc-internal-format msgid "-fsplit-stack does not support 3 register parameters" msgstr "" -#: config/i386/i386.c:13557 +#: config/i386/i386.c:13599 #, gcc-internal-format msgid "extended registers have no high halves" msgstr "" -#: config/i386/i386.c:13572 +#: config/i386/i386.c:13614 #, gcc-internal-format msgid "unsupported operand size for extended register" msgstr "" -#: config/i386/i386.c:13819 +#: config/i386/i386.c:13861 #, gcc-internal-format, gfc-internal-format msgid "non-integer operand used with operand code '%c'" msgstr "" -#: config/i386/i386.c:27703 config/i386/i386.c:28640 +#: config/i386/i386.c:27757 config/i386/i386.c:28694 #, gcc-internal-format msgid "the last argument must be a 2-bit immediate" msgstr "" -#: config/i386/i386.c:28109 +#: config/i386/i386.c:28163 #, gcc-internal-format msgid "the fifth argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386.c:28204 +#: config/i386/i386.c:28258 #, gcc-internal-format msgid "the third argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386.c:28612 +#: config/i386/i386.c:28666 #, gcc-internal-format msgid "the last argument must be an 1-bit immediate" msgstr "" -#: config/i386/i386.c:28631 +#: config/i386/i386.c:28685 #, gcc-internal-format msgid "the last argument must be a 4-bit immediate" msgstr "" -#: config/i386/i386.c:28649 +#: config/i386/i386.c:28703 #, gcc-internal-format msgid "the last argument must be a 1-bit immediate" msgstr "" -#: config/i386/i386.c:28658 +#: config/i386/i386.c:28712 #, gcc-internal-format msgid "the last argument must be a 5-bit immediate" msgstr "" -#: config/i386/i386.c:28667 +#: config/i386/i386.c:28721 #, gcc-internal-format msgid "the next to last argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386.c:28671 config/i386/i386.c:28895 +#: config/i386/i386.c:28725 config/i386/i386.c:28949 #, gcc-internal-format msgid "the last argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386.c:28893 +#: config/i386/i386.c:28947 #, gcc-internal-format msgid "the last argument must be a 32-bit immediate" msgstr "" -#: config/i386/i386.c:28961 config/rs6000/rs6000.c:10535 +#: config/i386/i386.c:29015 config/rs6000/rs6000.c:10540 #, gcc-internal-format msgid "selector must be an integer constant in the range 0..%wi" msgstr "" -#: config/i386/i386.c:29104 +#: config/i386/i386.c:29158 #, gcc-internal-format msgid "%qE needs unknown isa option" msgstr "" -#: config/i386/i386.c:29108 +#: config/i386/i386.c:29162 #, gcc-internal-format msgid "%qE needs isa option %s" msgstr "" -#: config/i386/i386.c:29279 +#: config/i386/i386.c:29333 #, gcc-internal-format msgid "last argument must be an immediate" msgstr "" -#: config/i386/i386.c:29473 +#: config/i386/i386.c:29527 #, gcc-internal-format msgid "last argument must be scale 1, 2, 4, 8" msgstr "" -#: config/i386/i386.c:31719 +#: config/i386/i386.c:31773 #, gcc-internal-format msgid "%qE attribute only available for 32-bit" msgstr "" -#: config/i386/i386.c:31740 +#: config/i386/i386.c:31794 #, gcc-internal-format msgid "argument to %qE attribute is neither zero, nor one" msgstr "" -#: config/i386/i386.c:31774 config/i386/i386.c:31783 +#: config/i386/i386.c:31828 config/i386/i386.c:31837 #, gcc-internal-format msgid "ms_abi and sysv_abi attributes are not compatible" msgstr "" -#: config/i386/i386.c:31821 config/rs6000/rs6000.c:24327 +#: config/i386/i386.c:31875 config/rs6000/rs6000.c:24333 #, gcc-internal-format msgid "%qE incompatible attribute ignored" msgstr "" @@ -24394,13 +24580,13 @@ msgstr "" msgid "%qE attribute requires a string constant argument" msgstr "" -#: config/ia64/ia64.c:5737 config/pa/pa.c:412 config/sh/sh.c:8733 +#: config/ia64/ia64.c:5737 config/pa/pa.c:412 config/sh/sh.c:8758 #: config/spu/spu.c:5187 #, gcc-internal-format msgid "value of -mfixed-range must have form REG1-REG2" msgstr "" -#: config/ia64/ia64.c:5764 config/pa/pa.c:439 config/sh/sh.c:8759 +#: config/ia64/ia64.c:5764 config/pa/pa.c:439 config/sh/sh.c:8784 #: config/spu/spu.c:5213 #, gcc-internal-format, gfc-internal-format msgid "%s-%s is an empty range" @@ -24472,7 +24658,7 @@ msgid "%qE attribute is not supported for R8C target" msgstr "" #. The argument must be a constant integer. -#: config/m32c/m32c.c:3169 config/sh/sh.c:8940 config/sh/sh.c:9046 +#: config/m32c/m32c.c:3169 config/sh/sh.c:8965 config/sh/sh.c:9071 #, gcc-internal-format msgid "%qE attribute argument not an integer constant" msgstr "" @@ -24527,7 +24713,7 @@ msgstr "" msgid "interrupt_thread is available only on fido" msgstr "" -#: config/m68k/m68k.c:1072 config/rs6000/rs6000.c:18605 +#: config/m68k/m68k.c:1072 config/rs6000/rs6000.c:18610 #, gcc-internal-format msgid "stack limit expression is not supported" msgstr "" @@ -24816,116 +25002,116 @@ msgstr "" msgid "-mxl-multiply-high requires -mno-xl-soft-mul" msgstr "" -#: config/mips/mips.c:1273 config/mips/mips.c:1275 +#: config/mips/mips.c:1276 config/mips/mips.c:1278 #, gcc-internal-format msgid "%qs attribute only applies to functions" msgstr "" -#: config/mips/mips.c:1285 +#: config/mips/mips.c:1288 #, gcc-internal-format msgid "%qE cannot have both %<mips16%> and %<nomips16%> attributes" msgstr "" -#: config/mips/mips.c:1307 config/mips/mips.c:1310 +#: config/mips/mips.c:1310 config/mips/mips.c:1313 #, gcc-internal-format msgid "%qE redeclared with conflicting %qs attributes" msgstr "" -#: config/mips/mips.c:6408 +#: config/mips/mips.c:6564 #, gcc-internal-format msgid "cannot handle inconsistent calls to %qs" msgstr "" -#: config/mips/mips.c:9352 +#: config/mips/mips.c:9517 #, gcc-internal-format msgid "the %<interrupt%> attribute requires a MIPS32r2 processor" msgstr "" -#: config/mips/mips.c:9354 +#: config/mips/mips.c:9519 #, gcc-internal-format msgid "the %<interrupt%> attribute requires %<-msoft-float%>" msgstr "" -#: config/mips/mips.c:9356 +#: config/mips/mips.c:9521 #, gcc-internal-format msgid "interrupt handlers cannot be MIPS16 functions" msgstr "" -#: config/mips/mips.c:13418 +#: config/mips/mips.c:13583 #, gcc-internal-format msgid "invalid argument to built-in function" msgstr "" -#: config/mips/mips.c:13618 +#: config/mips/mips.c:13783 #, gcc-internal-format msgid "built-in function %qE not supported for MIPS16" msgstr "" -#: config/mips/mips.c:14210 +#: config/mips/mips.c:14375 #, gcc-internal-format msgid "%qs does not support MIPS16 code" msgstr "" -#: config/mips/mips.c:15452 +#: config/mips/mips.c:15617 #, gcc-internal-format msgid "MIPS16 PIC for ABIs other than o32 and o64" msgstr "" -#: config/mips/mips.c:15455 +#: config/mips/mips.c:15620 #, gcc-internal-format msgid "MIPS16 -mxgot code" msgstr "" -#: config/mips/mips.c:15458 +#: config/mips/mips.c:15623 #, gcc-internal-format msgid "hard-float MIPS16 code for ABIs other than o32 and o64" msgstr "" -#: config/mips/mips.c:15647 +#: config/mips/mips.c:15812 #, gcc-internal-format msgid "" "%<-%s%> conflicts with the other architecture options, which specify a %s " "processor" msgstr "" -#: config/mips/mips.c:15657 +#: config/mips/mips.c:15822 #, gcc-internal-format msgid "%<-march=%s%> is not compatible with the selected ABI" msgstr "" -#: config/mips/mips.c:15672 +#: config/mips/mips.c:15837 #, gcc-internal-format msgid "%<-mgp64%> used with a 32-bit processor" msgstr "" -#: config/mips/mips.c:15674 +#: config/mips/mips.c:15839 #, gcc-internal-format msgid "%<-mgp32%> used with a 64-bit ABI" msgstr "" -#: config/mips/mips.c:15676 +#: config/mips/mips.c:15841 #, gcc-internal-format msgid "%<-mgp64%> used with a 32-bit ABI" msgstr "" -#: config/mips/mips.c:15692 config/mips/mips.c:15694 config/mips/mips.c:15785 +#: config/mips/mips.c:15857 config/mips/mips.c:15859 config/mips/mips.c:15950 #, gcc-internal-format, gfc-internal-format msgid "unsupported combination: %s" msgstr "" -#: config/mips/mips.c:15698 +#: config/mips/mips.c:15863 #, gcc-internal-format msgid "" "%<-mgp32%> and %<-mfp64%> can only be combined if the target supports the " "mfhc1 and mthc1 instructions" msgstr "" -#: config/mips/mips.c:15701 +#: config/mips/mips.c:15866 #, gcc-internal-format msgid "%<-mgp32%> and %<-mfp64%> can only be combined when using the o32 ABI" msgstr "" -#: config/mips/mips.c:15724 config/mips/mips.c:15726 config/mips/mips.c:15739 +#: config/mips/mips.c:15889 config/mips/mips.c:15891 config/mips/mips.c:15904 #, gcc-internal-format msgid "%qs is incompatible with %qs" msgstr "" @@ -24935,57 +25121,57 @@ msgstr "" #. effort to support the combination of 32-bit GOT entries #. and 64-bit pointers, so we treat the abicalls case as #. an error. -#: config/mips/mips.c:15733 +#: config/mips/mips.c:15898 #, gcc-internal-format msgid "the combination of %qs and %qs is incompatible with %qs" msgstr "" -#: config/mips/mips.c:15779 +#: config/mips/mips.c:15944 #, gcc-internal-format msgid "the %qs architecture does not support branch-likely instructions" msgstr "" -#: config/mips/mips.c:15819 +#: config/mips/mips.c:15984 #, gcc-internal-format msgid "%<-mno-gpopt%> needs %<-mexplicit-relocs%>" msgstr "" -#: config/mips/mips.c:15827 config/mips/mips.c:15830 +#: config/mips/mips.c:15992 config/mips/mips.c:15995 #, gcc-internal-format msgid "cannot use small-data accesses for %qs" msgstr "" -#: config/mips/mips.c:15844 +#: config/mips/mips.c:16009 #, gcc-internal-format msgid "%<-mips3d%> requires %<-mpaired-single%>" msgstr "" -#: config/mips/mips.c:15853 +#: config/mips/mips.c:16018 #, gcc-internal-format msgid "%qs must be used with %qs" msgstr "" -#: config/mips/mips.c:15860 +#: config/mips/mips.c:16025 #, gcc-internal-format msgid "the %qs architecture does not support paired-single instructions" msgstr "" -#: config/mips/mips.c:15866 +#: config/mips/mips.c:16031 #, gcc-internal-format msgid "%qs requires a target that provides the %qs instruction" msgstr "" -#: config/mips/mips.c:15971 +#: config/mips/mips.c:16136 #, gcc-internal-format msgid "%qs requires branch-likely instructions" msgstr "" -#: config/mips/mips.c:15975 +#: config/mips/mips.c:16140 #, gcc-internal-format msgid "the %qs architecture does not support the synci instruction" msgstr "" -#: config/mips/mips.c:16425 +#: config/mips/mips.c:16590 #, gcc-internal-format msgid "mips16 function profiling" msgstr "" @@ -25068,7 +25254,7 @@ msgstr "" msgid "-g option disabled" msgstr "" -#: config/pa/pa.c:8598 +#: config/pa/pa.c:8619 #, gcc-internal-format, gfc-internal-format msgid "" "alignment (%u) for %s exceeds maximum alignment for global common data. " @@ -25357,233 +25543,235 @@ msgstr "" msgid "target attribute or pragma changes double precision floating point" msgstr "" -#: config/rs6000/rs6000.c:7407 +#: config/rs6000/rs6000.c:7412 #, gcc-internal-format msgid "" "GCC vector returned by reference: non-standard ABI extension with no " "compatibility guarantee" msgstr "" -#: config/rs6000/rs6000.c:7545 +#: config/rs6000/rs6000.c:7550 #, gcc-internal-format msgid "" "cannot return value in vector register because altivec instructions are " "disabled, use -maltivec to enable them" msgstr "" -#: config/rs6000/rs6000.c:7888 +#: config/rs6000/rs6000.c:7893 #, gcc-internal-format msgid "" "cannot pass argument in vector register because altivec instructions are " "disabled, use -maltivec to enable them" msgstr "" -#: config/rs6000/rs6000.c:8814 +#: config/rs6000/rs6000.c:8819 #, gcc-internal-format msgid "" "GCC vector passed by reference: non-standard ABI extension with no " "compatibility guarantee" msgstr "" -#: config/rs6000/rs6000.c:9443 +#: config/rs6000/rs6000.c:9448 #, gcc-internal-format, gfc-internal-format msgid "internal error: builtin function %s already processed" msgstr "" -#: config/rs6000/rs6000.c:9816 +#: config/rs6000/rs6000.c:9821 #, gcc-internal-format msgid "argument 1 must be a 5-bit signed literal" msgstr "" -#: config/rs6000/rs6000.c:9919 config/rs6000/rs6000.c:10936 +#: config/rs6000/rs6000.c:9924 config/rs6000/rs6000.c:10941 #, gcc-internal-format msgid "argument 2 must be a 5-bit unsigned literal" msgstr "" -#: config/rs6000/rs6000.c:9958 +#: config/rs6000/rs6000.c:9963 #, gcc-internal-format msgid "argument 1 of __builtin_altivec_predicate must be a constant" msgstr "" -#: config/rs6000/rs6000.c:10010 +#: config/rs6000/rs6000.c:10015 #, gcc-internal-format msgid "argument 1 of __builtin_altivec_predicate is out of range" msgstr "" -#: config/rs6000/rs6000.c:10267 +#: config/rs6000/rs6000.c:10272 #, gcc-internal-format msgid "argument 3 must be a 4-bit unsigned literal" msgstr "" -#: config/rs6000/rs6000.c:10285 +#: config/rs6000/rs6000.c:10290 #, gcc-internal-format msgid "argument 3 must be a 2-bit unsigned literal" msgstr "" -#: config/rs6000/rs6000.c:10297 +#: config/rs6000/rs6000.c:10302 #, gcc-internal-format msgid "argument 3 must be a 1-bit unsigned literal" msgstr "" -#: config/rs6000/rs6000.c:10480 +#: config/rs6000/rs6000.c:10485 #, gcc-internal-format msgid "argument to %qs must be a 2-bit unsigned literal" msgstr "" -#: config/rs6000/rs6000.c:10621 +#: config/rs6000/rs6000.c:10626 #, gcc-internal-format msgid "unresolved overload for Altivec builtin %qF" msgstr "" -#: config/rs6000/rs6000.c:10727 +#: config/rs6000/rs6000.c:10732 #, gcc-internal-format msgid "argument to dss must be a 2-bit unsigned literal" msgstr "" -#: config/rs6000/rs6000.c:11056 +#: config/rs6000/rs6000.c:11061 #, gcc-internal-format msgid "argument 1 of __builtin_paired_predicate must be a constant" msgstr "" -#: config/rs6000/rs6000.c:11103 +#: config/rs6000/rs6000.c:11108 #, gcc-internal-format msgid "argument 1 of __builtin_paired_predicate is out of range" msgstr "" -#: config/rs6000/rs6000.c:11128 +#: config/rs6000/rs6000.c:11133 #, gcc-internal-format msgid "argument 1 of __builtin_spe_predicate must be a constant" msgstr "" -#: config/rs6000/rs6000.c:11200 +#: config/rs6000/rs6000.c:11205 #, gcc-internal-format msgid "argument 1 of __builtin_spe_predicate is out of range" msgstr "" -#: config/rs6000/rs6000.c:11282 +#: config/rs6000/rs6000.c:11287 #, gcc-internal-format, gfc-internal-format msgid "Builtin function %s is only valid for the cell processor" msgstr "" -#: config/rs6000/rs6000.c:11284 +#: config/rs6000/rs6000.c:11289 #, gcc-internal-format, gfc-internal-format msgid "Builtin function %s requires the -mvsx option" msgstr "" -#: config/rs6000/rs6000.c:11286 +#: config/rs6000/rs6000.c:11291 #, gcc-internal-format, gfc-internal-format msgid "Builtin function %s requires the -maltivec option" msgstr "" -#: config/rs6000/rs6000.c:11288 +#: config/rs6000/rs6000.c:11293 #, gcc-internal-format, gfc-internal-format msgid "Builtin function %s requires the -mpaired option" msgstr "" -#: config/rs6000/rs6000.c:11290 +#: config/rs6000/rs6000.c:11295 #, gcc-internal-format, gfc-internal-format msgid "Builtin function %s requires the -mspe option" msgstr "" -#: config/rs6000/rs6000.c:11292 +#: config/rs6000/rs6000.c:11297 #, gcc-internal-format, gfc-internal-format msgid "Builtin function %s is not supported with the current options" msgstr "" -#: config/rs6000/rs6000.c:12552 +#: config/rs6000/rs6000.c:12557 #, gcc-internal-format, gfc-internal-format msgid "internal error: builtin function %s had no type" msgstr "" -#: config/rs6000/rs6000.c:12559 +#: config/rs6000/rs6000.c:12564 #, gcc-internal-format, gfc-internal-format msgid "internal error: builtin function %s had an unexpected return type %s" msgstr "" -#: config/rs6000/rs6000.c:12575 +#: config/rs6000/rs6000.c:12580 #, gcc-internal-format, gfc-internal-format msgid "" "internal error: builtin function %s, argument %d had unexpected argument " "type %s" msgstr "" -#: config/rs6000/rs6000.c:18575 +#: config/rs6000/rs6000.c:18580 #, gcc-internal-format msgid "stack frame too large" msgstr "" -#: config/rs6000/rs6000.c:22049 +#: config/rs6000/rs6000.c:22054 #, gcc-internal-format msgid "no profiling of 64-bit code for this ABI" msgstr "" -#: config/rs6000/rs6000.c:24034 +#: config/rs6000/rs6000.c:24039 #, gcc-internal-format -msgid "-mno-r11 must not be used if you have trampolines" +msgid "" +"You cannot take the address of a nested function if you use the -mno-" +"pointers-to-nested-functions option." msgstr "" -#: config/rs6000/rs6000.c:24114 +#: config/rs6000/rs6000.c:24120 #, gcc-internal-format msgid "use of %<long double%> in AltiVec types is invalid" msgstr "" -#: config/rs6000/rs6000.c:24116 +#: config/rs6000/rs6000.c:24122 #, gcc-internal-format msgid "use of boolean types in AltiVec types is invalid" msgstr "" -#: config/rs6000/rs6000.c:24118 +#: config/rs6000/rs6000.c:24124 #, gcc-internal-format msgid "use of %<complex%> in AltiVec types is invalid" msgstr "" -#: config/rs6000/rs6000.c:24120 +#: config/rs6000/rs6000.c:24126 #, gcc-internal-format msgid "use of decimal floating point types in AltiVec types is invalid" msgstr "" -#: config/rs6000/rs6000.c:24126 +#: config/rs6000/rs6000.c:24132 #, gcc-internal-format msgid "" "use of %<long%> in AltiVec types is invalid for 64-bit code without -mvsx" msgstr "" -#: config/rs6000/rs6000.c:24129 +#: config/rs6000/rs6000.c:24135 #, gcc-internal-format msgid "use of %<long%> in AltiVec types is deprecated; use %<int%>" msgstr "" -#: config/rs6000/rs6000.c:24134 +#: config/rs6000/rs6000.c:24140 #, gcc-internal-format msgid "use of %<long long%> in AltiVec types is invalid without -mvsx" msgstr "" -#: config/rs6000/rs6000.c:24137 +#: config/rs6000/rs6000.c:24143 #, gcc-internal-format msgid "use of %<double%> in AltiVec types is invalid without -mvsx" msgstr "" -#: config/rs6000/rs6000.c:26976 +#: config/rs6000/rs6000.c:26982 #, gcc-internal-format, gfc-internal-format msgid "emitting microcode insn %s\t[%s] #%d" msgstr "" -#: config/rs6000/rs6000.c:26980 +#: config/rs6000/rs6000.c:26986 #, gcc-internal-format, gfc-internal-format msgid "emitting conditional microcode insn %s\t[%s] #%d" msgstr "" -#: config/rs6000/rs6000.c:27204 +#: config/rs6000/rs6000.c:27210 #, gcc-internal-format, gfc-internal-format msgid "invalid cpu \"%s\" for %s\"%s\"%s" msgstr "" -#: config/rs6000/rs6000.c:27207 +#: config/rs6000/rs6000.c:27213 #, gcc-internal-format, gfc-internal-format msgid "%s\"%s\"%s is not allowed" msgstr "" -#: config/rs6000/rs6000.c:27209 +#: config/rs6000/rs6000.c:27215 #, gcc-internal-format, gfc-internal-format msgid "%s\"%s\"%s is invalid" msgstr "" @@ -25757,56 +25945,56 @@ msgstr "" msgid "64-bit ABI not supported in ESA/390 mode" msgstr "" -#: config/s390/s390.c:1548 +#: config/s390/s390.c:1553 #, gcc-internal-format, gfc-internal-format msgid "hardware decimal floating point instructions not available on %s" msgstr "" -#: config/s390/s390.c:1551 +#: config/s390/s390.c:1556 #, gcc-internal-format msgid "" "hardware decimal floating point instructions not available in ESA/390 mode" msgstr "" -#: config/s390/s390.c:1561 +#: config/s390/s390.c:1566 #, gcc-internal-format msgid "-mhard-dfp can%'t be used in conjunction with -msoft-float" msgstr "" -#: config/s390/s390.c:1585 +#: config/s390/s390.c:1590 #, gcc-internal-format msgid "" "-mbackchain -mpacked-stack -mhard-float are not supported in combination" msgstr "" -#: config/s390/s390.c:1591 +#: config/s390/s390.c:1596 #, gcc-internal-format msgid "stack size must be greater than the stack guard value" msgstr "" -#: config/s390/s390.c:1593 +#: config/s390/s390.c:1598 #, gcc-internal-format msgid "stack size must not be greater than 64k" msgstr "" -#: config/s390/s390.c:1596 +#: config/s390/s390.c:1601 #, gcc-internal-format msgid "-mstack-guard implies use of -mstack-size" msgstr "" -#: config/s390/s390.c:7365 +#: config/s390/s390.c:7370 #, gcc-internal-format msgid "total size of local variables exceeds architecture limit" msgstr "" -#: config/s390/s390.c:8072 +#: config/s390/s390.c:8077 #, gcc-internal-format msgid "" "frame size of function %qs is %wd bytes exceeding user provided stack limit " "of %d bytes. An unconditional trap is added." msgstr "" -#: config/s390/s390.c:8087 +#: config/s390/s390.c:8092 #, gcc-internal-format msgid "" "frame size of function %qs is %wd bytes which is more than half the stack " @@ -25814,12 +26002,12 @@ msgid "" "function." msgstr "" -#: config/s390/s390.c:8115 +#: config/s390/s390.c:8120 #, gcc-internal-format msgid "frame size of %qs is %wd bytes" msgstr "" -#: config/s390/s390.c:8119 +#: config/s390/s390.c:8124 #, gcc-internal-format msgid "%qs uses dynamic stack allocation" msgstr "" @@ -25836,53 +26024,53 @@ msgid "" "outgoing-args for correctness" msgstr "" -#: config/sh/sh.c:7655 +#: config/sh/sh.c:7680 #, gcc-internal-format msgid "__builtin_saveregs not supported by this subtarget" msgstr "" -#: config/sh/sh.c:8821 +#: config/sh/sh.c:8846 #, gcc-internal-format msgid "%qE attribute only applies to interrupt functions" msgstr "" -#: config/sh/sh.c:8879 +#: config/sh/sh.c:8904 #, gcc-internal-format msgid "%qE attribute is supported only for SH2A" msgstr "" -#: config/sh/sh.c:8909 +#: config/sh/sh.c:8934 #, gcc-internal-format msgid "attribute interrupt_handler is not compatible with -m5-compact" msgstr "" -#: config/sh/sh.c:8926 +#: config/sh/sh.c:8951 #, gcc-internal-format msgid "%qE attribute only applies to SH2A" msgstr "" -#: config/sh/sh.c:8948 +#: config/sh/sh.c:8973 #, gcc-internal-format msgid "%qE attribute argument should be between 0 to 255" msgstr "" #. The argument must be a constant string. -#: config/sh/sh.c:9021 +#: config/sh/sh.c:9046 #, gcc-internal-format msgid "%qE attribute argument not a string constant" msgstr "" -#: config/sh/sh.c:11601 +#: config/sh/sh.c:11626 #, gcc-internal-format msgid "r0 needs to be available as a call-clobbered register" msgstr "" -#: config/sh/sh.c:11622 +#: config/sh/sh.c:11647 #, gcc-internal-format msgid "need a second call-clobbered general purpose register" msgstr "" -#: config/sh/sh.c:11630 +#: config/sh/sh.c:11655 #, gcc-internal-format msgid "need a call-clobbered target register" msgstr "" @@ -26004,6 +26192,16 @@ msgstr "" msgid "__BELOW100__ attribute not allowed with auto storage class" msgstr "" +#: config/tilegx/tilegx.c:3397 config/tilepro/tilepro.c:3101 +#, gcc-internal-format +msgid "bad builtin icode" +msgstr "" + +#: config/tilegx/tilegx.c:3438 config/tilepro/tilepro.c:3127 +#, gcc-internal-format +msgid "operand must be an immediate of the right size" +msgstr "" + #: config/v850/v850-c.c:67 #, gcc-internal-format msgid "#pragma GHS endXXXX found without previous startXXX" @@ -26214,38 +26412,38 @@ msgstr "" msgid "-fexcess-precision=standard for Ada" msgstr "" -#: ada/gcc-interface/utils.c:5289 ada/gcc-interface/utils.c:5464 -#: ada/gcc-interface/utils.c:5506 ada/gcc-interface/utils.c:5560 +#: ada/gcc-interface/utils.c:5295 ada/gcc-interface/utils.c:5470 +#: ada/gcc-interface/utils.c:5512 ada/gcc-interface/utils.c:5566 #, gcc-internal-format msgid "%qs attribute ignored" msgstr "" -#: ada/gcc-interface/utils.c:5407 +#: ada/gcc-interface/utils.c:5413 #, gcc-internal-format msgid "%qs attribute requires prototypes with named arguments" msgstr "" -#: ada/gcc-interface/utils.c:5416 +#: ada/gcc-interface/utils.c:5422 #, gcc-internal-format msgid "%qs attribute only applies to variadic functions" msgstr "" -#: ada/gcc-interface/utils.c:5487 +#: ada/gcc-interface/utils.c:5493 #, gcc-internal-format msgid "%qE attribute has no effect" msgstr "" -#: ada/gcc-interface/utils.c:5593 +#: ada/gcc-interface/utils.c:5599 #, gcc-internal-format msgid "invalid vector type for attribute %qs" msgstr "" -#: ada/gcc-interface/utils.c:5656 +#: ada/gcc-interface/utils.c:5662 #, gcc-internal-format msgid "attribute %qs applies to array types only" msgstr "" -#: ada/gcc-interface/utils.c:5683 +#: ada/gcc-interface/utils.c:5689 #, gcc-internal-format msgid "invalid element type for attribute %qs" msgstr "" @@ -26261,7 +26459,7 @@ msgstr "" msgid " no known conversion for argument %d from %qT to %qT" msgstr "" -#: cp/call.c:3125 cp/pt.c:5560 +#: cp/call.c:3125 cp/pt.c:5562 #, gcc-internal-format, gfc-internal-format msgid " candidate expects %d argument, %d provided" msgid_plural " candidate expects %d arguments, %d provided" @@ -26595,7 +26793,7 @@ msgstr "" msgid "cannot bind rvalue %qE to %qT" msgstr "" -#: cp/call.c:6012 cp/cvt.c:1643 +#: cp/call.c:6012 cp/cvt.c:1654 #, gcc-internal-format msgid "" "scoped enum %qT will not promote to an integral type in a future version of " @@ -26701,7 +26899,7 @@ msgstr "" msgid "passing %qT chooses %qT over %qT" msgstr "" -#: cp/call.c:8055 cp/name-lookup.c:5488 +#: cp/call.c:8055 cp/name-lookup.c:5485 #, gcc-internal-format msgid " in call to %qD" msgstr "" @@ -27054,159 +27252,159 @@ msgid "" "has no constexpr constructor that is not a copy or move constructor" msgstr "" -#: cp/class.c:4924 +#: cp/class.c:4944 #, gcc-internal-format msgid " base class %qT of %q+T is non-literal" msgstr "" -#: cp/class.c:4938 +#: cp/class.c:4958 #, gcc-internal-format msgid " non-static data member %q+D has non-literal type" msgstr "" -#: cp/class.c:5050 +#: cp/class.c:5070 #, gcc-internal-format msgid "non-static reference %q+#D in class without a constructor" msgstr "" -#: cp/class.c:5055 +#: cp/class.c:5075 #, gcc-internal-format msgid "non-static const member %q+#D in class without a constructor" msgstr "" #. If the function is defaulted outside the class, we just #. give the synthesis error. -#: cp/class.c:5081 +#: cp/class.c:5101 #, gcc-internal-format msgid "" "%q+D declared to take const reference, but implicit declaration would take " "non-const" msgstr "" -#: cp/class.c:5084 +#: cp/class.c:5104 #, gcc-internal-format msgid "" "%q+D declared to take non-const reference cannot be defaulted in the class " "body" msgstr "" -#: cp/class.c:5308 +#: cp/class.c:5328 #, gcc-internal-format msgid "" "offset of virtual base %qT is not ABI-compliant and may change in a future " "version of GCC" msgstr "" -#: cp/class.c:5409 +#: cp/class.c:5429 #, gcc-internal-format msgid "direct base %qT inaccessible in %qT due to ambiguity" msgstr "" -#: cp/class.c:5421 +#: cp/class.c:5441 #, gcc-internal-format msgid "virtual base %qT inaccessible in %qT due to ambiguity" msgstr "" -#: cp/class.c:5607 +#: cp/class.c:5627 #, gcc-internal-format msgid "" "size assigned to %qT may not be ABI-compliant and may change in a future " "version of GCC" msgstr "" -#: cp/class.c:5647 +#: cp/class.c:5667 #, gcc-internal-format msgid "" "the offset of %qD may not be ABI-compliant and may change in a future " "version of GCC" msgstr "" -#: cp/class.c:5675 +#: cp/class.c:5695 #, gcc-internal-format msgid "" "offset of %q+D is not ABI-compliant and may change in a future version of GCC" msgstr "" -#: cp/class.c:5685 +#: cp/class.c:5705 #, gcc-internal-format msgid "" "%q+D contains empty classes which may cause base classes to be placed at " "different locations in a future version of GCC" msgstr "" -#: cp/class.c:5773 +#: cp/class.c:5793 #, gcc-internal-format msgid "" "layout of classes derived from empty class %qT may change in a future " "version of GCC" msgstr "" -#: cp/class.c:5942 cp/decl.c:11802 cp/parser.c:18577 +#: cp/class.c:5962 cp/decl.c:11816 cp/parser.c:18578 #, gcc-internal-format msgid "redefinition of %q#T" msgstr "" -#: cp/class.c:6093 +#: cp/class.c:6113 #, gcc-internal-format msgid "%q#T has virtual functions and accessible non-virtual destructor" msgstr "" -#: cp/class.c:6119 +#: cp/class.c:6139 #, gcc-internal-format msgid "type transparent class %qT does not have any fields" msgstr "" -#: cp/class.c:6125 +#: cp/class.c:6145 #, gcc-internal-format msgid "type transparent class %qT has base classes" msgstr "" -#: cp/class.c:6129 +#: cp/class.c:6149 #, gcc-internal-format msgid "type transparent class %qT has virtual functions" msgstr "" -#: cp/class.c:6231 +#: cp/class.c:6251 #, gcc-internal-format msgid "trying to finish struct, but kicked out due to previous parse errors" msgstr "" -#: cp/class.c:6737 +#: cp/class.c:6757 #, gcc-internal-format msgid "language string %<\"%E\"%> not recognized" msgstr "" -#: cp/class.c:6827 +#: cp/class.c:6847 #, gcc-internal-format msgid "cannot resolve overloaded function %qD based on conversion to type %qT" msgstr "" -#: cp/class.c:6951 +#: cp/class.c:6971 #, gcc-internal-format msgid "no matches converting function %qD to type %q#T" msgstr "" -#: cp/class.c:6974 +#: cp/class.c:6994 #, gcc-internal-format msgid "converting overloaded function %qD to type %q#T is ambiguous" msgstr "" -#: cp/class.c:7001 +#: cp/class.c:7021 #, gcc-internal-format msgid "assuming pointer to member %qD" msgstr "" -#: cp/class.c:7004 +#: cp/class.c:7024 #, gcc-internal-format msgid "(a pointer to member can only be formed with %<&%E%>)" msgstr "" -#: cp/class.c:7066 cp/class.c:7100 +#: cp/class.c:7086 cp/class.c:7120 #, gcc-internal-format msgid "not enough type information" msgstr "" -#: cp/class.c:7083 cp/cvt.c:169 cp/cvt.c:194 cp/cvt.c:244 +#: cp/class.c:7103 cp/cvt.c:169 cp/cvt.c:194 cp/cvt.c:244 #, gcc-internal-format msgid "cannot convert %qE from type %qT to type %qT" msgstr "" @@ -27216,12 +27414,12 @@ msgstr "" #. A name N used in a class S shall refer to the same declaration #. in its context and when re-evaluated in the completed scope of #. S. -#: cp/class.c:7394 cp/decl.c:1287 +#: cp/class.c:7414 cp/decl.c:1287 #, gcc-internal-format msgid "declaration of %q#D" msgstr "" -#: cp/class.c:7395 +#: cp/class.c:7415 #, gcc-internal-format msgid "changes meaning of %qD from %q+#D" msgstr "" @@ -27608,12 +27806,17 @@ msgstr "" msgid "converting NULL to non-pointer type" msgstr "" -#: cp/cvt.c:1584 +#: cp/cvt.c:1546 cp/cvt.c:1595 #, gcc-internal-format msgid "ambiguous default type conversion from %qT" msgstr "" -#: cp/cvt.c:1586 +#: cp/cvt.c:1548 +#, gcc-internal-format +msgid " candidate conversions include %qD" +msgstr "" + +#: cp/cvt.c:1597 #, gcc-internal-format msgid " candidate conversions include %qD and %qD" msgstr "" @@ -27856,27 +28059,27 @@ msgid "conflicts with previous declaration here" msgstr "" #. Reject two definitions. -#: cp/decl.c:2364 cp/decl.c:2393 cp/decl.c:2422 cp/decl.c:2439 cp/decl.c:2511 +#: cp/decl.c:2369 cp/decl.c:2398 cp/decl.c:2427 cp/decl.c:2444 cp/decl.c:2516 #, gcc-internal-format msgid "redefinition of %q#D" msgstr "" -#: cp/decl.c:2380 +#: cp/decl.c:2385 #, gcc-internal-format msgid "%qD conflicts with used function" msgstr "" -#: cp/decl.c:2390 +#: cp/decl.c:2395 #, gcc-internal-format msgid "%q#D not declared in class" msgstr "" -#: cp/decl.c:2404 cp/decl.c:2449 +#: cp/decl.c:2409 cp/decl.c:2454 #, gcc-internal-format msgid "%q+D redeclared inline with %<gnu_inline%> attribute" msgstr "" -#: cp/decl.c:2407 cp/decl.c:2452 +#: cp/decl.c:2412 cp/decl.c:2457 #, gcc-internal-format msgid "%q+D redeclared inline without %<gnu_inline%> attribute" msgstr "" @@ -27884,344 +28087,344 @@ msgstr "" #. is_primary= #. is_partial= #. is_friend_decl= -#: cp/decl.c:2468 +#: cp/decl.c:2473 #, gcc-internal-format msgid "redeclaration of friend %q#D may not have default template arguments" msgstr "" -#: cp/decl.c:2482 +#: cp/decl.c:2487 #, gcc-internal-format msgid "thread-local declaration of %q#D follows non-thread-local declaration" msgstr "" -#: cp/decl.c:2485 +#: cp/decl.c:2490 #, gcc-internal-format msgid "non-thread-local declaration of %q#D follows thread-local declaration" msgstr "" -#: cp/decl.c:2500 cp/decl.c:2519 cp/name-lookup.c:550 cp/name-lookup.c:1132 +#: cp/decl.c:2505 cp/decl.c:2524 cp/name-lookup.c:550 cp/name-lookup.c:1132 #, gcc-internal-format msgid "redeclaration of %q#D" msgstr "" -#: cp/decl.c:2674 +#: cp/decl.c:2679 #, gcc-internal-format msgid "jump to label %qD" msgstr "" -#: cp/decl.c:2676 +#: cp/decl.c:2681 #, gcc-internal-format msgid "jump to case label" msgstr "" -#: cp/decl.c:2678 cp/decl.c:2820 cp/decl.c:2860 +#: cp/decl.c:2683 cp/decl.c:2825 cp/decl.c:2865 #, gcc-internal-format msgid " from here" msgstr "" -#: cp/decl.c:2697 cp/decl.c:2863 +#: cp/decl.c:2702 cp/decl.c:2868 #, gcc-internal-format msgid " exits OpenMP structured block" msgstr "" -#: cp/decl.c:2719 +#: cp/decl.c:2724 #, gcc-internal-format msgid " crosses initialization of %q+#D" msgstr "" -#: cp/decl.c:2721 cp/decl.c:2837 +#: cp/decl.c:2726 cp/decl.c:2842 #, gcc-internal-format msgid " enters scope of %q+#D which has non-trivial destructor" msgstr "" -#: cp/decl.c:2735 cp/decl.c:2842 +#: cp/decl.c:2740 cp/decl.c:2847 #, gcc-internal-format msgid " enters try block" msgstr "" #. Can't skip init of __exception_info. -#: cp/decl.c:2737 cp/decl.c:2831 cp/decl.c:2844 +#: cp/decl.c:2742 cp/decl.c:2836 cp/decl.c:2849 #, gcc-internal-format msgid " enters catch block" msgstr "" -#: cp/decl.c:2747 cp/decl.c:2847 +#: cp/decl.c:2752 cp/decl.c:2852 #, gcc-internal-format msgid " enters OpenMP structured block" msgstr "" -#: cp/decl.c:2819 cp/decl.c:2859 +#: cp/decl.c:2824 cp/decl.c:2864 #, gcc-internal-format msgid "jump to label %q+D" msgstr "" -#: cp/decl.c:2835 +#: cp/decl.c:2840 #, gcc-internal-format msgid " skips initialization of %q+#D" msgstr "" -#: cp/decl.c:2912 +#: cp/decl.c:2917 #, gcc-internal-format msgid "label named wchar_t" msgstr "" -#: cp/decl.c:3220 +#: cp/decl.c:3225 #, gcc-internal-format msgid "%qD is not a type" msgstr "" -#: cp/decl.c:3226 cp/parser.c:5049 +#: cp/decl.c:3231 cp/parser.c:5049 #, gcc-internal-format msgid "%qD used without template parameters" msgstr "" -#: cp/decl.c:3235 +#: cp/decl.c:3240 #, gcc-internal-format msgid "%q#T is not a class" msgstr "" -#: cp/decl.c:3259 cp/decl.c:3349 +#: cp/decl.c:3264 cp/decl.c:3354 #, gcc-internal-format msgid "no class template named %q#T in %q#T" msgstr "" -#: cp/decl.c:3260 +#: cp/decl.c:3265 #, gcc-internal-format msgid "no type named %q#T in %q#T" msgstr "" -#: cp/decl.c:3272 +#: cp/decl.c:3277 #, gcc-internal-format msgid "lookup of %qT in %qT is ambiguous" msgstr "" -#: cp/decl.c:3281 +#: cp/decl.c:3286 #, gcc-internal-format msgid "%<typename %T::%D%> names %q#T, which is not a class template" msgstr "" -#: cp/decl.c:3288 +#: cp/decl.c:3293 #, gcc-internal-format msgid "%<typename %T::%D%> names %q#T, which is not a type" msgstr "" -#: cp/decl.c:3358 +#: cp/decl.c:3363 #, gcc-internal-format msgid "template parameters do not match template" msgstr "" -#: cp/decl.c:3359 cp/friend.c:327 cp/friend.c:335 +#: cp/decl.c:3364 cp/friend.c:327 cp/friend.c:335 #, gcc-internal-format msgid "%q+D declared here" msgstr "" -#: cp/decl.c:4077 +#: cp/decl.c:4082 #, gcc-internal-format msgid "an anonymous struct cannot have function members" msgstr "" -#: cp/decl.c:4080 +#: cp/decl.c:4085 #, gcc-internal-format msgid "an anonymous union cannot have function members" msgstr "" -#: cp/decl.c:4098 +#: cp/decl.c:4103 #, gcc-internal-format msgid "member %q+#D with constructor not allowed in anonymous aggregate" msgstr "" -#: cp/decl.c:4101 +#: cp/decl.c:4106 #, gcc-internal-format msgid "member %q+#D with destructor not allowed in anonymous aggregate" msgstr "" -#: cp/decl.c:4104 +#: cp/decl.c:4109 #, gcc-internal-format msgid "" "member %q+#D with copy assignment operator not allowed in anonymous aggregate" msgstr "" -#: cp/decl.c:4129 +#: cp/decl.c:4134 #, gcc-internal-format msgid "multiple types in one declaration" msgstr "" -#: cp/decl.c:4133 +#: cp/decl.c:4138 #, gcc-internal-format msgid "redeclaration of C++ built-in type %qT" msgstr "" -#: cp/decl.c:4150 +#: cp/decl.c:4155 #, gcc-internal-format msgid "%<auto%> can only be specified for variables or function declarations" msgstr "" -#: cp/decl.c:4176 +#: cp/decl.c:4181 #, gcc-internal-format msgid "missing type-name in typedef-declaration" msgstr "" -#: cp/decl.c:4183 +#: cp/decl.c:4188 #, gcc-internal-format msgid "ISO C++ prohibits anonymous structs" msgstr "" -#: cp/decl.c:4190 +#: cp/decl.c:4195 #, gcc-internal-format msgid "%qs can only be specified for functions" msgstr "" -#: cp/decl.c:4196 +#: cp/decl.c:4201 #, gcc-internal-format msgid "%<friend%> can only be specified inside a class" msgstr "" -#: cp/decl.c:4198 +#: cp/decl.c:4203 #, gcc-internal-format msgid "%<explicit%> can only be specified for constructors" msgstr "" -#: cp/decl.c:4200 +#: cp/decl.c:4205 #, gcc-internal-format msgid "a storage class can only be specified for objects and functions" msgstr "" -#: cp/decl.c:4206 +#: cp/decl.c:4211 #, gcc-internal-format msgid "qualifiers can only be specified for objects and functions" msgstr "" -#: cp/decl.c:4209 +#: cp/decl.c:4214 #, gcc-internal-format msgid "%<typedef%> was ignored in this declaration" msgstr "" -#: cp/decl.c:4211 +#: cp/decl.c:4216 #, gcc-internal-format msgid "%<constexpr%> cannot be used for type declarations" msgstr "" -#: cp/decl.c:4240 +#: cp/decl.c:4226 #, gcc-internal-format -msgid "attribute ignored in declaration of %q+#T" +msgid "attribute ignored in declaration of %q#T" msgstr "" -#: cp/decl.c:4241 +#: cp/decl.c:4227 #, gcc-internal-format -msgid "attribute for %q+#T must follow the %qs keyword" +msgid "attribute for %q#T must follow the %qs keyword" msgstr "" -#: cp/decl.c:4286 +#: cp/decl.c:4296 #, gcc-internal-format msgid "ignoring attributes applied to class type %qT outside of definition" msgstr "" #. A template type parameter or other dependent type. -#: cp/decl.c:4290 +#: cp/decl.c:4300 #, gcc-internal-format msgid "" "ignoring attributes applied to dependent type %qT without an associated " "declaration" msgstr "" -#: cp/decl.c:4360 cp/decl2.c:815 +#: cp/decl.c:4370 cp/decl2.c:815 #, gcc-internal-format msgid "typedef %qD is initialized (use decltype instead)" msgstr "" -#: cp/decl.c:4378 +#: cp/decl.c:4388 #, gcc-internal-format msgid "declaration of %q#D has %<extern%> and is initialized" msgstr "" -#: cp/decl.c:4407 +#: cp/decl.c:4417 #, gcc-internal-format msgid "definition of %q#D is marked %<dllimport%>" msgstr "" -#: cp/decl.c:4426 +#: cp/decl.c:4436 #, gcc-internal-format msgid "%q#D is not a static member of %q#T" msgstr "" -#: cp/decl.c:4432 +#: cp/decl.c:4442 #, gcc-internal-format msgid "ISO C++ does not permit %<%T::%D%> to be defined as %<%T::%D%>" msgstr "" -#: cp/decl.c:4441 +#: cp/decl.c:4451 #, gcc-internal-format msgid "" "template header not allowed in member definition of explicitly specialized " "class" msgstr "" -#: cp/decl.c:4449 +#: cp/decl.c:4459 #, gcc-internal-format msgid "duplicate initialization of %qD" msgstr "" -#: cp/decl.c:4454 +#: cp/decl.c:4464 #, gcc-internal-format msgid "%qD declared %<constexpr%> outside its class" msgstr "" -#: cp/decl.c:4493 +#: cp/decl.c:4503 #, gcc-internal-format msgid "declaration of %q#D outside of class is not definition" msgstr "" -#: cp/decl.c:4588 +#: cp/decl.c:4598 #, gcc-internal-format msgid "variable %q#D has initializer but incomplete type" msgstr "" -#: cp/decl.c:4594 cp/decl.c:5389 +#: cp/decl.c:4604 cp/decl.c:5399 #, gcc-internal-format msgid "elements of array %q#D have incomplete type" msgstr "" -#: cp/decl.c:4601 cp/decl.c:5999 +#: cp/decl.c:4611 cp/decl.c:6009 #, gcc-internal-format msgid "declaration of %q#D has no initializer" msgstr "" -#: cp/decl.c:4603 +#: cp/decl.c:4613 #, gcc-internal-format msgid "aggregate %q#D has incomplete type and cannot be defined" msgstr "" -#: cp/decl.c:4637 +#: cp/decl.c:4647 #, gcc-internal-format msgid "%qD declared as reference but not initialized" msgstr "" -#: cp/decl.c:4678 +#: cp/decl.c:4688 #, gcc-internal-format msgid "name used in a GNU-style designated initializer for an array" msgstr "" -#: cp/decl.c:4686 cp/typeck2.c:1084 cp/typeck2.c:1189 +#: cp/decl.c:4696 cp/typeck2.c:1084 cp/typeck2.c:1189 #, gcc-internal-format msgid "non-trivial designated initializers not supported" msgstr "" -#: cp/decl.c:4691 +#: cp/decl.c:4701 #, gcc-internal-format msgid "name %qD used in a GNU-style designated initializer for an array" msgstr "" -#: cp/decl.c:4739 +#: cp/decl.c:4749 #, gcc-internal-format msgid "initializer fails to determine size of %qD" msgstr "" -#: cp/decl.c:4746 +#: cp/decl.c:4756 #, gcc-internal-format msgid "array size missing in %qD" msgstr "" -#: cp/decl.c:4758 +#: cp/decl.c:4768 #, gcc-internal-format msgid "zero-size array %qD" msgstr "" @@ -28229,408 +28432,408 @@ msgstr "" #. An automatic variable with an incomplete type: that is an error. #. Don't talk about array types here, since we took care of that #. message in grokdeclarator. -#: cp/decl.c:4801 +#: cp/decl.c:4811 #, gcc-internal-format msgid "storage size of %qD isn%'t known" msgstr "" -#: cp/decl.c:4824 +#: cp/decl.c:4834 #, gcc-internal-format msgid "storage size of %qD isn%'t constant" msgstr "" -#: cp/decl.c:4870 +#: cp/decl.c:4880 #, gcc-internal-format msgid "" "sorry: semantics of inline function static data %q+#D are wrong (you%'ll " "wind up with multiple copies)" msgstr "" -#: cp/decl.c:4874 +#: cp/decl.c:4884 #, gcc-internal-format msgid " you can work around this by removing the initializer" msgstr "" -#: cp/decl.c:4905 +#: cp/decl.c:4915 #, gcc-internal-format msgid "uninitialized const %qD" msgstr "" -#: cp/decl.c:4912 +#: cp/decl.c:4922 #, gcc-internal-format msgid "%q#T has no user-provided default constructor" msgstr "" -#: cp/decl.c:4916 +#: cp/decl.c:4926 #, gcc-internal-format msgid "" "constructor is not user-provided because it is explicitly defaulted in the " "class body" msgstr "" -#: cp/decl.c:4918 +#: cp/decl.c:4928 #, gcc-internal-format msgid "and the implicitly-defined constructor does not initialize %q+#D" msgstr "" -#: cp/decl.c:5037 +#: cp/decl.c:5047 #, gcc-internal-format msgid "invalid type %qT as initializer for a vector of type %qT" msgstr "" -#: cp/decl.c:5078 +#: cp/decl.c:5088 #, gcc-internal-format msgid "initializer for %qT must be brace-enclosed" msgstr "" -#: cp/decl.c:5095 +#: cp/decl.c:5105 #, gcc-internal-format msgid "%<[%E] =%> used in a GNU-style designated initializer for class %qT" msgstr "" -#: cp/decl.c:5105 +#: cp/decl.c:5115 #, gcc-internal-format msgid "%qT has no non-static data member named %qD" msgstr "" -#: cp/decl.c:5146 +#: cp/decl.c:5156 #, gcc-internal-format msgid "C99 designator %qE outside aggregate initializer" msgstr "" -#: cp/decl.c:5183 cp/decl.c:5368 cp/typeck2.c:1071 cp/typeck2.c:1270 +#: cp/decl.c:5193 cp/decl.c:5378 cp/typeck2.c:1071 cp/typeck2.c:1270 #: cp/typeck2.c:1299 cp/typeck2.c:1346 #, gcc-internal-format msgid "too many initializers for %qT" msgstr "" -#: cp/decl.c:5216 +#: cp/decl.c:5226 #, gcc-internal-format msgid "braces around scalar initializer for type %qT" msgstr "" -#: cp/decl.c:5309 +#: cp/decl.c:5319 #, gcc-internal-format msgid "missing braces around initializer for %qT" msgstr "" -#: cp/decl.c:5391 +#: cp/decl.c:5401 #, gcc-internal-format msgid "elements of array %q#T have incomplete type" msgstr "" -#: cp/decl.c:5400 +#: cp/decl.c:5410 #, gcc-internal-format msgid "variable-sized object %qD may not be initialized" msgstr "" -#: cp/decl.c:5402 +#: cp/decl.c:5412 #, gcc-internal-format msgid "variable-sized compound literal" msgstr "" -#: cp/decl.c:5457 +#: cp/decl.c:5467 #, gcc-internal-format msgid "%q#D has incomplete type" msgstr "" -#: cp/decl.c:5477 +#: cp/decl.c:5487 #, gcc-internal-format msgid "scalar object %qD requires one element in initializer" msgstr "" -#: cp/decl.c:5520 +#: cp/decl.c:5530 #, gcc-internal-format msgid "in C++98 %qD must be initialized by constructor, not by %<{...}%>" msgstr "" -#: cp/decl.c:5600 +#: cp/decl.c:5610 #, gcc-internal-format msgid "array %qD initialized by parenthesized string literal %qE" msgstr "" -#: cp/decl.c:5627 +#: cp/decl.c:5637 #, gcc-internal-format msgid "initializer invalid for static member with constructor" msgstr "" -#: cp/decl.c:5629 +#: cp/decl.c:5639 #, gcc-internal-format msgid "non-constant in-class initialization invalid for static member %qD" msgstr "" -#: cp/decl.c:5633 +#: cp/decl.c:5643 #, gcc-internal-format msgid "(an out of class initialization is required)" msgstr "" -#: cp/decl.c:5968 +#: cp/decl.c:5978 #, gcc-internal-format msgid "assignment (not initialization) in declaration" msgstr "" -#: cp/decl.c:6126 +#: cp/decl.c:6136 #, gcc-internal-format msgid "shadowing previous type declaration of %q#D" msgstr "" -#: cp/decl.c:6158 +#: cp/decl.c:6168 #, gcc-internal-format msgid "%qD cannot be thread-local because it has non-trivial type %qT" msgstr "" -#: cp/decl.c:6200 +#: cp/decl.c:6210 #, gcc-internal-format msgid "Java object %qD not allocated with %<new%>" msgstr "" -#: cp/decl.c:6208 +#: cp/decl.c:6218 #, gcc-internal-format msgid "%qD is thread-local and so cannot be dynamically initialized" msgstr "" -#: cp/decl.c:6226 +#: cp/decl.c:6236 #, gcc-internal-format msgid "" "%qD cannot be initialized by a non-constant expression when being declared" msgstr "" -#: cp/decl.c:6274 +#: cp/decl.c:6284 #, gcc-internal-format msgid "non-static data member %qD has Java class type" msgstr "" -#: cp/decl.c:6339 +#: cp/decl.c:6349 #, gcc-internal-format msgid "function %q#D is initialized like a variable" msgstr "" -#: cp/decl.c:6938 +#: cp/decl.c:6948 #, gcc-internal-format msgid "initializer fails to determine size of %qT" msgstr "" -#: cp/decl.c:6942 +#: cp/decl.c:6952 #, gcc-internal-format msgid "array size missing in %qT" msgstr "" -#: cp/decl.c:6945 +#: cp/decl.c:6955 #, gcc-internal-format msgid "zero-size array %qT" msgstr "" -#: cp/decl.c:6961 +#: cp/decl.c:6971 #, gcc-internal-format msgid "destructor for alien class %qT cannot be a member" msgstr "" -#: cp/decl.c:6963 +#: cp/decl.c:6973 #, gcc-internal-format msgid "constructor for alien class %qT cannot be a member" msgstr "" -#: cp/decl.c:6987 +#: cp/decl.c:6997 #, gcc-internal-format msgid "%qD declared as a %<virtual%> variable" msgstr "" -#: cp/decl.c:6989 +#: cp/decl.c:6999 #, gcc-internal-format msgid "%qD declared as an %<inline%> variable" msgstr "" -#: cp/decl.c:6991 +#: cp/decl.c:7001 #, gcc-internal-format msgid "" "%<const%> and %<volatile%> function specifiers on %qD invalid in variable " "declaration" msgstr "" -#: cp/decl.c:6996 +#: cp/decl.c:7006 #, gcc-internal-format msgid "%qD declared as a %<virtual%> parameter" msgstr "" -#: cp/decl.c:6998 +#: cp/decl.c:7008 #, gcc-internal-format msgid "%qD declared as an %<inline%> parameter" msgstr "" -#: cp/decl.c:7000 +#: cp/decl.c:7010 #, gcc-internal-format msgid "" "%<const%> and %<volatile%> function specifiers on %qD invalid in parameter " "declaration" msgstr "" -#: cp/decl.c:7005 +#: cp/decl.c:7015 #, gcc-internal-format msgid "%qD declared as a %<virtual%> type" msgstr "" -#: cp/decl.c:7007 +#: cp/decl.c:7017 #, gcc-internal-format msgid "%qD declared as an %<inline%> type" msgstr "" -#: cp/decl.c:7009 +#: cp/decl.c:7019 #, gcc-internal-format msgid "" "%<const%> and %<volatile%> function specifiers on %qD invalid in type " "declaration" msgstr "" -#: cp/decl.c:7014 +#: cp/decl.c:7024 #, gcc-internal-format msgid "%qD declared as a %<virtual%> field" msgstr "" -#: cp/decl.c:7016 +#: cp/decl.c:7026 #, gcc-internal-format msgid "%qD declared as an %<inline%> field" msgstr "" -#: cp/decl.c:7018 +#: cp/decl.c:7028 #, gcc-internal-format msgid "" "%<const%> and %<volatile%> function specifiers on %qD invalid in field " "declaration" msgstr "" -#: cp/decl.c:7025 +#: cp/decl.c:7035 #, gcc-internal-format msgid "%q+D declared as a friend" msgstr "" -#: cp/decl.c:7031 +#: cp/decl.c:7041 #, gcc-internal-format msgid "%q+D declared with an exception specification" msgstr "" -#: cp/decl.c:7065 +#: cp/decl.c:7075 #, gcc-internal-format msgid "definition of %qD is not in namespace enclosing %qT" msgstr "" -#: cp/decl.c:7105 +#: cp/decl.c:7115 #, gcc-internal-format msgid "static member function %q#D declared with type qualifiers" msgstr "" -#: cp/decl.c:7204 +#: cp/decl.c:7214 #, gcc-internal-format msgid "defining explicit specialization %qD in friend declaration" msgstr "" #. Something like `template <class T> friend void f<T>()'. -#: cp/decl.c:7214 +#: cp/decl.c:7224 #, gcc-internal-format msgid "invalid use of template-id %qD in declaration of primary template" msgstr "" -#: cp/decl.c:7244 +#: cp/decl.c:7254 #, gcc-internal-format msgid "" "default arguments are not allowed in declaration of friend template " "specialization %qD" msgstr "" -#: cp/decl.c:7252 +#: cp/decl.c:7262 #, gcc-internal-format msgid "" "%<inline%> is not allowed in declaration of friend template specialization " "%qD" msgstr "" -#: cp/decl.c:7294 +#: cp/decl.c:7304 #, gcc-internal-format msgid "cannot declare %<::main%> to be a template" msgstr "" -#: cp/decl.c:7296 +#: cp/decl.c:7306 #, gcc-internal-format msgid "cannot declare %<::main%> to be inline" msgstr "" -#: cp/decl.c:7298 +#: cp/decl.c:7308 #, gcc-internal-format msgid "cannot declare %<::main%> to be static" msgstr "" -#: cp/decl.c:7326 +#: cp/decl.c:7336 #, gcc-internal-format msgid "" "anonymous type with no linkage used to declare function %q#D with linkage" msgstr "" -#: cp/decl.c:7330 cp/decl.c:7687 cp/decl2.c:3673 +#: cp/decl.c:7340 cp/decl.c:7697 cp/decl2.c:3673 #, gcc-internal-format msgid "" "%q+#D does not refer to the unqualified type, so it is not used for linkage" msgstr "" -#: cp/decl.c:7336 +#: cp/decl.c:7346 #, gcc-internal-format msgid "type %qT with no linkage used to declare function %q#D with linkage" msgstr "" -#: cp/decl.c:7358 +#: cp/decl.c:7368 #, gcc-internal-format msgid "static member function %qD cannot have cv-qualifier" msgstr "" -#: cp/decl.c:7359 +#: cp/decl.c:7369 #, gcc-internal-format msgid "non-member function %qD cannot have cv-qualifier" msgstr "" -#: cp/decl.c:7375 +#: cp/decl.c:7385 #, gcc-internal-format msgid "literal operator with C linkage" msgstr "" -#: cp/decl.c:7384 +#: cp/decl.c:7394 #, gcc-internal-format msgid "%qD has invalid argument list" msgstr "" -#: cp/decl.c:7392 +#: cp/decl.c:7402 #, gcc-internal-format msgid "integer suffix %<%s%> shadowed by implementation" msgstr "" -#: cp/decl.c:7398 +#: cp/decl.c:7408 #, gcc-internal-format msgid "floating point suffix %<%s%> shadowed by implementation" msgstr "" -#: cp/decl.c:7404 +#: cp/decl.c:7414 #, gcc-internal-format msgid "%qD must be a non-member function" msgstr "" -#: cp/decl.c:7448 +#: cp/decl.c:7458 #, gcc-internal-format msgid "%<::main%> must return %<int%>" msgstr "" -#: cp/decl.c:7490 +#: cp/decl.c:7500 #, gcc-internal-format msgid "definition of implicitly-declared %qD" msgstr "" -#: cp/decl.c:7495 +#: cp/decl.c:7505 #, gcc-internal-format msgid "definition of explicitly-defaulted %q+D" msgstr "" -#: cp/decl.c:7496 +#: cp/decl.c:7506 #, gcc-internal-format msgid "%q+#D explicitly defaulted here" msgstr "" -#: cp/decl.c:7513 cp/decl2.c:736 +#: cp/decl.c:7523 cp/decl2.c:736 #, gcc-internal-format msgid "no %q#D member function declared in class %qT" msgstr "" @@ -28639,432 +28842,432 @@ msgstr "" #. no linkage can only be used to declare extern "C" #. entities. Since it's not always an error in the #. ISO C++ 90 Standard, we only issue a warning. -#: cp/decl.c:7684 +#: cp/decl.c:7694 #, gcc-internal-format msgid "" "anonymous type with no linkage used to declare variable %q#D with linkage" msgstr "" -#: cp/decl.c:7693 +#: cp/decl.c:7703 #, gcc-internal-format msgid "type %qT with no linkage used to declare variable %q#D with linkage" msgstr "" -#: cp/decl.c:7816 +#: cp/decl.c:7826 #, gcc-internal-format msgid "in-class initialization of static data member %q#D of incomplete type" msgstr "" -#: cp/decl.c:7820 +#: cp/decl.c:7830 #, gcc-internal-format msgid "" "%<constexpr%> needed for in-class initialization of static data member %q#D " "of non-integral type" msgstr "" -#: cp/decl.c:7823 +#: cp/decl.c:7833 #, gcc-internal-format msgid "in-class initialization of static data member %q#D of non-literal type" msgstr "" -#: cp/decl.c:7836 +#: cp/decl.c:7846 #, gcc-internal-format msgid "" "invalid in-class initialization of static data member of non-integral type " "%qT" msgstr "" -#: cp/decl.c:7842 +#: cp/decl.c:7852 #, gcc-internal-format msgid "ISO C++ forbids in-class initialization of non-const static member %qD" msgstr "" -#: cp/decl.c:7846 +#: cp/decl.c:7856 #, gcc-internal-format msgid "" "ISO C++ forbids initialization of member constant %qD of non-integral type " "%qT" msgstr "" -#: cp/decl.c:7923 cp/decl.c:7951 +#: cp/decl.c:7933 cp/decl.c:7961 #, gcc-internal-format msgid "size of array %qD has non-integral type %qT" msgstr "" -#: cp/decl.c:7926 cp/decl.c:7953 +#: cp/decl.c:7936 cp/decl.c:7963 #, gcc-internal-format msgid "size of array has non-integral type %qT" msgstr "" -#: cp/decl.c:8003 +#: cp/decl.c:8013 #, gcc-internal-format msgid "size of array %qD is negative" msgstr "" -#: cp/decl.c:8005 +#: cp/decl.c:8015 #, gcc-internal-format msgid "size of array is negative" msgstr "" -#: cp/decl.c:8019 +#: cp/decl.c:8029 #, gcc-internal-format msgid "ISO C++ forbids zero-size array %qD" msgstr "" -#: cp/decl.c:8021 +#: cp/decl.c:8031 #, gcc-internal-format msgid "ISO C++ forbids zero-size array" msgstr "" -#: cp/decl.c:8033 +#: cp/decl.c:8043 #, gcc-internal-format msgid "size of array %qD is not an integral constant-expression" msgstr "" -#: cp/decl.c:8036 +#: cp/decl.c:8046 #, gcc-internal-format msgid "size of array is not an integral constant-expression" msgstr "" -#: cp/decl.c:8042 +#: cp/decl.c:8052 #, gcc-internal-format msgid "ISO C++ forbids variable length array %qD" msgstr "" -#: cp/decl.c:8044 +#: cp/decl.c:8054 #, gcc-internal-format msgid "ISO C++ forbids variable length array" msgstr "" -#: cp/decl.c:8050 +#: cp/decl.c:8060 #, gcc-internal-format msgid "variable length array %qD is used" msgstr "" -#: cp/decl.c:8088 +#: cp/decl.c:8098 #, gcc-internal-format msgid "overflow in array dimension" msgstr "" -#: cp/decl.c:8148 +#: cp/decl.c:8158 #, gcc-internal-format msgid "declaration of %qD as array of %<auto%>" msgstr "" -#: cp/decl.c:8156 +#: cp/decl.c:8166 #, gcc-internal-format msgid "declaration of %qD as array of void" msgstr "" -#: cp/decl.c:8158 +#: cp/decl.c:8168 #, gcc-internal-format msgid "creating array of void" msgstr "" -#: cp/decl.c:8163 +#: cp/decl.c:8173 #, gcc-internal-format msgid "declaration of %qD as array of functions" msgstr "" -#: cp/decl.c:8165 +#: cp/decl.c:8175 #, gcc-internal-format msgid "creating array of functions" msgstr "" -#: cp/decl.c:8170 +#: cp/decl.c:8180 #, gcc-internal-format msgid "declaration of %qD as array of references" msgstr "" -#: cp/decl.c:8172 +#: cp/decl.c:8182 #, gcc-internal-format msgid "creating array of references" msgstr "" -#: cp/decl.c:8177 +#: cp/decl.c:8187 #, gcc-internal-format msgid "declaration of %qD as array of function members" msgstr "" -#: cp/decl.c:8179 +#: cp/decl.c:8189 #, gcc-internal-format msgid "creating array of function members" msgstr "" -#: cp/decl.c:8193 +#: cp/decl.c:8203 #, gcc-internal-format msgid "" "declaration of %qD as multidimensional array must have bounds for all " "dimensions except the first" msgstr "" -#: cp/decl.c:8197 +#: cp/decl.c:8207 #, gcc-internal-format msgid "" "multidimensional array must have bounds for all dimensions except the first" msgstr "" -#: cp/decl.c:8232 +#: cp/decl.c:8242 #, gcc-internal-format msgid "return type specification for constructor invalid" msgstr "" -#: cp/decl.c:8242 +#: cp/decl.c:8252 #, gcc-internal-format msgid "return type specification for destructor invalid" msgstr "" -#: cp/decl.c:8255 +#: cp/decl.c:8265 #, gcc-internal-format msgid "return type specified for %<operator %T%>" msgstr "" -#: cp/decl.c:8277 +#: cp/decl.c:8287 #, gcc-internal-format msgid "unnamed variable or field declared void" msgstr "" -#: cp/decl.c:8284 +#: cp/decl.c:8294 #, gcc-internal-format msgid "variable or field declared void" msgstr "" -#: cp/decl.c:8468 +#: cp/decl.c:8478 #, gcc-internal-format msgid "invalid use of qualified-name %<::%D%>" msgstr "" -#: cp/decl.c:8471 +#: cp/decl.c:8481 #, gcc-internal-format msgid "invalid use of qualified-name %<%T::%D%>" msgstr "" -#: cp/decl.c:8474 +#: cp/decl.c:8484 #, gcc-internal-format msgid "invalid use of qualified-name %<%D::%D%>" msgstr "" -#: cp/decl.c:8483 +#: cp/decl.c:8493 #, gcc-internal-format msgid "%q#T is not a class or a namespace" msgstr "" -#: cp/decl.c:8491 +#: cp/decl.c:8501 #, gcc-internal-format msgid "type %qT is not derived from type %qT" msgstr "" -#: cp/decl.c:8507 cp/decl.c:8599 cp/decl.c:8608 cp/decl.c:9951 +#: cp/decl.c:8517 cp/decl.c:8609 cp/decl.c:8618 cp/decl.c:9961 #, gcc-internal-format msgid "declaration of %qD as non-function" msgstr "" -#: cp/decl.c:8513 +#: cp/decl.c:8523 #, gcc-internal-format msgid "declaration of %qD as non-member" msgstr "" -#: cp/decl.c:8544 +#: cp/decl.c:8554 #, gcc-internal-format msgid "declarator-id missing; using reserved word %qD" msgstr "" -#: cp/decl.c:8591 +#: cp/decl.c:8601 #, gcc-internal-format msgid "function definition does not declare parameters" msgstr "" -#: cp/decl.c:8616 +#: cp/decl.c:8626 #, gcc-internal-format msgid "declaration of %qD as %<typedef%>" msgstr "" -#: cp/decl.c:8621 +#: cp/decl.c:8631 #, gcc-internal-format msgid "declaration of %qD as parameter" msgstr "" -#: cp/decl.c:8654 +#: cp/decl.c:8664 #, gcc-internal-format msgid "%<constexpr%> cannot appear in a typedef declaration" msgstr "" -#: cp/decl.c:8662 +#: cp/decl.c:8672 #, gcc-internal-format msgid "two or more data types in declaration of %qs" msgstr "" -#: cp/decl.c:8668 +#: cp/decl.c:8678 #, gcc-internal-format msgid "conflicting specifiers in declaration of %qs" msgstr "" -#: cp/decl.c:8740 cp/decl.c:8743 cp/decl.c:8746 +#: cp/decl.c:8750 cp/decl.c:8753 cp/decl.c:8756 #, gcc-internal-format msgid "ISO C++ forbids declaration of %qs with no type" msgstr "" -#: cp/decl.c:8757 +#: cp/decl.c:8767 #, gcc-internal-format msgid "%<__int128%> is not supported by this target" msgstr "" -#: cp/decl.c:8762 +#: cp/decl.c:8772 #, gcc-internal-format msgid "ISO C++ does not support %<__int128%> for %qs" msgstr "" -#: cp/decl.c:8783 cp/decl.c:8803 +#: cp/decl.c:8793 cp/decl.c:8813 #, gcc-internal-format msgid "%<signed%> or %<unsigned%> invalid for %qs" msgstr "" -#: cp/decl.c:8785 +#: cp/decl.c:8795 #, gcc-internal-format msgid "%<signed%> and %<unsigned%> specified together for %qs" msgstr "" -#: cp/decl.c:8787 +#: cp/decl.c:8797 #, gcc-internal-format msgid "%<long long%> invalid for %qs" msgstr "" -#: cp/decl.c:8789 +#: cp/decl.c:8799 #, gcc-internal-format msgid "%<long%> invalid for %qs" msgstr "" -#: cp/decl.c:8791 +#: cp/decl.c:8801 #, gcc-internal-format msgid "%<short%> invalid for %qs" msgstr "" -#: cp/decl.c:8793 +#: cp/decl.c:8803 #, gcc-internal-format msgid "%<long%> or %<short%> invalid for %qs" msgstr "" -#: cp/decl.c:8795 +#: cp/decl.c:8805 #, gcc-internal-format msgid "%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs" msgstr "" -#: cp/decl.c:8797 +#: cp/decl.c:8807 #, gcc-internal-format msgid "%<long%> or %<short%> specified with char for %qs" msgstr "" -#: cp/decl.c:8799 +#: cp/decl.c:8809 #, gcc-internal-format msgid "%<long%> and %<short%> specified together for %qs" msgstr "" -#: cp/decl.c:8805 +#: cp/decl.c:8815 #, gcc-internal-format msgid "%<short%> or %<long%> invalid for %qs" msgstr "" -#: cp/decl.c:8813 +#: cp/decl.c:8823 #, gcc-internal-format msgid "long, short, signed or unsigned used invalidly for %qs" msgstr "" -#: cp/decl.c:8881 +#: cp/decl.c:8891 #, gcc-internal-format msgid "complex invalid for %qs" msgstr "" -#: cp/decl.c:8909 +#: cp/decl.c:8919 #, gcc-internal-format msgid "qualifiers are not allowed on declaration of %<operator %T%>" msgstr "" -#: cp/decl.c:8930 +#: cp/decl.c:8940 #, gcc-internal-format msgid "member %qD cannot be declared both virtual and static" msgstr "" -#: cp/decl.c:8938 +#: cp/decl.c:8948 #, gcc-internal-format msgid "%<%T::%D%> is not a valid declarator" msgstr "" -#: cp/decl.c:8947 +#: cp/decl.c:8957 #, gcc-internal-format msgid "typedef declaration invalid in parameter declaration" msgstr "" -#: cp/decl.c:8952 +#: cp/decl.c:8962 #, gcc-internal-format msgid "storage class specified for template parameter %qs" msgstr "" -#: cp/decl.c:8958 +#: cp/decl.c:8968 #, gcc-internal-format msgid "storage class specifiers invalid in parameter declarations" msgstr "" -#: cp/decl.c:8964 +#: cp/decl.c:8974 #, gcc-internal-format msgid "a parameter cannot be declared %<constexpr%>" msgstr "" -#: cp/decl.c:8973 +#: cp/decl.c:8983 #, gcc-internal-format msgid "%<virtual%> outside class declaration" msgstr "" -#: cp/decl.c:8991 +#: cp/decl.c:9001 #, gcc-internal-format msgid "multiple storage classes in declaration of %qs" msgstr "" -#: cp/decl.c:9014 +#: cp/decl.c:9024 #, gcc-internal-format msgid "storage class specified for %qs" msgstr "" -#: cp/decl.c:9018 +#: cp/decl.c:9028 #, gcc-internal-format msgid "storage class specified for parameter %qs" msgstr "" -#: cp/decl.c:9031 +#: cp/decl.c:9041 #, gcc-internal-format msgid "nested function %qs declared %<extern%>" msgstr "" -#: cp/decl.c:9035 +#: cp/decl.c:9045 #, gcc-internal-format msgid "top-level declaration of %qs specifies %<auto%>" msgstr "" -#: cp/decl.c:9041 +#: cp/decl.c:9051 #, gcc-internal-format msgid "function-scope %qs implicitly auto and declared %<__thread%>" msgstr "" -#: cp/decl.c:9048 +#: cp/decl.c:9058 #, gcc-internal-format msgid "storage class specifiers invalid in friend function declarations" msgstr "" -#: cp/decl.c:9142 +#: cp/decl.c:9152 #, gcc-internal-format msgid "%qs declared as function returning a function" msgstr "" -#: cp/decl.c:9147 +#: cp/decl.c:9157 #, gcc-internal-format msgid "%qs declared as function returning an array" msgstr "" -#: cp/decl.c:9173 +#: cp/decl.c:9183 #, gcc-internal-format msgid "%qs function uses %<auto%> type specifier without trailing return type" msgstr "" -#: cp/decl.c:9179 +#: cp/decl.c:9189 #, gcc-internal-format msgid "" "%qs function with trailing return type has %qT as its type rather than plain " @@ -29073,471 +29276,476 @@ msgstr "" #. Not using maybe_warn_cpp0x because this should #. always be an error. -#: cp/decl.c:9190 +#: cp/decl.c:9200 #, gcc-internal-format msgid "trailing return type only available with -std=c++11 or -std=gnu++11" msgstr "" -#: cp/decl.c:9193 +#: cp/decl.c:9203 #, gcc-internal-format msgid "" "%qs function with trailing return type not declared with %<auto%> type " "specifier" msgstr "" -#: cp/decl.c:9226 +#: cp/decl.c:9236 #, gcc-internal-format msgid "destructor cannot be static member function" msgstr "" -#: cp/decl.c:9227 +#: cp/decl.c:9237 #, gcc-internal-format msgid "constructor cannot be static member function" msgstr "" -#: cp/decl.c:9231 +#: cp/decl.c:9241 #, gcc-internal-format msgid "destructors may not be cv-qualified" msgstr "" -#: cp/decl.c:9232 +#: cp/decl.c:9242 #, gcc-internal-format msgid "constructors may not be cv-qualified" msgstr "" -#: cp/decl.c:9249 +#: cp/decl.c:9259 #, gcc-internal-format msgid "constructors cannot be declared virtual" msgstr "" -#: cp/decl.c:9262 +#: cp/decl.c:9272 #, gcc-internal-format msgid "can%'t initialize friend function %qs" msgstr "" #. Cannot be both friend and virtual. -#: cp/decl.c:9266 +#: cp/decl.c:9276 #, gcc-internal-format msgid "virtual functions cannot be friends" msgstr "" -#: cp/decl.c:9270 +#: cp/decl.c:9280 #, gcc-internal-format msgid "friend declaration not in class definition" msgstr "" -#: cp/decl.c:9272 +#: cp/decl.c:9282 #, gcc-internal-format msgid "can%'t define friend function %qs in a local class definition" msgstr "" -#: cp/decl.c:9293 +#: cp/decl.c:9303 #, gcc-internal-format msgid "destructors may not have parameters" msgstr "" -#: cp/decl.c:9312 +#: cp/decl.c:9322 #, gcc-internal-format msgid "cannot declare pointer to %q#T" msgstr "" -#: cp/decl.c:9325 cp/decl.c:9332 +#: cp/decl.c:9335 cp/decl.c:9342 #, gcc-internal-format msgid "cannot declare reference to %q#T" msgstr "" -#: cp/decl.c:9334 +#: cp/decl.c:9344 #, gcc-internal-format msgid "cannot declare pointer to %q#T member" msgstr "" -#: cp/decl.c:9357 +#: cp/decl.c:9367 #, gcc-internal-format msgid "cannot declare reference to qualified function type %qT" msgstr "" -#: cp/decl.c:9358 +#: cp/decl.c:9368 #, gcc-internal-format msgid "cannot declare pointer to qualified function type %qT" msgstr "" -#: cp/decl.c:9432 +#: cp/decl.c:9442 #, gcc-internal-format msgid "" "cannot declare reference to %q#T, which is not a typedef or a template type " "argument" msgstr "" -#: cp/decl.c:9485 +#: cp/decl.c:9495 #, gcc-internal-format msgid "both %<const%> and %<constexpr%> cannot be used here" msgstr "" -#: cp/decl.c:9487 +#: cp/decl.c:9497 #, gcc-internal-format msgid "both %<volatile%> and %<constexpr%> cannot be used here" msgstr "" -#: cp/decl.c:9499 +#: cp/decl.c:9509 #, gcc-internal-format msgid "template-id %qD used as a declarator" msgstr "" -#: cp/decl.c:9550 +#: cp/decl.c:9560 #, gcc-internal-format msgid "member functions are implicitly friends of their class" msgstr "" -#: cp/decl.c:9555 +#: cp/decl.c:9565 #, gcc-internal-format msgid "extra qualification %<%T::%> on member %qs" msgstr "" -#: cp/decl.c:9585 +#: cp/decl.c:9595 #, gcc-internal-format msgid "cannot define member function %<%T::%s%> within %<%T%>" msgstr "" -#: cp/decl.c:9587 +#: cp/decl.c:9597 #, gcc-internal-format msgid "cannot declare member function %<%T::%s%> within %<%T%>" msgstr "" -#: cp/decl.c:9596 +#: cp/decl.c:9606 #, gcc-internal-format msgid "cannot declare member %<%T::%s%> within %qT" msgstr "" -#: cp/decl.c:9622 +#: cp/decl.c:9632 #, gcc-internal-format msgid "non-parameter %qs cannot be a parameter pack" msgstr "" -#: cp/decl.c:9632 +#: cp/decl.c:9642 #, gcc-internal-format msgid "size of array %qs is too large" msgstr "" -#: cp/decl.c:9643 +#: cp/decl.c:9653 #, gcc-internal-format msgid "data member may not have variably modified type %qT" msgstr "" -#: cp/decl.c:9645 +#: cp/decl.c:9655 #, gcc-internal-format msgid "parameter may not have variably modified type %qT" msgstr "" #. [dcl.fct.spec] The explicit specifier shall only be used in #. declarations of constructors within a class definition. -#: cp/decl.c:9653 +#: cp/decl.c:9663 #, gcc-internal-format msgid "only declarations of constructors can be %<explicit%>" msgstr "" -#: cp/decl.c:9661 +#: cp/decl.c:9671 #, gcc-internal-format msgid "non-member %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.c:9666 +#: cp/decl.c:9676 #, gcc-internal-format msgid "non-object member %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.c:9672 +#: cp/decl.c:9682 #, gcc-internal-format msgid "function %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.c:9677 +#: cp/decl.c:9687 #, gcc-internal-format msgid "static %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.c:9682 +#: cp/decl.c:9692 #, gcc-internal-format msgid "const %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.c:9687 +#: cp/decl.c:9697 #, gcc-internal-format msgid "reference %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.c:9722 +#: cp/decl.c:9732 #, gcc-internal-format msgid "typedef declared %<auto%>" msgstr "" -#: cp/decl.c:9732 +#: cp/decl.c:9742 #, gcc-internal-format msgid "typedef name may not be a nested-name-specifier" msgstr "" -#: cp/decl.c:9750 +#: cp/decl.c:9760 #, gcc-internal-format msgid "ISO C++ forbids nested type %qD with same name as enclosing class" msgstr "" -#: cp/decl.c:9852 +#: cp/decl.c:9862 #, gcc-internal-format msgid "" "qualified function types cannot be used to declare static member functions" msgstr "" -#: cp/decl.c:9854 +#: cp/decl.c:9864 #, gcc-internal-format msgid "qualified function types cannot be used to declare free functions" msgstr "" -#: cp/decl.c:9881 +#: cp/decl.c:9891 #, gcc-internal-format msgid "type qualifiers specified for friend class declaration" msgstr "" -#: cp/decl.c:9886 +#: cp/decl.c:9896 #, gcc-internal-format msgid "%<inline%> specified for friend class declaration" msgstr "" -#: cp/decl.c:9894 +#: cp/decl.c:9904 #, gcc-internal-format msgid "template parameters cannot be friends" msgstr "" -#: cp/decl.c:9896 +#: cp/decl.c:9906 #, gcc-internal-format msgid "friend declaration requires class-key, i.e. %<friend class %T::%D%>" msgstr "" -#: cp/decl.c:9900 +#: cp/decl.c:9910 #, gcc-internal-format msgid "friend declaration requires class-key, i.e. %<friend %#T%>" msgstr "" -#: cp/decl.c:9913 +#: cp/decl.c:9923 #, gcc-internal-format msgid "trying to make class %qT a friend of global scope" msgstr "" -#: cp/decl.c:9931 +#: cp/decl.c:9941 #, gcc-internal-format msgid "invalid qualifiers on non-member function type" msgstr "" -#: cp/decl.c:9941 +#: cp/decl.c:9951 #, gcc-internal-format msgid "abstract declarator %qT used as declaration" msgstr "" -#: cp/decl.c:9970 +#: cp/decl.c:9980 #, gcc-internal-format msgid "cannot use %<::%> in parameter declaration" msgstr "" -#: cp/decl.c:9974 +#: cp/decl.c:9984 #, gcc-internal-format msgid "parameter declared %<auto%>" msgstr "" -#: cp/decl.c:10016 +#: cp/decl.c:10026 #, gcc-internal-format msgid "non-static data member declared %<auto%>" msgstr "" #. Something like struct S { int N::j; }; -#: cp/decl.c:10038 +#: cp/decl.c:10048 #, gcc-internal-format msgid "invalid use of %<::%>" msgstr "" -#: cp/decl.c:10060 +#: cp/decl.c:10070 #, gcc-internal-format msgid "declaration of function %qD in invalid context" msgstr "" -#: cp/decl.c:10069 +#: cp/decl.c:10079 #, gcc-internal-format msgid "function %qD declared virtual inside a union" msgstr "" -#: cp/decl.c:10078 +#: cp/decl.c:10088 #, gcc-internal-format msgid "%qD cannot be declared virtual, since it is always static" msgstr "" -#: cp/decl.c:10094 +#: cp/decl.c:10104 #, gcc-internal-format msgid "expected qualified name in friend declaration for destructor %qD" msgstr "" -#: cp/decl.c:10101 +#: cp/decl.c:10111 #, gcc-internal-format msgid "declaration of %qD as member of %qT" msgstr "" -#: cp/decl.c:10107 +#: cp/decl.c:10117 #, gcc-internal-format msgid "a destructor cannot be %<constexpr%>" msgstr "" -#: cp/decl.c:10113 +#: cp/decl.c:10123 #, gcc-internal-format msgid "expected qualified name in friend declaration for constructor %qD" msgstr "" -#: cp/decl.c:10159 +#: cp/decl.c:10169 #, gcc-internal-format msgid "field %qD has incomplete type" msgstr "" -#: cp/decl.c:10161 +#: cp/decl.c:10171 #, gcc-internal-format msgid "name %qT has incomplete type" msgstr "" -#: cp/decl.c:10170 +#: cp/decl.c:10180 #, gcc-internal-format msgid " in instantiation of template %qT" msgstr "" -#: cp/decl.c:10179 +#: cp/decl.c:10189 #, gcc-internal-format msgid "%qE is neither function nor member function; cannot be declared friend" msgstr "" -#: cp/decl.c:10231 +#: cp/decl.c:10241 #, gcc-internal-format msgid "constexpr static data member %qD must have an initializer" msgstr "" -#: cp/decl.c:10240 +#: cp/decl.c:10250 #, gcc-internal-format msgid "non-static data member %qE declared %<constexpr%>" msgstr "" -#: cp/decl.c:10290 +#: cp/decl.c:10300 #, gcc-internal-format msgid "storage class %<auto%> invalid for function %qs" msgstr "" -#: cp/decl.c:10292 +#: cp/decl.c:10302 #, gcc-internal-format msgid "storage class %<register%> invalid for function %qs" msgstr "" -#: cp/decl.c:10294 +#: cp/decl.c:10304 #, gcc-internal-format msgid "storage class %<__thread%> invalid for function %qs" msgstr "" -#: cp/decl.c:10297 +#: cp/decl.c:10307 #, gcc-internal-format msgid "virt-specifiers in %qs not allowed outside a class definition" msgstr "" -#: cp/decl.c:10308 +#: cp/decl.c:10318 #, gcc-internal-format msgid "" "%<static%> specified invalid for function %qs declared out of global scope" msgstr "" -#: cp/decl.c:10312 +#: cp/decl.c:10322 #, gcc-internal-format msgid "" "%<inline%> specifier invalid for function %qs declared out of global scope" msgstr "" -#: cp/decl.c:10320 +#: cp/decl.c:10330 #, gcc-internal-format msgid "virtual non-class function %qs" msgstr "" -#: cp/decl.c:10327 +#: cp/decl.c:10337 #, gcc-internal-format msgid "%qs defined in a non-class scope" msgstr "" -#: cp/decl.c:10328 +#: cp/decl.c:10338 #, gcc-internal-format msgid "%qs declared in a non-class scope" msgstr "" -#: cp/decl.c:10356 +#: cp/decl.c:10366 #, gcc-internal-format msgid "cannot declare member function %qD to have static linkage" msgstr "" #. FIXME need arm citation -#: cp/decl.c:10363 +#: cp/decl.c:10373 #, gcc-internal-format msgid "cannot declare static function inside another function" msgstr "" -#: cp/decl.c:10393 +#: cp/decl.c:10403 #, gcc-internal-format msgid "" "%<static%> may not be used when defining (as opposed to declaring) a static " "data member" msgstr "" -#: cp/decl.c:10400 +#: cp/decl.c:10410 #, gcc-internal-format msgid "static member %qD declared %<register%>" msgstr "" -#: cp/decl.c:10406 +#: cp/decl.c:10416 #, gcc-internal-format msgid "cannot explicitly declare member %q#D to have extern linkage" msgstr "" -#: cp/decl.c:10413 +#: cp/decl.c:10423 #, gcc-internal-format msgid "declaration of constexpr variable %qD is not a definition" msgstr "" -#: cp/decl.c:10426 +#: cp/decl.c:10436 #, gcc-internal-format msgid "%qs initialized and declared %<extern%>" msgstr "" -#: cp/decl.c:10430 +#: cp/decl.c:10440 #, gcc-internal-format msgid "%qs has both %<extern%> and initializer" msgstr "" -#: cp/decl.c:10557 +#: cp/decl.c:10568 #, gcc-internal-format msgid "default argument for %q#D has type %qT" msgstr "" -#: cp/decl.c:10560 +#: cp/decl.c:10571 #, gcc-internal-format msgid "default argument for parameter of type %qT has type %qT" msgstr "" -#: cp/decl.c:10576 +#: cp/decl.c:10588 +#, gcc-internal-format +msgid "default argument %qE uses %qD" +msgstr "" + +#: cp/decl.c:10590 #, gcc-internal-format msgid "default argument %qE uses local variable %qD" msgstr "" -#: cp/decl.c:10664 +#: cp/decl.c:10678 #, gcc-internal-format msgid "parameter %qD has Java class type" msgstr "" -#: cp/decl.c:10692 +#: cp/decl.c:10706 #, gcc-internal-format msgid "parameter %qD invalidly declared method type" msgstr "" -#: cp/decl.c:10717 +#: cp/decl.c:10731 #, gcc-internal-format msgid "parameter %qD includes pointer to array of unknown bound %qT" msgstr "" -#: cp/decl.c:10719 +#: cp/decl.c:10733 #, gcc-internal-format msgid "parameter %qD includes reference to array of unknown bound %qT" msgstr "" @@ -29557,174 +29765,174 @@ msgstr "" #. or implicitly defined), there's no need to worry about their #. existence. Theoretically, they should never even be #. instantiated, but that's hard to forestall. -#: cp/decl.c:10960 +#: cp/decl.c:10974 #, gcc-internal-format msgid "invalid constructor; you probably meant %<%T (const %T&)%>" msgstr "" -#: cp/decl.c:11082 +#: cp/decl.c:11096 #, gcc-internal-format msgid "%qD may not be declared within a namespace" msgstr "" -#: cp/decl.c:11087 +#: cp/decl.c:11101 #, gcc-internal-format msgid "%qD may not be declared as static" msgstr "" -#: cp/decl.c:11113 +#: cp/decl.c:11127 #, gcc-internal-format msgid "%qD must be a nonstatic member function" msgstr "" -#: cp/decl.c:11122 +#: cp/decl.c:11136 #, gcc-internal-format msgid "" "%qD must be either a non-static member function or a non-member function" msgstr "" -#: cp/decl.c:11144 +#: cp/decl.c:11158 #, gcc-internal-format msgid "%qD must have an argument of class or enumerated type" msgstr "" -#: cp/decl.c:11173 +#: cp/decl.c:11187 #, gcc-internal-format msgid "" "conversion to a reference to void will never use a type conversion operator" msgstr "" -#: cp/decl.c:11175 +#: cp/decl.c:11189 #, gcc-internal-format msgid "conversion to void will never use a type conversion operator" msgstr "" -#: cp/decl.c:11182 +#: cp/decl.c:11196 #, gcc-internal-format msgid "" "conversion to a reference to the same type will never use a type conversion " "operator" msgstr "" -#: cp/decl.c:11184 +#: cp/decl.c:11198 #, gcc-internal-format msgid "conversion to the same type will never use a type conversion operator" msgstr "" -#: cp/decl.c:11192 +#: cp/decl.c:11206 #, gcc-internal-format msgid "" "conversion to a reference to a base class will never use a type conversion " "operator" msgstr "" -#: cp/decl.c:11194 +#: cp/decl.c:11208 #, gcc-internal-format msgid "conversion to a base class will never use a type conversion operator" msgstr "" #. 13.4.0.3 -#: cp/decl.c:11203 +#: cp/decl.c:11217 #, gcc-internal-format msgid "ISO C++ prohibits overloading operator ?:" msgstr "" -#: cp/decl.c:11208 +#: cp/decl.c:11222 #, gcc-internal-format msgid "%qD must not have variable number of arguments" msgstr "" -#: cp/decl.c:11259 +#: cp/decl.c:11273 #, gcc-internal-format msgid "postfix %qD must take %<int%> as its argument" msgstr "" -#: cp/decl.c:11262 +#: cp/decl.c:11276 #, gcc-internal-format msgid "postfix %qD must take %<int%> as its second argument" msgstr "" -#: cp/decl.c:11270 +#: cp/decl.c:11284 #, gcc-internal-format msgid "%qD must take either zero or one argument" msgstr "" -#: cp/decl.c:11272 +#: cp/decl.c:11286 #, gcc-internal-format msgid "%qD must take either one or two arguments" msgstr "" -#: cp/decl.c:11294 +#: cp/decl.c:11308 #, gcc-internal-format msgid "prefix %qD should return %qT" msgstr "" -#: cp/decl.c:11300 +#: cp/decl.c:11314 #, gcc-internal-format msgid "postfix %qD should return %qT" msgstr "" -#: cp/decl.c:11309 +#: cp/decl.c:11323 #, gcc-internal-format msgid "%qD must take %<void%>" msgstr "" -#: cp/decl.c:11311 cp/decl.c:11320 +#: cp/decl.c:11325 cp/decl.c:11334 #, gcc-internal-format msgid "%qD must take exactly one argument" msgstr "" -#: cp/decl.c:11322 +#: cp/decl.c:11336 #, gcc-internal-format msgid "%qD must take exactly two arguments" msgstr "" -#: cp/decl.c:11331 +#: cp/decl.c:11345 #, gcc-internal-format msgid "user-defined %qD always evaluates both arguments" msgstr "" -#: cp/decl.c:11345 +#: cp/decl.c:11359 #, gcc-internal-format msgid "%qD should return by value" msgstr "" -#: cp/decl.c:11356 cp/decl.c:11361 +#: cp/decl.c:11370 cp/decl.c:11375 #, gcc-internal-format msgid "%qD cannot have default arguments" msgstr "" -#: cp/decl.c:11422 +#: cp/decl.c:11436 #, gcc-internal-format msgid "using template type parameter %qT after %qs" msgstr "" -#: cp/decl.c:11444 +#: cp/decl.c:11458 #, gcc-internal-format msgid "using alias template specialization %qT after %qs" msgstr "" -#: cp/decl.c:11447 +#: cp/decl.c:11461 #, gcc-internal-format msgid "using typedef-name %qD after %qs" msgstr "" -#: cp/decl.c:11449 +#: cp/decl.c:11463 #, gcc-internal-format msgid "%qD has a previous declaration here" msgstr "" -#: cp/decl.c:11457 +#: cp/decl.c:11471 #, gcc-internal-format msgid "%qT referred to as %qs" msgstr "" -#: cp/decl.c:11458 cp/decl.c:11465 +#: cp/decl.c:11472 cp/decl.c:11479 #, gcc-internal-format msgid "%q+T has a previous declaration here" msgstr "" -#: cp/decl.c:11464 +#: cp/decl.c:11478 #, gcc-internal-format msgid "%qT referred to as enum" msgstr "" @@ -29736,88 +29944,88 @@ msgstr "" #. void f(class C); // No template header here #. #. then the required template argument is missing. -#: cp/decl.c:11479 +#: cp/decl.c:11493 #, gcc-internal-format msgid "template argument required for %<%s %T%>" msgstr "" -#: cp/decl.c:11527 cp/name-lookup.c:3049 +#: cp/decl.c:11541 cp/name-lookup.c:3049 #, gcc-internal-format msgid "%qD has the same name as the class in which it is declared" msgstr "" -#: cp/decl.c:11557 cp/name-lookup.c:2548 cp/name-lookup.c:3373 -#: cp/name-lookup.c:3418 cp/parser.c:5054 cp/parser.c:20501 +#: cp/decl.c:11571 cp/name-lookup.c:2548 cp/name-lookup.c:3373 +#: cp/name-lookup.c:3418 cp/parser.c:5054 cp/parser.c:20502 #, gcc-internal-format msgid "reference to %qD is ambiguous" msgstr "" -#: cp/decl.c:11669 +#: cp/decl.c:11683 #, gcc-internal-format msgid "use of enum %q#D without previous declaration" msgstr "" -#: cp/decl.c:11690 +#: cp/decl.c:11704 #, gcc-internal-format msgid "redeclaration of %qT as a non-template" msgstr "" -#: cp/decl.c:11691 +#: cp/decl.c:11705 #, gcc-internal-format msgid "previous declaration %q+D" msgstr "" -#: cp/decl.c:11825 +#: cp/decl.c:11839 #, gcc-internal-format msgid "derived union %qT invalid" msgstr "" -#: cp/decl.c:11834 +#: cp/decl.c:11848 #, gcc-internal-format msgid "Java class %qT cannot have multiple bases" msgstr "" -#: cp/decl.c:11845 +#: cp/decl.c:11859 #, gcc-internal-format msgid "Java class %qT cannot have virtual bases" msgstr "" -#: cp/decl.c:11865 +#: cp/decl.c:11879 #, gcc-internal-format msgid "base type %qT fails to be a struct or class type" msgstr "" -#: cp/decl.c:11898 +#: cp/decl.c:11912 #, gcc-internal-format msgid "recursive type %qT undefined" msgstr "" -#: cp/decl.c:11900 +#: cp/decl.c:11914 #, gcc-internal-format msgid "duplicate base type %qT invalid" msgstr "" -#: cp/decl.c:12024 +#: cp/decl.c:12038 #, gcc-internal-format msgid "scoped/unscoped mismatch in enum %q#T" msgstr "" -#: cp/decl.c:12027 cp/decl.c:12035 cp/decl.c:12047 cp/parser.c:14514 +#: cp/decl.c:12041 cp/decl.c:12049 cp/decl.c:12061 cp/parser.c:14515 #, gcc-internal-format msgid "previous definition here" msgstr "" -#: cp/decl.c:12032 +#: cp/decl.c:12046 #, gcc-internal-format msgid "underlying type mismatch in enum %q#T" msgstr "" -#: cp/decl.c:12044 +#: cp/decl.c:12058 #, gcc-internal-format msgid "different underlying type in enum %q#T" msgstr "" -#: cp/decl.c:12111 +#: cp/decl.c:12125 #, gcc-internal-format msgid "underlying type %<%T%> of %<%T%> must be an integral type" msgstr "" @@ -29826,72 +30034,72 @@ msgstr "" #. #. IF no integral type can represent all the enumerator values, the #. enumeration is ill-formed. -#: cp/decl.c:12245 +#: cp/decl.c:12259 #, gcc-internal-format msgid "no integral type can represent all of the enumerator values for %qT" msgstr "" -#: cp/decl.c:12380 +#: cp/decl.c:12394 #, gcc-internal-format msgid "enumerator value for %qD is not an integer constant" msgstr "" -#: cp/decl.c:12430 +#: cp/decl.c:12444 #, gcc-internal-format msgid "incremented enumerator value is too large for %<unsigned long%>" msgstr "" -#: cp/decl.c:12442 +#: cp/decl.c:12456 #, gcc-internal-format msgid "overflow in enumeration values at %qD" msgstr "" -#: cp/decl.c:12462 +#: cp/decl.c:12476 #, gcc-internal-format msgid "enumerator value %E is too large for underlying type %<%T%>" msgstr "" -#: cp/decl.c:12559 +#: cp/decl.c:12573 #, gcc-internal-format msgid "return type %q#T is incomplete" msgstr "" -#: cp/decl.c:12561 +#: cp/decl.c:12575 #, gcc-internal-format msgid "return type has Java class type %q#T" msgstr "" -#: cp/decl.c:12685 cp/typeck.c:7896 +#: cp/decl.c:12699 cp/typeck.c:7896 #, gcc-internal-format msgid "%<operator=%> should return a reference to %<*this%>" msgstr "" -#: cp/decl.c:12780 +#: cp/decl.c:12794 #, gcc-internal-format msgid "no previous declaration for %q+D" msgstr "" -#: cp/decl.c:12995 +#: cp/decl.c:13009 #, gcc-internal-format msgid "invalid function declaration" msgstr "" -#: cp/decl.c:13079 +#: cp/decl.c:13093 #, gcc-internal-format msgid "parameter %qD declared void" msgstr "" -#: cp/decl.c:13532 +#: cp/decl.c:13546 #, gcc-internal-format msgid "parameter %q+D set but not used" msgstr "" -#: cp/decl.c:13627 +#: cp/decl.c:13641 #, gcc-internal-format msgid "invalid member function declaration" msgstr "" -#: cp/decl.c:13641 +#: cp/decl.c:13655 #, gcc-internal-format msgid "%qD is already defined in class %qT" msgstr "" @@ -29933,7 +30141,7 @@ msgstr "" msgid "deleting %qT is undefined" msgstr "" -#: cp/decl2.c:512 cp/pt.c:4875 +#: cp/decl2.c:512 cp/pt.c:4877 #, gcc-internal-format msgid "template declaration of %q#D" msgstr "" @@ -30125,95 +30333,95 @@ msgstr "" msgid "use of deleted function %qD" msgstr "" -#: cp/error.c:3261 +#: cp/error.c:3263 #, gcc-internal-format msgid "" "extended initializer lists only available with -std=c++11 or -std=gnu++11" msgstr "" -#: cp/error.c:3266 +#: cp/error.c:3268 #, gcc-internal-format msgid "" "explicit conversion operators only available with -std=c++11 or -std=gnu++11" msgstr "" -#: cp/error.c:3271 +#: cp/error.c:3273 #, gcc-internal-format msgid "variadic templates only available with -std=c++11 or -std=gnu++11" msgstr "" -#: cp/error.c:3276 +#: cp/error.c:3278 #, gcc-internal-format msgid "lambda expressions only available with -std=c++11 or -std=gnu++11" msgstr "" -#: cp/error.c:3281 +#: cp/error.c:3283 #, gcc-internal-format msgid "C++0x auto only available with -std=c++11 or -std=gnu++11" msgstr "" -#: cp/error.c:3285 +#: cp/error.c:3287 #, gcc-internal-format msgid "scoped enums only available with -std=c++11 or -std=gnu++11" msgstr "" -#: cp/error.c:3289 +#: cp/error.c:3291 #, gcc-internal-format msgid "" "defaulted and deleted functions only available with -std=c++11 or -std=gnu+" "+11" msgstr "" -#: cp/error.c:3294 +#: cp/error.c:3296 #, gcc-internal-format msgid "inline namespaces only available with -std=c++11 or -std=gnu++11" msgstr "" -#: cp/error.c:3299 +#: cp/error.c:3301 #, gcc-internal-format msgid "" "override controls (override/final) only available with -std=c++11 or -std=gnu" "++11" msgstr "" -#: cp/error.c:3304 +#: cp/error.c:3306 #, gcc-internal-format msgid "" "non-static data member initializers only available with -std=c++11 or -" "std=gnu++11" msgstr "" -#: cp/error.c:3309 +#: cp/error.c:3311 #, gcc-internal-format msgid "user-defined literals only available with -std=c++11 or -std=gnu++11" msgstr "" -#: cp/error.c:3314 +#: cp/error.c:3316 #, gcc-internal-format msgid "delegating constructors only available with -std=c++11 or -std=gnu++11" msgstr "" -#: cp/error.c:3361 +#: cp/error.c:3363 #, gcc-internal-format msgid "incomplete type %qT used in nested name specifier" msgstr "" -#: cp/error.c:3365 +#: cp/error.c:3367 #, gcc-internal-format msgid "reference to %<%T::%D%> is ambiguous" msgstr "" -#: cp/error.c:3370 cp/typeck.c:2178 +#: cp/error.c:3372 cp/typeck.c:2178 #, gcc-internal-format msgid "%qD is not a member of %qT" msgstr "" -#: cp/error.c:3374 +#: cp/error.c:3376 #, gcc-internal-format msgid "%qD is not a member of %qD" msgstr "" -#: cp/error.c:3379 +#: cp/error.c:3381 #, gcc-internal-format msgid "%<::%D%> has not been declared" msgstr "" @@ -31023,7 +31231,7 @@ msgstr "" msgid " using obsolete binding at %q+D" msgstr "" -#: cp/name-lookup.c:1364 cp/parser.c:12459 +#: cp/name-lookup.c:1364 cp/parser.c:12460 #, gcc-internal-format msgid "(if you use %<-fpermissive%> G++ will accept your code)" msgstr "" @@ -31177,17 +31385,17 @@ msgstr[1] "" msgid " %qE" msgstr "" -#: cp/name-lookup.c:5487 +#: cp/name-lookup.c:5484 #, gcc-internal-format msgid "argument dependent lookup finds %q+D" msgstr "" -#: cp/name-lookup.c:5983 +#: cp/name-lookup.c:5980 #, gcc-internal-format msgid "XXX entering pop_everything ()\n" msgstr "" -#: cp/name-lookup.c:5992 +#: cp/name-lookup.c:5989 #, gcc-internal-format msgid "XXX leaving pop_everything ()\n" msgstr "" @@ -31297,7 +31505,7 @@ msgstr "" msgid "(perhaps a semicolon is missing after the definition of %qT)" msgstr "" -#: cp/parser.c:2604 cp/parser.c:5102 cp/pt.c:7239 +#: cp/parser.c:2604 cp/parser.c:5102 cp/pt.c:7241 #, gcc-internal-format msgid "%qT is not a template" msgstr "" @@ -31317,7 +31525,7 @@ msgstr "" msgid "floating-point literal cannot appear in a constant-expression" msgstr "" -#: cp/parser.c:2645 cp/pt.c:13485 +#: cp/parser.c:2645 cp/pt.c:13498 #, gcc-internal-format msgid "" "a cast to a type other than an integral or enumeration type cannot appear in " @@ -31483,7 +31691,7 @@ msgstr "" msgid "unable to find string literal operator %qD with %qT, %qT arguments" msgstr "" -#: cp/parser.c:3815 cp/parser.c:10361 +#: cp/parser.c:3815 cp/parser.c:10362 #, gcc-internal-format msgid "expected declaration" msgstr "" @@ -31552,7 +31760,7 @@ msgid "" "standardization" msgstr "" -#: cp/parser.c:4835 cp/parser.c:16229 +#: cp/parser.c:4835 cp/parser.c:16230 #, gcc-internal-format msgid "expected unqualified-id" msgstr "" @@ -31577,7 +31785,7 @@ msgstr "" msgid "expected nested-name-specifier" msgstr "" -#: cp/parser.c:5378 cp/parser.c:7089 +#: cp/parser.c:5378 cp/parser.c:7090 #, gcc-internal-format msgid "types may not be defined in casts" msgstr "" @@ -31594,601 +31802,601 @@ msgstr "" msgid "ISO C++ forbids compound-literals" msgstr "" -#: cp/parser.c:5937 +#: cp/parser.c:5938 #, gcc-internal-format msgid "%qE does not have class type" msgstr "" -#: cp/parser.c:6026 cp/typeck.c:2358 +#: cp/parser.c:6027 cp/typeck.c:2358 #, gcc-internal-format msgid "invalid use of %qD" msgstr "" -#: cp/parser.c:6035 +#: cp/parser.c:6036 #, gcc-internal-format msgid "%<%D::%D%> is not a class member" msgstr "" -#: cp/parser.c:6296 +#: cp/parser.c:6297 #, gcc-internal-format msgid "non-scalar type" msgstr "" -#: cp/parser.c:6390 +#: cp/parser.c:6391 #, gcc-internal-format msgid "ISO C++ does not allow %<alignof%> with a non-type" msgstr "" -#: cp/parser.c:6453 +#: cp/parser.c:6454 #, gcc-internal-format msgid "types may not be defined in %<noexcept%> expressions" msgstr "" -#: cp/parser.c:6678 +#: cp/parser.c:6679 #, gcc-internal-format msgid "types may not be defined in a new-expression" msgstr "" -#: cp/parser.c:6691 +#: cp/parser.c:6692 #, gcc-internal-format msgid "array bound forbidden after parenthesized type-id" msgstr "" -#: cp/parser.c:6693 +#: cp/parser.c:6694 #, gcc-internal-format msgid "try removing the parentheses around the type-id" msgstr "" -#: cp/parser.c:6774 +#: cp/parser.c:6775 #, gcc-internal-format msgid "types may not be defined in a new-type-id" msgstr "" -#: cp/parser.c:6898 +#: cp/parser.c:6899 #, gcc-internal-format msgid "expression in new-declarator must have integral or enumeration type" msgstr "" -#: cp/parser.c:7154 +#: cp/parser.c:7155 #, gcc-internal-format msgid "use of old-style cast" msgstr "" -#: cp/parser.c:7283 +#: cp/parser.c:7284 #, gcc-internal-format msgid "%<>>%> operator is treated as two right angle brackets in C++11" msgstr "" -#: cp/parser.c:7286 +#: cp/parser.c:7287 #, gcc-internal-format msgid "suggest parentheses around %<>>%> expression" msgstr "" -#: cp/parser.c:7431 +#: cp/parser.c:7432 #, gcc-internal-format msgid "ISO C++ does not allow ?: with omitted middle operand" msgstr "" -#: cp/parser.c:8051 +#: cp/parser.c:8052 #, gcc-internal-format msgid "lambda-expression in unevaluated context" msgstr "" -#: cp/parser.c:8180 +#: cp/parser.c:8181 #, gcc-internal-format msgid "expected end of capture-list" msgstr "" -#: cp/parser.c:8194 +#: cp/parser.c:8195 #, gcc-internal-format msgid "" "explicit by-copy capture of %<this%> redundant with by-copy capture default" msgstr "" -#: cp/parser.c:8235 +#: cp/parser.c:8236 #, gcc-internal-format msgid "ISO C++ does not allow initializers in lambda expression capture lists" msgstr "" -#: cp/parser.c:8268 +#: cp/parser.c:8269 #, gcc-internal-format msgid "capture of non-variable %qD " msgstr "" -#: cp/parser.c:8270 cp/parser.c:8279 +#: cp/parser.c:8271 cp/parser.c:8280 #, gcc-internal-format msgid "%q+#D declared here" msgstr "" -#: cp/parser.c:8276 +#: cp/parser.c:8277 #, gcc-internal-format msgid "capture of variable %qD with non-automatic storage duration" msgstr "" -#: cp/parser.c:8305 +#: cp/parser.c:8306 #, gcc-internal-format msgid "explicit by-copy capture of %qD redundant with by-copy capture default" msgstr "" -#: cp/parser.c:8310 +#: cp/parser.c:8311 #, gcc-internal-format msgid "" "explicit by-reference capture of %qD redundant with by-reference capture " "default" msgstr "" -#: cp/parser.c:8365 +#: cp/parser.c:8366 #, gcc-internal-format msgid "default argument specified for lambda parameter" msgstr "" -#: cp/parser.c:8768 +#: cp/parser.c:8769 #, gcc-internal-format msgid "expected labeled-statement" msgstr "" -#: cp/parser.c:8806 +#: cp/parser.c:8807 #, gcc-internal-format msgid "case label %qE not within a switch statement" msgstr "" -#: cp/parser.c:8881 +#: cp/parser.c:8882 #, gcc-internal-format msgid "need %<typename%> before %qE because %qT is a dependent scope" msgstr "" -#: cp/parser.c:8890 +#: cp/parser.c:8891 #, gcc-internal-format msgid "%<%T::%D%> names the constructor, not the type" msgstr "" -#: cp/parser.c:8939 +#: cp/parser.c:8940 #, gcc-internal-format msgid "compound-statement in constexpr function" msgstr "" -#: cp/parser.c:9151 cp/parser.c:22258 +#: cp/parser.c:9152 cp/parser.c:22259 #, gcc-internal-format msgid "expected selection-statement" msgstr "" -#: cp/parser.c:9184 +#: cp/parser.c:9185 #, gcc-internal-format msgid "types may not be defined in conditions" msgstr "" -#: cp/parser.c:9527 +#: cp/parser.c:9528 #, gcc-internal-format msgid "range-based %<for%> expression of type %qT has incomplete type" msgstr "" -#: cp/parser.c:9565 +#: cp/parser.c:9566 #, gcc-internal-format msgid "" "range-based %<for%> expression of type %qT has an %<end%> member but not a " "%<begin%>" msgstr "" -#: cp/parser.c:9571 +#: cp/parser.c:9572 #, gcc-internal-format msgid "" "range-based %<for%> expression of type %qT has a %<begin%> member but not an " "%<end%>" msgstr "" -#: cp/parser.c:9609 +#: cp/parser.c:9610 #, gcc-internal-format msgid "" "inconsistent begin/end types in range-based %<for%> statement: %qT and %qT" msgstr "" -#: cp/parser.c:9740 cp/parser.c:22261 +#: cp/parser.c:9741 cp/parser.c:22262 #, gcc-internal-format msgid "expected iteration-statement" msgstr "" -#: cp/parser.c:9787 +#: cp/parser.c:9788 #, gcc-internal-format msgid "range-based %<for%> loops are not allowed in C++98 mode" msgstr "" #. Issue a warning about this use of a GNU extension. -#: cp/parser.c:9909 +#: cp/parser.c:9910 #, gcc-internal-format msgid "ISO C++ forbids computed gotos" msgstr "" -#: cp/parser.c:9922 cp/parser.c:22264 +#: cp/parser.c:9923 cp/parser.c:22265 #, gcc-internal-format msgid "expected jump-statement" msgstr "" -#: cp/parser.c:10054 cp/parser.c:18855 +#: cp/parser.c:10055 cp/parser.c:18856 #, gcc-internal-format msgid "extra %<;%>" msgstr "" -#: cp/parser.c:10288 +#: cp/parser.c:10289 #, gcc-internal-format msgid "%<__label__%> not at the beginning of a block" msgstr "" -#: cp/parser.c:10439 +#: cp/parser.c:10440 #, gcc-internal-format msgid "mixing declarations and function-definitions is forbidden" msgstr "" -#: cp/parser.c:10583 +#: cp/parser.c:10584 #, gcc-internal-format msgid "%<friend%> used outside of class" msgstr "" #. Complain about `auto' as a storage specifier, if #. we're complaining about C++0x compatibility. -#: cp/parser.c:10642 +#: cp/parser.c:10643 #, gcc-internal-format msgid "%<auto%> changes meaning in C++11; please remove it" msgstr "" -#: cp/parser.c:10678 +#: cp/parser.c:10679 #, gcc-internal-format msgid "decl-specifier invalid in condition" msgstr "" -#: cp/parser.c:10769 +#: cp/parser.c:10770 #, gcc-internal-format msgid "class definition may not be declared a friend" msgstr "" -#: cp/parser.c:10838 cp/parser.c:19227 +#: cp/parser.c:10839 cp/parser.c:19228 #, gcc-internal-format msgid "templates may not be %<virtual%>" msgstr "" -#: cp/parser.c:10879 +#: cp/parser.c:10880 #, gcc-internal-format msgid "invalid linkage-specification" msgstr "" -#: cp/parser.c:11014 +#: cp/parser.c:11015 #, gcc-internal-format msgid "types may not be defined in %<decltype%> expressions" msgstr "" -#: cp/parser.c:11271 +#: cp/parser.c:11272 #, gcc-internal-format msgid "invalid use of %<auto%> in conversion operator" msgstr "" -#: cp/parser.c:11357 +#: cp/parser.c:11358 #, gcc-internal-format msgid "only constructors take member initializers" msgstr "" -#: cp/parser.c:11379 +#: cp/parser.c:11380 #, gcc-internal-format msgid "cannot expand initializer for member %<%D%>" msgstr "" -#: cp/parser.c:11391 +#: cp/parser.c:11392 #, gcc-internal-format msgid "mem-initializer for %qD follows constructor delegation" msgstr "" -#: cp/parser.c:11403 +#: cp/parser.c:11404 #, gcc-internal-format msgid "constructor delegation follows mem-initializer for %qD" msgstr "" -#: cp/parser.c:11455 +#: cp/parser.c:11456 #, gcc-internal-format msgid "anachronistic old-style base class initializer" msgstr "" -#: cp/parser.c:11523 +#: cp/parser.c:11524 #, gcc-internal-format msgid "" "keyword %<typename%> not allowed in this context (a qualified member " "initializer is implicitly a type)" msgstr "" -#: cp/parser.c:11840 +#: cp/parser.c:11841 #, gcc-internal-format msgid "expected empty string after %<operator%> keyword" msgstr "" -#: cp/parser.c:11858 +#: cp/parser.c:11859 #, gcc-internal-format msgid "expected suffix identifier" msgstr "" -#: cp/parser.c:11863 +#: cp/parser.c:11864 #, gcc-internal-format msgid "missing space between %<\"\"%> and suffix identifier" msgstr "" -#: cp/parser.c:11878 +#: cp/parser.c:11879 #, gcc-internal-format msgid "expected operator" msgstr "" #. Warn that we do not support `export'. -#: cp/parser.c:11915 +#: cp/parser.c:11916 #, gcc-internal-format msgid "keyword %<export%> not implemented, and will be ignored" msgstr "" -#: cp/parser.c:12106 cp/parser.c:12204 cp/parser.c:12311 cp/parser.c:17331 +#: cp/parser.c:12107 cp/parser.c:12205 cp/parser.c:12312 cp/parser.c:17332 #, gcc-internal-format msgid "template parameter pack %qD cannot have a default argument" msgstr "" -#: cp/parser.c:12110 cp/parser.c:17339 +#: cp/parser.c:12111 cp/parser.c:17340 #, gcc-internal-format msgid "template parameter pack cannot have a default argument" msgstr "" -#: cp/parser.c:12208 cp/parser.c:12315 +#: cp/parser.c:12209 cp/parser.c:12316 #, gcc-internal-format msgid "template parameter packs cannot have default arguments" msgstr "" -#: cp/parser.c:12397 +#: cp/parser.c:12398 #, gcc-internal-format msgid "expected template-id" msgstr "" -#: cp/parser.c:12444 cp/parser.c:22222 +#: cp/parser.c:12445 cp/parser.c:22223 #, gcc-internal-format msgid "expected %<<%>" msgstr "" -#: cp/parser.c:12451 +#: cp/parser.c:12452 #, gcc-internal-format msgid "%<<::%> cannot begin a template-argument list" msgstr "" -#: cp/parser.c:12455 +#: cp/parser.c:12456 #, gcc-internal-format msgid "" "%<<:%> is an alternate spelling for %<[%>. Insert whitespace between %<<%> " "and %<::%>" msgstr "" -#: cp/parser.c:12533 +#: cp/parser.c:12534 #, gcc-internal-format msgid "parse error in template argument list" msgstr "" #. The name does not name a template. -#: cp/parser.c:12601 cp/parser.c:12716 cp/parser.c:12927 +#: cp/parser.c:12602 cp/parser.c:12717 cp/parser.c:12928 #, gcc-internal-format msgid "expected template-name" msgstr "" #. Explain what went wrong. -#: cp/parser.c:12647 +#: cp/parser.c:12648 #, gcc-internal-format msgid "non-template %qD used as template" msgstr "" -#: cp/parser.c:12649 +#: cp/parser.c:12650 #, gcc-internal-format msgid "use %<%T::template %D%> to indicate that it is a template" msgstr "" -#: cp/parser.c:12783 +#: cp/parser.c:12784 #, gcc-internal-format msgid "expected parameter pack before %<...%>" msgstr "" -#: cp/parser.c:12892 cp/parser.c:12910 cp/parser.c:13051 +#: cp/parser.c:12893 cp/parser.c:12911 cp/parser.c:13052 #, gcc-internal-format msgid "expected template-argument" msgstr "" -#: cp/parser.c:13034 +#: cp/parser.c:13035 #, gcc-internal-format msgid "invalid non-type template argument" msgstr "" -#: cp/parser.c:13150 +#: cp/parser.c:13151 #, gcc-internal-format msgid "explicit instantiation shall not use %<inline%> specifier" msgstr "" -#: cp/parser.c:13153 +#: cp/parser.c:13154 #, gcc-internal-format msgid "explicit instantiation shall not use %<constexpr%> specifier" msgstr "" -#: cp/parser.c:13212 +#: cp/parser.c:13213 #, gcc-internal-format msgid "template specialization with C linkage" msgstr "" -#: cp/parser.c:13432 +#: cp/parser.c:13433 #, gcc-internal-format msgid "expected type specifier" msgstr "" -#: cp/parser.c:13679 +#: cp/parser.c:13680 #, gcc-internal-format msgid "expected template-id for type" msgstr "" -#: cp/parser.c:13706 +#: cp/parser.c:13707 #, gcc-internal-format msgid "expected type-name" msgstr "" -#: cp/parser.c:13943 +#: cp/parser.c:13944 #, gcc-internal-format msgid "" "elaborated-type-specifier for a scoped enum must not use the %<%D%> keyword" msgstr "" -#: cp/parser.c:14128 +#: cp/parser.c:14129 #, gcc-internal-format msgid "declaration %qD does not declare anything" msgstr "" -#: cp/parser.c:14214 +#: cp/parser.c:14215 #, gcc-internal-format msgid "attributes ignored on uninstantiated type" msgstr "" -#: cp/parser.c:14218 +#: cp/parser.c:14219 #, gcc-internal-format msgid "attributes ignored on template instantiation" msgstr "" -#: cp/parser.c:14223 +#: cp/parser.c:14224 #, gcc-internal-format msgid "" "attributes ignored on elaborated-type-specifier that is not a forward " "declaration" msgstr "" -#: cp/parser.c:14356 +#: cp/parser.c:14357 #, gcc-internal-format msgid "%qD is an enumeration template" msgstr "" -#: cp/parser.c:14364 +#: cp/parser.c:14365 #, gcc-internal-format msgid "%qD is not an enumerator-name" msgstr "" -#: cp/parser.c:14427 +#: cp/parser.c:14428 #, gcc-internal-format msgid "expected %<;%> or %<{%>" msgstr "" -#: cp/parser.c:14475 +#: cp/parser.c:14476 #, gcc-internal-format msgid "cannot add an enumerator list to a template instantiation" msgstr "" -#: cp/parser.c:14484 cp/parser.c:18435 +#: cp/parser.c:14485 cp/parser.c:18436 #, gcc-internal-format msgid "declaration of %qD in namespace %qD which does not enclose %qD" msgstr "" -#: cp/parser.c:14489 cp/parser.c:18440 +#: cp/parser.c:14490 cp/parser.c:18441 #, gcc-internal-format msgid "declaration of %qD in %qD which does not enclose %qD" msgstr "" -#: cp/parser.c:14512 +#: cp/parser.c:14513 #, gcc-internal-format msgid "multiple definition of %q#T" msgstr "" -#: cp/parser.c:14539 +#: cp/parser.c:14540 #, gcc-internal-format msgid "opaque-enum-specifier without name" msgstr "" -#: cp/parser.c:14542 +#: cp/parser.c:14543 #, gcc-internal-format msgid "opaque-enum-specifier must use a simple identifier" msgstr "" -#: cp/parser.c:14718 +#: cp/parser.c:14719 #, gcc-internal-format msgid "%qD is not a namespace-name" msgstr "" -#: cp/parser.c:14719 +#: cp/parser.c:14720 #, gcc-internal-format msgid "expected namespace-name" msgstr "" -#: cp/parser.c:14844 +#: cp/parser.c:14845 #, gcc-internal-format msgid "%<namespace%> definition is not allowed here" msgstr "" -#: cp/parser.c:14990 +#: cp/parser.c:14991 #, gcc-internal-format msgid "a template-id may not appear in a using-declaration" msgstr "" -#: cp/parser.c:15030 +#: cp/parser.c:15031 #, gcc-internal-format msgid "" "access declarations are deprecated in favour of using-declarations; " "suggestion: add the %<using%> keyword" msgstr "" -#: cp/parser.c:15085 +#: cp/parser.c:15086 #, gcc-internal-format msgid "types may not be defined in alias template declarations" msgstr "" -#: cp/parser.c:15532 +#: cp/parser.c:15533 #, gcc-internal-format msgid "a function-definition is not allowed here" msgstr "" -#: cp/parser.c:15544 +#: cp/parser.c:15545 #, gcc-internal-format msgid "an asm-specification is not allowed on a function-definition" msgstr "" -#: cp/parser.c:15548 +#: cp/parser.c:15549 #, gcc-internal-format msgid "attributes are not allowed on a function-definition" msgstr "" -#: cp/parser.c:15585 +#: cp/parser.c:15586 #, gcc-internal-format msgid "expected constructor, destructor, or type conversion" msgstr "" #. Anything else is an error. -#: cp/parser.c:15620 cp/parser.c:17500 +#: cp/parser.c:15621 cp/parser.c:17501 #, gcc-internal-format msgid "expected initializer" msgstr "" -#: cp/parser.c:15640 +#: cp/parser.c:15641 #, gcc-internal-format msgid "invalid type in declaration" msgstr "" -#: cp/parser.c:15716 +#: cp/parser.c:15717 #, gcc-internal-format msgid "initializer provided for function" msgstr "" -#: cp/parser.c:15748 +#: cp/parser.c:15749 #, gcc-internal-format msgid "attributes after parenthesized initializer ignored" msgstr "" -#: cp/parser.c:16152 +#: cp/parser.c:16153 #, gcc-internal-format msgid "array bound is not an integer constant" msgstr "" -#: cp/parser.c:16273 +#: cp/parser.c:16274 #, gcc-internal-format msgid "cannot define member of dependent typedef %qT" msgstr "" -#: cp/parser.c:16277 +#: cp/parser.c:16278 #, gcc-internal-format msgid "%<%T::%E%> is not a type" msgstr "" -#: cp/parser.c:16305 +#: cp/parser.c:16306 #, gcc-internal-format msgid "invalid use of constructor as a template" msgstr "" -#: cp/parser.c:16307 +#: cp/parser.c:16308 #, gcc-internal-format msgid "" "use %<%T::%D%> instead of %<%T::%D%> to name the constructor in a qualified " @@ -32199,251 +32407,251 @@ msgstr "" #. here because we do not have enough #. information about its original syntactic #. form. -#: cp/parser.c:16324 +#: cp/parser.c:16325 #, gcc-internal-format msgid "invalid declarator" msgstr "" -#: cp/parser.c:16390 +#: cp/parser.c:16391 #, gcc-internal-format msgid "expected declarator" msgstr "" -#: cp/parser.c:16485 +#: cp/parser.c:16486 #, gcc-internal-format msgid "%qD is a namespace" msgstr "" -#: cp/parser.c:16487 +#: cp/parser.c:16488 #, gcc-internal-format msgid "cannot form pointer to member of non-class %q#T" msgstr "" -#: cp/parser.c:16504 +#: cp/parser.c:16505 #, gcc-internal-format msgid "expected ptr-operator" msgstr "" -#: cp/parser.c:16563 +#: cp/parser.c:16564 #, gcc-internal-format msgid "duplicate cv-qualifier" msgstr "" -#: cp/parser.c:16621 +#: cp/parser.c:16622 #, gcc-internal-format msgid "duplicate virt-specifier" msgstr "" -#: cp/parser.c:16783 cp/typeck2.c:450 cp/typeck2.c:1670 +#: cp/parser.c:16784 cp/typeck2.c:450 cp/typeck2.c:1675 #, gcc-internal-format msgid "invalid use of %<auto%>" msgstr "" -#: cp/parser.c:16802 +#: cp/parser.c:16803 #, gcc-internal-format msgid "types may not be defined in template arguments" msgstr "" -#: cp/parser.c:16883 +#: cp/parser.c:16884 #, gcc-internal-format msgid "expected type-specifier" msgstr "" -#: cp/parser.c:17127 +#: cp/parser.c:17128 #, gcc-internal-format msgid "expected %<,%> or %<...%>" msgstr "" -#: cp/parser.c:17184 +#: cp/parser.c:17185 #, gcc-internal-format msgid "types may not be defined in parameter types" msgstr "" -#: cp/parser.c:17310 +#: cp/parser.c:17311 #, gcc-internal-format msgid "deprecated use of default argument for parameter of non-function" msgstr "" -#: cp/parser.c:17314 +#: cp/parser.c:17315 #, gcc-internal-format msgid "default arguments are only permitted for function parameters" msgstr "" -#: cp/parser.c:17333 +#: cp/parser.c:17334 #, gcc-internal-format msgid "parameter pack %qD cannot have a default argument" msgstr "" -#: cp/parser.c:17341 +#: cp/parser.c:17342 #, gcc-internal-format msgid "parameter pack cannot have a default argument" msgstr "" -#: cp/parser.c:17628 +#: cp/parser.c:17629 #, gcc-internal-format msgid "ISO C++ does not allow designated initializers" msgstr "" -#: cp/parser.c:17642 +#: cp/parser.c:17643 #, gcc-internal-format msgid "ISO C++ does not allow C99 designated initializers" msgstr "" -#: cp/parser.c:17746 cp/parser.c:17868 +#: cp/parser.c:17747 cp/parser.c:17869 #, gcc-internal-format msgid "expected class-name" msgstr "" -#: cp/parser.c:18057 +#: cp/parser.c:18058 #, gcc-internal-format msgid "expected %<;%> after class definition" msgstr "" -#: cp/parser.c:18059 +#: cp/parser.c:18060 #, gcc-internal-format msgid "expected %<;%> after struct definition" msgstr "" -#: cp/parser.c:18061 +#: cp/parser.c:18062 #, gcc-internal-format msgid "expected %<;%> after union definition" msgstr "" -#: cp/parser.c:18383 +#: cp/parser.c:18384 #, gcc-internal-format msgid "expected %<{%> or %<:%>" msgstr "" -#: cp/parser.c:18394 +#: cp/parser.c:18395 #, gcc-internal-format msgid "cannot specify %<override%> for a class" msgstr "" -#: cp/parser.c:18402 +#: cp/parser.c:18403 #, gcc-internal-format msgid "global qualification of class name is invalid" msgstr "" -#: cp/parser.c:18409 +#: cp/parser.c:18410 #, gcc-internal-format msgid "qualified name does not name a class" msgstr "" -#: cp/parser.c:18421 +#: cp/parser.c:18422 #, gcc-internal-format msgid "invalid class name in declaration of %qD" msgstr "" -#: cp/parser.c:18454 +#: cp/parser.c:18455 #, gcc-internal-format msgid "extra qualification not allowed" msgstr "" -#: cp/parser.c:18466 +#: cp/parser.c:18467 #, gcc-internal-format msgid "an explicit specialization must be preceded by %<template <>%>" msgstr "" -#: cp/parser.c:18496 +#: cp/parser.c:18497 #, gcc-internal-format msgid "function template %qD redeclared as a class template" msgstr "" -#: cp/parser.c:18527 +#: cp/parser.c:18528 #, gcc-internal-format msgid "could not resolve typename type" msgstr "" -#: cp/parser.c:18579 +#: cp/parser.c:18580 #, gcc-internal-format msgid "previous definition of %q+#T" msgstr "" -#: cp/parser.c:18645 cp/parser.c:22267 +#: cp/parser.c:18646 cp/parser.c:22268 #, gcc-internal-format msgid "expected class-key" msgstr "" -#: cp/parser.c:18874 +#: cp/parser.c:18875 #, gcc-internal-format msgid "in C++03 a class-key must be used when declaring a friend" msgstr "" -#: cp/parser.c:18892 +#: cp/parser.c:18893 #, gcc-internal-format msgid "friend declaration does not name a class or function" msgstr "" -#: cp/parser.c:19102 +#: cp/parser.c:19103 #, gcc-internal-format msgid "pure-specifier on function-definition" msgstr "" -#: cp/parser.c:19150 +#: cp/parser.c:19151 #, gcc-internal-format msgid "expected %<;%> at end of member declaration" msgstr "" -#: cp/parser.c:19221 +#: cp/parser.c:19222 #, gcc-internal-format msgid "invalid pure specifier (only %<= 0%> is allowed)" msgstr "" -#: cp/parser.c:19256 +#: cp/parser.c:19257 #, gcc-internal-format msgid "a brace-enclosed initializer is not allowed here" msgstr "" -#: cp/parser.c:19387 +#: cp/parser.c:19388 #, gcc-internal-format msgid "%<virtual%> specified more than once in base-specified" msgstr "" -#: cp/parser.c:19407 +#: cp/parser.c:19408 #, gcc-internal-format msgid "more than one access specifier in base-specified" msgstr "" -#: cp/parser.c:19431 +#: cp/parser.c:19432 #, gcc-internal-format msgid "keyword %<typename%> not allowed outside of templates" msgstr "" -#: cp/parser.c:19434 +#: cp/parser.c:19435 #, gcc-internal-format msgid "" "keyword %<typename%> not allowed in this context (the base class is " "implicitly a type)" msgstr "" -#: cp/parser.c:19527 cp/parser.c:19609 +#: cp/parser.c:19528 cp/parser.c:19610 #, gcc-internal-format msgid "types may not be defined in an exception-specification" msgstr "" -#: cp/parser.c:19591 +#: cp/parser.c:19592 #, gcc-internal-format msgid "" "dynamic exception specifications are deprecated in C++0x; use %<noexcept%> " "instead" msgstr "" -#: cp/parser.c:19790 +#: cp/parser.c:19791 #, gcc-internal-format msgid "types may not be defined in exception-declarations" msgstr "" -#: cp/parser.c:20690 +#: cp/parser.c:20691 #, gcc-internal-format msgid "specializing member %<%T::%E%> requires %<template<>%> syntax" msgstr "" -#: cp/parser.c:20695 +#: cp/parser.c:20696 #, gcc-internal-format msgid "invalid declaration of %<%T::%E%>" msgstr "" -#: cp/parser.c:20699 +#: cp/parser.c:20700 #, gcc-internal-format msgid "too few template-parameter-lists" msgstr "" @@ -32452,320 +32660,320 @@ msgstr "" #. something like: #. #. template <class T> template <class U> void S::f(); -#: cp/parser.c:20706 +#: cp/parser.c:20707 #, gcc-internal-format msgid "too many template-parameter-lists" msgstr "" -#: cp/parser.c:21003 +#: cp/parser.c:21004 #, gcc-internal-format msgid "named return values are no longer supported" msgstr "" -#: cp/parser.c:21090 +#: cp/parser.c:21091 #, gcc-internal-format msgid "invalid declaration of member template in local class" msgstr "" -#: cp/parser.c:21099 +#: cp/parser.c:21100 #, gcc-internal-format msgid "template with C linkage" msgstr "" -#: cp/parser.c:21118 +#: cp/parser.c:21119 #, gcc-internal-format msgid "invalid explicit specialization" msgstr "" -#: cp/parser.c:21204 +#: cp/parser.c:21205 #, gcc-internal-format msgid "" "literal operator template %qD has invalid parameter list. Expected non-type " "template argument pack <char...>" msgstr "" -#: cp/parser.c:21278 +#: cp/parser.c:21279 #, gcc-internal-format msgid "template declaration of %<typedef%>" msgstr "" -#: cp/parser.c:21355 +#: cp/parser.c:21356 #, gcc-internal-format msgid "explicit template specialization cannot have a storage class" msgstr "" -#: cp/parser.c:21590 +#: cp/parser.c:21591 #, gcc-internal-format msgid "%<>>%> should be %<> >%> within a nested template argument list" msgstr "" -#: cp/parser.c:21603 +#: cp/parser.c:21604 #, gcc-internal-format msgid "spurious %<>>%>, use %<>%> to terminate a template argument list" msgstr "" -#: cp/parser.c:22009 +#: cp/parser.c:22010 #, gcc-internal-format msgid "invalid use of %qD in linkage specification" msgstr "" -#: cp/parser.c:22022 +#: cp/parser.c:22023 #, gcc-internal-format msgid "%<__thread%> before %qD" msgstr "" -#: cp/parser.c:22125 +#: cp/parser.c:22126 #, gcc-internal-format msgid "expected %<new%>" msgstr "" -#: cp/parser.c:22128 +#: cp/parser.c:22129 #, gcc-internal-format msgid "expected %<delete%>" msgstr "" -#: cp/parser.c:22131 +#: cp/parser.c:22132 #, gcc-internal-format msgid "expected %<return%>" msgstr "" -#: cp/parser.c:22137 +#: cp/parser.c:22138 #, gcc-internal-format msgid "expected %<extern%>" msgstr "" -#: cp/parser.c:22140 +#: cp/parser.c:22141 #, gcc-internal-format msgid "expected %<static_assert%>" msgstr "" -#: cp/parser.c:22143 +#: cp/parser.c:22144 #, gcc-internal-format msgid "expected %<decltype%>" msgstr "" -#: cp/parser.c:22146 +#: cp/parser.c:22147 #, gcc-internal-format msgid "expected %<operator%>" msgstr "" -#: cp/parser.c:22149 +#: cp/parser.c:22150 #, gcc-internal-format msgid "expected %<class%>" msgstr "" -#: cp/parser.c:22152 +#: cp/parser.c:22153 #, gcc-internal-format msgid "expected %<template%>" msgstr "" -#: cp/parser.c:22155 +#: cp/parser.c:22156 #, gcc-internal-format msgid "expected %<namespace%>" msgstr "" -#: cp/parser.c:22158 +#: cp/parser.c:22159 #, gcc-internal-format msgid "expected %<using%>" msgstr "" -#: cp/parser.c:22161 +#: cp/parser.c:22162 #, gcc-internal-format msgid "expected %<asm%>" msgstr "" -#: cp/parser.c:22164 +#: cp/parser.c:22165 #, gcc-internal-format msgid "expected %<try%>" msgstr "" -#: cp/parser.c:22167 +#: cp/parser.c:22168 #, gcc-internal-format msgid "expected %<catch%>" msgstr "" -#: cp/parser.c:22170 +#: cp/parser.c:22171 #, gcc-internal-format msgid "expected %<throw%>" msgstr "" -#: cp/parser.c:22173 +#: cp/parser.c:22174 #, gcc-internal-format msgid "expected %<__label__%>" msgstr "" -#: cp/parser.c:22176 +#: cp/parser.c:22177 #, gcc-internal-format msgid "expected %<@try%>" msgstr "" -#: cp/parser.c:22179 +#: cp/parser.c:22180 #, gcc-internal-format msgid "expected %<@synchronized%>" msgstr "" -#: cp/parser.c:22182 +#: cp/parser.c:22183 #, gcc-internal-format msgid "expected %<@throw%>" msgstr "" -#: cp/parser.c:22185 +#: cp/parser.c:22186 #, gcc-internal-format msgid "expected %<__transaction_atomic%>" msgstr "" -#: cp/parser.c:22188 +#: cp/parser.c:22189 #, gcc-internal-format msgid "expected %<__transaction_relaxed%>" msgstr "" -#: cp/parser.c:22219 +#: cp/parser.c:22220 #, gcc-internal-format msgid "expected %<::%>" msgstr "" -#: cp/parser.c:22231 +#: cp/parser.c:22232 #, gcc-internal-format msgid "expected %<...%>" msgstr "" -#: cp/parser.c:22234 +#: cp/parser.c:22235 #, gcc-internal-format msgid "expected %<*%>" msgstr "" -#: cp/parser.c:22237 +#: cp/parser.c:22238 #, gcc-internal-format msgid "expected %<~%>" msgstr "" -#: cp/parser.c:22243 +#: cp/parser.c:22244 #, gcc-internal-format msgid "expected %<:%> or %<::%>" msgstr "" -#: cp/parser.c:22271 +#: cp/parser.c:22272 #, gcc-internal-format msgid "expected %<class%>, %<typename%>, or %<template%>" msgstr "" -#: cp/parser.c:22509 +#: cp/parser.c:22510 #, gcc-internal-format msgid "%qs tag used in naming %q#T" msgstr "" -#: cp/parser.c:22514 +#: cp/parser.c:22515 #, gcc-internal-format msgid "%q#T was previously declared here" msgstr "" -#: cp/parser.c:22533 +#: cp/parser.c:22534 #, gcc-internal-format msgid "%qD redeclared with different access" msgstr "" -#: cp/parser.c:22552 +#: cp/parser.c:22553 #, gcc-internal-format msgid "%<template%> (as a disambiguator) is only allowed within templates" msgstr "" -#: cp/parser.c:22785 +#: cp/parser.c:22786 #, gcc-internal-format msgid "file ends in default argument" msgstr "" -#: cp/parser.c:22989 cp/parser.c:24251 cp/parser.c:24437 +#: cp/parser.c:22990 cp/parser.c:24252 cp/parser.c:24438 #, gcc-internal-format msgid "misplaced %<@%D%> Objective-C++ construct" msgstr "" -#: cp/parser.c:23111 +#: cp/parser.c:23112 #, gcc-internal-format msgid "objective-c++ message argument(s) are expected" msgstr "" -#: cp/parser.c:23140 +#: cp/parser.c:23141 #, gcc-internal-format msgid "%<@encode%> must specify a type as an argument" msgstr "" -#: cp/parser.c:23516 +#: cp/parser.c:23517 #, gcc-internal-format msgid "invalid Objective-C++ selector name" msgstr "" -#: cp/parser.c:23591 cp/parser.c:23609 +#: cp/parser.c:23592 cp/parser.c:23610 #, gcc-internal-format msgid "objective-c++ method declaration is expected" msgstr "" -#: cp/parser.c:23603 cp/parser.c:23668 +#: cp/parser.c:23604 cp/parser.c:23669 #, gcc-internal-format msgid "method attributes must be specified at the end" msgstr "" -#: cp/parser.c:23711 +#: cp/parser.c:23712 #, gcc-internal-format msgid "stray %qs between Objective-C++ methods" msgstr "" -#: cp/parser.c:23917 cp/parser.c:23924 cp/parser.c:23931 +#: cp/parser.c:23918 cp/parser.c:23925 cp/parser.c:23932 #, gcc-internal-format msgid "invalid type for instance variable" msgstr "" -#: cp/parser.c:24045 +#: cp/parser.c:24046 #, gcc-internal-format msgid "identifier expected after %<@protocol%>" msgstr "" -#: cp/parser.c:24216 +#: cp/parser.c:24217 #, gcc-internal-format msgid "" "attributes may not be specified before the %<@%D%> Objective-C++ keyword" msgstr "" -#: cp/parser.c:24223 +#: cp/parser.c:24224 #, gcc-internal-format msgid "prefix attributes are ignored before %<@%D%>" msgstr "" -#: cp/parser.c:24496 cp/parser.c:24503 cp/parser.c:24510 +#: cp/parser.c:24497 cp/parser.c:24504 cp/parser.c:24511 #, gcc-internal-format msgid "invalid type for property" msgstr "" -#: cp/parser.c:26240 +#: cp/parser.c:26241 #, gcc-internal-format msgid "parenthesized initialization is not allowed in OpenMP %<for%> loop" msgstr "" -#: cp/parser.c:26407 cp/pt.c:12680 +#: cp/parser.c:26408 cp/pt.c:12693 #, gcc-internal-format msgid "iteration variable %qD should not be reduction" msgstr "" -#: cp/parser.c:26475 +#: cp/parser.c:26476 #, gcc-internal-format msgid "not enough collapsed for loops" msgstr "" -#: cp/parser.c:27033 cp/semantics.c:5022 +#: cp/parser.c:27034 cp/semantics.c:5022 #, gcc-internal-format msgid "%<__transaction_relaxed%> without transactional memory support enabled" msgstr "" -#: cp/parser.c:27035 cp/semantics.c:5024 +#: cp/parser.c:27036 cp/semantics.c:5024 #, gcc-internal-format msgid "%<__transaction_atomic%> without transactional memory support enabled" msgstr "" -#: cp/parser.c:27232 +#: cp/parser.c:27233 #, gcc-internal-format msgid "junk at end of %<#pragma GCC pch_preprocess%>" msgstr "" -#: cp/parser.c:27411 +#: cp/parser.c:27412 #, gcc-internal-format msgid "inter-module optimizations not implemented for C++" msgstr "" @@ -32965,117 +33173,117 @@ msgstr "" msgid "expansion pattern %<%E%> contains no argument packs" msgstr "" -#: cp/pt.c:3277 +#: cp/pt.c:3279 #, gcc-internal-format msgid "parameter packs not expanded with %<...%>:" msgstr "" -#: cp/pt.c:3292 cp/pt.c:4370 +#: cp/pt.c:3294 cp/pt.c:4372 #, gcc-internal-format msgid " %qD" msgstr "" -#: cp/pt.c:3294 +#: cp/pt.c:3296 #, gcc-internal-format msgid " <anonymous>" msgstr "" -#: cp/pt.c:3411 +#: cp/pt.c:3413 #, gcc-internal-format msgid "declaration of %q+#D" msgstr "" -#: cp/pt.c:3412 +#: cp/pt.c:3414 #, gcc-internal-format msgid " shadows template parm %q+#D" msgstr "" -#: cp/pt.c:4366 +#: cp/pt.c:4368 #, gcc-internal-format msgid "template parameters not used in partial specialization:" msgstr "" -#: cp/pt.c:4384 +#: cp/pt.c:4386 #, gcc-internal-format msgid "partial specialization %qT does not specialize any template arguments" msgstr "" -#: cp/pt.c:4429 +#: cp/pt.c:4431 #, gcc-internal-format msgid "" "parameter pack argument %qE must be at the end of the template argument list" msgstr "" -#: cp/pt.c:4432 +#: cp/pt.c:4434 #, gcc-internal-format msgid "" "parameter pack argument %qT must be at the end of the template argument list" msgstr "" -#: cp/pt.c:4451 +#: cp/pt.c:4453 #, gcc-internal-format msgid "template argument %qE involves template parameter(s)" msgstr "" -#: cp/pt.c:4497 +#: cp/pt.c:4499 #, gcc-internal-format msgid "type %qT of template argument %qE depends on a template parameter" msgid_plural "type %qT of template argument %qE depends on template parameters" msgstr[0] "" msgstr[1] "" -#: cp/pt.c:4527 +#: cp/pt.c:4529 #, gcc-internal-format msgid "partial specialization of %qT after instantiation of %qT" msgstr "" -#: cp/pt.c:4620 +#: cp/pt.c:4622 #, gcc-internal-format msgid "no default argument for %qD" msgstr "" -#: cp/pt.c:4641 +#: cp/pt.c:4643 #, gcc-internal-format msgid "parameter pack %qE must be at the end of the template parameter list" msgstr "" -#: cp/pt.c:4644 +#: cp/pt.c:4646 #, gcc-internal-format msgid "parameter pack %qT must be at the end of the template parameter list" msgstr "" -#: cp/pt.c:4681 +#: cp/pt.c:4683 #, gcc-internal-format msgid "" "default template arguments may not be used in function template friend re-" "declaration" msgstr "" -#: cp/pt.c:4684 +#: cp/pt.c:4686 #, gcc-internal-format msgid "" "default template arguments may not be used in function template friend " "declarations" msgstr "" -#: cp/pt.c:4687 +#: cp/pt.c:4689 #, gcc-internal-format msgid "" "default template arguments may not be used in function templates without -" "std=c++11 or -std=gnu++11" msgstr "" -#: cp/pt.c:4690 +#: cp/pt.c:4692 #, gcc-internal-format msgid "default template arguments may not be used in partial specializations" msgstr "" -#: cp/pt.c:4693 cp/pt.c:4744 +#: cp/pt.c:4695 cp/pt.c:4746 #, gcc-internal-format msgid "default argument for template parameter for class enclosing %qD" msgstr "" -#: cp/pt.c:4837 +#: cp/pt.c:4839 #, gcc-internal-format msgid "template class without a name" msgstr "" @@ -33083,7 +33291,7 @@ msgstr "" #. [temp.mem] #. #. A destructor shall not be a member template. -#: cp/pt.c:4847 +#: cp/pt.c:4849 #, gcc-internal-format msgid "destructor %qD declared as member template" msgstr "" @@ -33093,76 +33301,76 @@ msgstr "" #. An allocation function can be a function #. template. ... Template allocation functions shall #. have two or more parameters. -#: cp/pt.c:4862 +#: cp/pt.c:4864 #, gcc-internal-format msgid "invalid template declaration of %qD" msgstr "" -#: cp/pt.c:4986 +#: cp/pt.c:4988 #, gcc-internal-format msgid "template definition of non-template %q#D" msgstr "" -#: cp/pt.c:5029 +#: cp/pt.c:5031 #, gcc-internal-format msgid "expected %d levels of template parms for %q#D, got %d" msgstr "" -#: cp/pt.c:5041 +#: cp/pt.c:5043 #, gcc-internal-format msgid "got %d template parameters for %q#D" msgstr "" -#: cp/pt.c:5044 +#: cp/pt.c:5046 #, gcc-internal-format msgid "got %d template parameters for %q#T" msgstr "" -#: cp/pt.c:5046 +#: cp/pt.c:5048 #, gcc-internal-format, gfc-internal-format msgid " but %d required" msgstr "" -#: cp/pt.c:5067 +#: cp/pt.c:5069 #, gcc-internal-format msgid "template arguments to %qD do not match original template %qD" msgstr "" -#: cp/pt.c:5071 +#: cp/pt.c:5073 #, gcc-internal-format msgid "use template<> for an explicit specialization" msgstr "" -#: cp/pt.c:5172 +#: cp/pt.c:5174 #, gcc-internal-format msgid "%qT is not a template type" msgstr "" -#: cp/pt.c:5185 +#: cp/pt.c:5187 #, gcc-internal-format msgid "template specifiers not specified in declaration of %qD" msgstr "" -#: cp/pt.c:5196 +#: cp/pt.c:5198 #, gcc-internal-format, gfc-internal-format msgid "redeclared with %d template parameter" msgid_plural "redeclared with %d template parameters" msgstr[0] "" msgstr[1] "" -#: cp/pt.c:5200 +#: cp/pt.c:5202 #, gcc-internal-format msgid "previous declaration %q+D used %d template parameter" msgid_plural "previous declaration %q+D used %d template parameters" msgstr[0] "" msgstr[1] "" -#: cp/pt.c:5237 +#: cp/pt.c:5239 #, gcc-internal-format msgid "template parameter %q+#D" msgstr "" -#: cp/pt.c:5238 +#: cp/pt.c:5240 #, gcc-internal-format msgid "redeclared here as %q#D" msgstr "" @@ -33171,357 +33379,357 @@ msgstr "" #. #. A template-parameter may not be given default arguments #. by two different declarations in the same scope. -#: cp/pt.c:5248 +#: cp/pt.c:5250 #, gcc-internal-format msgid "redefinition of default argument for %q#D" msgstr "" -#: cp/pt.c:5250 +#: cp/pt.c:5252 #, gcc-internal-format msgid "original definition appeared here" msgstr "" -#: cp/pt.c:5368 +#: cp/pt.c:5370 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because %qD has no linkage" msgstr "" -#: cp/pt.c:5372 +#: cp/pt.c:5374 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because %qD does not have " "external linkage" msgstr "" -#: cp/pt.c:5396 cp/pt.c:5997 +#: cp/pt.c:5398 cp/pt.c:5999 #, gcc-internal-format msgid "%qE is not a valid template argument for type %qT" msgstr "" -#: cp/pt.c:5398 +#: cp/pt.c:5400 #, gcc-internal-format msgid "it must be a pointer-to-member of the form %<&X::Y%>" msgstr "" -#: cp/pt.c:5449 +#: cp/pt.c:5451 #, gcc-internal-format msgid " couldn't deduce template parameter %qD" msgstr "" -#: cp/pt.c:5464 +#: cp/pt.c:5466 #, gcc-internal-format msgid " types %qT and %qT have incompatible cv-qualifiers" msgstr "" -#: cp/pt.c:5473 +#: cp/pt.c:5475 #, gcc-internal-format msgid " mismatched types %qT and %qT" msgstr "" -#: cp/pt.c:5482 +#: cp/pt.c:5484 #, gcc-internal-format msgid " template parameter %qD is not a parameter pack, but argument %qD is" msgstr "" -#: cp/pt.c:5493 +#: cp/pt.c:5495 #, gcc-internal-format msgid " template argument %qE does not match pointer-to-member constant %qE" msgstr "" -#: cp/pt.c:5503 +#: cp/pt.c:5505 #, gcc-internal-format msgid " %qE is not equivalent to %qE" msgstr "" -#: cp/pt.c:5512 +#: cp/pt.c:5514 #, gcc-internal-format msgid " inconsistent parameter pack deduction with %qT and %qT" msgstr "" -#: cp/pt.c:5524 +#: cp/pt.c:5526 #, gcc-internal-format msgid " deduced conflicting types for parameter %qT (%qT and %qT)" msgstr "" -#: cp/pt.c:5528 +#: cp/pt.c:5530 #, gcc-internal-format msgid " deduced conflicting values for non-type parameter %qE (%qE and %qE)" msgstr "" -#: cp/pt.c:5539 +#: cp/pt.c:5541 #, gcc-internal-format msgid " variable-sized array type %qT is not a valid template argument" msgstr "" -#: cp/pt.c:5550 +#: cp/pt.c:5552 #, gcc-internal-format msgid " member function type %qT is not a valid template argument" msgstr "" -#: cp/pt.c:5583 +#: cp/pt.c:5585 #, gcc-internal-format msgid " cannot convert %qE (type %qT) to type %qT" msgstr "" -#: cp/pt.c:5596 +#: cp/pt.c:5598 #, gcc-internal-format msgid " %qT is an ambiguous base class of %qT" msgstr "" -#: cp/pt.c:5600 +#: cp/pt.c:5602 #, gcc-internal-format msgid " %qT is not derived from %qT" msgstr "" -#: cp/pt.c:5611 +#: cp/pt.c:5613 #, gcc-internal-format msgid "" " template parameters of a template template argument are inconsistent with " "other deduced template arguments" msgstr "" -#: cp/pt.c:5621 +#: cp/pt.c:5623 #, gcc-internal-format msgid " can't deduce a template for %qT from non-template type %qT" msgstr "" -#: cp/pt.c:5631 +#: cp/pt.c:5633 #, gcc-internal-format msgid " template argument %qE does not match %qD" msgstr "" -#: cp/pt.c:5640 +#: cp/pt.c:5642 #, gcc-internal-format msgid " could not resolve address from overloaded function %qE" msgstr "" -#: cp/pt.c:5679 +#: cp/pt.c:5681 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because string literals " "can never be used in this context" msgstr "" -#: cp/pt.c:5816 +#: cp/pt.c:5818 #, gcc-internal-format msgid "in template argument for type %qT " msgstr "" -#: cp/pt.c:5858 +#: cp/pt.c:5860 #, gcc-internal-format msgid "" "%qD is not a valid template argument because %qD is a variable, not the " "address of a variable" msgstr "" -#: cp/pt.c:5876 +#: cp/pt.c:5878 #, gcc-internal-format msgid "" "%qE is not a valid template argument of type %qT because %qE is not a " "variable" msgstr "" -#: cp/pt.c:5883 +#: cp/pt.c:5885 #, gcc-internal-format msgid "" "%qE is not a valid template argument of type %qT because %qD does not have " "external linkage" msgstr "" -#: cp/pt.c:5890 +#: cp/pt.c:5892 #, gcc-internal-format msgid "" "%qE is not a valid template argument of type %qT because %qD has no linkage" msgstr "" -#: cp/pt.c:5920 +#: cp/pt.c:5922 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because of conflicts in cv-" "qualification" msgstr "" -#: cp/pt.c:5927 +#: cp/pt.c:5929 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because it is not an lvalue" msgstr "" -#: cp/pt.c:5944 +#: cp/pt.c:5946 #, gcc-internal-format msgid "" "%q#D is not a valid template argument for type %qT because a reference " "variable does not have a constant address" msgstr "" -#: cp/pt.c:5953 +#: cp/pt.c:5955 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because it is not an " "object with external linkage" msgstr "" -#: cp/pt.c:5961 +#: cp/pt.c:5963 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because object %qD has not " "external linkage" msgstr "" -#: cp/pt.c:5998 +#: cp/pt.c:6000 #, gcc-internal-format msgid "it must be the address of a function with external linkage" msgstr "" -#: cp/pt.c:6012 +#: cp/pt.c:6014 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because it is a pointer" msgstr "" -#: cp/pt.c:6014 +#: cp/pt.c:6016 #, gcc-internal-format msgid "try using %qE instead" msgstr "" -#: cp/pt.c:6052 cp/pt.c:6081 +#: cp/pt.c:6054 cp/pt.c:6083 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because it is of type %qT" msgstr "" -#: cp/pt.c:6058 +#: cp/pt.c:6060 #, gcc-internal-format msgid "standard conversions are not allowed in this context" msgstr "" -#: cp/pt.c:6368 +#: cp/pt.c:6370 #, gcc-internal-format msgid "ignoring attributes on template argument %qT" msgstr "" -#: cp/pt.c:6426 +#: cp/pt.c:6428 #, gcc-internal-format msgid "injected-class-name %qD used as template template argument" msgstr "" -#: cp/pt.c:6454 +#: cp/pt.c:6456 #, gcc-internal-format msgid "invalid use of destructor %qE as a type" msgstr "" -#: cp/pt.c:6459 +#: cp/pt.c:6461 #, gcc-internal-format msgid "to refer to a type member of a template parameter, use %<typename %E%>" msgstr "" -#: cp/pt.c:6475 cp/pt.c:6494 cp/pt.c:6540 +#: cp/pt.c:6477 cp/pt.c:6496 cp/pt.c:6542 #, gcc-internal-format msgid "type/value mismatch at argument %d in template parameter list for %qD" msgstr "" -#: cp/pt.c:6479 +#: cp/pt.c:6481 #, gcc-internal-format msgid " expected a constant of type %qT, got %qT" msgstr "" -#: cp/pt.c:6483 +#: cp/pt.c:6485 #, gcc-internal-format msgid " expected a class template, got %qE" msgstr "" -#: cp/pt.c:6485 +#: cp/pt.c:6487 #, gcc-internal-format msgid " expected a type, got %qE" msgstr "" -#: cp/pt.c:6498 +#: cp/pt.c:6500 #, gcc-internal-format msgid " expected a type, got %qT" msgstr "" -#: cp/pt.c:6500 +#: cp/pt.c:6502 #, gcc-internal-format msgid " expected a class template, got %qT" msgstr "" -#: cp/pt.c:6543 +#: cp/pt.c:6545 #, gcc-internal-format msgid " expected a template of type %qD, got %qT" msgstr "" #. Not sure if this is reachable, but it doesn't hurt #. to be robust. -#: cp/pt.c:6576 +#: cp/pt.c:6578 #, gcc-internal-format msgid "type mismatch in nontype parameter pack" msgstr "" -#: cp/pt.c:6598 +#: cp/pt.c:6600 #, gcc-internal-format msgid "could not convert template argument %qE to %qT" msgstr "" -#: cp/pt.c:6664 cp/pt.c:6813 +#: cp/pt.c:6666 cp/pt.c:6815 #, gcc-internal-format, gfc-internal-format msgid "wrong number of template arguments (%d, should be %d)" msgstr "" -#: cp/pt.c:6809 +#: cp/pt.c:6811 #, gcc-internal-format, gfc-internal-format msgid "wrong number of template arguments (%d, should be %d or more)" msgstr "" -#: cp/pt.c:6817 +#: cp/pt.c:6819 #, gcc-internal-format msgid "provided for %q+D" msgstr "" -#: cp/pt.c:6898 +#: cp/pt.c:6900 #, gcc-internal-format, gfc-internal-format msgid "template argument %d is invalid" msgstr "" -#: cp/pt.c:7087 +#: cp/pt.c:7089 #, gcc-internal-format msgid "%q#D is not a function template" msgstr "" -#: cp/pt.c:7251 +#: cp/pt.c:7253 #, gcc-internal-format msgid "non-template type %qT used as a template" msgstr "" -#: cp/pt.c:7253 +#: cp/pt.c:7255 #, gcc-internal-format msgid "for template declaration %q+D" msgstr "" -#: cp/pt.c:8058 +#: cp/pt.c:8060 msgid "" "template instantiation depth exceeds maximum of %d (use -ftemplate-depth= to " "increase the maximum) substituting %qS" msgstr "" -#: cp/pt.c:8062 +#: cp/pt.c:8064 #, gcc-internal-format msgid "" "template instantiation depth exceeds maximum of %d (use -ftemplate-depth= to " "increase the maximum) instantiating %qD" msgstr "" -#: cp/pt.c:9409 +#: cp/pt.c:9411 #, gcc-internal-format msgid "mismatched argument pack lengths while expanding %<%T%>" msgstr "" -#: cp/pt.c:9413 +#: cp/pt.c:9415 #, gcc-internal-format msgid "mismatched argument pack lengths while expanding %<%E%>" msgstr "" -#: cp/pt.c:10539 +#: cp/pt.c:10541 #, gcc-internal-format msgid "instantiation of %q+D as type %qT" msgstr "" @@ -33539,261 +33747,261 @@ msgstr "" #. #. is an attempt to declare a variable with function #. type. -#: cp/pt.c:10695 +#: cp/pt.c:10697 #, gcc-internal-format msgid "variable %qD has function type" msgstr "" -#: cp/pt.c:10864 +#: cp/pt.c:10866 #, gcc-internal-format msgid "invalid parameter type %qT" msgstr "" -#: cp/pt.c:10866 +#: cp/pt.c:10868 #, gcc-internal-format msgid "in declaration %q+D" msgstr "" -#: cp/pt.c:10943 +#: cp/pt.c:10945 #, gcc-internal-format msgid "function returning an array" msgstr "" -#: cp/pt.c:10945 +#: cp/pt.c:10947 #, gcc-internal-format msgid "function returning a function" msgstr "" -#: cp/pt.c:10975 +#: cp/pt.c:10977 #, gcc-internal-format msgid "creating pointer to member function of non-class type %qT" msgstr "" -#: cp/pt.c:11514 +#: cp/pt.c:11518 #, gcc-internal-format msgid "forming reference to void" msgstr "" -#: cp/pt.c:11516 +#: cp/pt.c:11520 #, gcc-internal-format msgid "forming pointer to reference type %qT" msgstr "" -#: cp/pt.c:11518 +#: cp/pt.c:11522 #, gcc-internal-format msgid "forming reference to reference type %qT" msgstr "" -#: cp/pt.c:11567 +#: cp/pt.c:11571 #, gcc-internal-format msgid "creating pointer to member of non-class type %qT" msgstr "" -#: cp/pt.c:11573 +#: cp/pt.c:11577 #, gcc-internal-format msgid "creating pointer to member reference type %qT" msgstr "" -#: cp/pt.c:11579 +#: cp/pt.c:11583 #, gcc-internal-format msgid "creating pointer to member of type void" msgstr "" -#: cp/pt.c:11641 +#: cp/pt.c:11645 #, gcc-internal-format msgid "creating array of %qT" msgstr "" -#: cp/pt.c:11647 +#: cp/pt.c:11651 #, gcc-internal-format msgid "creating array of %qT, which is an abstract class type" msgstr "" -#: cp/pt.c:11676 +#: cp/pt.c:11680 #, gcc-internal-format msgid "%qT is not a class, struct, or union type" msgstr "" -#: cp/pt.c:11713 +#: cp/pt.c:11717 #, gcc-internal-format msgid "%qT resolves to %qT, which is not an enumeration type" msgstr "" -#: cp/pt.c:11721 +#: cp/pt.c:11725 #, gcc-internal-format msgid "%qT resolves to %qT, which is is not a class type" msgstr "" -#: cp/pt.c:11838 +#: cp/pt.c:11842 #, gcc-internal-format msgid "use of %qs in template" msgstr "" -#: cp/pt.c:11974 +#: cp/pt.c:11978 #, gcc-internal-format msgid "qualifying type %qT does not match destructor name ~%qT" msgstr "" -#: cp/pt.c:11989 +#: cp/pt.c:11993 #, gcc-internal-format msgid "" "dependent-name %qE is parsed as a non-type, but instantiation yields a type" msgstr "" -#: cp/pt.c:11991 +#: cp/pt.c:11995 #, gcc-internal-format msgid "say %<typename %E%> if a type is meant" msgstr "" -#: cp/pt.c:12144 +#: cp/pt.c:12148 #, gcc-internal-format msgid "using invalid field %qD" msgstr "" -#: cp/pt.c:12499 cp/pt.c:13300 +#: cp/pt.c:12503 cp/pt.c:13313 #, gcc-internal-format msgid "invalid use of pack expansion expression" msgstr "" -#: cp/pt.c:12503 cp/pt.c:13304 +#: cp/pt.c:12507 cp/pt.c:13317 #, gcc-internal-format msgid "use %<...%> to expand argument pack" msgstr "" -#: cp/pt.c:13880 +#: cp/pt.c:13893 #, gcc-internal-format msgid "" "%qD was not declared in this scope, and no declarations were found by " "argument-dependent lookup at the point of instantiation" msgstr "" -#: cp/pt.c:13889 +#: cp/pt.c:13902 #, gcc-internal-format msgid "declarations in dependent base %qT are not found by unqualified lookup" msgstr "" -#: cp/pt.c:13894 +#: cp/pt.c:13907 #, gcc-internal-format msgid "use %<this->%D%> instead" msgstr "" -#: cp/pt.c:13897 +#: cp/pt.c:13910 #, gcc-internal-format msgid "use %<%T::%D%> instead" msgstr "" -#: cp/pt.c:13901 +#: cp/pt.c:13914 #, gcc-internal-format msgid "%q+D declared here, later in the translation unit" msgstr "" -#: cp/pt.c:14134 +#: cp/pt.c:14147 #, gcc-internal-format msgid "%qT is not a class or namespace" msgstr "" -#: cp/pt.c:14137 +#: cp/pt.c:14150 #, gcc-internal-format msgid "%qD is not a class or namespace" msgstr "" -#: cp/pt.c:14429 +#: cp/pt.c:14442 #, gcc-internal-format msgid "%qT is/uses anonymous type" msgstr "" -#: cp/pt.c:14431 +#: cp/pt.c:14444 #, gcc-internal-format msgid "template argument for %qD uses local type %qT" msgstr "" -#: cp/pt.c:14441 +#: cp/pt.c:14454 #, gcc-internal-format msgid "%qT is a variably modified type" msgstr "" -#: cp/pt.c:14452 +#: cp/pt.c:14465 #, gcc-internal-format msgid "integral expression %qE is not constant" msgstr "" -#: cp/pt.c:14470 +#: cp/pt.c:14483 #, gcc-internal-format msgid " trying to instantiate %qD" msgstr "" -#: cp/pt.c:17791 +#: cp/pt.c:17804 #, gcc-internal-format msgid "ambiguous class template instantiation for %q#T" msgstr "" -#: cp/pt.c:17795 +#: cp/pt.c:17808 #, gcc-internal-format msgid "%s %+#T" msgstr "" -#: cp/pt.c:17819 cp/pt.c:17902 +#: cp/pt.c:17832 cp/pt.c:17915 #, gcc-internal-format msgid "explicit instantiation of non-template %q#D" msgstr "" -#: cp/pt.c:17834 +#: cp/pt.c:17847 #, gcc-internal-format msgid "%qD is not a static data member of a class template" msgstr "" -#: cp/pt.c:17840 cp/pt.c:17897 +#: cp/pt.c:17853 cp/pt.c:17910 #, gcc-internal-format msgid "no matching template for %qD found" msgstr "" -#: cp/pt.c:17845 +#: cp/pt.c:17858 #, gcc-internal-format msgid "" "type %qT for explicit instantiation %qD does not match declared type %qT" msgstr "" -#: cp/pt.c:17853 +#: cp/pt.c:17866 #, gcc-internal-format msgid "explicit instantiation of %q#D" msgstr "" -#: cp/pt.c:17889 +#: cp/pt.c:17902 #, gcc-internal-format msgid "duplicate explicit instantiation of %q#D" msgstr "" -#: cp/pt.c:17912 cp/pt.c:18009 +#: cp/pt.c:17925 cp/pt.c:18022 #, gcc-internal-format msgid "ISO C++ 1998 forbids the use of %<extern%> on explicit instantiations" msgstr "" -#: cp/pt.c:17917 cp/pt.c:18026 +#: cp/pt.c:17930 cp/pt.c:18039 #, gcc-internal-format msgid "storage class %qD applied to template instantiation" msgstr "" -#: cp/pt.c:17985 +#: cp/pt.c:17998 #, gcc-internal-format msgid "explicit instantiation of non-class template %qD" msgstr "" -#: cp/pt.c:17987 +#: cp/pt.c:18000 #, gcc-internal-format msgid "explicit instantiation of non-template type %qT" msgstr "" -#: cp/pt.c:17996 +#: cp/pt.c:18009 #, gcc-internal-format msgid "explicit instantiation of %q#T before definition of template" msgstr "" -#: cp/pt.c:18014 +#: cp/pt.c:18027 #, gcc-internal-format msgid "ISO C++ forbids the use of %qE on explicit instantiations" msgstr "" -#: cp/pt.c:18060 +#: cp/pt.c:18073 #, gcc-internal-format msgid "duplicate explicit instantiation of %q#T" msgstr "" @@ -33805,12 +34013,12 @@ msgstr "" #. member function or static data member of a class template #. shall be present in every translation unit in which it is #. explicitly instantiated. -#: cp/pt.c:18614 +#: cp/pt.c:18627 #, gcc-internal-format msgid "explicit instantiation of %qD but no definition available" msgstr "" -#: cp/pt.c:18790 +#: cp/pt.c:18803 #, gcc-internal-format msgid "" "template instantiation depth exceeds maximum of %d instantiating %q+D, " @@ -33818,24 +34026,24 @@ msgid "" "the maximum)" msgstr "" -#: cp/pt.c:19161 +#: cp/pt.c:19175 #, gcc-internal-format msgid "invalid template non-type parameter" msgstr "" -#: cp/pt.c:19163 +#: cp/pt.c:19177 #, gcc-internal-format msgid "%q#T is not a valid type for a template non-type parameter" msgstr "" -#: cp/pt.c:20249 +#: cp/pt.c:20263 #, gcc-internal-format msgid "" "deducing from brace-enclosed initializer list requires #include " "<initializer_list>" msgstr "" -#: cp/pt.c:20308 +#: cp/pt.c:20322 #, gcc-internal-format msgid "variable %q#D with %<auto%> type used in its own initializer" msgstr "" @@ -33843,12 +34051,12 @@ msgstr "" #. If type is error_mark_node a diagnostic must have been #. emitted by now. Also, having a mention to '<type error>' #. in the diagnostic is not really useful to the user. -#: cp/pt.c:20340 +#: cp/pt.c:20354 #, gcc-internal-format msgid "unable to deduce %qT from %qE" msgstr "" -#: cp/pt.c:20351 +#: cp/pt.c:20365 #, gcc-internal-format msgid "inconsistent deduction for %qT: %qT and then %qT" msgstr "" @@ -34088,7 +34296,7 @@ msgstr "" msgid "invalid base-class specification" msgstr "" -#: cp/semantics.c:2999 cp/semantics.c:8802 +#: cp/semantics.c:2999 cp/semantics.c:8817 #, gcc-internal-format msgid "%qD is not captured" msgstr "" @@ -34268,217 +34476,224 @@ msgstr "" msgid "constexpr constructor does not have empty body" msgstr "" -#: cp/semantics.c:6065 +#: cp/semantics.c:6042 +#, gcc-internal-format +msgid "" +"%<constexpr%> constructor for union %qT must initialize exactly one non-" +"static data member" +msgstr "" + +#: cp/semantics.c:6080 #, gcc-internal-format msgid "uninitialized member %qD in %<constexpr%> constructor" msgstr "" -#: cp/semantics.c:6096 +#: cp/semantics.c:6111 #, gcc-internal-format msgid "body of constexpr function %qD not a return-statement" msgstr "" -#: cp/semantics.c:6151 +#: cp/semantics.c:6166 #, gcc-internal-format msgid "%q+D is not usable as a constexpr function because:" msgstr "" -#: cp/semantics.c:6475 +#: cp/semantics.c:6490 #, gcc-internal-format msgid "expression %qE does not designate a constexpr function" msgstr "" -#: cp/semantics.c:6489 cp/semantics.c:8072 +#: cp/semantics.c:6504 cp/semantics.c:8087 #, gcc-internal-format msgid "call to non-constexpr function %qD" msgstr "" #. The definition of fun was somehow unsuitable. -#: cp/semantics.c:6517 +#: cp/semantics.c:6532 #, gcc-internal-format msgid "%qD called in a constant expression" msgstr "" -#: cp/semantics.c:6521 +#: cp/semantics.c:6536 #, gcc-internal-format msgid "%qD used before its definition" msgstr "" -#: cp/semantics.c:6555 +#: cp/semantics.c:6570 #, gcc-internal-format msgid "call has circular dependency" msgstr "" -#: cp/semantics.c:6563 +#: cp/semantics.c:6578 #, gcc-internal-format, gfc-internal-format msgid "" "constexpr evaluation depth exceeds maximum of %d (use -fconstexpr-depth= to " "increase the maximum)" msgstr "" -#: cp/semantics.c:6641 +#: cp/semantics.c:6656 #, gcc-internal-format msgid "%q+E is not a constant expression" msgstr "" -#: cp/semantics.c:6781 +#: cp/semantics.c:6796 #, gcc-internal-format msgid "array subscript out of bound" msgstr "" -#: cp/semantics.c:6827 cp/semantics.c:6887 cp/semantics.c:7523 +#: cp/semantics.c:6842 cp/semantics.c:6902 cp/semantics.c:7538 #, gcc-internal-format msgid "%qE is not a constant expression" msgstr "" -#: cp/semantics.c:6833 +#: cp/semantics.c:6848 #, gcc-internal-format msgid "mutable %qD is not usable in a constant expression" msgstr "" -#: cp/semantics.c:6848 +#: cp/semantics.c:6863 #, gcc-internal-format msgid "" "accessing %qD member instead of initialized %qD member in constant expression" msgstr "" -#: cp/semantics.c:7388 +#: cp/semantics.c:7403 #, gcc-internal-format msgid "accessing value of %qE through a %qT glvalue in a constant expression" msgstr "" -#: cp/semantics.c:7419 +#: cp/semantics.c:7434 #, gcc-internal-format msgid "the value of %qD is not usable in a constant expression" msgstr "" -#: cp/semantics.c:7426 +#: cp/semantics.c:7441 #, gcc-internal-format msgid "%qD used in its own initializer" msgstr "" -#: cp/semantics.c:7431 +#: cp/semantics.c:7446 #, gcc-internal-format msgid "%q#D is not const" msgstr "" -#: cp/semantics.c:7434 +#: cp/semantics.c:7449 #, gcc-internal-format msgid "%q#D is volatile" msgstr "" -#: cp/semantics.c:7438 +#: cp/semantics.c:7453 #, gcc-internal-format msgid "%qD was not initialized with a constant expression" msgstr "" -#: cp/semantics.c:7447 +#: cp/semantics.c:7462 #, gcc-internal-format msgid "%qD was not declared %<constexpr%>" msgstr "" -#: cp/semantics.c:7450 +#: cp/semantics.c:7465 #, gcc-internal-format msgid "%qD does not have integral or enumeration type" msgstr "" -#: cp/semantics.c:7511 cp/semantics.c:8204 +#: cp/semantics.c:7526 cp/semantics.c:8219 #, gcc-internal-format msgid "" "use of the value of the object being constructed in a constant expression" msgstr "" -#: cp/semantics.c:7539 cp/semantics.c:8342 +#: cp/semantics.c:7554 cp/semantics.c:8357 #, gcc-internal-format msgid "temporary of non-literal type %qT in a constant expression" msgstr "" -#: cp/semantics.c:7787 cp/semantics.c:8246 cp/semantics.c:8495 +#: cp/semantics.c:7802 cp/semantics.c:8261 cp/semantics.c:8510 #, gcc-internal-format msgid "expression %qE is not a constant-expression" msgstr "" -#: cp/semantics.c:7792 +#: cp/semantics.c:7807 #, gcc-internal-format msgid "unexpected expression %qE of kind %s" msgstr "" -#: cp/semantics.c:7823 +#: cp/semantics.c:7838 #, gcc-internal-format msgid "" "%qT cannot be the type of a complete constant expression because it has " "mutable sub-objects" msgstr "" -#: cp/semantics.c:7836 +#: cp/semantics.c:7851 #, gcc-internal-format msgid "" "conversion from pointer type %qT to arithmetic type %qT in a constant-" "expression" msgstr "" -#: cp/semantics.c:8007 +#: cp/semantics.c:8022 #, gcc-internal-format msgid "expression %qE has side-effects" msgstr "" -#: cp/semantics.c:8090 +#: cp/semantics.c:8105 #, gcc-internal-format msgid "" "calling a member function of the object being constructed in a constant " "expression" msgstr "" -#: cp/semantics.c:8172 +#: cp/semantics.c:8187 #, gcc-internal-format msgid "" "address-of an object %qE with thread local or automatic storage is not a " "constant expression" msgstr "" -#: cp/semantics.c:8258 +#: cp/semantics.c:8273 #, gcc-internal-format msgid "" "typeid-expression is not a constant expression because %qE is of polymorphic " "type" msgstr "" -#: cp/semantics.c:8271 +#: cp/semantics.c:8286 #, gcc-internal-format msgid "difference of two pointer expressions is not a constant expression" msgstr "" -#: cp/semantics.c:8290 +#: cp/semantics.c:8305 #, gcc-internal-format msgid "pointer comparison expression is not a constant expression" msgstr "" -#: cp/semantics.c:8391 +#: cp/semantics.c:8406 #, gcc-internal-format msgid "division by zero is not a constant-expression" msgstr "" -#: cp/semantics.c:8503 +#: cp/semantics.c:8518 #, gcc-internal-format msgid "non-constant array initialization" msgstr "" -#: cp/semantics.c:8509 +#: cp/semantics.c:8524 #, gcc-internal-format, gfc-internal-format msgid "unexpected AST of kind %s" msgstr "" -#: cp/semantics.c:8999 +#: cp/semantics.c:9014 #, gcc-internal-format msgid "cannot capture %qE by reference" msgstr "" -#: cp/semantics.c:9022 +#: cp/semantics.c:9037 #, gcc-internal-format msgid "already captured %qD in lambda expression" msgstr "" -#: cp/semantics.c:9168 +#: cp/semantics.c:9183 #, gcc-internal-format msgid "%<this%> was not captured for this lambda function" msgstr "" @@ -35563,57 +35778,57 @@ msgstr "" msgid "index value instead of field name in union initializer" msgstr "" -#: cp/typeck2.c:1500 +#: cp/typeck2.c:1501 #, gcc-internal-format msgid "circular pointer delegation detected" msgstr "" -#: cp/typeck2.c:1513 +#: cp/typeck2.c:1515 #, gcc-internal-format msgid "base operand of %<->%> has non-pointer type %qT" msgstr "" -#: cp/typeck2.c:1537 +#: cp/typeck2.c:1541 #, gcc-internal-format msgid "result of %<operator->()%> yields non-pointer result" msgstr "" -#: cp/typeck2.c:1539 +#: cp/typeck2.c:1543 #, gcc-internal-format msgid "base operand of %<->%> is not a pointer" msgstr "" -#: cp/typeck2.c:1564 +#: cp/typeck2.c:1569 #, gcc-internal-format msgid "%qE cannot be used as a member pointer, since it is of type %qT" msgstr "" -#: cp/typeck2.c:1573 +#: cp/typeck2.c:1578 #, gcc-internal-format msgid "cannot apply member pointer %qE to %qE, which is of non-class type %qT" msgstr "" -#: cp/typeck2.c:1595 +#: cp/typeck2.c:1600 #, gcc-internal-format msgid "pointer to member type %qT incompatible with object type %qT" msgstr "" -#: cp/typeck2.c:1663 +#: cp/typeck2.c:1668 #, gcc-internal-format msgid "functional cast to array type %qT" msgstr "" -#: cp/typeck2.c:1684 +#: cp/typeck2.c:1689 #, gcc-internal-format msgid "invalid value-initialization of reference type" msgstr "" -#: cp/typeck2.c:1913 +#: cp/typeck2.c:1918 #, gcc-internal-format msgid "call to function %qD which throws incomplete type %q#T" msgstr "" -#: cp/typeck2.c:1916 +#: cp/typeck2.c:1921 #, gcc-internal-format msgid "call to function which throws incomplete type %q#T" msgstr "" @@ -35713,7 +35928,7 @@ msgstr "" #: fortran/array.c:216 fortran/array.c:576 fortran/check.c:2149 #: fortran/check.c:3915 fortran/check.c:3953 fortran/check.c:4120 -#: fortran/match.c:1767 fortran/match.c:2834 fortran/match.c:3030 +#: fortran/match.c:1766 fortran/match.c:2833 fortran/match.c:3029 #: fortran/simplify.c:4538 #, gcc-internal-format, gfc-internal-format msgid "Coarrays disabled at %C, use -fcoarray= to enable" @@ -35834,7 +36049,7 @@ msgstr "" msgid "Fortran 2003: Array constructor including type specification at %C" msgstr "" -#: fortran/array.c:1055 fortran/match.c:3466 +#: fortran/array.c:1055 fortran/match.c:3465 #, gcc-internal-format, gfc-internal-format msgid "Type-spec at %L cannot contain a deferred type parameter" msgstr "" @@ -35856,7 +36071,7 @@ msgstr "" #. Problems occur when we get something like #. integer :: a(lots) = (/(i, i=1, lots)/) -#: fortran/array.c:1621 fortran/expr.c:1538 fortran/trans-array.c:5260 +#: fortran/array.c:1621 fortran/expr.c:1539 fortran/trans-array.c:5259 #, gcc-internal-format, gfc-internal-format msgid "" "The number of elements in the array constructor at %L requires an increase " @@ -36030,7 +36245,7 @@ msgstr "" #: fortran/check.c:910 fortran/check.c:946 fortran/check.c:2853 #, gcc-internal-format, gfc-internal-format -msgid "'%s' argument of '%s' intrinsic at %L shall not be conindexed" +msgid "'%s' argument of '%s' intrinsic at %L shall not be coindexed" msgstr "" #: fortran/check.c:928 @@ -36469,7 +36684,7 @@ msgstr "" msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL" msgstr "" -#: fortran/class.c:345 +#: fortran/class.c:470 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed size polymorphic objects or components, such as that at %C, have not " @@ -36478,12 +36693,12 @@ msgstr "" #. Since the extension field is 8 bit wide, we can only have #. up to 255 extension levels. -#: fortran/class.c:431 fortran/decl.c:7562 +#: fortran/class.c:556 fortran/decl.c:7583 #, gcc-internal-format, gfc-internal-format msgid "Maximum extension level reached with type '%s' at %L" msgstr "" -#: fortran/class.c:822 fortran/class.c:896 +#: fortran/class.c:948 fortran/class.c:1022 #, gcc-internal-format, gfc-internal-format msgid "'%s' of '%s' is PRIVATE at %L" msgstr "" @@ -36535,579 +36750,589 @@ msgstr "" msgid "Extension: re-initialization of '%s' at %L" msgstr "" -#: fortran/decl.c:260 +#: fortran/decl.c:264 #, gcc-internal-format, gfc-internal-format msgid "Host associated variable '%s' may not be in the DATA statement at %C" msgstr "" -#: fortran/decl.c:267 +#: fortran/decl.c:271 #, gcc-internal-format, gfc-internal-format msgid "" "Extension: initialization of common block variable '%s' in DATA statement at " "%C" msgstr "" -#: fortran/decl.c:376 +#: fortran/decl.c:380 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' must be a PARAMETER in DATA statement at %C" msgstr "" -#: fortran/decl.c:401 +#: fortran/decl.c:405 #, gcc-internal-format, gfc-internal-format msgid "Invalid initializer %s in Data statement at %C" msgstr "" -#: fortran/decl.c:504 +#: fortran/decl.c:508 #, gcc-internal-format, gfc-internal-format msgid "Initialization at %C is not allowed in a PURE procedure" msgstr "" -#: fortran/decl.c:566 +#: fortran/decl.c:570 #, gcc-internal-format, gfc-internal-format msgid "DATA statement at %C is not allowed in a PURE procedure" msgstr "" -#: fortran/decl.c:654 +#: fortran/decl.c:658 #, gcc-internal-format, gfc-internal-format msgid "Bad INTENT specification at %C" msgstr "" -#: fortran/decl.c:675 +#: fortran/decl.c:679 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: deferred type parameter at %C" msgstr "" -#: fortran/decl.c:712 +#: fortran/decl.c:716 #, gcc-internal-format, gfc-internal-format msgid "Conflict in attributes of function argument at %C" msgstr "" -#: fortran/decl.c:737 +#: fortran/decl.c:741 #, gcc-internal-format, gfc-internal-format msgid "Obsolescent feature: Old-style character length at %C" msgstr "" -#: fortran/decl.c:769 +#: fortran/decl.c:773 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in character length specification at %C" msgstr "" -#: fortran/decl.c:892 +#: fortran/decl.c:896 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %C is already defined at %L" msgstr "" -#: fortran/decl.c:900 +#: fortran/decl.c:904 #, gcc-internal-format, gfc-internal-format msgid "Name '%s' at %C is already defined as a generic interface at %L" msgstr "" -#: fortran/decl.c:913 +#: fortran/decl.c:917 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure '%s' at %C has an explicit interface and must not have attributes " "declared at %L" msgstr "" -#: fortran/decl.c:985 +#: fortran/decl.c:989 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure '%s' at %L must have the BIND(C) attribute to be C interoperable" msgstr "" -#: fortran/decl.c:1013 +#: fortran/decl.c:1017 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %L is a dummy argument to the BIND(C) procedure '%s' but is " "not C interoperable because derived type '%s' is not C interoperable" msgstr "" -#: fortran/decl.c:1020 +#: fortran/decl.c:1024 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %L is a dummy argument to the BIND(C) procedure '%s' but is " "not C interoperable because it is polymorphic" msgstr "" -#: fortran/decl.c:1026 +#: fortran/decl.c:1030 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %L is a parameter to the BIND(C) procedure '%s' but may not " "be C interoperable" msgstr "" -#: fortran/decl.c:1041 +#: fortran/decl.c:1045 #, gcc-internal-format, gfc-internal-format msgid "" "Character argument '%s' at %L must be length 1 because procedure '%s' is BIND" "(C)" msgstr "" -#: fortran/decl.c:1055 +#: fortran/decl.c:1059 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %L cannot have the ALLOCATABLE attribute because procedure " "'%s' is BIND(C)" msgstr "" -#: fortran/decl.c:1064 +#: fortran/decl.c:1068 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %L cannot have the POINTER attribute because procedure '%s' " "is BIND(C)" msgstr "" -#: fortran/decl.c:1073 +#: fortran/decl.c:1077 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %L cannot have both the OPTIONAL and the VALUE attribute " "because procedure '%s' is BIND(C)" msgstr "" -#: fortran/decl.c:1080 +#: fortran/decl.c:1084 #, gcc-internal-format, gfc-internal-format msgid "" "TS29113: Variable '%s' at %L with OPTIONAL attribute in procedure '%s' which " "is BIND(C)" msgstr "" -#: fortran/decl.c:1094 +#: fortran/decl.c:1098 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed-shape array '%s' at %L cannot be an argument to the procedure '%s' " "at %L because the procedure is BIND(C)" msgstr "" -#: fortran/decl.c:1104 +#: fortran/decl.c:1108 #, gcc-internal-format, gfc-internal-format msgid "" "Deferred-shape array '%s' at %L cannot be an argument to the procedure '%s' " "at %L because the procedure is BIND(C)" msgstr "" -#: fortran/decl.c:1185 +#: fortran/decl.c:1189 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' in common block '%s' at %C must be declared with a C " "interoperable kind since common block '%s' is BIND(C)" msgstr "" -#: fortran/decl.c:1227 +#: fortran/decl.c:1231 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER expression at %L is being truncated (%d/%d)" msgstr "" -#: fortran/decl.c:1234 +#: fortran/decl.c:1238 #, gcc-internal-format, gfc-internal-format msgid "" "The CHARACTER elements of the array constructor at %L must have the same " "length (%d/%d)" msgstr "" -#: fortran/decl.c:1324 +#: fortran/decl.c:1328 #, gcc-internal-format, gfc-internal-format msgid "Initializer not allowed for PARAMETER '%s' at %C" msgstr "" -#: fortran/decl.c:1334 +#: fortran/decl.c:1338 #, gcc-internal-format, gfc-internal-format msgid "PARAMETER at %L is missing an initializer" msgstr "" -#: fortran/decl.c:1344 +#: fortran/decl.c:1348 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %C with an initializer already appears in a DATA statement" msgstr "" -#: fortran/decl.c:1425 +#: fortran/decl.c:1429 #, gcc-internal-format, gfc-internal-format msgid "Can't initialize implied-shape array at %L with scalar" msgstr "" -#: fortran/decl.c:1443 +#: fortran/decl.c:1447 #, gcc-internal-format, gfc-internal-format msgid "Non-constant lower bound in implied-shape declaration at %L" msgstr "" -#: fortran/decl.c:1538 +#: fortran/decl.c:1542 #, gcc-internal-format, gfc-internal-format msgid "Component at %C must have the POINTER attribute" msgstr "" -#: fortran/decl.c:1546 +#: fortran/decl.c:1550 #, gcc-internal-format, gfc-internal-format msgid "Array component of structure at %C must have explicit or deferred shape" msgstr "" -#: fortran/decl.c:1627 +#: fortran/decl.c:1631 #, gcc-internal-format, gfc-internal-format msgid "Pointer array component of structure at %C must have a deferred shape" msgstr "" -#: fortran/decl.c:1636 +#: fortran/decl.c:1640 #, gcc-internal-format, gfc-internal-format msgid "Allocatable component of structure at %C must have a deferred shape" msgstr "" -#: fortran/decl.c:1645 +#: fortran/decl.c:1649 #, gcc-internal-format, gfc-internal-format msgid "Array component of structure at %C must have an explicit shape" msgstr "" -#: fortran/decl.c:1679 +#: fortran/decl.c:1683 #, gcc-internal-format, gfc-internal-format msgid "NULL() initialization at %C is ambiguous" msgstr "" -#: fortran/decl.c:1706 +#: fortran/decl.c:1710 #, gcc-internal-format, gfc-internal-format msgid "Initialization of pointer at %C is not allowed in a PURE procedure" msgstr "" -#: fortran/decl.c:1726 +#: fortran/decl.c:1730 #, gcc-internal-format, gfc-internal-format msgid "Error in pointer initialization at %C" msgstr "" -#: fortran/decl.c:1733 +#: fortran/decl.c:1737 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: non-NULL pointer initialization at %C" msgstr "" -#: fortran/decl.c:1756 +#: fortran/decl.c:1760 #, gcc-internal-format, gfc-internal-format msgid "Function name '%s' not allowed at %C" msgstr "" -#: fortran/decl.c:1819 +#: fortran/decl.c:1823 #, gcc-internal-format, gfc-internal-format msgid "Non-PARAMETER symbol '%s' at %L can't be implied-shape" msgstr "" -#: fortran/decl.c:1830 +#: fortran/decl.c:1834 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Implied-shape array at %L" msgstr "" -#: fortran/decl.c:1894 fortran/decl.c:6419 +#: fortran/decl.c:1898 fortran/decl.c:6440 #, gcc-internal-format, gfc-internal-format msgid "Duplicate array spec for Cray pointee at %C" msgstr "" -#: fortran/decl.c:1965 +#: fortran/decl.c:1969 #, gcc-internal-format, gfc-internal-format msgid "The type of '%s' at %C has not been declared within the interface" msgstr "" -#: fortran/decl.c:1989 +#: fortran/decl.c:1993 #, gcc-internal-format, gfc-internal-format msgid "Extension: Old-style initialization at %C" msgstr "" -#: fortran/decl.c:2004 fortran/decl.c:4911 +#: fortran/decl.c:2008 fortran/decl.c:4938 #, gcc-internal-format, gfc-internal-format msgid "Initialization at %C isn't for a pointer variable" msgstr "" -#: fortran/decl.c:2017 +#: fortran/decl.c:2021 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization at %C requires '=>', not '='" msgstr "" -#: fortran/decl.c:2026 fortran/decl.c:7714 +#: fortran/decl.c:2030 fortran/decl.c:7735 #, gcc-internal-format, gfc-internal-format msgid "Expected an initialization expression at %C" msgstr "" -#: fortran/decl.c:2033 +#: fortran/decl.c:2037 #, gcc-internal-format, gfc-internal-format msgid "Initialization of variable at %C is not allowed in a PURE procedure" msgstr "" -#: fortran/decl.c:2046 +#: fortran/decl.c:2050 #, gcc-internal-format, gfc-internal-format msgid "Initialization of allocatable component at %C is not allowed" msgstr "" -#: fortran/decl.c:2100 fortran/decl.c:2136 +#: fortran/decl.c:2104 fortran/decl.c:2140 #, gcc-internal-format, gfc-internal-format msgid "Old-style type declaration %s*%d not supported at %C" msgstr "" -#: fortran/decl.c:2141 +#: fortran/decl.c:2145 #, gcc-internal-format, gfc-internal-format msgid "Nonstandard type declaration %s*%d at %C" msgstr "" -#: fortran/decl.c:2192 fortran/decl.c:2268 +#: fortran/decl.c:2196 fortran/decl.c:2272 #, gcc-internal-format, gfc-internal-format msgid "Missing right parenthesis at %C" msgstr "" -#: fortran/decl.c:2205 fortran/decl.c:2339 +#: fortran/decl.c:2209 fortran/decl.c:2343 #, gcc-internal-format, gfc-internal-format msgid "Expected initialization expression at %C" msgstr "" -#: fortran/decl.c:2213 fortran/decl.c:2345 +#: fortran/decl.c:2217 fortran/decl.c:2349 #, gcc-internal-format, gfc-internal-format msgid "Expected scalar initialization expression at %C" msgstr "" -#: fortran/decl.c:2244 +#: fortran/decl.c:2248 #, gcc-internal-format, gfc-internal-format msgid "Kind %d not supported for type %s at %C" msgstr "" -#: fortran/decl.c:2257 +#: fortran/decl.c:2261 #, gcc-internal-format, gfc-internal-format msgid "C kind type parameter is for type %s but type at %L is %s" msgstr "" -#: fortran/decl.c:2266 +#: fortran/decl.c:2270 #, gcc-internal-format, gfc-internal-format msgid "Missing right parenthesis or comma at %C" msgstr "" -#: fortran/decl.c:2365 +#: fortran/decl.c:2369 #, gcc-internal-format, gfc-internal-format msgid "Kind %d is not supported for CHARACTER at %C" msgstr "" -#: fortran/decl.c:2497 +#: fortran/decl.c:2501 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in CHARACTER declaration at %C" msgstr "" -#: fortran/decl.c:2582 +#: fortran/decl.c:2586 #, gcc-internal-format, gfc-internal-format msgid "Extension: BYTE type at %C" msgstr "" -#: fortran/decl.c:2588 +#: fortran/decl.c:2592 #, gcc-internal-format, gfc-internal-format msgid "BYTE type used at %C is not available on the target machine" msgstr "" -#: fortran/decl.c:2614 fortran/decl.c:2645 fortran/decl.c:2675 -#: fortran/decl.c:2825 +#: fortran/decl.c:2614 +#, gcc-internal-format, gfc-internal-format +msgid "Assumed type at %C is not allowed for components" +msgstr "" + +#: fortran/decl.c:2617 +#, gcc-internal-format, gfc-internal-format +msgid "TS 29113: Assumed type at %C" +msgstr "" + +#: fortran/decl.c:2640 fortran/decl.c:2671 fortran/decl.c:2701 +#: fortran/decl.c:2851 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: TYPE with intrinsic-type-spec at %C" msgstr "" -#: fortran/decl.c:2670 +#: fortran/decl.c:2696 #, gcc-internal-format, gfc-internal-format msgid "Extension: DOUBLE COMPLEX at %C" msgstr "" -#: fortran/decl.c:2708 +#: fortran/decl.c:2734 #, gcc-internal-format, gfc-internal-format msgid "Unlimited polymorphism at %C not yet supported" msgstr "" -#: fortran/decl.c:2717 +#: fortran/decl.c:2743 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: CLASS statement at %C" msgstr "" -#: fortran/decl.c:2753 fortran/decl.c:2766 fortran/decl.c:3140 -#: fortran/decl.c:3148 +#: fortran/decl.c:2779 fortran/decl.c:2792 fortran/decl.c:3166 +#: fortran/decl.c:3174 #, gcc-internal-format, gfc-internal-format msgid "Type name '%s' at %C is ambiguous" msgstr "" -#: fortran/decl.c:2781 +#: fortran/decl.c:2807 #, gcc-internal-format, gfc-internal-format msgid "" "Type name '%s' at %C conflicts with previously declared entity at %L, which " "has the same name" msgstr "" -#: fortran/decl.c:2901 +#: fortran/decl.c:2927 #, gcc-internal-format, gfc-internal-format msgid "Missing character range in IMPLICIT at %C" msgstr "" -#: fortran/decl.c:2947 +#: fortran/decl.c:2973 #, gcc-internal-format, gfc-internal-format msgid "Letters must be in alphabetic order in IMPLICIT statement at %C" msgstr "" -#: fortran/decl.c:3003 +#: fortran/decl.c:3029 #, gcc-internal-format, gfc-internal-format msgid "Empty IMPLICIT statement at %C" msgstr "" -#: fortran/decl.c:3105 +#: fortran/decl.c:3131 #, gcc-internal-format, gfc-internal-format msgid "IMPORT statement at %C only permitted in an INTERFACE body" msgstr "" -#: fortran/decl.c:3110 +#: fortran/decl.c:3136 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: IMPORT statement at %C" msgstr "" -#: fortran/decl.c:3125 +#: fortran/decl.c:3151 #, gcc-internal-format, gfc-internal-format msgid "Expecting list of named entities at %C" msgstr "" -#: fortran/decl.c:3154 +#: fortran/decl.c:3180 #, gcc-internal-format, gfc-internal-format msgid "Cannot IMPORT '%s' from host scoping unit at %C - does not exist." msgstr "" -#: fortran/decl.c:3161 +#: fortran/decl.c:3187 #, gcc-internal-format, gfc-internal-format msgid "'%s' is already IMPORTed from host scoping unit at %C." msgstr "" -#: fortran/decl.c:3204 +#: fortran/decl.c:3230 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in IMPORT statement at %C" msgstr "" -#: fortran/decl.c:3503 +#: fortran/decl.c:3529 #, gcc-internal-format, gfc-internal-format msgid "Missing codimension specification at %C" msgstr "" -#: fortran/decl.c:3505 +#: fortran/decl.c:3531 #, gcc-internal-format, gfc-internal-format msgid "Missing dimension specification at %C" msgstr "" -#: fortran/decl.c:3588 +#: fortran/decl.c:3614 #, gcc-internal-format, gfc-internal-format msgid "Duplicate %s attribute at %L" msgstr "" -#: fortran/decl.c:3607 +#: fortran/decl.c:3633 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: ALLOCATABLE attribute at %C in a TYPE definition" msgstr "" -#: fortran/decl.c:3617 +#: fortran/decl.c:3643 #, gcc-internal-format, gfc-internal-format msgid "Attribute at %L is not allowed in a TYPE definition" msgstr "" -#: fortran/decl.c:3635 +#: fortran/decl.c:3661 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Attribute %s at %L in a TYPE definition" msgstr "" -#: fortran/decl.c:3646 +#: fortran/decl.c:3672 #, gcc-internal-format, gfc-internal-format msgid "" "%s attribute at %L is not allowed outside of the specification part of a " "module" msgstr "" -#: fortran/decl.c:3661 +#: fortran/decl.c:3687 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: ASYNCHRONOUS attribute at %C" msgstr "" -#: fortran/decl.c:3674 +#: fortran/decl.c:3700 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: CONTIGUOUS attribute at %C" msgstr "" -#: fortran/decl.c:3720 fortran/decl.c:6714 +#: fortran/decl.c:3746 fortran/decl.c:6735 #, gcc-internal-format, gfc-internal-format msgid "PROTECTED at %C only allowed in specification part of a module" msgstr "" -#: fortran/decl.c:3726 +#: fortran/decl.c:3752 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: PROTECTED attribute at %C" msgstr "" -#: fortran/decl.c:3757 +#: fortran/decl.c:3783 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: VALUE attribute at %C" msgstr "" -#: fortran/decl.c:3767 +#: fortran/decl.c:3793 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: VOLATILE attribute at %C" msgstr "" -#: fortran/decl.c:3811 +#: fortran/decl.c:3838 #, gcc-internal-format, gfc-internal-format msgid "Multiple identifiers provided with single NAME= specifier at %C" msgstr "" -#: fortran/decl.c:3910 +#: fortran/decl.c:3935 #, gcc-internal-format, gfc-internal-format msgid "" "Implicitly declared BIND(C) function '%s' at %L may not be C interoperable" msgstr "" -#: fortran/decl.c:3931 +#: fortran/decl.c:3956 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' in common block '%s' at %L may not be a C interoperable kind " "though common block '%s' is BIND(C)" msgstr "" -#: fortran/decl.c:3940 +#: fortran/decl.c:3965 #, gcc-internal-format, gfc-internal-format msgid "Type declaration '%s' at %L is not C interoperable but it is BIND(C)" msgstr "" -#: fortran/decl.c:3944 +#: fortran/decl.c:3969 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L may not be a C interoperable kind but it is bind(c)" msgstr "" -#: fortran/decl.c:3956 +#: fortran/decl.c:3981 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' in common block '%s' at %L cannot be declared with BIND(C) " "since it is not a global" msgstr "" -#: fortran/decl.c:3970 +#: fortran/decl.c:3995 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L cannot have both the POINTER and BIND(C) attributes" msgstr "" -#: fortran/decl.c:3978 +#: fortran/decl.c:4003 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %L cannot have both the ALLOCATABLE and BIND(C) attributes" msgstr "" -#: fortran/decl.c:3990 +#: fortran/decl.c:4015 #, gcc-internal-format, gfc-internal-format msgid "Return type of BIND(C) function '%s' at %L cannot be an array" msgstr "" -#: fortran/decl.c:3998 +#: fortran/decl.c:4023 #, gcc-internal-format, gfc-internal-format msgid "Return type of BIND(C) function '%s' at %L cannot be a character string" msgstr "" #. Use gfc_warning_now because we won't say that the symbol fails #. just because of this. -#: fortran/decl.c:4009 +#: fortran/decl.c:4034 #, gcc-internal-format, gfc-internal-format msgid "" "Symbol '%s' at %L is marked PRIVATE but has been given the binding label '%s'" msgstr "" -#: fortran/decl.c:4084 +#: fortran/decl.c:4110 #, gcc-internal-format, gfc-internal-format msgid "" "Need either entity or common block name for attribute specification " "statement at %C" msgstr "" -#: fortran/decl.c:4131 +#: fortran/decl.c:4157 #, gcc-internal-format, gfc-internal-format msgid "" "Missing entity or common block name for attribute specification statement at " @@ -37116,785 +37341,785 @@ msgstr "" #. Now we have an error, which we signal, and then fix up #. because the knock-on is plain and simple confusing. -#: fortran/decl.c:4240 +#: fortran/decl.c:4266 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type at %C has not been previously defined and so cannot appear in a " "derived type definition" msgstr "" -#: fortran/decl.c:4272 +#: fortran/decl.c:4298 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in data declaration at %C" msgstr "" -#: fortran/decl.c:4346 +#: fortran/decl.c:4372 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: IMPURE procedure at %C" msgstr "" -#: fortran/decl.c:4359 +#: fortran/decl.c:4385 #, gcc-internal-format, gfc-internal-format msgid "PURE and IMPURE must not appear both at %C" msgstr "" -#: fortran/decl.c:4465 +#: fortran/decl.c:4491 #, gcc-internal-format, gfc-internal-format msgid "Name '%s' at %C is the name of the procedure" msgstr "" -#: fortran/decl.c:4477 +#: fortran/decl.c:4503 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk in formal argument list at %C" msgstr "" -#: fortran/decl.c:4494 +#: fortran/decl.c:4520 #, gcc-internal-format, gfc-internal-format msgid "Duplicate symbol '%s' in formal argument list at %C" msgstr "" -#: fortran/decl.c:4545 +#: fortran/decl.c:4571 #, gcc-internal-format, gfc-internal-format msgid "RESULT variable at %C must be different than function name" msgstr "" -#: fortran/decl.c:4622 +#: fortran/decl.c:4648 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after function declaration at %C" msgstr "" -#: fortran/decl.c:4632 fortran/decl.c:5665 +#: fortran/decl.c:4658 fortran/decl.c:5692 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2008: BIND(C) attribute at %L may not be specified for an internal " "procedure" msgstr "" -#: fortran/decl.c:4776 +#: fortran/decl.c:4802 #, gcc-internal-format, gfc-internal-format msgid "Interface '%s' at %C may not be generic" msgstr "" -#: fortran/decl.c:4782 +#: fortran/decl.c:4808 #, gcc-internal-format, gfc-internal-format msgid "Interface '%s' at %C may not be a statement function" msgstr "" -#: fortran/decl.c:4795 +#: fortran/decl.c:4821 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic procedure '%s' not allowed in PROCEDURE statement at %C" msgstr "" -#: fortran/decl.c:4850 +#: fortran/decl.c:4876 #, gcc-internal-format, gfc-internal-format msgid "BIND(C) attribute at %C requires an interface with BIND(C)" msgstr "" -#: fortran/decl.c:4857 +#: fortran/decl.c:4883 #, gcc-internal-format, gfc-internal-format msgid "BIND(C) procedure with NAME may not have POINTER attribute at %C" msgstr "" -#: fortran/decl.c:4863 +#: fortran/decl.c:4889 #, gcc-internal-format, gfc-internal-format msgid "Dummy procedure at %C may not have BIND(C) attribute with NAME" msgstr "" -#: fortran/decl.c:4886 +#: fortran/decl.c:4913 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %L already has basic type of %s" msgstr "" -#: fortran/decl.c:4935 fortran/decl.c:5103 fortran/decl.c:8196 +#: fortran/decl.c:4962 fortran/decl.c:5130 fortran/decl.c:8217 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in PROCEDURE statement at %C" msgstr "" -#: fortran/decl.c:4984 fortran/decl.c:8097 +#: fortran/decl.c:5011 fortran/decl.c:8118 #, gcc-internal-format, gfc-internal-format msgid "Expected '::' after binding-attributes at %C" msgstr "" -#: fortran/decl.c:4991 +#: fortran/decl.c:5018 #, gcc-internal-format, gfc-internal-format msgid "NOPASS or explicit interface required at %C" msgstr "" -#: fortran/decl.c:4995 +#: fortran/decl.c:5022 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Procedure pointer component at %C" msgstr "" -#: fortran/decl.c:5060 +#: fortran/decl.c:5087 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in procedure pointer component at %C" msgstr "" -#: fortran/decl.c:5077 +#: fortran/decl.c:5104 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE at %C must be in a generic interface" msgstr "" -#: fortran/decl.c:5143 +#: fortran/decl.c:5170 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: PROCEDURE statement at %C" msgstr "" -#: fortran/decl.c:5211 +#: fortran/decl.c:5238 #, gcc-internal-format, gfc-internal-format msgid "Expected formal argument list in function definition at %C" msgstr "" -#: fortran/decl.c:5235 fortran/decl.c:5239 fortran/decl.c:5443 -#: fortran/decl.c:5447 fortran/decl.c:5633 fortran/decl.c:5637 +#: fortran/decl.c:5262 fortran/decl.c:5266 fortran/decl.c:5470 +#: fortran/decl.c:5474 fortran/decl.c:5660 fortran/decl.c:5664 #: fortran/symbol.c:1588 #, gcc-internal-format, gfc-internal-format msgid "BIND(C) attribute at %L can only be used for variables or common blocks" msgstr "" -#: fortran/decl.c:5354 +#: fortran/decl.c:5381 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008 obsolescent feature: ENTRY statement at %C" msgstr "" -#: fortran/decl.c:5364 +#: fortran/decl.c:5391 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a PROGRAM" msgstr "" -#: fortran/decl.c:5367 +#: fortran/decl.c:5394 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a MODULE" msgstr "" -#: fortran/decl.c:5370 +#: fortran/decl.c:5397 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a BLOCK DATA" msgstr "" -#: fortran/decl.c:5374 +#: fortran/decl.c:5401 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within an INTERFACE" msgstr "" -#: fortran/decl.c:5378 +#: fortran/decl.c:5405 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a DERIVED TYPE block" msgstr "" -#: fortran/decl.c:5382 +#: fortran/decl.c:5409 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within an IF-THEN block" msgstr "" -#: fortran/decl.c:5387 +#: fortran/decl.c:5414 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a DO block" msgstr "" -#: fortran/decl.c:5391 +#: fortran/decl.c:5418 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a SELECT block" msgstr "" -#: fortran/decl.c:5395 +#: fortran/decl.c:5422 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a FORALL block" msgstr "" -#: fortran/decl.c:5399 +#: fortran/decl.c:5426 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a WHERE block" msgstr "" -#: fortran/decl.c:5403 +#: fortran/decl.c:5430 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a contained subprogram" msgstr "" -#: fortran/decl.c:5421 +#: fortran/decl.c:5448 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear in a contained procedure" msgstr "" -#: fortran/decl.c:5475 fortran/decl.c:5673 +#: fortran/decl.c:5502 fortran/decl.c:5700 #, gcc-internal-format, gfc-internal-format msgid "Missing required parentheses before BIND(C) at %C" msgstr "" -#: fortran/decl.c:5735 fortran/decl.c:5751 +#: fortran/decl.c:5758 fortran/decl.c:5774 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in NAME= specifier for binding label at %C" msgstr "" -#: fortran/decl.c:5766 +#: fortran/decl.c:5789 #, gcc-internal-format, gfc-internal-format msgid "Missing closing quote '\"' for binding label at %C" msgstr "" -#: fortran/decl.c:5775 +#: fortran/decl.c:5798 #, gcc-internal-format, gfc-internal-format msgid "Missing closing quote ''' for binding label at %C" msgstr "" -#: fortran/decl.c:5785 +#: fortran/decl.c:5808 #, gcc-internal-format, gfc-internal-format msgid "Missing closing paren for binding label at %C" msgstr "" -#: fortran/decl.c:5791 +#: fortran/decl.c:5814 #, gcc-internal-format, gfc-internal-format msgid "No binding name is allowed in BIND(C) at %C" msgstr "" -#: fortran/decl.c:5797 +#: fortran/decl.c:5820 #, gcc-internal-format, gfc-internal-format msgid "For dummy procedure %s, no binding name is allowed in BIND(C) at %C" msgstr "" -#: fortran/decl.c:5828 +#: fortran/decl.c:5849 #, gcc-internal-format, gfc-internal-format msgid "NAME not allowed on BIND(C) for ABSTRACT INTERFACE at %C" msgstr "" -#: fortran/decl.c:6033 +#: fortran/decl.c:6054 #, gcc-internal-format, gfc-internal-format msgid "Unexpected END statement at %C" msgstr "" -#: fortran/decl.c:6041 +#: fortran/decl.c:6062 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: END statement instead of %s statement at %L" msgstr "" #. We would have required END [something]. -#: fortran/decl.c:6049 +#: fortran/decl.c:6070 #, gcc-internal-format, gfc-internal-format msgid "%s statement expected at %L" msgstr "" -#: fortran/decl.c:6060 +#: fortran/decl.c:6081 #, gcc-internal-format, gfc-internal-format msgid "Expecting %s statement at %C" msgstr "" -#: fortran/decl.c:6076 +#: fortran/decl.c:6097 #, gcc-internal-format, gfc-internal-format msgid "Expected block name of '%s' in %s statement at %C" msgstr "" -#: fortran/decl.c:6093 +#: fortran/decl.c:6114 #, gcc-internal-format, gfc-internal-format msgid "Expected terminating name at %C" msgstr "" -#: fortran/decl.c:6102 fortran/decl.c:6110 +#: fortran/decl.c:6123 fortran/decl.c:6131 #, gcc-internal-format, gfc-internal-format msgid "Expected label '%s' for %s statement at %C" msgstr "" -#: fortran/decl.c:6175 +#: fortran/decl.c:6196 #, gcc-internal-format, gfc-internal-format msgid "Missing array specification at %L in DIMENSION statement" msgstr "" -#: fortran/decl.c:6183 +#: fortran/decl.c:6204 #, gcc-internal-format, gfc-internal-format msgid "Dimensions specified for %s at %L after its initialisation" msgstr "" -#: fortran/decl.c:6191 +#: fortran/decl.c:6212 #, gcc-internal-format, gfc-internal-format msgid "Missing array specification at %L in CODIMENSION statement" msgstr "" -#: fortran/decl.c:6200 +#: fortran/decl.c:6221 #, gcc-internal-format, gfc-internal-format msgid "Array specification must be deferred at %L" msgstr "" -#: fortran/decl.c:6299 +#: fortran/decl.c:6320 #, gcc-internal-format, gfc-internal-format msgid "Unexpected character in variable list at %C" msgstr "" -#: fortran/decl.c:6336 +#: fortran/decl.c:6357 #, gcc-internal-format, gfc-internal-format msgid "Expected '(' at %C" msgstr "" -#: fortran/decl.c:6350 fortran/decl.c:6390 +#: fortran/decl.c:6371 fortran/decl.c:6411 #, gcc-internal-format, gfc-internal-format msgid "Expected variable name at %C" msgstr "" -#: fortran/decl.c:6366 +#: fortran/decl.c:6387 #, gcc-internal-format, gfc-internal-format msgid "Cray pointer at %C must be an integer" msgstr "" -#: fortran/decl.c:6370 +#: fortran/decl.c:6391 #, gcc-internal-format, gfc-internal-format msgid "" "Cray pointer at %C has %d bytes of precision; memory addresses require %d " "bytes" msgstr "" -#: fortran/decl.c:6376 +#: fortran/decl.c:6397 #, gcc-internal-format, gfc-internal-format msgid "Expected \",\" at %C" msgstr "" -#: fortran/decl.c:6439 +#: fortran/decl.c:6460 #, gcc-internal-format, gfc-internal-format msgid "Expected \")\" at %C" msgstr "" -#: fortran/decl.c:6451 +#: fortran/decl.c:6472 #, gcc-internal-format, gfc-internal-format msgid "Expected \",\" or end of statement at %C" msgstr "" -#: fortran/decl.c:6477 +#: fortran/decl.c:6498 #, gcc-internal-format, gfc-internal-format msgid "INTENT is not allowed inside of BLOCK at %C" msgstr "" -#: fortran/decl.c:6509 +#: fortran/decl.c:6530 #, gcc-internal-format, gfc-internal-format msgid "OPTIONAL is not allowed inside of BLOCK at %C" msgstr "" -#: fortran/decl.c:6528 +#: fortran/decl.c:6549 #, gcc-internal-format, gfc-internal-format msgid "Cray pointer declaration at %C requires -fcray-pointer flag" msgstr "" -#: fortran/decl.c:6567 +#: fortran/decl.c:6588 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: CONTIGUOUS statement at %C" msgstr "" -#: fortran/decl.c:6665 +#: fortran/decl.c:6686 #, gcc-internal-format, gfc-internal-format msgid "" "Access specification of the %s operator at %C has already been specified" msgstr "" -#: fortran/decl.c:6682 +#: fortran/decl.c:6703 #, gcc-internal-format, gfc-internal-format msgid "" "Access specification of the .%s. operator at %C has already been specified" msgstr "" -#: fortran/decl.c:6720 +#: fortran/decl.c:6741 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: PROTECTED statement at %C" msgstr "" -#: fortran/decl.c:6760 +#: fortran/decl.c:6781 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in PROTECTED statement at %C" msgstr "" -#: fortran/decl.c:6784 +#: fortran/decl.c:6805 #, gcc-internal-format, gfc-internal-format msgid "" "PRIVATE statement at %C is only allowed in the specification part of a module" msgstr "" -#: fortran/decl.c:6821 +#: fortran/decl.c:6842 #, gcc-internal-format, gfc-internal-format msgid "" "PUBLIC statement at %C is only allowed in the specification part of a module" msgstr "" -#: fortran/decl.c:6849 +#: fortran/decl.c:6870 #, gcc-internal-format, gfc-internal-format msgid "Expected variable name at %C in PARAMETER statement" msgstr "" -#: fortran/decl.c:6856 +#: fortran/decl.c:6877 #, gcc-internal-format, gfc-internal-format msgid "Expected = sign in PARAMETER statement at %C" msgstr "" -#: fortran/decl.c:6862 +#: fortran/decl.c:6883 #, gcc-internal-format, gfc-internal-format msgid "Expected expression at %C in PARAMETER statement" msgstr "" -#: fortran/decl.c:6882 +#: fortran/decl.c:6903 #, gcc-internal-format, gfc-internal-format msgid "Initializing already initialized variable at %C" msgstr "" -#: fortran/decl.c:6917 +#: fortran/decl.c:6938 #, gcc-internal-format, gfc-internal-format msgid "Unexpected characters in PARAMETER statement at %C" msgstr "" -#: fortran/decl.c:6941 +#: fortran/decl.c:6962 #, gcc-internal-format, gfc-internal-format msgid "Blanket SAVE statement at %C follows previous SAVE statement" msgstr "" -#: fortran/decl.c:6953 +#: fortran/decl.c:6974 #, gcc-internal-format, gfc-internal-format msgid "SAVE statement at %C follows blanket SAVE statement" msgstr "" -#: fortran/decl.c:7000 +#: fortran/decl.c:7021 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in SAVE statement at %C" msgstr "" -#: fortran/decl.c:7014 +#: fortran/decl.c:7035 #, gcc-internal-format, gfc-internal-format msgid "VALUE is not allowed inside of BLOCK at %C" msgstr "" -#: fortran/decl.c:7018 +#: fortran/decl.c:7039 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: VALUE statement at %C" msgstr "" -#: fortran/decl.c:7058 +#: fortran/decl.c:7079 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in VALUE statement at %C" msgstr "" -#: fortran/decl.c:7069 +#: fortran/decl.c:7090 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: VOLATILE statement at %C" msgstr "" -#: fortran/decl.c:7093 +#: fortran/decl.c:7114 #, gcc-internal-format, gfc-internal-format msgid "" "Specifying VOLATILE for coarray variable '%s' at %C, which is use-/host-" "associated" msgstr "" -#: fortran/decl.c:7119 +#: fortran/decl.c:7140 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in VOLATILE statement at %C" msgstr "" -#: fortran/decl.c:7130 +#: fortran/decl.c:7151 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: ASYNCHRONOUS statement at %C" msgstr "" -#: fortran/decl.c:7172 +#: fortran/decl.c:7193 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in ASYNCHRONOUS statement at %C" msgstr "" -#: fortran/decl.c:7196 +#: fortran/decl.c:7217 #, gcc-internal-format, gfc-internal-format msgid "MODULE PROCEDURE at %C must be in a generic module interface" msgstr "" -#: fortran/decl.c:7221 +#: fortran/decl.c:7242 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: double colon in MODULE PROCEDURE statement at %L" msgstr "" -#: fortran/decl.c:7255 +#: fortran/decl.c:7276 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic procedure at %L cannot be a MODULE PROCEDURE" msgstr "" -#: fortran/decl.c:7304 +#: fortran/decl.c:7325 #, gcc-internal-format, gfc-internal-format msgid "Ambiguous symbol in TYPE definition at %C" msgstr "" -#: fortran/decl.c:7310 +#: fortran/decl.c:7331 #, gcc-internal-format, gfc-internal-format msgid "No such symbol in TYPE definition at %C" msgstr "" -#: fortran/decl.c:7318 +#: fortran/decl.c:7339 #, gcc-internal-format, gfc-internal-format msgid "'%s' in EXTENDS expression at %C is not a derived type" msgstr "" -#: fortran/decl.c:7325 +#: fortran/decl.c:7346 #, gcc-internal-format, gfc-internal-format msgid "'%s' cannot be extended at %C because it is BIND(C)" msgstr "" -#: fortran/decl.c:7332 +#: fortran/decl.c:7353 #, gcc-internal-format, gfc-internal-format msgid "'%s' cannot be extended at %C because it is a SEQUENCE type" msgstr "" -#: fortran/decl.c:7355 +#: fortran/decl.c:7376 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type at %C can only be PRIVATE in the specification part of a module" msgstr "" -#: fortran/decl.c:7367 +#: fortran/decl.c:7388 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type at %C can only be PUBLIC in the specification part of a module" msgstr "" -#: fortran/decl.c:7388 +#: fortran/decl.c:7409 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: ABSTRACT type at %C" msgstr "" -#: fortran/decl.c:7453 +#: fortran/decl.c:7474 #, gcc-internal-format, gfc-internal-format msgid "Expected :: in TYPE definition at %C" msgstr "" -#: fortran/decl.c:7464 +#: fortran/decl.c:7485 #, gcc-internal-format, gfc-internal-format msgid "Type name '%s' at %C cannot be the same as an intrinsic type" msgstr "" -#: fortran/decl.c:7474 +#: fortran/decl.c:7495 #, gcc-internal-format, gfc-internal-format msgid "Derived type name '%s' at %C already has a basic type of %s" msgstr "" -#: fortran/decl.c:7491 +#: fortran/decl.c:7512 #, gcc-internal-format, gfc-internal-format msgid "Derived type definition of '%s' at %C has already been defined" msgstr "" -#: fortran/decl.c:7599 +#: fortran/decl.c:7620 #, gcc-internal-format, gfc-internal-format msgid "Cray Pointee at %C cannot be assumed shape array" msgstr "" -#: fortran/decl.c:7619 +#: fortran/decl.c:7640 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: ENUM and ENUMERATOR at %C" msgstr "" -#: fortran/decl.c:7652 +#: fortran/decl.c:7673 #, gcc-internal-format, gfc-internal-format msgid "Enumerator exceeds the C integer type at %C" msgstr "" -#: fortran/decl.c:7731 +#: fortran/decl.c:7752 #, gcc-internal-format, gfc-internal-format msgid "ENUMERATOR %L not initialized with integer expression" msgstr "" -#: fortran/decl.c:7779 +#: fortran/decl.c:7800 #, gcc-internal-format, gfc-internal-format msgid "ENUM definition statement expected before %C" msgstr "" -#: fortran/decl.c:7815 +#: fortran/decl.c:7836 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in ENUMERATOR definition at %C" msgstr "" -#: fortran/decl.c:7862 fortran/decl.c:7877 +#: fortran/decl.c:7883 fortran/decl.c:7898 #, gcc-internal-format, gfc-internal-format msgid "Duplicate access-specifier at %C" msgstr "" -#: fortran/decl.c:7897 +#: fortran/decl.c:7918 #, gcc-internal-format, gfc-internal-format msgid "Binding attributes already specify passing, illegal NOPASS at %C" msgstr "" -#: fortran/decl.c:7917 +#: fortran/decl.c:7938 #, gcc-internal-format, gfc-internal-format msgid "Binding attributes already specify passing, illegal PASS at %C" msgstr "" -#: fortran/decl.c:7944 +#: fortran/decl.c:7965 #, gcc-internal-format, gfc-internal-format msgid "Duplicate POINTER attribute at %C" msgstr "" -#: fortran/decl.c:7962 +#: fortran/decl.c:7983 #, gcc-internal-format, gfc-internal-format msgid "Duplicate NON_OVERRIDABLE at %C" msgstr "" -#: fortran/decl.c:7978 +#: fortran/decl.c:7999 #, gcc-internal-format, gfc-internal-format msgid "Duplicate DEFERRED at %C" msgstr "" -#: fortran/decl.c:7991 +#: fortran/decl.c:8012 #, gcc-internal-format, gfc-internal-format msgid "Expected access-specifier at %C" msgstr "" -#: fortran/decl.c:7993 +#: fortran/decl.c:8014 #, gcc-internal-format, gfc-internal-format msgid "Expected binding attribute at %C" msgstr "" -#: fortran/decl.c:8001 +#: fortran/decl.c:8022 #, gcc-internal-format, gfc-internal-format msgid "NON_OVERRIDABLE and DEFERRED can't both appear at %C" msgstr "" -#: fortran/decl.c:8013 +#: fortran/decl.c:8034 #, gcc-internal-format, gfc-internal-format msgid "POINTER attribute is required for procedure pointer component at %C" msgstr "" -#: fortran/decl.c:8055 +#: fortran/decl.c:8076 #, gcc-internal-format, gfc-internal-format msgid "Interface-name expected after '(' at %C" msgstr "" -#: fortran/decl.c:8061 +#: fortran/decl.c:8082 #, gcc-internal-format, gfc-internal-format msgid "')' expected at %C" msgstr "" -#: fortran/decl.c:8081 +#: fortran/decl.c:8102 #, gcc-internal-format, gfc-internal-format msgid "Interface must be specified for DEFERRED binding at %C" msgstr "" -#: fortran/decl.c:8086 +#: fortran/decl.c:8107 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE(interface) at %C should be declared DEFERRED" msgstr "" -#: fortran/decl.c:8109 +#: fortran/decl.c:8130 #, gcc-internal-format, gfc-internal-format msgid "Expected binding name at %C" msgstr "" -#: fortran/decl.c:8113 +#: fortran/decl.c:8134 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: PROCEDURE list at %C" msgstr "" -#: fortran/decl.c:8126 +#: fortran/decl.c:8147 #, gcc-internal-format, gfc-internal-format msgid "'=> target' is invalid for DEFERRED binding at %C" msgstr "" -#: fortran/decl.c:8132 +#: fortran/decl.c:8153 #, gcc-internal-format, gfc-internal-format msgid "'::' needed in PROCEDURE binding with explicit target at %C" msgstr "" -#: fortran/decl.c:8142 +#: fortran/decl.c:8163 #, gcc-internal-format, gfc-internal-format msgid "Expected binding target after '=>' at %C" msgstr "" -#: fortran/decl.c:8159 +#: fortran/decl.c:8180 #, gcc-internal-format, gfc-internal-format msgid "Type '%s' containing DEFERRED binding at %C is not ABSTRACT" msgstr "" -#: fortran/decl.c:8170 +#: fortran/decl.c:8191 #, gcc-internal-format, gfc-internal-format msgid "" "There is already a procedure with binding name '%s' for the derived type " "'%s' at %C" msgstr "" -#: fortran/decl.c:8219 +#: fortran/decl.c:8240 #, gcc-internal-format, gfc-internal-format msgid "GENERIC at %C must be inside a derived-type CONTAINS" msgstr "" -#: fortran/decl.c:8239 +#: fortran/decl.c:8260 #, gcc-internal-format, gfc-internal-format msgid "Expected '::' at %C" msgstr "" -#: fortran/decl.c:8251 +#: fortran/decl.c:8272 #, gcc-internal-format, gfc-internal-format msgid "Expected generic name or operator descriptor at %C" msgstr "" -#: fortran/decl.c:8277 +#: fortran/decl.c:8298 #, gcc-internal-format, gfc-internal-format msgid "Expected '=>' at %C" msgstr "" -#: fortran/decl.c:8319 +#: fortran/decl.c:8340 #, gcc-internal-format, gfc-internal-format msgid "" "There's already a non-generic procedure with binding name '%s' for the " "derived type '%s' at %C" msgstr "" -#: fortran/decl.c:8327 +#: fortran/decl.c:8348 #, gcc-internal-format, gfc-internal-format msgid "Binding at %C must have the same access as already defined binding '%s'" msgstr "" -#: fortran/decl.c:8376 +#: fortran/decl.c:8397 #, gcc-internal-format, gfc-internal-format msgid "Expected specific binding name at %C" msgstr "" -#: fortran/decl.c:8386 +#: fortran/decl.c:8407 #, gcc-internal-format, gfc-internal-format msgid "'%s' already defined as specific binding for the generic '%s' at %C" msgstr "" -#: fortran/decl.c:8402 +#: fortran/decl.c:8425 #, gcc-internal-format, gfc-internal-format msgid "Junk after GENERIC binding at %C" msgstr "" -#: fortran/decl.c:8437 +#: fortran/decl.c:8460 #, gcc-internal-format, gfc-internal-format msgid "FINAL declaration at %C must be inside a derived type CONTAINS section" msgstr "" -#: fortran/decl.c:8448 +#: fortran/decl.c:8471 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type declaration with FINAL at %C must be in the specification part " "of a MODULE" msgstr "" -#: fortran/decl.c:8470 +#: fortran/decl.c:8493 #, gcc-internal-format, gfc-internal-format msgid "Empty FINAL at %C" msgstr "" -#: fortran/decl.c:8477 +#: fortran/decl.c:8500 #, gcc-internal-format, gfc-internal-format msgid "Expected module procedure name at %C" msgstr "" -#: fortran/decl.c:8487 +#: fortran/decl.c:8510 #, gcc-internal-format, gfc-internal-format msgid "Expected ',' at %C" msgstr "" -#: fortran/decl.c:8493 +#: fortran/decl.c:8516 #, gcc-internal-format, gfc-internal-format msgid "Unknown procedure name \"%s\" at %C" msgstr "" -#: fortran/decl.c:8507 +#: fortran/decl.c:8530 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %C is already defined as FINAL procedure!" msgstr "" -#: fortran/decl.c:8576 +#: fortran/decl.c:8599 #, gcc-internal-format, gfc-internal-format msgid "Unknown attribute in !GCC$ ATTRIBUTES statement at %C" msgstr "" -#: fortran/decl.c:8623 +#: fortran/decl.c:8646 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !GCC$ ATTRIBUTES statement at %C" msgstr "" @@ -37930,533 +38155,533 @@ msgstr "" msgid "Internal Error at (1):" msgstr "" -#: fortran/expr.c:1229 +#: fortran/expr.c:1230 #, gcc-internal-format, gfc-internal-format msgid "Index in dimension %d is out of bounds at %L" msgstr "" -#: fortran/expr.c:1408 fortran/expr.c:1459 +#: fortran/expr.c:1409 fortran/expr.c:1460 #, gcc-internal-format, gfc-internal-format msgid "index in dimension %d is out of bounds at %L" msgstr "" -#: fortran/expr.c:2073 +#: fortran/expr.c:2074 #, gcc-internal-format, gfc-internal-format msgid "elemental function arguments at %C are not compliant" msgstr "" -#: fortran/expr.c:2117 +#: fortran/expr.c:2118 #, gcc-internal-format, gfc-internal-format msgid "Numeric or CHARACTER operands are required in expression at %L" msgstr "" -#: fortran/expr.c:2142 +#: fortran/expr.c:2143 #, gcc-internal-format, gfc-internal-format msgid "" "Concatenation operator in expression at %L must have two CHARACTER operands" msgstr "" -#: fortran/expr.c:2149 +#: fortran/expr.c:2150 #, gcc-internal-format, gfc-internal-format msgid "Concat operator at %L must concatenate strings of the same kind" msgstr "" -#: fortran/expr.c:2159 +#: fortran/expr.c:2160 #, gcc-internal-format, gfc-internal-format msgid ".NOT. operator in expression at %L must have a LOGICAL operand" msgstr "" -#: fortran/expr.c:2175 +#: fortran/expr.c:2176 #, gcc-internal-format, gfc-internal-format msgid "LOGICAL operands are required in expression at %L" msgstr "" -#: fortran/expr.c:2186 +#: fortran/expr.c:2187 #, gcc-internal-format, gfc-internal-format msgid "Only intrinsic operators can be used in expression at %L" msgstr "" -#: fortran/expr.c:2194 +#: fortran/expr.c:2195 #, gcc-internal-format, gfc-internal-format msgid "Numeric operands are required in expression at %L" msgstr "" -#: fortran/expr.c:2217 +#: fortran/expr.c:2218 #, gcc-internal-format, gfc-internal-format msgid "" "Invalid initialization expression for ALLOCATABLE component '%s' in " "structure constructor at %L" msgstr "" -#: fortran/expr.c:2315 +#: fortran/expr.c:2316 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed or deferred character length variable '%s' in constant expression " "at %L" msgstr "" -#: fortran/expr.c:2381 +#: fortran/expr.c:2382 #, gcc-internal-format, gfc-internal-format msgid "" "transformational intrinsic '%s' at %L is not permitted in an initialization " "expression" msgstr "" -#: fortran/expr.c:2412 +#: fortran/expr.c:2413 #, gcc-internal-format, gfc-internal-format msgid "Extension: Evaluation of nonstandard initialization expression at %L" msgstr "" -#: fortran/expr.c:2468 +#: fortran/expr.c:2469 #, gcc-internal-format, gfc-internal-format msgid "" "Function '%s' in initialization expression at %L must be an intrinsic " "function" msgstr "" -#: fortran/expr.c:2480 +#: fortran/expr.c:2481 #, gcc-internal-format, gfc-internal-format msgid "" "Intrinsic function '%s' at %L is not permitted in an initialization " "expression" msgstr "" -#: fortran/expr.c:2515 +#: fortran/expr.c:2516 #, gcc-internal-format, gfc-internal-format msgid "PARAMETER '%s' is used at %L before its definition is complete" msgstr "" -#: fortran/expr.c:2535 +#: fortran/expr.c:2536 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed size array '%s' at %L is not permitted in an initialization " "expression" msgstr "" -#: fortran/expr.c:2541 +#: fortran/expr.c:2542 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed shape array '%s' at %L is not permitted in an initialization " "expression" msgstr "" -#: fortran/expr.c:2547 +#: fortran/expr.c:2548 #, gcc-internal-format, gfc-internal-format msgid "" "Deferred array '%s' at %L is not permitted in an initialization expression" msgstr "" -#: fortran/expr.c:2553 +#: fortran/expr.c:2554 #, gcc-internal-format, gfc-internal-format msgid "" "Array '%s' at %L is a variable, which does not reduce to a constant " "expression" msgstr "" -#: fortran/expr.c:2563 +#: fortran/expr.c:2564 #, gcc-internal-format, gfc-internal-format msgid "" "Parameter '%s' at %L has not been declared or is a variable, which does not " "reduce to a constant expression" msgstr "" -#: fortran/expr.c:2716 +#: fortran/expr.c:2717 #, gcc-internal-format, gfc-internal-format msgid "Specification function '%s' at %L cannot be a statement function" msgstr "" -#: fortran/expr.c:2723 +#: fortran/expr.c:2724 #, gcc-internal-format, gfc-internal-format msgid "Specification function '%s' at %L cannot be an internal function" msgstr "" -#: fortran/expr.c:2730 +#: fortran/expr.c:2731 #, gcc-internal-format, gfc-internal-format msgid "Specification function '%s' at %L must be PURE" msgstr "" -#: fortran/expr.c:2737 +#: fortran/expr.c:2738 #, gcc-internal-format, gfc-internal-format msgid "Specification function '%s' at %L cannot be RECURSIVE" msgstr "" -#: fortran/expr.c:2871 +#: fortran/expr.c:2872 #, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' not allowed in expression at %L" msgstr "" -#: fortran/expr.c:2878 +#: fortran/expr.c:2879 #, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' at %L cannot be OPTIONAL" msgstr "" -#: fortran/expr.c:2885 +#: fortran/expr.c:2886 #, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' at %L cannot be INTENT(OUT)" msgstr "" -#: fortran/expr.c:2916 +#: fortran/expr.c:2917 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' cannot appear in the expression at %L" msgstr "" -#: fortran/expr.c:2967 +#: fortran/expr.c:2968 #, gcc-internal-format, gfc-internal-format msgid "Expression at %L must be of INTEGER type, found %s" msgstr "" -#: fortran/expr.c:2979 +#: fortran/expr.c:2980 #, gcc-internal-format, gfc-internal-format msgid "Function '%s' at %L must be PURE" msgstr "" -#: fortran/expr.c:2988 +#: fortran/expr.c:2989 #, gcc-internal-format, gfc-internal-format msgid "Expression at %L must be scalar" msgstr "" -#: fortran/expr.c:3022 +#: fortran/expr.c:3023 #, gcc-internal-format, gfc-internal-format msgid "Incompatible ranks in %s (%d and %d) at %L" msgstr "" -#: fortran/expr.c:3036 +#: fortran/expr.c:3037 #, gcc-internal-format, gfc-internal-format msgid "Different shape for %s at %L on dimension %d (%d and %d)" msgstr "" -#: fortran/expr.c:3125 +#: fortran/expr.c:3126 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L is not a VALUE" msgstr "" -#: fortran/expr.c:3132 +#: fortran/expr.c:3133 #, gcc-internal-format, gfc-internal-format msgid "Incompatible ranks %d and %d in assignment at %L" msgstr "" -#: fortran/expr.c:3139 +#: fortran/expr.c:3140 #, gcc-internal-format, gfc-internal-format msgid "Variable type is UNKNOWN in assignment at %L" msgstr "" -#: fortran/expr.c:3151 +#: fortran/expr.c:3152 #, gcc-internal-format, gfc-internal-format msgid "NULL appears on right-hand side in assignment at %L" msgstr "" -#: fortran/expr.c:3161 +#: fortran/expr.c:3162 #, gcc-internal-format, gfc-internal-format msgid "POINTER valued function appears on right-hand side of assignment at %L" msgstr "" -#: fortran/expr.c:3171 +#: fortran/expr.c:3172 #, gcc-internal-format, gfc-internal-format msgid "" "Extension: BOZ literal at %L used to initialize non-integer variable '%s'" msgstr "" -#: fortran/expr.c:3177 fortran/resolve.c:9109 +#: fortran/expr.c:3178 fortran/resolve.c:9119 #, gcc-internal-format, gfc-internal-format msgid "" "Extension: BOZ literal at %L outside a DATA statement and outside INT/REAL/" "DBLE/CMPLX" msgstr "" -#: fortran/expr.c:3187 fortran/resolve.c:9119 +#: fortran/expr.c:3188 fortran/resolve.c:9129 #, gcc-internal-format, gfc-internal-format msgid "BOZ literal at %L is bitwise transferred non-integer symbol '%s'" msgstr "" -#: fortran/expr.c:3195 fortran/resolve.c:9128 +#: fortran/expr.c:3196 fortran/resolve.c:9138 #, gcc-internal-format, gfc-internal-format msgid "" "Arithmetic underflow of bit-wise transferred BOZ at %L. This check can be " "disabled with the option -fno-range-check" msgstr "" -#: fortran/expr.c:3199 fortran/resolve.c:9132 +#: fortran/expr.c:3200 fortran/resolve.c:9142 #, gcc-internal-format, gfc-internal-format msgid "" "Arithmetic overflow of bit-wise transferred BOZ at %L. This check can be " "disabled with the option -fno-range-check" msgstr "" -#: fortran/expr.c:3203 fortran/resolve.c:9136 +#: fortran/expr.c:3204 fortran/resolve.c:9146 #, gcc-internal-format, gfc-internal-format msgid "" "Arithmetic NaN of bit-wise transferred BOZ at %L. This check can be disabled " "with the option -fno-range-check" msgstr "" -#: fortran/expr.c:3235 +#: fortran/expr.c:3236 #, gcc-internal-format, gfc-internal-format msgid "Change of value in conversion from %s to %s at %L" msgstr "" -#: fortran/expr.c:3243 fortran/intrinsic.c:4335 fortran/intrinsic.c:4347 +#: fortran/expr.c:3244 fortran/intrinsic.c:4335 fortran/intrinsic.c:4347 #, gcc-internal-format, gfc-internal-format msgid "Possible change of value in conversion from %s to %s at %L" msgstr "" -#: fortran/expr.c:3251 fortran/intrinsic.c:4330 fortran/intrinsic.c:4356 +#: fortran/expr.c:3252 fortran/intrinsic.c:4330 fortran/intrinsic.c:4356 #, gcc-internal-format, gfc-internal-format msgid "Conversion from %s to %s at %L" msgstr "" -#: fortran/expr.c:3272 +#: fortran/expr.c:3273 #, gcc-internal-format, gfc-internal-format msgid "" "Incompatible types in DATA statement at %L; attempted conversion of %s to %s" msgstr "" -#: fortran/expr.c:3308 +#: fortran/expr.c:3309 #, gcc-internal-format, gfc-internal-format msgid "Pointer assignment target is not a POINTER at %L" msgstr "" -#: fortran/expr.c:3317 +#: fortran/expr.c:3318 #, gcc-internal-format, gfc-internal-format msgid "" "'%s' in the pointer assignment at %L cannot be an l-value since it is a " "procedure" msgstr "" -#: fortran/expr.c:3340 +#: fortran/expr.c:3341 #, gcc-internal-format, gfc-internal-format msgid "Expected bounds specification for '%s' at %L" msgstr "" -#: fortran/expr.c:3345 +#: fortran/expr.c:3346 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Bounds specification for '%s' in pointer assignment at %L" msgstr "" -#: fortran/expr.c:3359 +#: fortran/expr.c:3360 #, gcc-internal-format, gfc-internal-format msgid "Lower bound has to be present at %L" msgstr "" -#: fortran/expr.c:3365 +#: fortran/expr.c:3366 #, gcc-internal-format, gfc-internal-format msgid "Stride must not be present at %L" msgstr "" -#: fortran/expr.c:3377 +#: fortran/expr.c:3378 #, gcc-internal-format, gfc-internal-format msgid "Either all or none of the upper bounds must be specified at %L" msgstr "" -#: fortran/expr.c:3403 +#: fortran/expr.c:3404 #, gcc-internal-format, gfc-internal-format msgid "Pointer object at %L shall not have a coindex" msgstr "" -#: fortran/expr.c:3424 +#: fortran/expr.c:3425 #, gcc-internal-format, gfc-internal-format msgid "Invalid procedure pointer assignment at %L" msgstr "" -#: fortran/expr.c:3430 +#: fortran/expr.c:3431 #, gcc-internal-format, gfc-internal-format msgid "" "Abstract interface '%s' is invalid in procedure pointer assignment at %L" msgstr "" -#: fortran/expr.c:3440 +#: fortran/expr.c:3441 #, gcc-internal-format, gfc-internal-format msgid "" "Statement function '%s' is invalid in procedure pointer assignment at %L" msgstr "" -#: fortran/expr.c:3446 +#: fortran/expr.c:3447 #, gcc-internal-format, gfc-internal-format msgid "" "Internal procedure '%s' is invalid in procedure pointer assignment at %L" msgstr "" -#: fortran/expr.c:3454 +#: fortran/expr.c:3455 #, gcc-internal-format, gfc-internal-format msgid "" "Nonintrinsic elemental procedure '%s' is invalid in procedure pointer " "assigment at %L" msgstr "" -#: fortran/expr.c:3477 +#: fortran/expr.c:3478 #, gcc-internal-format, gfc-internal-format msgid "" "Mismatch in the procedure pointer assignment at %L: mismatch in the calling " "convention" msgstr "" -#: fortran/expr.c:3508 +#: fortran/expr.c:3509 #, gcc-internal-format, gfc-internal-format msgid "Interface mismatch in procedure pointer assignment at %L: %s" msgstr "" -#: fortran/expr.c:3518 +#: fortran/expr.c:3519 #, gcc-internal-format, gfc-internal-format msgid "" "Different types in pointer assignment at %L; attempted assignment of %s to %s" msgstr "" -#: fortran/expr.c:3526 +#: fortran/expr.c:3527 #, gcc-internal-format, gfc-internal-format msgid "Different kind type parameters in pointer assignment at %L" msgstr "" -#: fortran/expr.c:3533 +#: fortran/expr.c:3534 #, gcc-internal-format, gfc-internal-format msgid "Different ranks in pointer assignment at %L" msgstr "" -#: fortran/expr.c:3552 +#: fortran/expr.c:3553 #, gcc-internal-format, gfc-internal-format msgid "" "Rank remapping target is smaller than size of the pointer (%ld < %ld) at %L" msgstr "" -#: fortran/expr.c:3565 +#: fortran/expr.c:3566 #, gcc-internal-format, gfc-internal-format msgid "Rank remapping target must be rank 1 or simply contiguous at %L" msgstr "" -#: fortran/expr.c:3569 +#: fortran/expr.c:3570 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Rank remapping target is not rank 1 at %L" msgstr "" -#: fortran/expr.c:3594 +#: fortran/expr.c:3595 #, gcc-internal-format, gfc-internal-format msgid "" "Target expression in pointer assignment at %L must deliver a pointer result" msgstr "" -#: fortran/expr.c:3602 +#: fortran/expr.c:3603 #, gcc-internal-format, gfc-internal-format msgid "Pointer assignment target is neither TARGET nor POINTER at %L" msgstr "" -#: fortran/expr.c:3609 +#: fortran/expr.c:3610 #, gcc-internal-format, gfc-internal-format msgid "Bad target in pointer assignment in PURE procedure at %L" msgstr "" -#: fortran/expr.c:3619 +#: fortran/expr.c:3620 #, gcc-internal-format, gfc-internal-format msgid "Pointer assignment with vector subscript on rhs at %L" msgstr "" -#: fortran/expr.c:3627 +#: fortran/expr.c:3628 #, gcc-internal-format, gfc-internal-format msgid "Pointer assignment target has PROTECTED attribute at %L" msgstr "" -#: fortran/expr.c:3640 +#: fortran/expr.c:3641 #, gcc-internal-format, gfc-internal-format msgid "Data target at %L shall not have a coindex" msgstr "" -#: fortran/expr.c:3688 +#: fortran/expr.c:3689 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %C must not be ALLOCATABLE " msgstr "" -#: fortran/expr.c:3694 +#: fortran/expr.c:3695 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %C must have the TARGET attribute" msgstr "" -#: fortran/expr.c:3700 +#: fortran/expr.c:3701 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %C must have the SAVE attribute" msgstr "" -#: fortran/expr.c:3712 +#: fortran/expr.c:3713 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure pointer initialization target at %L may not be a procedure pointer" msgstr "" -#: fortran/expr.c:4587 +#: fortran/expr.c:4594 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2008: Pointer functions in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.c:4595 +#: fortran/expr.c:4602 #, gcc-internal-format, gfc-internal-format msgid "Non-variable expression in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.c:4603 +#: fortran/expr.c:4610 #, gcc-internal-format, gfc-internal-format msgid "Named constant '%s' in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.c:4612 +#: fortran/expr.c:4619 #, gcc-internal-format, gfc-internal-format msgid "'%s' in variable definition context (%s) at %L is not a variable" msgstr "" -#: fortran/expr.c:4623 +#: fortran/expr.c:4630 #, gcc-internal-format, gfc-internal-format msgid "Non-POINTER in pointer association context (%s) at %L" msgstr "" -#: fortran/expr.c:4636 +#: fortran/expr.c:4643 #, gcc-internal-format, gfc-internal-format msgid "LOCK_TYPE in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.c:4658 +#: fortran/expr.c:4666 #, gcc-internal-format, gfc-internal-format msgid "" "Dummy argument '%s' with INTENT(IN) in pointer association context (%s) at %L" msgstr "" -#: fortran/expr.c:4666 +#: fortran/expr.c:4674 #, gcc-internal-format, gfc-internal-format msgid "" "Dummy argument '%s' with INTENT(IN) in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.c:4679 +#: fortran/expr.c:4687 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' is PROTECTED and can not appear in a pointer association " "context (%s) at %L" msgstr "" -#: fortran/expr.c:4687 +#: fortran/expr.c:4695 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' is PROTECTED and can not appear in a variable definition " "context (%s) at %L" msgstr "" -#: fortran/expr.c:4699 +#: fortran/expr.c:4707 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' can not appear in a variable definition context (%s) at %L in " "PURE procedure" msgstr "" -#: fortran/expr.c:4758 +#: fortran/expr.c:4766 #, gcc-internal-format, gfc-internal-format msgid "" "'%s' at %L associated to vector-indexed target can not be used in a variable " "definition context (%s)" msgstr "" -#: fortran/expr.c:4762 +#: fortran/expr.c:4770 #, gcc-internal-format, gfc-internal-format msgid "" "'%s' at %L associated to expression can not be used in a variable definition " "context (%s)" msgstr "" -#: fortran/expr.c:4774 +#: fortran/expr.c:4782 #, gcc-internal-format, gfc-internal-format msgid "" "Associate-name '%s' can not appear in a variable definition context (%s) at " @@ -38474,7 +38699,7 @@ msgid "can't open input file: %s" msgstr "" #: fortran/frontend-passes.c:334 fortran/trans-array.c:1024 -#: fortran/trans-array.c:5756 fortran/trans-array.c:7002 +#: fortran/trans-array.c:5755 fortran/trans-array.c:7001 #: fortran/trans-intrinsic.c:5422 #, gcc-internal-format, gfc-internal-format msgid "Creating array temporary at %L" @@ -38550,177 +38775,177 @@ msgstr "" msgid "Expecting 'END INTERFACE %s' at %C" msgstr "" -#: fortran/interface.c:607 +#: fortran/interface.c:608 #, gcc-internal-format, gfc-internal-format msgid "Alternate return cannot appear in operator interface at %L" msgstr "" -#: fortran/interface.c:635 +#: fortran/interface.c:636 #, gcc-internal-format, gfc-internal-format msgid "Operator interface at %L has the wrong number of arguments" msgstr "" -#: fortran/interface.c:646 +#: fortran/interface.c:647 #, gcc-internal-format, gfc-internal-format msgid "Assignment operator interface at %L must be a SUBROUTINE" msgstr "" -#: fortran/interface.c:652 +#: fortran/interface.c:653 #, gcc-internal-format, gfc-internal-format msgid "Assignment operator interface at %L must have two arguments" msgstr "" -#: fortran/interface.c:669 +#: fortran/interface.c:670 #, gcc-internal-format, gfc-internal-format msgid "" "Assignment operator interface at %L must not redefine an INTRINSIC type " "assignment" msgstr "" -#: fortran/interface.c:678 +#: fortran/interface.c:679 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic operator interface at %L must be a FUNCTION" msgstr "" -#: fortran/interface.c:689 +#: fortran/interface.c:690 #, gcc-internal-format, gfc-internal-format msgid "" "First argument of defined assignment at %L must be INTENT(OUT) or INTENT" "(INOUT)" msgstr "" -#: fortran/interface.c:696 +#: fortran/interface.c:697 #, gcc-internal-format, gfc-internal-format msgid "Second argument of defined assignment at %L must be INTENT(IN)" msgstr "" -#: fortran/interface.c:705 fortran/resolve.c:13770 +#: fortran/interface.c:706 fortran/resolve.c:13806 #, gcc-internal-format, gfc-internal-format msgid "First argument of operator interface at %L must be INTENT(IN)" msgstr "" -#: fortran/interface.c:712 fortran/resolve.c:13788 +#: fortran/interface.c:713 fortran/resolve.c:13824 #, gcc-internal-format, gfc-internal-format msgid "Second argument of operator interface at %L must be INTENT(IN)" msgstr "" -#: fortran/interface.c:817 +#: fortran/interface.c:818 #, gcc-internal-format, gfc-internal-format msgid "Operator interface at %L conflicts with intrinsic interface" msgstr "" -#: fortran/interface.c:1270 +#: fortran/interface.c:1271 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' in %s at %L has no explicit interface" msgstr "" -#: fortran/interface.c:1273 +#: fortran/interface.c:1274 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' in %s at %L is neither function nor subroutine" msgstr "" -#: fortran/interface.c:1285 +#: fortran/interface.c:1286 #, gcc-internal-format, gfc-internal-format msgid "In %s at %L procedures must be either all SUBROUTINEs or all FUNCTIONs" msgstr "" -#: fortran/interface.c:1289 +#: fortran/interface.c:1290 #, gcc-internal-format, gfc-internal-format msgid "" "In %s at %L procedures must be all FUNCTIONs as the generic name is also the " "name of a derived type" msgstr "" -#: fortran/interface.c:1296 +#: fortran/interface.c:1298 #, gcc-internal-format, gfc-internal-format -msgid "Extension: Internal procedure '%s' in %s at %L" +msgid "Fortran 2008: Internal procedure '%s' in %s at %L" msgstr "" -#: fortran/interface.c:1353 fortran/interface.c:1357 +#: fortran/interface.c:1355 fortran/interface.c:1359 #, gcc-internal-format, gfc-internal-format msgid "Ambiguous interfaces '%s' and '%s' in %s at %L" msgstr "" -#: fortran/interface.c:1361 +#: fortran/interface.c:1363 #, gcc-internal-format, gfc-internal-format msgid "Although not referenced, '%s' has ambiguous interfaces at %L" msgstr "" -#: fortran/interface.c:1395 +#: fortran/interface.c:1397 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L is not a module procedure" msgstr "" -#: fortran/interface.c:1605 +#: fortran/interface.c:1609 #, gcc-internal-format, gfc-internal-format msgid "Rank mismatch in argument '%s' at %L (scalar and rank-%d)" msgstr "" -#: fortran/interface.c:1610 +#: fortran/interface.c:1614 #, gcc-internal-format, gfc-internal-format msgid "Rank mismatch in argument '%s' at %L (rank-%d and scalar)" msgstr "" -#: fortran/interface.c:1615 +#: fortran/interface.c:1619 #, gcc-internal-format, gfc-internal-format msgid "Rank mismatch in argument '%s' at %L (rank-%d and rank-%d)" msgstr "" -#: fortran/interface.c:1657 +#: fortran/interface.c:1661 #, gcc-internal-format, gfc-internal-format msgid "Invalid procedure argument at %L" msgstr "" -#: fortran/interface.c:1665 +#: fortran/interface.c:1669 #, gcc-internal-format, gfc-internal-format msgid "Interface mismatch in dummy procedure '%s' at %L: %s" msgstr "" -#: fortran/interface.c:1690 +#: fortran/interface.c:1694 #, gcc-internal-format, gfc-internal-format msgid "" "Actual argument to contiguous pointer dummy '%s' at %L must be simply " "contigous" msgstr "" -#: fortran/interface.c:1703 +#: fortran/interface.c:1708 #, gcc-internal-format, gfc-internal-format msgid "Type mismatch in argument '%s' at %L; passed %s to %s" msgstr "" -#: fortran/interface.c:1717 +#: fortran/interface.c:1723 #, gcc-internal-format, gfc-internal-format msgid "Actual argument to '%s' at %L must be polymorphic" msgstr "" -#: fortran/interface.c:1725 +#: fortran/interface.c:1731 #, gcc-internal-format, gfc-internal-format msgid "Actual argument to '%s' at %L must have the same declared type" msgstr "" -#: fortran/interface.c:1734 +#: fortran/interface.c:1740 #, gcc-internal-format, gfc-internal-format msgid "Actual argument to '%s' at %L must be a coarray" msgstr "" -#: fortran/interface.c:1753 +#: fortran/interface.c:1759 #, gcc-internal-format, gfc-internal-format msgid "Corank mismatch in argument '%s' at %L (%d and %d)" msgstr "" -#: fortran/interface.c:1770 +#: fortran/interface.c:1776 #, gcc-internal-format, gfc-internal-format msgid "Actual argument to '%s' at %L must be simply contiguous" msgstr "" -#: fortran/interface.c:1784 +#: fortran/interface.c:1790 #, gcc-internal-format, gfc-internal-format msgid "" "Actual argument to non-INTENT(INOUT) dummy '%s' at %L, which is LOCK_TYPE or " "has a LOCK_TYPE component" msgstr "" -#: fortran/interface.c:1801 +#: fortran/interface.c:1807 #, gcc-internal-format, gfc-internal-format msgid "" "Dummy argument '%s' has to be a pointer or assumed-shape array without " @@ -38728,179 +38953,186 @@ msgid "" "both are ASYNCHRONOUS or VOLATILE" msgstr "" -#: fortran/interface.c:1814 +#: fortran/interface.c:1820 #, gcc-internal-format, gfc-internal-format msgid "" "Passing coarray at %L to allocatable, noncoarray, INTENT(OUT) dummy argument " "'%s'" msgstr "" -#: fortran/interface.c:1821 +#: fortran/interface.c:1827 #, gcc-internal-format, gfc-internal-format msgid "" "Passing coarray at %L to allocatable, noncoarray dummy argument '%s', which " "is invalid if the allocation status is modified" msgstr "" -#: fortran/interface.c:1883 +#: fortran/interface.c:1889 #, gcc-internal-format, gfc-internal-format msgid "Polymorphic scalar passed to array dummy argument '%s' at %L" msgstr "" -#: fortran/interface.c:1892 +#: fortran/interface.c:1898 #, gcc-internal-format, gfc-internal-format msgid "" "Element of assumed-shaped or pointer array passed to array dummy argument " "'%s' at %L" msgstr "" -#: fortran/interface.c:1904 +#: fortran/interface.c:1910 #, gcc-internal-format, gfc-internal-format msgid "" "Extension: Scalar non-default-kind, non-C_CHAR-kind CHARACTER actual " "argument with array dummy argument '%s' at %L" msgstr "" -#: fortran/interface.c:1912 +#: fortran/interface.c:1918 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2003: Scalar CHARACTER actual argument with array dummy argument " "'%s' at %L" msgstr "" -#: fortran/interface.c:2212 +#: fortran/interface.c:2218 #, gcc-internal-format, gfc-internal-format msgid "Keyword argument '%s' at %L is not in the procedure" msgstr "" -#: fortran/interface.c:2220 +#: fortran/interface.c:2226 #, gcc-internal-format, gfc-internal-format msgid "" "Keyword argument '%s' at %L is already associated with another actual " "argument" msgstr "" -#: fortran/interface.c:2230 +#: fortran/interface.c:2236 #, gcc-internal-format, gfc-internal-format msgid "More actual than formal arguments in procedure call at %L" msgstr "" -#: fortran/interface.c:2242 fortran/interface.c:2568 +#: fortran/interface.c:2248 fortran/interface.c:2595 #, gcc-internal-format, gfc-internal-format msgid "Missing alternate return spec in subroutine call at %L" msgstr "" -#: fortran/interface.c:2250 +#: fortran/interface.c:2256 #, gcc-internal-format, gfc-internal-format msgid "Unexpected alternate return spec in subroutine call at %L" msgstr "" -#: fortran/interface.c:2260 +#: fortran/interface.c:2266 #, gcc-internal-format, gfc-internal-format msgid "Unexpected NULL() intrinsic at %L to dummy '%s'" msgstr "" -#: fortran/interface.c:2263 +#: fortran/interface.c:2269 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Null pointer at %L to non-pointer dummy '%s'" msgstr "" -#: fortran/interface.c:2287 +#: fortran/interface.c:2293 +#, gcc-internal-format, gfc-internal-format +msgid "" +"Actual argument at %L to assumed-type dummy is of derived type with type-" +"bound or FINAL procedures" +msgstr "" + +#: fortran/interface.c:2314 #, gcc-internal-format, gfc-internal-format msgid "" "Character length mismatch (%ld/%ld) between actual argument and pointer or " "allocatable dummy argument '%s' at %L" msgstr "" -#: fortran/interface.c:2294 +#: fortran/interface.c:2321 #, gcc-internal-format, gfc-internal-format msgid "" "Character length mismatch (%ld/%ld) between actual argument and assumed-" "shape dummy argument '%s' at %L" msgstr "" -#: fortran/interface.c:2308 +#: fortran/interface.c:2335 #, gcc-internal-format, gfc-internal-format msgid "" -"Actual argument argument at %L to allocatable or pointer dummy argument '%s' " -"must have a deferred length type parameter if and only if the dummy has one" +"Actual argument at %L to allocatable or pointer dummy argument '%s' must " +"have a deferred length type parameter if and only if the dummy has one" msgstr "" -#: fortran/interface.c:2325 +#: fortran/interface.c:2352 #, gcc-internal-format, gfc-internal-format msgid "" "Character length of actual argument shorter than of dummy argument '%s' (%lu/" "%lu) at %L" msgstr "" -#: fortran/interface.c:2330 +#: fortran/interface.c:2357 #, gcc-internal-format, gfc-internal-format msgid "" "Actual argument contains too few elements for dummy argument '%s' (%lu/%lu) " "at %L" msgstr "" -#: fortran/interface.c:2349 +#: fortran/interface.c:2376 #, gcc-internal-format, gfc-internal-format msgid "Expected a procedure pointer for argument '%s' at %L" msgstr "" -#: fortran/interface.c:2361 +#: fortran/interface.c:2388 #, gcc-internal-format, gfc-internal-format msgid "Expected a procedure for argument '%s' at %L" msgstr "" -#: fortran/interface.c:2375 +#: fortran/interface.c:2402 #, gcc-internal-format, gfc-internal-format msgid "Actual argument for '%s' cannot be an assumed-size array at %L" msgstr "" -#: fortran/interface.c:2384 +#: fortran/interface.c:2411 #, gcc-internal-format, gfc-internal-format msgid "Actual argument for '%s' must be a pointer at %L" msgstr "" -#: fortran/interface.c:2394 +#: fortran/interface.c:2421 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Non-pointer actual argument at %L to pointer dummy '%s'" msgstr "" -#: fortran/interface.c:2404 +#: fortran/interface.c:2431 #, gcc-internal-format, gfc-internal-format msgid "Coindexed actual argument at %L to pointer dummy '%s'" msgstr "" -#: fortran/interface.c:2417 +#: fortran/interface.c:2444 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed actual argument at %L to allocatable dummy '%s' requires INTENT(IN)" msgstr "" -#: fortran/interface.c:2431 +#: fortran/interface.c:2458 #, gcc-internal-format, gfc-internal-format msgid "" -"Coindexed ASYNCHRONOUS or VOLATILE actual argument at at %L requires that " -"dummy %s' has neither ASYNCHRONOUS nor VOLATILE" +"Coindexed ASYNCHRONOUS or VOLATILE actual argument at %L requires that dummy " +"'%s' has neither ASYNCHRONOUS nor VOLATILE" msgstr "" -#: fortran/interface.c:2445 +#: fortran/interface.c:2472 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed actual argument at %L with allocatable ultimate component to dummy " "'%s' requires either VALUE or INTENT(IN)" msgstr "" -#: fortran/interface.c:2457 +#: fortran/interface.c:2484 #, gcc-internal-format, gfc-internal-format msgid "Actual CLASS array argument for '%s' must be a full array at %L" msgstr "" -#: fortran/interface.c:2467 +#: fortran/interface.c:2494 #, gcc-internal-format, gfc-internal-format msgid "Actual argument for '%s' must be ALLOCATABLE at %L" msgstr "" -#: fortran/interface.c:2496 +#: fortran/interface.c:2523 #, gcc-internal-format, gfc-internal-format msgid "" "Array-section actual argument with vector subscripts at %L is incompatible " @@ -38908,248 +39140,253 @@ msgid "" "dummy argument '%s'" msgstr "" -#: fortran/interface.c:2514 +#: fortran/interface.c:2541 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed-shape actual argument at %L is incompatible with the non-assumed-" "shape dummy argument '%s' due to VOLATILE attribute" msgstr "" -#: fortran/interface.c:2526 +#: fortran/interface.c:2553 #, gcc-internal-format, gfc-internal-format msgid "" "Array-section actual argument at %L is incompatible with the non-assumed-" "shape dummy argument '%s' due to VOLATILE attribute" msgstr "" -#: fortran/interface.c:2545 +#: fortran/interface.c:2572 #, gcc-internal-format, gfc-internal-format msgid "" "Pointer-array actual argument at %L requires an assumed-shape or pointer-" "array dummy argument '%s' due to VOLATILE attribute" msgstr "" -#: fortran/interface.c:2575 +#: fortran/interface.c:2602 #, gcc-internal-format, gfc-internal-format msgid "Missing actual argument for argument '%s' at %L" msgstr "" -#: fortran/interface.c:2761 +#: fortran/interface.c:2788 #, gcc-internal-format, gfc-internal-format msgid "" "Same actual argument associated with INTENT(%s) argument '%s' and INTENT(%s) " "argument '%s' at %L" msgstr "" -#: fortran/interface.c:2817 +#: fortran/interface.c:2844 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure argument at %L is INTENT(IN) while interface specifies INTENT(%s)" msgstr "" -#: fortran/interface.c:2827 +#: fortran/interface.c:2854 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure argument at %L is local to a PURE procedure and is passed to an " "INTENT(%s) argument" msgstr "" -#: fortran/interface.c:2835 +#: fortran/interface.c:2862 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure argument at %L is local to a PURE procedure and has the POINTER " "attribute" msgstr "" -#: fortran/interface.c:2847 +#: fortran/interface.c:2874 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed actual argument at %L in PURE procedure is passed to an INTENT(%s) " "argument" msgstr "" -#: fortran/interface.c:2855 +#: fortran/interface.c:2882 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed actual argument at %L in PURE procedure is passed to a POINTER " "dummy argument" msgstr "" -#: fortran/interface.c:2866 +#: fortran/interface.c:2893 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed polymorphic actual argument at %L is passed polymorphic dummy " "argument '%s'" msgstr "" -#: fortran/interface.c:2892 +#: fortran/interface.c:2918 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' called with an implicit interface at %L" msgstr "" -#: fortran/interface.c:2896 +#: fortran/interface.c:2922 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' called at %L is not explicitly declared" msgstr "" -#: fortran/interface.c:2906 +#: fortran/interface.c:2932 #, gcc-internal-format, gfc-internal-format msgid "" "The pointer object '%s' at %L must have an explicit function interface or be " "declared as array" msgstr "" -#: fortran/interface.c:2914 +#: fortran/interface.c:2940 #, gcc-internal-format, gfc-internal-format msgid "" "The allocatable object '%s' at %L must have an explicit function interface " "or be declared as array" msgstr "" -#: fortran/interface.c:2922 +#: fortran/interface.c:2948 #, gcc-internal-format, gfc-internal-format msgid "" "Allocatable function '%s' at %L must have an explicit function interface" msgstr "" -#: fortran/interface.c:2932 +#: fortran/interface.c:2958 #, gcc-internal-format, gfc-internal-format msgid "Keyword argument requires explicit interface for procedure '%s' at %L" msgstr "" -#: fortran/interface.c:2944 +#: fortran/interface.c:2967 +#, gcc-internal-format, gfc-internal-format +msgid "Assumed-type argument %s at %L requires an explicit interface" +msgstr "" + +#: fortran/interface.c:2980 #, gcc-internal-format, gfc-internal-format msgid "" "Actual argument of LOCK_TYPE or with LOCK_TYPE component at %L requires an " "explicit interface for procedure '%s'" msgstr "" -#: fortran/interface.c:2953 +#: fortran/interface.c:2989 #, gcc-internal-format, gfc-internal-format msgid "MOLD argument to NULL required at %L" msgstr "" -#: fortran/interface.c:2984 +#: fortran/interface.c:3020 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure pointer component '%s' called with an implicit interface at %L" msgstr "" -#: fortran/interface.c:2995 +#: fortran/interface.c:3031 #, gcc-internal-format, gfc-internal-format msgid "" "Keyword argument requires explicit interface for procedure pointer component " "'%s' at %L" msgstr "" -#: fortran/interface.c:3075 +#: fortran/interface.c:3111 #, gcc-internal-format, gfc-internal-format msgid "" "MOLD= required in NULL() argument at %L: Ambiguity between specific " "functions %s and %s" msgstr "" -#: fortran/interface.c:3526 +#: fortran/interface.c:3562 #, gcc-internal-format, gfc-internal-format msgid "Entity '%s' at %C is already present in the interface" msgstr "" -#: fortran/interface.c:3723 +#: fortran/interface.c:3759 #, gcc-internal-format, gfc-internal-format msgid "Can't overwrite GENERIC '%s' at %L" msgstr "" -#: fortran/interface.c:3735 +#: fortran/interface.c:3771 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a procedure binding declared NON_OVERRIDABLE" msgstr "" -#: fortran/interface.c:3743 +#: fortran/interface.c:3779 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L must not be DEFERRED as it overrides a non-DEFERRED binding" msgstr "" -#: fortran/interface.c:3751 +#: fortran/interface.c:3787 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a PURE procedure and must also be PURE" msgstr "" -#: fortran/interface.c:3760 +#: fortran/interface.c:3796 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides an ELEMENTAL procedure and must also be ELEMENTAL" msgstr "" -#: fortran/interface.c:3766 +#: fortran/interface.c:3802 #, gcc-internal-format, gfc-internal-format msgid "" "'%s' at %L overrides a non-ELEMENTAL procedure and must not be ELEMENTAL, " "either" msgstr "" -#: fortran/interface.c:3775 +#: fortran/interface.c:3811 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a SUBROUTINE and must also be a SUBROUTINE" msgstr "" -#: fortran/interface.c:3786 +#: fortran/interface.c:3822 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a FUNCTION and must also be a FUNCTION" msgstr "" -#: fortran/interface.c:3796 +#: fortran/interface.c:3832 #, gcc-internal-format, gfc-internal-format msgid "" "'%s' at %L and the overridden FUNCTION should have matching result types and " "ranks" msgstr "" -#: fortran/interface.c:3812 +#: fortran/interface.c:3848 #, gcc-internal-format, gfc-internal-format msgid "Character length mismatch between '%s' at '%L' and overridden FUNCTION" msgstr "" -#: fortran/interface.c:3817 +#: fortran/interface.c:3853 #, gcc-internal-format, gfc-internal-format msgid "" "Possible character length mismatch between '%s' at '%L' and overridden " "FUNCTION" msgstr "" -#: fortran/interface.c:3837 +#: fortran/interface.c:3873 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a PUBLIC procedure and must not be PRIVATE" msgstr "" -#: fortran/interface.c:3866 +#: fortran/interface.c:3902 #, gcc-internal-format, gfc-internal-format msgid "" "Dummy argument '%s' of '%s' at %L should be named '%s' as to match the " "corresponding argument of the overridden procedure" msgstr "" -#: fortran/interface.c:3877 +#: fortran/interface.c:3913 #, gcc-internal-format, gfc-internal-format msgid "Argument mismatch for the overriding procedure '%s' at %L: %s" msgstr "" -#: fortran/interface.c:3886 +#: fortran/interface.c:3922 #, gcc-internal-format, gfc-internal-format msgid "" "'%s' at %L must have the same number of formal arguments as the overridden " "procedure" msgstr "" -#: fortran/interface.c:3895 +#: fortran/interface.c:3931 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a NOPASS binding and must also be NOPASS" msgstr "" -#: fortran/interface.c:3906 +#: fortran/interface.c:3942 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a binding with PASS and must also be PASS" msgstr "" -#: fortran/interface.c:3913 +#: fortran/interface.c:3949 #, gcc-internal-format, gfc-internal-format msgid "" "Passed-object dummy argument of '%s' at %L must be at the same position as " @@ -39488,815 +39725,810 @@ msgstr "" msgid "Fortran 2003: ASYNCHRONOUS= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:1914 fortran/io.c:3367 +#: fortran/io.c:1914 fortran/io.c:3363 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: BLANK= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:1932 fortran/io.c:3346 +#: fortran/io.c:1932 fortran/io.c:3342 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: DECIMAL= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:1950 fortran/io.c:3454 -#, gcc-internal-format, gfc-internal-format -msgid "Fortran 2003: DELIM= at %C not allowed in Fortran 95" -msgstr "" - -#: fortran/io.c:1968 +#: fortran/io.c:1964 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: ENCODING= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:2019 +#: fortran/io.c:2015 fortran/io.c:3405 #, gcc-internal-format, gfc-internal-format -msgid "Fortran F2003: ROUND= at %C not allowed in Fortran 95" +msgid "Fortran 2003: ROUND= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:2039 +#: fortran/io.c:2035 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: SIGN= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:2252 +#: fortran/io.c:2248 #, gcc-internal-format, gfc-internal-format msgid "CLOSE statement not allowed in PURE procedure at %C" msgstr "" -#: fortran/io.c:2312 +#: fortran/io.c:2308 #, gcc-internal-format, gfc-internal-format msgid "CLOSE statement at %L requires a UNIT number" msgstr "" -#: fortran/io.c:2320 +#: fortran/io.c:2316 #, gcc-internal-format, gfc-internal-format msgid "UNIT number in CLOSE statement at %L must be non-negative" msgstr "" -#: fortran/io.c:2418 fortran/match.c:2683 +#: fortran/io.c:2414 fortran/match.c:2682 #, gcc-internal-format, gfc-internal-format msgid "%s statement not allowed in PURE procedure at %C" msgstr "" -#: fortran/io.c:2453 fortran/io.c:2885 +#: fortran/io.c:2449 fortran/io.c:2881 #, gcc-internal-format, gfc-internal-format msgid "UNIT number in statement at %L must be non-negative" msgstr "" -#: fortran/io.c:2485 +#: fortran/io.c:2481 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: FLUSH statement at %C" msgstr "" -#: fortran/io.c:2541 +#: fortran/io.c:2537 #, gcc-internal-format, gfc-internal-format msgid "Duplicate UNIT specification at %C" msgstr "" -#: fortran/io.c:2615 +#: fortran/io.c:2611 #, gcc-internal-format, gfc-internal-format msgid "Duplicate format specification at %C" msgstr "" -#: fortran/io.c:2632 +#: fortran/io.c:2628 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' in namelist '%s' is INTENT(IN) at %C" msgstr "" -#: fortran/io.c:2668 +#: fortran/io.c:2664 #, gcc-internal-format, gfc-internal-format msgid "Duplicate NML specification at %C" msgstr "" -#: fortran/io.c:2677 +#: fortran/io.c:2673 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %C must be a NAMELIST group name" msgstr "" -#: fortran/io.c:2742 +#: fortran/io.c:2738 #, gcc-internal-format, gfc-internal-format msgid "END tag at %C not allowed in output statement" msgstr "" -#: fortran/io.c:2819 +#: fortran/io.c:2815 #, gcc-internal-format, gfc-internal-format msgid "UNIT not specified at %L" msgstr "" -#: fortran/io.c:2831 +#: fortran/io.c:2827 #, gcc-internal-format, gfc-internal-format msgid "" "UNIT specification at %L must be an INTEGER expression or a CHARACTER " "variable" msgstr "" -#: fortran/io.c:2853 +#: fortran/io.c:2849 #, gcc-internal-format, gfc-internal-format msgid "Invalid form of WRITE statement at %L, UNIT required" msgstr "" -#: fortran/io.c:2864 +#: fortran/io.c:2860 #, gcc-internal-format, gfc-internal-format msgid "Internal unit with vector subscript at %L" msgstr "" -#: fortran/io.c:2878 +#: fortran/io.c:2874 #, gcc-internal-format, gfc-internal-format msgid "External IO UNIT cannot be an array at %L" msgstr "" -#: fortran/io.c:2906 +#: fortran/io.c:2902 #, gcc-internal-format, gfc-internal-format msgid "" "NAMELIST '%s' in READ statement at %L contains the symbol '%s' which may not " "appear in a variable definition context" msgstr "" -#: fortran/io.c:2916 +#: fortran/io.c:2912 #, gcc-internal-format, gfc-internal-format msgid "Extension: Comma before i/o item list at %L" msgstr "" -#: fortran/io.c:2926 +#: fortran/io.c:2922 #, gcc-internal-format, gfc-internal-format msgid "ERR tag label %d at %L not defined" msgstr "" -#: fortran/io.c:2938 +#: fortran/io.c:2934 #, gcc-internal-format, gfc-internal-format msgid "END tag label %d at %L not defined" msgstr "" -#: fortran/io.c:2950 +#: fortran/io.c:2946 #, gcc-internal-format, gfc-internal-format msgid "EOR tag label %d at %L not defined" msgstr "" -#: fortran/io.c:2960 +#: fortran/io.c:2956 #, gcc-internal-format, gfc-internal-format msgid "FORMAT label %d at %L not defined" msgstr "" -#: fortran/io.c:3082 +#: fortran/io.c:3078 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in I/O iterator at %C" msgstr "" -#: fortran/io.c:3113 +#: fortran/io.c:3109 #, gcc-internal-format, gfc-internal-format msgid "Expected variable in READ statement at %C" msgstr "" -#: fortran/io.c:3119 +#: fortran/io.c:3115 #, gcc-internal-format, gfc-internal-format msgid "Expected expression in %s statement at %C" msgstr "" #. A general purpose syntax error. -#: fortran/io.c:3177 fortran/io.c:3776 fortran/gfortran.h:2465 +#: fortran/io.c:3173 fortran/io.c:3772 fortran/gfortran.h:2465 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in %s statement at %C" msgstr "" -#: fortran/io.c:3262 +#: fortran/io.c:3258 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Internal file at %L with namelist" msgstr "" -#: fortran/io.c:3320 +#: fortran/io.c:3316 #, gcc-internal-format, gfc-internal-format msgid "ASYNCHRONOUS= specifier at %L must be an initialization expression" msgstr "" -#: fortran/io.c:3388 +#: fortran/io.c:3384 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: PAD= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:3409 +#: fortran/io.c:3450 #, gcc-internal-format, gfc-internal-format -msgid "Fortran 2003: ROUND= at %C not allowed in Fortran 95" +msgid "Fortran 2003: DELIM= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:3603 +#: fortran/io.c:3599 #, gcc-internal-format, gfc-internal-format msgid "PRINT namelist at %C is an extension" msgstr "" -#: fortran/io.c:3746 +#: fortran/io.c:3742 #, gcc-internal-format, gfc-internal-format msgid "Expected comma in I/O list at %C" msgstr "" -#: fortran/io.c:3810 +#: fortran/io.c:3806 #, gcc-internal-format, gfc-internal-format msgid "PRINT statement at %C not allowed within PURE procedure" msgstr "" -#: fortran/io.c:3969 fortran/io.c:4023 +#: fortran/io.c:3965 fortran/io.c:4019 #, gcc-internal-format, gfc-internal-format msgid "INQUIRE statement not allowed in PURE procedure at %C" msgstr "" -#: fortran/io.c:3999 +#: fortran/io.c:3995 #, gcc-internal-format, gfc-internal-format msgid "IOLENGTH tag invalid in INQUIRE statement at %C" msgstr "" -#: fortran/io.c:4009 fortran/trans-io.c:1229 +#: fortran/io.c:4005 fortran/trans-io.c:1229 #, gcc-internal-format, gfc-internal-format msgid "INQUIRE statement at %L cannot contain both FILE and UNIT specifiers" msgstr "" -#: fortran/io.c:4016 +#: fortran/io.c:4012 #, gcc-internal-format, gfc-internal-format msgid "INQUIRE statement at %L requires either FILE or UNIT specifier" msgstr "" -#: fortran/io.c:4032 +#: fortran/io.c:4028 #, gcc-internal-format, gfc-internal-format msgid "" "INQUIRE statement at %L requires a PENDING= specifier with the ID= specifier" msgstr "" -#: fortran/io.c:4203 +#: fortran/io.c:4199 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: WAIT at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:4209 +#: fortran/io.c:4205 #, gcc-internal-format, gfc-internal-format msgid "WAIT statement not allowed in PURE procedure at %C" msgstr "" -#: fortran/match.c:164 +#: fortran/match.c:165 #, gcc-internal-format, gfc-internal-format msgid "Missing ')' in statement at or before %L" msgstr "" -#: fortran/match.c:169 +#: fortran/match.c:170 #, gcc-internal-format, gfc-internal-format msgid "Missing '(' in statement at or before %L" msgstr "" -#: fortran/match.c:366 +#: fortran/match.c:367 #, gcc-internal-format, gfc-internal-format msgid "Integer too large at %C" msgstr "" -#: fortran/match.c:459 fortran/parse.c:693 +#: fortran/match.c:460 fortran/parse.c:693 #, gcc-internal-format, gfc-internal-format msgid "Too many digits in statement label at %C" msgstr "" -#: fortran/match.c:465 +#: fortran/match.c:466 #, gcc-internal-format, gfc-internal-format msgid "Statement label at %C is zero" msgstr "" -#: fortran/match.c:498 +#: fortran/match.c:499 #, gcc-internal-format, gfc-internal-format msgid "Label name '%s' at %C is ambiguous" msgstr "" -#: fortran/match.c:504 +#: fortran/match.c:505 #, gcc-internal-format, gfc-internal-format msgid "Duplicate construct label '%s' at %C" msgstr "" -#: fortran/match.c:535 +#: fortran/match.c:536 #, gcc-internal-format, gfc-internal-format msgid "Invalid character in name at %C" msgstr "" -#: fortran/match.c:548 fortran/match.c:629 +#: fortran/match.c:549 #, gcc-internal-format, gfc-internal-format msgid "Name at %C is too long" msgstr "" -#: fortran/match.c:559 +#: fortran/match.c:560 #, gcc-internal-format, gfc-internal-format msgid "" "Invalid character '$' at %C. Use -fdollar-ok to allow it as an extension" msgstr "" -#: fortran/match.c:610 fortran/match.c:658 +#: fortran/match.c:610 fortran/match.c:657 #, gcc-internal-format, gfc-internal-format msgid "Invalid C name in NAME= specifier at %C" msgstr "" -#: fortran/match.c:649 +#: fortran/match.c:648 #, gcc-internal-format, gfc-internal-format msgid "Embedded space in NAME= specifier at %C" msgstr "" -#: fortran/match.c:973 +#: fortran/match.c:972 #, gcc-internal-format, gfc-internal-format msgid "Loop variable at %C cannot be a coarray" msgstr "" -#: fortran/match.c:979 +#: fortran/match.c:978 #, gcc-internal-format, gfc-internal-format msgid "Loop variable at %C cannot be a sub-component" msgstr "" -#: fortran/match.c:1013 +#: fortran/match.c:1012 #, gcc-internal-format, gfc-internal-format msgid "Expected a step value in iterator at %C" msgstr "" -#: fortran/match.c:1025 +#: fortran/match.c:1024 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in iterator at %C" msgstr "" -#: fortran/match.c:1266 +#: fortran/match.c:1265 #, gcc-internal-format, gfc-internal-format msgid "Invalid form of PROGRAM statement at %C" msgstr "" -#: fortran/match.c:1396 fortran/match.c:1477 +#: fortran/match.c:1395 fortran/match.c:1476 #, gcc-internal-format, gfc-internal-format msgid "Obsolescent feature: Arithmetic IF statement at %C" msgstr "" -#: fortran/match.c:1452 +#: fortran/match.c:1451 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in IF-expression at %C" msgstr "" -#: fortran/match.c:1463 +#: fortran/match.c:1462 #, gcc-internal-format, gfc-internal-format msgid "Block label not appropriate for arithmetic IF statement at %C" msgstr "" -#: fortran/match.c:1501 +#: fortran/match.c:1500 #, gcc-internal-format, gfc-internal-format msgid "Block label is not appropriate for IF statement at %C" msgstr "" -#: fortran/match.c:1587 +#: fortran/match.c:1586 #, gcc-internal-format, gfc-internal-format msgid "Cannot assign to a named constant at %C" msgstr "" -#: fortran/match.c:1597 +#: fortran/match.c:1596 #, gcc-internal-format, gfc-internal-format msgid "Unclassifiable statement in IF-clause at %C" msgstr "" -#: fortran/match.c:1604 +#: fortran/match.c:1603 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in IF-clause at %C" msgstr "" -#: fortran/match.c:1648 +#: fortran/match.c:1647 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after ELSE statement at %C" msgstr "" -#: fortran/match.c:1654 fortran/match.c:1689 +#: fortran/match.c:1653 fortran/match.c:1688 #, gcc-internal-format, gfc-internal-format msgid "Label '%s' at %C doesn't match IF label '%s'" msgstr "" -#: fortran/match.c:1683 +#: fortran/match.c:1682 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after ELSE IF statement at %C" msgstr "" -#: fortran/match.c:1747 +#: fortran/match.c:1746 #, gcc-internal-format, gfc-internal-format msgid "Image control statement CRITICAL at %C in PURE procedure" msgstr "" -#: fortran/match.c:1753 +#: fortran/match.c:1752 #, gcc-internal-format, gfc-internal-format msgid "Image control statement CRITICAL at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.c:1761 +#: fortran/match.c:1760 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: CRITICAL statement at %C" msgstr "" -#: fortran/match.c:1773 +#: fortran/match.c:1772 #, gcc-internal-format, gfc-internal-format msgid "Nested CRITICAL block at %C" msgstr "" -#: fortran/match.c:1825 +#: fortran/match.c:1824 #, gcc-internal-format, gfc-internal-format msgid "Expected association list at %C" msgstr "" -#: fortran/match.c:1838 +#: fortran/match.c:1837 #, gcc-internal-format, gfc-internal-format msgid "Expected association at %C" msgstr "" -#: fortran/match.c:1847 +#: fortran/match.c:1846 #, gcc-internal-format, gfc-internal-format msgid "Duplicate name '%s' in association at %C" msgstr "" -#: fortran/match.c:1855 +#: fortran/match.c:1854 #, gcc-internal-format, gfc-internal-format msgid "Association target at %C must not be coindexed" msgstr "" -#: fortran/match.c:1873 +#: fortran/match.c:1872 #, gcc-internal-format, gfc-internal-format msgid "Expected ')' or ',' at %C" msgstr "" -#: fortran/match.c:1891 +#: fortran/match.c:1890 #, gcc-internal-format, gfc-internal-format msgid "Junk after ASSOCIATE statement at %C" msgstr "" -#: fortran/match.c:1960 +#: fortran/match.c:1959 #, gcc-internal-format, gfc-internal-format msgid "Derived type '%s' at %L may not be ABSTRACT" msgstr "" -#: fortran/match.c:2023 +#: fortran/match.c:2022 #, gcc-internal-format, gfc-internal-format msgid "Invalid type-spec at %C" msgstr "" -#: fortran/match.c:2117 +#: fortran/match.c:2116 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in FORALL iterator at %C" msgstr "" -#: fortran/match.c:2385 +#: fortran/match.c:2384 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: DO CONCURRENT construct at %C" msgstr "" -#: fortran/match.c:2511 +#: fortran/match.c:2510 #, gcc-internal-format, gfc-internal-format msgid "Name '%s' in %s statement at %C is unknown" msgstr "" -#: fortran/match.c:2519 +#: fortran/match.c:2518 #, gcc-internal-format, gfc-internal-format msgid "Name '%s' in %s statement at %C is not a construct name" msgstr "" -#: fortran/match.c:2531 +#: fortran/match.c:2530 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C leaves CRITICAL construct" msgstr "" #. F2008, C821 & C845. -#: fortran/match.c:2539 +#: fortran/match.c:2538 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C leaves DO CONCURRENT construct" msgstr "" -#: fortran/match.c:2551 +#: fortran/match.c:2550 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C is not within a construct" msgstr "" -#: fortran/match.c:2554 +#: fortran/match.c:2553 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C is not within construct '%s'" msgstr "" -#: fortran/match.c:2579 +#: fortran/match.c:2578 #, gcc-internal-format, gfc-internal-format msgid "CYCLE statement at %C is not applicable to non-loop construct '%s'" msgstr "" -#: fortran/match.c:2584 +#: fortran/match.c:2583 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: EXIT statement with no do-construct-name at %C" msgstr "" -#: fortran/match.c:2590 +#: fortran/match.c:2589 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C is not applicable to construct '%s'" msgstr "" -#: fortran/match.c:2597 +#: fortran/match.c:2596 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C leaving OpenMP structured block" msgstr "" -#: fortran/match.c:2621 +#: fortran/match.c:2620 #, gcc-internal-format, gfc-internal-format msgid "EXIT statement at %C terminating !$OMP DO loop" msgstr "" -#: fortran/match.c:2626 +#: fortran/match.c:2625 #, gcc-internal-format, gfc-internal-format msgid "CYCLE statement at %C to non-innermost collapsed !$OMP DO loop" msgstr "" -#: fortran/match.c:2693 +#: fortran/match.c:2692 #, gcc-internal-format, gfc-internal-format msgid "Image control statement STOP at %C in CRITICAL block" msgstr "" -#: fortran/match.c:2698 +#: fortran/match.c:2697 #, gcc-internal-format, gfc-internal-format msgid "Image control statement STOP at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.c:2706 +#: fortran/match.c:2705 #, gcc-internal-format, gfc-internal-format msgid "STOP code at %L must be either INTEGER or CHARACTER type" msgstr "" -#: fortran/match.c:2713 +#: fortran/match.c:2712 #, gcc-internal-format, gfc-internal-format msgid "STOP code at %L must be scalar" msgstr "" -#: fortran/match.c:2721 +#: fortran/match.c:2720 #, gcc-internal-format, gfc-internal-format msgid "STOP code at %L must be default character KIND=%d" msgstr "" -#: fortran/match.c:2729 +#: fortran/match.c:2728 #, gcc-internal-format, gfc-internal-format msgid "STOP code at %L must be default integer KIND=%d" msgstr "" -#: fortran/match.c:2775 +#: fortran/match.c:2774 #, gcc-internal-format, gfc-internal-format msgid "Deleted feature: PAUSE statement at %C" msgstr "" -#: fortran/match.c:2798 +#: fortran/match.c:2797 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: ERROR STOP statement at %C" msgstr "" -#: fortran/match.c:2824 +#: fortran/match.c:2823 #, gcc-internal-format, gfc-internal-format msgid "Image control statement %s at %C in PURE procedure" msgstr "" -#: fortran/match.c:2840 +#: fortran/match.c:2839 #, gcc-internal-format, gfc-internal-format msgid "Image control statement %s at %C in CRITICAL block" msgstr "" -#: fortran/match.c:2847 +#: fortran/match.c:2846 #, gcc-internal-format, gfc-internal-format msgid "Image control statement %s at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.c:2877 fortran/match.c:3088 fortran/match.c:3600 -#: fortran/match.c:3924 +#: fortran/match.c:2876 fortran/match.c:3087 fortran/match.c:3599 +#: fortran/match.c:3923 #, gcc-internal-format, gfc-internal-format msgid "Redundant STAT tag found at %L " msgstr "" -#: fortran/match.c:2898 fortran/match.c:3108 fortran/match.c:3627 -#: fortran/match.c:3950 +#: fortran/match.c:2897 fortran/match.c:3107 fortran/match.c:3626 +#: fortran/match.c:3949 #, gcc-internal-format, gfc-internal-format msgid "Redundant ERRMSG tag found at %L " msgstr "" -#: fortran/match.c:2919 +#: fortran/match.c:2918 #, gcc-internal-format, gfc-internal-format msgid "Redundant ACQUIRED_LOCK tag found at %L " msgstr "" -#: fortran/match.c:2980 +#: fortran/match.c:2979 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: LOCK statement at %C" msgstr "" -#: fortran/match.c:2991 +#: fortran/match.c:2990 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: UNLOCK statement at %C" msgstr "" -#: fortran/match.c:3017 +#: fortran/match.c:3016 #, gcc-internal-format, gfc-internal-format msgid "Image control statement SYNC at %C in PURE procedure" msgstr "" -#: fortran/match.c:3024 +#: fortran/match.c:3023 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: SYNC statement at %C" msgstr "" -#: fortran/match.c:3036 +#: fortran/match.c:3035 #, gcc-internal-format, gfc-internal-format msgid "Image control statement SYNC at %C in CRITICAL block" msgstr "" -#: fortran/match.c:3042 +#: fortran/match.c:3041 #, gcc-internal-format, gfc-internal-format msgid "Image control statement SYNC at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.c:3222 +#: fortran/match.c:3221 #, gcc-internal-format, gfc-internal-format msgid "Deleted feature: ASSIGN statement at %C" msgstr "" -#: fortran/match.c:3268 +#: fortran/match.c:3267 #, gcc-internal-format, gfc-internal-format msgid "Deleted feature: Assigned GOTO statement at %C" msgstr "" -#: fortran/match.c:3315 fortran/match.c:3368 +#: fortran/match.c:3314 fortran/match.c:3367 #, gcc-internal-format, gfc-internal-format msgid "Statement label list in GOTO at %C cannot be empty" msgstr "" -#: fortran/match.c:3378 +#: fortran/match.c:3377 #, gcc-internal-format, gfc-internal-format msgid "Obsolescent feature: Computed GOTO at %C" msgstr "" -#: fortran/match.c:3450 +#: fortran/match.c:3449 #, gcc-internal-format, gfc-internal-format msgid "Error in type-spec at %L" msgstr "" -#: fortran/match.c:3460 +#: fortran/match.c:3459 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: typespec in ALLOCATE at %L" msgstr "" -#: fortran/match.c:3499 +#: fortran/match.c:3498 #, gcc-internal-format, gfc-internal-format msgid "Bad allocate-object at %C for a PURE procedure" msgstr "" -#: fortran/match.c:3524 +#: fortran/match.c:3523 #, gcc-internal-format, gfc-internal-format msgid "ALLOCATE of coarray at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.c:3529 +#: fortran/match.c:3528 #, gcc-internal-format, gfc-internal-format msgid "ALLOCATE of coarray at %C in CRITICAL block" msgstr "" -#: fortran/match.c:3541 +#: fortran/match.c:3540 #, gcc-internal-format, gfc-internal-format msgid "Type of entity at %L is type incompatible with typespec" msgstr "" -#: fortran/match.c:3549 +#: fortran/match.c:3548 #, gcc-internal-format, gfc-internal-format msgid "" "Kind type parameter for entity at %L differs from the kind type parameter of " "the typespec" msgstr "" -#: fortran/match.c:3576 +#: fortran/match.c:3575 #, gcc-internal-format, gfc-internal-format msgid "" "Allocate-object at %L is not a nonprocedure pointer or an allocatable " "variable" msgstr "" -#: fortran/match.c:3583 +#: fortran/match.c:3582 #, gcc-internal-format, gfc-internal-format msgid "Shape specification for allocatable scalar at %C" msgstr "" -#: fortran/match.c:3620 +#: fortran/match.c:3619 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: ERRMSG tag at %L" msgstr "" -#: fortran/match.c:3644 +#: fortran/match.c:3643 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: SOURCE tag at %L" msgstr "" -#: fortran/match.c:3651 +#: fortran/match.c:3650 #, gcc-internal-format, gfc-internal-format msgid "Redundant SOURCE tag found at %L " msgstr "" -#: fortran/match.c:3658 +#: fortran/match.c:3657 #, gcc-internal-format, gfc-internal-format msgid "SOURCE tag at %L conflicts with the typespec at %L" msgstr "" -#: fortran/match.c:3664 +#: fortran/match.c:3663 #, gcc-internal-format, gfc-internal-format -msgid "Fortran 2008: SOURCE tag at %L with more than a single allocate objects" +msgid "Fortran 2008: SOURCE tag at %L with more than a single allocate object" msgstr "" -#: fortran/match.c:3682 +#: fortran/match.c:3681 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: MOLD tag at %L" msgstr "" -#: fortran/match.c:3689 +#: fortran/match.c:3688 #, gcc-internal-format, gfc-internal-format msgid "Redundant MOLD tag found at %L " msgstr "" -#: fortran/match.c:3696 +#: fortran/match.c:3695 #, gcc-internal-format, gfc-internal-format msgid "MOLD tag at %L conflicts with the typespec at %L" msgstr "" -#: fortran/match.c:3722 +#: fortran/match.c:3721 #, gcc-internal-format, gfc-internal-format msgid "MOLD tag at %L conflicts with SOURCE tag at %L" msgstr "" -#: fortran/match.c:3730 +#: fortran/match.c:3729 #, gcc-internal-format, gfc-internal-format msgid "" "Allocate-object at %L with a deferred type parameter requires either a type-" "spec or SOURCE tag or a MOLD tag" msgstr "" -#: fortran/match.c:3791 +#: fortran/match.c:3790 #, gcc-internal-format, gfc-internal-format -msgid "Pointer object at %C shall not be conindexed" +msgid "Pointer object at %C shall not be coindexed" msgstr "" -#: fortran/match.c:3874 +#: fortran/match.c:3873 #, gcc-internal-format, gfc-internal-format msgid "Illegal allocate-object at %C for a PURE procedure" msgstr "" -#: fortran/match.c:3884 +#: fortran/match.c:3883 #, gcc-internal-format, gfc-internal-format msgid "DEALLOCATE of coarray at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.c:3891 +#: fortran/match.c:3890 #, gcc-internal-format, gfc-internal-format msgid "DEALLOCATE of coarray at %C in CRITICAL block" msgstr "" -#: fortran/match.c:3907 +#: fortran/match.c:3906 #, gcc-internal-format, gfc-internal-format msgid "" "Allocate-object at %C is not a nonprocedure pointer or an allocatable " "variable" msgstr "" -#: fortran/match.c:3944 +#: fortran/match.c:3943 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: ERRMSG at %L" msgstr "" -#: fortran/match.c:4002 +#: fortran/match.c:4001 #, gcc-internal-format, gfc-internal-format msgid "Image control statement RETURN at %C in CRITICAL block" msgstr "" -#: fortran/match.c:4008 +#: fortran/match.c:4007 #, gcc-internal-format, gfc-internal-format msgid "Image control statement RETURN at %C in DO CONCURRENT block" msgstr "" -#: fortran/match.c:4017 +#: fortran/match.c:4016 #, gcc-internal-format, gfc-internal-format msgid "Alternate RETURN statement at %C is only allowed within a SUBROUTINE" msgstr "" -#: fortran/match.c:4022 +#: fortran/match.c:4021 #, gcc-internal-format, gfc-internal-format msgid "Obsolescent feature: Alternate RETURN at %C" msgstr "" -#: fortran/match.c:4052 +#: fortran/match.c:4051 #, gcc-internal-format, gfc-internal-format msgid "Extension: RETURN statement in main program at %C" msgstr "" -#: fortran/match.c:4080 +#: fortran/match.c:4079 #, gcc-internal-format, gfc-internal-format msgid "Expected component reference at %C" msgstr "" -#: fortran/match.c:4086 +#: fortran/match.c:4085 #, gcc-internal-format, gfc-internal-format msgid "Junk after CALL at %C" msgstr "" -#: fortran/match.c:4096 +#: fortran/match.c:4095 #, gcc-internal-format, gfc-internal-format msgid "Expected type-bound procedure or procedure pointer component at %C" msgstr "" -#: fortran/match.c:4316 +#: fortran/match.c:4315 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in common block name at %C" msgstr "" -#: fortran/match.c:4352 +#: fortran/match.c:4351 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %C is already an external symbol that is not COMMON" msgstr "" @@ -40304,147 +40536,147 @@ msgstr "" #. If we find an error, just print it and continue, #. cause it's just semantic, and we can see if there #. are more errors. -#: fortran/match.c:4411 +#: fortran/match.c:4410 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %L in common block '%s' at %C must be declared with a C " "interoperable kind since common block '%s' is bind(c)" msgstr "" -#: fortran/match.c:4420 +#: fortran/match.c:4419 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' in common block '%s' at %C can not be bind(c) since it is not " "global" msgstr "" -#: fortran/match.c:4427 +#: fortran/match.c:4426 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %C is already in a COMMON block" msgstr "" -#: fortran/match.c:4435 +#: fortran/match.c:4434 #, gcc-internal-format, gfc-internal-format msgid "Initialized symbol '%s' at %C can only be COMMON in BLOCK DATA" msgstr "" -#: fortran/match.c:4462 +#: fortran/match.c:4461 #, gcc-internal-format, gfc-internal-format msgid "Array specification for symbol '%s' in COMMON at %C must be explicit" msgstr "" -#: fortran/match.c:4472 +#: fortran/match.c:4471 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' in COMMON at %C cannot be a POINTER array" msgstr "" -#: fortran/match.c:4504 +#: fortran/match.c:4503 #, gcc-internal-format, gfc-internal-format msgid "" "Symbol '%s', in COMMON block '%s' at %C is being indirectly equivalenced to " "another COMMON block '%s'" msgstr "" -#: fortran/match.c:4612 +#: fortran/match.c:4611 #, gcc-internal-format, gfc-internal-format msgid "Namelist group name '%s' at %C already has a basic type of %s" msgstr "" -#: fortran/match.c:4620 +#: fortran/match.c:4619 #, gcc-internal-format, gfc-internal-format msgid "" "Namelist group name '%s' at %C already is USE associated and cannot be " "respecified." msgstr "" -#: fortran/match.c:4647 +#: fortran/match.c:4646 #, gcc-internal-format, gfc-internal-format msgid "Assumed size array '%s' in namelist '%s' at %C is not allowed" msgstr "" -#: fortran/match.c:4781 +#: fortran/match.c:4780 #, gcc-internal-format, gfc-internal-format msgid "Derived type component %C is not a permitted EQUIVALENCE member" msgstr "" -#: fortran/match.c:4789 +#: fortran/match.c:4788 #, gcc-internal-format, gfc-internal-format msgid "Array reference in EQUIVALENCE at %C cannot be an array section" msgstr "" -#: fortran/match.c:4817 +#: fortran/match.c:4816 #, gcc-internal-format, gfc-internal-format msgid "EQUIVALENCE at %C requires two or more objects" msgstr "" -#: fortran/match.c:4831 +#: fortran/match.c:4830 #, gcc-internal-format, gfc-internal-format msgid "" "Attempt to indirectly overlap COMMON blocks %s and %s by EQUIVALENCE at %C" msgstr "" -#: fortran/match.c:4844 +#: fortran/match.c:4843 #, gcc-internal-format, gfc-internal-format msgid "Expecting a comma in EQUIVALENCE at %C" msgstr "" -#: fortran/match.c:4960 +#: fortran/match.c:4959 #, gcc-internal-format, gfc-internal-format msgid "Statement function at %L is recursive" msgstr "" -#: fortran/match.c:4966 +#: fortran/match.c:4965 #, gcc-internal-format, gfc-internal-format msgid "Obsolescent feature: Statement function at %C" msgstr "" -#: fortran/match.c:5052 +#: fortran/match.c:5051 #, gcc-internal-format, gfc-internal-format msgid "Expected initialization expression in CASE at %C" msgstr "" -#: fortran/match.c:5084 +#: fortran/match.c:5083 #, gcc-internal-format, gfc-internal-format msgid "Expected block name '%s' of SELECT construct at %C" msgstr "" -#: fortran/match.c:5268 +#: fortran/match.c:5267 #, gcc-internal-format, gfc-internal-format msgid "" "Selector in SELECT TYPE at %C is not a named variable; use associate-name=>" msgstr "" -#: fortran/match.c:5301 +#: fortran/match.c:5300 #, gcc-internal-format, gfc-internal-format msgid "Unexpected CASE statement at %C" msgstr "" -#: fortran/match.c:5353 +#: fortran/match.c:5352 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in CASE specification at %C" msgstr "" -#: fortran/match.c:5371 +#: fortran/match.c:5370 #, gcc-internal-format, gfc-internal-format msgid "Unexpected TYPE IS statement at %C" msgstr "" -#: fortran/match.c:5404 +#: fortran/match.c:5403 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in TYPE IS specification at %C" msgstr "" -#: fortran/match.c:5477 +#: fortran/match.c:5476 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in CLASS IS specification at %C" msgstr "" -#: fortran/match.c:5599 +#: fortran/match.c:5598 #, gcc-internal-format, gfc-internal-format msgid "ELSEWHERE statement at %C not enclosed in WHERE block" msgstr "" -#: fortran/match.c:5637 +#: fortran/match.c:5636 #, gcc-internal-format, gfc-internal-format msgid "Label '%s' at %C doesn't match WHERE label '%s'" msgstr "" @@ -40477,202 +40709,202 @@ msgid "" "%C" msgstr "" -#: fortran/module.c:548 +#: fortran/module.c:555 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: module nature in USE statement at %C" msgstr "" -#: fortran/module.c:560 +#: fortran/module.c:567 #, gcc-internal-format, gfc-internal-format msgid "" "Module nature in USE statement at %C shall be either INTRINSIC or " "NON_INTRINSIC" msgstr "" -#: fortran/module.c:573 +#: fortran/module.c:580 #, gcc-internal-format, gfc-internal-format msgid "\"::\" was expected after module nature at %C but was not found" msgstr "" -#: fortran/module.c:583 +#: fortran/module.c:590 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: \"USE :: module\" at %C" msgstr "" -#: fortran/module.c:643 +#: fortran/module.c:650 #, gcc-internal-format, gfc-internal-format msgid "Missing generic specification in USE statement at %C" msgstr "" -#: fortran/module.c:651 +#: fortran/module.c:658 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Renaming operators in USE statements at %C" msgstr "" -#: fortran/module.c:693 +#: fortran/module.c:700 #, gcc-internal-format, gfc-internal-format msgid "The name '%s' at %C has already been used as an external module name." msgstr "" -#: fortran/module.c:1006 +#: fortran/module.c:1013 #, gcc-internal-format, gfc-internal-format msgid "Reading module %s at line %d column %d: %s" msgstr "" -#: fortran/module.c:1010 +#: fortran/module.c:1017 #, gcc-internal-format, gfc-internal-format msgid "Writing module %s at line %d column %d: %s" msgstr "" -#: fortran/module.c:1014 +#: fortran/module.c:1021 #, gcc-internal-format, gfc-internal-format msgid "Module %s at line %d column %d: %s" msgstr "" -#: fortran/module.c:1449 +#: fortran/module.c:1469 #, gcc-internal-format, gfc-internal-format msgid "Error writing modules file: %s" msgstr "" -#: fortran/module.c:3396 +#: fortran/module.c:3417 #, gcc-internal-format, gfc-internal-format msgid "Namelist %s cannot be renamed by USE association to %s" msgstr "" -#: fortran/module.c:4427 +#: fortran/module.c:4462 #, gcc-internal-format, gfc-internal-format msgid "" "'%s' of module '%s', imported at %C, is also the name of the current program " "unit" msgstr "" -#: fortran/module.c:4722 +#: fortran/module.c:4761 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' referenced at %L not found in module '%s'" msgstr "" -#: fortran/module.c:4729 +#: fortran/module.c:4768 #, gcc-internal-format, gfc-internal-format msgid "User operator '%s' referenced at %L not found in module '%s'" msgstr "" -#: fortran/module.c:4734 +#: fortran/module.c:4773 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic operator '%s' referenced at %L not found in module '%s'" msgstr "" -#: fortran/module.c:5372 +#: fortran/module.c:5410 #, gcc-internal-format, gfc-internal-format msgid "Can't open module file '%s' for writing at %C: %s" msgstr "" -#: fortran/module.c:5405 +#: fortran/module.c:5443 #, gcc-internal-format, gfc-internal-format msgid "Error writing module file '%s' for writing: %s" msgstr "" -#: fortran/module.c:5414 +#: fortran/module.c:5452 #, gcc-internal-format, gfc-internal-format msgid "Can't delete module file '%s': %s" msgstr "" -#: fortran/module.c:5417 +#: fortran/module.c:5455 #, gcc-internal-format, gfc-internal-format msgid "Can't rename module file '%s' to '%s': %s" msgstr "" -#: fortran/module.c:5423 +#: fortran/module.c:5461 #, gcc-internal-format, gfc-internal-format msgid "Can't delete temporary module file '%s': %s" msgstr "" -#: fortran/module.c:5442 fortran/module.c:5654 fortran/module.c:5687 -#: fortran/module.c:5729 +#: fortran/module.c:5480 fortran/module.c:5692 fortran/module.c:5725 +#: fortran/module.c:5767 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' already declared" msgstr "" -#: fortran/module.c:5546 fortran/module.c:5825 +#: fortran/module.c:5584 fortran/module.c:5863 #, gcc-internal-format, gfc-internal-format msgid "The symbol '%s', referenced at %L, is not in the selected standard" msgstr "" -#: fortran/module.c:5633 +#: fortran/module.c:5671 #, gcc-internal-format, gfc-internal-format msgid "" "Symbol '%s' referenced at %L not found in intrinsic module ISO_C_BINDING" msgstr "" -#: fortran/module.c:5810 +#: fortran/module.c:5848 #, gcc-internal-format, gfc-internal-format msgid "" "Use of intrinsic module '%s' at %C conflicts with non-intrinsic module name " "used previously" msgstr "" -#: fortran/module.c:5833 +#: fortran/module.c:5871 #, gcc-internal-format, gfc-internal-format msgid "" "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module " "ISO_FORTRAN_ENV at %L is incompatible with option %s" msgstr "" -#: fortran/module.c:5903 +#: fortran/module.c:5941 #, gcc-internal-format, gfc-internal-format msgid "" "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module " "ISO_FORTRAN_ENV at %C is incompatible with option %s" msgstr "" -#: fortran/module.c:5961 +#: fortran/module.c:5999 #, gcc-internal-format, gfc-internal-format msgid "" "Symbol '%s' referenced at %L not found in intrinsic module ISO_FORTRAN_ENV" msgstr "" -#: fortran/module.c:6000 +#: fortran/module.c:6038 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: ISO_FORTRAN_ENV intrinsic module at %C" msgstr "" -#: fortran/module.c:6010 +#: fortran/module.c:6048 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: ISO_C_BINDING module at %C" msgstr "" -#: fortran/module.c:6022 +#: fortran/module.c:6060 #, gcc-internal-format, gfc-internal-format msgid "Can't find an intrinsic module named '%s' at %C" msgstr "" -#: fortran/module.c:6027 +#: fortran/module.c:6065 #, gcc-internal-format, gfc-internal-format msgid "Can't open module file '%s' for reading at %C: %s" msgstr "" -#: fortran/module.c:6035 +#: fortran/module.c:6073 #, gcc-internal-format, gfc-internal-format msgid "" "Use of non-intrinsic module '%s' at %C conflicts with intrinsic module name " "used previously" msgstr "" -#: fortran/module.c:6055 +#: fortran/module.c:6093 #, gcc-internal-format, gfc-internal-format msgid "File '%s' opened at %C is not a GFORTRAN module file" msgstr "" -#: fortran/module.c:6062 +#: fortran/module.c:6100 #, gcc-internal-format, gfc-internal-format msgid "Parse error when checking module version for file '%s' opened at %C" msgstr "" -#: fortran/module.c:6067 +#: fortran/module.c:6105 #, gcc-internal-format, gfc-internal-format msgid "Wrong module version '%s' (expected '%s') for file '%s' opened at %C" msgstr "" -#: fortran/module.c:6082 +#: fortran/module.c:6120 #, gcc-internal-format msgid "Can't USE the same module we're building!" msgstr "" @@ -40757,7 +40989,7 @@ msgstr "" msgid "Unexpected junk after NOWAIT clause at %C" msgstr "" -#: fortran/openmp.c:819 fortran/resolve.c:8998 fortran/resolve.c:9476 +#: fortran/openmp.c:819 fortran/resolve.c:9008 fortran/resolve.c:9486 #, gcc-internal-format, gfc-internal-format msgid "IF clause at %L requires a scalar LOGICAL expression" msgstr "" @@ -41731,446 +41963,456 @@ msgstr "" msgid "Coarray designator at %C but '%s' is not a coarray" msgstr "" -#: fortran/primary.c:1926 +#: fortran/primary.c:1915 +#, gcc-internal-format, gfc-internal-format +msgid "Symbol '%s' at %C has no IMPLICIT type" +msgstr "" + +#: fortran/primary.c:1921 +#, gcc-internal-format, gfc-internal-format +msgid "Unexpected '%%' for nonderived-type variable '%s' at %C" +msgstr "" + +#: fortran/primary.c:1939 #, gcc-internal-format, gfc-internal-format msgid "Expected structure component name at %C" msgstr "" -#: fortran/primary.c:1973 +#: fortran/primary.c:1986 #, gcc-internal-format, gfc-internal-format msgid "Expected argument list at %C" msgstr "" -#: fortran/primary.c:2005 +#: fortran/primary.c:2018 #, gcc-internal-format, gfc-internal-format msgid "Procedure pointer component '%s' requires an argument list at %C" msgstr "" -#: fortran/primary.c:2093 +#: fortran/primary.c:2106 #, gcc-internal-format, gfc-internal-format msgid "Coindexed procedure-pointer component at %C" msgstr "" -#: fortran/primary.c:2342 +#: fortran/primary.c:2355 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2003: Structure constructor with missing optional arguments at %C" msgstr "" -#: fortran/primary.c:2350 +#: fortran/primary.c:2363 #, gcc-internal-format, gfc-internal-format msgid "" "No initializer for component '%s' given in the structure constructor at %C!" msgstr "" -#: fortran/primary.c:2398 +#: fortran/primary.c:2411 #, gcc-internal-format, gfc-internal-format msgid "Can't construct ABSTRACT type '%s' at %L" msgstr "" -#: fortran/primary.c:2418 +#: fortran/primary.c:2431 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Structure constructor with named arguments at %C" msgstr "" -#: fortran/primary.c:2434 +#: fortran/primary.c:2447 #, gcc-internal-format, gfc-internal-format msgid "Component initializer without name after component named %s at %L!" msgstr "" -#: fortran/primary.c:2439 +#: fortran/primary.c:2452 #, gcc-internal-format, gfc-internal-format msgid "Too many components in structure constructor at %L!" msgstr "" -#: fortran/primary.c:2476 +#: fortran/primary.c:2489 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' is initialized twice in the structure constructor at %L!" msgstr "" -#: fortran/primary.c:2488 +#: fortran/primary.c:2501 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed expression to pointer component '%s' in structure constructor at " "%L!" msgstr "" -#: fortran/primary.c:2541 +#: fortran/primary.c:2554 #, gcc-internal-format, gfc-internal-format msgid "" "component '%s' at %L has already been set by a parent derived type " "constructor" msgstr "" -#: fortran/primary.c:2725 +#: fortran/primary.c:2738 #, gcc-internal-format, gfc-internal-format msgid "" "'%s' at %C is the name of a recursive function and so refers to the result " "variable. Use an explicit RESULT variable for direct recursion (12.5.2.1)" msgstr "" -#: fortran/primary.c:2844 +#: fortran/primary.c:2857 #, gcc-internal-format, gfc-internal-format msgid "Unexpected use of subroutine name '%s' at %C" msgstr "" -#: fortran/primary.c:2875 +#: fortran/primary.c:2888 #, gcc-internal-format, gfc-internal-format msgid "Statement function '%s' requires argument list at %C" msgstr "" -#: fortran/primary.c:2878 +#: fortran/primary.c:2891 #, gcc-internal-format, gfc-internal-format msgid "Function '%s' requires an argument list at %C" msgstr "" -#: fortran/primary.c:2928 +#: fortran/primary.c:2941 #, gcc-internal-format, gfc-internal-format msgid "Missing argument to '%s' at %C" msgstr "" -#: fortran/primary.c:3087 +#: fortran/primary.c:3100 #, gcc-internal-format, gfc-internal-format msgid "Missing argument list in function '%s' at %C" msgstr "" -#: fortran/primary.c:3121 +#: fortran/primary.c:3134 #, gcc-internal-format, gfc-internal-format msgid "Symbol at %C is not appropriate for an expression" msgstr "" -#: fortran/primary.c:3220 +#: fortran/primary.c:3233 #, gcc-internal-format, gfc-internal-format msgid "Named constant at %C in an EQUIVALENCE" msgstr "" -#: fortran/primary.c:3254 +#: fortran/primary.c:3267 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %C is not a variable" msgstr "" -#: fortran/resolve.c:117 +#: fortran/resolve.c:119 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L is of the ABSTRACT type '%s'" msgstr "" -#: fortran/resolve.c:120 +#: fortran/resolve.c:122 #, gcc-internal-format, gfc-internal-format msgid "ABSTRACT type '%s' used at %L" msgstr "" -#: fortran/resolve.c:142 +#: fortran/resolve.c:144 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE '%s' at %L may not be used as its own interface" msgstr "" -#: fortran/resolve.c:148 +#: fortran/resolve.c:150 #, gcc-internal-format, gfc-internal-format msgid "" "Interface '%s', used by procedure '%s' at %L, is declared in a later " "PROCEDURE statement" msgstr "" -#: fortran/resolve.c:208 +#: fortran/resolve.c:210 #, gcc-internal-format, gfc-internal-format msgid "Interface '%s' of procedure '%s' at %L must be explicit" msgstr "" -#: fortran/resolve.c:256 +#: fortran/resolve.c:258 #, gcc-internal-format, gfc-internal-format msgid "" "Alternate return specifier in elemental subroutine '%s' at %L is not allowed" msgstr "" -#: fortran/resolve.c:260 +#: fortran/resolve.c:262 #, gcc-internal-format, gfc-internal-format msgid "Alternate return specifier in function '%s' at %L is not allowed" msgstr "" -#: fortran/resolve.c:321 +#: fortran/resolve.c:323 #, gcc-internal-format, gfc-internal-format msgid "Dummy procedure '%s' of PURE procedure at %L must also be PURE" msgstr "" -#: fortran/resolve.c:331 +#: fortran/resolve.c:333 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2008: Argument '%s' of pure function '%s' at %L with VALUE attribute " "but without INTENT(IN)" msgstr "" -#: fortran/resolve.c:336 +#: fortran/resolve.c:338 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of pure function '%s' at %L must be INTENT(IN) or VALUE" msgstr "" -#: fortran/resolve.c:344 +#: fortran/resolve.c:346 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2008: Argument '%s' of pure subroutine '%s' at %L with VALUE " "attribute but without INTENT" msgstr "" -#: fortran/resolve.c:349 +#: fortran/resolve.c:351 #, gcc-internal-format, gfc-internal-format msgid "" "Argument '%s' of pure subroutine '%s' at %L must have its INTENT specified " "or have the VALUE attribute" msgstr "" -#: fortran/resolve.c:381 +#: fortran/resolve.c:383 #, gcc-internal-format, gfc-internal-format msgid "Coarray dummy argument '%s' at %L to elemental procedure" msgstr "" -#: fortran/resolve.c:389 +#: fortran/resolve.c:391 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of elemental procedure at %L must be scalar" msgstr "" -#: fortran/resolve.c:398 +#: fortran/resolve.c:400 #, gcc-internal-format, gfc-internal-format msgid "" "Argument '%s' of elemental procedure at %L cannot have the ALLOCATABLE " "attribute" msgstr "" -#: fortran/resolve.c:408 +#: fortran/resolve.c:410 #, gcc-internal-format, gfc-internal-format msgid "" "Argument '%s' of elemental procedure at %L cannot have the POINTER attribute" msgstr "" -#: fortran/resolve.c:416 +#: fortran/resolve.c:418 #, gcc-internal-format, gfc-internal-format msgid "Dummy procedure '%s' not allowed in elemental procedure '%s' at %L" msgstr "" -#: fortran/resolve.c:424 +#: fortran/resolve.c:426 #, gcc-internal-format, gfc-internal-format msgid "" "Argument '%s' of elemental procedure '%s' at %L must have its INTENT " "specified" msgstr "" -#: fortran/resolve.c:436 +#: fortran/resolve.c:438 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of statement function at %L must be scalar" msgstr "" -#: fortran/resolve.c:446 +#: fortran/resolve.c:448 #, gcc-internal-format, gfc-internal-format msgid "" "Character-valued argument '%s' of statement function at %L must have " "constant length" msgstr "" -#: fortran/resolve.c:504 +#: fortran/resolve.c:506 #, gcc-internal-format, gfc-internal-format msgid "Contained function '%s' at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.c:507 +#: fortran/resolve.c:509 #, gcc-internal-format, gfc-internal-format msgid "Result '%s' of contained function '%s' at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.c:531 +#: fortran/resolve.c:533 #, gcc-internal-format, gfc-internal-format msgid "Character-valued %s '%s' at %L must not be assumed length" msgstr "" -#: fortran/resolve.c:706 +#: fortran/resolve.c:708 #, gcc-internal-format, gfc-internal-format msgid "Function %s at %L has entries with mismatched array specifications" msgstr "" -#: fortran/resolve.c:723 +#: fortran/resolve.c:725 #, gcc-internal-format, gfc-internal-format msgid "" "Extension: Function %s at %L with entries returning variables of different " "string lengths" msgstr "" -#: fortran/resolve.c:750 +#: fortran/resolve.c:752 #, gcc-internal-format, gfc-internal-format msgid "FUNCTION result %s can't be an array in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:754 +#: fortran/resolve.c:756 #, gcc-internal-format, gfc-internal-format msgid "ENTRY result %s can't be an array in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:761 +#: fortran/resolve.c:763 #, gcc-internal-format, gfc-internal-format msgid "FUNCTION result %s can't be a POINTER in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:765 +#: fortran/resolve.c:767 #, gcc-internal-format, gfc-internal-format msgid "ENTRY result %s can't be a POINTER in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:803 +#: fortran/resolve.c:805 #, gcc-internal-format, gfc-internal-format msgid "FUNCTION result %s can't be of type %s in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:808 +#: fortran/resolve.c:810 #, gcc-internal-format, gfc-internal-format msgid "ENTRY result %s can't be of type %s in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:851 +#: fortran/resolve.c:853 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %L is in COMMON but only in BLOCK DATA initialization is " "allowed" msgstr "" -#: fortran/resolve.c:855 +#: fortran/resolve.c:857 #, gcc-internal-format, gfc-internal-format msgid "" "Initialized variable '%s' at %L is in a blank COMMON but initialization is " "only allowed in named common blocks" msgstr "" -#: fortran/resolve.c:866 +#: fortran/resolve.c:868 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type variable '%s' in COMMON at %L has neither the SEQUENCE nor the " "BIND(C) attribute" msgstr "" -#: fortran/resolve.c:870 +#: fortran/resolve.c:872 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type variable '%s' in COMMON at %L has an ultimate component that is " "allocatable" msgstr "" -#: fortran/resolve.c:874 +#: fortran/resolve.c:876 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type variable '%s' in COMMON at %L may not have default initializer" msgstr "" -#: fortran/resolve.c:904 +#: fortran/resolve.c:906 #, gcc-internal-format, gfc-internal-format msgid "COMMON block '%s' at %L is used as PARAMETER at %L" msgstr "" -#: fortran/resolve.c:908 +#: fortran/resolve.c:910 #, gcc-internal-format, gfc-internal-format msgid "COMMON block '%s' at %L can not have the EXTERNAL attribute" msgstr "" -#: fortran/resolve.c:912 +#: fortran/resolve.c:914 #, gcc-internal-format, gfc-internal-format msgid "COMMON block '%s' at %L is also an intrinsic procedure" msgstr "" -#: fortran/resolve.c:916 +#: fortran/resolve.c:918 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: COMMON block '%s' at %L that is also a function result" msgstr "" -#: fortran/resolve.c:921 +#: fortran/resolve.c:923 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: COMMON block '%s' at %L that is also a global procedure" msgstr "" -#: fortran/resolve.c:985 +#: fortran/resolve.c:987 #, gcc-internal-format, gfc-internal-format msgid "Components of structure constructor '%s' at %L are PRIVATE" msgstr "" -#: fortran/resolve.c:1021 +#: fortran/resolve.c:1023 #, gcc-internal-format, gfc-internal-format msgid "" "The rank of the element in the structure constructor at %L does not match " "that of the component (%d/%d)" msgstr "" -#: fortran/resolve.c:1043 +#: fortran/resolve.c:1045 #, gcc-internal-format, gfc-internal-format msgid "" "The element in the structure constructor at %L, for pointer component '%s', " "is %s but should be %s" msgstr "" -#: fortran/resolve.c:1122 +#: fortran/resolve.c:1124 #, gcc-internal-format, gfc-internal-format msgid "" "The NULL in the structure constructor at %L is being applied to component " "'%s', which is neither a POINTER nor ALLOCATABLE" msgstr "" -#: fortran/resolve.c:1155 +#: fortran/resolve.c:1157 #, gcc-internal-format, gfc-internal-format msgid "" "Interface mismatch for procedure-pointer component '%s' in structure " "constructor at %L: %s" msgstr "" -#: fortran/resolve.c:1171 +#: fortran/resolve.c:1173 #, gcc-internal-format, gfc-internal-format msgid "" "The element in the structure constructor at %L, for pointer component '%s' " "should be a POINTER or a TARGET" msgstr "" -#: fortran/resolve.c:1182 +#: fortran/resolve.c:1184 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %L must not be ALLOCATABLE " msgstr "" -#: fortran/resolve.c:1188 +#: fortran/resolve.c:1190 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %L must have the SAVE attribute" msgstr "" -#: fortran/resolve.c:1199 +#: fortran/resolve.c:1201 #, gcc-internal-format, gfc-internal-format msgid "" "Invalid expression in the structure constructor for pointer component '%s' " "at %L in PURE procedure" msgstr "" -#: fortran/resolve.c:1328 +#: fortran/resolve.c:1330 #, gcc-internal-format, gfc-internal-format msgid "" "The upper bound in the last dimension must appear in the reference to the " "assumed size array '%s' at %L" msgstr "" -#: fortran/resolve.c:1390 +#: fortran/resolve.c:1392 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L is ambiguous" msgstr "" -#: fortran/resolve.c:1394 +#: fortran/resolve.c:1396 #, gcc-internal-format, gfc-internal-format msgid "GENERIC procedure '%s' is not allowed as an actual argument at %L" msgstr "" -#: fortran/resolve.c:1506 +#: fortran/resolve.c:1508 #, gcc-internal-format, gfc-internal-format msgid "Type specified for intrinsic function '%s' at %L is ignored" msgstr "" -#: fortran/resolve.c:1519 +#: fortran/resolve.c:1521 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic subroutine '%s' at %L shall not have a type specifier" msgstr "" -#: fortran/resolve.c:1530 +#: fortran/resolve.c:1532 #, gcc-internal-format, gfc-internal-format msgid "'%s' declared INTRINSIC at %L does not exist" msgstr "" -#: fortran/resolve.c:1541 +#: fortran/resolve.c:1543 #, gcc-internal-format, gfc-internal-format msgid "" "The intrinsic '%s' declared INTRINSIC at %L is not available in the current " @@ -42178,77 +42420,77 @@ msgid "" "intrinsics in order to use it." msgstr "" -#: fortran/resolve.c:1577 +#: fortran/resolve.c:1579 #, gcc-internal-format, gfc-internal-format msgid "" "Non-RECURSIVE procedure '%s' at %L is possibly calling itself recursively. " "Declare it RECURSIVE or use -frecursive" msgstr "" -#: fortran/resolve.c:1620 fortran/resolve.c:8534 fortran/resolve.c:9423 +#: fortran/resolve.c:1614 fortran/resolve.c:8544 fortran/resolve.c:9433 #, gcc-internal-format, gfc-internal-format msgid "Label %d referenced at %L is never defined" msgstr "" -#: fortran/resolve.c:1665 +#: fortran/resolve.c:1659 #, gcc-internal-format, gfc-internal-format msgid "Statement function '%s' at %L is not allowed as an actual argument" msgstr "" -#: fortran/resolve.c:1673 +#: fortran/resolve.c:1667 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic '%s' at %L is not allowed as an actual argument" msgstr "" -#: fortran/resolve.c:1681 +#: fortran/resolve.c:1675 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Internal procedure '%s' is used as actual argument at %L" msgstr "" -#: fortran/resolve.c:1689 +#: fortran/resolve.c:1683 #, gcc-internal-format, gfc-internal-format msgid "" "ELEMENTAL non-INTRINSIC procedure '%s' is not allowed as an actual argument " "at %L" msgstr "" -#: fortran/resolve.c:1716 +#: fortran/resolve.c:1710 #, gcc-internal-format, gfc-internal-format msgid "" "Unable to find a specific INTRINSIC procedure for the reference '%s' at %L" msgstr "" -#: fortran/resolve.c:1738 +#: fortran/resolve.c:1732 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %L is ambiguous" msgstr "" -#: fortran/resolve.c:1793 +#: fortran/resolve.c:1787 #, gcc-internal-format, gfc-internal-format msgid "By-value argument at %L is not of numeric type" msgstr "" -#: fortran/resolve.c:1800 +#: fortran/resolve.c:1794 #, gcc-internal-format, gfc-internal-format msgid "By-value argument at %L cannot be an array or an array section" msgstr "" -#: fortran/resolve.c:1814 +#: fortran/resolve.c:1808 #, gcc-internal-format, gfc-internal-format msgid "By-value argument at %L is not allowed in this context" msgstr "" -#: fortran/resolve.c:1826 +#: fortran/resolve.c:1820 #, gcc-internal-format, gfc-internal-format msgid "Passing internal procedure at %L by location not allowed" msgstr "" -#: fortran/resolve.c:1837 +#: fortran/resolve.c:1831 #, gcc-internal-format, gfc-internal-format msgid "Coindexed actual argument at %L with ultimate pointer component" msgstr "" -#: fortran/resolve.c:1960 +#: fortran/resolve.c:1955 #, gcc-internal-format, gfc-internal-format msgid "" "'%s' at %L is an array and OPTIONAL; IF IT IS MISSING, it cannot be the " @@ -42256,721 +42498,731 @@ msgid "" "argument with the same rank (12.4.1.5)" msgstr "" -#: fortran/resolve.c:1999 +#: fortran/resolve.c:1994 #, gcc-internal-format, gfc-internal-format msgid "" "Actual argument at %L for INTENT(%s) dummy '%s' of ELEMENTAL subroutine '%s' " "is a scalar, but another actual argument is an array" msgstr "" -#: fortran/resolve.c:2161 +#: fortran/resolve.c:2156 #, gcc-internal-format, gfc-internal-format msgid "" "Character length mismatch in return type of function '%s' at %L (%ld/%ld)" msgstr "" -#: fortran/resolve.c:2169 +#: fortran/resolve.c:2164 #, gcc-internal-format, gfc-internal-format msgid "Return type mismatch of function '%s' at %L (%s/%s)" msgstr "" -#: fortran/resolve.c:2188 +#: fortran/resolve.c:2183 #, gcc-internal-format, gfc-internal-format msgid "" "Dummy argument '%s' of procedure '%s' at %L has an attribute that requires " "an explicit interface for this procedure" msgstr "" -#: fortran/resolve.c:2198 +#: fortran/resolve.c:2193 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure '%s' at %L with assumed-shape dummy argument '%s' must have an " "explicit interface" msgstr "" -#: fortran/resolve.c:2206 +#: fortran/resolve.c:2201 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure '%s' at %L with coarray dummy argument '%s' must have an explicit " "interface" msgstr "" -#: fortran/resolve.c:2214 +#: fortran/resolve.c:2209 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure '%s' at %L with parametrized derived type argument '%s' must have " "an explicit interface" msgstr "" -#: fortran/resolve.c:2223 +#: fortran/resolve.c:2218 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure '%s' at %L with polymorphic dummy argument '%s' must have an " "explicit interface" msgstr "" -#: fortran/resolve.c:2235 +#: fortran/resolve.c:2230 #, gcc-internal-format, gfc-internal-format msgid "" "The reference to function '%s' at %L either needs an explicit INTERFACE or " "the rank is incorrect" msgstr "" -#: fortran/resolve.c:2247 +#: fortran/resolve.c:2242 #, gcc-internal-format, gfc-internal-format msgid "" "Function '%s' at %L with a POINTER or ALLOCATABLE result must have an " "explicit interface" msgstr "" -#: fortran/resolve.c:2260 +#: fortran/resolve.c:2255 #, gcc-internal-format, gfc-internal-format msgid "" "Nonconstant character-length function '%s' at %L must have an explicit " "interface" msgstr "" -#: fortran/resolve.c:2270 +#: fortran/resolve.c:2265 #, gcc-internal-format, gfc-internal-format msgid "ELEMENTAL procedure '%s' at %L must have an explicit interface" msgstr "" -#: fortran/resolve.c:2277 +#: fortran/resolve.c:2272 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure '%s' at %L with BIND(C) attribute must have an explicit interface" msgstr "" -#: fortran/resolve.c:2383 +#: fortran/resolve.c:2378 #, gcc-internal-format, gfc-internal-format msgid "There is no specific function for the generic '%s' at %L" msgstr "" -#: fortran/resolve.c:2401 +#: fortran/resolve.c:2396 #, gcc-internal-format, gfc-internal-format msgid "" "Generic function '%s' at %L is not consistent with a specific intrinsic " "interface" msgstr "" -#: fortran/resolve.c:2439 +#: fortran/resolve.c:2434 #, gcc-internal-format, gfc-internal-format msgid "" "Function '%s' at %L is INTRINSIC but is not compatible with an intrinsic" msgstr "" -#: fortran/resolve.c:2488 +#: fortran/resolve.c:2483 #, gcc-internal-format, gfc-internal-format msgid "Unable to resolve the specific function '%s' at %L" msgstr "" -#: fortran/resolve.c:2544 fortran/resolve.c:13705 +#: fortran/resolve.c:2539 fortran/resolve.c:13741 #, gcc-internal-format, gfc-internal-format msgid "Function '%s' at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.c:2746 +#: fortran/resolve.c:2740 #, gcc-internal-format, gfc-internal-format msgid "Argument to '%s' at %L is not a variable" msgstr "" -#: fortran/resolve.c:2793 +#: fortran/resolve.c:2784 #, gcc-internal-format, gfc-internal-format msgid "More actual than formal arguments in '%s' call at %L" msgstr "" -#: fortran/resolve.c:2805 +#: fortran/resolve.c:2796 #, gcc-internal-format, gfc-internal-format msgid "" "Parameter '%s' to '%s' at %L must be either a TARGET or an associated pointer" msgstr "" -#: fortran/resolve.c:2814 +#: fortran/resolve.c:2805 #, gcc-internal-format, gfc-internal-format msgid "Coindexed argument not permitted in '%s' call at %L" msgstr "" -#: fortran/resolve.c:2837 +#: fortran/resolve.c:2828 #, gcc-internal-format, gfc-internal-format msgid "Array section not permitted in '%s' call at %L" msgstr "" -#: fortran/resolve.c:2848 +#: fortran/resolve.c:2839 #, gcc-internal-format, gfc-internal-format msgid "Array section in '%s' call at %L" msgstr "" -#: fortran/resolve.c:2867 +#: fortran/resolve.c:2858 #, gcc-internal-format, gfc-internal-format msgid "" "Allocatable variable '%s' used as a parameter to '%s' at %L must not be an " "array of zero size" msgstr "" -#: fortran/resolve.c:2884 +#: fortran/resolve.c:2875 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed-shape array '%s' at %L cannot be an argument to the procedure '%s' " "because it is not C interoperable" msgstr "" -#: fortran/resolve.c:2894 +#: fortran/resolve.c:2885 #, gcc-internal-format, gfc-internal-format msgid "" "Deferred-shape array '%s' at %L cannot be an argument to the procedure '%s' " "because it is not C interoperable" msgstr "" -#: fortran/resolve.c:2917 fortran/resolve.c:2954 +#: fortran/resolve.c:2908 fortran/resolve.c:2945 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER argument '%s' to '%s' at %L must have a length of 1" msgstr "" #. Case 1c, section 15.1.2.5, J3/04-007: an associated #. scalar pointer. -#: fortran/resolve.c:2930 +#: fortran/resolve.c:2921 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' to '%s' at %L must be an associated scalar POINTER" msgstr "" -#: fortran/resolve.c:2946 +#: fortran/resolve.c:2937 #, gcc-internal-format, gfc-internal-format msgid "Parameter '%s' to '%s' at %L must be a scalar" msgstr "" -#: fortran/resolve.c:2962 +#: fortran/resolve.c:2953 #, gcc-internal-format, gfc-internal-format msgid "Parameter '%s' to '%s' at %L must not be polymorphic" msgstr "" #. TODO: Update this error message to allow for procedure #. pointers once they are implemented. -#: fortran/resolve.c:2975 +#: fortran/resolve.c:2966 #, gcc-internal-format, gfc-internal-format msgid "Parameter '%s' to '%s' at %L must be a procedure" msgstr "" -#: fortran/resolve.c:2983 +#: fortran/resolve.c:2974 #, gcc-internal-format, gfc-internal-format msgid "Parameter '%s' to '%s' at %L must be BIND(C)" msgstr "" -#: fortran/resolve.c:3032 +#: fortran/resolve.c:3023 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L is not a function" msgstr "" -#: fortran/resolve.c:3040 fortran/resolve.c:3670 +#: fortran/resolve.c:3031 fortran/resolve.c:3662 #, gcc-internal-format, gfc-internal-format msgid "ABSTRACT INTERFACE '%s' must not be referenced at %L" msgstr "" #. Internal procedures are taken care of in resolve_contained_fntype. -#: fortran/resolve.c:3095 +#: fortran/resolve.c:3086 #, gcc-internal-format, gfc-internal-format msgid "" "Function '%s' is declared CHARACTER(*) and cannot be used at %L since it is " "not a dummy argument" msgstr "" -#: fortran/resolve.c:3148 +#: fortran/resolve.c:3139 #, gcc-internal-format, gfc-internal-format msgid "" "User defined non-ELEMENTAL function '%s' at %L not allowed in WORKSHARE " "construct" msgstr "" -#: fortran/resolve.c:3198 +#: fortran/resolve.c:3189 #, gcc-internal-format, gfc-internal-format msgid "Reference to non-PURE function '%s' at %L inside a FORALL %s" msgstr "" -#: fortran/resolve.c:3205 +#: fortran/resolve.c:3196 #, gcc-internal-format, gfc-internal-format msgid "Reference to non-PURE function '%s' at %L inside a DO CONCURRENT %s" msgstr "" -#: fortran/resolve.c:3212 +#: fortran/resolve.c:3203 #, gcc-internal-format, gfc-internal-format msgid "" "Function reference to '%s' at %L is to a non-PURE procedure within a PURE " "procedure" msgstr "" -#: fortran/resolve.c:3231 +#: fortran/resolve.c:3222 #, gcc-internal-format, gfc-internal-format msgid "" "ENTRY '%s' at %L cannot be called recursively, as function '%s' is not " "RECURSIVE" msgstr "" -#: fortran/resolve.c:3235 +#: fortran/resolve.c:3226 #, gcc-internal-format, gfc-internal-format msgid "" "Function '%s' at %L cannot be called recursively, as it is not RECURSIVE" msgstr "" -#: fortran/resolve.c:3274 +#: fortran/resolve.c:3265 #, gcc-internal-format, gfc-internal-format msgid "Subroutine call to '%s' in FORALL block at %L is not PURE" msgstr "" -#: fortran/resolve.c:3277 +#: fortran/resolve.c:3268 #, gcc-internal-format, gfc-internal-format msgid "Subroutine call to '%s' in DO CONCURRENT block at %L is not PURE" msgstr "" -#: fortran/resolve.c:3280 +#: fortran/resolve.c:3271 #, gcc-internal-format, gfc-internal-format msgid "Subroutine call to '%s' at %L is not PURE" msgstr "" -#: fortran/resolve.c:3346 +#: fortran/resolve.c:3337 #, gcc-internal-format, gfc-internal-format msgid "There is no specific subroutine for the generic '%s' at %L" msgstr "" -#: fortran/resolve.c:3355 +#: fortran/resolve.c:3346 #, gcc-internal-format, gfc-internal-format msgid "" "Generic subroutine '%s' at %L is not consistent with an intrinsic subroutine " "interface" msgstr "" -#: fortran/resolve.c:3463 +#: fortran/resolve.c:3455 #, gcc-internal-format, gfc-internal-format msgid "Missing SHAPE parameter for call to %s at %L" msgstr "" -#: fortran/resolve.c:3471 +#: fortran/resolve.c:3463 #, gcc-internal-format, gfc-internal-format msgid "SHAPE parameter for call to %s at %L must be a rank 1 INTEGER array" msgstr "" -#: fortran/resolve.c:3538 +#: fortran/resolve.c:3530 #, gcc-internal-format, gfc-internal-format msgid "" "Subroutine '%s' at %L is INTRINSIC but is not compatible with an intrinsic" msgstr "" -#: fortran/resolve.c:3582 +#: fortran/resolve.c:3574 #, gcc-internal-format, gfc-internal-format msgid "Unable to resolve the specific subroutine '%s' at %L" msgstr "" -#: fortran/resolve.c:3642 +#: fortran/resolve.c:3634 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L has a type, which is not consistent with the CALL at %L" msgstr "" -#: fortran/resolve.c:3680 +#: fortran/resolve.c:3672 #, gcc-internal-format, gfc-internal-format msgid "" "ENTRY '%s' at %L cannot be called recursively, as subroutine '%s' is not " "RECURSIVE" msgstr "" -#: fortran/resolve.c:3684 +#: fortran/resolve.c:3676 #, gcc-internal-format, gfc-internal-format msgid "" "SUBROUTINE '%s' at %L cannot be called recursively, as it is not RECURSIVE" msgstr "" -#: fortran/resolve.c:3760 +#: fortran/resolve.c:3752 #, gcc-internal-format, gfc-internal-format msgid "Shapes for operands at %L and %L are not conformable" msgstr "" -#: fortran/resolve.c:4258 +#: fortran/resolve.c:4250 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld < %ld) in dimension %d" msgstr "" -#: fortran/resolve.c:4263 +#: fortran/resolve.c:4255 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld < %ld) in codimension %d" msgstr "" -#: fortran/resolve.c:4273 +#: fortran/resolve.c:4265 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld > %ld) in dimension %d" msgstr "" -#: fortran/resolve.c:4278 +#: fortran/resolve.c:4270 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld > %ld) in codimension %d" msgstr "" -#: fortran/resolve.c:4298 +#: fortran/resolve.c:4290 #, gcc-internal-format, gfc-internal-format msgid "Illegal stride of zero at %L" msgstr "" -#: fortran/resolve.c:4315 +#: fortran/resolve.c:4307 #, gcc-internal-format, gfc-internal-format msgid "" "Lower array reference at %L is out of bounds (%ld < %ld) in dimension %d" msgstr "" -#: fortran/resolve.c:4323 +#: fortran/resolve.c:4315 #, gcc-internal-format, gfc-internal-format msgid "" "Lower array reference at %L is out of bounds (%ld > %ld) in dimension %d" msgstr "" -#: fortran/resolve.c:4339 +#: fortran/resolve.c:4331 #, gcc-internal-format, gfc-internal-format msgid "" "Upper array reference at %L is out of bounds (%ld < %ld) in dimension %d" msgstr "" -#: fortran/resolve.c:4348 +#: fortran/resolve.c:4340 #, gcc-internal-format, gfc-internal-format msgid "" "Upper array reference at %L is out of bounds (%ld > %ld) in dimension %d" msgstr "" -#: fortran/resolve.c:4387 +#: fortran/resolve.c:4379 #, gcc-internal-format, gfc-internal-format msgid "Rightmost upper bound of assumed size array section not specified at %L" msgstr "" -#: fortran/resolve.c:4397 +#: fortran/resolve.c:4389 #, gcc-internal-format, gfc-internal-format msgid "Rank mismatch in array reference at %L (%d/%d)" msgstr "" -#: fortran/resolve.c:4405 +#: fortran/resolve.c:4397 #, gcc-internal-format, gfc-internal-format msgid "Coindex rank mismatch in array reference at %L (%d/%d)" msgstr "" -#: fortran/resolve.c:4421 +#: fortran/resolve.c:4413 #, gcc-internal-format, gfc-internal-format msgid "Coindex of codimension %d must be a scalar at %L" msgstr "" -#: fortran/resolve.c:4449 +#: fortran/resolve.c:4441 #, gcc-internal-format, gfc-internal-format msgid "Array index at %L must be scalar" msgstr "" -#: fortran/resolve.c:4455 +#: fortran/resolve.c:4447 #, gcc-internal-format, gfc-internal-format msgid "Array index at %L must be of INTEGER type, found %s" msgstr "" -#: fortran/resolve.c:4461 +#: fortran/resolve.c:4453 #, gcc-internal-format, gfc-internal-format msgid "Extension: REAL array index at %L" msgstr "" -#: fortran/resolve.c:4500 +#: fortran/resolve.c:4492 #, gcc-internal-format, gfc-internal-format msgid "Argument dim at %L must be scalar" msgstr "" -#: fortran/resolve.c:4507 +#: fortran/resolve.c:4499 #, gcc-internal-format, gfc-internal-format msgid "Argument dim at %L must be of INTEGER type" msgstr "" -#: fortran/resolve.c:4617 +#: fortran/resolve.c:4609 #, gcc-internal-format, gfc-internal-format msgid "Array index at %L is an array of rank %d" msgstr "" -#: fortran/resolve.c:4715 +#: fortran/resolve.c:4707 #, gcc-internal-format, gfc-internal-format msgid "Substring start index at %L must be of type INTEGER" msgstr "" -#: fortran/resolve.c:4722 +#: fortran/resolve.c:4714 #, gcc-internal-format, gfc-internal-format msgid "Substring start index at %L must be scalar" msgstr "" -#: fortran/resolve.c:4731 +#: fortran/resolve.c:4723 #, gcc-internal-format, gfc-internal-format msgid "Substring start index at %L is less than one" msgstr "" -#: fortran/resolve.c:4744 +#: fortran/resolve.c:4736 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L must be of type INTEGER" msgstr "" -#: fortran/resolve.c:4751 +#: fortran/resolve.c:4743 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L must be scalar" msgstr "" -#: fortran/resolve.c:4761 +#: fortran/resolve.c:4753 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L exceeds the string length" msgstr "" -#: fortran/resolve.c:4771 +#: fortran/resolve.c:4763 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L is too large" msgstr "" -#: fortran/resolve.c:4917 +#: fortran/resolve.c:4909 #, gcc-internal-format, gfc-internal-format msgid "" "Component to the right of a part reference with nonzero rank must not have " "the POINTER attribute at %L" msgstr "" -#: fortran/resolve.c:4924 +#: fortran/resolve.c:4916 #, gcc-internal-format, gfc-internal-format msgid "" "Component to the right of a part reference with nonzero rank must not have " "the ALLOCATABLE attribute at %L" msgstr "" -#: fortran/resolve.c:4943 +#: fortran/resolve.c:4935 #, gcc-internal-format, gfc-internal-format msgid "" "Two or more part references with nonzero rank must not be specified at %L" msgstr "" -#: fortran/resolve.c:5148 +#: fortran/resolve.c:5068 +#, gcc-internal-format, gfc-internal-format +msgid "Invalid expression with assumed-type variable %s at %L" +msgstr "" + +#: fortran/resolve.c:5078 +#, gcc-internal-format, gfc-internal-format +msgid "Assumed-type variable %s with designator at %L" +msgstr "" + +#: fortran/resolve.c:5158 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s', used in a specification expression, is referenced at %L " "before the ENTRY statement in which it is a parameter" msgstr "" -#: fortran/resolve.c:5153 +#: fortran/resolve.c:5163 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' is used at %L before the ENTRY statement in which it is a " "parameter" msgstr "" -#: fortran/resolve.c:5217 +#: fortran/resolve.c:5227 #, gcc-internal-format, gfc-internal-format msgid "Polymorphic subobject of coindexed object at %L" msgstr "" -#: fortran/resolve.c:5230 +#: fortran/resolve.c:5240 #, gcc-internal-format, gfc-internal-format msgid "Coindexed object with polymorphic allocatable subcomponent at %L" msgstr "" -#: fortran/resolve.c:5556 +#: fortran/resolve.c:5566 #, gcc-internal-format, gfc-internal-format msgid "Passed-object at %L must be scalar" msgstr "" -#: fortran/resolve.c:5563 +#: fortran/resolve.c:5573 #, gcc-internal-format, gfc-internal-format msgid "" "Base object for procedure-pointer component call at %L is of ABSTRACT type " "'%s'" msgstr "" -#: fortran/resolve.c:5595 +#: fortran/resolve.c:5605 #, gcc-internal-format, gfc-internal-format msgid "" "Base object for type-bound procedure call at %L is of ABSTRACT type '%s'" msgstr "" -#: fortran/resolve.c:5604 +#: fortran/resolve.c:5614 #, gcc-internal-format, gfc-internal-format msgid "Base object for NOPASS type-bound procedure call at %L must be scalar" msgstr "" #. Nothing matching found! -#: fortran/resolve.c:5789 +#: fortran/resolve.c:5799 #, gcc-internal-format, gfc-internal-format msgid "" "Found no matching specific binding for the call to the GENERIC '%s' at %L" msgstr "" -#: fortran/resolve.c:5816 +#: fortran/resolve.c:5826 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L should be a SUBROUTINE" msgstr "" -#: fortran/resolve.c:5863 +#: fortran/resolve.c:5873 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L should be a FUNCTION" msgstr "" -#: fortran/resolve.c:6380 +#: fortran/resolve.c:6390 #, gcc-internal-format, gfc-internal-format msgid "%s at %L must be a scalar" msgstr "" -#: fortran/resolve.c:6390 +#: fortran/resolve.c:6400 #, gcc-internal-format, gfc-internal-format msgid "Deleted feature: %s at %L must be integer" msgstr "" -#: fortran/resolve.c:6394 fortran/resolve.c:6401 +#: fortran/resolve.c:6404 fortran/resolve.c:6411 #, gcc-internal-format, gfc-internal-format msgid "%s at %L must be INTEGER" msgstr "" -#: fortran/resolve.c:6442 +#: fortran/resolve.c:6452 #, gcc-internal-format, gfc-internal-format msgid "Step expression in DO loop at %L cannot be zero" msgstr "" -#: fortran/resolve.c:6477 +#: fortran/resolve.c:6487 #, gcc-internal-format, gfc-internal-format msgid "DO loop at %L will be executed zero times" msgstr "" -#: fortran/resolve.c:6538 +#: fortran/resolve.c:6548 #, gcc-internal-format, gfc-internal-format msgid "FORALL index-name at %L must be a scalar INTEGER" msgstr "" -#: fortran/resolve.c:6543 +#: fortran/resolve.c:6553 #, gcc-internal-format, gfc-internal-format msgid "FORALL start expression at %L must be a scalar INTEGER" msgstr "" -#: fortran/resolve.c:6550 +#: fortran/resolve.c:6560 #, gcc-internal-format, gfc-internal-format msgid "FORALL end expression at %L must be a scalar INTEGER" msgstr "" -#: fortran/resolve.c:6558 +#: fortran/resolve.c:6568 #, gcc-internal-format, gfc-internal-format msgid "FORALL stride expression at %L must be a scalar %s" msgstr "" -#: fortran/resolve.c:6563 +#: fortran/resolve.c:6573 #, gcc-internal-format, gfc-internal-format msgid "FORALL stride expression at %L cannot be zero" msgstr "" -#: fortran/resolve.c:6579 +#: fortran/resolve.c:6589 #, gcc-internal-format, gfc-internal-format msgid "FORALL index '%s' may not appear in triplet specification at %L" msgstr "" -#: fortran/resolve.c:6675 fortran/resolve.c:6958 +#: fortran/resolve.c:6685 fortran/resolve.c:6968 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %L must be ALLOCATABLE or a POINTER" msgstr "" -#: fortran/resolve.c:6683 fortran/resolve.c:6924 +#: fortran/resolve.c:6693 fortran/resolve.c:6934 #, gcc-internal-format, gfc-internal-format msgid "Coindexed allocatable object at %L" msgstr "" -#: fortran/resolve.c:6788 +#: fortran/resolve.c:6798 #, gcc-internal-format, gfc-internal-format msgid "" "Source-expr at %L must be scalar or have the same rank as the allocate-" "object at %L" msgstr "" -#: fortran/resolve.c:6816 +#: fortran/resolve.c:6826 #, gcc-internal-format, gfc-internal-format msgid "Source-expr at %L and allocate-object at %L must have the same shape" msgstr "" -#: fortran/resolve.c:6969 +#: fortran/resolve.c:6979 #, gcc-internal-format, gfc-internal-format msgid "Type of entity at %L is type incompatible with source-expr at %L" msgstr "" -#: fortran/resolve.c:6982 +#: fortran/resolve.c:6992 #, gcc-internal-format, gfc-internal-format msgid "" "The allocate-object at %L and the source-expr at %L shall have the same kind " "type parameter" msgstr "" -#: fortran/resolve.c:6996 +#: fortran/resolve.c:7006 #, gcc-internal-format, gfc-internal-format msgid "" "The source-expr at %L shall neither be of type LOCK_TYPE nor have a " "LOCK_TYPE component if allocate-object at %L is a coarray" msgstr "" -#: fortran/resolve.c:7009 +#: fortran/resolve.c:7019 #, gcc-internal-format, gfc-internal-format msgid "" "Allocating %s of ABSTRACT base type at %L requires a type-spec or source-expr" msgstr "" -#: fortran/resolve.c:7020 +#: fortran/resolve.c:7030 #, gcc-internal-format, gfc-internal-format msgid "" "Allocating %s at %L with type-spec requires the same character-length " "parameter as in the declaration" msgstr "" -#: fortran/resolve.c:7105 +#: fortran/resolve.c:7115 #, gcc-internal-format, gfc-internal-format msgid "Array specification required in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.c:7119 +#: fortran/resolve.c:7129 #, gcc-internal-format, gfc-internal-format msgid "Coarray specification required in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.c:7146 +#: fortran/resolve.c:7156 #, gcc-internal-format, gfc-internal-format msgid "Bad array specification in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.c:7165 +#: fortran/resolve.c:7175 #, gcc-internal-format, gfc-internal-format msgid "" "'%s' must not appear in the array specification at %L in the same ALLOCATE " "statement where it is itself allocated" msgstr "" -#: fortran/resolve.c:7180 +#: fortran/resolve.c:7190 #, gcc-internal-format, gfc-internal-format msgid "Expected '*' in coindex specification in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.c:7191 +#: fortran/resolve.c:7201 #, gcc-internal-format, gfc-internal-format msgid "Bad coarray specification in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.c:7221 +#: fortran/resolve.c:7231 #, gcc-internal-format, gfc-internal-format msgid "Stat-variable at %L must be a scalar INTEGER variable" msgstr "" -#: fortran/resolve.c:7244 +#: fortran/resolve.c:7254 #, gcc-internal-format, gfc-internal-format msgid "Stat-variable at %L shall not be %sd within the same %s statement" msgstr "" -#: fortran/resolve.c:7255 +#: fortran/resolve.c:7265 #, gcc-internal-format, gfc-internal-format msgid "ERRMSG at %L is useless without a STAT tag" msgstr "" -#: fortran/resolve.c:7265 +#: fortran/resolve.c:7275 #, gcc-internal-format, gfc-internal-format msgid "Errmsg-variable at %L must be a scalar CHARACTER variable" msgstr "" -#: fortran/resolve.c:7288 +#: fortran/resolve.c:7298 #, gcc-internal-format, gfc-internal-format msgid "Errmsg-variable at %L shall not be %sd within the same %s statement" msgstr "" -#: fortran/resolve.c:7318 +#: fortran/resolve.c:7328 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %L also appears at %L" msgstr "" -#: fortran/resolve.c:7324 fortran/resolve.c:7330 +#: fortran/resolve.c:7334 fortran/resolve.c:7340 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %L is subobject of object at %L" msgstr "" @@ -42979,188 +43231,188 @@ msgstr "" #. element in the list. Either way, we must #. issue an error and get the next case from P. #. FIXME: Sort P and Q by line number. -#: fortran/resolve.c:7525 +#: fortran/resolve.c:7535 #, gcc-internal-format, gfc-internal-format msgid "CASE label at %L overlaps with CASE label at %L" msgstr "" -#: fortran/resolve.c:7576 +#: fortran/resolve.c:7586 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L must be of type %s" msgstr "" -#: fortran/resolve.c:7587 +#: fortran/resolve.c:7597 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L must be of kind %d" msgstr "" -#: fortran/resolve.c:7600 +#: fortran/resolve.c:7610 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L must be scalar" msgstr "" -#: fortran/resolve.c:7646 +#: fortran/resolve.c:7656 #, gcc-internal-format, gfc-internal-format msgid "" "Selection expression in computed GOTO statement at %L must be a scalar " "integer expression" msgstr "" -#: fortran/resolve.c:7664 +#: fortran/resolve.c:7674 #, gcc-internal-format, gfc-internal-format msgid "Argument of SELECT statement at %L cannot be %s" msgstr "" -#: fortran/resolve.c:7682 fortran/resolve.c:7690 +#: fortran/resolve.c:7692 fortran/resolve.c:7700 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L is not in the range of %s" msgstr "" -#: fortran/resolve.c:7752 fortran/resolve.c:8062 +#: fortran/resolve.c:7762 fortran/resolve.c:8072 #, gcc-internal-format, gfc-internal-format msgid "" "The DEFAULT CASE at %L cannot be followed by a second DEFAULT CASE at %L" msgstr "" -#: fortran/resolve.c:7778 +#: fortran/resolve.c:7788 #, gcc-internal-format, gfc-internal-format msgid "Logical range in CASE statement at %L is not allowed" msgstr "" -#: fortran/resolve.c:7790 +#: fortran/resolve.c:7800 #, gcc-internal-format, gfc-internal-format msgid "Constant logical value in CASE statement is repeated at %L" msgstr "" -#: fortran/resolve.c:7804 +#: fortran/resolve.c:7814 #, gcc-internal-format, gfc-internal-format msgid "Range specification at %L can never be matched" msgstr "" -#: fortran/resolve.c:7907 +#: fortran/resolve.c:7917 #, gcc-internal-format, gfc-internal-format msgid "Logical SELECT CASE block at %L has more that two cases" msgstr "" -#: fortran/resolve.c:7972 +#: fortran/resolve.c:7982 #, gcc-internal-format, gfc-internal-format msgid "Associate-name '%s' at %L is used as array" msgstr "" -#: fortran/resolve.c:8014 +#: fortran/resolve.c:8024 #, gcc-internal-format, gfc-internal-format msgid "Selector shall be polymorphic in SELECT TYPE statement at %L" msgstr "" -#: fortran/resolve.c:8040 +#: fortran/resolve.c:8050 #, gcc-internal-format, gfc-internal-format msgid "Derived type '%s' at %L must be extensible" msgstr "" -#: fortran/resolve.c:8050 +#: fortran/resolve.c:8060 #, gcc-internal-format, gfc-internal-format msgid "Derived type '%s' at %L must be an extension of '%s'" msgstr "" -#: fortran/resolve.c:8222 +#: fortran/resolve.c:8232 #, gcc-internal-format, gfc-internal-format msgid "Double CLASS IS block in SELECT TYPE statement at %L" msgstr "" -#: fortran/resolve.c:8313 +#: fortran/resolve.c:8323 #, gcc-internal-format, gfc-internal-format msgid "NULL intrinsic at %L in data transfer statement requires MOLD=" msgstr "" #. FIXME: Test for defined input/output. -#: fortran/resolve.c:8341 +#: fortran/resolve.c:8351 #, gcc-internal-format, gfc-internal-format msgid "" "Data transfer element at %L cannot be polymorphic unless it is processed by " "a defined input/output procedure" msgstr "" -#: fortran/resolve.c:8353 +#: fortran/resolve.c:8363 #, gcc-internal-format, gfc-internal-format msgid "" "Data transfer element at %L cannot have POINTER components unless it is " "processed by a defined input/output procedure" msgstr "" -#: fortran/resolve.c:8362 +#: fortran/resolve.c:8372 #, gcc-internal-format, gfc-internal-format msgid "Data transfer element at %L cannot have procedure pointer components" msgstr "" -#: fortran/resolve.c:8369 +#: fortran/resolve.c:8379 #, gcc-internal-format, gfc-internal-format msgid "" "Data transfer element at %L cannot have ALLOCATABLE components unless it is " "processed by a defined input/output procedure" msgstr "" -#: fortran/resolve.c:8377 +#: fortran/resolve.c:8387 #, gcc-internal-format, gfc-internal-format msgid "Data transfer element at %L cannot have PRIVATE components" msgstr "" -#: fortran/resolve.c:8386 +#: fortran/resolve.c:8396 #, gcc-internal-format, gfc-internal-format msgid "" "Data transfer element at %L cannot be a full reference to an assumed-size " "array" msgstr "" -#: fortran/resolve.c:8436 +#: fortran/resolve.c:8446 #, gcc-internal-format, gfc-internal-format msgid "Lock variable at %L must be a scalar of type LOCK_TYPE" msgstr "" -#: fortran/resolve.c:8443 fortran/resolve.c:8507 +#: fortran/resolve.c:8453 fortran/resolve.c:8517 #, gcc-internal-format, gfc-internal-format msgid "STAT= argument at %L must be a scalar INTEGER variable" msgstr "" -#: fortran/resolve.c:8455 fortran/resolve.c:8514 +#: fortran/resolve.c:8465 fortran/resolve.c:8524 #, gcc-internal-format, gfc-internal-format msgid "ERRMSG= argument at %L must be a scalar CHARACTER variable" msgstr "" -#: fortran/resolve.c:8467 +#: fortran/resolve.c:8477 #, gcc-internal-format, gfc-internal-format msgid "ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL variable" msgstr "" -#: fortran/resolve.c:8484 +#: fortran/resolve.c:8494 #, gcc-internal-format, gfc-internal-format msgid "Imageset argument at %L must be a scalar or rank-1 INTEGER expression" msgstr "" -#: fortran/resolve.c:8488 fortran/resolve.c:8498 +#: fortran/resolve.c:8498 fortran/resolve.c:8508 #, gcc-internal-format, gfc-internal-format msgid "Imageset argument at %L must between 1 and num_images()" msgstr "" -#: fortran/resolve.c:8541 +#: fortran/resolve.c:8551 #, gcc-internal-format, gfc-internal-format msgid "" "Statement at %L is not a valid branch target statement for the branch " "statement at %L" msgstr "" -#: fortran/resolve.c:8550 +#: fortran/resolve.c:8560 #, gcc-internal-format, gfc-internal-format msgid "Branch at %L may result in an infinite loop" msgstr "" #. Note: A label at END CRITICAL does not leave the CRITICAL #. construct as END CRITICAL is still part of it. -#: fortran/resolve.c:8567 fortran/resolve.c:8590 +#: fortran/resolve.c:8577 fortran/resolve.c:8600 #, gcc-internal-format, gfc-internal-format msgid "GOTO statement at %L leaves CRITICAL construct for label at %L" msgstr "" -#: fortran/resolve.c:8571 fortran/resolve.c:8596 +#: fortran/resolve.c:8581 fortran/resolve.c:8606 #, gcc-internal-format, gfc-internal-format msgid "GOTO statement at %L leaves DO CONCURRENT construct for label at %L" msgstr "" @@ -43168,129 +43420,129 @@ msgstr "" #. The label is not in an enclosing block, so illegal. This was #. allowed in Fortran 66, so we allow it as extension. No #. further checks are necessary in this case. -#: fortran/resolve.c:8611 +#: fortran/resolve.c:8621 #, gcc-internal-format, gfc-internal-format msgid "Label at %L is not in the same block as the GOTO statement at %L" msgstr "" -#: fortran/resolve.c:8683 +#: fortran/resolve.c:8693 #, gcc-internal-format, gfc-internal-format msgid "WHERE mask at %L has inconsistent shape" msgstr "" -#: fortran/resolve.c:8699 +#: fortran/resolve.c:8709 #, gcc-internal-format, gfc-internal-format msgid "WHERE assignment target at %L has inconsistent shape" msgstr "" -#: fortran/resolve.c:8707 fortran/resolve.c:8794 +#: fortran/resolve.c:8717 fortran/resolve.c:8804 #, gcc-internal-format, gfc-internal-format msgid "Non-ELEMENTAL user-defined assignment in WHERE at %L" msgstr "" -#: fortran/resolve.c:8717 fortran/resolve.c:8804 +#: fortran/resolve.c:8727 fortran/resolve.c:8814 #, gcc-internal-format, gfc-internal-format msgid "Unsupported statement inside WHERE at %L" msgstr "" -#: fortran/resolve.c:8748 +#: fortran/resolve.c:8758 #, gcc-internal-format, gfc-internal-format msgid "Assignment to a FORALL index variable at %L" msgstr "" -#: fortran/resolve.c:8757 +#: fortran/resolve.c:8767 #, gcc-internal-format, gfc-internal-format msgid "" "The FORALL with index '%s' is not used on the left side of the assignment at " "%L and so might cause multiple assignment to this object" msgstr "" -#: fortran/resolve.c:8926 +#: fortran/resolve.c:8936 #, gcc-internal-format, gfc-internal-format msgid "An outer FORALL construct already has an index with this name %L" msgstr "" -#: fortran/resolve.c:9006 +#: fortran/resolve.c:9016 #, gcc-internal-format, gfc-internal-format msgid "WHERE/ELSEWHERE clause at %L requires a LOGICAL array" msgstr "" -#: fortran/resolve.c:9160 +#: fortran/resolve.c:9170 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER expression will be truncated in assignment (%d/%d) at %L" msgstr "" -#: fortran/resolve.c:9192 +#: fortran/resolve.c:9202 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed expression at %L is assigned to a derived type variable with a " "POINTER component in a PURE procedure" msgstr "" -#: fortran/resolve.c:9197 +#: fortran/resolve.c:9207 #, gcc-internal-format, gfc-internal-format msgid "" "The impure variable at %L is assigned to a derived type variable with a " "POINTER component in a PURE procedure (12.6)" msgstr "" -#: fortran/resolve.c:9207 +#: fortran/resolve.c:9217 #, gcc-internal-format, gfc-internal-format msgid "Assignment to coindexed variable at %L in a PURE procedure" msgstr "" -#: fortran/resolve.c:9238 +#: fortran/resolve.c:9248 #, gcc-internal-format, gfc-internal-format msgid "" "Variable must not be polymorphic in intrinsic assignment at %L - check that " "there is a matching specific subroutine for '=' operator" msgstr "" -#: fortran/resolve.c:9247 +#: fortran/resolve.c:9257 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed variable must not be have an allocatable ultimate component in " "assignment at %L" msgstr "" -#: fortran/resolve.c:9382 +#: fortran/resolve.c:9392 #, gcc-internal-format, gfc-internal-format msgid "ASSIGNED GOTO statement at %L requires an INTEGER variable" msgstr "" -#: fortran/resolve.c:9385 +#: fortran/resolve.c:9395 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' has not been assigned a target label at %L" msgstr "" -#: fortran/resolve.c:9396 +#: fortran/resolve.c:9406 #, gcc-internal-format, gfc-internal-format msgid "" "Alternate RETURN statement at %L requires a SCALAR-INTEGER return specifier" msgstr "" -#: fortran/resolve.c:9431 +#: fortran/resolve.c:9441 #, gcc-internal-format, gfc-internal-format msgid "ASSIGN statement at %L requires a scalar default INTEGER variable" msgstr "" -#: fortran/resolve.c:9464 +#: fortran/resolve.c:9474 #, gcc-internal-format, gfc-internal-format msgid "Arithmetic IF statement at %L requires a numeric expression" msgstr "" -#: fortran/resolve.c:9523 +#: fortran/resolve.c:9533 #, gcc-internal-format, gfc-internal-format msgid "" "Exit condition of DO WHILE loop at %L must be a scalar LOGICAL expression" msgstr "" -#: fortran/resolve.c:9607 +#: fortran/resolve.c:9617 #, gcc-internal-format, gfc-internal-format msgid "FORALL mask clause at %L requires a scalar LOGICAL expression" msgstr "" -#: fortran/resolve.c:9687 fortran/resolve.c:9743 +#: fortran/resolve.c:9699 fortran/resolve.c:9752 #, gcc-internal-format, gfc-internal-format msgid "" "Binding label '%s' for common block '%s' at %L collides with the global " @@ -43298,14 +43550,14 @@ msgid "" msgstr "" #. Common block names match but binding labels do not. -#: fortran/resolve.c:9708 +#: fortran/resolve.c:9717 #, gcc-internal-format, gfc-internal-format msgid "" "Binding label '%s' for common block '%s' at %L does not match the binding " "label '%s' for common block '%s' at %L" msgstr "" -#: fortran/resolve.c:9755 +#: fortran/resolve.c:9764 #, gcc-internal-format, gfc-internal-format msgid "" "Binding label '%s' for common block '%s' at %L collides with global entity " @@ -43313,74 +43565,74 @@ msgid "" msgstr "" #. Make sure global procedures don't collide with anything. -#: fortran/resolve.c:9807 +#: fortran/resolve.c:9816 #, gcc-internal-format, gfc-internal-format msgid "Binding label '%s' at %L collides with the global entity '%s' at %L" msgstr "" #. Make sure procedures in interface bodies don't collide. -#: fortran/resolve.c:9820 +#: fortran/resolve.c:9829 #, gcc-internal-format, gfc-internal-format msgid "" "Binding label '%s' in interface body at %L collides with the global entity " "'%s' at %L" msgstr "" -#: fortran/resolve.c:9833 +#: fortran/resolve.c:9842 #, gcc-internal-format, gfc-internal-format msgid "Binding label '%s' at %L collides with global entity '%s' at %L" msgstr "" -#: fortran/resolve.c:9912 +#: fortran/resolve.c:9921 #, gcc-internal-format, gfc-internal-format msgid "" "CHARACTER variable at %L has negative length %d, the length has been set to " "zero" msgstr "" -#: fortran/resolve.c:9925 +#: fortran/resolve.c:9934 #, gcc-internal-format, gfc-internal-format msgid "String length at %L is too large" msgstr "" -#: fortran/resolve.c:10262 +#: fortran/resolve.c:10271 #, gcc-internal-format, gfc-internal-format msgid "Allocatable array '%s' at %L must have a deferred shape" msgstr "" -#: fortran/resolve.c:10266 +#: fortran/resolve.c:10275 #, gcc-internal-format, gfc-internal-format msgid "Scalar object '%s' at %L may not be ALLOCATABLE" msgstr "" -#: fortran/resolve.c:10274 +#: fortran/resolve.c:10283 #, gcc-internal-format, gfc-internal-format msgid "Array pointer '%s' at %L must have a deferred shape" msgstr "" -#: fortran/resolve.c:10284 +#: fortran/resolve.c:10293 #, gcc-internal-format, gfc-internal-format msgid "Array '%s' at %L cannot have a deferred shape" msgstr "" -#: fortran/resolve.c:10297 +#: fortran/resolve.c:10306 #, gcc-internal-format, gfc-internal-format msgid "Type '%s' of CLASS variable '%s' at %L is not extensible" msgstr "" -#: fortran/resolve.c:10309 +#: fortran/resolve.c:10318 #, gcc-internal-format, gfc-internal-format msgid "CLASS variable '%s' at %L must be dummy, allocatable or pointer" msgstr "" -#: fortran/resolve.c:10340 +#: fortran/resolve.c:10349 #, gcc-internal-format, gfc-internal-format msgid "" "The type '%s' cannot be host associated at %L because it is blocked by an " "incompatible object of the same name declared at %L" msgstr "" -#: fortran/resolve.c:10362 +#: fortran/resolve.c:10371 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2008: Implied SAVE for module variable '%s' at %L, needed due to the " @@ -43389,202 +43641,202 @@ msgstr "" #. The shape of a main program or module array needs to be #. constant. -#: fortran/resolve.c:10409 +#: fortran/resolve.c:10418 #, gcc-internal-format, gfc-internal-format msgid "The module or main program array '%s' at %L must have constant shape" msgstr "" -#: fortran/resolve.c:10418 +#: fortran/resolve.c:10427 #, gcc-internal-format, gfc-internal-format msgid "" "Entity '%s' at %L has a deferred type parameter and requires either the " "pointer or allocatable attribute" msgstr "" -#: fortran/resolve.c:10432 +#: fortran/resolve.c:10441 #, gcc-internal-format, gfc-internal-format msgid "" "Entity with assumed character length at %L must be a dummy argument or a " "PARAMETER" msgstr "" -#: fortran/resolve.c:10451 +#: fortran/resolve.c:10460 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L must have constant character length in this context" msgstr "" -#: fortran/resolve.c:10457 +#: fortran/resolve.c:10466 #, gcc-internal-format, gfc-internal-format msgid "COMMON variable '%s' at %L must have constant character length" msgstr "" -#: fortran/resolve.c:10502 +#: fortran/resolve.c:10511 #, gcc-internal-format, gfc-internal-format msgid "Allocatable '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:10505 +#: fortran/resolve.c:10514 #, gcc-internal-format, gfc-internal-format msgid "External '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:10509 +#: fortran/resolve.c:10518 #, gcc-internal-format, gfc-internal-format msgid "Dummy '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:10512 +#: fortran/resolve.c:10521 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:10515 +#: fortran/resolve.c:10524 #, gcc-internal-format, gfc-internal-format msgid "Function result '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:10518 +#: fortran/resolve.c:10527 #, gcc-internal-format, gfc-internal-format msgid "Automatic array '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:10555 +#: fortran/resolve.c:10564 #, gcc-internal-format, gfc-internal-format msgid "" "Character-valued statement function '%s' at %L must have constant length" msgstr "" -#: fortran/resolve.c:10577 +#: fortran/resolve.c:10586 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2003: '%s' is of a PRIVATE type and cannot be a dummy argument of " "'%s', which is PUBLIC at %L" msgstr "" -#: fortran/resolve.c:10599 fortran/resolve.c:10623 +#: fortran/resolve.c:10608 fortran/resolve.c:10632 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2003: Procedure '%s' in PUBLIC interface '%s' at %L takes dummy " "arguments of '%s' which is PRIVATE" msgstr "" -#: fortran/resolve.c:10641 +#: fortran/resolve.c:10650 #, gcc-internal-format, gfc-internal-format msgid "Function '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:10650 +#: fortran/resolve.c:10659 #, gcc-internal-format, gfc-internal-format msgid "External object '%s' at %L may not have an initializer" msgstr "" -#: fortran/resolve.c:10658 +#: fortran/resolve.c:10667 #, gcc-internal-format, gfc-internal-format msgid "ELEMENTAL function '%s' at %L must have a scalar result" msgstr "" -#: fortran/resolve.c:10668 +#: fortran/resolve.c:10677 #, gcc-internal-format, gfc-internal-format msgid "" "Statement function '%s' at %L may not have pointer or allocatable attribute" msgstr "" -#: fortran/resolve.c:10687 +#: fortran/resolve.c:10696 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER(*) function '%s' at %L cannot be array-valued" msgstr "" -#: fortran/resolve.c:10691 +#: fortran/resolve.c:10700 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER(*) function '%s' at %L cannot be pointer-valued" msgstr "" -#: fortran/resolve.c:10695 +#: fortran/resolve.c:10704 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER(*) function '%s' at %L cannot be pure" msgstr "" -#: fortran/resolve.c:10699 +#: fortran/resolve.c:10708 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER(*) function '%s' at %L cannot be recursive" msgstr "" -#: fortran/resolve.c:10711 +#: fortran/resolve.c:10720 #, gcc-internal-format, gfc-internal-format msgid "Obsolescent feature: CHARACTER(*) function '%s' at %L" msgstr "" -#: fortran/resolve.c:10766 +#: fortran/resolve.c:10775 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE attribute conflicts with SAVE attribute in '%s' at %L" msgstr "" -#: fortran/resolve.c:10772 +#: fortran/resolve.c:10781 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE attribute conflicts with INTENT attribute in '%s' at %L" msgstr "" -#: fortran/resolve.c:10778 +#: fortran/resolve.c:10787 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE attribute conflicts with RESULT attribute in '%s' at %L" msgstr "" -#: fortran/resolve.c:10786 +#: fortran/resolve.c:10795 #, gcc-internal-format, gfc-internal-format msgid "EXTERNAL attribute conflicts with FUNCTION attribute in '%s' at %L" msgstr "" -#: fortran/resolve.c:10792 +#: fortran/resolve.c:10801 #, gcc-internal-format, gfc-internal-format msgid "Procedure pointer result '%s' at %L is missing the pointer attribute" msgstr "" -#: fortran/resolve.c:10838 +#: fortran/resolve.c:10847 #, gcc-internal-format, gfc-internal-format msgid "FINAL procedure '%s' at %L is not a SUBROUTINE" msgstr "" -#: fortran/resolve.c:10846 +#: fortran/resolve.c:10855 #, gcc-internal-format, gfc-internal-format msgid "FINAL procedure at %L must have exactly one argument" msgstr "" -#: fortran/resolve.c:10855 +#: fortran/resolve.c:10864 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must be of type '%s'" msgstr "" -#: fortran/resolve.c:10863 +#: fortran/resolve.c:10872 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be a POINTER" msgstr "" -#: fortran/resolve.c:10869 +#: fortran/resolve.c:10878 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be ALLOCATABLE" msgstr "" -#: fortran/resolve.c:10875 +#: fortran/resolve.c:10884 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be OPTIONAL" msgstr "" -#: fortran/resolve.c:10883 +#: fortran/resolve.c:10892 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be INTENT(OUT)" msgstr "" -#: fortran/resolve.c:10891 +#: fortran/resolve.c:10900 #, gcc-internal-format, gfc-internal-format msgid "Non-scalar FINAL procedure at %L should have assumed shape argument" msgstr "" -#: fortran/resolve.c:10910 +#: fortran/resolve.c:10919 #, gcc-internal-format, gfc-internal-format msgid "FINAL procedure '%s' declared at %L has the same rank (%d) as '%s'" msgstr "" -#: fortran/resolve.c:10943 +#: fortran/resolve.c:10952 #, gcc-internal-format, gfc-internal-format msgid "" "Only array FINAL procedures declared for derived type '%s' defined at %L, " @@ -43592,283 +43844,283 @@ msgid "" msgstr "" #. TODO: Remove this error when finalization is finished. -#: fortran/resolve.c:10948 +#: fortran/resolve.c:10957 #, gcc-internal-format, gfc-internal-format msgid "Finalization at %L is not yet implemented" msgstr "" -#: fortran/resolve.c:10978 +#: fortran/resolve.c:10988 #, gcc-internal-format, gfc-internal-format msgid "'%s' and '%s' can't be mixed FUNCTION/SUBROUTINE for GENERIC '%s' at %L" msgstr "" -#: fortran/resolve.c:10987 +#: fortran/resolve.c:10998 #, gcc-internal-format, gfc-internal-format msgid "'%s' and '%s' for GENERIC '%s' at %L are ambiguous" msgstr "" -#: fortran/resolve.c:11046 +#: fortran/resolve.c:11057 #, gcc-internal-format, gfc-internal-format msgid "Undefined specific binding '%s' as target of GENERIC '%s' at %L" msgstr "" -#: fortran/resolve.c:11058 +#: fortran/resolve.c:11069 #, gcc-internal-format, gfc-internal-format msgid "GENERIC '%s' at %L must target a specific binding, '%s' is GENERIC, too" msgstr "" -#: fortran/resolve.c:11088 +#: fortran/resolve.c:11099 #, gcc-internal-format, gfc-internal-format msgid "GENERIC '%s' at %L can't overwrite specific binding with the same name" msgstr "" -#: fortran/resolve.c:11144 +#: fortran/resolve.c:11155 #, gcc-internal-format, gfc-internal-format msgid "Type-bound operator at %L can't be NOPASS" msgstr "" -#: fortran/resolve.c:11307 +#: fortran/resolve.c:11318 #, gcc-internal-format, gfc-internal-format msgid "" "'%s' must be a module procedure or an external procedure with an explicit " "interface at %L" msgstr "" -#: fortran/resolve.c:11344 +#: fortran/resolve.c:11355 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' with PASS(%s) at %L has no argument '%s'" msgstr "" -#: fortran/resolve.c:11358 +#: fortran/resolve.c:11369 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' with PASS at %L must have at least one argument" msgstr "" -#: fortran/resolve.c:11372 fortran/resolve.c:11835 +#: fortran/resolve.c:11383 fortran/resolve.c:11846 #, gcc-internal-format, gfc-internal-format msgid "Non-polymorphic passed-object dummy argument of '%s' at %L" msgstr "" -#: fortran/resolve.c:11380 +#: fortran/resolve.c:11391 #, gcc-internal-format, gfc-internal-format msgid "" "Argument '%s' of '%s' with PASS(%s) at %L must be of the derived-type '%s'" msgstr "" -#: fortran/resolve.c:11389 +#: fortran/resolve.c:11400 #, gcc-internal-format, gfc-internal-format msgid "Passed-object dummy argument of '%s' at %L must be scalar" msgstr "" -#: fortran/resolve.c:11395 +#: fortran/resolve.c:11406 #, gcc-internal-format, gfc-internal-format msgid "Passed-object dummy argument of '%s' at %L must not be ALLOCATABLE" msgstr "" -#: fortran/resolve.c:11401 +#: fortran/resolve.c:11412 #, gcc-internal-format, gfc-internal-format msgid "Passed-object dummy argument of '%s' at %L must not be POINTER" msgstr "" -#: fortran/resolve.c:11430 +#: fortran/resolve.c:11441 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %L has the same name as a component of '%s'" msgstr "" -#: fortran/resolve.c:11439 +#: fortran/resolve.c:11450 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure '%s' at %L has the same name as an inherited component of '%s'" msgstr "" -#: fortran/resolve.c:11534 +#: fortran/resolve.c:11545 #, gcc-internal-format, gfc-internal-format msgid "" "Derived-type '%s' declared at %L must be ABSTRACT because '%s' is DEFERRED " "and not overridden" msgstr "" -#: fortran/resolve.c:11592 +#: fortran/resolve.c:11603 #, gcc-internal-format, gfc-internal-format msgid "" "As extending type '%s' at %L has a coarray component, parent type '%s' shall " "also have one" msgstr "" -#: fortran/resolve.c:11605 +#: fortran/resolve.c:11616 #, gcc-internal-format, gfc-internal-format msgid "Non-extensible derived-type '%s' at %L must not be ABSTRACT" msgstr "" -#: fortran/resolve.c:11618 +#: fortran/resolve.c:11629 #, gcc-internal-format, gfc-internal-format msgid "Deferred-length character component '%s' at %L is not yet supported" msgstr "" -#: fortran/resolve.c:11628 +#: fortran/resolve.c:11639 #, gcc-internal-format, gfc-internal-format msgid "Coarray component '%s' at %L must be allocatable with deferred shape" msgstr "" -#: fortran/resolve.c:11637 +#: fortran/resolve.c:11648 #, gcc-internal-format, gfc-internal-format msgid "" "Component '%s' at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) shall not be a coarray" msgstr "" -#: fortran/resolve.c:11647 +#: fortran/resolve.c:11658 #, gcc-internal-format, gfc-internal-format msgid "" "Component '%s' at %L with coarray component shall be a nonpointer, " "nonallocatable scalar" msgstr "" -#: fortran/resolve.c:11656 +#: fortran/resolve.c:11667 #, gcc-internal-format, gfc-internal-format msgid "" "Component '%s' at %L has the CONTIGUOUS attribute but is not an array pointer" msgstr "" -#: fortran/resolve.c:11664 +#: fortran/resolve.c:11675 #, gcc-internal-format, gfc-internal-format msgid "" "Interface '%s', used by procedure pointer component '%s' at %L, is declared " "in a later PROCEDURE statement" msgstr "" -#: fortran/resolve.c:11729 +#: fortran/resolve.c:11740 #, gcc-internal-format, gfc-internal-format msgid "" "Interface '%s' of procedure pointer component '%s' at %L must be explicit" msgstr "" -#: fortran/resolve.c:11769 +#: fortran/resolve.c:11780 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure pointer component '%s' with PASS(%s) at %L has no argument '%s'" msgstr "" -#: fortran/resolve.c:11783 +#: fortran/resolve.c:11794 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure pointer component '%s' with PASS at %L must have at least one " "argument" msgstr "" -#: fortran/resolve.c:11799 +#: fortran/resolve.c:11810 #, gcc-internal-format, gfc-internal-format msgid "" "Argument '%s' of '%s' with PASS(%s) at %L must be of the derived type '%s'" msgstr "" -#: fortran/resolve.c:11809 +#: fortran/resolve.c:11820 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of '%s' with PASS(%s) at %L must be scalar" msgstr "" -#: fortran/resolve.c:11818 +#: fortran/resolve.c:11829 #, gcc-internal-format, gfc-internal-format msgid "" "Argument '%s' of '%s' with PASS(%s) at %L may not have the POINTER attribute" msgstr "" -#: fortran/resolve.c:11827 +#: fortran/resolve.c:11838 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of '%s' with PASS(%s) at %L may not be ALLOCATABLE" msgstr "" -#: fortran/resolve.c:11864 +#: fortran/resolve.c:11875 #, gcc-internal-format, gfc-internal-format msgid "" "Component '%s' of '%s' at %L has the same name as an inherited type-bound " "procedure" msgstr "" -#: fortran/resolve.c:11877 +#: fortran/resolve.c:11888 #, gcc-internal-format, gfc-internal-format msgid "" "Character length of component '%s' needs to be a constant specification " "expression at %L" msgstr "" -#: fortran/resolve.c:11888 +#: fortran/resolve.c:11899 #, gcc-internal-format, gfc-internal-format msgid "" "Character component '%s' of '%s' at %L with deferred length must be a " "POINTER or ALLOCATABLE" msgstr "" -#: fortran/resolve.c:11900 +#: fortran/resolve.c:11911 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2003: the component '%s' is a PRIVATE type and cannot be a component " "of '%s', which is PUBLIC at %L" msgstr "" -#: fortran/resolve.c:11908 +#: fortran/resolve.c:11919 #, gcc-internal-format, gfc-internal-format msgid "Polymorphic component %s at %L in SEQUENCE or BIND(C) type %s" msgstr "" -#: fortran/resolve.c:11917 +#: fortran/resolve.c:11928 #, gcc-internal-format, gfc-internal-format msgid "" "Component %s of SEQUENCE type declared at %L does not have the SEQUENCE " "attribute" msgstr "" -#: fortran/resolve.c:11935 fortran/resolve.c:11946 +#: fortran/resolve.c:11946 fortran/resolve.c:11957 #, gcc-internal-format, gfc-internal-format msgid "" "The pointer component '%s' of '%s' at %L is a type that has not been declared" msgstr "" -#: fortran/resolve.c:11958 +#: fortran/resolve.c:11969 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' with CLASS at %L must be allocatable or pointer" msgstr "" -#: fortran/resolve.c:12006 +#: fortran/resolve.c:12017 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2003: Generic name '%s' of function '%s' at %L being the same name " "as derived type at %L" msgstr "" -#: fortran/resolve.c:12058 +#: fortran/resolve.c:12069 #, gcc-internal-format, gfc-internal-format msgid "Assumed size array '%s' in namelist '%s' at %L is not allowed" msgstr "" -#: fortran/resolve.c:12064 +#: fortran/resolve.c:12075 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2003: NAMELIST array object '%s' with assumed shape in namelist '%s' " "at %L" msgstr "" -#: fortran/resolve.c:12071 +#: fortran/resolve.c:12082 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2003: NAMELIST array object '%s' with nonconstant shape in namelist " "'%s' at %L" msgstr "" -#: fortran/resolve.c:12080 +#: fortran/resolve.c:12091 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2003: NAMELIST object '%s' with nonconstant character length in " "namelist '%s' at %L" msgstr "" -#: fortran/resolve.c:12090 +#: fortran/resolve.c:12101 #, gcc-internal-format, gfc-internal-format msgid "" "NAMELIST object '%s' in namelist '%s' at %L is polymorphic and requires a " "defined input/output procedure" msgstr "" -#: fortran/resolve.c:12100 +#: fortran/resolve.c:12111 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2003: NAMELIST object '%s' in namelist '%s' at %L with ALLOCATABLE " @@ -43877,369 +44129,386 @@ msgstr "" #. FIXME: Once UDDTIO is implemented, the following can be #. removed. -#: fortran/resolve.c:12108 +#: fortran/resolve.c:12119 #, gcc-internal-format, gfc-internal-format msgid "" "NAMELIST object '%s' in namelist '%s' at %L has ALLOCATABLE or POINTER " "components and thus requires a defined input/output procedure" msgstr "" -#: fortran/resolve.c:12125 +#: fortran/resolve.c:12136 #, gcc-internal-format, gfc-internal-format msgid "" "NAMELIST object '%s' was declared PRIVATE and cannot be member of PUBLIC " "namelist '%s' at %L" msgstr "" -#: fortran/resolve.c:12135 +#: fortran/resolve.c:12146 #, gcc-internal-format, gfc-internal-format msgid "" "NAMELIST object '%s' has use-associated PRIVATE components and cannot be " "member of namelist '%s' at %L" msgstr "" -#: fortran/resolve.c:12146 +#: fortran/resolve.c:12157 #, gcc-internal-format, gfc-internal-format msgid "" "NAMELIST object '%s' has PRIVATE components and cannot be a member of PUBLIC " "namelist '%s' at %L" msgstr "" -#: fortran/resolve.c:12173 +#: fortran/resolve.c:12184 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE attribute conflicts with NAMELIST attribute in '%s' at %L" msgstr "" -#: fortran/resolve.c:12192 +#: fortran/resolve.c:12203 #, gcc-internal-format, gfc-internal-format msgid "Parameter array '%s' at %L cannot be automatic or of deferred shape" msgstr "" -#: fortran/resolve.c:12204 +#: fortran/resolve.c:12215 #, gcc-internal-format, gfc-internal-format msgid "" "Implicitly typed PARAMETER '%s' at %L doesn't match a later IMPLICIT type" msgstr "" -#: fortran/resolve.c:12215 +#: fortran/resolve.c:12226 #, gcc-internal-format, gfc-internal-format msgid "Incompatible derived type in PARAMETER at %L" msgstr "" -#: fortran/resolve.c:12284 +#: fortran/resolve.c:12295 #, gcc-internal-format, gfc-internal-format msgid "PROTECTED attribute conflicts with EXTERNAL attribute at %L" msgstr "" -#: fortran/resolve.c:12287 +#: fortran/resolve.c:12298 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE attribute conflicts with PROTECTED attribute at %L" msgstr "" -#: fortran/resolve.c:12370 +#: fortran/resolve.c:12381 #, gcc-internal-format, gfc-internal-format msgid "" "'%s' at %L has the CONTIGUOUS attribute but is not an array pointer or an " "assumed-shape array" msgstr "" -#: fortran/resolve.c:12388 +#: fortran/resolve.c:12399 #, gcc-internal-format, gfc-internal-format msgid "Assumed size array at %L must be a dummy argument" msgstr "" -#: fortran/resolve.c:12391 +#: fortran/resolve.c:12402 #, gcc-internal-format, gfc-internal-format msgid "Assumed shape array at %L must be a dummy argument" msgstr "" -#: fortran/resolve.c:12404 +#: fortran/resolve.c:12415 #, gcc-internal-format, gfc-internal-format msgid "Symbol at %L is not a DUMMY variable" msgstr "" -#: fortran/resolve.c:12410 +#: fortran/resolve.c:12421 #, gcc-internal-format, gfc-internal-format msgid "" "'%s' at %L cannot have the VALUE attribute because it is not a dummy argument" msgstr "" -#: fortran/resolve.c:12420 +#: fortran/resolve.c:12431 #, gcc-internal-format, gfc-internal-format msgid "" "Character dummy variable '%s' at %L with VALUE attribute must have constant " "length" msgstr "" -#: fortran/resolve.c:12429 +#: fortran/resolve.c:12440 #, gcc-internal-format, gfc-internal-format msgid "" "C interoperable character dummy variable '%s' at %L with VALUE attribute " "must have length one" msgstr "" -#: fortran/resolve.c:12442 fortran/resolve.c:12523 +#: fortran/resolve.c:12453 fortran/resolve.c:12559 #, gcc-internal-format, gfc-internal-format msgid "The derived type '%s' at %L is of type '%s', which has not been defined" msgstr "" -#: fortran/resolve.c:12469 +#: fortran/resolve.c:12466 +#, gcc-internal-format, gfc-internal-format +msgid "Assumed type of variable %s at %L is only permitted for dummy variables" +msgstr "" + +#: fortran/resolve.c:12473 +#, gcc-internal-format, gfc-internal-format +msgid "" +"Assumed-type variable %s at %L may not have the ALLOCATABLE, CODIMENSION, " +"POINTER or VALUE attribute" +msgstr "" + +#: fortran/resolve.c:12480 +#, gcc-internal-format, gfc-internal-format +msgid "Assumed-type variable %s at %L shall not be an explicit-shape array" +msgstr "" + +#: fortran/resolve.c:12505 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %L cannot be BIND(C) because it is neither a COMMON block " "nor declared at the module level scope" msgstr "" -#: fortran/resolve.c:12549 +#: fortran/resolve.c:12585 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: PUBLIC %s '%s' at %L of PRIVATE derived type '%s'" msgstr "" -#: fortran/resolve.c:12563 +#: fortran/resolve.c:12599 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L of type LOCK_TYPE or with subcomponent of type LOCK_TYPE " "must be a coarray" msgstr "" -#: fortran/resolve.c:12581 +#: fortran/resolve.c:12617 #, gcc-internal-format, gfc-internal-format msgid "" "The INTENT(OUT) dummy argument '%s' at %L is ASSUMED SIZE and so cannot have " "a default initializer" msgstr "" -#: fortran/resolve.c:12593 +#: fortran/resolve.c:12629 #, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' at %L of LOCK_TYPE shall not be INTENT(OUT)" msgstr "" -#: fortran/resolve.c:12605 +#: fortran/resolve.c:12641 #, gcc-internal-format, gfc-internal-format msgid "" "Function result '%s' at %L shall not be a coarray or have a coarray component" msgstr "" -#: fortran/resolve.c:12614 +#: fortran/resolve.c:12650 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) shall not be a coarray" msgstr "" -#: fortran/resolve.c:12626 +#: fortran/resolve.c:12662 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %L with coarray component shall be a nonpointer, " "nonallocatable scalar" msgstr "" -#: fortran/resolve.c:12641 +#: fortran/resolve.c:12677 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %L is a coarray and is not ALLOCATABLE, SAVE nor a dummy " "argument" msgstr "" -#: fortran/resolve.c:12649 +#: fortran/resolve.c:12685 #, gcc-internal-format, gfc-internal-format msgid "" "Coarray variable '%s' at %L shall not have codimensions with deferred shape" msgstr "" -#: fortran/resolve.c:12656 +#: fortran/resolve.c:12692 #, gcc-internal-format, gfc-internal-format msgid "Allocatable coarray variable '%s' at %L must have deferred shape" msgstr "" -#: fortran/resolve.c:12668 +#: fortran/resolve.c:12704 #, gcc-internal-format, gfc-internal-format msgid "" "Variable '%s' at %L is INTENT(OUT) and can thus not be an allocatable " "coarray or have coarray components" msgstr "" -#: fortran/resolve.c:12677 +#: fortran/resolve.c:12713 #, gcc-internal-format, gfc-internal-format msgid "Coarray dummy variable '%s' at %L not allowed in BIND(C) procedure '%s'" msgstr "" -#: fortran/resolve.c:12749 +#: fortran/resolve.c:12785 #, gcc-internal-format, gfc-internal-format msgid "Threadprivate at %L isn't SAVEd" msgstr "" -#: fortran/resolve.c:12843 +#: fortran/resolve.c:12879 #, gcc-internal-format, gfc-internal-format msgid "BLOCK DATA element '%s' at %L must be in COMMON" msgstr "" -#: fortran/resolve.c:12849 +#: fortran/resolve.c:12885 #, gcc-internal-format, gfc-internal-format msgid "DATA array '%s' at %L must be specified in a previous declaration" msgstr "" -#: fortran/resolve.c:12858 +#: fortran/resolve.c:12894 #, gcc-internal-format, gfc-internal-format msgid "DATA element '%s' at %L cannot have a coindex" msgstr "" -#: fortran/resolve.c:12872 +#: fortran/resolve.c:12908 #, gcc-internal-format, gfc-internal-format msgid "DATA element '%s' at %L is a pointer and so must be a full array" msgstr "" -#: fortran/resolve.c:12918 +#: fortran/resolve.c:12954 #, gcc-internal-format, gfc-internal-format msgid "Nonconstant array section at %L in DATA statement" msgstr "" -#: fortran/resolve.c:12931 +#: fortran/resolve.c:12967 #, gcc-internal-format, gfc-internal-format msgid "DATA statement at %L has more variables than values" msgstr "" -#: fortran/resolve.c:13030 +#: fortran/resolve.c:13066 #, gcc-internal-format, gfc-internal-format msgid "" "start of implied-do loop at %L could not be simplified to a constant value" msgstr "" -#: fortran/resolve.c:13038 +#: fortran/resolve.c:13074 #, gcc-internal-format, gfc-internal-format msgid "" "end of implied-do loop at %L could not be simplified to a constant value" msgstr "" -#: fortran/resolve.c:13046 +#: fortran/resolve.c:13082 #, gcc-internal-format, gfc-internal-format msgid "" "step of implied-do loop at %L could not be simplified to a constant value" msgstr "" -#: fortran/resolve.c:13171 +#: fortran/resolve.c:13207 #, gcc-internal-format, gfc-internal-format msgid "DATA statement at %L has more values than variables" msgstr "" -#: fortran/resolve.c:13310 +#: fortran/resolve.c:13346 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %L defined but not used" msgstr "" -#: fortran/resolve.c:13315 +#: fortran/resolve.c:13351 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %L defined but cannot be used" msgstr "" -#: fortran/resolve.c:13399 +#: fortran/resolve.c:13435 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type variable '%s' at %L must have SEQUENCE attribute to be an " "EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:13408 +#: fortran/resolve.c:13444 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type variable '%s' at %L cannot have ALLOCATABLE components to be an " "EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:13416 +#: fortran/resolve.c:13452 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type variable '%s' at %L with default initialization cannot be in " "EQUIVALENCE with a variable in COMMON" msgstr "" -#: fortran/resolve.c:13432 +#: fortran/resolve.c:13468 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type variable '%s' at %L with pointer component(s) cannot be an " "EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:13535 +#: fortran/resolve.c:13571 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in EQUIVALENCE statement at %L" msgstr "" -#: fortran/resolve.c:13550 +#: fortran/resolve.c:13586 #, gcc-internal-format, gfc-internal-format msgid "" "Either all or none of the objects in the EQUIVALENCE set at %L shall have " "the PROTECTED attribute" msgstr "" -#: fortran/resolve.c:13562 +#: fortran/resolve.c:13598 #, gcc-internal-format, gfc-internal-format msgid "" "Common block member '%s' at %L cannot be an EQUIVALENCE object in the pure " "procedure '%s'" msgstr "" -#: fortran/resolve.c:13571 +#: fortran/resolve.c:13607 #, gcc-internal-format, gfc-internal-format msgid "Named constant '%s' at %L cannot be an EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:13650 +#: fortran/resolve.c:13686 #, gcc-internal-format, gfc-internal-format msgid "" "Array '%s' at %L with non-constant bounds cannot be an EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:13661 +#: fortran/resolve.c:13697 #, gcc-internal-format, gfc-internal-format msgid "Structure component '%s' at %L cannot be an EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:13672 +#: fortran/resolve.c:13708 #, gcc-internal-format, gfc-internal-format msgid "Substring at %L has length zero" msgstr "" -#: fortran/resolve.c:13715 +#: fortran/resolve.c:13751 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: PUBLIC function '%s' at %L of PRIVATE type '%s'" msgstr "" -#: fortran/resolve.c:13728 +#: fortran/resolve.c:13764 #, gcc-internal-format, gfc-internal-format msgid "ENTRY '%s' at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.c:13745 +#: fortran/resolve.c:13781 #, gcc-internal-format, gfc-internal-format msgid "User operator procedure '%s' at %L must be a FUNCTION" msgstr "" -#: fortran/resolve.c:13755 +#: fortran/resolve.c:13791 #, gcc-internal-format, gfc-internal-format msgid "User operator procedure '%s' at %L cannot be assumed character length" msgstr "" -#: fortran/resolve.c:13763 +#: fortran/resolve.c:13799 #, gcc-internal-format, gfc-internal-format msgid "User operator procedure '%s' at %L must have at least one argument" msgstr "" -#: fortran/resolve.c:13777 +#: fortran/resolve.c:13813 #, gcc-internal-format, gfc-internal-format msgid "First argument of operator interface at %L cannot be optional" msgstr "" -#: fortran/resolve.c:13795 +#: fortran/resolve.c:13831 #, gcc-internal-format, gfc-internal-format msgid "Second argument of operator interface at %L cannot be optional" msgstr "" -#: fortran/resolve.c:13802 +#: fortran/resolve.c:13838 #, gcc-internal-format, gfc-internal-format msgid "Operator interface at %L must have, at most, two arguments" msgstr "" -#: fortran/resolve.c:13878 +#: fortran/resolve.c:13914 #, gcc-internal-format, gfc-internal-format msgid "Contained procedure '%s' at %L of a PURE procedure must also be PURE" msgstr "" @@ -44473,26 +44742,26 @@ msgstr "" msgid "Result of SCALE overflows its kind at %L" msgstr "" -#: fortran/simplify.c:5861 +#: fortran/simplify.c:5862 #, gcc-internal-format, gfc-internal-format msgid "Argument of SQRT at %L has a negative value" msgstr "" -#: fortran/simplify.c:6172 +#: fortran/simplify.c:6173 #, gcc-internal-format, gfc-internal-format msgid "" "Out of bounds in IMAGE_INDEX at %L for dimension %d, SUB has %ld and COARRAY " "lower bound is %ld)" msgstr "" -#: fortran/simplify.c:6195 +#: fortran/simplify.c:6196 #, gcc-internal-format, gfc-internal-format msgid "" "Out of bounds in IMAGE_INDEX at %L for dimension %d, SUB has %ld and COARRAY " "upper bound is %ld)" msgstr "" -#: fortran/simplify.c:6612 +#: fortran/simplify.c:6613 #, gcc-internal-format, gfc-internal-format msgid "" "Character '%s' in string at %L cannot be converted into character kind %d" @@ -44781,52 +45050,52 @@ msgstr "" msgid "Label %d at %C previously used as branch target" msgstr "" -#: fortran/symbol.c:2578 +#: fortran/symbol.c:2576 #, gcc-internal-format, gfc-internal-format msgid "Name '%s' at %C is an ambiguous reference to '%s' from module '%s'" msgstr "" -#: fortran/symbol.c:2581 +#: fortran/symbol.c:2579 #, gcc-internal-format, gfc-internal-format msgid "" "Name '%s' at %C is an ambiguous reference to '%s' from current program unit" msgstr "" #. Symbol is from another namespace. -#: fortran/symbol.c:2761 +#: fortran/symbol.c:2759 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %C has already been host associated" msgstr "" -#: fortran/symbol.c:3604 +#: fortran/symbol.c:3602 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type '%s' declared at %L must have the BIND attribute to be C " "interoperable" msgstr "" -#: fortran/symbol.c:3622 +#: fortran/symbol.c:3620 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type '%s' with BIND(C) attribute at %L is empty, and may be " "inaccessible by the C companion processor" msgstr "" -#: fortran/symbol.c:3643 +#: fortran/symbol.c:3641 #, gcc-internal-format, gfc-internal-format msgid "" "Component '%s' at %L cannot have the POINTER attribute because it is a " "member of the BIND(C) derived type '%s' at %L" msgstr "" -#: fortran/symbol.c:3653 +#: fortran/symbol.c:3651 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure pointer component '%s' at %L cannot be a member of the BIND(C) " "derived type '%s' at %L" msgstr "" -#: fortran/symbol.c:3664 +#: fortran/symbol.c:3662 #, gcc-internal-format, gfc-internal-format msgid "" "Component '%s' at %L cannot have the ALLOCATABLE attribute because it is a " @@ -44835,7 +45104,7 @@ msgstr "" #. If the derived type is bind(c), all fields must be #. interop. -#: fortran/symbol.c:3702 +#: fortran/symbol.c:3700 #, gcc-internal-format, gfc-internal-format msgid "" "Component '%s' in derived type '%s' at %L may not be C interoperable, even " @@ -44845,31 +45114,31 @@ msgstr "" #. If derived type is param to bind(c) routine, or to one #. of the iso_c_binding procs, it must be interoperable, so #. all fields must interop too. -#: fortran/symbol.c:3711 +#: fortran/symbol.c:3709 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' in derived type '%s' at %L may not be C interoperable" msgstr "" -#: fortran/symbol.c:3725 +#: fortran/symbol.c:3723 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type '%s' at %L cannot be declared with both PRIVATE and BIND(C) " "attributes" msgstr "" -#: fortran/symbol.c:3733 +#: fortran/symbol.c:3731 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type '%s' at %L cannot have the SEQUENCE attribute because it is BIND" "(C)" msgstr "" -#: fortran/symbol.c:4740 +#: fortran/symbol.c:4739 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' is used before it is typed at %L" msgstr "" -#: fortran/symbol.c:4746 +#: fortran/symbol.c:4745 #, gcc-internal-format, gfc-internal-format msgid "Extension: Symbol '%s' is used before it is typed at %L" msgstr "" @@ -44884,19 +45153,19 @@ msgstr "" msgid "BOZ constant at %L is too large (%ld vs %ld bits)" msgstr "" -#: fortran/trans-array.c:6999 +#: fortran/trans-array.c:6998 #, gcc-internal-format, gfc-internal-format msgid "Creating array temporary at %L for argument '%s'" msgstr "" -#: fortran/trans-array.c:8074 +#: fortran/trans-array.c:8124 #, gcc-internal-format msgid "" "Possible front-end bug: Deferred array size without pointer, allocatable " "attribute or derived type without allocatable components." msgstr "" -#: fortran/trans-array.c:8556 +#: fortran/trans-array.c:8621 #, gcc-internal-format, gfc-internal-format msgid "bad expression type during walk (%d)" msgstr "" @@ -44990,64 +45259,64 @@ msgstr "" msgid "non-constant initialization expression at %L" msgstr "" -#: fortran/trans-decl.c:1348 +#: fortran/trans-decl.c:1347 #, gcc-internal-format msgid "intrinsic variable which isn't a procedure" msgstr "" -#: fortran/trans-decl.c:3519 fortran/trans-decl.c:5367 +#: fortran/trans-decl.c:3518 fortran/trans-decl.c:5382 #, gcc-internal-format, gfc-internal-format msgid "Return value of function '%s' at %L not set" msgstr "" -#: fortran/trans-decl.c:3838 +#: fortran/trans-decl.c:3837 #, gcc-internal-format msgid "Deferred type parameter not yet supported" msgstr "" -#: fortran/trans-decl.c:4045 +#: fortran/trans-decl.c:4044 #, gcc-internal-format, gfc-internal-format msgid "backend decl for module variable %s already exists" msgstr "" -#: fortran/trans-decl.c:4569 +#: fortran/trans-decl.c:4568 #, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' at %L was declared INTENT(OUT) but was not set" msgstr "" -#: fortran/trans-decl.c:4573 +#: fortran/trans-decl.c:4572 #, gcc-internal-format, gfc-internal-format msgid "" "Derived-type dummy argument '%s' at %L was declared INTENT(OUT) but was not " "set and does not have a default initializer" msgstr "" -#: fortran/trans-decl.c:4582 +#: fortran/trans-decl.c:4581 fortran/trans-decl.c:4693 #, gcc-internal-format, gfc-internal-format msgid "Unused dummy argument '%s' at %L" msgstr "" -#: fortran/trans-decl.c:4595 +#: fortran/trans-decl.c:4594 #, gcc-internal-format, gfc-internal-format msgid "Unused variable '%s' declared at %L" msgstr "" -#: fortran/trans-decl.c:4602 +#: fortran/trans-decl.c:4601 #, gcc-internal-format, gfc-internal-format msgid "Unused module variable '%s' which has been explicitly imported at %L" msgstr "" -#: fortran/trans-decl.c:4649 +#: fortran/trans-decl.c:4648 #, gcc-internal-format, gfc-internal-format msgid "Unused parameter '%s' declared at %L" msgstr "" -#: fortran/trans-decl.c:4652 +#: fortran/trans-decl.c:4651 #, gcc-internal-format, gfc-internal-format msgid "Unused parameter '%s' which has been explicitly imported at %L" msgstr "" -#: fortran/trans-decl.c:4667 +#: fortran/trans-decl.c:4666 #, gcc-internal-format, gfc-internal-format msgid "Return value '%s' of function '%s' declared at %L not set" msgstr "" @@ -45088,12 +45357,12 @@ msgstr "" msgid "gfc_trans_omp_workshare(): Bad statement code" msgstr "" -#: fortran/trans-stmt.c:517 +#: fortran/trans-stmt.c:539 #, gcc-internal-format, gfc-internal-format msgid "An alternate return at %L without a * dummy argument" msgstr "" -#: fortran/trans-stmt.c:840 +#: fortran/trans-stmt.c:862 #, gcc-internal-format, gfc-internal-format msgid "Sorry, only support for integer kind %d implemented for image-set at %L" msgstr "" @@ -45148,7 +45417,7 @@ msgstr "" msgid "REAL(KIND=10) is not available for -freal-8-real-16 option" msgstr "" -#: fortran/trans-types.c:1432 +#: fortran/trans-types.c:1437 #, gcc-internal-format, gfc-internal-format msgid "Array element size too big at %C" msgstr "" @@ -45511,97 +45780,97 @@ msgstr "" msgid "%s: section %s is missing" msgstr "" -#: lto/lto.c:957 +#: lto/lto.c:950 #, gcc-internal-format msgid "bytecode stream: garbage at the end of symbols section" msgstr "" -#: lto/lto.c:984 +#: lto/lto.c:977 #, gcc-internal-format msgid "could not parse hex number" msgstr "" -#: lto/lto.c:1017 +#: lto/lto.c:1010 #, gcc-internal-format, gfc-internal-format msgid "unexpected file name %s in linker resolution file. Expected %s" msgstr "" -#: lto/lto.c:1026 +#: lto/lto.c:1019 #, gcc-internal-format msgid "could not parse file offset" msgstr "" -#: lto/lto.c:1029 +#: lto/lto.c:1022 #, gcc-internal-format msgid "unexpected offset" msgstr "" -#: lto/lto.c:1050 +#: lto/lto.c:1043 #, gcc-internal-format msgid "invalid line in the resolution file" msgstr "" -#: lto/lto.c:1063 +#: lto/lto.c:1056 #, gcc-internal-format msgid "invalid resolution in the resolution file" msgstr "" -#: lto/lto.c:1069 +#: lto/lto.c:1062 #, gcc-internal-format msgid "resolution sub id " msgstr "" -#: lto/lto.c:1164 +#: lto/lto.c:1157 #, gcc-internal-format, gfc-internal-format msgid "cannot read LTO decls from %s" msgstr "" -#: lto/lto.c:1268 +#: lto/lto.c:1261 #, gcc-internal-format, gfc-internal-format msgid "Cannot open %s" msgstr "" -#: lto/lto.c:1289 +#: lto/lto.c:1282 #, gcc-internal-format, gfc-internal-format msgid "Cannot map %s" msgstr "" -#: lto/lto.c:1300 +#: lto/lto.c:1293 #, gcc-internal-format, gfc-internal-format msgid "Cannot read %s" msgstr "" -#: lto/lto.c:2279 +#: lto/lto.c:2272 #, gcc-internal-format msgid "no LTRANS output list filename provided" msgstr "" -#: lto/lto.c:2282 +#: lto/lto.c:2275 #, gcc-internal-format msgid "opening LTRANS output list %s: %m" msgstr "" -#: lto/lto.c:2328 +#: lto/lto.c:2321 #, gcc-internal-format msgid "lto_obj_file_open() failed" msgstr "" -#: lto/lto.c:2354 +#: lto/lto.c:2347 #, gcc-internal-format msgid "writing to LTRANS output list %s: %m" msgstr "" -#: lto/lto.c:2362 +#: lto/lto.c:2355 #, gcc-internal-format msgid "closing LTRANS output list %s: %m" msgstr "" -#: lto/lto.c:2589 +#: lto/lto.c:2582 #, gcc-internal-format msgid "could not open symbol resolution file: %m" msgstr "" -#: lto/lto.c:2664 +#: lto/lto.c:2657 #, gcc-internal-format msgid "errors during merging of translation units" msgstr "" diff --git a/gcc/po/sv.po b/gcc/po/sv.po index 9ff68b59428..fb7df3711e0 100644 --- a/gcc/po/sv.po +++ b/gcc/po/sv.po @@ -1,8 +1,8 @@ # Swedish messages for GCC. -# Copyright © 2000, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. +# Copyright © 2000, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # This file is distributed under the same license as the gcc package. -# Dennis Björklund <db@zigo.dhs.org>, 2000, 2001, 2002. -# Göran Uddeborg <goeran@uddeborg.se>, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012. +# Dennis Björklund <db@zigo.dhs.org>, 2000, 2001, 2002. +# Göran Uddeborg <goeran@uddeborg.se>, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012. # # Reminder to translator: GCC team does not want RCS keywords in the header! # @@ -11,12 +11,12 @@ msgstr "" "Project-Id-Version: gcc 4.7-b20120128\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2012-01-27 16:13+0000\n" -"PO-Revision-Date: 2012-02-12 20:39+0100\n" -"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" +"PO-Revision-Date: 2012-03-04 20:51+0100\n" +"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -32,7 +32,7 @@ msgstr "({anonym})" #: c-parser.c:946 cp/parser.c:22252 #, gcc-internal-format msgid "expected end of line" -msgstr "oväntat radslut" +msgstr "oväntat radslut" #: c-parser.c:1796 c-parser.c:1810 c-parser.c:4116 c-parser.c:4569 #: c-parser.c:4830 c-parser.c:4988 c-parser.c:5005 c-parser.c:5170 @@ -43,7 +43,7 @@ msgstr "oväntat radslut" #: cp/parser.c:22198 #, gcc-internal-format msgid "expected %<;%>" -msgstr "%<;%> förväntades" +msgstr "%<;%> förväntades" #: c-parser.c:1840 c-parser.c:2438 c-parser.c:2729 c-parser.c:2794 #: c-parser.c:3407 c-parser.c:3519 c-parser.c:3524 c-parser.c:4613 @@ -55,13 +55,13 @@ msgstr "%<;%> förväntades" #: c-parser.c:8930 c-parser.c:8955 cp/parser.c:22201 #, gcc-internal-format msgid "expected %<(%>" -msgstr "%<(%> förväntades" +msgstr "%<(%> förväntades" #: c-parser.c:1845 c-parser.c:6389 c-parser.c:6427 c-parser.c:6555 #: cp/parser.c:21773 cp/parser.c:22216 #, gcc-internal-format msgid "expected %<,%>" -msgstr "%<,%> förväntades" +msgstr "%<,%> förväntades" #: c-parser.c:1866 c-parser.c:2453 c-parser.c:2765 c-parser.c:2804 #: c-parser.c:3012 c-parser.c:3176 c-parser.c:3238 c-parser.c:3290 @@ -77,77 +77,77 @@ msgstr "%<,%> förväntades" #: c-parser.c:9932 c-parser.c:9974 c-parser.c:10720 cp/parser.c:22246 #, gcc-internal-format msgid "expected %<)%>" -msgstr "%<)%> förväntades" +msgstr "%<)%> förväntades" #: c-parser.c:3095 c-parser.c:3904 c-parser.c:3938 c-parser.c:5224 #: c-parser.c:6491 c-parser.c:6755 c-parser.c:6861 c-parser.c:10623 #: c-parser.c:10625 cp/parser.c:22210 #, gcc-internal-format msgid "expected %<]%>" -msgstr "%<]%> förväntades" +msgstr "%<]%> förväntades" #: c-parser.c:3271 msgid "expected %<;%>, %<,%> or %<)%>" -msgstr "%<;%>, %<,%> eller %<)%> förväntades" +msgstr "%<;%>, %<,%> eller %<)%> förväntades" #: c-parser.c:3767 c-parser.c:9771 cp/parser.c:22204 cp/parser.c:24021 #, gcc-internal-format msgid "expected %<}%>" -msgstr "%<}%> förväntades" +msgstr "%<}%> förväntades" #: c-parser.c:4057 c-parser.c:7931 c-parser.c:10217 c-parser.c:2318 #: c-parser.c:2521 c-parser.c:7485 cp/parser.c:14416 cp/parser.c:22207 #, gcc-internal-format msgid "expected %<{%>" -msgstr "%<{%> förväntades" +msgstr "%<{%> förväntades" #: c-parser.c:4276 c-parser.c:4285 c-parser.c:5128 c-parser.c:5469 #: c-parser.c:7696 c-parser.c:8071 c-parser.c:8128 c-parser.c:9143 #: cp/parser.c:22240 cp/parser.c:23242 #, gcc-internal-format msgid "expected %<:%>" -msgstr "%<:%> förväntades" +msgstr "%<:%> förväntades" #: c-parser.c:4824 cp/parser.c:22134 #, gcc-internal-format msgid "expected %<while%>" -msgstr "%<while%> förväntades" +msgstr "%<while%> förväntades" #: c-parser.c:6279 msgid "expected %<.%>" -msgstr "%<.%> förväntades" +msgstr "%<.%> förväntades" #: c-parser.c:7156 c-parser.c:7188 c-parser.c:7428 cp/parser.c:23805 #: cp/parser.c:23879 #, gcc-internal-format msgid "expected %<@end%>" -msgstr "%<@end%> förväntades" +msgstr "%<@end%> förväntades" #: c-parser.c:7845 cp/parser.c:22225 #, gcc-internal-format msgid "expected %<>%>" -msgstr "%<>%> förväntades" +msgstr "%<>%> förväntades" #: c-parser.c:9241 cp/parser.c:22249 #, gcc-internal-format msgid "expected %<,%> or %<)%>" -msgstr "%<,%> eller %<)%> förväntades" +msgstr "%<,%> eller %<)%> förväntades" #: c-parser.c:9494 c-parser.c:9525 c-parser.c:9761 c-parser.c:9913 #: c-parser.c:3961 cp/parser.c:22228 #, gcc-internal-format msgid "expected %<=%>" -msgstr "%<=%> förväntades" +msgstr "%<=%> förväntades" #: c-parser.c:10274 c-parser.c:10264 cp/parser.c:26658 #, gcc-internal-format msgid "expected %<#pragma omp section%> or %<}%>" -msgstr "%<#pragma omp section%> eller %<}%> förväntades" +msgstr "%<#pragma omp section%> eller %<}%> förväntades" #: c-parser.c:10611 cp/parser.c:22213 #, gcc-internal-format msgid "expected %<[%>" -msgstr "%<[%> förväntades" +msgstr "%<[%> förväntades" #: c-typeck.c:6587 msgid "(anonymous)" @@ -155,19 +155,19 @@ msgstr "(anonym)" #: cfgrtl.c:2052 msgid "flow control insn inside a basic block" -msgstr "flödesstyrningsinstruktion inuti grundblock" +msgstr "flödesstyrningsinstruktion inuti grundblock" #: cfgrtl.c:2180 msgid "wrong insn in the fallthru edge" -msgstr "fel instruktion i fall-igenom-bågen" +msgstr "fel instruktion i fall-igenom-bÃ¥gen" #: cfgrtl.c:2234 msgid "insn outside basic block" -msgstr "instruktion utanför grundblock" +msgstr "instruktion utanför grundblock" #: cfgrtl.c:2241 msgid "return not followed by barrier" -msgstr "retur inte följt av en barriär" +msgstr "retur inte följt av en barriär" #: collect2.c:1691 #, c-format @@ -203,7 +203,7 @@ msgstr "[kan inte hitta %s]" #: collect2.c:2118 #, c-format msgid "[Leaving %s]\n" -msgstr "[Lämnar %s]\n" +msgstr "[Lämnar %s]\n" #: collect2.c:2346 #, c-format @@ -212,7 +212,7 @@ msgid "" "write_c_file - output name is %s, prefix is %s\n" msgstr "" "\n" -"write_c_file - utdatanamn är %s, prefix är %s\n" +"write_c_file - utdatanamn är %s, prefix är %s\n" #: collect2.c:2837 #, c-format @@ -235,17 +235,17 @@ msgstr "%s: alla varningar behandlas som fel\n" #: diagnostic.c:141 #, c-format msgid "%s: some warnings being treated as errors\n" -msgstr "%s: några varningar behandlas som fel\n" +msgstr "%s: nÃ¥gra varningar behandlas som fel\n" #: diagnostic.c:219 #, c-format msgid "compilation terminated due to -Wfatal-errors.\n" -msgstr "kompilering avslutad på grund av -Wfatal-errors.\n" +msgstr "kompilering avslutad pÃ¥ grund av -Wfatal-errors.\n" #: diagnostic.c:229 #, c-format msgid "compilation terminated due to -fmax-errors=%u.\n" -msgstr "kompilering avslutad på grund av -fmax-errors=%u.\n" +msgstr "kompilering avslutad pÃ¥ grund av -fmax-errors=%u.\n" #: diagnostic.c:240 #, c-format @@ -254,9 +254,9 @@ msgid "" "with preprocessed source if appropriate.\n" "See %s for instructions.\n" msgstr "" -"Var vänlig och skicka in en komplett felrapport,\n" -"om möjligt med preprocessad källfil.\n" -"Se %s för instruktioner.\n" +"Var vänlig och skicka in en komplett felrapport,\n" +"om möjligt med preprocessad källfil.\n" +"Se %s för instruktioner.\n" #: diagnostic.c:249 #, c-format @@ -266,16 +266,16 @@ msgstr "kompilering avslutad.\n" #: diagnostic.c:514 #, c-format msgid "%s:%d: confused by earlier errors, bailing out\n" -msgstr "%s:%d: förvirrad av tidigare fel, hoppar ut\n" +msgstr "%s:%d: förvirrad av tidigare fel, hoppar ut\n" #: diagnostic.c:880 #, c-format msgid "Internal compiler error: Error reporting routines re-entered.\n" -msgstr "Internt kompilatorfel: Felhanteringsrutiner återanropade.\n" +msgstr "Internt kompilatorfel: Felhanteringsrutiner Ã¥teranropade.\n" #: final.c:1160 msgid "negative insn length" -msgstr "negativ instruktionslängd" +msgstr "negativ instruktionslängd" #: final.c:2716 msgid "could not split insn" @@ -283,12 +283,12 @@ msgstr "gick inte att dela instruktion" #: final.c:3124 msgid "invalid 'asm': " -msgstr "ogiltig \"asm\": " +msgstr "ogiltig â€asmâ€: " #: final.c:3307 #, c-format msgid "nested assembly dialect alternatives" -msgstr "nästade assemblerdialektalternativ" +msgstr "nästade assemblerdialektalternativ" #: final.c:3324 final.c:3336 #, c-format @@ -303,7 +303,7 @@ msgstr "operandnummer saknas efter %%-tecken" #: final.c:3386 final.c:3427 #, c-format msgid "operand number out of range" -msgstr "operandnummer utanför intervall" +msgstr "operandnummer utanför intervall" #: final.c:3444 #, c-format @@ -313,7 +313,7 @@ msgstr "ogiltig %%-kod" #: final.c:3474 #, c-format msgid "'%%l' operand isn't a label" -msgstr "'%%l'-operand är inte en etikett" +msgstr "'%%l'-operand är inte en etikett" #. We can't handle floating point constants; #. PRINT_OPERAND must handle them. @@ -324,7 +324,7 @@ msgstr "'%%l'-operand är inte en etikett" #: final.c:3615 config/i386/i386.c:13019 config/pdp11/pdp11.c:1689 #, c-format msgid "floating constant misused" -msgstr "flyttalskonstant felanvänd" +msgstr "flyttalskonstant felanvänd" #: final.c:3673 config/i386/i386.c:13117 config/pdp11/pdp11.c:1730 #, c-format @@ -334,7 +334,7 @@ msgstr "ogiltigt uttryck som operand" #: gcc.c:1323 #, c-format msgid "Using built-in specs.\n" -msgstr "Använder inbyggda specifikationer.\n" +msgstr "Använder inbyggda specifikationer.\n" #: gcc.c:1520 #, c-format @@ -342,13 +342,13 @@ msgid "" "Setting spec %s to '%s'\n" "\n" msgstr "" -"Ställer in specifikationer %s till \"%s\"\n" +"Ställer in specifikationer %s till â€%sâ€\n" "\n" #: gcc.c:1630 #, c-format msgid "Reading specs from %s\n" -msgstr "Läser specifikationer från %s\n" +msgstr "Läser specifikationer frÃ¥n %s\n" #: gcc.c:1755 #, c-format @@ -358,7 +358,7 @@ msgstr "kunde inte hitta specs-filen %s\n" #: gcc.c:1824 #, c-format msgid "rename spec %s to %s\n" -msgstr "byter namn på specifikation %s till %s\n" +msgstr "byter namn pÃ¥ specifikation %s till %s\n" #: gcc.c:1826 #, c-format @@ -366,7 +366,7 @@ msgid "" "spec is '%s'\n" "\n" msgstr "" -"specifikation är \"%s\"\n" +"specifikation är â€%sâ€\n" "\n" #: gcc.c:2243 @@ -381,7 +381,7 @@ msgid "" "Go ahead? (y or n) " msgstr "" "\n" -"Fortsätta? (y eller n) " +"Fortsätta? (y eller n) " #: gcc.c:2747 #, c-format @@ -391,7 +391,7 @@ msgstr "# %s %.2f %.2f\n" #: gcc.c:2949 #, c-format msgid "Usage: %s [options] file...\n" -msgstr "Användning: %s [flaggor] fil...\n" +msgstr "Användning: %s [flaggor] fil...\n" #: gcc.c:2950 msgid "Options:\n" @@ -399,15 +399,15 @@ msgstr "Flaggor:\n" #: gcc.c:2952 msgid " -pass-exit-codes Exit with highest error code from a phase\n" -msgstr " -pass-exit-codes Avsluta med högsta felkoden från någon av faserna\n" +msgstr " -pass-exit-codes Avsluta med högsta felkoden frÃ¥n nÃ¥gon av faserna\n" #: gcc.c:2953 msgid " --help Display this information\n" -msgstr " --help Visa den här informationen\n" +msgstr " --help Visa den här informationen\n" #: gcc.c:2954 msgid " --target-help Display target specific command line options\n" -msgstr " --target-help Visa specifika kommandoradsflaggor för mål\n" +msgstr " --target-help Visa specifika kommandoradsflaggor för mÃ¥l\n" #: gcc.c:2955 msgid " --help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...]\n" @@ -419,7 +419,7 @@ msgstr " Visa specifika typer av kommandoradsflaggor\n #: gcc.c:2958 msgid " (Use '-v --help' to display command line options of sub-processes)\n" -msgstr " (Använd '-v --help' för att visa kommandoradsflaggor för barnprocesser)\n" +msgstr " (Använd '-v --help' för att visa kommandoradsflaggor för barnprocesser)\n" #: gcc.c:2959 msgid " --version Display compiler version information\n" @@ -427,7 +427,7 @@ msgstr " --version Visa information om kompilatorversion\n" #: gcc.c:2960 msgid " -dumpspecs Display all of the built in spec strings\n" -msgstr " -dumpspecs Visa de inbyggda spec-strängarna\n" +msgstr " -dumpspecs Visa de inbyggda spec-strängarna\n" #: gcc.c:2961 msgid " -dumpversion Display the version of the compiler\n" @@ -435,27 +435,27 @@ msgstr " -dumpversion Visa kompilatorns version\n" #: gcc.c:2962 msgid " -dumpmachine Display the compiler's target processor\n" -msgstr " -dumpmachine Visa kompilatorns målprocessor\n" +msgstr " -dumpmachine Visa kompilatorns mÃ¥lprocessor\n" #: gcc.c:2963 msgid " -print-search-dirs Display the directories in the compiler's search path\n" -msgstr " -print-search-dirs Visa katalogerna i kompilatorns sökväg\n" +msgstr " -print-search-dirs Visa katalogerna i kompilatorns sökväg\n" #: gcc.c:2964 msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" -msgstr " -print-libgcc-file-name Visa namnet på kompilatorns medföljande bibliotek\n" +msgstr " -print-libgcc-file-name Visa namnet pÃ¥ kompilatorns medföljande bibliotek\n" #: gcc.c:2965 msgid " -print-file-name=<lib> Display the full path to library <lib>\n" -msgstr " -print-file-name=<bib> Visa hela sökvägen till länkbibliotek <bib>\n" +msgstr " -print-file-name=<bib> Visa hela sökvägen till länkbibliotek <bib>\n" #: gcc.c:2966 msgid " -print-prog-name=<prog> Display the full path to compiler component <prog>\n" -msgstr " -print-prog-name=<prog> Visa hela sökvägen till kompilatorkomponenten <prog>\n" +msgstr " -print-prog-name=<prog> Visa hela sökvägen till kompilatorkomponenten <prog>\n" #: gcc.c:2967 msgid " -print-multi-directory Display the root directory for versions of libgcc\n" -msgstr " -print-multi-directory Visa rotkatalogen för olika versioner av libgcc\n" +msgstr " -print-multi-directory Visa rotkatalogen för olika versioner av libgcc\n" #: gcc.c:2968 msgid "" @@ -463,19 +463,19 @@ msgid "" " multiple library search directories\n" msgstr "" " -print-multi-lib Visa avbildningen mellan kommandoradsflaggor och\n" -" multipla biblioteks sökkataloger\n" +" multipla biblioteks sökkataloger\n" #: gcc.c:2971 msgid " -print-multi-os-directory Display the relative path to OS libraries\n" -msgstr " -print-multi-os-directory Visa den relativa sökvägen till OS-bibliotek\n" +msgstr " -print-multi-os-directory Visa den relativa sökvägen till OS-bibliotek\n" #: gcc.c:2972 msgid " -print-sysroot Display the target libraries directory\n" -msgstr " -print-sysroot Visa katalogen för målbibliotek\n" +msgstr " -print-sysroot Visa katalogen för mÃ¥lbibliotek\n" #: gcc.c:2973 msgid " -print-sysroot-headers-suffix Display the sysroot suffix used to find headers\n" -msgstr " -print-sysroot-headers-suffix Visa sysroot-suffixet som används för att hitta huvuden\n" +msgstr " -print-sysroot-headers-suffix Visa sysroot-suffixet som används för att hitta huvuden\n" #: gcc.c:2974 msgid " -Wa,<options> Pass comma-separated <options> on to the assembler\n" @@ -487,7 +487,7 @@ msgstr " -Wp,<flaggor> Skicka kommaseparerade <flaggor> till preproc #: gcc.c:2976 msgid " -Wl,<options> Pass comma-separated <options> on to the linker\n" -msgstr " -Wl,<flaggor> Skicka kommaseparerade <flaggor> till länkaren\n" +msgstr " -Wl,<flaggor> Skicka kommaseparerade <flaggor> till länkaren\n" #: gcc.c:2977 msgid " -Xassembler <arg> Pass <arg> on to the assembler\n" @@ -499,73 +499,73 @@ msgstr " -Xpreprocessor <arg> Skicka <arg> vidare till preprocessorn\n" #: gcc.c:2979 msgid " -Xlinker <arg> Pass <arg> on to the linker\n" -msgstr " -Xlinker <arg> Skicka <arg> vidare till länkaren\n" +msgstr " -Xlinker <arg> Skicka <arg> vidare till länkaren\n" #: gcc.c:2980 msgid " -save-temps Do not delete intermediate files\n" -msgstr " -save-temps Radera inte temporära filer\n" +msgstr " -save-temps Radera inte temporära filer\n" #: gcc.c:2981 msgid " -save-temps=<arg> Do not delete intermediate files\n" -msgstr " -save-temps=<arg> Radera inte temporära filer\n" +msgstr " -save-temps=<arg> Radera inte temporära filer\n" #: gcc.c:2982 msgid "" " -no-canonical-prefixes Do not canonicalize paths when building relative\n" " prefixes to other gcc components\n" msgstr "" -" -no-canonical-prefixes Kanonisera inte sökvägar när relativa prefix\n" +" -no-canonical-prefixes Kanonisera inte sökvägar när relativa prefix\n" " byggs till andra gcc-komponenter\n" #: gcc.c:2985 msgid " -pipe Use pipes rather than intermediate files\n" -msgstr " -pipe Använd rör istället för temporära filer\n" +msgstr " -pipe Använd rör istället för temporära filer\n" #: gcc.c:2986 msgid " -time Time the execution of each subprocess\n" -msgstr " -time Mät tiden det tar att exekvera varje barnprocess\n" +msgstr " -time Mät tiden det tar att exekvera varje barnprocess\n" #: gcc.c:2987 msgid " -specs=<file> Override built-in specs with the contents of <file>\n" -msgstr " -specs=<fil> Ersätt inbyggda specs med innehållet i <fil>\n" +msgstr " -specs=<fil> Ersätt inbyggda specs med innehÃ¥llet i <fil>\n" #: gcc.c:2988 msgid " -std=<standard> Assume that the input sources are for <standard>\n" -msgstr " -std=<standard> Antag att källkodsfilerna är för <standard>\n" +msgstr " -std=<standard> Antag att källkodsfilerna är för <standard>\n" #: gcc.c:2989 msgid "" " --sysroot=<directory> Use <directory> as the root directory for headers\n" " and libraries\n" msgstr "" -" --sysroot=<katalog> Använd <katalog> som rotkatalogen för huvuden och\n" +" --sysroot=<katalog> Använd <katalog> som rotkatalogen för huvuden och\n" " bibliotek\n" #: gcc.c:2992 msgid " -B <directory> Add <directory> to the compiler's search paths\n" -msgstr " -B <katalog> Lägg till <katalog> till kompilatorns sökvägar\n" +msgstr " -B <katalog> Lägg till <katalog> till kompilatorns sökvägar\n" #: gcc.c:2993 msgid " -v Display the programs invoked by the compiler\n" -msgstr " -v Visa vilka program som körs av kompilatorn\n" +msgstr " -v Visa vilka program som körs av kompilatorn\n" #: gcc.c:2994 msgid " -### Like -v but options quoted and commands not executed\n" -msgstr " -### Som -v men flaggor citerade och kommandon inte körda\n" +msgstr " -### Som -v men flaggor citerade och kommandon inte körda\n" #: gcc.c:2995 msgid " -E Preprocess only; do not compile, assemble or link\n" msgstr "" " -E Preprocessa bara; kompilera, assemblera och\n" -" länka inte\n" +" länka inte\n" #: gcc.c:2996 msgid " -S Compile only; do not assemble or link\n" -msgstr " -S Kompilera bara; assemblera och länka inte\n" +msgstr " -S Kompilera bara; assemblera och länka inte\n" #: gcc.c:2997 msgid " -c Compile and assemble, but do not link\n" -msgstr " -c Kompilera och assemblera, men länka inte\n" +msgstr " -c Kompilera och assemblera, men länka inte\n" #: gcc.c:2998 msgid " -o <file> Place the output into <file>\n" @@ -573,7 +573,7 @@ msgstr " -o <fil> Placera utdata i <fil>\n" #: gcc.c:2999 msgid " -pie Create a position independent executable\n" -msgstr " -pie Skapa ett positionsoberoende körbart program\n" +msgstr " -pie Skapa ett positionsoberoende körbart program\n" #: gcc.c:3000 msgid " -shared Create a shared library\n" @@ -586,10 +586,10 @@ msgid "" " 'none' means revert to the default behavior of\n" " guessing the language based on the file's extension\n" msgstr "" -" -x <språk> Specificera språk för de följande källkodsfilerna\n" -" Bland tillåtna språk finns: c c++ assembler none\n" -" \"none\" innebär att man använder standardmetoden\n" -" att gissa språk beroende på filens ändelse\n" +" -x <sprÃ¥k> Specificera sprÃ¥k för de följande källkodsfilerna\n" +" Bland tillÃ¥tna sprÃ¥k finns: c c++ assembler none\n" +" â€none†innebär att man använder standardmetoden\n" +" att gissa sprÃ¥k beroende pÃ¥ filens ändelse\n" #: gcc.c:3008 #, c-format @@ -600,14 +600,14 @@ msgid "" " other options on to these processes the -W<letter> options must be used.\n" msgstr "" "\n" -"Flaggor som börjar med -g, -f, -m, -O, -W eller --param skickas automatiskt\n" -"vidare till de barnprocesser som startas av %s. För att skicka med andra\n" -"flaggor till dessa processer måste flaggan -W<bokstav> användas.\n" +"Flaggor som börjar med -g, -f, -m, -O, -W eller --param skickas automatiskt\n" +"vidare till de barnprocesser som startas av %s. För att skicka med andra\n" +"flaggor till dessa processer mÃ¥ste flaggan -W<bokstav> användas.\n" #: gcc.c:5233 #, c-format msgid "Processing spec (%s), which is '%s'\n" -msgstr "Bearbetar specifikationen (%s), som är \"%s\"\n" +msgstr "Bearbetar specifikationen (%s), som är â€%sâ€\n" #: gcc.c:6472 #, c-format @@ -631,9 +631,9 @@ msgid "" "For bug reporting instructions, please see:\n" msgstr "" "\n" -"Synpunkter på översättningen till svenska rapporteras till\n" +"Synpunkter pÃ¥ översättningen till svenska rapporteras till\n" "<tp-sv@listor.tp-sv.se>.\n" -"För felrapporteringsinstruktioner i övrigt, se:\n" +"För felrapporteringsinstruktioner i övrigt, se:\n" #: gcc.c:6568 #, c-format @@ -642,7 +642,7 @@ msgstr "%s %s%s\n" #: gcc.c:6571 gcov.c:488 fortran/gfortranspec.c:305 java/jcf-dump.c:1165 msgid "(C)" -msgstr "©" +msgstr "©" #: gcc.c:6572 java/jcf-dump.c:1166 #, c-format @@ -651,15 +651,15 @@ msgid "" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" "\n" msgstr "" -"Detta är fri programvara, se källkoden för kopieringsvillkor. Det\n" -"finns INGEN garanti, inte ens för KÖP eller LÄMPLIGHET FÖR NÅGOT\n" -"SPECIELLT ÄNDAMÅL.\n" +"Detta är fri programvara, se källkoden för kopieringsvillkor. Det\n" +"finns INGEN garanti, inte ens för KÖP eller LÄMPLIGHET FÖR NÃ…GOT\n" +"SPECIELLT ÄNDAMÃ…L.\n" "\n" #: gcc.c:6589 #, c-format msgid "Target: %s\n" -msgstr "Mål: %s\n" +msgstr "MÃ¥l: %s\n" #: gcc.c:6590 #, c-format @@ -669,7 +669,7 @@ msgstr "Konfigurerad med: %s\n" #: gcc.c:6604 #, c-format msgid "Thread model: %s\n" -msgstr "Trådmodell: %s\n" +msgstr "TrÃ¥dmodell: %s\n" #: gcc.c:6615 #, c-format @@ -679,7 +679,7 @@ msgstr "gcc version %s %s\n" #: gcc.c:6618 #, c-format msgid "gcc driver version %s %sexecuting gcc version %s\n" -msgstr "gcc-drivrutin version %s %skör gcc version %s\n" +msgstr "gcc-drivrutin version %s %skör gcc version %s\n" #: gcc.c:6865 #, c-format @@ -690,7 +690,7 @@ msgid "" "\n" msgstr "" "\n" -"Länkningsflaggor\n" +"Länkningsflaggor\n" "================\n" "\n" @@ -700,7 +700,7 @@ msgid "" "Use \"-Wl,OPTION\" to pass \"OPTION\" to the linker.\n" "\n" msgstr "" -"Använd \"-Wl,FLAGGA\" för att skicka \"FLAGGA\" till länkaren.\n" +"Använd â€-Wl,FLAGGA†för att skicka â€FLAGGA†till länkaren.\n" "\n" #: gcc.c:8058 @@ -719,7 +719,7 @@ msgstr "" msgid "" "Use \"-Wa,OPTION\" to pass \"OPTION\" to the assembler.\n" "\n" -msgstr "Använd \"-Wa,FLAGGA\" för att skicka \"FLAGGA\" till assemblern.\n" +msgstr "Använd â€-Wa,FLAGGA†för att skicka â€FLAGGA†till assemblern.\n" #: gcov.c:458 #, c-format @@ -727,7 +727,7 @@ msgid "" "Usage: gcov [OPTION]... SOURCE|OBJ...\n" "\n" msgstr "" -"Användning: gcov [FLAGGA]... KÄLLA|OBJ...\n" +"Användning: gcov [FLAGGA]... KÄLLA|OBJ...\n" "\n" #: gcov.c:459 @@ -736,13 +736,13 @@ msgid "" "Print code coverage information.\n" "\n" msgstr "" -"Skriv ut kodtäckningsinformation.\n" +"Skriv ut kodtäckningsinformation.\n" "\n" #: gcov.c:460 #, c-format msgid " -h, --help Print this help, then exit\n" -msgstr " -h, --help Visa denna hjälp, avsluta sedan\n" +msgstr " -h, --help Visa denna hjälp, avsluta sedan\n" #: gcov.c:461 #, c-format @@ -752,7 +752,7 @@ msgstr " -v, --version Skriv ut versionsnummer, avsluta sedan #: gcov.c:462 #, c-format msgid " -a, --all-blocks Show information for every basic block\n" -msgstr " -a, --all-blocks Visa information för varje grundblock\n" +msgstr " -a, --all-blocks Visa information för varje grundblock\n" #: gcov.c:463 #, c-format @@ -765,8 +765,8 @@ msgid "" " -c, --branch-counts Given counts of branches taken\n" " rather than percentages\n" msgstr "" -" -c, --branch-counts Ange antal hopp tagna istället\n" -" för procentsatser\n" +" -c, --branch-counts Ange antal hopp tagna istället\n" +" för procentsatser\n" #: gcov.c:466 #, c-format @@ -779,45 +779,45 @@ msgid "" " -l, --long-file-names Use long output file names for included\n" " source files\n" msgstr "" -" -l, --long-file-names Använd långa filnamn i utdata för\n" -" inkluderade källfiler\n" +" -l, --long-file-names Använd lÃ¥nga filnamn i utdata för\n" +" inkluderade källfiler\n" #: gcov.c:469 #, c-format msgid " -f, --function-summaries Output summaries for each function\n" -msgstr " -f, --function-summaries Skriv sammanfattningar för varje funktion\n" +msgstr " -f, --function-summaries Skriv sammanfattningar för varje funktion\n" #: gcov.c:470 #, c-format msgid " -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n" msgstr "" -" -o, --object-directory KAT|FIL Sök efter objektfiler i KAT eller som \n" +" -o, --object-directory KAT|FIL Sök efter objektfiler i KAT eller som \n" " heter FIL\n" #: gcov.c:471 #, c-format msgid " -s, --source-prefix DIR Source prefix to elide\n" -msgstr " -s, --source-prefix DIR Källprefix att utelämna\n" +msgstr " -s, --source-prefix DIR Källprefix att utelämna\n" #: gcov.c:472 #, c-format msgid " -r, --relative-only Only show data for relative sources\n" -msgstr " -r, --relative-only Visa endast data för relativa källor\n" +msgstr " -r, --relative-only Visa endast data för relativa källor\n" #: gcov.c:473 #, c-format msgid " -p, --preserve-paths Preserve all pathname components\n" -msgstr " -p, --preserve-paths Bevara alla sökvägskomponenter\n" +msgstr " -p, --preserve-paths Bevara alla sökvägskomponenter\n" #: gcov.c:474 #, c-format msgid " -u, --unconditional-branches Show unconditional branch counts too\n" -msgstr " -u, --unconditional-branches Visa antal ovillkorliga hopp också\n" +msgstr " -u, --unconditional-branches Visa antal ovillkorliga hopp ocksÃ¥\n" #: gcov.c:475 #, c-format msgid " -d, --display-progress Display progress information\n" -msgstr " -d, --display-progress Visa förloppsinformation\n" +msgstr " -d, --display-progress Visa förloppsinformation\n" #: gcov.c:476 #, c-format @@ -827,9 +827,9 @@ msgid "" "%s.\n" msgstr "" "\n" -"För att rapportera fel, se:\n" +"För att rapportera fel, se:\n" "%s.\n" -"Fel på översättningen rapporteras till <tp-sv@listor.tp-sv.se>\n" +"Fel pÃ¥ översättningen rapporteras till <tp-sv@listor.tp-sv.se>\n" #: gcov.c:486 #, c-format @@ -844,9 +844,9 @@ msgid "" "FITNESS FOR A PARTICULAR PURPOSE.\n" "\n" msgstr "" -"Detta är fri programvara, se källkoden för kopieringsvillkor. Det\n" -"finns INGEN garanti, inte heller vid KÖP eller LÄMPLIGHET FÖR NÅGOT\n" -"SPECIELLT ÄNDAMÅL.\n" +"Detta är fri programvara, se källkoden för kopieringsvillkor. Det\n" +"finns INGEN garanti, inte heller vid KÖP eller LÄMPLIGHET FÖR NÃ…GOT\n" +"SPECIELLT ÄNDAMÃ…L.\n" "\n" #: gcov.c:675 gcov.c:738 @@ -857,37 +857,37 @@ msgstr "\n" #: gcov.c:720 #, c-format msgid "Creating '%s'\n" -msgstr "Skapar \"%s\"\n" +msgstr "Skapar â€%sâ€\n" #: gcov.c:723 #, c-format msgid "Error writing output file '%s'\n" -msgstr "Fel när utdatafilen \"%s\" skrevs\n" +msgstr "Fel när utdatafilen â€%s†skrevs\n" #: gcov.c:728 #, c-format msgid "Could not open output file '%s'\n" -msgstr "Kunde inte öppna utdatafilen \"%s\"\n" +msgstr "Kunde inte öppna utdatafilen â€%sâ€\n" #: gcov.c:734 #, c-format msgid "Removing '%s'\n" -msgstr "Tar bort \"%s\"\n" +msgstr "Tar bort â€%sâ€\n" #: gcov.c:976 #, c-format msgid "%s:source file is newer than graph file '%s'\n" -msgstr "%s:källkodsfil är nyaren än graffil \"%s\"\n" +msgstr "%s:källkodsfil är nyaren än graffil â€%sâ€\n" #: gcov.c:981 #, c-format msgid "(the message is only displayed one per source file)\n" -msgstr "(meddelandet visas endast en gång per källkodsfil)\n" +msgstr "(meddelandet visas endast en gÃ¥ng per källkodsfil)\n" #: gcov.c:1006 #, c-format msgid "%s:cannot open graph file\n" -msgstr "%s: kan inte öppna graffil\n" +msgstr "%s: kan inte öppna graffil\n" #: gcov.c:1012 #, c-format @@ -897,12 +897,12 @@ msgstr "%s:inte en gcov-graffil\n" #: gcov.c:1025 #, c-format msgid "%s:version '%.4s', prefer '%.4s'\n" -msgstr "%s:version '%.4s', föredrar '%.4s'\n" +msgstr "%s:version '%.4s', föredrar '%.4s'\n" #: gcov.c:1065 #, c-format msgid "%s:already seen blocks for '%s'\n" -msgstr "%s:redan sett block för \"%s\"\n" +msgstr "%s:redan sett block för â€%sâ€\n" #: gcov.c:1196 #, c-format @@ -917,7 +917,7 @@ msgstr "%s:ingen funktion funnen\n" #: gcov.c:1222 #, c-format msgid "%s:cannot open data file, assuming not executed\n" -msgstr "%s:kan inte öppna datafilen, antar ingen körning\n" +msgstr "%s:kan inte öppna datafilen, antar ingen körning\n" #: gcov.c:1229 #, c-format @@ -927,22 +927,22 @@ msgstr "%s:inte en gcov-datafil\n" #: gcov.c:1242 #, c-format msgid "%s:version '%.4s', prefer version '%.4s'\n" -msgstr "%s:version '%.4s', föredrar version '%.4s'\n" +msgstr "%s:version '%.4s', föredrar version '%.4s'\n" #: gcov.c:1248 #, c-format msgid "%s:stamp mismatch with graph file\n" -msgstr "%s:stämpel stämmer inte med graffil\n" +msgstr "%s:stämpel stämmer inte med graffil\n" #: gcov.c:1283 #, c-format msgid "%s:unknown function '%u'\n" -msgstr "%s:okänd funktion \"%u\"\n" +msgstr "%s:okänd funktion â€%uâ€\n" #: gcov.c:1297 #, c-format msgid "%s:profile mismatch for '%s'\n" -msgstr "%s:profil stämmer inte för \"%s\"\n" +msgstr "%s:profil stämmer inte för â€%sâ€\n" #: gcov.c:1316 #, c-format @@ -952,47 +952,47 @@ msgstr "%s:spill\n" #: gcov.c:1362 #, c-format msgid "%s:'%s' lacks entry and/or exit blocks\n" -msgstr "%s:\"%s\" saknar ingångs och/eller utgångsblock\n" +msgstr "%s:â€%s†saknar ingÃ¥ngs och/eller utgÃ¥ngsblock\n" #: gcov.c:1367 #, c-format msgid "%s:'%s' has arcs to entry block\n" -msgstr "%s:\"%s\" har bågar till ingångsblock\n" +msgstr "%s:â€%s†har bÃ¥gar till ingÃ¥ngsblock\n" #: gcov.c:1375 #, c-format msgid "%s:'%s' has arcs from exit block\n" -msgstr "%s:\"%s\" har bågar från utgångsblock\n" +msgstr "%s:â€%s†har bÃ¥gar frÃ¥n utgÃ¥ngsblock\n" #: gcov.c:1583 #, c-format msgid "%s:graph is unsolvable for '%s'\n" -msgstr "%s:graf är olösbar för \"%s\"\n" +msgstr "%s:graf är olösbar för â€%sâ€\n" #: gcov.c:1691 #, c-format msgid "Lines executed:%s of %d\n" -msgstr "Körda rader:%s av %d\n" +msgstr "Körda rader:%s av %d\n" #: gcov.c:1694 #, c-format msgid "No executable lines\n" -msgstr "Inga körbara rader\n" +msgstr "Inga körbara rader\n" #: gcov.c:1702 #, c-format msgid "%s '%s'\n" -msgstr "%s: \"%s\"\n" +msgstr "%s: â€%sâ€\n" #: gcov.c:1709 #, c-format msgid "Branches executed:%s of %d\n" -msgstr "Utförda hopp:%s av %d\n" +msgstr "Utförda hopp:%s av %d\n" #: gcov.c:1713 #, c-format msgid "Taken at least once:%s of %d\n" -msgstr "Tagna minst en gång:%s av %d\n" +msgstr "Tagna minst en gÃ¥ng:%s av %d\n" #: gcov.c:1719 #, c-format @@ -1012,7 +1012,7 @@ msgstr "Inga anrop\n" #: gcov.c:1973 #, c-format msgid "%s:no lines for '%s'\n" -msgstr "%s:inga rader för \"%s\"\n" +msgstr "%s:inga rader för â€%s\n" #: gcov.c:2167 #, c-format @@ -1022,7 +1022,7 @@ msgstr "anrop %2d returnerade %s\n" #: gcov.c:2172 #, c-format msgid "call %2d never executed\n" -msgstr "anrop %2d aldrig utfört\n" +msgstr "anrop %2d aldrig utfört\n" #: gcov.c:2177 #, c-format @@ -1032,7 +1032,7 @@ msgstr "hopp %2d gjort %s%s\n" #: gcov.c:2182 #, c-format msgid "branch %2d never executed\n" -msgstr "gren %2d aldrig utförd\n" +msgstr "gren %2d aldrig utförd\n" #: gcov.c:2187 #, c-format @@ -1042,12 +1042,12 @@ msgstr "ovillkorligt hopp %2d taget %s\n" #: gcov.c:2190 #, c-format msgid "unconditional %2d never executed\n" -msgstr "ovillkorligt hopp %2d aldrig utfört\n" +msgstr "ovillkorligt hopp %2d aldrig utfört\n" #: gcov.c:2262 #, c-format msgid "Cannot open source file %s\n" -msgstr "Kan inte öppna källkodsfilen %s\n" +msgstr "Kan inte öppna källkodsfilen %s\n" #: gcse.c:2626 msgid "PRE disabled" @@ -1060,7 +1060,7 @@ msgstr "GCSE avslagen" #: gengtype-state.c:154 #, c-format msgid "%s:%d:%d: Invalid state file; %s" -msgstr "%s:%d:%d: Felaktig tillståndsfil; %s" +msgstr "%s:%d:%d: Felaktig tillstÃ¥ndsfil; %s" #: gengtype-state.c:158 #, c-format @@ -1083,22 +1083,22 @@ msgstr "%s:%d: Ogiltig statusfil; " #: gengtype-state.c:699 #, c-format msgid "Option tag unknown" -msgstr "Okänd alternativtagg" +msgstr "Okänd alternativtagg" #: gengtype-state.c:754 #, c-format msgid "Unexpected type in write_state_scalar_type" -msgstr "Oväntad typ i write_state_scalar_type" +msgstr "Oväntad typ i write_state_scalar_type" #: gengtype-state.c:769 #, c-format msgid "Unexpected type in write_state_string_type" -msgstr "Oväntat typ i write_state_state_type" +msgstr "Oväntat typ i write_state_state_type" #: gengtype-state.c:973 #, c-format msgid "Unexpected type..." -msgstr "Oväntad typ ..." +msgstr "Oväntad typ ..." #: gengtype-state.c:1153 #, c-format @@ -1108,62 +1108,62 @@ msgstr "det gick inte att skriva avslutning [%s]" #: gengtype-state.c:1179 #, c-format msgid "Failed to open file %s for writing state: %s" -msgstr "Det gick inte att öppna filen %s för att skriva tillståndet: %s" +msgstr "Det gick inte att öppna filen %s för att skriva tillstÃ¥ndet: %s" #: gengtype-state.c:1209 #, c-format msgid "output error when writing state file %s [%s]" -msgstr "utmatningsfel när tillståndsfilen %s skrevs [%s]" +msgstr "utmatningsfel när tillstÃ¥ndsfilen %s skrevs [%s]" #: gengtype-state.c:1212 #, c-format msgid "failed to close state file %s [%s]" -msgstr "misslyckades med att stänga tillståndsfilen %s [%s]" +msgstr "misslyckades med att stänga tillstÃ¥ndsfilen %s [%s]" #: gengtype-state.c:1215 #, c-format msgid "failed to rename %s to state file %s [%s]" -msgstr "misslyckades att byta namn på %s till tillståndsfilen %s [%s]" +msgstr "misslyckades att byta namn pÃ¥ %s till tillstÃ¥ndsfilen %s [%s]" #: gengtype-state.c:2406 #, c-format msgid "Failed to open state file %s for reading [%s]" -msgstr "Misslyckades att öppna tillståndsfilen %s för läsning [%s]" +msgstr "Misslyckades att öppna tillstÃ¥ndsfilen %s för läsning [%s]" #: gengtype-state.c:2444 #, c-format msgid "failed to close read state file %s [%s]" -msgstr "misslyckades med att läst tillståndsfil %s [%s]" +msgstr "misslyckades med att läst tillstÃ¥ndsfil %s [%s]" #: incpath.c:76 #, c-format msgid "ignoring duplicate directory \"%s\"\n" -msgstr "ignorerar dubblerad katalog \"%s\"\n" +msgstr "ignorerar dubblerad katalog â€%sâ€\n" #: incpath.c:79 #, c-format msgid " as it is a non-system directory that duplicates a system directory\n" -msgstr " eftersom den är en icke-systemkatalog som dubblerar en systemkatalog\n" +msgstr " eftersom den är en icke-systemkatalog som dubblerar en systemkatalog\n" #: incpath.c:83 #, c-format msgid "ignoring nonexistent directory \"%s\"\n" -msgstr "ignorerar ej existerande katalog \"%s\"\n" +msgstr "ignorerar ej existerande katalog â€%sâ€\n" #: incpath.c:353 #, c-format msgid "#include \"...\" search starts here:\n" -msgstr "#include \"...\" sökning startar här:\n" +msgstr "#include \"...\" sökning startar här:\n" #: incpath.c:357 #, c-format msgid "#include <...> search starts here:\n" -msgstr "#include <...> sökning startar här:\n" +msgstr "#include <...> sökning startar här:\n" #: incpath.c:362 #, c-format msgid "End of search list.\n" -msgstr "Slut på söklistan.\n" +msgstr "Slut pÃ¥ söklistan.\n" #: input.c:48 cp/error.c:1107 msgid "<built-in>" @@ -1172,24 +1172,24 @@ msgstr "<inbyggd>" #. Opening quotation mark. #: intl.c:63 msgid "`" -msgstr "\"" +msgstr "â€" #. Closing quotation mark. #: intl.c:66 msgid "'" -msgstr "\"" +msgstr "â€" #: ipa-pure-const.c:156 msgid "function might be candidate for attribute %<%s%>" -msgstr "funktionen kan vara en kandidat för attributet %<%s%>" +msgstr "funktionen kan vara en kandidat för attributet %<%s%>" #: ipa-pure-const.c:157 msgid "function might be candidate for attribute %<%s%> if it is known to return normally" -msgstr "funktionen kan vara en kandidat för attributet %<%s%> om man vet att den returnerar normalt" +msgstr "funktionen kan vara en kandidat för attributet %<%s%> om man vet att den returnerar normalt" #: langhooks.c:374 msgid "At top level:" -msgstr "På toppnivå:" +msgstr "PÃ¥ toppnivÃ¥:" #: langhooks.c:394 cp/error.c:2985 #, c-format @@ -1204,33 +1204,33 @@ msgstr "I funktion %qs" #: langhooks.c:449 cp/error.c:2938 #, c-format msgid " inlined from %qs at %s:%d:%d" -msgstr " inline:ad från %qs vid %s:%d:%d" +msgstr " inline:ad frÃ¥n %qs vid %s:%d:%d" #: langhooks.c:454 cp/error.c:2943 #, c-format msgid " inlined from %qs at %s:%d" -msgstr " inline:ad från %qs vid %s:%d" +msgstr " inline:ad frÃ¥n %qs vid %s:%d" #: langhooks.c:460 cp/error.c:2949 #, c-format msgid " inlined from %qs" -msgstr " inline:ad från %qs" +msgstr " inline:ad frÃ¥n %qs" #: loop-iv.c:2966 tree-ssa-loop-niter.c:1907 msgid "assuming that the loop is not infinite" -msgstr "antar att slingan inte är oändlig" +msgstr "antar att slingan inte är oändlig" #: loop-iv.c:2967 tree-ssa-loop-niter.c:1908 msgid "cannot optimize possibly infinite loops" -msgstr "kan inte optimera potentiellt oändliga slingor" +msgstr "kan inte optimera potentiellt oändliga slingor" #: loop-iv.c:2975 tree-ssa-loop-niter.c:1912 msgid "assuming that the loop counter does not overflow" -msgstr "antar att slingräknaren inte spiller över" +msgstr "antar att slingräknaren inte spiller över" #: loop-iv.c:2976 tree-ssa-loop-niter.c:1913 msgid "cannot optimize loop, the loop counter may overflow" -msgstr "kan inte optimera slinga, slingräknaren kan spilla över" +msgstr "kan inte optimera slinga, slingräknaren kan spilla över" #: lto-wrapper.c:183 #, c-format @@ -1265,12 +1265,12 @@ msgstr "raderar LTRANS-fil %s" #: lto-wrapper.c:269 #, c-format msgid "failed to open %s" -msgstr "det gick inte att öppna %s" +msgstr "det gick inte att öppna %s" #: lto-wrapper.c:274 #, c-format msgid "could not write to temporary file %s" -msgstr "det gick inte att skriva till temporärfil %s" +msgstr "det gick inte att skriva till temporärfil %s" #: lto-wrapper.c:321 #, c-format @@ -1280,12 +1280,12 @@ msgstr "felformaterad COLLECT_GCC_OPTIONS" #: lto-wrapper.c:445 #, c-format msgid "environment variable COLLECT_GCC must be set" -msgstr "miljövariabeln COLLECT_GCC måste vara satt" +msgstr "miljövariabeln COLLECT_GCC mÃ¥ste vara satt" #: lto-wrapper.c:448 #, c-format msgid "environment variable COLLECT_GCC_OPTIONS must be set" -msgstr "miljövariabeln COLLECT_GCC_OPTIONS måste vara satt" +msgstr "miljövariabeln COLLECT_GCC_OPTIONS mÃ¥ste vara satt" #: lto-wrapper.c:734 #, c-format @@ -1312,61 +1312,61 @@ msgstr "[avslagen]" #: opts.c:1058 #, c-format msgid " No options with the desired characteristics were found\n" -msgstr " Det finns inga flaggor med de eftersökta egenskaperna\n" +msgstr " Det finns inga flaggor med de eftersökta egenskaperna\n" #: opts.c:1067 #, c-format msgid " None found. Use --help=%s to show *all* the options supported by the %s front-end\n" -msgstr " Det fanns inga. Använd --help=%s för att visa *alla* flaggorna som stöds av framänden %s\n" +msgstr " Det fanns inga. Använd --help=%s för att visa *alla* flaggorna som stöds av framänden %s\n" #: opts.c:1073 #, c-format msgid " All options with the desired characteristics have already been displayed\n" -msgstr " Alla flaggor med de eftersökta egenskaperna har redan visats\n" +msgstr " Alla flaggor med de eftersökta egenskaperna har redan visats\n" #: opts.c:1168 msgid "The following options are target specific" -msgstr "Följande flaggor är målberoende" +msgstr "Följande flaggor är mÃ¥lberoende" #: opts.c:1171 msgid "The following options control compiler warning messages" -msgstr "Följande flaggor styr kompilatorns varningsmeddelanden" +msgstr "Följande flaggor styr kompilatorns varningsmeddelanden" #: opts.c:1174 msgid "The following options control optimizations" -msgstr "Följande flaggor styr optimeringar" +msgstr "Följande flaggor styr optimeringar" #: opts.c:1177 opts.c:1216 msgid "The following options are language-independent" -msgstr "Följande flaggor är språkoberoende" +msgstr "Följande flaggor är sprÃ¥koberoende" #: opts.c:1180 msgid "The --param option recognizes the following as parameters" -msgstr "Flaggan --param accepterar följande som parametrar" +msgstr "Flaggan --param accepterar följande som parametrar" #: opts.c:1186 msgid "The following options are specific to just the language " -msgstr "Följande flaggor är specifika för just språket" +msgstr "Följande flaggor är specifika för just sprÃ¥ket" #: opts.c:1188 msgid "The following options are supported by the language " -msgstr "Följande flaggor stöds av språket" +msgstr "Följande flaggor stöds av sprÃ¥ket" #: opts.c:1199 msgid "The following options are not documented" -msgstr "Följande flaggor är inte dokumenterade" +msgstr "Följande flaggor är inte dokumenterade" #: opts.c:1201 msgid "The following options take separate arguments" -msgstr "Följande flaggor tar separata argument" +msgstr "Följande flaggor tar separata argument" #: opts.c:1203 msgid "The following options take joined arguments" -msgstr "Följande flaggor tar sammanslagna argument" +msgstr "Följande flaggor tar sammanslagna argument" #: opts.c:1214 msgid "The following options are language-related" -msgstr "Följande flaggor är språkrelaterade" +msgstr "Följande flaggor är sprÃ¥krelaterade" #: opts.c:2061 msgid "enabled by default" @@ -1374,7 +1374,7 @@ msgstr "aktiverat som standard" #: plugin.c:782 msgid "Event" -msgstr "Händelse" +msgstr "Händelse" #: plugin.c:782 msgid "Plugins" @@ -1383,20 +1383,20 @@ msgstr "Insticksmoduler" #: plugin.c:814 #, c-format msgid "*** WARNING *** there are active plugins, do not report this as a bug unless you can reproduce it without enabling any plugins.\n" -msgstr "*** VARNING *** det finns aktiva insticksmoduler, rapportera inte detta som ett fel med mindre än att du kan reproducera det utan att aktivera några insticksmoduler.\n" +msgstr "*** VARNING *** det finns aktiva insticksmoduler, rapportera inte detta som ett fel med mindre än att du kan reproducera det utan att aktivera nÃ¥gra insticksmoduler.\n" #: reload.c:3812 msgid "unable to generate reloads for:" -msgstr "kan inte generera omläsningar för:" +msgstr "kan inte generera omläsningar för:" #: reload1.c:2120 msgid "this is the insn:" -msgstr "detta är instruktionen:" +msgstr "detta är instruktionen:" #. It's the compiler's fault. #: reload1.c:6088 msgid "could not find a spill register" -msgstr "kunde inte hitta något spillregister" +msgstr "kunde inte hitta nÃ¥got spillregister" #. It's the compiler's fault. #: reload1.c:7898 @@ -1405,37 +1405,37 @@ msgstr "VOIDmode vid utmatning" #: reload1.c:8653 msgid "failure trying to reload:" -msgstr "misslyckande vid omläsningsförsök:" +msgstr "misslyckande vid omläsningsförsök:" #: rtl-error.c:118 msgid "unrecognizable insn:" -msgstr "okänd instruktion:" +msgstr "okänd instruktion:" #: rtl-error.c:120 msgid "insn does not satisfy its constraints:" -msgstr "instruktionen håller inte sina begränsningar:" +msgstr "instruktionen hÃ¥ller inte sina begränsningar:" #: targhooks.c:1403 #, c-format msgid "created and used with differing settings of '%s'" -msgstr "skapad och använd med olika inställningar av \"%s\"" +msgstr "skapad och använd med olika inställningar av â€%sâ€" #: targhooks.c:1405 msgid "out of memory" -msgstr "slut på minne" +msgstr "slut pÃ¥ minne" #: targhooks.c:1420 msgid "created and used with different settings of -fpic" -msgstr "skapad och använd med olika inställningar av -fpic" +msgstr "skapad och använd med olika inställningar av -fpic" #: targhooks.c:1422 msgid "created and used with different settings of -fpie" -msgstr "skapad och använd med olika inställningar av -fpie" +msgstr "skapad och använd med olika inställningar av -fpie" #: tlink.c:387 #, c-format msgid "collect: reading %s\n" -msgstr "collect: läser %s\n" +msgstr "collect: läser %s\n" #: tlink.c:537 #, c-format @@ -1450,12 +1450,12 @@ msgstr "collect: justerar %s i %s\n" #: tlink.c:794 #, c-format msgid "collect: relinking\n" -msgstr "collect: länkar om\n" +msgstr "collect: länkar om\n" #: toplev.c:342 #, c-format msgid "unrecoverable error" -msgstr "fel som inte går att återhämta ifrån" +msgstr "fel som inte gÃ¥r att Ã¥terhämta ifrÃ¥n" #: toplev.c:695 #, c-format @@ -1476,11 +1476,11 @@ msgstr "%s%s%s %sversion %s (%s) kompilerad med CC, " msgid "GMP version %s, MPFR version %s, MPC version %s\n" msgstr "GMP-version %s, MPFR-version %s, MPC-version %s\n" -# Tredje %s blir en förkortning typ GMP +# Tredje %s blir en förkortning typ GMP #: toplev.c:703 #, c-format msgid "%s%swarning: %s header version %s differs from library version %s.\n" -msgstr "%s%svarning: %s-huvud version %s skiljer från biblioteksversion %s.\n" +msgstr "%s%svarning: %s-huvud version %s skiljer frÃ¥n biblioteksversion %s.\n" #: toplev.c:705 #, c-format @@ -1499,16 +1499,16 @@ msgstr "aktiverade flaggor: " #. functions that have not been rejected for inlining yet. #: cif-code.def:38 msgid "function not considered for inlining" -msgstr "funktionen inte beaktad för inline:ing" +msgstr "funktionen inte beaktad för inline:ing" #. Inlining failed owing to unavailable function body. #: cif-code.def:41 msgid "function body not available" -msgstr "funktionskroppen inte tillgänglig" +msgstr "funktionskroppen inte tillgänglig" #: cif-code.def:45 msgid "redefined extern inline functions are not considered for inlining" -msgstr "omdefinierade externa inline-funktioner beaktas inte för inline:ing" +msgstr "omdefinierade externa inline-funktioner beaktas inte för inline:ing" #. Function is not inlinable. #: cif-code.def:49 @@ -1518,32 +1518,32 @@ msgstr "funktionen kan inte inline:as" #. Function is not overwritable. #: cif-code.def:52 msgid "function body can be overwritten at link time" -msgstr "funktionskroppen kan inte skrivas över vid länkningstillfället" +msgstr "funktionskroppen kan inte skrivas över vid länkningstillfället" #. Function is not an inlining candidate. #: cif-code.def:55 msgid "function not inline candidate" -msgstr "funktionen är inte en inline-kandidat" +msgstr "funktionen är inte en inline-kandidat" #: cif-code.def:59 msgid "--param large-function-growth limit reached" -msgstr "gränsen --param large-function-growth nådd" +msgstr "gränsen --param large-function-growth nÃ¥dd" #: cif-code.def:61 msgid "--param large-stack-frame-growth limit reached" -msgstr "gränsen --param large-stack-frame-growth nådd" +msgstr "gränsen --param large-stack-frame-growth nÃ¥dd" #: cif-code.def:63 msgid "--param max-inline-insns-single limit reached" -msgstr "gränsen --param max-inline-insns-single nådd" +msgstr "gränsen --param max-inline-insns-single nÃ¥dd" #: cif-code.def:65 msgid "--param max-inline-insns-auto limit reached" -msgstr "gränsen --param max-inline-insns-auto nådd" +msgstr "gränsen --param max-inline-insns-auto nÃ¥dd" #: cif-code.def:67 msgid "--param inline-unit-growth limit reached" -msgstr "gränsen --param inline-unit-growth nådd" +msgstr "gränsen --param inline-unit-growth nÃ¥dd" #. Recursive inlining. #: cif-code.def:70 @@ -1553,54 +1553,54 @@ msgstr "rekursiv inline:ing" #. Call is unlikely. #: cif-code.def:73 msgid "call is unlikely and code size would grow" -msgstr "anrop är osannolikt och kodstorleken skulle växa" +msgstr "anrop är osannolikt och kodstorleken skulle växa" #: cif-code.def:77 msgid "function not declared inline and code size would grow" -msgstr "funktionen är inte deklarerad inline och kodstorleken skulle växa" +msgstr "funktionen är inte deklarerad inline och kodstorleken skulle växa" #: cif-code.def:81 msgid "optimizing for size and code size would grow" -msgstr "optimerar för storlek och kodstorleken skulle växa" +msgstr "optimerar för storlek och kodstorleken skulle växa" #. Caller and callee disagree on the arguments. #: cif-code.def:84 msgid "mismatched arguments" -msgstr "argumenten stämmer inte överens" +msgstr "argumenten stämmer inte överens" #: cif-code.def:88 msgid "originally indirect function call not considered for inlining" -msgstr "ursprungligen indirekt funktionsanrop beaktas inte för inline:ing" +msgstr "ursprungligen indirekt funktionsanrop beaktas inte för inline:ing" #: cif-code.def:92 msgid "indirect function call with a yet undetermined callee" -msgstr "indirekt funktionsanrop med ett ännu ej fastställt anropsmål" +msgstr "indirekt funktionsanrop med ett ännu ej fastställt anropsmÃ¥l" #. We can't inline different EH personalities together. #: cif-code.def:95 msgid "exception handling personality mismatch" -msgstr "personaliteten stämmer inte för undantagshanteringen" +msgstr "personaliteten stämmer inte för undantagshanteringen" #. We can't inline if the callee can throw non-call exceptions but the #. caller cannot. #: cif-code.def:99 msgid "non-call exception handling mismatch" -msgstr "undantagshantering vid annat än anrop stämmer inte överens" +msgstr "undantagshantering vid annat än anrop stämmer inte överens" #. We can't inline because of mismatched target specific options. #: cif-code.def:102 msgid "target specific option mismatch" -msgstr "målspecifik flagga stämmer inte" +msgstr "mÃ¥lspecifik flagga stämmer inte" #. We can't inline because of mismatched optimization levels. #: cif-code.def:105 msgid "optimization level attribute mismatch" -msgstr "attributen för optimeringsnivåer stämmer inte" +msgstr "attributen för optimeringsnivÃ¥er stämmer inte" #. The remainder are real diagnostic types. #: diagnostic.def:33 msgid "fatal error: " -msgstr "ödesdigert fel: " +msgstr "ödesdigert fel: " #: diagnostic.def:34 msgid "internal compiler error: " @@ -1628,7 +1628,7 @@ msgstr "anm: " #: diagnostic.def:40 msgid "debug: " -msgstr "felsökning: " +msgstr "felsökning: " #. These two would be re-classified as DK_WARNING or DK_ERROR, so the #. prefix does not matter. @@ -1642,11 +1642,11 @@ msgstr "permfel: " #: params.def:46 msgid "Maximal estimated outcome of branch considered predictable" -msgstr "Maximala uppskattade sannolikheten för en gren för att anses förutsägbar" +msgstr "Maximala uppskattade sannolikheten för en gren för att anses förutsägbar" #: params.def:63 msgid "The maximum number of instructions in a single function eligible for inlining" -msgstr "Det maximala antalet instruktioner i en enskild funktion tänkbar för inline:ing" +msgstr "Det maximala antalet instruktioner i en enskild funktion tänkbar för inline:ing" #: params.def:75 msgid "The maximum number of instructions when automatically inlining" @@ -1654,27 +1654,27 @@ msgstr "Det maximala antalet instruktioner vid automatisk inline:ing" #: params.def:80 msgid "The maximum number of instructions inline function can grow to via recursive inlining" -msgstr "Det maximala antalet instruktioner inline-funktioner kan växa till via rekursiv inline:ing" +msgstr "Det maximala antalet instruktioner inline-funktioner kan växa till via rekursiv inline:ing" #: params.def:85 msgid "The maximum number of instructions non-inline function can grow to via recursive inlining" -msgstr "Det maximala antalet instruktioner icke-inline-funktioner kan växa till via rekursiv inline:ing" +msgstr "Det maximala antalet instruktioner icke-inline-funktioner kan växa till via rekursiv inline:ing" #: params.def:90 msgid "The maximum depth of recursive inlining for inline functions" -msgstr "Det maximala djupet för rekursiv inline:ing för inline-funktioner" +msgstr "Det maximala djupet för rekursiv inline:ing för inline-funktioner" #: params.def:95 msgid "The maximum depth of recursive inlining for non-inline functions" -msgstr "Det maximala djupet för rekursiv inline:ing för icke-inline-funktioner" +msgstr "Det maximala djupet för rekursiv inline:ing för icke-inline-funktioner" #: params.def:100 msgid "Inline recursively only when the probability of call being executed exceeds the parameter" -msgstr "Inline:a rekursivt endast när sannolikheten för att ett anrop skall göras överskrider parametern" +msgstr "Inline:a rekursivt endast när sannolikheten för att ett anrop skall göras överskrider parametern" #: params.def:108 msgid "The maximum number of nested indirect inlining performed by early inliner" -msgstr "Det maximala antalet nästade indirekta inline:ingar som utförs av den tidiga inline:aren" +msgstr "Det maximala antalet nästade indirekta inline:ingar som utförs av den tidiga inline:aren" #: params.def:114 msgid "Probability that COMDAT function will be shared with different compilation unit" @@ -1682,100 +1682,100 @@ msgstr "Sannolikheten att COMDAT-funktionen kommer att delas med en annan kompil #: params.def:120 msgid "Maximum probability of the entry BB of split region (in percent relative to entry BB of the function) to make partial inlining happen" -msgstr "Maximala sannolikheten för för ingång i GB av delad region (i procent i förhållande till ingång i GB av funktionen) för att partiell inlining skall ske" +msgstr "Maximala sannolikheten för för ingÃ¥ng i GB av delad region (i procent i förhÃ¥llande till ingÃ¥ng i GB av funktionen) för att partiell inlining skall ske" #: params.def:127 msgid "If -fvariable-expansion-in-unroller is used, the maximum number of times that an individual variable will be expanded during loop unrolling" -msgstr "Om -fvariable-expansion-in-unroller är på, det maximala antalet gånger som en enskild variabel kommer expanderas under slingutrullning" +msgstr "Om -fvariable-expansion-in-unroller är pÃ¥, det maximala antalet gÃ¥nger som en enskild variabel kommer expanderas under slingutrullning" #: params.def:133 msgid "If -ftree-vectorize is used, the minimal loop bound of a loop to be considered for vectorization" -msgstr "Om -ftree-vectorize används, den minimala slinggränsen på en slinga för att den skall övervägas för vektorisering" +msgstr "Om -ftree-vectorize används, den minimala slinggränsen pÃ¥ en slinga för att den skall övervägas för vektorisering" #: params.def:144 msgid "The maximum number of instructions to consider to fill a delay slot" -msgstr "Det maximala antalet instruktioner att överväga för att fylla ett fördröjningsutrymme" +msgstr "Det maximala antalet instruktioner att överväga för att fylla ett fördröjningsutrymme" #: params.def:155 msgid "The maximum number of instructions to consider to find accurate live register information" -msgstr "Det maximala antalet instruktioner att överväga för att hitta korrekt information om aktiva register" +msgstr "Det maximala antalet instruktioner att överväga för att hitta korrekt information om aktiva register" #: params.def:165 msgid "The maximum length of scheduling's pending operations list" -msgstr "Den maximala längden på schemaläggarens lista över väntande operationer" +msgstr "Den maximala längden pÃ¥ schemaläggarens lista över väntande operationer" #: params.def:172 msgid "The maximum number of backtrack attempts the scheduler should make when modulo scheduling a loop" -msgstr "Det maximala antalet försök att gå tillbaka schemaläggaren skall göra vid moduloschemaläggning av en slinga" +msgstr "Det maximala antalet försök att gÃ¥ tillbaka schemaläggaren skall göra vid moduloschemaläggning av en slinga" #: params.def:177 msgid "The size of function body to be considered large" -msgstr "Storleken på en funktionskropp för att betraktas som stor" +msgstr "Storleken pÃ¥ en funktionskropp för att betraktas som stor" #: params.def:181 msgid "Maximal growth due to inlining of large function (in percent)" -msgstr "Maximal på grund av inline:ing av stora funktioner (i procent)" +msgstr "Maximal pÃ¥ grund av inline:ing av stora funktioner (i procent)" #: params.def:185 msgid "The size of translation unit to be considered large" -msgstr "Storleken på en översättningsenhet för att betraktas som stor" +msgstr "Storleken pÃ¥ en översättningsenhet för att betraktas som stor" #: params.def:189 msgid "How much can given compilation unit grow because of the inlining (in percent)" -msgstr "Hur mycket kan en given kompileringsenhet växa på grund av inline:ingen (i procent)" +msgstr "Hur mycket kan en given kompileringsenhet växa pÃ¥ grund av inline:ingen (i procent)" #: params.def:193 msgid "How much can given compilation unit grow because of the interprocedural constant propagation (in percent)" -msgstr "hur mycket kan en given kompileringsenhet växa på grund av interprocedurell konstantpropagering (i procent)" +msgstr "hur mycket kan en given kompileringsenhet växa pÃ¥ grund av interprocedurell konstantpropagering (i procent)" #: params.def:197 msgid "Maximal estimated growth of function body caused by early inlining of single call" -msgstr "Maximal uppskattad ökning av funktionskropp orsakad av tidigare inline:ing av enkla anrop" +msgstr "Maximal uppskattad ökning av funktionskropp orsakad av tidigare inline:ing av enkla anrop" #: params.def:201 msgid "The size of stack frame to be considered large" -msgstr "Storleken på en stackram för att betraktas som stor" +msgstr "Storleken pÃ¥ en stackram för att betraktas som stor" #: params.def:205 msgid "Maximal stack frame growth due to inlining (in percent)" -msgstr "Maximal storleksökning på stackram på grund av inline:ing (i procent)" +msgstr "Maximal storleksökning pÃ¥ stackram pÃ¥ grund av inline:ing (i procent)" #: params.def:212 msgid "The maximum amount of memory to be allocated by GCSE" -msgstr "Den maximala mängden minne som får allokeras av GCSE" +msgstr "Den maximala mängden minne som fÃ¥r allokeras av GCSE" #: params.def:219 msgid "The maximum ratio of insertions to deletions of expressions in GCSE" -msgstr "Det maximala förhållandet mellan insättningar och raderingar av uttryck i GCSE" +msgstr "Det maximala förhÃ¥llandet mellan insättningar och raderingar av uttryck i GCSE" #: params.def:230 msgid "The threshold ratio for performing partial redundancy elimination after reload" -msgstr "Tröskelförhållandet för att utföra partiell redundanselimination efter omläsning" +msgstr "TröskelförhÃ¥llandet för att utföra partiell redundanselimination efter omläsning" -# Undrar om jag fattat syftningen i "critical edges execution count" rätt! +# Undrar om jag fattat syftningen i "critical edges execution count" rätt! #: params.def:237 msgid "The threshold ratio of critical edges execution count that permit performing redundancy elimination after reload" -msgstr "Tröskelförhållandet av antal beräkningar av kritiska bågar som tillåter att göra redundanseliminering efter omläsning" +msgstr "TröskelförhÃ¥llandet av antal beräkningar av kritiska bÃ¥gar som tillÃ¥ter att göra redundanseliminering efter omläsning" #: params.def:245 msgid "Scaling factor in calculation of maximum distance an expression can be moved by GCSE optimizations" -msgstr "Skalfaktor vid beräkning av maximala distansen ett uttryck kan flyttas genom GCSE-optimeringar" +msgstr "Skalfaktor vid beräkning av maximala distansen ett uttryck kan flyttas genom GCSE-optimeringar" #: params.def:251 msgid "Cost at which GCSE optimizations will not constraint the distance an expression can travel" -msgstr "Kostnaden vid vilken GCSE-optimeringar inte kommer begränsa avståndet ett uttryck kan flytta" +msgstr "Kostnaden vid vilken GCSE-optimeringar inte kommer begränsa avstÃ¥ndet ett uttryck kan flytta" #: params.def:259 msgid "Maximum depth of search in the dominator tree for expressions to hoist" -msgstr "Maximalt djup på sökningen i dominansträd för uttryck att hissa upp" +msgstr "Maximalt djup pÃ¥ sökningen i dominansträd för uttryck att hissa upp" #: params.def:271 msgid "The maximum number of instructions to consider to unroll in a loop" -msgstr "Det maximala antalet instruktioner för att överväga att rulla ut i en slinga" +msgstr "Det maximala antalet instruktioner för att överväga att rulla ut i en slinga" #: params.def:277 msgid "The maximum number of instructions to consider to unroll in a loop on average" -msgstr "Det maximala antalet instruktioner för att överväga att rulle ut i en slinga i genomsnitt" +msgstr "Det maximala antalet instruktioner för att överväga att rulle ut i en slinga i genomsnitt" #: params.def:282 msgid "The maximum number of unrollings of a single loop" @@ -1795,100 +1795,100 @@ msgstr "Det maximala antalet instruktioner i en helt avskalad slinga" #: params.def:302 msgid "The maximum number of peelings of a single loop that is peeled completely" -msgstr "Det maximala antalet avskalningar av en enskild slinga som är helt avskalad" +msgstr "Det maximala antalet avskalningar av en enskild slinga som är helt avskalad" #: params.def:307 msgid "The maximum number of insns of a peeled loop that rolls only once" -msgstr "Det maximala antalet instruktioner i en avskalad slinga som bara snurrar en gång" +msgstr "Det maximala antalet instruktioner i en avskalad slinga som bara snurrar en gÃ¥ng" #: params.def:312 msgid "The maximum depth of a loop nest we completely peel" -msgstr "Det maximala djupet av nästade slingor som vi skalar helt" +msgstr "Det maximala djupet av nästade slingor som vi skalar helt" #: params.def:318 msgid "The maximum number of insns of an unswitched loop" -msgstr "Det maximala antalet instruktioner i en oväxlad slinga" +msgstr "Det maximala antalet instruktioner i en oväxlad slinga" #: params.def:323 msgid "The maximum number of unswitchings in a single loop" -msgstr "Det maximala antalet omväxlingar i en enskild slinga" +msgstr "Det maximala antalet omväxlingar i en enskild slinga" -# Är syftningarna rätt här? +# Är syftningarna rätt här? #: params.def:330 msgid "Bound on the number of iterations the brute force # of iterations analysis algorithm evaluates" -msgstr "Begränsning på antalet iterationer som utvärderas av råstyrkealgoritmen för att analysera antalet iterationer" +msgstr "Begränsning pÃ¥ antalet iterationer som utvärderas av rÃ¥styrkealgoritmen för att analysera antalet iterationer" #: params.def:336 msgid "Bound on the cost of an expression to compute the number of iterations" -msgstr "Begränsningen av kostnaden för ett uttryck för att beräkna antalet iterationer" +msgstr "Begränsningen av kostnaden för ett uttryck för att beräkna antalet iterationer" #: params.def:342 msgid "A factor for tuning the upper bound that swing modulo scheduler uses for scheduling a loop" -msgstr "En faktor för att trimma den övre gränsen som pendlingsmolduloschemaläggaren använder för att schemalägga en slinga" +msgstr "En faktor för att trimma den övre gränsen som pendlingsmolduloschemaläggaren använder för att schemalägga en slinga" #: params.def:347 msgid "The minimum value of stage count that swing modulo scheduler will generate." -msgstr "Minimivärdet på steglängden som penlingsschemaläggaren kommer generera." +msgstr "Minimivärdet pÃ¥ steglängden som penlingsschemaläggaren kommer generera." #: params.def:351 msgid "The number of cycles the swing modulo scheduler considers when checking conflicts using DFA" -msgstr "Antalet cykler som pendlingsschemaläggaren beaktar när den söker efter konflikter med DFA" +msgstr "Antalet cykler som pendlingsschemaläggaren beaktar när den söker efter konflikter med DFA" #: params.def:355 msgid "A threshold on the average loop count considered by the swing modulo scheduler" -msgstr "Ett tröskelvärde på det genomsnittliga antalet varv som beaktas av pendlingsmoduloschemaläggaren" +msgstr "Ett tröskelvärde pÃ¥ det genomsnittliga antalet varv som beaktas av pendlingsmoduloschemaläggaren" #: params.def:360 msgid "Select fraction of the maximal count of repetitions of basic block in program given basic block needs to have to be considered hot" -msgstr "Välj andel av det maximala antalet repetitioner av grundblock i program som givet grundblock måste ha för att anses hett" +msgstr "Välj andel av det maximala antalet repetitioner av grundblock i program som givet grundblock mÃ¥ste ha för att anses hett" #: params.def:364 msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot" -msgstr "Välj andel av den maximala exekveringsfrekvensen av grundblock i funktion givet grundblock måste ha för att anses hett" +msgstr "Välj andel av den maximala exekveringsfrekvensen av grundblock i funktion givet grundblock mÃ¥ste ha för att anses hett" #: params.def:369 msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block get alignment" -msgstr "Välj andel av den maximala exekveringsfrekvensen av grundblock i funktion givet grundblock måste ha för att få justering" +msgstr "Välj andel av den maximala exekveringsfrekvensen av grundblock i funktion givet grundblock mÃ¥ste ha för att fÃ¥ justering" #: params.def:374 msgid "Loops iterating at least selected number of iterations will get loop alignement." -msgstr "Slingor som itererar åtminstone det valda antalet gånger kommer att få slingjustering." +msgstr "Slingor som itererar Ã¥tminstone det valda antalet gÃ¥nger kommer att fÃ¥ slingjustering." #: params.def:390 msgid "The maximum number of loop iterations we predict statically" -msgstr "Det maximala antalet slingiterationer vi förutsäger statiskt" +msgstr "Det maximala antalet slingiterationer vi förutsäger statiskt" #: params.def:394 msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available" -msgstr "Andelen av funktion i procent, viktad efter exekveringsfrekvens, som måste täckas av spårinformation. Används när profileringsdata är tillgängligt" +msgstr "Andelen av funktion i procent, viktad efter exekveringsfrekvens, som mÃ¥ste täckas av spÃ¥rinformation. Används när profileringsdata är tillgängligt" #: params.def:398 msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available" -msgstr "Andelen av funktion i procent, viktad efter exekveringsfrekvens, som måste täckas av spårinformation. Används när profileringsdata inte är tillgängligt" +msgstr "Andelen av funktion i procent, viktad efter exekveringsfrekvens, som mÃ¥ste täckas av spÃ¥rinformation. Används när profileringsdata inte är tillgängligt" #: params.def:402 msgid "Maximal code growth caused by tail duplication (in percent)" -msgstr "Maximal kodtillväxt orsakad av svansduplicering (i procent)" +msgstr "Maximal kodtillväxt orsakad av svansduplicering (i procent)" #: params.def:406 msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)" -msgstr "Stoppa omvänd tillväxt om den omvända sannolikheten av bästa båge är mindre än detta tröskelvärde (i procent)" +msgstr "Stoppa omvänd tillväxt om den omvända sannolikheten av bästa bÃ¥ge är mindre än detta tröskelvärde (i procent)" #: params.def:410 msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available" -msgstr "Stoppa framåttillväxt om sannolikheten av bästa båge är mindre än detta tröskelvärde (i procent). Används när profileringsdata är tillgänglig" +msgstr "Stoppa framÃ¥ttillväxt om sannolikheten av bästa bÃ¥ge är mindre än detta tröskelvärde (i procent). Används när profileringsdata är tillgänglig" #: params.def:414 msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available" -msgstr "Stoppa framåttillväxt om sannolikheten av bästa båge är mindre än detta tröskelvärde (i procent). Används när profileringsdata inte är tillgänglig" +msgstr "Stoppa framÃ¥ttillväxt om sannolikheten av bästa bÃ¥ge är mindre än detta tröskelvärde (i procent). Används när profileringsdata inte är tillgänglig" #: params.def:420 msgid "The maximum number of incoming edges to consider for crossjumping" -msgstr "Det maximala antalet ingående bågar att överväga för korshopp" +msgstr "Det maximala antalet ingÃ¥ende bÃ¥gar att överväga för korshopp" #: params.def:426 msgid "The minimum number of matching instructions to consider for crossjumping" -msgstr "Det minsta antal av matchande instruktioner att överväga för korshopp" +msgstr "Det minsta antal av matchande instruktioner att överväga för korshopp" #: params.def:432 msgid "The maximum expansion factor when copying basic blocks" @@ -1896,15 +1896,15 @@ msgstr "Den maximala expansionsfaktorn vid kopiering av grundblock" #: params.def:438 msgid "The maximum number of insns to duplicate when unfactoring computed gotos" -msgstr "Det maximala antalet instruktioner att duplicera vid avfaktorering av beräknade goto" +msgstr "Det maximala antalet instruktioner att duplicera vid avfaktorering av beräknade goto" #: params.def:444 msgid "The maximum length of path considered in cse" -msgstr "Den maximala längden på sökvägar som övervägs i cse" +msgstr "Den maximala längden pÃ¥ sökvägar som övervägs i cse" #: params.def:448 msgid "The maximum instructions CSE process before flushing" -msgstr "Det maximala antalet instruktioner CSE bearbetar före tömning" +msgstr "Det maximala antalet instruktioner CSE bearbetar före tömning" #: params.def:455 msgid "The minimum cost of an expensive expression in the loop invariant motion" @@ -1912,59 +1912,59 @@ msgstr "Den minsta kostnaden av ett dyrt uttryck vid flyttning av slinginvariant #: params.def:464 msgid "Bound on number of candidates below that all candidates are considered in iv optimizations" -msgstr "Gräns för antalet kandidater under vilken alla kandidater övervägs i iv-optimeringar" +msgstr "Gräns för antalet kandidater under vilken alla kandidater övervägs i iv-optimeringar" #: params.def:472 msgid "Bound on number of iv uses in loop optimized in iv optimizations" -msgstr "Gräns för antal iv-användningar i en slinga optimerad i iv-optimeringar" +msgstr "Gräns för antal iv-användningar i en slinga optimerad i iv-optimeringar" #: params.def:480 msgid "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization" -msgstr "Om antalet kandidater i mängden är mindre, försöker vi alltid ta bort oanvända iv under deras optimering" +msgstr "Om antalet kandidater i mängden är mindre, försöker vi alltid ta bort oanvända iv under deras optimering" #: params.def:485 msgid "Bound on size of expressions used in the scalar evolutions analyzer" -msgstr "Gräns för storleken av uttryck som används i analyseraren av skalära uttryck" +msgstr "Gräns för storleken av uttryck som används i analyseraren av skalära uttryck" #: params.def:490 msgid "Bound on the complexity of the expressions in the scalar evolutions analyzer" -msgstr "Gräns på komplexiteten av uttryck som används i analyseraren av skalära uttryck" +msgstr "Gräns pÃ¥ komplexiteten av uttryck som används i analyseraren av skalära uttryck" #: params.def:495 msgid "Bound on the number of variables in Omega constraint systems" -msgstr "Gräns för antalet variabler i Omegasystem av bivillkor" +msgstr "Gräns för antalet variabler i Omegasystem av bivillkor" #: params.def:500 msgid "Bound on the number of inequalities in Omega constraint systems" -msgstr "Gräns för antalet olikheter i Omegasystem av bivillkor" +msgstr "Gräns för antalet olikheter i Omegasystem av bivillkor" #: params.def:505 msgid "Bound on the number of equalities in Omega constraint systems" -msgstr "Gräns för antalet likheter i Omegasystem av bivillkor" +msgstr "Gräns för antalet likheter i Omegasystem av bivillkor" #: params.def:510 msgid "Bound on the number of wild cards in Omega constraint systems" -msgstr "Gräns för antalet jokrar i Omegasystem av bivillkor" +msgstr "Gräns för antalet jokrar i Omegasystem av bivillkor" #: params.def:515 msgid "Bound on the size of the hash table in Omega constraint systems" -msgstr "Gräns för storleken på hash-tabellen i Omegasystem av bivillkor" +msgstr "Gräns för storleken pÃ¥ hash-tabellen i Omegasystem av bivillkor" #: params.def:520 msgid "Bound on the number of keys in Omega constraint systems" -msgstr "Gräns för antalet nycklar i Omegasystem av bivillkor" +msgstr "Gräns för antalet nycklar i Omegasystem av bivillkor" #: params.def:525 msgid "When set to 1, use expensive methods to eliminate all redundant constraints" -msgstr "När satt till 1, använd dyra metoder för att eliminera alla överflödiga bivillkor" +msgstr "När satt till 1, använd dyra metoder för att eliminera alla överflödiga bivillkor" #: params.def:530 msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alignment check" -msgstr "Gräns för antalet körtidskontroller som läggs in av vektoriserarens slingversionering för justeringskontroller" +msgstr "Gräns för antalet körtidskontroller som läggs in av vektoriserarens slingversionering för justeringskontroller" #: params.def:535 msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alias check" -msgstr "Gräns för antalet körtidskontroller som läggs in av vektoriserarens slingversionering för aliaskontroller" +msgstr "Gräns för antalet körtidskontroller som läggs in av vektoriserarens slingversionering för aliaskontroller" #: params.def:540 msgid "The maximum memory locations recorded by cselib" @@ -1972,147 +1972,147 @@ msgstr "Det maximala antalet minnesplatser noterade av cselib" #: params.def:553 msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap" -msgstr "Minsta heap-expansion för att utlösa skräpsamling, som en procent av den totala storleken på heap:en" +msgstr "Minsta heap-expansion för att utlösa skräpsamling, som en procent av den totala storleken pÃ¥ heap:en" #: params.def:558 msgid "Minimum heap size before we start collecting garbage, in kilobytes" -msgstr "Minsta heap-storlek före vi börjar samla skräp, i kilobyte" +msgstr "Minsta heap-storlek före vi börjar samla skräp, i kilobyte" #: params.def:566 msgid "The maximum number of instructions to search backward when looking for equivalent reload" -msgstr "Det största antalet instruktioner att söka bakåt för att leta efter ekvivalent omläsning" +msgstr "Det största antalet instruktioner att söka bakÃ¥t för att leta efter ekvivalent omläsning" #: params.def:571 msgid "Target block's relative execution frequency (as a percentage) required to sink a statement" -msgstr "Målet för blocks reletiva exekveringsfrekvens (som en procentsats) som behövs för att sänka en sats" +msgstr "MÃ¥let för blocks reletiva exekveringsfrekvens (som en procentsats) som behövs för att sänka en sats" #: params.def:576 params.def:586 msgid "The maximum number of blocks in a region to be considered for interblock scheduling" -msgstr "Det maximala antalet block i en region som övervägs för interblockschemaläggning" +msgstr "Det maximala antalet block i en region som övervägs för interblockschemaläggning" #: params.def:581 params.def:591 msgid "The maximum number of insns in a region to be considered for interblock scheduling" -msgstr "Det maximala antalet instruktioner i en region för att övervägas för interblockschemaläggning" +msgstr "Det maximala antalet instruktioner i en region för att övervägas för interblockschemaläggning" #: params.def:596 msgid "The minimum probability of reaching a source block for interblock speculative scheduling" -msgstr "Den minsta sannolikheten för att nå ett källkodsblock för spekulativ schemaläggning mellan block" +msgstr "Den minsta sannolikheten för att nÃ¥ ett källkodsblock för spekulativ schemaläggning mellan block" #: params.def:601 msgid "The maximum number of iterations through CFG to extend regions" -msgstr "Det maximala antal iterationer genom CFG för utökade regioner" +msgstr "Det maximala antal iterationer genom CFG för utökade regioner" #: params.def:606 msgid "The maximum conflict delay for an insn to be considered for speculative motion" -msgstr "Den maximala konfliktfördröjningen för att en instruktion skall övervägas för spekulativ förflyttning" +msgstr "Den maximala konfliktfördröjningen för att en instruktion skall övervägas för spekulativ förflyttning" #: params.def:611 msgid "The minimal probability of speculation success (in percents), so that speculative insn will be scheduled." -msgstr "Den minsta sannolikheten för spekulativ framgång (i procent) för att spekulativ instruktion skall schemaläggas." +msgstr "Den minsta sannolikheten för spekulativ framgÃ¥ng (i procent) för att spekulativ instruktion skall schemaläggas." #: params.def:616 msgid "The maximum size of the lookahead window of selective scheduling" -msgstr "Den maximala storleken på fönstret för framåtblickar vid selektiv schemaläggning" +msgstr "Den maximala storleken pÃ¥ fönstret för framÃ¥tblickar vid selektiv schemaläggning" #: params.def:621 msgid "Maximum number of times that an insn could be scheduled" -msgstr "Maximalt antal gånger som en instruktion kan schemaläggas" +msgstr "Maximalt antal gÃ¥nger som en instruktion kan schemaläggas" #: params.def:626 msgid "Maximum number of instructions in the ready list that are considered eligible for renaming" -msgstr "Det maximala antalet instruktioner i redolistan som betraktas som valbara för namnändring" +msgstr "Det maximala antalet instruktioner i redolistan som betraktas som valbara för namnändring" #: params.def:631 msgid "Minimal distance between possibly conflicting store and load" -msgstr "Minimala avståndet mellan lagring och läsning som kan vara i konflikt" +msgstr "Minimala avstÃ¥ndet mellan lagring och läsning som kan vara i konflikt" #: params.def:636 msgid "The maximum number of RTL nodes that can be recorded as combiner's last value" -msgstr "Det maximala antalet RTL-noder som kan noteras som kombinerarens sista värde" +msgstr "Det maximala antalet RTL-noder som kan noteras som kombinerarens sista värde" #: params.def:644 msgid "The upper bound for sharing integer constants" -msgstr "Övre gränsen för att dela heltalskonstanter" +msgstr "Övre gränsen för att dela heltalskonstanter" #: params.def:663 msgid "Minimum number of virtual mappings to consider switching to full virtual renames" -msgstr "Minsta antalet virtuella avbildningar för att beakta övergång till fullständig virtuell omnamning" +msgstr "Minsta antalet virtuella avbildningar för att beakta övergÃ¥ng till fullständig virtuell omnamning" #: params.def:668 msgid "Ratio between virtual mappings and virtual symbols to do full virtual renames" -msgstr "Förhållande mellan virtuella avbildningar och virtuella symboler för att göra fullständig virtuell omnamning" +msgstr "FörhÃ¥llande mellan virtuella avbildningar och virtuella symboler för att göra fullständig virtuell omnamning" #: params.def:673 msgid "The lower bound for a buffer to be considered for stack smashing protection" -msgstr "Den undre gränsen för att en buffer skall övervägas för skydd mot stacksprängning" +msgstr "Den undre gränsen för att en buffer skall övervägas för skydd mot stacksprängning" #: params.def:691 msgid "Maximum number of statements allowed in a block that needs to be duplicated when threading jumps" -msgstr "Maximalt antal satser som tillåts i ett block som behöver dubbleras när hopp trådas" +msgstr "Maximalt antal satser som tillÃ¥ts i ett block som behöver dubbleras när hopp trÃ¥das" #: params.def:700 msgid "Maximum number of fields in a structure before pointer analysis treats the structure as a single variable" -msgstr "Maximalt antal fält i en post före pekaranalys behandlar posten som en enda variabel" +msgstr "Maximalt antal fält i en post före pekaranalys behandlar posten som en enda variabel" #: params.def:705 msgid "The maximum number of instructions ready to be issued to be considered by the scheduler during the first scheduling pass" -msgstr "Det maximala antalet instruktioner redo att matas ut för att övervägas under det första schemaläggningspasset" +msgstr "Det maximala antalet instruktioner redo att matas ut för att övervägas under det första schemaläggningspasset" #: params.def:711 msgid "Maximum number of active local stores in RTL dead store elimination" -msgstr "Maximalt antal aktiva lokala lagringar i RTL vid eliminering av döda lagringar" +msgstr "Maximalt antal aktiva lokala lagringar i RTL vid eliminering av döda lagringar" #: params.def:721 msgid "The number of insns executed before prefetch is completed" -msgstr "Antalet instruktioner som körs före förhandshämtning (prefetch) är klar" +msgstr "Antalet instruktioner som körs före förhandshämtning (prefetch) är klar" #: params.def:728 msgid "The number of prefetches that can run at the same time" -msgstr "Antalet förhandshämtningar (prefetch) som kan vara igång samtidigt" +msgstr "Antalet förhandshämtningar (prefetch) som kan vara igÃ¥ng samtidigt" #: params.def:735 msgid "The size of L1 cache" -msgstr "Storleken på L1-cachen" +msgstr "Storleken pÃ¥ L1-cachen" #: params.def:742 msgid "The size of L1 cache line" -msgstr "Storleken på cache-raderna i L1" +msgstr "Storleken pÃ¥ cache-raderna i L1" #: params.def:749 msgid "The size of L2 cache" -msgstr "Storleken på L2-cachen" +msgstr "Storleken pÃ¥ L2-cachen" #: params.def:760 msgid "Whether to use canonical types" -msgstr "Om kanoniska typer skall användas" +msgstr "Om kanoniska typer skall användas" #: params.def:765 msgid "Maximum length of partial antic set when performing tree pre optimization" -msgstr "Maximal längd på partial förväntansmängd när föroptimeringar på träd görs" +msgstr "Maximal längd pÃ¥ partial förväntansmängd när föroptimeringar pÃ¥ träd görs" #: params.def:775 msgid "Maximum size of a SCC before SCCVN stops processing a function" -msgstr "Maximal storlek på en SCC före SCCVN slutar bearbeta en funktion" +msgstr "Maximal storlek pÃ¥ en SCC före SCCVN slutar bearbeta en funktion" #: params.def:780 msgid "Max loops number for regional RA" -msgstr "Maximalt slingantal för regional RA" +msgstr "Maximalt slingantal för regional RA" #: params.def:785 msgid "Max size of conflict table in MB" -msgstr "Maximal storlek på konflikttabell i MB" +msgstr "Maximal storlek pÃ¥ konflikttabell i MB" #: params.def:790 msgid "The number of registers in each class kept unused by loop invariant motion" -msgstr "Antalet register i varje klass som behålls oanvänt vid flyttning av slinginvariant" +msgstr "Antalet register i varje klass som behÃ¥lls oanvänt vid flyttning av slinginvariant" #: params.def:798 msgid "The maximum ratio between array size and switch branches for a switch conversion to take place" -msgstr "Det maximala förhållandet mellan vektorstorlek och switch-grenar för att en switch-konvertering skall ske" +msgstr "Det maximala förhÃ¥llandet mellan vektorstorlek och switch-grenar för att en switch-konvertering skall ske" #: params.def:806 msgid "size of tiles for loop blocking" -msgstr "storlek på bitar för slingblockning" +msgstr "storlek pÃ¥ bitar för slingblockning" #: params.def:813 msgid "maximum number of parameters in a SCoP" @@ -2124,51 +2124,51 @@ msgstr "maximalt antal grundblock per funktion att analyseras av Graphite" #: params.def:826 msgid "Maximum number of datarefs in loop for building loop data dependencies" -msgstr "Maximalt antal datareferenser i en slinga för att bygga slingdataberoenden" +msgstr "Maximalt antal datareferenser i en slinga för att bygga slingdataberoenden" #: params.def:833 msgid "Max basic blocks number in loop for loop invariant motion" -msgstr "Maximalt antal grundblock i slinga-för-slinga-invarianta förflyttningar" +msgstr "Maximalt antal grundblock i slinga-för-slinga-invarianta förflyttningar" #: params.def:839 msgid "Maximum number of instructions in basic block to be considered for SLP vectorization" -msgstr "Det maximala antalet instruktioner i grundblock för beaktas för SLP-vektorisering" +msgstr "Det maximala antalet instruktioner i grundblock för beaktas för SLP-vektorisering" #: params.def:844 msgid "Min. ratio of insns to prefetches to enable prefetching for a loop with an unknown trip count" -msgstr "Minsta förhållande av instruktioner till minnesoperationer för att aktivera förhandshämtning (prefetching) för en slinga med okänt antal turer" +msgstr "Minsta förhÃ¥llande av instruktioner till minnesoperationer för att aktivera förhandshämtning (prefetching) för en slinga med okänt antal turer" #: params.def:850 msgid "Min. ratio of insns to mem ops to enable prefetching in a loop" -msgstr "Minsta förhållande av instruktioner till minnesoperationer för att aktivera förhandshämtning (prefetching) i en slinga" +msgstr "Minsta förhÃ¥llande av instruktioner till minnesoperationer för att aktivera förhandshämtning (prefetching) i en slinga" #: params.def:857 msgid "Max. size of var tracking hash tables" -msgstr "Max storlek på hashtabell för variabelspårning" +msgstr "Max storlek pÃ¥ hashtabell för variabelspÃ¥rning" #: params.def:865 msgid "Max. recursion depth for expanding var tracking expressions" -msgstr "Maximalt rekursionsdjup för att expandera variiabelspårningsuttryck" +msgstr "Maximalt rekursionsdjup för att expandera variiabelspÃ¥rningsuttryck" #: params.def:872 msgid "The minimum UID to be used for a nondebug insn" -msgstr "Minsta UID som får användas för en icke-felsökningsinstruktion" +msgstr "Minsta UID som fÃ¥r användas för en icke-felsökningsinstruktion" #: params.def:877 msgid "Maximum allowed growth of size of new parameters ipa-sra replaces a pointer to an aggregate with" -msgstr "Största tillåtna storleksökning för nya parametrar som ipa-sra ersätter en pekare till ett aggregat med" +msgstr "Största tillÃ¥tna storleksökning för nya parametrar som ipa-sra ersätter en pekare till ett aggregat med" #: params.def:883 msgid "Size in bytes after which thread-local aggregates should be instrumented with the logging functions instead of save/restore pairs" -msgstr "Storlek e byt efter vilken trådlokala aggregat skal instrumenteras med loggningsfunktioner istället för spara/återställ-par" +msgstr "Storlek e byt efter vilken trÃ¥dlokala aggregat skal instrumenteras med loggningsfunktioner istället för spara/Ã¥terställ-par" #: params.def:890 msgid "Maximum size of a list of values associated with each parameter for interprocedural constant propagation" -msgstr "Maximal storlek för en lista på värden associerad med varje parameter för konstantpropagering mellan procedurer" +msgstr "Maximal storlek för en lista pÃ¥ värden associerad med varje parameter för konstantpropagering mellan procedurer" #: params.def:896 msgid "Threshold ipa-cp opportunity evaluation that is still considered beneficial to clone." -msgstr "Tröskelvärde för ipa-cp-tillfällesberäkning som fortfarande betraktas som fördelaktig att klona." +msgstr "Tröskelvärde för ipa-cp-tillfällesberäkning som fortfarande betraktas som fördelaktig att klona." #: params.def:904 msgid "Number of partitions the program should be split to" @@ -2176,51 +2176,51 @@ msgstr "Antal paritioner programmet skall delas upp i" #: params.def:909 msgid "Minimal size of a partition for LTO (in estimated instructions)" -msgstr "Minimal storlek på en paritition för LTO (i uppskattade instruktioner)" +msgstr "Minimal storlek pÃ¥ en paritition för LTO (i uppskattade instruktioner)" #: params.def:916 msgid "Maximum number of namespaces to search for alternatives when name lookup fails" -msgstr "Det maximala antalet namnrymder att söka i för alternativ när namnuppslagning misslyckas" +msgstr "Det maximala antalet namnrymder att söka i för alternativ när namnuppslagning misslyckas" #: params.def:923 msgid "Maximum number of conditional store pairs that can be sunk" -msgstr "Maximalt antal villkorliga lagringspar som kan sänkas" +msgstr "Maximalt antal villkorliga lagringspar som kan sänkas" #: params.def:931 msgid "The smallest number of different values for which it is best to use a jump-table instead of a tree of conditional branches, if 0, use the default for the machine" -msgstr "Det minsta antalet olika värden för vilka det är bäst att använda hopptabeller istället för ett träd med villkorliga grenar, om 0, använd standardvärdet för maskinen" +msgstr "Det minsta antalet olika värden för vilka det är bäst att använda hopptabeller istället för ett träd med villkorliga grenar, om 0, använd standardvärdet för maskinen" #: params.def:939 msgid "Allow new data races on loads to be introduced" -msgstr "Tillåt att nya datakapplöpningar vid laddningar introduceras" +msgstr "TillÃ¥t att nya datakapplöpningar vid laddningar introduceras" #: params.def:944 msgid "Allow new data races on stores to be introduced" -msgstr "Tillåt att nya datakapplöpningar vid lagringar introduceras" +msgstr "TillÃ¥t att nya datakapplöpningar vid lagringar introduceras" #: params.def:949 msgid "Allow new data races on packed data loads to be introduced" -msgstr "Tillåt att nya datakapplöpningar vid laddning av packade data introduceras" +msgstr "TillÃ¥t att nya datakapplöpningar vid laddning av packade data introduceras" #: params.def:954 msgid "Allow new data races on packed data stores to be introduced" -msgstr "Tillåt att nya datakapplöpningar vid lagring av packade data introduceras" +msgstr "TillÃ¥t att nya datakapplöpningar vid lagring av packade data introduceras" #: params.def:960 msgid "Set the maximum number of instructions executed in parallel in reassociated tree. If 0, use the target dependent heuristic." -msgstr "Sätt maximala antalet instruktioner som exekveras parallellt i ett reassociativt träd. Om 0, använd den målberoende heuristiken." +msgstr "Sätt maximala antalet instruktioner som exekveras parallellt i ett reassociativt träd. Om 0, använd den mÃ¥lberoende heuristiken." #: params.def:966 msgid "Maximum amount of similar bbs to compare a bb with" -msgstr "Maximalt antal liknande gb att jämföra ett gb med" +msgstr "Maximalt antal liknande gb att jämföra ett gb med" #: params.def:971 msgid "Maximum amount of iterations of the pass over a function" -msgstr "Maximalt antal iterationer för passet över en funktion" +msgstr "Maximalt antal iterationer för passet över en funktion" #: params.def:978 msgid "Maximum number of strings for which strlen optimization pass will track string lengths" -msgstr "Maximalt antal strängar för vilket strlen-optimeringspasset kommer följa stränglängder" +msgstr "Maximalt antal strängar för vilket strlen-optimeringspasset kommer följa stränglängder" #: c-family/c-format.c:367 msgid "format" @@ -2228,86 +2228,86 @@ msgstr "format" #: c-family/c-format.c:368 msgid "field width specifier" -msgstr "fältbreddsspecificerare" +msgstr "fältbreddsspecificerare" #: c-family/c-format.c:369 msgid "field precision specifier" -msgstr "fältprecisionsspecificerare" +msgstr "fältprecisionsspecificerare" #: c-family/c-format.c:483 c-family/c-format.c:507 config/i386/msformat-c.c:49 msgid "' ' flag" -msgstr "\" \"-flagga" +msgstr "†â€-flagga" #: c-family/c-format.c:483 c-family/c-format.c:507 config/i386/msformat-c.c:49 msgid "the ' ' printf flag" -msgstr "printf-flaggan \" \"" +msgstr "printf-flaggan †â€" #: c-family/c-format.c:484 c-family/c-format.c:508 c-family/c-format.c:542 #: c-family/c-format.c:605 config/i386/msformat-c.c:50 msgid "'+' flag" -msgstr "\"+\"-flagga" +msgstr "â€+â€-flagga" #: c-family/c-format.c:484 c-family/c-format.c:508 c-family/c-format.c:542 #: config/i386/msformat-c.c:50 msgid "the '+' printf flag" -msgstr "printf-flaggan \"+\"" +msgstr "printf-flaggan â€+â€" #: c-family/c-format.c:485 c-family/c-format.c:509 c-family/c-format.c:543 #: c-family/c-format.c:581 config/i386/msformat-c.c:51 #: config/i386/msformat-c.c:86 msgid "'#' flag" -msgstr "\"#\"-flagga" +msgstr "â€#â€-flagga" #: c-family/c-format.c:485 c-family/c-format.c:509 c-family/c-format.c:543 #: config/i386/msformat-c.c:51 msgid "the '#' printf flag" -msgstr "printf-flaggan \"#\"" +msgstr "printf-flaggan â€#â€" #: c-family/c-format.c:486 c-family/c-format.c:510 c-family/c-format.c:579 #: config/i386/msformat-c.c:52 msgid "'0' flag" -msgstr "\"0\"-flagga" +msgstr "â€0â€-flagga" #: c-family/c-format.c:486 c-family/c-format.c:510 config/i386/msformat-c.c:52 msgid "the '0' printf flag" -msgstr "printf-flaggan \"0\"" +msgstr "printf-flaggan â€0â€" #: c-family/c-format.c:487 c-family/c-format.c:511 c-family/c-format.c:578 #: c-family/c-format.c:608 config/i386/msformat-c.c:53 msgid "'-' flag" -msgstr "\"-\"-flagga" +msgstr "â€-â€-flagga" #: c-family/c-format.c:487 c-family/c-format.c:511 config/i386/msformat-c.c:53 msgid "the '-' printf flag" -msgstr "printf-flaggan \"-\"" +msgstr "printf-flaggan â€-â€" #: c-family/c-format.c:488 c-family/c-format.c:561 config/i386/msformat-c.c:54 #: config/i386/msformat-c.c:74 msgid "''' flag" -msgstr "\"'\"-flagga" +msgstr "â€'â€-flagga" #: c-family/c-format.c:488 config/i386/msformat-c.c:54 msgid "the ''' printf flag" -msgstr "printf-flaggan \"'\"" +msgstr "printf-flaggan â€'â€" #: c-family/c-format.c:489 c-family/c-format.c:562 msgid "'I' flag" -msgstr "\"I\"-flagga" +msgstr "â€Iâ€-flagga" #: c-family/c-format.c:489 msgid "the 'I' printf flag" -msgstr "printf-flaggan \"I\"" +msgstr "printf-flaggan â€Iâ€" #: c-family/c-format.c:490 c-family/c-format.c:512 c-family/c-format.c:559 #: c-family/c-format.c:582 c-family/c-format.c:609 config/sol2-c.c:45 #: config/i386/msformat-c.c:55 config/i386/msformat-c.c:72 msgid "field width" -msgstr "fältbredd" +msgstr "fältbredd" #: c-family/c-format.c:490 c-family/c-format.c:512 config/sol2-c.c:45 #: config/i386/msformat-c.c:55 msgid "field width in printf format" -msgstr "fältbredd i printf-format" +msgstr "fältbredd i printf-format" #: c-family/c-format.c:491 c-family/c-format.c:513 c-family/c-format.c:545 #: config/i386/msformat-c.c:56 @@ -2323,112 +2323,112 @@ msgstr "precision i printf-format" #: c-family/c-format.c:560 c-family/c-format.c:612 config/sol2-c.c:46 #: config/i386/msformat-c.c:57 config/i386/msformat-c.c:73 msgid "length modifier" -msgstr "längdmodifierare" +msgstr "längdmodifierare" #: c-family/c-format.c:492 c-family/c-format.c:514 c-family/c-format.c:546 #: config/sol2-c.c:46 config/i386/msformat-c.c:57 msgid "length modifier in printf format" -msgstr "längdmodifierare i printf-format" +msgstr "längdmodifierare i printf-format" #: c-family/c-format.c:544 msgid "'q' flag" -msgstr "\"q\"-flagga" +msgstr "â€qâ€-flagga" #: c-family/c-format.c:544 msgid "the 'q' diagnostic flag" -msgstr "diagnostikflaggan \"q\"" +msgstr "diagnostikflaggan â€qâ€" #: c-family/c-format.c:556 config/i386/msformat-c.c:70 msgid "assignment suppression" -msgstr "utelämnad tilldelning" +msgstr "utelämnad tilldelning" #: c-family/c-format.c:556 config/i386/msformat-c.c:70 msgid "the assignment suppression scanf feature" -msgstr "scanf-funktionen för utelämnande av tilldelning" +msgstr "scanf-funktionen för utelämnande av tilldelning" #: c-family/c-format.c:557 config/i386/msformat-c.c:71 msgid "'a' flag" -msgstr "\"a\"-flagga" +msgstr "â€aâ€-flagga" #: c-family/c-format.c:557 config/i386/msformat-c.c:71 msgid "the 'a' scanf flag" -msgstr "scanf-flaggan \"a\"" +msgstr "scanf-flaggan â€aâ€" #: c-family/c-format.c:558 msgid "'m' flag" -msgstr "\"m\"-flagga" +msgstr "â€mâ€-flagga" #: c-family/c-format.c:558 msgid "the 'm' scanf flag" -msgstr "scanf-flaggan \"m\"" +msgstr "scanf-flaggan â€mâ€" #: c-family/c-format.c:559 config/i386/msformat-c.c:72 msgid "field width in scanf format" -msgstr "fältbredd i scanf-format" +msgstr "fältbredd i scanf-format" #: c-family/c-format.c:560 config/i386/msformat-c.c:73 msgid "length modifier in scanf format" -msgstr "längdmodifierare i scanf-format" +msgstr "längdmodifierare i scanf-format" #: c-family/c-format.c:561 config/i386/msformat-c.c:74 msgid "the ''' scanf flag" -msgstr "scanf-flaggan \"'\"" +msgstr "scanf-flaggan â€'â€" #: c-family/c-format.c:562 msgid "the 'I' scanf flag" -msgstr "scanf-flaggan \"I\"" +msgstr "scanf-flaggan â€Iâ€" #: c-family/c-format.c:577 msgid "'_' flag" -msgstr "\"_\"-flagga" +msgstr "â€_â€-flagga" #: c-family/c-format.c:577 msgid "the '_' strftime flag" -msgstr "strftime-flaggan \"_\"" +msgstr "strftime-flaggan â€_â€" #: c-family/c-format.c:578 msgid "the '-' strftime flag" -msgstr "strftime-flaggan \"-\"" +msgstr "strftime-flaggan â€-â€" #: c-family/c-format.c:579 msgid "the '0' strftime flag" -msgstr "strftime-flaggan \"0\"" +msgstr "strftime-flaggan â€0â€" #: c-family/c-format.c:580 c-family/c-format.c:604 msgid "'^' flag" -msgstr "\"^\"-flagga" +msgstr "â€^â€-flagga" #: c-family/c-format.c:580 msgid "the '^' strftime flag" -msgstr "strftime-flaggan \"^\"" +msgstr "strftime-flaggan â€^â€" #: c-family/c-format.c:581 config/i386/msformat-c.c:86 msgid "the '#' strftime flag" -msgstr "strftime-flaggan \"#\"" +msgstr "strftime-flaggan â€#â€" #: c-family/c-format.c:582 msgid "field width in strftime format" -msgstr "fältbredd i strftime-format" +msgstr "fältbredd i strftime-format" #: c-family/c-format.c:583 msgid "'E' modifier" -msgstr "\"E\"-modifierare" +msgstr "â€Eâ€-modifierare" #: c-family/c-format.c:583 msgid "the 'E' strftime modifier" -msgstr "strftime-modifieraren \"E\"" +msgstr "strftime-modifieraren â€Eâ€" #: c-family/c-format.c:584 msgid "'O' modifier" -msgstr "\"O\"-modifierare" +msgstr "â€Oâ€-modifierare" #: c-family/c-format.c:584 msgid "the 'O' strftime modifier" -msgstr "strftime-modifieraren \"O\"" +msgstr "strftime-modifieraren â€Oâ€" #: c-family/c-format.c:585 msgid "the 'O' modifier" -msgstr "modifieraren \"O\"" +msgstr "modifieraren â€Oâ€" #: c-family/c-format.c:603 msgid "fill character" @@ -2440,55 +2440,55 @@ msgstr "utfyllnadstecken i strfmon-format" #: c-family/c-format.c:604 msgid "the '^' strfmon flag" -msgstr "strfmon-flaggan \"^\"" +msgstr "strfmon-flaggan â€^â€" #: c-family/c-format.c:605 msgid "the '+' strfmon flag" -msgstr "strfmon-flaggan \"+\"" +msgstr "strfmon-flaggan â€+â€" #: c-family/c-format.c:606 msgid "'(' flag" -msgstr "\"(\"-flagga" +msgstr "â€(â€-flagga" #: c-family/c-format.c:606 msgid "the '(' strfmon flag" -msgstr "strfmon-flaggan \"(\"" +msgstr "strfmon-flaggan â€(â€" #: c-family/c-format.c:607 msgid "'!' flag" -msgstr "\"!\"-flagga" +msgstr "â€!â€-flagga" #: c-family/c-format.c:607 msgid "the '!' strfmon flag" -msgstr "strfmon-flaggan \"!\"" +msgstr "strfmon-flaggan â€!â€" #: c-family/c-format.c:608 msgid "the '-' strfmon flag" -msgstr "strfmon-flaggan \"-\"" +msgstr "strfmon-flaggan â€-â€" #: c-family/c-format.c:609 msgid "field width in strfmon format" -msgstr "fältbredd i strfmon-format" +msgstr "fältbredd i strfmon-format" #: c-family/c-format.c:610 msgid "left precision" -msgstr "vänsterprecision" +msgstr "vänsterprecision" #: c-family/c-format.c:610 msgid "left precision in strfmon format" -msgstr "vänsterprecision i strfmon-format" +msgstr "vänsterprecision i strfmon-format" #: c-family/c-format.c:611 msgid "right precision" -msgstr "högerprecision" +msgstr "högerprecision" #: c-family/c-format.c:611 msgid "right precision in strfmon format" -msgstr "högerprecision i strfmon-format" +msgstr "högerprecision i strfmon-format" #: c-family/c-format.c:612 msgid "length modifier in strfmon format" -msgstr "längdmodifierare i strfmon-format" +msgstr "längdmodifierare i strfmon-format" #. Handle deferred options from command-line. #: c-family/c-opts.c:1357 fortran/cpp.c:581 @@ -2501,19 +2501,19 @@ msgstr "<typfel>" #: c-family/c-pretty-print.c:384 msgid "<unnamed-unsigned:" -msgstr "<namnlös-teckenlös:" +msgstr "<namnlös-teckenlös:" #: c-family/c-pretty-print.c:385 msgid "<unnamed-signed:" -msgstr "<namnlös-med-tecken:" +msgstr "<namnlös-med-tecken:" #: c-family/c-pretty-print.c:388 msgid "<unnamed-float:" -msgstr "<namnlöst-flyttal:" +msgstr "<namnlöst-flyttal:" #: c-family/c-pretty-print.c:391 msgid "<unnamed-fixed:" -msgstr "<namnlös-fixdecimal:" +msgstr "<namnlös-fixdecimal:" #: c-family/c-pretty-print.c:406 msgid "<typedef-error>" @@ -2529,89 +2529,89 @@ msgstr "<felaktigt-uttryck>" #: c-family/c-pretty-print.c:1232 cp/cxx-pretty-print.c:153 msgid "<return-value>" -msgstr "<returvärde>" +msgstr "<returvärde>" #: c-family/c-pretty-print.c:2138 cp/error.c:1802 cp/error.c:2711 msgid "<unknown>" -msgstr "<okänd>" +msgstr "<okänd>" #: config/alpha/alpha.c:5017 #, c-format msgid "invalid %%H value" -msgstr "ogiltigt %%H-värde" +msgstr "ogiltigt %%H-värde" #: config/alpha/alpha.c:5038 config/bfin/bfin.c:1423 #, c-format msgid "invalid %%J value" -msgstr "ogiltigt %%J-värde" +msgstr "ogiltigt %%J-värde" #: config/alpha/alpha.c:5068 config/ia64/ia64.c:5291 #, c-format msgid "invalid %%r value" -msgstr "ogiltigt %%r-värde" +msgstr "ogiltigt %%r-värde" #: config/alpha/alpha.c:5078 config/ia64/ia64.c:5245 #: config/rs6000/rs6000.c:15003 config/xtensa/xtensa.c:2350 #, c-format msgid "invalid %%R value" -msgstr "ogiltigt %%R-värde" +msgstr "ogiltigt %%R-värde" #: config/alpha/alpha.c:5084 config/rs6000/rs6000.c:14922 #: config/xtensa/xtensa.c:2317 #, c-format msgid "invalid %%N value" -msgstr "ogiltigt %%N-värde" +msgstr "ogiltigt %%N-värde" #: config/alpha/alpha.c:5092 config/rs6000/rs6000.c:14950 #, c-format msgid "invalid %%P value" -msgstr "ogiltigt %%P-värde" +msgstr "ogiltigt %%P-värde" #: config/alpha/alpha.c:5100 #, c-format msgid "invalid %%h value" -msgstr "ogiltigt %%h-värde" +msgstr "ogiltigt %%h-värde" #: config/alpha/alpha.c:5108 config/xtensa/xtensa.c:2343 #, c-format msgid "invalid %%L value" -msgstr "ogiltigt %%L-värde" +msgstr "ogiltigt %%L-värde" #: config/alpha/alpha.c:5147 config/rs6000/rs6000.c:14904 #, c-format msgid "invalid %%m value" -msgstr "ogiltigt %%m-värde" +msgstr "ogiltigt %%m-värde" #: config/alpha/alpha.c:5155 config/rs6000/rs6000.c:14912 #, c-format msgid "invalid %%M value" -msgstr "ogiltigt %%M-värde" +msgstr "ogiltigt %%M-värde" #: config/alpha/alpha.c:5199 #, c-format msgid "invalid %%U value" -msgstr "ogiltigt %%U-värde" +msgstr "ogiltigt %%U-värde" #: config/alpha/alpha.c:5207 config/alpha/alpha.c:5218 #: config/rs6000/rs6000.c:15011 #, c-format msgid "invalid %%s value" -msgstr "ogiltigt %%s-värde" +msgstr "ogiltigt %%s-värde" #: config/alpha/alpha.c:5229 #, c-format msgid "invalid %%C value" -msgstr "ogiltigt %%C-värde" +msgstr "ogiltigt %%C-värde" #: config/alpha/alpha.c:5266 config/rs6000/rs6000.c:14769 #, c-format msgid "invalid %%E value" -msgstr "ogiltigt %%E-värde" +msgstr "ogiltigt %%E-värde" #: config/alpha/alpha.c:5291 config/alpha/alpha.c:5339 #, c-format msgid "unknown relocation unspec" -msgstr "okänd avspecifikation av omlokalisering" +msgstr "okänd avspecifikation av omlokalisering" #: config/alpha/alpha.c:5300 config/rs6000/rs6000.c:15377 #: config/spu/spu.c:1744 @@ -2622,17 +2622,17 @@ msgstr "ogiltig %%xn-kod" #: config/arm/arm.c:17110 config/arm/arm.c:17128 #, c-format msgid "predicated Thumb instruction" -msgstr "förutsade Thumb-instruktion" +msgstr "förutsade Thumb-instruktion" #: config/arm/arm.c:17116 #, c-format msgid "predicated instruction in conditional sequence" -msgstr "förutsade instruktion i villkorlig sekvens" +msgstr "förutsade instruktion i villkorlig sekvens" #: config/arm/arm.c:17247 #, c-format msgid "Unsupported operand for code '%c'" -msgstr "Ej stödd operand för kod \"%c\"" +msgstr "Ej stödd operand för kod â€%câ€" #: config/arm/arm.c:17295 #, c-format @@ -2651,12 +2651,12 @@ msgstr "ogiltig skiftoperand" #: config/bfin/bfin.c:1480 config/bfin/bfin.c:1487 #, c-format msgid "invalid operand for code '%c'" -msgstr "ogiltig operand för kod \"%c\"" +msgstr "ogiltig operand för kod â€%câ€" #: config/arm/arm.c:17456 #, c-format msgid "instruction never executed" -msgstr "instruktionen aldrig utförd" +msgstr "instruktionen aldrig utförd" #: config/arm/arm.c:17799 #, c-format @@ -2674,11 +2674,11 @@ msgstr "funktioner kan inte reutnrera typen __fp16" #: config/avr/avr.c:1698 #, c-format msgid "address operand requires constraint for X, Y, or Z register" -msgstr "adressoperander kräver begränsning för X-, Y- eller Z-register" +msgstr "adressoperander kräver begränsning för X-, Y- eller Z-register" #: config/avr/avr.c:1851 msgid "operands to %T/%t must be reg + const_int:" -msgstr "operander till %T/%t måste vara reg + const_int:" +msgstr "operander till %T/%t mÃ¥ste vara reg + const_int:" #: config/avr/avr.c:1883 config/avr/avr.c:1938 msgid "bad address, not an I/O address:" @@ -2702,7 +2702,7 @@ msgstr "internt kompilatorfel. Felaktig adress:" #: config/avr/avr.c:1958 msgid "internal compiler error. Unknown mode:" -msgstr "internt kompilatorfel. Okänt läge:" +msgstr "internt kompilatorfel. Okänt läge:" #: config/avr/avr.c:2918 config/avr/avr.c:3491 config/avr/avr.c:3776 msgid "invalid insn:" @@ -2718,7 +2718,7 @@ msgstr "felaktig instruktion:" #: config/avr/avr.c:3099 config/avr/avr.c:3260 config/avr/avr.c:3415 #: config/avr/avr.c:3622 config/avr/avr.c:3715 config/avr/avr.c:3953 msgid "unknown move insn:" -msgstr "okänd move-instruktion:" +msgstr "okänd move-instruktion:" #: config/avr/avr.c:4367 msgid "bad shift insn:" @@ -2731,7 +2731,7 @@ msgstr "internt kompilatorfel. Felaktig skift:" #: config/bfin/bfin.c:1385 #, c-format msgid "invalid %%j value" -msgstr "ogiltigt %%j-värde" +msgstr "ogiltigt %%j-värde" #: config/bfin/bfin.c:1578 config/c6x/c6x.c:2290 #, c-format @@ -2749,35 +2749,35 @@ msgstr "%s" #: config/cris/cris.c:630 msgid "unexpected index-type in cris_print_index" -msgstr "oväntad indextyp i cris_print_index" +msgstr "oväntad indextyp i cris_print_index" #: config/cris/cris.c:647 msgid "unexpected base-type in cris_print_base" -msgstr "oväntat bastyp i cris_print_base" +msgstr "oväntat bastyp i cris_print_base" #: config/cris/cris.c:711 msgid "invalid operand for 'b' modifier" -msgstr "ogiltig operand för \"b\"-modifierare" +msgstr "ogiltig operand för â€bâ€-modifierare" #: config/cris/cris.c:728 msgid "invalid operand for 'o' modifier" -msgstr "ogiltig operand för \"o\"-modifierare" +msgstr "ogiltig operand för â€oâ€-modifierare" #: config/cris/cris.c:747 msgid "invalid operand for 'O' modifier" -msgstr "ogiltig operand för \"O\"-modifierare" +msgstr "ogiltig operand för â€Oâ€-modifierare" #: config/cris/cris.c:780 msgid "invalid operand for 'p' modifier" -msgstr "ogiltig operand för \"p\"-modifierare" +msgstr "ogiltig operand för â€pâ€-modifierare" #: config/cris/cris.c:819 msgid "invalid operand for 'z' modifier" -msgstr "ogiltig operand för \"z\"-modifierare" +msgstr "ogiltig operand för â€zâ€-modifierare" #: config/cris/cris.c:883 config/cris/cris.c:917 msgid "invalid operand for 'H' modifier" -msgstr "ogiltig operand för \"H\"-modifierare" +msgstr "ogiltig operand för â€Hâ€-modifierare" #: config/cris/cris.c:893 msgid "bad register" @@ -2785,47 +2785,47 @@ msgstr "felaktigt register" #: config/cris/cris.c:937 msgid "invalid operand for 'e' modifier" -msgstr "ogiltig operand för \"e\"-modifierare" +msgstr "ogiltig operand för â€eâ€-modifierare" #: config/cris/cris.c:954 msgid "invalid operand for 'm' modifier" -msgstr "ogiltig operand för \"m\"-modifierare" +msgstr "ogiltig operand för â€mâ€-modifierare" #: config/cris/cris.c:979 msgid "invalid operand for 'A' modifier" -msgstr "ogiltig operand för \"A\"-modifierare" +msgstr "ogiltig operand för â€Aâ€-modifierare" #: config/cris/cris.c:1002 msgid "invalid operand for 'D' modifier" -msgstr "ogiltig operand för \"D\"-modifierare" +msgstr "ogiltig operand för â€Dâ€-modifierare" #: config/cris/cris.c:1016 msgid "invalid operand for 'T' modifier" -msgstr "ogiltig operand för \"T\"-modifierare" +msgstr "ogiltig operand för â€Tâ€-modifierare" #: config/cris/cris.c:1036 config/moxie/moxie.c:181 msgid "invalid operand modifier letter" -msgstr "ogiltig operand för modifierarebokstav" +msgstr "ogiltig operand för modifierarebokstav" #: config/cris/cris.c:1093 msgid "unexpected multiplicative operand" -msgstr "oväntad multiplikativ operand" +msgstr "oväntad multiplikativ operand" #: config/cris/cris.c:1113 config/moxie/moxie.c:206 msgid "unexpected operand" -msgstr "oväntad operand" +msgstr "oväntad operand" #: config/cris/cris.c:1152 config/cris/cris.c:1162 msgid "unrecognized address" -msgstr "okänd adress" +msgstr "okänd adress" #: config/cris/cris.c:2434 msgid "unrecognized supposed constant" -msgstr "okänd förmodad konstant" +msgstr "okänd förmodad konstant" #: config/cris/cris.c:2811 config/cris/cris.c:2875 msgid "unexpected side-effects in address" -msgstr "oväntad sidoeffekt i adress" +msgstr "oväntad sidoeffekt i adress" #. Can't possibly get a GOT-needing-fixup for a function-call, #. right? @@ -2836,7 +2836,7 @@ msgstr "oidentifierbar call-operation" #: config/cris/cris.c:3762 #, c-format msgid "PIC register isn't set up" -msgstr "PIC-register är inte uppsatt" +msgstr "PIC-register är inte uppsatt" #. Unknown flag. #. Undocumented flag. @@ -2854,22 +2854,22 @@ msgstr "fr30_print_operand_address: ohanterad adress" #: config/fr30/fr30.c:527 #, c-format msgid "fr30_print_operand: unrecognized %%p code" -msgstr "fr30_print_operand: okänd %%p-kod" +msgstr "fr30_print_operand: okänd %%p-kod" #: config/fr30/fr30.c:547 #, c-format msgid "fr30_print_operand: unrecognized %%b code" -msgstr "fr30_print_operand: okänd %%b-kod" +msgstr "fr30_print_operand: okänd %%b-kod" #: config/fr30/fr30.c:568 #, c-format msgid "fr30_print_operand: unrecognized %%B code" -msgstr "fr30_print_operand: okänd %%B-kod" +msgstr "fr30_print_operand: okänd %%B-kod" #: config/fr30/fr30.c:576 #, c-format msgid "fr30_print_operand: invalid operand to %%A code" -msgstr "fr30_print_operand: ogiltig operand för %%A-kod" +msgstr "fr30_print_operand: ogiltig operand för %%A-kod" #: config/fr30/fr30.c:593 #, c-format @@ -2884,7 +2884,7 @@ msgstr "fr30_print_operand: ogiltig %%F-kod" #: config/fr30/fr30.c:617 #, c-format msgid "fr30_print_operand: unknown code" -msgstr "fr30_print_operand: okänd kod" +msgstr "fr30_print_operand: okänd kod" #: config/fr30/fr30.c:645 config/fr30/fr30.c:654 config/fr30/fr30.c:665 #: config/fr30/fr30.c:678 @@ -2916,31 +2916,31 @@ msgstr "felaktig instruktion i frv_print_operand, felaktig const_double" #: config/frv/frv.c:2850 msgid "bad insn to frv_print_operand, 'e' modifier:" -msgstr "felaktig instruktion till frv_print_operand, \"e\"-modifierare:" +msgstr "felaktig instruktion till frv_print_operand, â€eâ€-modifierare:" #: config/frv/frv.c:2858 msgid "bad insn to frv_print_operand, 'F' modifier:" -msgstr "felaktig instruktion till frv_print_operand, \"F\"-modifierare:" +msgstr "felaktig instruktion till frv_print_operand, â€Fâ€-modifierare:" #: config/frv/frv.c:2874 msgid "bad insn to frv_print_operand, 'f' modifier:" -msgstr "felaktig instruktion till frv_print_operand, \"f\"-modifierare:" +msgstr "felaktig instruktion till frv_print_operand, â€fâ€-modifierare:" #: config/frv/frv.c:2888 msgid "bad insn to frv_print_operand, 'g' modifier:" -msgstr "felaktig instruktion till frv_print_operand, \"g\"-modifierare:" +msgstr "felaktig instruktion till frv_print_operand, â€gâ€-modifierare:" #: config/frv/frv.c:2936 msgid "bad insn to frv_print_operand, 'L' modifier:" -msgstr "felaktig instruktion till frv_print_operand, \"L\"-modifierare:" +msgstr "felaktig instruktion till frv_print_operand, â€Lâ€-modifierare:" #: config/frv/frv.c:2949 msgid "bad insn to frv_print_operand, 'M/N' modifier:" -msgstr "felaktig instruktion till frv_print_operand, \"M/N\"-modifierare:" +msgstr "felaktig instruktion till frv_print_operand, â€M/Nâ€-modifierare:" #: config/frv/frv.c:2970 msgid "bad insn to frv_print_operand, 'O' modifier:" -msgstr "felaktig instruktion till frv_print_operand, \"O\"-modifierare:" +msgstr "felaktig instruktion till frv_print_operand, â€Oâ€-modifierare:" #: config/frv/frv.c:2988 msgid "bad insn to frv_print_operand, P modifier:" @@ -2956,7 +2956,7 @@ msgstr "felaktig instruktion i frv_print_operand, 0-fall" #: config/frv/frv.c:3044 msgid "frv_print_operand: unknown code" -msgstr "frv_print_operand: okänd kod" +msgstr "frv_print_operand: okänd kod" #: config/frv/frv.c:4450 msgid "bad output_move_single operand" @@ -2978,100 +2978,100 @@ msgstr "ogiltig UNSPEC som operand" #: config/i386/i386.c:13721 #, c-format msgid "'%%&' used without any local dynamic TLS references" -msgstr "\"%%&\" använt utan någon lokal dynamisk TLS-referens" +msgstr "â€%%&†använt utan nÃ¥gon lokal dynamisk TLS-referens" #: config/i386/i386.c:13812 config/i386/i386.c:13887 #, c-format msgid "invalid operand size for operand code '%c'" -msgstr "ogiltig operandstorlek för operandkod \"%c\"" +msgstr "ogiltig operandstorlek för operandkod â€%câ€" #: config/i386/i386.c:13882 #, c-format msgid "invalid operand type used with operand code '%c'" -msgstr "ogiltig operandtyp vid operandkod \"%c\"" +msgstr "ogiltig operandtyp vid operandkod â€%câ€" #: config/i386/i386.c:13963 config/i386/i386.c:14003 #, c-format msgid "operand is not a condition code, invalid operand code 'D'" -msgstr "operand är inte en villkorskod, ogiltig operandkod \"D\"" +msgstr "operand är inte en villkorskod, ogiltig operandkod â€Dâ€" #: config/i386/i386.c:14029 #, c-format msgid "operand is neither a constant nor a condition code, invalid operand code 'C'" -msgstr "operand är varken en konstant eller en villkorskod, ogiltig operandkod \"C\"" +msgstr "operand är varken en konstant eller en villkorskod, ogiltig operandkod â€Câ€" #: config/i386/i386.c:14039 #, c-format msgid "operand is neither a constant nor a condition code, invalid operand code 'F'" -msgstr "operand är varken en konstant eller en villkorskod, ogiltig operandkod \"F\"" +msgstr "operand är varken en konstant eller en villkorskod, ogiltig operandkod â€Fâ€" #: config/i386/i386.c:14057 #, c-format msgid "operand is neither a constant nor a condition code, invalid operand code 'c'" -msgstr "operand är varken en konstant eller en villkorskod, ogiltig operandkod \"c\"" +msgstr "operand är varken en konstant eller en villkorskod, ogiltig operandkod â€câ€" #: config/i386/i386.c:14067 #, c-format msgid "operand is neither a constant nor a condition code, invalid operand code 'f'" -msgstr "operand är varken en konstant eller en villkorskod, ogiltig operandkod \"f\"" +msgstr "operand är varken en konstant eller en villkorskod, ogiltig operandkod â€fâ€" #: config/i386/i386.c:14170 #, c-format msgid "operand is not a condition code, invalid operand code 'Y'" -msgstr "operanden är inte en villkorskod, ogiltig operandkod \"Y\"" +msgstr "operanden är inte en villkorskod, ogiltig operandkod â€Yâ€" #: config/i386/i386.c:14200 #, c-format msgid "invalid operand code '%c'" -msgstr "ogiltig operandkod \"%c\"" +msgstr "ogiltig operandkod â€%câ€" #: config/i386/i386.c:14255 #, c-format msgid "invalid constraints for operand" -msgstr "ogiltig begränsning för operand" +msgstr "ogiltig begränsning för operand" #: config/i386/i386.c:23269 msgid "unknown insn mode" -msgstr "okänt instruktionsläge" +msgstr "okänt instruktionsläge" #: config/i386/i386-interix.h:78 config/i386/i386.opt:228 msgid "Use native (MS) bitfield layout" -msgstr "Använd inbyggd (MS) bitfältslayout" +msgstr "Använd inbyggd (MS) bitfältslayout" #: config/i386/i386-interix.h:79 msgid "Use gcc default bitfield layout" -msgstr "Använd gcc:s standardbitfältslayout" +msgstr "Använd gcc:s standardbitfältslayout" #. If the environment variable DJDIR is not defined, then DJGPP is not installed correctly and GCC will quickly become confused with the default prefix settings. Report the problem now so the user doesn't receive deceptive "file not found" error messages later. #. DJDIR is automatically defined by the DJGPP environment config file pointed to by the environment variable DJGPP. Examine DJGPP to try and figure out what's wrong. #: config/i386/xm-djgpp.h:61 #, c-format msgid "environment variable DJGPP not defined" -msgstr "omgivningsvariabeln DJGPP är inte definierad" +msgstr "omgivningsvariabeln DJGPP är inte definierad" #: config/i386/xm-djgpp.h:63 #, c-format msgid "environment variable DJGPP points to missing file '%s'" -msgstr "omgivningsvariabeln DJGPP pekar på fil \"%s\" som saknas" +msgstr "omgivningsvariabeln DJGPP pekar pÃ¥ fil â€%s†som saknas" #: config/i386/xm-djgpp.h:66 #, c-format msgid "environment variable DJGPP points to corrupt file '%s'" -msgstr "omgivningsvariabeln DJGPP pekar på fil \"%s\" som är trasig" +msgstr "omgivningsvariabeln DJGPP pekar pÃ¥ fil â€%s†som är trasig" #: config/ia64/ia64.c:5173 #, c-format msgid "invalid %%G mode" -msgstr "ogiltigt %%G-läge" +msgstr "ogiltigt %%G-läge" #: config/ia64/ia64.c:5343 #, c-format msgid "ia64_print_operand: unknown code" -msgstr "ia64_print_operand: okänd kod" +msgstr "ia64_print_operand: okänd kod" #: config/ia64/ia64.c:10912 msgid "invalid conversion from %<__fpreg%>" -msgstr "ogiltig konvertering från %<__fpreg%>" +msgstr "ogiltig konvertering frÃ¥n %<__fpreg%>" #: config/ia64/ia64.c:10915 msgid "invalid conversion to %<__fpreg%>" @@ -3079,7 +3079,7 @@ msgstr "ogiltig konvertering till %<__fpreg%>" #: config/ia64/ia64.c:10928 config/ia64/ia64.c:10939 msgid "invalid operation on %<__fpreg%>" -msgstr "ogiltig operation på %<__fpreg%>" +msgstr "ogiltig operation pÃ¥ %<__fpreg%>" #: config/iq2000/iq2000.c:3130 #, c-format @@ -3089,17 +3089,17 @@ msgstr "ogiltig %%P-operand" #: config/iq2000/iq2000.c:3138 config/rs6000/rs6000.c:14940 #, c-format msgid "invalid %%p value" -msgstr "ogiltigt %%p-värde" +msgstr "ogiltigt %%p-värde" #: config/iq2000/iq2000.c:3195 #, c-format msgid "invalid use of %%d, %%x, or %%X" -msgstr "ogiltig användning av %%d, %%x eller %%x" +msgstr "ogiltig användning av %%d, %%x eller %%x" #: config/lm32/lm32.c:521 #, c-format msgid "only 0.0 can be loaded as an immediate" -msgstr "endast 0.0 kan läsas in som en omedelbar" +msgstr "endast 0.0 kan läsas in som en omedelbar" #: config/lm32/lm32.c:591 msgid "bad operand" @@ -3107,11 +3107,11 @@ msgstr "felaktig operand" #: config/lm32/lm32.c:603 msgid "can't use non gp relative absolute address" -msgstr "kan inte använda icke-gp-relativa absoluta adresser" +msgstr "kan inte använda icke-gp-relativa absoluta adresser" #: config/lm32/lm32.c:607 msgid "invalid addressing mode" -msgstr "ogiltigt adresseringsläge" +msgstr "ogiltigt adresseringsläge" #: config/m32r/m32r.c:2066 #, c-format @@ -3126,16 +3126,16 @@ msgstr "ogiltig operand till %%p-kod" #: config/m32r/m32r.c:2096 #, c-format msgid "invalid operand to %%R code" -msgstr "ogiltig operand för %%R-kod" +msgstr "ogiltig operand för %%R-kod" #: config/m32r/m32r.c:2119 #, c-format msgid "invalid operand to %%H/%%L code" -msgstr "ogiltig operand för %%H/%%L-kod" +msgstr "ogiltig operand för %%H/%%L-kod" #: config/m32r/m32r.c:2128 msgid "bad insn for 'A'" -msgstr "felaktig instruktion för \"A\"" +msgstr "felaktig instruktion för â€Aâ€" #: config/m32r/m32r.c:2175 #, c-format @@ -3145,7 +3145,7 @@ msgstr "ogiltig operand till %%T/%%B-kod" #: config/m32r/m32r.c:2190 #, c-format msgid "invalid operand to %%U code" -msgstr "ogiltig operand för %%U-kod" +msgstr "ogiltig operand för %%U-kod" #: config/m32r/m32r.c:2198 #, c-format @@ -3154,15 +3154,15 @@ msgstr "ogiltig operand till %%N-kod" #: config/m32r/m32r.c:2231 msgid "pre-increment address is not a register" -msgstr "förinkrementeringsadress är inte ett register" +msgstr "förinkrementeringsadress är inte ett register" #: config/m32r/m32r.c:2238 msgid "pre-decrement address is not a register" -msgstr "fördekrementeringsadress är inte ett register" +msgstr "fördekrementeringsadress är inte ett register" #: config/m32r/m32r.c:2245 msgid "post-increment address is not a register" -msgstr "efterinkrementeringsadress är inte ett register" +msgstr "efterinkrementeringsadress är inte ett register" #: config/m32r/m32r.c:2321 config/m32r/m32r.c:2335 #: config/rs6000/rs6000.c:24531 @@ -3171,7 +3171,7 @@ msgstr "felaktig adress" #: config/m32r/m32r.c:2340 msgid "lo_sum not of register" -msgstr "lo_sum inte från register" +msgstr "lo_sum inte frÃ¥n register" #: config/mep/mep.c:3358 #, c-format @@ -3181,26 +3181,26 @@ msgstr "ogiltig %%L-kod" #: config/microblaze/microblaze.c:1734 #, c-format msgid "unknown punctuation '%c'" -msgstr "okänd interpunktion \"%c\"" +msgstr "okänd interpunktion â€%câ€" #: config/microblaze/microblaze.c:1743 #, c-format msgid "null pointer" -msgstr "null-pekare" +msgstr "nollpekare" #: config/microblaze/microblaze.c:1778 #, c-format msgid "PRINT_OPERAND, invalid insn for %%C" -msgstr "PRINT_OPERAND, ogiltig instruktion för %%C" +msgstr "PRINT_OPERAND, ogiltig instruktion för %%C" #: config/microblaze/microblaze.c:1807 #, c-format msgid "PRINT_OPERAND, invalid insn for %%N" -msgstr "PRINT_OPERAND, ogiltig instruktion för %%N" +msgstr "PRINT_OPERAND, ogiltig instruktion för %%N" #: config/microblaze/microblaze.c:1827 config/microblaze/microblaze.c:1988 msgid "insn contains an invalid address !" -msgstr "instruktionen innehåller en ogiltig adress!" +msgstr "instruktionen innehÃ¥ller en ogiltig adress!" #: config/microblaze/microblaze.c:1841 config/microblaze/microblaze.c:2028 #: config/xtensa/xtensa.c:2437 @@ -3210,19 +3210,19 @@ msgstr "ogiltig adress" #: config/microblaze/microblaze.c:1940 #, c-format msgid "letter %c was found & insn was not CONST_INT" -msgstr "tecknet %c upptäcktes och instruktionen var inte CONST_INT" +msgstr "tecknet %c upptäcktes och instruktionen var inte CONST_INT" #: config/mips/mips.c:7547 config/mips/mips.c:7568 config/mips/mips.c:7688 #, c-format msgid "'%%%c' is not a valid operand prefix" -msgstr "%%%c är inte ett giltigt operandprefix" +msgstr "%%%c är inte ett giltigt operandprefix" #: config/mips/mips.c:7625 config/mips/mips.c:7632 config/mips/mips.c:7639 #: config/mips/mips.c:7646 config/mips/mips.c:7706 config/mips/mips.c:7720 #: config/mips/mips.c:7733 config/mips/mips.c:7742 #, c-format msgid "invalid use of '%%%c'" -msgstr "felaktig användning av \"%%%c\"" +msgstr "felaktig användning av â€%%%câ€" #: config/mips/mips.c:7964 msgid "mips_debugger_offset called with non stack/frame/arg pointer" @@ -3230,19 +3230,19 @@ msgstr "mips_debugger_offset anropad med en icke-stack/ram/arg-pekare" #: config/mmix/mmix.c:1611 config/mmix/mmix.c:1741 msgid "MMIX Internal: Expected a CONST_INT, not this" -msgstr "MMIX-internt: Förväntade en CONST_INT, inte detta" +msgstr "MMIX-internt: Förväntade en CONST_INT, inte detta" #: config/mmix/mmix.c:1690 msgid "MMIX Internal: Bad value for 'm', not a CONST_INT" -msgstr "MMIX-internt: Felaktigt värde för \"m\", inte en CONST_INT" +msgstr "MMIX-internt: Felaktigt värde för â€mâ€, inte en CONST_INT" #: config/mmix/mmix.c:1709 msgid "MMIX Internal: Expected a register, not this" -msgstr "MMIX-internt: Förväntade ett register, inte detta" +msgstr "MMIX-internt: Förväntade ett register, inte detta" #: config/mmix/mmix.c:1719 msgid "MMIX Internal: Expected a constant, not this" -msgstr "MMIX-internt: Förväntade en konstant, inte detta" +msgstr "MMIX-internt: Förväntade en konstant, inte detta" #. We need the original here. #: config/mmix/mmix.c:1803 @@ -3251,31 +3251,31 @@ msgstr "MMIX-internt: Kan inte avkoda denna operand" #: config/mmix/mmix.c:1860 msgid "MMIX Internal: This is not a recognized address" -msgstr "MMIX-internt: Detta är inte en känd adress" +msgstr "MMIX-internt: Detta är inte en känd adress" #: config/mmix/mmix.c:2735 msgid "MMIX Internal: Trying to output invalidly reversed condition:" -msgstr "MMIX-internt: Försöker mata ut felaktigt omvänt villkor:" +msgstr "MMIX-internt: Försöker mata ut felaktigt omvänt villkor:" #: config/mmix/mmix.c:2742 msgid "MMIX Internal: What's the CC of this?" -msgstr "MMIX-internt: Vad är CC:t för detta?" +msgstr "MMIX-internt: Vad är CC:t för detta?" #: config/mmix/mmix.c:2746 msgid "MMIX Internal: What is the CC of this?" -msgstr "MMIX-internt: Vad är CC:t för detta?" +msgstr "MMIX-internt: Vad är CC:t för detta?" #: config/mmix/mmix.c:2810 msgid "MMIX Internal: This is not a constant:" -msgstr "MMIX-internt: Detta är inte en konstant:" +msgstr "MMIX-internt: Detta är inte en konstant:" #: config/picochip/picochip.c:2665 msgid "picochip_print_memory_address - Operand isn't memory based" -msgstr "picochip_print_memory_address - Operand är inte minnesbaserad" +msgstr "picochip_print_memory_address - Operand är inte minnesbaserad" #: config/picochip/picochip.c:2924 msgid "Unknown mode in print_operand (CONST_DOUBLE) :" -msgstr "Okänt läge i print_operand (COUNST_DOUBLE) :" +msgstr "Okänt läge i print_operand (COUNST_DOUBLE) :" #: config/picochip/picochip.c:2970 config/picochip/picochip.c:3002 msgid "Bad address, not (reg+disp):" @@ -3288,37 +3288,37 @@ msgstr "Felaktig adress, inte register:" #: config/rl78/rl78.c:1204 config/rl78/rl78.c:1243 #, c-format msgid "q/Q modifiers invalid for symbol references" -msgstr "q/Q-modifierare är ogiltiga för symbolreferenser" +msgstr "q/Q-modifierare är ogiltiga för symbolreferenser" #: config/rs6000/host-darwin.c:95 #, c-format msgid "Out of stack space.\n" -msgstr "Slut på stackutrymme.\n" +msgstr "Slut pÃ¥ stackutrymme.\n" #: config/rs6000/host-darwin.c:116 #, c-format msgid "Try running '%s' in the shell to raise its limit.\n" -msgstr "Försök köra \"%s\" i skalet för att öka dess gräns.\n" +msgstr "Försök köra â€%s†i skalet för att öka dess gräns.\n" #: config/rs6000/rs6000.c:2745 msgid "-mvsx requires hardware floating point" -msgstr "-mvsx kräver hårdvaruflyttal" +msgstr "-mvsx kräver hÃ¥rdvaruflyttal" #: config/rs6000/rs6000.c:2750 msgid "-mvsx and -mpaired are incompatible" -msgstr "-mvsx och -mpaired är inkompatibla" +msgstr "-mvsx och -mpaired är inkompatibla" #: config/rs6000/rs6000.c:2755 msgid "-mvsx used with little endian code" -msgstr "-mvsx använd med kod för omvänd byteordning" +msgstr "-mvsx använd med kod för omvänd byteordning" #: config/rs6000/rs6000.c:2757 msgid "-mvsx needs indexed addressing" -msgstr "-mvsx behöver indexerad adressering" +msgstr "-mvsx behöver indexerad adressering" #: config/rs6000/rs6000.c:2761 msgid "-mvsx and -mno-altivec are incompatible" -msgstr "-mvsx och -mno-altivec är inkompatibla" +msgstr "-mvsx och -mno-altivec är inkompatibla" #: config/rs6000/rs6000.c:2763 msgid "-mno-altivec disables vsx" @@ -3326,27 +3326,27 @@ msgstr "-mno-altivec avaktiverar vsx" #: config/rs6000/rs6000.c:7311 msgid "bad move" -msgstr "felaktig förflyttning" +msgstr "felaktig förflyttning" #: config/rs6000/rs6000.c:14750 #, c-format msgid "invalid %%c value" -msgstr "ogiltigt %%c-värde" +msgstr "ogiltigt %%c-värde" #: config/rs6000/rs6000.c:14778 #, c-format msgid "invalid %%f value" -msgstr "ogiltigt %%f-värde" +msgstr "ogiltigt %%f-värde" #: config/rs6000/rs6000.c:14787 #, c-format msgid "invalid %%F value" -msgstr "ogiltigt %%F-värde" +msgstr "ogiltigt %%F-värde" #: config/rs6000/rs6000.c:14796 #, c-format msgid "invalid %%G value" -msgstr "ogiltigt %%G-värde" +msgstr "ogiltigt %%G-värde" #: config/rs6000/rs6000.c:14831 #, c-format @@ -3361,37 +3361,37 @@ msgstr "ogiltig %%J-kod" #: config/rs6000/rs6000.c:14851 #, c-format msgid "invalid %%k value" -msgstr "ogiltigt %%k-värde" +msgstr "ogiltigt %%k-värde" #: config/rs6000/rs6000.c:14866 config/xtensa/xtensa.c:2336 #, c-format msgid "invalid %%K value" -msgstr "ogiltigt %%K-värde" +msgstr "ogiltigt %%K-värde" #: config/rs6000/rs6000.c:14930 #, c-format msgid "invalid %%O value" -msgstr "ogiltigt %%O-värde" +msgstr "ogiltigt %%O-värde" #: config/rs6000/rs6000.c:14977 #, c-format msgid "invalid %%q value" -msgstr "ogiltigt %%q-värde" +msgstr "ogiltigt %%q-värde" #: config/rs6000/rs6000.c:15021 #, c-format msgid "invalid %%S value" -msgstr "ogiltigt %%S-värde" +msgstr "ogiltigt %%S-värde" #: config/rs6000/rs6000.c:15061 #, c-format msgid "invalid %%T value" -msgstr "ogiltigt %%T-värde" +msgstr "ogiltigt %%T-värde" #: config/rs6000/rs6000.c:15071 #, c-format msgid "invalid %%u value" -msgstr "ogiltigt %%u-värde" +msgstr "ogiltigt %%u-värde" #: config/rs6000/rs6000.c:15080 config/xtensa/xtensa.c:2306 #, c-format @@ -3401,12 +3401,12 @@ msgstr "ogiltig %%v-kod" #: config/rs6000/rs6000.c:15179 config/xtensa/xtensa.c:2357 #, c-format msgid "invalid %%x value" -msgstr "ogiltigt %%x-värde" +msgstr "ogiltigt %%x-värde" #: config/rs6000/rs6000.c:15325 #, c-format msgid "invalid %%y value, try using the 'Z' constraint" -msgstr "ogiltigt %%y-värde, försök använda \"Z\"-begränsningen" +msgstr "ogiltigt %%y-värde, försök använda â€Zâ€-begränsningen" #: config/rs6000/rs6000.c:26941 msgid "AltiVec argument passed to unprototyped function" @@ -3415,7 +3415,7 @@ msgstr "AltiVec-argument skickat till funktion utan prototyp" #: config/s390/s390.c:5135 #, c-format msgid "symbolic memory references are only supported on z10 or later" -msgstr "symboliska minnesreferenser stödjs endast på z10 eller senare" +msgstr "symboliska minnesreferenser stödjs endast pÃ¥ z10 eller senare" #: config/s390/s390.c:5146 #, c-format @@ -3425,77 +3425,77 @@ msgstr "kan inte dekomponera adress." #: config/s390/s390.c:5205 #, c-format msgid "invalid comparison operator for 'E' output modifier" -msgstr "ogiltig jämförelseoperator för utmatningsmodifieraren \"E\"" +msgstr "ogiltig jämförelseoperator för utmatningsmodifieraren â€Eâ€" #: config/s390/s390.c:5226 #, c-format msgid "invalid reference for 'J' output modifier" -msgstr "ogiltig referens för utmatningsmodifieraren \"J\"" +msgstr "ogiltig referens för utmatningsmodifieraren â€Jâ€" #: config/s390/s390.c:5240 #, c-format msgid "memory reference expected for 'O' output modifier" -msgstr "minnesreferens förväntas för utmatningsmodifieraren \"O\"" +msgstr "minnesreferens förväntas för utmatningsmodifieraren â€Oâ€" #: config/s390/s390.c:5251 #, c-format msgid "invalid address for 'O' output modifier" -msgstr "ogiltig adress för utmatningsmodifieraren \"O\"" +msgstr "ogiltig adress för utmatningsmodifieraren â€Oâ€" #: config/s390/s390.c:5269 #, c-format msgid "memory reference expected for 'R' output modifier" -msgstr "minnesreferens förväntas för utmatningsmodifieraren \"R\"" +msgstr "minnesreferens förväntas för utmatningsmodifieraren â€Râ€" #: config/s390/s390.c:5280 #, c-format msgid "invalid address for 'R' output modifier" -msgstr "ogiltig adress för utmatningsmodifieraren \"R\"" +msgstr "ogiltig adress för utmatningsmodifieraren â€Râ€" #: config/s390/s390.c:5298 #, c-format msgid "memory reference expected for 'S' output modifier" -msgstr "minnesreferens förväntas för utmatningsmodifieraren \"S\"" +msgstr "minnesreferens förväntas för utmatningsmodifieraren â€Sâ€" #: config/s390/s390.c:5308 #, c-format msgid "invalid address for 'S' output modifier" -msgstr "ogiltig adress för \"S\"-utmatningsmodifierare" +msgstr "ogiltig adress för â€Sâ€-utmatningsmodifierare" #: config/s390/s390.c:5328 #, c-format msgid "register or memory expression expected for 'N' output modifier" -msgstr "register- eller minnesuttryck förväntas för utmatningsmodifieraren \"N\"" +msgstr "register- eller minnesuttryck förväntas för utmatningsmodifieraren â€Nâ€" #: config/s390/s390.c:5338 #, c-format msgid "register or memory expression expected for 'M' output modifier" -msgstr "register- eller minnesuttryck förväntas för utmatningsmodifieraren \"M\"" +msgstr "register- eller minnesuttryck förväntas för utmatningsmodifieraren â€Mâ€" #: config/s390/s390.c:5403 #, c-format msgid "invalid constant - try using an output modifier" -msgstr "ogiltig konstant - försök med att använda en utmatningsmodifierare" +msgstr "ogiltig konstant - försök med att använda en utmatningsmodifierare" #: config/s390/s390.c:5406 #, c-format msgid "invalid constant for output modifier '%c'" -msgstr "ogiltig konstant för utmatningsmodifieraren \"%c\"" +msgstr "ogiltig konstant för utmatningsmodifieraren â€%câ€" #: config/s390/s390.c:5413 #, c-format msgid "invalid expression - try using an output modifier" -msgstr "ogiltigt uttryck - försök med att använda en utmatningsmodifierare" +msgstr "ogiltigt uttryck - försök med att använda en utmatningsmodifierare" #: config/s390/s390.c:5416 #, c-format msgid "invalid expression for output modifier '%c'" -msgstr "ogiltigt uttryck för utmatningsmodifieraren \"%c\"" +msgstr "ogiltigt uttryck för utmatningsmodifieraren â€%câ€" #: config/score/score.c:1344 #, c-format msgid "invalid operand for code: '%c'" -msgstr "ogiltig operand för kod: \"%c\"" +msgstr "ogiltig operand för kod: â€%câ€" #: config/sh/sh.c:1026 #, c-format @@ -3509,15 +3509,15 @@ msgstr "ogiltig operand till %%R" #: config/sh/sh.c:9137 msgid "created and used with different architectures / ABIs" -msgstr "skapad och använd med olika arkitekturer/ABI:er" +msgstr "skapad och använd med olika arkitekturer/ABI:er" #: config/sh/sh.c:9139 msgid "created and used with different ABIs" -msgstr "skapad och använd med olika ABI:er" +msgstr "skapad och använd med olika ABI:er" #: config/sh/sh.c:9141 msgid "created and used with different endianness" -msgstr "skapad och använd med olika byteordning" +msgstr "skapad och använd med olika byteordning" #: config/sparc/sparc.c:8117 config/sparc/sparc.c:8123 #, c-format @@ -3567,22 +3567,22 @@ msgstr "flyttalskonstant inte en giltig omedelbar operand" #: config/stormy16/stormy16.c:1722 config/stormy16/stormy16.c:1793 #, c-format msgid "'B' operand is not constant" -msgstr "\"B\"-operand är ej konstant" +msgstr "â€Bâ€-operand är ej konstant" #: config/stormy16/stormy16.c:1749 #, c-format msgid "'B' operand has multiple bits set" -msgstr "\"B\"-operand har flera bitar satta" +msgstr "â€Bâ€-operand har flera bitar satta" #: config/stormy16/stormy16.c:1775 #, c-format msgid "'o' operand is not constant" -msgstr "\"o\"-operand är ej konstant" +msgstr "â€oâ€-operand är ej konstant" #: config/stormy16/stormy16.c:1807 #, c-format msgid "xstormy16_print_operand: unknown code" -msgstr "xstormy16_print_operand: okänd kod" +msgstr "xstormy16_print_operand: okänd kod" #: config/v850/v850.c:260 msgid "const_double_split got a bad insn:" @@ -3595,17 +3595,17 @@ msgstr "output_move_single:" #: config/vax/vax.c:452 #, c-format msgid "symbol used with both base and indexed registers" -msgstr "symbol använd med både bas- och indexerade register" +msgstr "symbol använd med bÃ¥de bas- och indexerade register" #: config/vax/vax.c:461 #, c-format msgid "symbol with offset used in PIC mode" -msgstr "symbol med avstånd använt i PIC-läge" +msgstr "symbol med avstÃ¥nd använt i PIC-läge" #: config/vax/vax.c:549 #, c-format msgid "symbol used as immediate operand" -msgstr "symbol används som omedelbar operand" +msgstr "symbol används som omedelbar operand" #: config/vax/vax.c:1572 msgid "illegal operand detected" @@ -3619,7 +3619,7 @@ msgstr "felaktig test" #: config/xtensa/xtensa.c:2294 #, c-format msgid "invalid %%D value" -msgstr "ogiltigt %%D-värde" +msgstr "ogiltigt %%D-värde" #: config/xtensa/xtensa.c:2331 msgid "invalid mask" @@ -3628,12 +3628,12 @@ msgstr "ogiltigt mask" #: config/xtensa/xtensa.c:2364 #, c-format msgid "invalid %%d value" -msgstr "ogiltigt %%d-värde" +msgstr "ogiltigt %%d-värde" #: config/xtensa/xtensa.c:2385 config/xtensa/xtensa.c:2395 #, c-format msgid "invalid %%t/%%b value" -msgstr "ogiltigt %%t/%%b-värde" +msgstr "ogiltigt %%t/%%b-värde" #: config/xtensa/xtensa.c:2462 msgid "no register in address" @@ -3641,7 +3641,7 @@ msgstr "inget register i adress" #: config/xtensa/xtensa.c:2470 msgid "address offset not a constant" -msgstr "adressavstånd inte en konstant" +msgstr "adressavstÃ¥nd inte en konstant" #: cp/call.c:8284 msgid "candidate 1:" @@ -3653,7 +3653,7 @@ msgstr "kandidat 2:" #: cp/cxx-pretty-print.c:172 objc/objc-act.c:6176 msgid "<unnamed>" -msgstr "<namnlös>" +msgstr "<namnlös>" #: cp/cxx-pretty-print.c:2147 msgid "template-parameter-" @@ -3661,12 +3661,12 @@ msgstr "mallparameter-" #: cp/decl2.c:727 msgid "candidates are: %+#D" -msgstr "kandidater är: %+#D" +msgstr "kandidater är: %+#D" #: cp/decl2.c:729 cp/pt.c:1752 #, gcc-internal-format msgid "candidate is: %+#D" -msgstr "kandidat är: %+#D" +msgstr "kandidat är: %+#D" #: cp/error.c:303 msgid "<missing>" @@ -3678,7 +3678,7 @@ msgstr "<klamrar runt initierarlista>" #: cp/error.c:395 msgid "<unresolved overloaded function type>" -msgstr "<ej upplöst överlagrad funktionstyp>" +msgstr "<ej upplöst överlagrad funktionstyp>" #: cp/error.c:555 msgid "<type error>" @@ -3701,20 +3701,20 @@ msgstr "<typprefixfel>" #: cp/error.c:905 #, c-format msgid "(static initializers for %s)" -msgstr "(statiska initierare för %s)" +msgstr "(statiska initierare för %s)" #: cp/error.c:907 #, c-format msgid "(static destructors for %s)" -msgstr "(statiska destruerare för %s)" +msgstr "(statiska destruerare för %s)" #: cp/error.c:1006 msgid "vtable for " -msgstr "vtabell för " +msgstr "vtabell för " #: cp/error.c:1018 msgid "<return value> " -msgstr "<returvärde>" +msgstr "<returvärde>" #: cp/error.c:1031 msgid "{anonymous}" @@ -3726,7 +3726,7 @@ msgstr "<mallargumentfel>" #: cp/error.c:1149 msgid "<enumerator>" -msgstr "<uppräknare>" +msgstr "<uppräknare>" #: cp/error.c:1189 msgid "<declaration error>" @@ -3760,15 +3760,15 @@ msgstr "<uttrycksfel>" #: cp/error.c:2498 msgid "<unknown operator>" -msgstr "<okänd operator>" +msgstr "<okänd operator>" #: cp/error.c:2754 msgid "{unknown}" -msgstr "{okänd}" +msgstr "{okänd}" #: cp/error.c:2869 msgid "At global scope:" -msgstr "I global räckvidd:" +msgstr "I global räckvidd:" #: cp/error.c:2975 #, c-format @@ -3816,38 +3816,38 @@ msgstr "%s:%d: " #: cp/error.c:3038 #, c-format msgid "recursively required by substitution of %qS\n" -msgstr "krävs rekursivt av sustitution av %qS\n" +msgstr "krävs rekursivt av sustitution av %qS\n" #: cp/error.c:3039 #, c-format msgid "required by substitution of %qS\n" -msgstr "krävs av substitution av %qS\n" +msgstr "krävs av substitution av %qS\n" #: cp/error.c:3044 msgid "recursively required from %q#D\n" -msgstr "rekursivt begärd från %q#D\n" +msgstr "rekursivt begärd frÃ¥n %q#D\n" #: cp/error.c:3045 msgid "required from %q#D\n" -msgstr "begärs från %q#D\n" +msgstr "begärs frÃ¥n %q#D\n" #: cp/error.c:3052 msgid "recursively required from here" -msgstr "rekursivt begärd härifrån" +msgstr "rekursivt begärd härifrÃ¥n" #: cp/error.c:3053 msgid "required from here" -msgstr "begärd härifrån" +msgstr "begärd härifrÃ¥n" #: cp/error.c:3095 #, c-format msgid "%s:%d:%d: [ skipping %d instantiation contexts ]\n" -msgstr "%s:%d:%d: [ hoppar över %d instansieringskontexter ]\n" +msgstr "%s:%d:%d: [ hoppar över %d instansieringskontexter ]\n" #: cp/error.c:3099 #, c-format msgid "%s:%d: [ skipping %d instantiation contexts ]\n" -msgstr "%s:%d: [ hoppar över %d instansieringskontexter ]\n" +msgstr "%s:%d: [ hoppar över %d instansieringskontexter ]\n" #: cp/error.c:3161 #, c-format @@ -3857,50 +3857,50 @@ msgstr "%s:%d:%d: i expansion av konstantuttryck i %qs" #: cp/error.c:3165 #, c-format msgid "%s:%d: in constexpr expansion of %qs" -msgstr "%s:%d: i expansion av konstantuttryck i från %qs" +msgstr "%s:%d: i expansion av konstantuttryck i frÃ¥n %qs" #: cp/pt.c:1756 msgid "candidates are:" -msgstr "kandidater är:" +msgstr "kandidater är:" #: cp/pt.c:17792 cp/call.c:3289 #, gcc-internal-format msgid "candidate is:" msgid_plural "candidates are:" -msgstr[0] "kandidat är:" -msgstr[1] "kandidater är:" +msgstr[0] "kandidat är:" +msgstr[1] "kandidater är:" #: cp/rtti.c:537 msgid "target is not pointer or reference to class" -msgstr "målet är inte en pekare eller referens till en klass" +msgstr "mÃ¥let är inte en pekare eller referens till en klass" #: cp/rtti.c:542 msgid "target is not pointer or reference to complete type" -msgstr "målet är inte en pekare eller referens till en fullständig typ" +msgstr "mÃ¥let är inte en pekare eller referens till en fullständig typ" #: cp/rtti.c:548 msgid "target is not pointer or reference" -msgstr "målet är inte en pekare eller referens" +msgstr "mÃ¥let är inte en pekare eller referens" #: cp/rtti.c:564 msgid "source is not a pointer" -msgstr "källan är inte en pekare" +msgstr "källan är inte en pekare" #: cp/rtti.c:569 msgid "source is not a pointer to class" -msgstr "källan är inte en pekare till en klass" +msgstr "källan är inte en pekare till en klass" #: cp/rtti.c:574 msgid "source is a pointer to incomplete type" -msgstr "källan är en pekare till en ofullständig typ" +msgstr "källan är en pekare till en ofullständig typ" #: cp/rtti.c:589 msgid "source is not of class type" -msgstr "källan är inte en klasstyp" +msgstr "källan är inte en klasstyp" #: cp/rtti.c:594 msgid "source is of incomplete class type" -msgstr "källan är en ofullständig klasstyp" +msgstr "källan är en ofullständig klasstyp" #: cp/rtti.c:607 msgid "conversion casts away constness" @@ -3908,52 +3908,52 @@ msgstr "konvertering konverterar bort konstantskap" #: cp/rtti.c:765 msgid "source type is not polymorphic" -msgstr "källtypen är inte polymorfisk" +msgstr "källtypen är inte polymorfisk" #: cp/typeck.c:5103 c-typeck.c:3571 #, gcc-internal-format msgid "wrong type argument to unary minus" -msgstr "fel typ på argument till unärt minus" +msgstr "fel typ pÃ¥ argument till unärt minus" #: cp/typeck.c:5104 c-typeck.c:3558 #, gcc-internal-format msgid "wrong type argument to unary plus" -msgstr "fel typ på argument till unärt plus" +msgstr "fel typ pÃ¥ argument till unärt plus" #: cp/typeck.c:5127 c-typeck.c:3597 #, gcc-internal-format msgid "wrong type argument to bit-complement" -msgstr "fel typ på argument till bitkomplement" +msgstr "fel typ pÃ¥ argument till bitkomplement" #: cp/typeck.c:5134 c-typeck.c:3605 #, gcc-internal-format msgid "wrong type argument to abs" -msgstr "fel typ på argument till abs" +msgstr "fel typ pÃ¥ argument till abs" #: cp/typeck.c:5142 c-typeck.c:3617 #, gcc-internal-format msgid "wrong type argument to conjugation" -msgstr "fel typ på argument till konjunktion" +msgstr "fel typ pÃ¥ argument till konjunktion" #: cp/typeck.c:5153 msgid "in argument to unary !" -msgstr "i argument till unärt !" +msgstr "i argument till unärt !" #: cp/typeck.c:5202 msgid "no pre-increment operator for type" -msgstr "ingen pre-ökningsoperator för typen" +msgstr "ingen pre-ökningsoperator för typen" #: cp/typeck.c:5204 msgid "no post-increment operator for type" -msgstr "ingen post-ökningsoperator för typen" +msgstr "ingen post-ökningsoperator för typen" #: cp/typeck.c:5206 msgid "no pre-decrement operator for type" -msgstr "ingen pre-minskningsoperator för typen" +msgstr "ingen pre-minskningsoperator för typen" #: cp/typeck.c:5208 msgid "no post-decrement operator for type" -msgstr "ingen post-minskningsoperator för typen" +msgstr "ingen post-minskningsoperator för typen" #: fortran/arith.c:96 msgid "Arithmetic OK at %L" @@ -3981,26 +3981,26 @@ msgstr "Vektoroperander passar inte ihop vid %L" #: fortran/arith.c:115 msgid "Integer outside symmetric range implied by Standard Fortran at %L" -msgstr "Heltal utanför symmetriskt intervall implicerat av Standard Fortran vid %L" +msgstr "Heltal utanför symmetriskt intervall implicerat av Standard Fortran vid %L" #: fortran/arith.c:1346 msgid "elemental binary operation" -msgstr "elementär binär operation" +msgstr "elementär binär operation" #: fortran/check.c:1638 fortran/check.c:2554 fortran/check.c:2608 #, c-format msgid "arguments '%s' and '%s' for intrinsic %s" -msgstr "argumenten \"%s\" och \"%s\" för inbyggd %s" +msgstr "argumenten â€%s†och â€%s†för inbyggd %s" #: fortran/check.c:2360 #, c-format msgid "arguments 'a%d' and 'a%d' for intrinsic '%s'" -msgstr "argument \"a%d\" och \"a%d\" för inbyggd \"%s\"" +msgstr "argument â€a%d†och â€a%d†för inbyggd â€%sâ€" #: fortran/check.c:2873 fortran/intrinsic.c:3932 #, c-format msgid "arguments '%s' and '%s' for intrinsic '%s'" -msgstr "argument \"%s\" och \"%s\" för inbyggd \"%s\"" +msgstr "argument â€%s†och â€%s†för inbyggd â€%sâ€" #: fortran/error.c:738 fortran/error.c:792 fortran/error.c:827 #: fortran/error.c:902 @@ -4013,22 +4013,22 @@ msgstr "Fel:" #: fortran/error.c:956 msgid "Fatal Error:" -msgstr "Ödesdigert fel:" +msgstr "Ödesdigert fel:" #: fortran/expr.c:620 #, c-format msgid "Constant expression required at %C" -msgstr "Konstant uttryck krävs vid %C" +msgstr "Konstant uttryck krävs vid %C" #: fortran/expr.c:623 #, c-format msgid "Integer expression required at %C" -msgstr "Heltalsuttryck krävs vid %C" +msgstr "Heltalsuttryck krävs vid %C" #: fortran/expr.c:628 #, c-format msgid "Integer value too large in expression at %C" -msgstr "För stort heltalsvärde i uttryck vid %C" +msgstr "För stort heltalsvärde i uttryck vid %C" #: fortran/expr.c:3166 msgid "array assignment" @@ -4043,9 +4043,9 @@ msgid "" "For more information about these matters, see the file named COPYING\n" "\n" msgstr "" -"GNU Fortran kommer UTAN GARANTI så långt lagen tillåter. Du kan\n" +"GNU Fortran kommer UTAN GARANTI sÃ¥ lÃ¥ngt lagen tillÃ¥ter. Du kan\n" "vidaredistribuera kopior av GNU Fortran enligt villkoren i GNU General\n" -"Public License. För mer information om detta ämne, se filen som heter\n" +"Public License. För mer information om detta ämne, se filen som heter\n" "COPYING\n" "\n" @@ -4060,19 +4060,19 @@ msgstr "aktuellt argument till INTENT = OUT/INOUT" #: fortran/io.c:549 msgid "Positive width required" -msgstr "Positiv bredd krävs" +msgstr "Positiv bredd krävs" #: fortran/io.c:550 msgid "Nonnegative width required" -msgstr "Ickenegativ bredd krävs" +msgstr "Ickenegativ bredd krävs" #: fortran/io.c:551 msgid "Unexpected element '%c' in format string at %L" -msgstr "Oväntat element \"%c\" i formatsträng vid %L" +msgstr "Oväntat element â€%c†i formatsträng vid %L" #: fortran/io.c:553 msgid "Unexpected end of format string" -msgstr "Oväntat slut på formatsträng" +msgstr "Oväntat slut pÃ¥ formatsträng" #: fortran/io.c:554 msgid "Zero width in format descriptor" @@ -4080,40 +4080,40 @@ msgstr "Nollbredd i formatbeskrivning" #: fortran/io.c:574 msgid "Missing leading left parenthesis" -msgstr "Inledande vänsterparentes saknas" +msgstr "Inledande vänsterparentes saknas" #: fortran/io.c:603 msgid "Left parenthesis required after '*'" -msgstr "Vänsterparentes krävs efter \"*\"" +msgstr "Vänsterparentes krävs efter â€*â€" #: fortran/io.c:634 msgid "Expected P edit descriptor" -msgstr "Redigeringsbeskrivning P förväntades" +msgstr "Redigeringsbeskrivning P förväntades" #. P requires a prior number. #: fortran/io.c:642 msgid "P descriptor requires leading scale factor" -msgstr "P-beskrivare kräver inledande skalfaktor" +msgstr "P-beskrivare kräver inledande skalfaktor" #: fortran/io.c:737 fortran/io.c:751 msgid "Comma required after P descriptor" -msgstr "Komma krävs efter P-beskrivare" +msgstr "Komma krävs efter P-beskrivare" #: fortran/io.c:765 msgid "Positive width required with T descriptor" -msgstr "Positiv bredd krävs med T-beskrivare" +msgstr "Positiv bredd krävs med T-beskrivare" #: fortran/io.c:844 msgid "E specifier not allowed with g0 descriptor" -msgstr "Specificeraren E är inte tillåten vid g0-deskriptor" +msgstr "Specificeraren E är inte tillÃ¥ten vid g0-deskriptor" #: fortran/io.c:914 msgid "Positive exponent width required" -msgstr "Positiv exponentbredd krävs" +msgstr "Positiv exponentbredd krävs" #: fortran/io.c:944 msgid "Period required in format specifier" -msgstr "Period krävs i formatangivelse" +msgstr "Period krävs i formatangivelse" #: fortran/io.c:1533 #, c-format @@ -4138,7 +4138,7 @@ msgstr "Syntaxfel i uttryck vid %C" #: fortran/module.c:1054 msgid "Unexpected EOF" -msgstr "Oväntat filslut" +msgstr "Oväntat filslut" #: fortran/module.c:1139 msgid "Integer overflow" @@ -4146,7 +4146,7 @@ msgstr "Heltalsspill" #: fortran/module.c:1169 msgid "Name too long" -msgstr "För långt namn" +msgstr "För lÃ¥ngt namn" #: fortran/module.c:1271 fortran/module.c:1374 msgid "Bad name" @@ -4154,23 +4154,23 @@ msgstr "Felaktigt namn" #: fortran/module.c:1398 msgid "Expected name" -msgstr "Förväntade ett namn" +msgstr "Förväntade ett namn" #: fortran/module.c:1401 msgid "Expected left parenthesis" -msgstr "Vänsterparentes förväntades" +msgstr "Vänsterparentes förväntades" #: fortran/module.c:1404 msgid "Expected right parenthesis" -msgstr "Högerparentes förväntades" +msgstr "Högerparentes förväntades" #: fortran/module.c:1407 msgid "Expected integer" -msgstr "Heltal förväntades" +msgstr "Heltal förväntades" #: fortran/module.c:1410 fortran/module.c:2312 msgid "Expected string" -msgstr "Sträng förväntades" +msgstr "Sträng förväntades" #: fortran/module.c:1435 msgid "find_enum(): Enum not found" @@ -4178,11 +4178,11 @@ msgstr "find_enum(): Enum finns inte" #: fortran/module.c:2065 msgid "Expected attribute bit name" -msgstr "Attributbitnamn förväntades" +msgstr "Attributbitnamn förväntades" #: fortran/module.c:2963 msgid "Expected integer string" -msgstr "Heltalssträng förväntades" +msgstr "Heltalssträng förväntades" #: fortran/module.c:2967 msgid "Error converting integer" @@ -4190,11 +4190,11 @@ msgstr "Fel vid konvertering av heltal" #: fortran/module.c:2989 msgid "Expected real string" -msgstr "Förväntade reell sträng" +msgstr "Förväntade reell sträng" #: fortran/module.c:3211 msgid "Expected expression type" -msgstr "Uttryckstyp förväntades" +msgstr "Uttryckstyp förväntades" #: fortran/module.c:3265 msgid "Bad operator" @@ -4206,7 +4206,7 @@ msgstr "Felaktig typ i konstant uttryck" #: fortran/module.c:6050 msgid "Unexpected end of module" -msgstr "Oväntat modulslut" +msgstr "Oväntat modulslut" #: fortran/parse.c:1227 msgid "arithmetic IF" @@ -4222,7 +4222,7 @@ msgstr "datadeklaration" #: fortran/parse.c:1281 msgid "derived type declaration" -msgstr "härledd typdeklaration" +msgstr "härledd typdeklaration" #: fortran/parse.c:1375 msgid "block IF" @@ -4230,7 +4230,7 @@ msgstr "block-IF" #: fortran/parse.c:1384 msgid "implied END DO" -msgstr "underförstådd END DO" +msgstr "underförstÃ¥dd END DO" #: fortran/parse.c:1475 fortran/resolve.c:9409 msgid "assignment" @@ -4254,71 +4254,71 @@ msgstr "intern funktion" #: fortran/resolve.c:1983 msgid "elemental procedure" -msgstr "elementär procedur" +msgstr "elementär procedur" #: fortran/resolve.c:3811 #, c-format msgid "Invalid context for NULL() pointer at %%L" -msgstr "Ogiltigt sammanhang för NULL()-pekare vid %%L" +msgstr "Ogiltigt sammanhang för NULL()-pekare vid %%L" #: fortran/resolve.c:3827 #, c-format msgid "Operand of unary numeric operator '%s' at %%L is %s" -msgstr "Operand till unär numerisk operator \"%s\" vid %%L är %s" +msgstr "Operand till unär numerisk operator â€%s†vid %%L är %s" #: fortran/resolve.c:3843 #, c-format msgid "Operands of binary numeric operator '%s' at %%L are %s/%s" -msgstr "Operander till binär numerisk operator \"%s\" vid %%L är %s/%s" +msgstr "Operander till binär numerisk operator â€%s†vid %%L är %s/%s" #: fortran/resolve.c:3858 #, c-format msgid "Operands of string concatenation operator at %%L are %s/%s" -msgstr "Operanderna till strängkonkateneringsoperatorn vid %%L är %s/%s" +msgstr "Operanderna till strängkonkateneringsoperatorn vid %%L är %s/%s" #: fortran/resolve.c:3877 #, c-format msgid "Operands of logical operator '%s' at %%L are %s/%s" -msgstr "Operanderna till logiska operatorn \"%s\" vid %%L är %s/%s" +msgstr "Operanderna till logiska operatorn â€%s†vid %%L är %s/%s" #: fortran/resolve.c:3891 #, c-format msgid "Operand of .not. operator at %%L is %s" -msgstr "Operand till operatorn .not. vid %%L är %s" +msgstr "Operand till operatorn .not. vid %%L är %s" #: fortran/resolve.c:3905 msgid "COMPLEX quantities cannot be compared at %L" -msgstr "COMPLEX-kvantiteter kan inte jämföras vid %L" +msgstr "COMPLEX-kvantiteter kan inte jämföras vid %L" #: fortran/resolve.c:3934 #, c-format msgid "Logicals at %%L must be compared with %s instead of %s" -msgstr "Logiska vid %%L måste jämföras med %s istället för %s" +msgstr "Logiska vid %%L mÃ¥ste jämföras med %s istället för %s" #: fortran/resolve.c:3940 #, c-format msgid "Operands of comparison operator '%s' at %%L are %s/%s" -msgstr "Operanderna till jämförelseoperatorn \"%s\" vid %%L är %s/%s" +msgstr "Operanderna till jämförelseoperatorn â€%s†vid %%L är %s/%s" #: fortran/resolve.c:3948 #, c-format msgid "Unknown operator '%s' at %%L" -msgstr "Okänd operator \"%s\" vid %%L" +msgstr "Okänd operator â€%s†vid %%L" #: fortran/resolve.c:3950 #, c-format msgid "Operand of user operator '%s' at %%L is %s" -msgstr "Operanderna till användaroperatorn \"%s\" vid %%L är %s" +msgstr "Operanderna till användaroperatorn â€%s†vid %%L är %s" #: fortran/resolve.c:3954 #, c-format msgid "Operands of user operator '%s' at %%L are %s/%s" -msgstr "Operanderna till användaroperatorn \"%s\" vid %%L är %s/%s" +msgstr "Operanderna till användaroperatorn â€%s†vid %%L är %s/%s" #: fortran/resolve.c:4042 #, c-format msgid "Inconsistent ranks for operator at %%L and %%L" -msgstr "Inkonsistenta ordningar för operator vid %%L och %%L" +msgstr "Inkonsistenta ordningar för operator vid %%L och %%L" #: fortran/resolve.c:6415 msgid "Loop variable" @@ -4367,52 +4367,52 @@ msgstr "ACQUIRED_LOCK-variabel" #: fortran/trans-array.c:1408 #, c-format msgid "Different CHARACTER lengths (%ld/%ld) in array constructor" -msgstr "Olika CHARACTER-längder (%ld/%ld) i vektorkonstruerare" +msgstr "Olika CHARACTER-längder (%ld/%ld) i vektorkonstruerare" #: fortran/trans-array.c:5065 msgid "Integer overflow when calculating the amount of memory to allocate" -msgstr "Heltalsspill vid beräkning av mängden minne att allokera" +msgstr "Heltalsspill vid beräkning av mängden minne att allokera" #: fortran/trans-decl.c:4776 #, c-format msgid "Actual string length does not match the declared one for dummy argument '%s' (%ld/%ld)" -msgstr "Aktuellt stränglängd matchare inte den deklarerade för attrappargument \"%s\" (%ld/%ld)" +msgstr "Aktuellt stränglängd matchare inte den deklarerade för attrappargument â€%s†(%ld/%ld)" #: fortran/trans-decl.c:4784 #, c-format msgid "Actual string length is shorter than the declared one for dummy argument '%s' (%ld/%ld)" -msgstr "Aktuellt stränglängd är kortaren än den deklarerade för attrappargument \"%s\" (%ld/%ld)" +msgstr "Aktuellt stränglängd är kortaren än den deklarerade för attrappargument â€%s†(%ld/%ld)" #: fortran/trans-expr.c:5960 #, c-format msgid "Target of rank remapping is too small (%ld < %ld)" -msgstr "Målet för återavbildning av ordning är för litet (%ld < %ld)" +msgstr "MÃ¥let för Ã¥teravbildning av ordning är för litet (%ld < %ld)" #: fortran/trans-intrinsic.c:895 #, c-format msgid "Unequal character lengths (%ld/%ld) in %s" -msgstr "Olika teckenlängder (%ld/%ld) i %s" +msgstr "Olika teckenlängder (%ld/%ld) i %s" #: fortran/trans-intrinsic.c:6054 #, c-format msgid "Argument NCOPIES of REPEAT intrinsic is negative (its value is %ld)" -msgstr "Argument NCOPIES till inbyggd REPEAT är negativt (dess värde är %ld)" +msgstr "Argument NCOPIES till inbyggd REPEAT är negativt (dess värde är %ld)" #: fortran/trans-intrinsic.c:6086 msgid "Argument NCOPIES of REPEAT intrinsic is too large" -msgstr "Argumentet NCOPIES till inbyggd REPEAT är för stort" +msgstr "Argumentet NCOPIES till inbyggd REPEAT är för stort" #: fortran/trans-io.c:523 msgid "Unit number in I/O statement too small" -msgstr "Enhetsnummer i I/O-sats är för litet" +msgstr "Enhetsnummer i I/O-sats är för litet" #: fortran/trans-io.c:532 msgid "Unit number in I/O statement too large" -msgstr "Enhetsnummer i I/O-sats är för stort" +msgstr "Enhetsnummer i I/O-sats är för stort" #: fortran/trans-stmt.c:156 msgid "Assigned label is not a target label" -msgstr "Tilldelad etikett är inte en måletikett" +msgstr "Tilldelad etikett är inte en mÃ¥letikett" #: fortran/trans-stmt.c:771 #, c-format @@ -4425,15 +4425,15 @@ msgstr "Slingvariabel har modifierats" #: fortran/trans-stmt.c:1487 msgid "DO step value is zero" -msgstr "DO-stegvärdet är noll" +msgstr "DO-stegvärdet är noll" #: fortran/trans.c:48 msgid "Array reference out of bounds" -msgstr "Vektorreferens utanför gränserna" +msgstr "Vektorreferens utanför gränserna" #: fortran/trans.c:49 msgid "Incorrect function return value" -msgstr "Felaktigt returvärde för funktion" +msgstr "Felaktigt returvärde för funktion" #: fortran/trans.c:574 msgid "Memory allocation failed" @@ -4441,37 +4441,37 @@ msgstr "Minnesallokering misslyckades" #: fortran/trans.c:650 fortran/trans.c:1164 msgid "Allocation would exceed memory limit" -msgstr "Allokering skulle överstiga minnesgräns" +msgstr "Allokering skulle överstiga minnesgräns" #: fortran/trans.c:794 #, c-format msgid "Attempting to allocate already allocated variable '%s'" -msgstr "Försök att allokera redan allokerad variabel \"%s\"" +msgstr "Försök att allokera redan allokerad variabel â€%sâ€" #: fortran/trans.c:800 msgid "Attempting to allocate already allocated variable" -msgstr "Försök att allokera redan allokerad variabel" +msgstr "Försök att allokera redan allokerad variabel" #: fortran/trans.c:909 fortran/trans.c:1053 #, c-format msgid "Attempt to DEALLOCATE unallocated '%s'" -msgstr "Försök att DEALLOCATE oallokerad \"%s\"" +msgstr "Försök att DEALLOCATE oallokerad â€%sâ€" #: go/go-backend.c:170 msgid "lseek failed while reading export data" -msgstr "lseek missslyckades när exportdata lästes" +msgstr "lseek missslyckades när exportdata lästes" #: go/go-backend.c:177 msgid "memory allocation failed while reading export data" -msgstr "minnesallokering misslyckades när exportdata lästes" +msgstr "minnesallokering misslyckades när exportdata lästes" #: go/go-backend.c:185 msgid "read failed while reading export data" -msgstr "läsningen misslyckades när exportdata lästes" +msgstr "läsningen misslyckades när exportdata lästes" #: go/go-backend.c:191 msgid "short read while reading export data" -msgstr "kort läsning när exportdata lästes" +msgstr "kort läsning när exportdata lästes" #: java/jcf-dump.c:1063 #, c-format @@ -4491,7 +4491,7 @@ msgstr "fel i konstantpoolpost nummer %d\n" #: java/jcf-dump.c:1085 #, c-format msgid "error while parsing fields\n" -msgstr "fel under tolkning av fält\n" +msgstr "fel under tolkning av fält\n" #: java/jcf-dump.c:1091 #, c-format @@ -4506,7 +4506,7 @@ msgstr "fel vid tolkning av avslutande attribut\n" #: java/jcf-dump.c:1134 #, c-format msgid "Try 'jcf-dump --help' for more information.\n" -msgstr "Försök med \"jcf-dump --help\" för mer information.\n" +msgstr "Försök med â€jcf-dump --help†för mer information.\n" #: java/jcf-dump.c:1141 #, c-format @@ -4514,7 +4514,7 @@ msgid "" "Usage: jcf-dump [OPTION]... CLASS...\n" "\n" msgstr "" -"Användning: jcf-dump [FLAGGA]... KLASS...\n" +"Användning: jcf-dump [FLAGGA]... KLASS...\n" "\n" #: java/jcf-dump.c:1142 @@ -4523,7 +4523,7 @@ msgid "" "Display contents of a class file in readable form.\n" "\n" msgstr "" -"Visa innehållet i en klassfil i läsbar form.\n" +"Visa innehÃ¥llet i en klassfil i läsbar form.\n" "\n" #: java/jcf-dump.c:1143 @@ -4534,27 +4534,27 @@ msgstr " -c Deassemblera metodkroppar\n" #: java/jcf-dump.c:1144 #, c-format msgid " --javap Generate output in 'javap' format\n" -msgstr " --javap Generera utdata i \"javap\"-format\n" +msgstr " --javap Generera utdata i â€javapâ€-format\n" #: java/jcf-dump.c:1146 #, c-format msgid " --classpath PATH Set path to find .class files\n" -msgstr " --classpath SÖKVÄG Ange sökväg för att hitta .class-filer\n" +msgstr " --classpath SÖKVÄG Ange sökväg för att hitta .class-filer\n" #: java/jcf-dump.c:1147 #, c-format msgid " -IDIR Append directory to class path\n" -msgstr " -IKAT Lägg till katalog till klassökvägen\n" +msgstr " -IKAT Lägg till katalog till klassökvägen\n" #: java/jcf-dump.c:1148 #, c-format msgid " --bootclasspath PATH Override built-in class path\n" -msgstr " --bootclasspath SÖKVÄG Åsidosätt inbyggd klassökväg\n" +msgstr " --bootclasspath SÖKVÄG Ã…sidosätt inbyggd klassökväg\n" #: java/jcf-dump.c:1149 #, c-format msgid " --extdirs PATH Set extensions directory path\n" -msgstr " --extdirs SÖKVÄG Ange katalogsökväg för utökningar\n" +msgstr " --extdirs SÖKVÄG Ange katalogsökväg för utökningar\n" #: java/jcf-dump.c:1150 #, c-format @@ -4564,7 +4564,7 @@ msgstr " -o FIL Ange utdatafilnamn\n" #: java/jcf-dump.c:1152 #, c-format msgid " --help Print this help, then exit\n" -msgstr " --help Visa den här hjälpen, avsluta sedan\n" +msgstr " --help Visa den här hjälpen, avsluta sedan\n" #: java/jcf-dump.c:1153 #, c-format @@ -4574,7 +4574,7 @@ msgstr " --version Skriv versionsnummer, avsluta sedan\n" #: java/jcf-dump.c:1154 #, c-format msgid " -v, --verbose Print extra information while running\n" -msgstr " -v, --verbose Skriv extra information under körning\n" +msgstr " -v, --verbose Skriv extra information under körning\n" #: java/jcf-dump.c:1156 #, c-format @@ -4582,9 +4582,9 @@ msgid "" "For bug reporting instructions, please see:\n" "%s.\n" msgstr "" -"För felrapporteringsinstruktioner se:\n" +"För felrapporteringsinstruktioner se:\n" "%s.\n" -"Skicka synpunkter på översättningen <tp-sv@listor.tp-sv.se>\n" +"Skicka synpunkter pÃ¥ översättningen <tp-sv@listor.tp-sv.se>\n" #: java/jcf-dump.c:1194 java/jcf-dump.c:1262 #, c-format @@ -4594,12 +4594,12 @@ msgstr "jcf-dump: inga klasser angivna\n" #: java/jcf-dump.c:1282 #, c-format msgid "Cannot open '%s' for output.\n" -msgstr "Kan inte öppna fil \"%s\" för utmatning.\n" +msgstr "Kan inte öppna fil â€%s†för utmatning.\n" #: java/jcf-dump.c:1327 #, c-format msgid "bad format of .zip/.jar archive\n" -msgstr "felaktigt format på .zip/.jar-arkiv\n" +msgstr "felaktigt format pÃ¥ .zip/.jar-arkiv\n" #: java/jcf-dump.c:1445 #, c-format @@ -4609,232 +4609,232 @@ msgstr "Felaktiga bytekoder.\n" #: java/jvgenmain.c:48 #, c-format msgid "Usage: %s [OPTIONS]... CLASSNAMEmain [OUTFILE]\n" -msgstr "Användning: %s [FLAGGOR]... KLASSNAMNmain [UTFIL]\n" +msgstr "Användning: %s [FLAGGOR]... KLASSNAMNmain [UTFIL]\n" #: java/jvgenmain.c:121 #, c-format msgid "%s: Cannot open output file: %s\n" -msgstr "%s: Kan inte öppna utfil: %s\n" +msgstr "%s: Kan inte öppna utfil: %s\n" #: java/jvgenmain.c:167 #, c-format msgid "%s: Failed to close output file %s\n" -msgstr "%s: Misslyckades med att stänga utfil %s\n" +msgstr "%s: Misslyckades med att stänga utfil %s\n" #: gcc.c:654 msgid "-fuse-linker-plugin is not supported in this configuration" -msgstr "-fuse-linker-plugin stödjs inte i denna konfiguration" +msgstr "-fuse-linker-plugin stödjs inte i denna konfiguration" #: gcc.c:777 ada/gcc-interface/lang-specs.h:33 java/jvspec.c:80 msgid "-pg and -fomit-frame-pointer are incompatible" -msgstr "-pg och -fomit-frame-pointer är inkompatibla" +msgstr "-pg och -fomit-frame-pointer är inkompatibla" #: gcc.c:939 msgid "GNU C no longer supports -traditional without -E" -msgstr "GNU C stödjer inte längre -traditional utan -E" +msgstr "GNU C stödjer inte längre -traditional utan -E" #: gcc.c:948 msgid "-E or -x required when input is from standard input" -msgstr "-E eller -x krävs när indata tas från standard in" +msgstr "-E eller -x krävs när indata tas frÃ¥n standard in" #: config/alpha/freebsd.h:34 config/ia64/freebsd.h:26 config/i386/freebsd.h:96 #: config/i386/freebsd64.h:35 config/arm/freebsd.h:31 #: config/rs6000/sysv4.h:772 config/sparc/freebsd.h:46 msgid "consider using '-pg' instead of '-p' with gprof(1)" -msgstr "överväg att använda \"-pg\" istället för \"-p\" med gprof(1)" +msgstr "överväg att använda â€-pg†istället för â€-p†med gprof(1)" #: fortran/lang-specs.h:55 fortran/lang-specs.h:69 msgid "gfortran does not support -E without -cpp" -msgstr "gfortran stödjer inte -E utan -cpp" +msgstr "gfortran stödjer inte -E utan -cpp" #: config/i386/mingw-w64.h:83 config/i386/mingw32.h:116 #: config/i386/cygwin.h:114 msgid "shared and mdll are not compatible" -msgstr "shared och mdll är inkompatibla" +msgstr "shared och mdll är inkompatibla" #: config/vax/netbsd-elf.h:51 msgid "the -shared option is not currently supported for VAX ELF" -msgstr "flaggan -shared stöds för närvarande inte för VAX ELF" +msgstr "flaggan -shared stöds för närvarande inte för VAX ELF" #: config/sparc/netbsd-elf.h:109 config/sparc/netbsd-elf.h:118 #: config/sparc/sol2.h:201 config/sparc/sol2.h:207 config/sparc/linux64.h:158 #: config/sparc/linux64.h:165 msgid "may not use both -m32 and -m64" -msgstr "går inte att använda både -m32 och -m64" +msgstr "gÃ¥r inte att använda bÃ¥de -m32 och -m64" #: config/vax/vax.h:50 config/vax/vax.h:51 msgid "profiling not supported with -mg" -msgstr "profilering stöds inte med -mg" +msgstr "profilering stöds inte med -mg" #: config/s390/tpf.h:116 msgid "static is not supported on TPF-OS" -msgstr "static stöds inte på TPF-OS" +msgstr "static stöds inte pÃ¥ TPF-OS" #: config/mips/mips.h:1169 msgid "may not use both -EB and -EL" -msgstr "får inte använda både -EB och -EL" +msgstr "fÃ¥r inte använda bÃ¥de -EB och -EL" #: config/mips/r3900.h:38 msgid "-mhard-float not supported" -msgstr "-mhard-float stöds inte" +msgstr "-mhard-float stöds inte" #: config/mips/r3900.h:40 msgid "-msingle-float and -msoft-float cannot both be specified" -msgstr "-msingle-float och -msoft-float kan inte båda anges" +msgstr "-msingle-float och -msoft-float kan inte bÃ¥da anges" #: config/lynx.h:70 msgid "cannot use mthreads and mlegacy-threads together" -msgstr "mthreads och mlegacy-threads kan inte användas tillsammans" +msgstr "mthreads och mlegacy-threads kan inte användas tillsammans" #: config/lynx.h:95 msgid "cannot use mshared and static together" -msgstr "mshared och static kan inte användas tillsammans" +msgstr "mshared och static kan inte användas tillsammans" #: objcp/lang-specs.h:58 msgid "objc++-cpp-output is deprecated; please use objective-c++-cpp-output instead" -msgstr "objc++-cpp-output bör undvikas; använd objective-c++-cpp-output istället" +msgstr "objc++-cpp-output bör undvikas; använd objective-c++-cpp-output istället" #: ada/gcc-interface/lang-specs.h:34 msgid "-c or -S required for Ada" -msgstr "-c eller -S krävs för Ada" +msgstr "-c eller -S krävs för Ada" #: ada/gcc-interface/lang-specs.h:52 msgid "-c required for gnat2why" -msgstr "-c krävs för gnat2why" +msgstr "-c krävs för gnat2why" #: java/lang-specs.h:33 msgid "-fjni and -femit-class-files are incompatible" -msgstr "-fjni och -femit-class-files är inkompatibla" +msgstr "-fjni och -femit-class-files är inkompatibla" #: java/lang-specs.h:34 msgid "-fjni and -femit-class-file are incompatible" -msgstr "-fjni och -femit-class-file är inkompatibla" +msgstr "-fjni och -femit-class-file är inkompatibla" #: java/lang-specs.h:35 java/lang-specs.h:36 msgid "-femit-class-file should used along with -fsyntax-only" -msgstr "-femit-class-file skall användas tillsammans med -fsyntax-only" +msgstr "-femit-class-file skall användas tillsammans med -fsyntax-only" #: config/mcore/mcore.h:54 msgid "the m210 does not have little endian support" -msgstr "m210 har inte stöd för omvänd byteordning" +msgstr "m210 har inte stöd för omvänd byteordning" #: config/sol2-bi.h:108 config/sol2-bi.h:113 msgid "does not support multilib" -msgstr "stödjer inte multilib" +msgstr "stödjer inte multilib" #: config/arm/arm.h:157 msgid "-mfloat-abi=soft and -mfloat-abi=hard may not be used together" -msgstr "-mfloat-abi=soft och -mfloat_abi=hard får inte användas tillsammans" +msgstr "-mfloat-abi=soft och -mfloat_abi=hard fÃ¥r inte användas tillsammans" #: config/arm/arm.h:159 msgid "-mbig-endian and -mlittle-endian may not be used together" -msgstr "-mbig-endian och -mlittle-endian får inte användas tillsammans" +msgstr "-mbig-endian och -mlittle-endian fÃ¥r inte användas tillsammans" #: config/bfin/elf.h:55 msgid "no processor type specified for linking" -msgstr "ingen processortyp angiven för länkning" +msgstr "ingen processortyp angiven för länkning" #: config/sh/sh.h:430 config/sh/sh.h:433 msgid "SH2a does not support little-endian" -msgstr "SH2a stödjer inte omvänd byteordning" +msgstr "SH2a stödjer inte omvänd byteordning" #: config/pa/pa-hpux10.h:89 config/pa/pa-hpux10.h:92 config/pa/pa-hpux10.h:100 #: config/pa/pa-hpux10.h:103 config/pa/pa-hpux11.h:108 #: config/pa/pa-hpux11.h:111 config/pa/pa64-hpux.h:30 config/pa/pa64-hpux.h:33 #: config/pa/pa64-hpux.h:42 config/pa/pa64-hpux.h:45 msgid "warning: consider linking with '-static' as system libraries with" -msgstr "varning: överväg att länka med \"-static\" eftersom systembibliotek med" +msgstr "varning: överväg att länka med â€-static†eftersom systembibliotek med" #: config/pa/pa-hpux10.h:90 config/pa/pa-hpux10.h:93 config/pa/pa-hpux10.h:101 #: config/pa/pa-hpux10.h:104 config/pa/pa-hpux11.h:109 #: config/pa/pa-hpux11.h:112 config/pa/pa64-hpux.h:31 config/pa/pa64-hpux.h:34 #: config/pa/pa64-hpux.h:43 config/pa/pa64-hpux.h:46 msgid " profiling support are only provided in archive format" -msgstr " profileringsstöd endast finns i arkivformat" +msgstr " profileringsstöd endast finns i arkivformat" #: config/vxworks.h:71 msgid "-Xbind-now and -Xbind-lazy are incompatible" -msgstr "-Xbind-now och -Xbind-lazy är inkompatibla" +msgstr "-Xbind-now och -Xbind-lazy är inkompatibla" #: config/darwin.h:242 msgid "-current_version only allowed with -dynamiclib" -msgstr "-current_version är bara tillåten med -dynamiclib" +msgstr "-current_version är bara tillÃ¥ten med -dynamiclib" #: config/darwin.h:244 msgid "-install_name only allowed with -dynamiclib" -msgstr "-install_name är bara tillåten med -dynamiclib" +msgstr "-install_name är bara tillÃ¥ten med -dynamiclib" #: config/darwin.h:249 msgid "-bundle not allowed with -dynamiclib" -msgstr "-bundle är inte tillåten med -dynamiclib" +msgstr "-bundle är inte tillÃ¥ten med -dynamiclib" #: config/darwin.h:250 msgid "-bundle_loader not allowed with -dynamiclib" -msgstr "-bundle_loader är inte tillåten med -dynamiclib" +msgstr "-bundle_loader är inte tillÃ¥ten med -dynamiclib" #: config/darwin.h:251 msgid "-client_name not allowed with -dynamiclib" -msgstr "-client_name är inte tillåten med -dynamiclib" +msgstr "-client_name är inte tillÃ¥ten med -dynamiclib" #: config/darwin.h:256 msgid "-force_flat_namespace not allowed with -dynamiclib" -msgstr "-force_flat_namespace är inte tillåten med -dynamiclib" +msgstr "-force_flat_namespace är inte tillÃ¥ten med -dynamiclib" #: config/darwin.h:258 msgid "-keep_private_externs not allowed with -dynamiclib" -msgstr "-keep_private_externs är inte tillåten med -dynamiclib" +msgstr "-keep_private_externs är inte tillÃ¥ten med -dynamiclib" #: config/darwin.h:259 msgid "-private_bundle not allowed with -dynamiclib" -msgstr "-private_bundle är inte tillåten med -dynamiclib" +msgstr "-private_bundle är inte tillÃ¥ten med -dynamiclib" #: config/cris/cris.h:192 msgid "do not specify both -march=... and -mcpu=..." -msgstr "ange inte både -march=... och -mcpu=..." +msgstr "ange inte bÃ¥de -march=... och -mcpu=..." #: objc/lang-specs.h:31 objc/lang-specs.h:42 msgid "GNU Objective C no longer supports traditional compilation" -msgstr "GNU Objective C stödjer inte längre traditionell kompilering" +msgstr "GNU Objective C stödjer inte längre traditionell kompilering" #: objc/lang-specs.h:56 msgid "objc-cpp-output is deprecated; please use objective-c-cpp-output instead" -msgstr "objc-cpp-output bör undvikas; använd objective-c-cpp-output istället" +msgstr "objc-cpp-output bör undvikas; använd objective-c-cpp-output istället" #: config/rx/rx.h:57 msgid "-mas100-syntax is incompatible with -gdwarf" -msgstr "-mas100-syntax är inkompatibel med -gdwarf" +msgstr "-mas100-syntax är inkompatibel med -gdwarf" #: config/rx/rx.h:58 msgid "rx200 cpu does not have FPU hardware" -msgstr "rx200-cpu har inte FPU-hårdvara" +msgstr "rx200-cpu har inte FPU-hÃ¥rdvara" #: config/rs6000/darwin.h:96 msgid " conflicting code gen style switches are used" -msgstr " kodgenereringsflaggor som står i konflikt används" +msgstr " kodgenereringsflaggor som stÃ¥r i konflikt används" #: java/lang.opt:122 msgid "Warn if deprecated empty statements are found" -msgstr "Varna om tomma satser som bör undvikas finns" +msgstr "Varna om tomma satser som bör undvikas finns" #: java/lang.opt:126 msgid "Warn if .class files are out of date" -msgstr "Varna om .class-filer är inaktuella" +msgstr "Varna om .class-filer är inaktuella" #: java/lang.opt:130 msgid "Warn if modifiers are specified when not necessary" -msgstr "Varna om modifierare anges när de inte behövs" +msgstr "Varna om modifierare anges när de inte behövs" #: java/lang.opt:150 msgid "--CLASSPATH\tDeprecated; use --classpath instead" -msgstr "--CLASSPATH\tAvrådes, använd -classpath istället" +msgstr "--CLASSPATH\tAvrÃ¥des, använd -classpath istället" #: java/lang.opt:157 msgid "Permit the use of the assert keyword" -msgstr "Tillåt användning av nyckelordet assert" +msgstr "TillÃ¥t användning av nyckelordet assert" #: java/lang.opt:179 msgid "--bootclasspath=<path>\tReplace system path" -msgstr "--bootclasspath=<sökväg>\tErsätt systemsökvägen" +msgstr "--bootclasspath=<sökväg>\tErsätt systemsökvägen" #: java/lang.opt:183 msgid "Generate checks for references to NULL" @@ -4842,7 +4842,7 @@ msgstr "Generera kontroller av referenser till NULL" #: java/lang.opt:187 msgid "--classpath=<path>\tSet class path" -msgstr "--classpath=<sökväg>\tAnge klassökväg" +msgstr "--classpath=<sökväg>\tAnge klassökväg" #: java/lang.opt:194 msgid "Output a class file" @@ -4850,19 +4850,19 @@ msgstr "Skriv en class-fil" #: java/lang.opt:198 msgid "Alias for -femit-class-file" -msgstr "Alias för -femit-class-file" +msgstr "Alias för -femit-class-file" #: java/lang.opt:202 msgid "--encoding=<encoding>\tChoose input encoding (defaults from your locale)" -msgstr "--encoding=<kodning>\tVälj inmatningskodning (din lokal används som standard)" +msgstr "--encoding=<kodning>\tVälj inmatningskodning (din lokal används som standard)" #: java/lang.opt:206 msgid "--extdirs=<path>\tSet the extension directory path" -msgstr "--extdirs=<sökväg>\tAnge katalogsökväg för utökningar" +msgstr "--extdirs=<sökväg>\tAnge katalogsökväg för utökningar" #: java/lang.opt:216 msgid "Input file is a file with a list of filenames to compile" -msgstr "Indatafil är en fil med en lista på filnamn att kompilera" +msgstr "Indatafil är en fil med en lista pÃ¥ filnamn att kompilera" #: java/lang.opt:223 msgid "Always check for non gcj generated classes archives" @@ -4870,59 +4870,59 @@ msgstr "Leta alltid efter klassarkiv ej genererade av gcj" #: java/lang.opt:227 msgid "Assume the runtime uses a hash table to map an object to its synchronization structure" -msgstr "Anta att en hash-tabell används vid körning för att avbilda ett objekt till dess synkroniseringsstruktur" +msgstr "Anta att en hash-tabell används vid körning för att avbilda ett objekt till dess synkroniseringsstruktur" #: java/lang.opt:231 msgid "Generate instances of Class at runtime" -msgstr "Generera instanser av Class vid körtid" +msgstr "Generera instanser av Class vid körtid" #: java/lang.opt:235 msgid "Use offset tables for virtual method calls" -msgstr "Använd avståndstabeller för anrop av virtuella metoder" +msgstr "Använd avstÃ¥ndstabeller för anrop av virtuella metoder" #: java/lang.opt:242 msgid "Assume native functions are implemented using JNI" -msgstr "Anta att inbyggda funktioner är implementerade med JNI" +msgstr "Anta att inbyggda funktioner är implementerade med JNI" #: java/lang.opt:246 msgid "Enable optimization of static class initialization code" -msgstr "Aktivera optimeringar av initieringskod för statiska klasser" +msgstr "Aktivera optimeringar av initieringskod för statiska klasser" #: java/lang.opt:253 msgid "Reduce the amount of reflection meta-data generated" -msgstr "Reducera mängden reflektionsmetadata som genereras" +msgstr "Reducera mängden reflektionsmetadata som genereras" #: java/lang.opt:257 msgid "Enable assignability checks for stores into object arrays" -msgstr "Aktivera kontroll av tilldelningsbarhet för lagring i objektvektorer" +msgstr "Aktivera kontroll av tilldelningsbarhet för lagring i objektvektorer" #: java/lang.opt:261 msgid "Generate code for the Boehm GC" -msgstr "Generera kod för Boehm GC" +msgstr "Generera kod för Boehm GC" #: java/lang.opt:265 msgid "Call a library routine to do integer divisions" -msgstr "Anropa en biblioteksrutin för att göra heltalsdivisioner" +msgstr "Anropa en biblioteksrutin för att göra heltalsdivisioner" #: java/lang.opt:269 msgid "Generate code for built-in atomic operations" -msgstr "Generera kod för inbyggda atomiska operationer" +msgstr "Generera kod för inbyggda atomiska operationer" #: java/lang.opt:273 msgid "Generated should be loaded by bootstrap loader" -msgstr "Genererat skall läsas in av uppstartsladdaren" +msgstr "Genererat skall läsas in av uppstartsladdaren" #: java/lang.opt:277 msgid "Set the source language version" -msgstr "Ange källspråksversion" +msgstr "Ange källsprÃ¥ksversion" #: java/lang.opt:281 msgid "Set the target VM version" -msgstr "Ange typen av mål-VM-version" +msgstr "Ange typen av mÃ¥l-VM-version" #: ada/gcc-interface/lang.opt:51 msgid "-I <dir>.\tAdd <dir> to the end of the main source path" -msgstr "-I <kat>.\tLägg till <kat> till slutet av huvudkällkodssökvägen" +msgstr "-I <kat>.\tLägg till <kat> till slutet av huvudkällkodssökvägen" #: ada/gcc-interface/lang.opt:55 c-family/c.opt:272 msgid "Enable most warning messages" @@ -4930,27 +4930,27 @@ msgstr "Aktivera de flesta varningsmeddelanden" #: ada/gcc-interface/lang.opt:59 msgid "Synonym of -gnatk8" -msgstr "Synonym för -gnatk8" +msgstr "Synonym för -gnatk8" #: ada/gcc-interface/lang.opt:63 msgid "Do not look for source files in standard path" -msgstr "Titta inte efter källkodsfiler i standardsökvägen" +msgstr "Titta inte efter källkodsfiler i standardsökvägen" #: ada/gcc-interface/lang.opt:67 msgid "Do not look for object files in standard path" -msgstr "Titta inte efter objektfiler i standardsökvägen" +msgstr "Titta inte efter objektfiler i standardsökvägen" #: ada/gcc-interface/lang.opt:71 msgid "Select the runtime" -msgstr "Välj körtidssystem" +msgstr "Välj körtidssystem" #: ada/gcc-interface/lang.opt:75 msgid "Catch typos" -msgstr "Fånga skrivfel" +msgstr "FÃ¥nga skrivfel" #: ada/gcc-interface/lang.opt:79 msgid "Set name of output ALI file (internal switch)" -msgstr "Sätt namnet på utmatnings-ALI-filen (intern flagga)" +msgstr "Sätt namnet pÃ¥ utmatnings-ALI-filen (intern flagga)" #: ada/gcc-interface/lang.opt:83 msgid "-gnat<options>\tSpecify options to GNAT" @@ -4958,75 +4958,75 @@ msgstr "-gnat<flaggor>\tAnge flaggor till GNAT" #: fortran/lang.opt:147 msgid "-J<directory>\tPut MODULE files in 'directory'" -msgstr "-J<katalog>\tLägg MODULE-filer i \"katalog\"" +msgstr "-J<katalog>\tLägg MODULE-filer i â€katalogâ€" #: fortran/lang.opt:199 msgid "Warn about possible aliasing of dummy arguments" -msgstr "Varna för eventuella attrappargumentalias" +msgstr "Varna för eventuella attrappargumentalias" #: fortran/lang.opt:203 msgid "Warn about alignment of COMMON blocks" -msgstr "Varna för justering av COMMON-block" +msgstr "Varna för justering av COMMON-block" #: fortran/lang.opt:207 msgid "Warn about missing ampersand in continued character constants" -msgstr "Varna för saknade et-tecken i fortsatta teckenkonstanter" +msgstr "Varna för saknade et-tecken i fortsatta teckenkonstanter" #: fortran/lang.opt:211 msgid "Warn about creation of array temporaries" -msgstr "Varna om vektortemporärer skapas" +msgstr "Varna om vektortemporärer skapas" #: fortran/lang.opt:215 msgid "Warn about truncated character expressions" -msgstr "Varna för avhuggna teckenuttryck" +msgstr "Varna för avhuggna teckenuttryck" #: fortran/lang.opt:223 msgid "Warn about most implicit conversions" -msgstr "Varna för de flesta implicita konvertingar" +msgstr "Varna för de flesta implicita konvertingar" #: fortran/lang.opt:227 msgid "Warn about function call elimination" -msgstr "Varna för eliminering av funktionsanrop" +msgstr "Varna för eliminering av funktionsanrop" #: fortran/lang.opt:231 msgid "Warn about calls with implicit interface" -msgstr "Varna för anrop med implicit gränssnitt" +msgstr "Varna för anrop med implicit gränssnitt" #: fortran/lang.opt:235 msgid "Warn about called procedures not explicitly declared" -msgstr "Varna för anrop av procedurer som inte explicit deklarerats" +msgstr "Varna för anrop av procedurer som inte explicit deklarerats" #: fortran/lang.opt:239 msgid "Warn about truncated source lines" -msgstr "Varna för avhuggna källkodsrader" +msgstr "Varna för avhuggna källkodsrader" #: fortran/lang.opt:243 msgid "Warn on intrinsics not part of the selected standard" -msgstr "Inbyggd för inbyggda om inte är med i den valda standarden" +msgstr "Inbyggd för inbyggda om inte är med i den valda standarden" #: fortran/lang.opt:247 msgid "Warn about real-literal-constants with 'q' exponent-letter" -msgstr "Varna för reella literala konstanter med exponentbokstav \"q\"" +msgstr "Varna för reella literala konstanter med exponentbokstav â€qâ€" #: fortran/lang.opt:255 msgid "Warn about \"suspicious\" constructs" -msgstr "Varna för \"misstänkta\" konstruktioner" +msgstr "Varna för â€misstänkta†konstruktioner" #: fortran/lang.opt:259 msgid "Permit nonconforming uses of the tab character" -msgstr "Tillåt ej konforma användningar av tabulatortecken" +msgstr "TillÃ¥t ej konforma användningar av tabulatortecken" #: fortran/lang.opt:263 msgid "Warn about underflow of numerical constant expressions" -msgstr "Varna för underspill i numeriska konstantuttryck" +msgstr "Varna för underspill i numeriska konstantuttryck" #: fortran/lang.opt:267 msgid "Warn if a user-procedure has the same name as an intrinsic" -msgstr "Varna om en användarprocedur har samma namn som en inbyggd" +msgstr "Varna om en användarprocedur har samma namn som en inbyggd" #: fortran/lang.opt:271 msgid "Warn about unused dummy arguments." -msgstr "Varna för oanvända attrappargument." +msgstr "Varna för oanvända attrappargument." #: fortran/lang.opt:275 msgid "Enable preprocessing" @@ -5038,7 +5038,7 @@ msgstr "Avaktivera preprocessning" #: fortran/lang.opt:291 msgid "Eliminate multiple function invokations also for impure functions" -msgstr "Eliminera multipla funktionsanrop även för orena funktioner" +msgstr "Eliminera multipla funktionsanrop även för orena funktioner" #: fortran/lang.opt:295 msgid "Enable alignment of COMMON blocks" @@ -5046,7 +5046,7 @@ msgstr "Aktivera justering av COMMON-block" #: fortran/lang.opt:299 msgid "All intrinsics procedures are available regardless of selected standard" -msgstr "Alla inbyggda procedurer är tillgängliga oavsett av vald standard" +msgstr "Alla inbyggda procedurer är tillgängliga oavsett av vald standard" #: fortran/lang.opt:307 msgid "Do not treat local variables and COMMON blocks as if they were named in SAVE statements" @@ -5054,92 +5054,92 @@ msgstr "Behandla inte lokala variabler och COMMON-block som om de vore namngivna #: fortran/lang.opt:311 msgid "Specify that backslash in string introduces an escape character" -msgstr "Ange att omvänt snedstreck i strängar inleder ett specialtecken" +msgstr "Ange att omvänt snedstreck i strängar inleder ett specialtecken" #: fortran/lang.opt:315 msgid "Produce a backtrace when a runtime error is encountered" -msgstr "Skapa en stackspårning när ett fel inträffar under körning" +msgstr "Skapa en stackspÃ¥rning när ett fel inträffar under körning" #: fortran/lang.opt:319 msgid "-fblas-matmul-limit=<n>\tSize of the smallest matrix for which matmul will use BLAS" -msgstr "-fblas-matmul-limit=<n>\tStorlek på den minsta matris för vilken matmul kommer använda BLAS" +msgstr "-fblas-matmul-limit=<n>\tStorlek pÃ¥ den minsta matris för vilken matmul kommer använda BLAS" #: fortran/lang.opt:323 msgid "Produce a warning at runtime if a array temporary has been created for a procedure argument" -msgstr "Producera en varning vid körning om en vektortemporär har skapats för ett procedurargument" +msgstr "Producera en varning vid körning om en vektortemporär har skapats för ett procedurargument" #: fortran/lang.opt:327 msgid "Use big-endian format for unformatted files" -msgstr "Använd rak byteordning för oformaterade filer" +msgstr "Använd rak byteordning för oformaterade filer" #: fortran/lang.opt:331 msgid "Use little-endian format for unformatted files" -msgstr "Använd omvänd byteordning för oformaterade filer" +msgstr "Använd omvänd byteordning för oformaterade filer" #: fortran/lang.opt:335 msgid "Use native format for unformatted files" -msgstr "Använd naturlig byteordning för oformaterade filer" +msgstr "Använd naturlig byteordning för oformaterade filer" #: fortran/lang.opt:339 msgid "Swap endianness for unformatted files" -msgstr "Byt byteordning för oformaterade filer" +msgstr "Byt byteordning för oformaterade filer" #: fortran/lang.opt:343 msgid "Use the Cray Pointer extension" -msgstr "Använd Cray-pekarutökningen" +msgstr "Använd Cray-pekarutökningen" #: fortran/lang.opt:347 msgid "Ignore 'D' in column one in fixed form" -msgstr "Ignorera \"D\" i kolumn ett i fix form" +msgstr "Ignorera â€D†i kolumn ett i fix form" #: fortran/lang.opt:351 msgid "Treat lines with 'D' in column one as comments" -msgstr "Tolka rader med \"D\" i kolumn ett som kommentarer" +msgstr "Tolka rader med â€D†i kolumn ett som kommentarer" #: fortran/lang.opt:355 msgid "Set the default double precision kind to an 8 byte wide type" -msgstr "Ange standard för sorten dubbel precision till en 8 byte bred typ" +msgstr "Ange standard för sorten dubbel precision till en 8 byte bred typ" #: fortran/lang.opt:359 msgid "Set the default integer kind to an 8 byte wide type" -msgstr "Ange standard för sorten heltal till en 8 byte bred typ" +msgstr "Ange standard för sorten heltal till en 8 byte bred typ" #: fortran/lang.opt:363 msgid "Set the default real kind to an 8 byte wide type" -msgstr "Ange standard för sorten reell till en 8 byte bred typ" +msgstr "Ange standard för sorten reell till en 8 byte bred typ" #: fortran/lang.opt:367 msgid "Allow dollar signs in entity names" -msgstr "Tillåt dollartecken i entitetsnamn" +msgstr "TillÃ¥t dollartecken i entitetsnamn" #: fortran/lang.opt:371 common.opt:659 common.opt:826 common.opt:830 #: common.opt:834 common.opt:838 common.opt:1323 msgid "Does nothing. Preserved for backward compatibility." -msgstr "Gör ingenting. Bevarad för bakåtkompatibilitet." +msgstr "Gör ingenting. Bevarad för bakÃ¥tkompatibilitet." #: fortran/lang.opt:375 msgid "Display the code tree after parsing" -msgstr "Visa kodträdet efter tolkning" +msgstr "Visa kodträdet efter tolkning" #: fortran/lang.opt:379 msgid "Display the code tree after front end optimization" -msgstr "Visa kodträdet efter framändesoptimering" +msgstr "Visa kodträdet efter framändesoptimering" #: fortran/lang.opt:383 msgid "Display the code tree after parsing; deprecated option" -msgstr "Visa kodträdet efter tolkning, flaggan bör undvikas" +msgstr "Visa kodträdet efter tolkning, flaggan bör undvikas" #: fortran/lang.opt:387 msgid "Specify that an external BLAS library should be used for matmul calls on large-size arrays" -msgstr "Ange att ett externt BLAS-bibliotek skall användas för matmul-anrop på större vektorer" +msgstr "Ange att ett externt BLAS-bibliotek skall användas för matmul-anrop pÃ¥ större vektorer" #: fortran/lang.opt:391 msgid "Use f2c calling convention" -msgstr "Använd f2c:s anropskonvention" +msgstr "Använd f2c:s anropskonvention" #: fortran/lang.opt:395 msgid "Assume that the source file is fixed form" -msgstr "Anta att källkodsfilen är i fix form" +msgstr "Anta att källkodsfilen är i fix form" #: fortran/lang.opt:399 msgid "Interpret any INTEGER(4) as an INTEGER(8)" @@ -5151,39 +5151,39 @@ msgstr "Ange var de kompilerade inbyggda modulerna finns" #: fortran/lang.opt:407 msgid "Allow arbitrary character line width in fixed mode" -msgstr "Tillåt radlängd med godtyckligt antal tecken i fast läge" +msgstr "TillÃ¥t radlängd med godtyckligt antal tecken i fast läge" #: fortran/lang.opt:411 msgid "-ffixed-line-length-<n>\tUse n as character line width in fixed mode" -msgstr "-ffixed-line-length-<n>\tAnvänd radlängd med n tecken i fast läge" +msgstr "-ffixed-line-length-<n>\tAnvänd radlängd med n tecken i fast läge" #: fortran/lang.opt:415 msgid "-ffpe-trap=[...]\tStop on following floating point exceptions" -msgstr "-ffpe-trap=[...]\tStanna vid följande flyttalsundantag" +msgstr "-ffpe-trap=[...]\tStanna vid följande flyttalsundantag" #: fortran/lang.opt:419 msgid "Assume that the source file is free form" -msgstr "Anta att källkodsfilen är i fritt format" +msgstr "Anta att källkodsfilen är i fritt format" #: fortran/lang.opt:423 msgid "Allow arbitrary character line width in free mode" -msgstr "Tillåt radlängd med godtyckligt antal tecken i fri form" +msgstr "TillÃ¥t radlängd med godtyckligt antal tecken i fri form" #: fortran/lang.opt:427 msgid "-ffree-line-length-<n>\tUse n as character line width in free mode" -msgstr "-ffree-line-length-<n>\tAnvänd radlängd med n tecken i fri form" +msgstr "-ffree-line-length-<n>\tAnvänd radlängd med n tecken i fri form" #: fortran/lang.opt:431 msgid "Enable front end optimization" -msgstr "Aktivera framändesoptimeringar" +msgstr "Aktivera framändesoptimeringar" #: fortran/lang.opt:435 msgid "Specify that no implicit typing is allowed, unless overridden by explicit IMPLICIT statements" -msgstr "Ange att ingen implicit typning är tillåten, om inte åsidosatt med uttryckliga IMPLICIT-satser" +msgstr "Ange att ingen implicit typning är tillÃ¥ten, om inte Ã¥sidosatt med uttryckliga IMPLICIT-satser" #: fortran/lang.opt:439 msgid "-finit-character=<n>\tInitialize local character variables to ASCII value n" -msgstr "-finit-character=<n>\tInitiera lokala teckenvariabler med ASCII-värde n" +msgstr "-finit-character=<n>\tInitiera lokala teckenvariabler med ASCII-värde n" #: fortran/lang.opt:443 msgid "-finit-integer=<n>\tInitialize local integer variables to n" @@ -5191,7 +5191,7 @@ msgstr "-finit-integer=<n>\tInitiera lokala heltalsvariabler med n" #: fortran/lang.opt:447 msgid "Initialize local variables to zero (from g77)" -msgstr "Initiera lokala variabler med noll (från g77)" +msgstr "Initiera lokala variabler med noll (frÃ¥n g77)" #: fortran/lang.opt:451 msgid "-finit-logical=<true|false>\tInitialize local logical variables" @@ -5207,27 +5207,27 @@ msgstr "-fmax-array-constructor=<n>\tMaximalt antal objekt i en vektorkonstruera #: fortran/lang.opt:463 msgid "-fmax-identifier-length=<n>\tMaximum identifier length" -msgstr "-fmax-identifier-length=<n>\tMaximal identifierarlängd" +msgstr "-fmax-identifier-length=<n>\tMaximal identifierarlängd" #: fortran/lang.opt:467 msgid "-fmax-subrecord-length=<n>\tMaximum length for subrecords" -msgstr "-fmax-subrecord-length=<n>\tMaximal längd för underposter" +msgstr "-fmax-subrecord-length=<n>\tMaximal längd för underposter" #: fortran/lang.opt:471 msgid "-fmax-stack-var-size=<n>\tSize in bytes of the largest array that will be put on the stack" -msgstr "-fmax-stack-var-size=<n>\tStorlek i byte på den största vektorn som läggs på stacken" +msgstr "-fmax-stack-var-size=<n>\tStorlek i byte pÃ¥ den största vektorn som läggs pÃ¥ stacken" #: fortran/lang.opt:475 msgid "Put all local arrays on stack." -msgstr "Lägg alla lokala vektorer på stacken." +msgstr "Lägg alla lokala vektorer pÃ¥ stacken." #: fortran/lang.opt:479 msgid "Set default accessibility of module entities to PRIVATE." -msgstr "Sätt modulentiteternas standardtillgänglighet till PRIVATE." +msgstr "Sätt modulentiteternas standardtillgänglighet till PRIVATE." #: fortran/lang.opt:487 msgid "Try to lay out derived types as compactly as possible" -msgstr "Försök placera ut härledda typer så kompakt som möjligt" +msgstr "Försök placera ut härledda typer sÃ¥ kompakt som möjligt" #: fortran/lang.opt:495 msgid "Protect parentheses in expressions" @@ -5263,83 +5263,83 @@ msgstr "Tolka en REAL(8) som en REAl(16)" #: fortran/lang.opt:527 msgid "Reallocate the LHS in assignments" -msgstr "Omallokera vänsterhanssidan i tilldelningar" +msgstr "Omallokera vänsterhanssidan i tilldelningar" #: fortran/lang.opt:531 msgid "Use a 4-byte record marker for unformatted files" -msgstr "Använd 4-bytes postmarkeringar för oformaterade filer" +msgstr "Använd 4-bytes postmarkeringar för oformaterade filer" #: fortran/lang.opt:535 msgid "Use an 8-byte record marker for unformatted files" -msgstr "Använd 8-bytes postmarkeringar för oformaterade filer" +msgstr "Använd 8-bytes postmarkeringar för oformaterade filer" #: fortran/lang.opt:539 msgid "Allocate local variables on the stack to allow indirect recursion" -msgstr "Allokera lokala variabler på stacken för att möjliggöra indirekt rekursion" +msgstr "Allokera lokala variabler pÃ¥ stacken för att möjliggöra indirekt rekursion" #: fortran/lang.opt:543 msgid "Copy array sections into a contiguous block on procedure entry" -msgstr "Kopiera vektorsektioner till sammanhängande block vid procedurstart" +msgstr "Kopiera vektorsektioner till sammanhängande block vid procedurstart" #: fortran/lang.opt:547 msgid "-fcoarray=[...]\tSpecify which coarray parallelization should be used" -msgstr "-fcoarray=[...]\tAnge vilken co-vektorsparallellisering som skall användas" +msgstr "-fcoarray=[...]\tAnge vilken co-vektorsparallellisering som skall användas" #: fortran/lang.opt:551 msgid "-fcheck=[...]\tSpecify which runtime checks are to be performed" -msgstr "-fcheck=[...]\tAnge vilka körtidskontroller som skall utföras" +msgstr "-fcheck=[...]\tAnge vilka körtidskontroller som skall utföras" #: fortran/lang.opt:555 msgid "Append a second underscore if the name already contains an underscore" -msgstr "Lägg till ett andra understrykningstecken om namnet redan innehåller ett understrykningstecken" +msgstr "Lägg till ett andra understrykningstecken om namnet redan innehÃ¥ller ett understrykningstecken" #: fortran/lang.opt:563 msgid "Apply negative sign to zero values" -msgstr "Använd negativt tecken på nollvärden" +msgstr "Använd negativt tecken pÃ¥ nollvärden" #: fortran/lang.opt:567 msgid "Append underscores to externally visible names" -msgstr "Lägg till understrykningstecken till externt synliga namn" +msgstr "Lägg till understrykningstecken till externt synliga namn" #: fortran/lang.opt:571 msgid "Compile all program units at once and check all interfaces" -msgstr "Kompilera alla programenheter på en gång och kontrollera alla gränssnitt" +msgstr "Kompilera alla programenheter pÃ¥ en gÃ¥ng och kontrollera alla gränssnitt" #: fortran/lang.opt:611 msgid "Statically link the GNU Fortran helper library (libgfortran)" -msgstr "Länka statiskt till GNU:s Fortran-hjälpbibliotek (libgfortran)" +msgstr "Länka statiskt till GNU:s Fortran-hjälpbibliotek (libgfortran)" #: fortran/lang.opt:615 msgid "Conform to the ISO Fortran 2003 standard" -msgstr "Följ standarden ISO Fortran 2003" +msgstr "Följ standarden ISO Fortran 2003" #: fortran/lang.opt:619 msgid "Conform to the ISO Fortran 2008 standard" -msgstr "Följ standarden ISO Fortran 2008" +msgstr "Följ standarden ISO Fortran 2008" #: fortran/lang.opt:623 msgid "Conform to the ISO Fortran 2008 standard including TS 29113" -msgstr "Följ standarden ISO Fortran 2008 inklusive TS 29113" +msgstr "Följ standarden ISO Fortran 2008 inklusive TS 29113" #: fortran/lang.opt:627 msgid "Conform to the ISO Fortran 95 standard" -msgstr "Följ standarden ISO Fortran 95" +msgstr "Följ standarden ISO Fortran 95" #: fortran/lang.opt:631 msgid "Conform to nothing in particular" -msgstr "Följ inget särskilt" +msgstr "Följ inget särskilt" #: fortran/lang.opt:635 msgid "Accept extensions to support legacy code" -msgstr "Acceptera utökningar för att stödja gammal kod" +msgstr "Acceptera utökningar för att stödja gammal kod" #: config/alpha/alpha.opt:23 config/i386/i386.opt:284 msgid "Do not use hardware fp" -msgstr "Använd inte hårdvaru-fp" +msgstr "Använd inte hÃ¥rdvaru-fp" #: config/alpha/alpha.opt:27 msgid "Use fp registers" -msgstr "Använd fp-register" +msgstr "Använd fp-register" #: config/alpha/alpha.opt:31 msgid "Assume GAS" @@ -5351,51 +5351,51 @@ msgstr "Antag inte GAS" #: config/alpha/alpha.opt:39 msgid "Request IEEE-conformant math library routines (OSF/1)" -msgstr "Begär matematikbiblioteksfunktioner som följer IEEE (OSF/1)" +msgstr "Begär matematikbiblioteksfunktioner som följer IEEE (OSF/1)" #: config/alpha/alpha.opt:43 msgid "Emit IEEE-conformant code, without inexact exceptions" -msgstr "Avge kod som följer IEEE, utan oexakta undantag" +msgstr "Avge kod som följer IEEE, utan oexakta undantag" #: config/alpha/alpha.opt:50 msgid "Do not emit complex integer constants to read-only memory" -msgstr "Avge inte komplexa heltalskonstanter till endast läsbart minne" +msgstr "Avge inte komplexa heltalskonstanter till endast läsbart minne" #: config/alpha/alpha.opt:54 msgid "Use VAX fp" -msgstr "Använd VAX fp" +msgstr "Använd VAX fp" #: config/alpha/alpha.opt:58 msgid "Do not use VAX fp" -msgstr "Använd inte VAX fp" +msgstr "Använd inte VAX fp" #: config/alpha/alpha.opt:62 msgid "Emit code for the byte/word ISA extension" -msgstr "Avge kod för byte/ord-ISA-utökningen" +msgstr "Avge kod för byte/ord-ISA-utökningen" #: config/alpha/alpha.opt:66 msgid "Emit code for the motion video ISA extension" -msgstr "Avge kod för ISA-utökningen för rörlig video" +msgstr "Avge kod för ISA-utökningen för rörlig video" #: config/alpha/alpha.opt:70 msgid "Emit code for the fp move and sqrt ISA extension" -msgstr "Avge kod för ISA-utökningen för fp move och sqrt" +msgstr "Avge kod för ISA-utökningen för fp move och sqrt" #: config/alpha/alpha.opt:74 msgid "Emit code for the counting ISA extension" -msgstr "Avge kod för ISA-utökningen för räkning" +msgstr "Avge kod för ISA-utökningen för räkning" #: config/alpha/alpha.opt:78 msgid "Emit code using explicit relocation directives" -msgstr "Avge kod som använder uttryckliga omlokaliseringsdirektiv" +msgstr "Avge kod som använder uttryckliga omlokaliseringsdirektiv" #: config/alpha/alpha.opt:82 msgid "Emit 16-bit relocations to the small data areas" -msgstr "Avge 16-bitars omlokaliseringar till de små dataareorna" +msgstr "Avge 16-bitars omlokaliseringar till de smÃ¥ dataareorna" #: config/alpha/alpha.opt:86 msgid "Emit 32-bit relocations to the small data areas" -msgstr "Avge 32-bitars omlokaliseringar till de små dataareorna" +msgstr "Avge 32-bitars omlokaliseringar till de smÃ¥ dataareorna" #: config/alpha/alpha.opt:90 msgid "Emit direct branches to local functions" @@ -5407,33 +5407,33 @@ msgstr "Mata ut indirekta hopp till lokala funktioner" #: config/alpha/alpha.opt:98 msgid "Emit rdval instead of rduniq for thread pointer" -msgstr "Avge rdval istället för rduniq för trådpekare" +msgstr "Avge rdval istället för rduniq för trÃ¥dpekare" #: config/alpha/alpha.opt:102 config/s390/s390.opt:98 #: config/sparc/long-double-switch.opt:23 msgid "Use 128-bit long double" -msgstr "Använd 128-bitars long double" +msgstr "Använd 128-bitars long double" #: config/alpha/alpha.opt:106 config/s390/s390.opt:102 #: config/sparc/long-double-switch.opt:27 msgid "Use 64-bit long double" -msgstr "Använd 64-bitars long double" +msgstr "Använd 64-bitars long double" #: config/alpha/alpha.opt:110 msgid "Use features of and schedule given CPU" -msgstr "Använd funktioner i och schemalägg för angiven CPU" +msgstr "Använd funktioner i och schemalägg för angiven CPU" #: config/alpha/alpha.opt:114 msgid "Schedule given CPU" -msgstr "Schemalägg för given CPU" +msgstr "Schemalägg för given CPU" #: config/alpha/alpha.opt:118 msgid "Control the generated fp rounding mode" -msgstr "Styr det genererade fp-avrundningsläget" +msgstr "Styr det genererade fp-avrundningsläget" #: config/alpha/alpha.opt:122 msgid "Control the IEEE trap mode" -msgstr "Styr IEEE-läge för fällor" +msgstr "Styr IEEE-läge för fällor" #: config/alpha/alpha.opt:126 msgid "Control the precision given to fp exceptions" @@ -5441,20 +5441,20 @@ msgstr "Styr precisionen som ges till fp-undantag" #: config/alpha/alpha.opt:130 msgid "Tune expected memory latency" -msgstr "Trimma förväntad minneslatens" +msgstr "Trimma förväntad minneslatens" #: config/alpha/alpha.opt:134 config/ia64/ia64.opt:119 #: config/rs6000/sysv4.opt:33 msgid "Specify bit size of immediate TLS offsets" -msgstr "Ange bitstorlek på omedelbara TLS-avstånd" +msgstr "Ange bitstorlek pÃ¥ omedelbara TLS-avstÃ¥nd" #: config/frv/frv.opt:30 msgid "Use 4 media accumulators" -msgstr "Använd 4 mediaackumulatorer" +msgstr "Använd 4 mediaackumulatorer" #: config/frv/frv.opt:34 msgid "Use 8 media accumulators" -msgstr "Använd 8 mediaackumulatorer" +msgstr "Använd 8 mediaackumulatorer" #: config/frv/frv.opt:38 msgid "Enable label alignment optimizations" @@ -5466,19 +5466,19 @@ msgstr "Allokera cc-register dynamiskt" #: config/frv/frv.opt:49 msgid "Set the cost of branches" -msgstr "Ange kostnaden för grenar" +msgstr "Ange kostnaden för grenar" #: config/frv/frv.opt:53 msgid "Enable conditional execution other than moves/scc" -msgstr "Aktivera villkorlig exekvering förutom moves/scc" +msgstr "Aktivera villkorlig exekvering förutom moves/scc" #: config/frv/frv.opt:57 msgid "Change the maximum length of conditionally-executed sequences" -msgstr "Ändra den maximala längden på villkorligt exekverade sekvenser" +msgstr "Ändra den maximala längden pÃ¥ villkorligt exekverade sekvenser" #: config/frv/frv.opt:61 msgid "Change the number of temporary registers that are available to conditionally-executed sequences" -msgstr "Ändra antalet temporära register som är tillgängliga för villkorligt exekverade sekvenser" +msgstr "Ändra antalet temporära register som är tillgängliga för villkorligt exekverade sekvenser" #: config/frv/frv.opt:65 msgid "Enable conditional moves" @@ -5486,52 +5486,52 @@ msgstr "Aktivera villkorliga flyttningar" #: config/frv/frv.opt:69 msgid "Set the target CPU type" -msgstr "Ange typen av mål-CPU" +msgstr "Ange typen av mÃ¥l-CPU" #: config/frv/frv.opt:73 msgid "Known FR-V CPUs (for use with the -mcpu= option):" -msgstr "Kända FR-V-CPU:er (att användas med flaggan -mcpu=):" +msgstr "Kända FR-V-CPU:er (att användas med flaggan -mcpu=):" #: config/frv/frv.opt:122 msgid "Use fp double instructions" -msgstr "Använd fp-double-instruktioner" +msgstr "Använd fp-double-instruktioner" #: config/frv/frv.opt:126 msgid "Change the ABI to allow double word insns" -msgstr "Ändra ABI:et så det tillåter dubbelordinstruktioner" +msgstr "Ändra ABI:et sÃ¥ det tillÃ¥ter dubbelordinstruktioner" #: config/frv/frv.opt:130 config/bfin/bfin.opt:90 msgid "Enable Function Descriptor PIC mode" -msgstr "Aktivera funktionsbeskrivar-PIC-läge" +msgstr "Aktivera funktionsbeskrivar-PIC-läge" #: config/frv/frv.opt:134 msgid "Just use icc0/fcc0" -msgstr "Använd bara icc0/fcc0" +msgstr "Använd bara icc0/fcc0" #: config/frv/frv.opt:138 msgid "Only use 32 FPRs" -msgstr "Använd bara 32 FPR:er" +msgstr "Använd bara 32 FPR:er" #: config/frv/frv.opt:142 msgid "Use 64 FPRs" -msgstr "Använd 64 FPR:er" +msgstr "Använd 64 FPR:er" #: config/frv/frv.opt:146 msgid "Only use 32 GPRs" -msgstr "Använd bara 32 GPR:er" +msgstr "Använd bara 32 GPR:er" #: config/frv/frv.opt:150 msgid "Use 64 GPRs" -msgstr "Använd 64 GPR:er" +msgstr "Använd 64 GPR:er" #: config/frv/frv.opt:154 msgid "Enable use of GPREL for read-only data in FDPIC" -msgstr "Aktivera användning av GPREL för endast läsbara data i FDPIC" +msgstr "Aktivera användning av GPREL för endast läsbara data i FDPIC" #: config/frv/frv.opt:158 config/rs6000/rs6000.opt:184 #: config/pdp11/pdp11.opt:67 msgid "Use hardware floating point" -msgstr "Använd hårdvaruflyttal" +msgstr "Använd hÃ¥rdvaruflyttal" #: config/frv/frv.opt:162 config/bfin/bfin.opt:94 msgid "Enable inlining of PLT in function calls" @@ -5539,23 +5539,23 @@ msgstr "Aktivera inline:ing av PLT i funktionsanrop" #: config/frv/frv.opt:166 msgid "Enable PIC support for building libraries" -msgstr "Aktivera PIC-stöd för att bygga bibliotek" +msgstr "Aktivera PIC-stöd för att bygga bibliotek" #: config/frv/frv.opt:170 msgid "Follow the EABI linkage requirements" -msgstr "Följ länkningskraven EABI" +msgstr "Följ länkningskraven EABI" #: config/frv/frv.opt:174 msgid "Disallow direct calls to global functions" -msgstr "Tillåt inte direkta anrop till globala funktioner" +msgstr "TillÃ¥t inte direkta anrop till globala funktioner" #: config/frv/frv.opt:178 msgid "Use media instructions" -msgstr "Använd mediainstruktioner" +msgstr "Använd mediainstruktioner" #: config/frv/frv.opt:182 msgid "Use multiply add/subtract instructions" -msgstr "Använd multiplicera-addera-/-subtraherainstruktioner" +msgstr "Använd multiplicera-addera-/-subtraherainstruktioner" #: config/frv/frv.opt:186 msgid "Enable optimizing &&/|| in conditional execution" @@ -5563,7 +5563,7 @@ msgstr "Aktivera optimering av &&/|| i villkorliga uttryck" #: config/frv/frv.opt:190 msgid "Enable nested conditional execution optimizations" -msgstr "Aktivera nästade optimeringar av villkorlig exekvering" +msgstr "Aktivera nästade optimeringar av villkorlig exekvering" #: config/frv/frv.opt:195 msgid "Do not mark ABI switches in e_flags" @@ -5571,7 +5571,7 @@ msgstr "Markera inte ABI-byten i e_flags" #: config/frv/frv.opt:199 msgid "Remove redundant membars" -msgstr "Ta bort överflödiga medlemmar" +msgstr "Ta bort överflödiga medlemmar" #: config/frv/frv.opt:203 msgid "Pack VLIW instructions" @@ -5579,15 +5579,15 @@ msgstr "Packa VLIW-instruktioner" #: config/frv/frv.opt:207 msgid "Enable setting GPRs to the result of comparisons" -msgstr "Aktivera sättande av GPR:er till resultatet av jämförelser" +msgstr "Aktivera sättande av GPR:er till resultatet av jämförelser" #: config/frv/frv.opt:211 msgid "Change the amount of scheduler lookahead" -msgstr "Ändra hur långt schemaläggaren blickar framåt" +msgstr "Ändra hur lÃ¥ngt schemaläggaren blickar framÃ¥t" #: config/frv/frv.opt:215 config/pa/pa.opt:132 msgid "Use software floating point" -msgstr "Använd mjukvaruflyttal" +msgstr "Använd mjukvaruflyttal" #: config/frv/frv.opt:219 msgid "Assume a large TLS segment" @@ -5599,59 +5599,59 @@ msgstr "Anta inte ett stort TLS-segment" #: config/frv/frv.opt:228 msgid "Cause gas to print tomcat statistics" -msgstr "Få gas att skriva tomcat-statistik" +msgstr "FÃ¥ gas att skriva tomcat-statistik" #: config/frv/frv.opt:233 msgid "Link with the library-pic libraries" -msgstr "Länka med biblioteken library-pic" +msgstr "Länka med biblioteken library-pic" #: config/frv/frv.opt:237 msgid "Allow branches to be packed with other instructions" -msgstr "Tillåt grenar att packas med andra instruktioner" +msgstr "TillÃ¥t grenar att packas med andra instruktioner" #: config/mn10300/mn10300.opt:30 msgid "Target the AM33 processor" -msgstr "Sikta på processorn AM33" +msgstr "Sikta pÃ¥ processorn AM33" #: config/mn10300/mn10300.opt:34 msgid "Target the AM33/2.0 processor" -msgstr "Sikta på processorn AM33/2.0" +msgstr "Sikta pÃ¥ processorn AM33/2.0" #: config/mn10300/mn10300.opt:38 msgid "Target the AM34 processor" -msgstr "Sikta på processorn AM34" +msgstr "Sikta pÃ¥ processorn AM34" #: config/mn10300/mn10300.opt:42 config/arm/arm.opt:239 msgid "Tune code for the given processor" -msgstr "Trimma koden för den angivna processorn" +msgstr "Trimma koden för den angivna processorn" #: config/mn10300/mn10300.opt:46 msgid "Work around hardware multiply bug" -msgstr "Gå runt multiplikationsfel i hårdvara" +msgstr "GÃ¥ runt multiplikationsfel i hÃ¥rdvara" #: config/mn10300/mn10300.opt:55 msgid "Enable linker relaxations" -msgstr "Aktivera länkaravslappningar" +msgstr "Aktivera länkaravslappningar" #: config/mn10300/mn10300.opt:59 msgid "Return pointers in both a0 and d0" -msgstr "Returnera pekare i både a0 och d0" +msgstr "Returnera pekare i bÃ¥de a0 och d0" #: config/mn10300/mn10300.opt:63 msgid "Allow gcc to generate LIW instructions" -msgstr "Tillåt gcc att generera LIW-instruktioner" +msgstr "TillÃ¥t gcc att generera LIW-instruktioner" #: config/mn10300/mn10300.opt:67 msgid "Allow gcc to generate the SETLB and Lcc instructions" -msgstr "Tillåt gcc att generera instruktionerna SETLB och Lcc" +msgstr "TillÃ¥t gcc att generera instruktionerna SETLB och Lcc" #: config/s390/tpf.opt:23 msgid "Enable TPF-OS tracing code" -msgstr "Aktivera TPF-OS-spårningskod" +msgstr "Aktivera TPF-OS-spÃ¥rningskod" #: config/s390/tpf.opt:27 msgid "Specify main object for TPF-OS" -msgstr "Ange huvudobjekt för TPF-OS" +msgstr "Ange huvudobjekt för TPF-OS" #: config/s390/s390.opt:39 msgid "31 bit ABI" @@ -5663,15 +5663,15 @@ msgstr "64-bitars ABI" #: config/s390/s390.opt:47 config/i386/i386.opt:115 config/spu/spu.opt:80 msgid "Generate code for given CPU" -msgstr "Generera kod för en given CPU" +msgstr "Generera kod för en given CPU" #: config/s390/s390.opt:78 msgid "Maintain backchain pointer" -msgstr "Håll med bakåtkedjepekare" +msgstr "HÃ¥ll med bakÃ¥tkedjepekare" #: config/s390/s390.opt:82 msgid "Additional debug prints" -msgstr "Ytterligare felsökningsutskrifter" +msgstr "Ytterligare felsökningsutskrifter" #: config/s390/s390.opt:86 msgid "ESA/390 architecture" @@ -5679,48 +5679,48 @@ msgstr "ESA/390-arkitektur" #: config/s390/s390.opt:90 msgid "Enable decimal floating point hardware support" -msgstr "Använd hårdvarustöd för decimala flyttal" +msgstr "Använd hÃ¥rdvarustöd för decimala flyttal" #: config/s390/s390.opt:94 msgid "Enable hardware floating point" -msgstr "Använd hårdvaruflyttal" +msgstr "Använd hÃ¥rdvaruflyttal" #: config/s390/s390.opt:106 msgid "Use packed stack layout" -msgstr "Använd packad stacklayout" +msgstr "Använd packad stacklayout" #: config/s390/s390.opt:110 msgid "Use bras for executable < 64k" -msgstr "Använd bras för körbara program < 64k" +msgstr "Använd bras för körbara program < 64k" #: config/s390/s390.opt:114 msgid "Disable hardware floating point" -msgstr "Använd inte hårdvaruflyttal" +msgstr "Använd inte hÃ¥rdvaruflyttal" #: config/s390/s390.opt:118 msgid "Set the max. number of bytes which has to be left to stack size before a trap instruction is triggered" -msgstr "Ange det maximala antalet byte som måste finnas kvar till stackstorleken före en fällinstruktion utlöses" +msgstr "Ange det maximala antalet byte som mÃ¥ste finnas kvar till stackstorleken före en fällinstruktion utlöses" #: config/s390/s390.opt:122 msgid "Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit" -msgstr "Mata ut extra kod i funktionsprologen för att fånga om stackstorleken överskrider den givna gränsen" +msgstr "Mata ut extra kod i funktionsprologen för att fÃ¥nga om stackstorleken överskrider den givna gränsen" #: config/s390/s390.opt:126 config/ia64/ia64.opt:123 #: config/sparc/sparc.opt:118 config/i386/i386.opt:347 config/spu/spu.opt:84 msgid "Schedule code for given CPU" -msgstr "Schemalägg kod för en given CPU" +msgstr "Schemalägg kod för en given CPU" #: config/s390/s390.opt:130 msgid "mvcle use" -msgstr "använd mvcle" +msgstr "använd mvcle" #: config/s390/s390.opt:134 msgid "Warn if a function uses alloca or creates an array with dynamic size" -msgstr "Varna om en funktion använder alloca eller skapar en vektor med dynamisk storlek" +msgstr "Varna om en funktion använder alloca eller skapar en vektor med dynamisk storlek" #: config/s390/s390.opt:138 msgid "Warn if a single function's framesize exceeds the given framesize" -msgstr "Varna om en enskild funktions ramstorlek överskrider den angivna ramstorleken" +msgstr "Varna om en enskild funktions ramstorlek överskrider den angivna ramstorleken" #: config/s390/s390.opt:142 msgid "z/Architecture" @@ -5728,7 +5728,7 @@ msgstr "z/Arkitektur" #: config/s390/s390.opt:146 msgid "Set the branch costs for conditional branch instructions. Reasonable" -msgstr "Ange grenkostnaden för villkorliga greninstruktioner. Rimliga" +msgstr "Ange grenkostnaden för villkorliga greninstruktioner. Rimliga" #: config/ia64/ilp32.opt:3 msgid "Generate ILP32 code" @@ -5744,27 +5744,27 @@ msgstr "Generera kod med rak byteordning" #: config/ia64/ia64.opt:33 msgid "Generate little endian code" -msgstr "Generera kod med omvänd byteordning" +msgstr "Generera kod med omvänd byteordning" #: config/ia64/ia64.opt:37 msgid "Generate code for GNU as" -msgstr "Generera kod för GNU as" +msgstr "Generera kod för GNU as" #: config/ia64/ia64.opt:41 msgid "Generate code for GNU ld" -msgstr "Generera kod för GNU ld" +msgstr "Generera kod för GNU ld" #: config/ia64/ia64.opt:45 msgid "Emit stop bits before and after volatile extended asms" -msgstr "Mata ut stoppbitar före och efter flyktiga utökade asm:er" +msgstr "Mata ut stoppbitar före och efter flyktiga utökade asm:er" #: config/ia64/ia64.opt:49 msgid "Use in/loc/out register names" -msgstr "Använd in/loc/out-registernamn" +msgstr "Använd in/loc/out-registernamn" #: config/ia64/ia64.opt:56 msgid "Enable use of sdata/scommon/sbss" -msgstr "Aktivera användningen av sdata/scommon/sbss" +msgstr "Aktivera användningen av sdata/scommon/sbss" #: config/ia64/ia64.opt:60 msgid "Generate code without GP reg" @@ -5772,27 +5772,27 @@ msgstr "Generera kod utan GP-reg" #: config/ia64/ia64.opt:64 msgid "gp is constant (but save/restore gp on indirect calls)" -msgstr "gp är konstant (men spara/återställ gp vid indirekta anrop)" +msgstr "gp är konstant (men spara/Ã¥terställ gp vid indirekta anrop)" #: config/ia64/ia64.opt:68 msgid "Generate self-relocatable code" -msgstr "Generera självomlokaliserbar kod" +msgstr "Generera självomlokaliserbar kod" #: config/ia64/ia64.opt:72 msgid "Generate inline floating point division, optimize for latency" -msgstr "Generera inline flyttalsdivision, optimera för svarstid" +msgstr "Generera inline flyttalsdivision, optimera för svarstid" #: config/ia64/ia64.opt:76 msgid "Generate inline floating point division, optimize for throughput" -msgstr "Generera inline flyttalsdivision, optimera för genomströmning" +msgstr "Generera inline flyttalsdivision, optimera för genomströmning" #: config/ia64/ia64.opt:83 msgid "Generate inline integer division, optimize for latency" -msgstr "Generera inline heltalsdivision, optimera för svarstid" +msgstr "Generera inline heltalsdivision, optimera för svarstid" #: config/ia64/ia64.opt:87 msgid "Generate inline integer division, optimize for throughput" -msgstr "Generera inline heltalsdivision, optimera för genomströmning" +msgstr "Generera inline heltalsdivision, optimera för genomströmning" #: config/ia64/ia64.opt:91 msgid "Do not inline integer division" @@ -5800,11 +5800,11 @@ msgstr "Inline:a inte heltalsdivision" #: config/ia64/ia64.opt:95 msgid "Generate inline square root, optimize for latency" -msgstr "Generera inline kvadratrot, optimera för svarstid" +msgstr "Generera inline kvadratrot, optimera för svarstid" #: config/ia64/ia64.opt:99 msgid "Generate inline square root, optimize for throughput" -msgstr "Generera inline kvadratrot, optimera för genomströmning" +msgstr "Generera inline kvadratrot, optimera för genomströmning" #: config/ia64/ia64.opt:103 msgid "Do not inline square root" @@ -5812,11 +5812,11 @@ msgstr "Inline:a inte kvadratrot" #: config/ia64/ia64.opt:107 msgid "Enable Dwarf 2 line debug info via GNU as" -msgstr "Aktivera Dwarf 2 radfelsökningsinformation via GNU as" +msgstr "Aktivera Dwarf 2 radfelsökningsinformation via GNU as" #: config/ia64/ia64.opt:111 msgid "Enable earlier placing stop bits for better scheduling" -msgstr "Aktivera tidigare utplacering av stoppbitar för bättre schemaläggning" +msgstr "Aktivera tidigare utplacering av stoppbitar för bättre schemaläggning" #: config/ia64/ia64.opt:115 config/spu/spu.opt:72 config/sh/sh.opt:258 #: config/pa/pa.opt:58 @@ -5825,144 +5825,144 @@ msgstr "Ange intervall av register att fixera" #: config/ia64/ia64.opt:127 msgid "Known Itanium CPUs (for use with the -mtune= option):" -msgstr "Kända Itanium-CPU:er (att användas med flaggan -mtune=):" +msgstr "Kända Itanium-CPU:er (att användas med flaggan -mtune=):" #: config/ia64/ia64.opt:137 msgid "Use data speculation before reload" -msgstr "Använd dataspekulation före omläsning" +msgstr "Använd dataspekulation före omläsning" #: config/ia64/ia64.opt:141 msgid "Use data speculation after reload" -msgstr "Använd dataspekulation efter omläsning" +msgstr "Använd dataspekulation efter omläsning" #: config/ia64/ia64.opt:145 msgid "Use control speculation" -msgstr "Använd styrspekulation" +msgstr "Använd styrspekulation" #: config/ia64/ia64.opt:149 msgid "Use in block data speculation before reload" -msgstr "Använd inblocksdataspekulation före omläsning" +msgstr "Använd inblocksdataspekulation före omläsning" #: config/ia64/ia64.opt:153 msgid "Use in block data speculation after reload" -msgstr "Använd inblocksdataspekulation efter omläsning" +msgstr "Använd inblocksdataspekulation efter omläsning" #: config/ia64/ia64.opt:157 msgid "Use in block control speculation" -msgstr "Använd inblocksstyrspekulation" +msgstr "Använd inblocksstyrspekulation" #: config/ia64/ia64.opt:161 msgid "Use simple data speculation check" -msgstr "Använd enkel dataspekulationskontroll" +msgstr "Använd enkel dataspekulationskontroll" #: config/ia64/ia64.opt:165 msgid "Use simple data speculation check for control speculation" -msgstr "Använd enkel dataspekulationskontroll för styrspekulation" +msgstr "Använd enkel dataspekulationskontroll för styrspekulation" #: config/ia64/ia64.opt:169 msgid "If set, data speculative instructions will be chosen for schedule only if there are no other choices at the moment " -msgstr "Om satt kommer dataspekulativa instruktioner väljas för schemaläggning endast om det inte finns några andra val för tillfället" +msgstr "Om satt kommer dataspekulativa instruktioner väljas för schemaläggning endast om det inte finns nÃ¥gra andra val för tillfället" #: config/ia64/ia64.opt:173 msgid "If set, control speculative instructions will be chosen for schedule only if there are no other choices at the moment " -msgstr "Om satt kommer styrspekulativa instruktioner väljas för schemaläggning endast om det inte finns några andra val för tillfället" +msgstr "Om satt kommer styrspekulativa instruktioner väljas för schemaläggning endast om det inte finns nÃ¥gra andra val för tillfället" #: config/ia64/ia64.opt:177 msgid "Count speculative dependencies while calculating priority of instructions" -msgstr "Räkna spekulativa beroenden vid beräkning av prioritet för instruktioner" +msgstr "Räkna spekulativa beroenden vid beräkning av prioritet för instruktioner" #: config/ia64/ia64.opt:181 msgid "Place a stop bit after every cycle when scheduling" -msgstr "Placera en stoppbit efter varje cykel vid schemaläggning" +msgstr "Placera en stoppbit efter varje cykel vid schemaläggning" #: config/ia64/ia64.opt:185 msgid "Assume that floating-point stores and loads are not likely to cause conflict when placed into one instruction group" -msgstr "Anta att flyttalslagringar och -laddningar troligen inte orsakar konflikter när de placeras i en instruktionsgrupp" +msgstr "Anta att flyttalslagringar och -laddningar troligen inte orsakar konflikter när de placeras i en instruktionsgrupp" #: config/ia64/ia64.opt:189 msgid "Soft limit on number of memory insns per instruction group, giving lower priority to subsequent memory insns attempting to schedule in the same insn group. Frequently useful to prevent cache bank conflicts. Default value is 1" -msgstr "Mjuk gräns på antalet minnesinstruktioner per instruktionsgrupp, ger lägre prioritet till försök att schemalägga senare minnesinstruktioner i samma instruktionsgrupp. Ofta användbart för att hindra konflikter mellan cache-bankar. Standardvärdet är 1" +msgstr "Mjuk gräns pÃ¥ antalet minnesinstruktioner per instruktionsgrupp, ger lägre prioritet till försök att schemalägga senare minnesinstruktioner i samma instruktionsgrupp. Ofta användbart för att hindra konflikter mellan cache-bankar. Standardvärdet är 1" #: config/ia64/ia64.opt:193 msgid "Disallow more than 'msched-max-memory-insns' in instruction group. Otherwise, limit is 'soft' (prefer non-memory operations when limit is reached)" -msgstr "Tillåt inte mer än \"msched-max-memory-insns\" i instruktionsgrupper. Annars är gränsen \"mjuk\" (föredra icke-minnesoperationer när gränsen är nådd)" +msgstr "TillÃ¥t inte mer än â€msched-max-memory-insns†i instruktionsgrupper. Annars är gränsen â€mjuk†(föredra icke-minnesoperationer när gränsen är nÃ¥dd)" #: config/ia64/ia64.opt:197 msgid "Don't generate checks for control speculation in selective scheduling" -msgstr "Generera inte kontroller av styrningsspekulation i selektiv schemaläggning" +msgstr "Generera inte kontroller av styrningsspekulation i selektiv schemaläggning" #: config/m32c/m32c.opt:24 msgid "-msim\tUse simulator runtime" -msgstr "-msim\tAnvänd simulatorkörtider" +msgstr "-msim\tAnvänd simulatorkörtider" #: config/m32c/m32c.opt:28 msgid "-mcpu=r8c\tCompile code for R8C variants" -msgstr "-mcpu=r8c\tKompilera kod för R8C-varianter" +msgstr "-mcpu=r8c\tKompilera kod för R8C-varianter" #: config/m32c/m32c.opt:32 msgid "-mcpu=m16c\tCompile code for M16C variants" -msgstr "-mcpu=m16c\tKompilera kod för M16C-varianter" +msgstr "-mcpu=m16c\tKompilera kod för M16C-varianter" #: config/m32c/m32c.opt:36 msgid "-mcpu=m32cm\tCompile code for M32CM variants" -msgstr "-mcpu=m32cm\tKompilera kod för M32CM-varianter" +msgstr "-mcpu=m32cm\tKompilera kod för M32CM-varianter" #: config/m32c/m32c.opt:40 msgid "-mcpu=m32c\tCompile code for M32C variants" -msgstr "-mcpu=m32c\tKompilera kod för M32C-varianter" +msgstr "-mcpu=m32c\tKompilera kod för M32C-varianter" #: config/m32c/m32c.opt:44 msgid "-memregs=\tNumber of memreg bytes (default: 16, range: 0..16)" msgstr "-memregs=\tAntal memreg-byte (standard: 16, intervall: 0..16)" -# fixme: fp = flyttal, men hur skall man skriva det. Förkortat eller FPU? +# fixme: fp = flyttal, men hur skall man skriva det. Förkortat eller FPU? #: config/sparc/sparc.opt:30 config/sparc/sparc.opt:34 msgid "Use hardware FP" -msgstr "Använd hårdvaru-fp" +msgstr "Använd hÃ¥rdvaru-fp" #: config/sparc/sparc.opt:38 msgid "Do not use hardware FP" -msgstr "Använd inte hårdvaru-fp" +msgstr "Använd inte hÃ¥rdvaru-fp" #: config/sparc/sparc.opt:42 msgid "Use flat register window model" -msgstr "Använd platt registerfönstermodell" +msgstr "Använd platt registerfönstermodell" #: config/sparc/sparc.opt:46 msgid "Assume possible double misalignment" -msgstr "Anta möjlig feljustering av double" +msgstr "Anta möjlig feljustering av double" #: config/sparc/sparc.opt:50 msgid "Use ABI reserved registers" -msgstr "Använd register reserverade av ABI" +msgstr "Använd register reserverade av ABI" #: config/sparc/sparc.opt:54 msgid "Use hardware quad FP instructions" -msgstr "Använd hårdvaruinstruktioner för quad fp" +msgstr "Använd hÃ¥rdvaruinstruktioner för quad fp" #: config/sparc/sparc.opt:58 msgid "Do not use hardware quad fp instructions" -msgstr "Använd inte hårdvaruinstruktioner för quad fp" +msgstr "Använd inte hÃ¥rdvaruinstruktioner för quad fp" #: config/sparc/sparc.opt:62 msgid "Compile for V8+ ABI" -msgstr "Kompilera för V8+-ABI" +msgstr "Kompilera för V8+-ABI" #: config/sparc/sparc.opt:66 msgid "Use UltraSPARC Visual Instruction Set version 1.0 extensions" -msgstr "Utnyttja UltraSPARC-utökningarna Visual Instruction Set version 1.0" +msgstr "Utnyttja UltraSPARC-utökningarna Visual Instruction Set version 1.0" #: config/sparc/sparc.opt:70 msgid "Use UltraSPARC Visual Instruction Set version 2.0 extensions" -msgstr "Utnyttja UltraSPARC-utökningarna Visual Instruction Set version 2.0" +msgstr "Utnyttja UltraSPARC-utökningarna Visual Instruction Set version 2.0" #: config/sparc/sparc.opt:74 msgid "Use UltraSPARC Visual Instruction Set version 3.0 extensions" -msgstr "Utnyttja UltraSPARC-utökningarna Visual Instruction Set version 3.0" +msgstr "Utnyttja UltraSPARC-utökningarna Visual Instruction Set version 3.0" #: config/sparc/sparc.opt:78 msgid "Use UltraSPARC Fused Multiply-Add extensions" -msgstr "Utnyttja UltraSPARC-utökningen sammansmält multiplicera-addera" +msgstr "Utnyttja UltraSPARC-utökningen sammansmält multiplicera-addera" #: config/sparc/sparc.opt:82 msgid "Use UltraSPARC Population-Count instruction" @@ -5970,43 +5970,43 @@ msgstr "Utnyttja UltraSparc:s instruktion populeringsantals" #: config/sparc/sparc.opt:86 msgid "Pointers are 64-bit" -msgstr "Pekare är 64-bitars" +msgstr "Pekare är 64-bitars" #: config/sparc/sparc.opt:90 msgid "Pointers are 32-bit" -msgstr "Pekare är 32-bitars" +msgstr "Pekare är 32-bitars" #: config/sparc/sparc.opt:94 msgid "Use 64-bit ABI" -msgstr "Använd 64-bitars ABI" +msgstr "Använd 64-bitars ABI" #: config/sparc/sparc.opt:98 msgid "Use 32-bit ABI" -msgstr "Använd 32-bitars ABI" +msgstr "Använd 32-bitars ABI" #: config/sparc/sparc.opt:102 msgid "Use stack bias" -msgstr "Använd stackförskjutning" +msgstr "Använd stackförskjutning" #: config/sparc/sparc.opt:106 msgid "Use structs on stronger alignment for double-word copies" -msgstr "Använd starkare justering för poster för dubbelordkopieringar" +msgstr "Använd starkare justering för poster för dubbelordkopieringar" #: config/sparc/sparc.opt:110 msgid "Optimize tail call instructions in assembler and linker" -msgstr "Optimera svansanropsinstruktioner i assembler och länkare" +msgstr "Optimera svansanropsinstruktioner i assembler och länkare" #: config/sparc/sparc.opt:114 msgid "Use features of and schedule code for given CPU" -msgstr "Använd funktioner i och schemalägg kod för angiven CPU" +msgstr "Använd funktioner i och schemalägg kod för angiven CPU" #: config/sparc/sparc.opt:185 msgid "Use given SPARC-V9 code model" -msgstr "Använd angiven SPARC-V9-kodmodell" +msgstr "Använd angiven SPARC-V9-kodmodell" #: config/sparc/sparc.opt:189 msgid "Enable debug output" -msgstr "Aktivera felsökningsutdata" +msgstr "Aktivera felsökningsutdata" #: config/sparc/sparc.opt:193 msgid "Enable strict 32-bit psABI struct return checking." @@ -6014,31 +6014,31 @@ msgstr "Aktivera strikt 32-bits psABI-kontroller av postreturer." #: config/sparc/sparc.opt:197 msgid "Enable workaround for single erratum of AT697F processor" -msgstr "Aktivera en lösning för ensamt errata för processorn AT697F" +msgstr "Aktivera en lösning för ensamt errata för processorn AT697F" #: config/sparc/sparc.opt:221 msgid "Specify the memory model in effect for the program." -msgstr "Ange minnesmodellen som skall gälla för programmet." +msgstr "Ange minnesmodellen som skall gälla för programmet." #: config/m32r/m32r.opt:34 msgid "Compile for the m32rx" -msgstr "Kompilera för en m32rx" +msgstr "Kompilera för en m32rx" #: config/m32r/m32r.opt:38 msgid "Compile for the m32r2" -msgstr "Kompilera för en m32r2" +msgstr "Kompilera för en m32r2" #: config/m32r/m32r.opt:42 msgid "Compile for the m32r" -msgstr "Kompilera för en m32r" +msgstr "Kompilera för en m32r" #: config/m32r/m32r.opt:46 msgid "Align all loops to 32 byte boundary" -msgstr "Justera alla slingor till 32-bytesgräns" +msgstr "Justera alla slingor till 32-bytesgräns" #: config/m32r/m32r.opt:50 msgid "Prefer branches over conditional execution" -msgstr "Föredra hopp framför villkorlig körning" +msgstr "Föredra hopp framför villkorlig körning" #: config/m32r/m32r.opt:54 msgid "Give branches their default cost" @@ -6050,19 +6050,19 @@ msgstr "Visa kompileringstidsstatistik" #: config/m32r/m32r.opt:62 msgid "Specify cache flush function" -msgstr "Ange cache-tömningsfunktion" +msgstr "Ange cache-tömningsfunktion" #: config/m32r/m32r.opt:66 msgid "Specify cache flush trap number" -msgstr "Ange cache-tömningsfällnummer" +msgstr "Ange cache-tömningsfällnummer" #: config/m32r/m32r.opt:70 msgid "Only issue one instruction per cycle" -msgstr "Lägg bara ut en instruktion per cykel" +msgstr "Lägg bara ut en instruktion per cykel" #: config/m32r/m32r.opt:74 msgid "Allow two instructions to be issued per cycle" -msgstr "Tillåt att två instruktioner läggs ut per cykel" +msgstr "TillÃ¥t att tvÃ¥ instruktioner läggs ut per cykel" #: config/m32r/m32r.opt:78 msgid "Code size: small, medium or large" @@ -6070,120 +6070,120 @@ msgstr "Kodstorlek: small, medium, eller large" #: config/m32r/m32r.opt:94 msgid "Don't call any cache flush functions" -msgstr "Anropa inte några cache-tömningsfunktioner" +msgstr "Anropa inte nÃ¥gra cache-tömningsfunktioner" #: config/m32r/m32r.opt:98 msgid "Don't call any cache flush trap" -msgstr "Anropa inga cache-tömningsfällor" +msgstr "Anropa inga cache-tömningsfällor" #: config/m32r/m32r.opt:105 msgid "Small data area: none, sdata, use" -msgstr "Litet dataområde: none, sdata, use" +msgstr "Litet dataomrÃ¥de: none, sdata, use" #: config/m68k/m68k.opt:31 msgid "Generate code for a 520X" -msgstr "Generera kod för en 520X" +msgstr "Generera kod för en 520X" #: config/m68k/m68k.opt:35 msgid "Generate code for a 5206e" -msgstr "Generera kod för en 5206e" +msgstr "Generera kod för en 5206e" #: config/m68k/m68k.opt:39 msgid "Generate code for a 528x" -msgstr "Generera kod för en 528x" +msgstr "Generera kod för en 528x" #: config/m68k/m68k.opt:43 msgid "Generate code for a 5307" -msgstr "Generera kod för en 5307" +msgstr "Generera kod för en 5307" #: config/m68k/m68k.opt:47 msgid "Generate code for a 5407" -msgstr "Generera kod för en 5407" +msgstr "Generera kod för en 5407" #: config/m68k/m68k.opt:51 config/m68k/m68k.opt:112 msgid "Generate code for a 68000" -msgstr "Generera kod för en 68000" +msgstr "Generera kod för en 68000" #: config/m68k/m68k.opt:55 msgid "Generate code for a 68010" -msgstr "Generera kod för en 68010" +msgstr "Generera kod för en 68010" #: config/m68k/m68k.opt:59 config/m68k/m68k.opt:116 msgid "Generate code for a 68020" -msgstr "Generera kod för en 68020" +msgstr "Generera kod för en 68020" #: config/m68k/m68k.opt:63 msgid "Generate code for a 68040, without any new instructions" -msgstr "Generera kod för en 68040, utan några nya instruktioner" +msgstr "Generera kod för en 68040, utan nÃ¥gra nya instruktioner" #: config/m68k/m68k.opt:67 msgid "Generate code for a 68060, without any new instructions" -msgstr "Generera kod för en 68060, utan några nya instruktioner" +msgstr "Generera kod för en 68060, utan nÃ¥gra nya instruktioner" #: config/m68k/m68k.opt:71 msgid "Generate code for a 68030" -msgstr "Generera kod för en 68030" +msgstr "Generera kod för en 68030" #: config/m68k/m68k.opt:75 msgid "Generate code for a 68040" -msgstr "Generera kod för en 68040" +msgstr "Generera kod för en 68040" #: config/m68k/m68k.opt:79 msgid "Generate code for a 68060" -msgstr "Generera kod för en 68060" +msgstr "Generera kod för en 68060" #: config/m68k/m68k.opt:83 msgid "Generate code for a 68302" -msgstr "Generera kod för en 68302" +msgstr "Generera kod för en 68302" #: config/m68k/m68k.opt:87 msgid "Generate code for a 68332" -msgstr "Generera kod för en 68332" +msgstr "Generera kod för en 68332" #: config/m68k/m68k.opt:92 msgid "Generate code for a 68851" -msgstr "Generera kod för en 68851" +msgstr "Generera kod för en 68851" #: config/m68k/m68k.opt:96 msgid "Generate code that uses 68881 floating-point instructions" -msgstr "Generera kod som använder flyttalsinstruktioner för 68881" +msgstr "Generera kod som använder flyttalsinstruktioner för 68881" #: config/m68k/m68k.opt:100 msgid "Align variables on a 32-bit boundary" -msgstr "Justera variabler på en 32-bitarsgräns" +msgstr "Justera variabler pÃ¥ en 32-bitarsgräns" #: config/m68k/m68k.opt:104 config/c6x/c6x.opt:67 config/arm/arm.opt:81 #: config/score/score.opt:47 msgid "Specify the name of the target architecture" -msgstr "Ange namnet på målarkitekturen" +msgstr "Ange namnet pÃ¥ mÃ¥larkitekturen" #: config/m68k/m68k.opt:108 msgid "Use the bit-field instructions" -msgstr "Använd bitfältsinstruktionerna" +msgstr "Använd bitfältsinstruktionerna" #: config/m68k/m68k.opt:120 msgid "Generate code for a ColdFire v4e" -msgstr "Generera kod för en ColdFire v4e" +msgstr "Generera kod för en ColdFire v4e" #: config/m68k/m68k.opt:124 msgid "Specify the target CPU" -msgstr "Ange mål-CPU:n" +msgstr "Ange mÃ¥l-CPU:n" #: config/m68k/m68k.opt:128 msgid "Generate code for a cpu32" -msgstr "Generera kod för en cpu32" +msgstr "Generera kod för en cpu32" #: config/m68k/m68k.opt:132 msgid "Use hardware division instructions on ColdFire" -msgstr "Använd hårdvarudivisionsinstruktioner på ColdFire" +msgstr "Använd hÃ¥rdvarudivisionsinstruktioner pÃ¥ ColdFire" #: config/m68k/m68k.opt:136 msgid "Generate code for a Fido A" -msgstr "Generera kod för en Fido A" +msgstr "Generera kod för en Fido A" #: config/m68k/m68k.opt:140 msgid "Generate code which uses hardware floating point instructions" -msgstr "Generera kod som använder hårdvaruflyttalsinstruktioner" +msgstr "Generera kod som använder hÃ¥rdvaruflyttalsinstruktioner" #: config/m68k/m68k.opt:144 msgid "Enable ID based shared library" @@ -6191,15 +6191,15 @@ msgstr "Aktivera ID-baserat delat bibliotek" #: config/m68k/m68k.opt:148 msgid "Do not use the bit-field instructions" -msgstr "Använd inte bitfältsinstruktionerna" +msgstr "Använd inte bitfältsinstruktionerna" #: config/m68k/m68k.opt:152 msgid "Use normal calling convention" -msgstr "Använd normal anropskonvention" +msgstr "Använd normal anropskonvention" #: config/m68k/m68k.opt:156 msgid "Consider type 'int' to be 32 bits wide" -msgstr "Betrakta typen \"int\" som 32 bitar bred" +msgstr "Betrakta typen â€int†som 32 bitar bred" #: config/m68k/m68k.opt:160 msgid "Generate pc-relative code" @@ -6207,7 +6207,7 @@ msgstr "Generera pc-relativ kod" #: config/m68k/m68k.opt:164 msgid "Use different calling convention using 'rtd'" -msgstr "Använd en annan anropskonvention som använder \"rtd\"" +msgstr "Använd en annan anropskonvention som använder â€rtdâ€" #: config/m68k/m68k.opt:168 config/bfin/bfin.opt:78 msgid "Enable separate data segment" @@ -6215,92 +6215,92 @@ msgstr "Aktivera separat datasegment" #: config/m68k/m68k.opt:172 config/bfin/bfin.opt:74 msgid "ID of shared library to build" -msgstr "ID för delat bibliotek att bygga" +msgstr "ID för delat bibliotek att bygga" #: config/m68k/m68k.opt:176 msgid "Consider type 'int' to be 16 bits wide" -msgstr "Betrakta typen \"int\" som 16 bitar bred" +msgstr "Betrakta typen â€int†som 16 bitar bred" #: config/m68k/m68k.opt:180 msgid "Generate code with library calls for floating point" -msgstr "Generera kod med biblioteksanrop för flyttal" +msgstr "Generera kod med biblioteksanrop för flyttal" #: config/m68k/m68k.opt:184 msgid "Do not use unaligned memory references" -msgstr "Använd inte ojusterade minnesreferenser" +msgstr "Använd inte ojusterade minnesreferenser" #: config/m68k/m68k.opt:188 msgid "Tune for the specified target CPU or architecture" -msgstr "Trimma för den angivna mål-CPU:n eller arkitekturen" +msgstr "Trimma för den angivna mÃ¥l-CPU:n eller arkitekturen" #: config/m68k/m68k.opt:192 msgid "Support more than 8192 GOT entries on ColdFire" -msgstr "Stöd mer än 8192 GOT-poster på ColdFire" +msgstr "Stöd mer än 8192 GOT-poster pÃ¥ ColdFire" #: config/m68k/m68k.opt:196 msgid "Support TLS segment larger than 64K" -msgstr "Stöd TLS-segment större än 64 k" +msgstr "Stöd TLS-segment större än 64 k" #: config/m68k/ieee.opt:24 config/i386/i386.opt:212 msgid "Use IEEE math for fp comparisons" -msgstr "Använd IEEE matematik för flyttaljämförelser" +msgstr "Använd IEEE matematik för flyttaljämförelser" #: config/m68k/m68k-tables.opt:25 msgid "Known M68K CPUs (for use with the -mcpu= option):" -msgstr "Kända M68K-CPU:er (att användas med flaggan -mcpu=):" +msgstr "Kända M68K-CPU:er (att användas med flaggan -mcpu=):" #: config/m68k/m68k-tables.opt:347 msgid "Known M68K microarchitectures (for use with the -mtune= option):" -msgstr "Kända M68K-mikroarkitekturer (att användas med flaggan -mtune=):" +msgstr "Kända M68K-mikroarkitekturer (att användas med flaggan -mtune=):" #: config/m68k/m68k-tables.opt:393 msgid "Known M68K ISAs (for use with the -march= option):" -msgstr "Kända M68K-ISA:er (att användas med flaggan -march=):" +msgstr "Kända M68K-ISA:er (att användas med flaggan -march=):" #: config/i386/interix.opt:33 config/i386/cygming.opt:47 msgid "Use the GNU extension to the PE format for aligned common data" -msgstr "Använd GNU-utvidgningarna för PE-formatet för justerade common-data" +msgstr "Använd GNU-utvidgningarna för PE-formatet för justerade common-data" #: config/i386/djgpp.opt:25 msgid "Ignored (obsolete)" -msgstr "Ignorerad (föråldrad)" +msgstr "Ignorerad (förÃ¥ldrad)" #: config/i386/mingw.opt:29 msgid "Warn about none ISO msvcrt scanf/printf width extensions" -msgstr "Varna för msvcrt-breddutökningar av scanf/printf som inte följer ISO" +msgstr "Varna för msvcrt-breddutökningar av scanf/printf som inte följer ISO" #: config/i386/mingw.opt:33 msgid "For nested functions on stack executable permission is set." -msgstr "För nästade funktioner på stacken sätts exekveringsrättigheter." +msgstr "För nästade funktioner pÃ¥ stacken sätts exekveringsrättigheter." #: config/i386/i386.opt:79 msgid "sizeof(long double) is 16" -msgstr "sizeof(long double) är 16" +msgstr "sizeof(long double) är 16" -# fixme: fp = flyttal, men hur skall man skriva det. Förkortat eller FPU? +# fixme: fp = flyttal, men hur skall man skriva det. Förkortat eller FPU? #: config/i386/i386.opt:83 config/i386/i386.opt:208 msgid "Use hardware fp" -msgstr "Använd hårdvaru-fp" +msgstr "Använd hÃ¥rdvaru-fp" #: config/i386/i386.opt:87 msgid "sizeof(long double) is 12" -msgstr "sizeof(long double) är 12" +msgstr "sizeof(long double) är 12" #: config/i386/i386.opt:91 config/sh/sh.opt:206 msgid "Reserve space for outgoing arguments in the function prologue" -msgstr "Reservera utrymmer för utgående argument i funktionsprologen" +msgstr "Reservera utrymmer för utgÃ¥ende argument i funktionsprologen" #: config/i386/i386.opt:95 msgid "Align some doubles on dword boundary" -msgstr "Justera några double på dword-gräns" +msgstr "Justera nÃ¥gra double pÃ¥ dword-gräns" #: config/i386/i386.opt:99 msgid "Function starts are aligned to this power of 2" -msgstr "Funktionsbörjan justeras till denna 2-potens" +msgstr "Funktionsbörjan justeras till denna 2-potens" #: config/i386/i386.opt:103 msgid "Jump targets are aligned to this power of 2" -msgstr "Hoppmål justeras till denna 2-potens" +msgstr "HoppmÃ¥l justeras till denna 2-potens" #: config/i386/i386.opt:107 msgid "Loop code aligned to this power of 2" @@ -6308,51 +6308,51 @@ msgstr "Loop-kod justeras till denna 2-potens" #: config/i386/i386.opt:111 msgid "Align destination of the string operations" -msgstr "Justera målet för strängoperationerna" +msgstr "Justera mÃ¥let för strängoperationerna" #: config/i386/i386.opt:119 msgid "Use given assembler dialect" -msgstr "Använd angiven assemblerdialekt" +msgstr "Använd angiven assemblerdialekt" #: config/i386/i386.opt:123 msgid "Known assembler dialects (for use with the -masm-dialect= option):" -msgstr "Kända assemblerdialekter (att användas med flaggan -masm-dialect=):" +msgstr "Kända assemblerdialekter (att användas med flaggan -masm-dialect=):" #: config/i386/i386.opt:133 msgid "Branches are this expensive (1-5, arbitrary units)" -msgstr "Hopp är så här dyra (1-5, godtyckliga enheter)" +msgstr "Hopp är sÃ¥ här dyra (1-5, godtyckliga enheter)" #: config/i386/i386.opt:137 msgid "Data greater than given threshold will go into .ldata section in x86-64 medium model" -msgstr "Data större än den angivna gränsen kommer hamna i .ldata-sektionen i x86-64 medelmodell" +msgstr "Data större än den angivna gränsen kommer hamna i .ldata-sektionen i x86-64 medelmodell" #: config/i386/i386.opt:141 msgid "Use given x86-64 code model" -msgstr "Använd angiven x86-64 kodmodell" +msgstr "Använd angiven x86-64 kodmodell" #: config/i386/i386.opt:145 config/rs6000/linux64.opt:32 msgid "Known code models (for use with the -mcmodel= option):" -msgstr "Kända kodmodeller (att användas med flaggan -mcmodel=):" +msgstr "Kända kodmodeller (att användas med flaggan -mcmodel=):" #: config/i386/i386.opt:163 msgid "%<-mcpu=%> is deprecated; use %<-mtune=%> or %<-march=%> instead" -msgstr "%<-mcpu=%> bör undvikas. Använd %<-mtune=%> eller %<-march=%> istället." +msgstr "%<-mcpu=%> bör undvikas. Använd %<-mtune=%> eller %<-march=%> istället." #: config/i386/i386.opt:167 msgid "Generate sin, cos, sqrt for FPU" -msgstr "Generera sin, cos, sqrt för FPU" +msgstr "Generera sin, cos, sqrt för FPU" #: config/i386/i386.opt:171 msgid "Always use Dynamic Realigned Argument Pointer (DRAP) to realign stack" -msgstr "Använd alltid Dynamic Realigned Argument Pointer (DRAP) för att justera stacken" +msgstr "Använd alltid Dynamic Realigned Argument Pointer (DRAP) för att justera stacken" #: config/i386/i386.opt:175 msgid "Return values of functions in FPU registers" -msgstr "Returnera värden från funktioner i FPU-register" +msgstr "Returnera värden frÃ¥n funktioner i FPU-register" #: config/i386/i386.opt:179 msgid "Generate floating point mathematics using given instruction set" -msgstr "Generera flyttalsmatematik med den angivna instruktionsuppsättningen" +msgstr "Generera flyttalsmatematik med den angivna instruktionsuppsättningen" #: config/i386/i386.opt:183 msgid "Valid arguments to -mfpmath=:" @@ -6360,51 +6360,51 @@ msgstr "Giltiga argument till -mfpmath=:" #: config/i386/i386.opt:216 msgid "Inline all known string operations" -msgstr "Inline:a alla kända strängoperationer" +msgstr "Inline:a alla kända strängoperationer" #: config/i386/i386.opt:220 msgid "Inline memset/memcpy string operations, but perform inline version only for small blocks" -msgstr "Inline:a memset/memcpy-strängoperationer, men använd inline-versionen endast för små block" +msgstr "Inline:a memset/memcpy-strängoperationer, men använd inline-versionen endast för smÃ¥ block" #: config/i386/i386.opt:223 msgid "%<-mintel-syntax%> and %<-mno-intel-syntax%> are deprecated; use %<-masm=intel%> and %<-masm=att%> instead" -msgstr "%<-mintel-syntax%> och %<-mno-intel-syntex%> bör undvikas. Använd %<-masm=intel%> och %<-masm=att%> istället" +msgstr "%<-mintel-syntax%> och %<-mno-intel-syntex%> bör undvikas. Använd %<-masm=intel%> och %<-masm=att%> istället" #: config/i386/i386.opt:244 msgid "Omit the frame pointer in leaf functions" -msgstr "Utelämna rampekaren i lövfunktioner" +msgstr "Utelämna rampekaren i lövfunktioner" #: config/i386/i386.opt:248 msgid "Set 80387 floating-point precision to 32-bit" -msgstr "Ange flyttalsprecision för 80387 till 32-bits" +msgstr "Ange flyttalsprecision för 80387 till 32-bits" #: config/i386/i386.opt:252 msgid "Set 80387 floating-point precision to 64-bit" -msgstr "Ange flyttalsprecision för 80387 till 64-bits" +msgstr "Ange flyttalsprecision för 80387 till 64-bits" #: config/i386/i386.opt:256 msgid "Set 80387 floating-point precision to 80-bit" -msgstr "Ange flyttalsprecision för 80387 till 80-bits" +msgstr "Ange flyttalsprecision för 80387 till 80-bits" #: config/i386/i386.opt:260 msgid "Attempt to keep stack aligned to this power of 2" -msgstr "Försök håll stacken justerad till denna 2-potens" +msgstr "Försök hÃ¥ll stacken justerad till denna 2-potens" #: config/i386/i386.opt:264 msgid "Assume incoming stack aligned to this power of 2" -msgstr "Anta att inkommande stack är justerad till denna 2-potens" +msgstr "Anta att inkommande stack är justerad till denna 2-potens" #: config/i386/i386.opt:268 msgid "Use push instructions to save outgoing arguments" -msgstr "Använd push-instruktioner för att spara utgående argument" +msgstr "Använd push-instruktioner för att spara utgÃ¥ende argument" #: config/i386/i386.opt:272 msgid "Use red-zone in the x86-64 code" -msgstr "Använd röd zon i x86-64-koden" +msgstr "Använd röd zon i x86-64-koden" #: config/i386/i386.opt:276 msgid "Number of registers used to pass integer arguments" -msgstr "Antal register för att skicka heltalsargument" +msgstr "Antal register för att skicka heltalsargument" #: config/i386/i386.opt:280 msgid "Alternate calling convention" @@ -6412,7 +6412,7 @@ msgstr "Alternativ anropskonvention" #: config/i386/i386.opt:288 msgid "Use SSE register passing conventions for SF and DF mode" -msgstr "Använd konventioner för att skicka SSE-register i SF- och DF-läge" +msgstr "Använd konventioner för att skicka SSE-register i SF- och DF-läge" #: config/i386/i386.opt:292 msgid "Realign stack in prologue" @@ -6420,11 +6420,11 @@ msgstr "Justera om stacken i prologen" #: config/i386/i386.opt:296 msgid "Enable stack probing" -msgstr "Aktivera stackavkänning" +msgstr "Aktivera stackavkänning" #: config/i386/i386.opt:300 msgid "Chose strategy to generate stringop using" -msgstr "Välj strategi för att generera stringop med" +msgstr "Välj strategi för att generera stringop med" #: config/i386/i386.opt:304 msgid "Valid arguments to -mstringop-strategy=:" @@ -6432,32 +6432,32 @@ msgstr "Giltiga argument till -mstringop-strategy=:" #: config/i386/i386.opt:329 msgid "Use given thread-local storage dialect" -msgstr "Använd angiven trådlokal lagringsdialekt" +msgstr "Använd angiven trÃ¥dlokal lagringsdialekt" #: config/i386/i386.opt:333 msgid "Known TLS dialects (for use with the -mtls-dialect= option):" -msgstr "Kända TLS-dialekter (att användas med flaggan -mtls-dialect=):" +msgstr "Kända TLS-dialekter (att användas med flaggan -mtls-dialect=):" #: config/i386/i386.opt:343 #, c-format msgid "Use direct references against %gs when accessing tls data" -msgstr "Använd direkta referenser mot %gs vid åtkomst av tls-data" +msgstr "Använd direkta referenser mot %gs vid Ã¥tkomst av tls-data" #: config/i386/i386.opt:351 msgid "Generate code that conforms to the given ABI" -msgstr "Generera kod som följer det angivna ABI:et" +msgstr "Generera kod som följer det angivna ABI:et" #: config/i386/i386.opt:355 msgid "Known ABIs (for use with the -mabi= option):" -msgstr "Kända ABI:er (att användas med flaggan -mabi=):" +msgstr "Kända ABI:er (att användas med flaggan -mabi=):" #: config/i386/i386.opt:365 config/rs6000/rs6000.opt:196 msgid "Vector library ABI to use" -msgstr "Vektorbiblioteks-ABI att använda" +msgstr "Vektorbiblioteks-ABI att använda" #: config/i386/i386.opt:369 msgid "Known vectorization library ABIs (for use with the -mveclibabi= option):" -msgstr "Kända ABI:er till vektoriseringsbibliotek (att användas med flaggan -mveclibabi=):" +msgstr "Kända ABI:er till vektoriseringsbibliotek (att användas med flaggan -mveclibabi=):" #: config/i386/i386.opt:379 msgid "Return 8-byte vectors in memory" @@ -6465,31 +6465,31 @@ msgstr "Returnera 8-bytesvektorer i minnet" #: config/i386/i386.opt:383 msgid "Generate reciprocals instead of divss and sqrtss." -msgstr "Generera inverser istället för divss och sqrtss." +msgstr "Generera inverser istället för divss och sqrtss." #: config/i386/i386.opt:387 msgid "Control generation of reciprocal estimates." -msgstr "Styr generering av ömsesidiga uppskattningar." +msgstr "Styr generering av ömsesidiga uppskattningar." #: config/i386/i386.opt:391 msgid "Generate cld instruction in the function prologue." msgstr "Generera cld-instruktioner i funktionsprologen" -# Det avbrutna meddelandet är felrapporterat: +# Det avbrutna meddelandet är felrapporterat: # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47103 #: config/i386/i386.opt:395 msgid "Generate vzeroupper instruction before a transfer of control flow out of" -msgstr "Generera vzeroupper-instruktion före en övergång av kontrollflödet ut ur" +msgstr "Generera vzeroupper-instruktion före en övergÃ¥ng av kontrollflödet ut ur" -# Det avbrutna meddelandet är felrapporterat: +# Det avbrutna meddelandet är felrapporterat: # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47103 #: config/i386/i386.opt:400 msgid "Do dispatch scheduling if processor is bdver1 or bdver2 and Haifa scheduling" -msgstr "Gör sändningsschemaläggning om processorn är bdver1 eller bdver2 och Haifa-schemaläggning" +msgstr "Gör sändningsschemaläggning om processorn är bdver1 eller bdver2 och Haifa-schemaläggning" #: config/i386/i386.opt:405 msgid "Use 128-bit AVX instructions instead of 256-bit AVX instructions in the auto-vectorizer." -msgstr "Använd 128-bitars AVX-instruktioner istället för 256-bitars AVX-instruktioner i automatvektoriseraren." +msgstr "Använd 128-bitars AVX-instruktioner istället för 256-bitars AVX-instruktioner i automatvektoriseraren." #: config/i386/i386.opt:411 msgid "Generate 32bit i386 code" @@ -6505,43 +6505,43 @@ msgstr "Generera 32-bitars x86-64-kod" #: config/i386/i386.opt:423 msgid "Support MMX built-in functions" -msgstr "Stöd inbyggda MMX-funktioner" +msgstr "Stöd inbyggda MMX-funktioner" #: config/i386/i386.opt:427 msgid "Support 3DNow! built-in functions" -msgstr "Stöd inbyggda 3DNow!-funktioner" +msgstr "Stöd inbyggda 3DNow!-funktioner" #: config/i386/i386.opt:431 msgid "Support Athlon 3Dnow! built-in functions" -msgstr "Stöd inbyggda Athlon 3Dnow!-funktioner" +msgstr "Stöd inbyggda Athlon 3Dnow!-funktioner" #: config/i386/i386.opt:435 msgid "Support MMX and SSE built-in functions and code generation" -msgstr "Stöd inbyggda MMX- och SSE-funktioner och -kodgenerering" +msgstr "Stöd inbyggda MMX- och SSE-funktioner och -kodgenerering" #: config/i386/i386.opt:439 msgid "Support MMX, SSE and SSE2 built-in functions and code generation" -msgstr "Stöd inbyggda MMX-, SSE- och SSE2-funktioner och -kodgenerering" +msgstr "Stöd inbyggda MMX-, SSE- och SSE2-funktioner och -kodgenerering" #: config/i386/i386.opt:443 msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" -msgstr "Stöd inbyggda MMX-, SSE-, SSE2- och SSE3-funktioner och -kodgenerering" +msgstr "Stöd inbyggda MMX-, SSE-, SSE2- och SSE3-funktioner och -kodgenerering" #: config/i386/i386.opt:447 msgid "Support MMX, SSE, SSE2, SSE3 and SSSE3 built-in functions and code generation" -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3- och SSSE3-funktioner och -kodgenerering" +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3- och SSSE3-funktioner och -kodgenerering" #: config/i386/i386.opt:451 msgid "Support MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1 built-in functions and code generation" -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3- och SSE4.1-funktioner och -kodgenerering" +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3- och SSE4.1-funktioner och -kodgenerering" #: config/i386/i386.opt:455 config/i386/i386.opt:459 msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and SSE4.2 built-in functions and code generation" -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1- och SSE4.2-funktioner och -kodgenerering" +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1- och SSE4.2-funktioner och -kodgenerering" #: config/i386/i386.opt:463 msgid "Do not support SSE4.1 and SSE4.2 built-in functions and code generation" -msgstr "Stöd inte inbyggda SSE4.1- och SSE4.2-funktioner och -kodgenerering" +msgstr "Stöd inte inbyggda SSE4.1- och SSE4.2-funktioner och -kodgenerering" #: config/i386/i386.opt:466 msgid "%<-msse5%> was removed" @@ -6549,79 +6549,79 @@ msgstr "%<-msse5%> togs bort" #: config/i386/i386.opt:471 msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation" -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2- och AVX-funktioner och -kodgenerering" +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2- och AVX-funktioner och -kodgenerering" #: config/i386/i386.opt:475 msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and AVX2 built-in functions and code generation" -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX- och AVX2-funktioner och -kodgenerering" +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX- och AVX2-funktioner och -kodgenerering" #: config/i386/i386.opt:479 msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation" -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX- och FMA-funktioner och -kodgenerering" +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX- och FMA-funktioner och -kodgenerering" #: config/i386/i386.opt:483 msgid "Support MMX, SSE, SSE2, SSE3 and SSE4A built-in functions and code generation" -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3- och SSE4A-funktioner och -kodgenerering" +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3- och SSE4A-funktioner och -kodgenerering" #: config/i386/i386.opt:487 msgid "Support FMA4 built-in functions and code generation " -msgstr "Stöd inbyggda FMA4-funktioner och -kodgenerering " +msgstr "Stöd inbyggda FMA4-funktioner och -kodgenerering " #: config/i386/i386.opt:491 msgid "Support XOP built-in functions and code generation " -msgstr "Stöd inbyggda XOP-funktioner och -kodgenerering " +msgstr "Stöd inbyggda XOP-funktioner och -kodgenerering " #: config/i386/i386.opt:495 msgid "Support LWP built-in functions and code generation " -msgstr "Stöd inbyggda LWP-funktioner och -kodgenerering " +msgstr "Stöd inbyggda LWP-funktioner och -kodgenerering " #: config/i386/i386.opt:499 msgid "Support code generation of Advanced Bit Manipulation (ABM) instructions." -msgstr "Stöd kodgenerering av Advanced Bit Manipulation (ABM)-instruktioner." +msgstr "Stöd kodgenerering av Advanced Bit Manipulation (ABM)-instruktioner." #: config/i386/i386.opt:503 msgid "Support code generation of popcnt instruction." -msgstr "Stöd kodgenerering av popcnt-instruktioner." +msgstr "Stöd kodgenerering av popcnt-instruktioner." #: config/i386/i386.opt:507 msgid "Support BMI built-in functions and code generation" -msgstr "Stöd inbyggda BMI-funktioner och -kodgenerering " +msgstr "Stöd inbyggda BMI-funktioner och -kodgenerering " #: config/i386/i386.opt:511 msgid "Support BMI2 built-in functions and code generation" -msgstr "Stöd inbyggda BMI2-funktioner och -kodgenerering " +msgstr "Stöd inbyggda BMI2-funktioner och -kodgenerering " #: config/i386/i386.opt:515 msgid "Support LZCNT built-in function and code generation" -msgstr "Stöd inbyggda LZCNT-funktioner och -kodgenerering " +msgstr "Stöd inbyggda LZCNT-funktioner och -kodgenerering " #: config/i386/i386.opt:519 msgid "Support TBM built-in functions and code generation" -msgstr "Stöd inbyggda TBM-funktioner och -kodgenerering " +msgstr "Stöd inbyggda TBM-funktioner och -kodgenerering " #: config/i386/i386.opt:523 msgid "Support code generation of cmpxchg16b instruction." -msgstr "Stöd kodgenerering av cmpxchg16b-instruktioner." +msgstr "Stöd kodgenerering av cmpxchg16b-instruktioner." #: config/i386/i386.opt:527 msgid "Support code generation of sahf instruction in 64bit x86-64 code." -msgstr "Stöd kodgenerering av sahf-instruktioner i 64-bitars x86-64-kod." +msgstr "Stöd kodgenerering av sahf-instruktioner i 64-bitars x86-64-kod." #: config/i386/i386.opt:531 msgid "Support code generation of movbe instruction." -msgstr "Stöd kodgenerering av movbe-instruktioner." +msgstr "Stöd kodgenerering av movbe-instruktioner." #: config/i386/i386.opt:535 msgid "Support code generation of crc32 instruction." -msgstr "Stöd kodgenerering av crc32-instruktioner." +msgstr "Stöd kodgenerering av crc32-instruktioner." #: config/i386/i386.opt:539 msgid "Support AES built-in functions and code generation" -msgstr "Stöd inbyggda AES-funktioner och -kodgenerering" +msgstr "Stöd inbyggda AES-funktioner och -kodgenerering" #: config/i386/i386.opt:543 msgid "Support PCLMUL built-in functions and code generation" -msgstr "Stöd inbyggda PCLMUL-funktioner och -kodgenerering" +msgstr "Stöd inbyggda PCLMUL-funktioner och -kodgenerering" #: config/i386/i386.opt:547 msgid "Encode SSE instructions with VEX prefix" @@ -6629,23 +6629,23 @@ msgstr "Koda SSE-instruktioner med VEX-prefix" #: config/i386/i386.opt:551 msgid "Support FSGSBASE built-in functions and code generation" -msgstr "Stöd inbyggda FSGSBASE-funktioner och -kodgenerering" +msgstr "Stöd inbyggda FSGSBASE-funktioner och -kodgenerering" #: config/i386/i386.opt:555 msgid "Support RDRND built-in functions and code generation" -msgstr "Stöd inbyggda RDRND-funktioner och -kodgenerering" +msgstr "Stöd inbyggda RDRND-funktioner och -kodgenerering" #: config/i386/i386.opt:559 msgid "Support F16C built-in functions and code generation" -msgstr "Stöd inbyggda F16C-funktioner och -kodgenerering " +msgstr "Stöd inbyggda F16C-funktioner och -kodgenerering " #: config/i386/i386.opt:563 msgid "Emit profiling counter call at function entry before prologue." -msgstr "Generera profileringsräknaranrop vid funktionsstart före prologen" +msgstr "Generera profileringsräknaranrop vid funktionsstart före prologen" #: config/i386/i386.opt:567 msgid "Expand 32bit/64bit integer divide into 8bit unsigned integer divide with run-time check" -msgstr "Expandera 32bits/64bits heltalsdivision till 8bitars teckenlös heltalsdivision med kontroll vid körning." +msgstr "Expandera 32bits/64bits heltalsdivision till 8bitars teckenlös heltalsdivision med kontroll vid körning." #: config/i386/i386.opt:571 msgid "Split 32-byte AVX unaligned load" @@ -6661,19 +6661,19 @@ msgstr "Skapa konsollapplikation" #: config/i386/cygming.opt:27 msgid "Generate code for a DLL" -msgstr "Generera kod för en DLL" +msgstr "Generera kod för en DLL" #: config/i386/cygming.opt:31 msgid "Ignore dllimport for functions" -msgstr "Ignorera dllimport för funktioner" +msgstr "Ignorera dllimport för funktioner" #: config/i386/cygming.opt:35 msgid "Use Mingw-specific thread support" -msgstr "Använd Mingw-specifikt trådstöd" +msgstr "Använd Mingw-specifikt trÃ¥dstöd" #: config/i386/cygming.opt:39 msgid "Set Windows defines" -msgstr "Sätt Windows-definitioner" +msgstr "Sätt Windows-definitioner" #: config/i386/cygming.opt:43 msgid "Create GUI application" @@ -6681,15 +6681,15 @@ msgstr "Skapa GUI-applikation" #: config/i386/cygming.opt:51 msgid "Compile code that relies on Cygwin DLL wrappers to support C++ operator new/delete replacement" -msgstr "Kompilera kod som litar på Cygwin:s DLL-inkapsling för att stödja ersättning av C++-operatorerna new/delete" +msgstr "Kompilera kod som litar pÃ¥ Cygwin:s DLL-inkapsling för att stödja ersättning av C++-operatorerna new/delete" #: config/i386/mingw-w64.opt:23 msgid "Use unicode startup and define UNICODE macro" -msgstr "Använd unicode-uppstart och definiera ett UNICODE-makro" +msgstr "Använd unicode-uppstart och definiera ett UNICODE-makro" #: config/rs6000/476.opt:24 msgid "Preserve the PowerPC 476's link stack by matching up a blr with the bcl/bl insns used for GOT accesses" -msgstr "Bevara PowerPC 476:ans länkstack genom att matcha en blr med bcl/bl-instruktionerna som används för GOT-åtkomster" +msgstr "Bevara PowerPC 476:ans länkstack genom att matcha en blr med bcl/bl-instruktionerna som används för GOT-Ã¥tkomster" #: config/rs6000/darwin.opt:38 config/rs6000/sysv4.opt:142 msgid "Generate 64-bit code" @@ -6701,71 +6701,71 @@ msgstr "Generera 32-bitars kod" #: config/rs6000/rs6000.opt:96 msgid "Use POWER instruction set" -msgstr "Använd instruktionsuppsättning för POWER" +msgstr "Använd instruktionsuppsättning för POWER" #: config/rs6000/rs6000.opt:100 msgid "Do not use POWER instruction set" -msgstr "Använd inte instruktionsuppsättning för POWER" +msgstr "Använd inte instruktionsuppsättning för POWER" #: config/rs6000/rs6000.opt:104 msgid "Use POWER2 instruction set" -msgstr "Använd instruktionsuppsättning för POWER2" +msgstr "Använd instruktionsuppsättning för POWER2" #: config/rs6000/rs6000.opt:108 msgid "Use PowerPC instruction set" -msgstr "Använd instruktionsuppsättning för PowerPC" +msgstr "Använd instruktionsuppsättning för PowerPC" #: config/rs6000/rs6000.opt:112 msgid "Do not use PowerPC instruction set" -msgstr "Använd inte instruktionsuppsättning för PowerPC" +msgstr "Använd inte instruktionsuppsättning för PowerPC" #: config/rs6000/rs6000.opt:116 msgid "Use PowerPC-64 instruction set" -msgstr "Använd instruktionsuppsättning för PowerPC-64" +msgstr "Använd instruktionsuppsättning för PowerPC-64" #: config/rs6000/rs6000.opt:120 msgid "Use PowerPC General Purpose group optional instructions" -msgstr "Använd valbara instruktioner i gruppen PowerPC General Purpose" +msgstr "Använd valbara instruktioner i gruppen PowerPC General Purpose" #: config/rs6000/rs6000.opt:124 msgid "Use PowerPC Graphics group optional instructions" -msgstr "Använd valbara instruktioner i gruppen PowerPC Graphics" +msgstr "Använd valbara instruktioner i gruppen PowerPC Graphics" #: config/rs6000/rs6000.opt:128 msgid "Use PowerPC V2.01 single field mfcr instruction" -msgstr "Använd PowerPC V2.01:s enkelfälts mfcr-instruktion" +msgstr "Använd PowerPC V2.01:s enkelfälts mfcr-instruktion" #: config/rs6000/rs6000.opt:132 msgid "Use PowerPC V2.02 popcntb instruction" -msgstr "Använd PowerPC V2.02:s popcntb-instruktion" +msgstr "Använd PowerPC V2.02:s popcntb-instruktion" #: config/rs6000/rs6000.opt:136 msgid "Use PowerPC V2.02 floating point rounding instructions" -msgstr "Använd PowerPC V2.02:s flyttalsavrundningsinstruktioner" +msgstr "Använd PowerPC V2.02:s flyttalsavrundningsinstruktioner" #: config/rs6000/rs6000.opt:140 msgid "Use PowerPC V2.05 compare bytes instruction" -msgstr "Använd PowerPC V2.05:s bytejämförelseinstruktion" +msgstr "Använd PowerPC V2.05:s bytejämförelseinstruktion" #: config/rs6000/rs6000.opt:144 msgid "Use extended PowerPC V2.05 move floating point to/from GPR instructions" -msgstr "Använd utökad PowerPC V2.05:s instruktion för att flytta flyttal till/från GPR" +msgstr "Använd utökad PowerPC V2.05:s instruktion för att flytta flyttal till/frÃ¥n GPR" #: config/rs6000/rs6000.opt:148 msgid "Use AltiVec instructions" -msgstr "Använd AltiVec-instruktioner" +msgstr "Använd AltiVec-instruktioner" #: config/rs6000/rs6000.opt:152 msgid "Use decimal floating point instructions" -msgstr "Använd decimala flyttalsinstruktioner" +msgstr "Använd decimala flyttalsinstruktioner" #: config/rs6000/rs6000.opt:156 msgid "Use 4xx half-word multiply instructions" -msgstr "Använd 4xx:s halvords multiplikationsinstruktioner" +msgstr "Använd 4xx:s halvords multiplikationsinstruktioner" #: config/rs6000/rs6000.opt:160 msgid "Use 4xx string-search dlmzb instruction" -msgstr "Använd 4xx:s strängsöknings dlmzb-instruktion" +msgstr "Använd 4xx:s strängsöknings dlmzb-instruktion" #: config/rs6000/rs6000.opt:164 msgid "Generate load/store multiple instructions" @@ -6773,31 +6773,31 @@ msgstr "Generera load/store multiple-instruktioner" #: config/rs6000/rs6000.opt:168 msgid "Generate string instructions for block moves" -msgstr "Generera stränginstruktioner för blockförflyttningar" +msgstr "Generera stränginstruktioner för blockförflyttningar" #: config/rs6000/rs6000.opt:172 msgid "Use new mnemonics for PowerPC architecture" -msgstr "Använd nya mnemonics för PowerPC-arkitektur" +msgstr "Använd nya mnemonics för PowerPC-arkitektur" #: config/rs6000/rs6000.opt:176 msgid "Use old mnemonics for PowerPC architecture" -msgstr "Använd gamla mnemonics för PowerPC-arkitektur" +msgstr "Använd gamla mnemonics för PowerPC-arkitektur" #: config/rs6000/rs6000.opt:180 config/pdp11/pdp11.opt:79 msgid "Do not use hardware floating point" -msgstr "Använd inte hårdvaruflyttal" +msgstr "Använd inte hÃ¥rdvaruflyttal" #: config/rs6000/rs6000.opt:188 msgid "Use PowerPC V2.06 popcntd instruction" -msgstr "Använd PowerPC V2.06:s popcntd-instruktion" +msgstr "Använd PowerPC V2.06:s popcntd-instruktion" #: config/rs6000/rs6000.opt:192 msgid "Under -ffast-math, generate a FRIZ instruction for (double)(long long) conversions" -msgstr "Under -ffast-math, generera en FRIZ-instruktion för (double)(long long)-konverteringar." +msgstr "Under -ffast-math, generera en FRIZ-instruktion för (double)(long long)-konverteringar." #: config/rs6000/rs6000.opt:200 msgid "Use vector/scalar (VSX) instructions" -msgstr "Använd vektor-/skalärinstruktioner (VSX)" +msgstr "Använd vektor-/skalärinstruktioner (VSX)" #: config/rs6000/rs6000.opt:240 msgid "Do not generate load/store with update instructions" @@ -6813,35 +6813,35 @@ msgstr "Ladda inte PIC-registret i funktionsprologer" #: config/rs6000/rs6000.opt:252 msgid "Avoid generation of indexed load/store instructions when possible" -msgstr "Undvik att generera indexerade load/store-instruktioner så långt möjligt" +msgstr "Undvik att generera indexerade load/store-instruktioner sÃ¥ lÃ¥ngt möjligt" #: config/rs6000/rs6000.opt:256 msgid "Mark __tls_get_addr calls with argument info" -msgstr "Märk __tls_get_addr-anrop med argumentinformation" +msgstr "Märk __tls_get_addr-anrop med argumentinformation" #: config/rs6000/rs6000.opt:263 msgid "Schedule the start and end of the procedure" -msgstr "Schemalägg början och slutet av proceduren" +msgstr "Schemalägg början och slutet av proceduren" #: config/rs6000/rs6000.opt:267 msgid "Return all structures in memory (AIX default)" -msgstr "Returnera alla strukturer i minnet (standard för AIX)" +msgstr "Returnera alla strukturer i minnet (standard för AIX)" #: config/rs6000/rs6000.opt:271 msgid "Return small structures in registers (SVR4 default)" -msgstr "Returnera små strukturer i register (standard för SVR4)" +msgstr "Returnera smÃ¥ strukturer i register (standard för SVR4)" #: config/rs6000/rs6000.opt:275 msgid "Conform more closely to IBM XLC semantics" -msgstr "Följ mer noga IBM XLC:s semantik" +msgstr "Följ mer noga IBM XLC:s semantik" #: config/rs6000/rs6000.opt:279 config/rs6000/rs6000.opt:283 msgid "Generate software reciprocal divide and square root for better throughput." -msgstr "Generera inversdivision och kvadratrot i programvara för bättre genomströmning." +msgstr "Generera inversdivision och kvadratrot i programvara för bättre genomströmning." #: config/rs6000/rs6000.opt:287 msgid "Assume that the reciprocal estimate instructions provide more accuracy." -msgstr "Antag att de ömsesidiga uppskattningsinstruktionerna ger mer precision." +msgstr "Antag att de ömsesidiga uppskattningsinstruktionerna ger mer precision." #: config/rs6000/rs6000.opt:291 msgid "Do not place floating point constants in TOC" @@ -6853,15 +6853,15 @@ msgstr "Placera flyttalskonstanter i TOC" #: config/rs6000/rs6000.opt:299 msgid "Do not place symbol+offset constants in TOC" -msgstr "Placera inte symbol+avstånd-konstanter i TOC" +msgstr "Placera inte symbol+avstÃ¥nd-konstanter i TOC" #: config/rs6000/rs6000.opt:303 msgid "Place symbol+offset constants in TOC" -msgstr "Placera symbol+avstånd-konstanter i TOC" +msgstr "Placera symbol+avstÃ¥nd-konstanter i TOC" #: config/rs6000/rs6000.opt:314 msgid "Use only one TOC entry per procedure" -msgstr "Använd endast en TOC-post per procedur" +msgstr "Använd endast en TOC-post per procedur" #: config/rs6000/rs6000.opt:318 msgid "Put everything in the regular TOC" @@ -6869,19 +6869,19 @@ msgstr "Placera allting i den vanliga TOC" #: config/rs6000/rs6000.opt:322 msgid "Generate VRSAVE instructions when generating AltiVec code" -msgstr "Generera VRSAVE-instruktioner när AltiVec-kod genereras" +msgstr "Generera VRSAVE-instruktioner när AltiVec-kod genereras" #: config/rs6000/rs6000.opt:326 msgid "Deprecated option. Use -mno-vrsave instead" -msgstr "Undanbedd flagga. Använd -mno-vrsave istället" +msgstr "Undanbedd flagga. Använd -mno-vrsave istället" #: config/rs6000/rs6000.opt:330 msgid "Deprecated option. Use -mvrsave instead" -msgstr "Undanbedd flagga. Använd -mvrsave istället" +msgstr "Undanbedd flagga. Använd -mvrsave istället" #: config/rs6000/rs6000.opt:334 msgid "Specify how many bytes should be moved inline before calling out to memcpy/memmove" -msgstr "Ange hur många byte som bör flyttas inline före anrop av memcpy/memmove" +msgstr "Ange hur mÃ¥nga byte som bör flyttas inline före anrop av memcpy/memmove" #: config/rs6000/rs6000.opt:338 msgid "Generate isel instructions" @@ -6889,15 +6889,15 @@ msgstr "Generera isel-instruktioner" #: config/rs6000/rs6000.opt:342 msgid "Deprecated option. Use -mno-isel instead" -msgstr "Undanbedd flagga. Använd -mno-isel istället" +msgstr "Undanbedd flagga. Använd -mno-isel istället" #: config/rs6000/rs6000.opt:346 msgid "Deprecated option. Use -misel instead" -msgstr "Undanbedd flagga. Använd -misel istället" +msgstr "Undanbedd flagga. Använd -misel istället" #: config/rs6000/rs6000.opt:350 msgid "Generate SPE SIMD instructions on E500" -msgstr "Generera SPE SIMD-instruktioner för E500" +msgstr "Generera SPE SIMD-instruktioner för E500" #: config/rs6000/rs6000.opt:354 msgid "Generate PPC750CL paired-single instructions" @@ -6905,63 +6905,63 @@ msgstr "Generera PPC750CL:s par-singel-instruktioner" #: config/rs6000/rs6000.opt:358 msgid "Deprecated option. Use -mno-spe instead" -msgstr "Undanbedd flagga. Använd -mno-spe istället" +msgstr "Undanbedd flagga. Använd -mno-spe istället" #: config/rs6000/rs6000.opt:362 msgid "Deprecated option. Use -mspe instead" -msgstr "Undanbedd flagga. Använd -mspe istället" +msgstr "Undanbedd flagga. Använd -mspe istället" #: config/rs6000/rs6000.opt:366 msgid "-mdebug=\tEnable debug output" -msgstr "-mdebug=\tAktivera felsökningsutdata" +msgstr "-mdebug=\tAktivera felsökningsutdata" #: config/rs6000/rs6000.opt:370 msgid "Use the AltiVec ABI extensions" -msgstr "Använd ABI-utökningarna AltiVec" +msgstr "Använd ABI-utökningarna AltiVec" #: config/rs6000/rs6000.opt:374 msgid "Do not use the AltiVec ABI extensions" -msgstr "Använd inte ABI-utökningarna AltiVec" +msgstr "Använd inte ABI-utökningarna AltiVec" #: config/rs6000/rs6000.opt:378 msgid "Use the SPE ABI extensions" -msgstr "Använd ABI-utökningarna SPE" +msgstr "Använd ABI-utökningarna SPE" #: config/rs6000/rs6000.opt:382 msgid "Do not use the SPE ABI extensions" -msgstr "Använd inte ABI-utökningarna SPE" +msgstr "Använd inte ABI-utökningarna SPE" #: config/rs6000/rs6000.opt:389 msgid "using darwin64 ABI" -msgstr "använder ABI darwin64" +msgstr "använder ABI darwin64" #: config/rs6000/rs6000.opt:392 msgid "using old darwin ABI" -msgstr "använder gammalt darwin-ABI" +msgstr "använder gammalt darwin-ABI" #: config/rs6000/rs6000.opt:395 msgid "using IEEE extended precision long double" -msgstr "använder long double med IEEE:s utökade precision" +msgstr "använder long double med IEEE:s utökade precision" #: config/rs6000/rs6000.opt:398 msgid "using IBM extended precision long double" -msgstr "använder long double med IBM:s utökade precision" +msgstr "använder long double med IBM:s utökade precision" #: config/rs6000/rs6000.opt:402 msgid "-mcpu=\tUse features of and schedule code for given CPU" -msgstr "-mcpu=\tAnvänd funktioner i och schemalägg kod för angiven CPU" +msgstr "-mcpu=\tAnvänd funktioner i och schemalägg kod för angiven CPU" #: config/rs6000/rs6000.opt:406 msgid "-mtune=\tSchedule code for given CPU" -msgstr "-mtune=\tSchemalägg kod för en given CPU" +msgstr "-mtune=\tSchemalägg kod för en given CPU" #: config/rs6000/rs6000.opt:410 msgid "-mtraceback=\tSelect full, part, or no traceback table" -msgstr "-mtraceback=\tVälj fullständig, partiell, eller ingen bakåtspårningstabell" +msgstr "-mtraceback=\tVälj fullständig, partiell, eller ingen bakÃ¥tspÃ¥rningstabell" #: config/rs6000/rs6000.opt:426 msgid "Avoid all range limits on call instructions" -msgstr "Undvik alla avståndsgränser vid anropsinstruktioner" +msgstr "Undvik alla avstÃ¥ndsgränser vid anropsinstruktioner" #: config/rs6000/rs6000.opt:430 msgid "Generate Cell microcode" @@ -6969,15 +6969,15 @@ msgstr "Generera Cell-mikrokod" #: config/rs6000/rs6000.opt:434 msgid "Warn when a Cell microcoded instruction is emitted" -msgstr "Varna när en Cell-mikrokodsinstruktion avges" +msgstr "Varna när en Cell-mikrokodsinstruktion avges" #: config/rs6000/rs6000.opt:438 msgid "Warn about deprecated 'vector long ...' AltiVec type usage" -msgstr "Varna för användning av AltiVec-typen \"vector long ...\" som bör undvikas" +msgstr "Varna för användning av AltiVec-typen â€vector long ...†som bör undvikas" #: config/rs6000/rs6000.opt:442 msgid "-mfloat-gprs=\tSelect GPR floating point method" -msgstr "-mfloat-gprs=\tVälj GPR-flyttalsmetod" +msgstr "-mfloat-gprs=\tVälj GPR-flyttalsmetod" #: config/rs6000/rs6000.opt:446 msgid "Valid arguments to -mfloat-gprs=:" @@ -6985,7 +6985,7 @@ msgstr "Giltiga argument till -mfloat-gprs=:" #: config/rs6000/rs6000.opt:462 msgid "-mlong-double-<n>\tSpecify size of long double (64 or 128 bits)" -msgstr "-mlong-double-<n>\tAnge storlek på long double (64 eller 128 bitar)" +msgstr "-mlong-double-<n>\tAnge storlek pÃ¥ long double (64 eller 128 bitar)" #: config/rs6000/rs6000.opt:466 msgid "Determine which dependences between insns are considered costly" @@ -6993,11 +6993,11 @@ msgstr "Ange vilka beroenden mellan instruktioner som skall anses dyra" #: config/rs6000/rs6000.opt:470 msgid "Specify which post scheduling nop insertion scheme to apply" -msgstr "Ange metod att tillämpa för inskjutande av nop efter schemaläggning" +msgstr "Ange metod att tillämpa för inskjutande av nop efter schemaläggning" #: config/rs6000/rs6000.opt:474 msgid "Specify alignment of structure fields default/natural" -msgstr "Ange justering av postfält till default/natural" +msgstr "Ange justering av postfält till default/natural" #: config/rs6000/rs6000.opt:478 msgid "Valid arguments to -malign-:" @@ -7005,7 +7005,7 @@ msgstr "Giltiga argument till -malign-:" #: config/rs6000/rs6000.opt:488 msgid "Specify scheduling priority for dispatch slot restricted insns" -msgstr "Ange schemaläggningsprioritet för begränsade instruktioner för avsändningsfack" +msgstr "Ange schemaläggningsprioritet för begränsade instruktioner för avsändningsfack" #: config/rs6000/rs6000.opt:492 msgid "Single-precision floating point unit" @@ -7017,7 +7017,7 @@ msgstr "Dubbelprecisions flyttalsenhet" #: config/rs6000/rs6000.opt:500 msgid "Floating point unit does not support divide & sqrt" -msgstr "Flyttalsenheten stödjer inte division & kvadratrot" +msgstr "Flyttalsenheten stödjer inte division & kvadratrot" #: config/rs6000/rs6000.opt:504 msgid "-mfpu=\tSpecify FP (sp, dp, sp-lite, dp-lite) (implies -mxilinx-fpu)" @@ -7029,51 +7029,51 @@ msgstr "Ange Xilinx-FPU." #: config/rs6000/rs6000.opt:530 msgid "Use/do not use r11 to hold the static link in calls to functions via pointers." -msgstr "Använd/använd inte r11 för att hålla den statiska länken i anrop till funktioner via pekare." +msgstr "Använd/använd inte r11 för att hÃ¥lla den statiska länken i anrop till funktioner via pekare." #: config/rs6000/rs6000.opt:534 msgid "Control whether we save the TOC in the prologue for indirect calls or generate the save inline" -msgstr "Bestäm huruvida vi sparar TOC:en i prologen för indirekta anrop eller genererar sparandet inline" +msgstr "Bestäm huruvida vi sparar TOC:en i prologen för indirekta anrop eller genererar sparandet inline" #: config/rs6000/aix64.opt:24 msgid "Compile for 64-bit pointers" -msgstr "Kompilera för 64-bitspekare" +msgstr "Kompilera för 64-bitspekare" #: config/rs6000/aix64.opt:28 msgid "Compile for 32-bit pointers" -msgstr "Kompilera för 32-bitspekare" +msgstr "Kompilera för 32-bitspekare" #: config/rs6000/aix64.opt:32 msgid "Support message passing with the Parallel Environment" -msgstr "Stöd meddelandeskickning med Parallel Environment" +msgstr "Stöd meddelandeskickning med Parallel Environment" #: config/rs6000/linux64.opt:24 msgid "Call mcount for profiling before a function prologue" -msgstr "Anropa mcount för profilering före en funktionsprolog" +msgstr "Anropa mcount för profilering före en funktionsprolog" #: config/rs6000/linux64.opt:28 msgid "Select code model" -msgstr "Välj kodmodell" +msgstr "Välj kodmodell" #: config/rs6000/sysv4.opt:25 msgid "Select ABI calling convention" -msgstr "Välj ABI-konvention för anrop" +msgstr "Välj ABI-konvention för anrop" #: config/rs6000/sysv4.opt:29 config/c6x/c6x.opt:42 msgid "Select method for sdata handling" -msgstr "Välj metod för hantering av sdata" +msgstr "Välj metod för hantering av sdata" #: config/rs6000/sysv4.opt:49 config/rs6000/sysv4.opt:53 msgid "Align to the base type of the bit-field" -msgstr "Justera till bastypen av bitfältet" +msgstr "Justera till bastypen av bitfältet" #: config/rs6000/sysv4.opt:58 config/rs6000/sysv4.opt:62 msgid "Produce code relocatable at runtime" -msgstr "Producera kod som kan omlokaliseras vid körtillfället" +msgstr "Producera kod som kan omlokaliseras vid körtillfället" #: config/rs6000/sysv4.opt:66 config/rs6000/sysv4.opt:70 msgid "Produce little endian code" -msgstr "Producera kod med omvänd byteordning" +msgstr "Producera kod med omvänd byteordning" #: config/rs6000/sysv4.opt:74 config/rs6000/sysv4.opt:78 msgid "Produce big endian code" @@ -7083,7 +7083,7 @@ msgstr "Producera kod med rak byteordning" #: config/rs6000/sysv4.opt:96 config/rs6000/sysv4.opt:138 #: config/rs6000/sysv4.opt:150 msgid "no description yet" -msgstr "ingen beskrivning ännu" +msgstr "ingen beskrivning ännu" #: config/rs6000/sysv4.opt:91 msgid "Assume all variable arg functions are prototyped" @@ -7091,135 +7091,135 @@ msgstr "Anta att alla funktioner med variabelt antal argument har prototyp" #: config/rs6000/sysv4.opt:100 msgid "Use EABI" -msgstr "Använd EABI" +msgstr "Använd EABI" #: config/rs6000/sysv4.opt:104 msgid "Allow bit-fields to cross word boundaries" -msgstr "Tillåt att bitfält går över ordgränser" +msgstr "TillÃ¥t att bitfält gÃ¥r över ordgränser" #: config/rs6000/sysv4.opt:108 msgid "Use alternate register names" -msgstr "Använd alternativa registernamn" +msgstr "Använd alternativa registernamn" #: config/rs6000/sysv4.opt:114 msgid "Use default method for sdata handling" -msgstr "Använd standardmetod för hantering av sdata" +msgstr "Använd standardmetod för hantering av sdata" #: config/rs6000/sysv4.opt:118 msgid "Link with libsim.a, libc.a and sim-crt0.o" -msgstr "Länka med libsim.a, libc.a och sim-crt0.o" +msgstr "Länka med libsim.a, libc.a och sim-crt0.o" #: config/rs6000/sysv4.opt:122 msgid "Link with libads.a, libc.a and crt0.o" -msgstr "Länka med libads.a, libc.a och crt0.o" +msgstr "Länka med libads.a, libc.a och crt0.o" #: config/rs6000/sysv4.opt:126 msgid "Link with libyk.a, libc.a and crt0.o" -msgstr "Länka med libyk.a, libc.a och crt0.o" +msgstr "Länka med libyk.a, libc.a och crt0.o" #: config/rs6000/sysv4.opt:130 msgid "Link with libmvme.a, libc.a and crt0.o" -msgstr "Länka med libmvme.a, libc.a och crt0.o" +msgstr "Länka med libmvme.a, libc.a och crt0.o" #: config/rs6000/sysv4.opt:134 msgid "Set the PPC_EMB bit in the ELF flags header" -msgstr "Sätt biten PPC_EMB i ELF:s flaggfält" +msgstr "Sätt biten PPC_EMB i ELF:s flaggfält" #: config/rs6000/sysv4.opt:154 msgid "Generate code to use a non-exec PLT and GOT" -msgstr "Generera kod för att använda ej-exec PLT och GOT" +msgstr "Generera kod för att använda ej-exec PLT och GOT" #: config/rs6000/sysv4.opt:158 msgid "Generate code for old exec BSS PLT" -msgstr "Generera kod för gammal exec BSS PLT" +msgstr "Generera kod för gammal exec BSS PLT" #: config/rs6000/rs6000-tables.opt:24 msgid "Known CPUs (for use with the -mcpu= and -mtune= options):" -msgstr "Kända CPU:er (att användas med flaggorna -mcpu= och -mtune=):" +msgstr "Kända CPU:er (att användas med flaggorna -mcpu= och -mtune=):" #: config/spu/spu.opt:20 msgid "Emit warnings when run-time relocations are generated" -msgstr "Generera varningar när körtidsomlokaliseringar genereras" +msgstr "Generera varningar när körtidsomlokaliseringar genereras" #: config/spu/spu.opt:24 msgid "Emit errors when run-time relocations are generated" -msgstr "Generera felmeddelanden när körtidsomlokaliseringar genereras" +msgstr "Generera felmeddelanden när körtidsomlokaliseringar genereras" #: config/spu/spu.opt:28 msgid "Specify cost of branches (Default 20)" -msgstr "Ange kostnaden för grenar (normalt 20)" +msgstr "Ange kostnaden för grenar (normalt 20)" #: config/spu/spu.opt:32 msgid "Make sure loads and stores are not moved past DMA instructions" -msgstr "Säkerställ att inläsningar och lagringar inte flyttas förbi DMA-instruktioner" +msgstr "Säkerställ att inläsningar och lagringar inte flyttas förbi DMA-instruktioner" #: config/spu/spu.opt:36 msgid "volatile must be specified on any memory that is effected by DMA" -msgstr "volatile måste anges för allt minne som påverkas av DMA" +msgstr "volatile mÃ¥ste anges för allt minne som pÃ¥verkas av DMA" #: config/spu/spu.opt:40 config/spu/spu.opt:44 msgid "Insert nops when it might improve performance by allowing dual issue (default)" -msgstr "Skut in nop:ar när det kan förbättra prestanda genom att tillåta dubbel utgivning (standard)" +msgstr "Skut in nop:ar när det kan förbättra prestanda genom att tillÃ¥ta dubbel utgivning (standard)" #: config/spu/spu.opt:48 msgid "Use standard main function as entry for startup" -msgstr "Använd standard main-funktion som ingång vid uppstart" +msgstr "Använd standard main-funktion som ingÃ¥ng vid uppstart" #: config/spu/spu.opt:52 msgid "Generate branch hints for branches" -msgstr "Generera grentips för grenar" +msgstr "Generera grentips för grenar" #: config/spu/spu.opt:56 msgid "Maximum number of nops to insert for a hint (Default 2)" -msgstr "Det maximala antalet nop-instruktioner att skjuta in för ett tips (standard 2)" +msgstr "Det maximala antalet nop-instruktioner att skjuta in för ett tips (standard 2)" #: config/spu/spu.opt:60 msgid "Approximate maximum number of instructions to allow between a hint and its branch [125]" -msgstr "Ungefärligt antal instruktioner att tillåta mellan ett tips och dess gren [125]" +msgstr "Ungefärligt antal instruktioner att tillÃ¥ta mellan ett tips och dess gren [125]" #: config/spu/spu.opt:64 msgid "Generate code for 18 bit addressing" -msgstr "Generera kod för 18-bitars adressering" +msgstr "Generera kod för 18-bitars adressering" #: config/spu/spu.opt:68 msgid "Generate code for 32 bit addressing" -msgstr "Generera kod för 32-bitars adressering" +msgstr "Generera kod för 32-bitars adressering" #: config/spu/spu.opt:76 msgid "Insert hbrp instructions after hinted branch targets to avoid the SPU hang issue" -msgstr "Lägg in hbrp-instruktioner efter grenmål med tips för att undvika problemet med hängd SPU" +msgstr "Lägg in hbrp-instruktioner efter grenmÃ¥l med tips för att undvika problemet med hängd SPU" #: config/spu/spu.opt:88 msgid "Access variables in 32-bit PPU objects (default)" -msgstr "Kom åt variabler i 32-bitars PPU-objekt (standard)" +msgstr "Kom Ã¥t variabler i 32-bitars PPU-objekt (standard)" #: config/spu/spu.opt:92 msgid "Access variables in 64-bit PPU objects" -msgstr "Kom åt variabler i 64-bitars PPU-objekt" +msgstr "Kom Ã¥t variabler i 64-bitars PPU-objekt" #: config/spu/spu.opt:96 msgid "Allow conversions between __ea and generic pointers (default)" -msgstr "Tillåt konvertering mellan __ea och generiska pekare (standard)" +msgstr "TillÃ¥t konvertering mellan __ea och generiska pekare (standard)" #: config/spu/spu.opt:100 msgid "Size (in KB) of software data cache" -msgstr "Storlek (i kB) på programmets data-cache" +msgstr "Storlek (i kB) pÃ¥ programmets data-cache" #: config/spu/spu.opt:104 msgid "Atomically write back software data cache lines (default)" -msgstr "Skriv atomärt tillbaka programmets data-cache-rader (standard)" +msgstr "Skriv atomärt tillbaka programmets data-cache-rader (standard)" #: config/mcore/mcore.opt:23 msgid "Generate code for the M*Core M210" -msgstr "Generera kod för M*Core M210" +msgstr "Generera kod för M*Core M210" #: config/mcore/mcore.opt:27 msgid "Generate code for the M*Core M340" -msgstr "Generera kod för M*Core M340" +msgstr "Generera kod för M*Core M340" #: config/mcore/mcore.opt:31 msgid "Force functions to be aligned to a 4 byte boundary" -msgstr "Tvinga funktioner till att vara justerade till en 4-bytegräns" +msgstr "Tvinga funktioner till att vara justerade till en 4-bytegräns" #: config/mcore/mcore.opt:35 config/score/score.opt:23 msgid "Generate big-endian code" @@ -7231,47 +7231,47 @@ msgstr "Mata ut anropsgrafsinformation" #: config/mcore/mcore.opt:43 msgid "Use the divide instruction" -msgstr "Använd divisionsinstruktionen" +msgstr "Använd divisionsinstruktionen" #: config/mcore/mcore.opt:47 msgid "Inline constants if it can be done in 2 insns or less" -msgstr "Inline:a konstanter om det kan göras på 2 instruktioner eller mindre" +msgstr "Inline:a konstanter om det kan göras pÃ¥ 2 instruktioner eller mindre" #: config/mcore/mcore.opt:51 config/score/score.opt:27 msgid "Generate little-endian code" -msgstr "Generera kod med omvänd byteordning" +msgstr "Generera kod med omvänd byteordning" #: config/mcore/mcore.opt:56 config/fr30/fr30.opt:27 msgid "Assume that run-time support has been provided, so omit -lsim from the linker command line" -msgstr "Anta att körtidsstöd finns, så utelämna -lsim från länkningskommandoraden" +msgstr "Anta att körtidsstöd finns, sÃ¥ utelämna -lsim frÃ¥n länkningskommandoraden" #: config/mcore/mcore.opt:60 msgid "Use arbitrary sized immediates in bit operations" -msgstr "Använd godtyckligt stora omedelbara i bitoperationer" +msgstr "Använd godtyckligt stora omedelbara i bitoperationer" #: config/mcore/mcore.opt:64 msgid "Prefer word accesses over byte accesses" -msgstr "Föredra ordåtkomst före byteåtkomst" +msgstr "Föredra ordÃ¥tkomst före byteÃ¥tkomst" #: config/mcore/mcore.opt:71 msgid "Set the maximum amount for a single stack increment operation" -msgstr "Ange maximal storlek på en ensam stackökningsoperation" +msgstr "Ange maximal storlek pÃ¥ en ensam stackökningsoperation" #: config/mcore/mcore.opt:75 msgid "Always treat bitfields as int-sized" -msgstr "Hantera alltid bitfält som int-stora" +msgstr "Hantera alltid bitfält som int-stora" #: config/c6x/c6x.opt:30 config/mips/mips.opt:130 config/mep/mep.opt:82 msgid "Use big-endian byte order" -msgstr "Använd rak byteordning" +msgstr "Använd rak byteordning" #: config/c6x/c6x.opt:34 config/mips/mips.opt:134 config/mep/mep.opt:86 msgid "Use little-endian byte order" -msgstr "Använd omvänd byteordning" +msgstr "Använd omvänd byteordning" #: config/c6x/c6x.opt:38 config/bfin/bfin.opt:40 config/mep/mep.opt:143 msgid "Use simulator runtime" -msgstr "Använd simulatorkörtider" +msgstr "Använd simulatorkörtider" #: config/c6x/c6x.opt:46 msgid "Valid arguments for the -msdata= option" @@ -7279,15 +7279,15 @@ msgstr "Giltiga argument till flaggan -msdata=" #: config/c6x/c6x.opt:59 msgid "Compile for the DSBT shared library ABI" -msgstr "Kompilara ABI:et DSBT för delade bibliotek" +msgstr "Kompilara ABI:et DSBT för delade bibliotek" #: config/c6x/c6x.opt:63 config/bfin/bfin.opt:82 msgid "Avoid generating pc-relative calls; use indirection" -msgstr "Undvik att generera pc-relativa anrop, använd indirekt anrop" +msgstr "Undvik att generera pc-relativa anrop, använd indirekt anrop" #: config/c6x/c6x-tables.opt:24 msgid "Known C6X ISAs (for use with the -march= option):" -msgstr "Kända C6X ISA:er (att användas med flaggan -march=):" +msgstr "Kända C6X ISA:er (att användas med flaggan -march=):" #: config/sh/sh.opt:45 msgid "Generate SH1 code" @@ -7359,15 +7359,15 @@ msgstr "Generera SH4-300-kod utan FPU" #: config/sh/sh.opt:115 msgid "Generate code for SH4 340 series (MMU/FPU-less)" -msgstr "Generera kod för SH4 340-serien (saknar MMU/FPU)" +msgstr "Generera kod för SH4 340-serien (saknar MMU/FPU)" #: config/sh/sh.opt:120 msgid "Generate code for SH4 400 series (MMU/FPU-less)" -msgstr "Generera kod för SH4 400-serien (saknar MMU/FPU)" +msgstr "Generera kod för SH4 400-serien (saknar MMU/FPU)" #: config/sh/sh.opt:125 msgid "Generate code for SH4 500 series (FPU-less)." -msgstr "Generera kod för SH4-500-serien (utan FPU)." +msgstr "Generera kod för SH4-500-serien (utan FPU)." #: config/sh/sh.opt:130 msgid "Generate default single-precision SH4 code" @@ -7447,15 +7447,15 @@ msgstr "Generera SHcompact-kod utan FPU" #: config/sh/sh.opt:210 msgid "Throttle unrolling to avoid thrashing target registers unless the unroll benefit outweighs this" -msgstr "Begränsa utrullning för att undvika att skriva sönder målregister om inte utrullningenfördelen överväger detta" +msgstr "Begränsa utrullning för att undvika att skriva sönder mÃ¥lregister om inte utrullningenfördelen överväger detta" #: config/sh/sh.opt:214 msgid "Generate code in big endian mode" -msgstr "Generera kod för rak byteordning" +msgstr "Generera kod för rak byteordning" #: config/sh/sh.opt:218 msgid "Generate 32-bit offsets in switch tables" -msgstr "Använd 32-bitars avstånd i hopptabeller" +msgstr "Använd 32-bitars avstÃ¥nd i hopptabeller" #: config/sh/sh.opt:222 msgid "Generate bit instructions" @@ -7463,23 +7463,23 @@ msgstr "Generera bitinstruktioner" #: config/sh/sh.opt:226 msgid "Cost to assume for a branch insn" -msgstr "Kostnad att anta för en greninstruktion" +msgstr "Kostnad att anta för en greninstruktion" #: config/sh/sh.opt:230 msgid "Enable cbranchdi4 pattern" -msgstr "Aktivera cbranchdi4-mönster" +msgstr "Aktivera cbranchdi4-mönster" #: config/sh/sh.opt:234 msgid "Emit cmpeqdi_t pattern even when -mcbranchdi is in effect." -msgstr "Mata ut cmpeqdi_t-mönster även när -mcbranchdi är aktivt." +msgstr "Mata ut cmpeqdi_t-mönster även när -mcbranchdi är aktivt." #: config/sh/sh.opt:238 msgid "Enable SH5 cut2 workaround" -msgstr "Aktivera sätt att kringgå SH5 cut2" +msgstr "Aktivera sätt att kringgÃ¥ SH5 cut2" #: config/sh/sh.opt:242 msgid "Align doubles at 64-bit boundaries" -msgstr "Justera double på 64-bitarsgränser" +msgstr "Justera double pÃ¥ 64-bitarsgränser" #: config/sh/sh.opt:246 msgid "Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table" @@ -7487,35 +7487,35 @@ msgstr "Divisionsstrategi, en av: call, call2, fp, inv, inv:minlat, inv20u, inv2 #: config/sh/sh.opt:250 msgid "Specify name for 32 bit signed division function" -msgstr "Ange namnet på funktion för 32-bitars division med tecken" +msgstr "Ange namnet pÃ¥ funktion för 32-bitars division med tecken" #: config/sh/sh.opt:254 msgid "Enable the use of 64-bit floating point registers in fmov instructions. See -mdalign if 64-bit alignment is required." -msgstr "Möjliggör användningen av 64-bitars flyttalsregister i fmov-instruktioner. Se -mdalign om 64-bitars justering krävs." +msgstr "Möjliggör användningen av 64-bitars flyttalsregister i fmov-instruktioner. Se -mdalign om 64-bitars justering krävs." #: config/sh/sh.opt:262 msgid "Enable the use of the fused floating point multiply-accumulate operation" -msgstr "Möjliggör användning av de sammanslagna flyttalsinstruktionerna multiplikation-ackumulering" +msgstr "Möjliggör användning av de sammanslagna flyttalsinstruktionerna multiplikation-ackumulering" #: config/sh/sh.opt:266 msgid "Cost to assume for gettr insn" -msgstr "Kostnad att anta för getattr-instruktion" +msgstr "Kostnad att anta för getattr-instruktion" #: config/sh/sh.opt:270 config/sh/sh.opt:320 msgid "Follow Renesas (formerly Hitachi) / SuperH calling conventions" -msgstr "Följ Renesas (tidigare Hitachi) / SuperH-anropskonventioner" +msgstr "Följ Renesas (tidigare Hitachi) / SuperH-anropskonventioner" #: config/sh/sh.opt:274 msgid "Increase the IEEE compliance for floating-point code" -msgstr "Öka efterföljden av IEEE för flyttalskod" +msgstr "Öka efterföljden av IEEE för flyttalskod" #: config/sh/sh.opt:278 msgid "Enable the use of the indexed addressing mode for SHmedia32/SHcompact" -msgstr "Aktivera användning av det indexerade adresseringsläget för SHmedia32/SHcompact" +msgstr "Aktivera användning av det indexerade adresseringsläget för SHmedia32/SHcompact" #: config/sh/sh.opt:282 msgid "inline code to invalidate instruction cache entries after setting up nested function trampolines" -msgstr "inline:a kod för att invalidera instruktionscacheposter efter att nästade funktionstrampoliner satts upp" +msgstr "inline:a kod för att invalidera instruktionscacheposter efter att nästade funktionstrampoliner satts upp" #: config/sh/sh.opt:286 msgid "Assume symbols might be invalid" @@ -7523,63 +7523,63 @@ msgstr "Anta att symboler kan vara ogiltiga" #: config/sh/sh.opt:290 msgid "Annotate assembler instructions with estimated addresses" -msgstr "Annotera assemblerinstruktioner med bedömda adresser" +msgstr "Annotera assemblerinstruktioner med bedömda adresser" #: config/sh/sh.opt:294 msgid "Generate code in little endian mode" -msgstr "Generera kod för omvänd byteordning" +msgstr "Generera kod för omvänd byteordning" #: config/sh/sh.opt:298 msgid "Mark MAC register as call-clobbered" -msgstr "Markera MAC-register som anropsöverskrivna" +msgstr "Markera MAC-register som anropsöverskrivna" #: config/sh/sh.opt:304 msgid "Make structs a multiple of 4 bytes (warning: ABI altered)" -msgstr "Gör poster en multipel av 4 byte (varning: ABI:et ändras)" +msgstr "Gör poster en multipel av 4 byte (varning: ABI:et ändras)" #: config/sh/sh.opt:308 msgid "Emit function-calls using global offset table when generating PIC" -msgstr "Mata ut funktionsanrop som använder en global avståndstabell när PIC genereras" +msgstr "Mata ut funktionsanrop som använder en global avstÃ¥ndstabell när PIC genereras" #: config/sh/sh.opt:312 msgid "Assume pt* instructions won't trap" -msgstr "Anta att pt*-instruktioner inte utlöser fällor" +msgstr "Anta att pt*-instruktioner inte utlöser fällor" #: config/sh/sh.opt:316 msgid "Shorten address references during linking" -msgstr "Förkorta adressreferenser vid länkning" +msgstr "Förkorta adressreferenser vid länkning" #: config/sh/sh.opt:324 msgid "Use software atomic sequences supported by kernel" -msgstr "Använd atomära programvarusekvenser som stödjs av kärnan" +msgstr "Använd atomära programvarusekvenser som stödjs av kärnan" #: config/sh/sh.opt:328 msgid "Deprecated. Use -Os instead" -msgstr "Undanbedes. Använd -Os istället" +msgstr "Undanbedes. Använd -Os istället" #: config/sh/sh.opt:332 msgid "Cost to assume for a multiply insn" -msgstr "Kostnad att anta för en multiplikationsinstruktion" +msgstr "Kostnad att anta för en multiplikationsinstruktion" #: config/sh/sh.opt:336 msgid "Don't generate privileged-mode only code; implies -mno-inline-ic_invalidate if the inline code would not work in user mode." -msgstr "Generera inte kod för endast privilegierat läge. Implicerar -mno-inline-ic_invalidate om den inline:ade koden inte skulle fungera i användarläge." +msgstr "Generera inte kod för endast privilegierat läge. Implicerar -mno-inline-ic_invalidate om den inline:ade koden inte skulle fungera i användarläge." #: config/sh/sh.opt:342 msgid "Pretend a branch-around-a-move is a conditional move." -msgstr "Låtsas en gren-runt-en-förflyttning är en villkorlig förflyttning." +msgstr "LÃ¥tsas en gren-runt-en-förflyttning är en villkorlig förflyttning." #: config/sh/superh.opt:6 msgid "Board name [and memory region]." -msgstr "Brädesnamn [och minnesregion]." +msgstr "Brädesnamn [och minnesregion]." #: config/sh/superh.opt:10 msgid "Runtime name." -msgstr "Körtidsnamn." +msgstr "Körtidsnamn." #: config/arm/arm.opt:26 msgid "TLS dialect to use:" -msgstr "TLS-dialekt att använda:" +msgstr "TLS-dialekt att använda:" #: config/arm/arm.opt:36 msgid "Specify an ABI" @@ -7587,7 +7587,7 @@ msgstr "Ange ett ABI" #: config/arm/arm.opt:40 msgid "Known ARM ABIs (for use with the -mabi= option):" -msgstr "Kända ARM ABI:er (att användas med flaggan -mabi=):" +msgstr "Kända ARM ABI:er (att användas med flaggan -mabi=):" #: config/arm/arm.opt:59 msgid "Generate a call to abort if a noreturn function returns" @@ -7603,39 +7603,39 @@ msgstr "Generera stackramar enligt APCS" #: config/arm/arm.opt:74 msgid "Generate re-entrant, PIC code" -msgstr "Generera återstartbar, PIC-kod" +msgstr "Generera Ã¥terstartbar, PIC-kod" #: config/arm/arm.opt:90 msgid "Generate code in 32 bit ARM state." -msgstr "Generera kod i 32-bitars ARM-tillstånd." +msgstr "Generera kod i 32-bitars ARM-tillstÃ¥nd." #: config/arm/arm.opt:94 msgid "Assume target CPU is configured as big endian" -msgstr "Antag att mål-CPU:n är konfigurerad för rak byteordning" +msgstr "Antag att mÃ¥l-CPU:n är konfigurerad för rak byteordning" #: config/arm/arm.opt:98 msgid "Thumb: Assume non-static functions may be called from ARM code" -msgstr "Thumb: Anta att icke-statiska funktioner kan anropas från ARM-kod" +msgstr "Thumb: Anta att icke-statiska funktioner kan anropas frÃ¥n ARM-kod" #: config/arm/arm.opt:102 msgid "Thumb: Assume function pointers may go to non-Thumb aware code" -msgstr "Thumb: Anta att funktionspekare kan gå till icke-Thumb-medveten kod" +msgstr "Thumb: Anta att funktionspekare kan gÃ¥ till icke-Thumb-medveten kod" #: config/arm/arm.opt:106 msgid "Cirrus: Place NOPs to avoid invalid instruction combinations" -msgstr "Cirrus: Placera NOP:ar för att undvika ogiltiga instruktionskombinationer" +msgstr "Cirrus: Placera NOP:ar för att undvika ogiltiga instruktionskombinationer" #: config/arm/arm.opt:110 config/bfin/bfin.opt:44 msgid "Specify the name of the target CPU" -msgstr "Ange namnet på målprocessorn" +msgstr "Ange namnet pÃ¥ mÃ¥lprocessorn" #: config/arm/arm.opt:114 msgid "Specify if floating point hardware should be used" -msgstr "Ange om flyttalshårdvara skall användas" +msgstr "Ange om flyttalshÃ¥rdvara skall användas" #: config/arm/arm.opt:118 msgid "Known floating-point ABIs (for use with the -mfloat-abi= option):" -msgstr "Känta flyttals-ABI:er (att användas med flaggan -mfloat-abi=):" +msgstr "Känta flyttals-ABI:er (att användas med flaggan -mfloat-abi=):" #: config/arm/arm.opt:137 msgid "Specify the __fp16 floating-point format" @@ -7643,23 +7643,23 @@ msgstr "Ange flyttalsformatet __fp16" #: config/arm/arm.opt:141 msgid "Known __fp16 formats (for use with the -mfp16-format= option):" -msgstr "Kända __fp16-format (att användas med flaggan -mfp16-format=):" +msgstr "Kända __fp16-format (att användas med flaggan -mfp16-format=):" #: config/arm/arm.opt:164 msgid "Specify the name of the target floating point hardware/format" -msgstr "Ange namnet på målets flyttalshårdvara/-format" +msgstr "Ange namnet pÃ¥ mÃ¥lets flyttalshÃ¥rdvara/-format" #: config/arm/arm.opt:171 msgid "Assume target CPU is configured as little endian" -msgstr "Antag att mål-CPU:n är konfigurerad med omvänd byteordning" +msgstr "Antag att mÃ¥l-CPU:n är konfigurerad med omvänd byteordning" #: config/arm/arm.opt:175 msgid "Generate call insns as indirect calls, if necessary" -msgstr "Generera anropsinstruktioner som indirekta anrop, om nödvändigt" +msgstr "Generera anropsinstruktioner som indirekta anrop, om nödvändigt" #: config/arm/arm.opt:179 msgid "Specify the register to be used for PIC addressing" -msgstr "Ange registret som skall användas för PIC-adressering" +msgstr "Ange registret som skall användas för PIC-adressering" #: config/arm/arm.opt:183 msgid "Store function names in object code" @@ -7667,27 +7667,27 @@ msgstr "Lagra funktionsnamn i objektkod" #: config/arm/arm.opt:187 msgid "Permit scheduling of a function's prologue sequence" -msgstr "Tillåt schemaläggning av en funktions prologsekvens" +msgstr "TillÃ¥t schemaläggning av en funktions prologsekvens" #: config/arm/arm.opt:198 msgid "Specify the minimum bit alignment of structures" -msgstr "Ange den minsta justeringen i bitar för poster" +msgstr "Ange den minsta justeringen i bitar för poster" #: config/arm/arm.opt:202 msgid "Generate code for Thumb state" -msgstr "Generera kod för Thumb-tillstånd" +msgstr "Generera kod för Thumb-tillstÃ¥nd" #: config/arm/arm.opt:206 msgid "Support calls between Thumb and ARM instruction sets" -msgstr "Stöd anrop mellan Thumb- och ARM-instruktionsuppsättningar" +msgstr "Stöd anrop mellan Thumb- och ARM-instruktionsuppsättningar" #: config/arm/arm.opt:210 msgid "Specify thread local storage scheme" -msgstr "Ange metod för trådlokal lagring" +msgstr "Ange metod för trÃ¥dlokal lagring" #: config/arm/arm.opt:214 msgid "Specify how to access the thread pointer" -msgstr "Ange hur trådpekaren skall nås" +msgstr "Ange hur trÃ¥dpekaren skall nÃ¥s" #: config/arm/arm.opt:218 msgid "Valid arguments to -mtp=:" @@ -7695,180 +7695,180 @@ msgstr "Giltiga argument till -mtp=:" #: config/arm/arm.opt:231 msgid "Thumb: Generate (non-leaf) stack frames even if not needed" -msgstr "Thumb: Generera (icke-löv-)stackramar även om de inte behövs" +msgstr "Thumb: Generera (icke-löv-)stackramar även om de inte behövs" #: config/arm/arm.opt:235 msgid "Thumb: Generate (leaf) stack frames even if not needed" -msgstr "Thumb: Generera (löv)stackramar även om de inte behövs" +msgstr "Thumb: Generera (löv)stackramar även om de inte behövs" #: config/arm/arm.opt:248 msgid "Assume big endian bytes, little endian words. This option is deprecated." -msgstr "Antag att byte har rak byteordning, ord har omvänd byteordning. Denna flagga bör undvikas." +msgstr "Antag att byte har rak byteordning, ord har omvänd byteordning. Denna flagga bör undvikas." #: config/arm/arm.opt:252 msgid "Use Neon quad-word (rather than double-word) registers for vectorization" -msgstr "Använd Neons quad-ords- (snarare än dubbelords-)register för vektoriseringar" +msgstr "Använd Neons quad-ords- (snarare än dubbelords-)register för vektoriseringar" #: config/arm/arm.opt:256 msgid "Use Neon double-word (rather than quad-word) registers for vectorization" -msgstr "Använd Neons dubbelords- (snarare än quad-ords-)register för vektoriseringar" +msgstr "Använd Neons dubbelords- (snarare än quad-ords-)register för vektoriseringar" #: config/arm/arm.opt:260 msgid "Only generate absolute relocations on word sized values." -msgstr "Generera endast absoluta omlokaliseringar för värden av ordstorlek." +msgstr "Generera endast absoluta omlokaliseringar för värden av ordstorlek." #: config/arm/arm.opt:264 msgid "Avoid overlapping destination and address registers on LDRD instructions" -msgstr "Undvik överlappande destinationer och adressregister för LDRD-instruktioner" +msgstr "Undvik överlappande destinationer och adressregister för LDRD-instruktioner" #: config/arm/arm.opt:269 msgid "Enable unaligned word and halfword accesses to packed data." -msgstr "Tillåt ojusterade ord- och halvordsåtkomster till packade data." +msgstr "TillÃ¥t ojusterade ord- och halvordsÃ¥tkomster till packade data." #: config/arm/pe.opt:23 msgid "Ignore dllimport attribute for functions" -msgstr "Ignorera attributet dllimport för funktioner" +msgstr "Ignorera attributet dllimport för funktioner" #: config/arm/arm-tables.opt:25 msgid "Known ARM CPUs (for use with the -mcpu= and -mtune= options):" -msgstr "Kända ARM CPU:er (att användas med flaggorna -mcpu= och -mtune=):" +msgstr "Kända ARM CPU:er (att användas med flaggorna -mcpu= och -mtune=):" #: config/arm/arm-tables.opt:275 msgid "Known ARM architectures (for use with the -march= option):" -msgstr "Kända ARM-arkitekturer (att användas med flaggan -march=):" +msgstr "Kända ARM-arkitekturer (att användas med flaggan -march=):" #: config/arm/arm-tables.opt:357 msgid "Known ARM FPUs (for use with the -mfpu= option):" -msgstr "Kända ARM FPU:er (att användas med flaggan -mfpu=):" +msgstr "Kända ARM FPU:er (att användas med flaggan -mfpu=):" #: config/pdp11/pdp11.opt:23 msgid "Generate code for an 11/10" -msgstr "Generera kod för 11/10" +msgstr "Generera kod för 11/10" #: config/pdp11/pdp11.opt:27 msgid "Generate code for an 11/40" -msgstr "Generera kod för 11/40" +msgstr "Generera kod för 11/40" #: config/pdp11/pdp11.opt:31 msgid "Generate code for an 11/45" -msgstr "Generera kod för 11/45" +msgstr "Generera kod för 11/45" #: config/pdp11/pdp11.opt:35 msgid "Return floating-point results in ac0 (fr0 in Unix assembler syntax)" -msgstr "Returnera flyttalsresultat i ac0 (fr0 i assemblersyntax för Unix)" +msgstr "Returnera flyttalsresultat i ac0 (fr0 i assemblersyntax för Unix)" #: config/pdp11/pdp11.opt:39 msgid "Do not use inline patterns for copying memory" -msgstr "Använd inte inline-mönster för att kopiera minne" +msgstr "Använd inte inline-mönster för att kopiera minne" #: config/pdp11/pdp11.opt:43 msgid "Use inline patterns for copying memory" -msgstr "Använd inline-mönster för att kopiera minne" +msgstr "Använd inline-mönster för att kopiera minne" #: config/pdp11/pdp11.opt:47 msgid "Do not pretend that branches are expensive" -msgstr "Låtsas inte att grenar är dyra" +msgstr "LÃ¥tsas inte att grenar är dyra" #: config/pdp11/pdp11.opt:51 msgid "Pretend that branches are expensive" -msgstr "Låtsas att grenar är dyra" +msgstr "LÃ¥tsas att grenar är dyra" #: config/pdp11/pdp11.opt:55 msgid "Use the DEC assembler syntax" -msgstr "Använd assemblersyntax för DEC" +msgstr "Använd assemblersyntax för DEC" #: config/pdp11/pdp11.opt:59 msgid "Use 32 bit float" -msgstr "Använd 32 bits float" +msgstr "Använd 32 bits float" #: config/pdp11/pdp11.opt:63 msgid "Use 64 bit float" -msgstr "Använd 64 bits float" +msgstr "Använd 64 bits float" #: config/pdp11/pdp11.opt:71 msgid "Use 16 bit int" -msgstr "Använd 16 bits int" +msgstr "Använd 16 bits int" #: config/pdp11/pdp11.opt:75 msgid "Use 32 bit int" -msgstr "Använd 32 bits int" +msgstr "Använd 32 bits int" #: config/pdp11/pdp11.opt:83 msgid "Target has split I&D" -msgstr "Målet har uppdelat I&D" +msgstr "MÃ¥let har uppdelat I&D" #: config/pdp11/pdp11.opt:87 msgid "Use UNIX assembler syntax" -msgstr "Använd assemblersyntax för UNIX" +msgstr "Använd assemblersyntax för UNIX" #: config/avr/avr.opt:23 msgid "Use subroutines for function prologues and epilogues" -msgstr "Använd subrutiner för funktionprologer och -epiloger" +msgstr "Använd subrutiner för funktionprologer och -epiloger" #: config/avr/avr.opt:27 msgid "-mmcu=MCU\tSelect the target MCU" -msgstr "-mmcu=MCU\tVälj mål-MCU:n" +msgstr "-mmcu=MCU\tVälj mÃ¥l-MCU:n" #: config/avr/avr.opt:37 msgid "Use an 8-bit 'int' type" -msgstr "Använd en 8-bitars \"int\"-typ" +msgstr "Använd en 8-bitars â€intâ€-typ" #: config/avr/avr.opt:41 msgid "Change the stack pointer without disabling interrupts" -msgstr "Ändra stackpekaren utan att avaktivera avbrott" +msgstr "Ändra stackpekaren utan att avaktivera avbrott" #: config/avr/avr.opt:45 msgid "Set the branch costs for conditional branch instructions. Reasonable values are small, non-negative integers. The default branch cost is 0." -msgstr "Ställ in grenkostnaden för villkorliga greninstruktioner. Rimliga värden är små, ickenegativa heltal. Standardkostnaden för grenar är 0." +msgstr "Ställ in grenkostnaden för villkorliga greninstruktioner. Rimliga värden är smÃ¥, ickenegativa heltal. Standardkostnaden för grenar är 0." #: config/avr/avr.opt:55 msgid "Use rjmp/rcall (limited range) on >8K devices" -msgstr "Använd rjmp/rcall (begränsat intervall) på enheter >8k" +msgstr "Använd rjmp/rcall (begränsat intervall) pÃ¥ enheter >8k" #: config/avr/avr.opt:59 msgid "Change only the low 8 bits of the stack pointer" -msgstr "Ändra endast de låga 8 bitarna av stackpekaren" +msgstr "Ändra endast de lÃ¥ga 8 bitarna av stackpekaren" #: config/avr/avr.opt:63 msgid "Relax branches" -msgstr "Lätta på grenar" +msgstr "Lätta pÃ¥ grenar" #: config/avr/avr.opt:67 msgid "Make the linker relaxation machine assume that a program counter wrap-around occurs." -msgstr "Gör så att länkarens lättnadsmaskin antar att programräknaren slår runt." +msgstr "Gör sÃ¥ att länkarens lättnadsmaskin antar att programräknaren slÃ¥r runt." #: config/avr/avr.opt:71 msgid "Accumulate outgoing function arguments and acquire/release the needed stack space for outpoing function arguments in function prologue/epilogue. Without this option, outgoing arguments are pushed before calling a function and popped afterwards. This option can lead to reduced code size for functions that call many functions that get their arguments on the stack like, for example printf." -msgstr "Samla utgående funktionsargument och ta/släpp det nödvändiga stackutrymmet för utgående funktionsargument i funktionsprologen/-epilogen. Utan denna flagga trycks utgående argment på stacken före anrop av en funktion och plockas efteråt. Denna flagga kan medföra reducerad kodstorlek för funktioner som anropar många funktioner som får sina argument på stacken som, till exempel printf." +msgstr "Samla utgÃ¥ende funktionsargument och ta/släpp det nödvändiga stackutrymmet för utgÃ¥ende funktionsargument i funktionsprologen/-epilogen. Utan denna flagga trycks utgÃ¥ende argment pÃ¥ stacken före anrop av en funktion och plockas efterÃ¥t. Denna flagga kan medföra reducerad kodstorlek för funktioner som anropar mÃ¥nga funktioner som fÃ¥r sina argument pÃ¥ stacken som, till exempel printf." #: config/avr/avr.opt:75 msgid "When accessing RAM, use X as imposed by the hardware, i.e. just use pre-decrement, post-increment and indirect addressing with the X register. Without this option, the compiler may assume that there is an addressing mode X+const similar to Y+const and Z+const and emit instructions to emulate such an addressing mode for X." -msgstr "När RAM skall nås, använd X som hårdvaran framtvingar, d.v.s. använda bara för-dekrementering, efter-inkrementering och indirekt adressering med registret X. Utan denna flagga kan kompilatorn anta att det finns ett adresseringsläge X+konstant liknande Y+konstant och Z+konstant och mata ut instriktioner för att emulera ett sådant adresseringsläge för X." +msgstr "När RAM skall nÃ¥s, använd X som hÃ¥rdvaran framtvingar, d.v.s. använda bara för-dekrementering, efter-inkrementering och indirekt adressering med registret X. Utan denna flagga kan kompilatorn anta att det finns ett adresseringsläge X+konstant liknande Y+konstant och Z+konstant och mata ut instriktioner för att emulera ett sÃ¥dant adresseringsläge för X." #: config/avr/avr-tables.opt:24 msgid "Known MCU names:" -msgstr "Kända MCU-namn:" +msgstr "Kända MCU-namn:" #: config/rl78/rl78.opt:27 config/rx/rx.opt:84 msgid "Use the simulator runtime." -msgstr "Använd simulatorkörtidskod." +msgstr "Använd simulatorkörtidskod." #: config/rl78/rl78.opt:31 msgid "Select hardware or software multiplication support." -msgstr "Välj hårdvaru- eller programvarustöd för multiplikation." +msgstr "Välj hÃ¥rdvaru- eller programvarustöd för multiplikation." #: config/pa/pa-hpux.opt:27 msgid "Generate cpp defines for server IO" -msgstr "Generera cpp-definitioner för server-IO" +msgstr "Generera cpp-definitioner för server-IO" #: config/pa/pa-hpux.opt:31 config/pa/pa-hpux1010.opt:23 #: config/pa/pa-hpux1111.opt:23 config/pa/pa-hpux1131.opt:23 msgid "Specify UNIX standard for predefines and linking" -msgstr "Ange UNIX-standard för fördefinitioner och länkning" +msgstr "Ange UNIX-standard för fördefinitioner och länkning" #: config/pa/pa-hpux.opt:35 msgid "Generate cpp defines for workstation IO" -msgstr "Generera cpp-definitioner för arbetsstations-IO" +msgstr "Generera cpp-definitioner för arbetsstations-IO" #: config/pa/pa.opt:30 config/pa/pa.opt:83 config/pa/pa.opt:91 msgid "Generate PA1.0 code" @@ -7880,11 +7880,11 @@ msgstr "Generera PA1.1-kod" #: config/pa/pa.opt:38 config/pa/pa.opt:99 msgid "Generate PA2.0 code (requires binutils 2.10 or later)" -msgstr "Generera kod för PA2.0 (kräver binutils 2.10 eller senare)" +msgstr "Generera kod för PA2.0 (kräver binutils 2.10 eller senare)" #: config/pa/pa.opt:42 msgid "Generate code for huge switch statements" -msgstr "Generera kod för stora switch-satser" +msgstr "Generera kod för stora switch-satser" #: config/pa/pa.opt:46 msgid "Disable FP regs" @@ -7904,19 +7904,19 @@ msgstr "Anta att kod kommer assembleras av GAS" #: config/pa/pa.opt:66 msgid "Put jumps in call delay slots" -msgstr "Placera hopp i fördröjda anropsfack" +msgstr "Placera hopp i fördröjda anropsfack" #: config/pa/pa.opt:71 msgid "Enable linker optimizations" -msgstr "Aktivera länkningsoptimeringar" +msgstr "Aktivera länkningsoptimeringar" #: config/pa/pa.opt:75 msgid "Always generate long calls" -msgstr "Generera alltid långa anrop" +msgstr "Generera alltid lÃ¥nga anrop" #: config/pa/pa.opt:79 msgid "Emit long load/store sequences" -msgstr "Mata ut långa load-/store-sekvenser" +msgstr "Mata ut lÃ¥nga load-/store-sekvenser" #: config/pa/pa.opt:87 msgid "Disable space regs" @@ -7924,11 +7924,11 @@ msgstr "Avaktivera utrymmesregister" #: config/pa/pa.opt:103 msgid "Use portable calling conventions" -msgstr "Använd portabla anropskonventioner" +msgstr "Använd portabla anropskonventioner" #: config/pa/pa.opt:107 msgid "Specify CPU for scheduling purposes. Valid arguments are 700, 7100, 7100LC, 7200, 7300, and 8000" -msgstr "Ange CPU för schemaläggningsändamål. Giltiga argument är 700, 7100, 7100LC, 7200, 7300 och 8000" +msgstr "Ange CPU för schemaläggningsändamÃ¥l. Giltiga argument är 700, 7100, 7100LC, 7200, 7300 och 8000" #: config/pa/pa.opt:140 msgid "Do not disable space regs" @@ -7936,31 +7936,31 @@ msgstr "Avaktivera inte utrymmesregister" #: config/pa/pa64-hpux.opt:23 msgid "Assume code will be linked by GNU ld" -msgstr "Anta kod kommer länkas av GNU ld" +msgstr "Anta kod kommer länkas av GNU ld" #: config/pa/pa64-hpux.opt:27 msgid "Assume code will be linked by HP ld" -msgstr "Anta kod kommer länkas av HP ld" +msgstr "Anta kod kommer länkas av HP ld" #: config/xtensa/xtensa.opt:23 msgid "Use CONST16 instruction to load constants" -msgstr "Använd CONST16-instruktioner för att läsa konstanter" +msgstr "Använd CONST16-instruktioner för att läsa konstanter" #: config/xtensa/xtensa.opt:27 msgid "Disable position-independent code (PIC) for use in OS kernel code" -msgstr "Avaktivera positionsoberoende kod (PIC) för användning i OS-kärnkod" +msgstr "Avaktivera positionsoberoende kod (PIC) för användning i OS-kärnkod" #: config/xtensa/xtensa.opt:31 msgid "Use indirect CALLXn instructions for large programs" -msgstr "Använd indirekta CALLXn-instruktioner för stora program" +msgstr "Använd indirekta CALLXn-instruktioner för stora program" #: config/xtensa/xtensa.opt:35 msgid "Automatically align branch targets to reduce branch penalties" -msgstr "Justera automatiskt grenmål för att reducera grenstraff" +msgstr "Justera automatiskt grenmÃ¥l för att reducera grenstraff" #: config/xtensa/xtensa.opt:39 msgid "Intersperse literal pools with code in the text section" -msgstr "Växla mellan bokstavliga pooler och kod i textsektionen" +msgstr "Växla mellan bokstavliga pooler och kod i textsektionen" #: config/xtensa/xtensa.opt:43 msgid "-mno-serialize-volatile\tDo not serialize volatile memory references with MEMW instructions" @@ -7968,47 +7968,47 @@ msgstr "-mno-serialize-volatile\tSerialisera inte minnesreferenser till flyktigt #: config/stormy16/stormy16.opt:24 msgid "Provide libraries for the simulator" -msgstr "Tillhandahåll bibliotek för simulatorn" +msgstr "TillhandahÃ¥ll bibliotek för simulatorn" #: config/mips/mips.opt:32 msgid "-mabi=ABI\tGenerate code that conforms to the given ABI" -msgstr "-mabi=ABI\tGenerera kod som följer det angivna ABI:et" +msgstr "-mabi=ABI\tGenerera kod som följer det angivna ABI:et" #: config/mips/mips.opt:36 msgid "Known MIPS ABIs (for use with the -mabi= option):" -msgstr "Kända MIPS ABI:er (att användas med flaggan -mabi=):" +msgstr "Kända MIPS ABI:er (att användas med flaggan -mabi=):" #: config/mips/mips.opt:55 msgid "Generate code that can be used in SVR4-style dynamic objects" -msgstr "Generera kod som kan användas i dynamiska objekt i SVR4-stil" +msgstr "Generera kod som kan användas i dynamiska objekt i SVR4-stil" #: config/mips/mips.opt:59 msgid "Use PMC-style 'mad' instructions" -msgstr "Använd \"mad\"-instruktioner i PMC-stil" +msgstr "Använd â€madâ€-instruktioner i PMC-stil" #: config/mips/mips.opt:63 msgid "-march=ISA\tGenerate code for the given ISA" -msgstr "-march=ISA\tGenerera kod för den angivna ISA:n" +msgstr "-march=ISA\tGenerera kod för den angivna ISA:n" #: config/mips/mips.opt:67 msgid "-mbranch-cost=COST\tSet the cost of branches to roughly COST instructions" -msgstr "-mbranch-cost=KOSTNAD\tAnge kostnaden för grenar till ungefär KOSTNAD instruktioner" +msgstr "-mbranch-cost=KOSTNAD\tAnge kostnaden för grenar till ungefär KOSTNAD instruktioner" #: config/mips/mips.opt:71 msgid "Use Branch Likely instructions, overriding the architecture default" -msgstr "Använd Branch Likely-instruktioner, åsidosätt arkitekturens standarval" +msgstr "Använd Branch Likely-instruktioner, Ã¥sidosätt arkitekturens standarval" #: config/mips/mips.opt:75 msgid "Switch on/off MIPS16 ASE on alternating functions for compiler testing" -msgstr "Växla av/på MIPS16 ASE mellan alternerande funktioner för kompilatortestning" +msgstr "Växla av/pÃ¥ MIPS16 ASE mellan alternerande funktioner för kompilatortestning" #: config/mips/mips.opt:79 msgid "Trap on integer divide by zero" -msgstr "Fånga heltalsdivision med noll" +msgstr "FÃ¥nga heltalsdivision med noll" #: config/mips/mips.opt:83 msgid "-mcode-readable=SETTING\tSpecify when instructions are allowed to access code" -msgstr "-code-readable=INSTÄLLNING\tAnge när instruktioner tillåts komma åt kod" +msgstr "-code-readable=INSTÄLLNING\tAnge när instruktioner tillÃ¥ts komma Ã¥t kod" #: config/mips/mips.opt:87 msgid "Valid arguments to -mcode-readable=:" @@ -8016,119 +8016,119 @@ msgstr "Giltiga argument till -mcode-readable=:" #: config/mips/mips.opt:100 msgid "Use branch-and-break sequences to check for integer divide by zero" -msgstr "Använd branch-and-break-sekvenser för att upptäcka heltalsdivision med noll" +msgstr "Använd branch-and-break-sekvenser för att upptäcka heltalsdivision med noll" #: config/mips/mips.opt:104 msgid "Use trap instructions to check for integer divide by zero" -msgstr "Fånga trap-instruktioner för att upptäcka heltalsdivision med noll" +msgstr "FÃ¥nga trap-instruktioner för att upptäcka heltalsdivision med noll" #: config/mips/mips.opt:108 msgid "Allow the use of MDMX instructions" -msgstr "Tillåt användningen av MDMX-instruktioner" +msgstr "TillÃ¥t användningen av MDMX-instruktioner" #: config/mips/mips.opt:112 msgid "Allow hardware floating-point instructions to cover both 32-bit and 64-bit operations" -msgstr "Tillåt flyttalsinstruktioner i hårdvara att täcka både 32-bitars och 64-bitars operationer" +msgstr "TillÃ¥t flyttalsinstruktioner i hÃ¥rdvara att täcka bÃ¥de 32-bitars och 64-bitars operationer" #: config/mips/mips.opt:116 msgid "Use MIPS-DSP instructions" -msgstr "Använd MIPS-DSP-instruktioner" +msgstr "Använd MIPS-DSP-instruktioner" #: config/mips/mips.opt:120 msgid "Use MIPS-DSP REV 2 instructions" -msgstr "Använd MIPS-DSP REV 2-instruktioner" +msgstr "Använd MIPS-DSP REV 2-instruktioner" #: config/mips/mips.opt:138 config/iq2000/iq2000.opt:61 msgid "Use ROM instead of RAM" -msgstr "Använd ROM istället för RAM" +msgstr "Använd ROM istället för RAM" #: config/mips/mips.opt:142 msgid "Use NewABI-style %reloc() assembly operators" -msgstr "Använd assembleroperator %reloc() i NewABI-stil" +msgstr "Använd assembleroperator %reloc() i NewABI-stil" #: config/mips/mips.opt:146 msgid "Use -G for data that is not defined by the current object" -msgstr "Använd -G för data som inte är definierat av det aktuella objektet" +msgstr "Använd -G för data som inte är definierat av det aktuella objektet" #: config/mips/mips.opt:150 msgid "Work around certain 24K errata" -msgstr "Gå runt vissa fel i 24K" +msgstr "GÃ¥ runt vissa fel i 24K" #: config/mips/mips.opt:154 msgid "Work around certain R4000 errata" -msgstr "Gå runt vissa fel i R4000" +msgstr "GÃ¥ runt vissa fel i R4000" #: config/mips/mips.opt:158 msgid "Work around certain R4400 errata" -msgstr "Gå runt vissa fel i R4400" +msgstr "GÃ¥ runt vissa fel i R4400" #: config/mips/mips.opt:162 msgid "Work around certain R10000 errata" -msgstr "Gå runt vissa fel i R10000" +msgstr "GÃ¥ runt vissa fel i R10000" #: config/mips/mips.opt:166 msgid "Work around errata for early SB-1 revision 2 cores" -msgstr "Gå runt fel i tidiga SB-1 revision 2-kärnor" +msgstr "GÃ¥ runt fel i tidiga SB-1 revision 2-kärnor" #: config/mips/mips.opt:170 msgid "Work around certain VR4120 errata" -msgstr "Gå runt vissa fel i VR4120" +msgstr "GÃ¥ runt vissa fel i VR4120" #: config/mips/mips.opt:174 msgid "Work around VR4130 mflo/mfhi errata" -msgstr "Gå runt mflo/mfhi-fel i VR4130" +msgstr "GÃ¥ runt mflo/mfhi-fel i VR4130" #: config/mips/mips.opt:178 msgid "Work around an early 4300 hardware bug" -msgstr "Gå runt ett hårdvarufel i tidiga 4300" +msgstr "GÃ¥ runt ett hÃ¥rdvarufel i tidiga 4300" #: config/mips/mips.opt:182 msgid "FP exceptions are enabled" -msgstr "FP-undantag är aktiverade" +msgstr "FP-undantag är aktiverade" #: config/mips/mips.opt:186 msgid "Use 32-bit floating-point registers" -msgstr "Använd 32-bitars flyttalsregister" +msgstr "Använd 32-bitars flyttalsregister" #: config/mips/mips.opt:190 msgid "Use 64-bit floating-point registers" -msgstr "Använd 64-bitars flyttalsregister" +msgstr "Använd 64-bitars flyttalsregister" #: config/mips/mips.opt:194 msgid "-mflush-func=FUNC\tUse FUNC to flush the cache before calling stack trampolines" -msgstr "-mflush-func=FUNK\tAnvänd FUNK för att tömma cachen föra anrop av stacktrampoliner" +msgstr "-mflush-func=FUNK\tAnvänd FUNK för att tömma cachen föra anrop av stacktrampoliner" #: config/mips/mips.opt:198 msgid "Generate floating-point multiply-add instructions" -msgstr "Generera multiplicera-/adderainstruktioner för flyttal" +msgstr "Generera multiplicera-/adderainstruktioner för flyttal" #: config/mips/mips.opt:202 msgid "Use 32-bit general registers" -msgstr "Använd 32-bitars allmänna register" +msgstr "Använd 32-bitars allmänna register" #: config/mips/mips.opt:206 msgid "Use 64-bit general registers" -msgstr "Använd 64-bitars allmänna register" +msgstr "Använd 64-bitars allmänna register" #: config/mips/mips.opt:210 msgid "Use GP-relative addressing to access small data" -msgstr "Använd GP-relativ adressering för att komma åt små data" +msgstr "Använd GP-relativ adressering för att komma Ã¥t smÃ¥ data" #: config/mips/mips.opt:214 msgid "When generating -mabicalls code, allow executables to use PLTs and copy relocations" -msgstr "Vid generering av -mabicalls-kod, tillåt körbara att använda PLT:er och kopieringsomlokaliseringar" +msgstr "Vid generering av -mabicalls-kod, tillÃ¥t körbara att använda PLT:er och kopieringsomlokaliseringar" #: config/mips/mips.opt:218 msgid "Allow the use of hardware floating-point ABI and instructions" -msgstr "Tillåt användningen av flyttalsinstruktioner och -ABI i hårdvara" +msgstr "TillÃ¥t användningen av flyttalsinstruktioner och -ABI i hÃ¥rdvara" #: config/mips/mips.opt:222 msgid "Generate code that can be safely linked with MIPS16 code." -msgstr "Generera kod som kan länkas säkert med MIPS16-kod." +msgstr "Generera kod som kan länkas säkert med MIPS16-kod." #: config/mips/mips.opt:226 msgid "-mipsN\tGenerate code for ISA level N" -msgstr "-mipsN\tGenerera kod för ISA nivå N" +msgstr "-mipsN\tGenerera kod för ISA nivÃ¥ N" #: config/mips/mips.opt:230 msgid "Generate MIPS16 code" @@ -8136,67 +8136,67 @@ msgstr "Generera MIPS16-kod" #: config/mips/mips.opt:234 msgid "Use MIPS-3D instructions" -msgstr "Använd MIPS-3D-instruktioner" +msgstr "Använd MIPS-3D-instruktioner" #: config/mips/mips.opt:238 msgid "Use ll, sc and sync instructions" -msgstr "Använd ll-, sc- och sync-instruktioner" +msgstr "Använd ll-, sc- och sync-instruktioner" #: config/mips/mips.opt:242 msgid "Use -G for object-local data" -msgstr "Använd -G för objektlokala data" +msgstr "Använd -G för objektlokala data" #: config/mips/mips.opt:246 msgid "Use indirect calls" -msgstr "Använd indirekta anrop" +msgstr "Använd indirekta anrop" #: config/mips/mips.opt:250 msgid "Use a 32-bit long type" -msgstr "Använd en 32-bitars long-typ" +msgstr "Använd en 32-bitars long-typ" #: config/mips/mips.opt:254 msgid "Use a 64-bit long type" -msgstr "Använd en 64-bitars long-typ" +msgstr "Använd en 64-bitars long-typ" #: config/mips/mips.opt:258 msgid "Pass the address of the ra save location to _mcount in $12" -msgstr "Skicka adressen på ra-lagringsplatsen till _mcount i $12" +msgstr "Skicka adressen pÃ¥ ra-lagringsplatsen till _mcount i $12" #: config/mips/mips.opt:262 msgid "Don't optimize block moves" -msgstr "Optimera inte blockförflyttningar" +msgstr "Optimera inte blockförflyttningar" #: config/mips/mips.opt:266 msgid "Allow the use of MT instructions" -msgstr "Tillåt användning av MT-instruktioner" +msgstr "TillÃ¥t användning av MT-instruktioner" #: config/mips/mips.opt:270 msgid "Prevent the use of all floating-point operations" -msgstr "Förhindra användningen av alla flyttalsoperationer" +msgstr "Förhindra användningen av alla flyttalsoperationer" #: config/mips/mips.opt:274 msgid "Do not use a cache-flushing function before calling stack trampolines" -msgstr "Använd inte en cachetömmande funktion före anrop av stacktrampoliner" +msgstr "Använd inte en cachetömmande funktion före anrop av stacktrampoliner" #: config/mips/mips.opt:278 msgid "Do not use MDMX instructions" -msgstr "Använd inte MDMX-instruktioner" +msgstr "Använd inte MDMX-instruktioner" #: config/mips/mips.opt:282 msgid "Generate normal-mode code" -msgstr "Generera kod för normalläge" +msgstr "Generera kod för normalläge" #: config/mips/mips.opt:286 msgid "Do not use MIPS-3D instructions" -msgstr "Använd inte MIPS-3D-instruktioner" +msgstr "Använd inte MIPS-3D-instruktioner" #: config/mips/mips.opt:290 msgid "Use paired-single floating-point instructions" -msgstr "Använd parvisa enkla flyttalsinstruktioner" +msgstr "Använd parvisa enkla flyttalsinstruktioner" #: config/mips/mips.opt:294 msgid "-mr10k-cache-barrier=SETTING\tSpecify when r10k cache barriers should be inserted" -msgstr "-mr10k-cache-barrier=INSTÄLLNING\tAnge när r10k-cache-barriärer skall skjutas in" +msgstr "-mr10k-cache-barrier=INSTÄLLNING\tAnge när r10k-cache-barriärer skall skjutas in" #: config/mips/mips.opt:298 msgid "Valid arguments to -mr10k-cache-barrier=:" @@ -8204,59 +8204,59 @@ msgstr "Giltiga argument till -mr10k-cache-barrier=:" #: config/mips/mips.opt:311 msgid "Try to allow the linker to turn PIC calls into direct calls" -msgstr "Försök att tillåta länkaren att göra om PIC-anrop till direkta anrop" +msgstr "Försök att tillÃ¥ta länkaren att göra om PIC-anrop till direkta anrop" #: config/mips/mips.opt:315 msgid "When generating -mabicalls code, make the code suitable for use in shared libraries" -msgstr "Vid generering av -mabicalls-kod, gör så att koden passar för användning i delade bibliotek" +msgstr "Vid generering av -mabicalls-kod, gör sÃ¥ att koden passar för användning i delade bibliotek" #: config/mips/mips.opt:319 msgid "Restrict the use of hardware floating-point instructions to 32-bit operations" -msgstr "Begränsa användningen av flyttalsinstruktioner i hårdvara till 32-bitars operationer" +msgstr "Begränsa användningen av flyttalsinstruktioner i hÃ¥rdvara till 32-bitars operationer" #: config/mips/mips.opt:323 msgid "Use SmartMIPS instructions" -msgstr "Använd SmartMIPS-instruktioner" +msgstr "Använd SmartMIPS-instruktioner" #: config/mips/mips.opt:327 msgid "Prevent the use of all hardware floating-point instructions" -msgstr "Förhindra användningen av alla flyttalsinstruktioner i hårdvara" +msgstr "Förhindra användningen av alla flyttalsinstruktioner i hÃ¥rdvara" #: config/mips/mips.opt:331 msgid "Optimize lui/addiu address loads" -msgstr "Optimera adressinläsningar lui/addiu" +msgstr "Optimera adressinläsningar lui/addiu" #: config/mips/mips.opt:335 msgid "Assume all symbols have 32-bit values" -msgstr "Anta att alla symboler har 32-bitsvärden" +msgstr "Anta att alla symboler har 32-bitsvärden" #: config/mips/mips.opt:339 msgid "Use synci instruction to invalidate i-cache" -msgstr "Använd synci-instruktioner för att invalidera i-cachen" +msgstr "Använd synci-instruktioner för att invalidera i-cachen" #: config/mips/mips.opt:343 msgid "-mtune=PROCESSOR\tOptimize the output for PROCESSOR" -msgstr "-mtune=PROCESSOR\tOptimera utmatningen för PROCESSOR" +msgstr "-mtune=PROCESSOR\tOptimera utmatningen för PROCESSOR" #: config/mips/mips.opt:347 config/iq2000/iq2000.opt:74 msgid "Put uninitialized constants in ROM (needs -membedded-data)" -msgstr "Placera oinitierade konstanter i ROM (kräver -membedded-data)" +msgstr "Placera oinitierade konstanter i ROM (kräver -membedded-data)" #: config/mips/mips.opt:351 msgid "Perform VR4130-specific alignment optimizations" -msgstr "Utför VR4130-specifik justeringsoptimering" +msgstr "Utför VR4130-specifik justeringsoptimering" #: config/mips/mips.opt:355 msgid "Lift restrictions on GOT size" -msgstr "Lyft restriktioner på GOT-storlek" +msgstr "Lyft restriktioner pÃ¥ GOT-storlek" #: config/mips/mips-tables.opt:24 msgid "Known MIPS CPUs (for use with the -march= and -mtune= options):" -msgstr "Kända MIPS CPU:er (att användas med flaggorna -march= och -mtune=):" +msgstr "Kända MIPS CPU:er (att användas med flaggorna -march= och -mtune=):" #: config/mips/mips-tables.opt:28 msgid "Known MIPS ISA levels (for use with the -mips option):" -msgstr "Kända MIPS ISA-nivåer (att användas med flaggan -mips):" +msgstr "Kända MIPS ISA-nivÃ¥er (att användas med flaggan -mips):" #: config/fr30/fr30.opt:23 msgid "Assume small address space" @@ -8264,7 +8264,7 @@ msgstr "Anta liten adressrymd" #: config/vax/vax.opt:23 config/vax/vax.opt:27 msgid "Target DFLOAT double precision code" -msgstr "Sikta på DFLOAT-dubbelprecisionskod" +msgstr "Sikta pÃ¥ DFLOAT-dubbelprecisionskod" #: config/vax/vax.opt:31 config/vax/vax.opt:35 msgid "Generate GFLOAT double precision code" @@ -8272,47 +8272,47 @@ msgstr "Generera GFLOAT-dubbelprecisionskod" #: config/vax/vax.opt:39 msgid "Generate code for GNU assembler (gas)" -msgstr "Generera kod för GNU-assembler (gas)" +msgstr "Generera kod för GNU-assembler (gas)" #: config/vax/vax.opt:43 msgid "Generate code for UNIX assembler" -msgstr "Generera kod för UNIX-assembler" +msgstr "Generera kod för UNIX-assembler" #: config/vax/vax.opt:47 msgid "Use VAXC structure conventions" -msgstr "Använd VAXC:s konventioner för struct" +msgstr "Använd VAXC:s konventioner för struct" #: config/vax/vax.opt:51 msgid "Use new adddi3/subdi3 patterns" -msgstr "Använd nya adddi3/subdi3-mönster" +msgstr "Använd nya adddi3/subdi3-mönster" #: config/cris/linux.opt:27 msgid "Together with -fpic and -fPIC, do not use GOTPLT references" -msgstr "Tillsammans med -fpic och -fPIC, använd inte GOTPLT-referenser" +msgstr "Tillsammans med -fpic och -fPIC, använd inte GOTPLT-referenser" #: config/cris/cris.opt:45 msgid "Work around bug in multiplication instruction" -msgstr "Gå runt fel i multiplikationsinstruktion" +msgstr "GÃ¥ runt fel i multiplikationsinstruktion" #: config/cris/cris.opt:51 msgid "Compile for ETRAX 4 (CRIS v3)" -msgstr "Kompilera för ETRAX 4 (CRIS v3)" +msgstr "Kompilera för ETRAX 4 (CRIS v3)" #: config/cris/cris.opt:56 msgid "Compile for ETRAX 100 (CRIS v8)" -msgstr "Kompilera för ETRAX 100 (CRIS v8)" +msgstr "Kompilera för ETRAX 100 (CRIS v8)" #: config/cris/cris.opt:64 msgid "Emit verbose debug information in assembly code" -msgstr "Mata ut utförlig felsökningsinformation i assemblerkod" +msgstr "Mata ut utförlig felsökningsinformation i assemblerkod" #: config/cris/cris.opt:71 msgid "Do not use condition codes from normal instructions" -msgstr "Använd inte tillståndskoder från normala instruktioner" +msgstr "Använd inte tillstÃ¥ndskoder frÃ¥n normala instruktioner" #: config/cris/cris.opt:80 msgid "Do not emit addressing modes with side-effect assignment" -msgstr "Mata inte ut adresseringssätt med sidoeffekttilldelning" +msgstr "Mata inte ut adresseringssätt med sidoeffekttilldelning" #: config/cris/cris.opt:89 msgid "Do not tune stack alignment" @@ -8320,11 +8320,11 @@ msgstr "Trimma inte stackjustering" #: config/cris/cris.opt:98 msgid "Do not tune writable data alignment" -msgstr "Trimma inte justering för skrivbar data" +msgstr "Trimma inte justering för skrivbar data" #: config/cris/cris.opt:107 msgid "Do not tune code and read-only data alignment" -msgstr "Trimma inte justering för kod och endast läsbar data" +msgstr "Trimma inte justering för kod och endast läsbar data" #: config/cris/cris.opt:116 msgid "Align code and data to 32 bits" @@ -8340,23 +8340,23 @@ msgstr "Mata inte ut funktionsprolog eller -epilog" #: config/cris/cris.opt:149 msgid "Use the most feature-enabling options allowed by other options" -msgstr "Använd de flaggor bland övriga flaggor som slår på flest funktioner" +msgstr "Använd de flaggor bland övriga flaggor som slÃ¥r pÃ¥ flest funktioner" #: config/cris/cris.opt:158 msgid "Override -mbest-lib-options" -msgstr "Åsidosätt -mbest-lib-options" +msgstr "Ã…sidosätt -mbest-lib-options" #: config/cris/cris.opt:165 msgid "-march=ARCH\tGenerate code for the specified chip or CPU version" -msgstr "-march=ARK\tGenerera kod för det angivna chip:et eller CPU-versionen" +msgstr "-march=ARK\tGenerera kod för det angivna chip:et eller CPU-versionen" #: config/cris/cris.opt:169 msgid "-mtune=ARCH\tTune alignment for the specified chip or CPU version" -msgstr "-mtune=ARK\tTrimma justering för det angivna chip:et eller CPU-versionen" +msgstr "-mtune=ARK\tTrimma justering för det angivna chip:et eller CPU-versionen" #: config/cris/cris.opt:173 msgid "-mmax-stackframe=SIZE\tWarn when a stackframe is larger than the specified size" -msgstr "-mmax-stackframe=STORLEK\tVarna när en stackram är större än den angivna storleken" +msgstr "-mmax-stackframe=STORLEK\tVarna när en stackram är större än den angivna storleken" #: config/h8300/h8300.opt:23 msgid "Generate H8S code" @@ -8372,19 +8372,19 @@ msgstr "Generera H8S/2600-kod" #: config/h8300/h8300.opt:35 msgid "Make integers 32 bits wide" -msgstr "Gör heltal 32 bitar stora" +msgstr "Gör heltal 32 bitar stora" #: config/h8300/h8300.opt:42 msgid "Use registers for argument passing" -msgstr "Använd register för argumentskickning" +msgstr "Använd register för argumentskickning" #: config/h8300/h8300.opt:46 msgid "Consider access to byte sized memory slow" -msgstr "Betrakta åtkomst till bytestort minne som långsam" +msgstr "Betrakta Ã¥tkomst till bytestort minne som lÃ¥ngsam" #: config/h8300/h8300.opt:50 msgid "Enable linker relaxing" -msgstr "Aktivera länkaravslappning" +msgstr "Aktivera länkaravslappning" #: config/h8300/h8300.opt:54 msgid "Generate H8/300H code" @@ -8392,51 +8392,51 @@ msgstr "Generera H8/300H-kod" #: config/h8300/h8300.opt:58 msgid "Enable the normal mode" -msgstr "Aktivera normalt läge" +msgstr "Aktivera normalt läge" #: config/h8300/h8300.opt:62 msgid "Use H8/300 alignment rules" -msgstr "Använd H8/300-regler för justering" +msgstr "Använd H8/300-regler för justering" #: config/v850/v850.opt:29 msgid "Use registers r2 and r5" -msgstr "Använd registeren r2 och r5" +msgstr "Använd registeren r2 och r5" #: config/v850/v850.opt:33 msgid "Use 4 byte entries in switch tables" -msgstr "Använd 4-byteposter i hopptabeller" +msgstr "Använd 4-byteposter i hopptabeller" #: config/v850/v850.opt:37 msgid "Enable backend debugging" -msgstr "Aktivera bakändefelsökning" +msgstr "Aktivera bakändefelsökning" #: config/v850/v850.opt:41 msgid "Do not use the callt instruction" -msgstr "Använd inte callt-instruktionen" +msgstr "Använd inte callt-instruktionen" #: config/v850/v850.opt:45 msgid "Reuse r30 on a per function basis" -msgstr "Återanvänd r30 i varje funktion" +msgstr "Ã…teranvänd r30 i varje funktion" #: config/v850/v850.opt:49 msgid "Support Green Hills ABI" -msgstr "Stöd Green Hills ABI" +msgstr "Stöd Green Hills ABI" #: config/v850/v850.opt:53 msgid "Prohibit PC relative function calls" -msgstr "Förhindra PC-relativa funktionsanrop" +msgstr "Förhindra PC-relativa funktionsanrop" #: config/v850/v850.opt:57 msgid "Use stubs for function prologues" -msgstr "Använd stubbar för funktionsprologer" +msgstr "Använd stubbar för funktionsprologer" #: config/v850/v850.opt:61 msgid "Set the max size of data eligible for the SDA area" -msgstr "Ange den maximala storleken på data som är lämpliga för SDA-arean" +msgstr "Ange den maximala storleken pÃ¥ data som är lämpliga för SDA-arean" #: config/v850/v850.opt:68 msgid "Enable the use of the short load instructions" -msgstr "Möjliggör användning av de korta load-instruktionerna" +msgstr "Möjliggör användning av de korta load-instruktionerna" #: config/v850/v850.opt:72 msgid "Same as: -mep -mprolog-function" @@ -8444,7 +8444,7 @@ msgstr "Samma som: -mep -mprolog-function" #: config/v850/v850.opt:76 msgid "Set the max size of data eligible for the TDA area" -msgstr "Ange den maximala storleken på data som är lämpliga för TDA-arean" +msgstr "Ange den maximala storleken pÃ¥ data som är lämpliga för TDA-arean" #: config/v850/v850.opt:83 msgid "Do not enforce strict alignment" @@ -8452,119 +8452,119 @@ msgstr "Framtvinga inte strikt justering" #: config/v850/v850.opt:87 msgid "Put jump tables for switch statements into the .data section rather than the .code section" -msgstr "Lägg hopptabeller för switch-satser i .data-sektionen istället för .code-sektionen." +msgstr "Lägg hopptabeller för switch-satser i .data-sektionen istället för .code-sektionen." #: config/v850/v850.opt:94 msgid "Compile for the v850 processor" -msgstr "Kompilera för processorn v850" +msgstr "Kompilera för processorn v850" #: config/v850/v850.opt:98 msgid "Compile for the v850e processor" -msgstr "Kompilera för processorn v850e" +msgstr "Kompilera för processorn v850e" #: config/v850/v850.opt:102 msgid "Compile for the v850e1 processor" -msgstr "Kompilera för processorn v850e1" +msgstr "Kompilera för processorn v850e1" #: config/v850/v850.opt:106 msgid "Compile for the v850es variant of the v850e1" -msgstr "Kompilera för varianten v850es av v850el" +msgstr "Kompilera för varianten v850es av v850el" #: config/v850/v850.opt:110 msgid "Compile for the v850e2 processor" -msgstr "Kompilera för processorn v850e2" +msgstr "Kompilera för processorn v850e2" #: config/v850/v850.opt:114 msgid "Compile for the v850e2v3 processor" -msgstr "Kompilera för processorn v850e2v3" +msgstr "Kompilera för processorn v850e2v3" #: config/v850/v850.opt:118 msgid "Set the max size of data eligible for the ZDA area" -msgstr "Ange den maximala storleken på data som är lämpliga för ZDA-arean" +msgstr "Ange den maximala storleken pÃ¥ data som är lämpliga för ZDA-arean" #: config/mmix/mmix.opt:24 msgid "For intrinsics library: pass all parameters in registers" -msgstr "För inbyggt bibliotek: skicka alla parametrar i register" +msgstr "För inbyggt bibliotek: skicka alla parametrar i register" #: config/mmix/mmix.opt:28 msgid "Use register stack for parameters and return value" -msgstr "Använd registerstacken för parametrar och returvärde" +msgstr "Använd registerstacken för parametrar och returvärde" #: config/mmix/mmix.opt:32 msgid "Use call-clobbered registers for parameters and return value" -msgstr "Använd anropsöverskrivna register för parametrar och returvärde" +msgstr "Använd anropsöverskrivna register för parametrar och returvärde" #: config/mmix/mmix.opt:37 msgid "Use epsilon-respecting floating point compare instructions" -msgstr "Använd flyttalsjämförelseinstruktioner som respekterar epsilon" +msgstr "Använd flyttalsjämförelseinstruktioner som respekterar epsilon" #: config/mmix/mmix.opt:41 msgid "Use zero-extending memory loads, not sign-extending ones" -msgstr "Använd nollutfyllda minnesladdningar, inte teckenutfyllda" +msgstr "Använd nollutfyllda minnesladdningar, inte teckenutfyllda" #: config/mmix/mmix.opt:45 msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)" -msgstr "Generera divisionsresultat så att resten har samma tecken som täljaren (inte nämnaren)" +msgstr "Generera divisionsresultat sÃ¥ att resten har samma tecken som täljaren (inte nämnaren)" #: config/mmix/mmix.opt:49 msgid "Prepend global symbols with \":\" (for use with PREFIX)" -msgstr "Inled globala symboler med \":\" (för användning tillsammans med PREFIX)" +msgstr "Inled globala symboler med â€:†(för användning tillsammans med PREFIX)" #: config/mmix/mmix.opt:53 msgid "Do not provide a default start-address 0x100 of the program" -msgstr "Ge inte en standard startadress 0x100 för programmet" +msgstr "Ge inte en standard startadress 0x100 för programmet" #: config/mmix/mmix.opt:57 msgid "Link to emit program in ELF format (rather than mmo)" -msgstr "Länka för att skapa program i ELF-format (snarare än mmo)" +msgstr "Länka för att skapa program i ELF-format (snarare än mmo)" #: config/mmix/mmix.opt:61 msgid "Use P-mnemonics for branches statically predicted as taken" -msgstr "Använd P-mnemonics för grenar som statiskt förutsägs tas" +msgstr "Använd P-mnemonics för grenar som statiskt förutsägs tas" #: config/mmix/mmix.opt:65 msgid "Don't use P-mnemonics for branches" -msgstr "Använd inte P-mnemonics för grenar" +msgstr "Använd inte P-mnemonics för grenar" #: config/mmix/mmix.opt:79 msgid "Use addresses that allocate global registers" -msgstr "Använd adresser som allokerar globala register" +msgstr "Använd adresser som allokerar globala register" #: config/mmix/mmix.opt:83 msgid "Do not use addresses that allocate global registers" -msgstr "Använd inte adresser som allokerar globala register" +msgstr "Använd inte adresser som allokerar globala register" #: config/mmix/mmix.opt:87 msgid "Generate a single exit point for each function" -msgstr "Generera en enda utgångspunkt för varje funktion" +msgstr "Generera en enda utgÃ¥ngspunkt för varje funktion" #: config/mmix/mmix.opt:91 msgid "Do not generate a single exit point for each function" -msgstr "Generera inte en ensam utgångspunkt för varje funktion" +msgstr "Generera inte en ensam utgÃ¥ngspunkt för varje funktion" #: config/mmix/mmix.opt:95 msgid "Set start-address of the program" -msgstr "Ange startadressen för programmet" +msgstr "Ange startadressen för programmet" #: config/mmix/mmix.opt:99 msgid "Set start-address of data" -msgstr "Sätt startadress för data" +msgstr "Sätt startadress för data" #: config/iq2000/iq2000.opt:31 msgid "Specify CPU for code generation purposes" -msgstr "Ange CPU för kodgenereringssyften" +msgstr "Ange CPU för kodgenereringssyften" #: config/iq2000/iq2000.opt:47 msgid "Specify CPU for scheduling purposes" -msgstr "Ange CPU för schemaläggningssyften" +msgstr "Ange CPU för schemaläggningssyften" #: config/iq2000/iq2000.opt:51 msgid "Known IQ2000 CPUs (for use with the -mcpu= option):" -msgstr "Kända IQ2000 CPU:er (att användas med flaggan -mcpu=):" +msgstr "Kända IQ2000 CPU:er (att användas med flaggan -mcpu=):" #: config/iq2000/iq2000.opt:65 config/microblaze/microblaze.opt:80 msgid "Use GP relative sdata/sbss sections" -msgstr "Använd GP relativt sdata/sbss-sektioner" +msgstr "Använd GP relativt sdata/sbss-sektioner" #: config/iq2000/iq2000.opt:70 msgid "No default crt0.o" @@ -8572,101 +8572,101 @@ msgstr "Ingen standard-crt0.o" #: config/bfin/bfin.opt:48 msgid "Omit frame pointer for leaf functions" -msgstr "Utelämna rampekaren i lövfunktioner" +msgstr "Utelämna rampekaren i lövfunktioner" #: config/bfin/bfin.opt:52 msgid "Program is entirely located in low 64k of memory" -msgstr "Programmet ligger helt i låga 64 kB minne" +msgstr "Programmet ligger helt i lÃ¥ga 64 kB minne" #: config/bfin/bfin.opt:56 msgid "Work around a hardware anomaly by adding a number of NOPs before a" -msgstr "Gå runt en hårdvaruanomali genom att lägga till ett antal NOP:ar före en" +msgstr "GÃ¥ runt en hÃ¥rdvaruanomali genom att lägga till ett antal NOP:ar före en" #: config/bfin/bfin.opt:61 msgid "Avoid speculative loads to work around a hardware anomaly." -msgstr "Undvik spekulativa lastningar för att gå runt en hårdvaruanomali." +msgstr "Undvik spekulativa lastningar för att gÃ¥ runt en hÃ¥rdvaruanomali." #: config/bfin/bfin.opt:65 msgid "Enabled ID based shared library" msgstr "Aktivera ID-baserat delat bibliotek" # Avhugget p.g.a. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34352 -# Hela meddelandet är översatt +# Hela meddelandet är översatt #: config/bfin/bfin.opt:69 msgid "Generate code that won't be linked against any other ID shared libraries," -msgstr "Generera kod som inte kommer länkas mot några andra delade ID-bibliotek men kan användas av ett delat bibliotek." +msgstr "Generera kod som inte kommer länkas mot nÃ¥gra andra delade ID-bibliotek men kan användas av ett delat bibliotek." #: config/bfin/bfin.opt:86 msgid "Link with the fast floating-point library" -msgstr "Länka med de snabba flyttalsbiblioteken" +msgstr "Länka med de snabba flyttalsbiblioteken" #: config/bfin/bfin.opt:98 msgid "Do stack checking using bounds in L1 scratch memory" -msgstr "Gör stackkontroll med gränser i L1:s fria minne" +msgstr "Gör stackkontroll med gränser i L1:s fria minne" #: config/bfin/bfin.opt:102 msgid "Enable multicore support" -msgstr "Aktivera stöd för flera kärnor" +msgstr "Aktivera stöd för flera kärnor" #: config/bfin/bfin.opt:106 msgid "Build for Core A" -msgstr "Bygg för kärna A" +msgstr "Bygg för kärna A" #: config/bfin/bfin.opt:110 msgid "Build for Core B" -msgstr "Bygg för kärna B" +msgstr "Bygg för kärna B" #: config/bfin/bfin.opt:114 msgid "Build for SDRAM" -msgstr "Bygg för SDRAM" +msgstr "Bygg för SDRAM" #: config/bfin/bfin.opt:118 msgid "Assume ICPLBs are enabled at runtime." -msgstr "Anta ICPLBs är aktiverade vid körtillfället." +msgstr "Anta ICPLBs är aktiverade vid körtillfället." #: config/epiphany/epiphany.opt:24 msgid "Don't use any of r32..r63." -msgstr "Använd inte någon av r32..r63." +msgstr "Använd inte nÃ¥gon av r32..r63." #: config/epiphany/epiphany.opt:28 msgid "preferentially allocate registers that allow short instruction generation." -msgstr "allokera företrädesvis register som tillåter generering av korta instruktioner" +msgstr "allokera företrädesvis register som tillÃ¥ter generering av korta instruktioner" #: config/epiphany/epiphany.opt:32 msgid "Set branch cost" -msgstr "Sätt grenkostnad" +msgstr "Sätt grenkostnad" #: config/epiphany/epiphany.opt:36 msgid "enable conditional move instruction usage." -msgstr "aktivera användning av villkorliga flyttinstruktioner." +msgstr "aktivera användning av villkorliga flyttinstruktioner." #: config/epiphany/epiphany.opt:40 msgid "set number of nops to emit before each insn pattern" -msgstr "sätt antalet nop:ar att mata ut före varje instruktionsmönster" +msgstr "sätt antalet nop:ar att mata ut före varje instruktionsmönster" #: config/epiphany/epiphany.opt:52 msgid "Use software floating point comparisons" -msgstr "Använd flyttalsjämförelser i programvara" +msgstr "Använd flyttalsjämförelser i programvara" #: config/epiphany/epiphany.opt:56 msgid "Enable split of 32 bit immediate loads into low / high part" -msgstr "Aktivera delning av 32-bitars omedelbara laddningar i låg/hög del" +msgstr "Aktivera delning av 32-bitars omedelbara laddningar i lÃ¥g/hög del" #: config/epiphany/epiphany.opt:60 msgid "Enable use of POST_INC / POST_DEC" -msgstr "Aktivera användning av POST_INC/POST_DEC" +msgstr "Aktivera användning av POST_INC/POST_DEC" #: config/epiphany/epiphany.opt:64 msgid "Enable use of POST_MODIFY" -msgstr "Aktivera användning av POST_MODIFY" +msgstr "Aktivera användning av POST_MODIFY" #: config/epiphany/epiphany.opt:68 msgid "Set number of bytes on the stack preallocated for use by the callee." -msgstr "Sätt antalet byt på stacken som förallokeras att användas av den anropade." +msgstr "Sätt antalet byt pÃ¥ stacken som förallokeras att användas av den anropade." #: config/epiphany/epiphany.opt:72 msgid "Assume round to nearest is selected for purposes of scheduling." -msgstr "Anta avrundning till närmaste är valt i schemaläggningssyfte." +msgstr "Anta avrundning till närmaste är valt i schemaläggningssyfte." #: config/epiphany/epiphany.opt:76 msgid "Generate call insns as indirect calls" @@ -8682,47 +8682,47 @@ msgstr "Anta att etiketter och symboler kan adresseras med 16-bitars absoluta ad #: config/epiphany/epiphany.opt:108 msgid "Vectorize for double-word operations." -msgstr "Vektorisera för dubbelordsoperationer." +msgstr "Vektorisera för dubbelordsoperationer." #: config/epiphany/epiphany.opt:124 msgid "Split unaligned 8 byte vector moves before post-modify address generation." -msgstr "Dela ojusterade 8-bytes vektorerförflyttningar före adressgenerering efter ändring." +msgstr "Dela ojusterade 8-bytes vektorerförflyttningar före adressgenerering efter ändring." #: config/epiphany/epiphany.opt:128 msgid "Set register to hold -1." -msgstr "Sätt register att innehålla -1." +msgstr "Sätt register att innehÃ¥lla -1." #: config/picochip/picochip.opt:23 msgid "Specify which type of AE to target. This option sets the mul-type and byte-access." -msgstr "Ange vilken typ av AE att ha som mål. Denna flagga sätter mul-typen och byte-åtkomst." +msgstr "Ange vilken typ av AE att ha som mÃ¥l. Denna flagga sätter mul-typen och byte-Ã¥tkomst." #: config/picochip/picochip.opt:27 msgid "Specify which type of multiplication to use. Can be mem, mac or none." -msgstr "Ange vilken typ av multiplikation att anvnända. Kan vara mem, mac eller none." +msgstr "Ange vilken typ av multiplikation att anvnända. Kan vara mem, mac eller none." #: config/picochip/picochip.opt:31 msgid "Specify whether the byte access instructions should be used. Enabled by default." -msgstr "Ange om instruktioner för byteåtkomst skall användas. Aktiverat som standard." +msgstr "Ange om instruktioner för byteÃ¥tkomst skall användas. Aktiverat som standard." #: config/picochip/picochip.opt:35 msgid "Enable debug output to be generated." -msgstr "Aktivera generering av felsökningsutdata." +msgstr "Aktivera generering av felsökningsutdata." #: config/picochip/picochip.opt:39 msgid "Allow a symbol value to be used as an immediate value in an instruction." -msgstr "Tillåt ett symbolvärde att användas som ett omedelbart värde i en instruktion." +msgstr "TillÃ¥t ett symbolvärde att användas som ett omedelbart värde i en instruktion." #: config/picochip/picochip.opt:43 msgid "Generate warnings when inefficient code is known to be generated." -msgstr "Generera varningar när ineffektiv kod med säkerhet genereras." +msgstr "Generera varningar när ineffektiv kod med säkerhet genereras." #: config/vxworks.opt:36 msgid "Assume the VxWorks RTP environment" -msgstr "Anta miljön VxWorks RTP" +msgstr "Anta miljön VxWorks RTP" #: config/vxworks.opt:43 msgid "Assume the VxWorks vThreads environment" -msgstr "Anta miljön VxWorks vThreads" +msgstr "Anta miljön VxWorks vThreads" #: config/darwin.opt:53 c-family/c.opt:71 c-family/c.opt:74 c-family/c.opt:77 #: c-family/c.opt:80 c-family/c.opt:179 c-family/c.opt:182 c-family/c.opt:220 @@ -8734,99 +8734,99 @@ msgstr "filnamn saknas efter %qs" #: config/darwin.opt:114 msgid "Generate compile-time CFString objects" -msgstr "Generera CFString-objekt vid kompileringstillfället" +msgstr "Generera CFString-objekt vid kompileringstillfället" #: config/darwin.opt:208 msgid "Warn if constant CFString objects contain non-portable characters" -msgstr "Varna om konstanta CFString-objekt innehåller icke-portabla tecken" +msgstr "Varna om konstanta CFString-objekt innehÃ¥ller icke-portabla tecken" #: config/darwin.opt:213 msgid "Generate AT&T-style stubs for Mach-O" -msgstr "Generera stubbar i AT&T-stil för Mach-O" +msgstr "Generera stubbar i AT&T-stil för Mach-O" #: config/darwin.opt:217 msgid "Generate code suitable for executables (NOT shared libs)" -msgstr "Generera kod lämplig för körbara program (INTE delade bibliotek)" +msgstr "Generera kod lämplig för körbara program (INTE delade bibliotek)" #: config/darwin.opt:221 msgid "Generate code suitable for fast turn around debugging" -msgstr "Generera kod lämplig för korta felsökningscykler" +msgstr "Generera kod lämplig för korta felsökningscykler" #: config/darwin.opt:230 msgid "The earliest MacOS X version on which this program will run" -msgstr "Den tidigaste MacOS X-versionen som detta program kommer köra på" +msgstr "Den tidigaste MacOS X-versionen som detta program kommer köra pÃ¥" #: config/darwin.opt:234 msgid "Set sizeof(bool) to 1" -msgstr "Sätt sizeof(bool) till 1" +msgstr "Sätt sizeof(bool) till 1" #: config/darwin.opt:238 msgid "Generate code for darwin loadable kernel extensions" -msgstr "Generera kod för darwin laddbara kärnutvidgningar" +msgstr "Generera kod för darwin laddbara kärnutvidgningar" #: config/darwin.opt:242 msgid "Generate code for the kernel or loadable kernel extensions" -msgstr "Generera kod för kärnan eller laddbara kärnutvidgningar" +msgstr "Generera kod för kärnan eller laddbara kärnutvidgningar" #: config/darwin.opt:246 msgid "-iframework <dir>\tAdd <dir> to the end of the system framework include path" -msgstr "-iframework <kat>\tLägg till <kat> till slutet av systemramverkets inkluderingssökväg" +msgstr "-iframework <kat>\tLägg till <kat> till slutet av systemramverkets inkluderingssökväg" #: config/lynx.opt:23 msgid "Support legacy multi-threading" -msgstr "Stöd gammaldags multitrådning" +msgstr "Stöd gammaldags multitrÃ¥dning" #: config/lynx.opt:27 msgid "Use shared libraries" -msgstr "Använd delade bibliotek" +msgstr "Använd delade bibliotek" #: config/lynx.opt:31 msgid "Support multi-threading" -msgstr "Stöd multitrådning" +msgstr "Stöd multitrÃ¥dning" #: config/score/score.opt:31 msgid "Disable bcnz instruction" -msgstr "Använd inte instruktionen bcnz" +msgstr "Använd inte instruktionen bcnz" #: config/score/score.opt:35 msgid "Enable unaligned load/store instruction" -msgstr "Använd ojusterade load/store-instruktioner" +msgstr "Använd ojusterade load/store-instruktioner" #: config/score/score.opt:39 msgid "Support SCORE 7 ISA" -msgstr "Stöd SCORE 7 ISA" +msgstr "Stöd SCORE 7 ISA" #: config/score/score.opt:43 msgid "Support SCORE 7D ISA" -msgstr "Stöd SCORE 7D ISA" +msgstr "Stöd SCORE 7D ISA" #: config/score/score.opt:51 msgid "Known SCORE architectures (for use with the -march= option):" -msgstr "Kända SCORE-arkitekturer (att användas med flaggan -march=):" +msgstr "Kända SCORE-arkitekturer (att användas med flaggan -march=):" #: config/linux.opt:24 msgid "Use Bionic C library" -msgstr "Använd C-biblioteket Bionic" +msgstr "Använd C-biblioteket Bionic" #: config/linux.opt:28 msgid "Use GNU C library" -msgstr "Använd GNU C-bibliotek" +msgstr "Använd GNU C-bibliotek" #: config/linux.opt:32 msgid "Use uClibc C library" -msgstr "Använd C-biblioteket uClibc" +msgstr "Använd C-biblioteket uClibc" #: config/mep/mep.opt:23 msgid "Enable absolute difference instructions" -msgstr "Använd instruktioner för absoluta skillnad" +msgstr "Använd instruktioner för absoluta skillnad" #: config/mep/mep.opt:27 msgid "Enable all optional instructions" -msgstr "Använd alla valbara instruktioner" +msgstr "Använd alla valbara instruktioner" #: config/mep/mep.opt:31 msgid "Enable average instructions" -msgstr "Använd genomsnittsinstruktioner" +msgstr "Använd genomsnittsinstruktioner" #: config/mep/mep.opt:35 msgid "Variables this size and smaller go in the based section. (default 0)" @@ -8834,15 +8834,15 @@ msgstr "Variabler av denna storlek och mindra placeras i based-sektionen. (stan #: config/mep/mep.opt:39 msgid "Enable bit manipulation instructions" -msgstr "Använd bithanteringsinstruktioner" +msgstr "Använd bithanteringsinstruktioner" #: config/mep/mep.opt:43 msgid "Section to put all const variables in (tiny, near, far) (no default)" -msgstr "Sektion att lägga alla const-variabler i (tiny, near, far) (ingen standard)" +msgstr "Sektion att lägga alla const-variabler i (tiny, near, far) (ingen standard)" #: config/mep/mep.opt:47 msgid "Enable clip instructions" -msgstr "Använd clip-instruktionener" +msgstr "Använd clip-instruktionener" #: config/mep/mep.opt:51 msgid "Configuration name" @@ -8850,19 +8850,19 @@ msgstr "Konfigurationsnamn" #: config/mep/mep.opt:55 msgid "Enable MeP Coprocessor" -msgstr "Använd MeP-hjälpprocessor" +msgstr "Använd MeP-hjälpprocessor" #: config/mep/mep.opt:59 msgid "Enable MeP Coprocessor with 32-bit registers" -msgstr "Använd MeP-koprocessor med 32-bitars register" +msgstr "Använd MeP-koprocessor med 32-bitars register" #: config/mep/mep.opt:63 msgid "Enable MeP Coprocessor with 64-bit registers" -msgstr "Använd MeP-koprocessor med 64-bitars register" +msgstr "Använd MeP-koprocessor med 64-bitars register" #: config/mep/mep.opt:67 msgid "Enable IVC2 scheduling" -msgstr "Använd IVC2-schemaläggning" +msgstr "Använd IVC2-schemaläggning" #: config/mep/mep.opt:71 msgid "Const variables default to the near section" @@ -8870,19 +8870,19 @@ msgstr "Const-variabler till near-sektionen som standard" #: config/mep/mep.opt:78 msgid "Enable 32-bit divide instructions" -msgstr "Använd 32-bitars divisionsinstruktioner" +msgstr "Använd 32-bitars divisionsinstruktioner" #: config/mep/mep.opt:93 msgid "__io vars are volatile by default" -msgstr "__io-variabler är volatila som standard" +msgstr "__io-variabler är volatila som standard" #: config/mep/mep.opt:97 msgid "All variables default to the far section" -msgstr "Alla variabler läggs som standard i far-sektionen" +msgstr "Alla variabler läggs som standard i far-sektionen" #: config/mep/mep.opt:101 msgid "Enable leading zero instructions" -msgstr "Använd instruktioner för inledande nollor" +msgstr "Använd instruktioner för inledande nollor" #: config/mep/mep.opt:108 msgid "All variables default to the near section" @@ -8890,19 +8890,19 @@ msgstr "Alla variabler till near-sektionen som standard" #: config/mep/mep.opt:112 msgid "Enable min/max instructions" -msgstr "Använd min/max-instruktioner" +msgstr "Använd min/max-instruktioner" #: config/mep/mep.opt:116 msgid "Enable 32-bit multiply instructions" -msgstr "Använd 32-bitars multiplikationsinstruktioner" +msgstr "Använd 32-bitars multiplikationsinstruktioner" #: config/mep/mep.opt:120 msgid "Disable all optional instructions" -msgstr "Använd inte några valbara instruktionener" +msgstr "Använd inte nÃ¥gra valbara instruktionener" #: config/mep/mep.opt:127 msgid "Allow gcc to use the repeat/erepeat instructions" -msgstr "Tillåt gcc att använd repeat/erepeat-instruktionerna" +msgstr "TillÃ¥t gcc att använd repeat/erepeat-instruktionerna" #: config/mep/mep.opt:131 msgid "All variables default to the tiny section" @@ -8910,15 +8910,15 @@ msgstr "Alla variabler till tiny-sektionen som standard" #: config/mep/mep.opt:135 msgid "Enable saturation instructions" -msgstr "Använd mättnads-instruktioner" +msgstr "Använd mättnads-instruktioner" #: config/mep/mep.opt:139 msgid "Use sdram version of runtime" -msgstr "Använd sdram-version av körtidskod" +msgstr "Använd sdram-version av körtidskod" #: config/mep/mep.opt:147 msgid "Use simulator runtime without vectors" -msgstr "Använd simulatorkörtider utan vektorer" +msgstr "Använd simulatorkörtider utan vektorer" #: config/mep/mep.opt:151 msgid "All functions default to the far section" @@ -8926,7 +8926,7 @@ msgstr "Alla funktioner till far-sektion som standard" #: config/mep/mep.opt:155 msgid "Variables this size and smaller go in the tiny section. (default 4)" -msgstr "Variabler av denna storlek och mindre läggs i tiny-sektionen. (standard 4)" +msgstr "Variabler av denna storlek och mindre läggs i tiny-sektionen. (standard 4)" #: config/vms/vms.opt:24 msgid "Malloc data into P2 space" @@ -8934,7 +8934,7 @@ msgstr "Malloc-data till P2-utrymmet" #: config/vms/vms.opt:28 msgid "Set name of main routine for the debugger" -msgstr "Ange namnet på huvudrutinen för felsökaren" +msgstr "Ange namnet pÃ¥ huvudrutinen för felsökaren" #: config/rx/rx.opt:29 msgid "Store doubles in 64 bits." @@ -8942,19 +8942,19 @@ msgstr "Lagrar dubbla i 64 bitar." #: config/rx/rx.opt:33 msgid "Stores doubles in 32 bits. This is the default." -msgstr "Lagrar dubbla i 32 bitar. Detta är standard." +msgstr "Lagrar dubbla i 32 bitar. Detta är standard." #: config/rx/rx.opt:37 msgid "Disable the use of RX FPU instructions. " -msgstr "Tillåt inte användningen av RX FPU-instruktionerna. " +msgstr "TillÃ¥t inte användningen av RX FPU-instruktionerna. " #: config/rx/rx.opt:44 msgid "Enable the use of RX FPU instructions. This is the default." -msgstr "Möjliggör användning av RX FPU-instruktionerna. Detta är standard." +msgstr "Möjliggör användning av RX FPU-instruktionerna. Detta är standard." #: config/rx/rx.opt:50 msgid "Specify the target RX cpu type." -msgstr "Ange mål-RX-cpu-typen" +msgstr "Ange mÃ¥l-RX-cpu-typen" #: config/rx/rx.opt:68 msgid "Data is stored in big-endian format." @@ -8962,166 +8962,166 @@ msgstr "Data lagras med formatet rak byteordning." #: config/rx/rx.opt:72 msgid "Data is stored in little-endian format. (Default)." -msgstr "Data lagras i formatet omvänd byteordning. (Standard)." +msgstr "Data lagras i formatet omvänd byteordning. (Standard)." #: config/rx/rx.opt:78 msgid "Maximum size of global and static variables which can be placed into the small data area." -msgstr "Maximal storlek på globala och statiska variabler som kan placeras i den lilla dataarean." +msgstr "Maximal storlek pÃ¥ globala och statiska variabler som kan placeras i den lilla dataarean." #: config/rx/rx.opt:90 msgid "Generate assembler output that is compatible with the Renesas AS100 assembler. This may restrict some of the compiler's capabilities. The default is to generate GAS compatable syntax." -msgstr "Genereara assemblerutdatat som är kompatibel med Renesas AS100-assembler. Detta kan begränsa några av kompilatorns egenskaper. Standard är att generera GAS-kopatibel sysntax." +msgstr "Genereara assemblerutdatat som är kompatibel med Renesas AS100-assembler. Detta kan begränsa nÃ¥gra av kompilatorns egenskaper. Standard är att generera GAS-kopatibel sysntax." #: config/rx/rx.opt:96 msgid "Enable linker relaxation." -msgstr "Aktivera länkaravslappningar." +msgstr "Aktivera länkaravslappningar." #: config/rx/rx.opt:102 msgid "Maximum size in bytes of constant values allowed as operands." -msgstr "Maximal storlek i byta på konstanta värden som tillåts som operander." +msgstr "Maximal storlek i byta pÃ¥ konstanta värden som tillÃ¥ts som operander." #: config/rx/rx.opt:108 msgid "Specifies the number of registers to reserve for interrupt handlers." -msgstr "Anger antalet register som skall reserveras för avbrottshanterare." +msgstr "Anger antalet register som skall reserveras för avbrottshanterare." #: config/rx/rx.opt:114 msgid "Specifies whether interrupt functions should save and restore the accumulator register." -msgstr "Anger om avbrottsfunktioner skall spara och återställa ackumulatorregistret." +msgstr "Anger om avbrottsfunktioner skall spara och Ã¥terställa ackumulatorregistret." #: config/rx/rx.opt:120 msgid "Enables Position-Independent-Data (PID) mode." -msgstr "Aktivera läget för positionsoberoende data (PID)." +msgstr "Aktivera läget för positionsoberoende data (PID)." #: config/lm32/lm32.opt:24 msgid "Enable multiply instructions" -msgstr "Använd multiplikationsinstruktioner" +msgstr "Använd multiplikationsinstruktioner" #: config/lm32/lm32.opt:28 msgid "Enable divide and modulus instructions" -msgstr "Använd divisions- och modulusinstruktioner" +msgstr "Använd divisions- och modulusinstruktioner" #: config/lm32/lm32.opt:32 msgid "Enable barrel shift instructions" -msgstr "Använd barrel-shift-instruktioner" +msgstr "Använd barrel-shift-instruktioner" #: config/lm32/lm32.opt:36 msgid "Enable sign extend instructions" -msgstr "Aktivera teckenutökningsinstruktioner" +msgstr "Aktivera teckenutökningsinstruktioner" #: config/lm32/lm32.opt:40 msgid "Enable user-defined instructions" -msgstr "Använd användardefinierade instruktioner" +msgstr "Använd användardefinierade instruktioner" #: config/microblaze/microblaze.opt:40 msgid "Use software emulation for floating point (default)" -msgstr "Använd programvaruemulering för lyttal (standard)" +msgstr "Använd programvaruemulering för lyttal (standard)" #: config/microblaze/microblaze.opt:44 msgid "Use hardware floating point instructions" -msgstr "Använd flyttalsinstruktioner i hårdvara" +msgstr "Använd flyttalsinstruktioner i hÃ¥rdvara" #: config/microblaze/microblaze.opt:48 msgid "Use table lookup optimization for small signed integer divisions" -msgstr "Aktivera tabelluppslagningsoptimeringar för divisioner med små heltal med tecken" +msgstr "Aktivera tabelluppslagningsoptimeringar för divisioner med smÃ¥ heltal med tecken" #: config/microblaze/microblaze.opt:52 msgid "-mcpu=PROCESSOR\t\tUse features of and schedule code for given CPU" -msgstr "-mcpu=PROCESSOR\t\tAnvänd funktioner i och schemalägg kod för angiven CPU" +msgstr "-mcpu=PROCESSOR\t\tAnvänd funktioner i och schemalägg kod för angiven CPU" #: config/microblaze/microblaze.opt:56 msgid "Don't optimize block moves, use memcpy" -msgstr "Optimera inte blockförflyttningar, använd memcpy" +msgstr "Optimera inte blockförflyttningar, använd memcpy" #: config/microblaze/microblaze.opt:60 msgid "Use the soft multiply emulation (default)" -msgstr "Använd programvaruemulering av multiplikation (standard)" +msgstr "Använd programvaruemulering av multiplikation (standard)" #: config/microblaze/microblaze.opt:64 msgid "Use the software emulation for divides (default)" -msgstr "Använd programvaruemulering av division (standard)" +msgstr "Använd programvaruemulering av division (standard)" #: config/microblaze/microblaze.opt:68 msgid "Use the hardware barrel shifter instead of emulation" -msgstr "Använd tunnskiftaren i hårdvara istället för emulering" +msgstr "Använd tunnskiftaren i hÃ¥rdvara istället för emulering" #: config/microblaze/microblaze.opt:72 msgid "Use pattern compare instructions" -msgstr "Använd mönsterjämförelseinstruktioner" +msgstr "Använd mönsterjämförelseinstruktioner" #: config/microblaze/microblaze.opt:75 #, c-format msgid "%qs is deprecated; use -fstack-check" -msgstr "%qs bör undvikas, använd -fstack-check" +msgstr "%qs bör undvikas, använd -fstack-check" #: config/microblaze/microblaze.opt:76 msgid "Check for stack overflow at runtime" -msgstr "Kontrollera stackspill vid körtillfället" +msgstr "Kontrollera stackspill vid körtillfället" #: config/microblaze/microblaze.opt:83 #, c-format msgid "%qs is deprecated; use -fno-zero-initialized-in-bss" -msgstr "%qs bör undvikas, använd -fno-zero-initialized-in-bss" +msgstr "%qs bör undvikas, använd -fno-zero-initialized-in-bss" #: config/microblaze/microblaze.opt:84 msgid "Clear the BSS to zero and place zero initialized in BSS" -msgstr "Nollställ BSS och placera nollinitierade i BSS" +msgstr "Nollställ BSS och placera nollinitierade i BSS" #: config/microblaze/microblaze.opt:88 msgid "Use multiply high instructions for high part of 32x32 multiply" -msgstr "Använd högmultiplikationsinstruktioner för den höga delen av 32·32-multiplikationer" +msgstr "Använd högmultiplikationsinstruktioner för den höga delen av 32·32-multiplikationer" #: config/microblaze/microblaze.opt:92 msgid "Use hardware floating point conversion instructions" -msgstr "Använd flyttalskonverteringsinstruktioner i hårdvara" +msgstr "Använd flyttalskonverteringsinstruktioner i hÃ¥rdvara" #: config/microblaze/microblaze.opt:96 msgid "Use hardware floating point square root instruction" -msgstr "Använd flyttalsinstruktion för kvadratrot i hårdvara" +msgstr "Använd flyttalsinstruktion för kvadratrot i hÃ¥rdvara" -# Den ofärdiga beskrivningen är felrapporterad: +# Den ofärdiga beskrivningen är felrapporterad: # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47105 #: config/microblaze/microblaze.opt:100 msgid "Description for mxl-mode-executable" -msgstr "Beskrivning för mxl-mode-executable" +msgstr "Beskrivning för mxl-mode-executable" -# Den ofärdiga beskrivningen är felrapporterad: +# Den ofärdiga beskrivningen är felrapporterad: # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47105 #: config/microblaze/microblaze.opt:104 msgid "Description for mxl-mode-xmdstub" -msgstr "Beskrivning för mxl-mode-xmdstub" +msgstr "Beskrivning för mxl-mode-xmdstub" -# Den ofärdiga beskrivningen är felrapporterad: +# Den ofärdiga beskrivningen är felrapporterad: # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47105 #: config/microblaze/microblaze.opt:108 msgid "Description for mxl-mode-bootstrap" -msgstr "Beskrivning för mxl-mode-bootstrap" +msgstr "Beskrivning för mxl-mode-bootstrap" -# Den ofärdiga beskrivningen är felrapporterad: +# Den ofärdiga beskrivningen är felrapporterad: # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47105 #: config/microblaze/microblaze.opt:112 msgid "Description for mxl-mode-novectors" -msgstr "Beskrivning för mxl-mode-novectors" +msgstr "Beskrivning för mxl-mode-novectors" #: config/linux-android.opt:23 msgid "Generate code for the Android platform." -msgstr "Generera kod för plattformen Android." +msgstr "Generera kod för plattformen Android." #: config/g.opt:28 msgid "-G<number>\tPut global and static data smaller than <number> bytes into a special section (on some targets)" -msgstr "-G<antal>\tPlacera globala and statiska data mindre än <antal> byte i en speciell sektion (vissa arkitekturer)" +msgstr "-G<antal>\tPlacera globala and statiska data mindre än <antal> byte i en speciell sektion (vissa arkitekturer)" #: config/sol2.opt:32 msgid "Pass -z text to linker" -msgstr "Skicka -z text till länkaren" +msgstr "Skicka -z text till länkaren" #: config/fused-madd.opt:23 msgid "%<-mfused-madd%> is deprecated; use %<-ffp-contract=%> instead" -msgstr "%<-mfused-madd%> bör undvikas, använd %<-ffp-contract=%> istället" +msgstr "%<-mfused-madd%> bör undvikas, använd %<-ffp-contract=%> istället" #: c-family/c.opt:44 c-family/c.opt:47 c-family/c.opt:185 #, c-format msgid "assertion missing after %qs" -msgstr "försäkran saknas efter %qs" +msgstr "försäkran saknas efter %qs" #: c-family/c.opt:56 c-family/c.opt:59 c-family/c.opt:167 c-family/c.opt:170 #: c-family/c.opt:197 c-family/c.opt:256 @@ -9134,11 +9134,11 @@ msgstr "makronamn saknas efter %qs" #: c-family/c.opt:1141 c-family/c.opt:1145 c-family/c.opt:1149 #, c-format msgid "missing path after %qs" -msgstr "sökväg saknas efter %qs" +msgstr "sökväg saknas efter %qs" #: c-family/c.opt:186 msgid "-A<question>=<answer>\tAssert the <answer> to <question>. Putting '-' before <question> disables the <answer> to <question>" -msgstr "-A<fråga>=<svar>\tIntyga <svar> på <fråga>. Om \"-\" sätts före <fråga> avaktiveras <svar>:et till <fråga>:n" +msgstr "-A<frÃ¥ga>=<svar>\tIntyga <svar> pÃ¥ <frÃ¥ga>. Om â€-†sätts före <frÃ¥ga> avaktiveras <svar>:et till <frÃ¥ga>:n" #: c-family/c.opt:190 msgid "Do not discard comments" @@ -9146,23 +9146,23 @@ msgstr "Kasta inte kommentarer" #: c-family/c.opt:194 msgid "Do not discard comments in macro expansions" -msgstr "Släng inte kommentarer vid makroexpansioner" +msgstr "Släng inte kommentarer vid makroexpansioner" #: c-family/c.opt:198 msgid "-D<macro>[=<val>]\tDefine a <macro> with <val> as its value. If just <macro> is given, <val> is taken to be 1" -msgstr "-D<makro>[=<värde>]\tDefiniera ett <makro> med <värde> som sitt värde. Om bara <makro> anges sätts <värde> till 1" +msgstr "-D<makro>[=<värde>]\tDefiniera ett <makro> med <värde> som sitt värde. Om bara <makro> anges sätts <värde> till 1" #: c-family/c.opt:205 msgid "-F <dir>\tAdd <dir> to the end of the main framework include path" -msgstr "-F <kat>\tLägg till <kat> till slutet av huvudramverkets inkluderingssökväg" +msgstr "-F <kat>\tLägg till <kat> till slutet av huvudramverkets inkluderingssökväg" #: c-family/c.opt:209 msgid "Print the name of header files as they are used" -msgstr "Skriv ut namnet på huvudfiler allteftersom de används" +msgstr "Skriv ut namnet pÃ¥ huvudfiler allteftersom de används" #: c-family/c.opt:213 msgid "-I <dir>\tAdd <dir> to the end of the main include path" -msgstr "-I <kat>\tLägg till <kat> till slutet av huvudsökvägen" +msgstr "-I <kat>\tLägg till <kat> till slutet av huvudsökvägen" #: c-family/c.opt:217 msgid "Generate make dependencies" @@ -9190,20 +9190,20 @@ msgstr "Som -MD men ignorera systemhuvudfiler" #: c-family/c.opt:241 msgid "Generate phony targets for all headers" -msgstr "Generera låtsasmål för alla huvuden" +msgstr "Generera lÃ¥tsasmÃ¥l för alla huvuden" #: c-family/c.opt:244 c-family/c.opt:248 #, c-format msgid "missing makefile target after %qs" -msgstr "makefile-mål saknar efter %qs" +msgstr "makefile-mÃ¥l saknar efter %qs" #: c-family/c.opt:245 msgid "-MQ <target>\tAdd a MAKE-quoted target" -msgstr "-MQ <mål>\tLägg till ett MAKE-citerat mål" +msgstr "-MQ <mÃ¥l>\tLägg till ett MAKE-citerat mÃ¥l" #: c-family/c.opt:249 msgid "-MT <target>\tAdd an unquoted target" -msgstr "-MT <mål>\tLägg till ett ociterat mål" +msgstr "-MT <mÃ¥l>\tLägg till ett ociterat mÃ¥l" #: c-family/c.opt:253 msgid "Do not generate #line directives" @@ -9215,287 +9215,287 @@ msgstr "-U<makro>\tAvdefiniera <makro>" #: c-family/c.opt:261 msgid "Warn about things that will change when compiling with an ABI-compliant compiler" -msgstr "Varna för saker som skulle ändras vid kompilering med en kompilator som följer ABI" +msgstr "Varna för saker som skulle ändras vid kompilering med en kompilator som följer ABI" #: c-family/c.opt:268 msgid "Warn about suspicious uses of memory addresses" -msgstr "Varna för misstänkt användning av minnesadresser" +msgstr "Varna för misstänkt användning av minnesadresser" #: c-family/c.opt:276 msgid "Warn whenever an Objective-C assignment is being intercepted by the garbage collector" -msgstr "Varna när en Objective-C-tilldelning fångas upp av skräpsamlaren" +msgstr "Varna när en Objective-C-tilldelning fÃ¥ngas upp av skräpsamlaren" #: c-family/c.opt:280 msgid "Warn about casting functions to incompatible types" -msgstr "Varna för typkonvertering av funktioner till inkompatibla typer" +msgstr "Varna för typkonvertering av funktioner till inkompatibla typer" #: c-family/c.opt:284 msgid "Warn when a built-in preprocessor macro is undefined or redefined" -msgstr "Varna när ett inbyggt preprocessormakro avdefinieras eller omdefinieras" +msgstr "Varna när ett inbyggt preprocessormakro avdefinieras eller omdefinieras" #: c-family/c.opt:288 msgid "Warn about C constructs that are not in the common subset of C and C++" -msgstr "Varna för C-konstruktioner som inte är i den gemensamma delmängden av C och C++" +msgstr "Varna för C-konstruktioner som inte är i den gemensamma delmängden av C och C++" #: c-family/c.opt:292 msgid "Deprecated in favor of -Wc++11-compat" -msgstr "Bör undvikas till förmån för -Wc++11-compat" +msgstr "Bör undvikas till förmÃ¥n för -Wc++11-compat" #: c-family/c.opt:296 msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 2011" -msgstr "Varna för C++-konstruktioner vars betydelse skiljer mellan ISO C++ 1998 och ISO C++ 2011" +msgstr "Varna för C++-konstruktioner vars betydelse skiljer mellan ISO C++ 1998 och ISO C++ 2011" #: c-family/c.opt:300 msgid "Warn about casts which discard qualifiers" -msgstr "Varna för typkonvertering som slänger kvalificerare" +msgstr "Varna för typkonvertering som slänger kvalificerare" #: c-family/c.opt:304 msgid "Warn about subscripts whose type is \"char\"" -msgstr "Varna för index vars typ är \"char\"" +msgstr "Varna för index vars typ är â€charâ€" #: c-family/c.opt:308 msgid "Warn about variables that might be changed by \"longjmp\" or \"vfork\"" -msgstr "Varna för variabler som kan ändras av \"longjmp\" eller \"vfork\"" +msgstr "Varna för variabler som kan ändras av â€longjmp†eller â€vforkâ€" #: c-family/c.opt:312 msgid "Warn about possibly nested block comments, and C++ comments spanning more than one physical line" -msgstr "Varna för möjliga nästade blockkommentarer, och C++-kommentarer som spänner över mer än en fysisk rad" +msgstr "Varna för möjliga nästade blockkommentarer, och C++-kommentarer som spänner över mer än en fysisk rad" #: c-family/c.opt:316 msgid "Synonym for -Wcomment" -msgstr "Synonym för -Wcomment" +msgstr "Synonym för -Wcomment" #: c-family/c.opt:320 msgid "Warn for implicit type conversions that may change a value" -msgstr "Varna för implicita typkonverteringar som kan ändra ett värde" +msgstr "Varna för implicita typkonverteringar som kan ändra ett värde" #: c-family/c.opt:324 msgid "Warn for converting NULL from/to a non-pointer type" -msgstr "Varna för konvertering av NULL till icke-pekartyp" +msgstr "Varna för konvertering av NULL till icke-pekartyp" #: c-family/c.opt:328 msgid "Warn for implicit type conversions between signed and unsigned integers" -msgstr "Varna för implicita typkonverteringar mellan heltalsuttryck med och utan tecken" +msgstr "Varna för implicita typkonverteringar mellan heltalsuttryck med och utan tecken" #: c-family/c.opt:332 msgid "Warn when all constructors and destructors are private" -msgstr "Varna när ett alla konstruerare och destruerare är privata" +msgstr "Varna när ett alla konstruerare och destruerare är privata" #: c-family/c.opt:336 msgid "Warn when a declaration is found after a statement" -msgstr "Varna när en deklaration hittas efter en sats" +msgstr "Varna när en deklaration hittas efter en sats" #: c-family/c.opt:340 msgid "Warn about deleting polymorphic objects with non-virtual destructors" -msgstr "Varna för radering av polymorfa objekt med ickevirtuella destruerare" +msgstr "Varna för radering av polymorfa objekt med ickevirtuella destruerare" #: c-family/c.opt:344 msgid "Warn if a deprecated compiler feature, class, method, or field is used" -msgstr "Varna för en kompilatorfunktion, klass, metod eller fält som bör undvikas används" +msgstr "Varna för en kompilatorfunktion, klass, metod eller fält som bör undvikas används" #: c-family/c.opt:348 msgid "Warn about compile-time integer division by zero" -msgstr "Varna för heltalsdivision med noll vid kompileringstillfället" +msgstr "Varna för heltalsdivision med noll vid kompileringstillfället" #: c-family/c.opt:352 msgid "Warn about violations of Effective C++ style rules" -msgstr "Varna för brott mot stilreglerna i Effective C++" +msgstr "Varna för brott mot stilreglerna i Effective C++" #: c-family/c.opt:356 msgid "Warn about an empty body in an if or else statement" -msgstr "Varna för en tom kropp i en if- eller else-sats" +msgstr "Varna för en tom kropp i en if- eller else-sats" #: c-family/c.opt:360 msgid "Warn about stray tokens after #elif and #endif" -msgstr "Varna för vilsekomna symboler efter #elif och #endif" +msgstr "Varna för vilsekomna symboler efter #elif och #endif" #: c-family/c.opt:364 msgid "Warn about comparison of different enum types" -msgstr "Varna för jämförelser av skilda uppräkningstyper" +msgstr "Varna för jämförelser av skilda uppräkningstyper" #: c-family/c.opt:372 msgid "This switch is deprecated; use -Werror=implicit-function-declaration instead" -msgstr "Denna flagga bör undvikas, använd -Werror=implicit-function-declaration istället" +msgstr "Denna flagga bör undvikas, använd -Werror=implicit-function-declaration istället" #: c-family/c.opt:376 msgid "Warn if testing floating point numbers for equality" -msgstr "Varna vid test av flyttal på likhet" +msgstr "Varna vid test av flyttal pÃ¥ likhet" #: c-family/c.opt:380 msgid "Warn about printf/scanf/strftime/strfmon format string anomalies" -msgstr "Varna för anomalier i formatsträngar till printf/scanf/strftime/strfmon" +msgstr "Varna för anomalier i formatsträngar till printf/scanf/strftime/strfmon" #: c-family/c.opt:384 msgid "Warn if passing too many arguments to a function for its format string" -msgstr "Varna för för många argument argument till en funktion för dess formatsträng" +msgstr "Varna för för mÃ¥nga argument argument till en funktion för dess formatsträng" #: c-family/c.opt:388 msgid "Warn about format strings that are not literals" -msgstr "Varna för formatsträngar som inte är literaler" +msgstr "Varna för formatsträngar som inte är literaler" #: c-family/c.opt:392 msgid "Warn about format strings that contain NUL bytes" -msgstr "Varna för formatsträngar som innehåller NUL-byte:ar" +msgstr "Varna för formatsträngar som innehÃ¥ller NUL-byte:ar" #: c-family/c.opt:396 msgid "Warn about possible security problems with format functions" -msgstr "Varna för möjliga säkerhetsproblem med formatfunktioner" +msgstr "Varna för möjliga säkerhetsproblem med formatfunktioner" #: c-family/c.opt:400 msgid "Warn about strftime formats yielding 2-digit years" -msgstr "Varna för format till strftime som ger 2-siffrigt årtal" +msgstr "Varna för format till strftime som ger 2-siffrigt Ã¥rtal" #: c-family/c.opt:404 msgid "Warn about zero-length formats" -msgstr "Varna för format med längden noll" +msgstr "Varna för format med längden noll" #: c-family/c.opt:411 msgid "Warn whenever type qualifiers are ignored." -msgstr "Varna när typkvalificerare ignoreras." +msgstr "Varna när typkvalificerare ignoreras." #: c-family/c.opt:415 msgid "Warn about variables which are initialized to themselves" -msgstr "Varna för variabler som initieras till sig själva" +msgstr "Varna för variabler som initieras till sig själva" #: c-family/c.opt:419 msgid "Warn about implicit declarations" -msgstr "Varna för implicita deklarationer" +msgstr "Varna för implicita deklarationer" #: c-family/c.opt:423 msgid "Warn about implicit conversions from \"float\" to \"double\"" -msgstr "Varna för implicita konverteringar från \"float\" till \"double\"" +msgstr "Varna för implicita konverteringar frÃ¥n â€float†till â€doubleâ€" #: c-family/c.opt:427 msgid "Warn about implicit function declarations" -msgstr "Varna för implicita funktionsdeklarationer" +msgstr "Varna för implicita funktionsdeklarationer" #: c-family/c.opt:431 msgid "Warn when a declaration does not specify a type" -msgstr "Varna när en deklaration inte anger en typ" +msgstr "Varna när en deklaration inte anger en typ" #: c-family/c.opt:438 msgid "Warn when there is a cast to a pointer from an integer of a different size" -msgstr "Varna för typkonverteringar till pekare från ett heltal med annan storlek" +msgstr "Varna för typkonverteringar till pekare frÃ¥n ett heltal med annan storlek" #: c-family/c.opt:442 msgid "Warn about invalid uses of the \"offsetof\" macro" -msgstr "Varna för ogiltiga användningar av makrot \"offsetof\"" +msgstr "Varna för ogiltiga användningar av makrot â€offsetofâ€" #: c-family/c.opt:446 msgid "Warn about PCH files that are found but not used" -msgstr "Varna för PCH-filer som hittas men inte används" +msgstr "Varna för PCH-filer som hittas men inte används" #: c-family/c.opt:450 msgid "Warn when a jump misses a variable initialization" -msgstr "Varna när ett hopp missare en variabelinitiering" +msgstr "Varna när ett hopp missare en variabelinitiering" #: c-family/c.opt:454 msgid "Warn when a logical operator is suspiciously always evaluating to true or false" -msgstr "Varna när en logisk operator misstänkt nog alltid beräknas till sant eller falskt" +msgstr "Varna när en logisk operator misstänkt nog alltid beräknas till sant eller falskt" #: c-family/c.opt:458 msgid "Do not warn about using \"long long\" when -pedantic" -msgstr "Varna inte om användning av \"long long\" vid -pedantic" +msgstr "Varna inte om användning av â€long long†vid -pedantic" #: c-family/c.opt:462 msgid "Warn about suspicious declarations of \"main\"" -msgstr "Varna för tveksamma deklarationer av \"main\"" +msgstr "Varna för tveksamma deklarationer av â€mainâ€" #: c-family/c.opt:466 msgid "Warn about possibly missing braces around initializers" -msgstr "Varna för eventuellt saknade klamrar runt initierare" +msgstr "Varna för eventuellt saknade klamrar runt initierare" #: c-family/c.opt:470 msgid "Warn about global functions without previous declarations" -msgstr "Varna för globala globala funktioner utan tidigare deklaration" +msgstr "Varna för globala globala funktioner utan tidigare deklaration" #: c-family/c.opt:474 msgid "Warn about missing fields in struct initializers" -msgstr "Varna för saknade fält i postinitierare" +msgstr "Varna för saknade fält i postinitierare" #: c-family/c.opt:478 msgid "Warn about functions which might be candidates for format attributes" -msgstr "Varna för funktioner som kan vara kandidater för formatattribut" +msgstr "Varna för funktioner som kan vara kandidater för formatattribut" #: c-family/c.opt:482 msgid "Warn about user-specified include directories that do not exist" -msgstr "Varna för användarangivna inkluderingskataloger som inte finns" +msgstr "Varna för användarangivna inkluderingskataloger som inte finns" #: c-family/c.opt:486 msgid "Warn about function parameters declared without a type specifier in K&R-style functions" -msgstr "Varna för funktionsparametrar som deklarerats utan en typangivelse i K&R-stilfunktioner" +msgstr "Varna för funktionsparametrar som deklarerats utan en typangivelse i K&R-stilfunktioner" #: c-family/c.opt:490 msgid "Warn about global functions without prototypes" -msgstr "Varna för globala funktioner utan prototyper" +msgstr "Varna för globala funktioner utan prototyper" #: c-family/c.opt:494 msgid "Warn about constructs not instrumented by -fmudflap" -msgstr "Varna för konstruktioner som inte instrumenteras av -fmudflap" +msgstr "Varna för konstruktioner som inte instrumenteras av -fmudflap" #: c-family/c.opt:498 msgid "Warn about use of multi-character character constants" -msgstr "Varna vid användning av flerteckens teckenkonstant" +msgstr "Varna vid användning av flerteckens teckenkonstant" #: c-family/c.opt:502 msgid "Warn about narrowing conversions within { } that are ill-formed in C++11" -msgstr "Varna för avsmalnande konverteringar inom { } som är felformulerad i C++11" +msgstr "Varna för avsmalnande konverteringar inom { } som är felformulerad i C++11" #: c-family/c.opt:506 msgid "Warn about \"extern\" declarations not at file scope" -msgstr "Varna för \"extern\"-deklaration som inte är på filnivå" +msgstr "Varna för â€externâ€-deklaration som inte är pÃ¥ filnivÃ¥" #: c-family/c.opt:510 msgid "Warn when a noexcept expression evaluates to false even though the expression can't actually throw" -msgstr "Varna när ett noexcept-uttryck beräknas till false även om uttrycket inte faktiskt kan kasta" +msgstr "Varna när ett noexcept-uttryck beräknas till false även om uttrycket inte faktiskt kan kasta" #: c-family/c.opt:514 msgid "Warn when non-templatized friend functions are declared within a template" -msgstr "Varna när en vänfuktion som inte är en mall deklareras inuti en mall" +msgstr "Varna när en vänfuktion som inte är en mall deklareras inuti en mall" #: c-family/c.opt:518 msgid "Warn about non-virtual destructors" -msgstr "Varna för ickevirtuella destruerare" +msgstr "Varna för ickevirtuella destruerare" #: c-family/c.opt:522 msgid "Warn about NULL being passed to argument slots marked as requiring non-NULL" -msgstr "Varna om NULL skickas som argument som är markerade att de kräver icke-NULL" +msgstr "Varna om NULL skickas som argument som är markerade att de kräver icke-NULL" #: c-family/c.opt:526 msgid "-Wnormalized=<id|nfc|nfkc>\tWarn about non-normalised Unicode strings" -msgstr "-Wnormalized=<id|nfc|nfkc>\tVarna för icke normaliserade Unicodesträngar" +msgstr "-Wnormalized=<id|nfc|nfkc>\tVarna för icke normaliserade Unicodesträngar" #: c-family/c.opt:530 msgid "Warn if a C-style cast is used in a program" -msgstr "Varna för en typkonvertering i C-stil används i ett program" +msgstr "Varna för en typkonvertering i C-stil används i ett program" #: c-family/c.opt:534 msgid "Warn for obsolescent usage in a declaration" -msgstr "Varna för föråldrad användning i en deklaration" +msgstr "Varna för förÃ¥ldrad användning i en deklaration" #: c-family/c.opt:538 msgid "Warn if an old-style parameter definition is used" -msgstr "Varna för en gammaldags parameterdefinition används" +msgstr "Varna för en gammaldags parameterdefinition används" #: c-family/c.opt:542 msgid "Warn if a string is longer than the maximum portable length specified by the standard" -msgstr "Varna om en sträng är längre än den maximala portabla längden som anges i standarden" +msgstr "Varna om en sträng är längre än den maximala portabla längden som anges i standarden" #: c-family/c.opt:546 msgid "Warn about overloaded virtual function names" -msgstr "Varna för överlagrade virtuella funktionsnamn" +msgstr "Varna för överlagrade virtuella funktionsnamn" #: c-family/c.opt:550 msgid "Warn about overriding initializers without side effects" -msgstr "Varna för åsidosättande initierare utan sidoeffekter" +msgstr "Varna för Ã¥sidosättande initierare utan sidoeffekter" #: c-family/c.opt:554 msgid "Warn about packed bit-fields whose offset changed in GCC 4.4" -msgstr "Varna för packade bitfält vars avstånd ändrats i GCC 4.4" +msgstr "Varna för packade bitfält vars avstÃ¥nd ändrats i GCC 4.4" #: c-family/c.opt:558 msgid "Warn about possibly missing parentheses" -msgstr "Varna för eventuellt saknade parenteser" +msgstr "Varna för eventuellt saknade parenteser" #: c-family/c.opt:562 msgid "Warn when converting the type of pointers to member functions" @@ -9503,145 +9503,145 @@ msgstr "Varna vid typkonvertering av pekare till medlemsfunktioner" #: c-family/c.opt:566 msgid "Warn about function pointer arithmetic" -msgstr "Varna för aritmetik med funktionspekare" +msgstr "Varna för aritmetik med funktionspekare" #: c-family/c.opt:570 msgid "Warn when a pointer is cast to an integer of a different size" -msgstr "Varna när en pekare typkonverteras till ett heltal av annan storlek" +msgstr "Varna när en pekare typkonverteras till ett heltal av annan storlek" #: c-family/c.opt:574 msgid "Warn about misuses of pragmas" -msgstr "Varna för missbruk av pragman" +msgstr "Varna för missbruk av pragman" #: c-family/c.opt:578 msgid "Warn if a property for an Objective-C object has no assign semantics specified" -msgstr "Varna om en egenskap för ett Objective-C-objekt inte har någon tilldelningssemantik angiven" +msgstr "Varna om en egenskap för ett Objective-C-objekt inte har nÃ¥gon tilldelningssemantik angiven" #: c-family/c.opt:582 msgid "Warn if inherited methods are unimplemented" -msgstr "Varna för ärvda metoder är oimplementerade" +msgstr "Varna för ärvda metoder är oimplementerade" #: c-family/c.opt:586 msgid "Warn about multiple declarations of the same object" -msgstr "Varna för multipla deklarationer av samma objekt" +msgstr "Varna för multipla deklarationer av samma objekt" #: c-family/c.opt:590 msgid "Warn when the compiler reorders code" -msgstr "Varna när kompilatorn ändrar ordning på kod" +msgstr "Varna när kompilatorn ändrar ordning pÃ¥ kod" #: c-family/c.opt:594 msgid "Warn whenever a function's return type defaults to \"int\" (C), or about inconsistent return types (C++)" -msgstr "Varna när en funktions returtyp får \"int\" som skönsvärde (C), eller om inkonsistenta returtyper (C++)" +msgstr "Varna när en funktions returtyp fÃ¥r â€int†som skönsvärde (C), eller om inkonsistenta returtyper (C++)" #: c-family/c.opt:598 msgid "Warn if a selector has multiple methods" -msgstr "Varna för en väljare har multipla metoder" +msgstr "Varna för en väljare har multipla metoder" #: c-family/c.opt:602 msgid "Warn about possible violations of sequence point rules" -msgstr "Varna för möjliga brott mot sekvenspunktregler" +msgstr "Varna för möjliga brott mot sekvenspunktregler" #: c-family/c.opt:606 msgid "Warn about signed-unsigned comparisons" -msgstr "Varna för jämförelser mellan signed/unsigned" +msgstr "Varna för jämförelser mellan signed/unsigned" #: c-family/c.opt:610 msgid "Warn when overload promotes from unsigned to signed" -msgstr "Varna när överlagring anpassar från teckenlöst till med tecken" +msgstr "Varna när överlagring anpassar frÃ¥n teckenlöst till med tecken" #: c-family/c.opt:614 msgid "Warn about uncasted NULL used as sentinel" -msgstr "Varna för ej typkonverterad NULL används som vaktpost" +msgstr "Varna för ej typkonverterad NULL används som vaktpost" #: c-family/c.opt:618 msgid "Warn about unprototyped function declarations" -msgstr "Varna för funktionsdeklarationer utan prototyp" +msgstr "Varna för funktionsdeklarationer utan prototyp" #: c-family/c.opt:622 msgid "Warn if type signatures of candidate methods do not match exactly" -msgstr "Varna för typsignaturer till kandidatmetoder inte stämmer exakt" +msgstr "Varna för typsignaturer till kandidatmetoder inte stämmer exakt" #: c-family/c.opt:626 msgid "Warn when __sync_fetch_and_nand and __sync_nand_and_fetch built-in functions are used" -msgstr "Varna när de inbyggda funktionerna __sync_fetch_and_nand och __sync_nand_and_fetch används" +msgstr "Varna när de inbyggda funktionerna __sync_fetch_and_nand och __sync_nand_and_fetch används" #: c-family/c.opt:630 msgid "Deprecated. This switch has no effect" -msgstr "Avrådes ifrån. Denna flagga har ingen effekt" +msgstr "AvrÃ¥des ifrÃ¥n. Denna flagga har ingen effekt" #: c-family/c.opt:638 msgid "Warn about features not present in traditional C" -msgstr "Varna för funktioner som inte finns i traditionell C" +msgstr "Varna för funktioner som inte finns i traditionell C" #: c-family/c.opt:642 msgid "Warn of prototypes causing type conversions different from what would happen in the absence of prototype" -msgstr "Varna för prototyper som orsakar andra typkonverteringar än de som skulle skett i frånvaro av prototyp" +msgstr "Varna för prototyper som orsakar andra typkonverteringar än de som skulle skett i frÃ¥nvaro av prototyp" #: c-family/c.opt:646 msgid "Warn if trigraphs are encountered that might affect the meaning of the program" -msgstr "Varna för trigrafer upptäcks som kan påverka betydelsen av programmet" +msgstr "Varna för trigrafer upptäcks som kan pÃ¥verka betydelsen av programmet" #: c-family/c.opt:650 msgid "Warn about @selector()s without previously declared methods" -msgstr "Varna för @selector()er utan tidigare deklarerade metoder" +msgstr "Varna för @selector()er utan tidigare deklarerade metoder" #: c-family/c.opt:654 msgid "Warn if an undefined macro is used in an #if directive" -msgstr "Varna för ett odefinierat makro används i ett #if-direktiv" +msgstr "Varna för ett odefinierat makro används i ett #if-direktiv" #: c-family/c.opt:658 msgid "Warn about unrecognized pragmas" -msgstr "Varna för okända pragman" +msgstr "Varna för okända pragman" #: c-family/c.opt:662 msgid "Warn about unsuffixed float constants" -msgstr "Varna för flyttalskonstanter utan suffix" +msgstr "Varna för flyttalskonstanter utan suffix" # Uppenbarligen avhugget. Nu felrapporterat. # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52118 #: c-family/c.opt:666 msgid "Warn about" -msgstr "Varna för" +msgstr "Varna för" #: c-family/c.opt:670 msgid "Warn about macros defined in the main file that are not used" -msgstr "Varna för makron definierade i huvudfilen som inte används" +msgstr "Varna för makron definierade i huvudfilen som inte används" #: c-family/c.opt:674 msgid "Warn if a caller of a function, marked with attribute warn_unused_result, does not use its return value" -msgstr "Varna om anroparen av en funktion, deklarerad med attributet warn_unused_result, inte använder dess returvärde" +msgstr "Varna om anroparen av en funktion, deklarerad med attributet warn_unused_result, inte använder dess returvärde" #: c-family/c.opt:678 msgid "Do not warn about using variadic macros when -pedantic" -msgstr "Varna inte om användning av variadiskt makro när -pedantic är på" +msgstr "Varna inte om användning av variadiskt makro när -pedantic är pÃ¥" #: c-family/c.opt:682 msgid "Warn if a variable length array is used" -msgstr "Varna om en vektor med variabel längd används" +msgstr "Varna om en vektor med variabel längd används" #: c-family/c.opt:686 msgid "Warn when a register variable is declared volatile" -msgstr "Varna när en registervariabel är deklarerad volatile" +msgstr "Varna när en registervariabel är deklarerad volatile" #: c-family/c.opt:690 msgid "In C++, nonzero means warn about deprecated conversion from string literals to 'char *'. In C, similar warning, except that the conversion is of course not deprecated by the ISO C standard." -msgstr "I C++ betyder nollskilt att varna för konverteringar som bör undvikas från strängliteraler till \"char *\". I C, liknande varning, bortsett från att ISO C-standarden naturligtvis inte säger att konverteringen bör undvikas." +msgstr "I C++ betyder nollskilt att varna för konverteringar som bör undvikas frÃ¥n strängliteraler till â€char *â€. I C, liknande varning, bortsett frÃ¥n att ISO C-standarden naturligtvis inte säger att konverteringen bör undvikas." #: c-family/c.opt:694 msgid "Warn when a pointer differs in signedness in an assignment" -msgstr "Varna när en pekare skiljer i teckenhet i en tilldelning" +msgstr "Varna när en pekare skiljer i teckenhet i en tilldelning" #: c-family/c.opt:698 msgid "Warn when a literal '0' is used as null pointer" -msgstr "Varna när en ordagrann \"0\" används som en nollpekare" +msgstr "Varna när en ordagrann â€0†används som en nollpekare" #: c-family/c.opt:702 msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)" -msgstr "En synonym för -std=c89 (för C) or -std=c++98 (för C++)" +msgstr "En synonym för -std=c89 (för C) or -std=c++98 (för C++)" #: c-family/c.opt:710 msgid "Enforce class member access control semantics" -msgstr "Upprätthåll åtkomstsemantik för klassmedlemmar" +msgstr "UpprätthÃ¥ll Ã¥tkomstsemantik för klassmedlemmar" #: c-family/c.opt:713 c-family/c.opt:720 c-family/c.opt:786 c-family/c.opt:802 #: c-family/c.opt:825 c-family/c.opt:831 c-family/c.opt:838 c-family/c.opt:862 @@ -9651,20 +9651,20 @@ msgstr "Upprätthåll åtkomstsemantik för klassmedlemmar" #: c-family/c-opts.c:569 #, gcc-internal-format msgid "switch %qs is no longer supported" -msgstr "flaggan %qs stödjs inte längre" +msgstr "flaggan %qs stödjs inte längre" #: c-family/c.opt:717 msgid "Allow variadic functions without named parameter" -msgstr "Tillåt variadiska funktioner utan namngiven parameter" +msgstr "TillÃ¥t variadiska funktioner utan namngiven parameter" #: c-family/c.opt:721 c-family/c.opt:839 c-family/c.opt:1078 #: c-family/c.opt:1082 c-family/c.opt:1098 msgid "No longer supported" -msgstr "Stödjs inte längre" +msgstr "Stödjs inte längre" #: c-family/c.opt:725 msgid "Recognize the \"asm\" keyword" -msgstr "Acceptera nyckelordet \"asm\"" +msgstr "Acceptera nyckelordet â€asmâ€" #: c-family/c.opt:733 msgid "Recognize built-in functions" @@ -9672,15 +9672,15 @@ msgstr "Acceptera inbyggda funktioner" #: c-family/c.opt:740 msgid "Check the return value of new" -msgstr "Kontrollera returvärdet av new" +msgstr "Kontrollera returvärdet av new" #: c-family/c.opt:744 msgid "Allow the arguments of the '?' operator to have different types" -msgstr "Tillåt argument till \"?\"-operatorn att ha olika typer" +msgstr "TillÃ¥t argument till â€?â€-operatorn att ha olika typer" #: c-family/c.opt:748 msgid "Reduce the size of object files" -msgstr "Reducera storleken på objektfiler" +msgstr "Reducera storleken pÃ¥ objektfiler" #: c-family/c.opt:751 #, c-format @@ -9689,26 +9689,26 @@ msgstr "inget klassnamn angivet med %qs" #: c-family/c.opt:752 msgid "-fconst-string-class=<name>\tUse class <name> for constant strings" -msgstr "-fconst-string-class=<namn>\tAnvänd klassen <namn> för konstanta strängar" +msgstr "-fconst-string-class=<namn>\tAnvänd klassen <namn> för konstanta strängar" #: c-family/c.opt:756 msgid "-fconstexpr-depth=<number>\tSpecify maximum constexpr recursion depth" -msgstr "-fconstexpr-depth=<antal>\tAnge maximalt rekursionsdjup för konstantuttryck" +msgstr "-fconstexpr-depth=<antal>\tAnge maximalt rekursionsdjup för konstantuttryck" #: c-family/c.opt:760 msgid "Emit debug annotations during preprocessing" -msgstr "Mata ut felsökningsannoteringar under preprocessning" +msgstr "Mata ut felsökningsannoteringar under preprocessning" #: c-family/c.opt:764 msgid "-fdeduce-init-list\tenable deduction of std::initializer_list for a template type parameter from a brace-enclosed initializer-list" -msgstr "-fdeduce-init-list\taktivera härledning av std::initializer_list för en malltypparameter från en klammeromsluten initierarlista" +msgstr "-fdeduce-init-list\taktivera härledning av std::initializer_list för en malltypparameter frÃ¥n en klammeromsluten initierarlista" #: c-family/c.opt:768 c-family/c.opt:955 common.opt:937 common.opt:1115 #: common.opt:1393 common.opt:1647 common.opt:1683 common.opt:1768 #: common.opt:1772 common.opt:1848 common.opt:1926 common.opt:1942 #: common.opt:2026 msgid "Does nothing. Preserved for backward compatibility." -msgstr "Gör ingenting. Bevarad för bakåtkompatibilitet." +msgstr "Gör ingenting. Bevarad för bakÃ¥tkompatibilitet." #: c-family/c.opt:772 msgid "Preprocess directives only." @@ -9716,31 +9716,31 @@ msgstr "Preprocessa endast direktiv." #: c-family/c.opt:776 msgid "Permit '$' as an identifier character" -msgstr "Tillåt \"$\" som ett identifierartecken" +msgstr "TillÃ¥t â€$†som ett identifierartecken" #: c-family/c.opt:783 msgid "Generate code to check exception specifications" -msgstr "Generera kod för att kontrollera undantagsspecifikationer" +msgstr "Generera kod för att kontrollera undantagsspecifikationer" #: c-family/c.opt:790 msgid "-fexec-charset=<cset>\tConvert all strings and character constants to character set <cset>" -msgstr "-fexec-charset=<tknst>\tKonvertera alla strängar och teckenkonstanter till teckenuppsättningen <tknst>" +msgstr "-fexec-charset=<tknst>\tKonvertera alla strängar och teckenkonstanter till teckenuppsättningen <tknst>" #: c-family/c.opt:794 msgid "Permit universal character names (\\u and \\U) in identifiers" -msgstr "Tillåt universella teckennamn (\\u och \\U) i identifierare" +msgstr "TillÃ¥t universella teckennamn (\\u och \\U) i identifierare" #: c-family/c.opt:798 msgid "-finput-charset=<cset>\tSpecify the default character set for source files" -msgstr "-finput-charset=<tknst>\tAnge standardteckenuppsättning för källkodsfiler" +msgstr "-finput-charset=<tknst>\tAnge standardteckenuppsättning för källkodsfiler" #: c-family/c.opt:806 msgid "Scope of for-init-statement variables is local to the loop" -msgstr "Räckvidden av for-init-satsvariabler är lokal till slingan" +msgstr "Räckvidden av for-init-satsvariabler är lokal till slingan" #: c-family/c.opt:810 msgid "Do not assume that standard C libraries and \"main\" exist" -msgstr "Anta inte att standard C-bibliotek och \"main\" finns" +msgstr "Anta inte att standard C-bibliotek och â€main†finns" #: c-family/c.opt:814 msgid "Recognize GNU-defined keywords" @@ -9748,23 +9748,23 @@ msgstr "Acceptera GNU-definierade nyckelord" #: c-family/c.opt:818 msgid "Generate code for GNU runtime environment" -msgstr "Generera kod för GNU:s körtidsmiljö" +msgstr "Generera kod för GNU:s körtidsmiljö" #: c-family/c.opt:822 msgid "Use traditional GNU semantics for inline functions" -msgstr "Använd traditionell C-semantik för inline-funktioner" +msgstr "Använd traditionell C-semantik för inline-funktioner" #: c-family/c.opt:828 msgid "-fhandle-exceptions has been renamed -fexceptions (and is now on by default)" -msgstr "-fhandle-exceptions har bytt namn till -fexceptions (och är nu normalt påslagen)" +msgstr "-fhandle-exceptions har bytt namn till -fexceptions (och är nu normalt pÃ¥slagen)" #: c-family/c.opt:835 msgid "Assume normal C execution environment" -msgstr "Anta normal C-körmiljö" +msgstr "Anta normal C-körmiljö" #: c-family/c.opt:843 msgid "Export functions even if they can be inlined" -msgstr "Exportera funktioner även om de kan inline:as" +msgstr "Exportera funktioner även om de kan inline:as" #: c-family/c.opt:847 msgid "Emit implicit instantiations of inline templates" @@ -9780,31 +9780,31 @@ msgstr "Skjut in friend-funktioner i omgivande namnrymd" #: c-family/c.opt:859 msgid "Don't emit dllexported inline functions unless needed" -msgstr "Avge inte dll-exporterade inline-funktioner om det inte behövs" +msgstr "Avge inte dll-exporterade inline-funktioner om det inte behövs" #: c-family/c.opt:866 msgid "Allow implicit conversions between vectors with differing numbers of subparts and/or differing element types." -msgstr "Tillåt implicit konvertering mellan vektorer med olika antal underdelar och/eller olika elementtyper." +msgstr "TillÃ¥t implicit konvertering mellan vektorer med olika antal underdelar och/eller olika elementtyper." #: c-family/c.opt:870 msgid "Don't warn about uses of Microsoft extensions" -msgstr "Varna inte om användning av Microsoftutökningar" +msgstr "Varna inte om användning av Microsoftutökningar" #: c-family/c.opt:874 msgid "Add mudflap bounds-checking instrumentation for single-threaded program" -msgstr "Lägg till gränskontrollinstrumenteringen mudflap för enkeltrådade program" +msgstr "Lägg till gränskontrollinstrumenteringen mudflap för enkeltrÃ¥dade program" #: c-family/c.opt:878 msgid "Add mudflap bounds-checking instrumentation for multi-threaded program" -msgstr "Lägg till gränskontrollinstrumenteringen mudflap för flertrådade program" +msgstr "Lägg till gränskontrollinstrumenteringen mudflap för flertrÃ¥dade program" #: c-family/c.opt:882 msgid "Ignore read operations when inserting mudflap instrumentation" -msgstr "Ignorera läsoperationer när mudflap-instrumentering läggs in" +msgstr "Ignorera läsoperationer när mudflap-instrumentering läggs in" #: c-family/c.opt:892 msgid "Generate code for NeXT (Apple Mac OS X) runtime environment" -msgstr "Generera kod för körtidsmiljön NeXT (Apple Mac OS X)" +msgstr "Generera kod för körtidsmiljön NeXT (Apple Mac OS X)" #: c-family/c.opt:896 msgid "Assume that receivers of Objective-C messages may be nil" @@ -9812,19 +9812,19 @@ msgstr "Anta att mottagare av Objective-C-meddelanden kan var nil" #: c-family/c.opt:906 msgid "Treat a throw() exception specification as noexcept to improve code size" -msgstr "Behandla en undantagsspecifikation throw() som noexcept för att förbättra kodstorleken" +msgstr "Behandla en undantagsspecifikation throw() som noexcept för att förbättra kodstorleken" #: c-family/c.opt:910 msgid "Specify which ABI to use for Objective-C family code and meta-data generation." -msgstr "Ange vilket ABI som skall användas för kodfamiljen Objective-C och generering av metadata." +msgstr "Ange vilket ABI som skall användas för kodfamiljen Objective-C och generering av metadata." #: c-family/c.opt:916 msgid "Generate special Objective-C methods to initialize/destroy non-POD C++ ivars, if needed" -msgstr "Generera speciella Objective-C-metoder för att initiera/destruera icke-POD-C++-ivariabler, om det behövs" +msgstr "Generera speciella Objective-C-metoder för att initiera/destruera icke-POD-C++-ivariabler, om det behövs" #: c-family/c.opt:920 msgid "Allow fast jumps to the message dispatcher" -msgstr "Tillåt snabba hopp till meddelandehanteraren" +msgstr "TillÃ¥t snabba hopp till meddelandehanteraren" #: c-family/c.opt:926 msgid "Enable Objective-C exception and synchronization syntax" @@ -9832,19 +9832,19 @@ msgstr "Aktivera Objective-C-undantags- och synkroniseringssyntax" #: c-family/c.opt:930 msgid "Enable garbage collection (GC) in Objective-C/Objective-C++ programs" -msgstr "Aktivera skräpsamling (GC) i Objective-C-/Objective-C++-program" +msgstr "Aktivera skräpsamling (GC) i Objective-C-/Objective-C++-program" #: c-family/c.opt:934 msgid "Enable inline checks for nil receivers with the NeXT runtime and ABI version 2." -msgstr "Aktivera inline-kontroller av nil-mottagare med NeXT-körtidskod och ABI-version 2." +msgstr "Aktivera inline-kontroller av nil-mottagare med NeXT-körtidskod och ABI-version 2." #: c-family/c.opt:939 msgid "Enable Objective-C setjmp exception handling runtime" -msgstr "Aktivera Objective-C:s setjmp-undantagshantering i körtidsmiljön" +msgstr "Aktivera Objective-C:s setjmp-undantagshantering i körtidsmiljön" #: c-family/c.opt:943 msgid "Conform to the Objective-C 1.0 language as implemented in GCC 4.0" -msgstr "Följ språket Objective-C 1.0 så som det implementerades i GCC 4.0" +msgstr "Följ sprÃ¥ket Objective-C 1.0 sÃ¥ som det implementerades i GCC 4.0" #: c-family/c.opt:947 msgid "Enable OpenMP (implies -frecursive in Fortran)" @@ -9852,19 +9852,19 @@ msgstr "Aktivera OpenMP (implicerar -frecursive i Fortran)" #: c-family/c.opt:951 msgid "Recognize C++ keywords like \"compl\" and \"xor\"" -msgstr "Acceptera C++-nyckelord som \"compl\" och \"xor\"" +msgstr "Acceptera C++-nyckelord som â€compl†och â€xorâ€" #: c-family/c.opt:962 msgid "Look for and use PCH files even when preprocessing" -msgstr "Sök efter och använd PCH-filer även vid preprocessning" +msgstr "Sök efter och använd PCH-filer även vid preprocessning" #: c-family/c.opt:966 msgid "Downgrade conformance errors to warnings" -msgstr "Nedgradera följsamhetsfel till varningar" +msgstr "Nedgradera följsamhetsfel till varningar" #: c-family/c.opt:970 msgid "Enable Plan 9 language extensions" -msgstr "Aktivera språkutvidgningar från Plan 9" +msgstr "Aktivera sprÃ¥kutvidgningar frÃ¥n Plan 9" #: c-family/c.opt:974 msgid "Treat the input file as already preprocessed" @@ -9872,43 +9872,43 @@ msgstr "Betrakta indatafilen som redan preprocessad" #: c-family/c.opt:982 msgid "-ftrack-macro-expansion=<0|1|2> Track locations of tokens coming from macro expansion and display them in error messages" -msgstr "-ftrack-macro-expansion=<0|1|2> Spåra platser för symboler som kommer från makroexpansion och visa dem i felmeddelanden" +msgstr "-ftrack-macro-expansion=<0|1|2> SpÃ¥ra platser för symboler som kommer frÃ¥n makroexpansion och visa dem i felmeddelanden" #: c-family/c.opt:986 msgid "-fno-pretty-templates Do not pretty-print template specializations as the template signature followed by the arguments" -msgstr "-fno-pretty-templates Finskriv inte mallspecialiceringar som mallsignaturer följda av argumenten" +msgstr "-fno-pretty-templates Finskriv inte mallspecialiceringar som mallsignaturer följda av argumenten" #: c-family/c.opt:990 msgid "Used in Fix-and-Continue mode to indicate that object files may be swapped in at runtime" -msgstr "Används i Fix-and-Continue-läge för att objektfiler kan bytas ut vid körtillfället" +msgstr "Används i Fix-and-Continue-läge för att objektfiler kan bytas ut vid körtillfället" #: c-family/c.opt:994 msgid "Enable automatic template instantiation" -msgstr "Slå på automatisk mallinstansiering" +msgstr "SlÃ¥ pÃ¥ automatisk mallinstansiering" #: c-family/c.opt:998 msgid "Generate run time type descriptor information" -msgstr "Generera typbeskrivarinformation för körtid" +msgstr "Generera typbeskrivarinformation för körtid" #: c-family/c.opt:1002 msgid "Use the same size for double as for float" -msgstr "Använd samma storlek för double som för float" +msgstr "Använd samma storlek för double som för float" #: c-family/c.opt:1006 msgid "Use the narrowest integer type possible for enumeration types" -msgstr "Använd den smalaste möjliga heltalstypen för uppräkningstyper" +msgstr "Använd den smalaste möjliga heltalstypen för uppräkningstyper" #: c-family/c.opt:1010 msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\"" -msgstr "Tvinga den underliggande typen för \"wchar_t\" att vara \"unsigned short\"" +msgstr "Tvinga den underliggande typen för â€wchar_t†att vara â€unsigned shortâ€" #: c-family/c.opt:1014 msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed" -msgstr "När \"signed\" eller \"unsigned\" inte anges låt bitfältet ha tecken" +msgstr "När â€signed†eller â€unsigned†inte anges lÃ¥t bitfältet ha tecken" #: c-family/c.opt:1018 msgid "Make \"char\" signed by default" -msgstr "Låt \"char\" ha tecken som standard" +msgstr "LÃ¥t â€char†ha tecken som standard" #: c-family/c.opt:1025 msgid "Display statistics accumulated during compilation" @@ -9916,35 +9916,35 @@ msgstr "Visa statistik som samlats under kompilering" #: c-family/c.opt:1029 msgid "Assume that values of enumeration type are always within the minimum range of that type" -msgstr "Antag att värdena i uppräkningstyper alltid finns inom det minsta intervallet av den typen" +msgstr "Antag att värdena i uppräkningstyper alltid finns inom det minsta intervallet av den typen" #: c-family/c.opt:1036 msgid "-ftabstop=<number>\tDistance between tab stops for column reporting" -msgstr "-ftabstop=<antal>\tAvstånd mellan tabulatorstopp för kolumnvis rapportering" +msgstr "-ftabstop=<antal>\tAvstÃ¥nd mellan tabulatorstopp för kolumnvis rapportering" #: c-family/c.opt:1043 msgid "-ftemplate-depth=<number>\tSpecify maximum template instantiation depth" -msgstr "-ftemplate-depth=<antal>\tAnge maximalt instansieringsdjup för mallar" +msgstr "-ftemplate-depth=<antal>\tAnge maximalt instansieringsdjup för mallar" #: c-family/c.opt:1050 msgid "-fno-threadsafe-statics\tDo not generate thread-safe code for initializing local statics" -msgstr "-fno-threadsafe-statics\tGenerera inte trådsäker kod för initiering a lokala statiska variabler" +msgstr "-fno-threadsafe-statics\tGenerera inte trÃ¥dsäker kod för initiering a lokala statiska variabler" #: c-family/c.opt:1054 msgid "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned" -msgstr "När \"signed\" eller \"unsigned\" inte anges görs bitfälten teckenlösa" +msgstr "När â€signed†eller â€unsigned†inte anges görs bitfälten teckenlösa" #: c-family/c.opt:1058 msgid "Make \"char\" unsigned by default" -msgstr "Gör \"char\" teckenlöst som standard" +msgstr "Gör â€char†teckenlöst som standard" #: c-family/c.opt:1062 msgid "Use __cxa_atexit to register destructors" -msgstr "Använd __cxa_atexit till registerdestruerare" +msgstr "Använd __cxa_atexit till registerdestruerare" #: c-family/c.opt:1066 msgid "Use __cxa_get_exception_ptr in exception handling" -msgstr "Använd __cxa_get_exception_ptr i undantagshantering" +msgstr "Använd __cxa_get_exception_ptr i undantagshantering" #: c-family/c.opt:1070 msgid "Marks all inlined functions and methods as having hidden visibility" @@ -9952,7 +9952,7 @@ msgstr "Markerar alla inline:ade funktioner och metoder att ha dold synlighet" #: c-family/c.opt:1074 msgid "Changes visibility to match Microsoft Visual Studio by default" -msgstr "Ändrar synlighet till att vara som Microsoft Visual Studio som standard" +msgstr "Ändrar synlighet till att vara som Microsoft Visual Studio som standard" #: c-family/c.opt:1086 msgid "Emit common-like symbols as weak symbols" @@ -9960,15 +9960,15 @@ msgstr "Mata ut common-liknande symboler som svaga symboler" #: c-family/c.opt:1090 msgid "-fwide-exec-charset=<cset>\tConvert all wide strings and character constants to character set <cset>" -msgstr "-fwide-exec-charset=<tknst>\tKonvertera alla breda strängar och teckenkonstanter till teckenuppsättningen <tknst>" +msgstr "-fwide-exec-charset=<tknst>\tKonvertera alla breda strängar och teckenkonstanter till teckenuppsättningen <tknst>" #: c-family/c.opt:1094 msgid "Generate a #line directive pointing at the current working directory" -msgstr "Generera ett #line-direktiv som pekar på aktuell katalog" +msgstr "Generera ett #line-direktiv som pekar pÃ¥ aktuell katalog" #: c-family/c.opt:1102 msgid "Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode" -msgstr "Generera lata klassuppslagningar (via objc_getClass()) att användas i läget Zero-Link" +msgstr "Generera lata klassuppslagningar (via objc_getClass()) att användas i läget Zero-Link" #: c-family/c.opt:1106 msgid "Dump declarations to a .decl file" @@ -9976,19 +9976,19 @@ msgstr "Skicka deklarationer till en .decl-fil" #: c-family/c.opt:1110 msgid "-femit-struct-debug-baseonly\tAggressive reduced debug info for structs" -msgstr "-femit-struct-debug-baseonly\tAggressivt reducerad felsökningsinformation för poster" +msgstr "-femit-struct-debug-baseonly\tAggressivt reducerad felsökningsinformation för poster" #: c-family/c.opt:1114 msgid "-femit-struct-debug-reduced\tConservative reduced debug info for structs" -msgstr "-femit-struct-debug-reduced\tKonservativt reducerad felsökningsinformation för poster" +msgstr "-femit-struct-debug-reduced\tKonservativt reducerad felsökningsinformation för poster" #: c-family/c.opt:1118 msgid "-femit-struct-debug-detailed=<spec-list>\tDetailed reduced debug info for structs" -msgstr "-femit-struct-debug-detaild=<spec-lista>\tDetaljreducerad felsökningsinformation för poster" +msgstr "-femit-struct-debug-detaild=<spec-lista>\tDetaljreducerad felsökningsinformation för poster" #: c-family/c.opt:1122 msgid "-idirafter <dir>\tAdd <dir> to the end of the system include path" -msgstr "-idirafter <kat>\tLägg till <kat> till slutet av sökvägen för systeminkluderingar" +msgstr "-idirafter <kat>\tLägg till <kat> till slutet av sökvägen för systeminkluderingar" #: c-family/c.opt:1126 msgid "-imacros <file>\tAccept definition of macros in <file>" @@ -9996,123 +9996,123 @@ msgstr "-imacros <fil>\tTag med definitioner av makron i <fil>" #: c-family/c.opt:1130 msgid "-imultilib <dir>\tSet <dir> to be the multilib include subdirectory" -msgstr "-imultilib <kat>\tSätt <kat> att vara inkluderingsunderbiblioteket för multibibliotek" +msgstr "-imultilib <kat>\tSätt <kat> att vara inkluderingsunderbiblioteket för multibibliotek" #: c-family/c.opt:1134 msgid "-include <file>\tInclude the contents of <file> before other files" -msgstr "-include <fil>\tInkludera innehållet i <fil> före andra filer" +msgstr "-include <fil>\tInkludera innehÃ¥llet i <fil> före andra filer" #: c-family/c.opt:1138 msgid "-iprefix <path>\tSpecify <path> as a prefix for next two options" -msgstr "-iprefix <skvg>\tAnge <skvg> som ett prefix för de följande två flaggorna" +msgstr "-iprefix <skvg>\tAnge <skvg> som ett prefix för de följande tvÃ¥ flaggorna" #: c-family/c.opt:1142 msgid "-isysroot <dir>\tSet <dir> to be the system root directory" -msgstr "-isysroot <kat>\tSätt <kat> som rotkatalog för systemet" +msgstr "-isysroot <kat>\tSätt <kat> som rotkatalog för systemet" #: c-family/c.opt:1146 msgid "-isystem <dir>\tAdd <dir> to the start of the system include path" -msgstr "-isystem <kat>\tLägg till <kat> till början av sökvägen för systeminkluderingar" +msgstr "-isystem <kat>\tLägg till <kat> till början av sökvägen för systeminkluderingar" #: c-family/c.opt:1150 msgid "-iquote <dir>\tAdd <dir> to the end of the quote include path" -msgstr "-iquote <kat>\tLägg till <kat> till slutet av sökvägen för citerade inkluderingar" +msgstr "-iquote <kat>\tLägg till <kat> till slutet av sökvägen för citerade inkluderingar" #: c-family/c.opt:1154 msgid "-iwithprefix <dir>\tAdd <dir> to the end of the system include path" -msgstr "-iwithprefix <kat>\tLägg till <kat> till slutet av sökvägen för systeminkluderingar" +msgstr "-iwithprefix <kat>\tLägg till <kat> till slutet av sökvägen för systeminkluderingar" #: c-family/c.opt:1158 msgid "-iwithprefixbefore <dir>\tAdd <dir> to the end of the main include path" -msgstr "-iwithprefixbefore <kat>\tLägg till <kat> till slutet av huvudsökvägen" +msgstr "-iwithprefixbefore <kat>\tLägg till <kat> till slutet av huvudsökvägen" #: c-family/c.opt:1168 msgid "Do not search standard system include directories (those specified with -isystem will still be used)" -msgstr "Sök inte standardkataloger för inkluderingar (de som anges med -isystem kommer fortfarande att användas)" +msgstr "Sök inte standardkataloger för inkluderingar (de som anges med -isystem kommer fortfarande att användas)" #: c-family/c.opt:1172 msgid "Do not search standard system include directories for C++" -msgstr "Sök inte i standardkataloger för systeminkluderingar för C++" +msgstr "Sök inte i standardkataloger för systeminkluderingar för C++" #: c-family/c.opt:1188 msgid "Generate C header of platform-specific features" -msgstr "Generera C-huvuden för plattformsspecifika funktioner" +msgstr "Generera C-huvuden för plattformsspecifika funktioner" #: c-family/c.opt:1192 msgid "Remap file names when including files" -msgstr "Översätt filnamn när filer inkluderas" +msgstr "Översätt filnamn när filer inkluderas" #: c-family/c.opt:1196 c-family/c.opt:1200 msgid "Conform to the ISO 1998 C++ standard revised by the 2003 technical corrigendum" -msgstr "Följ standarden ISO 1998 C++ reviderad av 2003 års tekniska rättelser" +msgstr "Följ standarden ISO 1998 C++ reviderad av 2003 Ã¥rs tekniska rättelser" #: c-family/c.opt:1204 msgid "Conform to the ISO 2011 C++ standard (experimental and incomplete support)" -msgstr "Följ standarden ISO 2011 C++ (experimentellt och ofullständigt stöd)" +msgstr "Följ standarden ISO 2011 C++ (experimentellt och ofullständigt stöd)" #: c-family/c.opt:1208 msgid "Deprecated in favor of -std=c++11" -msgstr "Undanbedes till förmån för -std=c++11" +msgstr "Undanbedes till förmÃ¥n för -std=c++11" #: c-family/c.opt:1212 c-family/c.opt:1294 msgid "Conform to the ISO 2011 C standard (experimental and incomplete support)" -msgstr "Följ standarden ISO 2011 C (experimentellt och ofullständigt stöd)" +msgstr "Följ standarden ISO 2011 C (experimentellt och ofullständigt stöd)" #: c-family/c.opt:1216 msgid "Deprecated in favor of -std=c11" -msgstr "Undanbedes till förmån för -std=c11" +msgstr "Undanbedes till förmÃ¥n för -std=c11" #: c-family/c.opt:1220 c-family/c.opt:1224 c-family/c.opt:1278 msgid "Conform to the ISO 1990 C standard" -msgstr "Följ standarden ISO 1990 C" +msgstr "Följ standarden ISO 1990 C" #: c-family/c.opt:1228 c-family/c.opt:1286 msgid "Conform to the ISO 1999 C standard" -msgstr "Följ standarden ISO 1999 C" +msgstr "Följ standarden ISO 1999 C" #: c-family/c.opt:1232 msgid "Deprecated in favor of -std=c99" -msgstr "Undanbedes till förmån för -std=c99" +msgstr "Undanbedes till förmÃ¥n för -std=c99" #: c-family/c.opt:1236 c-family/c.opt:1241 msgid "Conform to the ISO 1998 C++ standard revised by the 2003 technical" -msgstr "Följ standarden ISO 1998 C++ reviderad av 2003 års tekniska rättelser" +msgstr "Följ standarden ISO 1998 C++ reviderad av 2003 Ã¥rs tekniska rättelser" #: c-family/c.opt:1246 msgid "Conform to the ISO 2011 C++ standard with GNU extensions (experimental and incomplete support)" -msgstr "Följ standarden ISO 2011 C++ med GNU-utökningar (experimetellt och ofullständigt stöd)" +msgstr "Följ standarden ISO 2011 C++ med GNU-utökningar (experimetellt och ofullständigt stöd)" #: c-family/c.opt:1250 msgid "Deprecated in favor of -std=gnu++11" -msgstr "Undanbedes till förmån för -std=gnu++11" +msgstr "Undanbedes till förmÃ¥n för -std=gnu++11" #: c-family/c.opt:1254 msgid "Conform to the ISO 2011 C standard with GNU extensions (experimental and incomplete support)" -msgstr "Följ standarden ISO 2011 C med GNU-utökningar (experimetellt och ofullständigt stöd)" +msgstr "Följ standarden ISO 2011 C med GNU-utökningar (experimetellt och ofullständigt stöd)" #: c-family/c.opt:1258 msgid "Deprecated in favor of -std=gnu11" -msgstr "Undanbedes till förmån för -std=gnu11" +msgstr "Undanbedes till förmÃ¥n för -std=gnu11" #: c-family/c.opt:1262 c-family/c.opt:1266 msgid "Conform to the ISO 1990 C standard with GNU extensions" -msgstr "Följ standarden ISO 1990 C med GNU-utökningar" +msgstr "Följ standarden ISO 1990 C med GNU-utökningar" #: c-family/c.opt:1270 msgid "Conform to the ISO 1999 C standard with GNU extensions" -msgstr "Följ standarden ISO 1999 C med GNU-utökningar" +msgstr "Följ standarden ISO 1999 C med GNU-utökningar" #: c-family/c.opt:1274 msgid "Deprecated in favor of -std=gnu99" -msgstr "Undanbedes till förmån för -std=gnu99" +msgstr "Undanbedes till förmÃ¥n för -std=gnu99" #: c-family/c.opt:1282 msgid "Conform to the ISO 1990 C standard as amended in 1994" -msgstr "Följ standarden ISO 1990 C med tillägg från 1994" +msgstr "Följ standarden ISO 1990 C med tillägg frÃ¥n 1994" #: c-family/c.opt:1290 msgid "Deprecated in favor of -std=iso9899:1999" -msgstr "Undanbedes till förmån för -std=iso9899:1999" +msgstr "Undanbedes till förmÃ¥n för -std=iso9899:1999" #: c-family/c.opt:1301 msgid "Enable traditional preprocessing" @@ -10120,31 +10120,31 @@ msgstr "Aktivera traditionell preprocessning" #: c-family/c.opt:1305 msgid "-trigraphs\tSupport ISO C trigraphs" -msgstr "-trigraphs\tStöd trigrafer enligt ISO C" +msgstr "-trigraphs\tStöd trigrafer enligt ISO C" #: c-family/c.opt:1309 msgid "Do not predefine system-specific and GCC-specific macros" -msgstr "Fördefiniera inte systemspecifika och GCC-specifika makron" +msgstr "Fördefiniera inte systemspecifika och GCC-specifika makron" #: go/lang.opt:42 msgid "-fgo-dump-<type>\tDump Go frontend internal information" -msgstr "-fgo-dump-<typ>\tSkriv ut Go-framändens interna information" +msgstr "-fgo-dump-<typ>\tSkriv ut Go-framändens interna information" #: go/lang.opt:46 msgid "-fgo-optimize-<type>\tTurn on optimization passes in the frontend" -msgstr "-fgo-optimize-<typ>\tSlå på optimeringspass i framänden" +msgstr "-fgo-optimize-<typ>\tSlÃ¥ pÃ¥ optimeringspass i framänden" #: go/lang.opt:50 msgid "-fgo-prefix=<string>\tSet package-specific prefix for exported Go names" -msgstr "-fgo-prefix=<sträng>\tSätt paketspecifika prefix för exporterade Go-namn" +msgstr "-fgo-prefix=<sträng>\tSätt paketspecifika prefix för exporterade Go-namn" #: go/lang.opt:54 msgid "Functions which return values must end with return statements" -msgstr "Funktioner med returvärden måste sluta med retursatser" +msgstr "Funktioner med returvärden mÃ¥ste sluta med retursatser" #: lto/lang.opt:29 msgid "Run the link-time optimizer in local transformation (LTRANS) mode." -msgstr "Kör optimeraren för länktillfället i läget lokala transformationer (LTRANS)." +msgstr "Kör optimeraren för länktillfället i läget lokala transformationer (LTRANS)." #: lto/lang.opt:33 msgid "Specify a file to which a list of files output by LTRANS is written." @@ -10152,71 +10152,71 @@ msgstr "Ange en fil till vilken en lista av filer som skrivs ut av LTRANS skrivs #: lto/lang.opt:37 msgid "Run the link-time optimizer in whole program analysis (WPA) mode." -msgstr "Kär optimeraren för länktillfället i läget helprogramanalys (WPA)." +msgstr "Kär optimeraren för länktillfället i läget helprogramanalys (WPA)." #: lto/lang.opt:41 msgid "The resolution file" -msgstr "Upplösningsfilen" +msgstr "Upplösningsfilen" #: common.opt:270 msgid "Display this information" -msgstr "Visa den här informationen" +msgstr "Visa den här informationen" #: common.opt:274 msgid "--help=<class>\tDisplay descriptions of a specific class of options. <class> is one or more of optimizers, target, warnings, undocumented, params" -msgstr "--help=<klass>\tVisa beskrivningar av en speciell klass av flaggor. <klass> är en eller flera av optimizers, target, warnings, undocumented, params" +msgstr "--help=<klass>\tVisa beskrivningar av en speciell klass av flaggor. <klass> är en eller flera av optimizers, target, warnings, undocumented, params" #: common.opt:386 msgid "Alias for --help=target" -msgstr "Alias för --help=target" +msgstr "Alias för --help=target" #: common.opt:411 msgid "--param <param>=<value>\tSet parameter <param> to value. See below for a complete list of parameters" -msgstr "--param <param>=<värde>\tSätt parameter <param> till värde. Se nedan för en komplett lista på parametrar" +msgstr "--param <param>=<värde>\tSätt parameter <param> till värde. Se nedan för en komplett lista pÃ¥ parametrar" #: common.opt:439 msgid "-O<number>\tSet optimization level to <number>" -msgstr "-O<nummer>\tSätt optimeringsnivå till <nummer>" +msgstr "-O<nummer>\tSätt optimeringsnivÃ¥ till <nummer>" #: common.opt:443 msgid "Optimize for space rather than speed" -msgstr "Optimera för storlek istället för hastighet" +msgstr "Optimera för storlek istället för hastighet" #: common.opt:447 msgid "Optimize for speed disregarding exact standards compliance" -msgstr "Optimera för hastighet och bortse från exakt efterlevnad av standarder" +msgstr "Optimera för hastighet och bortse frÃ¥n exakt efterlevnad av standarder" #: common.opt:487 msgid "This switch is deprecated; use -Wextra instead" -msgstr "Denna flagga bör undvikas, använd -Wextra istället" +msgstr "Denna flagga bör undvikas, använd -Wextra istället" #: common.opt:500 msgid "Warn about returning structures, unions or arrays" -msgstr "Varna för retur av poster, unioner eller vektorer" +msgstr "Varna för retur av poster, unioner eller vektorer" #: common.opt:504 msgid "Warn if an array is accessed out of bounds" -msgstr "Varna om en vektor accessas utanför gränserna" +msgstr "Varna om en vektor accessas utanför gränserna" #: common.opt:508 msgid "Warn about inappropriate attribute usage" -msgstr "Varna för felaktig användning av attribut" +msgstr "Varna för felaktig användning av attribut" #: common.opt:512 msgid "Warn about pointer casts which increase alignment" -msgstr "Varna för typkonvertering av pekare som ökar justeringen" +msgstr "Varna för typkonvertering av pekare som ökar justeringen" #: common.opt:516 msgid "Warn when a #warning directive is encountered" -msgstr "Varna när ett #warning-direktiv påträffas" +msgstr "Varna när ett #warning-direktiv pÃ¥träffas" #: common.opt:520 msgid "Warn about uses of __attribute__((deprecated)) declarations" -msgstr "Varna för användning av __attribute__((deprecated))-deklarationer" +msgstr "Varna för användning av __attribute__((deprecated))-deklarationer" #: common.opt:524 msgid "Warn when an optimization pass is disabled" -msgstr "Varna när ett optimerarpass är avaktiverat" +msgstr "Varna när ett optimerarpass är avaktiverat" #: common.opt:528 msgid "Treat all warnings as errors" @@ -10228,111 +10228,111 @@ msgstr "Behandla angivna varningar som fel" #: common.opt:536 msgid "Print extra (possibly unwanted) warnings" -msgstr "Skriv extra (möjligen oönskade) varningar" +msgstr "Skriv extra (möjligen oönskade) varningar" #: common.opt:540 msgid "Exit on the first error occurred" -msgstr "Avsluta vid första felet som uppstår" +msgstr "Avsluta vid första felet som uppstÃ¥r" #: common.opt:544 msgid "-Wframe-larger-than=<number>\tWarn if a function's stack frame requires more than <number> bytes" -msgstr "-Wframe-larger-than=<antal>\tVarna om en funktions stackram kräver mer en <antal> byte" +msgstr "-Wframe-larger-than=<antal>\tVarna om en funktions stackram kräver mer en <antal> byte" #: common.opt:548 msgid "Warn when attempting to free a non-heap object" -msgstr "Varna vid försök att frigöra ett icke-heap-objekt" +msgstr "Varna vid försök att frigöra ett icke-heap-objekt" #: common.opt:552 msgid "Warn when an inlined function cannot be inlined" -msgstr "Varna när en inline:ad funktion inte kan inline:as" +msgstr "Varna när en inline:ad funktion inte kan inline:as" #: common.opt:556 msgid "Warn when an atomic memory model parameter is known to be outside the valid range." -msgstr "Varna när en atomisk minnesmodellparameter med säkerhet är utanför det giltiga intervallet." +msgstr "Varna när en atomisk minnesmodellparameter med säkerhet är utanför det giltiga intervallet." #: common.opt:563 msgid "-Wlarger-than=<number>\tWarn if an object is larger than <number> bytes" -msgstr "-Wlarger-than=<antal>\tVarna för ett objekt är större än <antal> byte" +msgstr "-Wlarger-than=<antal>\tVarna för ett objekt är större än <antal> byte" #: common.opt:567 msgid "Warn if the loop cannot be optimized due to nontrivial assumptions." -msgstr "Varna för slingan inte kan optimeras på grund av icketriviala antaganden." +msgstr "Varna för slingan inte kan optimeras pÃ¥ grund av icketriviala antaganden." #: common.opt:571 common.opt:623 msgid "Warn about functions which might be candidates for __attribute__((noreturn))" -msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((noreturn))" +msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((noreturn))" #: common.opt:575 msgid "Warn about overflow in arithmetic expressions" -msgstr "Varna för spill i aritmetiska uttryck" +msgstr "Varna för spill i aritmetiska uttryck" #: common.opt:579 msgid "Warn when the packed attribute has no effect on struct layout" -msgstr "Varna när attributet packed inte har någon effekt på postformatet" +msgstr "Varna när attributet packed inte har nÃ¥gon effekt pÃ¥ postformatet" #: common.opt:583 msgid "Warn when padding is required to align structure members" -msgstr "Varna när utfyllnad krävs för att justera postmedlemmar" +msgstr "Varna när utfyllnad krävs för att justera postmedlemmar" #: common.opt:587 msgid "Warn when one local variable shadows another" -msgstr "Varna när en lokal variabel skuggar en annan" +msgstr "Varna när en lokal variabel skuggar en annan" #: common.opt:591 msgid "Warn when not issuing stack smashing protection for some reason" -msgstr "Varna när stacköverskrivningsskydd inte läggs ut av någon anledning" +msgstr "Varna när stacköverskrivningsskydd inte läggs ut av nÃ¥gon anledning" #: common.opt:595 msgid "Warn if stack usage might be larger than specified amount" -msgstr "Varna om stackanvändningen kan vara större än den angivna mängden" +msgstr "Varna om stackanvändningen kan vara större än den angivna mängden" #: common.opt:599 common.opt:603 msgid "Warn about code which might break strict aliasing rules" -msgstr "Varna för kod som kan bryta strikta aliasregler" +msgstr "Varna för kod som kan bryta strikta aliasregler" #: common.opt:607 common.opt:611 msgid "Warn about optimizations that assume that signed overflow is undefined" -msgstr "Varna för optimeringar som antar spill med tecken är odefinierat" +msgstr "Varna för optimeringar som antar spill med tecken är odefinierat" #: common.opt:615 msgid "Warn about functions which might be candidates for __attribute__((const))" -msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((const))" +msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((const))" #: common.opt:619 msgid "Warn about functions which might be candidates for __attribute__((pure))" -msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((pure))" +msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((pure))" #: common.opt:627 msgid "Warn about enumerated switches, with no default, missing a case" -msgstr "Varna när hopptabeller för uppräkningstyper inte har standardfall och saknar ett fall" +msgstr "Varna när hopptabeller för uppräkningstyper inte har standardfall och saknar ett fall" #: common.opt:631 msgid "Warn about enumerated switches missing a \"default:\" statement" -msgstr "Varna för uppräkningshopptabeller saknar en \"default:\"-sats" +msgstr "Varna för uppräkningshopptabeller saknar en â€default:â€-sats" #: common.opt:635 msgid "Warn about all enumerated switches missing a specific case" -msgstr "Varna för alla uppräkningshopptabeller som saknar ett specifikt fall" +msgstr "Varna för alla uppräkningshopptabeller som saknar ett specifikt fall" #: common.opt:639 msgid "Do not suppress warnings from system headers" -msgstr "Undertryck inte varningar från systemhuvudfiler" +msgstr "Undertryck inte varningar frÃ¥n systemhuvudfiler" #: common.opt:643 msgid "Warn whenever a trampoline is generated" -msgstr "Varna närhelst en trampolin genereras" +msgstr "Varna närhelst en trampolin genereras" #: common.opt:647 msgid "Warn if a comparison is always true or always false due to the limited range of the data type" -msgstr "Varna om en jämförelse alltid är sann eller falsk på grund av begränsat intervall för datatypen" +msgstr "Varna om en jämförelse alltid är sann eller falsk pÃ¥ grund av begränsat intervall för datatypen" #: common.opt:651 msgid "Warn about uninitialized automatic variables" -msgstr "Varna för oinitierade automatiska variabler" +msgstr "Varna för oinitierade automatiska variabler" #: common.opt:655 msgid "Warn about maybe uninitialized automatic variables" -msgstr "Varna för eventuellt oinitierade automatiska variabler" +msgstr "Varna för eventuellt oinitierade automatiska variabler" #: common.opt:663 msgid "Enable all -Wunused- warnings" @@ -10340,39 +10340,39 @@ msgstr "Aktivera alla -Wunused-varningar" #: common.opt:667 msgid "Warn when a function parameter is only set, otherwise unused" -msgstr "Varna när en funktionsparameter bara sätts, och i övrigt är oanvänd" +msgstr "Varna när en funktionsparameter bara sätts, och i övrigt är oanvänd" #: common.opt:671 msgid "Warn when a variable is only set, otherwise unused" -msgstr "Varna när en variabel bara sätts, och i övrigt är oanvänd" +msgstr "Varna när en variabel bara sätts, och i övrigt är oanvänd" #: common.opt:675 msgid "Warn when a function is unused" -msgstr "Varna när en funktion är oanvänd" +msgstr "Varna när en funktion är oanvänd" #: common.opt:679 msgid "Warn when a label is unused" -msgstr "Varna när en etikett är oanvänd" +msgstr "Varna när en etikett är oanvänd" #: common.opt:683 msgid "Warn when a function parameter is unused" -msgstr "Varna när en funktionsparameter är oanvänd" +msgstr "Varna när en funktionsparameter är oanvänd" #: common.opt:687 msgid "Warn when an expression value is unused" -msgstr "Varna när ett uttrycksvärde är oanvänt" +msgstr "Varna när ett uttrycksvärde är oanvänt" #: common.opt:691 msgid "Warn when a variable is unused" -msgstr "Varna när en variabel är oanvänd" +msgstr "Varna när en variabel är oanvänd" #: common.opt:695 msgid "Warn in case profiles in -fprofile-use do not match" -msgstr "Varna om profiler i -fprofile-use inte stämmer" +msgstr "Varna om profiler i -fprofile-use inte stämmer" #: common.opt:699 msgid "Warn when a vector operation is compiled outside the SIMD" -msgstr "Varbna när en vektoroperation kompileras utanför SIMD:n" +msgstr "Varbna när en vektoroperation kompileras utanför SIMD:n" #: common.opt:715 msgid "-aux-info <file>\tEmit declaration information into <file>" @@ -10380,15 +10380,15 @@ msgstr "-aux-info <fil>\tGenerera deklarationsinfo till <fil>" #: common.opt:734 msgid "-d<letters>\tEnable dumps from specific passes of the compiler" -msgstr "-d<bokstäver>\tSlå på dumpning från specifika pass i kompilatorn" +msgstr "-d<bokstäver>\tSlÃ¥ pÃ¥ dumpning frÃ¥n specifika pass i kompilatorn" #: common.opt:738 msgid "-dumpbase <file>\tSet the file basename to be used for dumps" -msgstr "-dumpbase <fil>\tAnge basfilnamn att användas för dumpar" +msgstr "-dumpbase <fil>\tAnge basfilnamn att användas för dumpar" #: common.opt:742 msgid "-dumpdir <dir>\tSet the directory name to be used for dumps" -msgstr "-dumpdir <kat>\tAnge katalognamn att användas för dumpar" +msgstr "-dumpdir <kat>\tAnge katalognamn att användas för dumpar" #: common.opt:798 msgid "Align the start of functions" @@ -10396,7 +10396,7 @@ msgstr "Justera starten av funktioner" #: common.opt:805 msgid "Align labels which are only reached by jumping" -msgstr "Justera etiketter som bara nås via hopp" +msgstr "Justera etiketter som bara nÃ¥s via hopp" #: common.opt:812 msgid "Align all labels" @@ -10408,7 +10408,7 @@ msgstr "Justera starten av slingor" #: common.opt:842 msgid "Generate unwind tables that are exact at each instruction boundary" -msgstr "Generera tabeller för upprullning som är exakta vid varje instruktionsgräns" +msgstr "Generera tabeller för upprullning som är exakta vid varje instruktionsgräns" #: common.opt:846 msgid "Generate auto-inc/dec instructions" @@ -10416,27 +10416,27 @@ msgstr "Generera auto-inc/dec-instruktioner" #: common.opt:854 msgid "Generate code to check bounds before indexing arrays" -msgstr "Generera kod för att kontrollera gränser före indexering i vektorer" +msgstr "Generera kod för att kontrollera gränser före indexering i vektorer" #: common.opt:858 msgid "Replace add, compare, branch with branch on count register" -msgstr "Ersätt addition, jämförelse, grena med gren vid räknarregister" +msgstr "Ersätt addition, jämförelse, grena med gren vid räknarregister" #: common.opt:862 msgid "Use profiling information for branch probabilities" -msgstr "Använd profileringsinformation för grensannolikheter" +msgstr "Använd profileringsinformation för grensannolikheter" #: common.opt:866 msgid "Perform branch target load optimization before prologue / epilogue threading" -msgstr "Utför optimering av grenmålsinläsning före prolog-/epilogtrådning" +msgstr "Utför optimering av grenmÃ¥lsinläsning före prolog-/epilogtrÃ¥dning" #: common.opt:870 msgid "Perform branch target load optimization after prologue / epilogue threading" -msgstr "Utför optimering av grenmålsinläsning efter prolog-/epilogtrådning" +msgstr "Utför optimering av grenmÃ¥lsinläsning efter prolog-/epilogtrÃ¥dning" #: common.opt:874 msgid "Restrict target load migration not to re-use registers in any basic block" -msgstr "Begränsa migration av målinläsning till att inte återanvända register i något grundblock" +msgstr "Begränsa migration av mÃ¥linläsning till att inte Ã¥teranvända register i nÃ¥got grundblock" #: common.opt:878 msgid "-fcall-saved-<register>\tMark <register> as being preserved across functions" @@ -10444,7 +10444,7 @@ msgstr "-fcall-saved-<register>\tMarkera att <register> bevaras mellan funktione #: common.opt:882 msgid "-fcall-used-<register>\tMark <register> as being corrupted by function calls" -msgstr "-fcall-used-<register>\tMarkera att <register> förstörs av funktionsanrop" +msgstr "-fcall-used-<register>\tMarkera att <register> förstörs av funktionsanrop" #: common.opt:889 msgid "Save registers around function calls" @@ -10452,51 +10452,51 @@ msgstr "Spara register runt funktionsanrop" #: common.opt:893 msgid "Compare the results of several data dependence analyzers." -msgstr "Jämför resultaten av flera analyserare av databeroende." +msgstr "Jämför resultaten av flera analyserare av databeroende." #: common.opt:897 msgid "Looks for opportunities to reduce stack adjustments and stack references." -msgstr "Söker efter möjligheter att minska stackjusteringar och stackreferenser." +msgstr "Söker efter möjligheter att minska stackjusteringar och stackreferenser." #: common.opt:901 msgid "Do not put uninitialized globals in the common section" -msgstr "Lägg inte oinitierade globala i den gemensamma sektionen" +msgstr "Lägg inte oinitierade globala i den gemensamma sektionen" #: common.opt:909 msgid "-fcompare-debug[=<opts>]\tCompile with and without e.g. -gtoggle, and compare the final-insns dump" -msgstr "-fcompare-debug[=<flgr>]\tKompilera med och utan t.ex. -gtoggle, och jämför slutinstruktionsdumpen" +msgstr "-fcompare-debug[=<flgr>]\tKompilera med och utan t.ex. -gtoggle, och jämför slutinstruktionsdumpen" #: common.opt:913 msgid "Run only the second compilation of -fcompare-debug" -msgstr "Kör endast den andra kompileringen av -fcompare-debug" +msgstr "Kör endast den andra kompileringen av -fcompare-debug" #: common.opt:917 msgid "Perform comparison elimination after register allocation has finished" -msgstr "Utför eliminering av jämförelser efter registertilldelningen har avslutats" +msgstr "Utför eliminering av jämförelser efter registertilldelningen har avslutats" #: common.opt:921 msgid "Do not perform optimizations increasing noticeably stack usage" -msgstr "Utför inte optimieringar som märkbart ökar stackanvändningen" +msgstr "Utför inte optimieringar som märkbart ökar stackanvändningen" #: common.opt:925 msgid "Perform a register copy-propagation optimization pass" -msgstr "Utför ett optimeringspass för kopieringspropagering av register" +msgstr "Utför ett optimeringspass för kopieringspropagering av register" #: common.opt:929 msgid "Perform cross-jumping optimization" -msgstr "Utför optimering för korshopp" +msgstr "Utför optimering för korshopp" #: common.opt:933 msgid "When running CSE, follow jumps to their targets" -msgstr "När CSE körs, följ hopp till deras mål" +msgstr "När CSE körs, följ hopp till deras mÃ¥l" #: common.opt:941 msgid "Omit range reduction step when performing complex division" -msgstr "Uteslut intervallreduktionssteget när komplex division görs" +msgstr "Uteslut intervallreduktionssteget när komplex division görs" #: common.opt:945 msgid "Complex multiplication and division follow Fortran rules" -msgstr "Komplex multiplikation och division följer Fortranregler" +msgstr "Komplex multiplikation och division följer Fortranregler" #: common.opt:949 msgid "Place data items into their own section" @@ -10504,43 +10504,43 @@ msgstr "Placera dataobjekt i sin egen sektion" #: common.opt:953 msgid "List all available debugging counters with their limits and counts." -msgstr "Lista alla tillgängliga felsökningsräknare med deras gränser och värden." +msgstr "Lista alla tillgängliga felsökningsräknare med deras gränser och värden." #: common.opt:957 msgid "-fdbg-cnt=<counter>:<limit>[,<counter>:<limit>,...]\tSet the debug counter limit. " -msgstr "-fdbg-cnt=<räknare>:<gräns>[,<räknare>:<gräns>,...]\tSätt gränsen för felsökningsräknare. " +msgstr "-fdbg-cnt=<räknare>:<gräns>[,<räknare>:<gräns>,...]\tSätt gränsen för felsökningsräknare. " #: common.opt:961 msgid "Map one directory name to another in debug information" -msgstr "Översätt ett katalognamn till ett annat i felsökningsinformation" +msgstr "Översätt ett katalognamn till ett annat i felsökningsinformation" #: common.opt:965 msgid "Output .debug_types section when using DWARF v4 debuginfo." -msgstr "Mata ut en .debug_types-sektion när DWARF v4 felsökningsinformation används." +msgstr "Mata ut en .debug_types-sektion när DWARF v4 felsökningsinformation används." #: common.opt:971 msgid "Defer popping functions args from stack until later" -msgstr "Senarelägg borttagandet av funktionsargument från stacken" +msgstr "Senarelägg borttagandet av funktionsargument frÃ¥n stacken" #: common.opt:975 msgid "Attempt to fill delay slots of branch instructions" -msgstr "Försök fylla fördröjningsfack av greninstruktioner" +msgstr "Försök fylla fördröjningsfack av greninstruktioner" #: common.opt:979 msgid "Delete useless null pointer checks" -msgstr "Tag bort onödiga nollpekarkontroller" +msgstr "Tag bort onödiga nollpekarkontroller" #: common.opt:983 msgid "Try to convert virtual calls to direct ones." -msgstr "Försök att konvertera virtuella anrop till direkta." +msgstr "Försök att konvertera virtuella anrop till direkta." #: common.opt:987 msgid "-fdiagnostics-show-location=[once|every-line]\tHow often to emit source location at the beginning of line-wrapped diagnostics" -msgstr "-fdiagnostics-show-location=[once|every-line]\tAnger hur ofta källkodspositioner skall skrivas ut i början av utskrift vid radbrytning" +msgstr "-fdiagnostics-show-location=[once|every-line]\tAnger hur ofta källkodspositioner skall skrivas ut i början av utskrift vid radbrytning" #: common.opt:1004 msgid "Amend appropriate diagnostic messages with the command line option that controls them" -msgstr "Lägg till lämpliga diagnostiska meddelanden till kommandoradsflaggan som styr dem" +msgstr "Lägg till lämpliga diagnostiska meddelanden till kommandoradsflaggan som styr dem" #: common.opt:1008 msgid "-fdisable-[tree|rtl|ipa]-<pass>=range1+range2 disables an optimization pass" @@ -10556,7 +10556,7 @@ msgstr "-fdump-<typ>\tSkriv ut diverse intern kompilatorinformation till en fil" #: common.opt:1023 msgid "-fdump-final-insns=filename\tDump to filename the insns at the end of translation" -msgstr "-fdump-final-insns=filnamn\tSkriv instruktionerna vid slutet av översättningen till filnamn" +msgstr "-fdump-final-insns=filnamn\tSkriv instruktionerna vid slutet av översättningen till filnamn" #: common.opt:1027 msgid "-fdump-go-spec=filename\tWrite all declarations to file as Go code" @@ -10564,7 +10564,7 @@ msgstr "-fdump-go-spec=filnamn\tSkriv alla deklarationer till fil som Go-kod" #: common.opt:1031 msgid "Suppress output of addresses in debugging dumps" -msgstr "Undertryck utskrift av adresser i felsökningsutskrifter" +msgstr "Undertryck utskrift av adresser i felsökningsutskrifter" #: common.opt:1035 msgid "Dump optimization passes" @@ -10572,11 +10572,11 @@ msgstr "Dumpa optimeringspass" #: common.opt:1039 msgid "Suppress output of instruction numbers, line number notes and addresses in debugging dumps" -msgstr "Undertryck utskrift av instruktionsantal, radnummernoteringar och -adresser i felsökningsutskrifter" +msgstr "Undertryck utskrift av instruktionsantal, radnummernoteringar och -adresser i felsökningsutskrifter" #: common.opt:1043 msgid "Suppress output of previous and next insn numbers in debugging dumps" -msgstr "Undertryck utskrift föregående och nästa instruktionsnummer i felsökningsutskrifter" +msgstr "Undertryck utskrift föregÃ¥ende och nästa instruktionsnummer i felsökningsutskrifter" #: common.opt:1047 msgid "Enable CFI tables via GAS assembler directives." @@ -10584,23 +10584,23 @@ msgstr "Aktivera CFI-tabeller via GAS-assemblerdirektiv." #: common.opt:1051 msgid "Perform early inlining" -msgstr "Utför tidig inline:ing" +msgstr "Utför tidig inline:ing" #: common.opt:1055 msgid "Perform DWARF2 duplicate elimination" -msgstr "Utför dubletteliminering i DWARF2" +msgstr "Utför dubletteliminering i DWARF2" #: common.opt:1059 msgid "Perform interprocedural reduction of aggregates" -msgstr "Utför interprocedurell reduktion av aggregat" +msgstr "Utför interprocedurell reduktion av aggregat" #: common.opt:1063 common.opt:1067 msgid "Perform unused type elimination in debug info" -msgstr "Utför eliminering av oanvända typer i felsökningsinformation" +msgstr "Utför eliminering av oanvända typer i felsökningsinformation" #: common.opt:1071 msgid "Do not suppress C++ class debug information." -msgstr "Undertryck inte felsökningsinformation för C++-klasser." +msgstr "Undertryck inte felsökningsinformation för C++-klasser." #: common.opt:1075 msgid "Enable exception handling" @@ -10608,49 +10608,49 @@ msgstr "Aktivera undantagshantering" #: common.opt:1079 msgid "Perform a number of minor, expensive optimizations" -msgstr "Utför ett antal smärre, dyra optimeringar" +msgstr "Utför ett antal smärre, dyra optimeringar" #: common.opt:1083 msgid "-fexcess-precision=[fast|standard]\tSpecify handling of excess floating-point precision" -msgstr "-fexecc-precision=[fast|standard]\tAnge hantering av överskjutande precision på flyttal" +msgstr "-fexecc-precision=[fast|standard]\tAnge hantering av överskjutande precision pÃ¥ flyttal" #: common.opt:1086 #, c-format msgid "unknown excess precision style %qs" -msgstr "okänd stil för överskjutande precision %qs" +msgstr "okänd stil för överskjutande precision %qs" #: common.opt:1099 msgid "Output lto objects containing both the intermediate language and binary output." -msgstr "Mata ut lto-objekt som innehåller både mellanspråket och binärutdata." +msgstr "Mata ut lto-objekt som innehÃ¥ller bÃ¥de mellansprÃ¥ket och binärutdata." #: common.opt:1103 msgid "Assume no NaNs or infinities are generated" -msgstr "Anta att inga NaN:er eller oändligheter genereras" +msgstr "Anta att inga NaN:er eller oändligheter genereras" #: common.opt:1107 msgid "-ffixed-<register>\tMark <register> as being unavailable to the compiler" -msgstr "-ffixed-<register>\tMarkera <register> som ej tillgängligt för kompilatorn" +msgstr "-ffixed-<register>\tMarkera <register> som ej tillgängligt för kompilatorn" #: common.opt:1111 msgid "Don't allocate floats and doubles in extended-precision registers" -msgstr "Allokera inte float och double i register med utökad precision" +msgstr "Allokera inte float och double i register med utökad precision" #: common.opt:1119 msgid "Perform a forward propagation pass on RTL" -msgstr "Utför ett framåtpropageringspass på RTL" +msgstr "Utför ett framÃ¥tpropageringspass pÃ¥ RTL" #: common.opt:1123 msgid "-ffp-contract=[off|on|fast] Perform floating-point expression contraction." -msgstr "-ffp-contract=[off|on|fast] Utför kontraktion av flyttalsuttryck." +msgstr "-ffp-contract=[off|on|fast] Utför kontraktion av flyttalsuttryck." #: common.opt:1126 #, c-format msgid "unknown floating point contraction style %qs" -msgstr "okänd stil för flyttalssammandragning %qs" +msgstr "okänd stil för flyttalssammandragning %qs" #: common.opt:1143 msgid "Allow function addresses to be held in registers" -msgstr "Tillåt att funktionsadresser läggs i register" +msgstr "TillÃ¥t att funktionsadresser läggs i register" #: common.opt:1147 msgid "Place each function into its own section" @@ -10658,27 +10658,27 @@ msgstr "Placera varje funktion i sin egen sektion" #: common.opt:1151 msgid "Perform global common subexpression elimination" -msgstr "Utför global eliminering av gemensamma deluttryck" +msgstr "Utför global eliminering av gemensamma deluttryck" #: common.opt:1155 msgid "Perform enhanced load motion during global common subexpression elimination" -msgstr "Utför förbättrad förflyttning av inläsning under global eliminering av gemensamma deluttryck" +msgstr "Utför förbättrad förflyttning av inläsning under global eliminering av gemensamma deluttryck" #: common.opt:1159 msgid "Perform store motion after global common subexpression elimination" -msgstr "Utför förflyttning av lagring efter global eliminering av gemensamma deluttryck" +msgstr "Utför förflyttning av lagring efter global eliminering av gemensamma deluttryck" #: common.opt:1163 msgid "Perform redundant load after store elimination in global common subexpression" -msgstr "Utför eliminering av överflödig inläsning efter lagring i globala gemensamma deluttryck" +msgstr "Utför eliminering av överflödig inläsning efter lagring i globala gemensamma deluttryck" #: common.opt:1168 msgid "Perform global common subexpression elimination after register allocation" -msgstr "Utför global eliminering av gemensamma deluttryck efter registertilldelning" +msgstr "Utför global eliminering av gemensamma deluttryck efter registertilldelning" #: common.opt:1174 msgid "Enable in and out of Graphite representation" -msgstr "Aktivera in och ut från Graphite-representation" +msgstr "Aktivera in och ut frÃ¥n Graphite-representation" #: common.opt:1178 msgid "Enable Graphite Identity transformation" @@ -10690,7 +10690,7 @@ msgstr "Markera alla slingor som parallella" #: common.opt:1186 msgid "Enable Loop Strip Mining transformation" -msgstr "Aktivera transformationen utgrävning av remsor (strip mining) i slingor" +msgstr "Aktivera transformationen utgrävning av remsor (strip mining) i slingor" #: common.opt:1190 msgid "Enable Loop Interchange transformation" @@ -10702,7 +10702,7 @@ msgstr "Aktivera slingblockeringstransformation" #: common.opt:1198 msgid "Enable support for GNU transactional memory" -msgstr "Aktivera stöd för GNU:s transationsminne" +msgstr "Aktivera stöd för GNU:s transationsminne" #: common.opt:1202 msgid "Enable Loop Flattening transformation" @@ -10710,7 +10710,7 @@ msgstr "Aktivera slingtillplattningstransformation" #: common.opt:1206 msgid "Force bitfield accesses to match their type width" -msgstr "Tvinga bitfältsåtkomster att matcha sin typbredd" +msgstr "Tvinga bitfältsÃ¥tkomster att matcha sin typbredd" #: common.opt:1210 msgid "Enable guessing of branch probabilities" @@ -10722,19 +10722,19 @@ msgstr "Hantera #ident-direktiv" #: common.opt:1222 msgid "Perform conversion of conditional jumps to branchless equivalents" -msgstr "Utför konvertering av villkorliga hopp till grenlösa motsvarigheter" +msgstr "Utför konvertering av villkorliga hopp till grenlösa motsvarigheter" #: common.opt:1226 msgid "Perform conversion of conditional jumps to conditional execution" -msgstr "Utför konvertering av villkorliga hopp till villkorlig exekvering" +msgstr "Utför konvertering av villkorliga hopp till villkorlig exekvering" #: common.opt:1230 msgid "Convert conditional jumps in innermost loops to branchless equivalents" -msgstr "Konvertera villkorliga hopp i innersta slingor till grenlösa motsvarigheter" +msgstr "Konvertera villkorliga hopp i innersta slingor till grenlösa motsvarigheter" #: common.opt:1234 msgid "Also if-convert conditional jumps containing memory writes" -msgstr "Även if-convert villkorliga hopp som innehåller minnesskrivningar" +msgstr "Även if-convert villkorliga hopp som innehÃ¥ller minnesskrivningar" #: common.opt:1242 msgid "Do not generate .size directives" @@ -10742,15 +10742,15 @@ msgstr "Generera inte .size-direktiv" #: common.opt:1246 msgid "Perform indirect inlining" -msgstr "Utför indirekt inline:ing" +msgstr "Utför indirekt inline:ing" #: common.opt:1255 msgid "Pay attention to the \"inline\" keyword" -msgstr "Ta hänsyn till nyckelordet \"inline\"" +msgstr "Ta hänsyn till nyckelordet â€inlineâ€" #: common.opt:1259 msgid "Integrate simple functions into their callers when code size is known to not growth" -msgstr "Integrera enkla funktioner i deras anropare när det är klart att kodstorleken inte växer" +msgstr "Integrera enkla funktioner i deras anropare när det är klart att kodstorleken inte växer" #: common.opt:1263 msgid "Integrate simple functions into their callers" @@ -10758,107 +10758,107 @@ msgstr "Integrera enkla funktioner i deras anropare" #: common.opt:1267 msgid "Integrate functions called once into their callers" -msgstr "Integrera funktioner anropade en gång i deras anropare" +msgstr "Integrera funktioner anropade en gÃ¥ng i deras anropare" #: common.opt:1274 msgid "-finline-limit=<number>\tLimit the size of inlined functions to <number>" -msgstr "-finline-limit=<tal>\tBegränsa storlek på inline-funktioner till <tal>" +msgstr "-finline-limit=<tal>\tBegränsa storlek pÃ¥ inline-funktioner till <tal>" #: common.opt:1278 msgid "Inline __atomic operations when a lock free instruction sequence is available." -msgstr "Inline:a __atomic-operationer när en låsningsfri instruktionssekvens är tillgänglig." +msgstr "Inline:a __atomic-operationer när en lÃ¥sningsfri instruktionssekvens är tillgänglig." #: common.opt:1282 msgid "Instrument function entry and exit with profiling calls" -msgstr "Instrumentera funktionsingång och -utgång med profileringsanrop" +msgstr "Instrumentera funktionsingÃ¥ng och -utgÃ¥ng med profileringsanrop" #: common.opt:1286 msgid "-finstrument-functions-exclude-function-list=name,... Do not instrument listed functions" -msgstr "-finstrument-functions-exclude-function-list=namn,... Instrumentera inte uppräknade funktioner" +msgstr "-finstrument-functions-exclude-function-list=namn,... Instrumentera inte uppräknade funktioner" #: common.opt:1290 msgid "-finstrument-functions-exclude-file-list=filename,... Do not instrument functions listed in files" -msgstr "-finstrument-functions-exclude-file-list=filenamn,... Instrumentera inte funktioner uppräknade i filerna" +msgstr "-finstrument-functions-exclude-file-list=filenamn,... Instrumentera inte funktioner uppräknade i filerna" #: common.opt:1294 msgid "Perform Interprocedural constant propagation" -msgstr "Utför konstantpropagering mellan procedurer" +msgstr "Utför konstantpropagering mellan procedurer" #: common.opt:1298 msgid "Perform cloning to make Interprocedural constant propagation stronger" -msgstr "Utför kloning för att göra konstantpropagering mellan procedurer starkare" +msgstr "Utför kloning för att göra konstantpropagering mellan procedurer starkare" #: common.opt:1302 msgid "Perform interprocedural profile propagation" -msgstr "Utför profileringspropagering mellan procedurer" +msgstr "Utför profileringspropagering mellan procedurer" #: common.opt:1306 msgid "Perform interprocedural points-to analysis" -msgstr "Utför pekar-på-analyser mellan procedurer" +msgstr "Utför pekar-pÃ¥-analyser mellan procedurer" #: common.opt:1310 msgid "Discover pure and const functions" -msgstr "Upptäck pure- och const-funktioner" +msgstr "Upptäck pure- och const-funktioner" #: common.opt:1314 msgid "Discover readonly and non addressable static variables" -msgstr "Upptäck endast läsbara och icke adresserbara statiska variabler" +msgstr "Upptäck endast läsbara och icke adresserbara statiska variabler" # Avhugget p.g.a. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34352 -# Hela meddelandet är översatt +# Hela meddelandet är översatt #: common.opt:1318 msgid "Perform matrix layout flattening and transposing based" -msgstr "Utför tillplattning och transponering av matriser baserat på profileringsinformation" +msgstr "Utför tillplattning och transponering av matriser baserat pÃ¥ profileringsinformation" #: common.opt:1327 msgid "-fira-algorithm=[CB|priority] Set the used IRA algorithm" -msgstr "-fira-algorithm=[CB|priority] Bestäm den använda IRA-algoritmen" +msgstr "-fira-algorithm=[CB|priority] Bestäm den använda IRA-algoritmen" #: common.opt:1330 #, c-format msgid "unknown IRA algorithm %qs" -msgstr "okänd IRA-algoritm %qs" +msgstr "okänd IRA-algoritm %qs" #: common.opt:1340 msgid "-fira-region=[one|all|mixed] Set regions for IRA" -msgstr "-fira-region=[one|all|mixed] Sätt regioner för IRA" +msgstr "-fira-region=[one|all|mixed] Sätt regioner för IRA" #: common.opt:1343 #, c-format msgid "unknown IRA region %qs" -msgstr "okänd IRA-region %qs" +msgstr "okänd IRA-region %qs" #: common.opt:1356 msgid "Use IRA based register pressure calculation" -msgstr "Använd IRA-baserad registertryckberäkning" +msgstr "Använd IRA-baserad registertryckberäkning" #: common.opt:1361 msgid "Share slots for saving different hard registers." -msgstr "Dela fack för att spara olika hårda register." +msgstr "Dela fack för att spara olika hÃ¥rda register." #: common.opt:1365 msgid "Share stack slots for spilled pseudo-registers." -msgstr "Dela stackfack för spillda pseudoregister." +msgstr "Dela stackfack för spillda pseudoregister." #: common.opt:1369 msgid "-fira-verbose=<number>\tControl IRA's level of diagnostic messages." -msgstr "-fira-verbose=<tal>\tStyr IRA:ns nivå på diagnostikmeddelanden." +msgstr "-fira-verbose=<tal>\tStyr IRA:ns nivÃ¥ pÃ¥ diagnostikmeddelanden." #: common.opt:1373 msgid "Optimize induction variables on trees" -msgstr "Optimera induktionsvariabler på träd" +msgstr "Optimera induktionsvariabler pÃ¥ träd" #: common.opt:1377 msgid "Use jump tables for sufficiently large switch statements" -msgstr "Använd hopptabeller för tillräckligt stora switch-satser" +msgstr "Använd hopptabeller för tillräckligt stora switch-satser" #: common.opt:1381 msgid "Generate code for functions even if they are fully inlined" -msgstr "Generera kod för funktioner även om de är fullständigt inline:ade" +msgstr "Generera kod för funktioner även om de är fullständigt inline:ade" #: common.opt:1385 msgid "Emit static const variables even if they are not used" -msgstr "Mata ut static const-variabler även om de inte används" +msgstr "Mata ut static const-variabler även om de inte används" #: common.opt:1389 msgid "Give external symbols a leading underscore" @@ -10866,35 +10866,35 @@ msgstr "Ge externa symboler ett inledande understrykningstecken" #: common.opt:1397 msgid "Enable link-time optimization." -msgstr "Aktivera länkningsoptimeringar." +msgstr "Aktivera länkningsoptimeringar." #: common.opt:1401 msgid "Link-time optimization with number of parallel jobs or jobserver." -msgstr "Optimeringar vid länktillfället med flera parallella jobb eller jobbserver." +msgstr "Optimeringar vid länktillfället med flera parallella jobb eller jobbserver." #: common.opt:1405 msgid "Partition functions and vars at linktime based on object files they originate from" -msgstr "Partitionera funktioner och variabler vid länktillfället baserat på vilka objektfiler de härrör från" +msgstr "Partitionera funktioner och variabler vid länktillfället baserat pÃ¥ vilka objektfiler de härrör frÃ¥n" #: common.opt:1409 msgid "Partition functions and vars at linktime into approximately same sized buckets" -msgstr "Partitionera funktioner och variabler vid länktillfället i hinkar av ungefär samma storlek" +msgstr "Partitionera funktioner och variabler vid länktillfället i hinkar av ungefär samma storlek" #: common.opt:1413 msgid "Disable partioning and streaming" -msgstr "Avaktivera partitionering och strömning" +msgstr "Avaktivera partitionering och strömning" #: common.opt:1418 msgid "-flto-compression-level=<number>\tUse zlib compression level <number> for IL" -msgstr "-flto-compression-level=<tal>\tAnvänd zlib-komprimering på nivå <tal> för IL" +msgstr "-flto-compression-level=<tal>\tAnvänd zlib-komprimering pÃ¥ nivÃ¥ <tal> för IL" #: common.opt:1422 msgid "Report various link-time optimization statistics" -msgstr "Rapoortera diverse optimeringsstatistik från länkningen" +msgstr "Rapoortera diverse optimeringsstatistik frÃ¥n länkningen" #: common.opt:1426 msgid "Set errno after built-in math functions" -msgstr "Sätt errno efter inbyggda matematikfunktioner" +msgstr "Sätt errno efter inbyggda matematikfunktioner" #: common.opt:1430 msgid "-fmax-errors=<number>\tMaximum number of errors to report" @@ -10906,55 +10906,55 @@ msgstr "Rapportera om permanent minnesallokering" #: common.opt:1441 msgid "Attempt to merge identical constants and constant variables" -msgstr "Försök slå samman identiska konstanter och konstanta variabler" +msgstr "Försök slÃ¥ samman identiska konstanter och konstanta variabler" #: common.opt:1445 msgid "Attempt to merge identical constants across compilation units" -msgstr "Försök slå samman identiska konstanter mellan kompileringsenheter" +msgstr "Försök slÃ¥ samman identiska konstanter mellan kompileringsenheter" #: common.opt:1449 msgid "Attempt to merge identical debug strings across compilation units" -msgstr "Försök slå samman identiska felsökningssträngar mellan kompileringsenheter" +msgstr "Försök slÃ¥ samman identiska felsökningssträngar mellan kompileringsenheter" #: common.opt:1453 msgid "-fmessage-length=<number>\tLimit diagnostics to <number> characters per line. 0 suppresses line-wrapping" -msgstr "-fmessage-length=<antal>\tBegränsa felmeddelandens längd till <antal> tecken per rad. 0 stänger av radbrytning" +msgstr "-fmessage-length=<antal>\tBegränsa felmeddelandens längd till <antal> tecken per rad. 0 stänger av radbrytning" #: common.opt:1457 msgid "Perform SMS based modulo scheduling before the first scheduling pass" -msgstr "Utför SMS-baserad modulo-schemaläggning före det första schemaläggningspasset" +msgstr "Utför SMS-baserad modulo-schemaläggning före det första schemaläggningspasset" #: common.opt:1461 msgid "Perform SMS based modulo scheduling with register moves allowed" -msgstr "Utför SMS-baserad modulo-schemaläggning med tillåten registerförflyttning" +msgstr "Utför SMS-baserad modulo-schemaläggning med tillÃ¥ten registerförflyttning" #: common.opt:1465 msgid "Move loop invariant computations out of loops" -msgstr "Flytta slinginvarianta beräkningar ut från slingor" +msgstr "Flytta slinginvarianta beräkningar ut frÃ¥n slingor" #: common.opt:1469 msgid "Use the RTL dead code elimination pass" -msgstr "Använd passet på RTL för eliminering av död kod" +msgstr "Använd passet pÃ¥ RTL för eliminering av död kod" #: common.opt:1473 msgid "Use the RTL dead store elimination pass" -msgstr "Använd passet på RTL för eliminering av död lagring" +msgstr "Använd passet pÃ¥ RTL för eliminering av död lagring" #: common.opt:1477 msgid "Enable/Disable the traditional scheduling in loops that already passed modulo scheduling" -msgstr "Aktivera/deaktivera den traditionella schemaläggningen i slingor som redan passerat modulo-schemaläggning" +msgstr "Aktivera/deaktivera den traditionella schemaläggningen i slingor som redan passerat modulo-schemaläggning" #: common.opt:1481 msgid "Support synchronous non-call exceptions" -msgstr "Stöd synkrona icke-anropsundantag" +msgstr "Stöd synkrona icke-anropsundantag" #: common.opt:1485 msgid "When possible do not generate stack frames" -msgstr "Låt bli att generera stackramar när det är möjligt" +msgstr "LÃ¥t bli att generera stackramar när det är möjligt" #: common.opt:1489 msgid "Do the full register move optimization pass" -msgstr "Gör det fullständiga registerförflyttningsoptimeringspasset" +msgstr "Gör det fullständiga registerförflyttningsoptimeringspasset" #: common.opt:1493 msgid "Optimize sibling and tail recursive calls" @@ -10962,107 +10962,107 @@ msgstr "Optimera syskon- och svansrekursiva anrop" #: common.opt:1497 msgid "Perform partial inlining" -msgstr "Utför partiell inline:ing" +msgstr "Utför partiell inline:ing" #: common.opt:1501 common.opt:1505 msgid "Report on memory allocation before interprocedural optimization" -msgstr "Rapportera minnesallokering för interprocedurella optimeringar" +msgstr "Rapportera minnesallokering för interprocedurella optimeringar" #: common.opt:1509 msgid "Pack structure members together without holes" -msgstr "Packa ihop postmedlemmar utan hål" +msgstr "Packa ihop postmedlemmar utan hÃ¥l" #: common.opt:1513 msgid "-fpack-struct=<number>\tSet initial maximum structure member alignment" -msgstr "-fpack-struct=<tal>\tAnge initial maximal justering för postmedlemmar" +msgstr "-fpack-struct=<tal>\tAnge initial maximal justering för postmedlemmar" #: common.opt:1517 msgid "Return small aggregates in memory, not registers" -msgstr "Returnera små aggregat i minne, inte register" +msgstr "Returnera smÃ¥ aggregat i minne, inte register" #: common.opt:1521 msgid "Perform loop peeling" -msgstr "Utför slingavskalning" +msgstr "Utför slingavskalning" #: common.opt:1525 msgid "Enable machine specific peephole optimizations" -msgstr "Aktivera maskinspecifika nyckelhålsoptimeringar" +msgstr "Aktivera maskinspecifika nyckelhÃ¥lsoptimeringar" #: common.opt:1529 msgid "Enable an RTL peephole pass before sched2" -msgstr "Aktivera ett RTL-nyckelhålspass före sched2" +msgstr "Aktivera ett RTL-nyckelhÃ¥lspass före sched2" #: common.opt:1533 msgid "Generate position-independent code if possible (large mode)" -msgstr "Generera positionsoberoende kod om möjligt (stort läge)" +msgstr "Generera positionsoberoende kod om möjligt (stort läge)" #: common.opt:1537 msgid "Generate position-independent code for executables if possible (large mode)" -msgstr "Generera positionsoberoende kod för körbara program om möjligt (stort läge)" +msgstr "Generera positionsoberoende kod för körbara program om möjligt (stort läge)" #: common.opt:1541 msgid "Generate position-independent code if possible (small mode)" -msgstr "Generera positionsoberoende kod om möjligt (litet läge)" +msgstr "Generera positionsoberoende kod om möjligt (litet läge)" #: common.opt:1545 msgid "Generate position-independent code for executables if possible (small mode)" -msgstr "Generera positionsoberoende kod för körbara program om möjligt (litet läge)" +msgstr "Generera positionsoberoende kod för körbara program om möjligt (litet läge)" #: common.opt:1549 msgid "Specify a plugin to load" -msgstr "Ange en instickmodul att läsa in" +msgstr "Ange en instickmodul att läsa in" #: common.opt:1553 msgid "-fplugin-arg-<name>-<key>[=<value>]\tSpecify argument <key>=<value> for plugin <name>" -msgstr "-fplugin-arg-<namn>-<nyckel>[=<värde>]\tAnge argument <nyckel>=<värde> för insticksmodul <namn>" +msgstr "-fplugin-arg-<namn>-<nyckel>[=<värde>]\tAnge argument <nyckel>=<värde> för insticksmodul <namn>" #: common.opt:1557 msgid "Run predictive commoning optimization." -msgstr "Kör optimeringar för predikativ gemensamning." +msgstr "Kör optimeringar för predikativ gemensamning." #: common.opt:1561 msgid "Generate prefetch instructions, if available, for arrays in loops" -msgstr "Generera förhandshämtningsinstruktioner (prefetch), om tillgängliga, för vektorer i slingor" +msgstr "Generera förhandshämtningsinstruktioner (prefetch), om tillgängliga, för vektorer i slingor" #: common.opt:1565 msgid "Enable basic program profiling code" -msgstr "Aktivera grundläggande programprofileringskod" +msgstr "Aktivera grundläggande programprofileringskod" #: common.opt:1569 msgid "Insert arc-based program profiling code" -msgstr "Lägg in bågbaserad programprofileringskod" +msgstr "Lägg in bÃ¥gbaserad programprofileringskod" #: common.opt:1573 msgid "Set the top-level directory for storing the profile data." -msgstr "Sätt toppnivåkatalogen för att spara profildata." +msgstr "Sätt toppnivÃ¥katalogen för att spara profildata." #: common.opt:1578 msgid "Enable correction of flow inconsistent profile data input" -msgstr "Aktivera korrigering av profilindata med inkonsistent flöde" +msgstr "Aktivera korrigering av profilindata med inkonsistent flöde" #: common.opt:1582 msgid "Enable common options for generating profile info for profile feedback directed optimizations" -msgstr "Aktivera vanliga flaggor för att generera profileringsinformation för optimeringar styrda av återmatad profil" +msgstr "Aktivera vanliga flaggor för att generera profileringsinformation för optimeringar styrda av Ã¥termatad profil" #: common.opt:1586 msgid "Enable common options for generating profile info for profile feedback directed optimizations, and set -fprofile-dir=" -msgstr "Aktivera vanliga flaggor för att generera profileringsinformation för optimeringar styrda av återmatad profil, och sätt -fprofile-dir=" +msgstr "Aktivera vanliga flaggor för att generera profileringsinformation för optimeringar styrda av Ã¥termatad profil, och sätt -fprofile-dir=" #: common.opt:1590 msgid "Enable common options for performing profile feedback directed optimizations" -msgstr "Aktivera vanliga flaggor för att utföra optimeringar styrda av återmatad profil" +msgstr "Aktivera vanliga flaggor för att utföra optimeringar styrda av Ã¥termatad profil" #: common.opt:1594 msgid "Enable common options for performing profile feedback directed optimizations, and set -fprofile-dir=" -msgstr "Aktivera vanliga flaggor för att utföra optimeringar styrda av återmatad profil, och sätt -fprofile-dir=" +msgstr "Aktivera vanliga flaggor för att utföra optimeringar styrda av Ã¥termatad profil, och sätt -fprofile-dir=" #: common.opt:1598 msgid "Insert code to profile values of expressions" -msgstr "Lägg in kod för att profilera värden av uttryck" +msgstr "Lägg in kod för att profilera värden av uttryck" #: common.opt:1605 msgid "-frandom-seed=<string>\tMake compile reproducible using <string>" -msgstr "-frandom-seed=<sträng>\tGör kompileringen reproducerbar med <sträng>" +msgstr "-frandom-seed=<sträng>\tGör kompileringen reproducerbar med <sträng>" #: common.opt:1615 msgid "Record gcc command line switches in the object file." @@ -11070,19 +11070,19 @@ msgstr "Notera gcc:s kommandoradsflaggor i objektfilen." #: common.opt:1619 msgid "Return small aggregates in registers" -msgstr "Returnera små poster i register" +msgstr "Returnera smÃ¥ poster i register" #: common.opt:1623 msgid "Enables a register move optimization" -msgstr "Aktiverar en registerförflyttningsoptimering" +msgstr "Aktiverar en registerförflyttningsoptimering" #: common.opt:1627 msgid "Perform a register renaming optimization pass" -msgstr "Utför ett optimeringspass med registernamnbyten" +msgstr "Utför ett optimeringspass med registernamnbyten" #: common.opt:1631 msgid "Reorder basic blocks to improve code placement" -msgstr "Flytta om grundblock för att förbättra kodplacering" +msgstr "Flytta om grundblock för att förbättra kodplacering" #: common.opt:1635 msgid "Reorder basic blocks and partition into hot and cold sections" @@ -11090,127 +11090,127 @@ msgstr "Flytta om grundblock och partitioner till varma och kalla sektioner" #: common.opt:1639 msgid "Reorder functions to improve code placement" -msgstr "Flytta om funktioner för att förbättra kodplacering" +msgstr "Flytta om funktioner för att förbättra kodplacering" #: common.opt:1643 msgid "Add a common subexpression elimination pass after loop optimizations" -msgstr "Lägg till ett pass för eliminering av gemensamma deluttryck efter slingoptimeringar" +msgstr "Lägg till ett pass för eliminering av gemensamma deluttryck efter slingoptimeringar" #: common.opt:1651 msgid "Disable optimizations that assume default FP rounding behavior" -msgstr "Avaktivera optimeringar som antar standardmässig avrundningsbeteende för FP" +msgstr "Avaktivera optimeringar som antar standardmässig avrundningsbeteende för FP" #: common.opt:1655 msgid "Enable scheduling across basic blocks" -msgstr "Aktivera schemaläggning mellan grundblock" +msgstr "Aktivera schemaläggning mellan grundblock" #: common.opt:1659 msgid "Enable register pressure sensitive insn scheduling" -msgstr "Aktivera regeistertryckskänslig instruktionsschemaläggning" +msgstr "Aktivera regeistertryckskänslig instruktionsschemaläggning" #: common.opt:1663 msgid "Allow speculative motion of non-loads" -msgstr "Tillåt spekulativ förflyttning av icke-inläsningar" +msgstr "TillÃ¥t spekulativ förflyttning av icke-inläsningar" #: common.opt:1667 msgid "Allow speculative motion of some loads" -msgstr "Tillåt spekulativ förflyttning av några inläsningar" +msgstr "TillÃ¥t spekulativ förflyttning av nÃ¥gra inläsningar" #: common.opt:1671 msgid "Allow speculative motion of more loads" -msgstr "Tillåt spekulativ förflyttning av fler inläsningar" +msgstr "TillÃ¥t spekulativ förflyttning av fler inläsningar" #: common.opt:1675 msgid "-fsched-verbose=<number>\tSet the verbosity level of the scheduler" -msgstr "-fsched-verbose=<tal>\tAnge hur mångordig schemaläggaren skall vara" +msgstr "-fsched-verbose=<tal>\tAnge hur mÃ¥ngordig schemaläggaren skall vara" #: common.opt:1679 msgid "If scheduling post reload, do superblock scheduling" -msgstr "Om schemaläggning efter omläsning, gör superblockschemaläggning" +msgstr "Om schemaläggning efter omläsning, gör superblockschemaläggning" #: common.opt:1687 msgid "Reschedule instructions before register allocation" -msgstr "Schemalägg om instruktioner före registertilldelning" +msgstr "Schemalägg om instruktioner före registertilldelning" #: common.opt:1691 msgid "Reschedule instructions after register allocation" -msgstr "Schemalägg om instruktioner efter registertilldelning" +msgstr "Schemalägg om instruktioner efter registertilldelning" #: common.opt:1698 msgid "Schedule instructions using selective scheduling algorithm" -msgstr "Använd selektive schemaläggninsalgoritm för schemaläggning av instruktioner" +msgstr "Använd selektive schemaläggninsalgoritm för schemaläggning av instruktioner" #: common.opt:1702 msgid "Run selective scheduling after reload" -msgstr "Kör selektiv schemaläggning efter omläsning" +msgstr "Kör selektiv schemaläggning efter omläsning" #: common.opt:1706 msgid "Perform software pipelining of inner loops during selective scheduling" -msgstr "Utför programvarurörläggning av inre slingor under selektiv schemaläggning" +msgstr "Utför programvarurörläggning av inre slingor under selektiv schemaläggning" #: common.opt:1710 msgid "Perform software pipelining of outer loops during selective scheduling" -msgstr "Utför programvarurörläggning av yttre slingor under selektiv schemaläggning" +msgstr "Utför programvarurörläggning av yttre slingor under selektiv schemaläggning" #: common.opt:1714 msgid "Reschedule pipelined regions without pipelining" -msgstr "Schemalägg om rörlagda regioner utan rörläggning" +msgstr "Schemalägg om rörlagda regioner utan rörläggning" #: common.opt:1720 msgid "Allow premature scheduling of queued insns" -msgstr "Tillåt förtida schemaläggning av köade instruktioner" +msgstr "TillÃ¥t förtida schemaläggning av köade instruktioner" #: common.opt:1724 msgid "-fsched-stalled-insns=<number>\tSet number of queued insns that can be prematurely scheduled" -msgstr "-fsched-stalled-insns=<antal>\tAnge antalet köade instruktioner som kan schemaläggas i förtid" +msgstr "-fsched-stalled-insns=<antal>\tAnge antalet köade instruktioner som kan schemaläggas i förtid" #: common.opt:1732 msgid "Set dependence distance checking in premature scheduling of queued insns" -msgstr "Sätt beroendeavståndet som kontrolleras i förtida schemaläggning av köade instruktioner" +msgstr "Sätt beroendeavstÃ¥ndet som kontrolleras i förtida schemaläggning av köade instruktioner" #: common.opt:1736 msgid "-fsched-stalled-insns-dep=<number>\tSet dependence distance checking in premature scheduling of queued insns" -msgstr "-fsched-stalled-insns-dep=<antal>\tSätt beroendeavståndet som kontrolleras i förtida schemaläggning av köade instruktioner" +msgstr "-fsched-stalled-insns-dep=<antal>\tSätt beroendeavstÃ¥ndet som kontrolleras i förtida schemaläggning av köade instruktioner" #: common.opt:1740 msgid "Enable the group heuristic in the scheduler" -msgstr "Aktivera gruppheuristiken i schemaläggaren" +msgstr "Aktivera gruppheuristiken i schemaläggaren" #: common.opt:1744 msgid "Enable the critical path heuristic in the scheduler" -msgstr "Aktivera heuristiken för kritisk väg i schemaläggaren" +msgstr "Aktivera heuristiken för kritisk väg i schemaläggaren" #: common.opt:1748 msgid "Enable the speculative instruction heuristic in the scheduler" -msgstr "Aktivera den spekulativa instruktionsheuristiken i schemaläggaren" +msgstr "Aktivera den spekulativa instruktionsheuristiken i schemaläggaren" #: common.opt:1752 msgid "Enable the rank heuristic in the scheduler" -msgstr "Aktivera ordningsheuristiken i schemaläggaren" +msgstr "Aktivera ordningsheuristiken i schemaläggaren" #: common.opt:1756 msgid "Enable the last instruction heuristic in the scheduler" -msgstr "Aktivera heuristiken för sista instruktion i schemaläggaren" +msgstr "Aktivera heuristiken för sista instruktion i schemaläggaren" #: common.opt:1760 msgid "Enable the dependent count heuristic in the scheduler" -msgstr "Aktivera heuristiken för beroende antal i schemaläggaren" +msgstr "Aktivera heuristiken för beroende antal i schemaläggaren" #: common.opt:1764 msgid "Access data in the same section from shared anchor points" -msgstr "Nå data i samma sektion från delade förankringspunkter" +msgstr "NÃ¥ data i samma sektion frÃ¥n delade förankringspunkter" #: common.opt:1776 msgid "Turn on Redundant Extensions Elimination pass." -msgstr "Slå på passet för eliminering av redundanta utökningar." +msgstr "SlÃ¥ pÃ¥ passet för eliminering av redundanta utökningar." #: common.opt:1780 msgid "Show column numbers in diagnostics, when available. Default on" -msgstr "Visa kolumnnummer i felmeddelanden, när de är tillgängliga. Normalt på" +msgstr "Visa kolumnnummer i felmeddelanden, när de är tillgängliga. Normalt pÃ¥" #: common.opt:1784 msgid "Emit function prologues only before parts of the function that need it," -msgstr "Mata ut funktionsprologer bara före delar av funktionen som behöver det," +msgstr "Mata ut funktionsprologer bara före delar av funktionen som behöver det," #: common.opt:1789 msgid "Disable optimizations observable by IEEE signaling NaNs" @@ -11218,7 +11218,7 @@ msgstr "Avaktivera optimeringar som kan observeras av IEEE signalerande NAN:ar" #: common.opt:1793 msgid "Disable floating point optimizations that ignore the IEEE signedness of zero" -msgstr "Avaktivera flyttalsoptimeringar som ignorera IEEE:s tecken på noll" +msgstr "Avaktivera flyttalsoptimeringar som ignorera IEEE:s tecken pÃ¥ noll" #: common.opt:1797 msgid "Convert floating point constants to single precision constants" @@ -11226,11 +11226,11 @@ msgstr "Konvertera flyttalskonstanter till konstanter med enkel precision" #: common.opt:1801 msgid "Split lifetimes of induction variables when loops are unrolled" -msgstr "Dela livstiden på induktionsvariabler när slingor rullas ut" +msgstr "Dela livstiden pÃ¥ induktionsvariabler när slingor rullas ut" #: common.opt:1805 msgid "Generate discontiguous stack frames" -msgstr "Generera osammanhängande stackramar" +msgstr "Generera osammanhängande stackramar" #: common.opt:1809 msgid "Split wide types into independent registers" @@ -11238,39 +11238,39 @@ msgstr "Dela upp breda typer i oberoende register" #: common.opt:1813 msgid "Apply variable expansion when loops are unrolled" -msgstr "Tillämpa variabelexpansion när slingor rullas ut" +msgstr "Tillämpa variabelexpansion när slingor rullas ut" #: common.opt:1817 msgid "-fstack-check=[no|generic|specific]\tInsert stack checking code into the program" -msgstr "-fstack-check=[no|generic|specific]\tLägg in stackkontrollkod i programmet" +msgstr "-fstack-check=[no|generic|specific]\tLägg in stackkontrollkod i programmet" #: common.opt:1821 msgid "Insert stack checking code into the program. Same as -fstack-check=specific" -msgstr "Lägg in stackkontrollkod i programmet. Samma som -fstack-check=specific" +msgstr "Lägg in stackkontrollkod i programmet. Samma som -fstack-check=specific" #: common.opt:1828 msgid "-fstack-limit-register=<register>\tTrap if the stack goes past <register>" -msgstr "-fstack-limit-register=<register>\tFånga om stacken går förbi <register>" +msgstr "-fstack-limit-register=<register>\tFÃ¥nga om stacken gÃ¥r förbi <register>" #: common.opt:1832 msgid "-fstack-limit-symbol=<name>\tTrap if the stack goes past symbol <name>" -msgstr "-fstack-limit-symbol=<namn>\tFånga om stacken går förbi symbolen <namn>" +msgstr "-fstack-limit-symbol=<namn>\tFÃ¥nga om stacken gÃ¥r förbi symbolen <namn>" #: common.opt:1836 msgid "Use propolice as a stack protection method" -msgstr "Använd propolice som en metod att skydda stacken" +msgstr "Använd propolice som en metod att skydda stacken" #: common.opt:1840 msgid "Use a stack protection method for every function" -msgstr "Använd en metod att skydda stacken för varje funktion" +msgstr "Använd en metod att skydda stacken för varje funktion" #: common.opt:1844 msgid "Output stack usage information on a per-function basis" -msgstr "Skriv ut information om stackanvändning för varje funktion" +msgstr "Skriv ut information om stackanvändning för varje funktion" #: common.opt:1856 msgid "Assume strict aliasing rules apply" -msgstr "Anta att strikta aliasregler gäller" +msgstr "Anta att strikta aliasregler gäller" #: common.opt:1860 msgid "Treat signed overflow as undefined" @@ -11282,60 +11282,60 @@ msgstr "Leta efter syntaxfel, stoppa sedan" #: common.opt:1868 msgid "Create data files needed by \"gcov\"" -msgstr "Skapa datafiler som behövs av \"gcov\"" +msgstr "Skapa datafiler som behövs av â€gcovâ€" #: common.opt:1872 msgid "Perform jump threading optimizations" -msgstr "Utför hopptrådningsoptimeringar" +msgstr "Utför hopptrÃ¥dningsoptimeringar" #: common.opt:1876 msgid "Report the time taken by each compiler pass" -msgstr "Rapportera tiden som går åt för varje kompilatorpass" +msgstr "Rapportera tiden som gÃ¥r Ã¥t för varje kompilatorpass" #: common.opt:1880 msgid "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tSet the default thread-local storage code generation model" -msgstr "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tAnge normal kodgenereringsmodell för trådlokal lagring" +msgstr "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tAnge normal kodgenereringsmodell för trÃ¥dlokal lagring" #: common.opt:1883 #, c-format msgid "unknown TLS model %qs" -msgstr "okänd TLS-modell %qs" +msgstr "okänd TLS-modell %qs" #: common.opt:1899 msgid "Reorder top level functions, variables, and asms" -msgstr "Ordna om toppnivåfunktioner, variabler och asm:ar" +msgstr "Ordna om toppnivÃ¥funktioner, variabler och asm:ar" #: common.opt:1903 msgid "Perform superblock formation via tail duplication" -msgstr "Utför superblockformering via svansduplicering" +msgstr "Utför superblockformering via svansduplicering" #: common.opt:1910 msgid "Assume floating-point operations can trap" -msgstr "Anta att flyttalsoperationer kan utlösa fällor" +msgstr "Anta att flyttalsoperationer kan utlösa fällor" #: common.opt:1914 msgid "Trap for signed overflow in addition, subtraction and multiplication" -msgstr "Fånga teckenspill i addition, subtraktion och multiplikation" +msgstr "FÃ¥nga teckenspill i addition, subtraktion och multiplikation" #: common.opt:1918 msgid "Enable SSA-CCP optimization on trees" -msgstr "Aktivera SSA-CCP-optimering av träd" +msgstr "Aktivera SSA-CCP-optimering av träd" #: common.opt:1922 msgid "Enable SSA-BIT-CCP optimization on trees" -msgstr "Aktivera SSA-BIT-CCP-optimering av träd" +msgstr "Aktivera SSA-BIT-CCP-optimering av träd" #: common.opt:1930 msgid "Enable loop header copying on trees" -msgstr "Aktivera slinghuvdkopiering av träd" +msgstr "Aktivera slinghuvdkopiering av träd" #: common.opt:1934 msgid "Replace SSA temporaries with better names in copies" -msgstr "Ersätt SSA-temporärer med bättre namn i kopieringar" +msgstr "Ersätt SSA-temporärer med bättre namn i kopieringar" #: common.opt:1938 msgid "Enable copy propagation on trees" -msgstr "Aktivera kopiepropagering i träd" +msgstr "Aktivera kopiepropagering i träd" #: common.opt:1946 msgid "Transform condition stores into unconditional ones" @@ -11343,11 +11343,11 @@ msgstr "Transformera villkorliga lagringar till ovillkorliga" #: common.opt:1950 msgid "Perform conversions of switch initializations." -msgstr "Utför konvertering av switch-initieringar." +msgstr "Utför konvertering av switch-initieringar." #: common.opt:1954 msgid "Enable SSA dead code elimination optimization on trees" -msgstr "Aktivera eliminering av död kod i SSA-optimeringen i träd" +msgstr "Aktivera eliminering av död kod i SSA-optimeringen i träd" #: common.opt:1958 msgid "Enable dominator optimizations" @@ -11355,35 +11355,35 @@ msgstr "Aktivera dominatoroptimeringar" #: common.opt:1962 msgid "Enable tail merging on trees" -msgstr "Aktivera svanssammanslagning av träd" +msgstr "Aktivera svanssammanslagning av träd" #: common.opt:1966 msgid "Enable dead store elimination" -msgstr "Aktivera eliminering av död lagring" +msgstr "Aktivera eliminering av död lagring" #: common.opt:1970 msgid "Enable forward propagation on trees" -msgstr "Aktivera framåtpropagering på träd" +msgstr "Aktivera framÃ¥tpropagering pÃ¥ träd" #: common.opt:1974 msgid "Enable Full Redundancy Elimination (FRE) on trees" -msgstr "Aktivera fullständig överflödseliminering (FRE) i träd" +msgstr "Aktivera fullständig överflödseliminering (FRE) i träd" #: common.opt:1978 msgid "Enable string length optimizations on trees" -msgstr "Aktivera stränglängdsoptimering av träd" +msgstr "Aktivera stränglängdsoptimering av träd" #: common.opt:1982 msgid "Enable loop distribution on trees" -msgstr "Aktivera slingdistribution i träd" +msgstr "Aktivera slingdistribution i träd" #: common.opt:1986 msgid "Enable loop distribution for patterns transformed into a library call" -msgstr "Aktivera slingdistribution för mönster transformerade till biblioteksanrop" +msgstr "Aktivera slingdistribution för mönster transformerade till biblioteksanrop" #: common.opt:1990 msgid "Enable loop invariant motion on trees" -msgstr "Aktivera förflyttning av slingoberoende delar i träd" +msgstr "Aktivera förflyttning av slingoberoende delar i träd" #: common.opt:1994 msgid "Enable loop interchange transforms. Same as -floop-interchange" @@ -11395,7 +11395,7 @@ msgstr "Skapa kanoniska induktionsvariabler i slingor" #: common.opt:2002 msgid "Enable loop optimizations on tree level" -msgstr "Aktivera slingoptimeringar på trädnivå" +msgstr "Aktivera slingoptimeringar pÃ¥ trädnivÃ¥" #: common.opt:2006 msgid "Enable automatic parallelization of loops" @@ -11403,170 +11403,170 @@ msgstr "Aktivera automatisk parallellisering av slingor" #: common.opt:2010 msgid "Enable hoisting loads from conditional pointers." -msgstr "Aktivera lyftningslast från villkorliga pekare." +msgstr "Aktivera lyftningslast frÃ¥n villkorliga pekare." #: common.opt:2014 msgid "Enable SSA-PRE optimization on trees" -msgstr "Aktivera SSA-PRE-optimeringar i träd" +msgstr "Aktivera SSA-PRE-optimeringar i träd" #: common.opt:2018 msgid "Perform function-local points-to analysis on trees." -msgstr "Utför funktionslokala pekar-på-analyser i träd" +msgstr "Utför funktionslokala pekar-pÃ¥-analyser i träd" #: common.opt:2022 msgid "Enable reassociation on tree level" -msgstr "Aktivera återassociering på trädnivå" +msgstr "Aktivera Ã¥terassociering pÃ¥ trädnivÃ¥" #: common.opt:2030 msgid "Enable SSA code sinking on trees" -msgstr "Aktivera SSA-kodsänkning i träd" +msgstr "Aktivera SSA-kodsänkning i träd" #: common.opt:2034 msgid "Perform scalar replacement of aggregates" -msgstr "Utför skalärersättning av aggregat" +msgstr "Utför skalärersättning av aggregat" #: common.opt:2038 msgid "Replace temporary expressions in the SSA->normal pass" -msgstr "Ersätt tillfälliga uttryck i passet SSA->normal" +msgstr "Ersätt tillfälliga uttryck i passet SSA->normal" #: common.opt:2042 msgid "Perform live range splitting during the SSA->normal pass" -msgstr "Utför livstidsuppdelning under passet SSA->normal" +msgstr "Utför livstidsuppdelning under passet SSA->normal" #: common.opt:2046 msgid "Perform Value Range Propagation on trees" -msgstr "Utför propagering av värdeintervall i träd" +msgstr "Utför propagering av värdeintervall i träd" #: common.opt:2050 msgid "Compile whole compilation unit at a time" -msgstr "Kompilera en hel kompileringsenhet åt gången" +msgstr "Kompilera en hel kompileringsenhet Ã¥t gÃ¥ngen" #: common.opt:2054 msgid "Perform loop unrolling when iteration count is known" -msgstr "Utför slingutrullning när iterationsantalet är känt" +msgstr "Utför slingutrullning när iterationsantalet är känt" #: common.opt:2058 msgid "Perform loop unrolling for all loops" -msgstr "Utför slingutrullning för alla slingor" +msgstr "Utför slingutrullning för alla slingor" #: common.opt:2065 msgid "Allow loop optimizations to assume that the loops behave in normal way" -msgstr "Tillåt slingoptimeringar att anta att slingorna beter sig normalt" +msgstr "TillÃ¥t slingoptimeringar att anta att slingorna beter sig normalt" # Avhugget p.g.a. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34352 -# Hela meddelandet är översatt +# Hela meddelandet är översatt #: common.opt:2069 msgid "Allow optimization for floating-point arithmetic which may change the" -msgstr "Tillåt optimeringar för flyttalsaritmetik som kan ändra resultatet av operationen på grund av avrundning" +msgstr "TillÃ¥t optimeringar för flyttalsaritmetik som kan ändra resultatet av operationen pÃ¥ grund av avrundning" #: common.opt:2074 msgid "Same as -fassociative-math for expressions which include division." -msgstr "Samma som -fassociative-math för uttryck som inkluderar division." +msgstr "Samma som -fassociative-math för uttryck som inkluderar division." #: common.opt:2082 msgid "Allow math optimizations that may violate IEEE or ISO standards" -msgstr "Tillåt matematikoptimeringar som kan strida mot IEEE- eller ISO-standarder" +msgstr "TillÃ¥t matematikoptimeringar som kan strida mot IEEE- eller ISO-standarder" #: common.opt:2086 msgid "Perform loop unswitching" -msgstr "Utför slingavväxling" +msgstr "Utför slingavväxling" #: common.opt:2090 msgid "Just generate unwind tables for exception handling" -msgstr "Generera bara upprullningstabeller för undantagshantering" +msgstr "Generera bara upprullningstabeller för undantagshantering" #: common.opt:2102 msgid "Perform variable tracking" -msgstr "Utför variabelspårning" +msgstr "Utför variabelspÃ¥rning" #: common.opt:2110 msgid "Perform variable tracking by annotating assignments" -msgstr "Utför variabelspårning genom att annotera tilldelningar" +msgstr "Utför variabelspÃ¥rning genom att annotera tilldelningar" #: common.opt:2116 msgid "Toggle -fvar-tracking-assignments" -msgstr "Växla -fvar-tracking-assignments" +msgstr "Växla -fvar-tracking-assignments" #: common.opt:2120 msgid "Perform variable tracking and also tag variables that are uninitialized" -msgstr "Utför variabelspårning och tagga också variabler som är oinitierade" +msgstr "Utför variabelspÃ¥rning och tagga ocksÃ¥ variabler som är oinitierade" #: common.opt:2124 msgid "Enable loop vectorization on trees" -msgstr "Aktivera slingvektorisering i träd" +msgstr "Aktivera slingvektorisering i träd" #: common.opt:2128 msgid "Enable basic block vectorization (SLP) on trees" -msgstr "Aktivera grundblocksvektorisering (SLP) i träd" +msgstr "Aktivera grundblocksvektorisering (SLP) i träd" #: common.opt:2132 msgid "Enable use of cost model in vectorization" -msgstr "Aktivera användning av kostnadsmodell vid vektorisering" +msgstr "Aktivera användning av kostnadsmodell vid vektorisering" #: common.opt:2136 msgid "Enable loop versioning when doing loop vectorization on trees" -msgstr "Aktivera slingversioner när slingvektorisering i träd görs" +msgstr "Aktivera slingversioner när slingvektorisering i träd görs" #: common.opt:2140 msgid "-ftree-vectorizer-verbose=<number>\tSet the verbosity level of the vectorizer" -msgstr "-ftree-vectorizer-verbose=<tal>\tAnge hur mångordig vektoriseraren skall vara" +msgstr "-ftree-vectorizer-verbose=<tal>\tAnge hur mÃ¥ngordig vektoriseraren skall vara" #: common.opt:2144 msgid "Enable copy propagation of scalar-evolution information." -msgstr "Aktivera kopiepropagering av skalärutvecklingsinformation." +msgstr "Aktivera kopiepropagering av skalärutvecklingsinformation." #: common.opt:2154 msgid "Add extra commentary to assembler output" -msgstr "Lägg till extra kommentarer till assemblerutdata" +msgstr "Lägg till extra kommentarer till assemblerutdata" #: common.opt:2158 msgid "-fvisibility=[default|internal|hidden|protected]\tSet the default symbol visibility" -msgstr "-fvisibility=[default|internal|hidden|protected]\tAnge standardvärde för symbolsynlighet" +msgstr "-fvisibility=[default|internal|hidden|protected]\tAnge standardvärde för symbolsynlighet" #: common.opt:2161 #, c-format msgid "unrecognized visibility value %qs" -msgstr "okänt synlighetsvärde %qs" +msgstr "okänt synlighetsvärde %qs" #: common.opt:2177 msgid "Use expression value profiles in optimizations" -msgstr "Använd uttrycksvärdeprofiler i optimeringar" +msgstr "Använd uttrycksvärdeprofiler i optimeringar" #: common.opt:2181 msgid "Construct webs and split unrelated uses of single variable" -msgstr "Konstruera nät och dela orelaterade användningar av en enskild variabel" +msgstr "Konstruera nät och dela orelaterade användningar av en enskild variabel" #: common.opt:2185 msgid "Enable conditional dead code elimination for builtin calls" -msgstr "Aktivera villkorlig eliminering av död för inbyggda anrop" +msgstr "Aktivera villkorlig eliminering av död för inbyggda anrop" #: common.opt:2189 msgid "Perform whole program optimizations" -msgstr "Utför optimering av hela program" +msgstr "Utför optimering av hela program" #: common.opt:2193 msgid "Assume signed arithmetic overflow wraps around" -msgstr "Anta att spill vid teckenaritmetik slår runt" +msgstr "Anta att spill vid teckenaritmetik slÃ¥r runt" #: common.opt:2197 msgid "Put zero initialized data in the bss section" -msgstr "Lägg nollinitierad data i bss-sektionen" +msgstr "Lägg nollinitierad data i bss-sektionen" #: common.opt:2201 msgid "Generate debug information in default format" -msgstr "Generera felsökningsinformation i standardformat" +msgstr "Generera felsökningsinformation i standardformat" #: common.opt:2205 msgid "Generate debug information in COFF format" -msgstr "Generera felsökningsinformation i COFF-format" +msgstr "Generera felsökningsinformation i COFF-format" #: common.opt:2209 msgid "Generate debug information in DWARF v2 (or later) format" -msgstr "Generera felsökningsinformation i DWARF v2-format (eller senare)" +msgstr "Generera felsökningsinformation i DWARF v2-format (eller senare)" #: common.opt:2213 msgid "Generate debug information in default extended format" -msgstr "Generera felsökningsinformation i normalt utökat format" +msgstr "Generera felsökningsinformation i normalt utökat format" #: common.opt:2217 msgid "Don't record gcc command line switches in DWARF DW_AT_producer." @@ -11578,39 +11578,39 @@ msgstr "Notera gcc:s kommandoradsflaggor i DWARF DW_AT_producer." #: common.opt:2225 msgid "Generate debug information in STABS format" -msgstr "Generera felsökningsinformation i STABS-format" +msgstr "Generera felsökningsinformation i STABS-format" #: common.opt:2229 msgid "Generate debug information in extended STABS format" -msgstr "Generera felsökningsinformation i utökat STABS-format" +msgstr "Generera felsökningsinformation i utökat STABS-format" #: common.opt:2233 msgid "Emit DWARF additions beyond selected version" -msgstr "Mata ut DWARF-tillägg utöver vald version" +msgstr "Mata ut DWARF-tillägg utöver vald version" #: common.opt:2237 msgid "Don't emit DWARF additions beyond selected version" -msgstr "Mata inte ut DWARF-tillägg utöver vald version" +msgstr "Mata inte ut DWARF-tillägg utöver vald version" #: common.opt:2241 msgid "Toggle debug information generation" -msgstr "Växla generering av felsökningsinformation" +msgstr "Växla generering av felsökningsinformation" #: common.opt:2245 msgid "Generate debug information in VMS format" -msgstr "Generera felsökningsinformation i VMS-format" +msgstr "Generera felsökningsinformation i VMS-format" #: common.opt:2249 msgid "Generate debug information in XCOFF format" -msgstr "Generera felsökningsinformation i XCOFF-format" +msgstr "Generera felsökningsinformation i XCOFF-format" #: common.opt:2253 msgid "Generate debug information in extended XCOFF format" -msgstr "Generera felsökningsinformation i utökat XCOFF-format" +msgstr "Generera felsökningsinformation i utökat XCOFF-format" #: common.opt:2260 msgid "-iplugindir=<dir>\tSet <dir> to be the default plugin directory" -msgstr "-iplugindir=<kat>\tSätt <kat> att vara standardbibliotek för insticksmoduler" +msgstr "-iplugindir=<kat>\tSätt <kat> att vara standardbibliotek för insticksmoduler" #: common.opt:2282 msgid "-o <file>\tPlace output into <file>" @@ -11622,7 +11622,7 @@ msgstr "Aktivera funktionsprofilering" #: common.opt:2293 msgid "Issue warnings needed for strict compliance to the standard" -msgstr "Ge varningar som krävs för att strikt följa standarden" +msgstr "Ge varningar som krävs för att strikt följa standarden" #: common.opt:2297 msgid "Like -pedantic but issue them as errors" @@ -11630,11 +11630,11 @@ msgstr "Som -pedantic men ange dem som fel" #: common.opt:2334 msgid "Do not display functions compiled or elapsed time" -msgstr "Visa inte kompilerade funktioner eller tiden som förbrukats" +msgstr "Visa inte kompilerade funktioner eller tiden som förbrukats" #: common.opt:2366 msgid "Enable verbose output" -msgstr "Aktivera utförlig utskrift" +msgstr "Aktivera utförlig utskrift" #: common.opt:2370 msgid "Display the compiler's version" @@ -11650,11 +11650,11 @@ msgstr "Skapa ett delat bibliotek" #: common.opt:2417 msgid "Create a position independent executable" -msgstr "Skapa ett positionsoberoende körbart program" +msgstr "Skapa ett positionsoberoende körbart program" #: go/gofrontend/expressions.cc:912 msgid "invalid use of type" -msgstr "ogiltigt användning av typ" +msgstr "ogiltigt användning av typ" #: go/gofrontend/expressions.cc:2273 go/gofrontend/expressions.cc:2991 msgid "floating point constant truncated to integer" @@ -11663,36 +11663,36 @@ msgstr "flyttalskonstant avkortas till heltal" #: go/gofrontend/expressions.cc:2871 go/gofrontend/expressions.cc:2941 #: go/gofrontend/expressions.cc:2957 msgid "constant refers to itself" -msgstr "konstant refererar till sig själv" +msgstr "konstant refererar till sig själv" #: go/gofrontend/expressions.cc:4537 msgid "expected numeric type" -msgstr "numerisk typ förväntades" +msgstr "numerisk typ förväntades" #: go/gofrontend/expressions.cc:4544 msgid "expected integer or boolean type" -msgstr "heltal eller boolesk typ förväntades" +msgstr "heltal eller boolesk typ förväntades" #: go/gofrontend/expressions.cc:4551 msgid "invalid operand for unary %<&%>" -msgstr "ogiltig operand till unärt %<&%>" +msgstr "ogiltig operand till unärt %<&%>" #: go/gofrontend/expressions.cc:4560 msgid "expected pointer" -msgstr "pekare förväntades" +msgstr "pekare förväntades" #: go/gofrontend/expressions.cc:6258 go/gofrontend/expressions.cc:6509 #: go/gofrontend/expressions.cc:6527 msgid "incompatible types in binary expression" -msgstr "inkompatibla typer i binärt uttryck" +msgstr "inkompatibla typer i binärt uttryck" #: go/gofrontend/expressions.cc:6541 msgid "shift of non-integer operand" -msgstr "skift med operand som inte är heltal" +msgstr "skift med operand som inte är heltal" #: go/gofrontend/expressions.cc:6546 msgid "shift count not unsigned integer" -msgstr "skiftantal är inte teckenlöst heltal" +msgstr "skiftantal är inte teckenlöst heltal" #: go/gofrontend/expressions.cc:6556 msgid "negative shift count" @@ -11700,15 +11700,15 @@ msgstr "negativt skiftantal" #: go/gofrontend/expressions.cc:7264 msgid "object is not a method" -msgstr "objektet är inte en metod" +msgstr "objektet är inte en metod" #: go/gofrontend/expressions.cc:7273 msgid "method type does not match object type" -msgstr "metodtypen stämmer inte med objekttypen" +msgstr "metodtypen stämmer inte med objekttypen" #: go/gofrontend/expressions.cc:7553 msgid "invalid use of %<...%> with builtin function" -msgstr "ogiltig användning av %<...%> med inbyggd funktion" +msgstr "ogiltig användning av %<...%> med inbyggd funktion" #: go/gofrontend/expressions.cc:7615 go/gofrontend/expressions.cc:7669 #: go/gofrontend/expressions.cc:7714 go/gofrontend/expressions.cc:8421 @@ -11716,7 +11716,7 @@ msgstr "ogiltig användning av %<...%> med inbyggd funktion" #: go/gofrontend/expressions.cc:8657 go/gofrontend/expressions.cc:9829 #: go/gofrontend/expressions.cc:9848 msgid "not enough arguments" -msgstr "inte tillräckligt med argument" +msgstr "inte tillräckligt med argument" #: go/gofrontend/expressions.cc:7617 go/gofrontend/expressions.cc:7671 #: go/gofrontend/expressions.cc:8426 go/gofrontend/expressions.cc:8548 @@ -11724,71 +11724,71 @@ msgstr "inte tillräckligt med argument" #: go/gofrontend/expressions.cc:8659 go/gofrontend/expressions.cc:9546 #: go/gofrontend/expressions.cc:9834 go/gofrontend/expressions.cc:9855 msgid "too many arguments" -msgstr "för många argument" +msgstr "för mÃ¥nga argument" #: go/gofrontend/expressions.cc:7673 msgid "argument 1 must be a map" -msgstr "argument 1 måste vara en avbildning" +msgstr "argument 1 mÃ¥ste vara en avbildning" #: go/gofrontend/expressions.cc:7740 msgid "invalid type for make function" -msgstr "ogiltigt typ för make-funktion" +msgstr "ogiltigt typ för make-funktion" #: go/gofrontend/expressions.cc:7750 msgid "length required when allocating a slice" -msgstr "en längd behövs när en skiva allokeras" +msgstr "en längd behövs när en skiva allokeras" #: go/gofrontend/expressions.cc:7764 msgid "bad size for make" -msgstr "felaktig storlek för make" +msgstr "felaktig storlek för make" #: go/gofrontend/expressions.cc:7776 msgid "bad capacity when making slice" -msgstr "felaktig kapacitet när en skiva görs" +msgstr "felaktig kapacitet när en skiva görs" #: go/gofrontend/expressions.cc:7784 msgid "too many arguments to make" -msgstr "för många argument till make" +msgstr "för mÃ¥nga argument till make" #: go/gofrontend/expressions.cc:8467 msgid "argument must be array or slice or channel" -msgstr "argumentet måste vara en vektor eller skiva eller kanal" +msgstr "argumentet mÃ¥ste vara en vektor eller skiva eller kanal" #: go/gofrontend/expressions.cc:8477 msgid "argument must be string or array or slice or map or channel" -msgstr "argumentet måste vara en sträng eller vektor eller skiva eller avbildning eller kanal" +msgstr "argumentet mÃ¥ste vara en sträng eller vektor eller skiva eller avbildning eller kanal" #: go/gofrontend/expressions.cc:8523 msgid "unsupported argument type to builtin function" -msgstr "argumenttyp som inte stödjs till inbyggd funktion" +msgstr "argumenttyp som inte stödjs till inbyggd funktion" #: go/gofrontend/expressions.cc:8534 msgid "argument must be channel" -msgstr "argumentet måste vara en kanal" +msgstr "argumentet mÃ¥ste vara en kanal" #: go/gofrontend/expressions.cc:8536 msgid "cannot close receive-only channel" -msgstr "kan inte stänga en kanal endast för mottagning" +msgstr "kan inte stänga en kanal endast för mottagning" #: go/gofrontend/expressions.cc:8556 msgid "argument must be a field reference" -msgstr "argumentet måste vara en fältreferens" +msgstr "argumentet mÃ¥ste vara en fältreferens" #: go/gofrontend/expressions.cc:8583 msgid "left argument must be a slice" -msgstr "vänstra argumentet måste vara en skiva" +msgstr "vänstra argumentet mÃ¥ste vara en skiva" #: go/gofrontend/expressions.cc:8591 msgid "element types must be the same" -msgstr "elementtyper måste vara samma" +msgstr "elementtyper mÃ¥ste vara samma" #: go/gofrontend/expressions.cc:8596 msgid "first argument must be []byte" -msgstr "första argumentet måste vara []byte" +msgstr "första argumentet mÃ¥ste vara []byte" #: go/gofrontend/expressions.cc:8599 msgid "second argument must be slice or string" -msgstr "andra argumentet måste vara en skiva eller sträng" +msgstr "andra argumentet mÃ¥ste vara en skiva eller sträng" #: go/gofrontend/expressions.cc:8632 msgid "arguments 1 and 2 have different types" @@ -11796,59 +11796,59 @@ msgstr "argument 1 och 2 har olika typer" #: go/gofrontend/expressions.cc:8649 msgid "argument must have complex type" -msgstr "argumentet måste ha komplex typ" +msgstr "argumentet mÃ¥ste ha komplex typ" #: go/gofrontend/expressions.cc:8667 msgid "complex arguments must have identical types" -msgstr "komplexa argument måste ha identiska typer" +msgstr "komplexa argument mÃ¥ste ha identiska typer" #: go/gofrontend/expressions.cc:8669 msgid "complex arguments must have floating-point type" -msgstr "komplexa argument måste ha flyttalstyp" +msgstr "komplexa argument mÃ¥ste ha flyttalstyp" #: go/gofrontend/expressions.cc:9792 go/gofrontend/expressions.cc:10217 msgid "expected function" -msgstr "en funktion förväntades" +msgstr "en funktion förväntades" #: go/gofrontend/expressions.cc:9811 msgid "incompatible type for receiver" -msgstr "inkompatibel typ för mottagare" +msgstr "inkompatibel typ för mottagare" #: go/gofrontend/expressions.cc:10226 go/gofrontend/expressions.cc:10240 msgid "number of results does not match number of values" -msgstr "antalet resultat stämmer inte med antalet värden" +msgstr "antalet resultat stämmer inte med antalet värden" #: go/gofrontend/expressions.cc:10535 go/gofrontend/expressions.cc:10943 msgid "index must be integer" -msgstr "indexet måste vara ett heltal" +msgstr "indexet mÃ¥ste vara ett heltal" #: go/gofrontend/expressions.cc:10541 go/gofrontend/expressions.cc:10947 msgid "slice end must be integer" -msgstr "skivslut måste vara ett heltal" +msgstr "skivslut mÃ¥ste vara ett heltal" #: go/gofrontend/expressions.cc:10596 msgid "slice of unaddressable value" -msgstr "skiva av oadresserbart värde" +msgstr "skiva av oadresserbart värde" #: go/gofrontend/expressions.cc:11175 msgid "incompatible type for map index" -msgstr "inkompatibel typ för avbildningsindex" +msgstr "inkompatibel typ för avbildningsindex" #: go/gofrontend/expressions.cc:11523 msgid "expected interface or pointer to interface" -msgstr "gränssnitt eller pekare till gränssnitt förväntades" +msgstr "gränssnitt eller pekare till gränssnitt förväntades" #: go/gofrontend/expressions.cc:12049 msgid "too many expressions for struct" -msgstr "för många uttryck för post" +msgstr "för mÃ¥nga uttryck för post" #: go/gofrontend/expressions.cc:12062 msgid "too few expressions for struct" -msgstr "för få argument för post" +msgstr "för fÃ¥ argument för post" #: go/gofrontend/expressions.cc:12342 msgid "too many elements in composite literal" -msgstr "för många element i sammansatt literal" +msgstr "för mÃ¥nga element i sammansatt literal" #: go/gofrontend/expressions.cc:13611 go/gofrontend/expressions.cc:13619 msgid "invalid unsafe.Pointer conversion" @@ -11856,47 +11856,47 @@ msgstr "ogiltiga unsafe.Pointer-konvertering" #: go/gofrontend/expressions.cc:13624 go/gofrontend/statements.cc:1539 msgid "type assertion only valid for interface types" -msgstr "typförsäkran är endast giltigt för gränssnittstyper" +msgstr "typförsäkran är endast giltigt för gränssnittstyper" #: go/gofrontend/expressions.cc:13636 msgid "impossible type assertion: type does not implement interface" -msgstr "omöjlig typförsäkran: typen implementerar inte ett gränssnitt" +msgstr "omöjlig typförsäkran: typen implementerar inte ett gränssnitt" #: go/gofrontend/expressions.cc:13820 go/gofrontend/statements.cc:1387 msgid "expected channel" -msgstr "kanal förväntades" +msgstr "kanal förväntades" #: go/gofrontend/expressions.cc:13825 go/gofrontend/statements.cc:1392 msgid "invalid receive on send-only channel" -msgstr "ogiltig receive på kanal endast för sändning" +msgstr "ogiltig receive pÃ¥ kanal endast för sändning" #: go/gofrontend/statements.cc:590 msgid "invalid left hand side of assignment" -msgstr "ogiltig vänsterhandssida i tilldelning" +msgstr "ogiltig vänsterhandssida i tilldelning" #: go/gofrontend/statements.cc:1105 msgid "expected map index on right hand side" -msgstr "avbildningsindex förväntades på högersidan" +msgstr "avbildningsindex förväntades pÃ¥ högersidan" #: go/gofrontend/statements.cc:1254 msgid "expected map index on left hand side" -msgstr "avbildningsindex på vänster hands sida förväntades" +msgstr "avbildningsindex pÃ¥ vänster hands sida förväntades" #: go/gofrontend/statements.cc:2632 go/gofrontend/statements.cc:2661 msgid "not enough arguments to return" -msgstr "inte tillräckligt med argument att returnera" +msgstr "inte tillräckligt med argument att returnera" #: go/gofrontend/statements.cc:2640 msgid "return with value in function with no return type" -msgstr "retur med värde i funktion utan returtyp" +msgstr "retur med värde i funktion utan returtyp" #: go/gofrontend/statements.cc:2667 msgid "too many values in return statement" -msgstr "för många värden i retursats" +msgstr "för mÃ¥nga värden i retursats" #: go/gofrontend/statements.cc:3145 msgid "expected boolean expression" -msgstr "booleskt uttryck förväntades" +msgstr "booleskt uttryck förväntades" #: go/gofrontend/statements.cc:4336 msgid "incompatible types in send" @@ -11904,31 +11904,31 @@ msgstr "inkompatibla typer i send" #: go/gofrontend/statements.cc:4341 msgid "invalid send on receive-only channel" -msgstr "ogiltig send på kanal endast för mottagning" +msgstr "ogiltig send pÃ¥ kanal endast för mottagning" #: go/gofrontend/statements.cc:5228 msgid "too many variables for range clause with channel" -msgstr "för många variabler för intervallklausul med kanal" +msgstr "för mÃ¥nga variabler för intervallklausul med kanal" #: go/gofrontend/statements.cc:5235 msgid "range clause must have array, slice, string, map, or channel type" -msgstr "en intervallklausul måste ha vektor-, skiv-, sträng-, avbildnings- eller kanaltyp" +msgstr "en intervallklausul mÃ¥ste ha vektor-, skiv-, sträng-, avbildnings- eller kanaltyp" #: go/gofrontend/types.cc:509 msgid "invalid comparison of non-ordered type" -msgstr "ogiltig jämförelse av oordnad typ" +msgstr "ogiltig jämförelse av oordnad typ" #: go/gofrontend/types.cc:525 msgid "slice can only be compared to nil" -msgstr "en skiva kan endast jämföras med nil" +msgstr "en skiva kan endast jämföras med nil" #: go/gofrontend/types.cc:527 msgid "map can only be compared to nil" -msgstr "en avbildning kan endast att jämföras med nil" +msgstr "en avbildning kan endast att jämföras med nil" #: go/gofrontend/types.cc:529 msgid "func can only be compared to nil" -msgstr "en funktion kan endast jämföras med nil" +msgstr "en funktion kan endast jämföras med nil" #: go/gofrontend/types.cc:535 #, c-format @@ -11937,28 +11937,28 @@ msgstr "ogiltig operation (%s)" #: go/gofrontend/types.cc:558 msgid "invalid comparison of non-comparable type" -msgstr "ogiltig jämförelse av ojämförbar typ" +msgstr "ogiltig jämförelse av ojämförbar typ" #: go/gofrontend/types.cc:576 msgid "invalid comparison of non-comparable struct" -msgstr "ogiltig jämförelse av ojämförbar post" +msgstr "ogiltig jämförelse av ojämförbar post" #: go/gofrontend/types.cc:587 msgid "invalid comparison of non-comparable array" -msgstr "ogiltig jämförelse av ojämförbar vektor" +msgstr "ogiltig jämförelse av ojämförbar vektor" #: go/gofrontend/types.cc:699 msgid "need explicit conversion" -msgstr "explicit konverting behövs" +msgstr "explicit konverting behövs" #: go/gofrontend/types.cc:701 msgid "multiple value function call in single value context" -msgstr "flervärt funktionsanrop i sammanhang för enstaka värde" +msgstr "flervärt funktionsanrop i sammanhang för enstaka värde" #: go/gofrontend/types.cc:709 #, c-format msgid "cannot use type %s as type %s" -msgstr "det går inte att använda typ %s som typ %s" +msgstr "det gÃ¥r inte att använda typ %s som typ %s" #: go/gofrontend/types.cc:2980 msgid "different receiver types" @@ -11989,26 +11989,26 @@ msgstr "olika resultattyper" #: go/gofrontend/types.cc:4054 #, c-format msgid "implicit assignment of %s%s%s hidden field %s%s%s" -msgstr "implicit tilldelning av dolt fält %4$s%5$s%6$s i %1$s%2$s%3$s" +msgstr "implicit tilldelning av dolt fält %4$s%5$s%6$s i %1$s%2$s%3$s" #: go/gofrontend/types.cc:6423 #, c-format msgid "need explicit conversion; missing method %s%s%s" -msgstr "en explicit konvertering behövs, metoden %s%s%s saknas" +msgstr "en explicit konvertering behövs, metoden %s%s%s saknas" #: go/gofrontend/types.cc:6440 go/gofrontend/types.cc:6582 #, c-format msgid "incompatible type for method %s%s%s" -msgstr "inkompatibel typ för metoden %s%s%s" +msgstr "inkompatibel typ för metoden %s%s%s" #: go/gofrontend/types.cc:6444 go/gofrontend/types.cc:6586 #, c-format msgid "incompatible type for method %s%s%s (%s)" -msgstr "inkompatibel typ för metoden %s%s%s (%s)" +msgstr "inkompatibel typ för metoden %s%s%s (%s)" #: go/gofrontend/types.cc:6523 go/gofrontend/types.cc:6536 msgid "pointer to interface type has no methods" -msgstr "pekare till gränssnittstyp har inga metoder" +msgstr "pekare till gränssnittstyp har inga metoder" #: go/gofrontend/types.cc:6525 go/gofrontend/types.cc:6538 msgid "type has no methods" @@ -12027,7 +12027,7 @@ msgstr "metoden saknas %s%s%s" #: go/gofrontend/types.cc:6602 #, c-format msgid "method %s%s%s requires a pointer" -msgstr "metoden %s%s%s kräver en pekare" +msgstr "metoden %s%s%s kräver en pekare" #. Warn about and ignore all others for now, but store them. #: attribs.c:315 c-family/c-common.c:7387 objc/objc-act.c:4952 @@ -12039,84 +12039,84 @@ msgstr "attributdirektivet %qE ignorerat" #: attribs.c:323 #, gcc-internal-format msgid "wrong number of arguments specified for %qE attribute" -msgstr "fel antal argument angivet för attributet %qE" +msgstr "fel antal argument angivet för attributet %qE" #: attribs.c:341 #, gcc-internal-format msgid "%qE attribute does not apply to types" -msgstr "attributet %qE är inte applicerbart på typer" +msgstr "attributet %qE är inte applicerbart pÃ¥ typer" #: attribs.c:393 #, gcc-internal-format msgid "%qE attribute only applies to function types" -msgstr "attributet %qE är bara tillämpligt på funktionstyper" +msgstr "attributet %qE är bara tillämpligt pÃ¥ funktionstyper" #: attribs.c:403 #, gcc-internal-format msgid "type attributes ignored after type is already defined" -msgstr "typattribut ignoreras efter att typen redan är definierad" +msgstr "typattribut ignoreras efter att typen redan är definierad" #: bb-reorder.c:1888 #, gcc-internal-format, gfc-internal-format msgid "multiple hot/cold transitions found (bb %i)" -msgstr "flera varmt/kallt-övergångar funna (bb %i)" +msgstr "flera varmt/kallt-övergÃ¥ngar funna (bb %i)" #: bt-load.c:1546 #, gcc-internal-format msgid "branch target register load optimization is not intended to be run twice" -msgstr "optimeringen av lastning av grenmålsregister är inte avsedd att köras två gånger" +msgstr "optimeringen av lastning av grenmÃ¥lsregister är inte avsedd att köras tvÃ¥ gÃ¥nger" #: builtins.c:620 #, gcc-internal-format msgid "offset outside bounds of constant string" -msgstr "index till en konstant sträng pekar utanför dess gränser" +msgstr "index till en konstant sträng pekar utanför dess gränser" #: builtins.c:1161 #, gcc-internal-format msgid "second argument to %<__builtin_prefetch%> must be a constant" -msgstr "andra argumentet till %<__builtin_prefetch%> måste vara en konstant" +msgstr "andra argumentet till %<__builtin_prefetch%> mÃ¥ste vara en konstant" #: builtins.c:1168 #, gcc-internal-format msgid "invalid second argument to %<__builtin_prefetch%>; using zero" -msgstr "ogiltigt andra argument till %<__builtin_prefetch%>; använder noll" +msgstr "ogiltigt andra argument till %<__builtin_prefetch%>; använder noll" #: builtins.c:1176 #, gcc-internal-format msgid "third argument to %<__builtin_prefetch%> must be a constant" -msgstr "tredje argumentet till %<__builtin_prefetch%> måste vara en konstant" +msgstr "tredje argumentet till %<__builtin_prefetch%> mÃ¥ste vara en konstant" #: builtins.c:1183 #, gcc-internal-format msgid "invalid third argument to %<__builtin_prefetch%>; using zero" -msgstr "ogiltigt tredje argument till %<__builtin_prefetch%>; använder noll" +msgstr "ogiltigt tredje argument till %<__builtin_prefetch%>; använder noll" #: builtins.c:4214 gimplify.c:2406 #, gcc-internal-format msgid "too few arguments to function %<va_start%>" -msgstr "För många argument till funktionen %<va_start%>" +msgstr "För mÃ¥nga argument till funktionen %<va_start%>" #: builtins.c:4372 #, gcc-internal-format msgid "first argument to %<va_arg%> not of type %<va_list%>" -msgstr "första argumentet till %<va_arg%> är inte av typen %<va_list%>" +msgstr "första argumentet till %<va_arg%> är inte av typen %<va_list%>" #: builtins.c:4388 #, gcc-internal-format msgid "%qT is promoted to %qT when passed through %<...%>" -msgstr "%qT konverteras till %qT när det skickas via %<...%>" +msgstr "%qT konverteras till %qT när det skickas via %<...%>" #: builtins.c:4393 #, gcc-internal-format msgid "(so you should pass %qT not %qT to %<va_arg%>)" -msgstr "(alltså skall du skicka %qT och inte %qT till %<va_arg%>)" +msgstr "(alltsÃ¥ skall du skicka %qT och inte %qT till %<va_arg%>)" #. We can, however, treat "undefined" any way we please. #. Call abort to encourage the user to fix the program. #: builtins.c:4400 c-typeck.c:2787 #, gcc-internal-format msgid "if this code is reached, the program will abort" -msgstr "om denna kod nås, kommer programmet att avbryta" +msgstr "om denna kod nÃ¥s, kommer programmet att avbryta" #: builtins.c:4527 #, gcc-internal-format @@ -12131,22 +12131,22 @@ msgstr "ogiltigt argument till %<__builtin_return_address%>" #: builtins.c:4542 #, gcc-internal-format msgid "unsupported argument to %<__builtin_frame_address%>" -msgstr "ej stött argument till %<__builtin_frame_address%>" +msgstr "ej stött argument till %<__builtin_frame_address%>" #: builtins.c:4544 #, gcc-internal-format msgid "unsupported argument to %<__builtin_return_address%>" -msgstr "ej stött argument till %<__builtin_return_address%>" +msgstr "ej stött argument till %<__builtin_return_address%>" #: builtins.c:4808 #, gcc-internal-format msgid "both arguments to %<__builtin___clear_cache%> must be pointers" -msgstr "båda argumenten till %<__builtin___clear_cache%> måste vara pekare" +msgstr "bÃ¥da argumenten till %<__builtin___clear_cache%> mÃ¥ste vara pekare" #: builtins.c:4903 #, gcc-internal-format msgid "trampoline generated for nested function %qD" -msgstr "trampolin genererad för nästad funktion %qD" +msgstr "trampolin genererad för nästad funktion %qD" #: builtins.c:5198 builtins.c:5211 #, gcc-internal-format @@ -12154,73 +12154,73 @@ msgid "%qD changed semantics in GCC 4.4" msgstr "%qD bytte semantik i GCC 4.4" #: builtins.c:5310 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid memory model argument to builtin" -msgstr "ogiltigt argument inbyggd funktion" +msgstr "ogiltigt minnesmodellargument till inbyggd funktion" #: builtins.c:5330 #, gcc-internal-format msgid "invalid memory model for %<__atomic_exchange%>" -msgstr "ogiltig minnesmodell för %<__atomic_exchange%>" +msgstr "ogiltig minnesmodell för %<__atomic_exchange%>" #: builtins.c:5366 #, gcc-internal-format msgid "invalid failure memory model for %<__atomic_compare_exchange%>" -msgstr "ogiltig felminnesmodell för %<__atomic_compare_exchange%>" +msgstr "ogiltig felminnesmodell för %<__atomic_compare_exchange%>" #: builtins.c:5372 #, gcc-internal-format msgid "failure memory model cannot be stronger than success memory model for %<__atomic_compare_exchange%>" -msgstr "felminnesmodellen kan inte vara starkare än den lyckade minnesmodellen för %<__atomic_compare_exchange%>" +msgstr "felminnesmodellen kan inte vara starkare än den lyckade minnesmodellen för %<__atomic_compare_exchange%>" #: builtins.c:5418 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid memory model for %<__atomic_load%>" -msgstr "ogiltigt användning av %<auto%>" +msgstr "ogiltigt minnesmodell för %<_atomic_load%>" #: builtins.c:5448 builtins.c:5554 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid memory model for %<__atomic_store%>" -msgstr "ogiltigt användning av %<auto%>" +msgstr "ogiltigt minnesmodell för %<__atomic_store%>" #: builtins.c:5663 #, gcc-internal-format msgid "non-constant argument 1 to __atomic_always_lock_free" -msgstr "argument 1 till __atomic_always_lock_free är inte konstant" +msgstr "argument 1 till __atomic_always_lock_free är inte konstant" #: builtins.c:5705 #, gcc-internal-format msgid "non-integer argument 1 to __atomic_is_lock_free" -msgstr "argument 1 till __atomic_is_lock_free är inte heltal" +msgstr "argument 1 till __atomic_is_lock_free är inte heltal" #. All valid uses of __builtin_va_arg_pack () are removed during #. inlining. #: builtins.c:5989 expr.c:9944 #, gcc-internal-format msgid "%Kinvalid use of %<__builtin_va_arg_pack ()%>" -msgstr "%Kogiltigt användning av %<__builtin_va_arg_pack ()%>" +msgstr "%Kogiltigt användning av %<__builtin_va_arg_pack ()%>" #. All valid uses of __builtin_va_arg_pack_len () are removed during #. inlining. #: builtins.c:5995 #, gcc-internal-format msgid "%Kinvalid use of %<__builtin_va_arg_pack_len ()%>" -msgstr "%Kogiltigt användning av %<__builtin_va_arg_pack_len ()%>" +msgstr "%Kogiltigt användning av %<__builtin_va_arg_pack_len ()%>" #: builtins.c:6234 #, gcc-internal-format msgid "%<__builtin_longjmp%> second argument must be 1" -msgstr "andra argumentet till %<__builtin_longjmp%> måste vara 1" +msgstr "andra argumentet till %<__builtin_longjmp%> mÃ¥ste vara 1" #: builtins.c:7077 #, gcc-internal-format msgid "target format does not support infinity" -msgstr "målformatet stödjer inte oändligheten" +msgstr "mÃ¥lformatet stödjer inte oändligheten" #: builtins.c:12058 #, gcc-internal-format msgid "%<va_start%> used in function with fixed args" -msgstr "%<va_start%> används i en funktion med fixt antal parametrar" +msgstr "%<va_start%> används i en funktion med fixt antal parametrar" #: builtins.c:12066 #, gcc-internal-format @@ -12247,42 +12247,42 @@ msgstr "fel antal argument till funktionen %<__builtin_next_arg%>" #: builtins.c:12114 #, gcc-internal-format msgid "second parameter of %<va_start%> not last named argument" -msgstr "andra parametern till %<va_start%> är inte det sista namngivna argumentet" +msgstr "andra parametern till %<va_start%> är inte det sista namngivna argumentet" #: builtins.c:12124 #, gcc-internal-format msgid "undefined behaviour when second parameter of %<va_start%> is declared with %<register%> storage" -msgstr "odefinierat beteende när andra parametern till %<va_start%> är deklarerad med lagringsklass %<register%>" +msgstr "odefinierat beteende när andra parametern till %<va_start%> är deklarerad med lagringsklass %<register%>" #: builtins.c:12360 #, gcc-internal-format msgid "%Kfirst argument of %D must be a pointer, second integer constant" -msgstr "%Kförsta argumentet till %D måste vara en pekare, det andra en heltalskonstant" +msgstr "%Kförsta argumentet till %D mÃ¥ste vara en pekare, det andra en heltalskonstant" #: builtins.c:12373 #, gcc-internal-format msgid "%Klast argument of %D is not integer constant between 0 and 3" -msgstr "%Ksista argumentet till %D är inte en heltalskonstant mellan 0 och 3" +msgstr "%Ksista argumentet till %D är inte en heltalskonstant mellan 0 och 3" #: builtins.c:12418 builtins.c:12569 builtins.c:12626 #, gcc-internal-format msgid "%Kcall to %D will always overflow destination buffer" -msgstr "%Kanrop av %D kommer alltid att spilla över destinationsbufferten" +msgstr "%Kanrop av %D kommer alltid att spilla över destinationsbufferten" #: builtins.c:12559 #, gcc-internal-format msgid "%Kcall to %D might overflow destination buffer" -msgstr "%Kanrop av %D kan komma att spilla över destinationsbufferten" +msgstr "%Kanrop av %D kan komma att spilla över destinationsbufferten" #: builtins.c:12647 #, gcc-internal-format msgid "%Kattempt to free a non-heap object %qD" -msgstr "%Kförsök att frigöra ett icke-heap-objekt %qD" +msgstr "%Kförsök att frigöra ett icke-heap-objekt %qD" #: builtins.c:12650 #, gcc-internal-format msgid "%Kattempt to free a non-heap object" -msgstr "%Kförsök att frigöra ett icke-heap-objekt" +msgstr "%Kförsök att frigöra ett icke-heap-objekt" #. Except for passing an argument to an unprototyped function, #. this is a constraint violation. When passing an argument to @@ -12293,12 +12293,12 @@ msgstr "%Kförsök att frigöra ett icke-heap-objekt" #: cp/typeck.c:1849 cp/typeck.c:6709 cp/typeck.c:7407 fortran/convert.c:88 #, gcc-internal-format msgid "void value not ignored as it ought to be" -msgstr "värdet av typen void ignoreras inte vilket bör göras" +msgstr "värdet av typen void ignoreras inte vilket bör göras" #: c-convert.c:181 fortran/convert.c:122 java/typeck.c:150 #, gcc-internal-format msgid "conversion to non-scalar type requested" -msgstr "konvertering till icke-skalär typ begärd" +msgstr "konvertering till icke-skalär typ begärd" #: c-decl.c:717 #, gcc-internal-format @@ -12308,52 +12308,52 @@ msgstr "vektor %q+D antas ha ett element" #: c-decl.c:758 #, gcc-internal-format msgid "%qD is static but used in inline function %qD which is not static" -msgstr "%qD är statisk men använd i inline-funktionen %qD som inte är statisk" +msgstr "%qD är statisk men använd i inline-funktionen %qD som inte är statisk" #: c-decl.c:763 #, gcc-internal-format msgid "%q+D is static but declared in inline function %qD which is not static" -msgstr "%q+D är statisk men deklarerad i inline-funktion %qD som inte är statisk" +msgstr "%q+D är statisk men deklarerad i inline-funktion %qD som inte är statisk" #: c-decl.c:948 #, gcc-internal-format, gfc-internal-format msgid "GCC supports only %u nested scopes" -msgstr "GCC stödjer endast %u nästade definitionsområden" +msgstr "GCC stödjer endast %u nästade definitionsomrÃ¥den" #: c-decl.c:1100 cp/decl.c:373 #, gcc-internal-format msgid "label %q+D used but not defined" -msgstr "etikett %q+D använd men är inte definierad" +msgstr "etikett %q+D använd men är inte definierad" #: c-decl.c:1145 #, gcc-internal-format msgid "nested function %q+D declared but never defined" -msgstr "nästad funktion %q+D är deklarerad men aldrig definierad" +msgstr "nästad funktion %q+D är deklarerad men aldrig definierad" #: c-decl.c:1157 #, gcc-internal-format msgid "inline function %q+D declared but never defined" -msgstr "inline:ad funktion %q+D är deklarerad men aldrig definierad" +msgstr "inline:ad funktion %q+D är deklarerad men aldrig definierad" #: c-decl.c:1174 cp/decl.c:628 #, gcc-internal-format msgid "unused variable %q+D" -msgstr "oanvänd variabel %q+D" +msgstr "oanvänd variabel %q+D" #: c-decl.c:1178 #, gcc-internal-format msgid "variable %qD set but not used" -msgstr "variabeln %qD sätts men används inte" +msgstr "variabeln %qD sätts men används inte" #: c-decl.c:1183 #, gcc-internal-format msgid "type of array %q+D completed incompatibly with implicit initialization" -msgstr "den kompletterade typen på vektor %q+D är okompatibel med implicit initiering" +msgstr "den kompletterade typen pÃ¥ vektor %q+D är okompatibel med implicit initiering" #: c-decl.c:1462 c-decl.c:5851 c-decl.c:6681 c-decl.c:7393 #, gcc-internal-format msgid "originally defined here" -msgstr "ursprungligen definierad här" +msgstr "ursprungligen definierad här" #: c-decl.c:1532 #, gcc-internal-format @@ -12368,39 +12368,39 @@ msgstr "en argumenttyp med en standardkonvertering kan inte matcha en tom parame #: c-decl.c:1580 #, gcc-internal-format msgid "prototype for %q+D declares more arguments than previous old-style definition" -msgstr "prototypen för %q+D deklarerar fler argument än tidigare gammaldags definition" +msgstr "prototypen för %q+D deklarerar fler argument än tidigare gammaldags definition" #: c-decl.c:1586 #, gcc-internal-format msgid "prototype for %q+D declares fewer arguments than previous old-style definition" -msgstr "prototypen för %q+D deklarerar färre argument än tidigare gammaldags definition" +msgstr "prototypen för %q+D deklarerar färre argument än tidigare gammaldags definition" #: c-decl.c:1595 #, gcc-internal-format msgid "prototype for %q+D declares argument %d with incompatible type" -msgstr "prototypen för %q+D deklarerar argument %d med inkompatibel typ" +msgstr "prototypen för %q+D deklarerar argument %d med inkompatibel typ" #. If we get here, no errors were found, but do issue a warning #. for this poor-style construct. #: c-decl.c:1608 #, gcc-internal-format msgid "prototype for %q+D follows non-prototype definition" -msgstr "prototyp för %q+D följer på en icke-prototypdefinition" +msgstr "prototyp för %q+D följer pÃ¥ en icke-prototypdefinition" #: c-decl.c:1623 #, gcc-internal-format msgid "previous definition of %q+D was here" -msgstr "tidigare definition av %q+D var här" +msgstr "tidigare definition av %q+D var här" #: c-decl.c:1625 #, gcc-internal-format msgid "previous implicit declaration of %q+D was here" -msgstr "tidigare implicit deklaration av %q+D var här" +msgstr "tidigare implicit deklaration av %q+D var här" #: c-decl.c:1627 #, gcc-internal-format msgid "previous declaration of %q+D was here" -msgstr "tidigare deklaration av %q+D var här" +msgstr "tidigare deklaration av %q+D var här" #: c-decl.c:1667 #, gcc-internal-format @@ -12420,7 +12420,7 @@ msgstr "deklaration av %q+D skuggar en inbyggd funktion" #: c-decl.c:1683 #, gcc-internal-format msgid "redeclaration of enumerator %q+D" -msgstr "omdeklaration av uppräkningstyp %q+D" +msgstr "omdeklaration av uppräkningstyp %q+D" #. If types don't match for a built-in, throw away the #. built-in. No point in calling locate_old_decl here, it @@ -12428,32 +12428,32 @@ msgstr "omdeklaration av uppräkningstyp %q+D" #: c-decl.c:1704 #, gcc-internal-format msgid "conflicting types for built-in function %q+D" -msgstr "motstridiga typer på inbyggd funktion %q+D" +msgstr "motstridiga typer pÃ¥ inbyggd funktion %q+D" #: c-decl.c:1729 c-decl.c:1742 c-decl.c:1778 #, gcc-internal-format msgid "conflicting types for %q+D" -msgstr "motstridiga typer på %q+D" +msgstr "motstridiga typer pÃ¥ %q+D" #: c-decl.c:1758 #, gcc-internal-format msgid "conflicting named address spaces (generic vs %s) for %q+D" -msgstr "motstridiga namngivna adressrymder (generisk respektive %s) för %q+D" +msgstr "motstridiga namngivna adressrymder (generisk respektive %s) för %q+D" #: c-decl.c:1762 #, gcc-internal-format msgid "conflicting named address spaces (%s vs generic) for %q+D" -msgstr "motstridiga namngivna adressrymder (%s repektive generisk) för %q+D" +msgstr "motstridiga namngivna adressrymder (%s repektive generisk) för %q+D" #: c-decl.c:1766 #, gcc-internal-format msgid "conflicting named address spaces (%s vs %s) for %q+D" -msgstr "motstridiga namngivna adressrymder (%s respektive %s) för %q+D" +msgstr "motstridiga namngivna adressrymder (%s respektive %s) för %q+D" #: c-decl.c:1775 #, gcc-internal-format msgid "conflicting type qualifiers for %q+D" -msgstr "motstridiga typkvalificerare för %q+D" +msgstr "motstridiga typkvalificerare för %q+D" #: c-decl.c:1800 #, gcc-internal-format @@ -12478,47 +12478,47 @@ msgstr "omdefiniering av %q+D" #: c-decl.c:1908 c-decl.c:2014 #, gcc-internal-format msgid "static declaration of %q+D follows non-static declaration" -msgstr "statisk deklaration av %q+D följer på icke-statisk deklaration" +msgstr "statisk deklaration av %q+D följer pÃ¥ icke-statisk deklaration" #: c-decl.c:1918 c-decl.c:1926 c-decl.c:2004 c-decl.c:2011 #, gcc-internal-format msgid "non-static declaration of %q+D follows static declaration" -msgstr "icke-statisk deklaration av %q+D följer på statisk deklaration" +msgstr "icke-statisk deklaration av %q+D följer pÃ¥ statisk deklaration" #: c-decl.c:1942 #, gcc-internal-format msgid "%<gnu_inline%> attribute present on %q+D" -msgstr "attribut %<gnu_inline%> finns på %q+D" +msgstr "attribut %<gnu_inline%> finns pÃ¥ %q+D" #: c-decl.c:1945 #, gcc-internal-format msgid "but not here" -msgstr "men inte här" +msgstr "men inte här" #: c-decl.c:1963 #, gcc-internal-format msgid "thread-local declaration of %q+D follows non-thread-local declaration" -msgstr "trådlokal deklaration av %q+D följer på icke trådlokal deklaration" +msgstr "trÃ¥dlokal deklaration av %q+D följer pÃ¥ icke trÃ¥dlokal deklaration" #: c-decl.c:1966 #, gcc-internal-format msgid "non-thread-local declaration of %q+D follows thread-local declaration" -msgstr "icke trådlokal deklaration av %q+D följer på trådlokal deklaration" +msgstr "icke trÃ¥dlokal deklaration av %q+D följer pÃ¥ trÃ¥dlokal deklaration" #: c-decl.c:1996 #, gcc-internal-format msgid "extern declaration of %q+D follows declaration with no linkage" -msgstr "extern deklaration av %q+D följer på deklaration utan länkklass" +msgstr "extern deklaration av %q+D följer pÃ¥ deklaration utan länkklass" #: c-decl.c:2032 #, gcc-internal-format msgid "declaration of %q+D with no linkage follows extern declaration" -msgstr "deklaration av %q+D utan länkklass följer på extern deklaration" +msgstr "deklaration av %q+D utan länkklass följer pÃ¥ extern deklaration" #: c-decl.c:2038 #, gcc-internal-format msgid "redeclaration of %q+D with no linkage" -msgstr "omdeklaration av %q+D utan länkklass" +msgstr "omdeklaration av %q+D utan länkklass" #: c-decl.c:2064 #, gcc-internal-format @@ -12528,12 +12528,12 @@ msgstr "omdeklaration av %q+D med annan synlighet (gammal synlighet bevarad)" #: c-decl.c:2075 #, gcc-internal-format msgid "inline declaration of %qD follows declaration with attribute noinline" -msgstr "inline-deklaration av %qD följer på deklaration med attributet noinline" +msgstr "inline-deklaration av %qD följer pÃ¥ deklaration med attributet noinline" #: c-decl.c:2082 #, gcc-internal-format msgid "declaration of %q+D with attribute noinline follows inline declaration " -msgstr "deklaration av %q+D med attributet noinline följer på inline-deklaration" +msgstr "deklaration av %q+D med attributet noinline följer pÃ¥ inline-deklaration" #: c-decl.c:2100 #, gcc-internal-format @@ -12560,7 +12560,7 @@ msgstr "deklaration av %q+D skuggar en parameter" msgid "declaration of %q+D shadows a global declaration" msgstr "deklaration av %q+D skuggar en global deklaration" -# local, det kan vara både lokal variabel och lokal funktionsdeklartion +# local, det kan vara bÃ¥de lokal variabel och lokal funktionsdeklartion #: c-decl.c:2563 #, gcc-internal-format msgid "declaration of %q+D shadows a previous local" @@ -12569,12 +12569,12 @@ msgstr "deklaration av %q+D skuggar en tidigare lokal deklaration" #: c-decl.c:2567 cp/name-lookup.c:1150 cp/name-lookup.c:1193 #, gcc-internal-format msgid "shadowed declaration is here" -msgstr "skuggad deklaration är här" +msgstr "skuggad deklaration är här" #: c-decl.c:2694 #, gcc-internal-format msgid "nested extern declaration of %qD" -msgstr "nästad extern-deklaration av %qD" +msgstr "nästad extern-deklaration av %qD" #: c-decl.c:2870 c-decl.c:2873 #, gcc-internal-format @@ -12594,42 +12594,42 @@ msgstr "inkompatibel implicit deklaration av funktionen %qD" #: c-decl.c:2998 #, gcc-internal-format msgid "%qE undeclared here (not in a function)" -msgstr "%qE är odeklarerad här (inte i en funktion)" +msgstr "%qE är odeklarerad här (inte i en funktion)" #: c-decl.c:3004 #, gcc-internal-format msgid "%qE undeclared (first use in this function)" -msgstr "%qE är odeklarerad (första förekomsten i denna funktion)" +msgstr "%qE är odeklarerad (första förekomsten i denna funktion)" #: c-decl.c:3007 #, gcc-internal-format msgid "each undeclared identifier is reported only once for each function it appears in" -msgstr "varje odeklarerad identifierare rapporteras bara en gång för varje funktion den förekommer i" +msgstr "varje odeklarerad identifierare rapporteras bara en gÃ¥ng för varje funktion den förekommer i" #: c-decl.c:3057 cp/decl.c:2593 #, gcc-internal-format msgid "label %qE referenced outside of any function" -msgstr "etikett %qE är refererad till utanför någon funktion" +msgstr "etikett %qE är refererad till utanför nÃ¥gon funktion" #: c-decl.c:3093 #, gcc-internal-format msgid "jump into scope of identifier with variably modified type" -msgstr "hopp in i räckvidd för identifierare med variabel typ" +msgstr "hopp in i räckvidd för identifierare med variabel typ" #: c-decl.c:3096 #, gcc-internal-format msgid "jump skips variable initialization" -msgstr "hoppar över variabelinitiering" +msgstr "hoppar över variabelinitiering" #: c-decl.c:3097 c-decl.c:3153 c-decl.c:3242 #, gcc-internal-format msgid "label %qD defined here" -msgstr "etikett %qD är definierad här" +msgstr "etikett %qD är definierad här" #: c-decl.c:3098 c-decl.c:3370 #, gcc-internal-format msgid "%qD declared here" -msgstr "%qD är deklarerad här" +msgstr "%qD är deklarerad här" #: c-decl.c:3152 c-decl.c:3241 #, gcc-internal-format @@ -12649,17 +12649,17 @@ msgstr "dubblerad etikett %qD" #: c-decl.c:3303 #, gcc-internal-format msgid "traditional C lacks a separate namespace for labels, identifier %qE conflicts" -msgstr "traditionell C saknar en separat namnrymd för etiketter, identifierare %qE står i konflikt" +msgstr "traditionell C saknar en separat namnrymd för etiketter, identifierare %qE stÃ¥r i konflikt" #: c-decl.c:3368 #, gcc-internal-format msgid "switch jumps over variable initialization" -msgstr "switch hoppar över variabelinitieringar" +msgstr "switch hoppar över variabelinitieringar" #: c-decl.c:3369 c-decl.c:3380 #, gcc-internal-format msgid "switch starts here" -msgstr "switch börjar här" +msgstr "switch börjar här" #: c-decl.c:3379 #, gcc-internal-format @@ -12674,12 +12674,12 @@ msgstr "%qE definierad som fel sorts tagg" #: c-decl.c:3673 c-typeck.c:10999 c-family/c-common.c:4164 #, gcc-internal-format msgid "invalid use of %<restrict%>" -msgstr "ogiltigt användning av %<restrict%>" +msgstr "ogiltigt användning av %<restrict%>" #: c-decl.c:3683 #, gcc-internal-format msgid "unnamed struct/union that defines no instances" -msgstr "odöpt struktur/union som inte har någon instans" +msgstr "odöpt struktur/union som inte har nÃ¥gon instans" #: c-decl.c:3693 #, gcc-internal-format @@ -12692,14 +12692,14 @@ msgid "empty declaration with type qualifier does not redeclare tag" msgstr "tom deklaration med typkvalificerare deklarerar inte om en tagg" #: c-decl.c:3718 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "empty declaration with %<_Alignas%> does not redeclare tag" -msgstr "tom deklaration med typkvalificerare deklarerar inte om en tagg" +msgstr "tom deklaration med %<_Alignas%> deklarerar inte om en tagg" #: c-decl.c:3740 c-decl.c:3747 #, gcc-internal-format msgid "useless type name in empty declaration" -msgstr "oanvändbart typnamn i tom deklaration" +msgstr "oanvändbart typnamn i tom deklaration" #: c-decl.c:3755 #, gcc-internal-format @@ -12707,39 +12707,39 @@ msgid "%<inline%> in empty declaration" msgstr "%<inline%> i tom deklaration" #: c-decl.c:3761 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<_Noreturn%> in empty declaration" -msgstr "%<inline%> i tom deklaration" +msgstr "%<_Noreturn%> i tom deklaration" #: c-decl.c:3767 #, gcc-internal-format msgid "%<auto%> in file-scope empty declaration" -msgstr "%<auto%> tom deklaration på filnivå" +msgstr "%<auto%> tom deklaration pÃ¥ filnivÃ¥" #: c-decl.c:3773 #, gcc-internal-format msgid "%<register%> in file-scope empty declaration" -msgstr "%<register%> i tom deklaration på filnivå" +msgstr "%<register%> i tom deklaration pÃ¥ filnivÃ¥" #: c-decl.c:3779 #, gcc-internal-format msgid "useless storage class specifier in empty declaration" -msgstr "oanvändbar specificerare av lagringsklass i tom deklaration" +msgstr "oanvändbar specificerare av lagringsklass i tom deklaration" #: c-decl.c:3785 #, gcc-internal-format msgid "useless %<__thread%> in empty declaration" -msgstr "oanvändbar %<__thread%> i tom deklaration" +msgstr "oanvändbar %<__thread%> i tom deklaration" #: c-decl.c:3794 #, gcc-internal-format msgid "useless type qualifier in empty declaration" -msgstr "oanvändbar typkvalificerare i tom deklaration" +msgstr "oanvändbar typkvalificerare i tom deklaration" #: c-decl.c:3800 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "useless %<_Alignas%> in empty declaration" -msgstr "oanvändbar %<__thread%> i tom deklaration" +msgstr "oanvändbar %<_Alignas%> i tom deklaration" #: c-decl.c:3807 c-parser.c:1498 #, gcc-internal-format @@ -12749,12 +12749,12 @@ msgstr "tom deklaration" #: c-decl.c:3879 #, gcc-internal-format msgid "ISO C90 does not support %<static%> or type qualifiers in parameter array declarators" -msgstr "ISO C90 stödjer inte %<static%> eller typkvalificerare i parametervektordeklarerare" +msgstr "ISO C90 stödjer inte %<static%> eller typkvalificerare i parametervektordeklarerare" #: c-decl.c:3883 #, gcc-internal-format msgid "ISO C90 does not support %<[*]%> array declarators" -msgstr "ISO C90 stödjer inte %<[*]%>-vektordeklarerare" +msgstr "ISO C90 stödjer inte %<[*]%>-vektordeklarerare" #. C99 6.7.5.2p4 #. A function definition isn't function prototype scope C99 6.2.1p4. @@ -12762,28 +12762,28 @@ msgstr "ISO C90 stödjer inte %<[*]%>-vektordeklarerare" #: c-decl.c:3890 c-decl.c:6249 #, gcc-internal-format msgid "%<[*]%> not allowed in other than function prototype scope" -msgstr "%<[*]%> är inte tillåtet annat än inom en funktionsprototyp" +msgstr "%<[*]%> är inte tillÃ¥tet annat än inom en funktionsprototyp" #: c-decl.c:4003 #, gcc-internal-format msgid "%q+D is usually a function" -msgstr "%q+D är vanligtvis en funktion" +msgstr "%q+D är vanligtvis en funktion" #: c-decl.c:4012 #, gcc-internal-format msgid "typedef %qD is initialized (use __typeof__ instead)" -msgstr "typedef %qD är initierad (använd __typeof__ istället)" +msgstr "typedef %qD är initierad (använd __typeof__ istället)" #: c-decl.c:4017 #, gcc-internal-format msgid "function %qD is initialized like a variable" -msgstr "funktionen %qD är initierad som en variabel" +msgstr "funktionen %qD är initierad som en variabel" #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. #: c-decl.c:4023 #, gcc-internal-format msgid "parameter %qD is initialized" -msgstr "parametern %qD är initierad" +msgstr "parametern %qD är initierad" #. Although C99 is unclear about whether incomplete arrays #. of VLAs themselves count as VLAs, it does not make @@ -12797,17 +12797,17 @@ msgstr "objekt med variabel storlek kan inte initieras" #: c-decl.c:4048 #, gcc-internal-format msgid "variable %qD has initializer but incomplete type" -msgstr "variabeln %qD har initierare men ofullständig typ" +msgstr "variabeln %qD har initierare men ofullständig typ" #: c-decl.c:4137 cp/decl.c:4418 cp/decl.c:12643 #, gcc-internal-format msgid "inline function %q+D given attribute noinline" -msgstr "inline-funktionen %q+D har fått attributet noinline" +msgstr "inline-funktionen %q+D har fÃ¥tt attributet noinline" #: c-decl.c:4188 #, gcc-internal-format msgid "uninitialized const member in %qT is invalid in C++" -msgstr "oinitierad const-medlem i %qT är ogiltigt i C++" +msgstr "oinitierad const-medlem i %qT är ogiltigt i C++" #: c-decl.c:4190 cp/init.c:2115 cp/init.c:2130 #, gcc-internal-format @@ -12817,7 +12817,7 @@ msgstr "%qD borde initieras" #: c-decl.c:4268 #, gcc-internal-format msgid "initializer fails to determine size of %q+D" -msgstr "initierare misslyckas med att bestämma storleken på %q+D" +msgstr "initierare misslyckas med att bestämma storleken pÃ¥ %q+D" #: c-decl.c:4273 #, gcc-internal-format @@ -12827,142 +12827,142 @@ msgstr "vektorstorlek saknas i %q+D" #: c-decl.c:4285 #, gcc-internal-format msgid "zero or negative size array %q+D" -msgstr "noll eller negativ storlek på vektorn %q+D" +msgstr "noll eller negativ storlek pÃ¥ vektorn %q+D" #: c-decl.c:4340 varasm.c:1966 #, gcc-internal-format msgid "storage size of %q+D isn%'t known" -msgstr "lagringsstorlek på %q+D är okänd" +msgstr "lagringsstorlek pÃ¥ %q+D är okänd" #: c-decl.c:4351 #, gcc-internal-format msgid "storage size of %q+D isn%'t constant" -msgstr "lagringsstorlek på %q+D är inte konstant" +msgstr "lagringsstorlek pÃ¥ %q+D är inte konstant" #: c-decl.c:4401 #, gcc-internal-format msgid "ignoring asm-specifier for non-static local variable %q+D" -msgstr "ignorerar asm-specificerare för ickestatisk lokal variabel %q+D" +msgstr "ignorerar asm-specificerare för ickestatisk lokal variabel %q+D" #: c-decl.c:4431 #, gcc-internal-format msgid "cannot put object with volatile field into register" -msgstr "kan inte lägga objekt med volatile-fält i register" +msgstr "kan inte lägga objekt med volatile-fält i register" #: c-decl.c:4518 #, gcc-internal-format msgid "uninitialized const %qD is invalid in C++" -msgstr "oinitierad const %qD är ogiltig i C++" +msgstr "oinitierad const %qD är ogiltig i C++" #: c-decl.c:4576 #, gcc-internal-format msgid "ISO C forbids forward parameter declarations" -msgstr "ISO C förbjuder framåtdeklaration av parametrar" +msgstr "ISO C förbjuder framÃ¥tdeklaration av parametrar" #: c-decl.c:4666 #, gcc-internal-format msgid "defining a type in a compound literal is invalid in C++" -msgstr "att definiera en typ i en sammansatt literal är ogiltigt i C++" +msgstr "att definiera en typ i en sammansatt literal är ogiltigt i C++" #: c-decl.c:4718 c-decl.c:4733 #, gcc-internal-format msgid "bit-field %qs width not an integer constant" -msgstr "bredden på bitfältet %qs är inte en heltalskonstant" +msgstr "bredden pÃ¥ bitfältet %qs är inte en heltalskonstant" #: c-decl.c:4728 #, gcc-internal-format msgid "bit-field %qs width not an integer constant expression" -msgstr "bredden på bitfältet %qs är inte ett konstant heltalsuttryck" +msgstr "bredden pÃ¥ bitfältet %qs är inte ett konstant heltalsuttryck" #: c-decl.c:4739 #, gcc-internal-format msgid "negative width in bit-field %qs" -msgstr "negativ storlek i bitfält %qs" +msgstr "negativ storlek i bitfält %qs" #: c-decl.c:4744 #, gcc-internal-format msgid "zero width for bit-field %qs" -msgstr "storlek noll på bitfält %qs" +msgstr "storlek noll pÃ¥ bitfält %qs" #: c-decl.c:4754 #, gcc-internal-format msgid "bit-field %qs has invalid type" -msgstr "bitfältet %qs har ogiltig typ" +msgstr "bitfältet %qs har ogiltig typ" #: c-decl.c:4764 #, gcc-internal-format msgid "type of bit-field %qs is a GCC extension" -msgstr "typen på bitfältet %qs är en GCC-utvidgning" +msgstr "typen pÃ¥ bitfältet %qs är en GCC-utvidgning" #: c-decl.c:4770 #, gcc-internal-format msgid "width of %qs exceeds its type" -msgstr "bredden på %qs är större än sin typ" +msgstr "bredden pÃ¥ %qs är större än sin typ" #: c-decl.c:4783 #, gcc-internal-format msgid "%qs is narrower than values of its type" -msgstr "%qs är smalare än värdena av sin typ" +msgstr "%qs är smalare än värdena av sin typ" #: c-decl.c:4802 #, gcc-internal-format msgid "ISO C90 forbids array %qE whose size can%'t be evaluated" -msgstr "ISO C90 förbjuder vektor %qE vars storlek inte kan beräknas" +msgstr "ISO C90 förbjuder vektor %qE vars storlek inte kan beräknas" #: c-decl.c:4806 #, gcc-internal-format msgid "ISO C90 forbids array whose size can%'t be evaluated" -msgstr "ISO C90 förbjuder vektorer vars storlek inte kan beräknas" +msgstr "ISO C90 förbjuder vektorer vars storlek inte kan beräknas" #: c-decl.c:4813 #, gcc-internal-format msgid "ISO C90 forbids variable length array %qE" -msgstr "ISO C90 förbjuder vektor %qE med variabel längd" +msgstr "ISO C90 förbjuder vektor %qE med variabel längd" #: c-decl.c:4816 #, gcc-internal-format msgid "ISO C90 forbids variable length array" -msgstr "ISO C90 förbjuder vektorer med variabel längd" +msgstr "ISO C90 förbjuder vektorer med variabel längd" #: c-decl.c:4825 #, gcc-internal-format msgid "the size of array %qE can%'t be evaluated" -msgstr "storleken på vektor %qE kan inte beräknas" +msgstr "storleken pÃ¥ vektor %qE kan inte beräknas" #: c-decl.c:4829 #, gcc-internal-format msgid "the size of array can %'t be evaluated" -msgstr "storleken på vektorn kan inte beräknas" +msgstr "storleken pÃ¥ vektorn kan inte beräknas" #: c-decl.c:4835 #, gcc-internal-format msgid "variable length array %qE is used" -msgstr "vektor %qE med variabel längd används" +msgstr "vektor %qE med variabel längd används" #: c-decl.c:4839 cp/decl.c:8053 #, gcc-internal-format msgid "variable length array is used" -msgstr "vektor med variabel längd används" +msgstr "vektor med variabel längd används" #: c-decl.c:4998 c-decl.c:5346 c-decl.c:5356 #, gcc-internal-format msgid "variably modified %qE at file scope" -msgstr "variabelt ändrad %qE i filräckvidd" +msgstr "variabelt ändrad %qE i filräckvidd" #: c-decl.c:5000 #, gcc-internal-format msgid "variably modified field at file scope" -msgstr "variabelt ändrat fält i filräckvidd" +msgstr "variabelt ändrat fält i filräckvidd" #: c-decl.c:5020 #, gcc-internal-format msgid "type defaults to %<int%> in declaration of %qE" -msgstr "typen sätts skönsmässigt till %<int%> i deklarationen av %qE" +msgstr "typen sätts skönsmässigt till %<int%> i deklarationen av %qE" #: c-decl.c:5024 #, gcc-internal-format msgid "type defaults to %<int%> in type name" -msgstr "typen sätts skönsmässigt till %<int%> i typnamnet" +msgstr "typen sätts skönsmässigt till %<int%> i typnamnet" #: c-decl.c:5057 #, gcc-internal-format @@ -13007,27 +13007,27 @@ msgstr "funktionsdefinition deklarerad som %<__thread%>" #: c-decl.c:5112 #, gcc-internal-format msgid "storage class specified for structure field %qE" -msgstr "lagringsklass angiven för postfält %qE" +msgstr "lagringsklass angiven för postfält %qE" #: c-decl.c:5115 #, gcc-internal-format msgid "storage class specified for structure field" -msgstr "lagringsklass angiven för postfält" +msgstr "lagringsklass angiven för postfält" #: c-decl.c:5119 #, gcc-internal-format msgid "storage class specified for parameter %qE" -msgstr "lagringsklass angiven för parameter %qE" +msgstr "lagringsklass angiven för parameter %qE" #: c-decl.c:5122 #, gcc-internal-format msgid "storage class specified for unnamed parameter" -msgstr "lagringsklass angiven för namnlös parameter" +msgstr "lagringsklass angiven för namnlös parameter" #: c-decl.c:5125 cp/decl.c:9020 #, gcc-internal-format msgid "storage class specified for typename" -msgstr "lagringsklass angiven för typnamn" +msgstr "lagringsklass angiven för typnamn" #: c-decl.c:5142 #, gcc-internal-format @@ -13037,27 +13037,27 @@ msgstr "%qE initierad och deklarerad %<extern%>" #: c-decl.c:5146 #, gcc-internal-format msgid "%qE has both %<extern%> and initializer" -msgstr "%qE har både %<extern%> och initierare" +msgstr "%qE har bÃ¥de %<extern%> och initierare" #: c-decl.c:5151 #, gcc-internal-format msgid "file-scope declaration of %qE specifies %<auto%>" -msgstr "filnivådeklaration av %qE anger %<auto%>" +msgstr "filnivÃ¥deklaration av %qE anger %<auto%>" #: c-decl.c:5155 #, gcc-internal-format msgid "file-scope declaration of %qE specifies %<register%>" -msgstr "filnivådeklaration av %qE anger %<register%>" +msgstr "filnivÃ¥deklaration av %qE anger %<register%>" #: c-decl.c:5160 #, gcc-internal-format msgid "nested function %qE declared %<extern%>" -msgstr "nästad funktion %qE är deklarerad %<extern%>" +msgstr "nästad funktion %qE är deklarerad %<extern%>" #: c-decl.c:5163 #, gcc-internal-format msgid "function-scope %qE implicitly auto and declared %<__thread%>" -msgstr "%qE i funktions definitionsområde är implicit auto och deklarerad %<__thread%>" +msgstr "%qE i funktions definitionsomrÃ¥de är implicit auto och deklarerad %<__thread%>" #. Only the innermost declarator (making a parameter be of #. array type which is converted to pointer type) @@ -13065,7 +13065,7 @@ msgstr "%qE i funktions definitionsområde är implicit auto och deklarerad %<__th #: c-decl.c:5210 c-decl.c:5540 #, gcc-internal-format msgid "static or type qualifiers in non-parameter array declarator" -msgstr "static- eller typkvalificerare i vektordeklarerare som inte är parameter" +msgstr "static- eller typkvalificerare i vektordeklarerare som inte är parameter" #: c-decl.c:5258 #, gcc-internal-format @@ -13090,83 +13090,83 @@ msgstr "deklaration av typnamn som en vektor av funktioner" #: c-decl.c:5277 c-decl.c:7177 #, gcc-internal-format msgid "invalid use of structure with flexible array member" -msgstr "ogiltig användning av post med flexibel vektormedlem" +msgstr "ogiltig användning av post med flexibel vektormedlem" #: c-decl.c:5303 #, gcc-internal-format msgid "size of array %qE has non-integer type" -msgstr "storlek på vektorn %qE är inte av heltalstyp" +msgstr "storlek pÃ¥ vektorn %qE är inte av heltalstyp" #: c-decl.c:5307 #, gcc-internal-format msgid "size of unnamed array has non-integer type" -msgstr "storlek på en namnlös vektor är inte av heltalstyp" +msgstr "storlek pÃ¥ en namnlös vektor är inte av heltalstyp" #: c-decl.c:5317 #, gcc-internal-format msgid "ISO C forbids zero-size array %qE" -msgstr "ISO C förbjuder vektor %qE med storlek noll" +msgstr "ISO C förbjuder vektor %qE med storlek noll" #: c-decl.c:5320 #, gcc-internal-format msgid "ISO C forbids zero-size array" -msgstr "ISO C förbjuder vektorer med storlek noll" +msgstr "ISO C förbjuder vektorer med storlek noll" #: c-decl.c:5329 #, gcc-internal-format msgid "size of array %qE is negative" -msgstr "storleken på vektorn %qE är negativ" +msgstr "storleken pÃ¥ vektorn %qE är negativ" #: c-decl.c:5331 #, gcc-internal-format msgid "size of unnamed array is negative" -msgstr "storleken på en namnlös vektor är negativ" +msgstr "storleken pÃ¥ en namnlös vektor är negativ" #: c-decl.c:5405 c-decl.c:5808 #, gcc-internal-format msgid "size of array %qE is too large" -msgstr "storleken på vektorn %qE är för stor" +msgstr "storleken pÃ¥ vektorn %qE är för stor" #: c-decl.c:5408 c-decl.c:5810 #, gcc-internal-format msgid "size of unnamed array is too large" -msgstr "storleken på en namnlös vektor är för stor" +msgstr "storleken pÃ¥ en namnlös vektor är för stor" #: c-decl.c:5445 #, gcc-internal-format msgid "ISO C90 does not support flexible array members" -msgstr "ISO C90 stödjer inte flexibla vektormedlemmar" +msgstr "ISO C90 stödjer inte flexibla vektormedlemmar" #. C99 6.7.5.2p4 #: c-decl.c:5466 #, gcc-internal-format msgid "%<[*]%> not in a declaration" -msgstr "%<[*]%> är inte i en deklaration" +msgstr "%<[*]%> är inte i en deklaration" #: c-decl.c:5479 #, gcc-internal-format msgid "array type has incomplete element type" -msgstr "fälttyp har ofullständig elementtyp" +msgstr "fälttyp har ofullständig elementtyp" #: c-decl.c:5573 #, gcc-internal-format msgid "%qE declared as function returning a function" -msgstr "%qE är deklarerad som en funktion som returnerar en funktion" +msgstr "%qE är deklarerad som en funktion som returnerar en funktion" #: c-decl.c:5576 #, gcc-internal-format msgid "type name declared as function returning a function" -msgstr "typnamn är deklarerat som en funktion som returnerar en funktion" +msgstr "typnamn är deklarerat som en funktion som returnerar en funktion" #: c-decl.c:5583 #, gcc-internal-format msgid "%qE declared as function returning an array" -msgstr "%qE är deklarerad som en funktion som returnerar en vektor" +msgstr "%qE är deklarerad som en funktion som returnerar en vektor" #: c-decl.c:5586 #, gcc-internal-format msgid "type name declared as function returning an array" -msgstr "typnamn är deklarerat som en funktion som returnerar en vektor" +msgstr "typnamn är deklarerat som en funktion som returnerar en vektor" #: c-decl.c:5614 #, gcc-internal-format @@ -13176,82 +13176,82 @@ msgstr "funktionsdefinition som har kvalificerad void-returtyp" #: c-decl.c:5617 cp/decl.c:9126 #, gcc-internal-format msgid "type qualifiers ignored on function return type" -msgstr "typkvalificerare ignoreras för funktions returtyp" +msgstr "typkvalificerare ignoreras för funktions returtyp" #: c-decl.c:5646 c-decl.c:5824 c-decl.c:5936 c-decl.c:6031 #, gcc-internal-format msgid "ISO C forbids qualified function types" -msgstr "ISO C förbjuder kvalificerade funktionstyper" +msgstr "ISO C förbjuder kvalificerade funktionstyper" #: c-decl.c:5713 #, gcc-internal-format msgid "%qs combined with %<auto%> qualifier for %qE" -msgstr "%qs kombinerad med %<auto%>-kvalificerare för %E" +msgstr "%qs kombinerad med %<auto%>-kvalificerare för %E" #: c-decl.c:5717 #, gcc-internal-format msgid "%qs combined with %<register%> qualifier for %qE" -msgstr "%qs kombinerat med %<register%>-kvalificerare för %qE" +msgstr "%qs kombinerat med %<register%>-kvalificerare för %qE" #: c-decl.c:5723 #, gcc-internal-format msgid "%qs specified for auto variable %qE" -msgstr "%qs angiven för auto-variabel %qE" +msgstr "%qs angiven för auto-variabel %qE" #: c-decl.c:5739 #, gcc-internal-format msgid "%qs specified for parameter %qE" -msgstr "%qs angiven för parameter %qE" +msgstr "%qs angiven för parameter %qE" #: c-decl.c:5742 #, gcc-internal-format msgid "%qs specified for unnamed parameter" -msgstr "%qs angiven för namnlös parameter" +msgstr "%qs angiven för namnlös parameter" #: c-decl.c:5748 #, gcc-internal-format msgid "%qs specified for structure field %qE" -msgstr "%qs angiven för postfält %qE" +msgstr "%qs angiven för postfält %qE" #: c-decl.c:5751 #, gcc-internal-format msgid "%qs specified for structure field" -msgstr "%qs angiven för postfält" +msgstr "%qs angiven för postfält" #: c-decl.c:5764 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "alignment specified for typedef %qE" -msgstr "minnesjustering kan inte anges för %q+D" +msgstr "minnesjustering angiven för typedef %qE" #: c-decl.c:5766 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "alignment specified for %<register%> object %qE" -msgstr "%qs angiven för parameter %qE" +msgstr "minnesjustering angiven för %<register%>-objekt %qE" #: c-decl.c:5771 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "alignment specified for parameter %qE" -msgstr "%qs angiven för parameter %qE" +msgstr "minnesjustering angiven för parameter %qE" #: c-decl.c:5773 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "alignment specified for unnamed parameter" -msgstr "%qs angiven för namnlös parameter" +msgstr "minnesjustering angiven för namnlös parameter" #: c-decl.c:5778 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "alignment specified for bit-field %qE" -msgstr "minnesjustering kan inte anges för %q+D" +msgstr "minnesjustering angiven för bitfältet %qE" #: c-decl.c:5780 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "alignment specified for unnamed bit-field" -msgstr "%qs angiven för namnlös parameter" +msgstr "minnesjustering angiven för namnlöst bitfält" #: c-decl.c:5783 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "alignment specified for function %qE" -msgstr "tilldelning av funktion %qD" +msgstr "minnesjustering angiven för funktionen %qE" #: c-decl.c:5790 #, gcc-internal-format @@ -13261,7 +13261,7 @@ msgstr "%<_Alignas%>-specificerare kan inte reducera justeringen hos %qE" #: c-decl.c:5793 #, gcc-internal-format msgid "%<_Alignas%> specifiers cannot reduce alignment of unnamed field" -msgstr "%<_Alignas%>-specificerare kan inte reducera justeringen för namnlösa fält" +msgstr "%<_Alignas%>-specificerare kan inte reducera justeringen för namnlösa fält" #: c-decl.c:5832 #, gcc-internal-format @@ -13269,25 +13269,25 @@ msgid "typedef %q+D declared %<inline%>" msgstr "typdef %q+D deklarerad %<inline%>" #: c-decl.c:5834 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "typedef %q+D declared %<_Noreturn%>" -msgstr "typdef %q+D deklarerad %<inline%>" +msgstr "typedef %q+D deklarerad %<_Noreturn%>" #: c-decl.c:5870 #, gcc-internal-format msgid "ISO C forbids const or volatile function types" -msgstr "ISO C förbjuder const- eller volatile-funktionstyper" +msgstr "ISO C förbjuder const- eller volatile-funktionstyper" #. C99 6.7.2.1p8 #: c-decl.c:5880 #, gcc-internal-format msgid "a member of a structure or union cannot have a variably modified type" -msgstr "en medlem av an post eller union får inte ha variabel typ" +msgstr "en medlem av an post eller union fÃ¥r inte ha variabel typ" #: c-decl.c:5897 cp/decl.c:8281 #, gcc-internal-format msgid "variable or field %qE declared void" -msgstr "variabel eller fält %qE deklarerad void" +msgstr "variabel eller fält %qE deklarerad void" #: c-decl.c:5928 #, gcc-internal-format @@ -13300,29 +13300,29 @@ msgid "parameter %q+D declared %<inline%>" msgstr "parametern %q+D deklarerad %<inline%>" #: c-decl.c:5964 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "parameter %q+D declared %<_Noreturn%>" -msgstr "parametern %q+D deklarerad %<inline%>" +msgstr "parametern %q+D deklarerad %<_Noreturn%>" #: c-decl.c:5977 #, gcc-internal-format msgid "field %qE declared as a function" -msgstr "fältet %qE deklarerat som en funktion" +msgstr "fältet %qE deklarerat som en funktion" #: c-decl.c:5984 #, gcc-internal-format msgid "field %qE has incomplete type" -msgstr "fält %qE har ofullständig typ" +msgstr "fält %qE har ofullständig typ" #: c-decl.c:5986 #, gcc-internal-format msgid "unnamed field has incomplete type" -msgstr "namnlöst fält har ofullständig typ" +msgstr "namnlöst fält har ofullständig typ" #: c-decl.c:6003 c-decl.c:6014 c-decl.c:6017 #, gcc-internal-format msgid "invalid storage class for function %qE" -msgstr "ogiltig lagringsklass för funktionen %qE" +msgstr "ogiltig lagringsklass för funktionen %qE" #: c-decl.c:6068 #, gcc-internal-format @@ -13330,19 +13330,19 @@ msgid "cannot inline function %<main%>" msgstr "kan inte inline:a funktionen %<main%>" #: c-decl.c:6070 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<main%> declared %<_Noreturn%>" -msgstr "%qE initierad och deklarerad %<extern%>" +msgstr "%<main%> deklarerad %<_Noreturn%>" #: c-decl.c:6083 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C99 does not support %<_Noreturn%>" -msgstr "ISO C99 stödjer inte %<_Static_assert%>" +msgstr "ISO C99 stödjer inte %<_Noreturn%>" #: c-decl.c:6086 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C90 does not support %<_Noreturn%>" -msgstr "ISO C90 stödjer inte %<long long%>" +msgstr "ISO C90 stödjer inte %<_Noreturn%>" #: c-decl.c:6115 #, gcc-internal-format @@ -13355,24 +13355,24 @@ msgid "variable %q+D declared %<inline%>" msgstr "variabeln %q+D deklarerad %<inline%>" #: c-decl.c:6127 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "variable %q+D declared %<_Noreturn%>" -msgstr "variabeln %q+D deklarerad %<inline%>" +msgstr "variabeln %q+D deklarerad %<_Noreturn%>" #: c-decl.c:6162 #, gcc-internal-format msgid "non-nested function with variably modified type" -msgstr "onästad funktion med variabelt modifierad typ" +msgstr "onästad funktion med variabelt modifierad typ" #: c-decl.c:6164 #, gcc-internal-format msgid "object with variably modified type must have no linkage" -msgstr "objekt med variabel typ får inte ha länkklass" +msgstr "objekt med variabel typ fÃ¥r inte ha länkklass" #: c-decl.c:6254 c-decl.c:7813 #, gcc-internal-format msgid "function declaration isn%'t a prototype" -msgstr "funktionsdeklarationen är inte en prototyp" +msgstr "funktionsdeklarationen är inte en prototyp" #: c-decl.c:6263 #, gcc-internal-format @@ -13382,12 +13382,12 @@ msgstr "parameternamn (utan typer) i funktionsdeklaration" #: c-decl.c:6301 #, gcc-internal-format msgid "parameter %u (%q+D) has incomplete type" -msgstr "parameter %u (%q+D) har ofullständig typ" +msgstr "parameter %u (%q+D) har ofullständig typ" #: c-decl.c:6305 #, gcc-internal-format, gfc-internal-format msgid "parameter %u has incomplete type" -msgstr "parameter %u har ofullständig typ" +msgstr "parameter %u har ofullständig typ" #: c-decl.c:6316 #, gcc-internal-format @@ -13407,12 +13407,12 @@ msgstr "%<void%> som enda parameter kan inte kvalificeras" #: c-decl.c:6409 c-decl.c:6444 #, gcc-internal-format msgid "%<void%> must be the only parameter" -msgstr "%<void%> måste vara den enda parametern" +msgstr "%<void%> mÃ¥ste vara den enda parametern" #: c-decl.c:6438 #, gcc-internal-format msgid "parameter %q+D has just a forward declaration" -msgstr "parameter %q+D har endast en framåtdeklaration" +msgstr "parameter %q+D har endast en framÃ¥tdeklaration" #. The %s will be one of 'struct', 'union', or 'enum'. #: c-decl.c:6483 @@ -13429,22 +13429,22 @@ msgstr "anonym %s deklarerad inuti parameterlista" #: c-decl.c:6492 #, gcc-internal-format msgid "its scope is only this definition or declaration, which is probably not what you want" -msgstr "dess scope-område är endast denna definition eller deklaration, vilket troligen inte är vad du vill." +msgstr "dess scope-omrÃ¥de är endast denna definition eller deklaration, vilket troligen inte är vad du vill." #: c-decl.c:6592 #, gcc-internal-format msgid "enum type defined here" -msgstr "enum-typ definierad här" +msgstr "enum-typ definierad här" #: c-decl.c:6598 #, gcc-internal-format msgid "struct defined here" -msgstr "post definierad här" +msgstr "post definierad här" #: c-decl.c:6604 #, gcc-internal-format msgid "union defined here" -msgstr "union definierad här" +msgstr "union definierad här" #: c-decl.c:6677 #, gcc-internal-format @@ -13459,32 +13459,32 @@ msgstr "omdefinition av %<struct %E%>" #: c-decl.c:6688 #, gcc-internal-format msgid "nested redefinition of %<union %E%>" -msgstr "nästad omdefinition av %<union %E%>" +msgstr "nästad omdefinition av %<union %E%>" #: c-decl.c:6690 #, gcc-internal-format msgid "nested redefinition of %<struct %E%>" -msgstr "nästad omdefinition av %<struct %E%>" +msgstr "nästad omdefinition av %<struct %E%>" #: c-decl.c:6722 c-decl.c:7411 #, gcc-internal-format msgid "defining type in %qs expression is invalid in C++" -msgstr "att definiera en typ i %qs-uttryck är ogiltigt i C++" +msgstr "att definiera en typ i %qs-uttryck är ogiltigt i C++" #: c-decl.c:6791 cp/decl.c:4147 #, gcc-internal-format msgid "declaration does not declare anything" -msgstr "deklaration som inte deklarerar något" +msgstr "deklaration som inte deklarerar nÃ¥got" #: c-decl.c:6798 #, gcc-internal-format msgid "ISO C99 doesn%'t support unnamed structs/unions" -msgstr "ISO C99 stödjer inte namnlösa strukturer/unioner" +msgstr "ISO C99 stödjer inte namnlösa strukturer/unioner" #: c-decl.c:6801 #, gcc-internal-format msgid "ISO C90 doesn%'t support unnamed structs/unions" -msgstr "ISO C90 stödjer inte namnlösa strukturer/unioner" +msgstr "ISO C90 stödjer inte namnlösa strukturer/unioner" #: c-decl.c:6893 c-decl.c:6912 c-decl.c:6975 #, gcc-internal-format @@ -13524,17 +13524,17 @@ msgstr "flexibel vektormedlem inte vid slutet av post" #: c-decl.c:7169 #, gcc-internal-format msgid "flexible array member in otherwise empty struct" -msgstr "flexibel vektor medlem i i övrigt tom post" +msgstr "flexibel vektor medlem i i övrigt tom post" #: c-decl.c:7288 #, gcc-internal-format msgid "union cannot be made transparent" -msgstr "unionen kan inte göras transparent" +msgstr "unionen kan inte göras transparent" #: c-decl.c:7384 #, gcc-internal-format msgid "nested redefinition of %<enum %E%>" -msgstr "nästad omdefinition av %<enum %E%>" +msgstr "nästad omdefinition av %<enum %E%>" #. This enum is a named one that has been declared already. #: c-decl.c:7391 @@ -13545,57 +13545,57 @@ msgstr "omdeklaration av %<enum %E%>" #: c-decl.c:7466 #, gcc-internal-format msgid "enumeration values exceed range of largest integer" -msgstr "uppräkningsvärden överskrider gränsen för största heltal" +msgstr "uppräkningsvärden överskrider gränsen för största heltal" #: c-decl.c:7483 #, gcc-internal-format msgid "specified mode too small for enumeral values" -msgstr "angiven sort för liten för uppräkningvärden" +msgstr "angiven sort för liten för uppräkningvärden" #: c-decl.c:7588 c-decl.c:7604 #, gcc-internal-format msgid "enumerator value for %qE is not an integer constant" -msgstr "uppräkningsvärde för %qE är inte en heltalskonstant" +msgstr "uppräkningsvärde för %qE är inte en heltalskonstant" #: c-decl.c:7599 #, gcc-internal-format msgid "enumerator value for %qE is not an integer constant expression" -msgstr "uppräkningsvärde för %qE är inte ett konstant heltalsuttryck" +msgstr "uppräkningsvärde för %qE är inte ett konstant heltalsuttryck" #: c-decl.c:7623 #, gcc-internal-format msgid "overflow in enumeration values" -msgstr "överspill i uppräkningsvärden" +msgstr "överspill i uppräkningsvärden" #: c-decl.c:7631 #, gcc-internal-format msgid "ISO C restricts enumerator values to range of %<int%>" -msgstr "ISO C begränsar uppräkningsvärden till intervallet hos %<int%>" +msgstr "ISO C begränsar uppräkningsvärden till intervallet hos %<int%>" #: c-decl.c:7715 #, gcc-internal-format msgid "inline function %qD given attribute noinline" -msgstr "inline-funktionen %qD har fått attributet noinline" +msgstr "inline-funktionen %qD har fÃ¥tt attributet noinline" #: c-decl.c:7733 #, gcc-internal-format msgid "return type is an incomplete type" -msgstr "returtypen är en ofullständig typ" +msgstr "returtypen är en ofullständig typ" #: c-decl.c:7743 #, gcc-internal-format msgid "return type defaults to %<int%>" -msgstr "returtyp sätts skönsmässigt till %<int%>" +msgstr "returtyp sätts skönsmässigt till %<int%>" #: c-decl.c:7821 #, gcc-internal-format msgid "no previous prototype for %qD" -msgstr "ingen tidigare prototyp för %qD" +msgstr "ingen tidigare prototyp för %qD" #: c-decl.c:7830 #, gcc-internal-format msgid "%qD was used with no prototype before its definition" -msgstr "%qD användes utan någon prototyp före sin definition" +msgstr "%qD användes utan nÃ¥gon prototyp före sin definition" #: c-decl.c:7837 #, gcc-internal-format @@ -13605,17 +13605,17 @@ msgstr "ingen tidigare deklaration av %qD" #: c-decl.c:7847 #, gcc-internal-format msgid "%qD was used with no declaration before its definition" -msgstr "%qD användes utan någon deklaration före sin definition" +msgstr "%qD användes utan nÃ¥gon deklaration före sin definition" #: c-decl.c:7866 #, gcc-internal-format msgid "return type of %qD is not %<int%>" -msgstr "returtypen för %qD är inte %<int%>" +msgstr "returtypen för %qD är inte %<int%>" #: c-decl.c:7872 #, gcc-internal-format msgid "%qD is normally a non-static function" -msgstr "%qD är normalt en icke-statisk funktion" +msgstr "%qD är normalt en icke-statisk funktion" #: c-decl.c:7909 #, gcc-internal-format @@ -13625,12 +13625,12 @@ msgstr "gammaldags parameterdeklarationer i funktionsdefinition med prototyp" #: c-decl.c:7923 #, gcc-internal-format msgid "traditional C rejects ISO C style function definitions" -msgstr "traditionell C tillåter inte ISO C:s stil av funktionsdefinitioner" +msgstr "traditionell C tillÃ¥ter inte ISO C:s stil av funktionsdefinitioner" #: c-decl.c:7939 #, gcc-internal-format msgid "parameter name omitted" -msgstr "parameternamn utelämnat" +msgstr "parameternamn utelämnat" #: c-decl.c:7976 #, gcc-internal-format @@ -13660,27 +13660,27 @@ msgstr "parameter %qD deklarerad med typen void" #: c-decl.c:8044 c-decl.c:8048 #, gcc-internal-format msgid "type of %qD defaults to %<int%>" -msgstr "typen på %qD sätts skönsmässigt till %<int%>" +msgstr "typen pÃ¥ %qD sätts skönsmässigt till %<int%>" #: c-decl.c:8068 #, gcc-internal-format msgid "parameter %qD has incomplete type" -msgstr "parametern %qD har ofullständig typ" +msgstr "parametern %qD har ofullständig typ" #: c-decl.c:8075 #, gcc-internal-format msgid "declaration for parameter %qD but no such parameter" -msgstr "deklaration av parameter %qD med det finns ingen sådan parameter" +msgstr "deklaration av parameter %qD med det finns ingen sÃ¥dan parameter" #: c-decl.c:8127 #, gcc-internal-format msgid "number of arguments doesn%'t match built-in prototype" -msgstr "antalet argument stämmer inte med inbyggd prototyp" +msgstr "antalet argument stämmer inte med inbyggd prototyp" #: c-decl.c:8138 #, gcc-internal-format msgid "number of arguments doesn%'t match prototype" -msgstr "antalet argument stämmer inte med prototypen" +msgstr "antalet argument stämmer inte med prototypen" #: c-decl.c:8141 c-decl.c:8183 c-decl.c:8197 #, gcc-internal-format @@ -13690,22 +13690,22 @@ msgstr "prototypdeklaration" #: c-decl.c:8175 #, gcc-internal-format msgid "promoted argument %qD doesn%'t match built-in prototype" -msgstr "befordrat argument %qD stämmer inte med inbyggd prototyp" +msgstr "befordrat argument %qD stämmer inte med inbyggd prototyp" #: c-decl.c:8180 #, gcc-internal-format msgid "promoted argument %qD doesn%'t match prototype" -msgstr "befordrat argument %qD stämmer inte med prototypen" +msgstr "befordrat argument %qD stämmer inte med prototypen" #: c-decl.c:8190 #, gcc-internal-format msgid "argument %qD doesn%'t match built-in prototype" -msgstr "argument %qD stämmer inte med inbyggd prototyp" +msgstr "argument %qD stämmer inte med inbyggd prototyp" #: c-decl.c:8195 #, gcc-internal-format msgid "argument %qD doesn%'t match prototype" -msgstr "argument %qD stämmer inte med prototypen" +msgstr "argument %qD stämmer inte med prototypen" #: c-decl.c:8378 cp/decl.c:13501 #, gcc-internal-format @@ -13715,7 +13715,7 @@ msgstr "ingen retursats i funktion som returnerar icke-void" #: c-decl.c:8398 #, gcc-internal-format msgid "parameter %qD set but not used" -msgstr "parametern %qD sätts men används inte" +msgstr "parametern %qD sätts men används inte" #. If we get here, declarations have been used in a for loop without #. the C99 for loop scope. This doesn't make much sense, so don't @@ -13723,12 +13723,12 @@ msgstr "parametern %qD sätts men används inte" #: c-decl.c:8487 #, gcc-internal-format msgid "%<for%> loop initial declarations are only allowed in C99 mode" -msgstr "%<for%>-slinga med startdeklaration är endast tillåtet i C99-läge" +msgstr "%<for%>-slinga med startdeklaration är endast tillÃ¥tet i C99-läge" #: c-decl.c:8492 #, gcc-internal-format msgid "use option -std=c99 or -std=gnu99 to compile your code" -msgstr "använd flaggan -std=c99 eller -std=gnu99 för att kompilera din kod" +msgstr "använd flaggan -std=c99 eller -std=gnu99 för att kompilera din kod" #: c-decl.c:8526 #, gcc-internal-format @@ -13743,17 +13743,17 @@ msgstr "deklaration av %<extern%>-variabel %qD i %<for%>-slingas initiala deklar #: c-decl.c:8537 #, gcc-internal-format msgid "%<struct %E%> declared in %<for%> loop initial declaration" -msgstr "%<struct %E%> är deklarerad i %<for%>-slingas initiala deklaration" +msgstr "%<struct %E%> är deklarerad i %<for%>-slingas initiala deklaration" #: c-decl.c:8542 #, gcc-internal-format msgid "%<union %E%> declared in %<for%> loop initial declaration" -msgstr "%<union %E%> är deklarerad i %<for%>-slingas initiala deklaration" +msgstr "%<union %E%> är deklarerad i %<for%>-slingas initiala deklaration" #: c-decl.c:8546 #, gcc-internal-format msgid "%<enum %E%> declared in %<for%> loop initial declaration" -msgstr "%<enum %E%> är deklarerad i %<for%>-slingas initiala deklaration" +msgstr "%<enum %E%> är deklarerad i %<for%>-slingas initiala deklaration" #: c-decl.c:8550 #, gcc-internal-format @@ -13773,92 +13773,92 @@ msgstr "dubblerad %qE" #: c-decl.c:8884 c-decl.c:9180 c-decl.c:9437 #, gcc-internal-format msgid "two or more data types in declaration specifiers" -msgstr "två eller fler datatyper i deklaration av specificerare" +msgstr "tvÃ¥ eller fler datatyper i deklaration av specificerare" #: c-decl.c:8896 cp/parser.c:2512 #, gcc-internal-format msgid "%<long long long%> is too long for GCC" -msgstr "%<long long long%> är för långt för GCC" +msgstr "%<long long long%> är för lÃ¥ngt för GCC" #: c-decl.c:8909 #, gcc-internal-format msgid "ISO C90 does not support %<long long%>" -msgstr "ISO C90 stödjer inte %<long long%>" +msgstr "ISO C90 stödjer inte %<long long%>" #: c-decl.c:9075 c-parser.c:6639 #, gcc-internal-format msgid "ISO C90 does not support complex types" -msgstr "ISO C90 stödjer inte komplexa typen" +msgstr "ISO C90 stödjer inte komplexa typen" #: c-decl.c:9114 #, gcc-internal-format msgid "ISO C does not support saturating types" -msgstr "ISO C stödjer inte mättning av typer" +msgstr "ISO C stödjer inte mättning av typer" #: c-decl.c:9188 #, gcc-internal-format msgid "%<__int128%> is not supported for this target" -msgstr "%<__int128%> stöds inte för denna målarkitektur" +msgstr "%<__int128%> stöds inte för denna mÃ¥larkitektur" #: c-decl.c:9193 #, gcc-internal-format msgid "ISO C does not support %<__int128%> type" -msgstr "ISO C stödjer inte typen %<__int128%>" +msgstr "ISO C stödjer inte typen %<__int128%>" #: c-decl.c:9396 #, gcc-internal-format msgid "ISO C does not support decimal floating point" -msgstr "ISO C stödjer inte decimala flyttal" +msgstr "ISO C stödjer inte decimala flyttal" #: c-decl.c:9418 c-decl.c:9644 c-parser.c:6232 #, gcc-internal-format msgid "fixed-point types not supported for this target" -msgstr "fixdecimaltyper stöds inte för denna målarkitektur" +msgstr "fixdecimaltyper stöds inte för denna mÃ¥larkitektur" #: c-decl.c:9420 #, gcc-internal-format msgid "ISO C does not support fixed-point types" -msgstr "ISO C stödjer inte fixdecimaltyper" +msgstr "ISO C stödjer inte fixdecimaltyper" #: c-decl.c:9454 #, gcc-internal-format msgid "C++ lookup of %qD would return a field, not a type" -msgstr "C++-uppslagning av %qD skulle returnera ett fält, inte en typ" +msgstr "C++-uppslagning av %qD skulle returnera ett fält, inte en typ" #: c-decl.c:9467 #, gcc-internal-format msgid "%qE fails to be a typedef or built in type" -msgstr "%qE är varken en typedef eller en inbyggd typ" +msgstr "%qE är varken en typedef eller en inbyggd typ" #: c-decl.c:9509 #, gcc-internal-format msgid "%qE is not at beginning of declaration" -msgstr "%qE är inte i början av deklarationen" +msgstr "%qE är inte i början av deklarationen" #: c-decl.c:9528 #, gcc-internal-format msgid "%<__thread%> used with %<auto%>" -msgstr "%<__thread%> använd med %<auto%>" +msgstr "%<__thread%> använd med %<auto%>" #: c-decl.c:9530 #, gcc-internal-format msgid "%<__thread%> used with %<register%>" -msgstr "%<__thread%> använd med %<register%>" +msgstr "%<__thread%> använd med %<register%>" #: c-decl.c:9532 #, gcc-internal-format msgid "%<__thread%> used with %<typedef%>" -msgstr "%<__thread%> använd med %<typedef%>" +msgstr "%<__thread%> använd med %<typedef%>" #: c-decl.c:9543 #, gcc-internal-format msgid "%<__thread%> before %<extern%>" -msgstr "%<__thread%> före %<extern%>" +msgstr "%<__thread%> före %<extern%>" #: c-decl.c:9552 #, gcc-internal-format msgid "%<__thread%> before %<static%>" -msgstr "%<__thread%> före %<static%>" +msgstr "%<__thread%> före %<static%>" #: c-decl.c:9568 #, gcc-internal-format @@ -13868,72 +13868,72 @@ msgstr "flera lagringsklasser i deklarationsspecificerare" #: c-decl.c:9575 #, gcc-internal-format msgid "%<__thread%> used with %qE" -msgstr "%<__thread%> använd med %qE" +msgstr "%<__thread%> använd med %qE" #: c-decl.c:9642 #, gcc-internal-format msgid "%<_Sat%> is used without %<_Fract%> or %<_Accum%>" -msgstr "%<_Sat%> används utan %<_Fract%> eller %<_Accum%>" +msgstr "%<_Sat%> används utan %<_Fract%> eller %<_Accum%>" #: c-decl.c:9656 #, gcc-internal-format msgid "ISO C does not support plain %<complex%> meaning %<double complex%>" -msgstr "ISO C stödjer inte bara %<complex%> i meningen %<double complex%>" +msgstr "ISO C stödjer inte bara %<complex%> i meningen %<double complex%>" #: c-decl.c:9701 c-decl.c:9714 c-decl.c:9740 #, gcc-internal-format msgid "ISO C does not support complex integer types" -msgstr "ISO C stödjer inte komplexa heltalstyper" +msgstr "ISO C stödjer inte komplexa heltalstyper" #: c-decl.c:9894 toplev.c:484 #, gcc-internal-format msgid "%q+F used but never defined" -msgstr "%q+F är använd men inte definierad" +msgstr "%q+F är använd men inte definierad" #: c-parser.c:244 #, gcc-internal-format msgid "identifier %qE conflicts with C++ keyword" -msgstr "identifieraren %qE står i konflikt med ett nyckelord i C++" +msgstr "identifieraren %qE stÃ¥r i konflikt med ett nyckelord i C++" #: c-parser.c:1242 #, gcc-internal-format msgid "ISO C forbids an empty translation unit" -msgstr "ISO C förbjuder tomma översättningsenheter" +msgstr "ISO C förbjuder tomma översättningsenheter" #: c-parser.c:1340 c-parser.c:7532 #, gcc-internal-format msgid "ISO C does not allow extra %<;%> outside of a function" -msgstr "ISO C tillåter inte extra %<;%> utanför funktioner" +msgstr "ISO C tillÃ¥ter inte extra %<;%> utanför funktioner" #: c-parser.c:1466 c-parser.c:2047 c-parser.c:3316 #, gcc-internal-format msgid "unknown type name %qE" -msgstr "okänt typnamn %qE" +msgstr "okänt typnamn %qE" #: c-parser.c:1486 c-parser.c:8563 cp/parser.c:27364 #, gcc-internal-format msgid "expected declaration specifiers" -msgstr "deklarationsspecificerare förväntades" +msgstr "deklarationsspecificerare förväntades" #: c-parser.c:1511 c-parser.c:2632 #, gcc-internal-format msgid "expected %<;%>, identifier or %<(%>" -msgstr "%<;%>, identifierare eller %<(%> förväntades" +msgstr "%<;%>, identifierare eller %<(%> förväntades" #: c-parser.c:1529 cp/parser.c:23794 cp/parser.c:23868 #, gcc-internal-format msgid "prefix attributes are ignored for methods" -msgstr "prefixattribut ignoreras för metoder" +msgstr "prefixattribut ignoreras för metoder" #: c-parser.c:1564 #, gcc-internal-format msgid "prefix attributes are ignored for implementations" -msgstr "prefixattribut ignoreras för implementeringar" +msgstr "prefixattribut ignoreras för implementeringar" #: c-parser.c:1585 #, gcc-internal-format msgid "unexpected attribute" -msgstr "oväntat attribut" +msgstr "oväntat attribut" #: c-parser.c:1628 #, gcc-internal-format @@ -13943,7 +13943,7 @@ msgstr "datadefinition har ingen typ eller lagringsklass" #: c-parser.c:1703 cp/parser.c:10466 #, gcc-internal-format msgid "expected %<,%> or %<;%>" -msgstr "%<,%> eller %<;%> förväntades" +msgstr "%<,%> eller %<;%> förväntades" #. This can appear in many cases looking nothing like a #. function definition, so we don't give a more specific @@ -13951,47 +13951,47 @@ msgstr "%<,%> eller %<;%> förväntades" #: c-parser.c:1710 c-parser.c:1726 #, gcc-internal-format msgid "expected %<=%>, %<,%>, %<;%>, %<asm%> or %<__attribute__%>" -msgstr "%<=%>, %<,%>, %<;%>, %<asm%> eller %<__attribute__%> förväntades" +msgstr "%<=%>, %<,%>, %<;%>, %<asm%> eller %<__attribute__%> förväntades" #: c-parser.c:1718 #, gcc-internal-format msgid "ISO C forbids nested functions" -msgstr "ISO C förbjuder nästade funktioner" +msgstr "ISO C förbjuder nästade funktioner" #: c-parser.c:1834 #, gcc-internal-format msgid "ISO C99 does not support %<_Static_assert%>" -msgstr "ISO C99 stödjer inte %<_Static_assert%>" +msgstr "ISO C99 stödjer inte %<_Static_assert%>" #: c-parser.c:1837 #, gcc-internal-format msgid "ISO C90 does not support %<_Static_assert%>" -msgstr "ISO C90 stödjer inte %<_Static_assert%>" +msgstr "ISO C90 stödjer inte %<_Static_assert%>" #: c-parser.c:1862 c-parser.c:3383 c-parser.c:8618 cp/parser.c:27235 #, gcc-internal-format msgid "expected string literal" -msgstr "strängkonstant förväntades" +msgstr "strängkonstant förväntades" #: c-parser.c:1870 #, gcc-internal-format msgid "expression in static assertion is not an integer" -msgstr "uttryck i statisk försäkran är inte ett heltal" +msgstr "uttryck i statisk försäkran är inte ett heltal" #: c-parser.c:1877 #, gcc-internal-format msgid "expression in static assertion is not an integer constant expression" -msgstr "uttryck i statisk försäkran är inte ett konstant heltalsuttryck" +msgstr "uttryck i statisk försäkran är inte ett konstant heltalsuttryck" #: c-parser.c:1882 #, gcc-internal-format msgid "expression in static assertion is not constant" -msgstr "uttryck i statisk försäkran är inte konstant" +msgstr "uttryck i statisk försäkran är inte konstant" #: c-parser.c:1887 #, gcc-internal-format msgid "static assertion failed: %E" -msgstr "statisk försäkran misslyckades: %E" +msgstr "statisk försäkran misslyckades: %E" #: c-parser.c:2262 c-parser.c:3161 c-parser.c:3829 c-parser.c:4103 #: c-parser.c:5219 c-parser.c:5310 c-parser.c:5932 c-parser.c:6286 @@ -14004,27 +14004,27 @@ msgstr "statisk försäkran misslyckades: %E" #: cp/parser.c:24638 cp/parser.c:24668 cp/parser.c:24738 cp/parser.c:26955 #, gcc-internal-format msgid "expected identifier" -msgstr "identifierare förväntades" +msgstr "identifierare förväntades" #: c-parser.c:2295 cp/parser.c:14609 #, gcc-internal-format msgid "comma at end of enumerator list" -msgstr "komma i slutet av uppräkningslista" +msgstr "komma i slutet av uppräkningslista" #: c-parser.c:2301 #, gcc-internal-format msgid "expected %<,%> or %<}%>" -msgstr "%<,%> eller %<}%> förväntades" +msgstr "%<,%> eller %<}%> förväntades" #: c-parser.c:2332 #, gcc-internal-format msgid "ISO C forbids forward references to %<enum%> types" -msgstr "ISO C förbjuder framåtreferenser till %<enum%>-typer" +msgstr "ISO C förbjuder framÃ¥treferenser till %<enum%>-typer" #: c-parser.c:2448 #, gcc-internal-format msgid "expected class name" -msgstr "klassnamn förväntades" +msgstr "klassnamn förväntades" #: c-parser.c:2467 #, gcc-internal-format @@ -14039,107 +14039,107 @@ msgstr "inget semikolon vid slutet av post eller union" #: c-parser.c:2594 c-parser.c:3643 #, gcc-internal-format msgid "expected specifier-qualifier-list" -msgstr "specificerarkvalificerarlista förväntades" +msgstr "specificerarkvalificerarlista förväntades" #: c-parser.c:2605 #, gcc-internal-format msgid "ISO C forbids member declarations with no members" -msgstr "ISO C förbjuder medlemsdeklarationer utan medlemmar" +msgstr "ISO C förbjuder medlemsdeklarationer utan medlemmar" #: c-parser.c:2695 #, gcc-internal-format msgid "expected %<,%>, %<;%> or %<}%>" -msgstr "%<,%>, %<;%> eller %<}%> förväntades" +msgstr "%<,%>, %<;%> eller %<}%> förväntades" #: c-parser.c:2702 #, gcc-internal-format msgid "expected %<:%>, %<,%>, %<;%>, %<}%> or %<__attribute__%>" -msgstr "%<:%>, %<,%>, %<;%>, %<}%> eller %<__attribute__%> förväntades" +msgstr "%<:%>, %<,%>, %<;%>, %<}%> eller %<__attribute__%> förväntades" #: c-parser.c:2755 #, gcc-internal-format msgid "%<typeof%> applied to a bit-field" -msgstr "%<typeof%> applicerat på ett bitfält" +msgstr "%<typeof%> applicerat pÃ¥ ett bitfält" #: c-parser.c:2789 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C99 does not support %<_Alignas%>" -msgstr "ISO C90 stödjer inte %<long long%>" +msgstr "ISO C99 stödjer inte %<_Alignas%>" #: c-parser.c:2792 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C90 does not support %<_Alignas%>" -msgstr "ISO C90 stödjer inte %<long long%>" +msgstr "ISO C90 stödjer inte %<_Alignas%>" #: c-parser.c:3020 #, gcc-internal-format msgid "expected identifier or %<(%>" -msgstr "identifierare eller %<(%> förväntades" +msgstr "identifierare eller %<(%> förväntades" #: c-parser.c:3227 #, gcc-internal-format msgid "ISO C requires a named argument before %<...%>" -msgstr "ISO C kräver ett namngivet argument före %<...%>" +msgstr "ISO C kräver ett namngivet argument före %<...%>" #: c-parser.c:3323 #, gcc-internal-format msgid "expected declaration specifiers or %<...%>" -msgstr "deklarationsspecificerare eller %<...%> förväntades" +msgstr "deklarationsspecificerare eller %<...%> förväntades" #: c-parser.c:3377 #, gcc-internal-format msgid "wide string literal in %<asm%>" -msgstr "bred strängliteral i %<asm%>" +msgstr "bred strängliteral i %<asm%>" #: c-parser.c:3743 #, gcc-internal-format msgid "ISO C forbids empty initializer braces" -msgstr "ISO C förbjuder tomma klamrar som initierare" +msgstr "ISO C förbjuder tomma klamrar som initierare" #: c-parser.c:3794 #, gcc-internal-format msgid "obsolete use of designated initializer with %<:%>" -msgstr "föråldrad användning av designerade initierare med %<:%>" +msgstr "förÃ¥ldrad användning av designerade initierare med %<:%>" #: c-parser.c:3934 #, gcc-internal-format msgid "ISO C forbids specifying range of elements to initialize" -msgstr "ISO C förbjuder specificering av intervall av element som skall initieras" +msgstr "ISO C förbjuder specificering av intervall av element som skall initieras" #: c-parser.c:3947 #, gcc-internal-format msgid "ISO C90 forbids specifying subobject to initialize" -msgstr "ISO C90 förbjuder specificering av underobjekt som skall initieras" +msgstr "ISO C90 förbjuder specificering av underobjekt som skall initieras" #: c-parser.c:3954 #, gcc-internal-format msgid "obsolete use of designated initializer without %<=%>" -msgstr "föråldrad användning av designerade initierare utan %<=%>" +msgstr "förÃ¥ldrad användning av designerade initierare utan %<=%>" #: c-parser.c:4118 #, gcc-internal-format msgid "ISO C forbids label declarations" -msgstr "ISO C förbjuder etikettdeklarationer" +msgstr "ISO C förbjuder etikettdeklarationer" #: c-parser.c:4124 c-parser.c:4205 #, gcc-internal-format msgid "expected declaration or statement" -msgstr "deklaration eller sats förväntades" +msgstr "deklaration eller sats förväntades" #: c-parser.c:4156 c-parser.c:4186 #, gcc-internal-format msgid "ISO C90 forbids mixed declarations and code" -msgstr "ISO C90 förbjuder blandade deklarationer och kod" +msgstr "ISO C90 förbjuder blandade deklarationer och kod" #: c-parser.c:4213 #, gcc-internal-format msgid "expected %<}%> before %<else%>" -msgstr "%<}%> förväntades före %<else%>" +msgstr "%<}%> förväntades före %<else%>" #: c-parser.c:4218 cp/parser.c:8987 #, gcc-internal-format msgid "%<else%> without a previous %<if%>" -msgstr "%<else%> utan ett föregående %<if%>" +msgstr "%<else%> utan ett föregÃ¥ende %<if%>" #: c-parser.c:4235 #, gcc-internal-format @@ -14149,17 +14149,17 @@ msgstr "etikett vid slutet av sammansatt sats" #: c-parser.c:4280 #, gcc-internal-format msgid "expected %<:%> or %<...%>" -msgstr "%<:%> eller %<...%> förväntades" +msgstr "%<:%> eller %<...%> förväntades" #: c-parser.c:4311 #, gcc-internal-format msgid "a label can only be part of a statement and a declaration is not a statement" -msgstr "en etikett kan endast vara en del av en sats och en deklaration är inte en sats" +msgstr "en etikett kan endast vara en del av en sats och en deklaration är inte en sats" #: c-parser.c:4486 #, gcc-internal-format msgid "expected identifier or %<*%>" -msgstr "identifierare eller %<*%> förväntades" +msgstr "identifierare eller %<*%> förväntades" #. Avoid infinite loop in error recovery: #. c_parser_skip_until_found stops at a closing nesting @@ -14168,122 +14168,122 @@ msgstr "identifierare eller %<*%> förväntades" #: c-parser.c:4559 cp/parser.c:8715 #, gcc-internal-format msgid "expected statement" -msgstr "sats förväntades" +msgstr "sats förväntades" #: c-parser.c:4657 cp/parser.c:9069 #, gcc-internal-format msgid "suggest braces around empty body in an %<if%> statement" -msgstr "föreslår klamrar runt tom kropp i en %<if%>-sats" +msgstr "föreslÃ¥r klamrar runt tom kropp i en %<if%>-sats" #: c-parser.c:4685 cp/parser.c:9092 #, gcc-internal-format msgid "suggest braces around empty body in an %<else%> statement" -msgstr "föreslår klamrar runt tom kropp i en %<else%>-sats" +msgstr "föreslÃ¥r klamrar runt tom kropp i en %<else%>-sats" #: c-parser.c:4816 #, gcc-internal-format msgid "suggest braces around empty body in %<do%> statement" -msgstr "föreslår klamrar runt tom kropp i %<do%>-sats" +msgstr "föreslÃ¥r klamrar runt tom kropp i %<do%>-sats" #: c-parser.c:4932 c-parser.c:4962 #, gcc-internal-format msgid "multiple iterating variables in fast enumeration" -msgstr "flera iterationsvariabler i snabb uppräkning" +msgstr "flera iterationsvariabler i snabb uppräkning" #: c-parser.c:4982 #, gcc-internal-format msgid "invalid iterating variable in fast enumeration" -msgstr "ogiltigt iterationsvariabel i snabb uppräkning" +msgstr "ogiltigt iterationsvariabel i snabb uppräkning" #: c-parser.c:5015 #, gcc-internal-format msgid "missing collection in fast enumeration" -msgstr "saknad samling i snabb uppräkning" +msgstr "saknad samling i snabb uppräkning" #: c-parser.c:5086 #, gcc-internal-format msgid "%E qualifier ignored on asm" -msgstr "kvalificeraren %E ignorerad på asm" +msgstr "kvalificeraren %E ignorerad pÃ¥ asm" #: c-parser.c:5440 #, gcc-internal-format msgid "ISO C forbids omitting the middle term of a ?: expression" -msgstr "ISO C förbjuder utelämnande av den mittersta termen i ett ?: uttryck" +msgstr "ISO C förbjuder utelämnande av den mittersta termen i ett ?: uttryck" #: c-parser.c:5897 #, gcc-internal-format msgid "traditional C rejects the unary plus operator" -msgstr "traditionell C tillåter inte operatorn unärt plus" +msgstr "traditionell C tillÃ¥ter inte operatorn unärt plus" #: c-parser.c:6026 #, gcc-internal-format msgid "%<sizeof%> applied to a bit-field" -msgstr "%<sizeof%> applicerat på ett bitfält" +msgstr "%<sizeof%> applicerat pÃ¥ ett bitfält" #: c-parser.c:6047 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C99 does not support %qE" -msgstr "%s stödjer inte %s" +msgstr "ISO C99 stödjer inte %qE" #: c-parser.c:6050 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C90 does not support %qE" -msgstr "ISO C90 stödjer inte %<long long%>" +msgstr "ISO C90 stödjer inte %qE" #: c-parser.c:6101 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C does not allow %<%E (expression)%>" -msgstr "ISO C++ tillåter inte %<alignof%> med annat än en typ" +msgstr "ISO C tillÃ¥ter inte %<%E (uttryck)%>" #: c-parser.c:6126 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot take address of %qs" -msgstr "kan inte ta adressen till bitfält %qD" +msgstr "kan inte ta adressen till %qs" #: c-parser.c:6297 c-parser.c:6742 c-parser.c:6761 #, gcc-internal-format msgid "expected expression" -msgstr "uttryck förväntades" +msgstr "uttryck förväntades" #: c-parser.c:6315 #, gcc-internal-format msgid "braced-group within expression allowed only inside a function" -msgstr "klammergrupp inuti uttryck endast tillåtet inuti en funktion" +msgstr "klammergrupp inuti uttryck endast tillÃ¥tet inuti en funktion" #: c-parser.c:6328 #, gcc-internal-format msgid "ISO C forbids braced-groups within expressions" -msgstr "ISO C förbjuder klammergrupper inuti uttryck" +msgstr "ISO C förbjuder klammergrupper inuti uttryck" #: c-parser.c:6520 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "wrong number of arguments to %<__builtin_choose_expr%>" -msgstr "fel antal argument till funktionen %<__builtin_next_arg%>" +msgstr "fel antal argument till %<__builtin_choose_expr%>" #: c-parser.c:6536 #, gcc-internal-format msgid "first argument to %<__builtin_choose_expr%> not a constant" -msgstr "första argumentet till %<__builtin_choose_expr%> är inte en konstant" +msgstr "första argumentet till %<__builtin_choose_expr%> är inte en konstant" #: c-parser.c:6602 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "wrong number of arguments to %<__builtin_complex%>" -msgstr "fel antal argument till funktionen %<__builtin_next_arg%>" +msgstr "fel antal argument till %<__builtin_complex%>" #: c-parser.c:6624 #, gcc-internal-format msgid "%<__builtin_complex%> operand not of real binary floating-point type" -msgstr "%<__builtin_complex%>-operand är inte av en reel binär flyttalstyp" +msgstr "%<__builtin_complex%>-operand är inte av en reel binär flyttalstyp" #: c-parser.c:6633 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<__builtin_complex%> operands of different types" -msgstr "andra argumentet till %<__builtin_longjmp%> måste vara 1" +msgstr "operander till %<__builtin_complex%> av olika typer" #: c-parser.c:6674 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "wrong number of arguments to %<__builtin_shuffle%>" -msgstr "fel antal argument till funktionen %<__builtin_next_arg%>" +msgstr "fel antal argument till %<__builtin_shuffle%>" #: c-parser.c:6796 #, gcc-internal-format @@ -14298,12 +14298,12 @@ msgstr "sammansatta literal kvalificerad med adressrymdskvalificerare" #: c-parser.c:6812 #, gcc-internal-format msgid "ISO C90 forbids compound literals" -msgstr "ISO C90 förbjuder sammansatta literaler" +msgstr "ISO C90 förbjuder sammansatta literaler" #: c-parser.c:7136 #, gcc-internal-format msgid "expected identifier or %<)%>" -msgstr "identifierare eller %<)%> förväntades" +msgstr "identifierare eller %<)%> förväntades" #: c-parser.c:7232 #, gcc-internal-format @@ -14318,27 +14318,27 @@ msgstr "extra semikolon angivet i metoddefintion" #: c-parser.c:7612 #, gcc-internal-format msgid "method attributes must be specified at the end only" -msgstr "metodattribut måste anges endast i slutet" +msgstr "metodattribut mÃ¥ste anges endast i slutet" #: c-parser.c:7632 #, gcc-internal-format msgid "expected %<;%> or %<{%> after method attribute definition" -msgstr "%<;%> eller %<{%> förväntades efter metodattributsdefinition" +msgstr "%<;%> eller %<{%> förväntades efter metodattributsdefinition" #: c-parser.c:7753 #, gcc-internal-format msgid "objective-c method declaration is expected" -msgstr "objective-c-metoddeklaration förväntas" +msgstr "objective-c-metoddeklaration förväntas" #: c-parser.c:8175 #, gcc-internal-format msgid "no type or storage class may be specified here," -msgstr "ingen typ eller lagringsklass kan anges här," +msgstr "ingen typ eller lagringsklass kan anges här," #: c-parser.c:8265 c-parser.c:8322 cp/parser.c:24698 #, gcc-internal-format msgid "unknown property attribute" -msgstr "okänt egenskapsattribut" +msgstr "okänt egenskapsattribut" #: c-parser.c:8286 cp/parser.c:24658 #, gcc-internal-format @@ -14353,87 +14353,87 @@ msgstr "%<=%> saknas (efter attributet %<setter%>)" #: c-parser.c:8303 cp/parser.c:24676 #, gcc-internal-format msgid "the %<setter%> attribute may only be specified once" -msgstr "attributet %<setter%> kan bara anges en gång" +msgstr "attributet %<setter%> kan bara anges en gÃ¥ng" #: c-parser.c:8308 cp/parser.c:24682 #, gcc-internal-format msgid "setter name must terminate with %<:%>" -msgstr "setter-namn måste avslutas med %<:%>" +msgstr "setter-namn mÃ¥ste avslutas med %<:%>" #: c-parser.c:8315 cp/parser.c:24690 #, gcc-internal-format msgid "the %<getter%> attribute may only be specified once" -msgstr "attributet %<getter%> kan bara anges en gång" +msgstr "attributet %<getter%> kan bara anges en gÃ¥ng" #: c-parser.c:8501 cp/parser.c:27279 #, gcc-internal-format msgid "%<#pragma omp barrier%> may only be used in compound statements" -msgstr "%<#pragma omp barrier%> får bara användas i sammansatta satser" +msgstr "%<#pragma omp barrier%> fÃ¥r bara användas i sammansatta satser" #: c-parser.c:8512 cp/parser.c:27294 #, gcc-internal-format msgid "%<#pragma omp flush%> may only be used in compound statements" -msgstr "%<#pragma omp flush%> får bara användas i sammansatta satser" +msgstr "%<#pragma omp flush%> fÃ¥r bara användas i sammansatta satser" #: c-parser.c:8523 cp/parser.c:27310 #, gcc-internal-format msgid "%<#pragma omp taskwait%> may only be used in compound statements" -msgstr "%<#pragma omp taskwait%> får bara användas i sammansatta satser" +msgstr "%<#pragma omp taskwait%> fÃ¥r bara användas i sammansatta satser" #: c-parser.c:8534 cp/parser.c:27326 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<#pragma omp taskyield%> may only be used in compound statements" -msgstr "%<#pragma omp taskwait%> får bara användas i sammansatta satser" +msgstr "%<#pragma omp taskyield%> fÃ¥r bara användas i sammansatta satser" #: c-parser.c:8547 cp/parser.c:27354 #, gcc-internal-format msgid "%<#pragma omp section%> may only be used in %<#pragma omp sections%> construct" -msgstr "%<#pragma omp section%> får bara användas i %<#pragma omp sections%>-konstruktion" +msgstr "%<#pragma omp section%> fÃ¥r bara användas i %<#pragma omp sections%>-konstruktion" #: c-parser.c:8553 cp/parser.c:27269 #, gcc-internal-format msgid "%<#pragma GCC pch_preprocess%> must be first" -msgstr "%<#pragma GCC pch_preprocess%> måste komma först" +msgstr "%<#pragma GCC pch_preprocess%> mÃ¥ste komma först" #: c-parser.c:8718 cp/parser.c:24946 #, gcc-internal-format msgid "too many %qs clauses" -msgstr "för många %qs-klausuler" +msgstr "för mÃ¥nga %qs-klausuler" #: c-parser.c:8820 cp/parser.c:25061 #, gcc-internal-format msgid "collapse argument needs positive constant integer expression" -msgstr "collapse-argument behöver ett positivt konstant heltalsuttryck" +msgstr "collapse-argument behöver ett positivt konstant heltalsuttryck" #: c-parser.c:8886 cp/parser.c:25112 #, gcc-internal-format msgid "expected %<none%> or %<shared%>" -msgstr "%<none%> eller %<shared%> förväntades" +msgstr "%<none%> eller %<shared%> förväntades" #: c-parser.c:9021 c-parser.c:9235 #, gcc-internal-format msgid "expected integer expression" -msgstr "heltalsuttryck förväntades" +msgstr "heltalsuttryck förväntades" #: c-parser.c:9033 #, gcc-internal-format msgid "%<num_threads%> value must be positive" -msgstr "%<num_threads%>-värdet måste vara positivt" +msgstr "%<num_threads%>-värdet mÃ¥ste vara positivt" #: c-parser.c:9137 cp/parser.c:25331 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, %<min%> or %<max%>" -msgstr "%<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%> eller %<||%> förväntades" +msgstr "%<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, %<min%> eller %<max%> förväntades" #: c-parser.c:9226 cp/parser.c:25416 #, gcc-internal-format msgid "schedule %<runtime%> does not take a %<chunk_size%> parameter" -msgstr "%<runtime%>-schemaläggning tar ingen %<chunk_size%>-parameter" +msgstr "%<runtime%>-schemaläggning tar ingen %<chunk_size%>-parameter" #: c-parser.c:9230 cp/parser.c:25419 #, gcc-internal-format msgid "schedule %<auto%> does not take a %<chunk_size%> parameter" -msgstr "%<auto%>-schemaläggning tar ingen %<chunk_size%>-parameter" +msgstr "%<auto%>-schemaläggning tar ingen %<chunk_size%>-parameter" #: c-parser.c:9248 cp/parser.c:25435 #, gcc-internal-format @@ -14443,62 +14443,62 @@ msgstr "ogiltig schedule-sort" #: c-parser.c:9376 cp/parser.c:25567 #, gcc-internal-format msgid "expected %<#pragma omp%> clause" -msgstr "förväntade %<#pragma omp%>-klausul" +msgstr "förväntade %<#pragma omp%>-klausul" #: c-parser.c:9385 cp/parser.c:25576 #, gcc-internal-format msgid "%qs is not valid for %qs" -msgstr "%qs är inte giltigt för %qs" +msgstr "%qs är inte giltigt för %qs" #: c-parser.c:9677 cp/parser.c:25860 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid form of %<#pragma omp atomic%>" -msgstr "ogiltig operator för %<#pragma omp atomic%>" +msgstr "ogiltig form pÃ¥ %<#pragma omp atomic%>" #: c-parser.c:9717 c-parser.c:9735 cp/parser.c:25891 cp/parser.c:25908 #, gcc-internal-format msgid "invalid operator for %<#pragma omp atomic%>" -msgstr "ogiltig operator för %<#pragma omp atomic%>" +msgstr "ogiltig operator för %<#pragma omp atomic%>" #: c-parser.c:9821 c-parser.c:9842 #, gcc-internal-format msgid "expected %<(%> or end of line" -msgstr "%<(%> eller filslut förväntades" +msgstr "%<(%> eller filslut förväntades" #: c-parser.c:9877 cp/parser.c:26179 #, gcc-internal-format msgid "for statement expected" -msgstr "for-sats förväntades" +msgstr "for-sats förväntades" #: c-parser.c:9930 cp/semantics.c:4705 cp/semantics.c:4775 #, gcc-internal-format msgid "expected iteration declaration or initialization" -msgstr "iterationsdeklaration eller initiering förväntades" +msgstr "iterationsdeklaration eller initiering förväntades" #: c-parser.c:10011 #, gcc-internal-format msgid "not enough perfectly nested loops" -msgstr "inte tillräckligt med perfekt nästade slingor" +msgstr "inte tillräckligt med perfekt nästade slingor" #: c-parser.c:10064 cp/parser.c:26521 #, gcc-internal-format msgid "collapsed loops not perfectly nested" -msgstr "kollapsade slingor inte perfekt nästade" +msgstr "kollapsade slingor inte perfekt nästade" #: c-parser.c:10102 cp/parser.c:26364 cp/parser.c:26402 cp/pt.c:12677 #, gcc-internal-format msgid "iteration variable %qD should not be firstprivate" -msgstr "iterationsvariabel %qD får inte vara firstprivate" +msgstr "iterationsvariabel %qD fÃ¥r inte vara firstprivate" #: c-parser.c:10563 #, gcc-internal-format msgid "%qD is not a variable" -msgstr "%qD är inte en variabel" +msgstr "%qD är inte en variabel" #: c-parser.c:10565 cp/semantics.c:4330 #, gcc-internal-format msgid "%qE declared %<threadprivate%> after first use" -msgstr "%qE är deklarerad %<threadprivate%> efter första användningen" +msgstr "%qE är deklarerad %<threadprivate%> efter första användningen" #: c-parser.c:10567 cp/semantics.c:4332 #, gcc-internal-format @@ -14508,12 +14508,12 @@ msgstr "automatisk variabel %E kan inte vara %<threadprivate%>" #: c-parser.c:10571 cp/semantics.c:4334 #, gcc-internal-format msgid "%<threadprivate%> %qE has incomplete type" -msgstr "%<threadprivate%> %qE har ofullständig typ" +msgstr "%<threadprivate%> %qE har ofullständig typ" #: c-parser.c:10768 cp/parser.c:27165 #, gcc-internal-format msgid "%<__transaction_cancel%> without transactional memory support enabled" -msgstr "%<__transaction_cancel%> utan att stöd för transaktionsminne är aktiverat" +msgstr "%<__transaction_cancel%> utan att stöd för transaktionsminne är aktiverat" #: c-parser.c:10774 cp/parser.c:27171 #, gcc-internal-format @@ -14523,7 +14523,7 @@ msgstr "%<__transaction_cancel%> inom en %<__transaction_relaxed%>" #: c-parser.c:10783 cp/parser.c:27180 #, gcc-internal-format msgid "outer %<__transaction_cancel%> not within outer %<__transaction_atomic%>" -msgstr "yttre %<__transaction_cancel%> som inte är inom en yttre %<__transaction_atomic%>" +msgstr "yttre %<__transaction_cancel%> som inte är inom en yttre %<__transaction_atomic%>" #: c-parser.c:10785 cp/parser.c:27183 #, gcc-internal-format @@ -14538,38 +14538,38 @@ msgstr "%<__transaction_cancel%> inte inom %<__transaction_atomic%>" #: c-typeck.c:214 #, gcc-internal-format msgid "%qD has an incomplete type" -msgstr "%qD har en ofullständig typ" +msgstr "%qD har en ofullständig typ" #: c-typeck.c:235 c-typeck.c:8610 c-typeck.c:8642 cp/call.c:3736 #, gcc-internal-format msgid "invalid use of void expression" -msgstr "ogiltig användning av void-uttryck" +msgstr "ogiltig användning av void-uttryck" #: c-typeck.c:243 #, gcc-internal-format msgid "invalid use of flexible array member" -msgstr "ogiltig användning av flexibla vektormedlemmar" +msgstr "ogiltig användning av flexibla vektormedlemmar" #: c-typeck.c:249 cp/typeck2.c:426 #, gcc-internal-format msgid "invalid use of array with unspecified bounds" -msgstr "ogiltig användning av vektor med ospecificerade gränser" +msgstr "ogiltig användning av vektor med ospecificerade gränser" #: c-typeck.c:257 #, gcc-internal-format msgid "invalid use of undefined type %<%s %E%>" -msgstr "ogiltig användning av odefinierad typ %<%s %E%>" +msgstr "ogiltig användning av odefinierad typ %<%s %E%>" #. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. #: c-typeck.c:261 #, gcc-internal-format msgid "invalid use of incomplete typedef %qD" -msgstr "ogiltig användning av ofullständig typedef %qD" +msgstr "ogiltig användning av ofullständig typedef %qD" #: c-typeck.c:327 #, gcc-internal-format msgid "%qT and %qT are in disjoint named address spaces" -msgstr "%qT och %qT är i skilda namngivna adressrymder" +msgstr "%qT och %qT är i skilda namngivna adressrymder" #: c-typeck.c:566 c-typeck.c:591 #, gcc-internal-format @@ -14579,37 +14579,37 @@ msgstr "funktionstyper inte riktigt kompatibla i ISO C" #: c-typeck.c:734 #, gcc-internal-format msgid "can%'t mix operands of decimal float and vector types" -msgstr "det går inte att blanda operander av typerna decimalt flyttal och vektor" +msgstr "det gÃ¥r inte att blanda operander av typerna decimalt flyttal och vektor" #: c-typeck.c:739 #, gcc-internal-format msgid "can%'t mix operands of decimal float and complex types" -msgstr "det går inte att blanda operander av typerna flyttal och komplext tal" +msgstr "det gÃ¥r inte att blanda operander av typerna flyttal och komplext tal" #: c-typeck.c:744 #, gcc-internal-format msgid "can%'t mix operands of decimal float and other float types" -msgstr "det går inte att blanda operander av typerna decimalt flyttal och annat flyttal" +msgstr "det gÃ¥r inte att blanda operander av typerna decimalt flyttal och annat flyttal" #: c-typeck.c:1220 #, gcc-internal-format msgid "types are not quite compatible" -msgstr "typerna är inte riktigt kompatibla" +msgstr "typerna är inte riktigt kompatibla" #: c-typeck.c:1224 #, gcc-internal-format msgid "pointer target types incompatible in C++" -msgstr "pekares måltyper är inkompatibla i C++" +msgstr "pekares mÃ¥ltyper är inkompatibla i C++" #: c-typeck.c:1556 #, gcc-internal-format msgid "function return types not compatible due to %<volatile%>" -msgstr "funktionsreturtyper är inte kompatibla på grund av %<volatile%>" +msgstr "funktionsreturtyper är inte kompatibla pÃ¥ grund av %<volatile%>" #: c-typeck.c:1732 c-typeck.c:3483 #, gcc-internal-format msgid "arithmetic on pointer to an incomplete type" -msgstr "aritmetik på pekare till ofullständig typ" +msgstr "aritmetik pÃ¥ pekare till ofullständig typ" #: c-typeck.c:2148 #, gcc-internal-format @@ -14619,12 +14619,12 @@ msgstr "%qT har ingen medlem med namnet %qE" #: c-typeck.c:2202 #, gcc-internal-format msgid "request for member %qE in something not a structure or union" -msgstr "begäran av medlem %qE i något som inte är en post eller union" +msgstr "begäran av medlem %qE i nÃ¥got som inte är en post eller union" #: c-typeck.c:2251 #, gcc-internal-format msgid "dereferencing pointer to incomplete type" -msgstr "derefererar pekare till ofullständig typ" +msgstr "derefererar pekare till ofullständig typ" #: c-typeck.c:2255 #, gcc-internal-format @@ -14634,42 +14634,42 @@ msgstr "derefererar %<void *%>-pekare" #: c-typeck.c:2311 #, gcc-internal-format msgid "subscripted value is neither array nor pointer nor vector" -msgstr "indexerat värde är varken en vektor eller pekare" +msgstr "indexerat värde är varken en vektor eller pekare" #: c-typeck.c:2323 cp/typeck.c:2904 cp/typeck.c:2998 #, gcc-internal-format msgid "array subscript is not an integer" -msgstr "fältindex är inte ett heltal" +msgstr "fältindex är inte ett heltal" #: c-typeck.c:2329 #, gcc-internal-format msgid "subscripted value is pointer to function" -msgstr "indexerat värde är en funktionspekare" +msgstr "indexerat värde är en funktionspekare" #: c-typeck.c:2354 #, gcc-internal-format msgid "index value is out of bound" -msgstr "indexvärdet är utanför gränsen" +msgstr "indexvärdet är utanför gränsen" #: c-typeck.c:2398 #, gcc-internal-format msgid "ISO C forbids subscripting %<register%> array" -msgstr "ISO C förbjuder indexering av %<register%>-vektor" +msgstr "ISO C förbjuder indexering av %<register%>-vektor" #: c-typeck.c:2401 #, gcc-internal-format msgid "ISO C90 forbids subscripting non-lvalue array" -msgstr "ISO C90 förbjuder indexering av icke-l-värde-vektor" +msgstr "ISO C90 förbjuder indexering av icke-l-värde-vektor" #: c-typeck.c:2509 #, gcc-internal-format msgid "enum constant defined here" -msgstr "uppräkningskonstant definierad här" +msgstr "uppräkningskonstant definierad här" #: c-typeck.c:2747 #, gcc-internal-format msgid "called object %qE is not a function" -msgstr "anropat objekt %qE är inte en funktion" +msgstr "anropat objekt %qE är inte en funktion" #. This situation leads to run-time undefined behavior. We can't, #. therefore, simply error unless we can prove that all possible @@ -14685,19 +14685,19 @@ msgid "function with qualified void return type called" msgstr "funktion med kvalificerad void-returtyp anropad" #: c-typeck.c:2888 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "__builtin_shuffle last argument must be an integer vector" -msgstr "det sista argumentet måste vara en 8-bitars omedelbar" +msgstr "sista argumentet till __builtin_shuffle mÃ¥ste vara en heltalsvektor" #: c-typeck.c:2896 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "__builtin_shuffle arguments must be vectors" -msgstr "andra argumentet till %<__builtin_longjmp%> måste vara 1" +msgstr "argumenten till __builtin_shuffle mÃ¥ste vara vektorer" #: c-typeck.c:2902 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "__builtin_shuffle argument vectors must be of the same type" -msgstr "Aktuellt arkument till \"%s\" vid %L måste ha samma deklarerade typ" +msgstr "argumentvektorerna till __builtin_shuffle mÃ¥ste ha samma typ" #: c-typeck.c:2912 #, gcc-internal-format @@ -14707,157 +14707,157 @@ msgstr "__builtin_shuffle antalet element i argumentvektorn och maskvektorn skal #: c-typeck.c:2921 #, gcc-internal-format msgid "__builtin_shuffle argument vector(s) inner type must have the same size as inner type of the mask" -msgstr "__builtin_shuffle argumentvektorns inre typ måste ha samma storlek som den inre typen för masken" +msgstr "__builtin_shuffle argumentvektorns inre typ mÃ¥ste ha samma storlek som den inre typen för masken" #: c-typeck.c:3033 #, gcc-internal-format msgid "too many arguments to method %qE" -msgstr "för många argument till metoden %qE" +msgstr "för mÃ¥nga argument till metoden %qE" #: c-typeck.c:3036 c-family/c-common.c:8433 c-family/c-common.c:9359 #, gcc-internal-format msgid "too many arguments to function %qE" -msgstr "för många argument till funktionen %qE" +msgstr "för mÃ¥nga argument till funktionen %qE" #: c-typeck.c:3039 c-typeck.c:3273 cp/decl2.c:4257 cp/typeck.c:3350 #, gcc-internal-format msgid "declared here" -msgstr "deklarerad här" +msgstr "deklarerad här" #: c-typeck.c:3074 #, gcc-internal-format, gfc-internal-format msgid "type of formal parameter %d is incomplete" -msgstr "typen på formell parameter %d är ofullständig" +msgstr "typen pÃ¥ formell parameter %d är ofullständig" #: c-typeck.c:3089 #, gcc-internal-format msgid "passing argument %d of %qE as integer rather than floating due to prototype" -msgstr "skickar argument %d till %qE som heltal istället för flyttal på grund av prototyp" +msgstr "skickar argument %d till %qE som heltal istället för flyttal pÃ¥ grund av prototyp" #: c-typeck.c:3094 #, gcc-internal-format msgid "passing argument %d of %qE as integer rather than complex due to prototype" -msgstr "skickar argument %d till %qE som heltal istället för komplext på grund av prototyp" +msgstr "skickar argument %d till %qE som heltal istället för komplext pÃ¥ grund av prototyp" #: c-typeck.c:3099 #, gcc-internal-format msgid "passing argument %d of %qE as complex rather than floating due to prototype" -msgstr "skickar argument %d till %qE som komplext istället för flyttal på grund av prototyp" +msgstr "skickar argument %d till %qE som komplext istället för flyttal pÃ¥ grund av prototyp" #: c-typeck.c:3104 #, gcc-internal-format msgid "passing argument %d of %qE as floating rather than integer due to prototype" -msgstr "skickar argument %d till %qE som flyttal istället för heltal på grund av prototyp" +msgstr "skickar argument %d till %qE som flyttal istället för heltal pÃ¥ grund av prototyp" #: c-typeck.c:3109 #, gcc-internal-format msgid "passing argument %d of %qE as complex rather than integer due to prototype" -msgstr "skickar argument %d till %qE som komplext istället för heltal på grund av prototyp" +msgstr "skickar argument %d till %qE som komplext istället för heltal pÃ¥ grund av prototyp" #: c-typeck.c:3114 #, gcc-internal-format msgid "passing argument %d of %qE as floating rather than complex due to prototype" -msgstr "skickar argument %d till %qE som flyttal istället för komplext på grund av prototyp" +msgstr "skickar argument %d till %qE som flyttal istället för komplext pÃ¥ grund av prototyp" #: c-typeck.c:3127 #, gcc-internal-format msgid "passing argument %d of %qE as %<float%> rather than %<double%> due to prototype" -msgstr "skickar argument %d till %qE som %<float%> istället för %<double%> på grund av prototyp" +msgstr "skickar argument %d till %qE som %<float%> istället för %<double%> pÃ¥ grund av prototyp" #: c-typeck.c:3152 #, gcc-internal-format msgid "passing argument %d of %qE as %qT rather than %qT due to prototype" -msgstr "skickar argument %d till %qE som som %qT istället för %qT på grund av prototyp" +msgstr "skickar argument %d till %qE som som %qT istället för %qT pÃ¥ grund av prototyp" #: c-typeck.c:3174 #, gcc-internal-format msgid "passing argument %d of %qE with different width due to prototype" -msgstr "skickar argument %d till %qE med annan vidd på grund av prototyp" +msgstr "skickar argument %d till %qE med annan vidd pÃ¥ grund av prototyp" #: c-typeck.c:3198 #, gcc-internal-format msgid "passing argument %d of %qE as unsigned due to prototype" -msgstr "skickar argument %d till %qE teckenlöst på grund av prototyp" +msgstr "skickar argument %d till %qE teckenlöst pÃ¥ grund av prototyp" #: c-typeck.c:3203 #, gcc-internal-format msgid "passing argument %d of %qE as signed due to prototype" -msgstr "skickar argument %d till %qE med tecken på grund av prototyp" +msgstr "skickar argument %d till %qE med tecken pÃ¥ grund av prototyp" #: c-typeck.c:3238 cp/call.c:6001 #, gcc-internal-format msgid "implicit conversion from %qT to %qT when passing argument to function" -msgstr "implicit konvertering från %qT till %qT när argument skickas till en funktion" +msgstr "implicit konvertering frÃ¥n %qT till %qT när argument skickas till en funktion" #: c-typeck.c:3271 c-family/c-common.c:9279 c-family/c-common.c:9335 #, gcc-internal-format msgid "too few arguments to function %qE" -msgstr "för få argument till funktionen %qE" +msgstr "för fÃ¥ argument till funktionen %qE" #: c-typeck.c:3353 c-typeck.c:3358 #, gcc-internal-format msgid "comparison with string literal results in unspecified behavior" -msgstr "jämförelse med strängliteral resulterar i odefinierat beteende" +msgstr "jämförelse med strängliteral resulterar i odefinierat beteende" #: c-typeck.c:3372 #, gcc-internal-format msgid "comparison between %qT and %qT" -msgstr "jämförelse mellan %qT och %qT" +msgstr "jämförelse mellan %qT och %qT" #: c-typeck.c:3424 #, gcc-internal-format msgid "pointer of type %<void *%> used in subtraction" -msgstr "pekare av typ %<void *%> använd i subtraktion" +msgstr "pekare av typ %<void *%> använd i subtraktion" #: c-typeck.c:3427 #, gcc-internal-format msgid "pointer to a function used in subtraction" -msgstr "pekare till funktion använd i subtraktion" +msgstr "pekare till funktion använd i subtraktion" #: c-typeck.c:3591 #, gcc-internal-format msgid "ISO C does not support %<~%> for complex conjugation" -msgstr "ISO C stödjer inte %<~%> för komplex konjugering" +msgstr "ISO C stödjer inte %<~%> för komplex konjugering" #: c-typeck.c:3630 #, gcc-internal-format msgid "wrong type argument to unary exclamation mark" -msgstr "fel typ på argument till unärt utropstecken" +msgstr "fel typ pÃ¥ argument till unärt utropstecken" #: c-typeck.c:3681 #, gcc-internal-format msgid "increment of enumeration value is invalid in C++" -msgstr "ökning av uppräkningsvärde är ogiltigt i C++" +msgstr "ökning av uppräkningsvärde är ogiltigt i C++" #: c-typeck.c:3684 #, gcc-internal-format msgid "decrement of enumeration value is invalid in C++" -msgstr "minskning av uppräkningsvärde är ogiltigt i C++" +msgstr "minskning av uppräkningsvärde är ogiltigt i C++" #: c-typeck.c:3697 #, gcc-internal-format msgid "ISO C does not support %<++%> and %<--%> on complex types" -msgstr "ISO C stödjer inte %<++%> och %<--%> på komplexa typer" +msgstr "ISO C stödjer inte %<++%> och %<--%> pÃ¥ komplexa typer" #: c-typeck.c:3716 c-typeck.c:3748 #, gcc-internal-format msgid "wrong type argument to increment" -msgstr "fel typ på argument till ökning" +msgstr "fel typ pÃ¥ argument till ökning" #: c-typeck.c:3718 c-typeck.c:3751 #, gcc-internal-format msgid "wrong type argument to decrement" -msgstr "fel typ på argument till minskning" +msgstr "fel typ pÃ¥ argument till minskning" #: c-typeck.c:3738 #, gcc-internal-format msgid "increment of pointer to unknown structure" -msgstr "ökning av pekare på okänd post" +msgstr "ökning av pekare pÃ¥ okänd post" #: c-typeck.c:3741 #, gcc-internal-format msgid "decrement of pointer to unknown structure" -msgstr "minskning av pekare på okänd post" +msgstr "minskning av pekare pÃ¥ okänd post" #: c-typeck.c:3825 #, gcc-internal-format @@ -14867,100 +14867,100 @@ msgstr "tar adressen till uttryck av typ %<void%>" #: c-typeck.c:3983 c-family/c-common.c:9033 #, gcc-internal-format msgid "assignment of read-only location %qE" -msgstr "tilldelning till endast läsbar plats %qE" +msgstr "tilldelning till endast läsbar plats %qE" #: c-typeck.c:3986 c-family/c-common.c:9034 #, gcc-internal-format msgid "increment of read-only location %qE" -msgstr "ökning av endast läsbar plats %qE" +msgstr "ökning av endast läsbar plats %qE" #: c-typeck.c:3989 c-family/c-common.c:9035 #, gcc-internal-format msgid "decrement of read-only location %qE" -msgstr "minskning av endast läsbar plats %qE" +msgstr "minskning av endast läsbar plats %qE" #: c-typeck.c:4030 #, gcc-internal-format msgid "cannot take address of bit-field %qD" -msgstr "kan inte ta adressen till bitfält %qD" +msgstr "kan inte ta adressen till bitfält %qD" #: c-typeck.c:4058 #, gcc-internal-format msgid "global register variable %qD used in nested function" -msgstr "global registervariabel %qD använd i nästad funktion" +msgstr "global registervariabel %qD använd i nästad funktion" #: c-typeck.c:4061 #, gcc-internal-format msgid "register variable %qD used in nested function" -msgstr "registervariabel %qD använd i nästad funktion" +msgstr "registervariabel %qD använd i nästad funktion" #: c-typeck.c:4066 #, gcc-internal-format msgid "address of global register variable %qD requested" -msgstr "adress till global registervariabel %qD efterfrågad" +msgstr "adress till global registervariabel %qD efterfrÃ¥gad" #: c-typeck.c:4068 #, gcc-internal-format msgid "address of register variable %qD requested" -msgstr "adress på registervariabeln %qD efterfrågad" +msgstr "adress pÃ¥ registervariabeln %qD efterfrÃ¥gad" #: c-typeck.c:4162 #, gcc-internal-format msgid "non-lvalue array in conditional expression" -msgstr "icke-l-värde-vektor i villkorsuttryck" +msgstr "icke-l-värde-vektor i villkorsuttryck" #: c-typeck.c:4218 cp/call.c:4625 #, gcc-internal-format msgid "implicit conversion from %qT to %qT to match other result of conditional" -msgstr "implicit konvertering från %qT till %qT för att stämma med andra resultat i villkor" +msgstr "implicit konvertering frÃ¥n %qT till %qT för att stämma med andra resultat i villkor" #: c-typeck.c:4292 #, gcc-internal-format msgid "ISO C forbids conditional expr with only one void side" -msgstr "ISO C förbjuder villkorliga uttryck med bara en sida void" +msgstr "ISO C förbjuder villkorliga uttryck med bara en sida void" #: c-typeck.c:4309 #, gcc-internal-format msgid "pointers to disjoint address spaces used in conditional expression" -msgstr "pekare till skilda adressrymder använda i villkorsuttryck" +msgstr "pekare till skilda adressrymder använda i villkorsuttryck" #: c-typeck.c:4317 c-typeck.c:4326 #, gcc-internal-format msgid "ISO C forbids conditional expr between %<void *%> and function pointer" -msgstr "ISO C förbjuder villkorliga uttryck mellan %<void *%> och funktionspekare" +msgstr "ISO C förbjuder villkorliga uttryck mellan %<void *%> och funktionspekare" #: c-typeck.c:4339 #, gcc-internal-format msgid "pointer type mismatch in conditional expression" -msgstr "pekartyper stämmer inte i villkorsuttryck" +msgstr "pekartyper stämmer inte i villkorsuttryck" #: c-typeck.c:4348 c-typeck.c:4359 #, gcc-internal-format msgid "pointer/integer type mismatch in conditional expression" -msgstr "pekar-/heltalstyper stämmer inte i villkorsuttryck" +msgstr "pekar-/heltalstyper stämmer inte i villkorsuttryck" #: c-typeck.c:4373 tree-cfg.c:3824 #, gcc-internal-format msgid "type mismatch in conditional expression" -msgstr "typer stämmer inte i villkorsuttryck" +msgstr "typer stämmer inte i villkorsuttryck" #: c-typeck.c:4467 #, gcc-internal-format msgid "left-hand operand of comma expression has no effect" -msgstr "vänster operand av kommauttryck har ingen effekt" +msgstr "vänster operand av kommauttryck har ingen effekt" #: c-typeck.c:4537 msgid "cast adds %q#v qualifier to function type" -msgstr "typkonvertering lägger %q#v-kvalificerare till funktionstyp" +msgstr "typkonvertering lägger %q#v-kvalificerare till funktionstyp" #: c-typeck.c:4543 msgid "cast discards %q#v qualifier from pointer target type" -msgstr "typkonvertering kastar bort %q#v-kvalificerare från pekarmåltyp" +msgstr "typkonvertering kastar bort %q#v-kvalificerare frÃ¥n pekarmÃ¥ltyp" #: c-typeck.c:4578 #, gcc-internal-format msgid "to be safe all intermediate pointers in cast from %qT to %qT must be %<const%> qualified" -msgstr "för att vara säker måste alla mellanliggande pekare i typkonvertering från %qT till %qT vara %<const%>-kvalificerade" +msgstr "för att vara säker mÃ¥ste alla mellanliggande pekare i typkonvertering frÃ¥n %qT till %qT vara %<const%>-kvalificerade" #: c-typeck.c:4615 #, gcc-internal-format @@ -14975,72 +14975,72 @@ msgstr "typkonvertering anger funktionstyp" #: c-typeck.c:4637 #, gcc-internal-format msgid "ISO C forbids casting nonscalar to the same type" -msgstr "ISO C förbjuder typkonvertering av ickeskalärer till samma typ" +msgstr "ISO C förbjuder typkonvertering av ickeskalärer till samma typ" #: c-typeck.c:4654 #, gcc-internal-format msgid "ISO C forbids casts to union type" -msgstr "ISO C förbjuder typkonvertering till unionstyper" +msgstr "ISO C förbjuder typkonvertering till unionstyper" #: c-typeck.c:4664 #, gcc-internal-format msgid "cast to union type from type not present in union" -msgstr "typkonvertering till unionstyp från typ som ej finns i unionen" +msgstr "typkonvertering till unionstyp frÃ¥n typ som ej finns i unionen" #: c-typeck.c:4699 #, gcc-internal-format, gfc-internal-format msgid "cast to %s address space pointer from disjoint generic address space pointer" -msgstr "typkonvertering till adressrymdspekare %s från skild generisk adressrymdspekare " +msgstr "typkonvertering till adressrymdspekare %s frÃ¥n skild generisk adressrymdspekare " #: c-typeck.c:4704 #, gcc-internal-format, gfc-internal-format msgid "cast to generic address space pointer from disjoint %s address space pointer" -msgstr "typkonvertering till generisk adressrymdspekare från skild adressrymdspekare till %s" +msgstr "typkonvertering till generisk adressrymdspekare frÃ¥n skild adressrymdspekare till %s" #: c-typeck.c:4709 #, gcc-internal-format, gfc-internal-format msgid "cast to %s address space pointer from disjoint %s address space pointer" -msgstr "typkonvertering från adressrymdspekare till %s från skild adressrymdspekare till %s" +msgstr "typkonvertering frÃ¥n adressrymdspekare till %s frÃ¥n skild adressrymdspekare till %s" #: c-typeck.c:4729 #, gcc-internal-format msgid "cast increases required alignment of target type" -msgstr "typkonvertering ökar kravet på justering av måltypen" +msgstr "typkonvertering ökar kravet pÃ¥ justering av mÃ¥ltypen" #: c-typeck.c:4740 #, gcc-internal-format msgid "cast from pointer to integer of different size" -msgstr "typkonvertering från pekare till heltal av annan storlek" +msgstr "typkonvertering frÃ¥n pekare till heltal av annan storlek" #: c-typeck.c:4745 #, gcc-internal-format msgid "cast from function call of type %qT to non-matching type %qT" -msgstr "typkonvertering från funktionsanrop av typ %qT till typ %qT matchar inte" +msgstr "typkonvertering frÃ¥n funktionsanrop av typ %qT till typ %qT matchar inte" #: c-typeck.c:4754 cp/typeck.c:6564 #, gcc-internal-format msgid "cast to pointer from integer of different size" -msgstr "typkonvertering till pekare från heltal med annan storlek" +msgstr "typkonvertering till pekare frÃ¥n heltal med annan storlek" #: c-typeck.c:4768 #, gcc-internal-format msgid "ISO C forbids conversion of function pointer to object pointer type" -msgstr "ISO C förbjuder konvertering av funktionspekare till objektpekartyp" +msgstr "ISO C förbjuder konvertering av funktionspekare till objektpekartyp" #: c-typeck.c:4777 #, gcc-internal-format msgid "ISO C forbids conversion of object pointer to function pointer type" -msgstr "ISO C förbjuder konvertering av objektpekare till funktionspekartyp" +msgstr "ISO C förbjuder konvertering av objektpekare till funktionspekartyp" #: c-typeck.c:4860 #, gcc-internal-format msgid "defining a type in a cast is invalid in C++" -msgstr "definition av en typ i en typkonvertering är ogiltigt i C++" +msgstr "definition av en typ i en typkonvertering är ogiltigt i C++" #: c-typeck.c:4999 c-typeck.c:5296 #, gcc-internal-format msgid "enum conversion in assignment is invalid in C++" -msgstr "uppräkningskonvertering i tilldelning är ogiltigt i C++" +msgstr "uppräkningskonvertering i tilldelning är ogiltigt i C++" #. This macro is used to emit diagnostics to ensure that all format #. strings are complete sentences, visible to gettext and checked at @@ -15052,22 +15052,22 @@ msgstr "uppräkningskonvertering i tilldelning är ogiltigt i C++" #: c-typeck.c:5204 c-typeck.c:5234 c-typeck.c:5761 #, gcc-internal-format msgid "expected %qT but argument is of type %qT" -msgstr "%qT förväntades men argumentet har typ %qT" +msgstr "%qT förväntades men argumentet har typ %qT" #: c-typeck.c:5294 #, gcc-internal-format msgid "enum conversion when passing argument %d of %qE is invalid in C++" -msgstr "enum-konvertering när argument %d till %qE skickades är ogiltigt i C++" +msgstr "enum-konvertering när argument %d till %qE skickades är ogiltigt i C++" #: c-typeck.c:5298 c-typeck.c:7863 #, gcc-internal-format msgid "enum conversion in initialization is invalid in C++" -msgstr "enum-konvertering i initiering är ogiltigt i C++" +msgstr "enum-konvertering i initiering är ogiltigt i C++" #: c-typeck.c:5300 #, gcc-internal-format msgid "enum conversion in return is invalid in C++" -msgstr "enum-konvertering i retursats är ogiltigt i C++" +msgstr "enum-konvertering i retursats är ogiltigt i C++" #: c-typeck.c:5329 #, gcc-internal-format @@ -15076,152 +15076,152 @@ msgstr "kan inte skicka rvalue till referensparameter" #: c-typeck.c:5459 c-typeck.c:5682 msgid "passing argument %d of %qE makes %q#v qualified function pointer from unqualified" -msgstr "att skicka argument %d till %qE skapar en %q#v-kvalificerad funktionspekare från en okvalificerad" +msgstr "att skicka argument %d till %qE skapar en %q#v-kvalificerad funktionspekare frÃ¥n en okvalificerad" #: c-typeck.c:5462 c-typeck.c:5685 msgid "assignment makes %q#v qualified function pointer from unqualified" -msgstr "tilldelning skapar en %q#v-kvalificerad funktionspekare från en okvalificerad" +msgstr "tilldelning skapar en %q#v-kvalificerad funktionspekare frÃ¥n en okvalificerad" #: c-typeck.c:5465 c-typeck.c:5687 msgid "initialization makes %q#v qualified function pointer from unqualified" -msgstr "initiering skapar en %q#v-kvalificerad funktionspekare från en okvalificerad" +msgstr "initiering skapar en %q#v-kvalificerad funktionspekare frÃ¥n en okvalificerad" #: c-typeck.c:5468 c-typeck.c:5689 msgid "return makes %q#v qualified function pointer from unqualified" -msgstr "retur skapar en %q#v-kvalificerad funktionspekare från en okvalificerad" +msgstr "retur skapar en %q#v-kvalificerad funktionspekare frÃ¥n en okvalificerad" #: c-typeck.c:5475 c-typeck.c:5645 msgid "passing argument %d of %qE discards %qv qualifier from pointer target type" -msgstr "att skicka argument %d till %qE kastar %qv-kvalificerare från pekarmåltyp" +msgstr "att skicka argument %d till %qE kastar %qv-kvalificerare frÃ¥n pekarmÃ¥ltyp" #: c-typeck.c:5477 c-typeck.c:5647 msgid "assignment discards %qv qualifier from pointer target type" -msgstr "tilldelning kastar %qv-kvalificerare från pekarmåltyp" +msgstr "tilldelning kastar %qv-kvalificerare frÃ¥n pekarmÃ¥ltyp" #: c-typeck.c:5479 c-typeck.c:5649 msgid "initialization discards %qv qualifier from pointer target type" -msgstr "initiering kastar %qv-kvalificerare från pekarmåltyp" +msgstr "initiering kastar %qv-kvalificerare frÃ¥n pekarmÃ¥ltyp" #: c-typeck.c:5481 c-typeck.c:5651 msgid "return discards %qv qualifier from pointer target type" -msgstr "retur kastar %qv-kvalificerare från pekarmåltyp" +msgstr "retur kastar %qv-kvalificerare frÃ¥n pekarmÃ¥ltyp" #: c-typeck.c:5490 #, gcc-internal-format msgid "ISO C prohibits argument conversion to union type" -msgstr "ISO C förbjuder argumentkonvertering till unionstyp" +msgstr "ISO C förbjuder argumentkonvertering till unionstyp" #: c-typeck.c:5545 #, gcc-internal-format msgid "request for implicit conversion from %qT to %qT not permitted in C++" -msgstr "begäran om implicit konvertering från %qT till %qT tillåts inte i C++" +msgstr "begäran om implicit konvertering frÃ¥n %qT till %qT tillÃ¥ts inte i C++" #: c-typeck.c:5557 #, gcc-internal-format msgid "passing argument %d of %qE from pointer to non-enclosed address space" -msgstr "skickar argument %d till %qE från pekare till adressutrymme som inte är inneslutet" +msgstr "skickar argument %d till %qE frÃ¥n pekare till adressutrymme som inte är inneslutet" #: c-typeck.c:5561 #, gcc-internal-format msgid "assignment from pointer to non-enclosed address space" -msgstr "tilldelning från pekare till adressutrymme som inte är inneslutet" +msgstr "tilldelning frÃ¥n pekare till adressutrymme som inte är inneslutet" #: c-typeck.c:5565 #, gcc-internal-format msgid "initialization from pointer to non-enclosed address space" -msgstr "initiering från pekare till adressutrymme som inte är inneslutet" +msgstr "initiering frÃ¥n pekare till adressutrymme som inte är inneslutet" #: c-typeck.c:5569 #, gcc-internal-format msgid "return from pointer to non-enclosed address space" -msgstr "retur från pekare till ej omgivande adressrymd" +msgstr "retur frÃ¥n pekare till ej omgivande adressrymd" #: c-typeck.c:5587 #, gcc-internal-format msgid "argument %d of %qE might be a candidate for a format attribute" -msgstr "argumentet %d till %qE kan vara kandidat för ett formatattribut" +msgstr "argumentet %d till %qE kan vara kandidat för ett formatattribut" #: c-typeck.c:5593 #, gcc-internal-format msgid "assignment left-hand side might be a candidate for a format attribute" -msgstr "vänsterhandssida av tilldelning kan vara en kandidat för ett formatattribut" +msgstr "vänsterhandssida av tilldelning kan vara en kandidat för ett formatattribut" #: c-typeck.c:5598 #, gcc-internal-format msgid "initialization left-hand side might be a candidate for a format attribute" -msgstr "vänsterhandssida av initiering kan vara en kandidat för ett formatattribut" +msgstr "vänsterhandssida av initiering kan vara en kandidat för ett formatattribut" #: c-typeck.c:5603 cp/typeck.c:7541 #, gcc-internal-format msgid "return type might be a candidate for a format attribute" -msgstr "returtypen kan vara en kandidat för ett formatattribut" +msgstr "returtypen kan vara en kandidat för ett formatattribut" #: c-typeck.c:5627 #, gcc-internal-format msgid "ISO C forbids passing argument %d of %qE between function pointer and %<void *%>" -msgstr "ISO C förbjuder att skicka argument %d till %qE mellan funktionspekare och %<void *%>" +msgstr "ISO C förbjuder att skicka argument %d till %qE mellan funktionspekare och %<void *%>" #: c-typeck.c:5630 #, gcc-internal-format msgid "ISO C forbids assignment between function pointer and %<void *%>" -msgstr "ISO C förbjuder tilldelning mellan funktionspekare och %<void *%>" +msgstr "ISO C förbjuder tilldelning mellan funktionspekare och %<void *%>" #: c-typeck.c:5632 #, gcc-internal-format msgid "ISO C forbids initialization between function pointer and %<void *%>" -msgstr "ISO C förbjuder initiering mellan funktionspekare och %<void *%>" +msgstr "ISO C förbjuder initiering mellan funktionspekare och %<void *%>" #: c-typeck.c:5634 #, gcc-internal-format msgid "ISO C forbids return between function pointer and %<void *%>" -msgstr "ISO C förbjuder retur mellan funktionspekare och %<void *%>" +msgstr "ISO C förbjuder retur mellan funktionspekare och %<void *%>" #: c-typeck.c:5663 #, gcc-internal-format msgid "pointer targets in passing argument %d of %qE differ in signedness" -msgstr "pekarmål när argument %d till %qE skickades skiljer i teckenhet" +msgstr "pekarmÃ¥l när argument %d till %qE skickades skiljer i teckenhet" #: c-typeck.c:5665 #, gcc-internal-format msgid "pointer targets in assignment differ in signedness" -msgstr "pekarmål i tilldelning skiljer i teckenhet" +msgstr "pekarmÃ¥l i tilldelning skiljer i teckenhet" #: c-typeck.c:5667 #, gcc-internal-format msgid "pointer targets in initialization differ in signedness" -msgstr "pekarmål i initiering skiljer i teckenhet" +msgstr "pekarmÃ¥l i initiering skiljer i teckenhet" #: c-typeck.c:5669 #, gcc-internal-format msgid "pointer targets in return differ in signedness" -msgstr "pekarmål i retur skiljer i teckenhet" +msgstr "pekarmÃ¥l i retur skiljer i teckenhet" #: c-typeck.c:5698 #, gcc-internal-format msgid "passing argument %d of %qE from incompatible pointer type" -msgstr "skickar argument %d till %qE från inkompatibel pekartyp" +msgstr "skickar argument %d till %qE frÃ¥n inkompatibel pekartyp" #: c-typeck.c:5700 #, gcc-internal-format msgid "assignment from incompatible pointer type" -msgstr "tilldelning från inkompatibel pekartyp" +msgstr "tilldelning frÃ¥n inkompatibel pekartyp" #: c-typeck.c:5701 #, gcc-internal-format msgid "initialization from incompatible pointer type" -msgstr "initiering från inkompatibel pekartyp" +msgstr "initiering frÃ¥n inkompatibel pekartyp" #: c-typeck.c:5703 #, gcc-internal-format msgid "return from incompatible pointer type" -msgstr "retur från inkompatibel pekartyp" +msgstr "retur frÃ¥n inkompatibel pekartyp" #. ??? This should not be an error when inlining calls to #. unprototyped functions. #: c-typeck.c:5711 c-typeck.c:6263 cp/typeck.c:1875 #, gcc-internal-format msgid "invalid use of non-lvalue array" -msgstr "ogiltig användning av icke-l-värde-vektor" +msgstr "ogiltig användning av icke-l-värde-vektor" #: c-typeck.c:5721 #, gcc-internal-format @@ -15236,113 +15236,113 @@ msgstr "tilldelning skapar pekare av heltal utan typkonvertering" #: c-typeck.c:5725 #, gcc-internal-format msgid "initialization makes pointer from integer without a cast" -msgstr "initiering skapar pekare från heltal utan typkonvertering" +msgstr "initiering skapar pekare frÃ¥n heltal utan typkonvertering" #: c-typeck.c:5727 #, gcc-internal-format msgid "return makes pointer from integer without a cast" -msgstr "retur skapar pekare från heltal utan typkonvertering" +msgstr "retur skapar pekare frÃ¥n heltal utan typkonvertering" #: c-typeck.c:5735 #, gcc-internal-format msgid "passing argument %d of %qE makes integer from pointer without a cast" -msgstr "att skicka argument %d till %qE skapar pekare från heltal utan typkonvertering" +msgstr "att skicka argument %d till %qE skapar pekare frÃ¥n heltal utan typkonvertering" #: c-typeck.c:5737 #, gcc-internal-format msgid "assignment makes integer from pointer without a cast" -msgstr "tilldelning skapar heltal från pekare utan typkonvertering" +msgstr "tilldelning skapar heltal frÃ¥n pekare utan typkonvertering" #: c-typeck.c:5739 #, gcc-internal-format msgid "initialization makes integer from pointer without a cast" -msgstr "initiering skapar heltal från pekare utan typkonvertering" +msgstr "initiering skapar heltal frÃ¥n pekare utan typkonvertering" #: c-typeck.c:5741 #, gcc-internal-format msgid "return makes integer from pointer without a cast" -msgstr "retur skapar heltal från pekare utan typkonvertering" +msgstr "retur skapar heltal frÃ¥n pekare utan typkonvertering" #: c-typeck.c:5758 c-family/c-common.c:9296 config/mep/mep.c:6315 #, gcc-internal-format msgid "incompatible type for argument %d of %qE" -msgstr "inkompatibel typ för argument %d av %qE" +msgstr "inkompatibel typ för argument %d av %qE" #: c-typeck.c:5764 #, gcc-internal-format msgid "incompatible types when assigning to type %qT from type %qT" -msgstr "inkompatibla typer i tilldelning till typ %qT från typ %qT" +msgstr "inkompatibla typer i tilldelning till typ %qT frÃ¥n typ %qT" #: c-typeck.c:5769 #, gcc-internal-format msgid "incompatible types when initializing type %qT using type %qT" -msgstr "inkompatibla typer i när typ %qT inierades med typ %qT" +msgstr "inkompatibla typer i när typ %qT inierades med typ %qT" #: c-typeck.c:5774 #, gcc-internal-format msgid "incompatible types when returning type %qT but %qT was expected" -msgstr "inkompatibla typer när typ %qT returnerades men %qT förväntades" +msgstr "inkompatibla typer när typ %qT returnerades men %qT förväntades" #: c-typeck.c:5838 #, gcc-internal-format msgid "traditional C rejects automatic aggregate initialization" -msgstr "traditionell C tillåter inte aggregatinitiering" +msgstr "traditionell C tillÃ¥ter inte aggregatinitiering" #: c-typeck.c:6014 c-typeck.c:6031 c-typeck.c:6049 #, gcc-internal-format msgid "(near initialization for %qs)" -msgstr "(i närheten av initiering av %qs)" +msgstr "(i närheten av initiering av %qs)" #: c-typeck.c:6064 #, gcc-internal-format msgid "array initialized from parenthesized string constant" -msgstr "vektor initierad från strängkonstant inom parentes" +msgstr "vektor initierad frÃ¥n strängkonstant inom parentes" #: c-typeck.c:6137 c-typeck.c:7012 #, gcc-internal-format msgid "initialization of a flexible array member" -msgstr "initiering av medlem som är en flexibel vektor" +msgstr "initiering av medlem som är en flexibel vektor" #: c-typeck.c:6147 cp/typeck2.c:890 #, gcc-internal-format msgid "char-array initialized from wide string" -msgstr "char-vektor initierad från bred sträng" +msgstr "char-vektor initierad frÃ¥n bred sträng" #: c-typeck.c:6155 #, gcc-internal-format msgid "wide character array initialized from non-wide string" -msgstr "bred teckenvektor initierad från icke-bred sträng" +msgstr "bred teckenvektor initierad frÃ¥n icke-bred sträng" #: c-typeck.c:6161 #, gcc-internal-format msgid "wide character array initialized from incompatible wide string" -msgstr "bred teckenvektor initierad från en inkompatibel bred sträng" +msgstr "bred teckenvektor initierad frÃ¥n en inkompatibel bred sträng" #: c-typeck.c:6195 #, gcc-internal-format msgid "array of inappropriate type initialized from string constant" -msgstr "vektor av typ som inte passar initierad från strängkonstant" +msgstr "vektor av typ som inte passar initierad frÃ¥n strängkonstant" #: c-typeck.c:6289 #, gcc-internal-format msgid "array initialized from non-constant array expression" -msgstr "vektor initierad från icke-konstant vektoruttryck" +msgstr "vektor initierad frÃ¥n icke-konstant vektoruttryck" #: c-typeck.c:6303 c-typeck.c:6306 c-typeck.c:6314 c-typeck.c:6353 #: c-typeck.c:7836 #, gcc-internal-format msgid "initializer element is not constant" -msgstr "initierarelement är inte konstant" +msgstr "initierarelement är inte konstant" #: c-typeck.c:6319 c-typeck.c:6365 c-typeck.c:7846 #, gcc-internal-format msgid "initializer element is not a constant expression" -msgstr "initierarelement är inte ett konstant uttryck" +msgstr "initierarelement är inte ett konstant uttryck" #: c-typeck.c:6360 c-typeck.c:7841 #, gcc-internal-format msgid "initializer element is not computable at load time" -msgstr "initierarelement är inte beräkningsbart vid laddtidpunkt" +msgstr "initierarelement är inte beräkningsbart vid laddtidpunkt" #: c-typeck.c:6378 #, gcc-internal-format @@ -15367,12 +15367,12 @@ msgstr "klamrar saknas runt initierare" #: c-typeck.c:6949 #, gcc-internal-format msgid "braces around scalar initializer" -msgstr "klamrar runt skalär initierare" +msgstr "klamrar runt skalär initierare" #: c-typeck.c:7009 #, gcc-internal-format msgid "initialization of flexible array member in a nested context" -msgstr "initiering av medlem som är en flexibel vektor i nästat sammanhang" +msgstr "initiering av medlem som är en flexibel vektor i nästat sammanhang" #: c-typeck.c:7048 #, gcc-internal-format @@ -15382,22 +15382,22 @@ msgstr "initierare saknas" #: c-typeck.c:7070 #, gcc-internal-format msgid "empty scalar initializer" -msgstr "tom skalär initierare" +msgstr "tom skalär initierare" #: c-typeck.c:7075 #, gcc-internal-format msgid "extra elements in scalar initializer" -msgstr "extra element i skalär initierare" +msgstr "extra element i skalär initierare" #: c-typeck.c:7186 c-typeck.c:7267 #, gcc-internal-format msgid "array index in non-array initializer" -msgstr "vektorindex i initierare för annat än vektor" +msgstr "vektorindex i initierare för annat än vektor" #: c-typeck.c:7191 c-typeck.c:7323 #, gcc-internal-format msgid "field name not in record or union initializer" -msgstr "fältnamn i initierare för annat än post eller union" +msgstr "fältnamn i initierare för annat än post eller union" #: c-typeck.c:7240 #, gcc-internal-format @@ -15417,7 +15417,7 @@ msgstr "ickekonstant vektorindex i initierare" #: c-typeck.c:7269 c-typeck.c:7272 #, gcc-internal-format msgid "array index in initializer exceeds array bounds" -msgstr "vektorindex i initierare överskrider vektorns storlek" +msgstr "vektorindex i initierare överskrider vektorns storlek" #: c-typeck.c:7286 #, gcc-internal-format @@ -15427,32 +15427,32 @@ msgstr "tomt indexintervall i initierare" #: c-typeck.c:7295 #, gcc-internal-format msgid "array index range in initializer exceeds array bounds" -msgstr "vektorindexintervall i initierare överskrider vektorns gränser" +msgstr "vektorindexintervall i initierare överskrider vektorns gränser" #: c-typeck.c:7330 #, gcc-internal-format msgid "unknown field %qE specified in initializer" -msgstr "okänt fält %qE angivet i initierare" +msgstr "okänt fält %qE angivet i initierare" #: c-typeck.c:7382 c-typeck.c:7409 c-typeck.c:7937 #, gcc-internal-format msgid "initialized field with side-effects overwritten" -msgstr "initierat fält med sidoeffekter överskrivet" +msgstr "initierat fält med sidoeffekter överskrivet" #: c-typeck.c:7384 c-typeck.c:7411 c-typeck.c:7939 #, gcc-internal-format msgid "initialized field overwritten" -msgstr "initierat fält överskrivet" +msgstr "initierat fält överskrivet" #: c-typeck.c:8156 #, gcc-internal-format msgid "excess elements in char array initializer" -msgstr "överflödiga element i teckenvektorinitierare" +msgstr "överflödiga element i teckenvektorinitierare" #: c-typeck.c:8163 c-typeck.c:8224 #, gcc-internal-format msgid "excess elements in struct initializer" -msgstr "överflödiga element i postinitierare" +msgstr "överflödiga element i postinitierare" #: c-typeck.c:8239 #, gcc-internal-format @@ -15462,32 +15462,32 @@ msgstr "icke-statisk initiering av an flexibel vektormedlem" #: c-typeck.c:8310 #, gcc-internal-format msgid "excess elements in union initializer" -msgstr "överflödiga element i unioninitierare" +msgstr "överflödiga element i unioninitierare" #: c-typeck.c:8332 #, gcc-internal-format msgid "traditional C rejects initialization of unions" -msgstr "traditionell C tillåter inte initiering av unioner" +msgstr "traditionell C tillÃ¥ter inte initiering av unioner" #: c-typeck.c:8400 #, gcc-internal-format msgid "excess elements in array initializer" -msgstr "överflödiga element i vektorinitierare" +msgstr "överflödiga element i vektorinitierare" #: c-typeck.c:8434 #, gcc-internal-format msgid "excess elements in vector initializer" -msgstr "överflödiga element i vector-initierare" +msgstr "överflödiga element i vector-initierare" #: c-typeck.c:8466 #, gcc-internal-format msgid "excess elements in scalar initializer" -msgstr "överflödiga element i skalärinitierare" +msgstr "överflödiga element i skalärinitierare" #: c-typeck.c:8690 #, gcc-internal-format msgid "ISO C forbids %<goto *expr;%>" -msgstr "ISO C förbjuder %<goto *expr;%>" +msgstr "ISO C förbjuder %<goto *expr;%>" #: c-typeck.c:8712 cp/typeck.c:7753 #, gcc-internal-format @@ -15497,17 +15497,17 @@ msgstr "funktion deklarerad %<noreturn%> har en %<return%>-sats" #: c-typeck.c:8735 #, gcc-internal-format msgid "%<return%> with no value, in function returning non-void" -msgstr "%<return%> utan värde i funktion som returnerar icke-void" +msgstr "%<return%> utan värde i funktion som returnerar icke-void" #: c-typeck.c:8745 #, gcc-internal-format msgid "%<return%> with a value, in function returning void" -msgstr "%<return%> med värde i funktion som returnerar void" +msgstr "%<return%> med värde i funktion som returnerar void" #: c-typeck.c:8747 #, gcc-internal-format msgid "ISO C forbids %<return%> with expression, in function returning void" -msgstr "ISO C förbjuder %<return%> med värde i funktion som returnerar void" +msgstr "ISO C förbjuder %<return%> med värde i funktion som returnerar void" #: c-typeck.c:8808 #, gcc-internal-format @@ -15517,7 +15517,7 @@ msgstr "funktionen returnerar adress till en lokal variabel" #: c-typeck.c:8881 cp/semantics.c:1045 #, gcc-internal-format msgid "switch quantity not an integer" -msgstr "switch-argument är inte ett heltal" +msgstr "switch-argument är inte ett heltal" #: c-typeck.c:8894 #, gcc-internal-format @@ -15527,12 +15527,12 @@ msgstr "%<long%>-switch-uttryck konverteras inte till %<int%> i ISO C" #: c-typeck.c:8930 c-typeck.c:8938 #, gcc-internal-format msgid "case label is not an integer constant expression" -msgstr "case-etikett är inte ett konstant heltalsuttryck" +msgstr "case-etikett är inte ett konstant heltalsuttryck" #: c-typeck.c:8944 cp/parser.c:8818 #, gcc-internal-format msgid "case label not within a switch statement" -msgstr "case-etikett är inte i en switch-sats" +msgstr "case-etikett är inte i en switch-sats" #: c-typeck.c:8946 #, gcc-internal-format @@ -15542,22 +15542,22 @@ msgstr "%<default%>-etikett som inte ligger i en switch-sats" #: c-typeck.c:9029 cp/parser.c:9118 #, gcc-internal-format msgid "suggest explicit braces to avoid ambiguous %<else%>" -msgstr "föreslår uttryckliga klamrar för att undvika tvetydighet i %<else%>" +msgstr "föreslÃ¥r uttryckliga klamrar för att undvika tvetydighet i %<else%>" #: c-typeck.c:9138 cp/parser.c:9845 #, gcc-internal-format msgid "break statement not within loop or switch" -msgstr "break-sats som inte är i en loop eller switch" +msgstr "break-sats som inte är i en loop eller switch" #: c-typeck.c:9140 cp/parser.c:9866 #, gcc-internal-format msgid "continue statement not within a loop" -msgstr "continue-sats som inte är i en loop" +msgstr "continue-sats som inte är i en loop" #: c-typeck.c:9145 cp/parser.c:9856 #, gcc-internal-format msgid "break statement used with OpenMP for loop" -msgstr "break-sats använd med OpenMP-for-slinga" +msgstr "break-sats använd med OpenMP-for-slinga" #: c-typeck.c:9171 cp/cp-gimplify.c:402 #, gcc-internal-format @@ -15567,193 +15567,193 @@ msgstr "sats utan effekt" #: c-typeck.c:9197 #, gcc-internal-format msgid "expression statement has incomplete type" -msgstr "uttryckssats har ofullständig typ" +msgstr "uttryckssats har ofullständig typ" #: c-typeck.c:9456 c-typeck.c:9491 c-typeck.c:9505 #, gcc-internal-format msgid "conversion of scalar to vector involves truncation" -msgstr "konvertering av skalär till vektor innebär avhuggning" +msgstr "konvertering av skalär till vektor innebär avhuggning" #: c-typeck.c:9933 cp/typeck.c:3926 #, gcc-internal-format msgid "right shift count is negative" -msgstr "högershiftoperanden är negativ" +msgstr "högershiftoperanden är negativ" #: c-typeck.c:9944 cp/typeck.c:3933 #, gcc-internal-format msgid "right shift count >= width of type" -msgstr "högershiftoperanden >= storleken på typen" +msgstr "högershiftoperanden >= storleken pÃ¥ typen" #: c-typeck.c:9985 cp/typeck.c:3955 #, gcc-internal-format msgid "left shift count is negative" -msgstr "vänstershiftoperanden är negativ" +msgstr "vänstershiftoperanden är negativ" #: c-typeck.c:9992 cp/typeck.c:3961 #, gcc-internal-format msgid "left shift count >= width of type" -msgstr "vänstershiftoperanden >= storleken på typen" +msgstr "vänstershiftoperanden >= storleken pÃ¥ typen" #: c-typeck.c:10015 c-typeck.c:10152 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "comparing vectors with different element types" -msgstr "Varna för jämförelser av skilda uppräkningstyper" +msgstr "jämför vektorer med skilda elementtyper" #: c-typeck.c:10022 c-typeck.c:10159 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "comparing vectors with different number of elements" -msgstr "olika antal resultat" +msgstr "jämför vektorer med olika antal element" #: c-typeck.c:10038 cp/typeck.c:4007 #, gcc-internal-format msgid "comparing floating point with == or != is unsafe" -msgstr "jämföra flyttal med == eller != är osäkert" +msgstr "jämföra flyttal med == eller != är osäkert" #: c-typeck.c:10055 c-typeck.c:10075 #, gcc-internal-format msgid "the comparison will always evaluate as %<false%> for the address of %qD will never be NULL" -msgstr "jämförelsen kommer alltid beräknas till %<false%> för adressen till %qD kommer aldrig att vara NULL" +msgstr "jämförelsen kommer alltid beräknas till %<false%> för adressen till %qD kommer aldrig att vara NULL" #: c-typeck.c:10061 c-typeck.c:10081 #, gcc-internal-format msgid "the comparison will always evaluate as %<true%> for the address of %qD will never be NULL" -msgstr "jämförelsen kommer alltid beräknas till %<true%> för adressen till %qD kommer aldrig att vara NULL" +msgstr "jämförelsen kommer alltid beräknas till %<true%> för adressen till %qD kommer aldrig att vara NULL" #: c-typeck.c:10102 c-typeck.c:10202 #, gcc-internal-format msgid "comparison of pointers to disjoint address spaces" -msgstr "jämförelse av pekare till skilda adressutrymmen" +msgstr "jämförelse av pekare till skilda adressutrymmen" #: c-typeck.c:10109 c-typeck.c:10115 #, gcc-internal-format msgid "ISO C forbids comparison of %<void *%> with function pointer" -msgstr "ISO C förbjuder jämförelse mellan %<void *%> och funktionspekare" +msgstr "ISO C förbjuder jämförelse mellan %<void *%> och funktionspekare" #: c-typeck.c:10122 c-typeck.c:10212 #, gcc-internal-format msgid "comparison of distinct pointer types lacks a cast" -msgstr "jämförelse av skilda pekartyper saknar en typkonvertering" +msgstr "jämförelse av skilda pekartyper saknar en typkonvertering" #: c-typeck.c:10134 c-typeck.c:10139 c-typeck.c:10238 c-typeck.c:10243 #, gcc-internal-format msgid "comparison between pointer and integer" -msgstr "jämförelse mellan pekare och heltal" +msgstr "jämförelse mellan pekare och heltal" #: c-typeck.c:10190 #, gcc-internal-format msgid "comparison of complete and incomplete pointers" -msgstr "jämförelse av kompletta och ofullständiga pekare" +msgstr "jämförelse av kompletta och ofullständiga pekare" #: c-typeck.c:10192 #, gcc-internal-format msgid "ISO C forbids ordered comparisons of pointers to functions" -msgstr "ISO C förbjuder ordningsjämförelse på pekare till funktioner" +msgstr "ISO C förbjuder ordningsjämförelse pÃ¥ pekare till funktioner" #: c-typeck.c:10197 #, gcc-internal-format msgid "ordered comparison of pointer with null pointer" -msgstr "ordningsjämförelse av pekare med nollpekare" +msgstr "ordningsjämförelse av pekare med nollpekare" #: c-typeck.c:10220 c-typeck.c:10223 c-typeck.c:10230 c-typeck.c:10233 #: cp/typeck.c:4258 cp/typeck.c:4265 #, gcc-internal-format msgid "ordered comparison of pointer with integer zero" -msgstr "ordningsjämförelse av pekare med heltalet noll" +msgstr "ordningsjämförelse av pekare med heltalet noll" #: c-typeck.c:10277 cp/typeck.c:4337 #, gcc-internal-format msgid "implicit conversion from %qT to %qT to match other operand of binary expression" -msgstr "implicit konvertering från %qT till %qT för att matcha den andra operanden i binärt uttryck" +msgstr "implicit konvertering frÃ¥n %qT till %qT för att matcha den andra operanden i binärt uttryck" #: c-typeck.c:10561 #, gcc-internal-format msgid "used array that cannot be converted to pointer where scalar is required" -msgstr "vektor använd som inte kan konverteras till en pekare där en skalär krävs" +msgstr "vektor använd som inte kan konverteras till en pekare där en skalär krävs" #: c-typeck.c:10565 #, gcc-internal-format msgid "used struct type value where scalar is required" -msgstr "struct-typvärde använt där skalär krävs" +msgstr "struct-typvärde använt där skalär krävs" #: c-typeck.c:10569 #, gcc-internal-format msgid "used union type value where scalar is required" -msgstr "värde av uniontyp använt där skalär krävs" +msgstr "värde av uniontyp använt där skalär krävs" #: c-typeck.c:10580 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "used vector type where scalar is required" -msgstr "struct-typvärde använt där skalär krävs" +msgstr "vektortyp använd där skalär krävs" #: c-typeck.c:10734 cp/semantics.c:4205 #, gcc-internal-format msgid "%qE has invalid type for %<reduction%>" -msgstr "%qE har ogiltig typ för %<reduction%>" +msgstr "%qE har ogiltig typ för %<reduction%>" #: c-typeck.c:10771 cp/semantics.c:4220 #, gcc-internal-format msgid "%qE has invalid type for %<reduction(%s)%>" -msgstr "%qE har ogiltig typ för %<reduction(%s)%>" +msgstr "%qE har ogiltig typ för %<reduction(%s)%>" #: c-typeck.c:10788 cp/semantics.c:4230 #, gcc-internal-format msgid "%qE must be %<threadprivate%> for %<copyin%>" -msgstr "%qE måste vara %<threadprivate%> för %<copyin%>" +msgstr "%qE mÃ¥ste vara %<threadprivate%> för %<copyin%>" #: c-typeck.c:10798 cp/semantics.c:3998 #, gcc-internal-format msgid "%qE is not a variable in clause %qs" -msgstr "%qE är inte en variabel i klausul %qs" +msgstr "%qE är inte en variabel i klausul %qs" #: c-typeck.c:10806 c-typeck.c:10828 c-typeck.c:10850 #, gcc-internal-format msgid "%qE appears more than once in data clauses" -msgstr "%qE förekommer mer än en gång i dataklausuler" +msgstr "%qE förekommer mer än en gÃ¥ng i dataklausuler" #: c-typeck.c:10821 cp/semantics.c:4021 #, gcc-internal-format msgid "%qE is not a variable in clause %<firstprivate%>" -msgstr "%qE är inte en variabel i klausul %<firstprivate%>" +msgstr "%qE är inte en variabel i klausul %<firstprivate%>" #: c-typeck.c:10843 cp/semantics.c:4043 #, gcc-internal-format msgid "%qE is not a variable in clause %<lastprivate%>" -msgstr "%qE är inte en variabel i klausul %<lastprivate%>" +msgstr "%qE är inte en variabel i klausul %<lastprivate%>" #: c-typeck.c:10911 cp/semantics.c:4276 #, gcc-internal-format msgid "%qE is predetermined %qs for %qs" -msgstr "%qE är förutbestämd som %qs för %qs" +msgstr "%qE är förutbestämd som %qs för %qs" #: c-typeck.c:11013 #, gcc-internal-format msgid "C++ requires promoted type, not enum type, in %<va_arg%>" -msgstr "C++ kräver en befodrad typ, inte en uppräkningstyp, i %<va_arg%>" +msgstr "C++ kräver en befodrad typ, inte en uppräkningstyp, i %<va_arg%>" #: calls.c:2311 #, gcc-internal-format msgid "function call has aggregate value" -msgstr "funktionsanrop har sammansatt värde" +msgstr "funktionsanrop har sammansatt värde" #: cfgexpand.c:1245 function.c:1010 varasm.c:1992 #, gcc-internal-format msgid "size of variable %q+D is too large" -msgstr "storleken på variabeln %q+D är för stor" +msgstr "storleken pÃ¥ variabeln %q+D är för stor" #: cfgexpand.c:4421 #, gcc-internal-format msgid "stack protector not protecting local variables: variable length buffer" -msgstr "stackskyddet skyddar inte lokala variabler: buffert med variabel längd" +msgstr "stackskyddet skyddar inte lokala variabler: buffert med variabel längd" #: cfgexpand.c:4425 #, gcc-internal-format, gfc-internal-format msgid "stack protector not protecting function: all local arrays are less than %d bytes long" -msgstr "stackskyddet skyddar inte funktioner: alla lokala vektorer är mindre än %d byte långa" +msgstr "stackskyddet skyddar inte funktioner: alla lokala vektorer är mindre än %d byte lÃ¥nga" #: cfghooks.c:110 #, gcc-internal-format, gfc-internal-format msgid "bb %d on wrong place" -msgstr "bb %d på fel plats" +msgstr "bb %d pÃ¥ fel plats" #: cfghooks.c:116 #, gcc-internal-format, gfc-internal-format @@ -15783,32 +15783,32 @@ msgstr "verify_flow_info: Fel blockfrekvens %i %i" #: cfghooks.c:159 #, gcc-internal-format, gfc-internal-format msgid "verify_flow_info: Duplicate edge %i->%i" -msgstr "verify_flow_info: Dubblerad båge %i->%i" +msgstr "verify_flow_info: Dubblerad bÃ¥ge %i->%i" #: cfghooks.c:165 #, gcc-internal-format, gfc-internal-format msgid "verify_flow_info: Wrong probability of edge %i->%i %i" -msgstr "verify_flow_info: Fel sannolikhet för båge %i->%i %i" +msgstr "verify_flow_info: Fel sannolikhet för bÃ¥ge %i->%i %i" #: cfghooks.c:171 #, gcc-internal-format, gfc-internal-format msgid "verify_flow_info: Wrong count of edge %i->%i %i" -msgstr "verify_flow_info: Fel antal bågar %i->%i %i" +msgstr "verify_flow_info: Fel antal bÃ¥gar %i->%i %i" #: cfghooks.c:183 #, gcc-internal-format, gfc-internal-format msgid "verify_flow_info: Basic block %d succ edge is corrupted" -msgstr "verify_flow_info: Grundblock %d efterföljarbåge är trasig" +msgstr "verify_flow_info: Grundblock %d efterföljarbÃ¥ge är trasig" #: cfghooks.c:197 #, gcc-internal-format, gfc-internal-format msgid "wrong amount of branch edges after unconditional jump %i" -msgstr "fel antal förgreningsbågar efter ovillkorligt hopp %i" +msgstr "fel antal förgreningsbÃ¥gar efter ovillkorligt hopp %i" #: cfghooks.c:205 cfghooks.c:216 #, gcc-internal-format, gfc-internal-format msgid "basic block %d pred edge is corrupted" -msgstr "grundblock %d företrädarbåge är trasig" +msgstr "grundblock %d företrädarbÃ¥ge är trasig" #: cfghooks.c:217 #, gcc-internal-format, gfc-internal-format @@ -15818,7 +15818,7 @@ msgstr "dess dest_idx borde vara %d, inte %d" #: cfghooks.c:246 #, gcc-internal-format, gfc-internal-format msgid "basic block %i edge lists are corrupted" -msgstr "grundblock %i båglistor är trasiga" +msgstr "grundblock %i bÃ¥glistor är trasiga" #: cfghooks.c:259 #, gcc-internal-format @@ -15828,107 +15828,107 @@ msgstr "verify_flow_info misslyckades" #: cfghooks.c:320 #, gcc-internal-format, gfc-internal-format msgid "%s does not support redirect_edge_and_branch" -msgstr "%s stödjer inte redirect_edge_and_branch" +msgstr "%s stödjer inte redirect_edge_and_branch" #: cfghooks.c:340 #, gcc-internal-format, gfc-internal-format msgid "%s does not support can_remove_branch_p" -msgstr "%s stödjer inte can_remove_branch_p" +msgstr "%s stödjer inte can_remove_branch_p" #: cfghooks.c:393 #, gcc-internal-format, gfc-internal-format msgid "%s does not support redirect_edge_and_branch_force" -msgstr "%s stödjer inte redirect_edge_and_branch_force" +msgstr "%s stödjer inte redirect_edge_and_branch_force" #: cfghooks.c:431 #, gcc-internal-format, gfc-internal-format msgid "%s does not support split_block" -msgstr "%s stödjer inte split_block" +msgstr "%s stödjer inte split_block" #: cfghooks.c:483 #, gcc-internal-format, gfc-internal-format msgid "%s does not support move_block_after" -msgstr "%s stödjer inte inte move_block_after" +msgstr "%s stödjer inte inte move_block_after" #: cfghooks.c:496 #, gcc-internal-format, gfc-internal-format msgid "%s does not support delete_basic_block" -msgstr "%s stödjer inte delete_basic_block" +msgstr "%s stödjer inte delete_basic_block" #: cfghooks.c:546 #, gcc-internal-format, gfc-internal-format msgid "%s does not support split_edge" -msgstr "%s stödjer inte split_edge" +msgstr "%s stödjer inte split_edge" #: cfghooks.c:619 #, gcc-internal-format, gfc-internal-format msgid "%s does not support create_basic_block" -msgstr "%s stödjer inte create_basic_block" +msgstr "%s stödjer inte create_basic_block" #: cfghooks.c:647 #, gcc-internal-format, gfc-internal-format msgid "%s does not support can_merge_blocks_p" -msgstr "%s stödjer inte can_merge_blocks_p" +msgstr "%s stödjer inte can_merge_blocks_p" #: cfghooks.c:658 #, gcc-internal-format, gfc-internal-format msgid "%s does not support predict_edge" -msgstr "%s stödjer inte predict_edge" +msgstr "%s stödjer inte predict_edge" #: cfghooks.c:667 #, gcc-internal-format, gfc-internal-format msgid "%s does not support predicted_by_p" -msgstr "%s stödjer inte predicted_by_p" +msgstr "%s stödjer inte predicted_by_p" #: cfghooks.c:681 #, gcc-internal-format, gfc-internal-format msgid "%s does not support merge_blocks" -msgstr "%s stödjer inte merge_blocks" +msgstr "%s stödjer inte merge_blocks" #: cfghooks.c:734 #, gcc-internal-format, gfc-internal-format msgid "%s does not support make_forwarder_block" -msgstr "%s stödjer inte make_forwarder_block" +msgstr "%s stödjer inte make_forwarder_block" #: cfghooks.c:889 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "%s does not support force_nonfallthru" -msgstr "%s stödjer inte inte move_block_after" +msgstr "%s stödjer inte inte force_nonfallthru" #: cfghooks.c:917 #, gcc-internal-format, gfc-internal-format msgid "%s does not support can_duplicate_block_p" -msgstr "%s stödjer inte can_duplicate_block_p" +msgstr "%s stödjer inte can_duplicate_block_p" #: cfghooks.c:939 #, gcc-internal-format, gfc-internal-format msgid "%s does not support duplicate_block" -msgstr "%s stödjer inte duplicate_block" +msgstr "%s stödjer inte duplicate_block" #: cfghooks.c:1014 #, gcc-internal-format, gfc-internal-format msgid "%s does not support block_ends_with_call_p" -msgstr "%s stödjer inte block_ends_with_call_p" +msgstr "%s stödjer inte block_ends_with_call_p" #: cfghooks.c:1025 #, gcc-internal-format, gfc-internal-format msgid "%s does not support block_ends_with_condjump_p" -msgstr "%s stödjer inte block_ends_with_condjump_p" +msgstr "%s stödjer inte block_ends_with_condjump_p" #: cfghooks.c:1043 #, gcc-internal-format, gfc-internal-format msgid "%s does not support flow_call_edges_add" -msgstr "%s stödjer inte flow_call_edges_add" +msgstr "%s stödjer inte flow_call_edges_add" #: cfgloop.c:1335 #, gcc-internal-format, gfc-internal-format msgid "size of loop %d should be %d, not %d" -msgstr "storlek på slinga %d borde vara %d, inte %d" +msgstr "storlek pÃ¥ slinga %d borde vara %d, inte %d" #: cfgloop.c:1349 #, gcc-internal-format, gfc-internal-format msgid "bb %d do not belong to loop %d" -msgstr "bb %d tillhör inte slinga %d" +msgstr "bb %d tillhör inte slinga %d" #: cfgloop.c:1364 #, gcc-internal-format @@ -15938,27 +15938,27 @@ msgstr "slinga %d:s huvud har inte exakt 2 poster" #: cfgloop.c:1371 #, gcc-internal-format msgid "loop %d%'s latch does not have exactly 1 successor" -msgstr "slinga %d:s koppling har inte exakt 1 efterföljare" +msgstr "slinga %d:s koppling har inte exakt 1 efterföljare" #: cfgloop.c:1376 #, gcc-internal-format msgid "loop %d%'s latch does not have header as successor" -msgstr "slinga %d:s koppling har inte huvud som efterföljare" +msgstr "slinga %d:s koppling har inte huvud som efterföljare" #: cfgloop.c:1381 #, gcc-internal-format msgid "loop %d%'s latch does not belong directly to it" -msgstr "slinga %d:s koppling tillhör inte direkt till den" +msgstr "slinga %d:s koppling tillhör inte direkt till den" #: cfgloop.c:1387 #, gcc-internal-format msgid "loop %d%'s header does not belong directly to it" -msgstr "slinga %d:s huvud tillhör inte direkt till den" +msgstr "slinga %d:s huvud tillhör inte direkt till den" #: cfgloop.c:1393 #, gcc-internal-format msgid "loop %d%'s latch is marked as part of irreducible region" -msgstr "slinga %d:s koppling är markerad som en del av an oreducerbar region" +msgstr "slinga %d:s koppling är markerad som en del av an oreducerbar region" #: cfgloop.c:1426 #, gcc-internal-format, gfc-internal-format @@ -15973,57 +15973,57 @@ msgstr "grundblock %d borde inte vara markerat som oreducerbart" #: cfgloop.c:1440 #, gcc-internal-format, gfc-internal-format msgid "edge from %d to %d should be marked irreducible" -msgstr "båge från %d till %d borde vara markerad oreducerbar" +msgstr "bÃ¥ge frÃ¥n %d till %d borde vara markerad oreducerbar" #: cfgloop.c:1447 #, gcc-internal-format, gfc-internal-format msgid "edge from %d to %d should not be marked irreducible" -msgstr "båge från %d till %d borde inte vara markerad oreducerbar" +msgstr "bÃ¥ge frÃ¥n %d till %d borde inte vara markerad oreducerbar" #: cfgloop.c:1462 #, gcc-internal-format, gfc-internal-format msgid "corrupted head of the exits list of loop %d" -msgstr "trasigt huvud till utgångslistan för slinga %d" +msgstr "trasigt huvud till utgÃ¥ngslistan för slinga %d" #: cfgloop.c:1480 #, gcc-internal-format, gfc-internal-format msgid "corrupted exits list of loop %d" -msgstr "trasig utgångslista för slinga %d" +msgstr "trasig utgÃ¥ngslista för slinga %d" #: cfgloop.c:1489 #, gcc-internal-format, gfc-internal-format msgid "nonempty exits list of loop %d, but exits are not recorded" -msgstr "utgångslistan för slinga %d är inte tom, men inga utgångar finns noterade" +msgstr "utgÃ¥ngslistan för slinga %d är inte tom, men inga utgÃ¥ngar finns noterade" #: cfgloop.c:1515 #, gcc-internal-format, gfc-internal-format msgid "exit %d->%d not recorded" -msgstr "utgång %d->%d inte noterad" +msgstr "utgÃ¥ng %d->%d inte noterad" #: cfgloop.c:1533 #, gcc-internal-format, gfc-internal-format msgid "wrong list of exited loops for edge %d->%d" -msgstr "fel lista över lämnade slingor för båge %d->%d" +msgstr "fel lista över lämnade slingor för bÃ¥ge %d->%d" #: cfgloop.c:1542 #, gcc-internal-format msgid "too many loop exits recorded" -msgstr "får många slingutgångar noterade" +msgstr "fÃ¥r mÃ¥nga slingutgÃ¥ngar noterade" #: cfgloop.c:1553 #, gcc-internal-format, gfc-internal-format msgid "%d exits recorded for loop %d (having %d exits)" -msgstr "%d utgångar registrerade för slinga %d (som har %d utgångar)" +msgstr "%d utgÃ¥ngar registrerade för slinga %d (som har %d utgÃ¥ngar)" #: cfgrtl.c:1835 #, gcc-internal-format, gfc-internal-format msgid "BB_RTL flag not set for block %d" -msgstr "flaggan BB_RTL är inte satt för block %d" +msgstr "flaggan BB_RTL är inte satt för block %d" #: cfgrtl.c:1842 #, gcc-internal-format, gfc-internal-format msgid "insn %d basic block pointer is %d, should be %d" -msgstr "instruktion %d grundblockspekare är %d, skall vara %d" +msgstr "instruktion %d grundblockspekare är %d, skall vara %d" #: cfgrtl.c:1853 #, gcc-internal-format, gfc-internal-format @@ -16038,27 +16038,27 @@ msgstr "instruktion %d i foten till bb %d har icke-NULL grundblock" #: cfgrtl.c:1883 #, gcc-internal-format msgid "verify_flow_info: REG_BR_PROB does not match cfg %wi %i" -msgstr "verify_flow_info: REG_BR_PROB stämmer inte med cfg %wi %i" +msgstr "verify_flow_info: REG_BR_PROB stämmer inte med cfg %wi %i" #: cfgrtl.c:1902 #, gcc-internal-format msgid "EDGE_CROSSING incorrectly set across same section" -msgstr "EDGE_CROSSING felaktigt satt över samma sektion" +msgstr "EDGE_CROSSING felaktigt satt över samma sektion" #: cfgrtl.c:1907 #, gcc-internal-format, gfc-internal-format msgid "fallthru edge crosses section boundary (bb %i)" -msgstr "fall-igenom-båge korsar sektionsgräns (bb %i)" +msgstr "fall-igenom-bÃ¥ge korsar sektionsgräns (bb %i)" #: cfgrtl.c:1913 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "EH edge crosses section boundary (bb %i)" -msgstr "fall-igenom-båge korsar sektionsgräns (bb %i)" +msgstr "EH-bÃ¥ge korsar sektionsgräns (gb %i)" #: cfgrtl.c:1920 #, gcc-internal-format msgid "EDGE_CROSSING missing across section boundary" -msgstr "EDGE_CROSSING saknas över sektionsgräns" +msgstr "EDGE_CROSSING saknas över sektionsgräns" #: cfgrtl.c:1943 #, gcc-internal-format, gfc-internal-format @@ -16068,52 +16068,52 @@ msgstr "REG_EH_REGION-notering saknas i slutet av bb %i" #: cfgrtl.c:1948 #, gcc-internal-format, gfc-internal-format msgid "too many eh edges %i" -msgstr "för många eh-bågar %i" +msgstr "för mÃ¥nga eh-bÃ¥gar %i" #: cfgrtl.c:1956 #, gcc-internal-format, gfc-internal-format msgid "too many outgoing branch edges from bb %i" -msgstr "för många utgående bågar från bb %i" +msgstr "för mÃ¥nga utgÃ¥ende bÃ¥gar frÃ¥n bb %i" #: cfgrtl.c:1961 #, gcc-internal-format, gfc-internal-format msgid "fallthru edge after unconditional jump %i" -msgstr "fall igenom-båge efter ovillkorligt hopp %i" +msgstr "fall igenom-bÃ¥ge efter ovillkorligt hopp %i" #: cfgrtl.c:1966 #, gcc-internal-format, gfc-internal-format msgid "wrong number of branch edges after unconditional jump %i" -msgstr "fel antal förgreningsbågar efter ovillkorligt hopp %i" +msgstr "fel antal förgreningsbÃ¥gar efter ovillkorligt hopp %i" #: cfgrtl.c:1973 #, gcc-internal-format, gfc-internal-format msgid "wrong amount of branch edges after conditional jump %i" -msgstr "fel antal förgreningsbågar efter villkorligt hopp %i" +msgstr "fel antal förgreningsbÃ¥gar efter villkorligt hopp %i" #: cfgrtl.c:1979 #, gcc-internal-format, gfc-internal-format msgid "call edges for non-call insn in bb %i" -msgstr "anropsbågar för instruktion som inte är anrop i bb %i" +msgstr "anropsbÃ¥gar för instruktion som inte är anrop i bb %i" #: cfgrtl.c:1988 #, gcc-internal-format, gfc-internal-format msgid "abnormal edges for no purpose in bb %i" -msgstr "onormala bågar utan syfte i bb %i" +msgstr "onormala bÃ¥gar utan syfte i bb %i" #: cfgrtl.c:2000 #, gcc-internal-format, gfc-internal-format msgid "insn %d inside basic block %d but block_for_insn is NULL" -msgstr "instruktion %d inuti grundblock %d men block_for_inst är NULL" +msgstr "instruktion %d inuti grundblock %d men block_for_inst är NULL" #: cfgrtl.c:2004 #, gcc-internal-format, gfc-internal-format msgid "insn %d inside basic block %d but block_for_insn is %i" -msgstr "instruktion %d inuti grundblock %d men block_for_insn är %i" +msgstr "instruktion %d inuti grundblock %d men block_for_insn är %i" #: cfgrtl.c:2018 cfgrtl.c:2028 #, gcc-internal-format, gfc-internal-format msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" -msgstr "NOTE_INSN_BASIC_BLOC saknas för block %d" +msgstr "NOTE_INSN_BASIC_BLOC saknas för block %d" #: cfgrtl.c:2041 #, gcc-internal-format, gfc-internal-format @@ -16128,32 +16128,32 @@ msgstr "i grundblock %d:" #: cfgrtl.c:2103 cfgrtl.c:2193 #, gcc-internal-format, gfc-internal-format msgid "insn %d outside of basic blocks has non-NULL bb field" -msgstr "instruktion %d utanför grundblock har ett icke-NULL bb-fält" +msgstr "instruktion %d utanför grundblock har ett icke-NULL bb-fält" #: cfgrtl.c:2111 #, gcc-internal-format, gfc-internal-format msgid "end insn %d for block %d not found in the insn stream" -msgstr "end-instruktion %d för block %d finns inte i instruktionsströmmen" +msgstr "end-instruktion %d för block %d finns inte i instruktionsströmmen" #: cfgrtl.c:2124 #, gcc-internal-format, gfc-internal-format msgid "insn %d is in multiple basic blocks (%d and %d)" -msgstr "instruktion %d är i flera grundblock (%d och %d)" +msgstr "instruktion %d är i flera grundblock (%d och %d)" #: cfgrtl.c:2136 #, gcc-internal-format, gfc-internal-format msgid "head insn %d for block %d not found in the insn stream" -msgstr "huvudinstruktion %d för block %d finns inte i instruktionsströmmen" +msgstr "huvudinstruktion %d för block %d finns inte i instruktionsströmmen" #: cfgrtl.c:2153 #, gcc-internal-format, gfc-internal-format msgid "missing barrier after block %i" -msgstr "barriär saknas efter block %i" +msgstr "barriär saknas efter block %i" #: cfgrtl.c:2169 #, gcc-internal-format, gfc-internal-format msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" -msgstr "verify_flow_info: Felaktigt block för fall igenom %i->%i" +msgstr "verify_flow_info: Felaktigt block för fall igenom %i->%i" #: cfgrtl.c:2178 #, gcc-internal-format, gfc-internal-format @@ -16178,32 +16178,32 @@ msgstr "%D byter namn efter att ha refererats i assembler" #: cgraphunit.c:411 #, gcc-internal-format msgid "caller edge count is negative" -msgstr "antal anropande bågar är negativt" +msgstr "antal anropande bÃ¥gar är negativt" #: cgraphunit.c:416 #, gcc-internal-format msgid "caller edge frequency is negative" -msgstr "frekvensen för anropande båge är negativ" +msgstr "frekvensen för anropande bÃ¥ge är negativ" #: cgraphunit.c:421 #, gcc-internal-format msgid "caller edge frequency is too large" -msgstr "frekvensen anropande båge är för stor" +msgstr "frekvensen anropande bÃ¥ge är för stor" #: cgraphunit.c:437 #, gcc-internal-format, gfc-internal-format msgid "caller edge frequency %i does not match BB frequency %i" -msgstr "anropsbåges frekvens %i stämmer inte med GB-frekvens %i" +msgstr "anropsbÃ¥ges frekvens %i stämmer inte med GB-frekvens %i" #: cgraphunit.c:501 #, gcc-internal-format, gfc-internal-format msgid "aux field set for edge %s->%s" -msgstr "aux-fält satt för båge %s->%s" +msgstr "aux-fält satt för bÃ¥ge %s->%s" #: cgraphunit.c:508 #, gcc-internal-format msgid "execution count is negative" -msgstr "exekveringsräknare är negativ" +msgstr "exekveringsräknare är negativ" #: cgraphunit.c:513 #, gcc-internal-format @@ -16218,22 +16218,22 @@ msgstr "inline-klon som man tar adressen till" #: cgraphunit.c:523 #, gcc-internal-format msgid "inline clone is needed" -msgstr "inline-klon behövs" +msgstr "inline-klon behövs" #: cgraphunit.c:530 #, gcc-internal-format, gfc-internal-format msgid "aux field set for indirect edge from %s" -msgstr "aux-fält satt för indirekt båge från %s" +msgstr "aux-fält satt för indirekt bÃ¥ge frÃ¥n %s" #: cgraphunit.c:537 #, gcc-internal-format, gfc-internal-format msgid "An indirect edge from %s is not marked as indirect or has associated indirect_info, the corresponding statement is: " -msgstr "En indirektbåge från %s är inte markerad som indirekt eller har associerad indirect_info, motsvarande sats är: " +msgstr "En indirektbÃ¥ge frÃ¥n %s är inte markerad som indirekt eller har associerad indirect_info, motsvarande sats är: " #: cgraphunit.c:554 #, gcc-internal-format msgid "inlined_to pointer is wrong" -msgstr "inlined_to-pekare är fel" +msgstr "inlined_to-pekare är fel" #: cgraphunit.c:559 #, gcc-internal-format @@ -16243,17 +16243,17 @@ msgstr "flera inline-anropare" #: cgraphunit.c:566 #, gcc-internal-format msgid "inlined_to pointer set for noninline callers" -msgstr "inlined_to-pekare angiven för noninline-anropare" +msgstr "inlined_to-pekare angiven för noninline-anropare" #: cgraphunit.c:575 #, gcc-internal-format msgid "inlined_to pointer is set but no predecessors found" -msgstr "inlined_to-pekare är angivet men inga företrädare finns" +msgstr "inlined_to-pekare är angivet men inga företrädare finns" #: cgraphunit.c:580 #, gcc-internal-format msgid "inlined_to pointer refers to itself" -msgstr "inlined_to-pekare refererar till sig själv" +msgstr "inlined_to-pekare refererar till sig själv" #: cgraphunit.c:586 #, gcc-internal-format @@ -16273,7 +16273,7 @@ msgstr "noden har fel klonlista" #: cgraphunit.c:616 #, gcc-internal-format msgid "node is in clone list but it is not clone" -msgstr "noden är i klonlistan men den är inte en klon" +msgstr "noden är i klonlistan men den är inte en klon" #: cgraphunit.c:621 #, gcc-internal-format @@ -16283,7 +16283,7 @@ msgstr "noden har fel prev_clone-pekare" #: cgraphunit.c:626 #, gcc-internal-format msgid "double linked list of clones corrupted" -msgstr "dubbellänkad lista av kloner trasig" +msgstr "dubbellänkad lista av kloner trasig" #: cgraphunit.c:635 #, gcc-internal-format @@ -16293,17 +16293,17 @@ msgstr "icke-DECL_ONE_ONLY-nod i en same_comdat_group-lista" #: cgraphunit.c:640 #, gcc-internal-format msgid "node is alone in a comdat group" -msgstr "noden är ensam i en comdat-grupp" +msgstr "noden är ensam i en comdat-grupp" #: cgraphunit.c:647 #, gcc-internal-format msgid "same_comdat_group is not a circular list" -msgstr "same_comdat_group är inte en cirkulär lista" +msgstr "same_comdat_group är inte en cirkulär lista" #: cgraphunit.c:664 #, gcc-internal-format msgid "Alias has call edges" -msgstr "Alias har anropsbågar" +msgstr "Alias har anropsbÃ¥gar" #: cgraphunit.c:670 #, gcc-internal-format @@ -16313,7 +16313,7 @@ msgstr "Alias har icke-alias-referens" #: cgraphunit.c:675 #, gcc-internal-format msgid "Alias has more than one alias reference" -msgstr "Alias har mer än en aliasreferens" +msgstr "Alias har mer än en aliasreferens" #: cgraphunit.c:682 #, gcc-internal-format @@ -16323,12 +16323,12 @@ msgstr "Analyserat alias har ingen referens" #: cgraphunit.c:690 #, gcc-internal-format msgid "No edge out of thunk node" -msgstr "Ingen båge ut från dunknod" +msgstr "Ingen bÃ¥ge ut frÃ¥n dunknod" #: cgraphunit.c:695 #, gcc-internal-format msgid "More than one edge out of thunk node" -msgstr "Mer än en båge ut från en dunknod" +msgstr "Mer än en bÃ¥ge ut frÃ¥n en dunknod" #: cgraphunit.c:700 #, gcc-internal-format @@ -16343,27 +16343,27 @@ msgstr "delat anropssats:" #: cgraphunit.c:738 #, gcc-internal-format msgid "edge points to wrong declaration:" -msgstr "bågpekare till fel deklaration:" +msgstr "bÃ¥gpekare till fel deklaration:" #: cgraphunit.c:747 #, gcc-internal-format msgid "an indirect edge with unknown callee corresponding to a call_stmt with a known declaration:" -msgstr "ett indirekt båge med okänd anropsmål motsvarande ett call_stmt med en känd deklaration:" +msgstr "ett indirekt bÃ¥ge med okänd anropsmÃ¥l motsvarande ett call_stmt med en känd deklaration:" #: cgraphunit.c:757 #, gcc-internal-format msgid "missing callgraph edge for call stmt:" -msgstr "anropsgrafsbåge saknas för anropssats:" +msgstr "anropsgrafsbÃ¥ge saknas för anropssats:" #: cgraphunit.c:773 #, gcc-internal-format, gfc-internal-format msgid "edge %s->%s has no corresponding call_stmt" -msgstr "båge %s->%s har ingen motsvarande anropssats" +msgstr "bÃ¥ge %s->%s har ingen motsvarande anropssats" #: cgraphunit.c:785 #, gcc-internal-format, gfc-internal-format msgid "an indirect edge from %s has no corresponding call_stmt" -msgstr "en indirekt båge från %s har inget motsvarande call_stmt" +msgstr "en indirekt bÃ¥ge frÃ¥n %s har inget motsvarande call_stmt" #: cgraphunit.c:796 #, gcc-internal-format @@ -16373,37 +16373,37 @@ msgstr "verify_cgraph_node misslyckades" #: cgraphunit.c:940 #, gcc-internal-format msgid "%<weakref%> attribute should be accompanied with an %<alias%> attribute" -msgstr "attributet %<weakref%> skall åtföljas av ett attribut %<alias%>" +msgstr "attributet %<weakref%> skall Ã¥tföljas av ett attribut %<alias%>" #: cgraphunit.c:995 cgraphunit.c:1040 #, gcc-internal-format msgid "%<externally_visible%> attribute have effect only on public objects" -msgstr "attributet %<externally_visible%> har bara effekt på publika objekt" +msgstr "attributet %<externally_visible%> har bara effekt pÃ¥ publika objekt" #: cgraphunit.c:1004 #, gcc-internal-format msgid "%<weakref%> attribute ignored because function is defined" -msgstr "attributet %<weakref%> ignorerat för att funktionen är definierad" +msgstr "attributet %<weakref%> ignorerat för att funktionen är definierad" #: cgraphunit.c:1016 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "always_inline function might not be inlinable" -msgstr "Varna när en inline:ad funktion inte kan inline:as" +msgstr "always_inline-funktion kanske inte kan inline:as" #: cgraphunit.c:1050 #, gcc-internal-format msgid "%<weakref%> attribute ignored because variable is initialized" -msgstr "attributet %<weakref%> ignorerat för att variabeln är initierad" +msgstr "attributet %<weakref%> ignorerat för att variabeln är initierad" #: cgraphunit.c:1404 #, gcc-internal-format msgid "failed to reclaim unneeded function" -msgstr "misslyckades att återta funktion som inte behövs" +msgstr "misslyckades att Ã¥terta funktion som inte behövs" #: cgraphunit.c:1430 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "failed to reclaim unneeded functionin same comdat group" -msgstr "misslyckades att återta funktion som inte behövs" +msgstr "misslyckades att Ã¥terta funktion som inte behövs i samma comdat-grupp" #: cgraphunit.c:2233 #, gcc-internal-format @@ -16413,7 +16413,7 @@ msgstr "noder med ej frigjort minne funna" #: collect2.c:900 #, gcc-internal-format msgid "COLLECT_LTO_WRAPPER must be set" -msgstr "COLLECT_LTO_WRAPPER måste vara satt" +msgstr "COLLECT_LTO_WRAPPER mÃ¥ste vara satt" #: collect2.c:1231 #, gcc-internal-format @@ -16423,32 +16423,32 @@ msgstr "inga argument" #: collect2.c:1442 opts.c:786 #, gcc-internal-format msgid "LTO support has not been enabled in this configuration" -msgstr "LTO-stöd har inte aktiverats i denna konfiguration" +msgstr "LTO-stöd har inte aktiverats i denna konfiguration" #: collect2.c:1470 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "can't open %s: %m" -msgstr "det går inte att öppna %s: %m" +msgstr "det gÃ¥r inte att öppna %s: %m" #: collect2.c:1584 #, gcc-internal-format, gfc-internal-format msgid "unknown demangling style '%s'" -msgstr "okänd avmanglingsstil \"%s\"" +msgstr "okänd avmanglingsstil â€%sâ€" #: collect2.c:1680 collect2.c:1863 collect2.c:1898 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "fopen %s: %m" -msgstr "fopen %s" +msgstr "fopen %s: %m" #: collect2.c:1683 collect2.c:1868 collect2.c:1901 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "fclose %s: %m" -msgstr "fclose %s" +msgstr "fclose %s: %m" #: collect2.c:1965 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "can't get program status: %m" -msgstr "kan inte ta programstatus" +msgstr "kan inte ta programstatus: %m" #: collect2.c:1973 #, gcc-internal-format, gfc-internal-format @@ -16458,7 +16458,7 @@ msgstr "%s terminerade med signal %d [%s]%s" #: collect2.c:2034 #, gcc-internal-format, gfc-internal-format msgid "could not open response file %s" -msgstr "det gick inte att öppna svarsfilen %s" +msgstr "det gick inte att öppna svarsfilen %s" #: collect2.c:2039 #, gcc-internal-format, gfc-internal-format @@ -16468,12 +16468,12 @@ msgstr "det gick inte att skriva till svarsfilen %s" #: collect2.c:2044 #, gcc-internal-format, gfc-internal-format msgid "could not close response file %s" -msgstr "det gick inte att stänga svarsfilen %s" +msgstr "det gick inte att stänga svarsfilen %s" #: collect2.c:2077 #, gcc-internal-format, gfc-internal-format msgid "cannot find '%s'" -msgstr "kan inte hitta \"%s\"" +msgstr "kan inte hitta â€%sâ€" #: collect2.c:2081 collect2.c:2617 collect2.c:2813 gcc.c:2652 #, gcc-internal-format @@ -16488,12 +16488,12 @@ msgstr "%s: %m" #: collect2.c:2591 #, gcc-internal-format msgid "cannot find 'nm'" -msgstr "kan inte hitta \"nm\"" +msgstr "kan inte hitta â€nmâ€" #: collect2.c:2639 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "can't open nm output: %m" -msgstr "kan inte öppna nm-utdata" +msgstr "kan inte öppna nm-utdata: %m" #: collect2.c:2722 #, gcc-internal-format, gfc-internal-format @@ -16508,12 +16508,12 @@ msgstr "fini-funktion funnen i objekt %s" #: collect2.c:2788 #, gcc-internal-format msgid "cannot find 'ldd'" -msgstr "kan inte hitta \"ldd\"" +msgstr "kan inte hitta â€lddâ€" #: collect2.c:2834 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "can't open ldd output: %m" -msgstr "kan inte öppna ldd-utdata" +msgstr "kan inte öppna ldd-utdata: %m" #: collect2.c:2852 #, gcc-internal-format, gfc-internal-format @@ -16523,17 +16523,17 @@ msgstr "dynamiskt beroende %s inte funnet" #: collect2.c:2864 #, gcc-internal-format, gfc-internal-format msgid "unable to open dynamic dependency '%s'" -msgstr "kan inte öppna dynamiskt beroende \"%s\"" +msgstr "kan inte öppna dynamiskt beroende â€%sâ€" #: collect2.c:3025 #, gcc-internal-format, gfc-internal-format msgid "%s: not a COFF file" -msgstr "%s: är inte en COFF-fil" +msgstr "%s: är inte en COFF-fil" #: collect2.c:3155 #, gcc-internal-format, gfc-internal-format msgid "%s: cannot open as COFF file" -msgstr "%s: kan inte öppna som COFF-fil" +msgstr "%s: kan inte öppna som COFF-fil" #: collect2.c:3213 #, gcc-internal-format, gfc-internal-format @@ -16548,142 +16548,142 @@ msgstr "kan inte konvertera till en pekartyp" #: convert.c:389 #, gcc-internal-format msgid "pointer value used where a floating point value was expected" -msgstr "pekarvärde använd där ett flyttalsvärde förväntades" +msgstr "pekarvärde använd där ett flyttalsvärde förväntades" #: convert.c:393 #, gcc-internal-format msgid "aggregate value used where a float was expected" -msgstr "sammansatt värde använt där ett flyttalsvärde förväntades" +msgstr "sammansatt värde använt där ett flyttalsvärde förväntades" #: convert.c:418 #, gcc-internal-format msgid "conversion to incomplete type" -msgstr "konvertering till ofullständig typ" +msgstr "konvertering till ofullständig typ" #: convert.c:883 convert.c:959 #, gcc-internal-format msgid "can%'t convert between vector values of different size" -msgstr "det går inte att konvertera mellan vektorvärden av olika storlek" +msgstr "det gÃ¥r inte att konvertera mellan vektorvärden av olika storlek" #: convert.c:889 #, gcc-internal-format msgid "aggregate value used where an integer was expected" -msgstr "sammansatt värde användes där ett heltal förväntades" +msgstr "sammansatt värde användes där ett heltal förväntades" #: convert.c:939 #, gcc-internal-format msgid "pointer value used where a complex was expected" -msgstr "pekarvärde använt där ett komplext värde förväntades" +msgstr "pekarvärde använt där ett komplext värde förväntades" #: convert.c:943 #, gcc-internal-format msgid "aggregate value used where a complex was expected" -msgstr "sammansatt värde använt där ett komplext värde förväntades" +msgstr "sammansatt värde använt där ett komplext värde förväntades" #: convert.c:965 #, gcc-internal-format msgid "can%'t convert value to a vector" -msgstr "det går inte att konvertera värden till en vektor" +msgstr "det gÃ¥r inte att konvertera värden till en vektor" #: convert.c:1004 #, gcc-internal-format msgid "aggregate value used where a fixed-point was expected" -msgstr "sammansatt värde använt där ett fixdecimalvärde förväntades" +msgstr "sammansatt värde använt där ett fixdecimalvärde förväntades" #: coverage.c:188 #, gcc-internal-format msgid "%qs is not a gcov data file" -msgstr "%qs är inte en gcov-datafil" +msgstr "%qs är inte en gcov-datafil" #: coverage.c:199 #, gcc-internal-format msgid "%qs is version %q.*s, expected version %q.*s" -msgstr "%qs är version %q.*s, version %q.*s förväntades" +msgstr "%qs är version %q.*s, version %q.*s förväntades" #: coverage.c:275 coverage.c:284 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Profile data for function %u is corrupted" -msgstr "Profilinformation i %s är skadad" +msgstr "Profildata för funktion %u är trasig" #: coverage.c:276 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "checksum is (%x,%x) instead of (%x,%x)" -msgstr "kontrollsumma är %x istället för %x" +msgstr "kontrollsumma är (%x,%x) istället för (%x,%x)" #: coverage.c:285 #, gcc-internal-format, gfc-internal-format msgid "number of counters is %d instead of %d" -msgstr "antal räknare är %d istället för %d" +msgstr "antal räknare är %d istället för %d" #: coverage.c:291 #, gcc-internal-format, gfc-internal-format msgid "cannot merge separate %s counters for function %u" -msgstr "kan inte slå samman separata %s-räknare för funktionen %u" +msgstr "kan inte slÃ¥ samman separata %s-räknare för funktionen %u" #: coverage.c:310 #, gcc-internal-format msgid "%qs has overflowed" -msgstr "%qs har spillt över" +msgstr "%qs har spillt över" #: coverage.c:360 #, gcc-internal-format msgid "the control flow of function %qE does not match its profile data (counter %qs)" -msgstr "styrflödet i funktionen %qE stämmer inte med dess profildata (räknare %qs)" +msgstr "styrflödet i funktionen %qE stämmer inte med dess profildata (räknare %qs)" #: coverage.c:364 #, gcc-internal-format msgid "use -Wno-error=coverage-mismatch to tolerate the mismatch but performance may drop if the function is hot" -msgstr "använd -Wno-error=coverage-mismatch för att tolerera bristen på överensstämmelse men prestandan kan sjunka om funktionen är het" +msgstr "använd -Wno-error=coverage-mismatch för att tolerera bristen pÃ¥ överensstämmelse men prestandan kan sjunka om funktionen är het" #: coverage.c:370 #, gcc-internal-format msgid "coverage mismatch ignored" -msgstr "täckning som inte stämmer ignoreras" +msgstr "täckning som inte stämmer ignoreras" #: coverage.c:372 #, gcc-internal-format msgid "execution counts estimated" -msgstr "exekveringsräknare uppskattad" +msgstr "exekveringsräknare uppskattad" #: coverage.c:373 #, gcc-internal-format msgid "execution counts assumed to be zero" -msgstr "exekveringsräknare antas vara noll" +msgstr "exekveringsräknare antas vara noll" #: coverage.c:376 #, gcc-internal-format msgid "this can result in poorly optimized code" -msgstr "detta kan resultera i dåligt optimerad kod" +msgstr "detta kan resultera i dÃ¥ligt optimerad kod" #: coverage.c:384 #, gcc-internal-format msgid "source locations for function %qE have changed, the profile data may be out of date" -msgstr "källkodsplatser för funktionen %qE har ändrats, profildatan kan vara inaktuell" +msgstr "källkodsplatser för funktionen %qE har ändrats, profildatan kan vara inaktuell" #: coverage.c:602 #, gcc-internal-format msgid "error writing %qs" -msgstr "fel när %qs skrevs" +msgstr "fel när %qs skrevs" #: coverage.c:1098 #, gcc-internal-format, gfc-internal-format msgid "cannot open %s" -msgstr "kan inte öppna %s" +msgstr "kan inte öppna %s" #: cppspec.c:92 #, gcc-internal-format msgid "%qs is not a valid option to the preprocessor" -msgstr "%qs är inte en giltig flagga till preprocessorn" +msgstr "%qs är inte en giltig flagga till preprocessorn" #: cppspec.c:111 #, gcc-internal-format msgid "too many input files" -msgstr "för många indatafiler" +msgstr "för mÃ¥nga indatafiler" #: cprop.c:1729 gcse.c:3646 #, gcc-internal-format, gfc-internal-format msgid "%s: %d basic blocks and %d edges/basic block" -msgstr "%s: %d grundblock och %d bågar/grundblock" +msgstr "%s: %d grundblock och %d bÃ¥gar/grundblock" #: cprop.c:1742 gcse.c:3659 #, gcc-internal-format, gfc-internal-format @@ -16693,17 +16693,17 @@ msgstr "%s: %d grundblock och %d register" #: data-streamer-in.c:52 #, gcc-internal-format msgid "bytecode stream: string too long for the string table" -msgstr "bytekodström: för lång sträng för strängtabellen" +msgstr "bytekodström: för lÃ¥ng sträng för strängtabellen" #: data-streamer-in.c:83 #, gcc-internal-format msgid "bytecode stream: found non-null terminated string" -msgstr "bytekodström: hittade sträng som inte var null-terminerad" +msgstr "bytekodström: hittade sträng som inte var null-terminerad" #: dbgcnt.c:135 #, gcc-internal-format msgid "cannot find a valid counter:value pair:" -msgstr "kan inte hitta ett giltigt räknare:värde-par:" +msgstr "kan inte hitta ett giltigt räknare:värde-par:" #: dbgcnt.c:136 #, gcc-internal-format, gfc-internal-format @@ -16718,7 +16718,7 @@ msgstr " %s" #: dbxout.c:3363 #, gcc-internal-format msgid "common symbol debug info is not structured as symbol+offset" -msgstr "gemensam symbolfelsökningsinformation är inte strukturerad som symbol+avstånd" +msgstr "gemensam symbolfelsökningsinformation är inte strukturerad som symbol+avstÃ¥nd" #: diagnostic.c:899 #, gcc-internal-format, gfc-internal-format @@ -16728,7 +16728,7 @@ msgstr "i %s, vid %s:%d" #: dominance.c:1027 #, gcc-internal-format, gfc-internal-format msgid "dominator of %d status unknown" -msgstr "dominerare av %d har okänd status" +msgstr "dominerare av %d har okänd status" #: dominance.c:1034 #, gcc-internal-format, gfc-internal-format @@ -16738,12 +16738,12 @@ msgstr "dominerare av %d vara %d, inte %d" #: dwarf2out.c:1035 #, gcc-internal-format msgid "multiple EH personalities are supported only with assemblers supporting .cfi_personality directive" -msgstr "multipla EH-personligheter stöds endast med assemblerare som stödjer direktivet .cfi.personality." +msgstr "multipla EH-personligheter stöds endast med assemblerare som stödjer direktivet .cfi.personality." #: dwarf2out.c:10672 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "non-delegitimized UNSPEC %s (%d) found in variable location" -msgstr "odelegitimerad UNSPEC %d funnen på variabelplats" +msgstr "odelegitimerad UNSPEC %s (%d) funnen pÃ¥ variabelplats" #: emit-rtl.c:2541 #, gcc-internal-format @@ -16763,7 +16763,7 @@ msgstr "internt konsistensfel" #: emit-rtl.c:3676 #, gcc-internal-format msgid "ICE: emit_insn used where emit_jump_insn needed:\n" -msgstr "ICE: emit_insn använd där emit_jump_insn behövs:\n" +msgstr "ICE: emit_insn använd där emit_jump_insn behövs:\n" #: errors.c:133 #, gcc-internal-format, gfc-internal-format @@ -16773,52 +16773,52 @@ msgstr "avbrott i %s, vid %s:%d" #: except.c:2037 #, gcc-internal-format msgid "argument of %<__builtin_eh_return_regno%> must be constant" -msgstr "argumentet till %<__builtin_eh_return_regno%> måste vara konstant" +msgstr "argumentet till %<__builtin_eh_return_regno%> mÃ¥ste vara konstant" #: except.c:2174 #, gcc-internal-format msgid "__builtin_eh_return not supported on this target" -msgstr "__builtin_eh_return stöds inte på denna målarkitektur" +msgstr "__builtin_eh_return stöds inte pÃ¥ denna mÃ¥larkitektur" #: except.c:3239 except.c:3264 #, gcc-internal-format, gfc-internal-format msgid "region_array is corrupted for region %i" -msgstr "region_array är trasig för region %i" +msgstr "region_array är trasig för region %i" #: except.c:3252 except.c:3283 #, gcc-internal-format, gfc-internal-format msgid "lp_array is corrupted for lp %i" -msgstr "lp_array är trasig för region %i" +msgstr "lp_array är trasig för region %i" #: except.c:3269 #, gcc-internal-format, gfc-internal-format msgid "outer block of region %i is wrong" -msgstr "yttre block för region %i är fel" +msgstr "yttre block för region %i är fel" #: except.c:3274 #, gcc-internal-format, gfc-internal-format msgid "negative nesting depth of region %i" -msgstr "negativt nästningsdjup för region %i" +msgstr "negativt nästningsdjup för region %i" #: except.c:3288 #, gcc-internal-format, gfc-internal-format msgid "region of lp %i is wrong" -msgstr "region för lp %i är fel" +msgstr "region för lp %i är fel" #: except.c:3315 #, gcc-internal-format, gfc-internal-format msgid "tree list ends on depth %i" -msgstr "trädlista slutar på djup %i" +msgstr "trädlista slutar pÃ¥ djup %i" #: except.c:3320 #, gcc-internal-format msgid "region_array does not match region_tree" -msgstr "region_array stämmer inte med region_tree" +msgstr "region_array stämmer inte med region_tree" #: except.c:3325 #, gcc-internal-format msgid "lp_array does not match region_tree" -msgstr "lp_array stämmer inte med region_tree" +msgstr "lp_array stämmer inte med region_tree" #: except.c:3332 #, gcc-internal-format @@ -16828,37 +16828,37 @@ msgstr "verify_eh_tree misslyckades" #: explow.c:1444 #, gcc-internal-format msgid "stack limits not supported on this target" -msgstr "stackgränser stöds inte på denna målarkitektur" +msgstr "stackgränser stöds inte pÃ¥ denna mÃ¥larkitektur" #: expmed.c:1786 #, gcc-internal-format msgid "multiple accesses to volatile structure member because of packed attribute" -msgstr "flera åtkomster av flyktig postmedlem på grund av attributet packed" +msgstr "flera Ã¥tkomster av flyktig postmedlem pÃ¥ grund av attributet packed" #: expmed.c:1790 #, gcc-internal-format msgid "multiple accesses to volatile structure bitfield because of packed attribute" -msgstr "flera åtkomster av flyktigt postbitfält på grund av attributet packed" +msgstr "flera Ã¥tkomster av flyktigt postbitfält pÃ¥ grund av attributet packed" #: expmed.c:1800 #, gcc-internal-format msgid "mis-aligned access used for structure member" -msgstr "feljusterad åtkomst använd för postmedlem" +msgstr "feljusterad Ã¥tkomst använd för postmedlem" #: expmed.c:1803 #, gcc-internal-format msgid "mis-aligned access used for structure bitfield" -msgstr "feljusterad åtkomst använd för postbitfält" +msgstr "feljusterad Ã¥tkomst använd för postbitfält" #: expmed.c:1809 #, gcc-internal-format msgid "when a volatile object spans multiple type-sized locations, the compiler must choose between using a single mis-aligned access to preserve the volatility, or using multiple aligned accesses to avoid runtime faults; this code may fail at runtime if the hardware does not allow this access" -msgstr "när ett flyktigt objekt sträcker sig över flera typstora platser måste kompilatorn välja mellan att använda en enda feljusterad åtkomst för att bevara flyktigheten, eller använder flera justerade åtkomster för att undvika fel vid körtillfället; denna kod kan misslyckas vid körning om maskinvaran inte tillåter denna åtkomst" +msgstr "när ett flyktigt objekt sträcker sig över flera typstora platser mÃ¥ste kompilatorn välja mellan att använda en enda feljusterad Ã¥tkomst för att bevara flyktigheten, eller använder flera justerade Ã¥tkomster för att undvika fel vid körtillfället; denna kod kan misslyckas vid körning om maskinvaran inte tillÃ¥ter denna Ã¥tkomst" #: expr.c:7479 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "local frame unavailable (naked function?)" -msgstr "global registervariabel %qD använd i nästad funktion" +msgstr "lokal ram otillgänglig (naken funktion?)" #: expr.c:9951 #, gcc-internal-format @@ -16878,17 +16878,17 @@ msgstr "ogiltigt argument %qs till -fdebug-prefix-map" #: final.c:1575 #, gcc-internal-format msgid "the frame size of %wd bytes is larger than %wd bytes" -msgstr "ramstorleken på %wd byte är större än %wd byte" +msgstr "ramstorleken pÃ¥ %wd byte är större än %wd byte" #: final.c:4430 toplev.c:1421 tree-optimize.c:171 #, gcc-internal-format msgid "could not open final insn dump file %qs: %m" -msgstr "det gick inte att öppna slutgilgit instruktionsdumpfil %qs: %m" +msgstr "det gick inte att öppna slutgilgit instruktionsdumpfil %qs: %m" #: final.c:4483 tree-optimize.c:187 #, gcc-internal-format msgid "could not close final insn dump file %qs: %m" -msgstr "det gick inte att stänga slutgiltig instruktionsdumpfil %qs: %m" +msgstr "det gick inte att stänga slutgiltig instruktionsdumpfil %qs: %m" #: fixed-value.c:103 #, gcc-internal-format @@ -16898,72 +16898,72 @@ msgstr "stor fixdecimalskonstant implicit trunkerad till fixdecimaltyp" #: fold-const.c:661 #, gcc-internal-format msgid "assuming signed overflow does not occur when negating a division" -msgstr "antar att teckenspill inte förekommer vid negering av en division" +msgstr "antar att teckenspill inte förekommer vid negering av en division" #: fold-const.c:3456 fold-const.c:3468 #, gcc-internal-format, gfc-internal-format msgid "comparison is always %d due to width of bit-field" -msgstr "jämförelsen är alltid %d på grund av bredd på bitfält" +msgstr "jämförelsen är alltid %d pÃ¥ grund av bredd pÃ¥ bitfält" #: fold-const.c:4853 tree-ssa-reassoc.c:1819 #, gcc-internal-format msgid "assuming signed overflow does not occur when simplifying range test" -msgstr "antar att teckenspill inte förekommer vid förenkling av intervalltest" +msgstr "antar att teckenspill inte förekommer vid förenkling av intervalltest" #: fold-const.c:5289 fold-const.c:5303 #, gcc-internal-format, gfc-internal-format msgid "comparison is always %d" -msgstr "jämförelsen är alltid %d" +msgstr "jämförelsen är alltid %d" #: fold-const.c:5436 #, gcc-internal-format msgid "%<or%> of unmatched not-equal tests is always 1" -msgstr "%<or%> mellan omatchade olikhetstester är alltid 1" +msgstr "%<or%> mellan omatchade olikhetstester är alltid 1" #: fold-const.c:5441 #, gcc-internal-format msgid "%<and%> of mutually exclusive equal-tests is always 0" -msgstr "%<and%> mellan ömsesidigt uteslutande likhetstester är alltid 0" +msgstr "%<and%> mellan ömsesidigt uteslutande likhetstester är alltid 0" #: fold-const.c:8675 #, gcc-internal-format msgid "assuming signed overflow does not occur when reducing constant in comparison" -msgstr "antar att teckenspill inte förekommer vid reduktion av konstant i jämförelse" +msgstr "antar att teckenspill inte förekommer vid reduktion av konstant i jämförelse" #: fold-const.c:8840 #, gcc-internal-format msgid "assuming signed overflow does not occur when changing X +- C1 cmp C2 to X cmp C1 +- C2" -msgstr "antar att teckenspill inte förekommer vid förenkling av X ± K1 jmf K2 till X jmf K1 ± K2" +msgstr "antar att teckenspill inte förekommer vid förenkling av X ± K1 jmf K2 till X jmf K1 ± K2" #: fold-const.c:9103 #, gcc-internal-format msgid "assuming signed overflow does not occur when combining constants around a comparison" -msgstr "antar att teckenspill inte förekommer vid kombination av konstanter runt en jämförelse" +msgstr "antar att teckenspill inte förekommer vid kombination av konstanter runt en jämförelse" #: fold-const.c:14205 #, gcc-internal-format msgid "fold check: original tree changed by fold" -msgstr "vikningskontroll: originalträdet ändrat av vikning" +msgstr "vikningskontroll: originalträdet ändrat av vikning" #: function.c:252 #, gcc-internal-format msgid "total size of local objects too large" -msgstr "total storlek på lokala objekt är för stor" +msgstr "total storlek pÃ¥ lokala objekt är för stor" #: function.c:1732 gimplify.c:5155 #, gcc-internal-format msgid "impossible constraint in %<asm%>" -msgstr "omöjlig begränsning i %<asm%>" +msgstr "omöjlig begränsning i %<asm%>" #: function.c:3959 #, gcc-internal-format msgid "variable %q+D might be clobbered by %<longjmp%> or %<vfork%>" -msgstr "variabeln %q+D kan skrivas över av %<longjmp%> eller %<vfork%>" +msgstr "variabeln %q+D kan skrivas över av %<longjmp%> eller %<vfork%>" #: function.c:3980 #, gcc-internal-format msgid "argument %q+D might be clobbered by %<longjmp%> or %<vfork%>" -msgstr "argumentet %q+D kan skrivas över av %<longjmp%> eller %<vfork%>" +msgstr "argumentet %q+D kan skrivas över av %<longjmp%> eller %<vfork%>" #: function.c:4502 #, gcc-internal-format @@ -16973,7 +16973,7 @@ msgstr "funktionen returnerar ett aggregat" #: function.c:4896 #, gcc-internal-format msgid "unused parameter %q+D" -msgstr "oanvänd parameter %q+D" +msgstr "oanvänd parameter %q+D" #: gcc.c:1726 gcc.c:1746 #, gcc-internal-format, gfc-internal-format @@ -16988,17 +16988,17 @@ msgstr "specifikationers %%rename-syntax felaktig efter %ld tecken" #: gcc.c:1811 #, gcc-internal-format, gfc-internal-format msgid "specs %s spec was not found to be renamed" -msgstr "specifikationers %s-specifikation fanns inte när den skulle få nytt namn" +msgstr "specifikationers %s-specifikation fanns inte när den skulle fÃ¥ nytt namn" #: gcc.c:1818 #, gcc-internal-format msgid "%s: attempt to rename spec %qs to already defined spec %qs" -msgstr "%s: försök att byta namn på specifikation %qs till redan definierad specifikation %qs" +msgstr "%s: försök att byta namn pÃ¥ specifikation %qs till redan definierad specifikation %qs" #: gcc.c:1839 #, gcc-internal-format, gfc-internal-format msgid "specs unknown %% command after %ld characters" -msgstr "specifikationer okänt %%-kommando efter %ld tecken" +msgstr "specifikationer okänt %%-kommando efter %ld tecken" #: gcc.c:1850 gcc.c:1863 #, gcc-internal-format, gfc-internal-format @@ -17008,22 +17008,22 @@ msgstr "specifikationsfil felaktig efter %ld tecken" #: gcc.c:1915 #, gcc-internal-format msgid "spec file has no spec for linking" -msgstr "specfilen har ingen spec för länkning" +msgstr "specfilen har ingen spec för länkning" #: gcc.c:2444 #, gcc-internal-format msgid "system path %qs is not absolute" -msgstr "systemsökväg %qs är inte absolut" +msgstr "systemsökväg %qs är inte absolut" #: gcc.c:2529 #, gcc-internal-format msgid "-pipe not supported" -msgstr "-pipe stöds inte" +msgstr "-pipe stöds inte" #: gcc.c:2691 #, gcc-internal-format msgid "failed to get exit status: %m" -msgstr "misslyckades att få slutstatus: %m" +msgstr "misslyckades att fÃ¥ slutstatus: %m" #: gcc.c:2697 #, gcc-internal-format @@ -17038,12 +17038,12 @@ msgstr "%s (program %s)" #: gcc.c:3142 opts-common.c:986 opts-common.c:1058 #, gcc-internal-format msgid "unrecognized command line option %qs" -msgstr "okänd kommandoradsflagga %qs" +msgstr "okänd kommandoradsflagga %qs" #: gcc.c:3395 #, gcc-internal-format msgid "%qs is an unknown -save-temps option" -msgstr "%qs är en okänd flagga till -save-temps" +msgstr "%qs är en okänd flagga till -save-temps" #: gcc.c:3856 #, gcc-internal-format @@ -17058,37 +17058,37 @@ msgstr "%<-x %s%> efter sista indatafilen har ingen effekt" #: gcc.c:4109 #, gcc-internal-format msgid "unable to locate default linker script %qs in the library search paths" -msgstr "kan inte lokalisera standardlänkskriptet %qs i bilblioteksökvägarna" +msgstr "kan inte lokalisera standardlänkskriptet %qs i bilblioteksökvägarna" #: gcc.c:4312 #, gcc-internal-format msgid "switch %qs does not start with %<-%>" -msgstr "flaggan %qs börjar inte med %<-%>" +msgstr "flaggan %qs börjar inte med %<-%>" #: gcc.c:4315 #, gcc-internal-format msgid "spec-generated switch is just %<-%>" -msgstr "spec-genererad flagga är bara %<-%>" +msgstr "spec-genererad flagga är bara %<-%>" #: gcc.c:4406 #, gcc-internal-format, gfc-internal-format msgid "could not open temporary response file %s" -msgstr "det gick inte att öppna temporär svarsfil %s" +msgstr "det gick inte att öppna temporär svarsfil %s" #: gcc.c:4412 #, gcc-internal-format, gfc-internal-format msgid "could not write to temporary response file %s" -msgstr "det gick inte att skriva till temporär svarsfil %s" +msgstr "det gick inte att skriva till temporär svarsfil %s" #: gcc.c:4418 #, gcc-internal-format, gfc-internal-format msgid "could not close temporary response file %s" -msgstr "det gick inte att stänga temporär svarsfil %s" +msgstr "det gick inte att stänga temporär svarsfil %s" #: gcc.c:4541 #, gcc-internal-format msgid "spec %qs invalid" -msgstr "specifikationen %qs är ogiltig" +msgstr "specifikationen %qs är ogiltig" #: gcc.c:4690 #, gcc-internal-format @@ -17111,17 +17111,17 @@ msgstr "specifikation %qs har ogiltig %<%%x%c%>" #: gcc.c:5210 #, gcc-internal-format msgid "spec failure: %<%%*%> has not been initialized by pattern match" -msgstr "specifikationsfel: %<%%*%> har inte initierats av en mönstermatchning" +msgstr "specifikationsfel: %<%%*%> har inte initierats av en mönstermatchning" #: gcc.c:5253 #, gcc-internal-format msgid "spec failure: unrecognized spec option %qc" -msgstr "specifikationsfel: okänd specifikationsflagga %qc" +msgstr "specifikationsfel: okänd specifikationsflagga %qc" #: gcc.c:5313 #, gcc-internal-format msgid "unknown spec function %qs" -msgstr "okänd specifikationsfunktion %qs" +msgstr "okänd specifikationsfunktion %qs" #: gcc.c:5331 #, gcc-internal-format @@ -17147,27 +17147,27 @@ msgstr "felaktiga specifikationsfunktionsargument" #: gcc.c:5647 #, gcc-internal-format msgid "braced spec %qs is invalid at %qc" -msgstr "klammerspecifikation %qs är ogiltig vid %qc" +msgstr "klammerspecifikation %qs är ogiltig vid %qc" #: gcc.c:5735 #, gcc-internal-format msgid "braced spec body %qs is invalid" -msgstr "klammerspecifikationskropp %qs är ogiltig" +msgstr "klammerspecifikationskropp %qs är ogiltig" #: gcc.c:5984 #, gcc-internal-format, gfc-internal-format msgid "%s: could not determine length of compare-debug file %s" -msgstr "%s: det gick inte att avgöra längden på compare-debug-filen %s" +msgstr "%s: det gick inte att avgöra längden pÃ¥ compare-debug-filen %s" #: gcc.c:5995 #, gcc-internal-format, gfc-internal-format msgid "%s: -fcompare-debug failure (length)" -msgstr "%s: -fcompare-debug misslyckades (längd)" +msgstr "%s: -fcompare-debug misslyckades (längd)" #: gcc.c:6005 gcc.c:6046 #, gcc-internal-format, gfc-internal-format msgid "%s: could not open compare-debug file %s" -msgstr "%s: det gick inte att öppna compare-debug-filen %s" +msgstr "%s: det gick inte att öppna compare-debug-filen %s" #: gcc.c:6025 gcc.c:6062 #, gcc-internal-format, gfc-internal-format @@ -17182,24 +17182,24 @@ msgstr "atexit misslyckades" #: gcc.c:6281 #, gcc-internal-format msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC" -msgstr "spec-fel: mer än ett argument till SYSROOT_SUFFIX_SPEC" +msgstr "spec-fel: mer än ett argument till SYSROOT_SUFFIX_SPEC" #: gcc.c:6304 #, gcc-internal-format msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC" -msgstr "spec-fel: mer än ett argument till SYSROOT_HEADERS_SUFFIX_SPEC" +msgstr "spec-fel: mer än ett argument till SYSROOT_HEADERS_SUFFIX_SPEC" #: gcc.c:6466 #, gcc-internal-format msgid "unrecognized option %<-%s%>" -msgstr "okänd flagga %<-%s%>" +msgstr "okänd flagga %<-%s%>" #. The error status indicates that only one set of fixed #. headers should be built. #: gcc.c:6543 #, gcc-internal-format msgid "not configured with sysroot headers suffix" -msgstr "ej konfigurerad med suffix för sysroot-huvuden" +msgstr "ej konfigurerad med suffix för sysroot-huvuden" #: gcc.c:6626 #, gcc-internal-format @@ -17209,12 +17209,12 @@ msgstr "inga indatafiler" #: gcc.c:6675 #, gcc-internal-format msgid "cannot specify -o with -c, -S or -E with multiple files" -msgstr "det går inte att ange -o med -c, -S eller -E med flera filer" +msgstr "det gÃ¥r inte att ange -o med -c, -S eller -E med flera filer" #: gcc.c:6705 #, gcc-internal-format, gfc-internal-format msgid "%s: %s compiler not installed on this system" -msgstr "%s: kompilatorn %s är inte installerad på detta system" +msgstr "%s: kompilatorn %s är inte installerad pÃ¥ detta system" #: gcc.c:6727 #, gcc-internal-format @@ -17229,47 +17229,47 @@ msgstr "under omkompilering med -fcompare-debug" #: gcc.c:6752 #, gcc-internal-format msgid "comparing final insns dumps" -msgstr "jämför slutliga instruktionsdumpar" +msgstr "jämför slutliga instruktionsdumpar" #: gcc.c:6853 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "-fuse-linker-plugin, but %s not found" -msgstr "-fuse-linker-plugin, men" +msgstr "-fuse-linker-plugin, men %s inte funnen" #: gcc.c:6883 #, gcc-internal-format, gfc-internal-format msgid "%s: linker input file unused because linking not done" -msgstr "%s: infil till länkaren oanvänd eftersom ingen länkning gjordes" +msgstr "%s: infil till länkaren oanvänd eftersom ingen länkning gjordes" #: gcc.c:6924 #, gcc-internal-format, gfc-internal-format msgid "language %s not recognized" -msgstr "språk %s känns inte igen" +msgstr "sprÃ¥k %s känns inte igen" #: gcc.c:7150 #, gcc-internal-format msgid "multilib spec %qs is invalid" -msgstr "multilib-specifikation %qs är ogiltig" +msgstr "multilib-specifikation %qs är ogiltig" #: gcc.c:7342 #, gcc-internal-format msgid "multilib exclusions %qs is invalid" -msgstr "multilib-undantag %qs är ogiltiga" +msgstr "multilib-undantag %qs är ogiltiga" #: gcc.c:7400 gcc.c:7541 #, gcc-internal-format msgid "multilib select %qs is invalid" -msgstr "multilib-val %qs är ogiltigt" +msgstr "multilib-val %qs är ogiltigt" #: gcc.c:7579 #, gcc-internal-format msgid "multilib exclusion %qs is invalid" -msgstr "multilib-undantag %qs är ogiltigt" +msgstr "multilib-undantag %qs är ogiltigt" #: gcc.c:7785 #, gcc-internal-format msgid "environment variable %qs not defined" -msgstr "omgivningsvariabeln %qs är inte definierad" +msgstr "omgivningsvariabeln %qs är inte definierad" #: gcc.c:7897 gcc.c:7902 #, gcc-internal-format @@ -17279,37 +17279,37 @@ msgstr "ogiltigt versionsnummer %qs" #: gcc.c:7945 #, gcc-internal-format, gfc-internal-format msgid "too few arguments to %%:version-compare" -msgstr "för få argument till %%:version-compare" +msgstr "för fÃ¥ argument till %%:version-compare" #: gcc.c:7951 #, gcc-internal-format, gfc-internal-format msgid "too many arguments to %%:version-compare" -msgstr "för många argument till %%:version-compare" +msgstr "för mÃ¥nga argument till %%:version-compare" #: gcc.c:7992 #, gcc-internal-format msgid "unknown operator %qs in %%:version-compare" -msgstr "okänd operator %qs i %%:version-compare" +msgstr "okänd operator %qs i %%:version-compare" #: gcc.c:8115 #, gcc-internal-format, gfc-internal-format msgid "too many arguments to %%:compare-debug-dump-opt" -msgstr "för många argument till %%:comparedebug-dump-opt" +msgstr "för mÃ¥nga argument till %%:comparedebug-dump-opt" #: gcc.c:8183 #, gcc-internal-format, gfc-internal-format msgid "too many arguments to %%:compare-debug-self-opt" -msgstr "för många argument till %%:compare-debug-self-opt" +msgstr "för mÃ¥nga argument till %%:compare-debug-self-opt" #: gcc.c:8218 #, gcc-internal-format, gfc-internal-format msgid "too few arguments to %%:compare-debug-auxbase-opt" -msgstr "för få argument till %%:compare-debug-auxbase-opt" +msgstr "för fÃ¥ argument till %%:compare-debug-auxbase-opt" #: gcc.c:8221 #, gcc-internal-format, gfc-internal-format msgid "too many arguments to %%:compare-debug-auxbase-opt" -msgstr "för många argument till %%:compare-debug-auxbase-opt" +msgstr "för mÃ¥nga argument till %%:compare-debug-auxbase-opt" #: gcc.c:8228 #, gcc-internal-format, gfc-internal-format @@ -17326,7 +17326,7 @@ msgstr "kan inte skriva PCH-fil: %m" #: ggc-common.c:561 config/i386/host-cygwin.c:55 #, gcc-internal-format msgid "can%'t get position in PCH file: %m" -msgstr "kan inte avgöra position i PCH-fil: %m" +msgstr "kan inte avgöra position i PCH-fil: %m" #: ggc-common.c:571 #, gcc-internal-format @@ -17337,17 +17337,17 @@ msgstr "kan inte skriva utfyllnad till PCH-fil: %m" #: ggc-common.c:654 ggc-common.c:657 ggc-page.c:2436 ggc-zone.c:2465 #, gcc-internal-format msgid "can%'t read PCH file: %m" -msgstr "kan inte läsa PCH-fil: %m" +msgstr "kan inte läsa PCH-fil: %m" #: ggc-common.c:649 #, gcc-internal-format msgid "had to relocate PCH" -msgstr "behövde omlokalisera PCH" +msgstr "behövde omlokalisera PCH" #: ggc-page.c:1648 #, gcc-internal-format msgid "open /dev/zero: %m" -msgstr "öppna /dev/zero: %m" +msgstr "öppna /dev/zero: %m" #: ggc-page.c:2324 ggc-page.c:2330 #, gcc-internal-format @@ -17357,67 +17357,67 @@ msgstr "kan inte skriva PCH-fil" #: ggc-zone.c:2428 ggc-zone.c:2439 #, gcc-internal-format msgid "can%'t seek PCH file: %m" -msgstr "kan inte söka i PCH-fil: %m" +msgstr "kan inte söka i PCH-fil: %m" #: gimple-streamer-in.c:187 #, gcc-internal-format msgid "use of type %<%E%> with two mismatching declarations at field %<%E%>" -msgstr "användning av typen %<%E%> med två deklarationer vid fält %<%E%> som inte stämmer överens" +msgstr "användning av typen %<%E%> med tvÃ¥ deklarationer vid fält %<%E%> som inte stämmer överens" #: gimple-streamer-in.c:193 #, gcc-internal-format msgid "original type declared here" -msgstr "orginaltypen är deklarerad här" +msgstr "orginaltypen är deklarerad här" #: gimple-streamer-in.c:195 #, gcc-internal-format msgid "field in mismatching type declared here" -msgstr "fält i typ som inte stämmer överens deklareras här" +msgstr "fält i typ som inte stämmer överens deklareras här" #: gimple-streamer-in.c:201 #, gcc-internal-format msgid "type of field declared here" -msgstr "typen på fältet är deklarerad här" +msgstr "typen pÃ¥ fältet är deklarerad här" #: gimple-streamer-in.c:208 #, gcc-internal-format msgid "type of mismatching field declared here" -msgstr "typen på fältet som inte stämmer är deklarerad här" +msgstr "typen pÃ¥ fältet som inte stämmer är deklarerad här" #: gimple-streamer-in.c:241 #, gcc-internal-format, gfc-internal-format msgid "bytecode stream: unknown GIMPLE statement tag %s" -msgstr "bytekodström: okänd GIMPLE-satstagg %s" +msgstr "bytekodström: okänd GIMPLE-satstagg %s" #: gimple.c:1192 #, gcc-internal-format, gfc-internal-format msgid "gimple check: expected %s(%s), have %s(%s) in %s, at %s:%d" -msgstr "gimple-kontroll: %s(%s) förväntades, har %s(%s) i %s, vid %s:%d" +msgstr "gimple-kontroll: %s(%s) förväntades, har %s(%s) i %s, vid %s:%d" #: gimplify.c:2510 #, gcc-internal-format msgid "using result of function returning %<void%>" -msgstr "använder resultat från funktion som returnerar %<void%>" +msgstr "använder resultat frÃ¥n funktion som returnerar %<void%>" #: gimplify.c:5040 #, gcc-internal-format, gfc-internal-format msgid "invalid lvalue in asm output %d" -msgstr "ogiltigt l-värde i asm-utdata %d" +msgstr "ogiltigt l-värde i asm-utdata %d" #: gimplify.c:5156 #, gcc-internal-format, gfc-internal-format msgid "non-memory input %d must stay in memory" -msgstr "icke-minnesindata %d måste stanna i minnet" +msgstr "icke-minnesindata %d mÃ¥ste stanna i minnet" #: gimplify.c:5178 #, gcc-internal-format, gfc-internal-format msgid "memory input %d is not directly addressable" -msgstr "minnesindata %d är inte direkt adresserbar" +msgstr "minnesindata %d är inte direkt adresserbar" #: gimplify.c:5673 #, gcc-internal-format msgid "threadprivate variable %qE used in untied task" -msgstr "trådprivat variabel %qE använd i obunden uppgift" +msgstr "trÃ¥dprivat variabel %qE använd i obunden uppgift" #: gimplify.c:5675 gimplify.c:5737 #, gcc-internal-format @@ -17442,7 +17442,7 @@ msgstr "instansvariabel %qE skall vara privat" #: gimplify.c:5858 #, gcc-internal-format msgid "iteration variable %qE should not be firstprivate" -msgstr "iterationsvariabel %qE får inte vara firstprivate" +msgstr "iterationsvariabel %qE fÃ¥r inte vara firstprivate" #: gimplify.c:5861 #, gcc-internal-format @@ -17452,7 +17452,7 @@ msgstr "iterationsvariabel %qE skall inte vara reduction" #: gimplify.c:6024 #, gcc-internal-format msgid "%s variable %qE is private in outer context" -msgstr "%s-variabel %qE är privat i yttre sammanhang" +msgstr "%s-variabel %qE är privat i yttre sammanhang" #: gimplify.c:7778 #, gcc-internal-format @@ -17462,67 +17462,67 @@ msgstr "gimplification misslyckades" #: godump.c:1214 #, gcc-internal-format msgid "could not close Go dump file: %m" -msgstr "det gick inte att stänga Go-dump-filen: %m" +msgstr "det gick inte att stänga Go-dump-filen: %m" #: godump.c:1226 #, gcc-internal-format msgid "could not open Go dump file %qs: %m" -msgstr "det gick inte att öppna Go-dump-filen %qs: %m" +msgstr "det gick inte att öppna Go-dump-filen %qs: %m" #: graph.c:411 toplev.c:1531 java/jcf-parse.c:1751 java/jcf-parse.c:1889 #: objc/objc-act.c:449 #, gcc-internal-format msgid "can%'t open %s: %m" -msgstr "det går inte att öppna %s: %m" +msgstr "det gÃ¥r inte att öppna %s: %m" #: graphite-clast-to-gimple.c:1339 graphite-poly.c:691 toplev.c:930 #: toplev.c:1133 #, gcc-internal-format msgid "can%'t open %s for writing: %m" -msgstr "det går inte att öppna %s för skrivning: %m" +msgstr "det gÃ¥r inte att öppna %s för skrivning: %m" #: graphite-poly.c:593 #, gcc-internal-format msgid "the file is not in OpenScop format" -msgstr "filen är inte i OpenScop-format" +msgstr "filen är inte i OpenScop-format" #: graphite-poly.c:604 #, gcc-internal-format msgid "the language is not recognized" -msgstr "språket känns inte igen" +msgstr "sprÃ¥ket känns inte igen" #: graphite-poly.c:615 #, gcc-internal-format msgid "parameters number in the scop file is different from the internal scop parameter number" -msgstr "parameternummer i scop-filen skiljer sig från de interna scop-parameternumren" +msgstr "parameternummer i scop-filen skiljer sig frÃ¥n de interna scop-parameternumren" #: graphite-poly.c:628 #, gcc-internal-format msgid "number of statements in the OpenScop file does not match the graphite internal statements number" -msgstr "antal satser i OpenScop-filen stämmer inte med graphites interna satsantal" +msgstr "antal satser i OpenScop-filen stämmer inte med graphites interna satsantal" #: graphite-poly.c:719 #, gcc-internal-format msgid "can%'t open %s for reading: %m" -msgstr "det går inte att öppna %s för läsning: %m" +msgstr "det gÃ¥r inte att öppna %s för läsning: %m" #: graphite-poly.c:746 #, gcc-internal-format, gfc-internal-format msgid "the graphite file read for scop %d does not contain a legal transform" -msgstr "läsningen av graphite-filen för scop %d innehåller inte en giltig transform" +msgstr "läsningen av graphite-filen för scop %d innehÃ¥ller inte en giltig transform" #: graphite.c:290 #, gcc-internal-format msgid "Graphite loop optimizations cannot be used" -msgstr "Graphite-slingoptimeringar kan inte användas" +msgstr "Graphite-slingoptimeringar kan inte användas" #. Fatal error here. We do not want to support compiling ltrans units #. with different version of compiler or different flags than the WPA #. unit, so this should never happen. #: ipa-inline-analysis.c:3122 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ipa inline summary is missing in input file" -msgstr "ipa-referenssammanfattning saknas i ltrans-enhet" +msgstr "ipa-inline-sammanfattning saknas i indatafil" #. Fatal error here. We do not want to support compiling ltrans units with #. different version of compiler or different flags than the WPA unit, so @@ -17535,118 +17535,118 @@ msgstr "ipa-referenssammanfattning saknas i ltrans-enhet" #: ira.c:1821 ira.c:1834 ira.c:1848 #, gcc-internal-format, gfc-internal-format msgid "%s cannot be used in asm here" -msgstr "%s kan inte användas i en asm här" +msgstr "%s kan inte användas i en asm här" #: lto-cgraph.c:1010 #, gcc-internal-format, gfc-internal-format msgid "bytecode stream: found multiple instances of cgraph node %d" -msgstr "bytekodström: hittade multipla instanser av cgraph-nod %d" +msgstr "bytekodström: hittade multipla instanser av cgraph-nod %d" #: lto-cgraph.c:1147 #, gcc-internal-format msgid "bytecode stream: no caller found while reading edge" -msgstr "bytekodström: ingen anropare funnen när båge lästes" +msgstr "bytekodström: ingen anropare funnen när bÃ¥ge lästes" #: lto-cgraph.c:1153 #, gcc-internal-format msgid "bytecode stream: no callee found while reading edge" -msgstr "bytekodström: ingen anropad funnen när båge lästes" +msgstr "bytekodström: ingen anropad funnen när bÃ¥ge lästes" #: lto-cgraph.c:1217 #, gcc-internal-format msgid "bytecode stream: found empty cgraph node" -msgstr "bytekodström: tom cgraph-nod funnen" +msgstr "bytekodström: tom cgraph-nod funnen" #: lto-cgraph.c:1382 #, gcc-internal-format, gfc-internal-format msgid "At most %i profile runs is supported. Perhaps corrupted profile?" -msgstr "Som mest %i profilkörningar stödjs. Kanske en skadad profil?" +msgstr "Som mest %i profilkörningar stödjs. Kanske en skadad profil?" #: lto-cgraph.c:1430 #, gcc-internal-format, gfc-internal-format msgid "Profile information in %s corrupted" -msgstr "Profilinformation i %s är skadad" +msgstr "Profilinformation i %s är skadad" #: lto-cgraph.c:1465 #, gcc-internal-format, gfc-internal-format msgid "cannot find LTO cgraph in %s" -msgstr "det går inte att hitta LTO-cgraph %s" +msgstr "det gÃ¥r inte att hitta LTO-cgraph %s" #: lto-cgraph.c:1475 #, gcc-internal-format, gfc-internal-format msgid "cannot find LTO varpool in %s" -msgstr "det går inte att hitta LTO-varpool %s" +msgstr "det gÃ¥r inte att hitta LTO-varpool %s" #: lto-cgraph.c:1483 #, gcc-internal-format, gfc-internal-format msgid "cannot find LTO section refs in %s" -msgstr "det går inte att hitta LTO-avsnittsreferenser i %s" +msgstr "det gÃ¥r inte att hitta LTO-avsnittsreferenser i %s" #: lto-compress.c:189 lto-compress.c:197 lto-compress.c:218 lto-compress.c:279 #: lto-compress.c:287 lto-compress.c:308 #, gcc-internal-format, gfc-internal-format msgid "compressed stream: %s" -msgstr "komprimerad ström: %s" +msgstr "komprimerad ström: %s" #: lto-section-in.c:423 #, gcc-internal-format, gfc-internal-format msgid "bytecode stream: trying to read %d bytes after the end of the input buffer" -msgstr "bytekodström: försöker läsa %d byte efter slutet på indatabufferten" +msgstr "bytekodström: försöker läsa %d byte efter slutet pÃ¥ indatabufferten" #: lto-section-in.c:433 #, gcc-internal-format, gfc-internal-format msgid "%s out of range: Range is %i to %i, value is %i" -msgstr "%s utanför tillåtet intervall: intervallet är %i till %i, värdet är %i" +msgstr "%s utanför tillÃ¥tet intervall: intervallet är %i till %i, värdet är %i" #: lto-streamer-in.c:77 #, gcc-internal-format, gfc-internal-format msgid "bytecode stream: unexpected tag %s" -msgstr "bytekodström: oväntad tagg %s" +msgstr "bytekodström: oväntad tagg %s" #: lto-streamer-out.c:324 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "tree code %qs is not supported in LTO streams" -msgstr "trädkod %qs stöds inte i gimple-strömmar" +msgstr "trädkod %qs stöds inte i LTO-strömmar" #: lto-streamer.c:163 #, gcc-internal-format, gfc-internal-format msgid "bytecode stream: unexpected LTO section %s" -msgstr "bytekodström: oväntad LTO-sektion %s" +msgstr "bytekodström: oväntad LTO-sektion %s" #: lto-streamer.c:380 #, gcc-internal-format, gfc-internal-format msgid "bytecode stream generated with LTO version %d.%d instead of the expected %d.%d" -msgstr "bytkodström genererad med LTO-version %d.%d istället för den förväntade %d.%d" +msgstr "bytkodström genererad med LTO-version %d.%d istället för den förväntade %d.%d" #: lto-symtab.c:474 #, gcc-internal-format msgid "%qD has already been defined" -msgstr "%qD är redan definierad" +msgstr "%qD är redan definierad" #: lto-symtab.c:476 #, gcc-internal-format msgid "previously defined here" -msgstr "tidigare definition här" +msgstr "tidigare definition här" #: lto-symtab.c:557 #, gcc-internal-format msgid "type of %qD does not match original declaration" -msgstr "typen på %qD stämmer inte med orginaldeklarationen" +msgstr "typen pÃ¥ %qD stämmer inte med orginaldeklarationen" #: lto-symtab.c:564 #, gcc-internal-format msgid "alignment of %qD is bigger than original declaration" -msgstr "justering av %qD är större än orginaldeklarationen" +msgstr "justering av %qD är större än orginaldeklarationen" #: lto-symtab.c:570 lto-symtab.c:678 #, gcc-internal-format msgid "previously declared here" -msgstr "tidigare deklarerad här" +msgstr "tidigare deklarerad här" #: lto-symtab.c:603 #, gcc-internal-format msgid "multiple prevailing defs for %qE" -msgstr "flera gällande definitioner för %qE" +msgstr "flera gällande definitioner för %qE" #: lto-symtab.c:661 #, gcc-internal-format @@ -17661,53 +17661,53 @@ msgstr "funktionen %qD omdeklarerad som en variabel" #: omp-low.c:1834 #, gcc-internal-format msgid "barrier region may not be closely nested inside of work-sharing, critical, ordered, master or explicit task region" -msgstr "barriärregion får inte vara nära innesluten inuti arbetsdelande, kritisk, ordnad, huvud- eller explicit uppgiftsregion" +msgstr "barriärregion fÃ¥r inte vara nära innesluten inuti arbetsdelande, kritisk, ordnad, huvud- eller explicit uppgiftsregion" #: omp-low.c:1839 #, gcc-internal-format msgid "work-sharing region may not be closely nested inside of work-sharing, critical, ordered, master or explicit task region" -msgstr "arbetsdelande region får inte vara nära innesluten inuti arbetsdelande, kritisk, ordnad, huvud- eller explicit uppgiftsregion" +msgstr "arbetsdelande region fÃ¥r inte vara nära innesluten inuti arbetsdelande, kritisk, ordnad, huvud- eller explicit uppgiftsregion" #: omp-low.c:1857 #, gcc-internal-format msgid "master region may not be closely nested inside of work-sharing or explicit task region" -msgstr "huvudregion får inte vara nära innesluten inuti arbetsdelande eller explicit uppgiftsregion" +msgstr "huvudregion fÃ¥r inte vara nära innesluten inuti arbetsdelande eller explicit uppgiftsregion" #: omp-low.c:1872 #, gcc-internal-format msgid "ordered region may not be closely nested inside of critical or explicit task region" -msgstr "ordnad region får inte vara nära innesluten inuti kritisk eller explicit uppgiftsregion" +msgstr "ordnad region fÃ¥r inte vara nära innesluten inuti kritisk eller explicit uppgiftsregion" #: omp-low.c:1878 #, gcc-internal-format msgid "ordered region must be closely nested inside a loop region with an ordered clause" -msgstr "ordnad region måste vara nära innesluten inuti en slinga med en ordnad klausul" +msgstr "ordnad region mÃ¥ste vara nära innesluten inuti en slinga med en ordnad klausul" #: omp-low.c:1893 #, gcc-internal-format msgid "critical region may not be nested inside a critical region with the same name" -msgstr "kritisk region får inte vara innesluten inuti en kritisk region med samma namn" +msgstr "kritisk region fÃ¥r inte vara innesluten inuti en kritisk region med samma namn" #: omp-low.c:7011 cp/decl.c:2880 cp/parser.c:9853 cp/parser.c:9873 #, gcc-internal-format msgid "invalid exit from OpenMP structured block" -msgstr "ogiltig utgång från OpenMP strukturerat block" +msgstr "ogiltig utgÃ¥ng frÃ¥n OpenMP strukturerat block" #: omp-low.c:7013 omp-low.c:7018 #, gcc-internal-format msgid "invalid entry to OpenMP structured block" -msgstr "ogiltig ingång till OpenMP strukturerat block" +msgstr "ogiltig ingÃ¥ng till OpenMP strukturerat block" #. Otherwise, be vague and lazy, but efficient. #: omp-low.c:7021 #, gcc-internal-format msgid "invalid branch to/from an OpenMP structured block" -msgstr "ogiltig gren till/från OpenMP-strukturerat block" +msgstr "ogiltig gren till/frÃ¥n OpenMP-strukturerat block" #: opts-common.c:997 #, gcc-internal-format msgid "command line option %qs is not supported by this configuration" -msgstr "kommandoradsflaggan %qs stöds inte av denna konfiguration" +msgstr "kommandoradsflaggan %qs stöds inte av denna konfiguration" #: opts-common.c:1007 #, gcc-internal-format @@ -17722,93 +17722,93 @@ msgstr "argumentet till %qs skall vara ett ickenegativt heltal" #: opts-common.c:1028 #, gcc-internal-format msgid "unrecognized argument in option %qs" -msgstr "okänt argument till flaggan %qs" +msgstr "okänt argument till flaggan %qs" #: opts-common.c:1044 #, gcc-internal-format msgid "valid arguments to %qs are: %s" -msgstr "giltiga argument till %qs är: %s" +msgstr "giltiga argument till %qs är: %s" #: opts-global.c:102 #, gcc-internal-format msgid "command line option %qs is valid for the driver but not for %s" -msgstr "kommandoradsflaggan %qs är giltig för drivrutinen men inte för %s" +msgstr "kommandoradsflaggan %qs är giltig för drivrutinen men inte för %s" #. Eventually this should become a hard error IMO. #: opts-global.c:108 #, gcc-internal-format msgid "command line option %qs is valid for %s but not for %s" -msgstr "kommandoradsflaggan %qs är giltig för %s men inte för %s" +msgstr "kommandoradsflaggan %qs är giltig för %s men inte för %s" #: opts-global.c:139 #, gcc-internal-format, gfc-internal-format msgid "unrecognized command line option \"%s\"" -msgstr "okänd kommandoradsflagga \"%s\"" +msgstr "okänd kommandoradsflagga â€%sâ€" #: opts-global.c:351 #, gcc-internal-format msgid "unrecognized command line option %<-fdump-%s%>" -msgstr "okänd kommandoradsflagga %<-fdump-%s%>" +msgstr "okänd kommandoradsflagga %<-fdump-%s%>" #: opts-global.c:371 opts-global.c:379 #, gcc-internal-format msgid "plugin support is disabled; configure with --enable-plugin" -msgstr "stöd för insticksmoduler är avaktiverat. Konfigurera med --enable-plugin" +msgstr "stöd för insticksmoduler är avaktiverat. Konfigurera med --enable-plugin" #: opts-global.c:403 #, gcc-internal-format msgid "unrecognized register name %qs" -msgstr "okänt registernamn %qs" +msgstr "okänt registernamn %qs" #: opts.c:91 #, gcc-internal-format msgid "argument %qs to %<-femit-struct-debug-detailed%> not recognized" -msgstr "argumentet %qs till %<-femit-struct-debug-detailed%> är inte känt" +msgstr "argumentet %qs till %<-femit-struct-debug-detailed%> är inte känt" #: opts.c:127 #, gcc-internal-format msgid "argument %qs to %<-femit-struct-debug-detailed%> unknown" -msgstr "argument %qs till %<-femit-struct-debug-detailed%> okänt" +msgstr "argument %qs till %<-femit-struct-debug-detailed%> okänt" #: opts.c:134 #, gcc-internal-format msgid "%<-femit-struct-debug-detailed=dir:...%> must allow at least as much as %<-femit-struct-debug-detailed=ind:...%>" -msgstr "%<-femit-struct-debug-detailed=kat:...%> måste tillåta åtminstone så mycket som %<-femit-struct-debug-detailed=ind:...%>" +msgstr "%<-femit-struct-debug-detailed=kat:...%> mÃ¥ste tillÃ¥ta Ã¥tminstone sÃ¥ mycket som %<-femit-struct-debug-detailed=ind:...%>" #: opts.c:657 #, gcc-internal-format msgid "section anchors must be disabled when unit-at-a-time is disabled" -msgstr "sektionsankare måste vara avaktiverade när unit-at-a-time är avaktiverat" +msgstr "sektionsankare mÃ¥ste vara avaktiverade när unit-at-a-time är avaktiverat" #: opts.c:661 #, gcc-internal-format msgid "toplevel reorder must be disabled when unit-at-a-time is disabled" -msgstr "ordningsändring på toppnivå måste vara avaktiverat när unit-at-a-time är avaktiverat" +msgstr "ordningsändring pÃ¥ toppnivÃ¥ mÃ¥ste vara avaktiverat när unit-at-a-time är avaktiverat" #: opts.c:667 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "transactional memory is not supported with non-call exceptions" -msgstr "-static-libgfortran stöds inte i denna konfiguration" +msgstr "transaktionsminne stödjs inte i denna konfiguration" #: opts.c:686 #, gcc-internal-format msgid "section anchors must be disabled when toplevel reorder is disabled" -msgstr "sektionsankare måste vara avaktiverade när ordningsändring på toppnivå är avaktiverat" +msgstr "sektionsankare mÃ¥ste vara avaktiverade när ordningsändring pÃ¥ toppnivÃ¥ är avaktiverat" #: opts.c:721 config/darwin.c:3002 config/sh/sh.c:804 #, gcc-internal-format msgid "-freorder-blocks-and-partition does not work with exceptions on this architecture" -msgstr "-freorder-blocks-and-partition fungerar inte med undantag på denna arkitektur" +msgstr "-freorder-blocks-and-partition fungerar inte med undantag pÃ¥ denna arkitektur" #: opts.c:736 config/sh/sh.c:812 #, gcc-internal-format msgid "-freorder-blocks-and-partition does not support unwind info on this architecture" -msgstr "-freorder-blocks-and-partition stödjer inte upprullningsinformation på denna arkitektur" +msgstr "-freorder-blocks-and-partition stödjer inte upprullningsinformation pÃ¥ denna arkitektur" #: opts.c:753 config/pa/pa.c:521 #, gcc-internal-format msgid "-freorder-blocks-and-partition does not work on this architecture" -msgstr "-freorder-blocks-and-partition fungerar inte på denna arkitektur" +msgstr "-freorder-blocks-and-partition fungerar inte pÃ¥ denna arkitektur" #: opts.c:789 #, gcc-internal-format @@ -17818,87 +17818,87 @@ msgstr "" #: opts.c:797 #, gcc-internal-format msgid "only one -flto-partition value can be specified" -msgstr "bara ett värde för -flto-partition kan anges" +msgstr "bara ett värde för -flto-partition kan anges" #: opts.c:808 #, gcc-internal-format msgid "%<-fsplit-stack%> is not supported by this compiler configuration" -msgstr "%<-fsplit-stack%> stödjs inte av denna kompilatorkonfiguration" +msgstr "%<-fsplit-stack%> stödjs inte av denna kompilatorkonfiguration" #: opts.c:1206 #, gcc-internal-format msgid "unrecognized include_flags 0x%x passed to print_specific_help" -msgstr "okända include_flags 0x%x skickade till print_specific_help" +msgstr "okända include_flags 0x%x skickade till print_specific_help" #: opts.c:1386 #, gcc-internal-format msgid "--help argument %q.*s is ambiguous, please be more specific" -msgstr "argumentet %q.*s till --help är tvetydigt, var mer precis" +msgstr "argumentet %q.*s till --help är tvetydigt, var mer precis" #: opts.c:1395 #, gcc-internal-format msgid "unrecognized argument to --help= option: %q.*s" -msgstr "okänt argument till --help=-flagga: %q.*s" +msgstr "okänt argument till --help=-flagga: %q.*s" #: opts.c:1547 #, gcc-internal-format, gfc-internal-format msgid "structure alignment must be a small power of two, not %d" -msgstr "postjustering måste vara två upphöjt till ett litet tal, inte %d" +msgstr "postjustering mÃ¥ste vara tvÃ¥ upphöjt till ett litet tal, inte %d" #: opts.c:1660 #, gcc-internal-format, gfc-internal-format msgid "unknown stack check parameter \"%s\"" -msgstr "okänd stackkontrollparameter \"%s\"" +msgstr "okänd stackkontrollparameter â€%sâ€" #: opts.c:1695 #, gcc-internal-format, gfc-internal-format msgid "dwarf version %d is not supported" -msgstr "dwarf-version %d stöds inte" +msgstr "dwarf-version %d stöds inte" #: opts.c:1768 #, gcc-internal-format, gfc-internal-format msgid "%s: --param arguments should be of the form NAME=VALUE" -msgstr "%s: argument till --param skall ha formen NAMN=VÄRDE" +msgstr "%s: argument till --param skall ha formen NAMN=VÄRDE" #: opts.c:1774 #, gcc-internal-format msgid "invalid --param value %qs" -msgstr "ogiltigt --param-värde %qs" +msgstr "ogiltigt --param-värde %qs" #: opts.c:1892 #, gcc-internal-format msgid "target system does not support debug output" -msgstr "målsystemet stödjer inte felsökningsutdata" +msgstr "mÃ¥lsystemet stödjer inte felsökningsutdata" #: opts.c:1901 #, gcc-internal-format, gfc-internal-format msgid "debug format \"%s\" conflicts with prior selection" -msgstr "felsökningsformatet \"%s\" står i konflikt med tidigare val" +msgstr "felsökningsformatet â€%s†stÃ¥r i konflikt med tidigare val" #: opts.c:1917 #, gcc-internal-format, gfc-internal-format msgid "unrecognised debug output level \"%s\"" -msgstr "okänd felsökningsnivå \"%s\"" +msgstr "okänd felsökningsnivÃ¥ â€%sâ€" #: opts.c:1919 #, gcc-internal-format, gfc-internal-format msgid "debug output level %s is too high" -msgstr "felsökningsnivå %s är för hög" +msgstr "felsökningsnivÃ¥ %s är för hög" #: opts.c:1939 #, gcc-internal-format msgid "getting core file size maximum limit: %m" -msgstr "när gräns för maximal storlek på core-fil hämtades: %m" +msgstr "när gräns för maximal storlek pÃ¥ core-fil hämtades: %m" #: opts.c:1942 #, gcc-internal-format msgid "setting core file size limit to maximum: %m" -msgstr "när gräns för maximal storlek på core-fil sattes: %m" +msgstr "när gräns för maximal storlek pÃ¥ core-fil sattes: %m" #: opts.c:1990 #, gcc-internal-format, gfc-internal-format msgid "unrecognized gcc debugging option: %c" -msgstr "ej igenkänd debuggningsflagga för gcc: %c" +msgstr "ej igenkänd debuggningsflagga för gcc: %c" #: opts.c:2016 #, gcc-internal-format, gfc-internal-format @@ -17908,12 +17908,12 @@ msgstr "-Werror=%s: ingen flagga -%s" #: params.c:121 #, gcc-internal-format msgid "minimum value of parameter %qs is %u" -msgstr "minimumvärde på parameter %qs är %u" +msgstr "minimumvärde pÃ¥ parameter %qs är %u" #: params.c:126 #, gcc-internal-format msgid "maximum value of parameter %qs is %u" -msgstr "maximumvärde på parameter %qs är %u" +msgstr "maximumvärde pÃ¥ parameter %qs är %u" #. If we didn't find this parameter, issue an error message. #: params.c:136 @@ -17922,24 +17922,24 @@ msgid "invalid parameter %qs" msgstr "ogiltig parameter %qs" #: passes.c:700 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unrecognized option -fenable" -msgstr "okänd flagga %<-%s%>" +msgstr "okänd flagga -fenable" #: passes.c:702 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unrecognized option -fdisable" -msgstr "okänd flagga %<-%s%>" +msgstr "okänd flagga -fdisable" #: passes.c:710 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "unknown pass %s specified in -fenable" -msgstr "okänt fält %qE angivet i initierare" +msgstr "okänt pass %s angivet i -fenable" #: passes.c:712 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "unknown pass %s specified in -fdisble" -msgstr "okänt fält %qE angivet i initierare" +msgstr "okänt pass %s angivet i -fdisable" #: passes.c:739 passes.c:829 #, gcc-internal-format, gfc-internal-format @@ -17952,19 +17952,19 @@ msgid "disable pass %s for functions in the range of [%u, %u]" msgstr "" #: passes.c:778 passes.c:806 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Invalid range %s in option %s" -msgstr "ogiltig flyttalsflagga: -mfpu=%s" +msgstr "Ogiltigt intervall %s i flaggan %s" #: passes.c:825 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "enable pass %s for function %s" -msgstr "ogiltig lagringsklass för funktionen %qE" +msgstr "aktivera pass %s för funktionen %s" #: passes.c:836 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "disable pass %s for function %s" -msgstr "ogiltig lagringsklass för funktionen %qE" +msgstr "avaktivera pass %s för funktionen %s" #: passes.c:1049 #, gcc-internal-format @@ -17979,7 +17979,7 @@ msgstr "insticksmodulen kan inte registrera ett saknat pass" #: passes.c:1094 #, gcc-internal-format msgid "plugin cannot register an unnamed pass" -msgstr "insticksmodulen kan inte registrera ett namnlöst pass" +msgstr "insticksmodulen kan inte registrera ett namnlöst pass" #: passes.c:1098 #, gcc-internal-format @@ -17992,9 +17992,9 @@ msgid "pass %qs not found but is referenced by new pass %qs" msgstr "pass %qs fanns inte men refereras av nytt pass %qs" #: plugin.c:152 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "inaccessible plugin file %s expanded from short plugin name %s: %m" -msgstr "oåtkomlig insticksmodulsfil %s expanderad från kort namn på insticksmodul %s: %m" +msgstr "oÃ¥tkomlig insticksmodulsfil %s expanderad frÃ¥n kort namn pÃ¥ insticksmodul %s: %m" #: plugin.c:173 #, gcc-internal-format, gfc-internal-format @@ -18003,34 +18003,34 @@ msgid "" "%s\n" "%s" msgstr "" -"insticksmodul %s angavs med olika sökvägar:\n" +"insticksmodul %s angavs med olika sökvägar:\n" "%s\n" "%s" #: plugin.c:219 #, gcc-internal-format, gfc-internal-format msgid "malformed option -fplugin-arg-%s (multiple '=' signs)" -msgstr "felformaterad flagga -fplugin-arg-%s (flera \"=\"-tecken)" +msgstr "felformaterad flagga -fplugin-arg-%s (flera â€=â€-tecken)" #: plugin.c:235 #, gcc-internal-format, gfc-internal-format msgid "malformed option -fplugin-arg-%s (missing -<key>[=<value>])" -msgstr "felformaterad flagga -fplugin-arg-%s (saknat -<nyckel>[=<värde>])" +msgstr "felformaterad flagga -fplugin-arg-%s (saknat -<nyckel>[=<värde>])" #: plugin.c:297 #, gcc-internal-format, gfc-internal-format msgid "plugin %s should be specified before -fplugin-arg-%s in the command line" -msgstr "insticksmodul %s skulle ha angetts före -fplugin-arg-%s på kommandoraden" +msgstr "insticksmodul %s skulle ha angetts före -fplugin-arg-%s pÃ¥ kommandoraden" #: plugin.c:417 #, gcc-internal-format, gfc-internal-format msgid "unknown callback event registered by plugin %s" -msgstr "okänd återanropshändelse registrerad av insticksmodul %s" +msgstr "okänd Ã¥teranropshändelse registrerad av insticksmodul %s" #: plugin.c:446 #, gcc-internal-format, gfc-internal-format msgid "plugin %s registered a null callback function for event %s" -msgstr "insticksmodul %s registrerade en tom återanropsfunktion för händelse %s" +msgstr "insticksmodul %s registrerade en tom Ã¥teranropsfunktion för händelse %s" #: plugin.c:567 #, gcc-internal-format, gfc-internal-format @@ -18038,7 +18038,7 @@ msgid "" "cannot load plugin %s\n" "%s" msgstr "" -"det går inte att läsa in insticksmodul %s\n" +"det gÃ¥r inte att läsa in insticksmodul %s\n" "%s" #: plugin.c:576 @@ -18047,7 +18047,7 @@ msgid "" "plugin %s is not licensed under a GPL-compatible license\n" "%s" msgstr "" -"insticksmodul %s är inte licensierad under en GPL-kompatibel licens\n" +"insticksmodul %s är inte licensierad under en GPL-kompatibel licens\n" "%s" #: plugin.c:585 @@ -18056,7 +18056,7 @@ msgid "" "cannot find %s in plugin %s\n" "%s" msgstr "" -"det går inte att hitta %s i insticksmodul %s\n" +"det gÃ¥r inte att hitta %s i insticksmodul %s\n" "%s" #: plugin.c:593 @@ -18067,27 +18067,27 @@ msgstr "misslyckades att initiera insticksmodulen %s" #: plugin.c:874 #, gcc-internal-format msgid "-iplugindir <dir> option not passed from the gcc driver" -msgstr "flaggan -iplugindir <kat> skickas inte från gcc-drivrutin" +msgstr "flaggan -iplugindir <kat> skickas inte frÃ¥n gcc-drivrutin" #: profile.c:413 #, gcc-internal-format msgid "corrupted profile info: edge count exceeds maximal count" -msgstr "trasig profileringsinformation: bågeantalet överskrider maximalt antal" +msgstr "trasig profileringsinformation: bÃ¥geantalet överskrider maximalt antal" #: profile.c:417 #, gcc-internal-format, gfc-internal-format msgid "corrupted profile info: edge from %i to %i exceeds maximal count" -msgstr "trasig profileringsinformation: båge från %i till %i överskred maximalt antal" +msgstr "trasig profileringsinformation: bÃ¥ge frÃ¥n %i till %i överskred maximalt antal" #: profile.c:496 #, gcc-internal-format msgid "corrupted profile info: run_max * runs < sum_max" -msgstr "trasig profileringsinformation: run_max · runs < sum_max" +msgstr "trasig profileringsinformation: run_max · runs < sum_max" #: profile.c:502 #, gcc-internal-format msgid "corrupted profile info: sum_all is smaller than sum_max" -msgstr "trasig profileringsinformation: sum_all är mindre än sum_max" +msgstr "trasig profileringsinformation: sum_all är mindre än sum_max" #: profile.c:674 #, gcc-internal-format @@ -18097,47 +18097,47 @@ msgstr "korrigerar inkonsistent profildata" #: profile.c:684 #, gcc-internal-format msgid "corrupted profile info: profile data is not flow-consistent" -msgstr "trasig profileringsinformation: profileringsdata är inte flödeskonsistent" +msgstr "trasig profileringsinformation: profileringsdata är inte flödeskonsistent" #: profile.c:701 #, gcc-internal-format, gfc-internal-format msgid "corrupted profile info: number of iterations for basic block %d thought to be %i" -msgstr "trasig profileringsinformation: antal iterationer för grundblock %d förmodas vara %i" +msgstr "trasig profileringsinformation: antal iterationer för grundblock %d förmodas vara %i" #: profile.c:722 #, gcc-internal-format, gfc-internal-format msgid "corrupted profile info: number of executions for edge %d-%d thought to be %i" -msgstr "trasig profileringsinformation: antal körningar för bågen %d-%d förmodas vara %i" +msgstr "trasig profileringsinformation: antal körningar för bÃ¥gen %d-%d förmodas vara %i" #: reg-stack.c:537 #, gcc-internal-format, gfc-internal-format msgid "output constraint %d must specify a single register" -msgstr "utmatningsbegränsning %d måste ange ett enskilt register" +msgstr "utmatningsbegränsning %d mÃ¥ste ange ett enskilt register" #: reg-stack.c:547 #, gcc-internal-format, gfc-internal-format msgid "output constraint %d cannot be specified together with \"%s\" clobber" -msgstr "utmatningsbegränsning %d kan inte anges tillsammans med överskrivning av \"%s\"" +msgstr "utmatningsbegränsning %d kan inte anges tillsammans med överskrivning av â€%sâ€" #: reg-stack.c:570 #, gcc-internal-format msgid "output regs must be grouped at top of stack" -msgstr "utmatningsregister måste vara grupperade i toppen på stacken" +msgstr "utmatningsregister mÃ¥ste vara grupperade i toppen pÃ¥ stacken" #: reg-stack.c:607 #, gcc-internal-format msgid "implicitly popped regs must be grouped at top of stack" -msgstr "implicit poppade register måste vara grupperade i toppen på stacken" +msgstr "implicit poppade register mÃ¥ste vara grupperade i toppen pÃ¥ stacken" #: reg-stack.c:626 #, gcc-internal-format msgid "output operand %d must use %<&%> constraint" -msgstr "utdataoperand %d måste använda %<&%>-begränsning" +msgstr "utdataoperand %d mÃ¥ste använda %<&%>-begränsning" #: regcprop.c:1157 #, gcc-internal-format, gfc-internal-format msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" -msgstr "validate_value_data: [%u] Felaktigt next_regno för tom kedja (%u)" +msgstr "validate_value_data: [%u] Felaktigt next_regno för tom kedja (%u)" #: regcprop.c:1169 #, gcc-internal-format, gfc-internal-format @@ -18157,89 +18157,89 @@ msgstr "validate_value_data: [%u] Ej tomt reg i kedja (%s %u %i)" #: reginfo.c:820 #, gcc-internal-format msgid "can%'t use %qs as a call-saved register" -msgstr "det går inte att använda %qs som ett anropssparat register" +msgstr "det gÃ¥r inte att använda %qs som ett anropssparat register" #: reginfo.c:824 #, gcc-internal-format msgid "can%'t use %qs as a call-used register" -msgstr "det går inte att använda %qs som ett anropsanvänt register" +msgstr "det gÃ¥r inte att använda %qs som ett anropsanvänt register" #: reginfo.c:836 #, gcc-internal-format msgid "can%'t use %qs as a fixed register" -msgstr "det går inte att använda %qs som ett fast register" +msgstr "det gÃ¥r inte att använda %qs som ett fast register" #: reginfo.c:862 config/ia64/ia64.c:5749 config/ia64/ia64.c:5756 #: config/pa/pa.c:424 config/pa/pa.c:431 config/sh/sh.c:8744 #: config/sh/sh.c:8751 config/spu/spu.c:5198 config/spu/spu.c:5205 #, gcc-internal-format, gfc-internal-format msgid "unknown register name: %s" -msgstr "okänt registernamn: %s" +msgstr "okänt registernamn: %s" #: reginfo.c:875 #, gcc-internal-format msgid "stack register used for global register variable" -msgstr "stackregister använt som global registervariabel" +msgstr "stackregister använt som global registervariabel" #: reginfo.c:881 #, gcc-internal-format msgid "global register variable follows a function definition" -msgstr "global registervariabel följer en funktionsdefinition" +msgstr "global registervariabel följer en funktionsdefinition" #: reginfo.c:886 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "register of %qD used for multiple global register variables" -msgstr "register använt till två globala registervariabler" +msgstr "register för %qD använt till flera globala registervariabler" #: reginfo.c:889 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "conflicts with %qD" -msgstr "motstridiga typer på %q+D" +msgstr "stÃ¥r i konflikt med %qD" #: reginfo.c:894 #, gcc-internal-format msgid "call-clobbered register used for global register variable" -msgstr "anropsöverskrivet register använt till global registervariabel" +msgstr "anropsöverskrivet register använt till global registervariabel" #: reload.c:1272 #, gcc-internal-format msgid "cannot reload integer constant operand in %<asm%>" -msgstr "kan inte läsa om heltalskonstantoperand i %<asm%>" +msgstr "kan inte läsa om heltalskonstantoperand i %<asm%>" #: reload.c:1286 #, gcc-internal-format msgid "impossible register constraint in %<asm%>" -msgstr "omöjlig registerbegränsning i %<asm%>" +msgstr "omöjlig registerbegränsning i %<asm%>" #: reload.c:3637 #, gcc-internal-format msgid "%<&%> constraint used with no register class" -msgstr "%<&%>-begränsning använd utan registerklass" +msgstr "%<&%>-begränsning använd utan registerklass" #: reload.c:3813 reload.c:4070 #, gcc-internal-format msgid "inconsistent operand constraints in an %<asm%>" -msgstr "inkonsistenta operandbegränsningar i en %<asm%>" +msgstr "inkonsistenta operandbegränsningar i en %<asm%>" #: reload1.c:1253 #, gcc-internal-format msgid "%<asm%> operand has impossible constraints" -msgstr "%<asm%>-operand har omöjliga begränsningar" +msgstr "%<asm%>-operand har omöjliga begränsningar" #: reload1.c:1273 #, gcc-internal-format msgid "frame size too large for reliable stack checking" -msgstr "ramstorlek för stor för pålitlig stackkontroll" +msgstr "ramstorlek för stor för pÃ¥litlig stackkontroll" #: reload1.c:1276 #, gcc-internal-format msgid "try reducing the number of local variables" -msgstr "försök reducera antalet lokala variabler" +msgstr "försök reducera antalet lokala variabler" #: reload1.c:2107 #, gcc-internal-format msgid "can%'t find a register in class %qs while reloading %<asm%>" -msgstr "det går inte att hitta ett register i klassen %qs vid omläsning av %<asm%>" +msgstr "det gÃ¥r inte att hitta ett register i klassen %qs vid omläsning av %<asm%>" #: reload1.c:2112 #, gcc-internal-format @@ -18249,122 +18249,122 @@ msgstr "kan inte hitta ett register att spilla i klass %qs" #: reload1.c:4690 #, gcc-internal-format msgid "%<asm%> operand requires impossible reload" -msgstr "%<asm%>-operand kräver omöjlig omlastning" +msgstr "%<asm%>-operand kräver omöjlig omlastning" #: reload1.c:6093 #, gcc-internal-format msgid "%<asm%> operand constraint incompatible with operand size" -msgstr "%<asm%>-operandbegränsningar inkompatibla med operandstorlek" +msgstr "%<asm%>-operandbegränsningar inkompatibla med operandstorlek" #: reload1.c:7899 #, gcc-internal-format msgid "output operand is constant in %<asm%>" -msgstr "utdataoperand är konstant i %<asm%>" +msgstr "utdataoperand är konstant i %<asm%>" #: rtl.c:742 #, gcc-internal-format, gfc-internal-format msgid "RTL check: access of elt %d of '%s' with last elt %d in %s, at %s:%d" -msgstr "RTL-kontroll: åtkomst av elt %d av \"%s\" med sista elt %d i %s, vid %s:%d" +msgstr "RTL-kontroll: Ã¥tkomst av elt %d av â€%s†med sista elt %d i %s, vid %s:%d" #: rtl.c:752 #, gcc-internal-format, gfc-internal-format msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" -msgstr "RTL-kontroll: förväntade elt %d typ \"%c\", har \"%c\" (rtx %s) i %s, vid %s:%d" +msgstr "RTL-kontroll: förväntade elt %d typ â€%câ€, har â€%c†(rtx %s) i %s, vid %s:%d" #: rtl.c:762 #, gcc-internal-format, gfc-internal-format msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" -msgstr "RTL-kontroll: förväntade elt %d typ \"%c\" eller \"%c\", har \"%c\" (rtx %s) i %s, vid %s:%d" +msgstr "RTL-kontroll: förväntade elt %d typ â€%c†eller â€%câ€, har â€%c†(rtx %s) i %s, vid %s:%d" #: rtl.c:771 #, gcc-internal-format, gfc-internal-format msgid "RTL check: expected code '%s', have '%s' in %s, at %s:%d" -msgstr "RTL-kontroll: förväntade kod \"%s\", har \"%s\" i %s, vid %s:%d" +msgstr "RTL-kontroll: förväntade kod â€%sâ€, har â€%s†i %s, vid %s:%d" #: rtl.c:781 #, gcc-internal-format, gfc-internal-format msgid "RTL check: expected code '%s' or '%s', have '%s' in %s, at %s:%d" -msgstr "RTL-kontroll: förväntade kod \"%s\" eller \"%s\", har \"%s\" i %s, vid %s:%d" +msgstr "RTL-kontroll: förväntade kod â€%s†eller â€%sâ€, har â€%s†i %s, vid %s:%d" #: rtl.c:808 #, gcc-internal-format, gfc-internal-format msgid "RTL check: attempt to treat non-block symbol as a block symbol in %s, at %s:%d" -msgstr "RTL-kontroll: försök att hantera icke-block-symbol som en blocksymbol i %s, vid %s:%d" +msgstr "RTL-kontroll: försök att hantera icke-block-symbol som en blocksymbol i %s, vid %s:%d" #: rtl.c:818 #, gcc-internal-format, gfc-internal-format msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" -msgstr "RTL-kontroll: åtkomst av elt %d i vektor med sista elt %d i %s, vid %s:%d" +msgstr "RTL-kontroll: Ã¥tkomst av elt %d i vektor med sista elt %d i %s, vid %s:%d" #: rtl.c:829 #, gcc-internal-format, gfc-internal-format msgid "RTL flag check: %s used with unexpected rtx code '%s' in %s, at %s:%d" -msgstr "RTL-flaggkontroll: %s använt med oväntad rtx-kod \"%s\" i %s, vid %s:%d" +msgstr "RTL-flaggkontroll: %s använt med oväntad rtx-kod â€%s†i %s, vid %s:%d" #: stmt.c:315 #, gcc-internal-format msgid "output operand constraint lacks %<=%>" -msgstr "utdataoperandbegränsningen saknar %<=%>" +msgstr "utdataoperandbegränsningen saknar %<=%>" #: stmt.c:330 #, gcc-internal-format msgid "output constraint %qc for operand %d is not at the beginning" -msgstr "utmatningsbegränsning %qc för operand %d är inte i början" +msgstr "utmatningsbegränsning %qc för operand %d är inte i början" #: stmt.c:353 #, gcc-internal-format msgid "operand constraint contains incorrectly positioned %<+%> or %<=%>" -msgstr "operandbegränsning innehåller felaktigt placerat %<+%> eller %<=%>" +msgstr "operandbegränsning innehÃ¥ller felaktigt placerat %<+%> eller %<=%>" #: stmt.c:360 stmt.c:459 #, gcc-internal-format msgid "%<%%%> constraint used with last operand" -msgstr "%<%%%>-begränsning använd med sista operand" +msgstr "%<%%%>-begränsning använd med sista operand" #: stmt.c:379 #, gcc-internal-format msgid "matching constraint not valid in output operand" -msgstr "matchningsbegränsningen inte en giltig utdataoperand" +msgstr "matchningsbegränsningen inte en giltig utdataoperand" #: stmt.c:450 #, gcc-internal-format msgid "input operand constraint contains %qc" -msgstr "indataoperandbegränsningen innehåller %qc" +msgstr "indataoperandbegränsningen innehÃ¥ller %qc" #: stmt.c:492 #, gcc-internal-format msgid "matching constraint references invalid operand number" -msgstr "matchningsbegränsning refererar ogiltigt operandnummer" +msgstr "matchningsbegränsning refererar ogiltigt operandnummer" #: stmt.c:530 #, gcc-internal-format msgid "invalid punctuation %qc in constraint" -msgstr "ogiltig interpunktion %qc i begränsning" +msgstr "ogiltig interpunktion %qc i begränsning" #: stmt.c:554 #, gcc-internal-format msgid "matching constraint does not allow a register" -msgstr "matchningsbegränsning tillåter inte ett register" +msgstr "matchningsbegränsning tillÃ¥ter inte ett register" #: stmt.c:608 #, gcc-internal-format msgid "asm-specifier for variable %qE conflicts with asm clobber list" -msgstr "asm-specificerare för variabeln %qE står i konflikt med asm-överskrivningslista" +msgstr "asm-specificerare för variabeln %qE stÃ¥r i konflikt med asm-överskrivningslista" #: stmt.c:700 #, gcc-internal-format msgid "unknown register name %qs in %<asm%>" -msgstr "okänt registernamn %qs i %<asm%>" +msgstr "okänt registernamn %qs i %<asm%>" #: stmt.c:714 #, gcc-internal-format msgid "PIC register clobbered by %qs in %<asm%>" -msgstr "PIC-register skrivs över av %qs i %<asm%>" +msgstr "PIC-register skrivs över av %qs i %<asm%>" #: stmt.c:762 #, gcc-internal-format msgid "more than %d operands in %<asm%>" -msgstr "mer än %d operander i %<asm%>" +msgstr "mer än %d operander i %<asm%>" #: stmt.c:829 #, gcc-internal-format, gfc-internal-format @@ -18374,32 +18374,32 @@ msgstr "utmatning nummer %d inte direkt adresserbar" #: stmt.c:915 #, gcc-internal-format msgid "asm operand %d probably doesn%'t match constraints" -msgstr "asm-operand %d stämmer förmodligen inte med begränsningarna" +msgstr "asm-operand %d stämmer förmodligen inte med begränsningarna" #: stmt.c:925 #, gcc-internal-format, gfc-internal-format msgid "use of memory input without lvalue in asm operand %d is deprecated" -msgstr "användning av minnesindata utan l-värde i asm-operand %d bör undvikas" +msgstr "användning av minnesindata utan l-värde i asm-operand %d bör undvikas" #: stmt.c:1087 #, gcc-internal-format msgid "asm clobber conflict with output operand" -msgstr "asm-överskrivning står i konflikt med utdataoperand" +msgstr "asm-överskrivning stÃ¥r i konflikt med utdataoperand" #: stmt.c:1094 #, gcc-internal-format msgid "asm clobber conflict with input operand" -msgstr "asm-överskrivning står i konflikt med indataoperand" +msgstr "asm-överskrivning stÃ¥r i konflikt med indataoperand" #: stmt.c:1221 #, gcc-internal-format msgid "too many alternatives in %<asm%>" -msgstr "för många alternativ i %<asm%>" +msgstr "för mÃ¥nga alternativ i %<asm%>" #: stmt.c:1233 #, gcc-internal-format msgid "operand constraints for %<asm%> differ in number of alternatives" -msgstr "operandbegränsning för %<asm%> skiljer i antal alternativ" +msgstr "operandbegränsning för %<asm%> skiljer i antal alternativ" #: stmt.c:1300 #, gcc-internal-format @@ -18409,7 +18409,7 @@ msgstr "upprepning av asm-operandnamn %qs" #: stmt.c:1396 #, gcc-internal-format msgid "missing close brace for named operand" -msgstr "avslutande klammer för namngiven operand saknas" +msgstr "avslutande klammer för namngiven operand saknas" #: stmt.c:1421 #, gcc-internal-format @@ -18419,112 +18419,112 @@ msgstr "odefinierad namngiven operand %qs" #: stmt.c:1566 cp/cvt.c:1117 cp/cvt.c:1361 #, gcc-internal-format msgid "value computed is not used" -msgstr "beräknat värde används inte" +msgstr "beräknat värde används inte" #: stor-layout.c:711 #, gcc-internal-format msgid "size of %q+D is %d bytes" -msgstr "storleken på %q+D är %d byte" +msgstr "storleken pÃ¥ %q+D är %d byte" #: stor-layout.c:713 #, gcc-internal-format msgid "size of %q+D is larger than %wd bytes" -msgstr "storleken på %q+D är större än %wd byte" +msgstr "storleken pÃ¥ %q+D är större än %wd byte" #: stor-layout.c:1131 #, gcc-internal-format msgid "packed attribute causes inefficient alignment for %q+D" -msgstr "attributet packed medför ineffektiv justering för %q+D" +msgstr "attributet packed medför ineffektiv justering för %q+D" #: stor-layout.c:1135 #, gcc-internal-format msgid "packed attribute is unnecessary for %q+D" -msgstr "attributet packed är onödigt för %q+D" +msgstr "attributet packed är onödigt för %q+D" #: stor-layout.c:1153 #, gcc-internal-format msgid "padding struct to align %q+D" -msgstr "fyller ut post för att justera %q+D" +msgstr "fyller ut post för att justera %q+D" #: stor-layout.c:1214 #, gcc-internal-format msgid "offset of packed bit-field %qD has changed in GCC 4.4" -msgstr "avstånd till packat bitfält %qD har ändrats i GCC 4.4" +msgstr "avstÃ¥nd till packat bitfält %qD har ändrats i GCC 4.4" #: stor-layout.c:1520 #, gcc-internal-format msgid "padding struct size to alignment boundary" -msgstr "fyller ut poststorlek till justeringsgräns" +msgstr "fyller ut poststorlek till justeringsgräns" #: stor-layout.c:1548 #, gcc-internal-format msgid "packed attribute causes inefficient alignment for %qE" -msgstr "attributet packed medför ineffektiv justering för %qE" +msgstr "attributet packed medför ineffektiv justering för %qE" #: stor-layout.c:1552 #, gcc-internal-format msgid "packed attribute is unnecessary for %qE" -msgstr "attributet packed är onödigt för %qE" +msgstr "attributet packed är onödigt för %qE" #: stor-layout.c:1558 #, gcc-internal-format msgid "packed attribute causes inefficient alignment" -msgstr "attributet packed medför ineffektiv justering" +msgstr "attributet packed medför ineffektiv justering" #: stor-layout.c:1560 #, gcc-internal-format msgid "packed attribute is unnecessary" -msgstr "attributet packed är onödigt" +msgstr "attributet packed är onödigt" #: stor-layout.c:2026 #, gcc-internal-format msgid "alignment of array elements is greater than element size" -msgstr "justeringen av vektorelement är större än elementstorleken" +msgstr "justeringen av vektorelement är större än elementstorleken" #: targhooks.c:168 #, gcc-internal-format msgid "__builtin_saveregs not supported by this target" -msgstr "__builtin_saveregs stöds inte på denna målarkitektur" +msgstr "__builtin_saveregs stöds inte pÃ¥ denna mÃ¥larkitektur" #: targhooks.c:806 #, gcc-internal-format msgid "nested functions not supported on this target" -msgstr "nästade funktioner stöds inte på denna målarkitektur" +msgstr "nästade funktioner stöds inte pÃ¥ denna mÃ¥larkitektur" #: targhooks.c:819 #, gcc-internal-format msgid "nested function trampolines not supported on this target" -msgstr "nästade funktionstrampoliner stöds inte för denna målarkitektur" +msgstr "nästade funktionstrampoliner stöds inte för denna mÃ¥larkitektur" #: targhooks.c:1153 #, gcc-internal-format msgid "target attribute is not supported on this machine" -msgstr "målattribut stöds inte på denna maskin" +msgstr "mÃ¥lattribut stöds inte pÃ¥ denna maskin" #: targhooks.c:1163 #, gcc-internal-format msgid "#pragma GCC target is not supported for this machine" -msgstr "#pragma GCC target stöds inte för denna maskin" +msgstr "#pragma GCC target stöds inte för denna maskin" #: tlink.c:481 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "removing .rpo file: %m" -msgstr "tar bort .rpo-fil" +msgstr "tar bort .rpo-fil: %m" #: tlink.c:483 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "renaming .rpo file: %m" -msgstr "byter namn på .rpo-fil" +msgstr "byter namn pÃ¥ .rpo-fil: %m" #: tlink.c:487 #, gcc-internal-format, gfc-internal-format msgid "repository file '%s' does not contain command-line arguments" -msgstr "lagerfil \"%s\" innehåller inte kommandoradsargument" +msgstr "lagerfil â€%s†innehÃ¥ller inte kommandoradsargument" #: tlink.c:735 #, gcc-internal-format, gfc-internal-format msgid "'%s' was assigned to '%s', but was not defined during recompilation, or vice versa" -msgstr "\"%s\" tilldelades till \"%s\", men definierades inte under omkompilering, eller vice versa" +msgstr "â€%s†tilldelades till â€%sâ€, men definierades inte under omkompilering, eller vice versa" #: tlink.c:805 #, gcc-internal-format, gfc-internal-format @@ -18534,22 +18534,22 @@ msgstr "ld returnerade avslutningsstatus %d" #: toplev.c:486 #, gcc-internal-format msgid "%q+F declared %<static%> but never defined" -msgstr "%q+F är deklarerad %<static%> men definieras aldrig" +msgstr "%q+F är deklarerad %<static%> men definieras aldrig" #: toplev.c:514 #, gcc-internal-format msgid "%q+D defined but not used" -msgstr "%q+D är definierad men inte använd" +msgstr "%q+D är definierad men inte använd" #: toplev.c:951 #, gcc-internal-format msgid "-frecord-gcc-switches is not supported by the current target" -msgstr "-frecord-gcc-switches stöds inte för den aktuella målarkitekturen" +msgstr "-frecord-gcc-switches stöds inte för den aktuella mÃ¥larkitekturen" #: toplev.c:1056 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "stack usage computation not supported for this target" -msgstr "-fstack-usage stödjs inte av denna målarkitektur" +msgstr "beräkning av stackanvändning stödjs inte av denna mÃ¥larkitektur" #: toplev.c:1110 #, gcc-internal-format @@ -18557,24 +18557,24 @@ msgid "stack usage might be unbounded" msgstr "" #: toplev.c:1114 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "stack usage might be %wd bytes" -msgstr "för stor stackram: %d byte" +msgstr "stackanvändningen kan vara %wd byte" #: toplev.c:1117 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "stack usage is %wd bytes" -msgstr "för stor stackram: %d byte" +msgstr "stackanvändningen är %wd byte" #: toplev.c:1294 #, gcc-internal-format msgid "this target does not support %qs" -msgstr "denna målarkitektur stödjer inte %s" +msgstr "denna mÃ¥larkitektur stödjer inte %s" #: toplev.c:1322 #, gcc-internal-format msgid "Graphite loop optimizations cannot be used (-fgraphite, -fgraphite-identity, -floop-block, -floop-flatten, -floop-interchange, -floop-strip-mine, -floop-parallelize-all, and -ftree-loop-linear)" -msgstr "Graphite-slingoptimeringar kan inte användas (-fgraphite, -fgraphite-identity, -floop-block, -floop-flatten, -floop-interchange, -floop-strip-mine, -floop-parallelize-all och -ftree-loop-linear)" +msgstr "Graphite-slingoptimeringar kan inte användas (-fgraphite, -fgraphite-identity, -floop-block, -floop-flatten, -floop-interchange, -floop-strip-mine, -floop-parallelize-all och -ftree-loop-linear)" #: toplev.c:1329 #, gcc-internal-format @@ -18589,87 +18589,87 @@ msgstr "" #: toplev.c:1366 #, gcc-internal-format msgid "instruction scheduling not supported on this target machine" -msgstr "instruktionsschemaläggning stöds inte för denna målmaskin" +msgstr "instruktionsschemaläggning stöds inte för denna mÃ¥lmaskin" #: toplev.c:1370 #, gcc-internal-format msgid "this target machine does not have delayed branches" -msgstr "denna målmaskin har inte fördröjda grenar" +msgstr "denna mÃ¥lmaskin har inte fördröjda grenar" #: toplev.c:1384 #, gcc-internal-format, gfc-internal-format msgid "-f%sleading-underscore not supported on this target machine" -msgstr "-f%sleading-underscore stöds inte på denna målmaskin" +msgstr "-f%sleading-underscore stöds inte pÃ¥ denna mÃ¥lmaskin" #: toplev.c:1427 #, gcc-internal-format msgid "could not close zeroed insn dump file %qs: %m" -msgstr "det gick inte att stänga nollställd instruktionsdumpfil %qs: %m" +msgstr "det gick inte att stänga nollställd instruktionsdumpfil %qs: %m" #: toplev.c:1466 #, gcc-internal-format, gfc-internal-format msgid "target system does not support the \"%s\" debug format" -msgstr "målsystemet stödjer inte felsökningsformatet \"%s\"" +msgstr "mÃ¥lsystemet stödjer inte felsökningsformatet â€%sâ€" #: toplev.c:1478 #, gcc-internal-format msgid "variable tracking requested, but useless unless producing debug info" -msgstr "variabelspårning begärd, men oanvändbar om den inte felsökningsinformation skapas" +msgstr "variabelspÃ¥rning begärd, men oanvändbar om den inte felsökningsinformation skapas" #: toplev.c:1481 #, gcc-internal-format msgid "variable tracking requested, but not supported by this debug format" -msgstr "variabel spårning begärd, men stöds inte av detta felsökningsformat" +msgstr "variabel spÃ¥rning begärd, men stöds inte av detta felsökningsformat" #: toplev.c:1515 #, gcc-internal-format msgid "var-tracking-assignments changes selective scheduling" -msgstr "var-tracking-assignments ändrar selektiv schemaläggning" +msgstr "var-tracking-assignments ändrar selektiv schemaläggning" #: toplev.c:1538 #, gcc-internal-format msgid "-ffunction-sections not supported for this target" -msgstr "-ffunction-sections stöds inte för denna målarkitektur" +msgstr "-ffunction-sections stöds inte för denna mÃ¥larkitektur" #: toplev.c:1543 #, gcc-internal-format msgid "-fdata-sections not supported for this target" -msgstr "-fdata-sections stöds inte för denna målarkitektur" +msgstr "-fdata-sections stöds inte för denna mÃ¥larkitektur" #: toplev.c:1550 #, gcc-internal-format msgid "-ffunction-sections disabled; it makes profiling impossible" -msgstr "-ffunction-sections avslaget, det gör profilering omöjlig" +msgstr "-ffunction-sections avslaget, det gör profilering omöjlig" #: toplev.c:1557 #, gcc-internal-format msgid "-fprefetch-loop-arrays not supported for this target" -msgstr "-fprefetch-loop-arrays stöds inte för denna målarkitektur" +msgstr "-fprefetch-loop-arrays stöds inte för denna mÃ¥larkitektur" #: toplev.c:1563 #, gcc-internal-format msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)" -msgstr "-fprefetch-loop-arrays stöds inte för denna målarkitektur (försök med -march-flaggor)" +msgstr "-fprefetch-loop-arrays stöds inte för denna mÃ¥larkitektur (försök med -march-flaggor)" #: toplev.c:1572 #, gcc-internal-format msgid "-fprefetch-loop-arrays is not supported with -Os" -msgstr "-fprefetch-loop-arrays stöds inte med -Os" +msgstr "-fprefetch-loop-arrays stöds inte med -Os" #: toplev.c:1583 #, gcc-internal-format msgid "-fassociative-math disabled; other options take precedence" -msgstr "-fassociative-math avslagen, andra flaggor går före" +msgstr "-fassociative-math avslagen, andra flaggor gÃ¥r före" #: toplev.c:1599 #, gcc-internal-format msgid "-fstack-protector not supported for this target" -msgstr "-fstack-protector stöds inte av denna målarkitektur" +msgstr "-fstack-protector stöds inte av denna mÃ¥larkitektur" #: toplev.c:1612 #, gcc-internal-format msgid "unwind tables currently require a frame pointer for correctness" -msgstr "at rulla ut tabeller kräver för närvarande en rampekare för att bli rätt" +msgstr "at rulla ut tabeller kräver för närvarande en rampekare för att bli rätt" #: toplev.c:1873 #, gcc-internal-format @@ -18679,12 +18679,12 @@ msgstr "fel vid skrivning till %s: %m" #: toplev.c:1875 java/jcf-parse.c:1770 #, gcc-internal-format msgid "error closing %s: %m" -msgstr "fel när %s stängdes: %m" +msgstr "fel när %s stängdes: %m" #: trans-mem.c:570 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid volatile use of %qD inside transaction" -msgstr "ogiltig användning av %qD i länkklasspecifikation" +msgstr "ogiltig volatil användning av %qD inuti transaktion" #: trans-mem.c:596 #, gcc-internal-format @@ -18702,9 +18702,9 @@ msgid "unsafe function call %qE within atomic transaction" msgstr "" #: trans-mem.c:674 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unsafe indirect function call within atomic transaction" -msgstr "indirekt funktionsanrop med ett ännu ej fastställt anropsmål" +msgstr "osäkert indirekt funktionsanrop inuti en atomär transaktion" #: trans-mem.c:682 trans-mem.c:4070 #, gcc-internal-format @@ -18717,24 +18717,24 @@ msgid "unsafe function call %qE within %<transaction_safe%> function" msgstr "" #: trans-mem.c:692 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unsafe indirect function call within %<transaction_safe%> function" -msgstr "indirekt funktionsanrop med ett ännu ej fastställt anropsmål" +msgstr "osäkert indirekt funktionsanrop inuti en %<transaction_safe%>-funktion" #: trans-mem.c:707 trans-mem.c:4109 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "asm not allowed in atomic transaction" -msgstr "namnrymd %qD är inte tillåten i using-deklaration" +msgstr "asm är inte tillÃ¥tet i en atomär transaktion" #: trans-mem.c:710 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "asm not allowed in %<transaction_safe%> function" -msgstr "attribut är inte tillåtna vid en funktionsdefinition" +msgstr "asm är inte tillÃ¥tet i en %<transaction_safe%>-funktion" #: trans-mem.c:721 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "relaxed transaction in atomic transaction" -msgstr "Placera varje funktion i sin egen sektion" +msgstr "relaxerad transaktion i atomär transaktion" #: trans-mem.c:724 #, gcc-internal-format @@ -18742,9 +18742,9 @@ msgid "relaxed transaction in %<transaction_safe%> function" msgstr "" #: trans-mem.c:731 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "outer transaction in transaction" -msgstr "pekare till funktion använd i subtraktion" +msgstr "yttre transaktion i transaktion" #: trans-mem.c:734 #, gcc-internal-format @@ -18759,17 +18759,17 @@ msgstr "" #: tree-cfg.c:2616 #, gcc-internal-format msgid "constant not recomputed when ADDR_EXPR changed" -msgstr "konstant inte omräknad när ADDR_EXPR ändrades" +msgstr "konstant inte omräknad när ADDR_EXPR ändrades" #: tree-cfg.c:2621 #, gcc-internal-format msgid "side effects not recomputed when ADDR_EXPR changed" -msgstr "sidoeffekter inte omräknade när ADDR_EXPR ändrades" +msgstr "sidoeffekter inte omräknade när ADDR_EXPR ändrades" #: tree-cfg.c:2632 #, gcc-internal-format msgid "DECL_GIMPLE_REG_P set on a variable with address taken" -msgstr "DECL_GIMPLE_REG_P satt på en variabel vars adress tas" +msgstr "DECL_GIMPLE_REG_P satt pÃ¥ en variabel vars adress tas" #: tree-cfg.c:2661 #, gcc-internal-format @@ -18784,32 +18784,32 @@ msgstr "INDIRECT_REF i gimple IL" #: tree-cfg.c:2675 #, gcc-internal-format msgid "invalid first operand of MEM_REF" -msgstr "ogiltig första operand till MEM_REF" +msgstr "ogiltig första operand till MEM_REF" #: tree-cfg.c:2681 #, gcc-internal-format msgid "invalid offset operand of MEM_REF" -msgstr "ogiltig avståndsoperand till MEM_REF" +msgstr "ogiltig avstÃ¥ndsoperand till MEM_REF" #: tree-cfg.c:2694 #, gcc-internal-format msgid "ASSERT_EXPR with an always-false condition" -msgstr "ASSERT_EXPR med villkor som alltid är falskt" +msgstr "ASSERT_EXPR med villkor som alltid är falskt" #: tree-cfg.c:2700 #, gcc-internal-format msgid "MODIFY_EXPR not expected while having tuples" -msgstr "MODIFY_EXPR förväntades inte när man har tupler" +msgstr "MODIFY_EXPR förväntades inte när man har tupler" #: tree-cfg.c:2727 tree-ssa.c:880 #, gcc-internal-format msgid "address taken, but ADDRESSABLE bit not set" -msgstr "adress tagen, men ADDRESSABLE-biten är inte satt" +msgstr "adress tagen, men ADDRESSABLE-biten är inte satt" #: tree-cfg.c:2738 #, gcc-internal-format msgid "non-integral used in condition" -msgstr "icke-heltal använt i villkor" +msgstr "icke-heltal använt i villkor" #: tree-cfg.c:2743 #, gcc-internal-format @@ -18824,12 +18824,12 @@ msgstr "ogiltig position eller storleksoperand till BIT_FIELD_REF" #: tree-cfg.c:2797 #, gcc-internal-format msgid "integral result type precision does not match field size of BIT_FIELD_REF" -msgstr "precisionen på typen på heltalsresultatet stämmer inte med fältstorleken på BIT_FIELD_REF" +msgstr "precisionen pÃ¥ typen pÃ¥ heltalsresultatet stämmer inte med fältstorleken pÃ¥ BIT_FIELD_REF" #: tree-cfg.c:2805 #, gcc-internal-format msgid "mode precision of non-integral result does not match field size of BIT_FIELD_REF" -msgstr "lägesprecisionen på resultat av icke-heltalstyp stämmer imte med fältstorleken på BIT_FIELD_REF" +msgstr "lägesprecisionen pÃ¥ resultat av icke-heltalstyp stämmer imte med fältstorleken pÃ¥ BIT_FIELD_REF" #: tree-cfg.c:2816 #, gcc-internal-format @@ -18839,17 +18839,17 @@ msgstr "ogiltigt referensprefix" #: tree-cfg.c:2827 #, gcc-internal-format msgid "invalid operand to plus/minus, type is a pointer" -msgstr "ogiltig operand till plus/minus, typen är en pekare" +msgstr "ogiltig operand till plus/minus, typen är en pekare" #: tree-cfg.c:2838 #, gcc-internal-format msgid "invalid operand to pointer plus, first operand is not a pointer" -msgstr "ogiltig operand till pekarplus, första operanden är inte en pekare" +msgstr "ogiltig operand till pekarplus, första operanden är inte en pekare" #: tree-cfg.c:2844 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid operand to pointer plus, second operand is not an integer type of appropriate width" -msgstr "ogiltig operand till pekarplus, andra operanden är inte ett heltal med typen sizetype" +msgstr "ogiltig operand till pekarplus, andra operanden är inte en heltalstyp med lämplig bredd" #: tree-cfg.c:2895 #, gcc-internal-format @@ -18859,7 +18859,7 @@ msgstr "" #: tree-cfg.c:2923 #, gcc-internal-format msgid "invalid expression for min lvalue" -msgstr "ogiltigt uttryck som min-l-värde" +msgstr "ogiltigt uttryck som min-l-värde" #: tree-cfg.c:2934 #, gcc-internal-format @@ -18884,7 +18884,7 @@ msgstr "typfel i vektorintervallreferens" #: tree-cfg.c:2994 #, gcc-internal-format msgid "type mismatch in real/imagpart reference" -msgstr "typfel i referens till reel-/imaginärdel" +msgstr "typfel i referens till reel-/imaginärdel" #: tree-cfg.c:3004 #, gcc-internal-format @@ -18894,7 +18894,7 @@ msgstr "typfel i komponentreferens" #: tree-cfg.c:3021 #, gcc-internal-format msgid "conversion of an SSA_NAME on the left hand side" -msgstr "konvertering av en SSA_NAME på vänster sida" +msgstr "konvertering av en SSA_NAME pÃ¥ vänster sida" #: tree-cfg.c:3028 #, gcc-internal-format @@ -18909,17 +18909,17 @@ msgstr "ogiltig adressoperand i MEM_REF" #: tree-cfg.c:3050 #, gcc-internal-format msgid "invalid offset operand in MEM_REF" -msgstr "ogiltig avståndsoperand i MEM_REF" +msgstr "ogiltig avstÃ¥ndsoperand i MEM_REF" #: tree-cfg.c:3060 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid address operand in TARGET_MEM_REF" msgstr "ogiltig adressoperand i in TARGET_MEM_REF" #: tree-cfg.c:3067 #, gcc-internal-format msgid "invalid offset operand in TARGET_MEM_REF" -msgstr "ogiltig avståndsoperand i TARGET_MEM_REF" +msgstr "ogiltig avstÃ¥ndsoperand i TARGET_MEM_REF" #: tree-cfg.c:3121 #, gcc-internal-format @@ -18944,12 +18944,12 @@ msgstr "icke-funktion i gimple-anrop" #: tree-cfg.c:3158 #, gcc-internal-format msgid "invalid pure const state for function" -msgstr "ogiltigt pure-const-tillstånd för funktion" +msgstr "ogiltigt pure-const-tillstÃ¥nd för funktion" #: tree-cfg.c:3166 #, gcc-internal-format msgid "invalid LHS in gimple call" -msgstr "ogiltig vänstersida i gimple-anrop" +msgstr "ogiltig vänstersida i gimple-anrop" #: tree-cfg.c:3172 #, gcc-internal-format @@ -18974,7 +18974,7 @@ msgstr "statisk kedja i indirekt gimple-anrop" #: tree-cfg.c:3216 #, gcc-internal-format msgid "static chain with function that doesn%'t use one" -msgstr "statisk kedja med funktion som inte använder en" +msgstr "statisk kedja med funktion som inte använder en" #: tree-cfg.c:3234 #, gcc-internal-format @@ -18984,37 +18984,37 @@ msgstr "ogiltigt argument till gimple-anrop" #: tree-cfg.c:3254 #, gcc-internal-format msgid "invalid operands in gimple comparison" -msgstr "ogiltiga operander i gimple-jämförelse" +msgstr "ogiltiga operander i gimple-jämförelse" #: tree-cfg.c:3270 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "mismatching comparison operand types" -msgstr "typfel i jämförelseuttryck" +msgstr "typen pÃ¥ operander i jämförelse stämmer inte överens" #: tree-cfg.c:3289 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "non-vector operands in vector comparison" -msgstr "ogiltiga operander i gimple-jämförelse" +msgstr "icke-vektoroperander i vektorjämförelse" #: tree-cfg.c:3299 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid vector comparison resulting type" -msgstr "ogiltig vektorpermutationskonstant" +msgstr "ogiltig resultattyp i vektorjämförelse" #: tree-cfg.c:3306 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "bogus comparison result type" -msgstr "Varna för jämförelser av skilda uppräkningstyper" +msgstr "felaktig resultatyp i jämförelse" #: tree-cfg.c:3328 #, gcc-internal-format msgid "non-register as LHS of unary operation" -msgstr "icke-register som vänstersida av unär operation" +msgstr "icke-register som vänstersida av unär operation" #: tree-cfg.c:3334 #, gcc-internal-format msgid "invalid operand in unary operation" -msgstr "ogiltig operand i unär operation" +msgstr "ogiltig operand i unär operation" #: tree-cfg.c:3369 #, gcc-internal-format @@ -19044,17 +19044,17 @@ msgstr "ogiltiga typer i konvertering till heltal" #: tree-cfg.c:3462 #, gcc-internal-format msgid "non-trivial conversion in unary operation" -msgstr "icketrivial konvertering i unär operation" +msgstr "icketrivial konvertering i unär operation" #: tree-cfg.c:3487 #, gcc-internal-format msgid "non-register as LHS of binary operation" -msgstr "ej register som vänstersida av binär operation" +msgstr "ej register som vänstersida av binär operation" #: tree-cfg.c:3494 #, gcc-internal-format msgid "invalid operands in binary operation" -msgstr "ogiltiga operander binär operation" +msgstr "ogiltiga operander binär operation" #: tree-cfg.c:3509 #, gcc-internal-format @@ -19077,14 +19077,14 @@ msgid "non-element sized vector shift of floating point vector" msgstr "ej elementstor vektorskiftning eller flyttalsvektor" #: tree-cfg.c:3588 tree-cfg.c:3609 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "type mismatch in widening vector shift expression" -msgstr "typfel i vektorskiftuttryck" +msgstr "typfel i breddande vektorskiftuttryck" #: tree-cfg.c:3631 #, gcc-internal-format msgid "invalid non-vector operands to vector valued plus" -msgstr "ogiltig operander som inte är vektor till vektorvärt plus" +msgstr "ogiltig operander som inte är vektor till vektorvärt plus" #: tree-cfg.c:3651 #, gcc-internal-format @@ -19099,37 +19099,37 @@ msgstr "typfel i pekar-plus-uttryck" #: tree-cfg.c:3743 #, gcc-internal-format msgid "type mismatch in binary expression" -msgstr "typfel i binärt uttryck" +msgstr "typfel i binärt uttryck" #: tree-cfg.c:3771 #, gcc-internal-format msgid "non-register as LHS of ternary operation" -msgstr "icke-register som vänstersida av treställig operation" +msgstr "icke-register som vänstersida av treställig operation" #: tree-cfg.c:3780 #, gcc-internal-format msgid "invalid operands in ternary operation" -msgstr "ogiltiga operander treställig operation" +msgstr "ogiltiga operander treställig operation" #: tree-cfg.c:3796 #, gcc-internal-format msgid "type mismatch in widening multiply-accumulate expression" -msgstr "typer stämmer inte i vidgande multiplicera-ackumulera-uttryck" +msgstr "typer stämmer inte i vidgande multiplicera-ackumulera-uttryck" #: tree-cfg.c:3810 #, gcc-internal-format msgid "type mismatch in fused multiply-add expression" -msgstr "typer stämmer inte i sammansmält multiplicera-addera-uttryck" +msgstr "typer stämmer inte i sammansmält multiplicera-addera-uttryck" #: tree-cfg.c:3836 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "type mismatch in vector permute expression" -msgstr "typfel i vektorskiftuttryck" +msgstr "typfel i vektorpermuteringsuttryck" #: tree-cfg.c:3848 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "vector types expected in vector permute expression" -msgstr "heltalsuttryck förväntades" +msgstr "vektortyper förväntades i vektorpermuteringsuttryck" #: tree-cfg.c:3862 #, gcc-internal-format @@ -19137,9 +19137,9 @@ msgid "vectors with different element number found in vector permute expression" msgstr "" #: tree-cfg.c:3875 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid mask type in vector permute expression" -msgstr "ogiltigt ökningsuttryck" +msgstr "ogiltig masktyp i vektorpermuteringsuttryck" #: tree-cfg.c:3911 #, gcc-internal-format @@ -19149,7 +19149,7 @@ msgstr "icketrivial konvertering vid tilldelning" #: tree-cfg.c:3928 #, gcc-internal-format msgid "invalid operand in unary expression" -msgstr "ogiltig operand till i unärt uttryck" +msgstr "ogiltig operand till i unärt uttryck" #: tree-cfg.c:3942 #, gcc-internal-format @@ -19159,7 +19159,7 @@ msgstr "typfel i adressuttryck" #: tree-cfg.c:3968 tree-cfg.c:3994 #, gcc-internal-format msgid "invalid rhs for gimple memory store" -msgstr "ogiltig högersida för gimple-minneslagring" +msgstr "ogiltig högersida för gimple-minneslagring" #: tree-cfg.c:4056 #, gcc-internal-format @@ -19174,7 +19174,7 @@ msgstr "ogiltig konvertering i retursats" #: tree-cfg.c:4094 #, gcc-internal-format msgid "goto destination is neither a label nor a pointer" -msgstr "goto-destination är varken en etikett eller en pekare" +msgstr "goto-destination är varken en etikett eller en pekare" #: tree-cfg.c:4109 #, gcc-internal-format @@ -19189,12 +19189,12 @@ msgstr "felaktig post i label_to_block_map" #: tree-cfg.c:4161 #, gcc-internal-format msgid "incorrect setting of landing pad number" -msgstr "felaktig inställning av nummer på landningsplatta" +msgstr "felaktig inställning av nummer pÃ¥ landningsplatta" #: tree-cfg.c:4189 #, gcc-internal-format msgid "invalid comparison code in gimple cond" -msgstr "ogiltig jämförelsekod i gimple-villkor" +msgstr "ogiltig jämförelsekod i gimple-villkor" #: tree-cfg.c:4197 #, gcc-internal-format @@ -19229,22 +19229,22 @@ msgstr "verify_gimple misslyckades" #: tree-cfg.c:4443 #, gcc-internal-format msgid "dead STMT in EH table" -msgstr "dött STMT i EH-tabell" +msgstr "dött STMT i EH-tabell" #: tree-cfg.c:4477 #, gcc-internal-format msgid "gimple_bb (phi) is set to a wrong basic block" -msgstr "gimple_bb (phi) är satt till ett felaktigt grundblock" +msgstr "gimple_bb (phi) är satt till ett felaktigt grundblock" #: tree-cfg.c:4489 tree-cfg.c:4523 #, gcc-internal-format msgid "incorrect sharing of tree nodes" -msgstr "felaktig delning av trädnoder" +msgstr "felaktig delning av trädnoder" #: tree-cfg.c:4512 #, gcc-internal-format msgid "gimple_bb (stmt) is set to a wrong basic block" -msgstr "gimple_bb (sats) är satt till ett felaktigt grundblock" +msgstr "gimple_bb (sats) är satt till ett felaktigt grundblock" #: tree-cfg.c:4538 #, gcc-internal-format @@ -19254,12 +19254,12 @@ msgstr "i sats" #: tree-cfg.c:4553 #, gcc-internal-format msgid "statement marked for throw, but doesn%'t" -msgstr "sats markerad för att kasta, men gör inte det" +msgstr "sats markerad för att kasta, men gör inte det" #: tree-cfg.c:4560 #, gcc-internal-format msgid "statement marked for throw in middle of block" -msgstr "sats markerad för att kasta i mitten av block" +msgstr "sats markerad för att kasta i mitten av block" #: tree-cfg.c:4601 #, gcc-internal-format @@ -19274,7 +19274,7 @@ msgstr "EXIT_BLOCK har IL associerat med sig" #: tree-cfg.c:4614 #, gcc-internal-format, gfc-internal-format msgid "fallthru to exit from bb %d" -msgstr "fall igenom till utgång från bb %d" +msgstr "fall igenom till utgÃ¥ng frÃ¥n bb %d" #: tree-cfg.c:4638 #, gcc-internal-format @@ -19294,24 +19294,24 @@ msgstr "etikett " #: tree-cfg.c:4680 #, gcc-internal-format, gfc-internal-format msgid "control flow in the middle of basic block %d" -msgstr "flödesstyrning mitt i grundblock %d" +msgstr "flödesstyrning mitt i grundblock %d" # bb -> basic block -> grundblock -> gb #: tree-cfg.c:4713 #, gcc-internal-format, gfc-internal-format msgid "fallthru edge after a control statement in bb %d" -msgstr "fall igenom-båge efter styrsats i gb %d" +msgstr "fall igenom-bÃ¥ge efter styrsats i gb %d" # bb -> basic block -> grundblock -> gb #: tree-cfg.c:4726 #, gcc-internal-format, gfc-internal-format msgid "true/false edge after a non-GIMPLE_COND in bb %d" -msgstr "sant/falskt-båge efter en icke-GIMPLE_COND i gb %d" +msgstr "sant/falskt-bÃ¥ge efter en icke-GIMPLE_COND i gb %d" #: tree-cfg.c:4749 tree-cfg.c:4771 tree-cfg.c:4788 tree-cfg.c:4857 #, gcc-internal-format, gfc-internal-format msgid "wrong outgoing edge flags at end of bb %d" -msgstr "felaktiga utgående bågeflaggor vid slutet av bb %d" +msgstr "felaktiga utgÃ¥ende bÃ¥geflaggor vid slutet av bb %d" #: tree-cfg.c:4759 #, gcc-internal-format, gfc-internal-format @@ -19321,27 +19321,27 @@ msgstr "uttrycklig goto vid slutet av bb %d" #: tree-cfg.c:4793 #, gcc-internal-format, gfc-internal-format msgid "return edge does not point to exit in bb %d" -msgstr "returbåge pekar inte på utgång i bb %d" +msgstr "returbÃ¥ge pekar inte pÃ¥ utgÃ¥ng i bb %d" #: tree-cfg.c:4823 #, gcc-internal-format msgid "found default case not at the start of case vector" -msgstr "hittade standardfall som inte var vid början av case-vektor" +msgstr "hittade standardfall som inte var vid början av case-vektor" #: tree-cfg.c:4831 #, gcc-internal-format msgid "case labels not sorted: " -msgstr "case-etiketter är inte sorterade: " +msgstr "case-etiketter är inte sorterade: " #: tree-cfg.c:4848 #, gcc-internal-format, gfc-internal-format msgid "extra outgoing edge %d->%d" -msgstr "extra utgående båge %d->%d" +msgstr "extra utgÃ¥ende bÃ¥ge %d->%d" #: tree-cfg.c:4871 #, gcc-internal-format, gfc-internal-format msgid "missing edge %i->%i" -msgstr "båge saknas %i->%i" +msgstr "bÃ¥ge saknas %i->%i" #: tree-cfg.c:7527 #, gcc-internal-format @@ -19351,37 +19351,37 @@ msgstr "%<noreturn%>-funktion returnerar" #: tree-cfg.c:7547 #, gcc-internal-format msgid "control reaches end of non-void function" -msgstr "flödet når slutet på en icke-void-funktion" +msgstr "flödet nÃ¥r slutet pÃ¥ en icke-void-funktion" #: tree-cfg.c:7685 #, gcc-internal-format msgid "ignoring return value of %qD, declared with attribute warn_unused_result" -msgstr "ignorerar returvärdet av %qD, deklarerad med attributet warn_unused_result" +msgstr "ignorerar returvärdet av %qD, deklarerad med attributet warn_unused_result" #: tree-cfg.c:7690 #, gcc-internal-format msgid "ignoring return value of function declared with attribute warn_unused_result" -msgstr "ignorerar returvärdet av funktion deklarerad med attributet warn_unused_result" +msgstr "ignorerar returvärdet av funktion deklarerad med attributet warn_unused_result" #: tree-dump.c:932 #, gcc-internal-format msgid "could not open dump file %qs: %m" -msgstr "det gick inte att öppna dump-filen %qs: %m" +msgstr "det gick inte att öppna dump-filen %qs: %m" #: tree-dump.c:1065 #, gcc-internal-format msgid "ignoring unknown option %q.*s in %<-fdump-%s%>" -msgstr "ignorerar okänt alternativ %q.*s i %<-fdump-%s%>" +msgstr "ignorerar okänt alternativ %q.*s i %<-fdump-%s%>" #: tree-eh.c:4320 #, gcc-internal-format, gfc-internal-format msgid "BB %i has multiple EH edges" -msgstr "BB %i har flera EH-bågar" +msgstr "BB %i har flera EH-bÃ¥gar" #: tree-eh.c:4332 #, gcc-internal-format, gfc-internal-format msgid "BB %i can not throw but has an EH edge" -msgstr "BB %i kan inte kasta men har en EH-båge" +msgstr "BB %i kan inte kasta men har en EH-bÃ¥ge" #: tree-eh.c:4340 #, gcc-internal-format, gfc-internal-format @@ -19391,32 +19391,32 @@ msgstr "BB %i:s sista sats har felaktigt satt lp" #: tree-eh.c:4346 #, gcc-internal-format, gfc-internal-format msgid "BB %i is missing an EH edge" -msgstr "BB %i sakar en EH-båge" +msgstr "BB %i sakar en EH-bÃ¥ge" #: tree-eh.c:4352 #, gcc-internal-format, gfc-internal-format msgid "Incorrect EH edge %i->%i" -msgstr "Felaktig EH-båge %i->%i" +msgstr "Felaktig EH-bÃ¥ge %i->%i" #: tree-eh.c:4386 tree-eh.c:4405 #, gcc-internal-format, gfc-internal-format msgid "BB %i is missing an edge" -msgstr "BB %i saknar en båge" +msgstr "BB %i saknar en bÃ¥ge" #: tree-eh.c:4422 #, gcc-internal-format, gfc-internal-format msgid "BB %i too many fallthru edges" -msgstr "BB %i har för många fall-igenom-bågar" +msgstr "BB %i har för mÃ¥nga fall-igenom-bÃ¥gar" #: tree-eh.c:4431 #, gcc-internal-format, gfc-internal-format msgid "BB %i has incorrect edge" -msgstr "BB %i har felaktig båge" +msgstr "BB %i har felaktig bÃ¥ge" #: tree-eh.c:4437 #, gcc-internal-format, gfc-internal-format msgid "BB %i has incorrect fallthru edge" -msgstr "BB %i har felaktig fall-igenom-båge" +msgstr "BB %i har felaktig fall-igenom-bÃ¥ge" #: tree-inline.c:3020 #, gcc-internal-format @@ -19431,57 +19431,57 @@ msgstr "funktion %q+F kan aldrig kopieras eftersom den sparar adressen av en lok #: tree-inline.c:3074 #, gcc-internal-format msgid "function %q+F can never be inlined because it uses alloca (override using the always_inline attribute)" -msgstr "funktion %q+F kan aldrig inline:as för att den använder alloca (åsidosätt genom att använda attributet always_inline)" +msgstr "funktion %q+F kan aldrig inline:as för att den använder alloca (Ã¥sidosätt genom att använda attributet always_inline)" #: tree-inline.c:3088 #, gcc-internal-format msgid "function %q+F can never be inlined because it uses setjmp" -msgstr "funktion %q+F kan aldrig inline:as eftersom den använder setjmp" +msgstr "funktion %q+F kan aldrig inline:as eftersom den använder setjmp" #: tree-inline.c:3102 #, gcc-internal-format msgid "function %q+F can never be inlined because it uses variable argument lists" -msgstr "funktion %q+F kan aldrig inline:as eftersom den använder variabel argumentlista" +msgstr "funktion %q+F kan aldrig inline:as eftersom den använder variabel argumentlista" #: tree-inline.c:3114 #, gcc-internal-format msgid "function %q+F can never be inlined because it uses setjmp-longjmp exception handling" -msgstr "funktion %q+F kan aldrig inline:as eftersom den använder setjmp-lonjgmp-undantagshantering" +msgstr "funktion %q+F kan aldrig inline:as eftersom den använder setjmp-lonjgmp-undantagshantering" #: tree-inline.c:3122 #, gcc-internal-format msgid "function %q+F can never be inlined because it uses non-local goto" -msgstr "funktion %q+F kan aldrig inline:as eftersom den använder icke-lokala goto" +msgstr "funktion %q+F kan aldrig inline:as eftersom den använder icke-lokala goto" #: tree-inline.c:3134 #, gcc-internal-format msgid "function %q+F can never be inlined because it uses __builtin_return or __builtin_apply_args" -msgstr "funktion %q+F kan aldrig inline:as eftersom den använder __builtin_return eller __builtin_apply_args" +msgstr "funktion %q+F kan aldrig inline:as eftersom den använder __builtin_return eller __builtin_apply_args" #: tree-inline.c:3154 #, gcc-internal-format msgid "function %q+F can never be inlined because it contains a computed goto" -msgstr "funktion %q+F kan aldrig inline:as eftersom den innehåller ett beräknat goto" +msgstr "funktion %q+F kan aldrig inline:as eftersom den innehÃ¥ller ett beräknat goto" #: tree-inline.c:3234 #, gcc-internal-format msgid "function %q+F can never be inlined because it is suppressed using -fno-inline" -msgstr "funktionen %q+F kan aldrig vara inline eftersom det stängs av av -fno-inline" +msgstr "funktionen %q+F kan aldrig vara inline eftersom det stängs av av -fno-inline" #: tree-inline.c:3242 #, gcc-internal-format msgid "function %q+F can never be inlined because it uses attributes conflicting with inlining" -msgstr "funktionen %q+F kan aldrig vara inline eftersom den använder attribut som står i konflikt med inline" +msgstr "funktionen %q+F kan aldrig vara inline eftersom den använder attribut som stÃ¥r i konflikt med inline" #: tree-inline.c:3823 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "inlining failed in call to always_inline %q+F: %s" -msgstr "inline:ing misslyckades i anrop av %q+F: %s" +msgstr "inline:ing misslyckades i anrop av always_inline %q+F: %s" #: tree-inline.c:3825 tree-inline.c:3840 #, gcc-internal-format msgid "called from here" -msgstr "anropad härifrån" +msgstr "anropad härifrÃ¥n" #: tree-inline.c:3838 #, gcc-internal-format @@ -19491,32 +19491,32 @@ msgstr "inline:ing misslyckades i anrop av %q+F: %s" #: tree-mudflap.c:897 #, gcc-internal-format msgid "mudflap checking not yet implemented for ARRAY_RANGE_REF" -msgstr "mudflap-kontroll ännu inte implementerad för ARRAY_RANGE_REF" +msgstr "mudflap-kontroll ännu inte implementerad för ARRAY_RANGE_REF" #: tree-mudflap.c:1090 #, gcc-internal-format msgid "mudflap cannot track %qE in stub function" -msgstr "mudflap kan inte följa %qE i stubbfunktion" +msgstr "mudflap kan inte följa %qE i stubbfunktion" #: tree-mudflap.c:1334 #, gcc-internal-format msgid "mudflap cannot track unknown size extern %qE" -msgstr "mudflap kan inte följa extern %qE av okänd storlek" +msgstr "mudflap kan inte följa extern %qE av okänd storlek" #: tree-nomudflap.c:47 #, gcc-internal-format msgid "mudflap: this language is not supported" -msgstr "mudflap: detta språk stöds inte" +msgstr "mudflap: detta sprÃ¥k stöds inte" #: tree-optimize.c:448 #, gcc-internal-format msgid "size of return value of %q+D is %u bytes" -msgstr "storleken på returvärdet från %q+D är %u byte" +msgstr "storleken pÃ¥ returvärdet frÃ¥n %q+D är %u byte" #: tree-optimize.c:451 #, gcc-internal-format msgid "size of return value of %q+D is larger than %wd bytes" -msgstr "storleken på returvärdet från %q+D är större än %wd byte" +msgstr "storleken pÃ¥ returvärdet frÃ¥n %q+D är större än %wd byte" #: tree-outof-ssa.c:784 tree-outof-ssa.c:841 tree-ssa-coalesce.c:951 #: tree-ssa-coalesce.c:966 tree-ssa-coalesce.c:1188 tree-ssa-live.c:1340 @@ -19535,9 +19535,9 @@ msgid "virtual definition of statement not up-to-date" msgstr "" #: tree-ssa-operands.c:1123 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "virtual def operand missing for stmt" -msgstr "ogiltig operand i retursats" +msgstr "virtuell definitionsoperand saknas för sats" #: tree-ssa-operands.c:1133 #, gcc-internal-format @@ -19555,19 +19555,19 @@ msgid "excess use operand for stmt" msgstr "" #: tree-ssa-operands.c:1164 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "use operand missing for stmt" -msgstr "operandnummer saknas efter %%-tecken" +msgstr "användningsoperand saknas för sats" #: tree-ssa-operands.c:1181 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "excess def operand for stmt" -msgstr "deklaration eller sats förväntades" +msgstr "överskjutande definitionsoperand för sats" #: tree-ssa-operands.c:1189 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "def operand missing for stmt" -msgstr "operandnummer saknas efter %%-tecken" +msgstr "definitionsoperand saknas för sats" #: tree-ssa-operands.c:1196 #, gcc-internal-format @@ -19577,22 +19577,22 @@ msgstr "" #: tree-ssa-uninit.c:1958 tree-ssa.c:1655 #, gcc-internal-format msgid "%qD may be used uninitialized in this function" -msgstr "%qD kan användas oinitierad i denna funktion" +msgstr "%qD kan användas oinitierad i denna funktion" #: tree-ssa.c:628 #, gcc-internal-format msgid "expected an SSA_NAME object" -msgstr "förväntade ett SSA_NAME-objekt" +msgstr "förväntade ett SSA_NAME-objekt" #: tree-ssa.c:634 #, gcc-internal-format msgid "type mismatch between an SSA_NAME and its symbol" -msgstr "typer stämmer inte mellan ett SSA_NAME och dess symbol" +msgstr "typer stämmer inte mellan ett SSA_NAME och dess symbol" #: tree-ssa.c:640 #, gcc-internal-format msgid "found an SSA_NAME that had been released into the free pool" -msgstr "fann ett SSA_NAME som hade släppts till den fria poolen" +msgstr "fann ett SSA_NAME som hade släppts till den fria poolen" #: tree-ssa.c:646 #, gcc-internal-format @@ -19602,7 +19602,7 @@ msgstr "hittade en virtuell definition av ett GIMPLE-register" #: tree-ssa.c:652 #, gcc-internal-format msgid "virtual SSA name for non-VOP decl" -msgstr "virtuellt SSA-namn för icke-VOP-deklaration" +msgstr "virtuellt SSA-namn för icke-VOP-deklaration" #: tree-ssa.c:658 #, gcc-internal-format @@ -19612,22 +19612,22 @@ msgstr "hittade en verklig definition av ett icke-register" #: tree-ssa.c:665 #, gcc-internal-format msgid "found a default name with a non-empty defining statement" -msgstr "hittade ett standardnamn med en definierande sats som inte är tom" +msgstr "hittade ett standardnamn med en definierande sats som inte är tom" #: tree-ssa.c:694 #, gcc-internal-format msgid "RESULT_DECL should be read only when DECL_BY_REFERENCE is set" -msgstr "RESULT_DECL bör läsas endast när DECL_BY_REFERENCE är satt" +msgstr "RESULT_DECL bör läsas endast när DECL_BY_REFERENCE är satt" #: tree-ssa.c:700 #, gcc-internal-format, gfc-internal-format msgid "SSA_NAME created in two different blocks %i and %i" -msgstr "SSA_NAME skapade i två olika block %i och %i" +msgstr "SSA_NAME skapade i tvÃ¥ olika block %i och %i" #: tree-ssa.c:709 tree-ssa.c:1023 #, gcc-internal-format msgid "SSA_NAME_DEF_STMT is wrong" -msgstr "SSA_NAME_DEF_STMT är fel" +msgstr "SSA_NAME_DEF_STMT är fel" #: tree-ssa.c:761 #, gcc-internal-format @@ -19637,12 +19637,12 @@ msgstr "definition saknas" #: tree-ssa.c:767 #, gcc-internal-format, gfc-internal-format msgid "definition in block %i does not dominate use in block %i" -msgstr "definition i block %i dominerar användningen i block %i" +msgstr "definition i block %i dominerar användningen i block %i" #: tree-ssa.c:775 #, gcc-internal-format, gfc-internal-format msgid "definition in block %i follows the use" -msgstr "definition i block %i följer dess användning" +msgstr "definition i block %i följer dess användning" #: tree-ssa.c:782 #, gcc-internal-format @@ -19657,32 +19657,32 @@ msgstr "ingen immediate_use-lista" #: tree-ssa.c:802 #, gcc-internal-format msgid "wrong immediate use list" -msgstr "fel omedelbar användningslista" +msgstr "fel omedelbar användningslista" #: tree-ssa.c:836 #, gcc-internal-format msgid "incoming edge count does not match number of PHI arguments" -msgstr "inkommande bågantal stämmer inte med antalet PHI-argument" +msgstr "inkommande bÃ¥gantal stämmer inte med antalet PHI-argument" #: tree-ssa.c:850 #, gcc-internal-format, gfc-internal-format msgid "PHI argument is missing for edge %d->%d" -msgstr "PHI-argument saknas för bågen %i->%i" +msgstr "PHI-argument saknas för bÃ¥gen %i->%i" #: tree-ssa.c:859 #, gcc-internal-format msgid "PHI argument is not SSA_NAME, or invariant" -msgstr "PHI-argument är inte SSA_NAME eller invariant" +msgstr "PHI-argument är inte SSA_NAME eller invariant" #: tree-ssa.c:887 #, gcc-internal-format, gfc-internal-format msgid "wrong edge %d->%d for PHI argument" -msgstr "fel båge %d->%d för PHI-argument" +msgstr "fel bÃ¥ge %d->%d för PHI-argument" #: tree-ssa.c:970 #, gcc-internal-format, gfc-internal-format msgid "AUX pointer initialized for edge %d->%d" -msgstr "AUX-pekare initierad för bågen %i->%i" +msgstr "AUX-pekare initierad för bÃ¥gen %i->%i" #: tree-ssa.c:995 #, gcc-internal-format @@ -19697,22 +19697,22 @@ msgstr "verify_ssa misslyckades" #: tree-ssa.c:1618 varasm.c:321 #, gcc-internal-format msgid "%qD was declared here" -msgstr "%qD deklarerades här" +msgstr "%qD deklarerades här" #: tree-ssa.c:1650 #, gcc-internal-format msgid "%qD is used uninitialized in this function" -msgstr "%qD används oinitierad i denna funktion" +msgstr "%qD används oinitierad i denna funktion" #: tree-ssa.c:1687 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE is used uninitialized in this function" -msgstr "%qD används oinitierad i denna funktion" +msgstr "%qE används oinitierad i denna funktion" #: tree-ssa.c:1692 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE may be used uninitialized in this function" -msgstr "%qD kan användas oinitierad i denna funktion" +msgstr "%qE kan användas oinitierad i denna funktion" #: tree-streamer-in.c:306 tree-streamer-in.c:1075 #, gcc-internal-format @@ -19722,22 +19722,22 @@ msgstr "" #: tree-streamer-in.c:311 tree-streamer-in.c:1083 #, gcc-internal-format msgid "target specific builtin not available" -msgstr "målspecifik inbyggd funktion är inte tillgänglig" +msgstr "mÃ¥lspecifik inbyggd funktion är inte tillgänglig" #: tree-streamer-in.c:903 #, gcc-internal-format msgid "cl_target_option size mismatch in LTO reader and writer" -msgstr "cl_target_option-storlek stämmer inte överens i LTO-läsare och -skrivare" +msgstr "cl_target_option-storlek stämmer inte överens i LTO-läsare och -skrivare" #: tree-streamer-in.c:920 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cl_optimization size mismatch in LTO reader and writer" -msgstr "cl_target_option-storlek stämmer inte överens i LTO-läsare och -skrivare" +msgstr "cl_optimization-storlek stämmer inte överens i LTO-läsare och -skrivare" #: tree-streamer-out.c:364 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "tree bytecode streams do not support machine specific builtin functions on this target" -msgstr "gimple-bytekodströmmar stödjer inte maskinspecifika inbyggda fungerioner för detta mål" +msgstr "trädbytekodströmmar stödjer inte maskinspecifika inbyggda fungerioner för detta mÃ¥l" #: tree-vect-generic.c:244 #, gcc-internal-format @@ -19762,62 +19762,62 @@ msgstr "" #: tree-vrp.c:5295 #, gcc-internal-format msgid "array subscript is outside array bounds" -msgstr "vektorindex är utanför vektorgränserna" +msgstr "vektorindex är utanför vektorgränserna" #: tree-vrp.c:5307 tree-vrp.c:5394 #, gcc-internal-format msgid "array subscript is above array bounds" -msgstr "vektorindex är ovanför vektorgränsen" +msgstr "vektorindex är ovanför vektorgränsen" #: tree-vrp.c:5314 tree-vrp.c:5382 #, gcc-internal-format msgid "array subscript is below array bounds" -msgstr "vektorindex är under vektorgränsen" +msgstr "vektorindex är under vektorgränsen" #: tree-vrp.c:6023 #, gcc-internal-format msgid "assuming signed overflow does not occur when simplifying conditional to constant" -msgstr "antar att teckenspill inte förekommer vid förenkling av villkor till konstant" +msgstr "antar att teckenspill inte förekommer vid förenkling av villkor till konstant" #: tree-vrp.c:6029 #, gcc-internal-format msgid "assuming signed overflow does not occur when simplifying conditional" -msgstr "antar att teckenspill inte förekommer vid förenkling av villkor" +msgstr "antar att teckenspill inte förekommer vid förenkling av villkor" #: tree-vrp.c:6073 #, gcc-internal-format msgid "comparison always false due to limited range of data type" -msgstr "jämförelsen är alltid falsk på grund av begränsat intervall för datatypen" +msgstr "jämförelsen är alltid falsk pÃ¥ grund av begränsat intervall för datatypen" #: tree-vrp.c:6075 #, gcc-internal-format msgid "comparison always true due to limited range of data type" -msgstr "jämförelsen är alltid sann på grund av begränsat intervall för datatypen" +msgstr "jämförelsen är alltid sann pÃ¥ grund av begränsat intervall för datatypen" #: tree-vrp.c:6857 #, gcc-internal-format msgid "assuming signed overflow does not occur when simplifying %</%> or %<%%%> to %<>>%> or %<&%>" -msgstr "antar att teckenspill inte förekommer vid förenkling av %</%> eller %<%%%> till %<>>%> eller %<&%>" +msgstr "antar att teckenspill inte förekommer vid förenkling av %</%> eller %<%%%> till %<>>%> eller %<&%>" #: tree-vrp.c:6939 #, gcc-internal-format msgid "assuming signed overflow does not occur when simplifying %<abs (X)%> to %<X%> or %<-X%>" -msgstr "antar att teckenspill inte förekommer vid förenkling av %<abs (X)%> till %<X%> eller %<-X%>" +msgstr "antar att teckenspill inte förekommer vid förenkling av %<abs (X)%> till %<X%> eller %<-X%>" #: tree.c:4235 #, gcc-internal-format msgid "ignoring attributes applied to %qT after definition" -msgstr "ignorerar attribut använda på %qT efter dess definition" +msgstr "ignorerar attribut använda pÃ¥ %qT efter dess definition" #: tree.c:5457 #, gcc-internal-format msgid "%q+D already declared with dllexport attribute: dllimport ignored" -msgstr "%q+D är redan deklarerad med attributet dllexport: dllimport ignoreras" +msgstr "%q+D är redan deklarerad med attributet dllexport: dllimport ignoreras" #: tree.c:5469 #, gcc-internal-format msgid "%q+D redeclared without dllimport attribute after being referenced with dll linkage" -msgstr "%q+D omdeklarerad utan attributet dllimport efter att ha refererats med länkklass dll" +msgstr "%q+D omdeklarerad utan attributet dllimport efter att ha refererats med länkklass dll" #: tree.c:5484 #, gcc-internal-format @@ -19855,17 +19855,17 @@ msgstr "inline-funktionen %q+D deklarerades som dllimport: attributet ignorerat" #: tree.c:5575 #, gcc-internal-format msgid "function %q+D definition is marked dllimport" -msgstr "funktionsdefinition %q+D är markerad dllimport" +msgstr "funktionsdefinition %q+D är markerad dllimport" #: tree.c:5583 #, gcc-internal-format msgid "variable %q+D definition is marked dllimport" -msgstr "variabeldefinition %q+D är markerad dllimport" +msgstr "variabeldefinition %q+D är markerad dllimport" #: tree.c:5611 #, gcc-internal-format msgid "external linkage required for symbol %q+D because of %qE attribute" -msgstr "extern länkklass krävs för symbol %q+D på grund av attributet %qE" +msgstr "extern länkklass krävs för symbol %q+D pÃ¥ grund av attributet %qE" #: tree.c:5625 #, gcc-internal-format @@ -19875,7 +19875,7 @@ msgstr "%qE implicerar standardsynlighet, men %qD har redan deklarerats med anna #: tree.c:7375 #, gcc-internal-format msgid "arrays of functions are not meaningful" -msgstr "vektorer av funktioner är inte meningsfulla" +msgstr "vektorer av funktioner är inte meningsfulla" #: tree.c:7542 #, gcc-internal-format @@ -19885,107 +19885,107 @@ msgstr "funktionsreturtyp kan inte vara funktion" #: tree.c:8838 tree.c:8923 tree.c:8984 #, gcc-internal-format, gfc-internal-format msgid "tree check: %s, have %s in %s, at %s:%d" -msgstr "trädkontroll: %s, har %s i %s, vid %s:%d" +msgstr "trädkontroll: %s, har %s i %s, vid %s:%d" #: tree.c:8875 #, gcc-internal-format, gfc-internal-format msgid "tree check: expected none of %s, have %s in %s, at %s:%d" -msgstr "trädkontroll: förväntade ingen av %s, har %s i %s, vid %s:%d" +msgstr "trädkontroll: förväntade ingen av %s, har %s i %s, vid %s:%d" #: tree.c:8888 #, gcc-internal-format msgid "tree check: expected class %qs, have %qs (%s) in %s, at %s:%d" -msgstr "trädkontroll: förväntade klass %qs, har %qs (%s) i %s, vid %s:%d" +msgstr "trädkontroll: förväntade klass %qs, har %qs (%s) i %s, vid %s:%d" #: tree.c:8937 #, gcc-internal-format msgid "tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d" -msgstr "trädkontroll: klass %qs förväntades inte, har %qs (%s) i %s, vid %s:%d" +msgstr "trädkontroll: klass %qs förväntades inte, har %qs (%s) i %s, vid %s:%d" #: tree.c:8950 #, gcc-internal-format, gfc-internal-format msgid "tree check: expected omp_clause %s, have %s in %s, at %s:%d" -msgstr "trädkontroll: omp_clause %s förväntades, har %s i %s, vid %s:%d" +msgstr "trädkontroll: omp_clause %s förväntades, har %s i %s, vid %s:%d" #: tree.c:9010 #, gcc-internal-format msgid "tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d" -msgstr "trädkontroll: förväntade träd som innehåller posten %qs, har %qs i %s, vid %s:%d" +msgstr "trädkontroll: förväntade träd som innehÃ¥ller posten %qs, har %qs i %s, vid %s:%d" #: tree.c:9024 #, gcc-internal-format, gfc-internal-format msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d" -msgstr "trädkontroll: använde element %d av tree_vec med %d element i %s, vid %s:%d" +msgstr "trädkontroll: använde element %d av tree_vec med %d element i %s, vid %s:%d" #: tree.c:9037 #, gcc-internal-format, gfc-internal-format msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d" -msgstr "trädkontroll: använde operand %d av %s med %d operander i %s, vid %s:%d" +msgstr "trädkontroll: använde operand %d av %s med %d operander i %s, vid %s:%d" #: tree.c:9050 #, gcc-internal-format, gfc-internal-format msgid "tree check: accessed operand %d of omp_clause %s with %d operands in %s, at %s:%d" -msgstr "trädkontroll: använde operand %d av omp_clause %s med %d operander i %s, vid %s:%d" +msgstr "trädkontroll: använde operand %d av omp_clause %s med %d operander i %s, vid %s:%d" #: tree.c:11330 #, gcc-internal-format msgid "%qD is deprecated (declared at %s:%d): %s" -msgstr "%qD bör undvikas (deklarerad vid %s:%d): %s" +msgstr "%qD bör undvikas (deklarerad vid %s:%d): %s" #: tree.c:11334 #, gcc-internal-format msgid "%qD is deprecated (declared at %s:%d)" -msgstr "%qD bör undvikas (deklarerad vid %s:%d)" +msgstr "%qD bör undvikas (deklarerad vid %s:%d)" #: tree.c:11359 #, gcc-internal-format msgid "%qE is deprecated (declared at %s:%d): %s" -msgstr "%qE bör undvikas (deklarerad vid %s:%d): %s" +msgstr "%qE bör undvikas (deklarerad vid %s:%d): %s" #: tree.c:11363 #, gcc-internal-format msgid "%qE is deprecated (declared at %s:%d)" -msgstr "%qE bör undvikas (deklarerad vid %s:%d)" +msgstr "%qE bör undvikas (deklarerad vid %s:%d)" #: tree.c:11370 #, gcc-internal-format, gfc-internal-format msgid "type is deprecated (declared at %s:%d): %s" -msgstr "typen bör undvikas (deklarerad vid %s:%d): %s" +msgstr "typen bör undvikas (deklarerad vid %s:%d): %s" #: tree.c:11374 #, gcc-internal-format, gfc-internal-format msgid "type is deprecated (declared at %s:%d)" -msgstr "typen bör undvikas (deklarerad vid %s:%d)" +msgstr "typen bör undvikas (deklarerad vid %s:%d)" #: tree.c:11383 #, gcc-internal-format msgid "%qE is deprecated: %s" -msgstr "%qE bör undvikas: %s" +msgstr "%qE bör undvikas: %s" #: tree.c:11386 #, gcc-internal-format msgid "%qE is deprecated" -msgstr "%qE bör undvikas" +msgstr "%qE bör undvikas" #: tree.c:11391 #, gcc-internal-format, gfc-internal-format msgid "type is deprecated: %s" -msgstr "typen bör undvikas: %s" +msgstr "typen bör undvikas: %s" #: tree.c:11394 #, gcc-internal-format msgid "type is deprecated" -msgstr "typen bör undvikas" +msgstr "typen bör undvikas" #: value-prof.c:376 #, gcc-internal-format msgid "dead histogram" -msgstr "dött histogram" +msgstr "dött histogram" #: value-prof.c:407 #, gcc-internal-format msgid "Histogram value statement does not correspond to the statement it is associated with" -msgstr "Histogramvärdesats motsvarar inte satsen den är associerat med" +msgstr "Histogramvärdesats motsvarar inte satsen den är associerat med" #: value-prof.c:420 #, gcc-internal-format @@ -19996,12 +19996,12 @@ msgstr "verify_histograms misslyckades" #: value-prof.c:467 #, gcc-internal-format, gfc-internal-format msgid "correcting inconsistent value profile: %s profiler overall count (%d) does not match BB count (%d)" -msgstr "rättar inkonsekvent värdeprofil: %s-profilerarens totala antal (%d) stämmer inte med GB-antalet (%d)" +msgstr "rättar inkonsekvent värdeprofil: %s-profilerarens totala antal (%d) stämmer inte med GB-antalet (%d)" #: value-prof.c:477 #, gcc-internal-format, gfc-internal-format msgid "corrupted value profile: %s profile counter (%d out of %d) inconsistent with basic-block count (%d)" -msgstr "trasig värdeprofil: profileringsräknaren %s (%d av %d) stämmer inte med GB-antal (%d)" +msgstr "trasig värdeprofil: profileringsräknaren %s (%d av %d) stämmer inte med GB-antal (%d)" #: value-prof.c:1105 value-prof.c:1107 #, gcc-internal-format, gfc-internal-format @@ -20016,62 +20016,62 @@ msgstr "" #: var-tracking.c:6582 #, gcc-internal-format msgid "variable tracking size limit exceeded with -fvar-tracking-assignments, retrying without" -msgstr "storleksgräns på variabelspårning överskriden med -vfar-tracking-assignments, försöker igen utan" +msgstr "storleksgräns pÃ¥ variabelspÃ¥rning överskriden med -vfar-tracking-assignments, försöker igen utan" #: var-tracking.c:6586 #, gcc-internal-format msgid "variable tracking size limit exceeded" -msgstr "storleksgräns på variabelspårning överskriden" +msgstr "storleksgräns pÃ¥ variabelspÃ¥rning överskriden" #: varasm.c:317 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%+D causes a section type conflict with %D" -msgstr "%+D orsakar en sektionstypkonflikt" +msgstr "%+D orsakar en sektionstypkonflikt med %D" #: varasm.c:958 #, gcc-internal-format msgid "alignment of %q+D is greater than maximum object file alignment. Using %d" -msgstr "justeringen av %q+D är större än den objektfilers maximala justering. Använder %d" +msgstr "justeringen av %q+D är större än den objektfilers maximala justering. Använder %d" #: varasm.c:1196 varasm.c:1205 #, gcc-internal-format msgid "register name not specified for %q+D" -msgstr "inget registernamn angivet för %q+D" +msgstr "inget registernamn angivet för %q+D" #: varasm.c:1207 #, gcc-internal-format msgid "invalid register name for %q+D" -msgstr "ogiltig registernamn för %q+D" +msgstr "ogiltig registernamn för %q+D" #: varasm.c:1209 #, gcc-internal-format msgid "data type of %q+D isn%'t suitable for a register" -msgstr "datatyp %q+D passar inte för ett register" +msgstr "datatyp %q+D passar inte för ett register" #: varasm.c:1212 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "the register specified for %q+D cannot be accessed by the current target" -msgstr "registret angivet för %q+D passar inte för datatypen" +msgstr "registret angivet för %q+D kan inte nÃ¥s av det aktuella mÃ¥let" #: varasm.c:1215 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "the register specified for %q+D is not general enough to be used as a register variable" -msgstr "register använt till två globala registervariabler" +msgstr "registret angivet för %q+D är inte tillräckligt generellt för att användas som en registervariabel" #: varasm.c:1218 #, gcc-internal-format msgid "register specified for %q+D isn%'t suitable for data type" -msgstr "registret angivet för %q+D passar inte för datatypen" +msgstr "registret angivet för %q+D passar inte för datatypen" #: varasm.c:1228 #, gcc-internal-format msgid "global register variable has initial value" -msgstr "global registervariabel har startvärde" +msgstr "global registervariabel har startvärde" #: varasm.c:1232 #, gcc-internal-format msgid "optimization may eliminate reads and/or writes to register variables" -msgstr "optimering kan eliminera läsningar och/eller skrivningar till registervariabler" +msgstr "optimering kan eliminera läsningar och/eller skrivningar till registervariabler" #: varasm.c:1270 #, gcc-internal-format @@ -20081,123 +20081,123 @@ msgstr "registernamn angivet icke-registervariabel %q+D" #: varasm.c:1387 #, gcc-internal-format msgid "global destructors not supported on this target" -msgstr "globala destruerare stöds inte på denna målarkitektur" +msgstr "globala destruerare stöds inte pÃ¥ denna mÃ¥larkitektur" #: varasm.c:1453 #, gcc-internal-format msgid "global constructors not supported on this target" -msgstr "globala konstruerare stöds inte för denna målarkitektur" +msgstr "globala konstruerare stöds inte för denna mÃ¥larkitektur" #: varasm.c:1850 #, gcc-internal-format msgid "thread-local COMMON data not implemented" -msgstr "trådlokal COMMON-data är inte implementerat" +msgstr "trÃ¥dlokal COMMON-data är inte implementerat" #: varasm.c:1879 #, gcc-internal-format msgid "requested alignment for %q+D is greater than implemented alignment of %wu" -msgstr "efterfrågad justering för %q+D är större än implementerad justering av %wu" +msgstr "efterfrÃ¥gad justering för %q+D är större än implementerad justering av %wu" #: varasm.c:4566 #, gcc-internal-format msgid "initializer for integer/fixed-point value is too complicated" -msgstr "initierare för heltals-/fixdecimalvärde är för komplicerad" +msgstr "initierare för heltals-/fixdecimalvärde är för komplicerad" #: varasm.c:4571 #, gcc-internal-format msgid "initializer for floating value is not a floating constant" -msgstr "initierare för flyttalsvärde är inte en flyttalskonstant" +msgstr "initierare för flyttalsvärde är inte en flyttalskonstant" #: varasm.c:4878 #, gcc-internal-format msgid "invalid initial value for member %qE" -msgstr "ogiltigt startvärde för medlem %qE" +msgstr "ogiltigt startvärde för medlem %qE" #: varasm.c:5224 #, gcc-internal-format msgid "weak declaration of %q+D must be public" -msgstr "svagdeklaration av %q+D måste vara publik" +msgstr "svagdeklaration av %q+D mÃ¥ste vara publik" #: varasm.c:5226 #, gcc-internal-format msgid "weak declaration of %q+D not supported" -msgstr "svagdeklaration av %q+D stöds inte" +msgstr "svagdeklaration av %q+D stöds inte" #: varasm.c:5255 varasm.c:5831 #, gcc-internal-format msgid "only weak aliases are supported in this configuration" -msgstr "bara svaga alias stöds i denna konfiguration" +msgstr "bara svaga alias stöds i denna konfiguration" #: varasm.c:5474 #, gcc-internal-format msgid "weakref is not supported in this configuration" -msgstr "weakref stöds inte i denna konfiguration" +msgstr "weakref stöds inte i denna konfiguration" #: varasm.c:5497 varasm.c:5828 #, gcc-internal-format msgid "ifunc is not supported in this configuration" -msgstr "ifunc stödjs inte i denna konfiguration" +msgstr "ifunc stödjs inte i denna konfiguration" #: varasm.c:5751 #, gcc-internal-format msgid "%q+D aliased to undefined symbol %qE" -msgstr "%q+D är aliasat till en odefinierad symbol %qE" +msgstr "%q+D är aliasat till en odefinierad symbol %qE" #: varasm.c:5765 #, gcc-internal-format msgid "%q+D aliased to external symbol %qE" -msgstr "%q+D är aliasat till den externa symbolen %qE" +msgstr "%q+D är aliasat till den externa symbolen %qE" #: varasm.c:5805 #, gcc-internal-format msgid "weakref %q+D ultimately targets itself" -msgstr "weakref %q+D är ytterst sitt eget mål" +msgstr "weakref %q+D är ytterst sitt eget mÃ¥l" #: varasm.c:5814 #, gcc-internal-format msgid "weakref %q+D must have static linkage" -msgstr "weakref %q+D måste ha statisk länkklass" +msgstr "weakref %q+D mÃ¥ste ha statisk länkklass" #: varasm.c:5821 #, gcc-internal-format msgid "alias definitions not supported in this configuration" -msgstr "aliasdefinitioner stöds inte i denna konfiguration" +msgstr "aliasdefinitioner stöds inte i denna konfiguration" #: varasm.c:6047 config/sol2.c:155 config/i386/winnt.c:254 #, gcc-internal-format msgid "visibility attribute not supported in this configuration; ignored" -msgstr "synlighetsattribut stöds inte för denna konfiguration, ignoreras" +msgstr "synlighetsattribut stöds inte för denna konfiguration, ignoreras" #: vec.c:527 #, gcc-internal-format, gfc-internal-format msgid "vector %s %s domain error, in %s at %s:%u" -msgstr "vektor %s %s-domänfel i %s vid %s:%u" +msgstr "vektor %s %s-domänfel i %s vid %s:%u" #. Print an error message for unrecognized stab codes. #: xcoffout.c:194 #, gcc-internal-format msgid "no sclass for %s stab (0x%x)" -msgstr "ingen klass för %s-stab (0x%x)" +msgstr "ingen klass för %s-stab (0x%x)" #: lto-streamer.h:962 #, gcc-internal-format, gfc-internal-format msgid "bytecode stream: expected tag %s instead of %s" -msgstr "bytekodström: förväntade taggen %s istället för %s" +msgstr "bytekodström: förväntade taggen %s istället för %s" #: lto-streamer.h:972 #, gcc-internal-format, gfc-internal-format msgid "bytecode stream: tag %s is not in the expected range [%s, %s]" -msgstr "bytekodström: taggen %s ligger inte i det förväntade intervallet [%s, %s]" +msgstr "bytekodström: taggen %s ligger inte i det förväntade intervallet [%s, %s]" #: c-family/c-common.c:916 #, gcc-internal-format msgid "%qD is not defined outside of function scope" -msgstr "%qD är inte definierad utanför funktionsnivå" +msgstr "%qD är inte definierad utanför funktionsnivÃ¥" #: c-family/c-common.c:966 #, gcc-internal-format msgid "string length %qd is greater than the length %qd ISO C%d compilers are required to support" -msgstr "stränglängden %qd är större än den längden %qd som ISO C%d kompilatorer skall stödja" +msgstr "stränglängden %qd är större än den längden %qd som ISO C%d kompilatorer skall stödja" #: c-family/c-common.c:1494 c-family/c-common.c:1506 cp/semantics.c:6634 #: cp/semantics.c:8017 @@ -20238,27 +20238,27 @@ msgstr "spill i komplext flyttal i uttryck" #: c-family/c-common.c:1594 #, gcc-internal-format msgid "logical %<or%> applied to non-boolean constant" -msgstr "logiskt %<or%> använt på en icke-boolesk konstant" +msgstr "logiskt %<or%> använt pÃ¥ en icke-boolesk konstant" #: c-family/c-common.c:1597 #, gcc-internal-format msgid "logical %<and%> applied to non-boolean constant" -msgstr "logiskt %<and%> använt på en icke-boolesk konstant" +msgstr "logiskt %<and%> använt pÃ¥ en icke-boolesk konstant" #: c-family/c-common.c:1642 #, gcc-internal-format msgid "logical %<or%> of collectively exhaustive tests is always true" -msgstr "logiskt %<or%> av tillsammans uttömmande tester är alltid sant" +msgstr "logiskt %<or%> av tillsammans uttömmande tester är alltid sant" #: c-family/c-common.c:1646 #, gcc-internal-format msgid "logical %<and%> of mutually exclusive tests is always false" -msgstr "logiskt %<and%> mellan ömsesidigt uteslutande tester är alltid falskt" +msgstr "logiskt %<and%> mellan ömsesidigt uteslutande tester är alltid falskt" #: c-family/c-common.c:1681 #, gcc-internal-format msgid "type-punning to incomplete type might break strict-aliasing rules" -msgstr "typstampning till ofullständig typ kan bryta strikta aliasregler" +msgstr "typstampning till ofullständig typ kan bryta strikta aliasregler" #: c-family/c-common.c:1696 #, gcc-internal-format @@ -20273,7 +20273,7 @@ msgstr "dereferering av en typstampad pekare kan bryta strikta aliasregler" #: c-family/c-common.c:1752 #, gcc-internal-format msgid "first argument of %q+D should be %<int%>" -msgstr "första argumentet till %q+D skall vara %<int%>" +msgstr "första argumentet till %q+D skall vara %<int%>" #: c-family/c-common.c:1761 #, gcc-internal-format @@ -20283,17 +20283,17 @@ msgstr "andra argumentet till %q+D skall vara %<char **%>" #: c-family/c-common.c:1770 #, gcc-internal-format msgid "third argument of %q+D should probably be %<char **%>" -msgstr "tredje argumentet till %q+D skall förmodligen vara %<char **%>" +msgstr "tredje argumentet till %q+D skall förmodligen vara %<char **%>" #: c-family/c-common.c:1781 #, gcc-internal-format msgid "%q+D takes only zero or two arguments" -msgstr "%q+D tar bara noll eller två argument" +msgstr "%q+D tar bara noll eller tvÃ¥ argument" #: c-family/c-common.c:1830 #, gcc-internal-format msgid "use -flax-vector-conversions to permit conversions between vectors with differing element types or numbers of subparts" -msgstr "använd -flax-vector-conversions för att tillåta konvertering mellan vektorer med olika elementtyper eller antal underdelar" +msgstr "använd -flax-vector-conversions för att tillÃ¥ta konvertering mellan vektorer med olika elementtyper eller antal underdelar" #: c-family/c-common.c:2002 #, gcc-internal-format @@ -20303,27 +20303,27 @@ msgstr "negativt heltal implicit konverterat till unsigned typ" #: c-family/c-common.c:2008 #, gcc-internal-format msgid "conversion of unsigned constant value to negative integer" -msgstr "konvertering av teckenlöst konstantvärde till negativt heltal" +msgstr "konvertering av teckenlöst konstantvärde till negativt heltal" #: c-family/c-common.c:2102 #, gcc-internal-format msgid "conversion to %qT from %qT may change the sign of the result" -msgstr "konvertering till %qT från %qT kan ändra tecknet på resultatet" +msgstr "konvertering till %qT frÃ¥n %qT kan ändra tecknet pÃ¥ resultatet" #: c-family/c-common.c:2171 #, gcc-internal-format msgid "conversion to %qT from boolean expression" -msgstr "konvertering till %qT från booleskt uttryck" +msgstr "konvertering till %qT frÃ¥n booleskt uttryck" #: c-family/c-common.c:2178 #, gcc-internal-format msgid "conversion to %qT alters %qT constant value" -msgstr "konvertering till %qT ändrar konstant %qT värde" +msgstr "konvertering till %qT ändrar konstant %qT värde" #: c-family/c-common.c:2205 #, gcc-internal-format msgid "conversion to %qT from %qT may alter its value" -msgstr "konvertering till %qT från %qT kan ändra dess värde" +msgstr "konvertering till %qT frÃ¥n %qT kan ändra dess värde" #: c-family/c-common.c:2233 #, gcc-internal-format @@ -20338,7 +20338,7 @@ msgstr "spill i implicit konstant konvertering" #: c-family/c-common.c:2426 #, gcc-internal-format msgid "operation on %qE may be undefined" -msgstr "operation på %qE kan vara odefinierad" +msgstr "operation pÃ¥ %qE kan vara odefinierad" #: c-family/c-common.c:2737 #, gcc-internal-format @@ -20348,127 +20348,127 @@ msgstr "case-etikett reducerar inte till en heltalskonstant" #: c-family/c-common.c:2777 #, gcc-internal-format msgid "case label value is less than minimum value for type" -msgstr "case-etikettvärde är mindre än minsta värdet för sin typ" +msgstr "case-etikettvärde är mindre än minsta värdet för sin typ" #: c-family/c-common.c:2785 #, gcc-internal-format msgid "case label value exceeds maximum value for type" -msgstr "case-etikettvärde överskrider det maximala värdet för sin typ" +msgstr "case-etikettvärde överskrider det maximala värdet för sin typ" #: c-family/c-common.c:2793 #, gcc-internal-format msgid "lower value in case label range less than minimum value for type" -msgstr "undre gräns i case-etikettintervall underskrider minsta värdet för sin typ" +msgstr "undre gräns i case-etikettintervall underskrider minsta värdet för sin typ" #: c-family/c-common.c:2802 #, gcc-internal-format msgid "upper value in case label range exceeds maximum value for type" -msgstr "övre gräns i case-etikettintervall överskrider maximala värdet för sin typ" +msgstr "övre gräns i case-etikettintervall överskrider maximala värdet för sin typ" #: c-family/c-common.c:2881 #, gcc-internal-format msgid "GCC cannot support operators with integer types and fixed-point types that have too many integral and fractional bits together" -msgstr "GCC kan inte stödja operatorer med heltalstyper och fixdecimaltyper som har för många heltals- och decimalbitar tillsammans" +msgstr "GCC kan inte stödja operatorer med heltalstyper och fixdecimaltyper som har för mÃ¥nga heltals- och decimalbitar tillsammans" #: c-family/c-common.c:3384 #, gcc-internal-format msgid "invalid operands to binary %s (have %qT and %qT)" -msgstr "ogiltiga operander till binär %s (har %qT och %qT)" +msgstr "ogiltiga operander till binär %s (har %qT och %qT)" #: c-family/c-common.c:3633 #, gcc-internal-format msgid "comparison is always false due to limited range of data type" -msgstr "jämförelsen är alltid falsk på grund av begränsat intervall för datatypen" +msgstr "jämförelsen är alltid falsk pÃ¥ grund av begränsat intervall för datatypen" #: c-family/c-common.c:3635 #, gcc-internal-format msgid "comparison is always true due to limited range of data type" -msgstr "jämförelsen är alltid sann på grund av begränsat intervall för datatypen" +msgstr "jämförelsen är alltid sann pÃ¥ grund av begränsat intervall för datatypen" #: c-family/c-common.c:3714 #, gcc-internal-format msgid "comparison of unsigned expression >= 0 is always true" -msgstr "jämförelse med unsigned-uttryck >= 0 är alltid sant" +msgstr "jämförelse med unsigned-uttryck >= 0 är alltid sant" #: c-family/c-common.c:3724 #, gcc-internal-format msgid "comparison of unsigned expression < 0 is always false" -msgstr "jämförelse med unsigned-uttryck < 0 är alltid falskt" +msgstr "jämförelse med unsigned-uttryck < 0 är alltid falskt" #: c-family/c-common.c:3766 #, gcc-internal-format msgid "pointer of type %<void *%> used in arithmetic" -msgstr "pekare av typen %<void *%> använd i aritmetik" +msgstr "pekare av typen %<void *%> använd i aritmetik" #: c-family/c-common.c:3772 #, gcc-internal-format msgid "pointer to a function used in arithmetic" -msgstr "pekare till funktion använd i aritmetik" +msgstr "pekare till funktion använd i aritmetik" #: c-family/c-common.c:3778 #, gcc-internal-format msgid "pointer to member function used in arithmetic" -msgstr "pekare till medlemsfunktion använd i aritmetik" +msgstr "pekare till medlemsfunktion använd i aritmetik" #: c-family/c-common.c:3990 #, gcc-internal-format msgid "the address of %qD will always evaluate as %<true%>" -msgstr "adressen till %qD kommer alltid beräknas till %<true%>" +msgstr "adressen till %qD kommer alltid beräknas till %<true%>" #: c-family/c-common.c:4085 cp/semantics.c:605 cp/typeck.c:7566 #, gcc-internal-format msgid "suggest parentheses around assignment used as truth value" -msgstr "föreslår parenteser runt tilldelning som används som sanningsvärde" +msgstr "föreslÃ¥r parenteser runt tilldelning som används som sanningsvärde" #: c-family/c-common.c:4357 #, gcc-internal-format msgid "invalid application of %<sizeof%> to a function type" -msgstr "ogiltig användning av %<sizeof%> på en funktionstyp" +msgstr "ogiltig användning av %<sizeof%> pÃ¥ en funktionstyp" #: c-family/c-common.c:4367 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C++ does not permit %<alignof%> applied to a function type" -msgstr "ISO C++ tillåter inte %<alignof%> med annat än en typ" +msgstr "ISO C++ tillÃ¥ter inte %<alignof%> använt pÃ¥ en funktionstyp" #: c-family/c-common.c:4370 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C does not permit %<_Alignof%> applied to a function type" -msgstr "ISO C++ tillåter inte %<alignof%> med annat än en typ" +msgstr "ISO C tillÃ¥ter inte %<_Alignof%> använt pÃ¥ en funktionstyp" #: c-family/c-common.c:4381 #, gcc-internal-format msgid "invalid application of %qs to a void type" -msgstr "ogiltig användning av %qs på en void-typ" +msgstr "ogiltig användning av %qs pÃ¥ en void-typ" #: c-family/c-common.c:4390 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid application of %qs to incomplete type %qT" -msgstr "ogiltig tillämpning av %qs på ofullständig typ %qT " +msgstr "ogiltig tillämpning av %qs pÃ¥ ofullständig typ %qT" #: c-family/c-common.c:4398 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid application of %qs to array type %qT of incomplete element type" -msgstr "ogiltig tillämpning av %qs på ofullständig typ %qT " +msgstr "ogiltig tillämpning av %qs pÃ¥ vektortypen %qT med ofullständig elementtyp" #: c-family/c-common.c:4440 #, gcc-internal-format msgid "%<__alignof%> applied to a bit-field" -msgstr "%<__alignof%> tillämpad på ett bitfält" +msgstr "%<__alignof%> tillämpad pÃ¥ ett bitfält" #: c-family/c-common.c:5151 #, gcc-internal-format msgid "cannot disable built-in function %qs" -msgstr "det går inte att avaktivera den inbyggda funktionen %qs" +msgstr "det gÃ¥r inte att avaktivera den inbyggda funktionen %qs" #: c-family/c-common.c:5342 #, gcc-internal-format msgid "pointers are not permitted as case values" -msgstr "pekare är inte tillåtna case-värden" +msgstr "pekare är inte tillÃ¥tna case-värden" #: c-family/c-common.c:5349 #, gcc-internal-format msgid "range expressions in switch statements are non-standard" -msgstr "intervalluttryck i switch-satser följer inte standarden" +msgstr "intervalluttryck i switch-satser följer inte standarden" #: c-family/c-common.c:5375 #, gcc-internal-format @@ -20478,22 +20478,22 @@ msgstr "tomt intervall angivet" #: c-family/c-common.c:5435 #, gcc-internal-format msgid "duplicate (or overlapping) case value" -msgstr "dubbla (eller överlappande) case-värden" +msgstr "dubbla (eller överlappande) case-värden" #: c-family/c-common.c:5437 #, gcc-internal-format msgid "this is the first entry overlapping that value" -msgstr "detta är det första fallet som överlappar det värdet" +msgstr "detta är det första fallet som överlappar det värdet" #: c-family/c-common.c:5441 #, gcc-internal-format msgid "duplicate case value" -msgstr "upprepat case-värde" +msgstr "upprepat case-värde" #: c-family/c-common.c:5442 #, gcc-internal-format msgid "previously used here" -msgstr "tidigare använt här" +msgstr "tidigare använt här" #: c-family/c-common.c:5446 #, gcc-internal-format @@ -20503,17 +20503,17 @@ msgstr "flera default-etiketter i en switch" #: c-family/c-common.c:5448 #, gcc-internal-format msgid "this is the first default label" -msgstr "detta är den första default-etiketten" +msgstr "detta är den första default-etiketten" #: c-family/c-common.c:5500 #, gcc-internal-format msgid "case value %qs not in enumerated type" -msgstr "case-värde %qs är inte i en uppräkningstyp" +msgstr "case-värde %qs är inte i en uppräkningstyp" #: c-family/c-common.c:5505 #, gcc-internal-format msgid "case value %qs not in enumerated type %qT" -msgstr "case-värde %qs är inte i uppräkningstypen %qT" +msgstr "case-värde %qs är inte i uppräkningstypen %qT" #: c-family/c-common.c:5564 #, gcc-internal-format @@ -20523,77 +20523,77 @@ msgstr "switch saknar default-fall" #: c-family/c-common.c:5636 #, gcc-internal-format msgid "enumeration value %qE not handled in switch" -msgstr "uppräkningsvärdet %qE hanteras inte i switch" +msgstr "uppräkningsvärdet %qE hanteras inte i switch" #: c-family/c-common.c:5662 #, gcc-internal-format msgid "taking the address of a label is non-standard" -msgstr "att ta adressen av en etikett följer inte standarden" +msgstr "att ta adressen av en etikett följer inte standarden" #: c-family/c-common.c:5854 #, gcc-internal-format msgid "%qE attribute ignored for field of type %qT" -msgstr "attributet %qE ignorerat för fält av typen %qT" +msgstr "attributet %qE ignorerat för fält av typen %qT" #: c-family/c-common.c:5948 c-family/c-common.c:5974 #, gcc-internal-format msgid "%qE attribute conflicts with attribute %s" -msgstr "attributet %qE står i konflikt attributet %s" +msgstr "attributet %qE stÃ¥r i konflikt attributet %s" #: c-family/c-common.c:6088 lto/lto-lang.c:220 #, gcc-internal-format msgid "%qE attribute has no effect on unit local functions" -msgstr "attributet %qE har ingen effekt på enhetslokala funktioner" +msgstr "attributet %qE har ingen effekt pÃ¥ enhetslokala funktioner" #: c-family/c-common.c:6242 #, gcc-internal-format msgid "%qE attribute have effect only on public objects" -msgstr "attributet %qE har bara effekt på publika objekt" +msgstr "attributet %qE har bara effekt pÃ¥ publika objekt" #: c-family/c-common.c:6354 #, gcc-internal-format msgid "destructor priorities are not supported" -msgstr "destruerarprioriteter stöds ej" +msgstr "destruerarprioriteter stöds ej" #: c-family/c-common.c:6356 #, gcc-internal-format msgid "constructor priorities are not supported" -msgstr "konstruerarprioriteter stöds ej" +msgstr "konstruerarprioriteter stöds ej" #: c-family/c-common.c:6373 #, gcc-internal-format, gfc-internal-format msgid "destructor priorities from 0 to %d are reserved for the implementation" -msgstr "destruerarprioriteter från 0 till %d är reserverade för implementationen" +msgstr "destruerarprioriteter frÃ¥n 0 till %d är reserverade för implementationen" #: c-family/c-common.c:6378 #, gcc-internal-format, gfc-internal-format msgid "constructor priorities from 0 to %d are reserved for the implementation" -msgstr "konstruerarprioriteter från 0 till %d är reserverade för implementationen" +msgstr "konstruerarprioriteter frÃ¥n 0 till %d är reserverade för implementationen" #: c-family/c-common.c:6386 #, gcc-internal-format, gfc-internal-format msgid "destructor priorities must be integers from 0 to %d inclusive" -msgstr "destruerarprioriteter måste vara heltal från 0 till och med %d" +msgstr "destruerarprioriteter mÃ¥ste vara heltal frÃ¥n 0 till och med %d" #: c-family/c-common.c:6389 #, gcc-internal-format, gfc-internal-format msgid "constructor priorities must be integers from 0 to %d inclusive" -msgstr "konstruerarprioriteter måste vara heltal från 0 till och med %d" +msgstr "konstruerarprioriteter mÃ¥ste vara heltal frÃ¥n 0 till och med %d" #: c-family/c-common.c:6545 #, gcc-internal-format msgid "unknown machine mode %qE" -msgstr "okänt maskinläge %qE" +msgstr "okänt maskinläge %qE" #: c-family/c-common.c:6574 #, gcc-internal-format msgid "specifying vector types with __attribute__ ((mode)) is deprecated" -msgstr "att ange vektortyper med __attribute__ ((sätt)) bör undvikas" +msgstr "att ange vektortyper med __attribute__ ((sätt)) bör undvikas" #: c-family/c-common.c:6577 #, gcc-internal-format msgid "use __attribute__ ((vector_size)) instead" -msgstr "använd __attribute__ ((vector_size)) istället" +msgstr "använd __attribute__ ((vector_size)) istället" #: c-family/c-common.c:6586 #, gcc-internal-format @@ -20603,83 +20603,83 @@ msgstr "kan inte emulera %qs" #: c-family/c-common.c:6597 #, gcc-internal-format msgid "invalid pointer mode %qs" -msgstr "ogiltigt pekarläge %qs" +msgstr "ogiltigt pekarläge %qs" #: c-family/c-common.c:6614 #, gcc-internal-format msgid "signedness of type and machine mode %qs don%'t match" -msgstr "tecken på typ och maskinläge %qs passar inte ihop" +msgstr "tecken pÃ¥ typ och maskinläge %qs passar inte ihop" #: c-family/c-common.c:6625 #, gcc-internal-format msgid "no data type for mode %qs" -msgstr "ingen datatyp för läge %qs" +msgstr "ingen datatyp för läge %qs" #: c-family/c-common.c:6635 #, gcc-internal-format msgid "cannot use mode %qs for enumeral types" -msgstr "kan inte använda läge %qs för uppräkningstyper" +msgstr "kan inte använda läge %qs för uppräkningstyper" #: c-family/c-common.c:6662 #, gcc-internal-format msgid "mode %qs applied to inappropriate type" -msgstr "läge %qs applicerat på olämplig typ" +msgstr "läge %qs applicerat pÃ¥ olämplig typ" #: c-family/c-common.c:6694 #, gcc-internal-format msgid "section attribute cannot be specified for local variables" -msgstr "attributet \"section\" kan inte anges för lokala variabler" +msgstr "attributet â€section†kan inte anges för lokala variabler" #: c-family/c-common.c:6705 config/bfin/bfin.c:4737 config/bfin/bfin.c:4788 #: config/bfin/bfin.c:4815 config/bfin/bfin.c:4828 #, gcc-internal-format msgid "section of %q+D conflicts with previous declaration" -msgstr "sektion %q+D står i konflikt med tidigare deklaration" +msgstr "sektion %q+D stÃ¥r i konflikt med tidigare deklaration" #: c-family/c-common.c:6713 #, gcc-internal-format msgid "section of %q+D cannot be overridden" -msgstr "sektion i %q+D kan inte åsidosättas" +msgstr "sektion i %q+D kan inte Ã¥sidosättas" #: c-family/c-common.c:6721 #, gcc-internal-format msgid "section attribute not allowed for %q+D" -msgstr "attributet \"section\" är inte tillåten för %q+D" +msgstr "attributet â€section†är inte tillÃ¥ten för %q+D" #: c-family/c-common.c:6728 #, gcc-internal-format msgid "section attributes are not supported for this target" -msgstr "attributet \"section\" stöds inte för denna målarkitektur" +msgstr "attributet â€section†stöds inte för denna mÃ¥larkitektur" #: c-family/c-common.c:6747 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "requested alignment is not an integer constant" -msgstr "efterfrågad minnesjustering är inte konstant" +msgstr "efterfrÃ¥gad minnesjustering är inte en heltalskonstant" #: c-family/c-common.c:6754 #, gcc-internal-format msgid "requested alignment is not a power of 2" -msgstr "efterfrågad minnesjustering är inte en potens av 2" +msgstr "efterfrÃ¥gad minnesjustering är inte en potens av 2" #: c-family/c-common.c:6759 #, gcc-internal-format msgid "requested alignment is too large" -msgstr "efterfrågad minnesjustering är för stor" +msgstr "efterfrÃ¥gad minnesjustering är för stor" #: c-family/c-common.c:6815 #, gcc-internal-format msgid "alignment may not be specified for %q+D" -msgstr "minnesjustering kan inte anges för %q+D" +msgstr "minnesjustering kan inte anges för %q+D" #: c-family/c-common.c:6822 #, gcc-internal-format msgid "alignment for %q+D was previously specified as %d and may not be decreased" -msgstr "justering för %q+D angavs tidigare som %d och får inte minska" +msgstr "justering för %q+D angavs tidigare som %d och fÃ¥r inte minska" #: c-family/c-common.c:6826 #, gcc-internal-format msgid "alignment for %q+D must be at least %d" -msgstr "justering för %q+D måste vara åtminstone %d" +msgstr "justering för %q+D mÃ¥ste vara Ã¥tminstone %d" #: c-family/c-common.c:6851 #, gcc-internal-format @@ -20694,7 +20694,7 @@ msgstr "indirekt funktion %q+D kan inte deklareras svag" #: c-family/c-common.c:6893 #, gcc-internal-format msgid "%q+D defined both normally and as %qE attribute" -msgstr "%q+D är definierad både normalt och som ett attribut %qE" +msgstr "%q+D är definierad bÃ¥de normalt och som ett attribut %qE" #: c-family/c-common.c:6901 #, gcc-internal-format @@ -20704,7 +20704,7 @@ msgstr "svag %q+D kan inte definieras %qE" #: c-family/c-common.c:6918 #, gcc-internal-format msgid "attribute %qE argument not a string" -msgstr "argument till attribut %qE är inte en sträng" +msgstr "argument till attribut %qE är inte en sträng" #: c-family/c-common.c:6994 #, gcc-internal-format @@ -20714,32 +20714,32 @@ msgstr "indirekt funktion %q+D kan inte deklareras weakref" #: c-family/c-common.c:7016 #, gcc-internal-format msgid "weakref attribute must appear before alias attribute" -msgstr "attributet weakref måste vara före attributet alias" +msgstr "attributet weakref mÃ¥ste vara före attributet alias" #: c-family/c-common.c:7045 #, gcc-internal-format msgid "%qE attribute ignored on non-class types" -msgstr "attributet %qE ignorerat typer som inte är klasser" +msgstr "attributet %qE ignorerat typer som inte är klasser" #: c-family/c-common.c:7051 #, gcc-internal-format msgid "%qE attribute ignored because %qT is already defined" -msgstr "attributet %qE ignorerat för att %qT redan är definierat" +msgstr "attributet %qE ignorerat för att %qT redan är definierat" #: c-family/c-common.c:7064 #, gcc-internal-format msgid "visibility argument not a string" -msgstr "synlighetsargumentet är inte en sträng" +msgstr "synlighetsargumentet är inte en sträng" #: c-family/c-common.c:7076 #, gcc-internal-format msgid "%qE attribute ignored on types" -msgstr "attributet %qE ignorerat för typer" +msgstr "attributet %qE ignorerat för typer" #: c-family/c-common.c:7092 #, gcc-internal-format msgid "visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"" -msgstr "visibility-argument måste vara ett av \"default\", \"hidden\", \"protected\" eller \"internal\"" +msgstr "visibility-argument mÃ¥ste vara ett av â€defaultâ€, â€hiddenâ€, â€protected†eller â€internalâ€" #: c-family/c-common.c:7103 #, gcc-internal-format @@ -20749,84 +20749,84 @@ msgstr "%qD omdeklarerad med annan synlighet" #: c-family/c-common.c:7106 c-family/c-common.c:7110 #, gcc-internal-format msgid "%qD was declared %qs which implies default visibility" -msgstr "%qD deklarerades %qs vilket medför standardsynlighet" +msgstr "%qD deklarerades %qs vilket medför standardsynlighet" #: c-family/c-common.c:7194 #, gcc-internal-format msgid "tls_model argument not a string" -msgstr "tls_model-argument är inte en sträng" +msgstr "tls_model-argument är inte en sträng" #: c-family/c-common.c:7207 #, gcc-internal-format msgid "tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"" -msgstr "tls_model-argument måste vara ett av \"local-exec\", \"initial-exec\", \"local-dynamic\" eller \"global-dynamic\"" +msgstr "tls_model-argument mÃ¥ste vara ett av â€local-execâ€, â€initial-execâ€, â€local-dynamic†eller â€global-dynamicâ€" #: c-family/c-common.c:7227 c-family/c-common.c:7333 c-family/c-common.c:8302 #: config/m32c/m32c.c:3161 #, gcc-internal-format msgid "%qE attribute applies only to functions" -msgstr "attributet %qE är bara tillämpligt på funktioner" +msgstr "attributet %qE är bara tillämpligt pÃ¥ funktioner" #: c-family/c-common.c:7233 c-family/c-common.c:7339 c-family/c-common.c:8308 #, gcc-internal-format msgid "can%'t set %qE attribute after definition" -msgstr "kan inte sätta attributet %qE efter definitionen" +msgstr "kan inte sätta attributet %qE efter definitionen" #: c-family/c-common.c:7279 #, gcc-internal-format msgid "alloc_size parameter outside range" -msgstr "alloc_size-parameter utanför giltigt intervall" +msgstr "alloc_size-parameter utanför giltigt intervall" #: c-family/c-common.c:7397 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE attribute duplicated" -msgstr "attributet %qE ignorerat" +msgstr "attributet %qE dubblerat" #: c-family/c-common.c:7399 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE attribute follows %qE" -msgstr "attributet %qE ignorerat för %qE" +msgstr "attributet %qE följer %qE" #: c-family/c-common.c:7498 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "type was previously declared %qE" -msgstr "tidigare deklarerad här" +msgstr "typen var tidigare deklarerad %qE" #: c-family/c-common.c:7551 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE argument not an identifier" -msgstr "argumentet till cleanup är inte en identifierare" +msgstr "argument till %qE är inte en identifierare" #: c-family/c-common.c:7562 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD is not compatible with %qD" -msgstr "%qD inte deklarerad i %qD" +msgstr "%qD är inte kompatibel med %qD" #: c-family/c-common.c:7565 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "transaction_wrap argument is not a function" -msgstr "argumentet till cleanup är inte en funktion" +msgstr "argumentet till transaction_wrap är inte en funktion" #: c-family/c-common.c:7613 #, gcc-internal-format msgid "deprecated message is not a string" -msgstr "deprecated-meddelande är inte en sträng" +msgstr "deprecated-meddelande är inte en sträng" #: c-family/c-common.c:7654 #, gcc-internal-format msgid "%qE attribute ignored for %qE" -msgstr "attributet %qE ignorerat för %qE" +msgstr "attributet %qE ignorerat för %qE" #: c-family/c-common.c:7714 #, gcc-internal-format msgid "invalid vector type for attribute %qE" -msgstr "ogiltig vektortyp för attributet %qE" +msgstr "ogiltig vektortyp för attributet %qE" #: c-family/c-common.c:7720 ada/gcc-interface/utils.c:5600 #: ada/gcc-interface/utils.c:5694 #, gcc-internal-format msgid "vector size not an integral multiple of component size" -msgstr "vektorstorleken är inte en hel multipel av komponentstorleken" +msgstr "vektorstorleken är inte en hel multipel av komponentstorleken" #: c-family/c-common.c:7726 ada/gcc-interface/utils.c:5606 #: ada/gcc-interface/utils.c:5700 @@ -20838,17 +20838,17 @@ msgstr "vektorstorlek noll" #: ada/gcc-interface/utils.c:5707 #, gcc-internal-format msgid "number of components of the vector not a power of two" -msgstr "antal komponenter i vektorn inte en tvåpotens" +msgstr "antal komponenter i vektorn inte en tvÃ¥potens" #: c-family/c-common.c:7762 ada/gcc-interface/utils.c:5341 #, gcc-internal-format msgid "nonnull attribute without arguments on a non-prototype" -msgstr "attributet nonnull utan argument på en icke-prototyp" +msgstr "attributet nonnull utan argument pÃ¥ en icke-prototyp" #: c-family/c-common.c:7776 ada/gcc-interface/utils.c:5355 #, gcc-internal-format, gfc-internal-format msgid "nonnull argument has invalid operand number (argument %lu)" -msgstr "argument till nonnull har ett ogiltigt värde (argument %lu)" +msgstr "argument till nonnull har ett ogiltigt värde (argument %lu)" #: c-family/c-common.c:7798 ada/gcc-interface/utils.c:5377 #, gcc-internal-format, gfc-internal-format @@ -20863,7 +20863,7 @@ msgstr "nonnull-argument refererar icke-pekar-operand (argument %lu, operand %lu #: c-family/c-common.c:7885 #, gcc-internal-format msgid "not enough variable arguments to fit a sentinel" -msgstr "inte tillräckligt med variabla argument för att få plats med en vaktpost" +msgstr "inte tillräckligt med variabla argument för att fÃ¥ plats med en vaktpost" #: c-family/c-common.c:7899 #, gcc-internal-format @@ -20873,37 +20873,37 @@ msgstr "vaktpost saknas i funktionsanrop" #: c-family/c-common.c:7940 #, gcc-internal-format, gfc-internal-format msgid "null argument where non-null required (argument %lu)" -msgstr "noll-argument där icke-noll krävs (argument %lu)" +msgstr "noll-argument där icke-noll krävs (argument %lu)" #: c-family/c-common.c:8005 #, gcc-internal-format msgid "cleanup argument not an identifier" -msgstr "argumentet till cleanup är inte en identifierare" +msgstr "argumentet till cleanup är inte en identifierare" #: c-family/c-common.c:8012 #, gcc-internal-format msgid "cleanup argument not a function" -msgstr "argumentet till cleanup är inte en funktion" +msgstr "argumentet till cleanup är inte en funktion" #: c-family/c-common.c:8049 #, gcc-internal-format msgid "%qE attribute requires prototypes with named arguments" -msgstr "attributet %qE kräver prototyper med namngivna argument" +msgstr "attributet %qE kräver prototyper med namngivna argument" #: c-family/c-common.c:8057 #, gcc-internal-format msgid "%qE attribute only applies to variadic functions" -msgstr "attributet %qE är bara tillämplig på funktioner med variabelt antal argument" +msgstr "attributet %qE är bara tillämplig pÃ¥ funktioner med variabelt antal argument" #: c-family/c-common.c:8069 ada/gcc-interface/utils.c:5428 #, gcc-internal-format msgid "requested position is not an integer constant" -msgstr "den begärda positionen är inte en heltalskonstant" +msgstr "den begärda positionen är inte en heltalskonstant" #: c-family/c-common.c:8077 ada/gcc-interface/utils.c:5435 #, gcc-internal-format msgid "requested position is less than zero" -msgstr "begärd position är mindre än noll" +msgstr "begärd position är mindre än noll" #: c-family/c-common.c:8197 #, gcc-internal-format, gfc-internal-format @@ -20918,157 +20918,157 @@ msgstr "felaktig flagga %s till pragma-attribut" #: c-family/c-common.c:8427 #, gcc-internal-format msgid "not enough arguments to function %qE" -msgstr "inte tillräckligt med argument till funktionen %qE" +msgstr "inte tillräckligt med argument till funktionen %qE" #: c-family/c-common.c:8463 c-family/c-common.c:8509 #, gcc-internal-format msgid "non-floating-point argument in call to function %qE" -msgstr "argument som inte är flyttal i anrop till funktionen %qE" +msgstr "argument som inte är flyttal i anrop till funktionen %qE" #: c-family/c-common.c:8486 #, gcc-internal-format msgid "non-floating-point arguments in call to function %qE" -msgstr "argument som inte är flyttal i anrop till funktionen %qE" +msgstr "argument som inte är flyttal i anrop till funktionen %qE" #: c-family/c-common.c:8502 #, gcc-internal-format msgid "non-const integer argument %u in call to function %qE" -msgstr "heltalsargument %u som inte är konstant i anrop till funktionen %qE" +msgstr "heltalsargument %u som inte är konstant i anrop till funktionen %qE" #: c-family/c-common.c:8522 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "non-integer argument 3 in call to function %qE" -msgstr "heltalsargument %u som inte är konstant i anrop till funktionen %qE" +msgstr "argument 3 som inte är ett heltal i anrop till funktionen %qE" #: c-family/c-common.c:8847 #, gcc-internal-format msgid "cannot apply %<offsetof%> to static data member %qD" -msgstr "det går inte att använda %<offsetof%> på en statisk datamedlem %qD" +msgstr "det gÃ¥r inte att använda %<offsetof%> pÃ¥ en statisk datamedlem %qD" #: c-family/c-common.c:8852 #, gcc-internal-format msgid "cannot apply %<offsetof%> when %<operator[]%> is overloaded" -msgstr "går inte att applicera %<offsetof%> när %<operator[]%> är överlagrad" +msgstr "gÃ¥r inte att applicera %<offsetof%> när %<operator[]%> är överlagrad" #: c-family/c-common.c:8859 #, gcc-internal-format msgid "cannot apply %<offsetof%> to a non constant address" -msgstr "det går inte att använda %<offsetof%> på en icke-konstant adress" +msgstr "det gÃ¥r inte att använda %<offsetof%> pÃ¥ en icke-konstant adress" #: c-family/c-common.c:8872 cp/typeck.c:5017 #, gcc-internal-format msgid "attempt to take address of bit-field structure member %qD" -msgstr "försök att ta adressen till en medlemmen %qD i en bitfältspost" +msgstr "försök att ta adressen till en medlemmen %qD i en bitfältspost" #: c-family/c-common.c:8924 #, gcc-internal-format msgid "index %E denotes an offset greater than size of %qT" -msgstr "index %E anger ett avstånd större än storleken på %qT" +msgstr "index %E anger ett avstÃ¥nd större än storleken pÃ¥ %qT" #: c-family/c-common.c:8964 #, gcc-internal-format msgid "the omitted middle operand in ?: will always be %<true%>, suggest explicit middle operand" -msgstr "de utelämnade mittoperanden i ?: kommer alltid att vara %<true%>, föreslår explicit mittoperand" +msgstr "de utelämnade mittoperanden i ?: kommer alltid att vara %<true%>, föreslÃ¥r explicit mittoperand" #: c-family/c-common.c:8985 #, gcc-internal-format msgid "assignment of member %qD in read-only object" -msgstr "tilldelning av medlem %qD i endast läsbart objekt" +msgstr "tilldelning av medlem %qD i endast läsbart objekt" #: c-family/c-common.c:8987 #, gcc-internal-format msgid "increment of member %qD in read-only object" -msgstr "ökning av medlem %qD i endast läsbart objekt" +msgstr "ökning av medlem %qD i endast läsbart objekt" #: c-family/c-common.c:8989 #, gcc-internal-format msgid "decrement of member %qD in read-only object" -msgstr "minskning av medlem %qD i endast läsbart objekt" +msgstr "minskning av medlem %qD i endast läsbart objekt" #: c-family/c-common.c:8991 #, gcc-internal-format msgid "member %qD in read-only object used as %<asm%> output" -msgstr "medlem %qD i endast läsbart objekt använt som %<asm%>-utdata" +msgstr "medlem %qD i endast läsbart objekt använt som %<asm%>-utdata" #: c-family/c-common.c:8995 #, gcc-internal-format msgid "assignment of read-only member %qD" -msgstr "tilldelning till endast läsbar medlem %qD" +msgstr "tilldelning till endast läsbar medlem %qD" #: c-family/c-common.c:8996 #, gcc-internal-format msgid "increment of read-only member %qD" -msgstr "ökning av endast läsbar medlem %qD" +msgstr "ökning av endast läsbar medlem %qD" #: c-family/c-common.c:8997 #, gcc-internal-format msgid "decrement of read-only member %qD" -msgstr "minskning av endast läsbar medlem %qD" +msgstr "minskning av endast läsbar medlem %qD" #: c-family/c-common.c:8998 #, gcc-internal-format msgid "read-only member %qD used as %<asm%> output" -msgstr "endast läsbar medlem %qD använd som %<asm%>-utdata" +msgstr "endast läsbar medlem %qD använd som %<asm%>-utdata" #: c-family/c-common.c:9002 #, gcc-internal-format msgid "assignment of read-only variable %qD" -msgstr "tilldelning till endast läsbar variabel %qD" +msgstr "tilldelning till endast läsbar variabel %qD" #: c-family/c-common.c:9003 #, gcc-internal-format msgid "increment of read-only variable %qD" -msgstr "ökning av endast läsbar variabel %qD" +msgstr "ökning av endast läsbar variabel %qD" #: c-family/c-common.c:9004 #, gcc-internal-format msgid "decrement of read-only variable %qD" -msgstr "minskning av endast läsbar variabel %qD" +msgstr "minskning av endast läsbar variabel %qD" #: c-family/c-common.c:9005 #, gcc-internal-format msgid "read-only variable %qD used as %<asm%> output" -msgstr "endast läsbar variabel %qD använd som %<asm%>-utdata" +msgstr "endast läsbar variabel %qD använd som %<asm%>-utdata" #: c-family/c-common.c:9008 #, gcc-internal-format msgid "assignment of read-only parameter %qD" -msgstr "tilldelning till endast läsbar parameter %qD" +msgstr "tilldelning till endast läsbar parameter %qD" #: c-family/c-common.c:9009 #, gcc-internal-format msgid "increment of read-only parameter %qD" -msgstr "ökning av endast läsbar parameter %qD" +msgstr "ökning av endast läsbar parameter %qD" #: c-family/c-common.c:9010 #, gcc-internal-format msgid "decrement of read-only parameter %qD" -msgstr "minskning av endast läsbar parameter %qD" +msgstr "minskning av endast läsbar parameter %qD" #: c-family/c-common.c:9011 #, gcc-internal-format msgid "read-only parameter %qD use as %<asm%> output" -msgstr "endast läsbar parameter %qD använd som %<asm%>-utdata" +msgstr "endast läsbar parameter %qD använd som %<asm%>-utdata" #: c-family/c-common.c:9016 #, gcc-internal-format msgid "assignment of read-only named return value %qD" -msgstr "tilldelning av endast läsbart namngivet returvärde %qD" +msgstr "tilldelning av endast läsbart namngivet returvärde %qD" #: c-family/c-common.c:9018 #, gcc-internal-format msgid "increment of read-only named return value %qD" -msgstr "ökning av endast läsbart namngivet returvärde %qD" +msgstr "ökning av endast läsbart namngivet returvärde %qD" #: c-family/c-common.c:9020 #, gcc-internal-format msgid "decrement of read-only named return value %qD" -msgstr "minskning av endast läsbart namngivet returvärde %qD" +msgstr "minskning av endast läsbart namngivet returvärde %qD" #: c-family/c-common.c:9022 #, gcc-internal-format msgid "read-only named return value %qD used as %<asm%>output" -msgstr "endast läsbar namngiven returvariabel %qD använd som %<asm%>-utdata" +msgstr "endast läsbar namngiven returvariabel %qD använd som %<asm%>-utdata" #: c-family/c-common.c:9027 #, gcc-internal-format @@ -21078,7 +21078,7 @@ msgstr "tilldelning av funktion %qD" #: c-family/c-common.c:9028 #, gcc-internal-format msgid "increment of function %qD" -msgstr "ökning av funktion %qD" +msgstr "ökning av funktion %qD" #: c-family/c-common.c:9029 #, gcc-internal-format @@ -21088,37 +21088,37 @@ msgstr "minskning av funktion %qD" #: c-family/c-common.c:9030 #, gcc-internal-format msgid "function %qD used as %<asm%> output" -msgstr "funktionen %qD använd som %<asm%>-utdata" +msgstr "funktionen %qD använd som %<asm%>-utdata" #: c-family/c-common.c:9036 #, gcc-internal-format msgid "read-only location %qE used as %<asm%> output" -msgstr "endast läsbar plats %qE använd som %<asm%>-utdata" +msgstr "endast läsbar plats %qE använd som %<asm%>-utdata" #: c-family/c-common.c:9050 #, gcc-internal-format msgid "lvalue required as left operand of assignment" -msgstr "l-värde krävs som vänstra operand i tilldelning" +msgstr "l-värde krävs som vänstra operand i tilldelning" #: c-family/c-common.c:9053 #, gcc-internal-format msgid "lvalue required as increment operand" -msgstr "l-värde krävs som operand till ökning" +msgstr "l-värde krävs som operand till ökning" #: c-family/c-common.c:9056 #, gcc-internal-format msgid "lvalue required as decrement operand" -msgstr "l-värde krävs som operand till minskning" +msgstr "l-värde krävs som operand till minskning" #: c-family/c-common.c:9059 #, gcc-internal-format msgid "lvalue required as unary %<&%> operand" -msgstr "l-värde krävs som operand till unär %<&%>" +msgstr "l-värde krävs som operand till unär %<&%>" #: c-family/c-common.c:9062 #, gcc-internal-format msgid "lvalue required in asm statement" -msgstr "l-värde krävs i asm-sats" +msgstr "l-värde krävs i asm-sats" #: c-family/c-common.c:9079 #, gcc-internal-format @@ -21133,7 +21133,7 @@ msgstr "ogiltigt typargument i vektorindexering (har %qT)" #: c-family/c-common.c:9088 #, gcc-internal-format msgid "invalid type argument of unary %<*%> (have %qT)" -msgstr "ogiltigt typargument till unär %<*%> (har %qT)" +msgstr "ogiltigt typargument till unär %<*%> (har %qT)" #: c-family/c-common.c:9093 #, gcc-internal-format @@ -21148,47 +21148,47 @@ msgstr "ogiltigt typargument till implicit konvertering (har %qT)" #: c-family/c-common.c:9231 #, gcc-internal-format msgid "size of array is too large" -msgstr "storleken på vektorn är för stor" +msgstr "storleken pÃ¥ vektorn är för stor" #: c-family/c-common.c:9425 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "incorrect number of arguments to function %qE" -msgstr "inte tillräckligt med argument till funktionen %qE" +msgstr "felaktigt antal argument till funktionen %qE" #: c-family/c-common.c:9433 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "argument 1 of %qE must be a non-void pointer type" -msgstr "argument %d till %qE måste vara en adress" +msgstr "argument 1 till %qE mÃ¥ste vara pekartyp som inte pekar pÃ¥ void" #: c-family/c-common.c:9442 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "argument 1 of %qE must be a pointer to a constant size type" -msgstr "%Kförsta argumentet till %D måste vara en pekare, det andra en heltalskonstant" +msgstr "argument 1 till %qE mÃ¥ste vara en pekare till en typ med konstant storlek" #: c-family/c-common.c:9453 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "argument 1 of %qE must be a pointer to a nonzero size object" -msgstr "%Kförsta argumentet till %D måste vara en pekare, det andra en heltalskonstant" +msgstr "argument 1 till %qE mÃ¥ste vara en pekare till ett objekt av storlek större än noll" #: c-family/c-common.c:9468 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "argument %d of %qE must be a pointer type" -msgstr "argument %d till %qE måste vara en adress" +msgstr "argument %d till %qE mÃ¥ste vara en pekartyp" #: c-family/c-common.c:9475 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "size mismatch in argument %d of %qE" -msgstr "när argument %P till %q+D skickades" +msgstr "storleken stämmer inte i argument %d till %qE" #: c-family/c-common.c:9491 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid memory model argument %d of %qE" -msgstr "inkompatibel typ för argument %d av %qE" +msgstr "ogiltig minnesmodellsargument %d till %qE" #: c-family/c-common.c:9498 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "non-integer memory model argument %d of %qE" -msgstr "inkompatibel typ för argument %d av %qE" +msgstr "minnesmodellsargument %d som inte är heltal till %qE" #: c-family/c-common.c:10024 #, gcc-internal-format @@ -21198,97 +21198,97 @@ msgstr "vektorindex har typen %<char%>" #: c-family/c-common.c:10059 #, gcc-internal-format msgid "suggest parentheses around %<+%> inside %<<<%>" -msgstr "föreslår parenteser runt %<+%> inuti %<<<%>" +msgstr "föreslÃ¥r parenteser runt %<+%> inuti %<<<%>" #: c-family/c-common.c:10062 #, gcc-internal-format msgid "suggest parentheses around %<-%> inside %<<<%>" -msgstr "föreslår parenteser runt %<-%> inuti %<<<%>" +msgstr "föreslÃ¥r parenteser runt %<-%> inuti %<<<%>" #: c-family/c-common.c:10068 #, gcc-internal-format msgid "suggest parentheses around %<+%> inside %<>>%>" -msgstr "föreslår parenteser runt %<+%> inuti %<>>%>" +msgstr "föreslÃ¥r parenteser runt %<+%> inuti %<>>%>" #: c-family/c-common.c:10071 #, gcc-internal-format msgid "suggest parentheses around %<-%> inside %<>>%>" -msgstr "föreslår parenteser runt %<-%> inuti %<>>%>" +msgstr "föreslÃ¥r parenteser runt %<-%> inuti %<>>%>" #: c-family/c-common.c:10077 #, gcc-internal-format msgid "suggest parentheses around %<&&%> within %<||%>" -msgstr "föreslår parenteser runt %<&&%> inuti %<||%>" +msgstr "föreslÃ¥r parenteser runt %<&&%> inuti %<||%>" #: c-family/c-common.c:10086 #, gcc-internal-format msgid "suggest parentheses around arithmetic in operand of %<|%>" -msgstr "föreslår parenteser runt aritmetik i operanden till %<|%>" +msgstr "föreslÃ¥r parenteser runt aritmetik i operanden till %<|%>" #: c-family/c-common.c:10091 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<|%>" -msgstr "föreslår parenteser runt jämförelse i operanden till %<|%>" +msgstr "föreslÃ¥r parenteser runt jämförelse i operanden till %<|%>" #: c-family/c-common.c:10095 #, gcc-internal-format msgid "suggest parentheses around operand of %<!%> or change %<|%> to %<||%> or %<!%> to %<~%>" -msgstr "föreslår parenteser runt operanden till %<!%> eller ändra %<|%> till %<||%> eller %<!%> till %<~%>" +msgstr "föreslÃ¥r parenteser runt operanden till %<!%> eller ändra %<|%> till %<||%> eller %<!%> till %<~%>" #: c-family/c-common.c:10105 #, gcc-internal-format msgid "suggest parentheses around arithmetic in operand of %<^%>" -msgstr "föreslår parenteser runt aritmetik i operanden till %<^%>" +msgstr "föreslÃ¥r parenteser runt aritmetik i operanden till %<^%>" #: c-family/c-common.c:10110 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<^%>" -msgstr "föreslår parenteser runt jämförelse i operanden till %<^%>" +msgstr "föreslÃ¥r parenteser runt jämförelse i operanden till %<^%>" #: c-family/c-common.c:10116 #, gcc-internal-format msgid "suggest parentheses around %<+%> in operand of %<&%>" -msgstr "föreslår parenteser runt %<+%> i operanden till %<&%>" +msgstr "föreslÃ¥r parenteser runt %<+%> i operanden till %<&%>" #: c-family/c-common.c:10119 #, gcc-internal-format msgid "suggest parentheses around %<-%> in operand of %<&%>" -msgstr "föreslår parenteser runt %<-%> i operanden till %<&%>" +msgstr "föreslÃ¥r parenteser runt %<-%> i operanden till %<&%>" #: c-family/c-common.c:10124 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<&%>" -msgstr "föreslår parenteser runt jämförelser i operanden till %<&%>" +msgstr "föreslÃ¥r parenteser runt jämförelser i operanden till %<&%>" #: c-family/c-common.c:10128 #, gcc-internal-format msgid "suggest parentheses around operand of %<!%> or change %<&%> to %<&&%> or %<!%> to %<~%>" -msgstr "föreslår parenteser runt operanden till %<!%> eller ändra %<&%> till %<&&%> eller %<!%> till %<~%>" +msgstr "föreslÃ¥r parenteser runt operanden till %<!%> eller ändra %<&%> till %<&&%> eller %<!%> till %<~%>" #: c-family/c-common.c:10136 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<==%>" -msgstr "föreslår parenteser runt jämförelse i operanden till %<==%>" +msgstr "föreslÃ¥r parenteser runt jämförelse i operanden till %<==%>" #: c-family/c-common.c:10142 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<!=%>" -msgstr "föreslår parenteser runt jämförelse i operanden till %<!=%>" +msgstr "föreslÃ¥r parenteser runt jämförelse i operanden till %<!=%>" #: c-family/c-common.c:10153 #, gcc-internal-format msgid "comparisons like %<X<=Y<=Z%> do not have their mathematical meaning" -msgstr "jämförelser som %<X<=Y<=Z%> har inte sin matematiska mening" +msgstr "jämförelser som %<X<=Y<=Z%> har inte sin matematiska mening" #: c-family/c-common.c:10168 #, gcc-internal-format msgid "label %q+D defined but not used" -msgstr "etikett %q+D är definierad men inte använd" +msgstr "etikett %q+D är definierad men inte använd" #: c-family/c-common.c:10170 #, gcc-internal-format msgid "label %q+D declared but not defined" -msgstr "etikett %q+D är deklarerad men inte definierad" +msgstr "etikett %q+D är deklarerad men inte definierad" #: c-family/c-common.c:10186 #, gcc-internal-format @@ -21298,62 +21298,62 @@ msgstr "division med noll" #: c-family/c-common.c:10218 #, gcc-internal-format msgid "comparison between types %qT and %qT" -msgstr "jämförelse mellan typer %qT och %qT" +msgstr "jämförelse mellan typer %qT och %qT" #: c-family/c-common.c:10269 #, gcc-internal-format msgid "comparison between signed and unsigned integer expressions" -msgstr "jämförelse mellan heltalsuttryck med och utan tecken" +msgstr "jämförelse mellan heltalsuttryck med och utan tecken" #: c-family/c-common.c:10320 #, gcc-internal-format msgid "promoted ~unsigned is always non-zero" -msgstr "befodrat ~unsigned är alltid skild från noll" +msgstr "befodrat ~unsigned är alltid skild frÃ¥n noll" #: c-family/c-common.c:10323 #, gcc-internal-format msgid "comparison of promoted ~unsigned with constant" -msgstr "jämförelse av befordrad ~unsigned med konstant" +msgstr "jämförelse av befordrad ~unsigned med konstant" #: c-family/c-common.c:10333 #, gcc-internal-format msgid "comparison of promoted ~unsigned with unsigned" -msgstr "jämförelse av befordrad ~unsigned med unsigned" +msgstr "jämförelse av befordrad ~unsigned med unsigned" #: c-family/c-common.c:10511 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "typedef %qD locally defined but not used" -msgstr "%q+D är definierad men inte använd" +msgstr "typedef %q+D är lokalt definierad men inte använd" #: c-family/c-format.c:126 c-family/c-format.c:313 #, gcc-internal-format msgid "format string has invalid operand number" -msgstr "formatsträng har ogiltigt operandnummer" +msgstr "formatsträng har ogiltigt operandnummer" #: c-family/c-format.c:142 #, gcc-internal-format msgid "function does not return string type" -msgstr "funktionen returnerar inte typen sträng" +msgstr "funktionen returnerar inte typen sträng" #: c-family/c-format.c:176 #, gcc-internal-format msgid "format string argument is not a string type" -msgstr "argument för formatsträng är inte en strängtyp" +msgstr "argument för formatsträng är inte en strängtyp" #: c-family/c-format.c:202 #, gcc-internal-format msgid "found a %<%s%> reference but the format argument should be a string" -msgstr "hittade en %<%s%>-referens men formatargumentet skall vara en sträng" +msgstr "hittade en %<%s%>-referens men formatargumentet skall vara en sträng" #: c-family/c-format.c:205 #, gcc-internal-format msgid "found a %qT but the format argument should be a string" -msgstr "hittade en %qT men formatargumentet skall vara en sträng" +msgstr "hittade en %qT men formatargumentet skall vara en sträng" #: c-family/c-format.c:215 #, gcc-internal-format msgid "format argument should be a %<%s%> reference but a string was found" -msgstr "formatargumentet skulle vara en %<%s%>-referens men en sträng fanns" +msgstr "formatargumentet skulle vara en %<%s%>-referens men en sträng fanns" #: c-family/c-format.c:237 #, gcc-internal-format @@ -21363,17 +21363,17 @@ msgstr "formatargumentet skall vara en %<%s%>-referens" #: c-family/c-format.c:281 #, gcc-internal-format msgid "unrecognized format specifier" -msgstr "oigenkänd formatangivelse" +msgstr "oigenkänd formatangivelse" #: c-family/c-format.c:296 #, gcc-internal-format msgid "%qE is only allowed in Objective-C dialects" -msgstr "%qE är bara tillåtet i Objective-C-dialekter" +msgstr "%qE är bara tillÃ¥tet i Objective-C-dialekter" #: c-family/c-format.c:305 #, gcc-internal-format msgid "%qE is an unrecognized format function type" -msgstr "%qE är en okänd funktionsformattyp" +msgstr "%qE är en okänd funktionsformattyp" #: c-family/c-format.c:319 #, gcc-internal-format @@ -21383,82 +21383,82 @@ msgstr "%<...%> har ogiltigt operandnummer" #: c-family/c-format.c:326 #, gcc-internal-format msgid "format string argument follows the args to be formatted" -msgstr "formatsträngsargumentet kommer efter argumenten som skall formateras" +msgstr "formatsträngsargumentet kommer efter argumenten som skall formateras" #: c-family/c-format.c:1065 #, gcc-internal-format msgid "function might be possible candidate for %qs format attribute" -msgstr "funktionen är en möjlig kandidat för formatattributet %qs" +msgstr "funktionen är en möjlig kandidat för formatattributet %qs" #: c-family/c-format.c:1155 c-family/c-format.c:1176 c-family/c-format.c:2221 #, gcc-internal-format msgid "missing $ operand number in format" -msgstr "saknar numerisk $-operand i formatsträng" +msgstr "saknar numerisk $-operand i formatsträng" #: c-family/c-format.c:1185 #, gcc-internal-format, gfc-internal-format msgid "%s does not support %%n$ operand number formats" -msgstr "%s stödjer inte operandnummerformatet %%n$" +msgstr "%s stödjer inte operandnummerformatet %%n$" #: c-family/c-format.c:1192 #, gcc-internal-format msgid "operand number out of range in format" -msgstr "operandnummer utanför intervallet i format" +msgstr "operandnummer utanför intervallet i format" #: c-family/c-format.c:1215 #, gcc-internal-format, gfc-internal-format msgid "format argument %d used more than once in %s format" -msgstr "formatargument %d använt mer än en gång i formatet %s" +msgstr "formatargument %d använt mer än en gÃ¥ng i formatet %s" #: c-family/c-format.c:1247 #, gcc-internal-format msgid "$ operand number used after format without operand number" -msgstr "$-operandnummer använt efter format utan operandnummer" +msgstr "$-operandnummer använt efter format utan operandnummer" #: c-family/c-format.c:1278 #, gcc-internal-format, gfc-internal-format msgid "format argument %d unused before used argument %d in $-style format" -msgstr "formatargument %d oanvänt för använt argument %d i $-stilsformat" +msgstr "formatargument %d oanvänt för använt argument %d i $-stilsformat" #: c-family/c-format.c:1373 #, gcc-internal-format msgid "format not a string literal, format string not checked" -msgstr "formatet är inte en strängliteral, formatsträngen inte kontrollerad" +msgstr "formatet är inte en strängliteral, formatsträngen inte kontrollerad" #: c-family/c-format.c:1388 c-family/c-format.c:1391 #, gcc-internal-format msgid "format not a string literal and no format arguments" -msgstr "formatet är inte en strängliteral och inga formatargument" +msgstr "formatet är inte en strängliteral och inga formatargument" #: c-family/c-format.c:1394 #, gcc-internal-format msgid "format not a string literal, argument types not checked" -msgstr "formatet är inte en strängliteral, argumenttyperna inte kontrollerade" +msgstr "formatet är inte en strängliteral, argumenttyperna inte kontrollerade" #: c-family/c-format.c:1407 #, gcc-internal-format msgid "too many arguments for format" -msgstr "för många argument för formatsträng" +msgstr "för mÃ¥nga argument för formatsträng" #: c-family/c-format.c:1410 #, gcc-internal-format msgid "unused arguments in $-style format" -msgstr "oanvända argument i $-stilsformat" +msgstr "oanvända argument i $-stilsformat" #: c-family/c-format.c:1413 #, gcc-internal-format, gfc-internal-format msgid "zero-length %s format string" -msgstr "%s-formatsträng med längden noll" +msgstr "%s-formatsträng med längden noll" #: c-family/c-format.c:1417 #, gcc-internal-format msgid "format is a wide character string" -msgstr "formatet är en sträng breda tecken" +msgstr "formatet är en sträng breda tecken" #: c-family/c-format.c:1420 #, gcc-internal-format msgid "unterminated format string" -msgstr "icke terminerad formatsträng" +msgstr "icke terminerad formatsträng" #: c-family/c-format.c:1664 #, gcc-internal-format @@ -21478,12 +21478,12 @@ msgstr "utfyllnadstecken saknas vid slutet av strfmon-format" #: c-family/c-format.c:1809 #, gcc-internal-format, gfc-internal-format msgid "zero width in %s format" -msgstr "nollstorlek i %s formatsträng" +msgstr "nollstorlek i %s formatsträng" #: c-family/c-format.c:1827 #, gcc-internal-format, gfc-internal-format msgid "empty left precision in %s format" -msgstr "tom vänsterprecision i %s-format" +msgstr "tom vänsterprecision i %s-format" #: c-family/c-format.c:1903 #, gcc-internal-format, gfc-internal-format @@ -21493,7 +21493,7 @@ msgstr "tom precision i %s-format" #: c-family/c-format.c:1972 #, gcc-internal-format msgid "%s does not support the %qs %s length modifier" -msgstr "%1$s stödjer inte %3$s-längdmodifieraren %2$qs" +msgstr "%1$s stödjer inte %3$s-längdmodifieraren %2$qs" #: c-family/c-format.c:2005 #, gcc-internal-format @@ -21503,32 +21503,32 @@ msgstr "konvertering saknar typ vid slutet av format" #: c-family/c-format.c:2016 #, gcc-internal-format msgid "unknown conversion type character %qc in format" -msgstr "okänd konverteringstyptecken %qc i format" +msgstr "okänd konverteringstyptecken %qc i format" #: c-family/c-format.c:2019 #, gcc-internal-format msgid "unknown conversion type character 0x%x in format" -msgstr "okänt konverteringstyptecken 0x%x i format" +msgstr "okänt konverteringstyptecken 0x%x i format" #: c-family/c-format.c:2026 #, gcc-internal-format msgid "%s does not support the %<%%%c%> %s format" -msgstr "%1$s stödjer inte %3$s-formatet %<%%%2$c%>" +msgstr "%1$s stödjer inte %3$s-formatet %<%%%2$c%>" #: c-family/c-format.c:2042 #, gcc-internal-format msgid "%s used with %<%%%c%> %s format" -msgstr "%1$s använd med %3$s-format %<%%%2$c%>" +msgstr "%1$s använd med %3$s-format %<%%%2$c%>" #: c-family/c-format.c:2051 #, gcc-internal-format, gfc-internal-format msgid "%s does not support %s" -msgstr "%s stödjer inte %s" +msgstr "%s stödjer inte %s" #: c-family/c-format.c:2061 #, gcc-internal-format msgid "%s does not support %s with the %<%%%c%> %s format" -msgstr "%1$s stödjer inte %2$s med %4$s-formatet %<%%%3$c%>" +msgstr "%1$s stödjer inte %2$s med %4$s-formatet %<%%%3$c%>" #: c-family/c-format.c:2097 #, gcc-internal-format @@ -21543,22 +21543,22 @@ msgstr "%s ignorerad med %s i %s-format" #: c-family/c-format.c:2108 #, gcc-internal-format msgid "use of %s and %s together with %<%%%c%> %s format" -msgstr "%s och %s använda tillsammans i %<%%%c%> %s-format" +msgstr "%s och %s använda tillsammans i %<%%%c%> %s-format" #: c-family/c-format.c:2112 #, gcc-internal-format, gfc-internal-format msgid "use of %s and %s together in %s format" -msgstr "%s och %s använda tillsammans i %s-format" +msgstr "%s och %s använda tillsammans i %s-format" #: c-family/c-format.c:2131 #, gcc-internal-format msgid "%<%%%c%> yields only last 2 digits of year in some locales" -msgstr "%<%%%c%> ger bara de sista 2 siffrorna i årtalet i vissa lokaler" +msgstr "%<%%%c%> ger bara de sista 2 siffrorna i Ã¥rtalet i vissa lokaler" #: c-family/c-format.c:2134 #, gcc-internal-format msgid "%<%%%c%> yields only last 2 digits of year" -msgstr "%<%%%c%> ger bara de sista två siffrorna i årtalet" +msgstr "%<%%%c%> ger bara de sista tvÃ¥ siffrorna i Ã¥rtalet" #. The end of the format string was reached. #: c-family/c-format.c:2151 @@ -21569,12 +21569,12 @@ msgstr "ingen avslutande %<]%> till %<%%[%>-format" #: c-family/c-format.c:2165 #, gcc-internal-format msgid "use of %qs length modifier with %qc type character" -msgstr "längdmodifierare %qs använd med typtecken %qc" +msgstr "längdmodifierare %qs använd med typtecken %qc" #: c-family/c-format.c:2183 #, gcc-internal-format msgid "%s does not support the %<%%%s%c%> %s format" -msgstr "%1$s stödjer inte %4$s-formatet %<%%%2$s%3$c%>" +msgstr "%1$s stödjer inte %4$s-formatet %<%%%2$s%3$c%>" #: c-family/c-format.c:2200 #, gcc-internal-format @@ -21584,12 +21584,12 @@ msgstr "operandnummer angivet med undertryckt tilldelning" #: c-family/c-format.c:2203 #, gcc-internal-format msgid "operand number specified for format taking no argument" -msgstr "operandnummer angivet för format som inte tar argument" +msgstr "operandnummer angivet för format som inte tar argument" #: c-family/c-format.c:2288 #, gcc-internal-format msgid "embedded %<\\0%> in format" -msgstr "inbäddade %<\\0%> i format" +msgstr "inbäddade %<\\0%> i format" #: c-family/c-format.c:2357 #, gcc-internal-format, gfc-internal-format @@ -21599,7 +21599,7 @@ msgstr "skriver via nollpekare (argument %d)" #: c-family/c-format.c:2365 #, gcc-internal-format, gfc-internal-format msgid "reading through null pointer (argument %d)" -msgstr "läser via nollpekare (argument %d)" +msgstr "läser via nollpekare (argument %d)" #: c-family/c-format.c:2385 #, gcc-internal-format, gfc-internal-format @@ -21614,57 +21614,57 @@ msgstr "extra typkvalificerare i formatargument (argument %d)" #: c-family/c-format.c:2512 #, gcc-internal-format msgid "%s %<%s%.*s%> expects argument of type %<%s%s%>, but argument %d has type %qT" -msgstr "%s %<%s%.*s%> förväntar sig argument av typen %<%s%s%>, men argument %d har typen %qT" +msgstr "%s %<%s%.*s%> förväntar sig argument av typen %<%s%s%>, men argument %d har typen %qT" #: c-family/c-format.c:2519 #, gcc-internal-format msgid "%s %<%s%.*s%> expects a matching %<%s%s%> argument" -msgstr "%s %<%s%.*s%> förväntar sig ett matchande %<%s%s%>-argument" +msgstr "%s %<%s%.*s%> förväntar sig ett matchande %<%s%s%>-argument" #: c-family/c-format.c:2527 #, gcc-internal-format msgid "%s %<%s%.*s%> expects argument of type %<%T%s%>, but argument %d has type %qT" -msgstr "%s %<%s%.*s%> förväntar sig argument av typen %<%T%s%>, men argument %d har typen %qT" +msgstr "%s %<%s%.*s%> förväntar sig argument av typen %<%T%s%>, men argument %d har typen %qT" #: c-family/c-format.c:2534 #, gcc-internal-format msgid "%s %<%s%.*s%> expects a matching %<%T%s%> argument" -msgstr "%s %<%s%.*s%> förväntar sig ett matchande %<%T%s%>-argument" +msgstr "%s %<%s%.*s%> förväntar sig ett matchande %<%T%s%>-argument" #: c-family/c-format.c:2594 c-family/c-format.c:2600 c-family/c-format.c:2751 #, gcc-internal-format msgid "%<__gcc_host_wide_int__%> is not defined as a type" -msgstr "%<__gcc_host_wide_int__%> är inte definierad som en typ" +msgstr "%<__gcc_host_wide_int__%> är inte definierad som en typ" #: c-family/c-format.c:2607 c-family/c-format.c:2761 #, gcc-internal-format msgid "%<__gcc_host_wide_int__%> is not defined as %<long%> or %<long long%>" -msgstr "%<__gcc_host_wide_int__%> är inte definierad som %<long%> eller %<long long%>" +msgstr "%<__gcc_host_wide_int__%> är inte definierad som %<long%> eller %<long long%>" #: c-family/c-format.c:2657 #, gcc-internal-format msgid "%<locus%> is not defined as a type" -msgstr "%<locus%> är inte definierad som en typ" +msgstr "%<locus%> är inte definierad som en typ" #: c-family/c-format.c:2710 #, gcc-internal-format msgid "%<location_t%> is not defined as a type" -msgstr "%<location_t%> är inte definierad som en typ" +msgstr "%<location_t%> är inte definierad som en typ" #: c-family/c-format.c:2727 #, gcc-internal-format msgid "%<tree%> is not defined as a type" -msgstr "%<tree%> är inte definierad som en typ" +msgstr "%<tree%> är inte definierad som en typ" #: c-family/c-format.c:2732 #, gcc-internal-format msgid "%<tree%> is not defined as a pointer type" -msgstr "%<tree%> är inte definierad som en pekartyp" +msgstr "%<tree%> är inte definierad som en pekartyp" #: c-family/c-format.c:3005 #, gcc-internal-format msgid "args to be formatted is not %<...%>" -msgstr "argumenten som skall formateras är inte %<...%>" +msgstr "argumenten som skall formateras är inte %<...%>" #: c-family/c-format.c:3017 #, gcc-internal-format @@ -21674,7 +21674,7 @@ msgstr "strftime-format kan inte formatera argument" #: c-family/c-lex.c:228 #, gcc-internal-format msgid "badly nested C headers from preprocessor" -msgstr "felaktigt inkapslade C-huvuden från preprocessorn" +msgstr "felaktigt inkapslade C-huvuden frÃ¥n preprocessorn" #: c-family/c-lex.c:263 #, gcc-internal-format, gfc-internal-format @@ -21685,12 +21685,12 @@ msgstr "ignorerar #pragma %s %s" #: c-family/c-lex.c:403 c-family/c-lex.c:1036 #, gcc-internal-format msgid "stray %<@%> in program" -msgstr "överblivet %<@%> i program" +msgstr "överblivet %<@%> i program" #: c-family/c-lex.c:418 #, gcc-internal-format msgid "stray %qs in program" -msgstr "överblivet %qs i program" +msgstr "överblivet %qs i program" #: c-family/c-lex.c:428 #, gcc-internal-format, gfc-internal-format @@ -21700,27 +21700,27 @@ msgstr "avslutande %c-tecken saknas" #: c-family/c-lex.c:430 #, gcc-internal-format msgid "stray %qc in program" -msgstr "överblivet %qc i program" +msgstr "överblivet %qc i program" #: c-family/c-lex.c:432 #, gcc-internal-format msgid "stray %<\\%o%> in program" -msgstr "överblivet %<\\\\%o%> i program" +msgstr "överblivet %<\\\\%o%> i program" #: c-family/c-lex.c:636 #, gcc-internal-format msgid "this decimal constant is unsigned only in ISO C90" -msgstr "denna decimala konstant är teckenlös endast i ISO C90" +msgstr "denna decimala konstant är teckenlös endast i ISO C90" #: c-family/c-lex.c:640 #, gcc-internal-format msgid "this decimal constant would be unsigned in ISO C90" -msgstr "denna decimala konstant skulle varit teckenlös i ISO C90" +msgstr "denna decimala konstant skulle varit teckenlös i ISO C90" #: c-family/c-lex.c:660 #, gcc-internal-format msgid "integer constant is too large for %<unsigned long%> type" -msgstr "heltalskonstant är för stor för typen %<unsigned long%>" +msgstr "heltalskonstant är för stor för typen %<unsigned long%>" #: c-family/c-lex.c:698 #, gcc-internal-format @@ -21730,17 +21730,17 @@ msgstr "flyttalskonstant utan suffix" #: c-family/c-lex.c:730 #, gcc-internal-format msgid "unsupported non-standard suffix on floating constant" -msgstr "icke-standardsuffix på flyttalskonstant stöds inte" +msgstr "icke-standardsuffix pÃ¥ flyttalskonstant stöds inte" #: c-family/c-lex.c:735 #, gcc-internal-format msgid "non-standard suffix on floating constant" -msgstr "icke-standardsuffix på flyttalskonstant" +msgstr "icke-standardsuffix pÃ¥ flyttalskonstant" #: c-family/c-lex.c:791 c-family/c-lex.c:793 #, gcc-internal-format msgid "floating constant exceeds range of %qT" -msgstr "flyttalskonstant överskrider intervallet för %qT" +msgstr "flyttalskonstant överskrider intervallet för %qT" #: c-family/c-lex.c:802 #, gcc-internal-format @@ -21750,22 +21750,22 @@ msgstr "flyttalskonstant avkortas till noll" #: c-family/c-lex.c:998 #, gcc-internal-format msgid "repeated %<@%> before Objective-C string" -msgstr "upprepat %<@%> före Objective-C++-sträng" +msgstr "upprepat %<@%> före Objective-C++-sträng" #: c-family/c-lex.c:1017 cp/parser.c:3478 #, gcc-internal-format msgid "unsupported non-standard concatenation of string literals" -msgstr "ej stödd konkatenering av strängliteraler som inte följer standard" +msgstr "ej stödd konkatenering av strängliteraler som inte följer standard" #: c-family/c-lex.c:1045 #, gcc-internal-format msgid "traditional C rejects string constant concatenation" -msgstr "traditionell C stödjer inte strängkonstantsammanslagning" +msgstr "traditionell C stödjer inte strängkonstantsammanslagning" #: c-family/c-omp.c:144 #, gcc-internal-format msgid "invalid expression type for %<#pragma omp atomic%>" -msgstr "ogiltig uttryckstyp för %<#pragma omp atomic%>" +msgstr "ogiltig uttryckstyp för %<#pragma omp atomic%>" #: c-family/c-omp.c:201 #, gcc-internal-format @@ -21780,12 +21780,12 @@ msgstr "" #: c-family/c-omp.c:368 cp/semantics.c:4800 #, gcc-internal-format msgid "invalid type for iteration variable %qE" -msgstr "ogiltig typ för iterationsvariabeln %qE" +msgstr "ogiltig typ för iterationsvariabeln %qE" #: c-family/c-omp.c:381 #, gcc-internal-format msgid "%qE is not initialized" -msgstr "%qE är inte initierad" +msgstr "%qE är inte initierad" #: c-family/c-omp.c:398 cp/semantics.c:4715 #, gcc-internal-format @@ -21800,47 +21800,47 @@ msgstr "ogiltigt styrpredikat" #: c-family/c-omp.c:487 cp/semantics.c:4721 #, gcc-internal-format msgid "missing increment expression" -msgstr "utelämnat ökningsuttryck" +msgstr "utelämnat ökningsuttryck" #: c-family/c-omp.c:556 cp/semantics.c:4577 #, gcc-internal-format msgid "invalid increment expression" -msgstr "ogiltigt ökningsuttryck" +msgstr "ogiltigt ökningsuttryck" #: c-family/c-opts.c:308 #, gcc-internal-format msgid "-I- specified twice" -msgstr "-I- angiven två gånger" +msgstr "-I- angiven tvÃ¥ gÃ¥nger" #: c-family/c-opts.c:311 #, gcc-internal-format msgid "obsolete option -I- used, please use -iquote instead" -msgstr "föråldrad flagga -I- använd, använd -iquote istället" +msgstr "förÃ¥ldrad flagga -I- använd, använd -iquote istället" #: c-family/c-opts.c:494 #, gcc-internal-format msgid "-Werror=normalized=: set -Wnormalized=nfc" -msgstr "-Werror=normalized=: sätt -Wnormalized=nfc" +msgstr "-Werror=normalized=: sätt -Wnormalized=nfc" #: c-family/c-opts.c:508 #, gcc-internal-format msgid "argument %qs to %<-Wnormalized%> not recognized" -msgstr "argumentet %qs till %<-Wnormalized%> är inte känt" +msgstr "argumentet %qs till %<-Wnormalized%> är inte känt" #: c-family/c-opts.c:739 fortran/cpp.c:347 #, gcc-internal-format msgid "output filename specified twice" -msgstr "utdatafilnamn angivet två gånger" +msgstr "utdatafilnamn angivet tvÃ¥ gÃ¥nger" #: c-family/c-opts.c:878 #, gcc-internal-format msgid "-fexcess-precision=standard for C++" -msgstr "-fexcess-precision=standard för C++" +msgstr "-fexcess-precision=standard för C++" #: c-family/c-opts.c:891 #, gcc-internal-format msgid "-fno-gnu89-inline is only supported in GNU99 or C99 mode" -msgstr "-fno-gnu89-inline stöds endast i GNU99- C99-läge" +msgstr "-fno-gnu89-inline stöds endast i GNU99- C99-läge" #: c-family/c-opts.c:970 #, gcc-internal-format @@ -21875,57 +21875,57 @@ msgstr "-Wformat-security ignorerad utan -Wformat" #: c-family/c-opts.c:1017 #, gcc-internal-format msgid "opening output file %s: %m" -msgstr "vid öppnandet av utdatafil %s: %m" +msgstr "vid öppnandet av utdatafil %s: %m" #: c-family/c-opts.c:1022 #, gcc-internal-format, gfc-internal-format msgid "too many filenames given. Type %s --help for usage" -msgstr "för många filnamn angivna. Skriv %s --help för användningsinformation" +msgstr "för mÃ¥nga filnamn angivna. Skriv %s --help för användningsinformation" #: c-family/c-opts.c:1152 #, gcc-internal-format msgid "opening dependency file %s: %m" -msgstr "när beroendefil %s öppnades: %m" +msgstr "när beroendefil %s öppnades: %m" #: c-family/c-opts.c:1162 #, gcc-internal-format msgid "closing dependency file %s: %m" -msgstr "när beroendefil %s stängdes: %m" +msgstr "när beroendefil %s stängdes: %m" #: c-family/c-opts.c:1165 #, gcc-internal-format msgid "when writing output to %s: %m" -msgstr "när utdata skrevs till %s: %m" +msgstr "när utdata skrevs till %s: %m" #: c-family/c-opts.c:1245 #, gcc-internal-format msgid "to generate dependencies you must specify either -M or -MM" -msgstr "för att generera beroenden måste du ange antingen -M eller -MM" +msgstr "för att generera beroenden mÃ¥ste du ange antingen -M eller -MM" #: c-family/c-opts.c:1268 #, gcc-internal-format msgid "-MG may only be used with -M or -MM" -msgstr "-MG kan endast används med -M eller -MM" +msgstr "-MG kan endast används med -M eller -MM" #: c-family/c-opts.c:1298 #, gcc-internal-format msgid "-fdirectives-only is incompatible with -Wunused_macros" -msgstr "-fdirectives-only är inkompatibel med -Wunused_macros" +msgstr "-fdirectives-only är inkompatibel med -Wunused_macros" #: c-family/c-opts.c:1300 #, gcc-internal-format msgid "-fdirectives-only is incompatible with -traditional" -msgstr "-fdirectives-only är inkompatibel med -traditional" +msgstr "-fdirectives-only är inkompatibel med -traditional" #: c-family/c-opts.c:1456 #, gcc-internal-format msgid "too late for # directive to set debug directory" -msgstr "för sent för #-direktiv att ange felsökningskatalog" +msgstr "för sent för #-direktiv att ange felsökningskatalog" #: c-family/c-pch.c:132 #, gcc-internal-format msgid "can%'t create precompiled header %s: %m" -msgstr "kan inte skapa förkompilerat huvud %s: %m" +msgstr "kan inte skapa förkompilerat huvud %s: %m" #: c-family/c-pch.c:154 #, gcc-internal-format @@ -21935,7 +21935,7 @@ msgstr "kan inte skriva till %s: %m" #: c-family/c-pch.c:160 #, gcc-internal-format msgid "%qs is not a valid output file" -msgstr "%qs är inte en giltigt utfil" +msgstr "%qs är inte en giltigt utfil" #: c-family/c-pch.c:193 c-family/c-pch.c:208 c-family/c-pch.c:225 #, gcc-internal-format @@ -21945,33 +21945,33 @@ msgstr "kan inte skriva %s: %m" #: c-family/c-pch.c:198 c-family/c-pch.c:215 #, gcc-internal-format msgid "can%'t seek in %s: %m" -msgstr "kan inte söka i %s: %m" +msgstr "kan inte söka i %s: %m" #: c-family/c-pch.c:206 c-family/c-pch.c:253 c-family/c-pch.c:294 #: c-family/c-pch.c:345 #, gcc-internal-format msgid "can%'t read %s: %m" -msgstr "kan inte läsa %s: %m" +msgstr "kan inte läsa %s: %m" #: c-family/c-pch.c:483 #, gcc-internal-format msgid "pch_preprocess pragma should only be used with -fpreprocessed" -msgstr "pragmat pch_preprocess skall bara användas med -fpreprocessed" +msgstr "pragmat pch_preprocess skall bara användas med -fpreprocessed" #: c-family/c-pch.c:484 #, gcc-internal-format msgid "use #include instead" -msgstr "använd #include istället" +msgstr "använd #include istället" #: c-family/c-pch.c:490 #, gcc-internal-format msgid "%s: couldn%'t open PCH file: %m" -msgstr "%s: kunde inte öppna PCH-fil: %m" +msgstr "%s: kunde inte öppna PCH-fil: %m" #: c-family/c-pch.c:495 #, gcc-internal-format msgid "use -Winvalid-pch for more information" -msgstr "använd -Winvalid-pch för mer information" +msgstr "använd -Winvalid-pch för mer information" #: c-family/c-pch.c:496 #, gcc-internal-format, gfc-internal-format @@ -21981,12 +21981,12 @@ msgstr "%s: PCH-fil var ogiltig" #: c-family/c-pragma.c:101 #, gcc-internal-format msgid "#pragma pack (pop) encountered without matching #pragma pack (push)" -msgstr "#pragma pack (pop) påträffat utan matchande #pragma pack (push)" +msgstr "#pragma pack (pop) pÃ¥träffat utan matchande #pragma pack (push)" #: c-family/c-pragma.c:114 #, gcc-internal-format msgid "#pragma pack(pop, %E) encountered without matching #pragma pack(push, %E)" -msgstr "#pragma pack(pop, %E) påträffat utan matchande #pragma pack(push, %E)" +msgstr "#pragma pack(pop, %E) pÃ¥träffat utan matchande #pragma pack(push, %E)" #: c-family/c-pragma.c:144 #, gcc-internal-format @@ -22016,12 +22016,12 @@ msgstr "fel utformat %<#pragma pack(pop[, id])%> - ignoreras" #: c-family/c-pragma.c:175 #, gcc-internal-format msgid "unknown action %qE for %<#pragma pack%> - ignored" -msgstr "okänd åtgärd %qE för %<#pragma pack%> - ignoreras" +msgstr "okänd Ã¥tgärd %qE för %<#pragma pack%> - ignoreras" #: c-family/c-pragma.c:204 #, gcc-internal-format msgid "junk at end of %<#pragma pack%>" -msgstr "skräp vid slutet av %<#pragma pack%>" +msgstr "skräp vid slutet av %<#pragma pack%>" #: c-family/c-pragma.c:207 #, gcc-internal-format @@ -22031,12 +22031,12 @@ msgstr "#pragma pack har ingen effekt med -fpack-struct - ignoreras" #: c-family/c-pragma.c:227 #, gcc-internal-format, gfc-internal-format msgid "alignment must be a small power of two, not %d" -msgstr "justering måste vara två upphöjt till ett litet tal, inte %d" +msgstr "justering mÃ¥ste vara tvÃ¥ upphöjt till ett litet tal, inte %d" #: c-family/c-pragma.c:267 #, gcc-internal-format msgid "applying #pragma weak %q+D after first use results in unspecified behavior" -msgstr "applicering av #pragma weak %q+D efter första användningen ger odefinierat beteende" +msgstr "applicering av #pragma weak %q+D efter första användningen ger odefinierat beteende" #: c-family/c-pragma.c:345 c-family/c-pragma.c:350 #, gcc-internal-format @@ -22046,7 +22046,7 @@ msgstr "felformaterat #pragma weak, ignoreras" #: c-family/c-pragma.c:354 #, gcc-internal-format msgid "junk at end of %<#pragma weak%>" -msgstr "skräp vid slutet av %<#pragma weak%>" +msgstr "skräp vid slutet av %<#pragma weak%>" #: c-family/c-pragma.c:425 c-family/c-pragma.c:427 #, gcc-internal-format @@ -22056,17 +22056,17 @@ msgstr "felformaterat #pragma redefine_extname, ignoreras" #: c-family/c-pragma.c:430 #, gcc-internal-format msgid "junk at end of %<#pragma redefine_extname%>" -msgstr "skräp vid slutet av %<#pragma redefine_extname%>" +msgstr "skräp vid slutet av %<#pragma redefine_extname%>" #: c-family/c-pragma.c:459 c-family/c-pragma.c:554 #, gcc-internal-format msgid "#pragma redefine_extname ignored due to conflict with previous rename" -msgstr "#pragma redefine_extname ignoreras eftersom det står i konflikt med tidigare namnbyte" +msgstr "#pragma redefine_extname ignoreras eftersom det stÃ¥r i konflikt med tidigare namnbyte" #: c-family/c-pragma.c:487 #, gcc-internal-format msgid "#pragma redefine_extname ignored due to conflict with previous #pragma redefine_extname" -msgstr "#pragma redefine_extname ignoreras på grund av konflikt med tidigare #pragma redefine_extname" +msgstr "#pragma redefine_extname ignoreras pÃ¥ grund av konflikt med tidigare #pragma redefine_extname" #: c-family/c-pragma.c:508 #, gcc-internal-format @@ -22076,42 +22076,42 @@ msgstr "felformaterat #pragma extern_prefix, ignoreras" #: c-family/c-pragma.c:511 #, gcc-internal-format msgid "junk at end of %<#pragma extern_prefix%>" -msgstr "skräp vid slutet av %<#pragma extern_prefix%>" +msgstr "skräp vid slutet av %<#pragma extern_prefix%>" #: c-family/c-pragma.c:518 #, gcc-internal-format msgid "#pragma extern_prefix not supported on this target" -msgstr "#pragma extern_prefix stöds inte på denna målarkitektur" +msgstr "#pragma extern_prefix stöds inte pÃ¥ denna mÃ¥larkitektur" #: c-family/c-pragma.c:545 #, gcc-internal-format msgid "asm declaration ignored due to conflict with previous rename" -msgstr "asm-deklaration ignorerad eftersom den står i konflikt med tidigare namnbyte" +msgstr "asm-deklaration ignorerad eftersom den stÃ¥r i konflikt med tidigare namnbyte" #: c-family/c-pragma.c:578 #, gcc-internal-format msgid "#pragma redefine_extname ignored due to conflict with __asm__ declaration" -msgstr "#pragma redefine_extname ignoreras på grund av konflikt med __asm__-deklaration" +msgstr "#pragma redefine_extname ignoreras pÃ¥ grund av konflikt med __asm__-deklaration" #: c-family/c-pragma.c:640 #, gcc-internal-format msgid "#pragma GCC visibility push() must specify default, internal, hidden or protected" -msgstr "#pragma GCC visibility push() måste ange default, internal, hidden eller protected" +msgstr "#pragma GCC visibility push() mÃ¥ste ange default, internal, hidden eller protected" #: c-family/c-pragma.c:682 #, gcc-internal-format msgid "#pragma GCC visibility must be followed by push or pop" -msgstr "#pragma GCC visibility måste följas av push eller pop" +msgstr "#pragma GCC visibility mÃ¥ste följas av push eller pop" #: c-family/c-pragma.c:688 #, gcc-internal-format msgid "no matching push for %<#pragma GCC visibility pop%>" -msgstr "ingen matchande push för %<#pragma GCC visibility pop%>" +msgstr "ingen matchande push för %<#pragma GCC visibility pop%>" #: c-family/c-pragma.c:693 c-family/c-pragma.c:700 #, gcc-internal-format msgid "missing %<(%> after %<#pragma GCC visibility push%> - ignored" -msgstr "%<(%> saknas efter %<#pragma GCC visibility push%> - ignoreras\"" +msgstr "%<(%> saknas efter %<#pragma GCC visibility push%> - ignorerasâ€" #: c-family/c-pragma.c:696 #, gcc-internal-format @@ -22121,7 +22121,7 @@ msgstr "felformaterat #pragma GCC visibility push" #: c-family/c-pragma.c:704 #, gcc-internal-format msgid "junk at end of %<#pragma GCC visibility%>" -msgstr "skräp vid slutet av %<#pragma GCC visibility%>" +msgstr "skräp vid slutet av %<#pragma GCC visibility%>" #: c-family/c-pragma.c:719 #, gcc-internal-format @@ -22131,7 +22131,7 @@ msgstr "[error|warning|ignored] saknas efter %<#pragma GCC diagnostic%>" #: c-family/c-pragma.c:738 #, gcc-internal-format msgid "expected [error|warning|ignored|push|pop] after %<#pragma GCC diagnostic%>" -msgstr "[error|warning|ignored|push|pop] förväntades efter %<#pragma GCC diagnostic%>" +msgstr "[error|warning|ignored|push|pop] förväntades efter %<#pragma GCC diagnostic%>" #: c-family/c-pragma.c:742 #, gcc-internal-format @@ -22141,57 +22141,57 @@ msgstr "alternativ saknas efter %<#pragma GCC diagnostics%> sort" #: c-family/c-pragma.c:754 #, gcc-internal-format msgid "unknown option after %<#pragma GCC diagnostic%> kind" -msgstr "okänt alternativ efter %<#pragma GCC diagnostic%> sort" +msgstr "okänt alternativ efter %<#pragma GCC diagnostic%> sort" #: c-family/c-pragma.c:767 #, gcc-internal-format msgid "#pragma GCC option is not allowed inside functions" -msgstr "#pragma GCC option tillåts inte inuti funktioner" +msgstr "#pragma GCC option tillÃ¥ts inte inuti funktioner" #: c-family/c-pragma.c:780 #, gcc-internal-format msgid "%<#pragma GCC option%> is not a string" -msgstr "%<#pragma GCC option%> är inte en sträng" +msgstr "%<#pragma GCC option%> är inte en sträng" #: c-family/c-pragma.c:807 #, gcc-internal-format msgid "%<#pragma GCC target (string [,string]...)%> does not have a final %<)%>" -msgstr "%<#pragma GCC target (sträng [,sträng]...)%> har inte en avslutande %<)%>" +msgstr "%<#pragma GCC target (sträng [,sträng]...)%> har inte en avslutande %<)%>" #: c-family/c-pragma.c:813 #, gcc-internal-format msgid "#pragma GCC target string... is badly formed" -msgstr "#pragma GCC target sträng... är felaktigt utformad" +msgstr "#pragma GCC target sträng... är felaktigt utformad" #: c-family/c-pragma.c:836 #, gcc-internal-format msgid "#pragma GCC optimize is not allowed inside functions" -msgstr "#pragma GCC optimize tillåts inte inuti funktioner" +msgstr "#pragma GCC optimize tillÃ¥ts inte inuti funktioner" #: c-family/c-pragma.c:849 #, gcc-internal-format msgid "%<#pragma GCC optimize%> is not a string or number" -msgstr "%<#pragma GCC optimize%> är inte en sträng eller ett tal" +msgstr "%<#pragma GCC optimize%> är inte en sträng eller ett tal" #: c-family/c-pragma.c:875 #, gcc-internal-format msgid "%<#pragma GCC optimize (string [,string]...)%> does not have a final %<)%>" -msgstr "%<#pragma GCC optimize (sträng [,sträng]...)%> har inte en avslutande %<)%>" +msgstr "%<#pragma GCC optimize (sträng [,sträng]...)%> har inte en avslutande %<)%>" #: c-family/c-pragma.c:881 #, gcc-internal-format msgid "#pragma GCC optimize string... is badly formed" -msgstr "#pragma GCC optimize string... är felaktigt utformad" +msgstr "#pragma GCC optimize string... är felaktigt utformad" #: c-family/c-pragma.c:923 #, gcc-internal-format msgid "junk at end of %<#pragma push_options%>" -msgstr "skräp vid slutet av %<#pragma push_options%>" +msgstr "skräp vid slutet av %<#pragma push_options%>" #: c-family/c-pragma.c:953 #, gcc-internal-format msgid "junk at end of %<#pragma pop_options%>" -msgstr "skräp vid slutet av %<#pragma pop_options%>" +msgstr "skräp vid slutet av %<#pragma pop_options%>" #: c-family/c-pragma.c:960 #, gcc-internal-format @@ -22201,12 +22201,12 @@ msgstr "%<#pragma GCC pop_options%> utan en motsvarande %<#pragma GCC push_optio #: c-family/c-pragma.c:1002 #, gcc-internal-format msgid "junk at end of %<#pragma reset_options%>" -msgstr "skräp vid slutet av %<#pragma reset_options%>" +msgstr "skräp vid slutet av %<#pragma reset_options%>" #: c-family/c-pragma.c:1040 c-family/c-pragma.c:1047 #, gcc-internal-format msgid "expected a string after %<#pragma message%>" -msgstr "en sträng förväntades efter %<#pragma message%>" +msgstr "en sträng förväntades efter %<#pragma message%>" #: c-family/c-pragma.c:1042 #, gcc-internal-format @@ -22216,7 +22216,7 @@ msgstr "felformaterat %<#pragma message%>, ignoreras" #: c-family/c-pragma.c:1052 #, gcc-internal-format msgid "junk at end of %<#pragma message%>" -msgstr "skräp vid slutet av %<#pragma message%>" +msgstr "skräp vid slutet av %<#pragma message%>" #: c-family/c-pragma.c:1055 #, gcc-internal-format, gfc-internal-format @@ -22226,7 +22226,7 @@ msgstr "#pragma message: %s" #: c-family/c-pragma.c:1092 #, gcc-internal-format msgid "invalid location for %<pragma %s%>, ignored" -msgstr "ogiltig plats för %<#pragma %s%>, ignoreras" +msgstr "ogiltig plats för %<#pragma %s%>, ignoreras" #: c-family/c-pragma.c:1099 c-family/c-pragma.c:1113 #, gcc-internal-format @@ -22236,42 +22236,42 @@ msgstr "felformaterat %<#pragma %s%>, ignoreras" #: c-family/c-pragma.c:1119 #, gcc-internal-format msgid "junk at end of %<#pragma %s%>" -msgstr "skräp vid slutet av %<#pragma %s%>" +msgstr "skräp vid slutet av %<#pragma %s%>" #: c-family/c-pragma.c:1137 #, gcc-internal-format msgid "%<#pragma STDC FLOAT_CONST_DECIMAL64%> is not supported for C++" -msgstr "%<#pragma STDC FLOAT_CONST_DECIMAL64%> stöds inte för C++" +msgstr "%<#pragma STDC FLOAT_CONST_DECIMAL64%> stöds inte för C++" #: c-family/c-pragma.c:1146 #, gcc-internal-format msgid "%<#pragma STDC FLOAT_CONST_DECIMAL64%> is not supported on this target" -msgstr "%<#pragma STDC FLOAT_CONST_DECIMAL64%> stöds inte på denna målarkitektur" +msgstr "%<#pragma STDC FLOAT_CONST_DECIMAL64%> stöds inte pÃ¥ denna mÃ¥larkitektur" #: c-family/c-pragma.c:1152 #, gcc-internal-format msgid "ISO C does not support %<#pragma STDC FLOAT_CONST_DECIMAL64%>" -msgstr "ISO C stödjer inte %<#pragma STDC FLOAT_CONST_DECIMAL64%>" +msgstr "ISO C stödjer inte %<#pragma STDC FLOAT_CONST_DECIMAL64%>" #: c-family/c-semantics.c:159 #, gcc-internal-format, gfc-internal-format msgid "wrong type argument to %s" -msgstr "fel typ på argument till %s" +msgstr "fel typ pÃ¥ argument till %s" #: common/config/alpha/alpha-common.c:78 #, gcc-internal-format msgid "bad value %qs for -mtls-size switch" -msgstr "felaktigt värde %qs till flaggan -mtls-size" +msgstr "felaktigt värde %qs till flaggan -mtls-size" #: common/config/bfin/bfin-common.c:305 common/config/m68k/m68k-common.c:58 #, gcc-internal-format, gfc-internal-format msgid "-mshared-library-id=%s is not between 0 and %d" -msgstr "-mshared-library-id=%s är inte mellan 0 och %d" +msgstr "-mshared-library-id=%s är inte mellan 0 och %d" #: common/config/bfin/bfin-common.c:324 #, gcc-internal-format, gfc-internal-format msgid "-mcpu=%s is not valid" -msgstr "-mcpu=%s är inte giltigt" +msgstr "-mcpu=%s är inte giltigt" #: common/config/bfin/bfin-common.c:360 #, gcc-internal-format, gfc-internal-format @@ -22279,69 +22279,69 @@ msgid "-mcpu=%s has invalid silicon revision" msgstr "-mcpu=%s har ogiltig kiselversion" #: common/config/i386/i386-common.c:560 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "-malign-loops is obsolete, use -falign-loops" -msgstr "%salign-loops%s är föråldrat, använd -falign-loops%s" +msgstr "-malign-loops är förÃ¥ldrat, använd -falign-loops" #: common/config/i386/i386-common.c:562 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "-malign-loops=%d is not between 0 and %d" -msgstr "%salign-loops=%d%s är inte mellan 0 och %d" +msgstr "-malign-loops=%d är inte mellan 0 och %d" #: common/config/i386/i386-common.c:569 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "-malign-jumps is obsolete, use -falign-jumps" -msgstr "%salign-jumps%s är föråldrat, använd -falign-jumps%s" +msgstr "-malign-jumps är förÃ¥ldrat, använd -falign-jumps" #: common/config/i386/i386-common.c:571 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "-malign-jumps=%d is not between 0 and %d" -msgstr "%salign-loops=%d%s är inte mellan 0 och %d" +msgstr "-malign-jumps=%d är inte mellan 0 och %d" #: common/config/i386/i386-common.c:579 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "-malign-functions is obsolete, use -falign-functions" -msgstr "%salign-functions%s är föråldrat, använd -falign-functions%s" +msgstr "-malign-functions är förÃ¥ldrat, använd -falign-functions" #: common/config/i386/i386-common.c:581 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "-malign-functions=%d is not between 0 and %d" -msgstr "%salign-loops=%d%s är inte mellan 0 och %d" +msgstr "-malign-functions=%d är inte mellan 0 och %d" #: common/config/i386/i386-common.c:590 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "-mbranch-cost=%d is not between 0 and 5" -msgstr "%sbranch-cost=%d%s är inte mellan 0 och 5" +msgstr "-mbranch-cost=%d är inte mellan 0 och 5" #: common/config/i386/i386-common.c:640 #, gcc-internal-format msgid "%<-fsplit-stack%> currently only supported on GNU/Linux" -msgstr "%<-fsplit-stack%> stödjs för närvarande bara på GNU/Linux" +msgstr "%<-fsplit-stack%> stödjs för närvarande bara pÃ¥ GNU/Linux" #: common/config/i386/i386-common.c:646 #, gcc-internal-format msgid "%<-fsplit-stack%> requires assembler support for CFI directives" -msgstr "%<-fsplit-stack%> kräver assemblerstöd för CFI-direktiv" +msgstr "%<-fsplit-stack%> kräver assemblerstöd för CFI-direktiv" #: common/config/ia64/ia64-common.c:60 #, gcc-internal-format msgid "bad value %<%s%> for -mtls-size= switch" -msgstr "felaktigt värde %<%s%> till flaggan -mtls-size=" +msgstr "felaktigt värde %<%s%> till flaggan -mtls-size=" #: common/config/rs6000/rs6000-common.c:208 config/sparc/sparc.c:958 #, gcc-internal-format, gfc-internal-format msgid "unknown -mdebug-%s switch" -msgstr "okänd flagga -mdebug-%s" +msgstr "okänd flagga -mdebug-%s" #: common/config/rs6000/rs6000-common.c:254 #, gcc-internal-format, gfc-internal-format msgid "unknown switch -mlong-double-%s" -msgstr "okänd flagga -mlong-double-%s" +msgstr "okänd flagga -mlong-double-%s" #: common/config/rs6000/rs6000-common.c:264 #, gcc-internal-format msgid "-msingle-float option equivalent to -mhard-float" -msgstr "flaggan -msingle-float är likvärdig med -mhard-float" +msgstr "flaggan -msingle-float är likvärdig med -mhard-float" #: common/config/rs6000/rs6000-common.c:280 #, gcc-internal-format @@ -22351,143 +22351,143 @@ msgstr "flaggan -msimple-fpu ignoreras" #: common/config/rx/rx-common.c:60 #, gcc-internal-format msgid "the RX200 cpu does not have FPU hardware" -msgstr "cpu:n RX200 har inte FPU-hårdvara" +msgstr "cpu:n RX200 har inte FPU-hÃ¥rdvara" #: common/config/s390/s390-common.c:94 #, gcc-internal-format msgid "stack guard value must be an exact power of 2" -msgstr "stackvaktvärde måste en exakt potens av 2" +msgstr "stackvaktvärde mÃ¥ste en exakt potens av 2" #: common/config/s390/s390-common.c:99 #, gcc-internal-format msgid "stack size must be an exact power of 2" -msgstr "stackstorlek måste vara en exakt potens av 2" +msgstr "stackstorlek mÃ¥ste vara en exakt potens av 2" #: common/config/v850/v850-common.c:48 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "value passed in %qs is too large" -msgstr "värde skickat till %<-m%s%> är för stort" +msgstr "värde skickat till %qs är för stort" #: config/darwin-c.c:85 #, gcc-internal-format msgid "too many #pragma options align=reset" -msgstr "för många #pragma-flaggor align=reset" +msgstr "för mÃ¥nga #pragma-flaggor align=reset" #: config/darwin-c.c:105 config/darwin-c.c:108 config/darwin-c.c:110 #: config/darwin-c.c:112 #, gcc-internal-format msgid "malformed '#pragma options', ignoring" -msgstr "felformaterat \"#pragma options\", ignoreras" +msgstr "felformaterat â€#pragma optionsâ€, ignoreras" #: config/darwin-c.c:115 #, gcc-internal-format msgid "junk at end of '#pragma options'" -msgstr "skräp vid slutet av \"#pragma options\"" +msgstr "skräp vid slutet av â€#pragma optionsâ€" #: config/darwin-c.c:125 #, gcc-internal-format msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring" -msgstr "felformaterat \"#pragma options align={mac68k|power|reset}\">, ignoreras" +msgstr "felformaterat â€#pragma options align={mac68k|power|reset}â€>, ignoreras" #: config/darwin-c.c:137 #, gcc-internal-format msgid "missing '(' after '#pragma unused', ignoring" -msgstr "\"(\" saknas efter \"#pragma unused\", ignoreras" +msgstr "â€(†saknas efter â€#pragma unusedâ€, ignoreras" #: config/darwin-c.c:158 #, gcc-internal-format msgid "missing ')' after '#pragma unused', ignoring" -msgstr "\")\" saknas efter \"#pragma unused\", ignoreras" +msgstr "â€)†saknas efter â€#pragma unusedâ€, ignoreras" #: config/darwin-c.c:161 #, gcc-internal-format msgid "junk at end of '#pragma unused'" -msgstr "skräp vid slutet av \"#pragma unused\"" +msgstr "skräp vid slutet av â€#pragma unusedâ€" #: config/darwin-c.c:172 #, gcc-internal-format msgid "malformed '#pragma ms_struct', ignoring" -msgstr "felformaterat \"#pragma ms_struct\", ignoreras" +msgstr "felformaterat â€#pragma ms_structâ€, ignoreras" #: config/darwin-c.c:180 #, gcc-internal-format msgid "malformed '#pragma ms_struct {on|off|reset}', ignoring" -msgstr "felformaterat \"#pragma ms_struct {on|off|reset}\", ignoreras" +msgstr "felformaterat â€#pragma ms_struct {on|off|reset}â€, ignoreras" #: config/darwin-c.c:183 #, gcc-internal-format msgid "junk at end of '#pragma ms_struct'" -msgstr "skräp vid slutet av \"#pragma ms_struct\"" +msgstr "skräp vid slutet av â€#pragma ms_structâ€" #: config/darwin-c.c:409 #, gcc-internal-format, gfc-internal-format msgid "subframework include %s conflicts with framework include" -msgstr "underramverks inkludering %s står i konflikt med ramverks inkludering" +msgstr "underramverks inkludering %s stÃ¥r i konflikt med ramverks inkludering" #: config/darwin-c.c:592 #, gcc-internal-format msgid "unknown value %qs of -mmacosx-version-min" -msgstr "okänt värde %qs till -mmacosx-version-min" +msgstr "okänt värde %qs till -mmacosx-version-min" #: config/darwin-driver.c:48 #, gcc-internal-format msgid "sysctl for kern.osversion failed: %m" -msgstr "sysctl för kern.osversion misslyckades: %m" +msgstr "sysctl för kern.osversion misslyckades: %m" #: config/darwin-driver.c:85 #, gcc-internal-format msgid "couldn%'t understand kern.osversion %q.*s" -msgstr "kunde inte förstå kern.osversion %q.*s" +msgstr "kunde inte förstÃ¥ kern.osversion %q.*s" #: config/darwin.c:1620 #, gcc-internal-format msgid "the use of _OBJC_-prefixed variable names to select meta-data sections is deprecated at 4.6 and will be removed in 4.7" -msgstr "användningen av variabelnamn med _OBJC_-prefix för att välja metadatasektioner bör undvikas i 4.6 och kommer tas bort i 4.7" +msgstr "användningen av variabelnamn med _OBJC_-prefix för att välja metadatasektioner bör undvikas i 4.6 och kommer tas bort i 4.7" #: config/darwin.c:1826 #, gcc-internal-format, gfc-internal-format msgid "failed to open temporary file %s for LTO output" -msgstr "det gick inte att öppna temporär fil %s för LTO-utdata" +msgstr "det gick inte att öppna temporär fil %s för LTO-utdata" #: config/darwin.c:1915 #, gcc-internal-format msgid "%qE 2.95 vtable-compatibility attribute applies only when compiling a kext" -msgstr "%qE 2.95-vtable-kompatibilitetsattribut är bara tillämpligt vid kompilering av en kext" +msgstr "%qE 2.95-vtable-kompatibilitetsattribut är bara tillämpligt vid kompilering av en kext" #: config/darwin.c:1922 #, gcc-internal-format msgid "%qE 2.95 vtable-compatibility attribute applies only to C++ classes" -msgstr "%qE 2.95-vtable-kompatibilitetsattribut är bara tillämpligt på C++-klasser" +msgstr "%qE 2.95-vtable-kompatibilitetsattribut är bara tillämpligt pÃ¥ C++-klasser" #: config/darwin.c:2634 #, gcc-internal-format msgid "internal and protected visibility attributes not supported in this configuration; ignored" -msgstr "synlighetsattributen internal och protected stöds inte för denna konfiguration, ignoreras" +msgstr "synlighetsattributen internal och protected stöds inte för denna konfiguration, ignoreras" #: config/darwin.c:2790 #, gcc-internal-format, gfc-internal-format msgid "failed to open temporary file %s with LTO output" -msgstr "det gick inte att öppna temporär fil %s med LTO-utdata" +msgstr "det gick inte att öppna temporär fil %s med LTO-utdata" #: config/darwin.c:2963 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<-fobjc-abi-version%> >= 2 must be used for %<-m64%> targets with %<-fnext-runtime%>" -msgstr "%<-fobjc-abi-version%> >= 2 stödjs endast för %<-m64%>-mål för %<-fnext-runtime%>" +msgstr "%<-fobjc-abi-version%> ≥ 2 mÃ¥ste användas för %<-m64%>-mÃ¥l med %<-fnext-runtime%>" #: config/darwin.c:2967 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<-fobjc-abi-version%> >= 2 is not supported on %<-m32%> targets with %<-fnext-runtime%>" -msgstr "%<-fobjc-abi-version%> >= 2 stödjs endast för %<-m64%>-mål för %<-fnext-runtime%>" +msgstr "%<-fobjc-abi-version%> ≥ 2 stödjs inte för %<-m32%>-mÃ¥l med %<-fnext-runtime%>" #: config/darwin.c:3038 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<-mdynamic-no-pic%> overrides %<-fpic%>, %<-fPIC%>, %<-fpie%> or %<-fPIE%>" -msgstr "-mdynamic-no-pic åsidosätter -fpic eller -fPIC" +msgstr "%<-mdynamic-no-pic%> Ã¥sidosätter %<-fpic%>, %<-fPIC%>, %<-fpie%> eller %<-fPIE%>" #: config/darwin.c:3223 #, gcc-internal-format msgid "built-in function %qD requires the %<-mconstant-cfstrings%> flag" -msgstr "inbyggd funktion %qD behöver flaggan %<-mconstant-cfstrings%>" +msgstr "inbyggd funktion %qD behöver flaggan %<-mconstant-cfstrings%>" #: config/darwin.c:3230 #, gcc-internal-format @@ -22502,7 +22502,7 @@ msgstr "CFString-literal saknas" #: config/darwin.c:3315 #, gcc-internal-format msgid "CFString literal expression is not a string constant" -msgstr "CFString-literaluttryck är inte en strängkonstant" +msgstr "CFString-literaluttryck är inte en strängkonstant" #: config/darwin.c:3338 #, gcc-internal-format, gfc-internal-format @@ -22522,12 +22522,12 @@ msgstr "felformaterat %<#pragma align%>, ignoreras" #: config/sol2-c.c:102 #, gcc-internal-format msgid "invalid alignment for %<#pragma align%>, ignoring" -msgstr "felaktig justering för %<#pragma align%>, ignoreras" +msgstr "felaktig justering för %<#pragma align%>, ignoreras" #: config/sol2-c.c:117 #, gcc-internal-format msgid "%<#pragma align%> must appear before the declaration of %D, ignoring" -msgstr "%<#pragma align%> måste förekomma före deklarationen av %D, ignorerar" +msgstr "%<#pragma align%> mÃ¥ste förekomma före deklarationen av %D, ignorerar" #: config/sol2-c.c:129 config/sol2-c.c:141 #, gcc-internal-format @@ -22537,7 +22537,7 @@ msgstr "felformaterat %<#pragma align%>" #: config/sol2-c.c:136 #, gcc-internal-format msgid "junk at end of %<#pragma align%>" -msgstr "skräp vid slutet av %<#pragma align%>" +msgstr "skräp vid slutet av %<#pragma align%>" #: config/sol2-c.c:157 config/sol2-c.c:164 #, gcc-internal-format @@ -22552,7 +22552,7 @@ msgstr "felformaterat %<#pragma init%>" #: config/sol2-c.c:195 #, gcc-internal-format msgid "junk at end of %<#pragma init%>" -msgstr "skräp vid slutet av %<#pragma init%>" +msgstr "skräp vid slutet av %<#pragma init%>" #: config/sol2-c.c:216 config/sol2-c.c:223 #, gcc-internal-format @@ -22567,17 +22567,17 @@ msgstr "felformaterat %<#pragma fini%>" #: config/sol2-c.c:254 #, gcc-internal-format msgid "junk at end of %<#pragma fini%>" -msgstr "skräp vid slutet av %<#pragma fini%>" +msgstr "skräp vid slutet av %<#pragma fini%>" #: config/sol2.c:56 #, gcc-internal-format msgid "ignoring %<#pragma align%> for explicitly aligned %q+D" -msgstr "ignorerar %<#pragma align%> för explicit justerad %q+D" +msgstr "ignorerar %<#pragma align%> för explicit justerad %q+D" #: config/vxworks.c:146 #, gcc-internal-format msgid "PIC is only supported for RTPs" -msgstr "PIC stöds endast för RTP:er" +msgstr "PIC stöds endast för RTP:er" #. Mach-O supports 'weak imports', and 'weak definitions' in coalesced #. sections. machopic_select_section ensures that weak variables go in @@ -22587,68 +22587,68 @@ msgstr "PIC stöds endast för RTP:er" #: config/darwin.h:439 #, gcc-internal-format msgid "alias definitions not supported in Mach-O; ignored" -msgstr "aliasdefinitioner stöds inte i Mach-O, ignoreras" +msgstr "aliasdefinitioner stöds inte i Mach-O, ignoreras" #. No profiling. #: config/vx-common.h:89 #, gcc-internal-format msgid "profiler support for VxWorks" -msgstr "profileringsstöd för VxWorks" +msgstr "profileringsstöd för VxWorks" #: config/alpha/alpha.c:277 #, gcc-internal-format msgid "bad value %qs for -mtrap-precision switch" -msgstr "felaktigt värde %qs till flaggan -mtrap-precision" +msgstr "felaktigt värde %qs till flaggan -mtrap-precision" #: config/alpha/alpha.c:291 #, gcc-internal-format msgid "bad value %qs for -mfp-rounding-mode switch" -msgstr "felaktigt värde %qs till flaggan -mfp-rounding-mode" +msgstr "felaktigt värde %qs till flaggan -mfp-rounding-mode" #: config/alpha/alpha.c:306 #, gcc-internal-format msgid "bad value %qs for -mfp-trap-mode switch" -msgstr "felaktigt värde %qs till flaggan -mfp-trap-mode" +msgstr "felaktigt värde %qs till flaggan -mfp-trap-mode" #: config/alpha/alpha.c:320 #, gcc-internal-format msgid "bad value %qs for -mcpu switch" -msgstr "felaktigt värde %qs till flaggan -mcpu" +msgstr "felaktigt värde %qs till flaggan -mcpu" #: config/alpha/alpha.c:332 #, gcc-internal-format msgid "bad value %qs for -mtune switch" -msgstr "felaktigt värde %qs till flaggan -mtune" +msgstr "felaktigt värde %qs till flaggan -mtune" #: config/alpha/alpha.c:340 #, gcc-internal-format msgid "fp software completion requires -mtrap-precision=i" -msgstr "fp-mjukvarukomplettering kräver -mtrap-precision=i" +msgstr "fp-mjukvarukomplettering kräver -mtrap-precision=i" #: config/alpha/alpha.c:356 #, gcc-internal-format msgid "rounding mode not supported for VAX floats" -msgstr "avrundningsläge stöds inte för VAX-flyttal" +msgstr "avrundningsläge stöds inte för VAX-flyttal" #: config/alpha/alpha.c:361 #, gcc-internal-format msgid "trap mode not supported for VAX floats" -msgstr "läge för fällor (trap mode) stöds inte för VAX-flyttal" +msgstr "läge för fällor (trap mode) stöds inte för VAX-flyttal" #: config/alpha/alpha.c:365 #, gcc-internal-format msgid "128-bit long double not supported for VAX floats" -msgstr "128-bitars long double stöds inte för VAX-flyttal" +msgstr "128-bitars long double stöds inte för VAX-flyttal" #: config/alpha/alpha.c:393 #, gcc-internal-format, gfc-internal-format msgid "L%d cache latency unknown for %s" -msgstr "L%d-cachelatens okänd för %s" +msgstr "L%d-cachelatens okänd för %s" #: config/alpha/alpha.c:408 #, gcc-internal-format msgid "bad value %qs for -mmemory-latency" -msgstr "felaktigt värde %qs till flaggan -memory-latency" +msgstr "felaktigt värde %qs till flaggan -memory-latency" #: config/alpha/alpha.c:6551 config/alpha/alpha.c:6554 config/s390/s390.c:9157 #: config/s390/s390.c:9160 @@ -22659,57 +22659,57 @@ msgstr "felaktig inbyggd fcode" #: config/arm/arm.c:1523 #, gcc-internal-format, gfc-internal-format msgid "switch -mcpu=%s conflicts with -march=%s switch" -msgstr "flaggan -mcpu=%s står i konflikt med flaggan -march=%s" +msgstr "flaggan -mcpu=%s stÃ¥r i konflikt med flaggan -march=%s" #: config/arm/arm.c:1640 #, gcc-internal-format msgid "target CPU does not support ARM mode" -msgstr "målprocessorn stödjer inte ARM-läge" +msgstr "mÃ¥lprocessorn stödjer inte ARM-läge" #: config/arm/arm.c:1646 #, gcc-internal-format msgid "target CPU does not support interworking" -msgstr "målprocessorn stödjer inte interworking" +msgstr "mÃ¥lprocessorn stödjer inte interworking" #: config/arm/arm.c:1652 #, gcc-internal-format msgid "target CPU does not support THUMB instructions" -msgstr "målprocessorn stödjer inte THUMB-instruktioner" +msgstr "mÃ¥lprocessorn stödjer inte THUMB-instruktioner" #: config/arm/arm.c:1670 #, gcc-internal-format msgid "enabling backtrace support is only meaningful when compiling for the Thumb" -msgstr "aktivering av stöd för bakåtspårning är endast meningsfullt vid kompilering för Thumb" +msgstr "aktivering av stöd för bakÃ¥tspÃ¥rning är endast meningsfullt vid kompilering för Thumb" #: config/arm/arm.c:1673 #, gcc-internal-format msgid "enabling callee interworking support is only meaningful when compiling for the Thumb" -msgstr "aktivering av stöd för anroparnätverkande är endast meningsfullt vid kompilering för Thumb" +msgstr "aktivering av stöd för anroparnätverkande är endast meningsfullt vid kompilering för Thumb" #: config/arm/arm.c:1677 #, gcc-internal-format msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" -msgstr "-mapcs-stack-check är inkompatibel med -mno-apcs-frame" +msgstr "-mapcs-stack-check är inkompatibel med -mno-apcs-frame" #: config/arm/arm.c:1685 #, gcc-internal-format msgid "-fpic and -mapcs-reent are incompatible" -msgstr "-fpic och -mapcs-reent är inkompatibla" +msgstr "-fpic och -mapcs-reent är inkompatibla" #: config/arm/arm.c:1688 #, gcc-internal-format msgid "APCS reentrant code not supported. Ignored" -msgstr "APCS-återanropsbar kod stöds inte. Ignoreras" +msgstr "APCS-Ã¥teranropsbar kod stöds inte. Ignoreras" #: config/arm/arm.c:1696 #, gcc-internal-format msgid "-g with -mno-apcs-frame may not give sensible debugging" -msgstr "-g med -mno-apcs-frame ger kanske inte vettig felsökning" +msgstr "-g med -mno-apcs-frame ger kanske inte vettig felsökning" #: config/arm/arm.c:1699 #, gcc-internal-format msgid "passing floating point arguments in fp regs not yet supported" -msgstr "att skicka flyttalsargument i fp-register stöds ännu inte" +msgstr "att skicka flyttalsargument i fp-register stöds ännu inte" #: config/arm/arm.c:1702 #, gcc-internal-format @@ -22719,32 +22719,32 @@ msgstr "" #: config/arm/arm.c:1764 #, gcc-internal-format msgid "iwmmxt requires an AAPCS compatible ABI for proper operation" -msgstr "iwmmxt kräver ett AAPCS-kompatibelt ABI för att fungera riktigt" +msgstr "iwmmxt kräver ett AAPCS-kompatibelt ABI för att fungera riktigt" #: config/arm/arm.c:1767 #, gcc-internal-format msgid "iwmmxt abi requires an iwmmxt capable cpu" -msgstr "iwmmxt-abi kräver en CPU som klarar iwmmxt" +msgstr "iwmmxt-abi kräver en CPU som klarar iwmmxt" #: config/arm/arm.c:1815 #, gcc-internal-format msgid "FPA is unsupported in the AAPCS" -msgstr "FPA stöds inte i AAPCS" +msgstr "FPA stöds inte i AAPCS" #: config/arm/arm.c:1820 #, gcc-internal-format msgid "AAPCS does not support -mcaller-super-interworking" -msgstr "AAPCS stödjer inte -mcaller-super-interworking" +msgstr "AAPCS stödjer inte -mcaller-super-interworking" #: config/arm/arm.c:1823 #, gcc-internal-format msgid "AAPCS does not support -mcallee-super-interworking" -msgstr "AAPCS stödjer inte -mcallee-super-interworking" +msgstr "AAPCS stödjer inte -mcallee-super-interworking" #: config/arm/arm.c:1830 #, gcc-internal-format msgid "iWMMXt and hardware floating point" -msgstr "iWMMXt och hårdvaruflyttal" +msgstr "iWMMXt och hÃ¥rdvaruflyttal" #: config/arm/arm.c:1834 #, gcc-internal-format @@ -22764,57 +22764,57 @@ msgstr "-mfloat-abi=hard och VFP" #: config/arm/arm.c:1883 #, gcc-internal-format msgid "can not use -mtp=cp15 with 16-bit Thumb" -msgstr "det går inte att använda -mtp=cp15 med 16-bitars Thumb" +msgstr "det gÃ¥r inte att använda -mtp=cp15 med 16-bitars Thumb" #: config/arm/arm.c:1899 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "structure size boundary can only be set to 8, 32 or 64" -msgstr "strukturstorleksgräns kan bara sättas till %s" +msgstr "storleksgräns för poster kan bara sättas till 8, 32 eller 64" #: config/arm/arm.c:1901 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "structure size boundary can only be set to 8 or 32" -msgstr "strukturstorleksgräns kan bara sättas till %s" +msgstr "storleksgräns för poster kan bara sättas till 8 eller 32" #: config/arm/arm.c:1909 #, gcc-internal-format msgid "RTP PIC is incompatible with Thumb" -msgstr "RTP PIC är inkompatibel med Thumb" +msgstr "RTP PIC är inkompatibel med Thumb" #: config/arm/arm.c:1918 #, gcc-internal-format msgid "RTP PIC is incompatible with -msingle-pic-base" -msgstr "RTP PIC är inkompatibelt med -msingle-pic-base" +msgstr "RTP PIC är inkompatibelt med -msingle-pic-base" #: config/arm/arm.c:1930 #, gcc-internal-format msgid "-mpic-register= is useless without -fpic" -msgstr "-mpic-register= är oanvändbar utan -fpic" +msgstr "-mpic-register= är oanvändbar utan -fpic" #: config/arm/arm.c:1939 #, gcc-internal-format, gfc-internal-format msgid "unable to use '%s' for PIC register" -msgstr "kan inte använda \"%s\" som PIC-register" +msgstr "kan inte använda â€%s†som PIC-register" #: config/arm/arm.c:1971 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "target CPU does not support unaligned accesses" -msgstr "målprocessorn stödjer inte ARM-läge" +msgstr "mÃ¥lprocessorn stödjer inte ojusterade Ã¥tkomster" #: config/arm/arm.c:1995 #, gcc-internal-format msgid "-freorder-blocks-and-partition not supported on this architecture" -msgstr "-freorder-blocks-and-partition stöds inte på denna arkitektur" +msgstr "-freorder-blocks-and-partition stöds inte pÃ¥ denna arkitektur" #: config/arm/arm.c:4043 #, gcc-internal-format msgid "non-AAPCS derived PCS variant" -msgstr "icke-AAPCS-härledd PCS-variant" +msgstr "icke-AAPCS-härledd PCS-variant" #: config/arm/arm.c:4045 #, gcc-internal-format msgid "variadic functions must use the base AAPCS variant" -msgstr "variadiska funktioner måsta använda bas-AAPCS-varianten" +msgstr "variadiska funktioner mÃ¥sta använda bas-AAPCS-varianten" #: config/arm/arm.c:4064 #, gcc-internal-format @@ -22824,7 +22824,7 @@ msgstr "PCS-variant" #: config/arm/arm.c:4259 #, gcc-internal-format msgid "Thumb-1 hard-float VFP ABI" -msgstr "Thumb-1 hårda flyttals VFP ABI" +msgstr "Thumb-1 hÃ¥rda flyttals VFP ABI" #: config/arm/arm.c:4975 config/arm/arm.c:4993 config/avr/avr.c:6748 #: config/avr/avr.c:6764 config/bfin/bfin.c:4636 config/bfin/bfin.c:4697 @@ -22838,84 +22838,84 @@ msgstr "Thumb-1 hårda flyttals VFP ABI" #: config/v850/v850.c:2057 #, gcc-internal-format msgid "%qE attribute only applies to functions" -msgstr "attributet %qE är bara tillämpligt på funktioner" +msgstr "attributet %qE är bara tillämpligt pÃ¥ funktioner" #: config/arm/arm.c:18922 #, gcc-internal-format msgid "unable to compute real location of stacked parameter" -msgstr "kan inte beräkna verklig plats för stackparameter" +msgstr "kan inte beräkna verklig plats för stackparameter" #: config/arm/arm.c:20660 #, gcc-internal-format msgid "argument must be a constant" -msgstr "argumentet måste vara en konstant" +msgstr "argumentet mÃ¥ste vara en konstant" #. @@@ better error message #: config/arm/arm.c:21029 config/arm/arm.c:21066 #, gcc-internal-format msgid "selector must be an immediate" -msgstr "väljare måste vara en omedelbar" +msgstr "väljare mÃ¥ste vara en omedelbar" #. @@@ better error message #: config/arm/arm.c:21109 #, gcc-internal-format msgid "mask must be an immediate" -msgstr "mask måste vara en omedelbar" +msgstr "mask mÃ¥ste vara en omedelbar" #: config/arm/arm.c:21893 #, gcc-internal-format msgid "no low registers available for popping high registers" -msgstr "inga låga register tillgängliga för att poppa höga register" +msgstr "inga lÃ¥ga register tillgängliga för att poppa höga register" #: config/arm/arm.c:22118 #, gcc-internal-format msgid "interrupt Service Routines cannot be coded in Thumb mode" -msgstr "avbrottsservicerutiner kan inte kodas i Thumb-läge" +msgstr "avbrottsservicerutiner kan inte kodas i Thumb-läge" #: config/arm/arm.c:24404 #, gcc-internal-format msgid "the mangling of %<va_list%> has changed in GCC 4.4" -msgstr "manglingen av %<va_list%> har ändrats i GCC 4.4" +msgstr "manglingen av %<va_list%> har ändrats i GCC 4.4" #: config/arm/pe.c:158 config/mcore/mcore.c:2951 #, gcc-internal-format msgid "initialized variable %q+D is marked dllimport" -msgstr "initierad variabel %q+D är markerad som dllimport" +msgstr "initierad variabel %q+D är markerad som dllimport" #: config/arm/pe.c:167 #, gcc-internal-format msgid "static variable %q+D is marked dllimport" -msgstr "statisk variabel %q+D är markerad som dllimport" +msgstr "statisk variabel %q+D är markerad som dllimport" #: config/avr/avr.c:742 #, gcc-internal-format msgid "'builtin_return_address' contains only 2 bytes of address" -msgstr "\"builtin_return_address\" innehåller bara 2 byte adress" +msgstr "â€builtin_return_address†innehÃ¥ller bara 2 byte adress" #: config/avr/avr.c:1778 #, gcc-internal-format msgid "pointer offset from symbol maybe incorrect" -msgstr "pekarförskjutning från symbol kan vara oriktig" +msgstr "pekarförskjutning frÃ¥n symbol kan vara oriktig" #: config/avr/avr.c:1895 #, gcc-internal-format msgid "accessing data memory with program memory address" -msgstr "åtkomst av dataminne med programminnesadress" +msgstr "Ã¥tkomst av dataminne med programminnesadress" #: config/avr/avr.c:1944 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "accessing program memory with data memory address" -msgstr "åtkomst av programminne med dataminnesadress" +msgstr "Ã¥tkomst av programminne med dataminnesadress" #: config/avr/avr.c:2350 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "fixed register %s used to pass parameter to function" -msgstr "Antal register för att skicka heltalsargument" +msgstr "fast register %s använt för att skicka en parameter till en funktion" #: config/avr/avr.c:2622 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "writing to address space %qs not supported" -msgstr "motstridande namngivna adressrymder (%s respektive %s)" +msgstr "skrivning till adressrymden %qs stödjs inte" #: config/avr/avr.c:6660 #, gcc-internal-format @@ -22928,19 +22928,19 @@ msgid "%qs appears to be a misspelled signal handler" msgstr "%qs verkar vara en felstavad signalhanterare" #: config/avr/avr.c:6932 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "pointer targeting address space %qs must be const in %qT" -msgstr "pekare till skilda adressrymder använda i villkorsuttryck" +msgstr "pekare med mÃ¥l i adressrymden %qs mÃ¥ste vara konstanta i %qT" #: config/avr/avr.c:6935 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "pointer targeting address space %qs must be const in %s %q+D" -msgstr "pekare till skilda adressrymder använda i villkorsuttryck" +msgstr "pekare med mÃ¥l i adressrymden %qs mÃ¥ste vara konstanta i %s %q+D" #: config/avr/avr.c:6978 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "variable %q+D must be const in order to be put into read-only section by means of %qs" -msgstr "variabeln %q+D måste vara const för att kunna läggas i en endast läsbar sektion med hjälp av %<__attribute__((progmem))%>" +msgstr "variabeln %q+D mÃ¥ste vara const för att kunna läggas i en endast läsbar sektion med hjälp av %qs" #: config/avr/avr.c:7188 #, gcc-internal-format @@ -22948,29 +22948,29 @@ msgid "only uninitialized variables can be placed in the .noinit section" msgstr "bara oinitierade variabler kan placeras i sektionen .noinit" #: config/avr/avr.c:7229 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "uninitialized variable %q+D put into program memory area" -msgstr "bara initierade variabler kan placeras i programminnesområdet" +msgstr "den oinitierade variabeln %q+D placerad i programminnesomrÃ¥det" #: config/avr/avr.c:7296 #, gcc-internal-format msgid "MCU %qs supported for assembler only" -msgstr "MCU %qs stöds endast i assembler" +msgstr "MCU %qs stöds endast i assembler" #: config/avr/avr.c:10519 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "%s expects a compile time integer constant" -msgstr "Oväntat slut på modul i strängkonstant" +msgstr "%s förväntar sig ett heltal konstant vid kompileringstillfället" #: config/avr/avr.c:10532 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "%s expects a compile time long integer constant as first argument" -msgstr "%qs förväntar sig ett konstant argument" +msgstr "%s förväntar sig ett lÃ¥ngt heltal konstant vid kompileringstillfället som första argument" #: config/avr/avr.c:10545 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "%s expects a compile time long long integer constant as first argument" -msgstr "attributet %qE tillåter endast en heltalskonstant som argument" +msgstr "%s förväntar sig ett lÃ¥ngt lÃ¥ngt heltal konstant vid kompileringstillfället som första argument" #: config/bfin/bfin.c:2348 #, gcc-internal-format @@ -22990,37 +22990,37 @@ msgstr "" #: config/bfin/bfin.c:2362 #, gcc-internal-format msgid "can%'t use multiple stack checking methods together" -msgstr "det går inte att använda flera stackkontrollmetoder tillsammans" +msgstr "det gÃ¥r inte att använda flera stackkontrollmetoder tillsammans" #: config/bfin/bfin.c:2365 #, gcc-internal-format msgid "ID shared libraries and FD-PIC mode can%'t be used together" -msgstr "ID-delade bibliotek och FD-PIC-läget inte användas tillsammans" +msgstr "ID-delade bibliotek och FD-PIC-läget inte användas tillsammans" #: config/bfin/bfin.c:2370 config/m68k/m68k.c:537 #, gcc-internal-format msgid "cannot specify both -msep-data and -mid-shared-library" -msgstr "det går inte att ange både -msep-data och -mid-shared-library" +msgstr "det gÃ¥r inte att ange bÃ¥de -msep-data och -mid-shared-library" #: config/bfin/bfin.c:2390 #, gcc-internal-format msgid "-mmulticore can only be used with BF561" -msgstr "-mmulticore kan endast användas med BF561" +msgstr "-mmulticore kan endast användas med BF561" #: config/bfin/bfin.c:2393 #, gcc-internal-format msgid "-mcorea should be used with -mmulticore" -msgstr "-fcorea måste användas tillsammans med -mmulticore" +msgstr "-fcorea mÃ¥ste användas tillsammans med -mmulticore" #: config/bfin/bfin.c:2396 #, gcc-internal-format msgid "-mcoreb should be used with -mmulticore" -msgstr "-fcoreb måste användas tillsammans med -mmulticore" +msgstr "-fcoreb mÃ¥ste användas tillsammans med -mmulticore" #: config/bfin/bfin.c:2399 #, gcc-internal-format msgid "-mcorea and -mcoreb can%'t be used together" -msgstr "-mcorea och -mcoreb kan inte användas tillsammans" +msgstr "-mcorea och -mcoreb kan inte användas tillsammans" #: config/bfin/bfin.c:4641 #, gcc-internal-format @@ -23030,23 +23030,23 @@ msgstr "flera funktionstypsattribut angivna" #: config/bfin/bfin.c:4708 #, gcc-internal-format msgid "can%'t apply both longcall and shortcall attributes to the same function" -msgstr "det går inte att tillämpa både attributet longcall och shortcall på samma funktion" +msgstr "det gÃ¥r inte att tillämpa bÃ¥de attributet longcall och shortcall pÃ¥ samma funktion" #: config/bfin/bfin.c:4758 config/i386/winnt.c:61 config/mep/mep.c:3915 #: config/mep/mep.c:4053 #, gcc-internal-format msgid "%qE attribute only applies to variables" -msgstr "attributet %qE är bara tillämpligt på variabler" +msgstr "attributet %qE är bara tillämpligt pÃ¥ variabler" #: config/bfin/bfin.c:4765 #, gcc-internal-format msgid "%qE attribute cannot be specified for local variables" -msgstr "attributet %qE kan inte anges för lokala variabler" +msgstr "attributet %qE kan inte anges för lokala variabler" #: config/c6x/c6x.c:235 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "-fpic and -fPIC not supported without -mdsbt on this target" -msgstr "-fPIC och -fpic stöds inte för detta mål" +msgstr "-fpic och -fPIC stödjs inte utan -mdsbt för detta mÃ¥l" #: config/c6x/c6x.h:362 #, gcc-internal-format @@ -23065,7 +23065,7 @@ msgstr "MULT-fall i cris_op_str" #: config/cris/cris.c:860 #, gcc-internal-format msgid "invalid use of ':' modifier" -msgstr "ogiltig användning av \":\"-modifierare" +msgstr "ogiltig användning av â€:â€-modifierare" #: config/cris/cris.c:1047 config/moxie/moxie.c:189 #, gcc-internal-format, gfc-internal-format @@ -23075,12 +23075,12 @@ msgstr "internt fel: felaktigt register: %d" #: config/cris/cris.c:1777 #, gcc-internal-format msgid "internal error: sideeffect-insn affecting main effect" -msgstr "internt fel: sidoeffektinstruktion påverkar huvudeffekten" +msgstr "internt fel: sidoeffektinstruktion pÃ¥verkar huvudeffekten" #: config/cris/cris.c:1874 #, gcc-internal-format msgid "unknown cc_attr value" -msgstr "okänt cc_attr-värde" +msgstr "okänt cc_attr-värde" #. If we get here, the caller got its initial tests wrong. #: config/cris/cris.c:2265 @@ -23091,42 +23091,42 @@ msgstr "internt fel: cris_side_effect_mode_ok med felaktiga operander" #: config/cris/cris.c:2505 #, gcc-internal-format, gfc-internal-format msgid "-max-stackframe=%d is not usable, not between 0 and %d" -msgstr "-max-stackframe=%d är inte användbar, inte mellan 0 och %d" +msgstr "-max-stackframe=%d är inte användbar, inte mellan 0 och %d" #: config/cris/cris.c:2533 #, gcc-internal-format, gfc-internal-format msgid "unknown CRIS version specification in -march= or -mcpu= : %s" -msgstr "okänd CRIS-version angiven i -march= eller -mcpu= : %s" +msgstr "okänd CRIS-version angiven i -march= eller -mcpu= : %s" #: config/cris/cris.c:2569 #, gcc-internal-format, gfc-internal-format msgid "unknown CRIS cpu version specification in -mtune= : %s" -msgstr "okänd CRIS-cpu-version angiven i -mtune= : %s" +msgstr "okänd CRIS-cpu-version angiven i -mtune= : %s" #: config/cris/cris.c:2590 #, gcc-internal-format msgid "-fPIC and -fpic are not supported in this configuration" -msgstr "-fPIC och -fpic stöds inte i denna konfiguration" +msgstr "-fPIC och -fpic stöds inte i denna konfiguration" #: config/cris/cris.c:2605 #, gcc-internal-format msgid "that particular -g option is invalid with -maout and -melinux" -msgstr "den speciella flaggan -g är ogiltig med -maout och -melinux" +msgstr "den speciella flaggan -g är ogiltig med -maout och -melinux" #: config/cris/cris.c:2831 #, gcc-internal-format msgid "unknown src" -msgstr "okänd källa" +msgstr "okänd källa" #: config/cris/cris.c:2892 #, gcc-internal-format msgid "unknown dest" -msgstr "okänd destination" +msgstr "okänd destination" #: config/cris/cris.c:3177 #, gcc-internal-format, gfc-internal-format msgid "stackframe too big: %d bytes" -msgstr "för stor stackram: %d byte" +msgstr "för stor stackram: %d byte" #: config/cris/cris.c:3669 config/cris/cris.c:3697 #, gcc-internal-format @@ -23136,7 +23136,7 @@ msgstr "expand_binop misslyckades i movsi got" #: config/cris/cris.c:3779 #, gcc-internal-format msgid "emitting PIC operand, but PIC register isn%'t set up" -msgstr "skickar ut PIC-operand, men PIC-registret är inte uppsatt" +msgstr "skickar ut PIC-operand, men PIC-registret är inte uppsatt" #. Definitions for GCC. Part of the machine description for CRIS. #. Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, @@ -23179,7 +23179,7 @@ msgstr "skickar ut PIC-operand, men PIC-registret är inte uppsatt" #: config/cris/cris.h:43 #, gcc-internal-format msgid "CRIS-port assertion failed: " -msgstr "CRIS-port-försäkran misslyckades: " +msgstr "CRIS-port-försäkran misslyckades: " #. Node: Caller Saves #. (no definitions) @@ -23190,12 +23190,12 @@ msgstr "CRIS-port-försäkran misslyckades: " #: config/cris/cris.h:731 #, gcc-internal-format msgid "no FUNCTION_PROFILER for CRIS" -msgstr "ingen FUNCTION_PROFILER för CRIS" +msgstr "ingen FUNCTION_PROFILER för CRIS" #: config/epiphany/epiphany.c:433 #, gcc-internal-format msgid "argument of %qE attribute is not a string constant" -msgstr "argumentet till attributet %qE är inte en strängkonstant" +msgstr "argumentet till attributet %qE är inte en strängkonstant" #: config/epiphany/epiphany.c:448 #, gcc-internal-format @@ -23203,29 +23203,29 @@ msgid "argument of %qE attribute is not \"reset\", \"software_exception\", \"pag msgstr "" #: config/epiphany/epiphany.c:1428 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "stack_offset must be at least 4" -msgstr "stackstorlek måste vara en exakt potens av 2" +msgstr "stack_offset mÃ¥ste vara minst 4" #: config/epiphany/epiphany.c:1430 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "stack_offset must be a multiple of 4" -msgstr "stackstorlek måste vara en exakt potens av 2" +msgstr "stack_offset mÃ¥ste vara en multipel av 4" #: config/frv/frv.c:8681 #, gcc-internal-format msgid "accumulator is not a constant integer" -msgstr "ackumulatorn är inte ett konstant heltal" +msgstr "ackumulatorn är inte ett konstant heltal" #: config/frv/frv.c:8686 #, gcc-internal-format msgid "accumulator number is out of bounds" -msgstr "ackumulatortalet är utanför gränsen" +msgstr "ackumulatortalet är utanför gränsen" #: config/frv/frv.c:8697 #, gcc-internal-format msgid "inappropriate accumulator for %qs" -msgstr "felaktig ackumulator för %qs" +msgstr "felaktig ackumulator för %qs" #: config/frv/frv.c:8773 #, gcc-internal-format @@ -23235,72 +23235,72 @@ msgstr "ogiltigt IACC-argument" #: config/frv/frv.c:8796 #, gcc-internal-format msgid "%qs expects a constant argument" -msgstr "%qs förväntar sig ett konstant argument" +msgstr "%qs förväntar sig ett konstant argument" #: config/frv/frv.c:8801 #, gcc-internal-format msgid "constant argument out of range for %qs" -msgstr "konstant argument utanför intervallet för %qs" +msgstr "konstant argument utanför intervallet för %qs" #: config/frv/frv.c:9282 #, gcc-internal-format msgid "media functions are not available unless -mmedia is used" -msgstr "mediafunktioner är inte tillgängliga om inte -mmedia används" +msgstr "mediafunktioner är inte tillgängliga om inte -mmedia används" #: config/frv/frv.c:9294 #, gcc-internal-format msgid "this media function is only available on the fr500" -msgstr "denna mediafunktion är endast tillgänglig i fr500" +msgstr "denna mediafunktion är endast tillgänglig i fr500" #: config/frv/frv.c:9322 #, gcc-internal-format msgid "this media function is only available on the fr400 and fr550" -msgstr "denna mediafunktion är endast tillgänglig i fr400 och fr500" +msgstr "denna mediafunktion är endast tillgänglig i fr400 och fr500" #: config/frv/frv.c:9341 #, gcc-internal-format msgid "this builtin function is only available on the fr405 and fr450" -msgstr "denna inbyggda funktion är endast tillgänglig i fr405 och fr450" +msgstr "denna inbyggda funktion är endast tillgänglig i fr405 och fr450" #: config/frv/frv.c:9350 #, gcc-internal-format msgid "this builtin function is only available on the fr500 and fr550" -msgstr "denna inbyggda funktion är endast tillgänglig i fr500 och fr550" +msgstr "denna inbyggda funktion är endast tillgänglig i fr500 och fr550" #: config/frv/frv.c:9362 #, gcc-internal-format msgid "this builtin function is only available on the fr450" -msgstr "denna inbyggda funktion är endast tillgänglig i fr450" +msgstr "denna inbyggda funktion är endast tillgänglig i fr450" #: config/h8300/h8300.c:336 #, gcc-internal-format msgid "-ms2600 is used without -ms" -msgstr "-ms2600 används utan -ms" +msgstr "-ms2600 används utan -ms" #: config/h8300/h8300.c:342 #, gcc-internal-format msgid "-mn is used without -mh or -ms" -msgstr "-mn används utan -mh eller -ms" +msgstr "-mn används utan -mh eller -ms" #: config/i386/host-cygwin.c:62 #, gcc-internal-format msgid "can%'t extend PCH file: %m" -msgstr "det går inte att utöka PCH-fil: %m" +msgstr "det gÃ¥r inte att utöka PCH-fil: %m" #: config/i386/host-cygwin.c:73 #, gcc-internal-format msgid "can%'t set position in PCH file: %m" -msgstr "det går inte att sätta position i PCH-fil: %m" +msgstr "det gÃ¥r inte att sätta position i PCH-fil: %m" #: config/i386/i386.c:3129 config/i386/i386.c:3433 #, gcc-internal-format, gfc-internal-format msgid "bad value (%s) for %stune=%s %s" -msgstr "felaktigt värde (%s) till %stune=%s %s" +msgstr "felaktigt värde (%s) till %stune=%s %s" #: config/i386/i386.c:3132 #, gcc-internal-format, gfc-internal-format msgid "%stune=x86-64%s is deprecated; use %stune=k8%s or %stune=generic%s instead as appropriate" -msgstr "%stune=x86-64%s bör undvikas. Använd istället det som passar av %stune=k8%s och %stune=generic%s" +msgstr "%stune=x86-64%s bör undvikas. Använd istället det som passar av %stune=k8%s och %stune=generic%s" #. rep; movq isn't available in 32-bit code. #: config/i386/i386.c:3162 @@ -23312,183 +23312,183 @@ msgstr "" #: config/i386/i386.c:3215 config/i386/i386.c:3226 #, gcc-internal-format msgid "code model %qs not supported in the %s bit mode" -msgstr "kodmodellen %qs stöds inte i %s-bitsläge" +msgstr "kodmodellen %qs stöds inte i %s-bitsläge" #: config/i386/i386.c:3195 config/i386/i386.c:3207 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "code model %qs not supported in x32 mode" -msgstr "kodmodellen %qs stöds inte i %s-bitsläge" +msgstr "kodmodellen %qs stöds inte i x32-läge" #: config/i386/i386.c:3213 config/i386/i386.c:3222 #, gcc-internal-format, gfc-internal-format msgid "code model %s does not support PIC mode" -msgstr "kodmodellen %s stödjer inte PIC-läge" +msgstr "kodmodellen %s stödjer inte PIC-läge" #: config/i386/i386.c:3249 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "-masm=intel not supported in this configuration" -msgstr "-m%s stöds inte i denna konfiguration" +msgstr "-masm=intel stödjs inte i denna konfiguration" #: config/i386/i386.c:3253 #, gcc-internal-format, gfc-internal-format msgid "%i-bit mode not compiled in" -msgstr "%i-bitsläge inte inkompilerat" +msgstr "%i-bitsläge inte inkompilerat" #: config/i386/i386.c:3265 config/i386/i386.c:3395 #, gcc-internal-format msgid "CPU you selected does not support x86-64 instruction set" -msgstr "CPU:n du valde stödjer inte instruktionsuppsättningen x86-64" +msgstr "CPU:n du valde stödjer inte instruktionsuppsättningen x86-64" -# "generic" är bokstavligt argument till flaggan +# "generic" är bokstavligt argument till flaggan #: config/i386/i386.c:3365 #, gcc-internal-format, gfc-internal-format msgid "generic CPU can be used only for %stune=%s %s" -msgstr "generic CPU kan användas endast till %stune=%s %s" +msgstr "generic CPU kan användas endast till %stune=%s %s" #: config/i386/i386.c:3368 #, gcc-internal-format, gfc-internal-format msgid "bad value (%s) for %sarch=%s %s" -msgstr "felaktigt värde (%s) till %sarch=%s %s" +msgstr "felaktigt värde (%s) till %sarch=%s %s" #: config/i386/i386.c:3481 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "-mregparm is ignored in 64-bit mode" -msgstr "%sregparm%s ignoreras i 64-bitsläge" +msgstr "-mregparm ignoreras i 64-bitsläge" #: config/i386/i386.c:3484 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "-mregparm=%d is not between 0 and %d" -msgstr "%sregparm=%d%s är inte mellan 0 och %d" +msgstr "-mregparm=%d är inte mellan 0 och %d" #: config/i386/i386.c:3525 #, gcc-internal-format, gfc-internal-format msgid "%srtd%s is ignored in 64bit mode" -msgstr "%srtd%s ignoreras i 64-bitsläge" +msgstr "%srtd%s ignoreras i 64-bitsläge" #: config/i386/i386.c:3589 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "-mpreferred-stack-boundary is not supported for this target" -msgstr "%sprefetch-stack-boundary%s stödjs inte för denna målarkitektur" +msgstr "-mprefetch-stack-boundary stödjs inte för denna mÃ¥larkitektur" #: config/i386/i386.c:3592 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "-mpreferred-stack-boundary=%d is not between %d and %d" -msgstr "%spreferred-stack-boundary=%d%s är inte mellan %d och %d" +msgstr "-mpreferred-stack-boundary=%d är inte mellan %d och %d" #: config/i386/i386.c:3613 #, gcc-internal-format, gfc-internal-format msgid "-mincoming-stack-boundary=%d is not between %d and 12" -msgstr "-mincoming-stack-boundary=%d är inte mellan %d och 12" +msgstr "-mincoming-stack-boundary=%d är inte mellan %d och 12" #: config/i386/i386.c:3627 #, gcc-internal-format, gfc-internal-format msgid "%ssseregparm%s used without SSE enabled" -msgstr "%ssseregparm%s använd utan SSE aktiverat" +msgstr "%ssseregparm%s använd utan SSE aktiverat" #: config/i386/i386.c:3635 #, gcc-internal-format msgid "SSE instruction set disabled, using 387 arithmetics" -msgstr "instruktionsuppsättningen SSE avaktiverad, använder 387-aritmetik" +msgstr "instruktionsuppsättningen SSE avaktiverad, använder 387-aritmetik" #: config/i386/i386.c:3640 #, gcc-internal-format msgid "387 instruction set disabled, using SSE arithmetics" -msgstr "instruktionsuppsättningen 387 avaktiverad, använder SSE-aritmetik" +msgstr "instruktionsuppsättningen 387 avaktiverad, använder SSE-aritmetik" #: config/i386/i386.c:3684 #, gcc-internal-format, gfc-internal-format msgid "unwind tables currently require either a frame pointer or %saccumulate-outgoing-args%s for correctness" -msgstr "utrullning av tabeller kräver antingen en rampekare eller %saccumulate-outgoing-args%s för att bli korrekt" +msgstr "utrullning av tabeller kräver antingen en rampekare eller %saccumulate-outgoing-args%s för att bli korrekt" #: config/i386/i386.c:3697 #, gcc-internal-format, gfc-internal-format msgid "stack probing requires %saccumulate-outgoing-args%s for correctness" -msgstr "utrullning av tabeller kräver antingen en rampekare eller %saccumulate-outgoing-args%s för att bli korrekt" +msgstr "utrullning av tabeller kräver antingen en rampekare eller %saccumulate-outgoing-args%s för att bli korrekt" #: config/i386/i386.c:3784 #, gcc-internal-format msgid "-mfentry isn%'t supported for 32-bit in combination with -fpic" -msgstr "-mfentry stödjs inte för 32 bitar i kombination med -fpic" +msgstr "-mfentry stödjs inte för 32 bitar i kombination med -fpic" #: config/i386/i386.c:3791 #, gcc-internal-format msgid "-mno-fentry isn%'t compatible with SEH" -msgstr "-mno-fentry är inte kompatibelt med SEH" +msgstr "-mno-fentry är inte kompatibelt med SEH" #: config/i386/i386.c:3861 config/rs6000/rs6000.c:3318 #, gcc-internal-format, gfc-internal-format msgid "unknown option for -mrecip=%s" -msgstr "okänt alternativ till -mrecip=%s" +msgstr "okänt alternativ till -mrecip=%s" #: config/i386/i386.c:4276 config/i386/i386.c:4323 #, gcc-internal-format, gfc-internal-format msgid "attribute(target(\"%s\")) is unknown" -msgstr "attribute(target(\"%s\")) är okänt" +msgstr "attribute(target(â€%sâ€)) är okänt" #: config/i386/i386.c:4304 #, gcc-internal-format, gfc-internal-format msgid "option(\"%s\") was already specified" -msgstr "option(\"%s\") var redan angivet" +msgstr "option(â€%sâ€) var redan angivet" #: config/i386/i386.c:4912 config/i386/i386.c:4963 #, gcc-internal-format msgid "fastcall and regparm attributes are not compatible" -msgstr "attributen fastcall och regparm är inte kompatibla" +msgstr "attributen fastcall och regparm är inte kompatibla" #: config/i386/i386.c:4917 #, gcc-internal-format msgid "regparam and thiscall attributes are not compatible" -msgstr "attributen regparam och thiscall är inte kompatibla" +msgstr "attributen regparam och thiscall är inte kompatibla" #: config/i386/i386.c:4924 config/i386/i386.c:31732 #, gcc-internal-format msgid "%qE attribute requires an integer constant argument" -msgstr "attributet %qE kräver en heltalskonstant som argument" +msgstr "attributet %qE kräver en heltalskonstant som argument" #: config/i386/i386.c:4930 #, gcc-internal-format msgid "argument to %qE attribute larger than %d" -msgstr "argument till attributet %qE är större än %d" +msgstr "argument till attributet %qE är större än %d" #: config/i386/i386.c:4955 config/i386/i386.c:4998 #, gcc-internal-format msgid "fastcall and cdecl attributes are not compatible" -msgstr "attributen fastcall och cdecl är inte kompatibla" +msgstr "attributen fastcall och cdecl är inte kompatibla" #: config/i386/i386.c:4959 #, gcc-internal-format msgid "fastcall and stdcall attributes are not compatible" -msgstr "attributen fastcall och stdcall är inte kompatibla" +msgstr "attributen fastcall och stdcall är inte kompatibla" #: config/i386/i386.c:4967 config/i386/i386.c:5016 #, gcc-internal-format msgid "fastcall and thiscall attributes are not compatible" -msgstr "attributen fastcall och thiscall är inte kompatibla" +msgstr "attributen fastcall och thiscall är inte kompatibla" #: config/i386/i386.c:4977 config/i386/i386.c:4994 #, gcc-internal-format msgid "stdcall and cdecl attributes are not compatible" -msgstr "attributen stdcall och cdecl är inte kompatibla" +msgstr "attributen stdcall och cdecl är inte kompatibla" #: config/i386/i386.c:4981 #, gcc-internal-format msgid "stdcall and fastcall attributes are not compatible" -msgstr "attributen stdcall och fastcall är inte kompatibla" +msgstr "attributen stdcall och fastcall är inte kompatibla" #: config/i386/i386.c:4985 config/i386/i386.c:5012 #, gcc-internal-format msgid "stdcall and thiscall attributes are not compatible" -msgstr "attributen stdcall och thiscall är inte kompatibla" +msgstr "attributen stdcall och thiscall är inte kompatibla" #: config/i386/i386.c:5002 config/i386/i386.c:5020 #, gcc-internal-format msgid "cdecl and thiscall attributes are not compatible" -msgstr "attributen cdecl och thiscall är inte kompatibla" +msgstr "attributen cdecl och thiscall är inte kompatibla" #: config/i386/i386.c:5008 #, gcc-internal-format msgid "%qE attribute is used for none class-method" -msgstr "attributet %qE används för annat än klassmetod" +msgstr "attributet %qE används för annat än klassmetod" #: config/i386/i386.c:5234 #, gcc-internal-format @@ -23503,32 +23503,32 @@ msgstr "anrop av %qT med attributet sseregparm utan SSE/SSE2 aktiverat" #: config/i386/i386.c:5452 #, gcc-internal-format msgid "ms_hook_prologue is not compatible with nested function" -msgstr "ms_hook_prologue är inte kompatibelt med nästade funktioner" +msgstr "ms_hook_prologue är inte kompatibelt med nästade funktioner" #: config/i386/i386.c:5604 #, gcc-internal-format msgid "ms_abi attribute requires -maccumulate-outgoing-args or subtarget optimization implying it" -msgstr "attributet ms_abi kräver -maccumulate-outgoing-args eller optimering av undermålarkitektur som implicerar det" +msgstr "attributet ms_abi kräver -maccumulate-outgoing-args eller optimering av undermÃ¥larkitektur som implicerar det" #: config/i386/i386.c:5728 #, gcc-internal-format msgid "AVX vector argument without AVX enabled changes the ABI" -msgstr "AVX-vektorargument utan AVX aktiverat ändrar ABI:et" +msgstr "AVX-vektorargument utan AVX aktiverat ändrar ABI:et" #: config/i386/i386.c:5910 #, gcc-internal-format msgid "the ABI of passing struct with a flexible array member has changed in GCC 4.4" -msgstr "ABI:et för att skicka en post med en flexibel vektormedlem har ändrats i GCC 4.4" +msgstr "ABI:et för att skicka en post med en flexibel vektormedlem har ändrats i GCC 4.4" #: config/i386/i386.c:6026 #, gcc-internal-format msgid "the ABI of passing union with long double has changed in GCC 4.4" -msgstr "ABI:et för att skicka unioner med long double har ändrats i GCC 4.4" +msgstr "ABI:et för att skicka unioner med long double har ändrats i GCC 4.4" #: config/i386/i386.c:6141 #, gcc-internal-format msgid "the ABI of passing structure with complex float member has changed in GCC 4.4" -msgstr "ABI:et för att skicka en post med complex float medlem har ändrats i GCC 4.4" +msgstr "ABI:et för att skicka en post med complex float medlem har ändrats i GCC 4.4" #: config/i386/i386.c:6287 #, gcc-internal-format @@ -23548,154 +23548,154 @@ msgstr "x87-registerretur med x87 avaktiverat" #: config/i386/i386.c:6688 #, gcc-internal-format msgid "SSE vector argument without SSE enabled changes the ABI" -msgstr "SSE-vektorargument utan SSE aktiverat ändrar ABI:et" +msgstr "SSE-vektorargument utan SSE aktiverat ändrar ABI:et" #: config/i386/i386.c:6726 #, gcc-internal-format msgid "MMX vector argument without MMX enabled changes the ABI" -msgstr "MMX-vektorargument utan MMX aktiverat ändrar ABI:et" +msgstr "MMX-vektorargument utan MMX aktiverat ändrar ABI:et" #: config/i386/i386.c:7101 #, gcc-internal-format, gfc-internal-format msgid "The ABI for passing parameters with %d-byte alignment has changed in GCC 4.6" -msgstr "ABI:et för att skicka parametrar med %d-bytejustering har ändrats i GCC 4.6" +msgstr "ABI:et för att skicka parametrar med %d-bytejustering har ändrats i GCC 4.6" #: config/i386/i386.c:7437 #, gcc-internal-format msgid "SSE vector return without SSE enabled changes the ABI" -msgstr "SSE-vektorretur utan SSE aktiverat ändrar ABI:et" +msgstr "SSE-vektorretur utan SSE aktiverat ändrar ABI:et" #: config/i386/i386.c:7447 #, gcc-internal-format msgid "MMX vector return without MMX enabled changes the ABI" -msgstr "MMX-vektorretur utan MMX aktiverat ändrar ABI:et" +msgstr "MMX-vektorretur utan MMX aktiverat ändrar ABI:et" #: config/i386/i386.c:10033 #, gcc-internal-format msgid "ms_hook_prologue attribute isn%'t compatible with -mfentry for 32-bit" -msgstr "attributet ms_hook_prologue är inte kompatibelt med -mfentry i 32-bitsläge" +msgstr "attributet ms_hook_prologue är inte kompatibelt med -mfentry i 32-bitsläge" #: config/i386/i386.c:11030 #, gcc-internal-format msgid "-fsplit-stack does not support fastcall with nested function" -msgstr "-fsplit-stack stödjer inte fastcall med nästade funktioner" +msgstr "-fsplit-stack stödjer inte fastcall med nästade funktioner" #: config/i386/i386.c:11044 #, gcc-internal-format msgid "-fsplit-stack does not support 2 register parameters for a nested function" -msgstr "-fsplit-stack stödjer inte 2 registerparametrar för en nästad funktion" +msgstr "-fsplit-stack stödjer inte 2 registerparametrar för en nästad funktion" #. FIXME: We could make this work by pushing a register #. around the addition and comparison. #: config/i386/i386.c:11055 #, gcc-internal-format msgid "-fsplit-stack does not support 3 register parameters" -msgstr "-fsplit-stack stödjer inte 3 registerparametrar" +msgstr "-fsplit-stack stödjer inte 3 registerparametrar" #: config/i386/i386.c:13557 #, gcc-internal-format msgid "extended registers have no high halves" -msgstr "utökade register har inga höga halvor" +msgstr "utökade register har inga höga halvor" #: config/i386/i386.c:13572 #, gcc-internal-format msgid "unsupported operand size for extended register" -msgstr "ej stödd operandstorlek för utökat register" +msgstr "ej stödd operandstorlek för utökat register" #: config/i386/i386.c:13819 #, gcc-internal-format, gfc-internal-format msgid "non-integer operand used with operand code '%c'" -msgstr "operand som inte är heltal använt med operandkod \"%c\"" +msgstr "operand som inte är heltal använt med operandkod â€%câ€" #: config/i386/i386.c:27703 config/i386/i386.c:28640 #, gcc-internal-format msgid "the last argument must be a 2-bit immediate" -msgstr "det sista argumentet måste vara en 2-bitars omedelbar" +msgstr "det sista argumentet mÃ¥ste vara en 2-bitars omedelbar" #: config/i386/i386.c:28109 #, gcc-internal-format msgid "the fifth argument must be an 8-bit immediate" -msgstr "det femte argumentet måste vara en 8-bitars omedelbar" +msgstr "det femte argumentet mÃ¥ste vara en 8-bitars omedelbar" #: config/i386/i386.c:28204 #, gcc-internal-format msgid "the third argument must be an 8-bit immediate" -msgstr "det tredje argumentet måste vara en 8-bitars omedelbar" +msgstr "det tredje argumentet mÃ¥ste vara en 8-bitars omedelbar" #: config/i386/i386.c:28612 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "the last argument must be an 1-bit immediate" -msgstr "det sista argumentet måste vara en 1-bits omedelbar" +msgstr "det sista argumentet mÃ¥ste vara en 1-bits omedelbar" #: config/i386/i386.c:28631 #, gcc-internal-format msgid "the last argument must be a 4-bit immediate" -msgstr "det sista argumentet måste vara en 4-bitars omedelbar" +msgstr "det sista argumentet mÃ¥ste vara en 4-bitars omedelbar" #: config/i386/i386.c:28649 #, gcc-internal-format msgid "the last argument must be a 1-bit immediate" -msgstr "det sista argumentet måste vara en 1-bits omedelbar" +msgstr "det sista argumentet mÃ¥ste vara en 1-bits omedelbar" #: config/i386/i386.c:28658 #, gcc-internal-format msgid "the last argument must be a 5-bit immediate" -msgstr "det sista argumentet måste vara en 5-bitars omedelbar" +msgstr "det sista argumentet mÃ¥ste vara en 5-bitars omedelbar" #: config/i386/i386.c:28667 #, gcc-internal-format msgid "the next to last argument must be an 8-bit immediate" -msgstr "det näst sista argumentet måste vara en 8-bitars omedelbar" +msgstr "det näst sista argumentet mÃ¥ste vara en 8-bitars omedelbar" #: config/i386/i386.c:28671 config/i386/i386.c:28895 #, gcc-internal-format msgid "the last argument must be an 8-bit immediate" -msgstr "det sista argumentet måste vara en 8-bitars omedelbar" +msgstr "det sista argumentet mÃ¥ste vara en 8-bitars omedelbar" #: config/i386/i386.c:28893 #, gcc-internal-format msgid "the last argument must be a 32-bit immediate" -msgstr "det sista argumentet måste vara en 32-bitars omedelbar" +msgstr "det sista argumentet mÃ¥ste vara en 32-bitars omedelbar" #: config/i386/i386.c:28961 config/rs6000/rs6000.c:10535 #, gcc-internal-format msgid "selector must be an integer constant in the range 0..%wi" -msgstr "selektor måste vara en heltalskonstant i intervallet 0..%wi" +msgstr "selektor mÃ¥ste vara en heltalskonstant i intervallet 0..%wi" #: config/i386/i386.c:29104 #, gcc-internal-format msgid "%qE needs unknown isa option" -msgstr "%qE behöver en okänd isa-flagga" +msgstr "%qE behöver en okänd isa-flagga" #: config/i386/i386.c:29108 #, gcc-internal-format msgid "%qE needs isa option %s" -msgstr "%qE behöver isa-flaggan %s" +msgstr "%qE behöver isa-flaggan %s" #: config/i386/i386.c:29279 #, gcc-internal-format msgid "last argument must be an immediate" -msgstr "sista argumentet måste vara en omedelbar" +msgstr "sista argumentet mÃ¥ste vara en omedelbar" #: config/i386/i386.c:29473 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "last argument must be scale 1, 2, 4, 8" -msgstr "vänstra argumentet måste vara en skiva" +msgstr "sista argumentet ha skala 1, 2, 4, 8" #: config/i386/i386.c:31719 #, gcc-internal-format msgid "%qE attribute only available for 32-bit" -msgstr "attributet %qE är bara tillgängligt för 32 bitar" +msgstr "attributet %qE är bara tillgängligt för 32 bitar" #: config/i386/i386.c:31740 #, gcc-internal-format msgid "argument to %qE attribute is neither zero, nor one" -msgstr "argumentet till attributet %qE är varken noll eller ett" +msgstr "argumentet till attributet %qE är varken noll eller ett" #: config/i386/i386.c:31774 config/i386/i386.c:31783 #, gcc-internal-format msgid "ms_abi and sysv_abi attributes are not compatible" -msgstr "attributen ms_abi och sysv_abi är inte kompatibla" +msgstr "attributen ms_abi och sysv_abi är inte kompatibla" #: config/i386/i386.c:31821 config/rs6000/rs6000.c:24327 #, gcc-internal-format @@ -23705,7 +23705,7 @@ msgstr "%qE-inkompatibelt attribut ignorerat" #: config/i386/winnt.c:83 #, gcc-internal-format msgid "%qE attribute applies only to initialized variables with external linkage" -msgstr "attributet %qE är bara tillämpligt på initierade variabler med extern länkning" +msgstr "attributet %qE är bara tillämpligt pÃ¥ initierade variabler med extern länkning" #: config/i386/winnt.c:145 #, gcc-internal-format @@ -23715,7 +23715,7 @@ msgstr "definition av statisk datamedlem %q+D i dllimport:erad klass" #: config/i386/winnt.c:331 #, gcc-internal-format msgid "%q+D:'selectany' attribute applies only to initialized objects" -msgstr "%q+D: attributet \"selectany\" tillämpas endast på initierade objekt" +msgstr "%q+D: attributet â€selectany†tillämpas endast pÃ¥ initierade objekt" #: config/i386/winnt.c:476 #, gcc-internal-format @@ -23725,17 +23725,17 @@ msgstr "%q+D orsakar en sektionstypkonflikt" #: config/i386/cygming.h:197 #, gcc-internal-format msgid "-fPIC ignored for target (all code is position independent)" -msgstr "-fPIC ignoreras för målet (all kod är positionsoberoende)" +msgstr "-fPIC ignoreras för mÃ¥let (all kod är positionsoberoende)" #: config/i386/cygming.h:203 #, gcc-internal-format, gfc-internal-format msgid "-f%s ignored for target (all code is position independent)" -msgstr "-f%s ignoreras för målet (all kod är positionsoberoende)" +msgstr "-f%s ignoreras för mÃ¥let (all kod är positionsoberoende)" #: config/i386/djgpp.h:162 #, gcc-internal-format msgid "-mbnu210 is ignored (option is obsolete)" -msgstr "-mbnu210 ignoreras (flaggan är föråldrad)" +msgstr "-mbnu210 ignoreras (flaggan är förÃ¥ldrad)" #: config/ia64/ia64-c.c:52 #, gcc-internal-format @@ -23750,49 +23750,49 @@ msgstr "ogiltigt argument till attributet %qE" #: config/ia64/ia64.c:713 #, gcc-internal-format msgid "an address area attribute cannot be specified for local variables" -msgstr "ett adressområdesattribut kan inte anges för lokala variabler" +msgstr "ett adressomrÃ¥desattribut kan inte anges för lokala variabler" #: config/ia64/ia64.c:720 #, gcc-internal-format msgid "address area of %q+D conflicts with previous declaration" -msgstr "adressområdet för %q+D står i konflikt med tidigare deklaration" +msgstr "adressomrÃ¥det för %q+D stÃ¥r i konflikt med tidigare deklaration" #: config/ia64/ia64.c:728 #, gcc-internal-format msgid "address area attribute cannot be specified for functions" -msgstr "adressområdesattribut kan inte anges för funktioner" +msgstr "adressomrÃ¥desattribut kan inte anges för funktioner" #: config/ia64/ia64.c:769 #, gcc-internal-format msgid "%qE attribute requires a string constant argument" -msgstr "attributet %qE kräver en strängkonstant som argument" +msgstr "attributet %qE kräver en strängkonstant som argument" #: config/ia64/ia64.c:5737 config/pa/pa.c:412 config/sh/sh.c:8733 #: config/spu/spu.c:5187 #, gcc-internal-format msgid "value of -mfixed-range must have form REG1-REG2" -msgstr "värdet av -mfixed-range måste ha formen REG1-REG2" +msgstr "värdet av -mfixed-range mÃ¥ste ha formen REG1-REG2" #: config/ia64/ia64.c:5764 config/pa/pa.c:439 config/sh/sh.c:8759 #: config/spu/spu.c:5213 #, gcc-internal-format, gfc-internal-format msgid "%s-%s is an empty range" -msgstr "%s-%s är ett tomt intervall" +msgstr "%s-%s är ett tomt intervall" #: config/ia64/ia64.c:10959 #, gcc-internal-format msgid "version attribute is not a string" -msgstr "versionsattributet är inte en sträng" +msgstr "versionsattributet är inte en sträng" #: config/iq2000/iq2000.c:1833 #, gcc-internal-format, gfc-internal-format msgid "gp_offset (%ld) or end_offset (%ld) is less than zero" -msgstr "gp_offset (%ld) eller end_offset (%ld) är mindre än noll" +msgstr "gp_offset (%ld) eller end_offset (%ld) är mindre än noll" #: config/iq2000/iq2000.c:2594 #, gcc-internal-format msgid "argument %qd is not a constant" -msgstr "argumentet %qd är inte en konstant" +msgstr "argumentet %qd är inte en konstant" #: config/iq2000/iq2000.c:2897 config/xtensa/xtensa.c:2432 #, gcc-internal-format @@ -23802,7 +23802,7 @@ msgstr "PRINT_OPERAND_ADDRESS, null-pekare" #: config/iq2000/iq2000.c:3052 #, gcc-internal-format, gfc-internal-format msgid "PRINT_OPERAND: Unknown punctuation '%c'" -msgstr "PRINT_OPERAND: Okänd interpunktion '%c'" +msgstr "PRINT_OPERAND: Okänd interpunktion '%c'" #: config/iq2000/iq2000.c:3061 config/xtensa/xtensa.c:2286 #, gcc-internal-format @@ -23812,12 +23812,12 @@ msgstr "PRINT_OPERAND null-pekare" #: config/m32c/m32c-pragma.c:61 #, gcc-internal-format msgid "junk at end of #pragma GCC memregs [0..16]" -msgstr "skräp vid slutet av #pragma GCC memregs [0..16]" +msgstr "skräp vid slutet av #pragma GCC memregs [0..16]" #: config/m32c/m32c-pragma.c:68 #, gcc-internal-format msgid "#pragma GCC memregs must precede any function decls" -msgstr "#pragma GCC memregs måste komma före funktionsdeklarationer" +msgstr "#pragma GCC memregs mÃ¥ste komma före funktionsdeklarationer" #: config/m32c/m32c-pragma.c:76 config/m32c/m32c-pragma.c:83 #, gcc-internal-format @@ -23827,7 +23827,7 @@ msgstr "#pragma GCC memregs tar ett tal [0..16]" #: config/m32c/m32c-pragma.c:111 #, gcc-internal-format msgid "junk at end of #pragma ADDRESS" -msgstr "skräp vid slutet av #pragma ADDRESS" +msgstr "skräp vid slutet av #pragma ADDRESS" #: config/m32c/m32c-pragma.c:116 #, gcc-internal-format @@ -23837,18 +23837,18 @@ msgstr "felformaterat #pragma ADDRESS variabel adress" #: config/m32c/m32c.c:411 #, gcc-internal-format, gfc-internal-format msgid "invalid target memregs value '%d'" -msgstr "ogiltigt målvärde för memregs \"%d\"" +msgstr "ogiltigt mÃ¥lvärde för memregs â€%dâ€" #: config/m32c/m32c.c:3153 #, gcc-internal-format msgid "%qE attribute is not supported for R8C target" -msgstr "attributet %qE stöds inte för denna målarkitekturen R8C" +msgstr "attributet %qE stöds inte för denna mÃ¥larkitekturen R8C" #. The argument must be a constant integer. #: config/m32c/m32c.c:3169 config/sh/sh.c:8940 config/sh/sh.c:9046 #, gcc-internal-format msgid "%qE attribute argument not an integer constant" -msgstr "argumentet till attribut %qE är inte en heltalskonstant" +msgstr "argumentet till attribut %qE är inte en heltalskonstant" #: config/m32c/m32c.c:3178 #, gcc-internal-format @@ -23858,7 +23858,7 @@ msgstr "argumentet till attribut %qE skall vara mellan 18 och 255" #: config/m32c/m32c.c:4353 #, gcc-internal-format msgid "%<bank_switch%> has no effect on non-interrupt functions" -msgstr "%<bank_switch%> har ingen effekt på icke-avbrotts-funktioner" +msgstr "%<bank_switch%> har ingen effekt pÃ¥ icke-avbrotts-funktioner" #: config/m32c/m32c.c:4457 #, gcc-internal-format @@ -23873,42 +23873,42 @@ msgstr "ogiltigt argument till attributet %qs" #: config/m68k/m68k.c:478 #, gcc-internal-format, gfc-internal-format msgid "-mcpu=%s conflicts with -march=%s" -msgstr "-mcpu=%s står i konflikt med -march=%s" +msgstr "-mcpu=%s stÃ¥r i konflikt med -march=%s" #: config/m68k/m68k.c:549 #, gcc-internal-format msgid "-mpcrel -fPIC is not currently supported on selected cpu" -msgstr "-mpcrel -fPIC stöds för närvarande inte på den valda cpu:n" +msgstr "-mpcrel -fPIC stöds för närvarande inte pÃ¥ den valda cpu:n" #: config/m68k/m68k.c:611 #, gcc-internal-format, gfc-internal-format msgid "-falign-labels=%d is not supported" -msgstr "-falign-labels=%d stöds ej" +msgstr "-falign-labels=%d stöds ej" #: config/m68k/m68k.c:616 #, gcc-internal-format, gfc-internal-format msgid "-falign-loops=%d is not supported" -msgstr "-falign-loops=%d stöds ej" +msgstr "-falign-loops=%d stöds ej" #: config/m68k/m68k.c:732 #, gcc-internal-format msgid "multiple interrupt attributes not allowed" -msgstr "flera avbrottsattribut är inte tillåtet" +msgstr "flera avbrottsattribut är inte tillÃ¥tet" #: config/m68k/m68k.c:739 #, gcc-internal-format msgid "interrupt_thread is available only on fido" -msgstr "interrupt_thread är tillgängligt endast för fido" +msgstr "interrupt_thread är tillgängligt endast för fido" #: config/m68k/m68k.c:1072 config/rs6000/rs6000.c:18605 #, gcc-internal-format msgid "stack limit expression is not supported" -msgstr "stackgränsuttryck stöds inte" +msgstr "stackgränsuttryck stöds inte" #: config/mep/mep-pragma.c:71 #, gcc-internal-format msgid "junk at end of #pragma io_volatile" -msgstr "skräp vid slutet av #pragma io_volatile" +msgstr "skräp vid slutet av #pragma io_volatile" #: config/mep/mep-pragma.c:85 #, gcc-internal-format @@ -23918,7 +23918,7 @@ msgstr "#pragma io_volatile tar bara on eller off" #: config/mep/mep-pragma.c:124 #, gcc-internal-format msgid "invalid coprocessor register range" -msgstr "ogiltigt intervall för ko-processorregister" +msgstr "ogiltigt intervall för ko-processorregister" #: config/mep/mep-pragma.c:144 #, gcc-internal-format @@ -23933,7 +23933,7 @@ msgstr "felformaterat ko-processorregister" #: config/mep/mep-pragma.c:254 #, gcc-internal-format msgid "junk at end of #pragma GCC coprocessor width" -msgstr "skräp vid slutet av #pragma GCC coprocessor width" +msgstr "skräp vid slutet av #pragma GCC coprocessor width" #: config/mep/mep-pragma.c:261 #, gcc-internal-format @@ -23943,7 +23943,7 @@ msgstr "#pragma GCC coprocessor width tar bara 32 eller 64" #: config/mep/mep-pragma.c:295 #, gcc-internal-format msgid "#pragma GCC coprocessor subclass letter must be in [ABCD]" -msgstr "#pragma GCC coprocessor subclass bokstav måsta vara bland [ABCD]" +msgstr "#pragma GCC coprocessor subclass bokstav mÃ¥sta vara bland [ABCD]" #: config/mep/mep-pragma.c:300 #, gcc-internal-format, gfc-internal-format @@ -23973,7 +23973,7 @@ msgstr "ko-processor inte aktiverade" #: config/mep/mep-pragma.c:370 #, gcc-internal-format msgid "unknown #pragma GCC coprocessor %E" -msgstr "okänd #pragma GCC coprocessor %E" +msgstr "okänd #pragma GCC coprocessor %E" #: config/mep/mep-pragma.c:392 #, gcc-internal-format @@ -23983,12 +23983,12 @@ msgstr "felformaterat #pragma call" #: config/mep/mep.c:353 #, gcc-internal-format msgid "-fpic is not supported" -msgstr "-fpic stöds inte" +msgstr "-fpic stöds inte" #: config/mep/mep.c:355 #, gcc-internal-format msgid "-fPIC is not supported" -msgstr "-fPIC stöds inte" +msgstr "-fPIC stöds inte" #: config/mep/mep.c:357 #, gcc-internal-format @@ -24018,12 +24018,12 @@ msgstr "endast en av -mm och -mtiny= kan ges" #: config/mep/mep.c:367 #, gcc-internal-format msgid "-mclip currently has no effect without -mminmax" -msgstr "-mclip har för närvarande ingen effekt utan -mminmax" +msgstr "-mclip har för närvarande ingen effekt utan -mminmax" #: config/mep/mep.c:374 #, gcc-internal-format msgid "-mc= must be -mc=tiny, -mc=near, or -mc=far" -msgstr "-mc= måste vara -mc=tiny, -mc=near eller -mc=far" +msgstr "-mc= mÃ¥ste vara -mc=tiny, -mc=near eller -mc=far" #: config/mep/mep.c:1502 #, gcc-internal-format @@ -24038,166 +24038,170 @@ msgstr "okonverterbar operand %c %qs" #: config/mep/mep.c:3922 config/mep/mep.c:3985 #, gcc-internal-format msgid "address region attributes not allowed with auto storage class" -msgstr "adressregionattribut är inte tillåtna med lagringsklassen auto" +msgstr "adressregionattribut är inte tillÃ¥tna med lagringsklassen auto" #: config/mep/mep.c:3928 config/mep/mep.c:3991 #, gcc-internal-format msgid "address region attributes on pointed-to types ignored" -msgstr "adressregionattribut på pekade på typer ignoreras" +msgstr "adressregionattribut pÃ¥ pekade pÃ¥ typer ignoreras" #: config/mep/mep.c:3977 #, gcc-internal-format msgid "%qE attribute only applies to variables and functions" -msgstr "attributet %qE är bara tillämpligt på variabler och funktioner" +msgstr "attributet %qE är bara tillämpligt pÃ¥ variabler och funktioner" #: config/mep/mep.c:3997 config/mep/mep.c:4313 #, gcc-internal-format msgid "duplicate address region attribute %qE in declaration of %qE on line %d" -msgstr "dubblerat adressregionattribut %qE i deklarationen av %qE på rad %d" +msgstr "dubblerat adressregionattribut %qE i deklarationen av %qE pÃ¥ rad %d" #: config/mep/mep.c:4031 #, gcc-internal-format msgid "cannot inline interrupt function %qE" -msgstr "det går inte att inline:a avbrottsfunktion %qE" +msgstr "det gÃ¥r inte att inline:a avbrottsfunktion %qE" #: config/mep/mep.c:4037 #, gcc-internal-format msgid "interrupt function must have return type of void" -msgstr "avbrottsfunktioner måsta ha returtypen void" +msgstr "avbrottsfunktioner mÃ¥sta ha returtypen void" #: config/mep/mep.c:4042 #, gcc-internal-format msgid "interrupt function must have no arguments" -msgstr "avbrottsfunktioner får inte ha några argument" +msgstr "avbrottsfunktioner fÃ¥r inte ha nÃ¥gra argument" #: config/mep/mep.c:4063 #, gcc-internal-format msgid "%qE attribute allows only an integer constant argument" -msgstr "attributet %qE tillåter endast en heltalskonstant som argument" +msgstr "attributet %qE tillÃ¥ter endast en heltalskonstant som argument" #: config/mep/mep.c:4096 #, gcc-internal-format msgid "%qE attribute only applies to functions, not %s" -msgstr "attributet %qE är bara tillämpligt på funktioner, inte %s" +msgstr "attributet %qE är bara tillämpligt pÃ¥ funktioner, inte %s" #: config/mep/mep.c:4107 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "" "to describe a pointer to a VLIW function, use syntax like this:\n" "%s" -msgstr "för att beskriva en pekare till en VLIW-funktion, använd sådan här syntax:" +msgstr "" +"för att beskriva en pekare till en VLIW-funktion, använd sÃ¥dan här syntax:\n" +"%s" #: config/mep/mep.c:4116 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "" "to describe an array of VLIW function pointers, use syntax like this:\n" "%s" -msgstr "för att beskriva en vektor av VLIW-funktionspekare, använd syntax som denna:" +msgstr "" +"för att beskriva en vektor av VLIW-funktionspekare, använd syntax som denna:\n" +"%s" #: config/mep/mep.c:4122 #, gcc-internal-format msgid "VLIW functions are not allowed without a VLIW configuration" -msgstr "VLIW-funktioner är inte tillåtan utan en VLIW-konfiguration" +msgstr "VLIW-funktioner är inte tillÃ¥tan utan en VLIW-konfiguration" #: config/mep/mep.c:4272 #, gcc-internal-format, gfc-internal-format msgid "\"#pragma disinterrupt %s\" not used" -msgstr "\"#pragma disinterrupt %s\" används inte" +msgstr "â€#pragma disinterrupt %s†används inte" #: config/mep/mep.c:4438 #, gcc-internal-format msgid "__io address 0x%x is the same for %qE and %qE" -msgstr "__io adress 0x%x är samma för %qE och %qE" +msgstr "__io adress 0x%x är samma för %qE och %qE" #: config/mep/mep.c:4586 #, gcc-internal-format, gfc-internal-format msgid "variable %s (%ld bytes) is too large for the %s section (%d bytes)" -msgstr "variabeln %s (%ld byte) är för stor för sektionen %s (%d byte)" +msgstr "variabeln %s (%ld byte) är för stor för sektionen %s (%d byte)" #: config/mep/mep.c:4684 #, gcc-internal-format msgid "variable %D of type %<io%> must be uninitialized" -msgstr "variabeln %D av typen %<io%> måste vara oinitierad" +msgstr "variabeln %D av typen %<io%> mÃ¥ste vara oinitierad" #: config/mep/mep.c:4689 #, gcc-internal-format msgid "variable %D of type %<cb%> must be uninitialized" -msgstr "variabeln %D av typen %<cb%> måste vara oinitierad" +msgstr "variabeln %D av typen %<cb%> mÃ¥ste vara oinitierad" #: config/mep/mep.c:6139 #, gcc-internal-format msgid "coprocessor intrinsic %qs is not available in this configuration" -msgstr "ko-processorns inbyggda %qs är inte tillgänglig i denna konfiguration" +msgstr "ko-processorns inbyggda %qs är inte tillgänglig i denna konfiguration" #: config/mep/mep.c:6142 #, gcc-internal-format msgid "%qs is not available in VLIW functions" -msgstr "%qs är inte tillgänglig i VLIW-funktioner" +msgstr "%qs är inte tillgänglig i VLIW-funktioner" #: config/mep/mep.c:6145 #, gcc-internal-format msgid "%qs is not available in non-VLIW functions" -msgstr "%qs är är inte tillgänglig i en icke-VLIW-funktion" +msgstr "%qs är är inte tillgänglig i en icke-VLIW-funktion" #: config/mep/mep.c:6307 config/mep/mep.c:6424 #, gcc-internal-format msgid "argument %d of %qE must be in the range %d...%d" -msgstr "argument %d till %qE måste vara i intervallet %d...%d" +msgstr "argument %d till %qE mÃ¥ste vara i intervallet %d...%d" #: config/mep/mep.c:6310 #, gcc-internal-format msgid "argument %d of %qE must be a multiple of %d" -msgstr "argument %d till %qE måste vara en multipel av %d" +msgstr "argument %d till %qE mÃ¥ste vara en multipel av %d" #: config/mep/mep.c:6363 #, gcc-internal-format msgid "too few arguments to %qE" -msgstr "för få argument till %qE" +msgstr "för fÃ¥ argument till %qE" #: config/mep/mep.c:6368 #, gcc-internal-format msgid "too many arguments to %qE" -msgstr "för många argument till %qE" +msgstr "för mÃ¥nga argument till %qE" #: config/mep/mep.c:6386 #, gcc-internal-format msgid "argument %d of %qE must be an address" -msgstr "argument %d till %qE måste vara en adress" +msgstr "argument %d till %qE mÃ¥ste vara en adress" #: config/mep/mep.c:7182 #, gcc-internal-format msgid "2 byte cop instructions are not allowed in 64-bit VLIW mode" -msgstr "2-bytes cop-instruktioner är inte tillåtna i 64-bitars VLIW-läge" +msgstr "2-bytes cop-instruktioner är inte tillÃ¥tna i 64-bitars VLIW-läge" #: config/mep/mep.c:7188 #, gcc-internal-format, gfc-internal-format msgid "unexpected %d byte cop instruction" -msgstr "oväntad %d-byte cop-instruktion" +msgstr "oväntad %d-byte cop-instruktion" #: config/microblaze/microblaze.c:1305 #, gcc-internal-format msgid "%qs is an invalid argument to -mcpu=" -msgstr "%qs är ett ogiltigt argument till -mcpu=" +msgstr "%qs är ett ogiltigt argument till -mcpu=" #: config/microblaze/microblaze.c:1354 #, gcc-internal-format msgid "-mxl-multiply-high can be used only with -mcpu=v6.00.a or greater" -msgstr "-mxl-multiply-high kan bara användas med -mcpu=v6.00.a eller större" +msgstr "-mxl-multiply-high kan bara användas med -mcpu=v6.00.a eller större" #: config/microblaze/microblaze.c:1358 #, gcc-internal-format msgid "-mxl-multiply-high requires -mno-xl-soft-mul" -msgstr "-mxl-multiply-high kräver -mno-xl-soft-mul" +msgstr "-mxl-multiply-high kräver -mno-xl-soft-mul" #: config/mips/mips.c:1273 config/mips/mips.c:1275 #, gcc-internal-format msgid "%qs attribute only applies to functions" -msgstr "attributet %qs fungerar bara på funktioner" +msgstr "attributet %qs fungerar bara pÃ¥ funktioner" #: config/mips/mips.c:1285 #, gcc-internal-format msgid "%qE cannot have both %<mips16%> and %<nomips16%> attributes" -msgstr "%qE får inte ha båda attributen %<mips16%> och %<nomips16%>" +msgstr "%qE fÃ¥r inte ha bÃ¥da attributen %<mips16%> och %<nomips16%>" #: config/mips/mips.c:1307 config/mips/mips.c:1310 #, gcc-internal-format @@ -24212,12 +24216,12 @@ msgstr "kan inte hantera inkonsistenta anrop av %qs" #: config/mips/mips.c:9352 #, gcc-internal-format msgid "the %<interrupt%> attribute requires a MIPS32r2 processor" -msgstr "attributet %<interrupt%> kräver en MIPS32r2-processor" +msgstr "attributet %<interrupt%> kräver en MIPS32r2-processor" #: config/mips/mips.c:9354 #, gcc-internal-format msgid "the %<interrupt%> attribute requires %<-msoft-float%>" -msgstr "attributet %<interrupt%> kräver %<-msoft-float%>" +msgstr "attributet %<interrupt%> kräver %<-msoft-float%>" #: config/mips/mips.c:9356 #, gcc-internal-format @@ -24232,17 +24236,17 @@ msgstr "ogiltigt argument inbyggd funktion" #: config/mips/mips.c:13618 #, gcc-internal-format msgid "built-in function %qE not supported for MIPS16" -msgstr "inbyggd funktion %qE stöds inte för MIPS16" +msgstr "inbyggd funktion %qE stöds inte för MIPS16" #: config/mips/mips.c:14210 #, gcc-internal-format msgid "%qs does not support MIPS16 code" -msgstr "%qs stödjer inte MIPS16-kod" +msgstr "%qs stödjer inte MIPS16-kod" #: config/mips/mips.c:15452 #, gcc-internal-format msgid "MIPS16 PIC for ABIs other than o32 and o64" -msgstr "MIPS16 PIC för andra ABI:er än o32 och o64" +msgstr "MIPS16 PIC för andra ABI:er än o32 och o64" #: config/mips/mips.c:15455 #, gcc-internal-format @@ -24252,52 +24256,52 @@ msgstr "MIPS16 -mxgot-kod" #: config/mips/mips.c:15458 #, gcc-internal-format msgid "hard-float MIPS16 code for ABIs other than o32 and o64" -msgstr "MIPS16-kod med hårdvaruflyttal för andra ABI:er än o32 och o64" +msgstr "MIPS16-kod med hÃ¥rdvaruflyttal för andra ABI:er än o32 och o64" #: config/mips/mips.c:15647 #, gcc-internal-format msgid "%<-%s%> conflicts with the other architecture options, which specify a %s processor" -msgstr "%<-%s%> står i konflikt med andra arkitekturflaggor, som anger en %s-processor" +msgstr "%<-%s%> stÃ¥r i konflikt med andra arkitekturflaggor, som anger en %s-processor" #: config/mips/mips.c:15657 #, gcc-internal-format msgid "%<-march=%s%> is not compatible with the selected ABI" -msgstr "%<-march=%s%> är inte kompatibelt med det valda ABI:et" +msgstr "%<-march=%s%> är inte kompatibelt med det valda ABI:et" #: config/mips/mips.c:15672 #, gcc-internal-format msgid "%<-mgp64%> used with a 32-bit processor" -msgstr "%<-mgp64%> använt med en 32-bitarsprocessor" +msgstr "%<-mgp64%> använt med en 32-bitarsprocessor" #: config/mips/mips.c:15674 #, gcc-internal-format msgid "%<-mgp32%> used with a 64-bit ABI" -msgstr "%<-mgp32%> använt med ett 64-bitars ABI" +msgstr "%<-mgp32%> använt med ett 64-bitars ABI" #: config/mips/mips.c:15676 #, gcc-internal-format msgid "%<-mgp64%> used with a 32-bit ABI" -msgstr "%<-mgp64%> använt med ett 32-bitars ABI" +msgstr "%<-mgp64%> använt med ett 32-bitars ABI" #: config/mips/mips.c:15692 config/mips/mips.c:15694 config/mips/mips.c:15785 #, gcc-internal-format, gfc-internal-format msgid "unsupported combination: %s" -msgstr "ej stödd kombination: %s" +msgstr "ej stödd kombination: %s" #: config/mips/mips.c:15698 #, gcc-internal-format msgid "%<-mgp32%> and %<-mfp64%> can only be combined if the target supports the mfhc1 and mthc1 instructions" -msgstr "%<-mgp32%> och %<-mfp64%> kan bara kombineras om målet stödjer instruktionerna mfhc1 och mthc1" +msgstr "%<-mgp32%> och %<-mfp64%> kan bara kombineras om mÃ¥let stödjer instruktionerna mfhc1 och mthc1" #: config/mips/mips.c:15701 #, gcc-internal-format msgid "%<-mgp32%> and %<-mfp64%> can only be combined when using the o32 ABI" -msgstr "%<-mgp32%> och %<-mfp64%> kan endast kombineras när ABI:et o32 används" +msgstr "%<-mgp32%> och %<-mfp64%> kan endast kombineras när ABI:et o32 används" #: config/mips/mips.c:15724 config/mips/mips.c:15726 config/mips/mips.c:15739 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs is incompatible with %qs" -msgstr "försäkran: %s är tilldelningskompatibel med %s" +msgstr "%qs är inkompatibel med %qs" #. We have traditionally allowed non-abicalls code to use #. an LP64 form of o64. However, it would take a bit more @@ -24305,84 +24309,84 @@ msgstr "försäkran: %s är tilldelningskompatibel med %s" #. and 64-bit pointers, so we treat the abicalls case as #. an error. #: config/mips/mips.c:15733 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "the combination of %qs and %qs is incompatible with %qs" -msgstr "försäkran: %s är tilldelningskompatibel med %s" +msgstr "kombinationen av %qs och %qs är inkompatibel med %qs" #: config/mips/mips.c:15779 #, gcc-internal-format msgid "the %qs architecture does not support branch-likely instructions" -msgstr "arkitekturen %qs stödjer inte trolig gren-instruktioner" +msgstr "arkitekturen %qs stödjer inte trolig gren-instruktioner" #: config/mips/mips.c:15819 #, gcc-internal-format msgid "%<-mno-gpopt%> needs %<-mexplicit-relocs%>" -msgstr "%<-mno-gpopt%> behöver %<-mexplicit-relocs%>" +msgstr "%<-mno-gpopt%> behöver %<-mexplicit-relocs%>" #: config/mips/mips.c:15827 config/mips/mips.c:15830 #, gcc-internal-format msgid "cannot use small-data accesses for %qs" -msgstr "det går inte att använda smådataåtkomster för %qs" +msgstr "det gÃ¥r inte att använda smÃ¥dataÃ¥tkomster för %qs" #: config/mips/mips.c:15844 #, gcc-internal-format msgid "%<-mips3d%> requires %<-mpaired-single%>" -msgstr "%<-mips3d%> kräver %<-mpaired-single%>" +msgstr "%<-mips3d%> kräver %<-mpaired-single%>" #: config/mips/mips.c:15853 #, gcc-internal-format msgid "%qs must be used with %qs" -msgstr "%qs måste användas tillsammans med %qs" +msgstr "%qs mÃ¥ste användas tillsammans med %qs" #: config/mips/mips.c:15860 #, gcc-internal-format msgid "the %qs architecture does not support paired-single instructions" -msgstr "arkitekturen %qs stödjer inte par-enkel-instruktioner" +msgstr "arkitekturen %qs stödjer inte par-enkel-instruktioner" #: config/mips/mips.c:15866 #, gcc-internal-format msgid "%qs requires a target that provides the %qs instruction" -msgstr "%qs kräver ett mål som klarar instruktionen %qs" +msgstr "%qs kräver ett mÃ¥l som klarar instruktionen %qs" #: config/mips/mips.c:15971 #, gcc-internal-format msgid "%qs requires branch-likely instructions" -msgstr "%qs kräver trolig gren-instruktioner" +msgstr "%qs kräver trolig gren-instruktioner" #: config/mips/mips.c:15975 #, gcc-internal-format msgid "the %qs architecture does not support the synci instruction" -msgstr "arkitekturen %qs stödjer inte instruktionen synci" +msgstr "arkitekturen %qs stödjer inte instruktionen synci" #: config/mips/mips.c:16425 #, gcc-internal-format msgid "mips16 function profiling" -msgstr "funktionsprofilering för mips16" +msgstr "funktionsprofilering för mips16" #: config/mmix/mmix.c:298 #, gcc-internal-format, gfc-internal-format msgid "-f%s not supported: ignored" -msgstr "-f%s stöds inte: ignoreras" +msgstr "-f%s stöds inte: ignoreras" #: config/mmix/mmix.c:789 #, gcc-internal-format msgid "support for mode %qs" -msgstr "stöd för läge %qs" +msgstr "stöd för läge %qs" #: config/mmix/mmix.c:803 #, gcc-internal-format, gfc-internal-format msgid "too large function value type, needs %d registers, have only %d registers for this" -msgstr "för stor funktionsvärdestyp, behöver %d register, har bara %d register till detta" +msgstr "för stor funktionsvärdestyp, behöver %d register, har bara %d register till detta" #: config/mmix/mmix.c:982 #, gcc-internal-format msgid "function_profiler support for MMIX" -msgstr "funktionsprofileringsstöd för MMIX" +msgstr "funktionsprofileringsstöd för MMIX" #: config/mmix/mmix.c:1006 #, gcc-internal-format msgid "MMIX Internal: Last named vararg would not fit in a register" -msgstr "MMIX-internt: Sista namngivna vararg skulle inte få plats i ett register" +msgstr "MMIX-internt: Sista namngivna vararg skulle inte fÃ¥ plats i ett register" #: config/mmix/mmix.c:1619 config/mmix/mmix.c:1643 config/mmix/mmix.c:1759 #, gcc-internal-format, gfc-internal-format @@ -24408,42 +24412,42 @@ msgstr "stackram inte en multipel av oktabyte: %wd" #: config/mmix/mmix.c:2555 config/mmix/mmix.c:2619 #, gcc-internal-format, gfc-internal-format msgid "MMIX Internal: %s is not a shiftable int" -msgstr "MMIX internt: %s är inte ett heltal som kan skiftas" +msgstr "MMIX internt: %s är inte ett heltal som kan skiftas" #: config/mn10300/mn10300.c:111 #, gcc-internal-format msgid "-mtune= expects mn10300, am33, am33-2, or am34" -msgstr "-mtune= förväntar sig mn10300, am33, am33-2 eller am34" +msgstr "-mtune= förväntar sig mn10300, am33, am33-2 eller am34" #: config/pa/pa.c:496 #, gcc-internal-format msgid "PIC code generation is not supported in the portable runtime model" -msgstr "PIC-kodgenerering stöds inte i den portabla körtidsmodellen" +msgstr "PIC-kodgenerering stöds inte i den portabla körtidsmodellen" #: config/pa/pa.c:501 #, gcc-internal-format msgid "PIC code generation is not compatible with fast indirect calls" -msgstr "PIC-kodsgenerering är inte inte kompatibelt med snabba indirekta anrop" +msgstr "PIC-kodsgenerering är inte inte kompatibelt med snabba indirekta anrop" #: config/pa/pa.c:506 #, gcc-internal-format msgid "-g is only supported when using GAS on this processor," -msgstr "-g stöds bara när man använder GAS på denna processor," +msgstr "-g stöds bara när man använder GAS pÃ¥ denna processor," #: config/pa/pa.c:507 #, gcc-internal-format msgid "-g option disabled" -msgstr "flaggan -g är avslagen" +msgstr "flaggan -g är avslagen" #: config/pa/pa.c:8598 #, gcc-internal-format, gfc-internal-format msgid "alignment (%u) for %s exceeds maximum alignment for global common data. Using %u" -msgstr "justering (%u) för %s överskrider maximal justering för globala common-data. Använder %u" +msgstr "justering (%u) för %s överskrider maximal justering för globala common-data. Använder %u" #: config/pa/pa-hpux11.h:82 #, gcc-internal-format msgid "-munix=98 option required for C89 Amendment 1 features.\n" -msgstr "flaggan -munix=98 krävs för funktioner från C89 tillägg 1.\n" +msgstr "flaggan -munix=98 krävs för funktioner frÃ¥n C89 tillägg 1.\n" #: config/picochip/picochip.c:422 #, gcc-internal-format, gfc-internal-format @@ -24453,32 +24457,32 @@ msgstr "ogiltig AE-typ angiven (%s)" #: config/picochip/picochip.c:445 #, gcc-internal-format, gfc-internal-format msgid "invalid mul type specified (%s) - expected mac, mul or none" -msgstr "ogiltig mul-typ angiven (%s) - mac, mul eller none förväntades" +msgstr "ogiltig mul-typ angiven (%s) - mac, mul eller none förväntades" #: config/picochip/picochip.c:739 #, gcc-internal-format, gfc-internal-format msgid "unexpected mode %s encountered in picochip_emit_save_register" -msgstr "oväntat läge %s dök upp i picochip_emit_save_register" +msgstr "oväntat läge %s dök upp i picochip_emit_save_register" #: config/picochip/picochip.c:907 #, gcc-internal-format, gfc-internal-format msgid "defaulting to stack for %s register creation" -msgstr "väljer standardläget stack när %s-register skapas" +msgstr "väljer standardläget stack när %s-register skapas" #: config/picochip/picochip.c:1592 #, gcc-internal-format msgid "LCFI labels have already been deferred" -msgstr "LCFI-etiketter har redan fördröjts" +msgstr "LCFI-etiketter har redan fördröjts" #: config/picochip/picochip.c:1655 #, gcc-internal-format msgid "LM label has already been deferred" -msgstr "LM-etikett har redan fördröjts" +msgstr "LM-etikett har redan fördröjts" #: config/picochip/picochip.c:1665 #, gcc-internal-format msgid "LCFI labels have already been deferred." -msgstr "LCFI-etiketter har redan fördröjts." +msgstr "LCFI-etiketter har redan fördröjts." #: config/picochip/picochip.c:1940 #, gcc-internal-format, gfc-internal-format @@ -24488,53 +24492,53 @@ msgstr "picochip_asm_output_opcode - Hittade multipla rader i VLIW-paket %s" #: config/picochip/picochip.c:2043 #, gcc-internal-format msgid "picochip_asm_output_opcode - can%'t output unknown operator %c" -msgstr "picochip_asm_output_opcode - det går inte att mata ut okänd operator %c" +msgstr "picochip_asm_output_opcode - det gÃ¥r inte att mata ut okänd operator %c" #: config/picochip/picochip.c:2294 config/picochip/picochip.c:2354 #, gcc-internal-format msgid "%s: at least one operand can%'t be handled" -msgstr "%s: åtminstone en operand kan inte hanteras" +msgstr "%s: Ã¥tminstone en operand kan inte hanteras" #: config/picochip/picochip.c:2435 #, gcc-internal-format, gfc-internal-format msgid "unknown short branch in %s (type %d)" -msgstr "okänd kort gren i %s (typ %d)" +msgstr "okänd kort gren i %s (typ %d)" #: config/picochip/picochip.c:2472 #, gcc-internal-format, gfc-internal-format msgid "unknown long branch in %s (type %d)" -msgstr "okänd lång gren i %s (typ %d)" +msgstr "okänd lÃ¥ng gren i %s (typ %d)" #: config/picochip/picochip.c:2512 config/picochip/picochip.c:2580 #, gcc-internal-format, gfc-internal-format msgid "PUT uses port array index %d, which is out of range [%d..%d)" -msgstr "PUT använder portvektorindex %d, som är utanför intervallet [%d..%d)" +msgstr "PUT använder portvektorindex %d, som är utanför intervallet [%d..%d)" #: config/picochip/picochip.c:2546 #, gcc-internal-format, gfc-internal-format msgid "GET uses port array index %d, which is out of range [%d..%d)" -msgstr "GET använder portvektorindex %d, som är utanför intervallet [%d..%d)" +msgstr "GET använder portvektorindex %d, som är utanför intervallet [%d..%d)" #: config/picochip/picochip.c:3425 #, gcc-internal-format, gfc-internal-format msgid "too many ALU instructions emitted (%d)" -msgstr "för många ALU-instruktioner utmatade (%d)" +msgstr "för mÃ¥nga ALU-instruktioner utmatade (%d)" #: config/picochip/picochip.c:4058 config/picochip/picochip.c:4151 #, gcc-internal-format, gfc-internal-format msgid "%s: Second source operand is not a constant" -msgstr "%s: Andra källoperanden är inte en konstant" +msgstr "%s: Andra källoperanden är inte en konstant" #: config/picochip/picochip.c:4061 config/picochip/picochip.c:4112 #: config/picochip/picochip.c:4154 #, gcc-internal-format, gfc-internal-format msgid "%s: Third source operand is not a constant" -msgstr "%s: Tredje källoperanden är inte en konstant" +msgstr "%s: Tredje källoperanden är inte en konstant" #: config/picochip/picochip.c:4115 #, gcc-internal-format, gfc-internal-format msgid "%s: Fourth source operand is not a constant" -msgstr "%s: Fjärde källoperanden är inte en konstant" +msgstr "%s: Fjärde källoperanden är inte en konstant" #: config/picochip/picochip.c:4413 #, gcc-internal-format, gfc-internal-format @@ -24554,12 +24558,12 @@ msgstr "Segmenteringsfel" #: config/rs6000/host-darwin.c:144 #, gcc-internal-format msgid "While setting up signal stack: %m" -msgstr "När signalstacken sattes upp: %m" +msgstr "När signalstacken sattes upp: %m" #: config/rs6000/host-darwin.c:150 #, gcc-internal-format msgid "While setting up signal handler: %m" -msgstr "När signalhanterare sattes upp: %m" +msgstr "När signalhanterare sattes upp: %m" #. Handle the machine specific pragma longcall. Its syntax is #. @@ -24593,12 +24597,12 @@ msgstr "slutparentes saknas" #: config/rs6000/rs6000-c.c:71 #, gcc-internal-format msgid "number must be 0 or 1" -msgstr "tal måste vara 0 eller 1" +msgstr "tal mÃ¥ste vara 0 eller 1" #: config/rs6000/rs6000-c.c:74 #, gcc-internal-format msgid "junk at end of #pragma longcall" -msgstr "skräp vid slutet av #pragma longcall" +msgstr "skräp vid slutet av #pragma longcall" #: config/rs6000/rs6000-c.c:3528 #, gcc-internal-format, gfc-internal-format @@ -24628,222 +24632,222 @@ msgstr "vec_insert tar endast 3 argument" #: config/rs6000/rs6000-c.c:3782 #, gcc-internal-format msgid "passing arg %d of %qE discards qualifiers frompointer target type" -msgstr "att skicka argument %d till %qE kastar kvalificerare från pekarmåltyp" +msgstr "att skicka argument %d till %qE kastar kvalificerare frÃ¥n pekarmÃ¥ltyp" #: config/rs6000/rs6000-c.c:3825 #, gcc-internal-format msgid "invalid parameter combination for AltiVec intrinsic" -msgstr "ogiltigt parameterkombination för inbyggd AltiVec" +msgstr "ogiltigt parameterkombination för inbyggd AltiVec" #: config/rs6000/rs6000.c:2436 #, gcc-internal-format msgid "-mrecip requires -ffinite-math or -ffast-math" -msgstr "-mrecip kräver -ffinite-math eller -ffast-math" +msgstr "-mrecip kräver -ffinite-math eller -ffast-math" #: config/rs6000/rs6000.c:2438 #, gcc-internal-format msgid "-mrecip requires -fno-trapping-math or -ffast-math" -msgstr "-mrecip kräver -fno-trapping-math eller -ffast-math" +msgstr "-mrecip kräver -fno-trapping-math eller -ffast-math" #: config/rs6000/rs6000.c:2440 #, gcc-internal-format msgid "-mrecip requires -freciprocal-math or -ffast-math" -msgstr "-mrecip kräver -freciprocal-math eller -ffast-math" +msgstr "-mrecip kräver -freciprocal-math eller -ffast-math" #: config/rs6000/rs6000.c:2535 #, gcc-internal-format msgid "-m64 requires PowerPC64 architecture, enabling" -msgstr "-m64 kräver PowerPC64-arkitektur, aktiverar" +msgstr "-m64 kräver PowerPC64-arkitektur, aktiverar" #: config/rs6000/rs6000.c:2615 #, gcc-internal-format msgid "-malign-power is not supported for 64-bit Darwin; it is incompatible with the installed C and C++ libraries" -msgstr "-malign-power stöds inte för 64-bitars Darwin, det är inkompatibelt med de installerade C- och C++-biblioteken" +msgstr "-malign-power stöds inte för 64-bitars Darwin, det är inkompatibelt med de installerade C- och C++-biblioteken" #: config/rs6000/rs6000.c:2621 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "not configured for SPE ABI" -msgstr "inte konfigurerad för ABI: \"%s\"" +msgstr "inte konfigurerad för SPE-ABI:" #: config/rs6000/rs6000.c:2697 #, gcc-internal-format msgid "AltiVec not supported in this target" -msgstr "AltiVec stödjs inte på denna målarkitektur" +msgstr "AltiVec stödjs inte pÃ¥ denna mÃ¥larkitektur" #: config/rs6000/rs6000.c:2699 #, gcc-internal-format msgid "SPE not supported in this target" -msgstr "SPE stödjs inte på denna målarkitektur" +msgstr "SPE stödjs inte pÃ¥ denna mÃ¥larkitektur" #: config/rs6000/rs6000.c:2726 #, gcc-internal-format msgid "-mmultiple is not supported on little endian systems" -msgstr "-mmultiple stöds inte på system med omvänd byteordning" +msgstr "-mmultiple stöds inte pÃ¥ system med omvänd byteordning" #: config/rs6000/rs6000.c:2733 #, gcc-internal-format msgid "-mstring is not supported on little endian systems" -msgstr "-mstring stöds inte på system med omvänd byteordning" +msgstr "-mstring stöds inte pÃ¥ system med omvänd byteordning" #: config/rs6000/rs6000.c:2839 #, gcc-internal-format, gfc-internal-format msgid "unknown vectorization library ABI type (%s) for -mveclibabi= switch" -msgstr "okänd ABI-typ (%s) till vektoriseringsbibliotek för flaggan -mveclibabi=" +msgstr "okänd ABI-typ (%s) till vektoriseringsbibliotek för flaggan -mveclibabi=" #: config/rs6000/rs6000.c:2851 #, gcc-internal-format msgid "target attribute or pragma changes long double size" -msgstr "målattribut eller pragma ändrar storlek på long double" +msgstr "mÃ¥lattribut eller pragma ändrar storlek pÃ¥ long double" #: config/rs6000/rs6000.c:2872 config/rs6000/rs6000.c:2887 #, gcc-internal-format msgid "target attribute or pragma changes AltiVec ABI" -msgstr "målattribut eller pragma ändrar AltiVec ABI" +msgstr "mÃ¥lattribut eller pragma ändrar AltiVec ABI" #: config/rs6000/rs6000.c:2904 #, gcc-internal-format msgid "target attribute or pragma changes darwin64 ABI" -msgstr "målattribut eller pragma ändrar darwin64 ABI" +msgstr "mÃ¥lattribut eller pragma ändrar darwin64 ABI" #: config/rs6000/rs6000.c:2945 #, gcc-internal-format msgid "target attribute or pragma changes SPE ABI" -msgstr "målattribut eller pragma ändrar SPE ABI" +msgstr "mÃ¥lattribut eller pragma ändrar SPE ABI" #: config/rs6000/rs6000.c:3268 #, gcc-internal-format msgid "target attribute or pragma changes single precision floating point" -msgstr "målattribut eller pragma ändrar enkel precisions flyttal" +msgstr "mÃ¥lattribut eller pragma ändrar enkel precisions flyttal" #: config/rs6000/rs6000.c:3271 #, gcc-internal-format msgid "target attribute or pragma changes double precision floating point" -msgstr "målattribut eller pragma ändrar dubbel precisions flyttal" +msgstr "mÃ¥lattribut eller pragma ändrar dubbel precisions flyttal" #: config/rs6000/rs6000.c:7407 #, gcc-internal-format msgid "GCC vector returned by reference: non-standard ABI extension with no compatibility guarantee" -msgstr "GCC-vektor returnerad som referens: icke-standard ABI-utökning utan kompatibilitetsgaranti" +msgstr "GCC-vektor returnerad som referens: icke-standard ABI-utökning utan kompatibilitetsgaranti" #: config/rs6000/rs6000.c:7545 #, gcc-internal-format msgid "cannot return value in vector register because altivec instructions are disabled, use -maltivec to enable them" -msgstr "det går inte att returnera värde i vektorregister för att altivec-instruktioner är avaktiverade, använd -maltivec för att aktivera dem" +msgstr "det gÃ¥r inte att returnera värde i vektorregister för att altivec-instruktioner är avaktiverade, använd -maltivec för att aktivera dem" #: config/rs6000/rs6000.c:7888 #, gcc-internal-format msgid "cannot pass argument in vector register because altivec instructions are disabled, use -maltivec to enable them" -msgstr "det går inte att skicka argument i vektorregister för att altivec-instruktioner är avaktiverade, använd -maltivec för att aktivera dem" +msgstr "det gÃ¥r inte att skicka argument i vektorregister för att altivec-instruktioner är avaktiverade, använd -maltivec för att aktivera dem" #: config/rs6000/rs6000.c:8814 #, gcc-internal-format msgid "GCC vector passed by reference: non-standard ABI extension with no compatibility guarantee" -msgstr "GCC-vektor skickad som referens: icke-standard ABI-utökning utan kompatibilitetsgaranti" +msgstr "GCC-vektor skickad som referens: icke-standard ABI-utökning utan kompatibilitetsgaranti" #: config/rs6000/rs6000.c:9443 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "internal error: builtin function %s already processed" -msgstr "internt fel: inbyggd funktion till %s redan bearbetad" +msgstr "internt fel: den inbyggda funktionen %s redan bearbetad" #: config/rs6000/rs6000.c:9816 #, gcc-internal-format msgid "argument 1 must be a 5-bit signed literal" -msgstr "argument 1 måste vara en 5-bitars literal med tecken" +msgstr "argument 1 mÃ¥ste vara en 5-bitars literal med tecken" #: config/rs6000/rs6000.c:9919 config/rs6000/rs6000.c:10936 #, gcc-internal-format msgid "argument 2 must be a 5-bit unsigned literal" -msgstr "argument 2 måste vara en 5-bitars literal utan tecken" +msgstr "argument 2 mÃ¥ste vara en 5-bitars literal utan tecken" #: config/rs6000/rs6000.c:9958 #, gcc-internal-format msgid "argument 1 of __builtin_altivec_predicate must be a constant" -msgstr "argumentet 1 till __builtin_altivec_predicate måste vara en konstant" +msgstr "argumentet 1 till __builtin_altivec_predicate mÃ¥ste vara en konstant" #: config/rs6000/rs6000.c:10010 #, gcc-internal-format msgid "argument 1 of __builtin_altivec_predicate is out of range" -msgstr "argument 1 till __builtin_altivec_predicate är utanför sitt intervall" +msgstr "argument 1 till __builtin_altivec_predicate är utanför sitt intervall" #: config/rs6000/rs6000.c:10267 #, gcc-internal-format msgid "argument 3 must be a 4-bit unsigned literal" -msgstr "argument 3 måste vara en 4-bitars literal utan tecken" +msgstr "argument 3 mÃ¥ste vara en 4-bitars literal utan tecken" #: config/rs6000/rs6000.c:10285 #, gcc-internal-format msgid "argument 3 must be a 2-bit unsigned literal" -msgstr "argument 3 måste vara en 2-bitars literal utan tecken" +msgstr "argument 3 mÃ¥ste vara en 2-bitars literal utan tecken" #: config/rs6000/rs6000.c:10297 #, gcc-internal-format msgid "argument 3 must be a 1-bit unsigned literal" -msgstr "argument 3 måste vara en 1-bitars literal utan tecken" +msgstr "argument 3 mÃ¥ste vara en 1-bitars literal utan tecken" #: config/rs6000/rs6000.c:10480 #, gcc-internal-format msgid "argument to %qs must be a 2-bit unsigned literal" -msgstr "argument till %qs måste vara en 2-bitars literal utan tecken" +msgstr "argument till %qs mÃ¥ste vara en 2-bitars literal utan tecken" #: config/rs6000/rs6000.c:10621 #, gcc-internal-format msgid "unresolved overload for Altivec builtin %qF" -msgstr "ej upplöst överlagring för inbyggd Altivec %qF" +msgstr "ej upplöst överlagring för inbyggd Altivec %qF" #: config/rs6000/rs6000.c:10727 #, gcc-internal-format msgid "argument to dss must be a 2-bit unsigned literal" -msgstr "argument till dss måste vara en 2-bitars literal utan tecken" +msgstr "argument till dss mÃ¥ste vara en 2-bitars literal utan tecken" #: config/rs6000/rs6000.c:11056 #, gcc-internal-format msgid "argument 1 of __builtin_paired_predicate must be a constant" -msgstr "argument 1 till __builtin_paired_predicate måste vara en konstant" +msgstr "argument 1 till __builtin_paired_predicate mÃ¥ste vara en konstant" #: config/rs6000/rs6000.c:11103 #, gcc-internal-format msgid "argument 1 of __builtin_paired_predicate is out of range" -msgstr "argument 1 till __builtin_paired_predicate är utanför sitt intervall" +msgstr "argument 1 till __builtin_paired_predicate är utanför sitt intervall" #: config/rs6000/rs6000.c:11128 #, gcc-internal-format msgid "argument 1 of __builtin_spe_predicate must be a constant" -msgstr "argument 1 till __builtin_spe_predicate måste vara en konstant" +msgstr "argument 1 till __builtin_spe_predicate mÃ¥ste vara en konstant" #: config/rs6000/rs6000.c:11200 #, gcc-internal-format msgid "argument 1 of __builtin_spe_predicate is out of range" -msgstr "argument 1 till __builtin_spe_predicate är utanför sitt intervall" +msgstr "argument 1 till __builtin_spe_predicate är utanför sitt intervall" #: config/rs6000/rs6000.c:11282 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Builtin function %s is only valid for the cell processor" -msgstr "denna inbyggda funktion är endast tillgänglig i fr450" +msgstr "Den inbyggda funktionen %s är endast giltig för cell-processorn" #: config/rs6000/rs6000.c:11284 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Builtin function %s requires the -mvsx option" -msgstr "inbyggd funktion %qD behöver flaggan %<-mconstant-cfstrings%>" +msgstr "Den inbyggda funktionen %s behöver flaggan -mvsx" #: config/rs6000/rs6000.c:11286 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Builtin function %s requires the -maltivec option" -msgstr "inbyggd funktion %qD behöver flaggan %<-mconstant-cfstrings%>" +msgstr "Den inbyggda funktionen %s behöver flaggan -maltivec" #: config/rs6000/rs6000.c:11288 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Builtin function %s requires the -mpaired option" -msgstr "inbyggd funktion %qD behöver flaggan %<-mconstant-cfstrings%>" +msgstr "Den inbyggda funktionen %s behöver flaggan -mpaired" #: config/rs6000/rs6000.c:11290 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Builtin function %s requires the -mspe option" -msgstr "inbyggd funktion %qD behöver flaggan %<-mconstant-cfstrings%>" +msgstr "Den inbyggda funktionen %s behöver flaggan -mspe" #: config/rs6000/rs6000.c:11292 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Builtin function %s is not supported with the current options" -msgstr "ifunc stödjs inte i denna konfiguration" +msgstr "Den inbyggda funktionen %s stödjs inte med de aktuella flaggorna" #: config/rs6000/rs6000.c:12552 #, gcc-internal-format, gfc-internal-format @@ -24853,22 +24857,22 @@ msgstr "internt fel: inbyggd funktion %s har ingen typ" #: config/rs6000/rs6000.c:12559 #, gcc-internal-format, gfc-internal-format msgid "internal error: builtin function %s had an unexpected return type %s" -msgstr "internt fel: inbyggd funktion %s hade en oväntad returtyp %s" +msgstr "internt fel: inbyggd funktion %s hade en oväntad returtyp %s" #: config/rs6000/rs6000.c:12575 #, gcc-internal-format, gfc-internal-format msgid "internal error: builtin function %s, argument %d had unexpected argument type %s" -msgstr "internt fel: inbyggd funktion %s, argument %d har en oväntad argumenttyp %s" +msgstr "internt fel: inbyggd funktion %s, argument %d har en oväntad argumenttyp %s" #: config/rs6000/rs6000.c:18575 #, gcc-internal-format msgid "stack frame too large" -msgstr "för stor stackram" +msgstr "för stor stackram" #: config/rs6000/rs6000.c:22049 #, gcc-internal-format msgid "no profiling of 64-bit code for this ABI" -msgstr "ingen profilering av 64-bitskod för detta ABI" +msgstr "ingen profilering av 64-bitskod för detta ABI" #: config/rs6000/rs6000.c:24034 #, gcc-internal-format @@ -24878,42 +24882,42 @@ msgstr "" #: config/rs6000/rs6000.c:24114 #, gcc-internal-format msgid "use of %<long double%> in AltiVec types is invalid" -msgstr "användning av %<long double%> i AltiVec-typer är ogiltigt" +msgstr "användning av %<long double%> i AltiVec-typer är ogiltigt" #: config/rs6000/rs6000.c:24116 #, gcc-internal-format msgid "use of boolean types in AltiVec types is invalid" -msgstr "användning av booleaner i AltiVec-typer är ogiltigt" +msgstr "användning av booleaner i AltiVec-typer är ogiltigt" #: config/rs6000/rs6000.c:24118 #, gcc-internal-format msgid "use of %<complex%> in AltiVec types is invalid" -msgstr "användning av %<complex%> i AltiVec-typer är ogiltigt" +msgstr "användning av %<complex%> i AltiVec-typer är ogiltigt" #: config/rs6000/rs6000.c:24120 #, gcc-internal-format msgid "use of decimal floating point types in AltiVec types is invalid" -msgstr "användning av decimala flyttalstyper i AltiVec-typer är ogiltigt" +msgstr "användning av decimala flyttalstyper i AltiVec-typer är ogiltigt" #: config/rs6000/rs6000.c:24126 #, gcc-internal-format msgid "use of %<long%> in AltiVec types is invalid for 64-bit code without -mvsx" -msgstr "användning av %<long%> i AltiVec-typer är ogiltigt för 64-bitskod utan -mvsx" +msgstr "användning av %<long%> i AltiVec-typer är ogiltigt för 64-bitskod utan -mvsx" #: config/rs6000/rs6000.c:24129 #, gcc-internal-format msgid "use of %<long%> in AltiVec types is deprecated; use %<int%>" -msgstr "användning av %<long%> i AltiVec-typer bör undvikas, använd %<int%>" +msgstr "användning av %<long%> i AltiVec-typer bör undvikas, använd %<int%>" #: config/rs6000/rs6000.c:24134 #, gcc-internal-format msgid "use of %<long long%> in AltiVec types is invalid without -mvsx" -msgstr "användning av %<long long%> i AltiVec-typer är ogiltigt utan -mvsx" +msgstr "användning av %<long long%> i AltiVec-typer är ogiltigt utan -mvsx" #: config/rs6000/rs6000.c:24137 #, gcc-internal-format msgid "use of %<double%> in AltiVec types is invalid without -mvsx" -msgstr "användning av %<double%> i AltiVec-typer är ogiltigt utan -mvsx" +msgstr "användning av %<double%> i AltiVec-typer är ogiltigt utan -mvsx" #: config/rs6000/rs6000.c:26976 #, gcc-internal-format, gfc-internal-format @@ -24928,41 +24932,41 @@ msgstr "matar ut villkorlig mikrokodsinstruktion %s\t[%s] nr %d" #: config/rs6000/rs6000.c:27204 #, gcc-internal-format, gfc-internal-format msgid "invalid cpu \"%s\" for %s\"%s\"%s" -msgstr "felaktig cpu \"%s\" för %s\"%s\"%s" +msgstr "felaktig cpu â€%s†för %sâ€%sâ€%s" #: config/rs6000/rs6000.c:27207 #, gcc-internal-format, gfc-internal-format msgid "%s\"%s\"%s is not allowed" -msgstr "%s\"%s\"%s är inte tillåtet" +msgstr "%sâ€%sâ€%s är inte tillÃ¥tet" #: config/rs6000/rs6000.c:27209 #, gcc-internal-format, gfc-internal-format msgid "%s\"%s\"%s is invalid" -msgstr "%s\"%s\"%s är ogiltigt" +msgstr "%sâ€%sâ€%s är ogiltigt" #: config/rs6000/aix43.h:32 config/rs6000/aix51.h:32 config/rs6000/aix52.h:32 #: config/rs6000/aix53.h:32 config/rs6000/aix61.h:32 #, gcc-internal-format msgid "-maix64 and POWER architecture are incompatible" -msgstr "-maix64 och POWER-arkitekturen är inkompatibla" +msgstr "-maix64 och POWER-arkitekturen är inkompatibla" #: config/rs6000/aix43.h:37 config/rs6000/aix51.h:37 config/rs6000/aix52.h:37 #: config/rs6000/aix53.h:37 config/rs6000/aix61.h:37 #, gcc-internal-format msgid "-maix64 requires PowerPC64 architecture remain enabled" -msgstr "-maix64 kräver att arkitekturen PowerPC64 fortfarande är aktiverad" +msgstr "-maix64 kräver att arkitekturen PowerPC64 fortfarande är aktiverad" #: config/rs6000/aix43.h:43 config/rs6000/aix52.h:43 config/rs6000/aix53.h:43 #: config/rs6000/aix61.h:43 #, gcc-internal-format msgid "soft-float and long-double-128 are incompatible" -msgstr "soft-float och long-double-128 är inkompatibla" +msgstr "soft-float och long-double-128 är inkompatibla" #: config/rs6000/aix43.h:47 config/rs6000/aix51.h:41 config/rs6000/aix52.h:47 #: config/rs6000/aix53.h:47 config/rs6000/aix61.h:47 #, gcc-internal-format msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported" -msgstr "-maix64 krävs: 64-bitsberäkningar med 32-bitars adressering stöds inte än" +msgstr "-maix64 krävs: 64-bitsberäkningar med 32-bitars adressering stöds inte än" #: config/rs6000/e500.h:40 #, gcc-internal-format @@ -24977,27 +24981,27 @@ msgstr "VSX- och E500-instruktioner kan inte samexistera" #: config/rs6000/e500.h:44 #, gcc-internal-format msgid "64-bit E500 not supported" -msgstr "64-bitars E500 stöds inte" +msgstr "64-bitars E500 stöds inte" #: config/rs6000/e500.h:46 #, gcc-internal-format msgid "E500 and FPRs not supported" -msgstr "E500 och FPR:er stöds inte" +msgstr "E500 och FPR:er stöds inte" #: config/rs6000/eabispe.h:38 config/rs6000/linuxspe.h:38 #, gcc-internal-format msgid "-m64 not supported in this configuration" -msgstr "-m64 stöds inte i denna konfiguration" +msgstr "-m64 stöds inte i denna konfiguration" #: config/rs6000/linux64.h:124 #, gcc-internal-format msgid "-m64 requires a PowerPC64 cpu" -msgstr "-m64 kräver en PowerPC64-CPU" +msgstr "-m64 kräver en PowerPC64-CPU" #: config/rs6000/linux64.h:130 #, gcc-internal-format msgid "-mcmodel incompatible with other toc options" -msgstr "-mcmodel är inkompatibel med andra toc-flaggor" +msgstr "-mcmodel är inkompatibel med andra toc-flaggor" #. Definitions for __builtin_return_address and __builtin_frame_address. #. __builtin_return_address (0) should give link register (65), enable @@ -25014,79 +25018,79 @@ msgstr "-mcmodel är inkompatibel med andra toc-flaggor" #: config/rs6000/rs6000.h:1654 #, gcc-internal-format msgid "RETURN_ADDRESS_OFFSET not supported" -msgstr "RETURN_ADDRESS_OFFSET stöds inte" +msgstr "RETURN_ADDRESS_OFFSET stöds inte" #. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to #. get control in TARGET_OPTION_OVERRIDE. #: config/rs6000/sysv4.h:115 #, gcc-internal-format, gfc-internal-format msgid "bad value for -mcall-%s" -msgstr "felaktigt värde för -mcall-%s" +msgstr "felaktigt värde för -mcall-%s" #: config/rs6000/sysv4.h:131 #, gcc-internal-format, gfc-internal-format msgid "bad value for -msdata=%s" -msgstr "felaktigt värde för -msdata-%s" +msgstr "felaktigt värde för -msdata-%s" #: config/rs6000/sysv4.h:148 #, gcc-internal-format, gfc-internal-format msgid "-mrelocatable and -msdata=%s are incompatible" -msgstr "-mrelocatable och -msdata=%s är inkompatibla" +msgstr "-mrelocatable och -msdata=%s är inkompatibla" #: config/rs6000/sysv4.h:157 #, gcc-internal-format, gfc-internal-format msgid "-f%s and -msdata=%s are incompatible" -msgstr "-f%s och -msdata=%s är inkompatibla" +msgstr "-f%s och -msdata=%s är inkompatibla" #: config/rs6000/sysv4.h:166 #, gcc-internal-format, gfc-internal-format msgid "-msdata=%s and -mcall-%s are incompatible" -msgstr "-mmsdata=%s och -mcall-%s är inkompatibla" +msgstr "-mmsdata=%s och -mcall-%s är inkompatibla" #: config/rs6000/sysv4.h:175 #, gcc-internal-format msgid "-mrelocatable and -mno-minimal-toc are incompatible" -msgstr "-mrelocatable och -mno-minimal-toc är inkompatibla" +msgstr "-mrelocatable och -mno-minimal-toc är inkompatibla" #: config/rs6000/sysv4.h:181 #, gcc-internal-format, gfc-internal-format msgid "-mrelocatable and -mcall-%s are incompatible" -msgstr "-mrelocatable och -mcall-%s är inkompatibla" +msgstr "-mrelocatable och -mcall-%s är inkompatibla" #: config/rs6000/sysv4.h:188 #, gcc-internal-format, gfc-internal-format msgid "-fPIC and -mcall-%s are incompatible" -msgstr "-fPIC och -mcall-%s är inkompatibla" +msgstr "-fPIC och -mcall-%s är inkompatibla" #: config/rs6000/sysv4.h:195 #, gcc-internal-format msgid "-mcall-aixdesc must be big endian" -msgstr "-mcall-aixdesc måste ha rak byteordning" +msgstr "-mcall-aixdesc mÃ¥ste ha rak byteordning" #: config/rs6000/sysv4.h:200 #, gcc-internal-format msgid "-msecure-plt not supported by your assembler" -msgstr "-msecure-plt stöds inte av din assembler" +msgstr "-msecure-plt stöds inte av din assembler" #: config/rs6000/sysv4.h:219 #, gcc-internal-format, gfc-internal-format msgid "-m%s not supported in this configuration" -msgstr "-m%s stöds inte i denna konfiguration" +msgstr "-m%s stöds inte i denna konfiguration" #: config/rx/rx.c:641 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "unrecognized control register number: %d - using 'psw'" -msgstr "okänt styrregisternummer: %d - använder \"psw\"" +msgstr "okänt styrregisternummer: %d - använder â€pswâ€" #: config/rx/rx.c:2383 #, gcc-internal-format, gfc-internal-format msgid "__builtin_rx_%s takes 'C', 'Z', 'S', 'O', 'I', or 'U'" -msgstr "__builtin_rx_%s tar \"C\", \"Z\", \"S\", \"O\", \"I\" eller \"U\"" +msgstr "__builtin_rx_%s tar â€Câ€, â€Zâ€, â€Sâ€, â€Oâ€, â€I†eller â€Uâ€" #: config/rx/rx.c:2385 #, gcc-internal-format msgid "use __builtin_rx_mvtc (0, ... ) to write arbitrary values to PSW" -msgstr "använd __builtin_rx_mvtc (0, ...) för att skriva godtyckliga värden till PSW" +msgstr "använd __builtin_rx_mvtc (0, ...) för att skriva godtyckliga värden till PSW" #: config/rx/rx.c:2440 config/xtensa/xtensa.c:3123 config/xtensa/xtensa.c:3163 #, gcc-internal-format @@ -25096,57 +25100,57 @@ msgstr "felaktig inbyggd kod" #: config/rx/rx.c:2551 #, gcc-internal-format msgid "RX FPU instructions do not support NaNs and infinities" -msgstr "RX FPU-instruktioner stödjer inte NaN:er och oändligheter" +msgstr "RX FPU-instruktioner stödjer inte NaN:er och oändligheter" #: config/s390/s390.c:1539 #, gcc-internal-format, gfc-internal-format msgid "z/Architecture mode not supported on %s" -msgstr "z/Architecture-läge stöds inte på %s" +msgstr "z/Architecture-läge stöds inte pÃ¥ %s" #: config/s390/s390.c:1541 #, gcc-internal-format msgid "64-bit ABI not supported in ESA/390 mode" -msgstr "64-bits ABI stöds inte i ESA/390-läge" +msgstr "64-bits ABI stöds inte i ESA/390-läge" #: config/s390/s390.c:1548 #, gcc-internal-format, gfc-internal-format msgid "hardware decimal floating point instructions not available on %s" -msgstr "hårdvaruinstruktioner för decimala flyttal är inte tillgängliga på %s" +msgstr "hÃ¥rdvaruinstruktioner för decimala flyttal är inte tillgängliga pÃ¥ %s" #: config/s390/s390.c:1551 #, gcc-internal-format msgid "hardware decimal floating point instructions not available in ESA/390 mode" -msgstr "hårdvaruinstruktioner för decimalflyttal är inte tillgängliga i läget ESA/390" +msgstr "hÃ¥rdvaruinstruktioner för decimalflyttal är inte tillgängliga i läget ESA/390" #: config/s390/s390.c:1561 #, gcc-internal-format msgid "-mhard-dfp can%'t be used in conjunction with -msoft-float" -msgstr "-mhard-dfp kan inte användas tillsammans med -msoft-float" +msgstr "-mhard-dfp kan inte användas tillsammans med -msoft-float" #: config/s390/s390.c:1585 #, gcc-internal-format msgid "-mbackchain -mpacked-stack -mhard-float are not supported in combination" -msgstr "-mbackchain -mpacked-stack -mhard-float stöds inte i kombination" +msgstr "-mbackchain -mpacked-stack -mhard-float stöds inte i kombination" #: config/s390/s390.c:1591 #, gcc-internal-format msgid "stack size must be greater than the stack guard value" -msgstr "stackstorlek måste vara större än stackvaktsvärdet" +msgstr "stackstorlek mÃ¥ste vara större än stackvaktsvärdet" #: config/s390/s390.c:1593 #, gcc-internal-format msgid "stack size must not be greater than 64k" -msgstr "stackstorlek får inte vara större än 64 k" +msgstr "stackstorlek fÃ¥r inte vara större än 64 k" #: config/s390/s390.c:1596 #, gcc-internal-format msgid "-mstack-guard implies use of -mstack-size" -msgstr "-mstack-guard implicerar användning av -mstack-size" +msgstr "-mstack-guard implicerar användning av -mstack-size" #: config/s390/s390.c:7365 #, gcc-internal-format msgid "total size of local variables exceeds architecture limit" -msgstr "totala storleken på lokala variabler överskrider arkitekturens gräns" +msgstr "totala storleken pÃ¥ lokala variabler överskrider arkitekturens gräns" #: config/s390/s390.c:8072 #, gcc-internal-format @@ -25159,49 +25163,49 @@ msgid "frame size of function %qs is %wd bytes which is more than half the stack msgstr "" #: config/s390/s390.c:8115 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "frame size of %qs is %wd bytes" -msgstr "ramstorlek på %qs är " +msgstr "ramstorlek pÃ¥ %qs är %wd byte" #: config/s390/s390.c:8119 #, gcc-internal-format msgid "%qs uses dynamic stack allocation" -msgstr "%qs använder dynamisk stackallokering" +msgstr "%qs använder dynamisk stackallokering" #: config/sh/sh.c:770 #, gcc-internal-format msgid "ignoring -fschedule-insns because of exception handling bug" -msgstr "ignorerar -fschedule-insns på grund av ett fel i undantagshanteringen" +msgstr "ignorerar -fschedule-insns pÃ¥ grund av ett fel i undantagshanteringen" #: config/sh/sh.c:791 #, gcc-internal-format msgid "unwind tables currently require either a frame pointer or -maccumulate-outgoing-args for correctness" -msgstr "utrullningstabeller kräver för närvarande antingen en rampekare eller -maccumulate-outgoing-args för att bli korrekt" +msgstr "utrullningstabeller kräver för närvarande antingen en rampekare eller -maccumulate-outgoing-args för att bli korrekt" #: config/sh/sh.c:7655 #, gcc-internal-format msgid "__builtin_saveregs not supported by this subtarget" -msgstr "__builtin_saveregs stöds inte på denna målunderarkitektur" +msgstr "__builtin_saveregs stöds inte pÃ¥ denna mÃ¥lunderarkitektur" #: config/sh/sh.c:8821 #, gcc-internal-format msgid "%qE attribute only applies to interrupt functions" -msgstr "attributet %qE är bara tillämpligt på avbrottsfunktioner" +msgstr "attributet %qE är bara tillämpligt pÃ¥ avbrottsfunktioner" #: config/sh/sh.c:8879 #, gcc-internal-format msgid "%qE attribute is supported only for SH2A" -msgstr "attributet %qE stöds endast för SH2A" +msgstr "attributet %qE stöds endast för SH2A" #: config/sh/sh.c:8909 #, gcc-internal-format msgid "attribute interrupt_handler is not compatible with -m5-compact" -msgstr "attributet interrupt_handler är inte kompatibelt -m5-compact" +msgstr "attributet interrupt_handler är inte kompatibelt -m5-compact" #: config/sh/sh.c:8926 #, gcc-internal-format msgid "%qE attribute only applies to SH2A" -msgstr "attributet %qE är bara tillämpligt på SH2A" +msgstr "attributet %qE är bara tillämpligt pÃ¥ SH2A" #: config/sh/sh.c:8948 #, gcc-internal-format @@ -25212,22 +25216,22 @@ msgstr "argument till attribut %qE skall vara mellan 0 och 255" #: config/sh/sh.c:9021 #, gcc-internal-format msgid "%qE attribute argument not a string constant" -msgstr "argument till attribut %qE är inte en strängkonstant" +msgstr "argument till attribut %qE är inte en strängkonstant" #: config/sh/sh.c:11601 #, gcc-internal-format msgid "r0 needs to be available as a call-clobbered register" -msgstr "r0 behöver vara tillgängligt som ett anropsöverskrivet register" +msgstr "r0 behöver vara tillgängligt som ett anropsöverskrivet register" #: config/sh/sh.c:11622 #, gcc-internal-format msgid "need a second call-clobbered general purpose register" -msgstr "behöver ett andra generellt anropsöverskrivet register" +msgstr "behöver ett andra generellt anropsöverskrivet register" #: config/sh/sh.c:11630 #, gcc-internal-format msgid "need a call-clobbered target register" -msgstr "behöver ett anropsöverskrivet målregister" +msgstr "behöver ett anropsöverskrivet mÃ¥lregister" #. FIXME #: config/sh/netbsd-elf.h:75 @@ -25239,77 +25243,77 @@ msgstr "oimplementerat - shmedia-profilering" #: config/sh/vxworks.h:43 #, gcc-internal-format msgid "-mrelax is only supported for RTP PIC" -msgstr "-mrelax stöds endast för RTP PIC" +msgstr "-mrelax stöds endast för RTP PIC" #: config/sparc/sparc.c:980 #, gcc-internal-format, gfc-internal-format msgid "%s is not supported by this configuration" -msgstr "%s stöds inte i denna konfiguration" +msgstr "%s stöds inte i denna konfiguration" #: config/sparc/sparc.c:987 #, gcc-internal-format msgid "-mlong-double-64 not allowed with -m64" -msgstr "-mlong-double-64 är inte tillåten med -m64" +msgstr "-mlong-double-64 är inte tillÃ¥ten med -m64" #: config/sparc/sparc.c:1007 #, gcc-internal-format, gfc-internal-format msgid "bad value (%s) for -mcmodel= switch" -msgstr "felaktigt värde (%s) till flaggan -mcmodel=" +msgstr "felaktigt värde (%s) till flaggan -mcmodel=" #: config/sparc/sparc.c:1012 #, gcc-internal-format msgid "-mcmodel= is not supported on 32 bit systems" -msgstr "-mcmodel= stöds inte på 32-bitars system" +msgstr "-mcmodel= stöds inte pÃ¥ 32-bitars system" #: config/sparc/sparc.c:1019 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "-fcall-saved-REG is not supported for out registers" -msgstr "-fdata-sections stöds inte för denna målarkitektur" +msgstr "-fcall-saved-REG stödjs inte för utregister" #: config/spu/spu-c.c:135 #, gcc-internal-format, gfc-internal-format msgid "insufficient arguments to overloaded function %s" -msgstr "för få argument till den överlagrade funktionen %s" +msgstr "för fÃ¥ argument till den överlagrade funktionen %s" #: config/spu/spu-c.c:166 #, gcc-internal-format, gfc-internal-format msgid "too many arguments to overloaded function %s" -msgstr "för många argument till den överlagrade funktionen %s" +msgstr "för mÃ¥nga argument till den överlagrade funktionen %s" #: config/spu/spu-c.c:178 #, gcc-internal-format, gfc-internal-format msgid "parameter list does not match a valid signature for %s()" -msgstr "parameterlistan stämmer inte med någon giltig signatur för %s()" +msgstr "parameterlistan stämmer inte med nÃ¥gon giltig signatur för %s()" #: config/spu/spu.c:548 #, gcc-internal-format, gfc-internal-format msgid "bad value (%s) for -march= switch" -msgstr "felaktigt värde (%s) till flaggan -march=" +msgstr "felaktigt värde (%s) till flaggan -march=" #: config/spu/spu.c:559 #, gcc-internal-format, gfc-internal-format msgid "bad value (%s) for -mtune= switch" -msgstr "felaktigt värde (%s) till flaggan -mtune" +msgstr "felaktigt värde (%s) till flaggan -mtune" #: config/spu/spu.c:5467 config/spu/spu.c:5470 #, gcc-internal-format msgid "creating run-time relocation for %qD" -msgstr "skapar körtidsomlokaliseringar för %qD" +msgstr "skapar körtidsomlokaliseringar för %qD" #: config/spu/spu.c:5475 config/spu/spu.c:5477 #, gcc-internal-format msgid "creating run-time relocation" -msgstr "skapar körtidsomlokalisering" +msgstr "skapar körtidsomlokalisering" #: config/spu/spu.c:6604 #, gcc-internal-format, gfc-internal-format msgid "%s expects an integer literal in the range [%d, %d]" -msgstr "%s förväntar sig en heltalskonstant i intervallet [%d, %d]" +msgstr "%s förväntar sig en heltalskonstant i intervallet [%d, %d]" #: config/spu/spu.c:6624 #, gcc-internal-format msgid "%s expects an integer literal in the range [%d, %d]. (%wd)" -msgstr "%s förväntar sig en heltalskonstant i intervallet [%d, %d]. (%wd)" +msgstr "%s förväntar sig en heltalskonstant i intervallet [%d, %d]. (%wd)" #: config/spu/spu.c:6653 #, gcc-internal-format, gfc-internal-format @@ -25319,62 +25323,62 @@ msgstr "de %d minst signifikanta bitarna av %s ignoreras" #: config/stormy16/stormy16.c:1036 #, gcc-internal-format msgid "local variable memory requirements exceed capacity" -msgstr "behovet av minne för lokala variabler överskrider kapaciteten" +msgstr "behovet av minne för lokala variabler överskrider kapaciteten" #: config/stormy16/stormy16.c:1190 #, gcc-internal-format msgid "function_profiler support" -msgstr "stöd för function_profiler" +msgstr "stöd för function_profiler" #: config/stormy16/stormy16.c:1284 #, gcc-internal-format msgid "cannot use va_start in interrupt function" -msgstr "det går inte använda va_start i en avbrottsfunktion" +msgstr "det gÃ¥r inte använda va_start i en avbrottsfunktion" #: config/stormy16/stormy16.c:1851 #, gcc-internal-format, gfc-internal-format msgid "switch statement of size %lu entries too large" -msgstr "switch-sats med storleken %lu ingångar är för stor" +msgstr "switch-sats med storleken %lu ingÃ¥ngar är för stor" #: config/stormy16/stormy16.c:2223 #, gcc-internal-format msgid "%<__BELOW100__%> attribute only applies to variables" -msgstr "attributet %<__BELOW100__%> är bara tillämpbart på variabler" +msgstr "attributet %<__BELOW100__%> är bara tillämpbart pÃ¥ variabler" #: config/stormy16/stormy16.c:2230 #, gcc-internal-format msgid "__BELOW100__ attribute not allowed with auto storage class" -msgstr "attributet __BELOW100__ är inte tillåtet med lagringsklassen auto" +msgstr "attributet __BELOW100__ är inte tillÃ¥tet med lagringsklassen auto" #: config/v850/v850-c.c:67 #, gcc-internal-format msgid "#pragma GHS endXXXX found without previous startXXX" -msgstr "#pragma GHS endXXXX funnet utan föregående startXXX" +msgstr "#pragma GHS endXXXX funnet utan föregÃ¥ende startXXX" #: config/v850/v850-c.c:70 #, gcc-internal-format msgid "#pragma GHS endXXX does not match previous startXXX" -msgstr "#pragma GHS endXXX stämmer inte med föregående startXXX" +msgstr "#pragma GHS endXXX stämmer inte med föregÃ¥ende startXXX" #: config/v850/v850-c.c:96 #, gcc-internal-format msgid "cannot set interrupt attribute: no current function" -msgstr "det går inte att sätta avbrottsattribut, ingen aktuell funktion" +msgstr "det gÃ¥r inte att sätta avbrottsattribut, ingen aktuell funktion" #: config/v850/v850-c.c:104 #, gcc-internal-format msgid "cannot set interrupt attribute: no such identifier" -msgstr "det går inte att sätta avbrottsattribut: det finns ingen sådan identifierare" +msgstr "det gÃ¥r inte att sätta avbrottsattribut: det finns ingen sÃ¥dan identifierare" #: config/v850/v850-c.c:153 #, gcc-internal-format msgid "junk at end of #pragma ghs section" -msgstr "skräp vid slutet av #pragma ghs-sektion" +msgstr "skräp vid slutet av #pragma ghs-sektion" #: config/v850/v850-c.c:170 #, gcc-internal-format msgid "unrecognized section name %qE" -msgstr "okänt sektionsnamn %qE" +msgstr "okänt sektionsnamn %qE" #: config/v850/v850-c.c:185 #, gcc-internal-format @@ -25384,47 +25388,47 @@ msgstr "felformaterat #pragma ghs section" #: config/v850/v850-c.c:204 #, gcc-internal-format msgid "junk at end of #pragma ghs interrupt" -msgstr "skräp vid slutet av #pragma ghs interrupt" +msgstr "skräp vid slutet av #pragma ghs interrupt" #: config/v850/v850-c.c:215 #, gcc-internal-format msgid "junk at end of #pragma ghs starttda" -msgstr "skräp vid slutet av #pragma ghs starttda" +msgstr "skräp vid slutet av #pragma ghs starttda" #: config/v850/v850-c.c:226 #, gcc-internal-format msgid "junk at end of #pragma ghs startsda" -msgstr "skräp vid slutet av #pragma ghs startsda" +msgstr "skräp vid slutet av #pragma ghs startsda" #: config/v850/v850-c.c:237 #, gcc-internal-format msgid "junk at end of #pragma ghs startzda" -msgstr "skräp vid slutet av #pragma ghs startzda" +msgstr "skräp vid slutet av #pragma ghs startzda" #: config/v850/v850-c.c:248 #, gcc-internal-format msgid "junk at end of #pragma ghs endtda" -msgstr "skräp vid slutet av #pragma ghs endtda" +msgstr "skräp vid slutet av #pragma ghs endtda" #: config/v850/v850-c.c:259 #, gcc-internal-format msgid "junk at end of #pragma ghs endsda" -msgstr "skräp vid slutet av #pragma ghs endsda" +msgstr "skräp vid slutet av #pragma ghs endsda" #: config/v850/v850-c.c:270 #, gcc-internal-format msgid "junk at end of #pragma ghs endzda" -msgstr "skräp vid slutet av #pragma ghs endzda" +msgstr "skräp vid slutet av #pragma ghs endzda" #: config/v850/v850.c:2094 #, gcc-internal-format msgid "data area attributes cannot be specified for local variables" -msgstr "dataområdesattribut kan inte anges för lokala variabler" +msgstr "dataomrÃ¥desattribut kan inte anges för lokala variabler" #: config/v850/v850.c:2105 #, gcc-internal-format msgid "data area of %q+D conflicts with previous declaration" -msgstr "dataområdet %q+D står i konflikt med tidigare deklaration" +msgstr "dataomrÃ¥det %q+D stÃ¥r i konflikt med tidigare deklaration" #: config/v850/v850.c:2236 #, gcc-internal-format, gfc-internal-format @@ -25434,7 +25438,7 @@ msgstr "felaktig JR-konstruktion: %d" #: config/v850/v850.c:2254 config/v850/v850.c:2361 #, gcc-internal-format, gfc-internal-format msgid "bad amount of stack space removal: %d" -msgstr "felaktig mängd att ta bort från stacken: %d" +msgstr "felaktig mängd att ta bort frÃ¥n stacken: %d" #: config/v850/v850.c:2341 #, gcc-internal-format, gfc-internal-format @@ -25449,10 +25453,10 @@ msgstr "felaktig DISPOSE-konstruktion: %d" #: config/v850/v850.c:2657 #, gcc-internal-format, gfc-internal-format msgid "too much stack space to dispose of: %d" -msgstr "för mycket stackutrymme att göra av med: %d" +msgstr "för mycket stackutrymme att göra av med: %d" -# Förmodligen en felstavning i orginalet, men tills jag vet säkert -# behåller jag den +# Förmodligen en felstavning i orginalet, men tills jag vet säkert +# behÃ¥ller jag den #: config/v850/v850.c:2759 #, gcc-internal-format, gfc-internal-format msgid "bogus PREPEARE construction: %d" @@ -25461,22 +25465,22 @@ msgstr "felaktig PREPEARE-konstruktion: %d" #: config/v850/v850.c:2776 #, gcc-internal-format, gfc-internal-format msgid "too much stack space to prepare: %d" -msgstr "för mycket stackutrymme att förbereda: %d" +msgstr "för mycket stackutrymme att förbereda: %d" #: config/vms/vms-c.c:44 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "junk at end of #pragma __nostandard" -msgstr "skräp vid slutet av #pragma ghs starttda" +msgstr "skräp vid slutet av #pragma __nostandard" #: config/vms/vms-c.c:55 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "junk at end of #pragma __standard" -msgstr "skräp vid slutet av #pragma %s" +msgstr "skräp vid slutet av #pragma __standard" #: config/vms/vms-c.c:80 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "malformed '#pragma member_alignment', ignoring" -msgstr "felformaterat %<#pragma align%>, ignoreras" +msgstr "felformaterat â€#pragma member_alignmentâ€, ignoreras" #: config/vms/vms-c.c:95 #, gcc-internal-format, gfc-internal-format @@ -25484,24 +25488,24 @@ msgid "unknown '#pragma member_alignment' name %s" msgstr "" #: config/vms/vms-c.c:100 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "malformed '#pragma member_alignment'" -msgstr "felformaterat %<#pragma align%>" +msgstr "felformaterat â€#pragma member_alignmentâ€" #: config/vms/vms-c.c:130 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unhandled alignment for '#pragma nomember_alignment'" -msgstr "felaktig justering för %<#pragma align%>, ignoreras" +msgstr "ej hanterad justering för â€#pragma nomember_alignmentâ€" #: config/vms/vms-c.c:143 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "garbage at end of '#pragma nomember_alignment'" -msgstr "skräp vid slutet av \"#pragma options\"" +msgstr "skräp vid slutet av â€#pragma nomember_alignmentâ€" #: config/vms/vms-c.c:182 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "malformed '#pragma extern_model', ignoring" -msgstr "felformaterat \"#pragma options\", ignoreras" +msgstr "felformaterat â€#pragma extern_modelâ€, ignoreras" #: config/vms/vms-c.c:201 #, gcc-internal-format @@ -25514,41 +25518,41 @@ msgid "unknown '#pragma extern_model' model '%s'" msgstr "" #: config/vms/vms-c.c:212 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "junk at end of '#pragma extern_model'" -msgstr "skräp vid slutet av %<#pragma extern_prefix%>" +msgstr "skräp vid slutet av â€#pragma extern_modelâ€" #: config/vms/vms-c.c:226 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "vms '#pragma __message' is ignored" -msgstr "felformaterat %<#pragma message%>, ignoreras" +msgstr "vms â€#pragma __message†ignoreras" #: config/vms/vms-c.c:251 config/vms/vms-c.c:257 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "malformed '#pragma __extern_prefix', ignoring" -msgstr "felformaterat #pragma extern_prefix, ignoreras" +msgstr "felformaterat â€#pragma __extern_prefixâ€, ignorerar" #: config/xtensa/xtensa.c:2172 #, gcc-internal-format msgid "boolean registers required for the floating-point option" -msgstr "booleska register krävs för flyttalsalternativet" +msgstr "booleska register krävs för flyttalsalternativet" #: config/xtensa/xtensa.c:2207 #, gcc-internal-format, gfc-internal-format msgid "-f%s is not supported with CONST16 instructions" -msgstr "-f%s stöds inte med CONST16-instruktioner" +msgstr "-f%s stöds inte med CONST16-instruktioner" #: config/xtensa/xtensa.c:2214 #, gcc-internal-format msgid "PIC is required but not supported with CONST16 instructions" -msgstr "PIC krävs men stöds inte med CONST16-instruktioner" +msgstr "PIC krävs men stöds inte med CONST16-instruktioner" #: config/xtensa/xtensa.c:3293 #, gcc-internal-format msgid "only uninitialized variables can be placed in a .bss section" msgstr "endast oinitierade variabler kan placeras i en .bss-sektion" -# Vissa felmeddelanden är roligare än andra! :-) +# Vissa felmeddelanden är roligare än andra! :-) #: ada/gcc-interface/misc.c:128 #, gcc-internal-format msgid "%<-gnat%> misspelled as %<-gant%>" @@ -25557,7 +25561,7 @@ msgstr "%<-gnat%> felstavat %<-gant%>" #: ada/gcc-interface/misc.c:229 #, gcc-internal-format msgid "-fexcess-precision=standard for Ada" -msgstr "-fexcess-precision=standard för Ada" +msgstr "-fexcess-precision=standard för Ada" #: ada/gcc-interface/utils.c:5289 ada/gcc-interface/utils.c:5464 #: ada/gcc-interface/utils.c:5506 ada/gcc-interface/utils.c:5560 @@ -25568,12 +25572,12 @@ msgstr "attributet %qs ignorerat" #: ada/gcc-interface/utils.c:5407 #, gcc-internal-format msgid "%qs attribute requires prototypes with named arguments" -msgstr "attributet %qs kräver prototyper med namngivna argument" +msgstr "attributet %qs kräver prototyper med namngivna argument" #: ada/gcc-interface/utils.c:5416 #, gcc-internal-format msgid "%qs attribute only applies to variadic functions" -msgstr "attributet %qs fungerar bara på funktioner med variabelt antal argument" +msgstr "attributet %qs fungerar bara pÃ¥ funktioner med variabelt antal argument" #: ada/gcc-interface/utils.c:5487 #, gcc-internal-format @@ -25583,35 +25587,35 @@ msgstr "attributet %qE har ingen effekt" #: ada/gcc-interface/utils.c:5593 #, gcc-internal-format msgid "invalid vector type for attribute %qs" -msgstr "ogiltig vektortyp för attributet %qs" +msgstr "ogiltig vektortyp för attributet %qs" #: ada/gcc-interface/utils.c:5656 #, gcc-internal-format msgid "attribute %qs applies to array types only" -msgstr "attributet %qs är bara tillämpbart på vektortyper" +msgstr "attributet %qs är bara tillämpbart pÃ¥ vektortyper" #: ada/gcc-interface/utils.c:5683 #, gcc-internal-format msgid "invalid element type for attribute %qs" -msgstr "ogiltig elementtyp för attributet %qs" +msgstr "ogiltig elementtyp för attributet %qs" #. Conversion of implicit `this' argument failed. #: cp/call.c:3110 #, gcc-internal-format msgid " no known conversion for implicit %<this%> parameter from %qT to %qT" -msgstr " ingen känd konvertering för implicit %<this%>-parameter från %qT till %qT" +msgstr " ingen känd konvertering för implicit %<this%>-parameter frÃ¥n %qT till %qT" #: cp/call.c:3114 #, gcc-internal-format msgid " no known conversion for argument %d from %qT to %qT" -msgstr " ingen känd konvertering för argument %d från %qT till %qT" +msgstr " ingen känd konvertering för argument %d frÃ¥n %qT till %qT" #: cp/call.c:3125 cp/pt.c:5560 #, gcc-internal-format, gfc-internal-format msgid " candidate expects %d argument, %d provided" msgid_plural " candidate expects %d arguments, %d provided" -msgstr[0] " kandidaten förväntade sig %d argument, %d fanns" -msgstr[1] " kandidaten förväntade sig %d argument, %d fanns" +msgstr[0] " kandidaten förväntade sig %d argument, %d fanns" +msgstr[1] " kandidaten förväntade sig %d argument, %d fanns" #: cp/call.c:3148 #, gcc-internal-format @@ -25636,7 +25640,7 @@ msgstr "%s%T <konvertering>" #: cp/call.c:3163 #, gcc-internal-format msgid "%s%#D <near match>" -msgstr "%s%#D <nära träff>" +msgstr "%s%#D <nära träff>" #: cp/call.c:3165 #, gcc-internal-format @@ -25665,9 +25669,9 @@ msgstr "" #. Re-run template unification with diagnostics. #: cp/call.c:3208 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " template argument deduction/substitution failed:" -msgstr "mallargument %d är ogiltigt" +msgstr " mallargumentshärledning/-substitution misslyckades:" #: cp/call.c:3227 #, gcc-internal-format @@ -25677,114 +25681,114 @@ msgstr "" #: cp/call.c:3585 #, gcc-internal-format msgid "conversion from %qT to %qT is ambiguous" -msgstr "konvertering från %qT till %qT är tvetydig" +msgstr "konvertering frÃ¥n %qT till %qT är tvetydig" #: cp/call.c:3701 #, gcc-internal-format msgid "conversion from %qT to %qT not considered for non-type template argument" -msgstr "konvertering från %qT till %qT övervägs inte för mallargument som inte är en typ" +msgstr "konvertering frÃ¥n %qT till %qT övervägs inte för mallargument som inte är en typ" #: cp/call.c:3819 #, gcc-internal-format msgid "no matching function for call to %<%D(%A)%>" -msgstr "ingen funktion som stämmer för anrop av %<%D(%A)%>" +msgstr "ingen funktion som stämmer för anrop av %<%D(%A)%>" #: cp/call.c:3822 #, gcc-internal-format msgid "call of overloaded %<%D(%A)%> is ambiguous" -msgstr "anrop av överlagrad %<%D(%A)%> är tvetydigt" +msgstr "anrop av överlagrad %<%D(%A)%> är tvetydigt" #. It's no good looking for an overloaded operator() on a #. pointer-to-member-function. #: cp/call.c:4024 #, gcc-internal-format msgid "pointer-to-member function %E cannot be called without an object; consider using .* or ->*" -msgstr "pekar-på-medlem-funktion %E kan inte anropas utan ett objekt, överväg att använda .* eller ->*" +msgstr "pekar-pÃ¥-medlem-funktion %E kan inte anropas utan ett objekt, överväg att använda .* eller ->*" #: cp/call.c:4096 #, gcc-internal-format msgid "no match for call to %<(%T) (%A)%>" -msgstr "ingen träff för anrop till %<(%T) (%A)%>" +msgstr "ingen träff för anrop till %<(%T) (%A)%>" #: cp/call.c:4109 #, gcc-internal-format msgid "call of %<(%T) (%A)%> is ambiguous" -msgstr "anrop av %<(%T) (%A)%> är tvetydigt" +msgstr "anrop av %<(%T) (%A)%> är tvetydigt" #: cp/call.c:4163 #, gcc-internal-format msgid "ambiguous overload for ternary %<operator?:%> in %<%E ? %E : %E%>" -msgstr "tvetydig överlagring för treställig %<operator?:%> i %<%E ? %E : %E%>" +msgstr "tvetydig överlagring för treställig %<operator?:%> i %<%E ? %E : %E%>" #: cp/call.c:4166 #, gcc-internal-format msgid "no match for ternary %<operator?:%> in %<%E ? %E : %E%>" -msgstr "ingen matchning för treställig %<operator?:%> i %<%E ? %E : %E%>" +msgstr "ingen matchning för treställig %<operator?:%> i %<%E ? %E : %E%>" #: cp/call.c:4173 #, gcc-internal-format msgid "ambiguous overload for %<operator%s%> in %<%E%s%>" -msgstr "tvetydig överlagring för %<operator%s%> i %<%E%s%>" +msgstr "tvetydig överlagring för %<operator%s%> i %<%E%s%>" #: cp/call.c:4176 #, gcc-internal-format msgid "no match for %<operator%s%> in %<%E%s%>" -msgstr "ingen matchning för %<operator%s%> i %<%E%s%>" +msgstr "ingen matchning för %<operator%s%> i %<%E%s%>" #: cp/call.c:4182 #, gcc-internal-format msgid "ambiguous overload for %<operator[]%> in %<%E[%E]%>" -msgstr "tvetydig överlagring för %<operator[]%> i %<%E[%E]%>" +msgstr "tvetydig överlagring för %<operator[]%> i %<%E[%E]%>" #: cp/call.c:4185 #, gcc-internal-format msgid "no match for %<operator[]%> in %<%E[%E]%>" -msgstr "ingen matchning för %<operator[]%> i %<%E[%E]%>" +msgstr "ingen matchning för %<operator[]%> i %<%E[%E]%>" #: cp/call.c:4192 #, gcc-internal-format msgid "ambiguous overload for %qs in %<%s %E%>" -msgstr "tvetydig överlagring för %qs i %<%s %E%>" +msgstr "tvetydig överlagring för %qs i %<%s %E%>" #: cp/call.c:4195 #, gcc-internal-format msgid "no match for %qs in %<%s %E%>" -msgstr "ingen matchning för %qs i %<%s %E%>" +msgstr "ingen matchning för %qs i %<%s %E%>" #: cp/call.c:4202 #, gcc-internal-format msgid "ambiguous overload for %<operator%s%> in %<%E %s %E%>" -msgstr "tvetydig överlagring för %<operator%s%> i %<%E %s %E%>" +msgstr "tvetydig överlagring för %<operator%s%> i %<%E %s %E%>" #: cp/call.c:4205 #, gcc-internal-format msgid "no match for %<operator%s%> in %<%E %s %E%>" -msgstr "ingen matchning för %<operator%s%> i %<%E %s %E%>" +msgstr "ingen matchning för %<operator%s%> i %<%E %s %E%>" #: cp/call.c:4209 #, gcc-internal-format msgid "ambiguous overload for %<operator%s%> in %<%s%E%>" -msgstr "tvetydig överlagring för %<operator%s%> i %<%s%E%>" +msgstr "tvetydig överlagring för %<operator%s%> i %<%s%E%>" #: cp/call.c:4212 #, gcc-internal-format msgid "no match for %<operator%s%> in %<%s%E%>" -msgstr "ingen matchning för %<operator%s%> i %<%s%E%>" +msgstr "ingen matchning för %<operator%s%> i %<%s%E%>" #: cp/call.c:4307 #, gcc-internal-format msgid "ISO C++ forbids omitting the middle term of a ?: expression" -msgstr "ISO C++ förbjuder uteslutande av mittersta termen i ett ?: uttryck" +msgstr "ISO C++ förbjuder uteslutande av mittersta termen i ett ?: uttryck" #: cp/call.c:4396 #, gcc-internal-format msgid "second operand to the conditional operator is of type %<void%>, but the third operand is neither a throw-expression nor of type %<void%>" -msgstr "andra operanden till villkorsoperatorn är av typ %<void%>, men den tredje operanden är varken ett throw-uttryck eller av typ %<void%>" +msgstr "andra operanden till villkorsoperatorn är av typ %<void%>, men den tredje operanden är varken ett throw-uttryck eller av typ %<void%>" #: cp/call.c:4401 #, gcc-internal-format msgid "third operand to the conditional operator is of type %<void%>, but the second operand is neither a throw-expression nor of type %<void%>" -msgstr "tredje operanden till villkorsoperatorn är av typ %<void%>, men den andra operanden är varken ett throw-uttryck eller av typ %<void%>" +msgstr "tredje operanden till villkorsoperatorn är av typ %<void%>, men den andra operanden är varken ett throw-uttryck eller av typ %<void%>" #: cp/call.c:4443 cp/call.c:4687 #, gcc-internal-format @@ -25794,27 +25798,27 @@ msgstr "operander till ?: har olika typer %qT och %qT" #: cp/call.c:4634 #, gcc-internal-format msgid "enumeral mismatch in conditional expression: %qT vs %qT" -msgstr "uppräkningsmissmatch i villkorsuttryck: %qT kontra %qT" +msgstr "uppräkningsmissmatch i villkorsuttryck: %qT kontra %qT" #: cp/call.c:4645 #, gcc-internal-format msgid "enumeral and non-enumeral type in conditional expression" -msgstr "uppräknings- och inte uppräkningstyp i villkorsuttryck" +msgstr "uppräknings- och inte uppräkningstyp i villkorsuttryck" #: cp/call.c:5034 #, gcc-internal-format msgid "no %<%D(int)%> declared for postfix %qs, trying prefix operator instead" -msgstr "ingen %<%D(int)%> deklarerad för postfix %qs, försöker med prefixoperator istället" +msgstr "ingen %<%D(int)%> deklarerad för postfix %qs, försöker med prefixoperator istället" #: cp/call.c:5036 #, gcc-internal-format msgid "no %<%D(int)%> declared for postfix %qs" -msgstr "ingen %<%D(int)%> deklarerad för postfix %qs" +msgstr "ingen %<%D(int)%> deklarerad för postfix %qs" #: cp/call.c:5130 #, gcc-internal-format msgid "comparison between %q#T and %q#T" -msgstr "jämförelse mellan %q#T och %q#T" +msgstr "jämförelse mellan %q#T och %q#T" #: cp/call.c:5384 #, gcc-internal-format @@ -25824,32 +25828,32 @@ msgstr "avallokeringsfunktion utan placering %q+D" #: cp/call.c:5385 #, gcc-internal-format msgid "selected for placement delete" -msgstr "vald för placerad delete" +msgstr "vald för placerad delete" #: cp/call.c:5464 #, gcc-internal-format msgid "no corresponding deallocation function for %qD" -msgstr "ingen motsvarande avallokeringsfunktion för %qD" +msgstr "ingen motsvarande avallokeringsfunktion för %qD" #: cp/call.c:5469 #, gcc-internal-format msgid "no suitable %<operator %s%> for %qT" -msgstr "ingen passande %<operator %s%> för %qT" +msgstr "ingen passande %<operator %s%> för %qT" #: cp/call.c:5487 #, gcc-internal-format msgid "%q+#D is private" -msgstr "%q+#D är privat" +msgstr "%q+#D är privat" #: cp/call.c:5489 #, gcc-internal-format msgid "%q+#D is protected" -msgstr "%q+#D är skyddad" +msgstr "%q+#D är skyddad" #: cp/call.c:5491 #, gcc-internal-format msgid "%q+#D is inaccessible" -msgstr "%q+#D är oåtkomlig" +msgstr "%q+#D är oÃ¥tkomlig" #: cp/call.c:5492 #, gcc-internal-format @@ -25864,32 +25868,32 @@ msgstr "skickar NULL till icke-pekarargument %P till %qD" #: cp/call.c:5543 #, gcc-internal-format msgid "converting to non-pointer type %qT from NULL" -msgstr "konverterar till icke-pekartyp %qT från NULL" +msgstr "konverterar till icke-pekartyp %qT frÃ¥n NULL" #: cp/call.c:5552 #, gcc-internal-format msgid "converting %<false%> to pointer type for argument %P of %qD" -msgstr "konverterar %<false%> till pekartyp för argument %P till %qD" +msgstr "konverterar %<false%> till pekartyp för argument %P till %qD" #: cp/call.c:5556 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "converting %<false%> to pointer type %qT" -msgstr "konverterar %<false%> till pekartyp för argument %P till %qD" +msgstr "konverterar %<false%> till pekartyp %qT" #: cp/call.c:5598 #, gcc-internal-format msgid "too many braces around initializer for %qT" -msgstr "för många klamrar runt initierare för %qT" +msgstr "för mÃ¥nga klamrar runt initierare för %qT" #: cp/call.c:5604 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid user-defined conversion from %qT to %qT" -msgstr "ogiltig konvertering från %qT till %qT" +msgstr "ogiltig användardefinierad konvertering frÃ¥n %qT till %qT" #: cp/call.c:5634 cp/cvt.c:223 #, gcc-internal-format msgid "invalid conversion from %qT to %qT" -msgstr "ogiltig konvertering från %qT till %qT" +msgstr "ogiltig konvertering frÃ¥n %qT till %qT" #: cp/call.c:5638 cp/call.c:5850 #, gcc-internal-format @@ -25899,7 +25903,7 @@ msgstr " initierar argument %P till %qD" #: cp/call.c:5682 #, gcc-internal-format msgid "converting to %qT from initializer list would use explicit constructor %qD" -msgstr "att konvertera till %qT från initierarlista skulle använda den explicita konstrueraren %qD" +msgstr "att konvertera till %qT frÃ¥n initierarlista skulle använda den explicita konstrueraren %qD" #: cp/call.c:5743 cp/call.c:5865 #, gcc-internal-format @@ -25909,53 +25913,53 @@ msgstr " initierar argument %P till %q+D" #: cp/call.c:5862 #, gcc-internal-format msgid "cannot bind %qT lvalue to %qT" -msgstr "det går inte att binda l-värde %qT till %qT" +msgstr "det gÃ¥r inte att binda l-värde %qT till %qT" #: cp/call.c:5894 #, gcc-internal-format msgid "cannot bind bitfield %qE to %qT" -msgstr "det går inte att binda bitfält %qE till %qT" +msgstr "det gÃ¥r inte att binda bitfält %qE till %qT" #: cp/call.c:5897 cp/call.c:5913 #, gcc-internal-format msgid "cannot bind packed field %qE to %qT" -msgstr "det går inte att binda packat fält %qE till %qT" +msgstr "det gÃ¥r inte att binda packat fält %qE till %qT" #: cp/call.c:5900 #, gcc-internal-format msgid "cannot bind rvalue %qE to %qT" -msgstr "det går inte att binda rvalue %qE till %qT" +msgstr "det gÃ¥r inte att binda rvalue %qE till %qT" #: cp/call.c:6012 cp/cvt.c:1643 #, gcc-internal-format msgid "scoped enum %qT will not promote to an integral type in a future version of GCC" -msgstr "enum %qT med räckvidd kommer inte befordras till en heltalstyp i en framtida version av GCC" +msgstr "enum %qT med räckvidd kommer inte befordras till en heltalstyp i en framtida version av GCC" #: cp/call.c:6047 #, gcc-internal-format msgid "cannot pass objects of non-trivially-copyable type %q#T through %<...%>" -msgstr "det går inte att skicka objekt av ej trivialt kopierbar typ %q#T via %<...%>" +msgstr "det gÃ¥r inte att skicka objekt av ej trivialt kopierbar typ %q#T via %<...%>" #. conditionally-supported behavior [expr.call] 5.2.2/7. #: cp/call.c:6076 #, gcc-internal-format msgid "cannot receive objects of non-trivially-copyable type %q#T through %<...%>; " -msgstr "det går inte att ta emot objekt av ej trivialt kopierbar typ %q#T via %<...%>" +msgstr "det gÃ¥r inte att ta emot objekt av ej trivialt kopierbar typ %q#T via %<...%>" #: cp/call.c:6132 #, gcc-internal-format msgid "recursive evaluation of default argument for %q#D" -msgstr "rekursiv beräkning av standardargument till %q#D" +msgstr "rekursiv beräkning av standardargument till %q#D" #: cp/call.c:6140 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "call to %qD uses the default argument for parameter %P, which is not yet defined" -msgstr "standardargumentet för parameter %d till %qD har inte parsats än" +msgstr "anrop till %qD använder standardargumentet för parameter %P, vilket inte definierats ännu" #: cp/call.c:6253 #, gcc-internal-format msgid "argument of function call might be a candidate for a format attribute" -msgstr "argument till funktionsanrop kan vara en kandidat för ett formatattribut" +msgstr "argument till funktionsanrop kan vara en kandidat för ett formatattribut" #: cp/call.c:6461 #, gcc-internal-format @@ -25965,12 +25969,12 @@ msgstr "att skicka %qT som %<this%>-argument till %q#D kastar kvalificerare" #: cp/call.c:6483 #, gcc-internal-format msgid "%qT is not an accessible base of %qT" -msgstr "%qT är inte en åtkomlig bas till %qT" +msgstr "%qT är inte en Ã¥tkomlig bas till %qT" #: cp/call.c:6561 #, gcc-internal-format msgid "deducing %qT as %qT" -msgstr "härleder %qT som %qT" +msgstr "härleder %qT som %qT" #: cp/call.c:6564 #, gcc-internal-format @@ -25985,7 +25989,7 @@ msgstr " (du kan avaktivera detta med -fno-deduce-init-list)" #: cp/call.c:6832 #, gcc-internal-format msgid "could not find class$ field in java interface type %qT" -msgstr "kunde inte hitta class$-fält i java-gränssnittstyp %qT" +msgstr "kunde inte hitta class$-fält i java-gränssnittstyp %qT" #: cp/call.c:7091 #, gcc-internal-format @@ -26000,32 +26004,32 @@ msgstr "kan inte anropa konstrueraren %<%T::%D%> direkt" #: cp/call.c:7138 #, gcc-internal-format msgid " for a function-style cast, remove the redundant %<::%D%>" -msgstr " för en typkonvertering i funktionsstil, ta bort det överflödiga %<::%D%>" +msgstr " för en typkonvertering i funktionsstil, ta bort det överflödiga %<::%D%>" #: cp/call.c:7251 #, gcc-internal-format msgid "no matching function for call to %<%T::operator %T(%A)%#V%>" -msgstr "ingen matchande funktion för anrop av %<%T::operator %T(%A)%#V%>" +msgstr "ingen matchande funktion för anrop av %<%T::operator %T(%A)%#V%>" #: cp/call.c:7264 #, gcc-internal-format msgid "no matching function for call to %<%T::%s(%A)%#V%>" -msgstr "ingen matchande funktion för anrop av %<%T::%s(%A)%#V%>" +msgstr "ingen matchande funktion för anrop av %<%T::%s(%A)%#V%>" #: cp/call.c:7289 #, gcc-internal-format msgid "call of overloaded %<%s(%A)%> is ambiguous" -msgstr "anrop av överlagrad %<%s(%A)%> är tvetydigt" +msgstr "anrop av överlagrad %<%s(%A)%> är tvetydigt" #: cp/call.c:7318 #, gcc-internal-format msgid "cannot call member function %qD without object" -msgstr "det går inte att anropa medlemsfunktion %qD utan ett objekt" +msgstr "det gÃ¥r inte att anropa medlemsfunktion %qD utan ett objekt" #: cp/call.c:8053 #, gcc-internal-format msgid "passing %qT chooses %qT over %qT" -msgstr "att skicka %qT väljer %qT framför %qT" +msgstr "att skicka %qT väljer %qT framför %qT" #: cp/call.c:8055 cp/name-lookup.c:5488 #, gcc-internal-format @@ -26035,22 +26039,22 @@ msgstr " i anrop till %qD" #: cp/call.c:8112 #, gcc-internal-format msgid "choosing %qD over %qD" -msgstr "väljer %qD framför %qD" +msgstr "väljer %qD framför %qD" #: cp/call.c:8113 #, gcc-internal-format msgid " for conversion from %qT to %qT" -msgstr " för konvertering från %qT till %qT" +msgstr " för konvertering frÃ¥n %qT till %qT" #: cp/call.c:8116 #, gcc-internal-format msgid " because conversion sequence for the argument is better" -msgstr " för att konverteringssekvensen för argumentet är bättre" +msgstr " för att konverteringssekvensen för argumentet är bättre" #: cp/call.c:8235 #, gcc-internal-format msgid "default argument mismatch in overload resolution" -msgstr "standardargument stämmer inte överens i upplösning av överlagring" +msgstr "standardargument stämmer inte överens i upplösning av överlagring" #: cp/call.c:8238 #, gcc-internal-format @@ -26065,12 +26069,12 @@ msgstr " kandidat 2: %q+#F" #: cp/call.c:8281 #, gcc-internal-format msgid "ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:" -msgstr "ISO C++ säger att dessa är tvetydiga, trots att den sämsta konverteringen för den första är bättre än den sämsta konverteringen för den andra:" +msgstr "ISO C++ säger att dessa är tvetydiga, trots att den sämsta konverteringen för den första är bättre än den sämsta konverteringen för den andra:" #: cp/call.c:8434 #, gcc-internal-format msgid "could not convert %qE from %qT to %qT" -msgstr "kunde inte konvertera %qE från %qT till %qT" +msgstr "kunde inte konvertera %qE frÃ¥n %qT till %qT" #: cp/call.c:8624 #, gcc-internal-format @@ -26080,17 +26084,17 @@ msgstr "" #: cp/call.c:8730 #, gcc-internal-format msgid "invalid initialization of non-const reference of type %qT from an rvalue of type %qT" -msgstr "ogiltig initiering av icke konstant referens av typ %qT från ett r-värde av typ %qT" +msgstr "ogiltig initiering av icke konstant referens av typ %qT frÃ¥n ett r-värde av typ %qT" #: cp/call.c:8734 #, gcc-internal-format msgid "invalid initialization of reference of type %qT from expression of type %qT" -msgstr "ogiltig initiering av referens av typ %qT från uttryck av typ %qT" +msgstr "ogiltig initiering av referens av typ %qT frÃ¥n uttryck av typ %qT" #: cp/class.c:296 #, gcc-internal-format msgid "cannot convert from base %qT to derived type %qT via virtual base %qT" -msgstr "kan inte konvertera från basen %qT till härledd typ %qT via virtuell bas %qT" +msgstr "kan inte konvertera frÃ¥n basen %qT till härledd typ %qT via virtuell bas %qT" #: cp/class.c:998 #, gcc-internal-format @@ -26105,7 +26109,7 @@ msgstr "Javaklass %qT kan inte ha en implicit icketrivial destruerare" #: cp/class.c:1103 #, gcc-internal-format msgid "%q+#D cannot be overloaded" -msgstr "%q+#D kan inte överlagras" +msgstr "%q+#D kan inte överlagras" #: cp/class.c:1104 #, gcc-internal-format @@ -26115,12 +26119,12 @@ msgstr "med %q+#D" #: cp/class.c:1173 #, gcc-internal-format msgid "conflicting access specifications for method %q+D, ignored" -msgstr "åtkomstspecifikationer i konflikt för metod %q+D, ignoreras" +msgstr "Ã¥tkomstspecifikationer i konflikt för metod %q+D, ignoreras" #: cp/class.c:1176 #, gcc-internal-format msgid "conflicting access specifications for field %qE, ignored" -msgstr "åtkomstspecifikationer i konflikt för fält %qE, ignoreras" +msgstr "Ã¥tkomstspecifikationer i konflikt för fält %qE, ignoreras" #: cp/class.c:1238 cp/class.c:1246 #, gcc-internal-format @@ -26130,17 +26134,17 @@ msgstr "%q+D ogiltig i %q#T" #: cp/class.c:1239 #, gcc-internal-format msgid " because of local method %q+#D with same name" -msgstr " på grund av lokal metod %q+#D med samma namn" +msgstr " pÃ¥ grund av lokal metod %q+#D med samma namn" #: cp/class.c:1247 #, gcc-internal-format msgid " because of local member %q+#D with same name" -msgstr " på grund av lokal medlem %q+#D med samma namn" +msgstr " pÃ¥ grund av lokal medlem %q+#D med samma namn" #: cp/class.c:1291 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot derive from %<final%> base %qT in derived type %qT" -msgstr "kan inte konvertera från basen %qT till härledd typ %qT via virtuell bas %qT" +msgstr "kan inte härleda frÃ¥n %<final%> bas %qT i härledd typ %qT" #: cp/class.c:1303 #, gcc-internal-format @@ -26150,27 +26154,27 @@ msgstr "basklass %q#T har en icke-virtuell destruerare" #: cp/class.c:1707 #, gcc-internal-format msgid "all member functions in class %qT are private" -msgstr "alla medlemsfunktioner i klass %qT är privata" +msgstr "alla medlemsfunktioner i klass %qT är privata" #: cp/class.c:1719 #, gcc-internal-format msgid "%q#T only defines a private destructor and has no friends" -msgstr "%q#T definierar bara en privat destruerare och har inga vänner" +msgstr "%q#T definierar bara en privat destruerare och har inga vänner" #: cp/class.c:1764 #, gcc-internal-format msgid "%q#T only defines private constructors and has no friends" -msgstr "%q#T definierar bara privata konstruerare och har inga vänner" +msgstr "%q#T definierar bara privata konstruerare och har inga vänner" #: cp/class.c:2157 #, gcc-internal-format msgid "no unique final overrider for %qD in %qT" -msgstr "ingen unik slutlig ersättare för %qD i %qT" +msgstr "ingen unik slutlig ersättare för %qD i %qT" #: cp/class.c:2524 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q+#D marked final, but is not virtual" -msgstr "%q+D är definierad men inte använd" +msgstr "%q+#D är markerad final, men inte virtual" #: cp/class.c:2526 #, gcc-internal-format @@ -26221,87 +26225,87 @@ msgstr "skyddad medlem %q+#D i anonym post" #: cp/class.c:2887 #, gcc-internal-format msgid "bit-field %q+#D with non-integral type" -msgstr "bitfält %q+#D har en icke-heltalstyp" +msgstr "bitfält %q+#D har en icke-heltalstyp" #: cp/class.c:2903 #, gcc-internal-format msgid "bit-field %q+D width not an integer constant" -msgstr "bredd för bitfältet %q+D inte en heltalskonstant" +msgstr "bredd för bitfältet %q+D inte en heltalskonstant" #: cp/class.c:2908 #, gcc-internal-format msgid "negative width in bit-field %q+D" -msgstr "negativ bredd i bitfält %q+D" +msgstr "negativ bredd i bitfält %q+D" #: cp/class.c:2913 #, gcc-internal-format msgid "zero width for bit-field %q+D" -msgstr "noll i bredd i bitfält %q+D" +msgstr "noll i bredd i bitfält %q+D" #: cp/class.c:2919 #, gcc-internal-format msgid "width of %q+D exceeds its type" -msgstr "bredd på %q+D är större än dess typ" +msgstr "bredd pÃ¥ %q+D är större än dess typ" #: cp/class.c:2923 #, gcc-internal-format msgid "%q+D is too small to hold all values of %q#T" -msgstr "%q+D är för liten för att få plats med alla värden hos %q#T" +msgstr "%q+D är för liten för att fÃ¥ plats med alla värden hos %q#T" #: cp/class.c:2982 #, gcc-internal-format msgid "member %q+#D with constructor not allowed in union" -msgstr "medlem %q+#D med konstruerare inte tillåten i union" +msgstr "medlem %q+#D med konstruerare inte tillÃ¥ten i union" #: cp/class.c:2985 #, gcc-internal-format msgid "member %q+#D with destructor not allowed in union" -msgstr "medlem %q+#D med destruerare inte tillåten i union" +msgstr "medlem %q+#D med destruerare inte tillÃ¥ten i union" #: cp/class.c:2987 #, gcc-internal-format msgid "member %q+#D with copy assignment operator not allowed in union" -msgstr "medlem %q+#D med kopieringstilldelningsoperator inte tillåten i union" +msgstr "medlem %q+#D med kopieringstilldelningsoperator inte tillÃ¥ten i union" #: cp/class.c:2991 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unrestricted unions only available with -std=c++11 or -std=gnu++11" -msgstr "obegränsade unioner är endast tillgängliga med -std=c++0x eller -std=gnu++0x" +msgstr "obegränsade unioner är endast tillgängliga med -std=c++11 eller -std=gnu++11" #: cp/class.c:3025 #, gcc-internal-format msgid "multiple fields in union %qT initialized" -msgstr "flera fält i unionen %qT initierade" +msgstr "flera fält i unionen %qT initierade" #: cp/class.c:3109 #, gcc-internal-format msgid "%q+D may not be static because it is a member of a union" -msgstr "%q+D får inte vara statisk eftersom den är medlem av en union" +msgstr "%q+D fÃ¥r inte vara statisk eftersom den är medlem av en union" #: cp/class.c:3114 #, gcc-internal-format msgid "%q+D may not have reference type %qT because it is a member of a union" -msgstr "%q+D får inte ha referenstyp %qT eftersom den är en medlen av en union" +msgstr "%q+D fÃ¥r inte ha referenstyp %qT eftersom den är en medlen av en union" #: cp/class.c:3125 #, gcc-internal-format msgid "field %q+D invalidly declared function type" -msgstr "fält %q+D ogiltigt deklarerad funktionstyp" +msgstr "fält %q+D ogiltigt deklarerad funktionstyp" #: cp/class.c:3131 #, gcc-internal-format msgid "field %q+D invalidly declared method type" -msgstr "fält %q+D ogiltigt deklarerad metodtyp" +msgstr "fält %q+D ogiltigt deklarerad metodtyp" #: cp/class.c:3186 #, gcc-internal-format msgid "ignoring packed attribute because of unpacked non-POD field %q+#D" -msgstr "ignorerar attributet packed på grund av opackat icke-POD-fält %q+#D" +msgstr "ignorerar attributet packed pÃ¥ grund av opackat icke-POD-fält %q+#D" #: cp/class.c:3284 #, gcc-internal-format msgid "field %q+#D with same name as class" -msgstr "fält %q+#D med samma namn som en klass" +msgstr "fält %q+#D med samma namn som en klass" #: cp/class.c:3307 #, gcc-internal-format @@ -26311,7 +26315,7 @@ msgstr "%q#T har pekardatamedlemmar" #: cp/class.c:3312 #, gcc-internal-format msgid " but does not override %<%T(const %T&)%>" -msgstr " men ersätter inte %<%T(const %T&)%>" +msgstr " men ersätter inte %<%T(const %T&)%>" #: cp/class.c:3314 #, gcc-internal-format @@ -26321,22 +26325,22 @@ msgstr " eller %<operator=(const %T&)%>" #: cp/class.c:3318 #, gcc-internal-format msgid " but does not override %<operator=(const %T&)%>" -msgstr " men ersätter inte %<operator=(const %T&)%>" +msgstr " men ersätter inte %<operator=(const %T&)%>" #: cp/class.c:3789 #, gcc-internal-format msgid "offset of empty base %qT may not be ABI-compliant and maychange in a future version of GCC" -msgstr "förskjutning av tom bas %qT följer kanske inte ABI:et och kan ändras i en framtida version av GCC" +msgstr "förskjutning av tom bas %qT följer kanske inte ABI:et och kan ändras i en framtida version av GCC" #: cp/class.c:3916 #, gcc-internal-format msgid "class %qT will be considered nearly empty in a future version of GCC" -msgstr "klass %qT kommer betraktas som nästan tom i en framtida version av GCC" +msgstr "klass %qT kommer betraktas som nästan tom i en framtida version av GCC" #: cp/class.c:3998 #, gcc-internal-format msgid "initializer specified for non-virtual method %q+D" -msgstr "initierare angiven för icke-virtuell metod %q+D" +msgstr "initierare angiven för icke-virtuell metod %q+D" #: cp/class.c:4389 #, gcc-internal-format @@ -26349,19 +26353,19 @@ msgid "method declared %qE overriding %qE method" msgstr "" #: cp/class.c:4876 cp/semantics.c:5732 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "enclosing class of constexpr non-static member function %q+#D is not a literal type" -msgstr "omslutande klass till %q+#D är inte en literal typ" +msgstr "omslutande klass till constexpr icke-statisk medlemsfunktion %q+#D är inte en literal typ" #: cp/class.c:4901 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q+T is not literal because:" -msgstr "%q#T är inte en klass" +msgstr "%q+T är inte literal för att:" #: cp/class.c:4903 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " %q+T has a non-trivial destructor" -msgstr "basklass %q#T har en icke-virtuell destruerare" +msgstr " %q+T har en icke-trivial destruerare" #: cp/class.c:4908 #, gcc-internal-format @@ -26369,14 +26373,14 @@ msgid " %q+T is not an aggregate, does not have a trivial default constructor, msgstr "" #: cp/class.c:4924 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " base class %qT of %q+T is non-literal" -msgstr "omslutande klass till %q+#D är inte en literal typ" +msgstr " basklassen %qT till %q+T är inte literal" #: cp/class.c:4938 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " non-static data member %q+D has non-literal type" -msgstr "icke-statisk datamedlem %qD har Javaklasstyp" +msgstr " den icke-statiska datamedlemmen %q+D har icke-literal typ" #: cp/class.c:5050 #, gcc-internal-format @@ -26398,47 +26402,47 @@ msgstr "%q+D deklarerad att ta const-referens, men implicit deklaration skulle t #: cp/class.c:5084 #, gcc-internal-format msgid "%q+D declared to take non-const reference cannot be defaulted in the class body" -msgstr "%q+D deklarerad att ta icke-const-referens kan inte få standardvärde i klasskroppen" +msgstr "%q+D deklarerad att ta icke-const-referens kan inte fÃ¥ standardvärde i klasskroppen" #: cp/class.c:5308 #, gcc-internal-format msgid "offset of virtual base %qT is not ABI-compliant and may change in a future version of GCC" -msgstr "förskjutning av virtuell bas %qT följer inte ABI:et och kan ändras i en framtida version av GCC" +msgstr "förskjutning av virtuell bas %qT följer inte ABI:et och kan ändras i en framtida version av GCC" #: cp/class.c:5409 #, gcc-internal-format msgid "direct base %qT inaccessible in %qT due to ambiguity" -msgstr "direkt bas %qT är oåtkomlig i %qT på grund av tvetydighet" +msgstr "direkt bas %qT är oÃ¥tkomlig i %qT pÃ¥ grund av tvetydighet" #: cp/class.c:5421 #, gcc-internal-format msgid "virtual base %qT inaccessible in %qT due to ambiguity" -msgstr "virtuell bas %qT är oåtkomlig i %qT på grund av tvetydighet" +msgstr "virtuell bas %qT är oÃ¥tkomlig i %qT pÃ¥ grund av tvetydighet" #: cp/class.c:5607 #, gcc-internal-format msgid "size assigned to %qT may not be ABI-compliant and may change in a future version of GCC" -msgstr "storlek tilldelad till %qT följer kanske inte ABI:et och kan ändras i en framtida version av GCC" +msgstr "storlek tilldelad till %qT följer kanske inte ABI:et och kan ändras i en framtida version av GCC" #: cp/class.c:5647 #, gcc-internal-format msgid "the offset of %qD may not be ABI-compliant and may change in a future version of GCC" -msgstr "förskjutningen för %qD följer kanske inte ABI:et och kan ändras i en framtida version av GCC" +msgstr "förskjutningen för %qD följer kanske inte ABI:et och kan ändras i en framtida version av GCC" #: cp/class.c:5675 #, gcc-internal-format msgid "offset of %q+D is not ABI-compliant and may change in a future version of GCC" -msgstr "förskjutningen av %q+D följer inte ABI:et och kan ändras i en framtida version av GCC" +msgstr "förskjutningen av %q+D följer inte ABI:et och kan ändras i en framtida version av GCC" #: cp/class.c:5685 #, gcc-internal-format msgid "%q+D contains empty classes which may cause base classes to be placed at different locations in a future version of GCC" -msgstr "%q+D innehåller tomma klasser som kan få grundklasser att läggas på annan plats i en framtida version av GCC" +msgstr "%q+D innehÃ¥ller tomma klasser som kan fÃ¥ grundklasser att läggas pÃ¥ annan plats i en framtida version av GCC" #: cp/class.c:5773 #, gcc-internal-format msgid "layout of classes derived from empty class %qT may change in a future version of GCC" -msgstr "utplaceringen av klasser härledda från en tom klass %qT kan ändras i en framtida version av GCC" +msgstr "utplaceringen av klasser härledda frÃ¥n en tom klass %qT kan ändras i en framtida version av GCC" #: cp/class.c:5942 cp/decl.c:11802 cp/parser.c:18577 #, gcc-internal-format @@ -26448,12 +26452,12 @@ msgstr "omdefinition av %q#T" #: cp/class.c:6093 #, gcc-internal-format msgid "%q#T has virtual functions and accessible non-virtual destructor" -msgstr "%q#T har virtuella funktioner och åtkomlig ickevirtuell destruerare" +msgstr "%q#T har virtuella funktioner och Ã¥tkomlig ickevirtuell destruerare" #: cp/class.c:6119 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "type transparent class %qT does not have any fields" -msgstr "klass %qT har inget fält med namnet %qD" +msgstr "den typgenomskinliga klassen %qT har inga fält" #: cp/class.c:6125 #, gcc-internal-format @@ -26461,24 +26465,24 @@ msgid "type transparent class %qT has base classes" msgstr "" #: cp/class.c:6129 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "type transparent class %qT has virtual functions" -msgstr "typen %qE har virtuella medlemsfunktioner" +msgstr "den typgenomskinliga klassen %qT har virtuella funktioner" #: cp/class.c:6231 #, gcc-internal-format msgid "trying to finish struct, but kicked out due to previous parse errors" -msgstr "försökte avsluta post, men hoppade ut på grund av tidigare parsningsfel" +msgstr "försökte avsluta post, men hoppade ut pÃ¥ grund av tidigare parsningsfel" #: cp/class.c:6737 #, gcc-internal-format msgid "language string %<\"%E\"%> not recognized" -msgstr "språksträng %<\"%E\"%> känns inte igen" +msgstr "sprÃ¥ksträng %<â€%Eâ€%> känns inte igen" #: cp/class.c:6827 #, gcc-internal-format msgid "cannot resolve overloaded function %qD based on conversion to type %qT" -msgstr "det går inte att lösa upp överlagrad funktion %qD baserat på konvertering till typ %qT" +msgstr "det gÃ¥r inte att lösa upp överlagrad funktion %qD baserat pÃ¥ konvertering till typ %qT" #: cp/class.c:6951 #, gcc-internal-format @@ -26488,7 +26492,7 @@ msgstr "ingen match som konverterar funktionen %qD till typen %q#T" #: cp/class.c:6974 #, gcc-internal-format msgid "converting overloaded function %qD to type %q#T is ambiguous" -msgstr "konvertering av överlagrad funktion %qD till typ %q#T är tvetydig" +msgstr "konvertering av överlagrad funktion %qD till typ %q#T är tvetydig" #: cp/class.c:7001 #, gcc-internal-format @@ -26498,17 +26502,17 @@ msgstr "antar pekare till medlem %qD" #: cp/class.c:7004 #, gcc-internal-format msgid "(a pointer to member can only be formed with %<&%E%>)" -msgstr "(en pekare på medlem kan bara skapas med %<&%E%>)" +msgstr "(en pekare pÃ¥ medlem kan bara skapas med %<&%E%>)" #: cp/class.c:7066 cp/class.c:7100 #, gcc-internal-format msgid "not enough type information" -msgstr "inte tillräcklig typinformation" +msgstr "inte tillräcklig typinformation" #: cp/class.c:7083 cp/cvt.c:169 cp/cvt.c:194 cp/cvt.c:244 #, gcc-internal-format msgid "cannot convert %qE from type %qT to type %qT" -msgstr "kan inte konvertera %qE från typ %qT till typ %qT" +msgstr "kan inte konvertera %qE frÃ¥n typ %qT till typ %qT" #. [basic.scope.class] #. @@ -26523,52 +26527,52 @@ msgstr "deklaration av %q#D" #: cp/class.c:7395 #, gcc-internal-format msgid "changes meaning of %qD from %q+#D" -msgstr "byter betydelse av %qD från %q+#D" +msgstr "byter betydelse av %qD frÃ¥n %q+#D" #: cp/cp-gimplify.c:1446 #, gcc-internal-format msgid "%qE implicitly determined as %<firstprivate%> has reference type" -msgstr "%qE som implicit bestämts som %<firstprivate%> har referenstyp" +msgstr "%qE som implicit bestämts som %<firstprivate%> har referenstyp" #: cp/cvt.c:90 #, gcc-internal-format msgid "can%'t convert from incomplete type %qT to %qT" -msgstr "det går inte att konvertera från ofullständig typ %qT till %qT" +msgstr "det gÃ¥r inte att konvertera frÃ¥n ofullständig typ %qT till %qT" #: cp/cvt.c:99 #, gcc-internal-format msgid "conversion of %qE from %qT to %qT is ambiguous" -msgstr "konvertering av %qE från %qT till %qT är tvetydig" +msgstr "konvertering av %qE frÃ¥n %qT till %qT är tvetydig" #: cp/cvt.c:204 cp/typeck.c:4088 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "zero as null pointer constant" -msgstr "vektorgräns är inte en heltalskonstant" +msgstr "noll som en nollpekarkonstant" #: cp/cvt.c:378 #, gcc-internal-format msgid "initialization of volatile reference type %q#T from rvalue of type %qT" -msgstr "initiering av volatile referens av typ %q#T från ett r-värde av typ %qT" +msgstr "initiering av volatile referens av typ %q#T frÃ¥n ett r-värde av typ %qT" #: cp/cvt.c:381 #, gcc-internal-format msgid "conversion to volatile reference type %q#T from rvalue of type %qT" -msgstr "konvertering till volatile referens av typ %q#T från ett r-värde av typ %qT" +msgstr "konvertering till volatile referens av typ %q#T frÃ¥n ett r-värde av typ %qT" #: cp/cvt.c:384 #, gcc-internal-format msgid "initialization of non-const reference type %q#T from rvalue of type %qT" -msgstr "initiering av icke konstant referens av typ %q#T från ett r-värde av typ %qT" +msgstr "initiering av icke konstant referens av typ %q#T frÃ¥n ett r-värde av typ %qT" #: cp/cvt.c:387 #, gcc-internal-format msgid "conversion to non-const reference type %q#T from rvalue of type %qT" -msgstr "konvertering till icke konstant referens av typ %q#T från ett r-värde av typ %qT" +msgstr "konvertering till icke konstant referens av typ %q#T frÃ¥n ett r-värde av typ %qT" #: cp/cvt.c:460 #, gcc-internal-format msgid "conversion from %qT to %qT discards qualifiers" -msgstr "konvertering från %qT till %qT kastar kvalificerare" +msgstr "konvertering frÃ¥n %qT till %qT kastar kvalificerare" #: cp/cvt.c:478 cp/typeck.c:6169 #, gcc-internal-format @@ -26583,27 +26587,27 @@ msgstr "kan inte konvertera typ %qT till typ %qT" #: cp/cvt.c:712 #, gcc-internal-format msgid "conversion from %q#T to %q#T" -msgstr "konvertering från %q#T till %q#T" +msgstr "konvertering frÃ¥n %q#T till %q#T" #: cp/cvt.c:728 #, gcc-internal-format msgid "the result of the conversion is unspecified because %qE is outside the range of type %qT" -msgstr "resultatet av konverteringen är odefinierad eftersom %qE är utanför intervallet för typen %qT" +msgstr "resultatet av konverteringen är odefinierad eftersom %qE är utanför intervallet för typen %qT" #: cp/cvt.c:739 cp/cvt.c:770 #, gcc-internal-format msgid "%q#T used where a %qT was expected" -msgstr "%q#T använt där %qT förväntades" +msgstr "%q#T använt där %qT förväntades" #: cp/cvt.c:785 #, gcc-internal-format msgid "%q#T used where a floating point value was expected" -msgstr "%q#T använt där ett flyttalsvärde förväntades" +msgstr "%q#T använt där ett flyttalsvärde förväntades" #: cp/cvt.c:845 #, gcc-internal-format msgid "conversion from %qT to non-scalar type %qT requested" -msgstr "konvertering från %qT till icke-skalär typ %qT begärd" +msgstr "konvertering frÃ¥n %qT till icke-skalär typ %qT begärd" #: cp/cvt.c:903 #, gcc-internal-format @@ -26613,207 +26617,207 @@ msgstr "pseudodestruerare anropas inte" #: cp/cvt.c:980 #, gcc-internal-format msgid "conversion to void will not access object of incomplete type %qT" -msgstr "konvertering till void kommer inte använda objekt av ofullständig typ %qT" +msgstr "konvertering till void kommer inte använda objekt av ofullständig typ %qT" #: cp/cvt.c:984 #, gcc-internal-format msgid "indirection will not access object of incomplete type %qT in second operand of conditional expression" -msgstr "indirektion kommer inte att använda objekt med ofullständig typ %qT i andra operanden av villkorligt uttryck" +msgstr "indirektion kommer inte att använda objekt med ofullständig typ %qT i andra operanden av villkorligt uttryck" #: cp/cvt.c:989 #, gcc-internal-format msgid "indirection will not access object of incomplete type %qT in third operand of conditional expression" -msgstr "indirektion kommer inte att använda objekt av ofullständig typ %qT i tredje operand till villkorligt uttryck" +msgstr "indirektion kommer inte att använda objekt av ofullständig typ %qT i tredje operand till villkorligt uttryck" #: cp/cvt.c:994 #, gcc-internal-format msgid "indirection will not access object of incomplete type %qT in right operand of comma operator" -msgstr "indirektion kommer inte att använda objekt av ofullständig typ %qT i högeroperanden till kommaoperatorn" +msgstr "indirektion kommer inte att använda objekt av ofullständig typ %qT i högeroperanden till kommaoperatorn" #: cp/cvt.c:999 #, gcc-internal-format msgid "indirection will not access object of incomplete type %qT in left operand of comma operator" -msgstr "indirektion kommer inte att använda objekt av ofullständig typ %qT i vänstra operand av kommaoperatorn" +msgstr "indirektion kommer inte att använda objekt av ofullständig typ %qT i vänstra operand av kommaoperatorn" #: cp/cvt.c:1004 #, gcc-internal-format msgid "indirection will not access object of incomplete type %qT in statement" -msgstr "indirektion kommer inte att använda objekt av ofullständig typ %qT i sats" +msgstr "indirektion kommer inte att använda objekt av ofullständig typ %qT i sats" #: cp/cvt.c:1008 #, gcc-internal-format msgid "indirection will not access object of incomplete type %qT in for increment expression" -msgstr "indirektion kommer inte att använda objekt av ofullständig typ %qT i ökningsuttryck" +msgstr "indirektion kommer inte att använda objekt av ofullständig typ %qT i ökningsuttryck" #: cp/cvt.c:1024 #, gcc-internal-format msgid "conversion to void will not access object of type %qT" -msgstr "konvertering till void kommer inte använda objekt av typ %qT" +msgstr "konvertering till void kommer inte använda objekt av typ %qT" #: cp/cvt.c:1028 #, gcc-internal-format msgid "implicit dereference will not access object of type %qT in second operand of conditional expression" -msgstr "implicit avreferens kommer inte att använda objekt av typ %qT i andra operanden av villkorligt uttryck" +msgstr "implicit avreferens kommer inte att använda objekt av typ %qT i andra operanden av villkorligt uttryck" #: cp/cvt.c:1033 #, gcc-internal-format msgid "implicit dereference will not access object of type %qT in third operand of conditional expression" -msgstr "implicita avreferens kommer inte att använda objekt av typ %qT i tredje operanden till villkorligt uttryck" +msgstr "implicita avreferens kommer inte att använda objekt av typ %qT i tredje operanden till villkorligt uttryck" #: cp/cvt.c:1038 #, gcc-internal-format msgid "implicit dereference will not access object of type %qT in right operand of comma operator" -msgstr "implicita avreferens kommer inte att avnända objekt av typ %qT i högeroperanden till kommaoperatorn" +msgstr "implicita avreferens kommer inte att avnända objekt av typ %qT i högeroperanden till kommaoperatorn" #: cp/cvt.c:1043 #, gcc-internal-format msgid "implicit dereference will not access object of type %qT in left operand of comma operator" -msgstr "implicita avreferens kommer inte att använda objekt av typ %qT i vänstra operanden av kommaoperatorn" +msgstr "implicita avreferens kommer inte att använda objekt av typ %qT i vänstra operanden av kommaoperatorn" #: cp/cvt.c:1048 #, gcc-internal-format msgid "implicit dereference will not access object of type %qT in statement" -msgstr "implicit avreferens kommer inte att använda objekt av typ %qT i satsen" +msgstr "implicit avreferens kommer inte att använda objekt av typ %qT i satsen" #: cp/cvt.c:1052 #, gcc-internal-format msgid "implicit dereference will not access object of type %qT in for increment expression" -msgstr "implicit avrefrens kommer inte att använda objekt av typ %qT i for-ökningsuttryck" +msgstr "implicit avrefrens kommer inte att använda objekt av typ %qT i for-ökningsuttryck" #: cp/cvt.c:1066 #, gcc-internal-format msgid "conversion to void will not access object of non-trivially-copyable type %qT" -msgstr "konvertering till void kommer inte använda objekt av ej trivialt kopierbar typ %qT" +msgstr "konvertering till void kommer inte använda objekt av ej trivialt kopierbar typ %qT" #: cp/cvt.c:1071 #, gcc-internal-format msgid "indirection will not access object of non-trivially-copyable type %qT in second operand of conditional expression" -msgstr "indirektion kommer inte att använda objekt av icke trivialt kopierbar typ %qT i andra operanden av villkorligt uttryck" +msgstr "indirektion kommer inte att använda objekt av icke trivialt kopierbar typ %qT i andra operanden av villkorligt uttryck" #: cp/cvt.c:1076 #, gcc-internal-format msgid "indirection will not access object of non-trivially-copyable type %qT in third operand of conditional expression" -msgstr "en indirektion kommer inte att använda ett objekt av ej trivialt kopierbar typ %qT i tredje operanden av ett villkorsuttryck" +msgstr "en indirektion kommer inte att använda ett objekt av ej trivialt kopierbar typ %qT i tredje operanden av ett villkorsuttryck" #: cp/cvt.c:1081 #, gcc-internal-format msgid "indirection will not access object of non-trivially-copyable type %qT in right operand of comma operator" -msgstr "en indirektion kommer inte att använda ett objekt av ej trivialt kopierbar typ %qT i högra operanden av en kommaoperator" +msgstr "en indirektion kommer inte att använda ett objekt av ej trivialt kopierbar typ %qT i högra operanden av en kommaoperator" #: cp/cvt.c:1086 #, gcc-internal-format msgid "indirection will not access object of non-trivially-copyable type %qT in left operand of comma operator" -msgstr "en indirektion kommer inte använda ett objekt av ej trivialt kopierbar typ %qT i vänstra operanden av en kommaoperator" +msgstr "en indirektion kommer inte använda ett objekt av ej trivialt kopierbar typ %qT i vänstra operanden av en kommaoperator" #: cp/cvt.c:1091 #, gcc-internal-format msgid "indirection will not access object of non-trivially-copyable type %qT in statement" -msgstr "en indirektion kommer inte använda ett objekt av ej trivialt kopierbar typ %qT i sats" +msgstr "en indirektion kommer inte använda ett objekt av ej trivialt kopierbar typ %qT i sats" #: cp/cvt.c:1096 #, gcc-internal-format msgid "indirection will not access object of non-trivially-copyable type %qT in for increment expression" -msgstr "en indirektion kommer inte använda ett objekt av ej trivialt kopierbar typ %qT i for-ökningsuttryck" +msgstr "en indirektion kommer inte använda ett objekt av ej trivialt kopierbar typ %qT i for-ökningsuttryck" #: cp/cvt.c:1134 #, gcc-internal-format msgid "conversion to void will not access object %qE of incomplete type %qT" -msgstr "konvertering till void kommer inte använda objekt %qE av ofullständig typ %qT" +msgstr "konvertering till void kommer inte använda objekt %qE av ofullständig typ %qT" #: cp/cvt.c:1138 #, gcc-internal-format msgid "variable %qE of incomplete type %qT will not be accessed in second operand of conditional expression" -msgstr "variabeln %qE med ofullständig typ %qT kommer inte användas i andra operanden av ett villkorsuttryck" +msgstr "variabeln %qE med ofullständig typ %qT kommer inte användas i andra operanden av ett villkorsuttryck" #: cp/cvt.c:1143 #, gcc-internal-format msgid "variable %qE of incomplete type %qT will not be accessed in third operand of conditional expression" -msgstr "variabeln %qE med ofullständig typ %qT kommer inte användas i tredje operanden av ett villkorsuttryck" +msgstr "variabeln %qE med ofullständig typ %qT kommer inte användas i tredje operanden av ett villkorsuttryck" #: cp/cvt.c:1148 #, gcc-internal-format msgid "variable %qE of incomplete type %qT will not be accessed in right operand of comma operator" -msgstr "variabeln %qE med ofullständig typ %qT kommer inte användas i högra operanden av en kommaoperator" +msgstr "variabeln %qE med ofullständig typ %qT kommer inte användas i högra operanden av en kommaoperator" #: cp/cvt.c:1153 #, gcc-internal-format msgid "variable %qE of incomplete type %qT will not be accessed in left operand of comma operator" -msgstr "variabeln %qE med ofullständig typ %qT kommer inte användas i vänstra operanden av en kommaoperator" +msgstr "variabeln %qE med ofullständig typ %qT kommer inte användas i vänstra operanden av en kommaoperator" #: cp/cvt.c:1158 #, gcc-internal-format msgid "variable %qE of incomplete type %qT will not be accessed in statement" -msgstr "variabeln %qE med ofullständig typ %qT kommer inte användas i en sats" +msgstr "variabeln %qE med ofullständig typ %qT kommer inte användas i en sats" #: cp/cvt.c:1162 #, gcc-internal-format msgid "variable %qE of incomplete type %qT will not be accessed in for increment expression" -msgstr "variabeln %qE med ofullständig typ %qT kommer inte användas i for-ökningsuttryck" +msgstr "variabeln %qE med ofullständig typ %qT kommer inte användas i for-ökningsuttryck" #: cp/cvt.c:1211 #, gcc-internal-format msgid "conversion to void cannot resolve address of overloaded function" -msgstr "konvertering till void kan inte lösa upp adress till överlagrad funktion" +msgstr "konvertering till void kan inte lösa upp adress till överlagrad funktion" #: cp/cvt.c:1215 #, gcc-internal-format msgid "second operand of conditional expression cannot resolve address of overloaded function" -msgstr "andra operanden i villkorsuttryck kan inte lösa upp adress till överlagrad funktion" +msgstr "andra operanden i villkorsuttryck kan inte lösa upp adress till överlagrad funktion" #: cp/cvt.c:1219 #, gcc-internal-format msgid "third operand of conditional expression cannot resolve address of overloaded function" -msgstr "tredje operanden i villkorsuttryck kan inte lösa upp adress till överlagrad funktion" +msgstr "tredje operanden i villkorsuttryck kan inte lösa upp adress till överlagrad funktion" #: cp/cvt.c:1223 #, gcc-internal-format msgid "right operand of comma operator cannot resolve address of overloaded function" -msgstr "högra operanden av kommaoperator kan inte lösa upp adress till överlagrad funktion" +msgstr "högra operanden av kommaoperator kan inte lösa upp adress till överlagrad funktion" #: cp/cvt.c:1227 #, gcc-internal-format msgid "left operand of comma operator cannot resolve address of overloaded function" -msgstr "vänstra operanden av kommaoperator kan inte lösa upp adress till överlagrad funktion" +msgstr "vänstra operanden av kommaoperator kan inte lösa upp adress till överlagrad funktion" #: cp/cvt.c:1231 #, gcc-internal-format msgid "statement cannot resolve address of overloaded function" -msgstr "en sats kan inte lösa upp adress till överlagrad funktion" +msgstr "en sats kan inte lösa upp adress till överlagrad funktion" #: cp/cvt.c:1235 #, gcc-internal-format msgid "for increment expression cannot resolve address of overloaded function" -msgstr "for-ökningsuttryck kan inte lösa upp adress till överlagrad funktion" +msgstr "for-ökningsuttryck kan inte lösa upp adress till överlagrad funktion" #: cp/cvt.c:1251 #, gcc-internal-format msgid "second operand of conditional expression is a reference, not call, to function %qE" -msgstr "andra operanden av villkorsuttryck är en referens, inte ett anrop, till funktionen %qE" +msgstr "andra operanden av villkorsuttryck är en referens, inte ett anrop, till funktionen %qE" #: cp/cvt.c:1256 #, gcc-internal-format msgid "third operand of conditional expression is a reference, not call, to function %qE" -msgstr "tredje operanden av villkorsuttryck är en referens, inte ett anrop, till funktionen %qE" +msgstr "tredje operanden av villkorsuttryck är en referens, inte ett anrop, till funktionen %qE" #: cp/cvt.c:1261 #, gcc-internal-format msgid "right operand of comma operator is a reference, not call, to function %qE" -msgstr "högra operanden av kommaoperator är en referens, inte ett anrop, till funktionen %qE" +msgstr "högra operanden av kommaoperator är en referens, inte ett anrop, till funktionen %qE" #: cp/cvt.c:1266 #, gcc-internal-format msgid "left operand of comma operator is a reference, not call, to function %qE" -msgstr "vänstra operanden av kommaoperator är en referens, inte ett anrop, till funktion %qE" +msgstr "vänstra operanden av kommaoperator är en referens, inte ett anrop, till funktion %qE" #: cp/cvt.c:1271 #, gcc-internal-format msgid "statement is a reference, not call, to function %qE" -msgstr "sats är en referens, inte ett anrop, till funktionen %qE" +msgstr "sats är en referens, inte ett anrop, till funktionen %qE" #: cp/cvt.c:1276 #, gcc-internal-format msgid "for increment expression is a reference, not call, to function %qE" -msgstr "for-ökningsuttryck är en referens, inte ett anrop, till funktionen %qE" +msgstr "for-ökningsuttryck är en referens, inte ett anrop, till funktionen %qE" #: cp/cvt.c:1303 #, gcc-internal-format @@ -26828,12 +26832,12 @@ msgstr "tredje operanden av villkorsuttryck har ingen effekt" #: cp/cvt.c:1311 #, gcc-internal-format msgid "right operand of comma operator has no effect" -msgstr "höger operand av kommaoperator har ingen effekt" +msgstr "höger operand av kommaoperator har ingen effekt" #: cp/cvt.c:1315 #, gcc-internal-format msgid "left operand of comma operator has no effect" -msgstr "vänster operand av kommaoperator har ingen effekt" +msgstr "vänster operand av kommaoperator har ingen effekt" #: cp/cvt.c:1319 #, gcc-internal-format @@ -26843,7 +26847,7 @@ msgstr "satsen har ingen effekt" #: cp/cvt.c:1323 #, gcc-internal-format msgid "for increment expression has no effect" -msgstr "for-ökningsuttryck har ingen effekt" +msgstr "for-ökningsuttryck har ingen effekt" #: cp/cvt.c:1472 #, gcc-internal-format @@ -26853,17 +26857,17 @@ msgstr "konvertera av NULL till icke-pekartyp" #: cp/cvt.c:1584 #, gcc-internal-format msgid "ambiguous default type conversion from %qT" -msgstr "tvetydig standartypkonvertering från %qT" +msgstr "tvetydig standartypkonvertering frÃ¥n %qT" #: cp/cvt.c:1586 #, gcc-internal-format msgid " candidate conversions include %qD and %qD" -msgstr " kandidater till konvertering är %qD och %qD" +msgstr " kandidater till konvertering är %qD och %qD" #: cp/decl.c:637 #, gcc-internal-format msgid "variable %q+D set but not used" -msgstr "variabeln %q+D sätts men används inte" +msgstr "variabeln %q+D sätts men används inte" #: cp/decl.c:1108 #, gcc-internal-format @@ -26884,7 +26888,7 @@ msgstr "deklaration av %qF har en annan undantagsspecifierare" #: cp/decl.c:1143 #, gcc-internal-format msgid "from previous declaration %q+F" -msgstr "än tidigare deklaration av %q+F" +msgstr "än tidigare deklaration av %q+F" #: cp/decl.c:1168 #, gcc-internal-format @@ -26894,7 +26898,7 @@ msgstr "omdeklaration av %qD skiljer i %<constexpr%>" #: cp/decl.c:1169 #, gcc-internal-format msgid "from previous declaration %q+D" -msgstr "från tidigare deklaration %q+D" +msgstr "frÃ¥n tidigare deklaration %q+D" #: cp/decl.c:1214 #, gcc-internal-format @@ -26909,7 +26913,7 @@ msgstr "" #: cp/decl.c:1240 #, gcc-internal-format msgid "function %q+D redeclared as inline" -msgstr "funktionen %q+D omdeklarerad som \"inline\"" +msgstr "funktionen %q+D omdeklarerad som â€inlineâ€" #: cp/decl.c:1242 #, gcc-internal-format @@ -26944,7 +26948,7 @@ msgstr "biblioteksfunktion %q#D omdeklarerad som icke-funktion %q#D" #: cp/decl.c:1288 #, gcc-internal-format msgid "conflicts with built-in declaration %q#D" -msgstr "står i konflikt med inbyggd deklaration %q#D" +msgstr "stÃ¥r i konflikt med inbyggd deklaration %q#D" #: cp/decl.c:1342 cp/decl.c:1471 cp/decl.c:1488 #, gcc-internal-format @@ -26954,7 +26958,7 @@ msgstr "ny deklaration av %q#D" #: cp/decl.c:1343 #, gcc-internal-format msgid "ambiguates built-in declaration %q#D" -msgstr "gör inbyggd deklaration %q#D tvetydig" +msgstr "gör inbyggd deklaration %q#D tvetydig" #: cp/decl.c:1435 #, gcc-internal-format @@ -26974,22 +26978,22 @@ msgstr "omdeklaration av mallen %q#D" #: cp/decl.c:1458 cp/name-lookup.c:841 cp/name-lookup.c:856 #, gcc-internal-format msgid "conflicts with previous declaration %q+#D" -msgstr "står i konflikt med tidigare deklaration %q+#D" +msgstr "stÃ¥r i konflikt med tidigare deklaration %q+#D" #: cp/decl.c:1472 cp/decl.c:1489 #, gcc-internal-format msgid "ambiguates old declaration %q+#D" -msgstr "gör gammal deklaration %q+#D tvetydig" +msgstr "gör gammal deklaration %q+#D tvetydig" #: cp/decl.c:1480 #, gcc-internal-format msgid "declaration of C function %q#D conflicts with" -msgstr "deklaration av C-funktion %q#D står i konflikt med" +msgstr "deklaration av C-funktion %q#D stÃ¥r i konflikt med" #: cp/decl.c:1482 #, gcc-internal-format msgid "previous declaration %q+#D here" -msgstr "tidigare deklaration av %q+#D här" +msgstr "tidigare deklaration av %q+#D här" #: cp/decl.c:1497 #, gcc-internal-format @@ -27011,48 +27015,48 @@ msgstr "%q+D har en tidigare deklaration som %q#D" #: cp/decl.c:1550 #, gcc-internal-format msgid "declaration of namespace %qD conflicts with" -msgstr "deklaration av namnrymden %qD står i konflikt med" +msgstr "deklaration av namnrymden %qD stÃ¥r i konflikt med" #: cp/decl.c:1551 #, gcc-internal-format msgid "previous declaration of namespace %q+D here" -msgstr "tidigare deklaration av namnrymden %q+D här" +msgstr "tidigare deklaration av namnrymden %q+D här" #: cp/decl.c:1562 #, gcc-internal-format msgid "%q+#D previously defined here" -msgstr "%q+#D definierades tidigare här" +msgstr "%q+#D definierades tidigare här" #: cp/decl.c:1563 cp/name-lookup.c:1133 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q+#D previously declared here" -msgstr "tidigare deklarerad här" +msgstr "%q+#D tidigare deklarerad här" #. Prototype decl follows defn w/o prototype. #: cp/decl.c:1572 #, gcc-internal-format msgid "prototype for %q+#D" -msgstr "prototyp för %q+#D" +msgstr "prototyp för %q+#D" #: cp/decl.c:1574 #, gcc-internal-format msgid "follows non-prototype definition here" -msgstr "följer på definition som inte är en prototyp här" +msgstr "följer pÃ¥ definition som inte är en prototyp här" #: cp/decl.c:1614 #, gcc-internal-format msgid "previous declaration of %q+#D with %qL linkage" -msgstr "tidigare deklaration av %q+#D med länkklass %qL" +msgstr "tidigare deklaration av %q+#D med länkklass %qL" #: cp/decl.c:1616 #, gcc-internal-format msgid "conflicts with new declaration with %qL linkage" -msgstr "står i konflikt med ny deklaration med länkklass %qL" +msgstr "stÃ¥r i konflikt med ny deklaration med länkklass %qL" #: cp/decl.c:1639 cp/decl.c:1645 #, gcc-internal-format msgid "default argument given for parameter %d of %q#D" -msgstr "standardargumentet angivet för parameter %d till %q#D" +msgstr "standardargumentet angivet för parameter %d till %q#D" #: cp/decl.c:1641 cp/decl.c:1647 #, gcc-internal-format @@ -27062,7 +27066,7 @@ msgstr "efter tidigare specifikation i %q+#D" #: cp/decl.c:1708 #, gcc-internal-format msgid "redundant redeclaration of %qD in same scope" -msgstr "överflödig omdeklaration av %qD i samma definitionsområde" +msgstr "överflödig omdeklaration av %qD i samma definitionsomrÃ¥de" #: cp/decl.c:1714 #, gcc-internal-format @@ -27085,17 +27089,17 @@ msgstr "efter tidigare deklaration %q+D" #: cp/decl.c:2074 #, gcc-internal-format msgid "explicit specialization of %qD after first use" -msgstr "explicit specialisering av %qD efter första användningen" +msgstr "explicit specialisering av %qD efter första användningen" #: cp/decl.c:2200 #, gcc-internal-format msgid "%q+D: visibility attribute ignored because it" -msgstr "%q+D: synlighetsattribut ignorerat för att det" +msgstr "%q+D: synlighetsattribut ignorerat för att det" #: cp/decl.c:2202 #, gcc-internal-format msgid "conflicts with previous declaration here" -msgstr "står i konflikt med tidigare deklaration här" +msgstr "stÃ¥r i konflikt med tidigare deklaration här" #. Reject two definitions. #: cp/decl.c:2364 cp/decl.c:2393 cp/decl.c:2422 cp/decl.c:2439 cp/decl.c:2511 @@ -27106,7 +27110,7 @@ msgstr "omdefinition av %q#D" #: cp/decl.c:2380 #, gcc-internal-format msgid "%qD conflicts with used function" -msgstr "%qD står i konflikt med använd funktion" +msgstr "%qD stÃ¥r i konflikt med använd funktion" #: cp/decl.c:2390 #, gcc-internal-format @@ -27129,17 +27133,17 @@ msgstr "%q+D omdeklarerad inline utan attributet %<gnu_inline%>" #: cp/decl.c:2468 #, gcc-internal-format msgid "redeclaration of friend %q#D may not have default template arguments" -msgstr "omdeklaration av vän %q#D kan inte ha standardmallargument" +msgstr "omdeklaration av vän %q#D kan inte ha standardmallargument" #: cp/decl.c:2482 #, gcc-internal-format msgid "thread-local declaration of %q#D follows non-thread-local declaration" -msgstr "trådlokal deklaration av %q#D följer på icke trådlokal deklaration" +msgstr "trÃ¥dlokal deklaration av %q#D följer pÃ¥ icke trÃ¥dlokal deklaration" #: cp/decl.c:2485 #, gcc-internal-format msgid "non-thread-local declaration of %q#D follows thread-local declaration" -msgstr "icke trådlokal deklaration av %q#D följer på trådlokal deklaration" +msgstr "icke trÃ¥dlokal deklaration av %q#D följer pÃ¥ trÃ¥dlokal deklaration" #: cp/decl.c:2500 cp/decl.c:2519 cp/name-lookup.c:550 cp/name-lookup.c:1132 #, gcc-internal-format @@ -27159,12 +27163,12 @@ msgstr "hopp till case-etikett" #: cp/decl.c:2678 cp/decl.c:2820 cp/decl.c:2860 #, gcc-internal-format msgid " from here" -msgstr " härifrån" +msgstr " härifrÃ¥n" #: cp/decl.c:2697 cp/decl.c:2863 #, gcc-internal-format msgid " exits OpenMP structured block" -msgstr " går ut från OpenMP strukturerat block" +msgstr " gÃ¥r ut frÃ¥n OpenMP strukturerat block" #: cp/decl.c:2719 #, gcc-internal-format @@ -27174,23 +27178,23 @@ msgstr " passerar initiering av %q+#D" #: cp/decl.c:2721 cp/decl.c:2837 #, gcc-internal-format msgid " enters scope of %q+#D which has non-trivial destructor" -msgstr " går in i räckvidden hos %q+#D som har en icke-trivial destruerare" +msgstr " gÃ¥r in i räckvidden hos %q+#D som har en icke-trivial destruerare" #: cp/decl.c:2735 cp/decl.c:2842 #, gcc-internal-format msgid " enters try block" -msgstr " går in i try-block" +msgstr " gÃ¥r in i try-block" #. Can't skip init of __exception_info. #: cp/decl.c:2737 cp/decl.c:2831 cp/decl.c:2844 #, gcc-internal-format msgid " enters catch block" -msgstr " går in i catch-block" +msgstr " gÃ¥r in i catch-block" #: cp/decl.c:2747 cp/decl.c:2847 #, gcc-internal-format msgid " enters OpenMP structured block" -msgstr " går in i OpenMP strukturerat block" +msgstr " gÃ¥r in i OpenMP strukturerat block" #: cp/decl.c:2819 cp/decl.c:2859 #, gcc-internal-format @@ -27200,7 +27204,7 @@ msgstr "hopp till etikett %q+D" #: cp/decl.c:2835 #, gcc-internal-format msgid " skips initialization of %q+#D" -msgstr " hoppar över initiering av %q+#D" +msgstr " hoppar över initiering av %q+#D" #: cp/decl.c:2912 #, gcc-internal-format @@ -27210,17 +27214,17 @@ msgstr "etikett med namnet wchar_t" #: cp/decl.c:3220 #, gcc-internal-format msgid "%qD is not a type" -msgstr "%qD är inte en typ" +msgstr "%qD är inte en typ" #: cp/decl.c:3226 cp/parser.c:5049 #, gcc-internal-format msgid "%qD used without template parameters" -msgstr "%qD använd utan mallparametrar" +msgstr "%qD använd utan mallparametrar" #: cp/decl.c:3235 #, gcc-internal-format msgid "%q#T is not a class" -msgstr "%q#T är inte en klass" +msgstr "%q#T är inte en klass" #: cp/decl.c:3259 cp/decl.c:3349 #, gcc-internal-format @@ -27228,34 +27232,34 @@ msgid "no class template named %q#T in %q#T" msgstr "ingen klassmall med namnet %q#T i %q#T" #: cp/decl.c:3260 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "no type named %q#T in %q#T" -msgstr "ingen klassmall med namnet %q#T i %q#T" +msgstr "ingen typ med namnet %q#T i %q#T" #: cp/decl.c:3272 #, gcc-internal-format msgid "lookup of %qT in %qT is ambiguous" -msgstr "uppslagning av %qT i %qT är tvetydig" +msgstr "uppslagning av %qT i %qT är tvetydig" #: cp/decl.c:3281 #, gcc-internal-format msgid "%<typename %T::%D%> names %q#T, which is not a class template" -msgstr "%<typename %T::%D%> namnger %q#T, som inte är en klassmall" +msgstr "%<typename %T::%D%> namnger %q#T, som inte är en klassmall" #: cp/decl.c:3288 #, gcc-internal-format msgid "%<typename %T::%D%> names %q#T, which is not a type" -msgstr "%<typename %T::%D%> namnger %q#T, som inte är en typ" +msgstr "%<typename %T::%D%> namnger %q#T, som inte är en typ" #: cp/decl.c:3358 #, gcc-internal-format msgid "template parameters do not match template" -msgstr "mallparametrar stämmer inte med mallen" +msgstr "mallparametrar stämmer inte med mallen" #: cp/decl.c:3359 cp/friend.c:327 cp/friend.c:335 #, gcc-internal-format msgid "%q+D declared here" -msgstr "%q+D är deklarerad här" +msgstr "%q+D är deklarerad här" #: cp/decl.c:4077 #, gcc-internal-format @@ -27270,17 +27274,17 @@ msgstr "en anonym union kan inte ha funktionsmedlemmar" #: cp/decl.c:4098 #, gcc-internal-format msgid "member %q+#D with constructor not allowed in anonymous aggregate" -msgstr "medlem %q+#D med konstruerare inte tillåten i anonymt aggregat" +msgstr "medlem %q+#D med konstruerare inte tillÃ¥ten i anonymt aggregat" #: cp/decl.c:4101 #, gcc-internal-format msgid "member %q+#D with destructor not allowed in anonymous aggregate" -msgstr "medlem %q+#D med destruerare inte tillåten i anonymt aggregat" +msgstr "medlem %q+#D med destruerare inte tillÃ¥ten i anonymt aggregat" #: cp/decl.c:4104 #, gcc-internal-format msgid "member %q+#D with copy assignment operator not allowed in anonymous aggregate" -msgstr "medlem %q+#D med kopieringstilldelningsoperator är inte tillåten i anonymt aggregat" +msgstr "medlem %q+#D med kopieringstilldelningsoperator är inte tillÃ¥ten i anonymt aggregat" #: cp/decl.c:4129 #, gcc-internal-format @@ -27293,9 +27297,9 @@ msgid "redeclaration of C++ built-in type %qT" msgstr "omdeklaration av inbyggd C++-typ %qT" #: cp/decl.c:4150 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<auto%> can only be specified for variables or function declarations" -msgstr "%qs kan endast anges för funktioner" +msgstr "%<auto%> kan endast anges för variabler eller funktionsdeklarationer" #: cp/decl.c:4176 #, gcc-internal-format @@ -27305,12 +27309,12 @@ msgstr "typnamn saknas i typedef-deklaration" #: cp/decl.c:4183 #, gcc-internal-format msgid "ISO C++ prohibits anonymous structs" -msgstr "ISO C++ förbjuder anonyma poster" +msgstr "ISO C++ förbjuder anonyma poster" #: cp/decl.c:4190 #, gcc-internal-format msgid "%qs can only be specified for functions" -msgstr "%qs kan endast anges för funktioner" +msgstr "%qs kan endast anges för funktioner" #: cp/decl.c:4196 #, gcc-internal-format @@ -27320,17 +27324,17 @@ msgstr "%<friend%> kan endast anges inuti en klass" #: cp/decl.c:4198 #, gcc-internal-format msgid "%<explicit%> can only be specified for constructors" -msgstr "%<explicit%> kan endast anges för konstruerare" +msgstr "%<explicit%> kan endast anges för konstruerare" #: cp/decl.c:4200 #, gcc-internal-format msgid "a storage class can only be specified for objects and functions" -msgstr "en lagringsklass kan bara anges för objekt och funktioner" +msgstr "en lagringsklass kan bara anges för objekt och funktioner" #: cp/decl.c:4206 #, gcc-internal-format msgid "qualifiers can only be specified for objects and functions" -msgstr "kvalificerare kan bara anges för objekt och funktioner" +msgstr "kvalificerare kan bara anges för objekt och funktioner" #: cp/decl.c:4209 #, gcc-internal-format @@ -27340,7 +27344,7 @@ msgstr "%<typedef%> ignorerades i denna deklaration" #: cp/decl.c:4211 #, gcc-internal-format msgid "%<constexpr%> cannot be used for type declarations" -msgstr "%<constexpr%> kan inte användas för typdeklarationer" +msgstr "%<constexpr%> kan inte användas för typdeklarationer" #: cp/decl.c:4240 #, gcc-internal-format @@ -27350,48 +27354,48 @@ msgstr "attribut ignoreras i deklaration av %q+#T" #: cp/decl.c:4241 #, gcc-internal-format msgid "attribute for %q+#T must follow the %qs keyword" -msgstr "attribut för %q#T måste komma efter nyckelordet %qs" +msgstr "attribut för %q#T mÃ¥ste komma efter nyckelordet %qs" #: cp/decl.c:4286 #, gcc-internal-format msgid "ignoring attributes applied to class type %qT outside of definition" -msgstr "ignorerar attribut använda på klasstypen %qT utanför dess definition" +msgstr "ignorerar attribut använda pÃ¥ klasstypen %qT utanför dess definition" #. A template type parameter or other dependent type. #: cp/decl.c:4290 #, gcc-internal-format msgid "ignoring attributes applied to dependent type %qT without an associated declaration" -msgstr "ignorerar attribut använda på beroende typ %qT utan en associerad deklaration" +msgstr "ignorerar attribut använda pÃ¥ beroende typ %qT utan en associerad deklaration" #: cp/decl.c:4360 cp/decl2.c:815 #, gcc-internal-format msgid "typedef %qD is initialized (use decltype instead)" -msgstr "typedef %qD är initierad (använd decltype istället)" +msgstr "typedef %qD är initierad (använd decltype istället)" #: cp/decl.c:4378 #, gcc-internal-format msgid "declaration of %q#D has %<extern%> and is initialized" -msgstr "deklarationen av %q#D har %<extern%> och är initierad" +msgstr "deklarationen av %q#D har %<extern%> och är initierad" #: cp/decl.c:4407 #, gcc-internal-format msgid "definition of %q#D is marked %<dllimport%>" -msgstr "definitionen av %q#D är markerad %<dllimport%>" +msgstr "definitionen av %q#D är markerad %<dllimport%>" #: cp/decl.c:4426 #, gcc-internal-format msgid "%q#D is not a static member of %q#T" -msgstr "%q#D är inte en statisk medlem av %q#T" +msgstr "%q#D är inte en statisk medlem av %q#T" #: cp/decl.c:4432 #, gcc-internal-format msgid "ISO C++ does not permit %<%T::%D%> to be defined as %<%T::%D%>" -msgstr "ISO C++ tillåter inte %<%T::%D%> att definieras som %<%T::%D%>" +msgstr "ISO C++ tillÃ¥ter inte %<%T::%D%> att definieras som %<%T::%D%>" #: cp/decl.c:4441 #, gcc-internal-format msgid "template header not allowed in member definition of explicitly specialized class" -msgstr "mallhuvud inte tillåtet i medlemsdefinition av explicit specialiserad klass" +msgstr "mallhuvud inte tillÃ¥tet i medlemsdefinition av explicit specialiserad klass" #: cp/decl.c:4449 #, gcc-internal-format @@ -27401,22 +27405,22 @@ msgstr "dubblerad initierare av %qD" #: cp/decl.c:4454 #, gcc-internal-format msgid "%qD declared %<constexpr%> outside its class" -msgstr "%qD är deklarerad %<constexpr%> utanför sin klass" +msgstr "%qD är deklarerad %<constexpr%> utanför sin klass" #: cp/decl.c:4493 #, gcc-internal-format msgid "declaration of %q#D outside of class is not definition" -msgstr "deklaration av %q#D utanför en klass är inte en definition" +msgstr "deklaration av %q#D utanför en klass är inte en definition" #: cp/decl.c:4588 #, gcc-internal-format msgid "variable %q#D has initializer but incomplete type" -msgstr "variabeln %q#D har initierare men ofullständig typ" +msgstr "variabeln %q#D har initierare men ofullständig typ" #: cp/decl.c:4594 cp/decl.c:5389 #, gcc-internal-format msgid "elements of array %q#D have incomplete type" -msgstr "elementen i vektorn %q#D har ofullständig typ" +msgstr "elementen i vektorn %q#D har ofullständig typ" #: cp/decl.c:4601 cp/decl.c:5999 #, gcc-internal-format @@ -27426,32 +27430,32 @@ msgstr "deklarationen av %q#D har ingen initierare" #: cp/decl.c:4603 #, gcc-internal-format msgid "aggregate %q#D has incomplete type and cannot be defined" -msgstr "aggregatet %q#D har ofullständig typ och kan inte definieras" +msgstr "aggregatet %q#D har ofullständig typ och kan inte definieras" #: cp/decl.c:4637 #, gcc-internal-format msgid "%qD declared as reference but not initialized" -msgstr "%qD är deklarerad som en referens men inte initierad" +msgstr "%qD är deklarerad som en referens men inte initierad" #: cp/decl.c:4678 #, gcc-internal-format msgid "name used in a GNU-style designated initializer for an array" -msgstr "namn använt i en designerad initierare i GNU-stil för en vektor" +msgstr "namn använt i en designerad initierare i GNU-stil för en vektor" #: cp/decl.c:4686 cp/typeck2.c:1084 cp/typeck2.c:1189 #, gcc-internal-format msgid "non-trivial designated initializers not supported" -msgstr "icketriviala designerade initierare stöds inte" +msgstr "icketriviala designerade initierare stöds inte" #: cp/decl.c:4691 #, gcc-internal-format msgid "name %qD used in a GNU-style designated initializer for an array" -msgstr "namnet %qD använt i en designerad initierare i GNU-stil för en vektor" +msgstr "namnet %qD använt i en designerad initierare i GNU-stil för en vektor" #: cp/decl.c:4739 #, gcc-internal-format msgid "initializer fails to determine size of %qD" -msgstr "initierare misslyckas med att bestämma storleken på %qD" +msgstr "initierare misslyckas med att bestämma storleken pÃ¥ %qD" #: cp/decl.c:4746 #, gcc-internal-format @@ -27469,22 +27473,22 @@ msgstr "vektor med storlek noll %qD" #: cp/decl.c:4801 #, gcc-internal-format msgid "storage size of %qD isn%'t known" -msgstr "lagringsstorlek på %qD är inte känd" +msgstr "lagringsstorlek pÃ¥ %qD är inte känd" #: cp/decl.c:4824 #, gcc-internal-format msgid "storage size of %qD isn%'t constant" -msgstr "lagringsstorlek på %qD är inte konstant" +msgstr "lagringsstorlek pÃ¥ %qD är inte konstant" #: cp/decl.c:4870 #, gcc-internal-format msgid "sorry: semantics of inline function static data %q+#D are wrong (you%'ll wind up with multiple copies)" -msgstr "tyvärr: semantiken för inline-funktioners statiska data %q+#D är felaktig (du kommer få flera exemplar)" +msgstr "tyvärr: semantiken för inline-funktioners statiska data %q+#D är felaktig (du kommer fÃ¥ flera exemplar)" #: cp/decl.c:4874 #, gcc-internal-format msgid " you can work around this by removing the initializer" -msgstr " du kan gå runt detta genom att ta bort initieraren" +msgstr " du kan gÃ¥ runt detta genom att ta bort initieraren" #: cp/decl.c:4905 #, gcc-internal-format @@ -27494,12 +27498,12 @@ msgstr "oinitierade const %qD" #: cp/decl.c:4912 #, gcc-internal-format msgid "%q#T has no user-provided default constructor" -msgstr "%q#T har ingen användardefinierad standardkonstruerare" +msgstr "%q#T har ingen användardefinierad standardkonstruerare" #: cp/decl.c:4916 #, gcc-internal-format msgid "constructor is not user-provided because it is explicitly defaulted in the class body" -msgstr "konstrueraren är inte användarens egna eftersom den är uttryckligen gavs standardvärde i klasskroppen" +msgstr "konstrueraren är inte användarens egna eftersom den är uttryckligen gavs standardvärde i klasskroppen" #: cp/decl.c:4918 #, gcc-internal-format @@ -27509,17 +27513,17 @@ msgstr "" #: cp/decl.c:5037 #, gcc-internal-format msgid "invalid type %qT as initializer for a vector of type %qT" -msgstr "ogiltig typ %qT som initierare för en vektor med typ %qT" +msgstr "ogiltig typ %qT som initierare för en vektor med typ %qT" #: cp/decl.c:5078 #, gcc-internal-format msgid "initializer for %qT must be brace-enclosed" -msgstr "initierare för %qT måste vara inom klamrar" +msgstr "initierare för %qT mÃ¥ste vara inom klamrar" #: cp/decl.c:5095 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<[%E] =%> used in a GNU-style designated initializer for class %qT" -msgstr "namnet %qD använt i en designerad initierare i GNU-stil för en vektor" +msgstr "%<[%E] =%> använt i en designerad initierare i GNU-stil för klassen %qT" #: cp/decl.c:5105 #, gcc-internal-format @@ -27535,22 +27539,22 @@ msgstr "" #: cp/typeck2.c:1299 cp/typeck2.c:1346 #, gcc-internal-format msgid "too many initializers for %qT" -msgstr "för många initierare för %qT" +msgstr "för mÃ¥nga initierare för %qT" #: cp/decl.c:5216 #, gcc-internal-format msgid "braces around scalar initializer for type %qT" -msgstr "klamrar runt skalär initierare för typen %qT" +msgstr "klamrar runt skalär initierare för typen %qT" #: cp/decl.c:5309 #, gcc-internal-format msgid "missing braces around initializer for %qT" -msgstr "klamrar saknas runt initierare för %qT" +msgstr "klamrar saknas runt initierare för %qT" #: cp/decl.c:5391 #, gcc-internal-format msgid "elements of array %q#T have incomplete type" -msgstr "element i vektorn %q#T har ofullständig typ" +msgstr "element i vektorn %q#T har ofullständig typ" #: cp/decl.c:5400 #, gcc-internal-format @@ -27563,29 +27567,29 @@ msgid "variable-sized compound literal" msgstr "sammansatta literal med variabel storlek" #: cp/decl.c:5457 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q#D has incomplete type" -msgstr "%qD har en ofullständig typ" +msgstr "%q#D har ofullständig typ" #: cp/decl.c:5477 #, gcc-internal-format msgid "scalar object %qD requires one element in initializer" -msgstr "skalärt objekt %qD kräver ett element i initieraren" +msgstr "skalärt objekt %qD kräver ett element i initieraren" #: cp/decl.c:5520 #, gcc-internal-format msgid "in C++98 %qD must be initialized by constructor, not by %<{...}%>" -msgstr "i C++98 måste %qD initieras med en konstruerare, inte med %<{...}%>" +msgstr "i C++98 mÃ¥ste %qD initieras med en konstruerare, inte med %<{...}%>" #: cp/decl.c:5600 #, gcc-internal-format msgid "array %qD initialized by parenthesized string literal %qE" -msgstr "vektor %qD initierad från strängkonstant inom parentes %qE" +msgstr "vektor %qD initierad frÃ¥n strängkonstant inom parentes %qE" #: cp/decl.c:5627 #, gcc-internal-format msgid "initializer invalid for static member with constructor" -msgstr "initierare är ogiltig för statisk medlem med konstruerare" +msgstr "initierare är ogiltig för statisk medlem med konstruerare" #: cp/decl.c:5629 #, gcc-internal-format @@ -27595,7 +27599,7 @@ msgstr "ej konstant initiering inom klassen av statisk medlem %qD" #: cp/decl.c:5633 #, gcc-internal-format msgid "(an out of class initialization is required)" -msgstr "(en initiering utanför klassen krävs)" +msgstr "(en initiering utanför klassen krävs)" #: cp/decl.c:5968 #, gcc-internal-format @@ -27610,22 +27614,22 @@ msgstr "skuggar tidigare typdeklaration av %q#D" #: cp/decl.c:6158 #, gcc-internal-format msgid "%qD cannot be thread-local because it has non-trivial type %qT" -msgstr "%qD kan inte vara trådlokal för den har ej trivial typ %qT" +msgstr "%qD kan inte vara trÃ¥dlokal för den har ej trivial typ %qT" #: cp/decl.c:6200 #, gcc-internal-format msgid "Java object %qD not allocated with %<new%>" -msgstr "Javaobjekt %qD är inte allokerat med %<new%>" +msgstr "Javaobjekt %qD är inte allokerat med %<new%>" #: cp/decl.c:6208 #, gcc-internal-format msgid "%qD is thread-local and so cannot be dynamically initialized" -msgstr "%qD är trådlokal och kan därför inte initieras dynamiskt" +msgstr "%qD är trÃ¥dlokal och kan därför inte initieras dynamiskt" #: cp/decl.c:6226 #, gcc-internal-format msgid "%qD cannot be initialized by a non-constant expression when being declared" -msgstr "%qD kan inte initieras från ett icke-konstant uttryck vid deklarationen" +msgstr "%qD kan inte initieras frÃ¥n ett icke-konstant uttryck vid deklarationen" #: cp/decl.c:6274 #, gcc-internal-format @@ -27635,32 +27639,32 @@ msgstr "icke-statisk datamedlem %qD har Javaklasstyp" #: cp/decl.c:6339 #, gcc-internal-format msgid "function %q#D is initialized like a variable" -msgstr "funktionen %q#D är initierad som en variabel" +msgstr "funktionen %q#D är initierad som en variabel" #: cp/decl.c:6938 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "initializer fails to determine size of %qT" -msgstr "initierare misslyckas med att bestämma storleken på %qD" +msgstr "initierare misslyckas med att bestämma storleken pÃ¥ %qT" #: cp/decl.c:6942 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "array size missing in %qT" -msgstr "vektorstorlek saknas i %qD" +msgstr "vektorstorlek saknas i %qT" #: cp/decl.c:6945 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "zero-size array %qT" -msgstr "vektor med storlek noll %qD" +msgstr "vektor med storlek noll %qT" #: cp/decl.c:6961 #, gcc-internal-format msgid "destructor for alien class %qT cannot be a member" -msgstr "destruerare för främmande class %qT kan inte vara en medlem" +msgstr "destruerare för främmande class %qT kan inte vara en medlem" #: cp/decl.c:6963 #, gcc-internal-format msgid "constructor for alien class %qT cannot be a member" -msgstr "konstruerare för främmande klass %qT kan inte vara en medlem" +msgstr "konstruerare för främmande klass %qT kan inte vara en medlem" #: cp/decl.c:6987 #, gcc-internal-format @@ -27675,7 +27679,7 @@ msgstr "%qD deklarerad som en %<inline%>-variabel" #: cp/decl.c:6991 #, gcc-internal-format msgid "%<const%> and %<volatile%> function specifiers on %qD invalid in variable declaration" -msgstr "%<const%>- och %<volatile%>-funktionsspecificerare på %qD är ogiltiga i variabeldeklaration" +msgstr "%<const%>- och %<volatile%>-funktionsspecificerare pÃ¥ %qD är ogiltiga i variabeldeklaration" #: cp/decl.c:6996 #, gcc-internal-format @@ -27690,7 +27694,7 @@ msgstr "%qD deklarerad som en %<inline%>-parameter" #: cp/decl.c:7000 #, gcc-internal-format msgid "%<const%> and %<volatile%> function specifiers on %qD invalid in parameter declaration" -msgstr "%<const%>- och %<volatile%>-funktionsspecificerare på %qD är ogiltiga i parameterdeklaration" +msgstr "%<const%>- och %<volatile%>-funktionsspecificerare pÃ¥ %qD är ogiltiga i parameterdeklaration" #: cp/decl.c:7005 #, gcc-internal-format @@ -27705,27 +27709,27 @@ msgstr "%qD deklarerad som en %<inline%>-typ" #: cp/decl.c:7009 #, gcc-internal-format msgid "%<const%> and %<volatile%> function specifiers on %qD invalid in type declaration" -msgstr "%<const%>- och %<volatile%>-funktionsspecificerare på %qD är ogiltiga i typdeklaration" +msgstr "%<const%>- och %<volatile%>-funktionsspecificerare pÃ¥ %qD är ogiltiga i typdeklaration" #: cp/decl.c:7014 #, gcc-internal-format msgid "%qD declared as a %<virtual%> field" -msgstr "%qD deklarerat som ett %<virtual%>-fält" +msgstr "%qD deklarerat som ett %<virtual%>-fält" #: cp/decl.c:7016 #, gcc-internal-format msgid "%qD declared as an %<inline%> field" -msgstr "%qD deklarerat som ett %<inline%>-fält" +msgstr "%qD deklarerat som ett %<inline%>-fält" #: cp/decl.c:7018 #, gcc-internal-format msgid "%<const%> and %<volatile%> function specifiers on %qD invalid in field declaration" -msgstr "%<const%>- och %<volatile%>-funktionsspecificerare på %qD är ogiltiga i fältdeklaration" +msgstr "%<const%>- och %<volatile%>-funktionsspecificerare pÃ¥ %qD är ogiltiga i fältdeklaration" #: cp/decl.c:7025 #, gcc-internal-format msgid "%q+D declared as a friend" -msgstr "%q+D deklarerad som en vän" +msgstr "%q+D deklarerad som en vän" #: cp/decl.c:7031 #, gcc-internal-format @@ -27735,7 +27739,7 @@ msgstr "%q+D deklarerad med en undantagsspecifikationer" #: cp/decl.c:7065 #, gcc-internal-format msgid "definition of %qD is not in namespace enclosing %qT" -msgstr "definitionen av %qD är inte i en namnrymd som innesluter %qT" +msgstr "definitionen av %qD är inte i en namnrymd som innesluter %qT" #: cp/decl.c:7105 #, gcc-internal-format @@ -27745,53 +27749,53 @@ msgstr "statisk medlemsfunktion %q#D deklarerad med typkvalificerare" #: cp/decl.c:7204 #, gcc-internal-format msgid "defining explicit specialization %qD in friend declaration" -msgstr "definierar explicit specialisering %qD i vändeklaration" +msgstr "definierar explicit specialisering %qD i vändeklaration" #. Something like `template <class T> friend void f<T>()'. #: cp/decl.c:7214 #, gcc-internal-format msgid "invalid use of template-id %qD in declaration of primary template" -msgstr "ogiltig användning av mall-id %qD i deklaration av primär mall" +msgstr "ogiltig användning av mall-id %qD i deklaration av primär mall" #: cp/decl.c:7244 #, gcc-internal-format msgid "default arguments are not allowed in declaration of friend template specialization %qD" -msgstr "standardargument är inte tillåtna i deklaration av vänmallspecialisering %qD" +msgstr "standardargument är inte tillÃ¥tna i deklaration av vänmallspecialisering %qD" #: cp/decl.c:7252 #, gcc-internal-format msgid "%<inline%> is not allowed in declaration of friend template specialization %qD" -msgstr "%<inline%> är inte tillåtet i deklaration av vänmallspecialisering %qD" +msgstr "%<inline%> är inte tillÃ¥tet i deklaration av vänmallspecialisering %qD" #: cp/decl.c:7294 #, gcc-internal-format msgid "cannot declare %<::main%> to be a template" -msgstr "det går inte att deklarera %<::main%> som en mall" +msgstr "det gÃ¥r inte att deklarera %<::main%> som en mall" #: cp/decl.c:7296 #, gcc-internal-format msgid "cannot declare %<::main%> to be inline" -msgstr "det går inte att deklarera %<::main%> som inline" +msgstr "det gÃ¥r inte att deklarera %<::main%> som inline" #: cp/decl.c:7298 #, gcc-internal-format msgid "cannot declare %<::main%> to be static" -msgstr "det går inte att deklarera %<::main%> som static" +msgstr "det gÃ¥r inte att deklarera %<::main%> som static" #: cp/decl.c:7326 #, gcc-internal-format msgid "anonymous type with no linkage used to declare function %q#D with linkage" -msgstr "anonym typ utan länkklass används för att deklarera funktionen %q#D med länkklass" +msgstr "anonym typ utan länkklass används för att deklarera funktionen %q#D med länkklass" #: cp/decl.c:7330 cp/decl.c:7687 cp/decl2.c:3673 #, gcc-internal-format msgid "%q+#D does not refer to the unqualified type, so it is not used for linkage" -msgstr "%+#D refererar inte till den okvalificerade typen, så den används int för länkklass" +msgstr "%+#D refererar inte till den okvalificerade typen, sÃ¥ den används int för länkklass" #: cp/decl.c:7336 #, gcc-internal-format msgid "type %qT with no linkage used to declare function %q#D with linkage" -msgstr "typen %qT utan någon länkklass använd för att deklarera funktionen %q#D med länkklass" +msgstr "typen %qT utan nÃ¥gon länkklass använd för att deklarera funktionen %q#D med länkklass" #: cp/decl.c:7358 #, gcc-internal-format @@ -27804,14 +27808,14 @@ msgid "non-member function %qD cannot have cv-qualifier" msgstr "icke-medlemsfunktion %qD kan inte ha cv-kvalificerare" #: cp/decl.c:7375 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "literal operator with C linkage" -msgstr "mall med C-länkning" +msgstr "literal operator med C-länkning" #: cp/decl.c:7384 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD has invalid argument list" -msgstr "%qs är ett ogiltigt argument till -mcpu=" +msgstr "%qD har en ogiltig argumentlista" #: cp/decl.c:7392 #, gcc-internal-format @@ -27824,14 +27828,14 @@ msgid "floating point suffix %<%s%> shadowed by implementation" msgstr "" #: cp/decl.c:7404 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD must be a non-member function" -msgstr "%qD måste vara en icke-statisk medlemsfunktion" +msgstr "%qD mÃ¥ste vara en icke-medlems-funktion" #: cp/decl.c:7448 #, gcc-internal-format msgid "%<::main%> must return %<int%>" -msgstr "%<::main%> måste returnera %<int%>" +msgstr "%<::main%> mÃ¥ste returnera %<int%>" #: cp/decl.c:7490 #, gcc-internal-format @@ -27839,14 +27843,14 @@ msgid "definition of implicitly-declared %qD" msgstr "omdefinition av implicit deklarerad %qD" #: cp/decl.c:7495 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "definition of explicitly-defaulted %q+D" -msgstr "omdefinition av implicit deklarerad %qD" +msgstr "definition av explicit deklarerad %q+D" #: cp/decl.c:7496 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q+#D explicitly defaulted here" -msgstr "%q+#D definierades tidigare här" +msgstr "%q+#D explicit standardvärde här" #: cp/decl.c:7513 cp/decl2.c:736 #, gcc-internal-format @@ -27860,22 +27864,22 @@ msgstr "ingen medlemsfunktion %q#D deklarerad i klassen %qT" #: cp/decl.c:7684 #, gcc-internal-format msgid "anonymous type with no linkage used to declare variable %q#D with linkage" -msgstr "anonym typ utan länkklass används för att deklarera variabeln %q#D med länkklass" +msgstr "anonym typ utan länkklass används för att deklarera variabeln %q#D med länkklass" #: cp/decl.c:7693 #, gcc-internal-format msgid "type %qT with no linkage used to declare variable %q#D with linkage" -msgstr "typen %qT utan länkklass använd för att deklarera variabeln %q#D med länkklass" +msgstr "typen %qT utan länkklass använd för att deklarera variabeln %q#D med länkklass" #: cp/decl.c:7816 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "in-class initialization of static data member %q#D of incomplete type" -msgstr "initiering i klassen av statisk datamedlem med icke heltaltyp %q#D" +msgstr "initiering i klassen av statisk datamedlem %q#D med icke literal typ" #: cp/decl.c:7820 #, gcc-internal-format msgid "%<constexpr%> needed for in-class initialization of static data member %q#D of non-integral type" -msgstr "%<constexpr%> behövs för initiering i klassen av statisk datamedlem med icke heltaltyp %q#D" +msgstr "%<constexpr%> behövs för initiering i klassen av statisk datamedlem med icke heltaltyp %q#D" #: cp/decl.c:7823 #, gcc-internal-format @@ -27890,67 +27894,67 @@ msgstr "ogiltig initiering i klassen av statisk datamedlem med icke heltaltyp %q #: cp/decl.c:7842 #, gcc-internal-format msgid "ISO C++ forbids in-class initialization of non-const static member %qD" -msgstr "ISO C++ förbjuder initiering inom klassen av icke-konstant statisk medlem %qD" +msgstr "ISO C++ förbjuder initiering inom klassen av icke-konstant statisk medlem %qD" #: cp/decl.c:7846 #, gcc-internal-format msgid "ISO C++ forbids initialization of member constant %qD of non-integral type %qT" -msgstr "ISO C++ förbjuder initiering av medlemskonstant %qD av icke heltalstyp %qT" +msgstr "ISO C++ förbjuder initiering av medlemskonstant %qD av icke heltalstyp %qT" #: cp/decl.c:7923 cp/decl.c:7951 #, gcc-internal-format msgid "size of array %qD has non-integral type %qT" -msgstr "storlek på vektorn %qD av typen %qT är inte en heltalstyp" +msgstr "storlek pÃ¥ vektorn %qD av typen %qT är inte en heltalstyp" #: cp/decl.c:7926 cp/decl.c:7953 #, gcc-internal-format msgid "size of array has non-integral type %qT" -msgstr "storlek på vektorn av typen %qT är inte en heltalstyp" +msgstr "storlek pÃ¥ vektorn av typen %qT är inte en heltalstyp" #: cp/decl.c:8003 #, gcc-internal-format msgid "size of array %qD is negative" -msgstr "storleken på vektorn %qD är negativ" +msgstr "storleken pÃ¥ vektorn %qD är negativ" #: cp/decl.c:8005 #, gcc-internal-format msgid "size of array is negative" -msgstr "storleken på vektorn är negativ" +msgstr "storleken pÃ¥ vektorn är negativ" #: cp/decl.c:8019 #, gcc-internal-format msgid "ISO C++ forbids zero-size array %qD" -msgstr "ISO C++ förbjuder vektor %qD med storlek noll" +msgstr "ISO C++ förbjuder vektor %qD med storlek noll" #: cp/decl.c:8021 #, gcc-internal-format msgid "ISO C++ forbids zero-size array" -msgstr "ISO C++ förbjuder vektor med storlek noll" +msgstr "ISO C++ förbjuder vektor med storlek noll" #: cp/decl.c:8033 #, gcc-internal-format msgid "size of array %qD is not an integral constant-expression" -msgstr "storlek på vektorn %qD är inte ett konstantuttryck av heltalstyp" +msgstr "storlek pÃ¥ vektorn %qD är inte ett konstantuttryck av heltalstyp" #: cp/decl.c:8036 #, gcc-internal-format msgid "size of array is not an integral constant-expression" -msgstr "storlek på vektorn är inte ett konstantuttryck av heltalstyp" +msgstr "storlek pÃ¥ vektorn är inte ett konstantuttryck av heltalstyp" #: cp/decl.c:8042 #, gcc-internal-format msgid "ISO C++ forbids variable length array %qD" -msgstr "ISO C++ förbjuder vektor %qD med variabel längd" +msgstr "ISO C++ förbjuder vektor %qD med variabel längd" #: cp/decl.c:8044 #, gcc-internal-format msgid "ISO C++ forbids variable length array" -msgstr "ISO C++ förbjuder vektor med variabel längd" +msgstr "ISO C++ förbjuder vektor med variabel längd" #: cp/decl.c:8050 #, gcc-internal-format msgid "variable length array %qD is used" -msgstr "vektor %qD med variabel längd används" +msgstr "vektor %qD med variabel längd används" #: cp/decl.c:8088 #, gcc-internal-format @@ -27958,9 +27962,9 @@ msgid "overflow in array dimension" msgstr "spill i vektordimension" #: cp/decl.c:8148 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "declaration of %qD as array of %<auto%>" -msgstr "deklaration av %qD som en vektor av void" +msgstr "deklaration av %qD som en vektor av %<auto%>" #: cp/decl.c:8156 #, gcc-internal-format @@ -28005,62 +28009,62 @@ msgstr "skapar vektor av funktionsmedlemmar" #: cp/decl.c:8193 #, gcc-internal-format msgid "declaration of %qD as multidimensional array must have bounds for all dimensions except the first" -msgstr "deklaration av %qD som flerdimensionell vektor måste ha gränser för alla dimensioner utom den första" +msgstr "deklaration av %qD som flerdimensionell vektor mÃ¥ste ha gränser för alla dimensioner utom den första" #: cp/decl.c:8197 #, gcc-internal-format msgid "multidimensional array must have bounds for all dimensions except the first" -msgstr "flerdimensionell vektor måste ha gränser för alla dimensioner utom den första" +msgstr "flerdimensionell vektor mÃ¥ste ha gränser för alla dimensioner utom den första" #: cp/decl.c:8232 #, gcc-internal-format msgid "return type specification for constructor invalid" -msgstr "en returtypsspecifikation för konstruerare är ogiltig" +msgstr "en returtypsspecifikation för konstruerare är ogiltig" #: cp/decl.c:8242 #, gcc-internal-format msgid "return type specification for destructor invalid" -msgstr "specifikation av returtyp för destruerare är ogiltigt" +msgstr "specifikation av returtyp för destruerare är ogiltigt" #: cp/decl.c:8255 #, gcc-internal-format msgid "return type specified for %<operator %T%>" -msgstr "returtyp angiven för %<operator %T%>" +msgstr "returtyp angiven för %<operator %T%>" #: cp/decl.c:8277 #, gcc-internal-format msgid "unnamed variable or field declared void" -msgstr "namnlös variabel eller fält deklarerad void" +msgstr "namnlös variabel eller fält deklarerad void" #: cp/decl.c:8284 #, gcc-internal-format msgid "variable or field declared void" -msgstr "variabel eller fält deklarerad void" +msgstr "variabel eller fält deklarerad void" #: cp/decl.c:8468 #, gcc-internal-format msgid "invalid use of qualified-name %<::%D%>" -msgstr "ogiltigt användning av kvalificerat namn %<::%D%>" +msgstr "ogiltigt användning av kvalificerat namn %<::%D%>" #: cp/decl.c:8471 #, gcc-internal-format msgid "invalid use of qualified-name %<%T::%D%>" -msgstr "ogiltig användning av kvalificerat namn %<%T::%D%>" +msgstr "ogiltig användning av kvalificerat namn %<%T::%D%>" #: cp/decl.c:8474 #, gcc-internal-format msgid "invalid use of qualified-name %<%D::%D%>" -msgstr "ogiltig användning av kvalificerat namn %<%D::%D%>" +msgstr "ogiltig användning av kvalificerat namn %<%D::%D%>" #: cp/decl.c:8483 #, gcc-internal-format msgid "%q#T is not a class or a namespace" -msgstr "%q#T är inte en klass eller namnrymd" +msgstr "%q#T är inte en klass eller namnrymd" #: cp/decl.c:8491 #, gcc-internal-format msgid "type %qT is not derived from type %qT" -msgstr "typ %qT är inte härledd från typen %qT" +msgstr "typ %qT är inte härledd frÃ¥n typen %qT" #: cp/decl.c:8507 cp/decl.c:8599 cp/decl.c:8608 cp/decl.c:9951 #, gcc-internal-format @@ -28075,7 +28079,7 @@ msgstr "deklaration av %qD som icke-medlem" #: cp/decl.c:8544 #, gcc-internal-format msgid "declarator-id missing; using reserved word %qD" -msgstr "deklarerar-id saknas, använder reserverat ord %qD" +msgstr "deklarerar-id saknas, använder reserverat ord %qD" #: cp/decl.c:8591 #, gcc-internal-format @@ -28083,24 +28087,24 @@ msgid "function definition does not declare parameters" msgstr "funktionsdefinition deklarerar inte parametrar" #: cp/decl.c:8616 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "declaration of %qD as %<typedef%>" -msgstr "malldeklaration av %<typedef%>" +msgstr "deklaration av %qD som %<typedef%>" #: cp/decl.c:8621 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "declaration of %qD as parameter" -msgstr "deklaration av %q+D skuggar en parameter" +msgstr "deklaration av %qD som en parameter" #: cp/decl.c:8654 #, gcc-internal-format msgid "%<constexpr%> cannot appear in a typedef declaration" -msgstr "%<constexpr%> kan inte förekomma i en typedef-deklaration" +msgstr "%<constexpr%> kan inte förekomma i en typedef-deklaration" #: cp/decl.c:8662 #, gcc-internal-format msgid "two or more data types in declaration of %qs" -msgstr "två eller fler datatyper i deklaration av %qs" +msgstr "tvÃ¥ eller fler datatyper i deklaration av %qs" #: cp/decl.c:8668 #, gcc-internal-format @@ -28110,92 +28114,92 @@ msgstr "motstridande specificerare i deklarationen av %qs" #: cp/decl.c:8740 cp/decl.c:8743 cp/decl.c:8746 #, gcc-internal-format msgid "ISO C++ forbids declaration of %qs with no type" -msgstr "ISO C++ förbjuder deklaration av %qs utan typ" +msgstr "ISO C++ förbjuder deklaration av %qs utan typ" #: cp/decl.c:8757 #, gcc-internal-format msgid "%<__int128%> is not supported by this target" -msgstr "%<__int128%> stödjs inte på denna målarkitektur" +msgstr "%<__int128%> stödjs inte pÃ¥ denna mÃ¥larkitektur" #: cp/decl.c:8762 #, gcc-internal-format msgid "ISO C++ does not support %<__int128%> for %qs" -msgstr "ISO C++ stödjer inte %<__int128%> för %qs" +msgstr "ISO C++ stödjer inte %<__int128%> för %qs" #: cp/decl.c:8783 cp/decl.c:8803 #, gcc-internal-format msgid "%<signed%> or %<unsigned%> invalid for %qs" -msgstr "%<signed%> eller %<unsigned%> är ogiltigt för %qs" +msgstr "%<signed%> eller %<unsigned%> är ogiltigt för %qs" #: cp/decl.c:8785 #, gcc-internal-format msgid "%<signed%> and %<unsigned%> specified together for %qs" -msgstr "%<signed%> och %<unsigned%> givna tillsammans för %qs" +msgstr "%<signed%> och %<unsigned%> givna tillsammans för %qs" #: cp/decl.c:8787 #, gcc-internal-format msgid "%<long long%> invalid for %qs" -msgstr "%<long long%> ogiltig för %qs" +msgstr "%<long long%> ogiltig för %qs" #: cp/decl.c:8789 #, gcc-internal-format msgid "%<long%> invalid for %qs" -msgstr "%<long%> ogiltig för %qs" +msgstr "%<long%> ogiltig för %qs" #: cp/decl.c:8791 #, gcc-internal-format msgid "%<short%> invalid for %qs" -msgstr "%<short%> ogiltig för %qs" +msgstr "%<short%> ogiltig för %qs" #: cp/decl.c:8793 #, gcc-internal-format msgid "%<long%> or %<short%> invalid for %qs" -msgstr "%<long%> eller %<short%> ogiltig för %qs" +msgstr "%<long%> eller %<short%> ogiltig för %qs" #: cp/decl.c:8795 #, gcc-internal-format msgid "%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs" -msgstr "%<long%>, %<int%>, %<short%> eller %<char%> ogiltig för %qs" +msgstr "%<long%>, %<int%>, %<short%> eller %<char%> ogiltig för %qs" #: cp/decl.c:8797 #, gcc-internal-format msgid "%<long%> or %<short%> specified with char for %qs" -msgstr "%<long%> eller %<short%> angiven med char för %qs" +msgstr "%<long%> eller %<short%> angiven med char för %qs" #: cp/decl.c:8799 #, gcc-internal-format msgid "%<long%> and %<short%> specified together for %qs" -msgstr "%<long%> och %<short%> angivna tillsammans för %qs" +msgstr "%<long%> och %<short%> angivna tillsammans för %qs" #: cp/decl.c:8805 #, gcc-internal-format msgid "%<short%> or %<long%> invalid for %qs" -msgstr "%<short%> eller %<long%> ogiltig för %qs" +msgstr "%<short%> eller %<long%> ogiltig för %qs" #: cp/decl.c:8813 #, gcc-internal-format msgid "long, short, signed or unsigned used invalidly for %qs" -msgstr "long, short, signed eller unsigned använd felaktigt för %qs" +msgstr "long, short, signed eller unsigned använd felaktigt för %qs" #: cp/decl.c:8881 #, gcc-internal-format msgid "complex invalid for %qs" -msgstr "complex ogiltig för %qs" +msgstr "complex ogiltig för %qs" #: cp/decl.c:8909 #, gcc-internal-format msgid "qualifiers are not allowed on declaration of %<operator %T%>" -msgstr "kvalificerare är inte tillåtna på deklaration av %<operator %T%>" +msgstr "kvalificerare är inte tillÃ¥tna pÃ¥ deklaration av %<operator %T%>" #: cp/decl.c:8930 #, gcc-internal-format msgid "member %qD cannot be declared both virtual and static" -msgstr "medlem %qD kan inte deklareras både virtual och static" +msgstr "medlem %qD kan inte deklareras bÃ¥de virtual och static" #: cp/decl.c:8938 #, gcc-internal-format msgid "%<%T::%D%> is not a valid declarator" -msgstr "%<%T::%D%> är inte en giltig deklarerare" +msgstr "%<%T::%D%> är inte en giltig deklarerare" #: cp/decl.c:8947 #, gcc-internal-format @@ -28205,7 +28209,7 @@ msgstr "typedef-deklaration ogiltig i parameterdeklaration" #: cp/decl.c:8952 #, gcc-internal-format msgid "storage class specified for template parameter %qs" -msgstr "lagringsklass angiven för mallparameter %qs" +msgstr "lagringsklass angiven för mallparameter %qs" #: cp/decl.c:8958 #, gcc-internal-format @@ -28220,7 +28224,7 @@ msgstr "en parameter kan inte deklareras %<constexpr%>" #: cp/decl.c:8973 #, gcc-internal-format msgid "%<virtual%> outside class declaration" -msgstr "%<virtual%> utanför klassdeklaration" +msgstr "%<virtual%> utanför klassdeklaration" #: cp/decl.c:8991 #, gcc-internal-format @@ -28230,64 +28234,64 @@ msgstr "flera lagringsklasser i deklaration av %qs" #: cp/decl.c:9014 #, gcc-internal-format msgid "storage class specified for %qs" -msgstr "lagringsklass angiven för %qs" +msgstr "lagringsklass angiven för %qs" #: cp/decl.c:9018 #, gcc-internal-format msgid "storage class specified for parameter %qs" -msgstr "lagringsklass angiven för parameter %qs" +msgstr "lagringsklass angiven för parameter %qs" #: cp/decl.c:9031 #, gcc-internal-format msgid "nested function %qs declared %<extern%>" -msgstr "nästad funktion %qs är deklarerad %<extern%>" +msgstr "nästad funktion %qs är deklarerad %<extern%>" #: cp/decl.c:9035 #, gcc-internal-format msgid "top-level declaration of %qs specifies %<auto%>" -msgstr "toppnivådeklaration av %qs anger %<auto%>" +msgstr "toppnivÃ¥deklaration av %qs anger %<auto%>" #: cp/decl.c:9041 #, gcc-internal-format msgid "function-scope %qs implicitly auto and declared %<__thread%>" -msgstr "funktionsdefinitionsområde %qs implicit auto och deklarerat %<__thread%>" +msgstr "funktionsdefinitionsomrÃ¥de %qs implicit auto och deklarerat %<__thread%>" #: cp/decl.c:9048 #, gcc-internal-format msgid "storage class specifiers invalid in friend function declarations" -msgstr "ogiltig specificerare av lagringsklass i vänfunktionsdeklarationer" +msgstr "ogiltig specificerare av lagringsklass i vänfunktionsdeklarationer" #: cp/decl.c:9142 #, gcc-internal-format msgid "%qs declared as function returning a function" -msgstr "%qs är deklarerad som en funktion som returnerar en funktion" +msgstr "%qs är deklarerad som en funktion som returnerar en funktion" #: cp/decl.c:9147 #, gcc-internal-format msgid "%qs declared as function returning an array" -msgstr "%qs är deklarerad som en funktion som returnerar en vektor" +msgstr "%qs är deklarerad som en funktion som returnerar en vektor" #: cp/decl.c:9173 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs function uses %<auto%> type specifier without trailing return type" -msgstr "funktionen %qs använder typspecificeraren %<auto%> utan sen returtyp" +msgstr "funktionen %qs använder typspecificeraren %<auto%> utan avslutande returtyp" #: cp/decl.c:9179 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs function with trailing return type has %qT as its type rather than plain %<auto%>" -msgstr "funktionen %qs med sen returtyp har %qT som sin typ istället för bara %<auto%>" +msgstr "funktionen %qs med avslutande returtyp har %qT som sin typ istället för bara %<auto%>" #. Not using maybe_warn_cpp0x because this should #. always be an error. #: cp/decl.c:9190 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "trailing return type only available with -std=c++11 or -std=gnu++11" -msgstr "inline-namnrymdet är endast tillgängliga med -std=c++0x eller -std=gnu++0x" +msgstr "avslutande returtyp är endast tillgänglig med -std=c++11 eller -std=gnu++11" #: cp/decl.c:9193 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs function with trailing return type not declared with %<auto%> type specifier" -msgstr "funktionen %qs med sen returtyp är inte deklarerad med typspecificeraren %<auto%>" +msgstr "funktionen %qs med avslutande returtyp är inte deklarerad med typspecificeraren %<auto%>" #: cp/decl.c:9226 #, gcc-internal-format @@ -28295,19 +28299,19 @@ msgid "destructor cannot be static member function" msgstr "destruerare kan inte vara en statisk medlemsfunktion" #: cp/decl.c:9227 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "constructor cannot be static member function" -msgstr "destruerare kan inte vara en statisk medlemsfunktion" +msgstr "konstruerare kan inte vara en statisk medlemsfunktion" #: cp/decl.c:9231 #, gcc-internal-format msgid "destructors may not be cv-qualified" -msgstr "destruerare får inte vara cv-kvalificerade" +msgstr "destruerare fÃ¥r inte vara cv-kvalificerade" #: cp/decl.c:9232 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "constructors may not be cv-qualified" -msgstr "destruerare får inte vara cv-kvalificerade" +msgstr "konstruerare fÃ¥r inte vara cv-kvalificerade" #: cp/decl.c:9249 #, gcc-internal-format @@ -28317,98 +28321,98 @@ msgstr "konstruerare kan inte deklareras virtual" #: cp/decl.c:9262 #, gcc-internal-format msgid "can%'t initialize friend function %qs" -msgstr "det går inte att initiera vänfunktionen %qs" +msgstr "det gÃ¥r inte att initiera vänfunktionen %qs" #. Cannot be both friend and virtual. #: cp/decl.c:9266 #, gcc-internal-format msgid "virtual functions cannot be friends" -msgstr "virtuella funktioner kan inte vara vänner" +msgstr "virtuella funktioner kan inte vara vänner" #: cp/decl.c:9270 #, gcc-internal-format msgid "friend declaration not in class definition" -msgstr "vändeklaration är inte i klassdefinition" +msgstr "vändeklaration är inte i klassdefinition" #: cp/decl.c:9272 #, gcc-internal-format msgid "can%'t define friend function %qs in a local class definition" -msgstr "det går inte att definiera vänfunktion %qs i en lokal klassdefinition" +msgstr "det gÃ¥r inte att definiera vänfunktion %qs i en lokal klassdefinition" #: cp/decl.c:9293 #, gcc-internal-format msgid "destructors may not have parameters" -msgstr "destruerare får inte ha parametrar" +msgstr "destruerare fÃ¥r inte ha parametrar" #: cp/decl.c:9312 #, gcc-internal-format msgid "cannot declare pointer to %q#T" -msgstr "det går inte att deklarera pekare till %q#T" +msgstr "det gÃ¥r inte att deklarera pekare till %q#T" #: cp/decl.c:9325 cp/decl.c:9332 #, gcc-internal-format msgid "cannot declare reference to %q#T" -msgstr "det går inte att deklarera referens till %q#T" +msgstr "det gÃ¥r inte att deklarera referens till %q#T" #: cp/decl.c:9334 #, gcc-internal-format msgid "cannot declare pointer to %q#T member" -msgstr "det går inte att deklarera pekare medlem av %q#T" +msgstr "det gÃ¥r inte att deklarera pekare medlem av %q#T" #: cp/decl.c:9357 #, gcc-internal-format msgid "cannot declare reference to qualified function type %qT" -msgstr "det går inte att deklarera en referens till en kvalificerad funktionstyp %qT" +msgstr "det gÃ¥r inte att deklarera en referens till en kvalificerad funktionstyp %qT" #: cp/decl.c:9358 #, gcc-internal-format msgid "cannot declare pointer to qualified function type %qT" -msgstr "det går inte att deklarera en pekare till en kvalificerad funktionstyp %qT" +msgstr "det gÃ¥r inte att deklarera en pekare till en kvalificerad funktionstyp %qT" #: cp/decl.c:9432 #, gcc-internal-format msgid "cannot declare reference to %q#T, which is not a typedef or a template type argument" -msgstr "det går inte att deklarera en referens till %q#T, som inte är ett typedef- eller ett malltypargument" +msgstr "det gÃ¥r inte att deklarera en referens till %q#T, som inte är ett typedef- eller ett malltypargument" #: cp/decl.c:9485 #, gcc-internal-format msgid "both %<const%> and %<constexpr%> cannot be used here" -msgstr "man kan inte använda både %<const%> och %<constexpr%> här" +msgstr "man kan inte använda bÃ¥de %<const%> och %<constexpr%> här" #: cp/decl.c:9487 #, gcc-internal-format msgid "both %<volatile%> and %<constexpr%> cannot be used here" -msgstr "det går inte att använda både %<volatile%> och %<constexpr%> här" +msgstr "det gÃ¥r inte att använda bÃ¥de %<volatile%> och %<constexpr%> här" #: cp/decl.c:9499 #, gcc-internal-format msgid "template-id %qD used as a declarator" -msgstr "mall-id %qD använd som en deklarerare" +msgstr "mall-id %qD använd som en deklarerare" #: cp/decl.c:9550 #, gcc-internal-format msgid "member functions are implicitly friends of their class" -msgstr "medlemsfunktioner är implicit vänner till sin klass" +msgstr "medlemsfunktioner är implicit vänner till sin klass" #: cp/decl.c:9555 #, gcc-internal-format msgid "extra qualification %<%T::%> on member %qs" -msgstr "extra kvalifikation %<%T::%> på medlem %qs" +msgstr "extra kvalifikation %<%T::%> pÃ¥ medlem %qs" #: cp/decl.c:9585 #, gcc-internal-format msgid "cannot define member function %<%T::%s%> within %<%T%>" -msgstr "det går inte att definiera medlemsfunktion %<%T::%s%> inuti %<%T%>" +msgstr "det gÃ¥r inte att definiera medlemsfunktion %<%T::%s%> inuti %<%T%>" #: cp/decl.c:9587 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot declare member function %<%T::%s%> within %<%T%>" -msgstr "det går inte att definiera medlemsfunktion %<%T::%s%> inuti %<%T%>" +msgstr "det gÃ¥r inte att deklarera medlemsfunktionen %<%T::%s%> inuti %<%T%>" #: cp/decl.c:9596 #, gcc-internal-format msgid "cannot declare member %<%T::%s%> within %qT" -msgstr "det går inte att deklarera medlem %<%T::%s%> inuti %qT" +msgstr "det gÃ¥r inte att deklarera medlem %<%T::%s%> inuti %qT" #: cp/decl.c:9622 #, gcc-internal-format @@ -28418,17 +28422,17 @@ msgstr "icke-parameter %qs kan inte vara ett parameterpaket" #: cp/decl.c:9632 #, gcc-internal-format msgid "size of array %qs is too large" -msgstr "storleken på vektorn %qs är för stor" +msgstr "storleken pÃ¥ vektorn %qs är för stor" #: cp/decl.c:9643 #, gcc-internal-format msgid "data member may not have variably modified type %qT" -msgstr "datamedlem får inte ha variabel typ %qT" +msgstr "datamedlem fÃ¥r inte ha variabel typ %qT" #: cp/decl.c:9645 #, gcc-internal-format msgid "parameter may not have variably modified type %qT" -msgstr "parameter får inte ha variabel typ %qT" +msgstr "parameter fÃ¥r inte ha variabel typ %qT" #. [dcl.fct.spec] The explicit specifier shall only be used in #. declarations of constructors within a class definition. @@ -28475,67 +28479,67 @@ msgstr "typedef deklarerad %<auto%>" #: cp/decl.c:9732 #, gcc-internal-format msgid "typedef name may not be a nested-name-specifier" -msgstr "typedef-namn får inte vara en nästad-namnspecificerare" +msgstr "typedef-namn fÃ¥r inte vara en nästad-namnspecificerare" #: cp/decl.c:9750 #, gcc-internal-format msgid "ISO C++ forbids nested type %qD with same name as enclosing class" -msgstr "ISO C++ förbjuder nästad typ %qD med samma namn som en omgivande klass" +msgstr "ISO C++ förbjuder nästad typ %qD med samma namn som en omgivande klass" #: cp/decl.c:9852 #, gcc-internal-format msgid "qualified function types cannot be used to declare static member functions" -msgstr "kvalificerade funktiontyper kan inte användas för att deklarera statiska medlemsfunktioner" +msgstr "kvalificerade funktiontyper kan inte användas för att deklarera statiska medlemsfunktioner" #: cp/decl.c:9854 #, gcc-internal-format msgid "qualified function types cannot be used to declare free functions" -msgstr "kvalificerade funktiontyper kan inte användas för att deklarera fria funktioner" +msgstr "kvalificerade funktiontyper kan inte användas för att deklarera fria funktioner" #: cp/decl.c:9881 #, gcc-internal-format msgid "type qualifiers specified for friend class declaration" -msgstr "typkvalificerare angivna för vänklassdeklaration" +msgstr "typkvalificerare angivna för vänklassdeklaration" #: cp/decl.c:9886 #, gcc-internal-format msgid "%<inline%> specified for friend class declaration" -msgstr "%<inline%> angivet för vänklassdeklaration" +msgstr "%<inline%> angivet för vänklassdeklaration" #: cp/decl.c:9894 #, gcc-internal-format msgid "template parameters cannot be friends" -msgstr "mallparametrar kan inte vara vänner" +msgstr "mallparametrar kan inte vara vänner" #: cp/decl.c:9896 #, gcc-internal-format msgid "friend declaration requires class-key, i.e. %<friend class %T::%D%>" -msgstr "vändeklaration kräver klassnyckel, d.v.s. %<friend class %T::%D%>" +msgstr "vändeklaration kräver klassnyckel, d.v.s. %<friend class %T::%D%>" #: cp/decl.c:9900 #, gcc-internal-format msgid "friend declaration requires class-key, i.e. %<friend %#T%>" -msgstr "vändeklaration kräver klassnyckel, d.v.s. %<friend %#T%>" +msgstr "vändeklaration kräver klassnyckel, d.v.s. %<friend %#T%>" #: cp/decl.c:9913 #, gcc-internal-format msgid "trying to make class %qT a friend of global scope" -msgstr "försöker göra klassen %qT en vän med global räckvidd" +msgstr "försöker göra klassen %qT en vän med global räckvidd" #: cp/decl.c:9931 #, gcc-internal-format msgid "invalid qualifiers on non-member function type" -msgstr "ogiltiga kvalificerare på typ som inte är medlemsfunktion" +msgstr "ogiltiga kvalificerare pÃ¥ typ som inte är medlemsfunktion" #: cp/decl.c:9941 #, gcc-internal-format msgid "abstract declarator %qT used as declaration" -msgstr "abstrakt deklarerare %qT använd som deklaration" +msgstr "abstrakt deklarerare %qT använd som deklaration" #: cp/decl.c:9970 #, gcc-internal-format msgid "cannot use %<::%> in parameter declaration" -msgstr "det går inte att använda %<::%> i parameterdeklaration" +msgstr "det gÃ¥r inte att använda %<::%> i parameterdeklaration" #: cp/decl.c:9974 #, gcc-internal-format @@ -28543,15 +28547,15 @@ msgid "parameter declared %<auto%>" msgstr "parametern deklarerad %<auto%>" #: cp/decl.c:10016 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "non-static data member declared %<auto%>" -msgstr "ickestatisk datamedlem %qE deklarerad %<constexpr%>" +msgstr "ej statisk datamedlem deklarerad %<auto%>" #. Something like struct S { int N::j; }; #: cp/decl.c:10038 #, gcc-internal-format msgid "invalid use of %<::%>" -msgstr "ogiltigt användning av %<::%>" +msgstr "ogiltigt användning av %<::%>" #: cp/decl.c:10060 #, gcc-internal-format @@ -28566,12 +28570,12 @@ msgstr "funktionen %qD deklarerad virtuell inuti en union" #: cp/decl.c:10078 #, gcc-internal-format msgid "%qD cannot be declared virtual, since it is always static" -msgstr "%qD kan inte deklareras virtuell, eftersom den redan är statisk" +msgstr "%qD kan inte deklareras virtuell, eftersom den redan är statisk" #: cp/decl.c:10094 #, gcc-internal-format msgid "expected qualified name in friend declaration for destructor %qD" -msgstr "kvalificerat namn förväntades i vändeklaration för destruerare %qD" +msgstr "kvalificerat namn förväntades i vändeklaration för destruerare %qD" #: cp/decl.c:10101 #, gcc-internal-format @@ -28586,17 +28590,17 @@ msgstr "en destruerare kan inte vara %<constexpr%>" #: cp/decl.c:10113 #, gcc-internal-format msgid "expected qualified name in friend declaration for constructor %qD" -msgstr "kvalificerat namn förväntades i vändeklaration för konstruerare %qD" +msgstr "kvalificerat namn förväntades i vändeklaration för konstruerare %qD" #: cp/decl.c:10159 #, gcc-internal-format msgid "field %qD has incomplete type" -msgstr "fält %qD har ofullständig typ" +msgstr "fält %qD har ofullständig typ" #: cp/decl.c:10161 #, gcc-internal-format msgid "name %qT has incomplete type" -msgstr "namnet %qT har ofullständig typ" +msgstr "namnet %qT har ofullständig typ" #: cp/decl.c:10170 #, gcc-internal-format @@ -28606,12 +28610,12 @@ msgstr " i instansiering av mallen %qT" #: cp/decl.c:10179 #, gcc-internal-format msgid "%qE is neither function nor member function; cannot be declared friend" -msgstr "%qE är varken en funktion eller medlemsfunktion, kan inte deklareras som vän" +msgstr "%qE är varken en funktion eller medlemsfunktion, kan inte deklareras som vän" #: cp/decl.c:10231 #, gcc-internal-format msgid "constexpr static data member %qD must have an initializer" -msgstr "statisk constexpr-datamedlemmen %qD måste ha en initierare" +msgstr "statisk constexpr-datamedlemmen %qD mÃ¥ste ha en initierare" #: cp/decl.c:10240 #, gcc-internal-format @@ -28621,32 +28625,32 @@ msgstr "ickestatisk datamedlem %qE deklarerad %<constexpr%>" #: cp/decl.c:10290 #, gcc-internal-format msgid "storage class %<auto%> invalid for function %qs" -msgstr "lagringsklassen %<auto%> är ogiltig för funktionen %qs" +msgstr "lagringsklassen %<auto%> är ogiltig för funktionen %qs" #: cp/decl.c:10292 #, gcc-internal-format msgid "storage class %<register%> invalid for function %qs" -msgstr "lagringsklassen %<register%> är ogiltig för funktionen %qs" +msgstr "lagringsklassen %<register%> är ogiltig för funktionen %qs" #: cp/decl.c:10294 #, gcc-internal-format msgid "storage class %<__thread%> invalid for function %qs" -msgstr "lagringsklassen %<__thread%> är ogiltig för funktionen %qs" +msgstr "lagringsklassen %<__thread%> är ogiltig för funktionen %qs" #: cp/decl.c:10297 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "virt-specifiers in %qs not allowed outside a class definition" -msgstr "en asm-specifikation är inte tillåten på en funktionsdefinition" +msgstr "virt-specificerare i %qs är inte tillÃ¥tet utanför en klassdefinition" #: cp/decl.c:10308 #, gcc-internal-format msgid "%<static%> specified invalid for function %qs declared out of global scope" -msgstr "specificerare %<static%> är ogiltigt för funktion %qs deklarerad utanför global räckvidd" +msgstr "specificerare %<static%> är ogiltigt för funktion %qs deklarerad utanför global räckvidd" #: cp/decl.c:10312 #, gcc-internal-format msgid "%<inline%> specifier invalid for function %qs declared out of global scope" -msgstr "specificerare %<inline%> är ogiltig för funktionen %qs deklarerad utanför global räckvidd" +msgstr "specificerare %<inline%> är ogiltig för funktionen %qs deklarerad utanför global räckvidd" #: cp/decl.c:10320 #, gcc-internal-format @@ -28656,17 +28660,17 @@ msgstr "virtuell icke klassfunktion %qs" #: cp/decl.c:10327 #, gcc-internal-format msgid "%qs defined in a non-class scope" -msgstr "%qs definierat utan att vara i klassräckvidd" +msgstr "%qs definierad utan att vara i klassräckvidd" #: cp/decl.c:10328 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs declared in a non-class scope" -msgstr "%qs definierat utan att vara i klassräckvidd" +msgstr "%qs deklarerad utan att vara i klassräckvidd" #: cp/decl.c:10356 #, gcc-internal-format msgid "cannot declare member function %qD to have static linkage" -msgstr "det går inte deklarera medlemsfunktionen %qD att ha statisk länkklass" +msgstr "det gÃ¥r inte deklarera medlemsfunktionen %qD att ha statisk länkklass" #. FIXME need arm citation #: cp/decl.c:10363 @@ -28677,7 +28681,7 @@ msgstr "kan inte deklarera en statisk funktion i en annan funktion" #: cp/decl.c:10393 #, gcc-internal-format msgid "%<static%> may not be used when defining (as opposed to declaring) a static data member" -msgstr "%<static%> får inte användas vid definition (till skillnad mot deklaration) av statisk datamedlem" +msgstr "%<static%> fÃ¥r inte användas vid definition (till skillnad mot deklaration) av statisk datamedlem" #: cp/decl.c:10400 #, gcc-internal-format @@ -28687,12 +28691,12 @@ msgstr "statisk medlem %qD deklarerad %<register%>" #: cp/decl.c:10406 #, gcc-internal-format msgid "cannot explicitly declare member %q#D to have extern linkage" -msgstr "det går inte att deklarera medlem %q#D att ha extern länkklass" +msgstr "det gÃ¥r inte att deklarera medlem %q#D att ha extern länkklass" #: cp/decl.c:10413 #, gcc-internal-format msgid "declaration of constexpr variable %qD is not a definition" -msgstr "deklarationen av constexpr-variabeln %qD är inte en definition" +msgstr "deklarationen av constexpr-variabeln %qD är inte en definition" #: cp/decl.c:10426 #, gcc-internal-format @@ -28702,22 +28706,22 @@ msgstr "%qs initierad och deklarerad %<extern%>" #: cp/decl.c:10430 #, gcc-internal-format msgid "%qs has both %<extern%> and initializer" -msgstr "%qs har både %<extern%> och initierare" +msgstr "%qs har bÃ¥de %<extern%> och initierare" #: cp/decl.c:10557 #, gcc-internal-format msgid "default argument for %q#D has type %qT" -msgstr "standardargumentet för %q#D har typen %qT" +msgstr "standardargumentet för %q#D har typen %qT" #: cp/decl.c:10560 #, gcc-internal-format msgid "default argument for parameter of type %qT has type %qT" -msgstr "standardargumentet för parameter av typen %qT har typen %qT" +msgstr "standardargumentet för parameter av typen %qT har typen %qT" #: cp/decl.c:10576 #, gcc-internal-format msgid "default argument %qE uses local variable %qD" -msgstr "standardargument %qE använder lokal variabel %qD" +msgstr "standardargument %qE använder lokal variabel %qD" #: cp/decl.c:10664 #, gcc-internal-format @@ -28732,12 +28736,12 @@ msgstr "parameter %qD ogiltigt deklarerad metodtyp" #: cp/decl.c:10717 #, gcc-internal-format msgid "parameter %qD includes pointer to array of unknown bound %qT" -msgstr "parameter %qD inkluderar pekare till vektor %qT med okänd gräns" +msgstr "parameter %qD inkluderar pekare till vektor %qT med okänd gräns" #: cp/decl.c:10719 #, gcc-internal-format msgid "parameter %qD includes reference to array of unknown bound %qT" -msgstr "parameter %qD inkluderar referens till vektor %qT med okänd gräns" +msgstr "parameter %qD inkluderar referens till vektor %qT med okänd gräns" #. [class.copy] #. @@ -28757,93 +28761,93 @@ msgstr "parameter %qD inkluderar referens till vektor %qT med okänd gräns" #: cp/decl.c:10960 #, gcc-internal-format msgid "invalid constructor; you probably meant %<%T (const %T&)%>" -msgstr "ogiltig konstruerare, du menade förmodligen %<%T (const %T&)%>" +msgstr "ogiltig konstruerare, du menade förmodligen %<%T (const %T&)%>" #: cp/decl.c:11082 #, gcc-internal-format msgid "%qD may not be declared within a namespace" -msgstr "%qD är kanske inte deklarerad i en namnrymd" +msgstr "%qD är kanske inte deklarerad i en namnrymd" #: cp/decl.c:11087 #, gcc-internal-format msgid "%qD may not be declared as static" -msgstr "%qD får inte deklareras som statisk" +msgstr "%qD fÃ¥r inte deklareras som statisk" #: cp/decl.c:11113 #, gcc-internal-format msgid "%qD must be a nonstatic member function" -msgstr "%qD måste vara en icke-statisk medlemsfunktion" +msgstr "%qD mÃ¥ste vara en icke-statisk medlemsfunktion" #: cp/decl.c:11122 #, gcc-internal-format msgid "%qD must be either a non-static member function or a non-member function" -msgstr "%qD måste vara antingen en medlemsfunktion som inte är statisk eller funktion som inte är medlem" +msgstr "%qD mÃ¥ste vara antingen en medlemsfunktion som inte är statisk eller funktion som inte är medlem" #: cp/decl.c:11144 #, gcc-internal-format msgid "%qD must have an argument of class or enumerated type" -msgstr "%qD måste ha ett argument med klass- eller uppräkningstyp" +msgstr "%qD mÃ¥ste ha ett argument med klass- eller uppräkningstyp" #: cp/decl.c:11173 #, gcc-internal-format msgid "conversion to a reference to void will never use a type conversion operator" -msgstr "konvertering till en referens till void kommer aldrig använda en typkonverteringsoperator" +msgstr "konvertering till en referens till void kommer aldrig använda en typkonverteringsoperator" #: cp/decl.c:11175 #, gcc-internal-format msgid "conversion to void will never use a type conversion operator" -msgstr "konvertering till void kommer aldrig använda en typkonverteringsoperator" +msgstr "konvertering till void kommer aldrig använda en typkonverteringsoperator" #: cp/decl.c:11182 #, gcc-internal-format msgid "conversion to a reference to the same type will never use a type conversion operator" -msgstr "konvertering till en referens till samma typ kommer aldrig använda en typkonverteringsoperator" +msgstr "konvertering till en referens till samma typ kommer aldrig använda en typkonverteringsoperator" #: cp/decl.c:11184 #, gcc-internal-format msgid "conversion to the same type will never use a type conversion operator" -msgstr "konvertering till samma typ kommer aldrig använda en typkonverteringsoperator" +msgstr "konvertering till samma typ kommer aldrig använda en typkonverteringsoperator" #: cp/decl.c:11192 #, gcc-internal-format msgid "conversion to a reference to a base class will never use a type conversion operator" -msgstr "konvertering till en referens till en basklass kommer aldrig använda en typkonverteringsoperator" +msgstr "konvertering till en referens till en basklass kommer aldrig använda en typkonverteringsoperator" #: cp/decl.c:11194 #, gcc-internal-format msgid "conversion to a base class will never use a type conversion operator" -msgstr "konvertering till en basklass kommer aldrig använda en typkonverteringsoperator" +msgstr "konvertering till en basklass kommer aldrig använda en typkonverteringsoperator" #. 13.4.0.3 #: cp/decl.c:11203 #, gcc-internal-format msgid "ISO C++ prohibits overloading operator ?:" -msgstr "ISO C++ förhindrar överlagring av operatorn ?:" +msgstr "ISO C++ förhindrar överlagring av operatorn ?:" #: cp/decl.c:11208 #, gcc-internal-format msgid "%qD must not have variable number of arguments" -msgstr "%qD får inte ha variabelt antal argument" +msgstr "%qD fÃ¥r inte ha variabelt antal argument" #: cp/decl.c:11259 #, gcc-internal-format msgid "postfix %qD must take %<int%> as its argument" -msgstr "postfix %qD måste ta %<int%> som sitt argument" +msgstr "postfix %qD mÃ¥ste ta %<int%> som sitt argument" #: cp/decl.c:11262 #, gcc-internal-format msgid "postfix %qD must take %<int%> as its second argument" -msgstr "postfix %qD måste ta %<int%> som sitt andra argument" +msgstr "postfix %qD mÃ¥ste ta %<int%> som sitt andra argument" #: cp/decl.c:11270 #, gcc-internal-format msgid "%qD must take either zero or one argument" -msgstr "%qD måste ta antingen noll eller ett argument" +msgstr "%qD mÃ¥ste ta antingen noll eller ett argument" #: cp/decl.c:11272 #, gcc-internal-format msgid "%qD must take either one or two arguments" -msgstr "%qD måste ta antingen ett eller två argument" +msgstr "%qD mÃ¥ste ta antingen ett eller tvÃ¥ argument" #: cp/decl.c:11294 #, gcc-internal-format @@ -28858,27 +28862,27 @@ msgstr "postfix %qD skall returnera %qT" #: cp/decl.c:11309 #, gcc-internal-format msgid "%qD must take %<void%>" -msgstr "%qD måste ta %<void%>" +msgstr "%qD mÃ¥ste ta %<void%>" #: cp/decl.c:11311 cp/decl.c:11320 #, gcc-internal-format msgid "%qD must take exactly one argument" -msgstr "%qD måste ta exakt ett argument" +msgstr "%qD mÃ¥ste ta exakt ett argument" #: cp/decl.c:11322 #, gcc-internal-format msgid "%qD must take exactly two arguments" -msgstr "%qD måste ta exakt två argument" +msgstr "%qD mÃ¥ste ta exakt tvÃ¥ argument" #: cp/decl.c:11331 #, gcc-internal-format msgid "user-defined %qD always evaluates both arguments" -msgstr "användardefinierad %qD beräknar alltid båda argumenten" +msgstr "användardefinierad %qD beräknar alltid bÃ¥da argumenten" #: cp/decl.c:11345 #, gcc-internal-format msgid "%qD should return by value" -msgstr "%qD skall returnera som värde" +msgstr "%qD skall returnera som värde" #: cp/decl.c:11356 cp/decl.c:11361 #, gcc-internal-format @@ -28888,22 +28892,22 @@ msgstr "%qD kan inte ha standardargument" #: cp/decl.c:11422 #, gcc-internal-format msgid "using template type parameter %qT after %qs" -msgstr "malltypparametern %qT används efter %qs" +msgstr "malltypparametern %qT används efter %qs" #: cp/decl.c:11444 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "using alias template specialization %qT after %qs" -msgstr "tvetydig mallspecialisering %qD för %q+D" +msgstr "användning av aliasmallspecialisering %qT efter %qs" #: cp/decl.c:11447 #, gcc-internal-format msgid "using typedef-name %qD after %qs" -msgstr "typedef-namnet %qD används efter %qs" +msgstr "typedef-namnet %qD används efter %qs" #: cp/decl.c:11449 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD has a previous declaration here" -msgstr "%q+D har en tidigare deklaration här" +msgstr "%qD har en tidigare deklaration här" #: cp/decl.c:11457 #, gcc-internal-format @@ -28913,7 +28917,7 @@ msgstr "%qT refererad till som %qs" #: cp/decl.c:11458 cp/decl.c:11465 #, gcc-internal-format msgid "%q+T has a previous declaration here" -msgstr "%q+T har en tidigare deklaration här" +msgstr "%q+T har en tidigare deklaration här" #: cp/decl.c:11464 #, gcc-internal-format @@ -28930,23 +28934,23 @@ msgstr "%qT refererad till som enum" #: cp/decl.c:11479 #, gcc-internal-format msgid "template argument required for %<%s %T%>" -msgstr "mallargument krävs för %<%s %T%>" +msgstr "mallargument krävs för %<%s %T%>" #: cp/decl.c:11527 cp/name-lookup.c:3049 #, gcc-internal-format msgid "%qD has the same name as the class in which it is declared" -msgstr "%qD har samma namn som klassen den är deklarerad i" +msgstr "%qD har samma namn som klassen den är deklarerad i" #: cp/decl.c:11557 cp/name-lookup.c:2548 cp/name-lookup.c:3373 #: cp/name-lookup.c:3418 cp/parser.c:5054 cp/parser.c:20501 #, gcc-internal-format msgid "reference to %qD is ambiguous" -msgstr "referens till %qD är tvetydig" +msgstr "referens till %qD är tvetydig" #: cp/decl.c:11669 #, gcc-internal-format msgid "use of enum %q#D without previous declaration" -msgstr "enum %q#D används utan tidigare deklaration" +msgstr "enum %q#D används utan tidigare deklaration" #: cp/decl.c:11690 #, gcc-internal-format @@ -28961,7 +28965,7 @@ msgstr "tidigare deklaration %q+D" #: cp/decl.c:11825 #, gcc-internal-format msgid "derived union %qT invalid" -msgstr "härledd unionen %qT ogiltig" +msgstr "härledd unionen %qT ogiltig" #: cp/decl.c:11834 #, gcc-internal-format @@ -28976,7 +28980,7 @@ msgstr "Javaklass %qT kan inte ha virtuella baser" #: cp/decl.c:11865 #, gcc-internal-format msgid "base type %qT fails to be a struct or class type" -msgstr "bastyp %qT är ingen post- eller klasstyp" +msgstr "bastyp %qT är ingen post- eller klasstyp" #: cp/decl.c:11898 #, gcc-internal-format @@ -28991,17 +28995,17 @@ msgstr "upprepat bastyp %qT ogiltig" #: cp/decl.c:12024 #, gcc-internal-format msgid "scoped/unscoped mismatch in enum %q#T" -msgstr "uppräkningstyp med/utan räckviddsbegränsning stämmer inte överens för enum %q#T" +msgstr "uppräkningstyp med/utan räckviddsbegränsning stämmer inte överens för enum %q#T" #: cp/decl.c:12027 cp/decl.c:12035 cp/decl.c:12047 cp/parser.c:14514 #, gcc-internal-format msgid "previous definition here" -msgstr "tidigare definition här" +msgstr "tidigare definition här" #: cp/decl.c:12032 #, gcc-internal-format msgid "underlying type mismatch in enum %q#T" -msgstr "underliggande typ stämmer inte överens i enum %q#T" +msgstr "underliggande typ stämmer inte överens i enum %q#T" #: cp/decl.c:12044 #, gcc-internal-format @@ -29011,7 +29015,7 @@ msgstr "olika underliggande typ i enum %q#T" #: cp/decl.c:12111 #, gcc-internal-format msgid "underlying type %<%T%> of %<%T%> must be an integral type" -msgstr "underliggande typ %<%T%> till %<%T%> måste vara en heltalstyp" +msgstr "underliggande typ %<%T%> till %<%T%> mÃ¥ste vara en heltalstyp" #. DR 377 #. @@ -29020,32 +29024,32 @@ msgstr "underliggande typ %<%T%> till %<%T%> måste vara en heltalstyp" #: cp/decl.c:12245 #, gcc-internal-format msgid "no integral type can represent all of the enumerator values for %qT" -msgstr "ingen heltalstyp kan representera alla uppräkningsvärdena i %qT" +msgstr "ingen heltalstyp kan representera alla uppräkningsvärdena i %qT" #: cp/decl.c:12380 #, gcc-internal-format msgid "enumerator value for %qD is not an integer constant" -msgstr "uppräkningsvärde för %qD är inte en heltalskonstant" +msgstr "uppräkningsvärde för %qD är inte en heltalskonstant" #: cp/decl.c:12430 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "incremented enumerator value is too large for %<unsigned long%>" -msgstr "heltalskonstant är för stor för typen %<unsigned long%>" +msgstr "ökat uppräkningsvärde är för stort för %<unsigned long%>" #: cp/decl.c:12442 #, gcc-internal-format msgid "overflow in enumeration values at %qD" -msgstr "överspill i uppräkningsvärden vid %qD" +msgstr "överspill i uppräkningsvärden vid %qD" #: cp/decl.c:12462 #, gcc-internal-format msgid "enumerator value %E is too large for underlying type %<%T%>" -msgstr "uppräkningsvärde %E är för stort för den underliggande typen %<%T%>" +msgstr "uppräkningsvärde %E är för stort för den underliggande typen %<%T%>" #: cp/decl.c:12559 #, gcc-internal-format msgid "return type %q#T is incomplete" -msgstr "returtypen %q#T är ofullständig" +msgstr "returtypen %q#T är ofullständig" #: cp/decl.c:12561 #, gcc-internal-format @@ -29075,7 +29079,7 @@ msgstr "parameter %qD deklarerad void" #: cp/decl.c:13532 #, gcc-internal-format msgid "parameter %q+D set but not used" -msgstr "parametern %q+D sätts men används inte" +msgstr "parametern %q+D sätts men används inte" #: cp/decl.c:13627 #, gcc-internal-format @@ -29085,22 +29089,22 @@ msgstr "ogiltig medlemsfunktionsdeklaration" #: cp/decl.c:13641 #, gcc-internal-format msgid "%qD is already defined in class %qT" -msgstr "%qD är redan definierad i klassen %qT" +msgstr "%qD är redan definierad i klassen %qT" #: cp/decl2.c:318 #, gcc-internal-format msgid "name missing for member function" -msgstr "namn saknas på medlemsfunktion" +msgstr "namn saknas pÃ¥ medlemsfunktion" #: cp/decl2.c:389 cp/decl2.c:403 #, gcc-internal-format msgid "ambiguous conversion for array subscript" -msgstr "tvetydig konvertering av fältindex" +msgstr "tvetydig konvertering av fältindex" #: cp/decl2.c:397 #, gcc-internal-format msgid "invalid types %<%T[%T]%> for array subscript" -msgstr "ogiltiga typer %<%T[%T]%> för vektorindex" +msgstr "ogiltiga typer %<%T[%T]%> för vektorindex" #: cp/decl2.c:441 #, gcc-internal-format @@ -29110,17 +29114,17 @@ msgstr "raderar vektor %q#D" #: cp/decl2.c:447 #, gcc-internal-format msgid "type %q#T argument given to %<delete%>, expected pointer" -msgstr "%<delete%> får argument av typ %q#T, pekare förväntades" +msgstr "%<delete%> fÃ¥r argument av typ %q#T, pekare förväntades" #: cp/decl2.c:459 #, gcc-internal-format msgid "cannot delete a function. Only pointer-to-objects are valid arguments to %<delete%>" -msgstr "det går inte att radera en funktion. Endast pekare till objekt är giltiga argument till %<delete%>" +msgstr "det gÃ¥r inte att radera en funktion. Endast pekare till objekt är giltiga argument till %<delete%>" #: cp/decl2.c:467 #, gcc-internal-format msgid "deleting %qT is undefined" -msgstr "radera %qT är odefinierat" +msgstr "radera %qT är odefinierat" #: cp/decl2.c:512 cp/pt.c:4875 #, gcc-internal-format @@ -29130,22 +29134,22 @@ msgstr "malldeklaration av %q#D" #: cp/decl2.c:564 #, gcc-internal-format msgid "Java method %qD has non-Java return type %qT" -msgstr "Javametod %qD har returtyp %qT som inte är en Javatyp" +msgstr "Javametod %qD har returtyp %qT som inte är en Javatyp" #: cp/decl2.c:581 #, gcc-internal-format msgid "Java method %qD has non-Java parameter type %qT" -msgstr "Javametod %qD har typ %qT som inte är Javaparametertyp" +msgstr "Javametod %qD har typ %qT som inte är Javaparametertyp" #: cp/decl2.c:630 #, gcc-internal-format msgid "template parameter lists provided don%'t match the template parameters of %qD" -msgstr "mallparametrerlistan som ges stämmer inte mallparametrarna till %qD" +msgstr "mallparametrerlistan som ges stämmer inte mallparametrarna till %qD" #: cp/decl2.c:698 #, gcc-internal-format msgid "prototype for %q#D does not match any in class %qT" -msgstr "prototypen för %q#D matchar inte någon i klass %qT" +msgstr "prototypen för %q#D matchar inte nÃ¥gon i klass %qT" #: cp/decl2.c:774 #, gcc-internal-format @@ -29155,77 +29159,77 @@ msgstr "lokal klass %q#T skall inte ha statisk datamedlem %q#D" #: cp/decl2.c:835 #, gcc-internal-format msgid "explicit template argument list not allowed" -msgstr "explicit mallargumentlista är inte tillåtet" +msgstr "explicit mallargumentlista är inte tillÃ¥tet" #: cp/decl2.c:841 #, gcc-internal-format msgid "member %qD conflicts with virtual function table field name" -msgstr "medlem %qD står i konflikt med fältnamn i tabell över virtuella funktioner" +msgstr "medlem %qD stÃ¥r i konflikt med fältnamn i tabell över virtuella funktioner" #: cp/decl2.c:881 #, gcc-internal-format msgid "%qD is already defined in %qT" -msgstr "%qD är redan definierad i %qT" +msgstr "%qD är redan definierad i %qT" #: cp/decl2.c:910 cp/decl2.c:918 #, gcc-internal-format msgid "invalid initializer for member function %qD" -msgstr "ogiltigt initierare för medlemsfunktion %qD" +msgstr "ogiltigt initierare för medlemsfunktion %qD" #: cp/decl2.c:924 #, gcc-internal-format msgid "initializer specified for static member function %qD" -msgstr "initierare angiven för statisk medlemsfunktion %qD" +msgstr "initierare angiven för statisk medlemsfunktion %qD" #: cp/decl2.c:947 #, gcc-internal-format msgid "field initializer is not constant" -msgstr "fältinitierare är ej konstant" +msgstr "fältinitierare är ej konstant" #: cp/decl2.c:980 #, gcc-internal-format msgid "%<asm%> specifiers are not permitted on non-static data members" -msgstr "%<asm%>-specificerare är inte tillåtna på icke-statiska datamedlemmar" +msgstr "%<asm%>-specificerare är inte tillÃ¥tna pÃ¥ icke-statiska datamedlemmar" #: cp/decl2.c:1031 #, gcc-internal-format msgid "bit-field %qD with non-integral type" -msgstr "bitfält %qD med en icke-heltalstyp" +msgstr "bitfält %qD med en icke-heltalstyp" #: cp/decl2.c:1037 #, gcc-internal-format msgid "cannot declare %qD to be a bit-field type" -msgstr "det går inte att deklarera %qD att vara en bitfältstyp" +msgstr "det gÃ¥r inte att deklarera %qD att vara en bitfältstyp" #: cp/decl2.c:1047 #, gcc-internal-format msgid "cannot declare bit-field %qD with function type" -msgstr "det går inte att deklarera bitfält %qD med funktionstyp" +msgstr "det gÃ¥r inte att deklarera bitfält %qD med funktionstyp" #: cp/decl2.c:1054 #, gcc-internal-format msgid "%qD is already defined in the class %qT" -msgstr "%qD är redan definierad i klassen %qT" +msgstr "%qD är redan definierad i klassen %qT" #: cp/decl2.c:1061 #, gcc-internal-format msgid "static member %qD cannot be a bit-field" -msgstr "statisk medlem %qD kan inte vara ett bitfält" +msgstr "statisk medlem %qD kan inte vara ett bitfält" #: cp/decl2.c:1071 #, gcc-internal-format msgid "width of bit-field %qD has non-integral type %qT" -msgstr "bredden på bitfältet %qD har icke-heltalstyp %qT" +msgstr "bredden pÃ¥ bitfältet %qD har icke-heltalstyp %qT" #: cp/decl2.c:1344 #, gcc-internal-format msgid "anonymous struct not inside named type" -msgstr "anonym post som inte är inuti en namngiven typ" +msgstr "anonym post som inte är inuti en namngiven typ" #: cp/decl2.c:1432 #, gcc-internal-format msgid "namespace-scope anonymous aggregates must be static" -msgstr "anonyma aggregat med namnrymdsräckvidd måste vara statiska" +msgstr "anonyma aggregat med namnrymdsräckvidd mÃ¥ste vara statiska" #: cp/decl2.c:1441 #, gcc-internal-format @@ -29235,7 +29239,7 @@ msgstr "anonym union utan medlemmar" #: cp/decl2.c:1479 #, gcc-internal-format msgid "%<operator new%> must return type %qT" -msgstr "%<operator new%> måste returnera typ %qT" +msgstr "%<operator new%> mÃ¥ste returnera typ %qT" #. [basic.stc.dynamic.allocation] #. @@ -29249,139 +29253,139 @@ msgstr "andra parametern till %<operator new%> kan inte ha standardargument" #: cp/decl2.c:1506 #, gcc-internal-format msgid "%<operator new%> takes type %<size_t%> (%qT) as first parameter" -msgstr "%<operator new%> tar typen %<size_t%> (%qT) som första parameter" +msgstr "%<operator new%> tar typen %<size_t%> (%qT) som första parameter" #: cp/decl2.c:1535 #, gcc-internal-format msgid "%<operator delete%> must return type %qT" -msgstr "%<operator delete%> måste returnera typ %qT" +msgstr "%<operator delete%> mÃ¥ste returnera typ %qT" #: cp/decl2.c:1544 #, gcc-internal-format msgid "%<operator delete%> takes type %qT as first parameter" -msgstr "%<operator delete%> tar typen %qT som första parameter" +msgstr "%<operator delete%> tar typen %qT som första parameter" #: cp/decl2.c:2328 #, gcc-internal-format msgid "%qT has a field %qD whose type uses the anonymous namespace" -msgstr "%qT har ett fält %qD vars typ använder den anonyma namnrymden" +msgstr "%qT har ett fält %qD vars typ använder den anonyma namnrymden" #: cp/decl2.c:2335 #, gcc-internal-format msgid "%qT declared with greater visibility than the type of its field %qD" -msgstr "%qT är deklarerad med större synlighet än typen för dess fält %qD" +msgstr "%qT är deklarerad med större synlighet än typen för dess fält %qD" #: cp/decl2.c:2348 #, gcc-internal-format msgid "%qT has a base %qT whose type uses the anonymous namespace" -msgstr "%qT har en bas %qT vars typ använder den anonyma namnrymden" +msgstr "%qT har en bas %qT vars typ använder den anonyma namnrymden" #: cp/decl2.c:2354 #, gcc-internal-format msgid "%qT declared with greater visibility than its base %qT" -msgstr "%qT är deklarerad med större synlighet än sin bas %qT" +msgstr "%qT är deklarerad med större synlighet än sin bas %qT" #: cp/decl2.c:3670 #, gcc-internal-format msgid "%q+#D, declared using anonymous type, is used but never defined" -msgstr "%q+#D, deklarerad med en anonym typ, används men är aldrig definierad" +msgstr "%q+#D, deklarerad med en anonym typ, används men är aldrig definierad" #: cp/decl2.c:3677 #, gcc-internal-format msgid "%q+#D, declared using local type %qT, is used but never defined" -msgstr "%q+#D, deklarerad med en lokal typ %qT, används men är aldrig definierad" +msgstr "%q+#D, deklarerad med en lokal typ %qT, används men är aldrig definierad" #: cp/decl2.c:4006 #, gcc-internal-format msgid "inline function %q+D used but never defined" -msgstr "inline-funktion %q+D använd men aldrig definierad" +msgstr "inline-funktion %q+D använd men aldrig definierad" #: cp/decl2.c:4193 #, gcc-internal-format msgid "default argument missing for parameter %P of %q+#D" -msgstr "standardargumentet saknas för parameter %P till %q+#D" +msgstr "standardargumentet saknas för parameter %P till %q+#D" #. We mark a lambda conversion op as deleted if we can't #. generate it properly; see maybe_add_lambda_conv_op. #: cp/decl2.c:4250 #, gcc-internal-format msgid "converting lambda which uses %<...%> to function pointer" -msgstr "konverterar lambda som använder %<...%> till funktionspekare" +msgstr "konverterar lambda som använder %<...%> till funktionspekare" #: cp/decl2.c:4255 #, gcc-internal-format msgid "use of deleted function %qD" -msgstr "användning av borttagen funktion %qD" +msgstr "användning av borttagen funktion %qD" #: cp/error.c:3261 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "extended initializer lists only available with -std=c++11 or -std=gnu++11" -msgstr "utökade initierarlistor är endast tillgängliga med -std=c++0x eller -std=gnu++0x" +msgstr "utökade initierarlistor är endast tillgängliga med -std=c++11 eller -std=gnu++11" #: cp/error.c:3266 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "explicit conversion operators only available with -std=c++11 or -std=gnu++11" -msgstr "explicita konverteringsoperatorer är endast tillgängliga med -std=c++0x eller -std=gnu++0x" +msgstr "explicita konverteringsoperatorer är endast tillgängliga med -std=c++11 eller -std=gnu++11" #: cp/error.c:3271 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "variadic templates only available with -std=c++11 or -std=gnu++11" -msgstr "variadiska mallar är endast tillgängliga med -std=c++0x eller -std=gnu++0x" +msgstr "variadiska mallar är endast tillgängliga med -std=c++11 eller -std=gnu++11" #: cp/error.c:3276 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "lambda expressions only available with -std=c++11 or -std=gnu++11" -msgstr "lambdauttryck är endast tillgängliga med -std=c++0x eller -std=gnu++0x" +msgstr "lambdauttryck är endast tillgängliga med -std=c++11 eller -std=gnu++11" #: cp/error.c:3281 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "C++0x auto only available with -std=c++11 or -std=gnu++11" -msgstr "C++0x auto är endast tillgängligt med -std=c++0x eller -std=gnu++0x" +msgstr "C++0x auto är endast tillgängligt med -std=c++11 eller -std=gnu++11" #: cp/error.c:3285 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "scoped enums only available with -std=c++11 or -std=gnu++11" -msgstr "enum med räckvidd är endast tillgängliga med -std=c++0x eller -std=gnu++0x" +msgstr "enum med räckvidd är endast tillgängliga med -std=c++11 eller -std=gnu++11" #: cp/error.c:3289 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "defaulted and deleted functions only available with -std=c++11 or -std=gnu++11" -msgstr "standardvärda och raderade funktioner är endast tillgängliga med -std=c++0x eller -std=gnu++0x" +msgstr "standardvärda och raderade funktioner är endast tillgängliga med -std=c++11 eller -std=gnu++11" #: cp/error.c:3294 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "inline namespaces only available with -std=c++11 or -std=gnu++11" -msgstr "inline-namnrymdet är endast tillgängliga med -std=c++0x eller -std=gnu++0x" +msgstr "inline-namnrymdet är endast tillgängliga med -std=c++11 eller -std=gnu++11" #: cp/error.c:3299 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "override controls (override/final) only available with -std=c++11 or -std=gnu++11" -msgstr "explicita konverteringsoperatorer är endast tillgängliga med -std=c++0x eller -std=gnu++0x" +msgstr "styrning av Ã¥sidosättande (override/final) är endast tillgängliga med -std=c++11 eller -std=gnu++11" #: cp/error.c:3304 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "non-static data member initializers only available with -std=c++11 or -std=gnu++11" -msgstr "utökade initierarlistor är endast tillgängliga med -std=c++0x eller -std=gnu++0x" +msgstr "initierare av datamedlemmar som inte är statiska är endast tillgängliga med -std=c++11 eller -std=gnu++11" #: cp/error.c:3309 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "user-defined literals only available with -std=c++11 or -std=gnu++11" -msgstr "utökade initierarlistor är endast tillgängliga med -std=c++0x eller -std=gnu++0x" +msgstr "användardefinierade literaler är endast tillgängliga med -std=c++11 eller -std=gnu++11" #: cp/error.c:3314 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "delegating constructors only available with -std=c++11 or -std=gnu++11" -msgstr "explicita konverteringsoperatorer är endast tillgängliga med -std=c++0x eller -std=gnu++0x" +msgstr "delegerande konstruerare är endast tillgängliga med -std=c++11 eller -std=gnu++11" #: cp/error.c:3361 #, gcc-internal-format msgid "incomplete type %qT used in nested name specifier" -msgstr "ofullständig typ %qT använd i nästad namnspecificerare" +msgstr "ofullständig typ %qT använd i nästad namnspecificerare" #: cp/error.c:3365 #, gcc-internal-format msgid "reference to %<%T::%D%> is ambiguous" -msgstr "referens till %<%T::%D%> är tvetydig" +msgstr "referens till %<%T::%D%> är tvetydig" #: cp/error.c:3370 cp/typeck.c:2178 #, gcc-internal-format @@ -29391,7 +29395,7 @@ msgstr "%qD har inte en medlem av %qT" #: cp/error.c:3374 #, gcc-internal-format msgid "%qD is not a member of %qD" -msgstr "%qD är inte en medlem av %qD" +msgstr "%qD är inte en medlem av %qD" #: cp/error.c:3379 #, gcc-internal-format @@ -29402,28 +29406,28 @@ msgstr "%<::%D%> har inte deklarerats" #: cp/except.c:294 #, gcc-internal-format msgid "type %qT is disallowed in Java %<throw%> or %<catch%>" -msgstr "typ %qT är otillåten i Javas %<throw%> eller %<catch%>" +msgstr "typ %qT är otillÃ¥ten i Javas %<throw%> eller %<catch%>" #: cp/except.c:305 #, gcc-internal-format msgid "call to Java %<catch%> or %<throw%> with %<jthrowable%> undefined" -msgstr "anrop av Java-%<catch%> eller -%<throw%> med %<jthrowable%> är odefinierat" +msgstr "anrop av Java-%<catch%> eller -%<throw%> med %<jthrowable%> är odefinierat" #. Thrown object must be a Throwable. #: cp/except.c:312 #, gcc-internal-format msgid "type %qT is not derived from %<java::lang::Throwable%>" -msgstr "typ %qT är inte härledd från %<java::lang::Throwable%>" +msgstr "typ %qT är inte härledd frÃ¥n %<java::lang::Throwable%>" #: cp/except.c:373 #, gcc-internal-format msgid "mixing C++ and Java catches in a single translation unit" -msgstr "blandning av C++- och Java-catch i en och samma översättningsenhet" +msgstr "blandning av C++- och Java-catch i en och samma översättningsenhet" #: cp/except.c:469 java/except.c:583 #, gcc-internal-format msgid "exception handling disabled, use -fexceptions to enable" -msgstr "undantagshantering avslagen, använd -fexceptions för att aktivera" +msgstr "undantagshantering avslagen, använd -fexceptions för att aktivera" #: cp/except.c:719 #, gcc-internal-format @@ -29433,7 +29437,7 @@ msgstr "kastar NULL, som har heltals-, inte pekartyp" #: cp/except.c:743 cp/init.c:2308 #, gcc-internal-format msgid "%qD should never be overloaded" -msgstr "%qD skall aldrig överlagras" +msgstr "%qD skall aldrig överlagras" #: cp/except.c:847 #, gcc-internal-format @@ -29443,27 +29447,27 @@ msgstr " i kastat uttryck" #: cp/except.c:971 #, gcc-internal-format msgid "expression %qE of abstract class type %qT cannot be used in throw-expression" -msgstr "uttrycket %qE med abstrakt klasstyp %qT kan inte användas i throw-uttryck" +msgstr "uttrycket %qE med abstrakt klasstyp %qT kan inte användas i throw-uttryck" #: cp/except.c:1057 #, gcc-internal-format msgid "exception of type %qT will be caught" -msgstr "undantag av typ %qT kommer att fångas" +msgstr "undantag av typ %qT kommer att fÃ¥ngas" #: cp/except.c:1060 #, gcc-internal-format msgid " by earlier handler for %qT" -msgstr " av tidigare hanterare för %qT" +msgstr " av tidigare hanterare för %qT" #: cp/except.c:1089 #, gcc-internal-format msgid "%<...%> handler must be the last handler for its try block" -msgstr "%<...%>-hanterare måste vara den sista hanteraren i sitt try-block" +msgstr "%<...%>-hanterare mÃ¥ste vara den sista hanteraren i sitt try-block" #: cp/except.c:1172 #, gcc-internal-format msgid "noexcept-expression evaluates to %<false%> because of a call to %qD" -msgstr "noexcept-uttrycket beräknas till %<false%> på grund av ett anrop till %qD" +msgstr "noexcept-uttrycket beräknas till %<false%> pÃ¥ grund av ett anrop till %qD" #: cp/except.c:1174 #, gcc-internal-format @@ -29473,7 +29477,7 @@ msgstr "men %q+D kastar inte, kanske den skulle deklareras %<noexcept%>" #: cp/friend.c:153 #, gcc-internal-format msgid "%qD is already a friend of class %qT" -msgstr "%qD är redan en vän till klassen %qT" +msgstr "%qD är redan en vän till klassen %qT" #: cp/friend.c:236 #, gcc-internal-format @@ -29495,22 +29499,22 @@ msgstr "partiell specialisering %qT deklarerad %<friend%>" #: cp/friend.c:262 #, gcc-internal-format msgid "class %qT is implicitly friends with itself" -msgstr "klass %qT är implicit vän med sig själv" +msgstr "klass %qT är implicit vän med sig själv" #: cp/friend.c:320 #, gcc-internal-format msgid "%qT is not a member of %qT" -msgstr "%qT är inte en medlem av %qT" +msgstr "%qT är inte en medlem av %qT" #: cp/friend.c:325 #, gcc-internal-format msgid "%qT is not a member class template of %qT" -msgstr "%qT är inte en medlemsklassmall av %qT" +msgstr "%qT är inte en medlemsklassmall av %qT" #: cp/friend.c:333 #, gcc-internal-format msgid "%qT is not a nested class of %qT" -msgstr "%qT är inte en nästad klass i %qT" +msgstr "%qT är inte en nästad klass i %qT" #. template <class T> friend class T; #: cp/friend.c:346 @@ -29522,57 +29526,57 @@ msgstr "mallparametertyp %qT deklarerad %<friend%>" #: cp/friend.c:352 #, gcc-internal-format msgid "%q#T is not a template" -msgstr "%q#T är inte en mall" +msgstr "%q#T är inte en mall" #: cp/friend.c:374 #, gcc-internal-format msgid "%qD is already a friend of %qT" -msgstr "%qD är redan en vän till %qT" +msgstr "%qD är redan en vän till %qT" #: cp/friend.c:383 #, gcc-internal-format msgid "%qT is already a friend of %qT" -msgstr "%qT är redan en vän till %qT" +msgstr "%qT är redan en vän till %qT" #: cp/friend.c:507 #, gcc-internal-format msgid "member %qD declared as friend before type %qT defined" -msgstr "medlem %qD deklarerad som vän före typ %qT definieras" +msgstr "medlem %qD deklarerad som vän före typ %qT definieras" #: cp/friend.c:556 #, gcc-internal-format msgid "friend declaration %qD in local class without prior declaration" -msgstr "vändeklaration %qD i lokal klass utan en tidigare deklaration" +msgstr "vändeklaration %qD i lokal klass utan en tidigare deklaration" #: cp/friend.c:579 #, gcc-internal-format msgid "friend declaration %q#D declares a non-template function" -msgstr "vändeklaration %q#D deklarerar en icke-mall-funktion" +msgstr "vändeklaration %q#D deklarerar en icke-mall-funktion" #: cp/friend.c:583 #, gcc-internal-format msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) " -msgstr "(om detta inte är vad du avsåg, se till att funktionsmallen redan har deklarerats och lägg till <> efter funktionsnamnet här) " +msgstr "(om detta inte är vad du avsÃ¥g, se till att funktionsmallen redan har deklarerats och lägg till <> efter funktionsnamnet här) " #: cp/init.c:383 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "value-initialization of incomplete type %qT" -msgstr "ogiltig tillämpning av %qs på ofullständig typ %qT " +msgstr "värdeinitiering av ofullständig typ %qT" #: cp/init.c:442 #, gcc-internal-format msgid "cannot value-initialize array of unknown bound %qT" -msgstr "det går inte att värdeinitiera vektorn %qT med okänd gräns" +msgstr "det gÃ¥r inte att värdeinitiera vektorn %qT med okänd gräns" #: cp/init.c:482 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "value-initialization of function type %qT" -msgstr "värdeinitiering av referens" +msgstr "värdeinitiering av funktionstypen %qT" #: cp/init.c:488 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "value-initialization of reference type %qT" -msgstr "värdeinitiering av referens" +msgstr "värdeinitiering av referenstypen %qT" #: cp/init.c:559 #, gcc-internal-format @@ -29580,14 +29584,14 @@ msgid "%qD should be initialized in the member initialization list" msgstr "%qD skall initieras i medlemsinitieringslistan" #: cp/init.c:577 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD is initialized with itself" -msgstr "%qD används oinitierad i denna funktion" +msgstr "%qD initieras med sig själv" #: cp/init.c:671 #, gcc-internal-format msgid "invalid initializer for array member %q#D" -msgstr "ogiltigt initierare för vektormedlem %q#D" +msgstr "ogiltigt initierare för vektormedlem %q#D" #: cp/init.c:684 cp/init.c:702 #, gcc-internal-format @@ -29622,17 +29626,17 @@ msgstr " basen %qT" #: cp/init.c:868 #, gcc-internal-format msgid " when initialized here" -msgstr " vid initiering här" +msgstr " vid initiering här" #: cp/init.c:885 #, gcc-internal-format msgid "multiple initializations given for %qD" -msgstr "flera initieringar givna för %qD" +msgstr "flera initieringar givna för %qD" #: cp/init.c:889 #, gcc-internal-format msgid "multiple initializations given for base %qT" -msgstr "flera initieringar givna för basen %qT" +msgstr "flera initieringar givna för basen %qT" #: cp/init.c:973 #, gcc-internal-format @@ -29647,42 +29651,42 @@ msgstr "basklass %q#T skulle varit explicit initierad i kopieringskonstrueraren" #: cp/init.c:1283 cp/init.c:1302 #, gcc-internal-format msgid "class %qT does not have any field named %qD" -msgstr "klass %qT har inget fält med namnet %qD" +msgstr "klass %qT har inget fält med namnet %qD" #: cp/init.c:1289 #, gcc-internal-format msgid "%q#D is a static data member; it can only be initialized at its definition" -msgstr "%q#D är en statisk datamedlem; den kan endast initieras vid sin definition" +msgstr "%q#D är en statisk datamedlem; den kan endast initieras vid sin definition" #: cp/init.c:1296 #, gcc-internal-format msgid "%q#D is not a non-static data member of %qT" -msgstr "%q#D är en icke-statisk datamedlem av %qT" +msgstr "%q#D är en icke-statisk datamedlem av %qT" #: cp/init.c:1335 #, gcc-internal-format msgid "unnamed initializer for %qT, which has no base classes" -msgstr "namnlös initierare för %qT, som inte har några basklasser" +msgstr "namnlös initierare för %qT, som inte har nÃ¥gra basklasser" #: cp/init.c:1343 #, gcc-internal-format msgid "unnamed initializer for %qT, which uses multiple inheritance" -msgstr "namnlös initierare för %qT som använder multipelt arv" +msgstr "namnlös initierare för %qT som använder multipelt arv" #: cp/init.c:1390 #, gcc-internal-format msgid "%qD is both a direct base and an indirect virtual base" -msgstr "%qD är både en direkt bas och en indirekt virtuell bas" +msgstr "%qD är bÃ¥de en direkt bas och en indirekt virtuell bas" #: cp/init.c:1398 #, gcc-internal-format msgid "type %qT is not a direct or virtual base of %qT" -msgstr "typ %qT är inte en direkt eller virtuell bas till %qT" +msgstr "typ %qT är inte en direkt eller virtuell bas till %qT" #: cp/init.c:1401 #, gcc-internal-format msgid "type %qT is not a direct base of %qT" -msgstr "typ %qT är inte en direkt bas till %qT" +msgstr "typ %qT är inte en direkt bas till %qT" #: cp/init.c:1486 #, gcc-internal-format @@ -29692,32 +29696,32 @@ msgstr "felaktig vektorinitierare" #: cp/init.c:1778 cp/semantics.c:2783 #, gcc-internal-format msgid "%qT is not a class type" -msgstr "%qT är inte en klasstyp" +msgstr "%qT är inte en klasstyp" #: cp/init.c:1832 #, gcc-internal-format msgid "incomplete type %qT does not have member %qD" -msgstr "ofullständig typ %qT har inte medlem %qD" +msgstr "ofullständig typ %qT har inte medlem %qD" #: cp/init.c:1845 #, gcc-internal-format msgid "invalid pointer to bit-field %qD" -msgstr "ogiltigt pekare till bitfält %qD" +msgstr "ogiltigt pekare till bitfält %qD" #: cp/init.c:1922 #, gcc-internal-format msgid "invalid use of non-static member function %qD" -msgstr "ogiltig användning av icke-statisk medlemsfunktion %qD" +msgstr "ogiltig användning av icke-statisk medlemsfunktion %qD" #: cp/init.c:1928 #, gcc-internal-format msgid "invalid use of non-static data member %qD" -msgstr "ogiltig användning av icke-statisk datamedlem %qD" +msgstr "ogiltig användning av icke-statisk datamedlem %qD" #: cp/init.c:2110 #, gcc-internal-format msgid "uninitialized reference member in %q#T using %<new%> without new-initializer" -msgstr "oinitierad referensmedlem i %q#T använder %<new%> utan new-initierare" +msgstr "oinitierad referensmedlem i %q#T använder %<new%> utan new-initierare" #: cp/init.c:2113 #, gcc-internal-format @@ -29727,7 +29731,7 @@ msgstr "oinitierad referensmedlem i %q#T" #: cp/init.c:2125 #, gcc-internal-format msgid "uninitialized const member in %q#T using %<new%> without new-initializer" -msgstr "oinitierad const-medlem i %q#T använder %<new%> utan new-initierare" +msgstr "oinitierad const-medlem i %q#T använder %<new%> utan new-initierare" #: cp/init.c:2128 #, gcc-internal-format @@ -29737,7 +29741,7 @@ msgstr "oinitierad const-medlem i %q#T" #: cp/init.c:2225 #, gcc-internal-format msgid "invalid type %<void%> for new" -msgstr "ogiltig typ %<void%> för new" +msgstr "ogiltig typ %<void%> för new" #: cp/init.c:2268 #, gcc-internal-format @@ -29757,37 +29761,37 @@ msgstr "objekt med Javaklass %q#T allokerat med placerande new" #: cp/init.c:2348 #, gcc-internal-format msgid "no suitable %qD found in class %qT" -msgstr "ingen lämplig %qD i klassen %qT" +msgstr "ingen lämplig %qD i klassen %qT" #: cp/init.c:2355 cp/search.c:1107 #, gcc-internal-format msgid "request for member %qD is ambiguous" -msgstr "begäran av medlem %qD är tvetydig" +msgstr "begäran av medlem %qD är tvetydig" #: cp/init.c:2563 #, gcc-internal-format msgid "non-constant array size in new, unable to verify length of initializer-list" -msgstr "ickekonstant vektorstorlek i new, kan inte verifiera längden på initierarlistan" +msgstr "ickekonstant vektorstorlek i new, kan inte verifiera längden pÃ¥ initierarlistan" #: cp/init.c:2574 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "parenthesized initializer in array new" -msgstr "attribut efter initierare inom parentes ignoreras" +msgstr "initierare inom parentes i vektor-new" #: cp/init.c:2806 #, gcc-internal-format msgid "size in array new must have integral type" -msgstr "storlek i vektor-new måste ha heltalstyp" +msgstr "storlek i vektor-new mÃ¥ste ha heltalstyp" #: cp/init.c:2820 #, gcc-internal-format msgid "new cannot be applied to a reference type" -msgstr "new kan inte användas på en referenstyp" +msgstr "new kan inte användas pÃ¥ en referenstyp" #: cp/init.c:2829 #, gcc-internal-format msgid "new cannot be applied to a function type" -msgstr "new kan inte användas på en funktionstyp" +msgstr "new kan inte användas pÃ¥ en funktionstyp" #: cp/init.c:2873 #, gcc-internal-format @@ -29802,22 +29806,22 @@ msgstr "kan inte hitta %<class$%> i %qT" #: cp/init.c:3380 #, gcc-internal-format msgid "initializer ends prematurely" -msgstr "initierare tar slut i förtid" +msgstr "initierare tar slut i förtid" #: cp/init.c:3444 #, gcc-internal-format msgid "cannot initialize multi-dimensional array with initializer" -msgstr "det går inte att initiera en flerdimensionell vektor med initierare" +msgstr "det gÃ¥r inte att initiera en flerdimensionell vektor med initierare" #: cp/init.c:3618 #, gcc-internal-format msgid "possible problem detected in invocation of delete operator:" -msgstr "möjligt problem upptäckt vid anrop av delete-operatorn:" +msgstr "möjligt problem upptäckt vid anrop av delete-operatorn:" #: cp/init.c:3622 #, gcc-internal-format msgid "neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined" -msgstr "varken destrueraren eller den klasspecifika operatorn delete kommer anropas, även om de är deklarerade när klassen definieras" +msgstr "varken destrueraren eller den klasspecifika operatorn delete kommer anropas, även om de är deklarerade när klassen definieras" #: cp/init.c:3638 #, gcc-internal-format @@ -29832,17 +29836,17 @@ msgstr "" #: cp/init.c:3665 #, gcc-internal-format msgid "unknown array size in delete" -msgstr "okänd vektorstorlek i delete" +msgstr "okänd vektorstorlek i delete" #: cp/init.c:3934 #, gcc-internal-format msgid "type to vector delete is neither pointer or array type" -msgstr "typ till vektor-delete är varken pekar- eller vektortyp" +msgstr "typ till vektor-delete är varken pekar- eller vektortyp" #: cp/lex.c:322 #, gcc-internal-format, gfc-internal-format msgid "junk at end of #pragma %s" -msgstr "skräp vid slutet av #pragma %s" +msgstr "skräp vid slutet av #pragma %s" #: cp/lex.c:329 #, gcc-internal-format, gfc-internal-format @@ -29852,17 +29856,17 @@ msgstr "ogiltigt #pragma %s" #: cp/lex.c:337 #, gcc-internal-format msgid "#pragma vtable no longer supported" -msgstr "#pragma vtable stödjs inte längre" +msgstr "#pragma vtable stödjs inte längre" #: cp/lex.c:409 #, gcc-internal-format msgid "#pragma implementation for %qs appears after file is included" -msgstr "#pragma implementation för %qs förekommer efter att filen inkluderats" +msgstr "#pragma implementation för %qs förekommer efter att filen inkluderats" #: cp/lex.c:433 #, gcc-internal-format msgid "junk at end of #pragma GCC java_exceptions" -msgstr "skräp vid slutet av #pragma GCC java_exceptions" +msgstr "skräp vid slutet av #pragma GCC java_exceptions" #: cp/lex.c:448 #, gcc-internal-format @@ -29872,7 +29876,7 @@ msgstr "%qD inte definierad" #: cp/lex.c:454 #, gcc-internal-format msgid "%qD was not declared in this scope" -msgstr "%qD deklarerades inte i detta definitionsområde" +msgstr "%qD deklarerades inte i detta definitionsomrÃ¥de" #. In a template, it is invalid to write "f()" or "f(3)" if no #. declaration of "f" is available. Historically, G++ and most @@ -29887,27 +29891,27 @@ msgstr "%qD deklarerades inte i detta definitionsområde" #: cp/lex.c:494 #, gcc-internal-format msgid "there are no arguments to %qD that depend on a template parameter, so a declaration of %qD must be available" -msgstr "det finns inga argument till %qD som beror på en mallparameter, så en deklaration av %qD måste finnas tillgänglig" +msgstr "det finns inga argument till %qD som beror pÃ¥ en mallparameter, sÃ¥ en deklaration av %qD mÃ¥ste finnas tillgänglig" #: cp/lex.c:503 #, gcc-internal-format msgid "(if you use %<-fpermissive%>, G++ will accept your code, but allowing the use of an undeclared name is deprecated)" -msgstr "(om du använder %<-fpermissive%>, kommer G++ acceptera din kod, men man bör undvika att tillåta användning av ett odeklarerat namn)" +msgstr "(om du använder %<-fpermissive%>, kommer G++ acceptera din kod, men man bör undvika att tillÃ¥ta användning av ett odeklarerat namn)" #: cp/mangle.c:2024 #, gcc-internal-format msgid "mangling typeof, use decltype instead" -msgstr "manglar typeof, använd decltype istället" +msgstr "manglar typeof, använd decltype istället" #: cp/mangle.c:2028 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "mangling __underlying_type" -msgstr "manglar okänd fixdecimaltyp" +msgstr "manglar __underlying_type" #: cp/mangle.c:2252 #, gcc-internal-format msgid "mangling unknown fixed point type" -msgstr "manglar okänd fixdecimaltyp" +msgstr "manglar okänd fixdecimaltyp" #: cp/mangle.c:2811 #, gcc-internal-format, gfc-internal-format @@ -29917,42 +29921,42 @@ msgstr "manglar %C" #: cp/mangle.c:2886 #, gcc-internal-format msgid "omitted middle operand to %<?:%> operand cannot be mangled" -msgstr "utelämnad mittenoperand till %<?:%> kan inte manglas" +msgstr "utelämnad mittenoperand till %<?:%> kan inte manglas" #: cp/mangle.c:2950 #, gcc-internal-format msgid "string literal in function template signature" -msgstr "strängliteral i funktionsmallsignatur" +msgstr "strängliteral i funktionsmallsignatur" #: cp/mangle.c:3239 #, gcc-internal-format msgid "the mangled name of %qD will change in a future version of GCC" -msgstr "det manglade namnet för %qD kommer ändras i en framtida version av GCC" +msgstr "det manglade namnet för %qD kommer ändras i en framtida version av GCC" #: cp/mangle.c:3383 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "-fabi-version=6 (or =0) avoids this error with a change in mangling" -msgstr "-fabi-version=4 (eller =0) undviker detta fel med en ändring av vektormanglingen" +msgstr "-fabi-version=6 (eller =0) undviker detta fel med en ändring av manglingen" #: cp/method.c:405 #, gcc-internal-format msgid "generic thunk code fails for method %q#D which uses %<...%>" -msgstr "generell dunkkod misslyckas för metod %q#D som använder %<...%>" +msgstr "generell dunkkod misslyckas för metod %q#D som använder %<...%>" #: cp/method.c:664 cp/method.c:1003 #, gcc-internal-format msgid "non-static const member %q#D, can%'t use default assignment operator" -msgstr "ickestatisk const-medlem %q#D, kan inte använda standardtilldelningsoperatorn" +msgstr "ickestatisk const-medlem %q#D, kan inte använda standardtilldelningsoperatorn" #: cp/method.c:670 cp/method.c:1009 #, gcc-internal-format msgid "non-static reference member %q#D, can%'t use default assignment operator" -msgstr "ickestatisk referensmedlem %q#D, kan inte använda standardtilldelningsoperatorn" +msgstr "ickestatisk referensmedlem %q#D, kan inte använda standardtilldelningsoperatorn" #: cp/method.c:786 #, gcc-internal-format msgid "synthesized method %qD first required here " -msgstr "syntetiserad metod %qD krävs första gången här " +msgstr "syntetiserad metod %qD krävs första gÃ¥ngen här " #: cp/method.c:948 #, gcc-internal-format @@ -29960,14 +29964,14 @@ msgid "union member %q+D with non-trivial %qD" msgstr "union-medlem %q+D med icketrivial %qD" #: cp/method.c:964 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "defaulted constructor calls non-constexpr %q+D" -msgstr "en destruerare kan inte vara %<constexpr%>" +msgstr "standardkonstreraren anropar %q+D som inte är constexpr" #: cp/method.c:1025 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "initializer for %q+#D is invalid" -msgstr "oinitierad const %qD är ogiltig i C++" +msgstr "initieraren för %q+#D är ogiltig" #: cp/method.c:1048 #, gcc-internal-format @@ -29998,12 +30002,12 @@ msgstr "%qT har virtuella baser, standard flyttningstilldelningsoperator kan int #: cp/method.c:1388 #, gcc-internal-format msgid "a lambda closure type has a deleted default constructor" -msgstr "en lambdahöljestyp har en raderad standardkonstruerare" +msgstr "en lambdahöljestyp har en raderad standardkonstruerare" #: cp/method.c:1391 #, gcc-internal-format msgid "a lambda closure type has a deleted copy assignment operator" -msgstr "en lambdahöljetyp har en raderad koperingstilldelningsoperator" +msgstr "en lambdahöljetyp har en raderad koperingstilldelningsoperator" #: cp/method.c:1401 #, gcc-internal-format @@ -30011,24 +30015,24 @@ msgid "%q+#D is implicitly declared as deleted because %qT declares a move const msgstr "" #: cp/method.c:1411 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q+#D is implicitly deleted because the default definition would be ill-formed:" -msgstr "%qD är underförstått raderad eftersom standarddefinitionen skulle vara felformulerad:" +msgstr "%q+#D är underförstÃ¥tt raderad eftersom standarddefinitionen skulle vara felformulerad:" #: cp/method.c:1620 #, gcc-internal-format msgid "defaulted declaration %q+D" -msgstr "standardvärd deklaration %q+D" +msgstr "standardvärd deklaration %q+D" #: cp/method.c:1622 #, gcc-internal-format msgid "does not match expected signature %qD" -msgstr "stämmer inte med förväntad signatur %qD" +msgstr "stämmer inte med förväntad signatur %qD" #: cp/method.c:1636 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "function %q+D defaulted on its first declaration with an exception-specification that differs from the implicit declaration %q#D" -msgstr "funktion %q+D med standardvärde i sin första deklaration får inte a en undantagsspecifikation" +msgstr "funktionen %q+D med standardvärde i sin första deklaration med en undantagsspecifikation som skiljer frÃ¥n den implicita deklarationen %q#D" #: cp/method.c:1657 #, gcc-internal-format @@ -30038,32 +30042,32 @@ msgstr "" #: cp/method.c:1679 #, gcc-internal-format msgid "a template cannot be defaulted" -msgstr "en mall kan inte ha standardvärde" +msgstr "en mall kan inte ha standardvärde" #: cp/method.c:1707 #, gcc-internal-format msgid "%qD cannot be defaulted" -msgstr "%qD kan inte ha standardvärde" +msgstr "%qD kan inte ha standardvärde" #: cp/method.c:1716 #, gcc-internal-format msgid "defaulted function %q+D with default argument" -msgstr "standardvärd funktion %q+D med standardargument" +msgstr "standardvärd funktion %q+D med standardargument" #: cp/method.c:1804 #, gcc-internal-format msgid "vtable layout for class %qT may not be ABI-compliantand may change in a future version of GCC due to implicit virtual destructor" -msgstr "vtable-utplacering för klass %qT följer kanske inte ABI:et och kan ändras i en framtida version av GCC på grund av implicit virtuell destruerare" +msgstr "vtable-utplacering för klass %qT följer kanske inte ABI:et och kan ändras i en framtida version av GCC pÃ¥ grund av implicit virtuell destruerare" #: cp/name-lookup.c:552 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q#D conflicts with a previous declaration" -msgstr "%q#D står i konflikt med tidigare using-deklaration %q#D" +msgstr "%q#D stÃ¥r i konflikt med tidigare deklaration" #: cp/name-lookup.c:554 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "previous declaration %q+#D" -msgstr "tidigare deklaration %q+D" +msgstr "tidigare deklaration %q+#D" #: cp/name-lookup.c:766 #, gcc-internal-format @@ -30089,17 +30093,17 @@ msgstr "som %qD" #: cp/name-lookup.c:838 cp/name-lookup.c:854 #, gcc-internal-format msgid "declaration of %q#D with C language linkage" -msgstr "deklaration av %q#D med C-länkklass" +msgstr "deklaration av %q#D med C-länkklass" #: cp/name-lookup.c:844 #, gcc-internal-format msgid "due to different exception specifications" -msgstr "på grund av olika undantagsspecifikationer" +msgstr "pÃ¥ grund av olika undantagsspecifikationer" #: cp/name-lookup.c:945 #, gcc-internal-format msgid "type mismatch with previous external decl of %q#D" -msgstr "typ stämmer inte med tidigare externdeklaration av %q#D" +msgstr "typ stämmer inte med tidigare externdeklaration av %q#D" #: cp/name-lookup.c:946 #, gcc-internal-format @@ -30109,7 +30113,7 @@ msgstr "tidigare externdeklaration av %q+#D" #: cp/name-lookup.c:1044 #, gcc-internal-format msgid "extern declaration of %q#D doesn%'t match" -msgstr "externdeklaration av %q#D stämmer inte" +msgstr "externdeklaration av %q#D stämmer inte" #: cp/name-lookup.c:1045 #, gcc-internal-format @@ -30122,11 +30126,11 @@ msgid "declaration of %q#D shadows a parameter" msgstr "deklaration av %q#D skuggar en parameter" #: cp/name-lookup.c:1143 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "declaration of %qD shadows a lambda capture" -msgstr "deklaration av %q+D skuggar en parameter" +msgstr "deklaration av %qD skuggar en lambdafÃ¥ngst" -# local, det kan troligen vara både lokal variabel och lokal funktionsdeklartion +# local, det kan troligen vara bÃ¥de lokal variabel och lokal funktionsdeklartion #: cp/name-lookup.c:1147 #, gcc-internal-format msgid "declaration of %qD shadows a previous local" @@ -30136,7 +30140,7 @@ msgstr "deklaration av %qD skuggar en tidigare lokal deklaration" #: cp/name-lookup.c:1177 #, gcc-internal-format msgid "declaration of %qD shadows a member of 'this'" -msgstr "deklaration av %qD skuggar en medlem av \"this\"" +msgstr "deklaration av %qD skuggar en medlem av â€thisâ€" #: cp/name-lookup.c:1191 #, gcc-internal-format @@ -30146,37 +30150,37 @@ msgstr "deklaration av %qD skuggar en global deklaration" #: cp/name-lookup.c:1326 #, gcc-internal-format msgid "name lookup of %qD changed" -msgstr "namuppslagning av %qD ändrades" +msgstr "namuppslagning av %qD ändrades" #: cp/name-lookup.c:1327 #, gcc-internal-format msgid " matches this %q+D under ISO standard rules" -msgstr " stämmer med denna %qD under ISO:s standardregler" +msgstr " stämmer med denna %qD under ISO:s standardregler" #: cp/name-lookup.c:1329 #, gcc-internal-format msgid " matches this %q+D under old rules" -msgstr " stämmer med denna %q+D under gamla regler" +msgstr " stämmer med denna %q+D under gamla regler" #: cp/name-lookup.c:1347 cp/name-lookup.c:1355 #, gcc-internal-format msgid "name lookup of %qD changed for ISO %<for%> scoping" -msgstr "namnuppslagning av %qD ändrad för räckvidd i %<for%> enligt ISO" +msgstr "namnuppslagning av %qD ändrad för räckvidd i %<for%> enligt ISO" #: cp/name-lookup.c:1349 #, gcc-internal-format msgid " cannot use obsolete binding at %q+D because it has a destructor" -msgstr " det går inte att använda föråldrad bindning vid %q+D för att den har en destruerare" +msgstr " det gÃ¥r inte att använda förÃ¥ldrad bindning vid %q+D för att den har en destruerare" #: cp/name-lookup.c:1358 #, gcc-internal-format msgid " using obsolete binding at %q+D" -msgstr " använder föråldrad bindning vid %q+D" +msgstr " använder förÃ¥ldrad bindning vid %q+D" #: cp/name-lookup.c:1364 cp/parser.c:12459 #, gcc-internal-format msgid "(if you use %<-fpermissive%> G++ will accept your code)" -msgstr "(om du använder %<--fpermissive%> kommer G++ acceptera din kod)" +msgstr "(om du använder %<--fpermissive%> kommer G++ acceptera din kod)" #: cp/name-lookup.c:1419 #, gcc-internal-format @@ -30191,12 +30195,12 @@ msgstr "%s %s %p %d\n" #: cp/name-lookup.c:2249 #, gcc-internal-format msgid "%q#D hides constructor for %q#T" -msgstr "%q#D döljer konstruerare för %q#T" +msgstr "%q#D döljer konstruerare för %q#T" #: cp/name-lookup.c:2266 #, gcc-internal-format msgid "%q#D conflicts with previous using declaration %q#D" -msgstr "%q#D står i konflikt med tidigare using-deklaration %q#D" +msgstr "%q#D stÃ¥r i konflikt med tidigare using-deklaration %q#D" #: cp/name-lookup.c:2289 #, gcc-internal-format @@ -30206,26 +30210,26 @@ msgstr "tidigare icke-funktions-deklaration av %q+#D" #: cp/name-lookup.c:2290 #, gcc-internal-format msgid "conflicts with function declaration %q#D" -msgstr "står i konflikt med funktionsdeklaration %q#D" +msgstr "stÃ¥r i konflikt med funktionsdeklaration %q#D" #. It's a nested name with template parameter dependent scope. #. This can only be using-declaration for class member. #: cp/name-lookup.c:2380 cp/name-lookup.c:2405 #, gcc-internal-format msgid "%qT is not a namespace" -msgstr "%qT är inte en namnrymd" +msgstr "%qT är inte en namnrymd" #. 7.3.3/5 #. A using-declaration shall not name a template-id. #: cp/name-lookup.c:2390 #, gcc-internal-format msgid "a using-declaration cannot specify a template-id. Try %<using %D%>" -msgstr "en using-deklaration kan inte ange ett mall-id. Försök med %<using %D%>" +msgstr "en using-deklaration kan inte ange ett mall-id. Försök med %<using %D%>" #: cp/name-lookup.c:2397 #, gcc-internal-format msgid "namespace %qD not allowed in using-declaration" -msgstr "namnrymd %qD är inte tillåten i using-deklaration" +msgstr "namnrymd %qD är inte tillÃ¥ten i using-deklaration" #: cp/name-lookup.c:2433 #, gcc-internal-format @@ -30236,12 +30240,12 @@ msgstr "%qD inte deklarerad" #: cp/name-lookup.c:2555 #, gcc-internal-format msgid "%qD is already declared in this scope" -msgstr "%qD är redan deklarerad i detta definitionsområde" +msgstr "%qD är redan deklarerad i detta definitionsomrÃ¥de" #: cp/name-lookup.c:3198 #, gcc-internal-format msgid "using-declaration for non-member at class scope" -msgstr "using-deklaration för icke-medlem vid klassräckvidd" +msgstr "using-deklaration för icke-medlem vid klassräckvidd" #: cp/name-lookup.c:3205 #, gcc-internal-format @@ -30281,12 +30285,12 @@ msgstr "%qD borde ha deklarerats inuti %qD" #: cp/name-lookup.c:3487 #, gcc-internal-format msgid "%qD attribute requires a single NTBS argument" -msgstr "attributet %qD kräver ett ensamt NTBS-argument" +msgstr "attributet %qD kräver ett ensamt NTBS-argument" #: cp/name-lookup.c:3494 #, gcc-internal-format msgid "%qD attribute is meaningless since members of the anonymous namespace get local symbols" -msgstr "attributet %qD är meningslöst eftersom medlemmar av den anonyma namnrymden får lokala symboler" +msgstr "attributet %qD är meningslöst eftersom medlemmar av den anonyma namnrymden fÃ¥r lokala symboler" #: cp/name-lookup.c:3502 cp/name-lookup.c:3891 #, gcc-internal-format @@ -30296,29 +30300,29 @@ msgstr "attributdirektivet %qD ignorerat" #: cp/name-lookup.c:3547 #, gcc-internal-format msgid "namespace alias %qD not allowed here, assuming %qD" -msgstr "namnrymdsalias %qD inte tillåtet här, antar %qD" +msgstr "namnrymdsalias %qD inte tillÃ¥tet här, antar %qD" #: cp/name-lookup.c:3879 #, gcc-internal-format msgid "strong using only meaningful at namespace scope" -msgstr "strong using är endast meningsfullt vid namnrymdsräckvidd" +msgstr "strong using är endast meningsfullt vid namnrymdsräckvidd" #: cp/name-lookup.c:3883 #, gcc-internal-format msgid "current namespace %qD does not enclose strongly used namespace %qD" -msgstr "nuvarande namnrymd %qD innesluter inte den starkt använda namnrymden %qD" +msgstr "nuvarande namnrymd %qD innesluter inte den starkt använda namnrymden %qD" #: cp/name-lookup.c:4217 #, gcc-internal-format msgid "maximum limit of %d namespaces searched for %qE" -msgstr "maxgräns på %d namnrymder sökta %qE" +msgstr "maxgräns pÃ¥ %d namnrymder sökta %qE" #: cp/name-lookup.c:4227 #, gcc-internal-format msgid "suggested alternative:" msgid_plural "suggested alternatives:" -msgstr[0] "föreslaget alternativ:" -msgstr[1] "föreslagna alternativ:" +msgstr[0] "föreslaget alternativ:" +msgstr[1] "föreslagna alternativ:" #: cp/name-lookup.c:4231 #, gcc-internal-format @@ -30333,27 +30337,27 @@ msgstr "argumentberoende uppslagning hittar %q+D" #: cp/name-lookup.c:5983 #, gcc-internal-format msgid "XXX entering pop_everything ()\n" -msgstr "XXX går in i pop_everything ()\n" +msgstr "XXX gÃ¥r in i pop_everything ()\n" #: cp/name-lookup.c:5992 #, gcc-internal-format msgid "XXX leaving pop_everything ()\n" -msgstr "XXX lämnar pop_everything ()\n" +msgstr "XXX lämnar pop_everything ()\n" #: cp/optimize.c:355 #, gcc-internal-format msgid "making multiple clones of %qD" -msgstr "gör fler kloner av %qD" +msgstr "gör fler kloner av %qD" #: cp/parser.c:752 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "identifier %qE is a keyword in C++11" -msgstr "identifieraren %qE kommer att bli ett nyckelord i C++0x" +msgstr "identifieraren %qE är ett nyckelord i C++11" #: cp/parser.c:2374 #, gcc-internal-format msgid "%<#pragma%> is not allowed here" -msgstr "%<#pragma%> är inte tillåtet här" +msgstr "%<#pragma%> är inte tillÃ¥tet här" #: cp/parser.c:2405 #, gcc-internal-format @@ -30368,7 +30372,7 @@ msgstr "%<::%E%> har inte deklarerats" #: cp/parser.c:2411 #, gcc-internal-format msgid "request for member %qE in non-class type %qT" -msgstr "begäran av medlem %qE i typ %qT som inte är en klasstyp" +msgstr "begäran av medlem %qE i typ %qT som inte är en klasstyp" #: cp/parser.c:2414 #, gcc-internal-format @@ -30383,52 +30387,52 @@ msgstr "%qE har inte deklarerats" #: cp/parser.c:2424 #, gcc-internal-format msgid "%<%E::%E%> is not a type" -msgstr "%<%E::%E%> är inte en typ" +msgstr "%<%E::%E%> är inte en typ" #: cp/parser.c:2428 #, gcc-internal-format msgid "%<%E::%E%> is not a class or namespace" -msgstr "%<%E::%E%> är inte en klass eller namnrymd" +msgstr "%<%E::%E%> är inte en klass eller namnrymd" #: cp/parser.c:2433 #, gcc-internal-format msgid "%<%E::%E%> is not a class, namespace, or enumeration" -msgstr "%<%E::%E%> är inte en klass, namnrymd eller uppräkning" +msgstr "%<%E::%E%> är inte en klass, namnrymd eller uppräkning" #: cp/parser.c:2446 #, gcc-internal-format msgid "%<::%E%> is not a type" -msgstr "%<::%E%> är inte en typ" +msgstr "%<::%E%> är inte en typ" #: cp/parser.c:2449 #, gcc-internal-format msgid "%<::%E%> is not a class or namespace" -msgstr "%<::%E%> är inte en klass eller namnrymd" +msgstr "%<::%E%> är inte en klass eller namnrymd" #: cp/parser.c:2453 #, gcc-internal-format msgid "%<::%E%> is not a class, namespace, or enumeration" -msgstr "%<::%E%> är inte en klass, namnrymd eller uppräkning" +msgstr "%<::%E%> är inte en klass, namnrymd eller uppräkning" #: cp/parser.c:2465 #, gcc-internal-format msgid "%qE is not a type" -msgstr "%qE är inte en typ" +msgstr "%qE är inte en typ" #: cp/parser.c:2468 #, gcc-internal-format msgid "%qE is not a class or namespace" -msgstr "%qE är inte en klass eller namnrymd" +msgstr "%qE är inte en klass eller namnrymd" #: cp/parser.c:2472 #, gcc-internal-format msgid "%qE is not a class, namespace, or enumeration" -msgstr "%qE är inte en klass, namnrymd eller uppräkning" +msgstr "%qE är inte en klass, namnrymd eller uppräkning" #: cp/parser.c:2515 #, gcc-internal-format msgid "ISO C++ 1998 does not support %<long long%>" -msgstr "ISO C++ 1998 stödjer inte %<long long%>" +msgstr "ISO C++ 1998 stödjer inte %<long long%>" #: cp/parser.c:2537 #, gcc-internal-format @@ -30438,7 +30442,7 @@ msgstr "dubblerad %qs" #: cp/parser.c:2582 #, gcc-internal-format msgid "new types may not be defined in a return type" -msgstr "nya typer får inte definieras i en returtyp" +msgstr "nya typer fÃ¥r inte definieras i en returtyp" #: cp/parser.c:2584 #, gcc-internal-format @@ -30448,12 +30452,12 @@ msgstr "(kanske ett semikolon saknas efter definitionen av %qT)" #: cp/parser.c:2604 cp/parser.c:5102 cp/pt.c:7239 #, gcc-internal-format msgid "%qT is not a template" -msgstr "%qT är inte en mall" +msgstr "%qT är inte en mall" #: cp/parser.c:2606 #, gcc-internal-format msgid "%qE is not a template" -msgstr "%qE är inte en mall" +msgstr "%qE är inte en mall" #: cp/parser.c:2608 #, gcc-internal-format @@ -30463,87 +30467,87 @@ msgstr "ogiltigt mall-id" #: cp/parser.c:2641 #, gcc-internal-format msgid "floating-point literal cannot appear in a constant-expression" -msgstr "en flyttalsliteral får inte finnas i ett konstantuttryck" +msgstr "en flyttalsliteral fÃ¥r inte finnas i ett konstantuttryck" #: cp/parser.c:2645 cp/pt.c:13485 #, gcc-internal-format msgid "a cast to a type other than an integral or enumeration type cannot appear in a constant-expression" -msgstr "en typomvandling till en annan typ än en heltals- eller uppräkningstyp kan inte förekomma i ett konstantuttryck" +msgstr "en typomvandling till en annan typ än en heltals- eller uppräkningstyp kan inte förekomma i ett konstantuttryck" #: cp/parser.c:2650 #, gcc-internal-format msgid "%<typeid%> operator cannot appear in a constant-expression" -msgstr "%<typeid%>-operator får inte finnas i ett konstantuttryck" +msgstr "%<typeid%>-operator fÃ¥r inte finnas i ett konstantuttryck" #: cp/parser.c:2654 #, gcc-internal-format msgid "non-constant compound literals cannot appear in a constant-expression" -msgstr "ej konstanta sammansatta literaler får inte finnas i ett konstantuttryck" +msgstr "ej konstanta sammansatta literaler fÃ¥r inte finnas i ett konstantuttryck" #: cp/parser.c:2658 #, gcc-internal-format msgid "a function call cannot appear in a constant-expression" -msgstr "ett funktionsanrop får inte finnas i ett konstantuttryck" +msgstr "ett funktionsanrop fÃ¥r inte finnas i ett konstantuttryck" #: cp/parser.c:2662 #, gcc-internal-format msgid "an increment cannot appear in a constant-expression" -msgstr "en ökning får inte finnas i ett konstantuttryck" +msgstr "en ökning fÃ¥r inte finnas i ett konstantuttryck" #: cp/parser.c:2666 #, gcc-internal-format msgid "an decrement cannot appear in a constant-expression" -msgstr "en minskning får inte finnas i ett konstantuttryck" +msgstr "en minskning fÃ¥r inte finnas i ett konstantuttryck" #: cp/parser.c:2670 #, gcc-internal-format msgid "an array reference cannot appear in a constant-expression" -msgstr "en vektorreferens får inte finnas i ett konstantuttryck" +msgstr "en vektorreferens fÃ¥r inte finnas i ett konstantuttryck" #: cp/parser.c:2674 #, gcc-internal-format msgid "the address of a label cannot appear in a constant-expression" -msgstr "adressen till en etikett får inte finnas i ett konstantuttryck" +msgstr "adressen till en etikett fÃ¥r inte finnas i ett konstantuttryck" #: cp/parser.c:2678 #, gcc-internal-format msgid "calls to overloaded operators cannot appear in a constant-expression" -msgstr "anrop till överlagrade operatorer får inte finnas i ett konstantuttryck" +msgstr "anrop till överlagrade operatorer fÃ¥r inte finnas i ett konstantuttryck" #: cp/parser.c:2682 #, gcc-internal-format msgid "an assignment cannot appear in a constant-expression" -msgstr "en tilldelning får inte finnas i ett konstantuttryck" +msgstr "en tilldelning fÃ¥r inte finnas i ett konstantuttryck" #: cp/parser.c:2685 #, gcc-internal-format msgid "a comma operator cannot appear in a constant-expression" -msgstr "en kommaoperator får inte finnas i ett konstantuttryck" +msgstr "en kommaoperator fÃ¥r inte finnas i ett konstantuttryck" #: cp/parser.c:2689 #, gcc-internal-format msgid "a call to a constructor cannot appear in a constant-expression" -msgstr "ett anrop till en konstruerare får inte finnas i ett konstantuttryck" +msgstr "ett anrop till en konstruerare fÃ¥r inte finnas i ett konstantuttryck" #: cp/parser.c:2693 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "a transaction expression cannot appear in a constant-expression" -msgstr "ett funktionsanrop får inte finnas i ett konstantuttryck" +msgstr "ett transaktionsuttryck fÃ¥r inte finnas i ett konstantuttryck" #: cp/parser.c:2739 #, gcc-internal-format msgid "%qs cannot appear in a constant-expression" -msgstr "%qs får inte finnas i ett konstantuttryck" +msgstr "%qs fÃ¥r inte finnas i ett konstantuttryck" #: cp/parser.c:2768 #, gcc-internal-format msgid "invalid use of template-name %qE without an argument list" -msgstr "ogiltig användning av mallnamnet %qE utan en argumentlista" +msgstr "ogiltig användning av mallnamnet %qE utan en argumentlista" #: cp/parser.c:2771 #, gcc-internal-format msgid "invalid use of destructor %qD as a type" -msgstr "ogiltig användning av destruerare %qD som en typ" +msgstr "ogiltig användning av destruerare %qD som en typ" #. Something like 'unsigned A a;' #: cp/parser.c:2774 @@ -30555,22 +30559,22 @@ msgstr "ogiltig kombination av flera typkvalificerare" #: cp/parser.c:2778 #, gcc-internal-format msgid "%qE does not name a type" -msgstr "%qE är inte namnet på en typ" +msgstr "%qE är inte namnet pÃ¥ en typ" #: cp/parser.c:2787 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "C++11 %<constexpr%> only available with -std=c++11 or -std=gnu++11" -msgstr "C++0x %<constexpr%> är endast tillgängligt med -std=c++0x eller -std=gnu++0x" +msgstr "C++11 %<constexpr%> är endast tillgängligt med -std=c++11 eller -std=gnu++11" #: cp/parser.c:2814 #, gcc-internal-format msgid "(perhaps %<typename %T::%E%> was intended)" -msgstr "(kanske %<typename %T::%E%> avsågs)" +msgstr "(kanske %<typename %T::%E%> avsÃ¥gs)" #: cp/parser.c:2829 #, gcc-internal-format msgid "%qE in namespace %qE does not name a type" -msgstr "%qE i namnrymden %qE är inte namnet på en typ" +msgstr "%qE i namnrymden %qE är inte namnet pÃ¥ en typ" #. A<T>::A<T>() #: cp/parser.c:2835 @@ -30586,17 +30590,17 @@ msgstr "typ %qT har inga mallkonstruerare" #: cp/parser.c:2843 #, gcc-internal-format msgid "need %<typename%> before %<%T::%E%> because %qT is a dependent scope" -msgstr "%<typename%> behövs före %<%T::%E%> för att %qT är en beroende räckvidd" +msgstr "%<typename%> behövs före %<%T::%E%> för att %qT är en beroende räckvidd" #: cp/parser.c:2847 #, gcc-internal-format msgid "%qE in %q#T does not name a type" -msgstr "%qE i %q#T är inte namnet på en typ" +msgstr "%qE i %q#T är inte namnet pÃ¥ en typ" #: cp/parser.c:3400 #, gcc-internal-format msgid "expected string-literal" -msgstr "strängliteral förväntades" +msgstr "strängliteral förväntades" #: cp/parser.c:3462 #, gcc-internal-format @@ -30606,7 +30610,7 @@ msgstr "" #: cp/parser.c:3505 #, gcc-internal-format msgid "a wide string is invalid in this context" -msgstr "en bred sträng är inte tillåten i denna kontext" +msgstr "en bred sträng är inte tillÃ¥ten i denna kontext" #: cp/parser.c:3612 cp/parser.c:3622 #, gcc-internal-format @@ -30614,14 +30618,14 @@ msgid "unable to find character literal operator %qD with %qT argument" msgstr "" #: cp/parser.c:3719 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unable to find numeric literal operator %qD" -msgstr "kan inte hitta ett register att spilla i klass %qs" +msgstr "kan inte hitta en numerisk literaloperator %qD" #: cp/parser.c:3746 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unable to find string literal operator %qD" -msgstr "kan inte hitta ett register att spilla i klass %qs" +msgstr "kan inte hitta en strängliteraloperator %qD" #: cp/parser.c:3755 #, gcc-internal-format @@ -30631,52 +30635,52 @@ msgstr "" #: cp/parser.c:3815 cp/parser.c:10361 #, gcc-internal-format msgid "expected declaration" -msgstr "en deklaration förväntades" +msgstr "en deklaration förväntades" #: cp/parser.c:3918 #, gcc-internal-format msgid "fixed-point types not supported in C++" -msgstr "fixdecimaltyper stöds inte i C++" +msgstr "fixdecimaltyper stöds inte i C++" #: cp/parser.c:4009 #, gcc-internal-format msgid "ISO C++ forbids braced-groups within expressions" -msgstr "ISO C++ förbjuder klammergrupper inuti uttryck" +msgstr "ISO C++ förbjuder klammergrupper inuti uttryck" #: cp/parser.c:4021 #, gcc-internal-format msgid "statement-expressions are not allowed outside functions nor in template-argument lists" -msgstr "satsuttryck är inte tillåtna utanför funktioner eller i mallargumentlistor" +msgstr "satsuttryck är inte tillÃ¥tna utanför funktioner eller i mallargumentlistor" #: cp/parser.c:4081 cp/parser.c:4231 cp/parser.c:4384 #, gcc-internal-format msgid "expected primary-expression" -msgstr "primäruttryck förväntades" +msgstr "primäruttryck förväntades" #: cp/parser.c:4111 #, gcc-internal-format msgid "%<this%> may not be used in this context" -msgstr "%<this%> kan inte användas i detta sammanhang" +msgstr "%<this%> kan inte användas i detta sammanhang" #: cp/parser.c:4226 #, gcc-internal-format msgid "a template declaration cannot appear at block scope" -msgstr "en malldeklaration får inte förekomma på blocknivå" +msgstr "en malldeklaration fÃ¥r inte förekomma pÃ¥ blocknivÃ¥" #: cp/parser.c:4360 #, gcc-internal-format msgid "local variable %qD may not appear in this context" -msgstr "lokal variabel %qD får inte förekomma i detta sammanhang" +msgstr "lokal variabel %qD fÃ¥r inte förekomma i detta sammanhang" #: cp/parser.c:4524 #, gcc-internal-format msgid "expected id-expression" -msgstr "id-uttryck förväntades" +msgstr "id-uttryck förväntades" #: cp/parser.c:4654 #, gcc-internal-format msgid "scope %qT before %<~%> is not a class-name" -msgstr "räckvidd %qT före %<~%> är inte ett klassnamn" +msgstr "räckvidd %qT före %<~%> är inte ett klassnamn" #: cp/parser.c:4776 #, gcc-internal-format @@ -30686,7 +30690,7 @@ msgstr "deklaration av %<~%T%> som medlem av %qT" #: cp/parser.c:4791 #, gcc-internal-format msgid "typedef-name %qD used as destructor declarator" -msgstr "typedef-namnet %qD använt som destruerardeklarerare" +msgstr "typedef-namnet %qD använt som destruerardeklarerare" #: cp/parser.c:4824 #, gcc-internal-format @@ -30696,44 +30700,44 @@ msgstr "" #: cp/parser.c:4835 cp/parser.c:16229 #, gcc-internal-format msgid "expected unqualified-id" -msgstr "okvalificerat id förväntades" +msgstr "okvalificerat id förväntades" #: cp/parser.c:4942 #, gcc-internal-format msgid "found %<:%> in nested-name-specifier, expected %<::%>" -msgstr "%<:%> hittades i kapslad namnspecifikation, %<::%> förväntades" +msgstr "%<:%> hittades i kapslad namnspecifikation, %<::%> förväntades" #: cp/parser.c:5011 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "decltype evaluates to %qT, which is not a class or enumeration type" -msgstr "%T slås upp till %qT som inte är en uppräkningstyp" +msgstr "decltype beräknas till %qT, som inte är en klass eller uppräkningstyp" #: cp/parser.c:5103 cp/typeck.c:2444 cp/typeck.c:2464 #, gcc-internal-format msgid "%qD is not a template" -msgstr "%qD är inte en mall" +msgstr "%qD är inte en mall" #: cp/parser.c:5181 #, gcc-internal-format msgid "expected nested-name-specifier" -msgstr "nästat namn-specificerare förväntades" +msgstr "nästat namn-specificerare förväntades" #: cp/parser.c:5378 cp/parser.c:7089 #, gcc-internal-format msgid "types may not be defined in casts" -msgstr "typer får inte definieras i typkonverteringar" +msgstr "typer fÃ¥r inte definieras i typkonverteringar" #: cp/parser.c:5438 #, gcc-internal-format msgid "types may not be defined in a %<typeid%> expression" -msgstr "typer får inte definieras i ett %<typeid%>-uttryck" +msgstr "typer fÃ¥r inte definieras i ett %<typeid%>-uttryck" #. Warn the user that a compound literal is not #. allowed in standard C++. #: cp/parser.c:5547 #, gcc-internal-format msgid "ISO C++ forbids compound-literals" -msgstr "ISO C++ förbjuder sammansatta literaler" +msgstr "ISO C++ förbjuder sammansatta literaler" #: cp/parser.c:5937 #, gcc-internal-format @@ -30743,72 +30747,72 @@ msgstr "%qE har inte klasstyp" #: cp/parser.c:6026 cp/typeck.c:2358 #, gcc-internal-format msgid "invalid use of %qD" -msgstr "ogiltigt användning av %qD" +msgstr "ogiltigt användning av %qD" #: cp/parser.c:6035 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<%D::%D%> is not a class member" -msgstr "%<%D::%D%> är inte en medlem av %qT" +msgstr "%<%D::%D%> är inte en klassmedlem" #: cp/parser.c:6296 #, gcc-internal-format msgid "non-scalar type" -msgstr "icke skalär typ" +msgstr "icke skalär typ" #: cp/parser.c:6390 #, gcc-internal-format msgid "ISO C++ does not allow %<alignof%> with a non-type" -msgstr "ISO C++ tillåter inte %<alignof%> med annat än en typ" +msgstr "ISO C++ tillÃ¥ter inte %<alignof%> med annat än en typ" #: cp/parser.c:6453 #, gcc-internal-format msgid "types may not be defined in %<noexcept%> expressions" -msgstr "typer får inte definieras i %<noexcept%>-uttryck" +msgstr "typer fÃ¥r inte definieras i %<noexcept%>-uttryck" #: cp/parser.c:6678 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "types may not be defined in a new-expression" -msgstr "typer får inte definieras i en new-type-id" +msgstr "typer fÃ¥r inte definieras i en new-uttryck" #: cp/parser.c:6691 #, gcc-internal-format msgid "array bound forbidden after parenthesized type-id" -msgstr "vektorgräns är förbjuden efter typ-id i parenteser" +msgstr "vektorgräns är förbjuden efter typ-id i parenteser" #: cp/parser.c:6693 #, gcc-internal-format msgid "try removing the parentheses around the type-id" -msgstr "försök ta bort parenteserna runt typ-id:t" +msgstr "försök ta bort parenteserna runt typ-id:t" #: cp/parser.c:6774 #, gcc-internal-format msgid "types may not be defined in a new-type-id" -msgstr "typer får inte definieras i en new-type-id" +msgstr "typer fÃ¥r inte definieras i en new-type-id" #: cp/parser.c:6898 #, gcc-internal-format msgid "expression in new-declarator must have integral or enumeration type" -msgstr "uttryck i new-deklarerare måste ha heltals- eller uppräkningstyp" +msgstr "uttryck i new-deklarerare mÃ¥ste ha heltals- eller uppräkningstyp" #: cp/parser.c:7154 #, gcc-internal-format msgid "use of old-style cast" -msgstr "användning av gammaldags typkonvertering" +msgstr "användning av gammaldags typkonvertering" #: cp/parser.c:7283 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<>>%> operator is treated as two right angle brackets in C++11" -msgstr "operatorn %<>>%> kommer att hanteras som två högervinkelparenteser i C++0x" +msgstr "operatorn %<>>%> hanteras som tvÃ¥ högervinkelparenteser i C++11" #: cp/parser.c:7286 #, gcc-internal-format msgid "suggest parentheses around %<>>%> expression" -msgstr "föreslår parenteser runt %<>>%>-uttryck" +msgstr "föreslÃ¥r parenteser runt %<>>%>-uttryck" #: cp/parser.c:7431 #, gcc-internal-format msgid "ISO C++ does not allow ?: with omitted middle operand" -msgstr "ISO C++ tillåter inte ?: med mellersta operanden utelämnad" +msgstr "ISO C++ tillÃ¥ter inte ?: med mellersta operanden utelämnad" #: cp/parser.c:8051 #, gcc-internal-format @@ -30818,7 +30822,7 @@ msgstr "lambdauttryck i oevaluerat sammanhang" #: cp/parser.c:8180 #, gcc-internal-format msgid "expected end of capture-list" -msgstr "slut på fångstlista förväntades" +msgstr "slut pÃ¥ fÃ¥ngstlista förväntades" #: cp/parser.c:8194 #, gcc-internal-format @@ -30828,17 +30832,17 @@ msgstr "" #: cp/parser.c:8235 #, gcc-internal-format msgid "ISO C++ does not allow initializers in lambda expression capture lists" -msgstr "ISO C++ tillåter inte initierare i lambdauttrycks fångstlistor" +msgstr "ISO C++ tillÃ¥ter inte initierare i lambdauttrycks fÃ¥ngstlistor" #: cp/parser.c:8268 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "capture of non-variable %qD " -msgstr "ökning av endast läsbar variabel %qD" +msgstr "fÃ¥ngst av en icke-variabel %qD" #: cp/parser.c:8270 cp/parser.c:8279 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q+#D declared here" -msgstr "%q+D är deklarerad här" +msgstr "%q+#D är deklarerad här" #: cp/parser.c:8276 #, gcc-internal-format @@ -30858,22 +30862,22 @@ msgstr "" #: cp/parser.c:8365 #, gcc-internal-format msgid "default argument specified for lambda parameter" -msgstr "standardargumentet angivet för lambdaparameter" +msgstr "standardargumentet angivet för lambdaparameter" #: cp/parser.c:8768 #, gcc-internal-format msgid "expected labeled-statement" -msgstr "etikettsats förväntades" +msgstr "etikettsats förväntades" #: cp/parser.c:8806 #, gcc-internal-format msgid "case label %qE not within a switch statement" -msgstr "case-etikett %qE är inte i en switch-sats" +msgstr "case-etikett %qE är inte i en switch-sats" #: cp/parser.c:8881 #, gcc-internal-format msgid "need %<typename%> before %qE because %qT is a dependent scope" -msgstr "%<typename%> behövs före %qE för att %qT är en beroende räckvidd" +msgstr "%<typename%> behövs före %qE för att %qT är en beroende räckvidd" #: cp/parser.c:8890 #, gcc-internal-format @@ -30881,24 +30885,24 @@ msgid "%<%T::%D%> names the constructor, not the type" msgstr "%<%T::%D%> namnger konstrueraren, inte typen" #: cp/parser.c:8939 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "compound-statement in constexpr function" -msgstr "%qD är inte en constexpr-funktion" +msgstr "sammansatt sats i en constexpr-funktion" #: cp/parser.c:9151 cp/parser.c:22258 #, gcc-internal-format msgid "expected selection-statement" -msgstr "selektionssats förväntades" +msgstr "selektionssats förväntades" #: cp/parser.c:9184 #, gcc-internal-format msgid "types may not be defined in conditions" -msgstr "typer får inte definieras i villkor" +msgstr "typer fÃ¥r inte definieras i villkor" #: cp/parser.c:9527 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "range-based %<for%> expression of type %qT has incomplete type" -msgstr "uttryckssats har ofullständig typ" +msgstr "intervallbaserat %<for%>-uttryck av typen %qT har ofullständig typ" #: cp/parser.c:9565 #, gcc-internal-format @@ -30911,30 +30915,30 @@ msgid "range-based %<for%> expression of type %qT has a %<begin%> member but not msgstr "" #: cp/parser.c:9609 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "inconsistent begin/end types in range-based %<for%> statement: %qT and %qT" -msgstr "inkonsistenta start-/sluttyper i intervallbaserad for: %qT och %qT" +msgstr "inkonsistenta start-/sluttyper i intervallbaserat %<for%>-sats: %qT och %qT" #: cp/parser.c:9740 cp/parser.c:22261 #, gcc-internal-format msgid "expected iteration-statement" -msgstr "iterationssats förväntades" +msgstr "iterationssats förväntades" #: cp/parser.c:9787 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "range-based %<for%> loops are not allowed in C++98 mode" -msgstr "intervallbaserade for-slingor är inte tillåtna i C++98-läge" +msgstr "intervallbaserade %<for%>-slingor är inte tillÃ¥tna i C++98-läge" #. Issue a warning about this use of a GNU extension. #: cp/parser.c:9909 #, gcc-internal-format msgid "ISO C++ forbids computed gotos" -msgstr "ISO C++ förbjuder beräknade goto" +msgstr "ISO C++ förbjuder beräknade goto" #: cp/parser.c:9922 cp/parser.c:22264 #, gcc-internal-format msgid "expected jump-statement" -msgstr "hoppsats förväntades" +msgstr "hoppsats förväntades" #: cp/parser.c:10054 cp/parser.c:18855 #, gcc-internal-format @@ -30949,49 +30953,49 @@ msgstr "%<__label__%> som inte inleder ett block" #: cp/parser.c:10439 #, gcc-internal-format msgid "mixing declarations and function-definitions is forbidden" -msgstr "att blanda deklarationer och funktionsdefinitioner är förbjudet" +msgstr "att blanda deklarationer och funktionsdefinitioner är förbjudet" #: cp/parser.c:10583 #, gcc-internal-format msgid "%<friend%> used outside of class" -msgstr "%<friend%> använd utanför en klass" +msgstr "%<friend%> använd utanför en klass" #. Complain about `auto' as a storage specifier, if #. we're complaining about C++0x compatibility. #: cp/parser.c:10642 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<auto%> changes meaning in C++11; please remove it" -msgstr "%<auto%> kommer ändra betydelse i C++0x; var god ta bort det" +msgstr "%<auto%> ändrar betydelse i C++11; var god ta bort det" #: cp/parser.c:10678 #, gcc-internal-format msgid "decl-specifier invalid in condition" -msgstr "decl-specificerare är ogiltig i villkor" +msgstr "decl-specificerare är ogiltig i villkor" #: cp/parser.c:10769 #, gcc-internal-format msgid "class definition may not be declared a friend" -msgstr "klassdefinition kan inte deklareras som en vän" +msgstr "klassdefinition kan inte deklareras som en vän" #: cp/parser.c:10838 cp/parser.c:19227 #, gcc-internal-format msgid "templates may not be %<virtual%>" -msgstr "mallar får inte vara %<virtual%>" +msgstr "mallar fÃ¥r inte vara %<virtual%>" #: cp/parser.c:10879 #, gcc-internal-format msgid "invalid linkage-specification" -msgstr "ogiltig länkklasspecifikation" +msgstr "ogiltig länkklasspecifikation" #: cp/parser.c:11014 #, gcc-internal-format msgid "types may not be defined in %<decltype%> expressions" -msgstr "typer får inte definieras i %<decltype%>-uttryck" +msgstr "typer fÃ¥r inte definieras i %<decltype%>-uttryck" #: cp/parser.c:11271 #, gcc-internal-format msgid "invalid use of %<auto%> in conversion operator" -msgstr "ogiltig användning av %<auto%> i konverteringsoperator" +msgstr "ogiltig användning av %<auto%> i konverteringsoperator" #: cp/parser.c:11357 #, gcc-internal-format @@ -31001,12 +31005,12 @@ msgstr "endast konstruerare tar medlemsinitierare" #: cp/parser.c:11379 #, gcc-internal-format msgid "cannot expand initializer for member %<%D%>" -msgstr "det går inte att expandera initierare för medlem %<%D%>" +msgstr "det gÃ¥r inte att expandera initierare för medlem %<%D%>" #: cp/parser.c:11391 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "mem-initializer for %qD follows constructor delegation" -msgstr "statisk deklaration av %q+D följer på icke-statisk deklaration" +msgstr "minnesinitierare för %qD följer en konstruerardelegering" #: cp/parser.c:11403 #, gcc-internal-format @@ -31021,17 +31025,17 @@ msgstr "anakronistisk gammaldags basklassinitierare" #: cp/parser.c:11523 #, gcc-internal-format msgid "keyword %<typename%> not allowed in this context (a qualified member initializer is implicitly a type)" -msgstr "nyckelordet %<typename%> är inte tillåtet i detta sammanhang (en kvalificerat medlemsinitierare är implicit en typ)" +msgstr "nyckelordet %<typename%> är inte tillÃ¥tet i detta sammanhang (en kvalificerat medlemsinitierare är implicit en typ)" #: cp/parser.c:11840 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected empty string after %<operator%> keyword" -msgstr "en sträng förväntades efter %<#pragma message%>" +msgstr "en tom sträng förväntades efter nyckelordet %<operator%>" #: cp/parser.c:11858 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected suffix identifier" -msgstr "identifierare förväntades" +msgstr "suffixidentifierare förväntades" #: cp/parser.c:11863 #, gcc-internal-format @@ -31041,13 +31045,13 @@ msgstr "" #: cp/parser.c:11878 #, gcc-internal-format msgid "expected operator" -msgstr "operator förväntades" +msgstr "operator förväntades" #. Warn that we do not support `export'. #: cp/parser.c:11915 #, gcc-internal-format msgid "keyword %<export%> not implemented, and will be ignored" -msgstr "nyckelordet %<export%> är inte implementerat och kommer ignoreras" +msgstr "nyckelordet %<export%> är inte implementerat och kommer ignoreras" #: cp/parser.c:12106 cp/parser.c:12204 cp/parser.c:12311 cp/parser.c:17331 #, gcc-internal-format @@ -31067,12 +31071,12 @@ msgstr "mallparameterpaket kan inte ha standardargument" #: cp/parser.c:12397 #, gcc-internal-format msgid "expected template-id" -msgstr "mall-id förväntades" +msgstr "mall-id förväntades" #: cp/parser.c:12444 cp/parser.c:22222 #, gcc-internal-format msgid "expected %<<%>" -msgstr "%<<%> förväntades" +msgstr "%<<%> förväntades" #: cp/parser.c:12451 #, gcc-internal-format @@ -31082,7 +31086,7 @@ msgstr "%<<::%> kan inte inleda en argumentlista till en mall" #: cp/parser.c:12455 #, gcc-internal-format msgid "%<<:%> is an alternate spelling for %<[%>. Insert whitespace between %<<%> and %<::%>" -msgstr "%<<:%> är en alternativ stavning av %<[%>. Lägg in mellanrum mellan %<<%> och %<::%>" +msgstr "%<<:%> är en alternativ stavning av %<[%>. Lägg in mellanrum mellan %<<%> och %<::%>" #: cp/parser.c:12533 #, gcc-internal-format @@ -31093,78 +31097,78 @@ msgstr "syntaxfel i argumentlista till mall" #: cp/parser.c:12601 cp/parser.c:12716 cp/parser.c:12927 #, gcc-internal-format msgid "expected template-name" -msgstr "mallnamn förväntades" +msgstr "mallnamn förväntades" #. Explain what went wrong. #: cp/parser.c:12647 #, gcc-internal-format msgid "non-template %qD used as template" -msgstr "icke-mall %qD använd som mall" +msgstr "icke-mall %qD använd som mall" #: cp/parser.c:12649 #, gcc-internal-format msgid "use %<%T::template %D%> to indicate that it is a template" -msgstr "använd %<%T::template %D%> för att indikera att det är en mall" +msgstr "använd %<%T::template %D%> för att indikera att det är en mall" #: cp/parser.c:12783 #, gcc-internal-format msgid "expected parameter pack before %<...%>" -msgstr "parameterpaket förväntades före %<...%>" +msgstr "parameterpaket förväntades före %<...%>" #: cp/parser.c:12892 cp/parser.c:12910 cp/parser.c:13051 #, gcc-internal-format msgid "expected template-argument" -msgstr "mallargument förväntades" +msgstr "mallargument förväntades" #: cp/parser.c:13034 #, gcc-internal-format msgid "invalid non-type template argument" -msgstr "ogiltigt mallargument som inte är en typ" +msgstr "ogiltigt mallargument som inte är en typ" #: cp/parser.c:13150 #, gcc-internal-format msgid "explicit instantiation shall not use %<inline%> specifier" -msgstr "en explicit instansiering skall inte använda %<inline%>-specificerare" +msgstr "en explicit instansiering skall inte använda %<inline%>-specificerare" #: cp/parser.c:13153 #, gcc-internal-format msgid "explicit instantiation shall not use %<constexpr%> specifier" -msgstr "en explicit instansiering skall inte använda %<constexpr%>-specificerare" +msgstr "en explicit instansiering skall inte använda %<constexpr%>-specificerare" #: cp/parser.c:13212 #, gcc-internal-format msgid "template specialization with C linkage" -msgstr "mallspecialisering med C-länkning" +msgstr "mallspecialisering med C-länkning" #: cp/parser.c:13432 #, gcc-internal-format msgid "expected type specifier" -msgstr "typspecificerare förväntades" +msgstr "typspecificerare förväntades" #: cp/parser.c:13679 #, gcc-internal-format msgid "expected template-id for type" -msgstr "mall-id för typ förväntades" +msgstr "mall-id för typ förväntades" #: cp/parser.c:13706 #, gcc-internal-format msgid "expected type-name" -msgstr "typnamn förväntades" +msgstr "typnamn förväntades" #: cp/parser.c:13943 #, gcc-internal-format msgid "elaborated-type-specifier for a scoped enum must not use the %<%D%> keyword" -msgstr "beräknad typspecifikation för en enum med räckvidd får inte använda nyckelordet %<%D%>" +msgstr "beräknad typspecifikation för en enum med räckvidd fÃ¥r inte använda nyckelordet %<%D%>" #: cp/parser.c:14128 #, gcc-internal-format msgid "declaration %qD does not declare anything" -msgstr "deklaration %qD deklarerar inte något" +msgstr "deklaration %qD deklarerar inte nÃ¥got" #: cp/parser.c:14214 #, gcc-internal-format msgid "attributes ignored on uninstantiated type" -msgstr "attributet ignorerat på oinstansierad typ" +msgstr "attributet ignorerat pÃ¥ oinstansierad typ" #: cp/parser.c:14218 #, gcc-internal-format @@ -31174,27 +31178,27 @@ msgstr "attribut ignoreras vid mallinstansiering" #: cp/parser.c:14223 #, gcc-internal-format msgid "attributes ignored on elaborated-type-specifier that is not a forward declaration" -msgstr "attribut ignoreras för bearbetade typspecificerare som inte är en framåtdeklaration" +msgstr "attribut ignoreras för bearbetade typspecificerare som inte är en framÃ¥tdeklaration" #: cp/parser.c:14356 #, gcc-internal-format msgid "%qD is an enumeration template" -msgstr "%qD är en uppräkningsmall" +msgstr "%qD är en uppräkningsmall" #: cp/parser.c:14364 #, gcc-internal-format msgid "%qD is not an enumerator-name" -msgstr "%qD är inte ett uppräkningsnamn" +msgstr "%qD är inte ett uppräkningsnamn" #: cp/parser.c:14427 #, gcc-internal-format msgid "expected %<;%> or %<{%>" -msgstr "%<;%> eller %<{%> förväntades" +msgstr "%<;%> eller %<{%> förväntades" #: cp/parser.c:14475 #, gcc-internal-format msgid "cannot add an enumerator list to a template instantiation" -msgstr "det går inte att lägga till en uppräkningslista till en mallinstansiering" +msgstr "det gÃ¥r inte att lägga till en uppräkningslista till en mallinstansiering" #: cp/parser.c:14484 cp/parser.c:18435 #, gcc-internal-format @@ -31219,27 +31223,27 @@ msgstr "ogenomskinlig enum-specifikation utan namn" #: cp/parser.c:14542 #, gcc-internal-format msgid "opaque-enum-specifier must use a simple identifier" -msgstr "en ogenomskinlig enum-specifikation måste använda en enkel identifierare" +msgstr "en ogenomskinlig enum-specifikation mÃ¥ste använda en enkel identifierare" #: cp/parser.c:14718 #, gcc-internal-format msgid "%qD is not a namespace-name" -msgstr "%qD är inte ett namnrymdsnamn" +msgstr "%qD är inte ett namnrymdsnamn" #: cp/parser.c:14719 #, gcc-internal-format msgid "expected namespace-name" -msgstr "namnrymdsnamn förväntades" +msgstr "namnrymdsnamn förväntades" #: cp/parser.c:14844 #, gcc-internal-format msgid "%<namespace%> definition is not allowed here" -msgstr "%<namespace%>-definition är inte tillåten här" +msgstr "%<namespace%>-definition är inte tillÃ¥ten här" #: cp/parser.c:14990 #, gcc-internal-format msgid "a template-id may not appear in a using-declaration" -msgstr "ett mall-id får inte förekomma i en using-deklaration" +msgstr "ett mall-id fÃ¥r inte förekomma i en using-deklaration" #: cp/parser.c:15030 #, gcc-internal-format @@ -31247,35 +31251,35 @@ msgid "access declarations are deprecated in favour of using-declarations; sugge msgstr "" #: cp/parser.c:15085 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "types may not be defined in alias template declarations" -msgstr "typer får inte definieras i undantagsdeklarationer" +msgstr "typer fÃ¥r inte definieras i aliasmalldeklarationer" #: cp/parser.c:15532 #, gcc-internal-format msgid "a function-definition is not allowed here" -msgstr "en funktionsdefinition är inte tillåten här" +msgstr "en funktionsdefinition är inte tillÃ¥ten här" #: cp/parser.c:15544 #, gcc-internal-format msgid "an asm-specification is not allowed on a function-definition" -msgstr "en asm-specifikation är inte tillåten på en funktionsdefinition" +msgstr "en asm-specifikation är inte tillÃ¥ten pÃ¥ en funktionsdefinition" #: cp/parser.c:15548 #, gcc-internal-format msgid "attributes are not allowed on a function-definition" -msgstr "attribut är inte tillåtna vid en funktionsdefinition" +msgstr "attribut är inte tillÃ¥tna vid en funktionsdefinition" #: cp/parser.c:15585 #, gcc-internal-format msgid "expected constructor, destructor, or type conversion" -msgstr "konstruerare, destruerare eller typkonvertering förväntades" +msgstr "konstruerare, destruerare eller typkonvertering förväntades" #. Anything else is an error. #: cp/parser.c:15620 cp/parser.c:17500 #, gcc-internal-format msgid "expected initializer" -msgstr "initierare förväntades" +msgstr "initierare förväntades" #: cp/parser.c:15640 #, gcc-internal-format @@ -31285,7 +31289,7 @@ msgstr "ogiltig typ i deklaration" #: cp/parser.c:15716 #, gcc-internal-format msgid "initializer provided for function" -msgstr "initierare angiven för funktion" +msgstr "initierare angiven för funktion" #: cp/parser.c:15748 #, gcc-internal-format @@ -31295,27 +31299,27 @@ msgstr "attribut efter initierare inom parentes ignoreras" #: cp/parser.c:16152 #, gcc-internal-format msgid "array bound is not an integer constant" -msgstr "vektorgräns är inte en heltalskonstant" +msgstr "vektorgräns är inte en heltalskonstant" #: cp/parser.c:16273 #, gcc-internal-format msgid "cannot define member of dependent typedef %qT" -msgstr "det går inte att definiera medlem av beroende typedef %qT" +msgstr "det gÃ¥r inte att definiera medlem av beroende typedef %qT" #: cp/parser.c:16277 #, gcc-internal-format msgid "%<%T::%E%> is not a type" -msgstr "%<%T::%E%> är inte en typ" +msgstr "%<%T::%E%> är inte en typ" #: cp/parser.c:16305 #, gcc-internal-format msgid "invalid use of constructor as a template" -msgstr "ogiltig användning av konstruerare som en mall" +msgstr "ogiltig användning av konstruerare som en mall" #: cp/parser.c:16307 #, gcc-internal-format msgid "use %<%T::%D%> instead of %<%T::%D%> to name the constructor in a qualified name" -msgstr "använd %<%T::%D%> istället för %<%T::%D%> för att namnge konstrueraren i ett kvalificerat namn" +msgstr "använd %<%T::%D%> istället för %<%T::%D%> för att namnge konstrueraren i ett kvalificerat namn" #. We do not attempt to print the declarator #. here because we do not have enough @@ -31329,22 +31333,22 @@ msgstr "ogiltig deklarator" #: cp/parser.c:16390 #, gcc-internal-format msgid "expected declarator" -msgstr "deklarator förväntades" +msgstr "deklarator förväntades" #: cp/parser.c:16485 #, gcc-internal-format msgid "%qD is a namespace" -msgstr "%qD är en namnrymd" +msgstr "%qD är en namnrymd" #: cp/parser.c:16487 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot form pointer to member of non-class %q#T" -msgstr "skapar pekare till medlem av typ %qT som inte är en klass" +msgstr "kan inte skapa en pekare till medlem av %q#T som inte är en klass" #: cp/parser.c:16504 #, gcc-internal-format msgid "expected ptr-operator" -msgstr "oväntad pekaroperator" +msgstr "oväntad pekaroperator" #: cp/parser.c:16563 #, gcc-internal-format @@ -31352,99 +31356,99 @@ msgid "duplicate cv-qualifier" msgstr "upprepade cv-kvalificerare" #: cp/parser.c:16621 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "duplicate virt-specifier" -msgstr "upprepade cv-kvalificerare" +msgstr "upprepade virt-specificerare" #: cp/parser.c:16783 cp/typeck2.c:450 cp/typeck2.c:1670 #, gcc-internal-format msgid "invalid use of %<auto%>" -msgstr "ogiltigt användning av %<auto%>" +msgstr "ogiltigt användning av %<auto%>" #: cp/parser.c:16802 #, gcc-internal-format msgid "types may not be defined in template arguments" -msgstr "typer får inte definieras i mallargument" +msgstr "typer fÃ¥r inte definieras i mallargument" #: cp/parser.c:16883 #, gcc-internal-format msgid "expected type-specifier" -msgstr "typspecificerare förväntades" +msgstr "typspecificerare förväntades" #: cp/parser.c:17127 #, gcc-internal-format msgid "expected %<,%> or %<...%>" -msgstr "%<,%> eller %<...%> förväntades" +msgstr "%<,%> eller %<...%> förväntades" #: cp/parser.c:17184 #, gcc-internal-format msgid "types may not be defined in parameter types" -msgstr "typer får inte definieras i parametertyper" +msgstr "typer fÃ¥r inte definieras i parametertyper" #: cp/parser.c:17310 #, gcc-internal-format msgid "deprecated use of default argument for parameter of non-function" -msgstr "användning av standardargument för parametrar till annat än funktioner bör undvikas" +msgstr "användning av standardargument för parametrar till annat än funktioner bör undvikas" #: cp/parser.c:17314 #, gcc-internal-format msgid "default arguments are only permitted for function parameters" -msgstr "standardargument är endast tillåtna för funktionsparametrar" +msgstr "standardargument är endast tillÃ¥tna för funktionsparametrar" #: cp/parser.c:17333 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "parameter pack %qD cannot have a default argument" -msgstr "mallparameterpaket %qD kan inte ha ett standardargument" +msgstr "parameterpaket %qD kan inte ha ett standardargument" #: cp/parser.c:17341 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "parameter pack cannot have a default argument" -msgstr "mallparameterpaket kan inte ha ett standardargument" +msgstr "parameterpaket kan inte ha ett standardargument" #: cp/parser.c:17628 #, gcc-internal-format msgid "ISO C++ does not allow designated initializers" -msgstr "ISO C++ tillåter inte designerade initierare" +msgstr "ISO C++ tillÃ¥ter inte designerade initierare" #: cp/parser.c:17642 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C++ does not allow C99 designated initializers" -msgstr "ISO C++ tillåter inte designerade initierare" +msgstr "ISO C++ tillÃ¥ter inte C99:s designerade initierare" #: cp/parser.c:17746 cp/parser.c:17868 #, gcc-internal-format msgid "expected class-name" -msgstr "klassnamn förväntades" +msgstr "klassnamn förväntades" #: cp/parser.c:18057 #, gcc-internal-format msgid "expected %<;%> after class definition" -msgstr "%<;%> förväntades efter klassdefinition" +msgstr "%<;%> förväntades efter klassdefinition" #: cp/parser.c:18059 #, gcc-internal-format msgid "expected %<;%> after struct definition" -msgstr "%<;%> förväntades efter postdefinition" +msgstr "%<;%> förväntades efter postdefinition" #: cp/parser.c:18061 #, gcc-internal-format msgid "expected %<;%> after union definition" -msgstr "%<;%> förväntades efter uniondefinition" +msgstr "%<;%> förväntades efter uniondefinition" #: cp/parser.c:18383 #, gcc-internal-format msgid "expected %<{%> or %<:%>" -msgstr "%<{%> eller %<:%> förväntades" +msgstr "%<{%> eller %<:%> förväntades" #: cp/parser.c:18394 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot specify %<override%> for a class" -msgstr "kan inte hitta filen för klass %s" +msgstr "det gÃ¥r inte att ange %<override%> för en klass" #: cp/parser.c:18402 #, gcc-internal-format msgid "global qualification of class name is invalid" -msgstr "globala kvalificering av klassnamn är ogiltigt" +msgstr "globala kvalificering av klassnamn är ogiltigt" #: cp/parser.c:18409 #, gcc-internal-format @@ -31459,12 +31463,12 @@ msgstr "ogiltigt klassnamn i deklaration av %qD" #: cp/parser.c:18454 #, gcc-internal-format msgid "extra qualification not allowed" -msgstr "extra kvalifikation inte tillåten" +msgstr "extra kvalifikation inte tillÃ¥ten" #: cp/parser.c:18466 #, gcc-internal-format msgid "an explicit specialization must be preceded by %<template <>%>" -msgstr "en explicit specialisering måste föregås av %<template <>%>" +msgstr "en explicit specialisering mÃ¥ste föregÃ¥s av %<template <>%>" #: cp/parser.c:18496 #, gcc-internal-format @@ -31474,87 +31478,87 @@ msgstr "funktionsmall %qD omdeklarerad som en klassmall" #: cp/parser.c:18527 #, gcc-internal-format msgid "could not resolve typename type" -msgstr "det gick inte att lösa upp typnamnstyp" +msgstr "det gick inte att lösa upp typnamnstyp" #: cp/parser.c:18579 #, gcc-internal-format msgid "previous definition of %q+#T" -msgstr "föregående definition av %q+#T" +msgstr "föregÃ¥ende definition av %q+#T" #: cp/parser.c:18645 cp/parser.c:22267 #, gcc-internal-format msgid "expected class-key" -msgstr "klassnyckel förväntades" +msgstr "klassnyckel förväntades" #: cp/parser.c:18874 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "in C++03 a class-key must be used when declaring a friend" -msgstr "en klassnyckel måste användas när en vän deklareras" +msgstr "i C++03 mÃ¥ste en klassnyckel användas när en vän deklareras" #: cp/parser.c:18892 #, gcc-internal-format msgid "friend declaration does not name a class or function" -msgstr "vändeklaration som inte namnger en klass eller funktion" +msgstr "vändeklaration som inte namnger en klass eller funktion" #: cp/parser.c:19102 #, gcc-internal-format msgid "pure-specifier on function-definition" -msgstr "pure-specificerare på funktionsdefinition" +msgstr "pure-specificerare pÃ¥ funktionsdefinition" #: cp/parser.c:19150 #, gcc-internal-format msgid "expected %<;%> at end of member declaration" -msgstr "%<;%> förväntades vid slutet av medlemsdeklaration" +msgstr "%<;%> förväntades vid slutet av medlemsdeklaration" #: cp/parser.c:19221 #, gcc-internal-format msgid "invalid pure specifier (only %<= 0%> is allowed)" -msgstr "ogiltig pure-specifiserare (endast %<= 0%> är tillåtet)" +msgstr "ogiltig pure-specifiserare (endast %<= 0%> är tillÃ¥tet)" #: cp/parser.c:19256 #, gcc-internal-format msgid "a brace-enclosed initializer is not allowed here" -msgstr "en klammeromsluten initierare är inte tillåten här" +msgstr "en klammeromsluten initierare är inte tillÃ¥ten här" #: cp/parser.c:19387 #, gcc-internal-format msgid "%<virtual%> specified more than once in base-specified" -msgstr "%<virtual%> anges mer än en gång i basspecificerade" +msgstr "%<virtual%> anges mer än en gÃ¥ng i basspecificerade" #: cp/parser.c:19407 #, gcc-internal-format msgid "more than one access specifier in base-specified" -msgstr "mer än en åtkomstspecifikation i basspecificerade" +msgstr "mer än en Ã¥tkomstspecifikation i basspecificerade" #: cp/parser.c:19431 #, gcc-internal-format msgid "keyword %<typename%> not allowed outside of templates" -msgstr "nyckelordet %<typename%> är inte tillåtet utanför mallar" +msgstr "nyckelordet %<typename%> är inte tillÃ¥tet utanför mallar" #: cp/parser.c:19434 #, gcc-internal-format msgid "keyword %<typename%> not allowed in this context (the base class is implicitly a type)" -msgstr "nyckelordet %<typename%> är inte tillåtet i detta sammanhang (basklassen är implicit en typ)" +msgstr "nyckelordet %<typename%> är inte tillÃ¥tet i detta sammanhang (basklassen är implicit en typ)" #: cp/parser.c:19527 cp/parser.c:19609 #, gcc-internal-format msgid "types may not be defined in an exception-specification" -msgstr "typer får inte definieras i en undantagsspecifikation" +msgstr "typer fÃ¥r inte definieras i en undantagsspecifikation" #: cp/parser.c:19591 #, gcc-internal-format msgid "dynamic exception specifications are deprecated in C++0x; use %<noexcept%> instead" -msgstr "dynamiska undantagsspecifikationer undanbedes i C++0x, använd %<noexcept%> istället" +msgstr "dynamiska undantagsspecifikationer undanbedes i C++0x, använd %<noexcept%> istället" #: cp/parser.c:19790 #, gcc-internal-format msgid "types may not be defined in exception-declarations" -msgstr "typer får inte definieras i undantagsdeklarationer" +msgstr "typer fÃ¥r inte definieras i undantagsdeklarationer" #: cp/parser.c:20690 #, gcc-internal-format msgid "specializing member %<%T::%E%> requires %<template<>%> syntax" -msgstr "specialisering av medlem %<%T::%E%> kräver %<template<>%>-syntax" +msgstr "specialisering av medlem %<%T::%E%> kräver %<template<>%>-syntax" #: cp/parser.c:20695 #, gcc-internal-format @@ -31564,7 +31568,7 @@ msgstr "ogiltig omdeklaration av %<%T::%E%>" #: cp/parser.c:20699 #, gcc-internal-format msgid "too few template-parameter-lists" -msgstr "för få mallparameterlistor" +msgstr "för fÃ¥ mallparameterlistor" #. Otherwise, there are too many template parameter lists. We have #. something like: @@ -31573,12 +31577,12 @@ msgstr "för få mallparameterlistor" #: cp/parser.c:20706 #, gcc-internal-format msgid "too many template-parameter-lists" -msgstr "för många mallparameterlistor" +msgstr "för mÃ¥nga mallparameterlistor" #: cp/parser.c:21003 #, gcc-internal-format msgid "named return values are no longer supported" -msgstr "namngivna returvärden stödjs inte längre" +msgstr "namngivna returvärden stödjs inte längre" #: cp/parser.c:21090 #, gcc-internal-format @@ -31588,7 +31592,7 @@ msgstr "ogiltig deklaration av medlemsmall i lokal klass" #: cp/parser.c:21099 #, gcc-internal-format msgid "template with C linkage" -msgstr "mall med C-länkning" +msgstr "mall med C-länkning" #: cp/parser.c:21118 #, gcc-internal-format @@ -31613,177 +31617,177 @@ msgstr "explicit mallspecialisering kan inte ha en lagringsklass" #: cp/parser.c:21590 #, gcc-internal-format msgid "%<>>%> should be %<> >%> within a nested template argument list" -msgstr "%<>>%> skulle vara %<> >%> inuti en nästad mallargumentlista" +msgstr "%<>>%> skulle vara %<> >%> inuti en nästad mallargumentlista" #: cp/parser.c:21603 #, gcc-internal-format msgid "spurious %<>>%>, use %<>%> to terminate a template argument list" -msgstr "vilsekommet %<>>%>, använd %<>%> för att avsluta en mallargumentlista" +msgstr "vilsekommet %<>>%>, använd %<>%> för att avsluta en mallargumentlista" #: cp/parser.c:22009 #, gcc-internal-format msgid "invalid use of %qD in linkage specification" -msgstr "ogiltig användning av %qD i länkklasspecifikation" +msgstr "ogiltig användning av %qD i länkklasspecifikation" #: cp/parser.c:22022 #, gcc-internal-format msgid "%<__thread%> before %qD" -msgstr "%<__thread%> före %qD" +msgstr "%<__thread%> före %qD" #: cp/parser.c:22125 #, gcc-internal-format msgid "expected %<new%>" -msgstr "%<new%> förväntades" +msgstr "%<new%> förväntades" #: cp/parser.c:22128 #, gcc-internal-format msgid "expected %<delete%>" -msgstr "%<delete%> förväntades" +msgstr "%<delete%> förväntades" #: cp/parser.c:22131 #, gcc-internal-format msgid "expected %<return%>" -msgstr "%<return%> förväntades" +msgstr "%<return%> förväntades" #: cp/parser.c:22137 #, gcc-internal-format msgid "expected %<extern%>" -msgstr "%<extern%> förväntades" +msgstr "%<extern%> förväntades" #: cp/parser.c:22140 #, gcc-internal-format msgid "expected %<static_assert%>" -msgstr "%<static_assert%> förväntades" +msgstr "%<static_assert%> förväntades" #: cp/parser.c:22143 #, gcc-internal-format msgid "expected %<decltype%>" -msgstr "%<decltype%> förväntades" +msgstr "%<decltype%> förväntades" #: cp/parser.c:22146 #, gcc-internal-format msgid "expected %<operator%>" -msgstr "%<operator%> förväntades" +msgstr "%<operator%> förväntades" #: cp/parser.c:22149 #, gcc-internal-format msgid "expected %<class%>" -msgstr "%<class%> förväntades" +msgstr "%<class%> förväntades" #: cp/parser.c:22152 #, gcc-internal-format msgid "expected %<template%>" -msgstr "%<template%> förväntades" +msgstr "%<template%> förväntades" #: cp/parser.c:22155 #, gcc-internal-format msgid "expected %<namespace%>" -msgstr "%<namespace%> förväntades" +msgstr "%<namespace%> förväntades" #: cp/parser.c:22158 #, gcc-internal-format msgid "expected %<using%>" -msgstr "%<using%> förväntades" +msgstr "%<using%> förväntades" #: cp/parser.c:22161 #, gcc-internal-format msgid "expected %<asm%>" -msgstr "%<asm%> förväntades" +msgstr "%<asm%> förväntades" #: cp/parser.c:22164 #, gcc-internal-format msgid "expected %<try%>" -msgstr "%<try%> förväntades" +msgstr "%<try%> förväntades" #: cp/parser.c:22167 #, gcc-internal-format msgid "expected %<catch%>" -msgstr "%<catch%> förväntades" +msgstr "%<catch%> förväntades" #: cp/parser.c:22170 #, gcc-internal-format msgid "expected %<throw%>" -msgstr "%<throw%> förväntades" +msgstr "%<throw%> förväntades" #: cp/parser.c:22173 #, gcc-internal-format msgid "expected %<__label__%>" -msgstr "%<__label__%> förväntades" +msgstr "%<__label__%> förväntades" #: cp/parser.c:22176 #, gcc-internal-format msgid "expected %<@try%>" -msgstr "%<@try%> förväntades" +msgstr "%<@try%> förväntades" #: cp/parser.c:22179 #, gcc-internal-format msgid "expected %<@synchronized%>" -msgstr "%<synchronized%> förväntades" +msgstr "%<synchronized%> förväntades" #: cp/parser.c:22182 #, gcc-internal-format msgid "expected %<@throw%>" -msgstr "%<@throw%> förväntades" +msgstr "%<@throw%> förväntades" #: cp/parser.c:22185 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected %<__transaction_atomic%>" -msgstr "%<static_assert%> förväntades" +msgstr "%<__transaction_atomic%> förväntades" #: cp/parser.c:22188 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected %<__transaction_relaxed%>" -msgstr "%<static_assert%> förväntades" +msgstr "%<__transaction _relaxed%> förväntades" #: cp/parser.c:22219 #, gcc-internal-format msgid "expected %<::%>" -msgstr "%<::%> förväntades" +msgstr "%<::%> förväntades" #: cp/parser.c:22231 #, gcc-internal-format msgid "expected %<...%>" -msgstr "%<...%> förväntades" +msgstr "%<...%> förväntades" #: cp/parser.c:22234 #, gcc-internal-format msgid "expected %<*%>" -msgstr "%<*%> förväntades" +msgstr "%<*%> förväntades" #: cp/parser.c:22237 #, gcc-internal-format msgid "expected %<~%>" -msgstr "%<~%> förväntades" +msgstr "%<~%> förväntades" #: cp/parser.c:22243 #, gcc-internal-format msgid "expected %<:%> or %<::%>" -msgstr "%<:%> eller %<::%> förväntades" +msgstr "%<:%> eller %<::%> förväntades" #: cp/parser.c:22271 #, gcc-internal-format msgid "expected %<class%>, %<typename%>, or %<template%>" -msgstr "%<class%>, %<typename%> eller %<template%> förväntades" +msgstr "%<class%>, %<typename%> eller %<template%> förväntades" #: cp/parser.c:22509 #, gcc-internal-format msgid "%qs tag used in naming %q#T" -msgstr "%qs-tagg använd vid namngivning av %q#T" +msgstr "%qs-tagg använd vid namngivning av %q#T" #: cp/parser.c:22514 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q#T was previously declared here" -msgstr "tidigare deklarerad här" +msgstr "%q#T deklarerades tidigare här" #: cp/parser.c:22533 #, gcc-internal-format msgid "%qD redeclared with different access" -msgstr "%qD omdeklarerad med annan åtkomst" +msgstr "%qD omdeklarerad med annan Ã¥tkomst" #: cp/parser.c:22552 #, gcc-internal-format msgid "%<template%> (as a disambiguator) is only allowed within templates" -msgstr "%<template%> (för att lösa upp tvetydighet) är endast tillåtet inuti mallar" +msgstr "%<template%> (för att lösa upp tvetydighet) är endast tillÃ¥tet inuti mallar" #: cp/parser.c:22785 #, gcc-internal-format @@ -31798,12 +31802,12 @@ msgstr "felplacerad Objective-C++-konstruktion %<@%D%>" #: cp/parser.c:23111 #, gcc-internal-format msgid "objective-c++ message argument(s) are expected" -msgstr "objective-c++-meddelandeargument förväntades" +msgstr "objective-c++-meddelandeargument förväntades" #: cp/parser.c:23140 #, gcc-internal-format msgid "%<@encode%> must specify a type as an argument" -msgstr "%<@encode%> måste ange en typ som ett argument" +msgstr "%<@encode%> mÃ¥ste ange en typ som ett argument" #: cp/parser.c:23516 #, gcc-internal-format @@ -31813,12 +31817,12 @@ msgstr "ogiltigt Objective-C++-selekterarnamn" #: cp/parser.c:23591 cp/parser.c:23609 #, gcc-internal-format msgid "objective-c++ method declaration is expected" -msgstr "metodeklaration i objective-c++ förväntades" +msgstr "metodeklaration i objective-c++ förväntades" #: cp/parser.c:23603 cp/parser.c:23668 #, gcc-internal-format msgid "method attributes must be specified at the end" -msgstr "metodattribut måste anges på slutet" +msgstr "metodattribut mÃ¥ste anges pÃ¥ slutet" # %qs blir "{" eller "}" #: cp/parser.c:23711 @@ -31829,32 +31833,32 @@ msgstr "vilsekommet %qs mellan Objective-C++ metoder" #: cp/parser.c:23917 cp/parser.c:23924 cp/parser.c:23931 #, gcc-internal-format msgid "invalid type for instance variable" -msgstr "ogiltig typ för iterationsvariabel" +msgstr "ogiltig typ för iterationsvariabel" #: cp/parser.c:24045 #, gcc-internal-format msgid "identifier expected after %<@protocol%>" -msgstr "identifierare förväntades efter %<@protocol%>" +msgstr "identifierare förväntades efter %<@protocol%>" #: cp/parser.c:24216 #, gcc-internal-format msgid "attributes may not be specified before the %<@%D%> Objective-C++ keyword" -msgstr "attribut får inte anges före Objective-C++-nyckelordet %<@%D%>" +msgstr "attribut fÃ¥r inte anges före Objective-C++-nyckelordet %<@%D%>" #: cp/parser.c:24223 #, gcc-internal-format msgid "prefix attributes are ignored before %<@%D%>" -msgstr "prefixattribut ignoreras före %<@%D%>" +msgstr "prefixattribut ignoreras före %<@%D%>" #: cp/parser.c:24496 cp/parser.c:24503 cp/parser.c:24510 #, gcc-internal-format msgid "invalid type for property" -msgstr "ogiltigt typ på egenskap" +msgstr "ogiltigt typ pÃ¥ egenskap" #: cp/parser.c:26240 #, gcc-internal-format msgid "parenthesized initialization is not allowed in OpenMP %<for%> loop" -msgstr "initiering i parenteser är inte tillåtet i en OpenMP-%<for%>-slinga" +msgstr "initiering i parenteser är inte tillÃ¥tet i en OpenMP-%<for%>-slinga" #: cp/parser.c:26407 cp/pt.c:12680 #, gcc-internal-format @@ -31864,7 +31868,7 @@ msgstr "iterationsvariabel %qD skall inte vara reduction" #: cp/parser.c:26475 #, gcc-internal-format msgid "not enough collapsed for loops" -msgstr "inte tillräcklig kollapsat för slingor" +msgstr "inte tillräcklig kollapsat för slingor" #: cp/parser.c:27033 cp/semantics.c:5022 #, gcc-internal-format @@ -31879,12 +31883,12 @@ msgstr "" #: cp/parser.c:27232 #, gcc-internal-format msgid "junk at end of %<#pragma GCC pch_preprocess%>" -msgstr "skräp vid slutet av %<#pragma GCC pch_preprocess%>" +msgstr "skräp vid slutet av %<#pragma GCC pch_preprocess%>" #: cp/parser.c:27411 #, gcc-internal-format msgid "inter-module optimizations not implemented for C++" -msgstr "intermoduloptimeringar inte implementerade för C++" +msgstr "intermoduloptimeringar inte implementerade för C++" #: cp/pt.c:287 #, gcc-internal-format @@ -31899,17 +31903,17 @@ msgstr "ogiltig medlemsmalldeklaration %qD" #: cp/pt.c:666 #, gcc-internal-format msgid "explicit specialization in non-namespace scope %qD" -msgstr "explicit specialisering som inte är i namnrymdsområde %qD" +msgstr "explicit specialisering som inte är i namnrymdsomrÃ¥de %qD" #: cp/pt.c:680 #, gcc-internal-format msgid "enclosing class templates are not explicitly specialized" -msgstr "inneslutande klassmallar är inte explicit specialiserade" +msgstr "inneslutande klassmallar är inte explicit specialiserade" #: cp/pt.c:766 #, gcc-internal-format msgid "specialization of %qD must appear at namespace scope" -msgstr "specialisering av %qD i förekomma i namnrymdsräckvidd" +msgstr "specialisering av %qD i förekomma i namnrymdsräckvidd" #: cp/pt.c:774 #, gcc-internal-format @@ -31919,7 +31923,7 @@ msgstr "specialisering av %qD i en annan namnrymd" #: cp/pt.c:775 cp/pt.c:892 #, gcc-internal-format msgid " from definition of %q+#D" -msgstr " än definitionen av %q+#D" +msgstr " än definitionen av %q+#D" #: cp/pt.c:792 #, gcc-internal-format @@ -31929,7 +31933,7 @@ msgstr "explicit instansiering av %qD i namnrymden %qD (som inte omsluter namnry #: cp/pt.c:810 #, gcc-internal-format msgid "name of class shadows template template parameter %qD" -msgstr "namn på klass skuggar mallmallparameter %qD" +msgstr "namn pÃ¥ klass skuggar mallmallparameter %qD" #: cp/pt.c:851 #, gcc-internal-format @@ -31937,9 +31941,9 @@ msgid "specialization of %qT after instantiation" msgstr "specialisering av %qT efter instansiering" #: cp/pt.c:855 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "partial specialization of alias template %qD" -msgstr "explicit specialisering av icke-mall %qT" +msgstr "partiell specialisering av aliasmall %qD" #: cp/pt.c:891 #, gcc-internal-format @@ -31956,7 +31960,7 @@ msgstr "specialisering %qT efter instansiering %qT" #: cp/pt.c:947 #, gcc-internal-format msgid "template specialization of %qD not allowed by ISO C++" -msgstr "mallspecialisering av %qD är inte tillåten av ISO C++" +msgstr "mallspecialisering av %qD är inte tillÃ¥ten av ISO C++" #: cp/pt.c:951 #, gcc-internal-format @@ -31976,59 +31980,59 @@ msgstr "%s %+#D" #: cp/pt.c:1843 #, gcc-internal-format msgid "%qD is not a function template" -msgstr "%qD är inte en funktionsmall" +msgstr "%qD är inte en funktionsmall" #: cp/pt.c:2052 #, gcc-internal-format msgid "template-id %qD for %q+D does not match any template declaration" -msgstr "mall-id %qD för %q+D stämmer inte med någon malldeklaration" +msgstr "mall-id %qD för %q+D stämmer inte med nÃ¥gon malldeklaration" #: cp/pt.c:2055 #, gcc-internal-format msgid "saw %d %<template<>%>, need %d for specializing a member function template" -msgstr "såg %d %<template<>%>, behöver %d för specialisering av medlemsfunktionsmall" +msgstr "sÃ¥g %d %<template<>%>, behöver %d för specialisering av medlemsfunktionsmall" #: cp/pt.c:2064 #, gcc-internal-format msgid "ambiguous template specialization %qD for %q+D" -msgstr "tvetydig mallspecialisering %qD för %q+D" +msgstr "tvetydig mallspecialisering %qD för %q+D" #. This case handles bogus declarations like template <> #. template <class T> void f<int>(); #: cp/pt.c:2300 cp/pt.c:2354 #, gcc-internal-format msgid "template-id %qD in declaration of primary template" -msgstr "mall-id %qD i deklaration av primär mall" +msgstr "mall-id %qD i deklaration av primär mall" #: cp/pt.c:2313 #, gcc-internal-format msgid "template parameter list used in explicit instantiation" -msgstr "mallparameterlista använd i explicit instansiering" +msgstr "mallparameterlista använd i explicit instansiering" #: cp/pt.c:2319 #, gcc-internal-format msgid "definition provided for explicit instantiation" -msgstr "definition given för explicit instansiering" +msgstr "definition given för explicit instansiering" #: cp/pt.c:2327 #, gcc-internal-format msgid "too many template parameter lists in declaration of %qD" -msgstr "för många mallparameterlistor i deklarationen av %qD" +msgstr "för mÃ¥nga mallparameterlistor i deklarationen av %qD" #: cp/pt.c:2330 #, gcc-internal-format msgid "too few template parameter lists in declaration of %qD" -msgstr "för få mallparameterlistor i deklarationen av %qD" +msgstr "för fÃ¥ mallparameterlistor i deklarationen av %qD" #: cp/pt.c:2332 #, gcc-internal-format msgid "explicit specialization of %qD must be introduced by %<template <>%>" -msgstr "explicit specialisering av %qD måste inledas av %<template <>%>" +msgstr "explicit specialisering av %qD mÃ¥ste inledas av %<template <>%>" #: cp/pt.c:2351 #, gcc-internal-format msgid "function template partial specialization %qD is not allowed" -msgstr "partiell specialisering av funktionsmall %qD är inte tillåten" +msgstr "partiell specialisering av funktionsmall %qD är inte tillÃ¥ten" #: cp/pt.c:2383 #, gcc-internal-format @@ -32038,7 +32042,7 @@ msgstr "standardargument angivet i explicit specialisering" #: cp/pt.c:2413 #, gcc-internal-format msgid "%qD is not a template function" -msgstr "%qD är inte en mallfunktion" +msgstr "%qD är inte en mallfunktion" #: cp/pt.c:2421 #, gcc-internal-format @@ -32061,22 +32065,22 @@ msgstr "specialisering av implicit deklarerad specialmedlemsfunktion" #: cp/pt.c:2527 #, gcc-internal-format msgid "no member function %qD declared in %qT" -msgstr "ingen medlemsfunktion %qD är deklarerad i %qT" +msgstr "ingen medlemsfunktion %qD är deklarerad i %qT" #: cp/pt.c:3173 #, gcc-internal-format msgid "base initializer expansion %<%T%> contains no parameter packs" -msgstr "basinitierarexpansionen %<%T%> innehåller inga parameterpaket" +msgstr "basinitierarexpansionen %<%T%> innehÃ¥ller inga parameterpaket" #: cp/pt.c:3234 #, gcc-internal-format msgid "expansion pattern %<%T%> contains no argument packs" -msgstr "expansionsmönster %<%T%> innehåller inga argumentpaket" +msgstr "expansionsmönster %<%T%> innehÃ¥ller inga argumentpaket" #: cp/pt.c:3236 #, gcc-internal-format msgid "expansion pattern %<%E%> contains no argument packs" -msgstr "expansionsmönster %<%E%> innehåller inga argumentpaket" +msgstr "expansionsmönster %<%E%> innehÃ¥ller inga argumentpaket" #: cp/pt.c:3277 #, gcc-internal-format @@ -32106,34 +32110,34 @@ msgstr " skuggar mallparameter %q+#D" #: cp/pt.c:4366 #, gcc-internal-format msgid "template parameters not used in partial specialization:" -msgstr "mallparameter används inte i partiell specialisering:" +msgstr "mallparameter används inte i partiell specialisering:" #: cp/pt.c:4384 #, gcc-internal-format msgid "partial specialization %qT does not specialize any template arguments" -msgstr "partiell specialisering %qT specialiserar inte något mallargument" +msgstr "partiell specialisering %qT specialiserar inte nÃ¥got mallargument" #: cp/pt.c:4429 #, gcc-internal-format msgid "parameter pack argument %qE must be at the end of the template argument list" -msgstr "parameterpaketargument %qE måste vara vid slutet av mallens argumentlista" +msgstr "parameterpaketargument %qE mÃ¥ste vara vid slutet av mallens argumentlista" #: cp/pt.c:4432 #, gcc-internal-format msgid "parameter pack argument %qT must be at the end of the template argument list" -msgstr "parameterpaketargument %qT måste vara vid slutet av mallens argumentlista" +msgstr "parameterpaketargument %qT mÃ¥ste vara vid slutet av mallens argumentlista" #: cp/pt.c:4451 #, gcc-internal-format msgid "template argument %qE involves template parameter(s)" -msgstr "mallargument %qE berör mallparametrar" +msgstr "mallargument %qE berör mallparametrar" #: cp/pt.c:4497 #, gcc-internal-format msgid "type %qT of template argument %qE depends on a template parameter" msgid_plural "type %qT of template argument %qE depends on template parameters" -msgstr[0] "typ %qT för mallargument %qE beror på en mallparameter" -msgstr[1] "typ %qT för mallargument %qE beror på mallparametrar" +msgstr[0] "typ %qT för mallargument %qE beror pÃ¥ en mallparameter" +msgstr[1] "typ %qT för mallargument %qE beror pÃ¥ mallparametrar" #: cp/pt.c:4527 #, gcc-internal-format @@ -32143,42 +32147,42 @@ msgstr "partiell specialisering %qT efter instansiering av %qT" #: cp/pt.c:4620 #, gcc-internal-format msgid "no default argument for %qD" -msgstr "inget standardargument för %qD" +msgstr "inget standardargument för %qD" #: cp/pt.c:4641 #, gcc-internal-format msgid "parameter pack %qE must be at the end of the template parameter list" -msgstr "parameterpaket %qE måste vara vid slutet av mallens parameterlista" +msgstr "parameterpaket %qE mÃ¥ste vara vid slutet av mallens parameterlista" #: cp/pt.c:4644 #, gcc-internal-format msgid "parameter pack %qT must be at the end of the template parameter list" -msgstr "parameterpaket %qT måste vara vid slutet av mallens parameterlista" +msgstr "parameterpaket %qT mÃ¥ste vara vid slutet av mallens parameterlista" #: cp/pt.c:4681 #, gcc-internal-format msgid "default template arguments may not be used in function template friend re-declaration" -msgstr "standardmallargument får inte användas i vänomdeklaration av funktionsmall" +msgstr "standardmallargument fÃ¥r inte användas i vänomdeklaration av funktionsmall" #: cp/pt.c:4684 #, gcc-internal-format msgid "default template arguments may not be used in function template friend declarations" -msgstr "standardmallargument får inte användas i vändeklarerade funktionsmallar" +msgstr "standardmallargument fÃ¥r inte användas i vändeklarerade funktionsmallar" #: cp/pt.c:4687 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11" -msgstr "standarmallargument får inte användas i funktionsmallar utan -std=c++0x eller -std=gnu++0x" +msgstr "standarmallargument fÃ¥r inte användas i funktionsmallar utan -std=c++11 eller -std=gnu++11" #: cp/pt.c:4690 #, gcc-internal-format msgid "default template arguments may not be used in partial specializations" -msgstr "standardmallargument får inte användas i partiella specialiseringar" +msgstr "standardmallargument fÃ¥r inte användas i partiella specialiseringar" #: cp/pt.c:4693 cp/pt.c:4744 #, gcc-internal-format msgid "default argument for template parameter for class enclosing %qD" -msgstr "standardargumentet för mallparameter för klass om omsluter %qD" +msgstr "standardargumentet för mallparameter för klass om omsluter %qD" #: cp/pt.c:4837 #, gcc-internal-format @@ -32211,7 +32215,7 @@ msgstr "malldefinition av icke-mall %q#D" #: cp/pt.c:5029 #, gcc-internal-format msgid "expected %d levels of template parms for %q#D, got %d" -msgstr "%d nivåer av mallparametrar förväntades till %q#D, %d fanns" +msgstr "%d nivÃ¥er av mallparametrar förväntades till %q#D, %d fanns" #: cp/pt.c:5041 #, gcc-internal-format @@ -32226,22 +32230,22 @@ msgstr "fick %d mallparametrar till %q#T" #: cp/pt.c:5046 #, gcc-internal-format, gfc-internal-format msgid " but %d required" -msgstr " men %d behövs" +msgstr " men %d behövs" #: cp/pt.c:5067 #, gcc-internal-format msgid "template arguments to %qD do not match original template %qD" -msgstr "mallargument till %qD stämmer inte med orginalmallen %qD" +msgstr "mallargument till %qD stämmer inte med orginalmallen %qD" #: cp/pt.c:5071 #, gcc-internal-format msgid "use template<> for an explicit specialization" -msgstr "använd template<> för en explicit specialisering" +msgstr "använd template<> för en explicit specialisering" #: cp/pt.c:5172 #, gcc-internal-format msgid "%qT is not a template type" -msgstr "%qT är inte en malltyp" +msgstr "%qT är inte en malltyp" #: cp/pt.c:5185 #, gcc-internal-format @@ -32259,8 +32263,8 @@ msgstr[1] "omdeklarerad med %d mallparametrar" #, gcc-internal-format msgid "previous declaration %q+D used %d template parameter" msgid_plural "previous declaration %q+D used %d template parameters" -msgstr[0] "tidigare deklaration av %q+D använde %d mallparameter" -msgstr[1] "tidigare deklaration av %q+D använde %d mallparametrar" +msgstr[0] "tidigare deklaration av %q+D använde %d mallparameter" +msgstr[1] "tidigare deklaration av %q+D använde %d mallparametrar" #: cp/pt.c:5237 #, gcc-internal-format @@ -32270,7 +32274,7 @@ msgstr "mallparameter %q+#D" #: cp/pt.c:5238 #, gcc-internal-format msgid "redeclared here as %q#D" -msgstr "omdeklarerad här som %q#D" +msgstr "omdeklarerad här som %q#D" #. We have in [temp.param]: #. @@ -32284,32 +32288,32 @@ msgstr "omdefinition av standardargument till %q#D" #: cp/pt.c:5250 #, gcc-internal-format msgid "original definition appeared here" -msgstr "ursprunglig definition fanns här" +msgstr "ursprunglig definition fanns här" #: cp/pt.c:5368 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE is not a valid template argument for type %qT because %qD has no linkage" -msgstr "%qE är inte ett giltigt mallargument för typ %qT eftersom objekt %qD inte har extern länkklass" +msgstr "%qE är inte ett giltigt mallargument för typ %qT eftersom %qD inte har nÃ¥gon länkklass" #: cp/pt.c:5372 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE is not a valid template argument for type %qT because %qD does not have external linkage" -msgstr "%qE är inte ett giltigt mallargument av typ %qT eftersom %qD inte har extern länkklass" +msgstr "%qE är inte ett giltigt mallargument för typen %qT eftersom %qD inte har extern länkklass" #: cp/pt.c:5396 cp/pt.c:5997 #, gcc-internal-format msgid "%qE is not a valid template argument for type %qT" -msgstr "%qE är inte ett giltigt mallargument för typen %qT" +msgstr "%qE är inte ett giltigt mallargument för typen %qT" #: cp/pt.c:5398 #, gcc-internal-format msgid "it must be a pointer-to-member of the form %<&X::Y%>" -msgstr "det måste vara en pekare-till-medlem på formen %<&X::Y%>" +msgstr "det mÃ¥ste vara en pekare-till-medlem pÃ¥ formen %<&X::Y%>" #: cp/pt.c:5449 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " couldn't deduce template parameter %qD" -msgstr "fick %d mallparametrar till %q#D" +msgstr " kunde inte härleda mallparametrar %qD" #: cp/pt.c:5464 #, gcc-internal-format @@ -32317,29 +32321,29 @@ msgid " types %qT and %qT have incompatible cv-qualifiers" msgstr "" #: cp/pt.c:5473 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " mismatched types %qT and %qT" -msgstr "jämförelse mellan typer %qT och %qT" +msgstr " typerna %qT och %qT stämmer inte överens" #: cp/pt.c:5482 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " template parameter %qD is not a parameter pack, but argument %qD is" -msgstr "mallparameterpaket %qD kan inte ha ett standardargument" +msgstr "mallparameter %qD är inte ett parameterpaket, men argunet %qD är det" #: cp/pt.c:5493 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " template argument %qE does not match pointer-to-member constant %qE" -msgstr "mallargument till %qD stämmer inte med orginalmallen %qD" +msgstr " mallargument %qE stämmer inte med pekare till medlem-konstanten %qE" #: cp/pt.c:5503 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " %qE is not equivalent to %qE" -msgstr "%qs är inte giltigt för %qs" +msgstr " %qE är inte ekvivalent med %qE" #: cp/pt.c:5512 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " inconsistent parameter pack deduction with %qT and %qT" -msgstr "inkonsistent härledning för %qT: %qT och sedan %qT" +msgstr " inkonsistent härledning av parameterpaket med %qT och %qT" #: cp/pt.c:5524 #, gcc-internal-format @@ -32352,29 +32356,29 @@ msgid " deduced conflicting values for non-type parameter %qE (%qE and %qE)" msgstr "" #: cp/pt.c:5539 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " variable-sized array type %qT is not a valid template argument" -msgstr "partiell specialisering %qT specialiserar inte något mallargument" +msgstr " vektortypen %qT med variabel storlek är inte ett giltigt mallargument" #: cp/pt.c:5550 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " member function type %qT is not a valid template argument" -msgstr "%qE är inte ett giltigt mallargument för typen %qT" +msgstr " medlemsfunktionstypen %qT är inte ett giltigt mallargument" #: cp/pt.c:5583 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " cannot convert %qE (type %qT) to type %qT" -msgstr "kan inte konvertera typ %qT till typ %qT" +msgstr " kan inte konvertera %qE (typen %qT) till typ %qT" #: cp/pt.c:5596 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " %qT is an ambiguous base class of %qT" -msgstr "%qT är en tvetydig bas till %qT" +msgstr " %qT är en tvetydig basklass till %qT" #: cp/pt.c:5600 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " %qT is not derived from %qT" -msgstr "typ %qT är inte härledd från typen %qT" +msgstr " %qT är inte härledd frÃ¥n %qT" #: cp/pt.c:5611 #, gcc-internal-format @@ -32382,161 +32386,161 @@ msgid " template parameters of a template template argument are inconsistent wi msgstr "" #: cp/pt.c:5621 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " can't deduce a template for %qT from non-template type %qT" -msgstr "det går inte att minska en pekare på en ofullständig typ %qT" +msgstr " det gÃ¥r inte att härleda en mall för %qT frÃ¥n typen %qT som inte är en mall" #: cp/pt.c:5631 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " template argument %qE does not match %qD" -msgstr "mallargument till %qD stämmer inte med orginalmallen %qD" +msgstr " mallargument %qE stämmer inte med %qD" #: cp/pt.c:5640 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid " could not resolve address from overloaded function %qE" -msgstr "en sats kan inte lösa upp adress till överlagrad funktion" +msgstr " kunde inte lösa upp adressen frÃ¥n en överlagrad funktion %qE" #: cp/pt.c:5679 #, gcc-internal-format msgid "%qE is not a valid template argument for type %qT because string literals can never be used in this context" -msgstr "%qE är inte ett giltigt mallargument för typ %qT eftersom strängkonstanter aldrig kan användas i detta sammanhang" +msgstr "%qE är inte ett giltigt mallargument för typ %qT eftersom strängkonstanter aldrig kan användas i detta sammanhang" #: cp/pt.c:5816 #, gcc-internal-format msgid "in template argument for type %qT " -msgstr "i mallargument för typen %qT" +msgstr "i mallargument för typen %qT" #: cp/pt.c:5858 #, gcc-internal-format msgid "%qD is not a valid template argument because %qD is a variable, not the address of a variable" -msgstr "%qD är inte ett giltigt mallargument för att %qD är en variabel, inte adressen till en variabel" +msgstr "%qD är inte ett giltigt mallargument för att %qD är en variabel, inte adressen till en variabel" #: cp/pt.c:5876 #, gcc-internal-format msgid "%qE is not a valid template argument of type %qT because %qE is not a variable" -msgstr "%qE är inte ett giltigt mallargument för typen %qT eftersom %qE inte är en variabel" +msgstr "%qE är inte ett giltigt mallargument för typen %qT eftersom %qE inte är en variabel" #: cp/pt.c:5883 #, gcc-internal-format msgid "%qE is not a valid template argument of type %qT because %qD does not have external linkage" -msgstr "%qE är inte ett giltigt mallargument av typ %qT eftersom %qD inte har extern länkklass" +msgstr "%qE är inte ett giltigt mallargument av typ %qT eftersom %qD inte har extern länkklass" #: cp/pt.c:5890 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE is not a valid template argument of type %qT because %qD has no linkage" -msgstr "%qE är inte ett giltigt mallargument för typen %qT eftersom %qE inte är en variabel" +msgstr "%qE är inte ett giltigt mallargument för typen %qT eftersom %qD inte har nÃ¥gon länkklass" #: cp/pt.c:5920 #, gcc-internal-format msgid "%qE is not a valid template argument for type %qT because of conflicts in cv-qualification" -msgstr "%qE är inte ett giltigt mallargument för typ %qT eftersom det står i konflikt med cv-kvalificeringar" +msgstr "%qE är inte ett giltigt mallargument för typ %qT eftersom det stÃ¥r i konflikt med cv-kvalificeringar" #: cp/pt.c:5927 #, gcc-internal-format msgid "%qE is not a valid template argument for type %qT because it is not an lvalue" -msgstr "%qE är inte ett giltigt mallargument för typ %qT eftersom inte är ett l-värde" +msgstr "%qE är inte ett giltigt mallargument för typ %qT eftersom inte är ett l-värde" #: cp/pt.c:5944 #, gcc-internal-format msgid "%q#D is not a valid template argument for type %qT because a reference variable does not have a constant address" -msgstr "%q#D är inte ett giltigt mallargument till typen %qT eftersom en referensvariabel inte har en konstant adress" +msgstr "%q#D är inte ett giltigt mallargument till typen %qT eftersom en referensvariabel inte har en konstant adress" #: cp/pt.c:5953 #, gcc-internal-format msgid "%qE is not a valid template argument for type %qT because it is not an object with external linkage" -msgstr "%qE är inte ett giltigt mallargument för typen %qT eftersom det inte är ett objekt med extern länkklass" +msgstr "%qE är inte ett giltigt mallargument för typen %qT eftersom det inte är ett objekt med extern länkklass" #: cp/pt.c:5961 #, gcc-internal-format msgid "%qE is not a valid template argument for type %qT because object %qD has not external linkage" -msgstr "%qE är inte ett giltigt mallargument för typ %qT eftersom objekt %qD inte har extern länkklass" +msgstr "%qE är inte ett giltigt mallargument för typ %qT eftersom objekt %qD inte har extern länkklass" #: cp/pt.c:5998 #, gcc-internal-format msgid "it must be the address of a function with external linkage" -msgstr "det måste vara adressen till en funktion med extern lagringsklass" +msgstr "det mÃ¥ste vara adressen till en funktion med extern lagringsklass" #: cp/pt.c:6012 #, gcc-internal-format msgid "%qE is not a valid template argument for type %qT because it is a pointer" -msgstr "%qE är inte ett giltigt mallargument för typen %qT eftersom det är en pekare" +msgstr "%qE är inte ett giltigt mallargument för typen %qT eftersom det är en pekare" #: cp/pt.c:6014 #, gcc-internal-format msgid "try using %qE instead" -msgstr "försök att använda %qE istället" +msgstr "försök att använda %qE istället" #: cp/pt.c:6052 cp/pt.c:6081 #, gcc-internal-format msgid "%qE is not a valid template argument for type %qT because it is of type %qT" -msgstr "%qE är inte ett giltigt mallargument för typen %qT eftersom det är av typen %qT" +msgstr "%qE är inte ett giltigt mallargument för typen %qT eftersom det är av typen %qT" #: cp/pt.c:6058 #, gcc-internal-format msgid "standard conversions are not allowed in this context" -msgstr "standardkonverteringar är inte tillåtna i denna kontext" +msgstr "standardkonverteringar är inte tillÃ¥tna i denna kontext" #: cp/pt.c:6368 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ignoring attributes on template argument %qT" -msgstr "ogiltigt mallargument som inte är en typ" +msgstr "ignorerar attribut pÃ¥ mallargumentet %qT" #: cp/pt.c:6426 #, gcc-internal-format msgid "injected-class-name %qD used as template template argument" -msgstr "inskjutet klassnamn %qD använt som mallmallargument" +msgstr "inskjutet klassnamn %qD använt som mallmallargument" #: cp/pt.c:6454 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid use of destructor %qE as a type" -msgstr "ogiltig användning av destruerare %qD som en typ" +msgstr "ogiltig användning av destrueraren %qE som en typ" #: cp/pt.c:6459 #, gcc-internal-format msgid "to refer to a type member of a template parameter, use %<typename %E%>" -msgstr "för att referera till en typmedlem av en mallparameter, använd %<typename %E%>" +msgstr "för att referera till en typmedlem av en mallparameter, använd %<typename %E%>" #: cp/pt.c:6475 cp/pt.c:6494 cp/pt.c:6540 #, gcc-internal-format msgid "type/value mismatch at argument %d in template parameter list for %qD" -msgstr "typ/värde stämmer inte vid argument %d i mallparameterlistan till %qD" +msgstr "typ/värde stämmer inte vid argument %d i mallparameterlistan till %qD" #: cp/pt.c:6479 #, gcc-internal-format msgid " expected a constant of type %qT, got %qT" -msgstr " förväntade en konstant av typen %qT, fick %qT" +msgstr " förväntade en konstant av typen %qT, fick %qT" #: cp/pt.c:6483 #, gcc-internal-format msgid " expected a class template, got %qE" -msgstr " förväntade en klassmall, fick %qE" +msgstr " förväntade en klassmall, fick %qE" #: cp/pt.c:6485 #, gcc-internal-format msgid " expected a type, got %qE" -msgstr " förväntade en typ, fick %qE" +msgstr " förväntade en typ, fick %qE" #: cp/pt.c:6498 #, gcc-internal-format msgid " expected a type, got %qT" -msgstr " förväntade en typ, fick %qT" +msgstr " förväntade en typ, fick %qT" #: cp/pt.c:6500 #, gcc-internal-format msgid " expected a class template, got %qT" -msgstr " förväntade en klassmall, fick %qT" +msgstr " förväntade en klassmall, fick %qT" #: cp/pt.c:6543 #, gcc-internal-format msgid " expected a template of type %qD, got %qT" -msgstr " förväntade en mall av typen %qD, fick %qT" +msgstr " förväntade en mall av typen %qD, fick %qT" #. Not sure if this is reachable, but it doesn't hurt #. to be robust. #: cp/pt.c:6576 #, gcc-internal-format msgid "type mismatch in nontype parameter pack" -msgstr "typer stämmer inte i icke-typs parameterpaket" +msgstr "typer stämmer inte i icke-typs parameterpaket" #: cp/pt.c:6598 #, gcc-internal-format @@ -32561,42 +32565,41 @@ msgstr "angivna till %q+D" #: cp/pt.c:6898 #, gcc-internal-format, gfc-internal-format msgid "template argument %d is invalid" -msgstr "mallargument %d är ogiltigt" +msgstr "mallargument %d är ogiltigt" #: cp/pt.c:7087 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q#D is not a function template" -msgstr "%qD är inte en funktionsmall" +msgstr "%q#D är inte en funktionsmall" #: cp/pt.c:7251 #, gcc-internal-format msgid "non-template type %qT used as a template" -msgstr "icke-malltyp %qT använd som en mall" +msgstr "icke-malltyp %qT använd som en mall" #: cp/pt.c:7253 #, gcc-internal-format msgid "for template declaration %q+D" -msgstr "för malldeklaration %q+D" +msgstr "för malldeklaration %q+D" #: cp/pt.c:8058 -#, fuzzy msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth= to increase the maximum) substituting %qS" -msgstr "mallinstansieringsdjupet överskrider maxvärdet på %d (använd -ftemplate-depth= för att öka maxvärdet) vid instansiering av %qD" +msgstr "mallinstansieringsdjupet överskrider maxvärdet pÃ¥ %d (använd -ftemplate-depth= för att öka maxvärdet) ersätter med %qS" #: cp/pt.c:8062 #, gcc-internal-format msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth= to increase the maximum) instantiating %qD" -msgstr "mallinstansieringsdjupet överskrider maxvärdet på %d (använd -ftemplate-depth= för att öka maxvärdet) vid instansiering av %qD" +msgstr "mallinstansieringsdjupet överskrider maxvärdet pÃ¥ %d (använd -ftemplate-depth= för att öka maxvärdet) vid instansiering av %qD" #: cp/pt.c:9409 #, gcc-internal-format msgid "mismatched argument pack lengths while expanding %<%T%>" -msgstr "argumentpaketlängder stämmer inte överens vid expansion av %<%T%>" +msgstr "argumentpaketlängder stämmer inte överens vid expansion av %<%T%>" #: cp/pt.c:9413 #, gcc-internal-format msgid "mismatched argument pack lengths while expanding %<%E%>" -msgstr "argumentpaketlängder stämmer inte överens vid expansion av %<%E%>" +msgstr "argumentpaketlängder stämmer inte överens vid expansion av %<%E%>" #: cp/pt.c:10539 #, gcc-internal-format @@ -32644,7 +32647,7 @@ msgstr "funktion som returnerar en funktion" #: cp/pt.c:10975 #, gcc-internal-format msgid "creating pointer to member function of non-class type %qT" -msgstr "skapar pekare till medlemsfunktion i typ %qT som inte är en klass" +msgstr "skapar pekare till medlemsfunktion i typ %qT som inte är en klass" #: cp/pt.c:11514 #, gcc-internal-format @@ -32664,7 +32667,7 @@ msgstr "formar referens till en referenstyp %qT" #: cp/pt.c:11567 #, gcc-internal-format msgid "creating pointer to member of non-class type %qT" -msgstr "skapar pekare till medlem av typ %qT som inte är en klass" +msgstr "skapar pekare till medlem av typ %qT som inte är en klass" #: cp/pt.c:11573 #, gcc-internal-format @@ -32684,27 +32687,27 @@ msgstr "skapar vektor av %qT" #: cp/pt.c:11647 #, gcc-internal-format msgid "creating array of %qT, which is an abstract class type" -msgstr "skapar vektor av %qT, som är en abstrakt klasstyp" +msgstr "skapar vektor av %qT, som är en abstrakt klasstyp" #: cp/pt.c:11676 #, gcc-internal-format msgid "%qT is not a class, struct, or union type" -msgstr "%qT är inte en klass-, post- eller unionstyp" +msgstr "%qT är inte en klass-, post- eller unionstyp" #: cp/pt.c:11713 #, gcc-internal-format msgid "%qT resolves to %qT, which is not an enumeration type" -msgstr "%T slås upp till %qT som inte är en uppräkningstyp" +msgstr "%T slÃ¥s upp till %qT som inte är en uppräkningstyp" #: cp/pt.c:11721 #, gcc-internal-format msgid "%qT resolves to %qT, which is is not a class type" -msgstr "%qT löses upp till %qT, som inte är en klasstyp" +msgstr "%qT löses upp till %qT, som inte är en klasstyp" #: cp/pt.c:11838 #, gcc-internal-format msgid "use of %qs in template" -msgstr "användning av %qs i mall" +msgstr "användning av %qs i mall" #: cp/pt.c:11974 #, gcc-internal-format @@ -32714,27 +32717,27 @@ msgstr "kvalificerande typ %qT matchar inte destruerarnamnet ~%qT" #: cp/pt.c:11989 #, gcc-internal-format msgid "dependent-name %qE is parsed as a non-type, but instantiation yields a type" -msgstr "namnet %qE i den beroende tolkas som något annat än en typ, men instansiering ger en typ" +msgstr "namnet %qE i den beroende tolkas som nÃ¥got annat än en typ, men instansiering ger en typ" #: cp/pt.c:11991 #, gcc-internal-format msgid "say %<typename %E%> if a type is meant" -msgstr "säg %<typename %E%> om en typ avses" +msgstr "säg %<typename %E%> om en typ avses" #: cp/pt.c:12144 #, gcc-internal-format msgid "using invalid field %qD" -msgstr "användning av ogiltigt fält %qD" +msgstr "användning av ogiltigt fält %qD" #: cp/pt.c:12499 cp/pt.c:13300 #, gcc-internal-format msgid "invalid use of pack expansion expression" -msgstr "ogiltig användning av paketexpansionsuttryck" +msgstr "ogiltig användning av paketexpansionsuttryck" #: cp/pt.c:12503 cp/pt.c:13304 #, gcc-internal-format msgid "use %<...%> to expand argument pack" -msgstr "använd %<...%> för att expandera argumentpaket" +msgstr "använd %<...%> för att expandera argumentpaket" #: cp/pt.c:13880 #, gcc-internal-format @@ -32752,49 +32755,49 @@ msgid "use %<this->%D%> instead" msgstr "" #: cp/pt.c:13897 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "use %<%T::%D%> instead" -msgstr "%<%T::%E%> är inte en typ" +msgstr "använd %<%T::%D%> istället" #: cp/pt.c:13901 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q+D declared here, later in the translation unit" -msgstr "%qE är odeklarerad här (inte i en funktion)" +msgstr "%q+D är deklarerad här, senare i översättningsenheten" #: cp/pt.c:14134 #, gcc-internal-format msgid "%qT is not a class or namespace" -msgstr "%qT är inte en klass eller namnrymd" +msgstr "%qT är inte en klass eller namnrymd" #: cp/pt.c:14137 #, gcc-internal-format msgid "%qD is not a class or namespace" -msgstr "%qD är inte en klass eller namnrymd" +msgstr "%qD är inte en klass eller namnrymd" #: cp/pt.c:14429 #, gcc-internal-format msgid "%qT is/uses anonymous type" -msgstr "%qT är/använder en anonym typ" +msgstr "%qT är/använder en anonym typ" #: cp/pt.c:14431 #, gcc-internal-format msgid "template argument for %qD uses local type %qT" -msgstr "mallargumentet för %qD använder lokal typ %qT" +msgstr "mallargumentet för %qD använder lokal typ %qT" #: cp/pt.c:14441 #, gcc-internal-format msgid "%qT is a variably modified type" -msgstr "%qT är en variabel typ" +msgstr "%qT är en variabel typ" #: cp/pt.c:14452 #, gcc-internal-format msgid "integral expression %qE is not constant" -msgstr "heltalsuttryck %qE är inte konstant" +msgstr "heltalsuttryck %qE är inte konstant" #: cp/pt.c:14470 #, gcc-internal-format msgid " trying to instantiate %qD" -msgstr " försöker instansiera %qD" +msgstr " försöker instansiera %qD" #: cp/pt.c:17791 #, gcc-internal-format @@ -32814,17 +32817,17 @@ msgstr "explicit instansieringar av icke-mall %q#D" #: cp/pt.c:17834 #, gcc-internal-format msgid "%qD is not a static data member of a class template" -msgstr "%qD är inte en statisk datamedlem i en klassmall" +msgstr "%qD är inte en statisk datamedlem i en klassmall" #: cp/pt.c:17840 cp/pt.c:17897 #, gcc-internal-format msgid "no matching template for %qD found" -msgstr "det finns ingen matchande mall för %qD" +msgstr "det finns ingen matchande mall för %qD" #: cp/pt.c:17845 #, gcc-internal-format msgid "type %qT for explicit instantiation %qD does not match declared type %qT" -msgstr "typ %qT för explicit instansiering %qD stämmer inte med deklarerad typ %qT" +msgstr "typ %qT för explicit instansiering %qD stämmer inte med deklarerad typ %qT" #: cp/pt.c:17853 #, gcc-internal-format @@ -32839,17 +32842,17 @@ msgstr "dubblerad explicit instansiering av %q#D" #: cp/pt.c:17912 cp/pt.c:18009 #, gcc-internal-format msgid "ISO C++ 1998 forbids the use of %<extern%> on explicit instantiations" -msgstr "ISO C++ 1998 förbjuder användning av %<extern%> vid explicita instansieringar" +msgstr "ISO C++ 1998 förbjuder användning av %<extern%> vid explicita instansieringar" #: cp/pt.c:17917 cp/pt.c:18026 #, gcc-internal-format msgid "storage class %qD applied to template instantiation" -msgstr "lagringsklass %qD tillämpad på mallinstansiering" +msgstr "lagringsklass %qD tillämpad pÃ¥ mallinstansiering" #: cp/pt.c:17985 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "explicit instantiation of non-class template %qD" -msgstr "explicit instansieringar av icke-mall %q#D" +msgstr "explicit instansieringar av mallen %q#D som inte är en klass" #: cp/pt.c:17987 #, gcc-internal-format @@ -32859,12 +32862,12 @@ msgstr "explicit instansieringar av icke-malltyp %qT" #: cp/pt.c:17996 #, gcc-internal-format msgid "explicit instantiation of %q#T before definition of template" -msgstr "explicit instansiering av %q#T före definitionen av mallen" +msgstr "explicit instansiering av %q#T före definitionen av mallen" #: cp/pt.c:18014 #, gcc-internal-format msgid "ISO C++ forbids the use of %qE on explicit instantiations" -msgstr "ISO C++ förbjuder användning av %qE vid explicita instansieringar" +msgstr "ISO C++ förbjuder användning av %qE vid explicita instansieringar" #: cp/pt.c:18060 #, gcc-internal-format @@ -32881,32 +32884,32 @@ msgstr "dubblerad explicit instansiering av %q#T" #: cp/pt.c:18614 #, gcc-internal-format msgid "explicit instantiation of %qD but no definition available" -msgstr "explicit instansiering av %qD men ingen definition tillgänglig" +msgstr "explicit instansiering av %qD men ingen definition tillgänglig" #: cp/pt.c:18790 #, gcc-internal-format msgid "template instantiation depth exceeds maximum of %d instantiating %q+D, possibly from virtual table generation (use -ftemplate-depth= to increase the maximum)" -msgstr "mallinstansieringsdjupet överskrider maxvärdet på %d vid instansiering av %q+D, möjligen från generering av virtuell tabell (använd -ftemplate-depth= för att öka maxvärdet)" +msgstr "mallinstansieringsdjupet överskrider maxvärdet pÃ¥ %d vid instansiering av %q+D, möjligen frÃ¥n generering av virtuell tabell (använd -ftemplate-depth= för att öka maxvärdet)" #: cp/pt.c:19161 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid template non-type parameter" -msgstr "ogiltig användning av malltypparameter %qT" +msgstr "ogiltig mallparameter som inte är en typ" #: cp/pt.c:19163 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q#T is not a valid type for a template non-type parameter" -msgstr "%q#T är inte en giltig typ för en mallkonstantparameter" +msgstr "%q#T är inte en giltig typ för en mallparameter som inte är en typ" #: cp/pt.c:20249 #, gcc-internal-format msgid "deducing from brace-enclosed initializer list requires #include <initializer_list>" -msgstr "härledning från klammeromgiven initierarlista kräver #include <initializer_list>" +msgstr "härledning frÃ¥n klammeromgiven initierarlista kräver #include <initializer_list>" #: cp/pt.c:20308 #, gcc-internal-format msgid "variable %q#D with %<auto%> type used in its own initializer" -msgstr "variabeln %q#D med %<auto%>-typ använd i sin egen initierare" +msgstr "variabeln %q#D med %<auto%>-typ använd i sin egen initierare" #. If type is error_mark_node a diagnostic must have been #. emitted by now. Also, having a mention to '<type error>' @@ -32914,42 +32917,42 @@ msgstr "variabeln %q#D med %<auto%>-typ använd i sin egen initierare" #: cp/pt.c:20340 #, gcc-internal-format msgid "unable to deduce %qT from %qE" -msgstr "kan inte härleda %qT från %qE" +msgstr "kan inte härleda %qT frÃ¥n %qE" #: cp/pt.c:20351 #, gcc-internal-format msgid "inconsistent deduction for %qT: %qT and then %qT" -msgstr "inkonsistent härledning för %qT: %qT och sedan %qT" +msgstr "inkonsistent härledning för %qT: %qT och sedan %qT" #: cp/repo.c:119 #, gcc-internal-format msgid "-frepo must be used with -c" -msgstr "-frepo måste användas tillsammans med -c" +msgstr "-frepo mÃ¥ste användas tillsammans med -c" #: cp/repo.c:209 #, gcc-internal-format, gfc-internal-format msgid "mysterious repository information in %s" -msgstr "mystisk förrådsinformation i %s" +msgstr "mystisk förrÃ¥dsinformation i %s" #: cp/repo.c:227 #, gcc-internal-format msgid "can%'t create repository information file %qs" -msgstr "kan inte skapa förrådsinformationsfil %qs" +msgstr "kan inte skapa förrÃ¥dsinformationsfil %qs" #: cp/rtti.c:288 #, gcc-internal-format msgid "cannot use typeid with -fno-rtti" -msgstr "kan inte använda typeid med -fno-rtti" +msgstr "kan inte använda typeid med -fno-rtti" #: cp/rtti.c:294 #, gcc-internal-format msgid "must #include <typeinfo> before using typeid" -msgstr "måste ha#include <typeinfo> för användande av typeid" +msgstr "mÃ¥ste ha#include <typeinfo> för användande av typeid" #: cp/rtti.c:398 #, gcc-internal-format msgid "cannot create type information for type %qT because it involves types of variable size" -msgstr "det går inte att skapa typinformation för typen %qT eftersom typer av variabel storlek är inblandade" +msgstr "det gÃ¥r inte att skapa typinformation för typen %qT eftersom typer av variabel storlek är inblandade" #: cp/rtti.c:666 cp/rtti.c:681 #, gcc-internal-format @@ -32959,7 +32962,7 @@ msgstr "dynamic_cast av %q#D till %q#T kan aldrig lyckas" #: cp/rtti.c:692 #, gcc-internal-format msgid "%<dynamic_cast%> not permitted with -fno-rtti" -msgstr "%<dynamic_cast%> är inte tillåtet med -fno-rtti" +msgstr "%<dynamic_cast%> är inte tillÃ¥tet med -fno-rtti" #: cp/rtti.c:769 #, gcc-internal-format @@ -32969,47 +32972,47 @@ msgstr "kan inte dynamic_cast %qE (av typ %q#T) till typ %q#T (%s)" #: cp/search.c:258 #, gcc-internal-format msgid "%qT is an ambiguous base of %qT" -msgstr "%qT är en tvetydig bas till %qT" +msgstr "%qT är en tvetydig bas till %qT" #: cp/search.c:276 #, gcc-internal-format msgid "%qT is an inaccessible base of %qT" -msgstr "%qT är en oåtkomlig bas till %qT" +msgstr "%qT är en oÃ¥tkomlig bas till %qT" #: cp/search.c:1901 #, gcc-internal-format msgid "deprecated covariant return type for %q+#D" -msgstr "kovariant returtyp för %q+#D bör undvikas" +msgstr "kovariant returtyp för %q+#D bör undvikas" #: cp/search.c:1903 cp/search.c:1918 cp/search.c:1923 cp/search.c:1947 #, gcc-internal-format msgid " overriding %q+#D" -msgstr " åsidosätter %q+#D" +msgstr " Ã¥sidosätter %q+#D" #: cp/search.c:1917 #, gcc-internal-format msgid "invalid covariant return type for %q+#D" -msgstr "ogiltig kovariant returtyp för %q+#D" +msgstr "ogiltig kovariant returtyp för %q+#D" #: cp/search.c:1922 #, gcc-internal-format msgid "conflicting return type specified for %q+#D" -msgstr "motstridiga returtyp angiven för %q+#D" +msgstr "motstridiga returtyp angiven för %q+#D" #: cp/search.c:1937 #, gcc-internal-format msgid "looser throw specifier for %q+#F" -msgstr "friare throw-specificerare för %q+#F" +msgstr "friare throw-specificerare för %q+#F" #: cp/search.c:1938 #, gcc-internal-format msgid " overriding %q+#F" -msgstr " åsidosätter %q+#F" +msgstr " Ã¥sidosätter %q+#F" #: cp/search.c:1946 #, gcc-internal-format msgid "conflicting type attributes specified for %q+#D" -msgstr "motstridiga typattribut angivna för %q+#D" +msgstr "motstridiga typattribut angivna för %q+#D" #: cp/search.c:1956 #, gcc-internal-format @@ -33019,7 +33022,7 @@ msgstr "tog bort funktion %q+D" #: cp/search.c:1957 #, gcc-internal-format msgid "overriding non-deleted function %q+D" -msgstr "åsidosätter ej borttagen funktion %q+D" +msgstr "Ã¥sidosätter ej borttagen funktion %q+D" #: cp/search.c:1962 #, gcc-internal-format @@ -33029,17 +33032,17 @@ msgstr "ej borttagen funktion %q+D" #: cp/search.c:1963 #, gcc-internal-format msgid "overriding deleted function %q+D" -msgstr "åsidosätter borttagen funktion %q+D" +msgstr "Ã¥sidosätter borttagen funktion %q+D" #: cp/search.c:1969 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "virtual function %q+D" -msgstr "virtuell icke klassfunktion %qs" +msgstr "virtuell funktion %q+D" #: cp/search.c:1970 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "overriding final function %q+D" -msgstr "åsidosätter borttagen funktion %q+D" +msgstr "Ã¥sidosätter den slutlig funktionen %q+D" #. A static member function cannot match an inherited #. virtual member function. @@ -33051,62 +33054,62 @@ msgstr "%q+#D kan inte deklareras" #: cp/search.c:2067 #, gcc-internal-format msgid " since %q+#D declared in base class" -msgstr " eftersom %q+#D är deklarerad i basklassen" +msgstr " eftersom %q+#D är deklarerad i basklassen" #: cp/semantics.c:772 #, gcc-internal-format msgid "suggest explicit braces around empty body in %<do%> statement" -msgstr "föreslår uttryckliga klamrar runt tom kropp i %<do%>-sats" +msgstr "föreslÃ¥r uttryckliga klamrar runt tom kropp i %<do%>-sats" #: cp/semantics.c:1393 #, gcc-internal-format msgid "type of asm operand %qE could not be determined" -msgstr "typen på asm-operand %qE kunde inte avgöras" +msgstr "typen pÃ¥ asm-operand %qE kunde inte avgöras" #: cp/semantics.c:1451 #, gcc-internal-format msgid "__label__ declarations are only allowed in function scopes" -msgstr "__label__-deklarationer får bara förekomma på funktionsnivå" +msgstr "__label__-deklarationer fÃ¥r bara förekomma pÃ¥ funktionsnivÃ¥" #: cp/semantics.c:1554 #, gcc-internal-format msgid "invalid use of member %q+D in static member function" -msgstr "ogiltig användning av %q+D i en statisk medlemsfunktion" +msgstr "ogiltig användning av %q+D i en statisk medlemsfunktion" #: cp/semantics.c:1556 #, gcc-internal-format msgid "invalid use of non-static data member %q+D" -msgstr "ogiltig användning av icke-statisk datamedlem %q+D" +msgstr "ogiltig användning av icke-statisk datamedlem %q+D" #: cp/semantics.c:1557 #, gcc-internal-format msgid "from this location" -msgstr "härifrån" +msgstr "härifrÃ¥n" #: cp/semantics.c:2170 #, gcc-internal-format msgid "arguments to destructor are not allowed" -msgstr "argument till destruerare är inte tillåtet" +msgstr "argument till destruerare är inte tillÃ¥tet" #: cp/semantics.c:2251 #, gcc-internal-format msgid "%<this%> is unavailable for static member functions" -msgstr "%<this%> är inte tillgängligt i en statisk medlemsfunktion" +msgstr "%<this%> är inte tillgängligt i en statisk medlemsfunktion" #: cp/semantics.c:2257 #, gcc-internal-format msgid "invalid use of %<this%> in non-member function" -msgstr "ogiltig användning av %<this%> i icke-medlemsfunktion" +msgstr "ogiltig användning av %<this%> i icke-medlemsfunktion" #: cp/semantics.c:2259 #, gcc-internal-format msgid "invalid use of %<this%> at top level" -msgstr "ogiltigt användning av %<this%> på toppnivå" +msgstr "ogiltigt användning av %<this%> pÃ¥ toppnivÃ¥" #: cp/semantics.c:2283 #, gcc-internal-format msgid "invalid qualifying scope in pseudo-destructor name" -msgstr "ogiltigt kvalificerande räckvidd i pseudodestruerarnamn" +msgstr "ogiltigt kvalificerande räckvidd i pseudodestruerarnamn" #: cp/semantics.c:2288 cp/typeck.c:2384 #, gcc-internal-format @@ -33121,22 +33124,22 @@ msgstr "%qE har inte typen %qT" #: cp/semantics.c:2351 #, gcc-internal-format msgid "compound literal of non-object type %qT" -msgstr "sammansatt literal för ej objekttyp %qT" +msgstr "sammansatt literal för ej objekttyp %qT" #: cp/semantics.c:2463 #, gcc-internal-format msgid "template type parameters must use the keyword %<class%> or %<typename%>" -msgstr "malltypparametrar måste använda nyckelordet %<class%> eller %<typename%>" +msgstr "malltypparametrar mÃ¥ste använda nyckelordet %<class%> eller %<typename%>" #: cp/semantics.c:2505 #, gcc-internal-format msgid "invalid use of type %qT as a default value for a template template-parameter" -msgstr "ogiltigt användning av typ %qT som standardvärde för en mallmallparameter" +msgstr "ogiltigt användning av typ %qT som standardvärde för en mallmallparameter" #: cp/semantics.c:2508 #, gcc-internal-format msgid "invalid default argument for a template template parameter" -msgstr "ogiltigt standardargument för en mallmallparameter" +msgstr "ogiltigt standardargument för en mallmallparameter" #: cp/semantics.c:2525 #, gcc-internal-format @@ -33156,119 +33159,119 @@ msgstr "ogiltig basklasspecifikation" #: cp/semantics.c:2999 cp/semantics.c:8802 #, gcc-internal-format msgid "%qD is not captured" -msgstr "%qD är inte fångad" +msgstr "%qD är inte fÃ¥ngad" #: cp/semantics.c:3005 #, gcc-internal-format msgid "use of %<auto%> variable from containing function" -msgstr "användning av %<auto%>-variabel från inneslutande funktion" +msgstr "användning av %<auto%>-variabel frÃ¥n den kringliggande funktionen" #: cp/semantics.c:3006 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "use of parameter from containing function" -msgstr "användning av %<auto%>-variabel från inneslutande funktion" +msgstr "användning av parameter frÃ¥n den kringliggande funktionen" #: cp/semantics.c:3007 #, gcc-internal-format msgid " %q+#D declared here" -msgstr " %q+#D deklarerades här" +msgstr " %q+#D deklarerades här" #: cp/semantics.c:3018 #, gcc-internal-format msgid "use of parameter %qD outside function body" -msgstr "användning av parametern %qD utanför funktionskropp" +msgstr "användning av parametern %qD utanför funktionskropp" #: cp/semantics.c:3055 #, gcc-internal-format msgid "template parameter %qD of type %qT is not allowed in an integral constant expression because it is not of integral or enumeration type" -msgstr "mallparameter %qD av typ %qT är inte tillåten i ett konstant heltalsuttryck eftersom den inte är av heltals- eller uppräkningstyp" +msgstr "mallparameter %qD av typ %qT är inte tillÃ¥ten i ett konstant heltalsuttryck eftersom den inte är av heltals- eller uppräkningstyp" #: cp/semantics.c:3215 #, gcc-internal-format msgid "use of namespace %qD as expression" -msgstr "användning av namnrymden %q+D som uttryck" +msgstr "användning av namnrymden %q+D som uttryck" #: cp/semantics.c:3220 #, gcc-internal-format msgid "use of class template %qT as expression" -msgstr "användning av klassmall %qT som uttryck" +msgstr "användning av klassmall %qT som uttryck" #. Ambiguous reference to base members. #: cp/semantics.c:3226 #, gcc-internal-format msgid "request for member %qD is ambiguous in multiple inheritance lattice" -msgstr "begäran av medlem %qD är tvetydig i gitter av multipelt arv" +msgstr "begäran av medlem %qD är tvetydig i gitter av multipelt arv" #: cp/semantics.c:3249 #, gcc-internal-format msgid "%qD cannot appear in a constant-expression" -msgstr "%qD får inte finnas i ett konstantuttryck" +msgstr "%qD fÃ¥r inte finnas i ett konstantuttryck" #: cp/semantics.c:3370 #, gcc-internal-format msgid "type of %qE is unknown" -msgstr "typen på %qE är okänd" +msgstr "typen pÃ¥ %qE är okänd" #: cp/semantics.c:3398 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qT is not an enumeration type" -msgstr "%qD är inte ett uppräkningsnamn" +msgstr "%qT är inte ett uppräkningstyp" #. Parameter packs can only be used in templates #: cp/semantics.c:3546 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "Parameter pack __bases only valid in template declaration" -msgstr "specificerare av lagringsklass ogiltig i parameterdeklarationer" +msgstr "Parameterpakets-__bases är endast giltiga i malldeklarationer" #: cp/semantics.c:3566 #, gcc-internal-format msgid "cannot apply %<offsetof%> to destructor %<~%T%>" -msgstr "det går inte att applicera %<offsetof%> på destrueraren %<~%T%>" +msgstr "det gÃ¥r inte att applicera %<offsetof%> pÃ¥ destrueraren %<~%T%>" #: cp/semantics.c:3577 #, gcc-internal-format msgid "cannot apply %<offsetof%> to member function %qD" -msgstr "det går inte att använda %<offsetof%> på medlemsfunktion %qD" +msgstr "det gÃ¥r inte att använda %<offsetof%> pÃ¥ medlemsfunktion %qD" #: cp/semantics.c:3996 #, gcc-internal-format msgid "%qD is not a variable in clause %qs" -msgstr "%qD är inte en variabel i klausul %qs" +msgstr "%qD är inte en variabel i klausul %qs" #: cp/semantics.c:4005 cp/semantics.c:4027 cp/semantics.c:4049 #, gcc-internal-format msgid "%qD appears more than once in data clauses" -msgstr "%qD förekommer mer än en gång i dataklausuler" +msgstr "%qD förekommer mer än en gÃ¥ng i dataklausuler" #: cp/semantics.c:4019 #, gcc-internal-format msgid "%qD is not a variable in clause %<firstprivate%>" -msgstr "%qD är inte en variabel i klausul %<firstprivate%>" +msgstr "%qD är inte en variabel i klausul %<firstprivate%>" #: cp/semantics.c:4041 #, gcc-internal-format msgid "%qD is not a variable in clause %<lastprivate%>" -msgstr "%qD är inte en variabel i klausul %<lastprivate%>" +msgstr "%qD är inte en variabel i klausul %<lastprivate%>" #: cp/semantics.c:4083 #, gcc-internal-format msgid "num_threads expression must be integral" -msgstr "num_threads-uttryck måste vara heltal" +msgstr "num_threads-uttryck mÃ¥ste vara heltal" #: cp/semantics.c:4104 #, gcc-internal-format msgid "schedule chunk size expression must be integral" -msgstr "uttryck för styckesstorlek för schemaläggning måste vara heltal" +msgstr "uttryck för styckesstorlek för schemaläggning mÃ¥ste vara heltal" #: cp/semantics.c:4247 #, gcc-internal-format msgid "%qE has reference type for %qs" -msgstr "%qE har referenstyp för %qs" +msgstr "%qE har referenstyp för %qs" #: cp/semantics.c:4323 #, gcc-internal-format msgid "%<threadprivate%> %qD is not file, namespace or block scope variable" -msgstr "%<threadprivate%> %qD är inte fil-, namnrymds- eller blockräckviddsvariabel" +msgstr "%<threadprivate%> %qD är inte fil-, namnrymds- eller blockräckviddsvariabel" #: cp/semantics.c:4337 #, gcc-internal-format @@ -33282,9 +33285,9 @@ msgstr "skillnaden mellan %qE och %qD har inte heltalstyp" #. Report the error. #: cp/semantics.c:5135 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "static assertion failed: %s" -msgstr "statisk försäkran misslyckades: %E" +msgstr "statisk försäkran misslyckades: %s" #: cp/semantics.c:5138 #, gcc-internal-format @@ -33294,12 +33297,12 @@ msgstr "icke-konstant villkor i statisk deklaration" #: cp/semantics.c:5167 #, gcc-internal-format msgid "argument to decltype must be an expression" -msgstr "argument till decltype måste vara ett uttryck" +msgstr "argument till decltype mÃ¥ste vara ett uttryck" #: cp/semantics.c:5196 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "decltype cannot resolve address of overloaded function" -msgstr "en sats kan inte lösa upp adress till överlagrad funktion" +msgstr "decltype kan inte lösa upp adressen till en överlagrad funktion" #: cp/semantics.c:5519 #, gcc-internal-format @@ -33309,22 +33312,22 @@ msgstr "__is_convertible_to" #: cp/semantics.c:5636 #, gcc-internal-format msgid "the type %qT of constexpr variable %qD is not literal" -msgstr "typen %qT för constexpr-variabeln %qD är inte en literal" +msgstr "typen %qT för constexpr-variabeln %qD är inte en literal" #: cp/semantics.c:5706 #, gcc-internal-format msgid "invalid type for parameter %d of constexpr function %q+#D" -msgstr "ogiltig typ för parameter %d till constexpr-funktion %q+#D" +msgstr "ogiltig typ för parameter %d till constexpr-funktion %q+#D" #: cp/semantics.c:5720 #, gcc-internal-format msgid "invalid return type %qT of constexpr function %q+D" -msgstr "ogiltig returtyp %qT för constexpr-funktionen %q+D" +msgstr "ogiltig returtyp %qT för constexpr-funktionen %q+D" #: cp/semantics.c:5742 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q#T has virtual base classes" -msgstr "%q#T är inte en klass" +msgstr "%q#T har virtuella basklasser" #: cp/semantics.c:5879 #, gcc-internal-format @@ -33339,12 +33342,12 @@ msgstr "oinitierad medlem %qD i %<constexpr%>-konstruerare" #: cp/semantics.c:6096 #, gcc-internal-format msgid "body of constexpr function %qD not a return-statement" -msgstr "kroppen i constexpr-funktionen %qD är inte en retursats" +msgstr "kroppen i constexpr-funktionen %qD är inte en retursats" #: cp/semantics.c:6151 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q+D is not usable as a constexpr function because:" -msgstr "%qD är inte en constexpr-funktion" +msgstr "%q+D är inte användbar som en constexpr-funktion eftersom:" #: cp/semantics.c:6475 #, gcc-internal-format @@ -33352,80 +33355,80 @@ msgid "expression %qE does not designate a constexpr function" msgstr "uttrycket %qE anger inte en constexpr-funktion" #: cp/semantics.c:6489 cp/semantics.c:8072 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "call to non-constexpr function %qD" -msgstr "anrop av icke-funktion %qD" +msgstr "anrop av icke-constexpr-funktion %qD" #. The definition of fun was somehow unsuitable. #: cp/semantics.c:6517 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD called in a constant expression" -msgstr "%qE är inte ett konstant uttryck" +msgstr "%qD anropad i ett konstant uttryck" #: cp/semantics.c:6521 #, gcc-internal-format msgid "%qD used before its definition" -msgstr "%qD användes före sin definition" +msgstr "%qD användes före sin definition" #: cp/semantics.c:6555 #, gcc-internal-format msgid "call has circular dependency" -msgstr "anrop har cirkulärt beroende" +msgstr "anrop har cirkulärt beroende" #: cp/semantics.c:6563 #, gcc-internal-format, gfc-internal-format msgid "constexpr evaluation depth exceeds maximum of %d (use -fconstexpr-depth= to increase the maximum)" -msgstr "beräkning av constexpr överskrider maxvärdet på %d (använd -fconstexpr-depth= för att öka maxvärdet)" +msgstr "beräkning av constexpr överskrider maxvärdet pÃ¥ %d (använd -fconstexpr-depth= för att öka maxvärdet)" #: cp/semantics.c:6641 #, gcc-internal-format msgid "%q+E is not a constant expression" -msgstr "%q+E är inte ett konstant uttryck" +msgstr "%q+E är inte ett konstant uttryck" #: cp/semantics.c:6781 #, gcc-internal-format msgid "array subscript out of bound" -msgstr "vektorindex är utanför gränserna" +msgstr "vektorindex är utanför gränserna" #: cp/semantics.c:6827 cp/semantics.c:6887 cp/semantics.c:7523 #, gcc-internal-format msgid "%qE is not a constant expression" -msgstr "%qE är inte ett konstant uttryck" +msgstr "%qE är inte ett konstant uttryck" #: cp/semantics.c:6833 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "mutable %qD is not usable in a constant expression" -msgstr "värdet på %qD är inte användbart i ett konstant uttryck" +msgstr "muterbar %qD är inte användbart i ett konstant uttryck" #: cp/semantics.c:6848 #, gcc-internal-format msgid "accessing %qD member instead of initialized %qD member in constant expression" -msgstr "använder medlem %qD istället för initierad medlem %qD i ett konstant uttryck" +msgstr "använder medlem %qD istället för initierad medlem %qD i ett konstant uttryck" #: cp/semantics.c:7388 #, gcc-internal-format msgid "accessing value of %qE through a %qT glvalue in a constant expression" -msgstr "använder värdet av %qE genom ett %qT-glvalue i ett konstant uttryck" +msgstr "använder värdet av %qE genom ett %qT-glvalue i ett konstant uttryck" #: cp/semantics.c:7419 #, gcc-internal-format msgid "the value of %qD is not usable in a constant expression" -msgstr "värdet på %qD är inte användbart i ett konstant uttryck" +msgstr "värdet pÃ¥ %qD är inte användbart i ett konstant uttryck" #: cp/semantics.c:7426 #, gcc-internal-format msgid "%qD used in its own initializer" -msgstr "%qD använd i sin egen initierare" +msgstr "%qD använd i sin egen initierare" #: cp/semantics.c:7431 #, gcc-internal-format msgid "%q#D is not const" -msgstr "%q#D är inte const" +msgstr "%q#D är inte const" #: cp/semantics.c:7434 #, gcc-internal-format msgid "%q#D is volatile" -msgstr "%q+#D är volatile" +msgstr "%q+#D är volatile" #: cp/semantics.c:7438 #, gcc-internal-format @@ -33440,27 +33443,27 @@ msgstr "%qD deklarerades inte %<constexpr%>" #: cp/semantics.c:7450 #, gcc-internal-format msgid "%qD does not have integral or enumeration type" -msgstr "%qD har inte heltals- eller uppräkningstyp" +msgstr "%qD har inte heltals- eller uppräkningstyp" #: cp/semantics.c:7511 cp/semantics.c:8204 #, gcc-internal-format msgid "use of the value of the object being constructed in a constant expression" -msgstr "användning av värdet på objektet som konstrueras i ett konstant uttryck" +msgstr "användning av värdet pÃ¥ objektet som konstrueras i ett konstant uttryck" #: cp/semantics.c:7539 cp/semantics.c:8342 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "temporary of non-literal type %qT in a constant expression" -msgstr "uppräknings- och inte uppräkningstyp i villkorsuttryck" +msgstr "temporär av den ej literala typen %qT i ett konstant uttryck" #: cp/semantics.c:7787 cp/semantics.c:8246 cp/semantics.c:8495 #, gcc-internal-format msgid "expression %qE is not a constant-expression" -msgstr "uttrycket %qE är inte ett konstantuttryck" +msgstr "uttrycket %qE är inte ett konstantuttryck" #: cp/semantics.c:7792 #, gcc-internal-format msgid "unexpected expression %qE of kind %s" -msgstr "oväntat uttryck %qE av sorten %s" +msgstr "oväntat uttryck %qE av sorten %s" #: cp/semantics.c:7823 #, gcc-internal-format @@ -33468,9 +33471,9 @@ msgid "%qT cannot be the type of a complete constant expression because it has m msgstr "" #: cp/semantics.c:7836 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "conversion from pointer type %qT to arithmetic type %qT in a constant-expression" -msgstr "konvertering av uttrycket %qE med pekartyp kan inte ge ett konstant uttryck" +msgstr "konvertering frÃ¥n pekartypen %qT till den aritmetiska typen %qT i ett konstant uttryck" #: cp/semantics.c:8007 #, gcc-internal-format @@ -33478,34 +33481,34 @@ msgid "expression %qE has side-effects" msgstr "uttrycket %qE har sidoeffekter" #: cp/semantics.c:8090 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "calling a member function of the object being constructed in a constant expression" -msgstr "användning av värdet på objektet som konstrueras i ett konstant uttryck" +msgstr "anrop av en medlemsfunktion i objektet som konstrueras i ett konstant uttryck" #: cp/semantics.c:8172 #, gcc-internal-format msgid "address-of an object %qE with thread local or automatic storage is not a constant expression" -msgstr "adress-av på ett objekt %qE med trådlokal eller automatisk lagring är inte ett konstant uttryck" +msgstr "adress-av pÃ¥ ett objekt %qE med trÃ¥dlokal eller automatisk lagring är inte ett konstant uttryck" #: cp/semantics.c:8258 #, gcc-internal-format msgid "typeid-expression is not a constant expression because %qE is of polymorphic type" -msgstr "typeid-uttryck är inte ett konstant uttryck eftersom %qE har polymorf typ" +msgstr "typeid-uttryck är inte ett konstant uttryck eftersom %qE har polymorf typ" #: cp/semantics.c:8271 #, gcc-internal-format msgid "difference of two pointer expressions is not a constant expression" -msgstr "skillnaden mellan två pekaruttryck är inte ett konstant uttryck" +msgstr "skillnaden mellan tvÃ¥ pekaruttryck är inte ett konstant uttryck" #: cp/semantics.c:8290 #, gcc-internal-format msgid "pointer comparison expression is not a constant expression" -msgstr "pekarjämförelseuttryck är inte ett konstant uttryck" +msgstr "pekarjämförelseuttryck är inte ett konstant uttryck" #: cp/semantics.c:8391 #, gcc-internal-format msgid "division by zero is not a constant-expression" -msgstr "division med noll är inte ett konstantuttryck" +msgstr "division med noll är inte ett konstantuttryck" #: cp/semantics.c:8503 #, gcc-internal-format @@ -33514,69 +33517,69 @@ msgstr "ickekonstant vektorinitierare" # ast = abstract syntax tree #: cp/semantics.c:8509 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "unexpected AST of kind %s" -msgstr "oväntat ast av sorten %s" +msgstr "oväntat AST av sorten %s" #: cp/semantics.c:8999 #, gcc-internal-format msgid "cannot capture %qE by reference" -msgstr "det går inte att fånga %qE via referens" +msgstr "det gÃ¥r inte att fÃ¥nga %qE via referens" #: cp/semantics.c:9022 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "already captured %qD in lambda expression" -msgstr "fångade redan %<this%> i lambdauttrycket" +msgstr "redan infÃ¥ngad %qD i lambdauttryck" #: cp/semantics.c:9168 #, gcc-internal-format msgid "%<this%> was not captured for this lambda function" -msgstr "%<this%> fångades inte för denna lambdafunktion" +msgstr "%<this%> fÃ¥ngades inte för denna lambdafunktion" #: cp/tree.c:1019 #, gcc-internal-format msgid "%qV qualifiers cannot be applied to %qT" -msgstr "%qV-kvalificerare kan inte tillämpas på %qT" +msgstr "%qV-kvalificerare kan inte tillämpas pÃ¥ %qT" #: cp/tree.c:2802 #, gcc-internal-format msgid "%qE attribute can only be applied to Java class definitions" -msgstr "attributet %qE kan bara användas på klassdefinitioner i Java" +msgstr "attributet %qE kan bara användas pÃ¥ klassdefinitioner i Java" #: cp/tree.c:2831 #, gcc-internal-format msgid "%qE attribute can only be applied to class definitions" -msgstr "attributet %qE kan bara användas på klassdefinitioner" +msgstr "attributet %qE kan bara användas pÃ¥ klassdefinitioner" #: cp/tree.c:2837 #, gcc-internal-format msgid "%qE is obsolete; g++ vtables are now COM-compatible by default" -msgstr "%qE är föråldrad, g++-vtabeller är nu COM-kompatibla som standard" +msgstr "%qE är förÃ¥ldrad, g++-vtabeller är nu COM-kompatibla som standard" #: cp/tree.c:2861 #, gcc-internal-format msgid "requested init_priority is not an integer constant" -msgstr "begärd init_priority är inte en heltalskonstant" +msgstr "begärd init_priority är inte en heltalskonstant" #: cp/tree.c:2882 #, gcc-internal-format msgid "can only use %qE attribute on file-scope definitions of objects of class type" -msgstr "det går bara att använda attributet %qE på definitioner av objekt- eller klasstyp med filräckvidd" +msgstr "det gÃ¥r bara att använda attributet %qE pÃ¥ definitioner av objekt- eller klasstyp med filräckvidd" #: cp/tree.c:2890 #, gcc-internal-format msgid "requested init_priority is out of range" -msgstr "begärd init_priority är utanför sitt intervall" +msgstr "begärd init_priority är utanför sitt intervall" #: cp/tree.c:2900 #, gcc-internal-format msgid "requested init_priority is reserved for internal use" -msgstr "begärt init_priority är reserverad för internt bruk" +msgstr "begärt init_priority är reserverad för internt bruk" #: cp/tree.c:2911 #, gcc-internal-format msgid "%qE attribute is not supported on this platform" -msgstr "attributet %qE stöds inte på denna plattform" +msgstr "attributet %qE stöds inte pÃ¥ denna plattform" #: cp/tree.c:3586 #, gcc-internal-format, gfc-internal-format @@ -33586,7 +33589,7 @@ msgstr "lang_*-kontroll: misslyckades i %s, vid %s:%d" #: cp/typeck.c:455 #, gcc-internal-format msgid "comparison between distinct pointer types %qT and %qT lacks a cast" -msgstr "jämförelse mellan olika pekartyper %qT och %qT saknar en typkonvertering" +msgstr "jämförelse mellan olika pekartyper %qT och %qT saknar en typkonvertering" #: cp/typeck.c:461 #, gcc-internal-format @@ -33601,127 +33604,127 @@ msgstr "villkorsuttryck mellan olika pekartyper %qT och %qT saknar en typkonvert #: cp/typeck.c:609 #, gcc-internal-format msgid "ISO C++ forbids comparison between pointer of type %<void *%> and pointer-to-function" -msgstr "ISO C++ förbjuder jämförelser mellan pekare av typ %<void *%> och pekare till funktioner" +msgstr "ISO C++ förbjuder jämförelser mellan pekare av typ %<void *%> och pekare till funktioner" #: cp/typeck.c:614 #, gcc-internal-format msgid "ISO C++ forbids conversion between pointer of type %<void *%> and pointer-to-function" -msgstr "ISO C++ förbjuder konvertering mellan pekare av typ %<void *%> och pekare till funktioner" +msgstr "ISO C++ förbjuder konvertering mellan pekare av typ %<void *%> och pekare till funktioner" #: cp/typeck.c:619 #, gcc-internal-format msgid "ISO C++ forbids conditional expression between pointer of type %<void *%> and pointer-to-function" -msgstr "ISO C++ förbjuder villkorliga uttryck mellan pekare av typ %<void *%> och pekare till funktioner" +msgstr "ISO C++ förbjuder villkorliga uttryck mellan pekare av typ %<void *%> och pekare till funktioner" #: cp/typeck.c:686 #, gcc-internal-format msgid "comparison between distinct pointer-to-member types %qT and %qT lacks a cast" -msgstr "jämförelse mellan olika pekare-på-medlem-typer %qT och %qT saknar en typkonvertering" +msgstr "jämförelse mellan olika pekare-pÃ¥-medlem-typer %qT och %qT saknar en typkonvertering" #: cp/typeck.c:691 #, gcc-internal-format msgid "conversion between distinct pointer-to-member types %qT and %qT lacks a cast" -msgstr "konvertering mellan olika pekare-på-medlem-typer %qT och %qT saknar en typkonvertering" +msgstr "konvertering mellan olika pekare-pÃ¥-medlem-typer %qT och %qT saknar en typkonvertering" #: cp/typeck.c:696 #, gcc-internal-format msgid "conditional expression between distinct pointer-to-member types %qT and %qT lacks a cast" -msgstr "villkorsuttryck mellan olika pekare-på-medlem-typer %qT och %qT saknar en typkonvertering" +msgstr "villkorsuttryck mellan olika pekare-pÃ¥-medlem-typer %qT och %qT saknar en typkonvertering" #: cp/typeck.c:1393 #, gcc-internal-format msgid "canonical types differ for identical types %T and %T" -msgstr "kanoniska typer skiljer för identiska typer %T och %T" +msgstr "kanoniska typer skiljer för identiska typer %T och %T" #: cp/typeck.c:1400 #, gcc-internal-format msgid "same canonical type node for different types %T and %T" -msgstr "samma kanoniska typnod för %T och %T" +msgstr "samma kanoniska typnod för %T och %T" #: cp/typeck.c:1525 #, gcc-internal-format msgid "invalid application of %qs to a member function" -msgstr "ogiltig användning av %qs på en medlemsfunktion" +msgstr "ogiltig användning av %qs pÃ¥ en medlemsfunktion" #: cp/typeck.c:1602 #, gcc-internal-format msgid "invalid application of %<sizeof%> to a bit-field" -msgstr "ogiltig användning av %<sizeof%> på ett bitfält" +msgstr "ogiltig användning av %<sizeof%> pÃ¥ ett bitfält" #: cp/typeck.c:1610 #, gcc-internal-format msgid "ISO C++ forbids applying %<sizeof%> to an expression of function type" -msgstr "ISO C++ förbjuder användning av %<sizeof%> på ett uttryck med funktionstyp" +msgstr "ISO C++ förbjuder användning av %<sizeof%> pÃ¥ ett uttryck med funktionstyp" #: cp/typeck.c:1661 #, gcc-internal-format msgid "invalid application of %<__alignof%> to a bit-field" -msgstr "ogiltig användning av %<__alignof%> på ett bitfält" +msgstr "ogiltig användning av %<__alignof%> pÃ¥ ett bitfält" #: cp/typeck.c:1672 #, gcc-internal-format msgid "ISO C++ forbids applying %<__alignof%> to an expression of function type" -msgstr "ISO C++ förbjuder användning av %<__alignof%> på ett uttryck med funktionstyp" +msgstr "ISO C++ förbjuder användning av %<__alignof%> pÃ¥ ett uttryck med funktionstyp" #: cp/typeck.c:1730 #, gcc-internal-format msgid "invalid use of non-static member function" -msgstr "ogiltig användning av icke-statisk medlemsfunktion" +msgstr "ogiltig användning av icke-statisk medlemsfunktion" #: cp/typeck.c:2015 #, gcc-internal-format msgid "deprecated conversion from string constant to %qT" -msgstr "konvertering från strängkonstant till %qT bör undvikas" +msgstr "konvertering frÃ¥n strängkonstant till %qT bör undvikas" #: cp/typeck.c:2142 cp/typeck.c:2536 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "request for member %qD in %qE, which is of pointer type %qT (maybe you meant to use %<->%> ?)" -msgstr "begäran av medlem %qD i %qE, som är av icke-klasstyp %qT" +msgstr "begäran av medlem %qD i %qE, som är av pekartypen %qT (kanske du hade tänkt använda %<->%> ?)" #: cp/typeck.c:2146 cp/typeck.c:2540 #, gcc-internal-format msgid "request for member %qD in %qE, which is of non-class type %qT" -msgstr "begäran av medlem %qD i %qE, som är av icke-klasstyp %qT" +msgstr "begäran av medlem %qD i %qE, som är av icke-klasstyp %qT" #: cp/typeck.c:2176 #, gcc-internal-format msgid "invalid use of nonstatic data member %qE" -msgstr "ogiltig användning av icke-statisk datamedlem %qE" +msgstr "ogiltig användning av icke-statisk datamedlem %qE" #: cp/typeck.c:2232 #, gcc-internal-format msgid "invalid access to non-static data member %qD of NULL object" -msgstr "ogiltig åtkomst av ickestatisk datamedlem %qD från NULL-objekt" +msgstr "ogiltig Ã¥tkomst av ickestatisk datamedlem %qD frÃ¥n NULL-objekt" #: cp/typeck.c:2235 cp/typeck.c:2266 #, gcc-internal-format msgid "(perhaps the %<offsetof%> macro was used incorrectly)" -msgstr "(kanske makrot %<offsetof%> användes felaktigt)" +msgstr "(kanske makrot %<offsetof%> användes felaktigt)" #: cp/typeck.c:2263 #, gcc-internal-format msgid "invalid access to non-static data member %qD of NULL object" -msgstr "ogiltig åtkomst av ickestatisk datamedlem %qD från NULL-objekt" +msgstr "ogiltig Ã¥tkomst av ickestatisk datamedlem %qD frÃ¥n NULL-objekt" #: cp/typeck.c:2396 #, gcc-internal-format msgid "object type %qT does not match destructor name ~%qT" -msgstr "objekttyp %qT stämmer inte med destruerarnamnet ~%qT" +msgstr "objekttyp %qT stämmer inte med destruerarnamnet ~%qT" #: cp/typeck.c:2404 #, gcc-internal-format msgid "the type being destroyed is %qT, but the destructor refers to %qT" -msgstr "typen som destrueras är %qT, men destrueraren refererar till %qT" +msgstr "typen som destrueras är %qT, men destrueraren refererar till %qT" #: cp/typeck.c:2580 #, gcc-internal-format msgid "%<%D::%D%> is not a member of %qT" -msgstr "%<%D::%D%> är inte en medlem av %qT" +msgstr "%<%D::%D%> är inte en medlem av %qT" #: cp/typeck.c:2604 #, gcc-internal-format msgid "%qT is not a base of %qT" -msgstr "%qT är inte en basklass till %qT" +msgstr "%qT är inte en basklass till %qT" #: cp/typeck.c:2624 #, gcc-internal-format @@ -33731,27 +33734,27 @@ msgstr "%qD har ingen medlem med namnet %qE" #: cp/typeck.c:2642 #, gcc-internal-format msgid "%qD is not a member template function" -msgstr "%qD är inte en medlemsmallfunktion" +msgstr "%qD är inte en medlemsmallfunktion" #: cp/typeck.c:2786 #, gcc-internal-format msgid "%qT is not a pointer-to-object type" -msgstr "%qT är inte en pekare-på-objekt-typ" +msgstr "%qT är inte en pekare-pÃ¥-objekt-typ" #: cp/typeck.c:2817 #, gcc-internal-format msgid "invalid use of array indexing on pointer to member" -msgstr "ogiltig användning av vektorindexering på pekare till medlem" +msgstr "ogiltig användning av vektorindexering pÃ¥ pekare till medlem" #: cp/typeck.c:2820 #, gcc-internal-format msgid "invalid use of unary %<*%> on pointer to member" -msgstr "ogiltig användning av unärt %<*%> på pekare till medlem" +msgstr "ogiltig användning av unärt %<*%> pÃ¥ pekare till medlem" #: cp/typeck.c:2823 #, gcc-internal-format msgid "invalid use of implicit conversion on pointer to member" -msgstr "ogiltig användning av implicit konvertering av pekare till medlem" +msgstr "ogiltig användning av implicit konvertering av pekare till medlem" #: cp/typeck.c:2858 #, gcc-internal-format @@ -33761,7 +33764,7 @@ msgstr "index saknas i vektorreferens" #: cp/typeck.c:2942 #, gcc-internal-format msgid "ISO C++ forbids subscripting non-lvalue array" -msgstr "ISO C++ förbjuder indexering av icke-lvalue-vektor" +msgstr "ISO C++ förbjuder indexering av icke-lvalue-vektor" #: cp/typeck.c:2955 #, gcc-internal-format @@ -33771,124 +33774,124 @@ msgstr "indexering av vektor deklarerad %<register%>" #: cp/typeck.c:2992 #, gcc-internal-format msgid "subscripted value is neither array nor pointer" -msgstr "indexerat värde är varken en vektor eller pekare" +msgstr "indexerat värde är varken en vektor eller pekare" #: cp/typeck.c:3058 #, gcc-internal-format msgid "object missing in use of %qE" -msgstr "objekt saknas i användning av %qE" +msgstr "objekt saknas i användning av %qE" #: cp/typeck.c:3252 #, gcc-internal-format msgid "ISO C++ forbids calling %<::main%> from within program" -msgstr "ISO C++ förbjuder anrop av %<::main%> inifrån program" +msgstr "ISO C++ förbjuder anrop av %<::main%> inifrÃ¥n program" #: cp/typeck.c:3271 #, gcc-internal-format msgid "must use %<.*%> or %<->*%> to call pointer-to-member function in %<%E (...)%>, e.g. %<(... ->* %E) (...)%>" -msgstr "man måste använda %<.*%> eller %<->*%> för att anropa en pekare-till-medlems-funktion i %<%E (...)%>, t.ex. %<(... ->* %E) (...)%>" +msgstr "man mÃ¥ste använda %<.*%> eller %<->*%> för att anropa en pekare-till-medlems-funktion i %<%E (...)%>, t.ex. %<(... ->* %E) (...)%>" #: cp/typeck.c:3286 #, gcc-internal-format msgid "%qE cannot be used as a function" -msgstr "%qE kan inte användas som en funktion" +msgstr "%qE kan inte användas som en funktion" #: cp/typeck.c:3333 #, gcc-internal-format msgid "too many arguments to constructor %q#D" -msgstr "för många argument till konstrueraren %q#D" +msgstr "för mÃ¥nga argument till konstrueraren %q#D" #: cp/typeck.c:3334 #, gcc-internal-format msgid "too few arguments to constructor %q#D" -msgstr "för få argument till konstrueraren %q#D" +msgstr "för fÃ¥ argument till konstrueraren %q#D" #: cp/typeck.c:3339 #, gcc-internal-format msgid "too many arguments to member function %q#D" -msgstr "för många argument till medlemsfunktionen %q#D" +msgstr "för mÃ¥nga argument till medlemsfunktionen %q#D" #: cp/typeck.c:3340 #, gcc-internal-format msgid "too few arguments to member function %q#D" -msgstr "för få argument till medlemsfunktionen %q#D" +msgstr "för fÃ¥ argument till medlemsfunktionen %q#D" #: cp/typeck.c:3346 #, gcc-internal-format msgid "too many arguments to function %q#D" -msgstr "för många argument till funktionen %q#D" +msgstr "för mÃ¥nga argument till funktionen %q#D" #: cp/typeck.c:3347 #, gcc-internal-format msgid "too few arguments to function %q#D" -msgstr "för få argument till funktionen %q#D" +msgstr "för fÃ¥ argument till funktionen %q#D" #: cp/typeck.c:3357 #, gcc-internal-format msgid "too many arguments to method %q#D" -msgstr "för många argument till metoden %q#D" +msgstr "för mÃ¥nga argument till metoden %q#D" #: cp/typeck.c:3358 #, gcc-internal-format msgid "too few arguments to method %q#D" -msgstr "för få argument till metoden %q#D" +msgstr "för fÃ¥ argument till metoden %q#D" #: cp/typeck.c:3361 #, gcc-internal-format msgid "too many arguments to function" -msgstr "för många argument till funktion" +msgstr "för mÃ¥nga argument till funktion" #: cp/typeck.c:3362 #, gcc-internal-format msgid "too few arguments to function" -msgstr "för få argument till funktion" +msgstr "för fÃ¥ argument till funktion" #: cp/typeck.c:3441 #, gcc-internal-format msgid "parameter %P of %qD has incomplete type %qT" -msgstr "parameter %P till %qD har ofullständig typ %qT" +msgstr "parameter %P till %qD har ofullständig typ %qT" #: cp/typeck.c:3444 #, gcc-internal-format msgid "parameter %P has incomplete type %qT" -msgstr "parametern %P har ofullständig typ %qT" +msgstr "parametern %P har ofullständig typ %qT" #: cp/typeck.c:3739 cp/typeck.c:3750 #, gcc-internal-format msgid "assuming cast to type %qT from overloaded function" -msgstr "antar typkonvertering till %qT från överlagrad funktion" +msgstr "antar typkonvertering till %qT frÃ¥n överlagrad funktion" #. Some sort of arithmetic operation involving NULL was #. performed. #: cp/typeck.c:3793 #, gcc-internal-format msgid "NULL used in arithmetic" -msgstr "NULL använd i aritmetik" +msgstr "NULL använd i aritmetik" #: cp/typeck.c:3984 #, gcc-internal-format msgid "left rotate count is negative" -msgstr "längd att rotera till vänster är negativ" +msgstr "längd att rotera till vänster är negativ" #: cp/typeck.c:3985 #, gcc-internal-format msgid "right rotate count is negative" -msgstr "längd att rotera till höger är negativ" +msgstr "längd att rotera till höger är negativ" #: cp/typeck.c:3991 #, gcc-internal-format msgid "left rotate count >= width of type" -msgstr "längd att rotera till vänster >= storleken på typen" +msgstr "längd att rotera till vänster >= storleken pÃ¥ typen" #: cp/typeck.c:3992 #, gcc-internal-format msgid "right rotate count >= width of type" -msgstr "längd att rotera till höger >= storleken på typen" +msgstr "längd att rotera till höger >= storleken pÃ¥ typen" #: cp/typeck.c:4011 cp/typeck.c:4241 #, gcc-internal-format msgid "comparison with string literal results in unspecified behaviour" -msgstr "jämförelse med strängkonstant resulterar i odefinierat beteende" +msgstr "jämförelse med strängkonstant resulterar i odefinierat beteende" #: cp/typeck.c:4030 cp/typeck.c:4042 #, gcc-internal-format @@ -33898,37 +33901,37 @@ msgstr "adressen till %qD kommer aldrig vara NULL" #: cp/typeck.c:4054 cp/typeck.c:4062 cp/typeck.c:4274 cp/typeck.c:4282 #, gcc-internal-format msgid "ISO C++ forbids comparison between pointer and integer" -msgstr "ISO C++ förbjuder jämförelse mellan pekare och heltal" +msgstr "ISO C++ förbjuder jämförelse mellan pekare och heltal" #: cp/typeck.c:4299 #, gcc-internal-format msgid "unordered comparison on non-floating point argument" -msgstr "oordnad jämförelse av argument som inte är flyttal" +msgstr "oordnad jämförelse av argument som inte är flyttal" #: cp/typeck.c:4346 #, gcc-internal-format msgid "invalid operands of types %qT and %qT to binary %qO" -msgstr "ogiltiga operander av typ %qT och %qT till binär %qO" +msgstr "ogiltiga operander av typ %qT och %qT till binär %qO" #: cp/typeck.c:4571 #, gcc-internal-format msgid "ISO C++ forbids using pointer of type %<void *%> in subtraction" -msgstr "ISO C++ förbjuder användning av pekare av typ %<void *%> i subtraktion" +msgstr "ISO C++ förbjuder användning av pekare av typ %<void *%> i subtraktion" #: cp/typeck.c:4573 #, gcc-internal-format msgid "ISO C++ forbids using pointer to a function in subtraction" -msgstr "ISO C++ förbjuder användning av pekare till en funktion i subtraktion" +msgstr "ISO C++ förbjuder användning av pekare till en funktion i subtraktion" #: cp/typeck.c:4575 #, gcc-internal-format msgid "ISO C++ forbids using pointer to a method in subtraction" -msgstr "ISO C++ förbjuder användning av pekare till en metod i subtraktion" +msgstr "ISO C++ förbjuder användning av pekare till en metod i subtraktion" #: cp/typeck.c:4588 #, gcc-internal-format msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" -msgstr "ogiltig användning av en pekare till en ofullständig typ i pekararitmetik" +msgstr "ogiltig användning av en pekare till en ofullständig typ i pekararitmetik" #: cp/typeck.c:4646 #, gcc-internal-format @@ -33943,34 +33946,34 @@ msgstr "tar adressen till destrueraren %qE" #: cp/typeck.c:4661 #, gcc-internal-format msgid "invalid use of %qE to form a pointer-to-member-function" -msgstr "ogiltig användning av %qE för att skapa en pekare-till-medlem-funktion" +msgstr "ogiltig användning av %qE för att skapa en pekare-till-medlem-funktion" #: cp/typeck.c:4664 #, gcc-internal-format msgid " a qualified-id is required" -msgstr " ett kvalificerat id krävs" +msgstr " ett kvalificerat id krävs" #: cp/typeck.c:4669 #, gcc-internal-format msgid "parentheses around %qE cannot be used to form a pointer-to-member-function" -msgstr "parenteser runt %qE kan inte användas för att skapa en pekare-till-medlem-funktion" +msgstr "parenteser runt %qE kan inte användas för att skapa en pekare-till-medlem-funktion" #. An expression like &memfn. #: cp/typeck.c:4830 #, gcc-internal-format msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say %<&%T::%D%>" -msgstr "ISO C++ förbjuder att ta adressen till en okvalificerad eller parentetiserad icke-statisk medlemsfunktion för att skapa en pekare till en medlemsfunktion. Säg %<&%T::%D%>" +msgstr "ISO C++ förbjuder att ta adressen till en okvalificerad eller parentetiserad icke-statisk medlemsfunktion för att skapa en pekare till en medlemsfunktion. Säg %<&%T::%D%>" #: cp/typeck.c:4835 #, gcc-internal-format msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say %<&%T::%D%>" -msgstr "ISO C++ förbjuder att ta adressen till en bunden medlemsfunktion för att skapa en pekare till medlemsfunktion. Säg %<&%T::%D%>" +msgstr "ISO C++ förbjuder att ta adressen till en bunden medlemsfunktion för att skapa en pekare till medlemsfunktion. Säg %<&%T::%D%>" #. Make this a permerror because we used to accept it. #: cp/typeck.c:4872 #, gcc-internal-format msgid "taking address of temporary" -msgstr "tar adress till något temporärt" +msgstr "tar adress till nÃ¥got temporärt" #: cp/typeck.c:4874 #, gcc-internal-format @@ -33980,12 +33983,12 @@ msgstr "tar adressen till xvalue (rvalue-referens)" #: cp/typeck.c:4891 #, gcc-internal-format msgid "ISO C++ forbids taking address of function %<::main%>" -msgstr "ISO C++ förbjuder att ta adressen till funktionen %<::main%>" +msgstr "ISO C++ förbjuder att ta adressen till funktionen %<::main%>" #: cp/typeck.c:4946 #, gcc-internal-format msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" -msgstr "ISO C++ förbjuder att ta adressen till en typkonvertering till ett icke-lvärde-uttryck" +msgstr "ISO C++ förbjuder att ta adressen till en typkonvertering till ett icke-lvärde-uttryck" #: cp/typeck.c:4974 #, gcc-internal-format @@ -33995,57 +33998,57 @@ msgstr "kan inte skapa pekare till referensmedlem %qD" #: cp/typeck.c:5238 #, gcc-internal-format msgid "ISO C++ forbids incrementing an enum" -msgstr "ISO C++ förbjuder ökning av enum" +msgstr "ISO C++ förbjuder ökning av enum" #: cp/typeck.c:5239 #, gcc-internal-format msgid "ISO C++ forbids decrementing an enum" -msgstr "ISO C++ förbjuder minskning av enum" +msgstr "ISO C++ förbjuder minskning av enum" #: cp/typeck.c:5255 #, gcc-internal-format msgid "cannot increment a pointer to incomplete type %qT" -msgstr "det går inte att öka en pekare på en ofullständig typ %qT" +msgstr "det gÃ¥r inte att öka en pekare pÃ¥ en ofullständig typ %qT" #: cp/typeck.c:5256 #, gcc-internal-format msgid "cannot decrement a pointer to incomplete type %qT" -msgstr "det går inte att minska en pekare på en ofullständig typ %qT" +msgstr "det gÃ¥r inte att minska en pekare pÃ¥ en ofullständig typ %qT" #: cp/typeck.c:5267 #, gcc-internal-format msgid "ISO C++ forbids incrementing a pointer of type %qT" -msgstr "ISO C++ förbjuder ökning av pekare på typ %qT" +msgstr "ISO C++ förbjuder ökning av pekare pÃ¥ typ %qT" #: cp/typeck.c:5268 #, gcc-internal-format msgid "ISO C++ forbids decrementing a pointer of type %qT" -msgstr "ISO C++ förbjuder minskning av pekare på typ %qT" +msgstr "ISO C++ förbjuder minskning av pekare pÃ¥ typ %qT" #: cp/typeck.c:5301 #, gcc-internal-format msgid "invalid use of Boolean expression as operand to %<operator--%>" -msgstr "ogiltigt användning av Booleskt uttryck som operand till %<operator--%>" +msgstr "ogiltigt användning av Booleskt uttryck som operand till %<operator--%>" #: cp/typeck.c:5463 #, gcc-internal-format msgid "cannot take the address of %<this%>, which is an rvalue expression" -msgstr "kan inte ta adressen till %<this%>, som är ett rvalue-uttryck" +msgstr "kan inte ta adressen till %<this%>, som är ett rvalue-uttryck" #: cp/typeck.c:5485 #, gcc-internal-format msgid "address of explicit register variable %qD requested" -msgstr "adress till explicit registervariabel %qD begärd" +msgstr "adress till explicit registervariabel %qD begärd" #: cp/typeck.c:5490 #, gcc-internal-format msgid "address requested for %qD, which is declared %<register%>" -msgstr "adress begärd till %qD, som är deklarerad %<register%>" +msgstr "adress begärd till %qD, som är deklarerad %<register%>" #: cp/typeck.c:5571 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "list-initializer for non-class type must not be parenthesized" -msgstr "initierare för %qT måste vara inom klamrar" +msgstr "listinitierare för en typ som inte är en klass fÃ¥r inte vara inom parenteser" #: cp/typeck.c:5583 #, gcc-internal-format @@ -34070,47 +34073,47 @@ msgstr "uttryckslistan %s behandlas som sammansatt uttryck" #: cp/typeck.c:5698 #, gcc-internal-format msgid "no context to resolve type of %qE" -msgstr "ingen kontext för att lösa upp typen på %qE" +msgstr "ingen kontext för att lösa upp typen pÃ¥ %qE" #: cp/typeck.c:5731 #, gcc-internal-format msgid "cast from type %qT to type %qT casts away qualifiers" -msgstr "konvertering från typ %qT till typ %qT slänger bort kvalificerare" +msgstr "konvertering frÃ¥n typ %qT till typ %qT slänger bort kvalificerare" #: cp/typeck.c:5737 #, gcc-internal-format msgid "static_cast from type %qT to type %qT casts away qualifiers" -msgstr "static_cast från typ %qT till typ %qT slänger bort kvalificerare" +msgstr "static_cast frÃ¥n typ %qT till typ %qT slänger bort kvalificerare" #: cp/typeck.c:5743 #, gcc-internal-format msgid "reinterpret_cast from type %qT to type %qT casts away qualifiers" -msgstr "reinterpret_cast från typ %qT till typ %qT slänger bort kvalificerare" +msgstr "reinterpret_cast frÃ¥n typ %qT till typ %qT slänger bort kvalificerare" #: cp/typeck.c:6084 #, gcc-internal-format msgid "invalid static_cast from type %qT to type %qT" -msgstr "ogiltig static_cast från typ %qT till typ %qT" +msgstr "ogiltig static_cast frÃ¥n typ %qT till typ %qT" #: cp/typeck.c:6107 #, gcc-internal-format msgid "converting from %qT to %qT" -msgstr "konvertering från %qT till %qT" +msgstr "konvertering frÃ¥n %qT till %qT" #: cp/typeck.c:6156 #, gcc-internal-format msgid "invalid cast of an rvalue expression of type %qT to type %qT" -msgstr "ogiltig typkonvertering av ett rvärdeuttryck av typ %qT till typ %qT" +msgstr "ogiltig typkonvertering av ett rvärdeuttryck av typ %qT till typ %qT" #: cp/typeck.c:6226 #, gcc-internal-format msgid "cast from %qT to %qT loses precision" -msgstr "konvertering från %qT till %qT förlorar precision" +msgstr "konvertering frÃ¥n %qT till %qT förlorar precision" #: cp/typeck.c:6266 #, gcc-internal-format msgid "cast from %qT to %qT increases required alignment of target type" -msgstr "typkonvertering från %qT till %qT ökar kravet på justering för måltypen" +msgstr "typkonvertering frÃ¥n %qT till %qT ökar kravet pÃ¥ justering för mÃ¥ltypen" #. Only issue a warning, as we have always supported this #. where possible, and it is necessary in some cases. DR 195 @@ -34119,37 +34122,37 @@ msgstr "typkonvertering från %qT till %qT ökar kravet på justering för måltypen" #: cp/typeck.c:6285 #, gcc-internal-format msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object" -msgstr "ISO C++ förbjuder konvertering mellan pekare-till-funktion och pekare-till-objekt" +msgstr "ISO C++ förbjuder konvertering mellan pekare-till-funktion och pekare-till-objekt" #: cp/typeck.c:6298 #, gcc-internal-format msgid "invalid cast from type %qT to type %qT" -msgstr "ogiltig konvertering från typ %qT till typ %qT" +msgstr "ogiltig konvertering frÃ¥n typ %qT till typ %qT" #: cp/typeck.c:6354 #, gcc-internal-format msgid "invalid use of const_cast with type %qT, which is not a pointer, reference, nor a pointer-to-data-member type" -msgstr "ogiltig användning av const_cast med typ %qT, som inte är en pekare, referens, eller pekare-till-datamedlem-typ" +msgstr "ogiltig användning av const_cast med typ %qT, som inte är en pekare, referens, eller pekare-till-datamedlem-typ" #: cp/typeck.c:6363 #, gcc-internal-format msgid "invalid use of const_cast with type %qT, which is a pointer or reference to a function type" -msgstr "ogiltig användning av const_cast med typ %qT, som är en pekare eller referens till en funktionstyp" +msgstr "ogiltig användning av const_cast med typ %qT, som är en pekare eller referens till en funktionstyp" #: cp/typeck.c:6403 #, gcc-internal-format msgid "invalid const_cast of an rvalue of type %qT to type %qT" -msgstr "ogiltig const_cast av ett rvärde av typ %qT till typ %qT" +msgstr "ogiltig const_cast av ett rvärde av typ %qT till typ %qT" #: cp/typeck.c:6459 #, gcc-internal-format msgid "invalid const_cast from type %qT to type %qT" -msgstr "ogiltig const_cast från typ %qT till typ %qT" +msgstr "ogiltig const_cast frÃ¥n typ %qT till typ %qT" #: cp/typeck.c:6536 cp/typeck.c:6544 #, gcc-internal-format msgid "ISO C++ forbids casting to an array type %qT" -msgstr "ISO C++ förbjuder typkonvertering till en vektortyp %qT" +msgstr "ISO C++ förbjuder typkonvertering till en vektortyp %qT" #: cp/typeck.c:6553 #, gcc-internal-format @@ -34159,12 +34162,12 @@ msgstr "ogiltig konvertering till funktionstyp %qT" #: cp/typeck.c:6829 #, gcc-internal-format msgid " in evaluation of %<%Q(%#T, %#T)%>" -msgstr " i beräkningen av %<%Q(%#T, %#T)%>" +msgstr " i beräkningen av %<%Q(%#T, %#T)%>" #: cp/typeck.c:6890 #, gcc-internal-format msgid "assigning to an array from an initializer list" -msgstr "tilldelning till en vektor från en initierarlista" +msgstr "tilldelning till en vektor frÃ¥n en initierarlista" #: cp/typeck.c:6904 #, gcc-internal-format @@ -34174,7 +34177,7 @@ msgstr "inkompatibla typer i tilldelning av %qT till %qT" #: cp/typeck.c:6918 #, gcc-internal-format msgid "array used as initializer" -msgstr "vektor använd som initierare" +msgstr "vektor använd som initierare" #: cp/typeck.c:6920 #, gcc-internal-format @@ -34199,82 +34202,82 @@ msgstr " i konvertering av pekare till medlem" #: cp/typeck.c:7191 #, gcc-internal-format msgid "invalid conversion to type %qT from type %qT" -msgstr "ogiltig konvertering till typ %qT från typ %qT" +msgstr "ogiltig konvertering till typ %qT frÃ¥n typ %qT" #: cp/typeck.c:7473 #, gcc-internal-format msgid "cannot convert %qT to %qT for argument %qP to %qD" -msgstr "kan inte konvertera %qT till %qT för argument %qP till %qD" +msgstr "kan inte konvertera %qT till %qT för argument %qP till %qD" #: cp/typeck.c:7479 #, gcc-internal-format msgid "cannot convert %qT to %qT in default argument" -msgstr "det går inte att konvertera %qT till %qT i standardargument" +msgstr "det gÃ¥r inte att konvertera %qT till %qT i standardargument" #: cp/typeck.c:7483 #, gcc-internal-format msgid "cannot convert %qT to %qT in argument passing" -msgstr "det går inte att konvertera %qT till %qT när argument skickas" +msgstr "det gÃ¥r inte att konvertera %qT till %qT när argument skickas" #: cp/typeck.c:7487 #, gcc-internal-format msgid "cannot convert %qT to %qT" -msgstr "det går inte att konvertera %qT till %qT" +msgstr "det gÃ¥r inte att konvertera %qT till %qT" #: cp/typeck.c:7491 #, gcc-internal-format msgid "cannot convert %qT to %qT in initialization" -msgstr "det går inte att konvertera %qT till %qT i initiering" +msgstr "det gÃ¥r inte att konvertera %qT till %qT i initiering" #: cp/typeck.c:7495 #, gcc-internal-format msgid "cannot convert %qT to %qT in return" -msgstr "det går inte att konvertera %qT till %qT i retur" +msgstr "det gÃ¥r inte att konvertera %qT till %qT i retur" #: cp/typeck.c:7499 #, gcc-internal-format msgid "cannot convert %qT to %qT in assignment" -msgstr "det går inte att konvertera %qT till %qT i tilldelning" +msgstr "det gÃ¥r inte att konvertera %qT till %qT i tilldelning" #: cp/typeck.c:7522 #, gcc-internal-format msgid "parameter %qP of %qD might be a candidate for a format attribute" -msgstr "parameter %qP till %qD kan vara en kandidat för ett formatattribut" +msgstr "parameter %qP till %qD kan vara en kandidat för ett formatattribut" #: cp/typeck.c:7526 #, gcc-internal-format msgid "parameter might be a candidate for a format attribute" -msgstr "parameter kan vara en kandidat för ett formatattribut" +msgstr "parameter kan vara en kandidat för ett formatattribut" #: cp/typeck.c:7531 #, gcc-internal-format msgid "target of conversion might be a candidate for a format attribute" -msgstr "målet för konvertering kan vara en kandidat för ett formatattribut" +msgstr "mÃ¥let för konvertering kan vara en kandidat för ett formatattribut" #: cp/typeck.c:7536 #, gcc-internal-format msgid "target of initialization might be a candidate for a format attribute" -msgstr "målet för initialisering kan vara en kandidat för ett formatattribut" +msgstr "mÃ¥let för initialisering kan vara en kandidat för ett formatattribut" #: cp/typeck.c:7546 #, gcc-internal-format msgid "left-hand side of assignment might be a candidate for a format attribute" -msgstr "vänsterhandssida av tilldelning kan vara en kandidat för ett formatattribut" +msgstr "vänsterhandssida av tilldelning kan vara en kandidat för ett formatattribut" #: cp/typeck.c:7641 cp/typeck.c:7643 #, gcc-internal-format msgid "in passing argument %P of %q+D" -msgstr "när argument %P till %q+D skickades" +msgstr "när argument %P till %q+D skickades" #: cp/typeck.c:7698 #, gcc-internal-format msgid "returning reference to temporary" -msgstr "returnerar referens till en temporär" +msgstr "returnerar referens till en temporär" #: cp/typeck.c:7705 #, gcc-internal-format msgid "reference to non-lvalue returned" -msgstr "referens till annat än lvärde returnerad" +msgstr "referens till annat än lvärde returnerad" #: cp/typeck.c:7721 #, gcc-internal-format @@ -34289,142 +34292,142 @@ msgstr "adress till lokal variabel %q+D returnerad" #: cp/typeck.c:7759 #, gcc-internal-format msgid "returning a value from a destructor" -msgstr "returnerar ett värde från en destruktor" +msgstr "returnerar ett värde frÃ¥n en destruktor" #. If a return statement appears in a handler of the #. function-try-block of a constructor, the program is ill-formed. #: cp/typeck.c:7767 #, gcc-internal-format msgid "cannot return from a handler of a function-try-block of a constructor" -msgstr "det går inte att returnerar från en hanterare i ett funktions-try-block eller en konstruerare" +msgstr "det gÃ¥r inte att returnerar frÃ¥n en hanterare i ett funktions-try-block eller en konstruerare" #. You can't return a value from a constructor. #: cp/typeck.c:7770 #, gcc-internal-format msgid "returning a value from a constructor" -msgstr "returnerar ett värde från en konstruerare" +msgstr "returnerar ett värde frÃ¥n en konstruerare" #: cp/typeck.c:7793 #, gcc-internal-format msgid "inconsistent types %qT and %qT deduced for lambda return type" -msgstr "inkonsistenta typer %qT och %qT härledda för lambda-returtypen" +msgstr "inkonsistenta typer %qT och %qT härledda för lambda-returtypen" #: cp/typeck.c:7819 #, gcc-internal-format msgid "return-statement with no value, in function returning %qT" -msgstr "return-sats utan värde i funktion som returnerar %qT" +msgstr "return-sats utan värde i funktion som returnerar %qT" #: cp/typeck.c:7840 #, gcc-internal-format msgid "return-statement with a value, in function returning 'void'" -msgstr "return-sats med värde i funktion som returnerar \"void\"" +msgstr "return-sats med värde i funktion som returnerar â€voidâ€" #: cp/typeck.c:7870 #, gcc-internal-format msgid "%<operator new%> must not return NULL unless it is declared %<throw()%> (or -fcheck-new is in effect)" -msgstr "%<operator new%> får inte returnera NULL om den inte är deklarerad %<throw()%> (eller -fcheck-new är aktivt)" +msgstr "%<operator new%> fÃ¥r inte returnera NULL om den inte är deklarerad %<throw()%> (eller -fcheck-new är aktivt)" #. Make this a permerror because we used to accept it. #: cp/typeck.c:8441 #, gcc-internal-format msgid "using temporary as lvalue" -msgstr "använder temporär som lvärde" +msgstr "använder temporär som lvärde" #: cp/typeck.c:8443 #, gcc-internal-format msgid "using xvalue (rvalue reference) as lvalue" -msgstr "hjälp xvärde (rvärdesreferens) som lvärde" +msgstr "hjälp xvärde (rvärdesreferens) som lvärde" #: cp/typeck2.c:53 #, gcc-internal-format msgid "type %qT is not a base type for type %qT" -msgstr "typen %qT är inte en bastyp för typen %qT" +msgstr "typen %qT är inte en bastyp för typen %qT" #: cp/typeck2.c:107 #, gcc-internal-format msgid "assignment of constant field %qD" -msgstr "tilldelning till konstant fält %qD" +msgstr "tilldelning till konstant fält %qD" #: cp/typeck2.c:109 #, gcc-internal-format msgid "constant field %qD used as %<asm%> output" -msgstr "konstant fält %qD använt som %<asm%>-utdata" +msgstr "konstant fält %qD använt som %<asm%>-utdata" #: cp/typeck2.c:111 #, gcc-internal-format msgid "increment of constant field %qD" -msgstr "ökning av konstant fält %qD" +msgstr "ökning av konstant fält %qD" #: cp/typeck2.c:113 #, gcc-internal-format msgid "decrement of constant field %qD" -msgstr "minskning av konstant fält %qD" +msgstr "minskning av konstant fält %qD" #: cp/typeck2.c:120 #, gcc-internal-format msgid "assignment of read-only reference %qD" -msgstr "tilldelning till endast läsbar referens %qD" +msgstr "tilldelning till endast läsbar referens %qD" #: cp/typeck2.c:122 #, gcc-internal-format msgid "read-only reference %qD used as %<asm%> output" -msgstr "endast läsbar referens %qD använd som %<asm%>-utdata" +msgstr "endast läsbar referens %qD använd som %<asm%>-utdata" #: cp/typeck2.c:124 #, gcc-internal-format msgid "increment of read-only reference %qD" -msgstr "ökning av endast läsbar referens %qD" +msgstr "ökning av endast läsbar referens %qD" #: cp/typeck2.c:126 #, gcc-internal-format msgid "decrement of read-only reference %qD" -msgstr "minskning av endast läsbar referens %qD" +msgstr "minskning av endast läsbar referens %qD" #: cp/typeck2.c:310 #, gcc-internal-format msgid "cannot declare variable %q+D to be of abstract type %qT" -msgstr "det går inte att deklarera variabeln %q+D att vara av abstrakt typ %qT" +msgstr "det gÃ¥r inte att deklarera variabeln %q+D att vara av abstrakt typ %qT" #: cp/typeck2.c:313 #, gcc-internal-format msgid "cannot declare parameter %q+D to be of abstract type %qT" -msgstr "det går inte att deklarera parametern %q+D att vara av abstrakt typ %qT" +msgstr "det gÃ¥r inte att deklarera parametern %q+D att vara av abstrakt typ %qT" #: cp/typeck2.c:316 #, gcc-internal-format msgid "cannot declare field %q+D to be of abstract type %qT" -msgstr "det går inte att deklarera fältet %q+D att vara av abstrakt typ %qT" +msgstr "det gÃ¥r inte att deklarera fältet %q+D att vara av abstrakt typ %qT" #: cp/typeck2.c:320 #, gcc-internal-format msgid "invalid abstract return type for member function %q+#D" -msgstr "ogiltig abstrakt returtyp för medlemsfunktion %q+#D" +msgstr "ogiltig abstrakt returtyp för medlemsfunktion %q+#D" #: cp/typeck2.c:322 #, gcc-internal-format msgid "invalid abstract return type for function %q+#D" -msgstr "ogiltig abstrakt returtyp för funktionen %q+#D" +msgstr "ogiltig abstrakt returtyp för funktionen %q+#D" #. Here we do not have location information. #: cp/typeck2.c:325 #, gcc-internal-format msgid "invalid abstract type %qT for %qE" -msgstr "ogiltigt abstrakt typ %qT för %qE" +msgstr "ogiltigt abstrakt typ %qT för %qE" #: cp/typeck2.c:327 #, gcc-internal-format msgid "invalid abstract type for %q+D" -msgstr "ogiltig abstrakt typ för %q+D" +msgstr "ogiltig abstrakt typ för %q+D" #: cp/typeck2.c:330 #, gcc-internal-format msgid "cannot allocate an object of abstract type %qT" -msgstr "det går inte att allokera ett objekt av abstrakt typ %qT" +msgstr "det gÃ¥r inte att allokera ett objekt av abstrakt typ %qT" #: cp/typeck2.c:339 #, gcc-internal-format msgid " because the following virtual functions are pure within %qT:" -msgstr " för följande virtuella funktioner är rena inuti %qT:" +msgstr " för följande virtuella funktioner är rena inuti %qT:" #: cp/typeck2.c:345 #, gcc-internal-format @@ -34439,17 +34442,17 @@ msgstr " eftersom typen %qT har rent virtuella funktioner" #: cp/typeck2.c:392 #, gcc-internal-format msgid "%q+D has incomplete type" -msgstr "%q+D har en ofullständig typ" +msgstr "%q+D har en ofullständig typ" #: cp/typeck2.c:405 #, gcc-internal-format msgid "invalid use of incomplete type %q#T" -msgstr "ogiltig användning av ofullständig typ %q#T" +msgstr "ogiltig användning av ofullständig typ %q#T" #: cp/typeck2.c:408 #, gcc-internal-format msgid "forward declaration of %q+#T" -msgstr "framåtdeklaration av %q+#T" +msgstr "framÃ¥tdeklaration av %q+#T" #: cp/typeck2.c:411 #, gcc-internal-format @@ -34459,102 +34462,102 @@ msgstr "deklaration av %q+#T" #: cp/typeck2.c:416 #, gcc-internal-format msgid "invalid use of %qT" -msgstr "ogiltigt användning av %qT" +msgstr "ogiltigt användning av %qT" #: cp/typeck2.c:438 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid use of member function (did you forget the %<()%> ?)" -msgstr "ogiltig användning av medlem (glömde du %<&%>?)" +msgstr "ogiltig användning av medlemsfunktion (glömde du %<()%> ?)" #: cp/typeck2.c:442 #, gcc-internal-format msgid "invalid use of member (did you forget the %<&%> ?)" -msgstr "ogiltig användning av medlem (glömde du %<&%>?)" +msgstr "ogiltig användning av medlem (glömde du %<&%>?)" #: cp/typeck2.c:453 #, gcc-internal-format msgid "invalid use of template type parameter %qT" -msgstr "ogiltig användning av malltypparameter %qT" +msgstr "ogiltig användning av malltypparameter %qT" #: cp/typeck2.c:458 #, gcc-internal-format msgid "invalid use of template template parameter %qT" -msgstr "ogiltigt standardargument för mallmallparameter %qT" +msgstr "ogiltigt standardargument för mallmallparameter %qT" #: cp/typeck2.c:464 #, gcc-internal-format msgid "invalid use of dependent type %qT" -msgstr "ogiltig användning av beroende typ %qT" +msgstr "ogiltig användning av beroende typ %qT" #: cp/typeck2.c:471 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid use of brace-enclosed initializer list" -msgstr "<klamrar runt initierarlista>" +msgstr "ogiltig användning av klammeromsluten initierarlista" #: cp/typeck2.c:479 #, gcc-internal-format msgid "address of overloaded function with no contextual type information" -msgstr "adress till överlagrad funktion utan typinformation från sammanhanget" +msgstr "adress till överlagrad funktion utan typinformation frÃ¥n sammanhanget" #: cp/typeck2.c:483 #, gcc-internal-format msgid "overloaded function with no contextual type information" -msgstr "överlagrad funktion utan typinformation från sammanhanget" +msgstr "överlagrad funktion utan typinformation frÃ¥n sammanhanget" #: cp/typeck2.c:486 #, gcc-internal-format msgid "insufficient contextual information to determine type" -msgstr "otillräcklig sammanhangsinformation för att avgöra typen" +msgstr "otillräcklig sammanhangsinformation för att avgöra typen" #: cp/typeck2.c:677 #, gcc-internal-format msgid "constructor syntax used, but no constructor declared for type %qT" -msgstr "konstruerarsyntax använd, men ingen konstruerare är deklarerad för typ %qT" +msgstr "konstruerarsyntax använd, men ingen konstruerare är deklarerad för typ %qT" #: cp/typeck2.c:690 #, gcc-internal-format msgid "cannot initialize arrays using this syntax" -msgstr "det går inte att initiera vektorer med denna syntax" +msgstr "det gÃ¥r inte att initiera vektorer med denna syntax" #: cp/typeck2.c:832 #, gcc-internal-format msgid "narrowing conversion of %qE from %qT to %qT inside { }" -msgstr "avsmalnande konvertering av %qE från %qT till %qT inuti { }" +msgstr "avsmalnande konvertering av %qE frÃ¥n %qT till %qT inuti { }" #: cp/typeck2.c:836 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "narrowing conversion of %qE from %qT to %qT inside { } is ill-formed in C++11" -msgstr "avsmalnande konvertering av %qE från %qT till %qT inuti { }" +msgstr "avsmalnande konvertering av %qE frÃ¥n %qT till %qT inuti { } är felaktig i C++11" #: cp/typeck2.c:899 #, gcc-internal-format msgid "int-array initialized from non-wide string" -msgstr "int-vektor initierad från icke-bred sträng" +msgstr "int-vektor initierad frÃ¥n icke-bred sträng" #: cp/typeck2.c:905 #, gcc-internal-format msgid "int-array initialized from incompatible wide string" -msgstr "int-vektor initierad från inkompatibel bred sträng" +msgstr "int-vektor initierad frÃ¥n inkompatibel bred sträng" #: cp/typeck2.c:925 #, gcc-internal-format msgid "initializer-string for array of chars is too long" -msgstr "initierarsträng för vektor av tecken är för stor" +msgstr "initierarsträng för vektor av tecken är för stor" #: cp/typeck2.c:973 #, gcc-internal-format msgid "cannot initialize aggregate of type %qT with a compound literal" -msgstr "det går inte att initiera aggregat med typ %qT med en sammansatt literal" +msgstr "det gÃ¥r inte att initiera aggregat med typ %qT med en sammansatt literal" #: cp/typeck2.c:991 #, gcc-internal-format msgid "array must be initialized with a brace-enclosed initializer" -msgstr "vektorer måste initieras med en initierare inom klamrar" +msgstr "vektorer mÃ¥ste initieras med en initierare inom klamrar" #: cp/typeck2.c:1220 cp/typeck2.c:1249 #, gcc-internal-format msgid "missing initializer for member %qD" -msgstr "initierare saknas för medlem %qD" +msgstr "initierare saknas för medlem %qD" #: cp/typeck2.c:1227 #, gcc-internal-format @@ -34564,27 +34567,27 @@ msgstr "oinitierad const-medlem %qD" #: cp/typeck2.c:1234 #, gcc-internal-format msgid "member %qD with uninitialized const fields" -msgstr "medlem %qD med oinitierade const-fält" +msgstr "medlem %qD med oinitierade const-fält" #: cp/typeck2.c:1241 #, gcc-internal-format msgid "member %qD is uninitialized reference" -msgstr "medlem %qD är oinitierad referens" +msgstr "medlem %qD är oinitierad referens" #: cp/typeck2.c:1321 #, gcc-internal-format msgid "no field %qD found in union being initialized" -msgstr "inget fält %qD finns i unionen som initieras" +msgstr "inget fält %qD finns i unionen som initieras" #: cp/typeck2.c:1332 #, gcc-internal-format msgid "index value instead of field name in union initializer" -msgstr "indexvärde istället för fältnamn i unioninitierare" +msgstr "indexvärde istället för fältnamn i unioninitierare" #: cp/typeck2.c:1500 #, gcc-internal-format msgid "circular pointer delegation detected" -msgstr "cirkulär pekardelegering detekterad" +msgstr "cirkulär pekardelegering detekterad" #: cp/typeck2.c:1513 #, gcc-internal-format @@ -34594,62 +34597,62 @@ msgstr "basoperanden till %<->%> har icke-pekartyp %qT" #: cp/typeck2.c:1537 #, gcc-internal-format msgid "result of %<operator->()%> yields non-pointer result" -msgstr "resultatet av %<operator->()%> ger annat än pekare" +msgstr "resultatet av %<operator->()%> ger annat än pekare" #: cp/typeck2.c:1539 #, gcc-internal-format msgid "base operand of %<->%> is not a pointer" -msgstr "basoperanden till %<->%> är inte en pekare" +msgstr "basoperanden till %<->%> är inte en pekare" #: cp/typeck2.c:1564 #, gcc-internal-format msgid "%qE cannot be used as a member pointer, since it is of type %qT" -msgstr "%qE kan inte användas som en medlemspekare eftersom den är av typen %qT" +msgstr "%qE kan inte användas som en medlemspekare eftersom den är av typen %qT" #: cp/typeck2.c:1573 #, gcc-internal-format msgid "cannot apply member pointer %qE to %qE, which is of non-class type %qT" -msgstr "det går inte att applicera medlemspekare %qE på %qE, som är av typ %qT som inte är en klass" +msgstr "det gÃ¥r inte att applicera medlemspekare %qE pÃ¥ %qE, som är av typ %qT som inte är en klass" #: cp/typeck2.c:1595 #, gcc-internal-format msgid "pointer to member type %qT incompatible with object type %qT" -msgstr "pekare-på-medlemstyp %qT är inkompatibel med objekttyp %qT" +msgstr "pekare-pÃ¥-medlemstyp %qT är inkompatibel med objekttyp %qT" #: cp/typeck2.c:1663 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "functional cast to array type %qT" -msgstr "ogiltig konvertering till funktionstyp %qT" +msgstr "funktionell konvertering till vektortypen %qT" #: cp/typeck2.c:1684 #, gcc-internal-format msgid "invalid value-initialization of reference type" -msgstr "ogiltig värdeinitiering av referenstyper" +msgstr "ogiltig värdeinitiering av referenstyper" #: cp/typeck2.c:1913 #, gcc-internal-format msgid "call to function %qD which throws incomplete type %q#T" -msgstr "anrop till funktion %qD som kastar ofullständig typ %q#T" +msgstr "anrop till funktion %qD som kastar ofullständig typ %q#T" #: cp/typeck2.c:1916 #, gcc-internal-format msgid "call to function which throws incomplete type %q#T" -msgstr "anrop till funktion som kastar ofullständig typ %q#T" +msgstr "anrop till funktion som kastar ofullständig typ %q#T" #: fortran/arith.c:46 #, gcc-internal-format, gfc-internal-format msgid "Conversion of an Infinity or Not-a-Number at %L to INTEGER" -msgstr "Konvertering av en oändlighet till inte-ett-tal vid %L till INTEGER" +msgstr "Konvertering av en oändlighet till inte-ett-tal vid %L till INTEGER" #: fortran/arith.c:905 fortran/arith.c:927 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Noninteger exponent in an initialization expression at %L" -msgstr "Fortran 2003: Exponent som inte är heltal i ett initieringsuttryck vid %L" +msgstr "Fortran 2003: Exponent som inte är heltal i ett initieringsuttryck vid %L" #: fortran/arith.c:913 #, gcc-internal-format, gfc-internal-format msgid "Raising a negative REAL at %L to a REAL power is prohibited" -msgstr "Höja en negativ REAL vid %L till en REAL exponent är inte tillåtet" +msgstr "Höja en negativ REAL vid %L till en REAL exponent är inte tillÃ¥tet" #: fortran/arith.c:1909 #, gcc-internal-format, gfc-internal-format @@ -34684,32 +34687,32 @@ msgstr "Vektoroperander passar inte ihop vid konvertering av %s till %s vid %L" #: fortran/arith.c:1936 #, gcc-internal-format, gfc-internal-format msgid "Integer outside symmetric range implied by Standard Fortran converting %s to %s at %L" -msgstr "Heltal utanför symmetriskt intervall implicerat av Standard Fortran vid konvertering av %s till %s vid %L" +msgstr "Heltal utanför symmetriskt intervall implicerat av Standard Fortran vid konvertering av %s till %s vid %L" #: fortran/arith.c:2268 #, gcc-internal-format, gfc-internal-format msgid "The Hollerith constant at %L is too long to convert to %s" -msgstr "Hollerithkonstanten vid %L är för lång för att konverteras till %s" +msgstr "Hollerithkonstanten vid %L är för lÃ¥ng för att konverteras till %s" #: fortran/array.c:98 #, gcc-internal-format, gfc-internal-format msgid "Expected array subscript at %C" -msgstr "Förväntade vektorindex vid %C" +msgstr "Förväntade vektorindex vid %C" #: fortran/array.c:107 #, gcc-internal-format, gfc-internal-format msgid "Unexpected '*' in coarray subscript at %C" -msgstr "Oväntad \"*\" i co-vektorindex vid %C" +msgstr "Oväntad â€*†i co-vektorindex vid %C" #: fortran/array.c:131 #, gcc-internal-format, gfc-internal-format msgid "Strides not allowed in coarray subscript at %C" -msgstr "Steg är inte tillåtna i co-vektorindex vid %C" +msgstr "Steg är inte tillÃ¥tna i co-vektorindex vid %C" #: fortran/array.c:139 #, gcc-internal-format, gfc-internal-format msgid "Expected array subscript stride at %C" -msgstr "Förväntade intervall av vektorindex vid %C" +msgstr "Förväntade intervall av vektorindex vid %C" #: fortran/array.c:196 #, gcc-internal-format, gfc-internal-format @@ -34719,7 +34722,7 @@ msgstr "Felaktig form av vektorreferens vid %C" #: fortran/array.c:201 fortran/array.c:267 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %C cannot have more than %d dimensions" -msgstr "Vektorreferens vid %C kan inte ha mer än %d dimensioner" +msgstr "Vektorreferens vid %C kan inte ha mer än %d dimensioner" #: fortran/array.c:216 fortran/array.c:576 fortran/check.c:2149 #: fortran/check.c:3915 fortran/check.c:3953 fortran/check.c:4120 @@ -34727,27 +34730,27 @@ msgstr "Vektorreferens vid %C kan inte ha mer än %d dimensioner" #: fortran/simplify.c:4538 #, gcc-internal-format, gfc-internal-format msgid "Coarrays disabled at %C, use -fcoarray= to enable" -msgstr "Co-vektorer avaktiverade vid %C, använd -fcoarray= för att aktivera" +msgstr "Co-vektorer avaktiverade vid %C, använd -fcoarray= för att aktivera" #: fortran/array.c:222 #, gcc-internal-format, gfc-internal-format msgid "Unexpected coarray designator at %C" -msgstr "Oväntad co-vektorbeteckning vid %C" +msgstr "Oväntad co-vektorbeteckning vid %C" #: fortran/array.c:237 #, gcc-internal-format, gfc-internal-format msgid "Too few codimensions at %C, expected %d not %d" -msgstr "För få co-dimensioner vid %C, %d och inte %d förväntades" +msgstr "För fÃ¥ co-dimensioner vid %C, %d och inte %d förväntades" #: fortran/array.c:243 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Too many codimensions at %C, expected %d not %d" -msgstr "För få co-dimensioner vid %C, %d och inte %d förväntades" +msgstr "För mÃ¥nga co-dimensioner vid %C, %d och inte %d förväntades" #: fortran/array.c:253 #, gcc-internal-format, gfc-internal-format msgid "Unexpected '*' for codimension %d of %d at %C" -msgstr "Oväntad \"*\" för co-dimension %d av %d vid %C" +msgstr "Oväntad â€*†för co-dimension %d av %d vid %C" #: fortran/array.c:256 #, gcc-internal-format, gfc-internal-format @@ -34762,57 +34765,57 @@ msgstr "Ogiltig co-dimension %d vid %C, endast %d co-dimensioner finns" #: fortran/array.c:313 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L in this context must be constant" -msgstr "Variabeln \"%s\" vid %L i detta sammanhang måste vara en konstant" +msgstr "Variabeln â€%s†vid %L i detta sammanhang mÃ¥ste vara en konstant" #: fortran/array.c:316 #, gcc-internal-format, gfc-internal-format msgid "Expression at %L in this context must be constant" -msgstr "Uttrycket vid %L i detta sammanhang måste vara konstant" +msgstr "Uttrycket vid %L i detta sammanhang mÃ¥ste vara konstant" #: fortran/array.c:407 #, gcc-internal-format, gfc-internal-format msgid "Expected expression in array specification at %C" -msgstr "Förväntade uttryck i vektorspecifikation vid %C" +msgstr "Förväntade uttryck i vektorspecifikation vid %C" #: fortran/array.c:486 #, gcc-internal-format, gfc-internal-format msgid "Bad array specification for implied-shape array at %C" -msgstr "Felaktig vektorspecifikation för en förmodat formad vektor vid %C" +msgstr "Felaktig vektorspecifikation för en förmodat formad vektor vid %C" #: fortran/array.c:502 fortran/array.c:614 #, gcc-internal-format, gfc-internal-format msgid "Bad array specification for an explicitly shaped array at %C" -msgstr "Felaktig vektorspecifikation för en explicit formad vektor vid %C" +msgstr "Felaktig vektorspecifikation för en explicit formad vektor vid %C" #: fortran/array.c:512 fortran/array.c:624 #, gcc-internal-format, gfc-internal-format msgid "Bad array specification for assumed shape array at %C" -msgstr "Felaktig vektorspecifikation för en förmodat formad vektor vid %C" +msgstr "Felaktig vektorspecifikation för en förmodat formad vektor vid %C" #: fortran/array.c:526 fortran/array.c:638 #, gcc-internal-format, gfc-internal-format msgid "Bad specification for deferred shape array at %C" -msgstr "Felaktig specifikation för en fördröjt formad vektor vid %C" +msgstr "Felaktig specifikation för en fördröjt formad vektor vid %C" #: fortran/array.c:536 fortran/array.c:642 #, gcc-internal-format, gfc-internal-format msgid "Bad specification for assumed size array at %C" -msgstr "Felaktig specifikation för vektor med förmodad storlek vid %C" +msgstr "Felaktig specifikation för vektor med förmodad storlek vid %C" #: fortran/array.c:545 fortran/array.c:651 #, gcc-internal-format, gfc-internal-format msgid "Expected another dimension in array declaration at %C" -msgstr "Förväntade en annan dimension i vektordeklaration vid %C" +msgstr "Förväntade en annan dimension i vektordeklaration vid %C" #: fortran/array.c:551 fortran/array.c:582 fortran/array.c:657 #, gcc-internal-format, gfc-internal-format msgid "Array specification at %C has more than %d dimensions" -msgstr "Vektorspecifikation vid %C har mer än %d dimensioner" +msgstr "Vektorspecifikation vid %C har mer än %d dimensioner" #: fortran/array.c:557 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Array specification at %C with more than 7 dimensions" -msgstr "Fortran 2008: Vektorspecifikation vid %C har mer än 7 dimensioner" +msgstr "Fortran 2008: Vektorspecifikation vid %C har mer än 7 dimensioner" #: fortran/array.c:570 #, gcc-internal-format, gfc-internal-format @@ -34822,12 +34825,12 @@ msgstr "Fortran 2008: Co-vektordeklaration vid %C" #: fortran/array.c:665 #, gcc-internal-format, gfc-internal-format msgid "Upper bound of last coarray dimension must be '*' at %C" -msgstr "Övre gränsen av sista co-vektordimensionen måste vara \"*\" vid %C" +msgstr "Övre gränsen av sista co-vektordimensionen mÃ¥ste vara â€*†vid %C" #: fortran/array.c:885 #, gcc-internal-format, gfc-internal-format msgid "DO-iterator '%s' at %L is inside iterator of the same name" -msgstr "DO-iterator \"%s\" vid %L är inuti en iterator med samma namn" +msgstr "DO-iterator â€%s†vid %L är inuti en iterator med samma namn" #: fortran/array.c:977 fortran/array.c:1109 #, gcc-internal-format, gfc-internal-format @@ -34847,17 +34850,17 @@ msgstr "Fortran 2003: Vektorkonstruerare med typspecifikation vid %C" #: fortran/array.c:1055 fortran/match.c:3466 #, gcc-internal-format, gfc-internal-format msgid "Type-spec at %L cannot contain a deferred type parameter" -msgstr "Typspecifikation vid %L kan inte innehålla ha en fördröjd typparameter" +msgstr "Typspecifikation vid %L kan inte innehÃ¥lla ha en fördröjd typparameter" #: fortran/array.c:1071 #, gcc-internal-format, gfc-internal-format msgid "Empty array constructor at %C is not allowed" -msgstr "Tom vektorkonstruerare vid %C är inte tillåtet" +msgstr "Tom vektorkonstruerare vid %C är inte tillÃ¥tet" #: fortran/array.c:1156 #, gcc-internal-format, gfc-internal-format msgid "Element in %s array constructor at %L is %s" -msgstr "Element i %s-vektorkonstruerare vid %L är %s" +msgstr "Element i %s-vektorkonstruerare vid %L är %s" #: fortran/array.c:1484 #, gcc-internal-format, gfc-internal-format @@ -34869,193 +34872,193 @@ msgstr "Iteratorsteg vid %L kan inte vara noll" #: fortran/array.c:1621 fortran/expr.c:1538 fortran/trans-array.c:5260 #, gcc-internal-format, gfc-internal-format msgid "The number of elements in the array constructor at %L requires an increase of the allowed %d upper limit. See -fmax-array-constructor option" -msgstr "Antalet element i vektorkonstrueraren vid %L kräver en ökning av den tillåtna övre gränsen %d. Se flaggan -fmax-array-constructor" +msgstr "Antalet element i vektorkonstrueraren vid %L kräver en ökning av den tillÃ¥tna övre gränsen %d. Se flaggan -fmax-array-constructor" #: fortran/array.c:1818 #, gcc-internal-format, gfc-internal-format msgid "Different CHARACTER lengths (%d/%d) in array constructor at %L" -msgstr "Olika CHARACTER-längder (%d/%d) i vektorkonstruerare vid %L" +msgstr "Olika CHARACTER-längder (%d/%d) i vektorkonstruerare vid %L" #: fortran/check.c:46 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be a scalar" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en skalär" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara en skalär" #: fortran/check.c:62 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be %s" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara %s" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara %s" #: fortran/check.c:90 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be a numeric type" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en numerisk typ" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara en numerisk typ" #: fortran/check.c:105 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara INTEGER eller REAL" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara INTEGER eller REAL" #: fortran/check.c:122 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be REAL or COMPLEX" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara REAL eller COMPLEX" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara REAL eller COMPLEX" #: fortran/check.c:139 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara INTEGER eller PROCEDURE" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara INTEGER eller PROCEDURE" #: fortran/check.c:168 fortran/check.c:5193 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be a constant" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en konstant" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara en konstant" #: fortran/check.c:177 #, gcc-internal-format, gfc-internal-format msgid "Invalid kind for %s at %L" -msgstr "Ogiltig sort på %s vid %L" +msgstr "Ogiltig sort pÃ¥ %s vid %L" #: fortran/check.c:196 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be double precision" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste ha dubbel precision" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste ha dubbel precision" #: fortran/check.c:219 #, gcc-internal-format, gfc-internal-format msgid "Expected coarray variable as '%s' argument to the %s intrinsic at %L" -msgstr "Co-vektorindex förväntades som \"%s\"-argument till inbyggd %s vid %L" +msgstr "Co-vektorindex förväntades som â€%sâ€-argument till inbyggd %s vid %L" #: fortran/check.c:236 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be a logical array" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en logisk vektor" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara en logisk vektor" #: fortran/check.c:262 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be an array" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en vektor" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara en vektor" #: fortran/check.c:283 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L must be nonnegative" -msgstr "\"%s\" vid %L måste vara ickenegativt" +msgstr "â€%s†vid %L mÃ¥ste vara ickenegativt" #: fortran/check.c:314 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "The absolute value of SHIFT at %L must be less than or equal to BIT_SIZE('%s')" -msgstr "\"%s + %s\" vid %L får inte vara mindre än eller lika med BIT_SIZE(\"%s\")" +msgstr "Absolutvärdet av SHIFT vid %L mÃ¥ste vara vara mindre än eller lika med BIT_SIZE(â€%sâ€)" #: fortran/check.c:325 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L must be less than or equal to BIT_SIZE('%s')" -msgstr "\"%s\" vid %L får inte vara mindre än eller lika med BIT_SIZE(\"%s\")" +msgstr "â€%s†vid %L fÃ¥r inte vara mindre än eller lika med BIT_SIZE(â€%sâ€)" #: fortran/check.c:335 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L must be less than BIT_SIZE('%s')" -msgstr "%s vid %L måste vara mindre än BIT_SIZE(\"%s\")" +msgstr "%s vid %L mÃ¥ste vara mindre än BIT_SIZE(â€%sâ€)" #: fortran/check.c:362 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L must be less than or equal to the BIT_SIZE of INTEGER(KIND=%d)" -msgstr "%s vid %L måste vara mindre än eller lika med BIT_SIZE av INTEGER(KIND=%d)" +msgstr "%s vid %L mÃ¥ste vara mindre än eller lika med BIT_SIZE av INTEGER(KIND=%d)" #: fortran/check.c:388 #, gcc-internal-format, gfc-internal-format msgid "'%s + %s' at %L must be less than or equal to BIT_SIZE('%s')" -msgstr "\"%s + %s\" vid %L får inte vara mindre än eller lika med BIT_SIZE(\"%s\")" +msgstr "â€%s + %s†vid %L fÃ¥r inte vara mindre än eller lika med BIT_SIZE(â€%sâ€)" #: fortran/check.c:406 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be the same type and kind as '%s'" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste ha samma typ och sort som \"%s\"" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste ha samma typ och sort som â€%sâ€" #: fortran/check.c:423 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be of rank %d" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste ha ordning %d" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste ha ordning %d" #: fortran/check.c:438 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must not be OPTIONAL" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L får inte vara OPTIONAL" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L fÃ¥r inte vara OPTIONAL" #: fortran/check.c:459 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara ALLOCATABLE" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara ALLOCATABLE" #: fortran/check.c:477 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be of kind %d" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste ha sorten %d" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste ha sorten %d" #: fortran/check.c:515 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L kan inte vara INTENT(IN)" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L kan inte vara INTENT(IN)" #: fortran/check.c:536 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be a variable" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en variabel" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara en variabel" #: fortran/check.c:585 #, gcc-internal-format, gfc-internal-format msgid "'dim' argument of '%s' intrinsic at %L is not a valid codimension index" -msgstr "\"dim\"-argumentet till inbyggd \"%s\" vid %L är inte ett giltigt co-dimensionsindex" +msgstr "â€dimâ€-argumentet till inbyggd â€%s†vid %L är inte ett giltigt co-dimensionsindex" #: fortran/check.c:634 #, gcc-internal-format, gfc-internal-format msgid "'dim' argument of '%s' intrinsic at %L is not a valid dimension index" -msgstr "\"dim\"-argumentet till inbyggd \"%s\" vid %L är inte ett giltigt dimensionsindex" +msgstr "â€dimâ€-argumentet till inbyggd â€%s†vid %L är inte ett giltigt dimensionsindex" #: fortran/check.c:732 #, gcc-internal-format, gfc-internal-format msgid "Unequal character lengths (%ld/%ld) in %s at %L" -msgstr "Olika teckenlängder (%ld/%ld) i %s vid %L" +msgstr "Olika teckenlängder (%ld/%ld) i %s vid %L" #: fortran/check.c:854 fortran/check.c:5162 #, gcc-internal-format, gfc-internal-format msgid "'%s' and '%s' arguments of '%s' intrinsic at %L must have the same type" -msgstr "\"%s\"- och \"%s\"-argumenten till inbyggd \"%s\" vid %L måste ha samma typ" +msgstr "â€%sâ€- och â€%sâ€-argumenten till inbyggd â€%s†vid %L mÃ¥ste ha samma typ" #: fortran/check.c:863 fortran/check.c:1793 fortran/check.c:1919 #: fortran/check.c:1993 fortran/check.c:2345 #, gcc-internal-format, gfc-internal-format msgid "Extension: Different type kinds at %L" -msgstr "Utökning: Olika typsorter vid %L" +msgstr "Utökning: Olika typsorter vid %L" #: fortran/check.c:901 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara POINTER" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara POINTER" #: fortran/check.c:910 fortran/check.c:946 fortran/check.c:2853 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L shall not be conindexed" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste ha sorten %d" +msgstr "argumentet â€%s†till inbyggd â€%s†vid %L skall inte vara co-indexerat" #: fortran/check.c:928 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be a pointer or target VARIABLE or FUNCTION" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en pekare eller mål-VARIABLE eller -FUNCTION" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara en pekare eller mÃ¥l-VARIABLE eller -FUNCTION" #: fortran/check.c:937 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER or a TARGET" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en POINTER eller en TARGET" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara en POINTER eller en TARGET" #: fortran/check.c:962 #, gcc-internal-format, gfc-internal-format msgid "Array section with a vector subscript at %L shall not be the target of a pointer" -msgstr "Vektorsektion med ett vektorindex vid %L skall inte vara målet för en pekare" +msgstr "Vektorsektion med ett vektorindex vid %L skall inte vara mÃ¥let för en pekare" #: fortran/check.c:973 #, gcc-internal-format, gfc-internal-format msgid "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic function" -msgstr "NULL-pekare vid %L är inte tillåtet som aktuellt argument till inbyggd funktion \"%s\"" +msgstr "NULL-pekare vid %L är inte tillÃ¥tet som aktuellt argument till inbyggd funktion â€%sâ€" #: fortran/check.c:1012 #, gcc-internal-format, gfc-internal-format @@ -35063,39 +35066,39 @@ msgid "ATOM argument at %L to intrinsic function %s shall be an integer of ATOMI msgstr "" #: fortran/check.c:1020 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "ATOM argument at %L of the %s intrinsic function shall be a coarray or coindexed" -msgstr "Aktuellt argument till \"%s\" vid %L måste vara en co-vektor och inte ett co-index" +msgstr "ATOM-argumentet till vid %L till den inbyggda funktionen %s mÃ¥ste vara en co-vektor eller co-indexat" #: fortran/check.c:1027 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "ATOM and VALUE argument of the %s intrinsic function shall have the same type at %L" -msgstr "\"%s\"- och \"%s\"-argumenten till inbyggd \"%s\" vid %L måste ha samma typ" +msgstr "ATOM- och VALUE-argumenten till den inbyggda funktionen %s mÃ¥ste ha samma typ vid %L" #: fortran/check.c:1045 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "ATOM argument of the %s intrinsic function at %L shall be definable" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara standard reell" +msgstr "ATOM-argumentet till den inbyggda funktionen %s vid %L mÃ¥ste vara definierbart" #: fortran/check.c:1062 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "VALUE argument of the %s intrinsic function at %L shall be definable" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara standard reell" +msgstr "VALUE-argumentet till den inbyggda funktionen %s vid %L mÃ¥ste vara definierbart" #: fortran/check.c:1082 #, gcc-internal-format, gfc-internal-format msgid "Extension: Negative argument N at %L" -msgstr "Utökning: Negativt argument N vid %L" +msgstr "Utökning: Negativt argument N vid %L" #: fortran/check.c:1254 fortran/check.c:1413 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must not be present if 'x' is COMPLEX" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste får inte finnas om \"x\" är COMPLEX" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste fÃ¥r inte finnas om â€x†är COMPLEX" #: fortran/check.c:1263 fortran/check.c:1422 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must have a type of either REAL or INTEGER" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste ha typen REAL eller INTEGER" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste ha typen REAL eller INTEGER" #: fortran/check.c:1307 fortran/check.c:1838 fortran/check.c:1941 #: fortran/check.c:2135 fortran/check.c:2180 fortran/check.c:3382 @@ -35103,32 +35106,32 @@ msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste ha typen REAL eller I #: fortran/check.c:4235 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: '%s' intrinsic with KIND argument at %L" -msgstr "Fortran 2003: inbyggd \"%s\" vid KIND-argument vid %L" +msgstr "Fortran 2003: inbyggd â€%s†vid KIND-argument vid %L" #: fortran/check.c:1354 fortran/check.c:1604 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L has invalid shape in dimension %d (%ld/%ld)" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L har ogiltig form i dimensions %d (%ld/%ld)" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L har ogiltig form i dimensions %d (%ld/%ld)" #: fortran/check.c:1369 fortran/check.c:1619 fortran/check.c:1647 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of intrinsic '%s' at %L of must have rank %d or be a scalar" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste ha ordning %d eller vara en skalär" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste ha ordning %d eller vara en skalär" #: fortran/check.c:1472 fortran/check.c:2439 fortran/check.c:2447 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be numeric or LOGICAL" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara numeriskt eller LOGICAL" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara numeriskt eller LOGICAL" #: fortran/check.c:1486 #, gcc-internal-format, gfc-internal-format msgid "Different shape for arguments '%s' and '%s' at %L for intrinsic 'dot_product'" -msgstr "Olika former för argument \"%s\" och \"%s\" vid %L för inbyggd \"dot_product\"" +msgstr "Olika former för argument â€%s†och â€%s†vid %L för inbyggd â€dot_productâ€" #: fortran/check.c:1505 fortran/check.c:1513 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be default real" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara standard reell" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara standard reell" #: fortran/check.c:1534 #, gcc-internal-format, gfc-internal-format @@ -35138,82 +35141,82 @@ msgstr "" #: fortran/check.c:1665 #, gcc-internal-format, gfc-internal-format msgid "GNU extension: non-default INTEGER kind argument to %s intrinsic at %L" -msgstr "GNU-utvidgning: INTEGER-sorts argument som inte är standardargument till inbyggd %s vid %L" +msgstr "GNU-utvidgning: INTEGER-sorts argument som inte är standardargument till inbyggd %s vid %L" #: fortran/check.c:1725 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: COMPLEX argument '%s' argument of '%s' intrinsic at %L" -msgstr "Fortran 2008: COMPLEX-argumentet \"%s\" till inbyggd \"%s\" vid %L" +msgstr "Fortran 2008: COMPLEX-argumentet â€%s†till inbyggd â€%s†vid %L" #: fortran/check.c:1889 #, gcc-internal-format, gfc-internal-format msgid "Argument of %s at %L must be of length one" -msgstr "Argument till \"%s\" vid %L måste ha längden ett" +msgstr "Argument till â€%s†vid %L mÃ¥ste ha längden ett" #: fortran/check.c:1948 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be the same kind as '%s'" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste ha samma sort som \"%s\"" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste ha samma sort som â€%sâ€" #: fortran/check.c:2038 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "SIZE at %L must be positive" -msgstr "\"%s\" vid %L måste vara ickenegativt" +msgstr "SIZE vid %L mÃ¥ste vara positivt" #: fortran/check.c:2050 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "The absolute value of SHIFT at %L must be less than or equal to SIZE at %L" -msgstr "\"%s + %s\" vid %L får inte vara mindre än eller lika med BIT_SIZE(\"%s\")" +msgstr "Absolutvärdet av SHIFT vid %L mÃ¥ste vara mindre än eller lika med SIZE vid %L" #: fortran/check.c:2111 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be a non-derived type" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en icke härledd typ" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara en icke härledd typ" #: fortran/check.c:2318 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic '%s' at %L must have at least two arguments" -msgstr "Inbyggd \"%s\" vid %L måste ha åtminstone två argument" +msgstr "Inbyggd â€%s†vid %L mÃ¥ste ha Ã¥tminstone tvÃ¥ argument" #: fortran/check.c:2351 #, gcc-internal-format, gfc-internal-format msgid "'a%d' argument of '%s' intrinsic at %L must be %s(%d)" -msgstr "\"a%d\"-argumentet till inbyggd \"%s\" vid %L måste vara %s(%d)" +msgstr "â€a%dâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara %s(%d)" #: fortran/check.c:2382 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: '%s' intrinsic with CHARACTER argument at %L" -msgstr "Fortran 2003: inbyggd \"%s\" med CHARACTER-argument vid %L" +msgstr "Fortran 2003: inbyggd â€%s†med CHARACTER-argument vid %L" #: fortran/check.c:2389 #, gcc-internal-format, gfc-internal-format msgid "'a1' argument of '%s' intrinsic at %L must be INTEGER, REAL or CHARACTER" -msgstr "\"a1\"-argumentet till inbyggd \"%s\" vid %L måste vara INTEGER, REAL eller CHARACTER" +msgstr "â€a1â€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara INTEGER, REAL eller CHARACTER" #: fortran/check.c:2456 #, gcc-internal-format, gfc-internal-format msgid "Argument types of '%s' intrinsic at %L must match (%s/%s)" -msgstr "Argumenttyper till inbyggd \"%s\" vid %L måste stämma överens (%s/%s)" +msgstr "Argumenttyper till inbyggd â€%s†vid %L mÃ¥ste stämma överens (%s/%s)" #: fortran/check.c:2470 #, gcc-internal-format, gfc-internal-format msgid "Different shape on dimension 1 for arguments '%s' and '%s' at %L for intrinsic matmul" -msgstr "Olika form på dimension 1 för argumenten \"%s\" och \"%s\" vid %L för inbyggd matmul" +msgstr "Olika form pÃ¥ dimension 1 för argumenten â€%s†och â€%s†vid %L för inbyggd matmul" #: fortran/check.c:2489 #, gcc-internal-format, gfc-internal-format msgid "Different shape on dimension 2 for argument '%s' and dimension 1 for argument '%s' at %L for intrinsic matmul" -msgstr "Olika form på dimension 2 för argument \"%s\" och dimension 1 för argument \"%s\" vid %L för inbyggd matmul" +msgstr "Olika form pÃ¥ dimension 2 för argument â€%s†och dimension 1 för argument â€%s†vid %L för inbyggd matmul" #: fortran/check.c:2498 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be of rank 1 or 2" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste ha ordning 1 eller 2" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste ha ordning 1 eller 2" #: fortran/check.c:2673 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara INTEGER" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara INTEGER" #: fortran/check.c:2739 #, gcc-internal-format, gfc-internal-format @@ -35223,127 +35226,127 @@ msgstr "" #: fortran/check.c:2750 #, gcc-internal-format, gfc-internal-format msgid "the '%s' and '%s' arguments of '%s' intrinsic at %L must have the same rank %d/%d" -msgstr "\"%s\"- och \"%s\"-argumenten till inbyggd \"%s\" vid %L måste ha samma ordning %d/%d" +msgstr "â€%sâ€- och â€%sâ€-argumenten till inbyggd â€%s†vid %L mÃ¥ste ha samma ordning %d/%d" #: fortran/check.c:2759 #, gcc-internal-format, gfc-internal-format msgid "the '%s' and '%s' arguments of '%s' intrinsic at %L must be of the same kind %d/%d" -msgstr "\"%s\"- och \"%s\"-argumenten till inbyggd \"%s\" vid %L måste ha samma sort %d/%d" +msgstr "â€%sâ€- och â€%sâ€-argumenten till inbyggd â€%s†vid %L mÃ¥ste ha samma sort %d/%d" #: fortran/check.c:2788 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument 'S' of NEAREST at %L shall not be zero" -msgstr "Andra argumentet till NEAREST vid %L får inte vara noll" +msgstr "Argument â€S†till NEAREST vid %L fÃ¥r inte vara noll" #: fortran/check.c:2838 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER, ALLOCATABLE or procedure pointer" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara ALLOCATABLE" +msgstr "Argument â€%s†till inbyggd â€%s†vid %L mÃ¥ste vara en POINTER, ALLOCATABLE eller procedurpekare" #: fortran/check.c:2846 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: NULL intrinsic with allocatable MOLD at %L" -msgstr "Fortran 2003: inbyggd \"%s\" vid KIND-argument vid %L" +msgstr "Fortran 2003: inbyggd NULL med KIND-argument vid %L" #: fortran/check.c:2925 fortran/check.c:4182 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must provide at least as many elements as there are .TRUE. values in '%s' (%ld/%d)" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste ge åtminstone lika många element som det finns .TRUE.-värden i \"%s\" (%ld/%d)" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste ge Ã¥tminstone lika mÃ¥nga element som det finns .TRUE.-värden i â€%s†(%ld/%d)" #: fortran/check.c:2983 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be of a dummy variable" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en attrappvariabel" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara en attrappvariabel" #: fortran/check.c:2991 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be of an OPTIONAL dummy variable" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en OPTIONAL attrappvariabel" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara en OPTIONAL attrappvariabel" #: fortran/check.c:3010 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must not be a subobject of '%s'" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L får inte vara ett underobjekt till \"%s\"" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L fÃ¥r inte vara ett underobjekt till â€%sâ€" #: fortran/check.c:3058 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "The argument of the RANK intrinsic at %L must be a data object" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en variabel" +msgstr "Argumentet till inbyggd RANK vid %L mÃ¥ste vara ett dataobjekt" #: fortran/check.c:3162 #, gcc-internal-format, gfc-internal-format msgid "'shape' argument of 'reshape' intrinsic at %L must be an array of constant size" -msgstr "\"shape\"-argumentet till inbyggd \"reshape\" vid %L måste vara en vektor av konstant storlek" +msgstr "â€shapeâ€-argumentet till inbyggd â€reshape†vid %L mÃ¥ste vara en vektor av konstant storlek" #: fortran/check.c:3172 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L is empty" -msgstr "\"%s\"-argumentetet till inbyggd \"%s\" vid %L är tomt" +msgstr "â€%sâ€-argumentetet till inbyggd â€%s†vid %L är tomt" #: fortran/check.c:3179 #, gcc-internal-format, gfc-internal-format msgid "'shape' argument of 'reshape' intrinsic at %L has more than %d elements" -msgstr "\"shape\"-argumentet till inbyggd \"reshape\" vid %L har mer än %d element" +msgstr "â€shapeâ€-argumentet till inbyggd â€reshape†vid %L har mer än %d element" #: fortran/check.c:3196 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L has negative element (%d)" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L har negativa element (%d)" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L har negativa element (%d)" #: fortran/check.c:3236 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L has wrong number of elements (%d/%d)" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L har fel antal element (%d/%d)" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L har fel antal element (%d/%d)" #: fortran/check.c:3254 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L has out-of-range dimension (%d)" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L har dimension utanför giltigt intervall (%d)" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L har dimension utanför giltigt intervall (%d)" #: fortran/check.c:3263 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L has invalid permutation of dimensions (dimension '%d' duplicated)" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L har en ogiltig permunation av dimensioner (dimension \"%d\" dubblerad)" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L har en ogiltig permunation av dimensioner (dimension â€%d†dubblerad)" #: fortran/check.c:3299 #, gcc-internal-format, gfc-internal-format msgid "Without padding, there are not enough elements in the intrinsic RESHAPE source at %L to match the shape" -msgstr "Utan utfyllnad finns det inte tillräckligt med element i inbyggda RESHAPE-källan vid %L för att stämma med formen" +msgstr "Utan utfyllnad finns det inte tillräckligt med element i inbyggda RESHAPE-källan vid %L för att stämma med formen" #: fortran/check.c:3317 fortran/check.c:3335 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be of a derived type" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en härledd typ" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara en härledd typ" #: fortran/check.c:3326 fortran/check.c:3344 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be of an extensible type" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en utvidgningsvbar typ" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara en utvidgningsvbar typ" #: fortran/check.c:3443 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: SELECTED_REAL_KIND with neither 'P' nor 'R' argument at %L" -msgstr "Fortran 2008: SELECTED_REAL_KIND med varken \"P\"- eller \"R\"-argument vid %L" +msgstr "Fortran 2008: SELECTED_REAL_KIND med varken â€Pâ€- eller â€Râ€-argument vid %L" #: fortran/check.c:3474 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: '%s' intrinsic with RADIX argument at %L" -msgstr "Fortran 2008: inbyggd \"%s\" med RADIX-argument vid %L" +msgstr "Fortran 2008: inbyggd â€%s†med RADIX-argument vid %L" #: fortran/check.c:3509 #, gcc-internal-format, gfc-internal-format msgid "'source' argument of 'shape' intrinsic at %L must not be an assumed size array" -msgstr "\"source\"-argumentet till inbyggd \"shape\" vid %L får inte vara en vektor med förmodad storlek" +msgstr "â€sourceâ€-argumentet till inbyggd â€shape†vid %L fÃ¥r inte vara en vektor med förmodad storlek" #: fortran/check.c:3586 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L may not be a procedure" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en skalär" +msgstr "Argument â€%s†till inbyggd â€%s†vid %L fÃ¥r inte vara en procedur" #: fortran/check.c:3600 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be an interoperable data entity" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara en interoperabel dataenhet" +msgstr "Argumentet â€%s†till inbyggd â€%s†vid %L mÃ¥ste vara en interoperabel dataenhet" #: fortran/check.c:3629 #, gcc-internal-format, gfc-internal-format @@ -35353,12 +35356,12 @@ msgstr "GNU-utvidgning: REAL-argument utan dubbel precision till inbyggd %s vid #: fortran/check.c:3642 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be less than rank %d" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara av lägre ordning än %d" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara av lägre ordning än %d" #: fortran/check.c:3661 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L is not a valid dimension index" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L är inte ett giltigt dimensionsindex" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L är inte ett giltigt dimensionsindex" #: fortran/check.c:3924 #, gcc-internal-format, gfc-internal-format @@ -35373,47 +35376,47 @@ msgstr "" #: fortran/check.c:3959 #, gcc-internal-format, gfc-internal-format msgid "DIM argument without ARRAY argument not allowed for THIS_IMAGE intrinsic at %L" -msgstr "DIM-argument utan ARRAY-argument är inte tillåtet för inbyggd THIS_IMAGE vid %L" +msgstr "DIM-argument utan ARRAY-argument är inte tillÃ¥tet för inbyggd THIS_IMAGE vid %L" #: fortran/check.c:4046 #, gcc-internal-format, gfc-internal-format msgid "'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s" -msgstr "MOLD-argumentet till inbyggd \"TRANSFER\" vid %L måste vara %s" +msgstr "MOLD-argumentet till inbyggd â€TRANSFER†vid %L mÃ¥ste vara %s" #: fortran/check.c:4074 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic TRANSFER at %L has partly undefined result: source size %ld < result size %ld" -msgstr "Inbyggd TRANSFER vid %L har delvis odefinierat resultat: källstorlek %ld < resultatstorlek %ld" +msgstr "Inbyggd TRANSFER vid %L har delvis odefinierat resultat: källstorlek %ld < resultatstorlek %ld" #: fortran/check.c:4196 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must have the same rank as '%s' or be a scalar" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste ha samma ordning som \"%s\" eller vara en skalär" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste ha samma ordning som â€%s†eller vara en skalär" #: fortran/check.c:4209 #, gcc-internal-format, gfc-internal-format msgid "'%s' and '%s' arguments of '%s' intrinsic at %L must have identical shape." -msgstr "\"%s\"- och \"%s\"-argumenten till inbyggd \"%s\" vid %L måste ha identiska former" +msgstr "â€%sâ€- och â€%sâ€-argumenten till inbyggd â€%s†vid %L mÃ¥ste ha identiska former" #: fortran/check.c:4468 fortran/check.c:4500 #, gcc-internal-format, gfc-internal-format msgid "Size of '%s' argument of '%s' intrinsic at %L too small (%i/%i)" -msgstr "Stolek på \"%s\"-argumentet till inbyggd \"%s\" vid %L är för liten (%i/%i)" +msgstr "Stolek pÃ¥ â€%sâ€-argumentet till inbyggd â€%s†vid %L är för liten (%i/%i)" #: fortran/check.c:4508 #, gcc-internal-format, gfc-internal-format msgid "Too many arguments to %s at %L" -msgstr "För många argument till %s vid %L" +msgstr "För mÃ¥nga argument till %s vid %L" #: fortran/check.c:4794 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be of a kind not wider than the default kind (%d)" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste ha en sort som inte är bredare än standardsorten (%d)" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste ha en sort som inte är bredare än standardsorten (%d)" #: fortran/check.c:5146 fortran/check.c:5154 #, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL" -msgstr "\"%s\"-argumentet till inbyggd \"%s\" vid %L måste vara INTEGER eller LOGICAL" +msgstr "â€%sâ€-argumentet till inbyggd â€%s†vid %L mÃ¥ste vara INTEGER eller LOGICAL" #: fortran/class.c:345 #, gcc-internal-format, gfc-internal-format @@ -35425,22 +35428,22 @@ msgstr "" #: fortran/class.c:431 fortran/decl.c:7562 #, gcc-internal-format, gfc-internal-format msgid "Maximum extension level reached with type '%s' at %L" -msgstr "Maximal utökningsnivå nådd med typen \"%s\" vid %L" +msgstr "Maximal utökningsnivÃ¥ nÃ¥dd med typen â€%s†vid %L" #: fortran/class.c:822 fortran/class.c:896 #, gcc-internal-format, gfc-internal-format msgid "'%s' of '%s' is PRIVATE at %L" -msgstr "\"%s\" av \"%s\" är PRIVATE vid %L" +msgstr "â€%s†av â€%s†är PRIVATE vid %L" #: fortran/cpp.c:443 #, gcc-internal-format msgid "To enable preprocessing, use -cpp" -msgstr "För att aktivera preprocessning, använd -cpp" +msgstr "För att aktivera preprocessning, använd -cpp" #: fortran/cpp.c:540 fortran/cpp.c:551 fortran/cpp.c:657 #, gcc-internal-format, gfc-internal-format msgid "opening output file %s: %s" -msgstr "vid öppnandet av utdatafil %s: %s" +msgstr "vid öppnandet av utdatafil %s: %s" #: fortran/data.c:65 #, gcc-internal-format, gfc-internal-format @@ -35450,62 +35453,62 @@ msgstr "ickekonstant vektor i DATA-sats %L" #: fortran/data.c:134 #, gcc-internal-format, gfc-internal-format msgid "failure to simplify substring reference in DATA statement at %L" -msgstr "misslyckades att förenkla delsträngreferens i DATA-sats vid %L" +msgstr "misslyckades att förenkla delsträngreferens i DATA-sats vid %L" #: fortran/data.c:158 #, gcc-internal-format, gfc-internal-format msgid "Initialization string starting at %L was truncated to fit the variable (%d/%d)" -msgstr "Initieringssträng som startar vid %L höggs av för att stämma med variabeln (%d/%d)" +msgstr "Initieringssträng som startar vid %L höggs av för att stämma med variabeln (%d/%d)" #: fortran/data.c:247 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L already is initialized at %L" -msgstr "\"%s\" vid %L är redan initierad vid %L" +msgstr "â€%s†vid %L är redan initierad vid %L" #: fortran/data.c:271 #, gcc-internal-format, gfc-internal-format msgid "Data element below array lower bound at %L" -msgstr "Dataelement under undre vektorgräns vid %L" +msgstr "Dataelement under undre vektorgräns vid %L" #: fortran/data.c:288 fortran/data.c:377 #, gcc-internal-format, gfc-internal-format msgid "Data element above array upper bound at %L" -msgstr "Dataelement ovanför övre vektorgräns vid %L" +msgstr "Dataelement ovanför övre vektorgräns vid %L" #: fortran/data.c:317 fortran/data.c:483 #, gcc-internal-format, gfc-internal-format msgid "Extension: re-initialization of '%s' at %L" -msgstr "Utökning: ominitiering av \"%s\" vid %L" +msgstr "Utökning: ominitiering av â€%s†vid %L" #: fortran/decl.c:260 #, gcc-internal-format, gfc-internal-format msgid "Host associated variable '%s' may not be in the DATA statement at %C" -msgstr "Värdassocierad variabel \"%s\" får inte finnas i DATA-sats vid %C" +msgstr "Värdassocierad variabel â€%s†fÃ¥r inte finnas i DATA-sats vid %C" #: fortran/decl.c:267 #, gcc-internal-format, gfc-internal-format msgid "Extension: initialization of common block variable '%s' in DATA statement at %C" -msgstr "Utökning: initiering av common-blockvariabel \"%s\" i DATA-sats vid %C" +msgstr "Utökning: initiering av common-blockvariabel â€%s†i DATA-sats vid %C" #: fortran/decl.c:376 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' must be a PARAMETER in DATA statement at %C" -msgstr "Symbolen \"%s\" måste vara en PARAMETER i DATA-sats vid %C" +msgstr "Symbolen â€%s†mÃ¥ste vara en PARAMETER i DATA-sats vid %C" #: fortran/decl.c:401 #, gcc-internal-format, gfc-internal-format msgid "Invalid initializer %s in Data statement at %C" -msgstr "Ogiltig initierare %s på DATA-sats vid %C" +msgstr "Ogiltig initierare %s pÃ¥ DATA-sats vid %C" #: fortran/decl.c:504 #, gcc-internal-format, gfc-internal-format msgid "Initialization at %C is not allowed in a PURE procedure" -msgstr "Initieringen vid %C får inte förekomma i en PURE-procedur" +msgstr "Initieringen vid %C fÃ¥r inte förekomma i en PURE-procedur" #: fortran/decl.c:566 #, gcc-internal-format, gfc-internal-format msgid "DATA statement at %C is not allowed in a PURE procedure" -msgstr "DATA-sats vid %C får inte förekomma i en PURE-procedur" +msgstr "DATA-sats vid %C fÃ¥r inte förekomma i en PURE-procedur" #: fortran/decl.c:654 #, gcc-internal-format, gfc-internal-format @@ -35515,97 +35518,97 @@ msgstr "Felaktig INTENT-specifikation vid %C" #: fortran/decl.c:675 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: deferred type parameter at %C" -msgstr "Fortran 2003: fördröjd typparameter vid %C" +msgstr "Fortran 2003: fördröjd typparameter vid %C" #: fortran/decl.c:712 #, gcc-internal-format, gfc-internal-format msgid "Conflict in attributes of function argument at %C" -msgstr "Konflikt i attribut för funktionsargument vid %C" +msgstr "Konflikt i attribut för funktionsargument vid %C" #: fortran/decl.c:737 #, gcc-internal-format, gfc-internal-format msgid "Obsolescent feature: Old-style character length at %C" -msgstr "Förlegad funktion: Gammaldags teckenlängd vid %C" +msgstr "Förlegad funktion: Gammaldags teckenlängd vid %C" #: fortran/decl.c:769 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in character length specification at %C" -msgstr "Syntaxfel i specifikation av teckenlängd vid %C" +msgstr "Syntaxfel i specifikation av teckenlängd vid %C" #: fortran/decl.c:892 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %C is already defined at %L" -msgstr "Proceduren \"%s\" vid %C är redan definierad vid %L" +msgstr "Proceduren â€%s†vid %C är redan definierad vid %L" #: fortran/decl.c:900 #, gcc-internal-format, gfc-internal-format msgid "Name '%s' at %C is already defined as a generic interface at %L" -msgstr "Namnet \"%s\" vid %C är redan definierat som ett generiskt gränssnitt vid %L" +msgstr "Namnet â€%s†vid %C är redan definierat som ett generiskt gränssnitt vid %L" #: fortran/decl.c:913 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %C has an explicit interface and must not have attributes declared at %L" -msgstr "Proceduren \"%s\" vid %C har ett explicit gränssnitt och får inte ha attribut deklarerade vid %L" +msgstr "Proceduren â€%s†vid %C har ett explicit gränssnitt och fÃ¥r inte ha attribut deklarerade vid %L" #: fortran/decl.c:985 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %L must have the BIND(C) attribute to be C interoperable" -msgstr "Proceduren \"%s\" vid %L måste ha attributet BIND(C) för att vara C-interoperativ" +msgstr "Proceduren â€%s†vid %L mÃ¥ste ha attributet BIND(C) för att vara C-interoperativ" #: fortran/decl.c:1013 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L is a dummy argument to the BIND(C) procedure '%s' but is not C interoperable because derived type '%s' is not C interoperable" -msgstr "Typen \"%s\" vid %L är en parameter till BIND(C)-proceduren \"%s\" men är inte interoperativ med C för att den härledda typen \"%s\" inte är interoperativ med C" +msgstr "Typen â€%s†vid %L är ett atrappargument till BIND(C)-proceduren â€%s†men är inte interoperativ med C för att den härledda typen â€%s†inte är interoperativ med C" #: fortran/decl.c:1020 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L is a dummy argument to the BIND(C) procedure '%s' but is not C interoperable because it is polymorphic" -msgstr "Variabeln \"%s\" vid %L är en parameter till BIND(C)-proceduren \"%s\" men är kanske inte interoperativ med C" +msgstr "Variabeln â€%s†vid %L är ett atrappargument till BIND(C)-proceduren â€%s†men är inte interoperativ med C eftersom den är polymorf" #: fortran/decl.c:1026 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L is a parameter to the BIND(C) procedure '%s' but may not be C interoperable" -msgstr "Variabeln \"%s\" vid %L är en parameter till BIND(C)-proceduren \"%s\" men är kanske inte interoperativ med C" +msgstr "Variabeln â€%s†vid %L är en parameter till BIND(C)-proceduren â€%s†men är kanske inte interoperativ med C" #: fortran/decl.c:1041 #, gcc-internal-format, gfc-internal-format msgid "Character argument '%s' at %L must be length 1 because procedure '%s' is BIND(C)" -msgstr "Teckenargument \"%s\" vid %L måste ha längden 1 eftersom proceduren \"%s\" är BIND(C)" +msgstr "Teckenargument â€%s†vid %L mÃ¥ste ha längden 1 eftersom proceduren â€%s†är BIND(C)" #: fortran/decl.c:1055 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L cannot have the ALLOCATABLE attribute because procedure '%s' is BIND(C)" -msgstr "Variabeln \"%s\" vid %L kan inte ha attributet ALLOCATABLE eftersom proceduren \"%s\" är BIND(C)" +msgstr "Variabeln â€%s†vid %L kan inte ha attributet ALLOCATABLE eftersom proceduren â€%s†är BIND(C)" #: fortran/decl.c:1064 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L cannot have the POINTER attribute because procedure '%s' is BIND(C)" -msgstr "Variabeln \"%s\" vid %L kan inte ha attributet POINTER eftersom proceduren \"%s\" är BIND(C)" +msgstr "Variabeln â€%s†vid %L kan inte ha attributet POINTER eftersom proceduren â€%s†är BIND(C)" #: fortran/decl.c:1073 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L cannot have both the OPTIONAL and the VALUE attribute because procedure '%s' is BIND(C)" -msgstr "Variabeln \"%s\" vid %L kan inte ha attributet OPTIONAL eftersom proceduren \"%s\" är BIND(C)" +msgstr "Variabeln â€%s†vid %L kan inte bÃ¥de ha attributet OPTIONAL och VALUE eftersom proceduren â€%s†är BIND(C)" #: fortran/decl.c:1080 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "TS29113: Variable '%s' at %L with OPTIONAL attribute in procedure '%s' which is BIND(C)" -msgstr "Variabeln \"%s\" vid %L kan inte ha attributet OPTIONAL eftersom proceduren \"%s\" är BIND(C)" +msgstr "TS29113: Variabeln â€%s†vid %L med attributet OPTIONAL i proceduren â€%s†som är BIND(C)" #: fortran/decl.c:1094 #, gcc-internal-format, gfc-internal-format msgid "Assumed-shape array '%s' at %L cannot be an argument to the procedure '%s' at %L because the procedure is BIND(C)" -msgstr "Vektorn \"%s\" med förmodad form vid %L kan inte vara ett argument till proceduren \"%s\" vid %L eftersom proceduren är BIND(C)" +msgstr "Vektorn â€%s†med förmodad form vid %L kan inte vara ett argument till proceduren â€%s†vid %L eftersom proceduren är BIND(C)" #: fortran/decl.c:1104 #, gcc-internal-format, gfc-internal-format msgid "Deferred-shape array '%s' at %L cannot be an argument to the procedure '%s' at %L because the procedure is BIND(C)" -msgstr "Vektorn \"%s\" med fördröjd form vid %L kan inte vara ett argument till proceduren \"%s\" vid %L eftersom proceduren är BIND(C)" +msgstr "Vektorn â€%s†med fördröjd form vid %L kan inte vara ett argument till proceduren â€%s†vid %L eftersom proceduren är BIND(C)" #: fortran/decl.c:1185 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' in common block '%s' at %C must be declared with a C interoperable kind since common block '%s' is BIND(C)" -msgstr "Variabeln \"%s\" i common-blocket \"%s\" vid %C måste deklareras med en sort som är C-interoperativ eftersom common-blocket \"%s\" är BIND(C)" +msgstr "Variabeln â€%s†i common-blocket â€%s†vid %C mÃ¥ste deklareras med en sort som är C-interoperativ eftersom common-blocket â€%s†är BIND(C)" #: fortran/decl.c:1227 #, gcc-internal-format, gfc-internal-format @@ -35615,12 +35618,12 @@ msgstr "CHARACTER-uttryck vid %L huggs av (%d/%d)" #: fortran/decl.c:1234 #, gcc-internal-format, gfc-internal-format msgid "The CHARACTER elements of the array constructor at %L must have the same length (%d/%d)" -msgstr "CHARACTER-elementen i vektorkonstrueraren vid %L måste ha samma längd (%d/%d)" +msgstr "CHARACTER-elementen i vektorkonstrueraren vid %L mÃ¥ste ha samma längd (%d/%d)" #: fortran/decl.c:1324 #, gcc-internal-format, gfc-internal-format msgid "Initializer not allowed for PARAMETER '%s' at %C" -msgstr "Initierare är inte tillåten för PARAMETER \"%s\" vid %C" +msgstr "Initierare är inte tillÃ¥ten för PARAMETER â€%s†vid %C" #: fortran/decl.c:1334 #, gcc-internal-format, gfc-internal-format @@ -35630,52 +35633,52 @@ msgstr "PARAMETER vid %L saknar en initierare" #: fortran/decl.c:1344 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %C with an initializer already appears in a DATA statement" -msgstr "Variabeln \"%s\" vid %C med en initierare finns redan i en DATA-sats" +msgstr "Variabeln â€%s†vid %C med en initierare finns redan i en DATA-sats" #: fortran/decl.c:1425 #, gcc-internal-format, gfc-internal-format msgid "Can't initialize implied-shape array at %L with scalar" -msgstr "Det går inte att initiera en vektor med förmodad form vid %L med en skalär" +msgstr "Det gÃ¥r inte att initiera en vektor med förmodad form vid %L med en skalär" #: fortran/decl.c:1443 #, gcc-internal-format, gfc-internal-format msgid "Non-constant lower bound in implied-shape declaration at %L" -msgstr "Lägre gräns som inte är konstant i förmodat formad deklaration vid %L" +msgstr "Lägre gräns som inte är konstant i förmodat formad deklaration vid %L" #: fortran/decl.c:1538 #, gcc-internal-format, gfc-internal-format msgid "Component at %C must have the POINTER attribute" -msgstr "Komponent vid %C måste ha attributet POINTER" +msgstr "Komponent vid %C mÃ¥ste ha attributet POINTER" #: fortran/decl.c:1546 #, gcc-internal-format, gfc-internal-format msgid "Array component of structure at %C must have explicit or deferred shape" -msgstr "Vektorkomponent i post vid %C måste ha fördröjd form" +msgstr "Vektorkomponent i post vid %C mÃ¥ste ha fördröjd form" #: fortran/decl.c:1627 #, gcc-internal-format, gfc-internal-format msgid "Pointer array component of structure at %C must have a deferred shape" -msgstr "Pekarvektorkomponent i post vid %C måste ha fördröjd form" +msgstr "Pekarvektorkomponent i post vid %C mÃ¥ste ha fördröjd form" #: fortran/decl.c:1636 #, gcc-internal-format, gfc-internal-format msgid "Allocatable component of structure at %C must have a deferred shape" -msgstr "Allokerbar komponent i post vid %C måste ha fördröjd form" +msgstr "Allokerbar komponent i post vid %C mÃ¥ste ha fördröjd form" #: fortran/decl.c:1645 #, gcc-internal-format, gfc-internal-format msgid "Array component of structure at %C must have an explicit shape" -msgstr "Vektorkomponent i post vid %C måste ha uttrycklig form" +msgstr "Vektorkomponent i post vid %C mÃ¥ste ha uttrycklig form" #: fortran/decl.c:1679 #, gcc-internal-format, gfc-internal-format msgid "NULL() initialization at %C is ambiguous" -msgstr "NULL()-initiering vid %C är tvetydig" +msgstr "NULL()-initiering vid %C är tvetydig" #: fortran/decl.c:1706 #, gcc-internal-format, gfc-internal-format msgid "Initialization of pointer at %C is not allowed in a PURE procedure" -msgstr "Initiering av pekare vid %C är inte tillåtet i en PURE-procedur" +msgstr "Initiering av pekare vid %C är inte tillÃ¥tet i en PURE-procedur" #: fortran/decl.c:1726 #, gcc-internal-format, gfc-internal-format @@ -35685,67 +35688,67 @@ msgstr "Fel i pekarinitiering vid %C" #: fortran/decl.c:1733 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: non-NULL pointer initialization at %C" -msgstr "Fortran 2008: annan pekarinitiering än NULL vid %C" +msgstr "Fortran 2008: annan pekarinitiering än NULL vid %C" #: fortran/decl.c:1756 #, gcc-internal-format, gfc-internal-format msgid "Function name '%s' not allowed at %C" -msgstr "Funktionsnamnet \"%s\" är inte tillåtet vid %C" +msgstr "Funktionsnamnet â€%s†är inte tillÃ¥tet vid %C" #: fortran/decl.c:1819 #, gcc-internal-format, gfc-internal-format msgid "Non-PARAMETER symbol '%s' at %L can't be implied-shape" -msgstr "Icke-PARAMETER-symbolen \"%s\" vid %L kan inte förmodad form" +msgstr "Icke-PARAMETER-symbolen â€%s†vid %L kan inte förmodad form" #: fortran/decl.c:1830 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Implied-shape array at %L" -msgstr "Fortran 2008: Vektor med förmodad form vid %L" +msgstr "Fortran 2008: Vektor med förmodad form vid %L" #: fortran/decl.c:1894 fortran/decl.c:6419 #, gcc-internal-format, gfc-internal-format msgid "Duplicate array spec for Cray pointee at %C" -msgstr "Dubblerad vektorspecifikation för Cray-utpekad vid vid %C" +msgstr "Dubblerad vektorspecifikation för Cray-utpekad vid vid %C" #: fortran/decl.c:1965 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "The type of '%s' at %C has not been declared within the interface" -msgstr "typen på \"%s\" vid %C har inte deklarerats inuti gränssnittet" +msgstr "Typen pÃ¥ â€%s†vid %C har inte deklarerats inuti gränssnittet" #: fortran/decl.c:1989 #, gcc-internal-format, gfc-internal-format msgid "Extension: Old-style initialization at %C" -msgstr "Utökning: Gammaldags initiering vid %C" +msgstr "Utökning: Gammaldags initiering vid %C" #: fortran/decl.c:2004 fortran/decl.c:4911 #, gcc-internal-format, gfc-internal-format msgid "Initialization at %C isn't for a pointer variable" -msgstr "Initieringen vid %C är inte för en pekarvariabel" +msgstr "Initieringen vid %C är inte för en pekarvariabel" #: fortran/decl.c:2017 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization at %C requires '=>', not '='" -msgstr "Pekarinitiering vid %C kräver \"=>\", inte \"=\"" +msgstr "Pekarinitiering vid %C kräver â€=>â€, inte â€=â€" #: fortran/decl.c:2026 fortran/decl.c:7714 #, gcc-internal-format, gfc-internal-format msgid "Expected an initialization expression at %C" -msgstr "Ett initieringsuttryck förväntades vid %C" +msgstr "Ett initieringsuttryck förväntades vid %C" #: fortran/decl.c:2033 #, gcc-internal-format, gfc-internal-format msgid "Initialization of variable at %C is not allowed in a PURE procedure" -msgstr "Initiering av variabel vid %C är inte tillåtet i en PURE-procedur" +msgstr "Initiering av variabel vid %C är inte tillÃ¥tet i en PURE-procedur" #: fortran/decl.c:2046 #, gcc-internal-format, gfc-internal-format msgid "Initialization of allocatable component at %C is not allowed" -msgstr "Initiering av allokerbar komponent vid %C är inte tillåtet" +msgstr "Initiering av allokerbar komponent vid %C är inte tillÃ¥tet" #: fortran/decl.c:2100 fortran/decl.c:2136 #, gcc-internal-format, gfc-internal-format msgid "Old-style type declaration %s*%d not supported at %C" -msgstr "Gammaldags typdeklaration %s*%d stöds inte vid %C" +msgstr "Gammaldags typdeklaration %s*%d stöds inte vid %C" #: fortran/decl.c:2141 #, gcc-internal-format, gfc-internal-format @@ -35755,37 +35758,37 @@ msgstr "Typdeklaration ej enligt standard %s*%d vid %C" #: fortran/decl.c:2192 fortran/decl.c:2268 #, gcc-internal-format, gfc-internal-format msgid "Missing right parenthesis at %C" -msgstr "Saknad högerparentes vid %C" +msgstr "Saknad högerparentes vid %C" #: fortran/decl.c:2205 fortran/decl.c:2339 #, gcc-internal-format, gfc-internal-format msgid "Expected initialization expression at %C" -msgstr "Initieringsuttryck förväntades vid %C" +msgstr "Initieringsuttryck förväntades vid %C" #: fortran/decl.c:2213 fortran/decl.c:2345 #, gcc-internal-format, gfc-internal-format msgid "Expected scalar initialization expression at %C" -msgstr "Ett skalärt initieringsuttryck förväntades vid %C" +msgstr "Ett skalärt initieringsuttryck förväntades vid %C" #: fortran/decl.c:2244 #, gcc-internal-format, gfc-internal-format msgid "Kind %d not supported for type %s at %C" -msgstr "Sorten %d stöds inte för typen %s vid %C" +msgstr "Sorten %d stöds inte för typen %s vid %C" #: fortran/decl.c:2257 #, gcc-internal-format, gfc-internal-format msgid "C kind type parameter is for type %s but type at %L is %s" -msgstr "Parameter med sort C är för typ %s men typen vid %L är %s" +msgstr "Parameter med sort C är för typ %s men typen vid %L är %s" #: fortran/decl.c:2266 #, gcc-internal-format, gfc-internal-format msgid "Missing right parenthesis or comma at %C" -msgstr "Högerparentes eller komma saknas vid %C" +msgstr "Högerparentes eller komma saknas vid %C" #: fortran/decl.c:2365 #, gcc-internal-format, gfc-internal-format msgid "Kind %d is not supported for CHARACTER at %C" -msgstr "Sorten %d stöds inte för typen CHARACTER vid %C" +msgstr "Sorten %d stöds inte för typen CHARACTER vid %C" #: fortran/decl.c:2497 #, gcc-internal-format, gfc-internal-format @@ -35795,12 +35798,12 @@ msgstr "Syntaxfel i CHARACTER-deklaration vid %C" #: fortran/decl.c:2582 #, gcc-internal-format, gfc-internal-format msgid "Extension: BYTE type at %C" -msgstr "Utökning: BYTE-typ vid %C" +msgstr "Utökning: BYTE-typ vid %C" #: fortran/decl.c:2588 #, gcc-internal-format, gfc-internal-format msgid "BYTE type used at %C is not available on the target machine" -msgstr "BYTE-typ använd vid %C är inte tillgänglig på målmaskinen" +msgstr "BYTE-typ använd vid %C är inte tillgänglig pÃ¥ mÃ¥lmaskinen" #: fortran/decl.c:2614 fortran/decl.c:2645 fortran/decl.c:2675 #: fortran/decl.c:2825 @@ -35811,12 +35814,12 @@ msgstr "Fortran 2008: TYPE med inbyggd typspecifikation vid %C" #: fortran/decl.c:2670 #, gcc-internal-format, gfc-internal-format msgid "Extension: DOUBLE COMPLEX at %C" -msgstr "Utökning: DOUBLE COMPLEX vid %C" +msgstr "Utökning: DOUBLE COMPLEX vid %C" #: fortran/decl.c:2708 #, gcc-internal-format, gfc-internal-format msgid "Unlimited polymorphism at %C not yet supported" -msgstr "Obegränsad polymorfism vid %C stödjs inte ännu" +msgstr "Obegränsad polymorfism vid %C stödjs inte ännu" #: fortran/decl.c:2717 #, gcc-internal-format, gfc-internal-format @@ -35827,7 +35830,7 @@ msgstr "Fortran 2003: CLASS-sats vid %C" #: fortran/decl.c:3148 #, gcc-internal-format, gfc-internal-format msgid "Type name '%s' at %C is ambiguous" -msgstr "Typnamnet \"%s\" vid %C är tvetydigt" +msgstr "Typnamnet â€%s†vid %C är tvetydigt" #: fortran/decl.c:2781 #, gcc-internal-format, gfc-internal-format @@ -35842,7 +35845,7 @@ msgstr "Teckenintervall saknas i IMPLICIT vid %C" #: fortran/decl.c:2947 #, gcc-internal-format, gfc-internal-format msgid "Letters must be in alphabetic order in IMPLICIT statement at %C" -msgstr "Bokstäver måste vara i alfabetisk ordning i IMPLICIT-sats vid %C" +msgstr "Bokstäver mÃ¥ste vara i alfabetisk ordning i IMPLICIT-sats vid %C" #: fortran/decl.c:3003 #, gcc-internal-format, gfc-internal-format @@ -35852,7 +35855,7 @@ msgstr "Tom IMPLICIT-sats vid %C" #: fortran/decl.c:3105 #, gcc-internal-format, gfc-internal-format msgid "IMPORT statement at %C only permitted in an INTERFACE body" -msgstr "IMPORT-sats vid %C endast tillåten inuti en INTERFACE-kropp" +msgstr "IMPORT-sats vid %C endast tillÃ¥ten inuti en INTERFACE-kropp" #: fortran/decl.c:3110 #, gcc-internal-format, gfc-internal-format @@ -35862,17 +35865,17 @@ msgstr "Fortran 2003: IMPORT-sats vid %C" #: fortran/decl.c:3125 #, gcc-internal-format, gfc-internal-format msgid "Expecting list of named entities at %C" -msgstr "Lista med namngivna entiteter förväntades vid %C" +msgstr "Lista med namngivna entiteter förväntades vid %C" #: fortran/decl.c:3154 #, gcc-internal-format, gfc-internal-format msgid "Cannot IMPORT '%s' from host scoping unit at %C - does not exist." -msgstr "Det går inte att IMPORT:era \"%s\" från värdräckviddsenhet vid %C - existerar inte." +msgstr "Det gÃ¥r inte att IMPORT:era â€%s†frÃ¥n värdräckviddsenhet vid %C - existerar inte." #: fortran/decl.c:3161 #, gcc-internal-format, gfc-internal-format msgid "'%s' is already IMPORTed from host scoping unit at %C." -msgstr "\"%s\" är redan IMPORT:erad från värdräckviddsenhet vid %C." +msgstr "â€%s†är redan IMPORT:erad frÃ¥n värdräckviddsenhet vid %C." #: fortran/decl.c:3204 #, gcc-internal-format, gfc-internal-format @@ -35902,7 +35905,7 @@ msgstr "Fortran 2003: attributet ALLOCATABLE vid %C i en TYPE-definition" #: fortran/decl.c:3617 #, gcc-internal-format, gfc-internal-format msgid "Attribute at %L is not allowed in a TYPE definition" -msgstr "Attribut vid %L är inte tillåtet i en TYPE-definition" +msgstr "Attribut vid %L är inte tillÃ¥tet i en TYPE-definition" #: fortran/decl.c:3635 #, gcc-internal-format, gfc-internal-format @@ -35912,7 +35915,7 @@ msgstr "Fortran 2003: Attribut %s vid %L i en TYPE-definition" #: fortran/decl.c:3646 #, gcc-internal-format, gfc-internal-format msgid "%s attribute at %L is not allowed outside of the specification part of a module" -msgstr "%s-attribut vid %L är inte tillåtet utanför specifikationsdelen av en modul" +msgstr "%s-attribut vid %L är inte tillÃ¥tet utanför specifikationsdelen av en modul" #: fortran/decl.c:3661 #, gcc-internal-format, gfc-internal-format @@ -35927,7 +35930,7 @@ msgstr "Fortran 2008: CONTIGUOUS-attribut vid %C" #: fortran/decl.c:3720 fortran/decl.c:6714 #, gcc-internal-format, gfc-internal-format msgid "PROTECTED at %C only allowed in specification part of a module" -msgstr "PROTECTED vid %C är endast tillåtet i specifikation av en del av en modul" +msgstr "PROTECTED vid %C är endast tillÃ¥tet i specifikation av en del av en modul" #: fortran/decl.c:3726 #, gcc-internal-format, gfc-internal-format @@ -35952,59 +35955,59 @@ msgstr "Flera identifierare angivna med en ensam NAME=-specificerare vid %C" #: fortran/decl.c:3910 #, gcc-internal-format, gfc-internal-format msgid "Implicitly declared BIND(C) function '%s' at %L may not be C interoperable" -msgstr "Implicit deklarerad BIND(C)-funktion \"%s\" vid %L kan inte vara C-interoperativ" +msgstr "Implicit deklarerad BIND(C)-funktion â€%s†vid %L kan inte vara C-interoperativ" #: fortran/decl.c:3931 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' in common block '%s' at %L may not be a C interoperable kind though common block '%s' is BIND(C)" -msgstr "Variabeln \"%s\" i common-blocket \"%s\" vid %L får inte vara en sort interoperativ med C men common-blocket \"%s\" är BIND(C)" +msgstr "Variabeln â€%s†i common-blocket â€%s†vid %L fÃ¥r inte vara en sort interoperativ med C men common-blocket â€%s†är BIND(C)" #: fortran/decl.c:3940 #, gcc-internal-format, gfc-internal-format msgid "Type declaration '%s' at %L is not C interoperable but it is BIND(C)" -msgstr "Typdeklaration \"%s\" vid %L är inte C-interoperativ men den är BIND(C)" +msgstr "Typdeklaration â€%s†vid %L är inte C-interoperativ men den är BIND(C)" #: fortran/decl.c:3944 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L may not be a C interoperable kind but it is bind(c)" -msgstr "Variabeln \"%s\" vid %L får inte ha en C-interoperativ sort men den är bind(c)" +msgstr "Variabeln â€%s†vid %L fÃ¥r inte ha en C-interoperativ sort men den är bind(c)" #: fortran/decl.c:3956 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' in common block '%s' at %L cannot be declared with BIND(C) since it is not a global" -msgstr "Variabeln \"%s\" i common-blocket \"%s\" vid %L får inte deklareras med BIND(C) eftersom den inte är en global" +msgstr "Variabeln â€%s†i common-blocket â€%s†vid %L fÃ¥r inte deklareras med BIND(C) eftersom den inte är en global" #: fortran/decl.c:3970 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L cannot have both the POINTER and BIND(C) attributes" -msgstr "Variabeln \"%s\" vid %L får inte ha både attributet POINTER och BIND(C)" +msgstr "Variabeln â€%s†vid %L fÃ¥r inte ha bÃ¥de attributet POINTER och BIND(C)" #: fortran/decl.c:3978 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L cannot have both the ALLOCATABLE and BIND(C) attributes" -msgstr "Variabeln \"%s\" vid %L får inte ha både attributet ALLOCATABLE och BIND(C)" +msgstr "Variabeln â€%s†vid %L fÃ¥r inte ha bÃ¥de attributet ALLOCATABLE och BIND(C)" #: fortran/decl.c:3990 #, gcc-internal-format, gfc-internal-format msgid "Return type of BIND(C) function '%s' at %L cannot be an array" -msgstr "Returtyp till BIND(C)-funktion \"%s\" vid %L kan inte vara en vektor" +msgstr "Returtyp till BIND(C)-funktion â€%s†vid %L kan inte vara en vektor" #: fortran/decl.c:3998 #, gcc-internal-format, gfc-internal-format msgid "Return type of BIND(C) function '%s' at %L cannot be a character string" -msgstr "Returtyp till BIND(C)-funktion \"%s\" vid %L kan inte vara en teckensträng" +msgstr "Returtyp till BIND(C)-funktion â€%s†vid %L kan inte vara en teckensträng" #. Use gfc_warning_now because we won't say that the symbol fails #. just because of this. #: fortran/decl.c:4009 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %L is marked PRIVATE but has been given the binding label '%s'" -msgstr "Symbolen \"%s\" vid %L är markerad PRIVATE men har getts bindningsetiketten \"%s\"" +msgstr "Symbolen â€%s†vid %L är markerad PRIVATE men har getts bindningsetiketten â€%sâ€" #: fortran/decl.c:4084 #, gcc-internal-format, gfc-internal-format msgid "Need either entity or common block name for attribute specification statement at %C" -msgstr "Det behövs antingen entitet- eller common-blocknamn för attributspecifikationssatsen vid %C" +msgstr "Det behövs antingen entitet- eller common-blocknamn för attributspecifikationssatsen vid %C" #: fortran/decl.c:4131 #, gcc-internal-format, gfc-internal-format @@ -36016,7 +36019,7 @@ msgstr "Entitets- eller common-blocknamn saknas till attributspecifikationssats #: fortran/decl.c:4240 #, gcc-internal-format, gfc-internal-format msgid "Derived type at %C has not been previously defined and so cannot appear in a derived type definition" -msgstr "Härledd typ vid %C har inte definierats tidigare och kan därför inte förekomma i en härledd typdefinition" +msgstr "Härledd typ vid %C har inte definierats tidigare och kan därför inte förekomma i en härledd typdefinition" #: fortran/decl.c:4272 #, gcc-internal-format, gfc-internal-format @@ -36031,62 +36034,62 @@ msgstr "Fortran 2008: IMPURE-procedur vid %C" #: fortran/decl.c:4359 #, gcc-internal-format, gfc-internal-format msgid "PURE and IMPURE must not appear both at %C" -msgstr "PURE och IMPURE får inte båda finnas vid %C" +msgstr "PURE och IMPURE fÃ¥r inte bÃ¥da finnas vid %C" #: fortran/decl.c:4465 #, gcc-internal-format, gfc-internal-format msgid "Name '%s' at %C is the name of the procedure" -msgstr "Namnet \"%s\" vid %C är namnet på proceduren" +msgstr "Namnet â€%s†vid %C är namnet pÃ¥ proceduren" #: fortran/decl.c:4477 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk in formal argument list at %C" -msgstr "Oväntat skräp i formell argumentlista vid %C" +msgstr "Oväntat skräp i formell argumentlista vid %C" #: fortran/decl.c:4494 #, gcc-internal-format, gfc-internal-format msgid "Duplicate symbol '%s' in formal argument list at %C" -msgstr "Dubblerad symbol \"%s\" i formell argumentlista vid %C" +msgstr "Dubblerad symbol â€%s†i formell argumentlista vid %C" #: fortran/decl.c:4545 #, gcc-internal-format, gfc-internal-format msgid "RESULT variable at %C must be different than function name" -msgstr "RESULT-variabel vid %C måste vara skilt från funktionsnamnet" +msgstr "RESULT-variabel vid %C mÃ¥ste vara skilt frÃ¥n funktionsnamnet" #: fortran/decl.c:4622 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after function declaration at %C" -msgstr "Oväntat skräp efter funktionsdeklaration vid %C" +msgstr "Oväntat skräp efter funktionsdeklaration vid %C" #: fortran/decl.c:4632 fortran/decl.c:5665 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: BIND(C) attribute at %L may not be specified for an internal procedure" -msgstr "Fortran 2008: BIND(C)-attribut vid %L kan inte anges för en intern procedur" +msgstr "Fortran 2008: BIND(C)-attribut vid %L kan inte anges för en intern procedur" #: fortran/decl.c:4776 #, gcc-internal-format, gfc-internal-format msgid "Interface '%s' at %C may not be generic" -msgstr "Gränssnitt \"%s\" vid %C kan inte vara generiskt" +msgstr "Gränssnitt â€%s†vid %C kan inte vara generiskt" #: fortran/decl.c:4782 #, gcc-internal-format, gfc-internal-format msgid "Interface '%s' at %C may not be a statement function" -msgstr "Gränssnitt \"%s\" vid %C kan inte vara en satsfunktion" +msgstr "Gränssnitt â€%s†vid %C kan inte vara en satsfunktion" #: fortran/decl.c:4795 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic procedure '%s' not allowed in PROCEDURE statement at %C" -msgstr "Den inbyggda proceduren \"%s\" är inte tillåten i PROCEDURE-sats vid %C" +msgstr "Den inbyggda proceduren â€%s†är inte tillÃ¥ten i PROCEDURE-sats vid %C" #: fortran/decl.c:4850 #, gcc-internal-format, gfc-internal-format msgid "BIND(C) attribute at %C requires an interface with BIND(C)" -msgstr "Attribut BIND(C) vid %C kräver ett gränssnitt med BIND(C)" +msgstr "Attribut BIND(C) vid %C kräver ett gränssnitt med BIND(C)" #: fortran/decl.c:4857 #, gcc-internal-format, gfc-internal-format msgid "BIND(C) procedure with NAME may not have POINTER attribute at %C" -msgstr "BIND(C)-procedur med NAME får inte ha attributet POINTER vid %C" +msgstr "BIND(C)-procedur med NAME fÃ¥r inte ha attributet POINTER vid %C" #: fortran/decl.c:4863 #, gcc-internal-format, gfc-internal-format @@ -36096,7 +36099,7 @@ msgstr "Attrapprocedur vid %C kan inte ha attributet BIND(c) tillsammans med NAM #: fortran/decl.c:4886 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %L already has basic type of %s" -msgstr "Procedur \"%s\" vid %L har redan en grundtyp %s" +msgstr "Procedur â€%s†vid %L har redan en grundtyp %s" #: fortran/decl.c:4935 fortran/decl.c:5103 fortran/decl.c:8196 #, gcc-internal-format, gfc-internal-format @@ -36106,12 +36109,12 @@ msgstr "Syntaxfel i PROCEDURE-sats vid %C" #: fortran/decl.c:4984 fortran/decl.c:8097 #, gcc-internal-format, gfc-internal-format msgid "Expected '::' after binding-attributes at %C" -msgstr "\"::\" förväntades efter bindningsattribut vid %C" +msgstr "â€::†förväntades efter bindningsattribut vid %C" #: fortran/decl.c:4991 #, gcc-internal-format, gfc-internal-format msgid "NOPASS or explicit interface required at %C" -msgstr "NOPASS eller explicit gränssnitt krävs vid %C" +msgstr "NOPASS eller explicit gränssnitt krävs vid %C" #: fortran/decl.c:4995 #, gcc-internal-format, gfc-internal-format @@ -36126,7 +36129,7 @@ msgstr "Syntaxfel i procedurpekarkomponent vid %C" #: fortran/decl.c:5077 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE at %C must be in a generic interface" -msgstr "PROCEDURE vid %C måste vara i ett generiskt gränssnitt" +msgstr "PROCEDURE vid %C mÃ¥ste vara i ett generiskt gränssnitt" #: fortran/decl.c:5143 #, gcc-internal-format, gfc-internal-format @@ -36136,155 +36139,155 @@ msgstr "Fortran 2003: PROCEDURE-sats vid %C" #: fortran/decl.c:5211 #, gcc-internal-format, gfc-internal-format msgid "Expected formal argument list in function definition at %C" -msgstr "Formell argumentlista förväntades i funktionsdefinitionen vid %C" +msgstr "Formell argumentlista förväntades i funktionsdefinitionen vid %C" #: fortran/decl.c:5235 fortran/decl.c:5239 fortran/decl.c:5443 #: fortran/decl.c:5447 fortran/decl.c:5633 fortran/decl.c:5637 #: fortran/symbol.c:1588 #, gcc-internal-format, gfc-internal-format msgid "BIND(C) attribute at %L can only be used for variables or common blocks" -msgstr "Attribut BIND(C) vid %L kan endast användas för variabler och common-block" +msgstr "Attribut BIND(C) vid %L kan endast användas för variabler och common-block" #: fortran/decl.c:5354 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008 obsolescent feature: ENTRY statement at %C" -msgstr "Fortran 2008: föråldrad funktion: ENTRY-sats vid %C" +msgstr "Fortran 2008: förÃ¥ldrad funktion: ENTRY-sats vid %C" #: fortran/decl.c:5364 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a PROGRAM" -msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett PROGRAM" +msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett PROGRAM" #: fortran/decl.c:5367 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a MODULE" -msgstr "ENTRY-sats vid %C kan inte förekomma inuti en MODULE" +msgstr "ENTRY-sats vid %C kan inte förekomma inuti en MODULE" #: fortran/decl.c:5370 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a BLOCK DATA" -msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett BLOCK DATA" +msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett BLOCK DATA" #: fortran/decl.c:5374 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within an INTERFACE" -msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett INTERFACE" +msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett INTERFACE" #: fortran/decl.c:5378 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a DERIVED TYPE block" -msgstr "ENTRY-sats vid %C kan inte förekomma inuti en ett DERIVED TYPE-block" +msgstr "ENTRY-sats vid %C kan inte förekomma inuti en ett DERIVED TYPE-block" #: fortran/decl.c:5382 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within an IF-THEN block" -msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett IF-THEN-block" +msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett IF-THEN-block" #: fortran/decl.c:5387 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a DO block" -msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett DO-block" +msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett DO-block" #: fortran/decl.c:5391 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a SELECT block" -msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett SELECT-block" +msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett SELECT-block" #: fortran/decl.c:5395 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a FORALL block" -msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett FORALL-block" +msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett FORALL-block" #: fortran/decl.c:5399 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a WHERE block" -msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett WHERE-block" +msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett WHERE-block" #: fortran/decl.c:5403 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a contained subprogram" -msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett inneslutet underprogram" +msgstr "ENTRY-sats vid %C kan inte förekomma inuti ett inneslutet underprogram" #: fortran/decl.c:5421 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear in a contained procedure" -msgstr "ENTRY-sats vid %C kan inte förekomma i en innesluten procedur" +msgstr "ENTRY-sats vid %C kan inte förekomma i en innesluten procedur" #: fortran/decl.c:5475 fortran/decl.c:5673 #, gcc-internal-format, gfc-internal-format msgid "Missing required parentheses before BIND(C) at %C" -msgstr "Nödvändig parentes saknas före BIND(C) vid %C" +msgstr "Nödvändig parentes saknas före BIND(C) vid %C" #: fortran/decl.c:5735 fortran/decl.c:5751 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in NAME= specifier for binding label at %C" -msgstr "Syntaxfel i NAME=-specifikation för att binda etikett vid %C" +msgstr "Syntaxfel i NAME=-specifikation för att binda etikett vid %C" #: fortran/decl.c:5766 #, gcc-internal-format, gfc-internal-format msgid "Missing closing quote '\"' for binding label at %C" -msgstr "Avslutande citationstecken '\"' saknas för att binda etikett vid %C" +msgstr "Avslutande citationstecken 'â€' saknas för att binda etikett vid %C" #: fortran/decl.c:5775 #, gcc-internal-format, gfc-internal-format msgid "Missing closing quote ''' for binding label at %C" -msgstr "Avslutande citationstecken \"'\" saknas för att binda etikett vid %C" +msgstr "Avslutande citationstecken â€'†saknas för att binda etikett vid %C" #: fortran/decl.c:5785 #, gcc-internal-format, gfc-internal-format msgid "Missing closing paren for binding label at %C" -msgstr "Slutparentes saknas för att binda etikett vid %C" +msgstr "Slutparentes saknas för att binda etikett vid %C" #: fortran/decl.c:5791 #, gcc-internal-format, gfc-internal-format msgid "No binding name is allowed in BIND(C) at %C" -msgstr "Inget bindningsnamn är tillåtet i BIND(C) vid %C" +msgstr "Inget bindningsnamn är tillÃ¥tet i BIND(C) vid %C" #: fortran/decl.c:5797 #, gcc-internal-format, gfc-internal-format msgid "For dummy procedure %s, no binding name is allowed in BIND(C) at %C" -msgstr "För attrapprocedur %s är inget bindningsnamn tillåtet i BIND(C) vid %C" +msgstr "För attrapprocedur %s är inget bindningsnamn tillÃ¥tet i BIND(C) vid %C" #: fortran/decl.c:5828 #, gcc-internal-format, gfc-internal-format msgid "NAME not allowed on BIND(C) for ABSTRACT INTERFACE at %C" -msgstr "NAME är inte tillåtet på BIND(C) för ABSTRACT INTERFACE vid %C" +msgstr "NAME är inte tillÃ¥tet pÃ¥ BIND(C) för ABSTRACT INTERFACE vid %C" #: fortran/decl.c:6033 #, gcc-internal-format, gfc-internal-format msgid "Unexpected END statement at %C" -msgstr "Oväntad END-sats vid %C" +msgstr "Oväntad END-sats vid %C" #: fortran/decl.c:6041 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: END statement instead of %s statement at %L" -msgstr "Fortran 2008: END-sats istället för %s-sats vid %L" +msgstr "Fortran 2008: END-sats istället för %s-sats vid %L" #. We would have required END [something]. #: fortran/decl.c:6049 #, gcc-internal-format, gfc-internal-format msgid "%s statement expected at %L" -msgstr "%s-sats förväntades vid %L" +msgstr "%s-sats förväntades vid %L" #: fortran/decl.c:6060 #, gcc-internal-format, gfc-internal-format msgid "Expecting %s statement at %C" -msgstr "%s-sats förväntades vid %C" +msgstr "%s-sats förväntades vid %C" #: fortran/decl.c:6076 #, gcc-internal-format, gfc-internal-format msgid "Expected block name of '%s' in %s statement at %C" -msgstr "Blocknamn på \"%s\" i %s-sats förväntades vid %C" +msgstr "Blocknamn pÃ¥ â€%s†i %s-sats förväntades vid %C" #: fortran/decl.c:6093 #, gcc-internal-format, gfc-internal-format msgid "Expected terminating name at %C" -msgstr "Avslutande namn förväntades vid %C" +msgstr "Avslutande namn förväntades vid %C" #: fortran/decl.c:6102 fortran/decl.c:6110 #, gcc-internal-format, gfc-internal-format msgid "Expected label '%s' for %s statement at %C" -msgstr "Etikett \"%s\" för %s-sats förväntades vid %C" +msgstr "Etikett â€%s†för %s-sats förväntades vid %C" #: fortran/decl.c:6175 #, gcc-internal-format, gfc-internal-format @@ -36294,7 +36297,7 @@ msgstr "Vektorspecifikation saknas vid %L i DIMENSION-sats" #: fortran/decl.c:6183 #, gcc-internal-format, gfc-internal-format msgid "Dimensions specified for %s at %L after its initialisation" -msgstr "Dimensioner angivna för %s vid %L efter dess initiering" +msgstr "Dimensioner angivna för %s vid %L efter dess initiering" #: fortran/decl.c:6191 #, gcc-internal-format, gfc-internal-format @@ -36304,62 +36307,62 @@ msgstr "Vektorspecifikation saknas vid %L i CODIMENSION-sats" #: fortran/decl.c:6200 #, gcc-internal-format, gfc-internal-format msgid "Array specification must be deferred at %L" -msgstr "Vektorspecifikation måste vara fördröjd vid %L" +msgstr "Vektorspecifikation mÃ¥ste vara fördröjd vid %L" #: fortran/decl.c:6299 #, gcc-internal-format, gfc-internal-format msgid "Unexpected character in variable list at %C" -msgstr "Oväntat tecken i variabellista vid %C" +msgstr "Oväntat tecken i variabellista vid %C" #: fortran/decl.c:6336 #, gcc-internal-format, gfc-internal-format msgid "Expected '(' at %C" -msgstr "\"(\" förväntades vid %C" +msgstr "â€(†förväntades vid %C" #: fortran/decl.c:6350 fortran/decl.c:6390 #, gcc-internal-format, gfc-internal-format msgid "Expected variable name at %C" -msgstr "Variabelnamn förväntades vid %C" +msgstr "Variabelnamn förväntades vid %C" #: fortran/decl.c:6366 #, gcc-internal-format, gfc-internal-format msgid "Cray pointer at %C must be an integer" -msgstr "Cray-pekare vid %C måste vara ett heltal" +msgstr "Cray-pekare vid %C mÃ¥ste vara ett heltal" #: fortran/decl.c:6370 #, gcc-internal-format, gfc-internal-format msgid "Cray pointer at %C has %d bytes of precision; memory addresses require %d bytes" -msgstr "Cray-pekare vid %C har %d bytes precision, minnesadresser kräver %d byte" +msgstr "Cray-pekare vid %C har %d bytes precision, minnesadresser kräver %d byte" #: fortran/decl.c:6376 #, gcc-internal-format, gfc-internal-format msgid "Expected \",\" at %C" -msgstr "\",\" förväntades vid %C" +msgstr "â€,†förväntades vid %C" #: fortran/decl.c:6439 #, gcc-internal-format, gfc-internal-format msgid "Expected \")\" at %C" -msgstr "\")\" förväntades vid %C" +msgstr "â€)†förväntades vid %C" #: fortran/decl.c:6451 #, gcc-internal-format, gfc-internal-format msgid "Expected \",\" or end of statement at %C" -msgstr "\",\" ellerslut på sats förväntades vid %C" +msgstr "â€,†ellerslut pÃ¥ sats förväntades vid %C" #: fortran/decl.c:6477 #, gcc-internal-format, gfc-internal-format msgid "INTENT is not allowed inside of BLOCK at %C" -msgstr "INTENT är inte tillåtet inuti BLOCK vid %C" +msgstr "INTENT är inte tillÃ¥tet inuti BLOCK vid %C" #: fortran/decl.c:6509 #, gcc-internal-format, gfc-internal-format msgid "OPTIONAL is not allowed inside of BLOCK at %C" -msgstr "OPTIONAL är inte tillåtet inuti BLOCK vid %C" +msgstr "OPTIONAL är inte tillÃ¥tet inuti BLOCK vid %C" #: fortran/decl.c:6528 #, gcc-internal-format, gfc-internal-format msgid "Cray pointer declaration at %C requires -fcray-pointer flag" -msgstr "Cray-pekardeklaration vid %C kräver flaggan -fcray-pointer" +msgstr "Cray-pekardeklaration vid %C kräver flaggan -fcray-pointer" #: fortran/decl.c:6567 #, gcc-internal-format, gfc-internal-format @@ -36369,12 +36372,12 @@ msgstr "Fortran 2008: CONTIGUOUS-sats vid %C" #: fortran/decl.c:6665 #, gcc-internal-format, gfc-internal-format msgid "Access specification of the %s operator at %C has already been specified" -msgstr "Åtkomstspecifikation av operatorn %s vid %C har redan angivits" +msgstr "Ã…tkomstspecifikation av operatorn %s vid %C har redan angivits" #: fortran/decl.c:6682 #, gcc-internal-format, gfc-internal-format msgid "Access specification of the .%s. operator at %C has already been specified" -msgstr "Åtkomstspecifikation för operatorn .%s. vid %C har redan angivits" +msgstr "Ã…tkomstspecifikation för operatorn .%s. vid %C har redan angivits" #: fortran/decl.c:6720 #, gcc-internal-format, gfc-internal-format @@ -36389,27 +36392,27 @@ msgstr "Syntaxfel i PROTECTED-sats vid %C" #: fortran/decl.c:6784 #, gcc-internal-format, gfc-internal-format msgid "PRIVATE statement at %C is only allowed in the specification part of a module" -msgstr "PRIVATE-sats vid %C får endast förekomma i specifikationsdelen av en modul" +msgstr "PRIVATE-sats vid %C fÃ¥r endast förekomma i specifikationsdelen av en modul" #: fortran/decl.c:6821 #, gcc-internal-format, gfc-internal-format msgid "PUBLIC statement at %C is only allowed in the specification part of a module" -msgstr "PUBLIC-sats vid %C får endast förekomma i specifikationsdelen av en modul" +msgstr "PUBLIC-sats vid %C fÃ¥r endast förekomma i specifikationsdelen av en modul" #: fortran/decl.c:6849 #, gcc-internal-format, gfc-internal-format msgid "Expected variable name at %C in PARAMETER statement" -msgstr "Variabelnamn förväntades vid %C i PARAMETER-sats" +msgstr "Variabelnamn förväntades vid %C i PARAMETER-sats" #: fortran/decl.c:6856 #, gcc-internal-format, gfc-internal-format msgid "Expected = sign in PARAMETER statement at %C" -msgstr "=-tecken i PARAMETER-sats förväntades vid %C" +msgstr "=-tecken i PARAMETER-sats förväntades vid %C" #: fortran/decl.c:6862 #, gcc-internal-format, gfc-internal-format msgid "Expected expression at %C in PARAMETER statement" -msgstr "Uttryck förväntades vid %C i PARAMETER-sats" +msgstr "Uttryck förväntades vid %C i PARAMETER-sats" #: fortran/decl.c:6882 #, gcc-internal-format, gfc-internal-format @@ -36419,17 +36422,17 @@ msgstr "Initierar redan initierad variabel vid %C" #: fortran/decl.c:6917 #, gcc-internal-format, gfc-internal-format msgid "Unexpected characters in PARAMETER statement at %C" -msgstr "Oväntade tecken i PARAMETER-sats vid %C" +msgstr "Oväntade tecken i PARAMETER-sats vid %C" #: fortran/decl.c:6941 #, gcc-internal-format, gfc-internal-format msgid "Blanket SAVE statement at %C follows previous SAVE statement" -msgstr "Allmän SAVE-sats vid %C följer tidigare SAVE-sats" +msgstr "Allmän SAVE-sats vid %C följer tidigare SAVE-sats" #: fortran/decl.c:6953 #, gcc-internal-format, gfc-internal-format msgid "SAVE statement at %C follows blanket SAVE statement" -msgstr "SAVE-sats vid %C följer allmän SAVE-sats" +msgstr "SAVE-sats vid %C följer allmän SAVE-sats" #: fortran/decl.c:7000 #, gcc-internal-format, gfc-internal-format @@ -36439,7 +36442,7 @@ msgstr "Syntaxfel i SAVE-sats vid %C" #: fortran/decl.c:7014 #, gcc-internal-format, gfc-internal-format msgid "VALUE is not allowed inside of BLOCK at %C" -msgstr "VALUE är inte tillåtet inuti BLOCK vid %C" +msgstr "VALUE är inte tillÃ¥tet inuti BLOCK vid %C" #: fortran/decl.c:7018 #, gcc-internal-format, gfc-internal-format @@ -36459,7 +36462,7 @@ msgstr "Fortran 2003: VOLATILE-sats vid %C" #: fortran/decl.c:7093 #, gcc-internal-format, gfc-internal-format msgid "Specifying VOLATILE for coarray variable '%s' at %C, which is use-/host-associated" -msgstr "VOLATILE anges för co-vektorvariabel \"%s\" vid %C, vilket är use-/host-associerat" +msgstr "VOLATILE anges för co-vektorvariabel â€%s†vid %C, vilket är use-/host-associerat" #: fortran/decl.c:7119 #, gcc-internal-format, gfc-internal-format @@ -36479,7 +36482,7 @@ msgstr "Syntaxfel i ASYNCHRONOUS-sats vid %C" #: fortran/decl.c:7196 #, gcc-internal-format, gfc-internal-format msgid "MODULE PROCEDURE at %C must be in a generic module interface" -msgstr "MODULE PROCEDURE vid %C måste vara i ett generiskt modulgränssnitt" +msgstr "MODULE PROCEDURE vid %C mÃ¥ste vara i ett generiskt modulgränssnitt" #: fortran/decl.c:7221 #, gcc-internal-format, gfc-internal-format @@ -36499,32 +36502,32 @@ msgstr "Tvetydig symbol i TYPE-definition vid %C" #: fortran/decl.c:7310 #, gcc-internal-format, gfc-internal-format msgid "No such symbol in TYPE definition at %C" -msgstr "Ingen sådan symbol i TYPE-definition vid %C" +msgstr "Ingen sÃ¥dan symbol i TYPE-definition vid %C" #: fortran/decl.c:7318 #, gcc-internal-format, gfc-internal-format msgid "'%s' in EXTENDS expression at %C is not a derived type" -msgstr "\"%s\" i EXTENDS-uttryck vid %C är inte en härledd typ" +msgstr "â€%s†i EXTENDS-uttryck vid %C är inte en härledd typ" #: fortran/decl.c:7325 #, gcc-internal-format, gfc-internal-format msgid "'%s' cannot be extended at %C because it is BIND(C)" -msgstr "\"%s\" kan inte utökas vid %C för att den är BIND(C)" +msgstr "â€%s†kan inte utökas vid %C för att den är BIND(C)" #: fortran/decl.c:7332 #, gcc-internal-format, gfc-internal-format msgid "'%s' cannot be extended at %C because it is a SEQUENCE type" -msgstr "\"%s\" kan inte utökas vid %C eftersom det är en SEQUENCE-typ" +msgstr "â€%s†kan inte utökas vid %C eftersom det är en SEQUENCE-typ" #: fortran/decl.c:7355 #, gcc-internal-format, gfc-internal-format msgid "Derived type at %C can only be PRIVATE in the specification part of a module" -msgstr "Härledd typ vid %C kan endast vara PRIVATE i specifikationsdelen av en modul" +msgstr "Härledd typ vid %C kan endast vara PRIVATE i specifikationsdelen av en modul" #: fortran/decl.c:7367 #, gcc-internal-format, gfc-internal-format msgid "Derived type at %C can only be PUBLIC in the specification part of a module" -msgstr "Härledd typ vid %C kan endast vara PUBLIC i specifikationsdelen av en modul" +msgstr "Härledd typ vid %C kan endast vara PUBLIC i specifikationsdelen av en modul" #: fortran/decl.c:7388 #, gcc-internal-format, gfc-internal-format @@ -36534,27 +36537,27 @@ msgstr "Fortran 2003: ABSTRACT typ vid %C" #: fortran/decl.c:7453 #, gcc-internal-format, gfc-internal-format msgid "Expected :: in TYPE definition at %C" -msgstr ":: förväntades i TYPE-definition vid %C" +msgstr ":: förväntades i TYPE-definition vid %C" #: fortran/decl.c:7464 #, gcc-internal-format, gfc-internal-format msgid "Type name '%s' at %C cannot be the same as an intrinsic type" -msgstr "Typnamnet \"%s\" vid %C kan inte vara samma som en inbyggd typ" +msgstr "Typnamnet â€%s†vid %C kan inte vara samma som en inbyggd typ" #: fortran/decl.c:7474 #, gcc-internal-format, gfc-internal-format msgid "Derived type name '%s' at %C already has a basic type of %s" -msgstr "Härlett typnamn \"%s\" vid %C har redan en grundtyp %s" +msgstr "Härlett typnamn â€%s†vid %C har redan en grundtyp %s" #: fortran/decl.c:7491 #, gcc-internal-format, gfc-internal-format msgid "Derived type definition of '%s' at %C has already been defined" -msgstr "Härledd typdefinition \"%s\" vid %C har redan definierats" +msgstr "Härledd typdefinition â€%s†vid %C har redan definierats" #: fortran/decl.c:7599 #, gcc-internal-format, gfc-internal-format msgid "Cray Pointee at %C cannot be assumed shape array" -msgstr "Cray-utpekad vid %C kan inte vara förmodat formad vektor" +msgstr "Cray-utpekad vid %C kan inte vara förmodat formad vektor" #: fortran/decl.c:7619 #, gcc-internal-format, gfc-internal-format @@ -36564,17 +36567,17 @@ msgstr "Fortran 2003: ENUM och ENUMERATOR vid %C" #: fortran/decl.c:7652 #, gcc-internal-format, gfc-internal-format msgid "Enumerator exceeds the C integer type at %C" -msgstr "Uppräkningstypen överskrider C:s heltalstyp vid %C" +msgstr "Uppräkningstypen överskrider C:s heltalstyp vid %C" #: fortran/decl.c:7731 #, gcc-internal-format, gfc-internal-format msgid "ENUMERATOR %L not initialized with integer expression" -msgstr "ENUMERATOR %L är inte initierad med ett heltalsuttryck" +msgstr "ENUMERATOR %L är inte initierad med ett heltalsuttryck" #: fortran/decl.c:7779 #, gcc-internal-format, gfc-internal-format msgid "ENUM definition statement expected before %C" -msgstr "ENUM-definitionssats förväntades före %C" +msgstr "ENUM-definitionssats förväntades före %C" #: fortran/decl.c:7815 #, gcc-internal-format, gfc-internal-format @@ -36584,17 +36587,17 @@ msgstr "Syntaxfel i ENUMERATOR-definition vid %C" #: fortran/decl.c:7862 fortran/decl.c:7877 #, gcc-internal-format, gfc-internal-format msgid "Duplicate access-specifier at %C" -msgstr "Dubblerad åtkomstspecifikation vid %C" +msgstr "Dubblerad Ã¥tkomstspecifikation vid %C" #: fortran/decl.c:7897 #, gcc-internal-format, gfc-internal-format msgid "Binding attributes already specify passing, illegal NOPASS at %C" -msgstr "Bindningsattribut anger redan passing, otillåten NOPASS vid %C" +msgstr "Bindningsattribut anger redan passing, otillÃ¥ten NOPASS vid %C" #: fortran/decl.c:7917 #, gcc-internal-format, gfc-internal-format msgid "Binding attributes already specify passing, illegal PASS at %C" -msgstr "Bindningsattribut anger redan passing, otillåten PASS vid %C" +msgstr "Bindningsattribut anger redan passing, otillÃ¥ten PASS vid %C" #: fortran/decl.c:7944 #, gcc-internal-format, gfc-internal-format @@ -36614,37 +36617,37 @@ msgstr "Dubblerad DEFERRED vid %C" #: fortran/decl.c:7991 #, gcc-internal-format, gfc-internal-format msgid "Expected access-specifier at %C" -msgstr "Åtkomstspecificerare förväntades vid %C" +msgstr "Ã…tkomstspecificerare förväntades vid %C" #: fortran/decl.c:7993 #, gcc-internal-format, gfc-internal-format msgid "Expected binding attribute at %C" -msgstr "Bindningsattribut förväntades vid %C" +msgstr "Bindningsattribut förväntades vid %C" #: fortran/decl.c:8001 #, gcc-internal-format, gfc-internal-format msgid "NON_OVERRIDABLE and DEFERRED can't both appear at %C" -msgstr "NON_OVERRIDABLE och DEFERRED kan inte båda finnas vid %C" +msgstr "NON_OVERRIDABLE och DEFERRED kan inte bÃ¥da finnas vid %C" #: fortran/decl.c:8013 #, gcc-internal-format, gfc-internal-format msgid "POINTER attribute is required for procedure pointer component at %C" -msgstr "POINTER-attribut krävs för procedurpekarkomponenten vid %C" +msgstr "POINTER-attribut krävs för procedurpekarkomponenten vid %C" #: fortran/decl.c:8055 #, gcc-internal-format, gfc-internal-format msgid "Interface-name expected after '(' at %C" -msgstr "Gränssnittsnamn förväntades efter \"(\" vid %C" +msgstr "Gränssnittsnamn förväntades efter â€(†vid %C" #: fortran/decl.c:8061 #, gcc-internal-format, gfc-internal-format msgid "')' expected at %C" -msgstr "\")\" förväntades vid %C" +msgstr "â€)†förväntades vid %C" #: fortran/decl.c:8081 #, gcc-internal-format, gfc-internal-format msgid "Interface must be specified for DEFERRED binding at %C" -msgstr "Gränssnitt måste anges för DEFERRED bindning vid %C" +msgstr "Gränssnitt mÃ¥ste anges för DEFERRED bindning vid %C" #: fortran/decl.c:8086 #, gcc-internal-format, gfc-internal-format @@ -36654,7 +36657,7 @@ msgstr "PROCEDURE(interface) vid %C skulle vara deklarerat DEFERRED" #: fortran/decl.c:8109 #, gcc-internal-format, gfc-internal-format msgid "Expected binding name at %C" -msgstr "Bindningsnamn förväntades vid %C" +msgstr "Bindningsnamn förväntades vid %C" #: fortran/decl.c:8113 #, gcc-internal-format, gfc-internal-format @@ -36664,82 +36667,82 @@ msgstr "Fortran 2008: PROCEDURE-lista vid %C" #: fortran/decl.c:8126 #, gcc-internal-format, gfc-internal-format msgid "'=> target' is invalid for DEFERRED binding at %C" -msgstr "\"=> mål\" är ogiltigt för DEFERRED-bindning vid %C" +msgstr "â€=> mÃ¥l†är ogiltigt för DEFERRED-bindning vid %C" #: fortran/decl.c:8132 #, gcc-internal-format, gfc-internal-format msgid "'::' needed in PROCEDURE binding with explicit target at %C" -msgstr "\"::\" behövs i PROCEDURE-bindning med explicit mål vid %C" +msgstr "â€::†behövs i PROCEDURE-bindning med explicit mÃ¥l vid %C" #: fortran/decl.c:8142 #, gcc-internal-format, gfc-internal-format msgid "Expected binding target after '=>' at %C" -msgstr "Bindningsmål förväntades efter \"=>\" vid %C" +msgstr "BindningsmÃ¥l förväntades efter â€=>†vid %C" #: fortran/decl.c:8159 #, gcc-internal-format, gfc-internal-format msgid "Type '%s' containing DEFERRED binding at %C is not ABSTRACT" -msgstr "Typen \"%s\" som innehåller en DEFERRED-bindning vid %C är inte ABSTRACT" +msgstr "Typen â€%s†som innehÃ¥ller en DEFERRED-bindning vid %C är inte ABSTRACT" #: fortran/decl.c:8170 #, gcc-internal-format, gfc-internal-format msgid "There is already a procedure with binding name '%s' for the derived type '%s' at %C" -msgstr "Det finns redan en procedur med bindningsnamnet \"%s\" för den härledda typen \"%s\" vid %C" +msgstr "Det finns redan en procedur med bindningsnamnet â€%s†för den härledda typen â€%s†vid %C" #: fortran/decl.c:8219 #, gcc-internal-format, gfc-internal-format msgid "GENERIC at %C must be inside a derived-type CONTAINS" -msgstr "GENERIC vid %C måste vara inuti en härledd typs CONTAINS" +msgstr "GENERIC vid %C mÃ¥ste vara inuti en härledd typs CONTAINS" #: fortran/decl.c:8239 #, gcc-internal-format, gfc-internal-format msgid "Expected '::' at %C" -msgstr "\"::\" förväntades vid %C" +msgstr "â€::†förväntades vid %C" #: fortran/decl.c:8251 #, gcc-internal-format, gfc-internal-format msgid "Expected generic name or operator descriptor at %C" -msgstr "Generiskt namn eller operatorbeskrivare förväntades vid %C" +msgstr "Generiskt namn eller operatorbeskrivare förväntades vid %C" #: fortran/decl.c:8277 #, gcc-internal-format, gfc-internal-format msgid "Expected '=>' at %C" -msgstr "\"=>\" förväntades vid %C" +msgstr "â€=>†förväntades vid %C" #: fortran/decl.c:8319 #, gcc-internal-format, gfc-internal-format msgid "There's already a non-generic procedure with binding name '%s' for the derived type '%s' at %C" -msgstr "Det finns redan en icke-generisk procedur med bindningsnamnet \"%s\" för den härledda typen \"%s\" vid %C" +msgstr "Det finns redan en icke-generisk procedur med bindningsnamnet â€%s†för den härledda typen â€%s†vid %C" #: fortran/decl.c:8327 #, gcc-internal-format, gfc-internal-format msgid "Binding at %C must have the same access as already defined binding '%s'" -msgstr "Bindning vid %C måste ha samma åtkomst som den redan definierade bindningen \"%s\"" +msgstr "Bindning vid %C mÃ¥ste ha samma Ã¥tkomst som den redan definierade bindningen â€%sâ€" #: fortran/decl.c:8376 #, gcc-internal-format, gfc-internal-format msgid "Expected specific binding name at %C" -msgstr "Specifikt bindningsnamn förväntades vid %C" +msgstr "Specifikt bindningsnamn förväntades vid %C" #: fortran/decl.c:8386 #, gcc-internal-format, gfc-internal-format msgid "'%s' already defined as specific binding for the generic '%s' at %C" -msgstr "\"%s\" är redan definierat som en specifik bindning för den generiska \"%s\" vid %C" +msgstr "â€%s†är redan definierat som en specifik bindning för den generiska â€%s†vid %C" #: fortran/decl.c:8402 #, gcc-internal-format, gfc-internal-format msgid "Junk after GENERIC binding at %C" -msgstr "Skräp efter GENERIC-bindning vid %C" +msgstr "Skräp efter GENERIC-bindning vid %C" #: fortran/decl.c:8437 #, gcc-internal-format, gfc-internal-format msgid "FINAL declaration at %C must be inside a derived type CONTAINS section" -msgstr "FINAL-deklaration vid %C måsta vara inuti en härledd typs CONTAINS-sektion" +msgstr "FINAL-deklaration vid %C mÃ¥sta vara inuti en härledd typs CONTAINS-sektion" #: fortran/decl.c:8448 #, gcc-internal-format, gfc-internal-format msgid "Derived type declaration with FINAL at %C must be in the specification part of a MODULE" -msgstr "Härledd typdeklaration med FINAL vid %C måste vara med i specifikationsdelen av en MODULE" +msgstr "Härledd typdeklaration med FINAL vid %C mÃ¥ste vara med i specifikationsdelen av en MODULE" #: fortran/decl.c:8470 #, gcc-internal-format, gfc-internal-format @@ -36749,27 +36752,27 @@ msgstr "Tom FINAL vid %C" #: fortran/decl.c:8477 #, gcc-internal-format, gfc-internal-format msgid "Expected module procedure name at %C" -msgstr "Modulprocedurnamn förväntades vid %C" +msgstr "Modulprocedurnamn förväntades vid %C" #: fortran/decl.c:8487 #, gcc-internal-format, gfc-internal-format msgid "Expected ',' at %C" -msgstr "\",\" förväntades vid %C" +msgstr "â€,†förväntades vid %C" #: fortran/decl.c:8493 #, gcc-internal-format, gfc-internal-format msgid "Unknown procedure name \"%s\" at %C" -msgstr "Okänt procedurnamn \"%s\" vid %C" +msgstr "Okänt procedurnamn â€%s†vid %C" #: fortran/decl.c:8507 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %C is already defined as FINAL procedure!" -msgstr "\"%s\" vid %C är redan definierad som FINAL procedur" +msgstr "â€%s†vid %C är redan definierad som FINAL procedur" #: fortran/decl.c:8576 #, gcc-internal-format, gfc-internal-format msgid "Unknown attribute in !GCC$ ATTRIBUTES statement at %C" -msgstr "Okänt attribut i !GCC$ ATTRIBUTES-sats vid %C" +msgstr "Okänt attribut i !GCC$ ATTRIBUTES-sats vid %C" #: fortran/decl.c:8623 #, gcc-internal-format, gfc-internal-format @@ -36784,7 +36787,7 @@ msgstr "Syntaxfel i !GCC$ ATTRIBUTES-sats vid %C" #: fortran/dependency.c:720 #, gcc-internal-format, gfc-internal-format msgid "INTENT(%s) actual argument at %L might interfere with actual argument at %L." -msgstr "Aktuellt INTENT(%s)-argument vid %L kan störa det aktuella argumentet vid %L." +msgstr "Aktuellt INTENT(%s)-argument vid %L kan störa det aktuella argumentet vid %L." #: fortran/error.c:301 #, gcc-internal-format, gfc-internal-format @@ -36799,7 +36802,7 @@ msgstr "<Under initiering>\n" #: fortran/error.c:719 #, gcc-internal-format, gfc-internal-format msgid "Error count reached limit of %d." -msgstr "Felantal nådde gränsen vid %d." +msgstr "Felantal nÃ¥dde gränsen vid %d." #: fortran/error.c:975 #, gcc-internal-format @@ -36809,167 +36812,167 @@ msgstr "Internt fel vid (1):" #: fortran/expr.c:1229 #, gcc-internal-format, gfc-internal-format msgid "Index in dimension %d is out of bounds at %L" -msgstr "Index i dimension %d är utanför gränsen vid %L" +msgstr "Index i dimension %d är utanför gränsen vid %L" #: fortran/expr.c:1408 fortran/expr.c:1459 #, gcc-internal-format, gfc-internal-format msgid "index in dimension %d is out of bounds at %L" -msgstr "index i dimension %d är utanför gränsen vid %L" +msgstr "index i dimension %d är utanför gränsen vid %L" #: fortran/expr.c:2073 #, gcc-internal-format, gfc-internal-format msgid "elemental function arguments at %C are not compliant" -msgstr "argument till elementär funktion vid %C följer inte standarden" +msgstr "argument till elementär funktion vid %C följer inte standarden" #: fortran/expr.c:2117 #, gcc-internal-format, gfc-internal-format msgid "Numeric or CHARACTER operands are required in expression at %L" -msgstr "Numeriska eller CHARACTER-operander krävs i uttrycket vid %L" +msgstr "Numeriska eller CHARACTER-operander krävs i uttrycket vid %L" #: fortran/expr.c:2142 #, gcc-internal-format, gfc-internal-format msgid "Concatenation operator in expression at %L must have two CHARACTER operands" -msgstr "Konkateneringsoperatorn i uttrycket vid %L måste ha två CHARACTER-operander" +msgstr "Konkateneringsoperatorn i uttrycket vid %L mÃ¥ste ha tvÃ¥ CHARACTER-operander" #: fortran/expr.c:2149 #, gcc-internal-format, gfc-internal-format msgid "Concat operator at %L must concatenate strings of the same kind" -msgstr "Konkateneringsoperatorn vid %L måste konkatenera strängar av samma sort" +msgstr "Konkateneringsoperatorn vid %L mÃ¥ste konkatenera strängar av samma sort" #: fortran/expr.c:2159 #, gcc-internal-format, gfc-internal-format msgid ".NOT. operator in expression at %L must have a LOGICAL operand" -msgstr ".NOT.-operatorn i uttrycket vid %L måste ha en LOGICAL-operand" +msgstr ".NOT.-operatorn i uttrycket vid %L mÃ¥ste ha en LOGICAL-operand" #: fortran/expr.c:2175 #, gcc-internal-format, gfc-internal-format msgid "LOGICAL operands are required in expression at %L" -msgstr "LOGICAL-operander krävs i uttryck vid %L" +msgstr "LOGICAL-operander krävs i uttryck vid %L" #: fortran/expr.c:2186 #, gcc-internal-format, gfc-internal-format msgid "Only intrinsic operators can be used in expression at %L" -msgstr "Endast inbyggda operatorer kan användas i uttryck vid %L" +msgstr "Endast inbyggda operatorer kan användas i uttryck vid %L" #: fortran/expr.c:2194 #, gcc-internal-format, gfc-internal-format msgid "Numeric operands are required in expression at %L" -msgstr "Numeriska operander krävs i uttryck vid %L" +msgstr "Numeriska operander krävs i uttryck vid %L" #: fortran/expr.c:2217 #, gcc-internal-format, gfc-internal-format msgid "Invalid initialization expression for ALLOCATABLE component '%s' in structure constructor at %L" -msgstr "Ogiltigt initieringsuttryck för ALLOCATABLE-komponent \"%s\" i postkonstrueraren vid %L" +msgstr "Ogiltigt initieringsuttryck för ALLOCATABLE-komponent â€%s†i postkonstrueraren vid %L" #: fortran/expr.c:2315 #, gcc-internal-format, gfc-internal-format msgid "Assumed or deferred character length variable '%s' in constant expression at %L" -msgstr "Teckenlängdsvariabel \"%s\" med förmodad eller fördröjd längd i konstant uttryck vid %L" +msgstr "Teckenlängdsvariabel â€%s†med förmodad eller fördröjd längd i konstant uttryck vid %L" #: fortran/expr.c:2381 #, gcc-internal-format, gfc-internal-format msgid "transformational intrinsic '%s' at %L is not permitted in an initialization expression" -msgstr "transformerande inbyggd \"%s\" vid %L är inte tillåten i ett initieringsuttryck" +msgstr "transformerande inbyggd â€%s†vid %L är inte tillÃ¥ten i ett initieringsuttryck" #: fortran/expr.c:2412 #, gcc-internal-format, gfc-internal-format msgid "Extension: Evaluation of nonstandard initialization expression at %L" -msgstr "Utökning: Beräkning av ett initieringuttryck utanför standarden vid %L" +msgstr "Utökning: Beräkning av ett initieringuttryck utanför standarden vid %L" #: fortran/expr.c:2468 #, gcc-internal-format, gfc-internal-format msgid "Function '%s' in initialization expression at %L must be an intrinsic function" -msgstr "Funktionen \"%s\" i initieringsuttrycket vid %L måste vara en inbyggd funktion" +msgstr "Funktionen â€%s†i initieringsuttrycket vid %L mÃ¥ste vara en inbyggd funktion" #: fortran/expr.c:2480 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic function '%s' at %L is not permitted in an initialization expression" -msgstr "Inbyggd funktion \"%s\" vid %L är inte tillåten i ett initieringsuttryck" +msgstr "Inbyggd funktion â€%s†vid %L är inte tillÃ¥ten i ett initieringsuttryck" #: fortran/expr.c:2515 #, gcc-internal-format, gfc-internal-format msgid "PARAMETER '%s' is used at %L before its definition is complete" -msgstr "PARAMETER \"%s\" används vid %L före dess definition är komplett" +msgstr "PARAMETER â€%s†används vid %L före dess definition är komplett" #: fortran/expr.c:2535 #, gcc-internal-format, gfc-internal-format msgid "Assumed size array '%s' at %L is not permitted in an initialization expression" -msgstr "Vektor \"%s\" med förmodad storlek vid %L är inte tillåten i ett initieringsuttryck" +msgstr "Vektor â€%s†med förmodad storlek vid %L är inte tillÃ¥ten i ett initieringsuttryck" #: fortran/expr.c:2541 #, gcc-internal-format, gfc-internal-format msgid "Assumed shape array '%s' at %L is not permitted in an initialization expression" -msgstr "Vektor \"%s\" med förmodad form vid %L är inte tillåten i ett initieringsuttryck" +msgstr "Vektor â€%s†med förmodad form vid %L är inte tillÃ¥ten i ett initieringsuttryck" #: fortran/expr.c:2547 #, gcc-internal-format, gfc-internal-format msgid "Deferred array '%s' at %L is not permitted in an initialization expression" -msgstr "Fördröjd vektor \"%s\" vid %L är inte tillåten i ett initieringsuttryck" +msgstr "Fördröjd vektor â€%s†vid %L är inte tillÃ¥ten i ett initieringsuttryck" #: fortran/expr.c:2553 #, gcc-internal-format, gfc-internal-format msgid "Array '%s' at %L is a variable, which does not reduce to a constant expression" -msgstr "Vektor \"%s\" vid %L är en variabel, som inte reduceras till ett konstant uttryck" +msgstr "Vektor â€%s†vid %L är en variabel, som inte reduceras till ett konstant uttryck" #: fortran/expr.c:2563 #, gcc-internal-format, gfc-internal-format msgid "Parameter '%s' at %L has not been declared or is a variable, which does not reduce to a constant expression" -msgstr "Parameter \"%s\" vid %L har inte deklarerats eller är en variabel, som inte reduceras till ett konstant uttryck" +msgstr "Parameter â€%s†vid %L har inte deklarerats eller är en variabel, som inte reduceras till ett konstant uttryck" #: fortran/expr.c:2716 #, gcc-internal-format, gfc-internal-format msgid "Specification function '%s' at %L cannot be a statement function" -msgstr "Specifikationsfunktionen \"%s\" vid %L kan inte vara en satsfunktion" +msgstr "Specifikationsfunktionen â€%s†vid %L kan inte vara en satsfunktion" #: fortran/expr.c:2723 #, gcc-internal-format, gfc-internal-format msgid "Specification function '%s' at %L cannot be an internal function" -msgstr "Specifikationsfunktionen \"%s\" vid %L kan inte vara en intern funktion" +msgstr "Specifikationsfunktionen â€%s†vid %L kan inte vara en intern funktion" #: fortran/expr.c:2730 #, gcc-internal-format, gfc-internal-format msgid "Specification function '%s' at %L must be PURE" -msgstr "Specifikationsfunktionen \"%s\" vid %L måste vara PURE" +msgstr "Specifikationsfunktionen â€%s†vid %L mÃ¥ste vara PURE" #: fortran/expr.c:2737 #, gcc-internal-format, gfc-internal-format msgid "Specification function '%s' at %L cannot be RECURSIVE" -msgstr "Specifikationsfunktionen \"%s\" vid %L får inte vara RECURSIVE" +msgstr "Specifikationsfunktionen â€%s†vid %L fÃ¥r inte vara RECURSIVE" #: fortran/expr.c:2871 #, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' not allowed in expression at %L" -msgstr "Attrappvariabeln \"%s\" är inte tillåten i uttrycket vid %L" +msgstr "Attrappvariabeln â€%s†är inte tillÃ¥ten i uttrycket vid %L" #: fortran/expr.c:2878 #, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' at %L cannot be OPTIONAL" -msgstr "Attrappargumentet \"%s\" vid %L får inte vara OPTIONAL" +msgstr "Attrappargumentet â€%s†vid %L fÃ¥r inte vara OPTIONAL" #: fortran/expr.c:2885 #, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' at %L cannot be INTENT(OUT)" -msgstr "Attrappargumentet \"%s\" vid %L får inte vara INTENT(OUT)" +msgstr "Attrappargumentet â€%s†vid %L fÃ¥r inte vara INTENT(OUT)" #: fortran/expr.c:2916 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' cannot appear in the expression at %L" -msgstr "Variabeln \"%s\" kan inte förekomma i uttrycket vid %L" +msgstr "Variabeln â€%s†kan inte förekomma i uttrycket vid %L" #: fortran/expr.c:2967 #, gcc-internal-format, gfc-internal-format msgid "Expression at %L must be of INTEGER type, found %s" -msgstr "Uttryck vid %L måste vara av INTEGER-typ, hittade %s" +msgstr "Uttryck vid %L mÃ¥ste vara av INTEGER-typ, hittade %s" #: fortran/expr.c:2979 #, gcc-internal-format, gfc-internal-format msgid "Function '%s' at %L must be PURE" -msgstr "Funktionen \"%s\" vid %L måste vara PURE" +msgstr "Funktionen â€%s†vid %L mÃ¥ste vara PURE" #: fortran/expr.c:2988 #, gcc-internal-format, gfc-internal-format msgid "Expression at %L must be scalar" -msgstr "Uttryck vid %L måste vara skalärt" +msgstr "Uttryck vid %L mÃ¥ste vara skalärt" #: fortran/expr.c:3022 #, gcc-internal-format, gfc-internal-format @@ -36979,12 +36982,12 @@ msgstr "Inkompatibla ordningar i %s (%d och %d) vid %L" #: fortran/expr.c:3036 #, gcc-internal-format, gfc-internal-format msgid "Different shape for %s at %L on dimension %d (%d and %d)" -msgstr "Olika form för %s vid %L på dimension %d (%d och %d)" +msgstr "Olika form för %s vid %L pÃ¥ dimension %d (%d och %d)" #: fortran/expr.c:3125 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L is not a VALUE" -msgstr "\"%s\" vid %L är inte ett VALUE" +msgstr "â€%s†vid %L är inte ett VALUE" #: fortran/expr.c:3132 #, gcc-internal-format, gfc-internal-format @@ -36994,102 +36997,102 @@ msgstr "Inkompatibla ordningar %d och %d i tilldelning vid %L" #: fortran/expr.c:3139 #, gcc-internal-format, gfc-internal-format msgid "Variable type is UNKNOWN in assignment at %L" -msgstr "Variabeltypen är OKÄND i tilldelning vid %L" +msgstr "Variabeltypen är OKÄND i tilldelning vid %L" #: fortran/expr.c:3151 #, gcc-internal-format, gfc-internal-format msgid "NULL appears on right-hand side in assignment at %L" -msgstr "NULL finns på högersidan i tilldelning vid %L" +msgstr "NULL finns pÃ¥ högersidan i tilldelning vid %L" #: fortran/expr.c:3161 #, gcc-internal-format, gfc-internal-format msgid "POINTER valued function appears on right-hand side of assignment at %L" -msgstr "POINTER-värd funktion förekommer på högersidan av tilldelning vid %L" +msgstr "POINTER-värd funktion förekommer pÃ¥ högersidan av tilldelning vid %L" #: fortran/expr.c:3171 #, gcc-internal-format, gfc-internal-format msgid "Extension: BOZ literal at %L used to initialize non-integer variable '%s'" -msgstr "Utökning: BOZ-literal vid %L används för att initiera icke-heltalsvariabeln \"%s\"" +msgstr "Utökning: BOZ-literal vid %L används för att initiera icke-heltalsvariabeln â€%sâ€" #: fortran/expr.c:3177 fortran/resolve.c:9109 #, gcc-internal-format, gfc-internal-format msgid "Extension: BOZ literal at %L outside a DATA statement and outside INT/REAL/DBLE/CMPLX" -msgstr "Utökning: BOZ-literal vid %L utanför en DATA-sats och utanför INT/REAL/DBLE/CMPLX" +msgstr "Utökning: BOZ-literal vid %L utanför en DATA-sats och utanför INT/REAL/DBLE/CMPLX" #: fortran/expr.c:3187 fortran/resolve.c:9119 #, gcc-internal-format, gfc-internal-format msgid "BOZ literal at %L is bitwise transferred non-integer symbol '%s'" -msgstr "BOZ-literal vid %L är bitvis överförd icke-heltalssymbol \"%s\"" +msgstr "BOZ-literal vid %L är bitvis överförd icke-heltalssymbol â€%sâ€" #: fortran/expr.c:3195 fortran/resolve.c:9128 #, gcc-internal-format, gfc-internal-format msgid "Arithmetic underflow of bit-wise transferred BOZ at %L. This check can be disabled with the option -fno-range-check" -msgstr "Aritmetiskt underspill av bitvis överförd BOZ vid %L. Denna kontroll kan avaktiveras med flaggan -fno-range-check" +msgstr "Aritmetiskt underspill av bitvis överförd BOZ vid %L. Denna kontroll kan avaktiveras med flaggan -fno-range-check" #: fortran/expr.c:3199 fortran/resolve.c:9132 #, gcc-internal-format, gfc-internal-format msgid "Arithmetic overflow of bit-wise transferred BOZ at %L. This check can be disabled with the option -fno-range-check" -msgstr "Aritmetiskt överspill vid bitvis överförd BOZ vid %L. Denna kontroll kan avaktiveras med flaggan -fno-range-check" +msgstr "Aritmetiskt överspill vid bitvis överförd BOZ vid %L. Denna kontroll kan avaktiveras med flaggan -fno-range-check" #: fortran/expr.c:3203 fortran/resolve.c:9136 #, gcc-internal-format, gfc-internal-format msgid "Arithmetic NaN of bit-wise transferred BOZ at %L. This check can be disabled with the option -fno-range-check" -msgstr "Aritmetisk NaN vid bitvis överförd BOZ vid %L. Denna kontroll kan avaktiveras med flaggan -fno-range-check" +msgstr "Aritmetisk NaN vid bitvis överförd BOZ vid %L. Denna kontroll kan avaktiveras med flaggan -fno-range-check" #: fortran/expr.c:3235 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Change of value in conversion from %s to %s at %L" -msgstr "Möjligändring avvärde vid konvertering från %s till %s vid %L" +msgstr "Ändring av värde vid konvertering frÃ¥n %s till %s vid %L" #: fortran/expr.c:3243 fortran/intrinsic.c:4335 fortran/intrinsic.c:4347 #, gcc-internal-format, gfc-internal-format msgid "Possible change of value in conversion from %s to %s at %L" -msgstr "Möjligändring avvärde vid konvertering från %s till %s vid %L" +msgstr "Möjlig ändring av värde vid konvertering frÃ¥n %s till %s vid %L" #: fortran/expr.c:3251 fortran/intrinsic.c:4330 fortran/intrinsic.c:4356 #, gcc-internal-format, gfc-internal-format msgid "Conversion from %s to %s at %L" -msgstr "Konvertering från %s till %s vid %L" +msgstr "Konvertering frÃ¥n %s till %s vid %L" #: fortran/expr.c:3272 #, gcc-internal-format, gfc-internal-format msgid "Incompatible types in DATA statement at %L; attempted conversion of %s to %s" -msgstr "Inkompatibla typer i DATA-sats vid %L, försökte med konvertering av %s till %s" +msgstr "Inkompatibla typer i DATA-sats vid %L, försökte med konvertering av %s till %s" #: fortran/expr.c:3308 #, gcc-internal-format, gfc-internal-format msgid "Pointer assignment target is not a POINTER at %L" -msgstr "Pekartilldelningsmålet är inte en POINTER vid %L" +msgstr "PekartilldelningsmÃ¥let är inte en POINTER vid %L" #: fortran/expr.c:3317 #, gcc-internal-format, gfc-internal-format msgid "'%s' in the pointer assignment at %L cannot be an l-value since it is a procedure" -msgstr "\"%s\" i pekartilldelningen vid %L kan inte vara ett l-värde eftersom det är en procedur" +msgstr "â€%s†i pekartilldelningen vid %L kan inte vara ett l-värde eftersom det är en procedur" #: fortran/expr.c:3340 #, gcc-internal-format, gfc-internal-format msgid "Expected bounds specification for '%s' at %L" -msgstr "Begränsningsspecifikation för \"%s\" förväntades vid %L" +msgstr "Begränsningsspecifikation för â€%s†förväntades vid %L" #: fortran/expr.c:3345 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Bounds specification for '%s' in pointer assignment at %L" -msgstr "Fortran 2003: Begränsningsspecifikation för \"%s\" i pekartilldelning vid %L" +msgstr "Fortran 2003: Begränsningsspecifikation för â€%s†i pekartilldelning vid %L" #: fortran/expr.c:3359 #, gcc-internal-format, gfc-internal-format msgid "Lower bound has to be present at %L" -msgstr "Undre gräns måste finnas vid %L" +msgstr "Undre gräns mÃ¥ste finnas vid %L" #: fortran/expr.c:3365 #, gcc-internal-format, gfc-internal-format msgid "Stride must not be present at %L" -msgstr "Steg får inte finnas vid %L" +msgstr "Steg fÃ¥r inte finnas vid %L" #: fortran/expr.c:3377 #, gcc-internal-format, gfc-internal-format msgid "Either all or none of the upper bounds must be specified at %L" -msgstr "Antingen alla eller ingen av de övre gränserna måste anges vid %L" +msgstr "Antingen alla eller ingen av de övre gränserna mÃ¥ste anges vid %L" #: fortran/expr.c:3403 #, gcc-internal-format, gfc-internal-format @@ -37104,37 +37107,37 @@ msgstr "Ogiltig procedurpekartilldelning vid %L" #: fortran/expr.c:3430 #, gcc-internal-format, gfc-internal-format msgid "Abstract interface '%s' is invalid in procedure pointer assignment at %L" -msgstr "Abstrakt gränssnitt \"%s\" är ogiltigt i procedurpekartilldelning vid %L" +msgstr "Abstrakt gränssnitt â€%s†är ogiltigt i procedurpekartilldelning vid %L" #: fortran/expr.c:3440 #, gcc-internal-format, gfc-internal-format msgid "Statement function '%s' is invalid in procedure pointer assignment at %L" -msgstr "Satsfunktion \"%s\" är ogiltigt i procedurpekartilldelning vid %L" +msgstr "Satsfunktion â€%s†är ogiltigt i procedurpekartilldelning vid %L" #: fortran/expr.c:3446 #, gcc-internal-format, gfc-internal-format msgid "Internal procedure '%s' is invalid in procedure pointer assignment at %L" -msgstr "Intern procedur \"%s\" är ogiltigt i procedurpekartilldelning vid %L" +msgstr "Intern procedur â€%s†är ogiltigt i procedurpekartilldelning vid %L" #: fortran/expr.c:3454 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Nonintrinsic elemental procedure '%s' is invalid in procedure pointer assigment at %L" -msgstr "Intern procedur \"%s\" är ogiltigt i procedurpekartilldelning vid %L" +msgstr "Den ej inbyggda elementära proceduren â€%s†är ogiltigt i procedurpekartilldelning vid %L" #: fortran/expr.c:3477 #, gcc-internal-format, gfc-internal-format msgid "Mismatch in the procedure pointer assignment at %L: mismatch in the calling convention" -msgstr "Det stämmer inte i procedurpekartilldelningen vid %L: anropskonventionen stämmer inte" +msgstr "Det stämmer inte i procedurpekartilldelningen vid %L: anropskonventionen stämmer inte" #: fortran/expr.c:3508 #, gcc-internal-format, gfc-internal-format msgid "Interface mismatch in procedure pointer assignment at %L: %s" -msgstr "Gränssnitten stämmer inte överens i procedurpekartilldelning vid %L: %s" +msgstr "Gränssnitten stämmer inte överens i procedurpekartilldelning vid %L: %s" #: fortran/expr.c:3518 #, gcc-internal-format, gfc-internal-format msgid "Different types in pointer assignment at %L; attempted assignment of %s to %s" -msgstr "Olika typer i pekartilldelning vid %L, försökte med tilldelning av %s till %s" +msgstr "Olika typer i pekartilldelning vid %L, försökte med tilldelning av %s till %s" #: fortran/expr.c:3526 #, gcc-internal-format, gfc-internal-format @@ -37149,67 +37152,67 @@ msgstr "Olika ordning i pekartilldelning vid %L" #: fortran/expr.c:3552 #, gcc-internal-format, gfc-internal-format msgid "Rank remapping target is smaller than size of the pointer (%ld < %ld) at %L" -msgstr "Målet för översättning av ordningen är mindre än storleken på pekaren (%ld < %ld) vid %L" +msgstr "MÃ¥let för översättning av ordningen är mindre än storleken pÃ¥ pekaren (%ld < %ld) vid %L" #: fortran/expr.c:3565 #, gcc-internal-format, gfc-internal-format msgid "Rank remapping target must be rank 1 or simply contiguous at %L" -msgstr "Målet för översättning av målet måste ha ording 1 eller vara enkelt sammanhängande vid %L" +msgstr "MÃ¥let för översättning av mÃ¥let mÃ¥ste ha ording 1 eller vara enkelt sammanhängande vid %L" #: fortran/expr.c:3569 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Rank remapping target is not rank 1 at %L" -msgstr "Fortran 2008: Målet för översättning av ordning är inte av ordning 1 vid %L" +msgstr "Fortran 2008: MÃ¥let för översättning av ordning är inte av ordning 1 vid %L" #: fortran/expr.c:3594 #, gcc-internal-format, gfc-internal-format msgid "Target expression in pointer assignment at %L must deliver a pointer result" -msgstr "Måluttryck i pekartilldelning vid %L måste leverera ett pekarresultat" +msgstr "MÃ¥luttryck i pekartilldelning vid %L mÃ¥ste leverera ett pekarresultat" #: fortran/expr.c:3602 #, gcc-internal-format, gfc-internal-format msgid "Pointer assignment target is neither TARGET nor POINTER at %L" -msgstr "Pekartilldelningsmål är vare sig TARGET eller POINTER vid %L" +msgstr "PekartilldelningsmÃ¥l är vare sig TARGET eller POINTER vid %L" #: fortran/expr.c:3609 #, gcc-internal-format, gfc-internal-format msgid "Bad target in pointer assignment in PURE procedure at %L" -msgstr "Felaktigt mål i pekartilldelning i PURE-procedur vid %L" +msgstr "Felaktigt mÃ¥l i pekartilldelning i PURE-procedur vid %L" #: fortran/expr.c:3619 #, gcc-internal-format, gfc-internal-format msgid "Pointer assignment with vector subscript on rhs at %L" -msgstr "Pekartilldelning med vektorindexering på högersidan vid %L" +msgstr "Pekartilldelning med vektorindexering pÃ¥ högersidan vid %L" #: fortran/expr.c:3627 #, gcc-internal-format, gfc-internal-format msgid "Pointer assignment target has PROTECTED attribute at %L" -msgstr "Pekartilldelningsmålet har attributet PROTECTED vid %L" +msgstr "PekartilldelningsmÃ¥let har attributet PROTECTED vid %L" #: fortran/expr.c:3640 #, gcc-internal-format, gfc-internal-format msgid "Data target at %L shall not have a coindex" -msgstr "Datamålet vid %L får inte ha co-index" +msgstr "DatamÃ¥let vid %L fÃ¥r inte ha co-index" #: fortran/expr.c:3688 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %C must not be ALLOCATABLE " -msgstr "Pekarinitieringens mål vid %C får inte vara ALLOCATABLE " +msgstr "Pekarinitieringens mÃ¥l vid %C fÃ¥r inte vara ALLOCATABLE " #: fortran/expr.c:3694 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %C must have the TARGET attribute" -msgstr "Målet för perkarinitieringen vid %C måste ha attributet TARGET" +msgstr "MÃ¥let för perkarinitieringen vid %C mÃ¥ste ha attributet TARGET" #: fortran/expr.c:3700 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %C must have the SAVE attribute" -msgstr "Målet för pekarinitieringen vid %C måste ha attributet SAVE" +msgstr "MÃ¥let för pekarinitieringen vid %C mÃ¥ste ha attributet SAVE" #: fortran/expr.c:3712 #, gcc-internal-format, gfc-internal-format msgid "Procedure pointer initialization target at %L may not be a procedure pointer" -msgstr "Procedurpekarinitieringsmål vid %L får inte vara en procedurpekare" +msgstr "ProcedurpekarinitieringsmÃ¥l vid %L fÃ¥r inte vara en procedurpekare" #: fortran/expr.c:4587 #, gcc-internal-format, gfc-internal-format @@ -37224,12 +37227,12 @@ msgstr "Icke variabelt uttryck i variabeldefinitionssammanhang (%s) vid %L" #: fortran/expr.c:4603 #, gcc-internal-format, gfc-internal-format msgid "Named constant '%s' in variable definition context (%s) at %L" -msgstr "Namngiven konstant \"%s\" i variabeldefinitionssammanhang (%s) vid %L" +msgstr "Namngiven konstant â€%s†i variabeldefinitionssammanhang (%s) vid %L" #: fortran/expr.c:4612 #, gcc-internal-format, gfc-internal-format msgid "'%s' in variable definition context (%s) at %L is not a variable" -msgstr "\"%s\" i variabeldefinitionssammanhang (%s) vid %L är inte en variabel" +msgstr "â€%s†i variabeldefinitionssammanhang (%s) vid %L är inte en variabel" #: fortran/expr.c:4623 #, gcc-internal-format, gfc-internal-format @@ -37237,76 +37240,76 @@ msgid "Non-POINTER in pointer association context (%s) at %L" msgstr "Icke-POINTER i pekarenassociationssammanhang (%s) vid %L" #: fortran/expr.c:4636 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "LOCK_TYPE in variable definition context (%s) at %L" -msgstr "Namngiven konstant \"%s\" i variabeldefinitionssammanhang (%s) vid %L" +msgstr "LOCK_TYPE i variabeldefinitionssammanhang (%s) vid %L" #: fortran/expr.c:4658 #, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' with INTENT(IN) in pointer association context (%s) at %L" -msgstr "Attrappargument \"%s\" med INTENT(IN) i pekarassociationssammanhang (%s) vid %L" +msgstr "Attrappargument â€%s†med INTENT(IN) i pekarassociationssammanhang (%s) vid %L" #: fortran/expr.c:4666 #, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' with INTENT(IN) in variable definition context (%s) at %L" -msgstr "Attrappargument \"%s\" med INTENT(IN) i variabeldefinitionssammanhang (%s) vid %L" +msgstr "Attrappargument â€%s†med INTENT(IN) i variabeldefinitionssammanhang (%s) vid %L" #: fortran/expr.c:4679 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' is PROTECTED and can not appear in a pointer association context (%s) at %L" -msgstr "Variabeln \"%s\" är PROTECTED och kan inte förekomma i ett pekarassociationssammanhang (%s) vid %L" +msgstr "Variabeln â€%s†är PROTECTED och kan inte förekomma i ett pekarassociationssammanhang (%s) vid %L" #: fortran/expr.c:4687 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' is PROTECTED and can not appear in a variable definition context (%s) at %L" -msgstr "Variabeln \"%s\" är PROTECTED och kan inte förekomma i ett variabeldefinitionssammanhang (%s) vid %L" +msgstr "Variabeln â€%s†är PROTECTED och kan inte förekomma i ett variabeldefinitionssammanhang (%s) vid %L" #: fortran/expr.c:4699 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' can not appear in a variable definition context (%s) at %L in PURE procedure" -msgstr "Variabeln \"%s\" kan inte förekomma i ett variabeldefinitionssammanhang (%s) vid %L" +msgstr "Variabeln â€%s†kan inte förekomma i ett variabeldefinitionssammanhang (%s) vid %L" #: fortran/expr.c:4758 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L associated to vector-indexed target can not be used in a variable definition context (%s)" -msgstr "\"%s\" vid %L som är associerad med vektorindexeradt mål kan inte användas i ett variabeldefinitionssammanhang (%s)" +msgstr "â€%s†vid %L som är associerad med vektorindexeradt mÃ¥l kan inte användas i ett variabeldefinitionssammanhang (%s)" #: fortran/expr.c:4762 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L associated to expression can not be used in a variable definition context (%s)" -msgstr "\"%s\" vid %L som är associerad med uttryck kan inte användas i ett variabeldefinitionssammanhang (%s)" +msgstr "â€%s†vid %L som är associerad med uttryck kan inte användas i ett variabeldefinitionssammanhang (%s)" #: fortran/expr.c:4774 #, gcc-internal-format, gfc-internal-format msgid "Associate-name '%s' can not appear in a variable definition context (%s) at %L because its target at %L can not, either" -msgstr "Associationsnamn \"%s\" kan inte förekomma i ett variabeldefinitionssammanhang (%s) vid %L eftersom dess mål vid %L inte heller kan" +msgstr "Associationsnamn â€%s†kan inte förekomma i ett variabeldefinitionssammanhang (%s) vid %L eftersom dess mÃ¥l vid %L inte heller kan" #: fortran/f95-lang.c:222 #, gcc-internal-format msgid "Unexpected type in truthvalue_conversion" -msgstr "Oväntad typ i truthvalue_conversion" +msgstr "Oväntad typ i truthvalue_conversion" #: fortran/f95-lang.c:284 #, gcc-internal-format, gfc-internal-format msgid "can't open input file: %s" -msgstr "Kan inte öppna indatafil: %s" +msgstr "Kan inte öppna indatafil: %s" #: fortran/frontend-passes.c:334 fortran/trans-array.c:1024 #: fortran/trans-array.c:5756 fortran/trans-array.c:7002 #: fortran/trans-intrinsic.c:5422 #, gcc-internal-format, gfc-internal-format msgid "Creating array temporary at %L" -msgstr "Skapar vektortemporär vid %L" +msgstr "Skapar vektortemporär vid %L" #: fortran/frontend-passes.c:357 fortran/frontend-passes.c:360 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Removing call to function '%s' at %L" -msgstr "Returvärdet för funktionen \"%s\" vid %L är inte satt" +msgstr "Tar bort anrop av funktionen â€%s†vid %L" #: fortran/gfortranspec.c:170 #, gcc-internal-format msgid "overflowed output arg list for %qs" -msgstr "spill i utargumentlistan för %qs" +msgstr "spill i utargumentlistan för %qs" #: fortran/gfortranspec.c:330 #, gcc-internal-format @@ -37321,12 +37324,12 @@ msgstr "Syntaxfel i generisk specifikation vid %C" #: fortran/interface.c:203 #, gcc-internal-format, gfc-internal-format msgid "Syntax error: Trailing garbage in INTERFACE statement at %C" -msgstr "Syntaxfel: Avslutande skräp i INTERFACE-sats vid %C" +msgstr "Syntaxfel: Avslutande skräp i INTERFACE-sats vid %C" #: fortran/interface.c:222 #, gcc-internal-format, gfc-internal-format msgid "Dummy procedure '%s' at %C cannot have a generic interface" -msgstr "Attrapprocedur \"%s\" vid %C kan inte ha generiskt gränssnitt" +msgstr "Attrapprocedur â€%s†vid %C kan inte ha generiskt gränssnitt" #: fortran/interface.c:255 #, gcc-internal-format, gfc-internal-format @@ -37341,102 +37344,102 @@ msgstr "Syntaxfel i ABSTRACT INTERFACE-sats vid %C" #: fortran/interface.c:294 #, gcc-internal-format, gfc-internal-format msgid "Syntax error: Trailing garbage in END INTERFACE statement at %C" -msgstr "Syntaxfel: Avslutande skräp i END INTERFACE-sats vid %C" +msgstr "Syntaxfel: Avslutande skräp i END INTERFACE-sats vid %C" #: fortran/interface.c:307 #, gcc-internal-format, gfc-internal-format msgid "Expected a nameless interface at %C" -msgstr "Förväntade ett namnlöst gränssnitt vid %C" +msgstr "Förväntade ett namnlöst gränssnitt vid %C" #: fortran/interface.c:320 #, gcc-internal-format, gfc-internal-format msgid "Expected 'END INTERFACE ASSIGNMENT (=)' at %C" -msgstr "\"END INTERFACE ASSIGNMENT (=)\" förväntades vid %C" +msgstr "â€END INTERFACE ASSIGNMENT (=)†förväntades vid %C" #: fortran/interface.c:350 #, gcc-internal-format, gfc-internal-format msgid "Expecting 'END INTERFACE OPERATOR (%s)' at %C, but got %s" -msgstr "\"END INTERFACE OPERATOR (%s)\" förväntades vid %C, men fick %s" +msgstr "â€END INTERFACE OPERATOR (%s)†förväntades vid %C, men fick %s" #: fortran/interface.c:364 #, gcc-internal-format, gfc-internal-format msgid "Expecting 'END INTERFACE OPERATOR (.%s.)' at %C" -msgstr "\"END INTERFACE OPERATOR (.%s.)\" förväntades vid %C" +msgstr "â€END INTERFACE OPERATOR (.%s.)†förväntades vid %C" #: fortran/interface.c:375 #, gcc-internal-format, gfc-internal-format msgid "Expecting 'END INTERFACE %s' at %C" -msgstr "\"END INTERFACE %s\" förväntades vid %C" +msgstr "â€END INTERFACE %s†förväntades vid %C" #: fortran/interface.c:607 #, gcc-internal-format, gfc-internal-format msgid "Alternate return cannot appear in operator interface at %L" -msgstr "Alternativ retur får inte förekomma i operatorgränssnitt vid %L" +msgstr "Alternativ retur fÃ¥r inte förekomma i operatorgränssnitt vid %L" #: fortran/interface.c:635 #, gcc-internal-format, gfc-internal-format msgid "Operator interface at %L has the wrong number of arguments" -msgstr "Operatorgränssnitt vid %L har fel antal argument" +msgstr "Operatorgränssnitt vid %L har fel antal argument" #: fortran/interface.c:646 #, gcc-internal-format, gfc-internal-format msgid "Assignment operator interface at %L must be a SUBROUTINE" -msgstr "Gränssnitt för tilldelningsoperator vid %L måste vara en SUBROUTINE" +msgstr "Gränssnitt för tilldelningsoperator vid %L mÃ¥ste vara en SUBROUTINE" #: fortran/interface.c:652 #, gcc-internal-format, gfc-internal-format msgid "Assignment operator interface at %L must have two arguments" -msgstr "Gränssnitt för tilldelningsoperator vid %L måste ha två argument" +msgstr "Gränssnitt för tilldelningsoperator vid %L mÃ¥ste ha tvÃ¥ argument" #: fortran/interface.c:669 #, gcc-internal-format, gfc-internal-format msgid "Assignment operator interface at %L must not redefine an INTRINSIC type assignment" -msgstr "Gränssnitt för tilldelningsoperator vid %L får inte omdefiniera en INTRINSIC-typtilldelning" +msgstr "Gränssnitt för tilldelningsoperator vid %L fÃ¥r inte omdefiniera en INTRINSIC-typtilldelning" #: fortran/interface.c:678 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic operator interface at %L must be a FUNCTION" -msgstr "Gränssnitt för inbyggd operator vid %L måste vara en FUNCTION" +msgstr "Gränssnitt för inbyggd operator vid %L mÃ¥ste vara en FUNCTION" #: fortran/interface.c:689 #, gcc-internal-format, gfc-internal-format msgid "First argument of defined assignment at %L must be INTENT(OUT) or INTENT(INOUT)" -msgstr "Första argumentet till definierad tilldelning vid %L måste vara INTENT(OUT) eller INTENT(INOUT)" +msgstr "Första argumentet till definierad tilldelning vid %L mÃ¥ste vara INTENT(OUT) eller INTENT(INOUT)" #: fortran/interface.c:696 #, gcc-internal-format, gfc-internal-format msgid "Second argument of defined assignment at %L must be INTENT(IN)" -msgstr "Andra argumentet av definierad tilldelning vid %L måste vara INTENT(IN)" +msgstr "Andra argumentet av definierad tilldelning vid %L mÃ¥ste vara INTENT(IN)" #: fortran/interface.c:705 fortran/resolve.c:13770 #, gcc-internal-format, gfc-internal-format msgid "First argument of operator interface at %L must be INTENT(IN)" -msgstr "Första argumentet till operatorgränssnitt vid %L måste vara INTENT(IN)" +msgstr "Första argumentet till operatorgränssnitt vid %L mÃ¥ste vara INTENT(IN)" #: fortran/interface.c:712 fortran/resolve.c:13788 #, gcc-internal-format, gfc-internal-format msgid "Second argument of operator interface at %L must be INTENT(IN)" -msgstr "Andra argumentet till operatorgränssnitt vid %L måste vara INTENT(IN)" +msgstr "Andra argumentet till operatorgränssnitt vid %L mÃ¥ste vara INTENT(IN)" #: fortran/interface.c:817 #, gcc-internal-format, gfc-internal-format msgid "Operator interface at %L conflicts with intrinsic interface" -msgstr "Operatorgränssnitt vid %L står i konflikt med inbyggt gränssnitt" +msgstr "Operatorgränssnitt vid %L stÃ¥r i konflikt med inbyggt gränssnitt" #: fortran/interface.c:1270 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' in %s at %L has no explicit interface" -msgstr "Proceduren \"%s\" i %s vid %L har inget explicit gränssnitt" +msgstr "Proceduren â€%s†i %s vid %L har inget explicit gränssnitt" #: fortran/interface.c:1273 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' in %s at %L is neither function nor subroutine" -msgstr "Proceduren \"%s\" i %s vid %L är varken en funktion eller subrutin" +msgstr "Proceduren â€%s†i %s vid %L är varken en funktion eller subrutin" #: fortran/interface.c:1285 #, gcc-internal-format, gfc-internal-format msgid "In %s at %L procedures must be either all SUBROUTINEs or all FUNCTIONs" -msgstr "I %s vid %L måste procedurerna antingen alla vara SUBROUTINE eller alla vara FUNCTION" +msgstr "I %s vid %L mÃ¥ste procedurerna antingen alla vara SUBROUTINE eller alla vara FUNCTION" #: fortran/interface.c:1289 #, gcc-internal-format, gfc-internal-format @@ -37446,37 +37449,37 @@ msgstr "" #: fortran/interface.c:1296 #, gcc-internal-format, gfc-internal-format msgid "Extension: Internal procedure '%s' in %s at %L" -msgstr "Utökning: Intern procedur \"%s\" i %s vid %L" +msgstr "Utökning: Intern procedur â€%s†i %s vid %L" #: fortran/interface.c:1353 fortran/interface.c:1357 #, gcc-internal-format, gfc-internal-format msgid "Ambiguous interfaces '%s' and '%s' in %s at %L" -msgstr "Tvetydiga gränssnitt \"%s\" och \"%s\" i %s vid %L" +msgstr "Tvetydiga gränssnitt â€%s†och â€%s†i %s vid %L" #: fortran/interface.c:1361 #, gcc-internal-format, gfc-internal-format msgid "Although not referenced, '%s' has ambiguous interfaces at %L" -msgstr "Fast orefererad har \"%s\" tvetydiga gränssnitt vid %L" +msgstr "Fast orefererad har â€%s†tvetydiga gränssnitt vid %L" #: fortran/interface.c:1395 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L is not a module procedure" -msgstr "\"%s\" vid %L är inte en modulprocedur" +msgstr "â€%s†vid %L är inte en modulprocedur" #: fortran/interface.c:1605 #, gcc-internal-format, gfc-internal-format msgid "Rank mismatch in argument '%s' at %L (scalar and rank-%d)" -msgstr "Ordning stämmer inte i argument \"%s\" vid %L (skalär och ordning %d)" +msgstr "Ordning stämmer inte i argument â€%s†vid %L (skalär och ordning %d)" #: fortran/interface.c:1610 #, gcc-internal-format, gfc-internal-format msgid "Rank mismatch in argument '%s' at %L (rank-%d and scalar)" -msgstr "Ordning stämmer inte i argument \"%s\" vid %L (ordning %d och skalär)" +msgstr "Ordning stämmer inte i argument â€%s†vid %L (ordning %d och skalär)" #: fortran/interface.c:1615 #, gcc-internal-format, gfc-internal-format msgid "Rank mismatch in argument '%s' at %L (rank-%d and rank-%d)" -msgstr "Ordning stämmer inte i argument \"%s\" vid %L (ordning %d och ordning %d)" +msgstr "Ordning stämmer inte i argument â€%s†vid %L (ordning %d och ordning %d)" #: fortran/interface.c:1657 #, gcc-internal-format, gfc-internal-format @@ -37486,42 +37489,42 @@ msgstr "Ogiltigt procedurargument vid %L" #: fortran/interface.c:1665 #, gcc-internal-format, gfc-internal-format msgid "Interface mismatch in dummy procedure '%s' at %L: %s" -msgstr "Gränssnitt stämmer inte överens i attrapprocedur \"%s\" vid %L: %s" +msgstr "Gränssnitt stämmer inte överens i attrapprocedur â€%s†vid %L: %s" #: fortran/interface.c:1690 #, gcc-internal-format, gfc-internal-format msgid "Actual argument to contiguous pointer dummy '%s' at %L must be simply contigous" -msgstr "Aktuellt argument till sammanhängade pekareattrapp \"%s\" vid %L måste vara enkelt sammanhängande" +msgstr "Aktuellt argument till sammanhängade pekareattrapp â€%s†vid %L mÃ¥ste vara enkelt sammanhängande" #: fortran/interface.c:1703 #, gcc-internal-format, gfc-internal-format msgid "Type mismatch in argument '%s' at %L; passed %s to %s" -msgstr "Typ stämmer inte i argument \"%s\" vid %L; skickade %s till %s" +msgstr "Typ stämmer inte i argument â€%s†vid %L; skickade %s till %s" #: fortran/interface.c:1717 #, gcc-internal-format, gfc-internal-format msgid "Actual argument to '%s' at %L must be polymorphic" -msgstr "Aktuellt argument till \"%s\" vid %L måste vara polymorft" +msgstr "Aktuellt argument till â€%s†vid %L mÃ¥ste vara polymorft" #: fortran/interface.c:1725 #, gcc-internal-format, gfc-internal-format msgid "Actual argument to '%s' at %L must have the same declared type" -msgstr "Aktuellt arkument till \"%s\" vid %L måste ha samma deklarerade typ" +msgstr "Aktuellt arkument till â€%s†vid %L mÃ¥ste ha samma deklarerade typ" #: fortran/interface.c:1734 #, gcc-internal-format, gfc-internal-format msgid "Actual argument to '%s' at %L must be a coarray" -msgstr "Aktuellt argument till \"%s\" vid %L måste vara en co-vektor" +msgstr "Aktuellt argument till â€%s†vid %L mÃ¥ste vara en co-vektor" #: fortran/interface.c:1753 #, gcc-internal-format, gfc-internal-format msgid "Corank mismatch in argument '%s' at %L (%d and %d)" -msgstr "Co-ordning stämmer inte i argument \"%s\" vid %L (%d och %d)" +msgstr "Co-ordning stämmer inte i argument â€%s†vid %L (%d och %d)" #: fortran/interface.c:1770 #, gcc-internal-format, gfc-internal-format msgid "Actual argument to '%s' at %L must be simply contiguous" -msgstr "Aktuellt argument till \"%s\" vid %L måste vara enkelt sammanhängande" +msgstr "Aktuellt argument till â€%s†vid %L mÃ¥ste vara enkelt sammanhängande" #: fortran/interface.c:1784 #, gcc-internal-format, gfc-internal-format @@ -37531,7 +37534,7 @@ msgstr "" #: fortran/interface.c:1801 #, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' has to be a pointer or assumed-shape array without CONTIGUOUS attribute - as actual argument at %L is not simply contiguous and both are ASYNCHRONOUS or VOLATILE" -msgstr "Attrappargument \"%s\" måste vara en pekare eller vektor med förmodad form utan attributet CONTIGUOUS - eftersom det aktuella argumentet vid %L inte är enkelt sammanhängande och båda är ASYNCHRONOUS eller VOLATILE" +msgstr "Attrappargument â€%s†mÃ¥ste vara en pekare eller vektor med förmodad form utan attributet CONTIGUOUS - eftersom det aktuella argumentet vid %L inte är enkelt sammanhängande och bÃ¥da är ASYNCHRONOUS eller VOLATILE" #: fortran/interface.c:1814 #, gcc-internal-format, gfc-internal-format @@ -37546,37 +37549,37 @@ msgstr "" #: fortran/interface.c:1883 #, gcc-internal-format, gfc-internal-format msgid "Polymorphic scalar passed to array dummy argument '%s' at %L" -msgstr "Polymorf skalär skickad till vektorattrappargument \"%s\" vid %L" +msgstr "Polymorf skalär skickad till vektorattrappargument â€%s†vid %L" #: fortran/interface.c:1892 #, gcc-internal-format, gfc-internal-format msgid "Element of assumed-shaped or pointer array passed to array dummy argument '%s' at %L" -msgstr "Element av vektor med förmodad form eller pekare skickat till vektorattrappargument \"%s\" vid %L" +msgstr "Element av vektor med förmodad form eller pekare skickat till vektorattrappargument â€%s†vid %L" #: fortran/interface.c:1904 #, gcc-internal-format, gfc-internal-format msgid "Extension: Scalar non-default-kind, non-C_CHAR-kind CHARACTER actual argument with array dummy argument '%s' at %L" -msgstr "Utökning: Skalärt CHARACTER-argument som inte är av standardsort och inte C_CHAR-sort med vektoratrappargument \"%s\" vid %L" +msgstr "Utökning: Skalärt CHARACTER-argument som inte är av standardsort och inte C_CHAR-sort med vektoratrappargument â€%s†vid %L" #: fortran/interface.c:1912 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Scalar CHARACTER actual argument with array dummy argument '%s' at %L" -msgstr "Fortran 2003: Aktuellt skalärt CHARACTER-argument med attrappargument som är vektor \"%s\" vid %L" +msgstr "Fortran 2003: Aktuellt skalärt CHARACTER-argument med attrappargument som är vektor â€%s†vid %L" #: fortran/interface.c:2212 #, gcc-internal-format, gfc-internal-format msgid "Keyword argument '%s' at %L is not in the procedure" -msgstr "Nyckelordsargument \"%s\" vid %L finns inte i proceduren" +msgstr "Nyckelordsargument â€%s†vid %L finns inte i proceduren" #: fortran/interface.c:2220 #, gcc-internal-format, gfc-internal-format msgid "Keyword argument '%s' at %L is already associated with another actual argument" -msgstr "Nyckelordsargumentet \"%s\" vid %L är redan associerat med ett annat aktuellt argument" +msgstr "Nyckelordsargumentet â€%s†vid %L är redan associerat med ett annat aktuellt argument" #: fortran/interface.c:2230 #, gcc-internal-format, gfc-internal-format msgid "More actual than formal arguments in procedure call at %L" -msgstr "Fler aktuella än formella argument i proceduranrop vid %L" +msgstr "Fler aktuella än formella argument i proceduranrop vid %L" #: fortran/interface.c:2242 fortran/interface.c:2568 #, gcc-internal-format, gfc-internal-format @@ -37586,142 +37589,142 @@ msgstr "Alternativ returspecifikation saknas i subrutinanrop vid %L" #: fortran/interface.c:2250 #, gcc-internal-format, gfc-internal-format msgid "Unexpected alternate return spec in subroutine call at %L" -msgstr "Oväntad alternativ returspecifikation i subrutinanrop vid %L" +msgstr "Oväntad alternativ returspecifikation i subrutinanrop vid %L" #: fortran/interface.c:2260 #, gcc-internal-format, gfc-internal-format msgid "Unexpected NULL() intrinsic at %L to dummy '%s'" -msgstr "Oväntad inbyggd NULL() vid %L till attrapp \"%s\"" +msgstr "Oväntad inbyggd NULL() vid %L till attrapp â€%sâ€" #: fortran/interface.c:2263 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Null pointer at %L to non-pointer dummy '%s'" -msgstr "Fortran 2008: Nollpekare vid %L till icke-pekareattrapp \"%s\";" +msgstr "Fortran 2008: Nollpekare vid %L till icke-pekareattrapp â€%sâ€;" #: fortran/interface.c:2287 #, gcc-internal-format, gfc-internal-format msgid "Character length mismatch (%ld/%ld) between actual argument and pointer or allocatable dummy argument '%s' at %L" -msgstr "Teckenlängd stämmer inte (%ld/%ld) mellan aktuellt argument och pekare eller allokerbart attrappargument \"%s\" vid %L" +msgstr "Teckenlängd stämmer inte (%ld/%ld) mellan aktuellt argument och pekare eller allokerbart attrappargument â€%s†vid %L" #: fortran/interface.c:2294 #, gcc-internal-format, gfc-internal-format msgid "Character length mismatch (%ld/%ld) between actual argument and assumed-shape dummy argument '%s' at %L" -msgstr "Teckenlängd stämmer inte (%ld/%ld) mellan aktuellt argument och attrappargument med antagen form \"%s\" vid %L" +msgstr "Teckenlängd stämmer inte (%ld/%ld) mellan aktuellt argument och attrappargument med antagen form â€%s†vid %L" #: fortran/interface.c:2308 #, gcc-internal-format, gfc-internal-format msgid "Actual argument argument at %L to allocatable or pointer dummy argument '%s' must have a deferred length type parameter if and only if the dummy has one" -msgstr "Aktuellt argument vid %L till allokerbart eller pekaratrappargument \"%s\" måste ha en fördröjd längdtypparameter om och endast om atrappen har en" +msgstr "Aktuellt argument vid %L till allokerbart eller pekaratrappargument â€%s†mÃ¥ste ha en fördröjd längdtypparameter om och endast om atrappen har en" #: fortran/interface.c:2325 #, gcc-internal-format, gfc-internal-format msgid "Character length of actual argument shorter than of dummy argument '%s' (%lu/%lu) at %L" -msgstr "Teckenlängden på aktuellt argument är kortare än attrappargumentet \"%s\" (%lu/%lu) vid %L" +msgstr "Teckenlängden pÃ¥ aktuellt argument är kortare än attrappargumentet â€%s†(%lu/%lu) vid %L" #: fortran/interface.c:2330 #, gcc-internal-format, gfc-internal-format msgid "Actual argument contains too few elements for dummy argument '%s' (%lu/%lu) at %L" -msgstr "Aktuellt argument innehåller för få element för attrappargument \"%s\" (%lu/%lu) vid %L" +msgstr "Aktuellt argument innehÃ¥ller för fÃ¥ element för attrappargument â€%s†(%lu/%lu) vid %L" #: fortran/interface.c:2349 #, gcc-internal-format, gfc-internal-format msgid "Expected a procedure pointer for argument '%s' at %L" -msgstr "En procedurpekare förväntade som argument \"%s\" vid %L" +msgstr "En procedurpekare förväntade som argument â€%s†vid %L" #: fortran/interface.c:2361 #, gcc-internal-format, gfc-internal-format msgid "Expected a procedure for argument '%s' at %L" -msgstr "Förväntade en procedur som argument \"%s\" vid %L" +msgstr "Förväntade en procedur som argument â€%s†vid %L" #: fortran/interface.c:2375 #, gcc-internal-format, gfc-internal-format msgid "Actual argument for '%s' cannot be an assumed-size array at %L" -msgstr "Aktuellt argument till \"%s\" kan inte vara en vektor med antagen storlek vid %L" +msgstr "Aktuellt argument till â€%s†kan inte vara en vektor med antagen storlek vid %L" #: fortran/interface.c:2384 #, gcc-internal-format, gfc-internal-format msgid "Actual argument for '%s' must be a pointer at %L" -msgstr "Aktuellt argument till \"%s\" skall vara en pekare vid %L" +msgstr "Aktuellt argument till â€%s†skall vara en pekare vid %L" #: fortran/interface.c:2394 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Non-pointer actual argument at %L to pointer dummy '%s'" -msgstr "Fortran 2008: Aktuellt argument som inte är en pekare vid %L till pekarattrapp \"%s\"" +msgstr "Fortran 2008: Aktuellt argument som inte är en pekare vid %L till pekarattrapp â€%sâ€" #: fortran/interface.c:2404 #, gcc-internal-format, gfc-internal-format msgid "Coindexed actual argument at %L to pointer dummy '%s'" -msgstr "Co-indexerat faktiskt argument vid %L till pekareattrapp \"%s\"" +msgstr "Co-indexerat faktiskt argument vid %L till pekareattrapp â€%sâ€" #: fortran/interface.c:2417 #, gcc-internal-format, gfc-internal-format msgid "Coindexed actual argument at %L to allocatable dummy '%s' requires INTENT(IN)" -msgstr "Co-indexerat aktuellt argument vid %L till allokerbar attrapp \"%s\" kräver INTENT(IN)" +msgstr "Co-indexerat aktuellt argument vid %L till allokerbar attrapp â€%s†kräver INTENT(IN)" #: fortran/interface.c:2431 #, gcc-internal-format, gfc-internal-format msgid "Coindexed ASYNCHRONOUS or VOLATILE actual argument at at %L requires that dummy %s' has neither ASYNCHRONOUS nor VOLATILE" -msgstr "Co-indexerat ASYNCHRONOUS eller VOLATILE aktuellt argument vid %L kräver att attrappen \"%s\" varken har ASYNCHRONOUS eller VOLATILE" +msgstr "Co-indexerat ASYNCHRONOUS eller VOLATILE aktuellt argument vid %L kräver att attrappen â€%s†varken har ASYNCHRONOUS eller VOLATILE" #: fortran/interface.c:2445 #, gcc-internal-format, gfc-internal-format msgid "Coindexed actual argument at %L with allocatable ultimate component to dummy '%s' requires either VALUE or INTENT(IN)" -msgstr "Co-indexerat faktiskt argument vid %L med allokerbar slutlig komponent till attrappen \"%s\" kräver antingen VALUE eller INTENT(IN)" +msgstr "Co-indexerat faktiskt argument vid %L med allokerbar slutlig komponent till attrappen â€%s†kräver antingen VALUE eller INTENT(IN)" #: fortran/interface.c:2457 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Actual CLASS array argument for '%s' must be a full array at %L" -msgstr "Aktuellt argument till \"%s\" skall vara en pekare vid %L" +msgstr "Aktuellt CLASS-vektorargument till â€%s†mÃ¥ste vara en fullständig vektor vid %L" #: fortran/interface.c:2467 #, gcc-internal-format, gfc-internal-format msgid "Actual argument for '%s' must be ALLOCATABLE at %L" -msgstr "Aktuellt argument till \"%s\" skall vara en ALLOCATABLE vid %L" +msgstr "Aktuellt argument till â€%s†skall vara en ALLOCATABLE vid %L" #: fortran/interface.c:2496 #, gcc-internal-format, gfc-internal-format msgid "Array-section actual argument with vector subscripts at %L is incompatible with INTENT(OUT), INTENT(INOUT), VOLATILE or ASYNCHRONOUS attribute of the dummy argument '%s'" -msgstr "Vektorsektion som aktuellt argument med vektorindex vid %L är inte kompatibelt med attributet INTENT(OUT), INTENT(INOUT), VOLATILE eller ASYNCHRONOUS på attrappargumentet \"%s\"" +msgstr "Vektorsektion som aktuellt argument med vektorindex vid %L är inte kompatibelt med attributet INTENT(OUT), INTENT(INOUT), VOLATILE eller ASYNCHRONOUS pÃ¥ attrappargumentet â€%sâ€" #: fortran/interface.c:2514 #, gcc-internal-format, gfc-internal-format msgid "Assumed-shape actual argument at %L is incompatible with the non-assumed-shape dummy argument '%s' due to VOLATILE attribute" -msgstr "Aktuellt argument med antagen form vid %L är inte kompatibel med attrappargumentet \"%s\" utan antagen form på grund av attributet VOLATILE" +msgstr "Aktuellt argument med antagen form vid %L är inte kompatibel med attrappargumentet â€%s†utan antagen form pÃ¥ grund av attributet VOLATILE" #: fortran/interface.c:2526 #, gcc-internal-format, gfc-internal-format msgid "Array-section actual argument at %L is incompatible with the non-assumed-shape dummy argument '%s' due to VOLATILE attribute" -msgstr "Vektorsektion som aktuellt argument vid %L är inkompatibelt med attrappargumentet \"%s\" utan antagen form på grund av attributet VOLATILE" +msgstr "Vektorsektion som aktuellt argument vid %L är inkompatibelt med attrappargumentet â€%s†utan antagen form pÃ¥ grund av attributet VOLATILE" #: fortran/interface.c:2545 #, gcc-internal-format, gfc-internal-format msgid "Pointer-array actual argument at %L requires an assumed-shape or pointer-array dummy argument '%s' due to VOLATILE attribute" -msgstr "Pekarvektor som aktuellt argument vid %L kräver ett attrappargument \"%s\" med antagen form eller pekarvektor på grund av attributet VOLATILE" +msgstr "Pekarvektor som aktuellt argument vid %L kräver ett attrappargument â€%s†med antagen form eller pekarvektor pÃ¥ grund av attributet VOLATILE" #: fortran/interface.c:2575 #, gcc-internal-format, gfc-internal-format msgid "Missing actual argument for argument '%s' at %L" -msgstr "Aktuellt argument saknas för argument \"%s\" vid %L" +msgstr "Aktuellt argument saknas för argument â€%s†vid %L" #: fortran/interface.c:2761 #, gcc-internal-format, gfc-internal-format msgid "Same actual argument associated with INTENT(%s) argument '%s' and INTENT(%s) argument '%s' at %L" -msgstr "Samma aktuella argument associerat med INTENT(%s)-argument \"%s\" och INTENT(%s)-argument \"%s\" vid %L" +msgstr "Samma aktuella argument associerat med INTENT(%s)-argument â€%s†och INTENT(%s)-argument â€%s†vid %L" #: fortran/interface.c:2817 #, gcc-internal-format, gfc-internal-format msgid "Procedure argument at %L is INTENT(IN) while interface specifies INTENT(%s)" -msgstr "Procedurargument vid %L är INTENT(IN) medan gränssnitt anger INTENT(%s)" +msgstr "Procedurargument vid %L är INTENT(IN) medan gränssnitt anger INTENT(%s)" #: fortran/interface.c:2827 #, gcc-internal-format, gfc-internal-format msgid "Procedure argument at %L is local to a PURE procedure and is passed to an INTENT(%s) argument" -msgstr "Procedurargument vid %L är lokalt i en PURE-procedur och skickas till ett INTENT(%s)-argument" +msgstr "Procedurargument vid %L är lokalt i en PURE-procedur och skickas till ett INTENT(%s)-argument" #: fortran/interface.c:2835 #, gcc-internal-format, gfc-internal-format msgid "Procedure argument at %L is local to a PURE procedure and has the POINTER attribute" -msgstr "Procedurargument vid %L är lokalt i en PURE-procedur och har attributet POINTER" +msgstr "Procedurargument vid %L är lokalt i en PURE-procedur och har attributet POINTER" #: fortran/interface.c:2847 #, gcc-internal-format, gfc-internal-format @@ -37736,42 +37739,42 @@ msgstr "Co-indexerat aktuell argument vid %L i en PURE-procedur skickas till ett #: fortran/interface.c:2866 #, gcc-internal-format, gfc-internal-format msgid "Coindexed polymorphic actual argument at %L is passed polymorphic dummy argument '%s'" -msgstr "Co-indexerat polymorft aktuellt argument vid %L skickas ett polymorft attrappargument \"%s\"" +msgstr "Co-indexerat polymorft aktuellt argument vid %L skickas ett polymorft attrappargument â€%sâ€" #: fortran/interface.c:2892 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' called with an implicit interface at %L" -msgstr "Procedur \"%s\" anropad med ett implicit gränssnitt vid %L" +msgstr "Procedur â€%s†anropad med ett implicit gränssnitt vid %L" #: fortran/interface.c:2896 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' called at %L is not explicitly declared" -msgstr "Proceduren \"%s\" anropad vid %L är inte explicit deklarerad" +msgstr "Proceduren â€%s†anropad vid %L är inte explicit deklarerad" #: fortran/interface.c:2906 #, gcc-internal-format, gfc-internal-format msgid "The pointer object '%s' at %L must have an explicit function interface or be declared as array" -msgstr "Pekarobjektet \"%s\" vid %L måste ha ett explicit funktionsgränssnitt eller deklareras som vektor" +msgstr "Pekarobjektet â€%s†vid %L mÃ¥ste ha ett explicit funktionsgränssnitt eller deklareras som vektor" #: fortran/interface.c:2914 #, gcc-internal-format, gfc-internal-format msgid "The allocatable object '%s' at %L must have an explicit function interface or be declared as array" -msgstr "Det allokerbara objektet \"%s\" vid %L måste ha ett explicit funktionsgränssnitt eller deklareras som vektor" +msgstr "Det allokerbara objektet â€%s†vid %L mÃ¥ste ha ett explicit funktionsgränssnitt eller deklareras som vektor" #: fortran/interface.c:2922 #, gcc-internal-format, gfc-internal-format msgid "Allocatable function '%s' at %L must have an explicit function interface" -msgstr "Allokerbar funktion \"%s\" vid %L måste ha ett explicit funktionsgränssnitt" +msgstr "Allokerbar funktion â€%s†vid %L mÃ¥ste ha ett explicit funktionsgränssnitt" #: fortran/interface.c:2932 #, gcc-internal-format, gfc-internal-format msgid "Keyword argument requires explicit interface for procedure '%s' at %L" -msgstr "Nyckelordsargument kräver explicit gränssnitt för proceduren \"%s\" vid %L" +msgstr "Nyckelordsargument kräver explicit gränssnitt för proceduren â€%s†vid %L" #: fortran/interface.c:2944 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Actual argument of LOCK_TYPE or with LOCK_TYPE component at %L requires an explicit interface for procedure '%s'" -msgstr "Attrappargument \"%s\" till proceduren \"%s\" vid %L har ett attribut som kräver ett explicit gränssnitt för denna procedur" +msgstr "Aktuellt argument till LOCK_TYPE eller med LOCK_TYPE-komponent vid %L kräver ett explicit gränssnitt för proceduren â€%sâ€" #: fortran/interface.c:2953 #, gcc-internal-format, gfc-internal-format @@ -37781,12 +37784,12 @@ msgstr "" #: fortran/interface.c:2984 #, gcc-internal-format, gfc-internal-format msgid "Procedure pointer component '%s' called with an implicit interface at %L" -msgstr "Procedurpekarkomponent \"%s\" anropad med ett implicit gränssnitt vid %L" +msgstr "Procedurpekarkomponent â€%s†anropad med ett implicit gränssnitt vid %L" #: fortran/interface.c:2995 #, gcc-internal-format, gfc-internal-format msgid "Keyword argument requires explicit interface for procedure pointer component '%s' at %L" -msgstr "Nyckelordsargument kräver explicit gränssnitt för procedurpekarkomponent \"%s\" vid %L" +msgstr "Nyckelordsargument kräver explicit gränssnitt för procedurpekarkomponent â€%s†vid %L" #: fortran/interface.c:3075 #, gcc-internal-format, gfc-internal-format @@ -37796,57 +37799,57 @@ msgstr "" #: fortran/interface.c:3526 #, gcc-internal-format, gfc-internal-format msgid "Entity '%s' at %C is already present in the interface" -msgstr "Entitet \"%s\" vid %C finns redan i gränssnittet" +msgstr "Entitet â€%s†vid %C finns redan i gränssnittet" #: fortran/interface.c:3723 #, gcc-internal-format, gfc-internal-format msgid "Can't overwrite GENERIC '%s' at %L" -msgstr "Det går inte att skriva över GENERIC \"%s\" vid %L" +msgstr "Det gÃ¥r inte att skriva över GENERIC â€%s†vid %L" #: fortran/interface.c:3735 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a procedure binding declared NON_OVERRIDABLE" -msgstr "\"%s\" vid %L åsidosätter en procedurbindning deklarerad NON_OVERRIDABLE" +msgstr "â€%s†vid %L Ã¥sidosätter en procedurbindning deklarerad NON_OVERRIDABLE" #: fortran/interface.c:3743 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L must not be DEFERRED as it overrides a non-DEFERRED binding" -msgstr "\"%s\" vid %L får inte vara DEFERRED eftersom det åsidosätter en ej DEFERRED bindning" +msgstr "â€%s†vid %L fÃ¥r inte vara DEFERRED eftersom det Ã¥sidosätter en ej DEFERRED bindning" #: fortran/interface.c:3751 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a PURE procedure and must also be PURE" -msgstr "\"%s\" vid %L åsidosätter en PURE-procedur och måste också vara PURE" +msgstr "â€%s†vid %L Ã¥sidosätter en PURE-procedur och mÃ¥ste ocksÃ¥ vara PURE" #: fortran/interface.c:3760 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides an ELEMENTAL procedure and must also be ELEMENTAL" -msgstr "\"%s\" vid %L åsidosätter en ELEMENTAL-procedur och måste också vara ELEMENTAL" +msgstr "â€%s†vid %L Ã¥sidosätter en ELEMENTAL-procedur och mÃ¥ste ocksÃ¥ vara ELEMENTAL" #: fortran/interface.c:3766 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a non-ELEMENTAL procedure and must not be ELEMENTAL, either" -msgstr "\"%s\" vid %L åsidosäter en icke-ELEMENTAL-procedur och får inte heller vara ELEMENTAL" +msgstr "â€%s†vid %L Ã¥sidosäter en icke-ELEMENTAL-procedur och fÃ¥r inte heller vara ELEMENTAL" #: fortran/interface.c:3775 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a SUBROUTINE and must also be a SUBROUTINE" -msgstr "\"%s\" vid %L åsidosätter en SUBROUTINE och måste också vara en SUBROUTINE" +msgstr "â€%s†vid %L Ã¥sidosätter en SUBROUTINE och mÃ¥ste ocksÃ¥ vara en SUBROUTINE" #: fortran/interface.c:3786 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a FUNCTION and must also be a FUNCTION" -msgstr "\"%s\" vid %L åsidosätter en FUNCTION och måste också vara en FUNCTION" +msgstr "â€%s†vid %L Ã¥sidosätter en FUNCTION och mÃ¥ste ocksÃ¥ vara en FUNCTION" #: fortran/interface.c:3796 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "'%s' at %L and the overridden FUNCTION should have matching result types and ranks" -msgstr "\"%s\" vid %L och den åsidosatta FUNCTION skall ha överensstämmande resultattyper" +msgstr "â€%s†vid %L och den Ã¥sidosatta FUNCTION skall ha överensstämmande resultattyper och ordningar" #: fortran/interface.c:3812 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Character length mismatch between '%s' at '%L' and overridden FUNCTION" -msgstr "Teckenlängd stämmer inte i returtypen för funktion \"%s\" vid %L (%ld/%ld)" +msgstr "Teckenlängd stämmer inte i returtypen för funktion â€%s†vid %L (%ld/%ld)" #: fortran/interface.c:3817 #, gcc-internal-format, gfc-internal-format @@ -37856,102 +37859,102 @@ msgstr "" #: fortran/interface.c:3837 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a PUBLIC procedure and must not be PRIVATE" -msgstr "\"%s\" vid %L åsidosätter en PURE-procedur och får inte vara PRIVATE" +msgstr "â€%s†vid %L Ã¥sidosätter en PURE-procedur och fÃ¥r inte vara PRIVATE" #: fortran/interface.c:3866 #, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' of '%s' at %L should be named '%s' as to match the corresponding argument of the overridden procedure" -msgstr "Attrappargument \"%s\" till \"%s\" vid %L skulle ha namnet \"%s\" för att stämma med motsvarande argument i den åsidosatta proceduren" +msgstr "Attrappargument â€%s†till â€%s†vid %L skulle ha namnet â€%s†för att stämma med motsvarande argument i den Ã¥sidosatta proceduren" #: fortran/interface.c:3877 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Argument mismatch for the overriding procedure '%s' at %L: %s" -msgstr "Gränssnitt stämmer inte överens i attrapprocedur \"%s\" vid %L: %s" +msgstr "Gränssnitt stämmer inte överens i attrapprocedur â€%s†vid %L: %s" #: fortran/interface.c:3886 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L must have the same number of formal arguments as the overridden procedure" -msgstr "\"%s\" vid %L måste ha samma antal formella argument som den åsidosatta proceduren" +msgstr "â€%s†vid %L mÃ¥ste ha samma antal formella argument som den Ã¥sidosatta proceduren" #: fortran/interface.c:3895 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a NOPASS binding and must also be NOPASS" -msgstr "\"%s\" vid %L åsidosätter en NOPASS-bindning och måste också vara NOPASS" +msgstr "â€%s†vid %L Ã¥sidosätter en NOPASS-bindning och mÃ¥ste ocksÃ¥ vara NOPASS" #: fortran/interface.c:3906 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L overrides a binding with PASS and must also be PASS" -msgstr "\"%s\" vid %L åsidosätter en bindning med PASS och måste också vara PASS" +msgstr "â€%s†vid %L Ã¥sidosätter en bindning med PASS och mÃ¥ste ocksÃ¥ vara PASS" #: fortran/interface.c:3913 #, gcc-internal-format, gfc-internal-format msgid "Passed-object dummy argument of '%s' at %L must be at the same position as the passed-object dummy argument of the overridden procedure" -msgstr "Attrappargument för pass-objekt till \"%s\" vid %L måste vara på samma position som attrappargumentet för pass-objektet i den åsidosatta proceduren" +msgstr "Attrappargument för pass-objekt till â€%s†vid %L mÃ¥ste vara pÃ¥ samma position som attrappargumentet för pass-objektet i den Ã¥sidosatta proceduren" #: fortran/intrinsic.c:935 #, gcc-internal-format, gfc-internal-format msgid "The intrinsic '%s' at %L is not included in the selected standard but %s and '%s' will be treated as if declared EXTERNAL. Use an appropriate -std=* option or define -fall-intrinsics to allow this intrinsic." -msgstr "Den inbyggda \"%s\" vid %L ingår inte i den valda standarden utan %s och \"%s\" kommer hanteras som om de var deklarerade EXTERNAL. Använd en tillämplig -std=*-flagga eller definiera -fall-intrinsics för att tillåta denna inbyggda." +msgstr "Den inbyggda â€%s†vid %L ingÃ¥r inte i den valda standarden utan %s och â€%s†kommer hanteras som om de var deklarerade EXTERNAL. Använd en tillämplig -std=*-flagga eller definiera -fall-intrinsics för att tillÃ¥ta denna inbyggda." #: fortran/intrinsic.c:3518 #, gcc-internal-format, gfc-internal-format msgid "Too many arguments in call to '%s' at %L" -msgstr "För många argument i anrop till \"%s\" vid %L" +msgstr "För mÃ¥nga argument i anrop till â€%s†vid %L" #: fortran/intrinsic.c:3533 #, gcc-internal-format, gfc-internal-format msgid "The argument list functions %%VAL, %%LOC or %%REF are not allowed in this context at %L" -msgstr "Argumentlistefunktionerna vid %%VAL, %%LOC eller %%REF är inte tillåten i denna kontext vid %L" +msgstr "Argumentlistefunktionerna vid %%VAL, %%LOC eller %%REF är inte tillÃ¥ten i denna kontext vid %L" #: fortran/intrinsic.c:3536 #, gcc-internal-format, gfc-internal-format msgid "Can't find keyword named '%s' in call to '%s' at %L" -msgstr "Nyckelord med namnet \"%s\" saknas i anrop till \"%s\" vid %L" +msgstr "Nyckelord med namnet â€%s†saknas i anrop till â€%s†vid %L" #: fortran/intrinsic.c:3543 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' appears twice in call to '%s' at %L" -msgstr "Argumentet \"%s\" förekommer två gånger i anrop till \"%s\" vid %L" +msgstr "Argumentet â€%s†förekommer tvÃ¥ gÃ¥nger i anrop till â€%s†vid %L" #: fortran/intrinsic.c:3557 #, gcc-internal-format, gfc-internal-format msgid "Missing actual argument '%s' in call to '%s' at %L" -msgstr "Aktuellt argument \"%s\" saknas i anrop till \"%s\" vid %L" +msgstr "Aktuellt argument â€%s†saknas i anrop till â€%s†vid %L" #: fortran/intrinsic.c:3572 #, gcc-internal-format, gfc-internal-format msgid "ALTERNATE RETURN not permitted at %L" -msgstr "ALTERNATE RETURN är inte tillåtet vid %L" +msgstr "ALTERNATE RETURN är inte tillÃ¥tet vid %L" #: fortran/intrinsic.c:3629 #, gcc-internal-format, gfc-internal-format msgid "Type of argument '%s' in call to '%s' at %L should be %s, not %s" -msgstr "Typen på argument \"%s\" i anrop till \"%s\" vid %L skulle varit %s, inte %s" +msgstr "Typen pÃ¥ argument â€%s†i anrop till â€%s†vid %L skulle varit %s, inte %s" #: fortran/intrinsic.c:4014 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic '%s' (is %s) is used at %L" -msgstr "Inbyggd \"%s\" (är %s) används vid %L" +msgstr "Inbyggd â€%s†(är %s) används vid %L" #: fortran/intrinsic.c:4085 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Function '%s' as initialization expression at %L" -msgstr "Fortran 2003: Funktion \"%s\" som initieringsuttryck vid %L" +msgstr "Fortran 2003: Funktion â€%s†som initieringsuttryck vid %L" #: fortran/intrinsic.c:4161 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Elemental function as initialization expression with non-integer/non-character arguments at %L" -msgstr "Fortran 2003: Elementär funktion som initieraruttryck med argument som inte är heltal/tecken vid %L" +msgstr "Fortran 2003: Elementär funktion som initieraruttryck med argument som inte är heltal/tecken vid %L" #: fortran/intrinsic.c:4222 #, gcc-internal-format, gfc-internal-format msgid "Subroutine call to intrinsic '%s' at %L is not PURE" -msgstr "Subrutinanrop till inbyggd \"%s\" vid %L är inte PURE" +msgstr "Subrutinanrop till inbyggd â€%s†vid %L är inte PURE" #: fortran/intrinsic.c:4295 #, gcc-internal-format, gfc-internal-format msgid "Extension: Conversion from %s to %s at %L" -msgstr "Utökning: Konvertering från %s till %s vid %L" +msgstr "Utökning: Konvertering frÃ¥n %s till %s vid %L" #: fortran/intrinsic.c:4409 #, gcc-internal-format, gfc-internal-format @@ -37961,92 +37964,92 @@ msgstr "Kan inte konvertera %s till %s vid %L" #: fortran/intrinsic.c:4503 #, gcc-internal-format, gfc-internal-format msgid "'%s' declared at %L may shadow the intrinsic of the same name. In order to call the intrinsic, explicit INTRINSIC declarations may be required." -msgstr "\"%s\" deklarerad vid %L kan skugga den inbyggda med samma namn. För att anropa den inbyggda kan en explicit INTRINSIC-deklaration krävas." +msgstr "â€%s†deklarerad vid %L kan skugga den inbyggda med samma namn. För att anropa den inbyggda kan en explicit INTRINSIC-deklaration krävas." #: fortran/intrinsic.c:4508 #, gcc-internal-format, gfc-internal-format msgid "'%s' declared at %L is also the name of an intrinsic. It can only be called via an explicit interface or if declared EXTERNAL." -msgstr "\"%s\" deklarerad vid %L är också namnet på en inbyggd. Den kan bara anropas via ett explicit gränssnitt eller om den deklareras EXTERNAL." +msgstr "â€%s†deklarerad vid %L är ocksÃ¥ namnet pÃ¥ en inbyggd. Den kan bara anropas via ett explicit gränssnitt eller om den deklareras EXTERNAL." #: fortran/io.c:168 fortran/primary.c:872 #, gcc-internal-format, gfc-internal-format msgid "Extension: backslash character at %C" -msgstr "Utökning: omvänt snedstreck vid %C" +msgstr "Utökning: omvänt snedstreck vid %C" #: fortran/io.c:204 fortran/io.c:207 #, gcc-internal-format, gfc-internal-format msgid "Extension: Tab character in format at %C" -msgstr "Utökning: Tabulatortecken i format vid %C" +msgstr "Utökning: Tabulatortecken i format vid %C" #: fortran/io.c:453 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: DP format specifier not allowed at %C" -msgstr "Fortran 2003: DP-formatspecificerare är inte tillåten vid %C" +msgstr "Fortran 2003: DP-formatspecificerare är inte tillÃ¥ten vid %C" #: fortran/io.c:460 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: DC format specifier not allowed at %C" -msgstr "Fortran 2003: DC-formatspecificerare är inte tillåten vid %C" +msgstr "Fortran 2003: DC-formatspecificerare är inte tillÃ¥ten vid %C" #: fortran/io.c:649 #, gcc-internal-format, gfc-internal-format msgid "Extension: X descriptor requires leading space count at %L" -msgstr "Utökning: X-beskrivare kräver inledande utrymmesantal vid %L" +msgstr "Utökning: X-beskrivare kräver inledande utrymmesantal vid %L" #: fortran/io.c:679 #, gcc-internal-format, gfc-internal-format msgid "Extension: $ descriptor at %L" -msgstr "Utökning: $-beskrivare vid %L" +msgstr "Utökning: $-beskrivare vid %L" #: fortran/io.c:684 #, gcc-internal-format, gfc-internal-format msgid "$ should be the last specifier in format at %L" -msgstr "$ måste vara den sista specificeraren i formatet vid %L" +msgstr "$ mÃ¥ste vara den sista specificeraren i formatet vid %L" #: fortran/io.c:782 #, gcc-internal-format, gfc-internal-format msgid "Extension: Missing positive width after L descriptor at %L" -msgstr "Utökning: Positiv bredd saknas efter L-beskrivare vid %L" +msgstr "Utökning: Positiv bredd saknas efter L-beskrivare vid %L" #: fortran/io.c:826 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: 'G0' in format at %L" -msgstr "Fortran 2008: \"G0\" i format vid %L" +msgstr "Fortran 2008: â€G0†i format vid %L" #: fortran/io.c:854 #, gcc-internal-format, gfc-internal-format msgid "Positive width required in format specifier %s at %L" -msgstr "Positiv bredd krävs i formatspecificerare %s vid %L" +msgstr "Positiv bredd krävs i formatspecificerare %s vid %L" #: fortran/io.c:870 fortran/io.c:877 #, gcc-internal-format, gfc-internal-format msgid "Period required in format specifier %s at %L" -msgstr "Period krävs i formatangivelse %s vid %L" +msgstr "Period krävs i formatangivelse %s vid %L" #: fortran/io.c:949 #, gcc-internal-format, gfc-internal-format msgid "Period required in format specifier at %L" -msgstr "Period krävs i formatangivelse vid %L" +msgstr "Period krävs i formatangivelse vid %L" #: fortran/io.c:971 #, gcc-internal-format, gfc-internal-format msgid "The H format specifier at %L is a Fortran 95 deleted feature" -msgstr "Formatspecificeraren H vid %L är en funktion borttagen i Fortran 95" +msgstr "Formatspecificeraren H vid %L är en funktion borttagen i Fortran 95" #: fortran/io.c:1059 fortran/io.c:1122 #, gcc-internal-format, gfc-internal-format msgid "Extension: Missing comma at %L" -msgstr "Utökning: Komma saknas vid %L" +msgstr "Utökning: Komma saknas vid %L" #: fortran/io.c:1141 #, gcc-internal-format, gfc-internal-format msgid "%s in format string at %L" -msgstr "%s i formatsträng vid %L" +msgstr "%s i formatsträng vid %L" #: fortran/io.c:1178 #, gcc-internal-format, gfc-internal-format msgid "Extraneous characters in format at %L" -msgstr "Överflödiga tecken i format vid %L" +msgstr "Överflödiga tecken i format vid %L" #: fortran/io.c:1200 #, gcc-internal-format, gfc-internal-format @@ -38061,7 +38064,7 @@ msgstr "Formatetikett saknas vid %C" #: fortran/io.c:1261 fortran/io.c:1292 fortran/io.c:1357 #, gcc-internal-format, gfc-internal-format msgid "Invalid value for %s specification at %C" -msgstr "Ogiltigt värde för %s-specifikation vid %C" +msgstr "Ogiltigt värde för %s-specifikation vid %C" #: fortran/io.c:1267 fortran/io.c:1298 #, gcc-internal-format, gfc-internal-format @@ -38071,7 +38074,7 @@ msgstr "Dubblerad %s-specifikation vid %C" #: fortran/io.c:1305 #, gcc-internal-format, gfc-internal-format msgid "Variable %s cannot be INTENT(IN) at %C" -msgstr "Variabeln %s får inte vara INTENT(IN) vid %C" +msgstr "Variabeln %s fÃ¥r inte vara INTENT(IN) vid %C" #: fortran/io.c:1312 #, gcc-internal-format, gfc-internal-format @@ -38086,12 +38089,12 @@ msgstr "Dubblerad %s-etikettspecifikation vid %C" #: fortran/io.c:1383 #, gcc-internal-format, gfc-internal-format msgid "Constant expression in FORMAT tag at %L must be of type default CHARACTER" -msgstr "Konstant uttryck i FORMAT-tagg vid %L måste vara av typ CHARACTER" +msgstr "Konstant uttryck i FORMAT-tagg vid %L mÃ¥ste vara av typ CHARACTER" #: fortran/io.c:1401 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "FORMAT tag at %L must be of type default-kind CHARACTER or of INTEGER" -msgstr "FORMAT-tagg vid %L måste ha typen CHARACTER eller INTEGER" +msgstr "FORMAT-tagg vid %L mÃ¥ste ha typen CHARACTER eller INTEGER" #: fortran/io.c:1407 #, gcc-internal-format, gfc-internal-format @@ -38101,27 +38104,27 @@ msgstr "Borttagen funktion: ASSIGNED-variabel i FORMAT-tagg vid %L" #: fortran/io.c:1413 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L has not been assigned a format label" -msgstr "Variabeln \"%s\" vid %L har inte tilldelats en formatetikett" +msgstr "Variabeln â€%s†vid %L har inte tilldelats en formatetikett" #: fortran/io.c:1420 #, gcc-internal-format, gfc-internal-format msgid "Scalar '%s' in FORMAT tag at %L is not an ASSIGNED variable" -msgstr "Skalär \"%s\" i FORMAT-tagg vid %L är inte en ASSIGNED-variabel" +msgstr "Skalär â€%s†i FORMAT-tagg vid %L är inte en ASSIGNED-variabel" #: fortran/io.c:1432 #, gcc-internal-format, gfc-internal-format msgid "Extension: Non-character in FORMAT tag at %L" -msgstr "Utökning: Icke-tecken i FORMAT-tagg vid %L" +msgstr "Utökning: Icke-tecken i FORMAT-tagg vid %L" #: fortran/io.c:1438 #, gcc-internal-format, gfc-internal-format msgid "Non-character assumed shape array element in FORMAT tag at %L" -msgstr "Icke-teckens vektorelement med förmodad form i FORMAT-tagg vid %L" +msgstr "Icke-teckens vektorelement med förmodad form i FORMAT-tagg vid %L" #: fortran/io.c:1445 #, gcc-internal-format, gfc-internal-format msgid "Non-character assumed size array element in FORMAT tag at %L" -msgstr "Icke-teckens vektorelement med förmodad storlek i FORMAT-tagg vid %L" +msgstr "Icke-teckens vektorelement med förmodad storlek i FORMAT-tagg vid %L" #: fortran/io.c:1452 #, gcc-internal-format, gfc-internal-format @@ -38131,17 +38134,17 @@ msgstr "Icke-teckens pekarvektorelement i FORMAT-tagg vid %L" #: fortran/io.c:1478 #, gcc-internal-format, gfc-internal-format msgid "%s tag at %L must be of type %s" -msgstr "%s-tagg vid %L måste ha typen %s" +msgstr "%s-tagg vid %L mÃ¥ste ha typen %s" #: fortran/io.c:1485 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "%s tag at %L must be a character string of default kind" -msgstr "Konkateneringsoperatorn vid %L måste konkatenera strängar av samma sort" +msgstr "Konkateneringsoperatorn vid %L mÃ¥ste konkatenera strängar av samma sort" #: fortran/io.c:1492 #, gcc-internal-format, gfc-internal-format msgid "%s tag at %L must be scalar" -msgstr "%s-tagg vid %L måste vara skalär" +msgstr "%s-tagg vid %L mÃ¥ste vara skalär" #: fortran/io.c:1498 #, gcc-internal-format, gfc-internal-format @@ -38151,7 +38154,7 @@ msgstr "Fortran 2003: IOMSG-tagg vid %L" #: fortran/io.c:1506 #, gcc-internal-format, gfc-internal-format msgid "Fortran 95 requires default INTEGER in %s tag at %L" -msgstr "Fortran 95 kräver standard-INTEGER i %s-tagg vid %L" +msgstr "Fortran 95 kräver standard-INTEGER i %s-tagg vid %L" #: fortran/io.c:1514 #, gcc-internal-format, gfc-internal-format @@ -38166,102 +38169,102 @@ msgstr "Fortran 2008: NEWUNIT-specificerare vid %L" #: fortran/io.c:1540 #, gcc-internal-format, gfc-internal-format msgid "Extension: CONVERT tag at %L" -msgstr "Utökning: CONVERT-tagg vid %L" +msgstr "Utökning: CONVERT-tagg vid %L" #: fortran/io.c:1726 fortran/io.c:1734 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: %s specifier in %s statement at %C has value '%s'" -msgstr "Fortran 2003: %s-specificerare i %s-sats vid %C har värdet \"%s\"" +msgstr "Fortran 2003: %s-specificerare i %s-sats vid %C har värdet â€%sâ€" #: fortran/io.c:1753 fortran/io.c:1761 #, gcc-internal-format, gfc-internal-format msgid "Extension: %s specifier in %s statement at %C has value '%s'" -msgstr "Utökning: %s-specifierare i %s-sats vid %C har värdet \"%s\"" +msgstr "Utökning: %s-specifierare i %s-sats vid %C har värdet â€%sâ€" #: fortran/io.c:1774 fortran/io.c:1782 #, gcc-internal-format, gfc-internal-format msgid "%s specifier in %s statement at %C has invalid value '%s'" -msgstr "%s-specificerare i %s-sats vid %C har ogiltigt värde \"%s\"" +msgstr "%s-specificerare i %s-sats vid %C har ogiltigt värde â€%sâ€" #: fortran/io.c:1835 #, gcc-internal-format, gfc-internal-format msgid "OPEN statement not allowed in PURE procedure at %C" -msgstr "OPEN-sats är inte tillåten i en PURE-procedur vid %C" +msgstr "OPEN-sats är inte tillÃ¥ten i en PURE-procedur vid %C" #: fortran/io.c:1849 #, gcc-internal-format, gfc-internal-format msgid "UNIT specifier not allowed with NEWUNIT at %C" -msgstr "UNIT-specificerare är inte tillåten med NEWUNIT vid %C" +msgstr "UNIT-specificerare är inte tillÃ¥ten med NEWUNIT vid %C" #: fortran/io.c:1857 #, gcc-internal-format, gfc-internal-format msgid "NEWUNIT specifier must have FILE= or STATUS='scratch' at %C" -msgstr "NEWUNIT-specificerare måste ha FILE= eller STATUS='scratch' vid %C" +msgstr "NEWUNIT-specificerare mÃ¥ste ha FILE= eller STATUS='scratch' vid %C" #: fortran/io.c:1864 #, gcc-internal-format, gfc-internal-format msgid "OPEN statement at %C must have UNIT or NEWUNIT specified" -msgstr "OPEN-sats vid %C måste ha antingen UNIT eller NEWUNIT angivet" +msgstr "OPEN-sats vid %C mÃ¥ste ha antingen UNIT eller NEWUNIT angivet" #: fortran/io.c:1896 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: ASYNCHRONOUS= at %C not allowed in Fortran 95" -msgstr "Fortran 2003: ASYNCHRONOUS= vid %C är inte tillåtet i Fortran 95" +msgstr "Fortran 2003: ASYNCHRONOUS= vid %C är inte tillÃ¥tet i Fortran 95" #: fortran/io.c:1914 fortran/io.c:3367 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: BLANK= at %C not allowed in Fortran 95" -msgstr "Fortran 2003: BLANK= vid %C är inte tillåtet i Fortran 95" +msgstr "Fortran 2003: BLANK= vid %C är inte tillÃ¥tet i Fortran 95" #: fortran/io.c:1932 fortran/io.c:3346 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: DECIMAL= at %C not allowed in Fortran 95" -msgstr "Fortran 2003: DECIMAL= vid %C är inte tillåtet i Fortran 95" +msgstr "Fortran 2003: DECIMAL= vid %C är inte tillÃ¥tet i Fortran 95" #: fortran/io.c:1950 fortran/io.c:3454 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: DELIM= at %C not allowed in Fortran 95" -msgstr "Fortran 2003: DELIM= vid %C är inte tillåtet i Fortran 95" +msgstr "Fortran 2003: DELIM= vid %C är inte tillÃ¥tet i Fortran 95" #: fortran/io.c:1968 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: ENCODING= at %C not allowed in Fortran 95" -msgstr "Fortran 2003: ENCODING= vid %C är inte tillåtet i Fortran 95" +msgstr "Fortran 2003: ENCODING= vid %C är inte tillÃ¥tet i Fortran 95" #: fortran/io.c:2019 #, gcc-internal-format, gfc-internal-format msgid "Fortran F2003: ROUND= at %C not allowed in Fortran 95" -msgstr "Fortran F2003: ROUND= vid %C är inte tillåtet i Fortran 95" +msgstr "Fortran F2003: ROUND= vid %C är inte tillÃ¥tet i Fortran 95" #: fortran/io.c:2039 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: SIGN= at %C not allowed in Fortran 95" -msgstr "Fortran 2003: SIGN= vid %C är inte tillåtet i Fortran 95" +msgstr "Fortran 2003: SIGN= vid %C är inte tillÃ¥tet i Fortran 95" #: fortran/io.c:2252 #, gcc-internal-format, gfc-internal-format msgid "CLOSE statement not allowed in PURE procedure at %C" -msgstr "CLOSE-sats inte tillåten i PURE-procedur vid %C" +msgstr "CLOSE-sats inte tillÃ¥ten i PURE-procedur vid %C" #: fortran/io.c:2312 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "CLOSE statement at %L requires a UNIT number" -msgstr "ASSIGNED GOTO-sats vid %L kräver en INTEGER-variabel" +msgstr "ASSIGNED GOTO-sats vid %L kräver en INTEGER-variabel" #: fortran/io.c:2320 #, gcc-internal-format, gfc-internal-format msgid "UNIT number in CLOSE statement at %L must be non-negative" -msgstr "UNIT-tal i CLOSE-sats vid %L måste vara ickenegativt" +msgstr "UNIT-tal i CLOSE-sats vid %L mÃ¥ste vara ickenegativt" #: fortran/io.c:2418 fortran/match.c:2683 #, gcc-internal-format, gfc-internal-format msgid "%s statement not allowed in PURE procedure at %C" -msgstr "%s-sats är inte tillåtet i PURE-procedur vid %C" +msgstr "%s-sats är inte tillÃ¥tet i PURE-procedur vid %C" #: fortran/io.c:2453 fortran/io.c:2885 #, gcc-internal-format, gfc-internal-format msgid "UNIT number in statement at %L must be non-negative" -msgstr "UNIT-tal i sats vid %L måste vara ickenegativt" +msgstr "UNIT-tal i sats vid %L mÃ¥ste vara ickenegativt" #: fortran/io.c:2485 #, gcc-internal-format, gfc-internal-format @@ -38281,7 +38284,7 @@ msgstr "Dubblerad formatspecifikation vid %C" #: fortran/io.c:2632 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' in namelist '%s' is INTENT(IN) at %C" -msgstr "Symbolen \"%s\" i namnlistan \"%s\" är INTENT(IN) vid %C" +msgstr "Symbolen â€%s†i namnlistan â€%s†är INTENT(IN) vid %C" #: fortran/io.c:2668 #, gcc-internal-format, gfc-internal-format @@ -38291,12 +38294,12 @@ msgstr "Dubblerad NML-specifikation vid %C" #: fortran/io.c:2677 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %C must be a NAMELIST group name" -msgstr "Symbolen \"%s\" vid %C måste vara ett NAMELIST-gruppnamn" +msgstr "Symbolen â€%s†vid %C mÃ¥ste vara ett NAMELIST-gruppnamn" #: fortran/io.c:2742 #, gcc-internal-format, gfc-internal-format msgid "END tag at %C not allowed in output statement" -msgstr "END-tagg vid %C är inte tillåten i utmatningssats" +msgstr "END-tagg vid %C är inte tillÃ¥ten i utmatningssats" #: fortran/io.c:2819 #, gcc-internal-format, gfc-internal-format @@ -38306,12 +38309,12 @@ msgstr "UNIT inte angivet vid %L" #: fortran/io.c:2831 #, gcc-internal-format, gfc-internal-format msgid "UNIT specification at %L must be an INTEGER expression or a CHARACTER variable" -msgstr "UNIT-specifikation vid %L måste vara ett INTEGER-uttryck eller en CHARACTER-variabel" +msgstr "UNIT-specifikation vid %L mÃ¥ste vara ett INTEGER-uttryck eller en CHARACTER-variabel" #: fortran/io.c:2853 #, gcc-internal-format, gfc-internal-format msgid "Invalid form of WRITE statement at %L, UNIT required" -msgstr "Ogiltig form av WRITE-sats vid %L, UNIT krävs" +msgstr "Ogiltig form av WRITE-sats vid %L, UNIT krävs" #: fortran/io.c:2864 #, gcc-internal-format, gfc-internal-format @@ -38321,17 +38324,17 @@ msgstr "Intern enhet med vektorindex vid %L" #: fortran/io.c:2878 #, gcc-internal-format, gfc-internal-format msgid "External IO UNIT cannot be an array at %L" -msgstr "Extern IO UNIT får inte vara en vektor vid %L" +msgstr "Extern IO UNIT fÃ¥r inte vara en vektor vid %L" #: fortran/io.c:2906 #, gcc-internal-format, gfc-internal-format msgid "NAMELIST '%s' in READ statement at %L contains the symbol '%s' which may not appear in a variable definition context" -msgstr "NAMELIST \"%s\" i READ-sats vid %L innehåller symbolen \"%s\" som inte får stå i ett variabeldefinitionssammanhang" +msgstr "NAMELIST â€%s†i READ-sats vid %L innehÃ¥ller symbolen â€%s†som inte fÃ¥r stÃ¥ i ett variabeldefinitionssammanhang" #: fortran/io.c:2916 #, gcc-internal-format, gfc-internal-format msgid "Extension: Comma before i/o item list at %L" -msgstr "Utökning: Komma före i/o-elementlista vid %L" +msgstr "Utökning: Komma före i/o-elementlista vid %L" #: fortran/io.c:2926 #, gcc-internal-format, gfc-internal-format @@ -38361,12 +38364,12 @@ msgstr "Syntaxfel i I/O-iterator vid %C" #: fortran/io.c:3113 #, gcc-internal-format, gfc-internal-format msgid "Expected variable in READ statement at %C" -msgstr "Variabel förväntades i READ-sats vid %C" +msgstr "Variabel förväntades i READ-sats vid %C" #: fortran/io.c:3119 #, gcc-internal-format, gfc-internal-format msgid "Expected expression in %s statement at %C" -msgstr "Förväntade uttryck i %s-sats vid %C" +msgstr "Förväntade uttryck i %s-sats vid %C" #. A general purpose syntax error. #: fortran/io.c:3177 fortran/io.c:3776 fortran/gfortran.h:2465 @@ -38382,37 +38385,37 @@ msgstr "Fortran 2003: Intern fil vid %L med namnlista" #: fortran/io.c:3320 #, gcc-internal-format, gfc-internal-format msgid "ASYNCHRONOUS= specifier at %L must be an initialization expression" -msgstr "ASYNCHRONOUS=-specificerare vid %L måste vara ett initieringsuttryck" +msgstr "ASYNCHRONOUS=-specificerare vid %L mÃ¥ste vara ett initieringsuttryck" #: fortran/io.c:3388 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: PAD= at %C not allowed in Fortran 95" -msgstr "Fortran 2003: PAD= vid %C är inte tillåtet i Fortran 95" +msgstr "Fortran 2003: PAD= vid %C är inte tillÃ¥tet i Fortran 95" #: fortran/io.c:3409 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: ROUND= at %C not allowed in Fortran 95" -msgstr "Fortran 2003: ROUND= vid %C är inte tillåtet i Fortran 95" +msgstr "Fortran 2003: ROUND= vid %C är inte tillÃ¥tet i Fortran 95" #: fortran/io.c:3603 #, gcc-internal-format, gfc-internal-format msgid "PRINT namelist at %C is an extension" -msgstr "PRINT-namnlista vid %C är en utökning" +msgstr "PRINT-namnlista vid %C är en utökning" #: fortran/io.c:3746 #, gcc-internal-format, gfc-internal-format msgid "Expected comma in I/O list at %C" -msgstr "Komma förväntades i I/O-lista vid %C" +msgstr "Komma förväntades i I/O-lista vid %C" #: fortran/io.c:3810 #, gcc-internal-format, gfc-internal-format msgid "PRINT statement at %C not allowed within PURE procedure" -msgstr "PRINT-sats vid %C är inte tillåten inuti PURE-procedur" +msgstr "PRINT-sats vid %C är inte tillÃ¥ten inuti PURE-procedur" #: fortran/io.c:3969 fortran/io.c:4023 #, gcc-internal-format, gfc-internal-format msgid "INQUIRE statement not allowed in PURE procedure at %C" -msgstr "INQUIRE-sats är inte tillåten i PURE-procedur vid %C" +msgstr "INQUIRE-sats är inte tillÃ¥ten i PURE-procedur vid %C" #: fortran/io.c:3999 #, gcc-internal-format, gfc-internal-format @@ -38422,62 +38425,62 @@ msgstr "IOLENGTH-tagg ogiltig i INQUIRE-sats vid %C" #: fortran/io.c:4009 fortran/trans-io.c:1229 #, gcc-internal-format, gfc-internal-format msgid "INQUIRE statement at %L cannot contain both FILE and UNIT specifiers" -msgstr "INQUIRE-sats vid %L får inte innehålla både FILE- och UNIT-specificerare" +msgstr "INQUIRE-sats vid %L fÃ¥r inte innehÃ¥lla bÃ¥de FILE- och UNIT-specificerare" #: fortran/io.c:4016 #, gcc-internal-format, gfc-internal-format msgid "INQUIRE statement at %L requires either FILE or UNIT specifier" -msgstr "INQUIRE-sats vid %L kräver antingen FILE- eller UNIT-specificerare" +msgstr "INQUIRE-sats vid %L kräver antingen FILE- eller UNIT-specificerare" #: fortran/io.c:4032 #, gcc-internal-format, gfc-internal-format msgid "INQUIRE statement at %L requires a PENDING= specifier with the ID= specifier" -msgstr "INQUIRE-sats vid %L kräver en PENDING=-specificerare med ID=-specificeraren" +msgstr "INQUIRE-sats vid %L kräver en PENDING=-specificerare med ID=-specificeraren" #: fortran/io.c:4203 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: WAIT at %C not allowed in Fortran 95" -msgstr "Fortran 2003: WAIT vid %C är inte tillåtet i Fortran 95" +msgstr "Fortran 2003: WAIT vid %C är inte tillÃ¥tet i Fortran 95" #: fortran/io.c:4209 #, gcc-internal-format, gfc-internal-format msgid "WAIT statement not allowed in PURE procedure at %C" -msgstr "WAIT-sats är är inte tillåtet i PURE-procedur vid %C" +msgstr "WAIT-sats är är inte tillÃ¥tet i PURE-procedur vid %C" #: fortran/match.c:164 #, gcc-internal-format, gfc-internal-format msgid "Missing ')' in statement at or before %L" -msgstr "\")\" saknas i sats vid eller före %L" +msgstr "â€)†saknas i sats vid eller före %L" #: fortran/match.c:169 #, gcc-internal-format, gfc-internal-format msgid "Missing '(' in statement at or before %L" -msgstr "\"(\" saknas i sats vid eller före %L" +msgstr "â€(†saknas i sats vid eller före %L" #: fortran/match.c:366 #, gcc-internal-format, gfc-internal-format msgid "Integer too large at %C" -msgstr "För stort heltal vid %C" +msgstr "För stort heltal vid %C" #: fortran/match.c:459 fortran/parse.c:693 #, gcc-internal-format, gfc-internal-format msgid "Too many digits in statement label at %C" -msgstr "För många siffror i satsetikett vid %C" +msgstr "För mÃ¥nga siffror i satsetikett vid %C" #: fortran/match.c:465 #, gcc-internal-format, gfc-internal-format msgid "Statement label at %C is zero" -msgstr "Satsetikett vid %C är noll" +msgstr "Satsetikett vid %C är noll" #: fortran/match.c:498 #, gcc-internal-format, gfc-internal-format msgid "Label name '%s' at %C is ambiguous" -msgstr "Etikettnamnet \"%s\" vid %C är tvetydigt" +msgstr "Etikettnamnet â€%s†vid %C är tvetydigt" #: fortran/match.c:504 #, gcc-internal-format, gfc-internal-format msgid "Duplicate construct label '%s' at %C" -msgstr "Dubblerad konstruktionsetikett \"%s\" vid %C" +msgstr "Dubblerad konstruktionsetikett â€%s†vid %C" #: fortran/match.c:535 #, gcc-internal-format, gfc-internal-format @@ -38487,12 +38490,12 @@ msgstr "Felaktigt tecken i namn vid %C" #: fortran/match.c:548 fortran/match.c:629 #, gcc-internal-format, gfc-internal-format msgid "Name at %C is too long" -msgstr "Namn vid %C är för långt" +msgstr "Namn vid %C är för lÃ¥ngt" #: fortran/match.c:559 #, gcc-internal-format, gfc-internal-format msgid "Invalid character '$' at %C. Use -fdollar-ok to allow it as an extension" -msgstr "Ogiltigt tecken \"$\" vid %C. Använd -fdollar-ok för att tillåta det som en utökning" +msgstr "Ogiltigt tecken â€$†vid %C. Använd -fdollar-ok för att tillÃ¥ta det som en utökning" #: fortran/match.c:610 fortran/match.c:658 #, gcc-internal-format, gfc-internal-format @@ -38502,22 +38505,22 @@ msgstr "Ogiltigt C-namn i NAME=-specificerare vid %C" #: fortran/match.c:649 #, gcc-internal-format, gfc-internal-format msgid "Embedded space in NAME= specifier at %C" -msgstr "Inbäddad blank i NAME=-specificerare vid %C" +msgstr "Inbäddad blank i NAME=-specificerare vid %C" #: fortran/match.c:973 #, gcc-internal-format, gfc-internal-format msgid "Loop variable at %C cannot be a coarray" -msgstr "Slingvariabel vid %C får inte vara en co-vektor" +msgstr "Slingvariabel vid %C fÃ¥r inte vara en co-vektor" #: fortran/match.c:979 #, gcc-internal-format, gfc-internal-format msgid "Loop variable at %C cannot be a sub-component" -msgstr "Slingvariabel vid %C får inte vara en subkomponent" +msgstr "Slingvariabel vid %C fÃ¥r inte vara en subkomponent" #: fortran/match.c:1013 #, gcc-internal-format, gfc-internal-format msgid "Expected a step value in iterator at %C" -msgstr "Ett stegvärde förväntades i iterator vid %C" +msgstr "Ett stegvärde förväntades i iterator vid %C" #: fortran/match.c:1025 #, gcc-internal-format, gfc-internal-format @@ -38527,12 +38530,12 @@ msgstr "Syntaxfel i iterator vid %C" #: fortran/match.c:1266 #, gcc-internal-format, gfc-internal-format msgid "Invalid form of PROGRAM statement at %C" -msgstr "Ogiltig form på PROGRAM-sats vid %C" +msgstr "Ogiltig form pÃ¥ PROGRAM-sats vid %C" #: fortran/match.c:1396 fortran/match.c:1477 #, gcc-internal-format, gfc-internal-format msgid "Obsolescent feature: Arithmetic IF statement at %C" -msgstr "Förlegad funktion: Aritmetisk IF-sats vid %C" +msgstr "Förlegad funktion: Aritmetisk IF-sats vid %C" #: fortran/match.c:1452 #, gcc-internal-format, gfc-internal-format @@ -38542,17 +38545,17 @@ msgstr "Syntaxfel i IF-uttryck vid %C" #: fortran/match.c:1463 #, gcc-internal-format, gfc-internal-format msgid "Block label not appropriate for arithmetic IF statement at %C" -msgstr "Blocketikett är inte tillämplig för aritmetisk IF-sats vid %C" +msgstr "Blocketikett är inte tillämplig för aritmetisk IF-sats vid %C" #: fortran/match.c:1501 #, gcc-internal-format, gfc-internal-format msgid "Block label is not appropriate for IF statement at %C" -msgstr "Blocketikett är inte tillämplig för IF-sats vid %C" +msgstr "Blocketikett är inte tillämplig för IF-sats vid %C" #: fortran/match.c:1587 #, gcc-internal-format, gfc-internal-format msgid "Cannot assign to a named constant at %C" -msgstr "Det går inte att tilldela till en namngiven konstant vid %C" +msgstr "Det gÃ¥r inte att tilldela till en namngiven konstant vid %C" #: fortran/match.c:1597 #, gcc-internal-format, gfc-internal-format @@ -38567,17 +38570,17 @@ msgstr "Syntaxfel i IF-klausul vid %C" #: fortran/match.c:1648 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after ELSE statement at %C" -msgstr "Oväntat skräp efter ELSE-sats vid %C" +msgstr "Oväntat skräp efter ELSE-sats vid %C" #: fortran/match.c:1654 fortran/match.c:1689 #, gcc-internal-format, gfc-internal-format msgid "Label '%s' at %C doesn't match IF label '%s'" -msgstr "Etiketten \"%s\" vid %C stämmer inte med IF-etikett \"%s\"" +msgstr "Etiketten â€%s†vid %C stämmer inte med IF-etikett â€%sâ€" #: fortran/match.c:1683 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after ELSE IF statement at %C" -msgstr "Oväntat skräp efter ELSE-IF-sats vid %C" +msgstr "Oväntat skräp efter ELSE-IF-sats vid %C" #: fortran/match.c:1747 #, gcc-internal-format, gfc-internal-format @@ -38597,42 +38600,42 @@ msgstr "Fortran 2008: CRITICAL-sats vid %C" #: fortran/match.c:1773 #, gcc-internal-format, gfc-internal-format msgid "Nested CRITICAL block at %C" -msgstr "Nästade CRITICAL-block vid %C" +msgstr "Nästade CRITICAL-block vid %C" #: fortran/match.c:1825 #, gcc-internal-format, gfc-internal-format msgid "Expected association list at %C" -msgstr "Associationslista förväntades vid %C" +msgstr "Associationslista förväntades vid %C" #: fortran/match.c:1838 #, gcc-internal-format, gfc-internal-format msgid "Expected association at %C" -msgstr "Association förväntade vid %C" +msgstr "Association förväntade vid %C" #: fortran/match.c:1847 #, gcc-internal-format, gfc-internal-format msgid "Duplicate name '%s' in association at %C" -msgstr "Dubblerat namn \"%s\" i association vid %C" +msgstr "Dubblerat namn â€%s†i association vid %C" #: fortran/match.c:1855 #, gcc-internal-format, gfc-internal-format msgid "Association target at %C must not be coindexed" -msgstr "Associationsmålet vid %C får inte vara co-indexerat" +msgstr "AssociationsmÃ¥let vid %C fÃ¥r inte vara co-indexerat" #: fortran/match.c:1873 #, gcc-internal-format, gfc-internal-format msgid "Expected ')' or ',' at %C" -msgstr "\")\" eller \",\" förväntades vid %C" +msgstr "â€)†eller â€,†förväntades vid %C" #: fortran/match.c:1891 #, gcc-internal-format, gfc-internal-format msgid "Junk after ASSOCIATE statement at %C" -msgstr "Skräp efter ASSOCIATE-sats vid %C" +msgstr "Skräp efter ASSOCIATE-sats vid %C" #: fortran/match.c:1960 #, gcc-internal-format, gfc-internal-format msgid "Derived type '%s' at %L may not be ABSTRACT" -msgstr "Härledd typ \"%s\" vid %L får inte vara ABSTRACT" +msgstr "Härledd typ â€%s†vid %L fÃ¥r inte vara ABSTRACT" #: fortran/match.c:2023 #, gcc-internal-format, gfc-internal-format @@ -38652,53 +38655,53 @@ msgstr "Fortran 2008: BLOCK-konstruktion vid %C" #: fortran/match.c:2511 #, gcc-internal-format, gfc-internal-format msgid "Name '%s' in %s statement at %C is unknown" -msgstr "Namnet \"%s\" i %s-sats vid %C är okänt" +msgstr "Namnet â€%s†i %s-sats vid %C är okänt" #: fortran/match.c:2519 #, gcc-internal-format, gfc-internal-format msgid "Name '%s' in %s statement at %C is not a construct name" -msgstr "Namnet \"%s\" i %s-sats vid %C är inte ett konstruktionsnamn" +msgstr "Namnet â€%s†i %s-sats vid %C är inte ett konstruktionsnamn" #: fortran/match.c:2531 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C leaves CRITICAL construct" -msgstr "%s-sats vid %C lämnar CRITICAL-konstruktion" +msgstr "%s-sats vid %C lämnar CRITICAL-konstruktion" #. F2008, C821 & C845. #: fortran/match.c:2539 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "%s statement at %C leaves DO CONCURRENT construct" -msgstr "%s-sats vid %C lämnar CRITICAL-konstruktion" +msgstr "%s-sats vid %C lämnar CRITICAL-konstruktion" #: fortran/match.c:2551 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C is not within a construct" -msgstr "%s-sats vid %C är inte inne i en konstruktion" +msgstr "%s-sats vid %C är inte inne i en konstruktion" #: fortran/match.c:2554 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C is not within construct '%s'" -msgstr "%s-sats vid %C är inte inne i konstruktionen \"%s\"" +msgstr "%s-sats vid %C är inte inne i konstruktionen â€%sâ€" #: fortran/match.c:2579 #, gcc-internal-format, gfc-internal-format msgid "CYCLE statement at %C is not applicable to non-loop construct '%s'" -msgstr "CYCLE-sats vid %C är inte tillämpbar på icke-slingkonstruktionen \"%s\"" +msgstr "CYCLE-sats vid %C är inte tillämpbar pÃ¥ icke-slingkonstruktionen â€%sâ€" #: fortran/match.c:2584 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: EXIT statement with no do-construct-name at %C" -msgstr "Fortran 2008: EXIT-sats utan något do-konstruktionsnamn vid %C" +msgstr "Fortran 2008: EXIT-sats utan nÃ¥got do-konstruktionsnamn vid %C" #: fortran/match.c:2590 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C is not applicable to construct '%s'" -msgstr "%s-sats vid %C är inte i tillämpbar på konstruktionen \"%s\"" +msgstr "%s-sats vid %C är inte i tillämpbar pÃ¥ konstruktionen â€%sâ€" #: fortran/match.c:2597 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C leaving OpenMP structured block" -msgstr "%s-sats vid %C lämnar ett OpenMP strukturerat block" +msgstr "%s-sats vid %C lämnar ett OpenMP strukturerat block" #: fortran/match.c:2621 #, gcc-internal-format, gfc-internal-format @@ -38708,7 +38711,7 @@ msgstr "EXIT-sats vid %C avslutar !$OMP DO-slinga" #: fortran/match.c:2626 #, gcc-internal-format, gfc-internal-format msgid "CYCLE statement at %C to non-innermost collapsed !$OMP DO loop" -msgstr "CYCLE vid %C till kollapsad !$OMP DO-slinga som inte är innerst" +msgstr "CYCLE vid %C till kollapsad !$OMP DO-slinga som inte är innerst" #: fortran/match.c:2693 #, gcc-internal-format, gfc-internal-format @@ -38723,22 +38726,22 @@ msgstr "Bildkontrollsatsen STOP vid %C i CRITICAL-block" #: fortran/match.c:2706 #, gcc-internal-format, gfc-internal-format msgid "STOP code at %L must be either INTEGER or CHARACTER type" -msgstr "STOP-kod vid %L måste antingen vara av INTEGER- eller CHARACTER-typ" +msgstr "STOP-kod vid %L mÃ¥ste antingen vara av INTEGER- eller CHARACTER-typ" #: fortran/match.c:2713 #, gcc-internal-format, gfc-internal-format msgid "STOP code at %L must be scalar" -msgstr "STOP-kod vid %L måste vara skalär" +msgstr "STOP-kod vid %L mÃ¥ste vara skalär" #: fortran/match.c:2721 #, gcc-internal-format, gfc-internal-format msgid "STOP code at %L must be default character KIND=%d" -msgstr "STOP-koden vid %L måste vara standard tecken-KIND=%d" +msgstr "STOP-koden vid %L mÃ¥ste vara standard tecken-KIND=%d" #: fortran/match.c:2729 #, gcc-internal-format, gfc-internal-format msgid "STOP code at %L must be default integer KIND=%d" -msgstr "STOP-kod vid %L måste vara standard heltal KIND=%d" +msgstr "STOP-kod vid %L mÃ¥ste vara standard heltal KIND=%d" #: fortran/match.c:2775 #, gcc-internal-format, gfc-internal-format @@ -38769,18 +38772,18 @@ msgstr "Bildkontrollsatsen STOP vid %C i CRITICAL-block" #: fortran/match.c:3924 #, gcc-internal-format, gfc-internal-format msgid "Redundant STAT tag found at %L " -msgstr "Överflödig STAT-tagg funnen vid %L " +msgstr "Överflödig STAT-tagg funnen vid %L " #: fortran/match.c:2898 fortran/match.c:3108 fortran/match.c:3627 #: fortran/match.c:3950 #, gcc-internal-format, gfc-internal-format msgid "Redundant ERRMSG tag found at %L " -msgstr "Överflödig ERRMSG-tagg funnen vid %L " +msgstr "Överflödig ERRMSG-tagg funnen vid %L " #: fortran/match.c:2919 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Redundant ACQUIRED_LOCK tag found at %L " -msgstr "Överflödig SOURCE-tagg funnen vid %L " +msgstr "Överflödig SOURCE-tagg funnen vid %L " #: fortran/match.c:2980 #, fuzzy, gcc-internal-format, gfc-internal-format @@ -38825,12 +38828,12 @@ msgstr "Borttagen funktion: Tilldelad GOTO-sats vid %C" #: fortran/match.c:3315 fortran/match.c:3368 #, gcc-internal-format, gfc-internal-format msgid "Statement label list in GOTO at %C cannot be empty" -msgstr "Satsetikettlistan i GOTO vid %C får inte vara tom" +msgstr "Satsetikettlistan i GOTO vid %C fÃ¥r inte vara tom" #: fortran/match.c:3378 #, gcc-internal-format, gfc-internal-format msgid "Obsolescent feature: Computed GOTO at %C" -msgstr "Förlegad funktion: Beräknat GOTO vid %C" +msgstr "Förlegad funktion: Beräknat GOTO vid %C" #: fortran/match.c:3450 #, gcc-internal-format, gfc-internal-format @@ -38845,7 +38848,7 @@ msgstr "Fortran 2003: typspecifikation i ALLOCATE vid %L" #: fortran/match.c:3499 #, gcc-internal-format, gfc-internal-format msgid "Bad allocate-object at %C for a PURE procedure" -msgstr "Felaktigt allokeringsobjekt vid %C för en PURE-procedur" +msgstr "Felaktigt allokeringsobjekt vid %C för en PURE-procedur" #: fortran/match.c:3524 #, gcc-internal-format, gfc-internal-format @@ -38860,22 +38863,22 @@ msgstr "Bildkontrollsatsen STOP vid %C i CRITICAL-block" #: fortran/match.c:3541 #, gcc-internal-format, gfc-internal-format msgid "Type of entity at %L is type incompatible with typespec" -msgstr "Entitetens typ vid %L är typinkompatibel med typspecifikationen" +msgstr "Entitetens typ vid %L är typinkompatibel med typspecifikationen" #: fortran/match.c:3549 #, gcc-internal-format, gfc-internal-format msgid "Kind type parameter for entity at %L differs from the kind type parameter of the typespec" -msgstr "Sorttypparameter för enheten vid %L skiljer sig från sorttypparametern i typspecifikationen" +msgstr "Sorttypparameter för enheten vid %L skiljer sig frÃ¥n sorttypparametern i typspecifikationen" #: fortran/match.c:3576 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %L is not a nonprocedure pointer or an allocatable variable" -msgstr "Allokeringsobjekt vid %L är inte en pekare på annat än procedur eller en allokerbar variabel" +msgstr "Allokeringsobjekt vid %L är inte en pekare pÃ¥ annat än procedur eller en allokerbar variabel" #: fortran/match.c:3583 #, gcc-internal-format, gfc-internal-format msgid "Shape specification for allocatable scalar at %C" -msgstr "Formspecifikation för allokerbar skalär vid %C" +msgstr "Formspecifikation för allokerbar skalär vid %C" #: fortran/match.c:3620 #, gcc-internal-format, gfc-internal-format @@ -38890,17 +38893,17 @@ msgstr "Fortran 2003: SOURCE-tagg vid %L" #: fortran/match.c:3651 #, gcc-internal-format, gfc-internal-format msgid "Redundant SOURCE tag found at %L " -msgstr "Överflödig SOURCE-tagg funnen vid %L " +msgstr "Överflödig SOURCE-tagg funnen vid %L " #: fortran/match.c:3658 #, gcc-internal-format, gfc-internal-format msgid "SOURCE tag at %L conflicts with the typespec at %L" -msgstr "SOURCE-taggen vid %L står i konflikt med typespecifikationen vid %L" +msgstr "SOURCE-taggen vid %L stÃ¥r i konflikt med typespecifikationen vid %L" #: fortran/match.c:3664 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: SOURCE tag at %L with more than a single allocate objects" -msgstr "Fortran 2008: Vektorspecifikation vid %C har mer än 7 dimensioner" +msgstr "Fortran 2008: Vektorspecifikation vid %C har mer än 7 dimensioner" #: fortran/match.c:3682 #, gcc-internal-format, gfc-internal-format @@ -38910,22 +38913,22 @@ msgstr "Fortran 2008: MOLD-tagg vid %L" #: fortran/match.c:3689 #, gcc-internal-format, gfc-internal-format msgid "Redundant MOLD tag found at %L " -msgstr "Överflödig MOLD-tagg funnen vid %L " +msgstr "Överflödig MOLD-tagg funnen vid %L " #: fortran/match.c:3696 #, gcc-internal-format, gfc-internal-format msgid "MOLD tag at %L conflicts with the typespec at %L" -msgstr "MOLD-taggen vid %L står i konflikt med typespecifikationen vid %L" +msgstr "MOLD-taggen vid %L stÃ¥r i konflikt med typespecifikationen vid %L" #: fortran/match.c:3722 #, gcc-internal-format, gfc-internal-format msgid "MOLD tag at %L conflicts with SOURCE tag at %L" -msgstr "MOLD-taggen vid %L står i konflikt med SOURCE-taggen vid %L" +msgstr "MOLD-taggen vid %L stÃ¥r i konflikt med SOURCE-taggen vid %L" #: fortran/match.c:3730 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %L with a deferred type parameter requires either a type-spec or SOURCE tag or a MOLD tag" -msgstr "Allokeringsobjekt vid %L med en fördröjd typparameter behöver antingen en typspecifikation eller en SOURCE-tagg eller en MOLD-tagg" +msgstr "Allokeringsobjekt vid %L med en fördröjd typparameter behöver antingen en typspecifikation eller en SOURCE-tagg eller en MOLD-tagg" #: fortran/match.c:3791 #, fuzzy, gcc-internal-format, gfc-internal-format @@ -38935,7 +38938,7 @@ msgstr "Pekarobjektet vid %L kan inte ha ett co-index" #: fortran/match.c:3874 #, gcc-internal-format, gfc-internal-format msgid "Illegal allocate-object at %C for a PURE procedure" -msgstr "Otillåtet allokeringsobjekt vid %C för en PURE-procedur" +msgstr "OtillÃ¥tet allokeringsobjekt vid %C för en PURE-procedur" #: fortran/match.c:3884 #, gcc-internal-format, gfc-internal-format @@ -38950,7 +38953,7 @@ msgstr "" #: fortran/match.c:3907 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %C is not a nonprocedure pointer or an allocatable variable" -msgstr "Allokeringsobjekt vid %C är inte en pekare på annat än procedur eller en allokerbar variabel" +msgstr "Allokeringsobjekt vid %C är inte en pekare pÃ¥ annat än procedur eller en allokerbar variabel" #: fortran/match.c:3944 #, gcc-internal-format, gfc-internal-format @@ -38970,32 +38973,32 @@ msgstr "Bildkontrollsatsen RETURN vid %C i CRITICAL-block" #: fortran/match.c:4017 #, gcc-internal-format, gfc-internal-format msgid "Alternate RETURN statement at %C is only allowed within a SUBROUTINE" -msgstr "Alternativ RETURN-sats vid %C är bara tillåten inuti en SUBROUTINE" +msgstr "Alternativ RETURN-sats vid %C är bara tillÃ¥ten inuti en SUBROUTINE" #: fortran/match.c:4022 #, gcc-internal-format, gfc-internal-format msgid "Obsolescent feature: Alternate RETURN at %C" -msgstr "Förlegad funktion: Alternativt RETURN vid %C" +msgstr "Förlegad funktion: Alternativt RETURN vid %C" #: fortran/match.c:4052 #, gcc-internal-format, gfc-internal-format msgid "Extension: RETURN statement in main program at %C" -msgstr "Utökning: RETURN-sats i huvudprogram vid %C" +msgstr "Utökning: RETURN-sats i huvudprogram vid %C" #: fortran/match.c:4080 #, gcc-internal-format, gfc-internal-format msgid "Expected component reference at %C" -msgstr "Komponentreferens förväntades vid %C" +msgstr "Komponentreferens förväntades vid %C" #: fortran/match.c:4086 #, gcc-internal-format, gfc-internal-format msgid "Junk after CALL at %C" -msgstr "Skräp efter CALL vid %C" +msgstr "Skräp efter CALL vid %C" #: fortran/match.c:4096 #, gcc-internal-format, gfc-internal-format msgid "Expected type-bound procedure or procedure pointer component at %C" -msgstr "Typbunden procedurreferens eller procedurpekarkomponent förväntades vid %C" +msgstr "Typbunden procedurreferens eller procedurpekarkomponent förväntades vid %C" #: fortran/match.c:4316 #, gcc-internal-format, gfc-internal-format @@ -39005,7 +39008,7 @@ msgstr "Syntaxfel i common-blocknamn vid %C" #: fortran/match.c:4352 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %C is already an external symbol that is not COMMON" -msgstr "Symbolen \"%s\" vid %C är redan en extern symbol som inte är COMMON" +msgstr "Symbolen â€%s†vid %C är redan en extern symbol som inte är COMMON" #. If we find an error, just print it and continue, #. cause it's just semantic, and we can see if there @@ -39013,107 +39016,107 @@ msgstr "Symbolen \"%s\" vid %C är redan en extern symbol som inte är COMMON" #: fortran/match.c:4411 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L in common block '%s' at %C must be declared with a C interoperable kind since common block '%s' is bind(c)" -msgstr "Variabel \"%s\" vid %L i common-block \"%s\" vid %C måste deklareras med en C-interoperativ sort eftersom common-block \"%s\" är bind(c)" +msgstr "Variabel â€%s†vid %L i common-block â€%s†vid %C mÃ¥ste deklareras med en C-interoperativ sort eftersom common-block â€%s†är bind(c)" #: fortran/match.c:4420 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' in common block '%s' at %C can not be bind(c) since it is not global" -msgstr "Variabel \"%s\" i common-block \"%s\" vid %C får inte vara bind(c) eftersom det inte är globalt" +msgstr "Variabel â€%s†i common-block â€%s†vid %C fÃ¥r inte vara bind(c) eftersom det inte är globalt" #: fortran/match.c:4427 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %C is already in a COMMON block" -msgstr "Symbolen \"%s\" vid %C är redan i ett COMMON-block" +msgstr "Symbolen â€%s†vid %C är redan i ett COMMON-block" #: fortran/match.c:4435 #, gcc-internal-format, gfc-internal-format msgid "Initialized symbol '%s' at %C can only be COMMON in BLOCK DATA" -msgstr "Initierad symbol \"%s\" vid %C kan endast vara COMMON i BLOCK DATA" +msgstr "Initierad symbol â€%s†vid %C kan endast vara COMMON i BLOCK DATA" #: fortran/match.c:4462 #, gcc-internal-format, gfc-internal-format msgid "Array specification for symbol '%s' in COMMON at %C must be explicit" -msgstr "Vektorspecifikation för symbolen \"%s\" i COMMON vid %C måste vara explicit" +msgstr "Vektorspecifikation för symbolen â€%s†i COMMON vid %C mÃ¥ste vara explicit" #: fortran/match.c:4472 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' in COMMON at %C cannot be a POINTER array" -msgstr "Symbolen \"%s\" i COMMON vid %C får inte vara en POINTER-vektor" +msgstr "Symbolen â€%s†i COMMON vid %C fÃ¥r inte vara en POINTER-vektor" #: fortran/match.c:4504 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s', in COMMON block '%s' at %C is being indirectly equivalenced to another COMMON block '%s'" -msgstr "Symbolen \"%s\", i COMMON-block \"%s\" vid %C är indirekt gjort ekvivalent med ett annat COMMON-block \"%s\"" +msgstr "Symbolen â€%sâ€, i COMMON-block â€%s†vid %C är indirekt gjort ekvivalent med ett annat COMMON-block â€%sâ€" #: fortran/match.c:4612 #, gcc-internal-format, gfc-internal-format msgid "Namelist group name '%s' at %C already has a basic type of %s" -msgstr "Namnlistegruppnamnet \"%s\" vid %C har redan grundtypen %s" +msgstr "Namnlistegruppnamnet â€%s†vid %C har redan grundtypen %s" #: fortran/match.c:4620 #, gcc-internal-format, gfc-internal-format msgid "Namelist group name '%s' at %C already is USE associated and cannot be respecified." -msgstr "Namnlistegruppnamn \"%s\" vid %C är redan USE-associerat och får inte specificeras om." +msgstr "Namnlistegruppnamn â€%s†vid %C är redan USE-associerat och fÃ¥r inte specificeras om." #: fortran/match.c:4647 #, gcc-internal-format, gfc-internal-format msgid "Assumed size array '%s' in namelist '%s' at %C is not allowed" -msgstr "Vektor \"%s\" med underförstådd storlek i namnlistan \"%s\" vid %C är inte tillåtet" +msgstr "Vektor â€%s†med underförstÃ¥dd storlek i namnlistan â€%s†vid %C är inte tillÃ¥tet" #: fortran/match.c:4781 #, gcc-internal-format, gfc-internal-format msgid "Derived type component %C is not a permitted EQUIVALENCE member" -msgstr "Härledd typkomponent %C är inte en tillåten EQUIVALENCE-medlem" +msgstr "Härledd typkomponent %C är inte en tillÃ¥ten EQUIVALENCE-medlem" #: fortran/match.c:4789 #, gcc-internal-format, gfc-internal-format msgid "Array reference in EQUIVALENCE at %C cannot be an array section" -msgstr "Vektorreferens i EQUIVALENCE vid %C får inte vara en vektorsektion" +msgstr "Vektorreferens i EQUIVALENCE vid %C fÃ¥r inte vara en vektorsektion" #: fortran/match.c:4817 #, gcc-internal-format, gfc-internal-format msgid "EQUIVALENCE at %C requires two or more objects" -msgstr "EQUIVALENCE vid %C kräver två eller flera objekt" +msgstr "EQUIVALENCE vid %C kräver tvÃ¥ eller flera objekt" #: fortran/match.c:4831 #, gcc-internal-format, gfc-internal-format msgid "Attempt to indirectly overlap COMMON blocks %s and %s by EQUIVALENCE at %C" -msgstr "Försök att indirekt överlappa COMMON-block %s och %s med EQUIVALENCE vid %C" +msgstr "Försök att indirekt överlappa COMMON-block %s och %s med EQUIVALENCE vid %C" #: fortran/match.c:4844 #, gcc-internal-format, gfc-internal-format msgid "Expecting a comma in EQUIVALENCE at %C" -msgstr "Komma förväntades i EQUIVALENCE vid %C" +msgstr "Komma förväntades i EQUIVALENCE vid %C" #: fortran/match.c:4960 #, gcc-internal-format, gfc-internal-format msgid "Statement function at %L is recursive" -msgstr "Satsfunktion vid %L är rekursiv" +msgstr "Satsfunktion vid %L är rekursiv" #: fortran/match.c:4966 #, gcc-internal-format, gfc-internal-format msgid "Obsolescent feature: Statement function at %C" -msgstr "Förlegad funktion: Satsfunktion vid %C" +msgstr "Förlegad funktion: Satsfunktion vid %C" #: fortran/match.c:5052 #, gcc-internal-format, gfc-internal-format msgid "Expected initialization expression in CASE at %C" -msgstr "Initieringsuttryck förväntades i CASE vid %C" +msgstr "Initieringsuttryck förväntades i CASE vid %C" #: fortran/match.c:5084 #, gcc-internal-format, gfc-internal-format msgid "Expected block name '%s' of SELECT construct at %C" -msgstr "Blocknamnet \"%s\" förväntades av SELECT-konstruktionen vid %C" +msgstr "Blocknamnet â€%s†förväntades av SELECT-konstruktionen vid %C" #: fortran/match.c:5268 #, gcc-internal-format, gfc-internal-format msgid "Selector in SELECT TYPE at %C is not a named variable; use associate-name=>" -msgstr "Väljare i SELECT TYPE vid %C är inte en namngiven variabel, använd associationsnamn =>" +msgstr "Väljare i SELECT TYPE vid %C är inte en namngiven variabel, använd associationsnamn =>" #: fortran/match.c:5301 #, gcc-internal-format, gfc-internal-format msgid "Unexpected CASE statement at %C" -msgstr "Oväntad CASE-sats vid %C" +msgstr "Oväntad CASE-sats vid %C" #: fortran/match.c:5353 #, gcc-internal-format, gfc-internal-format @@ -39123,7 +39126,7 @@ msgstr "Syntaxfel i CASE-specifikation vid %C" #: fortran/match.c:5371 #, gcc-internal-format, gfc-internal-format msgid "Unexpected TYPE IS statement at %C" -msgstr "Oväntad TYPE IS-sats vid %C" +msgstr "Oväntad TYPE IS-sats vid %C" #: fortran/match.c:5404 #, gcc-internal-format, gfc-internal-format @@ -39143,33 +39146,33 @@ msgstr "ELSEWHERE-sats vid %C inte innesluten i WHERE-block" #: fortran/match.c:5637 #, gcc-internal-format, gfc-internal-format msgid "Label '%s' at %C doesn't match WHERE label '%s'" -msgstr "Etiketten \"%s\" vid %C stämmer inte med WHERE-etikett \"%s\"" +msgstr "Etiketten â€%s†vid %C stämmer inte med WHERE-etikett â€%sâ€" #: fortran/matchexp.c:72 #, gcc-internal-format, gfc-internal-format msgid "Bad character '%c' in OPERATOR name at %C" -msgstr "Felaktigt tecken \"%c\" i OPERATOR-namn vid %C" +msgstr "Felaktigt tecken â€%c†i OPERATOR-namn vid %C" #: fortran/matchexp.c:80 #, gcc-internal-format, gfc-internal-format msgid "The name '%s' cannot be used as a defined operator at %C" -msgstr "Namnet \"%s\" får inte användas som en definierad operator vid %C" +msgstr "Namnet â€%s†fÃ¥r inte användas som en definierad operator vid %C" #: fortran/matchexp.c:173 #, gcc-internal-format, gfc-internal-format msgid "Expected a right parenthesis in expression at %C" -msgstr "En högerparentes förväntades i uttrycket vid %C" +msgstr "En högerparentes förväntades i uttrycket vid %C" #: fortran/matchexp.c:279 #, gcc-internal-format, gfc-internal-format msgid "Expected exponent in expression at %C" -msgstr "Förväntade exponent i uttryck vid %C" +msgstr "Förväntade exponent i uttryck vid %C" #: fortran/matchexp.c:317 fortran/matchexp.c:322 fortran/matchexp.c:426 #: fortran/matchexp.c:431 #, gcc-internal-format, gfc-internal-format msgid "Extension: Unary operator following arithmetic operator (use parentheses) at %C" -msgstr "Utökning: Unär operator följer aritmetisk operator (använd parenteser) vid %C" +msgstr "Utökning: Unär operator följer aritmetisk operator (använd parenteser) vid %C" #: fortran/module.c:548 #, gcc-internal-format, gfc-internal-format @@ -39184,12 +39187,12 @@ msgstr "Modulnatur i USE-sats vid %C skall vara antingen INTRINSIC eller NON_INT #: fortran/module.c:573 #, gcc-internal-format, gfc-internal-format msgid "\"::\" was expected after module nature at %C but was not found" -msgstr "\"::\" förväntades efter modulnatur vid %C men fanns inte" +msgstr "â€::†förväntades efter modulnatur vid %C men fanns inte" #: fortran/module.c:583 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: \"USE :: module\" at %C" -msgstr "Fortran 2003: \"USE :: module\" vid %C" +msgstr "Fortran 2003: â€USE :: module†vid %C" #: fortran/module.c:643 #, gcc-internal-format, gfc-internal-format @@ -39199,118 +39202,118 @@ msgstr "Generisk specifikation saknas i USE-sats vid %C" #: fortran/module.c:651 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Renaming operators in USE statements at %C" -msgstr "Fortran 2003: Byter namn på operatorer i USE-sats vid %C" +msgstr "Fortran 2003: Byter namn pÃ¥ operatorer i USE-sats vid %C" #: fortran/module.c:693 #, gcc-internal-format, gfc-internal-format msgid "The name '%s' at %C has already been used as an external module name." -msgstr "Namnet \"%s\" vid %C har redan använts som ett externt modulnamn." +msgstr "Namnet â€%s†vid %C har redan använts som ett externt modulnamn." #: fortran/module.c:1006 #, gcc-internal-format, gfc-internal-format msgid "Reading module %s at line %d column %d: %s" -msgstr "När modul %s på rad %d kolumn %d lästes: %s" +msgstr "När modul %s pÃ¥ rad %d kolumn %d lästes: %s" #: fortran/module.c:1010 #, gcc-internal-format, gfc-internal-format msgid "Writing module %s at line %d column %d: %s" -msgstr "När modul %s på rad %d kolumn %d lästes: %s" +msgstr "När modul %s pÃ¥ rad %d kolumn %d lästes: %s" #: fortran/module.c:1014 #, gcc-internal-format, gfc-internal-format msgid "Module %s at line %d column %d: %s" -msgstr "Modul %s på rad %d kolumn %d: %s" +msgstr "Modul %s pÃ¥ rad %d kolumn %d: %s" #: fortran/module.c:1449 #, gcc-internal-format, gfc-internal-format msgid "Error writing modules file: %s" -msgstr "Fel när modulfil skrevs: %s" +msgstr "Fel när modulfil skrevs: %s" #: fortran/module.c:3396 #, gcc-internal-format, gfc-internal-format msgid "Namelist %s cannot be renamed by USE association to %s" -msgstr "Namnlistan %s får inte namnändras av USE-association till %s" +msgstr "Namnlistan %s fÃ¥r inte namnändras av USE-association till %s" #: fortran/module.c:4427 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "'%s' of module '%s', imported at %C, is also the name of the current program unit" -msgstr "Namnet \"%s\" vid %C är en tvetydig referens till \"%s\" från den aktuella programenheten" +msgstr "Namnet â€%s†vid %C är en tvetydig referens till â€%s†frÃ¥n den aktuella programenheten" #: fortran/module.c:4722 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' referenced at %L not found in module '%s'" -msgstr "Symbolen \"%s\" refererad från %L finns inte i modulen \"%s\"" +msgstr "Symbolen â€%s†refererad frÃ¥n %L finns inte i modulen â€%sâ€" #: fortran/module.c:4729 #, gcc-internal-format, gfc-internal-format msgid "User operator '%s' referenced at %L not found in module '%s'" -msgstr "Användaroperatorn \"%s\" refererad från %L finns inte i modulen \"%s\"" +msgstr "Användaroperatorn â€%s†refererad frÃ¥n %L finns inte i modulen â€%sâ€" #: fortran/module.c:4734 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic operator '%s' referenced at %L not found in module '%s'" -msgstr "Inbyggd operator \"%s\" refererad från %L finns inte i modulen \"%s\"" +msgstr "Inbyggd operator â€%s†refererad frÃ¥n %L finns inte i modulen â€%sâ€" #: fortran/module.c:5372 #, gcc-internal-format, gfc-internal-format msgid "Can't open module file '%s' for writing at %C: %s" -msgstr "Kan inte öppna modulfilen \"%s\" för skrivning vid %C: %s" +msgstr "Kan inte öppna modulfilen â€%s†för skrivning vid %C: %s" #: fortran/module.c:5405 #, gcc-internal-format, gfc-internal-format msgid "Error writing module file '%s' for writing: %s" -msgstr "Fel när modulfilen \"%s\" skrevs: %s" +msgstr "Fel när modulfilen â€%s†skrevs: %s" #: fortran/module.c:5414 #, gcc-internal-format, gfc-internal-format msgid "Can't delete module file '%s': %s" -msgstr "Kan inte radera modulfil \"%s\": %s" +msgstr "Kan inte radera modulfil â€%sâ€: %s" #: fortran/module.c:5417 #, gcc-internal-format, gfc-internal-format msgid "Can't rename module file '%s' to '%s': %s" -msgstr "Kan inte ändra namn på modulfilen \"%s\" till \"%s\": %s" +msgstr "Kan inte ändra namn pÃ¥ modulfilen â€%s†till â€%sâ€: %s" #: fortran/module.c:5423 #, gcc-internal-format, gfc-internal-format msgid "Can't delete temporary module file '%s': %s" -msgstr "Kan inte radera temporär modulfil \"%s\": %s" +msgstr "Kan inte radera temporär modulfil â€%sâ€: %s" #: fortran/module.c:5442 fortran/module.c:5654 fortran/module.c:5687 #: fortran/module.c:5729 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' already declared" -msgstr "Symbolen \"%s\" är redan deklarerad" +msgstr "Symbolen â€%s†är redan deklarerad" #: fortran/module.c:5546 fortran/module.c:5825 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "The symbol '%s', referenced at %L, is not in the selected standard" -msgstr "Symbolen \"%s\", refererad från %C, finns inte i den valda standarden" +msgstr "Symbolen â€%sâ€, refererad frÃ¥n %C, finns inte i den valda standarden" #: fortran/module.c:5633 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' referenced at %L not found in intrinsic module ISO_C_BINDING" -msgstr "Symbolen \"%s\" refererad från %L hittas inte i den inbyggda modulen ISO_C_BINDING" +msgstr "Symbolen â€%s†refererad frÃ¥n %L hittas inte i den inbyggda modulen ISO_C_BINDING" #: fortran/module.c:5810 #, gcc-internal-format, gfc-internal-format msgid "Use of intrinsic module '%s' at %C conflicts with non-intrinsic module name used previously" -msgstr "Användning av inbyggd modul \"%s\" vid %C står i konflikt med namn på ej inbyggd modul använd tidigare" +msgstr "Användning av inbyggd modul â€%s†vid %C stÃ¥r i konflikt med namn pÃ¥ ej inbyggd modul använd tidigare" #: fortran/module.c:5833 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module ISO_FORTRAN_ENV at %L is incompatible with option %s" -msgstr "Användning av namngiven NUMERIC_STORAGE_SIZE-konstant från inbyggd modul ISO_FORTRAN_ENV vid %C är inte kompatibelt med flaggan %s" +msgstr "Användning av namngiven NUMERIC_STORAGE_SIZE-konstant frÃ¥n inbyggd modul ISO_FORTRAN_ENV vid %C är inte kompatibelt med flaggan %s" #: fortran/module.c:5903 #, gcc-internal-format, gfc-internal-format msgid "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module ISO_FORTRAN_ENV at %C is incompatible with option %s" -msgstr "Användning av namngiven NUMERIC_STORAGE_SIZE-konstant från inbyggd modul ISO_FORTRAN_ENV vid %C är inte kompatibelt med flaggan %s" +msgstr "Användning av namngiven NUMERIC_STORAGE_SIZE-konstant frÃ¥n inbyggd modul ISO_FORTRAN_ENV vid %C är inte kompatibelt med flaggan %s" #: fortran/module.c:5961 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' referenced at %L not found in intrinsic module ISO_FORTRAN_ENV" -msgstr "Symbolen \"%s\" refererad vid %L hittas inte i den inbyggda modulen ISO_FORTRAN_ENV" +msgstr "Symbolen â€%s†refererad vid %L hittas inte i den inbyggda modulen ISO_FORTRAN_ENV" #: fortran/module.c:6000 #, gcc-internal-format, gfc-internal-format @@ -39325,37 +39328,37 @@ msgstr "Fortran 2003: ISO_C_BINDING-modul vid %C" #: fortran/module.c:6022 #, gcc-internal-format, gfc-internal-format msgid "Can't find an intrinsic module named '%s' at %C" -msgstr "Det finns ingen inbyggd modul med namnet \"%s\" vid %C" +msgstr "Det finns ingen inbyggd modul med namnet â€%s†vid %C" #: fortran/module.c:6027 #, gcc-internal-format, gfc-internal-format msgid "Can't open module file '%s' for reading at %C: %s" -msgstr "Kan inte öppna modulfilen \"%s\" för läsning vid %C: %s" +msgstr "Kan inte öppna modulfilen â€%s†för läsning vid %C: %s" #: fortran/module.c:6035 #, gcc-internal-format, gfc-internal-format msgid "Use of non-intrinsic module '%s' at %C conflicts with intrinsic module name used previously" -msgstr "Användning av ej inbyggd modul \"%s\" vid %C står i konflikt med namn på inbyggd modul använd tidigare" +msgstr "Användning av ej inbyggd modul â€%s†vid %C stÃ¥r i konflikt med namn pÃ¥ inbyggd modul använd tidigare" #: fortran/module.c:6055 #, gcc-internal-format, gfc-internal-format msgid "File '%s' opened at %C is not a GFORTRAN module file" -msgstr "Filen \"%s\" öppnad vid %C är inte en GFORTRAN-modulfil" +msgstr "Filen â€%s†öppnad vid %C är inte en GFORTRAN-modulfil" #: fortran/module.c:6062 #, gcc-internal-format, gfc-internal-format msgid "Parse error when checking module version for file '%s' opened at %C" -msgstr "Tolkningsfel vid kontroll av modulversion för filen \"%s\" öppnad vid %C" +msgstr "Tolkningsfel vid kontroll av modulversion för filen â€%s†öppnad vid %C" #: fortran/module.c:6067 #, gcc-internal-format, gfc-internal-format msgid "Wrong module version '%s' (expected '%s') for file '%s' opened at %C" -msgstr "Fel modulversion \"%s\" (\"%s\" förväntades) för filen \"%s\" öppnad vid %C" +msgstr "Fel modulversion â€%s†(â€%s†förväntades) för filen â€%s†öppnad vid %C" #: fortran/module.c:6082 #, gcc-internal-format msgid "Can't USE the same module we're building!" -msgstr "Det går inta att USE samma modul vi bygger!" +msgstr "Det gÃ¥r inta att USE samma modul vi bygger!" #: fortran/openmp.c:133 fortran/openmp.c:595 #, gcc-internal-format, gfc-internal-format @@ -39370,37 +39373,37 @@ msgstr "Syntaxfel i OpenMP-variabellista vid %C" #: fortran/openmp.c:297 #, gcc-internal-format, gfc-internal-format msgid "%s is not INTRINSIC procedure name at %C" -msgstr "%s är inte namn på en INTRINSIC procedur vid %C" +msgstr "%s är inte namn pÃ¥ en INTRINSIC procedur vid %C" #: fortran/openmp.c:414 #, gcc-internal-format, gfc-internal-format msgid "COLLAPSE clause argument not constant positive integer at %C" -msgstr "COLLAPSE-klausulargument är inte ett konstant positivt heltal vid %C" +msgstr "COLLAPSE-klausulargument är inte ett konstant positivt heltal vid %C" #: fortran/openmp.c:482 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after TASKWAIT clause at %C" -msgstr "Oväntat skräp efter TASKWAIT-klausul vid %C" +msgstr "Oväntat skräp efter TASKWAIT-klausul vid %C" #: fortran/openmp.c:496 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after TASKYIELD clause at %C" -msgstr "Oväntat skräp efter TASKWAIT-klausul vid %C" +msgstr "Oväntat skräp efter TASKWAIT-klausul vid %C" #: fortran/openmp.c:514 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after $OMP CRITICAL statement at %C" -msgstr "Oväntat skräp efter $OMP CRITICAL-sats vid %C" +msgstr "Oväntat skräp efter $OMP CRITICAL-sats vid %C" #: fortran/openmp.c:542 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after $OMP FLUSH statement at %C" -msgstr "Oväntat skräp efter $OMP FLUSH-sats vid %C" +msgstr "Oväntat skräp efter $OMP FLUSH-sats vid %C" #: fortran/openmp.c:574 #, gcc-internal-format, gfc-internal-format msgid "Threadprivate variable at %C is an element of a COMMON block" -msgstr "Trådprivat variabel vid %C är ett element i ett COMMON-block" +msgstr "TrÃ¥dprivat variabel vid %C är ett element i ett COMMON-block" #: fortran/openmp.c:614 #, gcc-internal-format, gfc-internal-format @@ -39410,173 +39413,173 @@ msgstr "Syntaxfel i !$OMP THREADPRIVATE-lista vid %C" #: fortran/openmp.c:690 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after $OMP WORKSHARE statement at %C" -msgstr "Oväntat skräp efter $OMP ORDERED-sats vid %C" +msgstr "Oväntat skräp efter $OMP ORDERED-sats vid %C" #: fortran/openmp.c:704 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after $OMP MASTER statement at %C" -msgstr "Oväntat skräp efter $OMP MASTER-sats vid %C" +msgstr "Oväntat skräp efter $OMP MASTER-sats vid %C" #: fortran/openmp.c:718 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after $OMP ORDERED statement at %C" -msgstr "Oväntat skräp efter $OMP ORDERED-sats vid %C" +msgstr "Oväntat skräp efter $OMP ORDERED-sats vid %C" #: fortran/openmp.c:741 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after $OMP ATOMIC statement at %C" -msgstr "Oväntat skräp efter $OMP ATOMIC-sats vid %C" +msgstr "Oväntat skräp efter $OMP ATOMIC-sats vid %C" #: fortran/openmp.c:755 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after $OMP BARRIER statement at %C" -msgstr "Oväntat skräp efter $OMP BARRIER-sats vid %C" +msgstr "Oväntat skräp efter $OMP BARRIER-sats vid %C" #: fortran/openmp.c:772 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after NOWAIT clause at %C" -msgstr "Oväntat skräp efter NOWAIT-klausul vid %C" +msgstr "Oväntat skräp efter NOWAIT-klausul vid %C" #: fortran/openmp.c:819 fortran/resolve.c:8998 fortran/resolve.c:9476 #, gcc-internal-format, gfc-internal-format msgid "IF clause at %L requires a scalar LOGICAL expression" -msgstr "IF-klausul vid %L kräver ett skalärt LOGICAL-uttryck" +msgstr "IF-klausul vid %L kräver ett skalärt LOGICAL-uttryck" #: fortran/openmp.c:827 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "FINAL clause at %L requires a scalar LOGICAL expression" -msgstr "IF-klausul vid %L kräver ett skalärt LOGICAL-uttryck" +msgstr "IF-klausul vid %L kräver ett skalärt LOGICAL-uttryck" #: fortran/openmp.c:835 #, gcc-internal-format, gfc-internal-format msgid "NUM_THREADS clause at %L requires a scalar INTEGER expression" -msgstr "NUM_THREADS-klausul vid %L kräver ett skalärt INTEGER-uttryck" +msgstr "NUM_THREADS-klausul vid %L kräver ett skalärt INTEGER-uttryck" #: fortran/openmp.c:843 #, gcc-internal-format, gfc-internal-format msgid "SCHEDULE clause's chunk_size at %L requires a scalar INTEGER expression" -msgstr "SCHEDULE-klausuls chunk_size vid %L kräver ett skalärt INTEGER-uttryck" +msgstr "SCHEDULE-klausuls chunk_size vid %L kräver ett skalärt INTEGER-uttryck" #: fortran/openmp.c:885 #, gcc-internal-format, gfc-internal-format msgid "Object '%s' is not a variable at %L" -msgstr "Objekt \"%s\" är inte en variabel vid %L" +msgstr "Objekt â€%s†är inte en variabel vid %L" #: fortran/openmp.c:894 fortran/openmp.c:905 fortran/openmp.c:913 #: fortran/openmp.c:924 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' present on multiple clauses at %L" -msgstr "Symbolen \"%s\" finns i flera fall vid %L" +msgstr "Symbolen â€%s†finns i flera fall vid %L" #: fortran/openmp.c:947 #, gcc-internal-format, gfc-internal-format msgid "Non-THREADPRIVATE object '%s' in COPYIN clause at %L" -msgstr "Ej THREADPRIVATE objekt \"%s\" i COPYIN-fall vid %L" +msgstr "Ej THREADPRIVATE objekt â€%s†i COPYIN-fall vid %L" #: fortran/openmp.c:950 #, gcc-internal-format, gfc-internal-format msgid "COPYIN clause object '%s' at %L has ALLOCATABLE components" -msgstr "COPYIN-klausulobjekt \"%s\" vid %L har ALLOCATABLE-komponenter" +msgstr "COPYIN-klausulobjekt â€%s†vid %L har ALLOCATABLE-komponenter" #: fortran/openmp.c:958 #, gcc-internal-format, gfc-internal-format msgid "Assumed size array '%s' in COPYPRIVATE clause at %L" -msgstr "Vektor \"%s\" med underförstådd storlek i COPYPRIVATE-klausul vid %L" +msgstr "Vektor â€%s†med underförstÃ¥dd storlek i COPYPRIVATE-klausul vid %L" #: fortran/openmp.c:961 #, gcc-internal-format, gfc-internal-format msgid "COPYPRIVATE clause object '%s' at %L has ALLOCATABLE components" -msgstr "COPYPRIVATE-klausulobjekt \"%s\" vid %L har ALLOCATABLE-komponenter" +msgstr "COPYPRIVATE-klausulobjekt â€%s†vid %L har ALLOCATABLE-komponenter" #: fortran/openmp.c:969 #, gcc-internal-format, gfc-internal-format msgid "THREADPRIVATE object '%s' in SHARED clause at %L" -msgstr "THREADPRIVATE objekt \"%s\" i SHARED fall vid %L" +msgstr "THREADPRIVATE objekt â€%s†i SHARED fall vid %L" #: fortran/openmp.c:972 #, gcc-internal-format, gfc-internal-format msgid "Cray pointee '%s' in SHARED clause at %L" -msgstr "Cray-utpekad \"%s\" i SHARED-klausul vid %L" +msgstr "Cray-utpekad â€%s†i SHARED-klausul vid %L" #: fortran/openmp.c:980 #, gcc-internal-format, gfc-internal-format msgid "THREADPRIVATE object '%s' in %s clause at %L" -msgstr "THREADPRIVATE objekt \"%s\" i %s-fall vid %L" +msgstr "THREADPRIVATE objekt â€%s†i %s-fall vid %L" #: fortran/openmp.c:983 #, gcc-internal-format, gfc-internal-format msgid "Cray pointee '%s' in %s clause at %L" -msgstr "Cray-utpekad \"%s\" i %s-klausul vid %L" +msgstr "Cray-utpekad â€%s†i %s-klausul vid %L" #: fortran/openmp.c:990 #, gcc-internal-format, gfc-internal-format msgid "POINTER object '%s' in %s clause at %L" -msgstr "POINTER-objekt \"%s\" i %s-fall vid %L" +msgstr "POINTER-objekt â€%s†i %s-fall vid %L" #: fortran/openmp.c:996 #, gcc-internal-format, gfc-internal-format msgid "%s clause object '%s' has ALLOCATABLE components at %L" -msgstr "%s-klausulobjekt \"%s\" har ALLOCATABLE-komponenter vid %L" +msgstr "%s-klausulobjekt â€%s†har ALLOCATABLE-komponenter vid %L" #: fortran/openmp.c:1001 #, gcc-internal-format, gfc-internal-format msgid "Cray pointer '%s' in %s clause at %L" -msgstr "Cray-pekare \"%s\" i %s-klausul vid %L" +msgstr "Cray-pekare â€%s†i %s-klausul vid %L" #: fortran/openmp.c:1005 #, gcc-internal-format, gfc-internal-format msgid "Assumed size array '%s' in %s clause at %L" -msgstr "Vektor \"%s\" med underförstådd storlek i %s-klausul vid %L" +msgstr "Vektor â€%s†med underförstÃ¥dd storlek i %s-klausul vid %L" #: fortran/openmp.c:1010 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' in %s clause is used in NAMELIST statement at %L" -msgstr "Variabeln \"%s\" i %s-klausul används i NAMELIST-sats vid %L" +msgstr "Variabeln â€%s†i %s-klausul används i NAMELIST-sats vid %L" #: fortran/openmp.c:1019 #, gcc-internal-format, gfc-internal-format msgid "%c REDUCTION variable '%s' at %L must be of numeric type, got %s" -msgstr "%c REDUCTION-variabel \"%s\" vid %L måste vara av numerisk typ, fick %s" +msgstr "%c REDUCTION-variabel â€%s†vid %L mÃ¥ste vara av numerisk typ, fick %s" #: fortran/openmp.c:1030 #, gcc-internal-format, gfc-internal-format msgid "%s REDUCTION variable '%s' must be LOGICAL at %L" -msgstr "%s REDUCTION-variabel \"%s\" måste vara LOGICAL vid %L" +msgstr "%s REDUCTION-variabel â€%s†mÃ¥ste vara LOGICAL vid %L" #: fortran/openmp.c:1041 #, gcc-internal-format, gfc-internal-format msgid "%s REDUCTION variable '%s' must be INTEGER or REAL at %L" -msgstr "%s REDUCTION-variabel \"%s\" måste vara INTEGER eller REAL vid %L" +msgstr "%s REDUCTION-variabel â€%s†mÃ¥ste vara INTEGER eller REAL vid %L" #: fortran/openmp.c:1050 #, gcc-internal-format, gfc-internal-format msgid "%s REDUCTION variable '%s' must be INTEGER at %L" -msgstr "%s REDUCTION-variabel \"%s\" måste vara INTEGER vid %L" +msgstr "%s REDUCTION-variabel â€%s†mÃ¥ste vara INTEGER vid %L" #: fortran/openmp.c:1168 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L" -msgstr "!$OMP ATOMIC-sats måste sätta en skalär variabel av inbyggd typ vid %L" +msgstr "!$OMP ATOMIC-sats mÃ¥ste sätta en skalär variabel av inbyggd typ vid %L" #: fortran/openmp.c:1194 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC READ statement must read from a scalar variable of intrinsic type at %L" -msgstr "!$OMP ATOMIC-sats måste sätta en skalär variabel av inbyggd typ vid %L" +msgstr "!$OMP ATOMIC-sats mÃ¥ste sätta en skalär variabel av inbyggd typ vid %L" #: fortran/openmp.c:1199 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "expr in !$OMP ATOMIC WRITE assignment var = expr must be scalar and cannot reference var at %L" -msgstr "uttr i !$OMP ATOMIC-tilldelning var = var op uttr måste vara skalär och får inte referera var vid %L" +msgstr "uttr i !$OMP ATOMIC-tilldelning var = var op uttr mÃ¥ste vara skalär och fÃ¥r inte referera var vid %L" #: fortran/openmp.c:1221 fortran/openmp.c:1491 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC CAPTURE capture statement must read from a scalar variable of intrinsic type at %L" -msgstr "!$OMP ATOMIC-sats måste sätta en skalär variabel av inbyggd typ vid %L" +msgstr "!$OMP ATOMIC-sats mÃ¥ste sätta en skalär variabel av inbyggd typ vid %L" #: fortran/openmp.c:1236 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC CAPTURE update statement must set a scalar variable of intrinsic type at %L" -msgstr "!$OMP ATOMIC-sats måste sätta en skalär variabel av inbyggd typ vid %L" +msgstr "!$OMP ATOMIC-sats mÃ¥ste sätta en skalär variabel av inbyggd typ vid %L" #: fortran/openmp.c:1243 fortran/openmp.c:1498 #, gcc-internal-format, gfc-internal-format @@ -39586,197 +39589,197 @@ msgstr "" #: fortran/openmp.c:1287 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC assignment operator must be +, *, -, /, .AND., .OR., .EQV. or .NEQV. at %L" -msgstr "!$OMP ATOMIC-tilldelningsoperator måste vara +, *, -, /, .AND., .OR., .EQV. eller .NEQV. vid %L" +msgstr "!$OMP ATOMIC-tilldelningsoperator mÃ¥ste vara +, *, -, /, .AND., .OR., .EQV. eller .NEQV. vid %L" #: fortran/openmp.c:1335 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC assignment must be var = var op expr or var = expr op var at %L" -msgstr "!$OMP ATOMIC-tilldelning måste vara var = var op uttr eller var = uttr op var vid %L" +msgstr "!$OMP ATOMIC-tilldelning mÃ¥ste vara var = var op uttr eller var = uttr op var vid %L" #: fortran/openmp.c:1349 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC var = var op expr not mathematically equivalent to var = var op (expr) at %L" -msgstr "!$OMP ATOMIC var = var op expr är inte matematiskt ekvivalent med var = var op (uttr) vid %L" +msgstr "!$OMP ATOMIC var = var op expr är inte matematiskt ekvivalent med var = var op (uttr) vid %L" #: fortran/openmp.c:1381 #, gcc-internal-format, gfc-internal-format msgid "expr in !$OMP ATOMIC assignment var = var op expr must be scalar and cannot reference var at %L" -msgstr "uttr i !$OMP ATOMIC-tilldelning var = var op uttr måste vara skalär och får inte referera var vid %L" +msgstr "uttr i !$OMP ATOMIC-tilldelning var = var op uttr mÃ¥ste vara skalär och fÃ¥r inte referera var vid %L" #: fortran/openmp.c:1405 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC assignment intrinsic IAND, IOR or IEOR must have two arguments at %L" -msgstr "!$OMP ATOMIC-tilldelning av inbyggd IAND, IOR eller IEOR måste ha två argument vid %L" +msgstr "!$OMP ATOMIC-tilldelning av inbyggd IAND, IOR eller IEOR mÃ¥ste ha tvÃ¥ argument vid %L" #: fortran/openmp.c:1412 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC assignment intrinsic must be MIN, MAX, IAND, IOR or IEOR at %L" -msgstr "!$OMP ATOMIC-tilldelning av inbyggd måste vara MIN, MAX, IAND, IOR eller IEOR vid %L" +msgstr "!$OMP ATOMIC-tilldelning av inbyggd mÃ¥ste vara MIN, MAX, IAND, IOR eller IEOR vid %L" #: fortran/openmp.c:1428 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC intrinsic arguments except one must not reference '%s' at %L" -msgstr "!$OMP ATOMIC-inbyggds argument utom ett får inte referera \"%s\" vid %L" +msgstr "!$OMP ATOMIC-inbyggds argument utom ett fÃ¥r inte referera â€%s†vid %L" #: fortran/openmp.c:1431 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC intrinsic arguments must be scalar at %L" -msgstr "!$OMP ATOMIC-inbyggds argument måste vara skalära vid %L" +msgstr "!$OMP ATOMIC-inbyggds argument mÃ¥ste vara skalära vid %L" #: fortran/openmp.c:1437 #, gcc-internal-format, gfc-internal-format msgid "First or last !$OMP ATOMIC intrinsic argument must be '%s' at %L" -msgstr "Första eller sista !$OMP ATOMIC-inbyggds argument måste vara \"%s\" vid %L" +msgstr "Första eller sista !$OMP ATOMIC-inbyggds argument mÃ¥ste vara â€%s†vid %L" #: fortran/openmp.c:1455 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC assignment must have an operator or intrinsic on right hand side at %L" -msgstr "!$OMP ATOMIC-tilldelning måste ha en operator eller inbyggd på högersidan vid %L" +msgstr "!$OMP ATOMIC-tilldelning mÃ¥ste ha en operator eller inbyggd pÃ¥ högersidan vid %L" #: fortran/openmp.c:1469 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC CAPTURE capture statement must set a scalar variable of intrinsic type at %L" -msgstr "!$OMP ATOMIC-sats måste sätta en skalär variabel av inbyggd typ vid %L" +msgstr "!$OMP ATOMIC-sats mÃ¥ste sätta en skalär variabel av inbyggd typ vid %L" #: fortran/openmp.c:1661 #, gcc-internal-format, gfc-internal-format msgid "!$OMP DO cannot be a DO WHILE or DO without loop control at %L" -msgstr "!$OMP DO får inte vara en DO WHILE eller DO utan slingstyrning vid %L" +msgstr "!$OMP DO fÃ¥r inte vara en DO WHILE eller DO utan slingstyrning vid %L" #: fortran/openmp.c:1667 #, gcc-internal-format, gfc-internal-format msgid "!$OMP DO iteration variable must be of type integer at %L" -msgstr "!$OMP DO-iterationsvariabel måste ha typen heltal vid %L" +msgstr "!$OMP DO-iterationsvariabel mÃ¥ste ha typen heltal vid %L" #: fortran/openmp.c:1671 #, gcc-internal-format, gfc-internal-format msgid "!$OMP DO iteration variable must not be THREADPRIVATE at %L" -msgstr "!$OMP DO-iterationsvariabel får inte vara THREADPRIVATE vid %L" +msgstr "!$OMP DO-iterationsvariabel fÃ¥r inte vara THREADPRIVATE vid %L" #: fortran/openmp.c:1679 #, gcc-internal-format, gfc-internal-format msgid "!$OMP DO iteration variable present on clause other than PRIVATE or LASTPRIVATE at %L" -msgstr "!$OMP DO-iterationsvariabel finns i ett annat fall än PRIVATE eller LASTPRIVATE vid %L" +msgstr "!$OMP DO-iterationsvariabel finns i ett annat fall än PRIVATE eller LASTPRIVATE vid %L" #: fortran/openmp.c:1697 #, gcc-internal-format, gfc-internal-format msgid "!$OMP DO collapsed loops don't form rectangular iteration space at %L" -msgstr "!$OMP DO-kollapsad slinga formar inte en rektangulär iterationsrymd vid %L" +msgstr "!$OMP DO-kollapsad slinga formar inte en rektangulär iterationsrymd vid %L" #: fortran/openmp.c:1711 #, gcc-internal-format, gfc-internal-format msgid "collapsed !$OMP DO loops not perfectly nested at %L" -msgstr "kollapsade !$OMP DO-slinger är inte perfekt nästade vid %L" +msgstr "kollapsade !$OMP DO-slinger är inte perfekt nästade vid %L" #: fortran/openmp.c:1720 fortran/openmp.c:1728 #, gcc-internal-format, gfc-internal-format msgid "not enough DO loops for collapsed !$OMP DO at %L" -msgstr "inte tillräckligt med DO-slingor för kollapsad !$OMP DO vid %L" +msgstr "inte tillräckligt med DO-slingor för kollapsad !$OMP DO vid %L" #: fortran/options.c:261 #, gcc-internal-format msgid "-fexcess-precision=standard for Fortran" -msgstr "-fexcess-precision=standard för Fortran" +msgstr "-fexcess-precision=standard för Fortran" #: fortran/options.c:356 #, gcc-internal-format, gfc-internal-format msgid "Reading file '%s' as free form" -msgstr "Läser filen \"%s\" som friform" +msgstr "Läser filen â€%s†som friform" #: fortran/options.c:366 #, gcc-internal-format msgid "'-fd-lines-as-comments' has no effect in free form" -msgstr "\"-fd-lines-as-comments\" har ingen effekt i friform" +msgstr "â€-fd-lines-as-comments†har ingen effekt i friform" #: fortran/options.c:369 #, gcc-internal-format msgid "'-fd-lines-as-code' has no effect in free form" -msgstr "\"-fd-lines-as-code\" har ingen effekt i friform" +msgstr "â€-fd-lines-as-code†har ingen effekt i friform" #: fortran/options.c:387 #, gcc-internal-format, gfc-internal-format msgid "Flag -fno-automatic overwrites -fmax-stack-var-size=%d" -msgstr "Flaggan -fno-automatic åsidosätter -fmax-stack-var-size=%d" +msgstr "Flaggan -fno-automatic Ã¥sidosätter -fmax-stack-var-size=%d" #: fortran/options.c:390 #, gcc-internal-format msgid "Flag -fno-automatic overwrites -frecursive" -msgstr "Flaggan -fno-automatic åsidosätter -frecursive" +msgstr "Flaggan -fno-automatic Ã¥sidosätter -frecursive" #: fortran/options.c:392 #, gcc-internal-format msgid "Flag -fno-automatic overwrites -frecursive implied by -fopenmp" -msgstr "Flaggan -fno-automatic åsidosätter -frecursive som impliceras av -fopenmp" +msgstr "Flaggan -fno-automatic Ã¥sidosätter -frecursive som impliceras av -fopenmp" #: fortran/options.c:396 #, gcc-internal-format, gfc-internal-format msgid "Flag -frecursive overwrites -fmax-stack-var-size=%d" -msgstr "Flaggan -frecursive åsidosätter -fmax-stack-var-size=%d" +msgstr "Flaggan -frecursive Ã¥sidosätter -fmax-stack-var-size=%d" #: fortran/options.c:400 #, gcc-internal-format, gfc-internal-format msgid "Flag -fmax-stack-var-size=%d overwrites -frecursive implied by -fopenmp" -msgstr "Flaggan -fmax-stack-var-size=%d åsidosätter -frecursive som impliceras av -fopenmp" +msgstr "Flaggan -fmax-stack-var-size=%d Ã¥sidosätter -frecursive som impliceras av -fopenmp" #: fortran/options.c:483 #, gcc-internal-format msgid "gfortran: Only one -J option allowed" -msgstr "gfortran: Endast en -J-flagga tillåts" +msgstr "gfortran: Endast en -J-flagga tillÃ¥ts" #: fortran/options.c:529 #, gcc-internal-format, gfc-internal-format msgid "Argument to -ffpe-trap is not valid: %s" -msgstr "Argumentet till -ffpe-trap är inte giltigt: %s" +msgstr "Argumentet till -ffpe-trap är inte giltigt: %s" #: fortran/options.c:544 #, gcc-internal-format, gfc-internal-format msgid "Argument to -fcoarray is not valid: %s" -msgstr "Argumentet till -fcoarray är inte giltigt: %s" +msgstr "Argumentet till -fcoarray är inte giltigt: %s" #: fortran/options.c:582 #, gcc-internal-format, gfc-internal-format msgid "Argument to -fcheck is not valid: %s" -msgstr "Argumentet till -fcheck är inte giltigt: %s" +msgstr "Argumentet till -fcheck är inte giltigt: %s" #: fortran/options.c:754 #, gcc-internal-format msgid "Fixed line length must be at least seven." -msgstr "Fast radlängd måste vara minst sju." +msgstr "Fast radlängd mÃ¥ste vara minst sju." #: fortran/options.c:772 #, gcc-internal-format msgid "Free line length must be at least three." -msgstr "Fri radlängd måste vara minst tre" +msgstr "Fri radlängd mÃ¥ste vara minst tre" #: fortran/options.c:790 #, gcc-internal-format msgid "-static-libgfortran is not supported in this configuration" -msgstr "-static-libgfortran stöds inte i denna konfiguration" +msgstr "-static-libgfortran stöds inte i denna konfiguration" #: fortran/options.c:838 #, gcc-internal-format, gfc-internal-format msgid "Maximum supported identifier length is %d" -msgstr "Maximal stödd identifierarlängd är %d" +msgstr "Maximal stödd identifierarlängd är %d" #: fortran/options.c:898 #, gcc-internal-format, gfc-internal-format msgid "Unrecognized option to -finit-logical: %s" -msgstr "Okänd argument till -finit-logical: %s" +msgstr "Okänd argument till -finit-logical: %s" #: fortran/options.c:914 #, gcc-internal-format, gfc-internal-format msgid "Unrecognized option to -finit-real: %s" -msgstr "Okänt argument till -finit-real: %s" +msgstr "Okänt argument till -finit-real: %s" #: fortran/options.c:930 #, gcc-internal-format msgid "The value of n in -finit-character=n must be between 0 and 127" -msgstr "Värdet på n i -finit-character=n måste vara mellan 0 och 127" +msgstr "Värdet pÃ¥ n i -finit-character=n mÃ¥ste vara mellan 0 och 127" #: fortran/options.c:1032 #, gcc-internal-format, gfc-internal-format msgid "Maximum subrecord length cannot exceed %d" -msgstr "Maximal delpostlängd får inte överstiga %d" +msgstr "Maximal delpostlängd fÃ¥r inte överstiga %d" #: fortran/parse.c:520 #, gcc-internal-format, gfc-internal-format @@ -39786,7 +39789,7 @@ msgstr "Oklassificerbar sats vid %C" #: fortran/parse.c:542 #, gcc-internal-format, gfc-internal-format msgid "OpenMP directives at %C may not appear in PURE or ELEMENTAL procedures" -msgstr "OpenMP-direktiv vid %C för inte förekomma i PURE- eller ELEMENTAL-procedurer" +msgstr "OpenMP-direktiv vid %C för inte förekomma i PURE- eller ELEMENTAL-procedurer" #: fortran/parse.c:628 #, gcc-internal-format, gfc-internal-format @@ -39801,7 +39804,7 @@ msgstr "Oklassificerbart GCC-direktiv vid %C" #: fortran/parse.c:696 fortran/parse.c:870 #, gcc-internal-format, gfc-internal-format msgid "Zero is not a valid statement label at %C" -msgstr "Noll är inte en giltig satsetikett vid %C" +msgstr "Noll är inte en giltig satsetikett vid %C" #: fortran/parse.c:703 fortran/parse.c:862 #, gcc-internal-format, gfc-internal-format @@ -39811,7 +39814,7 @@ msgstr "Icke-numeriska tecken i satsetikett vid %C" #: fortran/parse.c:715 fortran/parse.c:911 #, gcc-internal-format, gfc-internal-format msgid "Semicolon at %C needs to be preceded by statement" -msgstr "Semikolon vid %C måste föregås av en sats" +msgstr "Semikolon vid %C mÃ¥ste föregÃ¥s av en sats" #: fortran/parse.c:723 fortran/parse.c:926 #, gcc-internal-format, gfc-internal-format @@ -39821,12 +39824,12 @@ msgstr "Ignorerar satsetikett i tom sats vid %L" #: fortran/parse.c:772 fortran/parse.c:913 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Semicolon at %C without preceding statement" -msgstr "Fortran 2008: Semikolon vid %C utan föregående sats" +msgstr "Fortran 2008: Semikolon vid %C utan föregÃ¥ende sats" #: fortran/parse.c:848 fortran/parse.c:889 #, gcc-internal-format, gfc-internal-format msgid "Bad continuation line at %C" -msgstr "Felaktig fortsättningsrad vid %C" +msgstr "Felaktig fortsättningsrad vid %C" #: fortran/parse.c:1152 #, gcc-internal-format, gfc-internal-format @@ -39836,32 +39839,32 @@ msgstr "FORMAT-sats vid %L har inte en satsetikett" #: fortran/parse.c:1755 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement at %C" -msgstr "Oväntad %s-sats vid %C" +msgstr "Oväntad %s-sats vid %C" #: fortran/parse.c:1902 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C cannot follow %s statement at %L" -msgstr "%s-sats vid %C får inte följa efter %s-sats vid %L" +msgstr "%s-sats vid %C fÃ¥r inte följa efter %s-sats vid %L" #: fortran/parse.c:1919 #, gcc-internal-format, gfc-internal-format msgid "Unexpected end of file in '%s'" -msgstr "Oväntat filslut i \"%s\"" +msgstr "Oväntat filslut i â€%sâ€" #: fortran/parse.c:1951 #, gcc-internal-format, gfc-internal-format msgid "Derived-type '%s' with SEQUENCE must not have a CONTAINS section at %C" -msgstr "Härledd typ \"%s\" med SEQUENCE får inte ha en CONTAINS-sektion vid %C" +msgstr "Härledd typ â€%s†med SEQUENCE fÃ¥r inte ha en CONTAINS-sektion vid %C" #: fortran/parse.c:1954 #, gcc-internal-format, gfc-internal-format msgid "Derived-type '%s' with BIND(C) must not have a CONTAINS section at %C" -msgstr "Härledd typ \"%s\" med BIND(C) får nte ha en CONTAINS-sektion vid %C" +msgstr "Härledd typ â€%s†med BIND(C) fÃ¥r nte ha en CONTAINS-sektion vid %C" #: fortran/parse.c:1974 #, gcc-internal-format, gfc-internal-format msgid "Components in TYPE at %C must precede CONTAINS" -msgstr "Komponenter i TYPE vid %C måste föregå CONTAINS" +msgstr "Komponenter i TYPE vid %C mÃ¥ste föregÃ¥ CONTAINS" #: fortran/parse.c:1978 #, gcc-internal-format, gfc-internal-format @@ -39881,17 +39884,17 @@ msgstr "Fortran 2003: FINAL-procedurdeklaration vid %C" #: fortran/parse.c:2009 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Derived type definition at %C with empty CONTAINS section" -msgstr "Fortran 2003: Härledd typdefinition vid %C med tom CONTAINS-sektion" +msgstr "Fortran 2003: Härledd typdefinition vid %C med tom CONTAINS-sektion" #: fortran/parse.c:2020 fortran/parse.c:2123 #, gcc-internal-format, gfc-internal-format msgid "PRIVATE statement in TYPE at %C must be inside a MODULE" -msgstr "PRIVATE-sats i TYPE vid %C måste vara inuti en MODULE" +msgstr "PRIVATE-sats i TYPE vid %C mÃ¥ste vara inuti en MODULE" #: fortran/parse.c:2027 #, gcc-internal-format, gfc-internal-format msgid "PRIVATE statement at %C must precede procedure bindings" -msgstr "PRIVATE-sats vid %C måste föregå procedurbindningar" +msgstr "PRIVATE-sats vid %C mÃ¥ste föregÃ¥ procedurbindningar" #: fortran/parse.c:2034 fortran/parse.c:2136 #, gcc-internal-format, gfc-internal-format @@ -39901,7 +39904,7 @@ msgstr "Dubblerad PRIVATE-sats vid %C" #: fortran/parse.c:2044 #, gcc-internal-format, gfc-internal-format msgid "SEQUENCE statement at %C must precede CONTAINS" -msgstr "SEQUENCE-sats vid %C måste föregå CONTAINS" +msgstr "SEQUENCE-sats vid %C mÃ¥ste föregÃ¥ CONTAINS" #: fortran/parse.c:2048 #, gcc-internal-format, gfc-internal-format @@ -39911,27 +39914,27 @@ msgstr "Redan inuti ett CONTAINS-block vid %C" #: fortran/parse.c:2106 #, gcc-internal-format, gfc-internal-format msgid "FINAL declaration at %C must be inside CONTAINS" -msgstr "FINAL-deklaration vid %C måste vara inuti CONTAINS" +msgstr "FINAL-deklaration vid %C mÃ¥ste vara inuti CONTAINS" #: fortran/parse.c:2114 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Derived type definition at %C without components" -msgstr "Fortran 2003: Härledd typdefinition vid %C utan komponenter" +msgstr "Fortran 2003: Härledd typdefinition vid %C utan komponenter" #: fortran/parse.c:2130 #, gcc-internal-format, gfc-internal-format msgid "PRIVATE statement at %C must precede structure components" -msgstr "PRIVATE-sats vid %C måste föregå strukturkomponenter" +msgstr "PRIVATE-sats vid %C mÃ¥ste föregÃ¥ strukturkomponenter" #: fortran/parse.c:2147 #, gcc-internal-format, gfc-internal-format msgid "SEQUENCE statement at %C must precede structure components" -msgstr "SEQUENCE-sats vid %C måste föregå strukturkomponenter" +msgstr "SEQUENCE-sats vid %C mÃ¥ste föregÃ¥ strukturkomponenter" #: fortran/parse.c:2153 #, gcc-internal-format, gfc-internal-format msgid "SEQUENCE attribute at %C already specified in TYPE statement" -msgstr "SEQUENCE-attribut vid %C är redan angett i TYPE-sats" +msgstr "SEQUENCE-attribut vid %C är redan angett i TYPE-sats" #: fortran/parse.c:2158 #, gcc-internal-format, gfc-internal-format @@ -39941,7 +39944,7 @@ msgstr "Dubblerad SEQUENCE-sats vid %C" #: fortran/parse.c:2168 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: CONTAINS block in derived type definition at %C" -msgstr "Fortran 2003: CONTAINS-block i härledd typdefinition vid %C" +msgstr "Fortran 2003: CONTAINS-block i härledd typdefinition vid %C" #: fortran/parse.c:2255 #, gcc-internal-format, gfc-internal-format @@ -39956,7 +39959,7 @@ msgstr "" #: fortran/parse.c:2266 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Allocatable component %s at %L of type LOCK_TYPE must have a codimension" -msgstr "Allokerbar komponent i post vid %C måste ha fördröjd form" +msgstr "Allokerbar komponent i post vid %C mÃ¥ste ha fördröjd form" #: fortran/parse.c:2270 #, gcc-internal-format, gfc-internal-format @@ -39981,67 +39984,67 @@ msgstr "ENUM-deklaration vid %C har inga ENUMERATORS" #: fortran/parse.c:2418 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in INTERFACE block at %C" -msgstr "Oväntad %s-sats i INTERFACE-block vid %C" +msgstr "Oväntad %s-sats i INTERFACE-block vid %C" #: fortran/parse.c:2442 #, gcc-internal-format, gfc-internal-format msgid "Name '%s' of ABSTRACT INTERFACE at %C cannot be the same as an intrinsic type" -msgstr "Namnet \"%s\" i ABSTRACT INTERFACE vid %C kan inte vara samma som en inbyggd typ" +msgstr "Namnet â€%s†i ABSTRACT INTERFACE vid %C kan inte vara samma som en inbyggd typ" #: fortran/parse.c:2473 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement at %C in INTERFACE body" -msgstr "Oväntad %s-sats vid %C i INTERFACE-kropp" +msgstr "Oväntad %s-sats vid %C i INTERFACE-kropp" #: fortran/parse.c:2491 #, gcc-internal-format, gfc-internal-format msgid "INTERFACE procedure '%s' at %L has the same name as the enclosing procedure" -msgstr "INTERFACE-procedur \"%s\" vid %L har samma namn som den inneslutande proceduren" +msgstr "INTERFACE-procedur â€%s†vid %L har samma namn som den inneslutande proceduren" #: fortran/parse.c:2615 #, gcc-internal-format, gfc-internal-format msgid "%s statement is not allowed inside of BLOCK at %C" -msgstr "%s-sats är inte tillåten inuti BLOCK vid %C" +msgstr "%s-sats är inte tillÃ¥ten inuti BLOCK vid %C" #: fortran/parse.c:2702 #, gcc-internal-format, gfc-internal-format msgid "%s statement must appear in a MODULE" -msgstr "%s-sats måste vara i en MODULE" +msgstr "%s-sats mÃ¥ste vara i en MODULE" #: fortran/parse.c:2710 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C follows another accessibility specification" -msgstr "%s-sats vid %C följer på en annan åtkomstspecifikation" +msgstr "%s-sats vid %C följer pÃ¥ en annan Ã¥tkomstspecifikation" #: fortran/parse.c:2761 #, gcc-internal-format, gfc-internal-format msgid "Bad kind expression for function '%s' at %L" -msgstr "Fel sorts uttryck för funktionen \"%s\" vid %L" +msgstr "Fel sorts uttryck för funktionen â€%s†vid %L" #: fortran/parse.c:2765 #, gcc-internal-format, gfc-internal-format msgid "The type for function '%s' at %L is not accessible" -msgstr "Typen på funktionen \"%s\" vid %L är inte tillgänglig" +msgstr "Typen pÃ¥ funktionen â€%s†vid %L är inte tillgänglig" #: fortran/parse.c:2823 #, gcc-internal-format, gfc-internal-format msgid "ELSEWHERE statement at %C follows previous unmasked ELSEWHERE" -msgstr "ELSEWHERE-sats vid %C följer tidigare omaskerat ELSEWHERE" +msgstr "ELSEWHERE-sats vid %C följer tidigare omaskerat ELSEWHERE" #: fortran/parse.c:2845 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in WHERE block at %C" -msgstr "Oväntad %s-sats i WHERE-block vid %C" +msgstr "Oväntad %s-sats i WHERE-block vid %C" #: fortran/parse.c:2904 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in FORALL block at %C" -msgstr "Oväntad %s-sats i FORALL-block vid %C" +msgstr "Oväntad %s-sats i FORALL-block vid %C" #: fortran/parse.c:2955 #, gcc-internal-format, gfc-internal-format msgid "ELSE IF statement at %C cannot follow ELSE statement at %L" -msgstr "ELSE IF-sats vid %C kan inte följa ELSE-sats vid %L" +msgstr "ELSE IF-sats vid %C kan inte följa ELSE-sats vid %L" #: fortran/parse.c:2973 #, gcc-internal-format, gfc-internal-format @@ -40051,32 +40054,32 @@ msgstr "Dubblerad ELSE-sats vid %L och %C" #: fortran/parse.c:3034 #, gcc-internal-format, gfc-internal-format msgid "Expected a CASE or END SELECT statement following SELECT CASE at %C" -msgstr "En CASE- eller END SELECT-sats förväntades följa efter SELECT CASE vid %C" +msgstr "En CASE- eller END SELECT-sats förväntades följa efter SELECT CASE vid %C" #: fortran/parse.c:3117 #, gcc-internal-format, gfc-internal-format msgid "Expected TYPE IS, CLASS IS or END SELECT statement following SELECT TYPE at %C" -msgstr "En TYPE IS-, CLASS IS- eller END SELECT-sats förväntades följa efter SELECT TYPE vid %C" +msgstr "En TYPE IS-, CLASS IS- eller END SELECT-sats förväntades följa efter SELECT TYPE vid %C" #: fortran/parse.c:3179 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %C cannot be redefined inside loop beginning at %L" -msgstr "Variabeln \"%s\" vid %C får inte definieras om inuti slingan som börjar vid %L" +msgstr "Variabeln â€%s†vid %C fÃ¥r inte definieras om inuti slingan som börjar vid %L" #: fortran/parse.c:3212 #, gcc-internal-format, gfc-internal-format msgid "End of nonblock DO statement at %C is within another block" -msgstr "Slut på DO-sats utan block vid %C är inuti ett annat block" +msgstr "Slut pÃ¥ DO-sats utan block vid %C är inuti ett annat block" #: fortran/parse.c:3222 #, gcc-internal-format, gfc-internal-format msgid "End of nonblock DO statement at %C is interwoven with another DO loop" -msgstr "Slut på DO-sats utan block vid %C är sammanvävt med en annan DO-slinga" +msgstr "Slut pÃ¥ DO-sats utan block vid %C är sammanvävt med en annan DO-slinga" #: fortran/parse.c:3269 #, gcc-internal-format, gfc-internal-format msgid "Statement label in END CRITICAL at %C does not match CRITIAL label" -msgstr "Satsetikett i END CRITICAL vid %C stämmer inte med CRITICAL-etikett" +msgstr "Satsetikett i END CRITICAL vid %C stämmer inte med CRITICAL-etikett" #: fortran/parse.c:3337 #, gcc-internal-format, gfc-internal-format @@ -40091,12 +40094,12 @@ msgstr "Fortran 2003: ASSOCIATE-konstruktion vid %C" #: fortran/parse.c:3467 #, gcc-internal-format, gfc-internal-format msgid "Statement label in ENDDO at %C doesn't match DO label" -msgstr "Satsetikett i ENDDO vid %C stämmer inte med DO-etikett" +msgstr "Satsetikett i ENDDO vid %C stämmer inte med DO-etikett" #: fortran/parse.c:3483 #, gcc-internal-format, gfc-internal-format msgid "Named block DO at %L requires matching ENDDO name" -msgstr "Namngivet DO-block vid %L kräver matchande ENDDO-namn" +msgstr "Namngivet DO-block vid %L kräver matchande ENDDO-namn" #: fortran/parse.c:3606 #, gcc-internal-format, gfc-internal-format @@ -40116,12 +40119,12 @@ msgstr "%s-sats vid %C kan inte avsluta en DO-slinga utan block" #: fortran/parse.c:4017 #, gcc-internal-format, gfc-internal-format msgid "Contained procedure '%s' at %C is already ambiguous" -msgstr "Innesluten procedur \"%s\" vid %C är redan tvetydig" +msgstr "Innesluten procedur â€%s†vid %C är redan tvetydig" #: fortran/parse.c:4073 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in CONTAINS section at %C" -msgstr "Oväntad %s-sats i CONTAINS-sektion vid %C" +msgstr "Oväntad %s-sats i CONTAINS-sektion vid %C" #: fortran/parse.c:4097 #, gcc-internal-format, gfc-internal-format @@ -40131,27 +40134,27 @@ msgstr "Fortran 2008: CONTAINS-sats utan FUNCTION- eller SUBROUTINE-sats vid %C" #: fortran/parse.c:4174 #, gcc-internal-format, gfc-internal-format msgid "CONTAINS statement at %C is already in a contained program unit" -msgstr "CONTAINS-sats vid %C är redan i en innesluten programenhet" +msgstr "CONTAINS-sats vid %C är redan i en innesluten programenhet" #: fortran/parse.c:4224 #, gcc-internal-format, gfc-internal-format msgid "Global name '%s' at %L is already being used as a %s at %L" -msgstr "Globalt namn \"%s\" vid %L används redan som en %s vid %L" +msgstr "Globalt namn â€%s†vid %L används redan som en %s vid %L" #: fortran/parse.c:4245 #, gcc-internal-format, gfc-internal-format msgid "Blank BLOCK DATA at %C conflicts with prior BLOCK DATA at %L" -msgstr "Blank BLOCK DATA vid %C står i konflikt med tidigare BLOCK DATA vid %L" +msgstr "Blank BLOCK DATA vid %C stÃ¥r i konflikt med tidigare BLOCK DATA vid %L" #: fortran/parse.c:4271 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in BLOCK DATA at %C" -msgstr "Oväntad %s-sats i BLOCK DATA vid %C" +msgstr "Oväntad %s-sats i BLOCK DATA vid %C" #: fortran/parse.c:4314 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in MODULE at %C" -msgstr "Oväntad %s-sats i MODULE vid %C" +msgstr "Oväntad %s-sats i MODULE vid %C" #. If we see a duplicate main program, shut down. If the second #. instance is an implied main program, i.e. data decls or executable @@ -40159,7 +40162,7 @@ msgstr "Oväntad %s-sats i MODULE vid %C" #: fortran/parse.c:4679 #, gcc-internal-format, gfc-internal-format msgid "Two main PROGRAMs at %L and %C" -msgstr "Två huvud-PROGRAM vid %L och %C" +msgstr "TvÃ¥ huvud-PROGRAM vid %L och %C" #: fortran/primary.c:106 #, gcc-internal-format, gfc-internal-format @@ -40169,22 +40172,22 @@ msgstr "Sortparameter saknas vid %C" #: fortran/primary.c:233 #, gcc-internal-format, gfc-internal-format msgid "Integer kind %d at %C not available" -msgstr "Heltalssort %d vid %C inte tillgänglig" +msgstr "Heltalssort %d vid %C inte tillgänglig" #: fortran/primary.c:242 #, gcc-internal-format, gfc-internal-format msgid "Integer too big for its kind at %C. This check can be disabled with the option -fno-range-check" -msgstr "Heltal för stort för sin sort vid %C. Denna kontroll kan avaktiveras med flaggan -fno-range-check" +msgstr "Heltal för stort för sin sort vid %C. Denna kontroll kan avaktiveras med flaggan -fno-range-check" #: fortran/primary.c:271 #, gcc-internal-format, gfc-internal-format msgid "Extension: Hollerith constant at %C" -msgstr "Utökning: Hollerithkonstant vid %C" +msgstr "Utökning: Hollerithkonstant vid %C" #: fortran/primary.c:283 #, gcc-internal-format, gfc-internal-format msgid "Invalid Hollerith constant: %L must contain at least one character" -msgstr "Ogiltig Hollerithkonstant: %L måste innehålla åtminstone ett tecken" +msgstr "Ogiltig Hollerithkonstant: %L mÃ¥ste innehÃ¥lla Ã¥tminstone ett tecken" #: fortran/primary.c:289 #, gcc-internal-format, gfc-internal-format @@ -40194,42 +40197,42 @@ msgstr "Ogiltig Hollerithkonstant: Heltalssort vid %L borde vara standard" #: fortran/primary.c:309 #, gcc-internal-format, gfc-internal-format msgid "Invalid Hollerith constant at %L contains a wide character" -msgstr "Ogiltig Hollerithkonstant vid %L innehåller ett brett tecken" +msgstr "Ogiltig Hollerithkonstant vid %L innehÃ¥ller ett brett tecken" #: fortran/primary.c:395 #, gcc-internal-format, gfc-internal-format msgid "Extension: Hexadecimal constant at %C uses non-standard syntax" -msgstr "Utökning: Hexadecimal konstant vid %C använder icke-standardsyntax" +msgstr "Utökning: Hexadecimal konstant vid %C använder icke-standardsyntax" #: fortran/primary.c:405 #, gcc-internal-format, gfc-internal-format msgid "Empty set of digits in BOZ constant at %C" -msgstr "Tom siffermängd i BOZ-konstant vid %C" +msgstr "Tom siffermängd i BOZ-konstant vid %C" #: fortran/primary.c:411 #, gcc-internal-format, gfc-internal-format msgid "Illegal character in BOZ constant at %C" -msgstr "Otillåtet tecken i BOZ-konstant vid %C" +msgstr "OtillÃ¥tet tecken i BOZ-konstant vid %C" #: fortran/primary.c:434 #, gcc-internal-format, gfc-internal-format msgid "Extension: BOZ constant at %C uses non-standard postfix syntax" -msgstr "Utökning: BOZ-konstant vid %C använder icke-standard postfixsyntax" +msgstr "Utökning: BOZ-konstant vid %C använder icke-standard postfixsyntax" #: fortran/primary.c:465 #, gcc-internal-format, gfc-internal-format msgid "Integer too big for integer kind %i at %C" -msgstr "För stort heltal för heltalssort %i vid %C" +msgstr "För stort heltal för heltalssort %i vid %C" #: fortran/primary.c:471 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: BOZ used outside a DATA statement at %C" -msgstr "Fortran 2003: BOZ använd utanför en DATA-sats vid %C" +msgstr "Fortran 2003: BOZ använd utanför en DATA-sats vid %C" #: fortran/primary.c:562 fortran/primary.c:566 #, gcc-internal-format, gfc-internal-format msgid "Extension: exponent-letter 'q' in real-literal-constant at %C" -msgstr "Utökning: exponentbokstav \"q\" i reeel literal konstant vid %C" +msgstr "Utökning: exponentbokstav â€q†i reeel literal konstant vid %C" #: fortran/primary.c:582 #, gcc-internal-format, gfc-internal-format @@ -40239,17 +40242,17 @@ msgstr "Exponent saknas i reellt tal vid %C" #: fortran/primary.c:638 #, gcc-internal-format, gfc-internal-format msgid "Real number at %C has a 'd' exponent and an explicit kind" -msgstr "Reellt tal vid %C har en \"d\"-exponent och en explicit sort" +msgstr "Reellt tal vid %C har en â€dâ€-exponent och en explicit sort" #: fortran/primary.c:668 #, gcc-internal-format, gfc-internal-format msgid "Real number at %C has a 'q' exponent and an explicit kind" -msgstr "Reellt tal vid %C har en \"q\"-exponent och en explicit sort" +msgstr "Reellt tal vid %C har en â€qâ€-exponent och en explicit sort" #: fortran/primary.c:682 #, gcc-internal-format, gfc-internal-format msgid "Invalid exponent-letter 'q' in real-literal-constant at %C" -msgstr "Ogiltig exponentbokstav \"q\" i reell literal konstant vid %C" +msgstr "Ogiltig exponentbokstav â€q†i reell literal konstant vid %C" #: fortran/primary.c:715 #, gcc-internal-format, gfc-internal-format @@ -40259,7 +40262,7 @@ msgstr "Ogiltig reell sort %d vid %C" #: fortran/primary.c:730 #, gcc-internal-format, gfc-internal-format msgid "Real constant overflows its kind at %C" -msgstr "Reell konstant spiller över sin sort vid %C" +msgstr "Reell konstant spiller över sin sort vid %C" #: fortran/primary.c:735 #, gcc-internal-format, gfc-internal-format @@ -40274,37 +40277,37 @@ msgstr "Syntaxfel i SUBSTRING-specifikation vid %C" #: fortran/primary.c:1039 #, gcc-internal-format, gfc-internal-format msgid "Invalid kind %d for CHARACTER constant at %C" -msgstr "Ogiltig sort %d för CHARACTER-konstant vid %C" +msgstr "Ogiltig sort %d för CHARACTER-konstant vid %C" #: fortran/primary.c:1060 #, gcc-internal-format, gfc-internal-format msgid "Unterminated character constant beginning at %C" -msgstr "Oavslutad teckenkonstant börjar vid %C" +msgstr "Oavslutad teckenkonstant börjar vid %C" #: fortran/primary.c:1089 #, gcc-internal-format, gfc-internal-format msgid "Character '%s' in string at %C is not representable in character kind %d" -msgstr "Tecknet \"%s\" i sträng vid %C är inte representerbart i teckensort %d" +msgstr "Tecknet â€%s†i sträng vid %C är inte representerbart i teckensort %d" #: fortran/primary.c:1172 #, gcc-internal-format, gfc-internal-format msgid "Bad kind for logical constant at %C" -msgstr "Felaktig sort för logisk konstant vid %C" +msgstr "Felaktig sort för logisk konstant vid %C" #: fortran/primary.c:1204 #, gcc-internal-format, gfc-internal-format msgid "Expected PARAMETER symbol in complex constant at %C" -msgstr "PARAMETER-symbol förväntades i komplex konstant vid %C" +msgstr "PARAMETER-symbol förväntades i komplex konstant vid %C" #: fortran/primary.c:1210 #, gcc-internal-format, gfc-internal-format msgid "Numeric PARAMETER required in complex constant at %C" -msgstr "Numerisk PARAMETER krävs i komplex konstant vid %C" +msgstr "Numerisk PARAMETER krävs i komplex konstant vid %C" #: fortran/primary.c:1216 #, gcc-internal-format, gfc-internal-format msgid "Scalar PARAMETER required in complex constant at %C" -msgstr "Skalär PARAMETER krävs i komplex konstant vid %C" +msgstr "Skalär PARAMETER krävs i komplex konstant vid %C" #: fortran/primary.c:1220 #, gcc-internal-format, gfc-internal-format @@ -40324,17 +40327,17 @@ msgstr "Syntaxfel i COMPLEX-konstant vid %C" #: fortran/primary.c:1584 #, gcc-internal-format, gfc-internal-format msgid "Keyword '%s' at %C has already appeared in the current argument list" -msgstr "Nyckelordet \"%s\" vid %C har redan förekommit i den aktuella argumentlistan" +msgstr "Nyckelordet â€%s†vid %C har redan förekommit i den aktuella argumentlistan" #: fortran/primary.c:1648 #, gcc-internal-format, gfc-internal-format msgid "Extension: argument list function at %C" -msgstr "Utökning: argumentlistefunktionen vid %C" +msgstr "Utökning: argumentlistefunktionen vid %C" #: fortran/primary.c:1717 #, gcc-internal-format, gfc-internal-format msgid "Expected alternate return label at %C" -msgstr "Alternativ returetikett förväntades vid %C" +msgstr "Alternativ returetikett förväntades vid %C" #: fortran/primary.c:1735 #, gcc-internal-format, gfc-internal-format @@ -40349,27 +40352,27 @@ msgstr "Syntaxfel i argumentlista vid %C" #: fortran/primary.c:1840 #, gcc-internal-format, gfc-internal-format msgid "Array section designator, e.g. '(:)', is required besides the coarray designator '[...]' at %C" -msgstr "Vektorsektionsbeteckning, t.ex. \"(:)\", krävs förutom co-vektorbeteckningen \"[...]\" vid %C" +msgstr "Vektorsektionsbeteckning, t.ex. â€(:)â€, krävs förutom co-vektorbeteckningen â€[...]†vid %C" #: fortran/primary.c:1848 #, gcc-internal-format, gfc-internal-format msgid "Coarray designator at %C but '%s' is not a coarray" -msgstr "Co-vektorbeteckning vid %C men \"%s\" är inte en co-vektor" +msgstr "Co-vektorbeteckning vid %C men â€%s†är inte en co-vektor" #: fortran/primary.c:1926 #, gcc-internal-format, gfc-internal-format msgid "Expected structure component name at %C" -msgstr "Postkomponentnamn förväntades vid %C" +msgstr "Postkomponentnamn förväntades vid %C" #: fortran/primary.c:1973 #, gcc-internal-format, gfc-internal-format msgid "Expected argument list at %C" -msgstr "Argumentlista förväntades vid %C" +msgstr "Argumentlista förväntades vid %C" #: fortran/primary.c:2005 #, gcc-internal-format, gfc-internal-format msgid "Procedure pointer component '%s' requires an argument list at %C" -msgstr "Procedurpekarkomponent \"%s\" kräver en argumentlista vid %C" +msgstr "Procedurpekarkomponent â€%s†kräver en argumentlista vid %C" #: fortran/primary.c:2093 #, gcc-internal-format, gfc-internal-format @@ -40384,12 +40387,12 @@ msgstr "Fortran 2003: Postkonstruerare med saknade valfria argument vid %C" #: fortran/primary.c:2350 #, gcc-internal-format, gfc-internal-format msgid "No initializer for component '%s' given in the structure constructor at %C!" -msgstr "Ingen initierare för komponent \"%s\" angiven i postkonstrueraren vid %C!" +msgstr "Ingen initierare för komponent â€%s†angiven i postkonstrueraren vid %C!" #: fortran/primary.c:2398 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Can't construct ABSTRACT type '%s' at %L" -msgstr "Det går inte att konstruera ABSTRACT typ \"%s\" vid %C" +msgstr "Det gÃ¥r inte att konstruera ABSTRACT typ â€%s†vid %C" #: fortran/primary.c:2418 #, gcc-internal-format, gfc-internal-format @@ -40404,52 +40407,52 @@ msgstr "Komponentinitierare utan namn efter komponent med namn %s vid %C!" #: fortran/primary.c:2439 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Too many components in structure constructor at %L!" -msgstr "För många komponenter i postkonstruerare vid %C!" +msgstr "För mÃ¥nga komponenter i postkonstruerare vid %C!" #: fortran/primary.c:2476 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Component '%s' is initialized twice in the structure constructor at %L!" -msgstr "Komponent \"%s\" initieras två gånger i postkonstrueraren vid %C!" +msgstr "Komponent â€%s†initieras tvÃ¥ gÃ¥nger i postkonstrueraren vid %C!" #: fortran/primary.c:2488 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Coindexed expression to pointer component '%s' in structure constructor at %L!" -msgstr "Co-indexerat uttryck till pekar komponent \"%s\" i postkonstruerare vid %C!" +msgstr "Co-indexerat uttryck till pekar komponent â€%s†i postkonstruerare vid %C!" #: fortran/primary.c:2541 #, gcc-internal-format, gfc-internal-format msgid "component '%s' at %L has already been set by a parent derived type constructor" -msgstr "komponent \"%s\" vid %L har redan satts av en härledd föräldratyps konstruerare" +msgstr "komponent â€%s†vid %L har redan satts av en härledd föräldratyps konstruerare" #: fortran/primary.c:2725 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %C is the name of a recursive function and so refers to the result variable. Use an explicit RESULT variable for direct recursion (12.5.2.1)" -msgstr "\"%s\" vid %C är namnet på en rekursiv funktion och refererar därmed till resultatvariabeln. Använd en explicit RESULT-variabel för direkt rekursion (12.5.2.1)" +msgstr "â€%s†vid %C är namnet pÃ¥ en rekursiv funktion och refererar därmed till resultatvariabeln. Använd en explicit RESULT-variabel för direkt rekursion (12.5.2.1)" #: fortran/primary.c:2844 #, gcc-internal-format, gfc-internal-format msgid "Unexpected use of subroutine name '%s' at %C" -msgstr "Oväntad användning av subrutinnamnet \"%s\" vid %C" +msgstr "Oväntad användning av subrutinnamnet â€%s†vid %C" #: fortran/primary.c:2875 #, gcc-internal-format, gfc-internal-format msgid "Statement function '%s' requires argument list at %C" -msgstr "Satsfunktion \"%s\" kräver en argumentlista vid %C" +msgstr "Satsfunktion â€%s†kräver en argumentlista vid %C" #: fortran/primary.c:2878 #, gcc-internal-format, gfc-internal-format msgid "Function '%s' requires an argument list at %C" -msgstr "Funktion \"%s\" kräver en argumentlista vid %C" +msgstr "Funktion â€%s†kräver en argumentlista vid %C" #: fortran/primary.c:2928 #, gcc-internal-format, gfc-internal-format msgid "Missing argument to '%s' at %C" -msgstr "Argument saknas till \"%s\" vid %C" +msgstr "Argument saknas till â€%s†vid %C" #: fortran/primary.c:3087 #, gcc-internal-format, gfc-internal-format msgid "Missing argument list in function '%s' at %C" -msgstr "Argumentlista saknas i funktionen \"%s\" vid %C" +msgstr "Argumentlista saknas i funktionen â€%s†vid %C" #: fortran/primary.c:3121 #, gcc-internal-format, gfc-internal-format @@ -40459,357 +40462,357 @@ msgstr "Symbol vid %C passar inte som uttryck" #: fortran/primary.c:3220 #, gcc-internal-format, gfc-internal-format msgid "Named constant at %C in an EQUIVALENCE" -msgstr "Namngiven konstant vid %C är en EQUIVALENCE" +msgstr "Namngiven konstant vid %C är en EQUIVALENCE" #: fortran/primary.c:3254 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %C is not a variable" -msgstr "\"%s\" vid %C är inte en variabel" +msgstr "â€%s†vid %C är inte en variabel" #: fortran/resolve.c:117 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L is of the ABSTRACT type '%s'" -msgstr "\"%s\" vid %L har den ABSTRACT:a typen \"%s\"" +msgstr "â€%s†vid %L har den ABSTRACT:a typen â€%sâ€" #: fortran/resolve.c:120 #, gcc-internal-format, gfc-internal-format msgid "ABSTRACT type '%s' used at %L" -msgstr "ABSTRACT typ \"%s\" används vid %L" +msgstr "ABSTRACT typ â€%s†används vid %L" #: fortran/resolve.c:142 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE '%s' at %L may not be used as its own interface" -msgstr "PROCEDURE \"%s\" vid %L får inte användas som sitt eget gränssnitt" +msgstr "PROCEDURE â€%s†vid %L fÃ¥r inte användas som sitt eget gränssnitt" #: fortran/resolve.c:148 #, gcc-internal-format, gfc-internal-format msgid "Interface '%s', used by procedure '%s' at %L, is declared in a later PROCEDURE statement" -msgstr "Gränssnitt \"%s\", använd av proceduren \"%s\" vid %L, är deklarerad i en senare PROCEDURE-sats" +msgstr "Gränssnitt â€%sâ€, använd av proceduren â€%s†vid %L, är deklarerad i en senare PROCEDURE-sats" #: fortran/resolve.c:208 #, gcc-internal-format, gfc-internal-format msgid "Interface '%s' of procedure '%s' at %L must be explicit" -msgstr "Gränssnitt \"%s\" till procedur \"%s\" vid %L måste vara explicit" +msgstr "Gränssnitt â€%s†till procedur â€%s†vid %L mÃ¥ste vara explicit" #: fortran/resolve.c:256 #, gcc-internal-format, gfc-internal-format msgid "Alternate return specifier in elemental subroutine '%s' at %L is not allowed" -msgstr "Alternativ returspecificerare i elementär subrutin \"%s\" vid %L är inte tillåten" +msgstr "Alternativ returspecificerare i elementär subrutin â€%s†vid %L är inte tillÃ¥ten" #: fortran/resolve.c:260 #, gcc-internal-format, gfc-internal-format msgid "Alternate return specifier in function '%s' at %L is not allowed" -msgstr "Alternativ returspecifierare i funktionen \"%s\" vid %L är inte tillåten" +msgstr "Alternativ returspecifierare i funktionen â€%s†vid %L är inte tillÃ¥ten" #: fortran/resolve.c:321 #, gcc-internal-format, gfc-internal-format msgid "Dummy procedure '%s' of PURE procedure at %L must also be PURE" -msgstr "Attrapprocedur \"%s\" av PURE-procedur vid %L måste också vara PURE" +msgstr "Attrapprocedur â€%s†av PURE-procedur vid %L mÃ¥ste ocksÃ¥ vara PURE" #: fortran/resolve.c:331 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Argument '%s' of pure function '%s' at %L with VALUE attribute but without INTENT(IN)" -msgstr "Fortran 2008: Argumentet \"%s\" till pure-funktion \"%s\" vid %L med attributet VALUE men utan INTENT(IN)" +msgstr "Fortran 2008: Argumentet â€%s†till pure-funktion â€%s†vid %L med attributet VALUE men utan INTENT(IN)" #: fortran/resolve.c:336 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of pure function '%s' at %L must be INTENT(IN) or VALUE" -msgstr "Argumentet \"%s\" till pure-funktion \"%s\" vid %L måste vara INTENT(IN) eller VALUE" +msgstr "Argumentet â€%s†till pure-funktion â€%s†vid %L mÃ¥ste vara INTENT(IN) eller VALUE" #: fortran/resolve.c:344 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Argument '%s' of pure subroutine '%s' at %L with VALUE attribute but without INTENT" -msgstr "Fortran 2008: Argument \"%s\" till pure-subrutin \"%s\" vid %L med attributet VALUE men utan INTENT" +msgstr "Fortran 2008: Argument â€%s†till pure-subrutin â€%s†vid %L med attributet VALUE men utan INTENT" #: fortran/resolve.c:349 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of pure subroutine '%s' at %L must have its INTENT specified or have the VALUE attribute" -msgstr "Argumentet \"%s\" till pure-subrutin \"%s\" vid %L måste ha sitt INTENT angivet eller ha attributet VALUE" +msgstr "Argumentet â€%s†till pure-subrutin â€%s†vid %L mÃ¥ste ha sitt INTENT angivet eller ha attributet VALUE" #: fortran/resolve.c:381 #, gcc-internal-format, gfc-internal-format msgid "Coarray dummy argument '%s' at %L to elemental procedure" -msgstr "Co-vektorattrappargument \"%s\" vid %L till elementär i proceduren" +msgstr "Co-vektorattrappargument â€%s†vid %L till elementär i proceduren" #: fortran/resolve.c:389 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of elemental procedure at %L must be scalar" -msgstr "\"%s\"-argumentet till elementär procedur vid %L måste vara skalärt" +msgstr "â€%sâ€-argumentet till elementär procedur vid %L mÃ¥ste vara skalärt" #: fortran/resolve.c:398 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of elemental procedure at %L cannot have the ALLOCATABLE attribute" -msgstr "Argumentet \"%s\" av elementär procedur vid %L får inte ha attributet ALLOCATABLE" +msgstr "Argumentet â€%s†av elementär procedur vid %L fÃ¥r inte ha attributet ALLOCATABLE" #: fortran/resolve.c:408 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of elemental procedure at %L cannot have the POINTER attribute" -msgstr "Argumentet \"%s\" av elementär procedur vid %L får inte ha attributet POINTER" +msgstr "Argumentet â€%s†av elementär procedur vid %L fÃ¥r inte ha attributet POINTER" #: fortran/resolve.c:416 #, gcc-internal-format, gfc-internal-format msgid "Dummy procedure '%s' not allowed in elemental procedure '%s' at %L" -msgstr "Attrapprocedur \"%s\" är inte tillåten i elementär procedur \"%s\" vid %L" +msgstr "Attrapprocedur â€%s†är inte tillÃ¥ten i elementär procedur â€%s†vid %L" #: fortran/resolve.c:424 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of elemental procedure '%s' at %L must have its INTENT specified" -msgstr "Argumentet \"%s\" till den elementära proceduren \"%s\" vid %L måste ha sitt INTENT angivet" +msgstr "Argumentet â€%s†till den elementära proceduren â€%s†vid %L mÃ¥ste ha sitt INTENT angivet" #: fortran/resolve.c:436 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of statement function at %L must be scalar" -msgstr "\"%s\"-argumentet till satsfunktionen vid %L måste vara skalärt" +msgstr "â€%sâ€-argumentet till satsfunktionen vid %L mÃ¥ste vara skalärt" #: fortran/resolve.c:446 #, gcc-internal-format, gfc-internal-format msgid "Character-valued argument '%s' of statement function at %L must have constant length" -msgstr "Teckenvärt argument \"%s\" till satsfunktion vid %L måste ha konstant längd" +msgstr "Teckenvärt argument â€%s†till satsfunktion vid %L mÃ¥ste ha konstant längd" #: fortran/resolve.c:504 #, gcc-internal-format, gfc-internal-format msgid "Contained function '%s' at %L has no IMPLICIT type" -msgstr "Innesluten funktion \"%s\" vid %L har ingen IMPLICIT-typ" +msgstr "Innesluten funktion â€%s†vid %L har ingen IMPLICIT-typ" #: fortran/resolve.c:507 #, gcc-internal-format, gfc-internal-format msgid "Result '%s' of contained function '%s' at %L has no IMPLICIT type" -msgstr "Resultatet \"%s\" av innesluten funktion \"%s\" vid %L har ingen IMPLICIT-typ" +msgstr "Resultatet â€%s†av innesluten funktion â€%s†vid %L har ingen IMPLICIT-typ" #: fortran/resolve.c:531 #, gcc-internal-format, gfc-internal-format msgid "Character-valued %s '%s' at %L must not be assumed length" -msgstr "Teckenvärd %s \"%s\" vid %L får inte ha antagen längd" +msgstr "Teckenvärd %s â€%s†vid %L fÃ¥r inte ha antagen längd" #: fortran/resolve.c:706 #, gcc-internal-format, gfc-internal-format msgid "Function %s at %L has entries with mismatched array specifications" -msgstr "Funktion %s vid %L har ingångar med vektorspecifikationer som ej stämmer överens" +msgstr "Funktion %s vid %L har ingÃ¥ngar med vektorspecifikationer som ej stämmer överens" #: fortran/resolve.c:723 #, gcc-internal-format, gfc-internal-format msgid "Extension: Function %s at %L with entries returning variables of different string lengths" -msgstr "Utökning: Funktion \"%s\" vid %L med ingångar som returnerar variabler av olika stränglängder" +msgstr "Utökning: Funktion â€%s†vid %L med ingÃ¥ngar som returnerar variabler av olika stränglängder" #: fortran/resolve.c:750 #, gcc-internal-format, gfc-internal-format msgid "FUNCTION result %s can't be an array in FUNCTION %s at %L" -msgstr "FUNCTION-resultat %s får inte vara en vektor i FUNCTION %s vid %L" +msgstr "FUNCTION-resultat %s fÃ¥r inte vara en vektor i FUNCTION %s vid %L" #: fortran/resolve.c:754 #, gcc-internal-format, gfc-internal-format msgid "ENTRY result %s can't be an array in FUNCTION %s at %L" -msgstr "ENTRY-resultat %s får inte vara en vektor i FUNCTION %s vid %L" +msgstr "ENTRY-resultat %s fÃ¥r inte vara en vektor i FUNCTION %s vid %L" #: fortran/resolve.c:761 #, gcc-internal-format, gfc-internal-format msgid "FUNCTION result %s can't be a POINTER in FUNCTION %s at %L" -msgstr "FUNCTION-resultat %s får inte vara en POINTER i FUNCTION %s vid %L" +msgstr "FUNCTION-resultat %s fÃ¥r inte vara en POINTER i FUNCTION %s vid %L" #: fortran/resolve.c:765 #, gcc-internal-format, gfc-internal-format msgid "ENTRY result %s can't be a POINTER in FUNCTION %s at %L" -msgstr "ENTRY-resultat %s får inte vara en POINTER i FUNCTION %s vid %L" +msgstr "ENTRY-resultat %s fÃ¥r inte vara en POINTER i FUNCTION %s vid %L" #: fortran/resolve.c:803 #, gcc-internal-format, gfc-internal-format msgid "FUNCTION result %s can't be of type %s in FUNCTION %s at %L" -msgstr "FUNCTION-resultat %s får inte vara av typen %s i FUNCTION %s vid %L" +msgstr "FUNCTION-resultat %s fÃ¥r inte vara av typen %s i FUNCTION %s vid %L" #: fortran/resolve.c:808 #, gcc-internal-format, gfc-internal-format msgid "ENTRY result %s can't be of type %s in FUNCTION %s at %L" -msgstr "ENTRY-resultat %s får inte vara av typen %s i FUNCTION %s vid %L" +msgstr "ENTRY-resultat %s fÃ¥r inte vara av typen %s i FUNCTION %s vid %L" #: fortran/resolve.c:851 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L is in COMMON but only in BLOCK DATA initialization is allowed" -msgstr "Variabel \"%s\" vid %L är i COMMON men endast i BLOCK DATA är initiering tillåten" +msgstr "Variabel â€%s†vid %L är i COMMON men endast i BLOCK DATA är initiering tillÃ¥ten" #: fortran/resolve.c:855 #, gcc-internal-format, gfc-internal-format msgid "Initialized variable '%s' at %L is in a blank COMMON but initialization is only allowed in named common blocks" -msgstr "Initierad variabel \"%s\" vid %L är i en blank COMMON men initiering ir endast tillåten i namngivna common-block" +msgstr "Initierad variabel â€%s†vid %L är i en blank COMMON men initiering ir endast tillÃ¥ten i namngivna common-block" #: fortran/resolve.c:866 #, gcc-internal-format, gfc-internal-format msgid "Derived type variable '%s' in COMMON at %L has neither the SEQUENCE nor the BIND(C) attribute" -msgstr "Härledd typvariabel \"%s\" i COMMON vid %L har varken attributet SEQUENCE eller BIND(C)" +msgstr "Härledd typvariabel â€%s†i COMMON vid %L har varken attributet SEQUENCE eller BIND(C)" #: fortran/resolve.c:870 #, gcc-internal-format, gfc-internal-format msgid "Derived type variable '%s' in COMMON at %L has an ultimate component that is allocatable" -msgstr "Härledd typvariabel \"%s\" i COMMON vid %L har en slutlig komponent som är allokerbar" +msgstr "Härledd typvariabel â€%s†i COMMON vid %L har en slutlig komponent som är allokerbar" #: fortran/resolve.c:874 #, gcc-internal-format, gfc-internal-format msgid "Derived type variable '%s' in COMMON at %L may not have default initializer" -msgstr "Härledd typvariabel \"%s\" i COMMON vid %L får inte ha standardinitierare" +msgstr "Härledd typvariabel â€%s†i COMMON vid %L fÃ¥r inte ha standardinitierare" #: fortran/resolve.c:904 #, gcc-internal-format, gfc-internal-format msgid "COMMON block '%s' at %L is used as PARAMETER at %L" -msgstr "COMMON-block \"%s\" vid %L används som PARAMETER vid %L" +msgstr "COMMON-block â€%s†vid %L används som PARAMETER vid %L" #: fortran/resolve.c:908 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "COMMON block '%s' at %L can not have the EXTERNAL attribute" -msgstr "Variabeln \"%s\" vid %L får inte ha både attributet POINTER och BIND(C)" +msgstr "Variabeln â€%s†vid %L fÃ¥r inte ha bÃ¥de attributet POINTER och BIND(C)" #: fortran/resolve.c:912 #, gcc-internal-format, gfc-internal-format msgid "COMMON block '%s' at %L is also an intrinsic procedure" -msgstr "COMMON-block \"%s\" vid %L är också en inbyggd procedur" +msgstr "COMMON-block â€%s†vid %L är ocksÃ¥ en inbyggd procedur" #: fortran/resolve.c:916 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: COMMON block '%s' at %L that is also a function result" -msgstr "Fortran 2003: COMMON-block \"%s\" vid %L som också är ett funktionsresultat" +msgstr "Fortran 2003: COMMON-block â€%s†vid %L som ocksÃ¥ är ett funktionsresultat" #: fortran/resolve.c:921 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: COMMON block '%s' at %L that is also a global procedure" -msgstr "Fortran 2003: COMMON-block \"%s\" vid %L som också är en global procedur" +msgstr "Fortran 2003: COMMON-block â€%s†vid %L som ocksÃ¥ är en global procedur" #: fortran/resolve.c:985 #, gcc-internal-format, gfc-internal-format msgid "Components of structure constructor '%s' at %L are PRIVATE" -msgstr "Komponenter i postkonstruerare \"%s\" vid %L är PRIVATE" +msgstr "Komponenter i postkonstruerare â€%s†vid %L är PRIVATE" #: fortran/resolve.c:1021 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "The rank of the element in the structure constructor at %L does not match that of the component (%d/%d)" -msgstr "Ordningen på elementet i den härledda typkonstrueraren vid %L stämmer inte överens med komponentens (%d/%d)" +msgstr "Ordningen pÃ¥ elementet i den härledda typkonstrueraren vid %L stämmer inte överens med komponentens (%d/%d)" #: fortran/resolve.c:1043 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "The element in the structure constructor at %L, for pointer component '%s', is %s but should be %s" -msgstr "Elementet i den härledda typkonstrueraren vid %L, för pekarkomponent \"%s\", är %s men borde vara %s" +msgstr "Elementet i den härledda typkonstrueraren vid %L, för pekarkomponent â€%sâ€, är %s men borde vara %s" #: fortran/resolve.c:1122 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "The NULL in the structure constructor at %L is being applied to component '%s', which is neither a POINTER nor ALLOCATABLE" -msgstr "NULL i den härledda typkonstrueraren vid %L används på komponenten \"%s\", som varken är en POINTER eller en ALLOCATABLE" +msgstr "NULL i den härledda typkonstrueraren vid %L används pÃ¥ komponenten â€%sâ€, som varken är en POINTER eller en ALLOCATABLE" #: fortran/resolve.c:1155 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Interface mismatch for procedure-pointer component '%s' in structure constructor at %L: %s" -msgstr "Co-indexerat uttryck till pekar komponent \"%s\" i postkonstruerare vid %C!" +msgstr "Co-indexerat uttryck till pekar komponent â€%s†i postkonstruerare vid %C!" #: fortran/resolve.c:1171 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "The element in the structure constructor at %L, for pointer component '%s' should be a POINTER or a TARGET" -msgstr "Elementet i den härledda typkonstrueraren vid %L, för pekarkomponent \"%s\", borde vara en POINTER eller en TARGET" +msgstr "Elementet i den härledda typkonstrueraren vid %L, för pekarkomponent â€%sâ€, borde vara en POINTER eller en TARGET" #: fortran/resolve.c:1182 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %L must not be ALLOCATABLE " -msgstr "Pekarinitieringsmål vid %L får inte vara ALLOCATABLE " +msgstr "PekarinitieringsmÃ¥l vid %L fÃ¥r inte vara ALLOCATABLE " #: fortran/resolve.c:1188 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %L must have the SAVE attribute" -msgstr "Pekarinitieringsmål vid %L måste ha attributet SAVE" +msgstr "PekarinitieringsmÃ¥l vid %L mÃ¥ste ha attributet SAVE" #: fortran/resolve.c:1199 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Invalid expression in the structure constructor for pointer component '%s' at %L in PURE procedure" -msgstr "Ogiltigt uttryck i den härledda typkonstrueraren för pekarkomponent \"%s\" vidl %L i PURE-procedur" +msgstr "Ogiltigt uttryck i den härledda typkonstrueraren för pekarkomponent â€%s†vidl %L i PURE-procedur" #: fortran/resolve.c:1328 #, gcc-internal-format, gfc-internal-format msgid "The upper bound in the last dimension must appear in the reference to the assumed size array '%s' at %L" -msgstr "Den övre gränsen i sista dimensionen måste vara med i referensen till vektorn \"%s\" med antagen storlek vid %L" +msgstr "Den övre gränsen i sista dimensionen mÃ¥ste vara med i referensen till vektorn â€%s†med antagen storlek vid %L" #: fortran/resolve.c:1390 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L is ambiguous" -msgstr "\"%s\" vid %L är tvetydig" +msgstr "â€%s†vid %L är tvetydig" #: fortran/resolve.c:1394 #, gcc-internal-format, gfc-internal-format msgid "GENERIC procedure '%s' is not allowed as an actual argument at %L" -msgstr "GENERIC procedur \"%s\" är inte tillåten som aktuellt argument vid %L" +msgstr "GENERIC procedur â€%s†är inte tillÃ¥ten som aktuellt argument vid %L" #: fortran/resolve.c:1506 #, gcc-internal-format, gfc-internal-format msgid "Type specified for intrinsic function '%s' at %L is ignored" -msgstr "Typ angiven för inbyggd funktion \"%s\" vid %L ignoreras" +msgstr "Typ angiven för inbyggd funktion â€%s†vid %L ignoreras" #: fortran/resolve.c:1519 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic subroutine '%s' at %L shall not have a type specifier" -msgstr "Inbyggd subrutin \"%s\" vid %L får inte ha en typspecificerare" +msgstr "Inbyggd subrutin â€%s†vid %L fÃ¥r inte ha en typspecificerare" #: fortran/resolve.c:1530 #, gcc-internal-format, gfc-internal-format msgid "'%s' declared INTRINSIC at %L does not exist" -msgstr "\"%s\" deklarerad INTRINSIC vid %L finns inte" +msgstr "â€%s†deklarerad INTRINSIC vid %L finns inte" #: fortran/resolve.c:1541 #, gcc-internal-format, gfc-internal-format msgid "The intrinsic '%s' declared INTRINSIC at %L is not available in the current standard settings but %s. Use an appropriate -std=* option or enable -fall-intrinsics in order to use it." -msgstr "Den inbyggda \"%s\" deklarerad INTRINSIC vid %L är inte tillgänglig i den aktuella standardinställningen utan i %s. Använd en lämplig flagga -std=* eller aktivera -fall-intrinsics för att använda den." +msgstr "Den inbyggda â€%s†deklarerad INTRINSIC vid %L är inte tillgänglig i den aktuella standardinställningen utan i %s. Använd en lämplig flagga -std=* eller aktivera -fall-intrinsics för att använda den." #: fortran/resolve.c:1577 #, gcc-internal-format, gfc-internal-format msgid "Non-RECURSIVE procedure '%s' at %L is possibly calling itself recursively. Declare it RECURSIVE or use -frecursive" -msgstr "Icke RECURSIVE procedur \"%s\" vid %L anropar kanske sig själv rekursivt. Deklarera den RECURSIVE eller använd -frecursive." +msgstr "Icke RECURSIVE procedur â€%s†vid %L anropar kanske sig själv rekursivt. Deklarera den RECURSIVE eller använd -frecursive." #: fortran/resolve.c:1620 fortran/resolve.c:8534 fortran/resolve.c:9423 #, gcc-internal-format, gfc-internal-format msgid "Label %d referenced at %L is never defined" -msgstr "Etikett %d som refereras vid %L är aldrig definierad" +msgstr "Etikett %d som refereras vid %L är aldrig definierad" #: fortran/resolve.c:1665 #, gcc-internal-format, gfc-internal-format msgid "Statement function '%s' at %L is not allowed as an actual argument" -msgstr "Satsfunktionen \"%s\" vid %L får inte vara ett aktuellt argument" +msgstr "Satsfunktionen â€%s†vid %L fÃ¥r inte vara ett aktuellt argument" #: fortran/resolve.c:1673 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic '%s' at %L is not allowed as an actual argument" -msgstr "Inbyggd \"%s\" vid %L får inte vara ett aktuellt argument" +msgstr "Inbyggd â€%s†vid %L fÃ¥r inte vara ett aktuellt argument" #: fortran/resolve.c:1681 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Internal procedure '%s' is used as actual argument at %L" -msgstr "Fortran 2008: Den interna proceduren \"%s\" används som aktuellt argument vid %L" +msgstr "Fortran 2008: Den interna proceduren â€%s†används som aktuellt argument vid %L" #: fortran/resolve.c:1689 #, gcc-internal-format, gfc-internal-format msgid "ELEMENTAL non-INTRINSIC procedure '%s' is not allowed as an actual argument at %L" -msgstr "ELEMENTAL icke INTRINSIC procedur \"%s\" är inte tillåten som aktuellt argument vid %L" +msgstr "ELEMENTAL icke INTRINSIC procedur â€%s†är inte tillÃ¥ten som aktuellt argument vid %L" #: fortran/resolve.c:1716 #, gcc-internal-format, gfc-internal-format msgid "Unable to find a specific INTRINSIC procedure for the reference '%s' at %L" -msgstr "Det går inte att hitta en angiven INTRINSIC-procedur för referensen \"%s\" vid %L" +msgstr "Det gÃ¥r inte att hitta en angiven INTRINSIC-procedur för referensen â€%s†vid %L" #: fortran/resolve.c:1738 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %L is ambiguous" -msgstr "Symbolen \"%s\" vid %L är tvetydig" +msgstr "Symbolen â€%s†vid %L är tvetydig" #: fortran/resolve.c:1793 #, gcc-internal-format, gfc-internal-format msgid "By-value argument at %L is not of numeric type" -msgstr "Värdesargument vid %L har inte en numerisk typ" +msgstr "Värdesargument vid %L har inte en numerisk typ" #: fortran/resolve.c:1800 #, gcc-internal-format, gfc-internal-format msgid "By-value argument at %L cannot be an array or an array section" -msgstr "Värdeargument vid %L får inte vara en vektor eller vektorsektion" +msgstr "Värdeargument vid %L fÃ¥r inte vara en vektor eller vektorsektion" #: fortran/resolve.c:1814 #, gcc-internal-format, gfc-internal-format msgid "By-value argument at %L is not allowed in this context" -msgstr "Värdesargument vid %L är inte tillåtet i denna kontext" +msgstr "Värdesargument vid %L är inte tillÃ¥tet i denna kontext" #: fortran/resolve.c:1826 #, gcc-internal-format, gfc-internal-format msgid "Passing internal procedure at %L by location not allowed" -msgstr "Att skicka intern procedur som plats vid %L är inte tillåtet" +msgstr "Att skicka intern procedur som plats vid %L är inte tillÃ¥tet" #: fortran/resolve.c:1837 #, gcc-internal-format, gfc-internal-format @@ -40819,247 +40822,247 @@ msgstr "Co-indexerat aktuellt argument vid %L med slutlig pekarkomponent" #: fortran/resolve.c:1960 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L is an array and OPTIONAL; IF IT IS MISSING, it cannot be the actual argument of an ELEMENTAL procedure unless there is a non-optional argument with the same rank (12.4.1.5)" -msgstr "\"%s\" vid %L är en vektor och OPTIONAL. OM DEN SAKNAS kan den inte vara det aktuella argumentet i en ELEMENTAL-procedur om det inte finns ett ej valfritt argument med samma ordning (12.4.1.5)" +msgstr "â€%s†vid %L är en vektor och OPTIONAL. OM DEN SAKNAS kan den inte vara det aktuella argumentet i en ELEMENTAL-procedur om det inte finns ett ej valfritt argument med samma ordning (12.4.1.5)" #: fortran/resolve.c:1999 #, gcc-internal-format, gfc-internal-format msgid "Actual argument at %L for INTENT(%s) dummy '%s' of ELEMENTAL subroutine '%s' is a scalar, but another actual argument is an array" -msgstr "Aktuellt argument vid %L för INTENT(%s)-attrapp \"%s\" av ELEMENTAL-subrutin \"%s\" är en skalär, men ett annat aktuellt argument är en vektor" +msgstr "Aktuellt argument vid %L för INTENT(%s)-attrapp â€%s†av ELEMENTAL-subrutin â€%s†är en skalär, men ett annat aktuellt argument är en vektor" #: fortran/resolve.c:2161 #, gcc-internal-format, gfc-internal-format msgid "Character length mismatch in return type of function '%s' at %L (%ld/%ld)" -msgstr "Teckenlängd stämmer inte i returtypen för funktion \"%s\" vid %L (%ld/%ld)" +msgstr "Teckenlängd stämmer inte i returtypen för funktion â€%s†vid %L (%ld/%ld)" #: fortran/resolve.c:2169 #, gcc-internal-format, gfc-internal-format msgid "Return type mismatch of function '%s' at %L (%s/%s)" -msgstr "Returtypen stämmer inte för funktionen \"%s\" vid %L (%s/%s)" +msgstr "Returtypen stämmer inte för funktionen â€%s†vid %L (%s/%s)" #: fortran/resolve.c:2188 #, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' of procedure '%s' at %L has an attribute that requires an explicit interface for this procedure" -msgstr "Attrappargument \"%s\" till proceduren \"%s\" vid %L har ett attribut som kräver ett explicit gränssnitt för denna procedur" +msgstr "Attrappargument â€%s†till proceduren â€%s†vid %L har ett attribut som kräver ett explicit gränssnitt för denna procedur" #: fortran/resolve.c:2198 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %L with assumed-shape dummy argument '%s' must have an explicit interface" -msgstr "Proceduren \"%s\" vid %L med attrappargument \"%s\" med förmodad form måsta ha ett explicit gränssnitt" +msgstr "Proceduren â€%s†vid %L med attrappargument â€%s†med förmodad form mÃ¥sta ha ett explicit gränssnitt" #: fortran/resolve.c:2206 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %L with coarray dummy argument '%s' must have an explicit interface" -msgstr "Proceduren \"%s\" vid %L med ett co-vektorattrappargument \"%s\" måste ha ett explicit gränssnitt" +msgstr "Proceduren â€%s†vid %L med ett co-vektorattrappargument â€%s†mÃ¥ste ha ett explicit gränssnitt" #: fortran/resolve.c:2214 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %L with parametrized derived type argument '%s' must have an explicit interface" -msgstr "Proceduren \"%s\" vid %L med parametriserat härlett typargument \"%s\" måste ha ett explicit gränssnitt" +msgstr "Proceduren â€%s†vid %L med parametriserat härlett typargument â€%s†mÃ¥ste ha ett explicit gränssnitt" #: fortran/resolve.c:2223 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %L with polymorphic dummy argument '%s' must have an explicit interface" -msgstr "Proceduren \"%s\" vid %L med polymorft attrappargument \"%s\" måste ha ett explicit gränssnitt" +msgstr "Proceduren â€%s†vid %L med polymorft attrappargument â€%s†mÃ¥ste ha ett explicit gränssnitt" #: fortran/resolve.c:2235 #, gcc-internal-format, gfc-internal-format msgid "The reference to function '%s' at %L either needs an explicit INTERFACE or the rank is incorrect" -msgstr "Referensen till funktionen \"%s\" vid %L behöver antingen ett explicit INTERFACE eller så är ordningen fel" +msgstr "Referensen till funktionen â€%s†vid %L behöver antingen ett explicit INTERFACE eller sÃ¥ är ordningen fel" #: fortran/resolve.c:2247 #, gcc-internal-format, gfc-internal-format msgid "Function '%s' at %L with a POINTER or ALLOCATABLE result must have an explicit interface" -msgstr "Funktionen \"%s\" vid %L med ett POINTER eller ALLOCATABLE-resultat måste ha ett explicit gränssnitt" +msgstr "Funktionen â€%s†vid %L med ett POINTER eller ALLOCATABLE-resultat mÃ¥ste ha ett explicit gränssnitt" #: fortran/resolve.c:2260 #, gcc-internal-format, gfc-internal-format msgid "Nonconstant character-length function '%s' at %L must have an explicit interface" -msgstr "Ej konstant teckenlängdsfunktion \"%s\" vid %L måste ha ett explicit gränssnitt" +msgstr "Ej konstant teckenlängdsfunktion â€%s†vid %L mÃ¥ste ha ett explicit gränssnitt" #: fortran/resolve.c:2270 #, gcc-internal-format, gfc-internal-format msgid "ELEMENTAL procedure '%s' at %L must have an explicit interface" -msgstr "ELEMENTAL-proceduren \"%s\" vid %L måste ha ett explicit gränssnitt" +msgstr "ELEMENTAL-proceduren â€%s†vid %L mÃ¥ste ha ett explicit gränssnitt" #: fortran/resolve.c:2277 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %L with BIND(C) attribute must have an explicit interface" -msgstr "Proceduren \"%s\" vid %L med attributet BIND(C) måste ha ett explicit gränssnitt" +msgstr "Proceduren â€%s†vid %L med attributet BIND(C) mÃ¥ste ha ett explicit gränssnitt" #: fortran/resolve.c:2383 #, gcc-internal-format, gfc-internal-format msgid "There is no specific function for the generic '%s' at %L" -msgstr "Det finns ingen specifik funktionen för den generiska \"%s\" vid %L" +msgstr "Det finns ingen specifik funktionen för den generiska â€%s†vid %L" #: fortran/resolve.c:2401 #, gcc-internal-format, gfc-internal-format msgid "Generic function '%s' at %L is not consistent with a specific intrinsic interface" -msgstr "Generisk funktion \"%s\" vid %L är inte konsistent med ett specifikt inbyggt gränssnitt" +msgstr "Generisk funktion â€%s†vid %L är inte konsistent med ett specifikt inbyggt gränssnitt" #: fortran/resolve.c:2439 #, gcc-internal-format, gfc-internal-format msgid "Function '%s' at %L is INTRINSIC but is not compatible with an intrinsic" -msgstr "Funktionen \"%s\" vid %L är INTRINSIC men är inte kompatibel med en inbyggd" +msgstr "Funktionen â€%s†vid %L är INTRINSIC men är inte kompatibel med en inbyggd" #: fortran/resolve.c:2488 #, gcc-internal-format, gfc-internal-format msgid "Unable to resolve the specific function '%s' at %L" -msgstr "Kan inte slå upp den specifika funktionen \"%s\" vid %L" +msgstr "Kan inte slÃ¥ upp den specifika funktionen â€%s†vid %L" #: fortran/resolve.c:2544 fortran/resolve.c:13705 #, gcc-internal-format, gfc-internal-format msgid "Function '%s' at %L has no IMPLICIT type" -msgstr "Funktionen \"%s\" vid %L har ingen IMPLICIT-typ" +msgstr "Funktionen â€%s†vid %L har ingen IMPLICIT-typ" #: fortran/resolve.c:2746 #, gcc-internal-format, gfc-internal-format msgid "Argument to '%s' at %L is not a variable" -msgstr "Argument till \"%s\" vid %L är inte en variabel" +msgstr "Argument till â€%s†vid %L är inte en variabel" #: fortran/resolve.c:2793 #, gcc-internal-format, gfc-internal-format msgid "More actual than formal arguments in '%s' call at %L" -msgstr "Fler aktuella än formella argument i anrop av \"%s\" vid %L" +msgstr "Fler aktuella än formella argument i anrop av â€%s†vid %L" #: fortran/resolve.c:2805 #, gcc-internal-format, gfc-internal-format msgid "Parameter '%s' to '%s' at %L must be either a TARGET or an associated pointer" -msgstr "Parameter \"%s\" till \"%s\" vid %L måste antingen vara en TARGET eller en associerad pekare" +msgstr "Parameter â€%s†till â€%s†vid %L mÃ¥ste antingen vara en TARGET eller en associerad pekare" #: fortran/resolve.c:2814 #, gcc-internal-format, gfc-internal-format msgid "Coindexed argument not permitted in '%s' call at %L" -msgstr "Co-indexerat argument är inte tillåtet i anrop av \"%s\" vid %L" +msgstr "Co-indexerat argument är inte tillÃ¥tet i anrop av â€%s†vid %L" #: fortran/resolve.c:2837 #, gcc-internal-format, gfc-internal-format msgid "Array section not permitted in '%s' call at %L" -msgstr "En vektorsektion är inte tillåten i anrop av \"%s\" vid %L" +msgstr "En vektorsektion är inte tillÃ¥ten i anrop av â€%s†vid %L" #: fortran/resolve.c:2848 #, gcc-internal-format, gfc-internal-format msgid "Array section in '%s' call at %L" -msgstr "Vektorsektion i anrop av \"%s\" vid %L" +msgstr "Vektorsektion i anrop av â€%s†vid %L" #: fortran/resolve.c:2867 #, gcc-internal-format, gfc-internal-format msgid "Allocatable variable '%s' used as a parameter to '%s' at %L must not be an array of zero size" -msgstr "Allokerbar variabel \"%s\" använd som en parameter till \"%s\" vid %L får inte vara en vektor av storlek noll" +msgstr "Allokerbar variabel â€%s†använd som en parameter till â€%s†vid %L fÃ¥r inte vara en vektor av storlek noll" #: fortran/resolve.c:2884 #, gcc-internal-format, gfc-internal-format msgid "Assumed-shape array '%s' at %L cannot be an argument to the procedure '%s' because it is not C interoperable" -msgstr "Vektor \"%s\" med förmodad form vid %L får inte vara ett argument till proceduren \"%s\" eftersom den inte är C-interoperativ" +msgstr "Vektor â€%s†med förmodad form vid %L fÃ¥r inte vara ett argument till proceduren â€%s†eftersom den inte är C-interoperativ" #: fortran/resolve.c:2894 #, gcc-internal-format, gfc-internal-format msgid "Deferred-shape array '%s' at %L cannot be an argument to the procedure '%s' because it is not C interoperable" -msgstr "Vektor \"%s\" med fördröjd form vid %L får inte vara ett argument till proceduren \"%s\" eftersom den inte är C-interoperativ" +msgstr "Vektor â€%s†med fördröjd form vid %L fÃ¥r inte vara ett argument till proceduren â€%s†eftersom den inte är C-interoperativ" #: fortran/resolve.c:2917 fortran/resolve.c:2954 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER argument '%s' to '%s' at %L must have a length of 1" -msgstr "CHARACTER-argument \"%s\" till \"%s\" vid %L måste ha längden 1" +msgstr "CHARACTER-argument â€%s†till â€%s†vid %L mÃ¥ste ha längden 1" #. Case 1c, section 15.1.2.5, J3/04-007: an associated #. scalar pointer. #: fortran/resolve.c:2930 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' to '%s' at %L must be an associated scalar POINTER" -msgstr "Argument \"%s\" till \"%s\" vid %L måste vara en associerad skalär POINTER" +msgstr "Argument â€%s†till â€%s†vid %L mÃ¥ste vara en associerad skalär POINTER" #: fortran/resolve.c:2946 #, gcc-internal-format, gfc-internal-format msgid "Parameter '%s' to '%s' at %L must be a scalar" -msgstr "Parameter \"%s\" till \"%s\" vid %L måste vara en skalär" +msgstr "Parameter â€%s†till â€%s†vid %L mÃ¥ste vara en skalär" #: fortran/resolve.c:2962 #, gcc-internal-format, gfc-internal-format msgid "Parameter '%s' to '%s' at %L must not be polymorphic" -msgstr "Parametern \"%s\" till \"%s\" vid %L får inte vara polymorf" +msgstr "Parametern â€%s†till â€%s†vid %L fÃ¥r inte vara polymorf" #. TODO: Update this error message to allow for procedure #. pointers once they are implemented. #: fortran/resolve.c:2975 #, gcc-internal-format, gfc-internal-format msgid "Parameter '%s' to '%s' at %L must be a procedure" -msgstr "Parameter \"%s\" till \"%s\" vid %L måste vara en procedur" +msgstr "Parameter â€%s†till â€%s†vid %L mÃ¥ste vara en procedur" #: fortran/resolve.c:2983 #, gcc-internal-format, gfc-internal-format msgid "Parameter '%s' to '%s' at %L must be BIND(C)" -msgstr "Parameter \"%s\" till \"%s\" vid %L måste vara BIND(C)" +msgstr "Parameter â€%s†till â€%s†vid %L mÃ¥ste vara BIND(C)" #: fortran/resolve.c:3032 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L is not a function" -msgstr "\"%s\" vid %L är inte en funktion" +msgstr "â€%s†vid %L är inte en funktion" #: fortran/resolve.c:3040 fortran/resolve.c:3670 #, gcc-internal-format, gfc-internal-format msgid "ABSTRACT INTERFACE '%s' must not be referenced at %L" -msgstr "ABSTRACT INTERFACE \"%s\" får inte refereras vid %L" +msgstr "ABSTRACT INTERFACE â€%s†fÃ¥r inte refereras vid %L" #. Internal procedures are taken care of in resolve_contained_fntype. #: fortran/resolve.c:3095 #, gcc-internal-format, gfc-internal-format msgid "Function '%s' is declared CHARACTER(*) and cannot be used at %L since it is not a dummy argument" -msgstr "Funktionen \"%s\" är deklarerad CHARACTER(*) och får inte användas vid %L eftersom det inte är ett attrappargument" +msgstr "Funktionen â€%s†är deklarerad CHARACTER(*) och fÃ¥r inte användas vid %L eftersom det inte är ett attrappargument" #: fortran/resolve.c:3148 #, gcc-internal-format, gfc-internal-format msgid "User defined non-ELEMENTAL function '%s' at %L not allowed in WORKSHARE construct" -msgstr "Användardefinierad ej ELEMENTAL funktion \"%s\" vid %L är inte tillåten i WORKSHARE-konstruktion" +msgstr "Användardefinierad ej ELEMENTAL funktion â€%s†vid %L är inte tillÃ¥ten i WORKSHARE-konstruktion" #: fortran/resolve.c:3198 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Reference to non-PURE function '%s' at %L inside a FORALL %s" -msgstr "referens till funktion \"%s\" som inte är PURE vid %L är inuti ett FORALL-%s" +msgstr "referens till funktion â€%s†som inte är PURE vid %L är inuti ett FORALL-%s" #: fortran/resolve.c:3205 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Reference to non-PURE function '%s' at %L inside a DO CONCURRENT %s" -msgstr "referens till funktion \"%s\" som inte är PURE vid %L är inuti ett FORALL-%s" +msgstr "referens till funktion â€%s†som inte är PURE vid %L är inuti ett FORALL-%s" #: fortran/resolve.c:3212 #, gcc-internal-format, gfc-internal-format msgid "Function reference to '%s' at %L is to a non-PURE procedure within a PURE procedure" -msgstr "Funktionsreferens till \"%s\" vid %L är till en icke-PURE-procedur inuti en PURE-procedur" +msgstr "Funktionsreferens till â€%s†vid %L är till en icke-PURE-procedur inuti en PURE-procedur" #: fortran/resolve.c:3231 #, gcc-internal-format, gfc-internal-format msgid "ENTRY '%s' at %L cannot be called recursively, as function '%s' is not RECURSIVE" -msgstr "ENTRY \"%s\" vid %L får inte anropas rekursivt, eftersom funktionen \"%s\" inte är RECURSIVE" +msgstr "ENTRY â€%s†vid %L fÃ¥r inte anropas rekursivt, eftersom funktionen â€%s†inte är RECURSIVE" #: fortran/resolve.c:3235 #, gcc-internal-format, gfc-internal-format msgid "Function '%s' at %L cannot be called recursively, as it is not RECURSIVE" -msgstr "Funktion \"%s\" vid %L får inte anropas rekursivt, eftersom den inte är RECURSIVE" +msgstr "Funktion â€%s†vid %L fÃ¥r inte anropas rekursivt, eftersom den inte är RECURSIVE" #: fortran/resolve.c:3274 #, gcc-internal-format, gfc-internal-format msgid "Subroutine call to '%s' in FORALL block at %L is not PURE" -msgstr "Subrutinanrop till \"%s\" i FORALL-block vid %L är inte PURE" +msgstr "Subrutinanrop till â€%s†i FORALL-block vid %L är inte PURE" #: fortran/resolve.c:3277 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Subroutine call to '%s' in DO CONCURRENT block at %L is not PURE" -msgstr "Subrutinanrop till \"%s\" i FORALL-block vid %L är inte PURE" +msgstr "Subrutinanrop till â€%s†i FORALL-block vid %L är inte PURE" #: fortran/resolve.c:3280 #, gcc-internal-format, gfc-internal-format msgid "Subroutine call to '%s' at %L is not PURE" -msgstr "Subrutinanrop till \"%s\" vid %L är inte PURE" +msgstr "Subrutinanrop till â€%s†vid %L är inte PURE" #: fortran/resolve.c:3346 #, gcc-internal-format, gfc-internal-format msgid "There is no specific subroutine for the generic '%s' at %L" -msgstr "Det finns ingen specifik subrutinen för den generiska \"%s\" vid %L" +msgstr "Det finns ingen specifik subrutinen för den generiska â€%s†vid %L" #: fortran/resolve.c:3355 #, gcc-internal-format, gfc-internal-format msgid "Generic subroutine '%s' at %L is not consistent with an intrinsic subroutine interface" -msgstr "Generisk subrutin \"%s\" vid %L är inte konsistent med ett inbyggt subrutingränssnitt" +msgstr "Generisk subrutin â€%s†vid %L är inte konsistent med ett inbyggt subrutingränssnitt" #: fortran/resolve.c:3463 #, gcc-internal-format, gfc-internal-format @@ -41069,192 +41072,192 @@ msgstr "SHAPE-parameter saknas i anrop till %s vid %L" #: fortran/resolve.c:3471 #, gcc-internal-format, gfc-internal-format msgid "SHAPE parameter for call to %s at %L must be a rank 1 INTEGER array" -msgstr "SHAPE-parameter för anrop till %s vid %L måste vara en INTEGER-VEKTOR av ordning 1" +msgstr "SHAPE-parameter för anrop till %s vid %L mÃ¥ste vara en INTEGER-VEKTOR av ordning 1" #: fortran/resolve.c:3538 #, gcc-internal-format, gfc-internal-format msgid "Subroutine '%s' at %L is INTRINSIC but is not compatible with an intrinsic" -msgstr "Subrutin \"%s\" vid %L är INTRINSIC men är inte kompatibel med en inbyggd" +msgstr "Subrutin â€%s†vid %L är INTRINSIC men är inte kompatibel med en inbyggd" #: fortran/resolve.c:3582 #, gcc-internal-format, gfc-internal-format msgid "Unable to resolve the specific subroutine '%s' at %L" -msgstr "Kan inte slå upp den specifika subrutinen \"%s\" vid %L" +msgstr "Kan inte slÃ¥ upp den specifika subrutinen â€%s†vid %L" #: fortran/resolve.c:3642 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L has a type, which is not consistent with the CALL at %L" -msgstr "\"%s\" vid %L har en typ som inte är konsistent med CALL vid %L" +msgstr "â€%s†vid %L har en typ som inte är konsistent med CALL vid %L" #: fortran/resolve.c:3680 #, gcc-internal-format, gfc-internal-format msgid "ENTRY '%s' at %L cannot be called recursively, as subroutine '%s' is not RECURSIVE" -msgstr "ENTRY \"%s\" vid %L är får inte anropas rekursivt, eftersom subrutinen \"%s\" inte är RECURSIVE" +msgstr "ENTRY â€%s†vid %L är fÃ¥r inte anropas rekursivt, eftersom subrutinen â€%s†inte är RECURSIVE" #: fortran/resolve.c:3684 #, gcc-internal-format, gfc-internal-format msgid "SUBROUTINE '%s' at %L cannot be called recursively, as it is not RECURSIVE" -msgstr "SUBROUTINE \"%s\" vid %L får inte anropas rekursivt, eftersom den inte är RECURSIVE" +msgstr "SUBROUTINE â€%s†vid %L fÃ¥r inte anropas rekursivt, eftersom den inte är RECURSIVE" #: fortran/resolve.c:3760 #, gcc-internal-format, gfc-internal-format msgid "Shapes for operands at %L and %L are not conformable" -msgstr "Formerna för operanderna vid %L och %L är inte konforma" +msgstr "Formerna för operanderna vid %L och %L är inte konforma" #: fortran/resolve.c:4258 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld < %ld) in dimension %d" -msgstr "Vektorreferens vid %L är utanför gränsen (%ld < %ld) i dimension %d" +msgstr "Vektorreferens vid %L är utanför gränsen (%ld < %ld) i dimension %d" #: fortran/resolve.c:4263 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld < %ld) in codimension %d" -msgstr "Vektorreferens vid %L är utanför gränsen (%ld < %ld) i co-dimension %d" +msgstr "Vektorreferens vid %L är utanför gränsen (%ld < %ld) i co-dimension %d" #: fortran/resolve.c:4273 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld > %ld) in dimension %d" -msgstr "Vektorreferens vid %L är utanför gränsen (%ld > %ld) i dimension %d" +msgstr "Vektorreferens vid %L är utanför gränsen (%ld > %ld) i dimension %d" #: fortran/resolve.c:4278 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld > %ld) in codimension %d" -msgstr "Vektorreferens vid %L är utanför gränsen (%ld > %ld) i co-dimension %d" +msgstr "Vektorreferens vid %L är utanför gränsen (%ld > %ld) i co-dimension %d" #: fortran/resolve.c:4298 #, gcc-internal-format, gfc-internal-format msgid "Illegal stride of zero at %L" -msgstr "Otillåtet steg på noll vid %L" +msgstr "OtillÃ¥tet steg pÃ¥ noll vid %L" #: fortran/resolve.c:4315 #, gcc-internal-format, gfc-internal-format msgid "Lower array reference at %L is out of bounds (%ld < %ld) in dimension %d" -msgstr "Undre vektorreferens vid %L är utanför gränsen (%ld < %ld) i dimension %d" +msgstr "Undre vektorreferens vid %L är utanför gränsen (%ld < %ld) i dimension %d" #: fortran/resolve.c:4323 #, gcc-internal-format, gfc-internal-format msgid "Lower array reference at %L is out of bounds (%ld > %ld) in dimension %d" -msgstr "Undre vektorreferens vid %L är utanför gränsen (%ld > %ld) i dimension %d" +msgstr "Undre vektorreferens vid %L är utanför gränsen (%ld > %ld) i dimension %d" #: fortran/resolve.c:4339 #, gcc-internal-format, gfc-internal-format msgid "Upper array reference at %L is out of bounds (%ld < %ld) in dimension %d" -msgstr "Övre vektorreferens vid %L är utanför gränsen (%ld < %ld) i dimension %d" +msgstr "Övre vektorreferens vid %L är utanför gränsen (%ld < %ld) i dimension %d" #: fortran/resolve.c:4348 #, gcc-internal-format, gfc-internal-format msgid "Upper array reference at %L is out of bounds (%ld > %ld) in dimension %d" -msgstr "Övre vektorreferens vid %L är utanför gränsen (%ld > %ld) i dimension %d" +msgstr "Övre vektorreferens vid %L är utanför gränsen (%ld > %ld) i dimension %d" #: fortran/resolve.c:4387 #, gcc-internal-format, gfc-internal-format msgid "Rightmost upper bound of assumed size array section not specified at %L" -msgstr "Högraste övre gränsen av en sektion av vektor med antagen storlek inte angiven vid %L" +msgstr "Högraste övre gränsen av en sektion av vektor med antagen storlek inte angiven vid %L" #: fortran/resolve.c:4397 #, gcc-internal-format, gfc-internal-format msgid "Rank mismatch in array reference at %L (%d/%d)" -msgstr "Ordning stämmer inte i vektorreferens vid %L (%d/%d)" +msgstr "Ordning stämmer inte i vektorreferens vid %L (%d/%d)" #: fortran/resolve.c:4405 #, gcc-internal-format, gfc-internal-format msgid "Coindex rank mismatch in array reference at %L (%d/%d)" -msgstr "Co-indexordning stämmer inte i vektorreferens vid %L (%d/%d)" +msgstr "Co-indexordning stämmer inte i vektorreferens vid %L (%d/%d)" #: fortran/resolve.c:4421 #, gcc-internal-format, gfc-internal-format msgid "Coindex of codimension %d must be a scalar at %L" -msgstr "Co-index i co-dimension %d måste vara en skalär vid %L" +msgstr "Co-index i co-dimension %d mÃ¥ste vara en skalär vid %L" #: fortran/resolve.c:4449 #, gcc-internal-format, gfc-internal-format msgid "Array index at %L must be scalar" -msgstr "Vektorindex vid %L måste vara skalärt" +msgstr "Vektorindex vid %L mÃ¥ste vara skalärt" #: fortran/resolve.c:4455 #, gcc-internal-format, gfc-internal-format msgid "Array index at %L must be of INTEGER type, found %s" -msgstr "Vektorindex vid %L måste ha INTEGER-typ, fann %s" +msgstr "Vektorindex vid %L mÃ¥ste ha INTEGER-typ, fann %s" #: fortran/resolve.c:4461 #, gcc-internal-format, gfc-internal-format msgid "Extension: REAL array index at %L" -msgstr "Utökning: REAL-vektorindex vid %L" +msgstr "Utökning: REAL-vektorindex vid %L" #: fortran/resolve.c:4500 #, gcc-internal-format, gfc-internal-format msgid "Argument dim at %L must be scalar" -msgstr "Dim-argumentet vid %L måste vara skalärt" +msgstr "Dim-argumentet vid %L mÃ¥ste vara skalärt" #: fortran/resolve.c:4507 #, gcc-internal-format, gfc-internal-format msgid "Argument dim at %L must be of INTEGER type" -msgstr "Dim-argumentet vid %L måste ha INTEGER-typ" +msgstr "Dim-argumentet vid %L mÃ¥ste ha INTEGER-typ" #: fortran/resolve.c:4617 #, gcc-internal-format, gfc-internal-format msgid "Array index at %L is an array of rank %d" -msgstr "Vektorindex vid %L är en vektor med ordning %d" +msgstr "Vektorindex vid %L är en vektor med ordning %d" #: fortran/resolve.c:4715 #, gcc-internal-format, gfc-internal-format msgid "Substring start index at %L must be of type INTEGER" -msgstr "Startindex för delsträng vid %L måste typen INTEGER" +msgstr "Startindex för delsträng vid %L mÃ¥ste typen INTEGER" #: fortran/resolve.c:4722 #, gcc-internal-format, gfc-internal-format msgid "Substring start index at %L must be scalar" -msgstr "Startindex för delsträng vid %L måste vara skalärt" +msgstr "Startindex för delsträng vid %L mÃ¥ste vara skalärt" #: fortran/resolve.c:4731 #, gcc-internal-format, gfc-internal-format msgid "Substring start index at %L is less than one" -msgstr "Substrängs startindex vid %L är mindre än ett" +msgstr "Substrängs startindex vid %L är mindre än ett" #: fortran/resolve.c:4744 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L must be of type INTEGER" -msgstr "Slutindex för delsträng vid %L måste ha typen INTEGER" +msgstr "Slutindex för delsträng vid %L mÃ¥ste ha typen INTEGER" #: fortran/resolve.c:4751 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L must be scalar" -msgstr "Slutsträng för delsträng vid %L måste vara skalärt" +msgstr "Slutsträng för delsträng vid %L mÃ¥ste vara skalärt" #: fortran/resolve.c:4761 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L exceeds the string length" -msgstr "Slutindex för delsträng vid %L överstiger strängens längd" +msgstr "Slutindex för delsträng vid %L överstiger strängens längd" #: fortran/resolve.c:4771 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L is too large" -msgstr "Slutindex för delsträng vid %L är för stort" +msgstr "Slutindex för delsträng vid %L är för stort" #: fortran/resolve.c:4917 #, gcc-internal-format, gfc-internal-format msgid "Component to the right of a part reference with nonzero rank must not have the POINTER attribute at %L" -msgstr "Komponent till den högra av en delreferens med ordning skild från noll får inte ha attributet POINTER vid %L" +msgstr "Komponent till den högra av en delreferens med ordning skild frÃ¥n noll fÃ¥r inte ha attributet POINTER vid %L" #: fortran/resolve.c:4924 #, gcc-internal-format, gfc-internal-format msgid "Component to the right of a part reference with nonzero rank must not have the ALLOCATABLE attribute at %L" -msgstr "Komponent till den högra av en delreferens med ordning skild från noll får inte ha attributet ALLOCATABLE vid %L" +msgstr "Komponent till den högra av en delreferens med ordning skild frÃ¥n noll fÃ¥r inte ha attributet ALLOCATABLE vid %L" #: fortran/resolve.c:4943 #, gcc-internal-format, gfc-internal-format msgid "Two or more part references with nonzero rank must not be specified at %L" -msgstr "Två eller flera delreferenser med ordning skild från noll får inte anges vid %L" +msgstr "TvÃ¥ eller flera delreferenser med ordning skild frÃ¥n noll fÃ¥r inte anges vid %L" #: fortran/resolve.c:5148 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s', used in a specification expression, is referenced at %L before the ENTRY statement in which it is a parameter" -msgstr "Variabel \"%s\", använd i ett specifikationsuttryck, refereras vid %L före ENTRY-satsen i vilken den är en parameter" +msgstr "Variabel â€%sâ€, använd i ett specifikationsuttryck, refereras vid %L före ENTRY-satsen i vilken den är en parameter" #: fortran/resolve.c:5153 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' is used at %L before the ENTRY statement in which it is a parameter" -msgstr "Variabel \"%s\" används vid %L före ENTRY-satsen i vilken den är en parameter" +msgstr "Variabel â€%s†används vid %L före ENTRY-satsen i vilken den är en parameter" #: fortran/resolve.c:5217 #, gcc-internal-format, gfc-internal-format @@ -41269,98 +41272,98 @@ msgstr "Co-indexerat objekt med polymorf allokerbar delkomponent vid %L" #: fortran/resolve.c:5556 #, gcc-internal-format, gfc-internal-format msgid "Passed-object at %L must be scalar" -msgstr "Skickat objekt vid %L måste vara skalär" +msgstr "Skickat objekt vid %L mÃ¥ste vara skalär" #: fortran/resolve.c:5563 #, gcc-internal-format, gfc-internal-format msgid "Base object for procedure-pointer component call at %L is of ABSTRACT type '%s'" -msgstr "Basobjekt för procedurpekarkomponentanrop vid %L är av ABSTRACT typ \"%s\"" +msgstr "Basobjekt för procedurpekarkomponentanrop vid %L är av ABSTRACT typ â€%sâ€" #: fortran/resolve.c:5595 #, gcc-internal-format, gfc-internal-format msgid "Base object for type-bound procedure call at %L is of ABSTRACT type '%s'" -msgstr "Basobjekt för typbundet proceduranrop vid %L är av ABSTRACT typ \"%s\"" +msgstr "Basobjekt för typbundet proceduranrop vid %L är av ABSTRACT typ â€%sâ€" #: fortran/resolve.c:5604 #, gcc-internal-format, gfc-internal-format msgid "Base object for NOPASS type-bound procedure call at %L must be scalar" -msgstr "Basobjekt för typbundet NOPASS-proceduranrop vid %L måste vara skalärt" +msgstr "Basobjekt för typbundet NOPASS-proceduranrop vid %L mÃ¥ste vara skalärt" #. Nothing matching found! #: fortran/resolve.c:5789 #, gcc-internal-format, gfc-internal-format msgid "Found no matching specific binding for the call to the GENERIC '%s' at %L" -msgstr "Hittade ingen matchande specifik bindning för anropet till GENERIC \"%s\" vid %L" +msgstr "Hittade ingen matchande specifik bindning för anropet till GENERIC â€%s†vid %L" #: fortran/resolve.c:5816 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L should be a SUBROUTINE" -msgstr "\"%s\" vid %L skulle vara en SUBROUTINE" +msgstr "â€%s†vid %L skulle vara en SUBROUTINE" #: fortran/resolve.c:5863 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L should be a FUNCTION" -msgstr "\"%s\" vid %L skulle vara en SUBROUTINE" +msgstr "â€%s†vid %L skulle vara en SUBROUTINE" #: fortran/resolve.c:6380 #, gcc-internal-format, gfc-internal-format msgid "%s at %L must be a scalar" -msgstr "%s vid %L måste vara en skalär" +msgstr "%s vid %L mÃ¥ste vara en skalär" #: fortran/resolve.c:6390 #, gcc-internal-format, gfc-internal-format msgid "Deleted feature: %s at %L must be integer" -msgstr "Borttagen funktion: %s vid %L måste vara ett heltal" +msgstr "Borttagen funktion: %s vid %L mÃ¥ste vara ett heltal" #: fortran/resolve.c:6394 fortran/resolve.c:6401 #, gcc-internal-format, gfc-internal-format msgid "%s at %L must be INTEGER" -msgstr "%s vid %L måste vara INTEGER" +msgstr "%s vid %L mÃ¥ste vara INTEGER" #: fortran/resolve.c:6442 #, gcc-internal-format, gfc-internal-format msgid "Step expression in DO loop at %L cannot be zero" -msgstr "Steguttryck i DO-slinga vid %L får inte vara noll" +msgstr "Steguttryck i DO-slinga vid %L fÃ¥r inte vara noll" #: fortran/resolve.c:6477 #, gcc-internal-format, gfc-internal-format msgid "DO loop at %L will be executed zero times" -msgstr "DO-slinga vid %L kommer köras noll gånger" +msgstr "DO-slinga vid %L kommer köras noll gÃ¥nger" #: fortran/resolve.c:6538 #, gcc-internal-format, gfc-internal-format msgid "FORALL index-name at %L must be a scalar INTEGER" -msgstr "FORALL-indexnamn vid %L måste vara en skalär INTEGER" +msgstr "FORALL-indexnamn vid %L mÃ¥ste vara en skalär INTEGER" #: fortran/resolve.c:6543 #, gcc-internal-format, gfc-internal-format msgid "FORALL start expression at %L must be a scalar INTEGER" -msgstr "FORALL-slututtryck vid %L måste vara en skalär INTEGER" +msgstr "FORALL-slututtryck vid %L mÃ¥ste vara en skalär INTEGER" #: fortran/resolve.c:6550 #, gcc-internal-format, gfc-internal-format msgid "FORALL end expression at %L must be a scalar INTEGER" -msgstr "FORALL-slututtryck vid %L måste vara en skalär INTEGER" +msgstr "FORALL-slututtryck vid %L mÃ¥ste vara en skalär INTEGER" #: fortran/resolve.c:6558 #, gcc-internal-format, gfc-internal-format msgid "FORALL stride expression at %L must be a scalar %s" -msgstr "FORALL-steguttryck vid %L måste vara en skalär %s" +msgstr "FORALL-steguttryck vid %L mÃ¥ste vara en skalär %s" #: fortran/resolve.c:6563 #, gcc-internal-format, gfc-internal-format msgid "FORALL stride expression at %L cannot be zero" -msgstr "FORALL-steguttryck vid %L får inte vara noll" +msgstr "FORALL-steguttryck vid %L fÃ¥r inte vara noll" #: fortran/resolve.c:6579 #, gcc-internal-format, gfc-internal-format msgid "FORALL index '%s' may not appear in triplet specification at %L" -msgstr "FORALL-index \"%s\" får inte förekomma i triplettspecifikation vid %L" +msgstr "FORALL-index â€%s†fÃ¥r inte förekomma i triplettspecifikation vid %L" #: fortran/resolve.c:6675 fortran/resolve.c:6958 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %L must be ALLOCATABLE or a POINTER" -msgstr "Allokeringsojbekt vid %L måste vara ALLOCATABLE eller en POINTER" +msgstr "Allokeringsojbekt vid %L mÃ¥ste vara ALLOCATABLE eller en POINTER" #: fortran/resolve.c:6683 fortran/resolve.c:6924 #, gcc-internal-format, gfc-internal-format @@ -41370,22 +41373,22 @@ msgstr "Co-indexerat allokerbart objekt vid %L" #: fortran/resolve.c:6788 #, gcc-internal-format, gfc-internal-format msgid "Source-expr at %L must be scalar or have the same rank as the allocate-object at %L" -msgstr "Källuttryck vid %L måste vara skalärt eller ha samma ordning som allokeringsobjektet vid %L" +msgstr "Källuttryck vid %L mÃ¥ste vara skalärt eller ha samma ordning som allokeringsobjektet vid %L" #: fortran/resolve.c:6816 #, gcc-internal-format, gfc-internal-format msgid "Source-expr at %L and allocate-object at %L must have the same shape" -msgstr "Källuttryck vid %L och allokeringsobjekt vid %L måste ha samma form" +msgstr "Källuttryck vid %L och allokeringsobjekt vid %L mÃ¥ste ha samma form" #: fortran/resolve.c:6969 #, gcc-internal-format, gfc-internal-format msgid "Type of entity at %L is type incompatible with source-expr at %L" -msgstr "Typen på enheten vid %L är typinkompatibel med källuttrycket vid %L" +msgstr "Typen pÃ¥ enheten vid %L är typinkompatibel med källuttrycket vid %L" #: fortran/resolve.c:6982 #, gcc-internal-format, gfc-internal-format msgid "The allocate-object at %L and the source-expr at %L shall have the same kind type parameter" -msgstr "Allokeringsobjektet vid %L och källuttrycket vid %L skall ha samma sorts typparameter" +msgstr "Allokeringsobjektet vid %L och källuttrycket vid %L skall ha samma sorts typparameter" #: fortran/resolve.c:6996 #, gcc-internal-format, gfc-internal-format @@ -41395,7 +41398,7 @@ msgstr "" #: fortran/resolve.c:7009 #, gcc-internal-format, gfc-internal-format msgid "Allocating %s of ABSTRACT base type at %L requires a type-spec or source-expr" -msgstr "Allokering %s av ABSTRACT bastyp vid %L behöver en typspecifikation eller source-uttryck" +msgstr "Allokering %s av ABSTRACT bastyp vid %L behöver en typspecifikation eller source-uttryck" #: fortran/resolve.c:7020 #, gcc-internal-format, gfc-internal-format @@ -41405,12 +41408,12 @@ msgstr "" #: fortran/resolve.c:7105 #, gcc-internal-format, gfc-internal-format msgid "Array specification required in ALLOCATE statement at %L" -msgstr "Vektorspecifikation krävs i ALLOCATE-sats vid %L" +msgstr "Vektorspecifikation krävs i ALLOCATE-sats vid %L" #: fortran/resolve.c:7119 #, gcc-internal-format, gfc-internal-format msgid "Coarray specification required in ALLOCATE statement at %L" -msgstr "Co-vektorspecifikation krävs i ALLOCATE-sats vid %L" +msgstr "Co-vektorspecifikation krävs i ALLOCATE-sats vid %L" #: fortran/resolve.c:7146 #, gcc-internal-format, gfc-internal-format @@ -41420,12 +41423,12 @@ msgstr "Felaktig vektorspecifikation i ALLOCATE-sats vid %L" #: fortran/resolve.c:7165 #, gcc-internal-format, gfc-internal-format msgid "'%s' must not appear in the array specification at %L in the same ALLOCATE statement where it is itself allocated" -msgstr "\"%s\" får inte förekomma i vektorspecifikationen vid %L i samma ALLOCATE-sats där den själv allokeras" +msgstr "â€%s†fÃ¥r inte förekomma i vektorspecifikationen vid %L i samma ALLOCATE-sats där den själv allokeras" #: fortran/resolve.c:7180 #, gcc-internal-format, gfc-internal-format msgid "Expected '*' in coindex specification in ALLOCATE statement at %L" -msgstr "\"*\" förväntades i co-indexspecifikation i ALLOCATE-sats vid %L" +msgstr "â€*†förväntades i co-indexspecifikation i ALLOCATE-sats vid %L" #: fortran/resolve.c:7191 #, gcc-internal-format, gfc-internal-format @@ -41435,7 +41438,7 @@ msgstr "Felaktig co-vektorspecifikation i ALLOCATE-sats vid %L" #: fortran/resolve.c:7221 #, gcc-internal-format, gfc-internal-format msgid "Stat-variable at %L must be a scalar INTEGER variable" -msgstr "Statvariabel vid %L måste vara en INTEGER-variabel" +msgstr "Statvariabel vid %L mÃ¥ste vara en INTEGER-variabel" #: fortran/resolve.c:7244 #, gcc-internal-format, gfc-internal-format @@ -41445,12 +41448,12 @@ msgstr "Statvariabel vid %L skall inte %s:as i samma %s-sats" #: fortran/resolve.c:7255 #, gcc-internal-format, gfc-internal-format msgid "ERRMSG at %L is useless without a STAT tag" -msgstr "ERRMSG vid %L är oanvändbart utan en STAT-tagg" +msgstr "ERRMSG vid %L är oanvändbart utan en STAT-tagg" #: fortran/resolve.c:7265 #, gcc-internal-format, gfc-internal-format msgid "Errmsg-variable at %L must be a scalar CHARACTER variable" -msgstr "Errmsg-variabeln vid %L måste vara en skalär CHARACTER-variabel" +msgstr "Errmsg-variabeln vid %L mÃ¥ste vara en skalär CHARACTER-variabel" #: fortran/resolve.c:7288 #, gcc-internal-format, gfc-internal-format @@ -41460,12 +41463,12 @@ msgstr "Errmsg-variabel vid %L skall inte %s:as i samma %s-sats" #: fortran/resolve.c:7318 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %L also appears at %L" -msgstr "Allokeringsobjekt vid %L förekommer också vid %L" +msgstr "Allokeringsobjekt vid %L förekommer ocksÃ¥ vid %L" #: fortran/resolve.c:7324 fortran/resolve.c:7330 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %L is subobject of object at %L" -msgstr "Allokeringsobjekt vid %L är underobjet till objekt vid %L" +msgstr "Allokeringsobjekt vid %L är underobjet till objekt vid %L" #. The cases overlap, or they are the same #. element in the list. Either way, we must @@ -41474,27 +41477,27 @@ msgstr "Allokeringsobjekt vid %L är underobjet till objekt vid %L" #: fortran/resolve.c:7525 #, gcc-internal-format, gfc-internal-format msgid "CASE label at %L overlaps with CASE label at %L" -msgstr "CASE-etikett vid %L överlappar med CASE-etikett vid %L" +msgstr "CASE-etikett vid %L överlappar med CASE-etikett vid %L" #: fortran/resolve.c:7576 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L must be of type %s" -msgstr "uttryck i CASE-sats vid %L måste vara av typ %s" +msgstr "uttryck i CASE-sats vid %L mÃ¥ste vara av typ %s" #: fortran/resolve.c:7587 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L must be of kind %d" -msgstr "Uttryck i CASE-sats vid %L måste ha sort %d" +msgstr "Uttryck i CASE-sats vid %L mÃ¥ste ha sort %d" #: fortran/resolve.c:7600 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L must be scalar" -msgstr "Uttryck i CASE-sats vid %L måste vara skalärt" +msgstr "Uttryck i CASE-sats vid %L mÃ¥ste vara skalärt" #: fortran/resolve.c:7646 #, gcc-internal-format, gfc-internal-format msgid "Selection expression in computed GOTO statement at %L must be a scalar integer expression" -msgstr "Valuttryck i beräknad-GOTO-sats vid %L måste vara ett skalärt heltalsuttryck" +msgstr "Valuttryck i beräknad-GOTO-sats vid %L mÃ¥ste vara ett skalärt heltalsuttryck" #: fortran/resolve.c:7664 #, gcc-internal-format, gfc-internal-format @@ -41509,17 +41512,17 @@ msgstr "Uttryck i CASE-sats vid %L ligger inte i intervallet %s" #: fortran/resolve.c:7752 fortran/resolve.c:8062 #, gcc-internal-format, gfc-internal-format msgid "The DEFAULT CASE at %L cannot be followed by a second DEFAULT CASE at %L" -msgstr "DEFAULT CASE vid %L får inte följas av ett andra DEFAULT CASE vid %L" +msgstr "DEFAULT CASE vid %L fÃ¥r inte följas av ett andra DEFAULT CASE vid %L" #: fortran/resolve.c:7778 #, gcc-internal-format, gfc-internal-format msgid "Logical range in CASE statement at %L is not allowed" -msgstr "Logiskt intervall CASE-sats vid %L är inte tillåtet" +msgstr "Logiskt intervall CASE-sats vid %L är inte tillÃ¥tet" #: fortran/resolve.c:7790 #, gcc-internal-format, gfc-internal-format msgid "Constant logical value in CASE statement is repeated at %L" -msgstr "Konstant logiskt värde i CASE-sats upprepas vid %L" +msgstr "Konstant logiskt värde i CASE-sats upprepas vid %L" #: fortran/resolve.c:7804 #, gcc-internal-format, gfc-internal-format @@ -41529,12 +41532,12 @@ msgstr "Intervallspecifikationen vid %L kan aldrig matchas" #: fortran/resolve.c:7907 #, gcc-internal-format, gfc-internal-format msgid "Logical SELECT CASE block at %L has more that two cases" -msgstr "Logiskt SELECT CASE-block vid %L har mer än två fall" +msgstr "Logiskt SELECT CASE-block vid %L har mer än tvÃ¥ fall" #: fortran/resolve.c:7972 #, gcc-internal-format, gfc-internal-format msgid "Associate-name '%s' at %L is used as array" -msgstr "Associationsnamn \"%s\" vid %L används som en vektor" +msgstr "Associationsnamn â€%s†vid %L används som en vektor" #: fortran/resolve.c:8014 #, gcc-internal-format, gfc-internal-format @@ -41544,12 +41547,12 @@ msgstr "Selektorer skall vara polymorfiska i SELECT TYPE-sats vid %L" #: fortran/resolve.c:8040 #, gcc-internal-format, gfc-internal-format msgid "Derived type '%s' at %L must be extensible" -msgstr "Härledd typ \"%s\" vid %L måste vara utökningsbar" +msgstr "Härledd typ â€%s†vid %L mÃ¥ste vara utökningsbar" #: fortran/resolve.c:8050 #, gcc-internal-format, gfc-internal-format msgid "Derived type '%s' at %L must be an extension of '%s'" -msgstr "Härledd typ \"%s\" vid %L måste vara en utökning av \"%s\"" +msgstr "Härledd typ â€%s†vid %L mÃ¥ste vara en utökning av â€%sâ€" #: fortran/resolve.c:8222 #, gcc-internal-format, gfc-internal-format @@ -41565,84 +41568,84 @@ msgstr "" #: fortran/resolve.c:8341 #, gcc-internal-format, gfc-internal-format msgid "Data transfer element at %L cannot be polymorphic unless it is processed by a defined input/output procedure" -msgstr "Dataöverföringselementet vid %L kan inte vara polymorft om det inte behandlas av en definierad input/output-procedur" +msgstr "Dataöverföringselementet vid %L kan inte vara polymorft om det inte behandlas av en definierad input/output-procedur" #: fortran/resolve.c:8353 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Data transfer element at %L cannot have POINTER components unless it is processed by a defined input/output procedure" -msgstr "Dataöverföringselementet vid %L kan inte vara polymorft om det inte behandlas av en definierad input/output-procedur" +msgstr "Dataöverföringselementet vid %L kan inte vara polymorft om det inte behandlas av en definierad input/output-procedur" #: fortran/resolve.c:8362 #, gcc-internal-format, gfc-internal-format msgid "Data transfer element at %L cannot have procedure pointer components" -msgstr "Dataöverföringselement vid %L får inte ha procedurpekarkomponenter" +msgstr "Dataöverföringselement vid %L fÃ¥r inte ha procedurpekarkomponenter" #: fortran/resolve.c:8369 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Data transfer element at %L cannot have ALLOCATABLE components unless it is processed by a defined input/output procedure" -msgstr "Dataöverföringselementet vid %L kan inte vara polymorft om det inte behandlas av en definierad input/output-procedur" +msgstr "Dataöverföringselementet vid %L kan inte vara polymorft om det inte behandlas av en definierad input/output-procedur" #: fortran/resolve.c:8377 #, gcc-internal-format, gfc-internal-format msgid "Data transfer element at %L cannot have PRIVATE components" -msgstr "Dataöverföringselement vid %L får inte ha PRIVATE-komponenter" +msgstr "Dataöverföringselement vid %L fÃ¥r inte ha PRIVATE-komponenter" #: fortran/resolve.c:8386 #, gcc-internal-format, gfc-internal-format msgid "Data transfer element at %L cannot be a full reference to an assumed-size array" -msgstr "Dataöverföringselement vid %L får inte vara en full referens till en vektor med förmodad storlek" +msgstr "Dataöverföringselement vid %L fÃ¥r inte vara en full referens till en vektor med förmodad storlek" #: fortran/resolve.c:8436 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Lock variable at %L must be a scalar of type LOCK_TYPE" -msgstr "Statvariabel vid %L måste vara en INTEGER-variabel" +msgstr "Statvariabel vid %L mÃ¥ste vara en INTEGER-variabel" #: fortran/resolve.c:8443 fortran/resolve.c:8507 #, gcc-internal-format, gfc-internal-format msgid "STAT= argument at %L must be a scalar INTEGER variable" -msgstr "STAT=-argumentet vid %L måste vara en skalär INTEGER-variabel" +msgstr "STAT=-argumentet vid %L mÃ¥ste vara en skalär INTEGER-variabel" #: fortran/resolve.c:8455 fortran/resolve.c:8514 #, gcc-internal-format, gfc-internal-format msgid "ERRMSG= argument at %L must be a scalar CHARACTER variable" -msgstr "ERRMSG=-variabeln vid %L måste vara en skalär CHARACTER-variabel" +msgstr "ERRMSG=-variabeln vid %L mÃ¥ste vara en skalär CHARACTER-variabel" #: fortran/resolve.c:8467 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL variable" -msgstr "STAT=-argumentet vid %L måste vara en skalär INTEGER-variabel" +msgstr "STAT=-argumentet vid %L mÃ¥ste vara en skalär INTEGER-variabel" #: fortran/resolve.c:8484 #, gcc-internal-format, gfc-internal-format msgid "Imageset argument at %L must be a scalar or rank-1 INTEGER expression" -msgstr "Bildmängdsargument vid %L måste vara ett skalärt eller ordning-1-uttryck" +msgstr "Bildmängdsargument vid %L mÃ¥ste vara ett skalärt eller ordning-1-uttryck" #: fortran/resolve.c:8488 fortran/resolve.c:8498 #, gcc-internal-format, gfc-internal-format msgid "Imageset argument at %L must between 1 and num_images()" -msgstr "Bildmängdsargument vid %L måste vara mellan 1 och num_images()" +msgstr "Bildmängdsargument vid %L mÃ¥ste vara mellan 1 och num_images()" #: fortran/resolve.c:8541 #, gcc-internal-format, gfc-internal-format msgid "Statement at %L is not a valid branch target statement for the branch statement at %L" -msgstr "Sats vid %L är inte en giltig grenmålssats för grensatsen vid %L" +msgstr "Sats vid %L är inte en giltig grenmÃ¥lssats för grensatsen vid %L" #: fortran/resolve.c:8550 #, gcc-internal-format, gfc-internal-format msgid "Branch at %L may result in an infinite loop" -msgstr "Gren vid %L kan orsaka en oändlig slinga" +msgstr "Gren vid %L kan orsaka en oändlig slinga" #. Note: A label at END CRITICAL does not leave the CRITICAL #. construct as END CRITICAL is still part of it. #: fortran/resolve.c:8567 fortran/resolve.c:8590 #, gcc-internal-format, gfc-internal-format msgid "GOTO statement at %L leaves CRITICAL construct for label at %L" -msgstr "GOTO-sats vid %L lämnar CRITICAL-konstruktion för etikett vid %L" +msgstr "GOTO-sats vid %L lämnar CRITICAL-konstruktion för etikett vid %L" #: fortran/resolve.c:8571 fortran/resolve.c:8596 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "GOTO statement at %L leaves DO CONCURRENT construct for label at %L" -msgstr "GOTO-sats vid %L lämnar CRITICAL-konstruktion för etikett vid %L" +msgstr "GOTO-sats vid %L lämnar CRITICAL-konstruktion för etikett vid %L" #. The label is not in an enclosing block, so illegal. This was #. allowed in Fortran 66, so we allow it as extension. No @@ -41650,7 +41653,7 @@ msgstr "GOTO-sats vid %L lämnar CRITICAL-konstruktion för etikett vid %L" #: fortran/resolve.c:8611 #, gcc-internal-format, gfc-internal-format msgid "Label at %L is not in the same block as the GOTO statement at %L" -msgstr "Etiketten vid %L är inte i samma block som GOTO-satsen vid %L" +msgstr "Etiketten vid %L är inte i samma block som GOTO-satsen vid %L" #: fortran/resolve.c:8683 #, gcc-internal-format, gfc-internal-format @@ -41660,17 +41663,17 @@ msgstr "WHERE-mask vid %L har inkonsistent form" #: fortran/resolve.c:8699 #, gcc-internal-format, gfc-internal-format msgid "WHERE assignment target at %L has inconsistent shape" -msgstr "WHERE-tilldelningsmål vid %L har inkonsistent form" +msgstr "WHERE-tilldelningsmÃ¥l vid %L har inkonsistent form" #: fortran/resolve.c:8707 fortran/resolve.c:8794 #, gcc-internal-format, gfc-internal-format msgid "Non-ELEMENTAL user-defined assignment in WHERE at %L" -msgstr "Ej ELEMENTAL användardefinierad tilldelning i WHERE vid %L" +msgstr "Ej ELEMENTAL användardefinierad tilldelning i WHERE vid %L" #: fortran/resolve.c:8717 fortran/resolve.c:8804 #, gcc-internal-format, gfc-internal-format msgid "Unsupported statement inside WHERE at %L" -msgstr "Ej stödd sats inuti WHERE vid %L" +msgstr "Ej stödd sats inuti WHERE vid %L" #: fortran/resolve.c:8748 #, gcc-internal-format, gfc-internal-format @@ -41680,7 +41683,7 @@ msgstr "Tilldelning till en FORALL-indexvariabel vid %L" #: fortran/resolve.c:8757 #, gcc-internal-format, gfc-internal-format msgid "The FORALL with index '%s' is not used on the left side of the assignment at %L and so might cause multiple assignment to this object" -msgstr "FORALL med index \"%s\" används inte på vänster sida av en tilldelning vid %L och kan därför orsaka multipla tilldelningar till detta objekt" +msgstr "FORALL med index â€%s†används inte pÃ¥ vänster sida av en tilldelning vid %L och kan därför orsaka multipla tilldelningar till detta objekt" #: fortran/resolve.c:8926 #, gcc-internal-format, gfc-internal-format @@ -41690,7 +41693,7 @@ msgstr "En yttre FORALL-konstruktion har redan ett index med detta namn %L" #: fortran/resolve.c:9006 #, gcc-internal-format, gfc-internal-format msgid "WHERE/ELSEWHERE clause at %L requires a LOGICAL array" -msgstr "WHERE/ELSEWHERE-klausul vid %L kräver en LOGICAL-vektor" +msgstr "WHERE/ELSEWHERE-klausul vid %L kräver en LOGICAL-vektor" #: fortran/resolve.c:9160 #, gcc-internal-format, gfc-internal-format @@ -41700,12 +41703,12 @@ msgstr "CHARACTER-uttryck kommer att huggas av i tilldelning (%d/%d) vid %L" #: fortran/resolve.c:9192 #, gcc-internal-format, gfc-internal-format msgid "Coindexed expression at %L is assigned to a derived type variable with a POINTER component in a PURE procedure" -msgstr "Co-indexerat uttryck vid %L är tilldelat till en härledd typvariabel med en POINTER-komponent i en PURE-procedur" +msgstr "Co-indexerat uttryck vid %L är tilldelat till en härledd typvariabel med en POINTER-komponent i en PURE-procedur" #: fortran/resolve.c:9197 #, gcc-internal-format, gfc-internal-format msgid "The impure variable at %L is assigned to a derived type variable with a POINTER component in a PURE procedure (12.6)" -msgstr "Den orena variabeln vid %L är tilldelad till en härledd typvariabel med en POINTER-komponent i en PURE-procedur (12.6)" +msgstr "Den orena variabeln vid %L är tilldelad till en härledd typvariabel med en POINTER-komponent i en PURE-procedur (12.6)" #: fortran/resolve.c:9207 #, gcc-internal-format, gfc-internal-format @@ -41720,503 +41723,503 @@ msgstr "" #: fortran/resolve.c:9247 #, gcc-internal-format, gfc-internal-format msgid "Coindexed variable must not be have an allocatable ultimate component in assignment at %L" -msgstr "Co-indexerad variabel får inte ha en allokerbar yttersta komponent i tilldelningen vid %L" +msgstr "Co-indexerad variabel fÃ¥r inte ha en allokerbar yttersta komponent i tilldelningen vid %L" #: fortran/resolve.c:9382 #, gcc-internal-format, gfc-internal-format msgid "ASSIGNED GOTO statement at %L requires an INTEGER variable" -msgstr "ASSIGNED GOTO-sats vid %L kräver en INTEGER-variabel" +msgstr "ASSIGNED GOTO-sats vid %L kräver en INTEGER-variabel" #: fortran/resolve.c:9385 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' has not been assigned a target label at %L" -msgstr "Variabeln \"%s\" har inte tilldelats någon måletikett vid %L" +msgstr "Variabeln â€%s†har inte tilldelats nÃ¥gon mÃ¥letikett vid %L" #: fortran/resolve.c:9396 #, gcc-internal-format, gfc-internal-format msgid "Alternate RETURN statement at %L requires a SCALAR-INTEGER return specifier" -msgstr "Alternativ RETURN-sats vid %L kräver en SCALAR-INTEGER-retuspecificerare" +msgstr "Alternativ RETURN-sats vid %L kräver en SCALAR-INTEGER-retuspecificerare" #: fortran/resolve.c:9431 #, gcc-internal-format, gfc-internal-format msgid "ASSIGN statement at %L requires a scalar default INTEGER variable" -msgstr "ASSIGN-sats vid %L kräver en skalär standard-INTEGER-variabel" +msgstr "ASSIGN-sats vid %L kräver en skalär standard-INTEGER-variabel" #: fortran/resolve.c:9464 #, gcc-internal-format, gfc-internal-format msgid "Arithmetic IF statement at %L requires a numeric expression" -msgstr "Aritmetisk IF-sats vid %L kräver ett numeriskt uttryck" +msgstr "Aritmetisk IF-sats vid %L kräver ett numeriskt uttryck" #: fortran/resolve.c:9523 #, gcc-internal-format, gfc-internal-format msgid "Exit condition of DO WHILE loop at %L must be a scalar LOGICAL expression" -msgstr "Avslutsvillkor i DO WHILE-slinga vid %L måste vara ett skalärt LOGICAL-uttryck" +msgstr "Avslutsvillkor i DO WHILE-slinga vid %L mÃ¥ste vara ett skalärt LOGICAL-uttryck" #: fortran/resolve.c:9607 #, gcc-internal-format, gfc-internal-format msgid "FORALL mask clause at %L requires a scalar LOGICAL expression" -msgstr "FORALL-maskklausul vid %L kräver ett skalärt LOGICAL-uttryck" +msgstr "FORALL-maskklausul vid %L kräver ett skalärt LOGICAL-uttryck" #: fortran/resolve.c:9687 fortran/resolve.c:9743 #, gcc-internal-format, gfc-internal-format msgid "Binding label '%s' for common block '%s' at %L collides with the global entity '%s' at %L" -msgstr "Bindande av etikett \"%s\" för common-block \"%s\" vid %L kolliderar med den globala entiteten \"%s\" vid %L" +msgstr "Bindande av etikett â€%s†för common-block â€%s†vid %L kolliderar med den globala entiteten â€%s†vid %L" #. Common block names match but binding labels do not. #: fortran/resolve.c:9708 #, gcc-internal-format, gfc-internal-format msgid "Binding label '%s' for common block '%s' at %L does not match the binding label '%s' for common block '%s' at %L" -msgstr "Bindning av etikett \"%s\" för common-block \"%s\" vid %L stämmer inte överens med bindningen av etikett \"%s\" för common-block \"%s\" vid %L" +msgstr "Bindning av etikett â€%s†för common-block â€%s†vid %L stämmer inte överens med bindningen av etikett â€%s†för common-block â€%s†vid %L" #: fortran/resolve.c:9755 #, gcc-internal-format, gfc-internal-format msgid "Binding label '%s' for common block '%s' at %L collides with global entity '%s' at %L" -msgstr "Bindning av etikett \"%s\" för common-block \"%s\" vid %L kolliderar med global entitet \"%s\" vid %L" +msgstr "Bindning av etikett â€%s†för common-block â€%s†vid %L kolliderar med global entitet â€%s†vid %L" #. Make sure global procedures don't collide with anything. #: fortran/resolve.c:9807 #, gcc-internal-format, gfc-internal-format msgid "Binding label '%s' at %L collides with the global entity '%s' at %L" -msgstr "Bindning av etikett \"%s\" vid %L kolliderar med den globala entiteten \"%s\" vid %L" +msgstr "Bindning av etikett â€%s†vid %L kolliderar med den globala entiteten â€%s†vid %L" #. Make sure procedures in interface bodies don't collide. #: fortran/resolve.c:9820 #, gcc-internal-format, gfc-internal-format msgid "Binding label '%s' in interface body at %L collides with the global entity '%s' at %L" -msgstr "Bindning av etikett \"%s\" i gränssnittskropp vid %L kolliderar med den globala entiteten \"%s\" vid %L" +msgstr "Bindning av etikett â€%s†i gränssnittskropp vid %L kolliderar med den globala entiteten â€%s†vid %L" #: fortran/resolve.c:9833 #, gcc-internal-format, gfc-internal-format msgid "Binding label '%s' at %L collides with global entity '%s' at %L" -msgstr "Bindning av etikett \"%s\" vid %L kolliderar med global entitet \"%s\" vid %L" +msgstr "Bindning av etikett â€%s†vid %L kolliderar med global entitet â€%s†vid %L" #: fortran/resolve.c:9912 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER variable at %L has negative length %d, the length has been set to zero" -msgstr "CHARACTER-variabel vid %L har negativ längd %d, längden har satts till noll" +msgstr "CHARACTER-variabel vid %L har negativ längd %d, längden har satts till noll" #: fortran/resolve.c:9925 #, gcc-internal-format, gfc-internal-format msgid "String length at %L is too large" -msgstr "Stränglängden vid %L är för stor" +msgstr "Stränglängden vid %L är för stor" #: fortran/resolve.c:10262 #, gcc-internal-format, gfc-internal-format msgid "Allocatable array '%s' at %L must have a deferred shape" -msgstr "Allokerbar vektor \"%s\" vid %L måste ha en fördröjd form" +msgstr "Allokerbar vektor â€%s†vid %L mÃ¥ste ha en fördröjd form" #: fortran/resolve.c:10266 #, gcc-internal-format, gfc-internal-format msgid "Scalar object '%s' at %L may not be ALLOCATABLE" -msgstr "Skalärt objekt \"%s\" vid %L får inte vara ALLOCATABLE" +msgstr "Skalärt objekt â€%s†vid %L fÃ¥r inte vara ALLOCATABLE" #: fortran/resolve.c:10274 #, gcc-internal-format, gfc-internal-format msgid "Array pointer '%s' at %L must have a deferred shape" -msgstr "Vektorpekare \"%s\" vid %L måste ha en fördröjd form" +msgstr "Vektorpekare â€%s†vid %L mÃ¥ste ha en fördröjd form" #: fortran/resolve.c:10284 #, gcc-internal-format, gfc-internal-format msgid "Array '%s' at %L cannot have a deferred shape" -msgstr "Vektor \"%s\" vid %L kan inte ha en fördröjd form" +msgstr "Vektor â€%s†vid %L kan inte ha en fördröjd form" #: fortran/resolve.c:10297 #, gcc-internal-format, gfc-internal-format msgid "Type '%s' of CLASS variable '%s' at %L is not extensible" -msgstr "Typen \"%s\" på CLASS-variabeln \"%s\" vid %L är inte utvidgningsbar" +msgstr "Typen â€%s†pÃ¥ CLASS-variabeln â€%s†vid %L är inte utvidgningsbar" #: fortran/resolve.c:10309 #, gcc-internal-format, gfc-internal-format msgid "CLASS variable '%s' at %L must be dummy, allocatable or pointer" -msgstr "CLASS-variabel \"%s\" vid %L måste vara en atrapp, allokerbar eller pekare" +msgstr "CLASS-variabel â€%s†vid %L mÃ¥ste vara en atrapp, allokerbar eller pekare" #: fortran/resolve.c:10340 #, gcc-internal-format, gfc-internal-format msgid "The type '%s' cannot be host associated at %L because it is blocked by an incompatible object of the same name declared at %L" -msgstr "Typen \"%s\" kan inte vara värdassocierad vid %L för att den blockeras av ett inkompatibelt objekt med samma namn deklarerat vid %L" +msgstr "Typen â€%s†kan inte vara värdassocierad vid %L för att den blockeras av ett inkompatibelt objekt med samma namn deklarerat vid %L" #: fortran/resolve.c:10362 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2008: Implied SAVE for module variable '%s' at %L, needed due to the default initialization" -msgstr "Fortran 2008: Implicerad SAVE för modulvariabel \"%s\" vid %L, behövs på grund av standardinitieringar" +msgstr "Fortran 2008: Implicerad SAVE för modulvariabel â€%s†vid %L, behövs pÃ¥ grund av standardinitieringar" #. The shape of a main program or module array needs to be #. constant. #: fortran/resolve.c:10409 #, gcc-internal-format, gfc-internal-format msgid "The module or main program array '%s' at %L must have constant shape" -msgstr "Modul- eller huvudprogramvektorn \"%s\" vid %L måste ha konstant form" +msgstr "Modul- eller huvudprogramvektorn â€%s†vid %L mÃ¥ste ha konstant form" #: fortran/resolve.c:10418 #, gcc-internal-format, gfc-internal-format msgid "Entity '%s' at %L has a deferred type parameter and requires either the pointer or allocatable attribute" -msgstr "Enheten \"%s\" vid %L har en fördröjd typparameter och kräver antingen attributet pointer eller allocatable" +msgstr "Enheten â€%s†vid %L har en fördröjd typparameter och kräver antingen attributet pointer eller allocatable" #: fortran/resolve.c:10432 #, gcc-internal-format, gfc-internal-format msgid "Entity with assumed character length at %L must be a dummy argument or a PARAMETER" -msgstr "Entitet med antagen teckenlängd vid %L måste vara ett attrappargument eller en PARAMETER" +msgstr "Entitet med antagen teckenlängd vid %L mÃ¥ste vara ett attrappargument eller en PARAMETER" #: fortran/resolve.c:10451 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L must have constant character length in this context" -msgstr "\"%s\" vid %L måste ha konstant teckenlängd i detta sammanhang" +msgstr "â€%s†vid %L mÃ¥ste ha konstant teckenlängd i detta sammanhang" #: fortran/resolve.c:10457 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "COMMON variable '%s' at %L must have constant character length" -msgstr "\"%s\" vid %L måste ha konstant teckenlängd i detta sammanhang" +msgstr "â€%s†vid %L mÃ¥ste ha konstant teckenlängd i detta sammanhang" #: fortran/resolve.c:10502 #, gcc-internal-format, gfc-internal-format msgid "Allocatable '%s' at %L cannot have an initializer" -msgstr "Allokerbar \"%s\" vid %L kan inte ha en initierare" +msgstr "Allokerbar â€%s†vid %L kan inte ha en initierare" #: fortran/resolve.c:10505 #, gcc-internal-format, gfc-internal-format msgid "External '%s' at %L cannot have an initializer" -msgstr "Extern \"%s\" vid %L kan inte ha en initierare" +msgstr "Extern â€%s†vid %L kan inte ha en initierare" #: fortran/resolve.c:10509 #, gcc-internal-format, gfc-internal-format msgid "Dummy '%s' at %L cannot have an initializer" -msgstr "Attrapp-\"%s\" vid %L kan inte ha en initierare" +msgstr "Attrapp-â€%s†vid %L kan inte ha en initierare" #: fortran/resolve.c:10512 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic '%s' at %L cannot have an initializer" -msgstr "Inbyggd \"%s\" vid %L kan inte ha en initierare" +msgstr "Inbyggd â€%s†vid %L kan inte ha en initierare" #: fortran/resolve.c:10515 #, gcc-internal-format, gfc-internal-format msgid "Function result '%s' at %L cannot have an initializer" -msgstr "Funktionsresultat \"%s\" vid %L kan inte ha en initierare" +msgstr "Funktionsresultat â€%s†vid %L kan inte ha en initierare" #: fortran/resolve.c:10518 #, gcc-internal-format, gfc-internal-format msgid "Automatic array '%s' at %L cannot have an initializer" -msgstr "Automatisk vektor \"%s\" vid %L kan inte ha en initierare" +msgstr "Automatisk vektor â€%s†vid %L kan inte ha en initierare" #: fortran/resolve.c:10555 #, gcc-internal-format, gfc-internal-format msgid "Character-valued statement function '%s' at %L must have constant length" -msgstr "Teckenvärd satsfunktion \"%s\" vid %L måste ha konstant längd" +msgstr "Teckenvärd satsfunktion â€%s†vid %L mÃ¥ste ha konstant längd" #: fortran/resolve.c:10577 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: '%s' is of a PRIVATE type and cannot be a dummy argument of '%s', which is PUBLIC at %L" -msgstr "Fortran 2003: \"%s\" är av en PRIVATE-typ och kan inte vara ett attrappargument till \"%s\", som är PUBLIC vid %L" +msgstr "Fortran 2003: â€%s†är av en PRIVATE-typ och kan inte vara ett attrappargument till â€%sâ€, som är PUBLIC vid %L" #: fortran/resolve.c:10599 fortran/resolve.c:10623 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Procedure '%s' in PUBLIC interface '%s' at %L takes dummy arguments of '%s' which is PRIVATE" -msgstr "Fortran 2003: Procedur \"%s\" i PUBLIC-gränssnitt \"%s\" vid %L tar attrappargument för \"%s\" som är PRIVATE" +msgstr "Fortran 2003: Procedur â€%s†i PUBLIC-gränssnitt â€%s†vid %L tar attrappargument för â€%s†som är PRIVATE" #: fortran/resolve.c:10641 #, gcc-internal-format, gfc-internal-format msgid "Function '%s' at %L cannot have an initializer" -msgstr "Funktion \"%s\" vid %L kan inte ha en initierare" +msgstr "Funktion â€%s†vid %L kan inte ha en initierare" #: fortran/resolve.c:10650 #, gcc-internal-format, gfc-internal-format msgid "External object '%s' at %L may not have an initializer" -msgstr "Externt objekt \"%s\" vid %L kan inte ha en initierare" +msgstr "Externt objekt â€%s†vid %L kan inte ha en initierare" #: fortran/resolve.c:10658 #, gcc-internal-format, gfc-internal-format msgid "ELEMENTAL function '%s' at %L must have a scalar result" -msgstr "ELEMENTAL-funktion \"%s\" vid %L måste ha ett skalärt resultat" +msgstr "ELEMENTAL-funktion â€%s†vid %L mÃ¥ste ha ett skalärt resultat" #: fortran/resolve.c:10668 #, gcc-internal-format, gfc-internal-format msgid "Statement function '%s' at %L may not have pointer or allocatable attribute" -msgstr "Satsfunktionen \"%s\" vid %L får inte ha attributet pointer eller allocatable" +msgstr "Satsfunktionen â€%s†vid %L fÃ¥r inte ha attributet pointer eller allocatable" #: fortran/resolve.c:10687 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER(*) function '%s' at %L cannot be array-valued" -msgstr "CHARACTER(*)-funktion \"%s\" vid %L kan inte ha vektorvärde" +msgstr "CHARACTER(*)-funktion â€%s†vid %L kan inte ha vektorvärde" #: fortran/resolve.c:10691 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER(*) function '%s' at %L cannot be pointer-valued" -msgstr "CHARACTER(*)-funktion \"%s\" vid %L kan inte ha pekarvärde" +msgstr "CHARACTER(*)-funktion â€%s†vid %L kan inte ha pekarvärde" #: fortran/resolve.c:10695 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER(*) function '%s' at %L cannot be pure" -msgstr "CHARACTER(*)-funktion \"%s\" vid %L kan inte vara pure" +msgstr "CHARACTER(*)-funktion â€%s†vid %L kan inte vara pure" #: fortran/resolve.c:10699 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER(*) function '%s' at %L cannot be recursive" -msgstr "CHARACTER(*)-funktion \"%s\" vid %L kan inte vara rekursiv" +msgstr "CHARACTER(*)-funktion â€%s†vid %L kan inte vara rekursiv" #: fortran/resolve.c:10711 #, gcc-internal-format, gfc-internal-format msgid "Obsolescent feature: CHARACTER(*) function '%s' at %L" -msgstr "Förlegad funktion: CHARACTER(*)-funktion \"%s\" vid %L" +msgstr "Förlegad funktion: CHARACTER(*)-funktion â€%s†vid %L" #: fortran/resolve.c:10766 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE attribute conflicts with SAVE attribute in '%s' at %L" -msgstr "PROCEDURE-attribut i konflikt med SAVE-attribut i \"%s\" vid %L" +msgstr "PROCEDURE-attribut i konflikt med SAVE-attribut i â€%s†vid %L" #: fortran/resolve.c:10772 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE attribute conflicts with INTENT attribute in '%s' at %L" -msgstr "PROCEDURE-attribut i konflikt med INTENT-attribut i \"%s\" vid %L" +msgstr "PROCEDURE-attribut i konflikt med INTENT-attribut i â€%s†vid %L" #: fortran/resolve.c:10778 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE attribute conflicts with RESULT attribute in '%s' at %L" -msgstr "PROCEDURE-attribut i konflikt med RESULT-attribut i \"%s\" vid %L" +msgstr "PROCEDURE-attribut i konflikt med RESULT-attribut i â€%s†vid %L" #: fortran/resolve.c:10786 #, gcc-internal-format, gfc-internal-format msgid "EXTERNAL attribute conflicts with FUNCTION attribute in '%s' at %L" -msgstr "EXTERNAL-attribut i konflikt med FUNCTION-attribut i \"%s\" vid %L" +msgstr "EXTERNAL-attribut i konflikt med FUNCTION-attribut i â€%s†vid %L" #: fortran/resolve.c:10792 #, gcc-internal-format, gfc-internal-format msgid "Procedure pointer result '%s' at %L is missing the pointer attribute" -msgstr "Procedurpekarresultat \"%s\" vid %L saknar pekarattributet" +msgstr "Procedurpekarresultat â€%s†vid %L saknar pekarattributet" #: fortran/resolve.c:10838 #, gcc-internal-format, gfc-internal-format msgid "FINAL procedure '%s' at %L is not a SUBROUTINE" -msgstr "FINAL-procedur \"%s\" vid %L är inte en SUBROUTINE" +msgstr "FINAL-procedur â€%s†vid %L är inte en SUBROUTINE" #: fortran/resolve.c:10846 #, gcc-internal-format, gfc-internal-format msgid "FINAL procedure at %L must have exactly one argument" -msgstr "FINAL-procedur vid %L måste ha precis ett argument" +msgstr "FINAL-procedur vid %L mÃ¥ste ha precis ett argument" #: fortran/resolve.c:10855 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must be of type '%s'" -msgstr "Argument till FINAL-procedur vid %L måste ha typen \"%s\"" +msgstr "Argument till FINAL-procedur vid %L mÃ¥ste ha typen â€%sâ€" #: fortran/resolve.c:10863 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be a POINTER" -msgstr "Argument till FINAL-procedur vid %L får inte vara en POINTER" +msgstr "Argument till FINAL-procedur vid %L fÃ¥r inte vara en POINTER" #: fortran/resolve.c:10869 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be ALLOCATABLE" -msgstr "Argument till FINAL-procedur vid %L får inte vara ALLOCATABLE" +msgstr "Argument till FINAL-procedur vid %L fÃ¥r inte vara ALLOCATABLE" #: fortran/resolve.c:10875 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be OPTIONAL" -msgstr "Argument till FINAL-procedur vid %L får inte vara OPTIONAL" +msgstr "Argument till FINAL-procedur vid %L fÃ¥r inte vara OPTIONAL" #: fortran/resolve.c:10883 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be INTENT(OUT)" -msgstr "Argument till FINAL-procedur vid %L får inte vara INTENT(OUT)" +msgstr "Argument till FINAL-procedur vid %L fÃ¥r inte vara INTENT(OUT)" #: fortran/resolve.c:10891 #, gcc-internal-format, gfc-internal-format msgid "Non-scalar FINAL procedure at %L should have assumed shape argument" -msgstr "Ickeskalär FINAL-procedur vid %L skulle ha argument med förmodad form" +msgstr "Ickeskalär FINAL-procedur vid %L skulle ha argument med förmodad form" #: fortran/resolve.c:10910 #, gcc-internal-format, gfc-internal-format msgid "FINAL procedure '%s' declared at %L has the same rank (%d) as '%s'" -msgstr "FINAL-procedur \"%s\" deklarerad vid %L har samma ordning (%d) som \"%s\"" +msgstr "FINAL-procedur â€%s†deklarerad vid %L har samma ordning (%d) som â€%sâ€" #: fortran/resolve.c:10943 #, gcc-internal-format, gfc-internal-format msgid "Only array FINAL procedures declared for derived type '%s' defined at %L, suggest also scalar one" -msgstr "Endast vektor-FINAL-procedurer deklarerade för den härledda typen \"%s\" definierade vid %L, föreslår även en skalär" +msgstr "Endast vektor-FINAL-procedurer deklarerade för den härledda typen â€%s†definierade vid %L, föreslÃ¥r även en skalär" #. TODO: Remove this error when finalization is finished. #: fortran/resolve.c:10948 #, gcc-internal-format, gfc-internal-format msgid "Finalization at %L is not yet implemented" -msgstr "Avslutningen vid %L är inte implementerad ännu" +msgstr "Avslutningen vid %L är inte implementerad ännu" #: fortran/resolve.c:10978 #, gcc-internal-format, gfc-internal-format msgid "'%s' and '%s' can't be mixed FUNCTION/SUBROUTINE for GENERIC '%s' at %L" -msgstr "\"%s\" och \"%s\" kan inte blandad FUNCTION/SUBROUTINE för GENERIC \"%s\" vid %L" +msgstr "â€%s†och â€%s†kan inte blandad FUNCTION/SUBROUTINE för GENERIC â€%s†vid %L" #: fortran/resolve.c:10987 #, gcc-internal-format, gfc-internal-format msgid "'%s' and '%s' for GENERIC '%s' at %L are ambiguous" -msgstr "\"%s\" och \"%s\" för GENERIC \"%s\" vid %L är tvetydiga" +msgstr "â€%s†och â€%s†för GENERIC â€%s†vid %L är tvetydiga" #: fortran/resolve.c:11046 #, gcc-internal-format, gfc-internal-format msgid "Undefined specific binding '%s' as target of GENERIC '%s' at %L" -msgstr "Odefinierad specifik bindning \"%s\" som mål för GENERIC \"%s\" vid %L" +msgstr "Odefinierad specifik bindning â€%s†som mÃ¥l för GENERIC â€%s†vid %L" #: fortran/resolve.c:11058 #, gcc-internal-format, gfc-internal-format msgid "GENERIC '%s' at %L must target a specific binding, '%s' is GENERIC, too" -msgstr "GENERIC \"%s\" vid %L måste ha som mål en specifik bindning, \"%s\" är också GENERIC" +msgstr "GENERIC â€%s†vid %L mÃ¥ste ha som mÃ¥l en specifik bindning, â€%s†är ocksÃ¥ GENERIC" #: fortran/resolve.c:11088 #, gcc-internal-format, gfc-internal-format msgid "GENERIC '%s' at %L can't overwrite specific binding with the same name" -msgstr "GENERIC \"%s\" vid %L kan inte åsidosätta en specifik bindning med samma namn" +msgstr "GENERIC â€%s†vid %L kan inte Ã¥sidosätta en specifik bindning med samma namn" #: fortran/resolve.c:11144 #, gcc-internal-format, gfc-internal-format msgid "Type-bound operator at %L can't be NOPASS" -msgstr "Typgränsoperator vid %L kan inte vara NOPASS" +msgstr "Typgränsoperator vid %L kan inte vara NOPASS" #: fortran/resolve.c:11307 #, gcc-internal-format, gfc-internal-format msgid "'%s' must be a module procedure or an external procedure with an explicit interface at %L" -msgstr "\"%s\" måste vara en modulprocedur eller en extern procedur med ett explicit gränssnitt vid %L" +msgstr "â€%s†mÃ¥ste vara en modulprocedur eller en extern procedur med ett explicit gränssnitt vid %L" #: fortran/resolve.c:11344 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' with PASS(%s) at %L has no argument '%s'" -msgstr "Proceduren \"%s\" med PASS(%s) vid %L har inget argument \"%s\"" +msgstr "Proceduren â€%s†med PASS(%s) vid %L har inget argument â€%sâ€" #: fortran/resolve.c:11358 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' with PASS at %L must have at least one argument" -msgstr "Procedur \"%s\" med PASS vid %L måste ha åtminstone ett argument" +msgstr "Procedur â€%s†med PASS vid %L mÃ¥ste ha Ã¥tminstone ett argument" #: fortran/resolve.c:11372 fortran/resolve.c:11835 #, gcc-internal-format, gfc-internal-format msgid "Non-polymorphic passed-object dummy argument of '%s' at %L" -msgstr "Ickepolymorfa attrappargument för pass-objekt till \"%s\" vid %L" +msgstr "Ickepolymorfa attrappargument för pass-objekt till â€%s†vid %L" #: fortran/resolve.c:11380 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of '%s' with PASS(%s) at %L must be of the derived-type '%s'" -msgstr "Argument \"%s\" till \"%s\" med PASS(%s) vid %L måste ha den härledda typen \"%s\"" +msgstr "Argument â€%s†till â€%s†med PASS(%s) vid %L mÃ¥ste ha den härledda typen â€%sâ€" #: fortran/resolve.c:11389 #, gcc-internal-format, gfc-internal-format msgid "Passed-object dummy argument of '%s' at %L must be scalar" -msgstr "Skickat objekt-attrappargument till \"%s\" vid %L måste vara skalärt" +msgstr "Skickat objekt-attrappargument till â€%s†vid %L mÃ¥ste vara skalärt" #: fortran/resolve.c:11395 #, gcc-internal-format, gfc-internal-format msgid "Passed-object dummy argument of '%s' at %L must not be ALLOCATABLE" -msgstr "Skickat objekt-attrappargument till \"%s\" vid %L får inte vara ALLOCATABLE" +msgstr "Skickat objekt-attrappargument till â€%s†vid %L fÃ¥r inte vara ALLOCATABLE" #: fortran/resolve.c:11401 #, gcc-internal-format, gfc-internal-format msgid "Passed-object dummy argument of '%s' at %L must not be POINTER" -msgstr "Skickat objekt-atrappargument till \"%s\" vid %L får inte vara POINTER" +msgstr "Skickat objekt-atrappargument till â€%s†vid %L fÃ¥r inte vara POINTER" #: fortran/resolve.c:11430 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %L has the same name as a component of '%s'" -msgstr "Procedur \"%s\" vid %L har samma namn som en komponent i \"%s\"" +msgstr "Procedur â€%s†vid %L har samma namn som en komponent i â€%sâ€" #: fortran/resolve.c:11439 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %L has the same name as an inherited component of '%s'" -msgstr "Proceduren \"%s\" vid %L har samma namn som den ärvd komponent i \"%s\"" +msgstr "Proceduren â€%s†vid %L har samma namn som den ärvd komponent i â€%sâ€" #: fortran/resolve.c:11534 #, gcc-internal-format, gfc-internal-format msgid "Derived-type '%s' declared at %L must be ABSTRACT because '%s' is DEFERRED and not overridden" -msgstr "Härledd typ \"%s\" deklarerad vid %L måste vara ABSTRACT för att \"%s\" är DEFERRED och inte åsidosatt" +msgstr "Härledd typ â€%s†deklarerad vid %L mÃ¥ste vara ABSTRACT för att â€%s†är DEFERRED och inte Ã¥sidosatt" #: fortran/resolve.c:11592 #, gcc-internal-format, gfc-internal-format msgid "As extending type '%s' at %L has a coarray component, parent type '%s' shall also have one" -msgstr "Eftersom utvidgningen av \"%s\" vid %L har en co-vektorkomponent, skall föräldratypen \"%s\" också ha en" +msgstr "Eftersom utvidgningen av â€%s†vid %L har en co-vektorkomponent, skall föräldratypen â€%s†ocksÃ¥ ha en" #: fortran/resolve.c:11605 #, gcc-internal-format, gfc-internal-format msgid "Non-extensible derived-type '%s' at %L must not be ABSTRACT" -msgstr "Ej utvidgningsbar härledd typ \"%s\" vid %L får inte vara ABSTRACT" +msgstr "Ej utvidgningsbar härledd typ â€%s†vid %L fÃ¥r inte vara ABSTRACT" #: fortran/resolve.c:11618 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Deferred-length character component '%s' at %L is not yet supported" -msgstr "Fördröjd typparameter stödjs inte ännu" +msgstr "Fördröjd typparameter stödjs inte ännu" #: fortran/resolve.c:11628 #, gcc-internal-format, gfc-internal-format msgid "Coarray component '%s' at %L must be allocatable with deferred shape" -msgstr "Co-vektorkomponent \"%s\" vid %L måste vara allokerbar med fördröjd form" +msgstr "Co-vektorkomponent â€%s†vid %L mÃ¥ste vara allokerbar med fördröjd form" #: fortran/resolve.c:11637 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) shall not be a coarray" -msgstr "Komponenten \"%s\" vid %L av TYPE(C_PTR) eller TYPE(C_FUNPTR) får inte vara en co-vektor" +msgstr "Komponenten â€%s†vid %L av TYPE(C_PTR) eller TYPE(C_FUNPTR) fÃ¥r inte vara en co-vektor" #: fortran/resolve.c:11647 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' at %L with coarray component shall be a nonpointer, nonallocatable scalar" -msgstr "Komponenten \"%s\" vid %L med co-vektorkomponent skall skalär som inte är en pekare eller allokerbar" +msgstr "Komponenten â€%s†vid %L med co-vektorkomponent skall skalär som inte är en pekare eller allokerbar" #: fortran/resolve.c:11656 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' at %L has the CONTIGUOUS attribute but is not an array pointer" -msgstr "Component \"%s\" vid %L har attributet CONTIGUOUS men är inte en vektorpekare" +msgstr "Component â€%s†vid %L har attributet CONTIGUOUS men är inte en vektorpekare" #: fortran/resolve.c:11664 #, gcc-internal-format, gfc-internal-format msgid "Interface '%s', used by procedure pointer component '%s' at %L, is declared in a later PROCEDURE statement" -msgstr "Gränssnitt \"%s\", använt av procedurpekarkomponenten \"%s\" vid %L, är deklarerat i en senare PROCEDURE-sats" +msgstr "Gränssnitt â€%sâ€, använt av procedurpekarkomponenten â€%s†vid %L, är deklarerat i en senare PROCEDURE-sats" #: fortran/resolve.c:11729 #, gcc-internal-format, gfc-internal-format msgid "Interface '%s' of procedure pointer component '%s' at %L must be explicit" -msgstr "Gränssnitt \"%s\" till procedurpekarkomponent \"%s\" vid %L måste vara explicit" +msgstr "Gränssnitt â€%s†till procedurpekarkomponent â€%s†vid %L mÃ¥ste vara explicit" #: fortran/resolve.c:11769 #, gcc-internal-format, gfc-internal-format msgid "Procedure pointer component '%s' with PASS(%s) at %L has no argument '%s'" -msgstr "Procedurpekarkomponent \"%s\" med PASS(%s) vid %L har inget argument \"%s\"" +msgstr "Procedurpekarkomponent â€%s†med PASS(%s) vid %L har inget argument â€%sâ€" #: fortran/resolve.c:11783 #, gcc-internal-format, gfc-internal-format msgid "Procedure pointer component '%s' with PASS at %L must have at least one argument" -msgstr "Procedurpekarkomponent \"%s\" med PASS vid %L måste ha åtminstone ett argument" +msgstr "Procedurpekarkomponent â€%s†med PASS vid %L mÃ¥ste ha Ã¥tminstone ett argument" #: fortran/resolve.c:11799 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of '%s' with PASS(%s) at %L must be of the derived type '%s'" -msgstr "Argument \"%s\" till \"%s\" med PASS(%s) vid %L måste ha den härledda typen \"%s\"" +msgstr "Argument â€%s†till â€%s†med PASS(%s) vid %L mÃ¥ste ha den härledda typen â€%sâ€" #: fortran/resolve.c:11809 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of '%s' with PASS(%s) at %L must be scalar" -msgstr "Argument \"%s\" till \"%s\" med PASS(%s) vid %L måste vara skalärt" +msgstr "Argument â€%s†till â€%s†med PASS(%s) vid %L mÃ¥ste vara skalärt" #: fortran/resolve.c:11818 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of '%s' with PASS(%s) at %L may not have the POINTER attribute" -msgstr "Argumentet \"%s\" till \"%s\" med PASS(%s) vid %L får inte ha attributet POINTER" +msgstr "Argumentet â€%s†till â€%s†med PASS(%s) vid %L fÃ¥r inte ha attributet POINTER" #: fortran/resolve.c:11827 #, gcc-internal-format, gfc-internal-format msgid "Argument '%s' of '%s' with PASS(%s) at %L may not be ALLOCATABLE" -msgstr "Argumentet \"%s\" till \"%s\" med PASS(%s) vid %L får inte vara ALLOCATABLE" +msgstr "Argumentet â€%s†till â€%s†med PASS(%s) vid %L fÃ¥r inte vara ALLOCATABLE" #: fortran/resolve.c:11864 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' of '%s' at %L has the same name as an inherited type-bound procedure" -msgstr "Komponent \"%s\" i \"%s\" vid %L har samma namn som en ärvd typbunden procedur" +msgstr "Komponent â€%s†i â€%s†vid %L har samma namn som en ärvd typbunden procedur" #: fortran/resolve.c:11877 #, gcc-internal-format, gfc-internal-format msgid "Character length of component '%s' needs to be a constant specification expression at %L" -msgstr "Teckenlängd på komponent \"%s\" behöver vara ett konstant specifikationsuttryck vid %L" +msgstr "Teckenlängd pÃ¥ komponent â€%s†behöver vara ett konstant specifikationsuttryck vid %L" #: fortran/resolve.c:11888 #, gcc-internal-format, gfc-internal-format msgid "Character component '%s' of '%s' at %L with deferred length must be a POINTER or ALLOCATABLE" -msgstr "Teckenkomponent \"%s\" av \"%s\" vid %L med fördröjd längd måste vara en POINTER eller ALLOCATABLE" +msgstr "Teckenkomponent â€%s†av â€%s†vid %L med fördröjd längd mÃ¥ste vara en POINTER eller ALLOCATABLE" #: fortran/resolve.c:11900 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: the component '%s' is a PRIVATE type and cannot be a component of '%s', which is PUBLIC at %L" -msgstr "Fortran 2003: komponenten \"%s\" är en PRIVATE-typ och kan inte vara en komponent i \"%s\", som är PUBLIC vid %L" +msgstr "Fortran 2003: komponenten â€%s†är en PRIVATE-typ och kan inte vara en komponent i â€%sâ€, som är PUBLIC vid %L" #: fortran/resolve.c:11908 #, gcc-internal-format, gfc-internal-format @@ -42231,149 +42234,149 @@ msgstr "Komponent %s av SEQUENCE-typ deklarerad vid %L har inte attributet SEQUE #: fortran/resolve.c:11935 fortran/resolve.c:11946 #, gcc-internal-format, gfc-internal-format msgid "The pointer component '%s' of '%s' at %L is a type that has not been declared" -msgstr "Pekarkomponenten \"%s\" av \"%s\" vid %L är en typen som inte har deklarerats" +msgstr "Pekarkomponenten â€%s†av â€%s†vid %L är en typen som inte har deklarerats" #: fortran/resolve.c:11958 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' with CLASS at %L must be allocatable or pointer" -msgstr "Procedur \"%s\" med CLASS vid %L måste vara allokerbar eller en pekare" +msgstr "Procedur â€%s†med CLASS vid %L mÃ¥ste vara allokerbar eller en pekare" #: fortran/resolve.c:12006 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: Generic name '%s' of function '%s' at %L being the same name as derived type at %L" -msgstr "Fortran 2008: Argumentet \"%s\" till pure-funktion \"%s\" vid %L med attributet VALUE men utan INTENT(IN)" +msgstr "Fortran 2008: Argumentet â€%s†till pure-funktion â€%s†vid %L med attributet VALUE men utan INTENT(IN)" #: fortran/resolve.c:12058 #, gcc-internal-format, gfc-internal-format msgid "Assumed size array '%s' in namelist '%s' at %L is not allowed" -msgstr "Vektor \"%s\" med underförstådd storlek i namnlistan \"%s\" vid %L är inte tillåtet" +msgstr "Vektor â€%s†med underförstÃ¥dd storlek i namnlistan â€%s†vid %L är inte tillÃ¥tet" #: fortran/resolve.c:12064 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: NAMELIST array object '%s' with assumed shape in namelist '%s' at %L" -msgstr "Fortran 2003: NAMELIST-vektorobjekt \"%s\" med förmodad form i namnlistan \"%s\" vid %L" +msgstr "Fortran 2003: NAMELIST-vektorobjekt â€%s†med förmodad form i namnlistan â€%s†vid %L" #: fortran/resolve.c:12071 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: NAMELIST array object '%s' with nonconstant shape in namelist '%s' at %L" -msgstr "Fortran 2003: NAMELIST-vektorobjekt \"%s\" med icke-konstant form in namnlista \"%s\" vid %L" +msgstr "Fortran 2003: NAMELIST-vektorobjekt â€%s†med icke-konstant form in namnlista â€%s†vid %L" #: fortran/resolve.c:12080 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: NAMELIST object '%s' with nonconstant character length in namelist '%s' at %L" -msgstr "Fortran 2003: NAMELIST-vektorobjekt \"%s\" med icke-konstant form i namnlistan \"%s\" vid %L" +msgstr "Fortran 2003: NAMELIST-vektorobjekt â€%s†med icke-konstant form i namnlistan â€%s†vid %L" #: fortran/resolve.c:12090 #, gcc-internal-format, gfc-internal-format msgid "NAMELIST object '%s' in namelist '%s' at %L is polymorphic and requires a defined input/output procedure" -msgstr "NAMELIST-objekt \"%s\" i namnlistan \"%s\" vid %L är polymorf om och behöver en en definierad input/output-procedur" +msgstr "NAMELIST-objekt â€%s†i namnlistan â€%s†vid %L är polymorf om och behöver en en definierad input/output-procedur" #: fortran/resolve.c:12100 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: NAMELIST object '%s' in namelist '%s' at %L with ALLOCATABLE or POINTER components" -msgstr "Fortran 2003: NAMELIST-objekt \"%s\" i namnlistan \"%s\" vid %L med ALLOCATABLE- eller POINTER-komponenter" +msgstr "Fortran 2003: NAMELIST-objekt â€%s†i namnlistan â€%s†vid %L med ALLOCATABLE- eller POINTER-komponenter" #. FIXME: Once UDDTIO is implemented, the following can be #. removed. #: fortran/resolve.c:12108 #, gcc-internal-format, gfc-internal-format msgid "NAMELIST object '%s' in namelist '%s' at %L has ALLOCATABLE or POINTER components and thus requires a defined input/output procedure" -msgstr "NAMELIST-objekt \"%s\" i namnlistan \"%s\" vid %L har ALLOCATABLE- eller POINTER-komponenter och behöver därför en definierad input/output-procedur" +msgstr "NAMELIST-objekt â€%s†i namnlistan â€%s†vid %L har ALLOCATABLE- eller POINTER-komponenter och behöver därför en definierad input/output-procedur" #: fortran/resolve.c:12125 #, gcc-internal-format, gfc-internal-format msgid "NAMELIST object '%s' was declared PRIVATE and cannot be member of PUBLIC namelist '%s' at %L" -msgstr "NAMELIST-objekt \"%s\" deklarerades PRIVATE och kan inte vara medlem av PUBLIC-namnlista \"%s\" vid %L" +msgstr "NAMELIST-objekt â€%s†deklarerades PRIVATE och kan inte vara medlem av PUBLIC-namnlista â€%s†vid %L" #: fortran/resolve.c:12135 #, gcc-internal-format, gfc-internal-format msgid "NAMELIST object '%s' has use-associated PRIVATE components and cannot be member of namelist '%s' at %L" -msgstr "NAMELIST-objekt \"%s\" har användningsassociativa PRIVATE-komponenter och kan inte vara medlem av namnlistan \"%s\" vid %L" +msgstr "NAMELIST-objekt â€%s†har användningsassociativa PRIVATE-komponenter och kan inte vara medlem av namnlistan â€%s†vid %L" #: fortran/resolve.c:12146 #, gcc-internal-format, gfc-internal-format msgid "NAMELIST object '%s' has PRIVATE components and cannot be a member of PUBLIC namelist '%s' at %L" -msgstr "NAMELIST-objekt \"%s\" har PRIVATE-komponenter och kan inte vara medlem av PUBLIC-namnlista \"%s\" vid %L" +msgstr "NAMELIST-objekt â€%s†har PRIVATE-komponenter och kan inte vara medlem av PUBLIC-namnlista â€%s†vid %L" #: fortran/resolve.c:12173 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE attribute conflicts with NAMELIST attribute in '%s' at %L" -msgstr "PROCEDURE-attribut i konflikt med NAMELIST-attribut i \"%s\" vid %L" +msgstr "PROCEDURE-attribut i konflikt med NAMELIST-attribut i â€%s†vid %L" #: fortran/resolve.c:12192 #, gcc-internal-format, gfc-internal-format msgid "Parameter array '%s' at %L cannot be automatic or of deferred shape" -msgstr "Parametervektor \"%s\" vid %L kan inte ha automatisk eller fördröjd form" +msgstr "Parametervektor â€%s†vid %L kan inte ha automatisk eller fördröjd form" #: fortran/resolve.c:12204 #, gcc-internal-format, gfc-internal-format msgid "Implicitly typed PARAMETER '%s' at %L doesn't match a later IMPLICIT type" -msgstr "Implicit typad PARAMETER \"%s\" vid %L matchar inte en senare IMPLICIT-typ" +msgstr "Implicit typad PARAMETER â€%s†vid %L matchar inte en senare IMPLICIT-typ" #: fortran/resolve.c:12215 #, gcc-internal-format, gfc-internal-format msgid "Incompatible derived type in PARAMETER at %L" -msgstr "Inkompatibel härledd typ i PARAMETER vid %L" +msgstr "Inkompatibel härledd typ i PARAMETER vid %L" #: fortran/resolve.c:12284 #, gcc-internal-format, gfc-internal-format msgid "PROTECTED attribute conflicts with EXTERNAL attribute at %L" -msgstr "Attributet PROTECTED står i konflikt med attributet EXTERNAL vid %L" +msgstr "Attributet PROTECTED stÃ¥r i konflikt med attributet EXTERNAL vid %L" #: fortran/resolve.c:12287 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE attribute conflicts with PROTECTED attribute at %L" -msgstr "Attributet PROCEDURE står i konflikt med attributet PROTECTED vid %L" +msgstr "Attributet PROCEDURE stÃ¥r i konflikt med attributet PROTECTED vid %L" #: fortran/resolve.c:12370 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L has the CONTIGUOUS attribute but is not an array pointer or an assumed-shape array" -msgstr "\"%s\" vid %L har attributet CONTIGUOUS, men är inte en vektorpekare eller en vektor med förmodad form" +msgstr "â€%s†vid %L har attributet CONTIGUOUS, men är inte en vektorpekare eller en vektor med förmodad form" #: fortran/resolve.c:12388 #, gcc-internal-format, gfc-internal-format msgid "Assumed size array at %L must be a dummy argument" -msgstr "Vektor med underförstådd storlek vid %L måste vara ett attrappargument" +msgstr "Vektor med underförstÃ¥dd storlek vid %L mÃ¥ste vara ett attrappargument" #: fortran/resolve.c:12391 #, gcc-internal-format, gfc-internal-format msgid "Assumed shape array at %L must be a dummy argument" -msgstr "Vektor med underförstådd form vid %L måste vara ett attrappargument" +msgstr "Vektor med underförstÃ¥dd form vid %L mÃ¥ste vara ett attrappargument" #: fortran/resolve.c:12404 #, gcc-internal-format, gfc-internal-format msgid "Symbol at %L is not a DUMMY variable" -msgstr "Symbol vid %L är inte en DUMMY-variabel" +msgstr "Symbol vid %L är inte en DUMMY-variabel" #: fortran/resolve.c:12410 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L cannot have the VALUE attribute because it is not a dummy argument" -msgstr "\"%s\" vid %L kan inte ha attributet VALUE eftersom det inte är ett attrappargument" +msgstr "â€%s†vid %L kan inte ha attributet VALUE eftersom det inte är ett attrappargument" #: fortran/resolve.c:12420 #, gcc-internal-format, gfc-internal-format msgid "Character dummy variable '%s' at %L with VALUE attribute must have constant length" -msgstr "Teckenvärd attrappvariabel \"%s\" vid %L med attributet VALUE måste ha konstant längd" +msgstr "Teckenvärd attrappvariabel â€%s†vid %L med attributet VALUE mÃ¥ste ha konstant längd" #: fortran/resolve.c:12429 #, gcc-internal-format, gfc-internal-format msgid "C interoperable character dummy variable '%s' at %L with VALUE attribute must have length one" -msgstr "C-interoperativ teckenattrappvariabel \"%s\" vid %L med attributet VALUE måste ha längd ett" +msgstr "C-interoperativ teckenattrappvariabel â€%s†vid %L med attributet VALUE mÃ¥ste ha längd ett" #: fortran/resolve.c:12442 fortran/resolve.c:12523 #, gcc-internal-format, gfc-internal-format msgid "The derived type '%s' at %L is of type '%s', which has not been defined" -msgstr "Den härledda typen \"%s\" vid %L har typen \"%s\", som inte har definierats" +msgstr "Den härledda typen â€%s†vid %L har typen â€%sâ€, som inte har definierats" #: fortran/resolve.c:12469 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L cannot be BIND(C) because it is neither a COMMON block nor declared at the module level scope" -msgstr "Variabel \"%s\" vid %L kan inte vara BIND(C) eftersom den varken är ett COMMON-block eller deklarerad med räckvidd modulnivå" +msgstr "Variabel â€%s†vid %L kan inte vara BIND(C) eftersom den varken är ett COMMON-block eller deklarerad med räckvidd modulnivÃ¥" #: fortran/resolve.c:12549 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: PUBLIC %s '%s' at %L of PRIVATE derived type '%s'" -msgstr "Fortran 2003: PUBLIC %s \"%s\" vid %L har PRIVATE härledd typ \"%s\"" +msgstr "Fortran 2003: PUBLIC %s â€%s†vid %L har PRIVATE härledd typ â€%sâ€" #: fortran/resolve.c:12563 #, gcc-internal-format, gfc-internal-format @@ -42383,77 +42386,77 @@ msgstr "" #: fortran/resolve.c:12581 #, gcc-internal-format, gfc-internal-format msgid "The INTENT(OUT) dummy argument '%s' at %L is ASSUMED SIZE and so cannot have a default initializer" -msgstr "INTENT(OUT)-attrappargumentet \"%s\" vid %L har ASSUMED SIZE och kan därför inte ha en standardinitierare" +msgstr "INTENT(OUT)-attrappargumentet â€%s†vid %L har ASSUMED SIZE och kan därför inte ha en standardinitierare" #: fortran/resolve.c:12593 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' at %L of LOCK_TYPE shall not be INTENT(OUT)" -msgstr "Attrappargumentet \"%s\" vid %L får inte vara INTENT(OUT)" +msgstr "Attrappargumentet â€%s†vid %L fÃ¥r inte vara INTENT(OUT)" #: fortran/resolve.c:12605 #, gcc-internal-format, gfc-internal-format msgid "Function result '%s' at %L shall not be a coarray or have a coarray component" -msgstr "Funktionsresultat \"%s\" vid %L skall inte vara en co-vektor eller ha en co-vektorkomponent" +msgstr "Funktionsresultat â€%s†vid %L skall inte vara en co-vektor eller ha en co-vektorkomponent" #: fortran/resolve.c:12614 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) shall not be a coarray" -msgstr "Variabeln \"%s\" vid %L av TYPE(C_PTR) eller TYPE(C_FUNPTR) får inte vara en co-vektor" +msgstr "Variabeln â€%s†vid %L av TYPE(C_PTR) eller TYPE(C_FUNPTR) fÃ¥r inte vara en co-vektor" #: fortran/resolve.c:12626 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L with coarray component shall be a nonpointer, nonallocatable scalar" -msgstr "Variabeln \"%s\" vid %L med co-vektorkomponent skall en skallär som inte är en pekare eller allokerbar" +msgstr "Variabeln â€%s†vid %L med co-vektorkomponent skall en skallär som inte är en pekare eller allokerbar" #: fortran/resolve.c:12641 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L is a coarray and is not ALLOCATABLE, SAVE nor a dummy argument" -msgstr "Variabeln \"%s\" vid %L är en co-vektor eller har en co-vektorkomponent och är inte ALLOCATABLE, SAVE eller ett attrappargument" +msgstr "Variabeln â€%s†vid %L är en co-vektor eller har en co-vektorkomponent och är inte ALLOCATABLE, SAVE eller ett attrappargument" #: fortran/resolve.c:12649 #, gcc-internal-format, gfc-internal-format msgid "Coarray variable '%s' at %L shall not have codimensions with deferred shape" -msgstr "Co-vektorvariabeln \"%s\" vid %L skall inte ha co-dimensioner med fördröjd form" +msgstr "Co-vektorvariabeln â€%s†vid %L skall inte ha co-dimensioner med fördröjd form" #: fortran/resolve.c:12656 #, gcc-internal-format, gfc-internal-format msgid "Allocatable coarray variable '%s' at %L must have deferred shape" -msgstr "Allokerbar co-vektorvariabel \"%s\" vid %L måste ha en fördröjd form" +msgstr "Allokerbar co-vektorvariabel â€%s†vid %L mÃ¥ste ha en fördröjd form" #: fortran/resolve.c:12668 #, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L is INTENT(OUT) and can thus not be an allocatable coarray or have coarray components" -msgstr "Variabeln \"%s\" vid %L är INTENT(OUT) och kan alltså inte vara en allokerbara co-vektor eller har co-vektorkomponenter" +msgstr "Variabeln â€%s†vid %L är INTENT(OUT) och kan alltsÃ¥ inte vara en allokerbara co-vektor eller har co-vektorkomponenter" #: fortran/resolve.c:12677 #, gcc-internal-format, gfc-internal-format msgid "Coarray dummy variable '%s' at %L not allowed in BIND(C) procedure '%s'" -msgstr "Co-attrappvariabeln \"%s\" vid %L är inte tillåten i BIND(C)-proceduren \"%s\"" +msgstr "Co-attrappvariabeln â€%s†vid %L är inte tillÃ¥ten i BIND(C)-proceduren â€%sâ€" #: fortran/resolve.c:12749 #, gcc-internal-format, gfc-internal-format msgid "Threadprivate at %L isn't SAVEd" -msgstr "Trådprivat vid %L är inte SAVE:ad" +msgstr "TrÃ¥dprivat vid %L är inte SAVE:ad" #: fortran/resolve.c:12843 #, gcc-internal-format, gfc-internal-format msgid "BLOCK DATA element '%s' at %L must be in COMMON" -msgstr "BLOCK DATA-element \"%s\" vid %L måste vara i COMMON" +msgstr "BLOCK DATA-element â€%s†vid %L mÃ¥ste vara i COMMON" #: fortran/resolve.c:12849 #, gcc-internal-format, gfc-internal-format msgid "DATA array '%s' at %L must be specified in a previous declaration" -msgstr "DATA-vektor \"%s\" vid %L måste anges i en tidigare deklaration" +msgstr "DATA-vektor â€%s†vid %L mÃ¥ste anges i en tidigare deklaration" #: fortran/resolve.c:12858 #, gcc-internal-format, gfc-internal-format msgid "DATA element '%s' at %L cannot have a coindex" -msgstr "DATA-elementet \"%s\" vid %L kan inte ha ett co-index" +msgstr "DATA-elementet â€%s†vid %L kan inte ha ett co-index" #: fortran/resolve.c:12872 #, gcc-internal-format, gfc-internal-format msgid "DATA element '%s' at %L is a pointer and so must be a full array" -msgstr "DATA-element \"%s\" vid %L är en pekare och måste då vara en fullständig vektor" +msgstr "DATA-element â€%s†vid %L är en pekare och mÃ¥ste dÃ¥ vara en fullständig vektor" #: fortran/resolve.c:12918 #, gcc-internal-format, gfc-internal-format @@ -42463,57 +42466,57 @@ msgstr "Ickekonstant vektorsektion vid %L i DATA-sats." #: fortran/resolve.c:12931 #, gcc-internal-format, gfc-internal-format msgid "DATA statement at %L has more variables than values" -msgstr "DATA-sats vid %L har fler variabler än värden" +msgstr "DATA-sats vid %L har fler variabler än värden" #: fortran/resolve.c:13030 #, gcc-internal-format, gfc-internal-format msgid "start of implied-do loop at %L could not be simplified to a constant value" -msgstr "början av underförstådd do-slinga vid %L kan inte förenklas till ett konstant värde" +msgstr "början av underförstÃ¥dd do-slinga vid %L kan inte förenklas till ett konstant värde" #: fortran/resolve.c:13038 #, gcc-internal-format, gfc-internal-format msgid "end of implied-do loop at %L could not be simplified to a constant value" -msgstr "slutet av underförstådd do-slinga vid %L kan inte förenklas till ett konstant värde" +msgstr "slutet av underförstÃ¥dd do-slinga vid %L kan inte förenklas till ett konstant värde" #: fortran/resolve.c:13046 #, gcc-internal-format, gfc-internal-format msgid "step of implied-do loop at %L could not be simplified to a constant value" -msgstr "steget i underförstådd do-slinga vid %L kan inte förenklas till ett konstant värde" +msgstr "steget i underförstÃ¥dd do-slinga vid %L kan inte förenklas till ett konstant värde" #: fortran/resolve.c:13171 #, gcc-internal-format, gfc-internal-format msgid "DATA statement at %L has more values than variables" -msgstr "DATA-sats vid %L har fler värden än variabler" +msgstr "DATA-sats vid %L har fler värden än variabler" #: fortran/resolve.c:13310 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %L defined but not used" -msgstr "Etiketten %d vid %L är definierad men inte använd" +msgstr "Etiketten %d vid %L är definierad men inte använd" #: fortran/resolve.c:13315 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %L defined but cannot be used" -msgstr "Etiketten %d vid %L är definierad men kan inte användas" +msgstr "Etiketten %d vid %L är definierad men kan inte användas" #: fortran/resolve.c:13399 #, gcc-internal-format, gfc-internal-format msgid "Derived type variable '%s' at %L must have SEQUENCE attribute to be an EQUIVALENCE object" -msgstr "Härledd typvariabel \"%s\" vid %L måste ha attributet SEQUENCE för att vara ett EQUIVALENCE-objekt" +msgstr "Härledd typvariabel â€%s†vid %L mÃ¥ste ha attributet SEQUENCE för att vara ett EQUIVALENCE-objekt" #: fortran/resolve.c:13408 #, gcc-internal-format, gfc-internal-format msgid "Derived type variable '%s' at %L cannot have ALLOCATABLE components to be an EQUIVALENCE object" -msgstr "Härledd typvariabel \"%s\" vid %L kan inte ha ALLOCATABLE-komponenter för att vara ett EQUIVALENCE-objekt" +msgstr "Härledd typvariabel â€%s†vid %L kan inte ha ALLOCATABLE-komponenter för att vara ett EQUIVALENCE-objekt" #: fortran/resolve.c:13416 #, gcc-internal-format, gfc-internal-format msgid "Derived type variable '%s' at %L with default initialization cannot be in EQUIVALENCE with a variable in COMMON" -msgstr "Härledd typvariabel \"%s\" vid %L med standardinitiering kan inte vara i EQUIVALENCE med en variabel i COMMON" +msgstr "Härledd typvariabel â€%s†vid %L med standardinitiering kan inte vara i EQUIVALENCE med en variabel i COMMON" #: fortran/resolve.c:13432 #, gcc-internal-format, gfc-internal-format msgid "Derived type variable '%s' at %L with pointer component(s) cannot be an EQUIVALENCE object" -msgstr "Härledd typvariabel \"%s\" vid %L med pekarkomponent(er) kan inte vara ett EQUIVALENCE-objekt" +msgstr "Härledd typvariabel â€%s†vid %L med pekarkomponent(er) kan inte vara ett EQUIVALENCE-objekt" #: fortran/resolve.c:13535 #, gcc-internal-format, gfc-internal-format @@ -42523,82 +42526,82 @@ msgstr "Syntaxfel i EQUIVALENCE-sats vid %L" #: fortran/resolve.c:13550 #, gcc-internal-format, gfc-internal-format msgid "Either all or none of the objects in the EQUIVALENCE set at %L shall have the PROTECTED attribute" -msgstr "Antingen alla eller inget av objekten i EQUIVALENCE-mängden vid %L kan ha attributet PROTECTED" +msgstr "Antingen alla eller inget av objekten i EQUIVALENCE-mängden vid %L kan ha attributet PROTECTED" #: fortran/resolve.c:13562 #, gcc-internal-format, gfc-internal-format msgid "Common block member '%s' at %L cannot be an EQUIVALENCE object in the pure procedure '%s'" -msgstr "Common-blockmedlem \"%s\" vid %L kan inte vara ett EQUIVALENCE-objekt i den rena proceduren \"%s\"" +msgstr "Common-blockmedlem â€%s†vid %L kan inte vara ett EQUIVALENCE-objekt i den rena proceduren â€%sâ€" #: fortran/resolve.c:13571 #, gcc-internal-format, gfc-internal-format msgid "Named constant '%s' at %L cannot be an EQUIVALENCE object" -msgstr "Namngiven konstant \"%s\" vid %L kan inte vara ett EQUIVALENCE-objekt" +msgstr "Namngiven konstant â€%s†vid %L kan inte vara ett EQUIVALENCE-objekt" #: fortran/resolve.c:13650 #, gcc-internal-format, gfc-internal-format msgid "Array '%s' at %L with non-constant bounds cannot be an EQUIVALENCE object" -msgstr "Vektor \"%s\" vid %L med icke-konstanta gränser kan inte vara ett EQUIVALENCE-objekt" +msgstr "Vektor â€%s†vid %L med icke-konstanta gränser kan inte vara ett EQUIVALENCE-objekt" #: fortran/resolve.c:13661 #, gcc-internal-format, gfc-internal-format msgid "Structure component '%s' at %L cannot be an EQUIVALENCE object" -msgstr "Postkomponent \"%s\" vid %L kan inte vara ett EQUIVALENCE-objekt" +msgstr "Postkomponent â€%s†vid %L kan inte vara ett EQUIVALENCE-objekt" #: fortran/resolve.c:13672 #, gcc-internal-format, gfc-internal-format msgid "Substring at %L has length zero" -msgstr "Delsträng vid %L har längden noll" +msgstr "Delsträng vid %L har längden noll" #: fortran/resolve.c:13715 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: PUBLIC function '%s' at %L of PRIVATE type '%s'" -msgstr "Fortran 2003: PUBLIC-funktion \"%s\" vid %L har PRIVATE typ \"%s\"" +msgstr "Fortran 2003: PUBLIC-funktion â€%s†vid %L har PRIVATE typ â€%sâ€" #: fortran/resolve.c:13728 #, gcc-internal-format, gfc-internal-format msgid "ENTRY '%s' at %L has no IMPLICIT type" -msgstr "ENTRY \"%s\" vid %L har ingen IMPLICIT-typ" +msgstr "ENTRY â€%s†vid %L har ingen IMPLICIT-typ" #: fortran/resolve.c:13745 #, gcc-internal-format, gfc-internal-format msgid "User operator procedure '%s' at %L must be a FUNCTION" -msgstr "Användaroperatorprocedur \"%s\" vid %L måste vara en FUNCTION" +msgstr "Användaroperatorprocedur â€%s†vid %L mÃ¥ste vara en FUNCTION" #: fortran/resolve.c:13755 #, gcc-internal-format, gfc-internal-format msgid "User operator procedure '%s' at %L cannot be assumed character length" -msgstr "Användaroperatorprocedur \"%s\" vid %L får inte ha antagen teckenlängd" +msgstr "Användaroperatorprocedur â€%s†vid %L fÃ¥r inte ha antagen teckenlängd" #: fortran/resolve.c:13763 #, gcc-internal-format, gfc-internal-format msgid "User operator procedure '%s' at %L must have at least one argument" -msgstr "Användaroperatorprocedur \"%s\" vid %L måste ha åtminstone ett argument" +msgstr "Användaroperatorprocedur â€%s†vid %L mÃ¥ste ha Ã¥tminstone ett argument" #: fortran/resolve.c:13777 #, gcc-internal-format, gfc-internal-format msgid "First argument of operator interface at %L cannot be optional" -msgstr "Första argumentet till operatorgränssnitt vid %L får inte vara frivilligt" +msgstr "Första argumentet till operatorgränssnitt vid %L fÃ¥r inte vara frivilligt" #: fortran/resolve.c:13795 #, gcc-internal-format, gfc-internal-format msgid "Second argument of operator interface at %L cannot be optional" -msgstr "Andra argumentet till operatorgränssnitt vid %L får inte vara valfritt" +msgstr "Andra argumentet till operatorgränssnitt vid %L fÃ¥r inte vara valfritt" #: fortran/resolve.c:13802 #, gcc-internal-format, gfc-internal-format msgid "Operator interface at %L must have, at most, two arguments" -msgstr "Operatorgränssnitt vid %L måste ha, högst, två argument" +msgstr "Operatorgränssnitt vid %L mÃ¥ste ha, högst, tvÃ¥ argument" #: fortran/resolve.c:13878 #, gcc-internal-format, gfc-internal-format msgid "Contained procedure '%s' at %L of a PURE procedure must also be PURE" -msgstr "Innesluten procedur \"%s\" vid %L i en PURE-procedur måste också vara PURE" +msgstr "Innesluten procedur â€%s†vid %L i en PURE-procedur mÃ¥ste ocksÃ¥ vara PURE" #: fortran/scanner.c:773 #, gcc-internal-format, gfc-internal-format msgid "!$OMP at %C starts a commented line as it neither is followed by a space nor is a continuation line" -msgstr "!$OMP vid %C inleder en kommentarrad eftersom det varken följs av en blank eller en fortsättningsrad" +msgstr "!$OMP vid %C inleder en kommentarrad eftersom det varken följs av en blank eller en fortsättningsrad" #: fortran/scanner.c:1052 fortran/scanner.c:1190 #, gcc-internal-format, gfc-internal-format @@ -42608,12 +42611,12 @@ msgstr "Rad avhuggen vid %L" #: fortran/scanner.c:1102 fortran/scanner.c:1234 #, gcc-internal-format, gfc-internal-format msgid "Limit of %d continuations exceeded in statement at %C" -msgstr "Gränsen på %d fortsättningar överskrids i sats vid %C" +msgstr "Gränsen pÃ¥ %d fortsättningar överskrids i sats vid %C" #: fortran/scanner.c:1151 #, gcc-internal-format, gfc-internal-format msgid "Missing '&' in continued character constant at %C" -msgstr "\"&\" saknas i fortsatt teckenkonstant vid %C" +msgstr "â€&†saknas i fortsatt teckenkonstant vid %C" #: fortran/scanner.c:1384 #, gcc-internal-format, gfc-internal-format @@ -42623,17 +42626,17 @@ msgstr "Ej konformt tabulatortecken vid %C" #: fortran/scanner.c:1472 fortran/scanner.c:1475 #, gcc-internal-format, gfc-internal-format msgid "'&' not allowed by itself in line %d" -msgstr "\"&\" är inte tillåtet ensamt på rad %d" +msgstr "â€&†är inte tillÃ¥tet ensamt pÃ¥ rad %d" #: fortran/scanner.c:1534 #, gcc-internal-format, gfc-internal-format msgid "Nonconforming tab character in column %d of line %d" -msgstr "Ej konformt tabulatortecken i kolumn %d på rad %d" +msgstr "Ej konformt tabulatortecken i kolumn %d pÃ¥ rad %d" #: fortran/scanner.c:1759 #, gcc-internal-format, gfc-internal-format msgid "%s:%d: file %s left but not entered" -msgstr "%s:%d: gått ifrån men inte till filen %s" +msgstr "%s:%d: gÃ¥tt ifrÃ¥n men inte till filen %s" #: fortran/scanner.c:1793 #, gcc-internal-format, gfc-internal-format @@ -42643,12 +42646,12 @@ msgstr "%s:%d: Ogiltigt preprocessordirektiv" #: fortran/scanner.c:1918 #, gcc-internal-format, gfc-internal-format msgid "Can't open file '%s'" -msgstr "Kan inte öppna filen \"%s\"" +msgstr "Kan inte öppna filen â€%sâ€" #: fortran/simplify.c:86 #, gcc-internal-format, gfc-internal-format msgid "Result of %s overflows its kind at %L" -msgstr "Resultatet av %s spiller över sin sort vid %L" +msgstr "Resultatet av %s spiller över sin sort vid %L" #: fortran/simplify.c:91 #, gcc-internal-format, gfc-internal-format @@ -42658,17 +42661,17 @@ msgstr "Resultatet av %s spiller under sin sort vid %L" #: fortran/simplify.c:96 #, gcc-internal-format, gfc-internal-format msgid "Result of %s is NaN at %L" -msgstr "Resultatet av %s är NaN vid %L" +msgstr "Resultatet av %s är NaN vid %L" #: fortran/simplify.c:100 #, gcc-internal-format, gfc-internal-format msgid "Result of %s gives range error for its kind at %L" -msgstr "Resultatet av %s ger intervallfel för sin sort vid %L" +msgstr "Resultatet av %s ger intervallfel för sin sort vid %L" #: fortran/simplify.c:123 #, gcc-internal-format, gfc-internal-format msgid "KIND parameter of %s at %L must be an initialization expression" -msgstr "KIND-parametern till \"%s\" vid %L måste vara ett initieringsuttryck" +msgstr "KIND-parametern till â€%s†vid %L mÃ¥ste vara ett initieringsuttryck" #: fortran/simplify.c:131 #, gcc-internal-format, gfc-internal-format @@ -42678,115 +42681,115 @@ msgstr "Ogiltig KIND-parameter %s vid %L" #: fortran/simplify.c:701 #, gcc-internal-format, gfc-internal-format msgid "Argument of %s function at %L is negative" -msgstr "Argument till %s-funktion vid %L är negativt" +msgstr "Argument till %s-funktion vid %L är negativt" #: fortran/simplify.c:708 #, gcc-internal-format, gfc-internal-format msgid "Argument of %s function at %L outside of range [0,127]" -msgstr "Argument till %s-funktion vid %L utanför sitt intervall [0,127]" +msgstr "Argument till %s-funktion vid %L utanför sitt intervall [0,127]" #: fortran/simplify.c:726 #, gcc-internal-format, gfc-internal-format msgid "Argument of %s function at %L is too large for the collating sequence of kind %d" -msgstr "Argument till funktion %s vid %L är för stort för sorteringssekvensen av ordning %d" +msgstr "Argument till funktion %s vid %L är för stort för sorteringssekvensen av ordning %d" #: fortran/simplify.c:763 #, gcc-internal-format, gfc-internal-format msgid "Argument of ACOS at %L must be between -1 and 1" -msgstr "Argument till ACOS vid %L måste vara mellan -1 och 1" +msgstr "Argument till ACOS vid %L mÃ¥ste vara mellan -1 och 1" #: fortran/simplify.c:796 #, gcc-internal-format, gfc-internal-format msgid "Argument of ACOSH at %L must not be less than 1" -msgstr "Argumentet till ACOSH vid %L får inte vara mindre än 1" +msgstr "Argumentet till ACOSH vid %L fÃ¥r inte vara mindre än 1" #: fortran/simplify.c:1040 #, gcc-internal-format, gfc-internal-format msgid "Argument of ASIN at %L must be between -1 and 1" -msgstr "Argument till till ASIN vid %L måste vara mellan -1 och 1" +msgstr "Argument till till ASIN vid %L mÃ¥ste vara mellan -1 och 1" #: fortran/simplify.c:1131 #, gcc-internal-format, gfc-internal-format msgid "Argument of ATANH at %L must be inside the range -1 to 1" -msgstr "Argument till ATANH vid %L måste vara i intervallet -1 till 1" +msgstr "Argument till ATANH vid %L mÃ¥ste vara i intervallet -1 till 1" #: fortran/simplify.c:1162 #, gcc-internal-format, gfc-internal-format msgid "If first argument of ATAN2 %L is zero, then the second argument must not be zero" -msgstr "Om första argumentet till ATANH2 %L är noll får inte andra argumentet vara noll" +msgstr "Om första argumentet till ATANH2 %L är noll fÃ¥r inte andra argumentet vara noll" #: fortran/simplify.c:1254 #, gcc-internal-format, gfc-internal-format msgid "Result of BESSEL_YN is -INF at %L" -msgstr "Resultatet av BESSEL_YN är -INF vid %L" +msgstr "Resultatet av BESSEL_YN är -INF vid %L" #: fortran/simplify.c:2439 #, gcc-internal-format, gfc-internal-format msgid "Argument of IACHAR at %L must be of length one" -msgstr "Argument till IACHAR vid %L måste ha längden ett" +msgstr "Argument till IACHAR vid %L mÃ¥ste ha längden ett" #: fortran/simplify.c:2446 #, gcc-internal-format, gfc-internal-format msgid "Argument of IACHAR function at %L outside of range 0..127" -msgstr "Argument till IACHAR-funktion vid %L är utanför sitt intevall 0..127" +msgstr "Argument till IACHAR-funktion vid %L är utanför sitt intevall 0..127" #: fortran/simplify.c:2561 #, gcc-internal-format, gfc-internal-format msgid "Sum of second and third arguments of IBITS exceeds bit size at %L" -msgstr "Summan av andra och tredje argumenten till IBITS överskrider bitstorleken vid %L" +msgstr "Summan av andra och tredje argumenten till IBITS överskrider bitstorleken vid %L" #: fortran/simplify.c:2636 #, gcc-internal-format, gfc-internal-format msgid "Argument of ICHAR at %L must be of length one" -msgstr "Argument till ICHAR vid %L måste ha längden ett" +msgstr "Argument till ICHAR vid %L mÃ¥ste ha längden ett" #. Left shift, as in SHIFTL. #: fortran/simplify.c:3002 fortran/simplify.c:3010 #, gcc-internal-format, gfc-internal-format msgid "Second argument of %s is negative at %L" -msgstr "Andra argumentet till %s är negativt vid %L" +msgstr "Andra argumentet till %s är negativt vid %L" #: fortran/simplify.c:3022 #, gcc-internal-format, gfc-internal-format msgid "Magnitude of second argument of %s exceeds bit size at %L" -msgstr "Magnituden på andra argumentet till %s överskrider bitstorleken vid %L" +msgstr "Magnituden pÃ¥ andra argumentet till %s överskrider bitstorleken vid %L" #: fortran/simplify.c:3148 #, gcc-internal-format, gfc-internal-format msgid "Magnitude of second argument of ISHFTC exceeds BIT_SIZE of first argument at %L" -msgstr "Magnituden på andra argumentet till ISHFTC överskrider BIT_SIZE av första argumentet vid %L" +msgstr "Magnituden pÃ¥ andra argumentet till ISHFTC överskrider BIT_SIZE av första argumentet vid %L" #: fortran/simplify.c:3448 fortran/simplify.c:3580 #, gcc-internal-format, gfc-internal-format msgid "DIM argument at %L is out of bounds" -msgstr "DIM-argument vid %L är utanför gränsen" +msgstr "DIM-argument vid %L är utanför gränsen" #: fortran/simplify.c:3751 #, gcc-internal-format, gfc-internal-format msgid "Argument of LOG at %L cannot be less than or equal to zero" -msgstr "Argument till LOG vid %L får inte vara mindre än eller lika med noll" +msgstr "Argument till LOG vid %L fÃ¥r inte vara mindre än eller lika med noll" #: fortran/simplify.c:3764 #, gcc-internal-format, gfc-internal-format msgid "Complex argument of LOG at %L cannot be zero" -msgstr "Komplext argument till LOG vid %L får inte vara noll" +msgstr "Komplext argument till LOG vid %L fÃ¥r inte vara noll" #: fortran/simplify.c:3792 #, gcc-internal-format, gfc-internal-format msgid "Argument of LOG10 at %L cannot be less than or equal to zero" -msgstr "Argument till LOG10 vid %L får inte vara mindre än eller lika med noll" +msgstr "Argument till LOG10 vid %L fÃ¥r inte vara mindre än eller lika med noll" #. Result is processor-dependent. #: fortran/simplify.c:4240 #, gcc-internal-format, gfc-internal-format msgid "Second argument MOD at %L is zero" -msgstr "Andra argumentet till MOD vid %L är noll" +msgstr "Andra argumentet till MOD vid %L är noll" #. Result is processor-dependent. #: fortran/simplify.c:4251 #, gcc-internal-format, gfc-internal-format msgid "Second argument of MOD at %L is zero" -msgstr "Andra argumentet till MOD vid %L är noll" +msgstr "Andra argumentet till MOD vid %L är noll" #. Result is processor-dependent. This processor just opts #. to not handle it at all. @@ -42794,47 +42797,47 @@ msgstr "Andra argumentet till MOD vid %L är noll" #: fortran/simplify.c:4293 fortran/simplify.c:4305 #, gcc-internal-format, gfc-internal-format msgid "Second argument of MODULO at %L is zero" -msgstr "Andra argumentet till MODULO vid %L är noll" +msgstr "Andra argumentet till MODULO vid %L är noll" #: fortran/simplify.c:4380 #, gcc-internal-format, gfc-internal-format msgid "Result of NEAREST is NaN at %L" -msgstr "Resultatet av NEAREST är NaN vid %L" +msgstr "Resultatet av NEAREST är NaN vid %L" #: fortran/simplify.c:4844 #, gcc-internal-format, gfc-internal-format msgid "Argument NCOPIES of REPEAT intrinsic is negative at %L" -msgstr "Argument NCOPIES till inbyggd REPEAT är negativt vid %L" +msgstr "Argument NCOPIES till inbyggd REPEAT är negativt vid %L" #: fortran/simplify.c:4899 #, gcc-internal-format, gfc-internal-format msgid "Argument NCOPIES of REPEAT intrinsic is too large at %L" -msgstr "Argumentet NCOPIES till inbyggd REPEAT är för stort vid %L" +msgstr "Argumentet NCOPIES till inbyggd REPEAT är för stort vid %L" #: fortran/simplify.c:5151 #, gcc-internal-format, gfc-internal-format msgid "Result of SCALE overflows its kind at %L" -msgstr "Resultat av SCALE spiller över sin sort vid %L" +msgstr "Resultat av SCALE spiller över sin sort vid %L" #: fortran/simplify.c:5861 #, gcc-internal-format, gfc-internal-format msgid "Argument of SQRT at %L has a negative value" -msgstr "Argument till SQRT vid %L har ett negativt värde" +msgstr "Argument till SQRT vid %L har ett negativt värde" #: fortran/simplify.c:6172 #, gcc-internal-format, gfc-internal-format msgid "Out of bounds in IMAGE_INDEX at %L for dimension %d, SUB has %ld and COARRAY lower bound is %ld)" -msgstr "Utanför gränserna i IMAGE_INDEX vid %L för dimension %d, SUB har %ld och COARRAY nedre gräns är %ld)" +msgstr "Utanför gränserna i IMAGE_INDEX vid %L för dimension %d, SUB har %ld och COARRAY nedre gräns är %ld)" #: fortran/simplify.c:6195 #, gcc-internal-format, gfc-internal-format msgid "Out of bounds in IMAGE_INDEX at %L for dimension %d, SUB has %ld and COARRAY upper bound is %ld)" -msgstr "Utanför gränserna i IMAGE_INDEX vid %L för dimension %d, SUB har %ld och COARRAY övre gräns är %ld)" +msgstr "Utanför gränserna i IMAGE_INDEX vid %L för dimension %d, SUB har %ld och COARRAY övre gräns är %ld)" #: fortran/simplify.c:6612 #, gcc-internal-format, gfc-internal-format msgid "Character '%s' in string at %L cannot be converted into character kind %d" -msgstr "Tecknet \"%s\" i sträng vid %L kan inte konverteras till tecken av sort %d" +msgstr "Tecknet â€%s†i sträng vid %L kan inte konverteras till tecken av sort %d" #: fortran/symbol.c:135 #, gcc-internal-format, gfc-internal-format @@ -42844,12 +42847,12 @@ msgstr "Dubblerad IMPLICIT NONE-sats vid %C" #: fortran/symbol.c:175 #, gcc-internal-format, gfc-internal-format msgid "Letter '%c' already set in IMPLICIT statement at %C" -msgstr "Tecknet \"%c\" redan satt i IMPLICIT-sats vid %C" +msgstr "Tecknet â€%c†redan satt i IMPLICIT-sats vid %C" #: fortran/symbol.c:197 #, gcc-internal-format, gfc-internal-format msgid "Cannot specify IMPLICIT at %C after IMPLICIT NONE" -msgstr "Det går inte att ange IMPLICIT vid %C efter IMPLICIT NONE" +msgstr "Det gÃ¥r inte att ange IMPLICIT vid %C efter IMPLICIT NONE" #: fortran/symbol.c:207 #, gcc-internal-format, gfc-internal-format @@ -42859,35 +42862,35 @@ msgstr "Tecknet %c har redan en IMPLICIT-typ vid %C" #: fortran/symbol.c:263 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %L has no IMPLICIT type" -msgstr "Symbolen \"%s\" vid %L har ingen IMPLICIT-typ" +msgstr "Symbolen â€%s†vid %L har ingen IMPLICIT-typ" #. BIND(C) variables should not be implicitly declared. #: fortran/symbol.c:280 #, gcc-internal-format, gfc-internal-format msgid "Implicitly declared BIND(C) variable '%s' at %L may not be C interoperable" -msgstr "Implicit deklarerad BIND(C)-variabel \"%s\" vid %L får inte vara C-interoperativ" +msgstr "Implicit deklarerad BIND(C)-variabel â€%s†vid %L fÃ¥r inte vara C-interoperativ" #. Dummy args to a BIND(C) routine may not be interoperable if #. they are implicitly typed. #: fortran/symbol.c:294 #, gcc-internal-format, gfc-internal-format msgid "Implicitly declared variable '%s' at %L may not be C interoperable but it is a dummy argument to the BIND(C) procedure '%s' at %L" -msgstr "Implicit deklarerad variabel \"%s\" vid %L får inte vara C-interoperativ men det är ett attrappargument till BIND(C)-proceduren \"%s\" vid %L" +msgstr "Implicit deklarerad variabel â€%s†vid %L fÃ¥r inte vara C-interoperativ men det är ett attrappargument till BIND(C)-proceduren â€%s†vid %L" #: fortran/symbol.c:335 #, gcc-internal-format, gfc-internal-format msgid "Function result '%s' at %L has no IMPLICIT type" -msgstr "Funktionsresultat \"%s\" vid %L har ingen IMPLICIT-typ" +msgstr "Funktionsresultat â€%s†vid %L har ingen IMPLICIT-typ" #: fortran/symbol.c:424 #, gcc-internal-format, gfc-internal-format msgid "%s attribute not allowed in BLOCK DATA program unit at %L" -msgstr "%s-attribut är inte tillåtet i programenheten BLOCK DATA vid %L" +msgstr "%s-attribut är inte tillÃ¥tet i programenheten BLOCK DATA vid %L" #: fortran/symbol.c:448 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Namelist group name at %L cannot have the SAVE attribute" -msgstr "Pekarinitieringsmål vid %L måste ha attributet SAVE" +msgstr "PekarinitieringsmÃ¥l vid %L mÃ¥ste ha attributet SAVE" #: fortran/symbol.c:482 #, gcc-internal-format, gfc-internal-format @@ -42897,12 +42900,12 @@ msgstr "Fortran 2003: Procedurpekare vid %C" #: fortran/symbol.c:644 #, gcc-internal-format, gfc-internal-format msgid "%s attribute applied to %s %s at %L" -msgstr "%s-attribut applicerat på %s %s vid %L" +msgstr "%s-attribut applicerat pÃ¥ %s %s vid %L" #: fortran/symbol.c:651 #, gcc-internal-format, gfc-internal-format msgid "BIND(C) applied to %s %s at %L" -msgstr "BIND(C) applicerat på %s %s vid %L" +msgstr "BIND(C) applicerat pÃ¥ %s %s vid %L" #: fortran/symbol.c:762 fortran/symbol.c:1485 #, gcc-internal-format, gfc-internal-format @@ -42912,7 +42915,7 @@ msgstr "%s-attribut i konflikt med %s-attribut vid %L" #: fortran/symbol.c:765 #, gcc-internal-format, gfc-internal-format msgid "%s attribute conflicts with %s attribute in '%s' at %L" -msgstr "%s-attribut i konflikt med %s-attribut i \"%s\" vid %L" +msgstr "%s-attribut i konflikt med %s-attribut i â€%s†vid %L" #: fortran/symbol.c:773 #, gcc-internal-format, gfc-internal-format @@ -42922,17 +42925,17 @@ msgstr "Fortran 2003: attribut %s med attribut %s vid %L" #: fortran/symbol.c:779 #, gcc-internal-format, gfc-internal-format msgid "Fortran 2003: %s attribute with %s attribute in '%s' at %L" -msgstr "Fortran 2003: attribut %s med attribut %s i \"%s\" vid %L" +msgstr "Fortran 2003: attribut %s med attribut %s i â€%s†vid %L" #: fortran/symbol.c:823 #, gcc-internal-format, gfc-internal-format msgid "Cannot change attributes of USE-associated symbol at %L" -msgstr "Det går inte att ändra attribut på USE-associerad symbol vid %L" +msgstr "Det gÃ¥r inte att ändra attribut pÃ¥ USE-associerad symbol vid %L" #: fortran/symbol.c:826 #, gcc-internal-format, gfc-internal-format msgid "Cannot change attributes of USE-associated symbol %s at %L" -msgstr "Det går inte att ändra attribut på USE-associerad symbol %s vid %L" +msgstr "Det gÃ¥r inte att ändra attribut pÃ¥ USE-associerad symbol %s vid %L" #: fortran/symbol.c:842 #, gcc-internal-format, gfc-internal-format @@ -42942,22 +42945,22 @@ msgstr "Dubblerat %s-attribut angivna vid %L" #: fortran/symbol.c:884 #, gcc-internal-format, gfc-internal-format msgid "ALLOCATABLE specified outside of INTERFACE body at %L" -msgstr "ALLOCATABLE angiven utanför INTERFACE-kropp vid %L" +msgstr "ALLOCATABLE angiven utanför INTERFACE-kropp vid %L" #: fortran/symbol.c:910 #, gcc-internal-format, gfc-internal-format msgid "CODIMENSION specified for '%s' outside its INTERFACE body at %L" -msgstr "CODIMENSION angiven för \"%s\" utanför dess INTERFACE-kropp vid %L" +msgstr "CODIMENSION angiven för â€%s†utanför dess INTERFACE-kropp vid %L" #: fortran/symbol.c:936 #, gcc-internal-format, gfc-internal-format msgid "DIMENSION specified for '%s' outside its INTERFACE body at %L" -msgstr "DIMENSION angiven för \"%s\" utanför dess INTERFACE-kropp vid %L" +msgstr "DIMENSION angiven för â€%s†utanför dess INTERFACE-kropp vid %L" #: fortran/symbol.c:1066 #, gcc-internal-format, gfc-internal-format msgid "Cray Pointee at %L appears in multiple pointer() statements" -msgstr "Cray-utpekad vid %L förekommer i flera pointer()-satser" +msgstr "Cray-utpekad vid %L förekommer i flera pointer()-satser" #: fortran/symbol.c:1085 #, gcc-internal-format, gfc-internal-format @@ -42992,17 +42995,17 @@ msgstr "Dubblerat ASYNCHRONOUS-attribut angivet vid %L" #: fortran/symbol.c:1481 #, gcc-internal-format, gfc-internal-format msgid "%s attribute of '%s' conflicts with %s attribute at %L" -msgstr "%s-attribut på \"%s\" i konflikt med %s-attribut vid %L" +msgstr "%s-attribut pÃ¥ â€%s†i konflikt med %s-attribut vid %L" #: fortran/symbol.c:1515 #, gcc-internal-format, gfc-internal-format msgid "%s procedure at %L is already declared as %s procedure" -msgstr "Proceduren \"%s\" vid %L är redan deklarerad som %s-procedur" +msgstr "Proceduren â€%s†vid %L är redan deklarerad som %s-procedur" #: fortran/symbol.c:1550 #, gcc-internal-format, gfc-internal-format msgid "INTENT (%s) conflicts with INTENT(%s) at %L" -msgstr "INTENT (%s) står i konflikt med INTENT(%s) vid %L" +msgstr "INTENT (%s) stÃ¥r i konflikt med INTENT(%s) vid %L" #: fortran/symbol.c:1574 #, gcc-internal-format, gfc-internal-format @@ -43032,12 +43035,12 @@ msgstr "Fortran 2003: EXTENDS vid %L" #: fortran/symbol.c:1641 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %L already has an explicit interface" -msgstr "Symbolen \"%s\" vid %L har redan ett explicit gränssnitt" +msgstr "Symbolen â€%s†vid %L har redan ett explicit gränssnitt" #: fortran/symbol.c:1648 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %L has attributes specified outside its INTERFACE body" -msgstr "\"%s\" vid %L har attribut angivna utanför dess INTERFACE-kropp" +msgstr "â€%s†vid %L har attribut angivna utanför dess INTERFACE-kropp" #: fortran/symbol.c:1682 #, gcc-internal-format, gfc-internal-format @@ -43047,47 +43050,47 @@ msgstr "" #: fortran/symbol.c:1686 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %L already has basic type of %s" -msgstr "Symbolen \"%s\" vid %L har redan grundtypen %s" +msgstr "Symbolen â€%s†vid %L har redan grundtypen %s" #: fortran/symbol.c:1693 #, gcc-internal-format, gfc-internal-format msgid "Procedure '%s' at %L may not have basic type of %s" -msgstr "Procedur \"%s\" vid %L får inte ha grundtypen %s" +msgstr "Procedur â€%s†vid %L fÃ¥r inte ha grundtypen %s" #: fortran/symbol.c:1705 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %L cannot have a type" -msgstr "Symbolen \"%s\" vid %L kan inte ha en typ" +msgstr "Symbolen â€%s†vid %L kan inte ha en typ" #: fortran/symbol.c:1874 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' at %C already declared at %L" -msgstr "Komponenten \"%s\" vid %C är redan deklarerad vid %L" +msgstr "Komponenten â€%s†vid %C är redan deklarerad vid %L" #: fortran/symbol.c:1885 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' at %C already in the parent type at %L" -msgstr "Komponenten \"%s\" vid %C finns redan i föräldratypen vid %L" +msgstr "Komponenten â€%s†vid %C finns redan i föräldratypen vid %L" #: fortran/symbol.c:1967 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %C is ambiguous" -msgstr "Symbolen \"%s\" vid %C är tvetydig" +msgstr "Symbolen â€%s†vid %C är tvetydig" #: fortran/symbol.c:1999 #, gcc-internal-format, gfc-internal-format msgid "Derived type '%s' at %C is being used before it is defined" -msgstr "Härledd typ \"%s\" vid %C används före den är definierad" +msgstr "Härledd typ â€%s†vid %C används före den är definierad" #: fortran/symbol.c:2037 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' at %C is a PRIVATE component of '%s'" -msgstr "Komponent \"%s\" vid %C är en PRIVATE-komponent i \"%s\"" +msgstr "Komponent â€%s†vid %C är en PRIVATE-komponent i â€%sâ€" #: fortran/symbol.c:2055 #, gcc-internal-format, gfc-internal-format msgid "'%s' at %C is not a member of the '%s' structure" -msgstr "\"%s\" vid %C är inte en medlem av posten \"%s\"" +msgstr "â€%s†vid %C är inte en medlem av posten â€%sâ€" #: fortran/symbol.c:2196 #, gcc-internal-format, gfc-internal-format @@ -43097,71 +43100,71 @@ msgstr "Dubblerad satsetikett %d vid %L och %L" #: fortran/symbol.c:2206 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %C already referenced as branch target" -msgstr "Etikett %d vid %C är redan refererad som ett grenmål" +msgstr "Etikett %d vid %C är redan refererad som ett grenmÃ¥l" #: fortran/symbol.c:2215 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %C already referenced as a format label" -msgstr "Etiketten %d vid %C är redan refererad som en formatetikett" +msgstr "Etiketten %d vid %C är redan refererad som en formatetikett" #: fortran/symbol.c:2257 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %C previously used as a FORMAT label" -msgstr "Etikett %d vid %C användes tidigare som en FORMAT-etikett" +msgstr "Etikett %d vid %C användes tidigare som en FORMAT-etikett" #: fortran/symbol.c:2265 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %C previously used as branch target" -msgstr "Etikett %d vid %C användes tidigare som ett grenmål" +msgstr "Etikett %d vid %C användes tidigare som ett grenmÃ¥l" #: fortran/symbol.c:2578 #, gcc-internal-format, gfc-internal-format msgid "Name '%s' at %C is an ambiguous reference to '%s' from module '%s'" -msgstr "Namnet \"%s\" vid %C är en tvetydig referens till \"%s\" från modulen \"%s\"" +msgstr "Namnet â€%s†vid %C är en tvetydig referens till â€%s†frÃ¥n modulen â€%sâ€" #: fortran/symbol.c:2581 #, gcc-internal-format, gfc-internal-format msgid "Name '%s' at %C is an ambiguous reference to '%s' from current program unit" -msgstr "Namnet \"%s\" vid %C är en tvetydig referens till \"%s\" från den aktuella programenheten" +msgstr "Namnet â€%s†vid %C är en tvetydig referens till â€%s†frÃ¥n den aktuella programenheten" -# Vad är "host associated"? +# Vad är "host associated"? #. Symbol is from another namespace. #: fortran/symbol.c:2761 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %C has already been host associated" -msgstr "Symbolen \"%s\" vid %C har redan blivit host-associerad" +msgstr "Symbolen â€%s†vid %C har redan blivit host-associerad" #: fortran/symbol.c:3604 #, gcc-internal-format, gfc-internal-format msgid "Derived type '%s' declared at %L must have the BIND attribute to be C interoperable" -msgstr "Härledd typ \"%s\" deklarerad vid %L måste ha attributet BIND för att vara ett C-interoperativ" +msgstr "Härledd typ â€%s†deklarerad vid %L mÃ¥ste ha attributet BIND för att vara ett C-interoperativ" #: fortran/symbol.c:3622 #, gcc-internal-format, gfc-internal-format msgid "Derived type '%s' with BIND(C) attribute at %L is empty, and may be inaccessible by the C companion processor" -msgstr "Härledd typ \"%s\" med attributet BIND(C) vid %L är tom, och kan vara otillgängliga av C-följeslagarprocessorn" +msgstr "Härledd typ â€%s†med attributet BIND(C) vid %L är tom, och kan vara otillgängliga av C-följeslagarprocessorn" #: fortran/symbol.c:3643 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' at %L cannot have the POINTER attribute because it is a member of the BIND(C) derived type '%s' at %L" -msgstr "Komponent \"%s\" vid %L får inte ha attributet POINTER eftersom det är en medlem av den BIND(C)-härledda typen \"%s\" vid %L" +msgstr "Komponent â€%s†vid %L fÃ¥r inte ha attributet POINTER eftersom det är en medlem av den BIND(C)-härledda typen â€%s†vid %L" #: fortran/symbol.c:3653 #, gcc-internal-format, gfc-internal-format msgid "Procedure pointer component '%s' at %L cannot be a member of the BIND(C) derived type '%s' at %L" -msgstr "Procedurpekarkomponenten \"%s\" vid %L kan inte vara en medlem av den BIND(C)-härledda typen \"%s\" vid %L" +msgstr "Procedurpekarkomponenten â€%s†vid %L kan inte vara en medlem av den BIND(C)-härledda typen â€%s†vid %L" #: fortran/symbol.c:3664 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' at %L cannot have the ALLOCATABLE attribute because it is a member of the BIND(C) derived type '%s' at %L" -msgstr "Komponent \"%s\" vid %L får inte ha attributet ALLOCATABLE eftersom det är en medlem av den BIND(C)-härledda typen \"%s\" vid %L" +msgstr "Komponent â€%s†vid %L fÃ¥r inte ha attributet ALLOCATABLE eftersom det är en medlem av den BIND(C)-härledda typen â€%s†vid %L" #. If the derived type is bind(c), all fields must be #. interop. #: fortran/symbol.c:3702 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' in derived type '%s' at %L may not be C interoperable, even though derived type '%s' is BIND(C)" -msgstr "Komponent \"%s\" i härledd typ \"%s\" vid %L får inte vara C-interoperativ, trots att den härledda typen \"%s\" är BIND(C)" +msgstr "Komponent â€%s†i härledd typ â€%s†vid %L fÃ¥r inte vara C-interoperativ, trots att den härledda typen â€%s†är BIND(C)" #. If derived type is param to bind(c) routine, or to one #. of the iso_c_binding procs, it must be interoperable, so @@ -43169,57 +43172,57 @@ msgstr "Komponent \"%s\" i härledd typ \"%s\" vid %L får inte vara C-interoperat #: fortran/symbol.c:3711 #, gcc-internal-format, gfc-internal-format msgid "Component '%s' in derived type '%s' at %L may not be C interoperable" -msgstr "Komponent \"%s\" i härledd typ \"%s\" vid %L får inte vara C-interoperativ" +msgstr "Komponent â€%s†i härledd typ â€%s†vid %L fÃ¥r inte vara C-interoperativ" #: fortran/symbol.c:3725 #, gcc-internal-format, gfc-internal-format msgid "Derived type '%s' at %L cannot be declared with both PRIVATE and BIND(C) attributes" -msgstr "Härledd typ \"%s\" vid %L kan inte deklareras med både attributet PRIVATE och BIND(C)" +msgstr "Härledd typ â€%s†vid %L kan inte deklareras med bÃ¥de attributet PRIVATE och BIND(C)" #: fortran/symbol.c:3733 #, gcc-internal-format, gfc-internal-format msgid "Derived type '%s' at %L cannot have the SEQUENCE attribute because it is BIND(C)" -msgstr "Härledd typ \"%s\" vid %L kan inte ha attributet SEQUENCE för att den är BIND(C)" +msgstr "Härledd typ â€%s†vid %L kan inte ha attributet SEQUENCE för att den är BIND(C)" #: fortran/symbol.c:4740 #, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' is used before it is typed at %L" -msgstr "Symbolen \"%s\" används före den har fått sin typ vid %L" +msgstr "Symbolen â€%s†används före den har fÃ¥tt sin typ vid %L" #: fortran/symbol.c:4746 #, gcc-internal-format, gfc-internal-format msgid "Extension: Symbol '%s' is used before it is typed at %L" -msgstr "Utökning: Symbolen \"%s\" används före den fått sin typ vid %L" +msgstr "Utökning: Symbolen â€%s†används före den fÃ¥tt sin typ vid %L" #: fortran/target-memory.c:643 #, gcc-internal-format, gfc-internal-format msgid "Overlapping unequal initializers in EQUIVALENCE at %L" -msgstr "Överlappande olika initierare i EQUIVALENCE vid %L" +msgstr "Överlappande olika initierare i EQUIVALENCE vid %L" #: fortran/target-memory.c:731 #, gcc-internal-format, gfc-internal-format msgid "BOZ constant at %L is too large (%ld vs %ld bits)" -msgstr "BOZ-konstant vid %L är för stor (%ld jämfört med %ld bitar)" +msgstr "BOZ-konstant vid %L är för stor (%ld jämfört med %ld bitar)" #: fortran/trans-array.c:6999 #, gcc-internal-format, gfc-internal-format msgid "Creating array temporary at %L for argument '%s'" -msgstr "Skapar vektortemporär vid %L för argument \"%s\"" +msgstr "Skapar vektortemporär vid %L för argument â€%sâ€" #: fortran/trans-array.c:8074 #, gcc-internal-format msgid "Possible front-end bug: Deferred array size without pointer, allocatable attribute or derived type without allocatable components." -msgstr "Möjligt fel i framänden: Fördröjd vektorstorlek utan pekare, attributet allocatable eller härledd typ utan allokerbara komponenter." +msgstr "Möjligt fel i framänden: Fördröjd vektorstorlek utan pekare, attributet allocatable eller härledd typ utan allokerbara komponenter." #: fortran/trans-array.c:8556 #, gcc-internal-format, gfc-internal-format msgid "bad expression type during walk (%d)" -msgstr "felaktig uttryckstyp under genomlöpning (%d)" +msgstr "felaktig uttryckstyp under genomlöpning (%d)" #: fortran/trans-common.c:400 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Named COMMON block '%s' at %L shall be of the same size as elsewhere (%lu vs %lu bytes)" -msgstr "Namngivet COMMON-block \"%s\" vid %L skall ha samma storlek" +msgstr "Namngivet COMMON-block â€%s†vid %L skall ha samma storlek" #: fortran/trans-common.c:853 #, gcc-internal-format, gfc-internal-format @@ -43234,53 +43237,53 @@ msgstr "Ogiltig referenstyp vid %L som EQUIVALENCE-objekt" #: fortran/trans-common.c:901 #, gcc-internal-format, gfc-internal-format msgid "Inconsistent equivalence rules involving '%s' at %L and '%s' at %L" -msgstr "Inkonsistenta ekvivalensregler rörande \"%s\" vid %L och \"%s\" vid %L" +msgstr "Inkonsistenta ekvivalensregler rörande â€%s†vid %L och â€%s†vid %L" #. Aligning this field would misalign a previous field. #: fortran/trans-common.c:1034 #, gcc-internal-format, gfc-internal-format msgid "The equivalence set for variable '%s' declared at %L violates alignment requirements" -msgstr "Ekvivalensmängden för variabeln \"%s\" deklarerad vid %L bryter mot justeringskraven" +msgstr "Ekvivalensmängden för variabeln â€%s†deklarerad vid %L bryter mot justeringskraven" #: fortran/trans-common.c:1099 #, gcc-internal-format, gfc-internal-format msgid "Equivalence for '%s' does not match ordering of COMMON '%s' at %L" -msgstr "Ekvivalens för \"%s\" stämmer inte med ordningen av COMMON \"%s\" vid %L" +msgstr "Ekvivalens för â€%s†stämmer inte med ordningen av COMMON â€%s†vid %L" #: fortran/trans-common.c:1114 #, gcc-internal-format, gfc-internal-format msgid "The equivalence set for '%s' cause an invalid extension to COMMON '%s' at %L" -msgstr "Ekvivalensmängden för \"%s\" orsakar en ogiltig utvidgning av COMMON \"%s\" vid %L" +msgstr "Ekvivalensmängden för â€%s†orsakar en ogiltig utvidgning av COMMON â€%s†vid %L" #: fortran/trans-common.c:1129 #, gcc-internal-format, gfc-internal-format msgid "Padding of %d bytes required before '%s' in COMMON '%s' at %L; reorder elements or use -fno-align-commons" -msgstr "Utfyllnad med %d byte krävs före \"%s\" i COMMON \"%s\" vid %L, byt ordning på element eller använd -fno-align-commons" +msgstr "Utfyllnad med %d byte krävs före â€%s†i COMMON â€%s†vid %L, byt ordning pÃ¥ element eller använd -fno-align-commons" #: fortran/trans-common.c:1134 #, gcc-internal-format, gfc-internal-format msgid "Padding of %d bytes required before '%s' in COMMON at %L; reorder elements or use -fno-align-commons" -msgstr "Utfyllnad med %d byte krävs före \"%s\" i COMMON vid %L, byt ordning på element eller använd -fno-align-commons" +msgstr "Utfyllnad med %d byte krävs före â€%s†i COMMON vid %L, byt ordning pÃ¥ element eller använd -fno-align-commons" #: fortran/trans-common.c:1155 #, gcc-internal-format, gfc-internal-format msgid "COMMON '%s' at %L does not exist" -msgstr "COMMON \"%s\" vid %L existerar inte" +msgstr "COMMON â€%s†vid %L existerar inte" #: fortran/trans-common.c:1163 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "COMMON '%s' at %L requires %d bytes of padding; reorder elements or use -fno-align-commons" -msgstr "COMMON \"%s\" vid %L kräver %d byte utfyllnad i början, byt ordning på element eller använd -fno-align-commons" +msgstr "COMMON â€%s†vid %L kräver %d byte utfyllnad i början, byt ordning pÃ¥ element eller använd -fno-align-commons" #: fortran/trans-common.c:1167 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "COMMON at %L requires %d bytes of padding; reorder elements or use -fno-align-commons" -msgstr "COMMON vid %L kräver %d byte utfyllnad i början, byt ordning på element eller använd -fno-align-commons" +msgstr "COMMON vid %L kräver %d byte utfyllnad i början, byt ordning pÃ¥ element eller använd -fno-align-commons" #: fortran/trans-const.c:313 #, gcc-internal-format, gfc-internal-format msgid "Assigning value other than 0 or 1 to LOGICAL has undefined result at %L" -msgstr "Tilldelning annat värde än 0 eller 1 till LOGICAL har odefinierat resultat vid %L" +msgstr "Tilldelning annat värde än 0 eller 1 till LOGICAL har odefinierat resultat vid %L" #: fortran/trans-const.c:349 #, gcc-internal-format, gfc-internal-format @@ -43295,88 +43298,88 @@ msgstr "ej konstant initieringsuttryck vid %L" #: fortran/trans-decl.c:1348 #, gcc-internal-format msgid "intrinsic variable which isn't a procedure" -msgstr "inbyggd variabel som inte är en procedur" +msgstr "inbyggd variabel som inte är en procedur" #: fortran/trans-decl.c:3519 fortran/trans-decl.c:5367 #, gcc-internal-format, gfc-internal-format msgid "Return value of function '%s' at %L not set" -msgstr "Returvärdet för funktionen \"%s\" vid %L är inte satt" +msgstr "Returvärdet för funktionen â€%s†vid %L är inte satt" #: fortran/trans-decl.c:3838 #, gcc-internal-format msgid "Deferred type parameter not yet supported" -msgstr "Fördröjd typparameter stödjs inte ännu" +msgstr "Fördröjd typparameter stödjs inte ännu" #: fortran/trans-decl.c:4045 #, gcc-internal-format, gfc-internal-format msgid "backend decl for module variable %s already exists" -msgstr "bakändedeklaration för modulvariabel %s finns redan" +msgstr "bakändedeklaration för modulvariabel %s finns redan" #: fortran/trans-decl.c:4569 #, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' at %L was declared INTENT(OUT) but was not set" -msgstr "Attrappargument \"%s\" vid %L deklarerades INTENT(OUT) men sattes inte" +msgstr "Attrappargument â€%s†vid %L deklarerades INTENT(OUT) men sattes inte" #: fortran/trans-decl.c:4573 #, gcc-internal-format, gfc-internal-format msgid "Derived-type dummy argument '%s' at %L was declared INTENT(OUT) but was not set and does not have a default initializer" -msgstr "Attrappargument med härledd typ \"%s\" vid %L deklarerades INTENT(OUT) men sattes inte och har inte en standardinitierare" +msgstr "Attrappargument med härledd typ â€%s†vid %L deklarerades INTENT(OUT) men sattes inte och har inte en standardinitierare" #: fortran/trans-decl.c:4582 #, gcc-internal-format, gfc-internal-format msgid "Unused dummy argument '%s' at %L" -msgstr "Oanvänt attrappargument \"%s\" vid %L" +msgstr "Oanvänt attrappargument â€%s†vid %L" #: fortran/trans-decl.c:4595 #, gcc-internal-format, gfc-internal-format msgid "Unused variable '%s' declared at %L" -msgstr "Oanvänd variabel \"%s\" deklarerad vid %L" +msgstr "Oanvänd variabel â€%s†deklarerad vid %L" #: fortran/trans-decl.c:4602 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Unused module variable '%s' which has been explicitly imported at %L" -msgstr "Oanvänd variabel \"%s\" deklarerad vid %L" +msgstr "Oanvänd variabel â€%s†deklarerad vid %L" #: fortran/trans-decl.c:4649 #, gcc-internal-format, gfc-internal-format msgid "Unused parameter '%s' declared at %L" -msgstr "Oanvänd parameter \"%s\" deklarerad vid %L" +msgstr "Oanvänd parameter â€%s†deklarerad vid %L" #: fortran/trans-decl.c:4652 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Unused parameter '%s' which has been explicitly imported at %L" -msgstr "Oanvänd parameter \"%s\" deklarerad vid %L" +msgstr "Oanvänd parameter â€%s†deklarerad vid %L" #: fortran/trans-decl.c:4667 #, gcc-internal-format, gfc-internal-format msgid "Return value '%s' of function '%s' declared at %L not set" -msgstr "Returvärdet \"%s\" för funktionen \"%s\" deklarerad vid %L är inte satt" +msgstr "Returvärdet â€%s†för funktionen â€%s†deklarerad vid %L är inte satt" #: fortran/trans-expr.c:1985 #, gcc-internal-format msgid "Unknown intrinsic op" -msgstr "Okänd inbyggd op" +msgstr "Okänd inbyggd op" #: fortran/trans-expr.c:3213 #, gcc-internal-format, gfc-internal-format msgid "Unknown argument list function at %L" -msgstr "Okänd argumentlistefunktion vid %L" +msgstr "Okänd argumentlistefunktion vid %L" #: fortran/trans-intrinsic.c:856 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic function %s(%d) not recognized" -msgstr "Inbyggd funktion %s(%d) känns inte igen" +msgstr "Inbyggd funktion %s(%d) känns inte igen" #: fortran/trans-intrinsic.c:1035 fortran/trans-intrinsic.c:1385 #: fortran/trans-intrinsic.c:1563 #, gcc-internal-format, gfc-internal-format msgid "'dim' argument of %s intrinsic at %L is not a valid dimension index" -msgstr "\"dim\"-argumentet till inbyggd \"%s\" vid %L är inte ett giltigt dimensionsindex" +msgstr "â€dimâ€-argumentet till inbyggd â€%s†vid %L är inte ett giltigt dimensionsindex" #: fortran/trans-io.c:2031 #, gcc-internal-format, gfc-internal-format msgid "Derived type '%s' at %L has PRIVATE components" -msgstr "Härledd typ \"%s\" vid %L har PRIVATE-komponenter" +msgstr "Härledd typ â€%s†vid %L har PRIVATE-komponenter" #: fortran/trans-io.c:2179 #, gcc-internal-format, gfc-internal-format @@ -43401,57 +43404,57 @@ msgstr "" #: fortran/trans-types.c:497 #, fuzzy, gcc-internal-format msgid "INTEGER(KIND=8) is not available for -fdefault-integer-8 option" -msgstr "heltalssort=8 inte tillgänglig för flagga -fdefault-integer-8" +msgstr "heltalssort=8 inte tillgänglig för flagga -fdefault-integer-8" #: fortran/trans-types.c:505 #, fuzzy, gcc-internal-format msgid "INTEGER(KIND=8) is not available for -finteger-4-integer-8 option" -msgstr "heltalssort=8 inte tillgänglig för flagga -fdefault-integer-8" +msgstr "heltalssort=8 inte tillgänglig för flagga -fdefault-integer-8" #: fortran/trans-types.c:523 #, fuzzy, gcc-internal-format msgid "REAL(KIND=8) is not available for -fdefault-real-8 option" -msgstr "reell sort=8 inte tillgänglig för flagga -fdefault-real-8" +msgstr "reell sort=8 inte tillgänglig för flagga -fdefault-real-8" #: fortran/trans-types.c:530 #, fuzzy, gcc-internal-format msgid "REAL(KIND=8) is not available for -freal-4-real-8 option" -msgstr "reell sort=8 inte tillgänglig för flagga -fdefault-real-8" +msgstr "reell sort=8 inte tillgänglig för flagga -fdefault-real-8" #: fortran/trans-types.c:537 #, fuzzy, gcc-internal-format msgid "REAL(KIND=10) is not available for -freal-4-real-10 option" -msgstr "reell sort=8 inte tillgänglig för flagga -fdefault-real-8" +msgstr "reell sort=8 inte tillgänglig för flagga -fdefault-real-8" #: fortran/trans-types.c:544 #, fuzzy, gcc-internal-format msgid "REAL(KIND=16) is not available for -freal-4-real-16 option" -msgstr "reell sort=8 inte tillgänglig för flagga -fdefault-real-8" +msgstr "reell sort=8 inte tillgänglig för flagga -fdefault-real-8" #: fortran/trans-types.c:558 #, gcc-internal-format msgid "Use of -fdefault-double-8 requires -fdefault-real-8" -msgstr "Användning av -fdefault-double-8 kräver -fdefault-real-8" +msgstr "Användning av -fdefault-double-8 kräver -fdefault-real-8" #: fortran/trans-types.c:567 #, fuzzy, gcc-internal-format msgid "REAL(KIND=4) is not available for -freal-8-real-4 option" -msgstr "reell sort=8 inte tillgänglig för flagga -fdefault-real-8" +msgstr "reell sort=8 inte tillgänglig för flagga -fdefault-real-8" #: fortran/trans-types.c:574 #, fuzzy, gcc-internal-format msgid "REAL(KIND=10) is not available for -freal-8-real-10 option" -msgstr "reell sort=8 inte tillgänglig för flagga -fdefault-real-8" +msgstr "reell sort=8 inte tillgänglig för flagga -fdefault-real-8" #: fortran/trans-types.c:581 #, fuzzy, gcc-internal-format msgid "REAL(KIND=10) is not available for -freal-8-real-16 option" -msgstr "reell sort=8 inte tillgänglig för flagga -fdefault-real-8" +msgstr "reell sort=8 inte tillgänglig för flagga -fdefault-real-8" #: fortran/trans-types.c:1432 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Array element size too big at %C" -msgstr "Vektorelementstorlek är för stor" +msgstr "Vektorelementstorlek är för stor" #: fortran/trans.c:1550 #, gcc-internal-format @@ -43466,17 +43469,17 @@ msgstr "felaktig metodsignatur" #: java/class.c:895 #, gcc-internal-format msgid "misplaced ConstantValue attribute (not in any field)" -msgstr "felplacerat attribut ConstantValue (inte i något fält)" +msgstr "felplacerat attribut ConstantValue (inte i nÃ¥got fält)" #: java/class.c:898 #, gcc-internal-format, gfc-internal-format msgid "duplicate ConstantValue attribute for field '%s'" -msgstr "dubblerat ConstantValue-attribut för fält \"%s\"" +msgstr "dubblerat ConstantValue-attribut för fält â€%sâ€" #: java/class.c:909 #, gcc-internal-format, gfc-internal-format msgid "ConstantValue attribute of field '%s' has wrong type" -msgstr "attributet ConstantValue på fältet \"%s\" har fel typ" +msgstr "attributet ConstantValue pÃ¥ fältet â€%s†har fel typ" #: java/class.c:1637 #, gcc-internal-format @@ -43486,37 +43489,37 @@ msgstr "abstrakt metod i icke-abstrakt klass" #: java/class.c:2701 #, gcc-internal-format msgid "non-static method %q+D overrides static method" -msgstr "icke-statisk metod %q+D åsidosätter statisk metod" +msgstr "icke-statisk metod %q+D Ã¥sidosätter statisk metod" #: java/decl.c:1206 #, gcc-internal-format msgid "%q+D used prior to declaration" -msgstr "%q+D använd före deklarationen" +msgstr "%q+D använd före deklarationen" #: java/decl.c:1629 #, gcc-internal-format msgid "In %+D: overlapped variable and exception ranges at %d" -msgstr "I %+D: överlappande variabel- och undantagsintervall vid %d" +msgstr "I %+D: överlappande variabel- och undantagsintervall vid %d" #: java/decl.c:1680 #, gcc-internal-format msgid "bad type in parameter debug info" -msgstr "felaktig typ i felsökningsinformation om parameter" +msgstr "felaktig typ i felsökningsinformation om parameter" #: java/decl.c:1689 #, gcc-internal-format msgid "bad PC range for debug info for local %q+D" -msgstr "felaktigt PC-intervall för felsökningsinformation för lokal %q+D" +msgstr "felaktigt PC-intervall för felsökningsinformation för lokal %q+D" #: java/expr.c:357 #, gcc-internal-format, gfc-internal-format msgid "need to insert runtime check for %s" -msgstr "behöver lägga in en körtidskontroll för %s" +msgstr "behöver lägga in en körtidskontroll för %s" #: java/expr.c:505 java/expr.c:552 #, gcc-internal-format, gfc-internal-format msgid "assert: %s is assign compatible with %s" -msgstr "försäkran: %s är tilldelningskompatibel med %s" +msgstr "försäkran: %s är tilldelningskompatibel med %s" #: java/expr.c:663 #, gcc-internal-format @@ -43526,57 +43529,57 @@ msgstr "underspill i stack - dup*-operation" #: java/expr.c:1662 #, gcc-internal-format msgid "reference %qs is ambiguous: appears in interface %qs and interface %qs" -msgstr "referens %qs är tvetydig: förekommer i gränssnitt %qs och gränssnitt %qs" +msgstr "referens %qs är tvetydig: förekommer i gränssnitt %qs och gränssnitt %qs" #: java/expr.c:1690 #, gcc-internal-format msgid "field %qs not found" -msgstr "fält %qs finns inte" +msgstr "fält %qs finns inte" #: java/expr.c:2249 #, gcc-internal-format, gfc-internal-format msgid "method '%s' not found in class" -msgstr "metod \"%s\" kan inte hittas i klassen" +msgstr "metod â€%s†kan inte hittas i klassen" #: java/expr.c:2442 #, gcc-internal-format, gfc-internal-format msgid "failed to find class '%s'" -msgstr "kunde inte hitta klassen \"%s\"" +msgstr "kunde inte hitta klassen â€%sâ€" #: java/expr.c:2483 #, gcc-internal-format, gfc-internal-format msgid "class '%s' has no method named '%s' matching signature '%s'" -msgstr "klass \"%s\" har ingen metod med namnet \"%s\" som stämmer med signaturen \"%s\"" +msgstr "klass â€%s†har ingen metod med namnet â€%s†som stämmer med signaturen â€%sâ€" #: java/expr.c:2514 #, gcc-internal-format msgid "invokestatic on non static method" -msgstr "invokestatic på metod som inte är statisk" +msgstr "invokestatic pÃ¥ metod som inte är statisk" #: java/expr.c:2519 #, gcc-internal-format msgid "invokestatic on abstract method" -msgstr "invokestatic på abstrakt metod" +msgstr "invokestatic pÃ¥ abstrakt metod" #: java/expr.c:2527 #, gcc-internal-format msgid "invoke[non-static] on static method" -msgstr "invoke[non-static] på statisk metod" +msgstr "invoke[non-static] pÃ¥ statisk metod" #: java/expr.c:2885 #, gcc-internal-format, gfc-internal-format msgid "missing field '%s' in '%s'" -msgstr "fält \"%s\" saknas i \"%s\"" +msgstr "fält â€%s†saknas i â€%sâ€" #: java/expr.c:2892 #, gcc-internal-format, gfc-internal-format msgid "mismatching signature for field '%s' in '%s'" -msgstr "signaturen stämmer inte för fält \"%s\" i \"%s\"" +msgstr "signaturen stämmer inte för fält â€%s†i â€%sâ€" #: java/expr.c:2921 #, gcc-internal-format msgid "assignment to final field %q+D not in field%'s class" -msgstr "tilldelning till slutligt fält %q+D som inte är i fältets klass" +msgstr "tilldelning till slutligt fält %q+D som inte är i fältets klass" #: java/expr.c:3149 #, gcc-internal-format @@ -43586,43 +43589,43 @@ msgstr "ogiltigt PC i radnummertabell" #: java/expr.c:3199 #, gcc-internal-format, gfc-internal-format msgid "unreachable bytecode from %d to before %d" -msgstr "onåbar bytekod från %d till före %d" +msgstr "onÃ¥bar bytekod frÃ¥n %d till före %d" #: java/expr.c:3241 #, gcc-internal-format, gfc-internal-format msgid "unreachable bytecode from %d to the end of the method" -msgstr "onåbar bytekod från %d till slutet av metoden" +msgstr "onÃ¥bar bytekod frÃ¥n %d till slutet av metoden" #. duplicate code from LOAD macro #: java/expr.c:3549 #, fuzzy, gcc-internal-format msgid "unrecognized wide sub-instruction" -msgstr "okänd bred underinstruktion" +msgstr "okänd bred underinstruktion" #: java/jcf-parse.c:506 #, gcc-internal-format, gfc-internal-format msgid "<constant pool index %d not in range>" -msgstr "<index %d till konstant-pool är utanför sitt intervall>" +msgstr "<index %d till konstant-pool är utanför sitt intervall>" #: java/jcf-parse.c:516 #, gcc-internal-format, gfc-internal-format msgid "<constant pool index %d unexpected type" -msgstr "<konstantpoolindex %d har oväntad typ" +msgstr "<konstantpoolindex %d har oväntad typ" #: java/jcf-parse.c:1098 #, gcc-internal-format msgid "bad string constant" -msgstr "felaktig strängkonstant" +msgstr "felaktig strängkonstant" #: java/jcf-parse.c:1116 #, gcc-internal-format, gfc-internal-format msgid "bad value constant type %d, index %d" -msgstr "felaktig värdekonstanttyp %d, index %d" +msgstr "felaktig värdekonstanttyp %d, index %d" #: java/jcf-parse.c:1396 java/jcf-parse.c:1402 #, gcc-internal-format, gfc-internal-format msgid "cannot find file for class %s" -msgstr "kan inte hitta filen för klass %s" +msgstr "kan inte hitta filen för klass %s" #: java/jcf-parse.c:1427 #, gcc-internal-format @@ -43638,12 +43641,12 @@ msgstr "fel under tolkning av konstantpool" #: java/jcf-parse.c:1445 #, gcc-internal-format, gfc-internal-format msgid "reading class %s for the second time from %s" -msgstr "läser klass %s för andra gången från %s" +msgstr "läser klass %s för andra gÃ¥ngen frÃ¥n %s" #: java/jcf-parse.c:1463 #, gcc-internal-format msgid "error while parsing fields" -msgstr "fel under tolkning av fält" +msgstr "fel under tolkning av fält" #: java/jcf-parse.c:1466 #, gcc-internal-format @@ -43658,7 +43661,7 @@ msgstr "fel vid tolkning av slutliga attribut" #: java/jcf-parse.c:1508 #, gcc-internal-format msgid "duplicate class will only be compiled once" -msgstr "dubblerad klass kommer endast att kompileras en gång" +msgstr "dubblerad klass kommer endast att kompileras en gÃ¥ng" #: java/jcf-parse.c:1604 #, gcc-internal-format @@ -43673,7 +43676,7 @@ msgstr "ingen indatafil angiven" #: java/jcf-parse.c:1885 #, gcc-internal-format msgid "can%'t close input file %s: %m" -msgstr "det går inte att stänga indatafilen %s: %m" +msgstr "det gÃ¥r inte att stänga indatafilen %s: %m" #: java/jcf-parse.c:1928 #, gcc-internal-format, gfc-internal-format @@ -43683,22 +43686,22 @@ msgstr "felaktig zip/jar-fil %s" #: java/jcf-parse.c:2130 #, gcc-internal-format, gfc-internal-format msgid "error while reading %s from zip file" -msgstr "fel när %s lästes från zip-fil" +msgstr "fel när %s lästes frÃ¥n zip-fil" #: java/jvspec.c:396 #, gcc-internal-format msgid "can%'t specify %<-D%> without %<--main%>" -msgstr "får inte ange %<-D%> utan %<--main%>" +msgstr "fÃ¥r inte ange %<-D%> utan %<--main%>" #: java/jvspec.c:399 #, gcc-internal-format msgid "%qs is not a valid class name" -msgstr "%qs är inte ett giltigt klassnamn" +msgstr "%qs är inte ett giltigt klassnamn" #: java/jvspec.c:405 #, gcc-internal-format msgid "--resource requires -o" -msgstr "--resource kräver -o" +msgstr "--resource kräver -o" #: java/jvspec.c:412 #, gcc-internal-format @@ -43708,47 +43711,47 @@ msgstr "redan kompilerade .class-filer ignoreras med -C" #: java/jvspec.c:419 #, gcc-internal-format msgid "cannot specify both -C and -o" -msgstr "kan inte ange både -C och -o" +msgstr "kan inte ange bÃ¥de -C och -o" #: java/jvspec.c:431 #, gcc-internal-format msgid "cannot create temporary file" -msgstr "kan inte skapa temporärfil" +msgstr "kan inte skapa temporärfil" #: java/jvspec.c:453 #, gcc-internal-format msgid "using both @FILE with multiple files not implemented" -msgstr "använder både @FILE med multipla filer inte implementerade" +msgstr "använder bÃ¥de @FILE med multipla filer inte implementerade" #: java/jvspec.c:537 #, gcc-internal-format msgid "cannot specify %<main%> class when not linking" -msgstr "får inte ange %<main%>-klass när länkning inte görs" +msgstr "fÃ¥r inte ange %<main%>-klass när länkning inte görs" #: java/lang.c:583 #, gcc-internal-format msgid "-fexcess-precision=standard for Java" -msgstr "-fexcess-precision=standard för Java" +msgstr "-fexcess-precision=standard för Java" #: java/lang.c:594 #, gcc-internal-format msgid "-findirect-dispatch is incompatible with -freduced-reflection" -msgstr "-findirect-dispatch är inkompatibel med -freduced-reflection" +msgstr "-findirect-dispatch är inkompatibel med -freduced-reflection" #: java/lang.c:597 #, gcc-internal-format msgid "-fjni is incompatible with -freduced-reflection" -msgstr "-fjni är inkompatibel med -freduced-reflection" +msgstr "-fjni är inkompatibel med -freduced-reflection" #: java/lang.c:608 #, gcc-internal-format msgid "can%'t do dependency tracking with input from stdin" -msgstr "det går inte att spåra beroenden med indata från standard in" +msgstr "det gÃ¥r inte att spÃ¥ra beroenden med indata frÃ¥n standard in" #: java/lang.c:624 #, gcc-internal-format msgid "couldn%'t determine target name for dependency tracking" -msgstr "det gick inte att avgöra målnamn för att spåra beroenden" +msgstr "det gick inte att avgöra mÃ¥lnamn för att spÃ¥ra beroenden" #: java/mangle_name.c:325 java/mangle_name.c:402 #, gcc-internal-format @@ -43758,7 +43761,7 @@ msgstr "internt fel - ogiltigt Utf8-namn" #: java/typeck.c:426 #, gcc-internal-format msgid "junk at end of signature string" -msgstr "skräp vid slutet av signatursträng" +msgstr "skräp vid slutet av signatursträng" #: java/verify-glue.c:378 #, gcc-internal-format, gfc-internal-format @@ -43778,12 +43781,12 @@ msgstr "felaktig pc i exception_table" #: lto/lto-lang.c:730 #, gcc-internal-format msgid "-fwpa and -fltrans are mutually exclusive" -msgstr "-fwpa och -fltrans är ömsesidigt uteslutande" +msgstr "-fwpa och -fltrans är ömsesidigt uteslutande" #: lto/lto-object.c:112 #, gcc-internal-format, gfc-internal-format msgid "open %s failed: %s" -msgstr "öppning av %s misslyckades: %s" +msgstr "öppning av %s misslyckades: %s" #: lto/lto-object.c:153 lto/lto-object.c:186 lto/lto-object.c:284 #: lto/lto-object.c:341 lto/lto-object.c:365 @@ -43799,12 +43802,12 @@ msgstr "%s: %s: %s" #: lto/lto-object.c:195 #, gcc-internal-format, gfc-internal-format msgid "close: %s" -msgstr "stäng: %s" +msgstr "stäng: %s" #: lto/lto-object.c:252 #, gcc-internal-format, gfc-internal-format msgid "two or more sections for %s" -msgstr "två eller flera sektioner för %s" +msgstr "tvÃ¥ eller flera sektioner för %s" #: lto/lto.c:235 #, gcc-internal-format, gfc-internal-format @@ -43814,7 +43817,7 @@ msgstr "%s sektion %s saknas" #: lto/lto.c:957 #, gcc-internal-format msgid "bytecode stream: garbage at the end of symbols section" -msgstr "bytekodström: skräp i slutet av symbolsektionen" +msgstr "bytekodström: skräp i slutet av symbolsektionen" #: lto/lto.c:984 #, gcc-internal-format @@ -43824,62 +43827,62 @@ msgstr "kunde inte tolka hexadecimalt tal" #: lto/lto.c:1017 #, gcc-internal-format, gfc-internal-format msgid "unexpected file name %s in linker resolution file. Expected %s" -msgstr "oväntat filnamn %s i länkupplösningsfilen. %s förväntades" +msgstr "oväntat filnamn %s i länkupplösningsfilen. %s förväntades" #: lto/lto.c:1026 #, gcc-internal-format msgid "could not parse file offset" -msgstr "det gick inte tolka filavstånd" +msgstr "det gick inte tolka filavstÃ¥nd" #: lto/lto.c:1029 #, gcc-internal-format msgid "unexpected offset" -msgstr "oväntat avstånd" +msgstr "oväntat avstÃ¥nd" #: lto/lto.c:1050 #, gcc-internal-format msgid "invalid line in the resolution file" -msgstr "ogiltig rad i upplösningsfilen" +msgstr "ogiltig rad i upplösningsfilen" #: lto/lto.c:1063 #, gcc-internal-format msgid "invalid resolution in the resolution file" -msgstr "ogiltig upplösning i upplösningsfilen" +msgstr "ogiltig upplösning i upplösningsfilen" #: lto/lto.c:1069 #, fuzzy, gcc-internal-format msgid "resolution sub id " -msgstr "Upplösningsfilen" +msgstr "Upplösningsfilen" #: lto/lto.c:1164 #, gcc-internal-format, gfc-internal-format msgid "cannot read LTO decls from %s" -msgstr "det går inte att läsa LTO-deklarationer från %s" +msgstr "det gÃ¥r inte att läsa LTO-deklarationer frÃ¥n %s" #: lto/lto.c:1268 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Cannot open %s" -msgstr "kan inte öppna %s" +msgstr "kan inte öppna %s" #: lto/lto.c:1289 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Cannot map %s" -msgstr "kan inte öppna %s" +msgstr "kan inte öppna %s" #: lto/lto.c:1300 #, fuzzy, gcc-internal-format, gfc-internal-format msgid "Cannot read %s" -msgstr "kan inte öppna %s" +msgstr "kan inte öppna %s" #: lto/lto.c:2279 #, gcc-internal-format msgid "no LTRANS output list filename provided" -msgstr "inget filnamn för LTRANS-utdatalista angivet" +msgstr "inget filnamn för LTRANS-utdatalista angivet" #: lto/lto.c:2282 #, gcc-internal-format msgid "opening LTRANS output list %s: %m" -msgstr "när LTRANS-utdatafil %s öppnades: %m" +msgstr "när LTRANS-utdatafil %s öppnades: %m" #: lto/lto.c:2328 #, gcc-internal-format @@ -43889,22 +43892,22 @@ msgstr "lto_obj_file_open() misslyckades" #: lto/lto.c:2354 #, gcc-internal-format msgid "writing to LTRANS output list %s: %m" -msgstr "när utdata skrevs till LTRANS-utdatalista %s: %m" +msgstr "när utdata skrevs till LTRANS-utdatalista %s: %m" #: lto/lto.c:2362 #, gcc-internal-format msgid "closing LTRANS output list %s: %m" -msgstr "när LTRANS-utdatalista %s stängdes: %m" +msgstr "när LTRANS-utdatalista %s stängdes: %m" #: lto/lto.c:2589 #, gcc-internal-format msgid "could not open symbol resolution file: %m" -msgstr "det gick inte att öppna symbolupplösningsfilen: %m" +msgstr "det gick inte att öppna symbolupplösningsfilen: %m" #: lto/lto.c:2664 #, gcc-internal-format msgid "errors during merging of translation units" -msgstr "fel vid sammanslagning av översättningsenheter" +msgstr "fel vid sammanslagning av översättningsenheter" #: objc/objc-act.c:413 objc/objc-act.c:6776 #, gcc-internal-format @@ -43914,7 +43917,7 @@ msgstr "%<@end%> saknas i implementationskontext" #: objc/objc-act.c:566 #, gcc-internal-format msgid "class attributes are not available in Objective-C 1.0" -msgstr "klassattribut är finns inte i Objective-C 1.0" +msgstr "klassattribut är finns inte i Objective-C 1.0" #: objc/objc-act.c:581 #, gcc-internal-format @@ -43934,7 +43937,7 @@ msgstr "klassutvidgningar finns inte i Objective-C 1.0" #: objc/objc-act.c:604 #, gcc-internal-format msgid "class extension for class %qE declared after its %<@implementation%>" -msgstr "klassutvidgning för klass %qE deklarerad efter sin %<@implementation%>" +msgstr "klassutvidgning för klass %qE deklarerad efter sin %<@implementation%>" #: objc/objc-act.c:619 #, gcc-internal-format @@ -43944,17 +43947,17 @@ msgstr "protokollattribut finns inte i Objective-C 1.0" #: objc/objc-act.c:684 #, gcc-internal-format msgid "%<@end%> must appear in an @implementation context" -msgstr "%<@end%> måste stå i @implementation-kontext" +msgstr "%<@end%> mÃ¥ste stÃ¥ i @implementation-kontext" #: objc/objc-act.c:693 #, gcc-internal-format msgid "%<@package%> is not available in Objective-C 1.0" -msgstr "%<@package%> är inte tillgängligt i Objective-C 1.0" +msgstr "%<@package%> är inte tillgängligt i Objective-C 1.0" #: objc/objc-act.c:695 #, gcc-internal-format msgid "%<@package%> presently has the same effect as %<@public%>" -msgstr "%<package%> har för närvarande samma effekt som %<@public%>" +msgstr "%<package%> har för närvarande samma effekt som %<@public%>" #: objc/objc-act.c:706 #, gcc-internal-format @@ -43969,12 +43972,12 @@ msgstr "%<@required%> finns inte i Objective-C 1.0" #: objc/objc-act.c:716 #, gcc-internal-format msgid "%<@optional%> is allowed in @protocol context only" -msgstr "%<@optional%> är endast tillåtet i @protocol-sammanhang" +msgstr "%<@optional%> är endast tillÃ¥tet i @protocol-sammanhang" #: objc/objc-act.c:718 #, gcc-internal-format msgid "%<@required%> is allowed in @protocol context only" -msgstr "%<@required%> är endast tillåtet i @protocol-sammanhang" +msgstr "%<@required%> är endast tillÃ¥tet i @protocol-sammanhang" #: objc/objc-act.c:825 #, gcc-internal-format @@ -43984,32 +43987,32 @@ msgstr "%<property%> finns inte i Objective-C 1.0" #: objc/objc-act.c:829 #, gcc-internal-format msgid "%<readonly%> attribute conflicts with %<readwrite%> attribute" -msgstr "attributet %<readonly%> står i konflikt med attributet %<readwrite%>" +msgstr "attributet %<readonly%> stÃ¥r i konflikt med attributet %<readwrite%>" #: objc/objc-act.c:846 #, gcc-internal-format msgid "%<readonly%> attribute conflicts with %<setter%> attribute" -msgstr "attributet %<readonly%> står i konflikt med attributet %<setter%>" +msgstr "attributet %<readonly%> stÃ¥r i konflikt med attributet %<setter%>" #: objc/objc-act.c:852 #, gcc-internal-format msgid "%<assign%> attribute conflicts with %<retain%> attribute" -msgstr "attribut %<assign%> står i konflikt med attributet %<retain%>" +msgstr "attribut %<assign%> stÃ¥r i konflikt med attributet %<retain%>" #: objc/objc-act.c:857 #, gcc-internal-format msgid "%<assign%> attribute conflicts with %<copy%> attribute" -msgstr "attributet %<assign%> står i konflikt med attributet %<copy%>" +msgstr "attributet %<assign%> stÃ¥r i konflikt med attributet %<copy%>" #: objc/objc-act.c:862 #, gcc-internal-format msgid "%<retain%> attribute conflicts with %<copy%> attribute" -msgstr "attributet %<retain%> står i konflikt med attributet %<copy%>" +msgstr "attributet %<retain%> stÃ¥r i konflikt med attributet %<copy%>" #: objc/objc-act.c:879 #, gcc-internal-format msgid "property declaration not in @interface or @protocol context" -msgstr "egenskapsdeklaration som inte är i @interface- eller @protocol-kontext" +msgstr "egenskapsdeklaration som inte är i @interface- eller @protocol-kontext" #: objc/objc-act.c:890 #, gcc-internal-format @@ -44031,7 +44034,7 @@ msgstr "en egenskap kan inte vara en vektor" #: objc/objc-act.c:916 #, gcc-internal-format msgid "property can not be a bit-field" -msgstr "en egenskap kan inte vara ett bitfält" +msgstr "en egenskap kan inte vara ett bitfält" #: objc/objc-act.c:948 #, gcc-internal-format @@ -44041,17 +44044,17 @@ msgstr "objektegenskap %qD har inget attribut %<assign%>, %<retain%> eller %<cop #: objc/objc-act.c:951 #, gcc-internal-format msgid "%<assign%> can be unsafe for Objective-C objects; please state explicitly if you need it" -msgstr "%<assign%> kan vara osäkert för Objective-C-objekt, ange uttryckligen om du behöver det" +msgstr "%<assign%> kan vara osäkert för Objective-C-objekt, ange uttryckligen om du behöver det" #: objc/objc-act.c:958 #, gcc-internal-format msgid "%<retain%> attribute is only valid for Objective-C objects" -msgstr "attributet %<retain%> är endast giltigt för Objective-C-objekt" +msgstr "attributet %<retain%> är endast giltigt för Objective-C-objekt" #: objc/objc-act.c:962 #, gcc-internal-format msgid "%<copy%> attribute is only valid for Objective-C objects" -msgstr "attributet %<copy%> gäller bara för Objective-C-objekt" +msgstr "attributet %<copy%> gäller bara för Objective-C-objekt" #: objc/objc-act.c:1016 #, gcc-internal-format @@ -44065,42 +44068,42 @@ msgstr "omdeklaration av egenskap %qD" #: objc/objc-act.c:7762 #, gcc-internal-format msgid "originally specified here" -msgstr "ursprungligen specificerad här" +msgstr "ursprungligen specificerad här" #: objc/objc-act.c:1081 #, gcc-internal-format msgid "'nonatomic' attribute of property %qD conflicts with previous declaration" -msgstr "attributet \"nonatomic\" för egenskap %qD står i konflikt med tidigare deklaration" +msgstr "attributet â€nonatomic†för egenskap %qD stÃ¥r i konflikt med tidigare deklaration" #: objc/objc-act.c:1091 #, gcc-internal-format msgid "'getter' attribute of property %qD conflicts with previous declaration" -msgstr "attributet \"getter\" för egenskap %qD står i konflikt med tidigare deklaration" +msgstr "attributet â€getter†för egenskap %qD stÃ¥r i konflikt med tidigare deklaration" #: objc/objc-act.c:1104 #, gcc-internal-format msgid "'setter' attribute of property %qD conflicts with previous declaration" -msgstr "attributet \"setter\" för egenskap %qD står i konflikt med tidigare deklaration" +msgstr "attributet â€setter†för egenskap %qD stÃ¥r i konflikt med tidigare deklaration" #: objc/objc-act.c:1115 #, gcc-internal-format msgid "assign semantics attributes of property %qD conflict with previous declaration" -msgstr "attribut för tilldelningssemantik för egenskap %qD står i konflikt med tidigare deklaration" +msgstr "attribut för tilldelningssemantik för egenskap %qD stÃ¥r i konflikt med tidigare deklaration" #: objc/objc-act.c:1126 #, gcc-internal-format msgid "'readonly' attribute of property %qD conflicts with previous declaration" -msgstr "attributet \"readonly\" för egenskap %qD står i konflikt med tidigare deklaration" +msgstr "attributet â€readonly†för egenskap %qD stÃ¥r i konflikt med tidigare deklaration" #: objc/objc-act.c:1164 #, gcc-internal-format msgid "type of property %qD conflicts with previous declaration" -msgstr "typen på egenskap %qD står i konflikt med tidigare deklaration" +msgstr "typen pÃ¥ egenskap %qD stÃ¥r i konflikt med tidigare deklaration" #: objc/objc-act.c:1637 #, gcc-internal-format msgid "the dot syntax is not available in Objective-C 1.0" -msgstr "punktsyntaxen är inte tillgänglig i Objective-C 1.0" +msgstr "punktsyntaxen är inte tillgänglig i Objective-C 1.0" #. We know that 'class_name' is an Objective-C class name as the #. parser won't call this function if it is not. This is only a @@ -44108,28 +44111,28 @@ msgstr "punktsyntaxen är inte tillgänglig i Objective-C 1.0" #: objc/objc-act.c:1653 #, gcc-internal-format msgid "could not find class %qE" -msgstr "det går inte att hitta klassen %qE" +msgstr "det gÃ¥r inte att hitta klassen %qE" #. Again, this should never happen, but we do check. #: objc/objc-act.c:1661 #, gcc-internal-format msgid "could not find interface for class %qE" -msgstr "det går inte att hitta gränssnitt för klassen %qE" +msgstr "det gÃ¥r inte att hitta gränssnitt för klassen %qE" #: objc/objc-act.c:1667 objc/objc-act.c:6813 objc/objc-act.c:6944 #, gcc-internal-format msgid "class %qE is deprecated" -msgstr "klassen %qE bör undvikas" +msgstr "klassen %qE bör undvikas" #: objc/objc-act.c:1696 #, gcc-internal-format msgid "could not find setter/getter for %qE in class %qE" -msgstr "det går inte att hitta setter/getter för %qE i klassen %qE" +msgstr "det gÃ¥r inte att hitta setter/getter för %qE i klassen %qE" #: objc/objc-act.c:1732 #, gcc-internal-format msgid "readonly property can not be set" -msgstr "egenskapen readonly kan inte sättas" +msgstr "egenskapen readonly kan inte sättas" #. PS: At the moment, due to how the parser works, it should be #. impossible to get here. But it's good to have the check in @@ -44138,7 +44141,7 @@ msgstr "egenskapen readonly kan inte sättas" #: objc/objc-act.c:2002 #, gcc-internal-format msgid "method declaration not in @interface context" -msgstr "metoddeklaration som inte är i @interface-kontext" +msgstr "metoddeklaration som inte är i @interface-kontext" #: objc/objc-act.c:2006 #, gcc-internal-format @@ -44148,7 +44151,7 @@ msgstr "metodattribut finns inte i Objective-C 1.0" #: objc/objc-act.c:2026 #, gcc-internal-format msgid "method definition not in @implementation context" -msgstr "metoddefinition som inte är i @implementation-kontext" +msgstr "metoddefinition som inte är i @implementation-kontext" #: objc/objc-act.c:2041 #, gcc-internal-format @@ -44163,22 +44166,22 @@ msgstr "klass %qs implementerar inte protokollet %qE" #: objc/objc-act.c:2273 #, gcc-internal-format msgid "type %qs does not conform to the %qE protocol" -msgstr "typ %qs följer inte protokollet %qE" +msgstr "typ %qs följer inte protokollet %qE" #: objc/objc-act.c:2554 #, gcc-internal-format msgid "comparison of distinct Objective-C types lacks a cast" -msgstr "jämförelse av skilda Objective-C-typer saknar en konvertering" +msgstr "jämförelse av skilda Objective-C-typer saknar en konvertering" #: objc/objc-act.c:2558 #, gcc-internal-format msgid "initialization from distinct Objective-C type" -msgstr "initiering från distinkt Objective-C-typ" +msgstr "initiering frÃ¥n distinkt Objective-C-typ" #: objc/objc-act.c:2562 #, gcc-internal-format msgid "assignment from distinct Objective-C type" -msgstr "tilldelning från distinkt Objective-C-typ" +msgstr "tilldelning frÃ¥n distinkt Objective-C-typ" #: objc/objc-act.c:2566 #, gcc-internal-format @@ -44188,7 +44191,7 @@ msgstr "distinkt Objective-C-typ i retur" #: objc/objc-act.c:2570 #, gcc-internal-format msgid "passing argument %d of %qE from distinct Objective-C type" -msgstr "skickar argument %d till %qE från distinkt Objective-C-typ" +msgstr "skickar argument %d till %qE frÃ¥n distinkt Objective-C-typ" #: objc/objc-act.c:2708 #, gcc-internal-format @@ -44215,44 +44218,44 @@ msgstr "bara Objective-C-objekttyper kan kvalificeras med ett protokoll" #: objc/objc-act.c:2823 #, gcc-internal-format msgid "protocol %qE has circular dependency" -msgstr "protokollet %qE har cirkulärt beroende" +msgstr "protokollet %qE har cirkulärt beroende" #: objc/objc-act.c:2856 objc/objc-act.c:5676 #, gcc-internal-format msgid "cannot find protocol declaration for %qE" -msgstr "det går inte att hitta en protokolldeklaration för %qE" +msgstr "det gÃ¥r inte att hitta en protokolldeklaration för %qE" #: objc/objc-act.c:3158 objc/objc-act.c:3816 objc/objc-act.c:6389 #: objc/objc-act.c:6864 objc/objc-act.c:6937 objc/objc-act.c:6990 #, gcc-internal-format msgid "cannot find interface declaration for %qE" -msgstr "det går inte att hitta en gränssnittsdeklaration för %qE" +msgstr "det gÃ¥r inte att hitta en gränssnittsdeklaration för %qE" #: objc/objc-act.c:3162 #, gcc-internal-format msgid "interface %qE does not have valid constant string layout" -msgstr "gränssnitt %qE har inte giltig konstantsträngslayout" +msgstr "gränssnitt %qE har inte giltig konstantsträngslayout" #: objc/objc-act.c:3167 #, gcc-internal-format msgid "cannot find reference tag for class %qE" -msgstr "det går inte att hitta en referenstagg för klass %qE" +msgstr "det gÃ¥r inte att hitta en referenstagg för klass %qE" #: objc/objc-act.c:3312 #, gcc-internal-format msgid "%qE is not an Objective-C class name or alias" -msgstr "%qE är inte ett Objective-C-klassnamn eller alias" +msgstr "%qE är inte ett Objective-C-klassnamn eller alias" #: objc/objc-act.c:3327 objc/objc-act.c:3358 objc/objc-act.c:6770 #: objc/objc-act.c:8093 objc/objc-act.c:8144 #, gcc-internal-format msgid "Objective-C declarations may only appear in global scope" -msgstr "Objective-C-deklarationer får bara förekomma på global nivå" +msgstr "Objective-C-deklarationer fÃ¥r bara förekomma pÃ¥ global nivÃ¥" #: objc/objc-act.c:3332 #, gcc-internal-format msgid "cannot find class %qE" -msgstr "det går inte att hitta klass %qE" +msgstr "det gÃ¥r inte att hitta klass %qE" #: objc/objc-act.c:3334 #, gcc-internal-format @@ -44267,42 +44270,42 @@ msgstr "%qE omdeklarerad som en annan sorts symbol" #: objc/objc-act.c:3670 #, gcc-internal-format msgid "strong-cast assignment has been intercepted" -msgstr "strong-cast-tilldelning har uppfångats" +msgstr "strong-cast-tilldelning har uppfÃ¥ngats" #: objc/objc-act.c:3712 #, gcc-internal-format msgid "strong-cast may possibly be needed" -msgstr "strong-cast kan möjligen behövas" +msgstr "strong-cast kan möjligen behövas" #: objc/objc-act.c:3722 #, gcc-internal-format msgid "instance variable assignment has been intercepted" -msgstr "tilldelning av instansvariabel har uppfångats" +msgstr "tilldelning av instansvariabel har uppfÃ¥ngats" #: objc/objc-act.c:3741 #, gcc-internal-format msgid "pointer arithmetic for garbage-collected objects not allowed" -msgstr "pekararitmetik för skräpsamlade objekt är inte tillåten" +msgstr "pekararitmetik för skräpsamlade objekt är inte tillÃ¥ten" #: objc/objc-act.c:3747 #, gcc-internal-format msgid "global/static variable assignment has been intercepted" -msgstr "tilldelning av global/statisk variabel har uppfångats" +msgstr "tilldelning av global/statisk variabel har uppfÃ¥ngats" #: objc/objc-act.c:3961 objc/objc-act.c:3989 objc/objc-act.c:4045 #, fuzzy, gcc-internal-format msgid "duplicate instance variable %q+D" -msgstr "oanvänd variabel %q+D" +msgstr "oanvänd variabel %q+D" #: objc/objc-act.c:4105 #, gcc-internal-format msgid "%<-fobjc-exceptions%> is required to enable Objective-C exception syntax" -msgstr "%<-fobjc-exceptions%> behövs för att aktivera Objective-C undantagssyntax" +msgstr "%<-fobjc-exceptions%> behövs för att aktivera Objective-C undantagssyntax" #: objc/objc-act.c:4189 #, gcc-internal-format msgid "@catch parameter is not a known Objective-C class type" -msgstr "@catch-parameter är inte en känd Objective-C-klasstyp" +msgstr "@catch-parameter är inte en känd Objective-C-klasstyp" #: objc/objc-act.c:4195 #, gcc-internal-format @@ -44312,12 +44315,12 @@ msgstr "@catch-parameter kan inte vara protokollkvalificerad" #: objc/objc-act.c:4240 #, gcc-internal-format msgid "exception of type %<%T%> will be caught" -msgstr "undantag av typ %<%T%> kommer att fångas" +msgstr "undantag av typ %<%T%> kommer att fÃ¥ngas" #: objc/objc-act.c:4242 #, gcc-internal-format msgid " by earlier handler for %<%T%>" -msgstr " av tidigare hanterare för %<%T%>" +msgstr " av tidigare hanterare för %<%T%>" #: objc/objc-act.c:4289 #, gcc-internal-format @@ -44327,17 +44330,17 @@ msgstr "%<@try%> utan %<@catch%> eller %<@finally%>" #: objc/objc-act.c:4317 #, gcc-internal-format msgid "%<@throw%> (rethrow) used outside of a @catch block" -msgstr "%<@throw%> (rethrow) använd utanför ett @catch-block" +msgstr "%<@throw%> (rethrow) använd utanför ett @catch-block" #: objc/objc-act.c:4330 #, gcc-internal-format msgid "%<@throw%> argument is not an object" -msgstr "argumentet till %<@throw%> är inte ett objekt" +msgstr "argumentet till %<@throw%> är inte ett objekt" #: objc/objc-act.c:4351 #, gcc-internal-format msgid "%<@synchronized%> argument is not an object" -msgstr "argumentet %<@synchronized%> är inte ett objekt" +msgstr "argumentet %<@synchronized%> är inte ett objekt" #: objc/objc-act.c:4559 #, gcc-internal-format @@ -44352,7 +44355,7 @@ msgstr "inkonsistent specifikation av instansvariabel" #: objc/objc-act.c:4658 #, gcc-internal-format msgid "can not use an object as parameter to a method" -msgstr "det går inte att använda ett objekt som parameter till en metod" +msgstr "det gÃ¥r inte att använda ett objekt som parameter till en metod" #: objc/objc-act.c:4702 #, gcc-internal-format @@ -44367,7 +44370,7 @@ msgstr "multipla metoder med namnet %<%c%E%> funna" #: objc/objc-act.c:5088 #, gcc-internal-format msgid "using %<%c%s%>" -msgstr "använder %<%c%s%>" +msgstr "använder %<%c%s%>" #: objc/objc-act.c:5097 #, gcc-internal-format @@ -44382,7 +44385,7 @@ msgstr "hittade %<%c%s%>" #: objc/objc-act.c:5109 #, gcc-internal-format msgid "also found %<%c%s%>" -msgstr "hittade också %<%c%s%>" +msgstr "hittade ocksÃ¥ %<%c%s%>" #. If 'rtype' is NULL_TREE at this point it means that #. we have seen no @interface corresponding to that @@ -44415,12 +44418,12 @@ msgstr "definitionen av protokollet %qE finns inte" #: objc/objc-act.c:5403 #, gcc-internal-format msgid "no super class declared in @interface for %qE" -msgstr "ingen superklass deklarerad i @interface för %qE" +msgstr "ingen superklass deklarerad i @interface för %qE" #: objc/objc-act.c:5454 #, gcc-internal-format msgid "found %<-%E%> instead of %<+%E%> in protocol(s)" -msgstr "hittade %<-%E%> istället för %<+%E%> i protokoll" +msgstr "hittade %<-%E%> istället för %<+%E%> i protokoll" #. We have a type, but it's not an Objective-C type (!). #: objc/objc-act.c:5566 @@ -44436,7 +44439,7 @@ msgstr "%<%c%E%> finns inte bland protokoll" #: objc/objc-act.c:5597 #, gcc-internal-format msgid "%qE may not respond to %<%c%E%>" -msgstr "%qE svarar kanske inte på %<%c%E%>" +msgstr "%qE svarar kanske inte pÃ¥ %<%c%E%>" #: objc/objc-act.c:5605 #, gcc-internal-format @@ -44475,7 +44478,7 @@ msgstr "odeklarerad selektor %qE" #: objc/objc-act.c:5749 #, gcc-internal-format msgid "instance variable %qE accessed in class method" -msgstr "instansvariabel %qE använd i klassmetod" +msgstr "instansvariabel %qE använd i klassmetod" #: objc/objc-act.c:5980 objc/objc-act.c:6000 #, gcc-internal-format @@ -44505,22 +44508,22 @@ msgstr "tidigare deklaration av %<%c%E%>" #: objc/objc-act.c:6105 #, gcc-internal-format msgid "duplicate interface declaration for category %<%E(%E)%>" -msgstr "dubbel gränssnittsdeklaration för kategorin %<%E(%E)%>" +msgstr "dubbel gränssnittsdeklaration för kategorin %<%E(%E)%>" #: objc/objc-act.c:6193 #, gcc-internal-format msgid "illegal reference type specified for instance variable %qs" -msgstr "otillåten referenstyp angiven för instansvariabel %qs" +msgstr "otillÃ¥ten referenstyp angiven för instansvariabel %qs" #: objc/objc-act.c:6204 #, gcc-internal-format msgid "instance variable %qs has unknown size" -msgstr "instansvariabeln %qs har okänd storlek" +msgstr "instansvariabeln %qs har okänd storlek" #: objc/objc-act.c:6225 #, gcc-internal-format msgid "instance variable %qs uses flexible array member" -msgstr "instansvariabeln %qs använder flexibla vektormedlemmar" +msgstr "instansvariabeln %qs använder flexibla vektormedlemmar" #: objc/objc-act.c:6252 #, gcc-internal-format @@ -44530,7 +44533,7 @@ msgstr "typen %qE har ingen standardkonstruerare att anropa" #: objc/objc-act.c:6258 #, gcc-internal-format msgid "destructor for %qE shall not be run either" -msgstr "destruerare för %qE skall inte heller köras" +msgstr "destruerare för %qE skall inte heller köras" #. Vtable pointers are Real Bad(tm), since Obj-C cannot #. initialize them. @@ -44542,52 +44545,52 @@ msgstr "typen %qE har virtuella medlemsfunktioner" #: objc/objc-act.c:6271 #, gcc-internal-format msgid "illegal aggregate type %qE specified for instance variable %qs" -msgstr "ogiltig aggregattyp %qE angiven för instansvariabel %qs" +msgstr "ogiltig aggregattyp %qE angiven för instansvariabel %qs" #: objc/objc-act.c:6281 #, gcc-internal-format msgid "type %qE has a user-defined constructor" -msgstr "typen %qE har en användardefinierad konstruerare" +msgstr "typen %qE har en användardefinierad konstruerare" #: objc/objc-act.c:6283 #, gcc-internal-format msgid "type %qE has a user-defined destructor" -msgstr "typen %qE har en användardefinierad destruerare" +msgstr "typen %qE har en användardefinierad destruerare" #: objc/objc-act.c:6287 #, gcc-internal-format msgid "C++ constructors and destructors will not be invoked for Objective-C fields" -msgstr "C++-konstruerare och -destruerare kommer inte att anropas för Objective-C-fält" +msgstr "C++-konstruerare och -destruerare kommer inte att anropas för Objective-C-fält" #: objc/objc-act.c:6418 #, gcc-internal-format msgid "instance variable %qE is declared private" -msgstr "instansvariabeln %qE är deklarerad privat" +msgstr "instansvariabeln %qE är deklarerad privat" #: objc/objc-act.c:6429 #, gcc-internal-format msgid "instance variable %qE is %s; this will be a hard error in the future" -msgstr "instansvariabeln %qE är %s, detta kommer bli ett fel i framtiden" +msgstr "instansvariabeln %qE är %s, detta kommer bli ett fel i framtiden" #: objc/objc-act.c:6436 #, gcc-internal-format msgid "instance variable %qE is declared %s" -msgstr "instansvariabeln %qE är deklarerad %s" +msgstr "instansvariabeln %qE är deklarerad %s" #: objc/objc-act.c:6547 objc/objc-act.c:6662 #, gcc-internal-format msgid "incomplete implementation of class %qE" -msgstr "ofullständig implementation av klassen %qE" +msgstr "ofullständig implementation av klassen %qE" #: objc/objc-act.c:6551 objc/objc-act.c:6666 #, gcc-internal-format msgid "incomplete implementation of category %qE" -msgstr "ofullständig implementation av kategorin %qE" +msgstr "ofullständig implementation av kategorin %qE" #: objc/objc-act.c:6560 objc/objc-act.c:6674 #, gcc-internal-format msgid "method definition for %<%c%E%> not found" -msgstr "metoddefinition för %<%c%E%> finns inte" +msgstr "metoddefinition för %<%c%E%> finns inte" #: objc/objc-act.c:6715 #, gcc-internal-format @@ -44597,7 +44600,7 @@ msgstr "%s %qE implementerar inte helt protokollet %qE" #: objc/objc-act.c:6805 #, gcc-internal-format msgid "cannot find interface declaration for %qE, superclass of %qE" -msgstr "hittar inte gränssnittsdeklaration för %qE, superklass till %qE" +msgstr "hittar inte gränssnittsdeklaration för %qE, superklass till %qE" #: objc/objc-act.c:6844 #, gcc-internal-format @@ -44622,58 +44625,58 @@ msgstr "tidigare deklaration" #: objc/objc-act.c:6895 objc/objc-act.c:6897 #, gcc-internal-format msgid "duplicate interface declaration for class %qE" -msgstr "dubblerad gränssnittsdeklaration av klass %qE" +msgstr "dubblerad gränssnittsdeklaration av klass %qE" #: objc/objc-act.c:7216 objc/objc-act.c:7411 #, gcc-internal-format msgid "can not find instance variable associated with property" -msgstr "det går inte att hitta någon instansvariabel associerad med egenskapen" +msgstr "det gÃ¥r inte att hitta nÃ¥gon instansvariabel associerad med egenskapen" #. TODO: This should be caught much earlier than this. #: objc/objc-act.c:7377 #, gcc-internal-format msgid "invalid setter, it must have one argument" -msgstr "ogiltig setter, den måste ha ett argument" +msgstr "ogiltig setter, den mÃ¥ste ha ett argument" #: objc/objc-act.c:7540 objc/objc-act.c:7755 #, gcc-internal-format msgid "property %qs already specified in %<@dynamic%>" -msgstr "egenskapen %qs är redan angiven i %<@dynamic%>" +msgstr "egenskapen %qs är redan angiven i %<@dynamic%>" #: objc/objc-act.c:7543 objc/objc-act.c:7758 #, gcc-internal-format msgid "property %qs already specified in %<@synthesize%>" -msgstr "egenskapen %qs är redan angiven i %<@synthesize%>" +msgstr "egenskapen %qs är redan angiven i %<@synthesize%>" #: objc/objc-act.c:7557 objc/objc-act.c:7772 #, gcc-internal-format msgid "no declaration of property %qs found in the interface" -msgstr "ingen deklaration av egenskapen %qs finns i gränssnittet" +msgstr "ingen deklaration av egenskapen %qs finns i gränssnittet" #: objc/objc-act.c:7584 #, gcc-internal-format msgid "ivar %qs used by %<@synthesize%> declaration must be an existing ivar" -msgstr "ivar %qs använd av %<@synthesize%>-deklaration skall vara en befintlig ivar" +msgstr "ivar %qs använd av %<@synthesize%>-deklaration skall vara en befintlig ivar" #: objc/objc-act.c:7605 #, gcc-internal-format msgid "property %qs is using instance variable %qs of incompatible type" -msgstr "egenskapen %qs använder instansvariabeln %qs av inkompatibel typ" +msgstr "egenskapen %qs använder instansvariabeln %qs av inkompatibel typ" #: objc/objc-act.c:7627 #, gcc-internal-format msgid "'assign' property %qs is using bit-field instance variable %qs" -msgstr "\"assign\"-egenskap %qs använder bitfältsinstansvariabeln %qs" +msgstr "â€assignâ€-egenskap %qs använder bitfältsinstansvariabeln %qs" #: objc/objc-act.c:7640 #, gcc-internal-format msgid "'atomic' property %qs is using bit-field instance variable %qs" -msgstr "\"atomic\"-egenskap %qs använder bitfältsinstansvariabeln %qs" +msgstr "â€atomicâ€-egenskap %qs använder bitfältsinstansvariabeln %qs" #: objc/objc-act.c:7658 #, gcc-internal-format msgid "property %qs is using the same instance variable as property %qs" -msgstr "egenskapen %qs använder samma instansvariabel som egenskapen %qs" +msgstr "egenskapen %qs använder samma instansvariabel som egenskapen %qs" #: objc/objc-act.c:7699 #, gcc-internal-format @@ -44687,17 +44690,17 @@ msgstr "%<@synthesize%> finns inte i Objective-C 1.0" #: objc/objc-act.c:7710 #, gcc-internal-format msgid "%<@synthesize%> not in @implementation context" -msgstr "%<@synthesize%> som inte är i @implementation-kontext" +msgstr "%<@synthesize%> som inte är i @implementation-kontext" #: objc/objc-act.c:7716 #, gcc-internal-format msgid "%<@synthesize%> can not be used in categories" -msgstr "%<@synthesize%> kan inte användas i kategorier" +msgstr "%<@synthesize%> kan inte användas i kategorier" #: objc/objc-act.c:7725 #, gcc-internal-format msgid "%<@synthesize%> requires the @interface of the class to be available" -msgstr "%<@synthesize%> kräver klassens @interface för att vara tillgänglig" +msgstr "%<@synthesize%> kräver klassens @interface för att vara tillgänglig" #: objc/objc-act.c:7808 #, gcc-internal-format @@ -44711,12 +44714,12 @@ msgstr "%<@dynamic%> finns inte i Objective-C 1.0" #: objc/objc-act.c:7819 #, gcc-internal-format msgid "%<@dynamic%> not in @implementation context" -msgstr "%<@dynamic%> som inte är i @implementation-kontext" +msgstr "%<@dynamic%> som inte är i @implementation-kontext" #: objc/objc-act.c:7841 #, gcc-internal-format msgid "%<@dynamic%> requires the @interface of the class to be available" -msgstr "%<@dynamic%> kräver klassens @interface för att vara tillgänglig" +msgstr "%<@dynamic%> kräver klassens @interface för att vara tillgänglig" #: objc/objc-act.c:8039 #, gcc-internal-format @@ -44729,7 +44732,7 @@ msgstr "definitionen av protokollet %qE finns inte" #: objc/objc-act.c:8070 #, gcc-internal-format msgid "protocol %qE is deprecated" -msgstr "protokollet %qE bör undvikas" +msgstr "protokollet %qE bör undvikas" #: objc/objc-act.c:8189 #, gcc-internal-format @@ -44739,7 +44742,7 @@ msgstr "dubblerad deklaration av protokoll %qE" #: objc/objc-act.c:8699 #, gcc-internal-format msgid "conflicting types for %<%c%s%>" -msgstr "motstridiga typer på %<%c%s%>" +msgstr "motstridiga typer pÃ¥ %<%c%s%>" #: objc/objc-act.c:8703 #, gcc-internal-format @@ -44749,12 +44752,12 @@ msgstr "tidigare deklaration av %<%c%s%>" #: objc/objc-act.c:8803 #, gcc-internal-format msgid "no super class declared in interface for %qE" -msgstr "ingen superklass deklarerad i gränssnittet för %qE" +msgstr "ingen superklass deklarerad i gränssnittet för %qE" #: objc/objc-act.c:8830 #, gcc-internal-format msgid "[super ...] must appear in a method context" -msgstr "[super ...] måste stå i metodkontext" +msgstr "[super ...] mÃ¥ste stÃ¥ i metodkontext" #: objc/objc-act.c:8870 #, gcc-internal-format @@ -44764,12 +44767,12 @@ msgstr "metod saknar kanske ett [super dealloc]-anrop" #: objc/objc-act.c:9334 #, gcc-internal-format msgid "instance variable %qs is declared private" -msgstr "instansvariabeln %qs är deklarerad privat" +msgstr "instansvariabeln %qs är deklarerad privat" #: objc/objc-act.c:9379 #, gcc-internal-format msgid "local declaration of %qE hides instance variable" -msgstr "lokal deklaration av %qE döljer instansvariabel" +msgstr "lokal deklaration av %qE döljer instansvariabel" #. This can happen if DECL_ARTIFICIAL (*expr_p), but #. should be impossible for real properties, which always @@ -44777,84 +44780,84 @@ msgstr "lokal deklaration av %qE döljer instansvariabel" #: objc/objc-act.c:9424 #, gcc-internal-format msgid "no %qs getter found" -msgstr "någon %qs-hämtare finns inte" +msgstr "nÃ¥gon %qs-hämtare finns inte" #: objc/objc-act.c:9664 #, gcc-internal-format msgid "fast enumeration is not available in Objective-C 1.0" -msgstr "snabb uppräkning är inte tillgänglig i Objective-C 1.0" +msgstr "snabb uppräkning är inte tillgänglig i Objective-C 1.0" #: objc/objc-act.c:9674 #, gcc-internal-format msgid "iterating variable in fast enumeration is not an object" -msgstr "iterationsvariabel i snabb uppräkning är inte ett objekt" +msgstr "iterationsvariabel i snabb uppräkning är inte ett objekt" #: objc/objc-act.c:9680 #, gcc-internal-format msgid "collection in fast enumeration is not an object" -msgstr "samling i snabb uppräkning är inte ett objekt" +msgstr "samling i snabb uppräkning är inte ett objekt" #: objc/objc-encoding.c:132 #, gcc-internal-format msgid "type %qT does not have a known size" -msgstr "typen %qT har inte en känd storlek" +msgstr "typen %qT har inte en känd storlek" #: objc/objc-encoding.c:720 #, fuzzy, gcc-internal-format msgid "unknown type %<%T%> found during Objective-C encoding" -msgstr "okänd typ %s hittades under Objective-C kodning" +msgstr "okänd typ %s hittades under Objective-C kodning" #. Do not do any encoding, produce an error and keep going. #: objc/objc-encoding.c:803 #, gcc-internal-format msgid "trying to encode non-integer type as a bitfield" -msgstr "försöker koda icke-heltal typ som ett bitfält" +msgstr "försöker koda icke-heltal typ som ett bitfält" #: objc/objc-gnu-runtime-abi-01.c:131 #, gcc-internal-format msgid "%<-fobjc-gc%> is ignored for %<-fgnu-runtime%>" -msgstr "%<-fobjc-gc%> ignoreras för %<-fgnu-runtime%>" +msgstr "%<-fobjc-gc%> ignoreras för %<-fgnu-runtime%>" #: objc/objc-gnu-runtime-abi-01.c:139 #, gcc-internal-format msgid "%<-fobjc-sjlj-exceptions%> is ignored for %<-fgnu-runtime%>" -msgstr "%<-fobjc-sjlj-exceptions%> ignoreras för %<-fgnu-runtime%>" +msgstr "%<-fobjc-sjlj-exceptions%> ignoreras för %<-fgnu-runtime%>" #: objc/objc-gnu-runtime-abi-01.c:2170 objc/objc-next-runtime-abi-01.c:2849 #: objc/objc-next-runtime-abi-02.c:3626 #, gcc-internal-format msgid "non-objective-c type '%T' cannot be caught" -msgstr "typen \"%qT\" som inte är objective-c kan inte fångas" +msgstr "typen â€%qT†som inte är objective-c kan inte fÃ¥ngas" #: objc/objc-next-runtime-abi-01.c:152 #, gcc-internal-format msgid "%<-fobjc-sjlj-exceptions%> is the only supported exceptions system for %<-fnext-runtime%> with %<-fobjc-abi-version%> < 2" -msgstr "%<-fobjc-sjlj-exceptions%> är det enda undantagssystem som stödjs för %<-fnext-runtime%> med %<-fobjc-abi-version%> < 2" +msgstr "%<-fobjc-sjlj-exceptions%> är det enda undantagssystem som stödjs för %<-fnext-runtime%> med %<-fobjc-abi-version%> < 2" #: objc/objc-next-runtime-abi-02.c:244 #, gcc-internal-format msgid "%<-fobjc-sjlj-exceptions%> is ignored for %<-fnext-runtime%> when %<-fobjc-abi-version%> >= 2" -msgstr "%<-fobjc-sjlj-exceptions%> ignoreras för %<-fnext-runtime%> när %<-fobj-abi-version%> >= 2" +msgstr "%<-fobjc-sjlj-exceptions%> ignoreras för %<-fnext-runtime%> när %<-fobj-abi-version%> >= 2" #: objc/objc-runtime-shared-support.c:426 #, gcc-internal-format msgid "creating selector for nonexistent method %qE" -msgstr "skapar selektor för icke existerande metod %qE" +msgstr "skapar selektor för icke existerande metod %qE" #~ msgid "internal gcc abort in %s, at %s:%d" #~ msgstr "internt gcc-avbrott i %s, vid %s:%d" #~ msgid "assuming signed overflow does not occur when simplifying && or || to & or |" -#~ msgstr "antar att teckenspill inte förekommer vid förenkling av && eller || till & eller |" +#~ msgstr "antar att teckenspill inte förekommer vid förenkling av && eller || till & eller |" #~ msgid "assuming signed overflow does not occur when simplifying ==, != or ! to identity or ^" -#~ msgstr "antar att teckenspill inte förekommer vid förenkling av ==, != eller ! till identitet eller ^" +#~ msgstr "antar att teckenspill inte förekommer vid förenkling av ==, != eller ! till identitet eller ^" #~ msgid "The threshold ratio between current and hottest structure counts" -#~ msgstr "Tröskelförhållandet mellan aktuell och hetaste posträknare" +#~ msgstr "TröskelförhÃ¥llandet mellan aktuell och hetaste posträknare" #~ msgid "invalid operand to %%V code" -#~ msgstr "ogiltig operand för %%V-kod" +#~ msgstr "ogiltig operand för %%V-kod" #~ msgid " (frv)" #~ msgstr " (frv)" @@ -44872,19 +44875,19 @@ msgstr "skapar selektor för icke existerande metod %qE" #~ msgstr "ogiltigt register i instruktionen" #~ msgid "operand 1 must be a hard register" -#~ msgstr "operand 1 måste vara ett hårt register" +#~ msgstr "operand 1 mÃ¥ste vara ett hÃ¥rt register" #~ msgid "invalid rotate insn" #~ msgstr "ogiltigt rotate-instruktion" #~ msgid "registers IX, IY and Z used in the same INSN" -#~ msgstr "registren IX, IY och Z används i samma INSTRUKTION" +#~ msgstr "registren IX, IY och Z används i samma INSTRUKTION" #~ msgid "cannot do z-register replacement" -#~ msgstr "kan inte göra z-registerutbyte" +#~ msgstr "kan inte göra z-registerutbyte" #~ msgid "invalid Z register replacement for insn" -#~ msgstr "ogiltigt Z-registerutbyte för instruktion" +#~ msgstr "ogiltigt Z-registerutbyte för instruktion" #~ msgid "invalid %%c operand" #~ msgstr "ogiltig %%c-operand" @@ -44893,208 +44896,208 @@ msgstr "skapar selektor för icke existerande metod %qE" #~ msgstr "ogiltig %%d-operand" #~ msgid "%s:%d:%d: recursively instantiated from %qs\n" -#~ msgstr "%s:%d:%d: rekursivt instansierad från %qs\n" +#~ msgstr "%s:%d:%d: rekursivt instansierad frÃ¥n %qs\n" #~ msgid "%s:%d:%d: instantiated from %qs\n" -#~ msgstr "%s:%d:%d: instansierad från %qs\n" +#~ msgstr "%s:%d:%d: instansierad frÃ¥n %qs\n" #~ msgid "%s:%d:%d: recursively instantiated from here" -#~ msgstr "%s:%d:%d: rekursivt instansierad härifrån" +#~ msgstr "%s:%d:%d: rekursivt instansierad härifrÃ¥n" #~ msgid "%s:%d:%d: instantiated from here" -#~ msgstr "%s:%d:%d: instansierad härifrån" +#~ msgstr "%s:%d:%d: instansierad härifrÃ¥n" #~ msgid "%s:%d: instantiated from here" -#~ msgstr "%s:%d: instansierad härifrån" +#~ msgstr "%s:%d: instansierad härifrÃ¥n" #~ msgid "static linking is not supported" -#~ msgstr "statisk länkning stöds inte" +#~ msgstr "statisk länkning stöds inte" -# Detta är inget riktigt meddelande. Det är uppenbarligen xgettext som +# Detta är inget riktigt meddelande. Det är uppenbarligen xgettext som # blir lurad av en kommentar. #~ msgid "ax ; {int $0x80 | syscall" #~ msgstr "ax ; {int $0x80 | syscall" #~ msgid "Dump a core file when a runtime error occurs" -#~ msgstr "Skriv ut en core-fil när fel inträffar under körning" +#~ msgstr "Skriv ut en core-fil när fel inträffar under körning" -# Detta är inget riktigt meddelande. Extraktionsskriptet blir -# uppenbarligen lurat på något sätt. +# Detta är inget riktigt meddelande. Extraktionsskriptet blir +# uppenbarligen lurat pÃ¥ nÃ¥got sätt. #~ msgid "! It would be better to auto-generate this file." -#~ msgstr "! Det vore bättre att autogenerera denna fil." +#~ msgstr "! Det vore bättre att autogenerera denna fil." -# Detta är inget riktigt meddelande. Extraktionsskriptet blir -# uppenbarligen lurat på något sätt. +# Detta är inget riktigt meddelande. Extraktionsskriptet blir +# uppenbarligen lurat pÃ¥ nÃ¥got sätt. #~ msgid "SYMBOL_VECTOR=(__divdi3=PROCEDURE)" #~ msgstr "SYMBOL_VECTOR=(__divdi3=PROCEDURE)" #~ msgid "Generate code for little-endian" -#~ msgstr "Generera kod för omvänd byteordning" +#~ msgstr "Generera kod för omvänd byteordning" #~ msgid "Generate code for big-endian" -#~ msgstr "Generera kod för rak byteordning" +#~ msgstr "Generera kod för rak byteordning" #~ msgid "-mabi=\tSpecify ABI to use" -#~ msgstr "-mabi=\tAnge ABI att använda" +#~ msgstr "-mabi=\tAnge ABI att använda" #~ msgid "Prepend the name of the cpu to all public symbol names" -#~ msgstr "Skjut in namnet på cpu:n före alla publika symbolnamn" +#~ msgstr "Skjut in namnet pÃ¥ cpu:n före alla publika symbolnamn" #~ msgid "-mcpu=CPU\tCompile code for ARC variant CPU" -#~ msgstr "-mcpu=CPU\tKompilera kod för ARC-variant CPU" +#~ msgstr "-mcpu=CPU\tKompilera kod för ARC-variant CPU" #~ msgid "-mtext=SECTION\tPut functions in SECTION" -#~ msgstr "-mtext=SEKTION\tLägg funktioner i SEKTION" +#~ msgstr "-mtext=SEKTION\tLägg funktioner i SEKTION" #~ msgid "-mdata=SECTION\tPut data in SECTION" -#~ msgstr "-mdata=SEKTION\tLägg data i SEKTION" +#~ msgstr "-mdata=SEKTION\tLägg data i SEKTION" #~ msgid "-mrodata=SECTION\tPut read-only data in SECTION" -#~ msgstr "-mrodata=SEKTION\tLägg endast läsbara data i SEKTION" +#~ msgstr "-mrodata=SEKTION\tLägg endast läsbara data i SEKTION" #~ msgid "Alias for -mfloat-abi=hard" -#~ msgstr "Alias för -mfloat-abi=hard" +#~ msgstr "Alias för -mfloat-abi=hard" #~ msgid "Alias for -mfloat-abi=soft" -#~ msgstr "Alias för -mfloat-abi=soft" +#~ msgstr "Alias för -mfloat-abi=soft" #~ msgid "Compile for the Thumb not the ARM" -#~ msgstr "Kompilera för Thumb, inte ARM" +#~ msgstr "Kompilera för Thumb, inte ARM" #~ msgid "Support multiply accumulate instructions" -#~ msgstr "Stöd multiplikations-ackumulerings-instruktioner" +#~ msgstr "Stöd multiplikations-ackumulerings-instruktioner" #~ msgid "Do not use push to store function arguments" -#~ msgstr "Använd inte push för att lagra funktionsargument" +#~ msgstr "Använd inte push för att lagra funktionsargument" #~ msgid "Restrict doloop to the given nesting level" -#~ msgstr "Begränsa doloop till den givna nästningsnivån" +#~ msgstr "Begränsa doloop till den givna nästningsnivÃ¥n" #~ msgid "Use the mips-tfile postpass" -#~ msgstr "Använd mips-tfile postpasset" +#~ msgstr "Använd mips-tfile postpasset" #~ msgid "Compile for a 68HC11" -#~ msgstr "Kompilera för en 68HC11" +#~ msgstr "Kompilera för en 68HC11" #~ msgid "Compile for a 68HC12" -#~ msgstr "Kompilera för en 68HC12" +#~ msgstr "Kompilera för en 68HC12" #~ msgid "Compile for a 68HCS12" -#~ msgstr "Kompilera för en 68HCS12" +#~ msgstr "Kompilera för en 68HCS12" #~ msgid "Auto pre/post decrement increment allowed" -#~ msgstr "Automatisk för-/efterdekrementering -inkrementering tillåtna" +#~ msgstr "Automatisk för-/efterdekrementering -inkrementering tillÃ¥tna" #~ msgid "Min/max instructions allowed" -#~ msgstr "Min-/maxinstruktioner tillåtna" +#~ msgstr "Min-/maxinstruktioner tillÃ¥tna" #~ msgid "Use call and rtc for function calls and returns" -#~ msgstr "Använd call och rtc för funktionsanrop och returer" +#~ msgstr "Använd call och rtc för funktionsanrop och returer" #~ msgid "Auto pre/post decrement increment not allowed" -#~ msgstr "Automatisk för-/efterdekrementering -inkrementering inte tillåtna" +#~ msgstr "Automatisk för-/efterdekrementering -inkrementering inte tillÃ¥tna" #~ msgid "Use jsr and rts for function calls and returns" -#~ msgstr "Använd jsr och rts för funktionsanrop och returer" +#~ msgstr "Använd jsr och rts för funktionsanrop och returer" #~ msgid "Min/max instructions not allowed" -#~ msgstr "Min-/maxinstruktioner inte tillåtna" +#~ msgstr "Min-/maxinstruktioner inte tillÃ¥tna" #~ msgid "Use direct addressing mode for soft registers" -#~ msgstr "Använd direkt adresseringsläge förmjuka register" +#~ msgstr "Använd direkt adresseringsläge förmjuka register" #~ msgid "Compile with 32-bit integer mode" -#~ msgstr "Kompilera med 32-bitars heltalsläge" +#~ msgstr "Kompilera med 32-bitars heltalsläge" #~ msgid "Specify the register allocation order" #~ msgstr "Ange registerallokeringsordningen" #~ msgid "Do not use direct addressing mode for soft registers" -#~ msgstr "Använd inte direkt adresseringsläge för mjuka register" +#~ msgstr "Använd inte direkt adresseringsläge för mjuka register" #~ msgid "Compile with 16-bit integer mode" -#~ msgstr "Kompilera med 16-bitars heltalsläge" +#~ msgstr "Kompilera med 16-bitars heltalsläge" #~ msgid "Indicate the number of soft registers available" -#~ msgstr "Indikera antalet tillgängliga mjuka register" +#~ msgstr "Indikera antalet tillgängliga mjuka register" #~ msgid "Conform to the ISO 1998 C++ standard, with extensions that are likely to" -#~ msgstr "Följ standarden ISO 1998 C++, med utökningar som troligen" +#~ msgstr "Följ standarden ISO 1998 C++, med utökningar som troligen" #~ msgid "Conform to the ISO 1998 C++ standard with GNU extensions" -#~ msgstr "Följ standarden ISO 1998 C++ med GNU-utökningar" +#~ msgstr "Följ standarden ISO 1998 C++ med GNU-utökningar" #~ msgid "Conform to the ISO 1998 C++ standard, with GNU extensions and" -#~ msgstr "Följ standarden ISO 1998 C++ med GNU-utökningar och" +#~ msgstr "Följ standarden ISO 1998 C++ med GNU-utökningar och" #~ msgid "Generate debug information to support Identical Code Folding (ICF)" -#~ msgstr "Generera felsökningsinformation för att stödja Identical Code Folding (ICF)" +#~ msgstr "Generera felsökningsinformation för att stödja Identical Code Folding (ICF)" #~ msgid "Perform structure layout optimizations based" -#~ msgstr "Utför optimeringar av postutläggning baserat" +#~ msgstr "Utför optimeringar av postutläggning baserat" #~ msgid "Eliminate redundant zero extensions on targets that support implicit extensions." -#~ msgstr "Eliminera överflödiga nollförlängningar på mål som stödjer implicit förlängning." +#~ msgstr "Eliminera överflödiga nollförlängningar pÃ¥ mÃ¥l som stödjer implicit förlängning." #~ msgid "method call without object" #~ msgstr "metodanrop utan objekt" #~ msgid "array is not addressable" -#~ msgstr "vektorn är inte direkt adresserbar" +#~ msgstr "vektorn är inte direkt adresserbar" #~ msgid "invalid new of function type" #~ msgstr "ogiltig new av funktionstyp" #~ msgid "no object for method call" -#~ msgstr "inget objekt för metodanrop" +#~ msgstr "inget objekt för metodanrop" #~ msgid "not enough values in return statement" -#~ msgstr "inte tillräckligt med värden i retursats" +#~ msgstr "inte tillräckligt med värden i retursats" #~ msgid "bad buffer size when making channel" -#~ msgstr "felaktig buffertstorlek när en kanal görs" +#~ msgstr "felaktig buffertstorlek när en kanal görs" #~ msgid "edge points to same body alias:" -#~ msgstr "båge pekar till samma kroppalias:" +#~ msgstr "bÃ¥ge pekar till samma kroppalias:" #~ msgid "a call to thunk improperly represented in the call graph:" #~ msgstr "ett anrop till en dunk felaktigt representerat i anropsgrafen:" #~ msgid "coverage mismatch for function %u while reading execution counters" -#~ msgstr "mismatch i täckning för funktionen %u när exekveringsräknare lästes" +#~ msgstr "mismatch i täckning för funktionen %u när exekveringsräknare lästes" #~ msgid "no coverage for function %qE found" -#~ msgstr "det finns ingen täckning för funktionen %qE" +#~ msgstr "det finns ingen täckning för funktionen %qE" #~ msgid "coverage mismatch for function %qE while reading counter %qs" -#~ msgstr "mismatch i täckning för funktionen %qE när räknaren %qs lästes" +#~ msgstr "mismatch i täckning för funktionen %qE när räknaren %qs lästes" #~ msgid "DW_LOC_OP %s not implemented" -#~ msgstr "DW_LOC_OP %s är inte implementerad" +#~ msgstr "DW_LOC_OP %s är inte implementerad" #~ msgid "use of obsolete %%[ operator in specs" -#~ msgstr "användning av föråldrad operator %%[ i specifikation" +#~ msgstr "användning av förÃ¥ldrad operator %%[ i specifikation" #~ msgid "optimization options not supported yet" -#~ msgstr "optimieringsalternativen stöds inte ännu" +#~ msgstr "optimieringsalternativen stöds inte ännu" #~ msgid "bytecode stream: tried to jump backwards in the stream" -#~ msgstr "bytekodström: försökte hoppa baklänges i strömmen" +#~ msgstr "bytekodström: försökte hoppa baklänges i strömmen" #~ msgid "gimple bytecode streams do not support the optimization attribute" -#~ msgstr "gimple-bytekodströmmar stödjer inte optimeringsattributet" +#~ msgstr "gimple-bytekodströmmar stödjer inte optimeringsattributet" #~ msgid "-fira-algorithm=CB does not work on this architecture" -#~ msgstr "-fira-algorithm=CB fungerar inte på denna arkitektur" +#~ msgstr "-fira-algorithm=CB fungerar inte pÃ¥ denna arkitektur" #~ msgid "type size can%'t be explicitly evaluated" -#~ msgstr "typstorlek kan inte beräknas explicit" +#~ msgstr "typstorlek kan inte beräknas explicit" #~ msgid "variable-size type declared outside of any function" -#~ msgstr "typ med variabel storlek deklarerad utanför någon funktion" +#~ msgstr "typ med variabel storlek deklarerad utanför nÃ¥gon funktion" #~ msgid "type mismatch in binary truth expression" -#~ msgstr "typfel i binärt sanningsuttryck" +#~ msgstr "typfel i binärt sanningsuttryck" #~ msgid "invalid COND_EXPR in gimple assignment" #~ msgstr "ogiltig COND_EXPR i gimple-tilldelning" @@ -45103,7 +45106,7 @@ msgstr "skapar selektor för icke existerande metod %qE" #~ msgstr "ogiltig funktion i anropsats" #~ msgid "PHI argument is not a GIMPLE value" -#~ msgstr "PHI-argument är inte ett GIMPLE-värde" +#~ msgstr "PHI-argument är inte ett GIMPLE-värde" #~ msgid "invalid GIMPLE statement" #~ msgstr "ogiltig GIMPLE-sats" @@ -45115,37 +45118,37 @@ msgstr "skapar selektor för icke existerande metod %qE" #~ msgstr "sats lagrar i minne, men har inga VDEFS" #~ msgid "statement has VDEF operand not in defs list" -#~ msgstr "sats har VDEF-operand som inte är i definitionslistan" +#~ msgstr "sats har VDEF-operand som inte är i definitionslistan" #~ msgid "statement has VDEF but no VUSE operand" #~ msgstr "sats har VDEF men ingen VUSE-operand" #~ msgid "VDEF and VUSE do not use the same symbol" -#~ msgstr "VDEF och VUSE använder inte samma symbol" +#~ msgstr "VDEF och VUSE använder inte samma symbol" #~ msgid "statement has VUSE operand not in uses list" -#~ msgstr "sats har VUSE-operand som inte är i användarlistan" +#~ msgstr "sats har VUSE-operand som inte är i användarlistan" #~ msgid "number of operands and imm-links don%'t agree in statement" -#~ msgstr "antal operander och imm-länkar stämmer inte överens i satsen" +#~ msgstr "antal operander och imm-länkar stämmer inte överens i satsen" #~ msgid "-f%s ignored for Unicos/Mk (not supported)" -#~ msgstr "-f%s ignoreras för Unicos/Mk (stöds inte)" +#~ msgstr "-f%s ignoreras för Unicos/Mk (stöds inte)" #~ msgid "-mieee not supported on Unicos/Mk" -#~ msgstr "-mieee stöds inte på Unicos/Mk" +#~ msgstr "-mieee stöds inte pÃ¥ Unicos/Mk" #~ msgid "-mieee-with-inexact not supported on Unicos/Mk" -#~ msgstr "-mieee-with-inexact stöds inte på Unicos/Mk" +#~ msgstr "-mieee-with-inexact stöds inte pÃ¥ Unicos/Mk" #~ msgid "trap mode not supported on Unicos/Mk" -#~ msgstr "läge för fällor (trap mode) stöds inte på Unicos/Mk" +#~ msgstr "läge för fällor (trap mode) stöds inte pÃ¥ Unicos/Mk" #~ msgid "argument of %qE attribute is not \"ilink1\" or \"ilink2\"" -#~ msgstr "argumentet till attributet %qE är inte \"ilink1\" eller \"ilink2\"" +#~ msgstr "argumentet till attributet %qE är inte â€ilink1†eller â€ilink2â€" #~ msgid "bad value (%s) for %s switch" -#~ msgstr "ogiltigt värde (%s) till flagga %s" +#~ msgstr "ogiltigt värde (%s) till flagga %s" #~ msgid "invalid ABI option: -mabi=%s" #~ msgstr "ogiltig ABI-flagga: -mabi=%s" @@ -45157,46 +45160,46 @@ msgstr "skapar selektor för icke existerande metod %qE" #~ msgstr "ogiltigt flyttals-abi: -mfloat-abi=%s" #~ msgid "invalid thread pointer option: -mtp=%s" -#~ msgstr "ogiltig trådpekarflagga: -mtp=%s" +#~ msgstr "ogiltig trÃ¥dpekarflagga: -mtp=%s" #~ msgid "unrecognized argument to -mmcu= option: %qs" -#~ msgstr "okänt argument till flaggan -mcu=: %qs" +#~ msgstr "okänt argument till flaggan -mcu=: %qs" #~ msgid "See --target-help for supported MCUs" -#~ msgstr "Se --target-help för MCU:er som stödjs" +#~ msgstr "Se --target-help för MCU:er som stödjs" #~ msgid "profiler support for CRX" -#~ msgstr "profileringsstöd för CRX" +#~ msgstr "profileringsstöd för CRX" #~ msgid "unknown ABI (%s) for %sabi=%s %s" -#~ msgstr "okänd ABI-typ (%s) för %sabi=%s %s" +#~ msgstr "okänd ABI-typ (%s) för %sabi=%s %s" #~ msgid "bad value (%s) for %scmodel=%s %s" -#~ msgstr "felaktigt värde (%s) till %scmodel=%s %s" +#~ msgstr "felaktigt värde (%s) till %scmodel=%s %s" #~ msgid "bad value (%s) for %sasm=%s %s" -#~ msgstr "felaktigt värde (%s) till %sasm=%s %s" +#~ msgstr "felaktigt värde (%s) till %sasm=%s %s" #~ msgid "%slarge-data-threshold=%d%s is negative" -#~ msgstr "%slarge-data-threshold=%d%s är negativ" +#~ msgstr "%slarge-data-threshold=%d%s är negativ" #~ msgid "bad value (%s) for %stls-dialect=%s %s" -#~ msgstr "felaktigt värde (%s) till %stls-dialect=%s %s" +#~ msgstr "felaktigt värde (%s) till %stls-dialect=%s %s" #~ msgid "pc%d is not valid precision setting (32, 64 or 80)" -#~ msgstr "pc%d är inte en giltig precisionsinställning (32, 64 eller 80)" +#~ msgstr "pc%d är inte en giltig precisionsinställning (32, 64 eller 80)" #~ msgid "bad value (%s) for %sfpmath=%s %s" -#~ msgstr "felaktigt värde (%s) till %sfpmath=%s %s" +#~ msgstr "felaktigt värde (%s) till %sfpmath=%s %s" #~ msgid "unknown vectorization library ABI type (%s) for %sveclibabi=%s %s" -#~ msgstr "okänt ABI-typ (%s) till vektoriseringsbibliotek för %sveclibabi=%s %s" +#~ msgstr "okänt ABI-typ (%s) till vektoriseringsbibliotek för %sveclibabi=%s %s" #~ msgid "%qE attribute only available for 64-bit" -#~ msgstr "attributet %qE är bara tillgängligt för 64 bitar" +#~ msgstr "attributet %qE är bara tillgängligt för 64 bitar" #~ msgid "vector permutation requires vector constant" -#~ msgstr "vektorpermutation kräver vektorkonstant" +#~ msgstr "vektorpermutation kräver vektorkonstant" #~ msgid "vector permutation (%d %d)" #~ msgstr "vektorpermutation (%d %d)" @@ -45211,19 +45214,19 @@ msgstr "skapar selektor för icke existerande metod %qE" #~ msgstr "vektorpermutation (%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d)" #~ msgid "ms-bitfields not supported for objc" -#~ msgstr "ms-bitfält stöds inte för objc" +#~ msgstr "ms-bitfält stöds inte för objc" #~ msgid "bad value %<%s%> for -mtune= switch" -#~ msgstr "felaktigt värde %<%s%> till flaggan -mtune=" +#~ msgstr "felaktigt värde %<%s%> till flaggan -mtune=" #~ msgid "-f%s ignored for 68HC11/68HC12 (not supported)" -#~ msgstr "-f%s ignoreras för 68HC11/68HC12 (stöds inte)" +#~ msgstr "-f%s ignoreras för 68HC11/68HC12 (stöds inte)" #~ msgid "%<trap%> and %<far%> attributes are not compatible, ignoring %<far%>" -#~ msgstr "attributen %<trap%> och %<far%> är inte kompatibla, %<far%> ignoreras" +#~ msgstr "attributen %<trap%> och %<far%> är inte kompatibla, %<far%> ignoreras" #~ msgid "%<trap%> attribute is already used" -#~ msgstr "attributet %<trap%> är redan använt" +#~ msgstr "attributet %<trap%> är redan använt" #~ msgid " typedef int (__vliw *vfuncptr) ();" #~ msgstr " typedef int (__vliw *vfuncptr) ();" @@ -45235,181 +45238,181 @@ msgstr "skapar selektor för icke existerande metod %qE" #~ msgstr "MIPS16 TLS" #~ msgid "CPU names must be lower case" -#~ msgstr "CPU-namn måste vara med gemener" +#~ msgstr "CPU-namn mÃ¥ste vara med gemener" #~ msgid "unknown -m%s= option specified: '%s'" -#~ msgstr "okänt flagga -m%s= angiven: \"%s\"" +#~ msgstr "okänt flagga -m%s= angiven: â€%sâ€" #~ msgid "unknown value %s for -mfpu" -#~ msgstr "okänt värde %s till -mfpu" +#~ msgstr "okänt värde %s till -mfpu" #~ msgid "invalid option for -mcmodel: '%s'" -#~ msgstr "ogiltig alternativ till -mcmodel: \"%s\"" +#~ msgstr "ogiltig alternativ till -mcmodel: â€%sâ€" #~ msgid "unknown ABI specified: '%s'" -#~ msgstr "okänt ABI angivet: \"%s\"" +#~ msgstr "okänt ABI angivet: â€%sâ€" #~ msgid "bad value (%s) for -mcpu" -#~ msgstr "felaktigt värde (%s) till -mcpu" +#~ msgstr "felaktigt värde (%s) till -mcpu" #~ msgid "bad value (%s) for -mtune" -#~ msgstr "felaktigt värde (%s) till -mtune" +#~ msgstr "felaktigt värde (%s) till -mtune" #~ msgid "unknown -mtraceback arg %qs; expecting %<full%>, %<partial%> or %<none%>" -#~ msgstr "okänt argument %qs till -mtraceback, %<full%>, %<partial%> eller %<none%> förväntas" +#~ msgstr "okänt argument %qs till -mtraceback, %<full%>, %<partial%> eller %<none%> förväntas" #~ msgid "invalid option for -mfloat-gprs: '%s'" -#~ msgstr "ogiltig alternativ till -mfloat-gprs: \"%s\"" +#~ msgstr "ogiltig alternativ till -mfloat-gprs: â€%sâ€" #~ msgid "unknown -malign-XXXXX option specified: '%s'" -#~ msgstr "okänd -malign-XXXXX-flagga angiven: \"%s\"" +#~ msgstr "okänd -malign-XXXXX-flagga angiven: â€%sâ€" #~ msgid "out-of-line save/restore routines not supported on Darwin" -#~ msgstr "rutiner för out-of-line save/restore stödjs inte på Darwin" +#~ msgstr "rutiner för out-of-line save/restore stödjs inte pÃ¥ Darwin" #~ msgid "frame size of function %qs is " -#~ msgstr "ramstorlek på funktion %qs är " +#~ msgstr "ramstorlek pÃ¥ funktion %qs är " #~ msgid "%qE declared as both exported to and imported from a DLL" -#~ msgstr "%qE är deklarerad både som exporterad till och importerad från en DLL" +#~ msgstr "%qE är deklarerad bÃ¥de som exporterad till och importerad frÃ¥n en DLL" #~ msgid "failure in redeclaration of %q+D: dllimport%'d symbol lacks external linkage" -#~ msgstr "fel i omdeklaration av %q+D: dllimport:erad symbol har inte extern länkklass" +#~ msgstr "fel i omdeklaration av %q+D: dllimport:erad symbol har inte extern länkklass" #~ msgid "function %q+D is defined after prior declaration as dllimport: attribute ignored" -#~ msgstr "funktionen %q+D är definierad efter tidigare deklaration som dllimport; attributet ignoreras" +#~ msgstr "funktionen %q+D är definierad efter tidigare deklaration som dllimport; attributet ignoreras" #~ msgid "inline function %q+D is declared as dllimport: attribute ignored" -#~ msgstr "inline-funktionen %q+D är deklarerad som dllimport; attributet ignoreras" +#~ msgstr "inline-funktionen %q+D är deklarerad som dllimport; attributet ignoreras" #~ msgid "repeated using declaration %q+D" #~ msgstr "upprepad using-deklaration %q+D" #~ msgid "using declaration %q+D conflicts with a previous using declaration" -#~ msgstr "using-deklaration %q+D står i konflikt med en tidigare using-deklaration" +#~ msgstr "using-deklaration %q+D stÃ¥r i konflikt med en tidigare using-deklaration" #~ msgid "argument of type %qT does not match %qT" #~ msgstr "argument av typen %qT matchar inte %qT" #~ msgid "continue statement not within loop or switch" -#~ msgstr "continue-sats som inte är i en loop eller switch" +#~ msgstr "continue-sats som inte är i en loop eller switch" #~ msgid "cannot initialize %qT from %qT" -#~ msgstr "det går inte att initiera %qT från %qT" +#~ msgstr "det gÃ¥r inte att initiera %qT frÃ¥n %qT" #~ msgid "%<__int128%> invalid for %qs" -#~ msgstr "%<__int128%> ogiltig för %qs" +#~ msgstr "%<__int128%> ogiltig för %qs" #~ msgid "non-static data member initializers" #~ msgstr "initierare av icke-statiska datamedlemmar" #~ msgid "ISO C++ forbids initialization of member %qD" -#~ msgstr "ISO C++ förbjuder initiering av medlem %qD" +#~ msgstr "ISO C++ förbjuder initiering av medlem %qD" #~ msgid "making %qD static" -#~ msgstr "gör %qD statisk" +#~ msgstr "gör %qD statisk" #~ msgid "value-initialization of %q#D, which has reference type" -#~ msgstr "värdeinitiering av %q#D, som har referenstyp" +#~ msgstr "värdeinitiering av %q#D, som har referenstyp" #~ msgid "uninitialized base %qT in %<constexpr%> constructor" #~ msgstr "oinitierad bas %qT i %<constexpr%>-konstruerare" #~ msgid "ISO C++ forbids initialization in array new" -#~ msgstr "ISO C++ förbjuder tilldelning i vektor-new" +#~ msgstr "ISO C++ förbjuder tilldelning i vektor-new" #~ msgid "mangling new-expression" #~ msgstr "manglar new-uttryck" #~ msgid "%qD cannot be declared as constexpr" -#~ msgstr "%qD får inte deklareras som constexpr" +#~ msgstr "%qD fÃ¥r inte deklareras som constexpr" #~ msgid "%qD declared virtual cannot be defaulted in the class body" -#~ msgstr "%qD deklarerad virtuell kan inte få standardvärde i klasskroppen" +#~ msgstr "%qD deklarerad virtuell kan inte fÃ¥ standardvärde i klasskroppen" #~ msgid "%qE is not a valid template argument for type %qT because function %qD has not external linkage" -#~ msgstr "%qE är inte ett giltigt mallargument för typ %qT eftersom funktionen %qD inte har extern länkklass" +#~ msgstr "%qE är inte ett giltigt mallargument för typ %qT eftersom funktionen %qD inte har extern länkklass" #~ msgid "cannot expand %<%E%> into a fixed-length argument list" -#~ msgstr "det går inte att expandera %<%E%> till en argumentlista med fast längd" +#~ msgstr "det gÃ¥r inte att expandera %<%E%> till en argumentlista med fast längd" #~ msgid "cannot expand %<%T%> into a fixed-length argument list" -#~ msgstr "det går inte att expandera %<%T%> till en argumentlista med fast längd" +#~ msgstr "det gÃ¥r inte att expandera %<%T%> till en argumentlista med fast längd" #~ msgid "base class %qT has cv qualifiers" #~ msgstr "basklass %qT har cv-kvalificerare" #~ msgid "%qE refers to a set of overloaded functions" -#~ msgstr "%qE refererar till ett antal överlagrade funktioner" +#~ msgstr "%qE refererar till ett antal överlagrade funktioner" #~ msgid "unable to determine the declared type of expression %<%E%>" -#~ msgstr "kan inte avgöra den deklarerade typen på uttrycket %<%E%>" +#~ msgstr "kan inte avgöra den deklarerade typen pÃ¥ uttrycket %<%E%>" #~ msgid "incomplete type %qT not allowed" -#~ msgstr "ofullständig typ %qT är inte tillåten" +#~ msgstr "ofullständig typ %qT är inte tillÃ¥ten" #~ msgid "%qE is not a potential constant expression" -#~ msgstr "%qE får inte ett potentiellt konstant uttryck" +#~ msgstr "%qE fÃ¥r inte ett potentiellt konstant uttryck" #~ msgid "%qD is not %<constexpr%>" -#~ msgstr "%qD är inte %<constexpr%>" +#~ msgstr "%qD är inte %<constexpr%>" #~ msgid "object argument is not a potential constant expression" -#~ msgstr "objektargument är inte ett potentiellt konstant uttryck" +#~ msgstr "objektargument är inte ett potentiellt konstant uttryck" #~ msgid "%qE is not a function name" -#~ msgstr "%qE är inte ett funktionsnamn" +#~ msgstr "%qE är inte ett funktionsnamn" #~ msgid "argument in position %qP is not a potential constant expression" -#~ msgstr "argument i position %qP är inte ett potentiellt konstant uttryck" +#~ msgstr "argument i position %qP är inte ett potentiellt konstant uttryck" #~ msgid "cannot deduce lambda return type from a braced-init-list" -#~ msgstr "kan inte härleda returtyptyp för lambda från en klammeromsluten initierarlista" +#~ msgstr "kan inte härleda returtyptyp för lambda frÃ¥n en klammeromsluten initierarlista" #~ msgid "lambda return type can only be deduced when the return statement is the only statement in the function body" -#~ msgstr "lambda-returtypen kan endast härledas när retursatsen är den enda satsen i funktionskroppen" +#~ msgstr "lambda-returtypen kan endast härledas när retursatsen är den enda satsen i funktionskroppen" #~ msgid "Polymorphic array at %C not yet supported" -#~ msgstr "Polymorf vektor vid %C stödjs inte ännu" +#~ msgstr "Polymorf vektor vid %C stödjs inte ännu" #~ msgid "Actual argument to '%s' at %L must be a coarray and thus shall not have an array designator" -#~ msgstr "Aktuellt argument till \"%s\" vid %L måste vara en co-vektor och skall därför inte ha en vektorbeteckning" +#~ msgstr "Aktuellt argument till â€%s†vid %L mÃ¥ste vara en co-vektor och skall därför inte ha en vektorbeteckning" #~ msgid "Expected a PURE procedure for argument '%s' at %L" -#~ msgstr "Förväntade en PURE-procedur som argument \"%s\" vid %L" +#~ msgstr "Förväntade en PURE-procedur som argument â€%s†vid %L" #~ msgid "SOURCE tag at %L requires only a single entity in the allocation-list" -#~ msgstr "SOURCE-taggen vid %L tillåter endast en enda enhet i allokeringslistan" +#~ msgstr "SOURCE-taggen vid %L tillÃ¥ter endast en enda enhet i allokeringslistan" #~ msgid "Allocation would exceed memory limit -- malloc() failed" -#~ msgstr "Allokering skulle överskrida minnsesgränsen -- malloc() misslyckades" +#~ msgstr "Allokering skulle överskrida minnsesgränsen -- malloc() misslyckades" #~ msgid "Syntax error in structure constructor at %C" #~ msgstr "Syntaxfel i postkonstruerare vid %C" #~ msgid "Dummy procedure at %L not allowed in ELEMENTAL procedure" -#~ msgstr "Attrapprocedur vid %L är inte tillåten i ELEMENTAL-procedur" +#~ msgstr "Attrapprocedur vid %L är inte tillÃ¥ten i ELEMENTAL-procedur" #~ msgid "Non-scalar base object at %L currently not implemented" -#~ msgstr "Basobjekt som inte är skalärt vid %L är för närvarande inte implementerat" +#~ msgstr "Basobjekt som inte är skalärt vid %L är för närvarande inte implementerat" #~ msgid "Sorry, allocatable scalar coarrays are not yet supported at %L" -#~ msgstr "Tyvärr, allokerbara skalära co-vektorer stödjs inte ännu vid %L" +#~ msgstr "Tyvärr, allokerbara skalära co-vektorer stödjs inte ännu vid %L" #~ msgid "Argument of SELECT statement at %L must be a scalar expression" -#~ msgstr "Argument till SELECT-sats vid %L måste vara ett skalärt uttryck" +#~ msgstr "Argument till SELECT-sats vid %L mÃ¥ste vara ett skalärt uttryck" #~ msgid "Data transfer element at %L cannot have POINTER components" -#~ msgstr "Dataöverföringselement vid %L får inte ha POINTER-komponenter" +#~ msgstr "Dataöverföringselement vid %L fÃ¥r inte ha POINTER-komponenter" #~ msgid "Data transfer element at %L cannot have ALLOCATABLE components" -#~ msgstr "Dataöverföringselement vid %L får inte ha ALLOCATABLE-komponenter" +#~ msgstr "Dataöverföringselement vid %L fÃ¥r inte ha ALLOCATABLE-komponenter" #~ msgid "Variable must not be polymorphic in assignment at %L" -#~ msgstr "Variabeln får inte vara polymorfisk i tilldelningen vid %L" +#~ msgstr "Variabeln fÃ¥r inte vara polymorfisk i tilldelningen vid %L" #~ msgid "Types mismatch for dummy argument '%s' of '%s' %L in respect to the overridden procedure" -#~ msgstr "Typer stämmer inte överens för attrappargument \"%s\" till \"%s\" %L med hänsyn till den åsidosatta proceduren" +#~ msgstr "Typer stämmer inte överens för attrappargument â€%s†till â€%s†%L med hänsyn till den Ã¥sidosatta proceduren" #~ msgid "Invalid SHIFT argument of DSHIFTL at %L" #~ msgstr "Ogiltigt SHIFT-argument till DSHIFTL vid %L" @@ -45418,7 +45421,7 @@ msgstr "skapar selektor för icke existerande metod %qE" #~ msgstr "Ogiltigt andra argument till IBCLR vid %L" #~ msgid "Second argument of IBCLR exceeds bit size at %L" -#~ msgstr "Andra argumentet till IBCLR överskrider bitstorleken vid %L" +#~ msgstr "Andra argumentet till IBCLR överskrider bitstorleken vid %L" #~ msgid "Invalid second argument of IBITS at %L" #~ msgstr "Ogiltigt andra argument till IBITS vid %L" @@ -45430,7 +45433,7 @@ msgstr "skapar selektor för icke existerande metod %qE" #~ msgstr "Ogiltigt andra argument till IBSET vid %L" #~ msgid "Second argument of IBSET exceeds bit size at %L" -#~ msgstr "Andra argumentet till IBSET överskrider bitstorleken vid %L" +#~ msgstr "Andra argumentet till IBSET överskrider bitstorleken vid %L" #~ msgid "Invalid second argument of %s at %L" #~ msgstr "Ogiltigt andra argument till %s vid %L" @@ -45442,28 +45445,28 @@ msgstr "skapar selektor för icke existerande metod %qE" #~ msgstr "Ogiltigt tredje argument till ISHFTC vid %L" #~ msgid "Magnitude of third argument of ISHFTC exceeds BIT_SIZE of first argument at %L" -#~ msgstr "Magnituden på tredje argumentet till ISHFTC överskrider BIT_SIZE av första argumentet vid %L" +#~ msgstr "Magnituden pÃ¥ tredje argumentet till ISHFTC överskrider BIT_SIZE av första argumentet vid %L" #~ msgid "Magnitude of second argument of ISHFTC exceeds third argument at %L" -#~ msgstr "Magnituden på andra argumentet till ISHFTC överskrider tredje argumentet vid %L" +#~ msgstr "Magnituden pÃ¥ andra argumentet till ISHFTC överskrider tredje argumentet vid %L" #~ msgid "Not yet implemented: LCOBOUND for coarray with non-constant cobounds at %L" -#~ msgstr "Ännu inte implementerat: LCOBOUND för co-vektor med icke-konstanta co-gränser vid %L" +#~ msgstr "Ännu inte implementerat: LCOBOUND för co-vektor med icke-konstanta co-gränser vid %L" #~ msgid "Too few elements in expression for SUB= argument at %L" -#~ msgstr "För få element i uttrycket för SUB=-argument vid %L" +#~ msgstr "För fÃ¥ element i uttrycket för SUB=-argument vid %L" #~ msgid "Too many elements in expression for SUB= argument at %L" -#~ msgstr "För många element i uttrycket för SUB=-argument vid %L" +#~ msgstr "För mÃ¥nga element i uttrycket för SUB=-argument vid %L" #~ msgid "Not yet implemented: IMAGE_INDEX for coarray with non-constant cobounds at %L" -#~ msgstr "Ännu inte implementerat: IMAGE_INDEX för co-vektor med icke-konstanta co-gränser vid %L" +#~ msgstr "Ännu inte implementerat: IMAGE_INDEX för co-vektor med icke-konstanta co-gränser vid %L" #~ msgid "Not yet implemented: THIS_IMAGE for coarray with non-constant cobounds at %L" -#~ msgstr "Ännu inte implementerat: THIS_IMAGE för co-vektor med icke-konstanta co-gränser vid %L" +#~ msgstr "Ännu inte implementerat: THIS_IMAGE för co-vektor med icke-konstanta co-gränser vid %L" #~ msgid "Not yet implemented: UCOBOUND for coarray with non-constant cobounds at %L" -#~ msgstr "Ännu inte implementerat: UCOBOUND för co-vektor med icke-konstanta co-gränser vid %L" +#~ msgstr "Ännu inte implementerat: UCOBOUND för co-vektor med icke-konstanta co-gränser vid %L" #~ msgid "resolution sub id %x not in object file" -#~ msgstr "upplösning sub id %x finns inte i objektfilen" +#~ msgstr "upplösning sub id %x finns inte i objektfilen" diff --git a/gcc/rtl.h b/gcc/rtl.h index b1b681be568..bf1e26d66c5 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -2089,6 +2089,11 @@ extern GTY(()) rtx const_tiny_rtx[4][(int) MAX_MACHINE_MODE]; #define CONST2_RTX(MODE) (const_tiny_rtx[2][(int) (MODE)]) #define CONSTM1_RTX(MODE) (const_tiny_rtx[3][(int) (MODE)]) +extern GTY(()) rtx pc_rtx; +extern GTY(()) rtx cc0_rtx; +extern GTY(()) rtx ret_rtx; +extern GTY(()) rtx simple_return_rtx; + /* If HARD_FRAME_POINTER_REGNUM is defined, then a special dummy reg is used to represent the frame pointer. This is because the hard frame pointer and the automatic variables are separated by an amount @@ -2112,10 +2117,6 @@ extern GTY(()) rtx const_tiny_rtx[4][(int) MAX_MACHINE_MODE]; /* Index labels for global_rtl. */ enum global_rtl_index { - GR_PC, - GR_CC0, - GR_RETURN, - GR_SIMPLE_RETURN, GR_STACK_POINTER, GR_FRAME_POINTER, /* For register elimination to work properly these hard_frame_pointer_rtx, @@ -2208,12 +2209,6 @@ extern struct target_rtl *this_target_rtl; #define mode_mem_attrs \ (this_target_rtl->x_mode_mem_attrs) -/* Standard pieces of rtx, to be substituted directly into things. */ -#define pc_rtx (global_rtl[GR_PC]) -#define ret_rtx (global_rtl[GR_RETURN]) -#define simple_return_rtx (global_rtl[GR_SIMPLE_RETURN]) -#define cc0_rtx (global_rtl[GR_CC0]) - /* All references to certain hard regs, except those created by allocating pseudo regs into them (when that's possible), go through these unique rtx objects. */ diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c index a93cd68d1a3..c53d2e1a8e9 100644 --- a/gcc/sel-sched-ir.c +++ b/gcc/sel-sched-ir.c @@ -3658,7 +3658,7 @@ sel_recompute_toporder (void) static bool maybe_tidy_empty_bb (basic_block bb) { - basic_block succ_bb, pred_bb; + basic_block succ_bb, pred_bb, note_bb; VEC (basic_block, heap) *dom_bbs; edge e; edge_iterator ei; @@ -3697,6 +3697,17 @@ maybe_tidy_empty_bb (basic_block bb) pred_bb = NULL; dom_bbs = NULL; + /* Save a pred/succ from the current region to attach the notes to. */ + note_bb = NULL; + FOR_EACH_EDGE (e, ei, bb->preds) + if (in_current_region_p (e->src)) + { + note_bb = e->src; + break; + } + if (note_bb == NULL) + note_bb = succ_bb; + /* Redirect all non-fallthru edges to the next bb. */ while (rescan_p) { @@ -3746,10 +3757,8 @@ maybe_tidy_empty_bb (basic_block bb) else { /* This is a block without fallthru predecessor. Just delete it. */ - gcc_assert (pred_bb != NULL); - - if (in_current_region_p (pred_bb)) - move_bb_info (pred_bb, bb); + gcc_assert (note_bb); + move_bb_info (note_bb, bb); remove_empty_bb (bb, true); } @@ -5231,10 +5240,9 @@ sel_remove_bb (basic_block bb, bool remove_from_cfg_p) static void move_bb_info (basic_block merge_bb, basic_block empty_bb) { - gcc_assert (in_current_region_p (merge_bb)); - - concat_note_lists (BB_NOTE_LIST (empty_bb), - &BB_NOTE_LIST (merge_bb)); + if (in_current_region_p (merge_bb)) + concat_note_lists (BB_NOTE_LIST (empty_bb), + &BB_NOTE_LIST (merge_bb)); BB_NOTE_LIST (empty_bb) = NULL_RTX; } diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c index 2af01aea99e..2829f60a0cf 100644 --- a/gcc/sel-sched.c +++ b/gcc/sel-sched.c @@ -4265,9 +4265,10 @@ invoke_aftermath_hooks (fence_t fence, rtx best_insn, int issue_more) return issue_more; } -/* Estimate the cost of issuing INSN on DFA state STATE. */ +/* Estimate the cost of issuing INSN on DFA state STATE. Write to PEMPTY + true when INSN does not change the processor state. */ static int -estimate_insn_cost (rtx insn, state_t state) +estimate_insn_cost (rtx insn, state_t state, bool *pempty) { static state_t temp = NULL; int cost; @@ -4277,6 +4278,8 @@ estimate_insn_cost (rtx insn, state_t state) memcpy (temp, state, dfa_state_size); cost = state_transition (temp, insn); + if (pempty) + *pempty = (memcmp (temp, state, dfa_state_size) == 0); if (cost < 0) return 0; @@ -4307,7 +4310,7 @@ get_expr_cost (expr_t expr, fence_t fence) return 0; } else - return estimate_insn_cost (insn, FENCE_STATE (fence)); + return estimate_insn_cost (insn, FENCE_STATE (fence), NULL); } /* Find the best insn for scheduling, either via max_issue or just take @@ -7020,7 +7023,7 @@ reset_sched_cycles_in_current_ebb (void) { int cost, haifa_cost; int sort_p; - bool asm_p, real_insn, after_stall, all_issued; + bool asm_p, real_insn, after_stall, all_issued, empty; int clock; if (!INSN_P (insn)) @@ -7047,7 +7050,7 @@ reset_sched_cycles_in_current_ebb (void) haifa_cost = 0; } else - haifa_cost = estimate_insn_cost (insn, curr_state); + haifa_cost = estimate_insn_cost (insn, curr_state, &empty); /* Stall for whatever cycles we've stalled before. */ after_stall = 0; @@ -7081,7 +7084,7 @@ reset_sched_cycles_in_current_ebb (void) if (!after_stall && real_insn && haifa_cost > 0 - && estimate_insn_cost (insn, curr_state) == 0) + && estimate_insn_cost (insn, curr_state, NULL) == 0) break; /* When the data dependency stall is longer than the DFA stall, @@ -7093,7 +7096,7 @@ reset_sched_cycles_in_current_ebb (void) if ((after_stall || all_issued) && real_insn && haifa_cost == 0) - haifa_cost = estimate_insn_cost (insn, curr_state); + haifa_cost = estimate_insn_cost (insn, curr_state, NULL); } haifa_clock += i; @@ -7125,7 +7128,8 @@ reset_sched_cycles_in_current_ebb (void) if (real_insn) { cost = state_transition (curr_state, insn); - issued_insns++; + if (!empty) + issued_insns++; if (sched_verbose >= 2) { diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index 35320c2fad9..a1ac0008c75 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -1141,15 +1141,14 @@ place_field (record_layout_info rli, tree field) } /* Does this field automatically have alignment it needs by virtue - of the fields that precede it and the record's own alignment? - We already align ms_struct fields, so don't re-align them. */ - if (known_align < desired_align - && !targetm.ms_bitfield_layout_p (rli->t)) + of the fields that precede it and the record's own alignment? */ + if (known_align < desired_align) { /* No, we need to skip space before this field. Bump the cumulative size to multiple of field alignment. */ - if (DECL_SOURCE_LOCATION (field) != BUILTINS_LOCATION) + if (!targetm.ms_bitfield_layout_p (rli->t) + && DECL_SOURCE_LOCATION (field) != BUILTINS_LOCATION) warning (OPT_Wpadded, "padding struct to align %q+D", field); /* If the alignment is still within offset_align, just align @@ -1171,7 +1170,8 @@ place_field (record_layout_info rli, tree field) if (! TREE_CONSTANT (rli->offset)) rli->offset_align = desired_align; - + if (targetm.ms_bitfield_layout_p (rli->t)) + rli->prev_field = NULL; } /* Handle compatibility with PCC. Note that if the record has any diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1c813f18002..f1c9845d942 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,467 @@ +2012-03-09 Andrew Pinski <apinski@cavium.com> + + PR middle-end/51988 + * gcc.dg/tree-ssa/phi-opt-8.c: New testcase. + * gcc.dg/tree-ssa/phi-opt-9.c: New testcase. + +2012-03-09 Jiangning Liu <jiangning.liu@arm.com> + + * gcc.dg/tree-ssa/scev-3.c: New. + * gcc.dg/tree-ssa/scev-4.c: New. + +2012-03-08 Tobias Burnus <burnus@net-b.de> + + PR fortran/52469 + * gfortran.dg/proc_ptr_34.f90 + +2012-03-07 Jason Merrill <jason@redhat.com> + + PR c++/52521 + * g++.dg/cpp0x/udlit-mangle.C: New. + +2012-03-06 Pat Haugen <pthaugen@us.ibm.com> + + * gcc.dg/torture/va-arg-25.c: Fix typo for powerpc64-*-* check. + +2012-03-06 Richard Guenther <rguenther@suse.de> + + PR middle-end/52493 + * gcc.dg/torture/pr52493.c: New testcase. + +2012-03-06 Richard Guenther <rguenther@suse.de> + + PR lto/52097 + * gcc.dg/lto/pr52097_0.c: New testcase. + +2012-03-06 Oleg Endo <olegendo@gcc.gnu.org> + + PR target/51244 + * gcc.target/sh/pr51244-1.c: New. + * gcc.target/sh/pr51244-2.c: New. + * gcc.target/sh/pr51244-3.c: New. + +2012-03-05 Jason Merrill <jason@redhat.com> + + PR c++/51930 + * g++.dg/ext/visibility/template11.C: New. + + * g++.dg/cpp0x/implicit13.C: New. + +2012-03-05 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/51721 + * gcc.dg/tree-ssa/vrp63.c: New test. + * gcc.dg/pr51721.c: New test. + +2012-03-04 Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/50981 + * gfortran.dg/elemental_optional_args_5.f03: Add subcomponent actual + argument checks. + +2012-03-04 H.J. Lu <hongjiu.lu@intel.com> + + PR target/52146 + * gcc.target/i386/pr52146.c: Update final-scan to allow $-18874240. + +2012-03-04 Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/50981 + * gfortran.dg/elemental_optional_args_5.f03: Add array checks. + +2012-03-04 Georg-Johann Lay <avr@gjlay.de> + + * gcc.dg/torture/pr52402.c: Add dg-require-effective-target + int32plus. + +2012-03-03 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/nsdmi-defer6.C: New. + + Core 1270 + * g++.dg/cpp0x/initlist65.C: New. + + PR c++/36797 + * g++.dg/ext/is_empty2.C: New. + +2012-03-03 Tobias Burnus <burnus@net-b.de> + + PR fortran/48820 + * gfortran.dg/assumed_type_3.f90: Undo previous commit. + +2012-03-03 Tobias Burnus <burnus@net-b.de> + + * gfortran.dg/bind_c_dts_4.f03: Add dg-options -Wc-binding-type. + * gfortran.dg/bind_c_implicit_vars.f03: Ditto. + * gfortran.dg/bind_c_usage_8.f03: Ditto. + * gfortran.dg/c_kind_tests_2.f03: Ditto. + * gfortran.dg/class_30.f90: Remove dg-warning line. + * gfortran.dg/bind_c_usage_25.f90: New. + +2012-03-03 Tobias Burnus <burnus@net-b.de> + + PR fortran/48820 + * gfortran.dg/assumed_type_1.f90: Correct dg-error. + * gfortran.dg/assumed_type_3.f90: Correct dg-error. + * gfortran.dg/assumed_type_4.f90: Correct dg-error. + +2012-03-03 Tobias Burnus <burnus@net-b.de> + + PR fortran/48820 + * gfortran.dg/assumed_type_1.f90: New. + * gfortran.dg/assumed_type_2.f90: New. + * gfortran.dg/assumed_type_3.f90: New. + * gfortran.dg/assumed_type_4.f90: New. + +2012-03-02 Oleg Endo <olegendo@gcc.gnu.org> + + PR target/49486 + * gcc.target/sh/pr49468-si.c: Skip unsupported test for SH64. + * gcc.target/sh/pr49468-di.c: New. + +2012-03-02 Maxim Kuvyrkov <maxim@codesourcery.com> + + * gcc.dg/graphite/pr50561.c: Update. + +2012-03-02 Peter Bergner <bergner@vnet.ibm.com> + + * gcc.target/powerpc/pr52457.c: New test. + +2012-03-02 Ulrich Weigand <ulrich.weigand@linaro.org> + + * gcc.target/arm/sat-1.c: New test. + +2012-03-02 Uros Bizjak <ubizjak@gmail.com> + + PR target/46716 + * gcc.target/i386/pr46716.c: New test. + +2012-03-02 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/51989 + * g++.dg/cpp0x/sfinae32.C: New. + +2012-03-02 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/52406 + * gcc.dg/torture/pr52406.c: New testcase. + +2012-03-02 Tobias Burnus <burnus@net-b.de> + + PR fortran/52325 + * gfortran.dg/derived_comp_array_ref_8.f90: New. + * gfortran.dg/nullify_2.f90: Update dg-error. + * gfortran.dg/nullify_4.f90: Ditto. + * gfortran.dg/pointer_init_6.f90: Ditto. + +2012-03-02 Tobias Burnus <burnus@net-b.de> + + PR fortran/52270 + * gfortran.dg/class_51.f90: New. + +2012-03-02 Tobias Burnus <burnus@net-b.de> + + PR fortran/52452 + * gfortran.dg/intrinsic_8.f90: New. + +2012-03-01 Kai Tietz <ktietz@redhat.com> + + * gcc.dg/torture/pr47917.c: Make test using POSIX-printf + routines on mingw targets. + * gcc.dg/vect/pr46126.c (uintptr_t): Add support for LLP64 target. + +2012-03-01 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/52445 + * gcc.dg/pr52445.c: New test. + +2012-02-29 Jakub Jelinek <jakub@redhat.com> + + PR target/52437 + * gcc.c-torture/compile/pr52437.c: New test. + + PR middle-end/52419 + * gcc.dg/torture/pr52419.c: New test. + + PR tree-optimization/52429 + * gcc.dg/torture/pr52429.c: New test. + * g++.dg/opt/pr52429.C: New test. + +2012-02-29 Richard Guenther <rguenther@suse.de> + + PR testsuite/52297 + * gcc.dg/lto/trans-mem-1_0.c: Remove. + * gcc.dg/lto/trans-mem-1_1.c: Likewise. + * gcc.dg/lto/trans-mem-2_0.c: Likewise. + * gcc.dg/lto/trans-mem-2_1.c: Likewise. + * gcc.dg/lto/trans-mem-4_0.c: Likewise. + * gcc.dg/lto/trans-mem-4_1.c: Likewise. + +2012-02-29 Jakub Jelinek <jakub@redhat.com> + + * gcc.dg/torture/pr52402.c: Add -w -Wno-psabi to dg-options. + +2012-02-29 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/52386 + * gfortran.dg/realloc_on_assign_13.f90 : New test. + +2012-02-28 Matthew Gretton-Dann <matthew.gretton-dann@arm.com> + + PR target/51534 + * gcc.target/arm/neon/pr51534.c: New testcase. + +2012-02-28 Richard Guenther <rguenther@suse.de> + + PR target/52407 + * gcc.dg/torture/pr52407.c: New testcase. + +2012-02-28 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> + + * gcc.target/arm/vfp1.c (dg_do run): Run on all eabi variants. + * gcc.target/arm/vfp2.c: Likewise. + * gcc.target/arm/vfp3.c: Likewise. + * gcc.target/arm/vfp4.c: Likewise. + * gcc.target/arm/vfp5.c: Likewise. + * gcc.target/arm/vfp6.c: Likewise. + * gcc.target/arm/vfp7.c: Likewise. + * gcc.target/arm/vfp8.c: Likewise. + * gcc.target/arm/vfp9.c: Likewise. + * gcc.target/arm/vfp10.c: Likewise. + * gcc.target/arm/vfp11.c: Likewise. + * gcc.target/arm/vfp12.c: Likewise. + * gcc.target/arm/vfp13.c: Likewise. + * gcc.target/arm/vfp14.c: Likewise. + * gcc.target/arm/vfp15.c: Likewise. + * gcc.target/arm/vfp16.c: Likewise. + * gcc.target/arm/vfp17.c: Likewise. + * gcc.target/arm/neon-constants.h: New file. + * gcc.target/arm/neon-vect1.c: New test. + * gcc.target/arm/neon-vect2.c: New test. + * gcc.target/arm/neon-vect3.c: New test. + * gcc.target/arm/neon-vect4.c: New test. + * gcc.target/arm/neon-vect5.c: New test. + * gcc.target/arm/neon-vect6.c: New test. + * gcc.target/arm/neon-vect7.c: New test. + * gcc.target/arm/neon-vect8.c: New test. + +2012-02-28 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/52402 + * gcc.dg/torture/pr52402.c: New testcase. + +2012-02-28 Richard Guenther <rguenther@suse.de> + + PR lto/52400 + * g++.dg/lto/pr52400_0.C: New testcase. + +2012-02-28 Georg-Johann Lay <avr@gjlay.de> + + * gcc.target/avr/torture/builtins-1.c: New test. + * gcc.target/avr/torture/builtins-error.c: New test. + +2012-02-28 Kai Tietz <ktietz@redhat.com> + + * gcc.target/i386/pr46939.c (long): Fix LP64 vs LLP64 issue. + * gcc.target/i386/pr45352-2.c: Likewise. + * gcc.target/i386/bitfield3.c: Add -mno-ms-bitfields for mingw targets. + * gcc.target/i386/xop-vshift-1.c (random): Use on mingw + targets instead rand. + * gcc.target/i386/sse4_1-blendps-2.c: Likewise. + * gcc.target/i386/sse2-mul-1.c: Likewise. + * gcc.target/i386/sse4_1-blendps.c: Likewise. + * gcc.target/i386/pad-6b.c: Adjust test for x64 mingw target. + * gcc.target/i386/pad-1.c: Likewise. + * gcc.target/i386/pad-9.c: Likewise. + * gcc.target/i386/pad-2.c: Likewise. + * gcc.target/i386/pad-5b.c: Likewise. + * gcc.target/i386/pad-8.c: Likewise. + * gcc.target/i386/pr46470.c: Skip for x64 mingw target. + * gcc.target/i386/pr44130.c: Likewise. + * gcc.target/i386/align-main-1.c: Likewise. + * gcc.target/i386/align-main-2.c: Likewise. + * gcc.target/i386/sw-1.c: Likewise. + * gcc.target/i386/avx-vzeroupper-5.c: Add -mabi=sysv + on x64 mingw target. + * gcc.target/i386/avx-vzeroupper-4.c: Likewise. + * gcc.target/i386/pr46295.c: Likewise. + * gcc.target/i386/amd64-abi-1.c: Likewise. + * gcc.target/i386/amd64-abi-2.c: Likewise. + * gcc.target/i386/pr39082-1.c: Likewise. + * gcc.target/i386/pr39162.c: Likewise. + * gcc.target/i386/pr22152.c: Likewise. + * gcc.target/i386/wrgsbase-2.c: Adjust dg-final rule. + * gcc.target/i386/wrfsbase-2.c: Likewise. + * gcc.target/i386/local.c: Likewise + * gcc.target/i386/wrgsbase-1.c: Likewise. + * gcc.target/i386/wrfsbase-1.c: Likewise. + * gcc.target/i386/pr39315-3.c: Likewise. + * gcc.target/i386/pr35767-4.c: Likewise. + * gcc.target/i386/pr45336-3.c (pextrd): Don't check for + x64 mingw target. + * gcc.target/i386/pr45336-2.c: Likewise. + * gcc.target/i386/pr45336-1.c: Likewise. + * gcc.target/i386/pr45336-4.c: Likewise. + +2012-02-27 Tristan Gingold <gingold@adacore.com> + + * gnat.dg/array20.ad[sb]: New test. + +2012-02-27 Jakub Jelinek <jakub@redhat.com> + + PR target/52375 + * gcc.target/arm/pr52375.c: New test. + * gcc.c-torture/compile/pr52375.c: New test. + +2012-02-27 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> + + * gfortran.dg/typebound_operator_9.f03: Skip on SPU. + * gcc.dg/torture/builtin-complex-1.c: Skip "float" tests on SPU. + +2012-02-27 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/aggr19.adb: New test. + * gnat.dg/aggr19_pkg.ad[sb]: New helper. + +2012-02-26 Oleg Endo <olegendo@gcc.gnu.org> + + PR target/49263 + * gcc.target/sh/pr49263.c: New. + +2012-02-24 Andrew MacLeod <amacleod@redhat.com> + + * gcc.dg/simulate-thread/simulate-thread.gdb: Use return value from + simulate_thread_wrapper_other_threads + * gcc.dg/simulate-thread/atomic-load-int128.c (simulate_thread_main): + Move initialization of 'value' to main(). + (main): Initialize 'value'; + * gcc.dg/simulate-thread/speculative-store.c + (simulate_thread_step_verify): Return 0 when successful. + * gcc.dg/simulate-thread/simulate-thread.h (HOSTILE_THREAD_THRESHOLD): + Reduce threshold. + (INSN_COUNT_THRESHOLD): New. Instruction limit to terminate test. + (simulate_thread_wrapper_other_threads): Return a success/fail value + and issue an error if the instruction count threshold is exceeded. + +2012-02-24 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR target/50580 + * gcc.target/mips/interrupt_handler-2.c: Skip on mips-sgi-irix6*. + * gcc.target/mips/interrupt_handler-3.c: Likewise. + +2012-02-24 Richard Guenther <rguenther@suse.de> + + PR middle-end/52355 + * gcc.dg/pr52355.c: New testcase. + +2012-02-23 Kai Tietz <ktietz@redhat.com> + + * gcc.dg/pack-test-5.c: Add -mno-ms-bitfields option for mingw-targets. + * gcc.dg/Wpadded.c: Likewise. + * gcc.dg/bf-ms-layout-2.c: Adjust offsets to fit ms-bitfield + structure-layout. + * gcc.dg/di-sync-multithread.c: Replace for mingw-target the use + for sleep by Sleep and add windows.h include for this function. + * gcc.dg/format/dfp-printf-1.c: Adjust dg-skip-if rule for mingw + targets. + * gcc.dg/stack-usage-1.c (SIZE): Provide proper SIZE for x64 mingw + target. + * gcc.dg/tls/thr-cse-1.c: Provide proper pattern for x64 mingw target. + * gcc.dg/tls/opt-11.c (memset): Use __extension__ to avoid fail + on x64 mingw target. + * gcc.dg/bf-ms-attrib.c: Adjust expected size for ms_struct layout. + * gcc.dg/pr50251.c: Disable test for x64 mingw target. + * gcc.c-torture/execute/930930-1.c (long): Replace by ptr_t to avoid + failure on LLP64 target. + +2012-02-23 Uros Bizjak <ubizjak@gmail.com> + + PR c/52290 + * gcc.dg/noncompile/pr52290.c: New test. + +2012-02-23 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/52019 + * gcc.dg/tree-ssa/ipa-split-6.c: New test. + +2012-02-22 Kai Tietz <ktietz@redhat.com> + + * g++.dg/opt/devirt2.C: Add rule for *-*-mingw* target. + * g++.dg/opt/pr48549.C (long): Replace by long by __PTRDIFF_TYPE__ + derived pdiff_t type. + * g++.dg/torture/pr49720.C: Likewise + +2012-02-22 Uros Bizjak <ubizjak@gmail.com> + + PR target/52330 + * gcc.target/i386/pr52330.c: New test. + +2012-02-22 Tobias Burnus <burnus@net-b.de> + + PR fortran/52335 + * gfortran.dg/io_constraints_10.f90: New. + +2012-02-22 Ulrich Weigand <ulrich.weigand@linaro.org> + + * lib/target-supports.exp (check_effective_target_vect_condition): + Return true for NEON. + +2012-02-21 Kai Tietz <ktietz@redhat.com> + + * gcc.dg/bf-ms-layout-3.c: Mark char typed bitfield as extension. + +2012-02-21 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/52324 + * gcc.dg/tree-ssa/ssa-lim-10.c: New testcase. + +2012-02-21 Georg-Johann Lay <avr@gjlay.de> + + PR middle-end/51782 + * gcc.target/avr/torture/pr51782-1.c: New test. + +2012-02-21 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/52318 + * gcc.dg/pr52318.c: New test. + +2012-02-20 Kai Tietz <ktietz@redhat.com> + + * gcc.dg/bf-ms-layout-3.c: New testcase. + +2012-02-20 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR testsuite/52229 + PR fortran/32380 + * gfortran.dg/vect/pr32380.f: XFAIL on PowerPC and ia-64. + +2012-02-20 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/52298 + * gcc.dg/torture/pr52298.c: New testcase. + * gcc.dg/vect/pr52298.c: Likewise. + +2012-02-20 Georg-Johann Lay <avr@gjlay.de> + + * gcc.dg/pr52132.c: Fix FAIL on 16-bit int platforms. + * gcc.c-torture/execute/pr52286.c: Ditto. + +2012-02-20 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/52286 + * gcc.c-torture/execute/pr52286.c: New test. + +2012-02-18 Tobias Burnus <burnus@net-b.de> + + PR fortran/52295 + * gfortran.dg/interface_35.f90: Use -std=f2003. + * gfortran.dg/proc_ptr_comp_20.f90: Remove dg-warning. + * gfortran.dg/interface_assignment_4.f90: Ditto. + * gfortran.dg/bessel_1.f90: Ditto. + * gfortran.dg/func_result_6.f90: Ditto. + * gfortran.dg/hypot_1.f90: Ditto. + * gfortran.dg/proc_ptr_comp_21.f90: Ditto. + 2012-02-17 Tobias Burnus <burnus@net-b.de> PR translation/52232 @@ -87,10 +551,9 @@ 2012-02-14 Hans-Peter Nilsson <hp@axis.com> - * lib/target-supports.exp (check_effective_target_fgnu_tm): New - proc. + * lib/target-supports.exp (check_effective_target_fgnu_tm): New proc. * gfortran.dg/trans-mem-skel.f90: Gate test on effective_target - fgnu_tm. + fgnu_tm. * gcc.dg/lto/trans-mem-1_0.c, gcc.dg/lto/trans-mem-2_0.c, gcc.dg/lto/trans-mem-3_0.c, gcc.dg/lto/trans-mem-4_0.c: Ditto. * gcc.dg/tm/tm.exp: Gate the whole of gcc.dg/tm on @@ -464,8 +927,8 @@ * gcc.target/mips/mips-prepend-1.c: New test. -2012-02-02 Jan Hubicka <jh@suse.cz> - Tom de Vries <tom@codesourcery.com> +2012-02-02 Jan Hubicka <jh@suse.cz> + Tom de Vries <tom@codesourcery.com> PR middle-end/51998 * testsuite/gcc.dg/alias-12.c: New testcase. diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit13.C b/gcc/testsuite/g++.dg/cpp0x/implicit13.C new file mode 100644 index 00000000000..96bc7706040 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/implicit13.C @@ -0,0 +1,24 @@ +// Make sure that A's destructor doesn't affect constexpr +// or exception-spec on D's default constructor. +// { dg-do compile { target c++11 } } + +struct A { + constexpr A() noexcept: i(0) { } + int i; + ~A() noexcept(false); +}; + +struct B: A { }; + +// Should get static initialization, so no constructor call. +// { dg-final { scan-assembler-not "_ZN1BC1Ev" } } +B b; + +struct C { C() noexcept; ~C(); }; +struct D: C { }; +extern D d; + +void *operator new(__SIZE_TYPE__, void*) noexcept; + +#define SA(X) static_assert((X),#X) +SA(noexcept(new (&d) D)); diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist65.C b/gcc/testsuite/g++.dg/cpp0x/initlist65.C new file mode 100644 index 00000000000..36127069d22 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist65.C @@ -0,0 +1,9 @@ +// Core 1270 +// { dg-options -std=c++11 } + +struct A +{ + int i[2]; +}; + +A f() { return {1,2}; } diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C new file mode 100644 index 00000000000..033c14264dd --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C @@ -0,0 +1,8 @@ +// { dg-do compile { target c++11 } } + +struct A // { dg-error "non-static data member" } +{ + int i = (A(), 42); // { dg-message "required here" } +}; + +A a; diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae32.C b/gcc/testsuite/g++.dg/cpp0x/sfinae32.C new file mode 100644 index 00000000000..db3bf5a21fc --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae32.C @@ -0,0 +1,18 @@ +// PR c++/51989 +// { dg-options -std=c++0x } + +template <typename T> +struct is_container +{ + template <typename U, typename V = decltype(((U*)0)->begin())> + static char test(U* u); + + template <typename U> static long test(...); + + enum { value = sizeof test<T>(0) == 1 }; +}; + +int main() +{ + return is_container<void>::value; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-mangle.C b/gcc/testsuite/g++.dg/cpp0x/udlit-mangle.C new file mode 100644 index 00000000000..6de31b65ea7 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/udlit-mangle.C @@ -0,0 +1,8 @@ +// PR c++/52521 +// { dg-options -std=c++0x } +// { dg-final { scan-assembler "_Zli2_wPKc" } } + +int operator "" _w(const char*); +int main() { + 123_w; +} diff --git a/gcc/testsuite/g++.dg/ext/attrib43.C b/gcc/testsuite/g++.dg/ext/attrib43.C index fe9f0727cf6..acae3f23c90 100644 --- a/gcc/testsuite/g++.dg/ext/attrib43.C +++ b/gcc/testsuite/g++.dg/ext/attrib43.C @@ -2,4 +2,4 @@ template <class T> struct A { }; template __attribute__ ((packed)) -struct A<int>; // { dg-warning "attributes ignored" } +struct A<int>; // { dg-warning "attribute" } diff --git a/gcc/testsuite/g++.dg/ext/is_empty2.C b/gcc/testsuite/g++.dg/ext/is_empty2.C new file mode 100644 index 00000000000..d1bf64c0a62 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/is_empty2.C @@ -0,0 +1,11 @@ +// PR c++/36797 + +template <int> struct A { }; + +template <class T> +int foo (A<__is_empty (T)>* = 0); // { dg-error "built-in trait" } + +int main () +{ + foo<int>(); +} diff --git a/gcc/testsuite/g++.dg/ext/visibility/template11.C b/gcc/testsuite/g++.dg/ext/visibility/template11.C new file mode 100644 index 00000000000..fb47fe2aff2 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/visibility/template11.C @@ -0,0 +1,20 @@ +// PR c++/51930 +// { dg-require-visibility "" } +// { dg-options "-fvisibility=hidden" } +// { dg-final { scan-not-hidden "_ZN13template_testI4testE8functionEv" } } + +struct test { }; + +template<typename T> +struct template_test +{ + __attribute__((visibility("default"))) + void function(); +}; + +template<typename T> +void template_test<T>::function() { } + +template +struct __attribute__((visibility("default"))) +template_test<test>; diff --git a/gcc/testsuite/g++.dg/lto/pr52400_0.C b/gcc/testsuite/g++.dg/lto/pr52400_0.C new file mode 100644 index 00000000000..b1a7e6634c7 --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr52400_0.C @@ -0,0 +1,18 @@ +// { dg-lto-do run } + +extern "C" { + static int f4(int); + +int f5(int a) { + extern int f4(int); + return f4(a); +} +} + +int f4(int a) { return 4+a; } + +int main(int argc, char *argv[]) +{ + int a = f4(1); + return !(a == 5); +} diff --git a/gcc/testsuite/g++.dg/opt/devirt2.C b/gcc/testsuite/g++.dg/opt/devirt2.C index 092fd686a67..cf4842bd4df 100644 --- a/gcc/testsuite/g++.dg/opt/devirt2.C +++ b/gcc/testsuite/g++.dg/opt/devirt2.C @@ -5,7 +5,9 @@ // { dg-additional-options "-mshort-calls" {target epiphany-*-*} } // Using -mno-abicalls avoids a R_MIPS_JALR .reloc. // { dg-additional-options "-mno-abicalls" { target mips*-*-* } } -// { dg-final { scan-assembler-times "xyzzy" 2 { target { ! { alpha*-*-* hppa*-*-* ia64*-*-hpux* sparc*-*-* } } } } } +// { dg-final { scan-assembler-times "xyzzy" 2 { target { ! { alpha*-*-* hppa*-*-* ia64*-*-hpux* sparc*-*-* *-*-mingw* } } } } } +// For *-*-mingw* there is additionally one .def match +// { dg-final { scan-assembler-times "xyzzy" 3 { target *-*-mingw* } } } // The IA64 and HPPA compilers generate external declarations in addition // to the call so those scans need to be more specific. // { dg-final { scan-assembler-times "br\[^\n\]*xyzzy" 2 { target ia64*-*-hpux* } } } diff --git a/gcc/testsuite/g++.dg/opt/pr48549.C b/gcc/testsuite/g++.dg/opt/pr48549.C index 30799ee93f2..93a38e409b4 100644 --- a/gcc/testsuite/g++.dg/opt/pr48549.C +++ b/gcc/testsuite/g++.dg/opt/pr48549.C @@ -2,10 +2,13 @@ // { dg-do compile } // { dg-options "-fcompare-debug -O2" } +__extension__ typedef __PTRDIFF_TYPE__ pdiff_t; + void foo (void *from, void *to) { - long offset = reinterpret_cast <long>(to) - reinterpret_cast <long>(from); + pdiff_t offset = reinterpret_cast <pdiff_t>(to) + - reinterpret_cast <pdiff_t>(from); if (offset != static_cast <int>(offset)) *(int *) 0xC0DE = 0; reinterpret_cast <int *>(from)[1] = offset; diff --git a/gcc/testsuite/g++.dg/opt/pr52429.C b/gcc/testsuite/g++.dg/opt/pr52429.C new file mode 100644 index 00000000000..0ab8b4015ae --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr52429.C @@ -0,0 +1,23 @@ +// PR tree-optimization/52429 +// { dg-do compile } +// { dg-require-effective-target pthread } +// { dg-options "-O -g -ftree-parallelize-loops=4" } + +struct B +{ + B () : b (__null) {} + int *b; +}; + +void * +operator new (__SIZE_TYPE__, void *p) +{ + return p; +} + +void +foo (B *x, unsigned y) +{ + while (y--) + new (x) B; +} diff --git a/gcc/testsuite/g++.dg/torture/pr49720.C b/gcc/testsuite/g++.dg/torture/pr49720.C index c5da7ba670f..d2c69087d28 100644 --- a/gcc/testsuite/g++.dg/torture/pr49720.C +++ b/gcc/testsuite/g++.dg/torture/pr49720.C @@ -1,8 +1,10 @@ /* { dg-do compile } */ +__extension__ typedef __PTRDIFF_TYPE__ pdiff_t; + extern char t_start[], t_end[], t_size[]; bool foo (void) { - long size = reinterpret_cast<long>(t_size); + pdiff_t size = reinterpret_cast<pdiff_t>(t_size); return (size == t_end - t_start); } diff --git a/gcc/testsuite/gcc.c-torture/compile/pr52375.c b/gcc/testsuite/gcc.c-torture/compile/pr52375.c new file mode 100644 index 00000000000..e6877bb11fa --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr52375.c @@ -0,0 +1,12 @@ +/* PR target/52375 */ + +struct C { int c, d; }; + +unsigned +foo (struct C *p) +{ + unsigned int b = 0, i; + for (i = 0; i < 64; i++) + b |= 0x80000000U >> p[i].c; + return b; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr52437.c b/gcc/testsuite/gcc.c-torture/compile/pr52437.c new file mode 100644 index 00000000000..1f6b1b3026b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr52437.c @@ -0,0 +1,18 @@ +/* PR target/52437 */ + +int f, g, i, j; + +void +fn1 () +{ + for (;;) + { + fn2 (); + j = 1; + for (i = 0; i <= 3; i++) + { + for (g = 1; g >= 0; g--) + f = 0, j &= 11; + } + } +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930930-1.c b/gcc/testsuite/gcc.c-torture/execute/930930-1.c index 68fdbbfe851..101a5f9ef26 100644 --- a/gcc/testsuite/gcc.c-torture/execute/930930-1.c +++ b/gcc/testsuite/gcc.c-torture/execute/930930-1.c @@ -1,23 +1,24 @@ -long *wm_TR; -long *wm_HB; -long *wm_SPB; +__extension__ typedef __PTRDIFF_TYPE__ ptr_t; +ptr_t *wm_TR; +ptr_t *wm_HB; +ptr_t *wm_SPB; -long mem[100]; +ptr_t mem[100]; f (mr_TR, mr_SPB, mr_HB, reg1, reg2) - long *mr_TR; - long *mr_SPB; - long *mr_HB; - long *reg1; - long *reg2; + ptr_t *mr_TR; + ptr_t *mr_SPB; + ptr_t *mr_HB; + ptr_t *reg1; + ptr_t *reg2; { - long *x = mr_TR; + ptr_t *x = mr_TR; for (;;) { if (reg1 < reg2) goto out; - if ((long *) *reg1 < mr_HB && (long *) *reg1 >= mr_SPB) + if ((ptr_t *) *reg1 < mr_HB && (ptr_t *) *reg1 >= mr_SPB) *--mr_TR = *reg1; reg1--; } @@ -29,7 +30,7 @@ f (mr_TR, mr_SPB, mr_HB, reg1, reg2) main () { - mem[99] = (long) mem; + mem[99] = (ptr_t) mem; f (mem + 100, mem + 6, mem + 8, mem + 99, mem + 99); exit (0); } diff --git a/gcc/testsuite/gcc.c-torture/execute/pr52286.c b/gcc/testsuite/gcc.c-torture/execute/pr52286.c new file mode 100644 index 00000000000..bb56295ab52 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr52286.c @@ -0,0 +1,20 @@ +/* PR tree-optimization/52286 */ + +extern void abort (void); + +int +main () +{ +#if __SIZEOF_INT__ > 2 + int a, b; + asm ("" : "=r" (a) : "0" (0)); + b = (~a | 1) & -2038094497; +#else + long a, b; + asm ("" : "=r" (a) : "0" (0)); + b = (~a | 1) & -2038094497L; +#endif + if (b >= 0) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/Wpadded.c b/gcc/testsuite/gcc.dg/Wpadded.c index 9e69a9fef50..70fcd79a6d4 100644 --- a/gcc/testsuite/gcc.dg/Wpadded.c +++ b/gcc/testsuite/gcc.dg/Wpadded.c @@ -6,6 +6,7 @@ We won't get a warning anyway if the target has "packed" structure layout. */ /* { dg-options "-Wpadded -fpack-struct=8" } */ +/* { dg-additional-options "-mno-ms-bitfields" { target *-*-mingw* } } */ struct foo { char bar; diff --git a/gcc/testsuite/gcc.dg/bf-ms-attrib.c b/gcc/testsuite/gcc.dg/bf-ms-attrib.c index da4eb08d2da..d62da2ad525 100644 --- a/gcc/testsuite/gcc.dg/bf-ms-attrib.c +++ b/gcc/testsuite/gcc.dg/bf-ms-attrib.c @@ -32,7 +32,7 @@ main() /* As long as the sizes are as expected, we know attributes are working. bf-ms-layout.c makes sure the right thing happens when the attribute is on. */ - if (sizeof(struct one_ms) != 12) + if (sizeof(struct one_ms) != 8) abort(); if (sizeof(struct one_gcc) != 8) abort(); diff --git a/gcc/testsuite/gcc.dg/bf-ms-layout-2.c b/gcc/testsuite/gcc.dg/bf-ms-layout-2.c index 0bd472bc1f8..408ddbeb89e 100644 --- a/gcc/testsuite/gcc.dg/bf-ms-layout-2.c +++ b/gcc/testsuite/gcc.dg/bf-ms-layout-2.c @@ -158,27 +158,27 @@ int main(){ struct ten test_ten; #if defined (_TEST_MS_LAYOUT) || defined (_MSC_VER) - size_t exp_sizeof_one = 12; - size_t exp_sizeof_two = 16; + size_t exp_sizeof_one = 8; + size_t exp_sizeof_two = 12; size_t exp_sizeof_three =6; size_t exp_sizeof_four = 8; size_t exp_sizeof_five = 3; size_t exp_sizeof_six = 8; size_t exp_sizeof_seven = 3; - size_t exp_sizeof_eight = 4; + size_t exp_sizeof_eight = 2; size_t exp_sizeof_nine = 8; - size_t exp_sizeof_ten = 16; + size_t exp_sizeof_ten = 8; - unsigned char exp_one_c = 8; - unsigned char exp_two_c = 12; + unsigned char exp_one_c = 7; + unsigned char exp_two_c = 9; unsigned char exp_three_c = 4; unsigned char exp_four_c = 4; char exp_five_c = 2; char exp_six_c = 5; char exp_seven_c = 2; - char exp_eight_c = 2; + char exp_eight_c = 1; char exp_nine_c = 0; - char exp_ten_c = 8; + char exp_ten_c = 1; #else /* testing -mno-ms-bitfields */ diff --git a/gcc/testsuite/gcc.dg/bf-ms-layout-3.c b/gcc/testsuite/gcc.dg/bf-ms-layout-3.c new file mode 100644 index 00000000000..a4e9ab3ff6f --- /dev/null +++ b/gcc/testsuite/gcc.dg/bf-ms-layout-3.c @@ -0,0 +1,52 @@ +/* Test for MS bitfield layout */ +/* { dg-do run { target *-*-interix* *-*-mingw* *-*-cygwin* i?86-*-* x86_64-*-* } } */ + +extern void abort(); + +struct s1_t { + char a; + char b __attribute__ ((aligned (16))); +} __attribute__ ((ms_struct)); +struct s1_t s1; + +struct s2_t { + char a; + char b; +} __attribute__ ((ms_struct)); +struct s2_t s2; + +struct s3_t { + __extension__ char a : 6; + char b __attribute__ ((aligned (16))); +} __attribute__ ((ms_struct)); +struct s3_t s3; + +struct s4_t { + __extension__ char a : 6; + char b __attribute__ ((aligned (2))); +} __attribute__ ((ms_struct)); +struct s4_t s4; + +struct s5_t { + __extension__ char a : 6; + char b __attribute__ ((aligned (1))); +} __attribute__ ((ms_struct)); +struct s5_t s5; + +__extension__ +static __PTRDIFF_TYPE__ offs (const void *a, const void *b) +{ + return (__PTRDIFF_TYPE__) ((const char*)a - (const char*)b); +} + +int main() +{ + if (offs (&s1.b, &s1) != 16 + || offs (&s2.b, &s2) != 1 + || offs (&s3.b, &s3) != 16 + || offs (&s4.b, &s4) != 2 + || offs (&s5.b, &s5) != 1) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.dg/di-sync-multithread.c b/gcc/testsuite/gcc.dg/di-sync-multithread.c index 307ebf8b314..c786ff1df5f 100644 --- a/gcc/testsuite/gcc.dg/di-sync-multithread.c +++ b/gcc/testsuite/gcc.dg/di-sync-multithread.c @@ -10,6 +10,9 @@ #include <pthread.h> #include <unistd.h> +#ifdef _WIN32 +#include <windows.h> +#endif /*#define DEBUGIT 1 */ @@ -175,7 +178,11 @@ main () t, err); }; +#ifdef _WIN32 + Sleep (5000); +#else sleep (5); +#endif /* Stop please. */ __sync_lock_test_and_set (&doquit, 1ll); diff --git a/gcc/testsuite/gcc.dg/format/dfp-printf-1.c b/gcc/testsuite/gcc.dg/format/dfp-printf-1.c index e92f1610c34..4453ad192b5 100644 --- a/gcc/testsuite/gcc.dg/format/dfp-printf-1.c +++ b/gcc/testsuite/gcc.dg/format/dfp-printf-1.c @@ -3,7 +3,7 @@ /* { dg-do compile } */ /* { dg-require-effective-target dfp } */ /* { dg-options "-Wformat" } */ -/* { dg-skip-if "No scanf/printf dfp support" { *-*-mingw* } } */ +/* { dg-skip-if "No scanf/printf dfp support" { *-*-mingw* } { "*" } { "" } } */ extern int printf (const char *restrict, ...); diff --git a/gcc/testsuite/gcc.dg/graphite/pr50561.c b/gcc/testsuite/gcc.dg/graphite/pr50561.c index 70c6bbcc2a3..5fbad4a7329 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr50561.c +++ b/gcc/testsuite/gcc.dg/graphite/pr50561.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -floop-flatten -floop-strip-mine" } */ +/* { dg-options "-O2 -floop-strip-mine" } */ void f (unsigned *s) { diff --git a/gcc/testsuite/gcc.dg/lto/pr52097_0.c b/gcc/testsuite/gcc.dg/lto/pr52097_0.c new file mode 100644 index 00000000000..cd4af5d1f29 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr52097_0.c @@ -0,0 +1,20 @@ +/* { dg-lto-do link } */ +/* { dg-lto-options { { -O -flto -fexceptions -fnon-call-exceptions --param allow-store-data-races=0 } } } */ + +typedef struct { unsigned int e0 : 16; } s1; +typedef struct { unsigned int e0 : 16; } s2; +typedef struct { s1 i1; s2 i2; } io; + +static io *i; + +void f1 (void) +{ + s1 x0; + i->i1 = x0; +} + +int main () +{ + f1 (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-1_0.c b/gcc/testsuite/gcc.dg/lto/trans-mem-1_0.c deleted file mode 100644 index 379f4ea84da..00000000000 --- a/gcc/testsuite/gcc.dg/lto/trans-mem-1_0.c +++ /dev/null @@ -1,14 +0,0 @@ -/* { dg-lto-options {{-flto -fgnu-tm}} } */ -/* { dg-lto-do link } */ -/* { dg-require-effective-target stdint_types } */ -/* { dg-require-effective-target fgnu_tm } */ - -int i; - -main() -{ - __transaction_atomic - { - i = 0; - } -} diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-1_1.c b/gcc/testsuite/gcc.dg/lto/trans-mem-1_1.c deleted file mode 100644 index f49a2626e58..00000000000 --- a/gcc/testsuite/gcc.dg/lto/trans-mem-1_1.c +++ /dev/null @@ -1 +0,0 @@ -#include "trans-mem.h" diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-2_0.c b/gcc/testsuite/gcc.dg/lto/trans-mem-2_0.c deleted file mode 100644 index f86d4442685..00000000000 --- a/gcc/testsuite/gcc.dg/lto/trans-mem-2_0.c +++ /dev/null @@ -1,16 +0,0 @@ -/* { dg-lto-options {{-flto -fgnu-tm}} } */ -/* { dg-lto-do link } */ -/* { dg-require-effective-target stdint_types } */ -/* { dg-require-effective-target fgnu_tm } */ - -#include "trans-mem.h" - -extern void foobar() __attribute__((transaction_callable)); - -main() -{ - __transaction_relaxed - { - foobar(); - } -} diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-2_1.c b/gcc/testsuite/gcc.dg/lto/trans-mem-2_1.c deleted file mode 100644 index fb6918d6584..00000000000 --- a/gcc/testsuite/gcc.dg/lto/trans-mem-2_1.c +++ /dev/null @@ -1,4 +0,0 @@ -__attribute__((transaction_callable,noinline)) -void foobar() -{ -} diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-4_0.c b/gcc/testsuite/gcc.dg/lto/trans-mem-4_0.c deleted file mode 100644 index e3f471f23c3..00000000000 --- a/gcc/testsuite/gcc.dg/lto/trans-mem-4_0.c +++ /dev/null @@ -1,13 +0,0 @@ -/* { dg-lto-options {{-flto -fgnu-tm}} } */ -/* { dg-lto-do link } */ -/* { dg-require-effective-target stdint_types } */ -/* { dg-require-effective-target fgnu_tm } */ - -extern void foo() __attribute__((transaction_safe)); - -int main() -{ - __transaction_atomic { - foo(); - } -} diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-4_1.c b/gcc/testsuite/gcc.dg/lto/trans-mem-4_1.c deleted file mode 100644 index 620ce16b8c8..00000000000 --- a/gcc/testsuite/gcc.dg/lto/trans-mem-4_1.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "trans-mem.h" - -__attribute__((transaction_safe)) -void foo() -{ -} diff --git a/gcc/testsuite/gcc.dg/noncompile/pr52290.c b/gcc/testsuite/gcc.dg/noncompile/pr52290.c new file mode 100644 index 00000000000..275543cfca9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/noncompile/pr52290.c @@ -0,0 +1,3 @@ +/* { dg-error "undeclared here" "" { target *-*-* } 3 } */ +/* { dg-error "expected" "" { target *-*-* } 3 } */ +int f()[j] diff --git a/gcc/testsuite/gcc.dg/pack-test-5.c b/gcc/testsuite/gcc.dg/pack-test-5.c index 7645043dd84..3a52a002bd5 100644 --- a/gcc/testsuite/gcc.dg/pack-test-5.c +++ b/gcc/testsuite/gcc.dg/pack-test-5.c @@ -1,6 +1,7 @@ /* PR c/11446: packed on a struct takes precedence over aligned on the type of a field. */ /* { dg-do run } */ +/* { dg-additional-options "-mno-ms-bitfields" { target *-*-mingw* } } */ extern void abort (void); diff --git a/gcc/testsuite/gcc.dg/pr49544.c b/gcc/testsuite/gcc.dg/pr49544.c index 9e558da2765..52f79dd7f8e 100644 --- a/gcc/testsuite/gcc.dg/pr49544.c +++ b/gcc/testsuite/gcc.dg/pr49544.c @@ -3,6 +3,8 @@ /* { dg-options "-g -O2" } */ /* { dg-require-effective-target ptr32plus } */ +__extension__ typedef __PTRDIFF_TYPE__ ptr_t; + int baz (int, int, void *); static inline __attribute__ ((always_inline)) long @@ -16,5 +18,5 @@ foo (int x, int y, void *z) long bar (long x, long y, long z) { - return foo (x, y, (void *) z); + return foo (x, y, (void *) (ptr_t) z); } diff --git a/gcc/testsuite/gcc.dg/pr50251.c b/gcc/testsuite/gcc.dg/pr50251.c index 21ca185250b..f791aa88278 100644 --- a/gcc/testsuite/gcc.dg/pr50251.c +++ b/gcc/testsuite/gcc.dg/pr50251.c @@ -1,4 +1,4 @@ -/* { dg-do compile } */ +/* { dg-do compile { target { ! { x86_64-*-mingw* } } } } */ /* { dg-options "-O2" } */ /* { dg-additional-options "-mpreferred-stack-boundary=12" { target x86_64-*-* } } */ diff --git a/gcc/testsuite/gcc.dg/pr51721.c b/gcc/testsuite/gcc.dg/pr51721.c new file mode 100644 index 00000000000..b39adfb50c2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr51721.c @@ -0,0 +1,31 @@ +/* PR tree-optimization/51721 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -Warray-bounds" } */ + +static int a[10], b[10], c[10], d[10]; + +unsigned int +f (unsigned int v) +{ + return v == 17 ? 11 : v; +} + +unsigned int +g (unsigned int v) +{ + return v == 17 ? 17 : v; +} + +void +t (unsigned int s) +{ + if (s >> 1 == 0) + { + a[f (s)] = 0; /* { dg-bogus "array subscript is above array bounds" } */ + a[f (s)] = 0; /* { dg-bogus "array subscript is above array bounds" } */ + b[f (s)] = 0; /* { dg-bogus "array subscript is above array bounds" } */ + c[g (s)] = 0; /* { dg-bogus "array subscript is above array bounds" } */ + c[g (s)] = 0; /* { dg-bogus "array subscript is above array bounds" } */ + d[f (s)] = 0; /* { dg-bogus "array subscript is above array bounds" } */ + } +} diff --git a/gcc/testsuite/gcc.dg/pr52132.c b/gcc/testsuite/gcc.dg/pr52132.c index 8374994424a..ed1eb1becd2 100644 --- a/gcc/testsuite/gcc.dg/pr52132.c +++ b/gcc/testsuite/gcc.dg/pr52132.c @@ -2,6 +2,11 @@ /* { dg-do compile } */ /* { dg-options "-std=c99 -O2 -g" } */ +#if (__SIZEOF_INT__ < __SIZEOF_FLOAT__) \ + && (__SIZEOF_LONG__ == __SIZEOF_FLOAT__) +#define int long +#endif + int l; void bar (void); @@ -10,7 +15,11 @@ foo (int *x, float y) { float b; union { float f; int i; } u = { .f = y }; +#if (__SIZEOF_INT__ < __SIZEOF_FLOAT__) + u.i += 127L << 23; +#else u.i += 127 << 23; +#endif u.f = ((-1.0f / 3) * u.f + 2) * u.f - 2.0f / 3; b = 0.5 * (u.f + l); if (b >= *x) diff --git a/gcc/testsuite/gcc.dg/pr52318.c b/gcc/testsuite/gcc.dg/pr52318.c new file mode 100644 index 00000000000..4f367aa1cd4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr52318.c @@ -0,0 +1,17 @@ +/* PR tree-optimization/52318 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -ftracer -fno-tree-ccp -fno-tree-copy-prop -fno-tree-dce" } */ + +int c; +char *p; + +void +foo (int i) +{ + char a[2]; + char b[20]; + p = __builtin___stpcpy_chk (a, "", 2); + p = __builtin___stpcpy_chk (&b[16], i ? "e" : "jkl", 4); + if (c) + foo (i); +} diff --git a/gcc/testsuite/gcc.dg/pr52355.c b/gcc/testsuite/gcc.dg/pr52355.c new file mode 100644 index 00000000000..0a0271f5dff --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr52355.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ + +void f(char a[16][16][16]) +{ + __asm volatile ("" : : "i" (&a[1][0][0] - &a[0][0][0])); +} + +int main(void) +{ + char a[16][16][16]; + f(a); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr52445.c b/gcc/testsuite/gcc.dg/pr52445.c new file mode 100644 index 00000000000..0977821a829 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr52445.c @@ -0,0 +1,15 @@ +/* PR tree-optimization/52445 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-cselim -fdump-tree-cselim" } */ + +void +foo (char *buf, unsigned long len) +{ + buf[0] = '\n'; + if (len > 1) + buf[1] = '\0'; /* We can't cselim "optimize" this, while + buf[0] doesn't trap, buf[1] could. */ +} + +/* { dg-final { scan-tree-dump-not "cstore\." "cselim" } } */ +/* { dg-final { cleanup-tree-dump "cselim" } } */ diff --git a/gcc/testsuite/gcc.dg/simulate-thread/atomic-load-int128.c b/gcc/testsuite/gcc.dg/simulate-thread/atomic-load-int128.c index c5aa623e685..651e76a95a5 100644 --- a/gcc/testsuite/gcc.dg/simulate-thread/atomic-load-int128.c +++ b/gcc/testsuite/gcc.dg/simulate-thread/atomic-load-int128.c @@ -105,9 +105,6 @@ void simulate_thread_main() { int x; - /* Make sure value starts with an atomic value now. */ - __atomic_store_n (&value, ret, __ATOMIC_SEQ_CST); - /* Execute loads with value changing at various cyclic values. */ for (table_cycle_size = 16; table_cycle_size > 4 ; table_cycle_size--) { @@ -126,6 +123,10 @@ void simulate_thread_main() main() { fill_table (); + + /* Make sure value starts with an atomic value from the table. */ + __atomic_store_n (&value, table[0], __ATOMIC_SEQ_CST); + simulate_thread_main (); simulate_thread_done (); return 0; diff --git a/gcc/testsuite/gcc.dg/simulate-thread/simulate-thread.gdb b/gcc/testsuite/gcc.dg/simulate-thread/simulate-thread.gdb index cbb65dbceeb..93f60c345cf 100644 --- a/gcc/testsuite/gcc.dg/simulate-thread/simulate-thread.gdb +++ b/gcc/testsuite/gcc.dg/simulate-thread/simulate-thread.gdb @@ -5,7 +5,7 @@ run set $ret = 0 while (simulate_thread_fini != 1) && (! $ret) - call simulate_thread_wrapper_other_threads() + set $ret |= simulate_thread_wrapper_other_threads() stepi set $ret |= simulate_thread_step_verify() end diff --git a/gcc/testsuite/gcc.dg/simulate-thread/simulate-thread.h b/gcc/testsuite/gcc.dg/simulate-thread/simulate-thread.h index 9e2361faa06..22c05084ee7 100644 --- a/gcc/testsuite/gcc.dg/simulate-thread/simulate-thread.h +++ b/gcc/testsuite/gcc.dg/simulate-thread/simulate-thread.h @@ -37,7 +37,7 @@ simulate_thread_done () infinite loop to be avoided. If the testcase defines HOSTILE_PAUSE_ERROR, then it will be - considered an RUNTIME FAILURE if the hostile pause is triggered. + considered a RUNTIME FAILURE if the hostile pause is triggered. This will allow to test for guaranteed forward progress routines. If the default values for HOSTILE_THREAD_THRESHOLD or @@ -50,17 +50,29 @@ simulate_thread_done () hostile condition is interferring. */ -/* Define the threshold to start pausing the hostile thread. */ +/* Define the threshold instruction count to start pausing the hostile + thread. To avoid huge potential log files when things are not going well, + set this number very low. If a test specifically requires that the forward + progress guarantee is made, this number should be raised by the testcase. */ #if !defined (HOSTILE_THREAD_THRESHOLD) -#define HOSTILE_THREAD_THRESHOLD 500 +#define HOSTILE_THREAD_THRESHOLD 50 #endif /* Define the length of pause in cycles for the hostile thread to pause to - allow forward progress to be made. */ + allow forward progress to be made. If this number is too low, a + compare_and_swap loop may not have time to finish, especially on a + 128 bit operation. */ #if !defined (HOSTILE_THREAD_PAUSE) #define HOSTILE_THREAD_PAUSE 20 #endif +/* Define the number of instructions which are allowed to be executed before + the testcase is deemed to fail. This is primarily to avoid huge log files + when a testcase goes into an infinte loop. */ +#if !defined (INSN_COUNT_THRESHOLD) +#define INSN_COUNT_THRESHOLD 10000 +#endif + void simulate_thread_other_threads (void); int simulate_thread_final_verify (void); @@ -71,26 +83,34 @@ static int simulate_thread_hostile_pause = 0; is reached, the other_thread process is paused for HOSTILE_THREAD_PAUSE cycles before resuming, and the counters start again. */ -void +int simulate_thread_wrapper_other_threads() { - static int count = 0; - static int pause = 0; + static int insn_count = 0; + static int hostile_count = 0; + static int hostile_pause = 0; + + if (++insn_count >= INSN_COUNT_THRESHOLD) + { + printf ("FAIL: Testcase exceeded maximum instruction count threshold\n"); + return 1; + } - if (++count >= HOSTILE_THREAD_THRESHOLD) + if (++hostile_count >= HOSTILE_THREAD_THRESHOLD) { if (!simulate_thread_hostile_pause) simulate_thread_hostile_pause = 1; /* Count cycles before calling the hostile thread again. */ - if (pause++ < HOSTILE_THREAD_PAUSE) - return; + if (hostile_pause++ < HOSTILE_THREAD_PAUSE) + return 0; /* Reset the pause counter, as well as the thread counter. */ - pause = 0; - count = 0; + hostile_pause = 0; + hostile_count = 0; } simulate_thread_other_threads (); + return 0; } diff --git a/gcc/testsuite/gcc.dg/simulate-thread/speculative-store.c b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store.c index 71d1cca9dda..ff9d71e0875 100644 --- a/gcc/testsuite/gcc.dg/simulate-thread/speculative-store.c +++ b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store.c @@ -24,6 +24,7 @@ int simulate_thread_step_verify() printf("FAIL: global variable was assigned to. \n"); return 1; } + return 0; } int simulate_thread_final_verify() diff --git a/gcc/testsuite/gcc.dg/stack-usage-1.c b/gcc/testsuite/gcc.dg/stack-usage-1.c index 77dd03852fb..c852f78f5cd 100644 --- a/gcc/testsuite/gcc.dg/stack-usage-1.c +++ b/gcc/testsuite/gcc.dg/stack-usage-1.c @@ -10,7 +10,11 @@ #if defined(__i386__) # define SIZE 248 #elif defined(__x86_64__) -# define SIZE 356 +# ifndef _WIN64 +# define SIZE 356 +# else +# define SIZE (256 - 24) +# endif #elif defined (__sparc__) # if defined (__arch64__) # define SIZE 76 diff --git a/gcc/testsuite/gcc.dg/tls/opt-11.c b/gcc/testsuite/gcc.dg/tls/opt-11.c index 0069c484a2c..edfe16b7e12 100644 --- a/gcc/testsuite/gcc.dg/tls/opt-11.c +++ b/gcc/testsuite/gcc.dg/tls/opt-11.c @@ -2,8 +2,10 @@ /* { dg-require-effective-target tls_runtime } */ /* { dg-add-options tls } */ +__extension__ typedef __SIZE_TYPE__ size_t; + extern void abort (void); -extern void *memset (void *, int, __SIZE_TYPE__); +extern void *memset (void *, int, size_t); struct A { diff --git a/gcc/testsuite/gcc.dg/tls/thr-cse-1.c b/gcc/testsuite/gcc.dg/tls/thr-cse-1.c index 87fdc64688d..8e64424b72a 100644 --- a/gcc/testsuite/gcc.dg/tls/thr-cse-1.c +++ b/gcc/testsuite/gcc.dg/tls/thr-cse-1.c @@ -18,10 +18,11 @@ int foo (int b, int c, int d) return a; } -/* { dg-final { scan-assembler-not "emutls_get_address.*emutls_get_address.*" { target { ! { "*-wrs-vxworks" "*-*-darwin8" "hppa*-*-hpux*" "spu-*-*" "i?86-*-mingw*" } } } } } */ +/* { dg-final { scan-assembler-not "emutls_get_address.*emutls_get_address.*" { target { ! { "*-wrs-vxworks" "*-*-darwin8" "hppa*-*-hpux*" "spu-*-*" "i?86-*-mingw*" "x86_64-*-mingw*" } } } } } */ /* { dg-final { scan-assembler-not "call\tL___emutls_get_address.stub.*call\tL___emutls_get_address.stub.*" { target "*-*-darwin8" } } } */ /* { dg-final { scan-assembler-not "(b,l|bl) __emutls_get_address.*(b,l|bl) __emutls_get_address.*" { target "hppa*-*-hpux*" } } } */ /* { dg-final { scan-assembler-not "(brsl|brasl)\t__emutls_get_address.*(brsl|brasl)\t__emutls_get_address.*" { target spu-*-* } } } */ /* { dg-final { scan-assembler-not "tls_lookup.*tls_lookup.*" { target *-wrs-vxworks } } } */ /* { dg-final { scan-assembler-not "call\t___emutls_get_address.*call\t___emutls_get_address" { target "i?86-*-mingw*" } } } */ +/* { dg-final { scan-assembler-not "call\t__emutls_get_address.*call\t__emutls_get_address" { target "x86_64-*-mingw*" } } } */ diff --git a/gcc/testsuite/gcc.dg/tm/pr52141.c b/gcc/testsuite/gcc.dg/tm/pr52141.c new file mode 100644 index 00000000000..0dabf76ce6d --- /dev/null +++ b/gcc/testsuite/gcc.dg/tm/pr52141.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-fgnu-tm -O0 -w" } */ + +__attribute__((always_inline)) +static void asmfunc(void) +{ + __asm__ (""); /* { dg-error "asm not allowed in .transaction_safe" } */ +} + +__attribute__((transaction_safe)) +static void f(void) +{ + asmfunc(); +} + +int main() +{ + __transaction_atomic { + f(); + } + return 0; +} + +/* { dg-message "inlined from \'f\'" "" { target *-*-* } 0 } */ diff --git a/gcc/testsuite/gcc.dg/tm/pub-safety-1.c b/gcc/testsuite/gcc.dg/tm/pub-safety-1.c new file mode 100644 index 00000000000..660e9a62767 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tm/pub-safety-1.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-fgnu-tm -O1 -fdump-tree-lim1" } */ + +/* Test that thread visible loads do not get hoisted out of loops if + the load would not have occurred on each path out of the loop. */ + +int x[10] = {0,0,0,0,0,0,0,0,0,0}; +int DATA_DATA = 0; + +void reader() +{ + int i; + __transaction_atomic + { + for (i = 0; i < 10; i++) + if (x[i]) + x[i] += DATA_DATA; + /* If we loaded DATA_DATA here, we could hoist it before the loop, + but since we don't... we can't. */ + } +} + +/* { dg-final { scan-tree-dump-times "Cannot hoist.*DATA_DATA because it is in a transaction" 1 "lim1" } } */ +/* { dg-final { cleanup-tree-dump "lim1" } } */ diff --git a/gcc/testsuite/gcc.dg/torture/builtin-complex-1.c b/gcc/testsuite/gcc.dg/torture/builtin-complex-1.c index 0c2f98b832a..20dc4c48a28 100644 --- a/gcc/testsuite/gcc.dg/torture/builtin-complex-1.c +++ b/gcc/testsuite/gcc.dg/torture/builtin-complex-1.c @@ -18,11 +18,13 @@ extern void abort (void); abort (); \ } while (0) +#ifndef __SPU__ void comparef (float a, float b) { COMPARE_BODY (a, b, float, __builtin_copysignf); } +#endif void compare (double a, double b) @@ -36,12 +38,14 @@ comparel (long double a, long double b) COMPARE_BODY (a, b, long double, __builtin_copysignl); } +#ifndef __SPU__ void comparecf (_Complex float a, float r, float i) { comparef (__real__ a, r); comparef (__imag__ a, i); } +#endif void comparec (_Complex double a, double r, double i) @@ -90,8 +94,10 @@ comparecl (_Complex long double a, long double r, long double i) void check_float (void) { +#ifndef __SPU__ ALL_CHECKS (0.0f, -0.0f, __builtin_nanf(""), __builtin_inff(), float, comparecf); +#endif } void diff --git a/gcc/testsuite/gcc.dg/torture/pr47917.c b/gcc/testsuite/gcc.dg/torture/pr47917.c index 831305d601a..d3649fb7409 100644 --- a/gcc/testsuite/gcc.dg/torture/pr47917.c +++ b/gcc/testsuite/gcc.dg/torture/pr47917.c @@ -3,6 +3,7 @@ /* { dg-options "-std=c99 -D_ISO_C_SOURCE=19990L" { target alpha*-dec-osf5* } } */ /* { dg-options "-std=c99 -D_XOPEN_SOURCE=500" { target mips-sgi-irix6.5 *-*-solaris2.[89] } } */ /* { dg-options "-std=gnu99" { target *-*-hpux* } } */ +/* { dg-additional-options "-D__USE_MINGW_ANSI_STDIO=1" { target *-*-mingw* } } */ /* { dg-xfail-if "no C99 snprintf function" { *-*-hpux10* } } */ /* { dg-xfail-run-if "non-conforming C99 snprintf" { *-*-hpux11.[012]* } } */ diff --git a/gcc/testsuite/gcc.dg/torture/pr52298.c b/gcc/testsuite/gcc.dg/torture/pr52298.c new file mode 100644 index 00000000000..f0799c1a5c8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr52298.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ + +int a, b, c, h; + +int i[5][5]; + +void +fn1 () +{ + int l = 0; + + for (a = 0; a <= 3; a++) + for (b = 1; b >= 0; b -= 1) + l |= i[0][b]; + c = l; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr52402.c b/gcc/testsuite/gcc.dg/torture/pr52402.c new file mode 100644 index 00000000000..ba7c5ae24c5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr52402.c @@ -0,0 +1,30 @@ +/* { dg-do run } */ +/* { dg-options "-w -Wno-psabi" } */ +/* { dg-require-effective-target int32plus } */ + +typedef int v4si __attribute__((vector_size(16))); +struct T { v4si i[2]; int j; } __attribute__((packed)); + +static v4si __attribute__((noinline)) +foo (struct T t) +{ + return t.i[0]; +} + +static struct T *__attribute__((noinline)) +init () +{ + char *p = __builtin_malloc (sizeof (struct T) + 1); + p++; + __builtin_memset (p, 1, sizeof (struct T)); + return (struct T *)p; +} + +int main() +{ + struct T *p; + p = init (); + if (foo (*p)[0] != 0x01010101) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr52406.c b/gcc/testsuite/gcc.dg/torture/pr52406.c new file mode 100644 index 00000000000..5579d0943ae --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr52406.c @@ -0,0 +1,29 @@ +/* { dg-do run } */ + +extern void abort (void); +struct { int f1; } a[2]; + +int *b, *const k = &a[1].f1; +static int **c = &b; + +int e, f, d; + +int +main () +{ + int **l = &b; + *l = k; + for (; d <= 0; d++) + { + int *j = &e; + **c = 1; + *l = k; + *k ^= 0; + f = **l; + *j = f; + } + if (e != 1) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.dg/torture/pr52407.c b/gcc/testsuite/gcc.dg/torture/pr52407.c new file mode 100644 index 00000000000..bb95e51f25b --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr52407.c @@ -0,0 +1,33 @@ +/* { dg-do run } */ + +extern void abort (void); + +typedef long long T; +typedef T vl_t __attribute__((vector_size(2 * sizeof (T)))); + +vl_t ul[4], vl[4] = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; + +static void +mul_vl_l(vl_t *u, vl_t *v, T x, int m) +{ + vl_t w; + T *p = (T *)&w; + p[0] = p[1] = x; + while (m--) + *u++ = *v++ * w; +} + +int +main(int argc, char *argv[]) +{ + int i; + T *pl; + + pl = (T *) &ul; + mul_vl_l(ul, vl, 2, 4); + for (i = 0; i < 8; i++) + if (pl[i] != 2 * (i + 1)) + abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr52419.c b/gcc/testsuite/gcc.dg/torture/pr52419.c new file mode 100644 index 00000000000..d24225a3ea7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr52419.c @@ -0,0 +1,32 @@ +/* PR middle-end/52419 */ +/* { dg-do run } */ + +extern void abort (void); + +typedef long long V + __attribute__ ((vector_size (2 * sizeof (long long)), may_alias)); + +typedef struct S { V b; } P __attribute__((aligned (1))); + +struct __attribute__((packed)) T { char c; P s; }; + +__attribute__((noinline, noclone)) void +foo (P *p) +{ + p->b[1] = 5; +} + +int +main () +{ + V a = { 3, 4 }; + struct T t; + + t.s.b = a; + foo (&t.s); + + if (t.s.b[0] != 3 || t.s.b[1] != 5) + abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr52429.c b/gcc/testsuite/gcc.dg/torture/pr52429.c new file mode 100644 index 00000000000..e2aeaa9714d --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr52429.c @@ -0,0 +1,24 @@ +/* PR tree-optimization/52429 */ +/* { dg-do compile } */ +/* { dg-require-effective-target pthread } */ +/* { dg-options "-g -ftree-parallelize-loops=4" } */ + +double d[65536], e[65536]; + +void +foo (void) +{ + int i; + double f, g; + for (i = 0; i < 65536; i++) + { + f = e[i]; + goto lab1; + lab2: + d[i] = f * g; + continue; + lab1: + g = d[i]; + goto lab2; + } +} diff --git a/gcc/testsuite/gcc.dg/torture/pr52493.c b/gcc/testsuite/gcc.dg/torture/pr52493.c new file mode 100644 index 00000000000..b04ac5c17db --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr52493.c @@ -0,0 +1,38 @@ +/* { dg-do compile } */ + +struct Time { + long int sec; + long usec; +}; +struct Flow { + unsigned short iif; + struct Time mtime; +}; +struct NetFlow { + unsigned MaxFlows; + unsigned HeaderFields; + unsigned short *HeaderFormat; +}; +static struct NetFlow *netflow; +static struct Time start_time; +static unsigned char emit_packet[1500]; +inline long int cmpmtime(struct Time *t1, struct Time *t2) +{ + return (t1->sec - t2->sec) * 1000 + (t1->usec - t2->usec) / 1000; +} +static void fill(int fields, unsigned short *format, + struct Flow *flow, void *p) +{ + int i; + for (i = 0; i < fields; i++) + if (format[i] == 21) + { + unsigned int __v; + __v = cmpmtime(&flow->mtime, &start_time); + *((unsigned int *) p) = __v; + } +} +void emit_thread() +{ + fill(netflow->HeaderFields, netflow->HeaderFormat, 0, &emit_packet); +} diff --git a/gcc/testsuite/gcc.dg/torture/va-arg-25.c b/gcc/testsuite/gcc.dg/torture/va-arg-25.c index 8c0da549d08..64aaffac8b7 100644 --- a/gcc/testsuite/gcc.dg/torture/va-arg-25.c +++ b/gcc/testsuite/gcc.dg/torture/va-arg-25.c @@ -4,7 +4,7 @@ /* { dg-options "-msse" { target { i?86-*-* x86_64-*-* } } } */ /* { dg-require-effective-target sse_runtime { target { i?86-*-* x86_64-*-* } } } */ /* { dg-options "-mabi=altivec -maltivec" { target { powerpc-*-* powerpc64-*-* } } } */ -/* { dg-require-effective-target vmx_hw { target { powerpc-*-* powerpc64--*-* } } } */ +/* { dg-require-effective-target vmx_hw { target { powerpc-*-* powerpc64-*-* } } } */ #include <stdarg.h> #include <stdlib.h> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-6.c b/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-6.c new file mode 100644 index 00000000000..12070fa3362 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-6.c @@ -0,0 +1,10 @@ +/* PR tree-optimization/52019 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -fno-tree-sra -fdump-tree-fnsplit -fdump-tree-optimized" } */ + +#include "ipa-split-5.c" + +/* { dg-final { scan-tree-dump-times "Splitting function" 1 "fnsplit"} } */ +/* { dg-final { cleanup-tree-dump "fnsplit" } } */ +/* { dg-final { scan-tree-dump "part" "optimized"} } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-8.c b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-8.c new file mode 100644 index 00000000000..31dab46a795 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-8.c @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-optimized -fdump-tree-phiopt1" } */ + +int g(int,int); +int f(int t, int c) +{ + int d = 0; + int e = 0; + if (t) + { + d = 1; + e = t; + } + else d = 0, e = 0; + return g(e,d); +} + +/* This testcase should be reduced to e = t; d = t != 0; in phiopt1 + but currently is not as PHI-OPT does not reduce the t PHI as we have + two phis. Note this is fixed with + http://gcc.gnu.org/ml/gcc-patches/2012-01/msg01195.html . */ +/* { dg-final { scan-tree-dump-not "if" "phiopt1" { xfail *-*-* } } } */ +/* { dg-final { scan-tree-dump "g .t_\[0-9\]*.D.," "optimized" } } */ +/* { dg-final { scan-tree-dump-not "PHI" "optimized" } } */ +/* { dg-final { cleanup-tree-dump "phiopt1" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-9.c b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-9.c new file mode 100644 index 00000000000..dccea7b0506 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-9.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-optimized" } */ + +int g(int,int); +int f(int t, int c) +{ + int d = 0; + int e = 0; + if (t) + { + d = c+1; + e = t; + } + else d = 0, e = 0; + return g(e,d); +} + +/* The value e should have been replaced with t and there should be only one PHI. */ +/* { dg-final { scan-tree-dump "g .t_\[0-9\]*.D.," "optimized" } } */ +/* { dg-final { scan-tree-dump-times "PHI" 1 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/scev-3.c b/gcc/testsuite/gcc.dg/tree-ssa/scev-3.c new file mode 100644 index 00000000000..28d5c932727 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/scev-3.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +int *a_p; +int a[1000]; + +f(int k) +{ + int i; + + for (i=k; i<1000; i+=k) { + a_p = &a[i]; + *a_p = 100; + } +} + +/* { dg-final { scan-tree-dump-times "&a" 1 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/scev-4.c b/gcc/testsuite/gcc.dg/tree-ssa/scev-4.c new file mode 100644 index 00000000000..6c1e530a92f --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/scev-4.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +typedef struct { + int x; + int y; +} S; + +int *a_p; +S a[1000]; + +f(int k) +{ + int i; + + for (i=k; i<1000; i+=k) { + a_p = &a[i].y; + *a_p = 100; + } +} + +/* { dg-final { scan-tree-dump-times "&a" 1 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-10.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-10.c new file mode 100644 index 00000000000..bc149265dd7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-10.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-lim1-details" } */ + +int *l, *r; +int test_func(void) +{ + int i; + int direction; + static int pos; + + pos = 0; + direction = 1; + + for ( i = 0; i <= 400; i++ ) + { + if ( direction == 0 ) + pos = l[pos]; + else + pos = r[pos]; + + if ( pos == -1 ) + { + pos = 0; + direction = !direction; + } + } + return i; +} + +/* { dg-final { scan-tree-dump "Executing store motion of pos" "lim1" } } */ +/* { dg-final { cleanup-tree-dump "lim1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp63.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp63.c new file mode 100644 index 00000000000..9116847de53 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp63.c @@ -0,0 +1,345 @@ +/* PR tree-optimization/51721 */ +/* { dg-do link } */ +/* { dg-options "-O2" } */ + +extern void link_error (void); + +#define BITSM1 (sizeof (int) * __CHAR_BIT__ - 1) + +void +f1 (unsigned int s) +{ + if (s >> 1 == 0) + { + if (s == 2 || s == -1U) + link_error (); + } + else + { + if (s == 0 || s == 1) + link_error (); + } +} + +void +f2 (unsigned int s) +{ + if (s >> 4 != 3) + { + if (s == 48 || s == 57 || s == 63) + link_error (); + } + else + { + if (s == 47 || s == 64 || s == 0 || s == -1U) + link_error (); + } +} + +void +f3 (int s) +{ + if (s >> 3 == -2) + { + if (s == -17 || s == -8 || s == 0 + || s == -__INT_MAX__ - 1 || s == __INT_MAX__) + link_error (); + } + else + { + if (s == -16 || s == -12 || s == -9) + link_error (); + } +} + +void +f4 (unsigned int s) +{ + if (s >> 2 < 4) + { + if (s == 16 || s == 20 || s == -1U) + link_error (); + } + else + { + if (s == 0 || s == 2 || s == 14 || s == 15) + link_error (); + } +} + +void +f5 (unsigned int s) +{ + if (s >> 3 <= 7) + { + if (s == 64 || s == 68 || s == -1U) + link_error (); + } + else + { + if (s == 0 || s == 1 || s == 62 || s == 63) + link_error (); + } +} + +void +f6 (unsigned int s) +{ + if (s >> 1 > 2) + { + if (s == 0 || s == 3 || s == 5) + link_error (); + } + else + { + if (s == 6 || s == 8 || s == -1U) + link_error (); + } +} + +void +f7 (unsigned int s) +{ + if (s >> 5 >= 7) + { + if (s == 0 || s == 2 || s == 221 || s == 223) + link_error (); + } + else + { + if (s == 224 || s == 256 || s == 258 || s == -1U) + link_error (); + } +} + +void +f8 (int s) +{ + if (s >> 2 < -3) + { + if (s == -12 || s == -10 || s == 0 || s == __INT_MAX__) + link_error (); + } + else + { + if (s == -13 || s == -16 || s == -__INT_MAX__ - 1) + link_error (); + } +} + +void +f9 (int s) +{ + if (s >> 3 <= -2) + { + if (s == -8 || s == -6 || s == 0 || s == __INT_MAX__) + link_error (); + } + else + { + if (s == -9 || s == -11 || s == -__INT_MAX__ - 1) + link_error (); + } +} + +void +f10 (int s) +{ + if (s >> 1 > -4) + { + if (s == -7 || s == -9 || s == -__INT_MAX__ - 1) + link_error (); + } + else + { + if (s == -6 || s == -4 || s == 0 || s == __INT_MAX__) + link_error (); + } +} + +void +f11 (int s) +{ + if (s >> 3 >= -6) + { + if (s == -49 || s == -51 || s == -__INT_MAX__ - 1) + link_error (); + } + else + { + if (s == -48 || s == -46 || s == 0 || s == __INT_MAX__) + link_error (); + } +} + +void +f12 (int s) +{ + if (s >> 2 < 4) + { + if (s == 16 || s == 20 || s == __INT_MAX__) + link_error (); + } + else + { + if (s == 0 || s == 2 || s == 14 || s == 15 + || s == -2 || s == -__INT_MAX__ - 1) + link_error (); + } +} + +void +f13 (int s) +{ + if (s >> 3 <= 7) + { + if (s == 64 || s == 68 || s == __INT_MAX__) + link_error (); + } + else + { + if (s == 0 || s == 1 || s == 62 || s == 63 + || s == -2 || s == -__INT_MAX__ - 1) + link_error (); + } +} + +void +f14 (int s) +{ + if (s >> 1 > 2) + { + if (s == 0 || s == 3 || s == 5 + || s == -2 || s == -__INT_MAX__ - 1) + link_error (); + } + else + { + if (s == 6 || s == 8 || s == __INT_MAX__) + link_error (); + } +} + +void +f15 (int s) +{ + if (s >> 5 >= 7) + { + if (s == 0 || s == 2 || s == 221 || s == 223 + || s == -2 || s == -__INT_MAX__ - 1) + link_error (); + } + else + { + if (s == 224 || s == 256 || s == 258 || s == __INT_MAX__) + link_error (); + } +} + +unsigned int +f16 (unsigned int s) +{ + unsigned int t = s >> BITSM1; + if (t != 0) + { + if (s == 0 || s == 5 || s == __INT_MAX__) + link_error (); + } + else + { + if (s == 1U + __INT_MAX__ || s == 6U + __INT_MAX__ || s == -1U) + link_error (); + } + return t; +} + +int +f17 (int s) +{ + int t = s >> BITSM1; + if (t == 0) + { + if (s == -1 || s == -5 || s == -__INT_MAX__ - 1) + link_error (); + } + else + { + if (s == 0 || s == 5 || s == __INT_MAX__) + link_error (); + } + return t; +} + +unsigned int +f18 (unsigned int s) +{ + unsigned int t = s >> BITSM1; + if (t >= 1) + { + if (s == 0 || s == 5 || s == __INT_MAX__) + link_error (); + } + else + { + if (s == 1U + __INT_MAX__ || s == 6U + __INT_MAX__ || s == -1U) + link_error (); + } + return t; +} + +int +f19 (int s) +{ + int t = s >> BITSM1; + if (t >= 0) + { + if (s == -1 || s == -5 || s == -__INT_MAX__ - 1) + link_error (); + } + else + { + if (s == 0 || s == 5 || s == __INT_MAX__) + link_error (); + } + return t; +} + +unsigned int +f20 (unsigned int s) +{ + unsigned int t = s >> BITSM1; + if (t < 1) + { + if (s == 1U + __INT_MAX__ || s == 6U + __INT_MAX__ || s == -1U) + link_error (); + } + else + { + if (s == 0 || s == 5 || s == __INT_MAX__) + link_error (); + } + return t; +} + +int +f21 (int s) +{ + int t = s >> BITSM1; + if (t < 0) + { + if (s == 0 || s == 5 || s == __INT_MAX__) + link_error (); + } + else + { + if (s == -1 || s == -5 || s == -__INT_MAX__ - 1) + link_error (); + } + return t; +} + +int +main () +{ + return 0; +} diff --git a/gcc/testsuite/gcc.dg/vect/pr46126.c b/gcc/testsuite/gcc.dg/vect/pr46126.c index 6eb178aab2e..c46d7f40d33 100644 --- a/gcc/testsuite/gcc.dg/vect/pr46126.c +++ b/gcc/testsuite/gcc.dg/vect/pr46126.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ +__extension__ typedef __UINTPTR_TYPE__ uintptr_t; + typedef struct TypHeader { struct TypHeader * * ptr; unsigned char type; @@ -11,13 +13,13 @@ typedef struct TypHeader { TypHandle * ptApp; long lp; long lc; - hdApp = ((long)(((TypHandle*)((hdCall)->ptr))[1])&1 ? + hdApp = ((uintptr_t)(((TypHandle*)((hdCall)->ptr))[1])&1 ? (((TypHandle*)((hdCall)->ptr))[1]) : (* -EvTab[(((long)(((TypHandle*)((hdCall)->ptr))[1]) & 1) ? 1 : +EvTab[(((uintptr_t)(((TypHandle*)((hdCall)->ptr))[1]) & 1) ? 1 : ((((TypHandle*)((hdCall)->ptr))[1])->type))])((((TypHandle*)((hdCall)->ptr))[1]))); ptApp = ((TypHandle*)((hdApp)->ptr)); - ptApp[1] = ((TypHandle) (((long)(lp) << 2) + 1)); - ptApp[2] = ((TypHandle) (((long)(lc) << 2) + 1)); + ptApp[1] = ((TypHandle) (uintptr_t) (((long)(lp) << 2) + 1)); + ptApp[2] = ((TypHandle) (uintptr_t) (((long)(lc) << 2) + 1)); } /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr52298.c b/gcc/testsuite/gcc.dg/vect/pr52298.c new file mode 100644 index 00000000000..c2401607c45 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr52298.c @@ -0,0 +1,31 @@ +/* { dg-do run } */ +/* { dg-options "-O1 -ftree-vectorize -fno-tree-pre -fno-tree-loop-im" } */ + +extern void abort (void); +int c[80]; + +__attribute__((noinline)) int +foo (void) +{ + int l = 0; + int a, b; + + for (a = 3; a >= 0; a--) + for (b = 7; b >= 0; b--) + l |= c[a+60]; + return l; +} + +int +main () +{ + int i; + for (i = 0; i < 60; i++) + c[i] = 1; + for (; i < 64; i++) + c[i] = 1 << (i - 59); + if (foo () != 30) + abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.target/arm/aapcs/abitest.h b/gcc/testsuite/gcc.target/arm/aapcs/abitest.h index 7b7d0e24fac..06a92c3ec84 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/abitest.h +++ b/gcc/testsuite/gcc.target/arm/aapcs/abitest.h @@ -1,3 +1,4 @@ + #define IN_FRAMEWORK #ifdef VFP @@ -10,6 +11,13 @@ #define D6 48 #define D7 56 +#ifdef NEON +#define Q0 D0 +#define Q1 D2 +#define Q2 D4 +#define Q3 D6 +#endif + #define S0 64 #define S1 68 #define S2 72 @@ -27,23 +35,18 @@ #define S14 120 #define S15 124 -#define R0 128 -#define R1 132 -#define R2 136 -#define R3 140 - -#define STACK 144 - +#define CORE_REG_START 128 #else +#define CORE_REG_START 0 +#endif -#define R0 0 -#define R1 4 -#define R2 8 -#define R3 12 +#define R0 CORE_REG_START +#define R1 (R0 + 4) +#define R2 (R1 + 4) +#define R3 (R2 + 4) +#define STACK (R3 + 4) -#define STACK 16 -#endif extern void abort (void); diff --git a/gcc/testsuite/gcc.target/arm/aapcs/neon-constants.h b/gcc/testsuite/gcc.target/arm/aapcs/neon-constants.h new file mode 100644 index 00000000000..08b75f7b1a1 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/aapcs/neon-constants.h @@ -0,0 +1,33 @@ + + +#include "arm_neon.h" + +const int32x4_t i32x4_constvec1 = { 1101, 1102, 1103, 1104}; +const int32x4_t i32x4_constvec2 = { 2101, 2102, 2103, 2104}; + +#define ELEM(INDEX) .val[INDEX] + +const int32x4x2_t i32x4x2_constvec1 = {ELEM(0) = {0xaddebccb,11,12,13}, + ELEM(1) = {14, 15, 16, 17} }; + +const int32x4x2_t i32x4x2_constvec2 = { ELEM(0) = {0xaadebcca,11,12,13}, + ELEM(1) = {140, 15, 16, 17}}; + +const int32x4x3_t i32x4x3_constvec1 = { ELEM(0) = {0xabbccdde,8, 9, 10}, + ELEM(1) = {0xabcccdde, 26, 27, 28}, + ELEM(2) = {0xaccccddf, 29, 30, 31}}; + +const int32x4x3_t i32x4x3_constvec2 = { ELEM(0) = {0xbccccdd0,8, 9, 10}, + ELEM(1) = {0xbdfe1000, 26, 27, 28}, + ELEM(2) = {0xaccccddf, 29, 30, 31}}; +const float32x4x2_t f32x4x2_constvec1 = + { ELEM(0) = { 7.101f, 0.201f, 0.301f, 0.401f} , + ELEM(1) = { 8.101f, 0.501f, 0.601f, 0.701f} }; + +const float32x4x2_t f32x4x2_constvec2 = + { ELEM(0) = { 11.99f , 11.21f, 1.27f, 8.74f}, + ELEM(1) = { 13.45f , 1.23f ,1.24f, 1.26f}}; + +const int32x2_t i32x2_constvec1 = { 1283, 1345 }; +const int32x2x2_t i32x2x2_constvec1 = { ELEM(0) = { 0xabcdefab, 32 }, + ELEM(1) = { 0xabcdefbc, 33 }}; diff --git a/gcc/testsuite/gcc.target/arm/aapcs/neon-vect1.c b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect1.c new file mode 100644 index 00000000000..47ae2f65fae --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect1.c @@ -0,0 +1,27 @@ +/* Test AAPCS layout (VFP variant for Neon types) */ + +/* { dg-do run { target arm*-*-*eabi* } } */ +/* { dg-require-effective-target arm_hard_vfp_ok } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-require-effective-target arm32 } */ +/* { dg-add-options arm_neon } */ + + +#ifndef IN_FRAMEWORK +#define VFP +#define NEON +#define TESTFILE "neon-vect1.c" +#include "neon-constants.h" + + +#include "abitest.h" +#else + +ARG(int32x4_t, i32x4_constvec2, Q0) /* D0, D1 */ +ARG(float, 3.0f, S4) /* D2, Q1 */ +ARG(int32x4x2_t, i32x4x2_constvec1, Q2) /* Q2, Q3 - D4-D6 , s5-s12 */ +ARG(double, 12.0, D3) /* Backfill this particular argument. */ +ARG(int32x4x2_t, i32x4x2_constvec2, STACK) +ARG(float, 5.0f, STACK+sizeof(int32x4x2_t)) /* No backfill allowed. */ +LAST_ARG(int, 3, R0) +#endif diff --git a/gcc/testsuite/gcc.target/arm/aapcs/neon-vect2.c b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect2.c new file mode 100644 index 00000000000..f7b532a3be1 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect2.c @@ -0,0 +1,23 @@ +/* Test AAPCS layout (VFP variant for Neon types) */ + +/* { dg-do run { target arm*-*-*eabi* } } */ +/* { dg-require-effective-target arm_hard_vfp_ok } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-require-effective-target arm32 } */ +/* { dg-add-options arm_neon } */ + + +#ifndef IN_FRAMEWORK +#define VFP +#define NEON +#define TESTFILE "neon-vect2.c" +#include "neon-constants.h" + + +#include "abitest.h" +#else + +ARG(int32x4_t, i32x4_constvec2, Q0) /* D0, D1. */ +ARG(float, 3.0f, S4) /* D2, Q1 occupied. */ +LAST_ARG(int, 3, R0) +#endif diff --git a/gcc/testsuite/gcc.target/arm/aapcs/neon-vect3.c b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect3.c new file mode 100644 index 00000000000..e5426b0ec2b --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect3.c @@ -0,0 +1,26 @@ +/* Test AAPCS layout (VFP variant for Neon types) */ + +/* { dg-do run { target arm*-*-*eabi* } } */ +/* { dg-require-effective-target arm_hard_vfp_ok } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-require-effective-target arm32 } */ +/* { dg-add-options arm_neon } */ + + +#ifndef IN_FRAMEWORK +#define VFP +#define NEON +#define TESTFILE "neon-vect3.c" +#include "neon-constants.h" + + +#include "abitest.h" +#else + +ARG(int32x4_t, i32x4_constvec2, Q0) /* D0, D1 */ +ARG(float, 3.0f, S4) /* D2, Q1 */ +ARG(int32x4x2_t, i32x4x2_constvec1, Q2) /* Q2, Q3 - D4-D6 , s5-s12 */ +ARG(int32x4x2_t, i32x4x2_constvec2, STACK) +ARG(double, 11.0, STACK+sizeof(int32x4x2_t)) /* No backfill in D3. */ +LAST_ARG(int, 3, R0) +#endif diff --git a/gcc/testsuite/gcc.target/arm/aapcs/neon-vect4.c b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect4.c new file mode 100644 index 00000000000..96bd09c459f --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect4.c @@ -0,0 +1,27 @@ +/* Test AAPCS layout (VFP variant for Neon types) */ + +/* { dg-do run { target arm*-*-*eabi* } } */ +/* { dg-require-effective-target arm_hard_vfp_ok } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-require-effective-target arm32 } */ +/* { dg-add-options arm_neon } */ + + +#ifndef IN_FRAMEWORK +#define VFP +#define NEON +#define TESTFILE "neon-vect4.c" +#include "neon-constants.h" + + +#include "abitest.h" +#else + +ARG(int32x4_t, i32x4_constvec2, Q0) /* D0, D1 */ +ARG(float, 3.0f, S4) /* D2, Q1 */ +ARG(int32x4x2_t, i32x4x2_constvec1, Q2) /* Q2, Q3 - D4-D6 , s5-s12 */ +ARG(double, 12.0, D3) /* Backfill this particular argument. */ +ARG(float, 5.0f, S5) /* Backfill in S5. */ +ARG(int32x4x2_t, i32x4x2_constvec2, STACK) +LAST_ARG(int, 3, R0) +#endif diff --git a/gcc/testsuite/gcc.target/arm/aapcs/neon-vect5.c b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect5.c new file mode 100644 index 00000000000..59e58c96c5e --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect5.c @@ -0,0 +1,28 @@ +/* Test AAPCS layout (VFP variant for Neon types) */ + +/* { dg-do run { target arm*-*-*eabi* } } */ +/* { dg-require-effective-target arm_hard_vfp_ok } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-require-effective-target arm32 } */ +/* { dg-add-options arm_neon } */ + + +#ifndef IN_FRAMEWORK +#define VFP +#define NEON +#define TESTFILE "neon-vect5.c" +#include "neon-constants.h" + + +#include "abitest.h" +#else + +ARG(int32x4_t, i32x4_constvec2, Q0) /* D0, D1 */ +ARG(float, 3.0f, S4) /* D2, Q1 */ +ARG(float32x4x2_t, f32x4x2_constvec1, Q2) /* Q2, Q3 - D4-D6 , s5-s12 */ +ARG(double, 12.0, D3) /* Backfill this particular argument. */ +ARG(int32x4x2_t, i32x4x2_constvec2, STACK) +ARG(float, 5.0f, STACK+sizeof(int32x4x2_t)) /* No backfill allowed. */ +LAST_ARG(int, 3, R0) + +#endif diff --git a/gcc/testsuite/gcc.target/arm/aapcs/neon-vect6.c b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect6.c new file mode 100644 index 00000000000..fcb3998821a --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect6.c @@ -0,0 +1,24 @@ +/* Test AAPCS layout (VFP variant for Neon types) */ + +/* { dg-do run { target arm*-*-*eabi* } } */ +/* { dg-require-effective-target arm_hard_vfp_ok } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-require-effective-target arm32 } */ +/* { dg-add-options arm_neon } */ + + +#ifndef IN_FRAMEWORK +#define VFP +#define NEON +#define TESTFILE "neon-vect6.c" +#include "neon-constants.h" + + +#include "abitest.h" +#else + +ARG(int32x4_t, i32x4_constvec2, Q0) /* D0, D1 */ +ARG(int32x4x3_t, i32x4x3_constvec1, Q1) /* Q1, Q2, Q3 */ +ARG(int32x4x3_t, i32x4x3_constvec2, STACK) +LAST_ARG(int, 3, R0) +#endif diff --git a/gcc/testsuite/gcc.target/arm/aapcs/neon-vect7.c b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect7.c new file mode 100644 index 00000000000..f8d1d073007 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect7.c @@ -0,0 +1,27 @@ +/* Test AAPCS layout (VFP variant for Neon types) */ + +/* { dg-do run { target arm*-*-*eabi* } } */ +/* { dg-require-effective-target arm_hard_vfp_ok } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-require-effective-target arm32 } */ +/* { dg-add-options arm_neon } */ + + +#ifndef IN_FRAMEWORK +#define VFP +#define NEON +#define TESTFILE "neon-vect7.c" +#include "neon-constants.h" + + +#include "abitest.h" +#else + +ARG(float, 24.3f, S0) /* S0 , D0, Q0 */ +ARG(int32x4x3_t, i32x4x3_constvec1, Q1) /* Q1, Q2, Q3 */ +ARG(double, 25.6, D1) +ARG(float, 12.67f, S1) +ARG(int32x4x3_t, i32x4x3_constvec2, STACK) +ARG(double, 2.47, STACK+sizeof(int32x4x3_t)) +LAST_ARG(int, 3, R0) +#endif diff --git a/gcc/testsuite/gcc.target/arm/aapcs/neon-vect8.c b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect8.c new file mode 100644 index 00000000000..f2c295d84fb --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/aapcs/neon-vect8.c @@ -0,0 +1,27 @@ +/* Test AAPCS layout (VFP variant for Neon types) */ + +/* { dg-do run { target arm*-*-*eabi* } } */ +/* { dg-require-effective-target arm_hard_vfp_ok } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-require-effective-target arm32 } */ +/* { dg-add-options arm_neon } */ + + +#ifndef IN_FRAMEWORK +#define VFP +#define NEON +#define TESTFILE "neon-vect8.c" +#include "neon-constants.h" + + +#include "abitest.h" +#else + +ARG(float, 24.3f, S0) /* S0 , D0, Q0 */ +ARG(int32x2_t, i32x2_constvec1, D1) /* D1 */ +ARG(double, 25.6, D2) +ARG(float, 12.67f, S1) +ARG(int32x4x3_t, i32x4x3_constvec2, STACK) +ARG(double, 2.47, STACK+sizeof(int32x4x3_t)) +LAST_ARG(int, 3, R0) +#endif diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp1.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp1.c index 380a3244dd4..9fb926dbdfc 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp1.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp1.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp10.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp10.c index 58561aac9fc..c3a1b39a949 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp10.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp10.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp11.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp11.c index 2c143bafb06..a496a3ed5bb 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp11.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp11.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp12.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp12.c index 7b6b4cd54aa..bbfa3df9082 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp12.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp12.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp13.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp13.c index ca0c5be7c3a..a46361c0904 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp13.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp13.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp14.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp14.c index b5131d7fcff..43c19f2dd2c 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp14.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp14.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp15.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp15.c index d5a75b5b8ff..c98ca38101d 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp15.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp15.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp16.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp16.c index 9815994ef8b..956bc0ab5d8 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp16.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp16.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp17.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp17.c index d02160c860b..9044ec221fc 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp17.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp17.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp2.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp2.c index a2db349e4a2..bfe90675b23 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp2.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp2.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp3.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp3.c index 807292b5721..0e645d71109 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp3.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp3.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp4.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp4.c index 8bb2a5678b9..46dc4b98a7d 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp4.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp4.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp5.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp5.c index 0adc17fde11..216d98ea8e3 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp5.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp5.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp6.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp6.c index 6d8df0d62ac..4d718da45d0 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp6.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp6.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp7.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp7.c index de4bdb4c421..3e57e45c7de 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp7.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp7.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp8.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp8.c index 7865844ebbc..e55006885c4 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp8.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp8.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/aapcs/vfp9.c b/gcc/testsuite/gcc.target/arm/aapcs/vfp9.c index f9aa2960ca8..c2be6bf4b70 100644 --- a/gcc/testsuite/gcc.target/arm/aapcs/vfp9.c +++ b/gcc/testsuite/gcc.target/arm/aapcs/vfp9.c @@ -1,6 +1,6 @@ /* Test AAPCS layout (VFP variant) */ -/* { dg-do run { target arm*-*-eabi* } } */ +/* { dg-do run { target arm*-*-*eabi* } } */ /* { dg-require-effective-target arm_hard_vfp_ok } */ /* { dg-require-effective-target arm32 } */ /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/pr51534.c b/gcc/testsuite/gcc.target/arm/neon/pr51534.c new file mode 100644 index 00000000000..71cbb055f16 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/neon/pr51534.c @@ -0,0 +1,84 @@ +/* Test the vector comparison intrinsics when comparing to immediate zero. + */ + +/* { dg-do assemble } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-options "-save-temps -mfloat-abi=hard -O3" } */ +/* { dg-add-options arm_neon } */ + +#include <arm_neon.h> + +#define GEN_TEST(T, D, C, R) \ + R test_##C##_##T (T a) { return C (a, D (0)); } + +#define GEN_DOUBLE_TESTS(S, T, C) \ + GEN_TEST (T, vdup_n_s##S, C##_s##S, u##T) \ + GEN_TEST (u##T, vdup_n_u##S, C##_u##S, u##T) + +#define GEN_QUAD_TESTS(S, T, C) \ + GEN_TEST (T, vdupq_n_s##S, C##q_s##S, u##T) \ + GEN_TEST (u##T, vdupq_n_u##S, C##q_u##S, u##T) + +#define GEN_COND_TESTS(C) \ + GEN_DOUBLE_TESTS (8, int8x8_t, C) \ + GEN_DOUBLE_TESTS (16, int16x4_t, C) \ + GEN_DOUBLE_TESTS (32, int32x2_t, C) \ + GEN_QUAD_TESTS (8, int8x16_t, C) \ + GEN_QUAD_TESTS (16, int16x8_t, C) \ + GEN_QUAD_TESTS (32, int32x4_t, C) + +GEN_COND_TESTS(vcgt) +GEN_COND_TESTS(vcge) +GEN_COND_TESTS(vclt) +GEN_COND_TESTS(vcle) +GEN_COND_TESTS(vceq) + +/* Scan for expected outputs. */ +/* { dg-final { scan-assembler "vcgt\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */ +/* { dg-final { scan-assembler-times "vcgt\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler "vcgt\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */ +/* { dg-final { scan-assembler-times "vcgt\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler "vcgt\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */ +/* { dg-final { scan-assembler-times "vcgt\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler "vcgt\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */ +/* { dg-final { scan-assembler-times "vcgt\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler "vcgt\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */ +/* { dg-final { scan-assembler-times "vcgt\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler "vcgt\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */ +/* { dg-final { scan-assembler-times "vcgt\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler "vcge\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */ +/* { dg-final { scan-assembler-times "vcge\.u8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler "vcge\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */ +/* { dg-final { scan-assembler-times "vcge\.u16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler "vcge\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" } } */ +/* { dg-final { scan-assembler-times "vcge\.u32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler "vcge\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */ +/* { dg-final { scan-assembler-times "vcge\.u8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler "vcge\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */ +/* { dg-final { scan-assembler-times "vcge\.u16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler "vcge\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" } } */ +/* { dg-final { scan-assembler-times "vcge\.u32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler "vcgt\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vcgt\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vcgt\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vcgt\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vcgt\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vcgt\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vcge\.s8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vcge\.s16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vcge\.s32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vcge\.s8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vcge\.s16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vcge\.s32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+" } } */ +/* { dg-final { scan-assembler-times "vceq\.i8\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" 2 } } */ +/* { dg-final { scan-assembler-times "vceq\.i16\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" 2 } } */ +/* { dg-final { scan-assembler-times "vceq\.i32\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, #0" 2 } } */ +/* { dg-final { scan-assembler-times "vceq\.i8\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" 2 } } */ +/* { dg-final { scan-assembler-times "vceq\.i16\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" 2 } } */ +/* { dg-final { scan-assembler-times "vceq\.i32\[ \]+\[qQ\]\[0-9\]+, \[qQ\]\[0-9\]+, #0" 2 } } */ + +/* And ensure we don't have unexpected output too. */ +/* { dg-final { scan-assembler-not "vc\[gl\]\[te\]\.u\[0-9\]+\[ \]+\[qQdD\]\[0-9\]+, \[qQdD\]\[0-9\]+, #0" } } */ + +/* Tidy up. */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/pr52375.c b/gcc/testsuite/gcc.target/arm/pr52375.c new file mode 100644 index 00000000000..0405c6685f6 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr52375.c @@ -0,0 +1,15 @@ +/* PR target/52375 */ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-options "-march=armv7-a -mfloat-abi=hard -mfpu=neon -O -ftree-vectorize" } */ + +struct C { int c, d; }; + +unsigned +foo (struct C *p) +{ + unsigned int b = 0, i; + for (i = 0; i < 64; i++) + b |= 0x80000000U >> p[i].c; + return b; +} diff --git a/gcc/testsuite/gcc.target/arm/sat-1.c b/gcc/testsuite/gcc.target/arm/sat-1.c new file mode 100644 index 00000000000..ebde56a4554 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/sat-1.c @@ -0,0 +1,64 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_arm_ok } */ +/* { dg-require-effective-target arm_arch_v6_ok } */ +/* { dg-options "-O2 -marm" } */ +/* { dg-add-options arm_arch_v6 } */ + + +static inline int sat1 (int a, int amin, int amax) +{ + if (a < amin) return amin; + else if (a > amax) return amax; + else return a; +} + +static inline int sat2 (int a, int amin, int amax) +{ + if (a > amax) return amax; + else if (a < amin) return amin; + else return a; +} + +int u1 (int x) +{ + return sat1 (x, 0, 63); +} + +int us1 (int x) +{ + return sat1 (x >> 5, 0, 63); +} + +int s1 (int x) +{ + return sat1 (x, -64, 63); +} + +int ss1 (int x) +{ + return sat1 (x >> 5, -64, 63); +} + +int u2 (int x) +{ + return sat2 (x, 0, 63); +} + +int us2 (int x) +{ + return sat2 (x >> 5, 0, 63); +} + +int s2 (int x) +{ + return sat2 (x, -64, 63); +} + +int ss2 (int x) +{ + return sat2 (x >> 5, -64, 63); +} + +/* { dg-final { scan-assembler-times "usat" 4 } } */ +/* { dg-final { scan-assembler-times "ssat" 4 } } */ + diff --git a/gcc/testsuite/gcc.target/avr/torture/builtins-1.c b/gcc/testsuite/gcc.target/avr/torture/builtins-1.c new file mode 100644 index 00000000000..1fa3aaaaeb3 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/torture/builtins-1.c @@ -0,0 +1,38 @@ +/* { dg-do compile } */ + +void nop (void) { __builtin_avr_nop (); } +void sei (void) { __builtin_avr_sei (); } +void cli (void) { __builtin_avr_cli (); } +void wdr (void) { __builtin_avr_wdr (); } +void sleep (void) { __builtin_avr_sleep (); } + +char fmul (char a, char b) { return __builtin_avr_fmul (a, b); } +char fmuls (char a, char b) { return __builtin_avr_fmuls (a, b); } +char fmulsu (char a, char b) { return __builtin_avr_fmulsu (a, b); } + +char swap1 (char a) +{ + return __builtin_avr_swap (a+1); +} + +char swap2 (char a) +{ + return __builtin_avr_swap (__builtin_avr_swap (a+1)); +} + +char swap15 (void) +{ + return __builtin_avr_swap (15); +} + +void delay0 (void) { __builtin_avr_delay_cycles (0); } +void delay1 (void) { __builtin_avr_delay_cycles (1); } +void delay2 (void) { __builtin_avr_delay_cycles (2); } +void delay3 (void) { __builtin_avr_delay_cycles (3); } + +void delay_1 (void) { __builtin_avr_delay_cycles (44); } +void delay_2 (void) { __builtin_avr_delay_cycles (0x1234); } +void delay_3 (void) { __builtin_avr_delay_cycles (0x123456); } +void delay_4 (void) { __builtin_avr_delay_cycles (-1ul); } + +/* { dg-final { scan-assembler-not "__builtin_avr_" } } */ diff --git a/gcc/testsuite/gcc.target/avr/torture/builtins-error.c b/gcc/testsuite/gcc.target/avr/torture/builtins-error.c new file mode 100644 index 00000000000..692b8afd859 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/torture/builtins-error.c @@ -0,0 +1,11 @@ +/* { dg-do assemble } */ + +char insert (long a) +{ + return __builtin_avr_insert_bits (15.3f+a, 0, 0); /* { dg-error "expects a compile time" } */ +} + +void delay (long a) +{ + __builtin_avr_delay_cycles (a); /* { dg-error "expects a compile time" } */ +} diff --git a/gcc/testsuite/gcc.target/avr/torture/pr51782-1.c b/gcc/testsuite/gcc.target/avr/torture/pr51782-1.c new file mode 100644 index 00000000000..ff0f9d45fae --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/torture/pr51782-1.c @@ -0,0 +1,51 @@ +/* PR middle-end/51782 */ +/* { dg-do run } */ +/* { dg-options { "-std=gnu99" } } */ + +#include <stdlib.h> + +struct R { char r; }; +struct RGB { char r,g,b; }; + +__flash const struct R r1 = { 12 }; +__flash const struct RGB r3 = { 23, 56, 78 }; + +char __attribute__((noinline,noclone)) +read1_bug (const __flash struct R *s) +{ + struct R t = *s; + return t.r; +} + +char __attribute__((noinline,noclone)) +read1_ok (const __flash struct R *s) +{ + return s->r; +} + +char __attribute__((noinline,noclone)) +read3_bug (const __flash struct RGB *s) +{ + struct RGB t = *s; + return t.r + t.g + t.b; +} + +char __attribute__((noinline,noclone)) +read3_ok (const __flash struct RGB *s) +{ + return s->r + s->g + s->b; +} + +__flash const struct R * volatile p1 = &r1; +__flash const struct RGB * volatile p3 = &r3; + +int main (void) +{ + if (read1_bug (p1) != read1_ok (p1)) + abort(); + + if (read3_bug (p3) != read3_ok (p3)) + abort(); + + exit (0); +} diff --git a/gcc/testsuite/gcc.target/i386/align-main-1.c b/gcc/testsuite/gcc.target/i386/align-main-1.c index 699c7f80c5c..f62284f4379 100644 --- a/gcc/testsuite/gcc.target/i386/align-main-1.c +++ b/gcc/testsuite/gcc.target/i386/align-main-1.c @@ -4,10 +4,12 @@ /* { dg-options "-O2 -mpreferred-stack-boundary=6 -mincoming-stack-boundary=6" } */ /* { dg-final { scan-assembler "and\[lq\]?\[\\t \]*\\$-128,\[\\t \]*%\[re\]?sp" } } */ /* { dg-final { scan-assembler-not "and\[lq\]?\[\\t \]*\\$-64,\[\\t \]*%\[re\]?sp" } } */ +/* { dg-skip-if "Options about stack-boundary aren't support" { x86_64-*-mingw* } { "*" } { "" } } */ #include <stddef.h> #define ALIGNMENT 128 + typedef int aligned __attribute__((aligned(ALIGNMENT))); extern void abort(void); diff --git a/gcc/testsuite/gcc.target/i386/align-main-2.c b/gcc/testsuite/gcc.target/i386/align-main-2.c index 65c49e7f5dd..b8175891832 100644 --- a/gcc/testsuite/gcc.target/i386/align-main-2.c +++ b/gcc/testsuite/gcc.target/i386/align-main-2.c @@ -4,7 +4,7 @@ /* { dg-options "-O2 -mpreferred-stack-boundary=6 -mincoming-stack-boundary=6" } */ /* { dg-final { scan-assembler "and\[lq\]?\[\\t \]*\\$-64,\[\\t \]*%\[re\]?sp" } } */ /* { dg-final { scan-assembler-not "and\[lq\]?\[\\t \]*\\$-128,\[\\t \]*%\[re\]?sp" } } */ - +/* { dg-skip-if "Options about stack-boundary aren't support" { x86_64-*-mingw* } { "*" } { "" } } */ #include <stddef.h> #define ALIGNMENT 32 diff --git a/gcc/testsuite/gcc.target/i386/amd64-abi-1.c b/gcc/testsuite/gcc.target/i386/amd64-abi-1.c index 6aa7063f547..8988f79c73d 100644 --- a/gcc/testsuite/gcc.target/i386/amd64-abi-1.c +++ b/gcc/testsuite/gcc.target/i386/amd64-abi-1.c @@ -1,5 +1,6 @@ /* { dg-do compile { target { ! { ia32 } } } } */ /* { dg-options "-mno-sse" } */ +/* { dg-additional-options "-mabi=sysv" { target *-*-mingw* } } */ double foo(void) { return 0; } /* { dg-error "SSE disabled" } */ void bar(double x) { } diff --git a/gcc/testsuite/gcc.target/i386/amd64-abi-2.c b/gcc/testsuite/gcc.target/i386/amd64-abi-2.c index acc2a9e6e19..6146e8efa29 100644 --- a/gcc/testsuite/gcc.target/i386/amd64-abi-2.c +++ b/gcc/testsuite/gcc.target/i386/amd64-abi-2.c @@ -1,6 +1,8 @@ /* PR target/26223 */ /* { dg-do compile { target { ! { ia32 } } } } */ /* { dg-options "-mno-80387" } */ +/* { dg-additional-options "-mabi=sysv" { target *-*-mingw* } } */ + long double foo(long double x) { return x; } /* { dg-error "x87 disabled" } */ long double bar(long double x) { return x; } diff --git a/gcc/testsuite/gcc.target/i386/avx-vzeroupper-4.c b/gcc/testsuite/gcc.target/i386/avx-vzeroupper-4.c index c55c814316c..4676617607e 100644 --- a/gcc/testsuite/gcc.target/i386/avx-vzeroupper-4.c +++ b/gcc/testsuite/gcc.target/i386/avx-vzeroupper-4.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O0 -mavx -mvzeroupper -dp" } */ +/* { dg-additional-options "-mabi=sysv" { target x86_64-*-mingw* } } */ typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__)); diff --git a/gcc/testsuite/gcc.target/i386/avx-vzeroupper-5.c b/gcc/testsuite/gcc.target/i386/avx-vzeroupper-5.c index a14460cf8a4..0f54602b8c8 100644 --- a/gcc/testsuite/gcc.target/i386/avx-vzeroupper-5.c +++ b/gcc/testsuite/gcc.target/i386/avx-vzeroupper-5.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O0 -mavx -mvzeroupper -dp" } */ +/* { dg-additional-options "-mabi=sysv" { target x86_64-*-mingw* } } */ #include <immintrin.h> diff --git a/gcc/testsuite/gcc.target/i386/bitfield3.c b/gcc/testsuite/gcc.target/i386/bitfield3.c index 139f4d46160..1a161597cfe 100644 --- a/gcc/testsuite/gcc.target/i386/bitfield3.c +++ b/gcc/testsuite/gcc.target/i386/bitfield3.c @@ -1,7 +1,8 @@ // Test for bitfield alignment in structs on IA-32 // { dg-do run } // { dg-options "-O2" } -// { dg-options "-mno-align-double -mno-ms-bitfields" { target *-*-interix* } } +// { dg-additional-options "-mno-align-double -mno-ms-bitfields" { target *-*-interix* } } +// { dg-additional-options "-mno-ms-bitfields" { target *-*-mingw* } } extern void abort (void); extern void exit (int); diff --git a/gcc/testsuite/gcc.target/i386/local.c b/gcc/testsuite/gcc.target/i386/local.c index 872fd4d808b..4423001f664 100644 --- a/gcc/testsuite/gcc.target/i386/local.c +++ b/gcc/testsuite/gcc.target/i386/local.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -funit-at-a-time" } */ /* { dg-final { scan-assembler "magic\[^\\n\]*eax" { target ia32 } } } */ -/* { dg-final { scan-assembler "magic\[^\\n\]*edi" { target { ! { ia32 } } } } } */ +/* { dg-final { scan-assembler "magic\[^\\n\]*(edi|ecx)" { target { ! { ia32 } } } } } */ /* Verify that local calling convention is used. */ static t(int) __attribute__ ((noinline)); diff --git a/gcc/testsuite/gcc.target/i386/pad-1.c b/gcc/testsuite/gcc.target/i386/pad-1.c index 770c44d8900..c2e27c9e641 100644 --- a/gcc/testsuite/gcc.target/i386/pad-1.c +++ b/gcc/testsuite/gcc.target/i386/pad-1.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fomit-frame-pointer -mtune=generic" } */ -/* { dg-final { scan-assembler "rep" } } */ +/* { dg-final { scan-assembler "rep" { target { ! x86_64-*-mingw* } } } } */ /* { dg-final { scan-assembler-not "nop" } } */ void diff --git a/gcc/testsuite/gcc.target/i386/pad-2.c b/gcc/testsuite/gcc.target/i386/pad-2.c index 05b19d3887a..fe45c19d143 100644 --- a/gcc/testsuite/gcc.target/i386/pad-2.c +++ b/gcc/testsuite/gcc.target/i386/pad-2.c @@ -1,7 +1,8 @@ /* { dg-do compile } */ /* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=atom" } } */ /* { dg-options "-O2 -fomit-frame-pointer -march=atom" } */ -/* { dg-final { scan-assembler-times "nop" 8 } } */ +/* { dg-final { scan-assembler-times "nop" 8 { target { ! x86_64-*-mingw* } } } } */ +/* { dg-final { scan-assembler-times "nop" 6 { target { x86_64-*-mingw* } } } } */ /* { dg-final { scan-assembler-not "rep" } } */ void diff --git a/gcc/testsuite/gcc.target/i386/pad-5b.c b/gcc/testsuite/gcc.target/i386/pad-5b.c index a3c9d30c3ac..4cd03409233 100644 --- a/gcc/testsuite/gcc.target/i386/pad-5b.c +++ b/gcc/testsuite/gcc.target/i386/pad-5b.c @@ -1,7 +1,8 @@ /* { dg-do compile { target { ! { ia32 } } } } */ /* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=atom" } } */ /* { dg-options "-O2 -fomit-frame-pointer -march=atom" } */ -/* { dg-final { scan-assembler-times "nop" 4 } } */ +/* { dg-final { scan-assembler-times "nop" 4 { target { ! x86_64-*-mingw* } } } } */ +/* { dg-final { scan-assembler-times "nop" 2 { target { x86_64-*-mingw* } } } } */ /* { dg-final { scan-assembler-not "rep" } } */ int diff --git a/gcc/testsuite/gcc.target/i386/pad-6b.c b/gcc/testsuite/gcc.target/i386/pad-6b.c index e4956f0c1d1..82a3d331c46 100644 --- a/gcc/testsuite/gcc.target/i386/pad-6b.c +++ b/gcc/testsuite/gcc.target/i386/pad-6b.c @@ -1,7 +1,8 @@ /* { dg-do compile { target { ! { ia32 } } } } */ /* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=atom" } } */ /* { dg-options "-O2 -fomit-frame-pointer -march=atom" } */ -/* { dg-final { scan-assembler-times "nop" 6 } } */ +/* { dg-final { scan-assembler-times "nop" 6 { target { ! x86_64-*-mingw* } } } } */ +/* { dg-final { scan-assembler-times "nop" 4 { target { x86_64-*-mingw* } } } } */ /* { dg-final { scan-assembler-not "rep" } } */ int diff --git a/gcc/testsuite/gcc.target/i386/pad-8.c b/gcc/testsuite/gcc.target/i386/pad-8.c index ebb6e720006..634cd7417ce 100644 --- a/gcc/testsuite/gcc.target/i386/pad-8.c +++ b/gcc/testsuite/gcc.target/i386/pad-8.c @@ -1,7 +1,8 @@ /* { dg-do compile } */ /* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=atom" } } */ /* { dg-options "-O2 -fomit-frame-pointer -march=atom" } */ -/* { dg-final { scan-assembler-times "nop" 6 } } */ +/* { dg-final { scan-assembler-times "nop" 6 { target { ! x86_64-*-mingw* } } } } */ +/* { dg-final { scan-assembler-times "nop" 4 { target { x86_64-*-mingw* } } } } */ /* { dg-final { scan-assembler-not "rep" } } */ int diff --git a/gcc/testsuite/gcc.target/i386/pad-9.c b/gcc/testsuite/gcc.target/i386/pad-9.c index b1a58158a87..226a0932bf1 100644 --- a/gcc/testsuite/gcc.target/i386/pad-9.c +++ b/gcc/testsuite/gcc.target/i386/pad-9.c @@ -1,7 +1,8 @@ /* { dg-do compile { target { ! { ia32 } } } } */ /* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=atom" } } */ /* { dg-options "-O2 -fomit-frame-pointer -march=atom" } */ -/* { dg-final { scan-assembler-times "nop" 4 } } */ +/* { dg-final { scan-assembler-times "nop" 4 { target { ! x86_64-*-mingw* } } } } */ +/* { dg-final { scan-assembler-times "nop" 2 { target { x86_64-*-mingw* } } } } */ /* { dg-final { scan-assembler-not "rep" } } */ extern void bar (void); diff --git a/gcc/testsuite/gcc.target/i386/pr22152.c b/gcc/testsuite/gcc.target/i386/pr22152.c index 4fade89ee7f..6d24432cfb3 100644 --- a/gcc/testsuite/gcc.target/i386/pr22152.c +++ b/gcc/testsuite/gcc.target/i386/pr22152.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -msse2" } */ /* { dg-options "-O2 -msse2 -mno-vect8-ret-in-mem" { target i?86-*-solaris2.[89] *-*-vxworks* } } */ +/* { dg-additional-options "-mabi=sysv" { target x86_64-*-mingw* } } */ #include <mmintrin.h> diff --git a/gcc/testsuite/gcc.target/i386/pr35767-4.c b/gcc/testsuite/gcc.target/i386/pr35767-4.c index e12f64ffe98..1b58cfd4af6 100644 --- a/gcc/testsuite/gcc.target/i386/pr35767-4.c +++ b/gcc/testsuite/gcc.target/i386/pr35767-4.c @@ -3,7 +3,7 @@ /* { dg-require-effective-target dfp } */ /* { dg-options "-O -march=x86-64 -mtune=generic -std=gnu99" } */ /* { dg-final { scan-assembler-not "movdqu" } } */ -/* { dg-final { scan-assembler "movdqa" } } */ +/* { dg-final { scan-assembler "movdqa" { target { ! x86_64-*-mingw* } } } } */ extern _Decimal128 foo (_Decimal128, _Decimal128, _Decimal128); diff --git a/gcc/testsuite/gcc.target/i386/pr39082-1.c b/gcc/testsuite/gcc.target/i386/pr39082-1.c index f2a1fdf9817..1d8be2a7d98 100644 --- a/gcc/testsuite/gcc.target/i386/pr39082-1.c +++ b/gcc/testsuite/gcc.target/i386/pr39082-1.c @@ -1,6 +1,7 @@ /* PR target/39082 */ /* { dg-do compile { target { ! { ia32 } } } } */ /* { dg-options "-O2" } */ +/* { dg-additional-options "-mabi=sysv" { target x86_64-*-mingw* } } */ union un { diff --git a/gcc/testsuite/gcc.target/i386/pr39162.c b/gcc/testsuite/gcc.target/i386/pr39162.c index 09ea615e8f2..c549106adbb 100644 --- a/gcc/testsuite/gcc.target/i386/pr39162.c +++ b/gcc/testsuite/gcc.target/i386/pr39162.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -Wno-psabi -msse2 -mno-avx" } */ +/* { dg-additional-options "-mabi=sysv" { target x86_64-*-mingw* } } */ typedef long long __m256i __attribute__ ((__vector_size__ (32), __may_alias__)); diff --git a/gcc/testsuite/gcc.target/i386/pr39315-3.c b/gcc/testsuite/gcc.target/i386/pr39315-3.c index 07862db603a..3b61ad0253b 100644 --- a/gcc/testsuite/gcc.target/i386/pr39315-3.c +++ b/gcc/testsuite/gcc.target/i386/pr39315-3.c @@ -4,7 +4,7 @@ /* { dg-final { scan-assembler-not "movups" } } */ /* { dg-final { scan-assembler-not "movlps" } } */ /* { dg-final { scan-assembler-not "movhps" } } */ -/* { dg-final { scan-assembler "and\[lq\]?\[\\t \]*\\$-128,\[\\t \]*%\[re\]?sp" } } */ +/* { dg-final { scan-assembler "and\[lq\]?\[\\t \]*\\$-128,\[\\t \]*%\[re\]?sp" { target { ! x86_64-*-mingw* } } } } */ /* { dg-final { scan-assembler "movaps" } } */ typedef float __m128 __attribute__ ((__vector_size__ (16))); diff --git a/gcc/testsuite/gcc.target/i386/pr44130.c b/gcc/testsuite/gcc.target/i386/pr44130.c index 5c18bfaf753..3e50c7b1535 100644 --- a/gcc/testsuite/gcc.target/i386/pr44130.c +++ b/gcc/testsuite/gcc.target/i386/pr44130.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -mavx -mtune=generic" } */ +/* { dg-skip-if "" { x86_64-*-mingw* } { "*" } { "" } } */ /* { dg-final { scan-assembler "and\[lq\]?\[\\t \]*\\$-32,\[\\t \]*%\[re\]?sp" } } */ /* { dg-final { scan-assembler "vmovaps\[\\t \]*%ymm" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr45336-1.c b/gcc/testsuite/gcc.target/i386/pr45336-1.c index e2b4f658a3f..db6c9400d3b 100644 --- a/gcc/testsuite/gcc.target/i386/pr45336-1.c +++ b/gcc/testsuite/gcc.target/i386/pr45336-1.c @@ -8,7 +8,7 @@ /* { dg-final { scan-assembler-not "cwtl" } } */ /* { dg-final { scan-assembler "pextrb" } } */ /* { dg-final { scan-assembler "pextrw" } } */ -/* { dg-final { scan-assembler "pextrd" } } */ +/* { dg-final { scan-assembler "pextrd" { target { ! x86_64-*-mingw* } } } } */ #include <smmintrin.h> unsigned int foo8(__m128i x) { return _mm_extract_epi8(x, 4); } diff --git a/gcc/testsuite/gcc.target/i386/pr45336-2.c b/gcc/testsuite/gcc.target/i386/pr45336-2.c index 45d93b71bd7..3e51591fc45 100644 --- a/gcc/testsuite/gcc.target/i386/pr45336-2.c +++ b/gcc/testsuite/gcc.target/i386/pr45336-2.c @@ -9,7 +9,7 @@ /* { dg-final { scan-assembler-not "cltq" } } */ /* { dg-final { scan-assembler "pextrb" } } */ /* { dg-final { scan-assembler "pextrw" } } */ -/* { dg-final { scan-assembler "pextrd" } } */ +/* { dg-final { scan-assembler "pextrd" { target { ! x86_64-*-mingw* } } } } */ #include <smmintrin.h> unsigned long long int foo8(__m128i x) { return _mm_extract_epi8(x, 4); } diff --git a/gcc/testsuite/gcc.target/i386/pr45336-3.c b/gcc/testsuite/gcc.target/i386/pr45336-3.c index 055e3148703..b2168c006c5 100644 --- a/gcc/testsuite/gcc.target/i386/pr45336-3.c +++ b/gcc/testsuite/gcc.target/i386/pr45336-3.c @@ -5,7 +5,7 @@ /* { dg-final { scan-assembler "(movswl|cwtl)" } } */ /* { dg-final { scan-assembler "pextrb" } } */ /* { dg-final { scan-assembler "pextrw" } } */ -/* { dg-final { scan-assembler "pextrd" } } */ +/* { dg-final { scan-assembler "pextrd" { target { ! x86_64-*-mingw* } } } } */ #include <smmintrin.h> int foo8(__m128i x) { return (char) _mm_extract_epi8(x, 4); } diff --git a/gcc/testsuite/gcc.target/i386/pr45336-4.c b/gcc/testsuite/gcc.target/i386/pr45336-4.c index c9850e533ac..8b66a6a1da5 100644 --- a/gcc/testsuite/gcc.target/i386/pr45336-4.c +++ b/gcc/testsuite/gcc.target/i386/pr45336-4.c @@ -6,7 +6,7 @@ /* { dg-final { scan-assembler "(cltq|movslq)" } } */ /* { dg-final { scan-assembler "pextrb" } } */ /* { dg-final { scan-assembler "pextrw" } } */ -/* { dg-final { scan-assembler "pextrd" } } */ +/* { dg-final { scan-assembler "pextrd" { target { ! x86_64-*-mingw* } } } } */ #include <smmintrin.h> long long int foo8(__m128i x) { return (char) _mm_extract_epi8(x, 4); } diff --git a/gcc/testsuite/gcc.target/i386/pr45352-2.c b/gcc/testsuite/gcc.target/i386/pr45352-2.c index 5f9ebb18fc8..52e5522a879 100644 --- a/gcc/testsuite/gcc.target/i386/pr45352-2.c +++ b/gcc/testsuite/gcc.target/i386/pr45352-2.c @@ -4,6 +4,8 @@ typedef char uint8_t; typedef uint32_t; typedef vo_frame_t; +__extension__ typedef __SIZE_TYPE__ size_t; + struct vo_frame_s { uint8_t base[3]; @@ -43,7 +45,7 @@ mpeg2dec_accel_t; static int bitstream_init (picture_t * picture, void *start) { picture->bitstream_ptr = start; - return (int) (long) start; + return (int) (size_t) start; } static slice_xvmc_init (picture_t * picture, int code) { @@ -56,7 +58,7 @@ static slice_xvmc_init (picture_t * picture, int code) picture->f_motion.ref [0] [0] - = (char) (long) (forward_reference_frame->base + (offset ? picture->pitches[0] : 0)); + = (char) (size_t) (forward_reference_frame->base + (offset ? picture->pitches[0] : 0)); picture->f_motion.ref[0][1] = (offset); if (picture->picture_structure) picture->pitches[0] <<= picture->pitches[1] <<= 1; @@ -91,7 +93,7 @@ void mpeg2_xvmc_slice (mpeg2dec_accel_t * accel, picture_t * picture, int code, uint8_t buffer,int mba_inc) { - xine_xvmc_t * xvmc = (xine_xvmc_t *) (long) bitstream_init (picture, (void *) (long) buffer); + xine_xvmc_t * xvmc = (xine_xvmc_t *) (size_t) bitstream_init (picture, (void *) (size_t) buffer); slice_xvmc_init (picture, code); while (1) { diff --git a/gcc/testsuite/gcc.target/i386/pr46295.c b/gcc/testsuite/gcc.target/i386/pr46295.c index 219f34e8fe9..b7fccb7fb34 100644 --- a/gcc/testsuite/gcc.target/i386/pr46295.c +++ b/gcc/testsuite/gcc.target/i386/pr46295.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O3 -mavx -mtune=generic -dp" } */ +/* { dg-additional-options "-mabi=sysv" { target x86_64-*-mingw* } } */ typedef double EXPRESS[5]; void Parse_Rel_Factor (EXPRESS Express,int *Terms); diff --git a/gcc/testsuite/gcc.target/i386/pr46470.c b/gcc/testsuite/gcc.target/i386/pr46470.c index 4035d1a1510..11eb51a0394 100644 --- a/gcc/testsuite/gcc.target/i386/pr46470.c +++ b/gcc/testsuite/gcc.target/i386/pr46470.c @@ -6,7 +6,8 @@ transformed to push+pop. We also want to force unwind info updates. */ /* { dg-options "-Os -fomit-frame-pointer -fasynchronous-unwind-tables" } */ /* { dg-options "-Os -fomit-frame-pointer -mpreferred-stack-boundary=3 -fasynchronous-unwind-tables" { target ia32 } } */ - +/* ms_abi has reserved stack-region. */ +/* { dg-skip-if "" { x86_64-*-mingw* } { "*" } { "" } } */ void f(); void g() { f(); f(); } diff --git a/gcc/testsuite/gcc.target/i386/pr46716.c b/gcc/testsuite/gcc.target/i386/pr46716.c new file mode 100644 index 00000000000..29c5e1e4920 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr46716.c @@ -0,0 +1,33 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -msse -mno-sse2" } */ +/* { dg-require-effective-target sse } */ + +#include "sse-check.h" + +typedef double V __attribute__ ((__vector_size__ (16), __may_alias__)); +typedef union +{ + V x; + double a[2]; +} u; + +#define EMM_FLT8(a) ((double *)&(a)) + +void __attribute__ ((noinline)) +test (V s1, V s2) +{ + if (EMM_FLT8(s1)[0] != EMM_FLT8(s2)[0] + || EMM_FLT8(s1)[1] != EMM_FLT8(s2)[1]) + abort (); +} + +static void +sse_test (void) +{ + u s1; + + s1.a[0] = 1.0; + s1.a[1] = 2.0; + + test (s1.x, s1.x); +} diff --git a/gcc/testsuite/gcc.target/i386/pr46939.c b/gcc/testsuite/gcc.target/i386/pr46939.c index 2f50e37ee01..0fd8607bbdd 100644 --- a/gcc/testsuite/gcc.target/i386/pr46939.c +++ b/gcc/testsuite/gcc.target/i386/pr46939.c @@ -1,5 +1,8 @@ /* { dg-do compile } */ /* { dg-options "-O2" } */ + +__extension__ typedef __SIZE_TYPE__ size_t; + int php_filter_parse_int (char const *str, unsigned int str_len, long *ret) { @@ -23,7 +26,7 @@ php_filter_parse_int (char const *str, unsigned int str_len, long *ret) default:; break; } - if ((unsigned long) str < (unsigned long) end) + if ((size_t) str < (size_t) end) { if ((int const) *str >= 49) { @@ -59,7 +62,7 @@ php_filter_parse_int (char const *str, unsigned int str_len, long *ret) { return (-1); } - while ((unsigned long) str < (unsigned long) end) + while ((size_t) str < (size_t) end) { if ((int const) *str >= 48) { diff --git a/gcc/testsuite/gcc.target/i386/pr52146.c b/gcc/testsuite/gcc.target/i386/pr52146.c index a4804e67797..4eb91c06dd6 100644 --- a/gcc/testsuite/gcc.target/i386/pr52146.c +++ b/gcc/testsuite/gcc.target/i386/pr52146.c @@ -15,4 +15,4 @@ test2 (void) *apic_tpr_addr = 0; } -/* { dg-final { scan-assembler-not "-18874240" } } */ +/* { dg-final { scan-assembler-not "\[,\\t \]+-18874240" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr52330.c b/gcc/testsuite/gcc.target/i386/pr52330.c new file mode 100644 index 00000000000..22ba0b21aed --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr52330.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +void foo (int a) +{ + asm volatile ("# %H0" : : "r" (a)); /* { dg-error "not an offsettable" } */ +} diff --git a/gcc/testsuite/gcc.target/i386/sse2-mul-1.c b/gcc/testsuite/gcc.target/i386/sse2-mul-1.c index 5c792e8a4aa..9cdc12763b0 100644 --- a/gcc/testsuite/gcc.target/i386/sse2-mul-1.c +++ b/gcc/testsuite/gcc.target/i386/sse2-mul-1.c @@ -14,6 +14,11 @@ #include <stdlib.h> +/* mingw runtime don't provide random(). */ +#ifdef __MINGW32__ +#define random rand +#endif + #define N 512 static short a1[N], a2[N], a3[N]; static unsigned short b1[N], b2[N], b3[N]; diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-blendps-2.c b/gcc/testsuite/gcc.target/i386/sse4_1-blendps-2.c index d569acf0af9..8fe71b71c57 100644 --- a/gcc/testsuite/gcc.target/i386/sse4_1-blendps-2.c +++ b/gcc/testsuite/gcc.target/i386/sse4_1-blendps-2.c @@ -8,6 +8,11 @@ #include <string.h> #include <stdlib.h> +/* mingw runtime don't provide random(). */ +#ifdef __MINGW32__ +#define random rand +#endif + #define NUM 20 #undef MASK diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-blendps.c b/gcc/testsuite/gcc.target/i386/sse4_1-blendps.c index aa073f33890..3f4b335aca6 100644 --- a/gcc/testsuite/gcc.target/i386/sse4_1-blendps.c +++ b/gcc/testsuite/gcc.target/i386/sse4_1-blendps.c @@ -16,6 +16,11 @@ #include <string.h> #include <stdlib.h> +/* mingw runtime don't provide random(). */ +#ifdef __MINGW32__ +#define random rand +#endif + #define NUM 20 #ifndef MASK diff --git a/gcc/testsuite/gcc.target/i386/sw-1.c b/gcc/testsuite/gcc.target/i386/sw-1.c index 483d117ecb7..fcb1bbd80ba 100644 --- a/gcc/testsuite/gcc.target/i386/sw-1.c +++ b/gcc/testsuite/gcc.target/i386/sw-1.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fshrink-wrap -fdump-rtl-pro_and_epilogue" } */ +/* { dg-skip-if "No shrink-wrapping preformed" { x86_64-*-mingw* } { "*" } { "" } } */ #include <string.h> diff --git a/gcc/testsuite/gcc.target/i386/wrfsbase-1.c b/gcc/testsuite/gcc.target/i386/wrfsbase-1.c index 8b55ce69ab2..dc1503817b8 100644 --- a/gcc/testsuite/gcc.target/i386/wrfsbase-1.c +++ b/gcc/testsuite/gcc.target/i386/wrfsbase-1.c @@ -1,6 +1,6 @@ /* { dg-do compile { target { ! { ia32 } } } } */ /* { dg-options "-O2 -mfsgsbase" } */ -/* { dg-final { scan-assembler "wrfsbase\[ \t]+(%|)edi" } } */ +/* { dg-final { scan-assembler "wrfsbase\[ \t]+(%|)(edi|ecx)" } } */ #include <immintrin.h> diff --git a/gcc/testsuite/gcc.target/i386/wrfsbase-2.c b/gcc/testsuite/gcc.target/i386/wrfsbase-2.c index 5accd793424..fc4a7b5fff7 100644 --- a/gcc/testsuite/gcc.target/i386/wrfsbase-2.c +++ b/gcc/testsuite/gcc.target/i386/wrfsbase-2.c @@ -1,6 +1,6 @@ /* { dg-do compile { target { ! { ia32 } } } } */ /* { dg-options "-O2 -mfsgsbase" } */ -/* { dg-final { scan-assembler "wrfsbase\[ \t]+(%|)rdi" } } */ +/* { dg-final { scan-assembler "wrfsbase\[ \t]+(%|)(rdi|rcx)" } } */ #include <immintrin.h> diff --git a/gcc/testsuite/gcc.target/i386/wrgsbase-1.c b/gcc/testsuite/gcc.target/i386/wrgsbase-1.c index 20cd9456fed..5474288be0c 100644 --- a/gcc/testsuite/gcc.target/i386/wrgsbase-1.c +++ b/gcc/testsuite/gcc.target/i386/wrgsbase-1.c @@ -1,6 +1,6 @@ /* { dg-do compile { target { ! { ia32 } } } } */ /* { dg-options "-O2 -mfsgsbase" } */ -/* { dg-final { scan-assembler "wrgsbase\[ \t]+(%|)edi" } } */ +/* { dg-final { scan-assembler "wrgsbase\[ \t]+(%|)(edi|ecx)" } } */ #include <immintrin.h> diff --git a/gcc/testsuite/gcc.target/i386/wrgsbase-2.c b/gcc/testsuite/gcc.target/i386/wrgsbase-2.c index 52a3c348926..cf947508423 100644 --- a/gcc/testsuite/gcc.target/i386/wrgsbase-2.c +++ b/gcc/testsuite/gcc.target/i386/wrgsbase-2.c @@ -1,6 +1,6 @@ /* { dg-do compile { target { ! { ia32 } } } } */ /* { dg-options "-O2 -mfsgsbase" } */ -/* { dg-final { scan-assembler "wrgsbase\[ \t]+(%|)rdi" } } */ +/* { dg-final { scan-assembler "wrgsbase\[ \t]+(%|)(rdi|rcx)" } } */ #include <immintrin.h> diff --git a/gcc/testsuite/gcc.target/i386/xop-vshift-1.c b/gcc/testsuite/gcc.target/i386/xop-vshift-1.c index 01198e88a42..ee3d2990390 100644 --- a/gcc/testsuite/gcc.target/i386/xop-vshift-1.c +++ b/gcc/testsuite/gcc.target/i386/xop-vshift-1.c @@ -19,6 +19,11 @@ #define TYPE2 long long #endif +/* mingw runtime don't provide random(). */ +#ifdef __MINGW32__ +#define random rand +#endif + signed TYPE1 a[N], b[N], g[N]; unsigned TYPE1 c[N], h[N]; signed TYPE2 d[N], e[N], j[N]; diff --git a/gcc/testsuite/gcc.target/mips/interrupt_handler-2.c b/gcc/testsuite/gcc.target/mips/interrupt_handler-2.c index 13b41e11885..0ab2dc33486 100644 --- a/gcc/testsuite/gcc.target/mips/interrupt_handler-2.c +++ b/gcc/testsuite/gcc.target/mips/interrupt_handler-2.c @@ -4,6 +4,7 @@ /* { dg-final { scan-assembler "\t\\\.cfi_restore 65\n" } } */ /* { dg-final { scan-assembler-not "\\\.cfi_def_cfa( |\t)" } } */ /* { dg-final { scan-assembler-not "\\\.cfi_def_cfa_register( |\t)" } } */ +/* { dg-skip-if "PR target/50580" { mips-sgi-irix6* } } */ extern void f (void); diff --git a/gcc/testsuite/gcc.target/mips/interrupt_handler-3.c b/gcc/testsuite/gcc.target/mips/interrupt_handler-3.c index 2380123b16e..3fd49a322fa 100644 --- a/gcc/testsuite/gcc.target/mips/interrupt_handler-3.c +++ b/gcc/testsuite/gcc.target/mips/interrupt_handler-3.c @@ -23,6 +23,7 @@ /* { dg-final { scan-assembler "\t\\\.cfi_def_cfa_offset 0\n" } } */ /* { dg-final { scan-assembler-not "\\\.cfi_def_cfa( |\t)" } } */ /* { dg-final { scan-assembler-not "\\\.cfi_def_cfa_register( |\t)" } } */ +/* { dg-skip-if "PR target/50580" { mips-sgi-irix6* } } */ extern void f (void); diff --git a/gcc/testsuite/gcc.target/powerpc/pr52457.c b/gcc/testsuite/gcc.target/powerpc/pr52457.c new file mode 100644 index 00000000000..4470e55023f --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr52457.c @@ -0,0 +1,34 @@ +/* { dg-do run { target { powerpc*-*-linux* } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */ +/* { dg-require-effective-target vsx_hw } */ +/* { dg-options "-O1 -mcpu=power7" } */ + +extern void abort (void); + +typedef long long T; +typedef T vl_t __attribute__((vector_size(2 * sizeof (T)))); + +vl_t +buggy_func (T x) +{ + vl_t w; + T *p = (T *)&w; + p[0] = p[1] = x; + return w; +} + +int +main(void) +{ + vl_t rval; + T *pl; + + pl = (T *) &rval; + rval = buggy_func (2); + + if (pl[0] != 2 || pl[1] != 2) + abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/sh/pr48596.c b/gcc/testsuite/gcc.target/sh/pr48596.c new file mode 100644 index 00000000000..30262789343 --- /dev/null +++ b/gcc/testsuite/gcc.target/sh/pr48596.c @@ -0,0 +1,31 @@ +/* Check that the following code compiles without errors. */ +/* { dg-do compile { target "sh*-*-*" } } */ +/* { dg-options "-O1" } */ + +enum { nrrdCenterUnknown, nrrdCenterNode, nrrdCenterCell, nrrdCenterLast }; +typedef struct { int size; int center; } NrrdAxis; +typedef struct { int dim; NrrdAxis axis[10]; } Nrrd; +typedef struct { } NrrdKernel; +typedef struct { const NrrdKernel *kernel[10]; int samples[10]; } Info; + +void +foo (Nrrd *nout, Nrrd *nin, const NrrdKernel *kernel, const double *parm, + const int *samples, const double *scalings) +{ + Info *info; + int d, p, np, center; + for (d=0; d<nin->dim; d++) + { + info->kernel[d] = kernel; + if (samples) + info->samples[d] = samples[d]; + else + { + center = _nrrdCenter(nin->axis[d].center); + if (nrrdCenterCell == center) + info->samples[d] = nin->axis[d].size*scalings[d]; + else + info->samples[d] = (nin->axis[d].size - 1)*scalings[d] + 1; + } + } +} diff --git a/gcc/testsuite/gcc.target/sh/pr49263.c b/gcc/testsuite/gcc.target/sh/pr49263.c new file mode 100644 index 00000000000..b5ffe714fa8 --- /dev/null +++ b/gcc/testsuite/gcc.target/sh/pr49263.c @@ -0,0 +1,86 @@ +/* Verify that TST #imm, R0 instruction is generated if the constant + allows it. Under some circumstances another compare instruction might + be selected, which is also fine. Any AND instructions are considered + counter productive and fail the test. */ +/* { dg-do compile { target "sh*-*-*" } } */ +/* { dg-options "-O2" } */ +/* { dg-final { scan-assembler-not "and" } } */ + +#define make_func(__valtype__, __valget__, __tstval__, __suff__)\ + int test_imm_##__tstval__##__suff__ (__valtype__ val) \ + {\ + return ((__valget__) & (0x##__tstval__ << 0)) ? -20 : -40;\ + } + +#define make_func_0_F(__valtype__, __valget__, __y__, __suff__)\ + make_func (__valtype__, __valget__, __y__##0, __suff__)\ + make_func (__valtype__, __valget__, __y__##1, __suff__)\ + make_func (__valtype__, __valget__, __y__##2, __suff__)\ + make_func (__valtype__, __valget__, __y__##3, __suff__)\ + make_func (__valtype__, __valget__, __y__##4, __suff__)\ + make_func (__valtype__, __valget__, __y__##5, __suff__)\ + make_func (__valtype__, __valget__, __y__##6, __suff__)\ + make_func (__valtype__, __valget__, __y__##7, __suff__)\ + make_func (__valtype__, __valget__, __y__##8, __suff__)\ + make_func (__valtype__, __valget__, __y__##9, __suff__)\ + make_func (__valtype__, __valget__, __y__##A, __suff__)\ + make_func (__valtype__, __valget__, __y__##B, __suff__)\ + make_func (__valtype__, __valget__, __y__##C, __suff__)\ + make_func (__valtype__, __valget__, __y__##D, __suff__)\ + make_func (__valtype__, __valget__, __y__##E, __suff__)\ + make_func (__valtype__, __valget__, __y__##F, __suff__)\ + +#define make_funcs_0_FF(__valtype__, __valget__, __suff__)\ + make_func_0_F (__valtype__, __valget__, 0, __suff__)\ + make_func_0_F (__valtype__, __valget__, 1, __suff__)\ + make_func_0_F (__valtype__, __valget__, 2, __suff__)\ + make_func_0_F (__valtype__, __valget__, 3, __suff__)\ + make_func_0_F (__valtype__, __valget__, 4, __suff__)\ + make_func_0_F (__valtype__, __valget__, 5, __suff__)\ + make_func_0_F (__valtype__, __valget__, 6, __suff__)\ + make_func_0_F (__valtype__, __valget__, 7, __suff__)\ + make_func_0_F (__valtype__, __valget__, 8, __suff__)\ + make_func_0_F (__valtype__, __valget__, 9, __suff__)\ + make_func_0_F (__valtype__, __valget__, A, __suff__)\ + make_func_0_F (__valtype__, __valget__, B, __suff__)\ + make_func_0_F (__valtype__, __valget__, C, __suff__)\ + make_func_0_F (__valtype__, __valget__, D, __suff__)\ + make_func_0_F (__valtype__, __valget__, E, __suff__)\ + make_func_0_F (__valtype__, __valget__, F, __suff__)\ + +make_funcs_0_FF (signed char*, *val, int8_mem) +make_funcs_0_FF (signed char, val, int8_reg) + +make_funcs_0_FF (unsigned char*, *val, uint8_mem) +make_funcs_0_FF (unsigned char, val, uint8_reg) + +make_funcs_0_FF (short*, *val, int16_mem) +make_funcs_0_FF (short, val, int16_reg) + +make_funcs_0_FF (unsigned short*, *val, uint16_mem) +make_funcs_0_FF (unsigned short, val, uint16_reg) + +make_funcs_0_FF (int*, *val, int32_mem) +make_funcs_0_FF (int, val, int32_reg) + +make_funcs_0_FF (unsigned int*, *val, uint32_mem) +make_funcs_0_FF (unsigned int, val, uint32_reg) + +make_funcs_0_FF (long long*, *val, int64_lowword_mem) +make_funcs_0_FF (long long, val, int64_lowword_reg) + +make_funcs_0_FF (unsigned long long*, *val, uint64_lowword_mem) +make_funcs_0_FF (unsigned long long, val, uint64_lowword_reg) + +make_funcs_0_FF (long long*, *val >> 32, int64_highword_mem) +make_funcs_0_FF (long long, val >> 32, int64_highword_reg) + +make_funcs_0_FF (unsigned long long*, *val >> 32, uint64_highword_mem) +make_funcs_0_FF (unsigned long long, val >> 32, uint64_highword_reg) + +make_funcs_0_FF (long long*, *val >> 16, int64_midword_mem) +make_funcs_0_FF (long long, val >> 16, int64_midword_reg) + +make_funcs_0_FF (unsigned long long*, *val >> 16, uint64_midword_mem) +make_funcs_0_FF (unsigned long long, val >> 16, uint64_midword_reg) + diff --git a/gcc/testsuite/gcc.target/sh/pr49468-di.c b/gcc/testsuite/gcc.target/sh/pr49468-di.c new file mode 100644 index 00000000000..86fe21dbbf1 --- /dev/null +++ b/gcc/testsuite/gcc.target/sh/pr49468-di.c @@ -0,0 +1,23 @@ +/* Check that 64 bit integer abs is generated as negc instruction pairs + and conditional branch instead of default branch-free code. */ +/* { dg-skip-if "" { "sh*-*-*" } { "-m5*"} { "" } } */ +/* { dg-do compile { target "sh*-*-*" } } */ +/* { dg-options "-O1" } */ +/* { dg-final { scan-assembler-times "negc" 4 } } */ + + +/* Normal integer absolute value. */ +long long +abs_0 (long long i) +{ + return (i < 0) ? -i : i; +} + +/* Negated integer absolute value. + The generated code should be the same, except that the branch + condition is inverted. */ +long long +abs_1 (long long i) +{ + return (i > 0) ? -i : i; +} diff --git a/gcc/testsuite/gcc.target/sh/pr49468-si.c b/gcc/testsuite/gcc.target/sh/pr49468-si.c index 69fbe230efa..e581b2a1f6e 100644 --- a/gcc/testsuite/gcc.target/sh/pr49468-si.c +++ b/gcc/testsuite/gcc.target/sh/pr49468-si.c @@ -1,5 +1,6 @@ /* Check that 32 bit integer abs is generated as neg instruction and conditional branch instead of default branch-free code. */ +/* { dg-skip-if "" { "sh*-*-*" } { "-m5*"} { "" } } */ /* { dg-do compile { target "sh*-*-*" } } */ /* { dg-options "-O1" } */ /* { dg-final { scan-assembler-times "neg" 2 } } */ diff --git a/gcc/testsuite/gcc.target/sh/pr51244-1.c b/gcc/testsuite/gcc.target/sh/pr51244-1.c new file mode 100644 index 00000000000..57af1040ae8 --- /dev/null +++ b/gcc/testsuite/gcc.target/sh/pr51244-1.c @@ -0,0 +1,32 @@ +/* Check that inverted conditional branch logic does not generate + unnecessary explicit T bit extractions, inversions and + test instructions. */ +/* { dg-do compile { target "sh*-*-*" } } */ +/* { dg-options "-O1 -mbranch-cost=2" } */ +/* { dg-skip-if "" { "sh*-*-*" } { "-m5*"} { "" } } */ +/* { dg-final { scan-assembler-not "tst|negc|extu" } } */ + +int +testfunc_00 (int a, int b, int c, int d) +{ + return (a != b || a != d) ? b : c; +} + +int +testfunc_01 (int a, char* p, int b, int c) +{ + return (a == b && a == c) ? b : c; +} + +int +testfunc_02 (int a, char* p, int b, int c) +{ + return (a == b && a == c) ? b : c; +} + +int +testfunc_03 (int a, char* p, int b, int c) +{ + return (a != b && a != c) ? b : c; +} + diff --git a/gcc/testsuite/gcc.target/sh/pr51244-2.c b/gcc/testsuite/gcc.target/sh/pr51244-2.c new file mode 100644 index 00000000000..d984676102f --- /dev/null +++ b/gcc/testsuite/gcc.target/sh/pr51244-2.c @@ -0,0 +1,18 @@ +/* Check that when taking the complement of the T bit using the negc + instruction pattern, the constant -1 is loaded only once. + On SH2A this test is skipped because the movrt instruction is used + to get the complement of the T bit. */ +/* { dg-do compile { target "sh*-*-*" } } */ +/* { dg-options "-O1 -mbranch-cost=2" } */ +/* { dg-skip-if "" { "sh*-*-*" } { "-m5*" "-m2a*" } { "" } } */ +/* { dg-final { scan-assembler-times "mov\t#-1" 1 } } */ + +void +testfunc_00 (int* a, int* b, int c, int d) +{ + b[0] = a[0] != c; + b[1] = a[1] != d; + b[2] = a[2] != c; + b[3] = a[3] != d; +} + diff --git a/gcc/testsuite/gcc.target/sh/pr51244-3.c b/gcc/testsuite/gcc.target/sh/pr51244-3.c new file mode 100644 index 00000000000..ebb3c3ae4c2 --- /dev/null +++ b/gcc/testsuite/gcc.target/sh/pr51244-3.c @@ -0,0 +1,16 @@ +/* Check that when taking the complement of the T bit on SH2A, + the movrt instruction is being generated. */ +/* { dg-do compile { target "sh*-*-*" } } */ +/* { dg-options "-O1 -mbranch-cost=2" } */ +/* { dg-skip-if "" { "sh*-*-*" } { "*" } { "-m2a*" } } */ +/* { dg-final { scan-assembler-times "movrt" 4 } } */ + +void +testfunc_00 (int* a, int* b, int c, int d) +{ + b[0] = a[0] != c; + b[1] = a[1] != d; + b[2] = a[2] != c; + b[3] = a[3] != d; +} + diff --git a/gcc/testsuite/gfortran.dg/assumed_type_1.f90 b/gcc/testsuite/gfortran.dg/assumed_type_1.f90 new file mode 100644 index 00000000000..7ac98f82738 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/assumed_type_1.f90 @@ -0,0 +1,56 @@ +! { dg-do compile } +! +! PR fortran/48820 +! +! Test TYPE(*) +! +! Based on a contributed test case by Walter Spector +! +module mpi_interface + implicit none + + interface mpi_send + subroutine MPI_Send (buf, count, datatype, dest, tag, comm, ierr) + type(*), intent(in) :: buf(:) + integer, intent(in) :: count + integer, intent(in) :: datatype + integer, intent(in) :: dest + integer, intent(in) :: tag + integer, intent(in) :: comm + integer, intent(out):: ierr + end subroutine + end interface + + interface mpi_send2 + subroutine MPI_Send2 (buf, count, datatype, dest, tag, comm, ierr) + type(*), intent(in) :: buf(*) + integer, intent(in) :: count + integer, intent(in) :: datatype + integer, intent(in) :: dest + integer, intent(in) :: tag + integer, intent(in) :: comm + integer, intent(out):: ierr + end subroutine + end interface + +end module + +use mpi_interface + real :: a(3) + integer :: b(3) + call foo(a) + call foo(b) + call foo(a(1:2)) + call foo(b(1:2)) + call MPI_Send(a, 1, 1,1,1,j,i) + call MPI_Send(b, 1, 1,1,1,j,i) + call MPI_Send2(a, 1, 1,1,1,j,i) + call MPI_Send2(b, 1, 1,1,1,j,i) +contains + subroutine foo(x) + type(*):: x(*) + call MPI_Send2(x, 1, 1,1,1,j,i) + end +end + +! { dg-final { cleanup-modules "mpi_interface" } } diff --git a/gcc/testsuite/gfortran.dg/assumed_type_2.f90 b/gcc/testsuite/gfortran.dg/assumed_type_2.f90 new file mode 100644 index 00000000000..b88717c0f05 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/assumed_type_2.f90 @@ -0,0 +1,181 @@ +! { dg-do run } +! { dg-options "-fdump-tree-original" } +! +! PR fortran/48820 +! +! Test TYPE(*) +! + +module mod + use iso_c_binding, only: c_loc, c_ptr, c_bool + implicit none + interface my_c_loc + function my_c_loc1(x) bind(C) + import c_ptr + type(*) :: x + type(c_ptr) :: my_c_loc1 + end function + function my_c_loc2(x) bind(C) + import c_ptr + type(*) :: x(*) + type(c_ptr) :: my_c_loc2 + end function + end interface my_c_loc +contains + subroutine sub_scalar (arg1, presnt) + type(*), target, optional :: arg1 + logical :: presnt + type(c_ptr) :: cpt + if (presnt .neqv. present (arg1)) call abort () + cpt = c_loc (arg1) + end subroutine sub_scalar + + subroutine sub_array_shape (arg2, lbounds, ubounds) + type(*), target :: arg2(:,:) + type(c_ptr) :: cpt + integer :: lbounds(2), ubounds(2) + if (any (lbound(arg2) /= lbounds)) call abort () + if (any (ubound(arg2) /= ubounds)) call abort () + if (any (shape(arg2) /= ubounds-lbounds+1)) call abort () + if (size(arg2) /= product (ubounds-lbounds+1)) call abort () + if (rank (arg2) /= 2) call abort () +! if (.not. is_continuous (arg2)) call abort () !<< Not yet implemented +! cpt = c_loc (arg2) ! << FIXME: Valid since TS29113 + call sub_array_assumed (arg2) + end subroutine sub_array_shape + + subroutine sub_array_assumed (arg3) + type(*), target :: arg3(*) + type(c_ptr) :: cpt + cpt = c_loc (arg3) + end subroutine sub_array_assumed +end module + +use mod +use iso_c_binding, only: c_int, c_null_ptr +implicit none +type t1 + integer :: a +end type t1 +type :: t2 + sequence + integer :: b +end type t2 +type, bind(C) :: t3 + integer(c_int) :: c +end type t3 + +integer :: scalar_int +real, allocatable :: scalar_real_alloc +character, pointer :: scalar_char_ptr + +integer :: array_int(3) +real, allocatable :: array_real_alloc(:,:) +character, pointer :: array_char_ptr(:,:) + +type(t1) :: scalar_t1 +type(t2), allocatable :: scalar_t2_alloc +type(t3), pointer :: scalar_t3_ptr + +type(t1) :: array_t1(4) +type(t2), allocatable :: array_t2_alloc(:,:) +type(t3), pointer :: array_t3_ptr(:,:) + +class(t1), allocatable :: scalar_class_t1_alloc +class(t1), pointer :: scalar_class_t1_ptr + +class(t1), allocatable :: array_class_t1_alloc(:,:) +class(t1), pointer :: array_class_t1_ptr(:,:) + +scalar_char_ptr => null() +scalar_t3_ptr => null() + +call sub_scalar (presnt=.false.) +call sub_scalar (scalar_real_alloc, .false.) +call sub_scalar (scalar_char_ptr, .false.) +call sub_scalar (null (), .false.) +call sub_scalar (scalar_t2_alloc, .false.) +call sub_scalar (scalar_t3_ptr, .false.) + +allocate (scalar_real_alloc, scalar_char_ptr, scalar_t3_ptr) +allocate (scalar_class_t1_alloc, scalar_class_t1_ptr, scalar_t2_alloc) +allocate (array_real_alloc(3:5,2:4), array_char_ptr(-2:2,2)) +allocate (array_t2_alloc(3:5,2:4), array_t3_ptr(-2:2,2)) +allocate (array_class_t1_alloc(3,3), array_class_t1_ptr(4,4)) + +call sub_scalar (scalar_int, .true.) +call sub_scalar (scalar_real_alloc, .true.) +call sub_scalar (scalar_char_ptr, .true.) +call sub_scalar (array_int(2), .true.) +call sub_scalar (array_real_alloc(3,2), .true.) +call sub_scalar (array_char_ptr(0,1), .true.) +call sub_scalar (scalar_t1, .true.) +call sub_scalar (scalar_t2_alloc, .true.) +call sub_scalar (scalar_t3_ptr, .true.) +call sub_scalar (array_t1(2), .true.) +call sub_scalar (array_t2_alloc(3,2), .true.) +call sub_scalar (array_t3_ptr(0,1), .true.) +call sub_scalar (array_class_t1_alloc(2,1), .true.) +call sub_scalar (array_class_t1_ptr(3,3), .true.) + +call sub_array_assumed (array_int) +call sub_array_assumed (array_real_alloc) +call sub_array_assumed (array_char_ptr) +call sub_array_assumed (array_t1) +call sub_array_assumed (array_t2_alloc) +call sub_array_assumed (array_t3_ptr) +call sub_array_assumed (array_class_t1_alloc) +call sub_array_assumed (array_class_t1_ptr) + +call sub_array_shape (array_real_alloc, [1,1], shape(array_real_alloc)) +call sub_array_shape (array_char_ptr, [1,1], shape(array_char_ptr)) +call sub_array_shape (array_t2_alloc, [1,1], shape(array_t2_alloc)) +call sub_array_shape (array_t3_ptr, [1,1], shape(array_t3_ptr)) +call sub_array_shape (array_class_t1_alloc, [1,1], shape(array_class_t1_alloc)) +call sub_array_shape (array_class_t1_ptr, [1,1], shape(array_class_t1_ptr)) + +deallocate (scalar_char_ptr, scalar_class_t1_ptr, array_char_ptr) +deallocate (array_class_t1_ptr, array_t3_ptr) + +end + +! { dg-final { cleanup-modules "mod" } } + +! { dg-final { scan-tree-dump-times "sub_scalar .0B," 2 "original" } } +! { dg-final { scan-tree-dump-times "sub_scalar .scalar_real_alloc," 2 "original" } } +! { dg-final { scan-tree-dump-times "sub_scalar .scalar_char_ptr," 2 "original" } } +! { dg-final { scan-tree-dump-times "sub_scalar .scalar_t2_alloc," 2 "original" } } +! { dg-final { scan-tree-dump-times "sub_scalar .scalar_t3_ptr" 2 "original" } } + +! { dg-final { scan-tree-dump-times "sub_scalar .&scalar_int," 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_scalar .&scalar_t1," 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_scalar .&array_int.1.," 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_scalar .&scalar_t1," 1 "original" } } + +! { dg-final { scan-tree-dump-times "sub_scalar .&\\(.\\(real.kind=4..0:. . restrict\\) array_real_alloc.data" 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_scalar .&\\(.\\(character.kind=1..0:..1:1. .\\) array_char_ptr.data" 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_scalar .&\\(.\\(struct t2.0:. . restrict\\) array_t2_alloc.data" 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_scalar .&\\(.\\(struct t3.0:. .\\) array_t3_ptr.data" 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_scalar .\\(struct t1 .\\) array_class_t1_alloc._data.data" 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_scalar .\\(struct t1 .\\) array_class_t1_ptr._data.dat" 1 "original" } }a + +! { dg-final { scan-tree-dump-times "sub_array_assumed \\(D" 2 "original" } } +! { dg-final { scan-tree-dump-times " = _gfortran_internal_pack \\(&parm" 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_array_assumed \\(&array_int\\)" 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_array_assumed \\(\\(real\\(kind=4\\).0:. . restrict\\) array_real_alloc.data" 1 "original" } } +! { dg-final { scan-tree-dump-times " = _gfortran_internal_pack \\(&array_char_ptr\\);" 1 "original" } } +! { dg-final { scan-tree-dump-times "\\.data = \\(void .\\) &array_t1.0.;" 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_array_assumed \\(\\(struct t1.0:. .\\) parm" 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_array_assumed \\(\\(struct t2.0:. . restrict\\) array_t2_alloc.data\\);" 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_array_assumed \\(\\(struct t3.0:. .\\) array_t3_ptr.data\\);" 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_array_assumed \\(\\(struct t1.0:. . restrict\\) array_class_t1_alloc._data.data\\);" 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_array_assumed \\(\\(struct t1.0:. .\\) array_class_t1_ptr._data.data\\);" 1 "original" } } + +! { dg-final { scan-tree-dump-times "sub_array_shape \\(&array_real_alloc," 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_array_shape \\(&array_char_ptr," 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_array_shape \\(&array_t2_alloc," 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_array_shape \\(&array_t3_ptr," 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_array_shape \\(&array_class_t1_alloc._data," 1 "original" } } +! { dg-final { scan-tree-dump-times "sub_array_shape \\(&array_class_t1_ptr._data," 1 "original" } } + +! { dg-final { cleanup-tree-dump "original" } } diff --git a/gcc/testsuite/gfortran.dg/assumed_type_3.f90 b/gcc/testsuite/gfortran.dg/assumed_type_3.f90 new file mode 100644 index 00000000000..d88da34cf82 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/assumed_type_3.f90 @@ -0,0 +1,119 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single" } +! +! PR fortran/48820 +! +! Test TYPE(*) + +subroutine one(a) ! { dg-error "may not have the ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute" } + type(*), value :: a +end subroutine one + +subroutine two(a) ! { dg-error "may not have the ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute" } + type(*), pointer :: a +end subroutine two + +subroutine three(a) ! { dg-error "may not have the ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute" } + type(*), allocatable :: a +end subroutine three + +subroutine four(a) ! { dg-error "may not have the ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute" } + type(*) :: a[*] +end subroutine four + +subroutine five(a) ! { dg-error "shall not be an explicit-shape array" } + type(*) :: a(3) +end subroutine five + +subroutine six() + type(*) :: nodum ! { dg-error "is only permitted for dummy variables" } +end subroutine six + +subroutine seven(y) + type(*) :: y(:) + call a7(y(3:5)) ! { dg-error "Assumed-type variable y with designator" } +contains + subroutine a7(x) + type(*) :: x(*) + end subroutine a7 +end subroutine seven + +subroutine eight() + type t + type(*) :: x ! { dg-error "is not allowed for components" } + end type t +end subroutine eight + +subroutine nine() + interface one + subroutine okay(x) + type(*) :: x + end subroutine okay + subroutine okay2(x) + type(*) :: x(*) + end subroutine okay2 + subroutine okay3(x,y) + integer :: x + type(*) :: y + end subroutine okay3 + end interface + interface two + subroutine okok1(x) + type(*) :: x + end subroutine okok1 + subroutine okok2(x) + integer :: x(*) + end subroutine okok2 + end interface + interface three + subroutine ambig1(x) + type(*) :: x + end subroutine ambig1 + subroutine ambig2(x) + integer :: x + end subroutine ambig2 ! { dg-error "Ambiguous interfaces 'ambig2' and 'ambig1' in generic interface 'three'" } + end interface +end subroutine nine + +subroutine ten() + interface + subroutine bar() + end subroutine + end interface + type t + contains + procedure, nopass :: proc => bar + end type + type(t) :: xx + call sub(xx) ! { dg-error "is of derived type with type-bound or FINAL procedures" } +contains + subroutine sub(a) + type(*) :: a + end subroutine sub +end subroutine ten + +subroutine eleven(x) + external bar + type(*) :: x + call bar(x) ! { dg-error "Assumed-type argument x at .1. requires an explicit interface" } +end subroutine eleven + +subroutine twelf(x) + type(*) :: x + call bar(x) ! { dg-error "Type mismatch in argument" } +contains + subroutine bar(x) + integer :: x + end subroutine bar +end subroutine twelf + +subroutine thirteen(x, y) + type(*) :: x + integer :: y(:) + print *, ubound(y, dim=x) ! { dg-error "must be INTEGER" } +end subroutine thirteen + +subroutine fourteen(x) + type(*) :: x + x = x ! { dg-error "Invalid expression with assumed-type variable" } +end subroutine fourteen diff --git a/gcc/testsuite/gfortran.dg/assumed_type_4.f90 b/gcc/testsuite/gfortran.dg/assumed_type_4.f90 new file mode 100644 index 00000000000..1ea982e9add --- /dev/null +++ b/gcc/testsuite/gfortran.dg/assumed_type_4.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +! { dg-options "-std=f2008" } +! +! PR fortran/48820 +! +! Test TYPE(*) + +subroutine one(a) + type(*) :: a ! { dg-error "TS 29113: Assumed type" } +end subroutine one diff --git a/gcc/testsuite/gfortran.dg/bessel_1.f90 b/gcc/testsuite/gfortran.dg/bessel_1.f90 index fb1e19beef5..728c5ce49ca 100644 --- a/gcc/testsuite/gfortran.dg/bessel_1.f90 +++ b/gcc/testsuite/gfortran.dg/bessel_1.f90 @@ -26,11 +26,11 @@ program test call check(bessel_yn (3,x4), bessel_yn (3,1.9_4)) contains - subroutine check_r4 (a, b) ! { dg-warning "Extension: Internal procedure" } + subroutine check_r4 (a, b) real(kind=4), intent(in) :: a, b if (abs(a - b) > 1.e-5 * abs(b)) call abort end subroutine - subroutine check_r8 (a, b) ! { dg-warning "Extension: Internal procedure" } + subroutine check_r8 (a, b) real(kind=8), intent(in) :: a, b if (abs(a - b) > 1.e-7 * abs(b)) call abort end subroutine diff --git a/gcc/testsuite/gfortran.dg/bind_c_dts_4.f03 b/gcc/testsuite/gfortran.dg/bind_c_dts_4.f03 index b2eb5694f1c..c6fc4024443 100644 --- a/gcc/testsuite/gfortran.dg/bind_c_dts_4.f03 +++ b/gcc/testsuite/gfortran.dg/bind_c_dts_4.f03 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-options "-Wc-binding-type" } module test use iso_c_binding, only: c_int type, bind(c) :: foo diff --git a/gcc/testsuite/gfortran.dg/bind_c_implicit_vars.f03 b/gcc/testsuite/gfortran.dg/bind_c_implicit_vars.f03 index d6b4b6d6176..bac7d4d5815 100644 --- a/gcc/testsuite/gfortran.dg/bind_c_implicit_vars.f03 +++ b/gcc/testsuite/gfortran.dg/bind_c_implicit_vars.f03 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-options "-Wc-binding-type" } module bind_c_implicit_vars bind(c) :: j ! { dg-warning "may not be C interoperable" } diff --git a/gcc/testsuite/gfortran.dg/bind_c_usage_25.f90 b/gcc/testsuite/gfortran.dg/bind_c_usage_25.f90 new file mode 100644 index 00000000000..087a9e05ac9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bind_c_usage_25.f90 @@ -0,0 +1,63 @@ +! { dg-do compile } +! { dg-options "-Wno-c-binding-type" } +! +! That's a copy of "bind_c_usage_8.f03", "bind_c_dts_4.f03", +! "bind_c_implicit_vars.f03" and "c_kind_tests_2.f03" +! to check that with -Wno-c-binding-type no warning is printed. +! + +MODULE ISO_C_UTILITIES + USE ISO_C_BINDING + implicit none + CHARACTER(C_CHAR), DIMENSION(1), SAVE, TARGET, PRIVATE :: dummy_string="?" +CONTAINS + FUNCTION C_F_STRING(CPTR) RESULT(FPTR) + use, intrinsic :: iso_c_binding + TYPE(C_PTR), INTENT(IN) :: CPTR ! The C address + CHARACTER(KIND=C_CHAR), DIMENSION(:), POINTER :: FPTR + INTERFACE + FUNCTION strlen(string) RESULT(len) BIND(C,NAME="strlen") + USE ISO_C_BINDING + TYPE(C_PTR), VALUE :: string ! A C pointer + END FUNCTION + END INTERFACE + CALL C_F_POINTER(FPTR=FPTR, CPTR=CPTR, SHAPE=[strlen(CPTR)]) + END FUNCTION +END MODULE ISO_C_UTILITIES + +module test +use iso_c_binding, only: c_int + type, bind(c) :: foo + integer :: p + end type + type(foo), bind(c) :: cp +end module test + +module bind_c_implicit_vars + +bind(c) :: j + +contains + subroutine sub0(i) bind(c) + i = 0 + end subroutine sub0 +end module bind_c_implicit_vars + +module c_kind_tests_2 + use, intrinsic :: iso_c_binding + + integer, parameter :: myF = c_float + real(myF), bind(c) :: myCFloat + integer(myF), bind(c) :: myCInt ! { dg-warning "is for type REAL" } + integer(c_double), bind(c) :: myCInt2 ! { dg-warning "is for type REAL" } + + integer, parameter :: myI = c_int + real(myI) :: myReal ! { dg-warning "is for type INTEGER" } + real(myI), bind(c) :: myCFloat2 ! { dg-warning "is for type INTEGER" } + real(4), bind(c) :: myFloat +end module c_kind_tests_2 + +! { dg-final { cleanup-modules "c_kind_tests_2" } } +! { dg-final { cleanup-modules "bind_c_implicit_vars" } } +! { dg-final { cleanup-modules "test" } } +! { dg-final { cleanup-modules "iso_c_utilities" } } diff --git a/gcc/testsuite/gfortran.dg/bind_c_usage_8.f03 b/gcc/testsuite/gfortran.dg/bind_c_usage_8.f03 index a94545cc51c..e31af86bffd 100644 --- a/gcc/testsuite/gfortran.dg/bind_c_usage_8.f03 +++ b/gcc/testsuite/gfortran.dg/bind_c_usage_8.f03 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-options "-Wc-binding-type" } ! This should compile, though there is a warning about the type of len ! (return variable of strlen()) for being implicit. ! PR fortran/32797 diff --git a/gcc/testsuite/gfortran.dg/c_kind_tests_2.f03 b/gcc/testsuite/gfortran.dg/c_kind_tests_2.f03 index a8cdbdff50c..5bc99f55387 100644 --- a/gcc/testsuite/gfortran.dg/c_kind_tests_2.f03 +++ b/gcc/testsuite/gfortran.dg/c_kind_tests_2.f03 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-options "-Wc-binding-type" } module c_kind_tests_2 use, intrinsic :: iso_c_binding diff --git a/gcc/testsuite/gfortran.dg/class_30.f90 b/gcc/testsuite/gfortran.dg/class_30.f90 index f2cedcb9763..343c0d6139a 100644 --- a/gcc/testsuite/gfortran.dg/class_30.f90 +++ b/gcc/testsuite/gfortran.dg/class_30.f90 @@ -15,7 +15,6 @@ end type t2 type, bind(C):: t3 class(t), pointer :: y - ! { dg-warning "may not be C interoperable" "" { target *-*-* } 17 } ! { dg-error "Polymorphic component y at .1. in SEQUENCE or BIND" "" { target *-*-* } 17 } end type t3 end diff --git a/gcc/testsuite/gfortran.dg/class_51.f90 b/gcc/testsuite/gfortran.dg/class_51.f90 new file mode 100644 index 00000000000..1fdad92dd04 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_51.f90 @@ -0,0 +1,25 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! PR fortran/52270 +! +! From IR F08/0073 by Malcolm Cohen +! + + Program m013 + Type t + Real c + End Type + Type(t),Target :: x + Call sub(x) + Print *,x%c + if (x%c /= 3) call abort () + Contains + Subroutine sub(p) + Class(t),Pointer,Intent(In) :: p + p%c = 3 + End Subroutine + End Program + +! { dg-final { scan-tree-dump-times "sub \\(&class" 1 "original" } } +! { dg-final { cleanup-tree-dump "original" } } diff --git a/gcc/testsuite/gfortran.dg/class_52.f90 b/gcc/testsuite/gfortran.dg/class_52.f90 new file mode 100644 index 00000000000..42cb86db4a3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_52.f90 @@ -0,0 +1,23 @@ +! { dg-do compile } +! { dg-options "-std=f2003" } +! +! PR fortran/52270 +! +! From IR F08/0073 by Malcolm Cohen +! + + Program m013 + Type t + Real c + End Type + Type(t),Target :: x + Call sub(x) ! { dg-error "Fortran 2008: Non-pointer actual argument" } + Print *,x%c + if (x%c /= 3) call abort () + Contains + Subroutine sub(p) + Class(t),Pointer,Intent(In) :: p + p%c = 3 + End Subroutine + End Program + diff --git a/gcc/testsuite/gfortran.dg/derived_comp_array_ref_8.f90 b/gcc/testsuite/gfortran.dg/derived_comp_array_ref_8.f90 new file mode 100644 index 00000000000..739f4adfb78 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/derived_comp_array_ref_8.f90 @@ -0,0 +1,8 @@ +! { dg-do compile } +! +! PR fortran/52325 +! +real :: f +cc%a = 5 ! { dg-error "Symbol 'cc' at .1. has no IMPLICIT type" } +f%a = 5 ! { dg-error "Unexpected '%' for nonderived-type variable 'f' at" } +end diff --git a/gcc/testsuite/gfortran.dg/elemental_optional_args_5.f03 b/gcc/testsuite/gfortran.dg/elemental_optional_args_5.f03 index 70a27d80cde..e0ed0c20d5e 100644 --- a/gcc/testsuite/gfortran.dg/elemental_optional_args_5.f03 +++ b/gcc/testsuite/gfortran.dg/elemental_optional_args_5.f03 @@ -69,6 +69,156 @@ if (s /= 5*2) call abort() if (any (v /= [5*2, 5*2])) call abort() +! ARRAY COMPONENTS: Non alloc/assoc + +v = [9, 33] + +call sub1 (v, x%a2, .false.) +!print *, v +if (any (v /= [9, 33])) call abort() + +call sub1 (v, x%p2, .false.) +!print *, v +if (any (v /= [9, 33])) call abort() + + +! ARRAY COMPONENTS: alloc/assoc + +allocate (x%a2(2), x%p2(2)) +x%a2(:) = [84, 82] +x%p2 = [35, 58] + +call sub1 (v, x%a2, .true.) +!print *, v +if (any (v /= [84*2, 82*2])) call abort() + +call sub1 (v, x%p2, .true.) +!print *, v +if (any (v /= [35*2, 58*2])) call abort() + + +! =============== sub_t ================== +! SCALAR DT: Non alloc/assoc + +s = 3 +v = [9, 33] + +call sub_t (s, ta, .false.) +call sub_t (v, ta, .false.) +!print *, s, v +if (s /= 3) call abort() +if (any (v /= [9, 33])) call abort() + +call sub_t (s, tp, .false.) +call sub_t (v, tp, .false.) +!print *, s, v +if (s /= 3) call abort() +if (any (v /= [9, 33])) call abort() + +call sub_t (s, ca, .false.) +call sub_t (v, ca, .false.) +!print *, s, v +if (s /= 3) call abort() +if (any (v /= [9, 33])) call abort() + +call sub_t (s, cp, .false.) +call sub_t (v, cp, .false.) +!print *, s, v +if (s /= 3) call abort() +if (any (v /= [9, 33])) call abort() + +! SCALAR COMPONENTS: alloc/assoc + +allocate (ta, tp, ca, cp) +ta%a = 4 +tp%a = 5 +ca%a = 6 +cp%a = 7 + +call sub_t (s, ta, .true.) +call sub_t (v, ta, .true.) +!print *, s, v +if (s /= 4*2) call abort() +if (any (v /= [4*2, 4*2])) call abort() + +call sub_t (s, tp, .true.) +call sub_t (v, tp, .true.) +!print *, s, v +if (s /= 5*2) call abort() +if (any (v /= [5*2, 5*2])) call abort() + +call sub_t (s, ca, .true.) +call sub_t (v, ca, .true.) +!print *, s, v +if (s /= 6*2) call abort() +if (any (v /= [6*2, 6*2])) call abort() + +call sub_t (s, cp, .true.) +call sub_t (v, cp, .true.) +!print *, s, v +if (s /= 7*2) call abort() +if (any (v /= [7*2, 7*2])) call abort() + +! ARRAY COMPONENTS: Non alloc/assoc + +v = [9, 33] + +call sub_t (v, taa, .false.) +!print *, v +if (any (v /= [9, 33])) call abort() + +call sub_t (v, tpa, .false.) +!print *, v +if (any (v /= [9, 33])) call abort() + +call sub_t (v, caa, .false.) +!print *, v +if (any (v /= [9, 33])) call abort() + +call sub_t (v, cpa, .false.) +!print *, v +if (any (v /= [9, 33])) call abort() + +deallocate(ta, tp, ca, cp) + + +! ARRAY COMPONENTS: alloc/assoc + +allocate (taa(2), tpa(2)) +taa(1:2)%a = [44, 444] +tpa(1:2)%a = [55, 555] +allocate (caa(2), source=[t(66), t(666)]) +allocate (cpa(2), source=[t(77), t(777)]) + +select type (caa) +type is (t) + if (any (caa(:)%a /= [66, 666])) call abort() +end select + +select type (cpa) +type is (t) + if (any (cpa(:)%a /= [77, 777])) call abort() +end select + +call sub_t (v, taa, .true.) +!print *, v +if (any (v /= [44*2, 444*2])) call abort() + +call sub_t (v, tpa, .true.) +!print *, v +if (any (v /= [55*2, 555*2])) call abort() + + +call sub_t (v, caa, .true.) +!print *, v +if (any (v /= [66*2, 666*2])) call abort() + +call sub_t (v, cpa, .true.) +!print *, v +if (any (v /= [77*2, 777*2])) call abort() + +deallocate (taa, tpa, caa, cpa) + contains @@ -82,5 +232,15 @@ contains x = y*2 end subroutine sub1 + elemental subroutine sub_t(x, y, alloc) + integer, intent(inout) :: x + type(t), intent(in), optional :: y + logical, intent(in) :: alloc + if (alloc .neqv. present (y)) & + x = -99 + if (present(y)) & + x = y%a*2 + end subroutine sub_t + end diff --git a/gcc/testsuite/gfortran.dg/func_result_6.f90 b/gcc/testsuite/gfortran.dg/func_result_6.f90 index e8347be587d..e64a2ef7abc 100644 --- a/gcc/testsuite/gfortran.dg/func_result_6.f90 +++ b/gcc/testsuite/gfortran.dg/func_result_6.f90 @@ -63,7 +63,7 @@ if (ptr /= 2) call abort() bar = gen() if (ptr /= 77) call abort() contains - function foo() ! { dg-warning "Extension: Internal procedure .foo. in generic interface" } + function foo() integer, allocatable :: foo(:) allocate(foo(2)) foo = [33, 77] diff --git a/gcc/testsuite/gfortran.dg/hypot_1.f90 b/gcc/testsuite/gfortran.dg/hypot_1.f90 index 0c1c6e2ae17..59022fab93c 100644 --- a/gcc/testsuite/gfortran.dg/hypot_1.f90 +++ b/gcc/testsuite/gfortran.dg/hypot_1.f90 @@ -18,11 +18,11 @@ program test call check(hypot(x4,y4), hypot(1.9_4,-2.1_4)) contains - subroutine check_r4 (a, b) ! { dg-warning "Extension: Internal procedure" } + subroutine check_r4 (a, b) real(kind=4), intent(in) :: a, b if (abs(a - b) > 1.e-5 * abs(b)) call abort end subroutine - subroutine check_r8 (a, b) ! { dg-warning "Extension: Internal procedure" } + subroutine check_r8 (a, b) real(kind=8), intent(in) :: a, b if (abs(a - b) > 1.e-7 * abs(b)) call abort end subroutine diff --git a/gcc/testsuite/gfortran.dg/interface_35.f90 b/gcc/testsuite/gfortran.dg/interface_35.f90 index 20aa4af786d..eb4de12c1bd 100644 --- a/gcc/testsuite/gfortran.dg/interface_35.f90 +++ b/gcc/testsuite/gfortran.dg/interface_35.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-std=f2008" } +! { dg-options "-std=f2003" } ! ! PR fortran/48112 (module_m) ! PR fortran/48279 (sidl_string_array, s_Hard) @@ -70,7 +70,7 @@ contains integer, intent(in) :: a end subroutine - integer function get1 (s) ! { dg-error "Extension: Internal procedure .get1. in generic interface .get." } + integer function get1 (s) ! { dg-error "Fortran 2008: Internal procedure .get1. in generic interface .get." } integer :: s end function diff --git a/gcc/testsuite/gfortran.dg/interface_assignment_4.f90 b/gcc/testsuite/gfortran.dg/interface_assignment_4.f90 index d55af2905d5..535e8842549 100644 --- a/gcc/testsuite/gfortran.dg/interface_assignment_4.f90 +++ b/gcc/testsuite/gfortran.dg/interface_assignment_4.f90 @@ -16,7 +16,7 @@ contains - subroutine op_assign_VS_CH (var, exp) ! { dg-warning "Extension: Internal procedure" } + subroutine op_assign_VS_CH (var, exp) type(varying_string), intent(out) :: var character(LEN=*), intent(in) :: exp end subroutine diff --git a/gcc/testsuite/gfortran.dg/intrinsic_8.f90 b/gcc/testsuite/gfortran.dg/intrinsic_8.f90 new file mode 100644 index 00000000000..a427c70b301 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/intrinsic_8.f90 @@ -0,0 +1,23 @@ +! { dg-do compile } +! +! PR fortran/52452 +! +! Contributed by Roger Ferrer Ibanez +! +PROGRAM test_etime + IMPLICIT NONE + INTRINSIC :: etime + REAL(4) :: tarray(1:2) + REAL(4) :: result + + CALL etime(tarray, result) +END PROGRAM test_etime + +subroutine test_etime2 + IMPLICIT NONE + INTRINSIC :: etime + REAL(4) :: tarray(1:2) + REAL(4) :: result + + result = etime(tarray) +END subroutine test_etime2 diff --git a/gcc/testsuite/gfortran.dg/io_constraints_10.f90 b/gcc/testsuite/gfortran.dg/io_constraints_10.f90 new file mode 100644 index 00000000000..bb756aa2bc8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/io_constraints_10.f90 @@ -0,0 +1,16 @@ +! { dg-do compile } +! { dg-options "-std=f95" } +! +! PR fortran/52335 +! + +integer :: lun +character(len=20) :: str + +! VALID Fortran 95: +open(unit=lun,file=str,delim='apostrophe',status='old') +inquire(lun, delim=str) + +! Fortran 2003: +write(*,*, delim='apostrophe') 'a' ! { dg-error "Fortran 2003: DELIM= at .1. not allowed in Fortran 95" } +end diff --git a/gcc/testsuite/gfortran.dg/nullify_2.f90 b/gcc/testsuite/gfortran.dg/nullify_2.f90 index ebfcb374c9e..893ac2408f5 100644 --- a/gcc/testsuite/gfortran.dg/nullify_2.f90 +++ b/gcc/testsuite/gfortran.dg/nullify_2.f90 @@ -3,5 +3,5 @@ program i implicit none TYPE (a) t1 ! { dg-error "is being used before" } - nullify(t1%x) ! { dg-error "error in NULLIFY" } + nullify(t1%x) ! { dg-error "Symbol 't1' at .1. has no IMPLICIT type" } end program diff --git a/gcc/testsuite/gfortran.dg/nullify_4.f90 b/gcc/testsuite/gfortran.dg/nullify_4.f90 index 48dcf72ca9d..0fd5056ee07 100644 --- a/gcc/testsuite/gfortran.dg/nullify_4.f90 +++ b/gcc/testsuite/gfortran.dg/nullify_4.f90 @@ -4,5 +4,5 @@ ! Check error recovery; was crashing before. ! real, pointer :: ptr -nullify(ptr, mesh%coarser) ! { dg-error "Syntax error in NULLIFY statement" } +nullify(ptr, mesh%coarser) ! { dg-error "Symbol 'mesh' at .1. has no IMPLICIT type" } end diff --git a/gcc/testsuite/gfortran.dg/pointer_init_6.f90 b/gcc/testsuite/gfortran.dg/pointer_init_6.f90 index 92cece3a8ed..cc5cf360055 100644 --- a/gcc/testsuite/gfortran.dg/pointer_init_6.f90 +++ b/gcc/testsuite/gfortran.dg/pointer_init_6.f90 @@ -27,7 +27,7 @@ module m2 type(t) :: x procedure(s), pointer :: pp1 => s procedure(s), pointer :: pp2 => pp1 ! { dg-error "may not be a procedure pointer" } - procedure(s), pointer :: pp3 => t%ppc ! { dg-error "Syntax error" } + procedure(s), pointer :: pp3 => t%ppc ! { dg-error "Symbol 't' at .1. has no IMPLICIT type" } contains diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_34.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_34.f90 new file mode 100644 index 00000000000..6226414b819 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/proc_ptr_34.f90 @@ -0,0 +1,79 @@ +! { dg-do compile } +! +! PR fortran/52469 +! +! This was failing as the DECL of the proc pointer "func" +! was used for the interface of the proc-pointer component "my_f_ptr" +! rather than the decl of the proc-pointer target +! +! Contributed by palott@gmail.com +! + +module ExampleFuncs + implicit none + + ! NOTE: "func" is a procedure pointer! + pointer :: func + interface + function func (z) + real :: func + real, intent (in) :: z + end function func + end interface + + type Contains_f_ptr + procedure (func), pointer, nopass :: my_f_ptr + end type Contains_f_ptr +contains + +function f1 (x) + real :: f1 + real, intent (in) :: x + + f1 = 2.0 * x + + return +end function f1 + +function f2 (x) + real :: f2 + real, intent (in) :: x + + f2 = 3.0 * x**2 + + return +end function f2 + +function fancy (func, x) + real :: fancy + real, intent (in) :: x + + interface AFunc + function func (y) + real :: func + real, intent (in) ::y + end function func + end interface AFunc + + fancy = func (x) + 3.3 * x +end function fancy + +end module ExampleFuncs + + +program test_proc_ptr + use ExampleFuncs + implicit none + + type (Contains_f_ptr), dimension (2) :: NewType + + !NewType(1) % my_f_ptr => f1 + NewType(2) % my_f_ptr => f2 + + !write (*, *) NewType(1) % my_f_ptr (3.0), NewType(2) % my_f_ptr (3.0) + write (6, *) NewType(2) % my_f_ptr (3.0) ! < Shall print '27.0' + + stop +end program test_proc_ptr + +! { dg-final { cleanup-modules "examplefuncs" } } diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_20.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_20.f90 index e38e6545370..3cad7dfa66b 100644 --- a/gcc/testsuite/gfortran.dg/proc_ptr_comp_20.f90 +++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_20.f90 @@ -35,12 +35,12 @@ o1%ppc => o2%ppc ! { dg-error "Type/rank mismatch" } contains - real function f1(a,b) ! { dg-warning "Extension: Internal procedure" } + real function f1(a,b) real,intent(in) :: a,b f1 = a + b end function - integer function f2(a,b) ! { dg-warning "Extension: Internal procedure" } + integer function f2(a,b) real,intent(in) :: a,b f2 = a - b end function diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f90 index a21916bc844..c000896d549 100644 --- a/gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f90 +++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f90 @@ -19,7 +19,7 @@ contains - elemental subroutine op_assign (str, ch) ! { dg-warning "Extension: Internal procedure" } + elemental subroutine op_assign (str, ch) type(nf_t), intent(out) :: str character(len=*), intent(in) :: ch end subroutine diff --git a/gcc/testsuite/gfortran.dg/realloc_on_assign_13.f90 b/gcc/testsuite/gfortran.dg/realloc_on_assign_13.f90 new file mode 100644 index 00000000000..9661d724f5b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/realloc_on_assign_13.f90 @@ -0,0 +1,20 @@ +! { dg-do compile } +! Test the fix for PR52386. +! +! Contributed by Juergen Reuter <reuter@physik.uni-freiburg.de> +! +module cascades + implicit none + private +contains + function reduced (array) + integer, dimension(:), allocatable :: reduced + integer, dimension(:), intent(in) :: array + logical, dimension(size(array)) :: mask + mask = .true. + allocate (reduced (count (mask))) + reduced = pack (array, mask) + end function reduced +end module cascades +! { dg-final { cleanup-modules "cascades" } } + diff --git a/gcc/testsuite/gfortran.dg/typebound_operator_9.f03 b/gcc/testsuite/gfortran.dg/typebound_operator_9.f03 index b27210bc646..9fda1eb580a 100644 --- a/gcc/testsuite/gfortran.dg/typebound_operator_9.f03 +++ b/gcc/testsuite/gfortran.dg/typebound_operator_9.f03 @@ -1,5 +1,6 @@ ! { dg-do run } ! { dg-add-options ieee } +! { dg-skip-if "Too big for local store" { spu-*-* } { "*" } { "" } } ! ! Solve a diffusion problem using an object-oriented approach ! diff --git a/gcc/testsuite/gfortran.dg/vect/pr32380.f b/gcc/testsuite/gfortran.dg/vect/pr32380.f index ebe61cc4cd2..747f88ac68e 100644 --- a/gcc/testsuite/gfortran.dg/vect/pr32380.f +++ b/gcc/testsuite/gfortran.dg/vect/pr32380.f @@ -259,5 +259,5 @@ c return end -! { dg-final { scan-tree-dump-times "vectorized 7 loops" 1 "vect" } } +! { dg-final { scan-tree-dump-times "vectorized 7 loops" 1 "vect" { xfail powerpc*-*-* ia64-*-*-* } } } ! { dg-final { cleanup-tree-dump "vect" } } diff --git a/gcc/testsuite/gnat.dg/aggr19.adb b/gcc/testsuite/gnat.dg/aggr19.adb new file mode 100644 index 00000000000..a88cc1fb51e --- /dev/null +++ b/gcc/testsuite/gnat.dg/aggr19.adb @@ -0,0 +1,14 @@ +-- { dg-do run } + +with Aggr19_Pkg; use Aggr19_Pkg; + +procedure Aggr19 is + C : Rec5 + := (Ent => (Kind => Two, Node => (L => (D => True, Pos => 1 )), I => 0)); + A : Rec5 := C; +begin + Proc (A); + if A /= C then + raise Program_Error; + end if; +end; diff --git a/gcc/testsuite/gnat.dg/aggr19_pkg.adb b/gcc/testsuite/gnat.dg/aggr19_pkg.adb new file mode 100644 index 00000000000..d59da8945e2 --- /dev/null +++ b/gcc/testsuite/gnat.dg/aggr19_pkg.adb @@ -0,0 +1,8 @@ +package body Aggr19_Pkg is + + procedure Proc (Pool : in out Rec5) is + begin + Pool.Ent := (Kind => Two, Node => Pool.Ent.Node, I => 0); + end; + +end ; diff --git a/gcc/testsuite/gnat.dg/aggr19_pkg.ads b/gcc/testsuite/gnat.dg/aggr19_pkg.ads new file mode 100644 index 00000000000..4f98a4d30d8 --- /dev/null +++ b/gcc/testsuite/gnat.dg/aggr19_pkg.ads @@ -0,0 +1,32 @@ +package Aggr19_Pkg is + + type Rec1 (D : Boolean := False) is record + case D is + when False => null; + when True => Pos : Integer; + end case; + end record; + + type Rec2 is record + L : Rec1; + end record; + + type Rec3 is tagged null record; + + type Enum is (One, Two, Three); + + type Rec4 (Kind : Enum := One) is record + Node : Rec2; + case Kind is + when One => R : Rec3; + when Others => I : Integer; + end case; + end record; + + type Rec5 is record + Ent : Rec4; + end record; + + procedure Proc (Pool : in out Rec5); + +end Aggr19_Pkg; diff --git a/gcc/testsuite/gnat.dg/array20.adb b/gcc/testsuite/gnat.dg/array20.adb new file mode 100644 index 00000000000..86eb61b4ce8 --- /dev/null +++ b/gcc/testsuite/gnat.dg/array20.adb @@ -0,0 +1,13 @@ +-- { dg-do assemble } + +package body Array20 is + + type Arr is array (Positive range <>) of Integer; + + type P_Arr is access Arr; + + N : constant P_Arr := null; + + Table : P_Arr := N; + +end Array20; diff --git a/gcc/testsuite/gnat.dg/array20.ads b/gcc/testsuite/gnat.dg/array20.ads new file mode 100644 index 00000000000..b132b27e5d4 --- /dev/null +++ b/gcc/testsuite/gnat.dg/array20.ads @@ -0,0 +1,5 @@ +package Array20 is + + pragma Elaborate_Body; + +end array20; diff --git a/gcc/testsuite/go.test/test/env.go b/gcc/testsuite/go.test/test/env.go index a4b9d05d87d..3c8e4232838 100644 --- a/gcc/testsuite/go.test/test/env.go +++ b/gcc/testsuite/go.test/test/env.go @@ -4,6 +4,9 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// Test that the Go environment variables are present and accessible through +// package os and package runtime. + package main import ( @@ -12,18 +15,14 @@ import ( ) func main() { - ga, e0 := os.Getenverror("GOARCH") - if e0 != nil { - print("$GOARCH: ", e0.Error(), "\n") - os.Exit(1) - } + ga := os.Getenv("GOARCH") if ga != runtime.GOARCH { print("$GOARCH=", ga, "!= runtime.GOARCH=", runtime.GOARCH, "\n") os.Exit(1) } - xxx, e1 := os.Getenverror("DOES_NOT_EXIST") - if e1 != os.ENOENV { - print("$DOES_NOT_EXIST=", xxx, "; err = ", e1.Error(), "\n") + xxx := os.Getenv("DOES_NOT_EXIST") + if xxx != "" { + print("$DOES_NOT_EXIST=", xxx, "\n") os.Exit(1) } } diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug262.go b/gcc/testsuite/go.test/test/fixedbugs/bug262.go index f5f2c355322..ebca7905f9a 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug262.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug262.go @@ -7,7 +7,7 @@ package main import ( - "os" + "errors" "strconv" ) @@ -44,7 +44,7 @@ func main() { } mm := make(map[string]error) trace = "" - mm["abc"] = os.EINVAL + mm["abc"] = errors.New("invalid") *i(), mm[f()] = strconv.Atoi(h()) if mm["abc"] != nil || trace != "ifh" { println("BUG1", mm["abc"], trace) diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug388.go b/gcc/testsuite/go.test/test/fixedbugs/bug388.go index 1459285b2fa..c17fd7ca23a 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/bug388.go +++ b/gcc/testsuite/go.test/test/fixedbugs/bug388.go @@ -9,13 +9,13 @@ package main import "runtime" -func foo(runtime.UintType, i int) { // ERROR "cannot declare name runtime.UintType|named/anonymous mix" - println(i, runtime.UintType) +func foo(runtime.UintType, i int) { // ERROR "cannot declare name runtime.UintType|named/anonymous mix|undefined identifier" + println(i, runtime.UintType) // GCCGO_ERROR "undefined identifier" } func bar(i int) { - runtime.UintType := i // ERROR "cannot declare name runtime.UintType|non-name on left side" - println(runtime.UintType) // GCCGO_ERROR "invalid use of type" + runtime.UintType := i // ERROR "cannot declare name runtime.UintType|non-name on left side|undefined identifier" + println(runtime.UintType) // GCCGO_ERROR "invalid use of type|undefined identifier" } func baz() { diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 13f68df49ed..7741f91cf30 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -3430,7 +3430,8 @@ proc check_effective_target_vect_condition { } { || [istarget ia64-*-*] || [istarget i?86-*-*] || [istarget spu-*-*] - || [istarget x86_64-*-*] } { + || [istarget x86_64-*-*] + || ([istarget arm*-*-*] && [check_effective_target_arm_neon_ok]) } { set et_vect_cond_saved 1 } } diff --git a/gcc/toplev.c b/gcc/toplev.c index c145af48fb9..665664041b1 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1315,12 +1315,11 @@ process_options (void) if (flag_graphite || flag_graphite_identity || flag_loop_block - || flag_loop_flatten || flag_loop_interchange || flag_loop_strip_mine || flag_loop_parallelize_all) sorry ("Graphite loop optimizations cannot be used (-fgraphite, " - "-fgraphite-identity, -floop-block, -floop-flatten, " + "-fgraphite-identity, -floop-block, " "-floop-interchange, -floop-strip-mine, -floop-parallelize-all, " "and -ftree-loop-linear)"); #endif diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c index d760db34b2a..2badf250650 100644 --- a/gcc/trans-mem.c +++ b/gcc/trans-mem.c @@ -1757,6 +1757,10 @@ struct tm_region bitmap irr_blocks; }; +typedef struct tm_region *tm_region_p; +DEF_VEC_P (tm_region_p); +DEF_VEC_ALLOC_P (tm_region_p, heap); + /* True if there are pending edge statements to be committed for the current function being scanned in the tmmark pass. */ bool pending_edge_inserts_p; @@ -1858,18 +1862,23 @@ tm_region_init (struct tm_region *region) VEC(basic_block, heap) *queue = NULL; bitmap visited_blocks = BITMAP_ALLOC (NULL); struct tm_region *old_region; + VEC(tm_region_p, heap) *bb_regions = NULL; all_tm_regions = region; bb = single_succ (ENTRY_BLOCK_PTR); + /* We could store this information in bb->aux, but we may get called + through get_all_tm_blocks() from another pass that may be already + using bb->aux. */ + VEC_safe_grow_cleared (tm_region_p, heap, bb_regions, last_basic_block); + VEC_safe_push (basic_block, heap, queue, bb); - gcc_assert (!bb->aux); /* FIXME: Remove me. */ - bb->aux = region; + VEC_replace (tm_region_p, bb_regions, bb->index, region); do { bb = VEC_pop (basic_block, queue); - region = (struct tm_region *)bb->aux; - bb->aux = NULL; + region = VEC_index (tm_region_p, bb_regions, bb->index); + VEC_replace (tm_region_p, bb_regions, bb->index, NULL); /* Record exit and irrevocable blocks. */ region = tm_region_init_1 (region, bb); @@ -1886,20 +1895,20 @@ tm_region_init (struct tm_region *region) { bitmap_set_bit (visited_blocks, e->dest->index); VEC_safe_push (basic_block, heap, queue, e->dest); - gcc_assert (!e->dest->aux); /* FIXME: Remove me. */ /* If the current block started a new region, make sure that only the entry block of the new region is associated with this region. Other successors are still part of the old region. */ if (old_region != region && e->dest != region->entry_block) - e->dest->aux = old_region; + VEC_replace (tm_region_p, bb_regions, e->dest->index, old_region); else - e->dest->aux = region; + VEC_replace (tm_region_p, bb_regions, e->dest->index, region); } } while (!VEC_empty (basic_block, queue)); VEC_free (basic_block, heap, queue); BITMAP_FREE (visited_blocks); + VEC_free (tm_region_p, heap, bb_regions); } /* The "gate" function for all transactional memory expansion and optimization @@ -2424,6 +2433,42 @@ get_tm_region_blocks (basic_block entry_block, return bbs; } +/* Set the IN_TRANSACTION for all gimple statements that appear in a + transaction. */ + +void +compute_transaction_bits (void) +{ + struct tm_region *region; + VEC (basic_block, heap) *queue; + unsigned int i; + gimple_stmt_iterator gsi; + basic_block bb; + + /* ?? Perhaps we need to abstract gate_tm_init further, because we + certainly don't need it to calculate CDI_DOMINATOR info. */ + gate_tm_init (); + + for (region = all_tm_regions; region; region = region->next) + { + queue = get_tm_region_blocks (region->entry_block, + region->exit_blocks, + region->irr_blocks, + NULL, + /*stop_at_irr_p=*/true); + for (i = 0; VEC_iterate (basic_block, queue, i, bb); ++i) + for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) + { + gimple stmt = gsi_stmt (gsi); + gimple_set_in_transaction (stmt, true); + } + VEC_free (basic_block, heap, queue); + } + + if (all_tm_regions) + bitmap_obstack_release (&tm_obstack); +} + /* Entry point to the MARK phase of TM expansion. Here we replace transactional memory statements with calls to builtins, and function calls with their transactional clones (if available). But we don't @@ -3736,6 +3781,13 @@ ipa_tm_scan_irr_block (basic_block bb) assembly statement is not relevant to the transaction is to wrap it in a __tm_waiver block. This is not yet implemented, so we can't check for it. */ + if (is_tm_safe (current_function_decl)) + { + tree t = build1 (NOP_EXPR, void_type_node, size_zero_node); + SET_EXPR_LOCATION (t, gimple_location (stmt)); + TREE_BLOCK (t) = gimple_block (stmt); + error ("%Kasm not allowed in %<transaction_safe%> function", t); + } return true; default: diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 66ea9285e6d..9f75650d7a7 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -3340,15 +3340,12 @@ verify_gimple_assign_unary (gimple stmt) { CASE_CONVERT: { - /* Allow conversions between integral types and pointers only if + /* Allow conversions from pointer type to integral type only if there is no sign or zero extension involved. For targets were the precision of ptrofftype doesn't match that - of pointers we need to allow arbitrary conversions from and - to ptrofftype. */ + of pointers we need to allow arbitrary conversions to ptrofftype. */ if ((POINTER_TYPE_P (lhs_type) - && INTEGRAL_TYPE_P (rhs1_type) - && (TYPE_PRECISION (lhs_type) >= TYPE_PRECISION (rhs1_type) - || ptrofftype_p (rhs1_type))) + && INTEGRAL_TYPE_P (rhs1_type)) || (POINTER_TYPE_P (rhs1_type) && INTEGRAL_TYPE_P (lhs_type) && (TYPE_PRECISION (rhs1_type) >= TYPE_PRECISION (lhs_type) diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index b8dfa317f17..e7bb16fcbc2 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -856,7 +856,7 @@ static void dr_analyze_indices (struct data_reference *dr, loop_p nest, loop_p loop) { VEC (tree, heap) *access_fns = NULL; - tree ref, *aref, op; + tree ref, op; tree base, off, access_fn; basic_block before_loop; @@ -869,7 +869,7 @@ dr_analyze_indices (struct data_reference *dr, loop_p nest, loop_p loop) return; } - ref = unshare_expr (DR_REF (dr)); + ref = DR_REF (dr); before_loop = block_before_loop (nest); /* REALPART_EXPR and IMAGPART_EXPR can be handled like accesses @@ -887,61 +887,84 @@ dr_analyze_indices (struct data_reference *dr, loop_p nest, loop_p loop) } /* Analyze access functions of dimensions we know to be independent. */ - aref = &ref; - while (handled_component_p (*aref)) + while (handled_component_p (ref)) { - if (TREE_CODE (*aref) == ARRAY_REF) + if (TREE_CODE (ref) == ARRAY_REF) { - op = TREE_OPERAND (*aref, 1); + op = TREE_OPERAND (ref, 1); access_fn = analyze_scalar_evolution (loop, op); access_fn = instantiate_scev (before_loop, loop, access_fn); VEC_safe_push (tree, heap, access_fns, access_fn); - /* For ARRAY_REFs the base is the reference with the index replaced - by zero if we can not strip it as the outermost component. */ - if (*aref == ref) - { - *aref = TREE_OPERAND (*aref, 0); - continue; - } - else - TREE_OPERAND (*aref, 1) = build_int_cst (TREE_TYPE (op), 0); } + else if (TREE_CODE (ref) == COMPONENT_REF + && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0))) == RECORD_TYPE) + { + /* For COMPONENT_REFs of records (but not unions!) use the + FIELD_DECL offset as constant access function so we can + disambiguate a[i].f1 and a[i].f2. */ + tree off = component_ref_field_offset (ref); + off = size_binop (PLUS_EXPR, + size_binop (MULT_EXPR, + fold_convert (bitsizetype, off), + bitsize_int (BITS_PER_UNIT)), + DECL_FIELD_BIT_OFFSET (TREE_OPERAND (ref, 1))); + VEC_safe_push (tree, heap, access_fns, off); + } + else + /* If we have an unhandled component we could not translate + to an access function stop analyzing. We have determined + our base object in this case. */ + break; - aref = &TREE_OPERAND (*aref, 0); + ref = TREE_OPERAND (ref, 0); } /* If the address operand of a MEM_REF base has an evolution in the analyzed nest, add it as an additional independent access-function. */ - if (TREE_CODE (*aref) == MEM_REF) + if (TREE_CODE (ref) == MEM_REF) { - op = TREE_OPERAND (*aref, 0); + op = TREE_OPERAND (ref, 0); access_fn = analyze_scalar_evolution (loop, op); access_fn = instantiate_scev (before_loop, loop, access_fn); if (TREE_CODE (access_fn) == POLYNOMIAL_CHREC) { tree orig_type; + tree memoff = TREE_OPERAND (ref, 1); base = initial_condition (access_fn); orig_type = TREE_TYPE (base); STRIP_USELESS_TYPE_CONVERSION (base); split_constant_offset (base, &base, &off); /* Fold the MEM_REF offset into the evolutions initial value to make more bases comparable. */ - if (!integer_zerop (TREE_OPERAND (*aref, 1))) + if (!integer_zerop (memoff)) { off = size_binop (PLUS_EXPR, off, - fold_convert (ssizetype, - TREE_OPERAND (*aref, 1))); - TREE_OPERAND (*aref, 1) - = build_int_cst (TREE_TYPE (TREE_OPERAND (*aref, 1)), 0); + fold_convert (ssizetype, memoff)); + memoff = build_int_cst (TREE_TYPE (memoff), 0); } access_fn = chrec_replace_initial_condition (access_fn, fold_convert (orig_type, off)); - *aref = fold_build2_loc (EXPR_LOCATION (*aref), - MEM_REF, TREE_TYPE (*aref), - base, TREE_OPERAND (*aref, 1)); + /* ??? This is still not a suitable base object for + dr_may_alias_p - the base object needs to be an + access that covers the object as whole. With + an evolution in the pointer this cannot be + guaranteed. + As a band-aid, mark the access so we can special-case + it in dr_may_alias_p. */ + ref = fold_build2_loc (EXPR_LOCATION (ref), + MEM_REF, TREE_TYPE (ref), + base, memoff); + DR_UNCONSTRAINED_BASE (dr) = true; VEC_safe_push (tree, heap, access_fns, access_fn); } } + else if (DECL_P (ref)) + { + /* Canonicalize DR_BASE_OBJECT to MEM_REF form. */ + ref = build2 (MEM_REF, TREE_TYPE (ref), + build_fold_addr_expr (ref), + build_int_cst (reference_alias_ptr_type (ref), 0)); + } DR_BASE_OBJECT (dr) = ref; DR_ACCESS_FNS (dr) = access_fns; @@ -1345,6 +1368,27 @@ dr_may_alias_p (const struct data_reference *a, const struct data_reference *b, return false; } + /* If we had an evolution in a MEM_REF BASE_OBJECT we do not know + the size of the base-object. So we cannot do any offset/overlap + based analysis but have to rely on points-to information only. */ + if (TREE_CODE (addr_a) == MEM_REF + && DR_UNCONSTRAINED_BASE (a)) + { + if (TREE_CODE (addr_b) == MEM_REF + && DR_UNCONSTRAINED_BASE (b)) + return ptr_derefs_may_alias_p (TREE_OPERAND (addr_a, 0), + TREE_OPERAND (addr_b, 0)); + else + return ptr_derefs_may_alias_p (TREE_OPERAND (addr_a, 0), + build_fold_addr_expr (addr_b)); + } + else if (TREE_CODE (addr_b) == MEM_REF + && DR_UNCONSTRAINED_BASE (b)) + return ptr_derefs_may_alias_p (build_fold_addr_expr (addr_a), + TREE_OPERAND (addr_b, 0)); + + /* Otherwise DR_BASE_OBJECT is an access that covers the whole object + that is being subsetted in the loop nest. */ if (DR_IS_WRITE (a) && DR_IS_WRITE (b)) return refs_output_dependent_p (addr_a, addr_b); else if (DR_IS_READ (a) && DR_IS_WRITE (b)) @@ -4049,11 +4093,10 @@ compute_affine_dependence (struct data_dependence_relation *ddr, if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "(compute_affine_dependence\n"); - fprintf (dump_file, " (stmt_a = \n"); - print_gimple_stmt (dump_file, DR_STMT (dra), 0, 0); - fprintf (dump_file, ")\n (stmt_b = \n"); - print_gimple_stmt (dump_file, DR_STMT (drb), 0, 0); - fprintf (dump_file, ")\n"); + fprintf (dump_file, " stmt_a: "); + print_gimple_stmt (dump_file, DR_STMT (dra), 0, TDF_SLIM); + fprintf (dump_file, " stmt_b: "); + print_gimple_stmt (dump_file, DR_STMT (drb), 0, TDF_SLIM); } /* Analyze only when the dependence relation is not yet known. */ @@ -4129,7 +4172,14 @@ compute_affine_dependence (struct data_dependence_relation *ddr, } if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, ")\n"); + { + if (DDR_ARE_DEPENDENT (ddr) == chrec_known) + fprintf (dump_file, ") -> no dependence\n"); + else if (DDR_ARE_DEPENDENT (ddr) == chrec_dont_know) + fprintf (dump_file, ") -> dependence analysis failed\n"); + else + fprintf (dump_file, ")\n"); + } } /* Compute in DEPENDENCE_RELATIONS the data dependence graph for all diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h index 15bae6b43cb..d983c8cda45 100644 --- a/gcc/tree-data-ref.h +++ b/gcc/tree-data-ref.h @@ -60,16 +60,17 @@ struct innermost_loop_behavior }; /* Describes the evolutions of indices of the memory reference. The indices - are indices of the ARRAY_REFs and the operands of INDIRECT_REFs. - For ARRAY_REFs, BASE_OBJECT is the reference with zeroed indices - (note that this reference does not have to be valid, if zero does not - belong to the range of the array; hence it is not recommended to use - BASE_OBJECT in any code generation). For INDIRECT_REFs, the address is - set to the loop-invariant part of the address of the object, except for - the constant offset. For the examples above, - - base_object: a[0].b[0][0] *(p + x + 4B * j_0) + are indices of the ARRAY_REFs, indexes in artificial dimensions + added for member selection of records and the operands of MEM_REFs. + BASE_OBJECT is the part of the reference that is loop-invariant + (note that this reference does not have to cover the whole object + being accessed, in which case UNCONSTRAINED_BASE is set; hence it is + not recommended to use BASE_OBJECT in any code generation). + For the examples above, + + base_object: a *(p + x + 4B * j_0) indices: {j_0, +, 1}_2 {16, +, 4}_2 + 4 {i_0, +, 1}_1 {j_0, +, 1}_2 */ @@ -81,18 +82,17 @@ struct indices /* A list of chrecs. Access functions of the indices. */ VEC(tree,heap) *access_fns; + + /* Whether BASE_OBJECT is an access representing the whole object + or whether the access could not be constrained. */ + bool unconstrained_base; }; struct dr_alias { /* The alias information that should be used for new pointers to this - location. SYMBOL_TAG is either a DECL or a SYMBOL_MEMORY_TAG. */ + location. */ struct ptr_info_def *ptr_info; - - /* The set of virtual operands corresponding to this memory reference, - serving as a description of the alias information for the memory - reference. This could be eliminated if we had alias oracle. */ - bitmap vops; }; /* An integer vector. A vector formally consists of an element of a vector @@ -201,6 +201,7 @@ struct data_reference #define DR_STMT(DR) (DR)->stmt #define DR_REF(DR) (DR)->ref #define DR_BASE_OBJECT(DR) (DR)->indices.base_object +#define DR_UNCONSTRAINED_BASE(DR) (DR)->indices.unconstrained_base #define DR_ACCESS_FNS(DR) (DR)->indices.access_fns #define DR_ACCESS_FN(DR, I) VEC_index (tree, DR_ACCESS_FNS (DR), I) #define DR_NUM_DIMENSIONS(DR) VEC_length (tree, DR_ACCESS_FNS (DR)) diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h index f4c4d5c7f96..319be2bb618 100644 --- a/gcc/tree-flow.h +++ b/gcc/tree-flow.h @@ -504,7 +504,6 @@ extern void find_referenced_vars_in (gimple); /* In tree-phinodes.c */ extern void reserve_phi_args_for_new_edge (basic_block); extern void add_phi_node_to_bb (gimple phi, basic_block bb); -extern gimple make_phi_node (tree var, int len); extern gimple create_phi_node (tree, basic_block); extern void add_phi_arg (gimple, tree, edge, source_location); extern void remove_phi_args (edge); diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index cdbbe5bd353..99f3a9b3bd9 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -1262,7 +1262,7 @@ find_phi_replacement_condition (struct loop *loop, arguments. For example, - S1: A = PHI <x1(1), x2(5) + S1: A = PHI <x1(1), x2(5)> is converted into, S2: A = cond ? x1 : x2; @@ -1712,6 +1712,9 @@ combine_blocks (struct loop *loop) free (ifc_bbs); ifc_bbs = NULL; + + /* Post-dominators are corrupt now. */ + free_dominance_info (CDI_POST_DOMINATORS); } /* If-convert LOOP when it is legal. For the moment this pass has no diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c index 7eaed2ac727..6ca52c1f32f 100644 --- a/gcc/tree-into-ssa.c +++ b/gcc/tree-into-ssa.c @@ -3519,9 +3519,9 @@ update_ssa (unsigned update_flags) if (dump_flags & TDF_DETAILS) { - fprintf (dump_file, "Affected blocks: "); + fprintf (dump_file, "Affected blocks:"); EXECUTE_IF_SET_IN_BITMAP (blocks_to_update, 0, i, bi) - fprintf (dump_file, "%u ", i); + fprintf (dump_file, " %u", i); fprintf (dump_file, "\n"); } diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c index 06dd14d42ce..0d21763c72e 100644 --- a/gcc/tree-loop-distribution.c +++ b/gcc/tree-loop-distribution.c @@ -1293,7 +1293,9 @@ tree_loop_distribution (void) fprintf (dump_file, "Loop %d is the same.\n", num); } +#ifdef ENABLE_CHECKING verify_loop_structure (); +#endif VEC_free (gimple, heap, work_list); } diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c index 221f25798f3..abae3fd6e1d 100644 --- a/gcc/tree-parloops.c +++ b/gcc/tree-parloops.c @@ -909,7 +909,7 @@ separate_decls_in_region_debug (gimple stmt, htab_t name_copies, var = gimple_debug_source_bind_get_var (stmt); else return true; - if (TREE_CODE (var) == DEBUG_EXPR_DECL) + if (TREE_CODE (var) == DEBUG_EXPR_DECL || TREE_CODE (var) == LABEL_DECL) return true; gcc_assert (DECL_P (var) && SSA_VAR_P (var)); ielt.uid = DECL_UID (var); @@ -1740,6 +1740,10 @@ create_parallel_loop (struct loop *loop, tree loop_fn, tree data, gimple_set_location (stmt, loc); gsi_insert_after (&gsi, stmt, GSI_NEW_STMT); + /* After the above dom info is hosed. Re-compute it. */ + free_dominance_info (CDI_DOMINATORS); + calculate_dominance_info (CDI_DOMINATORS); + return paral_bb; } @@ -2222,10 +2226,11 @@ parallelize_loops (void) } gen_parallel_loop (loop, reduction_list, n_threads, &niter_desc); +#ifdef ENABLE_CHECKING verify_flow_info (); - verify_dominators (CDI_DOMINATORS); verify_loop_structure (); verify_loop_closed_ssa (true); +#endif } free_stmt_vec_info_vec (); diff --git a/gcc/tree-phinodes.c b/gcc/tree-phinodes.c index 1d7e5c26dcd..218a5515a38 100644 --- a/gcc/tree-phinodes.c +++ b/gcc/tree-phinodes.c @@ -204,7 +204,7 @@ ideal_phi_node_len (int len) /* Return a PHI node with LEN argument slots for variable VAR. */ -gimple +static gimple make_phi_node (tree var, int len) { gimple phi; diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index 2077c8dc9f3..c719984a692 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -266,6 +266,8 @@ along with GCC; see the file COPYING3. If not see #include "params.h" static tree analyze_scalar_evolution_1 (struct loop *, tree, tree); +static tree analyze_scalar_evolution_for_address_of (struct loop *loop, + tree var); /* The cached information about an SSA name VAR, claiming that below basic block INSTANTIATED_BELOW, the value of VAR can be expressed @@ -1712,16 +1714,59 @@ interpret_rhs_expr (struct loop *loop, gimple at_stmt, switch (code) { case ADDR_EXPR: - /* Handle &MEM[ptr + CST] which is equivalent to POINTER_PLUS_EXPR. */ - if (TREE_CODE (TREE_OPERAND (rhs1, 0)) != MEM_REF) - { - res = chrec_dont_know; - break; - } + if (TREE_CODE (TREE_OPERAND (rhs1, 0)) == MEM_REF + || handled_component_p (TREE_OPERAND (rhs1, 0))) + { + enum machine_mode mode; + HOST_WIDE_INT bitsize, bitpos; + int unsignedp; + int volatilep = 0; + tree base, offset; + tree chrec3; + tree unitpos; + + base = get_inner_reference (TREE_OPERAND (rhs1, 0), + &bitsize, &bitpos, &offset, + &mode, &unsignedp, &volatilep, false); + + if (TREE_CODE (base) == MEM_REF) + { + rhs2 = TREE_OPERAND (base, 1); + rhs1 = TREE_OPERAND (base, 0); + + chrec1 = analyze_scalar_evolution (loop, rhs1); + chrec2 = analyze_scalar_evolution (loop, rhs2); + chrec1 = chrec_convert (type, chrec1, at_stmt); + chrec2 = chrec_convert (TREE_TYPE (rhs2), chrec2, at_stmt); + res = chrec_fold_plus (type, chrec1, chrec2); + } + else + { + chrec1 = analyze_scalar_evolution_for_address_of (loop, base); + chrec1 = chrec_convert (type, chrec1, at_stmt); + res = chrec1; + } + + if (offset != NULL_TREE) + { + chrec2 = analyze_scalar_evolution (loop, offset); + chrec2 = chrec_convert (TREE_TYPE (offset), chrec2, at_stmt); + res = chrec_fold_plus (type, res, chrec2); + } + + if (bitpos != 0) + { + gcc_assert ((bitpos % BITS_PER_UNIT) == 0); - rhs2 = TREE_OPERAND (TREE_OPERAND (rhs1, 0), 1); - rhs1 = TREE_OPERAND (TREE_OPERAND (rhs1, 0), 0); - /* Fall through. */ + unitpos = size_int_kind (bitpos / BITS_PER_UNIT, SIZETYPE); + chrec3 = analyze_scalar_evolution (loop, unitpos); + chrec3 = chrec_convert (TREE_TYPE (unitpos), chrec3, at_stmt); + res = chrec_fold_plus (type, res, chrec3); + } + } + else + res = chrec_dont_know; + break; case POINTER_PLUS_EXPR: chrec1 = analyze_scalar_evolution (loop, rhs1); @@ -1961,6 +2006,14 @@ analyze_scalar_evolution (struct loop *loop, tree var) return res; } +/* Analyzes and returns the scalar evolution of VAR address in LOOP. */ + +static tree +analyze_scalar_evolution_for_address_of (struct loop *loop, tree var) +{ + return analyze_scalar_evolution (loop, build_fold_addr_expr (var)); +} + /* Analyze scalar evolution of use of VERSION in USE_LOOP with respect to WRTO_LOOP (which should be a superloop of USE_LOOP) diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 1439c43c889..710f24eeba6 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -1526,10 +1526,12 @@ build_ref_for_offset (location_t loc, tree base, HOST_WIDE_INT offset, we can extract more optimistic alignment information by looking at the access mode. That would constrain the alignment of base + base_offset which we would need to - adjust according to offset. - ??? But it is not at all clear that prev_base is an access - that was in the IL that way, so be conservative for now. */ + adjust according to offset. */ align = get_pointer_alignment_1 (base, &misalign); + if (misalign == 0 + && (TREE_CODE (prev_base) == MEM_REF + || TREE_CODE (prev_base) == TARGET_MEM_REF)) + align = MAX (align, TYPE_ALIGN (TREE_TYPE (prev_base))); misalign += (double_int_sext (tree_to_double_int (off), TYPE_PRECISION (TREE_TYPE (off))).low * BITS_PER_UNIT); diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index 54badda1772..dd90432b920 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -236,17 +236,6 @@ ptr_derefs_may_alias_p (tree ptr1, tree ptr2) STRIP_NOPS (ptr1); STRIP_NOPS (ptr2); - /* Anything we do not explicilty handle aliases. */ - if ((TREE_CODE (ptr1) != SSA_NAME - && TREE_CODE (ptr1) != ADDR_EXPR - && TREE_CODE (ptr1) != POINTER_PLUS_EXPR) - || (TREE_CODE (ptr2) != SSA_NAME - && TREE_CODE (ptr2) != ADDR_EXPR - && TREE_CODE (ptr2) != POINTER_PLUS_EXPR) - || !POINTER_TYPE_P (TREE_TYPE (ptr1)) - || !POINTER_TYPE_P (TREE_TYPE (ptr2))) - return true; - /* Disregard pointer offsetting. */ if (TREE_CODE (ptr1) == POINTER_PLUS_EXPR) { @@ -275,7 +264,7 @@ ptr_derefs_may_alias_p (tree ptr1, tree ptr2) if (base && (TREE_CODE (base) == MEM_REF || TREE_CODE (base) == TARGET_MEM_REF)) - ptr1 = TREE_OPERAND (base, 0); + return ptr_derefs_may_alias_p (TREE_OPERAND (base, 0), ptr2); else if (base && DECL_P (base)) return ptr_deref_may_alias_decl_p (ptr2, base); @@ -288,7 +277,7 @@ ptr_derefs_may_alias_p (tree ptr1, tree ptr2) if (base && (TREE_CODE (base) == MEM_REF || TREE_CODE (base) == TARGET_MEM_REF)) - ptr2 = TREE_OPERAND (base, 0); + return ptr_derefs_may_alias_p (ptr1, TREE_OPERAND (base, 0)); else if (base && DECL_P (base)) return ptr_deref_may_alias_decl_p (ptr1, base); @@ -296,6 +285,13 @@ ptr_derefs_may_alias_p (tree ptr1, tree ptr2) return true; } + /* From here we require SSA name pointers. Anything else aliases. */ + if (TREE_CODE (ptr1) != SSA_NAME + || TREE_CODE (ptr2) != SSA_NAME + || !POINTER_TYPE_P (TREE_TYPE (ptr1)) + || !POINTER_TYPE_P (TREE_TYPE (ptr2))) + return true; + /* We may end up with two empty points-to solutions for two same pointers. In this case we still want to say both pointers alias, so shortcut that here. */ diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index a9a658f2c44..4ea9644dd27 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -1779,6 +1779,9 @@ dom_opt_leave_block (struct dom_walk_data *walk_data, basic_block bb) && (single_succ_edge (bb)->flags & EDGE_ABNORMAL) == 0 && potentially_threadable_block (single_succ (bb))) { + /* Push a marker on the stack, which thread_across_edge expects + and will remove. */ + VEC_safe_push (tree, heap, const_and_copies_stack, NULL_TREE); dom_thread_across_edge (walk_data, single_succ_edge (bb)); } else if ((last = last_stmt (bb)) diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c index 3c7bb65e0bf..ce5eb208850 100644 --- a/gcc/tree-ssa-loop-im.c +++ b/gcc/tree-ssa-loop-im.c @@ -150,7 +150,7 @@ typedef struct mem_ref bitmap indep_ref; /* The set of memory references on that this reference is independent. */ - bitmap dep_ref; /* The complement of DEP_REF. */ + bitmap dep_ref; /* The complement of INDEP_REF. */ } *mem_ref_p; DEF_VEC_P(mem_ref_p); @@ -412,6 +412,26 @@ movement_possibility (gimple stmt) || gimple_could_trap_p (stmt)) return MOVE_PRESERVE_EXECUTION; + /* Non local loads in a transaction cannot be hoisted out. Well, + unless the load happens on every path out of the loop, but we + don't take this into account yet. */ + if (flag_tm + && gimple_in_transaction (stmt) + && gimple_assign_single_p (stmt)) + { + tree rhs = gimple_assign_rhs1 (stmt); + if (DECL_P (rhs) && is_global_var (rhs)) + { + if (dump_file) + { + fprintf (dump_file, "Cannot hoist conditional load of "); + print_generic_expr (dump_file, rhs, TDF_SLIM); + fprintf (dump_file, " because it is in a transaction.\n"); + } + return MOVE_IMPOSSIBLE; + } + } + return ret; } @@ -2387,6 +2407,9 @@ tree_ssa_lim_initialize (void) sbitmap_free (contains_call); lim_aux_data_map = pointer_map_create (); + + if (flag_tm) + compute_transaction_bits (); } /* Cleans up after the invariant motion pass. */ diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c index 10c9352599a..527c911e4a7 100644 --- a/gcc/tree-ssa-loop-ivopts.c +++ b/gcc/tree-ssa-loop-ivopts.c @@ -2405,28 +2405,26 @@ add_candidate (struct ivopts_data *data, add_autoinc_candidates (data, base, step, important, use); } -/* Add a standard "0 + 1 * iteration" iv candidate for a - type with SIZE bits. */ - -static void -add_standard_iv_candidates_for_size (struct ivopts_data *data, - unsigned int size) -{ - tree type = lang_hooks.types.type_for_size (size, true); - add_candidate (data, build_int_cst (type, 0), build_int_cst (type, 1), - true, NULL); -} - /* Adds standard iv candidates. */ static void add_standard_iv_candidates (struct ivopts_data *data) { - add_standard_iv_candidates_for_size (data, INT_TYPE_SIZE); + add_candidate (data, integer_zero_node, integer_one_node, true, NULL); + + /* The same for a double-integer type if it is still fast enough. */ + if (TYPE_PRECISION + (long_integer_type_node) > TYPE_PRECISION (integer_type_node) + && TYPE_PRECISION (long_integer_type_node) <= BITS_PER_WORD) + add_candidate (data, build_int_cst (long_integer_type_node, 0), + build_int_cst (long_integer_type_node, 1), true, NULL); /* The same for a double-integer type if it is still fast enough. */ - if (BITS_PER_WORD >= INT_TYPE_SIZE * 2) - add_standard_iv_candidates_for_size (data, INT_TYPE_SIZE * 2); + if (TYPE_PRECISION + (long_long_integer_type_node) > TYPE_PRECISION (long_integer_type_node) + && TYPE_PRECISION (long_long_integer_type_node) <= BITS_PER_WORD) + add_candidate (data, build_int_cst (long_long_integer_type_node, 0), + build_int_cst (long_long_integer_type_node, 1), true, NULL); } diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c index f6e2e9c937f..a0123ffcd17 100644 --- a/gcc/tree-ssa-loop-manip.c +++ b/gcc/tree-ssa-loop-manip.c @@ -1096,7 +1096,6 @@ tree_transform_and_unroll_loop (struct loop *loop, unsigned factor, #ifdef ENABLE_CHECKING verify_flow_info (); - verify_dominators (CDI_DOMINATORS); verify_loop_structure (); verify_loop_closed_ssa (true); #endif diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c index 1a9c2be7376..91eeb16cec9 100644 --- a/gcc/tree-ssa-loop.c +++ b/gcc/tree-ssa-loop.c @@ -266,8 +266,7 @@ gate_graphite_transforms (void) || flag_loop_interchange || flag_loop_strip_mine || flag_graphite_identity - || flag_loop_parallelize_all - || flag_loop_flatten) + || flag_loop_parallelize_all) flag_graphite = 1; return flag_graphite != 0; diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c index a00541fbdf5..ab982f50482 100644 --- a/gcc/tree-ssa-math-opts.c +++ b/gcc/tree-ssa-math-opts.c @@ -2158,6 +2158,8 @@ convert_mult_to_widen (gimple stmt, gimple_stmt_iterator *gsi) /* Ensure that the inputs to the handler are in the correct precison for the opcode. This will be the full mode size. */ actual_precision = GET_MODE_PRECISION (actual_mode); + if (2 * actual_precision > TYPE_PRECISION (type)) + return false; if (actual_precision != TYPE_PRECISION (type1) || from_unsigned1 != TYPE_UNSIGNED (type1)) { diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c index b739bbc125c..c195e3bcc4d 100644 --- a/gcc/tree-ssa-phiopt.c +++ b/gcc/tree-ssa-phiopt.c @@ -1,5 +1,5 @@ /* Optimization of PHI nodes by converting them into straightline code. - Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This file is part of GCC. @@ -36,13 +36,14 @@ along with GCC; see the file COPYING3. If not see #include "domwalk.h" #include "cfgloop.h" #include "tree-data-ref.h" +#include "tree-pretty-print.h" static unsigned int tree_ssa_phiopt (void); static unsigned int tree_ssa_phiopt_worker (bool); static bool conditional_replacement (basic_block, basic_block, edge, edge, gimple, tree, tree); -static bool value_replacement (basic_block, basic_block, - edge, edge, gimple, tree, tree); +static int value_replacement (basic_block, basic_block, + edge, edge, gimple, tree, tree); static bool minmax_replacement (basic_block, basic_block, edge, edge, gimple, tree, tree); static bool abs_replacement (basic_block, basic_block, @@ -314,7 +315,24 @@ tree_ssa_phiopt_worker (bool do_store_elim) { gimple_seq phis = phi_nodes (bb2); gimple_stmt_iterator gsi; + bool candorest = true; + /* Value replacement can work with more than one PHI + so try that first. */ + for (gsi = gsi_start (phis); !gsi_end_p (gsi); gsi_next (&gsi)) + { + phi = gsi_stmt (gsi); + arg0 = gimple_phi_arg_def (phi, e1->dest_idx); + arg1 = gimple_phi_arg_def (phi, e2->dest_idx); + if (value_replacement (bb, bb1, e1, e2, phi, arg0, arg1) == 2) + { + candorest = false; + cfgchanged = true; + break; + } + } + if (!candorest) + continue; /* Check to make sure that there is only one non-virtual PHI node. TODO: we could do it with more than one iff the other PHI nodes have the same elements for these two edges. */ @@ -343,8 +361,6 @@ tree_ssa_phiopt_worker (bool do_store_elim) /* Do the replacement of conditional if it can be done. */ if (conditional_replacement (bb, bb1, e1, e2, phi, arg0, arg1)) cfgchanged = true; - else if (value_replacement (bb, bb1, e1, e2, phi, arg0, arg1)) - cfgchanged = true; else if (abs_replacement (bb, bb1, e1, e2, phi, arg0, arg1)) cfgchanged = true; else if (minmax_replacement (bb, bb1, e1, e2, phi, arg0, arg1)) @@ -624,12 +640,12 @@ jump_function_from_stmt (tree *arg, gimple stmt) } /* The function value_replacement does the main work of doing the value - replacement. Return true if the replacement is done. Otherwise return - false. + replacement. Return non-zero if the replacement is done. Otherwise return + 0. If we remove the middle basic block, return 2. BB is the basic block where the replacement is going to be done on. ARG0 is argument 0 from the PHI. Likewise for ARG1. */ -static bool +static int value_replacement (basic_block cond_bb, basic_block middle_bb, edge e0, edge e1, gimple phi, tree arg0, tree arg1) @@ -638,37 +654,36 @@ value_replacement (basic_block cond_bb, basic_block middle_bb, gimple cond; edge true_edge, false_edge; enum tree_code code; + bool emtpy_or_with_defined_p = true; /* If the type says honor signed zeros we cannot do this optimization. */ if (HONOR_SIGNED_ZEROS (TYPE_MODE (TREE_TYPE (arg1)))) - return false; + return 0; - /* Allow a single statement in MIDDLE_BB that defines one of the PHI - arguments. */ + /* If there is a statement in MIDDLE_BB that defines one of the PHI + arguments, then adjust arg0 or arg1. */ gsi = gsi_after_labels (middle_bb); - if (!gsi_end_p (gsi)) + if (!gsi_end_p (gsi) && is_gimple_debug (gsi_stmt (gsi))) + gsi_next_nondebug (&gsi); + while (!gsi_end_p (gsi)) { - if (is_gimple_debug (gsi_stmt (gsi))) - gsi_next_nondebug (&gsi); - if (!gsi_end_p (gsi)) + gimple stmt = gsi_stmt (gsi); + tree lhs; + gsi_next_nondebug (&gsi); + if (!is_gimple_assign (stmt)) { - gimple stmt = gsi_stmt (gsi); - tree lhs; - gsi_next_nondebug (&gsi); - if (!gsi_end_p (gsi)) - return false; - if (!is_gimple_assign (stmt)) - return false; - /* Now try to adjust arg0 or arg1 according to the computation - in the single statement. */ - lhs = gimple_assign_lhs (stmt); - if (!((lhs == arg0 - && jump_function_from_stmt (&arg0, stmt)) - || (lhs == arg1 - && jump_function_from_stmt (&arg1, stmt)))) - return false; + emtpy_or_with_defined_p = false; + continue; } + /* Now try to adjust arg0 or arg1 according to the computation + in the statement. */ + lhs = gimple_assign_lhs (stmt); + if (!(lhs == arg0 + && jump_function_from_stmt (&arg0, stmt)) + || (lhs == arg1 + && jump_function_from_stmt (&arg1, stmt))) + emtpy_or_with_defined_p = false; } cond = last_stmt (cond_bb); @@ -676,7 +691,7 @@ value_replacement (basic_block cond_bb, basic_block middle_bb, /* This transformation is only valid for equality comparisons. */ if (code != NE_EXPR && code != EQ_EXPR) - return false; + return 0; /* We need to know which is the true edge and which is the false edge so that we know if have abs or negative abs. */ @@ -720,12 +735,34 @@ value_replacement (basic_block cond_bb, basic_block middle_bb, else arg = arg1; - replace_phi_edge_with_variable (cond_bb, e1, phi, arg); + /* If the middle basic block was empty or is defining the + PHI arguments and this is a singleton phi then we can remove + the middle basic block. */ + if (emtpy_or_with_defined_p + && gimple_seq_singleton_p (phi_nodes (gimple_bb (phi)))) + { + replace_phi_edge_with_variable (cond_bb, e1, phi, arg); + /* Note that we optimized this PHI. */ + return 2; + } + else + { + /* Replace the PHI arguments with arg. */ + SET_PHI_ARG_DEF (phi, e0->dest_idx, arg); + SET_PHI_ARG_DEF (phi, e1->dest_idx, arg); + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "PHI "); + print_generic_expr (dump_file, gimple_phi_result (phi), 0); + fprintf (dump_file, " reduced for COND_EXPR in block %d to ", cond_bb->index); + print_generic_expr (dump_file, arg, 0); + fprintf (dump_file, ".\n"); + } + return 1; + } - /* Note that we optimized this PHI. */ - return true; } - return false; + return 0; } /* The function minmax_replacement does the main work of doing the minmax @@ -1122,9 +1159,10 @@ abs_replacement (basic_block cond_bb, basic_block middle_bb, same accesses. */ struct name_to_bb { - tree ssa_name; + unsigned int ssa_name_ver; + bool store; + HOST_WIDE_INT offset, size; basic_block bb; - unsigned store : 1; }; /* The hash table for remembering what we've seen. */ @@ -1133,23 +1171,26 @@ static htab_t seen_ssa_names; /* The set of MEM_REFs which can't trap. */ static struct pointer_set_t *nontrap_set; -/* The hash function, based on the pointer to the pointer SSA_NAME. */ +/* The hash function. */ static hashval_t name_to_bb_hash (const void *p) { - const_tree n = ((const struct name_to_bb *)p)->ssa_name; - return htab_hash_pointer (n) ^ ((const struct name_to_bb *)p)->store; + const struct name_to_bb *n = (const struct name_to_bb *) p; + return n->ssa_name_ver ^ (((hashval_t) n->store) << 31) + ^ (n->offset << 6) ^ (n->size << 3); } -/* The equality function of *P1 and *P2. SSA_NAMEs are shared, so - it's enough to simply compare them for equality. */ +/* The equality function of *P1 and *P2. */ static int name_to_bb_eq (const void *p1, const void *p2) { const struct name_to_bb *n1 = (const struct name_to_bb *)p1; const struct name_to_bb *n2 = (const struct name_to_bb *)p2; - return n1->ssa_name == n2->ssa_name && n1->store == n2->store; + return n1->ssa_name_ver == n2->ssa_name_ver + && n1->store == n2->store + && n1->offset == n2->offset + && n1->size == n2->size; } /* We see the expression EXP in basic block BB. If it's an interesting @@ -1161,8 +1202,12 @@ static void add_or_mark_expr (basic_block bb, tree exp, struct pointer_set_t *nontrap, bool store) { + HOST_WIDE_INT size; + if (TREE_CODE (exp) == MEM_REF - && TREE_CODE (TREE_OPERAND (exp, 0)) == SSA_NAME) + && TREE_CODE (TREE_OPERAND (exp, 0)) == SSA_NAME + && host_integerp (TREE_OPERAND (exp, 1), 0) + && (size = int_size_in_bytes (TREE_TYPE (exp))) > 0) { tree name = TREE_OPERAND (exp, 0); struct name_to_bb map; @@ -1172,9 +1217,12 @@ add_or_mark_expr (basic_block bb, tree exp, /* Try to find the last seen MEM_REF through the same SSA_NAME, which can trap. */ - map.ssa_name = name; + map.ssa_name_ver = SSA_NAME_VERSION (name); map.bb = 0; map.store = store; + map.offset = tree_low_cst (TREE_OPERAND (exp, 1), 0); + map.size = size; + slot = htab_find_slot (seen_ssa_names, &map, INSERT); n2bb = (struct name_to_bb *) *slot; if (n2bb) @@ -1197,9 +1245,11 @@ add_or_mark_expr (basic_block bb, tree exp, else { n2bb = XNEW (struct name_to_bb); - n2bb->ssa_name = name; + n2bb->ssa_name_ver = SSA_NAME_VERSION (name); n2bb->bb = bb; n2bb->store = store; + n2bb->offset = map.offset; + n2bb->size = size; *slot = n2bb; } } @@ -1219,13 +1269,10 @@ nt_init_block (struct dom_walk_data *data ATTRIBUTE_UNUSED, basic_block bb) { gimple stmt = gsi_stmt (gsi); - if (is_gimple_assign (stmt)) + if (gimple_assign_single_p (stmt)) { add_or_mark_expr (bb, gimple_assign_lhs (stmt), nontrap_set, true); add_or_mark_expr (bb, gimple_assign_rhs1 (stmt), nontrap_set, false); - if (get_gimple_rhs_num_ops (gimple_assign_rhs_code (stmt)) > 1) - add_or_mark_expr (bb, gimple_assign_rhs2 (stmt), nontrap_set, - false); } } } diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index fdebe477a3a..ddb1ba6640e 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -2462,11 +2462,11 @@ print_scc (FILE *out, VEC (tree, heap) *scc) tree var; unsigned int i; - fprintf (out, "SCC consists of: "); + fprintf (out, "SCC consists of:"); FOR_EACH_VEC_ELT (tree, scc, i, var) { - print_generic_expr (out, var, 0); fprintf (out, " "); + print_generic_expr (out, var, 0); } fprintf (out, "\n"); } diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index fb2c005e8b7..08f908f6a6c 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -925,8 +925,6 @@ verify_ssa (bool check_modified_stmt) gcc_assert (!need_ssa_update_p (cfun)); - verify_gimple_in_cfg (cfun); - timevar_push (TV_TREE_SSA_VERIFY); /* Keep track of SSA names present in the IL. */ diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index 43f7662e658..b458d624d64 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -1141,11 +1141,7 @@ vector_alignment_reachable_p (struct data_reference *dr) if (!known_alignment_for_access_p (dr)) { tree type = (TREE_TYPE (DR_REF (dr))); - tree ba = DR_BASE_OBJECT (dr); - bool is_packed = false; - - if (ba) - is_packed = contains_packed_reference (ba); + bool is_packed = contains_packed_reference (DR_REF (dr)); if (compare_tree_int (TYPE_SIZE (type), TYPE_ALIGN (type)) > 0) is_packed = true; @@ -2319,7 +2315,7 @@ vect_analyze_data_ref_access (struct data_reference *dr) stmt_vec_info stmt_info = vinfo_for_stmt (stmt); loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info); struct loop *loop = NULL; - HOST_WIDE_INT dr_step = TREE_INT_CST_LOW (step); + HOST_WIDE_INT dr_step; if (loop_vinfo) loop = LOOP_VINFO_LOOP (loop_vinfo); @@ -2332,6 +2328,7 @@ vect_analyze_data_ref_access (struct data_reference *dr) } /* Allow invariant loads in loops. */ + dr_step = TREE_INT_CST_LOW (step); if (loop_vinfo && dr_step == 0) { GROUP_FIRST_ELEMENT (vinfo_for_stmt (stmt)) = NULL; @@ -4671,12 +4668,7 @@ vect_supportable_dr_alignment (struct data_reference *dr, return dr_explicit_realign_optimized; } if (!known_alignment_for_access_p (dr)) - { - tree ba = DR_BASE_OBJECT (dr); - - if (ba) - is_packed = contains_packed_reference (ba); - } + is_packed = contains_packed_reference (DR_REF (dr)); if (targetm.vectorize. support_vector_misalignment (mode, type, @@ -4690,12 +4682,7 @@ vect_supportable_dr_alignment (struct data_reference *dr, tree type = (TREE_TYPE (DR_REF (dr))); if (!known_alignment_for_access_p (dr)) - { - tree ba = DR_BASE_OBJECT (dr); - - if (ba) - is_packed = contains_packed_reference (ba); - } + is_packed = contains_packed_reference (DR_REF (dr)); if (targetm.vectorize. support_vector_misalignment (mode, type, diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c index 70c4f89f6ed..8cf18250bf1 100644 --- a/gcc/tree-vect-loop-manip.c +++ b/gcc/tree-vect-loop-manip.c @@ -2058,9 +2058,7 @@ vect_gen_niters_for_prolog_loop (loop_vec_info loop_vinfo, tree loop_niters) ? size_int (-TYPE_VECTOR_SUBPARTS (vectype) + 1) : NULL_TREE; tree start_addr = vect_create_addr_base_for_vector_ref (dr_stmt, &new_stmts, offset, loop); - tree ptr_type = TREE_TYPE (start_addr); - tree size = TYPE_SIZE (ptr_type); - tree type = lang_hooks.types.type_for_size (tree_low_cst (size, 1), 1); + tree type = unsigned_type_for (TREE_TYPE (start_addr)); tree vectype_size_minus_1 = build_int_cst (type, vectype_align - 1); tree elem_size_log = build_int_cst (type, exact_log2 (vectype_align/nelements)); @@ -2278,7 +2276,6 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo, int mask = LOOP_VINFO_PTR_MASK (loop_vinfo); tree mask_cst; unsigned int i; - tree psize; tree int_ptrsize_type; char tmp_name[20]; tree or_tmp_name = NULL_TREE; @@ -2291,11 +2288,7 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo, all zeros followed by all ones. */ gcc_assert ((mask != 0) && ((mask & (mask+1)) == 0)); - /* CHECKME: what is the best integer or unsigned type to use to hold a - cast from a pointer value? */ - psize = TYPE_SIZE (ptr_type_node); - int_ptrsize_type - = lang_hooks.types.type_for_size (tree_low_cst (psize, 1), 0); + int_ptrsize_type = signed_type_for (ptr_type_node); /* Create expression (mask & (dr_1 || ... || dr_n)) where dr_i is the address of the first vector of the i'th data reference. */ diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index f21abb38bbf..d20fc9d522c 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -2709,9 +2709,8 @@ vect_transform_slp_perm_load (gimple stmt, VEC (tree, heap) *dr_chain, /* The generic VEC_PERM_EXPR code always uses an integral type of the same size as the vector element being permuted. */ - mask_element_type - = lang_hooks.types.type_for_size - (TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (vectype))), 1); + mask_element_type = lang_hooks.types.type_for_mode + (int_mode_for_mode (TYPE_MODE (TREE_TYPE (vectype))), 1); mask_type = get_vectype_for_scalar_type (mask_element_type); nunits = TYPE_VECTOR_SUBPARTS (vectype); mask = XALLOCAVEC (unsigned char, nunits); diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 20f10f37437..65a70fadcfb 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -3753,7 +3753,9 @@ vectorizable_store (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, if (!STMT_VINFO_DATA_REF (stmt_info)) return false; - if (tree_int_cst_compare (DR_STEP (dr), size_zero_node) < 0) + if (tree_int_cst_compare (loop && nested_in_vect_loop_p (loop, stmt) + ? STMT_VINFO_DR_STEP (stmt_info) : DR_STEP (dr), + size_zero_node) < 0) { if (vect_print_dump_info (REPORT_DETAILS)) fprintf (vect_dump, "negative step for store."); @@ -4097,9 +4099,8 @@ vect_gen_perm_mask (tree vectype, unsigned char *sel) if (!can_vec_perm_p (TYPE_MODE (vectype), false, sel)) return NULL; - mask_elt_type - = lang_hooks.types.type_for_size - (TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (vectype))), 1); + mask_elt_type = lang_hooks.types.type_for_mode + (int_mode_for_mode (TYPE_MODE (TREE_TYPE (vectype))), 1); mask_type = get_vectype_for_scalar_type (mask_elt_type); mask_vec = NULL; @@ -4266,7 +4267,10 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, if (!STMT_VINFO_DATA_REF (stmt_info)) return false; - negative = tree_int_cst_compare (DR_STEP (dr), size_zero_node) < 0; + negative = tree_int_cst_compare (nested_in_vect_loop + ? STMT_VINFO_DR_STEP (stmt_info) + : DR_STEP (dr), + size_zero_node) < 0; if (negative && ncopies > 1) { if (vect_print_dump_info (REPORT_DETAILS)) @@ -4653,7 +4657,7 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, This can only occur when vectorizing memory accesses in the inner-loop nested within an outer-loop that is being vectorized. */ - if (loop && nested_in_vect_loop_p (loop, stmt) + if (nested_in_vect_loop && (TREE_INT_CST_LOW (DR_STEP (dr)) % GET_MODE_SIZE (TYPE_MODE (vectype)) != 0)) { diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 4a018f73c17..d3922db038a 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -1,5 +1,5 @@ /* Support routines for Value Range Propagation (VRP). - Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 + Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. Contributed by Diego Novillo <dnovillo@redhat.com>. @@ -4462,6 +4462,93 @@ register_edge_assert_for_2 (tree name, edge e, gimple_stmt_iterator bsi, } } + /* Similarly add asserts for NAME == CST and NAME being defined as + NAME = NAME2 >> CST2. */ + if (TREE_CODE_CLASS (comp_code) == tcc_comparison + && TREE_CODE (val) == INTEGER_CST) + { + gimple def_stmt = SSA_NAME_DEF_STMT (name); + tree name2 = NULL_TREE, cst2 = NULL_TREE; + tree val2 = NULL_TREE; + unsigned HOST_WIDE_INT mask[2] = { 0, 0 }; + + /* Extract CST2 from the right shift. */ + if (is_gimple_assign (def_stmt) + && gimple_assign_rhs_code (def_stmt) == RSHIFT_EXPR) + { + name2 = gimple_assign_rhs1 (def_stmt); + cst2 = gimple_assign_rhs2 (def_stmt); + if (TREE_CODE (name2) == SSA_NAME + && host_integerp (cst2, 1) + && (unsigned HOST_WIDE_INT) tree_low_cst (cst2, 1) + < 2 * HOST_BITS_PER_WIDE_INT + && INTEGRAL_TYPE_P (TREE_TYPE (name2)) + && live_on_edge (e, name2) + && !has_single_use (name2)) + { + if ((unsigned HOST_WIDE_INT) tree_low_cst (cst2, 1) + < HOST_BITS_PER_WIDE_INT) + mask[0] = ((unsigned HOST_WIDE_INT) 1 + << tree_low_cst (cst2, 1)) - 1; + else + { + mask[1] = ((unsigned HOST_WIDE_INT) 1 + << (tree_low_cst (cst2, 1) + - HOST_BITS_PER_WIDE_INT)) - 1; + mask[0] = -1; + } + val2 = fold_binary (LSHIFT_EXPR, TREE_TYPE (val), val, cst2); + } + } + + if (val2 != NULL_TREE + && TREE_CODE (val2) == INTEGER_CST + && simple_cst_equal (fold_build2 (RSHIFT_EXPR, + TREE_TYPE (val), + val2, cst2), val)) + { + enum tree_code new_comp_code = comp_code; + tree tmp, new_val; + + tmp = name2; + if (comp_code == EQ_EXPR || comp_code == NE_EXPR) + { + if (!TYPE_UNSIGNED (TREE_TYPE (val))) + { + unsigned int prec = TYPE_PRECISION (TREE_TYPE (val)); + tree type = build_nonstandard_integer_type (prec, 1); + tmp = build1 (NOP_EXPR, type, name2); + val2 = fold_convert (type, val2); + } + tmp = fold_build2 (MINUS_EXPR, TREE_TYPE (tmp), tmp, val2); + new_val = build_int_cst_wide (TREE_TYPE (tmp), mask[0], mask[1]); + new_comp_code = comp_code == EQ_EXPR ? LE_EXPR : GT_EXPR; + } + else if (comp_code == LT_EXPR || comp_code == GE_EXPR) + new_val = val2; + else + { + new_val = build_int_cst_wide (TREE_TYPE (val2), + mask[0], mask[1]); + new_val = fold_binary (BIT_IOR_EXPR, TREE_TYPE (val2), + val2, new_val); + } + + if (dump_file) + { + fprintf (dump_file, "Adding assert for "); + print_generic_expr (dump_file, name2, 0); + fprintf (dump_file, " from "); + print_generic_expr (dump_file, tmp, 0); + fprintf (dump_file, "\n"); + } + + register_new_assert_for (name2, tmp, new_comp_code, new_val, + NULL, e, bsi); + retval = true; + } + } + return retval; } diff --git a/gcc/tree.c b/gcc/tree.c index fa01583a518..c5d10f99bdc 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -1714,12 +1714,25 @@ integer_zerop (const_tree expr) { STRIP_NOPS (expr); - return ((TREE_CODE (expr) == INTEGER_CST - && TREE_INT_CST_LOW (expr) == 0 - && TREE_INT_CST_HIGH (expr) == 0) - || (TREE_CODE (expr) == COMPLEX_CST - && integer_zerop (TREE_REALPART (expr)) - && integer_zerop (TREE_IMAGPART (expr)))); + switch (TREE_CODE (expr)) + { + case INTEGER_CST: + return (TREE_INT_CST_LOW (expr) == 0 + && TREE_INT_CST_HIGH (expr) == 0); + case COMPLEX_CST: + return (integer_zerop (TREE_REALPART (expr)) + && integer_zerop (TREE_IMAGPART (expr))); + case VECTOR_CST: + { + tree elt; + for (elt = TREE_VECTOR_CST_ELTS (expr); elt; elt = TREE_CHAIN (elt)) + if (!integer_zerop (TREE_VALUE (elt))) + return false; + return true; + } + default: + return false; + } } /* Return 1 if EXPR is the integer constant one or the corresponding @@ -1730,12 +1743,25 @@ integer_onep (const_tree expr) { STRIP_NOPS (expr); - return ((TREE_CODE (expr) == INTEGER_CST - && TREE_INT_CST_LOW (expr) == 1 - && TREE_INT_CST_HIGH (expr) == 0) - || (TREE_CODE (expr) == COMPLEX_CST - && integer_onep (TREE_REALPART (expr)) - && integer_zerop (TREE_IMAGPART (expr)))); + switch (TREE_CODE (expr)) + { + case INTEGER_CST: + return (TREE_INT_CST_LOW (expr) == 1 + && TREE_INT_CST_HIGH (expr) == 0); + case COMPLEX_CST: + return (integer_onep (TREE_REALPART (expr)) + && integer_zerop (TREE_IMAGPART (expr))); + case VECTOR_CST: + { + tree elt; + for (elt = TREE_VECTOR_CST_ELTS (expr); elt; elt = TREE_CHAIN (elt)) + if (!integer_onep (TREE_VALUE (elt))) + return false; + return true; + } + default: + return false; + } } /* Return 1 if EXPR is an integer containing all 1's in as much precision as @@ -1754,6 +1780,15 @@ integer_all_onesp (const_tree expr) && integer_zerop (TREE_IMAGPART (expr))) return 1; + else if (TREE_CODE (expr) == VECTOR_CST) + { + tree elt; + for (elt = TREE_VECTOR_CST_ELTS (expr); elt; elt = TREE_CHAIN (elt)) + if (!integer_all_onesp (TREE_VALUE (elt))) + return 0; + return 1; + } + else if (TREE_CODE (expr) != INTEGER_CST) return 0; @@ -11178,6 +11213,52 @@ tree_strip_sign_nop_conversions (tree exp) return exp; } +/* Avoid any floating point extensions from EXP. */ +tree +strip_float_extensions (tree exp) +{ + tree sub, expt, subt; + + /* For floating point constant look up the narrowest type that can hold + it properly and handle it like (type)(narrowest_type)constant. + This way we can optimize for instance a=a*2.0 where "a" is float + but 2.0 is double constant. */ + if (TREE_CODE (exp) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (TREE_TYPE (exp))) + { + REAL_VALUE_TYPE orig; + tree type = NULL; + + orig = TREE_REAL_CST (exp); + if (TYPE_PRECISION (TREE_TYPE (exp)) > TYPE_PRECISION (float_type_node) + && exact_real_truncate (TYPE_MODE (float_type_node), &orig)) + type = float_type_node; + else if (TYPE_PRECISION (TREE_TYPE (exp)) + > TYPE_PRECISION (double_type_node) + && exact_real_truncate (TYPE_MODE (double_type_node), &orig)) + type = double_type_node; + if (type) + return build_real (type, real_value_truncate (TYPE_MODE (type), orig)); + } + + if (!CONVERT_EXPR_P (exp)) + return exp; + + sub = TREE_OPERAND (exp, 0); + subt = TREE_TYPE (sub); + expt = TREE_TYPE (exp); + + if (!FLOAT_TYPE_P (subt)) + return exp; + + if (DECIMAL_FLOAT_TYPE_P (expt) != DECIMAL_FLOAT_TYPE_P (subt)) + return exp; + + if (TYPE_PRECISION (subt) > TYPE_PRECISION (expt)) + return exp; + + return strip_float_extensions (sub); +} + /* Strip out all handled components that produce invariant offsets. */ diff --git a/gcc/tree.h b/gcc/tree.h index 140f23ed29e..0a2d61982b8 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -2088,6 +2088,9 @@ struct GTY(()) tree_omp_clause { #define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin) #define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->block.abstract_flag) +/* True if BLOCK has the same ranges as its BLOCK_SUPERCONTEXT. */ +#define BLOCK_SAME_RANGE(NODE) (BLOCK_CHECK (NODE)->base.nameless_flag) + /* An index number for this block. These values are not guaranteed to be unique across functions -- whether or not they are depends on the debugging output format in use. */ diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index e9b5ca886ae..c6280e2c1f1 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -5334,6 +5334,10 @@ reverse_op (rtx val, const_rtx expr, rtx insn) if (!v || !cselib_preserved_value_p (v)) return; + /* Use canonical V to avoid creating multiple redundant expressions + for different VALUES equivalent to V. */ + v = canonical_cselib_val (v); + /* Adding a reverse op isn't useful if V already has an always valid location. Ignore ENTRY_VALUE, while it is always constant, we should prefer non-ENTRY_VALUE locations whenever possible. */ diff --git a/gcc/varasm.c b/gcc/varasm.c index 86134672cbe..79c81fa7991 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -7658,7 +7658,7 @@ get_elf_initfini_array_priority_section (int priority, sprintf (buf, "%s.%.5u", constructor_p ? ".init_array" : ".fini_array", priority); - sec = get_section (buf, SECTION_WRITE, NULL_TREE); + sec = get_section (buf, SECTION_WRITE | SECTION_NOTYPE, NULL_TREE); } else { @@ -7666,16 +7666,16 @@ get_elf_initfini_array_priority_section (int priority, { if (elf_init_array_section == NULL) elf_init_array_section - = get_unnamed_section (0, output_section_asm_op, - "\t.section\t.init_array"); + = get_section (".init_array", + SECTION_WRITE | SECTION_NOTYPE, NULL_TREE); sec = elf_init_array_section; } else { if (elf_fini_array_section == NULL) elf_fini_array_section - = get_unnamed_section (0, output_section_asm_op, - "\t.section\t.fini_array"); + = get_section (".fini_array", + SECTION_WRITE | SECTION_NOTYPE, NULL_TREE); sec = elf_fini_array_section; } } diff --git a/libada/ChangeLog b/libada/ChangeLog index 9a0db22cf8a..256ccccf016 100644 --- a/libada/ChangeLog +++ b/libada/ChangeLog @@ -1,3 +1,7 @@ +2012-02-24 Dave Korn <dave.korn.cygwin@gmail.com> + + * Makefile.in (bindir): Import from autoconf and pass down to submake. + 2012-01-22 Douglas B Rupp <rupp@gnat.com> * configure: Regenerate. diff --git a/libada/Makefile.in b/libada/Makefile.in index 5389dd005de..36cf5ad5e5a 100644 --- a/libada/Makefile.in +++ b/libada/Makefile.in @@ -33,6 +33,7 @@ MULTICLEAN = true SHELL = @SHELL@ srcdir = @srcdir@ libdir = @libdir@ +bindir = @bindir@ build = @build@ target = @target@ prefix = @prefix@ @@ -83,6 +84,7 @@ LIBADA_FLAGS_TO_PASS = \ "TRACE=$(TRACE)" \ "MULTISUBDIR=$(MULTISUBDIR)" \ "libsubdir=$(libsubdir)" \ + "bindir=$(bindir)" \ "objext=$(objext)" \ "prefix=$(prefix)" \ "exeext=.exeext.should.not.be.used " \ diff --git a/libffi/ChangeLog b/libffi/ChangeLog index 3b3167ae77b..bb5bc1625ce 100644 --- a/libffi/ChangeLog +++ b/libffi/ChangeLog @@ -1,20 +1,36 @@ -2012-02-13 Kai Tietz <ktietz@redhat.com> +2012-03-03 H.J. Lu <hongjiu.lu@intel.com> - PR libffi/52221 - * src/x86/ffi.c (ffi_prep_raw_closure_loc): Add thiscall - support for X86_WIN32. - (FFI_INIT_TRAMPOLINE_THISCALL): Fix displacement. + * src/x86/ffi64.c (ffi_call): Cast the return value to unsigned + long. + (ffi_prep_closure_loc): Cast to 64bit address in trampoline. + (ffi_closure_unix64_inner): Cast return pointer to unsigned long + first. -2012-02-11 Eric Botcazou <ebotcazou@adacore.com> + * src/x86/ffitarget.h (FFI_SIZEOF_ARG): Defined to 8 for x32. + (ffi_arg): Set to unsigned long long for x32. + (ffi_sarg): Set to long long for x32. - * src/sparc/v9.S (STACKFRAME): Bump to 176. +2012-03-03 H.J. Lu <hongjiu.lu@intel.com> + + * src/prep_cif.c (ffi_prep_cif_core): Properly check bad ABI. + +2012-03-03 Andoni Morales Alastruey <ylatuya@gmail.com> + + * configure.ac: Add -no-undefined for both 32- and 64-bit x86 + windows-like hosts. + * configure: Rebuilt. + +2012-02-23 Anthony Green <green@moxielogic.com> + + * src/*/ffitarget.h: Ensure that users never include ffitarget.h + directly. 2012-02-10 Kai Tietz <ktietz@redhat.com> * configure.ac (AM_LTLDFLAGS): Add -no-undefine for x64 windows target. * configure: Regenerated. - + 2012-02-08 Kai Tietz <ktietz@redhat.com> * src/prep_cif.c (ffi_prep_cif): Allow for X86_WIN32 @@ -46,6 +62,20 @@ * testsuite/libffi.call/struct1_win32.c: New test. * testsuite/libffi.call/struct2_win32.c: New test. +2012-01-23 Uros Bizjak <ubizjak@gmail.com> + + * src/alpha/ffi.c (ffi_prep_closure_loc): Check for bad ABI. + +2012-01-23 Anthony Green <green@moxielogic.com> + Chris Young <cdyoung@ntlworld.com> + + * configure.ac: Add Amiga support. + * configure: Rebuilt. + +2012-01-23 Dmitry Nadezhin <dmitry.nadezhin@gmail.com> + + * include/ffi_common.h (LIKELY, UNLIKELY): Fix definitions. + 2012-01-23 Andreas Schwab <schwab@linux-m68k.org> * src/m68k/sysv.S (ffi_call_SYSV): Properly test for plain @@ -70,6 +100,67 @@ * configure: Regenerate. +2011-11-12 David Gilbert <david.gilbert@linaro.org> + + * doc/libffi.texi, include/ffi.h.in, include/ffi_common.h, + man/Makefile.am, man/ffi.3, man/ffi_prep_cif.3, + man/ffi_prep_cif_var.3, src/arm/ffi.c, src/arm/ffitarget.h, + src/cris/ffi.c, src/prep_cif.c, + testsuite/libffi.call/cls_double_va.c, + testsuite/libffi.call/cls_longdouble_va.c, + testsuite/libffi.call/float_va.c: Many changes to support variadic + function calls. + +2011-11-12 Kyle Moffett <Kyle.D.Moffett@boeing.com> + + * src/powerpc/ffi.c, src/powerpc/ffitarget.h, + src/powerpc/ppc_closure.S, src/powerpc/sysv.S: Many changes for + softfloat powerpc variants. + +2011-11-12 Petr Salinger <Petr.Salinger@seznam.cz> + + * configure.ac (FFI_EXEC_TRAMPOLINE_TABLE): Fix kfreebsd support. + * configure: Rebuilt. + +2011-11-12 Timothy Wall <twall@users.sf.net> + + * src/arm/ffi.c (ffi_prep_args, ffi_prep_incoming_args_SYSV): Max + alignment of 4 for wince on ARM. + +2011-11-12 Kyle Moffett <Kyle.D.Moffett@boeing.com> + Anthony Green <green@moxielogic.com> + + * src/ppc/sysv.S, src/ppc/ffi.c: Remove use of ppc string + instructions (not available on some cores, like the PPC440). + +2011-11-12 Kimura Wataru <kimuraw@i.nifty.jp> + + * m4/ax_enable_builddir: Change from string comparison to numeric + comparison for wc output. + * configure.ac: Enable FFI_MMAP_EXEC_WRIT for darwin11 aka Mac OS + X 10.7. + * configure: Rebuilt. + +2011-11-12 Anthony Green <green@moxielogic.com> + + * Makefile.am (AM_CCASFLAGS): Add -g option to build assembly + files with debug info. + * Makefile.in: Rebuilt. + +2011-11-12 Jasper Lievisse Adriaanse <jasper@openbsd.org> + + * README: Update list of supported OpenBSD systems. + +2011-11-12 Anthony Green <green@moxielogic.com> + + * libtool-version: Update. + * Makefile.am (nodist_libffi_la_SOURCES): Add src/debug.c if + FFI_DEBUG. + (libffi_la_SOURCES): Remove src/debug.c + (EXTRA_DIST): Add src/debug.c + * Makefile.in: Rebuilt. + * README: Update for 3.0.11. + 2011-11-10 Richard Henderson <rth@redhat.com> * configure.ac (GCC_AS_CFI_PSEUDO_OP): Use it instead of inline check. @@ -118,10 +209,127 @@ Use them to handle ELF vs. ECOFF differences. [__osf__] (_GLOBAL__F_ffi_call_osf): Define. +2011-03-30 Timothy Wall <twall@users.sf.net> + + * src/powerpc/darwin.S: Fix unknown FDE encoding. + * src/powerpc/darwin_closure.S: ditto. + +2011-02-25 Anthony Green <green@moxielogic.com> + + * src/powerpc/ffi.c (ffi_prep_closure_loc): Allow for more + 32-bit ABIs. + +2011-02-15 Anthony Green <green@moxielogic.com> + + * m4/ax_cc_maxopt.m4: Don't -malign-double or use -ffast-math. + * configure: Rebuilt. + 2011-02-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> * configure: Regenerate. +2011-02-13 Anthony Green <green@moxielogic.com> + + * include/ffi_common.h (UNLIKELY, LIKELY): Define. + * src/x86/ffi64.c (UNLIKELY, LIKELY): Remove definition. + * src/prep_cif.c (UNLIKELY, LIKELY): Remove definition. + + * src/prep_cif.c (initialize_aggregate): Convert assertion into + FFI_BAD_TYPEDEF return. Initialize arg size and alignment to 0. + + * src/pa/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test, + just return FFI_BAD_ABI when things are wrong. + * src/arm/ffi.c (ffi_prep_closure_loc): Ditto. + * src/powerpc/ffi.c (ffi_prep_closure_loc): Ditto. + * src/mips/ffi.c (ffi_prep_closure_loc): Ditto. + * src/ia64/ffi.c (ffi_prep_closure_loc): Ditto. + * src/avr32/ffi.c (ffi_prep_closure_loc): Ditto. + +2011-02-11 Anthony Green <green@moxielogic.com> + + * src/sparc/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test, + just return FFI_BAD_ABI when things are wrong. + +2011-02-09 Stuart Shelton <srcshelton@gmail.com> + + http://bugs.gentoo.org/show_bug.cgi?id=286911 + * src/mips/ffitarget.h: Clean up error messages. + * src/java_raw_api.c (ffi_java_translate_args): Cast raw arg to + ffi_raw*. + * include/ffi.h.in: Add pragma for SGI compiler. + +2011-02-09 Anthony Green <green@moxielogic.com> + + * configure.ac: Add powerpc64-*-darwin* support. + +2011-02-09 Anthony Green <green@moxielogic.com> + + * README: Mention Interix. + +2011-02-09 Jonathan Callen <abcd@gentoo.org> + + * configure.ac: Add Interix to win32/cygwin/mingw case. + * configure: Ditto. + * src/closures.c: Treat Interix like Cygwin, instead of as a + generic win32. + +2011-02-09 Anthony Green <green@moxielogic.com> + + * testsuite/libffi.call/err_bad_typedef.c: Remove xfail. + * testsuite/libffi.call/err_bad_abi.c: Remove xfail. + * src/x86/ffi64.c (UNLIKELY, LIKELY): Define. + (ffi_prep_closure_loc): Check for bad ABI. + * src/prep_cif.c (UNLIKELY, LIKELY): Define. + (initialize_aggregate): Check for bad types. + +2011-02-09 Landon Fuller <landonf@plausible.coop> + + * Makefile.am (EXTRA_DIST): Add build-ios.sh, src/arm/gentramp.sh, + src/arm/trampoline.S. + (nodist_libffi_la_SOURCES): Add src/arc/trampoline.S. + * configure.ac (FFI_EXEC_TRAMPOLINE_TABLE): Define. + * src/arm/ffi.c (ffi_trampoline_table) + (ffi_closure_trampoline_table_page, ffi_trampoline_table_entry) + (FFI_TRAMPOLINE_CODELOC_CONFIG, FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET) + (FFI_TRAMPOLINE_COUNT, ffi_trampoline_lock, ffi_trampoline_tables) + (ffi_trampoline_table_alloc, ffi_closure_alloc, ffi_closure_free): + Define for FFI_EXEC_TRAMPOLINE_TABLE case (iOS). + (ffi_prep_closure_loc): Handl FFI_EXEC_TRAMPOLINE_TABLE case + separately. + * src/arm/sysv.S: Handle Apple iOS host. + * src/closures.c: Handle FFI_EXEC_TRAMPOLINE_TABLE case. + * build-ios.sh: New file. + * fficonfig.h.in, configure, Makefile.in: Rebuilt. + * README: Mention ARM iOS. + +2011-02-08 Oren Held <orenhe@il.ibm.com> + + * src/dlmalloc.c (_STRUCT_MALLINFO): Define in order to avoid + redefinition of mallinfo on HP-UX. + +2011-02-08 Ginn Chen <ginn.chen@oracle.com> + + * src/sparc/ffi.c (ffi_call): Make compatible with Solaris Studio + aggregate return ABI. Flush cache. + (ffi_prep_closure_loc): Flush cache. + +2011-02-11 Anthony Green <green@moxielogic.com> + + From Tom Honermann <tom.honermann@oracle.com>: + * src/powerpc/aix.S (ffi_call_AIX): Support for xlc toolchain on + AIX. Declare .ffi_prep_args. Insert nops after branch + instructions so that the AIX linker can insert TOC reload + instructions. + * src/powerpc/aix_closure.S: Declare .ffi_closure_helper_DARWIN. + +2011-02-08 Ed <ed@kdtc.net> + + * src/powerpc/asm.h: Fix grammar nit in comment. + +2011-02-08 Uli Link <ul.mcamafia@linkitup.de> + + * include/ffi.h.in (FFI_64_BIT_MAX): Define and use. + 2011-02-09 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> PR libffi/46661 @@ -129,6 +337,11 @@ uintptr_t first. * testsuite/libffi.call/cls_pointer_stack.c (main): Likewise. +2011-02-08 Rafael Avila de Espindola <respindola@mozilla.com> + + * configure.ac: Fix x86 test for pc related relocs. + * configure: Rebuilt. + 2011-02-07 Joel Sherrill <joel.sherrill@oarcorp.com> * libffi/src/m68k/ffi.c: Add RTEMS support for cache flushing. @@ -187,6 +400,13 @@ (.eh_frame): Use FDE_ENCODING. (.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE. +2010-11-22 Jacek Caban <jacek@codeweavers.com> + + * configure.ac: Check for symbol underscores on mingw-w64. + * configure: Rebuilt. + * src/x86/win64.S: Correctly access extern symbols in respect to + underscores. + 2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> * testsuite/lib/libffi-dg.exp: Rename ... @@ -254,6 +474,31 @@ * testsuite/libffi.call/cls_longdouble.c: Likewise. * testsuite/libffi.call/huge_struct.c: Likewise. +2010-08-05 Dan Witte <dwitte@mozilla.com> + + * Makefile.am: Pass FFI_DEBUG define to msvcc.sh for linking to the + debug CRT when --enable-debug is given. + * configure.ac: Define it. + * msvcc.sh: Translate -g and -DFFI_DEBUG appropriately. + +2010-08-04 Dan Witte <dwitte@mozilla.com> + + * src/x86/ffitarget.h: Add X86_ANY define for all x86/x86_64 + platforms. + * src/x86/ffi.c: Remove redundant ifdef checks. + * src/prep_cif.c: Push stack space computation into src/x86/ffi.c + for X86_ANY so return value space doesn't get added twice. + +2010-08-03 Neil Rashbrooke <neil@parkwaycc.co.uk> + + * msvcc.sh: Don't pass -safeseh to ml64 because behavior is buggy. + +2010-07-22 Dan Witte <dwitte@mozilla.com> + + * src/*/ffitarget.h: Make FFI_LAST_ABI one past the last valid ABI. + * src/prep_cif.c: Fix ABI assertion. + * src/cris/ffi.c: Ditto. + 2010-07-10 Evan Phoenix <evan@fallingsnow.net> * src/closures.c (selinux_enabled_check): Fix strncmp usage bug. @@ -285,6 +530,14 @@ * fficonfig.h.in: Regenerate. * src/x86/sysv.S (.eh_frame): Use .ascii, .string or error. +2010-05-11 Dan Witte <dwitte@mozilla.com> + + * doc/libffi.tex: Document previous change. + +2010-05-11 Makoto Kato <m_kato@ga2.so-net.ne.jp> + + * src/x86/ffi.c (ffi_call): Don't copy structs passed by value. + 2010-05-05 Michael Kohler <michaelkohler@live.com> * src/dlmalloc.c (dlfree): Fix spelling. @@ -320,6 +573,11 @@ * man/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. +2010-03-30 Dan Witte <dwitte@mozilla.com> + + * msvcc.sh: Disable build warnings. + * README (tested): Clarify windows build procedure. + 2010-03-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> * configure.ac (libffi_cv_as_x86_64_unwind_section_type): New test. @@ -694,6 +952,11 @@ * man/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. +2011-08-22 Jasper Lievisse Adriaanse <jasper@openbsd.org> + + * configure.ac: Add OpenBSD/hppa and OpenBSD/powerpc support. + * configure: Rebuilt. + 2009-07-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> * configure.ac (_AC_ARG_VAR_PRECIOUS): Use m4_rename_force. diff --git a/libffi/LICENSE b/libffi/LICENSE index f591795152d..aa60342dfcc 100644 --- a/libffi/LICENSE +++ b/libffi/LICENSE @@ -1,4 +1,5 @@ -libffi - Copyright (c) 1996-2003 Red Hat, Inc. +libffi - Copyright (c) 1996-2012 Anthony Green, Red Hat, Inc and others. +See source files for details. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -8,13 +9,13 @@ distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/libffi/Makefile.am b/libffi/Makefile.am index ccbefe64da6..23e002e9645 100644 --- a/libffi/Makefile.am +++ b/libffi/Makefile.am @@ -76,6 +76,9 @@ AM_MAKEFLAGS = \ "RANLIB=$(RANLIB)" \ "DESTDIR=$(DESTDIR)" +# Subdir rules rely on $(FLAGS_TO_PASS) +FLAGS_TO_PASS = $(AM_MAKEFLAGS) + MAKEOVERRIDES= toolexeclib_LTLIBRARIES = libffi.la diff --git a/libffi/Makefile.in b/libffi/Makefile.in index 3ac6d29b877..74ee5370131 100644 --- a/libffi/Makefile.in +++ b/libffi/Makefile.in @@ -455,6 +455,9 @@ AM_MAKEFLAGS = \ "RANLIB=$(RANLIB)" \ "DESTDIR=$(DESTDIR)" + +# Subdir rules rely on $(FLAGS_TO_PASS) +FLAGS_TO_PASS = $(AM_MAKEFLAGS) MAKEOVERRIDES = toolexeclib_LTLIBRARIES = libffi.la noinst_LTLIBRARIES = libffi_convenience.la diff --git a/libffi/README b/libffi/README index 3e3ab3fc950..1da4e89c736 100644 --- a/libffi/README +++ b/libffi/README @@ -1,10 +1,7 @@ -This directory contains the libffi package, which is not part of GCC but -shipped with GCC as convenience. - Status ====== -libffi-3.0.9 was released on December 31, 2009. Check the libffi web +libffi-3.0.11 was released on *****************. Check the libffi web page for updates: <URL:http://sourceware.org/libffi/>. @@ -46,7 +43,7 @@ Libffi has been ported to many different platforms. For specific configuration details and testing status, please refer to the wiki page here: - http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.9 + http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.11 At the time of release, the following basic configurations have been tested: @@ -55,13 +52,18 @@ tested: | Architecture | Operating System | |--------------+------------------| | Alpha | Linux | +| Alpha | Tru64 | | ARM | Linux | +| ARM | iOS | | AVR32 | Linux | | HPPA | HPUX | | IA-64 | Linux | +| M68K | RTEMS | | MIPS | IRIX | | MIPS | Linux | +| MIPS | RTEMS | | MIPS64 | Linux | +| PowerPC | AMIGA | | PowerPC | Linux | | PowerPC | Mac OSX | | PowerPC | FreeBSD | @@ -73,8 +75,10 @@ tested: | SPARC64 | Linux | | SPARC64 | FreeBSD | | X86 | FreeBSD | +| X86 | Interix | | X86 | kFreeBSD | | X86 | Linux | +| X86 | Linux/x32 | | X86 | Mac OSX | | X86 | OpenBSD | | X86 | OS/2 | @@ -84,6 +88,7 @@ tested: | X86-64 | FreeBSD | | X86-64 | Linux | | X86-64 | OpenBSD | +| X86-64 | Windows/MingW | |--------------+------------------| Please send additional platform test results to @@ -115,9 +120,15 @@ It's also possible to build libffi on Windows platforms with Microsoft's Visual C++ compiler. In this case, use the msvcc.sh wrapper script during configuration like so: -path/to/configure --enable-shared --enable-static \ - CC=path/to/msvcc.sh LD=link \ - CPP=\"cl -nologo -EP\" +path/to/configure CC=path/to/msvcc.sh LD=link CPP=\"cl -nologo -EP\" + +For 64-bit Windows builds, use CC="path/to/msvcc.sh -m64". +You may also need to specify --build appropriately. When building with MSVC +under a MingW environment, you may need to remove the line in configure +that sets 'fix_srcfile_path' to a 'cygpath' command. ('cygpath' is not +present in MingW, and is not required when using MingW-style paths.) + +For iOS builds, refer to the build-ios.sh script for guidance. Configure has many other options. Use "configure --help" to see them all. @@ -135,11 +146,27 @@ History See the ChangeLog files for details. -3.0.10 ???-??-?? +3.0.11 MMM-DD-YY + Lots of build fixes. + Add Amiga newer MacOS support. + Add Linux/x32 support. + Add thiscall and fastcall support on Windows. + Fix Octeon and MC68881 support. + Fix code pessimizations. + +3.0.10 Aug-23-11 + Add support for Apple's iOS. + Add support for ARM VFP ABI. + Add RTEMS support for MIPS and M68K. + Fix instruction cache clearing problems on + ARM and SPARC. Fix the N64 build on mips-sgi-irix6.5. - Testsuite fixes for Tru64 Unix. Enable builds with Microsoft's compiler. - Enable x86 builds with Sun's compiler. + Enable x86 builds with Oracle's Solaris compiler. + Fix support for calling code compiled with Oracle's Sparc + Solaris compiler. + Testsuite fixes for Tru64 Unix. + Additional platform support. 3.0.9 Dec-31-09 Add AVR32 and win64 ports. Add ARM softfp support. @@ -320,5 +347,6 @@ Alex Oliva solved the executable page problem for SElinux. The list above is almost certainly incomplete and inaccurate. I'm happy to make corrections or additions upon request. -If you have a problem, or have found a bug, please send a note to -green@redhat.com. +If you have a problem, or have found a bug, please send a note to the +author at green@moxielogic.com, or the project mailing list at +libffi-discuss@sourceware.org. diff --git a/libffi/build-ios.sh b/libffi/build-ios.sh new file mode 100755 index 00000000000..3dea242255e --- /dev/null +++ b/libffi/build-ios.sh @@ -0,0 +1,67 @@ +#!/bin/sh + +PLATFORM_IOS=/Developer/Platforms/iPhoneOS.platform/ +PLATFORM_IOS_SIM=/Developer/Platforms/iPhoneSimulator.platform/ +SDK_IOS_VERSION="4.2" +MIN_IOS_VERSION="3.0" +OUTPUT_DIR="universal-ios" + +build_target () { + local platform=$1 + local sdk=$2 + local arch=$3 + local triple=$4 + local builddir=$5 + + mkdir -p "${builddir}" + pushd "${builddir}" + export CC="${platform}"/Developer/usr/bin/gcc-4.2 + export CFLAGS="-arch ${arch} -isysroot ${sdk} -miphoneos-version-min=${MIN_IOS_VERSION}" + ../configure --host=${triple} && make + popd +} + +# Build all targets +build_target "${PLATFORM_IOS}" "${PLATFORM_IOS}/Developer/SDKs/iPhoneOS${SDK_IOS_VERSION}.sdk/" armv6 arm-apple-darwin10 armv6-ios +build_target "${PLATFORM_IOS}" "${PLATFORM_IOS}/Developer/SDKs/iPhoneOS${SDK_IOS_VERSION}.sdk/" armv7 arm-apple-darwin10 armv7-ios +build_target "${PLATFORM_IOS_SIM}" "${PLATFORM_IOS_SIM}/Developer/SDKs/iPhoneSimulator${SDK_IOS_VERSION}.sdk/" i386 i386-apple-darwin10 i386-ios-sim + +# Create universal output directories +mkdir -p "${OUTPUT_DIR}" +mkdir -p "${OUTPUT_DIR}/include" +mkdir -p "${OUTPUT_DIR}/include/armv6" +mkdir -p "${OUTPUT_DIR}/include/armv7" +mkdir -p "${OUTPUT_DIR}/include/i386" + +# Create the universal binary +lipo -create armv6-ios/.libs/libffi.a armv7-ios/.libs/libffi.a i386-ios-sim/.libs/libffi.a -output "${OUTPUT_DIR}/libffi.a" + +# Copy in the headers +copy_headers () { + local src=$1 + local dest=$2 + + # Fix non-relative header reference + sed 's/<ffitarget.h>/"ffitarget.h"/' < "${src}/include/ffi.h" > "${dest}/ffi.h" + cp "${src}/include/ffitarget.h" "${dest}" +} + +copy_headers armv6-ios "${OUTPUT_DIR}/include/armv6" +copy_headers armv7-ios "${OUTPUT_DIR}/include/armv7" +copy_headers i386-ios-sim "${OUTPUT_DIR}/include/i386" + +# Create top-level header +( +cat << EOF +#ifdef __arm__ + #include <arm/arch.h> + #ifdef _ARM_ARCH_6 + #include "include/armv6/ffi.h" + #elif _ARM_ARCH_7 + #include "include/armv7/ffi.h" + #endif +#elif defined(__i386__) + #include "include/i386/ffi.h" +#endif +EOF +) > "${OUTPUT_DIR}/ffi.h" diff --git a/libffi/doc/libffi.texi b/libffi/doc/libffi.texi index cbd78aa928f..f0e6517de16 100644 --- a/libffi/doc/libffi.texi +++ b/libffi/doc/libffi.texi @@ -19,7 +19,7 @@ This manual is for Libffi, a portable foreign-function interface library. -Copyright @copyright{} 2008, 2010 Red Hat, Inc. +Copyright @copyright{} 2008, 2010, 2011 Red Hat, Inc. @quotation Permission is granted to copy, distribute and/or modify this document @@ -133,8 +133,6 @@ This initializes @var{cif} according to the given parameters. you want. @ref{Multiple ABIs} for more information. @var{nargs} is the number of arguments that this function accepts. -@samp{libffi} does not yet handle varargs functions; see @ref{Missing -Features} for more information. @var{rtype} is a pointer to an @code{ffi_type} structure that describes the return type of the function. @xref{Types}. @@ -150,6 +148,30 @@ objects is incorrect; or @code{FFI_BAD_ABI} if the @var{abi} parameter is invalid. @end defun +If the function being called is variadic (varargs) then +@code{ffi_prep_cif_var} must be used instead of @code{ffi_prep_cif}. + +@findex ffi_prep_cif_var +@defun ffi_status ffi_prep_cif_var (ffi_cif *@var{cif}, ffi_abi var{abi}, unsigned int @var{nfixedargs}, unsigned int var{ntotalargs}, ffi_type *@var{rtype}, ffi_type **@var{argtypes}) +This initializes @var{cif} according to the given parameters for +a call to a variadic function. In general it's operation is the +same as for @code{ffi_prep_cif} except that: + +@var{nfixedargs} is the number of fixed arguments, prior to any +variadic arguments. It must be greater than zero. + +@var{ntotalargs} the total number of arguments, including variadic +and fixed arguments. + +Note that, different cif's must be prepped for calls to the same +function when different numbers of arguments are passed. + +Also note that a call to @code{ffi_prep_cif_var} with +@var{nfixedargs}=@var{nototalargs} is NOT equivalent to a call to +@code{ffi_prep_cif}. + +@end defun + To call a function using an initialized @code{ffi_cif}, use the @code{ffi_call} function: @@ -171,7 +193,9 @@ discarded. @var{avalues} is a vector of @code{void *} pointers that point to the memory locations holding the argument values for a call. If @var{cif} declares that the function has no arguments (i.e., @var{nargs} was 0), -then @var{avalues} is ignored. +then @var{avalues} is ignored. Note that argument values may be +modified by the callee (for instance, structs passed by value); the +burden of copying pass-by-value arguments is placed on the caller. @end defun @@ -570,9 +594,7 @@ support for these. @itemize @bullet @item -There is no support for calling varargs functions. This may work on -some platforms, depending on how the ABI is defined, but it is not -reliable. +Variadic closures. @item There is no support for bit fields in structures. @@ -589,6 +611,8 @@ The ``raw'' API is undocumented. @c anything else? @end itemize +Note that variadic support is very new and tested on a relatively +small number of platforms. @node Index @unnumbered Index diff --git a/libffi/fficonfig.h.in b/libffi/fficonfig.h.in index e012ebba84b..b54b273f957 100644 --- a/libffi/fficonfig.h.in +++ b/libffi/fficonfig.h.in @@ -17,6 +17,9 @@ /* Define this if you want extra debugging. */ #undef FFI_DEBUG +/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ +#undef FFI_EXEC_TRAMPOLINE_TABLE + /* Cannot use malloc on this target, so, we revert to alternative means */ #undef FFI_MMAP_EXEC_WRIT diff --git a/libffi/include/ffi.h.in b/libffi/include/ffi.h.in index 92e38c42f2d..84017f1f445 100644 --- a/libffi/include/ffi.h.in +++ b/libffi/include/ffi.h.in @@ -1,16 +1,17 @@ /* -----------------------------------------------------------------*-C-*- - libffi @VERSION@ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. + libffi @VERSION@ - Copyright (c) 2011 Anthony Green + - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - ``Software''), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the ``Software''), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF @@ -77,15 +78,31 @@ extern "C" { /* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). But we can find it either under the correct ANSI name, or under GNU C's internal name. */ + +#define FFI_64_BIT_MAX 9223372036854775807 + #ifdef LONG_LONG_MAX # define FFI_LONG_LONG_MAX LONG_LONG_MAX #else # ifdef LLONG_MAX # define FFI_LONG_LONG_MAX LLONG_MAX +# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ +# undef FFI_64_BIT_MAX +# define FFI_64_BIT_MAX 9223372036854775807LL +# endif /* _AIX52 or newer */ # else # ifdef __GNUC__ # define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ # endif +# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ +# ifndef __PPC64__ +# if defined (__IBMC__) || defined (__IBMCPP__) +# define FFI_LONG_LONG_MAX LONGLONG_MAX +# endif +# endif /* __PPC64__ */ +# undef FFI_64_BIT_MAX +# define FFI_64_BIT_MAX 9223372036854775807LL +# endif # endif #endif @@ -132,17 +149,17 @@ typedef struct _ffi_type #endif #if LONG_MAX == 2147483647 -# if FFI_LONG_LONG_MAX != 9223372036854775807 +# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX #error "no 64-bit data type supported" # endif -#elif LONG_MAX != 9223372036854775807 +#elif LONG_MAX != FFI_64_BIT_MAX #error "long size not supported" #endif #if LONG_MAX == 2147483647 # define ffi_type_ulong ffi_type_uint32 # define ffi_type_slong ffi_type_sint32 -#elif LONG_MAX == 9223372036854775807 +#elif LONG_MAX == FFI_64_BIT_MAX # define ffi_type_ulong ffi_type_uint64 # define ffi_type_slong ffi_type_sint64 #else @@ -190,12 +207,21 @@ typedef struct { #endif } ffi_cif; +/* Used internally, but overridden by some architectures */ +ffi_status ffi_prep_cif_core(ffi_cif *cif, + ffi_abi abi, + unsigned int isvariadic, + unsigned int nfixedargs, + unsigned int ntotalargs, + ffi_type *rtype, + ffi_type **atypes); + /* ---- Definitions for the raw API -------------------------------------- */ #ifndef FFI_SIZEOF_ARG # if LONG_MAX == 2147483647 # define FFI_SIZEOF_ARG 4 -# elif LONG_MAX == 9223372036854775807 +# elif LONG_MAX == FFI_64_BIT_MAX # define FFI_SIZEOF_ARG 8 # endif #endif @@ -265,6 +291,9 @@ typedef struct { } ffi_closure __attribute__((aligned (8))); #else } ffi_closure; +# ifdef __sgi +# pragma pack 0 +# endif #endif void *ffi_closure_alloc (size_t size, void **code); @@ -283,6 +312,9 @@ ffi_prep_closure_loc (ffi_closure*, void *user_data, void*codeloc); +#ifdef __sgi +# pragma pack 8 +#endif typedef struct { char tramp[FFI_TRAMPOLINE_SIZE]; @@ -361,6 +393,13 @@ ffi_status ffi_prep_cif(ffi_cif *cif, ffi_type *rtype, ffi_type **atypes); +ffi_status ffi_prep_cif_var(ffi_cif *cif, + ffi_abi abi, + unsigned int nfixedargs, + unsigned int ntotalargs, + ffi_type *rtype, + ffi_type **atypes); + void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, diff --git a/libffi/include/ffi_common.h b/libffi/include/ffi_common.h index 42cace91502..c179d68157b 100644 --- a/libffi/include/ffi_common.h +++ b/libffi/include/ffi_common.h @@ -1,7 +1,8 @@ /* ----------------------------------------------------------------------- - ffi_common.h - Copyright (c) 1996 Red Hat, Inc. - Copyright (C) 2007 Free Software Foundation, Inc - + ffi_common.h - Copyright (C) 2011, 2012 Anthony Green + Copyright (C) 2007 Free Software Foundation, Inc + Copyright (c) 1996 Red Hat, Inc. + Common internal definitions and macros. Only necessary for building libffi. ----------------------------------------------------------------------- */ @@ -74,6 +75,8 @@ void ffi_type_test(ffi_type *a, char *file, int line); /* Perform machine dependent cif processing */ ffi_status ffi_prep_cif_machdep(ffi_cif *cif); +ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, + unsigned int nfixedargs, unsigned int ntotalargs); /* Extended cif, used in callback from assembly routine */ typedef struct @@ -112,11 +115,14 @@ typedef signed int SINT64 __attribute__((__mode__(__DI__))); typedef float FLOAT32; +#ifndef __GNUC__ +#define __builtin_expect(x, expected_value) (x) +#endif +#define LIKELY(x) __builtin_expect(!!(x),1) +#define UNLIKELY(x) __builtin_expect((x)!=0,0) #ifdef __cplusplus } #endif #endif - - diff --git a/libffi/man/ffi.3 b/libffi/man/ffi.3 index 18b5d5d2d4a..1f1d3031c99 100644 --- a/libffi/man/ffi.3 +++ b/libffi/man/ffi.3 @@ -16,6 +16,15 @@ libffi, -lffi .Fa "ffi_type **atypes" .Fc .Ft void +.Fo ffi_prep_cif_var +.Fa "ffi_cif *cif" +.Fa "ffi_abi abi" +.Fa "unsigned int nfixedargs" +.Fa "unsigned int ntotalargs" +.Fa "ffi_type *rtype" +.Fa "ffi_type **atypes" +.Fc +.Ft void .Fo ffi_call .Fa "ffi_cif *cif" .Fa "void (*fn)(void)" @@ -28,4 +37,5 @@ generate a call to another function at runtime without requiring knowledge of the called function's interface at compile time. .Sh SEE ALSO .Xr ffi_prep_cif 3 , +.Xr ffi_prep_cif_var 3 , .Xr ffi_call 3 diff --git a/libffi/man/ffi_prep_cif.3 b/libffi/man/ffi_prep_cif.3 index 9436b31191e..e1bdbd7c46a 100644 --- a/libffi/man/ffi_prep_cif.3 +++ b/libffi/man/ffi_prep_cif.3 @@ -37,7 +37,9 @@ structs that describe the data type, size and alignment of each argument. points to an .Nm ffi_type that describes the data type, size and alignment of the -return value. +return value. Note that to call a variadic function +.Nm ffi_prep_cif_var +must be used instead. .Sh RETURN VALUES Upon successful completion, .Nm ffi_prep_cif @@ -63,4 +65,6 @@ defined in . .Sh SEE ALSO .Xr ffi 3 , -.Xr ffi_call 3 +.Xr ffi_call 3 , +.Xr ffi_prep_cif_var 3 + diff --git a/libffi/man/ffi_prep_cif_var.3 b/libffi/man/ffi_prep_cif_var.3 new file mode 100644 index 00000000000..7e19d0b070f --- /dev/null +++ b/libffi/man/ffi_prep_cif_var.3 @@ -0,0 +1,73 @@ +.Dd January 25, 2011 +.Dt ffi_prep_cif_var 3 +.Sh NAME +.Nm ffi_prep_cif_var +.Nd Prepare a +.Nm ffi_cif +structure for use with +.Nm ffi_call +for variadic functions. +.Sh SYNOPSIS +.In ffi.h +.Ft ffi_status +.Fo ffi_prep_cif_var +.Fa "ffi_cif *cif" +.Fa "ffi_abi abi" +.Fa "unsigned int nfixedargs" +.Fa "unsigned int ntotalargs" +.Fa "ffi_type *rtype" +.Fa "ffi_type **atypes" +.Fc +.Sh DESCRIPTION +The +.Nm ffi_prep_cif_var +function prepares a +.Nm ffi_cif +structure for use with +.Nm ffi_call +for variadic functions. +.Fa abi +specifies a set of calling conventions to use. +.Fa atypes +is an array of +.Fa ntotalargs +pointers to +.Nm ffi_type +structs that describe the data type, size and alignment of each argument. +.Fa rtype +points to an +.Nm ffi_type +that describes the data type, size and alignment of the +return value. +.Fa nfixedargs +must contain the number of fixed (non-variadic) arguments. +Note that to call a non-variadic function +.Nm ffi_prep_cif +must be used. +.Sh RETURN VALUES +Upon successful completion, +.Nm ffi_prep_cif_var +returns +.Nm FFI_OK . +It will return +.Nm FFI_BAD_TYPEDEF +if +.Fa cif +is +.Nm NULL +or +.Fa atypes +or +.Fa rtype +is malformed. If +.Fa abi +does not refer to a valid ABI, +.Nm FFI_BAD_ABI +will be returned. Available ABIs are +defined in +.Nm <ffitarget.h> +. +.Sh SEE ALSO +.Xr ffi 3 , +.Xr ffi_call 3 , +.Xr ffi_prep_cif 3 diff --git a/libffi/msvcc.sh b/libffi/msvcc.sh index 551c73d9655..dcdbeab16ae 100755 --- a/libffi/msvcc.sh +++ b/libffi/msvcc.sh @@ -42,10 +42,11 @@ # format and translated into something sensible for cl or ml. # -args="-nologo" +args="-nologo -W3" md=-MD cl="cl" ml="ml" +safeseh="-safeseh" output= while [ $# -gt 0 ] @@ -63,15 +64,28 @@ do -m64) cl="cl" # "$MSVC/x86_amd64/cl" ml="ml64" # "$MSVC/x86_amd64/ml64" + safeseh= + shift 1 + ;; + -O0) + args="$args -Od" shift 1 ;; -O*) - args="$args $1" + # If we're optimizing, make sure we explicitly turn on some optimizations + # that are implicitly disabled by debug symbols (-Zi). + args="$args $1 -OPT:REF -OPT:ICF -INCREMENTAL:NO" shift 1 ;; -g) - # Can't specify -RTC1 or -Zi in opt. -Gy is ok. Use -OPT:REF? - args="$args -D_DEBUG -RTC1 -Zi" + # Enable debug symbol generation. + args="$args -Zi -DEBUG" + shift 1 + ;; + -DFFI_DEBUG) + # Link against debug CRT and enable runtime error checks. + args="$args -RTC1" + defines="$defines $1" md=-MDd shift 1 ;; @@ -108,8 +122,8 @@ do shift 1 ;; -Wall) - # -Wall on MSVC is overzealous. Use -W3 instead. - args="$args -W3" + # -Wall on MSVC is overzealous, and we already build with -W3. Nothing + # to do here. shift 1 ;; -Werror) @@ -164,7 +178,7 @@ if [ -n "$assembly" ]; then echo "$cl -nologo -EP $includes $defines $src > $ppsrc" "$cl" -nologo -EP $includes $defines $src > $ppsrc || exit $? output="$(echo $output | sed 's%/F[dpa][^ ]*%%g')" - args="-nologo -safeseh $single $output $ppsrc" + args="-nologo $safeseh $single $output $ppsrc" echo "$ml $args" eval "\"$ml\" $args" diff --git a/libffi/src/alpha/ffi.c b/libffi/src/alpha/ffi.c index 8d6b2ba279e..192f691c4a2 100644 --- a/libffi/src/alpha/ffi.c +++ b/libffi/src/alpha/ffi.c @@ -1,5 +1,6 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 1998, 2001, 2007, 2008 Red Hat, Inc. + ffi.c - Copyright (c) 2012 Anthony Green + Copyright (c) 1998, 2001, 2007, 2008 Red Hat, Inc. Alpha Foreign Function Interface @@ -178,6 +179,9 @@ ffi_prep_closure_loc (ffi_closure* closure, { unsigned int *tramp; + if (cif->abi != FFI_OSF) + return FFI_BAD_ABI; + tramp = (unsigned int *) &closure->tramp[0]; tramp[0] = 0x47fb0401; /* mov $27,$1 */ tramp[1] = 0xa77b0010; /* ldq $27,16($27) */ diff --git a/libffi/src/alpha/ffitarget.h b/libffi/src/alpha/ffitarget.h index 7d06eb0bc22..af145bce839 100644 --- a/libffi/src/alpha/ffitarget.h +++ b/libffi/src/alpha/ffitarget.h @@ -1,5 +1,6 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 1996-2003 Red Hat, Inc. Target configuration macros for Alpha. Permission is hereby granted, free of charge, to any person obtaining @@ -27,6 +28,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + #ifndef LIBFFI_ASM typedef unsigned long ffi_arg; typedef signed long ffi_sarg; diff --git a/libffi/src/arm/ffi.c b/libffi/src/arm/ffi.c index d5260333637..1f8597da88c 100644 --- a/libffi/src/arm/ffi.c +++ b/libffi/src/arm/ffi.c @@ -1,6 +1,10 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 1998, 2008 Red Hat, Inc. - + ffi.c - Copyright (c) 2011 Timothy Wall + Copyright (c) 2011 Plausible Labs Cooperative, Inc. + Copyright (c) 2011 Anthony Green + Copyright (c) 2011 Free Software Foundation + Copyright (c) 1998, 2008, 2011 Red Hat, Inc. + ARM Foreign Function Interface Permission is hereby granted, free of charge, to any person obtaining @@ -61,6 +65,7 @@ int ffi_prep_args(char *stack, extended_cif *ecif, float *vfp_space) i--, p_arg++) { size_t z; + size_t alignment; /* Allocated in VFP registers. */ if (ecif->cif->abi == FFI_VFP @@ -78,8 +83,13 @@ int ffi_prep_args(char *stack, extended_cif *ecif, float *vfp_space) } /* Align if necessary */ - if (((*p_arg)->alignment - 1) & (unsigned) argp) { - argp = (char *) ALIGN(argp, (*p_arg)->alignment); + alignment = (*p_arg)->alignment; +#ifdef _WIN32_WCE + if (alignment > 4) + alignment = 4; +#endif + if ((alignment - 1) & (unsigned) argp) { + argp = (char *) ALIGN(argp, alignment); } if ((*p_arg)->type == FFI_TYPE_STRUCT) @@ -186,6 +196,18 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif) return FFI_OK; } +/* Perform machine dependent cif processing for variadic calls */ +ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, + unsigned int nfixedargs, + unsigned int ntotalargs) +{ + /* VFP variadic calls actually use the SYSV ABI */ + if (cif->abi == FFI_VFP) + cif->abi = FFI_SYSV; + + return ffi_prep_cif_machdep(cif); +} + /* Prototypes for assembly functions, in sysv.S */ extern void ffi_call_SYSV (void (*fn)(void), extended_cif *, unsigned, unsigned, unsigned *); extern void ffi_call_VFP (void (*fn)(void), extended_cif *, unsigned, unsigned, unsigned *); @@ -317,6 +339,11 @@ ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, alignment = (*p_arg)->alignment; if (alignment < 4) alignment = 4; +#ifdef _WIN32_WCE + else + if (alignment > 4) + alignment = 4; +#endif /* Align if necessary */ if ((alignment - 1) & (unsigned) argp) { argp = (char *) ALIGN(argp, alignment); @@ -339,6 +366,220 @@ ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, extern unsigned int ffi_arm_trampoline[3]; +#if FFI_EXEC_TRAMPOLINE_TABLE + +#include <mach/mach.h> +#include <pthread.h> +#include <stdio.h> +#include <stdlib.h> + +extern void *ffi_closure_trampoline_table_page; + +typedef struct ffi_trampoline_table ffi_trampoline_table; +typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry; + +struct ffi_trampoline_table { + /* contigious writable and executable pages */ + vm_address_t config_page; + vm_address_t trampoline_page; + + /* free list tracking */ + uint16_t free_count; + ffi_trampoline_table_entry *free_list; + ffi_trampoline_table_entry *free_list_pool; + + ffi_trampoline_table *prev; + ffi_trampoline_table *next; +}; + +struct ffi_trampoline_table_entry { + void *(*trampoline)(); + ffi_trampoline_table_entry *next; +}; + +/* Override the standard architecture trampoline size */ +// XXX TODO - Fix +#undef FFI_TRAMPOLINE_SIZE +#define FFI_TRAMPOLINE_SIZE 12 + +/* The trampoline configuration is placed at 4080 bytes prior to the trampoline's entry point */ +#define FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc) ((void **) (((uint8_t *) codeloc) - 4080)); + +/* The first 16 bytes of the config page are unused, as they are unaddressable from the trampoline page. */ +#define FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET 16 + +/* Total number of trampolines that fit in one trampoline table */ +#define FFI_TRAMPOLINE_COUNT ((PAGE_SIZE - FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET) / FFI_TRAMPOLINE_SIZE) + +static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER; +static ffi_trampoline_table *ffi_trampoline_tables = NULL; + +static ffi_trampoline_table * +ffi_trampoline_table_alloc () +{ + ffi_trampoline_table *table = NULL; + + /* Loop until we can allocate two contigious pages */ + while (table == NULL) { + vm_address_t config_page = 0x0; + kern_return_t kt; + + /* Try to allocate two pages */ + kt = vm_allocate (mach_task_self (), &config_page, PAGE_SIZE*2, VM_FLAGS_ANYWHERE); + if (kt != KERN_SUCCESS) { + fprintf(stderr, "vm_allocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); + break; + } + + /* Now drop the second half of the allocation to make room for the trampoline table */ + vm_address_t trampoline_page = config_page+PAGE_SIZE; + kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_SIZE); + if (kt != KERN_SUCCESS) { + fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); + break; + } + + /* Remap the trampoline table to directly follow the config page */ + vm_prot_t cur_prot; + vm_prot_t max_prot; + + kt = vm_remap (mach_task_self (), &trampoline_page, PAGE_SIZE, 0x0, FALSE, mach_task_self (), (vm_address_t) &ffi_closure_trampoline_table_page, FALSE, &cur_prot, &max_prot, VM_INHERIT_SHARE); + + /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */ + if (kt != KERN_SUCCESS) { + /* Log unexpected failures */ + if (kt != KERN_NO_SPACE) { + fprintf(stderr, "vm_remap() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); + } + + vm_deallocate (mach_task_self (), config_page, PAGE_SIZE); + continue; + } + + /* We have valid trampoline and config pages */ + table = calloc (1, sizeof(ffi_trampoline_table)); + table->free_count = FFI_TRAMPOLINE_COUNT; + table->config_page = config_page; + table->trampoline_page = trampoline_page; + + /* Create and initialize the free list */ + table->free_list_pool = calloc(FFI_TRAMPOLINE_COUNT, sizeof(ffi_trampoline_table_entry)); + + uint16_t i; + for (i = 0; i < table->free_count; i++) { + ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; + entry->trampoline = (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); + + if (i < table->free_count - 1) + entry->next = &table->free_list_pool[i+1]; + } + + table->free_list = table->free_list_pool; + } + + return table; +} + +void * +ffi_closure_alloc (size_t size, void **code) +{ + /* Create the closure */ + ffi_closure *closure = malloc(size); + if (closure == NULL) + return NULL; + + pthread_mutex_lock(&ffi_trampoline_lock); + + /* Check for an active trampoline table with available entries. */ + ffi_trampoline_table *table = ffi_trampoline_tables; + if (table == NULL || table->free_list == NULL) { + table = ffi_trampoline_table_alloc (); + if (table == NULL) { + free(closure); + return NULL; + } + + /* Insert the new table at the top of the list */ + table->next = ffi_trampoline_tables; + if (table->next != NULL) + table->next->prev = table; + + ffi_trampoline_tables = table; + } + + /* Claim the free entry */ + ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list; + ffi_trampoline_tables->free_list = entry->next; + ffi_trampoline_tables->free_count--; + entry->next = NULL; + + pthread_mutex_unlock(&ffi_trampoline_lock); + + /* Initialize the return values */ + *code = entry->trampoline; + closure->trampoline_table = table; + closure->trampoline_table_entry = entry; + + return closure; +} + +void +ffi_closure_free (void *ptr) +{ + ffi_closure *closure = ptr; + + pthread_mutex_lock(&ffi_trampoline_lock); + + /* Fetch the table and entry references */ + ffi_trampoline_table *table = closure->trampoline_table; + ffi_trampoline_table_entry *entry = closure->trampoline_table_entry; + + /* Return the entry to the free list */ + entry->next = table->free_list; + table->free_list = entry; + table->free_count++; + + /* If all trampolines within this table are free, and at least one other table exists, deallocate + * the table */ + if (table->free_count == FFI_TRAMPOLINE_COUNT && ffi_trampoline_tables != table) { + /* Remove from the list */ + if (table->prev != NULL) + table->prev->next = table->next; + + if (table->next != NULL) + table->next->prev = table->prev; + + /* Deallocate pages */ + kern_return_t kt; + kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE); + if (kt != KERN_SUCCESS) + fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); + + kt = vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE); + if (kt != KERN_SUCCESS) + fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); + + /* Deallocate free list */ + free (table->free_list_pool); + free (table); + } else if (ffi_trampoline_tables != table) { + /* Otherwise, bump this table to the top of the list */ + table->prev = NULL; + table->next = ffi_trampoline_tables; + if (ffi_trampoline_tables != NULL) + ffi_trampoline_tables->prev = table; + + ffi_trampoline_tables = table; + } + + pthread_mutex_unlock (&ffi_trampoline_lock); + + /* Free the closure */ + free (closure); +} + +#else + #define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ ({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ unsigned int __fun = (unsigned int)(FUN); \ @@ -353,6 +594,7 @@ extern unsigned int ffi_arm_trampoline[3]; mapping. */ \ }) +#endif /* the cif must already be prep'ed */ @@ -370,12 +612,18 @@ ffi_prep_closure_loc (ffi_closure* closure, else if (cif->abi == FFI_VFP) closure_func = &ffi_closure_VFP; else - FFI_ASSERT (0); + return FFI_BAD_ABI; +#if FFI_EXEC_TRAMPOLINE_TABLE + void **config = FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc); + config[0] = closure; + config[1] = closure_func; +#else FFI_INIT_TRAMPOLINE (&closure->tramp[0], \ closure_func, \ codeloc); - +#endif + closure->cif = cif; closure->user_data = user_data; closure->fun = fun; diff --git a/libffi/src/arm/ffitarget.h b/libffi/src/arm/ffitarget.h index ce25b23f5a3..26d494d616a 100644 --- a/libffi/src/arm/ffitarget.h +++ b/libffi/src/arm/ffitarget.h @@ -1,6 +1,7 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Copyright (c) 2010 CodeSourcery + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 2010 CodeSourcery + Copyright (c) 1996-2003 Red Hat, Inc. Target configuration macros for ARM. @@ -29,6 +30,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + #ifndef LIBFFI_ASM typedef unsigned long ffi_arg; typedef signed long ffi_sarg; @@ -55,6 +60,8 @@ typedef enum ffi_abi { #define FFI_TYPE_STRUCT_VFP_FLOAT (FFI_TYPE_LAST + 1) #define FFI_TYPE_STRUCT_VFP_DOUBLE (FFI_TYPE_LAST + 2) +#define FFI_TARGET_SPECIFIC_VARIADIC + /* ---- Definitions for closures ----------------------------------------- */ #define FFI_CLOSURES 1 @@ -62,4 +69,3 @@ typedef enum ffi_abi { #define FFI_NATIVE_RAW_API 0 #endif - diff --git a/libffi/src/arm/gentramp.sh b/libffi/src/arm/gentramp.sh new file mode 100755 index 00000000000..74f0b867dae --- /dev/null +++ b/libffi/src/arm/gentramp.sh @@ -0,0 +1,118 @@ +#!/bin/sh + +# ----------------------------------------------------------------------- +# gentramp.sh - Copyright (c) 2010, Plausible Labs Cooperative, Inc. +# +# ARM Trampoline Page Generator +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# ``Software''), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# ----------------------------------------------------------------------- + +PROGNAME=$0 + +# Each trampoline is exactly 3 instructions, or 12 bytes. If any of these values change, +# the entire arm trampoline implementation must be updated to match, too. + +# Size of an individual trampoline, in bytes +TRAMPOLINE_SIZE=12 + +# Page size, in bytes +PAGE_SIZE=4096 + +# Compute the size of the reachable config page; The first 16 bytes of the config page +# are unreachable due to our maximum pc-relative ldr offset. +PAGE_AVAIL=`expr $PAGE_SIZE - 16` + +# Compute the number of of available trampolines. +TRAMPOLINE_COUNT=`expr $PAGE_AVAIL / $TRAMPOLINE_SIZE` + +header () { + echo "# GENERATED CODE - DO NOT EDIT" + echo "# This file was generated by $PROGNAME" + echo "" + + # Write out the license header +cat << EOF +# Copyright (c) 2010, Plausible Labs Cooperative, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# ``Software''), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# ----------------------------------------------------------------------- + +EOF + + # Write out the trampoline table, aligned to the page boundary + echo ".text" + echo ".align 12" + echo ".globl _ffi_closure_trampoline_table_page" + echo "_ffi_closure_trampoline_table_page:" +} + + +# WARNING - Don't modify the trampoline code size without also updating the relevent libffi code +trampoline () { + cat << END + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + +END +} + +main () { + # Write out the header + header + + # Write out the trampolines + local i=0 + while [ $i -lt ${TRAMPOLINE_COUNT} ]; do + trampoline + local i=`expr $i + 1` + done +} + +main diff --git a/libffi/src/arm/sysv.S b/libffi/src/arm/sysv.S index be6493a25b1..60e2ae3d552 100644 --- a/libffi/src/arm/sysv.S +++ b/libffi/src/arm/sysv.S @@ -1,5 +1,6 @@ /* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 1998, 2008 Red Hat, Inc. + sysv.S - Copyright (c) 1998, 2008, 2011 Red Hat, Inc. + Copyright (c) 2011 Plausible Labs Cooperative, Inc. ARM Foreign Function Interface @@ -39,7 +40,11 @@ #else #define CNAME(x) x #endif +#ifdef __APPLE__ +#define ENTRY(x) .globl CNAME(x); CNAME(x): +#else #define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x): +#endif /* __APPLE__ */ #endif #ifdef __ELF__ @@ -48,6 +53,12 @@ #define LSYM(x) x #endif +/* Use the SOFTFP return value ABI on Mac OS X, as per the iOS ABI + Function Call Guide */ +#ifdef __APPLE__ +#define __SOFTFP__ +#endif + /* We need a better way of testing for this, but for now, this is all we can do. */ @ This selects the minimum architecture level required. @@ -105,21 +116,33 @@ .align 0 .thumb .thumb_func +#ifdef __APPLE__ + ENTRY($0) +#else ENTRY(\name) +#endif bx pc nop .arm UNWIND .fnstart /* A hook to tell gdb that we've switched to ARM mode. Also used to call directly from other local arm routines. */ -_L__\name: +#ifdef __APPLE__ +_L__$0: +#else +_L__\name: +#endif .endm #else .macro ARM_FUNC_START name .text .align 0 .arm +#ifdef __APPLE__ + ENTRY($0) +#else ENTRY(\name) +#endif UNWIND .fnstart .endm #endif @@ -141,8 +164,7 @@ _L__\name: #endif .endm - - @ r0: fn + @ r0: ffi_prep_args @ r1: &ecif @ r2: cif->bytes @ r3: fig->flags @@ -222,11 +244,18 @@ ARM_FUNC_START ffi_call_SYSV #endif LSYM(Lepilogue): - RETLDM "r0-r3,fp" +#if defined (__INTERWORKING__) + ldmia sp!, {r0-r3,fp, lr} + bx lr +#else + ldmia sp!, {r0-r3,fp, pc} +#endif .ffi_call_SYSV_end: UNWIND .fnend +#ifdef __ELF__ .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) +#endif /* @@ -247,7 +276,7 @@ ARM_FUNC_START ffi_closure_SYSV sub sp, sp, #16 str sp, [sp, #8] add r1, sp, #8 - bl ffi_closure_SYSV_inner + bl CNAME(ffi_closure_SYSV_inner) cmp r0, #FFI_TYPE_INT beq .Lretint @@ -299,7 +328,9 @@ ARM_FUNC_START ffi_closure_SYSV .ffi_closure_SYSV_end: UNWIND .fnend +#ifdef __ELF__ .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) +#endif /* Below are VFP hard-float ABI call and closure implementations. @@ -371,7 +402,7 @@ LSYM(Lbase_args): @ assume no return value. cmp r2, #0 beq LSYM(Lepilogue_vfp) - + cmp r3, #FFI_TYPE_INT streq r0, [r2] beq LSYM(Lepilogue_vfp) diff --git a/libffi/src/arm/trampoline.S b/libffi/src/arm/trampoline.S new file mode 100644 index 00000000000..7b474291a25 --- /dev/null +++ b/libffi/src/arm/trampoline.S @@ -0,0 +1,4450 @@ +# GENERATED CODE - DO NOT EDIT +# This file was generated by ./gentramp.sh + +# Copyright (c) 2010, Plausible Labs Cooperative, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# Software''), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED AS IS'', WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# ----------------------------------------------------------------------- + +.text +.align 12 +.globl _ffi_closure_trampoline_table_page +_ffi_closure_trampoline_table_page: + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + + + // trampoline + // Save to stack + stmfd sp!, {r0-r3} + + // Load the context argument from the config page. + // This places the first usable config value at _ffi_closure_trampoline_table-4080 + // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. + ldr r0, [pc, #-4092] + + // Load the jump address from the config page. + ldr pc, [pc, #-4092] + diff --git a/libffi/src/avr32/ffi.c b/libffi/src/avr32/ffi.c index 39fba2b03b6..3d43397b03a 100644 --- a/libffi/src/avr32/ffi.c +++ b/libffi/src/avr32/ffi.c @@ -1,5 +1,6 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2009 Bradley Smith <brad@brad-smith.co.uk> + ffi.c - Copyright (c) 2011 Anthony Green + Copyright (c) 2009 Bradley Smith <brad@brad-smith.co.uk> AVR32 Foreign Function Interface @@ -394,7 +395,8 @@ ffi_status ffi_prep_closure_loc(ffi_closure* closure, ffi_cif* cif, void (*fun)(ffi_cif*, void*, void**, void*), void *user_data, void *codeloc) { - FFI_ASSERT(cif->abi == FFI_SYSV); + if (cif->abi != FFI_SYSV) + return FFI_BAD_ABI; unsigned char *__tramp = (unsigned char*)(&closure->tramp[0]); unsigned int __fun = (unsigned int)(&ffi_closure_SYSV); diff --git a/libffi/src/avr32/ffitarget.h b/libffi/src/avr32/ffitarget.h index 1c799b1de72..d0c7586f9a8 100644 --- a/libffi/src/avr32/ffitarget.h +++ b/libffi/src/avr32/ffitarget.h @@ -1,5 +1,6 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2009 Bradley Smith <brad@brad-smith.co.uk> + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 2009 Bradley Smith <brad@brad-smith.co.uk> Target configuration macros for AVR32. Permission is hereby granted, free of charge, to any person obtaining @@ -27,6 +28,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + #ifndef LIBFFI_ASM typedef unsigned long ffi_arg; typedef signed long ffi_sarg; @@ -34,8 +39,8 @@ typedef signed long ffi_sarg; typedef enum ffi_abi { FFI_FIRST_ABI = 0, FFI_SYSV, - FFI_DEFAULT_ABI = FFI_SYSV, - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 + FFI_LAST_ABI, + FFI_DEFAULT_ABI = FFI_SYSV } ffi_abi; #endif diff --git a/libffi/src/closures.c b/libffi/src/closures.c index ff2b1bd21bd..1b378270363 100644 --- a/libffi/src/closures.c +++ b/libffi/src/closures.c @@ -1,6 +1,7 @@ /* ----------------------------------------------------------------------- - closures.c - Copyright (c) 2007 Red Hat, Inc. - Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc + closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc. + Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc + Copyright (c) 2011 Plausible Labs Cooperative, Inc. Code to allocate and deallocate memory for closures. @@ -32,7 +33,7 @@ #include <ffi.h> #include <ffi_common.h> -#ifndef FFI_MMAP_EXEC_WRIT +#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE # if __gnu_linux__ /* This macro indicates it may be forbidden to map anonymous memory with both write and execute permission. Code compiled when this @@ -63,7 +64,11 @@ #if FFI_CLOSURES -# if FFI_MMAP_EXEC_WRIT +# if FFI_EXEC_TRAMPOLINE_TABLE + +// Per-target implementation; It's unclear what can reasonable be shared between two OS/architecture implementations. + +# elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */ #define USE_LOCKS 1 #define USE_DL_PREFIX 1 @@ -167,7 +172,7 @@ selinux_enabled_check (void) #endif /* !FFI_MMAP_EXEC_SELINUX */ -#elif defined (__CYGWIN__) +#elif defined (__CYGWIN__) || defined(__INTERIX) #include <sys/mman.h> @@ -193,11 +198,11 @@ static int dlmalloc_trim(size_t) MAYBE_UNUSED; static size_t dlmalloc_usable_size(void*) MAYBE_UNUSED; static void dlmalloc_stats(void) MAYBE_UNUSED; -#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) +#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) /* Use these for mmap and munmap within dlmalloc.c. */ static void *dlmmap(void *, size_t, int, int, int, off_t); static int dlmunmap(void *, size_t); -#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) */ +#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ #define mmap dlmmap #define munmap dlmunmap @@ -207,7 +212,7 @@ static int dlmunmap(void *, size_t); #undef mmap #undef munmap -#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) +#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) /* A mutex used to synchronize access to *exec* variables in this file. */ static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -522,7 +527,7 @@ segment_holding_code (mstate m, char* addr) } #endif -#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) */ +#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ /* Allocate a chunk of memory with the given size. Returns a pointer to the writable address, and sets *CODE to the executable diff --git a/libffi/src/cris/ffi.c b/libffi/src/cris/ffi.c index e9c39530c22..aaca5b1cbaa 100644 --- a/libffi/src/cris/ffi.c +++ b/libffi/src/cris/ffi.c @@ -153,21 +153,24 @@ ffi_prep_args (char *stack, extended_cif * ecif) return (struct_count); } -ffi_status -ffi_prep_cif (ffi_cif * cif, - ffi_abi abi, unsigned int nargs, - ffi_type * rtype, ffi_type ** atypes) +ffi_status FFI_HIDDEN +ffi_prep_cif_core (ffi_cif * cif, + ffi_abi abi, unsigned int isvariadic, + unsigned int nfixedargs, unsigned int ntotalargs, + ffi_type * rtype, ffi_type ** atypes) { unsigned bytes = 0; unsigned int i; ffi_type **ptr; FFI_ASSERT (cif != NULL); - FFI_ASSERT ((abi > FFI_FIRST_ABI) && (abi <= FFI_DEFAULT_ABI)); + FFI_ASSERT((!isvariadic) || (nfixedargs >= 1)); + FFI_ASSERT(nfixedargs <= ntotalargs); + FFI_ASSERT (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI); cif->abi = abi; cif->arg_types = atypes; - cif->nargs = nargs; + cif->nargs = ntotalargs; cif->rtype = rtype; cif->flags = 0; diff --git a/libffi/src/cris/ffitarget.h b/libffi/src/cris/ffitarget.h index 4257f10a73c..b837e976e4e 100644 --- a/libffi/src/cris/ffitarget.h +++ b/libffi/src/cris/ffitarget.h @@ -1,5 +1,6 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 1996-2003 Red Hat, Inc. Target configuration macros for CRIS. Permission is hereby granted, free of charge, to any person obtaining @@ -27,6 +28,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + #ifndef LIBFFI_ASM typedef unsigned long ffi_arg; typedef signed long ffi_sarg; @@ -34,8 +39,8 @@ typedef signed long ffi_sarg; typedef enum ffi_abi { FFI_FIRST_ABI = 0, FFI_SYSV, - FFI_DEFAULT_ABI = FFI_SYSV, - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 + FFI_LAST_ABI, + FFI_DEFAULT_ABI = FFI_SYSV } ffi_abi; #endif diff --git a/libffi/src/dlmalloc.c b/libffi/src/dlmalloc.c index 0fa235af22e..5c9f9c2d239 100644 --- a/libffi/src/dlmalloc.c +++ b/libffi/src/dlmalloc.c @@ -622,6 +622,9 @@ DEFAULT_MMAP_THRESHOLD default: 256K #include "/usr/include/malloc.h" #else /* HAVE_USR_INCLUDE_MALLOC_H */ +/* HP-UX's stdlib.h redefines mallinfo unless _STRUCT_MALLINFO is defined */ +#define _STRUCT_MALLINFO + struct mallinfo { MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */ MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */ diff --git a/libffi/src/frv/ffitarget.h b/libffi/src/frv/ffitarget.h index 1c319ea9488..d42540e53d3 100644 --- a/libffi/src/frv/ffitarget.h +++ b/libffi/src/frv/ffitarget.h @@ -1,5 +1,6 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2004 Red Hat, Inc. + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 1996-2004 Red Hat, Inc. Target configuration macros for FR-V Permission is hereby granted, free of charge, to any person obtaining @@ -27,6 +28,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + /* ---- System specific configurations ----------------------------------- */ #ifndef LIBFFI_ASM @@ -35,13 +40,9 @@ typedef signed long ffi_sarg; typedef enum ffi_abi { FFI_FIRST_ABI = 0, - -#ifdef FRV FFI_EABI, - FFI_DEFAULT_ABI = FFI_EABI, -#endif - - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 + FFI_LAST_ABI, + FFI_DEFAULT_ABI = FFI_EABI } ffi_abi; #endif diff --git a/libffi/src/ia64/ffi.c b/libffi/src/ia64/ffi.c index 79e29b45a89..9533ef68b58 100644 --- a/libffi/src/ia64/ffi.c +++ b/libffi/src/ia64/ffi.c @@ -1,6 +1,7 @@ /* ----------------------------------------------------------------------- ffi.c - Copyright (c) 1998, 2007, 2008, 2012 Red Hat, Inc. Copyright (c) 2000 Hewlett Packard Company + Copyright (c) 2011 Anthony Green IA64 Foreign Function Interface @@ -429,7 +430,8 @@ ffi_prep_closure_loc (ffi_closure* closure, struct ffi_ia64_trampoline_struct *tramp; struct ia64_fd *fd; - FFI_ASSERT (cif->abi == FFI_UNIX); + if (cif->abi != FFI_UNIX) + return FFI_BAD_ABI; tramp = (struct ffi_ia64_trampoline_struct *)closure->tramp; fd = (struct ia64_fd *)(void *)ffi_closure_unix; diff --git a/libffi/src/ia64/ffitarget.h b/libffi/src/ia64/ffitarget.h index d85c049ba39..e68cea61544 100644 --- a/libffi/src/ia64/ffitarget.h +++ b/libffi/src/ia64/ffitarget.h @@ -1,5 +1,6 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 1996-2003 Red Hat, Inc. Target configuration macros for IA-64. Permission is hereby granted, free of charge, to any person obtaining @@ -27,6 +28,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + #ifndef LIBFFI_ASM typedef unsigned long long ffi_arg; typedef signed long long ffi_sarg; @@ -34,8 +39,8 @@ typedef signed long long ffi_sarg; typedef enum ffi_abi { FFI_FIRST_ABI = 0, FFI_UNIX, /* Linux and all Unix variants use the same conventions */ - FFI_DEFAULT_ABI = FFI_UNIX, - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 + FFI_LAST_ABI, + FFI_DEFAULT_ABI = FFI_UNIX } ffi_abi; #endif diff --git a/libffi/src/java_raw_api.c b/libffi/src/java_raw_api.c index 9c5383e6d5a..522c8bfd67e 100644 --- a/libffi/src/java_raw_api.c +++ b/libffi/src/java_raw_api.c @@ -311,7 +311,7 @@ ffi_java_translate_args (ffi_cif *cif, void *rvalue, ffi_raw_closure *cl = (ffi_raw_closure*)user_data; ffi_java_ptrarray_to_raw (cif, avalue, raw); - (*cl->fun) (cif, rvalue, raw, cl->user_data); + (*cl->fun) (cif, rvalue, (ffi_raw*)raw, cl->user_data); ffi_java_raw_to_rvalue (cif, rvalue); } diff --git a/libffi/src/m32r/ffitarget.h b/libffi/src/m32r/ffitarget.h index 6a761f6593a..6c34801982f 100644 --- a/libffi/src/m32r/ffitarget.h +++ b/libffi/src/m32r/ffitarget.h @@ -1,5 +1,6 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 2004 Renesas Technology. + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 2004 Renesas Technology. Target configuration macros for M32R. Permission is hereby granted, free of charge, to any person obtaining @@ -26,6 +27,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + /* ---- Generic type definitions ----------------------------------------- */ #ifndef LIBFFI_ASM @@ -36,8 +41,8 @@ typedef enum ffi_abi { FFI_FIRST_ABI = 0, FFI_SYSV, - FFI_DEFAULT_ABI = FFI_SYSV, - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 + FFI_LAST_ABI, + FFI_DEFAULT_ABI = FFI_SYSV } ffi_abi; #endif diff --git a/libffi/src/m68k/ffi.c b/libffi/src/m68k/ffi.c index 0d4df1e235f..d95c72b93bd 100644 --- a/libffi/src/m68k/ffi.c +++ b/libffi/src/m68k/ffi.c @@ -261,7 +261,8 @@ ffi_prep_closure_loc (ffi_closure* closure, void *user_data, void *codeloc) { - FFI_ASSERT (cif->abi == FFI_SYSV); + if (cif->abi != FFI_SYSV) + return FFI_BAD_ABI; *(unsigned short *)closure->tramp = 0x207c; *(void **)(closure->tramp + 2) = codeloc; diff --git a/libffi/src/m68k/ffitarget.h b/libffi/src/m68k/ffitarget.h index 633717bbfa8..e81dde2b2eb 100644 --- a/libffi/src/m68k/ffitarget.h +++ b/libffi/src/m68k/ffitarget.h @@ -1,5 +1,6 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 1996-2003 Red Hat, Inc. Target configuration macros for Motorola 68K. Permission is hereby granted, free of charge, to any person obtaining @@ -27,6 +28,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + #ifndef LIBFFI_ASM typedef unsigned long ffi_arg; typedef signed long ffi_sarg; @@ -34,8 +39,8 @@ typedef signed long ffi_sarg; typedef enum ffi_abi { FFI_FIRST_ABI = 0, FFI_SYSV, - FFI_DEFAULT_ABI = FFI_SYSV, - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 + FFI_LAST_ABI, + FFI_DEFAULT_ABI = FFI_SYSV } ffi_abi; #endif diff --git a/libffi/src/mips/ffi.c b/libffi/src/mips/ffi.c index d714cc9e998..79cff9b5304 100644 --- a/libffi/src/mips/ffi.c +++ b/libffi/src/mips/ffi.c @@ -1,6 +1,7 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 1996, 2007, 2008 Red Hat, Inc. - Copyright (c) 2008 David Daney + ffi.c - Copyright (c) 2011 Anthony Green + Copyright (c) 2008 David Daney + Copyright (c) 1996, 2007, 2008, 2011 Red Hat, Inc. MIPS Foreign Function Interface @@ -37,7 +38,11 @@ #endif #ifndef USE__BUILTIN___CLEAR_CACHE -#include <sys/cachectl.h> +# if defined(__OpenBSD__) +# include <mips64/sysarch.h> +# else +# include <sys/cachectl.h> +# endif #endif #ifdef FFI_DEBUG @@ -662,10 +667,12 @@ ffi_prep_closure_loc (ffi_closure *closure, char *clear_location = (char *) codeloc; #if defined(FFI_MIPS_O32) - FFI_ASSERT(cif->abi == FFI_O32 || cif->abi == FFI_O32_SOFT_FLOAT); + if (cif->abi != FFI_O32 && cif->abi != FFI_O32_SOFT_FLOAT) + return FFI_BAD_ABI; fn = ffi_closure_O32; #else /* FFI_MIPS_N32 */ - FFI_ASSERT(cif->abi == FFI_N32 || cif->abi == FFI_N64); + if (cif->abi != FFI_N32 && cif->abi != FFI_N64) + return FFI_BAD_ABI; fn = ffi_closure_N32; #endif /* FFI_MIPS_O32 */ diff --git a/libffi/src/mips/ffitarget.h b/libffi/src/mips/ffitarget.h index d0fc983a74f..717d65951c3 100644 --- a/libffi/src/mips/ffitarget.h +++ b/libffi/src/mips/ffitarget.h @@ -1,5 +1,6 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 1996-2003 Red Hat, Inc. Target configuration macros for MIPS. Permission is hereby granted, free of charge, to any person obtaining @@ -27,6 +28,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + #ifdef linux # include <asm/sgidefs.h> #elif defined(__rtems__) @@ -36,7 +41,7 @@ #define _MIPS_SIM_ABI32 1 #define _MIPS_SIM_NABI32 2 #define _MIPS_SIM_ABI64 3 -#else +#elif !defined(__OpenBSD__) # include <sgidefs.h> #endif @@ -51,7 +56,7 @@ # endif #if !defined(_MIPS_SIM) --- something is very wrong -- +# error -- something is very wrong -- #else # if (_MIPS_SIM==_ABIN32 && defined(_ABIN32)) || (_MIPS_SIM==_ABI64 && defined(_ABI64)) # define FFI_MIPS_N32 @@ -59,7 +64,7 @@ # if (_MIPS_SIM==_ABIO32 && defined(_ABIO32)) # define FFI_MIPS_O32 # else --- this is an unsupported platform -- +# error -- this is an unsupported platform -- # endif # endif #endif @@ -194,30 +199,29 @@ typedef enum ffi_abi { FFI_O32_SOFT_FLOAT, FFI_N32_SOFT_FLOAT, FFI_N64_SOFT_FLOAT, + FFI_LAST_ABI, #ifdef FFI_MIPS_O32 #ifdef __mips_soft_float - FFI_DEFAULT_ABI = FFI_O32_SOFT_FLOAT, + FFI_DEFAULT_ABI = FFI_O32_SOFT_FLOAT #else - FFI_DEFAULT_ABI = FFI_O32, + FFI_DEFAULT_ABI = FFI_O32 #endif #else # if _MIPS_SIM==_ABI64 # ifdef __mips_soft_float - FFI_DEFAULT_ABI = FFI_N64_SOFT_FLOAT, + FFI_DEFAULT_ABI = FFI_N64_SOFT_FLOAT # else - FFI_DEFAULT_ABI = FFI_N64, + FFI_DEFAULT_ABI = FFI_N64 # endif # else # ifdef __mips_soft_float - FFI_DEFAULT_ABI = FFI_N32_SOFT_FLOAT, + FFI_DEFAULT_ABI = FFI_N32_SOFT_FLOAT # else - FFI_DEFAULT_ABI = FFI_N32, + FFI_DEFAULT_ABI = FFI_N32 # endif # endif #endif - - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 } ffi_abi; #define FFI_EXTRA_CIF_FIELDS unsigned rstruct_flag diff --git a/libffi/src/pa/ffi.c b/libffi/src/pa/ffi.c index 6d7606f89bc..4ce2bc6f0e4 100644 --- a/libffi/src/pa/ffi.c +++ b/libffi/src/pa/ffi.c @@ -1,9 +1,11 @@ /* ----------------------------------------------------------------------- - ffi.c - (c) 2003-2004 Randolph Chung <tausq@debian.org> + ffi.c - (c) 2011 Anthony Green (c) 2008 Red Hat, Inc. - + (c) 2006 Free Software Foundation, Inc. + (c) 2003-2004 Randolph Chung <tausq@debian.org> + HPPA Foreign Function Interface - HP-UX PA ABI support (c) 2006 Free Software Foundation, Inc. + HP-UX PA ABI support Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -633,7 +635,8 @@ ffi_prep_closure_loc (ffi_closure* closure, UINT32 *tmp; #endif - FFI_ASSERT (cif->abi == FFI_PA32); + if (cif->abi != FFI_PA32) + return FFI_BAD_ABI; /* Make a small trampoline that will branch to our handler function. Use PC-relative addressing. */ diff --git a/libffi/src/pa/ffitarget.h b/libffi/src/pa/ffitarget.h index 001f8917d87..5e364d38f8b 100644 --- a/libffi/src/pa/ffitarget.h +++ b/libffi/src/pa/ffitarget.h @@ -1,5 +1,6 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 1996-2003 Red Hat, Inc. Target configuration macros for hppa. Permission is hereby granted, free of charge, to any person obtaining @@ -27,6 +28,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + /* ---- System specific configurations ----------------------------------- */ #ifndef LIBFFI_ASM @@ -38,21 +43,22 @@ typedef enum ffi_abi { #ifdef PA_LINUX FFI_PA32, - FFI_DEFAULT_ABI = FFI_PA32, + FFI_LAST_ABI, + FFI_DEFAULT_ABI = FFI_PA32 #endif #ifdef PA_HPUX FFI_PA32, - FFI_DEFAULT_ABI = FFI_PA32, + FFI_LAST_ABI, + FFI_DEFAULT_ABI = FFI_PA32 #endif #ifdef PA64_HPUX #error "PA64_HPUX FFI is not yet implemented" FFI_PA64, - FFI_DEFAULT_ABI = FFI_PA64, + FFI_LAST_ABI, + FFI_DEFAULT_ABI = FFI_PA64 #endif - - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 } ffi_abi; #endif diff --git a/libffi/src/powerpc/aix.S b/libffi/src/powerpc/aix.S index c6f87644d94..213f2db39de 100644 --- a/libffi/src/powerpc/aix.S +++ b/libffi/src/powerpc/aix.S @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - aix.S - Copyright (c) 2002,2009 Free Software Foundation, Inc. + aix.S - Copyright (c) 2002, 2009 Free Software Foundation, Inc. based on darwin.S by John Hornkvist PowerPC Assembly glue. @@ -79,6 +79,8 @@ .set f20,20 .set f21,21 + .extern .ffi_prep_args + #define LIBFFI_ASM #include <fficonfig.h> #include <ffi.h> @@ -125,6 +127,7 @@ ffi_call_AIX: /* Call ffi_prep_args. */ mr r4, r1 bl .ffi_prep_args + nop /* Now do the call. */ ld r0, 0(r29) @@ -226,6 +229,7 @@ L(float_return_value): /* Call ffi_prep_args. */ mr r4, r1 bl .ffi_prep_args + nop /* Now do the call. */ lwz r0, 0(r29) diff --git a/libffi/src/powerpc/aix_closure.S b/libffi/src/powerpc/aix_closure.S index 5c74448f2b1..c906017c459 100644 --- a/libffi/src/powerpc/aix_closure.S +++ b/libffi/src/powerpc/aix_closure.S @@ -79,6 +79,8 @@ .set f20,20 .set f21,21 + .extern .ffi_closure_helper_DARWIN + #define LIBFFI_ASM #define JUMPTARGET(name) name #define L(x) x diff --git a/libffi/src/powerpc/asm.h b/libffi/src/powerpc/asm.h index e86e6b09147..994f62d079d 100644 --- a/libffi/src/powerpc/asm.h +++ b/libffi/src/powerpc/asm.h @@ -42,7 +42,7 @@ /* If compiled for profiling, call `_mcount' at the start of each function. */ #ifdef PROF -/* The mcount code relies on a the return address being on the stack +/* The mcount code relies on the return address being on the stack to locate our caller and so it can restore it; so store one just for its benefit. */ #ifdef PIC diff --git a/libffi/src/powerpc/darwin.S b/libffi/src/powerpc/darwin.S index 3b425da78b8..4f987dc7482 100644 --- a/libffi/src/powerpc/darwin.S +++ b/libffi/src/powerpc/darwin.S @@ -335,7 +335,7 @@ LSCIE1: .byte EH_DATA_ALIGN_FACT ; sleb128 -4; CIE Data Alignment Factor .byte 0x41 ; CIE RA Column .byte 0x1 ; uleb128 0x1; Augmentation size - .byte 0x90 ; FDE Encoding (indirect pcrel) + .byte 0x10 ; FDE Encoding (indirect pcrel) .byte 0xc ; DW_CFA_def_cfa .byte 0x1 ; uleb128 0x1 .byte 0x0 ; uleb128 0x0 diff --git a/libffi/src/powerpc/darwin_closure.S b/libffi/src/powerpc/darwin_closure.S index b43f9658fce..3f6790f6bb3 100644 --- a/libffi/src/powerpc/darwin_closure.S +++ b/libffi/src/powerpc/darwin_closure.S @@ -484,7 +484,7 @@ LSCIE1: .byte EH_DATA_ALIGN_FACT ; sleb128 -4; CIE Data Alignment Factor .byte 0x41 ; CIE RA Column .byte 0x1 ; uleb128 0x1; Augmentation size - .byte 0x90 ; FDE Encoding (indirect pcrel) + .byte 0x10 ; FDE Encoding (indirect pcrel) .byte 0xc ; DW_CFA_def_cfa .byte 0x1 ; uleb128 0x1 .byte 0x0 ; uleb128 0x0 diff --git a/libffi/src/powerpc/ffi.c b/libffi/src/powerpc/ffi.c index 75784a96d3b..1920c91104d 100644 --- a/libffi/src/powerpc/ffi.c +++ b/libffi/src/powerpc/ffi.c @@ -1,7 +1,9 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 1998 Geoffrey Keating - Copyright (C) 2007, 2008 Free Software Foundation, Inc - Copyright (C) 2008 Red Hat, Inc + ffi.c - Copyright (C) 2011 Anthony Green + Copyright (C) 2011 Kyle Moffett + Copyright (C) 2008 Red Hat, Inc + Copyright (C) 2007, 2008 Free Software Foundation, Inc + Copyright (c) 1998 Geoffrey Keating PowerPC Foreign Function Interface @@ -39,32 +41,28 @@ enum { /* The assembly depends on these exact flags. */ FLAG_RETURNS_SMST = 1 << (31-31), /* Used for FFI_SYSV small structs. */ FLAG_RETURNS_NOTHING = 1 << (31-30), /* These go in cr7 */ +#ifndef __NO_FPRS__ FLAG_RETURNS_FP = 1 << (31-29), +#endif FLAG_RETURNS_64BITS = 1 << (31-28), FLAG_RETURNS_128BITS = 1 << (31-27), /* cr6 */ - FLAG_SYSV_SMST_R4 = 1 << (31-26), /* use r4 for FFI_SYSV 8 byte - structs. */ - FLAG_SYSV_SMST_R3 = 1 << (31-25), /* use r3 for FFI_SYSV 4 byte - structs. */ - /* Bits (31-24) through (31-19) store shift value for SMST */ FLAG_ARG_NEEDS_COPY = 1 << (31- 7), +#ifndef __NO_FPRS__ FLAG_FP_ARGUMENTS = 1 << (31- 6), /* cr1.eq; specified by ABI */ +#endif FLAG_4_GPR_ARGUMENTS = 1 << (31- 5), FLAG_RETVAL_REFERENCE = 1 << (31- 4) }; /* About the SYSV ABI. */ -unsigned int NUM_GPR_ARG_REGISTERS = 8; +#define ASM_NEEDS_REGISTERS 4 +#define NUM_GPR_ARG_REGISTERS 8 #ifndef __NO_FPRS__ -unsigned int NUM_FPR_ARG_REGISTERS = 8; -#else -unsigned int NUM_FPR_ARG_REGISTERS = 0; +# define NUM_FPR_ARG_REGISTERS 8 #endif -enum { ASM_NEEDS_REGISTERS = 4 }; - /* ffi_prep_args_SYSV is called by the assembly routine once stack space has been allocated for the function's arguments. @@ -113,10 +111,12 @@ ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack) valp gpr_base; int intarg_count; +#ifndef __NO_FPRS__ /* 'fpr_base' points at the space for fpr1, and grows upwards as we use FPR registers. */ valp fpr_base; int fparg_count; +#endif /* 'copy_space' grows down as we put structures in it. It should stay 16-byte aligned. */ @@ -125,9 +125,8 @@ ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack) /* 'next_arg' grows up as we put parameters in it. */ valp next_arg; - int i, ii MAYBE_UNUSED; + int i; ffi_type **ptr; - double double_tmp; union { void **v; char **c; @@ -143,15 +142,16 @@ ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack) size_t struct_copy_size; unsigned gprvalue; - if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT) - NUM_FPR_ARG_REGISTERS = 0; - stacktop.c = (char *) stack + bytes; gpr_base.u = stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS; intarg_count = 0; +#ifndef __NO_FPRS__ fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS; fparg_count = 0; copy_space.c = ((flags & FLAG_FP_ARGUMENTS) ? fpr_base.c : gpr_base.c); +#else + copy_space.c = gpr_base.c; +#endif next_arg.u = stack + 2; /* Check that everything starts aligned properly. */ @@ -174,12 +174,28 @@ ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack) i > 0; i--, ptr++, p_argv.v++) { - switch ((*ptr)->type) - { + unsigned short typenum = (*ptr)->type; + + /* We may need to handle some values depending on ABI */ + if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT) { + if (typenum == FFI_TYPE_FLOAT) + typenum = FFI_TYPE_UINT32; + if (typenum == FFI_TYPE_DOUBLE) + typenum = FFI_TYPE_UINT64; + if (typenum == FFI_TYPE_LONGDOUBLE) + typenum = FFI_TYPE_UINT128; + } else if (ecif->cif->abi != FFI_LINUX) { +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + if (typenum == FFI_TYPE_LONGDOUBLE) + typenum = FFI_TYPE_STRUCT; +#endif + } + + /* Now test the translated value */ + switch (typenum) { +#ifndef __NO_FPRS__ case FFI_TYPE_FLOAT: /* With FFI_LINUX_SOFT_FLOAT floats are handled like UINT32. */ - if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT) - goto soft_float_prep; double_tmp = **p_argv.f; if (fparg_count >= NUM_FPR_ARG_REGISTERS) { @@ -218,43 +234,6 @@ ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack) #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE case FFI_TYPE_LONGDOUBLE: - if ((ecif->cif->abi != FFI_LINUX) - && (ecif->cif->abi != FFI_LINUX_SOFT_FLOAT)) - goto do_struct; - /* The soft float ABI for long doubles works like this, - a long double is passed in four consecutive gprs if available. - A maximum of 2 long doubles can be passed in gprs. - If we do not have 4 gprs left, the long double is passed on the - stack, 4-byte aligned. */ - if (ecif->cif->abi == FFI_LINUX_SOFT_FLOAT) - { - unsigned int int_tmp = (*p_argv.ui)[0]; - if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3) - { - if (intarg_count < NUM_GPR_ARG_REGISTERS) - intarg_count += NUM_GPR_ARG_REGISTERS - intarg_count; - *next_arg.u = int_tmp; - next_arg.u++; - for (ii = 1; ii < 4; ii++) - { - int_tmp = (*p_argv.ui)[ii]; - *next_arg.u = int_tmp; - next_arg.u++; - } - } - else - { - *gpr_base.u++ = int_tmp; - for (ii = 1; ii < 4; ii++) - { - int_tmp = (*p_argv.ui)[ii]; - *gpr_base.u++ = int_tmp; - } - } - intarg_count +=4; - } - else - { double_tmp = (*p_argv.d)[0]; if (fparg_count >= NUM_FPR_ARG_REGISTERS - 1) @@ -280,13 +259,40 @@ ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack) fparg_count += 2; FFI_ASSERT (flags & FLAG_FP_ARGUMENTS); - } break; #endif +#endif /* have FPRs */ + + /* + * The soft float ABI for long doubles works like this, a long double + * is passed in four consecutive GPRs if available. A maximum of 2 + * long doubles can be passed in gprs. If we do not have 4 GPRs + * left, the long double is passed on the stack, 4-byte aligned. + */ + case FFI_TYPE_UINT128: { + unsigned int int_tmp = (*p_argv.ui)[0]; + unsigned int ii; + if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3) { + if (intarg_count < NUM_GPR_ARG_REGISTERS) + intarg_count += NUM_GPR_ARG_REGISTERS - intarg_count; + *(next_arg.u++) = int_tmp; + for (ii = 1; ii < 4; ii++) { + int_tmp = (*p_argv.ui)[ii]; + *(next_arg.u++) = int_tmp; + } + } else { + *(gpr_base.u++) = int_tmp; + for (ii = 1; ii < 4; ii++) { + int_tmp = (*p_argv.ui)[ii]; + *(gpr_base.u++) = int_tmp; + } + } + intarg_count += 4; + break; + } case FFI_TYPE_UINT64: case FFI_TYPE_SINT64: - soft_double_prep: if (intarg_count == NUM_GPR_ARG_REGISTERS-1) intarg_count++; if (intarg_count >= NUM_GPR_ARG_REGISTERS) @@ -319,9 +325,6 @@ ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack) break; case FFI_TYPE_STRUCT: -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - do_struct: -#endif struct_copy_size = ((*ptr)->size + 15) & ~0xF; copy_space.c -= struct_copy_size; memcpy (copy_space.c, *p_argv.c, (*ptr)->size); @@ -349,7 +352,6 @@ ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack) case FFI_TYPE_UINT32: case FFI_TYPE_SINT32: case FFI_TYPE_POINTER: - soft_float_prep: gprvalue = **p_argv.ui; @@ -366,8 +368,10 @@ ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack) /* Check that we didn't overrun the stack... */ FFI_ASSERT (copy_space.c >= next_arg.c); FFI_ASSERT (gpr_base.u <= stacktop.u - ASM_NEEDS_REGISTERS); +#ifndef __NO_FPRS__ FFI_ASSERT (fpr_base.u <= stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS); +#endif FFI_ASSERT (flags & FLAG_4_GPR_ARGUMENTS || intarg_count <= 4); } @@ -604,9 +608,6 @@ ffi_prep_cif_machdep (ffi_cif *cif) unsigned type = cif->rtype->type; unsigned size = cif->rtype->size; - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - NUM_FPR_ARG_REGISTERS = 0; - if (cif->abi != FFI_LINUX64) { /* All the machine-independent calculation of cif->bytes will be wrong. @@ -646,62 +647,56 @@ ffi_prep_cif_machdep (ffi_cif *cif) - Single/double FP values in fpr1, long double in fpr1,fpr2. - soft-float float/doubles are treated as UINT32/UINT64 respectivley. - soft-float long doubles are returned in gpr3-gpr6. */ + /* First translate for softfloat/nonlinux */ + if (cif->abi == FFI_LINUX_SOFT_FLOAT) { + if (type == FFI_TYPE_FLOAT) + type = FFI_TYPE_UINT32; + if (type == FFI_TYPE_DOUBLE) + type = FFI_TYPE_UINT64; + if (type == FFI_TYPE_LONGDOUBLE) + type = FFI_TYPE_UINT128; + } else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) { +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + if (type == FFI_TYPE_LONGDOUBLE) + type = FFI_TYPE_STRUCT; +#endif + } + switch (type) { -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE +#ifndef __NO_FPRS__ case FFI_TYPE_LONGDOUBLE: - if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64 - && cif->abi != FFI_LINUX_SOFT_FLOAT) - goto byref; flags |= FLAG_RETURNS_128BITS; /* Fall through. */ -#endif case FFI_TYPE_DOUBLE: flags |= FLAG_RETURNS_64BITS; /* Fall through. */ case FFI_TYPE_FLOAT: - /* With FFI_LINUX_SOFT_FLOAT no fp registers are used. */ - if (cif->abi != FFI_LINUX_SOFT_FLOAT) - flags |= FLAG_RETURNS_FP; + flags |= FLAG_RETURNS_FP; break; +#endif + case FFI_TYPE_UINT128: + flags |= FLAG_RETURNS_128BITS; + /* Fall through. */ case FFI_TYPE_UINT64: case FFI_TYPE_SINT64: flags |= FLAG_RETURNS_64BITS; break; case FFI_TYPE_STRUCT: - if (cif->abi == FFI_SYSV) - { - /* The final SYSV ABI says that structures smaller or equal 8 bytes - are returned in r3/r4. The FFI_GCC_SYSV ABI instead returns them - in memory. */ - - /* Treat structs with size <= 8 bytes. */ - if (size <= 8) - { - flags |= FLAG_RETURNS_SMST; - /* These structs are returned in r3. We pack the type and the - precalculated shift value (needed in the sysv.S) into flags. - The same applies for the structs returned in r3/r4. */ - if (size <= 4) - { - flags |= FLAG_SYSV_SMST_R3; - flags |= 8 * (4 - size) << 8; - break; - } - /* These structs are returned in r3 and r4. See above. */ - if (size <= 8) - { - flags |= FLAG_SYSV_SMST_R3 | FLAG_SYSV_SMST_R4; - flags |= 8 * (8 - size) << 8; - break; - } - } - } -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - byref: -#endif + /* + * The final SYSV ABI says that structures smaller or equal 8 bytes + * are returned in r3/r4. The FFI_GCC_SYSV ABI instead returns them + * in memory. + * + * NOTE: The assembly code can safely assume that it just needs to + * store both r3 and r4 into a 8-byte word-aligned buffer, as + * we allocate a temporary buffer in ffi_call() if this flag is + * set. + */ + if (cif->abi == FFI_SYSV && size <= 8) + flags |= FLAG_RETURNS_SMST; intarg_count++; flags |= FLAG_RETVAL_REFERENCE; /* Fall through. */ @@ -722,39 +717,36 @@ ffi_prep_cif_machdep (ffi_cif *cif) Stuff on the stack needs to keep proper alignment. */ for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) { - switch ((*ptr)->type) - { + unsigned short typenum = (*ptr)->type; + + /* We may need to handle some values depending on ABI */ + if (cif->abi == FFI_LINUX_SOFT_FLOAT) { + if (typenum == FFI_TYPE_FLOAT) + typenum = FFI_TYPE_UINT32; + if (typenum == FFI_TYPE_DOUBLE) + typenum = FFI_TYPE_UINT64; + if (typenum == FFI_TYPE_LONGDOUBLE) + typenum = FFI_TYPE_UINT128; + } else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) { +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + if (typenum == FFI_TYPE_LONGDOUBLE) + typenum = FFI_TYPE_STRUCT; +#endif + } + + switch (typenum) { +#ifndef __NO_FPRS__ case FFI_TYPE_FLOAT: - /* With FFI_LINUX_SOFT_FLOAT floats are handled like UINT32. */ - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - goto soft_float_cif; fparg_count++; /* floating singles are not 8-aligned on stack */ break; #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE case FFI_TYPE_LONGDOUBLE: - if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT) - goto do_struct; - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - { - if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3 - || intarg_count < NUM_GPR_ARG_REGISTERS) - /* A long double in FFI_LINUX_SOFT_FLOAT can use only - a set of four consecutive gprs. If we have not enough, - we have to adjust the intarg_count value. */ - intarg_count += NUM_GPR_ARG_REGISTERS - intarg_count; - intarg_count += 4; - break; - } - else - fparg_count++; + fparg_count++; /* Fall thru */ #endif case FFI_TYPE_DOUBLE: - /* With FFI_LINUX_SOFT_FLOAT doubles are handled like UINT64. */ - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - goto soft_double_cif; fparg_count++; /* If this FP arg is going on the stack, it must be 8-byte-aligned. */ @@ -763,10 +755,21 @@ ffi_prep_cif_machdep (ffi_cif *cif) && intarg_count % 2 != 0) intarg_count++; break; +#endif + case FFI_TYPE_UINT128: + /* + * A long double in FFI_LINUX_SOFT_FLOAT can use only a set + * of four consecutive gprs. If we do not have enough, we + * have to adjust the intarg_count value. + */ + if (intarg_count >= NUM_GPR_ARG_REGISTERS - 3 + && intarg_count < NUM_GPR_ARG_REGISTERS) + intarg_count = NUM_GPR_ARG_REGISTERS; + intarg_count += 4; + break; case FFI_TYPE_UINT64: case FFI_TYPE_SINT64: - soft_double_cif: /* 'long long' arguments are passed as two words, but either both words must fit in registers or both go on the stack. If they go on the stack, they must @@ -783,9 +786,6 @@ ffi_prep_cif_machdep (ffi_cif *cif) break; case FFI_TYPE_STRUCT: -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - do_struct: -#endif /* We must allocate space for a copy of these to enforce pass-by-value. Pad the space up to a multiple of 16 bytes (the maximum alignment required for anything under @@ -793,12 +793,20 @@ ffi_prep_cif_machdep (ffi_cif *cif) struct_copy_size += ((*ptr)->size + 15) & ~0xF; /* Fall through (allocate space for the pointer). */ - default: - soft_float_cif: + case FFI_TYPE_POINTER: + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: /* Everything else is passed as a 4-byte word in a GPR, either the object itself or a pointer to it. */ intarg_count++; break; + default: + FFI_ASSERT (0); } } else @@ -827,16 +835,29 @@ ffi_prep_cif_machdep (ffi_cif *cif) intarg_count += ((*ptr)->size + 7) / 8; break; - default: + case FFI_TYPE_POINTER: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: /* Everything else is passed as a 8-byte word in a GPR, either the object itself or a pointer to it. */ intarg_count++; break; + default: + FFI_ASSERT (0); } } +#ifndef __NO_FPRS__ if (fparg_count != 0) flags |= FLAG_FP_ARGUMENTS; +#endif if (intarg_count > 4) flags |= FLAG_4_GPR_ARGUMENTS; if (struct_copy_size != 0) @@ -844,21 +865,27 @@ ffi_prep_cif_machdep (ffi_cif *cif) if (cif->abi != FFI_LINUX64) { +#ifndef __NO_FPRS__ /* Space for the FPR registers, if needed. */ if (fparg_count != 0) bytes += NUM_FPR_ARG_REGISTERS * sizeof (double); +#endif /* Stack space. */ if (intarg_count > NUM_GPR_ARG_REGISTERS) bytes += (intarg_count - NUM_GPR_ARG_REGISTERS) * sizeof (int); +#ifndef __NO_FPRS__ if (fparg_count > NUM_FPR_ARG_REGISTERS) bytes += (fparg_count - NUM_FPR_ARG_REGISTERS) * sizeof (double); +#endif } else { +#ifndef __NO_FPRS__ /* Space for the FPR registers, if needed. */ if (fparg_count != 0) bytes += NUM_FPR_ARG_REGISTERS64 * sizeof (double); +#endif /* Stack space. */ if (intarg_count > NUM_GPR_ARG_REGISTERS64) @@ -886,28 +913,41 @@ extern void FFI_HIDDEN ffi_call_LINUX64(extended_cif *, unsigned long, void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) { + /* + * The final SYSV ABI says that structures smaller or equal 8 bytes + * are returned in r3/r4. The FFI_GCC_SYSV ABI instead returns them + * in memory. + * + * Just to keep things simple for the assembly code, we will always + * bounce-buffer struct return values less than or equal to 8 bytes. + * This allows the ASM to handle SYSV small structures by directly + * writing r3 and r4 to memory without worrying about struct size. + */ + unsigned int smst_buffer[2]; extended_cif ecif; + unsigned int rsize; ecif.cif = cif; ecif.avalue = avalue; - /* If the return value is a struct and we don't have a return */ - /* value address then we need to make one */ - - if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca(cif->rtype->size); - } - else - ecif.rvalue = rvalue; - + /* Ensure that we have a valid struct return value */ + ecif.rvalue = rvalue; + if (cif->rtype->type == FFI_TYPE_STRUCT) { + rsize = cif->rtype->size; + if (rsize <= 8) + ecif.rvalue = smst_buffer; + else if (!rvalue) + ecif.rvalue = alloca(rsize); + } switch (cif->abi) { #ifndef POWERPC64 +# ifndef __NO_FPRS__ case FFI_SYSV: case FFI_GCC_SYSV: case FFI_LINUX: +# endif case FFI_LINUX_SOFT_FLOAT: ffi_call_SYSV (&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn); break; @@ -920,6 +960,10 @@ ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) FFI_ASSERT (0); break; } + + /* Check for a bounce-buffered return value */ + if (rvalue && ecif.rvalue == smst_buffer) + memcpy(rvalue, smst_buffer, rsize); } @@ -949,14 +993,19 @@ ffi_prep_closure_loc (ffi_closure *closure, #ifdef POWERPC64 void **tramp = (void **) &closure->tramp[0]; - FFI_ASSERT (cif->abi == FFI_LINUX64); + if (cif->abi != FFI_LINUX64) + return FFI_BAD_ABI; /* Copy function address and TOC from ffi_closure_LINUX64. */ memcpy (tramp, (char *) ffi_closure_LINUX64, 16); tramp[2] = codeloc; #else unsigned int *tramp; - FFI_ASSERT (cif->abi == FFI_GCC_SYSV || cif->abi == FFI_SYSV); + if (! (cif->abi == FFI_GCC_SYSV + || cif->abi == FFI_SYSV + || cif->abi == FFI_LINUX + || cif->abi == FFI_LINUX_SOFT_FLOAT)) + return FFI_BAD_ABI; tramp = (unsigned int *) &closure->tramp[0]; tramp[0] = 0x7c0802a6; /* mflr r0 */ @@ -1011,32 +1060,38 @@ ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue, void ** avalue; ffi_type ** arg_types; long i, avn; - long nf; /* number of floating registers already used */ - long ng; /* number of general registers already used */ - ffi_cif * cif; - double temp; - unsigned size; +#ifndef __NO_FPRS__ + long nf = 0; /* number of floating registers already used */ +#endif + long ng = 0; /* number of general registers already used */ + + ffi_cif *cif = closure->cif; + unsigned size = cif->rtype->size; + unsigned short rtypenum = cif->rtype->type; - cif = closure->cif; avalue = alloca (cif->nargs * sizeof (void *)); - size = cif->rtype->size; - nf = 0; - ng = 0; + /* First translate for softfloat/nonlinux */ + if (cif->abi == FFI_LINUX_SOFT_FLOAT) { + if (rtypenum == FFI_TYPE_FLOAT) + rtypenum = FFI_TYPE_UINT32; + if (rtypenum == FFI_TYPE_DOUBLE) + rtypenum = FFI_TYPE_UINT64; + if (rtypenum == FFI_TYPE_LONGDOUBLE) + rtypenum = FFI_TYPE_UINT128; + } else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) { +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + if (rtypenum == FFI_TYPE_LONGDOUBLE) + rtypenum = FFI_TYPE_STRUCT; +#endif + } + /* Copy the caller's structure return value address so that the closure returns the data directly to the caller. For FFI_SYSV the result is passed in r3/r4 if the struct size is less or equal 8 bytes. */ - - if ((cif->rtype->type == FFI_TYPE_STRUCT - && !((cif->abi == FFI_SYSV) && (size <= 8))) -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - || (cif->rtype->type == FFI_TYPE_LONGDOUBLE - && cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT) -#endif - ) - { + if (rtypenum == FFI_TYPE_STRUCT && ((cif->abi != FFI_SYSV) || (size > 8))) { rvalue = (void *) *pgr; ng++; pgr++; @@ -1047,10 +1102,109 @@ ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue, arg_types = cif->arg_types; /* Grab the addresses of the arguments from the stack frame. */ - while (i < avn) - { - switch (arg_types[i]->type) - { + while (i < avn) { + unsigned short typenum = arg_types[i]->type; + + /* We may need to handle some values depending on ABI */ + if (cif->abi == FFI_LINUX_SOFT_FLOAT) { + if (typenum == FFI_TYPE_FLOAT) + typenum = FFI_TYPE_UINT32; + if (typenum == FFI_TYPE_DOUBLE) + typenum = FFI_TYPE_UINT64; + if (typenum == FFI_TYPE_LONGDOUBLE) + typenum = FFI_TYPE_UINT128; + } else if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX64) { +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + if (typenum == FFI_TYPE_LONGDOUBLE) + typenum = FFI_TYPE_STRUCT; +#endif + } + + switch (typenum) { +#ifndef __NO_FPRS__ + case FFI_TYPE_FLOAT: + /* unfortunately float values are stored as doubles + * in the ffi_closure_SYSV code (since we don't check + * the type in that routine). + */ + + /* there are 8 64bit floating point registers */ + + if (nf < 8) + { + temp = pfr->d; + pfr->f = (float) temp; + avalue[i] = pfr; + nf++; + pfr++; + } + else + { + /* FIXME? here we are really changing the values + * stored in the original calling routines outgoing + * parameter stack. This is probably a really + * naughty thing to do but... + */ + avalue[i] = pst; + pst += 1; + } + break; + + case FFI_TYPE_DOUBLE: + /* On the outgoing stack all values are aligned to 8 */ + /* there are 8 64bit floating point registers */ + + if (nf < 8) + { + avalue[i] = pfr; + nf++; + pfr++; + } + else + { + if (((long) pst) & 4) + pst++; + avalue[i] = pst; + pst += 2; + } + break; + +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + case FFI_TYPE_LONGDOUBLE: + if (nf < 7) + { + avalue[i] = pfr; + pfr += 2; + nf += 2; + } + else + { + if (((long) pst) & 4) + pst++; + avalue[i] = pst; + pst += 4; + nf = 8; + } + break; +#endif +#endif /* have FPRS */ + + case FFI_TYPE_UINT128: + /* + * Test if for the whole long double, 4 gprs are available. + * otherwise the stuff ends up on the stack. + */ + if (ng < 5) { + avalue[i] = pgr; + pgr += 4; + ng += 4; + } else { + avalue[i] = pst; + pst += 4; + ng = 8+4; + } + break; + case FFI_TYPE_SINT8: case FFI_TYPE_UINT8: /* there are 8 gpr registers used to pass values */ @@ -1086,7 +1240,6 @@ ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue, case FFI_TYPE_SINT32: case FFI_TYPE_UINT32: case FFI_TYPE_POINTER: - soft_float_closure: /* there are 8 gpr registers used to pass values */ if (ng < 8) { @@ -1102,9 +1255,6 @@ ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue, break; case FFI_TYPE_STRUCT: -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - do_struct: -#endif /* Structs are passed by reference. The address will appear in a gpr if it is one of the first 8 arguments. */ if (ng < 8) @@ -1122,7 +1272,6 @@ ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue, case FFI_TYPE_SINT64: case FFI_TYPE_UINT64: - soft_double_closure: /* passing long long ints are complex, they must * be passed in suitable register pairs such as * (r3,r4) or (r5,r6) or (r6,r7), or (r7,r8) or (r9,r10) @@ -1154,99 +1303,8 @@ ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue, } break; - case FFI_TYPE_FLOAT: - /* With FFI_LINUX_SOFT_FLOAT floats are handled like UINT32. */ - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - goto soft_float_closure; - /* unfortunately float values are stored as doubles - * in the ffi_closure_SYSV code (since we don't check - * the type in that routine). - */ - - /* there are 8 64bit floating point registers */ - - if (nf < 8) - { - temp = pfr->d; - pfr->f = (float) temp; - avalue[i] = pfr; - nf++; - pfr++; - } - else - { - /* FIXME? here we are really changing the values - * stored in the original calling routines outgoing - * parameter stack. This is probably a really - * naughty thing to do but... - */ - avalue[i] = pst; - pst += 1; - } - break; - - case FFI_TYPE_DOUBLE: - /* With FFI_LINUX_SOFT_FLOAT doubles are handled like UINT64. */ - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - goto soft_double_closure; - /* On the outgoing stack all values are aligned to 8 */ - /* there are 8 64bit floating point registers */ - - if (nf < 8) - { - avalue[i] = pfr; - nf++; - pfr++; - } - else - { - if (((long) pst) & 4) - pst++; - avalue[i] = pst; - pst += 2; - } - break; - -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - if (cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT) - goto do_struct; - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - { /* Test if for the whole long double, 4 gprs are available. - otherwise the stuff ends up on the stack. */ - if (ng < 5) - { - avalue[i] = pgr; - pgr += 4; - ng += 4; - } - else - { - avalue[i] = pst; - pst += 4; - ng = 8; - } - break; - } - if (nf < 7) - { - avalue[i] = pfr; - pfr += 2; - nf += 2; - } - else - { - if (((long) pst) & 4) - pst++; - avalue[i] = pst; - pst += 4; - nf = 8; - } - break; -#endif - default: - FFI_ASSERT (0); + FFI_ASSERT (0); } i++; @@ -1263,39 +1321,9 @@ ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue, already used and we never have a struct with size zero. That is the reason for the subtraction of 1. See the comment in ffitarget.h about ordering. */ - if (cif->abi == FFI_SYSV && cif->rtype->type == FFI_TYPE_STRUCT - && size <= 8) + if (cif->abi == FFI_SYSV && rtypenum == FFI_TYPE_STRUCT && size <= 8) return (FFI_SYSV_TYPE_SMALL_STRUCT - 1) + size; -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - else if (cif->rtype->type == FFI_TYPE_LONGDOUBLE - && cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT) - return FFI_TYPE_STRUCT; -#endif - /* With FFI_LINUX_SOFT_FLOAT floats and doubles are handled like UINT32 - respectivley UINT64. */ - if (cif->abi == FFI_LINUX_SOFT_FLOAT) - { - switch (cif->rtype->type) - { - case FFI_TYPE_FLOAT: - return FFI_TYPE_UINT32; - break; - case FFI_TYPE_DOUBLE: - return FFI_TYPE_UINT64; - break; -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - case FFI_TYPE_LONGDOUBLE: - return FFI_TYPE_UINT128; - break; -#endif - default: - return cif->rtype->type; - } - } - else - { - return cif->rtype->type; - } + return rtypenum; } int FFI_HIDDEN ffi_closure_helper_LINUX64 (ffi_closure *, void *, diff --git a/libffi/src/powerpc/ffitarget.h b/libffi/src/powerpc/ffitarget.h index d17f7312d81..3c9db495f49 100644 --- a/libffi/src/powerpc/ffitarget.h +++ b/libffi/src/powerpc/ffitarget.h @@ -1,6 +1,8 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Copyright (C) 2007, 2008, 2010 Free Software Foundation, Inc + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (C) 2007, 2008, 2010 Free Software Foundation, Inc + Copyright (c) 1996-2003 Red Hat, Inc. + Target configuration macros for PowerPC. Permission is hereby granted, free of charge, to any person obtaining @@ -28,6 +30,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + /* ---- System specific configurations ----------------------------------- */ #if defined (POWERPC) && defined (__powerpc64__) /* linux64 */ @@ -60,18 +66,14 @@ typedef enum ffi_abi { FFI_LINUX64, FFI_LINUX, FFI_LINUX_SOFT_FLOAT, -# ifdef POWERPC64 +# if defined(POWERPC64) FFI_DEFAULT_ABI = FFI_LINUX64, -# else -# if (!defined(__NO_FPRS__) && (__LDBL_MANT_DIG__ == 106)) - FFI_DEFAULT_ABI = FFI_LINUX, -# else -# ifdef __NO_FPRS__ +# elif defined(__NO_FPRS__) FFI_DEFAULT_ABI = FFI_LINUX_SOFT_FLOAT, -# else +# elif (__LDBL_MANT_DIG__ == 106) + FFI_DEFAULT_ABI = FFI_LINUX, +# else FFI_DEFAULT_ABI = FFI_GCC_SYSV, -# endif -# endif # endif #endif diff --git a/libffi/src/powerpc/ppc_closure.S b/libffi/src/powerpc/ppc_closure.S index 56f7d1af2c8..41fb8851b62 100644 --- a/libffi/src/powerpc/ppc_closure.S +++ b/libffi/src/powerpc/ppc_closure.S @@ -122,22 +122,41 @@ ENTRY(ffi_closure_SYSV) blr # case FFI_TYPE_FLOAT +#ifndef __NO_FPRS__ lfs %f1,112+0(%r1) mtlr %r0 addi %r1,%r1,144 +#else + nop + nop + nop +#endif blr # case FFI_TYPE_DOUBLE +#ifndef __NO_FPRS__ lfd %f1,112+0(%r1) mtlr %r0 addi %r1,%r1,144 +#else + nop + nop + nop +#endif blr # case FFI_TYPE_LONGDOUBLE +#ifndef __NO_FPRS__ lfd %f1,112+0(%r1) lfd %f2,112+8(%r1) mtlr %r0 b .Lfinish +#else + nop + nop + nop + blr +#endif # case FFI_TYPE_UINT8 lbz %r3,112+3(%r1) diff --git a/libffi/src/powerpc/sysv.S b/libffi/src/powerpc/sysv.S index 96ea22b0b40..675ed03eeb9 100644 --- a/libffi/src/powerpc/sysv.S +++ b/libffi/src/powerpc/sysv.S @@ -83,6 +83,7 @@ ENTRY(ffi_call_SYSV) nop 1: +#ifndef __NO_FPRS__ /* Load all the FP registers. */ bf- 6,2f lfd %f1,-16-(8*4)-(8*8)(%r28) @@ -94,6 +95,7 @@ ENTRY(ffi_call_SYSV) lfd %f6,-16-(8*4)-(3*8)(%r28) lfd %f7,-16-(8*4)-(2*8)(%r28) lfd %f8,-16-(8*4)-(1*8)(%r28) +#endif 2: /* Make the call. */ @@ -103,7 +105,9 @@ ENTRY(ffi_call_SYSV) mtcrf 0x01,%r31 /* cr7 */ bt- 31,L(small_struct_return_value) bt- 30,L(done_return_value) +#ifndef __NO_FPRS__ bt- 29,L(fp_return_value) +#endif stw %r3,0(%r30) bf+ 28,L(done_return_value) stw %r4,4(%r30) @@ -124,6 +128,7 @@ L(done_return_value): lwz %r1,0(%r1) blr +#ifndef __NO_FPRS__ L(fp_return_value): bf 28,L(float_return_value) stfd %f1,0(%r30) @@ -134,21 +139,17 @@ L(fp_return_value): L(float_return_value): stfs %f1,0(%r30) b L(done_return_value) +#endif L(small_struct_return_value): - extrwi %r6,%r31,2,19 /* number of bytes padding = shift/8 */ - mtcrf 0x02,%r31 /* copy flags to cr[24:27] (cr6) */ - extrwi %r5,%r31,5,19 /* r5 <- number of bits of padding */ - subfic %r6,%r6,4 /* r6 <- number of useful bytes in r3 */ - bf- 25,L(done_return_value) /* struct in r3 ? if not, done. */ -/* smst_one_register: */ - slw %r3,%r3,%r5 /* Left-justify value in r3 */ - mtxer %r6 /* move byte count to XER ... */ - stswx %r3,0,%r30 /* ... and store that many bytes */ - bf+ 26,L(done_return_value) /* struct in r3:r4 ? */ - add %r6,%r6,%r30 /* adjust pointer */ - stswi %r4,%r6,4 /* store last four bytes */ - b L(done_return_value) + /* + * The C code always allocates a properly-aligned 8-byte bounce + * buffer to make this assembly code very simple. Just write out + * r3 and r4 to the buffer to allow the C code to handle the rest. + */ + stw %r3, 0(%r30) + stw %r4, 4(%r30) + b L(done_return_value) .LFE1: END(ffi_call_SYSV) diff --git a/libffi/src/prep_cif.c b/libffi/src/prep_cif.c index e0a0c68cac5..eb6834199b1 100644 --- a/libffi/src/prep_cif.c +++ b/libffi/src/prep_cif.c @@ -1,5 +1,6 @@ /* ----------------------------------------------------------------------- - prep_cif.c - Copyright (c) 1996, 1998, 2007 Red Hat, Inc. + prep_cif.c - Copyright (c) 2011, 2012 Anthony Green + Copyright (c) 1996, 1998, 2007 Red Hat, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -37,17 +38,21 @@ static ffi_status initialize_aggregate(ffi_type *arg) { ffi_type **ptr; - FFI_ASSERT(arg != NULL); + if (UNLIKELY(arg == NULL || arg->elements == NULL)) + return FFI_BAD_TYPEDEF; - FFI_ASSERT(arg->elements != NULL); - FFI_ASSERT(arg->size == 0); - FFI_ASSERT(arg->alignment == 0); + arg->size = 0; + arg->alignment = 0; ptr = &(arg->elements[0]); + if (UNLIKELY(ptr == 0)) + return FFI_BAD_TYPEDEF; + while ((*ptr) != NULL) { - if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) + if (UNLIKELY(((*ptr)->size == 0) + && (initialize_aggregate((*ptr)) != FFI_OK))) return FFI_BAD_TYPEDEF; /* Perform a sanity check on the argument type */ @@ -85,24 +90,38 @@ static ffi_status initialize_aggregate(ffi_type *arg) /* Perform machine independent ffi_cif preparation, then call machine dependent routine. */ -ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, - ffi_type *rtype, ffi_type **atypes) +/* For non variadic functions isvariadic should be 0 and + nfixedargs==ntotalargs. + + For variadic calls, isvariadic should be 1 and nfixedargs + and ntotalargs set as appropriate. nfixedargs must always be >=1 */ + + +ffi_status FFI_HIDDEN ffi_prep_cif_core(ffi_cif *cif, ffi_abi abi, + unsigned int isvariadic, + unsigned int nfixedargs, + unsigned int ntotalargs, + ffi_type *rtype, ffi_type **atypes) { unsigned bytes = 0; unsigned int i; ffi_type **ptr; FFI_ASSERT(cif != NULL); + FFI_ASSERT((!isvariadic) || (nfixedargs >= 1)); + FFI_ASSERT(nfixedargs <= ntotalargs); + #ifndef X86_WIN32 - FFI_ASSERT((abi > FFI_FIRST_ABI) && (abi <= FFI_DEFAULT_ABI)); + if (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI)) + return FFI_BAD_ABI; #else - FFI_ASSERT(abi > FFI_FIRST_ABI && abi <= FFI_DEFAULT_ABI - || abi == FFI_THISCALL); + if (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI || abi == FFI_THISCALL)) + return FFI_BAD_ABI; #endif cif->abi = abi; cif->arg_types = atypes; - cif->nargs = nargs; + cif->nargs = ntotalargs; cif->rtype = rtype; cif->flags = 0; @@ -115,7 +134,7 @@ ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, FFI_ASSERT_VALID_TYPE(cif->rtype); /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ -#if !defined M68K && !defined __i386__ && !defined __x86_64__ && !defined S390 && !defined PA +#if !defined M68K && !defined X86_ANY && !defined S390 && !defined PA /* Make space for the return structure pointer */ if (cif->rtype->type == FFI_TYPE_STRUCT #ifdef SPARC @@ -136,7 +155,7 @@ ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, check after the initialization. */ FFI_ASSERT_VALID_TYPE(*ptr); -#if !defined __i386__ && !defined __x86_64__ && !defined S390 && !defined PA +#if !defined X86_ANY && !defined S390 && !defined PA #ifdef SPARC if (((*ptr)->type == FFI_TYPE_STRUCT && ((*ptr)->size > 16 || cif->abi != FFI_V9)) @@ -158,10 +177,31 @@ ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, cif->bytes = bytes; /* Perform machine dependent cif processing */ +#ifdef FFI_TARGET_SPECIFIC_VARIADIC + if (isvariadic) + return ffi_prep_cif_machdep_var(cif, nfixedargs, ntotalargs); +#endif + return ffi_prep_cif_machdep(cif); } #endif /* not __CRIS__ */ +ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, + ffi_type *rtype, ffi_type **atypes) +{ + return ffi_prep_cif_core(cif, abi, 0, nargs, nargs, rtype, atypes); +} + +ffi_status ffi_prep_cif_var(ffi_cif *cif, + ffi_abi abi, + unsigned int nfixedargs, + unsigned int ntotalargs, + ffi_type *rtype, + ffi_type **atypes) +{ + return ffi_prep_cif_core(cif, abi, 1, nfixedargs, ntotalargs, rtype, atypes); +} + #if FFI_CLOSURES ffi_status diff --git a/libffi/src/s390/ffitarget.h b/libffi/src/s390/ffitarget.h index 386273897e2..97fa5c4b671 100644 --- a/libffi/src/s390/ffitarget.h +++ b/libffi/src/s390/ffitarget.h @@ -1,5 +1,6 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 1996-2003 Red Hat, Inc. Target configuration macros for S390. Permission is hereby granted, free of charge, to any person obtaining @@ -27,6 +28,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + #if defined (__s390x__) #ifndef S390X #define S390X @@ -42,8 +47,8 @@ typedef signed long ffi_sarg; typedef enum ffi_abi { FFI_FIRST_ABI = 0, FFI_SYSV, - FFI_DEFAULT_ABI = FFI_SYSV, - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 + FFI_LAST_ABI, + FFI_DEFAULT_ABI = FFI_SYSV } ffi_abi; #endif diff --git a/libffi/src/sh/ffitarget.h b/libffi/src/sh/ffitarget.h index 218ae3d0a4a..a36bf420704 100644 --- a/libffi/src/sh/ffitarget.h +++ b/libffi/src/sh/ffitarget.h @@ -1,5 +1,6 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 1996-2003 Red Hat, Inc. Target configuration macros for SuperH. Permission is hereby granted, free of charge, to any person obtaining @@ -27,6 +28,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + /* ---- Generic type definitions ----------------------------------------- */ #ifndef LIBFFI_ASM @@ -36,8 +41,8 @@ typedef signed long ffi_sarg; typedef enum ffi_abi { FFI_FIRST_ABI = 0, FFI_SYSV, - FFI_DEFAULT_ABI = FFI_SYSV, - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 + FFI_LAST_ABI, + FFI_DEFAULT_ABI = FFI_SYSV } ffi_abi; #endif diff --git a/libffi/src/sh64/ffitarget.h b/libffi/src/sh64/ffitarget.h index 4e922fc79f1..08a6fe96cc7 100644 --- a/libffi/src/sh64/ffitarget.h +++ b/libffi/src/sh64/ffitarget.h @@ -1,5 +1,6 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 1996-2003 Red Hat, Inc. Target configuration macros for SuperH - SHmedia. Permission is hereby granted, free of charge, to any person obtaining @@ -27,6 +28,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + /* ---- Generic type definitions ----------------------------------------- */ #ifndef LIBFFI_ASM @@ -36,8 +41,8 @@ typedef signed long ffi_sarg; typedef enum ffi_abi { FFI_FIRST_ABI = 0, FFI_SYSV, - FFI_DEFAULT_ABI = FFI_SYSV, - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 + FFI_LAST_ABI, + FFI_DEFAULT_ABI = FFI_SYSV } ffi_abi; #define FFI_EXTRA_CIF_FIELDS long long flags2 diff --git a/libffi/src/sparc/ffi.c b/libffi/src/sparc/ffi.c index 1d01f59ec23..1ac5d464e8b 100644 --- a/libffi/src/sparc/ffi.c +++ b/libffi/src/sparc/ffi.c @@ -1,5 +1,6 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 1996, 2003, 2004, 2007, 2008 Red Hat, Inc. + ffi.c - Copyright (c) 2011 Anthony Green + Copyright (c) 1996, 2003-2004, 2007-2008 Red Hat, Inc. SPARC Foreign Function Interface @@ -406,8 +407,50 @@ void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) /* We don't yet support calling 32bit code from 64bit */ FFI_ASSERT(0); #else - ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes, - cif->flags, rvalue, fn); + if (rvalue && (cif->rtype->type == FFI_TYPE_STRUCT +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + || cif->flags == FFI_TYPE_LONGDOUBLE +#endif + )) + { + /* For v8, we need an "unimp" with size of returning struct */ + /* behind "call", so we alloc some executable space for it. */ + /* l7 is used, we need to make sure v8.S doesn't use %l7. */ + unsigned int *call_struct = NULL; + ffi_closure_alloc(32, &call_struct); + if (call_struct) + { + unsigned long f = (unsigned long)fn; + call_struct[0] = 0xae10001f; /* mov %i7, %l7 */ + call_struct[1] = 0xbe10000f; /* mov %o7, %i7 */ + call_struct[2] = 0x03000000 | f >> 10; /* sethi %hi(fn), %g1 */ + call_struct[3] = 0x9fc06000 | (f & 0x3ff); /* jmp %g1+%lo(fn), %o7 */ + call_struct[4] = 0x01000000; /* nop */ + if (cif->rtype->size < 0x7f) + call_struct[5] = cif->rtype->size; /* unimp */ + else + call_struct[5] = 0x01000000; /* nop */ + call_struct[6] = 0x81c7e008; /* ret */ + call_struct[7] = 0xbe100017; /* mov %l7, %i7 */ + asm volatile ("iflush %0; iflush %0+8; iflush %0+16; iflush %0+24" : : + "r" (call_struct) : "memory"); + /* SPARC v8 requires 5 instructions for flush to be visible */ + asm volatile ("nop; nop; nop; nop; nop"); + ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes, + cif->flags, rvalue, call_struct); + ffi_closure_free(call_struct); + } + else + { + ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes, + cif->flags, rvalue, fn); + } + } + else + { + ffi_call_v8(ffi_prep_args_v8, &ecif, cif->bytes, + cif->flags, rvalue, fn); + } #endif break; case FFI_V9: @@ -425,7 +468,6 @@ void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) FFI_ASSERT(0); break; } - } @@ -447,7 +489,8 @@ ffi_prep_closure_loc (ffi_closure* closure, #ifdef SPARC64 /* Trampoline address is equal to the closure address. We take advantage of that to reduce the trampoline size by 8 bytes. */ - FFI_ASSERT (cif->abi == FFI_V9); + if (cif->abi != FFI_V9) + return FFI_BAD_ABI; fn = (unsigned long) ffi_closure_v9; tramp[0] = 0x83414000; /* rd %pc, %g1 */ tramp[1] = 0xca586010; /* ldx [%g1+16], %g5 */ @@ -456,7 +499,8 @@ ffi_prep_closure_loc (ffi_closure* closure, *((unsigned long *) &tramp[4]) = fn; #else unsigned long ctx = (unsigned long) codeloc; - FFI_ASSERT (cif->abi == FFI_V8); + if (cif->abi != FFI_V8) + return FFI_BAD_ABI; fn = (unsigned long) ffi_closure_v8; tramp[0] = 0x03000000 | fn >> 10; /* sethi %hi(fn), %g1 */ tramp[1] = 0x05000000 | ctx >> 10; /* sethi %hi(ctx), %g2 */ @@ -468,13 +512,13 @@ ffi_prep_closure_loc (ffi_closure* closure, closure->fun = fun; closure->user_data = user_data; - /* Flush the Icache. FIXME: alignment isn't certain, assume 8 bytes */ + /* Flush the Icache. closure is 8 bytes aligned. */ #ifdef SPARC64 - asm volatile ("flush %0" : : "r" (closure) : "memory"); - asm volatile ("flush %0" : : "r" (((char *) closure) + 8) : "memory"); + asm volatile ("flush %0; flush %0+8" : : "r" (closure) : "memory"); #else - asm volatile ("iflush %0" : : "r" (closure) : "memory"); - asm volatile ("iflush %0" : : "r" (((char *) closure) + 8) : "memory"); + asm volatile ("iflush %0; iflush %0+8" : : "r" (closure) : "memory"); + /* SPARC v8 requires 5 instructions for flush to be visible */ + asm volatile ("nop; nop; nop; nop; nop"); #endif return FFI_OK; diff --git a/libffi/src/sparc/ffitarget.h b/libffi/src/sparc/ffitarget.h index 50554b8805d..d89f7877a81 100644 --- a/libffi/src/sparc/ffitarget.h +++ b/libffi/src/sparc/ffitarget.h @@ -1,5 +1,6 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 1996-2003 Red Hat, Inc. Target configuration macros for SPARC. Permission is hereby granted, free of charge, to any person obtaining @@ -27,6 +28,10 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + /* ---- System specific configurations ----------------------------------- */ #if defined(__arch64__) || defined(__sparcv9) @@ -44,12 +49,12 @@ typedef enum ffi_abi { FFI_V8, FFI_V8PLUS, FFI_V9, + FFI_LAST_ABI, #ifdef SPARC64 - FFI_DEFAULT_ABI = FFI_V9, + FFI_DEFAULT_ABI = FFI_V9 #else - FFI_DEFAULT_ABI = FFI_V8, + FFI_DEFAULT_ABI = FFI_V8 #endif - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 } ffi_abi; #endif diff --git a/libffi/src/sparc/v9.S b/libffi/src/sparc/v9.S index bf31a2b5110..489ff0293f2 100644 --- a/libffi/src/sparc/v9.S +++ b/libffi/src/sparc/v9.S @@ -32,7 +32,7 @@ /* Only compile this in for 64bit builds, because otherwise the object file will have inproper architecture due to used instructions. */ -#define STACKFRAME 176 /* Minimum stack framesize for SPARC 64-bit */ +#define STACKFRAME 128 /* Minimum stack framesize for SPARC */ #define STACK_BIAS 2047 #define ARGS (128) /* Offset of register area in frame */ diff --git a/libffi/src/x86/ffi.c b/libffi/src/x86/ffi.c index 88edbc102f9..9343c260728 100644 --- a/libffi/src/x86/ffi.c +++ b/libffi/src/x86/ffi.c @@ -228,12 +228,10 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif) switch (cif->rtype->type) { case FFI_TYPE_VOID: -#if defined(X86) || defined (X86_WIN32) || defined(X86_FREEBSD) || defined(X86_DARWIN) || defined(X86_WIN64) case FFI_TYPE_UINT8: case FFI_TYPE_UINT16: case FFI_TYPE_SINT8: case FFI_TYPE_SINT16: -#endif #ifdef X86_WIN64 case FFI_TYPE_UINT32: case FFI_TYPE_SINT32: @@ -364,27 +362,8 @@ void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) { #ifdef X86_WIN64 case FFI_WIN64: - { - /* Make copies of all struct arguments - NOTE: not sure if responsibility should be here or in caller */ - unsigned int i; - for (i=0; i < cif->nargs;i++) { - size_t size = cif->arg_types[i]->size; - if ((cif->arg_types[i]->type == FFI_TYPE_STRUCT - && (size != 1 && size != 2 && size != 4 && size != 8)) -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE - || cif->arg_types[i]->type == FFI_TYPE_LONGDOUBLE -#endif - ) - { - void *local = alloca(size); - memcpy(local, avalue[i], size); - avalue[i] = local; - } - } - ffi_call_win64(ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - } + ffi_call_win64(ffi_prep_args, &ecif, cif->bytes, + cif->flags, ecif.rvalue, fn); break; #elif defined(X86_WIN32) case FFI_SYSV: @@ -614,7 +593,7 @@ ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue, { unsigned char *__tramp = (unsigned char*)(TRAMP); \ unsigned int __fun = (unsigned int)(FUN); \ unsigned int __ctx = (unsigned int)(CTX); \ - unsigned int __dis = __fun - (__ctx + 49); \ + unsigned int __dis = __fun - (__ctx + 22); \ unsigned short __size = (unsigned short)(SIZE); \ *(unsigned int *) &__tramp[0] = 0x8324048b; /* mov (%esp), %eax */ \ *(unsigned int *) &__tramp[4] = 0x4c890cec; /* sub $12, %esp */ \ @@ -720,9 +699,6 @@ ffi_prep_raw_closure_loc (ffi_raw_closure* closure, int i; if (cif->abi != FFI_SYSV) { -#ifdef X86_WIN32 - if (cif->abi != FFI_THISCALL) -#endif return FFI_BAD_ABI; } @@ -737,20 +713,10 @@ ffi_prep_raw_closure_loc (ffi_raw_closure* closure, FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_LONGDOUBLE); } -#ifdef X86_WIN32 - if (cif->abi == FFI_SYSV) - { -#endif + FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, codeloc); -#ifdef X86_WIN32 - } - else if (cif->abi == FFI_THISCALL) - { - FFI_INIT_TRAMPOLINE_THISCALL (&closure->tramp[0], &ffi_closure_raw_SYSV, - codeloc, cif->bytes); - } -#endif + closure->cif = cif; closure->user_data = user_data; closure->fun = fun; diff --git a/libffi/src/x86/ffi64.c b/libffi/src/x86/ffi64.c index bd907d7208c..defd7744cce 100644 --- a/libffi/src/x86/ffi64.c +++ b/libffi/src/x86/ffi64.c @@ -1,7 +1,8 @@ /* ----------------------------------------------------------------------- - ffi64.c - Copyright (c) 2002, 2007 Bo Thorsen <bo@suse.de> + ffi64.c - Copyright (c) 20011 Anthony Green Copyright (c) 2008, 2010 Red Hat, Inc. - + Copyright (c) 2002, 2007 Bo Thorsen <bo@suse.de> + x86-64 Foreign Function Interface Permission is hereby granted, free of charge, to any person obtaining @@ -426,7 +427,7 @@ ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) /* If the return value is passed in memory, add the pointer as the first integer argument. */ if (ret_in_memory) - reg_args->gpr[gprcount++] = (long) rvalue; + reg_args->gpr[gprcount++] = (unsigned long) rvalue; avn = cif->nargs; arg_types = cif->arg_types; @@ -498,12 +499,21 @@ ffi_prep_closure_loc (ffi_closure* closure, { volatile unsigned short *tramp; + /* Sanity check on the cif ABI. */ + { + int abi = cif->abi; + if (UNLIKELY (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI))) + return FFI_BAD_ABI; + } + tramp = (volatile unsigned short *) &closure->tramp[0]; tramp[0] = 0xbb49; /* mov <code>, %r11 */ - *(void * volatile *) &tramp[1] = ffi_closure_unix64; + *((unsigned long long * volatile) &tramp[1]) + = (unsigned long) ffi_closure_unix64; tramp[5] = 0xba49; /* mov <data>, %r10 */ - *(void * volatile *) &tramp[6] = codeloc; + *((unsigned long long * volatile) &tramp[6]) + = (unsigned long) codeloc; /* Set the carry bit iff the function uses any sse registers. This is clc or stc, together with the first byte of the jmp. */ @@ -542,7 +552,7 @@ ffi_closure_unix64_inner(ffi_closure *closure, void *rvalue, { /* The return value goes in memory. Arrange for the closure return value to go directly back to the original caller. */ - rvalue = (void *) reg_args->gpr[gprcount++]; + rvalue = (void *) (unsigned long) reg_args->gpr[gprcount++]; /* We don't have to do anything in asm for the return. */ ret = FFI_TYPE_VOID; } diff --git a/libffi/src/x86/ffitarget.h b/libffi/src/x86/ffitarget.h index dfecd1b3c6e..54a61212e4f 100644 --- a/libffi/src/x86/ffitarget.h +++ b/libffi/src/x86/ffitarget.h @@ -1,6 +1,7 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003, 2010 Red Hat, Inc. - Copyright (C) 2008 Free Software Foundation, Inc. + ffitarget.h - Copyright (c) 2012 Anthony Green + Copyright (c) 1996-2003, 2010 Red Hat, Inc. + Copyright (C) 2008 Free Software Foundation, Inc. Target configuration macros for x86 and x86-64. @@ -29,8 +30,15 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + /* ---- System specific configurations ----------------------------------- */ +/* For code common to all platforms on x86 and x86_64. */ +#define X86_ANY + #if defined (X86_64) && defined (__i386__) #undef X86_64 #define X86 @@ -53,9 +61,15 @@ typedef unsigned long long ffi_arg; typedef long long ffi_sarg; #endif #else +#if defined __x86_64__ && !defined __LP64__ +#define FFI_SIZEOF_ARG 8 +typedef unsigned long long ffi_arg; +typedef long long ffi_sarg; +#else typedef unsigned long ffi_arg; typedef signed long ffi_sarg; #endif +#endif typedef enum ffi_abi { FFI_FIRST_ABI = 0, @@ -66,28 +80,26 @@ typedef enum ffi_abi { FFI_STDCALL, FFI_THISCALL, FFI_FASTCALL, + FFI_LAST_ABI, /* TODO: Add fastcall support for the sake of completeness */ - FFI_DEFAULT_ABI = FFI_SYSV, -#endif + FFI_DEFAULT_ABI = FFI_SYSV -#ifdef X86_WIN64 +#elif defined(X86_WIN64) FFI_WIN64, - FFI_DEFAULT_ABI = FFI_WIN64, -#else + FFI_LAST_ABI, + FFI_DEFAULT_ABI = FFI_WIN64 +#else /* ---- Intel x86 and AMD x86-64 - */ -#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__) || defined(__i386) || defined(__amd64)) FFI_SYSV, FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ + FFI_LAST_ABI, #if defined(__i386__) || defined(__i386) - FFI_DEFAULT_ABI = FFI_SYSV, + FFI_DEFAULT_ABI = FFI_SYSV #else - FFI_DEFAULT_ABI = FFI_UNIX64, + FFI_DEFAULT_ABI = FFI_UNIX64 #endif #endif -#endif /* X86_WIN64 */ - - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 } ffi_abi; #endif diff --git a/libffi/src/x86/win64.S b/libffi/src/x86/win64.S index 6e9181867de..fcdb270faf5 100644 --- a/libffi/src/x86/win64.S +++ b/libffi/src/x86/win64.S @@ -232,10 +232,18 @@ ret_void$: ffi_call_win64 ENDP _TEXT ENDS END -#else + +#else + +#ifdef SYMBOL_UNDERSCORE +#define SYMBOL_NAME(name) _##name +#else +#define SYMBOL_NAME(name) name +#endif + .text -.extern _ffi_closure_win64_inner +.extern SYMBOL_NAME(ffi_closure_win64_inner) # ffi_closure_win64 will be called with these registers set: # rax points to 'closure' @@ -246,8 +254,8 @@ END # call ffi_closure_win64_inner for the actual work, then return the result. # .balign 16 - .globl _ffi_closure_win64 -_ffi_closure_win64: + .globl SYMBOL_NAME(ffi_closure_win64) +SYMBOL_NAME(ffi_closure_win64): # copy register arguments onto stack test $1,%r11 jne .Lfirst_is_float @@ -287,7 +295,7 @@ _ffi_closure_win64: mov %rax, %rcx # context is first parameter mov %rsp, %rdx # stack is second parameter add $48, %rdx # point to start of arguments - mov $_ffi_closure_win64_inner, %rax + mov $SYMBOL_NAME(ffi_closure_win64_inner), %rax callq *%rax # call the real closure function add $40, %rsp movq %rax, %xmm0 # If the closure returned a float, @@ -296,8 +304,8 @@ _ffi_closure_win64: .ffi_closure_win64_end: .balign 16 - .globl _ffi_call_win64 -_ffi_call_win64: + .globl SYMBOL_NAME(ffi_call_win64) +SYMBOL_NAME(ffi_call_win64): # copy registers onto stack mov %r9,32(%rsp) mov %r8,24(%rsp) diff --git a/libffi/testsuite/libffi.call/cls_double_va.c b/libffi/testsuite/libffi.call/cls_double_va.c index e769caf47b9..67e44a4ed3d 100644 --- a/libffi/testsuite/libffi.call/cls_double_va.c +++ b/libffi/testsuite/libffi.call/cls_double_va.c @@ -37,7 +37,8 @@ int main (void) arg_types[1] = &ffi_type_double; arg_types[2] = NULL; - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint, + /* This printf call is variadic */ + CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, &ffi_type_sint, arg_types) == FFI_OK); args[0] = &format; @@ -49,6 +50,9 @@ int main (void) printf("res: %d\n", (int) res); // { dg-output "\nres: 4" } + /* The call to cls_double_va_fn is static, so have to use a normal prep_cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint, arg_types) == FFI_OK); + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL, code) == FFI_OK); res = ((int(*)(char*, double))(code))(format, doubleArg); diff --git a/libffi/testsuite/libffi.call/cls_longdouble_va.c b/libffi/testsuite/libffi.call/cls_longdouble_va.c index 07780ede4cd..6b8484a8595 100644 --- a/libffi/testsuite/libffi.call/cls_longdouble_va.c +++ b/libffi/testsuite/libffi.call/cls_longdouble_va.c @@ -37,7 +37,8 @@ int main (void) arg_types[1] = &ffi_type_longdouble; arg_types[2] = NULL; - CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint, + /* This printf call is variadic */ + CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, &ffi_type_sint, arg_types) == FFI_OK); args[0] = &format; @@ -49,6 +50,10 @@ int main (void) printf("res: %d\n", (int) res); // { dg-output "\nres: 4" } + /* The call to cls_longdouble_va_fn is static, so have to use a normal prep_cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint, + arg_types) == FFI_OK); + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_longdouble_va_fn, NULL, code) == FFI_OK); res = ((int(*)(char*, long double))(code))(format, ldArg); diff --git a/libffi/testsuite/libffi.call/err_bad_abi.c b/libffi/testsuite/libffi.call/err_bad_abi.c index ce0f3bb2782..f5a73179ec9 100644 --- a/libffi/testsuite/libffi.call/err_bad_abi.c +++ b/libffi/testsuite/libffi.call/err_bad_abi.c @@ -4,7 +4,8 @@ PR: none. Originator: Blake Chaffin 6/6/2007 */ -/* { dg-do run { xfail *-*-* } } */ +/* { dg-do run } */ + #include "ffitest.h" static void diff --git a/libffi/testsuite/libffi.call/err_bad_typedef.c b/libffi/testsuite/libffi.call/err_bad_typedef.c index bd2fc54a0e8..253927392d3 100644 --- a/libffi/testsuite/libffi.call/err_bad_typedef.c +++ b/libffi/testsuite/libffi.call/err_bad_typedef.c @@ -4,7 +4,8 @@ PR: none. Originator: Blake Chaffin 6/6/2007 */ -/* { dg-do run { xfail *-*-* } } */ +/* { dg-do run } */ + #include "ffitest.h" int main (void) diff --git a/libffi/testsuite/libffi.call/float_va.c b/libffi/testsuite/libffi.call/float_va.c new file mode 100644 index 00000000000..2039ae54791 --- /dev/null +++ b/libffi/testsuite/libffi.call/float_va.c @@ -0,0 +1,107 @@ +/* Area: fp and variadics + Purpose: check fp inputs and returns work on variadics, even the fixed params + Limitations: None + PR: none + Originator: <david.gilbert@linaro.org> 2011-01-25 + + Intended to stress the difference in ABI on ARM vfp +*/ + +/* { dg-do run } */ + +#include <stdarg.h> + +#include "ffitest.h" + +/* prints out all the parameters, and returns the sum of them all. + * 'x' is the number of variadic parameters all of which are double in this test + */ +double float_va_fn(unsigned int x, double y,...) +{ + double total=0.0; + va_list ap; + unsigned int i; + + total+=(double)x; + total+=y; + + printf("%u: %.1lf :", x, y); + + va_start(ap, y); + for(i=0;i<x;i++) + { + double arg=va_arg(ap, double); + total+=arg; + printf(" %d:%.1lf ", i, arg); + } + va_end(ap); + + printf(" total: %.1lf\n", total); + + return total; +} + +int main (void) +{ + ffi_cif cif; + + ffi_type *arg_types[5]; + void *values[5]; + double doubles[5]; + unsigned int firstarg; + double resfp; + + /* First test, pass float_va_fn(0,2.0) - note there are no actual + * variadic parameters, but it's declared variadic so the ABI may be + * different. */ + /* Call it statically and then via ffi */ + resfp=float_va_fn(0,2.0); + // { dg-output "0: 2.0 : total: 2.0" } + printf("compiled: %.1lf\n", resfp); + // { dg-output "\ncompiled: 2.0" } + + arg_types[0] = &ffi_type_uint; + arg_types[1] = &ffi_type_double; + arg_types[2] = NULL; + CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 2, 2, + &ffi_type_double, arg_types) == FFI_OK); + + firstarg = 0; + doubles[0] = 2.0; + values[0] = &firstarg; + values[1] = &doubles[0]; + ffi_call(&cif, FFI_FN(float_va_fn), &resfp, values); + // { dg-output "\n0: 2.0 : total: 2.0" } + printf("ffi: %.1lf\n", resfp); + // { dg-output "\nffi: 2.0" } + + /* Second test, float_va_fn(2,2.0,3.0,4.0), now with variadic params */ + /* Call it statically and then via ffi */ + resfp=float_va_fn(2,2.0,3.0,4.0); + // { dg-output "\n2: 2.0 : 0:3.0 1:4.0 total: 11.0" } + printf("compiled: %.1lf\n", resfp); + // { dg-output "\ncompiled: 11.0" } + + arg_types[0] = &ffi_type_uint; + arg_types[1] = &ffi_type_double; + arg_types[2] = &ffi_type_double; + arg_types[3] = &ffi_type_double; + arg_types[4] = NULL; + CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 2, 4, + &ffi_type_double, arg_types) == FFI_OK); + + firstarg = 2; + doubles[0] = 2.0; + doubles[1] = 3.0; + doubles[2] = 4.0; + values[0] = &firstarg; + values[1] = &doubles[0]; + values[2] = &doubles[1]; + values[3] = &doubles[2]; + ffi_call(&cif, FFI_FN(float_va_fn), &resfp, values); + // { dg-output "\n2: 2.0 : 0:3.0 1:4.0 total: 11.0" } + printf("ffi: %.1lf\n", resfp); + // { dg-output "\nffi: 11.0" } + + exit(0); +} diff --git a/libffi/testsuite/libffi.call/return_sc.c b/libffi/testsuite/libffi.call/return_sc.c index 19608ee7c8b..a36cf3eb880 100644 --- a/libffi/testsuite/libffi.call/return_sc.c +++ b/libffi/testsuite/libffi.call/return_sc.c @@ -30,7 +30,7 @@ int main (void) sc < (signed char) 127; sc++) { ffi_call(&cif, FFI_FN(return_sc), &rint, values); - CHECK(rint == (ffi_arg) sc); + CHECK((signed char)rint == sc); } exit(0); } diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 01a3ac230a6..4d8294b44f6 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,8 +1,100 @@ +2012-03-07 Walter Lee <walt@tilera.com> + + * config/tilepro/atomic.c: Rename "atomic_" prefix to + "arch_atomic_". + (atomic_xor): Rename and move definition to + config/tilepro/atomic.h. + (atomic_nand): Ditto. + * config/tilepro/atomic.h: Rename "atomic_" prefix to + "arch_atomic_". + (arch_atomic_xor): Move from config/tilepro/atomic.c. + (arch_atomic_nand): Ditto. + +2012-03-07 Georg-Johann Lay <avr@gjlay.de> + + PR target/52507 + * config/avr/lib1funcs.S (__movmemx_hi): Fix loop label in RAM-part. + +2012-03-07 Georg-Johann Lay <avr@gjlay.de> + + PR target/52505 + * config/avr/lib1funcs.S (__xload_1): Don't read unintentionally + from RAM. + +2012-03-07 Georg-Johann Lay <avr@gjlay.de> + + PR target/52461 + PR target/52508 + * config/avr/lib1funcs.S (__do_copy_data): Clear RAMPZ after usage + if RAMPZ affects reading from RAM. + (__tablejump_elpm__): Ditto. + (.xload): Ditto. + (__movmemx_hi): Ditto. + (__do_global_ctors): Right condition for RAMPZ usage is "have ELPM". + (__do_global_dtors): Ditto. + (__xload_1, __xload_2, __xload_3, __xload_4): Ditto. + (__movmemx_hi): Ditto. + +2012-03-05 Richard Henderson <rth@redhat.com> + + * longlong.h [ARM] (umul_ppmm): Use umull for arm3m and later. + [ARM] (count_trailing_zeros): Use the builtin. + +2012-03-01 Kai Tietz <ktietz@redhat.com> + + * soft-fp: Imported from glibc upstream. + +2012-02-28 Kai Tietz <ktietz@redhat.com> + + * config/i386/sfp-machine.h (_FP_STRUCT_LAYOUT): Define it + for mingw-targets as attribute gcc_struct. + +2012-02-28 Ian Lance Taylor <iant@google.com> + + * generic-morestack.c (__splitstack_releasecontext): Correct call + to __morestack_release_segments. + +2012-02-27 Samuel Thibault <samuel.thibault@ens-lyon.org> + + PR target/52390 + * generic-morestack.c (__generic_morestack_set_initial_sp): Test + for __linux__ when removing signals from __morestack_fullmask. + +2012-02-23 Georg-Johann Lay <avr@gjlay.de> + + PR target/52261 + * config/avr/lib1funcs.S (__AVR__XMEGA__): Fix tippo to __AVR_XMEGA__. + +2012-02-23 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> + + * config/ia64/crtbegin.S: Use HAVE_INITFINI_ARRAY_SUPPORT + instead of HAVE_INITFINI_ARRAY. + * config/ia64/crtend.S: Likewise. + +2012-02-20 Kai Tietz <ktietz@redhat.com> + + PR libstdc++/52300 + * gthr.h (GTHREAD_USE_WEAK): Define as zero for mingw. + + * config.host (i686-*-mingw*): Set md_unwind_header only for dw2-mode + to w32-unwind.h header. + +2012-02-19 Richard Sandiford <rdsandiford@googlemail.com> + + * config.host (mips64*-*-linux*, mipsisa64*-*-linux*) + (mips*-*-linux*): Remove t-slibgcc-libgcc. + * config/mips/t-mips16 (LIB1ASMFUNCS): Remove __mips16_rdhwr. + * config/mips/mips16.S (__mips16_rdhwr): Delete. + +2012-02-19 Richard Sandiford <rdsandiford@googlemail.com> + + * config/mips/mips16.S (CALL_STUB_RET): Add CFI information. + 2012-02-15 Iain Sandoe <iains@gcc.gnu.org> PR libitm/52220 * config/darwin-crt-tm.c: Correct typo. - + 2012-02-15 Iain Sandoe <iains@gcc.gnu.org> Patrick Marlier <patrick.marlier@gmail.com> @@ -15,7 +107,7 @@ PR libitm/52042 * config/darwin-crt-tm.c (getTMCloneTable): New function. (__doTMRegistrations): Call it. - (__doTMdeRegistrations): Likewise. + (__doTMdeRegistrations): Likewise. 2012-01-15 Georg-Johann Lay <avr@gjlay.de> Anatoly Sokolov <aesok@post.ru> diff --git a/libgcc/config.host b/libgcc/config.host index 5ad27caa172..257622a09ff 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -606,6 +606,7 @@ i[34567]86-*-mingw*) tmake_eh_file="i386/t-sjlj-eh" else tmake_eh_file="i386/t-dw2-eh" + md_unwind_header=i386/w32-unwind.h fi # Shared libgcc DLL install dir depends on cross/native build. if test x${build} = x${host} ; then @@ -614,7 +615,6 @@ i[34567]86-*-mingw*) tmake_dlldir_file="i386/t-dlldir-x" fi tmake_file="${tmake_file} ${tmake_eh_file} ${tmake_dlldir_file} i386/t-slibgcc-cygming i386/t-cygming i386/t-mingw32 i386/t-crtfm i386/t-chkstk t-dfprules" - md_unwind_header=i386/w32-unwind.h ;; x86_64-*-mingw*) case ${target_thread_file} in @@ -746,12 +746,12 @@ mips*-*-netbsd*) # NetBSD/mips, either endian. ;; mips64*-*-linux* | mipsisa64*-*-linux*) extra_parts="$extra_parts crtfastmath.o" - tmake_file="${tmake_file} t-crtfm mips/t-mips16 mips/t-tpbit t-slibgcc-libgcc" + tmake_file="${tmake_file} t-crtfm mips/t-mips16 mips/t-tpbit" md_unwind_header=mips/linux-unwind.h ;; mips*-*-linux*) # Linux MIPS, either endian. extra_parts="$extra_parts crtfastmath.o" - tmake_file="${tmake_file} t-crtfm mips/t-mips16 t-slibgcc-libgcc" + tmake_file="${tmake_file} t-crtfm mips/t-mips16" md_unwind_header=mips/linux-unwind.h ;; mips*-*-openbsd*) diff --git a/libgcc/config/avr/lib1funcs.S b/libgcc/config/avr/lib1funcs.S index eba0486452b..9bd235bb7b0 100644 --- a/libgcc/config/avr/lib1funcs.S +++ b/libgcc/config/avr/lib1funcs.S @@ -1696,7 +1696,7 @@ DEFUN __prologue_saves__ sub r28,r26 out __SP_L__,r28 clr r29 -#elif defined (__AVR__XMEGA__) +#elif defined (__AVR_XMEGA__) in r28,__SP_L__ in r29,__SP_H__ sub r28,r26 @@ -1752,7 +1752,7 @@ DEFUN __epilogue_restores__ add r28,r30 out __SP_L__,r28 mov r28, r26 -#elif defined (__AVR__XMEGA__) +#elif defined (__AVR_XMEGA__) ldd r27,Y+1 add r28,r30 adc r29,__zero_reg__ @@ -1893,6 +1893,10 @@ DEFUN __do_copy_data cpc r27, r17 brne .L__do_copy_data_loop #endif /* !defined(__AVR_HAVE_ELPMX__) && !defined(__AVR_HAVE_ELPM__) */ +#if defined (__AVR_HAVE_ELPM__) && defined (__AVR_HAVE_RAMPD__) + ;; Reset RAMPZ to 0 so that EBI devices don't read garbage from RAM + out __RAMPZ__, __zero_reg__ +#endif /* ELPM && RAMPD */ ENDF __do_copy_data #endif /* L_copy_data */ @@ -1920,7 +1924,7 @@ ENDF __do_clear_bss #ifdef L_ctors .section .init6,"ax",@progbits DEFUN __do_global_ctors -#if defined(__AVR_HAVE_RAMPZ__) +#if defined(__AVR_HAVE_ELPM__) ldi r17, hi8(__ctors_start) ldi r28, lo8(__ctors_end) ldi r29, hi8(__ctors_end) @@ -1953,14 +1957,14 @@ DEFUN __do_global_ctors cpi r28, lo8(__ctors_start) cpc r29, r17 brne .L__do_global_ctors_loop -#endif /* defined(__AVR_HAVE_RAMPZ__) */ +#endif /* defined(__AVR_HAVE_ELPM__) */ ENDF __do_global_ctors #endif /* L_ctors */ #ifdef L_dtors .section .fini6,"ax",@progbits DEFUN __do_global_dtors -#if defined(__AVR_HAVE_RAMPZ__) +#if defined(__AVR_HAVE_ELPM__) ldi r17, hi8(__dtors_end) ldi r28, lo8(__dtors_start) ldi r29, hi8(__dtors_start) @@ -1993,7 +1997,7 @@ DEFUN __do_global_dtors cpi r28, lo8(__dtors_end) cpc r29, r17 brne .L__do_global_dtors_loop -#endif /* defined(__AVR_HAVE_RAMPZ__) */ +#endif /* defined(__AVR_HAVE_ELPM__) */ ENDF __do_global_dtors #endif /* L_dtors */ @@ -2001,18 +2005,21 @@ ENDF __do_global_dtors #ifdef L_tablejump_elpm DEFUN __tablejump_elpm__ -#if defined (__AVR_HAVE_ELPM__) -#if defined (__AVR_HAVE_LPMX__) +#if defined (__AVR_HAVE_ELPMX__) elpm __tmp_reg__, Z+ elpm r31, Z mov r30, __tmp_reg__ +#if defined (__AVR_HAVE_RAMPD__) + ;; Reset RAMPZ to 0 so that EBI devices don't read garbage from RAM + out __RAMPZ__, __zero_reg__ +#endif /* RAMPD */ #if defined (__AVR_HAVE_EIJMP_EICALL__) eijmp #else ijmp #endif -#else +#elif defined (__AVR_HAVE_ELPM__) elpm adiw r30, 1 push r0 @@ -2024,7 +2031,6 @@ DEFUN __tablejump_elpm__ #endif ret #endif -#endif /* defined (__AVR_HAVE_ELPM__) */ ENDF __tablejump_elpm__ #endif /* defined (L_tablejump_elpm) */ @@ -2114,11 +2120,18 @@ ENDF __load_4 adiw r30, 1 .endif #endif +#if defined (__AVR_HAVE_ELPM__) && defined (__AVR_HAVE_RAMPD__) +.if \dest == D0+\n-1 + ;; Reset RAMPZ to 0 so that EBI devices don't read garbage from RAM + out __RAMPZ__, __zero_reg__ +.endif +#endif .endm ; .xload #if defined (L_xload_1) DEFUN __xload_1 -#if defined (__AVR_HAVE_LPMX__) && !defined (__AVR_HAVE_RAMPZ__) +#if defined (__AVR_HAVE_LPMX__) && !defined (__AVR_HAVE_ELPM__) + sbrc HHI8, 7 ld D0, Z sbrs HHI8, 7 lpm D0, Z @@ -2126,14 +2139,14 @@ DEFUN __xload_1 #else sbrc HHI8, 7 rjmp 1f -#if defined (__AVR_HAVE_RAMPZ__) +#if defined (__AVR_HAVE_ELPM__) out __RAMPZ__, HHI8 -#endif /* __AVR_HAVE_RAMPZ__ */ +#endif /* __AVR_HAVE_ELPM__ */ .xload D0, 1 ret 1: ld D0, Z ret -#endif /* LPMx && ! RAMPZ */ +#endif /* LPMx && ! ELPM */ ENDF __xload_1 #endif /* L_xload_1 */ @@ -2141,9 +2154,9 @@ ENDF __xload_1 DEFUN __xload_2 sbrc HHI8, 7 rjmp 1f -#if defined (__AVR_HAVE_RAMPZ__) +#if defined (__AVR_HAVE_ELPM__) out __RAMPZ__, HHI8 -#endif /* __AVR_HAVE_RAMPZ__ */ +#endif /* __AVR_HAVE_ELPM__ */ .xload D0, 2 .xload D1, 2 ret @@ -2157,9 +2170,9 @@ ENDF __xload_2 DEFUN __xload_3 sbrc HHI8, 7 rjmp 1f -#if defined (__AVR_HAVE_RAMPZ__) +#if defined (__AVR_HAVE_ELPM__) out __RAMPZ__, HHI8 -#endif /* __AVR_HAVE_RAMPZ__ */ +#endif /* __AVR_HAVE_ELPM__ */ .xload D0, 3 .xload D1, 3 .xload D2, 3 @@ -2175,9 +2188,9 @@ ENDF __xload_3 DEFUN __xload_4 sbrc HHI8, 7 rjmp 1f -#if defined (__AVR_HAVE_RAMPZ__) +#if defined (__AVR_HAVE_ELPM__) out __RAMPZ__, HHI8 -#endif /* __AVR_HAVE_RAMPZ__ */ +#endif /* __AVR_HAVE_ELPM__ */ .xload D0, 4 .xload D1, 4 .xload D2, 4 @@ -2219,7 +2232,7 @@ DEFUN __movmemx_hi ;; Read from Flash -#if defined (__AVR_HAVE_RAMPZ__) +#if defined (__AVR_HAVE_ELPM__) out __RAMPZ__, HHI8 #endif @@ -2243,6 +2256,10 @@ DEFUN __movmemx_hi st X+, r0 sbiw LOOP, 1 brne 0b +#if defined (__AVR_HAVE_ELPM__) && defined (__AVR_HAVE_RAMPD__) + ;; Reset RAMPZ to 0 so that EBI devices don't read garbage from RAM + out __RAMPZ__, __zero_reg__ +#endif /* ELPM && RAMPD */ ret ;; Read from RAM @@ -2252,7 +2269,7 @@ DEFUN __movmemx_hi ;; and store that Byte to RAM Destination st X+, r0 sbiw LOOP, 1 - brne 0b + brne 1b ret ENDF __movmemx_hi diff --git a/libgcc/config/i386/sfp-machine.h b/libgcc/config/i386/sfp-machine.h index f2df869653f..eb4b8bfb5fd 100644 --- a/libgcc/config/i386/sfp-machine.h +++ b/libgcc/config/i386/sfp-machine.h @@ -1,3 +1,8 @@ +#ifdef __MINGW32__ + /* Make sure we are using gnu-style bitfield handling. */ +#define _FP_STRUCT_LAYOUT __attribute__ ((gcc_struct)) +#endif + #ifdef __x86_64__ #include "config/i386/64/sfp-machine.h" #else diff --git a/libgcc/config/ia64/crtbegin.S b/libgcc/config/ia64/crtbegin.S index 638489990d5..cfb54d310a8 100644 --- a/libgcc/config/ia64/crtbegin.S +++ b/libgcc/config/ia64/crtbegin.S @@ -61,7 +61,7 @@ __dso_handle: .hidden __dso_handle -#ifdef HAVE_INITFINI_ARRAY +#ifdef HAVE_INITFINI_ARRAY_SUPPORT .section .fini_array, "a" data8 @fptr(__do_global_dtors_aux) @@ -70,7 +70,7 @@ __dso_handle: data8 @fptr(__do_jv_register_classes) data8 @fptr(__do_global_ctors_aux) -#else /* !HAVE_INITFINI_ARRAY */ +#else /* !HAVE_INITFINI_ARRAY_SUPPORT */ /* * Fragment of the ELF _fini routine that invokes our dtor cleanup. * @@ -117,7 +117,7 @@ __dso_handle: mov b6 = r2 br.call.sptk.many b0 = b6 } -#endif /* !HAVE_INITFINI_ARRAY */ +#endif /* !HAVE_INITFINI_ARRAY_SUPPORT */ .section .text .align 32 diff --git a/libgcc/config/ia64/crtend.S b/libgcc/config/ia64/crtend.S index a904af9cfd9..9ee151711c5 100644 --- a/libgcc/config/ia64/crtend.S +++ b/libgcc/config/ia64/crtend.S @@ -39,10 +39,10 @@ __DTOR_END__: __JCR_END__: data8 0 -#ifdef HAVE_INITFINI_ARRAY +#ifdef HAVE_INITFINI_ARRAY_SUPPORT .global __do_global_ctors_aux .hidden __do_global_ctors_aux -#else /* !HAVE_INITFINI_ARRAY */ +#else /* !HAVE_INITFINI_ARRAY_SUPPORT */ /* * Fragment of the ELF _init routine that invokes our dtor cleanup. * @@ -71,7 +71,7 @@ __JCR_END__: br.call.sptk.many b0 = b6 ;; } -#endif /* !HAVE_INITFINI_ARRAY */ +#endif /* !HAVE_INITFINI_ARRAY_SUPPORT */ .text .align 32 diff --git a/libgcc/config/mips/mips16.S b/libgcc/config/mips/mips16.S index c82a55da6aa..abfd3f6283d 100644 --- a/libgcc/config/mips/mips16.S +++ b/libgcc/config/mips/mips16.S @@ -566,15 +566,23 @@ CALL_STUB_NO_RET (__mips16_call_stub_10, 10) being called is 16 bits, in which case the copy is unnecessary; however, it's faster to always do the copy. */ -#define CALL_STUB_RET(NAME, CODE, MODE) \ -STARTFN (NAME); \ - move $18,$31; \ - STUB_ARGS_##CODE; \ - .set noreorder; \ - jalr $2; \ - move $25,$2; \ - .set reorder; \ - MOVE_##MODE##_RET (f, $18); \ +#define CALL_STUB_RET(NAME, CODE, MODE) \ +STARTFN (NAME); \ + .cfi_startproc; \ + /* Create a fake CFA 4 bytes below the stack pointer. */ \ + .cfi_def_cfa 29,-4; \ + /* "Save" $sp in itself so we don't use the fake CFA. \ + This is: DW_CFA_val_expression r29, { DW_OP_reg29 }. */ \ + .cfi_escape 0x16,29,1,0x6d; \ + move $18,$31; \ + .cfi_register 31,18; \ + STUB_ARGS_##CODE; \ + .set noreorder; \ + jalr $2; \ + move $25,$2; \ + .set reorder; \ + MOVE_##MODE##_RET (f, $18); \ + .cfi_endproc; \ ENDFN (NAME) /* First, instantiate the single-float set. */ @@ -710,17 +718,4 @@ CALL_STUB_RET (__mips16_call_stub_dc_10, 10, DC) #endif #endif /* !__mips_single_float */ -#ifdef L_m16rdhwr -STARTFN (__mips16_rdhwr) - /* Forced always hidden, because the PLT resolver function would - not preserve all necessary registers. */ - .hidden __mips16_rdhwr - .set push - .set mips32r2 - .set noreorder - rdhwr $3,$29 - .set pop - j $31 - ENDFN (__mips16_rdhwr) -#endif #endif diff --git a/libgcc/config/mips/t-mips16 b/libgcc/config/mips/t-mips16 index 7fe37f64f52..5553ed76e2d 100644 --- a/libgcc/config/mips/t-mips16 +++ b/libgcc/config/mips/t-mips16 @@ -36,8 +36,7 @@ LIB1ASMFUNCS = _m16addsf3 _m16subsf3 _m16mulsf3 _m16divsf3 \ _m16stubsc0 _m16stubsc1 _m16stubsc2 _m16stubsc5 _m16stubsc6 \ _m16stubsc9 _m16stubsc10 \ _m16stubdc0 _m16stubdc1 _m16stubdc2 _m16stubdc5 _m16stubdc6 \ - _m16stubdc9 _m16stubdc10 \ - _m16rdhwr + _m16stubdc9 _m16stubdc10 SYNC = yes SYNC_CFLAGS = -mno-mips16 diff --git a/libgcc/config/tilepro/atomic.c b/libgcc/config/tilepro/atomic.c index cafbde8abee..bdf809807be 100644 --- a/libgcc/config/tilepro/atomic.c +++ b/libgcc/config/tilepro/atomic.c @@ -63,18 +63,12 @@ post_atomic_barrier (int model) #define __unused __attribute__((unused)) -/* Provide additional methods not implemented by atomic.h. */ -#define atomic_xor(mem, mask) \ - __atomic_update_cmpxchg(mem, mask, __old ^ __value) -#define atomic_nand(mem, mask) \ - __atomic_update_cmpxchg(mem, mask, ~(__old & __value)) - #define __atomic_fetch_and_do(type, size, opname) \ type \ __atomic_fetch_##opname##_##size(type* p, type i, int model) \ { \ pre_atomic_barrier(model); \ - type rv = atomic_##opname(p, i); \ + type rv = arch_atomic_##opname(p, i); \ post_atomic_barrier(model); \ return rv; \ } @@ -96,7 +90,7 @@ type \ __atomic_##opname##_fetch_##size(type* p, type i, int model) \ { \ pre_atomic_barrier(model); \ - type rv = atomic_##opname(p, i) op i; \ + type rv = arch_atomic_##opname(p, i) op i; \ post_atomic_barrier(model); \ return rv; \ } @@ -120,7 +114,7 @@ __atomic_compare_exchange_##size(volatile type* ptr, type* oldvalp, \ { \ type oldval = *oldvalp; \ pre_atomic_barrier(models); \ - type retval = atomic_val_compare_and_exchange(ptr, oldval, newval); \ + type retval = arch_atomic_val_compare_and_exchange(ptr, oldval, newval); \ post_atomic_barrier(models); \ bool success = (retval == oldval); \ *oldvalp = retval; \ @@ -131,7 +125,7 @@ type \ __atomic_exchange_##size(volatile type* ptr, type val, int model) \ { \ pre_atomic_barrier(model); \ - type retval = atomic_exchange(ptr, val); \ + type retval = arch_atomic_exchange(ptr, val); \ post_atomic_barrier(model); \ return retval; \ } @@ -159,7 +153,7 @@ __atomic_compare_exchange_##size(volatile type* ptr, type* guess, \ type oldval = (oldword >> shift) & valmask; \ if (__builtin_expect((oldval == *guess), 1)) { \ unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \ - oldword = atomic_val_compare_and_exchange(p, oldword, word); \ + oldword = arch_atomic_val_compare_and_exchange(p, oldword, word); \ oldval = (oldword >> shift) & valmask; \ } \ post_atomic_barrier(models); \ @@ -187,7 +181,7 @@ proto \ oldval = (oldword >> shift) & valmask; \ val = expr; \ unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \ - xword = atomic_val_compare_and_exchange(p, oldword, word); \ + xword = arch_atomic_val_compare_and_exchange(p, oldword, word); \ } while (__builtin_expect(xword != oldword, 0)); \ bottom \ } diff --git a/libgcc/config/tilepro/atomic.h b/libgcc/config/tilepro/atomic.h index 16306fe0e76..d49d13b3fb0 100644 --- a/libgcc/config/tilepro/atomic.h +++ b/libgcc/config/tilepro/atomic.h @@ -104,8 +104,8 @@ /* 32-bit integer compare-and-exchange. */ static __inline __attribute__ ((always_inline)) - int atomic_val_compare_and_exchange_4 (volatile int *mem, - int oldval, int newval) + int arch_atomic_val_compare_and_exchange_4 (volatile int *mem, + int oldval, int newval) { #ifdef __tilegx__ __insn_mtspr (SPR_CMPEXCH_VALUE, oldval); @@ -123,9 +123,9 @@ static __inline __attribute__ ((always_inline)) /* 64-bit integer compare-and-exchange. */ static __inline __attribute__ ((always_inline)) - int64_t atomic_val_compare_and_exchange_8 (volatile int64_t * mem, - int64_t oldval, - int64_t newval) + int64_t arch_atomic_val_compare_and_exchange_8 (volatile int64_t * mem, + int64_t oldval, + int64_t newval) { #ifdef __tilegx__ __insn_mtspr (SPR_CMPEXCH_VALUE, oldval); @@ -146,41 +146,41 @@ static __inline __attribute__ ((always_inline)) /* This non-existent symbol is called for sizes other than "4" and "8", indicating a bug in the caller. */ -extern int __atomic_error_bad_argument_size (void) +extern int __arch_atomic_error_bad_argument_size (void) __attribute__ ((warning ("sizeof atomic argument not 4 or 8"))); -#define atomic_val_compare_and_exchange(mem, o, n) \ +#define arch_atomic_val_compare_and_exchange(mem, o, n) \ ({ \ (__typeof(*(mem)))(__typeof(*(mem)-*(mem))) \ ((sizeof(*(mem)) == 8) ? \ - atomic_val_compare_and_exchange_8( \ + arch_atomic_val_compare_and_exchange_8( \ (volatile int64_t*)(mem), (__typeof((o)-(o)))(o), \ (__typeof((n)-(n)))(n)) : \ (sizeof(*(mem)) == 4) ? \ - atomic_val_compare_and_exchange_4( \ + arch_atomic_val_compare_and_exchange_4( \ (volatile int*)(mem), (__typeof((o)-(o)))(o), \ (__typeof((n)-(n)))(n)) : \ - __atomic_error_bad_argument_size()); \ + __arch_atomic_error_bad_argument_size()); \ }) -#define atomic_bool_compare_and_exchange(mem, o, n) \ +#define arch_atomic_bool_compare_and_exchange(mem, o, n) \ ({ \ __typeof(o) __o = (o); \ __builtin_expect( \ - __o == atomic_val_compare_and_exchange((mem), __o, (n)), 1); \ + __o == arch_atomic_val_compare_and_exchange((mem), __o, (n)), 1); \ }) /* Loop with compare_and_exchange until we guess the correct value. Normally "expr" will be an expression using __old and __value. */ -#define __atomic_update_cmpxchg(mem, value, expr) \ +#define __arch_atomic_update_cmpxchg(mem, value, expr) \ ({ \ __typeof(value) __value = (value); \ __typeof(*(mem)) *__mem = (mem), __old = *__mem, __guess; \ do { \ __guess = __old; \ - __old = atomic_val_compare_and_exchange(__mem, __old, (expr)); \ + __old = arch_atomic_val_compare_and_exchange(__mem, __old, (expr)); \ } while (__builtin_expect(__old != __guess, 0)); \ __old; \ }) @@ -189,14 +189,14 @@ extern int __atomic_error_bad_argument_size (void) /* Generic atomic op with 8- or 4-byte variant. The _mask, _addend, and _expr arguments are ignored on tilegx. */ -#define __atomic_update(mem, value, op, _mask, _addend, _expr) \ +#define __arch_atomic_update(mem, value, op, _mask, _addend, _expr) \ ({ \ ((__typeof(*(mem))) \ ((sizeof(*(mem)) == 8) ? (__typeof(*(mem)-*(mem)))__insn_##op( \ (void *)(mem), (int64_t)(__typeof((value)-(value)))(value)) : \ (sizeof(*(mem)) == 4) ? (int)__insn_##op##4( \ (void *)(mem), (int32_t)(__typeof((value)-(value)))(value)) : \ - __atomic_error_bad_argument_size())); \ + __arch_atomic_error_bad_argument_size())); \ }) #else @@ -211,7 +211,7 @@ extern int __atomic_error_bad_argument_size (void) Only 32-bit support is provided. */ static __inline __attribute__ ((always_inline)) int - __atomic_update_4 (volatile int *mem, int mask, int addend) + __arch_atomic_update_4 (volatile int *mem, int mask, int addend) { int result; __asm__ __volatile__ ("swint1":"=R00" (result), @@ -224,48 +224,55 @@ static __inline __attribute__ ((always_inline)) /* Generic atomic op with 8- or 4-byte variant. The _op argument is ignored on tilepro. */ -#define __atomic_update(mem, value, _op, mask, addend, expr) \ +#define __arch_atomic_update(mem, value, _op, mask, addend, expr) \ ({ \ (__typeof(*(mem)))(__typeof(*(mem)-*(mem))) \ ((sizeof(*(mem)) == 8) ? \ - __atomic_update_cmpxchg((mem), (value), (expr)) : \ + __arch_atomic_update_cmpxchg((mem), (value), (expr)) : \ (sizeof(*(mem)) == 4) ? \ - __atomic_update_4((volatile int*)(mem), (__typeof((mask)-(mask)))(mask), \ - (__typeof((addend)-(addend)))(addend)) : \ - __atomic_error_bad_argument_size()); \ + __arch_atomic_update_4((volatile int*)(mem), \ + (__typeof((mask)-(mask)))(mask), \ + (__typeof((addend)-(addend)))(addend)) : \ + __arch_atomic_error_bad_argument_size()); \ }) #endif /* __tilegx__ */ -#define atomic_exchange(mem, newvalue) \ - __atomic_update(mem, newvalue, exch, 0, newvalue, __value) +#define arch_atomic_exchange(mem, newvalue) \ + __arch_atomic_update(mem, newvalue, exch, 0, newvalue, __value) -#define atomic_add(mem, value) \ - __atomic_update(mem, value, fetchadd, -1, value, __old + __value) +#define arch_atomic_add(mem, value) \ + __arch_atomic_update(mem, value, fetchadd, -1, value, __old + __value) -#define atomic_sub(mem, value) atomic_add((mem), -(value)) +#define arch_atomic_sub(mem, value) arch_atomic_add((mem), -(value)) -#define atomic_increment(mem) atomic_add((mem), 1) +#define arch_atomic_increment(mem) arch_atomic_add((mem), 1) -#define atomic_decrement(mem) atomic_add((mem), -1) +#define arch_atomic_decrement(mem) arch_atomic_add((mem), -1) -#define atomic_and(mem, mask) \ - __atomic_update(mem, mask, fetchand, mask, 0, __old & __value) +#define arch_atomic_and(mem, mask) \ + __arch_atomic_update(mem, mask, fetchand, mask, 0, __old & __value) -#define atomic_or(mem, mask) \ - __atomic_update(mem, mask, fetchor, ~mask, mask, __old | __value) +#define arch_atomic_or(mem, mask) \ + __arch_atomic_update(mem, mask, fetchor, ~mask, mask, __old | __value) -#define atomic_bit_set(mem, bit) \ +#define arch_atomic_xor(mem, mask) \ + __arch_atomic_update_cmpxchg(mem, mask, __old ^ __value) + +#define arch_atomic_nand(mem, mask) \ + __arch_atomic_update_cmpxchg(mem, mask, ~(__old & __value)) + +#define arch_atomic_bit_set(mem, bit) \ ({ \ __typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit); \ - __mask & atomic_or((mem), __mask); \ + __mask & arch_atomic_or((mem), __mask); \ }) -#define atomic_bit_clear(mem, bit) \ +#define arch_atomic_bit_clear(mem, bit) \ ({ \ __typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit); \ - __mask & atomic_and((mem), ~__mask); \ + __mask & arch_atomic_and((mem), ~__mask); \ }) #ifdef __tilegx__ @@ -275,9 +282,9 @@ static __inline __attribute__ ((always_inline)) This accessor is provided for compatibility with TILEPro, which required an explicit atomic operation for stores that needed to be atomic with respect to other atomic methods in this header. */ -#define atomic_write(mem, value) ((void) (*(mem) = (value))) +#define arch_atomic_write(mem, value) ((void) (*(mem) = (value))) #else -#define atomic_write(mem, value) \ +#define arch_atomic_write(mem, value) \ do { \ __typeof(mem) __aw_mem = (mem); \ __typeof(value) __aw_val = (value); \ @@ -285,26 +292,26 @@ static __inline __attribute__ ((always_inline)) __aw_intval = (__typeof((value) - (value)))__aw_val; \ switch (sizeof(*__aw_mem)) { \ case 8: \ - __atomic_update_cmpxchg(__aw_mem, __aw_val, __value); \ + __arch_atomic_update_cmpxchg(__aw_mem, __aw_val, __value); \ break; \ case 4: \ - __atomic_update_4((int *)__aw_mem, 0, __aw_intval); \ + __arch_atomic_update_4((int *)__aw_mem, 0, __aw_intval); \ break; \ case 2: \ __aw_off = 8 * ((long)__aw_mem & 0x2); \ __aw_mask = 0xffffU << __aw_off; \ __aw_mem32 = (unsigned int *)((long)__aw_mem & ~0x2); \ __aw_val32 = (__aw_intval << __aw_off) & __aw_mask; \ - __atomic_update_cmpxchg(__aw_mem32, __aw_val32, \ - (__old & ~__aw_mask) | __value); \ + __arch_atomic_update_cmpxchg(__aw_mem32, __aw_val32, \ + (__old & ~__aw_mask) | __value); \ break; \ case 1: \ __aw_off = 8 * ((long)__aw_mem & 0x3); \ __aw_mask = 0xffU << __aw_off; \ __aw_mem32 = (unsigned int *)((long)__aw_mem & ~0x3); \ __aw_val32 = (__aw_intval << __aw_off) & __aw_mask; \ - __atomic_update_cmpxchg(__aw_mem32, __aw_val32, \ - (__old & ~__aw_mask) | __value); \ + __arch_atomic_update_cmpxchg(__aw_mem32, __aw_val32, \ + (__old & ~__aw_mask) | __value); \ break; \ } \ } while (0) @@ -315,15 +322,15 @@ static __inline __attribute__ ((always_inline)) This macro prevents loads or stores from being moved by the compiler across the macro. Any loaded value that was loaded before this macro must then be reloaded by the compiler. */ -#define atomic_compiler_barrier() __asm__ __volatile__("" ::: "memory") +#define arch_atomic_compiler_barrier() __asm__ __volatile__("" ::: "memory") /* Full memory barrier. - This macro has the semantics of atomic_compiler_barrer(), but also + This macro has the semantics of arch_atomic_compiler_barrer(), but also ensures that previous stores are visible to other cores, and that all previous loaded values have been placed into their target register on this core. */ -#define atomic_full_barrier() __insn_mf() +#define arch_atomic_full_barrier() __insn_mf() /* Read memory barrier. @@ -335,9 +342,9 @@ static __inline __attribute__ ((always_inline)) On current TILE chips a read barrier is implemented as a full barrier, but this may not be true in later versions of the architecture. - See also atomic_acquire_barrier() for the appropriate idiom to use + See also arch_atomic_acquire_barrier() for the appropriate idiom to use to ensure no reads are lifted above an atomic lock instruction. */ -#define atomic_read_barrier() atomic_full_barrier() +#define arch_atomic_read_barrier() arch_atomic_full_barrier() /* Write memory barrier. @@ -349,9 +356,9 @@ static __inline __attribute__ ((always_inline)) On current TILE chips a write barrier is implemented as a full barrier, but this may not be true in later versions of the architecture. - See also atomic_release_barrier() for the appropriate idiom to use + See also arch_atomic_release_barrier() for the appropriate idiom to use to ensure all writes are complete prior to an atomic unlock instruction. */ -#define atomic_write_barrier() atomic_full_barrier() +#define arch_atomic_write_barrier() arch_atomic_full_barrier() /* Lock acquisition barrier. @@ -367,10 +374,10 @@ static __inline __attribute__ ((always_inline)) This should be done after the atomic operation that actually acquires the lock, and in conjunction with a "control dependency" that checks the atomic operation result to see if the lock was - in fact acquired. See the atomic_read_barrier() macro + in fact acquired. See the arch_atomic_read_barrier() macro for a heavier-weight barrier to use in certain unusual constructs, - or atomic_acquire_barrier_value() if no control dependency exists. */ -#define atomic_acquire_barrier() atomic_compiler_barrier() + or arch_atomic_acquire_barrier_value() if no control dependency exists. */ +#define arch_atomic_acquire_barrier() arch_atomic_compiler_barrier() /* Lock release barrier. @@ -383,7 +390,7 @@ static __inline __attribute__ ((always_inline)) for locking, that is, when leaving a critical section. This should be done before the operation (such as a store of zero) that actually releases the lock. */ -#define atomic_release_barrier() atomic_write_barrier() +#define arch_atomic_release_barrier() arch_atomic_write_barrier() /* Barrier until the read of a particular value is complete. @@ -400,7 +407,7 @@ static __inline __attribute__ ((always_inline)) atomic instruction, even if the value itself is not checked. This guarantees that if the atomic instruction succeeded in taking the lock, the lock was held before any reads in the critical section issued. */ -#define atomic_acquire_barrier_value(val) \ +#define arch_atomic_acquire_barrier_value(val) \ __asm__ __volatile__("move %0, %0" :: "r"(val)) /* Access the given variable in memory exactly once. @@ -421,8 +428,9 @@ static __inline __attribute__ ((always_inline)) Note that multiple uses of this macro are guaranteed to be ordered, i.e. the compiler will not reorder stores or loads that are wrapped - in atomic_access_once(). */ -#define atomic_access_once(x) (*(volatile __typeof(x) *)&(x)) + in arch_atomic_access_once(). */ +#define arch_atomic_access_once(x) (*(volatile __typeof(x) *)&(x)) + #endif /* !_ATOMIC_H_ */ diff --git a/libgcc/generic-morestack.c b/libgcc/generic-morestack.c index 96a8210f912..fad3d9b02a3 100644 --- a/libgcc/generic-morestack.c +++ b/libgcc/generic-morestack.c @@ -507,7 +507,7 @@ __generic_morestack_set_initial_sp (void *sp, size_t len) sigemptyset (&__morestack_initial_sp.mask); sigfillset (&__morestack_fullmask); -#ifdef __GLIBC__ +#if defined(__GLIBC__) && defined(__linux__) /* In glibc, the first two real time signals are used by the NPTL threading library. By taking them out of the set of signals, we avoiding copying the signal mask in pthread_sigmask. More @@ -1104,7 +1104,9 @@ __splitstack_resetcontext (void *context[10], size_t *size) void __splitstack_releasecontext (void *context[10]) { - __morestack_release_segments (context[MORESTACK_SEGMENTS], 1); + __morestack_release_segments (((struct stack_segment **) + &context[MORESTACK_SEGMENTS]), + 1); } /* Like __splitstack_block_signals, but operating on CONTEXT, rather diff --git a/libgcc/gthr.h b/libgcc/gthr.h index 607c26eb563..03a3ee1d84f 100644 --- a/libgcc/gthr.h +++ b/libgcc/gthr.h @@ -135,6 +135,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see */ #if SUPPORTS_WEAK +/* The pe-coff weak support isn't fully compatible to ELF's weak. + For static libraries it might would work, but as we need to deal + with shared versions too, we disable it for mingw-targets. */ +#ifdef __MINGW32__ +#undef GTHREAD_USE_WEAK +#define GTHREAD_USE_WEAK 0 +#endif + #ifndef GTHREAD_USE_WEAK #define GTHREAD_USE_WEAK 1 #endif diff --git a/libgcc/longlong.h b/libgcc/longlong.h index 30cc2e337f3..1a839dd0d30 100644 --- a/libgcc/longlong.h +++ b/libgcc/longlong.h @@ -220,9 +220,12 @@ UDItype __umulsidi3 (USItype, USItype); "rI" ((USItype) (bh)), \ "r" ((USItype) (al)), \ "rI" ((USItype) (bl)) __CLOBBER_CC) -#define umul_ppmm(xh, xl, a, b) \ -{register USItype __t0, __t1, __t2; \ - __asm__ ("%@ Inlined umul_ppmm\n" \ +# if defined(__ARM_ARCH_2__) || defined(__ARM_ARCH_2A__) \ + || defined(__ARM_ARCH_3__) +# define umul_ppmm(xh, xl, a, b) \ + do { \ + register USItype __t0, __t1, __t2; \ + __asm__ ("%@ Inlined umul_ppmm\n" \ " mov %2, %5, lsr #16\n" \ " mov %0, %6, lsr #16\n" \ " bic %3, %5, %2, lsl #16\n" \ @@ -239,14 +242,26 @@ UDItype __umulsidi3 (USItype, USItype); "=r" ((USItype) (xl)), \ "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \ : "r" ((USItype) (a)), \ - "r" ((USItype) (b)) __CLOBBER_CC );} -#define UMUL_TIME 20 -#define UDIV_TIME 100 + "r" ((USItype) (b)) __CLOBBER_CC ); \ + } while (0) +# define UMUL_TIME 20 +# else +# define umul_ppmm(xh, xl, a, b) \ + do { \ + /* Generate umull, under compiler control. */ \ + register UDItype __t0 = (UDItype)(USItype)(a) * (USItype)(b); \ + (xl) = (USItype)__t0; \ + (xh) = (USItype)(__t0 >> 32); \ + } while (0) +# define UMUL_TIME 3 +# endif +# define UDIV_TIME 100 #endif /* __arm__ */ #if defined(__arm__) /* Let gcc decide how best to implement count_leading_zeros. */ #define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X)) +#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctz (X)) #define COUNT_LEADING_ZEROS_0 32 #endif diff --git a/libgcc/soft-fp/adddf3.c b/libgcc/soft-fp/adddf3.c index 24c03db0a64..5e66461e555 100644 --- a/libgcc/soft-fp/adddf3.c +++ b/libgcc/soft-fp/adddf3.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/addsf3.c b/libgcc/soft-fp/addsf3.c index b86991ee562..7f61d167b1e 100644 --- a/libgcc/soft-fp/addsf3.c +++ b/libgcc/soft-fp/addsf3.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" @@ -47,4 +46,3 @@ SFtype __addsf3(SFtype a, SFtype b) return r; } - diff --git a/libgcc/soft-fp/addtf3.c b/libgcc/soft-fp/addtf3.c index 49b67f0ba96..f5da0199898 100644 --- a/libgcc/soft-fp/addtf3.c +++ b/libgcc/soft-fp/addtf3.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/divdf3.c b/libgcc/soft-fp/divdf3.c index c3bb0d247cb..105beab8d70 100644 --- a/libgcc/soft-fp/divdf3.c +++ b/libgcc/soft-fp/divdf3.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/divsf3.c b/libgcc/soft-fp/divsf3.c index 176bb3c2cb3..41e32c03680 100644 --- a/libgcc/soft-fp/divsf3.c +++ b/libgcc/soft-fp/divsf3.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/divtf3.c b/libgcc/soft-fp/divtf3.c index 916fbfe9748..b932351bf3f 100644 --- a/libgcc/soft-fp/divtf3.c +++ b/libgcc/soft-fp/divtf3.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/double.h b/libgcc/soft-fp/double.h index 1cde3308bac..5bad49c14d8 100644 --- a/libgcc/soft-fp/double.h +++ b/libgcc/soft-fp/double.h @@ -1,6 +1,6 @@ /* Software floating-point emulation. Definitions for IEEE Double Precision - Copyright (C) 1997, 1998, 1999, 2006, 2007, 2008, 2009 + Copyright (C) 1997, 1998, 1999, 2006, 2007, 2008, 2009, 2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com), @@ -28,9 +28,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #if _FP_W_TYPE_SIZE < 32 #error "Here's a nickel kid. Go buy yourself a real computer." @@ -68,7 +67,7 @@ typedef float DFtype __attribute__((mode(DF))); union _FP_UNION_D { DFtype flt; - struct { + struct _FP_STRUCT_LAYOUT { #if __BYTE_ORDER == __BIG_ENDIAN unsigned sign : 1; unsigned exp : _FP_EXPBITS_D; @@ -167,7 +166,7 @@ union _FP_UNION_D union _FP_UNION_D { DFtype flt; - struct { + struct _FP_STRUCT_LAYOUT { #if __BYTE_ORDER == __BIG_ENDIAN unsigned sign : 1; unsigned exp : _FP_EXPBITS_D; diff --git a/libgcc/soft-fp/eqdf2.c b/libgcc/soft-fp/eqdf2.c index 82a885834c0..b5749b43a3c 100644 --- a/libgcc/soft-fp/eqdf2.c +++ b/libgcc/soft-fp/eqdf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/eqsf2.c b/libgcc/soft-fp/eqsf2.c index 0a1180f876f..8bf3603dc1d 100644 --- a/libgcc/soft-fp/eqsf2.c +++ b/libgcc/soft-fp/eqsf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/eqtf2.c b/libgcc/soft-fp/eqtf2.c index 46240b73559..e40f31aa420 100644 --- a/libgcc/soft-fp/eqtf2.c +++ b/libgcc/soft-fp/eqtf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/extenddftf2.c b/libgcc/soft-fp/extenddftf2.c index 4101639a947..f7082ef708a 100644 --- a/libgcc/soft-fp/extenddftf2.c +++ b/libgcc/soft-fp/extenddftf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/extended.h b/libgcc/soft-fp/extended.h index e5f16debecb..af9c6e65a8b 100644 --- a/libgcc/soft-fp/extended.h +++ b/libgcc/soft-fp/extended.h @@ -1,6 +1,6 @@ /* Software floating-point emulation. Definitions for IEEE Extended Precision. - Copyright (C) 1999,2006,2007 Free Software Foundation, Inc. + Copyright (C) 1999,2006,2007,2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek (jj@ultra.linux.cz). @@ -24,9 +24,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #if _FP_W_TYPE_SIZE < 32 #error "Here's a nickel, kid. Go buy yourself a real computer." @@ -64,7 +63,7 @@ typedef float XFtype __attribute__((mode(XF))); union _FP_UNION_E { XFtype flt; - struct + struct _FP_STRUCT_LAYOUT { #if __BYTE_ORDER == __BIG_ENDIAN unsigned long pad1 : _FP_W_TYPE_SIZE; @@ -263,7 +262,7 @@ union _FP_UNION_E union _FP_UNION_E { XFtype flt; - struct { + struct _FP_STRUCT_LAYOUT { #if __BYTE_ORDER == __BIG_ENDIAN _FP_W_TYPE pad : (_FP_W_TYPE_SIZE - 1 - _FP_EXPBITS_E); unsigned sign : 1; diff --git a/libgcc/soft-fp/extendsfdf2.c b/libgcc/soft-fp/extendsfdf2.c index fba22d5a197..ac843754e68 100644 --- a/libgcc/soft-fp/extendsfdf2.c +++ b/libgcc/soft-fp/extendsfdf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/extendsftf2.c b/libgcc/soft-fp/extendsftf2.c index c43cf1edee5..a0d62708347 100644 --- a/libgcc/soft-fp/extendsftf2.c +++ b/libgcc/soft-fp/extendsftf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/fixdfdi.c b/libgcc/soft-fp/fixdfdi.c index fdfe35af519..d1060bc6211 100644 --- a/libgcc/soft-fp/fixdfdi.c +++ b/libgcc/soft-fp/fixdfdi.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/fixdfsi.c b/libgcc/soft-fp/fixdfsi.c index a05f3e39a5f..63887197e51 100644 --- a/libgcc/soft-fp/fixdfsi.c +++ b/libgcc/soft-fp/fixdfsi.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/fixsfdi.c b/libgcc/soft-fp/fixsfdi.c index 384d9bdd536..9dc04b6de4c 100644 --- a/libgcc/soft-fp/fixsfdi.c +++ b/libgcc/soft-fp/fixsfdi.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/fixsfsi.c b/libgcc/soft-fp/fixsfsi.c index 1d40ed05df7..c17514a2424 100644 --- a/libgcc/soft-fp/fixsfsi.c +++ b/libgcc/soft-fp/fixsfsi.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/fixtfdi.c b/libgcc/soft-fp/fixtfdi.c index ea10ce2dd3b..3731580c94f 100644 --- a/libgcc/soft-fp/fixtfdi.c +++ b/libgcc/soft-fp/fixtfdi.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/fixtfsi.c b/libgcc/soft-fp/fixtfsi.c index eb71038bc35..9ceed12c73c 100644 --- a/libgcc/soft-fp/fixtfsi.c +++ b/libgcc/soft-fp/fixtfsi.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/fixunsdfdi.c b/libgcc/soft-fp/fixunsdfdi.c index d85198f1853..4a5a7df61d1 100644 --- a/libgcc/soft-fp/fixunsdfdi.c +++ b/libgcc/soft-fp/fixunsdfdi.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/fixunsdfsi.c b/libgcc/soft-fp/fixunsdfsi.c index 492ffdea680..82b54ad4f74 100644 --- a/libgcc/soft-fp/fixunsdfsi.c +++ b/libgcc/soft-fp/fixunsdfsi.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/fixunssfdi.c b/libgcc/soft-fp/fixunssfdi.c index 54841538372..d99f6faa817 100644 --- a/libgcc/soft-fp/fixunssfdi.c +++ b/libgcc/soft-fp/fixunssfdi.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/fixunssfsi.c b/libgcc/soft-fp/fixunssfsi.c index ac9d4b9654f..b226b1fca2a 100644 --- a/libgcc/soft-fp/fixunssfsi.c +++ b/libgcc/soft-fp/fixunssfsi.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/fixunstfdi.c b/libgcc/soft-fp/fixunstfdi.c index 86f1fc85629..97c4ec94757 100644 --- a/libgcc/soft-fp/fixunstfdi.c +++ b/libgcc/soft-fp/fixunstfdi.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/fixunstfsi.c b/libgcc/soft-fp/fixunstfsi.c index e0335da4790..df4ca9a7466 100644 --- a/libgcc/soft-fp/fixunstfsi.c +++ b/libgcc/soft-fp/fixunstfsi.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/floatdidf.c b/libgcc/soft-fp/floatdidf.c index 21e9fb1899c..c1e0084c23a 100644 --- a/libgcc/soft-fp/floatdidf.c +++ b/libgcc/soft-fp/floatdidf.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/floatdisf.c b/libgcc/soft-fp/floatdisf.c index ee57915c3b8..76a9245380f 100644 --- a/libgcc/soft-fp/floatdisf.c +++ b/libgcc/soft-fp/floatdisf.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/floatditf.c b/libgcc/soft-fp/floatditf.c index 564800bc05a..d6d881869fd 100644 --- a/libgcc/soft-fp/floatditf.c +++ b/libgcc/soft-fp/floatditf.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/floatsidf.c b/libgcc/soft-fp/floatsidf.c index b6d5f8d1d2a..3409ecd90d0 100644 --- a/libgcc/soft-fp/floatsidf.c +++ b/libgcc/soft-fp/floatsidf.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/floatsisf.c b/libgcc/soft-fp/floatsisf.c index 76217fe3478..002aa177bb1 100644 --- a/libgcc/soft-fp/floatsisf.c +++ b/libgcc/soft-fp/floatsisf.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/floatsitf.c b/libgcc/soft-fp/floatsitf.c index 8c3d9cc6193..9cc6e6593aa 100644 --- a/libgcc/soft-fp/floatsitf.c +++ b/libgcc/soft-fp/floatsitf.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/floatundidf.c b/libgcc/soft-fp/floatundidf.c index af8e4a5aefe..ab1152c698c 100644 --- a/libgcc/soft-fp/floatundidf.c +++ b/libgcc/soft-fp/floatundidf.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/floatundisf.c b/libgcc/soft-fp/floatundisf.c index 977f7dfc79f..ff544f9c6aa 100644 --- a/libgcc/soft-fp/floatundisf.c +++ b/libgcc/soft-fp/floatundisf.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/floatunditf.c b/libgcc/soft-fp/floatunditf.c index ab357f051c3..0723c40b145 100644 --- a/libgcc/soft-fp/floatunditf.c +++ b/libgcc/soft-fp/floatunditf.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/floatunsidf.c b/libgcc/soft-fp/floatunsidf.c index 12d0f25bf0f..4a955daaa19 100644 --- a/libgcc/soft-fp/floatunsidf.c +++ b/libgcc/soft-fp/floatunsidf.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/floatunsisf.c b/libgcc/soft-fp/floatunsisf.c index 80c5d3d359f..7d588c6d1e7 100644 --- a/libgcc/soft-fp/floatunsisf.c +++ b/libgcc/soft-fp/floatunsisf.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/floatunsitf.c b/libgcc/soft-fp/floatunsitf.c index c993716e54a..e9a88f8467f 100644 --- a/libgcc/soft-fp/floatunsitf.c +++ b/libgcc/soft-fp/floatunsitf.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/gedf2.c b/libgcc/soft-fp/gedf2.c index 17a0453adce..55298e5e0e8 100644 --- a/libgcc/soft-fp/gedf2.c +++ b/libgcc/soft-fp/gedf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/gesf2.c b/libgcc/soft-fp/gesf2.c index 609a61f31dd..ea7c2266630 100644 --- a/libgcc/soft-fp/gesf2.c +++ b/libgcc/soft-fp/gesf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/getf2.c b/libgcc/soft-fp/getf2.c index eb52d05a4c5..dd19a9d0045 100644 --- a/libgcc/soft-fp/getf2.c +++ b/libgcc/soft-fp/getf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/ledf2.c b/libgcc/soft-fp/ledf2.c index b8ba4400d36..7642ced5d33 100644 --- a/libgcc/soft-fp/ledf2.c +++ b/libgcc/soft-fp/ledf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/lesf2.c b/libgcc/soft-fp/lesf2.c index cb359c91036..594b11401e2 100644 --- a/libgcc/soft-fp/lesf2.c +++ b/libgcc/soft-fp/lesf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/letf2.c b/libgcc/soft-fp/letf2.c index 01fd12b5721..ae3060eab32 100644 --- a/libgcc/soft-fp/letf2.c +++ b/libgcc/soft-fp/letf2.c @@ -1,6 +1,6 @@ /* Software floating-point emulation. Return 0 iff a == b, 1 iff a > b, 2 iff a ? b, -1 iff a < b - Copyright (C) 1997,1999,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1999,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com) and Jakub Jelinek (jj@ultra.linux.cz). @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/muldf3.c b/libgcc/soft-fp/muldf3.c index 7eb2015ae56..8aaebc0cc5b 100644 --- a/libgcc/soft-fp/muldf3.c +++ b/libgcc/soft-fp/muldf3.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/mulsf3.c b/libgcc/soft-fp/mulsf3.c index 5df44068720..18c49a59f95 100644 --- a/libgcc/soft-fp/mulsf3.c +++ b/libgcc/soft-fp/mulsf3.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/multf3.c b/libgcc/soft-fp/multf3.c index 0abab6ddc3b..9fd10d8e237 100644 --- a/libgcc/soft-fp/multf3.c +++ b/libgcc/soft-fp/multf3.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/negdf2.c b/libgcc/soft-fp/negdf2.c index 54869e9a68d..08494aa5ba3 100644 --- a/libgcc/soft-fp/negdf2.c +++ b/libgcc/soft-fp/negdf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/negsf2.c b/libgcc/soft-fp/negsf2.c index bf5db7a452c..1eb9a500828 100644 --- a/libgcc/soft-fp/negsf2.c +++ b/libgcc/soft-fp/negsf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/negtf2.c b/libgcc/soft-fp/negtf2.c index 5524c82df1c..fe9f05e4ba8 100644 --- a/libgcc/soft-fp/negtf2.c +++ b/libgcc/soft-fp/negtf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/op-1.h b/libgcc/soft-fp/op-1.h index 35cd0ba7bb1..2cffb7fb3ca 100644 --- a/libgcc/soft-fp/op-1.h +++ b/libgcc/soft-fp/op-1.h @@ -27,9 +27,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #define _FP_FRAC_DECL_1(X) _FP_W_TYPE X##_f #define _FP_FRAC_COPY_1(D,S) (D##_f = S##_f) diff --git a/libgcc/soft-fp/op-2.h b/libgcc/soft-fp/op-2.h index 3a3b3aa0691..7c7a9583689 100644 --- a/libgcc/soft-fp/op-2.h +++ b/libgcc/soft-fp/op-2.h @@ -27,9 +27,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #define _FP_FRAC_DECL_2(X) _FP_W_TYPE X##_f0, X##_f1 #define _FP_FRAC_COPY_2(D,S) (D##_f0 = S##_f0, D##_f1 = S##_f1) diff --git a/libgcc/soft-fp/op-4.h b/libgcc/soft-fp/op-4.h index 70b9fafbe5a..a81e7ab7c6b 100644 --- a/libgcc/soft-fp/op-4.h +++ b/libgcc/soft-fp/op-4.h @@ -27,9 +27,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #define _FP_FRAC_DECL_4(X) _FP_W_TYPE X##_f[4] #define _FP_FRAC_COPY_4(D,S) \ diff --git a/libgcc/soft-fp/op-8.h b/libgcc/soft-fp/op-8.h index e0612a5e62f..9643793f136 100644 --- a/libgcc/soft-fp/op-8.h +++ b/libgcc/soft-fp/op-8.h @@ -26,9 +26,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ /* We need just a few things from here for op-4, if we ever need some other macros, they can be added. */ @@ -108,4 +107,3 @@ /* don't fix the LSB until the very end when we're sure f[0] is stable */ \ X##_f[0] |= (_s != 0); \ } while (0) - diff --git a/libgcc/soft-fp/op-common.h b/libgcc/soft-fp/op-common.h index ef11b527b70..b70026f9091 100644 --- a/libgcc/soft-fp/op-common.h +++ b/libgcc/soft-fp/op-common.h @@ -26,9 +26,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #define _FP_DECL(wc, X) \ _FP_I_TYPE X##_c __attribute__((unused)), X##_s, X##_e; \ diff --git a/libgcc/soft-fp/quad.h b/libgcc/soft-fp/quad.h index c22e944029f..b05bd2dba93 100644 --- a/libgcc/soft-fp/quad.h +++ b/libgcc/soft-fp/quad.h @@ -1,6 +1,6 @@ /* Software floating-point emulation. Definitions for IEEE Quad Precision. - Copyright (C) 1997,1998,1999,2006,2007 Free Software Foundation, Inc. + Copyright (C) 1997,1998,1999,2006,2007,2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com), Jakub Jelinek (jj@ultra.linux.cz), @@ -27,9 +27,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #if _FP_W_TYPE_SIZE < 32 #error "Here's a nickel, kid. Go buy yourself a real computer." @@ -67,7 +66,7 @@ typedef float TFtype __attribute__((mode(TF))); union _FP_UNION_Q { TFtype flt; - struct + struct _FP_STRUCT_LAYOUT { #if __BYTE_ORDER == __BIG_ENDIAN unsigned sign : 1; @@ -171,10 +170,10 @@ union _FP_UNION_Q union _FP_UNION_Q { TFtype flt /* __attribute__((mode(TF))) */ ; - struct { + struct _FP_STRUCT_LAYOUT { _FP_W_TYPE a, b; } longs; - struct { + struct _FP_STRUCT_LAYOUT { #if __BYTE_ORDER == __BIG_ENDIAN unsigned sign : 1; unsigned exp : _FP_EXPBITS_Q; diff --git a/libgcc/soft-fp/single.h b/libgcc/soft-fp/single.h index 9c3734adf48..119d0db3319 100644 --- a/libgcc/soft-fp/single.h +++ b/libgcc/soft-fp/single.h @@ -1,6 +1,6 @@ /* Software floating-point emulation. Definitions for IEEE Single Precision. - Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1998,1999,2006,2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com), Jakub Jelinek (jj@ultra.linux.cz), @@ -27,9 +27,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #if _FP_W_TYPE_SIZE < 32 #error "Here's a nickel kid. Go buy yourself a real computer." @@ -58,7 +57,7 @@ typedef float SFtype __attribute__((mode(SF))); union _FP_UNION_S { SFtype flt; - struct { + struct _FP_STRUCT_LAYOUT { #if __BYTE_ORDER == __BIG_ENDIAN unsigned sign : 1; unsigned exp : _FP_EXPBITS_S; diff --git a/libgcc/soft-fp/soft-fp.h b/libgcc/soft-fp/soft-fp.h index 23073573468..46cb1cfaef8 100644 --- a/libgcc/soft-fp/soft-fp.h +++ b/libgcc/soft-fp/soft-fp.h @@ -1,5 +1,5 @@ /* Software floating-point emulation. - Copyright (C) 1997,1998,1999,2000,2002,2003,2005,2006 + Copyright (C) 1997,1998,1999,2000,2002,2003,2005,2006,2007,2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com), @@ -27,9 +27,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #ifndef SOFT_FP_H #define SOFT_FP_H @@ -85,6 +84,16 @@ #define FP_EX_DENORM 0 #endif +/* _FP_STRUCT_LAYOUT may be defined as an attribute to determine the + struct layout variant used for structures where bit-fields are used + to access specific parts of binary floating-point numbers. This is + required for systems where the default ABI uses struct layout with + differences in how consecutive bit-fields are laid out from the + default expected by soft-fp. */ +#ifndef _FP_STRUCT_LAYOUT +#define _FP_STRUCT_LAYOUT +#endif + #ifdef _FP_DECL_EX #define FP_DECL_EX \ int _fex = 0; \ diff --git a/libgcc/soft-fp/subdf3.c b/libgcc/soft-fp/subdf3.c index 3978b52998d..9352b0a6d32 100644 --- a/libgcc/soft-fp/subdf3.c +++ b/libgcc/soft-fp/subdf3.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/subsf3.c b/libgcc/soft-fp/subsf3.c index f1cbdd1ff1f..1182612c60a 100644 --- a/libgcc/soft-fp/subsf3.c +++ b/libgcc/soft-fp/subsf3.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/subtf3.c b/libgcc/soft-fp/subtf3.c index 7ba4c8c5ea0..0d73d4bc061 100644 --- a/libgcc/soft-fp/subtf3.c +++ b/libgcc/soft-fp/subtf3.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgcc/soft-fp/truncdfsf2.c b/libgcc/soft-fp/truncdfsf2.c index bd953912e98..54015c117be 100644 --- a/libgcc/soft-fp/truncdfsf2.c +++ b/libgcc/soft-fp/truncdfsf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/trunctfdf2.c b/libgcc/soft-fp/trunctfdf2.c index c3827b08abe..16e817cd6b1 100644 --- a/libgcc/soft-fp/trunctfdf2.c +++ b/libgcc/soft-fp/trunctfdf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/trunctfsf2.c b/libgcc/soft-fp/trunctfsf2.c index 676c937e20a..82ef2462223 100644 --- a/libgcc/soft-fp/trunctfsf2.c +++ b/libgcc/soft-fp/trunctfsf2.c @@ -25,9 +25,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/unorddf2.c b/libgcc/soft-fp/unorddf2.c index 5ea63e2b976..3036a2fb7c2 100644 --- a/libgcc/soft-fp/unorddf2.c +++ b/libgcc/soft-fp/unorddf2.c @@ -24,9 +24,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "double.h" diff --git a/libgcc/soft-fp/unordsf2.c b/libgcc/soft-fp/unordsf2.c index 6d0afe853e2..c22578c8d81 100644 --- a/libgcc/soft-fp/unordsf2.c +++ b/libgcc/soft-fp/unordsf2.c @@ -24,9 +24,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "single.h" diff --git a/libgcc/soft-fp/unordtf2.c b/libgcc/soft-fp/unordtf2.c index 9d1bd916c81..8f9b5c647ff 100644 --- a/libgcc/soft-fp/unordtf2.c +++ b/libgcc/soft-fp/unordtf2.c @@ -24,9 +24,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "soft-fp.h" #include "quad.h" diff --git a/libgo/MERGE b/libgo/MERGE index 569aa9c8f93..17d01ce7265 100644 --- a/libgo/MERGE +++ b/libgo/MERGE @@ -1,4 +1,4 @@ -52ba9506bd99 +f4470a54e6db The first line of this file holds the Mercurial revision number of the last merge done from the master library sources. diff --git a/libgo/Makefile.am b/libgo/Makefile.am index 2e874df00b7..99294f12c12 100644 --- a/libgo/Makefile.am +++ b/libgo/Makefile.am @@ -225,7 +225,6 @@ toolexeclibgoexp_DATA = \ $(exp_inotify_gox) \ exp/norm.gox \ exp/proxy.gox \ - exp/signal.gox \ exp/terminal.gox \ exp/types.gox \ exp/utf8string.gox @@ -325,6 +324,7 @@ toolexeclibgoosdir = $(toolexeclibgodir)/os toolexeclibgoos_DATA = \ os/exec.gox \ + os/signal.gox \ os/user.gox toolexeclibgopathdir = $(toolexeclibgodir)/path @@ -352,8 +352,7 @@ toolexeclibgotestingdir = $(toolexeclibgodir)/testing toolexeclibgotesting_DATA = \ testing/iotest.gox \ - testing/quick.gox \ - testing/script.gox + testing/quick.gox toolexeclibgotextdir = $(toolexeclibgodir)/text @@ -398,6 +397,7 @@ runtime_files = \ runtime/go-byte-array-to-string.c \ runtime/go-breakpoint.c \ runtime/go-caller.c \ + runtime/go-callers.c \ runtime/go-can-convert-interface.c \ runtime/go-cgo.c \ runtime/go-check-interface.c \ @@ -428,7 +428,6 @@ runtime_files = \ runtime/go-panic.c \ runtime/go-print.c \ runtime/go-recover.c \ - runtime/go-reflect.c \ runtime/go-reflect-call.c \ runtime/go-reflect-map.c \ runtime/go-rune.c \ @@ -450,7 +449,6 @@ runtime_files = \ runtime/go-type-string.c \ runtime/go-typedesc-equal.c \ runtime/go-typestring.c \ - runtime/go-unreflect.c \ runtime/go-unsafe-new.c \ runtime/go-unsafe-newarray.c \ runtime/go-unsafe-pointer.c \ @@ -468,6 +466,7 @@ runtime_files = \ runtime/msize.c \ runtime/proc.c \ runtime/runtime.c \ + runtime/signal_unix.c \ runtime/thread.c \ runtime/yield.c \ $(rtems_task_variable_add_file) \ @@ -505,11 +504,11 @@ runtime1.c: $(srcdir)/runtime/runtime1.goc goc2c mv -f $@.tmp $@ sema.c: $(srcdir)/runtime/sema.goc goc2c - ./goc2c --gcc --go-prefix libgo_runtime $< > $@.tmp + ./goc2c --gcc --go-prefix libgo_sync $< > $@.tmp mv -f $@.tmp $@ sigqueue.c: $(srcdir)/runtime/sigqueue.goc goc2c - ./goc2c --gcc --go-prefix libgo_runtime $< > $@.tmp + ./goc2c --gcc --go-prefix libgo_os $< > $@.tmp mv -f $@.tmp $@ time.c: $(srcdir)/runtime/time.goc goc2c @@ -526,7 +525,8 @@ go_bufio_files = \ go_bytes_files = \ go/bytes/buffer.go \ go/bytes/bytes.go \ - go/bytes/bytes_decl.go + go/bytes/bytes_decl.go \ + go/bytes/reader.go go_bytes_c_files = \ go/bytes/indexbyte.c @@ -658,10 +658,17 @@ go_net_sock_file = go/net/sock_linux.go go_net_sockopt_file = go/net/sockopt_linux.go go_net_sockoptip_file = go/net/sockoptip_linux.go else +if LIBGO_IS_FREEBSD +go_net_cgo_file = go/net/cgo_bsd.go +go_net_sock_file = go/net/sock_bsd.go +go_net_sockopt_file = go/net/sockopt_bsd.go +go_net_sockoptip_file = go/net/sockoptip_bsd.go go/net/sockoptip_freebsd.go +else go_net_cgo_file = go/net/cgo_bsd.go go_net_sock_file = go/net/sock_bsd.go go_net_sockopt_file = go/net/sockopt_bsd.go -go_net_sockoptip_file = go/net/sockoptip_bsd.go +go_net_sockoptip_file = go/net/sockoptip_bsd.go go/net/sockoptip_netbsd.go +endif endif endif endif @@ -704,6 +711,7 @@ go_net_files = \ go/net/ipsock.go \ go/net/ipsock_posix.go \ go/net/lookup_unix.go \ + go/net/mac.go \ go/net/net.go \ go/net/parse.go \ go/net/pipe.go \ @@ -784,9 +792,7 @@ go_os_files = \ $(go_os_stat_file) \ go/os/str.go \ $(go_os_sys_file) \ - go/os/time.go \ - go/os/types.go \ - signal_unix.go + go/os/types.go go_path_files = \ go/path/match.go \ @@ -811,7 +817,6 @@ go_runtime_files = \ go/runtime/error.go \ go/runtime/extern.go \ go/runtime/mem.go \ - go/runtime/sig.go \ go/runtime/softfloat64.go \ go/runtime/type.go \ version.go @@ -850,6 +855,7 @@ go_sync_files = \ go/sync/cond.go \ go/sync/mutex.go \ go/sync/once.go \ + go/sync/runtime.go \ go/sync/rwmutex.go \ go/sync/waitgroup.go @@ -881,6 +887,7 @@ go_time_files = \ go/time/tick.go \ go/time/time.go \ go/time/zoneinfo.go \ + go/time/zoneinfo_read.go \ go/time/zoneinfo_unix.go go_unicode_files = \ @@ -1017,12 +1024,14 @@ go_debug_dwarf_files = \ go/debug/dwarf/buf.go \ go/debug/dwarf/const.go \ go/debug/dwarf/entry.go \ + go/debug/dwarf/line.go \ go/debug/dwarf/open.go \ go/debug/dwarf/type.go \ go/debug/dwarf/unit.go go_debug_elf_files = \ go/debug/elf/elf.go \ - go/debug/elf/file.go + go/debug/elf/file.go \ + go/debug/elf/runtime.go go_debug_gosym_files = \ go/debug/gosym/pclntab.go \ go/debug/gosym/symtab.go @@ -1094,6 +1103,7 @@ go_exp_norm_files = \ go/exp/norm/composition.go \ go/exp/norm/forminfo.go \ go/exp/norm/input.go \ + go/exp/norm/iter.go \ go/exp/norm/normalize.go \ go/exp/norm/readwriter.go \ go/exp/norm/tables.go \ @@ -1103,8 +1113,6 @@ go_exp_proxy_files = \ go/exp/proxy/per_host.go \ go/exp/proxy/proxy.go \ go/exp/proxy/socks5.go -go_exp_signal_files = \ - go/exp/signal/signal.go go_exp_terminal_files = \ go/exp/terminal/terminal.go \ go/exp/terminal/util.go @@ -1128,8 +1136,7 @@ go_go_ast_files = \ go/go/ast/walk.go go_go_build_files = \ go/go/build/build.go \ - go/go/build/dir.go \ - go/go/build/path.go \ + go/go/build/doc.go \ syslist.go go_go_doc_files = \ go/go/doc/comment.go \ @@ -1137,7 +1144,8 @@ go_go_doc_files = \ go/go/doc/example.go \ go/go/doc/exports.go \ go/go/doc/filter.go \ - go/go/doc/reader.go + go/go/doc/reader.go \ + go/go/doc/synopsis.go go_go_parser_files = \ go/go/parser/interface.go \ go/go/parser/parser.go @@ -1164,7 +1172,6 @@ go_hash_fnv_files = \ go_html_template_files = \ go/html/template/attr.go \ - go/html/template/clone.go \ go/html/template/content.go \ go/html/template/context.go \ go/html/template/css.go \ @@ -1302,6 +1309,10 @@ go_os_exec_files = \ go/os/exec/exec.go \ go/os/exec/lp_unix.go +go_os_signal_files = \ + go/os/signal/signal.go \ + go/os/signal/signal_unix.go + go_os_user_files = \ go/os/user/user.go \ go/os/user/lookup_unix.go @@ -1352,8 +1363,6 @@ go_testing_iotest_files = \ go/testing/iotest/writer.go go_testing_quick_files = \ go/testing/quick/quick.go -go_testing_script_files = \ - go/testing/script/script.go go_text_scanner_files = \ go/text/scanner/scanner.go @@ -1489,6 +1498,13 @@ else syscall_netlink_file = endif +# GNU/Linux specific socket filters. +if LIBGO_IS_LINUX +syscall_lsf_file = go/syscall/lsf_linux.go +else +syscall_lsf_file = +endif + go_base_syscall_files = \ go/syscall/env_unix.go \ go/syscall/syscall_errno.go \ @@ -1509,6 +1525,7 @@ go_base_syscall_files = \ $(syscall_socket_file) \ $(syscall_uname_file) \ $(syscall_netlink_file) \ + $(syscall_lsf_file) \ $(GO_LIBCALL_OS_FILE) \ $(GO_LIBCALL_OS_ARCH_FILE) \ $(GO_SYSCALL_OS_FILE) \ @@ -1521,6 +1538,7 @@ go_syscall_files = \ syscall_arch.go go_syscall_c_files = \ go/syscall/errno.c \ + go/syscall/signame.c \ $(syscall_wait_c_file) libcalls.go: s-libcalls; @true @@ -1659,7 +1677,6 @@ libgo_go_objs = \ exp/html.lo \ exp/norm.lo \ exp/proxy.lo \ - exp/signal.lo \ exp/terminal.lo \ exp/types.lo \ exp/utf8string.lo \ @@ -1704,6 +1721,7 @@ libgo_go_objs = \ old/regexp.lo \ old/template.lo \ $(os_lib_inotify_lo) \ + os/signal.lo \ os/user.lo \ path/filepath.lo \ regexp/syntax.lo \ @@ -1714,6 +1732,7 @@ libgo_go_objs = \ sync/atomic_c.lo \ syscall/syscall.lo \ syscall/errno.lo \ + syscall/signame.lo \ syscall/wait.lo \ text/scanner.lo \ text/tabwriter.lo \ @@ -1722,7 +1741,6 @@ libgo_go_objs = \ testing/testing.lo \ testing/iotest.lo \ testing/quick.lo \ - testing/script.lo \ unicode/utf16.lo \ unicode/utf8.lo @@ -1978,10 +1996,6 @@ os/check: $(CHECK_DEPS) @$(CHECK) .PHONY: os/check -signal_unix.go: $(srcdir)/go/os/mkunixsignals.sh sysinfo.go - $(SHELL) $(srcdir)/go/os/mkunixsignals.sh sysinfo.go > $@.tmp - mv -f $@.tmp $@ - @go_include@ path/path.lo.dep path/path.lo.dep: $(go_path_files) $(BUILDDEPS) @@ -2591,16 +2605,6 @@ exp/proxy/check: $(CHECK_DEPS) @$(CHECK) .PHONY: exp/proxy/check -@go_include@ exp/signal.lo.dep -exp/signal.lo.dep: $(go_exp_signal_files) - $(BUILDDEPS) -exp/signal.lo: $(go_exp_signal_files) - $(BUILDPACKAGE) -exp/signal/check: $(CHECK_DEPS) - @$(MKDIR_P) exp/signal - @$(CHECK) -.PHONY: exp/signal/check - @go_include@ exp/terminal.lo.dep exp/terminal.lo.dep: $(go_exp_terminal_files) $(BUILDDEPS) @@ -3052,6 +3056,16 @@ os/exec/check: $(CHECK_DEPS) @$(CHECK) .PHONY: os/exec/check +@go_include@ os/signal.lo.dep +os/signal.lo.dep: $(go_os_signal_files) + $(BUILDDEPS) +os/signal.lo: $(go_os_signal_files) + $(BUILDPACKAGE) +os/signal/check: $(CHECK_DEPS) + @$(MKDIR_P) os/signal + @$(CHECK) +.PHONY: os/signal/check + @go_include@ os/user.lo.dep os/user.lo.dep: $(go_os_user_files) $(BUILDDEPS) @@ -3163,16 +3177,6 @@ testing/quick/check: $(CHECK_DEPS) @$(CHECK) .PHONY: testing/quick/check -@go_include@ testing/script.lo.dep -testing/script.lo.dep: $(go_testing_script_files) - $(BUILDDEPS) -testing/script.lo: $(go_testing_script_files) - $(BUILDPACKAGE) -testing/script/check: $(CHECK_DEPS) - @$(MKDIR_P) testing/script - @$(CHECK) -.PHONY: testing/script/check - @go_include@ unicode/utf16.lo.dep unicode/utf16.lo.dep: $(go_unicode_utf16_files) $(BUILDDEPS) @@ -3200,6 +3204,8 @@ syscall/syscall.lo: $(go_syscall_files) $(BUILDPACKAGE) syscall/errno.lo: go/syscall/errno.c $(LTCOMPILE) -c -o $@ $< +syscall/signame.lo: go/syscall/signame.c + $(LTCOMPILE) -c -o $@ $< syscall/wait.lo: go/syscall/wait.c $(LTCOMPILE) -c -o $@ $< @@ -3376,8 +3382,6 @@ exp/norm.gox: exp/norm.lo $(BUILDGOX) exp/proxy.gox: exp/proxy.lo $(BUILDGOX) -exp/signal.gox: exp/signal.lo - $(BUILDGOX) exp/terminal.gox: exp/terminal.lo $(BUILDGOX) exp/types.gox: exp/types.lo @@ -3478,6 +3482,8 @@ old/template.gox: old/template.lo os/exec.gox: os/exec.lo $(BUILDGOX) +os/signal.gox: os/signal.lo + $(BUILDGOX) os/user.gox: os/user.lo $(BUILDGOX) @@ -3508,8 +3514,6 @@ testing/iotest.gox: testing/iotest.lo $(BUILDGOX) testing/quick.gox: testing/quick.lo $(BUILDGOX) -testing/script.gox: testing/script.lo - $(BUILDGOX) unicode/utf16.gox: unicode/utf16.lo $(BUILDGOX) @@ -3597,7 +3601,6 @@ TEST_PACKAGES = \ $(exp_inotify_check) \ exp/norm/check \ exp/proxy/check \ - exp/signal/check \ exp/terminal/check \ exp/utf8string/check \ html/template/check \ @@ -3627,6 +3630,7 @@ TEST_PACKAGES = \ net/http/check \ net/http/cgi/check \ net/http/fcgi/check \ + net/http/httptest/check \ net/http/httputil/check \ net/mail/check \ net/rpc/check \ @@ -3638,6 +3642,7 @@ TEST_PACKAGES = \ old/regexp/check \ old/template/check \ os/exec/check \ + os/signal/check \ os/user/check \ path/filepath/check \ regexp/syntax/check \ @@ -3647,7 +3652,6 @@ TEST_PACKAGES = \ text/template/check \ text/template/parse/check \ testing/quick/check \ - testing/script/check \ unicode/utf16/check \ unicode/utf8/check diff --git a/libgo/Makefile.in b/libgo/Makefile.in index 50195cc458a..b57d92919b5 100644 --- a/libgo/Makefile.in +++ b/libgo/Makefile.in @@ -154,25 +154,25 @@ am__DEPENDENCIES_2 = bufio/bufio.lo bytes/bytes.lo bytes/index.lo \ encoding/base32.lo encoding/base64.lo encoding/binary.lo \ encoding/csv.lo encoding/gob.lo encoding/hex.lo \ encoding/json.lo encoding/pem.lo encoding/xml.lo exp/ebnf.lo \ - exp/html.lo exp/norm.lo exp/proxy.lo exp/signal.lo \ - exp/terminal.lo exp/types.lo exp/utf8string.lo \ - html/template.lo go/ast.lo go/build.lo go/doc.lo go/parser.lo \ - go/printer.lo go/scanner.lo go/token.lo hash/adler32.lo \ - hash/crc32.lo hash/crc64.lo hash/fnv.lo net/http/cgi.lo \ - net/http/fcgi.lo net/http/httptest.lo net/http/httputil.lo \ - net/http/pprof.lo image/color.lo image/draw.lo image/gif.lo \ - image/jpeg.lo image/png.lo index/suffixarray.lo io/ioutil.lo \ - log/syslog.lo log/syslog/syslog_c.lo math/big.lo math/cmplx.lo \ - math/rand.lo mime/mime.lo mime/multipart.lo net/http.lo \ - net/mail.lo net/rpc.lo net/smtp.lo net/textproto.lo net/url.lo \ + exp/html.lo exp/norm.lo exp/proxy.lo exp/terminal.lo \ + exp/types.lo exp/utf8string.lo html/template.lo go/ast.lo \ + go/build.lo go/doc.lo go/parser.lo go/printer.lo go/scanner.lo \ + go/token.lo hash/adler32.lo hash/crc32.lo hash/crc64.lo \ + hash/fnv.lo net/http/cgi.lo net/http/fcgi.lo \ + net/http/httptest.lo net/http/httputil.lo net/http/pprof.lo \ + image/color.lo image/draw.lo image/gif.lo image/jpeg.lo \ + image/png.lo index/suffixarray.lo io/ioutil.lo log/syslog.lo \ + log/syslog/syslog_c.lo math/big.lo math/cmplx.lo math/rand.lo \ + mime/mime.lo mime/multipart.lo net/http.lo net/mail.lo \ + net/rpc.lo net/smtp.lo net/textproto.lo net/url.lo \ old/netchan.lo old/regexp.lo old/template.lo \ - $(am__DEPENDENCIES_1) os/user.lo path/filepath.lo \ + $(am__DEPENDENCIES_1) os/signal.lo os/user.lo path/filepath.lo \ regexp/syntax.lo net/rpc/jsonrpc.lo runtime/debug.lo \ runtime/pprof.lo sync/atomic.lo sync/atomic_c.lo \ - syscall/syscall.lo syscall/errno.lo syscall/wait.lo \ - text/scanner.lo text/tabwriter.lo text/template.lo \ - text/template/parse.lo testing/testing.lo testing/iotest.lo \ - testing/quick.lo testing/script.lo unicode/utf16.lo \ + syscall/syscall.lo syscall/errno.lo syscall/signame.lo \ + syscall/wait.lo text/scanner.lo text/tabwriter.lo \ + text/template.lo text/template/parse.lo testing/testing.lo \ + testing/iotest.lo testing/quick.lo unicode/utf16.lo \ unicode/utf8.lo libgo_la_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ @@ -180,14 +180,14 @@ libgo_la_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ am__libgo_la_SOURCES_DIST = runtime/go-append.c runtime/go-assert.c \ runtime/go-assert-interface.c \ runtime/go-byte-array-to-string.c runtime/go-breakpoint.c \ - runtime/go-caller.c runtime/go-can-convert-interface.c \ - runtime/go-cgo.c runtime/go-check-interface.c \ - runtime/go-construct-map.c runtime/go-convert-interface.c \ - runtime/go-copy.c runtime/go-defer.c \ - runtime/go-deferred-recover.c runtime/go-eface-compare.c \ - runtime/go-eface-val-compare.c runtime/go-getgoroot.c \ - runtime/go-int-array-to-string.c runtime/go-int-to-string.c \ - runtime/go-interface-compare.c \ + runtime/go-caller.c runtime/go-callers.c \ + runtime/go-can-convert-interface.c runtime/go-cgo.c \ + runtime/go-check-interface.c runtime/go-construct-map.c \ + runtime/go-convert-interface.c runtime/go-copy.c \ + runtime/go-defer.c runtime/go-deferred-recover.c \ + runtime/go-eface-compare.c runtime/go-eface-val-compare.c \ + runtime/go-getgoroot.c runtime/go-int-array-to-string.c \ + runtime/go-int-to-string.c runtime/go-interface-compare.c \ runtime/go-interface-eface-compare.c \ runtime/go-interface-val-compare.c runtime/go-make-slice.c \ runtime/go-map-delete.c runtime/go-map-index.c \ @@ -195,10 +195,9 @@ am__libgo_la_SOURCES_DIST = runtime/go-append.c runtime/go-assert.c \ runtime/go-matherr.c runtime/go-nanotime.c runtime/go-now.c \ runtime/go-new-map.c runtime/go-new.c runtime/go-nosys.c \ runtime/go-panic.c runtime/go-print.c runtime/go-recover.c \ - runtime/go-reflect.c runtime/go-reflect-call.c \ - runtime/go-reflect-map.c runtime/go-rune.c \ - runtime/go-runtime-error.c runtime/go-setenv.c \ - runtime/go-signal.c runtime/go-strcmp.c \ + runtime/go-reflect-call.c runtime/go-reflect-map.c \ + runtime/go-rune.c runtime/go-runtime-error.c \ + runtime/go-setenv.c runtime/go-signal.c runtime/go-strcmp.c \ runtime/go-string-to-byte-array.c \ runtime/go-string-to-int-array.c runtime/go-strplus.c \ runtime/go-strslice.c runtime/go-trampoline.c \ @@ -206,15 +205,15 @@ am__libgo_la_SOURCES_DIST = runtime/go-append.c runtime/go-assert.c \ runtime/go-type-error.c runtime/go-type-float.c \ runtime/go-type-identity.c runtime/go-type-interface.c \ runtime/go-type-string.c runtime/go-typedesc-equal.c \ - runtime/go-typestring.c runtime/go-unreflect.c \ - runtime/go-unsafe-new.c runtime/go-unsafe-newarray.c \ - runtime/go-unsafe-pointer.c runtime/go-unwind.c runtime/chan.c \ - runtime/cpuprof.c runtime/lock_sema.c runtime/thread-sema.c \ - runtime/lock_futex.c runtime/thread-linux.c runtime/mcache.c \ - runtime/mcentral.c runtime/mem_posix_memalign.c runtime/mem.c \ - runtime/mfinal.c runtime/mfixalloc.c runtime/mgc0.c \ - runtime/mheap.c runtime/msize.c runtime/proc.c \ - runtime/runtime.c runtime/thread.c runtime/yield.c \ + runtime/go-typestring.c runtime/go-unsafe-new.c \ + runtime/go-unsafe-newarray.c runtime/go-unsafe-pointer.c \ + runtime/go-unwind.c runtime/chan.c runtime/cpuprof.c \ + runtime/lock_sema.c runtime/thread-sema.c runtime/lock_futex.c \ + runtime/thread-linux.c runtime/mcache.c runtime/mcentral.c \ + runtime/mem_posix_memalign.c runtime/mem.c runtime/mfinal.c \ + runtime/mfixalloc.c runtime/mgc0.c runtime/mheap.c \ + runtime/msize.c runtime/proc.c runtime/runtime.c \ + runtime/signal_unix.c runtime/thread.c runtime/yield.c \ runtime/rtems-task-variable-add.c iface.c malloc.c map.c \ mprof.c reflect.c runtime1.c sema.c sigqueue.c string.c time.c @LIBGO_IS_LINUX_FALSE@am__objects_1 = lock_sema.lo thread-sema.lo @@ -224,30 +223,30 @@ am__libgo_la_SOURCES_DIST = runtime/go-append.c runtime/go-assert.c \ @LIBGO_IS_RTEMS_TRUE@am__objects_3 = rtems-task-variable-add.lo am__objects_4 = go-append.lo go-assert.lo go-assert-interface.lo \ go-byte-array-to-string.lo go-breakpoint.lo go-caller.lo \ - go-can-convert-interface.lo go-cgo.lo go-check-interface.lo \ - go-construct-map.lo go-convert-interface.lo go-copy.lo \ - go-defer.lo go-deferred-recover.lo go-eface-compare.lo \ + go-callers.lo go-can-convert-interface.lo go-cgo.lo \ + go-check-interface.lo go-construct-map.lo \ + go-convert-interface.lo go-copy.lo go-defer.lo \ + go-deferred-recover.lo go-eface-compare.lo \ go-eface-val-compare.lo go-getgoroot.lo \ go-int-array-to-string.lo go-int-to-string.lo \ go-interface-compare.lo go-interface-eface-compare.lo \ go-interface-val-compare.lo go-make-slice.lo go-map-delete.lo \ go-map-index.lo go-map-len.lo go-map-range.lo go-matherr.lo \ go-nanotime.lo go-now.lo go-new-map.lo go-new.lo go-nosys.lo \ - go-panic.lo go-print.lo go-recover.lo go-reflect.lo \ - go-reflect-call.lo go-reflect-map.lo go-rune.lo \ - go-runtime-error.lo go-setenv.lo go-signal.lo go-strcmp.lo \ - go-string-to-byte-array.lo go-string-to-int-array.lo \ - go-strplus.lo go-strslice.lo go-trampoline.lo \ - go-type-complex.lo go-type-eface.lo go-type-error.lo \ - go-type-float.lo go-type-identity.lo go-type-interface.lo \ - go-type-string.lo go-typedesc-equal.lo go-typestring.lo \ - go-unreflect.lo go-unsafe-new.lo go-unsafe-newarray.lo \ + go-panic.lo go-print.lo go-recover.lo go-reflect-call.lo \ + go-reflect-map.lo go-rune.lo go-runtime-error.lo go-setenv.lo \ + go-signal.lo go-strcmp.lo go-string-to-byte-array.lo \ + go-string-to-int-array.lo go-strplus.lo go-strslice.lo \ + go-trampoline.lo go-type-complex.lo go-type-eface.lo \ + go-type-error.lo go-type-float.lo go-type-identity.lo \ + go-type-interface.lo go-type-string.lo go-typedesc-equal.lo \ + go-typestring.lo go-unsafe-new.lo go-unsafe-newarray.lo \ go-unsafe-pointer.lo go-unwind.lo chan.lo cpuprof.lo \ $(am__objects_1) mcache.lo mcentral.lo $(am__objects_2) \ mfinal.lo mfixalloc.lo mgc0.lo mheap.lo msize.lo proc.lo \ - runtime.lo thread.lo yield.lo $(am__objects_3) iface.lo \ - malloc.lo map.lo mprof.lo reflect.lo runtime1.lo sema.lo \ - sigqueue.lo string.lo time.lo + runtime.lo signal_unix.lo thread.lo yield.lo $(am__objects_3) \ + iface.lo malloc.lo map.lo mprof.lo reflect.lo runtime1.lo \ + sema.lo sigqueue.lo string.lo time.lo am_libgo_la_OBJECTS = $(am__objects_4) libgo_la_OBJECTS = $(am_libgo_la_OBJECTS) libgo_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ @@ -679,7 +678,6 @@ toolexeclibgoexp_DATA = \ $(exp_inotify_gox) \ exp/norm.gox \ exp/proxy.gox \ - exp/signal.gox \ exp/terminal.gox \ exp/types.gox \ exp/utf8string.gox @@ -765,6 +763,7 @@ toolexeclibgoold_DATA = \ toolexeclibgoosdir = $(toolexeclibgodir)/os toolexeclibgoos_DATA = \ os/exec.gox \ + os/signal.gox \ os/user.gox toolexeclibgopathdir = $(toolexeclibgodir)/path @@ -787,8 +786,7 @@ toolexeclibgosync_DATA = \ toolexeclibgotestingdir = $(toolexeclibgodir)/testing toolexeclibgotesting_DATA = \ testing/iotest.gox \ - testing/quick.gox \ - testing/script.gox + testing/quick.gox toolexeclibgotextdir = $(toolexeclibgodir)/text toolexeclibgotext_DATA = \ @@ -818,6 +816,7 @@ runtime_files = \ runtime/go-byte-array-to-string.c \ runtime/go-breakpoint.c \ runtime/go-caller.c \ + runtime/go-callers.c \ runtime/go-can-convert-interface.c \ runtime/go-cgo.c \ runtime/go-check-interface.c \ @@ -848,7 +847,6 @@ runtime_files = \ runtime/go-panic.c \ runtime/go-print.c \ runtime/go-recover.c \ - runtime/go-reflect.c \ runtime/go-reflect-call.c \ runtime/go-reflect-map.c \ runtime/go-rune.c \ @@ -870,7 +868,6 @@ runtime_files = \ runtime/go-type-string.c \ runtime/go-typedesc-equal.c \ runtime/go-typestring.c \ - runtime/go-unreflect.c \ runtime/go-unsafe-new.c \ runtime/go-unsafe-newarray.c \ runtime/go-unsafe-pointer.c \ @@ -888,6 +885,7 @@ runtime_files = \ runtime/msize.c \ runtime/proc.c \ runtime/runtime.c \ + runtime/signal_unix.c \ runtime/thread.c \ runtime/yield.c \ $(rtems_task_variable_add_file) \ @@ -908,7 +906,8 @@ go_bufio_files = \ go_bytes_files = \ go/bytes/buffer.go \ go/bytes/bytes.go \ - go/bytes/bytes_decl.go + go/bytes/bytes_decl.go \ + go/bytes/reader.go go_bytes_c_files = \ go/bytes/indexbyte.c @@ -1013,19 +1012,23 @@ go_mime_files = \ @LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_TRUE@@LIBGO_IS_RTEMS_FALSE@go_net_newpollserver_file = go/net/newpollserver.go @LIBGO_IS_LINUX_TRUE@@LIBGO_IS_RTEMS_FALSE@go_net_newpollserver_file = go/net/newpollserver.go @LIBGO_IS_RTEMS_TRUE@go_net_newpollserver_file = go/net/newpollserver_rtems.go -@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@go_net_cgo_file = go/net/cgo_bsd.go +@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@go_net_cgo_file = go/net/cgo_bsd.go +@LIBGO_IS_FREEBSD_TRUE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@go_net_cgo_file = go/net/cgo_bsd.go @LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_TRUE@go_net_cgo_file = go/net/cgo_linux.go @LIBGO_IS_IRIX_TRUE@@LIBGO_IS_LINUX_FALSE@go_net_cgo_file = go/net/cgo_linux.go @LIBGO_IS_LINUX_TRUE@go_net_cgo_file = go/net/cgo_linux.go -@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@go_net_sock_file = go/net/sock_bsd.go +@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@go_net_sock_file = go/net/sock_bsd.go +@LIBGO_IS_FREEBSD_TRUE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@go_net_sock_file = go/net/sock_bsd.go @LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_TRUE@go_net_sock_file = go/net/sock_linux.go @LIBGO_IS_IRIX_TRUE@@LIBGO_IS_LINUX_FALSE@go_net_sock_file = go/net/sock_linux.go @LIBGO_IS_LINUX_TRUE@go_net_sock_file = go/net/sock_linux.go -@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@go_net_sockopt_file = go/net/sockopt_bsd.go +@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@go_net_sockopt_file = go/net/sockopt_bsd.go +@LIBGO_IS_FREEBSD_TRUE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@go_net_sockopt_file = go/net/sockopt_bsd.go @LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_TRUE@go_net_sockopt_file = go/net/sockopt_linux.go @LIBGO_IS_IRIX_TRUE@@LIBGO_IS_LINUX_FALSE@go_net_sockopt_file = go/net/sockopt_linux.go @LIBGO_IS_LINUX_TRUE@go_net_sockopt_file = go/net/sockopt_linux.go -@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@go_net_sockoptip_file = go/net/sockoptip_bsd.go +@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@go_net_sockoptip_file = go/net/sockoptip_bsd.go go/net/sockoptip_netbsd.go +@LIBGO_IS_FREEBSD_TRUE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@go_net_sockoptip_file = go/net/sockoptip_bsd.go go/net/sockoptip_freebsd.go @LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_TRUE@go_net_sockoptip_file = go/net/sockoptip_linux.go @LIBGO_IS_IRIX_TRUE@@LIBGO_IS_LINUX_FALSE@go_net_sockoptip_file = go/net/sockoptip_linux.go @LIBGO_IS_LINUX_TRUE@go_net_sockoptip_file = go/net/sockoptip_linux.go @@ -1056,6 +1059,7 @@ go_net_files = \ go/net/ipsock.go \ go/net/ipsock_posix.go \ go/net/lookup_unix.go \ + go/net/mac.go \ go/net/net.go \ go/net/parse.go \ go/net/pipe.go \ @@ -1106,9 +1110,7 @@ go_os_files = \ $(go_os_stat_file) \ go/os/str.go \ $(go_os_sys_file) \ - go/os/time.go \ - go/os/types.go \ - signal_unix.go + go/os/types.go go_path_files = \ go/path/match.go \ @@ -1133,7 +1135,6 @@ go_runtime_files = \ go/runtime/error.go \ go/runtime/extern.go \ go/runtime/mem.go \ - go/runtime/sig.go \ go/runtime/softfloat64.go \ go/runtime/type.go \ version.go @@ -1161,6 +1162,7 @@ go_sync_files = \ go/sync/cond.go \ go/sync/mutex.go \ go/sync/once.go \ + go/sync/runtime.go \ go/sync/rwmutex.go \ go/sync/waitgroup.go @@ -1186,6 +1188,7 @@ go_time_files = \ go/time/tick.go \ go/time/time.go \ go/time/zoneinfo.go \ + go/time/zoneinfo_read.go \ go/time/zoneinfo_unix.go go_unicode_files = \ @@ -1337,13 +1340,15 @@ go_debug_dwarf_files = \ go/debug/dwarf/buf.go \ go/debug/dwarf/const.go \ go/debug/dwarf/entry.go \ + go/debug/dwarf/line.go \ go/debug/dwarf/open.go \ go/debug/dwarf/type.go \ go/debug/dwarf/unit.go go_debug_elf_files = \ go/debug/elf/elf.go \ - go/debug/elf/file.go + go/debug/elf/file.go \ + go/debug/elf/runtime.go go_debug_gosym_files = \ go/debug/gosym/pclntab.go \ @@ -1431,6 +1436,7 @@ go_exp_norm_files = \ go/exp/norm/composition.go \ go/exp/norm/forminfo.go \ go/exp/norm/input.go \ + go/exp/norm/iter.go \ go/exp/norm/normalize.go \ go/exp/norm/readwriter.go \ go/exp/norm/tables.go \ @@ -1442,9 +1448,6 @@ go_exp_proxy_files = \ go/exp/proxy/proxy.go \ go/exp/proxy/socks5.go -go_exp_signal_files = \ - go/exp/signal/signal.go - go_exp_terminal_files = \ go/exp/terminal/terminal.go \ go/exp/terminal/util.go @@ -1471,8 +1474,7 @@ go_go_ast_files = \ go_go_build_files = \ go/go/build/build.go \ - go/go/build/dir.go \ - go/go/build/path.go \ + go/go/build/doc.go \ syslist.go go_go_doc_files = \ @@ -1481,7 +1483,8 @@ go_go_doc_files = \ go/go/doc/example.go \ go/go/doc/exports.go \ go/go/doc/filter.go \ - go/go/doc/reader.go + go/go/doc/reader.go \ + go/go/doc/synopsis.go go_go_parser_files = \ go/go/parser/interface.go \ @@ -1515,7 +1518,6 @@ go_hash_fnv_files = \ go_html_template_files = \ go/html/template/attr.go \ - go/html/template/clone.go \ go/html/template/content.go \ go/html/template/context.go \ go/html/template/css.go \ @@ -1664,6 +1666,10 @@ go_os_exec_files = \ go/os/exec/exec.go \ go/os/exec/lp_unix.go +go_os_signal_files = \ + go/os/signal/signal.go \ + go/os/signal/signal_unix.go + go_os_user_files = \ go/os/user/user.go \ go/os/user/lookup_unix.go @@ -1720,9 +1726,6 @@ go_testing_iotest_files = \ go_testing_quick_files = \ go/testing/quick/quick.go -go_testing_script_files = \ - go/testing/script/script.go - go_text_scanner_files = \ go/text/scanner/scanner.go @@ -1795,6 +1798,10 @@ go_unicode_utf8_files = \ # Support for netlink sockets and messages. @LIBGO_IS_LINUX_TRUE@syscall_netlink_file = go/syscall/netlink_linux.go +@LIBGO_IS_LINUX_FALSE@syscall_lsf_file = + +# GNU/Linux specific socket filters. +@LIBGO_IS_LINUX_TRUE@syscall_lsf_file = go/syscall/lsf_linux.go go_base_syscall_files = \ go/syscall/env_unix.go \ go/syscall/syscall_errno.go \ @@ -1815,6 +1822,7 @@ go_base_syscall_files = \ $(syscall_socket_file) \ $(syscall_uname_file) \ $(syscall_netlink_file) \ + $(syscall_lsf_file) \ $(GO_LIBCALL_OS_FILE) \ $(GO_LIBCALL_OS_ARCH_FILE) \ $(GO_SYSCALL_OS_FILE) \ @@ -1828,6 +1836,7 @@ go_syscall_files = \ go_syscall_c_files = \ go/syscall/errno.c \ + go/syscall/signame.c \ $(syscall_wait_c_file) @LIBGO_IS_LINUX_FALSE@os_lib_inotify_lo = @@ -1912,7 +1921,6 @@ libgo_go_objs = \ exp/html.lo \ exp/norm.lo \ exp/proxy.lo \ - exp/signal.lo \ exp/terminal.lo \ exp/types.lo \ exp/utf8string.lo \ @@ -1957,6 +1965,7 @@ libgo_go_objs = \ old/regexp.lo \ old/template.lo \ $(os_lib_inotify_lo) \ + os/signal.lo \ os/user.lo \ path/filepath.lo \ regexp/syntax.lo \ @@ -1967,6 +1976,7 @@ libgo_go_objs = \ sync/atomic_c.lo \ syscall/syscall.lo \ syscall/errno.lo \ + syscall/signame.lo \ syscall/wait.lo \ text/scanner.lo \ text/tabwriter.lo \ @@ -1975,7 +1985,6 @@ libgo_go_objs = \ testing/testing.lo \ testing/iotest.lo \ testing/quick.lo \ - testing/script.lo \ unicode/utf16.lo \ unicode/utf8.lo @@ -2161,7 +2170,6 @@ TEST_PACKAGES = \ $(exp_inotify_check) \ exp/norm/check \ exp/proxy/check \ - exp/signal/check \ exp/terminal/check \ exp/utf8string/check \ html/template/check \ @@ -2191,6 +2199,7 @@ TEST_PACKAGES = \ net/http/check \ net/http/cgi/check \ net/http/fcgi/check \ + net/http/httptest/check \ net/http/httputil/check \ net/mail/check \ net/rpc/check \ @@ -2202,6 +2211,7 @@ TEST_PACKAGES = \ old/regexp/check \ old/template/check \ os/exec/check \ + os/signal/check \ os/user/check \ path/filepath/check \ regexp/syntax/check \ @@ -2211,7 +2221,6 @@ TEST_PACKAGES = \ text/template/check \ text/template/parse/check \ testing/quick/check \ - testing/script/check \ unicode/utf16/check \ unicode/utf8/check @@ -2357,6 +2366,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-breakpoint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-byte-array-to-string.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-caller.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-callers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-can-convert-interface.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-cgo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-check-interface.Plo@am__quote@ @@ -2390,7 +2400,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-recover.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-reflect-call.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-reflect-map.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-reflect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-rune.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-runtime-error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-setenv.Plo@am__quote@ @@ -2410,7 +2419,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-type-string.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-typedesc-equal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-typestring.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-unreflect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-unsafe-new.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-unsafe-newarray.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-unsafe-pointer.Plo@am__quote@ @@ -2436,6 +2444,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runtime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runtime1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sema.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signal_unix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigqueue.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thread-linux.Plo@am__quote@ @@ -2521,6 +2530,13 @@ go-caller.lo: runtime/go-caller.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o go-caller.lo `test -f 'runtime/go-caller.c' || echo '$(srcdir)/'`runtime/go-caller.c +go-callers.lo: runtime/go-callers.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-callers.lo -MD -MP -MF $(DEPDIR)/go-callers.Tpo -c -o go-callers.lo `test -f 'runtime/go-callers.c' || echo '$(srcdir)/'`runtime/go-callers.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/go-callers.Tpo $(DEPDIR)/go-callers.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/go-callers.c' object='go-callers.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o go-callers.lo `test -f 'runtime/go-callers.c' || echo '$(srcdir)/'`runtime/go-callers.c + go-can-convert-interface.lo: runtime/go-can-convert-interface.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-can-convert-interface.lo -MD -MP -MF $(DEPDIR)/go-can-convert-interface.Tpo -c -o go-can-convert-interface.lo `test -f 'runtime/go-can-convert-interface.c' || echo '$(srcdir)/'`runtime/go-can-convert-interface.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/go-can-convert-interface.Tpo $(DEPDIR)/go-can-convert-interface.Plo @@ -2731,13 +2747,6 @@ go-recover.lo: runtime/go-recover.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o go-recover.lo `test -f 'runtime/go-recover.c' || echo '$(srcdir)/'`runtime/go-recover.c -go-reflect.lo: runtime/go-reflect.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-reflect.lo -MD -MP -MF $(DEPDIR)/go-reflect.Tpo -c -o go-reflect.lo `test -f 'runtime/go-reflect.c' || echo '$(srcdir)/'`runtime/go-reflect.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/go-reflect.Tpo $(DEPDIR)/go-reflect.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/go-reflect.c' object='go-reflect.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o go-reflect.lo `test -f 'runtime/go-reflect.c' || echo '$(srcdir)/'`runtime/go-reflect.c - go-reflect-call.lo: runtime/go-reflect-call.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-reflect-call.lo -MD -MP -MF $(DEPDIR)/go-reflect-call.Tpo -c -o go-reflect-call.lo `test -f 'runtime/go-reflect-call.c' || echo '$(srcdir)/'`runtime/go-reflect-call.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/go-reflect-call.Tpo $(DEPDIR)/go-reflect-call.Plo @@ -2885,13 +2894,6 @@ go-typestring.lo: runtime/go-typestring.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o go-typestring.lo `test -f 'runtime/go-typestring.c' || echo '$(srcdir)/'`runtime/go-typestring.c -go-unreflect.lo: runtime/go-unreflect.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-unreflect.lo -MD -MP -MF $(DEPDIR)/go-unreflect.Tpo -c -o go-unreflect.lo `test -f 'runtime/go-unreflect.c' || echo '$(srcdir)/'`runtime/go-unreflect.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/go-unreflect.Tpo $(DEPDIR)/go-unreflect.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/go-unreflect.c' object='go-unreflect.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o go-unreflect.lo `test -f 'runtime/go-unreflect.c' || echo '$(srcdir)/'`runtime/go-unreflect.c - go-unsafe-new.lo: runtime/go-unsafe-new.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-unsafe-new.lo -MD -MP -MF $(DEPDIR)/go-unsafe-new.Tpo -c -o go-unsafe-new.lo `test -f 'runtime/go-unsafe-new.c' || echo '$(srcdir)/'`runtime/go-unsafe-new.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/go-unsafe-new.Tpo $(DEPDIR)/go-unsafe-new.Plo @@ -3039,6 +3041,13 @@ runtime.lo: runtime/runtime.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o runtime.lo `test -f 'runtime/runtime.c' || echo '$(srcdir)/'`runtime/runtime.c +signal_unix.lo: runtime/signal_unix.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT signal_unix.lo -MD -MP -MF $(DEPDIR)/signal_unix.Tpo -c -o signal_unix.lo `test -f 'runtime/signal_unix.c' || echo '$(srcdir)/'`runtime/signal_unix.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/signal_unix.Tpo $(DEPDIR)/signal_unix.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/signal_unix.c' object='signal_unix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o signal_unix.lo `test -f 'runtime/signal_unix.c' || echo '$(srcdir)/'`runtime/signal_unix.c + thread.lo: runtime/thread.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT thread.lo -MD -MP -MF $(DEPDIR)/thread.Tpo -c -o thread.lo `test -f 'runtime/thread.c' || echo '$(srcdir)/'`runtime/thread.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/thread.Tpo $(DEPDIR)/thread.Plo @@ -4318,11 +4327,11 @@ runtime1.c: $(srcdir)/runtime/runtime1.goc goc2c mv -f $@.tmp $@ sema.c: $(srcdir)/runtime/sema.goc goc2c - ./goc2c --gcc --go-prefix libgo_runtime $< > $@.tmp + ./goc2c --gcc --go-prefix libgo_sync $< > $@.tmp mv -f $@.tmp $@ sigqueue.c: $(srcdir)/runtime/sigqueue.goc goc2c - ./goc2c --gcc --go-prefix libgo_runtime $< > $@.tmp + ./goc2c --gcc --go-prefix libgo_os $< > $@.tmp mv -f $@.tmp $@ time.c: $(srcdir)/runtime/time.goc goc2c @@ -4543,10 +4552,6 @@ os/check: $(CHECK_DEPS) @$(CHECK) .PHONY: os/check -signal_unix.go: $(srcdir)/go/os/mkunixsignals.sh sysinfo.go - $(SHELL) $(srcdir)/go/os/mkunixsignals.sh sysinfo.go > $@.tmp - mv -f $@.tmp $@ - @go_include@ path/path.lo.dep path/path.lo.dep: $(go_path_files) $(BUILDDEPS) @@ -5156,16 +5161,6 @@ exp/proxy/check: $(CHECK_DEPS) @$(CHECK) .PHONY: exp/proxy/check -@go_include@ exp/signal.lo.dep -exp/signal.lo.dep: $(go_exp_signal_files) - $(BUILDDEPS) -exp/signal.lo: $(go_exp_signal_files) - $(BUILDPACKAGE) -exp/signal/check: $(CHECK_DEPS) - @$(MKDIR_P) exp/signal - @$(CHECK) -.PHONY: exp/signal/check - @go_include@ exp/terminal.lo.dep exp/terminal.lo.dep: $(go_exp_terminal_files) $(BUILDDEPS) @@ -5617,6 +5612,16 @@ os/exec/check: $(CHECK_DEPS) @$(CHECK) .PHONY: os/exec/check +@go_include@ os/signal.lo.dep +os/signal.lo.dep: $(go_os_signal_files) + $(BUILDDEPS) +os/signal.lo: $(go_os_signal_files) + $(BUILDPACKAGE) +os/signal/check: $(CHECK_DEPS) + @$(MKDIR_P) os/signal + @$(CHECK) +.PHONY: os/signal/check + @go_include@ os/user.lo.dep os/user.lo.dep: $(go_os_user_files) $(BUILDDEPS) @@ -5728,16 +5733,6 @@ testing/quick/check: $(CHECK_DEPS) @$(CHECK) .PHONY: testing/quick/check -@go_include@ testing/script.lo.dep -testing/script.lo.dep: $(go_testing_script_files) - $(BUILDDEPS) -testing/script.lo: $(go_testing_script_files) - $(BUILDPACKAGE) -testing/script/check: $(CHECK_DEPS) - @$(MKDIR_P) testing/script - @$(CHECK) -.PHONY: testing/script/check - @go_include@ unicode/utf16.lo.dep unicode/utf16.lo.dep: $(go_unicode_utf16_files) $(BUILDDEPS) @@ -5765,6 +5760,8 @@ syscall/syscall.lo: $(go_syscall_files) $(BUILDPACKAGE) syscall/errno.lo: go/syscall/errno.c $(LTCOMPILE) -c -o $@ $< +syscall/signame.lo: go/syscall/signame.c + $(LTCOMPILE) -c -o $@ $< syscall/wait.lo: go/syscall/wait.c $(LTCOMPILE) -c -o $@ $< @@ -5936,8 +5933,6 @@ exp/norm.gox: exp/norm.lo $(BUILDGOX) exp/proxy.gox: exp/proxy.lo $(BUILDGOX) -exp/signal.gox: exp/signal.lo - $(BUILDGOX) exp/terminal.gox: exp/terminal.lo $(BUILDGOX) exp/types.gox: exp/types.lo @@ -6038,6 +6033,8 @@ old/template.gox: old/template.lo os/exec.gox: os/exec.lo $(BUILDGOX) +os/signal.gox: os/signal.lo + $(BUILDGOX) os/user.gox: os/user.lo $(BUILDGOX) @@ -6068,8 +6065,6 @@ testing/iotest.gox: testing/iotest.lo $(BUILDGOX) testing/quick.gox: testing/quick.lo $(BUILDGOX) -testing/script.gox: testing/script.lo - $(BUILDGOX) unicode/utf16.gox: unicode/utf16.lo $(BUILDGOX) diff --git a/libgo/config.h.in b/libgo/config.h.in index 5318cf58c44..ccb79e187e4 100644 --- a/libgo/config.h.in +++ b/libgo/config.h.in @@ -12,6 +12,9 @@ /* Define to 1 if you have the `faccessat' function. */ #undef HAVE_FACCESSAT +/* Define to 1 if you have the `fallocate' function. */ +#undef HAVE_FALLOCATE + /* Define to 1 if you have the `fchmodat' function. */ #undef HAVE_FCHMODAT @@ -30,6 +33,9 @@ /* Define to 1 if you have the `inotify_init' function. */ #undef HAVE_INOTIFY_INIT +/* Define to 1 if you have the `inotify_init1' function. */ +#undef HAVE_INOTIFY_INIT1 + /* Define to 1 if you have the `inotify_rm_watch' function. */ #undef HAVE_INOTIFY_RM_WATCH @@ -42,6 +48,9 @@ /* Define to 1 if you have the <linux/netlink.h> header file. */ #undef HAVE_LINUX_NETLINK_H +/* Define to 1 if you have the <linux/reboot.h> header file. */ +#undef HAVE_LINUX_REBOOT_H + /* Define to 1 if you have the <linux/rtnetlink.h> header file. */ #undef HAVE_LINUX_RTNETLINK_H @@ -121,6 +130,9 @@ uint32 */ #undef HAVE_SYNC_FETCH_AND_ADD_4 +/* Define to 1 if you have the `sync_file_range' function. */ +#undef HAVE_SYNC_FILE_RANGE + /* Define to 1 if you have the <syscall.h> header file. */ #undef HAVE_SYSCALL_H @@ -130,6 +142,9 @@ /* Define to 1 if you have the <sys/mman.h> header file. */ #undef HAVE_SYS_MMAN_H +/* Define to 1 if you have the <sys/mount.h> header file. */ +#undef HAVE_SYS_MOUNT_H + /* Define to 1 if you have the <sys/prctl.h> header file. */ #undef HAVE_SYS_PRCTL_H @@ -142,12 +157,21 @@ /* Define to 1 if you have the <sys/socket.h> header file. */ #undef HAVE_SYS_SOCKET_H +/* Define to 1 if you have the <sys/statfs.h> header file. */ +#undef HAVE_SYS_STATFS_H + /* Define to 1 if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the <sys/syscall.h> header file. */ #undef HAVE_SYS_SYSCALL_H +/* Define to 1 if you have the <sys/sysinfo.h> header file. */ +#undef HAVE_SYS_SYSINFO_H + +/* Define to 1 if you have the <sys/timex.h> header file. */ +#undef HAVE_SYS_TIMEX_H + /* Define to 1 if you have the <sys/types.h> header file. */ #undef HAVE_SYS_TYPES_H @@ -157,6 +181,9 @@ /* Define to 1 if you have the <sys/utsname.h> header file. */ #undef HAVE_SYS_UTSNAME_H +/* Define to 1 if you have the <sys/vfs.h> header file. */ +#undef HAVE_SYS_VFS_H + /* Define to 1 if you have the `tee' function. */ #undef HAVE_TEE @@ -169,6 +196,12 @@ /* Define to 1 if you have the `unshare' function. */ #undef HAVE_UNSHARE +/* Define to 1 if you have the <ustat.h> header file and it works. */ +#undef HAVE_USTAT_H + +/* Define to 1 if you have the <utime.h> header file. */ +#undef HAVE_UTIME_H + /* Define to 1 if you have the `wait4' function. */ #undef HAVE_WAIT4 @@ -235,3 +268,6 @@ # undef WORDS_BIGENDIAN # endif #endif + +/* Define to `long int' if <sys/types.h> does not define. */ +#undef off_t diff --git a/libgo/configure b/libgo/configure index 1f61cff0fc7..d1c17f10c8b 100755 --- a/libgo/configure +++ b/libgo/configure @@ -14508,7 +14508,7 @@ no) ;; esac -for ac_header in sys/mman.h syscall.h sys/epoll.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h sys/prctl.h +for ac_header in sys/mman.h syscall.h sys/epoll.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/reboot.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" @@ -14542,6 +14542,39 @@ fi done +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <ustat.h> can be used" >&5 +$as_echo_n "checking whether <ustat.h> can be used... " >&6; } +if test "${libgo_cv_c_ustat_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + CFLAGS_hold=$CFLAGS +CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $OSCFLAGS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <sys/types.h> +#ifdef HAVE_LINUX_FILTER_H +#include <linux/filter.h> +#endif +#include <ustat.h> + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + libgo_cv_c_ustat_h=yes +else + libgo_cv_c_ustat_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CFLAGS=$CFLAGS_hold +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgo_cv_c_ustat_h" >&5 +$as_echo "$libgo_cv_c_ustat_h" >&6; } +if test $libgo_cv_c_ustat_h = yes; then + +$as_echo "#define HAVE_USTAT_H 1" >>confdefs.h + +fi + if test "$ac_cv_header_sys_mman_h" = yes; then HAVE_SYS_MMAN_H_TRUE= HAVE_SYS_MMAN_H_FALSE='#' @@ -14581,7 +14614,7 @@ else fi -for ac_func in epoll_create1 faccessat fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_rm_watch mkdirat mknodat openat renameat splice tee unlinkat unshare +for ac_func in epoll_create1 faccessat fallocate fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_init1 inotify_rm_watch mkdirat mknodat openat renameat sync_file_range splice tee unlinkat unshare do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -14594,6 +14627,17 @@ _ACEOF fi done +ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" +if test "x$ac_cv_type_off_t" = x""yes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define off_t long int +_ACEOF + +fi + ac_fn_c_check_type "$LINENO" "loff_t" "ac_cv_type_loff_t" "$ac_includes_default" if test "x$ac_cv_type_loff_t" = x""yes; then : diff --git a/libgo/configure.ac b/libgo/configure.ac index 46c2b29222b..63c5faf7db6 100644 --- a/libgo/configure.ac +++ b/libgo/configure.ac @@ -453,7 +453,7 @@ no) ;; esac -AC_CHECK_HEADERS(sys/mman.h syscall.h sys/epoll.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h sys/prctl.h) +AC_CHECK_HEADERS(sys/mman.h syscall.h sys/epoll.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/reboot.h) AC_CHECK_HEADERS([linux/filter.h linux/netlink.h linux/rtnetlink.h], [], [], [#ifdef HAVE_SYS_SOCKET_H @@ -461,13 +461,32 @@ AC_CHECK_HEADERS([linux/filter.h linux/netlink.h linux/rtnetlink.h], [], [], #endif ]) +AC_CACHE_CHECK([whether <ustat.h> can be used], +[libgo_cv_c_ustat_h], +[CFLAGS_hold=$CFLAGS +CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $OSCFLAGS" +AC_COMPILE_IFELSE( +[AC_LANG_SOURCE([ +#include <sys/types.h> +#ifdef HAVE_LINUX_FILTER_H +#include <linux/filter.h> +#endif +#include <ustat.h> +])], [libgo_cv_c_ustat_h=yes], [libgo_cv_c_ustat_h=no]) +CFLAGS=$CFLAGS_hold]) +if test $libgo_cv_c_ustat_h = yes; then + AC_DEFINE(HAVE_USTAT_H, 1, + [Define to 1 if you have the <ustat.h> header file and it works.]) +fi + AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes) AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv) AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes) AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes) -AC_CHECK_FUNCS(epoll_create1 faccessat fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_rm_watch mkdirat mknodat openat renameat splice tee unlinkat unshare) +AC_CHECK_FUNCS(epoll_create1 faccessat fallocate fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_init1 inotify_rm_watch mkdirat mknodat openat renameat sync_file_range splice tee unlinkat unshare) +AC_TYPE_OFF_T AC_CHECK_TYPES([loff_t]) CFLAGS_hold="$CFLAGS" diff --git a/libgo/go/archive/zip/reader.go b/libgo/go/archive/zip/reader.go index c3009869b60..f3826dcc48d 100644 --- a/libgo/go/archive/zip/reader.go +++ b/libgo/go/archive/zip/reader.go @@ -169,48 +169,21 @@ func (r *checksumReader) Read(b []byte) (n int, err error) { func (r *checksumReader) Close() error { return r.rc.Close() } -func readFileHeader(f *File, r io.Reader) error { - var b [fileHeaderLen]byte - if _, err := io.ReadFull(r, b[:]); err != nil { - return err - } - c := binary.LittleEndian - if sig := c.Uint32(b[:4]); sig != fileHeaderSignature { - return ErrFormat - } - f.ReaderVersion = c.Uint16(b[4:6]) - f.Flags = c.Uint16(b[6:8]) - f.Method = c.Uint16(b[8:10]) - f.ModifiedTime = c.Uint16(b[10:12]) - f.ModifiedDate = c.Uint16(b[12:14]) - f.CRC32 = c.Uint32(b[14:18]) - f.CompressedSize = c.Uint32(b[18:22]) - f.UncompressedSize = c.Uint32(b[22:26]) - filenameLen := int(c.Uint16(b[26:28])) - extraLen := int(c.Uint16(b[28:30])) - d := make([]byte, filenameLen+extraLen) - if _, err := io.ReadFull(r, d); err != nil { - return err - } - f.Name = string(d[:filenameLen]) - f.Extra = d[filenameLen:] - return nil -} - // findBodyOffset does the minimum work to verify the file has a header // and returns the file body offset. func (f *File) findBodyOffset() (int64, error) { r := io.NewSectionReader(f.zipr, f.headerOffset, f.zipsize-f.headerOffset) - var b [fileHeaderLen]byte - if _, err := io.ReadFull(r, b[:]); err != nil { + var buf [fileHeaderLen]byte + if _, err := io.ReadFull(r, buf[:]); err != nil { return 0, err } - c := binary.LittleEndian - if sig := c.Uint32(b[:4]); sig != fileHeaderSignature { + b := readBuf(buf[:]) + if sig := b.uint32(); sig != fileHeaderSignature { return 0, ErrFormat } - filenameLen := int(c.Uint16(b[26:28])) - extraLen := int(c.Uint16(b[28:30])) + b = b[22:] // skip over most of the header + filenameLen := int(b.uint16()) + extraLen := int(b.uint16()) return int64(fileHeaderLen + filenameLen + extraLen), nil } @@ -218,30 +191,29 @@ func (f *File) findBodyOffset() (int64, error) { // It returns io.ErrUnexpectedEOF if it cannot read a complete header, // and ErrFormat if it doesn't find a valid header signature. func readDirectoryHeader(f *File, r io.Reader) error { - var b [directoryHeaderLen]byte - if _, err := io.ReadFull(r, b[:]); err != nil { + var buf [directoryHeaderLen]byte + if _, err := io.ReadFull(r, buf[:]); err != nil { return err } - c := binary.LittleEndian - if sig := c.Uint32(b[:4]); sig != directoryHeaderSignature { + b := readBuf(buf[:]) + if sig := b.uint32(); sig != directoryHeaderSignature { return ErrFormat } - f.CreatorVersion = c.Uint16(b[4:6]) - f.ReaderVersion = c.Uint16(b[6:8]) - f.Flags = c.Uint16(b[8:10]) - f.Method = c.Uint16(b[10:12]) - f.ModifiedTime = c.Uint16(b[12:14]) - f.ModifiedDate = c.Uint16(b[14:16]) - f.CRC32 = c.Uint32(b[16:20]) - f.CompressedSize = c.Uint32(b[20:24]) - f.UncompressedSize = c.Uint32(b[24:28]) - filenameLen := int(c.Uint16(b[28:30])) - extraLen := int(c.Uint16(b[30:32])) - commentLen := int(c.Uint16(b[32:34])) - // startDiskNumber := c.Uint16(b[34:36]) // Unused - // internalAttributes := c.Uint16(b[36:38]) // Unused - f.ExternalAttrs = c.Uint32(b[38:42]) - f.headerOffset = int64(c.Uint32(b[42:46])) + f.CreatorVersion = b.uint16() + f.ReaderVersion = b.uint16() + f.Flags = b.uint16() + f.Method = b.uint16() + f.ModifiedTime = b.uint16() + f.ModifiedDate = b.uint16() + f.CRC32 = b.uint32() + f.CompressedSize = b.uint32() + f.UncompressedSize = b.uint32() + filenameLen := int(b.uint16()) + extraLen := int(b.uint16()) + commentLen := int(b.uint16()) + b = b[4:] // skipped start disk number and internal attributes (2x uint16) + f.ExternalAttrs = b.uint32() + f.headerOffset = int64(b.uint32()) d := make([]byte, filenameLen+extraLen+commentLen) if _, err := io.ReadFull(r, d); err != nil { return err @@ -253,30 +225,30 @@ func readDirectoryHeader(f *File, r io.Reader) error { } func readDataDescriptor(r io.Reader, f *File) error { - var b [dataDescriptorLen]byte - if _, err := io.ReadFull(r, b[:]); err != nil { + var buf [dataDescriptorLen]byte + if _, err := io.ReadFull(r, buf[:]); err != nil { return err } - c := binary.LittleEndian - f.CRC32 = c.Uint32(b[:4]) - f.CompressedSize = c.Uint32(b[4:8]) - f.UncompressedSize = c.Uint32(b[8:12]) + b := readBuf(buf[:]) + f.CRC32 = b.uint32() + f.CompressedSize = b.uint32() + f.UncompressedSize = b.uint32() return nil } func readDirectoryEnd(r io.ReaderAt, size int64) (dir *directoryEnd, err error) { // look for directoryEndSignature in the last 1k, then in the last 65k - var b []byte + var buf []byte for i, bLen := range []int64{1024, 65 * 1024} { if bLen > size { bLen = size } - b = make([]byte, int(bLen)) - if _, err := r.ReadAt(b, size-bLen); err != nil && err != io.EOF { + buf = make([]byte, int(bLen)) + if _, err := r.ReadAt(buf, size-bLen); err != nil && err != io.EOF { return nil, err } - if p := findSignatureInBlock(b); p >= 0 { - b = b[p:] + if p := findSignatureInBlock(buf); p >= 0 { + buf = buf[p:] break } if i == 1 || bLen == size { @@ -285,16 +257,21 @@ func readDirectoryEnd(r io.ReaderAt, size int64) (dir *directoryEnd, err error) } // read header into struct - c := binary.LittleEndian - d := new(directoryEnd) - d.diskNbr = c.Uint16(b[4:6]) - d.dirDiskNbr = c.Uint16(b[6:8]) - d.dirRecordsThisDisk = c.Uint16(b[8:10]) - d.directoryRecords = c.Uint16(b[10:12]) - d.directorySize = c.Uint32(b[12:16]) - d.directoryOffset = c.Uint32(b[16:20]) - d.commentLen = c.Uint16(b[20:22]) - d.comment = string(b[22 : 22+int(d.commentLen)]) + b := readBuf(buf[4:]) // skip signature + d := &directoryEnd{ + diskNbr: b.uint16(), + dirDiskNbr: b.uint16(), + dirRecordsThisDisk: b.uint16(), + directoryRecords: b.uint16(), + directorySize: b.uint32(), + directoryOffset: b.uint32(), + commentLen: b.uint16(), + } + l := int(d.commentLen) + if l > len(b) { + return nil, errors.New("zip: invalid comment length") + } + d.comment = string(b[:l]) return d, nil } @@ -311,3 +288,17 @@ func findSignatureInBlock(b []byte) int { } return -1 } + +type readBuf []byte + +func (b *readBuf) uint16() uint16 { + v := binary.LittleEndian.Uint16(*b) + *b = (*b)[2:] + return v +} + +func (b *readBuf) uint32() uint32 { + v := binary.LittleEndian.Uint32(*b) + *b = (*b)[4:] + return v +} diff --git a/libgo/go/archive/zip/reader_test.go b/libgo/go/archive/zip/reader_test.go index 935860e791e..066a61580c5 100644 --- a/libgo/go/archive/zip/reader_test.go +++ b/libgo/go/archive/zip/reader_test.go @@ -165,7 +165,7 @@ func readTestZip(t *testing.T, zt ZipTest) { t.Errorf("%s: comment=%q, want %q", zt.Name, z.Comment, zt.Comment) } if len(z.File) != len(zt.File) { - t.Errorf("%s: file count=%d, want %d", zt.Name, len(z.File), len(zt.File)) + t.Fatalf("%s: file count=%d, want %d", zt.Name, len(z.File), len(zt.File)) } // test read of each file @@ -278,7 +278,7 @@ func TestInvalidFiles(t *testing.T) { b := make([]byte, size) // zeroes - _, err := NewReader(sliceReaderAt(b), size) + _, err := NewReader(bytes.NewReader(b), size) if err != ErrFormat { t.Errorf("zeroes: error=%v, want %v", err, ErrFormat) } @@ -289,15 +289,8 @@ func TestInvalidFiles(t *testing.T) { for i := 0; i < size-4; i += 4 { copy(b[i:i+4], sig) } - _, err = NewReader(sliceReaderAt(b), size) + _, err = NewReader(bytes.NewReader(b), size) if err != ErrFormat { t.Errorf("sigs: error=%v, want %v", err, ErrFormat) } } - -type sliceReaderAt []byte - -func (r sliceReaderAt) ReadAt(b []byte, off int64) (int, error) { - copy(b, r[int(off):int(off)+len(b)]) - return len(b), nil -} diff --git a/libgo/go/archive/zip/struct.go b/libgo/go/archive/zip/struct.go index 35dcec6468b..fdbd16da048 100644 --- a/libgo/go/archive/zip/struct.go +++ b/libgo/go/archive/zip/struct.go @@ -100,16 +100,6 @@ type directoryEnd struct { comment string } -func recoverError(errp *error) { - if e := recover(); e != nil { - if err, ok := e.(error); ok { - *errp = err - return - } - panic(e) - } -} - // msDosTimeToTime converts an MS-DOS date and time into a time.Time. // The resolution is 2s. // See: http://msdn.microsoft.com/en-us/library/ms724247(v=VS.85).aspx diff --git a/libgo/go/archive/zip/writer.go b/libgo/go/archive/zip/writer.go index a4f0654474a..b2cc55bc93b 100644 --- a/libgo/go/archive/zip/writer.go +++ b/libgo/go/archive/zip/writer.go @@ -19,7 +19,7 @@ import ( // Writer implements a zip file writer. type Writer struct { - countWriter + cw *countWriter dir []*header last *fileWriter closed bool @@ -32,15 +32,15 @@ type header struct { // NewWriter returns a new Writer writing a zip file to w. func NewWriter(w io.Writer) *Writer { - return &Writer{countWriter: countWriter{w: bufio.NewWriter(w)}} + return &Writer{cw: &countWriter{w: bufio.NewWriter(w)}} } // Close finishes writing the zip file by writing the central directory. // It does not (and can not) close the underlying writer. -func (w *Writer) Close() (err error) { +func (w *Writer) Close() error { if w.last != nil && !w.last.closed { - if err = w.last.close(); err != nil { - return + if err := w.last.close(); err != nil { + return err } w.last = nil } @@ -49,45 +49,57 @@ func (w *Writer) Close() (err error) { } w.closed = true - defer recoverError(&err) - // write central directory - start := w.count + start := w.cw.count for _, h := range w.dir { - write(w, uint32(directoryHeaderSignature)) - write(w, h.CreatorVersion) - write(w, h.ReaderVersion) - write(w, h.Flags) - write(w, h.Method) - write(w, h.ModifiedTime) - write(w, h.ModifiedDate) - write(w, h.CRC32) - write(w, h.CompressedSize) - write(w, h.UncompressedSize) - write(w, uint16(len(h.Name))) - write(w, uint16(len(h.Extra))) - write(w, uint16(len(h.Comment))) - write(w, uint16(0)) // disk number start - write(w, uint16(0)) // internal file attributes - write(w, h.ExternalAttrs) - write(w, h.offset) - writeBytes(w, []byte(h.Name)) - writeBytes(w, h.Extra) - writeBytes(w, []byte(h.Comment)) + var buf [directoryHeaderLen]byte + b := writeBuf(buf[:]) + b.uint32(uint32(directoryHeaderSignature)) + b.uint16(h.CreatorVersion) + b.uint16(h.ReaderVersion) + b.uint16(h.Flags) + b.uint16(h.Method) + b.uint16(h.ModifiedTime) + b.uint16(h.ModifiedDate) + b.uint32(h.CRC32) + b.uint32(h.CompressedSize) + b.uint32(h.UncompressedSize) + b.uint16(uint16(len(h.Name))) + b.uint16(uint16(len(h.Extra))) + b.uint16(uint16(len(h.Comment))) + b = b[4:] // skip disk number start and internal file attr (2x uint16) + b.uint32(h.ExternalAttrs) + b.uint32(h.offset) + if _, err := w.cw.Write(buf[:]); err != nil { + return err + } + if _, err := io.WriteString(w.cw, h.Name); err != nil { + return err + } + if _, err := w.cw.Write(h.Extra); err != nil { + return err + } + if _, err := io.WriteString(w.cw, h.Comment); err != nil { + return err + } } - end := w.count + end := w.cw.count // write end record - write(w, uint32(directoryEndSignature)) - write(w, uint16(0)) // disk number - write(w, uint16(0)) // disk number where directory starts - write(w, uint16(len(w.dir))) // number of entries this disk - write(w, uint16(len(w.dir))) // number of entries total - write(w, uint32(end-start)) // size of directory - write(w, uint32(start)) // start of directory - write(w, uint16(0)) // size of comment + var buf [directoryEndLen]byte + b := writeBuf(buf[:]) + b.uint32(uint32(directoryEndSignature)) + b = b[4:] // skip over disk number and first disk number (2x uint16) + b.uint16(uint16(len(w.dir))) // number of entries this disk + b.uint16(uint16(len(w.dir))) // number of entries total + b.uint32(uint32(end - start)) // size of directory + b.uint32(uint32(start)) // start of directory + // skipped size of comment (always zero) + if _, err := w.cw.Write(buf[:]); err != nil { + return err + } - return w.w.(*bufio.Writer).Flush() + return w.cw.w.(*bufio.Writer).Flush() } // Create adds a file to the zip file using the provided name. @@ -119,15 +131,19 @@ func (w *Writer) CreateHeader(fh *FileHeader) (io.Writer, error) { fh.ReaderVersion = 0x14 fw := &fileWriter{ - zipw: w, - compCount: &countWriter{w: w}, + zipw: w.cw, + compCount: &countWriter{w: w.cw}, crc32: crc32.NewIEEE(), } switch fh.Method { case Store: fw.comp = nopCloser{fw.compCount} case Deflate: - fw.comp = flate.NewWriter(fw.compCount, 5) + var err error + fw.comp, err = flate.NewWriter(fw.compCount, 5) + if err != nil { + return nil, err + } default: return nil, ErrAlgorithm } @@ -135,12 +151,12 @@ func (w *Writer) CreateHeader(fh *FileHeader) (io.Writer, error) { h := &header{ FileHeader: fh, - offset: uint32(w.count), + offset: uint32(w.cw.count), } w.dir = append(w.dir, h) fw.header = h - if err := writeHeader(w, fh); err != nil { + if err := writeHeader(w.cw, fh); err != nil { return nil, err } @@ -148,22 +164,28 @@ func (w *Writer) CreateHeader(fh *FileHeader) (io.Writer, error) { return fw, nil } -func writeHeader(w io.Writer, h *FileHeader) (err error) { - defer recoverError(&err) - write(w, uint32(fileHeaderSignature)) - write(w, h.ReaderVersion) - write(w, h.Flags) - write(w, h.Method) - write(w, h.ModifiedTime) - write(w, h.ModifiedDate) - write(w, h.CRC32) - write(w, h.CompressedSize) - write(w, h.UncompressedSize) - write(w, uint16(len(h.Name))) - write(w, uint16(len(h.Extra))) - writeBytes(w, []byte(h.Name)) - writeBytes(w, h.Extra) - return nil +func writeHeader(w io.Writer, h *FileHeader) error { + var buf [fileHeaderLen]byte + b := writeBuf(buf[:]) + b.uint32(uint32(fileHeaderSignature)) + b.uint16(h.ReaderVersion) + b.uint16(h.Flags) + b.uint16(h.Method) + b.uint16(h.ModifiedTime) + b.uint16(h.ModifiedDate) + b.uint32(h.CRC32) + b.uint32(h.CompressedSize) + b.uint32(h.UncompressedSize) + b.uint16(uint16(len(h.Name))) + b.uint16(uint16(len(h.Extra))) + if _, err := w.Write(buf[:]); err != nil { + return err + } + if _, err := io.WriteString(w, h.Name); err != nil { + return err + } + _, err := w.Write(h.Extra) + return err } type fileWriter struct { @@ -184,13 +206,13 @@ func (w *fileWriter) Write(p []byte) (int, error) { return w.rawCount.Write(p) } -func (w *fileWriter) close() (err error) { +func (w *fileWriter) close() error { if w.closed { return errors.New("zip: file closed twice") } w.closed = true - if err = w.comp.Close(); err != nil { - return + if err := w.comp.Close(); err != nil { + return err } // update FileHeader @@ -200,12 +222,13 @@ func (w *fileWriter) close() (err error) { fh.UncompressedSize = uint32(w.rawCount.count) // write data descriptor - defer recoverError(&err) - write(w.zipw, fh.CRC32) - write(w.zipw, fh.CompressedSize) - write(w.zipw, fh.UncompressedSize) - - return nil + var buf [dataDescriptorLen]byte + b := writeBuf(buf[:]) + b.uint32(fh.CRC32) + b.uint32(fh.CompressedSize) + b.uint32(fh.UncompressedSize) + _, err := w.zipw.Write(buf[:]) + return err } type countWriter struct { @@ -227,18 +250,14 @@ func (w nopCloser) Close() error { return nil } -func write(w io.Writer, data interface{}) { - if err := binary.Write(w, binary.LittleEndian, data); err != nil { - panic(err) - } +type writeBuf []byte + +func (b *writeBuf) uint16(v uint16) { + binary.LittleEndian.PutUint16(*b, v) + *b = (*b)[2:] } -func writeBytes(w io.Writer, b []byte) { - n, err := w.Write(b) - if err != nil { - panic(err) - } - if n != len(b) { - panic(io.ErrShortWrite) - } +func (b *writeBuf) uint32(v uint32) { + binary.LittleEndian.PutUint32(*b, v) + *b = (*b)[4:] } diff --git a/libgo/go/archive/zip/writer_test.go b/libgo/go/archive/zip/writer_test.go index ce93fae19e5..88e5211ff7b 100644 --- a/libgo/go/archive/zip/writer_test.go +++ b/libgo/go/archive/zip/writer_test.go @@ -77,7 +77,7 @@ func TestWriter(t *testing.T) { } // read it back - r, err := NewReader(sliceReaderAt(buf.Bytes()), int64(buf.Len())) + r, err := NewReader(bytes.NewReader(buf.Bytes()), int64(buf.Len())) if err != nil { t.Fatal(err) } diff --git a/libgo/go/archive/zip/zip_test.go b/libgo/go/archive/zip/zip_test.go index 1a260cc569f..d6490c4cbbe 100644 --- a/libgo/go/archive/zip/zip_test.go +++ b/libgo/go/archive/zip/zip_test.go @@ -9,22 +9,12 @@ package zip import ( "bytes" "fmt" - "io" "reflect" + "strings" "testing" "time" ) -type stringReaderAt string - -func (s stringReaderAt) ReadAt(p []byte, off int64) (n int, err error) { - if off >= int64(len(s)) { - return 0, io.EOF - } - n = copy(p, s[off:]) - return -} - func TestOver65kFiles(t *testing.T) { if testing.Short() { t.Logf("slow test; skipping") @@ -42,8 +32,8 @@ func TestOver65kFiles(t *testing.T) { if err := w.Close(); err != nil { t.Fatalf("Writer.Close: %v", err) } - rat := stringReaderAt(buf.String()) - zr, err := NewReader(rat, int64(len(rat))) + s := buf.String() + zr, err := NewReader(strings.NewReader(s), int64(len(s))) if err != nil { t.Fatalf("NewReader: %v", err) } diff --git a/libgo/go/bufio/bufio.go b/libgo/go/bufio/bufio.go index 156dddfcf07..b44d0e7d167 100644 --- a/libgo/go/bufio/bufio.go +++ b/libgo/go/bufio/bufio.go @@ -23,7 +23,6 @@ var ( ErrInvalidUnreadRune = errors.New("bufio: invalid use of UnreadRune") ErrBufferFull = errors.New("bufio: buffer full") ErrNegativeCount = errors.New("bufio: negative count") - errInternal = errors.New("bufio: internal error") ) // Buffered input. @@ -106,9 +105,12 @@ func (b *Reader) Peek(n int) ([]byte, error) { if m > n { m = n } - err := b.readErr() - if m < n && err == nil { - err = ErrBufferFull + var err error + if m < n { + err = b.readErr() + if err == nil { + err = ErrBufferFull + } } return b.buf[b.r : b.r+m], err } diff --git a/libgo/go/bufio/bufio_test.go b/libgo/go/bufio/bufio_test.go index 9aec61ec426..a43cbd23a64 100644 --- a/libgo/go/bufio/bufio_test.go +++ b/libgo/go/bufio/bufio_test.go @@ -539,6 +539,27 @@ func TestPeek(t *testing.T) { if _, err := buf.Peek(1); err != io.EOF { t.Fatalf("want EOF got %v", err) } + + // Test for issue 3022, not exposing a reader's error on a successful Peek. + buf = NewReaderSize(dataAndEOFReader("abcd"), 32) + if s, err := buf.Peek(2); string(s) != "ab" || err != nil { + t.Errorf(`Peek(2) on "abcd", EOF = %q, %v; want "ab", nil`, string(s), err) + } + if s, err := buf.Peek(4); string(s) != "abcd" || err != nil { + t.Errorf(`Peek(4) on "abcd", EOF = %q, %v; want "abcd", nil`, string(s), err) + } + if n, err := buf.Read(p[0:5]); string(p[0:n]) != "abcd" || err != nil { + t.Fatalf("Read after peek = %q, %v; want abcd, EOF", p[0:n], err) + } + if n, err := buf.Read(p[0:1]); string(p[0:n]) != "" || err != io.EOF { + t.Fatalf(`second Read after peek = %q, %v; want "", EOF`, p[0:n], err) + } +} + +type dataAndEOFReader string + +func (r dataAndEOFReader) Read(p []byte) (int, error) { + return copy(p, r), io.EOF } func TestPeekThenUnreadRune(t *testing.T) { diff --git a/libgo/go/bytes/buffer.go b/libgo/go/bytes/buffer.go index a95c2afd005..afdf2205598 100644 --- a/libgo/go/bytes/buffer.go +++ b/libgo/go/bytes/buffer.go @@ -182,14 +182,21 @@ func makeSlice(n int) []byte { func (b *Buffer) WriteTo(w io.Writer) (n int64, err error) { b.lastRead = opInvalid if b.off < len(b.buf) { + nBytes := b.Len() m, e := w.Write(b.buf[b.off:]) + if m > nBytes { + panic("bytes.Buffer.WriteTo: invalid Write count") + } b.off += m n = int64(m) if e != nil { return n, e } - // otherwise all bytes were written, by definition of + // all bytes should have been written, by definition of // Write method in io.Writer + if m != nBytes { + return n, io.ErrShortWrite + } } // Buffer is now empty; reset. b.Truncate(0) diff --git a/libgo/go/bytes/bytes.go b/libgo/go/bytes/bytes.go index e94a0ec5c4f..7d1426fb417 100644 --- a/libgo/go/bytes/bytes.go +++ b/libgo/go/bytes/bytes.go @@ -13,6 +13,7 @@ import ( // Compare returns an integer comparing the two byte arrays lexicographically. // The result will be 0 if a==b, -1 if a < b, and +1 if a > b +// A nil argument is equivalent to an empty slice. func Compare(a, b []byte) int { m := len(a) if m > len(b) { @@ -37,6 +38,7 @@ func Compare(a, b []byte) int { } // Equal returns a boolean reporting whether a == b. +// A nil argument is equivalent to an empty slice. func Equal(a, b []byte) bool func equalPortable(a, b []byte) bool { diff --git a/libgo/go/bytes/bytes_test.go b/libgo/go/bytes/bytes_test.go index 2a1d41b910e..000f235176d 100644 --- a/libgo/go/bytes/bytes_test.go +++ b/libgo/go/bytes/bytes_test.go @@ -46,32 +46,39 @@ type BinOpTest struct { i int } -var comparetests = []BinOpTest{ - {"", "", 0}, - {"a", "", 1}, - {"", "a", -1}, - {"abc", "abc", 0}, - {"ab", "abc", -1}, - {"abc", "ab", 1}, - {"x", "ab", 1}, - {"ab", "x", -1}, - {"x", "a", 1}, - {"b", "x", -1}, +var compareTests = []struct { + a, b []byte + i int +}{ + {[]byte(""), []byte(""), 0}, + {[]byte("a"), []byte(""), 1}, + {[]byte(""), []byte("a"), -1}, + {[]byte("abc"), []byte("abc"), 0}, + {[]byte("ab"), []byte("abc"), -1}, + {[]byte("abc"), []byte("ab"), 1}, + {[]byte("x"), []byte("ab"), 1}, + {[]byte("ab"), []byte("x"), -1}, + {[]byte("x"), []byte("a"), 1}, + {[]byte("b"), []byte("x"), -1}, + // nil tests + {nil, nil, 0}, + {[]byte(""), nil, 0}, + {nil, []byte(""), 0}, + {[]byte("a"), nil, 1}, + {nil, []byte("a"), -1}, } func TestCompare(t *testing.T) { - for _, tt := range comparetests { - a := []byte(tt.a) - b := []byte(tt.b) - cmp := Compare(a, b) + for _, tt := range compareTests { + cmp := Compare(tt.a, tt.b) if cmp != tt.i { t.Errorf(`Compare(%q, %q) = %v`, tt.a, tt.b, cmp) } - eql := Equal(a, b) + eql := Equal(tt.a, tt.b) if eql != (tt.i == 0) { t.Errorf(`Equal(%q, %q) = %v`, tt.a, tt.b, eql) } - eql = EqualPortable(a, b) + eql = EqualPortable(tt.a, tt.b) if eql != (tt.i == 0) { t.Errorf(`EqualPortable(%q, %q) = %v`, tt.a, tt.b, eql) } diff --git a/libgo/go/bytes/example_test.go b/libgo/go/bytes/example_test.go index 0234a012a4e..6fe8cd5a90c 100644 --- a/libgo/go/bytes/example_test.go +++ b/libgo/go/bytes/example_test.go @@ -11,18 +11,18 @@ import ( "os" ) -// Hello world! func ExampleBuffer() { var b Buffer // A Buffer needs no initialization. b.Write([]byte("Hello ")) b.Write([]byte("world!")) b.WriteTo(os.Stdout) + // Output: Hello world! } -// Gophers rule! func ExampleBuffer_reader() { // A Buffer can turn a string or a []byte into an io.Reader. buf := NewBufferString("R29waGVycyBydWxlIQ==") dec := base64.NewDecoder(base64.StdEncoding, buf) io.Copy(os.Stdout, dec) + // Output: Gophers rule! } diff --git a/libgo/go/bytes/reader.go b/libgo/go/bytes/reader.go new file mode 100644 index 00000000000..a062e54ba4d --- /dev/null +++ b/libgo/go/bytes/reader.go @@ -0,0 +1,125 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bytes + +import ( + "errors" + "io" + "unicode/utf8" +) + +// A Reader implements the io.Reader, io.ReaderAt, io.Seeker, +// io.ByteScanner, and io.RuneScanner interfaces by reading from +// a byte slice. +// Unlike a Buffer, a Reader is read-only and supports seeking. +type Reader struct { + s []byte + i int // current reading index + prevRune int // index of previous rune; or < 0 +} + +// Len returns the number of bytes of the unread portion of the +// slice. +func (r *Reader) Len() int { + if r.i >= len(r.s) { + return 0 + } + return len(r.s) - r.i +} + +func (r *Reader) Read(b []byte) (n int, err error) { + if len(b) == 0 { + return 0, nil + } + if r.i >= len(r.s) { + return 0, io.EOF + } + n = copy(b, r.s[r.i:]) + r.i += n + r.prevRune = -1 + return +} + +func (r *Reader) ReadAt(b []byte, off int64) (n int, err error) { + if off < 0 { + return 0, errors.New("bytes: invalid offset") + } + if off >= int64(len(r.s)) { + return 0, io.EOF + } + n = copy(b, r.s[int(off):]) + if n < len(b) { + err = io.EOF + } + return +} + +func (r *Reader) ReadByte() (b byte, err error) { + if r.i >= len(r.s) { + return 0, io.EOF + } + b = r.s[r.i] + r.i++ + r.prevRune = -1 + return +} + +func (r *Reader) UnreadByte() error { + if r.i <= 0 { + return errors.New("bytes.Reader: at beginning of slice") + } + r.i-- + r.prevRune = -1 + return nil +} + +func (r *Reader) ReadRune() (ch rune, size int, err error) { + if r.i >= len(r.s) { + return 0, 0, io.EOF + } + r.prevRune = r.i + if c := r.s[r.i]; c < utf8.RuneSelf { + r.i++ + return rune(c), 1, nil + } + ch, size = utf8.DecodeRune(r.s[r.i:]) + r.i += size + return +} + +func (r *Reader) UnreadRune() error { + if r.prevRune < 0 { + return errors.New("bytes.Reader: previous operation was not ReadRune") + } + r.i = r.prevRune + r.prevRune = -1 + return nil +} + +// Seek implements the io.Seeker interface. +func (r *Reader) Seek(offset int64, whence int) (int64, error) { + var abs int64 + switch whence { + case 0: + abs = offset + case 1: + abs = int64(r.i) + offset + case 2: + abs = int64(len(r.s)) + offset + default: + return 0, errors.New("bytes: invalid whence") + } + if abs < 0 { + return 0, errors.New("bytes: negative position") + } + if abs >= 1<<31 { + return 0, errors.New("bytes: position out of range") + } + r.i = int(abs) + return abs, nil +} + +// NewReader returns a new Reader reading from b. +func NewReader(b []byte) *Reader { return &Reader{b, 0, -1} } diff --git a/libgo/go/bytes/reader_test.go b/libgo/go/bytes/reader_test.go new file mode 100644 index 00000000000..2e4b1f26e81 --- /dev/null +++ b/libgo/go/bytes/reader_test.go @@ -0,0 +1,88 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bytes_test + +import ( + . "bytes" + "fmt" + "io" + "os" + "testing" +) + +func TestReader(t *testing.T) { + r := NewReader([]byte("0123456789")) + tests := []struct { + off int64 + seek int + n int + want string + wantpos int64 + seekerr string + }{ + {seek: os.SEEK_SET, off: 0, n: 20, want: "0123456789"}, + {seek: os.SEEK_SET, off: 1, n: 1, want: "1"}, + {seek: os.SEEK_CUR, off: 1, wantpos: 3, n: 2, want: "34"}, + {seek: os.SEEK_SET, off: -1, seekerr: "bytes: negative position"}, + {seek: os.SEEK_SET, off: 1<<31 - 1}, + {seek: os.SEEK_CUR, off: 1, seekerr: "bytes: position out of range"}, + {seek: os.SEEK_SET, n: 5, want: "01234"}, + {seek: os.SEEK_CUR, n: 5, want: "56789"}, + {seek: os.SEEK_END, off: -1, n: 1, wantpos: 9, want: "9"}, + } + + for i, tt := range tests { + pos, err := r.Seek(tt.off, tt.seek) + if err == nil && tt.seekerr != "" { + t.Errorf("%d. want seek error %q", i, tt.seekerr) + continue + } + if err != nil && err.Error() != tt.seekerr { + t.Errorf("%d. seek error = %q; want %q", i, err.Error(), tt.seekerr) + continue + } + if tt.wantpos != 0 && tt.wantpos != pos { + t.Errorf("%d. pos = %d, want %d", i, pos, tt.wantpos) + } + buf := make([]byte, tt.n) + n, err := r.Read(buf) + if err != nil { + t.Errorf("%d. read = %v", i, err) + continue + } + got := string(buf[:n]) + if got != tt.want { + t.Errorf("%d. got %q; want %q", i, got, tt.want) + } + } +} + +func TestReaderAt(t *testing.T) { + r := NewReader([]byte("0123456789")) + tests := []struct { + off int64 + n int + want string + wanterr interface{} + }{ + {0, 10, "0123456789", nil}, + {1, 10, "123456789", io.EOF}, + {1, 9, "123456789", nil}, + {11, 10, "", io.EOF}, + {0, 0, "", nil}, + {-1, 0, "", "bytes: invalid offset"}, + } + for i, tt := range tests { + b := make([]byte, tt.n) + rn, err := r.ReadAt(b, tt.off) + got := string(b[:rn]) + if got != tt.want { + t.Errorf("%d. got %q; want %q", i, got, tt.want) + } + if fmt.Sprintf("%v", err) != fmt.Sprintf("%v", tt.wanterr) { + t.Errorf("%d. got error = %v; want %v", i, err, tt.wanterr) + } + } +} diff --git a/libgo/go/compress/flate/deflate.go b/libgo/go/compress/flate/deflate.go index 8505da706c9..20408409c8e 100644 --- a/libgo/go/compress/flate/deflate.go +++ b/libgo/go/compress/flate/deflate.go @@ -5,6 +5,7 @@ package flate import ( + "fmt" "io" "math" ) @@ -390,7 +391,7 @@ func (d *compressor) init(w io.Writer, level int) (err error) { d.fill = (*compressor).fillDeflate d.step = (*compressor).deflate default: - return WrongValueError{"level", 0, 9, int32(level)} + return fmt.Errorf("flate: invalid compression level %d: want value in range [-1, 9]", level) } return nil } @@ -408,17 +409,22 @@ func (d *compressor) close() error { return d.w.err } -// NewWriter returns a new Writer compressing -// data at the given level. Following zlib, levels -// range from 1 (BestSpeed) to 9 (BestCompression); -// higher levels typically run slower but compress more. -// Level 0 (NoCompression) does not attempt any -// compression; it only adds the necessary DEFLATE framing. -func NewWriter(w io.Writer, level int) *Writer { +// NewWriter returns a new Writer compressing data at the given level. +// Following zlib, levels range from 1 (BestSpeed) to 9 (BestCompression); +// higher levels typically run slower but compress more. Level 0 +// (NoCompression) does not attempt any compression; it only adds the +// necessary DEFLATE framing. Level -1 (DefaultCompression) uses the default +// compression level. +// +// If level is in the range [-1, 9] then the error returned will be nil. +// Otherwise the error returned will be non-nil. +func NewWriter(w io.Writer, level int) (*Writer, error) { const logWindowSize = logMaxOffsetSize var dw Writer - dw.d.init(w, level) - return &dw + if err := dw.d.init(w, level); err != nil { + return nil, err + } + return &dw, nil } // NewWriterDict is like NewWriter but initializes the new @@ -427,13 +433,16 @@ func NewWriter(w io.Writer, level int) *Writer { // any compressed output. The compressed data written to w // can only be decompressed by a Reader initialized with the // same dictionary. -func NewWriterDict(w io.Writer, level int, dict []byte) *Writer { +func NewWriterDict(w io.Writer, level int, dict []byte) (*Writer, error) { dw := &dictWriter{w, false} - zw := NewWriter(dw, level) + zw, err := NewWriter(dw, level) + if err != nil { + return nil, err + } zw.Write(dict) zw.Flush() dw.enabled = true - return zw + return zw, err } type dictWriter struct { diff --git a/libgo/go/compress/flate/deflate_test.go b/libgo/go/compress/flate/deflate_test.go index 75d801df405..543c5950586 100644 --- a/libgo/go/compress/flate/deflate_test.go +++ b/libgo/go/compress/flate/deflate_test.go @@ -81,7 +81,11 @@ func largeDataChunk() []byte { func TestDeflate(t *testing.T) { for _, h := range deflateTests { var buf bytes.Buffer - w := NewWriter(&buf, h.level) + w, err := NewWriter(&buf, h.level) + if err != nil { + t.Errorf("NewWriter: %v", err) + continue + } w.Write(h.in) w.Close() if !bytes.Equal(buf.Bytes(), h.out) { @@ -151,7 +155,11 @@ func testSync(t *testing.T, level int, input []byte, name string) { buf := newSyncBuffer() buf1 := new(bytes.Buffer) buf.WriteMode() - w := NewWriter(io.MultiWriter(buf, buf1), level) + w, err := NewWriter(io.MultiWriter(buf, buf1), level) + if err != nil { + t.Errorf("NewWriter: %v", err) + return + } r := NewReader(buf) // Write half the input and read back. @@ -213,7 +221,7 @@ func testSync(t *testing.T, level int, input []byte, name string) { // stream should work for ordinary reader too r = NewReader(buf1) - out, err := ioutil.ReadAll(r) + out, err = ioutil.ReadAll(r) if err != nil { t.Errorf("testSync: read: %s", err) return @@ -224,31 +232,31 @@ func testSync(t *testing.T, level int, input []byte, name string) { } } -func testToFromWithLevel(t *testing.T, level int, input []byte, name string) error { - return testToFromWithLevelAndLimit(t, level, input, name, -1) -} - -func testToFromWithLevelAndLimit(t *testing.T, level int, input []byte, name string, limit int) error { +func testToFromWithLevelAndLimit(t *testing.T, level int, input []byte, name string, limit int) { var buffer bytes.Buffer - w := NewWriter(&buffer, level) + w, err := NewWriter(&buffer, level) + if err != nil { + t.Errorf("NewWriter: %v", err) + return + } w.Write(input) w.Close() if limit > 0 && buffer.Len() > limit { t.Errorf("level: %d, len(compress(data)) = %d > limit = %d", level, buffer.Len(), limit) + return } r := NewReader(&buffer) out, err := ioutil.ReadAll(r) if err != nil { t.Errorf("read: %s", err) - return err + return } r.Close() if !bytes.Equal(input, out) { t.Errorf("decompress(compress(data)) != data: level=%d input=%s", level, name) + return } - testSync(t, level, input, name) - return nil } func testToFromWithLimit(t *testing.T, input []byte, name string, limit [10]int) { @@ -257,13 +265,9 @@ func testToFromWithLimit(t *testing.T, input []byte, name string, limit [10]int) } } -func testToFrom(t *testing.T, input []byte, name string) { - testToFromWithLimit(t, input, name, [10]int{}) -} - func TestDeflateInflate(t *testing.T) { for i, h := range deflateInflateTests { - testToFrom(t, h.in, fmt.Sprintf("#%d", i)) + testToFromWithLimit(t, h.in, fmt.Sprintf("#%d", i), [10]int{}) } } @@ -302,6 +306,9 @@ func TestDeflateInflateString(t *testing.T) { t.Error(err) } testToFromWithLimit(t, gold, test.label, test.limit) + if testing.Short() { + break + } } } @@ -311,7 +318,10 @@ func TestReaderDict(t *testing.T) { text = "hello again world" ) var b bytes.Buffer - w := NewWriter(&b, 5) + w, err := NewWriter(&b, 5) + if err != nil { + t.Fatalf("NewWriter: %v", err) + } w.Write([]byte(dict)) w.Flush() b.Reset() @@ -334,7 +344,10 @@ func TestWriterDict(t *testing.T) { text = "hello again world" ) var b bytes.Buffer - w := NewWriter(&b, 5) + w, err := NewWriter(&b, 5) + if err != nil { + t.Fatalf("NewWriter: %v", err) + } w.Write([]byte(dict)) w.Flush() b.Reset() @@ -342,7 +355,7 @@ func TestWriterDict(t *testing.T) { w.Close() var b1 bytes.Buffer - w = NewWriterDict(&b1, 5, []byte(dict)) + w, _ = NewWriterDict(&b1, 5, []byte(dict)) w.Write([]byte(text)) w.Close() @@ -353,7 +366,14 @@ func TestWriterDict(t *testing.T) { // See http://code.google.com/p/go/issues/detail?id=2508 func TestRegression2508(t *testing.T) { - w := NewWriter(ioutil.Discard, 1) + if testing.Short() { + t.Logf("test disabled with -short") + return + } + w, err := NewWriter(ioutil.Discard, 1) + if err != nil { + t.Fatalf("NewWriter: %v", err) + } buf := make([]byte, 1024) for i := 0; i < 131072; i++ { if _, err := w.Write(buf); err != nil { diff --git a/libgo/go/compress/flate/huffman_bit_writer.go b/libgo/go/compress/flate/huffman_bit_writer.go index 57b56b5c96d..25e1da336aa 100644 --- a/libgo/go/compress/flate/huffman_bit_writer.go +++ b/libgo/go/compress/flate/huffman_bit_writer.go @@ -7,7 +7,6 @@ package flate import ( "io" "math" - "strconv" ) const ( @@ -85,13 +84,6 @@ type huffmanBitWriter struct { err error } -type WrongValueError struct { - name string - from int32 - to int32 - value int32 -} - func newHuffmanBitWriter(w io.Writer) *huffmanBitWriter { return &huffmanBitWriter{ w: w, @@ -105,11 +97,6 @@ func newHuffmanBitWriter(w io.Writer) *huffmanBitWriter { } } -func (err WrongValueError) Error() string { - return "huffmanBitWriter: " + err.name + " should belong to [" + strconv.FormatInt(int64(err.from), 10) + ";" + - strconv.FormatInt(int64(err.to), 10) + "] but actual value is " + strconv.FormatInt(int64(err.value), 10) -} - func (w *huffmanBitWriter) flushBits() { if w.err != nil { w.nbits = 0 diff --git a/libgo/go/compress/gzip/gunzip.go b/libgo/go/compress/gzip/gunzip.go index d3743105d18..33736f63508 100644 --- a/libgo/go/compress/gzip/gunzip.go +++ b/libgo/go/compress/gzip/gunzip.go @@ -16,9 +16,6 @@ import ( "time" ) -// BUG(nigeltao): Comments and Names don't properly map UTF-8 character codes outside of -// the 0x00-0x7f range to ISO 8859-1 (Latin-1). - const ( gzipID1 = 0x1f gzipID2 = 0x8b @@ -37,11 +34,15 @@ func makeReader(r io.Reader) flate.Reader { return bufio.NewReader(r) } -var ErrHeader = errors.New("invalid gzip header") -var ErrChecksum = errors.New("gzip checksum error") +var ( + // ErrChecksum is returned when reading GZIP data that has an invalid checksum. + ErrChecksum = errors.New("gzip: invalid checksum") + // ErrHeader is returned when reading GZIP data that has an invalid header. + ErrHeader = errors.New("gzip: invalid header") +) // The gzip file stores a header giving metadata about the compressed file. -// That header is exposed as the fields of the Compressor and Decompressor structs. +// That header is exposed as the fields of the Writer and Reader structs. type Header struct { Comment string // comment Extra []byte // "extra data" @@ -50,21 +51,21 @@ type Header struct { OS byte // operating system type } -// An Decompressor is an io.Reader that can be read to retrieve +// A Reader is an io.Reader that can be read to retrieve // uncompressed data from a gzip-format compressed file. // // In general, a gzip file can be a concatenation of gzip files, -// each with its own header. Reads from the Decompressor +// each with its own header. Reads from the Reader // return the concatenation of the uncompressed data of each. -// Only the first header is recorded in the Decompressor fields. +// Only the first header is recorded in the Reader fields. // // Gzip files store a length and checksum of the uncompressed data. -// The Decompressor will return a ErrChecksum when Read +// The Reader will return a ErrChecksum when Read // reaches the end of the uncompressed data if it does not // have the expected length or checksum. Clients should treat data -// returned by Read as tentative until they receive the successful -// (zero length, nil error) Read marking the end of the data. -type Decompressor struct { +// returned by Read as tentative until they receive the io.EOF +// marking the end of the data. +type Reader struct { Header r flate.Reader decompressor io.ReadCloser @@ -75,15 +76,14 @@ type Decompressor struct { err error } -// NewReader creates a new Decompressor reading the given reader. +// NewReader creates a new Reader reading the given reader. // The implementation buffers input and may read more data than necessary from r. -// It is the caller's responsibility to call Close on the Decompressor when done. -func NewReader(r io.Reader) (*Decompressor, error) { - z := new(Decompressor) +// It is the caller's responsibility to call Close on the Reader when done. +func NewReader(r io.Reader) (*Reader, error) { + z := new(Reader) z.r = makeReader(r) z.digest = crc32.NewIEEE() if err := z.readHeader(true); err != nil { - z.err = err return nil, err } return z, nil @@ -94,7 +94,7 @@ func get4(p []byte) uint32 { return uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 | uint32(p[3])<<24 } -func (z *Decompressor) readString() (string, error) { +func (z *Reader) readString() (string, error) { var err error needconv := false for i := 0; ; i++ { @@ -123,7 +123,7 @@ func (z *Decompressor) readString() (string, error) { panic("not reached") } -func (z *Decompressor) read2() (uint32, error) { +func (z *Reader) read2() (uint32, error) { _, err := io.ReadFull(z.r, z.buf[0:2]) if err != nil { return 0, err @@ -131,7 +131,7 @@ func (z *Decompressor) read2() (uint32, error) { return uint32(z.buf[0]) | uint32(z.buf[1])<<8, nil } -func (z *Decompressor) readHeader(save bool) error { +func (z *Reader) readHeader(save bool) error { _, err := io.ReadFull(z.r, z.buf[0:10]) if err != nil { return err @@ -197,7 +197,7 @@ func (z *Decompressor) readHeader(save bool) error { return nil } -func (z *Decompressor) Read(p []byte) (n int, err error) { +func (z *Reader) Read(p []byte) (n int, err error) { if z.err != nil { return 0, z.err } @@ -237,5 +237,5 @@ func (z *Decompressor) Read(p []byte) (n int, err error) { return z.Read(p) } -// Calling Close does not close the wrapped io.Reader originally passed to NewReader. -func (z *Decompressor) Close() error { return z.decompressor.Close() } +// Close closes the Reader. It does not close the underlying io.Reader. +func (z *Reader) Close() error { return z.decompressor.Close() } diff --git a/libgo/go/compress/gzip/gzip.go b/libgo/go/compress/gzip/gzip.go index f2639a688c1..3035dfffccf 100644 --- a/libgo/go/compress/gzip/gzip.go +++ b/libgo/go/compress/gzip/gzip.go @@ -7,6 +7,7 @@ package gzip import ( "compress/flate" "errors" + "fmt" "hash" "hash/crc32" "io" @@ -21,9 +22,9 @@ const ( DefaultCompression = flate.DefaultCompression ) -// A Compressor is an io.WriteCloser that satisfies writes by compressing data written +// A Writer is an io.WriteCloser that satisfies writes by compressing data written // to its wrapped io.Writer. -type Compressor struct { +type Writer struct { Header w io.Writer level int @@ -35,25 +36,40 @@ type Compressor struct { err error } -// NewWriter calls NewWriterLevel with the default compression level. -func NewWriter(w io.Writer) (*Compressor, error) { - return NewWriterLevel(w, DefaultCompression) +// NewWriter creates a new Writer that satisfies writes by compressing data +// written to w. +// +// It is the caller's responsibility to call Close on the WriteCloser when done. +// Writes may be buffered and not flushed until Close. +// +// Callers that wish to set the fields in Writer.Header must do so before +// the first call to Write or Close. The Comment and Name header fields are +// UTF-8 strings in Go, but the underlying format requires NUL-terminated ISO +// 8859-1 (Latin-1). NUL or non-Latin-1 runes in those strings will lead to an +// error on Write. +func NewWriter(w io.Writer) *Writer { + z, _ := NewWriterLevel(w, DefaultCompression) + return z } -// NewWriterLevel creates a new Compressor writing to the given writer. -// Writes may be buffered and not flushed until Close. -// Callers that wish to set the fields in Compressor.Header must -// do so before the first call to Write or Close. -// It is the caller's responsibility to call Close on the WriteCloser when done. -// level is the compression level, which can be DefaultCompression, NoCompression, -// or any integer value between BestSpeed and BestCompression (inclusive). -func NewWriterLevel(w io.Writer, level int) (*Compressor, error) { - z := new(Compressor) - z.OS = 255 // unknown - z.w = w - z.level = level - z.digest = crc32.NewIEEE() - return z, nil +// NewWriterLevel is like NewWriter but specifies the compression level instead +// of assuming DefaultCompression. +// +// The compression level can be DefaultCompression, NoCompression, or any +// integer value between BestSpeed and BestCompression inclusive. The error +// returned will be nil if the level is valid. +func NewWriterLevel(w io.Writer, level int) (*Writer, error) { + if level < DefaultCompression || level > BestCompression { + return nil, fmt.Errorf("gzip: invalid compression level: %d", level) + } + return &Writer{ + Header: Header{ + OS: 255, // unknown + }, + w: w, + level: level, + digest: crc32.NewIEEE(), + }, nil } // GZIP (RFC 1952) is little-endian, unlike ZLIB (RFC 1950). @@ -70,7 +86,7 @@ func put4(p []byte, v uint32) { } // writeBytes writes a length-prefixed byte slice to z.w. -func (z *Compressor) writeBytes(b []byte) error { +func (z *Writer) writeBytes(b []byte) error { if len(b) > 0xffff { return errors.New("gzip.Write: Extra data is too large") } @@ -83,10 +99,10 @@ func (z *Compressor) writeBytes(b []byte) error { return err } -// writeString writes a string (in ISO 8859-1 (Latin-1) format) to z.w. -func (z *Compressor) writeString(s string) error { - // GZIP (RFC 1952) specifies that strings are NUL-terminated ISO 8859-1 (Latin-1). - var err error +// writeString writes a UTF-8 string s in GZIP's format to z.w. +// GZIP (RFC 1952) specifies that strings are NUL-terminated ISO 8859-1 (Latin-1). +func (z *Writer) writeString(s string) (err error) { + // GZIP stores Latin-1 strings; error if non-Latin-1; convert if non-ASCII. needconv := false for _, v := range s { if v == 0 || v > 0xff { @@ -114,7 +130,9 @@ func (z *Compressor) writeString(s string) error { return err } -func (z *Compressor) Write(p []byte) (int, error) { +// Write writes a compressed form of p to the underlying io.Writer. The +// compressed bytes are not necessarily flushed until the Writer is closed. +func (z *Writer) Write(p []byte) (int, error) { if z.err != nil { return 0, z.err } @@ -165,7 +183,7 @@ func (z *Compressor) Write(p []byte) (int, error) { return n, z.err } } - z.compressor = flate.NewWriter(z.w, z.level) + z.compressor, _ = flate.NewWriter(z.w, z.level) } z.size += uint32(len(p)) z.digest.Write(p) @@ -173,8 +191,8 @@ func (z *Compressor) Write(p []byte) (int, error) { return n, z.err } -// Calling Close does not close the wrapped io.Writer originally passed to NewWriter. -func (z *Compressor) Close() error { +// Close closes the Writer. It does not close the underlying io.Writer. +func (z *Writer) Close() error { if z.err != nil { return z.err } diff --git a/libgo/go/compress/gzip/gzip_test.go b/libgo/go/compress/gzip/gzip_test.go index eb7a7ec0892..6f7b5936449 100644 --- a/libgo/go/compress/gzip/gzip_test.go +++ b/libgo/go/compress/gzip/gzip_test.go @@ -7,108 +7,153 @@ package gzip import ( "bufio" "bytes" - "io" "io/ioutil" "testing" "time" ) -// pipe creates two ends of a pipe that gzip and gunzip, and runs dfunc at the -// writer end and cfunc at the reader end. -func pipe(t *testing.T, dfunc func(*Compressor), cfunc func(*Decompressor)) { - piper, pipew := io.Pipe() - defer piper.Close() - go func() { - defer pipew.Close() - compressor, err := NewWriter(pipew) - if err != nil { - t.Fatalf("%v", err) - } - defer compressor.Close() - dfunc(compressor) - }() - decompressor, err := NewReader(piper) +// TestEmpty tests that an empty payload still forms a valid GZIP stream. +func TestEmpty(t *testing.T) { + buf := new(bytes.Buffer) + + if err := NewWriter(buf).Close(); err != nil { + t.Fatalf("Writer.Close: %v", err) + } + + r, err := NewReader(buf) + if err != nil { + t.Fatalf("NewReader: %v", err) + } + b, err := ioutil.ReadAll(r) if err != nil { - t.Fatalf("%v", err) + t.Fatalf("ReadAll: %v", err) + } + if len(b) != 0 { + t.Fatalf("got %d bytes, want 0", len(b)) + } + if err := r.Close(); err != nil { + t.Fatalf("Reader.Close: %v", err) } - defer decompressor.Close() - cfunc(decompressor) } -// Tests that an empty payload still forms a valid GZIP stream. -func TestEmpty(t *testing.T) { - pipe(t, - func(compressor *Compressor) {}, - func(decompressor *Decompressor) { - b, err := ioutil.ReadAll(decompressor) - if err != nil { - t.Fatalf("%v", err) - } - if len(b) != 0 { - t.Fatalf("did not read an empty slice") - } - }) -} +// TestRoundTrip tests that gzipping and then gunzipping is the identity +// function. +func TestRoundTrip(t *testing.T) { + buf := new(bytes.Buffer) + + w := NewWriter(buf) + w.Comment = "comment" + w.Extra = []byte("extra") + w.ModTime = time.Unix(1e8, 0) + w.Name = "name" + if _, err := w.Write([]byte("payload")); err != nil { + t.Fatalf("Write: %v", err) + } + if err := w.Close(); err != nil { + t.Fatalf("Writer.Close: %v", err) + } -// Tests that gzipping and then gunzipping is the identity function. -func TestWriter(t *testing.T) { - pipe(t, - func(compressor *Compressor) { - compressor.Comment = "Äußerung" - //compressor.Comment = "comment" - compressor.Extra = []byte("extra") - compressor.ModTime = time.Unix(1e8, 0) - compressor.Name = "name" - _, err := compressor.Write([]byte("payload")) - if err != nil { - t.Fatalf("%v", err) - } - }, - func(decompressor *Decompressor) { - b, err := ioutil.ReadAll(decompressor) - if err != nil { - t.Fatalf("%v", err) - } - if string(b) != "payload" { - t.Fatalf("payload is %q, want %q", string(b), "payload") - } - if decompressor.Comment != "Äußerung" { - t.Fatalf("comment is %q, want %q", decompressor.Comment, "Äußerung") - } - if string(decompressor.Extra) != "extra" { - t.Fatalf("extra is %q, want %q", decompressor.Extra, "extra") - } - if decompressor.ModTime.Unix() != 1e8 { - t.Fatalf("mtime is %d, want %d", decompressor.ModTime.Unix(), uint32(1e8)) - } - if decompressor.Name != "name" { - t.Fatalf("name is %q, want %q", decompressor.Name, "name") - } - }) + r, err := NewReader(buf) + if err != nil { + t.Fatalf("NewReader: %v", err) + } + b, err := ioutil.ReadAll(r) + if err != nil { + t.Fatalf("ReadAll: %v", err) + } + if string(b) != "payload" { + t.Fatalf("payload is %q, want %q", string(b), "payload") + } + if r.Comment != "comment" { + t.Fatalf("comment is %q, want %q", r.Comment, "comment") + } + if string(r.Extra) != "extra" { + t.Fatalf("extra is %q, want %q", r.Extra, "extra") + } + if r.ModTime.Unix() != 1e8 { + t.Fatalf("mtime is %d, want %d", r.ModTime.Unix(), uint32(1e8)) + } + if r.Name != "name" { + t.Fatalf("name is %q, want %q", r.Name, "name") + } + if err := r.Close(); err != nil { + t.Fatalf("Reader.Close: %v", err) + } } +// TestLatin1 tests the internal functions for converting to and from Latin-1. func TestLatin1(t *testing.T) { latin1 := []byte{0xc4, 'u', 0xdf, 'e', 'r', 'u', 'n', 'g', 0} utf8 := "Äußerung" - z := Decompressor{r: bufio.NewReader(bytes.NewBuffer(latin1))} + z := Reader{r: bufio.NewReader(bytes.NewBuffer(latin1))} s, err := z.readString() if err != nil { - t.Fatalf("%v", err) + t.Fatalf("readString: %v", err) } if s != utf8 { - t.Fatalf("string is %q, want %q", s, utf8) + t.Fatalf("read latin-1: got %q, want %q", s, utf8) } buf := bytes.NewBuffer(make([]byte, 0, len(latin1))) - c := Compressor{w: buf} + c := Writer{w: buf} if err = c.writeString(utf8); err != nil { - t.Fatalf("%v", err) + t.Fatalf("writeString: %v", err) } s = buf.String() if s != string(latin1) { - t.Fatalf("string is %v, want %v", s, latin1) + t.Fatalf("write utf-8: got %q, want %q", s, string(latin1)) + } +} + +// TestLatin1RoundTrip tests that metadata that is representable in Latin-1 +// survives a round trip. +func TestLatin1RoundTrip(t *testing.T) { + testCases := []struct { + name string + ok bool + }{ + {"", true}, + {"ASCII is OK", true}, + {"unless it contains a NUL\x00", false}, + {"no matter where \x00 occurs", false}, + {"\x00\x00\x00", false}, + {"Látin-1 also passes (U+00E1)", true}, + {"but LĀtin Extended-A (U+0100) does not", false}, + {"neither does 日本語", false}, + {"invalid UTF-8 also \xffails", false}, + {"\x00 as does Látin-1 with NUL", false}, + } + for _, tc := range testCases { + buf := new(bytes.Buffer) + + w := NewWriter(buf) + w.Name = tc.name + err := w.Close() + if (err == nil) != tc.ok { + t.Errorf("Writer.Close: name = %q, err = %v", tc.name, err) + continue + } + if !tc.ok { + continue + } + + r, err := NewReader(buf) + if err != nil { + t.Errorf("NewReader: %v", err) + continue + } + _, err = ioutil.ReadAll(r) + if err != nil { + t.Errorf("ReadAll: %v", err) + continue + } + if r.Name != tc.name { + t.Errorf("name is %q, want %q", r.Name, tc.name) + continue + } + if err := r.Close(); err != nil { + t.Errorf("Reader.Close: %v", err) + continue + } } - //if s, err = buf.ReadString(0); err != nil { - //t.Fatalf("%v", err) - //} } diff --git a/libgo/go/compress/zlib/reader.go b/libgo/go/compress/zlib/reader.go index 4638a654842..f38ef5a885e 100644 --- a/libgo/go/compress/zlib/reader.go +++ b/libgo/go/compress/zlib/reader.go @@ -34,9 +34,14 @@ import ( const zlibDeflate = 8 -var ErrChecksum = errors.New("zlib checksum error") -var ErrHeader = errors.New("invalid zlib header") -var ErrDictionary = errors.New("invalid zlib dictionary") +var ( + // ErrChecksum is returned when reading ZLIB data that has an invalid checksum. + ErrChecksum = errors.New("zlib: invalid checksum") + // ErrDictionary is returned when reading ZLIB data that has an invalid dictionary. + ErrDictionary = errors.New("zlib: invalid dictionary") + // ErrHeader is returned when reading ZLIB data that has an invalid header. + ErrHeader = errors.New("zlib: invalid header") +) type reader struct { r flate.Reader diff --git a/libgo/go/compress/zlib/writer.go b/libgo/go/compress/zlib/writer.go index bbff6375ea1..cd8dea460a4 100644 --- a/libgo/go/compress/zlib/writer.go +++ b/libgo/go/compress/zlib/writer.go @@ -6,7 +6,7 @@ package zlib import ( "compress/flate" - "errors" + "fmt" "hash" "hash/adler32" "io" @@ -24,30 +24,55 @@ const ( // A Writer takes data written to it and writes the compressed // form of that data to an underlying writer (see NewWriter). type Writer struct { - w io.Writer - compressor *flate.Writer - digest hash.Hash32 - err error - scratch [4]byte + w io.Writer + level int + dict []byte + compressor *flate.Writer + digest hash.Hash32 + err error + scratch [4]byte + wroteHeader bool } -// NewWriter calls NewWriterLevel with the default compression level. -func NewWriter(w io.Writer) (*Writer, error) { - return NewWriterLevel(w, DefaultCompression) +// NewWriter creates a new Writer that satisfies writes by compressing data +// written to w. +// +// It is the caller's responsibility to call Close on the WriteCloser when done. +// Writes may be buffered and not flushed until Close. +func NewWriter(w io.Writer) *Writer { + z, _ := NewWriterLevelDict(w, DefaultCompression, nil) + return z } -// NewWriterLevel calls NewWriterDict with no dictionary. +// NewWriterLevel is like NewWriter but specifies the compression level instead +// of assuming DefaultCompression. +// +// The compression level can be DefaultCompression, NoCompression, or any +// integer value between BestSpeed and BestCompression inclusive. The error +// returned will be nil if the level is valid. func NewWriterLevel(w io.Writer, level int) (*Writer, error) { - return NewWriterDict(w, level, nil) + return NewWriterLevelDict(w, level, nil) } -// NewWriterDict creates a new io.WriteCloser that satisfies writes by compressing data written to w. -// It is the caller's responsibility to call Close on the WriteCloser when done. -// level is the compression level, which can be DefaultCompression, NoCompression, -// or any integer value between BestSpeed and BestCompression (inclusive). -// dict is the preset dictionary to compress with, or nil to use no dictionary. -func NewWriterDict(w io.Writer, level int, dict []byte) (*Writer, error) { - z := new(Writer) +// NewWriterLevelDict is like NewWriterLevel but specifies a dictionary to +// compress with. +// +// The dictionary may be nil. If not, its contents should not be modified until +// the Writer is closed. +func NewWriterLevelDict(w io.Writer, level int, dict []byte) (*Writer, error) { + if level < DefaultCompression || level > BestCompression { + return nil, fmt.Errorf("zlib: invalid compression level: %d", level) + } + return &Writer{ + w: w, + level: level, + dict: dict, + }, nil +} + +// writeHeader writes the ZLIB header. +func (z *Writer) writeHeader() (err error) { + z.wroteHeader = true // ZLIB has a two-byte header (as documented in RFC 1950). // The first four bits is the CINFO (compression info), which is 7 for the default deflate window size. // The next four bits is the CM (compression method), which is 8 for deflate. @@ -56,7 +81,7 @@ func NewWriterDict(w io.Writer, level int, dict []byte) (*Writer, error) { // 0=fastest, 1=fast, 2=default, 3=best. // The next bit, FDICT, is set if a dictionary is given. // The final five FCHECK bits form a mod-31 checksum. - switch level { + switch z.level { case 0, 1: z.scratch[1] = 0 << 6 case 2, 3, 4, 5: @@ -66,35 +91,41 @@ func NewWriterDict(w io.Writer, level int, dict []byte) (*Writer, error) { case 7, 8, 9: z.scratch[1] = 3 << 6 default: - return nil, errors.New("level out of range") + panic("unreachable") } - if dict != nil { + if z.dict != nil { z.scratch[1] |= 1 << 5 } z.scratch[1] += uint8(31 - (uint16(z.scratch[0])<<8+uint16(z.scratch[1]))%31) - _, err := w.Write(z.scratch[0:2]) - if err != nil { - return nil, err + if _, err = z.w.Write(z.scratch[0:2]); err != nil { + return err } - if dict != nil { + if z.dict != nil { // The next four bytes are the Adler-32 checksum of the dictionary. - checksum := adler32.Checksum(dict) + checksum := adler32.Checksum(z.dict) z.scratch[0] = uint8(checksum >> 24) z.scratch[1] = uint8(checksum >> 16) z.scratch[2] = uint8(checksum >> 8) z.scratch[3] = uint8(checksum >> 0) - _, err = w.Write(z.scratch[0:4]) - if err != nil { - return nil, err + if _, err = z.w.Write(z.scratch[0:4]); err != nil { + return err } } - z.w = w - z.compressor = flate.NewWriterDict(w, level, dict) + z.compressor, err = flate.NewWriterDict(z.w, z.level, z.dict) + if err != nil { + return err + } z.digest = adler32.New() - return z, nil + return nil } +// Write writes a compressed form of p to the underlying io.Writer. The +// compressed bytes are not necessarily flushed until the Writer is closed or +// explicitly flushed. func (z *Writer) Write(p []byte) (n int, err error) { + if !z.wroteHeader { + z.err = z.writeHeader() + } if z.err != nil { return 0, z.err } @@ -110,8 +141,11 @@ func (z *Writer) Write(p []byte) (n int, err error) { return } -// Flush flushes the underlying compressor. +// Flush flushes the Writer to its underlying io.Writer. func (z *Writer) Flush() error { + if !z.wroteHeader { + z.err = z.writeHeader() + } if z.err != nil { return z.err } @@ -121,6 +155,9 @@ func (z *Writer) Flush() error { // Calling Close does not close the wrapped io.Writer originally passed to NewWriter. func (z *Writer) Close() error { + if !z.wroteHeader { + z.err = z.writeHeader() + } if z.err != nil { return z.err } diff --git a/libgo/go/compress/zlib/writer_test.go b/libgo/go/compress/zlib/writer_test.go index 1c75d088ddf..aee1a5c2f54 100644 --- a/libgo/go/compress/zlib/writer_test.go +++ b/libgo/go/compress/zlib/writer_test.go @@ -52,7 +52,7 @@ func testLevelDict(t *testing.T, fn string, b0 []byte, level int, d string) { defer piper.Close() go func() { defer pipew.Close() - zlibw, err := NewWriterDict(pipew, level, dict) + zlibw, err := NewWriterLevelDict(pipew, level, dict) if err != nil { t.Errorf("%s (level=%d, dict=%q): %v", fn, level, d, err) return @@ -125,9 +125,9 @@ func TestWriterDict(t *testing.T) { func TestWriterDictIsUsed(t *testing.T) { var input = []byte("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.") var buf bytes.Buffer - compressor, err := NewWriterDict(&buf, BestCompression, input) + compressor, err := NewWriterLevelDict(&buf, BestCompression, input) if err != nil { - t.Errorf("error in NewWriterDict: %s", err) + t.Errorf("error in NewWriterLevelDict: %s", err) return } compressor.Write(input) diff --git a/libgo/go/container/heap/example_test.go b/libgo/go/container/heap/example_test.go new file mode 100644 index 00000000000..2050bc83591 --- /dev/null +++ b/libgo/go/container/heap/example_test.go @@ -0,0 +1,105 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This example demonstrates a priority queue built using the heap interface. +package heap_test + +import ( + "container/heap" + "fmt" +) + +// An Item is something we manage in a priority queue. +type Item struct { + value string // The value of the item; arbitrary. + priority int // The priority of the item in the queue. + // The index is needed by changePriority and is maintained by the heap.Interface methods. + index int // The index of the item in the heap. +} + +// A PriorityQueue implements heap.Interface and holds Items. +type PriorityQueue []*Item + +func (pq PriorityQueue) Len() int { return len(pq) } + +func (pq PriorityQueue) Less(i, j int) bool { + // We want Pop to give us the highest, not lowest, priority so we use greater than here. + return pq[i].priority > pq[j].priority +} + +func (pq PriorityQueue) Swap(i, j int) { + pq[i], pq[j] = pq[j], pq[i] + pq[i].index = i + pq[j].index = j +} + +func (pq *PriorityQueue) Push(x interface{}) { + // Push and Pop use pointer receivers because they modify the slice's length, + // not just its contents. + // To simplify indexing expressions in these methods, we save a copy of the + // slice object. We could instead write (*pq)[i]. + a := *pq + n := len(a) + a = a[0 : n+1] + item := x.(*Item) + item.index = n + a[n] = item + *pq = a +} + +func (pq *PriorityQueue) Pop() interface{} { + a := *pq + n := len(a) + item := a[n-1] + item.index = -1 // for safety + *pq = a[0 : n-1] + return item +} + +// update is not used by the example but shows how to take the top item from +// the queue, update its priority and value, and put it back. +func (pq *PriorityQueue) update(value string, priority int) { + item := heap.Pop(pq).(*Item) + item.value = value + item.priority = priority + heap.Push(pq, item) +} + +// changePriority is not used by the example but shows how to change the +// priority of an arbitrary item. +func (pq *PriorityQueue) changePriority(item *Item, priority int) { + heap.Remove(pq, item.index) + item.priority = priority + heap.Push(pq, item) +} + +// This example pushes 10 items into a PriorityQueue and takes them out in +// order of priority. +func Example() { + const nItem = 10 + // Random priorities for the items (a permutation of 0..9, times 11)). + priorities := [nItem]int{ + 77, 22, 44, 55, 11, 88, 33, 99, 00, 66, + } + values := [nItem]string{ + "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", + } + // Create a priority queue and put some items in it. + pq := make(PriorityQueue, 0, nItem) + for i := 0; i < cap(pq); i++ { + item := &Item{ + value: values[i], + priority: priorities[i], + } + heap.Push(&pq, item) + } + // Take the items out; should arrive in decreasing priority order. + // For example, the highest priority (99) is the seventh item, so output starts with 99:"seven". + for i := 0; i < nItem; i++ { + item := heap.Pop(&pq).(*Item) + fmt.Printf("%.2d:%s ", item.priority, item.value) + } + // Output: + // 99:seven 88:five 77:zero 66:nine 55:three 44:two 33:six 22:one 11:four 00:eight +} diff --git a/libgo/go/container/heap/heap.go b/libgo/go/container/heap/heap.go index 7af636b4513..67018e6baea 100644 --- a/libgo/go/container/heap/heap.go +++ b/libgo/go/container/heap/heap.go @@ -6,10 +6,11 @@ // heap.Interface. A heap is a tree with the property that each node is the // highest-valued node in its subtree. // -// A heap is a common way to impement a priority queue. To build a priority +// A heap is a common way to implement a priority queue. To build a priority // queue, implement the Heap interface with the (negative) priority as the // ordering for the Less method, so Push adds items while Pop removes the -// highest-priority item from the queue. +// highest-priority item from the queue. The Examples include such an +// implementation; the file example_test.go has the complete source. // package heap diff --git a/libgo/go/crypto/aes/cipher.go b/libgo/go/crypto/aes/cipher.go index 28752e73613..7d307c93a0b 100644 --- a/libgo/go/crypto/aes/cipher.go +++ b/libgo/go/crypto/aes/cipher.go @@ -4,13 +4,16 @@ package aes -import "strconv" +import ( + "crypto/cipher" + "strconv" +) // The AES block size in bytes. const BlockSize = 16 -// A Cipher is an instance of AES encryption using a particular key. -type Cipher struct { +// A cipher is an instance of AES encryption using a particular key. +type aesCipher struct { enc []uint32 dec []uint32 } @@ -21,11 +24,11 @@ func (k KeySizeError) Error() string { return "crypto/aes: invalid key size " + strconv.Itoa(int(k)) } -// NewCipher creates and returns a new Cipher. +// NewCipher creates and returns a new cipher.Block. // The key argument should be the AES key, // either 16, 24, or 32 bytes to select // AES-128, AES-192, or AES-256. -func NewCipher(key []byte) (*Cipher, error) { +func NewCipher(key []byte) (cipher.Block, error) { k := len(key) switch k { default: @@ -35,34 +38,13 @@ func NewCipher(key []byte) (*Cipher, error) { } n := k + 28 - c := &Cipher{make([]uint32, n), make([]uint32, n)} + c := &aesCipher{make([]uint32, n), make([]uint32, n)} expandKey(key, c.enc, c.dec) return c, nil } -// BlockSize returns the AES block size, 16 bytes. -// It is necessary to satisfy the Block interface in the -// package "crypto/cipher". -func (c *Cipher) BlockSize() int { return BlockSize } +func (c *aesCipher) BlockSize() int { return BlockSize } -// Encrypt encrypts the 16-byte buffer src using the key k -// and stores the result in dst. -// Note that for amounts of data larger than a block, -// it is not safe to just call Encrypt on successive blocks; -// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). -func (c *Cipher) Encrypt(dst, src []byte) { encryptBlock(c.enc, dst, src) } +func (c *aesCipher) Encrypt(dst, src []byte) { encryptBlock(c.enc, dst, src) } -// Decrypt decrypts the 16-byte buffer src using the key k -// and stores the result in dst. -func (c *Cipher) Decrypt(dst, src []byte) { decryptBlock(c.dec, dst, src) } - -// Reset zeros the key data, so that it will no longer -// appear in the process's memory. -func (c *Cipher) Reset() { - for i := 0; i < len(c.enc); i++ { - c.enc[i] = 0 - } - for i := 0; i < len(c.dec); i++ { - c.dec[i] = 0 - } -} +func (c *aesCipher) Decrypt(dst, src []byte) { decryptBlock(c.dec, dst, src) } diff --git a/libgo/go/crypto/cipher/cbc_aes_test.go b/libgo/go/crypto/cipher/cbc_aes_test.go index 944ca1ba851..cee3a784b50 100644 --- a/libgo/go/crypto/cipher/cbc_aes_test.go +++ b/libgo/go/crypto/cipher/cbc_aes_test.go @@ -8,11 +8,12 @@ // Special Publication 800-38A, ``Recommendation for Block Cipher // Modes of Operation,'' 2001 Edition, pp. 24-29. -package cipher +package cipher_test import ( "bytes" "crypto/aes" + "crypto/cipher" "testing" ) @@ -72,14 +73,14 @@ func TestCBC_AES(t *testing.T) { continue } - encrypter := NewCBCEncrypter(c, tt.iv) + encrypter := cipher.NewCBCEncrypter(c, tt.iv) d := make([]byte, len(tt.in)) encrypter.CryptBlocks(d, tt.in) if !bytes.Equal(tt.out, d) { t.Errorf("%s: CBCEncrypter\nhave %x\nwant %x", test, d, tt.out) } - decrypter := NewCBCDecrypter(c, tt.iv) + decrypter := cipher.NewCBCDecrypter(c, tt.iv) p := make([]byte, len(d)) decrypter.CryptBlocks(p, d) if !bytes.Equal(tt.in, p) { diff --git a/libgo/go/crypto/cipher/cfb_test.go b/libgo/go/crypto/cipher/cfb_test.go index 9547bfceb7b..f704b337e4b 100644 --- a/libgo/go/crypto/cipher/cfb_test.go +++ b/libgo/go/crypto/cipher/cfb_test.go @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package cipher +package cipher_test import ( "bytes" "crypto/aes" + "crypto/cipher" "crypto/rand" "testing" ) @@ -21,11 +22,11 @@ func TestCFB(t *testing.T) { plaintext := []byte("this is the plaintext") iv := make([]byte, block.BlockSize()) rand.Reader.Read(iv) - cfb := NewCFBEncrypter(block, iv) + cfb := cipher.NewCFBEncrypter(block, iv) ciphertext := make([]byte, len(plaintext)) cfb.XORKeyStream(ciphertext, plaintext) - cfbdec := NewCFBDecrypter(block, iv) + cfbdec := cipher.NewCFBDecrypter(block, iv) plaintextCopy := make([]byte, len(plaintext)) cfbdec.XORKeyStream(plaintextCopy, ciphertext) diff --git a/libgo/go/crypto/cipher/common_test.go b/libgo/go/crypto/cipher/common_test.go index fb755757c25..c75c919d175 100644 --- a/libgo/go/crypto/cipher/common_test.go +++ b/libgo/go/crypto/cipher/common_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package cipher +package cipher_test // Common values for tests. diff --git a/libgo/go/crypto/cipher/ctr_aes_test.go b/libgo/go/crypto/cipher/ctr_aes_test.go index 8dca9968c44..d019ae0d022 100644 --- a/libgo/go/crypto/cipher/ctr_aes_test.go +++ b/libgo/go/crypto/cipher/ctr_aes_test.go @@ -8,11 +8,12 @@ // Special Publication 800-38A, ``Recommendation for Block Cipher // Modes of Operation,'' 2001 Edition, pp. 55-58. -package cipher +package cipher_test import ( "bytes" "crypto/aes" + "crypto/cipher" "testing" ) @@ -76,7 +77,7 @@ func TestCTR_AES(t *testing.T) { for j := 0; j <= 5; j += 5 { in := tt.in[0 : len(tt.in)-j] - ctr := NewCTR(c, tt.iv) + ctr := cipher.NewCTR(c, tt.iv) encrypted := make([]byte, len(in)) ctr.XORKeyStream(encrypted, in) if out := tt.out[0:len(in)]; !bytes.Equal(out, encrypted) { @@ -86,7 +87,7 @@ func TestCTR_AES(t *testing.T) { for j := 0; j <= 7; j += 7 { in := tt.out[0 : len(tt.out)-j] - ctr := NewCTR(c, tt.iv) + ctr := cipher.NewCTR(c, tt.iv) plain := make([]byte, len(in)) ctr.XORKeyStream(plain, in) if out := tt.in[0:len(in)]; !bytes.Equal(out, plain) { diff --git a/libgo/go/crypto/cipher/ofb_test.go b/libgo/go/crypto/cipher/ofb_test.go index 9b4495c8830..8d3c5d3a389 100644 --- a/libgo/go/crypto/cipher/ofb_test.go +++ b/libgo/go/crypto/cipher/ofb_test.go @@ -8,11 +8,12 @@ // Special Publication 800-38A, ``Recommendation for Block Cipher // Modes of Operation,'' 2001 Edition, pp. 52-55. -package cipher +package cipher_test import ( "bytes" "crypto/aes" + "crypto/cipher" "testing" ) @@ -76,7 +77,7 @@ func TestOFB(t *testing.T) { for j := 0; j <= 5; j += 5 { plaintext := tt.in[0 : len(tt.in)-j] - ofb := NewOFB(c, tt.iv) + ofb := cipher.NewOFB(c, tt.iv) ciphertext := make([]byte, len(plaintext)) ofb.XORKeyStream(ciphertext, plaintext) if !bytes.Equal(ciphertext, tt.out[:len(plaintext)]) { @@ -86,7 +87,7 @@ func TestOFB(t *testing.T) { for j := 0; j <= 5; j += 5 { ciphertext := tt.out[0 : len(tt.in)-j] - ofb := NewOFB(c, tt.iv) + ofb := cipher.NewOFB(c, tt.iv) plaintext := make([]byte, len(ciphertext)) ofb.XORKeyStream(plaintext, ciphertext) if !bytes.Equal(plaintext, tt.in[:len(ciphertext)]) { diff --git a/libgo/go/crypto/des/block.go b/libgo/go/crypto/des/block.go index e18eaedf580..c11c62cd723 100644 --- a/libgo/go/crypto/des/block.go +++ b/libgo/go/crypto/des/block.go @@ -79,7 +79,7 @@ func ksRotate(in uint32) (out []uint32) { } // creates 16 56-bit subkeys from the original key -func (c *Cipher) generateSubkeys(keyBytes []byte) { +func (c *desCipher) generateSubkeys(keyBytes []byte) { // apply PC1 permutation to key key := binary.BigEndian.Uint64(keyBytes) permutedKey := permuteBlock(key, permutedChoice1[:]) diff --git a/libgo/go/crypto/des/cipher.go b/libgo/go/crypto/des/cipher.go index 1c41e29a8bd..2f929ca7bed 100644 --- a/libgo/go/crypto/des/cipher.go +++ b/libgo/go/crypto/des/cipher.go @@ -4,7 +4,10 @@ package des -import "strconv" +import ( + "crypto/cipher" + "strconv" +) // The DES block size in bytes. const BlockSize = 8 @@ -15,86 +18,56 @@ func (k KeySizeError) Error() string { return "crypto/des: invalid key size " + strconv.Itoa(int(k)) } -// Cipher is an instance of DES encryption. -type Cipher struct { +// desCipher is an instance of DES encryption. +type desCipher struct { subkeys [16]uint64 } -// NewCipher creates and returns a new Cipher. -func NewCipher(key []byte) (*Cipher, error) { +// NewCipher creates and returns a new cipher.Block. +func NewCipher(key []byte) (cipher.Block, error) { if len(key) != 8 { return nil, KeySizeError(len(key)) } - c := new(Cipher) + c := new(desCipher) c.generateSubkeys(key) return c, nil } -// BlockSize returns the DES block size, 8 bytes. -func (c *Cipher) BlockSize() int { return BlockSize } +func (c *desCipher) BlockSize() int { return BlockSize } -// Encrypt encrypts the 8-byte buffer src and stores the result in dst. -// Note that for amounts of data larger than a block, -// it is not safe to just call Encrypt on successive blocks; -// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). -func (c *Cipher) Encrypt(dst, src []byte) { encryptBlock(c.subkeys[:], dst, src) } +func (c *desCipher) Encrypt(dst, src []byte) { encryptBlock(c.subkeys[:], dst, src) } -// Decrypt decrypts the 8-byte buffer src and stores the result in dst. -func (c *Cipher) Decrypt(dst, src []byte) { decryptBlock(c.subkeys[:], dst, src) } +func (c *desCipher) Decrypt(dst, src []byte) { decryptBlock(c.subkeys[:], dst, src) } -// Reset zeros the key data, so that it will no longer -// appear in the process's memory. -func (c *Cipher) Reset() { - for i := 0; i < len(c.subkeys); i++ { - c.subkeys[i] = 0 - } -} - -// A TripleDESCipher is an instance of TripleDES encryption. -type TripleDESCipher struct { - cipher1, cipher2, cipher3 Cipher +// A tripleDESCipher is an instance of TripleDES encryption. +type tripleDESCipher struct { + cipher1, cipher2, cipher3 desCipher } -// NewCipher creates and returns a new Cipher. -func NewTripleDESCipher(key []byte) (*TripleDESCipher, error) { +// NewTripleDESCipher creates and returns a new cipher.Block. +func NewTripleDESCipher(key []byte) (cipher.Block, error) { if len(key) != 24 { return nil, KeySizeError(len(key)) } - c := new(TripleDESCipher) + c := new(tripleDESCipher) c.cipher1.generateSubkeys(key[:8]) c.cipher2.generateSubkeys(key[8:16]) c.cipher3.generateSubkeys(key[16:]) return c, nil } -// BlockSize returns the TripleDES block size, 8 bytes. -// It is necessary to satisfy the Block interface in the -// package "crypto/cipher". -func (c *TripleDESCipher) BlockSize() int { return BlockSize } +func (c *tripleDESCipher) BlockSize() int { return BlockSize } -// Encrypts the 8-byte buffer src and stores the result in dst. -// Note that for amounts of data larger than a block, -// it is not safe to just call Encrypt on successive blocks; -// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). -func (c *TripleDESCipher) Encrypt(dst, src []byte) { +func (c *tripleDESCipher) Encrypt(dst, src []byte) { c.cipher1.Encrypt(dst, src) c.cipher2.Decrypt(dst, dst) c.cipher3.Encrypt(dst, dst) } -// Decrypts the 8-byte buffer src and stores the result in dst. -func (c *TripleDESCipher) Decrypt(dst, src []byte) { +func (c *tripleDESCipher) Decrypt(dst, src []byte) { c.cipher3.Decrypt(dst, src) c.cipher2.Encrypt(dst, dst) c.cipher1.Decrypt(dst, dst) } - -// Reset zeros the key data, so that it will no longer -// appear in the process's memory. -func (c *TripleDESCipher) Reset() { - c.cipher1.Reset() - c.cipher2.Reset() - c.cipher3.Reset() -} diff --git a/libgo/go/crypto/des/des_test.go b/libgo/go/crypto/des/des_test.go index d1f3aa71ac4..e9fc236299e 100644 --- a/libgo/go/crypto/des/des_test.go +++ b/libgo/go/crypto/des/des_test.go @@ -1260,11 +1260,19 @@ var tableA4Tests = []CryptTest{ []byte{0x63, 0xfa, 0xc0, 0xd0, 0x34, 0xd9, 0xf7, 0x93}}, } +func newCipher(key []byte) *desCipher { + c, err := NewCipher(key) + if err != nil { + panic("NewCipher failed: " + err.Error()) + } + return c.(*desCipher) +} + // Use the known weak keys to test DES implementation func TestWeakKeys(t *testing.T) { for i, tt := range weakKeyTests { var encrypt = func(in []byte) (out []byte) { - c, _ := NewCipher(tt.key) + c := newCipher(tt.key) out = make([]byte, len(in)) encryptBlock(c.subkeys[:], out, in) return @@ -1285,7 +1293,7 @@ func TestWeakKeys(t *testing.T) { func TestSemiWeakKeyPairs(t *testing.T) { for i, tt := range semiWeakKeyTests { var encrypt = func(key, in []byte) (out []byte) { - c, _ := NewCipher(key) + c := newCipher(key) out = make([]byte, len(in)) encryptBlock(c.subkeys[:], out, in) return @@ -1305,7 +1313,7 @@ func TestSemiWeakKeyPairs(t *testing.T) { func TestDESEncryptBlock(t *testing.T) { for i, tt := range encryptDESTests { - c, _ := NewCipher(tt.key) + c := newCipher(tt.key) out := make([]byte, len(tt.in)) encryptBlock(c.subkeys[:], out, tt.in) @@ -1317,7 +1325,7 @@ func TestDESEncryptBlock(t *testing.T) { func TestDESDecryptBlock(t *testing.T) { for i, tt := range encryptDESTests { - c, _ := NewCipher(tt.key) + c := newCipher(tt.key) plain := make([]byte, len(tt.in)) decryptBlock(c.subkeys[:], plain, tt.out) diff --git a/libgo/go/crypto/dsa/dsa.go b/libgo/go/crypto/dsa/dsa.go index 81487f68f41..05766a2f136 100644 --- a/libgo/go/crypto/dsa/dsa.go +++ b/libgo/go/crypto/dsa/dsa.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package dsa implements the Digital Signature Algorithm, as defined in FIPS 186-3 +// Package dsa implements the Digital Signature Algorithm, as defined in FIPS 186-3. package dsa import ( @@ -29,17 +29,11 @@ type PrivateKey struct { X *big.Int } -type invalidPublicKeyError int - -func (invalidPublicKeyError) Error() string { - return "crypto/dsa: invalid public key" -} - // ErrInvalidPublicKey results when a public key is not usable by this code. // FIPS is quite strict about the format of DSA keys, but other code may be // less so. Thus, when using keys which may have been generated by other code, // this error must be handled. -var ErrInvalidPublicKey error = invalidPublicKeyError(0) +var ErrInvalidPublicKey = errors.New("crypto/dsa: invalid public key") // ParameterSizes is a enumeration of the acceptable bit lengths of the primes // in a set of DSA parameters. See FIPS 186-3, section 4.2. diff --git a/libgo/go/crypto/ecdsa/ecdsa.go b/libgo/go/crypto/ecdsa/ecdsa.go index d2f7d8f9bb3..b28239b7862 100644 --- a/libgo/go/crypto/ecdsa/ecdsa.go +++ b/libgo/go/crypto/ecdsa/ecdsa.go @@ -7,7 +7,7 @@ package ecdsa // References: -// [NSA]: Suite B implementor's guide to FIPS 186-3, +// [NSA]: Suite B implementer's guide to FIPS 186-3, // http://www.nsa.gov/ia/_files/ecdsa.pdf // [SECG]: SECG, SEC1 // http://www.secg.org/download/aid-780/sec1-v2.pdf diff --git a/libgo/go/crypto/md5/md5_test.go b/libgo/go/crypto/md5/md5_test.go index b15e4668c32..aae875464f9 100644 --- a/libgo/go/crypto/md5/md5_test.go +++ b/libgo/go/crypto/md5/md5_test.go @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package md5 +package md5_test import ( + "crypto/md5" "fmt" "io" "testing" @@ -52,7 +53,7 @@ var golden = []md5Test{ func TestGolden(t *testing.T) { for i := 0; i < len(golden); i++ { g := golden[i] - c := New() + c := md5.New() for j := 0; j < 3; j++ { if j < 2 { io.WriteString(c, g.in) @@ -69,3 +70,11 @@ func TestGolden(t *testing.T) { } } } + +func ExampleNew() { + h := md5.New() + io.WriteString(h, "The fog is getting thicker!") + io.WriteString(h, "And Leon's getting laaarger!") + fmt.Printf("%x", h.Sum(nil)) + // Output: e2c569be17396eca2a2e3c11578123ed +} diff --git a/libgo/go/crypto/rand/rand_test.go b/libgo/go/crypto/rand/rand_test.go index bfae7ce4f9b..be3a5a221d7 100644 --- a/libgo/go/crypto/rand/rand_test.go +++ b/libgo/go/crypto/rand/rand_test.go @@ -22,7 +22,7 @@ func TestRead(t *testing.T) { } var z bytes.Buffer - f := flate.NewWriter(&z, 5) + f, _ := flate.NewWriter(&z, 5) f.Write(b) f.Close() if z.Len() < len(b)*99/100 { diff --git a/libgo/go/crypto/rand/rand_unix.go b/libgo/go/crypto/rand/rand_unix.go index 5d4fc8198ac..5eb4cda2b3a 100644 --- a/libgo/go/crypto/rand/rand_unix.go +++ b/libgo/go/crypto/rand/rand_unix.go @@ -12,6 +12,7 @@ package rand import ( "bufio" "crypto/aes" + "crypto/cipher" "io" "os" "sync" @@ -66,7 +67,7 @@ func newReader(entropy io.Reader) io.Reader { type reader struct { mu sync.Mutex budget int // number of bytes that can be generated - cipher *aes.Cipher + cipher cipher.Block entropy io.Reader time, seed, dst, key [aes.BlockSize]byte } diff --git a/libgo/go/crypto/rsa/pkcs1v15.go b/libgo/go/crypto/rsa/pkcs1v15.go index 4f12cbea5c5..254f4a3da04 100644 --- a/libgo/go/crypto/rsa/pkcs1v15.go +++ b/libgo/go/crypto/rsa/pkcs1v15.go @@ -21,7 +21,7 @@ import ( func EncryptPKCS1v15(rand io.Reader, pub *PublicKey, msg []byte) (out []byte, err error) { k := (pub.N.BitLen() + 7) / 8 if len(msg) > k-11 { - err = MessageTooLongError{} + err = ErrMessageTooLong return } @@ -47,7 +47,7 @@ func EncryptPKCS1v15(rand io.Reader, pub *PublicKey, msg []byte) (out []byte, er func DecryptPKCS1v15(rand io.Reader, priv *PrivateKey, ciphertext []byte) (out []byte, err error) { valid, out, err := decryptPKCS1v15(rand, priv, ciphertext) if err == nil && valid == 0 { - err = DecryptionError{} + err = ErrDecryption } return @@ -69,7 +69,7 @@ func DecryptPKCS1v15(rand io.Reader, priv *PrivateKey, ciphertext []byte) (out [ func DecryptPKCS1v15SessionKey(rand io.Reader, priv *PrivateKey, ciphertext []byte, key []byte) (err error) { k := (priv.N.BitLen() + 7) / 8 if k-(len(key)+3+8) < 0 { - err = DecryptionError{} + err = ErrDecryption return } @@ -86,7 +86,7 @@ func DecryptPKCS1v15SessionKey(rand io.Reader, priv *PrivateKey, ciphertext []by func decryptPKCS1v15(rand io.Reader, priv *PrivateKey, ciphertext []byte) (valid int, msg []byte, err error) { k := (priv.N.BitLen() + 7) / 8 if k < 11 { - err = DecryptionError{} + err = ErrDecryption return } @@ -170,7 +170,7 @@ func SignPKCS1v15(rand io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []b tLen := len(prefix) + hashLen k := (priv.N.BitLen() + 7) / 8 if k < tLen+11 { - return nil, MessageTooLongError{} + return nil, ErrMessageTooLong } // EM = 0x00 || 0x01 || PS || 0x00 || T @@ -203,7 +203,7 @@ func VerifyPKCS1v15(pub *PublicKey, hash crypto.Hash, hashed []byte, sig []byte) tLen := len(prefix) + hashLen k := (pub.N.BitLen() + 7) / 8 if k < tLen+11 { - err = VerificationError{} + err = ErrVerification return } @@ -223,7 +223,7 @@ func VerifyPKCS1v15(pub *PublicKey, hash crypto.Hash, hashed []byte, sig []byte) } if ok != 1 { - return VerificationError{} + return ErrVerification } return nil diff --git a/libgo/go/crypto/rsa/rsa.go b/libgo/go/crypto/rsa/rsa.go index 677d27be5d2..ec77e68696b 100644 --- a/libgo/go/crypto/rsa/rsa.go +++ b/libgo/go/crypto/rsa/rsa.go @@ -206,13 +206,9 @@ func mgf1XOR(out []byte, hash hash.Hash, seed []byte) { } } -// MessageTooLongError is returned when attempting to encrypt a message which -// is too large for the size of the public key. -type MessageTooLongError struct{} - -func (MessageTooLongError) Error() string { - return "message too long for RSA public key size" -} +// ErrMessageTooLong is returned when attempting to encrypt a message which is +// too large for the size of the public key. +var ErrMessageTooLong = errors.New("crypto/rsa: message too long for RSA public key size") func encrypt(c *big.Int, pub *PublicKey, m *big.Int) *big.Int { e := big.NewInt(int64(pub.E)) @@ -227,7 +223,7 @@ func EncryptOAEP(hash hash.Hash, random io.Reader, pub *PublicKey, msg []byte, l hash.Reset() k := (pub.N.BitLen() + 7) / 8 if len(msg) > k-2*hash.Size()-2 { - err = MessageTooLongError{} + err = ErrMessageTooLong return } @@ -266,17 +262,13 @@ func EncryptOAEP(hash hash.Hash, random io.Reader, pub *PublicKey, msg []byte, l return } -// A DecryptionError represents a failure to decrypt a message. +// ErrDecryption represents a failure to decrypt a message. // It is deliberately vague to avoid adaptive attacks. -type DecryptionError struct{} +var ErrDecryption = errors.New("crypto/rsa: decryption error") -func (DecryptionError) Error() string { return "RSA decryption error" } - -// A VerificationError represents a failure to verify a signature. +// ErrVerification represents a failure to verify a signature. // It is deliberately vague to avoid adaptive attacks. -type VerificationError struct{} - -func (VerificationError) Error() string { return "RSA verification error" } +var ErrVerification = errors.New("crypto/rsa: verification error") // modInverse returns ia, the inverse of a in the multiplicative group of prime // order n. It requires that a be a member of the group (i.e. less than n). @@ -338,7 +330,7 @@ func (priv *PrivateKey) Precompute() { func decrypt(random io.Reader, priv *PrivateKey, c *big.Int) (m *big.Int, err error) { // TODO(agl): can we get away with reusing blinds? if c.Cmp(priv.N) > 0 { - err = DecryptionError{} + err = ErrDecryption return } @@ -417,7 +409,7 @@ func DecryptOAEP(hash hash.Hash, random io.Reader, priv *PrivateKey, ciphertext k := (priv.N.BitLen() + 7) / 8 if len(ciphertext) > k || k < hash.Size()*2+2 { - err = DecryptionError{} + err = ErrDecryption return } @@ -473,7 +465,7 @@ func DecryptOAEP(hash hash.Hash, random io.Reader, priv *PrivateKey, ciphertext } if firstByteIsZero&lHash2Good&^invalid&^lookingForIndex != 1 { - err = DecryptionError{} + err = ErrDecryption return } diff --git a/libgo/go/crypto/sha1/sha1_test.go b/libgo/go/crypto/sha1/sha1_test.go index c23df6c41e9..2dc14ac9868 100644 --- a/libgo/go/crypto/sha1/sha1_test.go +++ b/libgo/go/crypto/sha1/sha1_test.go @@ -4,9 +4,10 @@ // SHA1 hash algorithm. See RFC 3174. -package sha1 +package sha1_test import ( + "crypto/sha1" "fmt" "io" "testing" @@ -54,7 +55,7 @@ var golden = []sha1Test{ func TestGolden(t *testing.T) { for i := 0; i < len(golden); i++ { g := golden[i] - c := New() + c := sha1.New() for j := 0; j < 3; j++ { if j < 2 { io.WriteString(c, g.in) @@ -71,3 +72,10 @@ func TestGolden(t *testing.T) { } } } + +func ExampleNew() { + h := sha1.New() + io.WriteString(h, "His money is twice tainted: 'taint yours and 'taint mine.") + fmt.Printf("% x", h.Sum(nil)) + // Output: 59 7f 6a 54 00 10 f9 4c 15 d7 18 06 a9 9a 2c 87 10 e7 47 bd +} diff --git a/libgo/go/crypto/tls/conn.go b/libgo/go/crypto/tls/conn.go index e6cee1278c3..2a5115dc6ab 100644 --- a/libgo/go/crypto/tls/conn.go +++ b/libgo/go/crypto/tls/conn.go @@ -87,9 +87,9 @@ func (c *Conn) RemoteAddr() net.Addr { return c.conn.RemoteAddr() } -// SetDeadline sets the read deadline associated with the connection. -// There is no write deadline. -// A zero value for t means Read will not time out. +// SetDeadline sets the read and write deadlines associated with the connection. +// A zero value for t means Read and Write will not time out. +// After a Write has timed out, the TLS state is corrupt and all future writes will return the same error. func (c *Conn) SetDeadline(t time.Time) error { return c.conn.SetDeadline(t) } @@ -100,10 +100,11 @@ func (c *Conn) SetReadDeadline(t time.Time) error { return c.conn.SetReadDeadline(t) } -// SetWriteDeadline exists to satisfy the net.Conn interface -// but is not implemented by TLS. It always returns an error. +// SetWriteDeadline sets the write deadline on the underlying conneciton. +// A zero value for t means Write will not time out. +// After a Write has timed out, the TLS state is corrupt and all future writes will return the same error. func (c *Conn) SetWriteDeadline(t time.Time) error { - return errors.New("TLS does not support SetWriteDeadline") + return c.conn.SetWriteDeadline(t) } // A halfConn represents one direction of the record layer @@ -726,9 +727,13 @@ func (c *Conn) readHandshake() (interface{}, error) { } // Write writes data to the connection. -func (c *Conn) Write(b []byte) (n int, err error) { - if err = c.Handshake(); err != nil { - return +func (c *Conn) Write(b []byte) (int, error) { + if c.err != nil { + return 0, c.err + } + + if c.err = c.Handshake(); c.err != nil { + return 0, c.err } c.out.Lock() @@ -737,10 +742,10 @@ func (c *Conn) Write(b []byte) (n int, err error) { if !c.handshakeComplete { return 0, alertInternalError } - if c.err != nil { - return 0, c.err - } - return c.writeRecord(recordTypeApplicationData, b) + + var n int + n, c.err = c.writeRecord(recordTypeApplicationData, b) + return n, c.err } // Read can be made to time out and return a net.Error with Timeout() == true diff --git a/libgo/go/crypto/tls/generate_cert.go b/libgo/go/crypto/tls/generate_cert.go index 7c0718b82ab..84be5bfd856 100644 --- a/libgo/go/crypto/tls/generate_cert.go +++ b/libgo/go/crypto/tls/generate_cert.go @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// +build ignore + // Generate a self-signed X.509 certificate for a TLS server. Outputs to // 'cert.pem' and 'key.pem' and will overwrite existing files. diff --git a/libgo/go/crypto/tls/handshake_client.go b/libgo/go/crypto/tls/handshake_client.go index 687e5ef11b4..0d7b806ff5b 100644 --- a/libgo/go/crypto/tls/handshake_client.go +++ b/libgo/go/crypto/tls/handshake_client.go @@ -273,7 +273,7 @@ func (c *Conn) clientHandshake() error { masterSecret, clientMAC, serverMAC, clientKey, serverKey, clientIV, serverIV := keysFromPreMasterSecret(c.vers, preMasterSecret, hello.random, serverHello.random, suite.macLen, suite.keyLen, suite.ivLen) - clientCipher := suite.cipher(clientKey, clientIV, false /* not for reading */ ) + clientCipher := suite.cipher(clientKey, clientIV, false /* not for reading */) clientHash := suite.mac(c.vers, clientMAC) c.out.prepareCipherSpec(c.vers, clientCipher, clientHash) c.writeRecord(recordTypeChangeCipherSpec, []byte{1}) @@ -294,7 +294,7 @@ func (c *Conn) clientHandshake() error { finishedHash.Write(finished.marshal()) c.writeRecord(recordTypeHandshake, finished.marshal()) - serverCipher := suite.cipher(serverKey, serverIV, true /* for reading */ ) + serverCipher := suite.cipher(serverKey, serverIV, true /* for reading */) serverHash := suite.mac(c.vers, serverMAC) c.in.prepareCipherSpec(c.vers, serverCipher, serverHash) c.readRecord(recordTypeChangeCipherSpec) diff --git a/libgo/go/crypto/tls/handshake_client_test.go b/libgo/go/crypto/tls/handshake_client_test.go index c0abcda2001..8c56daaf619 100644 --- a/libgo/go/crypto/tls/handshake_client_test.go +++ b/libgo/go/crypto/tls/handshake_client_test.go @@ -62,7 +62,7 @@ func TestRunClient(t *testing.T) { // Script of interaction with gnutls implementation. // The values for this test are obtained by building and running in client mode: -// % gotest -test.run "TestRunClient" -connect +// % go test -run "TestRunClient" -connect // and then: // % gnutls-serv -p 10443 --debug 100 --x509keyfile key.pem --x509certfile cert.pem -a > /tmp/log 2>&1 // % python parse-gnutls-cli-debug-log.py < /tmp/log diff --git a/libgo/go/crypto/tls/handshake_server.go b/libgo/go/crypto/tls/handshake_server.go index fb53767f3e0..23ec5587235 100644 --- a/libgo/go/crypto/tls/handshake_server.go +++ b/libgo/go/crypto/tls/handshake_server.go @@ -295,7 +295,7 @@ FindCipherSuite: masterSecret, clientMAC, serverMAC, clientKey, serverKey, clientIV, serverIV := keysFromPreMasterSecret(c.vers, preMasterSecret, clientHello.random, hello.random, suite.macLen, suite.keyLen, suite.ivLen) - clientCipher := suite.cipher(clientKey, clientIV, true /* for reading */ ) + clientCipher := suite.cipher(clientKey, clientIV, true /* for reading */) clientHash := suite.mac(c.vers, clientMAC) c.in.prepareCipherSpec(c.vers, clientCipher, clientHash) c.readRecord(recordTypeChangeCipherSpec) @@ -333,7 +333,7 @@ FindCipherSuite: finishedHash.Write(clientFinished.marshal()) - serverCipher := suite.cipher(serverKey, serverIV, false /* not for reading */ ) + serverCipher := suite.cipher(serverKey, serverIV, false /* not for reading */) serverHash := suite.mac(c.vers, serverMAC) c.out.prepareCipherSpec(c.vers, serverCipher, serverHash) c.writeRecord(recordTypeChangeCipherSpec, []byte{1}) diff --git a/libgo/go/crypto/tls/handshake_server_test.go b/libgo/go/crypto/tls/handshake_server_test.go index 4bff5327e2c..bd31d31ae1a 100644 --- a/libgo/go/crypto/tls/handshake_server_test.go +++ b/libgo/go/crypto/tls/handshake_server_test.go @@ -284,7 +284,7 @@ func loadPEMCert(in string) *x509.Certificate { // Script of interaction with gnutls implementation. // The values for this test are obtained by building and running in server mode: -// % gotest -test.run "TestRunServer" -serve +// % go test -run "TestRunServer" -serve // and then: // % gnutls-cli --insecure --debug 100 -p 10443 localhost > /tmp/log 2>&1 // % python parse-gnutls-cli-debug-log.py < /tmp/log @@ -949,7 +949,7 @@ var sslv3ServerScript = [][]byte{ var clientauthTests = []clientauthTest{ // Server doesn't asks for cert - // gotest -test.run "TestRunServer" -serve -clientauth 0 + // go test -run "TestRunServer" -serve -clientauth 0 // gnutls-cli --insecure --debug 100 -p 10443 localhost 2>&1 | // python parse-gnutls-cli-debug-log.py {"NoClientCert", NoClientCert, nil, @@ -1115,7 +1115,7 @@ var clientauthTests = []clientauthTest{ 0x03, 0x11, 0x43, 0x3e, 0xee, 0xb7, 0x4d, 0x69, }}}, // Server asks for cert with empty CA list, client doesn't give it. - // gotest -test.run "TestRunServer" -serve -clientauth 1 + // go test -run "TestRunServer" -serve -clientauth 1 // gnutls-cli --insecure --debug 100 -p 10443 localhost {"RequestClientCert, none given", RequestClientCert, nil, [][]byte{{ @@ -1282,7 +1282,7 @@ var clientauthTests = []clientauthTest{ 0xf4, 0x70, 0xcc, 0xb4, 0xed, 0x07, 0x76, 0x3a, }}}, // Server asks for cert with empty CA list, client gives one - // gotest -test.run "TestRunServer" -serve -clientauth 1 + // go test -run "TestRunServer" -serve -clientauth 1 // gnutls-cli --insecure --debug 100 -p 10443 localhost {"RequestClientCert, client gives it", RequestClientCert, []*x509.Certificate{clicert}, diff --git a/libgo/go/crypto/tls/root_darwin.go b/libgo/go/crypto/tls/root_darwin.go index db1b18b3c07..911a9a62e3c 100644 --- a/libgo/go/crypto/tls/root_darwin.go +++ b/libgo/go/crypto/tls/root_darwin.go @@ -5,11 +5,9 @@ package tls /* -// Note: We disable -Werror here because the code in this file uses a deprecated API to stay -// compatible with both Mac OS X 10.6 and 10.7. Using a deprecated function on Darwin generates -// a warning. -#cgo CFLAGS: -Wno-error -Wno-deprecated-declarations +#cgo CFLAGS: -mmacosx-version-min=10.6 -D__MAC_OS_X_VERSION_MAX_ALLOWED=1060 #cgo LDFLAGS: -framework CoreFoundation -framework Security + #include <CoreFoundation/CoreFoundation.h> #include <Security/Security.h> @@ -40,26 +38,12 @@ int FetchPEMRoots(CFDataRef *pemRoots) { continue; } - // SecKeychainImportExport is deprecated in >= OS X 10.7, and has been replaced by - // SecItemExport. If we're built on a host with a Lion SDK, this code gets conditionally - // included in the output, also for binaries meant for 10.6. - // - // To make sure that we run on both Mac OS X 10.6 and 10.7 we use weak linking - // and check whether SecItemExport is available before we attempt to call it. On - // 10.6, this won't be the case, and we'll fall back to calling SecKeychainItemExport. -#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 - if (SecItemExport) { - err = SecItemExport(cert, kSecFormatX509Cert, kSecItemPemArmour, NULL, &data); - if (err != noErr) { - continue; - } - } else -#endif - if (data == NULL) { - err = SecKeychainItemExport(cert, kSecFormatX509Cert, kSecItemPemArmour, NULL, &data); - if (err != noErr) { - continue; - } + // Note: SecKeychainItemExport is deprecated as of 10.7 in favor of SecItemExport. + // Once we support weak imports via cgo we should prefer that, and fall back to this + // for older systems. + err = SecKeychainItemExport(cert, kSecFormatX509Cert, kSecItemPemArmour, NULL, &data); + if (err != noErr) { + continue; } if (data != NULL) { diff --git a/libgo/go/crypto/x509/verify.go b/libgo/go/crypto/x509/verify.go index 87b1cb7bb1c..3859dd8d488 100644 --- a/libgo/go/crypto/x509/verify.go +++ b/libgo/go/crypto/x509/verify.go @@ -135,8 +135,8 @@ func (c *Certificate) isValid(certType int, opts *VerifyOptions) error { // Verify attempts to verify c by building one or more chains from c to a // certificate in opts.roots, using certificates in opts.Intermediates if -// needed. If successful, it returns one or chains where the first element of -// the chain is c and the last element is from opts.Roots. +// needed. If successful, it returns one or more chains where the first +// element of the chain is c and the last element is from opts.Roots. // // WARNING: this doesn't do any revocation checking. func (c *Certificate) Verify(opts VerifyOptions) (chains [][]*Certificate, err error) { diff --git a/libgo/go/crypto/x509/x509.go b/libgo/go/crypto/x509/x509.go index 7b45ba51f43..f5da86b54a0 100644 --- a/libgo/go/crypto/x509/x509.go +++ b/libgo/go/crypto/x509/x509.go @@ -153,7 +153,7 @@ const ( // // md2WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 2 } // -// md5WithRSAEncryption OBJECT IDENTIFER ::= { pkcs-1 4 } +// md5WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 4 } // // sha-1WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 5 } // @@ -172,9 +172,9 @@ const ( // // RFC 5758 3.1 DSA Signature Algorithms // -// dsaWithSha356 OBJECT IDENTIFER ::= { +// dsaWithSha256 OBJECT IDENTIFIER ::= { // joint-iso-ccitt(2) country(16) us(840) organization(1) gov(101) -// algorithms(4) id-dsa-with-sha2(3) 2} +// csor(3) algorithms(4) id-dsa-with-sha2(3) 2} // var ( oidSignatureMD2WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 2} @@ -327,13 +327,9 @@ type Certificate struct { PolicyIdentifiers []asn1.ObjectIdentifier } -// UnsupportedAlgorithmError results from attempting to perform an operation -// that involves algorithms that are not currently implemented. -type UnsupportedAlgorithmError struct{} - -func (UnsupportedAlgorithmError) Error() string { - return "cannot verify signature: algorithm unimplemented" -} +// ErrUnsupportedAlgorithm results from attempting to perform an operation that +// involves algorithms that are not currently implemented. +var ErrUnsupportedAlgorithm = errors.New("crypto/x509: cannot verify signature: algorithm unimplemented") // ConstraintViolationError results when a requested usage is not permitted by // a certificate. For example: checking a signature when the public key isn't a @@ -341,7 +337,7 @@ func (UnsupportedAlgorithmError) Error() string { type ConstraintViolationError struct{} func (ConstraintViolationError) Error() string { - return "invalid signature: parent certificate cannot sign this kind of certificate" + return "crypto/x509: invalid signature: parent certificate cannot sign this kind of certificate" } func (c *Certificate) Equal(other *Certificate) bool { @@ -366,7 +362,7 @@ func (c *Certificate) CheckSignatureFrom(parent *Certificate) (err error) { } if parent.PublicKeyAlgorithm == UnknownPublicKeyAlgorithm { - return UnsupportedAlgorithmError{} + return ErrUnsupportedAlgorithm } // TODO(agl): don't ignore the path length constraint. @@ -389,12 +385,12 @@ func (c *Certificate) CheckSignature(algo SignatureAlgorithm, signed, signature case SHA512WithRSA: hashType = crypto.SHA512 default: - return UnsupportedAlgorithmError{} + return ErrUnsupportedAlgorithm } h := hashType.New() if h == nil { - return UnsupportedAlgorithmError{} + return ErrUnsupportedAlgorithm } h.Write(signed) @@ -416,7 +412,7 @@ func (c *Certificate) CheckSignature(algo SignatureAlgorithm, signed, signature } return } - return UnsupportedAlgorithmError{} + return ErrUnsupportedAlgorithm } // CheckCRLSignature checks that the signature in crl is from c. @@ -795,7 +791,7 @@ var ( ) func buildExtensions(template *Certificate) (ret []pkix.Extension, err error) { - ret = make([]pkix.Extension, 7 /* maximum number of elements. */ ) + ret = make([]pkix.Extension, 7 /* maximum number of elements. */) n := 0 if template.KeyUsage != 0 { diff --git a/libgo/go/database/sql/convert.go b/libgo/go/database/sql/convert.go index 4924ac14e46..bfcb03ccf8d 100644 --- a/libgo/go/database/sql/convert.go +++ b/libgo/go/database/sql/convert.go @@ -17,8 +17,8 @@ import ( // subsetTypeArgs takes a slice of arguments from callers of the sql // package and converts them into a slice of the driver package's // "subset types". -func subsetTypeArgs(args []interface{}) ([]interface{}, error) { - out := make([]interface{}, len(args)) +func subsetTypeArgs(args []interface{}) ([]driver.Value, error) { + out := make([]driver.Value, len(args)) for n, arg := range args { var err error out[n], err = driver.DefaultParameterConverter.ConvertValue(arg) @@ -90,8 +90,8 @@ func convertAssign(dest, src interface{}) error { return nil } - if scanner, ok := dest.(ScannerInto); ok { - return scanner.ScanInto(src) + if scanner, ok := dest.(Scanner); ok { + return scanner.Scan(src) } dpv := reflect.ValueOf(dest) @@ -110,6 +110,14 @@ func convertAssign(dest, src interface{}) error { } switch dv.Kind() { + case reflect.Ptr: + if src == nil { + dv.Set(reflect.Zero(dv.Type())) + return nil + } else { + dv.Set(reflect.New(dv.Type().Elem())) + return convertAssign(dv.Interface(), src) + } case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: s := asString(src) i64, err := strconv.ParseInt(s, 10, dv.Type().Bits()) diff --git a/libgo/go/database/sql/convert_test.go b/libgo/go/database/sql/convert_test.go index 34ee93987fc..9c362d7320a 100644 --- a/libgo/go/database/sql/convert_test.go +++ b/libgo/go/database/sql/convert_test.go @@ -13,6 +13,7 @@ import ( ) var someTime = time.Unix(123, 0) +var answer int64 = 42 type conversionTest struct { s, d interface{} // source and destination @@ -27,6 +28,8 @@ type conversionTest struct { wantbool bool // used if d is of type *bool wanterr string wantiface interface{} + wantptr *int64 // if non-nil, *d's pointed value must be equal to *wantptr + wantnil bool // if true, *d must be *int64(nil) } // Target variables for scanning into. @@ -42,6 +45,7 @@ var ( scanf32 float32 scanf64 float64 scantime time.Time + scanptr *int64 scaniface interface{} ) @@ -98,6 +102,10 @@ var conversionTests = []conversionTest{ {s: "1.5", d: &scanf32, wantf32: float32(1.5)}, {s: "1.5", d: &scanf64, wantf64: float64(1.5)}, + // Pointers + {s: interface{}(nil), d: &scanptr, wantnil: true}, + {s: int64(42), d: &scanptr, wantptr: &answer}, + // To interface{} {s: float64(1.5), d: &scaniface, wantiface: float64(1.5)}, {s: int64(1), d: &scaniface, wantiface: int64(1)}, @@ -107,6 +115,10 @@ var conversionTests = []conversionTest{ {s: nil, d: &scaniface}, } +func intPtrValue(intptr interface{}) interface{} { + return reflect.Indirect(reflect.Indirect(reflect.ValueOf(intptr))).Int() +} + func intValue(intptr interface{}) int64 { return reflect.Indirect(reflect.ValueOf(intptr)).Int() } @@ -162,6 +174,16 @@ func TestConversions(t *testing.T) { if !ct.wanttime.IsZero() && !ct.wanttime.Equal(timeValue(ct.d)) { errf("want time %v, got %v", ct.wanttime, timeValue(ct.d)) } + if ct.wantnil && *ct.d.(**int64) != nil { + errf("want nil, got %v", intPtrValue(ct.d)) + } + if ct.wantptr != nil { + if *ct.d.(**int64) == nil { + errf("want pointer to %v, got nil", *ct.wantptr) + } else if *ct.wantptr != intPtrValue(ct.d) { + errf("want pointer to %v, got %v", *ct.wantptr, intPtrValue(ct.d)) + } + } if ifptr, ok := ct.d.(*interface{}); ok { if !reflect.DeepEqual(ct.wantiface, scaniface) { errf("want interface %#v, got %#v", ct.wantiface, scaniface) diff --git a/libgo/go/database/sql/driver/driver.go b/libgo/go/database/sql/driver/driver.go index b9300776050..7f986b80f2c 100644 --- a/libgo/go/database/sql/driver/driver.go +++ b/libgo/go/database/sql/driver/driver.go @@ -6,21 +6,20 @@ // drivers as used by package sql. // // Most code should use package sql. -// -// Drivers only need to be aware of a subset of Go's types. The sql package -// will convert all types into one of the following: +package driver + +import "errors" + +// A driver Value is a value that drivers must be able to handle. +// A Value is either nil or an instance of one of these types: // // int64 // float64 // bool -// nil // []byte // string [*] everywhere except from Rows.Next. // time.Time -// -package driver - -import "errors" +type Value interface{} // Driver is the interface that must be implemented by a database // driver. @@ -50,11 +49,9 @@ var ErrSkip = errors.New("driver: skip fast-path; continue as if unimplemented") // first prepare a query, execute the statement, and then close the // statement. // -// All arguments are of a subset type as defined in the package docs. -// // Exec may return ErrSkip. type Execer interface { - Exec(query string, args []interface{}) (Result, error) + Exec(query string, args []Value) (Result, error) } // Conn is a connection to a database. It is not used concurrently @@ -127,18 +124,17 @@ type Stmt interface { NumInput() int // Exec executes a query that doesn't return rows, such - // as an INSERT or UPDATE. The args are all of a subset - // type as defined above. - Exec(args []interface{}) (Result, error) + // as an INSERT or UPDATE. + Exec(args []Value) (Result, error) // Exec executes a query that may return rows, such as a - // SELECT. The args of all of a subset type as defined above. - Query(args []interface{}) (Rows, error) + // SELECT. + Query(args []Value) (Rows, error) } // ColumnConverter may be optionally implemented by Stmt if the // the statement is aware of its own columns' types and can -// convert from any type to a driver subset type. +// convert from any type to a driver Value. type ColumnConverter interface { // ColumnConverter returns a ValueConverter for the provided // column index. If the type of a specific column isn't known @@ -162,12 +158,12 @@ type Rows interface { // the provided slice. The provided slice will be the same // size as the Columns() are wide. // - // The dest slice may be populated with only with values - // of subset types defined above, but excluding string. + // The dest slice may be populated only with + // a driver Value type, but excluding string. // All string values must be converted to []byte. // // Next should return io.EOF when there are no more rows. - Next(dest []interface{}) error + Next(dest []Value) error } // Tx is a transaction. @@ -190,18 +186,19 @@ func (v RowsAffected) RowsAffected() (int64, error) { return int64(v), nil } -// DDLSuccess is a pre-defined Result for drivers to return when a DDL -// command succeeds. -var DDLSuccess ddlSuccess +// ResultNoRows is a pre-defined Result for drivers to return when a DDL +// command (such as a CREATE TABLE) succeeds. It returns an error for both +// LastInsertId and RowsAffected. +var ResultNoRows noRows -type ddlSuccess struct{} +type noRows struct{} -var _ Result = ddlSuccess{} +var _ Result = noRows{} -func (ddlSuccess) LastInsertId() (int64, error) { +func (noRows) LastInsertId() (int64, error) { return 0, errors.New("no LastInsertId available after DDL statement") } -func (ddlSuccess) RowsAffected() (int64, error) { +func (noRows) RowsAffected() (int64, error) { return 0, errors.New("no RowsAffected available after DDL statement") } diff --git a/libgo/go/database/sql/driver/types.go b/libgo/go/database/sql/driver/types.go index f3838852311..3305354dfd0 100644 --- a/libgo/go/database/sql/driver/types.go +++ b/libgo/go/database/sql/driver/types.go @@ -17,28 +17,28 @@ import ( // driver package to provide consistent implementations of conversions // between drivers. The ValueConverters have several uses: // -// * converting from the subset types as provided by the sql package +// * converting from the Value types as provided by the sql package // into a database table's specific column type and making sure it // fits, such as making sure a particular int64 fits in a // table's uint16 column. // // * converting a value as given from the database into one of the -// subset types. +// driver Value types. // -// * by the sql package, for converting from a driver's subset type +// * by the sql package, for converting from a driver's Value type // to a user's type in a scan. type ValueConverter interface { - // ConvertValue converts a value to a restricted subset type. - ConvertValue(v interface{}) (interface{}, error) + // ConvertValue converts a value to a driver Value. + ConvertValue(v interface{}) (Value, error) } -// SubsetValuer is the interface providing the SubsetValue method. +// Valuer is the interface providing the Value method. // -// Types implementing SubsetValuer interface are able to convert -// themselves to one of the driver's allowed subset values. -type SubsetValuer interface { - // SubsetValue returns a driver parameter subset value. - SubsetValue() (interface{}, error) +// Types implementing Valuer interface are able to convert +// themselves to a driver Value. +type Valuer interface { + // Value returns a driver Value. + Value() (Value, error) } // Bool is a ValueConverter that converts input values to bools. @@ -59,7 +59,7 @@ var _ ValueConverter = boolType{} func (boolType) String() string { return "Bool" } -func (boolType) ConvertValue(src interface{}) (interface{}, error) { +func (boolType) ConvertValue(src interface{}) (Value, error) { switch s := src.(type) { case bool: return s, nil @@ -104,7 +104,7 @@ type int32Type struct{} var _ ValueConverter = int32Type{} -func (int32Type) ConvertValue(v interface{}) (interface{}, error) { +func (int32Type) ConvertValue(v interface{}) (Value, error) { rv := reflect.ValueOf(v) switch rv.Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: @@ -137,7 +137,7 @@ var String stringType type stringType struct{} -func (stringType) ConvertValue(v interface{}) (interface{}, error) { +func (stringType) ConvertValue(v interface{}) (Value, error) { switch v.(type) { case string, []byte: return v, nil @@ -151,7 +151,7 @@ type Null struct { Converter ValueConverter } -func (n Null) ConvertValue(v interface{}) (interface{}, error) { +func (n Null) ConvertValue(v interface{}) (Value, error) { if v == nil { return nil, nil } @@ -164,28 +164,17 @@ type NotNull struct { Converter ValueConverter } -func (n NotNull) ConvertValue(v interface{}) (interface{}, error) { +func (n NotNull) ConvertValue(v interface{}) (Value, error) { if v == nil { return nil, fmt.Errorf("nil value not allowed") } return n.Converter.ConvertValue(v) } -// IsParameterSubsetType reports whether v is of a valid type for a -// parameter. These types are: -// -// int64 -// float64 -// bool -// nil -// []byte -// time.Time -// string -// -// This is the same list as IsScanSubsetType, with the addition of -// string. -func IsParameterSubsetType(v interface{}) bool { - if IsScanSubsetType(v) { +// IsValue reports whether v is a valid Value parameter type. +// Unlike IsScanValue, IsValue permits the string type. +func IsValue(v interface{}) bool { + if IsScanValue(v) { return true } if _, ok := v.(string); ok { @@ -194,18 +183,9 @@ func IsParameterSubsetType(v interface{}) bool { return false } -// IsScanSubsetType reports whether v is of a valid type for a -// value populated by Rows.Next. These types are: -// -// int64 -// float64 -// bool -// nil -// []byte -// time.Time -// -// This is the same list as IsParameterSubsetType, without string. -func IsScanSubsetType(v interface{}) bool { +// IsScanValue reports whether v is a valid Value scan type. +// Unlike IsValue, IsScanValue does not permit the string type. +func IsScanValue(v interface{}) bool { if v == nil { return true } @@ -221,7 +201,7 @@ func IsScanSubsetType(v interface{}) bool { // ColumnConverter. // // DefaultParameterConverter returns the given value directly if -// IsSubsetType(value). Otherwise integer type are converted to +// IsValue(value). Otherwise integer type are converted to // int64, floats to float64, and strings to []byte. Other types are // an error. var DefaultParameterConverter defaultConverter @@ -230,24 +210,31 @@ type defaultConverter struct{} var _ ValueConverter = defaultConverter{} -func (defaultConverter) ConvertValue(v interface{}) (interface{}, error) { - if IsParameterSubsetType(v) { +func (defaultConverter) ConvertValue(v interface{}) (Value, error) { + if IsValue(v) { return v, nil } - if svi, ok := v.(SubsetValuer); ok { - sv, err := svi.SubsetValue() + if svi, ok := v.(Valuer); ok { + sv, err := svi.Value() if err != nil { return nil, err } - if !IsParameterSubsetType(sv) { - return nil, fmt.Errorf("non-subset type %T returned from SubsetValue", sv) + if !IsValue(sv) { + return nil, fmt.Errorf("non-Value type %T returned from Value", sv) } return sv, nil } rv := reflect.ValueOf(v) switch rv.Kind() { + case reflect.Ptr: + // indirect pointers + if rv.IsNil() { + return nil, nil + } else { + return defaultConverter{}.ConvertValue(rv.Elem().Interface()) + } case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return rv.Int(), nil case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32: diff --git a/libgo/go/database/sql/driver/types_test.go b/libgo/go/database/sql/driver/types_test.go index 966bc6b4587..ab82bca7166 100644 --- a/libgo/go/database/sql/driver/types_test.go +++ b/libgo/go/database/sql/driver/types_test.go @@ -18,6 +18,7 @@ type valueConverterTest struct { } var now = time.Now() +var answer int64 = 42 var valueConverterTests = []valueConverterTest{ {Bool, "true", true, ""}, @@ -37,6 +38,9 @@ var valueConverterTests = []valueConverterTest{ {c: Bool, in: "foo", err: "sql/driver: couldn't convert \"foo\" into type bool"}, {c: Bool, in: 2, err: "sql/driver: couldn't convert 2 into type bool"}, {DefaultParameterConverter, now, now, ""}, + {DefaultParameterConverter, (*int64)(nil), nil, ""}, + {DefaultParameterConverter, &answer, answer, ""}, + {DefaultParameterConverter, &now, now, ""}, } func TestValueConverters(t *testing.T) { diff --git a/libgo/go/database/sql/fakedb_test.go b/libgo/go/database/sql/fakedb_test.go index 889e2a25232..fc63f03740a 100644 --- a/libgo/go/database/sql/fakedb_test.go +++ b/libgo/go/database/sql/fakedb_test.go @@ -217,7 +217,7 @@ func (c *fakeConn) Close() error { return nil } -func checkSubsetTypes(args []interface{}) error { +func checkSubsetTypes(args []driver.Value) error { for n, arg := range args { switch arg.(type) { case int64, float64, bool, nil, []byte, string, time.Time: @@ -228,7 +228,7 @@ func checkSubsetTypes(args []interface{}) error { return nil } -func (c *fakeConn) Exec(query string, args []interface{}) (driver.Result, error) { +func (c *fakeConn) Exec(query string, args []driver.Value) (driver.Result, error) { // This is an optional interface, but it's implemented here // just to check that all the args of of the proper types. // ErrSkip is returned so the caller acts as if we didn't @@ -379,7 +379,7 @@ func (s *fakeStmt) Close() error { var errClosed = errors.New("fakedb: statement has been closed") -func (s *fakeStmt) Exec(args []interface{}) (driver.Result, error) { +func (s *fakeStmt) Exec(args []driver.Value) (driver.Result, error) { if s.closed { return nil, errClosed } @@ -392,12 +392,12 @@ func (s *fakeStmt) Exec(args []interface{}) (driver.Result, error) { switch s.cmd { case "WIPE": db.wipe() - return driver.DDLSuccess, nil + return driver.ResultNoRows, nil case "CREATE": if err := db.createTable(s.table, s.colName, s.colType); err != nil { return nil, err } - return driver.DDLSuccess, nil + return driver.ResultNoRows, nil case "INSERT": return s.execInsert(args) } @@ -405,7 +405,7 @@ func (s *fakeStmt) Exec(args []interface{}) (driver.Result, error) { return nil, fmt.Errorf("unimplemented statement Exec command type of %q", s.cmd) } -func (s *fakeStmt) execInsert(args []interface{}) (driver.Result, error) { +func (s *fakeStmt) execInsert(args []driver.Value) (driver.Result, error) { db := s.c.db if len(args) != s.placeholders { panic("error in pkg db; should only get here if size is correct") @@ -441,7 +441,7 @@ func (s *fakeStmt) execInsert(args []interface{}) (driver.Result, error) { return driver.RowsAffected(1), nil } -func (s *fakeStmt) Query(args []interface{}) (driver.Rows, error) { +func (s *fakeStmt) Query(args []driver.Value) (driver.Rows, error) { if s.closed { return nil, errClosed } @@ -548,7 +548,7 @@ func (rc *rowsCursor) Columns() []string { return rc.cols } -func (rc *rowsCursor) Next(dest []interface{}) error { +func (rc *rowsCursor) Next(dest []driver.Value) error { if rc.closed { return errors.New("fakedb: cursor is closed") } diff --git a/libgo/go/database/sql/sql.go b/libgo/go/database/sql/sql.go index 436d4953ecd..62b551d89b5 100644 --- a/libgo/go/database/sql/sql.go +++ b/libgo/go/database/sql/sql.go @@ -35,7 +35,7 @@ func Register(name string, driver driver.Driver) { type RawBytes []byte // NullString represents a string that may be null. -// NullString implements the ScannerInto interface so +// NullString implements the Scanner interface so // it can be used as a scan destination: // // var s NullString @@ -52,8 +52,8 @@ type NullString struct { Valid bool // Valid is true if String is not NULL } -// ScanInto implements the ScannerInto interface. -func (ns *NullString) ScanInto(value interface{}) error { +// Scan implements the Scanner interface. +func (ns *NullString) Scan(value interface{}) error { if value == nil { ns.String, ns.Valid = "", false return nil @@ -62,8 +62,8 @@ func (ns *NullString) ScanInto(value interface{}) error { return convertAssign(&ns.String, value) } -// SubsetValue implements the driver SubsetValuer interface. -func (ns NullString) SubsetValue() (interface{}, error) { +// Value implements the driver Valuer interface. +func (ns NullString) Value() (driver.Value, error) { if !ns.Valid { return nil, nil } @@ -71,15 +71,15 @@ func (ns NullString) SubsetValue() (interface{}, error) { } // NullInt64 represents an int64 that may be null. -// NullInt64 implements the ScannerInto interface so +// NullInt64 implements the Scanner interface so // it can be used as a scan destination, similar to NullString. type NullInt64 struct { Int64 int64 Valid bool // Valid is true if Int64 is not NULL } -// ScanInto implements the ScannerInto interface. -func (n *NullInt64) ScanInto(value interface{}) error { +// Scan implements the Scanner interface. +func (n *NullInt64) Scan(value interface{}) error { if value == nil { n.Int64, n.Valid = 0, false return nil @@ -88,8 +88,8 @@ func (n *NullInt64) ScanInto(value interface{}) error { return convertAssign(&n.Int64, value) } -// SubsetValue implements the driver SubsetValuer interface. -func (n NullInt64) SubsetValue() (interface{}, error) { +// Value implements the driver Valuer interface. +func (n NullInt64) Value() (driver.Value, error) { if !n.Valid { return nil, nil } @@ -97,15 +97,15 @@ func (n NullInt64) SubsetValue() (interface{}, error) { } // NullFloat64 represents a float64 that may be null. -// NullFloat64 implements the ScannerInto interface so +// NullFloat64 implements the Scanner interface so // it can be used as a scan destination, similar to NullString. type NullFloat64 struct { Float64 float64 Valid bool // Valid is true if Float64 is not NULL } -// ScanInto implements the ScannerInto interface. -func (n *NullFloat64) ScanInto(value interface{}) error { +// Scan implements the Scanner interface. +func (n *NullFloat64) Scan(value interface{}) error { if value == nil { n.Float64, n.Valid = 0, false return nil @@ -114,8 +114,8 @@ func (n *NullFloat64) ScanInto(value interface{}) error { return convertAssign(&n.Float64, value) } -// SubsetValue implements the driver SubsetValuer interface. -func (n NullFloat64) SubsetValue() (interface{}, error) { +// Value implements the driver Valuer interface. +func (n NullFloat64) Value() (driver.Value, error) { if !n.Valid { return nil, nil } @@ -123,15 +123,15 @@ func (n NullFloat64) SubsetValue() (interface{}, error) { } // NullBool represents a bool that may be null. -// NullBool implements the ScannerInto interface so +// NullBool implements the Scanner interface so // it can be used as a scan destination, similar to NullString. type NullBool struct { Bool bool Valid bool // Valid is true if Bool is not NULL } -// ScanInto implements the ScannerInto interface. -func (n *NullBool) ScanInto(value interface{}) error { +// Scan implements the Scanner interface. +func (n *NullBool) Scan(value interface{}) error { if value == nil { n.Bool, n.Valid = false, false return nil @@ -140,30 +140,32 @@ func (n *NullBool) ScanInto(value interface{}) error { return convertAssign(&n.Bool, value) } -// SubsetValue implements the driver SubsetValuer interface. -func (n NullBool) SubsetValue() (interface{}, error) { +// Value implements the driver Valuer interface. +func (n NullBool) Value() (driver.Value, error) { if !n.Valid { return nil, nil } return n.Bool, nil } -// ScannerInto is an interface used by Scan. -type ScannerInto interface { - // ScanInto assigns a value from a database driver. +// Scanner is an interface used by Scan. +type Scanner interface { + // Scan assigns a value from a database driver. // - // The value will be of one of the following restricted + // The src value will be of one of the following restricted // set of types: // // int64 // float64 // bool // []byte + // string + // time.Time // nil - for NULL values // // An error should be returned if the value can not be stored // without loss of information. - ScanInto(value interface{}) error + Scan(src interface{}) error } // ErrNoRows is returned by Scan when QueryRow doesn't return a @@ -368,7 +370,7 @@ func (db *DB) Begin() (*Tx, error) { }, nil } -// DriverDatabase returns the database's underlying driver. +// Driver returns the database's underlying driver. func (db *DB) Driver() driver.Driver { return db.driver } @@ -378,7 +380,7 @@ func (db *DB) Driver() driver.Driver { // A transaction must end with a call to Commit or Rollback. // // After a call to Commit or Rollback, all operations on the -// transaction fail with ErrTransactionFinished. +// transaction fail with ErrTxDone. type Tx struct { db *DB @@ -393,11 +395,11 @@ type Tx struct { // done transitions from false to true exactly once, on Commit // or Rollback. once done, all operations fail with - // ErrTransactionFinished. + // ErrTxDone. done bool } -var ErrTransactionFinished = errors.New("sql: Transaction has already been committed or rolled back") +var ErrTxDone = errors.New("sql: Transaction has already been committed or rolled back") func (tx *Tx) close() { if tx.done { @@ -411,7 +413,7 @@ func (tx *Tx) close() { func (tx *Tx) grabConn() (driver.Conn, error) { if tx.done { - return nil, ErrTransactionFinished + return nil, ErrTxDone } tx.cimu.Lock() return tx.ci, nil @@ -424,7 +426,7 @@ func (tx *Tx) releaseConn() { // Commit commits the transaction. func (tx *Tx) Commit() error { if tx.done { - return ErrTransactionFinished + return ErrTxDone } defer tx.close() return tx.txi.Commit() @@ -433,7 +435,7 @@ func (tx *Tx) Commit() error { // Rollback aborts the transaction. func (tx *Tx) Rollback() error { if tx.done { - return ErrTransactionFinished + return ErrTxDone } defer tx.close() return tx.txi.Rollback() @@ -521,12 +523,19 @@ func (tx *Tx) Exec(query string, args ...interface{}) (Result, error) { } defer tx.releaseConn() + sargs, err := subsetTypeArgs(args) + if err != nil { + return nil, err + } + if execer, ok := ci.(driver.Execer); ok { - resi, err := execer.Exec(query, args) - if err != nil { + resi, err := execer.Exec(query, sargs) + if err == nil { + return result{resi}, nil + } + if err != driver.ErrSkip { return nil, err } - return result{resi}, nil } sti, err := ci.Prepare(query) @@ -535,11 +544,6 @@ func (tx *Tx) Exec(query string, args ...interface{}) (Result, error) { } defer sti.Close() - sargs, err := subsetTypeArgs(args) - if err != nil { - return nil, err - } - resi, err := sti.Exec(sargs) if err != nil { return nil, err @@ -550,7 +554,7 @@ func (tx *Tx) Exec(query string, args ...interface{}) (Result, error) { // Query executes a query that returns rows, typically a SELECT. func (tx *Tx) Query(query string, args ...interface{}) (*Rows, error) { if tx.done { - return nil, ErrTransactionFinished + return nil, ErrTxDone } stmt, err := tx.Prepare(query) if err != nil { @@ -614,19 +618,21 @@ func (s *Stmt) Exec(args ...interface{}) (Result, error) { return nil, fmt.Errorf("sql: expected %d arguments, got %d", want, len(args)) } + sargs := make([]driver.Value, len(args)) + // Convert args to subset types. if cc, ok := si.(driver.ColumnConverter); ok { for n, arg := range args { // First, see if the value itself knows how to convert // itself to a driver type. For example, a NullString // struct changing into a string or nil. - if svi, ok := arg.(driver.SubsetValuer); ok { - sv, err := svi.SubsetValue() + if svi, ok := arg.(driver.Valuer); ok { + sv, err := svi.Value() if err != nil { - return nil, fmt.Errorf("sql: argument index %d from SubsetValue: %v", n, err) + return nil, fmt.Errorf("sql: argument index %d from Value: %v", n, err) } - if !driver.IsParameterSubsetType(sv) { - return nil, fmt.Errorf("sql: argument index %d: non-subset type %T returned from SubsetValue", n, sv) + if !driver.IsValue(sv) { + return nil, fmt.Errorf("sql: argument index %d: non-subset type %T returned from Value", n, sv) } arg = sv } @@ -638,25 +644,25 @@ func (s *Stmt) Exec(args ...interface{}) (Result, error) { // truncated), or that a nil can't go into a NOT NULL // column before going across the network to get the // same error. - args[n], err = cc.ColumnConverter(n).ConvertValue(arg) + sargs[n], err = cc.ColumnConverter(n).ConvertValue(arg) if err != nil { return nil, fmt.Errorf("sql: converting Exec argument #%d's type: %v", n, err) } - if !driver.IsParameterSubsetType(args[n]) { + if !driver.IsValue(sargs[n]) { return nil, fmt.Errorf("sql: driver ColumnConverter error converted %T to unsupported type %T", - arg, args[n]) + arg, sargs[n]) } } } else { for n, arg := range args { - args[n], err = driver.DefaultParameterConverter.ConvertValue(arg) + sargs[n], err = driver.DefaultParameterConverter.ConvertValue(arg) if err != nil { return nil, fmt.Errorf("sql: converting Exec argument #%d's type: %v", n, err) } } } - resi, err := si.Exec(args) + resi, err := si.Exec(sargs) if err != nil { return nil, err } @@ -767,7 +773,7 @@ func (s *Stmt) Query(args ...interface{}) (*Rows, error) { // Example usage: // // var name string -// err := nameByUseridStmt.QueryRow(id).Scan(&s) +// err := nameByUseridStmt.QueryRow(id).Scan(&name) func (s *Stmt) QueryRow(args ...interface{}) *Row { rows, err := s.Query(args...) if err != nil { @@ -825,7 +831,7 @@ type Rows struct { rowsi driver.Rows closed bool - lastcols []interface{} + lastcols []driver.Value lasterr error closeStmt *Stmt // if non-nil, statement to Close on close } @@ -842,7 +848,7 @@ func (rs *Rows) Next() bool { return false } if rs.lastcols == nil { - rs.lastcols = make([]interface{}, len(rs.rowsi.Columns())) + rs.lastcols = make([]driver.Value, len(rs.rowsi.Columns())) } rs.lasterr = rs.rowsi.Next(rs.lastcols) if rs.lasterr == io.EOF { diff --git a/libgo/go/database/sql/sql_test.go b/libgo/go/database/sql/sql_test.go index c5cadad8499..c985a10beee 100644 --- a/libgo/go/database/sql/sql_test.go +++ b/libgo/go/database/sql/sql_test.go @@ -386,6 +386,38 @@ func TestNullByteSlice(t *testing.T) { } } +func TestPointerParamsAndScans(t *testing.T) { + db := newTestDB(t, "") + defer closeDB(t, db) + exec(t, db, "CREATE|t|id=int32,name=nullstring") + + bob := "bob" + var name *string + + name = &bob + exec(t, db, "INSERT|t|id=10,name=?", name) + name = nil + exec(t, db, "INSERT|t|id=20,name=?", name) + + err := db.QueryRow("SELECT|t|name|id=?", 10).Scan(&name) + if err != nil { + t.Fatalf("querying id 10: %v", err) + } + if name == nil { + t.Errorf("id 10's name = nil; want bob") + } else if *name != "bob" { + t.Errorf("id 10's name = %q; want bob", *name) + } + + err = db.QueryRow("SELECT|t|name|id=?", 20).Scan(&name) + if err != nil { + t.Fatalf("querying id 20: %v", err) + } + if name != nil { + t.Errorf("id 20 = %q; want nil", *name) + } +} + func TestQueryRowClosingStmt(t *testing.T) { db := newTestDB(t, "people") defer closeDB(t, db) diff --git a/libgo/go/debug/dwarf/buf.go b/libgo/go/debug/dwarf/buf.go index 6dc28d2568c..08e37be4b38 100644 --- a/libgo/go/debug/dwarf/buf.go +++ b/libgo/go/debug/dwarf/buf.go @@ -13,17 +13,17 @@ import ( // Data buffer being decoded. type buf struct { - dwarf *Data - order binary.ByteOrder - name string - off Offset - data []byte - addrsize int - err error + dwarf *Data + u *unit + order binary.ByteOrder + name string + off Offset + data []byte + err error } -func makeBuf(d *Data, name string, off Offset, data []byte, addrsize int) buf { - return buf{d, d.order, name, off, data, addrsize, nil} +func makeBuf(d *Data, u *unit, name string, off Offset, data []byte) buf { + return buf{d, u, d.order, name, off, data, nil} } func (b *buf) uint8() uint8 { @@ -121,15 +121,17 @@ func (b *buf) int() int64 { // Address-sized uint. func (b *buf) addr() uint64 { - switch b.addrsize { - case 1: - return uint64(b.uint8()) - case 2: - return uint64(b.uint16()) - case 4: - return uint64(b.uint32()) - case 8: - return uint64(b.uint64()) + if b.u != nil { + switch b.u.addrsize { + case 1: + return uint64(b.uint8()) + case 2: + return uint64(b.uint16()) + case 4: + return uint64(b.uint32()) + case 8: + return uint64(b.uint64()) + } } b.error("unknown address size") return 0 diff --git a/libgo/go/debug/dwarf/const.go b/libgo/go/debug/dwarf/const.go index 918b153d078..ebe9a71a0c5 100644 --- a/libgo/go/debug/dwarf/const.go +++ b/libgo/go/debug/dwarf/const.go @@ -207,6 +207,11 @@ const ( formRef8 format = 0x14 formRefUdata format = 0x15 formIndirect format = 0x16 + // following are defined in DWARF 4 + formSecOffset format = 0x17 + formExprLoc format = 0x18 + formFlagPresent format = 0x19 + formRefSig8 format = 0x20 ) // A Tag is the classification (the type) of an Entry. @@ -431,3 +436,30 @@ const ( encUnsignedChar = 0x08 encImaginaryFloat = 0x09 ) + +// Line number opcodes. +const ( + LineExtendedOp = 0 + LineCopy = 1 + LineAdvancePC = 2 + LineAdvanceLine = 3 + LineSetFile = 4 + LineSetColumn = 5 + LineNegateStmt = 6 + LineSetBasicBlock = 7 + LineConstAddPC = 8 + LineFixedAdvancePC = 9 + // next 3 are DWARF 3 + LineSetPrologueEnd = 10 + LineSetEpilogueBegin = 11 + LineSetISA = 12 +) + +// Line number extended opcodes. +const ( + LineExtEndSequence = 1 + LineExtSetAddress = 2 + LineExtDefineFile = 3 + // next 1 is DWARF 4 + LineExtSetDiscriminator = 4 +) diff --git a/libgo/go/debug/dwarf/entry.go b/libgo/go/debug/dwarf/entry.go index 2885d8fa26c..4761d74cd79 100644 --- a/libgo/go/debug/dwarf/entry.go +++ b/libgo/go/debug/dwarf/entry.go @@ -40,7 +40,7 @@ func (d *Data) parseAbbrev(off uint32) (abbrevTable, error) { } else { data = data[off:] } - b := makeBuf(d, "abbrev", 0, data, 0) + b := makeBuf(d, nil, "abbrev", 0, data) // Error handling is simplified by the buf getters // returning an endless stream of 0s after an error. @@ -182,13 +182,37 @@ func (b *buf) entry(atab abbrevTable, ubase Offset) *Entry { case formUdata: val = int64(b.uint()) + // exprloc + case formExprLoc: + val = b.bytes(int(b.uint())) + // flag case formFlag: val = b.uint8() == 1 + case formFlagPresent: + val = true + + // lineptr, loclistptr, macptr, rangelistptr + case formSecOffset: + if b.u == nil { + b.error("unknown size for DW_FORM_sec_offset") + } else if b.u.dwarf64 { + val = Offset(b.uint64()) + } else { + val = Offset(b.uint32()) + } // reference to other entry case formRefAddr: - val = Offset(b.addr()) + if b.u == nil { + b.error("unknown version for DW_FORM_ref_addr") + } else if b.u.version == 2 { + val = Offset(b.addr()) + } else if b.u.dwarf64 { + val = Offset(b.uint64()) + } else { + val = Offset(b.uint32()) + } case formRef1: val = Offset(b.uint8()) + ubase case formRef2: @@ -199,6 +223,8 @@ func (b *buf) entry(atab abbrevTable, ubase Offset) *Entry { val = Offset(b.uint64()) + ubase case formRefUdata: val = Offset(b.uint()) + ubase + case formRefSig8: + val = b.uint64() // string case formString: @@ -208,7 +234,7 @@ func (b *buf) entry(atab abbrevTable, ubase Offset) *Entry { if b.err != nil { return nil } - b1 := makeBuf(b.dwarf, "str", 0, b.dwarf.str, 0) + b1 := makeBuf(b.dwarf, b.u, "str", 0, b.dwarf.str) b1.skip(int(off)) val = b1.string() if b1.err != nil { @@ -246,6 +272,15 @@ func (d *Data) Reader() *Reader { return r } +// unitReader returns a new reader starting at a specific unit. +func (d *Data) unitReader(i int) *Reader { + r := &Reader{d: d} + r.unit = i + u := &d.unit[i] + r.b = makeBuf(d, u, "info", u.off, u.data) + return r +} + // Seek positions the Reader at offset off in the encoded entry stream. // Offset 0 can be used to denote the first entry. func (r *Reader) Seek(off Offset) { @@ -258,7 +293,7 @@ func (r *Reader) Seek(off Offset) { } u := &d.unit[0] r.unit = 0 - r.b = makeBuf(r.d, "info", u.off, u.data, u.addrsize) + r.b = makeBuf(r.d, u, "info", u.off, u.data) return } @@ -269,7 +304,7 @@ func (r *Reader) Seek(off Offset) { u = &d.unit[i] if u.off <= off && off < u.off+Offset(len(u.data)) { r.unit = i - r.b = makeBuf(r.d, "info", off, u.data[off-u.off:], u.addrsize) + r.b = makeBuf(r.d, u, "info", off, u.data[off-u.off:]) return } } @@ -281,7 +316,7 @@ func (r *Reader) maybeNextUnit() { for len(r.b.data) == 0 && r.unit+1 < len(r.d.unit) { r.unit++ u := &r.d.unit[r.unit] - r.b = makeBuf(r.d, "info", u.off, u.data, u.addrsize) + r.b = makeBuf(r.d, u, "info", u.off, u.data) } } diff --git a/libgo/go/debug/dwarf/line.go b/libgo/go/debug/dwarf/line.go new file mode 100644 index 00000000000..f9c77cc87e4 --- /dev/null +++ b/libgo/go/debug/dwarf/line.go @@ -0,0 +1,435 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// DWARF line number information. + +package dwarf + +import ( + "errors" + "path/filepath" + "sort" + "strconv" +) + +// A Line holds all the available information about the source code +// corresponding to a specific program counter address. +type Line struct { + Filename string // source file name + OpIndex int // index of operation in VLIW instruction + Line int // line number + Column int // column number + ISA int // instruction set code + Discriminator int // block discriminator + Stmt bool // instruction starts statement + Block bool // instruction starts basic block + EndPrologue bool // instruction ends function prologue + BeginEpilogue bool // instruction begins function epilogue +} + +// LineForPc returns the line number information for a program counter +// address, if any. When this returns multiple Line structures in a +// context where only one can be used, the last one is the best. +func (d *Data) LineForPC(pc uint64) ([]*Line, error) { + for i := range d.unit { + u := &d.unit[i] + if u.pc == nil { + if err := d.readUnitLine(i, u); err != nil { + return nil, err + } + } + for _, ar := range u.pc { + if pc >= ar.low && pc < ar.high { + return d.findLine(u, pc) + } + } + } + return nil, nil +} + +// readUnitLine reads in the line number information for a compilation +// unit. +func (d *Data) readUnitLine(i int, u *unit) error { + r := d.unitReader(i) + setLineOff := false + for { + e, err := r.Next() + if err != nil { + return err + } + if e == nil { + break + } + if r.unit != i { + break + } + switch e.Tag { + case TagCompileUnit, TagSubprogram, TagEntryPoint, TagInlinedSubroutine: + low, lowok := e.Val(AttrLowpc).(uint64) + high, highok := e.Val(AttrHighpc).(uint64) + if lowok && highok { + u.pc = append(u.pc, addrRange{low, high}) + } else if f, ok := e.Val(AttrRanges).(Offset); ok { + // TODO: Handle AttrRanges and .debug_ranges. + _ = f + } + val := e.Val(AttrStmtList) + if val != nil { + if off, ok := val.(int64); ok { + u.lineoff = Offset(off) + setLineOff = true + } else if off, ok := val.(Offset); ok { + u.lineoff = off + setLineOff = true + } else { + return errors.New("unrecognized format for DW_ATTR_stmt_list") + } + } + if dir, ok := e.Val(AttrCompDir).(string); ok { + u.dir = dir + } + } + } + if !setLineOff { + u.lineoff = Offset(0) + u.lineoff-- + } + return nil +} + +// findLine finds the line information for a PC value, given the unit +// containing the information. +func (d *Data) findLine(u *unit, pc uint64) ([]*Line, error) { + if u.lines == nil { + if err := d.parseLine(u); err != nil { + return nil, err + } + } + + for _, ln := range u.lines { + if pc < ln.addrs[0].pc || pc > ln.addrs[len(ln.addrs)-1].pc { + continue + } + i := sort.Search(len(ln.addrs), + func(i int) bool { return ln.addrs[i].pc > pc }) + i-- + p := new(Line) + *p = ln.line + p.Line = ln.addrs[i].line + ret := []*Line{p} + for i++; i < len(ln.addrs) && ln.addrs[i].pc == pc; i++ { + p = new(Line) + *p = ln.line + p.Line = ln.addrs[i].line + ret = append(ret, p) + } + return ret, nil + } + + return nil, nil +} + +// FileLine returns the file name and line number for a program +// counter address, or "", 0 if unknown. +func (d *Data) FileLine(pc uint64) (string, int, error) { + r, err := d.LineForPC(pc) + if err != nil { + return "", 0, err + } + if r == nil { + return "", 0, nil + } + ln := r[len(r)-1] + return ln.Filename, ln.Line, nil +} + +// A mapLineInfo holds the PC values and line numbers associated with +// a single Line structure. This representation is chosen to reduce +// memory usage based on typical debug info. +type mapLineInfo struct { + line Line // line.Line will be zero + addrs lineAddrs // sorted by PC +} + +// A list of lines. This will be sorted by PC. +type lineAddrs []oneLineInfo + +func (p lineAddrs) Len() int { return len(p) } +func (p lineAddrs) Less(i, j int) bool { return p[i].pc < p[j].pc } +func (p lineAddrs) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +// A oneLineInfo is a single PC and line number. +type oneLineInfo struct { + pc uint64 + line int +} + +// A lineHdr holds the relevant information from a line number +// program header. +type lineHdr struct { + version uint16 // version of line number encoding + minInsnLen uint8 // minimum instruction length + maxOpsPerInsn uint8 // maximum number of ops per instruction + defStmt bool // initial value of stmt register + lineBase int8 // line adjustment base + lineRange uint8 // line adjustment step + opBase uint8 // base of special opcode values + opLen []uint8 // lengths of standard opcodes + dirs []string // directories + files []string // file names +} + +// parseLine parses the line number information for a compilation unit +func (d *Data) parseLine(u *unit) error { + if u.lineoff+1 == 0 { + return errors.New("unknown line offset") + } + b := makeBuf(d, u, "line", u.lineoff, d.line[u.lineoff:]) + len := uint64(b.uint32()) + dwarf64 := false + if len == 0xffffffff { + len = b.uint64() + dwarf64 = true + } + end := b.off + Offset(len) + hdr := d.parseLineHdr(u, &b, dwarf64) + if b.err == nil { + d.parseLineProgram(u, &b, hdr, end) + } + return b.err +} + +// parseLineHdr parses a line number program header. +func (d *Data) parseLineHdr(u *unit, b *buf, dwarf64 bool) (hdr lineHdr) { + hdr.version = b.uint16() + if hdr.version < 2 || hdr.version > 4 { + b.error("unsupported DWARF version " + strconv.Itoa(int(hdr.version))) + return + } + + var hlen Offset + if dwarf64 { + hlen = Offset(b.uint64()) + } else { + hlen = Offset(b.uint32()) + } + end := b.off + hlen + + hdr.minInsnLen = b.uint8() + if hdr.version < 4 { + hdr.maxOpsPerInsn = 1 + } else { + hdr.maxOpsPerInsn = b.uint8() + } + + if b.uint8() == 0 { + hdr.defStmt = false + } else { + hdr.defStmt = true + } + hdr.lineBase = int8(b.uint8()) + hdr.lineRange = b.uint8() + hdr.opBase = b.uint8() + hdr.opLen = b.bytes(int(hdr.opBase - 1)) + + for d := b.string(); len(d) > 0; d = b.string() { + hdr.dirs = append(hdr.dirs, d) + } + + for f := b.string(); len(f) > 0; f = b.string() { + d := b.uint() + if !filepath.IsAbs(f) { + if d > 0 { + if d > uint64(len(hdr.dirs)) { + b.error("DWARF directory index out of range") + return + } + f = filepath.Join(hdr.dirs[d-1], f) + } else if u.dir != "" { + f = filepath.Join(u.dir, f) + } + } + b.uint() // file's last mtime + b.uint() // file length + hdr.files = append(hdr.files, f) + } + + if end > b.off { + b.bytes(int(end - b.off)) + } + + return +} + +// parseLineProgram parses a line program, adding information to +// d.lineInfo as it goes. +func (d *Data) parseLineProgram(u *unit, b *buf, hdr lineHdr, end Offset) { + address := uint64(0) + line := 1 + resetLineInfo := Line{ + Filename: "", + OpIndex: 0, + Line: 0, + Column: 0, + ISA: 0, + Discriminator: 0, + Stmt: hdr.defStmt, + Block: false, + EndPrologue: false, + BeginEpilogue: false, + } + if len(hdr.files) > 0 { + resetLineInfo.Filename = hdr.files[0] + } + lineInfo := resetLineInfo + + var lines []mapLineInfo + + minInsnLen := uint64(hdr.minInsnLen) + maxOpsPerInsn := uint64(hdr.maxOpsPerInsn) + lineBase := int(hdr.lineBase) + lineRange := hdr.lineRange + newLineInfo := true + for b.off < end && b.err == nil { + op := b.uint8() + if op >= hdr.opBase { + // This is a special opcode. + op -= hdr.opBase + advance := uint64(op / hdr.lineRange) + opIndex := uint64(lineInfo.OpIndex) + address += minInsnLen * ((opIndex + advance) / maxOpsPerInsn) + newOpIndex := int((opIndex + advance) % maxOpsPerInsn) + line += lineBase + int(op%lineRange) + if newOpIndex != lineInfo.OpIndex { + lineInfo.OpIndex = newOpIndex + newLineInfo = true + } + lines, lineInfo, newLineInfo = d.addLine(lines, lineInfo, address, line, newLineInfo) + } else if op == LineExtendedOp { + c := b.uint() + op = b.uint8() + switch op { + case LineExtEndSequence: + u.lines = append(u.lines, lines...) + lineInfo = resetLineInfo + lines = nil + newLineInfo = true + case LineExtSetAddress: + address = b.addr() + case LineExtDefineFile: + f := b.string() + d := b.uint() + b.uint() // mtime + b.uint() // length + if d > 0 && !filepath.IsAbs(f) { + if d >= uint64(len(hdr.dirs)) { + b.error("DWARF directory index out of range") + return + } + f = filepath.Join(hdr.dirs[d-1], f) + } + hdr.files = append(hdr.files, f) + case LineExtSetDiscriminator: + lineInfo.Discriminator = int(b.uint()) + newLineInfo = true + default: + if c > 0 { + b.bytes(int(c) - 1) + } + } + } else { + switch op { + case LineCopy: + lines, lineInfo, newLineInfo = d.addLine(lines, lineInfo, address, line, newLineInfo) + case LineAdvancePC: + advance := b.uint() + opIndex := uint64(lineInfo.OpIndex) + address += minInsnLen * ((opIndex + advance) / maxOpsPerInsn) + newOpIndex := int((opIndex + advance) % maxOpsPerInsn) + if newOpIndex != lineInfo.OpIndex { + lineInfo.OpIndex = newOpIndex + newLineInfo = true + } + case LineAdvanceLine: + line += int(b.int()) + case LineSetFile: + i := b.uint() + if i > uint64(len(hdr.files)) { + b.error("DWARF file number out of range") + return + } + lineInfo.Filename = hdr.files[i] + newLineInfo = true + case LineSetColumn: + lineInfo.Column = int(b.uint()) + newLineInfo = true + case LineNegateStmt: + lineInfo.Stmt = !lineInfo.Stmt + newLineInfo = true + case LineSetBasicBlock: + lineInfo.Block = true + newLineInfo = true + case LineConstAddPC: + op = 255 - hdr.opBase + advance := uint64(op / hdr.lineRange) + opIndex := uint64(lineInfo.OpIndex) + address += minInsnLen * ((opIndex + advance) / maxOpsPerInsn) + newOpIndex := int((opIndex + advance) % maxOpsPerInsn) + if newOpIndex != lineInfo.OpIndex { + lineInfo.OpIndex = newOpIndex + newLineInfo = true + } + case LineFixedAdvancePC: + address += uint64(b.uint16()) + if lineInfo.OpIndex != 0 { + lineInfo.OpIndex = 0 + newLineInfo = true + } + case LineSetPrologueEnd: + lineInfo.EndPrologue = true + newLineInfo = true + case LineSetEpilogueBegin: + lineInfo.BeginEpilogue = true + newLineInfo = true + case LineSetISA: + lineInfo.ISA = int(b.uint()) + newLineInfo = true + default: + if int(op) >= len(hdr.opLen) { + b.error("DWARF line opcode has unknown length") + return + } + for i := hdr.opLen[op-1]; i > 0; i-- { + b.int() + } + } + } + } +} + +// addLine adds the current address and line to lines using lineInfo. +// If newLineInfo is true this is a new lineInfo. This returns the +// updated lines, lineInfo, and newLineInfo. +func (d *Data) addLine(lines []mapLineInfo, lineInfo Line, address uint64, line int, newLineInfo bool) ([]mapLineInfo, Line, bool) { + if newLineInfo { + if len(lines) > 0 { + sort.Sort(lines[len(lines)-1].addrs) + } + lines = append(lines, mapLineInfo{line: lineInfo}) + } + p := &lines[len(lines)-1] + p.addrs = append(p.addrs, oneLineInfo{address, line}) + + if lineInfo.Block || lineInfo.EndPrologue || lineInfo.BeginEpilogue || lineInfo.Discriminator != 0 { + lineInfo.Block = false + lineInfo.EndPrologue = false + lineInfo.BeginEpilogue = false + lineInfo.Discriminator = 0 + newLineInfo = true + } else { + newLineInfo = false + } + + return lines, lineInfo, newLineInfo +} diff --git a/libgo/go/debug/dwarf/line_test.go b/libgo/go/debug/dwarf/line_test.go new file mode 100644 index 00000000000..2476a6faf53 --- /dev/null +++ b/libgo/go/debug/dwarf/line_test.go @@ -0,0 +1,53 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package dwarf_test + +import ( + . "debug/dwarf" + "path/filepath" + "testing" +) + +type lineTest struct { + pc uint64 + file string + line int +} + +var elfLineTests = [...]lineTest{ + {0x4004c4, "typedef.c", 83}, + {0x4004c8, "typedef.c", 84}, + {0x4004ca, "typedef.c", 84}, + {0x4003e0, "", 0}, +} + +var machoLineTests = [...]lineTest{ + {0x0, "typedef.c", 83}, +} + +func TestLineElf(t *testing.T) { + testLine(t, elfData(t, "testdata/typedef.elf"), elfLineTests[:], "elf") +} + +func TestLineMachO(t *testing.T) { + testLine(t, machoData(t, "testdata/typedef.macho"), machoLineTests[:], "macho") +} + +func testLine(t *testing.T, d *Data, tests []lineTest, kind string) { + for _, v := range tests { + file, line, err := d.FileLine(v.pc) + if err != nil { + t.Errorf("%s: %v", kind, err) + continue + } + if file != "" { + file = filepath.Base(file) + } + if file != v.file || line != v.line { + t.Errorf("%s: for %d have %q:%d want %q:%d", + kind, v.pc, file, line, v.file, v.line) + } + } +} diff --git a/libgo/go/debug/dwarf/open.go b/libgo/go/debug/dwarf/open.go index 9543297e189..75798925296 100644 --- a/libgo/go/debug/dwarf/open.go +++ b/libgo/go/debug/dwarf/open.go @@ -24,15 +24,15 @@ type Data struct { // parsed data abbrevCache map[uint32]abbrevTable - addrsize int order binary.ByteOrder typeCache map[Offset]Type unit []unit } // New returns a new Data object initialized from the given parameters. -// Clients should typically use [TODO(rsc): method to be named later] instead of calling -// New directly. +// Rather than calling this function directly, clients should typically use +// the DWARF method of the File type of the appropriate package debug/elf, +// debug/macho, or debug/pe. // // The []byte arguments are the data from the corresponding debug section // in the object file; for example, for an ELF object, abbrev is the contents of diff --git a/libgo/go/debug/dwarf/testdata/typedef.c b/libgo/go/debug/dwarf/testdata/typedef.c index 664d021ced5..f05f01564ff 100644 --- a/libgo/go/debug/dwarf/testdata/typedef.c +++ b/libgo/go/debug/dwarf/testdata/typedef.c @@ -28,8 +28,13 @@ typedef struct my_struct { volatile int vi; char x : 1; int y : 4; + int z[0]; long long array[40]; + int zz[0]; } t_my_struct; +typedef struct my_struct1 { + int zz [1]; +} t_my_struct1; typedef union my_union { volatile int vi; char x : 1; @@ -65,7 +70,8 @@ t_func_void_of_char *a9; t_func_void_of_void *a10; t_func_void_of_ptr_char_dots *a11; t_my_struct *a12; -t_my_union *a12a; +t_my_struct1 *a12a; +t_my_union *a12b; t_my_enum *a13; t_my_list *a14; t_my_tree *a15; diff --git a/libgo/go/debug/dwarf/testdata/typedef.elf b/libgo/go/debug/dwarf/testdata/typedef.elf Binary files differindex 44df8da9bc7..b2062d2c4bb 100755 --- a/libgo/go/debug/dwarf/testdata/typedef.elf +++ b/libgo/go/debug/dwarf/testdata/typedef.elf diff --git a/libgo/go/debug/dwarf/testdata/typedef.macho b/libgo/go/debug/dwarf/testdata/typedef.macho Binary files differindex 41019c1e146..f75afcccbfc 100644 --- a/libgo/go/debug/dwarf/testdata/typedef.macho +++ b/libgo/go/debug/dwarf/testdata/typedef.macho diff --git a/libgo/go/debug/dwarf/type.go b/libgo/go/debug/dwarf/type.go index 9be66658fe9..2ef8ca01bf8 100644 --- a/libgo/go/debug/dwarf/type.go +++ b/libgo/go/debug/dwarf/type.go @@ -426,6 +426,8 @@ func (d *Data) Type(off Offset) (Type, error) { t.StructName, _ = e.Val(AttrName).(string) t.Incomplete = e.Val(AttrDeclaration) != nil t.Field = make([]*StructField, 0, 8) + var lastFieldType Type + var lastFieldBitOffset int64 for kid := next(); kid != nil; kid = next() { if kid.Tag == TagMember { f := new(StructField) @@ -433,7 +435,7 @@ func (d *Data) Type(off Offset) (Type, error) { goto Error } if loc, ok := kid.Val(AttrDataMemberLoc).([]byte); ok { - b := makeBuf(d, "location", 0, loc, d.addrsize) + b := makeBuf(d, nil, "location", 0, loc) if b.uint8() != opPlusUconst { err = DecodeError{"info", kid.Offset, "unexpected opcode"} goto Error @@ -444,11 +446,32 @@ func (d *Data) Type(off Offset) (Type, error) { goto Error } } + + haveBitOffset := false f.Name, _ = kid.Val(AttrName).(string) f.ByteSize, _ = kid.Val(AttrByteSize).(int64) - f.BitOffset, _ = kid.Val(AttrBitOffset).(int64) + f.BitOffset, haveBitOffset = kid.Val(AttrBitOffset).(int64) f.BitSize, _ = kid.Val(AttrBitSize).(int64) t.Field = append(t.Field, f) + + bito := f.BitOffset + if !haveBitOffset { + bito = f.ByteOffset * 8 + } + if bito == lastFieldBitOffset && t.Kind != "union" { + // Last field was zero width. Fix array length. + // (DWARF writes out 0-length arrays as if they were 1-length arrays.) + zeroArray(lastFieldType) + } + lastFieldType = f.Type + lastFieldBitOffset = bito + } + } + if t.Kind != "union" { + b, ok := e.Val(AttrByteSize).(int64) + if ok && b*8 == lastFieldBitOffset { + // Final field must be zero width. Fix array length. + zeroArray(lastFieldType) } } @@ -579,3 +602,14 @@ Error: delete(d.typeCache, off) return nil, err } + +func zeroArray(t Type) { + for { + at, ok := t.(*ArrayType) + if !ok { + break + } + at.Count = 0 + t = at.Type + } +} diff --git a/libgo/go/debug/dwarf/type_test.go b/libgo/go/debug/dwarf/type_test.go index b9470a4fcb4..b5b255f6f4a 100644 --- a/libgo/go/debug/dwarf/type_test.go +++ b/libgo/go/debug/dwarf/type_test.go @@ -25,13 +25,22 @@ var typedefTests = map[string]string{ "t_func_void_of_char": "func(char) void", "t_func_void_of_void": "func() void", "t_func_void_of_ptr_char_dots": "func(*char, ...) void", - "t_my_struct": "struct my_struct {vi volatile int@0; x char@4 : 1@7; y int@4 : 4@27; array [40]long long int@8}", + "t_my_struct": "struct my_struct {vi volatile int@0; x char@4 : 1@7; y int@4 : 4@27; z [0]int@8; array [40]long long int@8; zz [0]int@328}", + "t_my_struct1": "struct my_struct1 {zz [1]int@0}", "t_my_union": "union my_union {vi volatile int@0; x char@0 : 1@7; y int@0 : 4@28; array [40]long long int@0}", "t_my_enum": "enum my_enum {e1=1; e2=2; e3=-5; e4=1000000000000000}", "t_my_list": "struct list {val short int@0; next *t_my_list@8}", "t_my_tree": "struct tree {left *struct tree@0; right *struct tree@8; val long long unsigned int@16}", } +// As Apple converts gcc to a clang-based front end +// they keep breaking the DWARF output. This map lists the +// conversion from real answer to Apple answer. +var machoBug = map[string]string{ + "func(*char, ...) void": "func(*char) void", + "enum my_enum {e1=1; e2=2; e3=-5; e4=1000000000000000}": "enum my_enum {e1=1; e2=2; e3=-5; e4=-1530494976}", +} + func elfData(t *testing.T, name string) *Data { f, err := elf.Open(name) if err != nil { @@ -58,13 +67,13 @@ func machoData(t *testing.T, name string) *Data { return d } -func TestTypedefsELF(t *testing.T) { testTypedefs(t, elfData(t, "testdata/typedef.elf")) } +func TestTypedefsELF(t *testing.T) { testTypedefs(t, elfData(t, "testdata/typedef.elf"), "elf") } func TestTypedefsMachO(t *testing.T) { - testTypedefs(t, machoData(t, "testdata/typedef.macho")) + testTypedefs(t, machoData(t, "testdata/typedef.macho"), "macho") } -func testTypedefs(t *testing.T, d *Data) { +func testTypedefs(t *testing.T, d *Data, kind string) { r := d.Reader() seen := make(map[string]bool) for { @@ -93,7 +102,7 @@ func testTypedefs(t *testing.T, d *Data) { t.Errorf("multiple definitions for %s", t1.Name) } seen[t1.Name] = true - if typstr != want { + if typstr != want && (kind != "macho" || typstr != machoBug[want]) { t.Errorf("%s:\n\thave %s\n\twant %s", t1.Name, typstr, want) } } diff --git a/libgo/go/debug/dwarf/unit.go b/libgo/go/debug/dwarf/unit.go index c10d75dbdc9..b1903208715 100644 --- a/libgo/go/debug/dwarf/unit.go +++ b/libgo/go/debug/dwarf/unit.go @@ -12,17 +12,38 @@ import "strconv" type unit struct { base Offset // byte offset of header within the aggregate info off Offset // byte offset of data within the aggregate info + lineoff Offset // byte offset of data within the line info data []byte atable abbrevTable addrsize int + version int + dwarf64 bool // True for 64-bit DWARF format + dir string + pc []addrRange // PC ranges in this compilation unit + lines []mapLineInfo // PC -> line mapping +} + +// A range is an address range. +type addrRange struct { + low uint64 + high uint64 } func (d *Data) parseUnits() ([]unit, error) { // Count units. nunit := 0 - b := makeBuf(d, "info", 0, d.info, 0) + b := makeBuf(d, nil, "info", 0, d.info) for len(b.data) > 0 { - b.skip(int(b.uint32())) + len := b.uint32() + if len == 0xffffffff { + len64 := b.uint64() + if len64 != uint64(int(len64)) { + b.error("unit length overflow") + break + } + len = uint32(len64) + } + b.skip(int(len)) nunit++ } if b.err != nil { @@ -30,13 +51,18 @@ func (d *Data) parseUnits() ([]unit, error) { } // Again, this time writing them down. - b = makeBuf(d, "info", 0, d.info, 0) + b = makeBuf(d, nil, "info", 0, d.info) units := make([]unit, nunit) for i := range units { u := &units[i] u.base = b.off n := b.uint32() - if vers := b.uint16(); vers != 2 { + if n == 0xffffffff { + u.dwarf64 = true + n = uint32(b.uint64()) + } + vers := b.uint16() + if vers < 2 || vers > 4 { b.error("unsupported DWARF version " + strconv.Itoa(int(vers))) break } @@ -47,6 +73,7 @@ func (d *Data) parseUnits() ([]unit, error) { } break } + u.version = int(vers) u.atable = atable u.addrsize = int(b.uint8()) u.off = b.off diff --git a/libgo/go/debug/elf/elf_test.go b/libgo/go/debug/elf/elf_test.go index 67b961b5c6c..b8cdbcc7e51 100644 --- a/libgo/go/debug/elf/elf_test.go +++ b/libgo/go/debug/elf/elf_test.go @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package elf +package elf_test import ( + . "debug/elf" "fmt" "testing" ) diff --git a/libgo/go/debug/elf/file.go b/libgo/go/debug/elf/file.go index 184ca8375b5..c2c03d2c647 100644 --- a/libgo/go/debug/elf/file.go +++ b/libgo/go/debug/elf/file.go @@ -563,7 +563,7 @@ func (f *File) DWARF() (*dwarf.Data, error) { // There are many other DWARF sections, but these // are the required ones, and the debug/dwarf package // does not use the others, so don't bother loading them. - var names = [...]string{"abbrev", "info", "str"} + var names = [...]string{"abbrev", "info", "line", "str"} var dat [len(names)][]byte for i, name := range names { name = ".debug_" + name @@ -592,8 +592,8 @@ func (f *File) DWARF() (*dwarf.Data, error) { } } - abbrev, info, str := dat[0], dat[1], dat[2] - return dwarf.New(abbrev, nil, nil, info, nil, nil, nil, str) + abbrev, info, line, str := dat[0], dat[1], dat[2], dat[3] + return dwarf.New(abbrev, nil, nil, info, line, nil, nil, str) } // Symbols returns the symbol table for f. diff --git a/libgo/go/debug/elf/file_test.go b/libgo/go/debug/elf/file_test.go index 98f2723c86e..105b697a4fb 100644 --- a/libgo/go/debug/elf/file_test.go +++ b/libgo/go/debug/elf/file_test.go @@ -2,10 +2,11 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package elf +package elf_test import ( "debug/dwarf" + . "debug/elf" "encoding/binary" "net" "os" diff --git a/libgo/go/debug/elf/runtime.go b/libgo/go/debug/elf/runtime.go new file mode 100644 index 00000000000..17cb6fbc99e --- /dev/null +++ b/libgo/go/debug/elf/runtime.go @@ -0,0 +1,161 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This is gccgo-specific code that uses DWARF information to fetch +// file/line information for PC values. This package registers itself +// with the runtime package. + +package elf + +import ( + "debug/dwarf" + "debug/macho" + "os" + "runtime" + "sort" + "sync" +) + +func init() { + // Register our lookup functions with the runtime package. + runtime.RegisterDebugLookup(funcFileLine, symbolValue) +} + +// The file struct holds information for a specific file that is part +// of the execution. +type file struct { + elf *File // If ELF + macho *macho.File // If Mach-O + dwarf *dwarf.Data // DWARF information + + symsByName []sym // Sorted by name + symsByAddr []sym // Sorted by address +} + +// Sort symbols by name. +type symsByName []sym + +func (s symsByName) Len() int { return len(s) } +func (s symsByName) Less(i, j int) bool { return s[i].name < s[j].name } +func (s symsByName) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// Sort symbols by address. +type symsByAddr []sym + +func (s symsByAddr) Len() int { return len(s) } +func (s symsByAddr) Less(i, j int) bool { return s[i].addr < s[j].addr } +func (s symsByAddr) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// The sym structure holds the information we care about for a symbol, +// namely name and address. +type sym struct { + name string + addr uintptr +} + +// Open an input file. +func open(name string) (*file, error) { + efile, err := Open(name) + var mfile *macho.File + if err != nil { + var merr error + mfile, merr = macho.Open(name) + if merr != nil { + return nil, err + } + } + + r := &file{elf: efile, macho: mfile} + + if efile != nil { + r.dwarf, err = efile.DWARF() + } else { + r.dwarf, err = mfile.DWARF() + } + if err != nil { + return nil, err + } + + var syms []sym + if efile != nil { + esyms, err := efile.Symbols() + if err != nil { + return nil, err + } + syms = make([]sym, 0, len(esyms)) + for _, s := range esyms { + if ST_TYPE(s.Info) == STT_FUNC { + syms = append(syms, sym{s.Name, uintptr(s.Value)}) + } + } + } else { + syms = make([]sym, 0, len(mfile.Symtab.Syms)) + for _, s := range mfile.Symtab.Syms { + syms = append(syms, sym{s.Name, uintptr(s.Value)}) + } + } + + r.symsByName = make([]sym, len(syms)) + copy(r.symsByName, syms) + sort.Sort(symsByName(r.symsByName)) + + r.symsByAddr = syms + sort.Sort(symsByAddr(r.symsByAddr)) + + return r, nil +} + +// The main executable +var executable *file + +// Only open the executable once. +var executableOnce sync.Once + +func openExecutable() { + executableOnce.Do(func() { + f, err := open("/proc/self/exe") + if err != nil { + f, err = open(os.Args[0]) + if err != nil { + return + } + } + executable = f + }) +} + +// The funcFileLine function looks up the function name, file name, +// and line number for a PC value. +func funcFileLine(pc uintptr, function *string, file *string, line *int) bool { + openExecutable() + if executable == nil || executable.dwarf == nil { + return false + } + f, ln, err := executable.dwarf.FileLine(uint64(pc)) + if err != nil { + return false + } + *file = f + *line = ln + + *function = "" + if len(executable.symsByAddr) > 0 && pc >= executable.symsByAddr[0].addr { + i := sort.Search(len(executable.symsByAddr), + func(i int) bool { return executable.symsByAddr[i].addr > pc }) + *function = executable.symsByAddr[i-1].name + } + + return true +} + +// The symbolValue function fetches the value of a symbol. +func symbolValue(name string, val *uintptr) bool { + i := sort.Search(len(executable.symsByName), + func(i int) bool { return executable.symsByName[i].name >= name }) + if i >= len(executable.symsByName) || executable.symsByName[i].name != name { + return false + } + *val = executable.symsByName[i].addr + return true +} diff --git a/libgo/go/debug/gosym/pclntab_test.go b/libgo/go/debug/gosym/pclntab_test.go index b90181bdc64..b2400bb3ba7 100644 --- a/libgo/go/debug/gosym/pclntab_test.go +++ b/libgo/go/debug/gosym/pclntab_test.go @@ -6,15 +6,37 @@ package gosym import ( "debug/elf" + "fmt" "os" + "os/exec" "runtime" + "strings" "testing" ) +var pclinetestBinary string + func dotest() bool { // For now, only works on ELF platforms. - // TODO: convert to work with new go tool - return false && runtime.GOOS == "linux" && runtime.GOARCH == "amd64" + if runtime.GOOS != "linux" || runtime.GOARCH != "amd64" { + return false + } + if pclinetestBinary != "" { + return true + } + // This command builds pclinetest from pclinetest.asm; + // the resulting binary looks like it was built from pclinetest.s, + // but we have renamed it to keep it away from the go tool. + pclinetestBinary = os.TempDir() + "/pclinetest" + command := fmt.Sprintf("go tool 6a -o %s.6 pclinetest.asm && go tool 6l -E main -o %s %s.6", + pclinetestBinary, pclinetestBinary, pclinetestBinary) + cmd := exec.Command("sh", "-c", command) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + panic(err) + } + return true } func getTable(t *testing.T) *Table { @@ -149,7 +171,7 @@ func TestPCLine(t *testing.T) { return } - f, tab := crack("_test/pclinetest", t) + f, tab := crack(pclinetestBinary, t) text := f.Section(".text") textdat, err := text.Data() if err != nil { @@ -163,10 +185,13 @@ func TestPCLine(t *testing.T) { file, line, fn := tab.PCToLine(pc) off := pc - text.Addr // TODO(rsc): should not need off; bug in 8g wantLine += int(textdat[off]) + t.Logf("off is %d", off) if fn == nil { t.Errorf("failed to get line of PC %#x", pc) - } else if len(file) < 12 || file[len(file)-12:] != "pclinetest.s" || line != wantLine || fn != sym { - t.Errorf("expected %s:%d (%s) at PC %#x, got %s:%d (%s)", "pclinetest.s", wantLine, sym.Name, pc, file, line, fn.Name) + } else if !strings.HasSuffix(file, "pclinetest.asm") { + t.Errorf("expected %s (%s) at PC %#x, got %s (%s)", "pclinetest.asm", sym.Name, pc, file, fn.Name) + } else if line != wantLine || fn != sym { + t.Errorf("expected :%d (%s) at PC %#x, got :%d (%s)", wantLine, sym.Name, pc, line, fn.Name) } } diff --git a/libgo/go/debug/macho/file.go b/libgo/go/debug/macho/file.go index c7cb90526e8..6577803a075 100644 --- a/libgo/go/debug/macho/file.go +++ b/libgo/go/debug/macho/file.go @@ -2,8 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package macho implements access to Mach-O object files, as defined by -// http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html. +// Package macho implements access to Mach-O object files. package macho // High level access to low level data structures. @@ -468,7 +467,7 @@ func (f *File) DWARF() (*dwarf.Data, error) { // There are many other DWARF sections, but these // are the required ones, and the debug/dwarf package // does not use the others, so don't bother loading them. - var names = [...]string{"abbrev", "info", "str"} + var names = [...]string{"abbrev", "info", "line", "str"} var dat [len(names)][]byte for i, name := range names { name = "__debug_" + name @@ -483,8 +482,8 @@ func (f *File) DWARF() (*dwarf.Data, error) { dat[i] = b } - abbrev, info, str := dat[0], dat[1], dat[2] - return dwarf.New(abbrev, nil, nil, info, nil, nil, nil, str) + abbrev, info, line, str := dat[0], dat[1], dat[2], dat[3] + return dwarf.New(abbrev, nil, nil, info, line, nil, nil, str) } // ImportedSymbols returns the names of all symbols diff --git a/libgo/go/debug/macho/file_test.go b/libgo/go/debug/macho/file_test.go index 640225b3291..ecc6f68a947 100644 --- a/libgo/go/debug/macho/file_test.go +++ b/libgo/go/debug/macho/file_test.go @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package macho +package macho_test import ( + . "debug/macho" "reflect" "testing" ) diff --git a/libgo/go/encoding/binary/binary.go b/libgo/go/encoding/binary/binary.go index 4be83f53bd4..02f090d53f3 100644 --- a/libgo/go/encoding/binary/binary.go +++ b/libgo/go/encoding/binary/binary.go @@ -5,6 +5,9 @@ // Package binary implements translation between // unsigned integer values and byte sequences // and the reading and writing of fixed-size values. +// A fixed-size value is either a fixed-size arithmetic +// type (int8, uint8, int16, float32, complex64, ...) +// or an array or struct containing only fixed-size values. package binary import ( @@ -26,17 +29,13 @@ type ByteOrder interface { String() string } -// This is byte instead of struct{} so that it can be compared, -// allowing, e.g., order == binary.LittleEndian. -type unused byte - // LittleEndian is the little-endian implementation of ByteOrder. var LittleEndian littleEndian // BigEndian is the big-endian implementation of ByteOrder. var BigEndian bigEndian -type littleEndian unused +type littleEndian struct{} func (littleEndian) Uint16(b []byte) uint16 { return uint16(b[0]) | uint16(b[1])<<8 } @@ -76,7 +75,7 @@ func (littleEndian) String() string { return "LittleEndian" } func (littleEndian) GoString() string { return "binary.LittleEndian" } -type bigEndian unused +type bigEndian struct{} func (bigEndian) Uint16(b []byte) uint16 { return uint16(b[1]) | uint16(b[0])<<8 } @@ -119,9 +118,6 @@ func (bigEndian) GoString() string { return "binary.BigEndian" } // Read reads structured binary data from r into data. // Data must be a pointer to a fixed-size value or a slice // of fixed-size values. -// A fixed-size value is either a fixed-size arithmetic -// type (int8, uint8, int16, float32, complex64, ...) -// or an array or struct containing only fixed-size values. // Bytes read from r are decoded using the specified byte order // and written to successive fields of the data. func Read(r io.Reader, order ByteOrder, data interface{}) error { @@ -176,11 +172,8 @@ func Read(r io.Reader, order ByteOrder, data interface{}) error { } // Write writes the binary representation of data into w. -// Data must be a fixed-size value or a pointer to -// a fixed-size value. -// A fixed-size value is either a fixed-size arithmetic -// type (int8, uint8, int16, float32, complex64, ...) -// or an array or struct containing only fixed-size values. +// Data must be a fixed-size value or a slice of fixed-size +// values, or a pointer to such data. // Bytes written to w are encoded using the specified byte order // and read from successive fields of the data. func Write(w io.Writer, order ByteOrder, data interface{}) error { @@ -253,6 +246,12 @@ func Write(w io.Writer, order ByteOrder, data interface{}) error { return err } +// Size returns how many bytes Write would generate to encode the value v, which +// must be a fixed-size value or a slice of fixed-size values, or a pointer to such data. +func Size(v interface{}) int { + return dataSize(reflect.Indirect(reflect.ValueOf(v))) +} + // dataSize returns the number of bytes the actual data represented by v occupies in memory. // For compound structures, it sums the sizes of the elements. Thus, for instance, for a slice // it returns the length of the slice times the element size and does not count the memory @@ -373,6 +372,7 @@ func (d *decoder) value(v reflect.Value) { for i := 0; i < l; i++ { d.value(v.Index(i)) } + case reflect.Struct: l := v.NumField() for i := 0; i < l; i++ { @@ -428,11 +428,13 @@ func (e *encoder) value(v reflect.Value) { for i := 0; i < l; i++ { e.value(v.Index(i)) } + case reflect.Struct: l := v.NumField() for i := 0; i < l; i++ { e.value(v.Field(i)) } + case reflect.Slice: l := v.Len() for i := 0; i < l; i++ { diff --git a/libgo/go/encoding/binary/binary_test.go b/libgo/go/encoding/binary/binary_test.go index ff361b7e379..dec47a1894f 100644 --- a/libgo/go/encoding/binary/binary_test.go +++ b/libgo/go/encoding/binary/binary_test.go @@ -2,10 +2,11 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package binary +package binary_test import ( "bytes" + . "encoding/binary" "io" "math" "reflect" @@ -187,7 +188,7 @@ func BenchmarkReadStruct(b *testing.B) { bsr := &byteSliceReader{} var buf bytes.Buffer Write(&buf, BigEndian, &s) - n := dataSize(reflect.ValueOf(s)) + n := DataSize(reflect.ValueOf(s)) b.SetBytes(int64(n)) t := s b.ResetTimer() diff --git a/libgo/go/encoding/binary/export_test.go b/libgo/go/encoding/binary/export_test.go new file mode 100644 index 00000000000..9eae2a961fc --- /dev/null +++ b/libgo/go/encoding/binary/export_test.go @@ -0,0 +1,15 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package binary + +import "reflect" + +// Export for testing. + +func DataSize(v reflect.Value) int { + return dataSize(v) +} + +var Overflow = overflow diff --git a/libgo/go/encoding/binary/varint_test.go b/libgo/go/encoding/binary/varint_test.go index 9476bd5fb7a..f67ca6321bd 100644 --- a/libgo/go/encoding/binary/varint_test.go +++ b/libgo/go/encoding/binary/varint_test.go @@ -2,10 +2,11 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package binary +package binary_test import ( "bytes" + . "encoding/binary" "io" "testing" ) @@ -134,8 +135,8 @@ func testOverflow(t *testing.T, buf []byte, n0 int, err0 error) { } func TestOverflow(t *testing.T) { - testOverflow(t, []byte{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x2}, -10, overflow) - testOverflow(t, []byte{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x1, 0, 0}, -13, overflow) + testOverflow(t, []byte{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x2}, -10, Overflow) + testOverflow(t, []byte{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x1, 0, 0}, -13, Overflow) } func TestNonCanonicalZero(t *testing.T) { diff --git a/libgo/go/encoding/gob/codec_test.go b/libgo/go/encoding/gob/codec_test.go index d365f826345..ebcbb78ebe6 100644 --- a/libgo/go/encoding/gob/codec_test.go +++ b/libgo/go/encoding/gob/codec_test.go @@ -1455,11 +1455,14 @@ func TestFuzz(t *testing.T) { func TestFuzzRegressions(t *testing.T) { // An instance triggering a type name of length ~102 GB. testFuzz(t, 1328492090837718000, 100, new(float32)) + // An instance triggering a type name of 1.6 GB. + // Commented out because it takes 5m to run. + //testFuzz(t, 1330522872628565000, 100, new(int)) } func testFuzz(t *testing.T, seed int64, n int, input ...interface{}) { - t.Logf("seed=%d n=%d\n", seed, n) for _, e := range input { + t.Logf("seed=%d n=%d e=%T", seed, n, e) rng := rand.New(rand.NewSource(seed)) for i := 0; i < n; i++ { encFuzzDec(rng, e) diff --git a/libgo/go/encoding/gob/debug.go b/libgo/go/encoding/gob/debug.go index b54ef46f52c..31d1351fc4f 100644 --- a/libgo/go/encoding/gob/debug.go +++ b/libgo/go/encoding/gob/debug.go @@ -3,14 +3,15 @@ // license that can be found in the LICENSE file. // Delete the next line to include in the gob package. -// +build gob-debug +// +build ignore package gob // This file is not normally included in the gob package. Used only for debugging the package itself. -// Add debug.go to the files listed in the Makefile to add Debug to the gob package. // Except for reading uints, it is an implementation of a reader that is independent of // the one implemented by Decoder. +// To enable the Debug function, delete the +build ignore line above and do +// go install import ( "bytes" diff --git a/libgo/go/encoding/gob/decode.go b/libgo/go/encoding/gob/decode.go index 8191062d309..0708a83c99a 100644 --- a/libgo/go/encoding/gob/decode.go +++ b/libgo/go/encoding/gob/decode.go @@ -392,12 +392,12 @@ func decUint8Slice(i *decInstr, state *decoderState, p unsafe.Pointer) { } p = *(*unsafe.Pointer)(p) } - n := int(state.decodeUint()) - if n < 0 { - errorf("negative length decoding []byte") + n := state.decodeUint() + if n > uint64(state.b.Len()) { + errorf("length of []byte exceeds input size (%d bytes)", n) } slice := (*[]uint8)(p) - if cap(*slice) < n { + if uint64(cap(*slice)) < n { *slice = make([]uint8, n) } else { *slice = (*slice)[0:n] @@ -417,7 +417,11 @@ func decString(i *decInstr, state *decoderState, p unsafe.Pointer) { } p = *(*unsafe.Pointer)(p) } - b := make([]byte, state.decodeUint()) + n := state.decodeUint() + if n > uint64(state.b.Len()) { + errorf("string length exceeds input size (%d bytes)", n) + } + b := make([]byte, n) state.b.Read(b) // It would be a shame to do the obvious thing here, // *(*string)(p) = string(b) @@ -456,7 +460,7 @@ func allocate(rtyp reflect.Type, p uintptr, indir int) uintptr { } if *(*unsafe.Pointer)(up) == nil { // Allocate object. - *(*unsafe.Pointer)(up) = unsafe.New(rtyp) + *(*unsafe.Pointer)(up) = unsafe.Pointer(reflect.New(rtyp).Pointer()) } return *(*uintptr)(up) } @@ -464,7 +468,7 @@ func allocate(rtyp reflect.Type, p uintptr, indir int) uintptr { // decodeSingle decodes a top-level value that is not a struct and stores it through p. // Such values are preceded by a zero, making them have the memory layout of a // struct field (although with an illegal field number). -func (dec *Decoder) decodeSingle(engine *decEngine, ut *userTypeInfo, basep uintptr) (err error) { +func (dec *Decoder) decodeSingle(engine *decEngine, ut *userTypeInfo, basep uintptr) { state := dec.newDecoderState(&dec.buf) state.fieldnum = singletonField delta := int(state.decodeUint()) @@ -473,7 +477,7 @@ func (dec *Decoder) decodeSingle(engine *decEngine, ut *userTypeInfo, basep uint } instr := &engine.instr[singletonField] if instr.indir != ut.indir { - return errors.New("gob: internal error: inconsistent indirection") + errorf("internal error: inconsistent indirection instr %d ut %d", instr.indir, ut.indir) } ptr := unsafe.Pointer(basep) // offset will be zero if instr.indir > 1 { @@ -481,10 +485,9 @@ func (dec *Decoder) decodeSingle(engine *decEngine, ut *userTypeInfo, basep uint } instr.op(instr, state, ptr) dec.freeDecoderState(state) - return nil } -// decodeSingle decodes a top-level struct and stores it through p. +// decodeStruct decodes a top-level struct and stores it through p. // Indir is for the value, not the type. At the time of the call it may // differ from ut.indir, which was computed when the engine was built. // This state cannot arise for decodeSingle, which is called directly @@ -609,7 +612,7 @@ func (dec *Decoder) decodeMap(mtyp reflect.Type, state *decoderState, p uintptr, // Maps cannot be accessed by moving addresses around the way // that slices etc. can. We must recover a full reflection value for // the iteration. - v := reflect.ValueOf(unsafe.Unreflect(mtyp, unsafe.Pointer(p))) + v := reflect.NewAt(mtyp, unsafe.Pointer(p)).Elem() n := int(state.decodeUint()) for i := 0; i < n; i++ { key := decodeIntoValue(state, keyOp, keyIndir, allocValue(mtyp.Key()), ovfl) @@ -648,7 +651,11 @@ func (dec *Decoder) ignoreMap(state *decoderState, keyOp, elemOp decOp) { // decodeSlice decodes a slice and stores the slice header through p. // Slices are encoded as an unsigned length followed by the elements. func (dec *Decoder) decodeSlice(atyp reflect.Type, state *decoderState, p uintptr, elemOp decOp, elemWid uintptr, indir, elemIndir int, ovfl error) { - n := int(uintptr(state.decodeUint())) + nr := state.decodeUint() + if nr > uint64(state.b.Len()) { + errorf("length of slice exceeds input size (%d elements)", nr) + } + n := int(nr) if indir > 0 { up := unsafe.Pointer(p) if *(*unsafe.Pointer)(up) == nil { @@ -662,7 +669,7 @@ func (dec *Decoder) decodeSlice(atyp reflect.Type, state *decoderState, p uintpt // Always write a header at p. hdrp := (*reflect.SliceHeader)(unsafe.Pointer(p)) if hdrp.Cap < n { - hdrp.Data = uintptr(unsafe.NewArray(atyp.Elem(), n)) + hdrp.Data = reflect.MakeSlice(atyp, n, n).Pointer() hdrp.Cap = n } hdrp.Len = n @@ -703,6 +710,9 @@ func (dec *Decoder) decodeInterface(ityp reflect.Type, state *decoderState, p ui *(*[2]uintptr)(unsafe.Pointer(p)) = ivalue.InterfaceData() return } + if len(name) > 1024 { + errorf("name too long (%d bytes): %.20q...", len(name), name) + } // The concrete type must be registered. typ, ok := nameToConcreteType[name] if !ok { @@ -839,11 +849,10 @@ func (dec *Decoder) decOpFor(wireId typeId, rt reflect.Type, name string, inProg } case reflect.Map: - name = "element of " + name keyId := dec.wireType[wireId].MapT.Key elemId := dec.wireType[wireId].MapT.Elem - keyOp, keyIndir := dec.decOpFor(keyId, t.Key(), name, inProgress) - elemOp, elemIndir := dec.decOpFor(elemId, t.Elem(), name, inProgress) + keyOp, keyIndir := dec.decOpFor(keyId, t.Key(), "key of "+name, inProgress) + elemOp, elemIndir := dec.decOpFor(elemId, t.Elem(), "element of "+name, inProgress) ovfl := overflow(name) op = func(i *decInstr, state *decoderState, p unsafe.Pointer) { up := unsafe.Pointer(p) @@ -969,16 +978,16 @@ func (dec *Decoder) gobDecodeOpFor(ut *userTypeInfo) (*decOp, int) { // Caller has gotten us to within one indirection of our value. if i.indir > 0 { if *(*unsafe.Pointer)(p) == nil { - *(*unsafe.Pointer)(p) = unsafe.New(ut.base) + *(*unsafe.Pointer)(p) = unsafe.Pointer(reflect.New(ut.base).Pointer()) } } // Now p is a pointer to the base type. Do we need to climb out to // get to the receiver type? var v reflect.Value if ut.decIndir == -1 { - v = reflect.ValueOf(unsafe.Unreflect(rcvrType, unsafe.Pointer(&p))) + v = reflect.NewAt(rcvrType, unsafe.Pointer(&p)).Elem() } else { - v = reflect.ValueOf(unsafe.Unreflect(rcvrType, p)) + v = reflect.NewAt(rcvrType, p).Elem() } state.dec.decodeGobDecoder(state, v) } @@ -1151,7 +1160,7 @@ func (dec *Decoder) compileDec(remoteId typeId, ut *userTypeInfo) (engine *decEn // getDecEnginePtr returns the engine for the specified type. func (dec *Decoder) getDecEnginePtr(remoteId typeId, ut *userTypeInfo) (enginePtr **decEngine, err error) { - rt := ut.base + rt := ut.user decoderMap, ok := dec.decoderCache[rt] if !ok { decoderMap = make(map[typeId]**decEngine) diff --git a/libgo/go/encoding/gob/dump.go b/libgo/go/encoding/gob/dump.go index f7d822c11e4..17238c98df0 100644 --- a/libgo/go/encoding/gob/dump.go +++ b/libgo/go/encoding/gob/dump.go @@ -2,9 +2,12 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// +build ignore + package main // Need to compile package gob with debug.go to build this program. +// See comments in debug.go for how to do this. import ( "encoding/gob" diff --git a/libgo/go/encoding/gob/encode.go b/libgo/go/encoding/gob/encode.go index f05b17c3096..168e08b137a 100644 --- a/libgo/go/encoding/gob/encode.go +++ b/libgo/go/encoding/gob/encode.go @@ -590,7 +590,7 @@ func (enc *Encoder) encOpFor(rt reflect.Type, inProgress map[reflect.Type]*encOp // Maps cannot be accessed by moving addresses around the way // that slices etc. can. We must recover a full reflection value for // the iteration. - v := reflect.ValueOf(unsafe.Unreflect(t, unsafe.Pointer(p))) + v := reflect.NewAt(t, unsafe.Pointer(p)).Elem() mv := reflect.Indirect(v) // We send zero-length (but non-nil) maps because the // receiver might want to use the map. (Maps don't use append.) @@ -613,7 +613,7 @@ func (enc *Encoder) encOpFor(rt reflect.Type, inProgress map[reflect.Type]*encOp op = func(i *encInstr, state *encoderState, p unsafe.Pointer) { // Interfaces transmit the name and contents of the concrete // value they contain. - v := reflect.ValueOf(unsafe.Unreflect(t, unsafe.Pointer(p))) + v := reflect.NewAt(t, unsafe.Pointer(p)).Elem() iv := reflect.Indirect(v) if !state.sendZero && (!iv.IsValid() || iv.IsNil()) { return @@ -645,9 +645,9 @@ func (enc *Encoder) gobEncodeOpFor(ut *userTypeInfo) (*encOp, int) { var v reflect.Value if ut.encIndir == -1 { // Need to climb up one level to turn value into pointer. - v = reflect.ValueOf(unsafe.Unreflect(rt, unsafe.Pointer(&p))) + v = reflect.NewAt(rt, unsafe.Pointer(&p)).Elem() } else { - v = reflect.ValueOf(unsafe.Unreflect(rt, p)) + v = reflect.NewAt(rt, p).Elem() } if !state.sendZero && isZero(v) { return diff --git a/libgo/go/encoding/gob/encoder_test.go b/libgo/go/encoding/gob/encoder_test.go index 9a62cf9c2ad..050786dfd1f 100644 --- a/libgo/go/encoding/gob/encoder_test.go +++ b/libgo/go/encoding/gob/encoder_test.go @@ -685,3 +685,54 @@ func TestSliceIncompatibility(t *testing.T) { t.Error("expected compatibility error") } } + +// Mutually recursive slices of structs caused problems. +type Bug3 struct { + Num int + Children []*Bug3 +} + +func TestGobPtrSlices(t *testing.T) { + in := []*Bug3{ + &Bug3{1, nil}, + &Bug3{2, nil}, + } + b := new(bytes.Buffer) + err := NewEncoder(b).Encode(&in) + if err != nil { + t.Fatal("encode:", err) + } + + var out []*Bug3 + err = NewDecoder(b).Decode(&out) + if err != nil { + t.Fatal("decode:", err) + } + if !reflect.DeepEqual(in, out) { + t.Fatalf("got %v; wanted %v", out, in) + } +} + +// getDecEnginePtr cached engine for ut.base instead of ut.user so we passed +// a *map and then tried to reuse its engine to decode the inner map. +func TestPtrToMapOfMap(t *testing.T) { + Register(make(map[string]interface{})) + subdata := make(map[string]interface{}) + subdata["bar"] = "baz" + data := make(map[string]interface{}) + data["foo"] = subdata + + b := new(bytes.Buffer) + err := NewEncoder(b).Encode(data) + if err != nil { + t.Fatal("encode:", err) + } + var newData map[string]interface{} + err = NewDecoder(b).Decode(&newData) + if err != nil { + t.Fatal("decode:", err) + } + if !reflect.DeepEqual(data, newData) { + t.Fatalf("expected %v got %v", data, newData) + } +} diff --git a/libgo/go/encoding/gob/type.go b/libgo/go/encoding/gob/type.go index 39006efdb2d..0dd7a0a770e 100644 --- a/libgo/go/encoding/gob/type.go +++ b/libgo/go/encoding/gob/type.go @@ -152,6 +152,10 @@ var idToType = make(map[typeId]gobType) var builtinIdToType map[typeId]gobType // set in init() after builtins are established func setTypeId(typ gobType) { + // When building recursive types, someone may get there before us. + if typ.id() != 0 { + return + } nextId++ typ.setId(nextId) idToType[nextId] = typ @@ -346,6 +350,11 @@ func newSliceType(name string) *sliceType { func (s *sliceType) init(elem gobType) { // Set our type id before evaluating the element's, in case it's our own. setTypeId(s) + // See the comments about ids in newTypeObject. Only slices and + // structs have mutual recursion. + if elem.id() == 0 { + setTypeId(elem) + } s.Elem = elem.id() } @@ -503,6 +512,13 @@ func newTypeObject(name string, ut *userTypeInfo, rt reflect.Type) (gobType, err if err != nil { return nil, err } + // Some mutually recursive types can cause us to be here while + // still defining the element. Fix the element type id here. + // We could do this more neatly by setting the id at the start of + // building every type, but that would break binary compatibility. + if gt.id() == 0 { + setTypeId(gt) + } st.Field = append(st.Field, &fieldType{f.Name, gt.id()}) } return st, nil diff --git a/libgo/go/encoding/hex/hex_test.go b/libgo/go/encoding/hex/hex_test.go index 2d24fd0a146..456f9eac724 100644 --- a/libgo/go/encoding/hex/hex_test.go +++ b/libgo/go/encoding/hex/hex_test.go @@ -87,7 +87,7 @@ func TestInvalidErr(t *testing.T) { dst := make([]byte, DecodedLen(len(test.in))) _, err := Decode(dst, []byte(test.in)) if err == nil { - t.Errorf("#%d: expected error; got none") + t.Errorf("#%d: expected error; got none", i) } else if err.Error() != test.err { t.Errorf("#%d: got: %v want: %v", i, err, test.err) } @@ -98,7 +98,7 @@ func TestInvalidStringErr(t *testing.T) { for i, test := range errTests { _, err := DecodeString(test.in) if err == nil { - t.Errorf("#%d: expected error; got none") + t.Errorf("#%d: expected error; got none", i) } else if err.Error() != test.err { t.Errorf("#%d: got: %v want: %v", i, err, test.err) } diff --git a/libgo/go/encoding/json/decode.go b/libgo/go/encoding/json/decode.go index 87076b53dc0..110c6fd6238 100644 --- a/libgo/go/encoding/json/decode.go +++ b/libgo/go/encoding/json/decode.go @@ -496,6 +496,12 @@ func (d *decodeState) object(v reflect.Value) { // Pretend this field doesn't exist. continue } + if sf.Anonymous { + // Pretend this field doesn't exist, + // so that we can do a good job with + // these in a later version. + continue + } // First, tag match tagName, _ := parseTag(tag) if tagName == key { @@ -963,3 +969,11 @@ func unquoteBytes(s []byte) (t []byte, ok bool) { } return b[0:w], true } + +// The following is issue 3069. + +// BUG(rsc): This package ignores anonymous (embedded) struct fields +// during encoding and decoding. A future version may assign meaning +// to them. To force an anonymous field to be ignored in all future +// versions of this package, use an explicit `json:"-"` tag in the struct +// definition. diff --git a/libgo/go/encoding/json/decode_test.go b/libgo/go/encoding/json/decode_test.go index 775becfa7c9..d758758d978 100644 --- a/libgo/go/encoding/json/decode_test.go +++ b/libgo/go/encoding/json/decode_test.go @@ -239,16 +239,6 @@ func TestEscape(t *testing.T) { } } -func TestHTMLEscape(t *testing.T) { - b, err := MarshalForHTML("foobarbaz<>&quux") - if err != nil { - t.Fatalf("MarshalForHTML error: %v", err) - } - if !bytes.Equal(b, []byte(`"foobarbaz\u003c\u003e\u0026quux"`)) { - t.Fatalf("Unexpected encoding of \"<>&\": %s", b) - } -} - // WrongString is a struct that's misusing the ,string modifier. type WrongString struct { Message string `json:"result,string"` @@ -619,3 +609,32 @@ func TestRefUnmarshal(t *testing.T) { t.Errorf("got %+v, want %+v", got, want) } } + +// Test that anonymous fields are ignored. +// We may assign meaning to them later. +func TestAnonymous(t *testing.T) { + type S struct { + T + N int + } + + data, err := Marshal(new(S)) + if err != nil { + t.Fatalf("Marshal: %v", err) + } + want := `{"N":0}` + if string(data) != want { + t.Fatalf("Marshal = %#q, want %#q", string(data), want) + } + + var s S + if err := Unmarshal([]byte(`{"T": 1, "T": {"Y": 1}, "N": 2}`), &s); err != nil { + t.Fatalf("Unmarshal: %v", err) + } + if s.N != 2 { + t.Fatal("Unmarshal: did not set N") + } + if s.T.Y != 0 { + t.Fatal("Unmarshal: did set T.Y") + } +} diff --git a/libgo/go/encoding/json/encode.go b/libgo/go/encoding/json/encode.go index 83e73c09cb4..5425a3a90a1 100644 --- a/libgo/go/encoding/json/encode.go +++ b/libgo/go/encoding/json/encode.go @@ -123,17 +123,6 @@ func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) { return buf.Bytes(), nil } -// MarshalForHTML is like Marshal but applies HTMLEscape to the output. -func MarshalForHTML(v interface{}) ([]byte, error) { - b, err := Marshal(v) - if err != nil { - return nil, err - } - var buf bytes.Buffer - HTMLEscape(&buf, b) - return buf.Bytes(), nil -} - // HTMLEscape appends to dst the JSON-encoded src with <, >, and & // characters inside string literals changed to \u003c, \u003e, \u0026 // so that the JSON will be safe to embed inside HTML <script> tags. @@ -200,11 +189,6 @@ func (e *MarshalerError) Error() string { return "json: error calling MarshalJSON for type " + e.Type.String() + ": " + e.Err.Error() } -type interfaceOrPtrValue interface { - IsNil() bool - Elem() reflect.Value -} - var hex = "0123456789abcdef" // An encodeState encodes JSON into a bytes.Buffer. @@ -276,7 +260,7 @@ func (e *encodeState) reflectValueQuoted(v reflect.Value, quoted bool) { b, err := m.MarshalJSON() if err == nil { // copy JSON into buffer, checking validity. - err = Compact(&e.Buffer, b) + err = compact(&e.Buffer, b, true) } if err != nil { e.error(&MarshalerError{v.Type(), err}) @@ -538,6 +522,11 @@ func encodeFields(t reflect.Type) []encodeField { if f.PkgPath != "" { continue } + if f.Anonymous { + // We want to do a better job with these later, + // so for now pretend they don't exist. + continue + } var ef encodeField ef.i = i ef.tag = f.Name diff --git a/libgo/go/encoding/json/encode_test.go b/libgo/go/encoding/json/encode_test.go index 7a726a91c47..cb1c77eb529 100644 --- a/libgo/go/encoding/json/encode_test.go +++ b/libgo/go/encoding/json/encode_test.go @@ -167,3 +167,22 @@ func TestRefValMarshal(t *testing.T) { t.Errorf("got %q, want %q", got, want) } } + +// C implements Marshaler and returns unescaped JSON. +type C int + +func (C) MarshalJSON() ([]byte, error) { + return []byte(`"<&>"`), nil +} + +func TestMarshalerEscaping(t *testing.T) { + var c C + const want = `"\u003c\u0026\u003e"` + b, err := Marshal(c) + if err != nil { + t.Fatalf("Marshal: %v", err) + } + if got := string(b); got != want { + t.Errorf("got %q, want %q", got, want) + } +} diff --git a/libgo/go/encoding/json/indent.go b/libgo/go/encoding/json/indent.go index 5ba19b07ac6..e8dfa4ec436 100644 --- a/libgo/go/encoding/json/indent.go +++ b/libgo/go/encoding/json/indent.go @@ -9,11 +9,24 @@ import "bytes" // Compact appends to dst the JSON-encoded src with // insignificant space characters elided. func Compact(dst *bytes.Buffer, src []byte) error { + return compact(dst, src, false) +} + +func compact(dst *bytes.Buffer, src []byte, escape bool) error { origLen := dst.Len() var scan scanner scan.reset() start := 0 for i, c := range src { + if escape && (c == '<' || c == '>' || c == '&') { + if start < i { + dst.Write(src[start:i]) + } + dst.WriteString(`\u00`) + dst.WriteByte(hex[c>>4]) + dst.WriteByte(hex[c&0xF]) + start = i + 1 + } v := scan.step(&scan, int(c)) if v >= scanSkipSpace { if v == scanError { diff --git a/libgo/go/encoding/json/stream.go b/libgo/go/encoding/json/stream.go index f2476395023..7d1cc5f119c 100644 --- a/libgo/go/encoding/json/stream.go +++ b/libgo/go/encoding/json/stream.go @@ -19,6 +19,9 @@ type Decoder struct { } // NewDecoder returns a new decoder that reads from r. +// +// The decoder introduces its own buffering and may +// read data from r beyond the JSON values requested. func NewDecoder(r io.Reader) *Decoder { return &Decoder{r: r} } diff --git a/libgo/go/encoding/xml/atom_test.go b/libgo/go/encoding/xml/atom_test.go index 8d003aade07..a71284312af 100644 --- a/libgo/go/encoding/xml/atom_test.go +++ b/libgo/go/encoding/xml/atom_test.go @@ -4,6 +4,8 @@ package xml +import "time" + var atomValue = &Feed{ XMLName: Name{"http://www.w3.org/2005/Atom", "feed"}, Title: "Example Feed", @@ -24,11 +26,10 @@ var atomValue = &Feed{ } var atomXml = `` + - `<feed xmlns="http://www.w3.org/2005/Atom">` + + `<feed xmlns="http://www.w3.org/2005/Atom" updated="2003-12-13T18:30:02Z">` + `<title>Example Feed</title>` + `<id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>` + `<link href="http://example.org/"></link>` + - `<updated>2003-12-13T18:30:02Z</updated>` + `<author><name>John Doe</name><uri></uri><email></email></author>` + `<entry>` + `<title>Atom-Powered Robots Run Amok</title>` + @@ -40,8 +41,12 @@ var atomXml = `` + `</entry>` + `</feed>` -func ParseTime(str string) Time { - return Time(str) +func ParseTime(str string) time.Time { + t, err := time.Parse(time.RFC3339, str) + if err != nil { + panic(err) + } + return t } func NewText(text string) Text { diff --git a/libgo/go/encoding/xml/marshal.go b/libgo/go/encoding/xml/marshal.go index 7a05a1bb10e..6c3170bdda3 100644 --- a/libgo/go/encoding/xml/marshal.go +++ b/libgo/go/encoding/xml/marshal.go @@ -12,6 +12,7 @@ import ( "reflect" "strconv" "strings" + "time" ) const ( @@ -52,32 +53,18 @@ const ( // - a field with tag ",comment" is written as an XML comment, not // subject to the usual marshalling procedure. It must not contain // the "--" string within it. +// - a field with a tag including the "omitempty" option is omitted +// if the field value is empty. The empty values are false, 0, any +// nil pointer or interface value, and any array, slice, map, or +// string of length zero. +// - a non-pointer anonymous struct field is handled as if the +// fields of its value were part of the outer struct. // // If a field uses a tag "a>b>c", then the element c will be nested inside // parent elements a and b. Fields that appear next to each other that name -// the same parent will be enclosed in one XML element. For example: +// the same parent will be enclosed in one XML element. // -// type Result struct { -// XMLName xml.Name `xml:"result"` -// Id int `xml:"id,attr"` -// FirstName string `xml:"person>name>first"` -// LastName string `xml:"person>name>last"` -// Age int `xml:"person>age"` -// } -// -// xml.Marshal(&Result{Id: 13, FirstName: "John", LastName: "Doe", Age: 42}) -// -// would be marshalled as: -// -// <result> -// <person id="13"> -// <name> -// <first>John</first> -// <last>Doe</last> -// </name> -// <age>42</age> -// </person> -// </result> +// See MarshalIndent for an example. // // Marshal will return an error if asked to marshal a channel, function, or map. func Marshal(v interface{}) ([]byte, error) { @@ -88,6 +75,22 @@ func Marshal(v interface{}) ([]byte, error) { return b.Bytes(), nil } +// MarshalIndent works like Marshal, but each XML element begins on a new +// indented line that starts with prefix and is followed by one or more +// copies of indent according to the nesting depth. +func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) { + var b bytes.Buffer + enc := NewEncoder(&b) + enc.prefix = prefix + enc.indent = indent + err := enc.marshalValue(reflect.ValueOf(v), nil) + enc.Flush() + if err != nil { + return nil, err + } + return b.Bytes(), nil +} + // An Encoder writes XML data to an output stream. type Encoder struct { printer @@ -95,7 +98,7 @@ type Encoder struct { // NewEncoder returns a new encoder that writes to w. func NewEncoder(w io.Writer) *Encoder { - return &Encoder{printer{bufio.NewWriter(w)}} + return &Encoder{printer{Writer: bufio.NewWriter(w)}} } // Encode writes the XML encoding of v to the stream. @@ -110,12 +113,21 @@ func (enc *Encoder) Encode(v interface{}) error { type printer struct { *bufio.Writer + indent string + prefix string + depth int + indentedIn bool } +// marshalValue writes one or more XML elements representing val. +// If val was obtained from a struct field, finfo must have its details. func (p *printer) marshalValue(val reflect.Value, finfo *fieldInfo) error { if !val.IsValid() { return nil } + if finfo != nil && finfo.flags&fOmitEmpty != 0 && isEmptyValue(val) { + return nil + } kind := val.Kind() typ := val.Type() @@ -166,6 +178,7 @@ func (p *printer) marshalValue(val reflect.Value, finfo *fieldInfo) error { } } + p.writeIndent(1) p.WriteByte('<') p.WriteString(name) @@ -183,12 +196,8 @@ func (p *printer) marshalValue(val reflect.Value, finfo *fieldInfo) error { continue } fv := val.FieldByIndex(finfo.idx) - switch fv.Kind() { - case reflect.String, reflect.Array, reflect.Slice: - // TODO: Should we really do this once ,omitempty is in? - if fv.Len() == 0 { - continue - } + if finfo.flags&fOmitEmpty != 0 && isEmptyValue(fv) { + continue } p.WriteByte(' ') p.WriteString(finfo.name) @@ -209,6 +218,7 @@ func (p *printer) marshalValue(val reflect.Value, finfo *fieldInfo) error { return err } + p.writeIndent(-1) p.WriteByte('<') p.WriteByte('/') p.WriteString(name) @@ -217,7 +227,14 @@ func (p *printer) marshalValue(val reflect.Value, finfo *fieldInfo) error { return nil } +var timeType = reflect.TypeOf(time.Time{}) + func (p *printer) marshalSimple(typ reflect.Type, val reflect.Value) error { + // Normally we don't see structs, but this can happen for an attribute. + if val.Type() == timeType { + p.WriteString(val.Interface().(time.Time).Format(time.RFC3339Nano)) + return nil + } switch val.Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: p.WriteString(strconv.FormatInt(val.Int(), 10)) @@ -249,6 +266,10 @@ func (p *printer) marshalSimple(typ reflect.Type, val reflect.Value) error { var ddBytes = []byte("--") func (p *printer) marshalStruct(tinfo *typeInfo, val reflect.Value) error { + if val.Type() == timeType { + p.WriteString(val.Interface().(time.Time).Format(time.RFC3339Nano)) + return nil + } s := parentStack{printer: p} for i := range tinfo.fields { finfo := &tinfo.fields[i] @@ -276,6 +297,7 @@ func (p *printer) marshalStruct(tinfo *typeInfo, val reflect.Value) error { if vf.Len() == 0 { continue } + p.writeIndent(0) p.WriteString("<!--") dashDash := false dashLast := false @@ -334,6 +356,33 @@ func (p *printer) marshalStruct(tinfo *typeInfo, val reflect.Value) error { return nil } +func (p *printer) writeIndent(depthDelta int) { + if len(p.prefix) == 0 && len(p.indent) == 0 { + return + } + if depthDelta < 0 { + p.depth-- + if p.indentedIn { + p.indentedIn = false + return + } + p.indentedIn = false + } + p.WriteByte('\n') + if len(p.prefix) > 0 { + p.WriteString(p.prefix) + } + if len(p.indent) > 0 { + for i := 0; i < p.depth; i++ { + p.WriteString(p.indent) + } + } + if depthDelta > 0 { + p.depth++ + p.indentedIn = true + } +} + type parentStack struct { *printer stack []string @@ -349,20 +398,20 @@ func (s *parentStack) trim(parents []string) { break } } - for i := len(s.stack) - 1; i >= split; i-- { + s.writeIndent(-1) s.WriteString("</") s.WriteString(s.stack[i]) s.WriteByte('>') } - s.stack = parents[:split] } // push adds parent elements to the stack and writes open tags. func (s *parentStack) push(parents []string) { for i := 0; i < len(parents); i++ { - s.WriteString("<") + s.writeIndent(1) + s.WriteByte('<') s.WriteString(parents[i]) s.WriteByte('>') } @@ -378,3 +427,21 @@ type UnsupportedTypeError struct { func (e *UnsupportedTypeError) Error() string { return "xml: unsupported type: " + e.Type.String() } + +func isEmptyValue(v reflect.Value) bool { + switch v.Kind() { + case reflect.Array, reflect.Map, reflect.Slice, reflect.String: + return v.Len() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + } + return false +} diff --git a/libgo/go/encoding/xml/marshal_test.go b/libgo/go/encoding/xml/marshal_test.go index 0f6c0f0795d..b6978a1e65b 100644 --- a/libgo/go/encoding/xml/marshal_test.go +++ b/libgo/go/encoding/xml/marshal_test.go @@ -9,6 +9,7 @@ import ( "strconv" "strings" "testing" + "time" ) type DriveType int @@ -38,14 +39,14 @@ type NamedType string type Port struct { XMLName struct{} `xml:"port"` - Type string `xml:"type,attr"` + Type string `xml:"type,attr,omitempty"` Comment string `xml:",comment"` Number string `xml:",chardata"` } type Domain struct { XMLName struct{} `xml:"domain"` - Country string `xml:",attr"` + Country string `xml:",attr,omitempty"` Name []byte `xml:",chardata"` Comment []byte `xml:",comment"` } @@ -135,12 +136,12 @@ type NamePrecedence struct { type XMLNameWithTag struct { XMLName Name `xml:"InXMLNameTag"` - Value string ",chardata" + Value string `xml:",chardata"` } type XMLNameWithoutTag struct { XMLName Name - Value string ",chardata" + Value string `xml:",chardata"` } type NameInField struct { @@ -149,11 +150,33 @@ type NameInField struct { type AttrTest struct { Int int `xml:",attr"` - Lower int `xml:"int,attr"` + Named int `xml:"int,attr"` Float float64 `xml:",attr"` Uint8 uint8 `xml:",attr"` Bool bool `xml:",attr"` Str string `xml:",attr"` + Bytes []byte `xml:",attr"` +} + +type OmitAttrTest struct { + Int int `xml:",attr,omitempty"` + Named int `xml:"int,attr,omitempty"` + Float float64 `xml:",attr,omitempty"` + Uint8 uint8 `xml:",attr,omitempty"` + Bool bool `xml:",attr,omitempty"` + Str string `xml:",attr,omitempty"` + Bytes []byte `xml:",attr,omitempty"` +} + +type OmitFieldTest struct { + Int int `xml:",omitempty"` + Named int `xml:"int,omitempty"` + Float float64 `xml:",omitempty"` + Uint8 uint8 `xml:",omitempty"` + Bool bool `xml:",omitempty"` + Str string `xml:",omitempty"` + Bytes []byte `xml:",omitempty"` + Ptr *PresenceTest `xml:",omitempty"` } type AnyTest struct { @@ -234,6 +257,12 @@ var marshalTests = []struct { {Value: &Plain{[]int{1, 2, 3}}, ExpectXML: `<Plain><V>1</V><V>2</V><V>3</V></Plain>`}, {Value: &Plain{[3]int{1, 2, 3}}, ExpectXML: `<Plain><V>1</V><V>2</V><V>3</V></Plain>`}, + // Test time. + { + Value: &Plain{time.Unix(1e9, 123456789).UTC()}, + ExpectXML: `<Plain><V>2001-09-09T01:46:40.123456789Z</V></Plain>`, + }, + // A pointer to struct{} may be used to test for an element's presence. { Value: &PresenceTest{new(struct{})}, @@ -503,9 +532,9 @@ var marshalTests = []struct { InFieldName: "D", }, ExpectXML: `<Parent>` + - `<InTag><Value>A</Value></InTag>` + - `<InXMLName><Value>B</Value></InXMLName>` + - `<InXMLNameTag><Value>C</Value></InXMLNameTag>` + + `<InTag>A</InTag>` + + `<InXMLName>B</InXMLName>` + + `<InXMLNameTag>C</InXMLNameTag>` + `<InFieldName>D</InFieldName>` + `</Parent>`, MarshalOnly: true, @@ -519,9 +548,9 @@ var marshalTests = []struct { InFieldName: "D", }, ExpectXML: `<Parent>` + - `<InTag><Value>A</Value></InTag>` + - `<FromNameVal><Value>B</Value></FromNameVal>` + - `<InXMLNameTag><Value>C</Value></InXMLNameTag>` + + `<InTag>A</InTag>` + + `<FromNameVal>B</FromNameVal>` + + `<InXMLNameTag>C</InXMLNameTag>` + `<InFieldName>D</InFieldName>` + `</Parent>`, UnmarshalOnly: true, @@ -549,13 +578,65 @@ var marshalTests = []struct { { Value: &AttrTest{ Int: 8, - Lower: 9, + Named: 9, + Float: 23.5, + Uint8: 255, + Bool: true, + Str: "str", + Bytes: []byte("byt"), + }, + ExpectXML: `<AttrTest Int="8" int="9" Float="23.5" Uint8="255"` + + ` Bool="true" Str="str" Bytes="byt"></AttrTest>`, + }, + { + Value: &AttrTest{Bytes: []byte{}}, + ExpectXML: `<AttrTest Int="0" int="0" Float="0" Uint8="0"` + + ` Bool="false" Str="" Bytes=""></AttrTest>`, + }, + { + Value: &OmitAttrTest{ + Int: 8, + Named: 9, + Float: 23.5, + Uint8: 255, + Bool: true, + Str: "str", + Bytes: []byte("byt"), + }, + ExpectXML: `<OmitAttrTest Int="8" int="9" Float="23.5" Uint8="255"` + + ` Bool="true" Str="str" Bytes="byt"></OmitAttrTest>`, + }, + { + Value: &OmitAttrTest{}, + ExpectXML: `<OmitAttrTest></OmitAttrTest>`, + }, + + // omitempty on fields + { + Value: &OmitFieldTest{ + Int: 8, + Named: 9, Float: 23.5, Uint8: 255, Bool: true, - Str: "s", + Str: "str", + Bytes: []byte("byt"), + Ptr: &PresenceTest{}, }, - ExpectXML: `<AttrTest Int="8" int="9" Float="23.5" Uint8="255" Bool="true" Str="s"></AttrTest>`, + ExpectXML: `<OmitFieldTest>` + + `<Int>8</Int>` + + `<int>9</int>` + + `<Float>23.5</Float>` + + `<Uint8>255</Uint8>` + + `<Bool>true</Bool>` + + `<Str>str</Str>` + + `<Bytes>byt</Bytes>` + + `<Ptr></Ptr>` + + `</OmitFieldTest>`, + }, + { + Value: &OmitFieldTest{}, + ExpectXML: `<OmitFieldTest></OmitFieldTest>`, }, // Test ",any" diff --git a/libgo/go/encoding/xml/read.go b/libgo/go/encoding/xml/read.go index bde875a0123..c2168242091 100644 --- a/libgo/go/encoding/xml/read.go +++ b/libgo/go/encoding/xml/read.go @@ -10,6 +10,7 @@ import ( "reflect" "strconv" "strings" + "time" ) // BUG(rsc): Mapping between XML elements and data structures is inherently flawed: @@ -24,58 +25,6 @@ import ( // slice, or string. Well-formed data that does not fit into v is // discarded. // -// For example, given these definitions: -// -// type Email struct { -// Where string `xml:",attr"` -// Addr string -// } -// -// type Result struct { -// XMLName xml.Name `xml:"result"` -// Name string -// Phone string -// Email []Email -// Groups []string `xml:"group>value"` -// } -// -// result := Result{Name: "name", Phone: "phone", Email: nil} -// -// unmarshalling the XML input -// -// <result> -// <email where="home"> -// <addr>gre@example.com</addr> -// </email> -// <email where='work'> -// <addr>gre@work.com</addr> -// </email> -// <name>Grace R. Emlin</name> -// <group> -// <value>Friends</value> -// <value>Squash</value> -// </group> -// <address>123 Main Street</address> -// </result> -// -// via Unmarshal(data, &result) is equivalent to assigning -// -// r = Result{ -// xml.Name{Local: "result"}, -// "Grace R. Emlin", // name -// "phone", // no phone given -// []Email{ -// Email{"home", "gre@example.com"}, -// Email{"work", "gre@work.com"}, -// }, -// []string{"Friends", "Squash"}, -// } -// -// Note that the field r.Phone has not been modified and -// that the XML <address> element was discarded. Also, the field -// Groups was assigned considering the element path provided in the -// field tag. -// // Because Unmarshal uses the reflect package, it can only assign // to exported (upper case) fields. Unmarshal uses a case-sensitive // comparison to match XML element names to tag values and struct @@ -132,6 +81,9 @@ import ( // of the above rules and the struct has a field with tag ",any", // unmarshal maps the sub-element to that struct field. // +// * A non-pointer anonymous struct field is handled as if the +// fields of its value were part of the outer struct. +// // * A struct field with tag "-" is never unmarshalled into. // // Unmarshal maps an XML element to a string or []byte by saving the @@ -270,6 +222,10 @@ func (p *Decoder) unmarshal(val reflect.Value, start *StartElement) error { v.Set(reflect.ValueOf(start.Name)) break } + if typ == timeType { + saveData = v + break + } sv = v tinfo, err = getTypeInfo(typ) @@ -473,6 +429,14 @@ func copyValue(dst reflect.Value, src []byte) (err error) { src = []byte{} } t.SetBytes(src) + case reflect.Struct: + if t.Type() == timeType { + tv, err := time.Parse(time.RFC3339, string(src)) + if err != nil { + return err + } + t.Set(reflect.ValueOf(tv)) + } } return nil } diff --git a/libgo/go/encoding/xml/read_test.go b/libgo/go/encoding/xml/read_test.go index 833eafc9a58..8df09b3ccee 100644 --- a/libgo/go/encoding/xml/read_test.go +++ b/libgo/go/encoding/xml/read_test.go @@ -7,6 +7,7 @@ package xml import ( "reflect" "testing" + "time" ) // Stripped down Atom feed data structures. @@ -24,7 +25,7 @@ func TestUnmarshalFeed(t *testing.T) { // hget http://codereview.appspot.com/rss/mine/rsc const atomFeedString = ` <?xml version="1.0" encoding="utf-8"?> -<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us"><title>Code Review - My issues</title><link href="http://codereview.appspot.com/" rel="alternate"></link><link href="http://codereview.appspot.com/rss/mine/rsc" rel="self"></link><id>http://codereview.appspot.com/</id><updated>2009-10-04T01:35:58+00:00</updated><author><name>rietveld<></name></author><entry><title>rietveld: an attempt at pubsubhubbub +<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us" updated="2009-10-04T01:35:58+00:00"><title>Code Review - My issues</title><link href="http://codereview.appspot.com/" rel="alternate"></link><link href="http://codereview.appspot.com/rss/mine/rsc" rel="self"></link><id>http://codereview.appspot.com/</id><author><name>rietveld<></name></author><entry><title>rietveld: an attempt at pubsubhubbub </title><link href="http://codereview.appspot.com/126085" rel="alternate"></link><updated>2009-10-04T01:35:58+00:00</updated><author><name>email-address-removed</name></author><id>urn:md5:134d9179c41f806be79b3a5f7877d19a</id><summary type="html"> An attempt at adding pubsubhubbub support to Rietveld. http://code.google.com/p/pubsubhubbub @@ -78,26 +79,26 @@ not being used from outside intra_region_diff.py. </summary></entry></feed> ` type Feed struct { - XMLName Name `xml:"http://www.w3.org/2005/Atom feed"` - Title string `xml:"title"` - Id string `xml:"id"` - Link []Link `xml:"link"` - Updated Time `xml:"updated"` - Author Person `xml:"author"` - Entry []Entry `xml:"entry"` + XMLName Name `xml:"http://www.w3.org/2005/Atom feed"` + Title string `xml:"title"` + Id string `xml:"id"` + Link []Link `xml:"link"` + Updated time.Time `xml:"updated,attr"` + Author Person `xml:"author"` + Entry []Entry `xml:"entry"` } type Entry struct { - Title string `xml:"title"` - Id string `xml:"id"` - Link []Link `xml:"link"` - Updated Time `xml:"updated"` - Author Person `xml:"author"` - Summary Text `xml:"summary"` + Title string `xml:"title"` + Id string `xml:"id"` + Link []Link `xml:"link"` + Updated time.Time `xml:"updated"` + Author Person `xml:"author"` + Summary Text `xml:"summary"` } type Link struct { - Rel string `xml:"rel,attr"` + Rel string `xml:"rel,attr,omitempty"` Href string `xml:"href,attr"` } @@ -109,12 +110,10 @@ type Person struct { } type Text struct { - Type string `xml:"type,attr"` + Type string `xml:"type,attr,omitempty"` Body string `xml:",chardata"` } -type Time string - var atomFeed = Feed{ XMLName: Name{"http://www.w3.org/2005/Atom", "feed"}, Title: "Code Review - My issues", @@ -123,7 +122,7 @@ var atomFeed = Feed{ {Rel: "self", Href: "http://codereview.appspot.com/rss/mine/rsc"}, }, Id: "http://codereview.appspot.com/", - Updated: "2009-10-04T01:35:58+00:00", + Updated: ParseTime("2009-10-04T01:35:58+00:00"), Author: Person{ Name: "rietveld<>", InnerXML: "<name>rietveld<></name>", @@ -134,7 +133,7 @@ var atomFeed = Feed{ Link: []Link{ {Rel: "alternate", Href: "http://codereview.appspot.com/126085"}, }, - Updated: "2009-10-04T01:35:58+00:00", + Updated: ParseTime("2009-10-04T01:35:58+00:00"), Author: Person{ Name: "email-address-removed", InnerXML: "<name>email-address-removed</name>", @@ -181,7 +180,7 @@ the top of feeds.py marked NOTE(rsc). Link: []Link{ {Rel: "alternate", Href: "http://codereview.appspot.com/124106"}, }, - Updated: "2009-10-03T23:02:17+00:00", + Updated: ParseTime("2009-10-03T23:02:17+00:00"), Author: Person{ Name: "email-address-removed", InnerXML: "<name>email-address-removed</name>", diff --git a/libgo/go/encoding/xml/typeinfo.go b/libgo/go/encoding/xml/typeinfo.go index 5475f290d18..8e2e4508b10 100644 --- a/libgo/go/encoding/xml/typeinfo.go +++ b/libgo/go/encoding/xml/typeinfo.go @@ -36,8 +36,7 @@ const ( fComment fAny - // TODO: - //fOmitEmpty + fOmitEmpty fMode = fElement | fAttr | fCharData | fInnerXml | fComment | fAny ) @@ -133,20 +132,28 @@ func structFieldInfo(typ reflect.Type, f *reflect.StructField) (*fieldInfo, erro finfo.flags |= fComment case "any": finfo.flags |= fAny + case "omitempty": + finfo.flags |= fOmitEmpty } } // Validate the flags used. + valid := true switch mode := finfo.flags & fMode; mode { case 0: finfo.flags |= fElement case fAttr, fCharData, fInnerXml, fComment, fAny: - if f.Name != "XMLName" && (tag == "" || mode == fAttr) { - break + if f.Name == "XMLName" || tag != "" && mode != fAttr { + valid = false } - fallthrough default: // This will also catch multiple modes in a single field. + valid = false + } + if finfo.flags&fOmitEmpty != 0 && finfo.flags&(fElement|fAttr) == 0 { + valid = false + } + if !valid { return nil, fmt.Errorf("xml: invalid tag in field %s of type %s: %q", f.Name, typ, f.Tag.Get("xml")) } diff --git a/libgo/go/errors/errors_test.go b/libgo/go/errors/errors_test.go index c537eeb6251..63c05d7185b 100644 --- a/libgo/go/errors/errors_test.go +++ b/libgo/go/errors/errors_test.go @@ -5,29 +5,49 @@ package errors_test import ( - . "errors" + "errors" + "fmt" "testing" ) func TestNewEqual(t *testing.T) { // Different allocations should not be equal. - if New("abc") == New("abc") { + if errors.New("abc") == errors.New("abc") { t.Errorf(`New("abc") == New("abc")`) } - if New("abc") == New("xyz") { + if errors.New("abc") == errors.New("xyz") { t.Errorf(`New("abc") == New("xyz")`) } // Same allocation should be equal to itself (not crash). - err := New("jkl") + err := errors.New("jkl") if err != err { t.Errorf(`err != err`) } } func TestErrorMethod(t *testing.T) { - err := New("abc") + err := errors.New("abc") if err.Error() != "abc" { t.Errorf(`New("abc").Error() = %q, want %q`, err.Error(), "abc") } } + +func ExampleNew() { + err := errors.New("emit macho dwarf: elf header corrupted") + if err != nil { + fmt.Print(err) + } + // Output: emit macho dwarf: elf header corrupted +} + +// The fmt package's Errorf function lets us use the package's formatting +// features to create descriptive error messages. +func ExampleNew_errorf() { + const name, id = "bimmler", 17 + err := fmt.Errorf("user %q (id %d) not found", name, id) + if err != nil { + fmt.Print(err) + } + // Output: user "bimmler" (id 17) not found +} diff --git a/libgo/go/exp/gotype/doc.go b/libgo/go/exp/gotype/doc.go index 1aa0faa751a..1168086771f 100644 --- a/libgo/go/exp/gotype/doc.go +++ b/libgo/go/exp/gotype/doc.go @@ -34,6 +34,8 @@ The flags are: Verbose mode. Debugging flags: + -comments + Parse comments (ignored if -ast not set). -ast Print AST (disables concurrent parsing). -trace diff --git a/libgo/go/exp/gotype/gotype.go b/libgo/go/exp/gotype/gotype.go index a2a9361866d..30eaf22fca6 100644 --- a/libgo/go/exp/gotype/gotype.go +++ b/libgo/go/exp/gotype/gotype.go @@ -27,8 +27,9 @@ var ( allErrors = flag.Bool("e", false, "print all (including spurious) errors") // debugging support - printTrace = flag.Bool("trace", false, "print parse trace") - printAST = flag.Bool("ast", false, "print AST") + parseComments = flag.Bool("comments", false, "parse comments (ignored if -ast not set)") + printTrace = flag.Bool("trace", false, "print parse trace") + printAST = flag.Bool("ast", false, "print AST") ) var exitCode = 0 @@ -73,6 +74,9 @@ func parse(fset *token.FileSet, filename string, src []byte) *ast.File { if *allErrors { mode |= parser.SpuriousErrors } + if *parseComments && *printAST { + mode |= parser.ParseComments + } if *printTrace { mode |= parser.Trace } diff --git a/libgo/go/exp/html/node.go b/libgo/go/exp/html/node.go index 83f17308b18..c105a4e709a 100644 --- a/libgo/go/exp/html/node.go +++ b/libgo/go/exp/html/node.go @@ -110,7 +110,7 @@ func (s *nodeStack) top() *Node { return nil } -// index returns the index of the top-most occurence of n in the stack, or -1 +// index returns the index of the top-most occurrence of n in the stack, or -1 // if n is not present. func (s *nodeStack) index(n *Node) int { for i := len(*s) - 1; i >= 0; i-- { diff --git a/libgo/go/exp/inotify/inotify_linux_test.go b/libgo/go/exp/inotify/inotify_linux_test.go index c2160fc6537..d41d66bfacd 100644 --- a/libgo/go/exp/inotify/inotify_linux_test.go +++ b/libgo/go/exp/inotify/inotify_linux_test.go @@ -7,6 +7,7 @@ package inotify import ( + "io/ioutil" "os" "testing" "time" @@ -16,16 +17,19 @@ func TestInotifyEvents(t *testing.T) { // Create an inotify watcher instance and initialize it watcher, err := NewWatcher() if err != nil { - t.Fatalf("NewWatcher() failed: %s", err) + t.Fatalf("NewWatcher failed: %s", err) } - t.Logf("NEEDS TO BE CONVERTED TO NEW GO TOOL") // TODO - return + dir, err := ioutil.TempDir("", "inotify") + if err != nil { + t.Fatalf("TempDir failed: %s", err) + } + defer os.RemoveAll(dir) // Add a watch for "_test" - err = watcher.Watch("_test") + err = watcher.Watch(dir) if err != nil { - t.Fatalf("Watcher.Watch() failed: %s", err) + t.Fatalf("Watch failed: %s", err) } // Receive errors on the error channel on a separate goroutine @@ -35,7 +39,7 @@ func TestInotifyEvents(t *testing.T) { } }() - const testFile string = "_test/TestInotifyEvents.testfile" + testFile := dir + "/TestInotifyEvents.testfile" // Receive events on the event channel on a separate goroutine eventstream := watcher.Event @@ -58,7 +62,7 @@ func TestInotifyEvents(t *testing.T) { // This should add at least one event to the inotify event queue _, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { - t.Fatalf("creating test file failed: %s", err) + t.Fatalf("creating test file: %s", err) } // We expect this event to be received almost immediately, but let's wait 1 s to be sure @@ -95,7 +99,7 @@ func TestInotifyClose(t *testing.T) { t.Fatal("double Close() test failed: second Close() call didn't return") } - err := watcher.Watch("_test") + err := watcher.Watch(os.TempDir()) if err == nil { t.Fatal("expected error on Watch() after Close(), got nil") } diff --git a/libgo/go/exp/norm/composition.go b/libgo/go/exp/norm/composition.go index 5b48292cc3b..2cbe1ac730e 100644 --- a/libgo/go/exp/norm/composition.go +++ b/libgo/go/exp/norm/composition.go @@ -66,6 +66,18 @@ func (rb *reorderBuffer) flush(out []byte) []byte { return out } +// flushCopy copies the normalized segment to buf and resets rb. +// It returns the number of bytes written to buf. +func (rb *reorderBuffer) flushCopy(buf []byte) int { + p := 0 + for i := 0; i < rb.nrune; i++ { + runep := rb.rune[i] + p += copy(buf[p:], rb.byte[runep.pos:runep.pos+runep.size]) + } + rb.reset() + return p +} + // insertOrdered inserts a rune in the buffer, ordered by Canonical Combining Class. // It returns false if the buffer is not large enough to hold the rune. // It is used internally by insert and insertString only. @@ -96,32 +108,41 @@ func (rb *reorderBuffer) insertOrdered(info runeInfo) bool { // insert inserts the given rune in the buffer ordered by CCC. // It returns true if the buffer was large enough to hold the decomposed rune. func (rb *reorderBuffer) insert(src input, i int, info runeInfo) bool { - if info.size == 3 { - if rune := src.hangul(i); rune != 0 { - return rb.decomposeHangul(rune) - } + if rune := src.hangul(i); rune != 0 { + return rb.decomposeHangul(rune) } if info.hasDecomposition() { - dcomp := rb.f.decompose(src, i) - rb.tmpBytes = inputBytes(dcomp) - for i := 0; i < len(dcomp); { - info = rb.f.info(&rb.tmpBytes, i) - pos := rb.nbyte - if !rb.insertOrdered(info) { - return false - } - end := i + int(info.size) - copy(rb.byte[pos:], dcomp[i:end]) - i = end - } - } else { - // insertOrder changes nbyte + return rb.insertDecomposed(info.decomposition()) + } + return rb.insertSingle(src, i, info) +} + +// insertDecomposed inserts an entry in to the reorderBuffer for each rune +// in dcomp. dcomp must be a sequence of decomposed UTF-8-encoded runes. +func (rb *reorderBuffer) insertDecomposed(dcomp []byte) bool { + saveNrune, saveNbyte := rb.nrune, rb.nbyte + rb.tmpBytes = inputBytes(dcomp) + for i := 0; i < len(dcomp); { + info := rb.f.info(&rb.tmpBytes, i) pos := rb.nbyte if !rb.insertOrdered(info) { + rb.nrune, rb.nbyte = saveNrune, saveNbyte return false } - src.copySlice(rb.byte[pos:], i, i+int(info.size)) + i += copy(rb.byte[pos:], dcomp[i:i+int(info.size)]) + } + return true +} + +// insertSingle inserts an entry in the reorderBuffer for the rune at +// position i. info is the runeInfo for the rune at position i. +func (rb *reorderBuffer) insertSingle(src input, i int, info runeInfo) bool { + // insertOrder changes nbyte + pos := rb.nbyte + if !rb.insertOrdered(info) { + return false } + src.copySlice(rb.byte[pos:], i, i+int(info.size)) return true } @@ -182,8 +203,12 @@ const ( jamoLVTCount = 19 * 21 * 28 ) -// Caller must verify that len(b) >= 3. +const hangulUTF8Size = 3 + func isHangul(b []byte) bool { + if len(b) < hangulUTF8Size { + return false + } b0 := b[0] if b0 < hangulBase0 { return false @@ -202,8 +227,10 @@ func isHangul(b []byte) bool { return b1 == hangulEnd1 && b[2] < hangulEnd2 } -// Caller must verify that len(b) >= 3. func isHangulString(b string) bool { + if len(b) < hangulUTF8Size { + return false + } b0 := b[0] if b0 < hangulBase0 { return false @@ -234,6 +261,22 @@ func isHangulWithoutJamoT(b []byte) bool { return c < jamoLVTCount && c%jamoTCount == 0 } +// decomposeHangul writes the decomposed Hangul to buf and returns the number +// of bytes written. len(buf) should be at least 9. +func decomposeHangul(buf []byte, r rune) int { + const JamoUTF8Len = 3 + r -= hangulBase + x := r % jamoTCount + r /= jamoTCount + utf8.EncodeRune(buf, jamoLBase+r/jamoVCount) + utf8.EncodeRune(buf[JamoUTF8Len:], jamoVBase+r%jamoVCount) + if x != 0 { + utf8.EncodeRune(buf[2*JamoUTF8Len:], jamoTBase+x) + return 3 * JamoUTF8Len + } + return 2 * JamoUTF8Len +} + // decomposeHangul algorithmically decomposes a Hangul rune into // its Jamo components. // See http://unicode.org/reports/tr15/#Hangul for details on decomposing Hangul. diff --git a/libgo/go/exp/norm/composition_test.go b/libgo/go/exp/norm/composition_test.go index e32380d7afa..9de9eacfd65 100644 --- a/libgo/go/exp/norm/composition_test.go +++ b/libgo/go/exp/norm/composition_test.go @@ -47,14 +47,14 @@ func runTests(t *testing.T, name string, fm Form, f insertFunc, tests []TestCase } } -func TestFlush(t *testing.T) { +type flushFunc func(rb *reorderBuffer) []byte + +func testFlush(t *testing.T, name string, fn flushFunc) { rb := reorderBuffer{} rb.init(NFC, nil) - out := make([]byte, 0) - - out = rb.flush(out) + out := fn(&rb) if len(out) != 0 { - t.Errorf("wrote bytes on flush of empty buffer. (len(out) = %d)", len(out)) + t.Errorf("%s: wrote bytes on flush of empty buffer. (len(out) = %d)", name, len(out)) } for _, r := range []rune("world!") { @@ -65,16 +65,32 @@ func TestFlush(t *testing.T) { out = rb.flush(out) want := "Hello world!" if string(out) != want { - t.Errorf(`output after flush was "%s"; want "%s"`, string(out), want) + t.Errorf(`%s: output after flush was "%s"; want "%s"`, name, string(out), want) } if rb.nrune != 0 { - t.Errorf("flush: non-null size of info buffer (rb.nrune == %d)", rb.nrune) + t.Errorf("%s: non-null size of info buffer (rb.nrune == %d)", name, rb.nrune) } if rb.nbyte != 0 { - t.Errorf("flush: non-null size of byte buffer (rb.nbyte == %d)", rb.nbyte) + t.Errorf("%s: non-null size of byte buffer (rb.nbyte == %d)", name, rb.nbyte) } } +func flushF(rb *reorderBuffer) []byte { + out := make([]byte, 0) + return rb.flush(out) +} + +func flushCopyF(rb *reorderBuffer) []byte { + out := make([]byte, MaxSegmentSize) + n := rb.flushCopy(out) + return out[:n] +} + +func TestFlush(t *testing.T) { + testFlush(t, "flush", flushF) + testFlush(t, "flushCopy", flushCopyF) +} + var insertTests = []TestCase{ {[]rune{'a'}, []rune{'a'}}, {[]rune{0x300}, []rune{0x300}}, diff --git a/libgo/go/exp/norm/forminfo.go b/libgo/go/exp/norm/forminfo.go index bf4443c9916..c443b78d825 100644 --- a/libgo/go/exp/norm/forminfo.go +++ b/libgo/go/exp/norm/forminfo.go @@ -6,25 +6,50 @@ package norm // This file contains Form-specific logic and wrappers for data in tables.go. +// Rune info is stored in a separate trie per composing form. A composing form +// and its corresponding decomposing form share the same trie. Each trie maps +// a rune to a uint16. The values take two forms. For v >= 0x8000: +// bits +// 0..8: ccc +// 9..12: qcInfo (see below). isYesD is always true (no decompostion). +// 16: 1 +// For v < 0x8000, the respective rune has a decomposition and v is an index +// into a byte array of UTF-8 decomposition sequences and additional info and +// has the form: +// <header> <decomp_byte>* [<tccc> [<lccc>]] +// The header contains the number of bytes in the decomposition (excluding this +// length byte). The two most significant bits of this length byte correspond +// to bit 2 and 3 of qcIfo (see below). The byte sequence itself starts at v+1. +// The byte sequence is followed by a trailing and leading CCC if the values +// for these are not zero. The value of v determines which ccc are appended +// to the sequences. For v < firstCCC, there are none, for v >= firstCCC, +// the sequence is followed by a trailing ccc, and for v >= firstLeadingCC +// there is an additional leading ccc. + +const ( + qcInfoMask = 0xF // to clear all but the relevant bits in a qcInfo + headerLenMask = 0x3F // extract the length value from the header byte + headerFlagsMask = 0xC0 // extract the qcInfo bits from the header byte +) + +// runeInfo is a representation for the data stored in charinfoTrie. type runeInfo struct { pos uint8 // start position in reorderBuffer; used in composition.go size uint8 // length of UTF-8 encoding of this rune - ccc uint8 // canonical combining class + ccc uint8 // leading canonical combining class (ccc if not decomposition) + tccc uint8 // trailing canonical combining class (ccc if not decomposition) flags qcInfo // quick check flags + index uint16 } // functions dispatchable per form type lookupFunc func(b input, i int) runeInfo -type decompFunc func(b input, i int) []byte // formInfo holds Form-specific functions and tables. type formInfo struct { - form Form - + form Form composing, compatibility bool // form type - - decompose decompFunc - info lookupFunc + info lookupFunc } var formTable []*formInfo @@ -38,10 +63,8 @@ func init() { f.form = Form(i) if Form(i) == NFKD || Form(i) == NFKC { f.compatibility = true - f.decompose = decomposeNFKC f.info = lookupInfoNFKC } else { - f.decompose = decomposeNFC f.info = lookupInfoNFC } if Form(i) == NFC || Form(i) == NFKC { @@ -76,8 +99,6 @@ func (i runeInfo) boundaryAfter() bool { // // When all 4 bits are zero, the character is inert, meaning it is never // influenced by normalization. -// -// We pack the bits for both NFC/D and NFKC/D in one byte. type qcInfo uint8 func (i runeInfo) isYesC() bool { return i.flags&0x4 == 0 } @@ -91,22 +112,12 @@ func (r runeInfo) isInert() bool { return r.flags&0xf == 0 && r.ccc == 0 } -// Wrappers for tables.go - -// The 16-bit value of the decomposition tries is an index into a byte -// array of UTF-8 decomposition sequences. The first byte is the number -// of bytes in the decomposition (excluding this length byte). The actual -// sequence starts at the offset+1. -func decomposeNFC(s input, i int) []byte { - p := s.decomposeNFC(i) - n := decomps[p] - p++ - return decomps[p : p+uint16(n)] -} - -func decomposeNFKC(s input, i int) []byte { - p := s.decomposeNFKC(i) - n := decomps[p] +func (r runeInfo) decomposition() []byte { + if r.index == 0 { + return nil + } + p := r.index + n := decomps[p] & 0x3F p++ return decomps[p : p+uint16(n)] } @@ -124,16 +135,40 @@ func combine(a, b rune) rune { return recompMap[key] } -// The 16-bit character info has the following bit layout: -// 0..7 CCC value. -// 8..11 qcInfo for NFC/NFD -// 12..15 qcInfo for NFKC/NFKD func lookupInfoNFC(b input, i int) runeInfo { - v, sz := b.charinfo(i) - return runeInfo{size: uint8(sz), ccc: uint8(v), flags: qcInfo(v >> 8)} + v, sz := b.charinfoNFC(i) + return compInfo(v, sz) } func lookupInfoNFKC(b input, i int) runeInfo { - v, sz := b.charinfo(i) - return runeInfo{size: uint8(sz), ccc: uint8(v), flags: qcInfo(v >> 12)} + v, sz := b.charinfoNFKC(i) + return compInfo(v, sz) +} + +// compInfo converts the information contained in v and sz +// to a runeInfo. See the comment at the top of the file +// for more information on the format. +func compInfo(v uint16, sz int) runeInfo { + if v == 0 { + return runeInfo{size: uint8(sz)} + } else if v >= 0x8000 { + return runeInfo{ + size: uint8(sz), + ccc: uint8(v), + tccc: uint8(v), + flags: qcInfo(v>>8) & qcInfoMask, + } + } + // has decomposition + h := decomps[v] + f := (qcInfo(h&headerFlagsMask) >> 4) | 0x1 + ri := runeInfo{size: uint8(sz), flags: f, index: v} + if v >= firstCCC { + v += uint16(h&headerLenMask) + 1 + ri.tccc = decomps[v] + if v >= firstLeadingCCC { + ri.ccc = decomps[v+1] + } + } + return ri } diff --git a/libgo/go/exp/norm/input.go b/libgo/go/exp/norm/input.go index 7276c66cc12..9c564d67718 100644 --- a/libgo/go/exp/norm/input.go +++ b/libgo/go/exp/norm/input.go @@ -7,20 +7,19 @@ package norm import "unicode/utf8" type input interface { - skipASCII(p int) int + skipASCII(p, max int) int skipNonStarter(p int) int appendSlice(buf []byte, s, e int) []byte copySlice(buf []byte, s, e int) - charinfo(p int) (uint16, int) - decomposeNFC(p int) uint16 - decomposeNFKC(p int) uint16 + charinfoNFC(p int) (uint16, int) + charinfoNFKC(p int) (uint16, int) hangul(p int) rune } type inputString string -func (s inputString) skipASCII(p int) int { - for ; p < len(s) && s[p] < utf8.RuneSelf; p++ { +func (s inputString) skipASCII(p, max int) int { + for ; p < max && s[p] < utf8.RuneSelf; p++ { } return p } @@ -42,16 +41,12 @@ func (s inputString) copySlice(buf []byte, b, e int) { copy(buf, s[b:e]) } -func (s inputString) charinfo(p int) (uint16, int) { - return charInfoTrie.lookupString(string(s[p:])) +func (s inputString) charinfoNFC(p int) (uint16, int) { + return nfcTrie.lookupString(string(s[p:])) } -func (s inputString) decomposeNFC(p int) uint16 { - return nfcDecompTrie.lookupStringUnsafe(string(s[p:])) -} - -func (s inputString) decomposeNFKC(p int) uint16 { - return nfkcDecompTrie.lookupStringUnsafe(string(s[p:])) +func (s inputString) charinfoNFKC(p int) (uint16, int) { + return nfkcTrie.lookupString(string(s[p:])) } func (s inputString) hangul(p int) rune { @@ -64,8 +59,8 @@ func (s inputString) hangul(p int) rune { type inputBytes []byte -func (s inputBytes) skipASCII(p int) int { - for ; p < len(s) && s[p] < utf8.RuneSelf; p++ { +func (s inputBytes) skipASCII(p, max int) int { + for ; p < max && s[p] < utf8.RuneSelf; p++ { } return p } @@ -84,16 +79,12 @@ func (s inputBytes) copySlice(buf []byte, b, e int) { copy(buf, s[b:e]) } -func (s inputBytes) charinfo(p int) (uint16, int) { - return charInfoTrie.lookup(s[p:]) -} - -func (s inputBytes) decomposeNFC(p int) uint16 { - return nfcDecompTrie.lookupUnsafe(s[p:]) +func (s inputBytes) charinfoNFC(p int) (uint16, int) { + return nfcTrie.lookup(s[p:]) } -func (s inputBytes) decomposeNFKC(p int) uint16 { - return nfkcDecompTrie.lookupUnsafe(s[p:]) +func (s inputBytes) charinfoNFKC(p int) (uint16, int) { + return nfkcTrie.lookup(s[p:]) } func (s inputBytes) hangul(p int) rune { diff --git a/libgo/go/exp/norm/iter.go b/libgo/go/exp/norm/iter.go new file mode 100644 index 00000000000..761ba90cdd4 --- /dev/null +++ b/libgo/go/exp/norm/iter.go @@ -0,0 +1,286 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +const MaxSegmentSize = maxByteBufferSize + +// An Iter iterates over a string or byte slice, while normalizing it +// to a given Form. +type Iter struct { + rb reorderBuffer + info runeInfo // first character saved from previous iteration + next iterFunc // implementation of next depends on form + + p int // current position in input source + outStart int // start of current segment in output buffer + inStart int // start of current segment in input source + maxp int // position in output buffer after which not to start a new segment + maxseg int // for tracking an excess of combining characters + + tccc uint8 + done bool +} + +type iterFunc func(*Iter, []byte) int + +// SetInput initializes i to iterate over src after normalizing it to Form f. +func (i *Iter) SetInput(f Form, src []byte) { + i.rb.init(f, src) + if i.rb.f.composing { + i.next = nextComposed + } else { + i.next = nextDecomposed + } + i.p = 0 + if i.done = len(src) == 0; !i.done { + i.info = i.rb.f.info(i.rb.src, i.p) + } +} + +// SetInputString initializes i to iterate over src after normalizing it to Form f. +func (i *Iter) SetInputString(f Form, src string) { + i.rb.initString(f, src) + if i.rb.f.composing { + i.next = nextComposed + } else { + i.next = nextDecomposed + } + i.p = 0 + if i.done = len(src) == 0; !i.done { + i.info = i.rb.f.info(i.rb.src, i.p) + } +} + +// Pos returns the byte position at which the next call to Next will commence processing. +func (i *Iter) Pos() int { + return i.p +} + +// Done returns true if there is no more input to process. +func (i *Iter) Done() bool { + return i.done +} + +// Next writes f(i.input[i.Pos():n]...) to buffer buf, where n is the +// largest boundary of i.input such that the result fits in buf. +// It returns the number of bytes written to buf. +// len(buf) should be at least MaxSegmentSize. +// Done must be false before calling Next. +func (i *Iter) Next(buf []byte) int { + return i.next(i, buf) +} + +func (i *Iter) initNext(outn, inStart int) { + i.outStart = 0 + i.inStart = inStart + i.maxp = outn - MaxSegmentSize + i.maxseg = MaxSegmentSize +} + +// setStart resets the start of the new segment to the given position. +// It returns true if there is not enough room for the new segment. +func (i *Iter) setStart(outp, inp int) bool { + if outp > i.maxp { + return true + } + i.outStart = outp + i.inStart = inp + i.maxseg = outp + MaxSegmentSize + return false +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +// nextDecomposed is the implementation of Next for forms NFD and NFKD. +func nextDecomposed(i *Iter, out []byte) int { + var outp int + i.initNext(len(out), i.p) +doFast: + inCopyStart, outCopyStart := i.p, outp // invariant xCopyStart <= i.xStart + for { + if sz := int(i.info.size); sz <= 1 { + // ASCII or illegal byte. Either way, advance by 1. + i.p++ + outp++ + max := min(i.rb.nsrc, len(out)-outp+i.p) + if np := i.rb.src.skipASCII(i.p, max); np > i.p { + outp += np - i.p + i.p = np + if i.p >= i.rb.nsrc { + break + } + // ASCII may combine with consecutive runes. + if i.setStart(outp-1, i.p-1) { + i.p-- + outp-- + i.info.size = 1 + break + } + } + } else if d := i.info.decomposition(); d != nil { + i.rb.src.copySlice(out[outCopyStart:], inCopyStart, i.p) + p := outp + len(d) + if p > i.maxseg && i.setStart(outp, i.p) { + return outp + } + copy(out[outp:], d) + outp = p + i.p += sz + inCopyStart, outCopyStart = i.p, outp + } else if r := i.rb.src.hangul(i.p); r != 0 { + i.rb.src.copySlice(out[outCopyStart:], inCopyStart, i.p) + for { + outp += decomposeHangul(out[outp:], r) + i.p += hangulUTF8Size + if r = i.rb.src.hangul(i.p); r == 0 { + break + } + if i.setStart(outp, i.p) { + return outp + } + } + inCopyStart, outCopyStart = i.p, outp + } else { + p := outp + sz + if p > i.maxseg && i.setStart(outp, i.p) { + break + } + outp = p + i.p += sz + } + if i.p >= i.rb.nsrc { + break + } + prevCC := i.info.tccc + i.info = i.rb.f.info(i.rb.src, i.p) + if cc := i.info.ccc; cc == 0 { + if i.setStart(outp, i.p) { + break + } + } else if cc < prevCC { + goto doNorm + } + } + if inCopyStart != i.p { + i.rb.src.copySlice(out[outCopyStart:], inCopyStart, i.p) + } + i.done = i.p >= i.rb.nsrc + return outp +doNorm: + // Insert what we have decomposed so far in the reorderBuffer. + // As we will only reorder, there will always be enough room. + i.rb.src.copySlice(out[outCopyStart:], inCopyStart, i.p) + if !i.rb.insertDecomposed(out[i.outStart:outp]) { + // Start over to prevent decompositions from crossing segment boundaries. + // This is a rare occurance. + i.p = i.inStart + i.info = i.rb.f.info(i.rb.src, i.p) + } + outp = i.outStart + for { + if !i.rb.insert(i.rb.src, i.p, i.info) { + break + } + if i.p += int(i.info.size); i.p >= i.rb.nsrc { + outp += i.rb.flushCopy(out[outp:]) + i.done = true + return outp + } + i.info = i.rb.f.info(i.rb.src, i.p) + if i.info.ccc == 0 { + break + } + } + // new segment or too many combining characters: exit normalization + if outp += i.rb.flushCopy(out[outp:]); i.setStart(outp, i.p) { + return outp + } + goto doFast +} + +// nextComposed is the implementation of Next for forms NFC and NFKC. +func nextComposed(i *Iter, out []byte) int { + var outp int + i.initNext(len(out), i.p) +doFast: + inCopyStart, outCopyStart := i.p, outp // invariant xCopyStart <= i.xStart + var prevCC uint8 + for { + if !i.info.isYesC() { + goto doNorm + } + if cc := i.info.ccc; cc == 0 { + if i.setStart(outp, i.p) { + break + } + } else if cc < prevCC { + goto doNorm + } + prevCC = i.info.tccc + sz := int(i.info.size) + if sz == 0 { + sz = 1 // illegal rune: copy byte-by-byte + } + p := outp + sz + if p > i.maxseg && i.setStart(outp, i.p) { + break + } + outp = p + i.p += sz + max := min(i.rb.nsrc, len(out)-outp+i.p) + if np := i.rb.src.skipASCII(i.p, max); np > i.p { + outp += np - i.p + i.p = np + if i.p >= i.rb.nsrc { + break + } + // ASCII may combine with consecutive runes. + if i.setStart(outp-1, i.p-1) { + i.p-- + outp-- + i.info = runeInfo{size: 1} + break + } + } + if i.p >= i.rb.nsrc { + break + } + i.info = i.rb.f.info(i.rb.src, i.p) + } + if inCopyStart != i.p { + i.rb.src.copySlice(out[outCopyStart:], inCopyStart, i.p) + } + i.done = i.p >= i.rb.nsrc + return outp +doNorm: + i.rb.src.copySlice(out[outCopyStart:], inCopyStart, i.inStart) + outp, i.p = i.outStart, i.inStart + i.info = i.rb.f.info(i.rb.src, i.p) + for { + if !i.rb.insert(i.rb.src, i.p, i.info) { + break + } + if i.p += int(i.info.size); i.p >= i.rb.nsrc { + i.rb.compose() + outp += i.rb.flushCopy(out[outp:]) + i.done = true + return outp + } + i.info = i.rb.f.info(i.rb.src, i.p) + if i.info.boundaryBefore() { + break + } + } + i.rb.compose() + if outp += i.rb.flushCopy(out[outp:]); i.setStart(outp, i.p) { + return outp + } + goto doFast +} diff --git a/libgo/go/exp/norm/iter_test.go b/libgo/go/exp/norm/iter_test.go new file mode 100644 index 00000000000..f6e8d817251 --- /dev/null +++ b/libgo/go/exp/norm/iter_test.go @@ -0,0 +1,186 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package norm + +import ( + "strings" + "testing" +) + +var iterBufSizes = []int{ + MaxSegmentSize, + 1.5 * MaxSegmentSize, + 2 * MaxSegmentSize, + 3 * MaxSegmentSize, + 100 * MaxSegmentSize, +} + +func doIterNorm(f Form, buf []byte, s string) []byte { + acc := []byte{} + i := Iter{} + i.SetInputString(f, s) + for !i.Done() { + n := i.Next(buf) + acc = append(acc, buf[:n]...) + } + return acc +} + +func runIterTests(t *testing.T, name string, f Form, tests []AppendTest, norm bool) { + for i, test := range tests { + in := test.left + test.right + gold := test.out + if norm { + gold = string(f.AppendString(nil, test.out)) + } + for _, sz := range iterBufSizes { + buf := make([]byte, sz) + out := string(doIterNorm(f, buf, in)) + if len(out) != len(gold) { + const msg = "%s:%d:%d: length is %d; want %d" + t.Errorf(msg, name, i, sz, len(out), len(gold)) + } + if out != gold { + // Find first rune that differs and show context. + ir := []rune(out) + ig := []rune(gold) + for j := 0; j < len(ir) && j < len(ig); j++ { + if ir[j] == ig[j] { + continue + } + if j -= 3; j < 0 { + j = 0 + } + for e := j + 7; j < e && j < len(ir) && j < len(ig); j++ { + const msg = "%s:%d:%d: runeAt(%d) = %U; want %U" + t.Errorf(msg, name, i, sz, j, ir[j], ig[j]) + } + break + } + } + } + } +} + +func rep(r rune, n int) string { + return strings.Repeat(string(r), n) +} + +var iterTests = []AppendTest{ + {"", ascii, ascii}, + {"", txt_all, txt_all}, + {"", "a" + rep(0x0300, MaxSegmentSize/2), "a" + rep(0x0300, MaxSegmentSize/2)}, +} + +var iterTestsD = []AppendTest{ + { // segment overflow on unchanged character + "", + "a" + rep(0x0300, MaxSegmentSize/2) + "\u0316", + "a" + rep(0x0300, MaxSegmentSize/2-1) + "\u0316\u0300", + }, + { // segment overflow on unchanged character + start value + "", + "a" + rep(0x0300, MaxSegmentSize/2+maxCombiningChars+4) + "\u0316", + "a" + rep(0x0300, MaxSegmentSize/2+maxCombiningChars) + "\u0316" + rep(0x300, 4), + }, + { // segment overflow on decomposition + "", + "a" + rep(0x0300, MaxSegmentSize/2-1) + "\u0340", + "a" + rep(0x0300, MaxSegmentSize/2), + }, + { // segment overflow on decomposition + start value + "", + "a" + rep(0x0300, MaxSegmentSize/2-1) + "\u0340" + rep(0x300, maxCombiningChars+4) + "\u0320", + "a" + rep(0x0300, MaxSegmentSize/2-1) + rep(0x300, maxCombiningChars+1) + "\u0320" + rep(0x300, 4), + }, + { // start value after ASCII overflow + "", + rep('a', MaxSegmentSize) + rep(0x300, maxCombiningChars+2) + "\u0320", + rep('a', MaxSegmentSize) + rep(0x300, maxCombiningChars) + "\u0320\u0300\u0300", + }, + { // start value after Hangul overflow + "", + rep(0xAC00, MaxSegmentSize/6) + rep(0x300, maxCombiningChars+2) + "\u0320", + strings.Repeat("\u1100\u1161", MaxSegmentSize/6) + rep(0x300, maxCombiningChars-1) + "\u0320" + rep(0x300, 3), + }, + { // start value after cc=0 + "", + "您您" + rep(0x300, maxCombiningChars+4) + "\u0320", + "您您" + rep(0x300, maxCombiningChars) + "\u0320" + rep(0x300, 4), + }, + { // start value after normalization + "", + "\u0300\u0320a" + rep(0x300, maxCombiningChars+4) + "\u0320", + "\u0320\u0300a" + rep(0x300, maxCombiningChars) + "\u0320" + rep(0x300, 4), + }, +} + +var iterTestsC = []AppendTest{ + { // ordering of non-composing combining characters + "", + "\u0305\u0316", + "\u0316\u0305", + }, + { // segment overflow + "", + "a" + rep(0x0305, MaxSegmentSize/2+4) + "\u0316", + "a" + rep(0x0305, MaxSegmentSize/2-1) + "\u0316" + rep(0x305, 5), + }, +} + +func TestIterNextD(t *testing.T) { + runIterTests(t, "IterNextD1", NFKD, appendTests, true) + runIterTests(t, "IterNextD2", NFKD, iterTests, true) + runIterTests(t, "IterNextD3", NFKD, iterTestsD, false) +} + +func TestIterNextC(t *testing.T) { + runIterTests(t, "IterNextC1", NFKC, appendTests, true) + runIterTests(t, "IterNextC2", NFKC, iterTests, true) + runIterTests(t, "IterNextC3", NFKC, iterTestsC, false) +} + +type SegmentTest struct { + in string + out []string +} + +var segmentTests = []SegmentTest{ + {rep('a', MaxSegmentSize), []string{rep('a', MaxSegmentSize), ""}}, + {rep('a', MaxSegmentSize+2), []string{rep('a', MaxSegmentSize-1), "aaa", ""}}, + {rep('a', MaxSegmentSize) + "\u0300aa", []string{rep('a', MaxSegmentSize-1), "a\u0300", "aa", ""}}, +} + +// Note that, by design, segmentation is equal for composing and decomposing forms. +func TestIterSegmentation(t *testing.T) { + segmentTest(t, "SegmentTestD", NFD, segmentTests) + segmentTest(t, "SegmentTestC", NFC, segmentTests) +} + +func segmentTest(t *testing.T, name string, f Form, tests []SegmentTest) { + iter := Iter{} + for i, tt := range segmentTests { + buf := make([]byte, MaxSegmentSize) + iter.SetInputString(f, tt.in) + for j, seg := range tt.out { + if seg == "" { + if !iter.Done() { + n := iter.Next(buf) + res := string(buf[:n]) + t.Errorf(`%s:%d:%d: expected Done()==true, found segment "%s"`, name, i, j, res) + } + continue + } + if iter.Done() { + t.Errorf("%s:%d:%d: Done()==true, want false", name, i, j) + } + n := iter.Next(buf) + seg = f.String(seg) + if res := string(buf[:n]); res != seg { + t.Errorf(`%s:%d:%d" segment was "%s" (%d); want "%s" (%d)`, name, i, j, res, len(res), seg, len(seg)) + } + } + } +} diff --git a/libgo/go/exp/norm/maketables.go b/libgo/go/exp/norm/maketables.go index 43e1429c1b1..bb21bb58109 100644 --- a/libgo/go/exp/norm/maketables.go +++ b/libgo/go/exp/norm/maketables.go @@ -2,8 +2,11 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// +build ignore + // Normalization table generator. // Data read from the web. +// See forminfo.go for a description of the trie values associated with each rune. package main @@ -17,6 +20,7 @@ import ( "net/http" "os" "regexp" + "sort" "strconv" "strings" ) @@ -187,18 +191,14 @@ func (f FormInfo) String() string { fmt.Fprintf(buf, " cmbBackward: %v\n", f.combinesBackward) fmt.Fprintf(buf, " isOneWay: %v\n", f.isOneWay) fmt.Fprintf(buf, " inDecomp: %v\n", f.inDecomp) - fmt.Fprintf(buf, " decomposition: %v\n", f.decomp) - fmt.Fprintf(buf, " expandedDecomp: %v\n", f.expandedDecomp) + fmt.Fprintf(buf, " decomposition: %X\n", f.decomp) + fmt.Fprintf(buf, " expandedDecomp: %X\n", f.expandedDecomp) return buf.String() } type Decomposition []rune -func (d Decomposition) String() string { - return fmt.Sprintf("%.4X", d) -} - func openReader(file string) (input io.ReadCloser) { if *localFiles { f, err := os.Open(file) @@ -571,80 +571,121 @@ func makeEntry(f *FormInfo) uint16 { return e } -// Bits -// 0..8: CCC -// 9..12: NF(C|D) qc bits. -// 13..16: NFK(C|D) qc bits. -func makeCharInfo(c Char) uint16 { - e := makeEntry(&c.forms[FCompatibility]) - e = e<<4 | makeEntry(&c.forms[FCanonical]) - e = e<<8 | uint16(c.ccc) - return e +// decompSet keeps track of unique decompositions, grouped by whether +// the decomposition is followed by a trailing and/or leading CCC. +type decompSet [4]map[string]bool + +func makeDecompSet() decompSet { + m := decompSet{} + for i, _ := range m { + m[i] = make(map[string]bool) + } + return m +} +func (m *decompSet) insert(key int, s string) { + m[key][s] = true } func printCharInfoTables() int { - // Quick Check + CCC trie. - t := newNode() - for i, char := range chars { - v := makeCharInfo(char) - if v != 0 { - t.insert(rune(i), v) + mkstr := func(r rune, f *FormInfo) (int, string) { + d := f.expandedDecomp + s := string([]rune(d)) + if max := 1 << 6; len(s) >= max { + const msg = "%U: too many bytes in decomposition: %d >= %d" + logger.Fatalf(msg, r, len(s), max) + } + head := uint8(len(s)) + if f.quickCheck[MComposed] != QCYes { + head |= 0x40 + } + if f.combinesForward { + head |= 0x80 + } + s = string([]byte{head}) + s + + lccc := ccc(d[0]) + tccc := ccc(d[len(d)-1]) + if tccc < lccc && lccc != 0 { + const msg = "%U: lccc (%d) must be <= tcc (%d)" + logger.Fatalf(msg, r, lccc, tccc) + } + index := 0 + if tccc > 0 || lccc > 0 { + s += string([]byte{tccc}) + index = 1 + if lccc > 0 { + s += string([]byte{lccc}) + index |= 2 + } } + return index, s } - return t.printTables("charInfo") -} -func printDecompositionTables() int { - decompositions := bytes.NewBuffer(make([]byte, 0, 10000)) - size := 0 - - // Map decompositions - positionMap := make(map[string]uint16) + decompSet := makeDecompSet() // Store the uniqued decompositions in a byte buffer, // preceded by their byte length. for _, c := range chars { - for f := 0; f < 2; f++ { - d := c.forms[f].expandedDecomp - s := string([]rune(d)) - if _, ok := positionMap[s]; !ok { - p := decompositions.Len() - decompositions.WriteByte(uint8(len(s))) - decompositions.WriteString(s) - positionMap[s] = uint16(p) + for _, f := range c.forms { + if len(f.expandedDecomp) == 0 { + continue } + if f.combinesBackward { + logger.Fatalf("%U: combinesBackward and decompose", c.codePoint) + } + index, s := mkstr(c.codePoint, &f) + decompSet.insert(index, s) } } + + decompositions := bytes.NewBuffer(make([]byte, 0, 10000)) + size := 0 + positionMap := make(map[string]uint16) + decompositions.WriteString("\000") + cname := []string{"firstCCC", "firstLeadingCCC", "", "lastDecomp"} + fmt.Println("const (") + for i, m := range decompSet { + sa := []string{} + for s, _ := range m { + sa = append(sa, s) + } + sort.Strings(sa) + for _, s := range sa { + p := decompositions.Len() + decompositions.WriteString(s) + positionMap[s] = uint16(p) + } + if cname[i] != "" { + fmt.Printf("%s = 0x%X\n", cname[i], decompositions.Len()) + } + } + fmt.Println("maxDecomp = 0x8000") + fmt.Println(")") b := decompositions.Bytes() printBytes(b, "decomps") size += len(b) - nfcT := newNode() - nfkcT := newNode() - for i, c := range chars { - d := c.forms[FCanonical].expandedDecomp - if len(d) != 0 { - nfcT.insert(rune(i), positionMap[string([]rune(d))]) - if ccc(c.codePoint) != ccc(d[0]) { - // We assume the lead ccc of a decomposition is !=0 in this case. - if ccc(d[0]) == 0 { - logger.Fatal("Expected differing CCC to be non-zero.") - } - } - } - d = c.forms[FCompatibility].expandedDecomp - if len(d) != 0 { - nfkcT.insert(rune(i), positionMap[string([]rune(d))]) - if ccc(c.codePoint) != ccc(d[0]) { - // We assume the lead ccc of a decomposition is !=0 in this case. - if ccc(d[0]) == 0 { - logger.Fatal("Expected differing CCC to be non-zero.") + varnames := []string{"nfc", "nfkc"} + for i := 0; i < FNumberOfFormTypes; i++ { + trie := newNode() + for r, c := range chars { + f := c.forms[i] + d := f.expandedDecomp + if len(d) != 0 { + _, key := mkstr(c.codePoint, &f) + trie.insert(rune(r), positionMap[key]) + if c.ccc != ccc(d[0]) { + // We assume the lead ccc of a decomposition !=0 in this case. + if ccc(d[0]) == 0 { + logger.Fatalf("Expected leading CCC to be non-zero; ccc is %d", c.ccc) + } } + } else if v := makeEntry(&f)<<8 | uint16(c.ccc); v != 0 { + trie.insert(c.codePoint, 0x8000|v) } } + size += trie.printTables(varnames[i]) } - size += nfcT.printTables("nfcDecomp") - size += nfkcT.printTables("nfkcDecomp") return size } @@ -687,15 +728,15 @@ func makeTables() { } list := strings.Split(*tablelist, ",") if *tablelist == "all" { - list = []string{"decomp", "recomp", "info"} + list = []string{"recomp", "info"} } fmt.Printf(fileHeader, *tablelist, *url) fmt.Println("// Version is the Unicode edition from which the tables are derived.") fmt.Printf("const Version = %q\n\n", version()) - if contains(list, "decomp") { - size += printDecompositionTables() + if contains(list, "info") { + size += printCharInfoTables() } if contains(list, "recomp") { @@ -730,9 +771,6 @@ func makeTables() { fmt.Printf("}\n\n") } - if contains(list, "info") { - size += printCharInfoTables() - } fmt.Printf("// Total size of tables: %dKB (%d bytes)\n", (size+512)/1024, size) } @@ -761,6 +799,11 @@ func verifyComputed() { log.Fatalf("%U: NF*C must be maybe if combinesBackward", i) } } + nfc := c.forms[FCanonical] + nfkc := c.forms[FCompatibility] + if nfc.combinesBackward != nfkc.combinesBackward { + logger.Fatalf("%U: Cannot combine combinesBackward\n", c.codePoint) + } } } diff --git a/libgo/go/exp/norm/maketesttables.go b/libgo/go/exp/norm/maketesttables.go index 20eb889ddef..d3112b4041c 100644 --- a/libgo/go/exp/norm/maketesttables.go +++ b/libgo/go/exp/norm/maketesttables.go @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// +build ignore + // Generate test data for trie code. package main diff --git a/libgo/go/exp/norm/normalize.go b/libgo/go/exp/norm/normalize.go index 26bb4a0dc47..b5cd44abfa0 100644 --- a/libgo/go/exp/norm/normalize.go +++ b/libgo/go/exp/norm/normalize.go @@ -243,7 +243,7 @@ func quickSpan(rb *reorderBuffer, i int) int { lastSegStart := i src, n := rb.src, rb.nsrc for i < n { - if j := src.skipASCII(i); i != j { + if j := src.skipASCII(i, n); i != j { i = j lastSegStart = i - 1 lastCC = 0 @@ -448,11 +448,16 @@ func decomposeToLastBoundary(rb *reorderBuffer, buf []byte) []byte { } // Check that decomposition doesn't result in overflow. if info.hasDecomposition() { - dcomp := rb.f.decompose(inputBytes(buf), p-int(info.size)) - for i := 0; i < len(dcomp); { - inf := rb.f.info(inputBytes(dcomp), i) - i += int(inf.size) + if isHangul(buf) { + i += int(info.size) n++ + } else { + dcomp := info.decomposition() + for i := 0; i < len(dcomp); { + inf := rb.f.info(inputBytes(dcomp), i) + i += int(inf.size) + n++ + } } } else { n++ diff --git a/libgo/go/exp/norm/normalize_test.go b/libgo/go/exp/norm/normalize_test.go index c7d5e08fca0..8b970598b4d 100644 --- a/libgo/go/exp/norm/normalize_test.go +++ b/libgo/go/exp/norm/normalize_test.go @@ -5,6 +5,7 @@ package norm import ( + "bytes" "strings" "testing" ) @@ -495,15 +496,40 @@ func TestAppend(t *testing.T) { runAppendTests(t, "TestString", NFKC, stringF, appendTests) } +func appendBench(f Form, in []byte) func() { + buf := make([]byte, 0, 4*len(in)) + return func() { + f.Append(buf, in...) + } +} + +func iterBench(f Form, in []byte) func() { + buf := make([]byte, 4*len(in)) + iter := Iter{} + return func() { + iter.SetInput(f, in) + for !iter.Done() { + iter.Next(buf) + } + } +} + +func appendBenchmarks(bm []func(), f Form, in []byte) []func() { + //bm = append(bm, appendBench(f, in)) + bm = append(bm, iterBench(f, in)) + return bm +} + func doFormBenchmark(b *testing.B, inf, f Form, s string) { b.StopTimer() in := inf.Bytes([]byte(s)) - buf := make([]byte, 2*len(in)) - b.SetBytes(int64(len(in))) + bm := appendBenchmarks(nil, f, in) + b.SetBytes(int64(len(in) * len(bm))) b.StartTimer() for i := 0; i < b.N; i++ { - buf = f.Append(buf[0:0], in...) - buf = buf[0:0] + for _, fn := range bm { + fn() + } } } @@ -549,17 +575,21 @@ func BenchmarkNormalizeHangulNFD2NFD(b *testing.B) { doFormBenchmark(b, NFD, NFD, txt_kr) } +var forms = []Form{NFC, NFD, NFKC, NFKD} + func doTextBenchmark(b *testing.B, s string) { b.StopTimer() - b.SetBytes(int64(len(s)) * 4) in := []byte(s) - var buf = make([]byte, 0, 2*len(in)) + bm := []func(){} + for _, f := range forms { + bm = appendBenchmarks(bm, f, in) + } + b.SetBytes(int64(len(s) * len(bm))) b.StartTimer() for i := 0; i < b.N; i++ { - NFC.Append(buf, in...) - NFD.Append(buf, in...) - NFKC.Append(buf, in...) - NFKD.Append(buf, in...) + for _, f := range bm { + f() + } } } @@ -584,6 +614,11 @@ func BenchmarkJapanese(b *testing.B) { func BenchmarkChinese(b *testing.B) { doTextBenchmark(b, txt_cn) } +func BenchmarkOverflow(b *testing.B) { + doTextBenchmark(b, overflow) +} + +var overflow = string(bytes.Repeat([]byte("\u035D"), 4096)) + "\u035B" // Tests sampled from the Canonical ordering tests (Part 2) of // http://unicode.org/Public/UNIDATA/NormalizationTest.txt diff --git a/libgo/go/exp/norm/normregtest.go b/libgo/go/exp/norm/normregtest.go index 57ba7032981..507de1ae834 100644 --- a/libgo/go/exp/norm/normregtest.go +++ b/libgo/go/exp/norm/normregtest.go @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// +build ignore + package main import ( @@ -218,6 +220,17 @@ func cmpIsNormal(t *Test, name string, f norm.Form, test string, result, want bo func doTest(t *Test, f norm.Form, gold, test string) { result := f.Bytes([]byte(test)) cmpResult(t, "Bytes", f, gold, test, string(result)) + sresult := f.String(test) + cmpResult(t, "String", f, gold, test, sresult) + buf := make([]byte, norm.MaxSegmentSize) + acc := []byte{} + i := norm.Iter{} + i.SetInputString(f, test) + for !i.Done() { + n := i.Next(buf) + acc = append(acc, buf[:n]...) + } + cmpResult(t, "Iter.Next", f, gold, test, string(acc)) for i := range test { out := f.Append(f.Bytes([]byte(test[:i])), []byte(test[i:])...) cmpResult(t, fmt.Sprintf(":Append:%d", i), f, gold, test, string(out)) diff --git a/libgo/go/exp/norm/tables.go b/libgo/go/exp/norm/tables.go index 02a481b3b3d..e97b1710722 100644 --- a/libgo/go/exp/norm/tables.go +++ b/libgo/go/exp/norm/tables.go @@ -7,4658 +7,5718 @@ package norm // Version is the Unicode edition from which the tables are derived. const Version = "6.0.0" -// decomps: 17618 bytes +const ( + firstCCC = 0x2E45 + firstLeadingCCC = 0x4965 + lastDecomp = 0x49A2 + maxDecomp = 0x8000 +) + +// decomps: 18850 bytes var decomps = [...]byte{ // Bytes 0 - 3f - 0x00, 0x01, 0x20, 0x03, 0x20, 0xCC, 0x88, 0x01, - 0x61, 0x03, 0x20, 0xCC, 0x84, 0x01, 0x32, 0x01, - 0x33, 0x03, 0x20, 0xCC, 0x81, 0x02, 0xCE, 0xBC, - 0x03, 0x20, 0xCC, 0xA7, 0x01, 0x31, 0x01, 0x6F, - 0x05, 0x31, 0xE2, 0x81, 0x84, 0x34, 0x05, 0x31, - 0xE2, 0x81, 0x84, 0x32, 0x05, 0x33, 0xE2, 0x81, - 0x84, 0x34, 0x03, 0x41, 0xCC, 0x80, 0x03, 0x41, - 0xCC, 0x81, 0x03, 0x41, 0xCC, 0x82, 0x03, 0x41, + 0x00, 0x06, 0xE0, 0xA7, 0x87, 0xE0, 0xA6, 0xBE, + 0x06, 0xE0, 0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x06, + 0xE0, 0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x06, 0xE0, + 0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x06, 0xE0, 0xAD, + 0x87, 0xE0, 0xAD, 0x97, 0x06, 0xE0, 0xAE, 0x92, + 0xE0, 0xAF, 0x97, 0x06, 0xE0, 0xAF, 0x86, 0xE0, + 0xAE, 0xBE, 0x06, 0xE0, 0xAF, 0x86, 0xE0, 0xAF, + 0x97, 0x06, 0xE0, 0xAF, 0x87, 0xE0, 0xAE, 0xBE, // Bytes 40 - 7f - 0xCC, 0x83, 0x03, 0x41, 0xCC, 0x88, 0x03, 0x41, - 0xCC, 0x8A, 0x03, 0x43, 0xCC, 0xA7, 0x03, 0x45, - 0xCC, 0x80, 0x03, 0x45, 0xCC, 0x81, 0x03, 0x45, - 0xCC, 0x82, 0x03, 0x45, 0xCC, 0x88, 0x03, 0x49, - 0xCC, 0x80, 0x03, 0x49, 0xCC, 0x81, 0x03, 0x49, - 0xCC, 0x82, 0x03, 0x49, 0xCC, 0x88, 0x03, 0x4E, - 0xCC, 0x83, 0x03, 0x4F, 0xCC, 0x80, 0x03, 0x4F, - 0xCC, 0x81, 0x03, 0x4F, 0xCC, 0x82, 0x03, 0x4F, + 0x06, 0xE0, 0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x06, + 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x06, 0xE0, + 0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x06, 0xE0, 0xB5, + 0x86, 0xE0, 0xB4, 0xBE, 0x06, 0xE0, 0xB5, 0x86, + 0xE0, 0xB5, 0x97, 0x06, 0xE0, 0xB5, 0x87, 0xE0, + 0xB4, 0xBE, 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, + 0x9F, 0x06, 0xE1, 0x80, 0xA5, 0xE1, 0x80, 0xAE, + 0x06, 0xE1, 0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x06, // Bytes 80 - bf - 0xCC, 0x83, 0x03, 0x4F, 0xCC, 0x88, 0x03, 0x55, - 0xCC, 0x80, 0x03, 0x55, 0xCC, 0x81, 0x03, 0x55, - 0xCC, 0x82, 0x03, 0x55, 0xCC, 0x88, 0x03, 0x59, - 0xCC, 0x81, 0x03, 0x61, 0xCC, 0x80, 0x03, 0x61, - 0xCC, 0x81, 0x03, 0x61, 0xCC, 0x82, 0x03, 0x61, - 0xCC, 0x83, 0x03, 0x61, 0xCC, 0x88, 0x03, 0x61, - 0xCC, 0x8A, 0x03, 0x63, 0xCC, 0xA7, 0x03, 0x65, - 0xCC, 0x80, 0x03, 0x65, 0xCC, 0x81, 0x03, 0x65, + 0xE1, 0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x06, 0xE1, + 0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x06, 0xE1, 0xAC, + 0x8B, 0xE1, 0xAC, 0xB5, 0x06, 0xE1, 0xAC, 0x8D, + 0xE1, 0xAC, 0xB5, 0x06, 0xE1, 0xAC, 0x91, 0xE1, + 0xAC, 0xB5, 0x06, 0xE1, 0xAC, 0xBA, 0xE1, 0xAC, + 0xB5, 0x06, 0xE1, 0xAC, 0xBC, 0xE1, 0xAC, 0xB5, + 0x06, 0xE1, 0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x06, + 0xE1, 0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x06, 0xE1, // Bytes c0 - ff - 0xCC, 0x82, 0x03, 0x65, 0xCC, 0x88, 0x03, 0x69, - 0xCC, 0x80, 0x03, 0x69, 0xCC, 0x81, 0x03, 0x69, - 0xCC, 0x82, 0x03, 0x69, 0xCC, 0x88, 0x03, 0x6E, - 0xCC, 0x83, 0x03, 0x6F, 0xCC, 0x80, 0x03, 0x6F, - 0xCC, 0x81, 0x03, 0x6F, 0xCC, 0x82, 0x03, 0x6F, - 0xCC, 0x83, 0x03, 0x6F, 0xCC, 0x88, 0x03, 0x75, - 0xCC, 0x80, 0x03, 0x75, 0xCC, 0x81, 0x03, 0x75, - 0xCC, 0x82, 0x03, 0x75, 0xCC, 0x88, 0x03, 0x79, + 0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x09, 0xE0, 0xB3, + 0x86, 0xE0, 0xB3, 0x82, 0xE0, 0xB3, 0x95, 0x41, + 0x20, 0x41, 0x21, 0x41, 0x22, 0x41, 0x23, 0x41, + 0x24, 0x41, 0x25, 0x41, 0x26, 0x41, 0x27, 0x41, + 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41, 0x2B, 0x41, + 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41, 0x2F, 0x41, + 0x30, 0x41, 0x31, 0x41, 0x32, 0x41, 0x33, 0x41, + 0x34, 0x41, 0x35, 0x41, 0x36, 0x41, 0x37, 0x41, // Bytes 100 - 13f - 0xCC, 0x81, 0x03, 0x79, 0xCC, 0x88, 0x03, 0x41, - 0xCC, 0x84, 0x03, 0x61, 0xCC, 0x84, 0x03, 0x41, - 0xCC, 0x86, 0x03, 0x61, 0xCC, 0x86, 0x03, 0x41, - 0xCC, 0xA8, 0x03, 0x61, 0xCC, 0xA8, 0x03, 0x43, - 0xCC, 0x81, 0x03, 0x63, 0xCC, 0x81, 0x03, 0x43, - 0xCC, 0x82, 0x03, 0x63, 0xCC, 0x82, 0x03, 0x43, - 0xCC, 0x87, 0x03, 0x63, 0xCC, 0x87, 0x03, 0x43, - 0xCC, 0x8C, 0x03, 0x63, 0xCC, 0x8C, 0x03, 0x44, + 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41, 0x3B, 0x41, + 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41, 0x3F, 0x41, + 0x40, 0x41, 0x41, 0x41, 0x42, 0x41, 0x43, 0x41, + 0x44, 0x41, 0x45, 0x41, 0x46, 0x41, 0x47, 0x41, + 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41, 0x4B, 0x41, + 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41, 0x4F, 0x41, + 0x50, 0x41, 0x51, 0x41, 0x52, 0x41, 0x53, 0x41, + 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, 0x57, 0x41, // Bytes 140 - 17f - 0xCC, 0x8C, 0x03, 0x64, 0xCC, 0x8C, 0x03, 0x45, - 0xCC, 0x84, 0x03, 0x65, 0xCC, 0x84, 0x03, 0x45, - 0xCC, 0x86, 0x03, 0x65, 0xCC, 0x86, 0x03, 0x45, - 0xCC, 0x87, 0x03, 0x65, 0xCC, 0x87, 0x03, 0x45, - 0xCC, 0xA8, 0x03, 0x65, 0xCC, 0xA8, 0x03, 0x45, - 0xCC, 0x8C, 0x03, 0x65, 0xCC, 0x8C, 0x03, 0x47, - 0xCC, 0x82, 0x03, 0x67, 0xCC, 0x82, 0x03, 0x47, - 0xCC, 0x86, 0x03, 0x67, 0xCC, 0x86, 0x03, 0x47, + 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41, 0x5B, 0x41, + 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41, 0x5F, 0x41, + 0x60, 0x41, 0x61, 0x41, 0x62, 0x41, 0x63, 0x41, + 0x64, 0x41, 0x65, 0x41, 0x66, 0x41, 0x67, 0x41, + 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41, 0x6B, 0x41, + 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41, 0x6F, 0x41, + 0x70, 0x41, 0x71, 0x41, 0x72, 0x41, 0x73, 0x41, + 0x74, 0x41, 0x75, 0x41, 0x76, 0x41, 0x77, 0x41, // Bytes 180 - 1bf - 0xCC, 0x87, 0x03, 0x67, 0xCC, 0x87, 0x03, 0x47, - 0xCC, 0xA7, 0x03, 0x67, 0xCC, 0xA7, 0x03, 0x48, - 0xCC, 0x82, 0x03, 0x68, 0xCC, 0x82, 0x03, 0x49, - 0xCC, 0x83, 0x03, 0x69, 0xCC, 0x83, 0x03, 0x49, - 0xCC, 0x84, 0x03, 0x69, 0xCC, 0x84, 0x03, 0x49, - 0xCC, 0x86, 0x03, 0x69, 0xCC, 0x86, 0x03, 0x49, - 0xCC, 0xA8, 0x03, 0x69, 0xCC, 0xA8, 0x03, 0x49, - 0xCC, 0x87, 0x02, 0x49, 0x4A, 0x02, 0x69, 0x6A, + 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41, 0x7B, 0x41, + 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42, 0x21, 0x21, + 0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30, + 0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42, + 0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31, + 0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31, + 0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42, + 0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39, // Bytes 1c0 - 1ff - 0x03, 0x4A, 0xCC, 0x82, 0x03, 0x6A, 0xCC, 0x82, - 0x03, 0x4B, 0xCC, 0xA7, 0x03, 0x6B, 0xCC, 0xA7, - 0x03, 0x4C, 0xCC, 0x81, 0x03, 0x6C, 0xCC, 0x81, - 0x03, 0x4C, 0xCC, 0xA7, 0x03, 0x6C, 0xCC, 0xA7, - 0x03, 0x4C, 0xCC, 0x8C, 0x03, 0x6C, 0xCC, 0x8C, - 0x03, 0x4C, 0xC2, 0xB7, 0x03, 0x6C, 0xC2, 0xB7, - 0x03, 0x4E, 0xCC, 0x81, 0x03, 0x6E, 0xCC, 0x81, - 0x03, 0x4E, 0xCC, 0xA7, 0x03, 0x6E, 0xCC, 0xA7, + 0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32, + 0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42, + 0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35, + 0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32, + 0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42, + 0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31, + 0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33, + 0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42, // Bytes 200 - 23f - 0x03, 0x4E, 0xCC, 0x8C, 0x03, 0x6E, 0xCC, 0x8C, - 0x03, 0xCA, 0xBC, 0x6E, 0x03, 0x4F, 0xCC, 0x84, - 0x03, 0x6F, 0xCC, 0x84, 0x03, 0x4F, 0xCC, 0x86, - 0x03, 0x6F, 0xCC, 0x86, 0x03, 0x4F, 0xCC, 0x8B, - 0x03, 0x6F, 0xCC, 0x8B, 0x03, 0x52, 0xCC, 0x81, - 0x03, 0x72, 0xCC, 0x81, 0x03, 0x52, 0xCC, 0xA7, - 0x03, 0x72, 0xCC, 0xA7, 0x03, 0x52, 0xCC, 0x8C, - 0x03, 0x72, 0xCC, 0x8C, 0x03, 0x53, 0xCC, 0x81, + 0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39, + 0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34, + 0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42, + 0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35, + 0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34, + 0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42, + 0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C, + 0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37, // Bytes 240 - 27f - 0x03, 0x73, 0xCC, 0x81, 0x03, 0x53, 0xCC, 0x82, - 0x03, 0x73, 0xCC, 0x82, 0x03, 0x53, 0xCC, 0xA7, - 0x03, 0x73, 0xCC, 0xA7, 0x03, 0x53, 0xCC, 0x8C, - 0x03, 0x73, 0xCC, 0x8C, 0x03, 0x54, 0xCC, 0xA7, - 0x03, 0x74, 0xCC, 0xA7, 0x03, 0x54, 0xCC, 0x8C, - 0x03, 0x74, 0xCC, 0x8C, 0x03, 0x55, 0xCC, 0x83, - 0x03, 0x75, 0xCC, 0x83, 0x03, 0x55, 0xCC, 0x84, - 0x03, 0x75, 0xCC, 0x84, 0x03, 0x55, 0xCC, 0x86, + 0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42, + 0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D, + 0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41, + 0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42, + 0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A, + 0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48, + 0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42, + 0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A, // Bytes 280 - 2bf - 0x03, 0x75, 0xCC, 0x86, 0x03, 0x55, 0xCC, 0x8A, - 0x03, 0x75, 0xCC, 0x8A, 0x03, 0x55, 0xCC, 0x8B, - 0x03, 0x75, 0xCC, 0x8B, 0x03, 0x55, 0xCC, 0xA8, - 0x03, 0x75, 0xCC, 0xA8, 0x03, 0x57, 0xCC, 0x82, - 0x03, 0x77, 0xCC, 0x82, 0x03, 0x59, 0xCC, 0x82, - 0x03, 0x79, 0xCC, 0x82, 0x03, 0x59, 0xCC, 0x88, - 0x03, 0x5A, 0xCC, 0x81, 0x03, 0x7A, 0xCC, 0x81, - 0x03, 0x5A, 0xCC, 0x87, 0x03, 0x7A, 0xCC, 0x87, + 0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49, + 0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42, + 0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A, + 0x42, 0x4D, 0x42, 0x42, 0x4D, 0x56, 0x42, 0x4D, + 0x57, 0x42, 0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, + 0x4E, 0x6F, 0x42, 0x50, 0x48, 0x42, 0x50, 0x52, + 0x42, 0x50, 0x61, 0x42, 0x52, 0x73, 0x42, 0x53, + 0x44, 0x42, 0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, // Bytes 2c0 - 2ff - 0x03, 0x5A, 0xCC, 0x8C, 0x03, 0x7A, 0xCC, 0x8C, - 0x01, 0x73, 0x03, 0x4F, 0xCC, 0x9B, 0x03, 0x6F, - 0xCC, 0x9B, 0x03, 0x55, 0xCC, 0x9B, 0x03, 0x75, - 0xCC, 0x9B, 0x04, 0x44, 0x5A, 0xCC, 0x8C, 0x04, - 0x44, 0x7A, 0xCC, 0x8C, 0x04, 0x64, 0x7A, 0xCC, - 0x8C, 0x02, 0x4C, 0x4A, 0x02, 0x4C, 0x6A, 0x02, - 0x6C, 0x6A, 0x02, 0x4E, 0x4A, 0x02, 0x4E, 0x6A, - 0x02, 0x6E, 0x6A, 0x03, 0x41, 0xCC, 0x8C, 0x03, + 0x53, 0x76, 0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, + 0x42, 0x57, 0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, + 0x62, 0x42, 0x58, 0x49, 0x42, 0x63, 0x63, 0x42, + 0x63, 0x64, 0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, + 0x42, 0x64, 0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, + 0x6D, 0x42, 0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, + 0x66, 0x66, 0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, + 0x42, 0x66, 0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, // Bytes 300 - 33f - 0x61, 0xCC, 0x8C, 0x03, 0x49, 0xCC, 0x8C, 0x03, - 0x69, 0xCC, 0x8C, 0x03, 0x4F, 0xCC, 0x8C, 0x03, - 0x6F, 0xCC, 0x8C, 0x03, 0x55, 0xCC, 0x8C, 0x03, - 0x75, 0xCC, 0x8C, 0x05, 0x55, 0xCC, 0x88, 0xCC, - 0x84, 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x84, 0x05, - 0x55, 0xCC, 0x88, 0xCC, 0x81, 0x05, 0x75, 0xCC, - 0x88, 0xCC, 0x81, 0x05, 0x55, 0xCC, 0x88, 0xCC, - 0x8C, 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x8C, 0x05, + 0x69, 0x42, 0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, + 0x69, 0x76, 0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, + 0x42, 0x6B, 0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, + 0x67, 0x42, 0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, + 0x6B, 0x74, 0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, + 0x42, 0x6C, 0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, + 0x32, 0x42, 0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, + 0x6D, 0x56, 0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, // Bytes 340 - 37f - 0x55, 0xCC, 0x88, 0xCC, 0x80, 0x05, 0x75, 0xCC, - 0x88, 0xCC, 0x80, 0x05, 0x41, 0xCC, 0x88, 0xCC, - 0x84, 0x05, 0x61, 0xCC, 0x88, 0xCC, 0x84, 0x05, - 0x41, 0xCC, 0x87, 0xCC, 0x84, 0x05, 0x61, 0xCC, - 0x87, 0xCC, 0x84, 0x04, 0xC3, 0x86, 0xCC, 0x84, - 0x04, 0xC3, 0xA6, 0xCC, 0x84, 0x03, 0x47, 0xCC, - 0x8C, 0x03, 0x67, 0xCC, 0x8C, 0x03, 0x4B, 0xCC, - 0x8C, 0x03, 0x6B, 0xCC, 0x8C, 0x03, 0x4F, 0xCC, + 0x42, 0x6D, 0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, + 0x6D, 0x42, 0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, + 0x6E, 0x46, 0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, + 0x42, 0x6E, 0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, + 0x73, 0x42, 0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, + 0x70, 0x46, 0x42, 0x70, 0x56, 0x42, 0x70, 0x57, + 0x42, 0x70, 0x63, 0x42, 0x70, 0x73, 0x42, 0x73, + 0x72, 0x42, 0x73, 0x74, 0x42, 0x76, 0x69, 0x42, // Bytes 380 - 3bf - 0xA8, 0x03, 0x6F, 0xCC, 0xA8, 0x05, 0x4F, 0xCC, - 0xA8, 0xCC, 0x84, 0x05, 0x6F, 0xCC, 0xA8, 0xCC, - 0x84, 0x04, 0xC6, 0xB7, 0xCC, 0x8C, 0x04, 0xCA, - 0x92, 0xCC, 0x8C, 0x03, 0x6A, 0xCC, 0x8C, 0x02, - 0x44, 0x5A, 0x02, 0x44, 0x7A, 0x02, 0x64, 0x7A, - 0x03, 0x47, 0xCC, 0x81, 0x03, 0x67, 0xCC, 0x81, - 0x03, 0x4E, 0xCC, 0x80, 0x03, 0x6E, 0xCC, 0x80, - 0x05, 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0x05, 0x61, + 0x78, 0x69, 0x42, 0xC2, 0xA2, 0x42, 0xC2, 0xA3, + 0x42, 0xC2, 0xA5, 0x42, 0xC2, 0xA6, 0x42, 0xC2, + 0xAC, 0x42, 0xC2, 0xB4, 0x42, 0xC2, 0xB7, 0x42, + 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42, 0xC4, 0xA7, + 0x42, 0xC4, 0xB1, 0x42, 0xC5, 0x8B, 0x42, 0xC6, + 0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42, + 0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90, + 0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9, // Bytes 3c0 - 3ff - 0xCC, 0x8A, 0xCC, 0x81, 0x04, 0xC3, 0x86, 0xCC, - 0x81, 0x04, 0xC3, 0xA6, 0xCC, 0x81, 0x04, 0xC3, - 0x98, 0xCC, 0x81, 0x04, 0xC3, 0xB8, 0xCC, 0x81, - 0x03, 0x41, 0xCC, 0x8F, 0x03, 0x61, 0xCC, 0x8F, - 0x03, 0x41, 0xCC, 0x91, 0x03, 0x61, 0xCC, 0x91, - 0x03, 0x45, 0xCC, 0x8F, 0x03, 0x65, 0xCC, 0x8F, - 0x03, 0x45, 0xCC, 0x91, 0x03, 0x65, 0xCC, 0x91, - 0x03, 0x49, 0xCC, 0x8F, 0x03, 0x69, 0xCC, 0x8F, + 0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42, + 0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F, + 0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9, + 0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42, + 0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAD, + 0x42, 0xC9, 0xAF, 0x42, 0xC9, 0xB0, 0x42, 0xC9, + 0xB1, 0x42, 0xC9, 0xB2, 0x42, 0xC9, 0xB3, 0x42, + 0xC9, 0xB4, 0x42, 0xC9, 0xB5, 0x42, 0xC9, 0xB8, // Bytes 400 - 43f - 0x03, 0x49, 0xCC, 0x91, 0x03, 0x69, 0xCC, 0x91, - 0x03, 0x4F, 0xCC, 0x8F, 0x03, 0x6F, 0xCC, 0x8F, - 0x03, 0x4F, 0xCC, 0x91, 0x03, 0x6F, 0xCC, 0x91, - 0x03, 0x52, 0xCC, 0x8F, 0x03, 0x72, 0xCC, 0x8F, - 0x03, 0x52, 0xCC, 0x91, 0x03, 0x72, 0xCC, 0x91, - 0x03, 0x55, 0xCC, 0x8F, 0x03, 0x75, 0xCC, 0x8F, - 0x03, 0x55, 0xCC, 0x91, 0x03, 0x75, 0xCC, 0x91, - 0x03, 0x53, 0xCC, 0xA6, 0x03, 0x73, 0xCC, 0xA6, + 0x42, 0xC9, 0xB9, 0x42, 0xC9, 0xBB, 0x42, 0xCA, + 0x81, 0x42, 0xCA, 0x82, 0x42, 0xCA, 0x83, 0x42, + 0xCA, 0x89, 0x42, 0xCA, 0x8A, 0x42, 0xCA, 0x8B, + 0x42, 0xCA, 0x8C, 0x42, 0xCA, 0x90, 0x42, 0xCA, + 0x91, 0x42, 0xCA, 0x92, 0x42, 0xCA, 0x95, 0x42, + 0xCA, 0x9D, 0x42, 0xCA, 0x9F, 0x42, 0xCA, 0xB9, + 0x42, 0xCE, 0x91, 0x42, 0xCE, 0x92, 0x42, 0xCE, + 0x93, 0x42, 0xCE, 0x94, 0x42, 0xCE, 0x95, 0x42, // Bytes 440 - 47f - 0x03, 0x54, 0xCC, 0xA6, 0x03, 0x74, 0xCC, 0xA6, - 0x03, 0x48, 0xCC, 0x8C, 0x03, 0x68, 0xCC, 0x8C, - 0x03, 0x41, 0xCC, 0x87, 0x03, 0x61, 0xCC, 0x87, - 0x03, 0x45, 0xCC, 0xA7, 0x03, 0x65, 0xCC, 0xA7, - 0x05, 0x4F, 0xCC, 0x88, 0xCC, 0x84, 0x05, 0x6F, - 0xCC, 0x88, 0xCC, 0x84, 0x05, 0x4F, 0xCC, 0x83, - 0xCC, 0x84, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x84, - 0x03, 0x4F, 0xCC, 0x87, 0x03, 0x6F, 0xCC, 0x87, + 0xCE, 0x96, 0x42, 0xCE, 0x97, 0x42, 0xCE, 0x98, + 0x42, 0xCE, 0x99, 0x42, 0xCE, 0x9A, 0x42, 0xCE, + 0x9B, 0x42, 0xCE, 0x9C, 0x42, 0xCE, 0x9D, 0x42, + 0xCE, 0x9E, 0x42, 0xCE, 0x9F, 0x42, 0xCE, 0xA0, + 0x42, 0xCE, 0xA1, 0x42, 0xCE, 0xA3, 0x42, 0xCE, + 0xA4, 0x42, 0xCE, 0xA5, 0x42, 0xCE, 0xA6, 0x42, + 0xCE, 0xA7, 0x42, 0xCE, 0xA8, 0x42, 0xCE, 0xA9, + 0x42, 0xCE, 0xB1, 0x42, 0xCE, 0xB2, 0x42, 0xCE, // Bytes 480 - 4bf - 0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0x05, 0x6F, - 0xCC, 0x87, 0xCC, 0x84, 0x03, 0x59, 0xCC, 0x84, - 0x03, 0x79, 0xCC, 0x84, 0x01, 0x68, 0x02, 0xC9, - 0xA6, 0x01, 0x6A, 0x01, 0x72, 0x02, 0xC9, 0xB9, - 0x02, 0xC9, 0xBB, 0x02, 0xCA, 0x81, 0x01, 0x77, - 0x01, 0x79, 0x03, 0x20, 0xCC, 0x86, 0x03, 0x20, - 0xCC, 0x87, 0x03, 0x20, 0xCC, 0x8A, 0x03, 0x20, - 0xCC, 0xA8, 0x03, 0x20, 0xCC, 0x83, 0x03, 0x20, + 0xB3, 0x42, 0xCE, 0xB4, 0x42, 0xCE, 0xB5, 0x42, + 0xCE, 0xB6, 0x42, 0xCE, 0xB7, 0x42, 0xCE, 0xB8, + 0x42, 0xCE, 0xB9, 0x42, 0xCE, 0xBA, 0x42, 0xCE, + 0xBB, 0x42, 0xCE, 0xBC, 0x42, 0xCE, 0xBD, 0x42, + 0xCE, 0xBE, 0x42, 0xCE, 0xBF, 0x42, 0xCF, 0x80, + 0x42, 0xCF, 0x81, 0x42, 0xCF, 0x82, 0x42, 0xCF, + 0x83, 0x42, 0xCF, 0x84, 0x42, 0xCF, 0x85, 0x42, + 0xCF, 0x86, 0x42, 0xCF, 0x87, 0x42, 0xCF, 0x88, // Bytes 4c0 - 4ff - 0xCC, 0x8B, 0x02, 0xC9, 0xA3, 0x01, 0x6C, 0x01, - 0x78, 0x02, 0xCA, 0x95, 0x02, 0xCC, 0x80, 0x02, - 0xCC, 0x81, 0x02, 0xCC, 0x93, 0x04, 0xCC, 0x88, - 0xCC, 0x81, 0x02, 0xCA, 0xB9, 0x03, 0x20, 0xCD, - 0x85, 0x01, 0x3B, 0x04, 0xC2, 0xA8, 0xCC, 0x81, - 0x05, 0x20, 0xCC, 0x88, 0xCC, 0x81, 0x04, 0xCE, - 0x91, 0xCC, 0x81, 0x02, 0xC2, 0xB7, 0x04, 0xCE, - 0x95, 0xCC, 0x81, 0x04, 0xCE, 0x97, 0xCC, 0x81, + 0x42, 0xCF, 0x89, 0x42, 0xCF, 0x9C, 0x42, 0xCF, + 0x9D, 0x42, 0xD0, 0xBD, 0x42, 0xD7, 0x90, 0x42, + 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7, 0x93, + 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42, 0xD7, + 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2, 0x42, + 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8, 0xA1, + 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42, 0xD8, + 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB, 0x42, // Bytes 500 - 53f - 0x04, 0xCE, 0x99, 0xCC, 0x81, 0x04, 0xCE, 0x9F, - 0xCC, 0x81, 0x04, 0xCE, 0xA5, 0xCC, 0x81, 0x04, - 0xCE, 0xA9, 0xCC, 0x81, 0x06, 0xCE, 0xB9, 0xCC, - 0x88, 0xCC, 0x81, 0x04, 0xCE, 0x99, 0xCC, 0x88, - 0x04, 0xCE, 0xA5, 0xCC, 0x88, 0x04, 0xCE, 0xB1, - 0xCC, 0x81, 0x04, 0xCE, 0xB5, 0xCC, 0x81, 0x04, - 0xCE, 0xB7, 0xCC, 0x81, 0x04, 0xCE, 0xB9, 0xCC, - 0x81, 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, + 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8, 0xAE, + 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42, 0xD8, + 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3, 0x42, + 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8, 0xB6, + 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42, 0xD8, + 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81, 0x42, + 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9, 0x84, + 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42, 0xD9, // Bytes 540 - 57f - 0x04, 0xCE, 0xB9, 0xCC, 0x88, 0x04, 0xCF, 0x85, - 0xCC, 0x88, 0x04, 0xCE, 0xBF, 0xCC, 0x81, 0x04, - 0xCF, 0x85, 0xCC, 0x81, 0x04, 0xCF, 0x89, 0xCC, - 0x81, 0x02, 0xCE, 0xB2, 0x02, 0xCE, 0xB8, 0x02, - 0xCE, 0xA5, 0x04, 0xCF, 0x92, 0xCC, 0x81, 0x04, - 0xCF, 0x92, 0xCC, 0x88, 0x02, 0xCF, 0x86, 0x02, - 0xCF, 0x80, 0x02, 0xCE, 0xBA, 0x02, 0xCF, 0x81, - 0x02, 0xCF, 0x82, 0x02, 0xCE, 0x98, 0x02, 0xCE, + 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89, 0x42, + 0xD9, 0x8A, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, + 0x42, 0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, + 0xBE, 0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, + 0xDA, 0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, + 0x42, 0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, + 0x8C, 0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, + 0xDA, 0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA4, // Bytes 580 - 5bf - 0xB5, 0x02, 0xCE, 0xA3, 0x04, 0xD0, 0x95, 0xCC, - 0x80, 0x04, 0xD0, 0x95, 0xCC, 0x88, 0x04, 0xD0, - 0x93, 0xCC, 0x81, 0x04, 0xD0, 0x86, 0xCC, 0x88, - 0x04, 0xD0, 0x9A, 0xCC, 0x81, 0x04, 0xD0, 0x98, - 0xCC, 0x80, 0x04, 0xD0, 0xA3, 0xCC, 0x86, 0x04, - 0xD0, 0x98, 0xCC, 0x86, 0x04, 0xD0, 0xB8, 0xCC, - 0x86, 0x04, 0xD0, 0xB5, 0xCC, 0x80, 0x04, 0xD0, - 0xB5, 0xCC, 0x88, 0x04, 0xD0, 0xB3, 0xCC, 0x81, + 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9, 0x42, 0xDA, + 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA, 0xB1, 0x42, + 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42, 0xDA, 0xBB, + 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81, 0x42, 0xDB, + 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB, 0x87, 0x42, + 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42, 0xDB, 0x8B, + 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90, 0x42, 0xDB, + 0x92, 0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, // Bytes 5c0 - 5ff - 0x04, 0xD1, 0x96, 0xCC, 0x88, 0x04, 0xD0, 0xBA, - 0xCC, 0x81, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0x04, - 0xD1, 0x83, 0xCC, 0x86, 0x04, 0xD1, 0xB4, 0xCC, - 0x8F, 0x04, 0xD1, 0xB5, 0xCC, 0x8F, 0x04, 0xD0, - 0x96, 0xCC, 0x86, 0x04, 0xD0, 0xB6, 0xCC, 0x86, - 0x04, 0xD0, 0x90, 0xCC, 0x86, 0x04, 0xD0, 0xB0, - 0xCC, 0x86, 0x04, 0xD0, 0x90, 0xCC, 0x88, 0x04, - 0xD0, 0xB0, 0xCC, 0x88, 0x04, 0xD0, 0x95, 0xCC, + 0x29, 0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, + 0x29, 0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, + 0x29, 0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, + 0x29, 0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, + 0x29, 0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, + 0x29, 0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, + 0x29, 0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, + 0x29, 0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, // Bytes 600 - 63f - 0x86, 0x04, 0xD0, 0xB5, 0xCC, 0x86, 0x04, 0xD3, - 0x98, 0xCC, 0x88, 0x04, 0xD3, 0x99, 0xCC, 0x88, - 0x04, 0xD0, 0x96, 0xCC, 0x88, 0x04, 0xD0, 0xB6, - 0xCC, 0x88, 0x04, 0xD0, 0x97, 0xCC, 0x88, 0x04, - 0xD0, 0xB7, 0xCC, 0x88, 0x04, 0xD0, 0x98, 0xCC, - 0x84, 0x04, 0xD0, 0xB8, 0xCC, 0x84, 0x04, 0xD0, - 0x98, 0xCC, 0x88, 0x04, 0xD0, 0xB8, 0xCC, 0x88, - 0x04, 0xD0, 0x9E, 0xCC, 0x88, 0x04, 0xD0, 0xBE, + 0x29, 0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, + 0x29, 0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, + 0x29, 0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, + 0x29, 0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, + 0x29, 0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, + 0x29, 0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, + 0x29, 0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, + 0x29, 0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, // Bytes 640 - 67f - 0xCC, 0x88, 0x04, 0xD3, 0xA8, 0xCC, 0x88, 0x04, - 0xD3, 0xA9, 0xCC, 0x88, 0x04, 0xD0, 0xAD, 0xCC, - 0x88, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0x04, 0xD0, - 0xA3, 0xCC, 0x84, 0x04, 0xD1, 0x83, 0xCC, 0x84, - 0x04, 0xD0, 0xA3, 0xCC, 0x88, 0x04, 0xD1, 0x83, - 0xCC, 0x88, 0x04, 0xD0, 0xA3, 0xCC, 0x8B, 0x04, - 0xD1, 0x83, 0xCC, 0x8B, 0x04, 0xD0, 0xA7, 0xCC, - 0x88, 0x04, 0xD1, 0x87, 0xCC, 0x88, 0x04, 0xD0, + 0x29, 0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, + 0x29, 0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, + 0x29, 0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, + 0x29, 0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, + 0x29, 0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, + 0x29, 0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, + 0x29, 0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, + 0x29, 0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, // Bytes 680 - 6bf - 0xAB, 0xCC, 0x88, 0x04, 0xD1, 0x8B, 0xCC, 0x88, - 0x04, 0xD5, 0xA5, 0xD6, 0x82, 0x04, 0xD8, 0xA7, - 0xD9, 0x93, 0x04, 0xD8, 0xA7, 0xD9, 0x94, 0x04, - 0xD9, 0x88, 0xD9, 0x94, 0x04, 0xD8, 0xA7, 0xD9, - 0x95, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0x04, 0xD8, - 0xA7, 0xD9, 0xB4, 0x04, 0xD9, 0x88, 0xD9, 0xB4, - 0x04, 0xDB, 0x87, 0xD9, 0xB4, 0x04, 0xD9, 0x8A, - 0xD9, 0xB4, 0x04, 0xDB, 0x95, 0xD9, 0x94, 0x04, + 0x29, 0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, + 0x29, 0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, + 0x29, 0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, + 0x29, 0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, + 0x29, 0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, + 0x29, 0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, + 0x2E, 0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, + 0x2E, 0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, // Bytes 6c0 - 6ff - 0xDB, 0x81, 0xD9, 0x94, 0x04, 0xDB, 0x92, 0xD9, - 0x94, 0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, - 0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x06, - 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x06, 0xE0, - 0xA4, 0x95, 0xE0, 0xA4, 0xBC, 0x06, 0xE0, 0xA4, - 0x96, 0xE0, 0xA4, 0xBC, 0x06, 0xE0, 0xA4, 0x97, - 0xE0, 0xA4, 0xBC, 0x06, 0xE0, 0xA4, 0x9C, 0xE0, - 0xA4, 0xBC, 0x06, 0xE0, 0xA4, 0xA1, 0xE0, 0xA4, + 0x2E, 0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, + 0x2E, 0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, + 0x2E, 0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, + 0x2E, 0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, + 0x3D, 0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, + 0x2E, 0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, + 0x7A, 0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, + 0x49, 0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, // Bytes 700 - 73f - 0xBC, 0x06, 0xE0, 0xA4, 0xA2, 0xE0, 0xA4, 0xBC, - 0x06, 0xE0, 0xA4, 0xAB, 0xE0, 0xA4, 0xBC, 0x06, - 0xE0, 0xA4, 0xAF, 0xE0, 0xA4, 0xBC, 0x06, 0xE0, - 0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x06, 0xE0, 0xA7, - 0x87, 0xE0, 0xA7, 0x97, 0x06, 0xE0, 0xA6, 0xA1, - 0xE0, 0xA6, 0xBC, 0x06, 0xE0, 0xA6, 0xA2, 0xE0, - 0xA6, 0xBC, 0x06, 0xE0, 0xA6, 0xAF, 0xE0, 0xA6, - 0xBC, 0x06, 0xE0, 0xA8, 0xB2, 0xE0, 0xA8, 0xBC, + 0xB7, 0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, + 0x61, 0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, + 0x4D, 0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, + 0x45, 0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, + 0x7A, 0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, + 0x49, 0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, + 0x73, 0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, + 0x72, 0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, // Bytes 740 - 77f - 0x06, 0xE0, 0xA8, 0xB8, 0xE0, 0xA8, 0xBC, 0x06, - 0xE0, 0xA8, 0x96, 0xE0, 0xA8, 0xBC, 0x06, 0xE0, - 0xA8, 0x97, 0xE0, 0xA8, 0xBC, 0x06, 0xE0, 0xA8, - 0x9C, 0xE0, 0xA8, 0xBC, 0x06, 0xE0, 0xA8, 0xAB, - 0xE0, 0xA8, 0xBC, 0x06, 0xE0, 0xAD, 0x87, 0xE0, - 0xAD, 0x96, 0x06, 0xE0, 0xAD, 0x87, 0xE0, 0xAC, - 0xBE, 0x06, 0xE0, 0xAD, 0x87, 0xE0, 0xAD, 0x97, - 0x06, 0xE0, 0xAC, 0xA1, 0xE0, 0xAC, 0xBC, 0x06, + 0x75, 0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, + 0x32, 0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, + 0x32, 0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, + 0x67, 0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, + 0x6C, 0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, + 0x61, 0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, + 0x7A, 0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, + 0x32, 0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, // Bytes 780 - 7bf - 0xE0, 0xAC, 0xA2, 0xE0, 0xAC, 0xBC, 0x06, 0xE0, - 0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x06, 0xE0, 0xAF, - 0x86, 0xE0, 0xAE, 0xBE, 0x06, 0xE0, 0xAF, 0x87, - 0xE0, 0xAE, 0xBE, 0x06, 0xE0, 0xAF, 0x86, 0xE0, - 0xAF, 0x97, 0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, - 0x96, 0x06, 0xE0, 0xB2, 0xBF, 0xE0, 0xB3, 0x95, - 0x06, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x06, - 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x06, 0xE0, + 0xA9, 0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, + 0xB7, 0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, + 0x32, 0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, + 0x6C, 0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, + 0x69, 0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, + 0x43, 0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, + 0x6E, 0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, + 0x46, 0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, // Bytes 7c0 - 7ff - 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x09, 0xE0, 0xB3, - 0x86, 0xE0, 0xB3, 0x82, 0xE0, 0xB3, 0x95, 0x06, - 0xE0, 0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x06, 0xE0, - 0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x06, 0xE0, 0xB5, - 0x86, 0xE0, 0xB5, 0x97, 0x06, 0xE0, 0xB7, 0x99, - 0xE0, 0xB7, 0x8A, 0x06, 0xE0, 0xB7, 0x99, 0xE0, - 0xB7, 0x8F, 0x09, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, - 0x8F, 0xE0, 0xB7, 0x8A, 0x06, 0xE0, 0xB7, 0x99, + 0x57, 0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, + 0x6C, 0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, + 0x73, 0x43, 0xE0, 0xBC, 0x8B, 0x43, 0xE1, 0x83, + 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43, 0xE1, 0x84, + 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43, 0xE1, 0x84, + 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43, 0xE1, 0x84, + 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43, 0xE1, 0x84, + 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43, 0xE1, 0x84, // Bytes 800 - 83f - 0xE0, 0xB7, 0x9F, 0x06, 0xE0, 0xB9, 0x8D, 0xE0, - 0xB8, 0xB2, 0x06, 0xE0, 0xBB, 0x8D, 0xE0, 0xBA, - 0xB2, 0x06, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, - 0x06, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x03, - 0xE0, 0xBC, 0x8B, 0x06, 0xE0, 0xBD, 0x82, 0xE0, - 0xBE, 0xB7, 0x06, 0xE0, 0xBD, 0x8C, 0xE0, 0xBE, - 0xB7, 0x06, 0xE0, 0xBD, 0x91, 0xE0, 0xBE, 0xB7, - 0x06, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7, 0x06, + 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43, 0xE1, 0x84, + 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43, 0xE1, 0x84, + 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43, 0xE1, 0x84, + 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43, 0xE1, 0x84, + 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43, 0xE1, 0x84, + 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43, 0xE1, 0x84, + 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43, 0xE1, 0x84, + 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43, 0xE1, 0x84, // Bytes 840 - 87f - 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x06, 0xE0, - 0xBD, 0x80, 0xE0, 0xBE, 0xB5, 0x06, 0xE0, 0xBD, - 0xB1, 0xE0, 0xBD, 0xB2, 0x06, 0xE0, 0xBD, 0xB1, - 0xE0, 0xBD, 0xB4, 0x06, 0xE0, 0xBE, 0xB2, 0xE0, - 0xBE, 0x80, 0x09, 0xE0, 0xBE, 0xB2, 0xE0, 0xBD, - 0xB1, 0xE0, 0xBE, 0x80, 0x06, 0xE0, 0xBE, 0xB3, - 0xE0, 0xBE, 0x80, 0x09, 0xE0, 0xBE, 0xB3, 0xE0, - 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x06, 0xE0, 0xBD, + 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43, 0xE1, 0x84, + 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43, 0xE1, 0x84, + 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43, 0xE1, 0x84, + 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43, 0xE1, 0x84, + 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43, 0xE1, 0x84, + 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43, 0xE1, 0x84, + 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43, 0xE1, 0x85, + 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43, 0xE1, 0x85, // Bytes 880 - 8bf - 0xB1, 0xE0, 0xBE, 0x80, 0x06, 0xE0, 0xBE, 0x92, - 0xE0, 0xBE, 0xB7, 0x06, 0xE0, 0xBE, 0x9C, 0xE0, - 0xBE, 0xB7, 0x06, 0xE0, 0xBE, 0xA1, 0xE0, 0xBE, - 0xB7, 0x06, 0xE0, 0xBE, 0xA6, 0xE0, 0xBE, 0xB7, - 0x06, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE, 0xB7, 0x06, - 0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x06, 0xE1, - 0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x03, 0xE1, 0x83, - 0x9C, 0x06, 0xE1, 0xAC, 0x85, 0xE1, 0xAC, 0xB5, + 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43, 0xE1, 0x85, + 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43, 0xE1, 0x85, + 0xA1, 0x43, 0xE1, 0x85, 0xA2, 0x43, 0xE1, 0x85, + 0xA3, 0x43, 0xE1, 0x85, 0xA4, 0x43, 0xE1, 0x85, + 0xA5, 0x43, 0xE1, 0x85, 0xA6, 0x43, 0xE1, 0x85, + 0xA7, 0x43, 0xE1, 0x85, 0xA8, 0x43, 0xE1, 0x85, + 0xA9, 0x43, 0xE1, 0x85, 0xAA, 0x43, 0xE1, 0x85, + 0xAB, 0x43, 0xE1, 0x85, 0xAC, 0x43, 0xE1, 0x85, // Bytes 8c0 - 8ff - 0x06, 0xE1, 0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x06, - 0xE1, 0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x06, 0xE1, - 0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x06, 0xE1, 0xAC, - 0x8D, 0xE1, 0xAC, 0xB5, 0x06, 0xE1, 0xAC, 0x91, - 0xE1, 0xAC, 0xB5, 0x06, 0xE1, 0xAC, 0xBA, 0xE1, - 0xAC, 0xB5, 0x06, 0xE1, 0xAC, 0xBC, 0xE1, 0xAC, - 0xB5, 0x06, 0xE1, 0xAC, 0xBE, 0xE1, 0xAC, 0xB5, - 0x06, 0xE1, 0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x06, + 0xAD, 0x43, 0xE1, 0x85, 0xAE, 0x43, 0xE1, 0x85, + 0xAF, 0x43, 0xE1, 0x85, 0xB0, 0x43, 0xE1, 0x85, + 0xB1, 0x43, 0xE1, 0x85, 0xB2, 0x43, 0xE1, 0x85, + 0xB3, 0x43, 0xE1, 0x85, 0xB4, 0x43, 0xE1, 0x85, + 0xB5, 0x43, 0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, + 0x85, 0x43, 0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, + 0x91, 0x43, 0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, + 0x94, 0x43, 0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, // Bytes 900 - 93f - 0xE1, 0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x41, - 0x02, 0xC3, 0x86, 0x01, 0x42, 0x01, 0x44, 0x01, - 0x45, 0x02, 0xC6, 0x8E, 0x01, 0x47, 0x01, 0x48, - 0x01, 0x49, 0x01, 0x4A, 0x01, 0x4B, 0x01, 0x4C, - 0x01, 0x4D, 0x01, 0x4E, 0x01, 0x4F, 0x02, 0xC8, - 0xA2, 0x01, 0x50, 0x01, 0x52, 0x01, 0x54, 0x01, - 0x55, 0x01, 0x57, 0x02, 0xC9, 0x90, 0x02, 0xC9, - 0x91, 0x03, 0xE1, 0xB4, 0x82, 0x01, 0x62, 0x01, + 0xA1, 0x43, 0xE1, 0x86, 0xAA, 0x43, 0xE1, 0x86, + 0xAC, 0x43, 0xE1, 0x86, 0xAD, 0x43, 0xE1, 0x86, + 0xB0, 0x43, 0xE1, 0x86, 0xB1, 0x43, 0xE1, 0x86, + 0xB2, 0x43, 0xE1, 0x86, 0xB3, 0x43, 0xE1, 0x86, + 0xB4, 0x43, 0xE1, 0x86, 0xB5, 0x43, 0xE1, 0x87, + 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43, 0xE1, 0x87, + 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43, 0xE1, 0x87, + 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43, 0xE1, 0x87, // Bytes 940 - 97f - 0x64, 0x01, 0x65, 0x02, 0xC9, 0x99, 0x02, 0xC9, - 0x9B, 0x02, 0xC9, 0x9C, 0x01, 0x67, 0x01, 0x6B, - 0x01, 0x6D, 0x02, 0xC5, 0x8B, 0x02, 0xC9, 0x94, - 0x03, 0xE1, 0xB4, 0x96, 0x03, 0xE1, 0xB4, 0x97, - 0x01, 0x70, 0x01, 0x74, 0x01, 0x75, 0x03, 0xE1, - 0xB4, 0x9D, 0x02, 0xC9, 0xAF, 0x01, 0x76, 0x03, - 0xE1, 0xB4, 0xA5, 0x02, 0xCE, 0xB3, 0x02, 0xCE, - 0xB4, 0x02, 0xCF, 0x87, 0x01, 0x69, 0x02, 0xD0, + 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43, 0xE1, 0x87, + 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43, 0xE1, 0x87, + 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43, 0xE1, 0xB4, + 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43, 0xE1, 0xB4, + 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43, 0xE1, 0xB4, + 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43, 0xE1, 0xB6, + 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43, 0xE2, 0x80, + 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43, 0xE2, 0x80, // Bytes 980 - 9bf - 0xBD, 0x02, 0xC9, 0x92, 0x01, 0x63, 0x02, 0xC9, - 0x95, 0x02, 0xC3, 0xB0, 0x01, 0x66, 0x02, 0xC9, - 0x9F, 0x02, 0xC9, 0xA1, 0x02, 0xC9, 0xA5, 0x02, - 0xC9, 0xA8, 0x02, 0xC9, 0xA9, 0x02, 0xC9, 0xAA, - 0x03, 0xE1, 0xB5, 0xBB, 0x02, 0xCA, 0x9D, 0x02, - 0xC9, 0xAD, 0x03, 0xE1, 0xB6, 0x85, 0x02, 0xCA, - 0x9F, 0x02, 0xC9, 0xB1, 0x02, 0xC9, 0xB0, 0x02, - 0xC9, 0xB2, 0x02, 0xC9, 0xB3, 0x02, 0xC9, 0xB4, + 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43, 0xE2, 0x82, + 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43, 0xE2, 0x86, + 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43, 0xE2, 0x86, + 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43, 0xE2, 0x88, + 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43, 0xE2, 0x88, + 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43, 0xE2, 0x96, + 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43, 0xE2, 0xA6, + 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43, 0xE2, 0xB5, // Bytes 9c0 - 9ff - 0x02, 0xC9, 0xB5, 0x02, 0xC9, 0xB8, 0x02, 0xCA, - 0x82, 0x02, 0xCA, 0x83, 0x02, 0xC6, 0xAB, 0x02, - 0xCA, 0x89, 0x02, 0xCA, 0x8A, 0x03, 0xE1, 0xB4, - 0x9C, 0x02, 0xCA, 0x8B, 0x02, 0xCA, 0x8C, 0x01, - 0x7A, 0x02, 0xCA, 0x90, 0x02, 0xCA, 0x91, 0x02, - 0xCA, 0x92, 0x03, 0x41, 0xCC, 0xA5, 0x03, 0x61, - 0xCC, 0xA5, 0x03, 0x42, 0xCC, 0x87, 0x03, 0x62, - 0xCC, 0x87, 0x03, 0x42, 0xCC, 0xA3, 0x03, 0x62, + 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43, 0xE3, 0x80, + 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43, 0xE3, 0x80, + 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43, 0xE3, 0x80, + 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43, 0xE3, 0x80, + 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43, 0xE3, 0x80, + 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43, 0xE3, 0x80, + 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43, 0xE3, 0x80, + 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43, 0xE3, 0x80, // Bytes a00 - a3f - 0xCC, 0xA3, 0x03, 0x42, 0xCC, 0xB1, 0x03, 0x62, - 0xCC, 0xB1, 0x05, 0x43, 0xCC, 0xA7, 0xCC, 0x81, - 0x05, 0x63, 0xCC, 0xA7, 0xCC, 0x81, 0x03, 0x44, - 0xCC, 0x87, 0x03, 0x64, 0xCC, 0x87, 0x03, 0x44, - 0xCC, 0xA3, 0x03, 0x64, 0xCC, 0xA3, 0x03, 0x44, - 0xCC, 0xB1, 0x03, 0x64, 0xCC, 0xB1, 0x03, 0x44, - 0xCC, 0xA7, 0x03, 0x64, 0xCC, 0xA7, 0x03, 0x44, - 0xCC, 0xAD, 0x03, 0x64, 0xCC, 0xAD, 0x05, 0x45, + 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43, 0xE3, 0x82, + 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43, 0xE3, 0x82, + 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43, 0xE3, 0x82, + 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43, 0xE3, 0x82, + 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43, 0xE3, 0x82, + 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43, 0xE3, 0x82, + 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43, 0xE3, 0x82, + 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43, 0xE3, 0x82, // Bytes a40 - a7f - 0xCC, 0x84, 0xCC, 0x80, 0x05, 0x65, 0xCC, 0x84, - 0xCC, 0x80, 0x05, 0x45, 0xCC, 0x84, 0xCC, 0x81, - 0x05, 0x65, 0xCC, 0x84, 0xCC, 0x81, 0x03, 0x45, - 0xCC, 0xAD, 0x03, 0x65, 0xCC, 0xAD, 0x03, 0x45, - 0xCC, 0xB0, 0x03, 0x65, 0xCC, 0xB0, 0x05, 0x45, - 0xCC, 0xA7, 0xCC, 0x86, 0x05, 0x65, 0xCC, 0xA7, - 0xCC, 0x86, 0x03, 0x46, 0xCC, 0x87, 0x03, 0x66, - 0xCC, 0x87, 0x03, 0x47, 0xCC, 0x84, 0x03, 0x67, + 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43, 0xE3, 0x82, + 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43, 0xE3, 0x82, + 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43, 0xE3, 0x82, + 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43, 0xE3, 0x83, + 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43, 0xE3, 0x83, + 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43, 0xE3, 0x83, + 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43, 0xE3, 0x83, + 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43, 0xE3, 0x83, // Bytes a80 - abf - 0xCC, 0x84, 0x03, 0x48, 0xCC, 0x87, 0x03, 0x68, - 0xCC, 0x87, 0x03, 0x48, 0xCC, 0xA3, 0x03, 0x68, - 0xCC, 0xA3, 0x03, 0x48, 0xCC, 0x88, 0x03, 0x68, - 0xCC, 0x88, 0x03, 0x48, 0xCC, 0xA7, 0x03, 0x68, - 0xCC, 0xA7, 0x03, 0x48, 0xCC, 0xAE, 0x03, 0x68, - 0xCC, 0xAE, 0x03, 0x49, 0xCC, 0xB0, 0x03, 0x69, - 0xCC, 0xB0, 0x05, 0x49, 0xCC, 0x88, 0xCC, 0x81, - 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81, 0x03, 0x4B, + 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43, 0xE3, 0x83, + 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43, 0xE3, 0x83, + 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43, 0xE3, 0x83, + 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43, 0xE3, 0x83, + 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43, 0xE3, 0x83, + 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43, 0xE3, 0x83, + 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43, 0xE3, 0x83, + 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43, 0xE3, 0x83, // Bytes ac0 - aff - 0xCC, 0x81, 0x03, 0x6B, 0xCC, 0x81, 0x03, 0x4B, - 0xCC, 0xA3, 0x03, 0x6B, 0xCC, 0xA3, 0x03, 0x4B, - 0xCC, 0xB1, 0x03, 0x6B, 0xCC, 0xB1, 0x03, 0x4C, - 0xCC, 0xA3, 0x03, 0x6C, 0xCC, 0xA3, 0x05, 0x4C, - 0xCC, 0xA3, 0xCC, 0x84, 0x05, 0x6C, 0xCC, 0xA3, - 0xCC, 0x84, 0x03, 0x4C, 0xCC, 0xB1, 0x03, 0x6C, - 0xCC, 0xB1, 0x03, 0x4C, 0xCC, 0xAD, 0x03, 0x6C, - 0xCC, 0xAD, 0x03, 0x4D, 0xCC, 0x81, 0x03, 0x6D, + 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43, 0xE3, 0x83, + 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43, 0xE3, 0x83, + 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43, 0xE3, 0x83, + 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43, 0xE3, 0x83, + 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43, 0xE3, 0x83, + 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43, 0xE3, 0x83, + 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43, 0xE3, 0x92, + 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43, 0xE3, 0x93, // Bytes b00 - b3f - 0xCC, 0x81, 0x03, 0x4D, 0xCC, 0x87, 0x03, 0x6D, - 0xCC, 0x87, 0x03, 0x4D, 0xCC, 0xA3, 0x03, 0x6D, - 0xCC, 0xA3, 0x03, 0x4E, 0xCC, 0x87, 0x03, 0x6E, - 0xCC, 0x87, 0x03, 0x4E, 0xCC, 0xA3, 0x03, 0x6E, - 0xCC, 0xA3, 0x03, 0x4E, 0xCC, 0xB1, 0x03, 0x6E, - 0xCC, 0xB1, 0x03, 0x4E, 0xCC, 0xAD, 0x03, 0x6E, - 0xCC, 0xAD, 0x05, 0x4F, 0xCC, 0x83, 0xCC, 0x81, - 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x81, 0x05, 0x4F, + 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43, 0xE3, 0x9B, + 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43, 0xE3, 0x9E, + 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43, 0xE3, 0xA1, + 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43, 0xE3, 0xA3, + 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43, 0xE3, 0xA4, + 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43, 0xE3, 0xA8, + 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43, 0xE3, 0xAB, + 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43, 0xE3, 0xAC, // Bytes b40 - b7f - 0xCC, 0x83, 0xCC, 0x88, 0x05, 0x6F, 0xCC, 0x83, - 0xCC, 0x88, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80, - 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0x05, 0x4F, - 0xCC, 0x84, 0xCC, 0x81, 0x05, 0x6F, 0xCC, 0x84, - 0xCC, 0x81, 0x03, 0x50, 0xCC, 0x81, 0x03, 0x70, - 0xCC, 0x81, 0x03, 0x50, 0xCC, 0x87, 0x03, 0x70, - 0xCC, 0x87, 0x03, 0x52, 0xCC, 0x87, 0x03, 0x72, - 0xCC, 0x87, 0x03, 0x52, 0xCC, 0xA3, 0x03, 0x72, + 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43, 0xE3, 0xAE, + 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43, 0xE3, 0xB1, + 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43, 0xE3, 0xB6, + 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43, 0xE3, 0xBA, + 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43, 0xE3, 0xBF, + 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43, 0xE4, 0x80, + 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43, 0xE4, 0x81, + 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43, 0xE4, 0x83, // Bytes b80 - bbf - 0xCC, 0xA3, 0x05, 0x52, 0xCC, 0xA3, 0xCC, 0x84, - 0x05, 0x72, 0xCC, 0xA3, 0xCC, 0x84, 0x03, 0x52, - 0xCC, 0xB1, 0x03, 0x72, 0xCC, 0xB1, 0x03, 0x53, - 0xCC, 0x87, 0x03, 0x73, 0xCC, 0x87, 0x03, 0x53, - 0xCC, 0xA3, 0x03, 0x73, 0xCC, 0xA3, 0x05, 0x53, - 0xCC, 0x81, 0xCC, 0x87, 0x05, 0x73, 0xCC, 0x81, - 0xCC, 0x87, 0x05, 0x53, 0xCC, 0x8C, 0xCC, 0x87, - 0x05, 0x73, 0xCC, 0x8C, 0xCC, 0x87, 0x05, 0x53, + 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43, 0xE4, 0x88, + 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43, 0xE4, 0x8A, + 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43, 0xE4, 0x8C, + 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43, 0xE4, 0x8F, + 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43, 0xE4, 0x90, + 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43, 0xE4, 0x94, + 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43, 0xE4, 0x95, + 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43, 0xE4, 0x97, // Bytes bc0 - bff - 0xCC, 0xA3, 0xCC, 0x87, 0x05, 0x73, 0xCC, 0xA3, - 0xCC, 0x87, 0x03, 0x54, 0xCC, 0x87, 0x03, 0x74, - 0xCC, 0x87, 0x03, 0x54, 0xCC, 0xA3, 0x03, 0x74, - 0xCC, 0xA3, 0x03, 0x54, 0xCC, 0xB1, 0x03, 0x74, - 0xCC, 0xB1, 0x03, 0x54, 0xCC, 0xAD, 0x03, 0x74, - 0xCC, 0xAD, 0x03, 0x55, 0xCC, 0xA4, 0x03, 0x75, - 0xCC, 0xA4, 0x03, 0x55, 0xCC, 0xB0, 0x03, 0x75, - 0xCC, 0xB0, 0x03, 0x55, 0xCC, 0xAD, 0x03, 0x75, + 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43, 0xE4, 0x98, + 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43, 0xE4, 0x9B, + 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43, 0xE4, 0xA7, + 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43, 0xE4, 0xA9, + 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43, 0xE4, 0xAC, + 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43, 0xE4, 0xB3, + 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43, 0xE4, 0xB3, + 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43, 0xE4, 0xB8, // Bytes c00 - c3f - 0xCC, 0xAD, 0x05, 0x55, 0xCC, 0x83, 0xCC, 0x81, - 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81, 0x05, 0x55, - 0xCC, 0x84, 0xCC, 0x88, 0x05, 0x75, 0xCC, 0x84, - 0xCC, 0x88, 0x03, 0x56, 0xCC, 0x83, 0x03, 0x76, - 0xCC, 0x83, 0x03, 0x56, 0xCC, 0xA3, 0x03, 0x76, - 0xCC, 0xA3, 0x03, 0x57, 0xCC, 0x80, 0x03, 0x77, - 0xCC, 0x80, 0x03, 0x57, 0xCC, 0x81, 0x03, 0x77, - 0xCC, 0x81, 0x03, 0x57, 0xCC, 0x88, 0x03, 0x77, + 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43, 0xE4, 0xB8, + 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43, 0xE4, 0xB8, + 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43, 0xE4, 0xB8, + 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43, 0xE4, 0xB8, + 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43, 0xE4, 0xB8, + 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43, 0xE4, 0xB8, + 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43, 0xE4, 0xB8, + 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43, 0xE4, 0xB8, // Bytes c40 - c7f - 0xCC, 0x88, 0x03, 0x57, 0xCC, 0x87, 0x03, 0x77, - 0xCC, 0x87, 0x03, 0x57, 0xCC, 0xA3, 0x03, 0x77, - 0xCC, 0xA3, 0x03, 0x58, 0xCC, 0x87, 0x03, 0x78, - 0xCC, 0x87, 0x03, 0x58, 0xCC, 0x88, 0x03, 0x78, - 0xCC, 0x88, 0x03, 0x59, 0xCC, 0x87, 0x03, 0x79, - 0xCC, 0x87, 0x03, 0x5A, 0xCC, 0x82, 0x03, 0x7A, - 0xCC, 0x82, 0x03, 0x5A, 0xCC, 0xA3, 0x03, 0x7A, - 0xCC, 0xA3, 0x03, 0x5A, 0xCC, 0xB1, 0x03, 0x7A, + 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43, 0xE4, 0xB9, + 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43, 0xE4, 0xBA, + 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43, 0xE4, 0xBA, + 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43, 0xE4, 0xBA, + 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43, 0xE4, 0xBA, + 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43, 0xE4, 0xBA, + 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43, 0xE4, 0xBB, + 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43, 0xE4, 0xBC, // Bytes c80 - cbf - 0xCC, 0xB1, 0x03, 0x68, 0xCC, 0xB1, 0x03, 0x74, - 0xCC, 0x88, 0x03, 0x77, 0xCC, 0x8A, 0x03, 0x79, - 0xCC, 0x8A, 0x03, 0x61, 0xCA, 0xBE, 0x04, 0xC5, - 0xBF, 0xCC, 0x87, 0x03, 0x41, 0xCC, 0xA3, 0x03, - 0x61, 0xCC, 0xA3, 0x03, 0x41, 0xCC, 0x89, 0x03, - 0x61, 0xCC, 0x89, 0x05, 0x41, 0xCC, 0x82, 0xCC, - 0x81, 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x81, 0x05, - 0x41, 0xCC, 0x82, 0xCC, 0x80, 0x05, 0x61, 0xCC, + 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43, 0xE4, 0xBD, + 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43, 0xE4, 0xBE, + 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43, 0xE4, 0xBE, + 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43, 0xE4, 0xBE, + 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43, 0xE5, 0x80, + 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43, 0xE5, 0x82, + 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43, 0xE5, 0x83, + 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43, 0xE5, 0x84, // Bytes cc0 - cff - 0x82, 0xCC, 0x80, 0x05, 0x41, 0xCC, 0x82, 0xCC, - 0x89, 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x89, 0x05, - 0x41, 0xCC, 0x82, 0xCC, 0x83, 0x05, 0x61, 0xCC, - 0x82, 0xCC, 0x83, 0x05, 0x41, 0xCC, 0xA3, 0xCC, - 0x82, 0x05, 0x61, 0xCC, 0xA3, 0xCC, 0x82, 0x05, - 0x41, 0xCC, 0x86, 0xCC, 0x81, 0x05, 0x61, 0xCC, - 0x86, 0xCC, 0x81, 0x05, 0x41, 0xCC, 0x86, 0xCC, - 0x80, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x80, 0x05, + 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43, 0xE5, 0x85, + 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43, 0xE5, 0x85, + 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43, 0xE5, 0x85, + 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43, 0xE5, 0x85, + 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43, 0xE5, 0x85, + 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43, 0xE5, 0x85, + 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43, 0xE5, 0x86, + 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43, 0xE5, 0x86, // Bytes d00 - d3f - 0x41, 0xCC, 0x86, 0xCC, 0x89, 0x05, 0x61, 0xCC, - 0x86, 0xCC, 0x89, 0x05, 0x41, 0xCC, 0x86, 0xCC, - 0x83, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83, 0x05, - 0x41, 0xCC, 0xA3, 0xCC, 0x86, 0x05, 0x61, 0xCC, - 0xA3, 0xCC, 0x86, 0x03, 0x45, 0xCC, 0xA3, 0x03, - 0x65, 0xCC, 0xA3, 0x03, 0x45, 0xCC, 0x89, 0x03, - 0x65, 0xCC, 0x89, 0x03, 0x45, 0xCC, 0x83, 0x03, - 0x65, 0xCC, 0x83, 0x05, 0x45, 0xCC, 0x82, 0xCC, + 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43, 0xE5, 0x86, + 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43, 0xE5, 0x86, + 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43, 0xE5, 0x86, + 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43, 0xE5, 0x86, + 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43, 0xE5, 0x86, + 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43, 0xE5, 0x87, + 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43, 0xE5, 0x87, + 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43, 0xE5, 0x87, // Bytes d40 - d7f - 0x81, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0x05, - 0x45, 0xCC, 0x82, 0xCC, 0x80, 0x05, 0x65, 0xCC, - 0x82, 0xCC, 0x80, 0x05, 0x45, 0xCC, 0x82, 0xCC, - 0x89, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x89, 0x05, - 0x45, 0xCC, 0x82, 0xCC, 0x83, 0x05, 0x65, 0xCC, - 0x82, 0xCC, 0x83, 0x05, 0x45, 0xCC, 0xA3, 0xCC, - 0x82, 0x05, 0x65, 0xCC, 0xA3, 0xCC, 0x82, 0x03, - 0x49, 0xCC, 0x89, 0x03, 0x69, 0xCC, 0x89, 0x03, + 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43, 0xE5, 0x88, + 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43, 0xE5, 0x88, + 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43, 0xE5, 0x88, + 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43, 0xE5, 0x88, + 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43, 0xE5, 0x89, + 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43, 0xE5, 0x89, + 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43, 0xE5, 0x8A, + 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43, 0xE5, 0x8A, // Bytes d80 - dbf - 0x49, 0xCC, 0xA3, 0x03, 0x69, 0xCC, 0xA3, 0x03, - 0x4F, 0xCC, 0xA3, 0x03, 0x6F, 0xCC, 0xA3, 0x03, - 0x4F, 0xCC, 0x89, 0x03, 0x6F, 0xCC, 0x89, 0x05, - 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0x05, 0x6F, 0xCC, - 0x82, 0xCC, 0x81, 0x05, 0x4F, 0xCC, 0x82, 0xCC, - 0x80, 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0x05, - 0x4F, 0xCC, 0x82, 0xCC, 0x89, 0x05, 0x6F, 0xCC, - 0x82, 0xCC, 0x89, 0x05, 0x4F, 0xCC, 0x82, 0xCC, + 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43, 0xE5, 0x8B, + 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43, 0xE5, 0x8B, + 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43, 0xE5, 0x8B, + 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43, 0xE5, 0x8B, + 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43, 0xE5, 0x8C, + 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43, 0xE5, 0x8C, + 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43, 0xE5, 0x8C, + 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43, 0xE5, 0x8C, // Bytes dc0 - dff - 0x83, 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x83, 0x05, - 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0x05, 0x6F, 0xCC, - 0xA3, 0xCC, 0x82, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, - 0x81, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x81, 0x05, - 0x4F, 0xCC, 0x9B, 0xCC, 0x80, 0x05, 0x6F, 0xCC, - 0x9B, 0xCC, 0x80, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, - 0x89, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89, 0x05, - 0x4F, 0xCC, 0x9B, 0xCC, 0x83, 0x05, 0x6F, 0xCC, + 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43, 0xE5, 0x8D, + 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43, 0xE5, 0x8D, + 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43, 0xE5, 0x8D, + 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43, 0xE5, 0x8D, + 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43, 0xE5, 0x8D, + 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43, 0xE5, 0x8D, + 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43, 0xE5, 0x8D, + 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43, 0xE5, 0x8E, // Bytes e00 - e3f - 0x9B, 0xCC, 0x83, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, - 0xA3, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0x03, - 0x55, 0xCC, 0xA3, 0x03, 0x75, 0xCC, 0xA3, 0x03, - 0x55, 0xCC, 0x89, 0x03, 0x75, 0xCC, 0x89, 0x05, - 0x55, 0xCC, 0x9B, 0xCC, 0x81, 0x05, 0x75, 0xCC, - 0x9B, 0xCC, 0x81, 0x05, 0x55, 0xCC, 0x9B, 0xCC, - 0x80, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x80, 0x05, - 0x55, 0xCC, 0x9B, 0xCC, 0x89, 0x05, 0x75, 0xCC, + 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43, 0xE5, 0x8F, + 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43, 0xE5, 0x8F, + 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43, 0xE5, 0x8F, + 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43, 0xE5, 0x8F, + 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43, 0xE5, 0x8F, + 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43, 0xE5, 0x8F, + 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43, 0xE5, 0x90, + 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43, 0xE5, 0x90, // Bytes e40 - e7f - 0x9B, 0xCC, 0x89, 0x05, 0x55, 0xCC, 0x9B, 0xCC, - 0x83, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83, 0x05, - 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0x05, 0x75, 0xCC, - 0x9B, 0xCC, 0xA3, 0x03, 0x59, 0xCC, 0x80, 0x03, - 0x79, 0xCC, 0x80, 0x03, 0x59, 0xCC, 0xA3, 0x03, - 0x79, 0xCC, 0xA3, 0x03, 0x59, 0xCC, 0x89, 0x03, - 0x79, 0xCC, 0x89, 0x03, 0x59, 0xCC, 0x83, 0x03, - 0x79, 0xCC, 0x83, 0x04, 0xCE, 0xB1, 0xCC, 0x93, + 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43, 0xE5, 0x90, + 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43, 0xE5, 0x91, + 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43, 0xE5, 0x91, + 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43, 0xE5, 0x92, + 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43, 0xE5, 0x93, + 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43, 0xE5, 0x95, + 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43, 0xE5, 0x95, + 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43, 0xE5, 0x96, // Bytes e80 - ebf - 0x04, 0xCE, 0xB1, 0xCC, 0x94, 0x06, 0xCE, 0xB1, - 0xCC, 0x93, 0xCC, 0x80, 0x06, 0xCE, 0xB1, 0xCC, - 0x94, 0xCC, 0x80, 0x06, 0xCE, 0xB1, 0xCC, 0x93, - 0xCC, 0x81, 0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, - 0x81, 0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, - 0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0x04, - 0xCE, 0x91, 0xCC, 0x93, 0x04, 0xCE, 0x91, 0xCC, - 0x94, 0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, + 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43, 0xE5, 0x96, + 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43, 0xE5, 0x96, + 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43, 0xE5, 0x96, + 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43, 0xE5, 0x97, + 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43, 0xE5, 0x98, + 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43, 0xE5, 0x99, + 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43, 0xE5, 0x9B, + 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43, 0xE5, 0x9B, // Bytes ec0 - eff - 0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80, 0x06, - 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x81, 0x06, 0xCE, - 0x91, 0xCC, 0x94, 0xCC, 0x81, 0x06, 0xCE, 0x91, - 0xCC, 0x93, 0xCD, 0x82, 0x06, 0xCE, 0x91, 0xCC, - 0x94, 0xCD, 0x82, 0x04, 0xCE, 0xB5, 0xCC, 0x93, - 0x04, 0xCE, 0xB5, 0xCC, 0x94, 0x06, 0xCE, 0xB5, - 0xCC, 0x93, 0xCC, 0x80, 0x06, 0xCE, 0xB5, 0xCC, - 0x94, 0xCC, 0x80, 0x06, 0xCE, 0xB5, 0xCC, 0x93, + 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43, 0xE5, 0x9C, + 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43, 0xE5, 0x9C, + 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43, 0xE5, 0x9F, + 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43, 0xE5, 0xA0, + 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43, 0xE5, 0xA0, + 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43, 0xE5, 0xA1, + 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43, 0xE5, 0xA2, + 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43, 0xE5, 0xA2, // Bytes f00 - f3f - 0xCC, 0x81, 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, - 0x81, 0x04, 0xCE, 0x95, 0xCC, 0x93, 0x04, 0xCE, - 0x95, 0xCC, 0x94, 0x06, 0xCE, 0x95, 0xCC, 0x93, - 0xCC, 0x80, 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, - 0x80, 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, - 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0x04, - 0xCE, 0xB7, 0xCC, 0x93, 0x04, 0xCE, 0xB7, 0xCC, - 0x94, 0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, + 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43, 0xE5, 0xA3, + 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43, 0xE5, 0xA3, + 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43, 0xE5, 0xA3, + 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43, 0xE5, 0xA4, + 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43, 0xE5, 0xA4, + 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43, 0xE5, 0xA4, + 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43, 0xE5, 0xA4, + 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43, 0xE5, 0xA4, // Bytes f40 - f7f - 0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0x06, - 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0x06, 0xCE, - 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0x06, 0xCE, 0xB7, - 0xCC, 0x93, 0xCD, 0x82, 0x06, 0xCE, 0xB7, 0xCC, - 0x94, 0xCD, 0x82, 0x04, 0xCE, 0x97, 0xCC, 0x93, - 0x04, 0xCE, 0x97, 0xCC, 0x94, 0x06, 0xCE, 0x97, - 0xCC, 0x93, 0xCC, 0x80, 0x06, 0xCE, 0x97, 0xCC, - 0x94, 0xCC, 0x80, 0x06, 0xCE, 0x97, 0xCC, 0x93, + 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43, 0xE5, 0xA5, + 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43, 0xE5, 0xA5, + 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43, 0xE5, 0xA5, + 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43, 0xE5, 0xA7, + 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43, 0xE5, 0xA8, + 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43, 0xE5, 0xA9, + 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43, 0xE5, 0xAC, + 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43, 0xE5, 0xAC, // Bytes f80 - fbf - 0xCC, 0x81, 0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCC, - 0x81, 0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, - 0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x82, 0x04, - 0xCE, 0xB9, 0xCC, 0x93, 0x04, 0xCE, 0xB9, 0xCC, - 0x94, 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, - 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0x06, - 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0x06, 0xCE, - 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0x06, 0xCE, 0xB9, + 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43, 0xE5, 0xAD, + 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43, 0xE5, 0xAE, + 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43, 0xE5, 0xAE, + 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43, 0xE5, 0xAF, + 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43, 0xE5, 0xAF, + 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43, 0xE5, 0xAF, + 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43, 0xE5, 0xB0, + 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43, 0xE5, 0xB0, // Bytes fc0 - fff - 0xCC, 0x93, 0xCD, 0x82, 0x06, 0xCE, 0xB9, 0xCC, - 0x94, 0xCD, 0x82, 0x04, 0xCE, 0x99, 0xCC, 0x93, - 0x04, 0xCE, 0x99, 0xCC, 0x94, 0x06, 0xCE, 0x99, - 0xCC, 0x93, 0xCC, 0x80, 0x06, 0xCE, 0x99, 0xCC, - 0x94, 0xCC, 0x80, 0x06, 0xCE, 0x99, 0xCC, 0x93, - 0xCC, 0x81, 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, - 0x81, 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, - 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0x04, + 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43, 0xE5, 0xB0, + 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43, 0xE5, 0xB1, + 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43, 0xE5, 0xB1, + 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43, 0xE5, 0xB1, + 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43, 0xE5, 0xB3, + 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43, 0xE5, 0xB5, + 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43, 0xE5, 0xB5, + 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43, 0xE5, 0xB5, // Bytes 1000 - 103f - 0xCE, 0xBF, 0xCC, 0x93, 0x04, 0xCE, 0xBF, 0xCC, - 0x94, 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, - 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0x06, - 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0x06, 0xCE, - 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0x04, 0xCE, 0x9F, - 0xCC, 0x93, 0x04, 0xCE, 0x9F, 0xCC, 0x94, 0x06, - 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0x06, 0xCE, - 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0x06, 0xCE, 0x9F, + 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43, 0xE5, 0xB6, + 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43, 0xE5, 0xB7, + 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43, 0xE5, 0xB7, + 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43, 0xE5, 0xB7, + 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43, 0xE5, 0xB7, + 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43, 0xE5, 0xB8, + 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43, 0xE5, 0xB9, + 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43, 0xE5, 0xB9, // Bytes 1040 - 107f - 0xCC, 0x93, 0xCC, 0x81, 0x06, 0xCE, 0x9F, 0xCC, - 0x94, 0xCC, 0x81, 0x04, 0xCF, 0x85, 0xCC, 0x93, - 0x04, 0xCF, 0x85, 0xCC, 0x94, 0x06, 0xCF, 0x85, - 0xCC, 0x93, 0xCC, 0x80, 0x06, 0xCF, 0x85, 0xCC, - 0x94, 0xCC, 0x80, 0x06, 0xCF, 0x85, 0xCC, 0x93, - 0xCC, 0x81, 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, - 0x81, 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, - 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0x04, + 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43, 0xE5, 0xB9, + 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43, 0xE5, 0xBA, + 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43, 0xE5, 0xBA, + 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43, 0xE5, 0xBB, + 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43, 0xE5, 0xBB, + 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43, 0xE5, 0xBB, + 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43, 0xE5, 0xBB, + 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43, 0xE5, 0xBC, // Bytes 1080 - 10bf - 0xCE, 0xA5, 0xCC, 0x94, 0x06, 0xCE, 0xA5, 0xCC, - 0x94, 0xCC, 0x80, 0x06, 0xCE, 0xA5, 0xCC, 0x94, - 0xCC, 0x81, 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, - 0x82, 0x04, 0xCF, 0x89, 0xCC, 0x93, 0x04, 0xCF, - 0x89, 0xCC, 0x94, 0x06, 0xCF, 0x89, 0xCC, 0x93, - 0xCC, 0x80, 0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCC, - 0x80, 0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x81, - 0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x81, 0x06, + 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43, 0xE5, 0xBC, + 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43, 0xE5, 0xBD, + 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43, 0xE5, 0xBD, + 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43, 0xE5, 0xBD, + 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43, 0xE5, 0xBE, + 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43, 0xE5, 0xBE, + 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43, 0xE5, 0xBE, + 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43, 0xE5, 0xBF, // Bytes 10c0 - 10ff - 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0x06, 0xCF, - 0x89, 0xCC, 0x94, 0xCD, 0x82, 0x04, 0xCE, 0xA9, - 0xCC, 0x93, 0x04, 0xCE, 0xA9, 0xCC, 0x94, 0x06, - 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0x06, 0xCE, - 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0x06, 0xCE, 0xA9, - 0xCC, 0x93, 0xCC, 0x81, 0x06, 0xCE, 0xA9, 0xCC, - 0x94, 0xCC, 0x81, 0x06, 0xCE, 0xA9, 0xCC, 0x93, - 0xCD, 0x82, 0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, + 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43, 0xE5, 0xBF, + 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43, 0xE5, 0xBF, + 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43, 0xE6, 0x80, + 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43, 0xE6, 0x82, + 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43, 0xE6, 0x83, + 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43, 0xE6, 0x83, + 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43, 0xE6, 0x85, + 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43, 0xE6, 0x85, // Bytes 1100 - 113f - 0x82, 0x04, 0xCE, 0xB1, 0xCC, 0x80, 0x04, 0xCE, - 0xB5, 0xCC, 0x80, 0x04, 0xCE, 0xB7, 0xCC, 0x80, - 0x04, 0xCE, 0xB9, 0xCC, 0x80, 0x04, 0xCE, 0xBF, - 0xCC, 0x80, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0x04, - 0xCF, 0x89, 0xCC, 0x80, 0x06, 0xCE, 0xB1, 0xCC, - 0x93, 0xCD, 0x85, 0x06, 0xCE, 0xB1, 0xCC, 0x94, - 0xCD, 0x85, 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCC, - 0x80, 0xCD, 0x85, 0x08, 0xCE, 0xB1, 0xCC, 0x94, + 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43, 0xE6, 0x85, + 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43, 0xE6, 0x85, + 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43, 0xE6, 0x86, + 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43, 0xE6, 0x86, + 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43, 0xE6, 0x87, + 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43, 0xE6, 0x87, + 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43, 0xE6, 0x88, + 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43, 0xE6, 0x88, // Bytes 1140 - 117f - 0xCC, 0x80, 0xCD, 0x85, 0x08, 0xCE, 0xB1, 0xCC, - 0x93, 0xCC, 0x81, 0xCD, 0x85, 0x08, 0xCE, 0xB1, - 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0x08, 0xCE, - 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0x08, - 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, - 0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0x06, - 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0x08, 0xCE, - 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0x08, + 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43, 0xE6, 0x88, + 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43, 0xE6, 0x89, + 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43, 0xE6, 0x89, + 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43, 0xE6, 0x8A, + 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43, 0xE6, 0x8B, + 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43, 0xE6, 0x8B, + 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43, 0xE6, 0x8B, + 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43, 0xE6, 0x8C, // Bytes 1180 - 11bf - 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, - 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCD, - 0x85, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, - 0xCD, 0x85, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCD, - 0x82, 0xCD, 0x85, 0x08, 0xCE, 0x91, 0xCC, 0x94, - 0xCD, 0x82, 0xCD, 0x85, 0x06, 0xCE, 0xB7, 0xCC, - 0x93, 0xCD, 0x85, 0x06, 0xCE, 0xB7, 0xCC, 0x94, - 0xCD, 0x85, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, + 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43, 0xE6, 0x8D, + 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43, 0xE6, 0x8D, + 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43, 0xE6, 0x8E, + 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43, 0xE6, 0x8F, + 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43, 0xE6, 0x8F, + 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43, 0xE6, 0x90, + 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43, 0xE6, 0x91, + 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43, 0xE6, 0x91, // Bytes 11c0 - 11ff - 0x80, 0xCD, 0x85, 0x08, 0xCE, 0xB7, 0xCC, 0x94, - 0xCC, 0x80, 0xCD, 0x85, 0x08, 0xCE, 0xB7, 0xCC, - 0x93, 0xCC, 0x81, 0xCD, 0x85, 0x08, 0xCE, 0xB7, - 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0x08, 0xCE, - 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0x08, - 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, - 0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0x06, - 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0x08, 0xCE, + 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43, 0xE6, 0x92, + 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43, 0xE6, 0x94, + 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43, 0xE6, 0x95, + 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43, 0xE6, 0x95, + 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43, 0xE6, 0x96, + 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43, 0xE6, 0x96, + 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43, 0xE6, 0x96, + 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43, 0xE6, 0x97, // Bytes 1200 - 123f - 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0x08, - 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, - 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, - 0x85, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x81, - 0xCD, 0x85, 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, - 0x82, 0xCD, 0x85, 0x08, 0xCE, 0x97, 0xCC, 0x94, - 0xCD, 0x82, 0xCD, 0x85, 0x06, 0xCF, 0x89, 0xCC, - 0x93, 0xCD, 0x85, 0x06, 0xCF, 0x89, 0xCC, 0x94, + 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43, 0xE6, 0x97, + 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43, 0xE6, 0x97, + 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43, 0xE6, 0x98, + 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43, 0xE6, 0x99, + 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43, 0xE6, 0x9A, + 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43, 0xE6, 0x9A, + 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43, 0xE6, 0x9B, + 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43, 0xE6, 0x9B, // Bytes 1240 - 127f - 0xCD, 0x85, 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCC, - 0x80, 0xCD, 0x85, 0x08, 0xCF, 0x89, 0xCC, 0x94, - 0xCC, 0x80, 0xCD, 0x85, 0x08, 0xCF, 0x89, 0xCC, - 0x93, 0xCC, 0x81, 0xCD, 0x85, 0x08, 0xCF, 0x89, - 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0x08, 0xCF, - 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0x08, - 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, - 0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0x06, + 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43, 0xE6, 0x9C, + 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43, 0xE6, 0x9C, + 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43, 0xE6, 0x9C, + 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43, 0xE6, 0x9D, + 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43, 0xE6, 0x9D, + 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43, 0xE6, 0x9D, + 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43, 0xE6, 0x9E, + 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43, 0xE6, 0x9F, // Bytes 1280 - 12bf - 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0x08, 0xCE, - 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0x08, - 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, - 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCD, - 0x85, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, - 0xCD, 0x85, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, - 0x82, 0xCD, 0x85, 0x08, 0xCE, 0xA9, 0xCC, 0x94, - 0xCD, 0x82, 0xCD, 0x85, 0x04, 0xCE, 0xB1, 0xCC, + 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43, 0xE6, 0xA0, + 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43, 0xE6, 0xA1, + 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43, 0xE6, 0xA2, + 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43, 0xE6, 0xA2, + 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43, 0xE6, 0xA5, + 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43, 0xE6, 0xA7, + 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43, 0xE6, 0xA8, + 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43, 0xE6, 0xAB, // Bytes 12c0 - 12ff - 0x86, 0x04, 0xCE, 0xB1, 0xCC, 0x84, 0x06, 0xCE, - 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0x04, 0xCE, 0xB1, - 0xCD, 0x85, 0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, - 0x85, 0x04, 0xCE, 0xB1, 0xCD, 0x82, 0x06, 0xCE, - 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0x04, 0xCE, 0x91, - 0xCC, 0x86, 0x04, 0xCE, 0x91, 0xCC, 0x84, 0x04, - 0xCE, 0x91, 0xCC, 0x80, 0x04, 0xCE, 0x91, 0xCD, - 0x85, 0x03, 0x20, 0xCC, 0x93, 0x02, 0xCE, 0xB9, + 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43, 0xE6, 0xAC, + 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43, 0xE6, 0xAC, + 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43, 0xE6, 0xAD, + 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43, 0xE6, 0xAD, + 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43, 0xE6, 0xAD, + 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43, 0xE6, 0xAE, + 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43, 0xE6, 0xAE, + 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43, 0xE6, 0xAF, // Bytes 1300 - 133f - 0x03, 0x20, 0xCD, 0x82, 0x04, 0xC2, 0xA8, 0xCD, - 0x82, 0x05, 0x20, 0xCC, 0x88, 0xCD, 0x82, 0x06, - 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0x04, 0xCE, - 0xB7, 0xCD, 0x85, 0x06, 0xCE, 0xB7, 0xCC, 0x81, - 0xCD, 0x85, 0x04, 0xCE, 0xB7, 0xCD, 0x82, 0x06, - 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0x04, 0xCE, - 0x95, 0xCC, 0x80, 0x04, 0xCE, 0x97, 0xCC, 0x80, - 0x04, 0xCE, 0x97, 0xCD, 0x85, 0x05, 0xE1, 0xBE, + 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43, 0xE6, 0xAF, + 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43, 0xE6, 0xB0, + 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43, 0xE6, 0xB0, + 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43, 0xE6, 0xB1, + 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43, 0xE6, 0xB2, + 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43, 0xE6, 0xB3, + 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43, 0xE6, 0xB3, + 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43, 0xE6, 0xB4, // Bytes 1340 - 137f - 0xBF, 0xCC, 0x80, 0x05, 0x20, 0xCC, 0x93, 0xCC, - 0x80, 0x05, 0xE1, 0xBE, 0xBF, 0xCC, 0x81, 0x05, - 0x20, 0xCC, 0x93, 0xCC, 0x81, 0x05, 0xE1, 0xBE, - 0xBF, 0xCD, 0x82, 0x05, 0x20, 0xCC, 0x93, 0xCD, - 0x82, 0x04, 0xCE, 0xB9, 0xCC, 0x86, 0x04, 0xCE, - 0xB9, 0xCC, 0x84, 0x06, 0xCE, 0xB9, 0xCC, 0x88, - 0xCC, 0x80, 0x04, 0xCE, 0xB9, 0xCD, 0x82, 0x06, - 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0x04, 0xCE, + 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43, 0xE6, 0xB4, + 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43, 0xE6, 0xB5, + 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43, 0xE6, 0xB5, + 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43, 0xE6, 0xB5, + 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43, 0xE6, 0xB7, + 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43, 0xE6, 0xB7, + 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43, 0xE6, 0xB8, + 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43, 0xE6, 0xB9, // Bytes 1380 - 13bf - 0x99, 0xCC, 0x86, 0x04, 0xCE, 0x99, 0xCC, 0x84, - 0x04, 0xCE, 0x99, 0xCC, 0x80, 0x05, 0xE1, 0xBF, - 0xBE, 0xCC, 0x80, 0x05, 0x20, 0xCC, 0x94, 0xCC, - 0x80, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, 0x81, 0x05, - 0x20, 0xCC, 0x94, 0xCC, 0x81, 0x05, 0xE1, 0xBF, - 0xBE, 0xCD, 0x82, 0x05, 0x20, 0xCC, 0x94, 0xCD, - 0x82, 0x04, 0xCF, 0x85, 0xCC, 0x86, 0x04, 0xCF, - 0x85, 0xCC, 0x84, 0x06, 0xCF, 0x85, 0xCC, 0x88, + 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43, 0xE6, 0xBA, + 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43, 0xE6, 0xBB, + 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43, 0xE6, 0xBB, + 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43, 0xE6, 0xBC, + 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43, 0xE6, 0xBC, + 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43, 0xE6, 0xBD, + 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43, 0xE6, 0xBF, + 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43, 0xE7, 0x80, // Bytes 13c0 - 13ff - 0xCC, 0x80, 0x04, 0xCF, 0x81, 0xCC, 0x93, 0x04, - 0xCF, 0x81, 0xCC, 0x94, 0x04, 0xCF, 0x85, 0xCD, - 0x82, 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, - 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0x04, 0xCE, 0xA5, - 0xCC, 0x84, 0x04, 0xCE, 0xA5, 0xCC, 0x80, 0x04, - 0xCE, 0xA1, 0xCC, 0x94, 0x04, 0xC2, 0xA8, 0xCC, - 0x80, 0x05, 0x20, 0xCC, 0x88, 0xCC, 0x80, 0x01, - 0x60, 0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, + 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43, 0xE7, 0x80, + 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43, 0xE7, 0x81, + 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43, 0xE7, 0x81, + 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43, 0xE7, 0x82, + 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43, 0xE7, 0x83, + 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43, 0xE7, 0x84, + 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43, 0xE7, 0x85, + 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43, 0xE7, 0x86, // Bytes 1400 - 143f - 0x04, 0xCF, 0x89, 0xCD, 0x85, 0x06, 0xCF, 0x89, - 0xCC, 0x81, 0xCD, 0x85, 0x04, 0xCF, 0x89, 0xCD, - 0x82, 0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, - 0x04, 0xCE, 0x9F, 0xCC, 0x80, 0x04, 0xCE, 0xA9, - 0xCC, 0x80, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0x02, - 0xC2, 0xB4, 0x03, 0x20, 0xCC, 0x94, 0x03, 0xE2, - 0x80, 0x82, 0x03, 0xE2, 0x80, 0x83, 0x03, 0xE2, - 0x80, 0x90, 0x03, 0x20, 0xCC, 0xB3, 0x01, 0x2E, + 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43, 0xE7, 0x87, + 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43, 0xE7, 0x88, + 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43, 0xE7, 0x88, + 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43, 0xE7, 0x88, + 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43, 0xE7, 0x88, + 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43, 0xE7, 0x89, + 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43, 0xE7, 0x89, + 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43, 0xE7, 0x89, // Bytes 1440 - 147f - 0x02, 0x2E, 0x2E, 0x03, 0x2E, 0x2E, 0x2E, 0x06, - 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x09, 0xE2, - 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, - 0x06, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x09, - 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2, 0x80, - 0xB5, 0x02, 0x21, 0x21, 0x03, 0x20, 0xCC, 0x85, - 0x02, 0x3F, 0x3F, 0x02, 0x3F, 0x21, 0x02, 0x21, - 0x3F, 0x0C, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, + 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43, 0xE7, 0x8A, + 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43, 0xE7, 0x8A, + 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43, 0xE7, 0x8B, + 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43, 0xE7, 0x8C, + 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43, 0xE7, 0x8D, + 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43, 0xE7, 0x8E, + 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43, 0xE7, 0x8E, + 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43, 0xE7, 0x8E, // Bytes 1480 - 14bf - 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x01, 0x30, - 0x01, 0x34, 0x01, 0x35, 0x01, 0x36, 0x01, 0x37, - 0x01, 0x38, 0x01, 0x39, 0x01, 0x2B, 0x03, 0xE2, - 0x88, 0x92, 0x01, 0x3D, 0x01, 0x28, 0x01, 0x29, - 0x01, 0x6E, 0x02, 0x52, 0x73, 0x03, 0x61, 0x2F, - 0x63, 0x03, 0x61, 0x2F, 0x73, 0x01, 0x43, 0x03, - 0xC2, 0xB0, 0x43, 0x03, 0x63, 0x2F, 0x6F, 0x03, - 0x63, 0x2F, 0x75, 0x02, 0xC6, 0x90, 0x03, 0xC2, + 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43, 0xE7, 0x90, + 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43, 0xE7, 0x90, + 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43, 0xE7, 0x91, + 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43, 0xE7, 0x91, + 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43, 0xE7, 0x92, + 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43, 0xE7, 0x93, + 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43, 0xE7, 0x93, + 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43, 0xE7, 0x94, // Bytes 14c0 - 14ff - 0xB0, 0x46, 0x02, 0xC4, 0xA7, 0x02, 0x4E, 0x6F, - 0x01, 0x51, 0x02, 0x53, 0x4D, 0x03, 0x54, 0x45, - 0x4C, 0x02, 0x54, 0x4D, 0x01, 0x5A, 0x02, 0xCE, - 0xA9, 0x01, 0x46, 0x02, 0xD7, 0x90, 0x02, 0xD7, - 0x91, 0x02, 0xD7, 0x92, 0x02, 0xD7, 0x93, 0x03, - 0x46, 0x41, 0x58, 0x02, 0xCE, 0x93, 0x02, 0xCE, - 0xA0, 0x03, 0xE2, 0x88, 0x91, 0x05, 0x31, 0xE2, - 0x81, 0x84, 0x37, 0x05, 0x31, 0xE2, 0x81, 0x84, + 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43, 0xE7, 0x94, + 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43, 0xE7, 0x94, + 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43, 0xE7, 0x94, + 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43, 0xE7, 0x94, + 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43, 0xE7, 0x95, + 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43, 0xE7, 0x95, + 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43, 0xE7, 0x96, + 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43, 0xE7, 0x98, // Bytes 1500 - 153f - 0x39, 0x06, 0x31, 0xE2, 0x81, 0x84, 0x31, 0x30, - 0x05, 0x31, 0xE2, 0x81, 0x84, 0x33, 0x05, 0x32, - 0xE2, 0x81, 0x84, 0x33, 0x05, 0x31, 0xE2, 0x81, - 0x84, 0x35, 0x05, 0x32, 0xE2, 0x81, 0x84, 0x35, - 0x05, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x05, 0x34, - 0xE2, 0x81, 0x84, 0x35, 0x05, 0x31, 0xE2, 0x81, - 0x84, 0x36, 0x05, 0x35, 0xE2, 0x81, 0x84, 0x36, - 0x05, 0x31, 0xE2, 0x81, 0x84, 0x38, 0x05, 0x33, + 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43, 0xE7, 0x98, + 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43, 0xE7, 0x99, + 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43, 0xE7, 0x99, + 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43, 0xE7, 0x9A, + 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43, 0xE7, 0x9B, + 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43, 0xE7, 0x9B, + 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43, 0xE7, 0x9B, + 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43, 0xE7, 0x9C, // Bytes 1540 - 157f - 0xE2, 0x81, 0x84, 0x38, 0x05, 0x35, 0xE2, 0x81, - 0x84, 0x38, 0x05, 0x37, 0xE2, 0x81, 0x84, 0x38, - 0x04, 0x31, 0xE2, 0x81, 0x84, 0x02, 0x49, 0x49, - 0x03, 0x49, 0x49, 0x49, 0x02, 0x49, 0x56, 0x01, - 0x56, 0x02, 0x56, 0x49, 0x03, 0x56, 0x49, 0x49, - 0x04, 0x56, 0x49, 0x49, 0x49, 0x02, 0x49, 0x58, - 0x01, 0x58, 0x02, 0x58, 0x49, 0x03, 0x58, 0x49, - 0x49, 0x02, 0x69, 0x69, 0x03, 0x69, 0x69, 0x69, + 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43, 0xE7, 0x9D, + 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43, 0xE7, 0x9E, + 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43, 0xE7, 0x9F, + 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43, 0xE7, 0x9F, + 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43, 0xE7, 0xA1, + 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43, 0xE7, 0xA2, + 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43, 0xE7, 0xA3, + 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43, 0xE7, 0xA4, // Bytes 1580 - 15bf - 0x02, 0x69, 0x76, 0x02, 0x76, 0x69, 0x03, 0x76, - 0x69, 0x69, 0x04, 0x76, 0x69, 0x69, 0x69, 0x02, - 0x69, 0x78, 0x02, 0x78, 0x69, 0x03, 0x78, 0x69, - 0x69, 0x05, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x05, - 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05, 0xE2, 0x86, - 0x92, 0xCC, 0xB8, 0x05, 0xE2, 0x86, 0x94, 0xCC, - 0xB8, 0x05, 0xE2, 0x87, 0x90, 0xCC, 0xB8, 0x05, - 0xE2, 0x87, 0x94, 0xCC, 0xB8, 0x05, 0xE2, 0x87, + 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43, 0xE7, 0xA4, + 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43, 0xE7, 0xA5, + 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43, 0xE7, 0xA5, + 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43, 0xE7, 0xA5, + 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43, 0xE7, 0xA5, + 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43, 0xE7, 0xA6, + 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43, 0xE7, 0xA6, + 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43, 0xE7, 0xA6, // Bytes 15c0 - 15ff - 0x92, 0xCC, 0xB8, 0x05, 0xE2, 0x88, 0x83, 0xCC, - 0xB8, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8, 0x05, - 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05, 0xE2, 0x88, - 0xA3, 0xCC, 0xB8, 0x05, 0xE2, 0x88, 0xA5, 0xCC, - 0xB8, 0x06, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, - 0x09, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, - 0x88, 0xAB, 0x06, 0xE2, 0x88, 0xAE, 0xE2, 0x88, - 0xAE, 0x09, 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, + 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43, 0xE7, 0xA6, + 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43, 0xE7, 0xA7, + 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43, 0xE7, 0xA8, + 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43, 0xE7, 0xA9, + 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43, 0xE7, 0xA9, + 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43, 0xE7, 0xAA, + 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43, 0xE7, 0xAB, + 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43, 0xE7, 0xAB, // Bytes 1600 - 163f - 0xE2, 0x88, 0xAE, 0x05, 0xE2, 0x88, 0xBC, 0xCC, - 0xB8, 0x05, 0xE2, 0x89, 0x83, 0xCC, 0xB8, 0x05, - 0xE2, 0x89, 0x85, 0xCC, 0xB8, 0x05, 0xE2, 0x89, - 0x88, 0xCC, 0xB8, 0x03, 0x3D, 0xCC, 0xB8, 0x05, - 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05, 0xE2, 0x89, - 0x8D, 0xCC, 0xB8, 0x03, 0x3C, 0xCC, 0xB8, 0x03, - 0x3E, 0xCC, 0xB8, 0x05, 0xE2, 0x89, 0xA4, 0xCC, - 0xB8, 0x05, 0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, + 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43, 0xE7, 0xAE, + 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43, 0xE7, 0xAF, + 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43, 0xE7, 0xB0, + 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43, 0xE7, 0xB1, + 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43, 0xE7, 0xB2, + 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43, 0xE7, 0xB3, + 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43, 0xE7, 0xB3, + 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43, 0xE7, 0xB3, // Bytes 1640 - 167f - 0xE2, 0x89, 0xB2, 0xCC, 0xB8, 0x05, 0xE2, 0x89, - 0xB3, 0xCC, 0xB8, 0x05, 0xE2, 0x89, 0xB6, 0xCC, - 0xB8, 0x05, 0xE2, 0x89, 0xB7, 0xCC, 0xB8, 0x05, - 0xE2, 0x89, 0xBA, 0xCC, 0xB8, 0x05, 0xE2, 0x89, - 0xBB, 0xCC, 0xB8, 0x05, 0xE2, 0x8A, 0x82, 0xCC, - 0xB8, 0x05, 0xE2, 0x8A, 0x83, 0xCC, 0xB8, 0x05, - 0xE2, 0x8A, 0x86, 0xCC, 0xB8, 0x05, 0xE2, 0x8A, - 0x87, 0xCC, 0xB8, 0x05, 0xE2, 0x8A, 0xA2, 0xCC, + 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43, 0xE7, 0xB4, + 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43, 0xE7, 0xB4, + 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43, 0xE7, 0xB5, + 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43, 0xE7, 0xB5, + 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43, 0xE7, 0xB6, + 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43, 0xE7, 0xB7, + 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43, 0xE7, 0xB8, + 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43, 0xE7, 0xB9, // Bytes 1680 - 16bf - 0xB8, 0x05, 0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, - 0xE2, 0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0xE2, 0x8A, - 0xAB, 0xCC, 0xB8, 0x05, 0xE2, 0x89, 0xBC, 0xCC, - 0xB8, 0x05, 0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, - 0xE2, 0x8A, 0x91, 0xCC, 0xB8, 0x05, 0xE2, 0x8A, - 0x92, 0xCC, 0xB8, 0x05, 0xE2, 0x8A, 0xB2, 0xCC, - 0xB8, 0x05, 0xE2, 0x8A, 0xB3, 0xCC, 0xB8, 0x05, - 0xE2, 0x8A, 0xB4, 0xCC, 0xB8, 0x05, 0xE2, 0x8A, + 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43, 0xE7, 0xBC, + 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43, 0xE7, 0xBD, + 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43, 0xE7, 0xBD, + 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43, 0xE7, 0xBE, + 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43, 0xE7, 0xBE, + 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43, 0xE7, 0xBE, + 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43, 0xE8, 0x80, + 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43, 0xE8, 0x80, // Bytes 16c0 - 16ff - 0xB5, 0xCC, 0xB8, 0x03, 0xE3, 0x80, 0x88, 0x03, - 0xE3, 0x80, 0x89, 0x02, 0x31, 0x30, 0x02, 0x31, - 0x31, 0x02, 0x31, 0x32, 0x02, 0x31, 0x33, 0x02, - 0x31, 0x34, 0x02, 0x31, 0x35, 0x02, 0x31, 0x36, - 0x02, 0x31, 0x37, 0x02, 0x31, 0x38, 0x02, 0x31, - 0x39, 0x02, 0x32, 0x30, 0x03, 0x28, 0x31, 0x29, - 0x03, 0x28, 0x32, 0x29, 0x03, 0x28, 0x33, 0x29, - 0x03, 0x28, 0x34, 0x29, 0x03, 0x28, 0x35, 0x29, + 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43, 0xE8, 0x80, + 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43, 0xE8, 0x81, + 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43, 0xE8, 0x81, + 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43, 0xE8, 0x81, + 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43, 0xE8, 0x82, + 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43, 0xE8, 0x82, + 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43, 0xE8, 0x84, + 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43, 0xE8, 0x87, // Bytes 1700 - 173f - 0x03, 0x28, 0x36, 0x29, 0x03, 0x28, 0x37, 0x29, - 0x03, 0x28, 0x38, 0x29, 0x03, 0x28, 0x39, 0x29, - 0x04, 0x28, 0x31, 0x30, 0x29, 0x04, 0x28, 0x31, - 0x31, 0x29, 0x04, 0x28, 0x31, 0x32, 0x29, 0x04, - 0x28, 0x31, 0x33, 0x29, 0x04, 0x28, 0x31, 0x34, - 0x29, 0x04, 0x28, 0x31, 0x35, 0x29, 0x04, 0x28, - 0x31, 0x36, 0x29, 0x04, 0x28, 0x31, 0x37, 0x29, - 0x04, 0x28, 0x31, 0x38, 0x29, 0x04, 0x28, 0x31, + 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43, 0xE8, 0x87, + 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43, 0xE8, 0x87, + 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43, 0xE8, 0x88, + 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43, 0xE8, 0x88, + 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43, 0xE8, 0x88, + 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43, 0xE8, 0x89, + 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43, 0xE8, 0x89, + 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43, 0xE8, 0x89, // Bytes 1740 - 177f - 0x39, 0x29, 0x04, 0x28, 0x32, 0x30, 0x29, 0x02, - 0x31, 0x2E, 0x02, 0x32, 0x2E, 0x02, 0x33, 0x2E, - 0x02, 0x34, 0x2E, 0x02, 0x35, 0x2E, 0x02, 0x36, - 0x2E, 0x02, 0x37, 0x2E, 0x02, 0x38, 0x2E, 0x02, - 0x39, 0x2E, 0x03, 0x31, 0x30, 0x2E, 0x03, 0x31, - 0x31, 0x2E, 0x03, 0x31, 0x32, 0x2E, 0x03, 0x31, - 0x33, 0x2E, 0x03, 0x31, 0x34, 0x2E, 0x03, 0x31, - 0x35, 0x2E, 0x03, 0x31, 0x36, 0x2E, 0x03, 0x31, + 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43, 0xE8, 0x8A, + 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43, 0xE8, 0x8A, + 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43, 0xE8, 0x8A, + 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43, 0xE8, 0x8B, + 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43, 0xE8, 0x8C, + 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43, 0xE8, 0x8D, + 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43, 0xE8, 0x8D, + 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43, 0xE8, 0x8E, // Bytes 1780 - 17bf - 0x37, 0x2E, 0x03, 0x31, 0x38, 0x2E, 0x03, 0x31, - 0x39, 0x2E, 0x03, 0x32, 0x30, 0x2E, 0x03, 0x28, - 0x61, 0x29, 0x03, 0x28, 0x62, 0x29, 0x03, 0x28, - 0x63, 0x29, 0x03, 0x28, 0x64, 0x29, 0x03, 0x28, - 0x65, 0x29, 0x03, 0x28, 0x66, 0x29, 0x03, 0x28, - 0x67, 0x29, 0x03, 0x28, 0x68, 0x29, 0x03, 0x28, - 0x69, 0x29, 0x03, 0x28, 0x6A, 0x29, 0x03, 0x28, - 0x6B, 0x29, 0x03, 0x28, 0x6C, 0x29, 0x03, 0x28, + 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43, 0xE8, 0x8F, + 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43, 0xE8, 0x8F, + 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43, 0xE8, 0x8F, + 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43, 0xE8, 0x90, + 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43, 0xE8, 0x91, + 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43, 0xE8, 0x93, + 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43, 0xE8, 0x93, + 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43, 0xE8, 0x95, // Bytes 17c0 - 17ff - 0x6D, 0x29, 0x03, 0x28, 0x6E, 0x29, 0x03, 0x28, - 0x6F, 0x29, 0x03, 0x28, 0x70, 0x29, 0x03, 0x28, - 0x71, 0x29, 0x03, 0x28, 0x72, 0x29, 0x03, 0x28, - 0x73, 0x29, 0x03, 0x28, 0x74, 0x29, 0x03, 0x28, - 0x75, 0x29, 0x03, 0x28, 0x76, 0x29, 0x03, 0x28, - 0x77, 0x29, 0x03, 0x28, 0x78, 0x29, 0x03, 0x28, - 0x79, 0x29, 0x03, 0x28, 0x7A, 0x29, 0x01, 0x53, - 0x01, 0x59, 0x01, 0x71, 0x0C, 0xE2, 0x88, 0xAB, + 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43, 0xE8, 0x97, + 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43, 0xE8, 0x98, + 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43, 0xE8, 0x98, + 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43, 0xE8, 0x99, + 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43, 0xE8, 0x99, + 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43, 0xE8, 0x99, + 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43, 0xE8, 0x9A, + 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43, 0xE8, 0x9C, // Bytes 1800 - 183f - 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, - 0xAB, 0x03, 0x3A, 0x3A, 0x3D, 0x02, 0x3D, 0x3D, - 0x03, 0x3D, 0x3D, 0x3D, 0x05, 0xE2, 0xAB, 0x9D, - 0xCC, 0xB8, 0x03, 0xE2, 0xB5, 0xA1, 0x03, 0xE6, - 0xAF, 0x8D, 0x03, 0xE9, 0xBE, 0x9F, 0x03, 0xE4, - 0xB8, 0x80, 0x03, 0xE4, 0xB8, 0xA8, 0x03, 0xE4, - 0xB8, 0xB6, 0x03, 0xE4, 0xB8, 0xBF, 0x03, 0xE4, - 0xB9, 0x99, 0x03, 0xE4, 0xBA, 0x85, 0x03, 0xE4, + 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43, 0xE8, 0x9D, + 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43, 0xE8, 0x9E, + 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43, 0xE8, 0x9F, + 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43, 0xE8, 0xA0, + 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43, 0xE8, 0xA1, + 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43, 0xE8, 0xA1, + 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43, 0xE8, 0xA3, + 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43, 0xE8, 0xA3, // Bytes 1840 - 187f - 0xBA, 0x8C, 0x03, 0xE4, 0xBA, 0xA0, 0x03, 0xE4, - 0xBA, 0xBA, 0x03, 0xE5, 0x84, 0xBF, 0x03, 0xE5, - 0x85, 0xA5, 0x03, 0xE5, 0x85, 0xAB, 0x03, 0xE5, - 0x86, 0x82, 0x03, 0xE5, 0x86, 0x96, 0x03, 0xE5, - 0x86, 0xAB, 0x03, 0xE5, 0x87, 0xA0, 0x03, 0xE5, - 0x87, 0xB5, 0x03, 0xE5, 0x88, 0x80, 0x03, 0xE5, - 0x8A, 0x9B, 0x03, 0xE5, 0x8B, 0xB9, 0x03, 0xE5, - 0x8C, 0x95, 0x03, 0xE5, 0x8C, 0x9A, 0x03, 0xE5, + 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43, 0xE8, 0xA3, + 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43, 0xE8, 0xA4, + 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43, 0xE8, 0xA5, + 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43, 0xE8, 0xA6, + 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43, 0xE8, 0xA6, + 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43, 0xE8, 0xA7, + 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43, 0xE8, 0xAA, + 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43, 0xE8, 0xAA, // Bytes 1880 - 18bf - 0x8C, 0xB8, 0x03, 0xE5, 0x8D, 0x81, 0x03, 0xE5, - 0x8D, 0x9C, 0x03, 0xE5, 0x8D, 0xA9, 0x03, 0xE5, - 0x8E, 0x82, 0x03, 0xE5, 0x8E, 0xB6, 0x03, 0xE5, - 0x8F, 0x88, 0x03, 0xE5, 0x8F, 0xA3, 0x03, 0xE5, - 0x9B, 0x97, 0x03, 0xE5, 0x9C, 0x9F, 0x03, 0xE5, - 0xA3, 0xAB, 0x03, 0xE5, 0xA4, 0x82, 0x03, 0xE5, - 0xA4, 0x8A, 0x03, 0xE5, 0xA4, 0x95, 0x03, 0xE5, - 0xA4, 0xA7, 0x03, 0xE5, 0xA5, 0xB3, 0x03, 0xE5, + 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43, 0xE8, 0xAB, + 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43, 0xE8, 0xAB, + 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43, 0xE8, 0xAB, + 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43, 0xE8, 0xAC, + 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43, 0xE8, 0xAE, + 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43, 0xE8, 0xB0, + 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43, 0xE8, 0xB1, + 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43, 0xE8, 0xB1, // Bytes 18c0 - 18ff - 0xAD, 0x90, 0x03, 0xE5, 0xAE, 0x80, 0x03, 0xE5, - 0xAF, 0xB8, 0x03, 0xE5, 0xB0, 0x8F, 0x03, 0xE5, - 0xB0, 0xA2, 0x03, 0xE5, 0xB0, 0xB8, 0x03, 0xE5, - 0xB1, 0xAE, 0x03, 0xE5, 0xB1, 0xB1, 0x03, 0xE5, - 0xB7, 0x9B, 0x03, 0xE5, 0xB7, 0xA5, 0x03, 0xE5, - 0xB7, 0xB1, 0x03, 0xE5, 0xB7, 0xBE, 0x03, 0xE5, - 0xB9, 0xB2, 0x03, 0xE5, 0xB9, 0xBA, 0x03, 0xE5, - 0xB9, 0xBF, 0x03, 0xE5, 0xBB, 0xB4, 0x03, 0xE5, + 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43, 0xE8, 0xB2, + 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43, 0xE8, 0xB2, + 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43, 0xE8, 0xB3, + 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43, 0xE8, 0xB3, + 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43, 0xE8, 0xB4, + 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43, 0xE8, 0xB5, + 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43, 0xE8, 0xB5, + 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43, 0xE8, 0xB6, // Bytes 1900 - 193f - 0xBB, 0xBE, 0x03, 0xE5, 0xBC, 0x8B, 0x03, 0xE5, - 0xBC, 0x93, 0x03, 0xE5, 0xBD, 0x90, 0x03, 0xE5, - 0xBD, 0xA1, 0x03, 0xE5, 0xBD, 0xB3, 0x03, 0xE5, - 0xBF, 0x83, 0x03, 0xE6, 0x88, 0x88, 0x03, 0xE6, - 0x88, 0xB6, 0x03, 0xE6, 0x89, 0x8B, 0x03, 0xE6, - 0x94, 0xAF, 0x03, 0xE6, 0x94, 0xB4, 0x03, 0xE6, - 0x96, 0x87, 0x03, 0xE6, 0x96, 0x97, 0x03, 0xE6, - 0x96, 0xA4, 0x03, 0xE6, 0x96, 0xB9, 0x03, 0xE6, + 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43, 0xE8, 0xB7, + 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43, 0xE8, 0xBA, + 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43, 0xE8, 0xBB, + 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43, 0xE8, 0xBC, + 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43, 0xE8, 0xBC, + 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43, 0xE8, 0xBE, + 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43, 0xE8, 0xBE, + 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43, 0xE8, 0xBE, // Bytes 1940 - 197f - 0x97, 0xA0, 0x03, 0xE6, 0x97, 0xA5, 0x03, 0xE6, - 0x9B, 0xB0, 0x03, 0xE6, 0x9C, 0x88, 0x03, 0xE6, - 0x9C, 0xA8, 0x03, 0xE6, 0xAC, 0xA0, 0x03, 0xE6, - 0xAD, 0xA2, 0x03, 0xE6, 0xAD, 0xB9, 0x03, 0xE6, - 0xAE, 0xB3, 0x03, 0xE6, 0xAF, 0x8B, 0x03, 0xE6, - 0xAF, 0x94, 0x03, 0xE6, 0xAF, 0x9B, 0x03, 0xE6, - 0xB0, 0x8F, 0x03, 0xE6, 0xB0, 0x94, 0x03, 0xE6, - 0xB0, 0xB4, 0x03, 0xE7, 0x81, 0xAB, 0x03, 0xE7, + 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43, 0xE9, 0x80, + 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43, 0xE9, 0x81, + 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43, 0xE9, 0x81, + 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43, 0xE9, 0x82, + 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43, 0xE9, 0x83, + 0x8E, 0x43, 0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, + 0xBD, 0x43, 0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, + 0x9B, 0x43, 0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, // Bytes 1980 - 19bf - 0x88, 0xAA, 0x03, 0xE7, 0x88, 0xB6, 0x03, 0xE7, - 0x88, 0xBB, 0x03, 0xE7, 0x88, 0xBF, 0x03, 0xE7, - 0x89, 0x87, 0x03, 0xE7, 0x89, 0x99, 0x03, 0xE7, - 0x89, 0x9B, 0x03, 0xE7, 0x8A, 0xAC, 0x03, 0xE7, - 0x8E, 0x84, 0x03, 0xE7, 0x8E, 0x89, 0x03, 0xE7, - 0x93, 0x9C, 0x03, 0xE7, 0x93, 0xA6, 0x03, 0xE7, - 0x94, 0x98, 0x03, 0xE7, 0x94, 0x9F, 0x03, 0xE7, - 0x94, 0xA8, 0x03, 0xE7, 0x94, 0xB0, 0x03, 0xE7, + 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43, 0xE9, 0x86, + 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43, 0xE9, 0x87, + 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43, 0xE9, 0x87, + 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43, 0xE9, 0x88, + 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43, 0xE9, 0x89, + 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43, 0xE9, 0x8B, + 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43, 0xE9, 0x8D, + 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43, 0xE9, 0x90, // Bytes 19c0 - 19ff - 0x96, 0x8B, 0x03, 0xE7, 0x96, 0x92, 0x03, 0xE7, - 0x99, 0xB6, 0x03, 0xE7, 0x99, 0xBD, 0x03, 0xE7, - 0x9A, 0xAE, 0x03, 0xE7, 0x9A, 0xBF, 0x03, 0xE7, - 0x9B, 0xAE, 0x03, 0xE7, 0x9F, 0x9B, 0x03, 0xE7, - 0x9F, 0xA2, 0x03, 0xE7, 0x9F, 0xB3, 0x03, 0xE7, - 0xA4, 0xBA, 0x03, 0xE7, 0xA6, 0xB8, 0x03, 0xE7, - 0xA6, 0xBE, 0x03, 0xE7, 0xA9, 0xB4, 0x03, 0xE7, - 0xAB, 0x8B, 0x03, 0xE7, 0xAB, 0xB9, 0x03, 0xE7, + 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43, 0xE9, 0x96, + 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43, 0xE9, 0x96, + 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43, 0xE9, 0x98, + 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43, 0xE9, 0x99, + 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43, 0xE9, 0x99, + 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43, 0xE9, 0x99, + 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43, 0xE9, 0x9A, + 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43, 0xE9, 0x9A, // Bytes 1a00 - 1a3f - 0xB1, 0xB3, 0x03, 0xE7, 0xB3, 0xB8, 0x03, 0xE7, - 0xBC, 0xB6, 0x03, 0xE7, 0xBD, 0x91, 0x03, 0xE7, - 0xBE, 0x8A, 0x03, 0xE7, 0xBE, 0xBD, 0x03, 0xE8, - 0x80, 0x81, 0x03, 0xE8, 0x80, 0x8C, 0x03, 0xE8, - 0x80, 0x92, 0x03, 0xE8, 0x80, 0xB3, 0x03, 0xE8, - 0x81, 0xBF, 0x03, 0xE8, 0x82, 0x89, 0x03, 0xE8, - 0x87, 0xA3, 0x03, 0xE8, 0x87, 0xAA, 0x03, 0xE8, - 0x87, 0xB3, 0x03, 0xE8, 0x87, 0xBC, 0x03, 0xE8, + 0xB8, 0x43, 0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, + 0x83, 0x43, 0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, + 0xA3, 0x43, 0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, + 0xB6, 0x43, 0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, + 0xA3, 0x43, 0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, + 0x88, 0x43, 0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, + 0x96, 0x43, 0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, + 0xA2, 0x43, 0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, // Bytes 1a40 - 1a7f - 0x88, 0x8C, 0x03, 0xE8, 0x88, 0x9B, 0x03, 0xE8, - 0x88, 0x9F, 0x03, 0xE8, 0x89, 0xAE, 0x03, 0xE8, - 0x89, 0xB2, 0x03, 0xE8, 0x89, 0xB8, 0x03, 0xE8, - 0x99, 0x8D, 0x03, 0xE8, 0x99, 0xAB, 0x03, 0xE8, - 0xA1, 0x80, 0x03, 0xE8, 0xA1, 0x8C, 0x03, 0xE8, - 0xA1, 0xA3, 0x03, 0xE8, 0xA5, 0xBE, 0x03, 0xE8, - 0xA6, 0x8B, 0x03, 0xE8, 0xA7, 0x92, 0x03, 0xE8, - 0xA8, 0x80, 0x03, 0xE8, 0xB0, 0xB7, 0x03, 0xE8, + 0x8B, 0x43, 0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, + 0xA0, 0x43, 0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, + 0xB3, 0x43, 0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, + 0x81, 0x43, 0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, + 0x8B, 0x43, 0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, + 0xA9, 0x43, 0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, + 0x9E, 0x43, 0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, + 0x9B, 0x43, 0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, // Bytes 1a80 - 1abf - 0xB1, 0x86, 0x03, 0xE8, 0xB1, 0x95, 0x03, 0xE8, - 0xB1, 0xB8, 0x03, 0xE8, 0xB2, 0x9D, 0x03, 0xE8, - 0xB5, 0xA4, 0x03, 0xE8, 0xB5, 0xB0, 0x03, 0xE8, - 0xB6, 0xB3, 0x03, 0xE8, 0xBA, 0xAB, 0x03, 0xE8, - 0xBB, 0x8A, 0x03, 0xE8, 0xBE, 0x9B, 0x03, 0xE8, - 0xBE, 0xB0, 0x03, 0xE8, 0xBE, 0xB5, 0x03, 0xE9, - 0x82, 0x91, 0x03, 0xE9, 0x85, 0x89, 0x03, 0xE9, - 0x87, 0x86, 0x03, 0xE9, 0x87, 0x8C, 0x03, 0xE9, + 0xA2, 0x43, 0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, + 0xBC, 0x43, 0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, + 0xA9, 0x43, 0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, + 0x99, 0x43, 0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, + 0xAC, 0x43, 0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, + 0xB1, 0x43, 0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, + 0xAA, 0x43, 0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, + 0x98, 0x43, 0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, // Bytes 1ac0 - 1aff - 0x87, 0x91, 0x03, 0xE9, 0x95, 0xB7, 0x03, 0xE9, - 0x96, 0x80, 0x03, 0xE9, 0x98, 0x9C, 0x03, 0xE9, - 0x9A, 0xB6, 0x03, 0xE9, 0x9A, 0xB9, 0x03, 0xE9, - 0x9B, 0xA8, 0x03, 0xE9, 0x9D, 0x91, 0x03, 0xE9, - 0x9D, 0x9E, 0x03, 0xE9, 0x9D, 0xA2, 0x03, 0xE9, - 0x9D, 0xA9, 0x03, 0xE9, 0x9F, 0x8B, 0x03, 0xE9, - 0x9F, 0xAD, 0x03, 0xE9, 0x9F, 0xB3, 0x03, 0xE9, - 0xA0, 0x81, 0x03, 0xE9, 0xA2, 0xA8, 0x03, 0xE9, + 0x92, 0x43, 0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, + 0xAF, 0x43, 0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, + 0xBC, 0x43, 0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, + 0xAF, 0x43, 0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, + 0x97, 0x43, 0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, + 0xBD, 0x43, 0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, + 0xB4, 0x43, 0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, + 0x9E, 0x43, 0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, // Bytes 1b00 - 1b3f - 0xA3, 0x9B, 0x03, 0xE9, 0xA3, 0x9F, 0x03, 0xE9, - 0xA6, 0x96, 0x03, 0xE9, 0xA6, 0x99, 0x03, 0xE9, - 0xA6, 0xAC, 0x03, 0xE9, 0xAA, 0xA8, 0x03, 0xE9, - 0xAB, 0x98, 0x03, 0xE9, 0xAB, 0x9F, 0x03, 0xE9, - 0xAC, 0xA5, 0x03, 0xE9, 0xAC, 0xAF, 0x03, 0xE9, - 0xAC, 0xB2, 0x03, 0xE9, 0xAC, 0xBC, 0x03, 0xE9, - 0xAD, 0x9A, 0x03, 0xE9, 0xB3, 0xA5, 0x03, 0xE9, - 0xB9, 0xB5, 0x03, 0xE9, 0xB9, 0xBF, 0x03, 0xE9, + 0xBF, 0x43, 0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, + 0x9F, 0x43, 0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, + 0xBB, 0x43, 0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, + 0x8D, 0x43, 0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, + 0x91, 0x43, 0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, + 0xBD, 0x43, 0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, + 0x85, 0x43, 0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, + 0x8F, 0x43, 0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, // Bytes 1b40 - 1b7f - 0xBA, 0xA5, 0x03, 0xE9, 0xBA, 0xBB, 0x03, 0xE9, - 0xBB, 0x83, 0x03, 0xE9, 0xBB, 0x8D, 0x03, 0xE9, - 0xBB, 0x91, 0x03, 0xE9, 0xBB, 0xB9, 0x03, 0xE9, - 0xBB, 0xBD, 0x03, 0xE9, 0xBC, 0x8E, 0x03, 0xE9, - 0xBC, 0x93, 0x03, 0xE9, 0xBC, 0xA0, 0x03, 0xE9, - 0xBC, 0xBB, 0x03, 0xE9, 0xBD, 0x8A, 0x03, 0xE9, - 0xBD, 0x92, 0x03, 0xE9, 0xBE, 0x8D, 0x03, 0xE9, - 0xBE, 0x9C, 0x03, 0xE9, 0xBE, 0xA0, 0x03, 0xE3, + 0x96, 0x43, 0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, + 0xBB, 0x43, 0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, + 0x8A, 0x43, 0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, + 0x8D, 0x43, 0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, + 0x9C, 0x43, 0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, + 0xA0, 0x43, 0xEA, 0x9D, 0xAF, 0x44, 0x28, 0x31, + 0x30, 0x29, 0x44, 0x28, 0x31, 0x31, 0x29, 0x44, + 0x28, 0x31, 0x32, 0x29, 0x44, 0x28, 0x31, 0x33, // Bytes 1b80 - 1bbf - 0x80, 0x92, 0x03, 0xE5, 0x8D, 0x84, 0x03, 0xE5, - 0x8D, 0x85, 0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, - 0x99, 0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, - 0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x06, - 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x06, 0xE3, - 0x81, 0x93, 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x81, - 0x95, 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x81, 0x97, - 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x81, 0x99, 0xE3, + 0x29, 0x44, 0x28, 0x31, 0x34, 0x29, 0x44, 0x28, + 0x31, 0x35, 0x29, 0x44, 0x28, 0x31, 0x36, 0x29, + 0x44, 0x28, 0x31, 0x37, 0x29, 0x44, 0x28, 0x31, + 0x38, 0x29, 0x44, 0x28, 0x31, 0x39, 0x29, 0x44, + 0x28, 0x32, 0x30, 0x29, 0x44, 0x30, 0xE7, 0x82, + 0xB9, 0x44, 0x31, 0xE2, 0x81, 0x84, 0x44, 0x31, + 0xE6, 0x97, 0xA5, 0x44, 0x31, 0xE6, 0x9C, 0x88, + 0x44, 0x31, 0xE7, 0x82, 0xB9, 0x44, 0x32, 0xE6, // Bytes 1bc0 - 1bff - 0x82, 0x99, 0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, - 0x99, 0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, - 0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x06, - 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x06, 0xE3, - 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x81, - 0xA6, 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x81, 0xA8, - 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x81, 0xAF, 0xE3, - 0x82, 0x99, 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, + 0x97, 0xA5, 0x44, 0x32, 0xE6, 0x9C, 0x88, 0x44, + 0x32, 0xE7, 0x82, 0xB9, 0x44, 0x33, 0xE6, 0x97, + 0xA5, 0x44, 0x33, 0xE6, 0x9C, 0x88, 0x44, 0x33, + 0xE7, 0x82, 0xB9, 0x44, 0x34, 0xE6, 0x97, 0xA5, + 0x44, 0x34, 0xE6, 0x9C, 0x88, 0x44, 0x34, 0xE7, + 0x82, 0xB9, 0x44, 0x35, 0xE6, 0x97, 0xA5, 0x44, + 0x35, 0xE6, 0x9C, 0x88, 0x44, 0x35, 0xE7, 0x82, + 0xB9, 0x44, 0x36, 0xE6, 0x97, 0xA5, 0x44, 0x36, // Bytes 1c00 - 1c3f - 0x9A, 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, - 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x06, - 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x06, 0xE3, - 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x06, 0xE3, 0x81, - 0xB8, 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x81, 0xB8, - 0xE3, 0x82, 0x9A, 0x06, 0xE3, 0x81, 0xBB, 0xE3, - 0x82, 0x99, 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, - 0x9A, 0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, + 0xE6, 0x9C, 0x88, 0x44, 0x36, 0xE7, 0x82, 0xB9, + 0x44, 0x37, 0xE6, 0x97, 0xA5, 0x44, 0x37, 0xE6, + 0x9C, 0x88, 0x44, 0x37, 0xE7, 0x82, 0xB9, 0x44, + 0x38, 0xE6, 0x97, 0xA5, 0x44, 0x38, 0xE6, 0x9C, + 0x88, 0x44, 0x38, 0xE7, 0x82, 0xB9, 0x44, 0x39, + 0xE6, 0x97, 0xA5, 0x44, 0x39, 0xE6, 0x9C, 0x88, + 0x44, 0x39, 0xE7, 0x82, 0xB9, 0x44, 0x56, 0x49, + 0x49, 0x49, 0x44, 0x61, 0x2E, 0x6D, 0x2E, 0x44, // Bytes 1c40 - 1c7f - 0x04, 0x20, 0xE3, 0x82, 0x99, 0x04, 0x20, 0xE3, - 0x82, 0x9A, 0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, - 0x99, 0x06, 0xE3, 0x82, 0x88, 0xE3, 0x82, 0x8A, - 0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x06, - 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x06, 0xE3, - 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x82, - 0xB1, 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x82, 0xB3, - 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x82, 0xB5, 0xE3, + 0x6B, 0x63, 0x61, 0x6C, 0x44, 0x70, 0x2E, 0x6D, + 0x2E, 0x44, 0x76, 0x69, 0x69, 0x69, 0x44, 0xD5, + 0xA5, 0xD6, 0x82, 0x44, 0xD5, 0xB4, 0xD5, 0xA5, + 0x44, 0xD5, 0xB4, 0xD5, 0xAB, 0x44, 0xD5, 0xB4, + 0xD5, 0xAD, 0x44, 0xD5, 0xB4, 0xD5, 0xB6, 0x44, + 0xD5, 0xBE, 0xD5, 0xB6, 0x44, 0xD7, 0x90, 0xD7, + 0x9C, 0x44, 0xD8, 0xA7, 0xD9, 0xB4, 0x44, 0xD8, + 0xA8, 0xD8, 0xAC, 0x44, 0xD8, 0xA8, 0xD8, 0xAD, // Bytes 1c80 - 1cbf - 0x82, 0x99, 0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, - 0x99, 0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, - 0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x06, - 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x06, 0xE3, - 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x83, - 0x81, 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x83, 0x84, - 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x83, 0x86, 0xE3, - 0x82, 0x99, 0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, + 0x44, 0xD8, 0xA8, 0xD8, 0xAE, 0x44, 0xD8, 0xA8, + 0xD8, 0xB1, 0x44, 0xD8, 0xA8, 0xD8, 0xB2, 0x44, + 0xD8, 0xA8, 0xD9, 0x85, 0x44, 0xD8, 0xA8, 0xD9, + 0x86, 0x44, 0xD8, 0xA8, 0xD9, 0x87, 0x44, 0xD8, + 0xA8, 0xD9, 0x89, 0x44, 0xD8, 0xA8, 0xD9, 0x8A, + 0x44, 0xD8, 0xAA, 0xD8, 0xAC, 0x44, 0xD8, 0xAA, + 0xD8, 0xAD, 0x44, 0xD8, 0xAA, 0xD8, 0xAE, 0x44, + 0xD8, 0xAA, 0xD8, 0xB1, 0x44, 0xD8, 0xAA, 0xD8, // Bytes 1cc0 - 1cff - 0x99, 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, - 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x06, - 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x06, 0xE3, - 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x06, 0xE3, 0x83, - 0x95, 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x83, 0x95, - 0xE3, 0x82, 0x9A, 0x06, 0xE3, 0x83, 0x98, 0xE3, - 0x82, 0x99, 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, - 0x9A, 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, + 0xB2, 0x44, 0xD8, 0xAA, 0xD9, 0x85, 0x44, 0xD8, + 0xAA, 0xD9, 0x86, 0x44, 0xD8, 0xAA, 0xD9, 0x87, + 0x44, 0xD8, 0xAA, 0xD9, 0x89, 0x44, 0xD8, 0xAA, + 0xD9, 0x8A, 0x44, 0xD8, 0xAB, 0xD8, 0xAC, 0x44, + 0xD8, 0xAB, 0xD8, 0xB1, 0x44, 0xD8, 0xAB, 0xD8, + 0xB2, 0x44, 0xD8, 0xAB, 0xD9, 0x85, 0x44, 0xD8, + 0xAB, 0xD9, 0x86, 0x44, 0xD8, 0xAB, 0xD9, 0x87, + 0x44, 0xD8, 0xAB, 0xD9, 0x89, 0x44, 0xD8, 0xAB, // Bytes 1d00 - 1d3f - 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x06, - 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x06, 0xE3, - 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x83, - 0xB0, 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x83, 0xB1, - 0xE3, 0x82, 0x99, 0x06, 0xE3, 0x83, 0xB2, 0xE3, - 0x82, 0x99, 0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, - 0x99, 0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88, - 0x03, 0xE1, 0x84, 0x80, 0x03, 0xE1, 0x84, 0x81, + 0xD9, 0x8A, 0x44, 0xD8, 0xAC, 0xD8, 0xAD, 0x44, + 0xD8, 0xAC, 0xD9, 0x85, 0x44, 0xD8, 0xAC, 0xD9, + 0x89, 0x44, 0xD8, 0xAC, 0xD9, 0x8A, 0x44, 0xD8, + 0xAD, 0xD8, 0xAC, 0x44, 0xD8, 0xAD, 0xD9, 0x85, + 0x44, 0xD8, 0xAD, 0xD9, 0x89, 0x44, 0xD8, 0xAD, + 0xD9, 0x8A, 0x44, 0xD8, 0xAE, 0xD8, 0xAC, 0x44, + 0xD8, 0xAE, 0xD8, 0xAD, 0x44, 0xD8, 0xAE, 0xD9, + 0x85, 0x44, 0xD8, 0xAE, 0xD9, 0x89, 0x44, 0xD8, // Bytes 1d40 - 1d7f - 0x03, 0xE1, 0x86, 0xAA, 0x03, 0xE1, 0x84, 0x82, - 0x03, 0xE1, 0x86, 0xAC, 0x03, 0xE1, 0x86, 0xAD, - 0x03, 0xE1, 0x84, 0x83, 0x03, 0xE1, 0x84, 0x84, - 0x03, 0xE1, 0x84, 0x85, 0x03, 0xE1, 0x86, 0xB0, - 0x03, 0xE1, 0x86, 0xB1, 0x03, 0xE1, 0x86, 0xB2, - 0x03, 0xE1, 0x86, 0xB3, 0x03, 0xE1, 0x86, 0xB4, - 0x03, 0xE1, 0x86, 0xB5, 0x03, 0xE1, 0x84, 0x9A, - 0x03, 0xE1, 0x84, 0x86, 0x03, 0xE1, 0x84, 0x87, + 0xAE, 0xD9, 0x8A, 0x44, 0xD8, 0xB3, 0xD8, 0xAC, + 0x44, 0xD8, 0xB3, 0xD8, 0xAD, 0x44, 0xD8, 0xB3, + 0xD8, 0xAE, 0x44, 0xD8, 0xB3, 0xD8, 0xB1, 0x44, + 0xD8, 0xB3, 0xD9, 0x85, 0x44, 0xD8, 0xB3, 0xD9, + 0x87, 0x44, 0xD8, 0xB3, 0xD9, 0x89, 0x44, 0xD8, + 0xB3, 0xD9, 0x8A, 0x44, 0xD8, 0xB4, 0xD8, 0xAC, + 0x44, 0xD8, 0xB4, 0xD8, 0xAD, 0x44, 0xD8, 0xB4, + 0xD8, 0xAE, 0x44, 0xD8, 0xB4, 0xD8, 0xB1, 0x44, // Bytes 1d80 - 1dbf - 0x03, 0xE1, 0x84, 0x88, 0x03, 0xE1, 0x84, 0xA1, - 0x03, 0xE1, 0x84, 0x89, 0x03, 0xE1, 0x84, 0x8A, - 0x03, 0xE1, 0x84, 0x8B, 0x03, 0xE1, 0x84, 0x8C, - 0x03, 0xE1, 0x84, 0x8D, 0x03, 0xE1, 0x84, 0x8E, - 0x03, 0xE1, 0x84, 0x8F, 0x03, 0xE1, 0x84, 0x90, - 0x03, 0xE1, 0x84, 0x91, 0x03, 0xE1, 0x84, 0x92, - 0x03, 0xE1, 0x85, 0xA1, 0x03, 0xE1, 0x85, 0xA2, - 0x03, 0xE1, 0x85, 0xA3, 0x03, 0xE1, 0x85, 0xA4, + 0xD8, 0xB4, 0xD9, 0x85, 0x44, 0xD8, 0xB4, 0xD9, + 0x87, 0x44, 0xD8, 0xB4, 0xD9, 0x89, 0x44, 0xD8, + 0xB4, 0xD9, 0x8A, 0x44, 0xD8, 0xB5, 0xD8, 0xAD, + 0x44, 0xD8, 0xB5, 0xD8, 0xAE, 0x44, 0xD8, 0xB5, + 0xD8, 0xB1, 0x44, 0xD8, 0xB5, 0xD9, 0x85, 0x44, + 0xD8, 0xB5, 0xD9, 0x89, 0x44, 0xD8, 0xB5, 0xD9, + 0x8A, 0x44, 0xD8, 0xB6, 0xD8, 0xAC, 0x44, 0xD8, + 0xB6, 0xD8, 0xAD, 0x44, 0xD8, 0xB6, 0xD8, 0xAE, // Bytes 1dc0 - 1dff - 0x03, 0xE1, 0x85, 0xA5, 0x03, 0xE1, 0x85, 0xA6, - 0x03, 0xE1, 0x85, 0xA7, 0x03, 0xE1, 0x85, 0xA8, - 0x03, 0xE1, 0x85, 0xA9, 0x03, 0xE1, 0x85, 0xAA, - 0x03, 0xE1, 0x85, 0xAB, 0x03, 0xE1, 0x85, 0xAC, - 0x03, 0xE1, 0x85, 0xAD, 0x03, 0xE1, 0x85, 0xAE, - 0x03, 0xE1, 0x85, 0xAF, 0x03, 0xE1, 0x85, 0xB0, - 0x03, 0xE1, 0x85, 0xB1, 0x03, 0xE1, 0x85, 0xB2, - 0x03, 0xE1, 0x85, 0xB3, 0x03, 0xE1, 0x85, 0xB4, + 0x44, 0xD8, 0xB6, 0xD8, 0xB1, 0x44, 0xD8, 0xB6, + 0xD9, 0x85, 0x44, 0xD8, 0xB6, 0xD9, 0x89, 0x44, + 0xD8, 0xB6, 0xD9, 0x8A, 0x44, 0xD8, 0xB7, 0xD8, + 0xAD, 0x44, 0xD8, 0xB7, 0xD9, 0x85, 0x44, 0xD8, + 0xB7, 0xD9, 0x89, 0x44, 0xD8, 0xB7, 0xD9, 0x8A, + 0x44, 0xD8, 0xB8, 0xD9, 0x85, 0x44, 0xD8, 0xB9, + 0xD8, 0xAC, 0x44, 0xD8, 0xB9, 0xD9, 0x85, 0x44, + 0xD8, 0xB9, 0xD9, 0x89, 0x44, 0xD8, 0xB9, 0xD9, // Bytes 1e00 - 1e3f - 0x03, 0xE1, 0x85, 0xB5, 0x03, 0xE1, 0x85, 0xA0, - 0x03, 0xE1, 0x84, 0x94, 0x03, 0xE1, 0x84, 0x95, - 0x03, 0xE1, 0x87, 0x87, 0x03, 0xE1, 0x87, 0x88, - 0x03, 0xE1, 0x87, 0x8C, 0x03, 0xE1, 0x87, 0x8E, - 0x03, 0xE1, 0x87, 0x93, 0x03, 0xE1, 0x87, 0x97, - 0x03, 0xE1, 0x87, 0x99, 0x03, 0xE1, 0x84, 0x9C, - 0x03, 0xE1, 0x87, 0x9D, 0x03, 0xE1, 0x87, 0x9F, - 0x03, 0xE1, 0x84, 0x9D, 0x03, 0xE1, 0x84, 0x9E, + 0x8A, 0x44, 0xD8, 0xBA, 0xD8, 0xAC, 0x44, 0xD8, + 0xBA, 0xD9, 0x85, 0x44, 0xD8, 0xBA, 0xD9, 0x89, + 0x44, 0xD8, 0xBA, 0xD9, 0x8A, 0x44, 0xD9, 0x81, + 0xD8, 0xAC, 0x44, 0xD9, 0x81, 0xD8, 0xAD, 0x44, + 0xD9, 0x81, 0xD8, 0xAE, 0x44, 0xD9, 0x81, 0xD9, + 0x85, 0x44, 0xD9, 0x81, 0xD9, 0x89, 0x44, 0xD9, + 0x81, 0xD9, 0x8A, 0x44, 0xD9, 0x82, 0xD8, 0xAD, + 0x44, 0xD9, 0x82, 0xD9, 0x85, 0x44, 0xD9, 0x82, // Bytes 1e40 - 1e7f - 0x03, 0xE1, 0x84, 0xA0, 0x03, 0xE1, 0x84, 0xA2, - 0x03, 0xE1, 0x84, 0xA3, 0x03, 0xE1, 0x84, 0xA7, - 0x03, 0xE1, 0x84, 0xA9, 0x03, 0xE1, 0x84, 0xAB, - 0x03, 0xE1, 0x84, 0xAC, 0x03, 0xE1, 0x84, 0xAD, - 0x03, 0xE1, 0x84, 0xAE, 0x03, 0xE1, 0x84, 0xAF, - 0x03, 0xE1, 0x84, 0xB2, 0x03, 0xE1, 0x84, 0xB6, - 0x03, 0xE1, 0x85, 0x80, 0x03, 0xE1, 0x85, 0x87, - 0x03, 0xE1, 0x85, 0x8C, 0x03, 0xE1, 0x87, 0xB1, + 0xD9, 0x89, 0x44, 0xD9, 0x82, 0xD9, 0x8A, 0x44, + 0xD9, 0x83, 0xD8, 0xA7, 0x44, 0xD9, 0x83, 0xD8, + 0xAC, 0x44, 0xD9, 0x83, 0xD8, 0xAD, 0x44, 0xD9, + 0x83, 0xD8, 0xAE, 0x44, 0xD9, 0x83, 0xD9, 0x84, + 0x44, 0xD9, 0x83, 0xD9, 0x85, 0x44, 0xD9, 0x83, + 0xD9, 0x89, 0x44, 0xD9, 0x83, 0xD9, 0x8A, 0x44, + 0xD9, 0x84, 0xD8, 0xA7, 0x44, 0xD9, 0x84, 0xD8, + 0xAC, 0x44, 0xD9, 0x84, 0xD8, 0xAD, 0x44, 0xD9, // Bytes 1e80 - 1ebf - 0x03, 0xE1, 0x87, 0xB2, 0x03, 0xE1, 0x85, 0x97, - 0x03, 0xE1, 0x85, 0x98, 0x03, 0xE1, 0x85, 0x99, - 0x03, 0xE1, 0x86, 0x84, 0x03, 0xE1, 0x86, 0x85, - 0x03, 0xE1, 0x86, 0x88, 0x03, 0xE1, 0x86, 0x91, - 0x03, 0xE1, 0x86, 0x92, 0x03, 0xE1, 0x86, 0x94, - 0x03, 0xE1, 0x86, 0x9E, 0x03, 0xE1, 0x86, 0xA1, - 0x03, 0xE4, 0xB8, 0x89, 0x03, 0xE5, 0x9B, 0x9B, - 0x03, 0xE4, 0xB8, 0x8A, 0x03, 0xE4, 0xB8, 0xAD, + 0x84, 0xD8, 0xAE, 0x44, 0xD9, 0x84, 0xD9, 0x85, + 0x44, 0xD9, 0x84, 0xD9, 0x87, 0x44, 0xD9, 0x84, + 0xD9, 0x89, 0x44, 0xD9, 0x84, 0xD9, 0x8A, 0x44, + 0xD9, 0x85, 0xD8, 0xA7, 0x44, 0xD9, 0x85, 0xD8, + 0xAC, 0x44, 0xD9, 0x85, 0xD8, 0xAD, 0x44, 0xD9, + 0x85, 0xD8, 0xAE, 0x44, 0xD9, 0x85, 0xD9, 0x85, + 0x44, 0xD9, 0x85, 0xD9, 0x89, 0x44, 0xD9, 0x85, + 0xD9, 0x8A, 0x44, 0xD9, 0x86, 0xD8, 0xAC, 0x44, // Bytes 1ec0 - 1eff - 0x03, 0xE4, 0xB8, 0x8B, 0x03, 0xE7, 0x94, 0xB2, - 0x03, 0xE4, 0xB8, 0x99, 0x03, 0xE4, 0xB8, 0x81, - 0x03, 0xE5, 0xA4, 0xA9, 0x03, 0xE5, 0x9C, 0xB0, - 0x05, 0x28, 0xE1, 0x84, 0x80, 0x29, 0x05, 0x28, - 0xE1, 0x84, 0x82, 0x29, 0x05, 0x28, 0xE1, 0x84, - 0x83, 0x29, 0x05, 0x28, 0xE1, 0x84, 0x85, 0x29, - 0x05, 0x28, 0xE1, 0x84, 0x86, 0x29, 0x05, 0x28, - 0xE1, 0x84, 0x87, 0x29, 0x05, 0x28, 0xE1, 0x84, + 0xD9, 0x86, 0xD8, 0xAD, 0x44, 0xD9, 0x86, 0xD8, + 0xAE, 0x44, 0xD9, 0x86, 0xD8, 0xB1, 0x44, 0xD9, + 0x86, 0xD8, 0xB2, 0x44, 0xD9, 0x86, 0xD9, 0x85, + 0x44, 0xD9, 0x86, 0xD9, 0x86, 0x44, 0xD9, 0x86, + 0xD9, 0x87, 0x44, 0xD9, 0x86, 0xD9, 0x89, 0x44, + 0xD9, 0x86, 0xD9, 0x8A, 0x44, 0xD9, 0x87, 0xD8, + 0xAC, 0x44, 0xD9, 0x87, 0xD9, 0x85, 0x44, 0xD9, + 0x87, 0xD9, 0x89, 0x44, 0xD9, 0x87, 0xD9, 0x8A, // Bytes 1f00 - 1f3f - 0x89, 0x29, 0x05, 0x28, 0xE1, 0x84, 0x8B, 0x29, - 0x05, 0x28, 0xE1, 0x84, 0x8C, 0x29, 0x05, 0x28, - 0xE1, 0x84, 0x8E, 0x29, 0x05, 0x28, 0xE1, 0x84, - 0x8F, 0x29, 0x05, 0x28, 0xE1, 0x84, 0x90, 0x29, - 0x05, 0x28, 0xE1, 0x84, 0x91, 0x29, 0x05, 0x28, - 0xE1, 0x84, 0x92, 0x29, 0x08, 0x28, 0xE1, 0x84, - 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x08, 0x28, 0xE1, - 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29, 0x08, 0x28, + 0x44, 0xD9, 0x88, 0xD9, 0xB4, 0x44, 0xD9, 0x8A, + 0xD8, 0xAC, 0x44, 0xD9, 0x8A, 0xD8, 0xAD, 0x44, + 0xD9, 0x8A, 0xD8, 0xAE, 0x44, 0xD9, 0x8A, 0xD8, + 0xB1, 0x44, 0xD9, 0x8A, 0xD8, 0xB2, 0x44, 0xD9, + 0x8A, 0xD9, 0x85, 0x44, 0xD9, 0x8A, 0xD9, 0x86, + 0x44, 0xD9, 0x8A, 0xD9, 0x87, 0x44, 0xD9, 0x8A, + 0xD9, 0x89, 0x44, 0xD9, 0x8A, 0xD9, 0x8A, 0x44, + 0xD9, 0x8A, 0xD9, 0xB4, 0x44, 0xDB, 0x87, 0xD9, // Bytes 1f40 - 1f7f - 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x29, 0x08, - 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x29, - 0x08, 0x28, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, - 0x29, 0x08, 0x28, 0xE1, 0x84, 0x87, 0xE1, 0x85, - 0xA1, 0x29, 0x08, 0x28, 0xE1, 0x84, 0x89, 0xE1, - 0x85, 0xA1, 0x29, 0x08, 0x28, 0xE1, 0x84, 0x8B, - 0xE1, 0x85, 0xA1, 0x29, 0x08, 0x28, 0xE1, 0x84, - 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x08, 0x28, 0xE1, + 0xB4, 0x44, 0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, + 0xA0, 0x94, 0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, + 0x44, 0xF0, 0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, + 0x98, 0xBA, 0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, + 0xF0, 0xA0, 0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, + 0xAC, 0x44, 0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, + 0xA1, 0x93, 0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, + 0x44, 0xF0, 0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, // Bytes 1f80 - 1fbf - 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x29, 0x08, 0x28, - 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x29, 0x08, - 0x28, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x29, - 0x08, 0x28, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, - 0x29, 0x08, 0x28, 0xE1, 0x84, 0x92, 0xE1, 0x85, - 0xA1, 0x29, 0x08, 0x28, 0xE1, 0x84, 0x8C, 0xE1, - 0x85, 0xAE, 0x29, 0x11, 0x28, 0xE1, 0x84, 0x8B, - 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1, 0x85, + 0xA7, 0x88, 0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, + 0xF0, 0xA1, 0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, + 0xA4, 0x44, 0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, + 0xA2, 0x86, 0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, + 0x44, 0xF0, 0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, + 0x9B, 0x94, 0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, + 0xF0, 0xA2, 0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, + 0x8C, 0x44, 0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, // Bytes 1fc0 - 1fff - 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x0E, 0x28, 0xE1, - 0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92, - 0xE1, 0x85, 0xAE, 0x29, 0x05, 0x28, 0xE4, 0xB8, - 0x80, 0x29, 0x05, 0x28, 0xE4, 0xBA, 0x8C, 0x29, - 0x05, 0x28, 0xE4, 0xB8, 0x89, 0x29, 0x05, 0x28, - 0xE5, 0x9B, 0x9B, 0x29, 0x05, 0x28, 0xE4, 0xBA, - 0x94, 0x29, 0x05, 0x28, 0xE5, 0x85, 0xAD, 0x29, - 0x05, 0x28, 0xE4, 0xB8, 0x83, 0x29, 0x05, 0x28, + 0xA3, 0x80, 0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, + 0x44, 0xF0, 0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, + 0x8E, 0x93, 0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, + 0xF0, 0xA3, 0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, + 0x95, 0x44, 0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, + 0xA3, 0x9A, 0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, + 0x44, 0xF0, 0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, + 0xAB, 0xBA, 0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, // Bytes 2000 - 203f - 0xE5, 0x85, 0xAB, 0x29, 0x05, 0x28, 0xE4, 0xB9, - 0x9D, 0x29, 0x05, 0x28, 0xE5, 0x8D, 0x81, 0x29, - 0x05, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x05, 0x28, - 0xE7, 0x81, 0xAB, 0x29, 0x05, 0x28, 0xE6, 0xB0, - 0xB4, 0x29, 0x05, 0x28, 0xE6, 0x9C, 0xA8, 0x29, - 0x05, 0x28, 0xE9, 0x87, 0x91, 0x29, 0x05, 0x28, - 0xE5, 0x9C, 0x9F, 0x29, 0x05, 0x28, 0xE6, 0x97, - 0xA5, 0x29, 0x05, 0x28, 0xE6, 0xA0, 0xAA, 0x29, + 0xF0, 0xA3, 0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, + 0x91, 0x44, 0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, + 0xA3, 0xBE, 0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, + 0x44, 0xF0, 0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, + 0x8E, 0xAB, 0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, + 0xF0, 0xA4, 0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, + 0x94, 0x44, 0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, + 0xA4, 0xB2, 0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, // Bytes 2040 - 207f - 0x05, 0x28, 0xE6, 0x9C, 0x89, 0x29, 0x05, 0x28, - 0xE7, 0xA4, 0xBE, 0x29, 0x05, 0x28, 0xE5, 0x90, - 0x8D, 0x29, 0x05, 0x28, 0xE7, 0x89, 0xB9, 0x29, - 0x05, 0x28, 0xE8, 0xB2, 0xA1, 0x29, 0x05, 0x28, - 0xE7, 0xA5, 0x9D, 0x29, 0x05, 0x28, 0xE5, 0x8A, - 0xB4, 0x29, 0x05, 0x28, 0xE4, 0xBB, 0xA3, 0x29, - 0x05, 0x28, 0xE5, 0x91, 0xBC, 0x29, 0x05, 0x28, - 0xE5, 0xAD, 0xA6, 0x29, 0x05, 0x28, 0xE7, 0x9B, + 0x44, 0xF0, 0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, + 0x81, 0x84, 0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, + 0xF0, 0xA5, 0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, + 0x99, 0x44, 0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, + 0xA5, 0x89, 0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, + 0x44, 0xF0, 0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, + 0x9A, 0x9A, 0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, + 0xF0, 0xA5, 0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, // Bytes 2080 - 20bf - 0xA3, 0x29, 0x05, 0x28, 0xE4, 0xBC, 0x81, 0x29, - 0x05, 0x28, 0xE8, 0xB3, 0x87, 0x29, 0x05, 0x28, - 0xE5, 0x8D, 0x94, 0x29, 0x05, 0x28, 0xE7, 0xA5, - 0xAD, 0x29, 0x05, 0x28, 0xE4, 0xBC, 0x91, 0x29, - 0x05, 0x28, 0xE8, 0x87, 0xAA, 0x29, 0x05, 0x28, - 0xE8, 0x87, 0xB3, 0x29, 0x03, 0xE5, 0x95, 0x8F, - 0x03, 0xE5, 0xB9, 0xBC, 0x03, 0xE7, 0xAE, 0x8F, - 0x03, 0x50, 0x54, 0x45, 0x02, 0x32, 0x31, 0x02, + 0xA7, 0x44, 0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, + 0xA5, 0xB2, 0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, + 0x44, 0xF0, 0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, + 0x87, 0x9A, 0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, + 0xF0, 0xA6, 0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, + 0x99, 0x44, 0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, + 0xA6, 0x93, 0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, + 0x44, 0xF0, 0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, // Bytes 20c0 - 20ff - 0x32, 0x32, 0x02, 0x32, 0x33, 0x02, 0x32, 0x34, - 0x02, 0x32, 0x35, 0x02, 0x32, 0x36, 0x02, 0x32, - 0x37, 0x02, 0x32, 0x38, 0x02, 0x32, 0x39, 0x02, - 0x33, 0x30, 0x02, 0x33, 0x31, 0x02, 0x33, 0x32, - 0x02, 0x33, 0x33, 0x02, 0x33, 0x34, 0x02, 0x33, - 0x35, 0x06, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, - 0x06, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x06, - 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x06, 0xE1, + 0x9E, 0xA7, 0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, + 0xF0, 0xA6, 0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, + 0xB6, 0x44, 0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, + 0xA6, 0xB5, 0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, + 0x44, 0xF0, 0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, + 0x83, 0x92, 0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, + 0xF0, 0xA7, 0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, + 0xAE, 0x44, 0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, // Bytes 2100 - 213f - 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x06, 0xE1, 0x84, - 0x86, 0xE1, 0x85, 0xA1, 0x06, 0xE1, 0x84, 0x87, - 0xE1, 0x85, 0xA1, 0x06, 0xE1, 0x84, 0x89, 0xE1, - 0x85, 0xA1, 0x06, 0xE1, 0x84, 0x8B, 0xE1, 0x85, - 0xA1, 0x06, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, - 0x06, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x06, - 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x06, 0xE1, - 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x06, 0xE1, 0x84, + 0xA7, 0xB2, 0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, + 0x44, 0xF0, 0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, + 0x97, 0x92, 0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, + 0xF0, 0xA8, 0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, + 0xBA, 0x44, 0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, + 0xA9, 0x85, 0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, + 0x44, 0xF0, 0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, + 0x90, 0x8A, 0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, // Bytes 2140 - 217f - 0x91, 0xE1, 0x85, 0xA1, 0x06, 0xE1, 0x84, 0x92, - 0xE1, 0x85, 0xA1, 0x0F, 0xE1, 0x84, 0x8E, 0xE1, - 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80, - 0xE1, 0x85, 0xA9, 0x0C, 0xE1, 0x84, 0x8C, 0xE1, - 0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4, - 0x06, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x03, - 0xE4, 0xBA, 0x94, 0x03, 0xE5, 0x85, 0xAD, 0x03, - 0xE4, 0xB8, 0x83, 0x03, 0xE4, 0xB9, 0x9D, 0x03, + 0xF0, 0xA9, 0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, + 0xB0, 0x44, 0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, + 0xAA, 0x84, 0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, + 0x44, 0xF0, 0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, + 0x8E, 0x92, 0x44, 0xF0, 0xAA, 0x98, 0x80, 0x45, + 0x28, 0xE1, 0x84, 0x80, 0x29, 0x45, 0x28, 0xE1, + 0x84, 0x82, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x83, + 0x29, 0x45, 0x28, 0xE1, 0x84, 0x85, 0x29, 0x45, // Bytes 2180 - 21bf - 0xE6, 0xA0, 0xAA, 0x03, 0xE6, 0x9C, 0x89, 0x03, - 0xE7, 0xA4, 0xBE, 0x03, 0xE5, 0x90, 0x8D, 0x03, - 0xE7, 0x89, 0xB9, 0x03, 0xE8, 0xB2, 0xA1, 0x03, - 0xE7, 0xA5, 0x9D, 0x03, 0xE5, 0x8A, 0xB4, 0x03, - 0xE7, 0xA7, 0x98, 0x03, 0xE7, 0x94, 0xB7, 0x03, - 0xE9, 0x81, 0xA9, 0x03, 0xE5, 0x84, 0xAA, 0x03, - 0xE5, 0x8D, 0xB0, 0x03, 0xE6, 0xB3, 0xA8, 0x03, - 0xE9, 0xA0, 0x85, 0x03, 0xE4, 0xBC, 0x91, 0x03, + 0x28, 0xE1, 0x84, 0x86, 0x29, 0x45, 0x28, 0xE1, + 0x84, 0x87, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x89, + 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8B, 0x29, 0x45, + 0x28, 0xE1, 0x84, 0x8C, 0x29, 0x45, 0x28, 0xE1, + 0x84, 0x8E, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8F, + 0x29, 0x45, 0x28, 0xE1, 0x84, 0x90, 0x29, 0x45, + 0x28, 0xE1, 0x84, 0x91, 0x29, 0x45, 0x28, 0xE1, + 0x84, 0x92, 0x29, 0x45, 0x28, 0xE4, 0xB8, 0x80, // Bytes 21c0 - 21ff - 0xE5, 0x86, 0x99, 0x03, 0xE6, 0xAD, 0xA3, 0x03, - 0xE5, 0xB7, 0xA6, 0x03, 0xE5, 0x8F, 0xB3, 0x03, - 0xE5, 0x8C, 0xBB, 0x03, 0xE5, 0xAE, 0x97, 0x03, - 0xE5, 0xAD, 0xA6, 0x03, 0xE7, 0x9B, 0xA3, 0x03, - 0xE4, 0xBC, 0x81, 0x03, 0xE8, 0xB3, 0x87, 0x03, - 0xE5, 0x8D, 0x94, 0x03, 0xE5, 0xA4, 0x9C, 0x02, - 0x33, 0x36, 0x02, 0x33, 0x37, 0x02, 0x33, 0x38, - 0x02, 0x33, 0x39, 0x02, 0x34, 0x30, 0x02, 0x34, + 0x29, 0x45, 0x28, 0xE4, 0xB8, 0x83, 0x29, 0x45, + 0x28, 0xE4, 0xB8, 0x89, 0x29, 0x45, 0x28, 0xE4, + 0xB9, 0x9D, 0x29, 0x45, 0x28, 0xE4, 0xBA, 0x8C, + 0x29, 0x45, 0x28, 0xE4, 0xBA, 0x94, 0x29, 0x45, + 0x28, 0xE4, 0xBB, 0xA3, 0x29, 0x45, 0x28, 0xE4, + 0xBC, 0x81, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x91, + 0x29, 0x45, 0x28, 0xE5, 0x85, 0xAB, 0x29, 0x45, + 0x28, 0xE5, 0x85, 0xAD, 0x29, 0x45, 0x28, 0xE5, // Bytes 2200 - 223f - 0x31, 0x02, 0x34, 0x32, 0x02, 0x34, 0x33, 0x02, - 0x34, 0x34, 0x02, 0x34, 0x35, 0x02, 0x34, 0x36, - 0x02, 0x34, 0x37, 0x02, 0x34, 0x38, 0x02, 0x34, - 0x39, 0x02, 0x35, 0x30, 0x04, 0x31, 0xE6, 0x9C, - 0x88, 0x04, 0x32, 0xE6, 0x9C, 0x88, 0x04, 0x33, - 0xE6, 0x9C, 0x88, 0x04, 0x34, 0xE6, 0x9C, 0x88, - 0x04, 0x35, 0xE6, 0x9C, 0x88, 0x04, 0x36, 0xE6, - 0x9C, 0x88, 0x04, 0x37, 0xE6, 0x9C, 0x88, 0x04, + 0x8A, 0xB4, 0x29, 0x45, 0x28, 0xE5, 0x8D, 0x81, + 0x29, 0x45, 0x28, 0xE5, 0x8D, 0x94, 0x29, 0x45, + 0x28, 0xE5, 0x90, 0x8D, 0x29, 0x45, 0x28, 0xE5, + 0x91, 0xBC, 0x29, 0x45, 0x28, 0xE5, 0x9B, 0x9B, + 0x29, 0x45, 0x28, 0xE5, 0x9C, 0x9F, 0x29, 0x45, + 0x28, 0xE5, 0xAD, 0xA6, 0x29, 0x45, 0x28, 0xE6, + 0x97, 0xA5, 0x29, 0x45, 0x28, 0xE6, 0x9C, 0x88, + 0x29, 0x45, 0x28, 0xE6, 0x9C, 0x89, 0x29, 0x45, // Bytes 2240 - 227f - 0x38, 0xE6, 0x9C, 0x88, 0x04, 0x39, 0xE6, 0x9C, - 0x88, 0x05, 0x31, 0x30, 0xE6, 0x9C, 0x88, 0x05, - 0x31, 0x31, 0xE6, 0x9C, 0x88, 0x05, 0x31, 0x32, - 0xE6, 0x9C, 0x88, 0x02, 0x48, 0x67, 0x03, 0x65, - 0x72, 0x67, 0x02, 0x65, 0x56, 0x03, 0x4C, 0x54, - 0x44, 0x03, 0xE3, 0x82, 0xA2, 0x03, 0xE3, 0x82, - 0xA4, 0x03, 0xE3, 0x82, 0xA6, 0x03, 0xE3, 0x82, - 0xA8, 0x03, 0xE3, 0x82, 0xAA, 0x03, 0xE3, 0x82, + 0x28, 0xE6, 0x9C, 0xA8, 0x29, 0x45, 0x28, 0xE6, + 0xA0, 0xAA, 0x29, 0x45, 0x28, 0xE6, 0xB0, 0xB4, + 0x29, 0x45, 0x28, 0xE7, 0x81, 0xAB, 0x29, 0x45, + 0x28, 0xE7, 0x89, 0xB9, 0x29, 0x45, 0x28, 0xE7, + 0x9B, 0xA3, 0x29, 0x45, 0x28, 0xE7, 0xA4, 0xBE, + 0x29, 0x45, 0x28, 0xE7, 0xA5, 0x9D, 0x29, 0x45, + 0x28, 0xE7, 0xA5, 0xAD, 0x29, 0x45, 0x28, 0xE8, + 0x87, 0xAA, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xB3, // Bytes 2280 - 22bf - 0xAB, 0x03, 0xE3, 0x82, 0xAD, 0x03, 0xE3, 0x82, - 0xAF, 0x03, 0xE3, 0x82, 0xB1, 0x03, 0xE3, 0x82, - 0xB3, 0x03, 0xE3, 0x82, 0xB5, 0x03, 0xE3, 0x82, - 0xB7, 0x03, 0xE3, 0x82, 0xB9, 0x03, 0xE3, 0x82, - 0xBB, 0x03, 0xE3, 0x82, 0xBD, 0x03, 0xE3, 0x82, - 0xBF, 0x03, 0xE3, 0x83, 0x81, 0x03, 0xE3, 0x83, - 0x84, 0x03, 0xE3, 0x83, 0x86, 0x03, 0xE3, 0x83, - 0x88, 0x03, 0xE3, 0x83, 0x8A, 0x03, 0xE3, 0x83, + 0x29, 0x45, 0x28, 0xE8, 0xB2, 0xA1, 0x29, 0x45, + 0x28, 0xE8, 0xB3, 0x87, 0x29, 0x45, 0x28, 0xE9, + 0x87, 0x91, 0x29, 0x45, 0x30, 0xE2, 0x81, 0x84, + 0x33, 0x45, 0x31, 0x30, 0xE6, 0x97, 0xA5, 0x45, + 0x31, 0x30, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x30, + 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x31, 0xE6, 0x97, + 0xA5, 0x45, 0x31, 0x31, 0xE6, 0x9C, 0x88, 0x45, + 0x31, 0x31, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x32, // Bytes 22c0 - 22ff - 0x8B, 0x03, 0xE3, 0x83, 0x8C, 0x03, 0xE3, 0x83, - 0x8D, 0x03, 0xE3, 0x83, 0x8E, 0x03, 0xE3, 0x83, - 0x8F, 0x03, 0xE3, 0x83, 0x92, 0x03, 0xE3, 0x83, - 0x95, 0x03, 0xE3, 0x83, 0x98, 0x03, 0xE3, 0x83, - 0x9B, 0x03, 0xE3, 0x83, 0x9E, 0x03, 0xE3, 0x83, - 0x9F, 0x03, 0xE3, 0x83, 0xA0, 0x03, 0xE3, 0x83, - 0xA1, 0x03, 0xE3, 0x83, 0xA2, 0x03, 0xE3, 0x83, - 0xA4, 0x03, 0xE3, 0x83, 0xA6, 0x03, 0xE3, 0x83, + 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x32, 0xE6, 0x9C, + 0x88, 0x45, 0x31, 0x32, 0xE7, 0x82, 0xB9, 0x45, + 0x31, 0x33, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x33, + 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x34, 0xE6, 0x97, + 0xA5, 0x45, 0x31, 0x34, 0xE7, 0x82, 0xB9, 0x45, + 0x31, 0x35, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x35, + 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x36, 0xE6, 0x97, + 0xA5, 0x45, 0x31, 0x36, 0xE7, 0x82, 0xB9, 0x45, // Bytes 2300 - 233f - 0xA8, 0x03, 0xE3, 0x83, 0xA9, 0x03, 0xE3, 0x83, - 0xAA, 0x03, 0xE3, 0x83, 0xAB, 0x03, 0xE3, 0x83, - 0xAC, 0x03, 0xE3, 0x83, 0xAD, 0x03, 0xE3, 0x83, - 0xAF, 0x03, 0xE3, 0x83, 0xB0, 0x03, 0xE3, 0x83, - 0xB1, 0x03, 0xE3, 0x83, 0xB2, 0x0F, 0xE3, 0x82, - 0xA2, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, - 0x83, 0xBC, 0xE3, 0x83, 0x88, 0x0C, 0xE3, 0x82, - 0xA2, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x95, 0xE3, + 0x31, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x37, + 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x38, 0xE6, 0x97, + 0xA5, 0x45, 0x31, 0x38, 0xE7, 0x82, 0xB9, 0x45, + 0x31, 0x39, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x39, + 0xE7, 0x82, 0xB9, 0x45, 0x31, 0xE2, 0x81, 0x84, + 0x32, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x33, 0x45, + 0x31, 0xE2, 0x81, 0x84, 0x34, 0x45, 0x31, 0xE2, + 0x81, 0x84, 0x35, 0x45, 0x31, 0xE2, 0x81, 0x84, // Bytes 2340 - 237f - 0x82, 0xA1, 0x0F, 0xE3, 0x82, 0xA2, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, - 0x82, 0xA2, 0x09, 0xE3, 0x82, 0xA2, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0xAB, 0x0F, 0xE3, 0x82, 0xA4, - 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82, - 0xAF, 0xE3, 0x82, 0x99, 0x09, 0xE3, 0x82, 0xA4, - 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0x09, 0xE3, - 0x82, 0xA6, 0xE3, 0x82, 0xA9, 0xE3, 0x83, 0xB3, + 0x36, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x37, 0x45, + 0x31, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x31, 0xE2, + 0x81, 0x84, 0x39, 0x45, 0x32, 0x30, 0xE6, 0x97, + 0xA5, 0x45, 0x32, 0x30, 0xE7, 0x82, 0xB9, 0x45, + 0x32, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x31, + 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x32, 0xE6, 0x97, + 0xA5, 0x45, 0x32, 0x32, 0xE7, 0x82, 0xB9, 0x45, + 0x32, 0x33, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x33, // Bytes 2380 - 23bf - 0x12, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3, - 0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, - 0xE3, 0x82, 0x99, 0x0C, 0xE3, 0x82, 0xA8, 0xE3, - 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xBC, - 0x09, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, - 0x82, 0xB9, 0x09, 0xE3, 0x82, 0xAA, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0xA0, 0x09, 0xE3, 0x82, 0xAB, - 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xAA, 0x0C, 0xE3, + 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x34, 0xE6, 0x97, + 0xA5, 0x45, 0x32, 0x34, 0xE7, 0x82, 0xB9, 0x45, + 0x32, 0x35, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x36, + 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x37, 0xE6, 0x97, + 0xA5, 0x45, 0x32, 0x38, 0xE6, 0x97, 0xA5, 0x45, + 0x32, 0x39, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0xE2, + 0x81, 0x84, 0x33, 0x45, 0x32, 0xE2, 0x81, 0x84, + 0x35, 0x45, 0x33, 0x30, 0xE6, 0x97, 0xA5, 0x45, // Bytes 23c0 - 23ff - 0x82, 0xAB, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, - 0xE3, 0x83, 0x88, 0x0C, 0xE3, 0x82, 0xAB, 0xE3, - 0x83, 0xAD, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, - 0x0C, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, - 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x0C, 0xE3, 0x82, - 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xB3, 0xE3, - 0x83, 0x9E, 0x0C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, - 0x99, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0C, + 0x33, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0xE2, + 0x81, 0x84, 0x34, 0x45, 0x33, 0xE2, 0x81, 0x84, + 0x35, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x38, 0x45, + 0x34, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x35, 0xE2, + 0x81, 0x84, 0x36, 0x45, 0x35, 0xE2, 0x81, 0x84, + 0x38, 0x45, 0x37, 0xE2, 0x81, 0x84, 0x38, 0x45, + 0x41, 0xE2, 0x88, 0x95, 0x6D, 0x45, 0x56, 0xE2, + 0x88, 0x95, 0x6D, 0x45, 0x6D, 0xE2, 0x88, 0x95, // Bytes 2400 - 243f - 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0x8B, 0xE3, 0x83, 0xBC, 0x0C, 0xE3, 0x82, 0xAD, - 0xE3, 0x83, 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, - 0xBC, 0x12, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, - 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xBF, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xBC, 0x06, 0xE3, 0x82, 0xAD, - 0xE3, 0x83, 0xAD, 0x12, 0xE3, 0x82, 0xAD, 0xE3, - 0x83, 0xAD, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, + 0x73, 0x46, 0x31, 0xE2, 0x81, 0x84, 0x31, 0x30, + 0x46, 0x43, 0xE2, 0x88, 0x95, 0x6B, 0x67, 0x46, + 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x46, 0xD8, + 0xA8, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xA8, + 0xD8, 0xAE, 0xD9, 0x8A, 0x46, 0xD8, 0xAA, 0xD8, + 0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, + 0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, + 0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAD, 0xD8, 0xAC, // Bytes 2440 - 247f - 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x12, 0xE3, - 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, - 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, - 0xAB, 0x0F, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, - 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, 0xE3, 0x83, - 0x88, 0x0C, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, - 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x12, 0xE3, - 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, + 0x46, 0xD8, 0xAA, 0xD8, 0xAD, 0xD9, 0x85, 0x46, + 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD8, + 0xAA, 0xD8, 0xAE, 0xD9, 0x89, 0x46, 0xD8, 0xAA, + 0xD8, 0xAE, 0xD9, 0x8A, 0x46, 0xD8, 0xAA, 0xD9, + 0x85, 0xD8, 0xAC, 0x46, 0xD8, 0xAA, 0xD9, 0x85, + 0xD8, 0xAD, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, + 0xAE, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD9, 0x89, + 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, // Bytes 2480 - 24bf - 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3, 0x83, - 0xB3, 0x12, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, - 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3, 0x82, - 0xA4, 0xE3, 0x83, 0xAD, 0x0C, 0xE3, 0x82, 0xAF, - 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0x8D, 0x09, 0xE3, 0x82, 0xB1, 0xE3, 0x83, 0xBC, - 0xE3, 0x82, 0xB9, 0x09, 0xE3, 0x82, 0xB3, 0xE3, - 0x83, 0xAB, 0xE3, 0x83, 0x8A, 0x0C, 0xE3, 0x82, + 0xD8, 0xAC, 0xD8, 0xAD, 0xD9, 0x89, 0x46, 0xD8, + 0xAC, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, + 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xAC, 0xD9, + 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD9, 0x85, + 0xD9, 0x8A, 0x46, 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, + 0x8A, 0x46, 0xD8, 0xAD, 0xD9, 0x85, 0xD9, 0x89, + 0x46, 0xD8, 0xAD, 0xD9, 0x85, 0xD9, 0x8A, 0x46, + 0xD8, 0xB3, 0xD8, 0xAC, 0xD8, 0xAD, 0x46, 0xD8, // Bytes 24c0 - 24ff - 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x9B, 0xE3, - 0x82, 0x9A, 0x0C, 0xE3, 0x82, 0xB5, 0xE3, 0x82, - 0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x0F, - 0xE3, 0x82, 0xB5, 0xE3, 0x83, 0xB3, 0xE3, 0x83, - 0x81, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x0F, - 0xE3, 0x82, 0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, - 0xB3, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x09, - 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0xB3, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD8, 0xB3, + 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xB3, 0xD8, + 0xAE, 0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, + 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, + 0xAC, 0x46, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAD, + 0x46, 0xD8, 0xB3, 0xD9, 0x85, 0xD9, 0x85, 0x46, + 0xD8, 0xB4, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, + 0xB4, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xB4, // Bytes 2500 - 253f - 0x81, 0x09, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, - 0xE3, 0x83, 0x88, 0x0C, 0xE3, 0x82, 0xBF, 0xE3, - 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, - 0x09, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0xE3, - 0x82, 0xB7, 0x09, 0xE3, 0x83, 0x88, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xAB, 0x06, 0xE3, 0x83, 0x88, - 0xE3, 0x83, 0xB3, 0x06, 0xE3, 0x83, 0x8A, 0xE3, - 0x83, 0x8E, 0x09, 0xE3, 0x83, 0x8E, 0xE3, 0x83, + 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD9, + 0x85, 0xD8, 0xAE, 0x46, 0xD8, 0xB4, 0xD9, 0x85, + 0xD9, 0x85, 0x46, 0xD8, 0xB5, 0xD8, 0xAD, 0xD8, + 0xAD, 0x46, 0xD8, 0xB5, 0xD8, 0xAD, 0xD9, 0x8A, + 0x46, 0xD8, 0xB5, 0xD9, 0x84, 0xD9, 0x89, 0x46, + 0xD8, 0xB5, 0xD9, 0x84, 0xDB, 0x92, 0x46, 0xD8, + 0xB5, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB6, + 0xD8, 0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xB6, 0xD8, // Bytes 2540 - 257f - 0x83, 0xE3, 0x83, 0x88, 0x09, 0xE3, 0x83, 0x8F, - 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0x84, 0x12, 0xE3, - 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, - 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, - 0x88, 0x0C, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, - 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x84, 0x0F, 0xE3, - 0x83, 0x8F, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, - 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xAB, 0x12, 0xE3, + 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB6, 0xD8, 0xAE, + 0xD9, 0x85, 0x46, 0xD8, 0xB7, 0xD9, 0x85, 0xD8, + 0xAD, 0x46, 0xD8, 0xB7, 0xD9, 0x85, 0xD9, 0x85, + 0x46, 0xD8, 0xB7, 0xD9, 0x85, 0xD9, 0x8A, 0x46, + 0xD8, 0xB9, 0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD8, + 0xB9, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB9, + 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xB9, 0xD9, + 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xBA, 0xD9, 0x85, // Bytes 2580 - 25bf - 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA2, - 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88, 0xE3, 0x83, - 0xAB, 0x0C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, - 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x09, 0xE3, - 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3, - 0x09, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0xE3, - 0x83, 0xAB, 0x12, 0xE3, 0x83, 0x95, 0xE3, 0x82, - 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, + 0xD9, 0x85, 0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, + 0x89, 0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x8A, + 0x46, 0xD9, 0x81, 0xD8, 0xAE, 0xD9, 0x85, 0x46, + 0xD9, 0x81, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, + 0x82, 0xD9, 0x84, 0xDB, 0x92, 0x46, 0xD9, 0x82, + 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x82, 0xD9, + 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x82, 0xD9, 0x85, + 0xD9, 0x8A, 0x46, 0xD9, 0x83, 0xD9, 0x85, 0xD9, // Bytes 25c0 - 25ff - 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0C, 0xE3, 0x83, - 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0x88, 0x12, 0xE3, 0x83, 0x95, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7, 0xE3, - 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x09, 0xE3, 0x83, - 0x95, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xB3, 0x0F, - 0xE3, 0x83, 0x98, 0xE3, 0x82, 0xAF, 0xE3, 0x82, - 0xBF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x09, + 0x85, 0x46, 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x8A, + 0x46, 0xD9, 0x84, 0xD8, 0xAC, 0xD8, 0xAC, 0x46, + 0xD9, 0x84, 0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD9, + 0x84, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x84, + 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, + 0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x84, 0xD8, 0xAD, + 0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAE, 0xD9, + 0x85, 0x46, 0xD9, 0x84, 0xD9, 0x85, 0xD8, 0xAD, // Bytes 2600 - 263f - 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x82, - 0xBD, 0x0C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, - 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0x92, 0x09, 0xE3, - 0x83, 0x98, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, - 0x0C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, - 0x83, 0xB3, 0xE3, 0x82, 0xB9, 0x0F, 0xE3, 0x83, - 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, - 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0C, 0xE3, 0x83, + 0x46, 0xD9, 0x84, 0xD9, 0x85, 0xD9, 0x8A, 0x46, + 0xD9, 0x85, 0xD8, 0xAC, 0xD8, 0xAD, 0x46, 0xD9, + 0x85, 0xD8, 0xAC, 0xD8, 0xAE, 0x46, 0xD9, 0x85, + 0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, + 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, 0xAD, + 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, + 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x8A, + 0x46, 0xD9, 0x85, 0xD8, 0xAE, 0xD8, 0xAC, 0x46, // Bytes 2640 - 267f - 0x98, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, - 0x82, 0xBF, 0x0F, 0xE3, 0x83, 0x9B, 0xE3, 0x82, - 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, - 0x83, 0x88, 0x0C, 0xE3, 0x83, 0x9B, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x06, - 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x0F, 0xE3, - 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, - 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x09, 0xE3, + 0xD9, 0x85, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, + 0x85, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, 0xD9, 0x85, + 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD8, + 0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x86, 0xD8, 0xAC, + 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, + 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x8A, + 0x46, 0xD9, 0x86, 0xD8, 0xAD, 0xD9, 0x85, 0x46, + 0xD9, 0x86, 0xD8, 0xAD, 0xD9, 0x89, 0x46, 0xD9, // Bytes 2680 - 26bf - 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, - 0x09, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xB3, 0x0C, 0xE3, 0x83, 0x9E, 0xE3, 0x82, - 0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0x09, - 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x83, - 0xAB, 0x09, 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0x83, - 0xE3, 0x83, 0x8F, 0x09, 0xE3, 0x83, 0x9E, 0xE3, - 0x83, 0xAB, 0xE3, 0x82, 0xAF, 0x0F, 0xE3, 0x83, + 0x86, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x86, + 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD9, + 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x87, 0xD9, 0x85, + 0xD8, 0xAC, 0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD9, + 0x85, 0x46, 0xD9, 0x8A, 0xD8, 0xAC, 0xD9, 0x8A, + 0x46, 0xD9, 0x8A, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, + 0xD9, 0x8A, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, + 0x8A, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, // Bytes 26c0 - 26ff - 0x9E, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, - 0x83, 0xA7, 0xE3, 0x83, 0xB3, 0x0C, 0xE3, 0x83, - 0x9F, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, - 0x83, 0xB3, 0x06, 0xE3, 0x83, 0x9F, 0xE3, 0x83, - 0xAA, 0x12, 0xE3, 0x83, 0x9F, 0xE3, 0x83, 0xAA, - 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0xAB, 0x09, 0xE3, 0x83, 0xA1, - 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0F, 0xE3, + 0xD9, 0x94, 0xD8, 0xA7, 0x46, 0xD9, 0x8A, 0xD9, + 0x94, 0xD8, 0xAC, 0x46, 0xD9, 0x8A, 0xD9, 0x94, + 0xD8, 0xAD, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, + 0xAE, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xB1, + 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xB2, 0x46, + 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x85, 0x46, 0xD9, + 0x8A, 0xD9, 0x94, 0xD9, 0x86, 0x46, 0xD9, 0x8A, + 0xD9, 0x94, 0xD9, 0x87, 0x46, 0xD9, 0x8A, 0xD9, // Bytes 2700 - 273f - 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, - 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x0C, 0xE3, - 0x83, 0xA1, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, - 0xE3, 0x83, 0xAB, 0x0C, 0xE3, 0x83, 0xA4, 0xE3, - 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, - 0x09, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xAB, 0x09, 0xE3, 0x83, 0xA6, 0xE3, 0x82, - 0xA2, 0xE3, 0x83, 0xB3, 0x0C, 0xE3, 0x83, 0xAA, + 0x94, 0xD9, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94, + 0xD9, 0x89, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, + 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x86, + 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x87, 0x46, + 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x88, 0x46, 0xD9, + 0x8A, 0xD9, 0x94, 0xDB, 0x90, 0x46, 0xD9, 0x8A, + 0xD9, 0x94, 0xDB, 0x95, 0x46, 0xE0, 0xB9, 0x8D, + 0xE0, 0xB8, 0xB2, 0x46, 0xE0, 0xBA, 0xAB, 0xE0, // Bytes 2740 - 277f - 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x83, - 0xAB, 0x06, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xA9, - 0x0C, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x92, 0xE3, - 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0x0F, 0xE3, 0x83, - 0xAB, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, - 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x06, 0xE3, 0x83, - 0xAC, 0xE3, 0x83, 0xA0, 0x12, 0xE3, 0x83, 0xAC, - 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, + 0xBA, 0x99, 0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, + 0xA1, 0x46, 0xE0, 0xBB, 0x8D, 0xE0, 0xBA, 0xB2, + 0x46, 0xE0, 0xBD, 0x80, 0xE0, 0xBE, 0xB5, 0x46, + 0xE0, 0xBD, 0x82, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, + 0xBD, 0x8C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, + 0x91, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x96, + 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x9B, 0xE0, + 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0x90, 0xE0, 0xBE, // Bytes 2780 - 27bf - 0xB1, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xB3, 0x09, - 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, 0xE3, 0x83, - 0x88, 0x04, 0x30, 0xE7, 0x82, 0xB9, 0x04, 0x31, - 0xE7, 0x82, 0xB9, 0x04, 0x32, 0xE7, 0x82, 0xB9, - 0x04, 0x33, 0xE7, 0x82, 0xB9, 0x04, 0x34, 0xE7, - 0x82, 0xB9, 0x04, 0x35, 0xE7, 0x82, 0xB9, 0x04, - 0x36, 0xE7, 0x82, 0xB9, 0x04, 0x37, 0xE7, 0x82, - 0xB9, 0x04, 0x38, 0xE7, 0x82, 0xB9, 0x04, 0x39, + 0xB5, 0x46, 0xE0, 0xBE, 0x92, 0xE0, 0xBE, 0xB7, + 0x46, 0xE0, 0xBE, 0x9C, 0xE0, 0xBE, 0xB7, 0x46, + 0xE0, 0xBE, 0xA1, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, + 0xBE, 0xA6, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, + 0xAB, 0xE0, 0xBE, 0xB7, 0x46, 0xE1, 0x84, 0x80, + 0xE1, 0x85, 0xA1, 0x46, 0xE1, 0x84, 0x82, 0xE1, + 0x85, 0xA1, 0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, + 0xA1, 0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, // Bytes 27c0 - 27ff - 0xE7, 0x82, 0xB9, 0x05, 0x31, 0x30, 0xE7, 0x82, - 0xB9, 0x05, 0x31, 0x31, 0xE7, 0x82, 0xB9, 0x05, - 0x31, 0x32, 0xE7, 0x82, 0xB9, 0x05, 0x31, 0x33, - 0xE7, 0x82, 0xB9, 0x05, 0x31, 0x34, 0xE7, 0x82, - 0xB9, 0x05, 0x31, 0x35, 0xE7, 0x82, 0xB9, 0x05, - 0x31, 0x36, 0xE7, 0x82, 0xB9, 0x05, 0x31, 0x37, - 0xE7, 0x82, 0xB9, 0x05, 0x31, 0x38, 0xE7, 0x82, - 0xB9, 0x05, 0x31, 0x39, 0xE7, 0x82, 0xB9, 0x05, + 0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x46, + 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x46, 0xE1, + 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x46, 0xE1, 0x84, + 0x8B, 0xE1, 0x85, 0xA1, 0x46, 0xE1, 0x84, 0x8B, + 0xE1, 0x85, 0xAE, 0x46, 0xE1, 0x84, 0x8C, 0xE1, + 0x85, 0xA1, 0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, + 0xA1, 0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, + 0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x46, // Bytes 2800 - 283f - 0x32, 0x30, 0xE7, 0x82, 0xB9, 0x05, 0x32, 0x31, - 0xE7, 0x82, 0xB9, 0x05, 0x32, 0x32, 0xE7, 0x82, - 0xB9, 0x05, 0x32, 0x33, 0xE7, 0x82, 0xB9, 0x05, - 0x32, 0x34, 0xE7, 0x82, 0xB9, 0x03, 0x68, 0x50, - 0x61, 0x02, 0x64, 0x61, 0x02, 0x41, 0x55, 0x03, - 0x62, 0x61, 0x72, 0x02, 0x6F, 0x56, 0x02, 0x70, - 0x63, 0x02, 0x64, 0x6D, 0x03, 0x64, 0x6D, 0x32, - 0x03, 0x64, 0x6D, 0x33, 0x02, 0x49, 0x55, 0x06, + 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x46, 0xE1, + 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x46, 0xE2, 0x80, + 0xB2, 0xE2, 0x80, 0xB2, 0x46, 0xE2, 0x80, 0xB5, + 0xE2, 0x80, 0xB5, 0x46, 0xE2, 0x88, 0xAB, 0xE2, + 0x88, 0xAB, 0x46, 0xE2, 0x88, 0xAE, 0xE2, 0x88, + 0xAE, 0x46, 0xE3, 0x81, 0xBB, 0xE3, 0x81, 0x8B, + 0x46, 0xE3, 0x82, 0x88, 0xE3, 0x82, 0x8A, 0x46, + 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0x46, 0xE3, // Bytes 2840 - 287f - 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90, 0x06, 0xE6, - 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x06, 0xE5, 0xA4, - 0xA7, 0xE6, 0xAD, 0xA3, 0x06, 0xE6, 0x98, 0x8E, - 0xE6, 0xB2, 0xBB, 0x0C, 0xE6, 0xA0, 0xAA, 0xE5, - 0xBC, 0x8F, 0xE4, 0xBC, 0x9A, 0xE7, 0xA4, 0xBE, - 0x02, 0x70, 0x41, 0x02, 0x6E, 0x41, 0x03, 0xCE, - 0xBC, 0x41, 0x02, 0x6D, 0x41, 0x02, 0x6B, 0x41, - 0x02, 0x4B, 0x42, 0x02, 0x4D, 0x42, 0x02, 0x47, + 0x82, 0xB3, 0xE3, 0x82, 0xB3, 0x46, 0xE3, 0x82, + 0xB3, 0xE3, 0x83, 0x88, 0x46, 0xE3, 0x83, 0x88, + 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83, 0x8A, 0xE3, + 0x83, 0x8E, 0x46, 0xE3, 0x83, 0x9B, 0xE3, 0x83, + 0xB3, 0x46, 0xE3, 0x83, 0x9F, 0xE3, 0x83, 0xAA, + 0x46, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xA9, 0x46, + 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xA0, 0x46, 0xE5, + 0xA4, 0xA7, 0xE6, 0xAD, 0xA3, 0x46, 0xE5, 0xB9, // Bytes 2880 - 28bf - 0x42, 0x03, 0x63, 0x61, 0x6C, 0x04, 0x6B, 0x63, - 0x61, 0x6C, 0x02, 0x70, 0x46, 0x02, 0x6E, 0x46, - 0x03, 0xCE, 0xBC, 0x46, 0x03, 0xCE, 0xBC, 0x67, - 0x02, 0x6D, 0x67, 0x02, 0x6B, 0x67, 0x02, 0x48, - 0x7A, 0x03, 0x6B, 0x48, 0x7A, 0x03, 0x4D, 0x48, - 0x7A, 0x03, 0x47, 0x48, 0x7A, 0x03, 0x54, 0x48, - 0x7A, 0x03, 0xCE, 0xBC, 0x6C, 0x02, 0x6D, 0x6C, - 0x02, 0x64, 0x6C, 0x02, 0x6B, 0x6C, 0x02, 0x66, + 0xB3, 0xE6, 0x88, 0x90, 0x46, 0xE6, 0x98, 0x8E, + 0xE6, 0xB2, 0xBB, 0x46, 0xE6, 0x98, 0xAD, 0xE5, + 0x92, 0x8C, 0x47, 0x72, 0x61, 0x64, 0xE2, 0x88, + 0x95, 0x73, 0x47, 0xE3, 0x80, 0x94, 0x53, 0xE3, + 0x80, 0x95, 0x48, 0x28, 0xE1, 0x84, 0x80, 0xE1, + 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x82, + 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, + 0x83, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, // Bytes 28c0 - 28ff - 0x6D, 0x02, 0x6E, 0x6D, 0x03, 0xCE, 0xBC, 0x6D, - 0x02, 0x6D, 0x6D, 0x02, 0x63, 0x6D, 0x02, 0x6B, - 0x6D, 0x03, 0x6D, 0x6D, 0x32, 0x03, 0x63, 0x6D, - 0x32, 0x02, 0x6D, 0x32, 0x03, 0x6B, 0x6D, 0x32, - 0x03, 0x6D, 0x6D, 0x33, 0x03, 0x63, 0x6D, 0x33, - 0x02, 0x6D, 0x33, 0x03, 0x6B, 0x6D, 0x33, 0x05, - 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x06, 0x6D, 0xE2, - 0x88, 0x95, 0x73, 0x32, 0x02, 0x50, 0x61, 0x03, + 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, + 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x29, 0x48, + 0x28, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x29, + 0x48, 0x28, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, + 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8B, 0xE1, 0x85, + 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8C, 0xE1, + 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8C, + 0xE1, 0x85, 0xAE, 0x29, 0x48, 0x28, 0xE1, 0x84, // Bytes 2900 - 293f - 0x6B, 0x50, 0x61, 0x03, 0x4D, 0x50, 0x61, 0x03, - 0x47, 0x50, 0x61, 0x03, 0x72, 0x61, 0x64, 0x07, - 0x72, 0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x08, - 0x72, 0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x32, - 0x02, 0x70, 0x73, 0x02, 0x6E, 0x73, 0x03, 0xCE, - 0xBC, 0x73, 0x02, 0x6D, 0x73, 0x02, 0x70, 0x56, - 0x02, 0x6E, 0x56, 0x03, 0xCE, 0xBC, 0x56, 0x02, - 0x6D, 0x56, 0x02, 0x6B, 0x56, 0x02, 0x4D, 0x56, + 0x8E, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, + 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, + 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x29, 0x48, + 0x28, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x29, + 0x48, 0x28, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, + 0x29, 0x48, 0x72, 0x61, 0x64, 0xE2, 0x88, 0x95, + 0x73, 0x32, 0x48, 0xD8, 0xA7, 0xD9, 0x83, 0xD8, + 0xA8, 0xD8, 0xB1, 0x48, 0xD8, 0xA7, 0xD9, 0x84, // Bytes 2940 - 297f - 0x02, 0x70, 0x57, 0x02, 0x6E, 0x57, 0x03, 0xCE, - 0xBC, 0x57, 0x02, 0x6D, 0x57, 0x02, 0x6B, 0x57, - 0x02, 0x4D, 0x57, 0x03, 0x6B, 0xCE, 0xA9, 0x03, - 0x4D, 0xCE, 0xA9, 0x04, 0x61, 0x2E, 0x6D, 0x2E, - 0x02, 0x42, 0x71, 0x02, 0x63, 0x63, 0x02, 0x63, - 0x64, 0x06, 0x43, 0xE2, 0x88, 0x95, 0x6B, 0x67, - 0x03, 0x43, 0x6F, 0x2E, 0x02, 0x64, 0x42, 0x02, - 0x47, 0x79, 0x02, 0x68, 0x61, 0x02, 0x48, 0x50, + 0xD9, 0x84, 0xD9, 0x87, 0x48, 0xD8, 0xB1, 0xD8, + 0xB3, 0xD9, 0x88, 0xD9, 0x84, 0x48, 0xD8, 0xB1, + 0xDB, 0x8C, 0xD8, 0xA7, 0xD9, 0x84, 0x48, 0xD8, + 0xB5, 0xD9, 0x84, 0xD8, 0xB9, 0xD9, 0x85, 0x48, + 0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A, 0xD9, 0x87, + 0x48, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0xD8, + 0xAF, 0x48, 0xD9, 0x88, 0xD8, 0xB3, 0xD9, 0x84, + 0xD9, 0x85, 0x49, 0xE2, 0x80, 0xB2, 0xE2, 0x80, // Bytes 2980 - 29bf - 0x02, 0x69, 0x6E, 0x02, 0x4B, 0x4B, 0x02, 0x4B, - 0x4D, 0x02, 0x6B, 0x74, 0x02, 0x6C, 0x6D, 0x02, - 0x6C, 0x6E, 0x03, 0x6C, 0x6F, 0x67, 0x02, 0x6C, - 0x78, 0x02, 0x6D, 0x62, 0x03, 0x6D, 0x69, 0x6C, - 0x03, 0x6D, 0x6F, 0x6C, 0x02, 0x50, 0x48, 0x04, - 0x70, 0x2E, 0x6D, 0x2E, 0x03, 0x50, 0x50, 0x4D, - 0x02, 0x50, 0x52, 0x02, 0x73, 0x72, 0x02, 0x53, - 0x76, 0x02, 0x57, 0x62, 0x05, 0x56, 0xE2, 0x88, + 0xB2, 0xE2, 0x80, 0xB2, 0x49, 0xE2, 0x80, 0xB5, + 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x49, 0xE2, + 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, + 0x49, 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0xE2, + 0x88, 0xAE, 0x49, 0xE3, 0x80, 0x94, 0xE4, 0xB8, + 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, + 0xE4, 0xBA, 0x8C, 0xE3, 0x80, 0x95, 0x49, 0xE3, + 0x80, 0x94, 0xE5, 0x8B, 0x9D, 0xE3, 0x80, 0x95, // Bytes 29c0 - 29ff - 0x95, 0x6D, 0x05, 0x41, 0xE2, 0x88, 0x95, 0x6D, - 0x04, 0x31, 0xE6, 0x97, 0xA5, 0x04, 0x32, 0xE6, - 0x97, 0xA5, 0x04, 0x33, 0xE6, 0x97, 0xA5, 0x04, - 0x34, 0xE6, 0x97, 0xA5, 0x04, 0x35, 0xE6, 0x97, - 0xA5, 0x04, 0x36, 0xE6, 0x97, 0xA5, 0x04, 0x37, - 0xE6, 0x97, 0xA5, 0x04, 0x38, 0xE6, 0x97, 0xA5, - 0x04, 0x39, 0xE6, 0x97, 0xA5, 0x05, 0x31, 0x30, - 0xE6, 0x97, 0xA5, 0x05, 0x31, 0x31, 0xE6, 0x97, + 0x49, 0xE3, 0x80, 0x94, 0xE5, 0xAE, 0x89, 0xE3, + 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x89, + 0x93, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, + 0xE6, 0x95, 0x97, 0xE3, 0x80, 0x95, 0x49, 0xE3, + 0x80, 0x94, 0xE6, 0x9C, 0xAC, 0xE3, 0x80, 0x95, + 0x49, 0xE3, 0x80, 0x94, 0xE7, 0x82, 0xB9, 0xE3, + 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE7, 0x9B, + 0x97, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x82, 0xA2, // Bytes 2a00 - 2a3f - 0xA5, 0x05, 0x31, 0x32, 0xE6, 0x97, 0xA5, 0x05, - 0x31, 0x33, 0xE6, 0x97, 0xA5, 0x05, 0x31, 0x34, - 0xE6, 0x97, 0xA5, 0x05, 0x31, 0x35, 0xE6, 0x97, - 0xA5, 0x05, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x05, - 0x31, 0x37, 0xE6, 0x97, 0xA5, 0x05, 0x31, 0x38, - 0xE6, 0x97, 0xA5, 0x05, 0x31, 0x39, 0xE6, 0x97, - 0xA5, 0x05, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x05, - 0x32, 0x31, 0xE6, 0x97, 0xA5, 0x05, 0x32, 0x32, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, 0xE3, + 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, + 0x49, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0xA9, 0xE3, + 0x83, 0xB3, 0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, + 0xB3, 0xE3, 0x82, 0xB9, 0x49, 0xE3, 0x82, 0xAA, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x49, 0xE3, + 0x82, 0xAB, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xAA, + 0x49, 0xE3, 0x82, 0xB1, 0xE3, 0x83, 0xBC, 0xE3, // Bytes 2a40 - 2a7f - 0xE6, 0x97, 0xA5, 0x05, 0x32, 0x33, 0xE6, 0x97, - 0xA5, 0x05, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x05, - 0x32, 0x35, 0xE6, 0x97, 0xA5, 0x05, 0x32, 0x36, - 0xE6, 0x97, 0xA5, 0x05, 0x32, 0x37, 0xE6, 0x97, - 0xA5, 0x05, 0x32, 0x38, 0xE6, 0x97, 0xA5, 0x05, - 0x32, 0x39, 0xE6, 0x97, 0xA5, 0x05, 0x33, 0x30, - 0xE6, 0x97, 0xA5, 0x05, 0x33, 0x31, 0xE6, 0x97, - 0xA5, 0x03, 0x67, 0x61, 0x6C, 0x03, 0xEA, 0x9D, + 0x82, 0xB9, 0x49, 0xE3, 0x82, 0xB3, 0xE3, 0x83, + 0xAB, 0xE3, 0x83, 0x8A, 0x49, 0xE3, 0x82, 0xBB, + 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, + 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, + 0x49, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0xE3, + 0x82, 0xB7, 0x49, 0xE3, 0x83, 0x88, 0xE3, 0x82, + 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x8E, + 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x49, 0xE3, // Bytes 2a80 - 2abf - 0xAF, 0x03, 0xE8, 0xB1, 0x88, 0x03, 0xE6, 0x9B, - 0xB4, 0x03, 0xE8, 0xB3, 0x88, 0x03, 0xE6, 0xBB, - 0x91, 0x03, 0xE4, 0xB8, 0xB2, 0x03, 0xE5, 0x8F, - 0xA5, 0x03, 0xE5, 0xA5, 0x91, 0x03, 0xE5, 0x96, - 0x87, 0x03, 0xE5, 0xA5, 0x88, 0x03, 0xE6, 0x87, - 0xB6, 0x03, 0xE7, 0x99, 0xA9, 0x03, 0xE7, 0xBE, - 0x85, 0x03, 0xE8, 0x98, 0xBF, 0x03, 0xE8, 0x9E, - 0xBA, 0x03, 0xE8, 0xA3, 0xB8, 0x03, 0xE9, 0x82, + 0x83, 0x8F, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0x84, + 0x49, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0xE3, + 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x92, 0xE3, 0x82, + 0x9A, 0xE3, 0x82, 0xB3, 0x49, 0xE3, 0x83, 0x95, + 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3, + 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xBD, + 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x83, 0xAB, 0xE3, + 0x83, 0x84, 0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, // Bytes 2ac0 - 2aff - 0x8F, 0x03, 0xE6, 0xA8, 0x82, 0x03, 0xE6, 0xB4, - 0x9B, 0x03, 0xE7, 0x83, 0x99, 0x03, 0xE7, 0x8F, - 0x9E, 0x03, 0xE8, 0x90, 0xBD, 0x03, 0xE9, 0x85, - 0xAA, 0x03, 0xE9, 0xA7, 0xB1, 0x03, 0xE4, 0xBA, - 0x82, 0x03, 0xE5, 0x8D, 0xB5, 0x03, 0xE6, 0xAC, - 0x84, 0x03, 0xE7, 0x88, 0x9B, 0x03, 0xE8, 0x98, - 0xAD, 0x03, 0xE9, 0xB8, 0x9E, 0x03, 0xE5, 0xB5, - 0x90, 0x03, 0xE6, 0xBF, 0xAB, 0x03, 0xE8, 0x97, + 0xBC, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9B, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xB3, 0x49, 0xE3, + 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xAB, + 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0x83, 0xE3, + 0x83, 0x8F, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x83, + 0xAB, 0xE3, 0x82, 0xAF, 0x49, 0xE3, 0x83, 0xA4, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, 0xE3, + 0x83, 0xA6, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xB3, // Bytes 2b00 - 2b3f - 0x8D, 0x03, 0xE8, 0xA5, 0xA4, 0x03, 0xE6, 0x8B, - 0x89, 0x03, 0xE8, 0x87, 0x98, 0x03, 0xE8, 0xA0, - 0x9F, 0x03, 0xE5, 0xBB, 0x8A, 0x03, 0xE6, 0x9C, - 0x97, 0x03, 0xE6, 0xB5, 0xAA, 0x03, 0xE7, 0x8B, - 0xBC, 0x03, 0xE9, 0x83, 0x8E, 0x03, 0xE4, 0xBE, - 0x86, 0x03, 0xE5, 0x86, 0xB7, 0x03, 0xE5, 0x8B, - 0x9E, 0x03, 0xE6, 0x93, 0x84, 0x03, 0xE6, 0xAB, - 0x93, 0x03, 0xE7, 0x88, 0x90, 0x03, 0xE7, 0x9B, + 0x49, 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, 0xE3, + 0x83, 0x88, 0x4C, 0xE1, 0x84, 0x8C, 0xE1, 0x85, + 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4, 0x4C, + 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, + 0xB2, 0xE2, 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, + 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, + 0xAB, 0x4C, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, + 0xE3, 0x83, 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, // Bytes 2b40 - 2b7f - 0xA7, 0x03, 0xE8, 0x98, 0x86, 0x03, 0xE8, 0x99, - 0x9C, 0x03, 0xE8, 0xB7, 0xAF, 0x03, 0xE9, 0x9C, - 0xB2, 0x03, 0xE9, 0xAD, 0xAF, 0x03, 0xE9, 0xB7, - 0xBA, 0x03, 0xE7, 0xA2, 0x8C, 0x03, 0xE7, 0xA5, - 0xBF, 0x03, 0xE7, 0xB6, 0xA0, 0x03, 0xE8, 0x8F, - 0x89, 0x03, 0xE9, 0x8C, 0x84, 0x03, 0xE8, 0xAB, - 0x96, 0x03, 0xE5, 0xA3, 0x9F, 0x03, 0xE5, 0xBC, - 0x84, 0x03, 0xE7, 0xB1, 0xA0, 0x03, 0xE8, 0x81, + 0x82, 0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, + 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, + 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, + 0xAB, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, + 0x83, 0x88, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, + 0xAD, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, // Bytes 2b80 - 2bbf - 0xBE, 0x03, 0xE7, 0x89, 0xA2, 0x03, 0xE7, 0xA3, - 0x8A, 0x03, 0xE8, 0xB3, 0x82, 0x03, 0xE9, 0x9B, - 0xB7, 0x03, 0xE5, 0xA3, 0x98, 0x03, 0xE5, 0xB1, - 0xA2, 0x03, 0xE6, 0xA8, 0x93, 0x03, 0xE6, 0xB7, - 0x9A, 0x03, 0xE6, 0xBC, 0x8F, 0x03, 0xE7, 0xB4, - 0xAF, 0x03, 0xE7, 0xB8, 0xB7, 0x03, 0xE9, 0x99, - 0x8B, 0x03, 0xE5, 0x8B, 0x92, 0x03, 0xE8, 0x82, - 0x8B, 0x03, 0xE5, 0x87, 0x9C, 0x03, 0xE5, 0x87, + 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0x8B, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, + 0xE3, 0x83, 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, + 0xBC, 0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, + 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, + 0x82, 0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, // Bytes 2bc0 - 2bff - 0x8C, 0x03, 0xE7, 0xA8, 0x9C, 0x03, 0xE7, 0xB6, - 0xBE, 0x03, 0xE8, 0x8F, 0xB1, 0x03, 0xE9, 0x99, - 0xB5, 0x03, 0xE8, 0xAE, 0x80, 0x03, 0xE6, 0x8B, - 0x8F, 0x03, 0xE8, 0xAB, 0xBE, 0x03, 0xE4, 0xB8, - 0xB9, 0x03, 0xE5, 0xAF, 0xA7, 0x03, 0xE6, 0x80, - 0x92, 0x03, 0xE7, 0x8E, 0x87, 0x03, 0xE7, 0x95, - 0xB0, 0x03, 0xE5, 0x8C, 0x97, 0x03, 0xE7, 0xA3, - 0xBB, 0x03, 0xE4, 0xBE, 0xBF, 0x03, 0xE5, 0xBE, + 0x4C, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, + 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, + 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0x84, 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, + 0x9A, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, + 0xE3, 0x83, 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, + 0xBC, 0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, // Bytes 2c00 - 2c3f - 0xA9, 0x03, 0xE4, 0xB8, 0x8D, 0x03, 0xE6, 0xB3, - 0x8C, 0x03, 0xE6, 0x95, 0xB8, 0x03, 0xE7, 0xB4, - 0xA2, 0x03, 0xE5, 0x8F, 0x83, 0x03, 0xE5, 0xA1, - 0x9E, 0x03, 0xE7, 0x9C, 0x81, 0x03, 0xE8, 0x91, - 0x89, 0x03, 0xE8, 0xAA, 0xAA, 0x03, 0xE6, 0xAE, - 0xBA, 0x03, 0xE6, 0xB2, 0x88, 0x03, 0xE6, 0x8B, - 0xBE, 0x03, 0xE8, 0x8B, 0xA5, 0x03, 0xE6, 0x8E, - 0xA0, 0x03, 0xE7, 0x95, 0xA5, 0x03, 0xE4, 0xBA, + 0xBF, 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, + 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, + 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, + 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, + 0x4C, 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, + 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, + 0x9F, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, // Bytes 2c40 - 2c7f - 0xAE, 0x03, 0xE5, 0x85, 0xA9, 0x03, 0xE5, 0x87, - 0x89, 0x03, 0xE6, 0xA2, 0x81, 0x03, 0xE7, 0xB3, - 0xA7, 0x03, 0xE8, 0x89, 0xAF, 0x03, 0xE8, 0xAB, - 0x92, 0x03, 0xE9, 0x87, 0x8F, 0x03, 0xE5, 0x8B, - 0xB5, 0x03, 0xE5, 0x91, 0x82, 0x03, 0xE5, 0xBB, - 0xAC, 0x03, 0xE6, 0x97, 0x85, 0x03, 0xE6, 0xBF, - 0xBE, 0x03, 0xE7, 0xA4, 0xAA, 0x03, 0xE9, 0x96, - 0xAD, 0x03, 0xE9, 0xA9, 0xAA, 0x03, 0xE9, 0xBA, + 0x83, 0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, + 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, + 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, + 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, + 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, + 0xBC, 0x4C, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, + 0xE4, 0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, + 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, // Bytes 2c80 - 2cbf - 0x97, 0x03, 0xE9, 0xBB, 0x8E, 0x03, 0xE6, 0x9B, - 0x86, 0x03, 0xE6, 0xAD, 0xB7, 0x03, 0xE8, 0xBD, - 0xA2, 0x03, 0xE5, 0xB9, 0xB4, 0x03, 0xE6, 0x86, - 0x90, 0x03, 0xE6, 0x88, 0x80, 0x03, 0xE6, 0x92, - 0x9A, 0x03, 0xE6, 0xBC, 0xA3, 0x03, 0xE7, 0x85, - 0x89, 0x03, 0xE7, 0x92, 0x89, 0x03, 0xE7, 0xA7, - 0x8A, 0x03, 0xE7, 0xB7, 0xB4, 0x03, 0xE8, 0x81, - 0xAF, 0x03, 0xE8, 0xBC, 0xA6, 0x03, 0xE8, 0x93, + 0x92, 0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, + 0xD9, 0x84, 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, + 0xA7, 0xD9, 0x84, 0xD9, 0x87, 0x4F, 0xE1, 0x84, + 0x8E, 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, + 0x84, 0x80, 0xE1, 0x85, 0xA9, 0x4F, 0xE3, 0x82, + 0xA2, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, + 0x83, 0xBC, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, + 0xA2, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, // Bytes 2cc0 - 2cff - 0xAE, 0x03, 0xE9, 0x80, 0xA3, 0x03, 0xE9, 0x8D, - 0x8A, 0x03, 0xE5, 0x88, 0x97, 0x03, 0xE5, 0x8A, - 0xA3, 0x03, 0xE5, 0x92, 0xBD, 0x03, 0xE7, 0x83, - 0x88, 0x03, 0xE8, 0xA3, 0x82, 0x03, 0xE5, 0xBB, - 0x89, 0x03, 0xE5, 0xBF, 0xB5, 0x03, 0xE6, 0x8D, - 0xBB, 0x03, 0xE6, 0xAE, 0xAE, 0x03, 0xE7, 0xB0, - 0xBE, 0x03, 0xE7, 0x8D, 0xB5, 0x03, 0xE4, 0xBB, - 0xA4, 0x03, 0xE5, 0x9B, 0xB9, 0x03, 0xE5, 0xB6, + 0x82, 0x9A, 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, + 0xAD, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, + 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, + 0xB5, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, + 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, + 0x8F, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0xAC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, + 0x98, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, // Bytes 2d00 - 2d3f - 0xBA, 0x03, 0xE6, 0x80, 0x9C, 0x03, 0xE7, 0x8E, - 0xB2, 0x03, 0xE7, 0x91, 0xA9, 0x03, 0xE7, 0xBE, - 0x9A, 0x03, 0xE8, 0x81, 0x86, 0x03, 0xE9, 0x88, - 0xB4, 0x03, 0xE9, 0x9B, 0xB6, 0x03, 0xE9, 0x9D, - 0x88, 0x03, 0xE9, 0xA0, 0x98, 0x03, 0xE4, 0xBE, - 0x8B, 0x03, 0xE7, 0xA6, 0xAE, 0x03, 0xE9, 0x86, - 0xB4, 0x03, 0xE9, 0x9A, 0xB8, 0x03, 0xE6, 0x83, - 0xA1, 0x03, 0xE4, 0xBA, 0x86, 0x03, 0xE5, 0x83, + 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, + 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, + 0x9E, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, + 0x83, 0xA7, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, + 0xA1, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, + 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, + 0xAB, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, // Bytes 2d40 - 2d7f - 0x9A, 0x03, 0xE5, 0xAF, 0xAE, 0x03, 0xE5, 0xB0, - 0xBF, 0x03, 0xE6, 0x96, 0x99, 0x03, 0xE7, 0x87, - 0x8E, 0x03, 0xE7, 0x99, 0x82, 0x03, 0xE8, 0x93, - 0xBC, 0x03, 0xE9, 0x81, 0xBC, 0x03, 0xE6, 0x9A, - 0x88, 0x03, 0xE9, 0x98, 0xAE, 0x03, 0xE5, 0x8A, - 0x89, 0x03, 0xE6, 0x9D, 0xBB, 0x03, 0xE6, 0x9F, - 0xB3, 0x03, 0xE6, 0xB5, 0x81, 0x03, 0xE6, 0xBA, - 0x9C, 0x03, 0xE7, 0x90, 0x89, 0x03, 0xE7, 0x95, + 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, + 0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, + 0xE1, 0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, + 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xAB, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, + 0x83, 0xBC, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, + 0xAD, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, + 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, // Bytes 2d80 - 2dbf - 0x99, 0x03, 0xE7, 0xA1, 0xAB, 0x03, 0xE7, 0xB4, - 0x90, 0x03, 0xE9, 0xA1, 0x9E, 0x03, 0xE6, 0x88, - 0xAE, 0x03, 0xE9, 0x99, 0xB8, 0x03, 0xE5, 0x80, - 0xAB, 0x03, 0xE5, 0xB4, 0x99, 0x03, 0xE6, 0xB7, - 0xAA, 0x03, 0xE8, 0xBC, 0xAA, 0x03, 0xE5, 0xBE, - 0x8B, 0x03, 0xE6, 0x85, 0x84, 0x03, 0xE6, 0xA0, - 0x97, 0x03, 0xE9, 0x9A, 0x86, 0x03, 0xE5, 0x88, - 0xA9, 0x03, 0xE5, 0x90, 0x8F, 0x03, 0xE5, 0xB1, + 0xAD, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, + 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, + 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, + 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, + 0xE3, 0x83, 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, + 0x83, 0xAB, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, + 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, + 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, // Bytes 2dc0 - 2dff - 0xA5, 0x03, 0xE6, 0x98, 0x93, 0x03, 0xE6, 0x9D, - 0x8E, 0x03, 0xE6, 0xA2, 0xA8, 0x03, 0xE6, 0xB3, - 0xA5, 0x03, 0xE7, 0x90, 0x86, 0x03, 0xE7, 0x97, - 0xA2, 0x03, 0xE7, 0xBD, 0xB9, 0x03, 0xE8, 0xA3, - 0x8F, 0x03, 0xE8, 0xA3, 0xA1, 0x03, 0xE9, 0x9B, - 0xA2, 0x03, 0xE5, 0x8C, 0xBF, 0x03, 0xE6, 0xBA, - 0xBA, 0x03, 0xE5, 0x90, 0x9D, 0x03, 0xE7, 0x87, - 0x90, 0x03, 0xE7, 0x92, 0x98, 0x03, 0xE8, 0x97, + 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0x88, 0x52, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, + 0xE3, 0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, + 0x88, 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, + 0xB7, 0xE3, 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, + 0xE3, 0x83, 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, + 0x8F, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, // Bytes 2e00 - 2e3f - 0xBA, 0x03, 0xE9, 0x9A, 0xA3, 0x03, 0xE9, 0xB1, - 0x97, 0x03, 0xE9, 0xBA, 0x9F, 0x03, 0xE6, 0x9E, - 0x97, 0x03, 0xE6, 0xB7, 0x8B, 0x03, 0xE8, 0x87, - 0xA8, 0x03, 0xE7, 0xAC, 0xA0, 0x03, 0xE7, 0xB2, - 0x92, 0x03, 0xE7, 0x8B, 0x80, 0x03, 0xE7, 0x82, - 0x99, 0x03, 0xE8, 0xAD, 0x98, 0x03, 0xE4, 0xBB, - 0x80, 0x03, 0xE8, 0x8C, 0xB6, 0x03, 0xE5, 0x88, - 0xBA, 0x03, 0xE5, 0x88, 0x87, 0x03, 0xE5, 0xBA, + 0x83, 0xAB, 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, + 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, + 0xD9, 0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, + 0x84, 0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, + 0xD9, 0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, + 0x88, 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x86, + 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x86, 0xE0, // Bytes 2e40 - 2e7f - 0xA6, 0x03, 0xE6, 0x8B, 0x93, 0x03, 0xE7, 0xB3, - 0x96, 0x03, 0xE5, 0xAE, 0x85, 0x03, 0xE6, 0xB4, - 0x9E, 0x03, 0xE6, 0x9A, 0xB4, 0x03, 0xE8, 0xBC, - 0xBB, 0x03, 0xE9, 0x99, 0x8D, 0x03, 0xE5, 0xBB, - 0x93, 0x03, 0xE5, 0x85, 0x80, 0x03, 0xE5, 0x97, - 0x80, 0x03, 0xE5, 0xA1, 0x9A, 0x03, 0xE6, 0x99, - 0xB4, 0x03, 0xE5, 0x87, 0x9E, 0x03, 0xE7, 0x8C, - 0xAA, 0x03, 0xE7, 0x9B, 0x8A, 0x03, 0xE7, 0xA4, + 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x03, 0x3C, 0xCC, + 0xB8, 0x01, 0x03, 0x3D, 0xCC, 0xB8, 0x01, 0x03, + 0x3E, 0xCC, 0xB8, 0x01, 0x03, 0x41, 0xCC, 0x80, + 0xE6, 0x03, 0x41, 0xCC, 0x81, 0xE6, 0x03, 0x41, + 0xCC, 0x83, 0xE6, 0x03, 0x41, 0xCC, 0x84, 0xE6, + 0x03, 0x41, 0xCC, 0x89, 0xE6, 0x03, 0x41, 0xCC, + 0x8C, 0xE6, 0x03, 0x41, 0xCC, 0x8F, 0xE6, 0x03, + 0x41, 0xCC, 0x91, 0xE6, 0x03, 0x41, 0xCC, 0xA5, // Bytes 2e80 - 2ebf - 0xBC, 0x03, 0xE7, 0xA5, 0x9E, 0x03, 0xE7, 0xA5, - 0xA5, 0x03, 0xE7, 0xA6, 0x8F, 0x03, 0xE9, 0x9D, - 0x96, 0x03, 0xE7, 0xB2, 0xBE, 0x03, 0xE8, 0x98, - 0x92, 0x03, 0xE8, 0xAB, 0xB8, 0x03, 0xE9, 0x80, - 0xB8, 0x03, 0xE9, 0x83, 0xBD, 0x03, 0xE9, 0xA3, - 0xAF, 0x03, 0xE9, 0xA3, 0xBC, 0x03, 0xE9, 0xA4, - 0xA8, 0x03, 0xE9, 0xB6, 0xB4, 0x03, 0xE4, 0xBE, - 0xAE, 0x03, 0xE5, 0x83, 0xA7, 0x03, 0xE5, 0x85, + 0xDC, 0x03, 0x41, 0xCC, 0xA8, 0xCA, 0x03, 0x42, + 0xCC, 0x87, 0xE6, 0x03, 0x42, 0xCC, 0xA3, 0xDC, + 0x03, 0x42, 0xCC, 0xB1, 0xDC, 0x03, 0x43, 0xCC, + 0x81, 0xE6, 0x03, 0x43, 0xCC, 0x82, 0xE6, 0x03, + 0x43, 0xCC, 0x87, 0xE6, 0x03, 0x43, 0xCC, 0x8C, + 0xE6, 0x03, 0x44, 0xCC, 0x87, 0xE6, 0x03, 0x44, + 0xCC, 0x8C, 0xE6, 0x03, 0x44, 0xCC, 0xA3, 0xDC, + 0x03, 0x44, 0xCC, 0xA7, 0xCA, 0x03, 0x44, 0xCC, // Bytes 2ec0 - 2eff - 0x8D, 0x03, 0xE5, 0x8B, 0x89, 0x03, 0xE5, 0x8B, - 0xA4, 0x03, 0xE5, 0x8D, 0x91, 0x03, 0xE5, 0x96, - 0x9D, 0x03, 0xE5, 0x98, 0x86, 0x03, 0xE5, 0x99, - 0xA8, 0x03, 0xE5, 0xA1, 0x80, 0x03, 0xE5, 0xA2, - 0xA8, 0x03, 0xE5, 0xB1, 0xA4, 0x03, 0xE6, 0x82, - 0x94, 0x03, 0xE6, 0x85, 0xA8, 0x03, 0xE6, 0x86, - 0x8E, 0x03, 0xE6, 0x87, 0xB2, 0x03, 0xE6, 0x95, - 0x8F, 0x03, 0xE6, 0x97, 0xA2, 0x03, 0xE6, 0x9A, + 0xAD, 0xDC, 0x03, 0x44, 0xCC, 0xB1, 0xDC, 0x03, + 0x45, 0xCC, 0x80, 0xE6, 0x03, 0x45, 0xCC, 0x81, + 0xE6, 0x03, 0x45, 0xCC, 0x83, 0xE6, 0x03, 0x45, + 0xCC, 0x86, 0xE6, 0x03, 0x45, 0xCC, 0x87, 0xE6, + 0x03, 0x45, 0xCC, 0x88, 0xE6, 0x03, 0x45, 0xCC, + 0x89, 0xE6, 0x03, 0x45, 0xCC, 0x8C, 0xE6, 0x03, + 0x45, 0xCC, 0x8F, 0xE6, 0x03, 0x45, 0xCC, 0x91, + 0xE6, 0x03, 0x45, 0xCC, 0xA8, 0xCA, 0x03, 0x45, // Bytes 2f00 - 2f3f - 0x91, 0x03, 0xE6, 0xA2, 0x85, 0x03, 0xE6, 0xB5, - 0xB7, 0x03, 0xE6, 0xB8, 0x9A, 0x03, 0xE6, 0xBC, - 0xA2, 0x03, 0xE7, 0x85, 0xAE, 0x03, 0xE7, 0x88, - 0xAB, 0x03, 0xE7, 0x90, 0xA2, 0x03, 0xE7, 0xA2, - 0x91, 0x03, 0xE7, 0xA5, 0x89, 0x03, 0xE7, 0xA5, - 0x88, 0x03, 0xE7, 0xA5, 0x90, 0x03, 0xE7, 0xA5, - 0x96, 0x03, 0xE7, 0xA6, 0x8D, 0x03, 0xE7, 0xA6, - 0x8E, 0x03, 0xE7, 0xA9, 0x80, 0x03, 0xE7, 0xAA, + 0xCC, 0xAD, 0xDC, 0x03, 0x45, 0xCC, 0xB0, 0xDC, + 0x03, 0x46, 0xCC, 0x87, 0xE6, 0x03, 0x47, 0xCC, + 0x81, 0xE6, 0x03, 0x47, 0xCC, 0x82, 0xE6, 0x03, + 0x47, 0xCC, 0x84, 0xE6, 0x03, 0x47, 0xCC, 0x86, + 0xE6, 0x03, 0x47, 0xCC, 0x87, 0xE6, 0x03, 0x47, + 0xCC, 0x8C, 0xE6, 0x03, 0x47, 0xCC, 0xA7, 0xCA, + 0x03, 0x48, 0xCC, 0x82, 0xE6, 0x03, 0x48, 0xCC, + 0x87, 0xE6, 0x03, 0x48, 0xCC, 0x88, 0xE6, 0x03, // Bytes 2f40 - 2f7f - 0x81, 0x03, 0xE7, 0xAF, 0x80, 0x03, 0xE7, 0xB8, - 0x89, 0x03, 0xE7, 0xB9, 0x81, 0x03, 0xE7, 0xBD, - 0xB2, 0x03, 0xE8, 0x80, 0x85, 0x03, 0xE8, 0x87, - 0xAD, 0x03, 0xE8, 0x89, 0xB9, 0x03, 0xE8, 0x91, - 0x97, 0x03, 0xE8, 0xA4, 0x90, 0x03, 0xE8, 0xA6, - 0x96, 0x03, 0xE8, 0xAC, 0x81, 0x03, 0xE8, 0xAC, - 0xB9, 0x03, 0xE8, 0xB3, 0x93, 0x03, 0xE8, 0xB4, - 0x88, 0x03, 0xE8, 0xBE, 0xB6, 0x03, 0xE9, 0x9B, + 0x48, 0xCC, 0x8C, 0xE6, 0x03, 0x48, 0xCC, 0xA3, + 0xDC, 0x03, 0x48, 0xCC, 0xA7, 0xCA, 0x03, 0x48, + 0xCC, 0xAE, 0xDC, 0x03, 0x49, 0xCC, 0x80, 0xE6, + 0x03, 0x49, 0xCC, 0x81, 0xE6, 0x03, 0x49, 0xCC, + 0x82, 0xE6, 0x03, 0x49, 0xCC, 0x83, 0xE6, 0x03, + 0x49, 0xCC, 0x84, 0xE6, 0x03, 0x49, 0xCC, 0x86, + 0xE6, 0x03, 0x49, 0xCC, 0x87, 0xE6, 0x03, 0x49, + 0xCC, 0x89, 0xE6, 0x03, 0x49, 0xCC, 0x8C, 0xE6, // Bytes 2f80 - 2fbf - 0xA3, 0x03, 0xE9, 0x9F, 0xBF, 0x03, 0xE9, 0xA0, - 0xBB, 0x03, 0xE6, 0x81, 0xB5, 0x04, 0xF0, 0xA4, - 0x8B, 0xAE, 0x03, 0xE8, 0x88, 0x98, 0x03, 0xE4, - 0xB8, 0xA6, 0x03, 0xE5, 0x86, 0xB5, 0x03, 0xE5, - 0x85, 0xA8, 0x03, 0xE4, 0xBE, 0x80, 0x03, 0xE5, - 0x85, 0x85, 0x03, 0xE5, 0x86, 0x80, 0x03, 0xE5, - 0x8B, 0x87, 0x03, 0xE5, 0x8B, 0xBA, 0x03, 0xE5, - 0x95, 0x95, 0x03, 0xE5, 0x96, 0x99, 0x03, 0xE5, + 0x03, 0x49, 0xCC, 0x8F, 0xE6, 0x03, 0x49, 0xCC, + 0x91, 0xE6, 0x03, 0x49, 0xCC, 0xA3, 0xDC, 0x03, + 0x49, 0xCC, 0xA8, 0xCA, 0x03, 0x49, 0xCC, 0xB0, + 0xDC, 0x03, 0x4A, 0xCC, 0x82, 0xE6, 0x03, 0x4B, + 0xCC, 0x81, 0xE6, 0x03, 0x4B, 0xCC, 0x8C, 0xE6, + 0x03, 0x4B, 0xCC, 0xA3, 0xDC, 0x03, 0x4B, 0xCC, + 0xA7, 0xCA, 0x03, 0x4B, 0xCC, 0xB1, 0xDC, 0x03, + 0x4C, 0xCC, 0x81, 0xE6, 0x03, 0x4C, 0xCC, 0x8C, // Bytes 2fc0 - 2fff - 0x97, 0xA2, 0x03, 0xE5, 0xA2, 0xB3, 0x03, 0xE5, - 0xA5, 0x84, 0x03, 0xE5, 0xA5, 0x94, 0x03, 0xE5, - 0xA9, 0xA2, 0x03, 0xE5, 0xAC, 0xA8, 0x03, 0xE5, - 0xBB, 0x92, 0x03, 0xE5, 0xBB, 0x99, 0x03, 0xE5, - 0xBD, 0xA9, 0x03, 0xE5, 0xBE, 0xAD, 0x03, 0xE6, - 0x83, 0x98, 0x03, 0xE6, 0x85, 0x8E, 0x03, 0xE6, - 0x84, 0x88, 0x03, 0xE6, 0x85, 0xA0, 0x03, 0xE6, - 0x88, 0xB4, 0x03, 0xE6, 0x8F, 0x84, 0x03, 0xE6, + 0xE6, 0x03, 0x4C, 0xCC, 0xA7, 0xCA, 0x03, 0x4C, + 0xCC, 0xAD, 0xDC, 0x03, 0x4C, 0xCC, 0xB1, 0xDC, + 0x03, 0x4D, 0xCC, 0x81, 0xE6, 0x03, 0x4D, 0xCC, + 0x87, 0xE6, 0x03, 0x4D, 0xCC, 0xA3, 0xDC, 0x03, + 0x4E, 0xCC, 0x80, 0xE6, 0x03, 0x4E, 0xCC, 0x81, + 0xE6, 0x03, 0x4E, 0xCC, 0x83, 0xE6, 0x03, 0x4E, + 0xCC, 0x87, 0xE6, 0x03, 0x4E, 0xCC, 0x8C, 0xE6, + 0x03, 0x4E, 0xCC, 0xA3, 0xDC, 0x03, 0x4E, 0xCC, // Bytes 3000 - 303f - 0x90, 0x9C, 0x03, 0xE6, 0x91, 0x92, 0x03, 0xE6, - 0x95, 0x96, 0x03, 0xE6, 0x9C, 0x9B, 0x03, 0xE6, - 0x9D, 0x96, 0x03, 0xE6, 0xBB, 0x9B, 0x03, 0xE6, - 0xBB, 0x8B, 0x03, 0xE7, 0x80, 0x9E, 0x03, 0xE7, - 0x9E, 0xA7, 0x03, 0xE7, 0x88, 0xB5, 0x03, 0xE7, - 0x8A, 0xAF, 0x03, 0xE7, 0x91, 0xB1, 0x03, 0xE7, - 0x94, 0x86, 0x03, 0xE7, 0x94, 0xBB, 0x03, 0xE7, - 0x98, 0x9D, 0x03, 0xE7, 0x98, 0x9F, 0x03, 0xE7, + 0xA7, 0xCA, 0x03, 0x4E, 0xCC, 0xAD, 0xDC, 0x03, + 0x4E, 0xCC, 0xB1, 0xDC, 0x03, 0x4F, 0xCC, 0x80, + 0xE6, 0x03, 0x4F, 0xCC, 0x81, 0xE6, 0x03, 0x4F, + 0xCC, 0x86, 0xE6, 0x03, 0x4F, 0xCC, 0x89, 0xE6, + 0x03, 0x4F, 0xCC, 0x8B, 0xE6, 0x03, 0x4F, 0xCC, + 0x8C, 0xE6, 0x03, 0x4F, 0xCC, 0x8F, 0xE6, 0x03, + 0x4F, 0xCC, 0x91, 0xE6, 0x03, 0x50, 0xCC, 0x81, + 0xE6, 0x03, 0x50, 0xCC, 0x87, 0xE6, 0x03, 0x52, // Bytes 3040 - 307f - 0x9B, 0x9B, 0x03, 0xE7, 0x9B, 0xB4, 0x03, 0xE7, - 0x9D, 0x8A, 0x03, 0xE7, 0x9D, 0x80, 0x03, 0xE7, - 0xA3, 0x8C, 0x03, 0xE7, 0xAA, 0xB1, 0x03, 0xE7, - 0xB1, 0xBB, 0x03, 0xE7, 0xB5, 0x9B, 0x03, 0xE7, - 0xBC, 0xBE, 0x03, 0xE8, 0x8D, 0x92, 0x03, 0xE8, - 0x8F, 0xAF, 0x03, 0xE8, 0x9D, 0xB9, 0x03, 0xE8, - 0xA5, 0x81, 0x03, 0xE8, 0xA6, 0x86, 0x03, 0xE8, - 0xAA, 0xBF, 0x03, 0xE8, 0xAB, 0x8B, 0x03, 0xE8, + 0xCC, 0x81, 0xE6, 0x03, 0x52, 0xCC, 0x87, 0xE6, + 0x03, 0x52, 0xCC, 0x8C, 0xE6, 0x03, 0x52, 0xCC, + 0x8F, 0xE6, 0x03, 0x52, 0xCC, 0x91, 0xE6, 0x03, + 0x52, 0xCC, 0xA7, 0xCA, 0x03, 0x52, 0xCC, 0xB1, + 0xDC, 0x03, 0x53, 0xCC, 0x82, 0xE6, 0x03, 0x53, + 0xCC, 0x87, 0xE6, 0x03, 0x53, 0xCC, 0xA6, 0xDC, + 0x03, 0x53, 0xCC, 0xA7, 0xCA, 0x03, 0x54, 0xCC, + 0x87, 0xE6, 0x03, 0x54, 0xCC, 0x8C, 0xE6, 0x03, // Bytes 3080 - 30bf - 0xAB, 0xAD, 0x03, 0xE8, 0xAE, 0x8A, 0x03, 0xE8, - 0xBC, 0xB8, 0x03, 0xE9, 0x81, 0xB2, 0x03, 0xE9, - 0x86, 0x99, 0x03, 0xE9, 0x89, 0xB6, 0x03, 0xE9, - 0x99, 0xBC, 0x03, 0xE9, 0x9F, 0x9B, 0x03, 0xE9, - 0xA0, 0x8B, 0x03, 0xE9, 0xAC, 0x92, 0x04, 0xF0, - 0xA2, 0xA1, 0x8A, 0x04, 0xF0, 0xA2, 0xA1, 0x84, - 0x04, 0xF0, 0xA3, 0x8F, 0x95, 0x03, 0xE3, 0xAE, - 0x9D, 0x03, 0xE4, 0x80, 0x98, 0x03, 0xE4, 0x80, + 0x54, 0xCC, 0xA3, 0xDC, 0x03, 0x54, 0xCC, 0xA6, + 0xDC, 0x03, 0x54, 0xCC, 0xA7, 0xCA, 0x03, 0x54, + 0xCC, 0xAD, 0xDC, 0x03, 0x54, 0xCC, 0xB1, 0xDC, + 0x03, 0x55, 0xCC, 0x80, 0xE6, 0x03, 0x55, 0xCC, + 0x81, 0xE6, 0x03, 0x55, 0xCC, 0x82, 0xE6, 0x03, + 0x55, 0xCC, 0x86, 0xE6, 0x03, 0x55, 0xCC, 0x89, + 0xE6, 0x03, 0x55, 0xCC, 0x8A, 0xE6, 0x03, 0x55, + 0xCC, 0x8B, 0xE6, 0x03, 0x55, 0xCC, 0x8C, 0xE6, // Bytes 30c0 - 30ff - 0xB9, 0x04, 0xF0, 0xA5, 0x89, 0x89, 0x04, 0xF0, - 0xA5, 0xB3, 0x90, 0x04, 0xF0, 0xA7, 0xBB, 0x93, - 0x03, 0xE9, 0xBD, 0x83, 0x03, 0xE9, 0xBE, 0x8E, - 0x02, 0x66, 0x66, 0x02, 0x66, 0x69, 0x02, 0x66, - 0x6C, 0x03, 0x66, 0x66, 0x69, 0x03, 0x66, 0x66, - 0x6C, 0x02, 0x73, 0x74, 0x04, 0xD5, 0xB4, 0xD5, - 0xB6, 0x04, 0xD5, 0xB4, 0xD5, 0xA5, 0x04, 0xD5, - 0xB4, 0xD5, 0xAB, 0x04, 0xD5, 0xBE, 0xD5, 0xB6, + 0x03, 0x55, 0xCC, 0x8F, 0xE6, 0x03, 0x55, 0xCC, + 0x91, 0xE6, 0x03, 0x55, 0xCC, 0xA3, 0xDC, 0x03, + 0x55, 0xCC, 0xA4, 0xDC, 0x03, 0x55, 0xCC, 0xA8, + 0xCA, 0x03, 0x55, 0xCC, 0xAD, 0xDC, 0x03, 0x55, + 0xCC, 0xB0, 0xDC, 0x03, 0x56, 0xCC, 0x83, 0xE6, + 0x03, 0x56, 0xCC, 0xA3, 0xDC, 0x03, 0x57, 0xCC, + 0x80, 0xE6, 0x03, 0x57, 0xCC, 0x81, 0xE6, 0x03, + 0x57, 0xCC, 0x82, 0xE6, 0x03, 0x57, 0xCC, 0x87, // Bytes 3100 - 313f - 0x04, 0xD5, 0xB4, 0xD5, 0xAD, 0x04, 0xD7, 0x99, - 0xD6, 0xB4, 0x04, 0xD7, 0xB2, 0xD6, 0xB7, 0x02, - 0xD7, 0xA2, 0x02, 0xD7, 0x94, 0x02, 0xD7, 0x9B, - 0x02, 0xD7, 0x9C, 0x02, 0xD7, 0x9D, 0x02, 0xD7, - 0xA8, 0x02, 0xD7, 0xAA, 0x04, 0xD7, 0xA9, 0xD7, - 0x81, 0x04, 0xD7, 0xA9, 0xD7, 0x82, 0x06, 0xD7, - 0xA9, 0xD6, 0xBC, 0xD7, 0x81, 0x06, 0xD7, 0xA9, - 0xD6, 0xBC, 0xD7, 0x82, 0x04, 0xD7, 0x90, 0xD6, + 0xE6, 0x03, 0x57, 0xCC, 0x88, 0xE6, 0x03, 0x57, + 0xCC, 0xA3, 0xDC, 0x03, 0x58, 0xCC, 0x87, 0xE6, + 0x03, 0x58, 0xCC, 0x88, 0xE6, 0x03, 0x59, 0xCC, + 0x80, 0xE6, 0x03, 0x59, 0xCC, 0x81, 0xE6, 0x03, + 0x59, 0xCC, 0x82, 0xE6, 0x03, 0x59, 0xCC, 0x83, + 0xE6, 0x03, 0x59, 0xCC, 0x84, 0xE6, 0x03, 0x59, + 0xCC, 0x87, 0xE6, 0x03, 0x59, 0xCC, 0x88, 0xE6, + 0x03, 0x59, 0xCC, 0x89, 0xE6, 0x03, 0x59, 0xCC, // Bytes 3140 - 317f - 0xB7, 0x04, 0xD7, 0x90, 0xD6, 0xB8, 0x04, 0xD7, - 0x90, 0xD6, 0xBC, 0x04, 0xD7, 0x91, 0xD6, 0xBC, - 0x04, 0xD7, 0x92, 0xD6, 0xBC, 0x04, 0xD7, 0x93, - 0xD6, 0xBC, 0x04, 0xD7, 0x94, 0xD6, 0xBC, 0x04, - 0xD7, 0x95, 0xD6, 0xBC, 0x04, 0xD7, 0x96, 0xD6, - 0xBC, 0x04, 0xD7, 0x98, 0xD6, 0xBC, 0x04, 0xD7, - 0x99, 0xD6, 0xBC, 0x04, 0xD7, 0x9A, 0xD6, 0xBC, - 0x04, 0xD7, 0x9B, 0xD6, 0xBC, 0x04, 0xD7, 0x9C, + 0xA3, 0xDC, 0x03, 0x5A, 0xCC, 0x81, 0xE6, 0x03, + 0x5A, 0xCC, 0x82, 0xE6, 0x03, 0x5A, 0xCC, 0x87, + 0xE6, 0x03, 0x5A, 0xCC, 0x8C, 0xE6, 0x03, 0x5A, + 0xCC, 0xA3, 0xDC, 0x03, 0x5A, 0xCC, 0xB1, 0xDC, + 0x03, 0x61, 0xCC, 0x80, 0xE6, 0x03, 0x61, 0xCC, + 0x81, 0xE6, 0x03, 0x61, 0xCC, 0x83, 0xE6, 0x03, + 0x61, 0xCC, 0x84, 0xE6, 0x03, 0x61, 0xCC, 0x89, + 0xE6, 0x03, 0x61, 0xCC, 0x8C, 0xE6, 0x03, 0x61, // Bytes 3180 - 31bf - 0xD6, 0xBC, 0x04, 0xD7, 0x9E, 0xD6, 0xBC, 0x04, - 0xD7, 0xA0, 0xD6, 0xBC, 0x04, 0xD7, 0xA1, 0xD6, - 0xBC, 0x04, 0xD7, 0xA3, 0xD6, 0xBC, 0x04, 0xD7, - 0xA4, 0xD6, 0xBC, 0x04, 0xD7, 0xA6, 0xD6, 0xBC, - 0x04, 0xD7, 0xA7, 0xD6, 0xBC, 0x04, 0xD7, 0xA8, - 0xD6, 0xBC, 0x04, 0xD7, 0xA9, 0xD6, 0xBC, 0x04, - 0xD7, 0xAA, 0xD6, 0xBC, 0x04, 0xD7, 0x95, 0xD6, - 0xB9, 0x04, 0xD7, 0x91, 0xD6, 0xBF, 0x04, 0xD7, + 0xCC, 0x8F, 0xE6, 0x03, 0x61, 0xCC, 0x91, 0xE6, + 0x03, 0x61, 0xCC, 0xA5, 0xDC, 0x03, 0x61, 0xCC, + 0xA8, 0xCA, 0x03, 0x62, 0xCC, 0x87, 0xE6, 0x03, + 0x62, 0xCC, 0xA3, 0xDC, 0x03, 0x62, 0xCC, 0xB1, + 0xDC, 0x03, 0x63, 0xCC, 0x81, 0xE6, 0x03, 0x63, + 0xCC, 0x82, 0xE6, 0x03, 0x63, 0xCC, 0x87, 0xE6, + 0x03, 0x63, 0xCC, 0x8C, 0xE6, 0x03, 0x64, 0xCC, + 0x87, 0xE6, 0x03, 0x64, 0xCC, 0x8C, 0xE6, 0x03, // Bytes 31c0 - 31ff - 0x9B, 0xD6, 0xBF, 0x04, 0xD7, 0xA4, 0xD6, 0xBF, - 0x04, 0xD7, 0x90, 0xD7, 0x9C, 0x02, 0xD9, 0xB1, - 0x02, 0xD9, 0xBB, 0x02, 0xD9, 0xBE, 0x02, 0xDA, - 0x80, 0x02, 0xD9, 0xBA, 0x02, 0xD9, 0xBF, 0x02, - 0xD9, 0xB9, 0x02, 0xDA, 0xA4, 0x02, 0xDA, 0xA6, - 0x02, 0xDA, 0x84, 0x02, 0xDA, 0x83, 0x02, 0xDA, - 0x86, 0x02, 0xDA, 0x87, 0x02, 0xDA, 0x8D, 0x02, - 0xDA, 0x8C, 0x02, 0xDA, 0x8E, 0x02, 0xDA, 0x88, + 0x64, 0xCC, 0xA3, 0xDC, 0x03, 0x64, 0xCC, 0xA7, + 0xCA, 0x03, 0x64, 0xCC, 0xAD, 0xDC, 0x03, 0x64, + 0xCC, 0xB1, 0xDC, 0x03, 0x65, 0xCC, 0x80, 0xE6, + 0x03, 0x65, 0xCC, 0x81, 0xE6, 0x03, 0x65, 0xCC, + 0x83, 0xE6, 0x03, 0x65, 0xCC, 0x86, 0xE6, 0x03, + 0x65, 0xCC, 0x87, 0xE6, 0x03, 0x65, 0xCC, 0x88, + 0xE6, 0x03, 0x65, 0xCC, 0x89, 0xE6, 0x03, 0x65, + 0xCC, 0x8C, 0xE6, 0x03, 0x65, 0xCC, 0x8F, 0xE6, // Bytes 3200 - 323f - 0x02, 0xDA, 0x98, 0x02, 0xDA, 0x91, 0x02, 0xDA, - 0xA9, 0x02, 0xDA, 0xAF, 0x02, 0xDA, 0xB3, 0x02, - 0xDA, 0xB1, 0x02, 0xDA, 0xBA, 0x02, 0xDA, 0xBB, - 0x02, 0xDB, 0x81, 0x02, 0xDA, 0xBE, 0x02, 0xDB, - 0x92, 0x02, 0xDA, 0xAD, 0x02, 0xDB, 0x87, 0x02, - 0xDB, 0x86, 0x02, 0xDB, 0x88, 0x02, 0xDB, 0x8B, - 0x02, 0xDB, 0x85, 0x02, 0xDB, 0x89, 0x02, 0xDB, - 0x90, 0x02, 0xD9, 0x89, 0x06, 0xD9, 0x8A, 0xD9, + 0x03, 0x65, 0xCC, 0x91, 0xE6, 0x03, 0x65, 0xCC, + 0xA8, 0xCA, 0x03, 0x65, 0xCC, 0xAD, 0xDC, 0x03, + 0x65, 0xCC, 0xB0, 0xDC, 0x03, 0x66, 0xCC, 0x87, + 0xE6, 0x03, 0x67, 0xCC, 0x81, 0xE6, 0x03, 0x67, + 0xCC, 0x82, 0xE6, 0x03, 0x67, 0xCC, 0x84, 0xE6, + 0x03, 0x67, 0xCC, 0x86, 0xE6, 0x03, 0x67, 0xCC, + 0x87, 0xE6, 0x03, 0x67, 0xCC, 0x8C, 0xE6, 0x03, + 0x67, 0xCC, 0xA7, 0xCA, 0x03, 0x68, 0xCC, 0x82, // Bytes 3240 - 327f - 0x94, 0xD8, 0xA7, 0x06, 0xD9, 0x8A, 0xD9, 0x94, - 0xDB, 0x95, 0x06, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, - 0x88, 0x06, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x87, - 0x06, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x06, - 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x88, 0x06, 0xD9, - 0x8A, 0xD9, 0x94, 0xDB, 0x90, 0x06, 0xD9, 0x8A, - 0xD9, 0x94, 0xD9, 0x89, 0x02, 0xDB, 0x8C, 0x06, - 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC, 0x06, 0xD9, + 0xE6, 0x03, 0x68, 0xCC, 0x87, 0xE6, 0x03, 0x68, + 0xCC, 0x88, 0xE6, 0x03, 0x68, 0xCC, 0x8C, 0xE6, + 0x03, 0x68, 0xCC, 0xA3, 0xDC, 0x03, 0x68, 0xCC, + 0xA7, 0xCA, 0x03, 0x68, 0xCC, 0xAE, 0xDC, 0x03, + 0x68, 0xCC, 0xB1, 0xDC, 0x03, 0x69, 0xCC, 0x80, + 0xE6, 0x03, 0x69, 0xCC, 0x81, 0xE6, 0x03, 0x69, + 0xCC, 0x82, 0xE6, 0x03, 0x69, 0xCC, 0x83, 0xE6, + 0x03, 0x69, 0xCC, 0x84, 0xE6, 0x03, 0x69, 0xCC, // Bytes 3280 - 32bf - 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x06, 0xD9, 0x8A, - 0xD9, 0x94, 0xD9, 0x85, 0x06, 0xD9, 0x8A, 0xD9, - 0x94, 0xD9, 0x8A, 0x04, 0xD8, 0xA8, 0xD8, 0xAC, - 0x04, 0xD8, 0xA8, 0xD8, 0xAD, 0x04, 0xD8, 0xA8, - 0xD8, 0xAE, 0x04, 0xD8, 0xA8, 0xD9, 0x85, 0x04, - 0xD8, 0xA8, 0xD9, 0x89, 0x04, 0xD8, 0xA8, 0xD9, - 0x8A, 0x04, 0xD8, 0xAA, 0xD8, 0xAC, 0x04, 0xD8, - 0xAA, 0xD8, 0xAD, 0x04, 0xD8, 0xAA, 0xD8, 0xAE, + 0x86, 0xE6, 0x03, 0x69, 0xCC, 0x89, 0xE6, 0x03, + 0x69, 0xCC, 0x8C, 0xE6, 0x03, 0x69, 0xCC, 0x8F, + 0xE6, 0x03, 0x69, 0xCC, 0x91, 0xE6, 0x03, 0x69, + 0xCC, 0xA3, 0xDC, 0x03, 0x69, 0xCC, 0xA8, 0xCA, + 0x03, 0x69, 0xCC, 0xB0, 0xDC, 0x03, 0x6A, 0xCC, + 0x82, 0xE6, 0x03, 0x6A, 0xCC, 0x8C, 0xE6, 0x03, + 0x6B, 0xCC, 0x81, 0xE6, 0x03, 0x6B, 0xCC, 0x8C, + 0xE6, 0x03, 0x6B, 0xCC, 0xA3, 0xDC, 0x03, 0x6B, // Bytes 32c0 - 32ff - 0x04, 0xD8, 0xAA, 0xD9, 0x85, 0x04, 0xD8, 0xAA, - 0xD9, 0x89, 0x04, 0xD8, 0xAA, 0xD9, 0x8A, 0x04, - 0xD8, 0xAB, 0xD8, 0xAC, 0x04, 0xD8, 0xAB, 0xD9, - 0x85, 0x04, 0xD8, 0xAB, 0xD9, 0x89, 0x04, 0xD8, - 0xAB, 0xD9, 0x8A, 0x04, 0xD8, 0xAC, 0xD8, 0xAD, - 0x04, 0xD8, 0xAC, 0xD9, 0x85, 0x04, 0xD8, 0xAD, - 0xD8, 0xAC, 0x04, 0xD8, 0xAD, 0xD9, 0x85, 0x04, - 0xD8, 0xAE, 0xD8, 0xAC, 0x04, 0xD8, 0xAE, 0xD8, + 0xCC, 0xA7, 0xCA, 0x03, 0x6B, 0xCC, 0xB1, 0xDC, + 0x03, 0x6C, 0xCC, 0x81, 0xE6, 0x03, 0x6C, 0xCC, + 0x8C, 0xE6, 0x03, 0x6C, 0xCC, 0xA7, 0xCA, 0x03, + 0x6C, 0xCC, 0xAD, 0xDC, 0x03, 0x6C, 0xCC, 0xB1, + 0xDC, 0x03, 0x6D, 0xCC, 0x81, 0xE6, 0x03, 0x6D, + 0xCC, 0x87, 0xE6, 0x03, 0x6D, 0xCC, 0xA3, 0xDC, + 0x03, 0x6E, 0xCC, 0x80, 0xE6, 0x03, 0x6E, 0xCC, + 0x81, 0xE6, 0x03, 0x6E, 0xCC, 0x83, 0xE6, 0x03, // Bytes 3300 - 333f - 0xAD, 0x04, 0xD8, 0xAE, 0xD9, 0x85, 0x04, 0xD8, - 0xB3, 0xD8, 0xAC, 0x04, 0xD8, 0xB3, 0xD8, 0xAD, - 0x04, 0xD8, 0xB3, 0xD8, 0xAE, 0x04, 0xD8, 0xB3, - 0xD9, 0x85, 0x04, 0xD8, 0xB5, 0xD8, 0xAD, 0x04, - 0xD8, 0xB5, 0xD9, 0x85, 0x04, 0xD8, 0xB6, 0xD8, - 0xAC, 0x04, 0xD8, 0xB6, 0xD8, 0xAD, 0x04, 0xD8, - 0xB6, 0xD8, 0xAE, 0x04, 0xD8, 0xB6, 0xD9, 0x85, - 0x04, 0xD8, 0xB7, 0xD8, 0xAD, 0x04, 0xD8, 0xB7, + 0x6E, 0xCC, 0x87, 0xE6, 0x03, 0x6E, 0xCC, 0x8C, + 0xE6, 0x03, 0x6E, 0xCC, 0xA3, 0xDC, 0x03, 0x6E, + 0xCC, 0xA7, 0xCA, 0x03, 0x6E, 0xCC, 0xAD, 0xDC, + 0x03, 0x6E, 0xCC, 0xB1, 0xDC, 0x03, 0x6F, 0xCC, + 0x80, 0xE6, 0x03, 0x6F, 0xCC, 0x81, 0xE6, 0x03, + 0x6F, 0xCC, 0x86, 0xE6, 0x03, 0x6F, 0xCC, 0x89, + 0xE6, 0x03, 0x6F, 0xCC, 0x8B, 0xE6, 0x03, 0x6F, + 0xCC, 0x8C, 0xE6, 0x03, 0x6F, 0xCC, 0x8F, 0xE6, // Bytes 3340 - 337f - 0xD9, 0x85, 0x04, 0xD8, 0xB8, 0xD9, 0x85, 0x04, - 0xD8, 0xB9, 0xD8, 0xAC, 0x04, 0xD8, 0xB9, 0xD9, - 0x85, 0x04, 0xD8, 0xBA, 0xD8, 0xAC, 0x04, 0xD8, - 0xBA, 0xD9, 0x85, 0x04, 0xD9, 0x81, 0xD8, 0xAC, - 0x04, 0xD9, 0x81, 0xD8, 0xAD, 0x04, 0xD9, 0x81, - 0xD8, 0xAE, 0x04, 0xD9, 0x81, 0xD9, 0x85, 0x04, - 0xD9, 0x81, 0xD9, 0x89, 0x04, 0xD9, 0x81, 0xD9, - 0x8A, 0x04, 0xD9, 0x82, 0xD8, 0xAD, 0x04, 0xD9, + 0x03, 0x6F, 0xCC, 0x91, 0xE6, 0x03, 0x70, 0xCC, + 0x81, 0xE6, 0x03, 0x70, 0xCC, 0x87, 0xE6, 0x03, + 0x72, 0xCC, 0x81, 0xE6, 0x03, 0x72, 0xCC, 0x87, + 0xE6, 0x03, 0x72, 0xCC, 0x8C, 0xE6, 0x03, 0x72, + 0xCC, 0x8F, 0xE6, 0x03, 0x72, 0xCC, 0x91, 0xE6, + 0x03, 0x72, 0xCC, 0xA7, 0xCA, 0x03, 0x72, 0xCC, + 0xB1, 0xDC, 0x03, 0x73, 0xCC, 0x82, 0xE6, 0x03, + 0x73, 0xCC, 0x87, 0xE6, 0x03, 0x73, 0xCC, 0xA6, // Bytes 3380 - 33bf - 0x82, 0xD9, 0x85, 0x04, 0xD9, 0x82, 0xD9, 0x89, - 0x04, 0xD9, 0x82, 0xD9, 0x8A, 0x04, 0xD9, 0x83, - 0xD8, 0xA7, 0x04, 0xD9, 0x83, 0xD8, 0xAC, 0x04, - 0xD9, 0x83, 0xD8, 0xAD, 0x04, 0xD9, 0x83, 0xD8, - 0xAE, 0x04, 0xD9, 0x83, 0xD9, 0x84, 0x04, 0xD9, - 0x83, 0xD9, 0x85, 0x04, 0xD9, 0x83, 0xD9, 0x89, - 0x04, 0xD9, 0x83, 0xD9, 0x8A, 0x04, 0xD9, 0x84, - 0xD8, 0xAC, 0x04, 0xD9, 0x84, 0xD8, 0xAD, 0x04, + 0xDC, 0x03, 0x73, 0xCC, 0xA7, 0xCA, 0x03, 0x74, + 0xCC, 0x87, 0xE6, 0x03, 0x74, 0xCC, 0x88, 0xE6, + 0x03, 0x74, 0xCC, 0x8C, 0xE6, 0x03, 0x74, 0xCC, + 0xA3, 0xDC, 0x03, 0x74, 0xCC, 0xA6, 0xDC, 0x03, + 0x74, 0xCC, 0xA7, 0xCA, 0x03, 0x74, 0xCC, 0xAD, + 0xDC, 0x03, 0x74, 0xCC, 0xB1, 0xDC, 0x03, 0x75, + 0xCC, 0x80, 0xE6, 0x03, 0x75, 0xCC, 0x81, 0xE6, + 0x03, 0x75, 0xCC, 0x82, 0xE6, 0x03, 0x75, 0xCC, // Bytes 33c0 - 33ff - 0xD9, 0x84, 0xD8, 0xAE, 0x04, 0xD9, 0x84, 0xD9, - 0x85, 0x04, 0xD9, 0x84, 0xD9, 0x89, 0x04, 0xD9, - 0x84, 0xD9, 0x8A, 0x04, 0xD9, 0x85, 0xD8, 0xAC, - 0x04, 0xD9, 0x85, 0xD8, 0xAD, 0x04, 0xD9, 0x85, - 0xD8, 0xAE, 0x04, 0xD9, 0x85, 0xD9, 0x85, 0x04, - 0xD9, 0x85, 0xD9, 0x89, 0x04, 0xD9, 0x85, 0xD9, - 0x8A, 0x04, 0xD9, 0x86, 0xD8, 0xAC, 0x04, 0xD9, - 0x86, 0xD8, 0xAD, 0x04, 0xD9, 0x86, 0xD8, 0xAE, + 0x86, 0xE6, 0x03, 0x75, 0xCC, 0x89, 0xE6, 0x03, + 0x75, 0xCC, 0x8A, 0xE6, 0x03, 0x75, 0xCC, 0x8B, + 0xE6, 0x03, 0x75, 0xCC, 0x8C, 0xE6, 0x03, 0x75, + 0xCC, 0x8F, 0xE6, 0x03, 0x75, 0xCC, 0x91, 0xE6, + 0x03, 0x75, 0xCC, 0xA3, 0xDC, 0x03, 0x75, 0xCC, + 0xA4, 0xDC, 0x03, 0x75, 0xCC, 0xA8, 0xCA, 0x03, + 0x75, 0xCC, 0xAD, 0xDC, 0x03, 0x75, 0xCC, 0xB0, + 0xDC, 0x03, 0x76, 0xCC, 0x83, 0xE6, 0x03, 0x76, // Bytes 3400 - 343f - 0x04, 0xD9, 0x86, 0xD9, 0x85, 0x04, 0xD9, 0x86, - 0xD9, 0x89, 0x04, 0xD9, 0x86, 0xD9, 0x8A, 0x04, - 0xD9, 0x87, 0xD8, 0xAC, 0x04, 0xD9, 0x87, 0xD9, - 0x85, 0x04, 0xD9, 0x87, 0xD9, 0x89, 0x04, 0xD9, - 0x87, 0xD9, 0x8A, 0x04, 0xD9, 0x8A, 0xD8, 0xAC, - 0x04, 0xD9, 0x8A, 0xD8, 0xAD, 0x04, 0xD9, 0x8A, - 0xD8, 0xAE, 0x04, 0xD9, 0x8A, 0xD9, 0x85, 0x04, - 0xD9, 0x8A, 0xD9, 0x89, 0x04, 0xD9, 0x8A, 0xD9, + 0xCC, 0xA3, 0xDC, 0x03, 0x77, 0xCC, 0x80, 0xE6, + 0x03, 0x77, 0xCC, 0x81, 0xE6, 0x03, 0x77, 0xCC, + 0x82, 0xE6, 0x03, 0x77, 0xCC, 0x87, 0xE6, 0x03, + 0x77, 0xCC, 0x88, 0xE6, 0x03, 0x77, 0xCC, 0x8A, + 0xE6, 0x03, 0x77, 0xCC, 0xA3, 0xDC, 0x03, 0x78, + 0xCC, 0x87, 0xE6, 0x03, 0x78, 0xCC, 0x88, 0xE6, + 0x03, 0x79, 0xCC, 0x80, 0xE6, 0x03, 0x79, 0xCC, + 0x81, 0xE6, 0x03, 0x79, 0xCC, 0x82, 0xE6, 0x03, // Bytes 3440 - 347f - 0x8A, 0x04, 0xD8, 0xB0, 0xD9, 0xB0, 0x04, 0xD8, - 0xB1, 0xD9, 0xB0, 0x04, 0xD9, 0x89, 0xD9, 0xB0, - 0x05, 0x20, 0xD9, 0x8C, 0xD9, 0x91, 0x05, 0x20, - 0xD9, 0x8D, 0xD9, 0x91, 0x05, 0x20, 0xD9, 0x8E, - 0xD9, 0x91, 0x05, 0x20, 0xD9, 0x8F, 0xD9, 0x91, - 0x05, 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x05, 0x20, - 0xD9, 0x91, 0xD9, 0xB0, 0x06, 0xD9, 0x8A, 0xD9, - 0x94, 0xD8, 0xB1, 0x06, 0xD9, 0x8A, 0xD9, 0x94, + 0x79, 0xCC, 0x83, 0xE6, 0x03, 0x79, 0xCC, 0x84, + 0xE6, 0x03, 0x79, 0xCC, 0x87, 0xE6, 0x03, 0x79, + 0xCC, 0x88, 0xE6, 0x03, 0x79, 0xCC, 0x89, 0xE6, + 0x03, 0x79, 0xCC, 0x8A, 0xE6, 0x03, 0x79, 0xCC, + 0xA3, 0xDC, 0x03, 0x7A, 0xCC, 0x81, 0xE6, 0x03, + 0x7A, 0xCC, 0x82, 0xE6, 0x03, 0x7A, 0xCC, 0x87, + 0xE6, 0x03, 0x7A, 0xCC, 0x8C, 0xE6, 0x03, 0x7A, + 0xCC, 0xA3, 0xDC, 0x03, 0x7A, 0xCC, 0xB1, 0xDC, // Bytes 3480 - 34bf - 0xD8, 0xB2, 0x06, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, - 0x86, 0x04, 0xD8, 0xA8, 0xD8, 0xB1, 0x04, 0xD8, - 0xA8, 0xD8, 0xB2, 0x04, 0xD8, 0xA8, 0xD9, 0x86, - 0x04, 0xD8, 0xAA, 0xD8, 0xB1, 0x04, 0xD8, 0xAA, - 0xD8, 0xB2, 0x04, 0xD8, 0xAA, 0xD9, 0x86, 0x04, - 0xD8, 0xAB, 0xD8, 0xB1, 0x04, 0xD8, 0xAB, 0xD8, - 0xB2, 0x04, 0xD8, 0xAB, 0xD9, 0x86, 0x04, 0xD9, - 0x85, 0xD8, 0xA7, 0x04, 0xD9, 0x86, 0xD8, 0xB1, + 0x04, 0xC2, 0xA8, 0xCC, 0x80, 0xE6, 0x04, 0xC2, + 0xA8, 0xCC, 0x81, 0xE6, 0x04, 0xC2, 0xA8, 0xCD, + 0x82, 0xE6, 0x04, 0xC3, 0x86, 0xCC, 0x81, 0xE6, + 0x04, 0xC3, 0x86, 0xCC, 0x84, 0xE6, 0x04, 0xC3, + 0x98, 0xCC, 0x81, 0xE6, 0x04, 0xC3, 0xA6, 0xCC, + 0x81, 0xE6, 0x04, 0xC3, 0xA6, 0xCC, 0x84, 0xE6, + 0x04, 0xC3, 0xB8, 0xCC, 0x81, 0xE6, 0x04, 0xC5, + 0xBF, 0xCC, 0x87, 0xE6, 0x04, 0xC6, 0xB7, 0xCC, // Bytes 34c0 - 34ff - 0x04, 0xD9, 0x86, 0xD8, 0xB2, 0x04, 0xD9, 0x86, - 0xD9, 0x86, 0x04, 0xD9, 0x8A, 0xD8, 0xB1, 0x04, - 0xD9, 0x8A, 0xD8, 0xB2, 0x04, 0xD9, 0x8A, 0xD9, - 0x86, 0x06, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, - 0x06, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x87, 0x04, - 0xD8, 0xA8, 0xD9, 0x87, 0x04, 0xD8, 0xAA, 0xD9, - 0x87, 0x04, 0xD8, 0xB5, 0xD8, 0xAE, 0x04, 0xD9, - 0x84, 0xD9, 0x87, 0x04, 0xD9, 0x86, 0xD9, 0x87, + 0x8C, 0xE6, 0x04, 0xCA, 0x92, 0xCC, 0x8C, 0xE6, + 0x04, 0xCE, 0x91, 0xCC, 0x80, 0xE6, 0x04, 0xCE, + 0x91, 0xCC, 0x81, 0xE6, 0x04, 0xCE, 0x91, 0xCC, + 0x84, 0xE6, 0x04, 0xCE, 0x91, 0xCC, 0x86, 0xE6, + 0x04, 0xCE, 0x91, 0xCD, 0x85, 0xF0, 0x04, 0xCE, + 0x95, 0xCC, 0x80, 0xE6, 0x04, 0xCE, 0x95, 0xCC, + 0x81, 0xE6, 0x04, 0xCE, 0x97, 0xCC, 0x80, 0xE6, + 0x04, 0xCE, 0x97, 0xCC, 0x81, 0xE6, 0x04, 0xCE, // Bytes 3500 - 353f - 0x04, 0xD9, 0x87, 0xD9, 0xB0, 0x04, 0xD9, 0x8A, - 0xD9, 0x87, 0x04, 0xD8, 0xAB, 0xD9, 0x87, 0x04, - 0xD8, 0xB3, 0xD9, 0x87, 0x04, 0xD8, 0xB4, 0xD9, - 0x85, 0x04, 0xD8, 0xB4, 0xD9, 0x87, 0x06, 0xD9, - 0x80, 0xD9, 0x8E, 0xD9, 0x91, 0x06, 0xD9, 0x80, - 0xD9, 0x8F, 0xD9, 0x91, 0x06, 0xD9, 0x80, 0xD9, - 0x90, 0xD9, 0x91, 0x04, 0xD8, 0xB7, 0xD9, 0x89, - 0x04, 0xD8, 0xB7, 0xD9, 0x8A, 0x04, 0xD8, 0xB9, + 0x97, 0xCD, 0x85, 0xF0, 0x04, 0xCE, 0x99, 0xCC, + 0x80, 0xE6, 0x04, 0xCE, 0x99, 0xCC, 0x81, 0xE6, + 0x04, 0xCE, 0x99, 0xCC, 0x84, 0xE6, 0x04, 0xCE, + 0x99, 0xCC, 0x86, 0xE6, 0x04, 0xCE, 0x99, 0xCC, + 0x88, 0xE6, 0x04, 0xCE, 0x9F, 0xCC, 0x80, 0xE6, + 0x04, 0xCE, 0x9F, 0xCC, 0x81, 0xE6, 0x04, 0xCE, + 0xA1, 0xCC, 0x94, 0xE6, 0x04, 0xCE, 0xA5, 0xCC, + 0x80, 0xE6, 0x04, 0xCE, 0xA5, 0xCC, 0x81, 0xE6, // Bytes 3540 - 357f - 0xD9, 0x89, 0x04, 0xD8, 0xB9, 0xD9, 0x8A, 0x04, - 0xD8, 0xBA, 0xD9, 0x89, 0x04, 0xD8, 0xBA, 0xD9, - 0x8A, 0x04, 0xD8, 0xB3, 0xD9, 0x89, 0x04, 0xD8, - 0xB3, 0xD9, 0x8A, 0x04, 0xD8, 0xB4, 0xD9, 0x89, - 0x04, 0xD8, 0xB4, 0xD9, 0x8A, 0x04, 0xD8, 0xAD, - 0xD9, 0x89, 0x04, 0xD8, 0xAD, 0xD9, 0x8A, 0x04, - 0xD8, 0xAC, 0xD9, 0x89, 0x04, 0xD8, 0xAC, 0xD9, - 0x8A, 0x04, 0xD8, 0xAE, 0xD9, 0x89, 0x04, 0xD8, + 0x04, 0xCE, 0xA5, 0xCC, 0x84, 0xE6, 0x04, 0xCE, + 0xA5, 0xCC, 0x86, 0xE6, 0x04, 0xCE, 0xA5, 0xCC, + 0x88, 0xE6, 0x04, 0xCE, 0xA9, 0xCC, 0x80, 0xE6, + 0x04, 0xCE, 0xA9, 0xCC, 0x81, 0xE6, 0x04, 0xCE, + 0xA9, 0xCD, 0x85, 0xF0, 0x04, 0xCE, 0xB1, 0xCC, + 0x84, 0xE6, 0x04, 0xCE, 0xB1, 0xCC, 0x86, 0xE6, + 0x04, 0xCE, 0xB1, 0xCD, 0x85, 0xF0, 0x04, 0xCE, + 0xB5, 0xCC, 0x80, 0xE6, 0x04, 0xCE, 0xB5, 0xCC, // Bytes 3580 - 35bf - 0xAE, 0xD9, 0x8A, 0x04, 0xD8, 0xB5, 0xD9, 0x89, - 0x04, 0xD8, 0xB5, 0xD9, 0x8A, 0x04, 0xD8, 0xB6, - 0xD9, 0x89, 0x04, 0xD8, 0xB6, 0xD9, 0x8A, 0x04, - 0xD8, 0xB4, 0xD8, 0xAC, 0x04, 0xD8, 0xB4, 0xD8, - 0xAD, 0x04, 0xD8, 0xB4, 0xD8, 0xAE, 0x04, 0xD8, - 0xB4, 0xD8, 0xB1, 0x04, 0xD8, 0xB3, 0xD8, 0xB1, - 0x04, 0xD8, 0xB5, 0xD8, 0xB1, 0x04, 0xD8, 0xB6, - 0xD8, 0xB1, 0x04, 0xD8, 0xA7, 0xD9, 0x8B, 0x06, + 0x81, 0xE6, 0x04, 0xCE, 0xB7, 0xCD, 0x85, 0xF0, + 0x04, 0xCE, 0xB9, 0xCC, 0x80, 0xE6, 0x04, 0xCE, + 0xB9, 0xCC, 0x81, 0xE6, 0x04, 0xCE, 0xB9, 0xCC, + 0x84, 0xE6, 0x04, 0xCE, 0xB9, 0xCC, 0x86, 0xE6, + 0x04, 0xCE, 0xB9, 0xCD, 0x82, 0xE6, 0x04, 0xCE, + 0xBF, 0xCC, 0x80, 0xE6, 0x04, 0xCE, 0xBF, 0xCC, + 0x81, 0xE6, 0x04, 0xCF, 0x81, 0xCC, 0x93, 0xE6, + 0x04, 0xCF, 0x81, 0xCC, 0x94, 0xE6, 0x04, 0xCF, // Bytes 35c0 - 35ff - 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85, 0x06, 0xD8, - 0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x06, 0xD8, 0xAA, - 0xD8, 0xAD, 0xD9, 0x85, 0x06, 0xD8, 0xAA, 0xD8, - 0xAE, 0xD9, 0x85, 0x06, 0xD8, 0xAA, 0xD9, 0x85, - 0xD8, 0xAC, 0x06, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, - 0xAD, 0x06, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, - 0x06, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, 0xAD, 0x06, - 0xD8, 0xAD, 0xD9, 0x85, 0xD9, 0x8A, 0x06, 0xD8, + 0x85, 0xCC, 0x80, 0xE6, 0x04, 0xCF, 0x85, 0xCC, + 0x81, 0xE6, 0x04, 0xCF, 0x85, 0xCC, 0x84, 0xE6, + 0x04, 0xCF, 0x85, 0xCC, 0x86, 0xE6, 0x04, 0xCF, + 0x85, 0xCD, 0x82, 0xE6, 0x04, 0xCF, 0x89, 0xCD, + 0x85, 0xF0, 0x04, 0xCF, 0x92, 0xCC, 0x81, 0xE6, + 0x04, 0xCF, 0x92, 0xCC, 0x88, 0xE6, 0x04, 0xD0, + 0x86, 0xCC, 0x88, 0xE6, 0x04, 0xD0, 0x90, 0xCC, + 0x86, 0xE6, 0x04, 0xD0, 0x90, 0xCC, 0x88, 0xE6, // Bytes 3600 - 363f - 0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x06, 0xD8, 0xB3, - 0xD8, 0xAD, 0xD8, 0xAC, 0x06, 0xD8, 0xB3, 0xD8, - 0xAC, 0xD8, 0xAD, 0x06, 0xD8, 0xB3, 0xD8, 0xAC, - 0xD9, 0x89, 0x06, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, - 0xAD, 0x06, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, - 0x06, 0xD8, 0xB3, 0xD9, 0x85, 0xD9, 0x85, 0x06, - 0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x06, 0xD8, - 0xB5, 0xD9, 0x85, 0xD9, 0x85, 0x06, 0xD8, 0xB4, + 0x04, 0xD0, 0x93, 0xCC, 0x81, 0xE6, 0x04, 0xD0, + 0x95, 0xCC, 0x80, 0xE6, 0x04, 0xD0, 0x95, 0xCC, + 0x86, 0xE6, 0x04, 0xD0, 0x95, 0xCC, 0x88, 0xE6, + 0x04, 0xD0, 0x96, 0xCC, 0x86, 0xE6, 0x04, 0xD0, + 0x96, 0xCC, 0x88, 0xE6, 0x04, 0xD0, 0x97, 0xCC, + 0x88, 0xE6, 0x04, 0xD0, 0x98, 0xCC, 0x80, 0xE6, + 0x04, 0xD0, 0x98, 0xCC, 0x84, 0xE6, 0x04, 0xD0, + 0x98, 0xCC, 0x86, 0xE6, 0x04, 0xD0, 0x98, 0xCC, // Bytes 3640 - 367f - 0xD8, 0xAD, 0xD9, 0x85, 0x06, 0xD8, 0xB4, 0xD8, - 0xAC, 0xD9, 0x8A, 0x06, 0xD8, 0xB4, 0xD9, 0x85, - 0xD8, 0xAE, 0x06, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, - 0x85, 0x06, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x89, - 0x06, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x06, - 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x06, 0xD8, - 0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x06, 0xD8, 0xB7, - 0xD9, 0x85, 0xD9, 0x8A, 0x06, 0xD8, 0xB9, 0xD8, + 0x88, 0xE6, 0x04, 0xD0, 0x9A, 0xCC, 0x81, 0xE6, + 0x04, 0xD0, 0x9E, 0xCC, 0x88, 0xE6, 0x04, 0xD0, + 0xA3, 0xCC, 0x84, 0xE6, 0x04, 0xD0, 0xA3, 0xCC, + 0x86, 0xE6, 0x04, 0xD0, 0xA3, 0xCC, 0x88, 0xE6, + 0x04, 0xD0, 0xA3, 0xCC, 0x8B, 0xE6, 0x04, 0xD0, + 0xA7, 0xCC, 0x88, 0xE6, 0x04, 0xD0, 0xAB, 0xCC, + 0x88, 0xE6, 0x04, 0xD0, 0xAD, 0xCC, 0x88, 0xE6, + 0x04, 0xD0, 0xB0, 0xCC, 0x86, 0xE6, 0x04, 0xD0, // Bytes 3680 - 36bf - 0xAC, 0xD9, 0x85, 0x06, 0xD8, 0xB9, 0xD9, 0x85, - 0xD9, 0x85, 0x06, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, - 0x89, 0x06, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, - 0x06, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x06, - 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x06, 0xD9, - 0x81, 0xD8, 0xAE, 0xD9, 0x85, 0x06, 0xD9, 0x82, - 0xD9, 0x85, 0xD8, 0xAD, 0x06, 0xD9, 0x82, 0xD9, - 0x85, 0xD9, 0x85, 0x06, 0xD9, 0x84, 0xD8, 0xAD, + 0xB0, 0xCC, 0x88, 0xE6, 0x04, 0xD0, 0xB3, 0xCC, + 0x81, 0xE6, 0x04, 0xD0, 0xB5, 0xCC, 0x80, 0xE6, + 0x04, 0xD0, 0xB5, 0xCC, 0x86, 0xE6, 0x04, 0xD0, + 0xB5, 0xCC, 0x88, 0xE6, 0x04, 0xD0, 0xB6, 0xCC, + 0x86, 0xE6, 0x04, 0xD0, 0xB6, 0xCC, 0x88, 0xE6, + 0x04, 0xD0, 0xB7, 0xCC, 0x88, 0xE6, 0x04, 0xD0, + 0xB8, 0xCC, 0x80, 0xE6, 0x04, 0xD0, 0xB8, 0xCC, + 0x84, 0xE6, 0x04, 0xD0, 0xB8, 0xCC, 0x86, 0xE6, // Bytes 36c0 - 36ff - 0xD9, 0x85, 0x06, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, - 0x8A, 0x06, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89, - 0x06, 0xD9, 0x84, 0xD8, 0xAC, 0xD8, 0xAC, 0x06, - 0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x06, 0xD9, - 0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x06, 0xD9, 0x85, - 0xD8, 0xAD, 0xD8, 0xAC, 0x06, 0xD9, 0x85, 0xD8, - 0xAD, 0xD9, 0x85, 0x06, 0xD9, 0x85, 0xD8, 0xAD, - 0xD9, 0x8A, 0x06, 0xD9, 0x85, 0xD8, 0xAC, 0xD8, + 0x04, 0xD0, 0xB8, 0xCC, 0x88, 0xE6, 0x04, 0xD0, + 0xBA, 0xCC, 0x81, 0xE6, 0x04, 0xD0, 0xBE, 0xCC, + 0x88, 0xE6, 0x04, 0xD1, 0x83, 0xCC, 0x84, 0xE6, + 0x04, 0xD1, 0x83, 0xCC, 0x86, 0xE6, 0x04, 0xD1, + 0x83, 0xCC, 0x88, 0xE6, 0x04, 0xD1, 0x83, 0xCC, + 0x8B, 0xE6, 0x04, 0xD1, 0x87, 0xCC, 0x88, 0xE6, + 0x04, 0xD1, 0x8B, 0xCC, 0x88, 0xE6, 0x04, 0xD1, + 0x8D, 0xCC, 0x88, 0xE6, 0x04, 0xD1, 0x96, 0xCC, // Bytes 3700 - 373f - 0xAD, 0x06, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x85, - 0x06, 0xD9, 0x85, 0xD8, 0xAE, 0xD8, 0xAC, 0x06, - 0xD9, 0x85, 0xD8, 0xAE, 0xD9, 0x85, 0x06, 0xD9, - 0x85, 0xD8, 0xAC, 0xD8, 0xAE, 0x06, 0xD9, 0x87, - 0xD9, 0x85, 0xD8, 0xAC, 0x06, 0xD9, 0x87, 0xD9, - 0x85, 0xD9, 0x85, 0x06, 0xD9, 0x86, 0xD8, 0xAD, - 0xD9, 0x85, 0x06, 0xD9, 0x86, 0xD8, 0xAD, 0xD9, - 0x89, 0x06, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, + 0x88, 0xE6, 0x04, 0xD1, 0xB4, 0xCC, 0x8F, 0xE6, + 0x04, 0xD1, 0xB5, 0xCC, 0x8F, 0xE6, 0x04, 0xD3, + 0x98, 0xCC, 0x88, 0xE6, 0x04, 0xD3, 0x99, 0xCC, + 0x88, 0xE6, 0x04, 0xD3, 0xA8, 0xCC, 0x88, 0xE6, + 0x04, 0xD3, 0xA9, 0xCC, 0x88, 0xE6, 0x04, 0xD8, + 0xA7, 0xD9, 0x93, 0xE6, 0x04, 0xD8, 0xA7, 0xD9, + 0x94, 0xE6, 0x04, 0xD8, 0xA7, 0xD9, 0x95, 0xDC, + 0x04, 0xD9, 0x88, 0xD9, 0x94, 0xE6, 0x04, 0xD9, // Bytes 3740 - 377f - 0x06, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x06, - 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A, 0x06, 0xD9, - 0x86, 0xD9, 0x85, 0xD9, 0x89, 0x06, 0xD9, 0x8A, - 0xD9, 0x85, 0xD9, 0x85, 0x06, 0xD8, 0xA8, 0xD8, - 0xAE, 0xD9, 0x8A, 0x06, 0xD8, 0xAA, 0xD8, 0xAC, - 0xD9, 0x8A, 0x06, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, - 0x89, 0x06, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, 0x8A, - 0x06, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, 0x89, 0x06, + 0x8A, 0xD9, 0x94, 0xE6, 0x04, 0xDB, 0x81, 0xD9, + 0x94, 0xE6, 0x04, 0xDB, 0x92, 0xD9, 0x94, 0xE6, + 0x04, 0xDB, 0x95, 0xD9, 0x94, 0xE6, 0x05, 0x41, + 0xCC, 0x82, 0xCC, 0x80, 0xE6, 0x05, 0x41, 0xCC, + 0x82, 0xCC, 0x81, 0xE6, 0x05, 0x41, 0xCC, 0x82, + 0xCC, 0x83, 0xE6, 0x05, 0x41, 0xCC, 0x82, 0xCC, + 0x89, 0xE6, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x80, + 0xE6, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x81, 0xE6, // Bytes 3780 - 37bf - 0xD8, 0xAA, 0xD9, 0x85, 0xD9, 0x8A, 0x06, 0xD8, - 0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x06, 0xD8, 0xAC, - 0xD9, 0x85, 0xD9, 0x8A, 0x06, 0xD8, 0xAC, 0xD8, - 0xAD, 0xD9, 0x89, 0x06, 0xD8, 0xAC, 0xD9, 0x85, - 0xD9, 0x89, 0x06, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, - 0x89, 0x06, 0xD8, 0xB5, 0xD8, 0xAD, 0xD9, 0x8A, - 0x06, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9, 0x8A, 0x06, - 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A, 0x06, 0xD9, + 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x83, 0xE6, 0x05, + 0x41, 0xCC, 0x86, 0xCC, 0x89, 0xE6, 0x05, 0x41, + 0xCC, 0x87, 0xCC, 0x84, 0xE6, 0x05, 0x41, 0xCC, + 0x88, 0xCC, 0x84, 0xE6, 0x05, 0x41, 0xCC, 0x8A, + 0xCC, 0x81, 0xE6, 0x05, 0x41, 0xCC, 0xA3, 0xCC, + 0x82, 0xE6, 0x05, 0x41, 0xCC, 0xA3, 0xCC, 0x86, + 0xE6, 0x05, 0x43, 0xCC, 0xA7, 0xCC, 0x81, 0xE6, + 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x80, 0xE6, 0x05, // Bytes 37c0 - 37ff - 0x84, 0xD8, 0xAC, 0xD9, 0x8A, 0x06, 0xD9, 0x84, - 0xD9, 0x85, 0xD9, 0x8A, 0x06, 0xD9, 0x8A, 0xD8, - 0xAD, 0xD9, 0x8A, 0x06, 0xD9, 0x8A, 0xD8, 0xAC, - 0xD9, 0x8A, 0x06, 0xD9, 0x8A, 0xD9, 0x85, 0xD9, - 0x8A, 0x06, 0xD9, 0x85, 0xD9, 0x85, 0xD9, 0x8A, - 0x06, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x06, - 0xD9, 0x86, 0xD8, 0xAD, 0xD9, 0x8A, 0x06, 0xD8, - 0xB9, 0xD9, 0x85, 0xD9, 0x8A, 0x06, 0xD9, 0x83, + 0x45, 0xCC, 0x82, 0xCC, 0x81, 0xE6, 0x05, 0x45, + 0xCC, 0x82, 0xCC, 0x83, 0xE6, 0x05, 0x45, 0xCC, + 0x82, 0xCC, 0x89, 0xE6, 0x05, 0x45, 0xCC, 0x84, + 0xCC, 0x80, 0xE6, 0x05, 0x45, 0xCC, 0x84, 0xCC, + 0x81, 0xE6, 0x05, 0x45, 0xCC, 0xA3, 0xCC, 0x82, + 0xE6, 0x05, 0x45, 0xCC, 0xA7, 0xCC, 0x86, 0xE6, + 0x05, 0x49, 0xCC, 0x88, 0xCC, 0x81, 0xE6, 0x05, + 0x4C, 0xCC, 0xA3, 0xCC, 0x84, 0xE6, 0x05, 0x4F, // Bytes 3800 - 383f - 0xD9, 0x85, 0xD9, 0x8A, 0x06, 0xD9, 0x86, 0xD8, - 0xAC, 0xD8, 0xAD, 0x06, 0xD9, 0x85, 0xD8, 0xAE, - 0xD9, 0x8A, 0x06, 0xD9, 0x84, 0xD8, 0xAC, 0xD9, - 0x85, 0x06, 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, - 0x06, 0xD8, 0xAC, 0xD8, 0xAD, 0xD9, 0x8A, 0x06, - 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x06, 0xD9, - 0x85, 0xD8, 0xAC, 0xD9, 0x8A, 0x06, 0xD9, 0x81, - 0xD9, 0x85, 0xD9, 0x8A, 0x06, 0xD8, 0xA8, 0xD8, + 0xCC, 0x82, 0xCC, 0x80, 0xE6, 0x05, 0x4F, 0xCC, + 0x82, 0xCC, 0x81, 0xE6, 0x05, 0x4F, 0xCC, 0x82, + 0xCC, 0x83, 0xE6, 0x05, 0x4F, 0xCC, 0x82, 0xCC, + 0x89, 0xE6, 0x05, 0x4F, 0xCC, 0x83, 0xCC, 0x81, + 0xE6, 0x05, 0x4F, 0xCC, 0x83, 0xCC, 0x84, 0xE6, + 0x05, 0x4F, 0xCC, 0x83, 0xCC, 0x88, 0xE6, 0x05, + 0x4F, 0xCC, 0x84, 0xCC, 0x80, 0xE6, 0x05, 0x4F, + 0xCC, 0x84, 0xCC, 0x81, 0xE6, 0x05, 0x4F, 0xCC, // Bytes 3840 - 387f - 0xAD, 0xD9, 0x8A, 0x06, 0xD8, 0xB3, 0xD8, 0xAE, - 0xD9, 0x8A, 0x06, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, - 0x8A, 0x06, 0xD8, 0xB5, 0xD9, 0x84, 0xDB, 0x92, - 0x06, 0xD9, 0x82, 0xD9, 0x84, 0xDB, 0x92, 0x08, - 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87, - 0x08, 0xD8, 0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, - 0xB1, 0x08, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, - 0xD8, 0xAF, 0x08, 0xD8, 0xB5, 0xD9, 0x84, 0xD8, + 0x87, 0xCC, 0x84, 0xE6, 0x05, 0x4F, 0xCC, 0x88, + 0xCC, 0x84, 0xE6, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, + 0x80, 0xE6, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0x81, + 0xE6, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0x83, 0xE6, + 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0x89, 0xE6, 0x05, + 0x4F, 0xCC, 0x9B, 0xCC, 0xA3, 0xDC, 0x05, 0x4F, + 0xCC, 0xA3, 0xCC, 0x82, 0xE6, 0x05, 0x4F, 0xCC, + 0xA8, 0xCC, 0x84, 0xE6, 0x05, 0x52, 0xCC, 0xA3, // Bytes 3880 - 38bf - 0xB9, 0xD9, 0x85, 0x08, 0xD8, 0xB1, 0xD8, 0xB3, - 0xD9, 0x88, 0xD9, 0x84, 0x08, 0xD8, 0xB9, 0xD9, - 0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x08, 0xD9, 0x88, - 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xD8, - 0xB5, 0xD9, 0x84, 0xD9, 0x89, 0x21, 0xD8, 0xB5, - 0xD9, 0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, - 0x84, 0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, - 0xD9, 0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, + 0xCC, 0x84, 0xE6, 0x05, 0x53, 0xCC, 0x81, 0xCC, + 0x87, 0xE6, 0x05, 0x53, 0xCC, 0x8C, 0xCC, 0x87, + 0xE6, 0x05, 0x53, 0xCC, 0xA3, 0xCC, 0x87, 0xE6, + 0x05, 0x55, 0xCC, 0x83, 0xCC, 0x81, 0xE6, 0x05, + 0x55, 0xCC, 0x84, 0xCC, 0x88, 0xE6, 0x05, 0x55, + 0xCC, 0x88, 0xCC, 0x80, 0xE6, 0x05, 0x55, 0xCC, + 0x88, 0xCC, 0x81, 0xE6, 0x05, 0x55, 0xCC, 0x88, + 0xCC, 0x84, 0xE6, 0x05, 0x55, 0xCC, 0x88, 0xCC, // Bytes 38c0 - 38ff - 0x88, 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x0F, - 0xD8, 0xAC, 0xD9, 0x84, 0x20, 0xD8, 0xAC, 0xD9, - 0x84, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x87, 0x08, - 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7, 0xD9, 0x84, - 0x01, 0x2C, 0x03, 0xE3, 0x80, 0x81, 0x03, 0xE3, - 0x80, 0x82, 0x01, 0x3A, 0x01, 0x21, 0x01, 0x3F, - 0x03, 0xE3, 0x80, 0x96, 0x03, 0xE3, 0x80, 0x97, - 0x03, 0xE2, 0x80, 0x94, 0x03, 0xE2, 0x80, 0x93, + 0x8C, 0xE6, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x80, + 0xE6, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x81, 0xE6, + 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x83, 0xE6, 0x05, + 0x55, 0xCC, 0x9B, 0xCC, 0x89, 0xE6, 0x05, 0x55, + 0xCC, 0x9B, 0xCC, 0xA3, 0xDC, 0x05, 0x61, 0xCC, + 0x82, 0xCC, 0x80, 0xE6, 0x05, 0x61, 0xCC, 0x82, + 0xCC, 0x81, 0xE6, 0x05, 0x61, 0xCC, 0x82, 0xCC, + 0x83, 0xE6, 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x89, // Bytes 3900 - 393f - 0x01, 0x5F, 0x01, 0x7B, 0x01, 0x7D, 0x03, 0xE3, - 0x80, 0x94, 0x03, 0xE3, 0x80, 0x95, 0x03, 0xE3, - 0x80, 0x90, 0x03, 0xE3, 0x80, 0x91, 0x03, 0xE3, - 0x80, 0x8A, 0x03, 0xE3, 0x80, 0x8B, 0x03, 0xE3, - 0x80, 0x8C, 0x03, 0xE3, 0x80, 0x8D, 0x03, 0xE3, - 0x80, 0x8E, 0x03, 0xE3, 0x80, 0x8F, 0x01, 0x5B, - 0x01, 0x5D, 0x01, 0x23, 0x01, 0x26, 0x01, 0x2A, - 0x01, 0x2D, 0x01, 0x3C, 0x01, 0x3E, 0x01, 0x5C, + 0xE6, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x80, 0xE6, + 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x81, 0xE6, 0x05, + 0x61, 0xCC, 0x86, 0xCC, 0x83, 0xE6, 0x05, 0x61, + 0xCC, 0x86, 0xCC, 0x89, 0xE6, 0x05, 0x61, 0xCC, + 0x87, 0xCC, 0x84, 0xE6, 0x05, 0x61, 0xCC, 0x88, + 0xCC, 0x84, 0xE6, 0x05, 0x61, 0xCC, 0x8A, 0xCC, + 0x81, 0xE6, 0x05, 0x61, 0xCC, 0xA3, 0xCC, 0x82, + 0xE6, 0x05, 0x61, 0xCC, 0xA3, 0xCC, 0x86, 0xE6, // Bytes 3940 - 397f - 0x01, 0x24, 0x01, 0x25, 0x01, 0x40, 0x03, 0x20, - 0xD9, 0x8B, 0x04, 0xD9, 0x80, 0xD9, 0x8B, 0x03, - 0x20, 0xD9, 0x8C, 0x03, 0x20, 0xD9, 0x8D, 0x03, - 0x20, 0xD9, 0x8E, 0x04, 0xD9, 0x80, 0xD9, 0x8E, - 0x03, 0x20, 0xD9, 0x8F, 0x04, 0xD9, 0x80, 0xD9, - 0x8F, 0x03, 0x20, 0xD9, 0x90, 0x04, 0xD9, 0x80, - 0xD9, 0x90, 0x03, 0x20, 0xD9, 0x91, 0x04, 0xD9, - 0x80, 0xD9, 0x91, 0x03, 0x20, 0xD9, 0x92, 0x04, + 0x05, 0x63, 0xCC, 0xA7, 0xCC, 0x81, 0xE6, 0x05, + 0x65, 0xCC, 0x82, 0xCC, 0x80, 0xE6, 0x05, 0x65, + 0xCC, 0x82, 0xCC, 0x81, 0xE6, 0x05, 0x65, 0xCC, + 0x82, 0xCC, 0x83, 0xE6, 0x05, 0x65, 0xCC, 0x82, + 0xCC, 0x89, 0xE6, 0x05, 0x65, 0xCC, 0x84, 0xCC, + 0x80, 0xE6, 0x05, 0x65, 0xCC, 0x84, 0xCC, 0x81, + 0xE6, 0x05, 0x65, 0xCC, 0xA3, 0xCC, 0x82, 0xE6, + 0x05, 0x65, 0xCC, 0xA7, 0xCC, 0x86, 0xE6, 0x05, // Bytes 3980 - 39bf - 0xD9, 0x80, 0xD9, 0x92, 0x02, 0xD8, 0xA1, 0x02, - 0xD8, 0xA7, 0x02, 0xD8, 0xA8, 0x02, 0xD8, 0xA9, - 0x02, 0xD8, 0xAA, 0x02, 0xD8, 0xAB, 0x02, 0xD8, - 0xAC, 0x02, 0xD8, 0xAD, 0x02, 0xD8, 0xAE, 0x02, - 0xD8, 0xAF, 0x02, 0xD8, 0xB0, 0x02, 0xD8, 0xB1, - 0x02, 0xD8, 0xB2, 0x02, 0xD8, 0xB3, 0x02, 0xD8, - 0xB4, 0x02, 0xD8, 0xB5, 0x02, 0xD8, 0xB6, 0x02, - 0xD8, 0xB7, 0x02, 0xD8, 0xB8, 0x02, 0xD8, 0xB9, + 0x69, 0xCC, 0x88, 0xCC, 0x81, 0xE6, 0x05, 0x6C, + 0xCC, 0xA3, 0xCC, 0x84, 0xE6, 0x05, 0x6F, 0xCC, + 0x82, 0xCC, 0x80, 0xE6, 0x05, 0x6F, 0xCC, 0x82, + 0xCC, 0x81, 0xE6, 0x05, 0x6F, 0xCC, 0x82, 0xCC, + 0x83, 0xE6, 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x89, + 0xE6, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x81, 0xE6, + 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x84, 0xE6, 0x05, + 0x6F, 0xCC, 0x83, 0xCC, 0x88, 0xE6, 0x05, 0x6F, // Bytes 39c0 - 39ff - 0x02, 0xD8, 0xBA, 0x02, 0xD9, 0x81, 0x02, 0xD9, - 0x82, 0x02, 0xD9, 0x83, 0x02, 0xD9, 0x84, 0x02, - 0xD9, 0x85, 0x02, 0xD9, 0x86, 0x02, 0xD9, 0x87, - 0x02, 0xD9, 0x88, 0x02, 0xD9, 0x8A, 0x06, 0xD9, - 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0x06, 0xD9, 0x84, - 0xD8, 0xA7, 0xD9, 0x94, 0x06, 0xD9, 0x84, 0xD8, - 0xA7, 0xD9, 0x95, 0x04, 0xD9, 0x84, 0xD8, 0xA7, - 0x01, 0x22, 0x01, 0x27, 0x01, 0x2F, 0x01, 0x5E, + 0xCC, 0x84, 0xCC, 0x80, 0xE6, 0x05, 0x6F, 0xCC, + 0x84, 0xCC, 0x81, 0xE6, 0x05, 0x6F, 0xCC, 0x87, + 0xCC, 0x84, 0xE6, 0x05, 0x6F, 0xCC, 0x88, 0xCC, + 0x84, 0xE6, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x80, + 0xE6, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x81, 0xE6, + 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x83, 0xE6, 0x05, + 0x6F, 0xCC, 0x9B, 0xCC, 0x89, 0xE6, 0x05, 0x6F, + 0xCC, 0x9B, 0xCC, 0xA3, 0xDC, 0x05, 0x6F, 0xCC, // Bytes 3a00 - 3a3f - 0x01, 0x7C, 0x01, 0x7E, 0x03, 0xE2, 0xA6, 0x85, - 0x03, 0xE2, 0xA6, 0x86, 0x03, 0xE3, 0x83, 0xBB, - 0x03, 0xE3, 0x82, 0xA1, 0x03, 0xE3, 0x82, 0xA3, - 0x03, 0xE3, 0x82, 0xA5, 0x03, 0xE3, 0x82, 0xA7, - 0x03, 0xE3, 0x82, 0xA9, 0x03, 0xE3, 0x83, 0xA3, - 0x03, 0xE3, 0x83, 0xA5, 0x03, 0xE3, 0x83, 0xA7, - 0x03, 0xE3, 0x83, 0x83, 0x03, 0xE3, 0x83, 0xBC, - 0x03, 0xE3, 0x83, 0xB3, 0x03, 0xE3, 0x82, 0x99, + 0xA3, 0xCC, 0x82, 0xE6, 0x05, 0x6F, 0xCC, 0xA8, + 0xCC, 0x84, 0xE6, 0x05, 0x72, 0xCC, 0xA3, 0xCC, + 0x84, 0xE6, 0x05, 0x73, 0xCC, 0x81, 0xCC, 0x87, + 0xE6, 0x05, 0x73, 0xCC, 0x8C, 0xCC, 0x87, 0xE6, + 0x05, 0x73, 0xCC, 0xA3, 0xCC, 0x87, 0xE6, 0x05, + 0x75, 0xCC, 0x83, 0xCC, 0x81, 0xE6, 0x05, 0x75, + 0xCC, 0x84, 0xCC, 0x88, 0xE6, 0x05, 0x75, 0xCC, + 0x88, 0xCC, 0x80, 0xE6, 0x05, 0x75, 0xCC, 0x88, // Bytes 3a40 - 3a7f - 0x03, 0xE3, 0x82, 0x9A, 0x02, 0xC2, 0xA2, 0x02, - 0xC2, 0xA3, 0x02, 0xC2, 0xAC, 0x02, 0xC2, 0xA6, - 0x02, 0xC2, 0xA5, 0x03, 0xE2, 0x82, 0xA9, 0x03, - 0xE2, 0x94, 0x82, 0x03, 0xE2, 0x86, 0x90, 0x03, - 0xE2, 0x86, 0x91, 0x03, 0xE2, 0x86, 0x92, 0x03, - 0xE2, 0x86, 0x93, 0x03, 0xE2, 0x96, 0xA0, 0x03, - 0xE2, 0x97, 0x8B, 0x08, 0xF0, 0x91, 0x82, 0x99, - 0xF0, 0x91, 0x82, 0xBA, 0x08, 0xF0, 0x91, 0x82, + 0xCC, 0x81, 0xE6, 0x05, 0x75, 0xCC, 0x88, 0xCC, + 0x84, 0xE6, 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x8C, + 0xE6, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x80, 0xE6, + 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x81, 0xE6, 0x05, + 0x75, 0xCC, 0x9B, 0xCC, 0x83, 0xE6, 0x05, 0x75, + 0xCC, 0x9B, 0xCC, 0x89, 0xE6, 0x05, 0x75, 0xCC, + 0x9B, 0xCC, 0xA3, 0xDC, 0x05, 0xE1, 0xBE, 0xBF, + 0xCC, 0x80, 0xE6, 0x05, 0xE1, 0xBE, 0xBF, 0xCC, // Bytes 3a80 - 3abf - 0x9B, 0xF0, 0x91, 0x82, 0xBA, 0x08, 0xF0, 0x91, - 0x82, 0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x08, 0xF0, - 0x9D, 0x85, 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0x08, - 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, - 0x0C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, - 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0x0C, 0xF0, 0x9D, - 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, - 0x85, 0xAF, 0x0C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, + 0x81, 0xE6, 0x05, 0xE1, 0xBE, 0xBF, 0xCD, 0x82, + 0xE6, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, 0x80, 0xE6, + 0x05, 0xE1, 0xBF, 0xBE, 0xCC, 0x81, 0xE6, 0x05, + 0xE1, 0xBF, 0xBE, 0xCD, 0x82, 0xE6, 0x05, 0xE2, + 0x86, 0x90, 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x86, + 0x92, 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x86, 0x94, + 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x87, 0x90, 0xCC, + 0xB8, 0x01, 0x05, 0xE2, 0x87, 0x92, 0xCC, 0xB8, // Bytes 3ac0 - 3aff - 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB0, 0x0C, - 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, - 0xF0, 0x9D, 0x85, 0xB1, 0x0C, 0xF0, 0x9D, 0x85, - 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, - 0xB2, 0x08, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, - 0x85, 0xA5, 0x08, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, - 0x9D, 0x85, 0xA5, 0x0C, 0xF0, 0x9D, 0x86, 0xB9, - 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, + 0x01, 0x05, 0xE2, 0x87, 0x94, 0xCC, 0xB8, 0x01, + 0x05, 0xE2, 0x88, 0x83, 0xCC, 0xB8, 0x01, 0x05, + 0xE2, 0x88, 0x88, 0xCC, 0xB8, 0x01, 0x05, 0xE2, + 0x88, 0x8B, 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x88, + 0xA3, 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x88, 0xA5, + 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x88, 0xBC, 0xCC, + 0xB8, 0x01, 0x05, 0xE2, 0x89, 0x83, 0xCC, 0xB8, + 0x01, 0x05, 0xE2, 0x89, 0x85, 0xCC, 0xB8, 0x01, // Bytes 3b00 - 3b3f - 0x0C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, - 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0x0C, 0xF0, 0x9D, - 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, - 0x85, 0xAF, 0x0C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, - 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0x02, - 0xC4, 0xB1, 0x02, 0xC8, 0xB7, 0x02, 0xCE, 0x91, - 0x02, 0xCE, 0x92, 0x02, 0xCE, 0x94, 0x02, 0xCE, - 0x95, 0x02, 0xCE, 0x96, 0x02, 0xCE, 0x97, 0x02, + 0x05, 0xE2, 0x89, 0x88, 0xCC, 0xB8, 0x01, 0x05, + 0xE2, 0x89, 0x8D, 0xCC, 0xB8, 0x01, 0x05, 0xE2, + 0x89, 0xA1, 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x89, + 0xA4, 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x89, 0xA5, + 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x89, 0xB2, 0xCC, + 0xB8, 0x01, 0x05, 0xE2, 0x89, 0xB3, 0xCC, 0xB8, + 0x01, 0x05, 0xE2, 0x89, 0xB6, 0xCC, 0xB8, 0x01, + 0x05, 0xE2, 0x89, 0xB7, 0xCC, 0xB8, 0x01, 0x05, // Bytes 3b40 - 3b7f - 0xCE, 0x99, 0x02, 0xCE, 0x9A, 0x02, 0xCE, 0x9B, - 0x02, 0xCE, 0x9C, 0x02, 0xCE, 0x9D, 0x02, 0xCE, - 0x9E, 0x02, 0xCE, 0x9F, 0x02, 0xCE, 0xA1, 0x02, - 0xCE, 0xA4, 0x02, 0xCE, 0xA6, 0x02, 0xCE, 0xA7, - 0x02, 0xCE, 0xA8, 0x03, 0xE2, 0x88, 0x87, 0x02, - 0xCE, 0xB1, 0x02, 0xCE, 0xB6, 0x02, 0xCE, 0xB7, - 0x02, 0xCE, 0xBB, 0x02, 0xCE, 0xBD, 0x02, 0xCE, - 0xBE, 0x02, 0xCE, 0xBF, 0x02, 0xCF, 0x83, 0x02, + 0xE2, 0x89, 0xBA, 0xCC, 0xB8, 0x01, 0x05, 0xE2, + 0x89, 0xBB, 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x89, + 0xBC, 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x89, 0xBD, + 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x8A, 0x82, 0xCC, + 0xB8, 0x01, 0x05, 0xE2, 0x8A, 0x83, 0xCC, 0xB8, + 0x01, 0x05, 0xE2, 0x8A, 0x86, 0xCC, 0xB8, 0x01, + 0x05, 0xE2, 0x8A, 0x87, 0xCC, 0xB8, 0x01, 0x05, + 0xE2, 0x8A, 0x91, 0xCC, 0xB8, 0x01, 0x05, 0xE2, // Bytes 3b80 - 3bbf - 0xCF, 0x84, 0x02, 0xCF, 0x85, 0x02, 0xCF, 0x88, - 0x02, 0xCF, 0x89, 0x03, 0xE2, 0x88, 0x82, 0x02, - 0xCF, 0x9C, 0x02, 0xCF, 0x9D, 0x02, 0x30, 0x2E, - 0x02, 0x30, 0x2C, 0x02, 0x31, 0x2C, 0x02, 0x32, - 0x2C, 0x02, 0x33, 0x2C, 0x02, 0x34, 0x2C, 0x02, - 0x35, 0x2C, 0x02, 0x36, 0x2C, 0x02, 0x37, 0x2C, - 0x02, 0x38, 0x2C, 0x02, 0x39, 0x2C, 0x03, 0x28, - 0x41, 0x29, 0x03, 0x28, 0x42, 0x29, 0x03, 0x28, + 0x8A, 0x92, 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x8A, + 0xA2, 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x8A, 0xA8, + 0xCC, 0xB8, 0x01, 0x05, 0xE2, 0x8A, 0xA9, 0xCC, + 0xB8, 0x01, 0x05, 0xE2, 0x8A, 0xAB, 0xCC, 0xB8, + 0x01, 0x05, 0xE2, 0x8A, 0xB2, 0xCC, 0xB8, 0x01, + 0x05, 0xE2, 0x8A, 0xB3, 0xCC, 0xB8, 0x01, 0x05, + 0xE2, 0x8A, 0xB4, 0xCC, 0xB8, 0x01, 0x05, 0xE2, + 0x8A, 0xB5, 0xCC, 0xB8, 0x01, 0x06, 0xCE, 0x91, // Bytes 3bc0 - 3bff - 0x43, 0x29, 0x03, 0x28, 0x44, 0x29, 0x03, 0x28, - 0x45, 0x29, 0x03, 0x28, 0x46, 0x29, 0x03, 0x28, - 0x47, 0x29, 0x03, 0x28, 0x48, 0x29, 0x03, 0x28, - 0x49, 0x29, 0x03, 0x28, 0x4A, 0x29, 0x03, 0x28, - 0x4B, 0x29, 0x03, 0x28, 0x4C, 0x29, 0x03, 0x28, - 0x4D, 0x29, 0x03, 0x28, 0x4E, 0x29, 0x03, 0x28, - 0x4F, 0x29, 0x03, 0x28, 0x50, 0x29, 0x03, 0x28, - 0x51, 0x29, 0x03, 0x28, 0x52, 0x29, 0x03, 0x28, + 0xCC, 0x93, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0x91, + 0xCC, 0x94, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0x95, + 0xCC, 0x93, 0xCC, 0x80, 0xE6, 0x06, 0xCE, 0x95, + 0xCC, 0x93, 0xCC, 0x81, 0xE6, 0x06, 0xCE, 0x95, + 0xCC, 0x94, 0xCC, 0x80, 0xE6, 0x06, 0xCE, 0x95, + 0xCC, 0x94, 0xCC, 0x81, 0xE6, 0x06, 0xCE, 0x97, + 0xCC, 0x93, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0x97, + 0xCC, 0x94, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0x99, // Bytes 3c00 - 3c3f - 0x53, 0x29, 0x03, 0x28, 0x54, 0x29, 0x03, 0x28, - 0x55, 0x29, 0x03, 0x28, 0x56, 0x29, 0x03, 0x28, - 0x57, 0x29, 0x03, 0x28, 0x58, 0x29, 0x03, 0x28, - 0x59, 0x29, 0x03, 0x28, 0x5A, 0x29, 0x07, 0xE3, - 0x80, 0x94, 0x53, 0xE3, 0x80, 0x95, 0x02, 0x43, - 0x44, 0x02, 0x57, 0x5A, 0x02, 0x48, 0x56, 0x02, - 0x53, 0x44, 0x02, 0x53, 0x53, 0x03, 0x50, 0x50, - 0x56, 0x02, 0x57, 0x43, 0x02, 0x44, 0x4A, 0x06, + 0xCC, 0x93, 0xCC, 0x80, 0xE6, 0x06, 0xCE, 0x99, + 0xCC, 0x93, 0xCC, 0x81, 0xE6, 0x06, 0xCE, 0x99, + 0xCC, 0x93, 0xCD, 0x82, 0xE6, 0x06, 0xCE, 0x99, + 0xCC, 0x94, 0xCC, 0x80, 0xE6, 0x06, 0xCE, 0x99, + 0xCC, 0x94, 0xCC, 0x81, 0xE6, 0x06, 0xCE, 0x99, + 0xCC, 0x94, 0xCD, 0x82, 0xE6, 0x06, 0xCE, 0x9F, + 0xCC, 0x93, 0xCC, 0x80, 0xE6, 0x06, 0xCE, 0x9F, + 0xCC, 0x93, 0xCC, 0x81, 0xE6, 0x06, 0xCE, 0x9F, // Bytes 3c40 - 3c7f - 0xE3, 0x81, 0xBB, 0xE3, 0x81, 0x8B, 0x06, 0xE3, - 0x82, 0xB3, 0xE3, 0x82, 0xB3, 0x03, 0xE5, 0xAD, - 0x97, 0x03, 0xE5, 0x8F, 0x8C, 0x03, 0xE5, 0xA4, - 0x9A, 0x03, 0xE8, 0xA7, 0xA3, 0x03, 0xE4, 0xBA, - 0xA4, 0x03, 0xE6, 0x98, 0xA0, 0x03, 0xE7, 0x84, - 0xA1, 0x03, 0xE5, 0x89, 0x8D, 0x03, 0xE5, 0xBE, - 0x8C, 0x03, 0xE5, 0x86, 0x8D, 0x03, 0xE6, 0x96, - 0xB0, 0x03, 0xE5, 0x88, 0x9D, 0x03, 0xE7, 0xB5, + 0xCC, 0x94, 0xCC, 0x80, 0xE6, 0x06, 0xCE, 0x9F, + 0xCC, 0x94, 0xCC, 0x81, 0xE6, 0x06, 0xCE, 0xA5, + 0xCC, 0x94, 0xCC, 0x80, 0xE6, 0x06, 0xCE, 0xA5, + 0xCC, 0x94, 0xCC, 0x81, 0xE6, 0x06, 0xCE, 0xA5, + 0xCC, 0x94, 0xCD, 0x82, 0xE6, 0x06, 0xCE, 0xA9, + 0xCC, 0x93, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0xA9, + 0xCC, 0x94, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0xB1, + 0xCC, 0x80, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0xB1, // Bytes 3c80 - 3cbf - 0x82, 0x03, 0xE8, 0xB2, 0xA9, 0x03, 0xE5, 0xA3, - 0xB0, 0x03, 0xE5, 0x90, 0xB9, 0x03, 0xE6, 0xBC, - 0x94, 0x03, 0xE6, 0x8A, 0x95, 0x03, 0xE6, 0x8D, - 0x95, 0x03, 0xE9, 0x81, 0x8A, 0x03, 0xE6, 0x8C, - 0x87, 0x03, 0xE6, 0x89, 0x93, 0x03, 0xE7, 0xA6, - 0x81, 0x03, 0xE7, 0xA9, 0xBA, 0x03, 0xE5, 0x90, - 0x88, 0x03, 0xE6, 0xBA, 0x80, 0x03, 0xE7, 0x94, - 0xB3, 0x03, 0xE5, 0x89, 0xB2, 0x03, 0xE5, 0x96, + 0xCC, 0x81, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0xB1, + 0xCC, 0x93, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0xB1, + 0xCC, 0x94, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0xB1, + 0xCD, 0x82, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0xB5, + 0xCC, 0x93, 0xCC, 0x80, 0xE6, 0x06, 0xCE, 0xB5, + 0xCC, 0x93, 0xCC, 0x81, 0xE6, 0x06, 0xCE, 0xB5, + 0xCC, 0x94, 0xCC, 0x80, 0xE6, 0x06, 0xCE, 0xB5, + 0xCC, 0x94, 0xCC, 0x81, 0xE6, 0x06, 0xCE, 0xB7, // Bytes 3cc0 - 3cff - 0xB6, 0x09, 0xE3, 0x80, 0x94, 0xE6, 0x9C, 0xAC, - 0xE3, 0x80, 0x95, 0x09, 0xE3, 0x80, 0x94, 0xE4, - 0xB8, 0x89, 0xE3, 0x80, 0x95, 0x09, 0xE3, 0x80, - 0x94, 0xE4, 0xBA, 0x8C, 0xE3, 0x80, 0x95, 0x09, - 0xE3, 0x80, 0x94, 0xE5, 0xAE, 0x89, 0xE3, 0x80, - 0x95, 0x09, 0xE3, 0x80, 0x94, 0xE7, 0x82, 0xB9, - 0xE3, 0x80, 0x95, 0x09, 0xE3, 0x80, 0x94, 0xE6, - 0x89, 0x93, 0xE3, 0x80, 0x95, 0x09, 0xE3, 0x80, + 0xCC, 0x80, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0xB7, + 0xCC, 0x81, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0xB7, + 0xCC, 0x93, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0xB7, + 0xCC, 0x94, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0xB7, + 0xCD, 0x82, 0xCD, 0x85, 0xF0, 0x06, 0xCE, 0xB9, + 0xCC, 0x88, 0xCC, 0x80, 0xE6, 0x06, 0xCE, 0xB9, + 0xCC, 0x88, 0xCC, 0x81, 0xE6, 0x06, 0xCE, 0xB9, + 0xCC, 0x88, 0xCD, 0x82, 0xE6, 0x06, 0xCE, 0xB9, // Bytes 3d00 - 3d3f - 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95, 0x09, - 0xE3, 0x80, 0x94, 0xE5, 0x8B, 0x9D, 0xE3, 0x80, - 0x95, 0x09, 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, - 0xE3, 0x80, 0x95, 0x03, 0xE5, 0xBE, 0x97, 0x03, - 0xE5, 0x8F, 0xAF, 0x03, 0xE4, 0xB8, 0xBD, 0x03, - 0xE4, 0xB8, 0xB8, 0x03, 0xE4, 0xB9, 0x81, 0x04, - 0xF0, 0xA0, 0x84, 0xA2, 0x03, 0xE4, 0xBD, 0xA0, - 0x03, 0xE4, 0xBE, 0xBB, 0x03, 0xE5, 0x80, 0x82, + 0xCC, 0x93, 0xCC, 0x80, 0xE6, 0x06, 0xCE, 0xB9, + 0xCC, 0x93, 0xCC, 0x81, 0xE6, 0x06, 0xCE, 0xB9, + 0xCC, 0x93, 0xCD, 0x82, 0xE6, 0x06, 0xCE, 0xB9, + 0xCC, 0x94, 0xCC, 0x80, 0xE6, 0x06, 0xCE, 0xB9, + 0xCC, 0x94, 0xCC, 0x81, 0xE6, 0x06, 0xCE, 0xB9, + 0xCC, 0x94, 0xCD, 0x82, 0xE6, 0x06, 0xCE, 0xBF, + 0xCC, 0x93, 0xCC, 0x80, 0xE6, 0x06, 0xCE, 0xBF, + 0xCC, 0x93, 0xCC, 0x81, 0xE6, 0x06, 0xCE, 0xBF, // Bytes 3d40 - 3d7f - 0x03, 0xE5, 0x81, 0xBA, 0x03, 0xE5, 0x82, 0x99, - 0x03, 0xE5, 0x83, 0x8F, 0x03, 0xE3, 0x92, 0x9E, - 0x04, 0xF0, 0xA0, 0x98, 0xBA, 0x03, 0xE5, 0x85, - 0x94, 0x03, 0xE5, 0x85, 0xA4, 0x03, 0xE5, 0x85, - 0xB7, 0x04, 0xF0, 0xA0, 0x94, 0x9C, 0x03, 0xE3, - 0x92, 0xB9, 0x03, 0xE5, 0x85, 0xA7, 0x04, 0xF0, - 0xA0, 0x95, 0x8B, 0x03, 0xE5, 0x86, 0x97, 0x03, - 0xE5, 0x86, 0xA4, 0x03, 0xE4, 0xBB, 0x8C, 0x03, + 0xCC, 0x94, 0xCC, 0x80, 0xE6, 0x06, 0xCE, 0xBF, + 0xCC, 0x94, 0xCC, 0x81, 0xE6, 0x06, 0xCF, 0x85, + 0xCC, 0x88, 0xCC, 0x80, 0xE6, 0x06, 0xCF, 0x85, + 0xCC, 0x88, 0xCC, 0x81, 0xE6, 0x06, 0xCF, 0x85, + 0xCC, 0x88, 0xCD, 0x82, 0xE6, 0x06, 0xCF, 0x85, + 0xCC, 0x93, 0xCC, 0x80, 0xE6, 0x06, 0xCF, 0x85, + 0xCC, 0x93, 0xCC, 0x81, 0xE6, 0x06, 0xCF, 0x85, + 0xCC, 0x93, 0xCD, 0x82, 0xE6, 0x06, 0xCF, 0x85, // Bytes 3d80 - 3dbf - 0xE5, 0x86, 0xAC, 0x04, 0xF0, 0xA9, 0x87, 0x9F, - 0x03, 0xE5, 0x88, 0x83, 0x03, 0xE3, 0x93, 0x9F, - 0x03, 0xE5, 0x88, 0xBB, 0x03, 0xE5, 0x89, 0x86, - 0x03, 0xE5, 0x89, 0xB7, 0x03, 0xE3, 0x94, 0x95, - 0x03, 0xE5, 0x8C, 0x85, 0x03, 0xE5, 0x8C, 0x86, - 0x03, 0xE5, 0x8D, 0x89, 0x03, 0xE5, 0x8D, 0x9A, - 0x03, 0xE5, 0x8D, 0xB3, 0x03, 0xE5, 0x8D, 0xBD, - 0x03, 0xE5, 0x8D, 0xBF, 0x04, 0xF0, 0xA0, 0xA8, + 0xCC, 0x94, 0xCC, 0x80, 0xE6, 0x06, 0xCF, 0x85, + 0xCC, 0x94, 0xCC, 0x81, 0xE6, 0x06, 0xCF, 0x85, + 0xCC, 0x94, 0xCD, 0x82, 0xE6, 0x06, 0xCF, 0x89, + 0xCC, 0x80, 0xCD, 0x85, 0xF0, 0x06, 0xCF, 0x89, + 0xCC, 0x81, 0xCD, 0x85, 0xF0, 0x06, 0xCF, 0x89, + 0xCC, 0x93, 0xCD, 0x85, 0xF0, 0x06, 0xCF, 0x89, + 0xCC, 0x94, 0xCD, 0x85, 0xF0, 0x06, 0xCF, 0x89, + 0xCD, 0x82, 0xCD, 0x85, 0xF0, 0x06, 0xE0, 0xA4, // Bytes 3dc0 - 3dff - 0xAC, 0x03, 0xE7, 0x81, 0xB0, 0x03, 0xE5, 0x8F, - 0x8A, 0x03, 0xE5, 0x8F, 0x9F, 0x04, 0xF0, 0xA0, - 0xAD, 0xA3, 0x03, 0xE5, 0x8F, 0xAB, 0x03, 0xE5, - 0x8F, 0xB1, 0x03, 0xE5, 0x90, 0x86, 0x03, 0xE5, - 0x92, 0x9E, 0x03, 0xE5, 0x90, 0xB8, 0x03, 0xE5, - 0x91, 0x88, 0x03, 0xE5, 0x91, 0xA8, 0x03, 0xE5, - 0x92, 0xA2, 0x03, 0xE5, 0x93, 0xB6, 0x03, 0xE5, - 0x94, 0x90, 0x03, 0xE5, 0x95, 0x93, 0x03, 0xE5, + 0xA8, 0xE0, 0xA4, 0xBC, 0x07, 0x06, 0xE0, 0xA4, + 0xB0, 0xE0, 0xA4, 0xBC, 0x07, 0x06, 0xE0, 0xA4, + 0xB3, 0xE0, 0xA4, 0xBC, 0x07, 0x06, 0xE0, 0xB1, + 0x86, 0xE0, 0xB1, 0x96, 0x5B, 0x06, 0xE0, 0xB7, + 0x99, 0xE0, 0xB7, 0x8A, 0x09, 0x06, 0xE3, 0x81, + 0x86, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0x8B, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0x8D, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, // Bytes 3e00 - 3e3f - 0x95, 0xA3, 0x03, 0xE5, 0x96, 0x84, 0x03, 0xE5, - 0x96, 0xAB, 0x03, 0xE5, 0x96, 0xB3, 0x03, 0xE5, - 0x97, 0x82, 0x03, 0xE5, 0x9C, 0x96, 0x03, 0xE5, - 0x9C, 0x97, 0x03, 0xE5, 0x99, 0x91, 0x03, 0xE5, - 0x99, 0xB4, 0x03, 0xE5, 0xA3, 0xAE, 0x03, 0xE5, - 0x9F, 0x8E, 0x03, 0xE5, 0x9F, 0xB4, 0x03, 0xE5, - 0xA0, 0x8D, 0x03, 0xE5, 0x9E, 0x8B, 0x03, 0xE5, - 0xA0, 0xB2, 0x03, 0xE5, 0xA0, 0xB1, 0x03, 0xE5, + 0x8F, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0x91, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0x93, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0x95, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0x97, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0x99, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0x9B, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0x9D, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, // Bytes 3e40 - 3e7f - 0xA2, 0xAC, 0x04, 0xF0, 0xA1, 0x93, 0xA4, 0x03, - 0xE5, 0xA3, 0xB2, 0x03, 0xE5, 0xA3, 0xB7, 0x03, - 0xE5, 0xA4, 0x86, 0x03, 0xE5, 0xA4, 0xA2, 0x03, - 0xE5, 0xA5, 0xA2, 0x04, 0xF0, 0xA1, 0x9A, 0xA8, - 0x04, 0xF0, 0xA1, 0x9B, 0xAA, 0x03, 0xE5, 0xA7, - 0xAC, 0x03, 0xE5, 0xA8, 0x9B, 0x03, 0xE5, 0xA8, - 0xA7, 0x03, 0xE5, 0xA7, 0x98, 0x03, 0xE5, 0xA9, - 0xA6, 0x03, 0xE3, 0x9B, 0xAE, 0x03, 0xE3, 0x9B, + 0x9F, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0xA1, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0xA4, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0xA6, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0xA8, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0xAF, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0xAF, 0xE3, 0x82, 0x9A, 0x08, 0x06, 0xE3, 0x81, + 0xB2, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, // Bytes 3e80 - 3ebf - 0xBC, 0x03, 0xE5, 0xAC, 0x88, 0x03, 0xE5, 0xAC, - 0xBE, 0x04, 0xF0, 0xA1, 0xA7, 0x88, 0x03, 0xE5, - 0xAF, 0x83, 0x03, 0xE5, 0xAF, 0x98, 0x03, 0xE5, - 0xAF, 0xB3, 0x04, 0xF0, 0xA1, 0xAC, 0x98, 0x03, - 0xE5, 0xAF, 0xBF, 0x03, 0xE5, 0xB0, 0x86, 0x03, - 0xE5, 0xBD, 0x93, 0x03, 0xE3, 0x9E, 0x81, 0x03, - 0xE5, 0xB1, 0xA0, 0x03, 0xE5, 0xB3, 0x80, 0x03, - 0xE5, 0xB2, 0x8D, 0x04, 0xF0, 0xA1, 0xB7, 0xA4, + 0xB2, 0xE3, 0x82, 0x9A, 0x08, 0x06, 0xE3, 0x81, + 0xB5, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0xB5, 0xE3, 0x82, 0x9A, 0x08, 0x06, 0xE3, 0x81, + 0xB8, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0xB8, 0xE3, 0x82, 0x9A, 0x08, 0x06, 0xE3, 0x81, + 0xBB, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x81, + 0xBB, 0xE3, 0x82, 0x9A, 0x08, 0x06, 0xE3, 0x82, + 0x9D, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x82, // Bytes 3ec0 - 3eff - 0x03, 0xE5, 0xB5, 0x83, 0x04, 0xF0, 0xA1, 0xB7, - 0xA6, 0x03, 0xE5, 0xB5, 0xAE, 0x03, 0xE5, 0xB5, - 0xAB, 0x03, 0xE5, 0xB5, 0xBC, 0x03, 0xE5, 0xB7, - 0xA1, 0x03, 0xE5, 0xB7, 0xA2, 0x03, 0xE3, 0xA0, - 0xAF, 0x03, 0xE5, 0xB7, 0xBD, 0x03, 0xE5, 0xB8, - 0xA8, 0x03, 0xE5, 0xB8, 0xBD, 0x03, 0xE5, 0xB9, - 0xA9, 0x03, 0xE3, 0xA1, 0xA2, 0x04, 0xF0, 0xA2, - 0x86, 0x83, 0x03, 0xE3, 0xA1, 0xBC, 0x03, 0xE5, + 0xA6, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x82, + 0xAB, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x82, + 0xAD, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x82, + 0xAF, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x82, + 0xB1, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x82, + 0xB3, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x82, + 0xB5, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x82, + 0xB7, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x82, // Bytes 3f00 - 3f3f - 0xBA, 0xB0, 0x03, 0xE5, 0xBA, 0xB3, 0x03, 0xE5, - 0xBA, 0xB6, 0x04, 0xF0, 0xAA, 0x8E, 0x92, 0x04, - 0xF0, 0xA2, 0x8C, 0xB1, 0x03, 0xE8, 0x88, 0x81, - 0x03, 0xE5, 0xBC, 0xA2, 0x03, 0xE3, 0xA3, 0x87, - 0x04, 0xF0, 0xA3, 0x8A, 0xB8, 0x04, 0xF0, 0xA6, - 0x87, 0x9A, 0x03, 0xE5, 0xBD, 0xA2, 0x03, 0xE5, - 0xBD, 0xAB, 0x03, 0xE3, 0xA3, 0xA3, 0x03, 0xE5, - 0xBE, 0x9A, 0x03, 0xE5, 0xBF, 0x8D, 0x03, 0xE5, + 0xB9, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x82, + 0xBB, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x82, + 0xBD, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x82, + 0xBF, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x83, + 0x81, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x83, + 0x84, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x83, + 0x86, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x83, + 0x88, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x83, // Bytes 3f40 - 3f7f - 0xBF, 0x97, 0x03, 0xE5, 0xBF, 0xB9, 0x03, 0xE6, - 0x82, 0x81, 0x03, 0xE3, 0xA4, 0xBA, 0x03, 0xE3, - 0xA4, 0x9C, 0x04, 0xF0, 0xA2, 0x9B, 0x94, 0x03, - 0xE6, 0x83, 0x87, 0x03, 0xE6, 0x85, 0x88, 0x03, - 0xE6, 0x85, 0x8C, 0x03, 0xE6, 0x85, 0xBA, 0x03, - 0xE6, 0x86, 0xB2, 0x03, 0xE6, 0x86, 0xA4, 0x03, - 0xE6, 0x86, 0xAF, 0x03, 0xE6, 0x87, 0x9E, 0x03, - 0xE6, 0x88, 0x90, 0x03, 0xE6, 0x88, 0x9B, 0x03, + 0x8F, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x83, + 0x8F, 0xE3, 0x82, 0x9A, 0x08, 0x06, 0xE3, 0x83, + 0x92, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x83, + 0x92, 0xE3, 0x82, 0x9A, 0x08, 0x06, 0xE3, 0x83, + 0x95, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x83, + 0x95, 0xE3, 0x82, 0x9A, 0x08, 0x06, 0xE3, 0x83, + 0x98, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x83, + 0x98, 0xE3, 0x82, 0x9A, 0x08, 0x06, 0xE3, 0x83, // Bytes 3f80 - 3fbf - 0xE6, 0x89, 0x9D, 0x03, 0xE6, 0x8A, 0xB1, 0x03, - 0xE6, 0x8B, 0x94, 0x03, 0xE6, 0x8D, 0x90, 0x04, - 0xF0, 0xA2, 0xAC, 0x8C, 0x03, 0xE6, 0x8C, 0xBD, - 0x03, 0xE6, 0x8B, 0xBC, 0x03, 0xE6, 0x8D, 0xA8, - 0x03, 0xE6, 0x8E, 0x83, 0x03, 0xE6, 0x8F, 0xA4, - 0x04, 0xF0, 0xA2, 0xAF, 0xB1, 0x03, 0xE6, 0x90, - 0xA2, 0x03, 0xE6, 0x8F, 0x85, 0x03, 0xE6, 0x8E, - 0xA9, 0x03, 0xE3, 0xA8, 0xAE, 0x03, 0xE6, 0x91, + 0x9B, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x83, + 0x9B, 0xE3, 0x82, 0x9A, 0x08, 0x06, 0xE3, 0x83, + 0xAF, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x83, + 0xB0, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x83, + 0xB1, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x83, + 0xB2, 0xE3, 0x82, 0x99, 0x08, 0x06, 0xE3, 0x83, + 0xBD, 0xE3, 0x82, 0x99, 0x08, 0x08, 0xCE, 0x91, + 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xF0, 0x08, // Bytes 3fc0 - 3fff - 0xA9, 0x03, 0xE6, 0x91, 0xBE, 0x03, 0xE6, 0x92, - 0x9D, 0x03, 0xE6, 0x91, 0xB7, 0x03, 0xE3, 0xA9, - 0xAC, 0x03, 0xE6, 0x95, 0xAC, 0x04, 0xF0, 0xA3, - 0x80, 0x8A, 0x03, 0xE6, 0x97, 0xA3, 0x03, 0xE6, - 0x9B, 0xB8, 0x03, 0xE6, 0x99, 0x89, 0x03, 0xE3, - 0xAC, 0x99, 0x03, 0xE3, 0xAC, 0x88, 0x03, 0xE3, - 0xAB, 0xA4, 0x03, 0xE5, 0x86, 0x92, 0x03, 0xE5, - 0x86, 0x95, 0x03, 0xE6, 0x9C, 0x80, 0x03, 0xE6, + 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, + 0xF0, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x82, + 0xCD, 0x85, 0xF0, 0x08, 0xCE, 0x91, 0xCC, 0x94, + 0xCC, 0x80, 0xCD, 0x85, 0xF0, 0x08, 0xCE, 0x91, + 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xF0, 0x08, + 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, + 0xF0, 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x80, + 0xCD, 0x85, 0xF0, 0x08, 0xCE, 0x97, 0xCC, 0x93, // Bytes 4000 - 403f - 0x9A, 0x9C, 0x03, 0xE8, 0x82, 0xAD, 0x03, 0xE4, - 0x8F, 0x99, 0x03, 0xE6, 0x9C, 0xA1, 0x03, 0xE6, - 0x9D, 0x9E, 0x03, 0xE6, 0x9D, 0x93, 0x04, 0xF0, - 0xA3, 0x8F, 0x83, 0x03, 0xE3, 0xAD, 0x89, 0x03, - 0xE6, 0x9F, 0xBA, 0x03, 0xE6, 0x9E, 0x85, 0x03, - 0xE6, 0xA1, 0x92, 0x04, 0xF0, 0xA3, 0x91, 0xAD, - 0x03, 0xE6, 0xA2, 0x8E, 0x03, 0xE6, 0xA0, 0x9F, - 0x03, 0xE6, 0xA4, 0x94, 0x03, 0xE6, 0xA5, 0x82, + 0xCC, 0x81, 0xCD, 0x85, 0xF0, 0x08, 0xCE, 0x97, + 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xF0, 0x08, + 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, + 0xF0, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x81, + 0xCD, 0x85, 0xF0, 0x08, 0xCE, 0x97, 0xCC, 0x94, + 0xCD, 0x82, 0xCD, 0x85, 0xF0, 0x08, 0xCE, 0xA9, + 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xF0, 0x08, + 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, // Bytes 4040 - 407f - 0x03, 0xE6, 0xA6, 0xA3, 0x03, 0xE6, 0xA7, 0xAA, - 0x03, 0xE6, 0xAA, 0xA8, 0x04, 0xF0, 0xA3, 0x9A, - 0xA3, 0x03, 0xE6, 0xAB, 0x9B, 0x03, 0xE3, 0xB0, - 0x98, 0x03, 0xE6, 0xAC, 0xA1, 0x04, 0xF0, 0xA3, - 0xA2, 0xA7, 0x03, 0xE6, 0xAD, 0x94, 0x03, 0xE3, - 0xB1, 0x8E, 0x03, 0xE6, 0xAD, 0xB2, 0x03, 0xE6, - 0xAE, 0x9F, 0x03, 0xE6, 0xAE, 0xBB, 0x04, 0xF0, - 0xA3, 0xAA, 0x8D, 0x04, 0xF0, 0xA1, 0xB4, 0x8B, + 0xF0, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x82, + 0xCD, 0x85, 0xF0, 0x08, 0xCE, 0xA9, 0xCC, 0x94, + 0xCC, 0x80, 0xCD, 0x85, 0xF0, 0x08, 0xCE, 0xA9, + 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xF0, 0x08, + 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, + 0xF0, 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x80, + 0xCD, 0x85, 0xF0, 0x08, 0xCE, 0xB1, 0xCC, 0x93, + 0xCC, 0x81, 0xCD, 0x85, 0xF0, 0x08, 0xCE, 0xB1, // Bytes 4080 - 40bf - 0x04, 0xF0, 0xA3, 0xAB, 0xBA, 0x03, 0xE6, 0xB1, - 0x8E, 0x04, 0xF0, 0xA3, 0xB2, 0xBC, 0x03, 0xE6, - 0xB2, 0xBF, 0x03, 0xE6, 0xB3, 0x8D, 0x03, 0xE6, - 0xB1, 0xA7, 0x03, 0xE6, 0xB4, 0x96, 0x03, 0xE6, - 0xB4, 0xBE, 0x03, 0xE6, 0xB5, 0xA9, 0x03, 0xE6, - 0xB5, 0xB8, 0x03, 0xE6, 0xB6, 0x85, 0x04, 0xF0, - 0xA3, 0xB4, 0x9E, 0x03, 0xE6, 0xB4, 0xB4, 0x03, - 0xE6, 0xB8, 0xAF, 0x03, 0xE6, 0xB9, 0xAE, 0x03, + 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xF0, 0x08, + 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, + 0xF0, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x81, + 0xCD, 0x85, 0xF0, 0x08, 0xCE, 0xB1, 0xCC, 0x94, + 0xCD, 0x82, 0xCD, 0x85, 0xF0, 0x08, 0xCE, 0xB7, + 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xF0, 0x08, + 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, + 0xF0, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x82, // Bytes 40c0 - 40ff - 0xE3, 0xB4, 0xB3, 0x03, 0xE6, 0xBB, 0x87, 0x04, - 0xF0, 0xA3, 0xBB, 0x91, 0x03, 0xE6, 0xB7, 0xB9, - 0x03, 0xE6, 0xBD, 0xAE, 0x04, 0xF0, 0xA3, 0xBD, - 0x9E, 0x04, 0xF0, 0xA3, 0xBE, 0x8E, 0x03, 0xE6, - 0xBF, 0x86, 0x03, 0xE7, 0x80, 0xB9, 0x03, 0xE7, - 0x80, 0x9B, 0x03, 0xE3, 0xB6, 0x96, 0x03, 0xE7, - 0x81, 0x8A, 0x03, 0xE7, 0x81, 0xBD, 0x03, 0xE7, - 0x81, 0xB7, 0x03, 0xE7, 0x82, 0xAD, 0x04, 0xF0, + 0xCD, 0x85, 0xF0, 0x08, 0xCE, 0xB7, 0xCC, 0x94, + 0xCC, 0x80, 0xCD, 0x85, 0xF0, 0x08, 0xCE, 0xB7, + 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xF0, 0x08, + 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, + 0xF0, 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x80, + 0xCD, 0x85, 0xF0, 0x08, 0xCF, 0x89, 0xCC, 0x93, + 0xCC, 0x81, 0xCD, 0x85, 0xF0, 0x08, 0xCF, 0x89, + 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xF0, 0x08, // Bytes 4100 - 413f - 0xA0, 0x94, 0xA5, 0x03, 0xE7, 0x85, 0x85, 0x04, - 0xF0, 0xA4, 0x89, 0xA3, 0x03, 0xE7, 0x86, 0x9C, - 0x04, 0xF0, 0xA4, 0x8E, 0xAB, 0x03, 0xE7, 0x88, - 0xA8, 0x03, 0xE7, 0x89, 0x90, 0x04, 0xF0, 0xA4, - 0x98, 0x88, 0x03, 0xE7, 0x8A, 0x80, 0x03, 0xE7, - 0x8A, 0x95, 0x04, 0xF0, 0xA4, 0x9C, 0xB5, 0x04, - 0xF0, 0xA4, 0xA0, 0x94, 0x03, 0xE7, 0x8D, 0xBA, - 0x03, 0xE7, 0x8E, 0x8B, 0x03, 0xE3, 0xBA, 0xAC, + 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, + 0xF0, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x81, + 0xCD, 0x85, 0xF0, 0x08, 0xCF, 0x89, 0xCC, 0x94, + 0xCD, 0x82, 0xCD, 0x85, 0xF0, 0x08, 0xF0, 0x91, + 0x82, 0x99, 0xF0, 0x91, 0x82, 0xBA, 0x07, 0x08, + 0xF0, 0x91, 0x82, 0x9B, 0xF0, 0x91, 0x82, 0xBA, + 0x07, 0x08, 0xF0, 0x91, 0x82, 0xA5, 0xF0, 0x91, + 0x82, 0xBA, 0x07, 0x09, 0xE0, 0xB7, 0x99, 0xE0, // Bytes 4140 - 417f - 0x03, 0xE7, 0x8E, 0xA5, 0x03, 0xE3, 0xBA, 0xB8, - 0x03, 0xE7, 0x91, 0x87, 0x03, 0xE7, 0x91, 0x9C, - 0x03, 0xE7, 0x92, 0x85, 0x03, 0xE7, 0x93, 0x8A, - 0x03, 0xE3, 0xBC, 0x9B, 0x03, 0xE7, 0x94, 0xA4, - 0x04, 0xF0, 0xA4, 0xB0, 0xB6, 0x03, 0xE7, 0x94, - 0xBE, 0x04, 0xF0, 0xA4, 0xB2, 0x92, 0x04, 0xF0, - 0xA2, 0x86, 0x9F, 0x03, 0xE7, 0x98, 0x90, 0x04, - 0xF0, 0xA4, 0xBE, 0xA1, 0x04, 0xF0, 0xA4, 0xBE, + 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x09, 0x43, 0x20, + 0xCC, 0x81, 0xE6, 0x43, 0x20, 0xCC, 0x83, 0xE6, + 0x43, 0x20, 0xCC, 0x84, 0xE6, 0x43, 0x20, 0xCC, + 0x85, 0xE6, 0x43, 0x20, 0xCC, 0x86, 0xE6, 0x43, + 0x20, 0xCC, 0x87, 0xE6, 0x43, 0x20, 0xCC, 0x88, + 0xE6, 0x43, 0x20, 0xCC, 0x8A, 0xE6, 0x43, 0x20, + 0xCC, 0x8B, 0xE6, 0x43, 0x20, 0xCC, 0x93, 0xE6, + 0x43, 0x20, 0xCC, 0x94, 0xE6, 0x43, 0x20, 0xCC, // Bytes 4180 - 41bf - 0xB8, 0x04, 0xF0, 0xA5, 0x81, 0x84, 0x03, 0xE3, - 0xBF, 0xBC, 0x03, 0xE4, 0x80, 0x88, 0x04, 0xF0, - 0xA5, 0x83, 0xB3, 0x04, 0xF0, 0xA5, 0x83, 0xB2, - 0x04, 0xF0, 0xA5, 0x84, 0x99, 0x04, 0xF0, 0xA5, - 0x84, 0xB3, 0x03, 0xE7, 0x9C, 0x9E, 0x03, 0xE7, - 0x9C, 0x9F, 0x03, 0xE7, 0x9E, 0x8B, 0x03, 0xE4, - 0x81, 0x86, 0x03, 0xE4, 0x82, 0x96, 0x04, 0xF0, - 0xA5, 0x90, 0x9D, 0x03, 0xE7, 0xA1, 0x8E, 0x03, + 0xA7, 0xCA, 0x43, 0x20, 0xCC, 0xA8, 0xCA, 0x43, + 0x20, 0xCC, 0xB3, 0xDC, 0x43, 0x20, 0xCD, 0x82, + 0xE6, 0x43, 0x20, 0xCD, 0x85, 0xF0, 0x43, 0x20, + 0xD9, 0x8B, 0x1B, 0x43, 0x20, 0xD9, 0x8C, 0x1C, + 0x43, 0x20, 0xD9, 0x8D, 0x1D, 0x43, 0x20, 0xD9, + 0x8E, 0x1E, 0x43, 0x20, 0xD9, 0x8F, 0x1F, 0x43, + 0x20, 0xD9, 0x90, 0x20, 0x43, 0x20, 0xD9, 0x91, + 0x21, 0x43, 0x20, 0xD9, 0x92, 0x22, 0x43, 0x41, // Bytes 41c0 - 41ff - 0xE4, 0x83, 0xA3, 0x04, 0xF0, 0xA5, 0x98, 0xA6, - 0x04, 0xF0, 0xA5, 0x9A, 0x9A, 0x04, 0xF0, 0xA5, - 0x9B, 0x85, 0x03, 0xE7, 0xA7, 0xAB, 0x03, 0xE4, - 0x84, 0xAF, 0x03, 0xE7, 0xA9, 0x8A, 0x03, 0xE7, - 0xA9, 0x8F, 0x04, 0xF0, 0xA5, 0xA5, 0xBC, 0x04, - 0xF0, 0xA5, 0xAA, 0xA7, 0x03, 0xE7, 0xAB, 0xAE, - 0x03, 0xE4, 0x88, 0x82, 0x04, 0xF0, 0xA5, 0xAE, - 0xAB, 0x03, 0xE7, 0xAF, 0x86, 0x03, 0xE7, 0xAF, + 0xCC, 0x8A, 0xE6, 0x43, 0x73, 0xCC, 0x87, 0xE6, + 0x44, 0x20, 0xE3, 0x82, 0x99, 0x08, 0x44, 0x20, + 0xE3, 0x82, 0x9A, 0x08, 0x44, 0x44, 0x5A, 0xCC, + 0x8C, 0xE6, 0x44, 0x44, 0x7A, 0xCC, 0x8C, 0xE6, + 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xE6, 0x44, 0xC2, + 0xA8, 0xCC, 0x81, 0xE6, 0x44, 0xCE, 0x91, 0xCC, + 0x81, 0xE6, 0x44, 0xCE, 0x95, 0xCC, 0x81, 0xE6, + 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xE6, 0x44, 0xCE, // Bytes 4200 - 423f - 0x89, 0x03, 0xE4, 0x88, 0xA7, 0x04, 0xF0, 0xA5, - 0xB2, 0x80, 0x03, 0xE7, 0xB3, 0x92, 0x03, 0xE4, - 0x8A, 0xA0, 0x03, 0xE7, 0xB3, 0xA8, 0x03, 0xE7, - 0xB3, 0xA3, 0x03, 0xE7, 0xB4, 0x80, 0x04, 0xF0, - 0xA5, 0xBE, 0x86, 0x03, 0xE7, 0xB5, 0xA3, 0x03, - 0xE4, 0x8C, 0x81, 0x03, 0xE7, 0xB7, 0x87, 0x03, - 0xE7, 0xB8, 0x82, 0x03, 0xE7, 0xB9, 0x85, 0x03, - 0xE4, 0x8C, 0xB4, 0x04, 0xF0, 0xA6, 0x88, 0xA8, + 0x99, 0xCC, 0x81, 0xE6, 0x44, 0xCE, 0x9F, 0xCC, + 0x81, 0xE6, 0x44, 0xCE, 0xA5, 0xCC, 0x81, 0xE6, + 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xE6, 0x44, 0xCE, + 0xA9, 0xCC, 0x81, 0xE6, 0x44, 0xCE, 0xB1, 0xCC, + 0x81, 0xE6, 0x44, 0xCE, 0xB5, 0xCC, 0x81, 0xE6, + 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xE6, 0x44, 0xCE, + 0xB9, 0xCC, 0x81, 0xE6, 0x44, 0xCE, 0xBF, 0xCC, + 0x81, 0xE6, 0x44, 0xCF, 0x85, 0xCC, 0x81, 0xE6, // Bytes 4240 - 427f - 0x04, 0xF0, 0xA6, 0x89, 0x87, 0x03, 0xE4, 0x8D, - 0x99, 0x04, 0xF0, 0xA6, 0x8B, 0x99, 0x03, 0xE7, - 0xBD, 0xBA, 0x04, 0xF0, 0xA6, 0x8C, 0xBE, 0x03, - 0xE7, 0xBE, 0x95, 0x03, 0xE7, 0xBF, 0xBA, 0x04, - 0xF0, 0xA6, 0x93, 0x9A, 0x04, 0xF0, 0xA6, 0x94, - 0xA3, 0x03, 0xE8, 0x81, 0xA0, 0x04, 0xF0, 0xA6, - 0x96, 0xA8, 0x03, 0xE8, 0x81, 0xB0, 0x04, 0xF0, - 0xA3, 0x8D, 0x9F, 0x03, 0xE4, 0x8F, 0x95, 0x03, + 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xE6, 0x44, 0xD7, + 0x90, 0xD6, 0xB7, 0x11, 0x44, 0xD7, 0x90, 0xD6, + 0xB8, 0x12, 0x44, 0xD7, 0x90, 0xD6, 0xBC, 0x15, + 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x15, 0x44, 0xD7, + 0x91, 0xD6, 0xBF, 0x17, 0x44, 0xD7, 0x92, 0xD6, + 0xBC, 0x15, 0x44, 0xD7, 0x93, 0xD6, 0xBC, 0x15, + 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x15, 0x44, 0xD7, + 0x95, 0xD6, 0xB9, 0x13, 0x44, 0xD7, 0x95, 0xD6, // Bytes 4280 - 42bf - 0xE8, 0x82, 0xB2, 0x03, 0xE8, 0x84, 0x83, 0x03, - 0xE4, 0x90, 0x8B, 0x03, 0xE8, 0x84, 0xBE, 0x03, - 0xE5, 0xAA, 0xB5, 0x04, 0xF0, 0xA6, 0x9E, 0xA7, - 0x04, 0xF0, 0xA6, 0x9E, 0xB5, 0x04, 0xF0, 0xA3, - 0x8E, 0x93, 0x04, 0xF0, 0xA3, 0x8E, 0x9C, 0x03, - 0xE8, 0x88, 0x84, 0x03, 0xE8, 0xBE, 0x9E, 0x03, - 0xE4, 0x91, 0xAB, 0x03, 0xE8, 0x8A, 0x91, 0x03, - 0xE8, 0x8A, 0x8B, 0x03, 0xE8, 0x8A, 0x9D, 0x03, + 0xBC, 0x15, 0x44, 0xD7, 0x96, 0xD6, 0xBC, 0x15, + 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x15, 0x44, 0xD7, + 0x99, 0xD6, 0xB4, 0x0E, 0x44, 0xD7, 0x99, 0xD6, + 0xBC, 0x15, 0x44, 0xD7, 0x9A, 0xD6, 0xBC, 0x15, + 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x15, 0x44, 0xD7, + 0x9B, 0xD6, 0xBF, 0x17, 0x44, 0xD7, 0x9C, 0xD6, + 0xBC, 0x15, 0x44, 0xD7, 0x9E, 0xD6, 0xBC, 0x15, + 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x15, 0x44, 0xD7, // Bytes 42c0 - 42ff - 0xE5, 0x8A, 0xB3, 0x03, 0xE8, 0x8A, 0xB1, 0x03, - 0xE8, 0x8A, 0xB3, 0x03, 0xE8, 0x8A, 0xBD, 0x03, - 0xE8, 0x8B, 0xA6, 0x04, 0xF0, 0xA6, 0xAC, 0xBC, - 0x03, 0xE8, 0x8C, 0x9D, 0x03, 0xE8, 0x8D, 0xA3, - 0x03, 0xE8, 0x8E, 0xAD, 0x03, 0xE8, 0x8C, 0xA3, - 0x03, 0xE8, 0x8E, 0xBD, 0x03, 0xE8, 0x8F, 0xA7, - 0x03, 0xE8, 0x8D, 0x93, 0x03, 0xE8, 0x8F, 0x8A, - 0x03, 0xE8, 0x8F, 0x8C, 0x03, 0xE8, 0x8F, 0x9C, + 0xA1, 0xD6, 0xBC, 0x15, 0x44, 0xD7, 0xA3, 0xD6, + 0xBC, 0x15, 0x44, 0xD7, 0xA4, 0xD6, 0xBC, 0x15, + 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x17, 0x44, 0xD7, + 0xA6, 0xD6, 0xBC, 0x15, 0x44, 0xD7, 0xA7, 0xD6, + 0xBC, 0x15, 0x44, 0xD7, 0xA8, 0xD6, 0xBC, 0x15, + 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x15, 0x44, 0xD7, + 0xA9, 0xD7, 0x81, 0x18, 0x44, 0xD7, 0xA9, 0xD7, + 0x82, 0x19, 0x44, 0xD7, 0xAA, 0xD6, 0xBC, 0x15, // Bytes 4300 - 433f - 0x04, 0xF0, 0xA6, 0xB0, 0xB6, 0x04, 0xF0, 0xA6, - 0xB5, 0xAB, 0x04, 0xF0, 0xA6, 0xB3, 0x95, 0x03, - 0xE4, 0x94, 0xAB, 0x03, 0xE8, 0x93, 0xB1, 0x03, - 0xE8, 0x93, 0xB3, 0x03, 0xE8, 0x94, 0x96, 0x04, - 0xF0, 0xA7, 0x8F, 0x8A, 0x03, 0xE8, 0x95, 0xA4, - 0x04, 0xF0, 0xA6, 0xBC, 0xAC, 0x03, 0xE4, 0x95, - 0x9D, 0x03, 0xE4, 0x95, 0xA1, 0x04, 0xF0, 0xA6, - 0xBE, 0xB1, 0x04, 0xF0, 0xA7, 0x83, 0x92, 0x03, + 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x11, 0x44, 0xD8, + 0xA7, 0xD9, 0x8B, 0x1B, 0x44, 0xD8, 0xA7, 0xD9, + 0x93, 0xE6, 0x44, 0xD8, 0xA7, 0xD9, 0x94, 0xE6, + 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xDC, 0x44, 0xD8, + 0xB0, 0xD9, 0xB0, 0x23, 0x44, 0xD8, 0xB1, 0xD9, + 0xB0, 0x23, 0x44, 0xD9, 0x80, 0xD9, 0x8B, 0x1B, + 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x1E, 0x44, 0xD9, + 0x80, 0xD9, 0x8F, 0x1F, 0x44, 0xD9, 0x80, 0xD9, // Bytes 4340 - 437f - 0xE4, 0x95, 0xAB, 0x03, 0xE8, 0x99, 0x90, 0x03, - 0xE8, 0x99, 0xA7, 0x03, 0xE8, 0x99, 0xA9, 0x03, - 0xE8, 0x9A, 0xA9, 0x03, 0xE8, 0x9A, 0x88, 0x03, - 0xE8, 0x9C, 0x8E, 0x03, 0xE8, 0x9B, 0xA2, 0x03, - 0xE8, 0x9C, 0xA8, 0x03, 0xE8, 0x9D, 0xAB, 0x03, - 0xE8, 0x9E, 0x86, 0x03, 0xE4, 0x97, 0x97, 0x03, - 0xE8, 0x9F, 0xA1, 0x03, 0xE8, 0xA0, 0x81, 0x03, - 0xE4, 0x97, 0xB9, 0x03, 0xE8, 0xA1, 0xA0, 0x04, + 0x90, 0x20, 0x44, 0xD9, 0x80, 0xD9, 0x91, 0x21, + 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x22, 0x44, 0xD9, + 0x87, 0xD9, 0xB0, 0x23, 0x44, 0xD9, 0x88, 0xD9, + 0x94, 0xE6, 0x44, 0xD9, 0x89, 0xD9, 0xB0, 0x23, + 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xE6, 0x44, 0xDB, + 0x92, 0xD9, 0x94, 0xE6, 0x44, 0xDB, 0x95, 0xD9, + 0x94, 0xE6, 0x45, 0x20, 0xCC, 0x88, 0xCC, 0x80, + 0xE6, 0x45, 0x20, 0xCC, 0x88, 0xCC, 0x81, 0xE6, // Bytes 4380 - 43bf - 0xF0, 0xA7, 0x99, 0xA7, 0x03, 0xE8, 0xA3, 0x97, - 0x03, 0xE8, 0xA3, 0x9E, 0x03, 0xE4, 0x98, 0xB5, - 0x03, 0xE8, 0xA3, 0xBA, 0x03, 0xE3, 0x92, 0xBB, - 0x04, 0xF0, 0xA7, 0xA2, 0xAE, 0x04, 0xF0, 0xA7, - 0xA5, 0xA6, 0x03, 0xE4, 0x9A, 0xBE, 0x03, 0xE4, - 0x9B, 0x87, 0x03, 0xE8, 0xAA, 0xA0, 0x04, 0xF0, - 0xA7, 0xB2, 0xA8, 0x03, 0xE8, 0xB2, 0xAB, 0x03, - 0xE8, 0xB3, 0x81, 0x03, 0xE8, 0xB4, 0x9B, 0x03, + 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82, 0xE6, 0x45, + 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xE6, 0x45, 0x20, + 0xCC, 0x93, 0xCC, 0x81, 0xE6, 0x45, 0x20, 0xCC, + 0x93, 0xCD, 0x82, 0xE6, 0x45, 0x20, 0xCC, 0x94, + 0xCC, 0x80, 0xE6, 0x45, 0x20, 0xCC, 0x94, 0xCC, + 0x81, 0xE6, 0x45, 0x20, 0xCC, 0x94, 0xCD, 0x82, + 0xE6, 0x45, 0x20, 0xD9, 0x8C, 0xD9, 0x91, 0x21, + 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91, 0x21, 0x45, // Bytes 43c0 - 43ff - 0xE8, 0xB5, 0xB7, 0x04, 0xF0, 0xA7, 0xBC, 0xAF, - 0x04, 0xF0, 0xA0, 0xA0, 0x84, 0x03, 0xE8, 0xB7, - 0x8B, 0x03, 0xE8, 0xB6, 0xBC, 0x03, 0xE8, 0xB7, - 0xB0, 0x04, 0xF0, 0xA0, 0xA3, 0x9E, 0x03, 0xE8, - 0xBB, 0x94, 0x04, 0xF0, 0xA8, 0x97, 0x92, 0x04, - 0xF0, 0xA8, 0x97, 0xAD, 0x03, 0xE9, 0x82, 0x94, - 0x03, 0xE9, 0x83, 0xB1, 0x03, 0xE9, 0x84, 0x91, - 0x04, 0xF0, 0xA8, 0x9C, 0xAE, 0x03, 0xE9, 0x84, + 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x21, 0x45, 0x20, + 0xD9, 0x8F, 0xD9, 0x91, 0x21, 0x45, 0x20, 0xD9, + 0x90, 0xD9, 0x91, 0x21, 0x45, 0x20, 0xD9, 0x91, + 0xD9, 0xB0, 0x23, 0x45, 0xE2, 0xAB, 0x9D, 0xCC, + 0xB8, 0x01, 0x46, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, + 0x81, 0xE6, 0x46, 0xCF, 0x85, 0xCC, 0x88, 0xCC, + 0x81, 0xE6, 0x46, 0xD7, 0xA9, 0xD6, 0xBC, 0xD7, + 0x81, 0x18, 0x46, 0xD7, 0xA9, 0xD6, 0xBC, 0xD7, // Bytes 4400 - 443f - 0x9B, 0x03, 0xE9, 0x88, 0xB8, 0x03, 0xE9, 0x8B, - 0x97, 0x03, 0xE9, 0x8B, 0x98, 0x03, 0xE9, 0x89, - 0xBC, 0x03, 0xE9, 0x8F, 0xB9, 0x03, 0xE9, 0x90, - 0x95, 0x04, 0xF0, 0xA8, 0xAF, 0xBA, 0x03, 0xE9, - 0x96, 0x8B, 0x03, 0xE4, 0xA6, 0x95, 0x03, 0xE9, - 0x96, 0xB7, 0x04, 0xF0, 0xA8, 0xB5, 0xB7, 0x03, - 0xE4, 0xA7, 0xA6, 0x03, 0xE9, 0x9B, 0x83, 0x03, - 0xE5, 0xB6, 0xB2, 0x03, 0xE9, 0x9C, 0xA3, 0x04, + 0x82, 0x19, 0x46, 0xD9, 0x80, 0xD9, 0x8E, 0xD9, + 0x91, 0x21, 0x46, 0xD9, 0x80, 0xD9, 0x8F, 0xD9, + 0x91, 0x21, 0x46, 0xD9, 0x80, 0xD9, 0x90, 0xD9, + 0x91, 0x21, 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, + 0x93, 0xE6, 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, + 0x94, 0xE6, 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, + 0x95, 0xDC, 0x46, 0xE0, 0xA4, 0x95, 0xE0, 0xA4, + 0xBC, 0x07, 0x46, 0xE0, 0xA4, 0x96, 0xE0, 0xA4, // Bytes 4440 - 447f - 0xF0, 0xA9, 0x85, 0x85, 0x04, 0xF0, 0xA9, 0x88, - 0x9A, 0x03, 0xE4, 0xA9, 0xAE, 0x03, 0xE4, 0xA9, - 0xB6, 0x03, 0xE9, 0x9F, 0xA0, 0x04, 0xF0, 0xA9, - 0x90, 0x8A, 0x03, 0xE4, 0xAA, 0xB2, 0x04, 0xF0, - 0xA9, 0x92, 0x96, 0x03, 0xE9, 0xA0, 0xA9, 0x04, - 0xF0, 0xA9, 0x96, 0xB6, 0x03, 0xE9, 0xA3, 0xA2, - 0x03, 0xE4, 0xAC, 0xB3, 0x03, 0xE9, 0xA4, 0xA9, - 0x03, 0xE9, 0xA6, 0xA7, 0x03, 0xE9, 0xA7, 0x82, + 0xBC, 0x07, 0x46, 0xE0, 0xA4, 0x97, 0xE0, 0xA4, + 0xBC, 0x07, 0x46, 0xE0, 0xA4, 0x9C, 0xE0, 0xA4, + 0xBC, 0x07, 0x46, 0xE0, 0xA4, 0xA1, 0xE0, 0xA4, + 0xBC, 0x07, 0x46, 0xE0, 0xA4, 0xA2, 0xE0, 0xA4, + 0xBC, 0x07, 0x46, 0xE0, 0xA4, 0xAB, 0xE0, 0xA4, + 0xBC, 0x07, 0x46, 0xE0, 0xA4, 0xAF, 0xE0, 0xA4, + 0xBC, 0x07, 0x46, 0xE0, 0xA6, 0xA1, 0xE0, 0xA6, + 0xBC, 0x07, 0x46, 0xE0, 0xA6, 0xA2, 0xE0, 0xA6, // Bytes 4480 - 44bf - 0x03, 0xE9, 0xA7, 0xBE, 0x03, 0xE4, 0xAF, 0x8E, - 0x04, 0xF0, 0xA9, 0xAC, 0xB0, 0x03, 0xE9, 0xB1, - 0x80, 0x03, 0xE9, 0xB3, 0xBD, 0x03, 0xE4, 0xB3, - 0x8E, 0x03, 0xE4, 0xB3, 0xAD, 0x03, 0xE9, 0xB5, - 0xA7, 0x04, 0xF0, 0xAA, 0x83, 0x8E, 0x03, 0xE4, - 0xB3, 0xB8, 0x04, 0xF0, 0xAA, 0x84, 0x85, 0x04, - 0xF0, 0xAA, 0x88, 0x8E, 0x04, 0xF0, 0xAA, 0x8A, - 0x91, 0x03, 0xE4, 0xB5, 0x96, 0x03, 0xE9, 0xBB, + 0xBC, 0x07, 0x46, 0xE0, 0xA6, 0xAF, 0xE0, 0xA6, + 0xBC, 0x07, 0x46, 0xE0, 0xA8, 0x96, 0xE0, 0xA8, + 0xBC, 0x07, 0x46, 0xE0, 0xA8, 0x97, 0xE0, 0xA8, + 0xBC, 0x07, 0x46, 0xE0, 0xA8, 0x9C, 0xE0, 0xA8, + 0xBC, 0x07, 0x46, 0xE0, 0xA8, 0xAB, 0xE0, 0xA8, + 0xBC, 0x07, 0x46, 0xE0, 0xA8, 0xB2, 0xE0, 0xA8, + 0xBC, 0x07, 0x46, 0xE0, 0xA8, 0xB8, 0xE0, 0xA8, + 0xBC, 0x07, 0x46, 0xE0, 0xAC, 0xA1, 0xE0, 0xAC, // Bytes 44c0 - 44ff - 0xBE, 0x03, 0xE9, 0xBC, 0x85, 0x03, 0xE9, 0xBC, - 0x8F, 0x03, 0xE9, 0xBC, 0x96, 0x04, 0xF0, 0xAA, - 0x98, 0x80, + 0xBC, 0x07, 0x46, 0xE0, 0xAC, 0xA2, 0xE0, 0xAC, + 0xBC, 0x07, 0x46, 0xE0, 0xBE, 0xB2, 0xE0, 0xBE, + 0x80, 0x82, 0x46, 0xE0, 0xBE, 0xB3, 0xE0, 0xBE, + 0x80, 0x82, 0x46, 0xE3, 0x83, 0x86, 0xE3, 0x82, + 0x99, 0x08, 0x48, 0xF0, 0x9D, 0x85, 0x97, 0xF0, + 0x9D, 0x85, 0xA5, 0xD8, 0x48, 0xF0, 0x9D, 0x85, + 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xD8, 0x48, 0xF0, + 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xD8, + // Bytes 4500 - 453f + 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, + 0xA5, 0xD8, 0x49, 0xE0, 0xBE, 0xB2, 0xE0, 0xBD, + 0xB1, 0xE0, 0xBE, 0x80, 0x82, 0x49, 0xE0, 0xBE, + 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x82, + 0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3, + 0x82, 0x99, 0x08, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, + 0x82, 0x99, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, + 0x08, 0x4C, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, + // Bytes 4540 - 457f + 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x08, 0x4C, + 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0x88, 0xE3, 0x82, 0x99, 0x08, 0x4C, 0xF0, 0x9D, + 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, + 0x85, 0xAE, 0xD8, 0x4C, 0xF0, 0x9D, 0x85, 0x98, + 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, + 0xD8, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, + 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB0, 0xD8, 0x4C, + // Bytes 4580 - 45bf + 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, + 0xF0, 0x9D, 0x85, 0xB1, 0xD8, 0x4C, 0xF0, 0x9D, + 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, + 0x85, 0xB2, 0xD8, 0x4C, 0xF0, 0x9D, 0x86, 0xB9, + 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, + 0xD8, 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, + 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xD8, 0x4C, + 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, + // Bytes 45c0 - 45ff + 0xF0, 0x9D, 0x85, 0xAE, 0xD8, 0x4C, 0xF0, 0x9D, + 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, + 0x85, 0xAF, 0xD8, 0x4F, 0xE3, 0x82, 0xA4, 0xE3, + 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xAF, + 0xE3, 0x82, 0x99, 0x08, 0x4F, 0xE3, 0x82, 0xB7, + 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, + 0xAF, 0xE3, 0x82, 0x99, 0x08, 0x4F, 0xE3, 0x83, + 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, + // Bytes 4600 - 463f + 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x08, 0x4F, 0xE3, + 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x08, 0x52, + 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3, 0x82, + 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, + 0x82, 0x99, 0x08, 0x52, 0xE3, 0x83, 0x95, 0xE3, + 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, + 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x08, 0x83, + // Bytes 4640 - 467f + 0x41, 0xCC, 0x82, 0xE6, 0x83, 0x41, 0xCC, 0x86, + 0xE6, 0x83, 0x41, 0xCC, 0x87, 0xE6, 0x83, 0x41, + 0xCC, 0x88, 0xE6, 0x83, 0x41, 0xCC, 0x8A, 0xE6, + 0x83, 0x41, 0xCC, 0xA3, 0xDC, 0x83, 0x43, 0xCC, + 0xA7, 0xCA, 0x83, 0x45, 0xCC, 0x82, 0xE6, 0x83, + 0x45, 0xCC, 0x84, 0xE6, 0x83, 0x45, 0xCC, 0xA3, + 0xDC, 0x83, 0x45, 0xCC, 0xA7, 0xCA, 0x83, 0x49, + 0xCC, 0x88, 0xE6, 0x83, 0x4C, 0xCC, 0xA3, 0xDC, + // Bytes 4680 - 46bf + 0x83, 0x4F, 0xCC, 0x82, 0xE6, 0x83, 0x4F, 0xCC, + 0x83, 0xE6, 0x83, 0x4F, 0xCC, 0x84, 0xE6, 0x83, + 0x4F, 0xCC, 0x87, 0xE6, 0x83, 0x4F, 0xCC, 0x88, + 0xE6, 0x83, 0x4F, 0xCC, 0x9B, 0xD8, 0x83, 0x4F, + 0xCC, 0xA3, 0xDC, 0x83, 0x4F, 0xCC, 0xA8, 0xCA, + 0x83, 0x52, 0xCC, 0xA3, 0xDC, 0x83, 0x53, 0xCC, + 0x81, 0xE6, 0x83, 0x53, 0xCC, 0x8C, 0xE6, 0x83, + 0x53, 0xCC, 0xA3, 0xDC, 0x83, 0x55, 0xCC, 0x83, + // Bytes 46c0 - 46ff + 0xE6, 0x83, 0x55, 0xCC, 0x84, 0xE6, 0x83, 0x55, + 0xCC, 0x88, 0xE6, 0x83, 0x55, 0xCC, 0x9B, 0xD8, + 0x83, 0x61, 0xCC, 0x82, 0xE6, 0x83, 0x61, 0xCC, + 0x86, 0xE6, 0x83, 0x61, 0xCC, 0x87, 0xE6, 0x83, + 0x61, 0xCC, 0x88, 0xE6, 0x83, 0x61, 0xCC, 0x8A, + 0xE6, 0x83, 0x61, 0xCC, 0xA3, 0xDC, 0x83, 0x63, + 0xCC, 0xA7, 0xCA, 0x83, 0x65, 0xCC, 0x82, 0xE6, + 0x83, 0x65, 0xCC, 0x84, 0xE6, 0x83, 0x65, 0xCC, + // Bytes 4700 - 473f + 0xA3, 0xDC, 0x83, 0x65, 0xCC, 0xA7, 0xCA, 0x83, + 0x69, 0xCC, 0x88, 0xE6, 0x83, 0x6C, 0xCC, 0xA3, + 0xDC, 0x83, 0x6F, 0xCC, 0x82, 0xE6, 0x83, 0x6F, + 0xCC, 0x83, 0xE6, 0x83, 0x6F, 0xCC, 0x84, 0xE6, + 0x83, 0x6F, 0xCC, 0x87, 0xE6, 0x83, 0x6F, 0xCC, + 0x88, 0xE6, 0x83, 0x6F, 0xCC, 0x9B, 0xD8, 0x83, + 0x6F, 0xCC, 0xA3, 0xDC, 0x83, 0x6F, 0xCC, 0xA8, + 0xCA, 0x83, 0x72, 0xCC, 0xA3, 0xDC, 0x83, 0x73, + // Bytes 4740 - 477f + 0xCC, 0x81, 0xE6, 0x83, 0x73, 0xCC, 0x8C, 0xE6, + 0x83, 0x73, 0xCC, 0xA3, 0xDC, 0x83, 0x75, 0xCC, + 0x83, 0xE6, 0x83, 0x75, 0xCC, 0x84, 0xE6, 0x83, + 0x75, 0xCC, 0x88, 0xE6, 0x83, 0x75, 0xCC, 0x9B, + 0xD8, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xE6, 0x84, + 0xCE, 0x91, 0xCC, 0x94, 0xE6, 0x84, 0xCE, 0x95, + 0xCC, 0x93, 0xE6, 0x84, 0xCE, 0x95, 0xCC, 0x94, + 0xE6, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xE6, 0x84, + // Bytes 4780 - 47bf + 0xCE, 0x97, 0xCC, 0x94, 0xE6, 0x84, 0xCE, 0x99, + 0xCC, 0x93, 0xE6, 0x84, 0xCE, 0x99, 0xCC, 0x94, + 0xE6, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xE6, 0x84, + 0xCE, 0x9F, 0xCC, 0x94, 0xE6, 0x84, 0xCE, 0xA5, + 0xCC, 0x94, 0xE6, 0x84, 0xCE, 0xA9, 0xCC, 0x93, + 0xE6, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xE6, 0x84, + 0xCE, 0xB1, 0xCC, 0x80, 0xE6, 0x84, 0xCE, 0xB1, + 0xCC, 0x81, 0xE6, 0x84, 0xCE, 0xB1, 0xCC, 0x93, + // Bytes 47c0 - 47ff + 0xE6, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xE6, 0x84, + 0xCE, 0xB1, 0xCD, 0x82, 0xE6, 0x84, 0xCE, 0xB5, + 0xCC, 0x93, 0xE6, 0x84, 0xCE, 0xB5, 0xCC, 0x94, + 0xE6, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xE6, 0x84, + 0xCE, 0xB7, 0xCC, 0x81, 0xE6, 0x84, 0xCE, 0xB7, + 0xCC, 0x93, 0xE6, 0x84, 0xCE, 0xB7, 0xCC, 0x94, + 0xE6, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xE6, 0x84, + 0xCE, 0xB9, 0xCC, 0x88, 0xE6, 0x84, 0xCE, 0xB9, + // Bytes 4800 - 483f + 0xCC, 0x93, 0xE6, 0x84, 0xCE, 0xB9, 0xCC, 0x94, + 0xE6, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xE6, 0x84, + 0xCE, 0xBF, 0xCC, 0x94, 0xE6, 0x84, 0xCF, 0x85, + 0xCC, 0x88, 0xE6, 0x84, 0xCF, 0x85, 0xCC, 0x93, + 0xE6, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xE6, 0x84, + 0xCF, 0x89, 0xCC, 0x80, 0xE6, 0x84, 0xCF, 0x89, + 0xCC, 0x81, 0xE6, 0x84, 0xCF, 0x89, 0xCC, 0x93, + 0xE6, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xE6, 0x84, + // Bytes 4840 - 487f + 0xCF, 0x89, 0xCD, 0x82, 0xE6, 0x86, 0xCE, 0x91, + 0xCC, 0x93, 0xCC, 0x80, 0xE6, 0x86, 0xCE, 0x91, + 0xCC, 0x93, 0xCC, 0x81, 0xE6, 0x86, 0xCE, 0x91, + 0xCC, 0x93, 0xCD, 0x82, 0xE6, 0x86, 0xCE, 0x91, + 0xCC, 0x94, 0xCC, 0x80, 0xE6, 0x86, 0xCE, 0x91, + 0xCC, 0x94, 0xCC, 0x81, 0xE6, 0x86, 0xCE, 0x91, + 0xCC, 0x94, 0xCD, 0x82, 0xE6, 0x86, 0xCE, 0x97, + 0xCC, 0x93, 0xCC, 0x80, 0xE6, 0x86, 0xCE, 0x97, + // Bytes 4880 - 48bf + 0xCC, 0x93, 0xCC, 0x81, 0xE6, 0x86, 0xCE, 0x97, + 0xCC, 0x93, 0xCD, 0x82, 0xE6, 0x86, 0xCE, 0x97, + 0xCC, 0x94, 0xCC, 0x80, 0xE6, 0x86, 0xCE, 0x97, + 0xCC, 0x94, 0xCC, 0x81, 0xE6, 0x86, 0xCE, 0x97, + 0xCC, 0x94, 0xCD, 0x82, 0xE6, 0x86, 0xCE, 0xA9, + 0xCC, 0x93, 0xCC, 0x80, 0xE6, 0x86, 0xCE, 0xA9, + 0xCC, 0x93, 0xCC, 0x81, 0xE6, 0x86, 0xCE, 0xA9, + 0xCC, 0x93, 0xCD, 0x82, 0xE6, 0x86, 0xCE, 0xA9, + // Bytes 48c0 - 48ff + 0xCC, 0x94, 0xCC, 0x80, 0xE6, 0x86, 0xCE, 0xA9, + 0xCC, 0x94, 0xCC, 0x81, 0xE6, 0x86, 0xCE, 0xA9, + 0xCC, 0x94, 0xCD, 0x82, 0xE6, 0x86, 0xCE, 0xB1, + 0xCC, 0x93, 0xCC, 0x80, 0xE6, 0x86, 0xCE, 0xB1, + 0xCC, 0x93, 0xCC, 0x81, 0xE6, 0x86, 0xCE, 0xB1, + 0xCC, 0x93, 0xCD, 0x82, 0xE6, 0x86, 0xCE, 0xB1, + 0xCC, 0x94, 0xCC, 0x80, 0xE6, 0x86, 0xCE, 0xB1, + 0xCC, 0x94, 0xCC, 0x81, 0xE6, 0x86, 0xCE, 0xB1, + // Bytes 4900 - 493f + 0xCC, 0x94, 0xCD, 0x82, 0xE6, 0x86, 0xCE, 0xB7, + 0xCC, 0x93, 0xCC, 0x80, 0xE6, 0x86, 0xCE, 0xB7, + 0xCC, 0x93, 0xCC, 0x81, 0xE6, 0x86, 0xCE, 0xB7, + 0xCC, 0x93, 0xCD, 0x82, 0xE6, 0x86, 0xCE, 0xB7, + 0xCC, 0x94, 0xCC, 0x80, 0xE6, 0x86, 0xCE, 0xB7, + 0xCC, 0x94, 0xCC, 0x81, 0xE6, 0x86, 0xCE, 0xB7, + 0xCC, 0x94, 0xCD, 0x82, 0xE6, 0x86, 0xCF, 0x89, + 0xCC, 0x93, 0xCC, 0x80, 0xE6, 0x86, 0xCF, 0x89, + // Bytes 4940 - 497f + 0xCC, 0x93, 0xCC, 0x81, 0xE6, 0x86, 0xCF, 0x89, + 0xCC, 0x93, 0xCD, 0x82, 0xE6, 0x86, 0xCF, 0x89, + 0xCC, 0x94, 0xCC, 0x80, 0xE6, 0x86, 0xCF, 0x89, + 0xCC, 0x94, 0xCC, 0x81, 0xE6, 0x86, 0xCF, 0x89, + 0xCC, 0x94, 0xCD, 0x82, 0xE6, 0x42, 0xCC, 0x80, + 0xE6, 0xE6, 0x42, 0xCC, 0x81, 0xE6, 0xE6, 0x42, + 0xCC, 0x93, 0xE6, 0xE6, 0x43, 0xE3, 0x82, 0x99, + 0x08, 0x08, 0x43, 0xE3, 0x82, 0x9A, 0x08, 0x08, + // Bytes 4980 - 49bf + 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xE6, 0xE6, 0x46, + 0xE0, 0xBD, 0xB1, 0xE0, 0xBD, 0xB2, 0x82, 0x81, + 0x46, 0xE0, 0xBD, 0xB1, 0xE0, 0xBD, 0xB4, 0x84, + 0x81, 0x46, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, + 0x82, 0x81, } -// nfcDecompValues: 1408 entries, 2816 bytes +// nfcValues: 2944 entries, 5888 bytes // Block 2 is the null block. -var nfcDecompValues = [1408]uint16{ +var nfcValues = [2944]uint16{ // Block 0x0, offset 0x0 + 0x003c: 0x8800, 0x003d: 0x8800, 0x003e: 0x8800, // Block 0x1, offset 0x40 + 0x0041: 0x8800, 0x0042: 0x8800, 0x0043: 0x8800, 0x0044: 0x8800, 0x0045: 0x8800, + 0x0046: 0x8800, 0x0047: 0x8800, 0x0048: 0x8800, 0x0049: 0x8800, 0x004a: 0x8800, 0x004b: 0x8800, + 0x004c: 0x8800, 0x004d: 0x8800, 0x004e: 0x8800, 0x004f: 0x8800, 0x0050: 0x8800, + 0x0052: 0x8800, 0x0053: 0x8800, 0x0054: 0x8800, 0x0055: 0x8800, 0x0056: 0x8800, 0x0057: 0x8800, + 0x0058: 0x8800, 0x0059: 0x8800, 0x005a: 0x8800, + 0x0061: 0x8800, 0x0062: 0x8800, 0x0063: 0x8800, + 0x0064: 0x8800, 0x0065: 0x8800, 0x0066: 0x8800, 0x0067: 0x8800, 0x0068: 0x8800, 0x0069: 0x8800, + 0x006a: 0x8800, 0x006b: 0x8800, 0x006c: 0x8800, 0x006d: 0x8800, 0x006e: 0x8800, 0x006f: 0x8800, + 0x0070: 0x8800, 0x0072: 0x8800, 0x0073: 0x8800, 0x0074: 0x8800, 0x0075: 0x8800, + 0x0076: 0x8800, 0x0077: 0x8800, 0x0078: 0x8800, 0x0079: 0x8800, 0x007a: 0x8800, // Block 0x2, offset 0x80 // Block 0x3, offset 0xc0 - 0x00cd: 0x02fb, 0x00ce: 0x02ff, 0x00cf: 0x0303, 0x00d0: 0x0307, 0x00d1: 0x030b, - 0x00d2: 0x030f, 0x00d3: 0x0313, 0x00d4: 0x0317, 0x00d5: 0x031b, 0x00d6: 0x0321, 0x00d7: 0x0327, - 0x00d8: 0x032d, 0x00d9: 0x0333, 0x00da: 0x0339, 0x00db: 0x033f, 0x00dc: 0x0345, - 0x00de: 0x034b, 0x00df: 0x0351, 0x00e0: 0x0357, 0x00e1: 0x035d, 0x00e2: 0x0363, 0x00e3: 0x0368, - 0x00e6: 0x036d, 0x00e7: 0x0371, 0x00e8: 0x0375, 0x00e9: 0x0379, - 0x00ea: 0x037d, 0x00eb: 0x0381, 0x00ec: 0x0385, 0x00ed: 0x038b, 0x00ee: 0x0391, 0x00ef: 0x0396, - 0x00f0: 0x039b, 0x00f4: 0x03a8, 0x00f5: 0x03ac, - 0x00f8: 0x03b0, 0x00f9: 0x03b4, 0x00fa: 0x03b8, 0x00fb: 0x03be, - 0x00fc: 0x03c4, 0x00fd: 0x03c9, 0x00fe: 0x03ce, 0x00ff: 0x03d3, + 0x00c0: 0x2e54, 0x00c1: 0x2e59, 0x00c2: 0x463f, 0x00c3: 0x2e5e, 0x00c4: 0x464e, 0x00c5: 0x4653, + 0x00c6: 0x8800, 0x00c7: 0x465d, 0x00c8: 0x2ec7, 0x00c9: 0x2ecc, 0x00ca: 0x4662, 0x00cb: 0x2ee0, + 0x00cc: 0x2f53, 0x00cd: 0x2f58, 0x00ce: 0x2f5d, 0x00cf: 0x4676, 0x00d1: 0x2fe9, + 0x00d2: 0x300c, 0x00d3: 0x3011, 0x00d4: 0x4680, 0x00d5: 0x4685, 0x00d6: 0x4694, + 0x00d8: 0x8800, 0x00d9: 0x3098, 0x00da: 0x309d, 0x00db: 0x30a2, 0x00dc: 0x46c6, 0x00dd: 0x311a, + 0x00e0: 0x3160, 0x00e1: 0x3165, 0x00e2: 0x46d0, 0x00e3: 0x316a, + 0x00e4: 0x46df, 0x00e5: 0x46e4, 0x00e6: 0x8800, 0x00e7: 0x46ee, 0x00e8: 0x31d3, 0x00e9: 0x31d8, + 0x00ea: 0x46f3, 0x00eb: 0x31ec, 0x00ec: 0x3264, 0x00ed: 0x3269, 0x00ee: 0x326e, 0x00ef: 0x4707, + 0x00f1: 0x32fa, 0x00f2: 0x331d, 0x00f3: 0x3322, 0x00f4: 0x4711, 0x00f5: 0x4716, + 0x00f6: 0x4725, 0x00f8: 0x8800, 0x00f9: 0x33ae, 0x00fa: 0x33b3, 0x00fb: 0x33b8, + 0x00fc: 0x4757, 0x00fd: 0x3435, 0x00ff: 0x344e, // Block 0x4, offset 0x100 - 0x0100: 0x0b02, 0x0101: 0x0b06, 0x0102: 0x0b0a, 0x0103: 0x0b0e, 0x0104: 0x0b12, 0x0105: 0x0b16, - 0x0106: 0x0b1a, 0x0107: 0x0b1e, 0x0108: 0x0b22, 0x0109: 0x0b26, 0x010a: 0x0b2a, 0x010b: 0x0b2e, - 0x010c: 0x0b32, 0x010d: 0x0b38, 0x010e: 0x0b3e, 0x010f: 0x0b44, 0x0110: 0x0b4a, 0x0111: 0x0b50, - 0x0112: 0x0b56, 0x0113: 0x0b5c, 0x0114: 0x0b62, 0x0115: 0x0b66, 0x0116: 0x0b6a, 0x0117: 0x0b6e, - 0x0118: 0x0b72, 0x0119: 0x0b76, 0x011a: 0x0b7a, 0x011b: 0x0b7e, 0x011c: 0x0b82, 0x011d: 0x0b88, - 0x011e: 0x0b8e, 0x011f: 0x0b92, 0x0120: 0x0b96, 0x0121: 0x0b9a, 0x0122: 0x0b9e, 0x0123: 0x0ba2, - 0x0124: 0x0ba6, 0x0125: 0x0bac, 0x0126: 0x0bb2, 0x0127: 0x0bb8, 0x0128: 0x0bbe, 0x0129: 0x0bc4, - 0x012a: 0x0bca, 0x012b: 0x0bce, 0x012c: 0x0bd2, 0x012d: 0x0bd6, 0x012e: 0x0bda, 0x012f: 0x0bde, - 0x0130: 0x0be2, 0x0131: 0x0be6, 0x0132: 0x0bea, 0x0133: 0x0bee, 0x0134: 0x0bf2, 0x0135: 0x0bf6, - 0x0136: 0x0bfa, 0x0137: 0x0bfe, 0x0138: 0x0c02, 0x0139: 0x0c08, 0x013a: 0x0c0e, 0x013b: 0x0c14, - 0x013c: 0x0c1a, 0x013d: 0x0c1e, 0x013e: 0x0c22, 0x013f: 0x0c26, + 0x0100: 0x2e63, 0x0101: 0x316f, 0x0102: 0x4644, 0x0103: 0x46d5, 0x0104: 0x2e81, 0x0105: 0x318d, + 0x0106: 0x2e95, 0x0107: 0x31a1, 0x0108: 0x2e9a, 0x0109: 0x31a6, 0x010a: 0x2e9f, 0x010b: 0x31ab, + 0x010c: 0x2ea4, 0x010d: 0x31b0, 0x010e: 0x2eae, 0x010f: 0x31ba, + 0x0112: 0x4667, 0x0113: 0x46f8, 0x0114: 0x2ed6, 0x0115: 0x31e2, 0x0116: 0x2edb, 0x0117: 0x31e7, + 0x0118: 0x2ef9, 0x0119: 0x3205, 0x011a: 0x2eea, 0x011b: 0x31f6, 0x011c: 0x2f12, 0x011d: 0x321e, + 0x011e: 0x2f1c, 0x011f: 0x3228, 0x0120: 0x2f21, 0x0121: 0x322d, 0x0122: 0x2f2b, 0x0123: 0x3237, + 0x0124: 0x2f30, 0x0125: 0x323c, 0x0128: 0x2f62, 0x0129: 0x3273, + 0x012a: 0x2f67, 0x012b: 0x3278, 0x012c: 0x2f6c, 0x012d: 0x327d, 0x012e: 0x2f8f, 0x012f: 0x329b, + 0x0130: 0x2f71, 0x0134: 0x2f99, 0x0135: 0x32a5, + 0x0136: 0x2fad, 0x0137: 0x32be, 0x0139: 0x2fb7, 0x013a: 0x32c8, 0x013b: 0x2fc1, + 0x013c: 0x32d2, 0x013d: 0x2fbc, 0x013e: 0x32cd, // Block 0x5, offset 0x140 - 0x0140: 0x0c2a, 0x0141: 0x0c2e, 0x0142: 0x0c32, 0x0143: 0x0c36, 0x0144: 0x0c3a, 0x0145: 0x0c3e, - 0x0146: 0x0c42, 0x0147: 0x0c46, 0x0148: 0x0c4a, 0x0149: 0x0c4e, 0x014a: 0x0c52, 0x014b: 0x0c56, - 0x014c: 0x0c5a, 0x014d: 0x0c5e, 0x014e: 0x0c62, 0x014f: 0x0c66, 0x0150: 0x0c6a, 0x0151: 0x0c6e, - 0x0152: 0x0c72, 0x0153: 0x0c76, 0x0154: 0x0c7a, 0x0155: 0x0c7e, 0x0156: 0x0c82, 0x0157: 0x0c86, - 0x0158: 0x0c8a, 0x0159: 0x0c8e, 0x015b: 0x0c96, - 0x0160: 0x0c9b, 0x0161: 0x0c9f, 0x0162: 0x0ca3, 0x0163: 0x0ca7, - 0x0164: 0x0cab, 0x0165: 0x0cb1, 0x0166: 0x0cb7, 0x0167: 0x0cbd, 0x0168: 0x0cc3, 0x0169: 0x0cc9, - 0x016a: 0x0ccf, 0x016b: 0x0cd5, 0x016c: 0x0cdb, 0x016d: 0x0ce1, 0x016e: 0x0ce7, 0x016f: 0x0ced, - 0x0170: 0x0cf3, 0x0171: 0x0cf9, 0x0172: 0x0cff, 0x0173: 0x0d05, 0x0174: 0x0d0b, 0x0175: 0x0d11, - 0x0176: 0x0d17, 0x0177: 0x0d1d, 0x0178: 0x0d23, 0x0179: 0x0d27, 0x017a: 0x0d2b, 0x017b: 0x0d2f, - 0x017c: 0x0d33, 0x017d: 0x0d37, 0x017e: 0x0d3b, 0x017f: 0x0d41, + 0x0143: 0x2fe4, 0x0144: 0x32f5, 0x0145: 0x2ffd, + 0x0146: 0x330e, 0x0147: 0x2ff3, 0x0148: 0x3304, + 0x014c: 0x468a, 0x014d: 0x471b, 0x014e: 0x3016, 0x014f: 0x3327, 0x0150: 0x3020, 0x0151: 0x3331, + 0x0154: 0x303e, 0x0155: 0x334f, 0x0156: 0x3057, 0x0157: 0x3368, + 0x0158: 0x3048, 0x0159: 0x3359, 0x015a: 0x46ad, 0x015b: 0x473e, 0x015c: 0x3061, 0x015d: 0x3372, + 0x015e: 0x3070, 0x015f: 0x3381, 0x0160: 0x46b2, 0x0161: 0x4743, 0x0162: 0x3089, 0x0163: 0x339f, + 0x0164: 0x307a, 0x0165: 0x3390, 0x0168: 0x46bc, 0x0169: 0x474d, + 0x016a: 0x46c1, 0x016b: 0x4752, 0x016c: 0x30a7, 0x016d: 0x33bd, 0x016e: 0x30b1, 0x016f: 0x33c7, + 0x0170: 0x30b6, 0x0171: 0x33cc, 0x0172: 0x30d4, 0x0173: 0x33ea, 0x0174: 0x30f7, 0x0175: 0x340d, + 0x0176: 0x311f, 0x0177: 0x343a, 0x0178: 0x3133, 0x0179: 0x3142, 0x017a: 0x3462, 0x017b: 0x314c, + 0x017c: 0x346c, 0x017d: 0x3151, 0x017e: 0x3471, 0x017f: 0x8800, // Block 0x6, offset 0x180 - 0x0180: 0x0d47, 0x0181: 0x0d4d, 0x0182: 0x0d53, 0x0183: 0x0d59, 0x0184: 0x0d5f, 0x0185: 0x0d65, - 0x0186: 0x0d6b, 0x0187: 0x0d71, 0x0188: 0x0d77, 0x0189: 0x0d7b, 0x018a: 0x0d7f, 0x018b: 0x0d83, - 0x018c: 0x0d87, 0x018d: 0x0d8b, 0x018e: 0x0d8f, 0x018f: 0x0d93, 0x0190: 0x0d97, 0x0191: 0x0d9d, - 0x0192: 0x0da3, 0x0193: 0x0da9, 0x0194: 0x0daf, 0x0195: 0x0db5, 0x0196: 0x0dbb, 0x0197: 0x0dc1, - 0x0198: 0x0dc7, 0x0199: 0x0dcd, 0x019a: 0x0dd3, 0x019b: 0x0dd9, 0x019c: 0x0ddf, 0x019d: 0x0de5, - 0x019e: 0x0deb, 0x019f: 0x0df1, 0x01a0: 0x0df7, 0x01a1: 0x0dfd, 0x01a2: 0x0e03, 0x01a3: 0x0e09, - 0x01a4: 0x0e0f, 0x01a5: 0x0e13, 0x01a6: 0x0e17, 0x01a7: 0x0e1b, 0x01a8: 0x0e1f, 0x01a9: 0x0e25, - 0x01aa: 0x0e2b, 0x01ab: 0x0e31, 0x01ac: 0x0e37, 0x01ad: 0x0e3d, 0x01ae: 0x0e43, 0x01af: 0x0e49, - 0x01b0: 0x0e4f, 0x01b1: 0x0e55, 0x01b2: 0x0e5b, 0x01b3: 0x0e5f, 0x01b4: 0x0e63, 0x01b5: 0x0e67, - 0x01b6: 0x0e6b, 0x01b7: 0x0e6f, 0x01b8: 0x0e73, 0x01b9: 0x0e77, + 0x018d: 0x2e6d, 0x018e: 0x3179, 0x018f: 0x2f7b, 0x0190: 0x3287, 0x0191: 0x3025, + 0x0192: 0x3336, 0x0193: 0x30bb, 0x0194: 0x33d1, 0x0195: 0x38b4, 0x0196: 0x3a43, 0x0197: 0x38ad, + 0x0198: 0x3a3c, 0x0199: 0x38bb, 0x019a: 0x3a4a, 0x019b: 0x38a6, 0x019c: 0x3a35, + 0x019e: 0x3795, 0x019f: 0x3924, 0x01a0: 0x378e, 0x01a1: 0x391d, 0x01a2: 0x3498, 0x01a3: 0x34aa, + 0x01a6: 0x2f26, 0x01a7: 0x3232, 0x01a8: 0x2fa3, 0x01a9: 0x32b4, + 0x01aa: 0x46a3, 0x01ab: 0x4734, 0x01ac: 0x3875, 0x01ad: 0x3a04, 0x01ae: 0x34bc, 0x01af: 0x34c2, + 0x01b0: 0x32aa, 0x01b4: 0x2f0d, 0x01b5: 0x3219, + 0x01b8: 0x2fdf, 0x01b9: 0x32f0, 0x01ba: 0x379c, 0x01bb: 0x392b, + 0x01bc: 0x3492, 0x01bd: 0x34a4, 0x01be: 0x349e, 0x01bf: 0x34b0, // Block 0x7, offset 0x1c0 - 0x01c0: 0x0e7b, 0x01c1: 0x0e80, 0x01c2: 0x0e85, 0x01c3: 0x0e8c, 0x01c4: 0x0e93, 0x01c5: 0x0e9a, - 0x01c6: 0x0ea1, 0x01c7: 0x0ea8, 0x01c8: 0x0eaf, 0x01c9: 0x0eb4, 0x01ca: 0x0eb9, 0x01cb: 0x0ec0, - 0x01cc: 0x0ec7, 0x01cd: 0x0ece, 0x01ce: 0x0ed5, 0x01cf: 0x0edc, 0x01d0: 0x0ee3, 0x01d1: 0x0ee8, - 0x01d2: 0x0eed, 0x01d3: 0x0ef4, 0x01d4: 0x0efb, 0x01d5: 0x0f02, - 0x01d8: 0x0f09, 0x01d9: 0x0f0e, 0x01da: 0x0f13, 0x01db: 0x0f1a, 0x01dc: 0x0f21, 0x01dd: 0x0f28, - 0x01e0: 0x0f2f, 0x01e1: 0x0f34, 0x01e2: 0x0f39, 0x01e3: 0x0f40, - 0x01e4: 0x0f47, 0x01e5: 0x0f4e, 0x01e6: 0x0f55, 0x01e7: 0x0f5c, 0x01e8: 0x0f63, 0x01e9: 0x0f68, - 0x01ea: 0x0f6d, 0x01eb: 0x0f74, 0x01ec: 0x0f7b, 0x01ed: 0x0f82, 0x01ee: 0x0f89, 0x01ef: 0x0f90, - 0x01f0: 0x0f97, 0x01f1: 0x0f9c, 0x01f2: 0x0fa1, 0x01f3: 0x0fa8, 0x01f4: 0x0faf, 0x01f5: 0x0fb6, - 0x01f6: 0x0fbd, 0x01f7: 0x0fc4, 0x01f8: 0x0fcb, 0x01f9: 0x0fd0, 0x01fa: 0x0fd5, 0x01fb: 0x0fdc, - 0x01fc: 0x0fe3, 0x01fd: 0x0fea, 0x01fe: 0x0ff1, 0x01ff: 0x0ff8, + 0x01c0: 0x2e72, 0x01c1: 0x317e, 0x01c2: 0x2e77, 0x01c3: 0x3183, 0x01c4: 0x2eef, 0x01c5: 0x31fb, + 0x01c6: 0x2ef4, 0x01c7: 0x3200, 0x01c8: 0x2f80, 0x01c9: 0x328c, 0x01ca: 0x2f85, 0x01cb: 0x3291, + 0x01cc: 0x302a, 0x01cd: 0x333b, 0x01ce: 0x302f, 0x01cf: 0x3340, 0x01d0: 0x304d, 0x01d1: 0x335e, + 0x01d2: 0x3052, 0x01d3: 0x3363, 0x01d4: 0x30c0, 0x01d5: 0x33d6, 0x01d6: 0x30c5, 0x01d7: 0x33db, + 0x01d8: 0x306b, 0x01d9: 0x337c, 0x01da: 0x3084, 0x01db: 0x339a, + 0x01de: 0x2f3f, 0x01df: 0x324b, + 0x01e6: 0x4649, 0x01e7: 0x46da, 0x01e8: 0x4671, 0x01e9: 0x4702, + 0x01ea: 0x3844, 0x01eb: 0x39d3, 0x01ec: 0x3821, 0x01ed: 0x39b0, 0x01ee: 0x468f, 0x01ef: 0x4720, + 0x01f0: 0x383d, 0x01f1: 0x39cc, 0x01f2: 0x3129, 0x01f3: 0x3444, // Block 0x8, offset 0x200 - 0x0200: 0x0fff, 0x0201: 0x1004, 0x0202: 0x1009, 0x0203: 0x1010, 0x0204: 0x1017, 0x0205: 0x101e, - 0x0208: 0x1025, 0x0209: 0x102a, 0x020a: 0x102f, 0x020b: 0x1036, - 0x020c: 0x103d, 0x020d: 0x1044, 0x0210: 0x104b, 0x0211: 0x1050, - 0x0212: 0x1055, 0x0213: 0x105c, 0x0214: 0x1063, 0x0215: 0x106a, 0x0216: 0x1071, 0x0217: 0x1078, - 0x0219: 0x107f, 0x021b: 0x1084, 0x021d: 0x108b, - 0x021f: 0x1092, 0x0220: 0x1099, 0x0221: 0x109e, 0x0222: 0x10a3, 0x0223: 0x10aa, - 0x0224: 0x10b1, 0x0225: 0x10b8, 0x0226: 0x10bf, 0x0227: 0x10c6, 0x0228: 0x10cd, 0x0229: 0x10d2, - 0x022a: 0x10d7, 0x022b: 0x10de, 0x022c: 0x10e5, 0x022d: 0x10ec, 0x022e: 0x10f3, 0x022f: 0x10fa, - 0x0230: 0x1101, 0x0231: 0x0525, 0x0232: 0x1106, 0x0233: 0x052a, 0x0234: 0x110b, 0x0235: 0x052f, - 0x0236: 0x1110, 0x0237: 0x0534, 0x0238: 0x1115, 0x0239: 0x054a, 0x023a: 0x111a, 0x023b: 0x054f, - 0x023c: 0x111f, 0x023d: 0x0554, + 0x0200: 0x86e6, 0x0201: 0x86e6, 0x0202: 0x86e6, 0x0203: 0x86e6, 0x0204: 0x86e6, 0x0205: 0x80e6, + 0x0206: 0x86e6, 0x0207: 0x86e6, 0x0208: 0x86e6, 0x0209: 0x86e6, 0x020a: 0x86e6, 0x020b: 0x86e6, + 0x020c: 0x86e6, 0x020d: 0x80e6, 0x020e: 0x80e6, 0x020f: 0x86e6, 0x0210: 0x80e6, 0x0211: 0x86e6, + 0x0212: 0x80e6, 0x0213: 0x86e6, 0x0214: 0x86e6, 0x0215: 0x80e8, 0x0216: 0x80dc, 0x0217: 0x80dc, + 0x0218: 0x80dc, 0x0219: 0x80dc, 0x021a: 0x80e8, 0x021b: 0x86d8, 0x021c: 0x80dc, 0x021d: 0x80dc, + 0x021e: 0x80dc, 0x021f: 0x80dc, 0x0220: 0x80dc, 0x0221: 0x80ca, 0x0222: 0x80ca, 0x0223: 0x86dc, + 0x0224: 0x86dc, 0x0225: 0x86dc, 0x0226: 0x86dc, 0x0227: 0x86ca, 0x0228: 0x86ca, 0x0229: 0x80dc, + 0x022a: 0x80dc, 0x022b: 0x80dc, 0x022c: 0x80dc, 0x022d: 0x86dc, 0x022e: 0x86dc, 0x022f: 0x80dc, + 0x0230: 0x86dc, 0x0231: 0x86dc, 0x0232: 0x80dc, 0x0233: 0x80dc, 0x0234: 0x8001, 0x0235: 0x8001, + 0x0236: 0x8001, 0x0237: 0x8001, 0x0238: 0x8601, 0x0239: 0x80dc, 0x023a: 0x80dc, 0x023b: 0x80dc, + 0x023c: 0x80dc, 0x023d: 0x80e6, 0x023e: 0x80e6, 0x023f: 0x80e6, // Block 0x9, offset 0x240 - 0x0240: 0x1124, 0x0241: 0x112b, 0x0242: 0x1132, 0x0243: 0x113b, 0x0244: 0x1144, 0x0245: 0x114d, - 0x0246: 0x1156, 0x0247: 0x115f, 0x0248: 0x1168, 0x0249: 0x116f, 0x024a: 0x1176, 0x024b: 0x117f, - 0x024c: 0x1188, 0x024d: 0x1191, 0x024e: 0x119a, 0x024f: 0x11a3, 0x0250: 0x11ac, 0x0251: 0x11b3, - 0x0252: 0x11ba, 0x0253: 0x11c3, 0x0254: 0x11cc, 0x0255: 0x11d5, 0x0256: 0x11de, 0x0257: 0x11e7, - 0x0258: 0x11f0, 0x0259: 0x11f7, 0x025a: 0x11fe, 0x025b: 0x1207, 0x025c: 0x1210, 0x025d: 0x1219, - 0x025e: 0x1222, 0x025f: 0x122b, 0x0260: 0x1234, 0x0261: 0x123b, 0x0262: 0x1242, 0x0263: 0x124b, - 0x0264: 0x1254, 0x0265: 0x125d, 0x0266: 0x1266, 0x0267: 0x126f, 0x0268: 0x1278, 0x0269: 0x127f, - 0x026a: 0x1286, 0x026b: 0x128f, 0x026c: 0x1298, 0x026d: 0x12a1, 0x026e: 0x12aa, 0x026f: 0x12b3, - 0x0270: 0x12bc, 0x0271: 0x12c1, 0x0272: 0x12c6, 0x0273: 0x12cd, 0x0274: 0x12d2, - 0x0276: 0x12d9, 0x0277: 0x12de, 0x0278: 0x12e5, 0x0279: 0x12ea, 0x027a: 0x12ef, 0x027b: 0x04ee, - 0x027c: 0x12f4, 0x027e: 0x12fd, + 0x0240: 0x4965, 0x0241: 0x496a, 0x0242: 0x86e6, 0x0243: 0x496f, 0x0244: 0x4980, 0x0245: 0x86f0, + 0x0246: 0x80e6, 0x0247: 0x80dc, 0x0248: 0x80dc, 0x0249: 0x80dc, 0x024a: 0x80e6, 0x024b: 0x80e6, + 0x024c: 0x80e6, 0x024d: 0x80dc, 0x024e: 0x80dc, 0x0250: 0x80e6, 0x0251: 0x80e6, + 0x0252: 0x80e6, 0x0253: 0x80dc, 0x0254: 0x80dc, 0x0255: 0x80dc, 0x0256: 0x80dc, 0x0257: 0x80e6, + 0x0258: 0x80e8, 0x0259: 0x80dc, 0x025a: 0x80dc, 0x025b: 0x80e6, 0x025c: 0x80e9, 0x025d: 0x80ea, + 0x025e: 0x80ea, 0x025f: 0x80e9, 0x0260: 0x80ea, 0x0261: 0x80ea, 0x0262: 0x80e9, 0x0263: 0x80e6, + 0x0264: 0x80e6, 0x0265: 0x80e6, 0x0266: 0x80e6, 0x0267: 0x80e6, 0x0268: 0x80e6, 0x0269: 0x80e6, + 0x026a: 0x80e6, 0x026b: 0x80e6, 0x026c: 0x80e6, 0x026d: 0x80e6, 0x026e: 0x80e6, 0x026f: 0x80e6, + 0x0274: 0x042d, + 0x027e: 0x0105, // Block 0xa, offset 0x280 - 0x0281: 0x1304, 0x0282: 0x130f, 0x0283: 0x1316, 0x0284: 0x131b, - 0x0286: 0x1322, 0x0287: 0x1327, 0x0288: 0x132e, 0x0289: 0x04f6, 0x028a: 0x1333, 0x028b: 0x04fb, - 0x028c: 0x1338, 0x028d: 0x133d, 0x028e: 0x1349, 0x028f: 0x1355, 0x0290: 0x1361, 0x0291: 0x1366, - 0x0292: 0x136b, 0x0293: 0x0514, 0x0296: 0x1372, 0x0297: 0x1377, - 0x0298: 0x137e, 0x0299: 0x1383, 0x029a: 0x1388, 0x029b: 0x0500, 0x029d: 0x138d, - 0x029e: 0x1399, 0x029f: 0x13a5, 0x02a0: 0x13b1, 0x02a1: 0x13b6, 0x02a2: 0x13bb, 0x02a3: 0x0539, - 0x02a4: 0x13c2, 0x02a5: 0x13c7, 0x02a6: 0x13cc, 0x02a7: 0x13d1, 0x02a8: 0x13d8, 0x02a9: 0x13dd, - 0x02aa: 0x13e2, 0x02ab: 0x050a, 0x02ac: 0x13e7, 0x02ad: 0x13ec, 0x02ae: 0x04e3, 0x02af: 0x13f7, - 0x02b2: 0x13f9, 0x02b3: 0x1400, 0x02b4: 0x1405, - 0x02b6: 0x140c, 0x02b7: 0x1411, 0x02b8: 0x1418, 0x02b9: 0x0505, 0x02ba: 0x141d, 0x02bb: 0x050f, - 0x02bc: 0x1422, 0x02bd: 0x1427, + 0x0285: 0x3486, + 0x0286: 0x34ce, 0x0287: 0x0394, 0x0288: 0x34ec, 0x0289: 0x34f8, 0x028a: 0x350a, + 0x028c: 0x3528, 0x028e: 0x353a, 0x028f: 0x3558, 0x0290: 0x3ced, 0x0291: 0x8800, + 0x0295: 0x8800, 0x0297: 0x8800, + 0x0299: 0x8800, + 0x029f: 0x8800, 0x02a1: 0x8800, + 0x02a5: 0x8800, 0x02a9: 0x8800, + 0x02aa: 0x351c, 0x02ab: 0x354c, 0x02ac: 0x47b5, 0x02ad: 0x357c, 0x02ae: 0x47df, 0x02af: 0x358e, + 0x02b0: 0x3d55, 0x02b1: 0x8800, 0x02b5: 0x8800, + 0x02b7: 0x8800, 0x02b9: 0x8800, + 0x02bf: 0x8800, // Block 0xb, offset 0x2c0 - 0x02cc: 0x1b8a, 0x02ce: 0x1b91, 0x02d0: 0x1b98, - 0x02d2: 0x1b9f, 0x02d4: 0x1ba6, 0x02d6: 0x1bad, - 0x02d8: 0x1bb4, 0x02da: 0x1bbb, 0x02dc: 0x1bc2, - 0x02de: 0x1bc9, 0x02e0: 0x1bd0, 0x02e2: 0x1bd7, - 0x02e5: 0x1bde, 0x02e7: 0x1be5, 0x02e9: 0x1bec, - 0x02f0: 0x1bf3, 0x02f1: 0x1bfa, 0x02f3: 0x1c01, 0x02f4: 0x1c08, - 0x02f6: 0x1c0f, 0x02f7: 0x1c16, 0x02f9: 0x1c1d, 0x02fa: 0x1c24, - 0x02fc: 0x1c2b, 0x02fd: 0x1c32, + 0x02c0: 0x3606, 0x02c1: 0x3612, 0x02c3: 0x3600, + 0x02c6: 0x8800, 0x02c7: 0x35ee, + 0x02cc: 0x3642, 0x02cd: 0x362a, 0x02ce: 0x3654, 0x02d0: 0x8800, + 0x02d3: 0x8800, 0x02d5: 0x8800, 0x02d6: 0x8800, 0x02d7: 0x8800, + 0x02d8: 0x8800, 0x02d9: 0x3636, 0x02da: 0x8800, + 0x02de: 0x8800, 0x02e3: 0x8800, + 0x02e7: 0x8800, + 0x02eb: 0x8800, 0x02ed: 0x8800, + 0x02f0: 0x8800, 0x02f3: 0x8800, 0x02f5: 0x8800, + 0x02f6: 0x8800, 0x02f7: 0x8800, 0x02f8: 0x8800, 0x02f9: 0x36ba, 0x02fa: 0x8800, + 0x02fe: 0x8800, // Block 0xc, offset 0x300 - 0x0300: 0x2fce, 0x0301: 0x2fd2, 0x0302: 0x2fd6, 0x0303: 0x2fda, 0x0304: 0x2fde, 0x0305: 0x2fe2, - 0x0306: 0x2fe6, 0x0307: 0x2fea, 0x0308: 0x2fee, 0x0309: 0x2eed, 0x030a: 0x2ff2, 0x030b: 0x2ef1, - 0x030c: 0x2ff6, 0x030d: 0x2ffa, 0x030e: 0x2ffe, 0x030f: 0x3002, 0x0310: 0x3006, 0x0311: 0x2e6d, - 0x0312: 0x2b15, 0x0313: 0x300a, 0x0314: 0x300e, 0x0315: 0x195a, 0x0316: 0x2c25, 0x0317: 0x2d71, - 0x0318: 0x3012, 0x0319: 0x3016, 0x031a: 0x2f0d, 0x031b: 0x301a, 0x031c: 0x2f11, 0x031d: 0x301e, - 0x031e: 0x3022, 0x031f: 0x3026, 0x0320: 0x2e75, 0x0321: 0x302a, 0x0322: 0x302e, 0x0323: 0x3032, - 0x0324: 0x3036, 0x0325: 0x303a, 0x0326: 0x2e79, 0x0327: 0x303e, 0x0328: 0x3042, 0x0329: 0x3046, - 0x032a: 0x304a, 0x032b: 0x304e, 0x032c: 0x3052, 0x032d: 0x2f41, 0x032e: 0x3056, 0x032f: 0x305a, - 0x0330: 0x2cb1, 0x0331: 0x305e, 0x0332: 0x2f51, 0x0333: 0x3062, 0x0334: 0x3066, 0x0335: 0x306a, - 0x0336: 0x306e, 0x0337: 0x3072, 0x0338: 0x2f65, 0x0339: 0x3076, 0x033a: 0x2e99, 0x033b: 0x307a, - 0x033c: 0x2f69, 0x033d: 0x2bd9, 0x033e: 0x307e, 0x033f: 0x2f6d, + 0x0301: 0x3618, 0x0302: 0x369c, + 0x0310: 0x35f4, 0x0311: 0x3678, + 0x0312: 0x35fa, 0x0313: 0x367e, 0x0316: 0x360c, 0x0317: 0x3690, + 0x0318: 0x8800, 0x0319: 0x8800, 0x031a: 0x370e, 0x031b: 0x3714, 0x031c: 0x361e, 0x031d: 0x36a2, + 0x031e: 0x3624, 0x031f: 0x36a8, 0x0322: 0x3630, 0x0323: 0x36b4, + 0x0324: 0x363c, 0x0325: 0x36c0, 0x0326: 0x3648, 0x0327: 0x36cc, 0x0328: 0x8800, 0x0329: 0x8800, + 0x032a: 0x371a, 0x032b: 0x3720, 0x032c: 0x3672, 0x032d: 0x36f6, 0x032e: 0x364e, 0x032f: 0x36d2, + 0x0330: 0x365a, 0x0331: 0x36de, 0x0332: 0x3660, 0x0333: 0x36e4, 0x0334: 0x3666, 0x0335: 0x36ea, + 0x0338: 0x366c, 0x0339: 0x36f0, // Block 0xd, offset 0x340 - 0x0340: 0x3082, 0x0341: 0x2f75, 0x0342: 0x3086, 0x0343: 0x308a, 0x0344: 0x308e, 0x0345: 0x3092, - 0x0346: 0x3096, 0x0347: 0x2f7d, 0x0348: 0x2e8d, 0x0349: 0x309a, 0x034a: 0x2f81, 0x034b: 0x309e, - 0x034c: 0x2f85, 0x034d: 0x30a2, 0x034e: 0x1b76, 0x034f: 0x30a6, 0x0350: 0x30ab, 0x0351: 0x30b0, - 0x0352: 0x30b5, 0x0353: 0x30b9, 0x0354: 0x30bd, 0x0355: 0x30c1, 0x0356: 0x30c6, 0x0357: 0x30cb, - 0x0358: 0x30d0, 0x0359: 0x30d4, + 0x0351: 0x80dc, + 0x0352: 0x80e6, 0x0353: 0x80e6, 0x0354: 0x80e6, 0x0355: 0x80e6, 0x0356: 0x80dc, 0x0357: 0x80e6, + 0x0358: 0x80e6, 0x0359: 0x80e6, 0x035a: 0x80de, 0x035b: 0x80dc, 0x035c: 0x80e6, 0x035d: 0x80e6, + 0x035e: 0x80e6, 0x035f: 0x80e6, 0x0360: 0x80e6, 0x0361: 0x80e6, 0x0362: 0x80dc, 0x0363: 0x80dc, + 0x0364: 0x80dc, 0x0365: 0x80dc, 0x0366: 0x80dc, 0x0367: 0x80dc, 0x0368: 0x80e6, 0x0369: 0x80e6, + 0x036a: 0x80dc, 0x036b: 0x80e6, 0x036c: 0x80e6, 0x036d: 0x80de, 0x036e: 0x80e4, 0x036f: 0x80e6, + 0x0370: 0x800a, 0x0371: 0x800b, 0x0372: 0x800c, 0x0373: 0x800d, 0x0374: 0x800e, 0x0375: 0x800f, + 0x0376: 0x8010, 0x0377: 0x8011, 0x0378: 0x8012, 0x0379: 0x8013, 0x037a: 0x8013, 0x037b: 0x8014, + 0x037c: 0x8015, 0x037d: 0x8016, 0x037f: 0x8017, // Block 0xe, offset 0x380 - 0x0380: 0x3d23, 0x0381: 0x3d27, 0x0382: 0x3d2b, 0x0383: 0x3d2f, 0x0384: 0x3d34, 0x0385: 0x2eb5, - 0x0386: 0x3d38, 0x0387: 0x3d3c, 0x0388: 0x3d40, 0x0389: 0x3d44, 0x038a: 0x2eb9, 0x038b: 0x3d48, - 0x038c: 0x3d4c, 0x038d: 0x3d50, 0x038e: 0x2ebd, 0x038f: 0x3d55, 0x0390: 0x3d59, 0x0391: 0x3d5d, - 0x0392: 0x3d61, 0x0393: 0x3d66, 0x0394: 0x3d6a, 0x0395: 0x3c71, 0x0396: 0x3d6e, 0x0397: 0x3d73, - 0x0398: 0x3d77, 0x0399: 0x3d7b, 0x039a: 0x3d7f, 0x039b: 0x2f9a, 0x039c: 0x3d83, 0x039d: 0x1866, - 0x039e: 0x3d88, 0x039f: 0x3d8c, 0x03a0: 0x3d90, 0x03a1: 0x3d94, 0x03a2: 0x3cb9, 0x03a3: 0x3d98, - 0x03a4: 0x3d9c, 0x03a5: 0x2fae, 0x03a6: 0x2ec1, 0x03a7: 0x2ec5, 0x03a8: 0x2fb2, 0x03a9: 0x3da0, - 0x03aa: 0x3da4, 0x03ab: 0x2bf1, 0x03ac: 0x3da8, 0x03ad: 0x2ec9, 0x03ae: 0x3dac, 0x03af: 0x3db0, - 0x03b0: 0x3db4, 0x03b1: 0x3db8, 0x03b2: 0x3db8, 0x03b3: 0x3db8, 0x03b4: 0x3dbc, 0x03b5: 0x3dc1, - 0x03b6: 0x3dc5, 0x03b7: 0x3dc9, 0x03b8: 0x3dcd, 0x03b9: 0x3dd2, 0x03ba: 0x3dd6, 0x03bb: 0x3dda, - 0x03bc: 0x3dde, 0x03bd: 0x3de2, 0x03be: 0x3de6, 0x03bf: 0x3dea, + 0x0388: 0x8800, 0x038a: 0x8800, 0x038b: 0x801b, + 0x038c: 0x801c, 0x038d: 0x801d, 0x038e: 0x801e, 0x038f: 0x801f, 0x0390: 0x8020, 0x0391: 0x8021, + 0x0392: 0x8022, 0x0393: 0x86e6, 0x0394: 0x86e6, 0x0395: 0x86dc, 0x0396: 0x80dc, 0x0397: 0x80e6, + 0x0398: 0x80e6, 0x0399: 0x80e6, 0x039a: 0x80e6, 0x039b: 0x80e6, 0x039c: 0x80dc, 0x039d: 0x80e6, + 0x039e: 0x80e6, 0x039f: 0x80dc, + 0x03b0: 0x8023, // Block 0xf, offset 0x3c0 - 0x03c0: 0x3dee, 0x03c1: 0x3df2, 0x03c2: 0x3df6, 0x03c3: 0x3dfa, 0x03c4: 0x3dfe, 0x03c5: 0x3e02, - 0x03c6: 0x3e02, 0x03c7: 0x2fba, 0x03c8: 0x3e06, 0x03c9: 0x3e0a, 0x03ca: 0x3e0e, 0x03cb: 0x3e12, - 0x03cc: 0x2ed1, 0x03cd: 0x3e16, 0x03ce: 0x3e1a, 0x03cf: 0x3e1e, 0x03d0: 0x2e39, 0x03d1: 0x3e22, - 0x03d2: 0x3e26, 0x03d3: 0x3e2a, 0x03d4: 0x3e2e, 0x03d5: 0x3e32, 0x03d6: 0x3e36, 0x03d7: 0x3e3a, - 0x03d8: 0x3e3e, 0x03d9: 0x3e42, 0x03da: 0x3e47, 0x03db: 0x3e4b, 0x03dc: 0x3e4f, 0x03dd: 0x3c55, - 0x03de: 0x3e53, 0x03df: 0x3e57, 0x03e0: 0x3e5b, 0x03e1: 0x3e60, 0x03e2: 0x3e65, 0x03e3: 0x3e69, - 0x03e4: 0x3e6d, 0x03e5: 0x3e71, 0x03e6: 0x3e75, 0x03e7: 0x3e79, 0x03e8: 0x3e7d, 0x03e9: 0x3e81, - 0x03ea: 0x3e85, 0x03eb: 0x3e85, 0x03ec: 0x3e89, 0x03ed: 0x3e8e, 0x03ee: 0x3e92, 0x03ef: 0x2be1, - 0x03f0: 0x3e96, 0x03f1: 0x3e9a, 0x03f2: 0x3e9f, 0x03f3: 0x3ea3, 0x03f4: 0x3ea7, 0x03f5: 0x18ce, - 0x03f6: 0x3eab, 0x03f7: 0x3eaf, 0x03f8: 0x18d6, 0x03f9: 0x3eb3, 0x03fa: 0x3eb7, 0x03fb: 0x3ebb, - 0x03fc: 0x3ec0, 0x03fd: 0x3ec4, 0x03fe: 0x3ec9, 0x03ff: 0x3ecd, + 0x03c5: 0x8800, + 0x03c6: 0x0078, 0x03c7: 0x8800, 0x03c8: 0x007f, 0x03c9: 0x8800, 0x03ca: 0x0086, 0x03cb: 0x8800, + 0x03cc: 0x008d, 0x03cd: 0x8800, 0x03ce: 0x0094, 0x03d1: 0x8800, + 0x03d2: 0x009b, + 0x03f4: 0x8007, 0x03f5: 0x8600, + 0x03fa: 0x8800, 0x03fb: 0x00a2, + 0x03fc: 0x8800, 0x03fd: 0x00a9, 0x03fe: 0x8800, 0x03ff: 0x8800, // Block 0x10, offset 0x400 - 0x0400: 0x3ed1, 0x0401: 0x3ed5, 0x0402: 0x3ed9, 0x0403: 0x3edd, 0x0404: 0x3ee1, 0x0405: 0x3ee5, - 0x0406: 0x3ee9, 0x0407: 0x3eed, 0x0408: 0x3ef1, 0x0409: 0x3ef5, 0x040a: 0x3efa, 0x040b: 0x3efe, - 0x040c: 0x3f02, 0x040d: 0x3f06, 0x040e: 0x2b11, 0x040f: 0x3f0a, 0x0410: 0x18fe, 0x0411: 0x3f0f, - 0x0412: 0x3f0f, 0x0413: 0x3f14, 0x0414: 0x3f18, 0x0415: 0x3f18, 0x0416: 0x3f1c, 0x0417: 0x3f20, - 0x0418: 0x3f25, 0x0419: 0x3f2a, 0x041a: 0x3f2e, 0x041b: 0x3f32, 0x041c: 0x3f36, 0x041d: 0x3f3a, - 0x041e: 0x3f3e, 0x041f: 0x3f42, 0x0420: 0x3f46, 0x0421: 0x3f4a, 0x0422: 0x3f4e, 0x0423: 0x2ee5, - 0x0424: 0x3f52, 0x0425: 0x3f57, 0x0426: 0x3f5b, 0x0427: 0x3f5f, 0x0428: 0x2fea, 0x0429: 0x3f5f, - 0x042a: 0x3f63, 0x042b: 0x2eed, 0x042c: 0x3f67, 0x042d: 0x3f6b, 0x042e: 0x3f6f, 0x042f: 0x3f73, - 0x0430: 0x2ef1, 0x0431: 0x2aa5, 0x0432: 0x3f77, 0x0433: 0x3f7b, 0x0434: 0x3f7f, 0x0435: 0x3f83, - 0x0436: 0x3f87, 0x0437: 0x3f8b, 0x0438: 0x3f8f, 0x0439: 0x3f94, 0x043a: 0x3f98, 0x043b: 0x3f9c, - 0x043c: 0x3fa0, 0x043d: 0x3fa4, 0x043e: 0x3fa8, 0x043f: 0x3fad, + 0x0400: 0x2e7c, 0x0401: 0x3188, 0x0402: 0x2e86, 0x0403: 0x3192, 0x0404: 0x2e8b, 0x0405: 0x3197, + 0x0406: 0x2e90, 0x0407: 0x319c, 0x0408: 0x37b1, 0x0409: 0x3940, 0x040a: 0x2ea9, 0x040b: 0x31b5, + 0x040c: 0x2eb3, 0x040d: 0x31bf, 0x040e: 0x2ec2, 0x040f: 0x31ce, 0x0410: 0x2eb8, 0x0411: 0x31c4, + 0x0412: 0x2ebd, 0x0413: 0x31c9, 0x0414: 0x37d4, 0x0415: 0x3963, 0x0416: 0x37db, 0x0417: 0x396a, + 0x0418: 0x2efe, 0x0419: 0x320a, 0x041a: 0x2f03, 0x041b: 0x320f, 0x041c: 0x37e9, 0x041d: 0x3978, + 0x041e: 0x2f08, 0x041f: 0x3214, 0x0420: 0x2f17, 0x0421: 0x3223, 0x0422: 0x2f35, 0x0423: 0x3241, + 0x0424: 0x2f44, 0x0425: 0x3250, 0x0426: 0x2f3a, 0x0427: 0x3246, 0x0428: 0x2f49, 0x0429: 0x3255, + 0x042a: 0x2f4e, 0x042b: 0x325a, 0x042c: 0x2f94, 0x042d: 0x32a0, 0x042e: 0x37f0, 0x042f: 0x397f, + 0x0430: 0x2f9e, 0x0431: 0x32af, 0x0432: 0x2fa8, 0x0433: 0x32b9, 0x0434: 0x2fb2, 0x0435: 0x32c3, + 0x0436: 0x467b, 0x0437: 0x470c, 0x0438: 0x37f7, 0x0439: 0x3986, 0x043a: 0x2fcb, 0x043b: 0x32dc, + 0x043c: 0x2fc6, 0x043d: 0x32d7, 0x043e: 0x2fd0, 0x043f: 0x32e1, // Block 0x11, offset 0x440 - 0x0440: 0x3fb1, 0x0441: 0x3fb5, 0x0442: 0x3fb9, 0x0443: 0x3fbd, 0x0444: 0x3fc1, 0x0445: 0x3fc5, - 0x0446: 0x3fc9, 0x0447: 0x3fcd, 0x0448: 0x2ef5, 0x0449: 0x3fd1, 0x044a: 0x3fd5, 0x044b: 0x3fda, - 0x044c: 0x3fde, 0x044d: 0x3fe2, 0x044e: 0x3fe6, 0x044f: 0x2efd, 0x0450: 0x3fea, 0x0451: 0x3fee, - 0x0452: 0x3ff2, 0x0453: 0x3ff6, 0x0454: 0x3ffa, 0x0455: 0x3ffe, 0x0456: 0x4002, 0x0457: 0x4006, - 0x0458: 0x2b15, 0x0459: 0x300a, 0x045a: 0x400a, 0x045b: 0x400e, 0x045c: 0x4012, 0x045d: 0x4016, - 0x045e: 0x401b, 0x045f: 0x401f, 0x0460: 0x4023, 0x0461: 0x4027, 0x0462: 0x2f01, 0x0463: 0x402b, - 0x0464: 0x4030, 0x0465: 0x4034, 0x0466: 0x4038, 0x0467: 0x30b5, 0x0468: 0x403c, 0x0469: 0x4040, - 0x046a: 0x4044, 0x046b: 0x4048, 0x046c: 0x404c, 0x046d: 0x4051, 0x046e: 0x4055, 0x046f: 0x4059, - 0x0470: 0x405d, 0x0471: 0x4062, 0x0472: 0x4066, 0x0473: 0x406a, 0x0474: 0x406e, 0x0475: 0x2c25, - 0x0476: 0x4072, 0x0477: 0x4076, 0x0478: 0x407b, 0x0479: 0x4080, 0x047a: 0x4085, 0x047b: 0x4089, - 0x047c: 0x408e, 0x047d: 0x4092, 0x047e: 0x4096, 0x047f: 0x409a, + 0x0440: 0x2fd5, 0x0441: 0x32e6, 0x0442: 0x2fda, 0x0443: 0x32eb, 0x0444: 0x2fee, 0x0445: 0x32ff, + 0x0446: 0x2ff8, 0x0447: 0x3309, 0x0448: 0x3007, 0x0449: 0x3318, 0x044a: 0x3002, 0x044b: 0x3313, + 0x044c: 0x381a, 0x044d: 0x39a9, 0x044e: 0x3828, 0x044f: 0x39b7, 0x0450: 0x382f, 0x0451: 0x39be, + 0x0452: 0x3836, 0x0453: 0x39c5, 0x0454: 0x3034, 0x0455: 0x3345, 0x0456: 0x3039, 0x0457: 0x334a, + 0x0458: 0x3043, 0x0459: 0x3354, 0x045a: 0x46a8, 0x045b: 0x4739, 0x045c: 0x387c, 0x045d: 0x3a0b, + 0x045e: 0x305c, 0x045f: 0x336d, 0x0460: 0x3066, 0x0461: 0x3377, 0x0462: 0x46b7, 0x0463: 0x4748, + 0x0464: 0x3883, 0x0465: 0x3a12, 0x0466: 0x388a, 0x0467: 0x3a19, 0x0468: 0x3891, 0x0469: 0x3a20, + 0x046a: 0x3075, 0x046b: 0x3386, 0x046c: 0x307f, 0x046d: 0x3395, 0x046e: 0x3093, 0x046f: 0x33a9, + 0x0470: 0x308e, 0x0471: 0x33a4, 0x0472: 0x30cf, 0x0473: 0x33e5, 0x0474: 0x30de, 0x0475: 0x33f4, + 0x0476: 0x30d9, 0x0477: 0x33ef, 0x0478: 0x3898, 0x0479: 0x3a27, 0x047a: 0x389f, 0x047b: 0x3a2e, + 0x047c: 0x30e3, 0x047d: 0x33f9, 0x047e: 0x30e8, 0x047f: 0x33fe, // Block 0x12, offset 0x480 - 0x0480: 0x409e, 0x0481: 0x2f05, 0x0482: 0x2d71, 0x0483: 0x40a2, 0x0484: 0x40a6, 0x0485: 0x40aa, - 0x0486: 0x40ae, 0x0487: 0x40b3, 0x0488: 0x40b7, 0x0489: 0x40bb, 0x048a: 0x40bf, 0x048b: 0x3016, - 0x048c: 0x40c3, 0x048d: 0x40c7, 0x048e: 0x40cc, 0x048f: 0x40d0, 0x0490: 0x40d4, 0x0491: 0x40d9, - 0x0492: 0x40de, 0x0493: 0x40e2, 0x0494: 0x301a, 0x0495: 0x40e6, 0x0496: 0x40ea, 0x0497: 0x40ee, - 0x0498: 0x40f2, 0x0499: 0x40f6, 0x049a: 0x40fa, 0x049b: 0x40fe, 0x049c: 0x4103, 0x049d: 0x4107, - 0x049e: 0x410c, 0x049f: 0x4110, 0x04a0: 0x4115, 0x04a1: 0x3022, 0x04a2: 0x4119, 0x04a3: 0x411d, - 0x04a4: 0x4122, 0x04a5: 0x4126, 0x04a6: 0x412a, 0x04a7: 0x412f, 0x04a8: 0x4134, 0x04a9: 0x4138, - 0x04aa: 0x413c, 0x04ab: 0x4140, 0x04ac: 0x4144, 0x04ad: 0x4144, 0x04ae: 0x4148, 0x04af: 0x414c, - 0x04b0: 0x302a, 0x04b1: 0x4150, 0x04b2: 0x4154, 0x04b3: 0x4158, 0x04b4: 0x415c, 0x04b5: 0x4160, - 0x04b6: 0x4165, 0x04b7: 0x4169, 0x04b8: 0x2bed, 0x04b9: 0x416e, 0x04ba: 0x4173, 0x04bb: 0x4177, - 0x04bc: 0x417c, 0x04bd: 0x4181, 0x04be: 0x4186, 0x04bf: 0x418a, + 0x0480: 0x30ed, 0x0481: 0x3403, 0x0482: 0x30f2, 0x0483: 0x3408, 0x0484: 0x3101, 0x0485: 0x3417, + 0x0486: 0x30fc, 0x0487: 0x3412, 0x0488: 0x3106, 0x0489: 0x3421, 0x048a: 0x310b, 0x048b: 0x3426, + 0x048c: 0x3110, 0x048d: 0x342b, 0x048e: 0x312e, 0x048f: 0x3449, 0x0490: 0x3147, 0x0491: 0x3467, + 0x0492: 0x3156, 0x0493: 0x3476, 0x0494: 0x315b, 0x0495: 0x347b, 0x0496: 0x325f, 0x0497: 0x338b, + 0x0498: 0x341c, 0x0499: 0x3458, 0x049b: 0x34b6, + 0x04a0: 0x4658, 0x04a1: 0x46e9, 0x04a2: 0x2e68, 0x04a3: 0x3174, + 0x04a4: 0x375d, 0x04a5: 0x38ec, 0x04a6: 0x3756, 0x04a7: 0x38e5, 0x04a8: 0x376b, 0x04a9: 0x38fa, + 0x04aa: 0x3764, 0x04ab: 0x38f3, 0x04ac: 0x37a3, 0x04ad: 0x3932, 0x04ae: 0x3779, 0x04af: 0x3908, + 0x04b0: 0x3772, 0x04b1: 0x3901, 0x04b2: 0x3787, 0x04b3: 0x3916, 0x04b4: 0x3780, 0x04b5: 0x390f, + 0x04b6: 0x37aa, 0x04b7: 0x3939, 0x04b8: 0x466c, 0x04b9: 0x46fd, 0x04ba: 0x2ee5, 0x04bb: 0x31f1, + 0x04bc: 0x2ed1, 0x04bd: 0x31dd, 0x04be: 0x37bf, 0x04bf: 0x394e, // Block 0x13, offset 0x4c0 - 0x04c0: 0x3042, 0x04c1: 0x418e, 0x04c2: 0x4193, 0x04c3: 0x4198, 0x04c4: 0x419d, 0x04c5: 0x41a2, - 0x04c6: 0x41a6, 0x04c7: 0x41a6, 0x04c8: 0x3046, 0x04c9: 0x30bd, 0x04ca: 0x41aa, 0x04cb: 0x41ae, - 0x04cc: 0x41b2, 0x04cd: 0x41b6, 0x04ce: 0x41bb, 0x04cf: 0x2b59, 0x04d0: 0x304e, 0x04d1: 0x41bf, - 0x04d2: 0x41c3, 0x04d3: 0x2f2d, 0x04d4: 0x41c8, 0x04d5: 0x41cd, 0x04d6: 0x2e89, 0x04d7: 0x41d2, - 0x04d8: 0x41d6, 0x04d9: 0x2f39, 0x04da: 0x41da, 0x04db: 0x41de, 0x04dc: 0x41e2, 0x04dd: 0x41e7, - 0x04de: 0x41e7, 0x04df: 0x41ec, 0x04e0: 0x41f0, 0x04e1: 0x41f4, 0x04e2: 0x41f9, 0x04e3: 0x41fd, - 0x04e4: 0x4201, 0x04e5: 0x4205, 0x04e6: 0x420a, 0x04e7: 0x420e, 0x04e8: 0x4212, 0x04e9: 0x4216, - 0x04ea: 0x421a, 0x04eb: 0x421e, 0x04ec: 0x4223, 0x04ed: 0x4227, 0x04ee: 0x422b, 0x04ef: 0x422f, - 0x04f0: 0x4233, 0x04f1: 0x4237, 0x04f2: 0x423b, 0x04f3: 0x4240, 0x04f4: 0x4245, 0x04f5: 0x4249, - 0x04f6: 0x424e, 0x04f7: 0x4252, 0x04f8: 0x4257, 0x04f9: 0x425b, 0x04fa: 0x2f51, 0x04fb: 0x425f, - 0x04fc: 0x4264, 0x04fd: 0x4269, 0x04fe: 0x426d, 0x04ff: 0x4272, + 0x04c0: 0x37b8, 0x04c1: 0x3947, 0x04c2: 0x37cd, 0x04c3: 0x395c, 0x04c4: 0x37c6, 0x04c5: 0x3955, + 0x04c6: 0x37e2, 0x04c7: 0x3971, 0x04c8: 0x2f76, 0x04c9: 0x3282, 0x04ca: 0x2f8a, 0x04cb: 0x3296, + 0x04cc: 0x469e, 0x04cd: 0x472f, 0x04ce: 0x301b, 0x04cf: 0x332c, 0x04d0: 0x3805, 0x04d1: 0x3994, + 0x04d2: 0x37fe, 0x04d3: 0x398d, 0x04d4: 0x3813, 0x04d5: 0x39a2, 0x04d6: 0x380c, 0x04d7: 0x399b, + 0x04d8: 0x386e, 0x04d9: 0x39fd, 0x04da: 0x3852, 0x04db: 0x39e1, 0x04dc: 0x384b, 0x04dd: 0x39da, + 0x04de: 0x3860, 0x04df: 0x39ef, 0x04e0: 0x3859, 0x04e1: 0x39e8, 0x04e2: 0x3867, 0x04e3: 0x39f6, + 0x04e4: 0x30ca, 0x04e5: 0x33e0, 0x04e6: 0x30ac, 0x04e7: 0x33c2, 0x04e8: 0x38c9, 0x04e9: 0x3a58, + 0x04ea: 0x38c2, 0x04eb: 0x3a51, 0x04ec: 0x38d7, 0x04ed: 0x3a66, 0x04ee: 0x38d0, 0x04ef: 0x3a5f, + 0x04f0: 0x38de, 0x04f1: 0x3a6d, 0x04f2: 0x3115, 0x04f3: 0x3430, 0x04f4: 0x313d, 0x04f5: 0x345d, + 0x04f6: 0x3138, 0x04f7: 0x3453, 0x04f8: 0x3124, 0x04f9: 0x343f, // Block 0x14, offset 0x500 - 0x0500: 0x4276, 0x0501: 0x427b, 0x0502: 0x427f, 0x0503: 0x4283, 0x0504: 0x4287, 0x0505: 0x428b, - 0x0506: 0x428f, 0x0507: 0x4293, 0x0508: 0x4298, 0x0509: 0x429d, 0x050a: 0x42a2, 0x050b: 0x3f14, - 0x050c: 0x42a7, 0x050d: 0x42ab, 0x050e: 0x42af, 0x050f: 0x42b3, 0x0510: 0x42b7, 0x0511: 0x42bb, - 0x0512: 0x42bf, 0x0513: 0x42c3, 0x0514: 0x42c7, 0x0515: 0x42cb, 0x0516: 0x42cf, 0x0517: 0x42d3, - 0x0518: 0x2c31, 0x0519: 0x42d8, 0x051a: 0x42dc, 0x051b: 0x42e0, 0x051c: 0x42e4, 0x051d: 0x42e8, - 0x051e: 0x42ec, 0x051f: 0x2f5d, 0x0520: 0x42f0, 0x0521: 0x42f4, 0x0522: 0x42f8, 0x0523: 0x42fc, - 0x0524: 0x4300, 0x0525: 0x4305, 0x0526: 0x430a, 0x0527: 0x430f, 0x0528: 0x4313, 0x0529: 0x4317, - 0x052a: 0x431b, 0x052b: 0x431f, 0x052c: 0x4324, 0x052d: 0x4328, 0x052e: 0x432d, 0x052f: 0x4331, - 0x0530: 0x4335, 0x0531: 0x433a, 0x0532: 0x433f, 0x0533: 0x4343, 0x0534: 0x2b45, 0x0535: 0x4347, - 0x0536: 0x434b, 0x0537: 0x434f, 0x0538: 0x4353, 0x0539: 0x4357, 0x053a: 0x435b, 0x053b: 0x306a, - 0x053c: 0x435f, 0x053d: 0x4363, 0x053e: 0x4367, 0x053f: 0x436b, + 0x0500: 0x47bb, 0x0501: 0x47c1, 0x0502: 0x48d5, 0x0503: 0x48ed, 0x0504: 0x48dd, 0x0505: 0x48f5, + 0x0506: 0x48e5, 0x0507: 0x48fd, 0x0508: 0x4761, 0x0509: 0x4767, 0x050a: 0x4845, 0x050b: 0x485d, + 0x050c: 0x484d, 0x050d: 0x4865, 0x050e: 0x4855, 0x050f: 0x486d, 0x0510: 0x47cd, 0x0511: 0x47d3, + 0x0512: 0x3c9d, 0x0513: 0x3cad, 0x0514: 0x3ca5, 0x0515: 0x3cb5, + 0x0518: 0x476d, 0x0519: 0x4773, 0x051a: 0x3bcd, 0x051b: 0x3bdd, 0x051c: 0x3bd5, 0x051d: 0x3be5, + 0x0520: 0x47e5, 0x0521: 0x47eb, 0x0522: 0x4905, 0x0523: 0x491d, + 0x0524: 0x490d, 0x0525: 0x4925, 0x0526: 0x4915, 0x0527: 0x492d, 0x0528: 0x4779, 0x0529: 0x477f, + 0x052a: 0x4875, 0x052b: 0x488d, 0x052c: 0x487d, 0x052d: 0x4895, 0x052e: 0x4885, 0x052f: 0x489d, + 0x0530: 0x47fd, 0x0531: 0x4803, 0x0532: 0x3cfd, 0x0533: 0x3d15, 0x0534: 0x3d05, 0x0535: 0x3d1d, + 0x0536: 0x3d0d, 0x0537: 0x3d25, 0x0538: 0x4785, 0x0539: 0x478b, 0x053a: 0x3bfd, 0x053b: 0x3c15, + 0x053c: 0x3c05, 0x053d: 0x3c1d, 0x053e: 0x3c0d, 0x053f: 0x3c25, // Block 0x15, offset 0x540 - 0x0540: 0x436f, 0x0541: 0x4373, 0x0542: 0x4377, 0x0543: 0x437b, 0x0544: 0x1a66, 0x0545: 0x437f, - 0x0546: 0x4384, 0x0547: 0x4388, 0x0548: 0x438c, 0x0549: 0x4390, 0x054a: 0x4394, 0x054b: 0x4398, - 0x054c: 0x439d, 0x054d: 0x43a2, 0x054e: 0x43a6, 0x054f: 0x43aa, 0x0550: 0x307e, 0x0551: 0x3082, - 0x0552: 0x1a82, 0x0553: 0x43ae, 0x0554: 0x43b3, 0x0555: 0x43b7, 0x0556: 0x43bb, 0x0557: 0x43bf, - 0x0558: 0x43c3, 0x0559: 0x43c8, 0x055a: 0x43cd, 0x055b: 0x43d1, 0x055c: 0x43d5, 0x055d: 0x43d9, - 0x055e: 0x43de, 0x055f: 0x3086, 0x0560: 0x43e2, 0x0561: 0x43e7, 0x0562: 0x43ec, 0x0563: 0x43f0, - 0x0564: 0x43f4, 0x0565: 0x43f8, 0x0566: 0x43fd, 0x0567: 0x4401, 0x0568: 0x4405, 0x0569: 0x4409, - 0x056a: 0x440d, 0x056b: 0x4411, 0x056c: 0x4415, 0x056d: 0x4419, 0x056e: 0x441e, 0x056f: 0x4422, - 0x0570: 0x4426, 0x0571: 0x442a, 0x0572: 0x442f, 0x0573: 0x4433, 0x0574: 0x4437, 0x0575: 0x443b, - 0x0576: 0x443f, 0x0577: 0x4444, 0x0578: 0x4449, 0x0579: 0x444d, 0x057a: 0x4451, 0x057b: 0x4455, - 0x057c: 0x445a, 0x057d: 0x445e, 0x057e: 0x309e, 0x057f: 0x309e, + 0x0540: 0x4809, 0x0541: 0x480f, 0x0542: 0x3d2d, 0x0543: 0x3d3d, 0x0544: 0x3d35, 0x0545: 0x3d45, + 0x0548: 0x4791, 0x0549: 0x4797, 0x054a: 0x3c2d, 0x054b: 0x3c3d, + 0x054c: 0x3c35, 0x054d: 0x3c45, 0x0550: 0x481b, 0x0551: 0x4821, + 0x0552: 0x3d65, 0x0553: 0x3d7d, 0x0554: 0x3d6d, 0x0555: 0x3d85, 0x0556: 0x3d75, 0x0557: 0x3d8d, + 0x0559: 0x479d, 0x055b: 0x3c4d, 0x055d: 0x3c55, + 0x055f: 0x3c5d, 0x0560: 0x4833, 0x0561: 0x4839, 0x0562: 0x4935, 0x0563: 0x494d, + 0x0564: 0x493d, 0x0565: 0x4955, 0x0566: 0x4945, 0x0567: 0x495d, 0x0568: 0x47a3, 0x0569: 0x47a9, + 0x056a: 0x48a5, 0x056b: 0x48bd, 0x056c: 0x48ad, 0x056d: 0x48c5, 0x056e: 0x48b5, 0x056f: 0x48cd, + 0x0570: 0x47af, 0x0571: 0x421c, 0x0572: 0x3576, 0x0573: 0x4222, 0x0574: 0x47d9, 0x0575: 0x4228, + 0x0576: 0x3588, 0x0577: 0x422e, 0x0578: 0x35a6, 0x0579: 0x4234, 0x057a: 0x35be, 0x057b: 0x423a, + 0x057c: 0x4827, 0x057d: 0x4240, + // Block 0x16, offset 0x580 + 0x0580: 0x3c85, 0x0581: 0x3c8d, 0x0582: 0x4069, 0x0583: 0x4087, 0x0584: 0x4073, 0x0585: 0x4091, + 0x0586: 0x407d, 0x0587: 0x409b, 0x0588: 0x3bbd, 0x0589: 0x3bc5, 0x058a: 0x3fb5, 0x058b: 0x3fd3, + 0x058c: 0x3fbf, 0x058d: 0x3fdd, 0x058e: 0x3fc9, 0x058f: 0x3fe7, 0x0590: 0x3ccd, 0x0591: 0x3cd5, + 0x0592: 0x40a5, 0x0593: 0x40c3, 0x0594: 0x40af, 0x0595: 0x40cd, 0x0596: 0x40b9, 0x0597: 0x40d7, + 0x0598: 0x3bed, 0x0599: 0x3bf5, 0x059a: 0x3ff1, 0x059b: 0x400f, 0x059c: 0x3ffb, 0x059d: 0x4019, + 0x059e: 0x4005, 0x059f: 0x4023, 0x05a0: 0x3da5, 0x05a1: 0x3dad, 0x05a2: 0x40e1, 0x05a3: 0x40ff, + 0x05a4: 0x40eb, 0x05a5: 0x4109, 0x05a6: 0x40f5, 0x05a7: 0x4113, 0x05a8: 0x3c65, 0x05a9: 0x3c6d, + 0x05aa: 0x402d, 0x05ab: 0x404b, 0x05ac: 0x4037, 0x05ad: 0x4055, 0x05ae: 0x4041, 0x05af: 0x405f, + 0x05b0: 0x356a, 0x05b1: 0x3564, 0x05b2: 0x3c75, 0x05b3: 0x3570, 0x05b4: 0x3c7d, + 0x05b6: 0x47c7, 0x05b7: 0x3c95, 0x05b8: 0x34da, 0x05b9: 0x34d4, 0x05ba: 0x34c8, 0x05bb: 0x41ec, + 0x05bc: 0x34e0, 0x05be: 0x0490, 0x05bf: 0x8800, + // Block 0x17, offset 0x5c0 + 0x05c1: 0x348c, 0x05c2: 0x3cbd, 0x05c3: 0x3582, 0x05c4: 0x3cc5, + 0x05c6: 0x47f1, 0x05c7: 0x3cdd, 0x05c8: 0x34e6, 0x05c9: 0x41f2, 0x05ca: 0x34f2, 0x05cb: 0x41f8, + 0x05cc: 0x34fe, 0x05cd: 0x3a74, 0x05ce: 0x3a7b, 0x05cf: 0x3a82, 0x05d0: 0x359a, 0x05d1: 0x3594, + 0x05d2: 0x3ce5, 0x05d3: 0x43e2, 0x05d6: 0x35a0, 0x05d7: 0x3cf5, + 0x05d8: 0x3516, 0x05d9: 0x3510, 0x05da: 0x3504, 0x05db: 0x41fe, 0x05dd: 0x3a89, + 0x05de: 0x3a90, 0x05df: 0x3a97, 0x05e0: 0x35d0, 0x05e1: 0x35ca, 0x05e2: 0x3d4d, 0x05e3: 0x43ea, + 0x05e4: 0x35b2, 0x05e5: 0x35b8, 0x05e6: 0x35d6, 0x05e7: 0x3d5d, 0x05e8: 0x3546, 0x05e9: 0x3540, + 0x05ea: 0x3534, 0x05eb: 0x420a, 0x05ec: 0x352e, 0x05ed: 0x3480, 0x05ee: 0x41e6, 0x05ef: 0x014f, + 0x05f2: 0x3d95, 0x05f3: 0x35dc, 0x05f4: 0x3d9d, + 0x05f6: 0x483f, 0x05f7: 0x3db5, 0x05f8: 0x3522, 0x05f9: 0x4204, 0x05fa: 0x3552, 0x05fb: 0x4216, + 0x05fc: 0x355e, 0x05fd: 0x0391, 0x05fe: 0x8800, + // Block 0x18, offset 0x600 + 0x0601: 0x3aeb, 0x0603: 0x8800, 0x0604: 0x3af2, 0x0605: 0x8800, + 0x0607: 0x3af9, 0x0608: 0x8800, 0x0609: 0x3b00, + 0x060d: 0x8800, + 0x0620: 0x2e4a, 0x0621: 0x8800, 0x0622: 0x3b0e, + 0x0624: 0x8800, 0x0625: 0x8800, + 0x062d: 0x3b07, 0x062e: 0x2e45, 0x062f: 0x2e4f, + 0x0630: 0x3b15, 0x0631: 0x3b1c, 0x0632: 0x8800, 0x0633: 0x8800, 0x0634: 0x3b23, 0x0635: 0x3b2a, + 0x0636: 0x8800, 0x0637: 0x8800, 0x0638: 0x3b31, 0x0639: 0x3b38, 0x063a: 0x8800, 0x063b: 0x8800, + 0x063c: 0x8800, 0x063d: 0x8800, + // Block 0x19, offset 0x640 + 0x0640: 0x3b3f, 0x0641: 0x3b46, 0x0642: 0x8800, 0x0643: 0x8800, 0x0644: 0x3b5b, 0x0645: 0x3b62, + 0x0646: 0x8800, 0x0647: 0x8800, 0x0648: 0x3b69, 0x0649: 0x3b70, + 0x0651: 0x8800, + 0x0652: 0x8800, + 0x0662: 0x8800, + 0x0668: 0x8800, 0x0669: 0x8800, + 0x066b: 0x8800, 0x066c: 0x3b85, 0x066d: 0x3b8c, 0x066e: 0x3b93, 0x066f: 0x3b9a, + 0x0672: 0x8800, 0x0673: 0x8800, 0x0674: 0x8800, 0x0675: 0x8800, + // Block 0x1a, offset 0x680 + 0x0686: 0x8800, 0x068b: 0x8800, + 0x068c: 0x3ded, 0x068d: 0x8800, 0x068e: 0x3df5, 0x068f: 0x8800, 0x0690: 0x3dfd, 0x0691: 0x8800, + 0x0692: 0x3e05, 0x0693: 0x8800, 0x0694: 0x3e0d, 0x0695: 0x8800, 0x0696: 0x3e15, 0x0697: 0x8800, + 0x0698: 0x3e1d, 0x0699: 0x8800, 0x069a: 0x3e25, 0x069b: 0x8800, 0x069c: 0x3e2d, 0x069d: 0x8800, + 0x069e: 0x3e35, 0x069f: 0x8800, 0x06a0: 0x3e3d, 0x06a1: 0x8800, 0x06a2: 0x3e45, + 0x06a4: 0x8800, 0x06a5: 0x3e4d, 0x06a6: 0x8800, 0x06a7: 0x3e55, 0x06a8: 0x8800, 0x06a9: 0x3e5d, + 0x06af: 0x8800, + 0x06b0: 0x3e65, 0x06b1: 0x3e6d, 0x06b2: 0x8800, 0x06b3: 0x3e75, 0x06b4: 0x3e7d, 0x06b5: 0x8800, + 0x06b6: 0x3e85, 0x06b7: 0x3e8d, 0x06b8: 0x8800, 0x06b9: 0x3e95, 0x06ba: 0x3e9d, 0x06bb: 0x8800, + 0x06bc: 0x3ea5, 0x06bd: 0x3ead, + // Block 0x1b, offset 0x6c0 + 0x06d4: 0x3de5, + 0x06d9: 0x8608, 0x06da: 0x8608, 0x06dd: 0x8800, + 0x06de: 0x3eb5, + 0x06e6: 0x8800, + 0x06eb: 0x8800, 0x06ec: 0x3ec5, 0x06ed: 0x8800, 0x06ee: 0x3ecd, 0x06ef: 0x8800, + 0x06f0: 0x3ed5, 0x06f1: 0x8800, 0x06f2: 0x3edd, 0x06f3: 0x8800, 0x06f4: 0x3ee5, 0x06f5: 0x8800, + 0x06f6: 0x3eed, 0x06f7: 0x8800, 0x06f8: 0x3ef5, 0x06f9: 0x8800, 0x06fa: 0x3efd, 0x06fb: 0x8800, + 0x06fc: 0x3f05, 0x06fd: 0x8800, 0x06fe: 0x3f0d, 0x06ff: 0x8800, + // Block 0x1c, offset 0x700 + 0x0700: 0x3f15, 0x0701: 0x8800, 0x0702: 0x3f1d, 0x0704: 0x8800, 0x0705: 0x3f25, + 0x0706: 0x8800, 0x0707: 0x3f2d, 0x0708: 0x8800, 0x0709: 0x3f35, + 0x070f: 0x8800, 0x0710: 0x3f3d, 0x0711: 0x3f45, + 0x0712: 0x8800, 0x0713: 0x3f4d, 0x0714: 0x3f55, 0x0715: 0x8800, 0x0716: 0x3f5d, 0x0717: 0x3f65, + 0x0718: 0x8800, 0x0719: 0x3f6d, 0x071a: 0x3f75, 0x071b: 0x8800, 0x071c: 0x3f7d, 0x071d: 0x3f85, + 0x072f: 0x8800, + 0x0730: 0x8800, 0x0731: 0x8800, 0x0732: 0x8800, 0x0734: 0x3ebd, + 0x0737: 0x3f8d, 0x0738: 0x3f95, 0x0739: 0x3f9d, 0x073a: 0x3fa5, + 0x073d: 0x8800, 0x073e: 0x3fad, + // Block 0x1d, offset 0x740 + 0x0740: 0x18b5, 0x0741: 0x1239, 0x0742: 0x1911, 0x0743: 0x18dd, 0x0744: 0x1395, 0x0745: 0x0c29, + 0x0746: 0x0e1d, 0x0747: 0x1b5d, 0x0748: 0x1b5d, 0x0749: 0x0f49, 0x074a: 0x1995, 0x074b: 0x0e81, + 0x074c: 0x0f45, 0x074d: 0x112d, 0x074e: 0x150d, 0x074f: 0x169d, 0x0750: 0x17d5, 0x0751: 0x1811, + 0x0752: 0x1845, 0x0753: 0x1959, 0x0754: 0x12b1, 0x0755: 0x133d, 0x0756: 0x13e9, 0x0757: 0x1481, + 0x0758: 0x179d, 0x0759: 0x197d, 0x075a: 0x1aa5, 0x075b: 0x0c4d, 0x075c: 0x0df1, 0x075d: 0x12c5, + 0x075e: 0x140d, 0x075f: 0x17d1, 0x0760: 0x1af5, 0x0761: 0x0ff1, 0x0762: 0x13b5, 0x0763: 0x17c1, + 0x0764: 0x1855, 0x0765: 0x1161, 0x0766: 0x16f9, 0x0767: 0x181d, 0x0768: 0x105d, 0x0769: 0x124d, + 0x076a: 0x1355, 0x076b: 0x1459, 0x076c: 0x1965, 0x076d: 0x0c8d, 0x076e: 0x0d25, 0x076f: 0x0d91, + 0x0770: 0x11c9, 0x0771: 0x12bd, 0x0772: 0x1409, 0x0773: 0x152d, 0x0774: 0x16b5, 0x0775: 0x17c9, + 0x0776: 0x17e1, 0x0777: 0x1905, 0x0778: 0x1a21, 0x0779: 0x1ad5, 0x077a: 0x1af1, 0x077b: 0x1569, + 0x077c: 0x15a9, 0x077d: 0x1661, 0x077e: 0x1781, 0x077f: 0x19b1, + // Block 0x1e, offset 0x780 + 0x0780: 0x1afd, 0x0781: 0x1889, 0x0782: 0x0f05, 0x0783: 0x1079, 0x0784: 0x1619, 0x0785: 0x16d9, + 0x0786: 0x143d, 0x0787: 0x1571, 0x0788: 0x18d5, 0x0789: 0x1a19, 0x078a: 0x0f01, 0x078b: 0x0fcd, + 0x078c: 0x12b5, 0x078d: 0x1369, 0x078e: 0x139d, 0x078f: 0x1651, 0x0790: 0x1679, 0x0791: 0x19dd, + 0x0792: 0x0d8d, 0x0793: 0x16e5, 0x0794: 0x0d31, 0x0795: 0x0d2d, 0x0796: 0x15d5, 0x0797: 0x1665, + 0x0798: 0x1799, 0x0799: 0x19e5, 0x079a: 0x18a5, 0x079b: 0x1165, 0x079c: 0x12b1, 0x079d: 0x1895, + 0x079e: 0x0c35, 0x079f: 0x0fa1, 0x07a0: 0x10d1, 0x07a1: 0x146d, 0x07a2: 0x14ed, 0x07a3: 0x0db1, + 0x07a4: 0x1579, 0x07a5: 0x0c9d, 0x07a6: 0x10b5, 0x07a7: 0x0c15, 0x07a8: 0x1329, 0x07a9: 0x11e1, + 0x07aa: 0x164d, 0x07ab: 0x0e05, 0x07ac: 0x0ef1, 0x07ad: 0x1539, 0x07ae: 0x17a1, 0x07af: 0x1879, + 0x07b0: 0x12f5, 0x07b1: 0x1935, 0x07b2: 0x1321, 0x07b3: 0x1175, 0x07b4: 0x1759, 0x07b5: 0x1195, + 0x07b6: 0x14e9, 0x07b7: 0x0c69, 0x07b8: 0x0ce5, 0x07b9: 0x0d29, 0x07ba: 0x1291, 0x07bb: 0x1639, + 0x07bc: 0x1731, 0x07bd: 0x1885, 0x07be: 0x1991, 0x07bf: 0x0d99, + // Block 0x1f, offset 0x7c0 + 0x07c0: 0x0e4d, 0x07c1: 0x0f55, 0x07c2: 0x106d, 0x07c3: 0x11fd, 0x07c4: 0x13b9, 0x07c5: 0x157d, + 0x07c6: 0x19cd, 0x07c7: 0x1aad, 0x07c8: 0x1b01, 0x07c9: 0x1b19, 0x07ca: 0x0d75, 0x07cb: 0x1231, + 0x07cc: 0x12e1, 0x07cd: 0x1929, 0x07ce: 0x1039, 0x07cf: 0x1115, 0x07d0: 0x1131, 0x07d1: 0x11c1, + 0x07d2: 0x13a9, 0x07d3: 0x13f5, 0x07d4: 0x14a5, 0x07d5: 0x15c9, 0x07d6: 0x166d, 0x07d7: 0x16d1, + 0x07d8: 0x1919, 0x07d9: 0x17a9, 0x07da: 0x1941, 0x07db: 0x19b5, 0x07dc: 0x0d4d, 0x07dd: 0x0d79, + 0x07de: 0x0e61, 0x07df: 0x13e5, 0x07e0: 0x1831, 0x07e1: 0x1879, 0x07e2: 0x1059, 0x07e3: 0x10c9, + 0x07e4: 0x118d, 0x07e5: 0x12ed, 0x07e6: 0x1615, 0x07e7: 0x1461, 0x07e8: 0x0c79, 0x07e9: 0x0ebd, + 0x07ea: 0x0fa1, 0x07eb: 0x1005, 0x07ec: 0x10d5, 0x07ed: 0x147d, 0x07ee: 0x1499, 0x07ef: 0x16a9, + 0x07f0: 0x16c9, 0x07f1: 0x1999, 0x07f2: 0x1a15, 0x07f3: 0x1a25, 0x07f4: 0x1a61, 0x07f5: 0x0c91, + 0x07f6: 0x15bd, 0x07f7: 0x1985, 0x07f8: 0x19fd, 0x07f9: 0x10ed, 0x07fa: 0x0c55, 0x07fb: 0x0cb5, + 0x07fc: 0x0fa5, 0x07fd: 0x0fc5, 0x07fe: 0x11ed, 0x07ff: 0x12b1, + // Block 0x20, offset 0x800 + 0x0800: 0x1401, 0x0801: 0x1509, 0x0802: 0x17b5, 0x0803: 0x1955, 0x0804: 0x1b55, 0x0805: 0x1221, + 0x0806: 0x19d9, 0x0807: 0x0d71, 0x0808: 0x126d, 0x0809: 0x1279, 0x080a: 0x134d, 0x080b: 0x1385, + 0x080c: 0x1489, 0x080d: 0x14e5, 0x080e: 0x1565, 0x080f: 0x1649, 0x0810: 0x1a6d, 0x0811: 0x0ced, + 0x0812: 0x1141, 0x0813: 0x19e9, 0x0814: 0x0ca5, 0x0815: 0x0fe9, 0x0816: 0x136d, 0x0817: 0x191d, + 0x0818: 0x10a5, 0x0819: 0x10f5, 0x081a: 0x1281, 0x081b: 0x146d, 0x081c: 0x19f1, 0x081d: 0x0d55, + 0x081e: 0x0e3d, 0x081f: 0x0fd5, 0x0820: 0x1211, 0x0821: 0x125d, 0x0822: 0x129d, 0x0823: 0x1331, + 0x0824: 0x1485, 0x0825: 0x14f9, 0x0826: 0x1695, 0x0827: 0x1835, 0x0828: 0x1841, 0x0829: 0x198d, + 0x082a: 0x1a09, 0x082b: 0x0dc1, 0x082c: 0x1389, 0x082d: 0x0e41, 0x082e: 0x1405, 0x082f: 0x14a9, + 0x0830: 0x17c5, 0x0831: 0x19f5, 0x0832: 0x1add, 0x0833: 0x1b05, 0x0834: 0x1275, 0x0835: 0x1365, + 0x0836: 0x1701, 0x0837: 0x15f5, 0x0838: 0x1601, 0x0839: 0x1625, 0x083a: 0x1455, 0x083b: 0x13dd, + 0x083c: 0x18a1, 0x083d: 0x0c71, 0x083e: 0x1769, 0x083f: 0x0d59, + // Block 0x21, offset 0x840 + 0x0840: 0x0d49, 0x0841: 0x1049, 0x0842: 0x1169, 0x0843: 0x1631, 0x0844: 0x0f91, 0x0845: 0x1341, + 0x0846: 0x122d, 0x0847: 0x1925, 0x0848: 0x1825, 0x0849: 0x19e1, 0x084a: 0x1861, 0x084b: 0x1065, + 0x084c: 0x0cc5, 0x084d: 0x0e99, 0x0850: 0x0eed, + 0x0852: 0x121d, 0x0855: 0x0d35, 0x0856: 0x145d, 0x0857: 0x1521, + 0x0858: 0x1585, 0x0859: 0x15a1, 0x085a: 0x15a5, 0x085b: 0x15b9, 0x085c: 0x1a2d, 0x085d: 0x1629, + 0x085e: 0x16ad, 0x0860: 0x17cd, 0x0862: 0x1891, + 0x0865: 0x1945, 0x0866: 0x196d, + 0x086a: 0x1a81, 0x086b: 0x1a85, 0x086c: 0x1a89, 0x086d: 0x1aed, + 0x0870: 0x0c95, 0x0871: 0x0cb9, 0x0872: 0x0ccd, 0x0873: 0x0d89, 0x0874: 0x0d95, 0x0875: 0x0dd5, + 0x0876: 0x0e89, 0x0877: 0x0ea5, 0x0878: 0x0ead, 0x0879: 0x0ee9, 0x087a: 0x0ef5, 0x087b: 0x0fd1, + 0x087c: 0x0fd9, 0x087d: 0x10e1, 0x087e: 0x1109, 0x087f: 0x1111, + // Block 0x22, offset 0x880 + 0x0880: 0x1129, 0x0881: 0x11d5, 0x0882: 0x1205, 0x0883: 0x1225, 0x0884: 0x1295, 0x0885: 0x1359, + 0x0886: 0x1375, 0x0887: 0x13a5, 0x0888: 0x13f9, 0x0889: 0x1419, 0x088a: 0x148d, 0x088b: 0x156d, + 0x088c: 0x1589, 0x088d: 0x1591, 0x088e: 0x158d, 0x088f: 0x1595, 0x0890: 0x1599, 0x0891: 0x159d, + 0x0892: 0x15b1, 0x0893: 0x15b5, 0x0894: 0x15d9, 0x0895: 0x15ed, 0x0896: 0x1609, 0x0897: 0x166d, + 0x0898: 0x1675, 0x0899: 0x167d, 0x089a: 0x1691, 0x089b: 0x16b9, 0x089c: 0x1709, 0x089d: 0x173d, + 0x089e: 0x173d, 0x089f: 0x17a5, 0x08a0: 0x184d, 0x08a1: 0x1865, 0x08a2: 0x1899, 0x08a3: 0x189d, + 0x08a4: 0x18e1, 0x08a5: 0x18e5, 0x08a6: 0x193d, 0x08a7: 0x1945, 0x08a8: 0x1a0d, 0x08a9: 0x1a51, + 0x08aa: 0x1a69, 0x08ab: 0x10d9, 0x08ac: 0x2018, 0x08ad: 0x1721, + 0x08b0: 0x0c1d, 0x08b1: 0x0d21, 0x08b2: 0x0ce1, 0x08b3: 0x0c89, 0x08b4: 0x0cc9, 0x08b5: 0x0cf5, + 0x08b6: 0x0d85, 0x08b7: 0x0da1, 0x08b8: 0x0e89, 0x08b9: 0x0e75, 0x08ba: 0x0e85, 0x08bb: 0x0ea1, + 0x08bc: 0x0eed, 0x08bd: 0x0efd, 0x08be: 0x0f41, 0x08bf: 0x0f4d, + // Block 0x23, offset 0x8c0 + 0x08c0: 0x0f69, 0x08c1: 0x0f79, 0x08c2: 0x1061, 0x08c3: 0x1069, 0x08c4: 0x1099, 0x08c5: 0x10b9, + 0x08c6: 0x10e9, 0x08c7: 0x1101, 0x08c8: 0x10f1, 0x08c9: 0x1111, 0x08ca: 0x1105, 0x08cb: 0x1129, + 0x08cc: 0x1145, 0x08cd: 0x119d, 0x08ce: 0x11a9, 0x08cf: 0x11b1, 0x08d0: 0x11d9, 0x08d1: 0x121d, + 0x08d2: 0x124d, 0x08d3: 0x1251, 0x08d4: 0x1265, 0x08d5: 0x12e5, 0x08d6: 0x12f5, 0x08d7: 0x134d, + 0x08d8: 0x1399, 0x08d9: 0x1391, 0x08da: 0x13a5, 0x08db: 0x13c1, 0x08dc: 0x13f9, 0x08dd: 0x1551, + 0x08de: 0x141d, 0x08df: 0x1451, 0x08e0: 0x145d, 0x08e1: 0x149d, 0x08e2: 0x14b9, 0x08e3: 0x14dd, + 0x08e4: 0x1501, 0x08e5: 0x1505, 0x08e6: 0x1521, 0x08e7: 0x1525, 0x08e8: 0x1535, 0x08e9: 0x1549, + 0x08ea: 0x1545, 0x08eb: 0x1575, 0x08ec: 0x15f1, 0x08ed: 0x1609, 0x08ee: 0x1621, 0x08ef: 0x1659, + 0x08f0: 0x166d, 0x08f1: 0x1689, 0x08f2: 0x16b9, 0x08f3: 0x176d, 0x08f4: 0x1795, 0x08f5: 0x1809, + 0x08f6: 0x1851, 0x08f7: 0x185d, 0x08f8: 0x1865, 0x08f9: 0x187d, 0x08fa: 0x1891, 0x08fb: 0x1881, + 0x08fc: 0x1899, 0x08fd: 0x1895, 0x08fe: 0x188d, 0x08ff: 0x189d, + // Block 0x24, offset 0x900 + 0x0900: 0x18a9, 0x0901: 0x18e5, 0x0902: 0x1921, 0x0903: 0x1951, 0x0904: 0x1981, 0x0905: 0x19a1, + 0x0906: 0x19ed, 0x0907: 0x1a0d, 0x0908: 0x1a2d, 0x0909: 0x1a41, 0x090a: 0x1a51, 0x090b: 0x1a5d, + 0x090c: 0x1a69, 0x090d: 0x1abd, 0x090e: 0x1b5d, 0x090f: 0x1faf, 0x0910: 0x1faa, 0x0911: 0x1fdc, + 0x0912: 0x0b45, 0x0913: 0x0b6d, 0x0914: 0x0b71, 0x0915: 0x205e, 0x0916: 0x208b, 0x0917: 0x2103, + 0x0918: 0x1b49, 0x0919: 0x1b59, + // Block 0x25, offset 0x940 + 0x0940: 0x0c39, 0x0941: 0x0c31, 0x0942: 0x0c41, 0x0943: 0x1f41, 0x0944: 0x0c85, 0x0945: 0x0c95, + 0x0946: 0x0c99, 0x0947: 0x0ca1, 0x0948: 0x0ca9, 0x0949: 0x0cad, 0x094a: 0x0cb9, 0x094b: 0x0cb1, + 0x094c: 0x0af1, 0x094d: 0x1f55, 0x094e: 0x0ccd, 0x094f: 0x0cd1, 0x0950: 0x0cd5, 0x0951: 0x0cf1, + 0x0952: 0x1f46, 0x0953: 0x0af5, 0x0954: 0x0cdd, 0x0955: 0x0cfd, 0x0956: 0x1f50, 0x0957: 0x0d0d, + 0x0958: 0x0d15, 0x0959: 0x0c75, 0x095a: 0x0d1d, 0x095b: 0x0d21, 0x095c: 0x212b, 0x095d: 0x0d3d, + 0x095e: 0x0d45, 0x095f: 0x0afd, 0x0960: 0x0d5d, 0x0961: 0x0d61, 0x0962: 0x0d69, 0x0963: 0x0d6d, + 0x0964: 0x0b01, 0x0965: 0x0d85, 0x0966: 0x0d89, 0x0967: 0x0d95, 0x0968: 0x0da1, 0x0969: 0x0da5, + 0x096a: 0x0da9, 0x096b: 0x0db1, 0x096c: 0x0dd1, 0x096d: 0x0dd5, 0x096e: 0x0ddd, 0x096f: 0x0ded, + 0x0970: 0x0df5, 0x0971: 0x0df9, 0x0972: 0x0df9, 0x0973: 0x0df9, 0x0974: 0x1f64, 0x0975: 0x13d1, + 0x0976: 0x0e0d, 0x0977: 0x0e15, 0x0978: 0x1f69, 0x0979: 0x0e21, 0x097a: 0x0e29, 0x097b: 0x0e31, + 0x097c: 0x0e59, 0x097d: 0x0e45, 0x097e: 0x0e51, 0x097f: 0x0e55, + // Block 0x26, offset 0x980 + 0x0980: 0x0e5d, 0x0981: 0x0e65, 0x0982: 0x0e69, 0x0983: 0x0e71, 0x0984: 0x0e79, 0x0985: 0x0e7d, + 0x0986: 0x0e7d, 0x0987: 0x0e85, 0x0988: 0x0e8d, 0x0989: 0x0e91, 0x098a: 0x0e9d, 0x098b: 0x0ec1, + 0x098c: 0x0ea5, 0x098d: 0x0ec5, 0x098e: 0x0ea9, 0x098f: 0x0eb1, 0x0990: 0x0d49, 0x0991: 0x0f0d, + 0x0992: 0x0ed5, 0x0993: 0x0ed9, 0x0994: 0x0edd, 0x0995: 0x0ed1, 0x0996: 0x0ee5, 0x0997: 0x0ee1, + 0x0998: 0x0ef9, 0x0999: 0x1f6e, 0x099a: 0x0f15, 0x099b: 0x0f19, 0x099c: 0x0f21, 0x099d: 0x0f2d, + 0x099e: 0x0f35, 0x099f: 0x0f51, 0x09a0: 0x1f73, 0x09a1: 0x1f78, 0x09a2: 0x0f5d, 0x09a3: 0x0f61, + 0x09a4: 0x0f65, 0x09a5: 0x0f59, 0x09a6: 0x0f6d, 0x09a7: 0x0b05, 0x09a8: 0x0b09, 0x09a9: 0x0f75, + 0x09aa: 0x0f7d, 0x09ab: 0x0f7d, 0x09ac: 0x1f7d, 0x09ad: 0x0f99, 0x09ae: 0x0f9d, 0x09af: 0x0fa1, + 0x09b0: 0x0fa9, 0x09b1: 0x1f82, 0x09b2: 0x0fb1, 0x09b3: 0x0fb5, 0x09b4: 0x108d, 0x09b5: 0x0fbd, + 0x09b6: 0x0b0d, 0x09b7: 0x0fc9, 0x09b8: 0x0fd9, 0x09b9: 0x0fe5, 0x09ba: 0x0fe1, 0x09bb: 0x1f8c, + 0x09bc: 0x0fed, 0x09bd: 0x1f91, 0x09be: 0x0ff9, 0x09bf: 0x0ff5, + // Block 0x27, offset 0x9c0 + 0x09c0: 0x0ffd, 0x09c1: 0x100d, 0x09c2: 0x1011, 0x09c3: 0x0b11, 0x09c4: 0x1021, 0x09c5: 0x1029, + 0x09c6: 0x102d, 0x09c7: 0x1031, 0x09c8: 0x0b15, 0x09c9: 0x1f96, 0x09ca: 0x0b19, 0x09cb: 0x104d, + 0x09cc: 0x1051, 0x09cd: 0x1055, 0x09ce: 0x105d, 0x09cf: 0x215d, 0x09d0: 0x1075, 0x09d1: 0x1fa0, + 0x09d2: 0x1fa0, 0x09d3: 0x1715, 0x09d4: 0x1085, 0x09d5: 0x1085, 0x09d6: 0x0b1d, 0x09d7: 0x1fc3, + 0x09d8: 0x2095, 0x09d9: 0x1095, 0x09da: 0x109d, 0x09db: 0x0b21, 0x09dc: 0x10b1, 0x09dd: 0x10c1, + 0x09de: 0x10c5, 0x09df: 0x10cd, 0x09e0: 0x10dd, 0x09e1: 0x0b29, 0x09e2: 0x0b25, 0x09e3: 0x10e1, + 0x09e4: 0x1fa5, 0x09e5: 0x10e5, 0x09e6: 0x10f9, 0x09e7: 0x10fd, 0x09e8: 0x1101, 0x09e9: 0x10fd, + 0x09ea: 0x110d, 0x09eb: 0x1111, 0x09ec: 0x1121, 0x09ed: 0x1119, 0x09ee: 0x111d, 0x09ef: 0x1125, + 0x09f0: 0x1129, 0x09f1: 0x112d, 0x09f2: 0x1139, 0x09f3: 0x113d, 0x09f4: 0x1155, 0x09f5: 0x115d, + 0x09f6: 0x116d, 0x09f7: 0x1181, 0x09f8: 0x1fb4, 0x09f9: 0x117d, 0x09fa: 0x1171, 0x09fb: 0x1189, + 0x09fc: 0x1191, 0x09fd: 0x11a5, 0x09fe: 0x1fb9, 0x09ff: 0x11ad, + // Block 0x28, offset 0xa00 + 0x0a00: 0x11a1, 0x0a01: 0x1199, 0x0a02: 0x0b2d, 0x0a03: 0x11b5, 0x0a04: 0x11bd, 0x0a05: 0x11c5, + 0x0a06: 0x11b9, 0x0a07: 0x0b31, 0x0a08: 0x11d5, 0x0a09: 0x11dd, 0x0a0a: 0x1fbe, 0x0a0b: 0x1209, + 0x0a0c: 0x123d, 0x0a0d: 0x1219, 0x0a0e: 0x0b3d, 0x0a0f: 0x1225, 0x0a10: 0x0b39, 0x0a11: 0x0b35, + 0x0a12: 0x0d01, 0x0a13: 0x0d05, 0x0a14: 0x1241, 0x0a15: 0x1229, 0x0a16: 0x16e9, 0x0a17: 0x0ba1, + 0x0a18: 0x124d, 0x0a19: 0x1251, 0x0a1a: 0x1255, 0x0a1b: 0x1269, 0x0a1c: 0x1261, 0x0a1d: 0x1fd7, + 0x0a1e: 0x0b41, 0x0a1f: 0x127d, 0x0a20: 0x1271, 0x0a21: 0x128d, 0x0a22: 0x1295, 0x0a23: 0x1fe1, + 0x0a24: 0x1299, 0x0a25: 0x1285, 0x0a26: 0x12a1, 0x0a27: 0x0b45, 0x0a28: 0x12a5, 0x0a29: 0x12a9, + 0x0a2a: 0x12ad, 0x0a2b: 0x12b9, 0x0a2c: 0x1fe6, 0x0a2d: 0x12c1, 0x0a2e: 0x0b49, 0x0a2f: 0x12cd, + 0x0a30: 0x1feb, 0x0a31: 0x12d1, 0x0a32: 0x0b4d, 0x0a33: 0x12dd, 0x0a34: 0x12e9, 0x0a35: 0x12f5, + 0x0a36: 0x12f9, 0x0a37: 0x1ff0, 0x0a38: 0x1f87, 0x0a39: 0x1ff5, 0x0a3a: 0x1319, 0x0a3b: 0x1ffa, + 0x0a3c: 0x1325, 0x0a3d: 0x132d, 0x0a3e: 0x131d, 0x0a3f: 0x1339, + // Block 0x29, offset 0xa40 + 0x0a40: 0x1349, 0x0a41: 0x1359, 0x0a42: 0x134d, 0x0a43: 0x1351, 0x0a44: 0x135d, 0x0a45: 0x1361, + 0x0a46: 0x1fff, 0x0a47: 0x1345, 0x0a48: 0x1379, 0x0a49: 0x137d, 0x0a4a: 0x0b51, 0x0a4b: 0x1391, + 0x0a4c: 0x138d, 0x0a4d: 0x2004, 0x0a4e: 0x1371, 0x0a4f: 0x13ad, 0x0a50: 0x2009, 0x0a51: 0x200e, + 0x0a52: 0x13b1, 0x0a53: 0x13c5, 0x0a54: 0x13c1, 0x0a55: 0x13bd, 0x0a56: 0x0b55, 0x0a57: 0x13c9, + 0x0a58: 0x13d9, 0x0a59: 0x13d5, 0x0a5a: 0x13e1, 0x0a5b: 0x1f4b, 0x0a5c: 0x13f1, 0x0a5d: 0x2013, + 0x0a5e: 0x13fd, 0x0a5f: 0x201d, 0x0a60: 0x1411, 0x0a61: 0x141d, 0x0a62: 0x1431, 0x0a63: 0x2022, + 0x0a64: 0x1445, 0x0a65: 0x1449, 0x0a66: 0x2027, 0x0a67: 0x202c, 0x0a68: 0x1465, 0x0a69: 0x1475, + 0x0a6a: 0x0b59, 0x0a6b: 0x1479, 0x0a6c: 0x0b5d, 0x0a6d: 0x0b5d, 0x0a6e: 0x1491, 0x0a6f: 0x1495, + 0x0a70: 0x149d, 0x0a71: 0x14a1, 0x0a72: 0x14ad, 0x0a73: 0x0b61, 0x0a74: 0x14c5, 0x0a75: 0x2031, + 0x0a76: 0x14e1, 0x0a77: 0x2036, 0x0a78: 0x14ed, 0x0a79: 0x1f9b, 0x0a7a: 0x14fd, 0x0a7b: 0x203b, + 0x0a7c: 0x2040, 0x0a7d: 0x2045, 0x0a7e: 0x0b65, 0x0a7f: 0x0b69, + // Block 0x2a, offset 0xa80 + 0x0a80: 0x1535, 0x0a81: 0x204f, 0x0a82: 0x204a, 0x0a83: 0x2054, 0x0a84: 0x2059, 0x0a85: 0x153d, + 0x0a86: 0x1541, 0x0a87: 0x1541, 0x0a88: 0x1549, 0x0a89: 0x0b71, 0x0a8a: 0x154d, 0x0a8b: 0x0b75, + 0x0a8c: 0x0b79, 0x0a8d: 0x2063, 0x0a8e: 0x1561, 0x0a8f: 0x1569, 0x0a90: 0x1575, 0x0a91: 0x0b7d, + 0x0a92: 0x2068, 0x0a93: 0x1599, 0x0a94: 0x206d, 0x0a95: 0x2072, 0x0a96: 0x15b9, 0x0a97: 0x15d1, + 0x0a98: 0x0b81, 0x0a99: 0x15d9, 0x0a9a: 0x15dd, 0x0a9b: 0x15e1, 0x0a9c: 0x2077, 0x0a9d: 0x207c, + 0x0a9e: 0x207c, 0x0a9f: 0x15f9, 0x0aa0: 0x0b85, 0x0aa1: 0x2081, 0x0aa2: 0x160d, 0x0aa3: 0x1611, + 0x0aa4: 0x0b89, 0x0aa5: 0x2086, 0x0aa6: 0x162d, 0x0aa7: 0x0b8d, 0x0aa8: 0x163d, 0x0aa9: 0x1635, + 0x0aaa: 0x1645, 0x0aab: 0x2090, 0x0aac: 0x165d, 0x0aad: 0x0b91, 0x0aae: 0x1669, 0x0aaf: 0x1671, + 0x0ab0: 0x1681, 0x0ab1: 0x0b95, 0x0ab2: 0x209a, 0x0ab3: 0x209f, 0x0ab4: 0x0b99, 0x0ab5: 0x20a4, + 0x0ab6: 0x1699, 0x0ab7: 0x20a9, 0x0ab8: 0x16a5, 0x0ab9: 0x16b1, 0x0aba: 0x16b9, 0x0abb: 0x20ae, + 0x0abc: 0x20b3, 0x0abd: 0x16cd, 0x0abe: 0x20b8, 0x0abf: 0x16d5, + // Block 0x2b, offset 0xac0 + 0x0ac0: 0x1fc8, 0x0ac1: 0x0b9d, 0x0ac2: 0x16ed, 0x0ac3: 0x16f1, 0x0ac4: 0x0ba5, 0x0ac5: 0x16f5, + 0x0ac6: 0x0f71, 0x0ac7: 0x20bd, 0x0ac8: 0x20c2, 0x0ac9: 0x1fcd, 0x0aca: 0x1fd2, 0x0acb: 0x1715, + 0x0acc: 0x1719, 0x0acd: 0x1931, 0x0ace: 0x0ba9, 0x0acf: 0x1745, 0x0ad0: 0x1741, 0x0ad1: 0x1749, + 0x0ad2: 0x0d7d, 0x0ad3: 0x174d, 0x0ad4: 0x1751, 0x0ad5: 0x1755, 0x0ad6: 0x175d, 0x0ad7: 0x20c7, + 0x0ad8: 0x1759, 0x0ad9: 0x1761, 0x0ada: 0x1775, 0x0adb: 0x1779, 0x0adc: 0x1765, 0x0add: 0x177d, + 0x0ade: 0x1791, 0x0adf: 0x17a5, 0x0ae0: 0x1771, 0x0ae1: 0x1785, 0x0ae2: 0x1789, 0x0ae3: 0x178d, + 0x0ae4: 0x20cc, 0x0ae5: 0x20d6, 0x0ae6: 0x20d1, 0x0ae7: 0x0bad, 0x0ae8: 0x17ad, 0x0ae9: 0x17b1, + 0x0aea: 0x17b9, 0x0aeb: 0x20ea, 0x0aec: 0x17bd, 0x0aed: 0x20db, 0x0aee: 0x0bb1, 0x0aef: 0x0bb5, + 0x0af0: 0x20e0, 0x0af1: 0x20e5, 0x0af2: 0x0bb9, 0x0af3: 0x17dd, 0x0af4: 0x17e1, 0x0af5: 0x17e5, + 0x0af6: 0x17e9, 0x0af7: 0x17f5, 0x0af8: 0x17f1, 0x0af9: 0x17fd, 0x0afa: 0x17f9, 0x0afb: 0x1809, + 0x0afc: 0x1801, 0x0afd: 0x1805, 0x0afe: 0x180d, 0x0aff: 0x0bbd, + // Block 0x2c, offset 0xb00 + 0x0b00: 0x1815, 0x0b01: 0x1819, 0x0b02: 0x0bc1, 0x0b03: 0x1829, 0x0b04: 0x182d, 0x0b05: 0x20ef, + 0x0b06: 0x1839, 0x0b07: 0x183d, 0x0b08: 0x0bc5, 0x0b09: 0x1849, 0x0b0a: 0x0af9, 0x0b0b: 0x20f4, + 0x0b0c: 0x20f9, 0x0b0d: 0x0bc9, 0x0b0e: 0x0bcd, 0x0b0f: 0x1875, 0x0b10: 0x188d, 0x0b11: 0x18a9, + 0x0b12: 0x18b9, 0x0b13: 0x20fe, 0x0b14: 0x18cd, 0x0b15: 0x18d1, 0x0b16: 0x18e9, 0x0b17: 0x18f5, + 0x0b18: 0x2108, 0x0b19: 0x1f5a, 0x0b1a: 0x1901, 0x0b1b: 0x18fd, 0x0b1c: 0x1909, 0x0b1d: 0x1f5f, + 0x0b1e: 0x1915, 0x0b1f: 0x1921, 0x0b20: 0x210d, 0x0b21: 0x2112, 0x0b22: 0x1961, 0x0b23: 0x1969, + 0x0b24: 0x1971, 0x0b25: 0x2117, 0x0b26: 0x1975, 0x0b27: 0x199d, 0x0b28: 0x19a9, 0x0b29: 0x19ad, + 0x0b2a: 0x19a5, 0x0b2b: 0x19b9, 0x0b2c: 0x19bd, 0x0b2d: 0x211c, 0x0b2e: 0x19c9, 0x0b2f: 0x0bd1, + 0x0b30: 0x19d1, 0x0b31: 0x2121, 0x0b32: 0x0bd5, 0x0b33: 0x1a05, 0x0b34: 0x1001, 0x0b35: 0x1a1d, + 0x0b36: 0x2126, 0x0b37: 0x2130, 0x0b38: 0x0bd9, 0x0b39: 0x0bdd, 0x0b3a: 0x1a45, 0x0b3b: 0x2135, + 0x0b3c: 0x0be1, 0x0b3d: 0x213a, 0x0b3e: 0x1a5d, 0x0b3f: 0x1a5d, + // Block 0x2d, offset 0xb40 + 0x0b40: 0x1a65, 0x0b41: 0x213f, 0x0b42: 0x1a7d, 0x0b43: 0x0be5, 0x0b44: 0x1a8d, 0x0b45: 0x1a99, + 0x0b46: 0x1aa1, 0x0b47: 0x1aa9, 0x0b48: 0x0be9, 0x0b49: 0x2144, 0x0b4a: 0x1abd, 0x0b4b: 0x1ad9, + 0x0b4c: 0x1ae5, 0x0b4d: 0x0bed, 0x0b4e: 0x0bf1, 0x0b4f: 0x1ae9, 0x0b50: 0x2149, 0x0b51: 0x0bf5, + 0x0b52: 0x214e, 0x0b53: 0x2153, 0x0b54: 0x2158, 0x0b55: 0x1b0d, 0x0b56: 0x0bf9, 0x0b57: 0x1b21, + 0x0b58: 0x1b29, 0x0b59: 0x1b2d, 0x0b5a: 0x1b35, 0x0b5b: 0x1b3d, 0x0b5c: 0x1b45, 0x0b5d: 0x2162, } -// nfcDecompSparseOffset: 56 entries, 112 bytes -var nfcDecompSparseOffset = []uint16{0x0, 0xa, 0x10, 0x15, 0x18, 0x22, 0x27, 0x2e, 0x31, 0x38, 0x3e, 0x46, 0x48, 0x4c, 0x50, 0x52, 0x56, 0x59, 0x5c, 0x60, 0x62, 0x64, 0x66, 0x6a, 0x6c, 0x70, 0x7a, 0x82, 0x84, 0x8d, 0x90, 0x9e, 0xa0, 0xa4, 0xa7, 0xa9, 0xaf, 0xbb, 0xc0, 0xc3, 0xc5, 0xc7, 0xd4, 0xe2, 0xed, 0xf4, 0xff, 0x10b, 0x11c, 0x12d, 0x135, 0x139, 0x13d, 0x141, 0x145, 0x147} +// nfcSparseOffset: 94 entries, 188 bytes +var nfcSparseOffset = []uint16{0x0, 0x2, 0x6, 0x8, 0x13, 0x23, 0x25, 0x2a, 0x35, 0x44, 0x51, 0x59, 0x5d, 0x62, 0x64, 0x6c, 0x73, 0x76, 0x7e, 0x82, 0x86, 0x88, 0x8a, 0x93, 0x97, 0x9e, 0xa3, 0xa6, 0xb0, 0xb2, 0xb9, 0xc1, 0xc4, 0xc6, 0xc8, 0xca, 0xcf, 0xde, 0xea, 0xec, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, 0x101, 0x104, 0x106, 0x109, 0x10c, 0x110, 0x119, 0x11b, 0x11e, 0x120, 0x129, 0x138, 0x13a, 0x148, 0x14b, 0x151, 0x157, 0x162, 0x166, 0x168, 0x16a, 0x16c, 0x16e, 0x170, 0x176, 0x179, 0x17b, 0x17d, 0x180, 0x182, 0x184, 0x186, 0x188, 0x18e, 0x190, 0x192, 0x194, 0x196, 0x1a4, 0x1ad, 0x1af, 0x1b1, 0x1b7, 0x1bf, 0x1cc, 0x1d6, 0x1d8} -// nfcDecompSparseValues: 341 entries, 1364 bytes -var nfcDecompSparseValues = [341]valueRange{ +// nfcSparseValues: 474 entries, 1896 bytes +var nfcSparseValues = [474]valueRange{ // Block 0x0, offset 0x1 - {value: 0x0004, lo: 0x09}, - {value: 0x0032, lo: 0x80, hi: 0x85}, - {value: 0x004a, lo: 0x87, hi: 0x8f}, - {value: 0x006e, lo: 0x91, hi: 0x96}, - {value: 0x0086, lo: 0x99, hi: 0x9d}, - {value: 0x009a, lo: 0xa0, hi: 0xa5}, - {value: 0x00b2, lo: 0xa7, hi: 0xaf}, - {value: 0x00d6, lo: 0xb1, hi: 0xb6}, - {value: 0x00ee, lo: 0xb9, hi: 0xbd}, - {value: 0x0102, lo: 0xbf, hi: 0xbf}, + {value: 0x0000, lo: 0x01}, + {value: 0x8800, lo: 0xa8, hi: 0xa8}, // Block 0x1, offset 0x2 - {value: 0x0004, lo: 0x05}, - {value: 0x0106, lo: 0x80, hi: 0x8f}, - {value: 0x0146, lo: 0x92, hi: 0xa5}, - {value: 0x0196, lo: 0xa8, hi: 0xb0}, - {value: 0x01c0, lo: 0xb4, hi: 0xb7}, - {value: 0x01d0, lo: 0xb9, hi: 0xbe}, + {value: 0x0091, lo: 0x03}, + {value: 0x4699, lo: 0xa0, hi: 0xa1}, + {value: 0x46cb, lo: 0xaf, hi: 0xb0}, + {value: 0x8800, lo: 0xb7, hi: 0xb7}, // Block 0x2, offset 0x3 - {value: 0x0004, lo: 0x04}, - {value: 0x01f0, lo: 0x83, hi: 0x88}, - {value: 0x020c, lo: 0x8c, hi: 0x91}, - {value: 0x0224, lo: 0x94, hi: 0xa5}, - {value: 0x026c, lo: 0xa8, hi: 0xbe}, + {value: 0x0000, lo: 0x01}, + {value: 0x8800, lo: 0x92, hi: 0x92}, // Block 0x3, offset 0x4 - {value: 0x0004, lo: 0x02}, - {value: 0x02ca, lo: 0xa0, hi: 0xa1}, - {value: 0x02d2, lo: 0xaf, hi: 0xb0}, + {value: 0x0006, lo: 0x0a}, + {value: 0x8800, lo: 0x81, hi: 0x81}, + {value: 0x8800, lo: 0x85, hi: 0x85}, + {value: 0x8800, lo: 0x89, hi: 0x89}, + {value: 0x47f7, lo: 0x8a, hi: 0x8a}, + {value: 0x4815, lo: 0x8b, hi: 0x8b}, + {value: 0x35ac, lo: 0x8c, hi: 0x8c}, + {value: 0x35c4, lo: 0x8d, hi: 0x8d}, + {value: 0x482d, lo: 0x8e, hi: 0x8e}, + {value: 0x8800, lo: 0x92, hi: 0x92}, + {value: 0x35e2, lo: 0x93, hi: 0x94}, // Block 0x4, offset 0x5 - {value: 0x0004, lo: 0x09}, - {value: 0x03d8, lo: 0x80, hi: 0x9b}, - {value: 0x0448, lo: 0x9e, hi: 0x9f}, - {value: 0x0450, lo: 0xa6, hi: 0xaa}, - {value: 0x0466, lo: 0xab, hi: 0xab}, - {value: 0x046c, lo: 0xac, hi: 0xac}, - {value: 0x0472, lo: 0xad, hi: 0xad}, - {value: 0x0478, lo: 0xae, hi: 0xb0}, - {value: 0x0486, lo: 0xb1, hi: 0xb1}, - {value: 0x048c, lo: 0xb2, hi: 0xb3}, + {value: 0x0000, lo: 0x0f}, + {value: 0x8800, lo: 0x83, hi: 0x83}, + {value: 0x8800, lo: 0x87, hi: 0x87}, + {value: 0x8800, lo: 0x8b, hi: 0x8b}, + {value: 0x8800, lo: 0x8d, hi: 0x8d}, + {value: 0x368a, lo: 0x90, hi: 0x90}, + {value: 0x3696, lo: 0x91, hi: 0x91}, + {value: 0x3684, lo: 0x93, hi: 0x93}, + {value: 0x8800, lo: 0x96, hi: 0x96}, + {value: 0x36fc, lo: 0x97, hi: 0x97}, + {value: 0x36c6, lo: 0x9c, hi: 0x9c}, + {value: 0x36ae, lo: 0x9d, hi: 0x9d}, + {value: 0x36d8, lo: 0x9e, hi: 0x9e}, + {value: 0x8800, lo: 0xb4, hi: 0xb5}, + {value: 0x3702, lo: 0xb6, hi: 0xb6}, + {value: 0x3708, lo: 0xb7, hi: 0xb7}, // Block 0x5, offset 0x6 - {value: 0x0003, lo: 0x04}, - {value: 0x04cc, lo: 0x80, hi: 0x81}, - {value: 0x04d2, lo: 0x83, hi: 0x84}, - {value: 0x04da, lo: 0xb4, hi: 0xb4}, - {value: 0x04e1, lo: 0xbe, hi: 0xbe}, + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0x83, hi: 0x87}, // Block 0x6, offset 0x7 - {value: 0x0005, lo: 0x06}, - {value: 0x04e3, lo: 0x85, hi: 0x85}, - {value: 0x04ee, lo: 0x86, hi: 0x87}, - {value: 0x04f6, lo: 0x88, hi: 0x8a}, - {value: 0x0505, lo: 0x8c, hi: 0x8c}, - {value: 0x050a, lo: 0x8e, hi: 0x90}, - {value: 0x051b, lo: 0xaa, hi: 0xb0}, + {value: 0x0001, lo: 0x04}, + {value: 0x8018, lo: 0x81, hi: 0x82}, + {value: 0x80e6, lo: 0x84, hi: 0x84}, + {value: 0x80dc, lo: 0x85, hi: 0x85}, + {value: 0x8012, lo: 0x87, hi: 0x87}, // Block 0x7, offset 0x8 - {value: 0x0005, lo: 0x02}, - {value: 0x0540, lo: 0x8a, hi: 0x8e}, - {value: 0x0562, lo: 0x93, hi: 0x94}, + {value: 0x0000, lo: 0x0a}, + {value: 0x80e6, lo: 0x90, hi: 0x97}, + {value: 0x801e, lo: 0x98, hi: 0x98}, + {value: 0x801f, lo: 0x99, hi: 0x99}, + {value: 0x8020, lo: 0x9a, hi: 0x9a}, + {value: 0x3726, lo: 0xa2, hi: 0xa2}, + {value: 0x372c, lo: 0xa3, hi: 0xa3}, + {value: 0x3738, lo: 0xa4, hi: 0xa4}, + {value: 0x3732, lo: 0xa5, hi: 0xa5}, + {value: 0x373e, lo: 0xa6, hi: 0xa6}, + {value: 0x8800, lo: 0xa7, hi: 0xa7}, // Block 0x8, offset 0x9 - {value: 0x0005, lo: 0x06}, - {value: 0x0584, lo: 0x80, hi: 0x81}, - {value: 0x058e, lo: 0x83, hi: 0x83}, - {value: 0x0593, lo: 0x87, hi: 0x87}, - {value: 0x0598, lo: 0x8c, hi: 0x8e}, - {value: 0x05a7, lo: 0x99, hi: 0x99}, - {value: 0x05ac, lo: 0xb9, hi: 0xb9}, + {value: 0x0000, lo: 0x0e}, + {value: 0x3750, lo: 0x80, hi: 0x80}, + {value: 0x8800, lo: 0x81, hi: 0x81}, + {value: 0x3744, lo: 0x82, hi: 0x82}, + {value: 0x8800, lo: 0x92, hi: 0x92}, + {value: 0x374a, lo: 0x93, hi: 0x93}, + {value: 0x8800, lo: 0x95, hi: 0x95}, + {value: 0x80e6, lo: 0x96, hi: 0x9c}, + {value: 0x80e6, lo: 0x9f, hi: 0xa2}, + {value: 0x80dc, lo: 0xa3, hi: 0xa3}, + {value: 0x80e6, lo: 0xa4, hi: 0xa4}, + {value: 0x80e6, lo: 0xa7, hi: 0xa8}, + {value: 0x80dc, lo: 0xaa, hi: 0xaa}, + {value: 0x80e6, lo: 0xab, hi: 0xac}, + {value: 0x80dc, lo: 0xad, hi: 0xad}, // Block 0x9, offset 0xa - {value: 0x0005, lo: 0x05}, - {value: 0x05b1, lo: 0x90, hi: 0x91}, - {value: 0x05bb, lo: 0x93, hi: 0x93}, - {value: 0x05c0, lo: 0x97, hi: 0x97}, - {value: 0x05c5, lo: 0x9c, hi: 0x9e}, - {value: 0x05d4, lo: 0xb6, hi: 0xb7}, + {value: 0x0000, lo: 0x0c}, + {value: 0x8024, lo: 0x91, hi: 0x91}, + {value: 0x80e6, lo: 0xb0, hi: 0xb0}, + {value: 0x80dc, lo: 0xb1, hi: 0xb1}, + {value: 0x80e6, lo: 0xb2, hi: 0xb3}, + {value: 0x80dc, lo: 0xb4, hi: 0xb4}, + {value: 0x80e6, lo: 0xb5, hi: 0xb6}, + {value: 0x80dc, lo: 0xb7, hi: 0xb9}, + {value: 0x80e6, lo: 0xba, hi: 0xba}, + {value: 0x80dc, lo: 0xbb, hi: 0xbc}, + {value: 0x80e6, lo: 0xbd, hi: 0xbd}, + {value: 0x80dc, lo: 0xbe, hi: 0xbe}, + {value: 0x80e6, lo: 0xbf, hi: 0xbf}, // Block 0xa, offset 0xb - {value: 0x0005, lo: 0x07}, - {value: 0x05de, lo: 0x81, hi: 0x82}, - {value: 0x05e8, lo: 0x90, hi: 0x93}, - {value: 0x05fc, lo: 0x96, hi: 0x97}, - {value: 0x0606, lo: 0x9a, hi: 0x9f}, - {value: 0x0624, lo: 0xa2, hi: 0xa7}, - {value: 0x0642, lo: 0xaa, hi: 0xb5}, - {value: 0x067e, lo: 0xb8, hi: 0xb9}, + {value: 0x000a, lo: 0x07}, + {value: 0x80e6, lo: 0x80, hi: 0x80}, + {value: 0x80e6, lo: 0x81, hi: 0x81}, + {value: 0x80dc, lo: 0x82, hi: 0x83}, + {value: 0x80dc, lo: 0x84, hi: 0x85}, + {value: 0x80dc, lo: 0x86, hi: 0x87}, + {value: 0x80dc, lo: 0x88, hi: 0x89}, + {value: 0x80e6, lo: 0x8a, hi: 0x8a}, // Block 0xb, offset 0xc - {value: 0x0005, lo: 0x01}, - {value: 0x068d, lo: 0xa2, hi: 0xa6}, - // Block 0xc, offset 0xd {value: 0x0000, lo: 0x03}, - {value: 0x06ba, lo: 0x80, hi: 0x80}, - {value: 0x06bf, lo: 0x82, hi: 0x82}, - {value: 0x06c4, lo: 0x93, hi: 0x93}, + {value: 0x80e6, lo: 0xab, hi: 0xb1}, + {value: 0x80dc, lo: 0xb2, hi: 0xb2}, + {value: 0x80e6, lo: 0xb3, hi: 0xb3}, + // Block 0xc, offset 0xd + {value: 0x0000, lo: 0x04}, + {value: 0x80e6, lo: 0x96, hi: 0x99}, + {value: 0x80e6, lo: 0x9b, hi: 0xa3}, + {value: 0x80e6, lo: 0xa5, hi: 0xa7}, + {value: 0x80e6, lo: 0xa9, hi: 0xad}, // Block 0xd, offset 0xe - {value: 0x0000, lo: 0x03}, - {value: 0x06c9, lo: 0xa9, hi: 0xa9}, - {value: 0x06d0, lo: 0xb1, hi: 0xb1}, - {value: 0x06d7, lo: 0xb4, hi: 0xb4}, + {value: 0x0000, lo: 0x01}, + {value: 0x80dc, lo: 0x99, hi: 0x9b}, // Block 0xe, offset 0xf - {value: 0x0007, lo: 0x01}, - {value: 0x06de, lo: 0x98, hi: 0x9f}, + {value: 0x0000, lo: 0x07}, + {value: 0x8800, lo: 0xa8, hi: 0xa8}, + {value: 0x3dbd, lo: 0xa9, hi: 0xa9}, + {value: 0x8800, lo: 0xb0, hi: 0xb0}, + {value: 0x3dc5, lo: 0xb1, hi: 0xb1}, + {value: 0x8800, lo: 0xb3, hi: 0xb3}, + {value: 0x3dcd, lo: 0xb4, hi: 0xb4}, + {value: 0x8607, lo: 0xbc, hi: 0xbc}, // Block 0xf, offset 0x10 - {value: 0x0007, lo: 0x03}, - {value: 0x0716, lo: 0x8b, hi: 0x8c}, - {value: 0x0724, lo: 0x9c, hi: 0x9d}, - {value: 0x0732, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0x06}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x80e6, lo: 0x91, hi: 0x91}, + {value: 0x80dc, lo: 0x92, hi: 0x92}, + {value: 0x80e6, lo: 0x93, hi: 0x93}, + {value: 0x80e6, lo: 0x94, hi: 0x94}, + {value: 0x4432, lo: 0x98, hi: 0x9f}, // Block 0x10, offset 0x11 {value: 0x0000, lo: 0x02}, - {value: 0x0739, lo: 0xb3, hi: 0xb3}, - {value: 0x0740, lo: 0xb6, hi: 0xb6}, + {value: 0x8007, lo: 0xbc, hi: 0xbc}, + {value: 0x8600, lo: 0xbe, hi: 0xbe}, // Block 0x11, offset 0x12 - {value: 0x0007, lo: 0x02}, - {value: 0x0747, lo: 0x99, hi: 0x9b}, - {value: 0x075c, lo: 0x9e, hi: 0x9e}, + {value: 0x0007, lo: 0x07}, + {value: 0x8800, lo: 0x87, hi: 0x87}, + {value: 0x0001, lo: 0x8b, hi: 0x8c}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x8600, lo: 0x97, hi: 0x97}, + {value: 0x4472, lo: 0x9c, hi: 0x9c}, + {value: 0x447a, lo: 0x9d, hi: 0x9d}, + {value: 0x4482, lo: 0x9f, hi: 0x9f}, // Block 0x12, offset 0x13 - {value: 0x0007, lo: 0x03}, - {value: 0x0763, lo: 0x88, hi: 0x88}, - {value: 0x076a, lo: 0x8b, hi: 0x8c}, - {value: 0x0778, lo: 0x9c, hi: 0x9d}, + {value: 0x0000, lo: 0x03}, + {value: 0x44aa, lo: 0xb3, hi: 0xb3}, + {value: 0x44b2, lo: 0xb6, hi: 0xb6}, + {value: 0x8007, lo: 0xbc, hi: 0xbc}, // Block 0x13, offset 0x14 - {value: 0x0000, lo: 0x01}, - {value: 0x0786, lo: 0x94, hi: 0x94}, + {value: 0x0008, lo: 0x03}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x448a, lo: 0x99, hi: 0x9b}, + {value: 0x44a2, lo: 0x9e, hi: 0x9e}, // Block 0x14, offset 0x15 - {value: 0x0007, lo: 0x01}, - {value: 0x078d, lo: 0x8a, hi: 0x8c}, + {value: 0x0000, lo: 0x01}, + {value: 0x8007, lo: 0xbc, hi: 0xbc}, // Block 0x15, offset 0x16 {value: 0x0000, lo: 0x01}, - {value: 0x07a2, lo: 0x88, hi: 0x88}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, // Block 0x16, offset 0x17 - {value: 0x0007, lo: 0x03}, - {value: 0x07a9, lo: 0x80, hi: 0x80}, - {value: 0x07b0, lo: 0x87, hi: 0x88}, - {value: 0x07be, lo: 0x8a, hi: 0x8b}, + {value: 0x0000, lo: 0x08}, + {value: 0x8800, lo: 0x87, hi: 0x87}, + {value: 0x0016, lo: 0x88, hi: 0x88}, + {value: 0x000f, lo: 0x8b, hi: 0x8b}, + {value: 0x001d, lo: 0x8c, hi: 0x8c}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x8600, lo: 0x96, hi: 0x97}, + {value: 0x44ba, lo: 0x9c, hi: 0x9c}, + {value: 0x44c2, lo: 0x9d, hi: 0x9d}, // Block 0x17, offset 0x18 - {value: 0x0007, lo: 0x01}, - {value: 0x07cf, lo: 0x8a, hi: 0x8c}, + {value: 0x0000, lo: 0x03}, + {value: 0x8800, lo: 0x92, hi: 0x92}, + {value: 0x0024, lo: 0x94, hi: 0x94}, + {value: 0x8600, lo: 0xbe, hi: 0xbe}, // Block 0x18, offset 0x19 - {value: 0x0007, lo: 0x03}, - {value: 0x07e4, lo: 0x9a, hi: 0x9a}, - {value: 0x07eb, lo: 0x9c, hi: 0x9d}, - {value: 0x07fc, lo: 0x9e, hi: 0x9e}, + {value: 0x0000, lo: 0x06}, + {value: 0x8800, lo: 0x86, hi: 0x87}, + {value: 0x002b, lo: 0x8a, hi: 0x8a}, + {value: 0x0039, lo: 0x8b, hi: 0x8b}, + {value: 0x0032, lo: 0x8c, hi: 0x8c}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x8600, lo: 0x97, hi: 0x97}, // Block 0x19, offset 0x1a - {value: 0x0007, lo: 0x09}, - {value: 0x0823, lo: 0x83, hi: 0x83}, - {value: 0x082a, lo: 0x8d, hi: 0x8d}, - {value: 0x0831, lo: 0x92, hi: 0x92}, - {value: 0x0838, lo: 0x97, hi: 0x97}, - {value: 0x083f, lo: 0x9c, hi: 0x9c}, - {value: 0x0846, lo: 0xa9, hi: 0xa9}, - {value: 0x084d, lo: 0xb3, hi: 0xb3}, - {value: 0x0854, lo: 0xb5, hi: 0xb6}, - {value: 0x086c, lo: 0xb8, hi: 0xb8}, + {value: 0x0607, lo: 0x04}, + {value: 0x8800, lo: 0x86, hi: 0x86}, + {value: 0x3dd5, lo: 0x88, hi: 0x88}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x8054, lo: 0x95, hi: 0x96}, // Block 0x1a, offset 0x1b - {value: 0x0000, lo: 0x07}, - {value: 0x087d, lo: 0x81, hi: 0x81}, - {value: 0x0884, lo: 0x93, hi: 0x93}, - {value: 0x088b, lo: 0x9d, hi: 0x9d}, - {value: 0x0892, lo: 0xa2, hi: 0xa2}, - {value: 0x0899, lo: 0xa7, hi: 0xa7}, - {value: 0x08a0, lo: 0xac, hi: 0xac}, - {value: 0x08a7, lo: 0xb9, hi: 0xb9}, + {value: 0x0000, lo: 0x02}, + {value: 0x8007, lo: 0xbc, hi: 0xbc}, + {value: 0x8800, lo: 0xbf, hi: 0xbf}, // Block 0x1b, offset 0x1c - {value: 0x0000, lo: 0x01}, - {value: 0x08ae, lo: 0xa6, hi: 0xa6}, + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x8600, lo: 0x82, hi: 0x82}, + {value: 0x8800, lo: 0x86, hi: 0x86}, + {value: 0x0047, lo: 0x87, hi: 0x87}, + {value: 0x004e, lo: 0x88, hi: 0x88}, + {value: 0x2e37, lo: 0x8a, hi: 0x8a}, + {value: 0x00c5, lo: 0x8b, hi: 0x8b}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x8600, lo: 0x95, hi: 0x96}, // Block 0x1c, offset 0x1d - {value: 0x0000, lo: 0x08}, - {value: 0x08b9, lo: 0x86, hi: 0x86}, - {value: 0x08c0, lo: 0x88, hi: 0x88}, - {value: 0x08c7, lo: 0x8a, hi: 0x8a}, - {value: 0x08ce, lo: 0x8c, hi: 0x8c}, - {value: 0x08d5, lo: 0x8e, hi: 0x8e}, - {value: 0x08dc, lo: 0x92, hi: 0x92}, - {value: 0x08e3, lo: 0xbb, hi: 0xbb}, - {value: 0x08ea, lo: 0xbd, hi: 0xbd}, + {value: 0x0000, lo: 0x01}, + {value: 0x8600, lo: 0xbe, hi: 0xbe}, // Block 0x1d, offset 0x1e - {value: 0x0007, lo: 0x02}, - {value: 0x08f1, lo: 0x80, hi: 0x81}, - {value: 0x08ff, lo: 0x83, hi: 0x83}, + {value: 0x0000, lo: 0x06}, + {value: 0x8800, lo: 0x86, hi: 0x87}, + {value: 0x0055, lo: 0x8a, hi: 0x8a}, + {value: 0x0063, lo: 0x8b, hi: 0x8b}, + {value: 0x005c, lo: 0x8c, hi: 0x8c}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x8600, lo: 0x97, hi: 0x97}, // Block 0x1e, offset 0x1f - {value: 0x0004, lo: 0x0d}, - {value: 0x09ea, lo: 0x80, hi: 0x88}, - {value: 0x0a10, lo: 0x89, hi: 0x89}, - {value: 0x0a16, lo: 0x8a, hi: 0x94}, - {value: 0x0a44, lo: 0x95, hi: 0x95}, - {value: 0x0a4a, lo: 0x96, hi: 0x96}, - {value: 0x0a50, lo: 0x97, hi: 0x97}, - {value: 0x0a56, lo: 0x98, hi: 0x9c}, - {value: 0x0a6c, lo: 0x9d, hi: 0x9d}, - {value: 0x0a72, lo: 0x9e, hi: 0xae}, - {value: 0x0ab8, lo: 0xaf, hi: 0xaf}, - {value: 0x0abe, lo: 0xb0, hi: 0xb8}, - {value: 0x0ae4, lo: 0xb9, hi: 0xb9}, - {value: 0x0aea, lo: 0xba, hi: 0xbf}, + {value: 0x12fd, lo: 0x07}, + {value: 0x8609, lo: 0x8a, hi: 0x8a}, + {value: 0x8600, lo: 0x8f, hi: 0x8f}, + {value: 0x8800, lo: 0x99, hi: 0x99}, + {value: 0x3ddd, lo: 0x9a, hi: 0x9a}, + {value: 0x2e3e, lo: 0x9c, hi: 0x9d}, + {value: 0x006a, lo: 0x9e, hi: 0x9e}, + {value: 0x8600, lo: 0x9f, hi: 0x9f}, // Block 0x1f, offset 0x20 - {value: 0x0004, lo: 0x01}, - {value: 0x142e, lo: 0x80, hi: 0x81}, + {value: 0x0000, lo: 0x02}, + {value: 0x8067, lo: 0xb8, hi: 0xb9}, + {value: 0x8009, lo: 0xba, hi: 0xba}, // Block 0x20, offset 0x21 - {value: 0x0000, lo: 0x03}, - {value: 0x14d6, lo: 0xa6, hi: 0xa6}, - {value: 0x091c, lo: 0xaa, hi: 0xaa}, - {value: 0x0046, lo: 0xab, hi: 0xab}, + {value: 0x0000, lo: 0x01}, + {value: 0x806b, lo: 0x88, hi: 0x8b}, // Block 0x21, offset 0x22 - {value: 0x0006, lo: 0x02}, - {value: 0x159f, lo: 0x9a, hi: 0x9b}, - {value: 0x15ab, lo: 0xae, hi: 0xae}, + {value: 0x0000, lo: 0x01}, + {value: 0x8076, lo: 0xb8, hi: 0xb9}, // Block 0x22, offset 0x23 - {value: 0x0006, lo: 0x01}, - {value: 0x15b1, lo: 0x8d, hi: 0x8f}, + {value: 0x0000, lo: 0x01}, + {value: 0x807a, lo: 0x88, hi: 0x8b}, // Block 0x23, offset 0x24 - {value: 0x0000, lo: 0x05}, - {value: 0x15c3, lo: 0x84, hi: 0x84}, - {value: 0x15c9, lo: 0x89, hi: 0x89}, - {value: 0x15cf, lo: 0x8c, hi: 0x8c}, - {value: 0x15d5, lo: 0xa4, hi: 0xa4}, - {value: 0x15db, lo: 0xa6, hi: 0xa6}, + {value: 0x0000, lo: 0x04}, + {value: 0x80dc, lo: 0x98, hi: 0x99}, + {value: 0x80dc, lo: 0xb5, hi: 0xb5}, + {value: 0x80dc, lo: 0xb7, hi: 0xb7}, + {value: 0x80d8, lo: 0xb9, hi: 0xb9}, // Block 0x24, offset 0x25 - {value: 0x0006, lo: 0x0b}, - {value: 0x1603, lo: 0x81, hi: 0x81}, - {value: 0x1609, lo: 0x84, hi: 0x84}, - {value: 0x160f, lo: 0x87, hi: 0x87}, - {value: 0x1615, lo: 0x89, hi: 0x89}, - {value: 0x161b, lo: 0xa0, hi: 0xa0}, - {value: 0x161f, lo: 0xa2, hi: 0xa2}, - {value: 0x1625, lo: 0xad, hi: 0xae}, - {value: 0x162f, lo: 0xaf, hi: 0xaf}, - {value: 0x1633, lo: 0xb0, hi: 0xb1}, - {value: 0x163f, lo: 0xb4, hi: 0xb5}, - {value: 0x164b, lo: 0xb8, hi: 0xb9}, + {value: 0x0000, lo: 0x0e}, + {value: 0x2757, lo: 0x83, hi: 0x83}, + {value: 0x275e, lo: 0x8d, hi: 0x8d}, + {value: 0x2765, lo: 0x92, hi: 0x92}, + {value: 0x276c, lo: 0x97, hi: 0x97}, + {value: 0x2773, lo: 0x9c, hi: 0x9c}, + {value: 0x2750, lo: 0xa9, hi: 0xa9}, + {value: 0x8081, lo: 0xb1, hi: 0xb1}, + {value: 0x8082, lo: 0xb2, hi: 0xb2}, + {value: 0x4987, lo: 0xb3, hi: 0xb3}, + {value: 0x8084, lo: 0xb4, hi: 0xb4}, + {value: 0x4990, lo: 0xb5, hi: 0xb5}, + {value: 0x44ca, lo: 0xb6, hi: 0xb6}, + {value: 0x44d2, lo: 0xb8, hi: 0xb8}, + {value: 0x8082, lo: 0xba, hi: 0xbd}, // Block 0x25, offset 0x26 - {value: 0x0006, lo: 0x04}, - {value: 0x1657, lo: 0x80, hi: 0x81}, - {value: 0x1663, lo: 0x84, hi: 0x85}, - {value: 0x166f, lo: 0x88, hi: 0x89}, - {value: 0x167b, lo: 0xac, hi: 0xaf}, + {value: 0x0000, lo: 0x0b}, + {value: 0x8082, lo: 0x80, hi: 0x80}, + {value: 0x4999, lo: 0x81, hi: 0x81}, + {value: 0x80e6, lo: 0x82, hi: 0x83}, + {value: 0x8009, lo: 0x84, hi: 0x84}, + {value: 0x80e6, lo: 0x86, hi: 0x87}, + {value: 0x2781, lo: 0x93, hi: 0x93}, + {value: 0x2788, lo: 0x9d, hi: 0x9d}, + {value: 0x278f, lo: 0xa2, hi: 0xa2}, + {value: 0x2796, lo: 0xa7, hi: 0xa7}, + {value: 0x279d, lo: 0xac, hi: 0xac}, + {value: 0x277a, lo: 0xb9, hi: 0xb9}, // Block 0x26, offset 0x27 - {value: 0x0006, lo: 0x02}, - {value: 0x1693, lo: 0xa0, hi: 0xa3}, - {value: 0x16ab, lo: 0xaa, hi: 0xad}, + {value: 0x0000, lo: 0x01}, + {value: 0x80dc, lo: 0x86, hi: 0x86}, // Block 0x27, offset 0x28 - {value: 0x0004, lo: 0x01}, - {value: 0x16c3, lo: 0xa9, hi: 0xaa}, + {value: 0x0000, lo: 0x05}, + {value: 0x8800, lo: 0xa5, hi: 0xa5}, + {value: 0x0071, lo: 0xa6, hi: 0xa6}, + {value: 0x8600, lo: 0xae, hi: 0xae}, + {value: 0x8007, lo: 0xb7, hi: 0xb7}, + {value: 0x8009, lo: 0xb9, hi: 0xba}, // Block 0x28, offset 0x29 {value: 0x0000, lo: 0x01}, - {value: 0x1814, lo: 0x9c, hi: 0x9c}, + {value: 0x80dc, lo: 0x8d, hi: 0x8d}, // Block 0x29, offset 0x2a - {value: 0x0000, lo: 0x0c}, - {value: 0x1c39, lo: 0x94, hi: 0x94}, - {value: 0x1c4a, lo: 0x9e, hi: 0x9e}, - {value: 0x1c58, lo: 0xac, hi: 0xac}, - {value: 0x1c5f, lo: 0xae, hi: 0xae}, - {value: 0x1c66, lo: 0xb0, hi: 0xb0}, - {value: 0x1c6d, lo: 0xb2, hi: 0xb2}, - {value: 0x1c74, lo: 0xb4, hi: 0xb4}, - {value: 0x1c7b, lo: 0xb6, hi: 0xb6}, - {value: 0x1c82, lo: 0xb8, hi: 0xb8}, - {value: 0x1c89, lo: 0xba, hi: 0xba}, - {value: 0x1c90, lo: 0xbc, hi: 0xbc}, - {value: 0x1c97, lo: 0xbe, hi: 0xbe}, + {value: 0x0000, lo: 0x01}, + {value: 0x8800, lo: 0x80, hi: 0x92}, // Block 0x2a, offset 0x2b - {value: 0x0007, lo: 0x0d}, - {value: 0x1c9e, lo: 0x80, hi: 0x80}, - {value: 0x1ca5, lo: 0x82, hi: 0x82}, - {value: 0x1cac, lo: 0x85, hi: 0x85}, - {value: 0x1cb3, lo: 0x87, hi: 0x87}, - {value: 0x1cba, lo: 0x89, hi: 0x89}, - {value: 0x1cc1, lo: 0x90, hi: 0x91}, - {value: 0x1ccf, lo: 0x93, hi: 0x94}, - {value: 0x1cdd, lo: 0x96, hi: 0x97}, - {value: 0x1ceb, lo: 0x99, hi: 0x9a}, - {value: 0x1cf9, lo: 0x9c, hi: 0x9d}, - {value: 0x1d07, lo: 0xb4, hi: 0xb4}, - {value: 0x1d0e, lo: 0xb7, hi: 0xba}, - {value: 0x1d2a, lo: 0xbe, hi: 0xbe}, + {value: 0x0000, lo: 0x01}, + {value: 0x8e00, lo: 0xa1, hi: 0xb5}, // Block 0x2b, offset 0x2c - {value: 0x0004, lo: 0x0a}, - {value: 0x2a81, lo: 0x80, hi: 0x81}, - {value: 0x1a9e, lo: 0x82, hi: 0x82}, - {value: 0x2a89, lo: 0x83, hi: 0x86}, - {value: 0x1b76, lo: 0x87, hi: 0x87}, - {value: 0x1b76, lo: 0x88, hi: 0x88}, - {value: 0x2a99, lo: 0x89, hi: 0x89}, - {value: 0x1abe, lo: 0x8a, hi: 0x8a}, - {value: 0x2a9d, lo: 0x8b, hi: 0xb3}, - {value: 0x1a16, lo: 0xb4, hi: 0xb4}, - {value: 0x2b41, lo: 0xb5, hi: 0xbf}, + {value: 0x0000, lo: 0x01}, + {value: 0x8600, lo: 0xa8, hi: 0xbf}, // Block 0x2c, offset 0x2d - {value: 0x0004, lo: 0x06}, - {value: 0x1b3a, lo: 0x80, hi: 0x80}, - {value: 0x2b6d, lo: 0x81, hi: 0x9b}, - {value: 0x2ac1, lo: 0x9c, hi: 0x9c}, - {value: 0x2bd9, lo: 0x9d, hi: 0xb0}, - {value: 0x1aa6, lo: 0xb1, hi: 0xb1}, - {value: 0x2c29, lo: 0xb2, hi: 0xbf}, + {value: 0x0000, lo: 0x01}, + {value: 0x8600, lo: 0x80, hi: 0x82}, // Block 0x2d, offset 0x2e - {value: 0x0004, lo: 0x0a}, - {value: 0x2c61, lo: 0x80, hi: 0x80}, - {value: 0x18ba, lo: 0x81, hi: 0x81}, - {value: 0x2c65, lo: 0x82, hi: 0x89}, - {value: 0x186e, lo: 0x8a, hi: 0x8a}, - {value: 0x2c85, lo: 0x8b, hi: 0xa0}, - {value: 0x2c21, lo: 0xa1, hi: 0xa1}, - {value: 0x2cdd, lo: 0xa2, hi: 0xa9}, - {value: 0x2be1, lo: 0xaa, hi: 0xaa}, - {value: 0x2cfd, lo: 0xab, hi: 0xbe}, - {value: 0x2ac1, lo: 0xbf, hi: 0xbf}, + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0x9d, hi: 0x9f}, // Block 0x2e, offset 0x2f - {value: 0x0004, lo: 0x0b}, - {value: 0x2d4d, lo: 0x80, hi: 0x83}, - {value: 0x1b72, lo: 0x84, hi: 0x84}, - {value: 0x2d5d, lo: 0x85, hi: 0x90}, - {value: 0x2173, lo: 0x91, hi: 0x91}, - {value: 0x2d8d, lo: 0x92, hi: 0x9a}, - {value: 0x2be9, lo: 0x9b, hi: 0x9b}, - {value: 0x2db1, lo: 0x9c, hi: 0xa8}, - {value: 0x1aba, lo: 0xa9, hi: 0xa9}, - {value: 0x2de5, lo: 0xaa, hi: 0xb6}, - {value: 0x19f6, lo: 0xb7, hi: 0xb7}, - {value: 0x2e19, lo: 0xb8, hi: 0xbf}, + {value: 0x0000, lo: 0x02}, + {value: 0x8009, lo: 0x94, hi: 0x94}, + {value: 0x8009, lo: 0xb4, hi: 0xb4}, // Block 0x2f, offset 0x30 - {value: 0x0004, lo: 0x10}, - {value: 0x2e39, lo: 0x80, hi: 0x87}, - {value: 0x1a62, lo: 0x88, hi: 0x88}, - {value: 0x2e59, lo: 0x89, hi: 0x89}, - {value: 0x1a6e, lo: 0x8a, hi: 0x8a}, - {value: 0x2e5d, lo: 0x8b, hi: 0x8d}, - {value: 0x2e69, lo: 0x90, hi: 0x90}, - {value: 0x2e6d, lo: 0x92, hi: 0x92}, - {value: 0x2e71, lo: 0x95, hi: 0x9d}, - {value: 0x1a12, lo: 0x9e, hi: 0x9e}, - {value: 0x2e95, lo: 0xa0, hi: 0xa0}, - {value: 0x2e99, lo: 0xa2, hi: 0xa2}, - {value: 0x2e9d, lo: 0xa5, hi: 0xa6}, - {value: 0x2ea5, lo: 0xaa, hi: 0xad}, - {value: 0x2eb5, lo: 0xb0, hi: 0xbb}, - {value: 0x18d6, lo: 0xbc, hi: 0xbc}, - {value: 0x2ee5, lo: 0xbd, hi: 0xbf}, + {value: 0x0000, lo: 0x02}, + {value: 0x8009, lo: 0x92, hi: 0x92}, + {value: 0x80e6, lo: 0x9d, hi: 0x9d}, // Block 0x30, offset 0x31 - {value: 0x0004, lo: 0x10}, - {value: 0x2ef1, lo: 0x80, hi: 0x8b}, - {value: 0x2187, lo: 0x8c, hi: 0x8c}, - {value: 0x2f21, lo: 0x8d, hi: 0x90}, - {value: 0x2197, lo: 0x91, hi: 0x91}, - {value: 0x2f31, lo: 0x92, hi: 0x96}, - {value: 0x2cb1, lo: 0x97, hi: 0x97}, - {value: 0x2f45, lo: 0x98, hi: 0x9d}, - {value: 0x2f59, lo: 0x9e, hi: 0xa6}, - {value: 0x2e9d, lo: 0xa7, hi: 0xa7}, - {value: 0x2f7d, lo: 0xa8, hi: 0xac}, - {value: 0x2f92, lo: 0xad, hi: 0xad}, - {value: 0x2f96, lo: 0xb0, hi: 0xb7}, - {value: 0x2ecd, lo: 0xb8, hi: 0xb8}, - {value: 0x2fb6, lo: 0xb9, hi: 0xbb}, - {value: 0x2e69, lo: 0xbc, hi: 0xbc}, - {value: 0x2fc2, lo: 0xbd, hi: 0xbf}, + {value: 0x0000, lo: 0x01}, + {value: 0x80e4, lo: 0xa9, hi: 0xa9}, // Block 0x31, offset 0x32 - {value: 0x0005, lo: 0x07}, - {value: 0x3105, lo: 0x9d, hi: 0x9d}, - {value: 0x310a, lo: 0x9f, hi: 0x9f}, - {value: 0x3124, lo: 0xaa, hi: 0xac}, - {value: 0x3135, lo: 0xad, hi: 0xad}, - {value: 0x313c, lo: 0xae, hi: 0xb6}, - {value: 0x3169, lo: 0xb8, hi: 0xbc}, - {value: 0x3182, lo: 0xbe, hi: 0xbe}, + {value: 0x0008, lo: 0x02}, + {value: 0x80de, lo: 0xb9, hi: 0xba}, + {value: 0x80dc, lo: 0xbb, hi: 0xbb}, // Block 0x32, offset 0x33 - {value: 0x0005, lo: 0x03}, - {value: 0x3187, lo: 0x80, hi: 0x81}, - {value: 0x3191, lo: 0x83, hi: 0x84}, - {value: 0x319b, lo: 0x86, hi: 0x8e}, + {value: 0x0000, lo: 0x02}, + {value: 0x80e6, lo: 0x97, hi: 0x97}, + {value: 0x80dc, lo: 0x98, hi: 0x98}, // Block 0x33, offset 0x34 {value: 0x0000, lo: 0x03}, - {value: 0x3a73, lo: 0x9a, hi: 0x9a}, - {value: 0x3a7c, lo: 0x9c, hi: 0x9c}, - {value: 0x3a85, lo: 0xab, hi: 0xab}, + {value: 0x8009, lo: 0xa0, hi: 0xa0}, + {value: 0x80e6, lo: 0xb5, hi: 0xbc}, + {value: 0x80dc, lo: 0xbf, hi: 0xbf}, // Block 0x34, offset 0x35 - {value: 0x000d, lo: 0x03}, - {value: 0x3a8e, lo: 0x9e, hi: 0x9e}, - {value: 0x3a97, lo: 0x9f, hi: 0x9f}, - {value: 0x3aa0, lo: 0xa0, hi: 0xa4}, + {value: 0x0000, lo: 0x08}, + {value: 0x00b0, lo: 0x80, hi: 0x80}, + {value: 0x00b7, lo: 0x81, hi: 0x81}, + {value: 0x8800, lo: 0x82, hi: 0x82}, + {value: 0x00be, lo: 0x83, hi: 0x83}, + {value: 0x8009, lo: 0x84, hi: 0x84}, + {value: 0x80e6, lo: 0xab, hi: 0xab}, + {value: 0x80dc, lo: 0xac, hi: 0xac}, + {value: 0x80e6, lo: 0xad, hi: 0xb3}, // Block 0x35, offset 0x36 - {value: 0x0009, lo: 0x03}, - {value: 0x3ae1, lo: 0xbb, hi: 0xbd}, - {value: 0x3b00, lo: 0xbe, hi: 0xbe}, - {value: 0x3b0d, lo: 0xbf, hi: 0xbf}, - // Block 0x36, offset 0x37 {value: 0x0000, lo: 0x01}, - {value: 0x3b1a, lo: 0x80, hi: 0x80}, + {value: 0x8009, lo: 0xaa, hi: 0xaa}, + // Block 0x36, offset 0x37 + {value: 0x0000, lo: 0x02}, + {value: 0x8007, lo: 0xa6, hi: 0xa6}, + {value: 0x8009, lo: 0xb2, hi: 0xb3}, // Block 0x37, offset 0x38 - {value: 0x0004, lo: 0x0d}, - {value: 0x4463, lo: 0x80, hi: 0x81}, - {value: 0x446c, lo: 0x82, hi: 0x89}, - {value: 0x30a2, lo: 0x8a, hi: 0x8a}, - {value: 0x448d, lo: 0x8b, hi: 0x90}, - {value: 0x44a6, lo: 0x91, hi: 0x92}, - {value: 0x44af, lo: 0x93, hi: 0x93}, - {value: 0x44b4, lo: 0x94, hi: 0x94}, - {value: 0x1b42, lo: 0x95, hi: 0x95}, - {value: 0x44b9, lo: 0x96, hi: 0x96}, - {value: 0x1b52, lo: 0x97, hi: 0x97}, - {value: 0x44bd, lo: 0x98, hi: 0x9b}, - {value: 0x1b66, lo: 0x9c, hi: 0x9c}, - {value: 0x44cd, lo: 0x9d, hi: 0x9d}, + {value: 0x0000, lo: 0x01}, + {value: 0x8007, lo: 0xb7, hi: 0xb7}, + // Block 0x38, offset 0x39 + {value: 0x0000, lo: 0x08}, + {value: 0x80e6, lo: 0x90, hi: 0x92}, + {value: 0x8001, lo: 0x94, hi: 0x94}, + {value: 0x80dc, lo: 0x95, hi: 0x99}, + {value: 0x80e6, lo: 0x9a, hi: 0x9b}, + {value: 0x80dc, lo: 0x9c, hi: 0x9f}, + {value: 0x80e6, lo: 0xa0, hi: 0xa0}, + {value: 0x8001, lo: 0xa2, hi: 0xa8}, + {value: 0x80dc, lo: 0xad, hi: 0xad}, + // Block 0x39, offset 0x3a + {value: 0x0000, lo: 0x0e}, + {value: 0x80e6, lo: 0x80, hi: 0x81}, + {value: 0x80dc, lo: 0x82, hi: 0x82}, + {value: 0x80e6, lo: 0x83, hi: 0x89}, + {value: 0x80dc, lo: 0x8a, hi: 0x8a}, + {value: 0x80e6, lo: 0x8b, hi: 0x8c}, + {value: 0x80ea, lo: 0x8d, hi: 0x8d}, + {value: 0x80d6, lo: 0x8e, hi: 0x8e}, + {value: 0x80dc, lo: 0x8f, hi: 0x8f}, + {value: 0x80ca, lo: 0x90, hi: 0x90}, + {value: 0x80e6, lo: 0x91, hi: 0xa6}, + {value: 0x80e9, lo: 0xbc, hi: 0xbc}, + {value: 0x80dc, lo: 0xbd, hi: 0xbd}, + {value: 0x80e6, lo: 0xbe, hi: 0xbe}, + {value: 0x80dc, lo: 0xbf, hi: 0xbf}, + // Block 0x3a, offset 0x3b + {value: 0x0004, lo: 0x01}, + {value: 0x0971, lo: 0x80, hi: 0x81}, + // Block 0x3b, offset 0x3c + {value: 0x0000, lo: 0x0d}, + {value: 0x80e6, lo: 0x90, hi: 0x91}, + {value: 0x8001, lo: 0x92, hi: 0x93}, + {value: 0x80e6, lo: 0x94, hi: 0x97}, + {value: 0x8001, lo: 0x98, hi: 0x9a}, + {value: 0x80e6, lo: 0x9b, hi: 0x9c}, + {value: 0x80e6, lo: 0xa1, hi: 0xa1}, + {value: 0x8001, lo: 0xa5, hi: 0xa6}, + {value: 0x80e6, lo: 0xa7, hi: 0xa7}, + {value: 0x80dc, lo: 0xa8, hi: 0xa8}, + {value: 0x80e6, lo: 0xa9, hi: 0xa9}, + {value: 0x8001, lo: 0xaa, hi: 0xab}, + {value: 0x80dc, lo: 0xac, hi: 0xaf}, + {value: 0x80e6, lo: 0xb0, hi: 0xb0}, + // Block 0x3c, offset 0x3d + {value: 0x4099, lo: 0x02}, + {value: 0x0475, lo: 0xa6, hi: 0xa6}, + {value: 0x0125, lo: 0xaa, hi: 0xab}, + // Block 0x3d, offset 0x3e + {value: 0x0007, lo: 0x05}, + {value: 0x8800, lo: 0x90, hi: 0x90}, + {value: 0x8800, lo: 0x92, hi: 0x92}, + {value: 0x8800, lo: 0x94, hi: 0x94}, + {value: 0x3a9e, lo: 0x9a, hi: 0x9b}, + {value: 0x3aac, lo: 0xae, hi: 0xae}, + // Block 0x3e, offset 0x3f + {value: 0x000e, lo: 0x05}, + {value: 0x3ab3, lo: 0x8d, hi: 0x8e}, + {value: 0x3aba, lo: 0x8f, hi: 0x8f}, + {value: 0x8800, lo: 0x90, hi: 0x90}, + {value: 0x8800, lo: 0x92, hi: 0x92}, + {value: 0x8800, lo: 0x94, hi: 0x94}, + // Block 0x3f, offset 0x40 + {value: 0x4d23, lo: 0x0a}, + {value: 0x8800, lo: 0x83, hi: 0x83}, + {value: 0x3ac8, lo: 0x84, hi: 0x84}, + {value: 0x8800, lo: 0x88, hi: 0x88}, + {value: 0x3acf, lo: 0x89, hi: 0x89}, + {value: 0x8800, lo: 0x8b, hi: 0x8b}, + {value: 0x3ad6, lo: 0x8c, hi: 0x8c}, + {value: 0x8800, lo: 0xa3, hi: 0xa3}, + {value: 0x3add, lo: 0xa4, hi: 0xa5}, + {value: 0x3ae4, lo: 0xa6, hi: 0xa6}, + {value: 0x8800, lo: 0xbc, hi: 0xbc}, + // Block 0x40, offset 0x41 + {value: 0x0007, lo: 0x03}, + {value: 0x3b4d, lo: 0xa0, hi: 0xa1}, + {value: 0x3b77, lo: 0xa2, hi: 0xa3}, + {value: 0x3ba1, lo: 0xaa, hi: 0xad}, + // Block 0x41, offset 0x42 + {value: 0x0004, lo: 0x01}, + {value: 0x09c9, lo: 0xa9, hi: 0xaa}, + // Block 0x42, offset 0x43 + {value: 0x0000, lo: 0x01}, + {value: 0x43db, lo: 0x9c, hi: 0x9c}, + // Block 0x43, offset 0x44 + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0xaf, hi: 0xb1}, + // Block 0x44, offset 0x45 + {value: 0x0000, lo: 0x01}, + {value: 0x8009, lo: 0xbf, hi: 0xbf}, + // Block 0x45, offset 0x46 + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0xa0, hi: 0xbf}, + // Block 0x46, offset 0x47 + {value: 0x0000, lo: 0x05}, + {value: 0x80da, lo: 0xaa, hi: 0xaa}, + {value: 0x80e4, lo: 0xab, hi: 0xab}, + {value: 0x80e8, lo: 0xac, hi: 0xac}, + {value: 0x80de, lo: 0xad, hi: 0xad}, + {value: 0x80e0, lo: 0xae, hi: 0xaf}, + // Block 0x47, offset 0x48 + {value: 0x0000, lo: 0x02}, + {value: 0x80e6, lo: 0xaf, hi: 0xaf}, + {value: 0x80e6, lo: 0xbc, hi: 0xbd}, + // Block 0x48, offset 0x49 + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0xb0, hi: 0xb1}, + // Block 0x49, offset 0x4a + {value: 0x0000, lo: 0x01}, + {value: 0x8009, lo: 0x86, hi: 0x86}, + // Block 0x4a, offset 0x4b + {value: 0x0000, lo: 0x02}, + {value: 0x8009, lo: 0x84, hi: 0x84}, + {value: 0x80e6, lo: 0xa0, hi: 0xb1}, + // Block 0x4b, offset 0x4c + {value: 0x0000, lo: 0x01}, + {value: 0x80dc, lo: 0xab, hi: 0xad}, + // Block 0x4c, offset 0x4d + {value: 0x0000, lo: 0x01}, + {value: 0x8009, lo: 0x93, hi: 0x93}, + // Block 0x4d, offset 0x4e + {value: 0x0000, lo: 0x01}, + {value: 0x8007, lo: 0xb3, hi: 0xb3}, + // Block 0x4e, offset 0x4f + {value: 0x0000, lo: 0x01}, + {value: 0x8009, lo: 0x80, hi: 0x80}, + // Block 0x4f, offset 0x50 + {value: 0x0000, lo: 0x05}, + {value: 0x80e6, lo: 0xb0, hi: 0xb0}, + {value: 0x80e6, lo: 0xb2, hi: 0xb3}, + {value: 0x80dc, lo: 0xb4, hi: 0xb4}, + {value: 0x80e6, lo: 0xb7, hi: 0xb8}, + {value: 0x80e6, lo: 0xbe, hi: 0xbf}, + // Block 0x50, offset 0x51 + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0x81, hi: 0x81}, + // Block 0x51, offset 0x52 + {value: 0x0000, lo: 0x01}, + {value: 0x8009, lo: 0xad, hi: 0xad}, + // Block 0x52, offset 0x53 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x80, hi: 0xbf}, + // Block 0x53, offset 0x54 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x80, hi: 0xa3}, + // Block 0x54, offset 0x55 + {value: 0x0006, lo: 0x0d}, + {value: 0x428e, lo: 0x9d, hi: 0x9d}, + {value: 0x801a, lo: 0x9e, hi: 0x9e}, + {value: 0x4300, lo: 0x9f, hi: 0x9f}, + {value: 0x42ee, lo: 0xaa, hi: 0xab}, + {value: 0x43f2, lo: 0xac, hi: 0xac}, + {value: 0x43fa, lo: 0xad, hi: 0xad}, + {value: 0x4246, lo: 0xae, hi: 0xb1}, + {value: 0x4264, lo: 0xb2, hi: 0xb4}, + {value: 0x427c, lo: 0xb5, hi: 0xb6}, + {value: 0x4288, lo: 0xb8, hi: 0xb8}, + {value: 0x4294, lo: 0xb9, hi: 0xbb}, + {value: 0x42ac, lo: 0xbc, hi: 0xbc}, + {value: 0x42b2, lo: 0xbe, hi: 0xbe}, + // Block 0x55, offset 0x56 + {value: 0x0006, lo: 0x08}, + {value: 0x42b8, lo: 0x80, hi: 0x81}, + {value: 0x42c4, lo: 0x83, hi: 0x84}, + {value: 0x42d6, lo: 0x86, hi: 0x89}, + {value: 0x42fa, lo: 0x8a, hi: 0x8a}, + {value: 0x4276, lo: 0x8b, hi: 0x8b}, + {value: 0x425e, lo: 0x8c, hi: 0x8c}, + {value: 0x42a6, lo: 0x8d, hi: 0x8d}, + {value: 0x42d0, lo: 0x8e, hi: 0x8e}, + // Block 0x56, offset 0x57 + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0xa0, hi: 0xa6}, + // Block 0x57, offset 0x58 + {value: 0x0000, lo: 0x01}, + {value: 0x80dc, lo: 0xbd, hi: 0xbd}, + // Block 0x58, offset 0x59 + {value: 0x00db, lo: 0x05}, + {value: 0x80dc, lo: 0x8d, hi: 0x8d}, + {value: 0x80e6, lo: 0x8f, hi: 0x8f}, + {value: 0x80e6, lo: 0xb8, hi: 0xb8}, + {value: 0x8001, lo: 0xb9, hi: 0xba}, + {value: 0x8009, lo: 0xbf, hi: 0xbf}, + // Block 0x59, offset 0x5a + {value: 0x05fe, lo: 0x07}, + {value: 0x8800, lo: 0x99, hi: 0x99}, + {value: 0x411d, lo: 0x9a, hi: 0x9a}, + {value: 0x8800, lo: 0x9b, hi: 0x9b}, + {value: 0x4127, lo: 0x9c, hi: 0x9c}, + {value: 0x8800, lo: 0xa5, hi: 0xa5}, + {value: 0x4131, lo: 0xab, hi: 0xab}, + {value: 0x8009, lo: 0xb9, hi: 0xba}, + // Block 0x5a, offset 0x5b + {value: 0x0000, lo: 0x0c}, + {value: 0x44e2, lo: 0x9e, hi: 0x9e}, + {value: 0x44ec, lo: 0x9f, hi: 0x9f}, + {value: 0x4555, lo: 0xa0, hi: 0xa0}, + {value: 0x4563, lo: 0xa1, hi: 0xa1}, + {value: 0x4571, lo: 0xa2, hi: 0xa2}, + {value: 0x457f, lo: 0xa3, hi: 0xa3}, + {value: 0x458d, lo: 0xa4, hi: 0xa4}, + {value: 0x80d8, lo: 0xa5, hi: 0xa6}, + {value: 0x8001, lo: 0xa7, hi: 0xa9}, + {value: 0x80e2, lo: 0xad, hi: 0xad}, + {value: 0x80d8, lo: 0xae, hi: 0xb2}, + {value: 0x80dc, lo: 0xbb, hi: 0xbf}, + // Block 0x5b, offset 0x5c + {value: 0x0000, lo: 0x09}, + {value: 0x80dc, lo: 0x80, hi: 0x82}, + {value: 0x80e6, lo: 0x85, hi: 0x89}, + {value: 0x80dc, lo: 0x8a, hi: 0x8b}, + {value: 0x80e6, lo: 0xaa, hi: 0xad}, + {value: 0x44f6, lo: 0xbb, hi: 0xbb}, + {value: 0x4500, lo: 0xbc, hi: 0xbc}, + {value: 0x459b, lo: 0xbd, hi: 0xbd}, + {value: 0x45b7, lo: 0xbe, hi: 0xbe}, + {value: 0x45a9, lo: 0xbf, hi: 0xbf}, + // Block 0x5c, offset 0x5d + {value: 0x0000, lo: 0x01}, + {value: 0x45c5, lo: 0x80, hi: 0x80}, + // Block 0x5d, offset 0x5e + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0x82, hi: 0x84}, } -// nfcDecompLookup: 832 bytes +// nfcLookup: 1088 bytes // Block 0 is the null block. -var nfcDecompLookup = [832]uint8{ +var nfcLookup = [1088]uint8{ // Block 0x0, offset 0x0 // Block 0x1, offset 0x40 // Block 0x2, offset 0x80 // Block 0x3, offset 0xc0 - 0x0c3: 0x16, 0x0c4: 0x17, 0x0c5: 0x18, 0x0c6: 0x19, 0x0c7: 0x03, - 0x0c8: 0x1a, 0x0cd: 0x1b, 0x0ce: 0x1c, 0x0cf: 0x1d, - 0x0d0: 0x1e, 0x0d1: 0x1f, 0x0d3: 0x20, - 0x0d8: 0x21, 0x0db: 0x22, + 0x0c2: 0x2e, 0x0c3: 0x03, 0x0c4: 0x04, 0x0c5: 0x05, 0x0c6: 0x2f, 0x0c7: 0x06, + 0x0c8: 0x07, 0x0ca: 0x30, 0x0cc: 0x08, 0x0cd: 0x09, 0x0ce: 0x0a, 0x0cf: 0x31, + 0x0d0: 0x0b, 0x0d1: 0x32, 0x0d2: 0x33, 0x0d3: 0x0c, 0x0d6: 0x0d, 0x0d7: 0x34, + 0x0d8: 0x35, 0x0d9: 0x0e, 0x0db: 0x36, 0x0dc: 0x37, 0x0dd: 0x38, 0x0df: 0x39, 0x0e0: 0x04, 0x0e1: 0x05, 0x0e2: 0x06, 0x0e3: 0x07, - 0x0ef: 0x08, - 0x0f0: 0x0c, + 0x0ea: 0x08, 0x0eb: 0x09, 0x0ec: 0x09, 0x0ed: 0x0a, 0x0ef: 0x0b, + 0x0f0: 0x10, // Block 0x4, offset 0x100 - 0x124: 0x23, 0x125: 0x24, 0x127: 0x25, - 0x128: 0x26, 0x129: 0x27, 0x12d: 0x28, 0x12e: 0x29, 0x12f: 0x2a, - 0x131: 0x2b, 0x133: 0x2c, 0x135: 0x2d, 0x137: 0x2e, - 0x13d: 0x2f, 0x13e: 0x30, + 0x120: 0x3a, 0x121: 0x3b, 0x124: 0x3c, 0x125: 0x3d, 0x126: 0x3e, 0x127: 0x3f, + 0x128: 0x40, 0x129: 0x41, 0x12a: 0x42, 0x12b: 0x43, 0x12c: 0x3e, 0x12d: 0x44, 0x12e: 0x45, 0x12f: 0x46, + 0x131: 0x47, 0x132: 0x48, 0x133: 0x49, 0x134: 0x4a, 0x135: 0x4b, 0x137: 0x4c, + 0x138: 0x4d, 0x139: 0x4e, 0x13a: 0x4f, 0x13b: 0x50, 0x13c: 0x51, 0x13d: 0x52, 0x13e: 0x53, 0x13f: 0x54, // Block 0x5, offset 0x140 - 0x140: 0x31, - 0x16c: 0x32, 0x16d: 0x33, - 0x178: 0x34, 0x179: 0x04, 0x17a: 0x05, 0x17b: 0x06, 0x17c: 0x07, 0x17d: 0x08, 0x17e: 0x09, 0x17f: 0x0a, + 0x140: 0x55, 0x142: 0x56, 0x144: 0x57, 0x145: 0x58, 0x146: 0x59, 0x147: 0x5a, + 0x14d: 0x5b, + 0x15c: 0x5c, 0x15f: 0x5d, + 0x162: 0x5e, 0x164: 0x5f, + 0x168: 0x60, 0x169: 0x61, 0x16c: 0x0f, 0x16d: 0x62, 0x16e: 0x63, 0x16f: 0x64, + 0x170: 0x65, 0x173: 0x66, 0x177: 0x67, + 0x178: 0x10, 0x179: 0x11, 0x17a: 0x12, 0x17b: 0x13, 0x17c: 0x14, 0x17d: 0x15, 0x17e: 0x16, 0x17f: 0x17, // Block 0x6, offset 0x180 - 0x180: 0x35, 0x184: 0x36, 0x186: 0x37, 0x187: 0x38, - 0x188: 0x39, 0x189: 0x3a, 0x18a: 0x3b, 0x18b: 0x3c, 0x18c: 0x3d, - 0x1ab: 0x3e, + 0x180: 0x68, 0x183: 0x69, 0x184: 0x6a, 0x186: 0x6b, 0x187: 0x6c, + 0x188: 0x6d, 0x189: 0x18, 0x18a: 0x19, 0x18b: 0x6e, 0x18c: 0x6f, + 0x1ab: 0x70, + 0x1b3: 0x71, 0x1b5: 0x72, 0x1b7: 0x73, // Block 0x7, offset 0x1c0 - 0x1c1: 0x0b, 0x1c2: 0x3f, 0x1c3: 0x40, + 0x1c0: 0x74, 0x1c1: 0x1a, 0x1c2: 0x1b, 0x1c3: 0x1c, // Block 0x8, offset 0x200 - 0x224: 0x41, 0x225: 0x42, 0x226: 0x43, 0x227: 0x44, - 0x228: 0x45, 0x229: 0x46, 0x22a: 0x0c, 0x22b: 0x0d, 0x22c: 0x47, 0x22d: 0x48, + 0x219: 0x75, 0x21b: 0x76, + 0x220: 0x77, 0x223: 0x78, 0x224: 0x79, 0x225: 0x7a, 0x226: 0x7b, 0x227: 0x7c, + 0x22a: 0x7d, 0x22b: 0x7e, 0x22f: 0x7f, + 0x230: 0x80, 0x231: 0x80, 0x232: 0x80, 0x233: 0x80, 0x234: 0x80, 0x235: 0x80, 0x236: 0x80, 0x237: 0x80, + 0x238: 0x80, 0x239: 0x80, 0x23a: 0x80, 0x23b: 0x80, 0x23c: 0x80, 0x23d: 0x80, 0x23e: 0x80, 0x23f: 0x80, // Block 0x9, offset 0x240 - 0x242: 0x49, + 0x240: 0x80, 0x241: 0x80, 0x242: 0x80, 0x243: 0x80, 0x244: 0x80, 0x245: 0x80, 0x246: 0x80, 0x247: 0x80, + 0x248: 0x80, 0x249: 0x80, 0x24a: 0x80, 0x24b: 0x80, 0x24c: 0x80, 0x24d: 0x80, 0x24e: 0x80, 0x24f: 0x80, + 0x250: 0x80, 0x251: 0x80, 0x252: 0x80, 0x253: 0x80, 0x254: 0x80, 0x255: 0x80, 0x256: 0x80, 0x257: 0x80, + 0x258: 0x80, 0x259: 0x80, 0x25a: 0x80, 0x25b: 0x80, 0x25c: 0x80, 0x25d: 0x80, 0x25e: 0x80, 0x25f: 0x80, + 0x260: 0x80, 0x261: 0x80, 0x262: 0x80, 0x263: 0x80, 0x264: 0x80, 0x265: 0x80, 0x266: 0x80, 0x267: 0x80, + 0x268: 0x80, 0x269: 0x80, 0x26a: 0x80, 0x26b: 0x80, 0x26c: 0x80, 0x26d: 0x80, 0x26e: 0x80, 0x26f: 0x80, + 0x270: 0x80, 0x271: 0x80, 0x272: 0x80, 0x273: 0x80, 0x274: 0x80, 0x275: 0x80, 0x276: 0x80, 0x277: 0x80, + 0x278: 0x80, 0x279: 0x80, 0x27a: 0x80, 0x27b: 0x80, 0x27c: 0x80, 0x27d: 0x80, 0x27e: 0x80, 0x27f: 0x80, // Block 0xa, offset 0x280 - 0x285: 0x4a, 0x286: 0x4b, 0x287: 0x4c, + 0x280: 0x80, 0x281: 0x80, 0x282: 0x80, 0x283: 0x80, 0x284: 0x80, 0x285: 0x80, 0x286: 0x80, 0x287: 0x80, + 0x288: 0x80, 0x289: 0x80, 0x28a: 0x80, 0x28b: 0x80, 0x28c: 0x80, 0x28d: 0x80, 0x28e: 0x80, 0x28f: 0x80, + 0x290: 0x80, 0x291: 0x80, 0x292: 0x80, 0x293: 0x80, 0x294: 0x80, 0x295: 0x80, 0x296: 0x80, 0x297: 0x80, + 0x298: 0x80, 0x299: 0x80, 0x29a: 0x80, 0x29b: 0x80, 0x29c: 0x80, 0x29d: 0x80, 0x29e: 0x81, // Block 0xb, offset 0x2c0 - 0x2e0: 0x0e, 0x2e1: 0x0f, 0x2e2: 0x10, 0x2e3: 0x11, 0x2e4: 0x12, 0x2e5: 0x13, 0x2e6: 0x14, 0x2e7: 0x15, - 0x2e8: 0x4d, + 0x2e4: 0x1d, 0x2e5: 0x1e, 0x2e6: 0x1f, 0x2e7: 0x20, + 0x2e8: 0x21, 0x2e9: 0x22, 0x2ea: 0x23, 0x2eb: 0x24, 0x2ec: 0x82, 0x2ed: 0x83, + 0x2f8: 0x84, // Block 0xc, offset 0x300 - 0x311: 0x09, - 0x31d: 0x0a, - 0x32f: 0x0b, + 0x307: 0x85, + 0x328: 0x86, + // Block 0xd, offset 0x340 + 0x341: 0x77, 0x342: 0x87, + // Block 0xe, offset 0x380 + 0x385: 0x88, 0x386: 0x89, 0x387: 0x8a, + 0x389: 0x8b, + // Block 0xf, offset 0x3c0 + 0x3e0: 0x25, 0x3e1: 0x26, 0x3e2: 0x27, 0x3e3: 0x28, 0x3e4: 0x29, 0x3e5: 0x2a, 0x3e6: 0x2b, 0x3e7: 0x2c, + 0x3e8: 0x2d, + // Block 0x10, offset 0x400 + 0x410: 0x0c, 0x411: 0x0d, + 0x41d: 0x0e, + 0x42f: 0x0f, } -var nfcDecompTrie = trie{nfcDecompLookup[:], nfcDecompValues[:], nfcDecompSparseValues[:], nfcDecompSparseOffset[:], 22} +var nfcTrie = trie{nfcLookup[:], nfcValues[:], nfcSparseValues[:], nfcSparseOffset[:], 46} -// nfkcDecompValues: 4224 entries, 8448 bytes +// nfkcValues: 5568 entries, 11136 bytes // Block 2 is the null block. -var nfkcDecompValues = [4224]uint16{ +var nfkcValues = [5568]uint16{ // Block 0x0, offset 0x0 + 0x003c: 0x8800, 0x003d: 0x8800, 0x003e: 0x8800, // Block 0x1, offset 0x40 + 0x0041: 0x8800, 0x0042: 0x8800, 0x0043: 0x8800, 0x0044: 0x8800, 0x0045: 0x8800, + 0x0046: 0x8800, 0x0047: 0x8800, 0x0048: 0x8800, 0x0049: 0x8800, 0x004a: 0x8800, 0x004b: 0x8800, + 0x004c: 0x8800, 0x004d: 0x8800, 0x004e: 0x8800, 0x004f: 0x8800, 0x0050: 0x8800, + 0x0052: 0x8800, 0x0053: 0x8800, 0x0054: 0x8800, 0x0055: 0x8800, 0x0056: 0x8800, 0x0057: 0x8800, + 0x0058: 0x8800, 0x0059: 0x8800, 0x005a: 0x8800, + 0x0061: 0x8800, 0x0062: 0x8800, 0x0063: 0x8800, + 0x0064: 0x8800, 0x0065: 0x8800, 0x0066: 0x8800, 0x0067: 0x8800, 0x0068: 0x8800, 0x0069: 0x8800, + 0x006a: 0x8800, 0x006b: 0x8800, 0x006c: 0x8800, 0x006d: 0x8800, 0x006e: 0x8800, 0x006f: 0x8800, + 0x0070: 0x8800, 0x0072: 0x8800, 0x0073: 0x8800, 0x0074: 0x8800, 0x0075: 0x8800, + 0x0076: 0x8800, 0x0077: 0x8800, 0x0078: 0x8800, 0x0079: 0x8800, 0x007a: 0x8800, // Block 0x2, offset 0x80 // Block 0x3, offset 0xc0 - 0x00c4: 0x02da, 0x00c5: 0x02df, - 0x00c6: 0x02e4, 0x00c7: 0x02e9, 0x00c8: 0x02ec, 0x00c9: 0x02ef, 0x00ca: 0x02f2, 0x00cb: 0x02f5, - 0x00cc: 0x02f8, 0x00cd: 0x02fb, 0x00ce: 0x02ff, 0x00cf: 0x0303, 0x00d0: 0x0307, 0x00d1: 0x030b, - 0x00d2: 0x030f, 0x00d3: 0x0313, 0x00d4: 0x0317, 0x00d5: 0x031b, 0x00d6: 0x0321, 0x00d7: 0x0327, - 0x00d8: 0x032d, 0x00d9: 0x0333, 0x00da: 0x0339, 0x00db: 0x033f, 0x00dc: 0x0345, - 0x00de: 0x034b, 0x00df: 0x0351, 0x00e0: 0x0357, 0x00e1: 0x035d, 0x00e2: 0x0363, 0x00e3: 0x0368, - 0x00e6: 0x036d, 0x00e7: 0x0371, 0x00e8: 0x0375, 0x00e9: 0x0379, - 0x00ea: 0x037d, 0x00eb: 0x0381, 0x00ec: 0x0385, 0x00ed: 0x038b, 0x00ee: 0x0391, 0x00ef: 0x0396, - 0x00f0: 0x039b, 0x00f1: 0x039f, 0x00f2: 0x03a2, 0x00f3: 0x03a5, 0x00f4: 0x03a8, 0x00f5: 0x03ac, - 0x00f8: 0x03b0, 0x00f9: 0x03b4, 0x00fa: 0x03b8, 0x00fb: 0x03be, - 0x00fc: 0x03c4, 0x00fd: 0x03c9, 0x00fe: 0x03ce, 0x00ff: 0x03d3, + 0x00c0: 0x2e54, 0x00c1: 0x2e59, 0x00c2: 0x463f, 0x00c3: 0x2e5e, 0x00c4: 0x464e, 0x00c5: 0x4653, + 0x00c6: 0x8800, 0x00c7: 0x465d, 0x00c8: 0x2ec7, 0x00c9: 0x2ecc, 0x00ca: 0x4662, 0x00cb: 0x2ee0, + 0x00cc: 0x2f53, 0x00cd: 0x2f58, 0x00ce: 0x2f5d, 0x00cf: 0x4676, 0x00d1: 0x2fe9, + 0x00d2: 0x300c, 0x00d3: 0x3011, 0x00d4: 0x4680, 0x00d5: 0x4685, 0x00d6: 0x4694, + 0x00d8: 0x8800, 0x00d9: 0x3098, 0x00da: 0x309d, 0x00db: 0x30a2, 0x00dc: 0x46c6, 0x00dd: 0x311a, + 0x00e0: 0x3160, 0x00e1: 0x3165, 0x00e2: 0x46d0, 0x00e3: 0x316a, + 0x00e4: 0x46df, 0x00e5: 0x46e4, 0x00e6: 0x8800, 0x00e7: 0x46ee, 0x00e8: 0x31d3, 0x00e9: 0x31d8, + 0x00ea: 0x46f3, 0x00eb: 0x31ec, 0x00ec: 0x3264, 0x00ed: 0x3269, 0x00ee: 0x326e, 0x00ef: 0x4707, + 0x00f1: 0x32fa, 0x00f2: 0x331d, 0x00f3: 0x3322, 0x00f4: 0x4711, 0x00f5: 0x4716, + 0x00f6: 0x4725, 0x00f8: 0x8800, 0x00f9: 0x33ae, 0x00fa: 0x33b3, 0x00fb: 0x33b8, + 0x00fc: 0x4757, 0x00fd: 0x3435, 0x00ff: 0x344e, // Block 0x4, offset 0x100 - 0x0100: 0x092d, 0x0101: 0x092f, 0x0102: 0x0931, 0x0103: 0x0007, 0x0104: 0x0933, 0x0105: 0x0936, - 0x0106: 0x0939, 0x0107: 0x093d, 0x0108: 0x093f, 0x0109: 0x0941, 0x010a: 0x0943, 0x010b: 0x0946, - 0x010c: 0x0949, 0x010d: 0x094c, 0x010f: 0x094e, 0x0110: 0x0950, 0x0111: 0x0952, - 0x0112: 0x001e, 0x0113: 0x0955, 0x0114: 0x0958, 0x0115: 0x095c, 0x0116: 0x0960, 0x0117: 0x0962, - 0x0118: 0x0964, 0x0119: 0x0966, 0x011a: 0x096a, 0x011b: 0x096d, 0x011c: 0x096f, 0x011d: 0x0559, - 0x011e: 0x0973, 0x011f: 0x0976, 0x0120: 0x056c, 0x0121: 0x0979, 0x0122: 0x097c, 0x0123: 0x049b, - 0x0124: 0x0964, 0x0125: 0x096d, 0x0126: 0x0559, 0x0127: 0x0973, 0x0128: 0x0575, 0x0129: 0x056c, - 0x012a: 0x0979, - 0x0138: 0x097e, + 0x0100: 0x2e63, 0x0101: 0x316f, 0x0102: 0x4644, 0x0103: 0x46d5, 0x0104: 0x2e81, 0x0105: 0x318d, + 0x0106: 0x2e95, 0x0107: 0x31a1, 0x0108: 0x2e9a, 0x0109: 0x31a6, 0x010a: 0x2e9f, 0x010b: 0x31ab, + 0x010c: 0x2ea4, 0x010d: 0x31b0, 0x010e: 0x2eae, 0x010f: 0x31ba, + 0x0112: 0x4667, 0x0113: 0x46f8, 0x0114: 0x2ed6, 0x0115: 0x31e2, 0x0116: 0x2edb, 0x0117: 0x31e7, + 0x0118: 0x2ef9, 0x0119: 0x3205, 0x011a: 0x2eea, 0x011b: 0x31f6, 0x011c: 0x2f12, 0x011d: 0x321e, + 0x011e: 0x2f1c, 0x011f: 0x3228, 0x0120: 0x2f21, 0x0121: 0x322d, 0x0122: 0x2f2b, 0x0123: 0x3237, + 0x0124: 0x2f30, 0x0125: 0x323c, 0x0128: 0x2f62, 0x0129: 0x3273, + 0x012a: 0x2f67, 0x012b: 0x3278, 0x012c: 0x2f6c, 0x012d: 0x327d, 0x012e: 0x2f8f, 0x012f: 0x329b, + 0x0130: 0x2f71, 0x0132: 0x027d, 0x0133: 0x0301, 0x0134: 0x2f99, 0x0135: 0x32a5, + 0x0136: 0x2fad, 0x0137: 0x32be, 0x0139: 0x2fb7, 0x013a: 0x32c8, 0x013b: 0x2fc1, + 0x013c: 0x32d2, 0x013d: 0x2fbc, 0x013e: 0x32cd, 0x013f: 0x06fd, // Block 0x5, offset 0x140 - 0x0140: 0x0b02, 0x0141: 0x0b06, 0x0142: 0x0b0a, 0x0143: 0x0b0e, 0x0144: 0x0b12, 0x0145: 0x0b16, - 0x0146: 0x0b1a, 0x0147: 0x0b1e, 0x0148: 0x0b22, 0x0149: 0x0b26, 0x014a: 0x0b2a, 0x014b: 0x0b2e, - 0x014c: 0x0b32, 0x014d: 0x0b38, 0x014e: 0x0b3e, 0x014f: 0x0b44, 0x0150: 0x0b4a, 0x0151: 0x0b50, - 0x0152: 0x0b56, 0x0153: 0x0b5c, 0x0154: 0x0b62, 0x0155: 0x0b66, 0x0156: 0x0b6a, 0x0157: 0x0b6e, - 0x0158: 0x0b72, 0x0159: 0x0b76, 0x015a: 0x0b7a, 0x015b: 0x0b7e, 0x015c: 0x0b82, 0x015d: 0x0b88, - 0x015e: 0x0b8e, 0x015f: 0x0b92, 0x0160: 0x0b96, 0x0161: 0x0b9a, 0x0162: 0x0b9e, 0x0163: 0x0ba2, - 0x0164: 0x0ba6, 0x0165: 0x0bac, 0x0166: 0x0bb2, 0x0167: 0x0bb8, 0x0168: 0x0bbe, 0x0169: 0x0bc4, - 0x016a: 0x0bca, 0x016b: 0x0bce, 0x016c: 0x0bd2, 0x016d: 0x0bd6, 0x016e: 0x0bda, 0x016f: 0x0bde, - 0x0170: 0x0be2, 0x0171: 0x0be6, 0x0172: 0x0bea, 0x0173: 0x0bee, 0x0174: 0x0bf2, 0x0175: 0x0bf6, - 0x0176: 0x0bfa, 0x0177: 0x0bfe, 0x0178: 0x0c02, 0x0179: 0x0c08, 0x017a: 0x0c0e, 0x017b: 0x0c14, - 0x017c: 0x0c1a, 0x017d: 0x0c1e, 0x017e: 0x0c22, 0x017f: 0x0c26, + 0x0140: 0x0785, 0x0143: 0x2fe4, 0x0144: 0x32f5, 0x0145: 0x2ffd, + 0x0146: 0x330e, 0x0147: 0x2ff3, 0x0148: 0x3304, 0x0149: 0x07ad, + 0x014c: 0x468a, 0x014d: 0x471b, 0x014e: 0x3016, 0x014f: 0x3327, 0x0150: 0x3020, 0x0151: 0x3331, + 0x0154: 0x303e, 0x0155: 0x334f, 0x0156: 0x3057, 0x0157: 0x3368, + 0x0158: 0x3048, 0x0159: 0x3359, 0x015a: 0x46ad, 0x015b: 0x473e, 0x015c: 0x3061, 0x015d: 0x3372, + 0x015e: 0x3070, 0x015f: 0x3381, 0x0160: 0x46b2, 0x0161: 0x4743, 0x0162: 0x3089, 0x0163: 0x339f, + 0x0164: 0x307a, 0x0165: 0x3390, 0x0168: 0x46bc, 0x0169: 0x474d, + 0x016a: 0x46c1, 0x016b: 0x4752, 0x016c: 0x30a7, 0x016d: 0x33bd, 0x016e: 0x30b1, 0x016f: 0x33c7, + 0x0170: 0x30b6, 0x0171: 0x33cc, 0x0172: 0x30d4, 0x0173: 0x33ea, 0x0174: 0x30f7, 0x0175: 0x340d, + 0x0176: 0x311f, 0x0177: 0x343a, 0x0178: 0x3133, 0x0179: 0x3142, 0x017a: 0x3462, 0x017b: 0x314c, + 0x017c: 0x346c, 0x017d: 0x3151, 0x017e: 0x3471, 0x017f: 0x0175, // Block 0x6, offset 0x180 - 0x0180: 0x0c2a, 0x0181: 0x0c2e, 0x0182: 0x0c32, 0x0183: 0x0c36, 0x0184: 0x0c3a, 0x0185: 0x0c3e, - 0x0186: 0x0c42, 0x0187: 0x0c46, 0x0188: 0x0c4a, 0x0189: 0x0c4e, 0x018a: 0x0c52, 0x018b: 0x0c56, - 0x018c: 0x0c5a, 0x018d: 0x0c5e, 0x018e: 0x0c62, 0x018f: 0x0c66, 0x0190: 0x0c6a, 0x0191: 0x0c6e, - 0x0192: 0x0c72, 0x0193: 0x0c76, 0x0194: 0x0c7a, 0x0195: 0x0c7e, 0x0196: 0x0c82, 0x0197: 0x0c86, - 0x0198: 0x0c8a, 0x0199: 0x0c8e, 0x019a: 0x0c92, 0x019b: 0x0b9a, - 0x01a0: 0x0c9b, 0x01a1: 0x0c9f, 0x01a2: 0x0ca3, 0x01a3: 0x0ca7, - 0x01a4: 0x0cab, 0x01a5: 0x0cb1, 0x01a6: 0x0cb7, 0x01a7: 0x0cbd, 0x01a8: 0x0cc3, 0x01a9: 0x0cc9, - 0x01aa: 0x0ccf, 0x01ab: 0x0cd5, 0x01ac: 0x0cdb, 0x01ad: 0x0ce1, 0x01ae: 0x0ce7, 0x01af: 0x0ced, - 0x01b0: 0x0cf3, 0x01b1: 0x0cf9, 0x01b2: 0x0cff, 0x01b3: 0x0d05, 0x01b4: 0x0d0b, 0x01b5: 0x0d11, - 0x01b6: 0x0d17, 0x01b7: 0x0d1d, 0x01b8: 0x0d23, 0x01b9: 0x0d27, 0x01ba: 0x0d2b, 0x01bb: 0x0d2f, - 0x01bc: 0x0d33, 0x01bd: 0x0d37, 0x01be: 0x0d3b, 0x01bf: 0x0d41, + 0x0184: 0x41d4, 0x0185: 0x41da, + 0x0186: 0x41e0, 0x0187: 0x0292, 0x0188: 0x0295, 0x0189: 0x0322, 0x018a: 0x02a1, 0x018b: 0x02a4, + 0x018c: 0x0358, 0x018d: 0x2e6d, 0x018e: 0x3179, 0x018f: 0x2f7b, 0x0190: 0x3287, 0x0191: 0x3025, + 0x0192: 0x3336, 0x0193: 0x30bb, 0x0194: 0x33d1, 0x0195: 0x38b4, 0x0196: 0x3a43, 0x0197: 0x38ad, + 0x0198: 0x3a3c, 0x0199: 0x38bb, 0x019a: 0x3a4a, 0x019b: 0x38a6, 0x019c: 0x3a35, + 0x019e: 0x3795, 0x019f: 0x3924, 0x01a0: 0x378e, 0x01a1: 0x391d, 0x01a2: 0x3498, 0x01a3: 0x34aa, + 0x01a6: 0x2f26, 0x01a7: 0x3232, 0x01a8: 0x2fa3, 0x01a9: 0x32b4, + 0x01aa: 0x46a3, 0x01ab: 0x4734, 0x01ac: 0x3875, 0x01ad: 0x3a04, 0x01ae: 0x34bc, 0x01af: 0x34c2, + 0x01b0: 0x32aa, 0x01b1: 0x0262, 0x01b2: 0x0265, 0x01b3: 0x02e9, 0x01b4: 0x2f0d, 0x01b5: 0x3219, + 0x01b8: 0x2fdf, 0x01b9: 0x32f0, 0x01ba: 0x379c, 0x01bb: 0x392b, + 0x01bc: 0x3492, 0x01bd: 0x34a4, 0x01be: 0x349e, 0x01bf: 0x34b0, // Block 0x7, offset 0x1c0 - 0x01c0: 0x0d47, 0x01c1: 0x0d4d, 0x01c2: 0x0d53, 0x01c3: 0x0d59, 0x01c4: 0x0d5f, 0x01c5: 0x0d65, - 0x01c6: 0x0d6b, 0x01c7: 0x0d71, 0x01c8: 0x0d77, 0x01c9: 0x0d7b, 0x01ca: 0x0d7f, 0x01cb: 0x0d83, - 0x01cc: 0x0d87, 0x01cd: 0x0d8b, 0x01ce: 0x0d8f, 0x01cf: 0x0d93, 0x01d0: 0x0d97, 0x01d1: 0x0d9d, - 0x01d2: 0x0da3, 0x01d3: 0x0da9, 0x01d4: 0x0daf, 0x01d5: 0x0db5, 0x01d6: 0x0dbb, 0x01d7: 0x0dc1, - 0x01d8: 0x0dc7, 0x01d9: 0x0dcd, 0x01da: 0x0dd3, 0x01db: 0x0dd9, 0x01dc: 0x0ddf, 0x01dd: 0x0de5, - 0x01de: 0x0deb, 0x01df: 0x0df1, 0x01e0: 0x0df7, 0x01e1: 0x0dfd, 0x01e2: 0x0e03, 0x01e3: 0x0e09, - 0x01e4: 0x0e0f, 0x01e5: 0x0e13, 0x01e6: 0x0e17, 0x01e7: 0x0e1b, 0x01e8: 0x0e1f, 0x01e9: 0x0e25, - 0x01ea: 0x0e2b, 0x01eb: 0x0e31, 0x01ec: 0x0e37, 0x01ed: 0x0e3d, 0x01ee: 0x0e43, 0x01ef: 0x0e49, - 0x01f0: 0x0e4f, 0x01f1: 0x0e55, 0x01f2: 0x0e5b, 0x01f3: 0x0e5f, 0x01f4: 0x0e63, 0x01f5: 0x0e67, - 0x01f6: 0x0e6b, 0x01f7: 0x0e6f, 0x01f8: 0x0e73, 0x01f9: 0x0e77, + 0x01c0: 0x2e72, 0x01c1: 0x317e, 0x01c2: 0x2e77, 0x01c3: 0x3183, 0x01c4: 0x2eef, 0x01c5: 0x31fb, + 0x01c6: 0x2ef4, 0x01c7: 0x3200, 0x01c8: 0x2f80, 0x01c9: 0x328c, 0x01ca: 0x2f85, 0x01cb: 0x3291, + 0x01cc: 0x302a, 0x01cd: 0x333b, 0x01ce: 0x302f, 0x01cf: 0x3340, 0x01d0: 0x304d, 0x01d1: 0x335e, + 0x01d2: 0x3052, 0x01d3: 0x3363, 0x01d4: 0x30c0, 0x01d5: 0x33d6, 0x01d6: 0x30c5, 0x01d7: 0x33db, + 0x01d8: 0x306b, 0x01d9: 0x337c, 0x01da: 0x3084, 0x01db: 0x339a, + 0x01de: 0x2f3f, 0x01df: 0x324b, + 0x01e6: 0x4649, 0x01e7: 0x46da, 0x01e8: 0x4671, 0x01e9: 0x4702, + 0x01ea: 0x3844, 0x01eb: 0x39d3, 0x01ec: 0x3821, 0x01ed: 0x39b0, 0x01ee: 0x468f, 0x01ef: 0x4720, + 0x01f0: 0x383d, 0x01f1: 0x39cc, 0x01f2: 0x3129, 0x01f3: 0x3444, // Block 0x8, offset 0x200 - 0x0200: 0x0e7b, 0x0201: 0x0e80, 0x0202: 0x0e85, 0x0203: 0x0e8c, 0x0204: 0x0e93, 0x0205: 0x0e9a, - 0x0206: 0x0ea1, 0x0207: 0x0ea8, 0x0208: 0x0eaf, 0x0209: 0x0eb4, 0x020a: 0x0eb9, 0x020b: 0x0ec0, - 0x020c: 0x0ec7, 0x020d: 0x0ece, 0x020e: 0x0ed5, 0x020f: 0x0edc, 0x0210: 0x0ee3, 0x0211: 0x0ee8, - 0x0212: 0x0eed, 0x0213: 0x0ef4, 0x0214: 0x0efb, 0x0215: 0x0f02, - 0x0218: 0x0f09, 0x0219: 0x0f0e, 0x021a: 0x0f13, 0x021b: 0x0f1a, 0x021c: 0x0f21, 0x021d: 0x0f28, - 0x0220: 0x0f2f, 0x0221: 0x0f34, 0x0222: 0x0f39, 0x0223: 0x0f40, - 0x0224: 0x0f47, 0x0225: 0x0f4e, 0x0226: 0x0f55, 0x0227: 0x0f5c, 0x0228: 0x0f63, 0x0229: 0x0f68, - 0x022a: 0x0f6d, 0x022b: 0x0f74, 0x022c: 0x0f7b, 0x022d: 0x0f82, 0x022e: 0x0f89, 0x022f: 0x0f90, - 0x0230: 0x0f97, 0x0231: 0x0f9c, 0x0232: 0x0fa1, 0x0233: 0x0fa8, 0x0234: 0x0faf, 0x0235: 0x0fb6, - 0x0236: 0x0fbd, 0x0237: 0x0fc4, 0x0238: 0x0fcb, 0x0239: 0x0fd0, 0x023a: 0x0fd5, 0x023b: 0x0fdc, - 0x023c: 0x0fe3, 0x023d: 0x0fea, 0x023e: 0x0ff1, 0x023f: 0x0ff8, + 0x0200: 0x86e6, 0x0201: 0x86e6, 0x0202: 0x86e6, 0x0203: 0x86e6, 0x0204: 0x86e6, 0x0205: 0x80e6, + 0x0206: 0x86e6, 0x0207: 0x86e6, 0x0208: 0x86e6, 0x0209: 0x86e6, 0x020a: 0x86e6, 0x020b: 0x86e6, + 0x020c: 0x86e6, 0x020d: 0x80e6, 0x020e: 0x80e6, 0x020f: 0x86e6, 0x0210: 0x80e6, 0x0211: 0x86e6, + 0x0212: 0x80e6, 0x0213: 0x86e6, 0x0214: 0x86e6, 0x0215: 0x80e8, 0x0216: 0x80dc, 0x0217: 0x80dc, + 0x0218: 0x80dc, 0x0219: 0x80dc, 0x021a: 0x80e8, 0x021b: 0x86d8, 0x021c: 0x80dc, 0x021d: 0x80dc, + 0x021e: 0x80dc, 0x021f: 0x80dc, 0x0220: 0x80dc, 0x0221: 0x80ca, 0x0222: 0x80ca, 0x0223: 0x86dc, + 0x0224: 0x86dc, 0x0225: 0x86dc, 0x0226: 0x86dc, 0x0227: 0x86ca, 0x0228: 0x86ca, 0x0229: 0x80dc, + 0x022a: 0x80dc, 0x022b: 0x80dc, 0x022c: 0x80dc, 0x022d: 0x86dc, 0x022e: 0x86dc, 0x022f: 0x80dc, + 0x0230: 0x86dc, 0x0231: 0x86dc, 0x0232: 0x80dc, 0x0233: 0x80dc, 0x0234: 0x8001, 0x0235: 0x8001, + 0x0236: 0x8001, 0x0237: 0x8001, 0x0238: 0x8601, 0x0239: 0x80dc, 0x023a: 0x80dc, 0x023b: 0x80dc, + 0x023c: 0x80dc, 0x023d: 0x80e6, 0x023e: 0x80e6, 0x023f: 0x80e6, // Block 0x9, offset 0x240 - 0x0240: 0x0fff, 0x0241: 0x1004, 0x0242: 0x1009, 0x0243: 0x1010, 0x0244: 0x1017, 0x0245: 0x101e, - 0x0248: 0x1025, 0x0249: 0x102a, 0x024a: 0x102f, 0x024b: 0x1036, - 0x024c: 0x103d, 0x024d: 0x1044, 0x0250: 0x104b, 0x0251: 0x1050, - 0x0252: 0x1055, 0x0253: 0x105c, 0x0254: 0x1063, 0x0255: 0x106a, 0x0256: 0x1071, 0x0257: 0x1078, - 0x0259: 0x107f, 0x025b: 0x1084, 0x025d: 0x108b, - 0x025f: 0x1092, 0x0260: 0x1099, 0x0261: 0x109e, 0x0262: 0x10a3, 0x0263: 0x10aa, - 0x0264: 0x10b1, 0x0265: 0x10b8, 0x0266: 0x10bf, 0x0267: 0x10c6, 0x0268: 0x10cd, 0x0269: 0x10d2, - 0x026a: 0x10d7, 0x026b: 0x10de, 0x026c: 0x10e5, 0x026d: 0x10ec, 0x026e: 0x10f3, 0x026f: 0x10fa, - 0x0270: 0x1101, 0x0271: 0x0525, 0x0272: 0x1106, 0x0273: 0x052a, 0x0274: 0x110b, 0x0275: 0x052f, - 0x0276: 0x1110, 0x0277: 0x0534, 0x0278: 0x1115, 0x0279: 0x054a, 0x027a: 0x111a, 0x027b: 0x054f, - 0x027c: 0x111f, 0x027d: 0x0554, + 0x0240: 0x4965, 0x0241: 0x496a, 0x0242: 0x86e6, 0x0243: 0x496f, 0x0244: 0x4980, 0x0245: 0x86f0, + 0x0246: 0x80e6, 0x0247: 0x80dc, 0x0248: 0x80dc, 0x0249: 0x80dc, 0x024a: 0x80e6, 0x024b: 0x80e6, + 0x024c: 0x80e6, 0x024d: 0x80dc, 0x024e: 0x80dc, 0x0250: 0x80e6, 0x0251: 0x80e6, + 0x0252: 0x80e6, 0x0253: 0x80dc, 0x0254: 0x80dc, 0x0255: 0x80dc, 0x0256: 0x80dc, 0x0257: 0x80e6, + 0x0258: 0x80e8, 0x0259: 0x80dc, 0x025a: 0x80dc, 0x025b: 0x80e6, 0x025c: 0x80e9, 0x025d: 0x80ea, + 0x025e: 0x80ea, 0x025f: 0x80e9, 0x0260: 0x80ea, 0x0261: 0x80ea, 0x0262: 0x80e9, 0x0263: 0x80e6, + 0x0264: 0x80e6, 0x0265: 0x80e6, 0x0266: 0x80e6, 0x0267: 0x80e6, 0x0268: 0x80e6, 0x0269: 0x80e6, + 0x026a: 0x80e6, 0x026b: 0x80e6, 0x026c: 0x80e6, 0x026d: 0x80e6, 0x026e: 0x80e6, 0x026f: 0x80e6, + 0x0274: 0x042d, + 0x027a: 0x4191, + 0x027e: 0x0105, // Block 0xa, offset 0x280 - 0x0280: 0x1124, 0x0281: 0x112b, 0x0282: 0x1132, 0x0283: 0x113b, 0x0284: 0x1144, 0x0285: 0x114d, - 0x0286: 0x1156, 0x0287: 0x115f, 0x0288: 0x1168, 0x0289: 0x116f, 0x028a: 0x1176, 0x028b: 0x117f, - 0x028c: 0x1188, 0x028d: 0x1191, 0x028e: 0x119a, 0x028f: 0x11a3, 0x0290: 0x11ac, 0x0291: 0x11b3, - 0x0292: 0x11ba, 0x0293: 0x11c3, 0x0294: 0x11cc, 0x0295: 0x11d5, 0x0296: 0x11de, 0x0297: 0x11e7, - 0x0298: 0x11f0, 0x0299: 0x11f7, 0x029a: 0x11fe, 0x029b: 0x1207, 0x029c: 0x1210, 0x029d: 0x1219, - 0x029e: 0x1222, 0x029f: 0x122b, 0x02a0: 0x1234, 0x02a1: 0x123b, 0x02a2: 0x1242, 0x02a3: 0x124b, - 0x02a4: 0x1254, 0x02a5: 0x125d, 0x02a6: 0x1266, 0x02a7: 0x126f, 0x02a8: 0x1278, 0x02a9: 0x127f, - 0x02aa: 0x1286, 0x02ab: 0x128f, 0x02ac: 0x1298, 0x02ad: 0x12a1, 0x02ae: 0x12aa, 0x02af: 0x12b3, - 0x02b0: 0x12bc, 0x02b1: 0x12c1, 0x02b2: 0x12c6, 0x02b3: 0x12cd, 0x02b4: 0x12d2, - 0x02b6: 0x12d9, 0x02b7: 0x12de, 0x02b8: 0x12e5, 0x02b9: 0x12ea, 0x02ba: 0x12ef, 0x02bb: 0x04ee, - 0x02bc: 0x12f4, 0x02bd: 0x12f9, 0x02be: 0x12fd, 0x02bf: 0x12f9, + 0x0284: 0x4146, 0x0285: 0x4379, + 0x0286: 0x34ce, 0x0287: 0x0394, 0x0288: 0x34ec, 0x0289: 0x34f8, 0x028a: 0x350a, + 0x028c: 0x3528, 0x028e: 0x353a, 0x028f: 0x3558, 0x0290: 0x3ced, 0x0291: 0x8800, + 0x0295: 0x8800, 0x0297: 0x8800, + 0x0299: 0x8800, + 0x029f: 0x8800, 0x02a1: 0x8800, + 0x02a5: 0x8800, 0x02a9: 0x8800, + 0x02aa: 0x351c, 0x02ab: 0x354c, 0x02ac: 0x47b5, 0x02ad: 0x357c, 0x02ae: 0x47df, 0x02af: 0x358e, + 0x02b0: 0x3d55, 0x02b1: 0x8800, 0x02b5: 0x8800, + 0x02b7: 0x8800, 0x02b9: 0x8800, + 0x02bf: 0x8800, // Block 0xb, offset 0x2c0 - 0x02c0: 0x1300, 0x02c1: 0x1309, 0x02c2: 0x130f, 0x02c3: 0x1316, 0x02c4: 0x131b, - 0x02c6: 0x1322, 0x02c7: 0x1327, 0x02c8: 0x132e, 0x02c9: 0x04f6, 0x02ca: 0x1333, 0x02cb: 0x04fb, - 0x02cc: 0x1338, 0x02cd: 0x1343, 0x02ce: 0x134f, 0x02cf: 0x135b, 0x02d0: 0x1361, 0x02d1: 0x1366, - 0x02d2: 0x136b, 0x02d3: 0x0514, 0x02d6: 0x1372, 0x02d7: 0x1377, - 0x02d8: 0x137e, 0x02d9: 0x1383, 0x02da: 0x1388, 0x02db: 0x0500, 0x02dd: 0x1393, - 0x02de: 0x139f, 0x02df: 0x13ab, 0x02e0: 0x13b1, 0x02e1: 0x13b6, 0x02e2: 0x13bb, 0x02e3: 0x0539, - 0x02e4: 0x13c2, 0x02e5: 0x13c7, 0x02e6: 0x13cc, 0x02e7: 0x13d1, 0x02e8: 0x13d8, 0x02e9: 0x13dd, - 0x02ea: 0x13e2, 0x02eb: 0x050a, 0x02ec: 0x13e7, 0x02ed: 0x13f1, 0x02ee: 0x04e8, 0x02ef: 0x13f7, - 0x02f2: 0x13f9, 0x02f3: 0x1400, 0x02f4: 0x1405, - 0x02f6: 0x140c, 0x02f7: 0x1411, 0x02f8: 0x1418, 0x02f9: 0x0505, 0x02fa: 0x141d, 0x02fb: 0x050f, - 0x02fc: 0x1422, 0x02fd: 0x0011, 0x02fe: 0x142a, + 0x02c1: 0x8800, 0x02c5: 0x8800, + 0x02c9: 0x8800, 0x02ca: 0x47f7, 0x02cb: 0x4815, + 0x02cc: 0x35ac, 0x02cd: 0x35c4, 0x02ce: 0x482d, 0x02d0: 0x047b, 0x02d1: 0x048d, + 0x02d2: 0x0469, 0x02d3: 0x420a, 0x02d4: 0x4210, 0x02d5: 0x04b7, 0x02d6: 0x04a5, + 0x02f0: 0x0493, 0x02f1: 0x04a8, 0x02f2: 0x04ab, 0x02f4: 0x0445, 0x02f5: 0x0484, + 0x02f9: 0x0463, // Block 0xc, offset 0x300 - 0x0300: 0x1486, 0x0301: 0x001c, 0x0302: 0x000d, 0x0303: 0x000f, 0x0304: 0x1488, 0x0305: 0x148a, - 0x0306: 0x148c, 0x0307: 0x148e, 0x0308: 0x1490, 0x0309: 0x1492, 0x030a: 0x1494, 0x030b: 0x1496, - 0x030c: 0x149a, 0x030d: 0x149c, 0x030e: 0x149e, 0x0310: 0x0007, 0x0311: 0x0941, - 0x0312: 0x001e, 0x0313: 0x04c7, 0x0314: 0x0943, 0x0315: 0x0494, 0x0316: 0x094e, 0x0317: 0x04c5, - 0x0318: 0x0950, 0x0319: 0x14a0, 0x031a: 0x0960, 0x031b: 0x02c8, 0x031c: 0x0962, - 0x0328: 0x14a2, + 0x0300: 0x3606, 0x0301: 0x3612, 0x0303: 0x3600, + 0x0306: 0x8800, 0x0307: 0x35ee, + 0x030c: 0x3642, 0x030d: 0x362a, 0x030e: 0x3654, 0x0310: 0x8800, + 0x0313: 0x8800, 0x0315: 0x8800, 0x0316: 0x8800, 0x0317: 0x8800, + 0x0318: 0x8800, 0x0319: 0x3636, 0x031a: 0x8800, + 0x031e: 0x8800, 0x0323: 0x8800, + 0x0327: 0x8800, + 0x032b: 0x8800, 0x032d: 0x8800, + 0x0330: 0x8800, 0x0333: 0x8800, 0x0335: 0x8800, + 0x0336: 0x8800, 0x0337: 0x8800, 0x0338: 0x8800, 0x0339: 0x36ba, 0x033a: 0x8800, + 0x033e: 0x8800, // Block 0xd, offset 0x340 - 0x0340: 0x14a5, 0x0341: 0x14a9, 0x0342: 0x14ad, 0x0343: 0x14af, 0x0345: 0x14b3, - 0x0346: 0x14b7, 0x0347: 0x14bb, 0x0349: 0x14be, 0x034a: 0x094c, 0x034b: 0x0916, - 0x034c: 0x0916, 0x034d: 0x0916, 0x034e: 0x0494, 0x034f: 0x14c2, 0x0350: 0x0918, 0x0351: 0x0918, - 0x0352: 0x091e, 0x0353: 0x04c5, 0x0355: 0x0922, 0x0356: 0x14c5, - 0x0359: 0x0929, 0x035a: 0x14c8, 0x035b: 0x092b, 0x035c: 0x092b, 0x035d: 0x092b, - 0x0360: 0x14ca, 0x0361: 0x14cd, 0x0362: 0x14d1, - 0x0364: 0x14d4, 0x0366: 0x14d6, 0x0368: 0x14d4, - 0x036a: 0x091c, 0x036b: 0x0046, 0x036c: 0x090b, 0x036d: 0x14ad, 0x036f: 0x0941, - 0x0370: 0x090f, 0x0371: 0x14d9, 0x0373: 0x0920, 0x0374: 0x001e, 0x0375: 0x14db, - 0x0376: 0x14de, 0x0377: 0x14e1, 0x0378: 0x14e4, 0x0379: 0x097c, 0x037b: 0x14e7, - 0x037c: 0x056f, 0x037d: 0x0973, 0x037e: 0x14eb, 0x037f: 0x14ee, + 0x0341: 0x3618, 0x0342: 0x369c, + 0x0350: 0x35f4, 0x0351: 0x3678, + 0x0352: 0x35fa, 0x0353: 0x367e, 0x0356: 0x360c, 0x0357: 0x3690, + 0x0358: 0x8800, 0x0359: 0x8800, 0x035a: 0x370e, 0x035b: 0x3714, 0x035c: 0x361e, 0x035d: 0x36a2, + 0x035e: 0x3624, 0x035f: 0x36a8, 0x0362: 0x3630, 0x0363: 0x36b4, + 0x0364: 0x363c, 0x0365: 0x36c0, 0x0366: 0x3648, 0x0367: 0x36cc, 0x0368: 0x8800, 0x0369: 0x8800, + 0x036a: 0x371a, 0x036b: 0x3720, 0x036c: 0x3672, 0x036d: 0x36f6, 0x036e: 0x364e, 0x036f: 0x36d2, + 0x0370: 0x365a, 0x0371: 0x36de, 0x0372: 0x3660, 0x0373: 0x36e4, 0x0374: 0x3666, 0x0375: 0x36ea, + 0x0378: 0x366c, 0x0379: 0x36f0, // Block 0xe, offset 0x380 - 0x0380: 0x14f1, 0x0385: 0x090d, - 0x0386: 0x093f, 0x0387: 0x0941, 0x0388: 0x097c, 0x0389: 0x0499, - 0x0390: 0x14f5, 0x0391: 0x14fb, - 0x0392: 0x1501, 0x0393: 0x1508, 0x0394: 0x150e, 0x0395: 0x1514, 0x0396: 0x151a, 0x0397: 0x1520, - 0x0398: 0x1526, 0x0399: 0x152c, 0x039a: 0x1532, 0x039b: 0x1538, 0x039c: 0x153e, 0x039d: 0x1544, - 0x039e: 0x154a, 0x039f: 0x1550, 0x03a0: 0x0918, 0x03a1: 0x1555, 0x03a2: 0x1558, 0x03a3: 0x155c, - 0x03a4: 0x155f, 0x03a5: 0x1561, 0x03a6: 0x1564, 0x03a7: 0x1568, 0x03a8: 0x156d, 0x03a9: 0x1570, - 0x03aa: 0x1572, 0x03ab: 0x1575, 0x03ac: 0x091e, 0x03ad: 0x14ad, 0x03ae: 0x090d, 0x03af: 0x0920, - 0x03b0: 0x097c, 0x03b1: 0x1579, 0x03b2: 0x157c, 0x03b3: 0x1580, 0x03b4: 0x096d, 0x03b5: 0x1583, - 0x03b6: 0x1586, 0x03b7: 0x158a, 0x03b8: 0x158f, 0x03b9: 0x04c7, 0x03ba: 0x1592, 0x03bb: 0x1595, - 0x03bc: 0x04c5, 0x03bd: 0x0984, 0x03be: 0x093f, 0x03bf: 0x0950, + 0x0387: 0x1c4e, + 0x0391: 0x80dc, + 0x0392: 0x80e6, 0x0393: 0x80e6, 0x0394: 0x80e6, 0x0395: 0x80e6, 0x0396: 0x80dc, 0x0397: 0x80e6, + 0x0398: 0x80e6, 0x0399: 0x80e6, 0x039a: 0x80de, 0x039b: 0x80dc, 0x039c: 0x80e6, 0x039d: 0x80e6, + 0x039e: 0x80e6, 0x039f: 0x80e6, 0x03a0: 0x80e6, 0x03a1: 0x80e6, 0x03a2: 0x80dc, 0x03a3: 0x80dc, + 0x03a4: 0x80dc, 0x03a5: 0x80dc, 0x03a6: 0x80dc, 0x03a7: 0x80dc, 0x03a8: 0x80e6, 0x03a9: 0x80e6, + 0x03aa: 0x80dc, 0x03ab: 0x80e6, 0x03ac: 0x80e6, 0x03ad: 0x80de, 0x03ae: 0x80e4, 0x03af: 0x80e6, + 0x03b0: 0x800a, 0x03b1: 0x800b, 0x03b2: 0x800c, 0x03b3: 0x800d, 0x03b4: 0x800e, 0x03b5: 0x800f, + 0x03b6: 0x8010, 0x03b7: 0x8011, 0x03b8: 0x8012, 0x03b9: 0x8013, 0x03ba: 0x8013, 0x03bb: 0x8014, + 0x03bc: 0x8015, 0x03bd: 0x8016, 0x03bf: 0x8017, // Block 0xf, offset 0x3c0 - 0x03e0: 0x001c, 0x03e1: 0x000d, 0x03e2: 0x000f, 0x03e3: 0x1488, - 0x03e4: 0x148a, 0x03e5: 0x148c, 0x03e6: 0x148e, 0x03e7: 0x1490, 0x03e8: 0x1492, 0x03e9: 0x16cb, - 0x03ea: 0x16ce, 0x03eb: 0x16d1, 0x03ec: 0x16d4, 0x03ed: 0x16d7, 0x03ee: 0x16da, 0x03ef: 0x16dd, - 0x03f0: 0x16e0, 0x03f1: 0x16e3, 0x03f2: 0x16e6, 0x03f3: 0x16e9, 0x03f4: 0x16ec, 0x03f5: 0x16f0, - 0x03f6: 0x16f4, 0x03f7: 0x16f8, 0x03f8: 0x16fc, 0x03f9: 0x1700, 0x03fa: 0x1704, 0x03fb: 0x1708, - 0x03fc: 0x170c, 0x03fd: 0x1710, 0x03fe: 0x1715, 0x03ff: 0x171a, + 0x03c8: 0x8800, 0x03ca: 0x8800, 0x03cb: 0x801b, + 0x03cc: 0x801c, 0x03cd: 0x801d, 0x03ce: 0x801e, 0x03cf: 0x801f, 0x03d0: 0x8020, 0x03d1: 0x8021, + 0x03d2: 0x8022, 0x03d3: 0x86e6, 0x03d4: 0x86e6, 0x03d5: 0x86dc, 0x03d6: 0x80dc, 0x03d7: 0x80e6, + 0x03d8: 0x80e6, 0x03d9: 0x80e6, 0x03da: 0x80e6, 0x03db: 0x80e6, 0x03dc: 0x80dc, 0x03dd: 0x80e6, + 0x03de: 0x80e6, 0x03df: 0x80dc, + 0x03f0: 0x8023, 0x03f5: 0x1c71, + 0x03f6: 0x1f00, 0x03f7: 0x1f3c, 0x03f8: 0x1f37, // Block 0x10, offset 0x400 - 0x0400: 0x171f, 0x0401: 0x1724, 0x0402: 0x1729, 0x0403: 0x172e, 0x0404: 0x1733, 0x0405: 0x1738, - 0x0406: 0x173d, 0x0407: 0x1742, 0x0408: 0x1747, 0x0409: 0x174a, 0x040a: 0x174d, 0x040b: 0x1750, - 0x040c: 0x1753, 0x040d: 0x1756, 0x040e: 0x1759, 0x040f: 0x175c, 0x0410: 0x175f, 0x0411: 0x1762, - 0x0412: 0x1766, 0x0413: 0x176a, 0x0414: 0x176e, 0x0415: 0x1772, 0x0416: 0x1776, 0x0417: 0x177a, - 0x0418: 0x177e, 0x0419: 0x1782, 0x041a: 0x1786, 0x041b: 0x178a, 0x041c: 0x178e, 0x041d: 0x1792, - 0x041e: 0x1796, 0x041f: 0x179a, 0x0420: 0x179e, 0x0421: 0x17a2, 0x0422: 0x17a6, 0x0423: 0x17aa, - 0x0424: 0x17ae, 0x0425: 0x17b2, 0x0426: 0x17b6, 0x0427: 0x17ba, 0x0428: 0x17be, 0x0429: 0x17c2, - 0x042a: 0x17c6, 0x042b: 0x17ca, 0x042c: 0x17ce, 0x042d: 0x17d2, 0x042e: 0x17d6, 0x042f: 0x17da, - 0x0430: 0x17de, 0x0431: 0x17e2, 0x0432: 0x17e6, 0x0433: 0x17ea, 0x0434: 0x17ee, 0x0435: 0x17f2, - 0x0436: 0x0906, 0x0437: 0x090b, 0x0438: 0x14ad, 0x0439: 0x090d, 0x043a: 0x090f, 0x043b: 0x14d9, - 0x043c: 0x0914, 0x043d: 0x0916, 0x043e: 0x0918, 0x043f: 0x091a, + 0x0405: 0x8800, + 0x0406: 0x0078, 0x0407: 0x8800, 0x0408: 0x007f, 0x0409: 0x8800, 0x040a: 0x0086, 0x040b: 0x8800, + 0x040c: 0x008d, 0x040d: 0x8800, 0x040e: 0x0094, 0x0411: 0x8800, + 0x0412: 0x009b, + 0x0434: 0x8007, 0x0435: 0x8600, + 0x043a: 0x8800, 0x043b: 0x00a2, + 0x043c: 0x8800, 0x043d: 0x00a9, 0x043e: 0x8800, 0x043f: 0x8800, // Block 0x11, offset 0x440 - 0x0440: 0x091c, 0x0441: 0x091e, 0x0442: 0x0920, 0x0443: 0x0922, 0x0444: 0x0924, 0x0445: 0x0929, - 0x0446: 0x14c8, 0x0447: 0x092b, 0x0448: 0x17f6, 0x0449: 0x092d, 0x044a: 0x092f, 0x044b: 0x155f, - 0x044c: 0x0931, 0x044d: 0x1570, 0x044e: 0x17f8, 0x044f: 0x14d4, 0x0450: 0x0007, 0x0451: 0x093d, - 0x0452: 0x0984, 0x0453: 0x093f, 0x0454: 0x0941, 0x0455: 0x098c, 0x0456: 0x094c, 0x0457: 0x0494, - 0x0458: 0x097c, 0x0459: 0x0499, 0x045a: 0x094e, 0x045b: 0x04c5, 0x045c: 0x0950, 0x045d: 0x14a0, - 0x045e: 0x001e, 0x045f: 0x0960, 0x0460: 0x17fa, 0x0461: 0x049b, 0x0462: 0x02c8, 0x0463: 0x0962, - 0x0464: 0x0964, 0x0465: 0x096d, 0x0466: 0x04a6, 0x0467: 0x04c7, 0x0468: 0x04a8, 0x0469: 0x09df, - 0x046a: 0x1486, + 0x0440: 0x0137, 0x0441: 0x0139, 0x0442: 0x013d, 0x0443: 0x0151, 0x0444: 0x03b5, 0x0445: 0x03b8, + 0x0446: 0x0951, 0x0447: 0x0153, 0x0448: 0x0157, 0x0449: 0x0159, 0x044a: 0x03c4, 0x044b: 0x03c7, + 0x044c: 0x03ca, 0x044d: 0x015d, 0x044f: 0x0165, 0x0450: 0x0169, 0x0451: 0x03a3, + 0x0452: 0x016d, 0x0453: 0x03be, 0x0454: 0x0955, 0x0455: 0x0959, 0x0456: 0x016f, 0x0457: 0x0177, + 0x0458: 0x0179, 0x0459: 0x0961, 0x045a: 0x03e8, 0x045b: 0x017b, 0x045c: 0x0965, 0x045d: 0x047b, + 0x045e: 0x047e, 0x045f: 0x0481, 0x0460: 0x04b7, 0x0461: 0x04ba, 0x0462: 0x0161, 0x0463: 0x0173, + 0x0464: 0x0179, 0x0465: 0x017b, 0x0466: 0x047b, 0x0467: 0x047e, 0x0468: 0x04a8, 0x0469: 0x04b7, + 0x046a: 0x04ba, + 0x0478: 0x04c9, // Block 0x12, offset 0x480 - 0x048c: 0x1b8a, 0x048e: 0x1b91, 0x0490: 0x1b98, - 0x0492: 0x1b9f, 0x0494: 0x1ba6, 0x0496: 0x1bad, - 0x0498: 0x1bb4, 0x049a: 0x1bbb, 0x049c: 0x1bc2, - 0x049e: 0x1bc9, 0x04a0: 0x1bd0, 0x04a2: 0x1bd7, - 0x04a5: 0x1bde, 0x04a7: 0x1be5, 0x04a9: 0x1bec, - 0x04b0: 0x1bf3, 0x04b1: 0x1bfa, 0x04b3: 0x1c01, 0x04b4: 0x1c08, - 0x04b6: 0x1c0f, 0x04b7: 0x1c16, 0x04b9: 0x1c1d, 0x04ba: 0x1c24, - 0x04bc: 0x1c2b, 0x04bd: 0x1c32, + 0x049b: 0x03bb, 0x049c: 0x0155, 0x049d: 0x03c1, + 0x049e: 0x039a, 0x049f: 0x03ca, 0x04a0: 0x015b, 0x04a1: 0x03cd, 0x04a2: 0x03d0, 0x04a3: 0x03d6, + 0x04a4: 0x03dc, 0x04a5: 0x03df, 0x04a6: 0x03e2, 0x04a7: 0x0969, 0x04a8: 0x0427, 0x04a9: 0x03e5, + 0x04aa: 0x096d, 0x04ab: 0x042a, 0x04ac: 0x03ee, 0x04ad: 0x03eb, 0x04ae: 0x03f1, 0x04af: 0x03f4, + 0x04b0: 0x03f7, 0x04b1: 0x03fa, 0x04b2: 0x03fd, 0x04b3: 0x0409, 0x04b4: 0x040c, 0x04b5: 0x03ac, + 0x04b6: 0x040f, 0x04b7: 0x0412, 0x04b8: 0x095d, 0x04b9: 0x0415, 0x04ba: 0x0418, 0x04bb: 0x0183, + 0x04bc: 0x041b, 0x04bd: 0x041e, 0x04be: 0x0421, 0x04bf: 0x048d, // Block 0x13, offset 0x4c0 - 0x04c0: 0x1ed8, 0x04c1: 0x1ede, 0x04c2: 0x1ee4, 0x04c3: 0x1eea, 0x04c4: 0x1ef0, 0x04c5: 0x1ef6, - 0x04c6: 0x1efc, 0x04c7: 0x1f02, 0x04c8: 0x1f08, 0x04c9: 0x1f0e, 0x04ca: 0x1f14, 0x04cb: 0x1f1a, - 0x04cc: 0x1f20, 0x04cd: 0x1f26, 0x04ce: 0x1f2c, 0x04cf: 0x1f35, 0x04d0: 0x1f3e, 0x04d1: 0x1f47, - 0x04d2: 0x1f50, 0x04d3: 0x1f59, 0x04d4: 0x1f62, 0x04d5: 0x1f6b, 0x04d6: 0x1f74, 0x04d7: 0x1f7d, - 0x04d8: 0x1f86, 0x04d9: 0x1f8f, 0x04da: 0x1f98, 0x04db: 0x1fa1, 0x04dc: 0x1faa, 0x04dd: 0x1fb3, - 0x04de: 0x1fc5, 0x04e0: 0x1fd4, 0x04e1: 0x1fda, 0x04e2: 0x1fe0, 0x04e3: 0x1fe6, - 0x04e4: 0x1fec, 0x04e5: 0x1ff2, 0x04e6: 0x1ff8, 0x04e7: 0x1ffe, 0x04e8: 0x2004, 0x04e9: 0x200a, - 0x04ea: 0x2010, 0x04eb: 0x2016, 0x04ec: 0x201c, 0x04ed: 0x2022, 0x04ee: 0x2028, 0x04ef: 0x202e, - 0x04f0: 0x2034, 0x04f1: 0x203a, 0x04f2: 0x2040, 0x04f3: 0x2046, 0x04f4: 0x204c, 0x04f5: 0x2052, - 0x04f6: 0x2058, 0x04f7: 0x205e, 0x04f8: 0x2064, 0x04f9: 0x206a, 0x04fa: 0x2070, 0x04fb: 0x2076, - 0x04fc: 0x207c, 0x04fd: 0x2082, 0x04fe: 0x2088, 0x04ff: 0x208e, + 0x04c0: 0x2e7c, 0x04c1: 0x3188, 0x04c2: 0x2e86, 0x04c3: 0x3192, 0x04c4: 0x2e8b, 0x04c5: 0x3197, + 0x04c6: 0x2e90, 0x04c7: 0x319c, 0x04c8: 0x37b1, 0x04c9: 0x3940, 0x04ca: 0x2ea9, 0x04cb: 0x31b5, + 0x04cc: 0x2eb3, 0x04cd: 0x31bf, 0x04ce: 0x2ec2, 0x04cf: 0x31ce, 0x04d0: 0x2eb8, 0x04d1: 0x31c4, + 0x04d2: 0x2ebd, 0x04d3: 0x31c9, 0x04d4: 0x37d4, 0x04d5: 0x3963, 0x04d6: 0x37db, 0x04d7: 0x396a, + 0x04d8: 0x2efe, 0x04d9: 0x320a, 0x04da: 0x2f03, 0x04db: 0x320f, 0x04dc: 0x37e9, 0x04dd: 0x3978, + 0x04de: 0x2f08, 0x04df: 0x3214, 0x04e0: 0x2f17, 0x04e1: 0x3223, 0x04e2: 0x2f35, 0x04e3: 0x3241, + 0x04e4: 0x2f44, 0x04e5: 0x3250, 0x04e6: 0x2f3a, 0x04e7: 0x3246, 0x04e8: 0x2f49, 0x04e9: 0x3255, + 0x04ea: 0x2f4e, 0x04eb: 0x325a, 0x04ec: 0x2f94, 0x04ed: 0x32a0, 0x04ee: 0x37f0, 0x04ef: 0x397f, + 0x04f0: 0x2f9e, 0x04f1: 0x32af, 0x04f2: 0x2fa8, 0x04f3: 0x32b9, 0x04f4: 0x2fb2, 0x04f5: 0x32c3, + 0x04f6: 0x467b, 0x04f7: 0x470c, 0x04f8: 0x37f7, 0x04f9: 0x3986, 0x04fa: 0x2fcb, 0x04fb: 0x32dc, + 0x04fc: 0x2fc6, 0x04fd: 0x32d7, 0x04fe: 0x2fd0, 0x04ff: 0x32e1, // Block 0x14, offset 0x500 - 0x0500: 0x2094, 0x0501: 0x209a, 0x0502: 0x20a0, 0x0503: 0x20a6, 0x0504: 0x20ac, 0x0505: 0x20b0, - 0x0506: 0x192e, 0x0507: 0x20b4, - 0x0510: 0x20b8, 0x0511: 0x20bc, - 0x0512: 0x20bf, 0x0513: 0x20c2, 0x0514: 0x20c5, 0x0515: 0x20c8, 0x0516: 0x20cb, 0x0517: 0x20ce, - 0x0518: 0x20d1, 0x0519: 0x20d4, 0x051a: 0x20d7, 0x051b: 0x20da, 0x051c: 0x20dd, 0x051d: 0x20e0, - 0x051e: 0x20e3, 0x051f: 0x20e6, 0x0520: 0x1d38, 0x0521: 0x1d44, 0x0522: 0x1d50, 0x0523: 0x1d58, - 0x0524: 0x1d78, 0x0525: 0x1d7c, 0x0526: 0x1d88, 0x0527: 0x1d90, 0x0528: 0x1d94, 0x0529: 0x1d9c, - 0x052a: 0x1da0, 0x052b: 0x1da4, 0x052c: 0x1da8, 0x052d: 0x1dac, 0x052e: 0x20e9, 0x052f: 0x20f0, - 0x0530: 0x20f7, 0x0531: 0x20fe, 0x0532: 0x2105, 0x0533: 0x210c, 0x0534: 0x2113, 0x0535: 0x211a, - 0x0536: 0x2121, 0x0537: 0x2128, 0x0538: 0x212f, 0x0539: 0x2136, 0x053a: 0x213d, 0x053b: 0x2144, - 0x053c: 0x214b, 0x053d: 0x215b, 0x053e: 0x2168, + 0x0500: 0x2fd5, 0x0501: 0x32e6, 0x0502: 0x2fda, 0x0503: 0x32eb, 0x0504: 0x2fee, 0x0505: 0x32ff, + 0x0506: 0x2ff8, 0x0507: 0x3309, 0x0508: 0x3007, 0x0509: 0x3318, 0x050a: 0x3002, 0x050b: 0x3313, + 0x050c: 0x381a, 0x050d: 0x39a9, 0x050e: 0x3828, 0x050f: 0x39b7, 0x0510: 0x382f, 0x0511: 0x39be, + 0x0512: 0x3836, 0x0513: 0x39c5, 0x0514: 0x3034, 0x0515: 0x3345, 0x0516: 0x3039, 0x0517: 0x334a, + 0x0518: 0x3043, 0x0519: 0x3354, 0x051a: 0x46a8, 0x051b: 0x4739, 0x051c: 0x387c, 0x051d: 0x3a0b, + 0x051e: 0x305c, 0x051f: 0x336d, 0x0520: 0x3066, 0x0521: 0x3377, 0x0522: 0x46b7, 0x0523: 0x4748, + 0x0524: 0x3883, 0x0525: 0x3a12, 0x0526: 0x388a, 0x0527: 0x3a19, 0x0528: 0x3891, 0x0529: 0x3a20, + 0x052a: 0x3075, 0x052b: 0x3386, 0x052c: 0x307f, 0x052d: 0x3395, 0x052e: 0x3093, 0x052f: 0x33a9, + 0x0530: 0x308e, 0x0531: 0x33a4, 0x0532: 0x30cf, 0x0533: 0x33e5, 0x0534: 0x30de, 0x0535: 0x33f4, + 0x0536: 0x30d9, 0x0537: 0x33ef, 0x0538: 0x3898, 0x0539: 0x3a27, 0x053a: 0x389f, 0x053b: 0x3a2e, + 0x053c: 0x30e3, 0x053d: 0x33f9, 0x053e: 0x30e8, 0x053f: 0x33fe, // Block 0x15, offset 0x540 - 0x0540: 0x1826, 0x0541: 0x183e, 0x0542: 0x1eb0, 0x0543: 0x1eb4, 0x0544: 0x216f, 0x0545: 0x2173, - 0x0546: 0x2177, 0x0547: 0x1852, 0x0548: 0x217b, 0x0549: 0x1882, 0x054a: 0x194a, 0x054b: 0x197a, - 0x054c: 0x1976, 0x054d: 0x194e, 0x054e: 0x1abe, 0x054f: 0x18a2, 0x0550: 0x1942, 0x0551: 0x217f, - 0x0552: 0x2183, 0x0553: 0x2187, 0x0554: 0x218b, 0x0555: 0x218f, 0x0556: 0x2193, 0x0557: 0x2197, - 0x0558: 0x219b, 0x0559: 0x219f, 0x055a: 0x21a3, 0x055b: 0x18ba, 0x055c: 0x21a7, 0x055d: 0x21ab, - 0x055e: 0x21af, 0x055f: 0x21b3, 0x0560: 0x21b7, 0x0561: 0x21bb, 0x0562: 0x21bf, 0x0563: 0x21c3, - 0x0564: 0x1eb8, 0x0565: 0x1ebc, 0x0566: 0x1ec0, 0x0567: 0x21c7, 0x0568: 0x21cb, 0x0569: 0x21cf, - 0x056a: 0x21d3, 0x056b: 0x21d7, 0x056c: 0x21db, 0x056d: 0x21df, 0x056e: 0x21e3, 0x056f: 0x21e7, - 0x0570: 0x21eb, 0x0571: 0x21ef, 0x0572: 0x21f2, 0x0573: 0x21f5, 0x0574: 0x21f8, 0x0575: 0x21fb, - 0x0576: 0x21fe, 0x0577: 0x2201, 0x0578: 0x2204, 0x0579: 0x2207, 0x057a: 0x220a, 0x057b: 0x220d, - 0x057c: 0x2210, 0x057d: 0x2213, 0x057e: 0x2216, 0x057f: 0x2219, + 0x0540: 0x30ed, 0x0541: 0x3403, 0x0542: 0x30f2, 0x0543: 0x3408, 0x0544: 0x3101, 0x0545: 0x3417, + 0x0546: 0x30fc, 0x0547: 0x3412, 0x0548: 0x3106, 0x0549: 0x3421, 0x054a: 0x310b, 0x054b: 0x3426, + 0x054c: 0x3110, 0x054d: 0x342b, 0x054e: 0x312e, 0x054f: 0x3449, 0x0550: 0x3147, 0x0551: 0x3467, + 0x0552: 0x3156, 0x0553: 0x3476, 0x0554: 0x315b, 0x0555: 0x347b, 0x0556: 0x325f, 0x0557: 0x338b, + 0x0558: 0x341c, 0x0559: 0x3458, 0x055a: 0x0731, 0x055b: 0x41c3, + 0x0560: 0x4658, 0x0561: 0x46e9, 0x0562: 0x2e68, 0x0563: 0x3174, + 0x0564: 0x375d, 0x0565: 0x38ec, 0x0566: 0x3756, 0x0567: 0x38e5, 0x0568: 0x376b, 0x0569: 0x38fa, + 0x056a: 0x3764, 0x056b: 0x38f3, 0x056c: 0x37a3, 0x056d: 0x3932, 0x056e: 0x3779, 0x056f: 0x3908, + 0x0570: 0x3772, 0x0571: 0x3901, 0x0572: 0x3787, 0x0573: 0x3916, 0x0574: 0x3780, 0x0575: 0x390f, + 0x0576: 0x37aa, 0x0577: 0x3939, 0x0578: 0x466c, 0x0579: 0x46fd, 0x057a: 0x2ee5, 0x057b: 0x31f1, + 0x057c: 0x2ed1, 0x057d: 0x31dd, 0x057e: 0x37bf, 0x057f: 0x394e, // Block 0x16, offset 0x580 - 0x0580: 0x2325, 0x0581: 0x2335, 0x0582: 0x2342, 0x0583: 0x2352, 0x0584: 0x235c, 0x0585: 0x236c, - 0x0586: 0x2376, 0x0587: 0x2380, 0x0588: 0x2393, 0x0589: 0x23a0, 0x058a: 0x23aa, 0x058b: 0x23b4, - 0x058c: 0x23be, 0x058d: 0x23cb, 0x058e: 0x23d8, 0x058f: 0x23e5, 0x0590: 0x23f2, 0x0591: 0x23ff, - 0x0592: 0x240c, 0x0593: 0x2419, 0x0594: 0x242c, 0x0595: 0x2433, 0x0596: 0x2446, 0x0597: 0x2459, - 0x0598: 0x2469, 0x0599: 0x2476, 0x059a: 0x2489, 0x059b: 0x249c, 0x059c: 0x24a9, 0x059d: 0x24b3, - 0x059e: 0x24bd, 0x059f: 0x24ca, 0x05a0: 0x24d7, 0x05a1: 0x24e7, 0x05a2: 0x24f7, 0x05a3: 0x2501, - 0x05a4: 0x250b, 0x05a5: 0x2518, 0x05a6: 0x2522, 0x05a7: 0x252c, 0x05a8: 0x2533, 0x05a9: 0x253a, - 0x05aa: 0x2544, 0x05ab: 0x254e, 0x05ac: 0x2561, 0x05ad: 0x256e, 0x05ae: 0x257e, 0x05af: 0x2591, - 0x05b0: 0x259e, 0x05b1: 0x25a8, 0x05b2: 0x25b2, 0x05b3: 0x25c5, 0x05b4: 0x25d2, 0x05b5: 0x25e5, - 0x05b6: 0x25ef, 0x05b7: 0x25ff, 0x05b8: 0x2609, 0x05b9: 0x2616, 0x05ba: 0x2620, 0x05bb: 0x262d, - 0x05bc: 0x263d, 0x05bd: 0x264a, 0x05be: 0x265a, 0x05bf: 0x2667, + 0x0580: 0x37b8, 0x0581: 0x3947, 0x0582: 0x37cd, 0x0583: 0x395c, 0x0584: 0x37c6, 0x0585: 0x3955, + 0x0586: 0x37e2, 0x0587: 0x3971, 0x0588: 0x2f76, 0x0589: 0x3282, 0x058a: 0x2f8a, 0x058b: 0x3296, + 0x058c: 0x469e, 0x058d: 0x472f, 0x058e: 0x301b, 0x058f: 0x332c, 0x0590: 0x3805, 0x0591: 0x3994, + 0x0592: 0x37fe, 0x0593: 0x398d, 0x0594: 0x3813, 0x0595: 0x39a2, 0x0596: 0x380c, 0x0597: 0x399b, + 0x0598: 0x386e, 0x0599: 0x39fd, 0x059a: 0x3852, 0x059b: 0x39e1, 0x059c: 0x384b, 0x059d: 0x39da, + 0x059e: 0x3860, 0x059f: 0x39ef, 0x05a0: 0x3859, 0x05a1: 0x39e8, 0x05a2: 0x3867, 0x05a3: 0x39f6, + 0x05a4: 0x30ca, 0x05a5: 0x33e0, 0x05a6: 0x30ac, 0x05a7: 0x33c2, 0x05a8: 0x38c9, 0x05a9: 0x3a58, + 0x05aa: 0x38c2, 0x05ab: 0x3a51, 0x05ac: 0x38d7, 0x05ad: 0x3a66, 0x05ae: 0x38d0, 0x05af: 0x3a5f, + 0x05b0: 0x38de, 0x05b1: 0x3a6d, 0x05b2: 0x3115, 0x05b3: 0x3430, 0x05b4: 0x313d, 0x05b5: 0x345d, + 0x05b6: 0x3138, 0x05b7: 0x3453, 0x05b8: 0x3124, 0x05b9: 0x343f, // Block 0x17, offset 0x5c0 - 0x05c0: 0x266e, 0x05c1: 0x267e, 0x05c2: 0x2688, 0x05c3: 0x2692, 0x05c4: 0x269f, 0x05c5: 0x26a9, - 0x05c6: 0x26b3, 0x05c7: 0x26bd, 0x05c8: 0x26cd, 0x05c9: 0x26da, 0x05ca: 0x26e1, 0x05cb: 0x26f4, - 0x05cc: 0x26fe, 0x05cd: 0x270e, 0x05ce: 0x271b, 0x05cf: 0x2728, 0x05d0: 0x2732, 0x05d1: 0x273c, - 0x05d2: 0x2749, 0x05d3: 0x2750, 0x05d4: 0x275d, 0x05d5: 0x276d, 0x05d6: 0x2774, 0x05d7: 0x2787, - 0x05d8: 0x2791, 0x05d9: 0x2796, 0x05da: 0x279b, 0x05db: 0x27a0, 0x05dc: 0x27a5, 0x05dd: 0x27aa, - 0x05de: 0x27af, 0x05df: 0x27b4, 0x05e0: 0x27b9, 0x05e1: 0x27be, 0x05e2: 0x27c3, 0x05e3: 0x27c9, - 0x05e4: 0x27cf, 0x05e5: 0x27d5, 0x05e6: 0x27db, 0x05e7: 0x27e1, 0x05e8: 0x27e7, 0x05e9: 0x27ed, - 0x05ea: 0x27f3, 0x05eb: 0x27f9, 0x05ec: 0x27ff, 0x05ed: 0x2805, 0x05ee: 0x280b, 0x05ef: 0x2811, - 0x05f0: 0x2817, 0x05f1: 0x281d, 0x05f2: 0x2821, 0x05f3: 0x2824, 0x05f4: 0x2827, 0x05f5: 0x282b, - 0x05f6: 0x282e, 0x05f7: 0x2831, 0x05f8: 0x2834, 0x05f9: 0x2838, 0x05fa: 0x283c, 0x05fb: 0x283f, - 0x05fc: 0x2846, 0x05fd: 0x284d, 0x05fe: 0x2854, 0x05ff: 0x285b, + 0x05c0: 0x47bb, 0x05c1: 0x47c1, 0x05c2: 0x48d5, 0x05c3: 0x48ed, 0x05c4: 0x48dd, 0x05c5: 0x48f5, + 0x05c6: 0x48e5, 0x05c7: 0x48fd, 0x05c8: 0x4761, 0x05c9: 0x4767, 0x05ca: 0x4845, 0x05cb: 0x485d, + 0x05cc: 0x484d, 0x05cd: 0x4865, 0x05ce: 0x4855, 0x05cf: 0x486d, 0x05d0: 0x47cd, 0x05d1: 0x47d3, + 0x05d2: 0x3c9d, 0x05d3: 0x3cad, 0x05d4: 0x3ca5, 0x05d5: 0x3cb5, + 0x05d8: 0x476d, 0x05d9: 0x4773, 0x05da: 0x3bcd, 0x05db: 0x3bdd, 0x05dc: 0x3bd5, 0x05dd: 0x3be5, + 0x05e0: 0x47e5, 0x05e1: 0x47eb, 0x05e2: 0x4905, 0x05e3: 0x491d, + 0x05e4: 0x490d, 0x05e5: 0x4925, 0x05e6: 0x4915, 0x05e7: 0x492d, 0x05e8: 0x4779, 0x05e9: 0x477f, + 0x05ea: 0x4875, 0x05eb: 0x488d, 0x05ec: 0x487d, 0x05ed: 0x4895, 0x05ee: 0x4885, 0x05ef: 0x489d, + 0x05f0: 0x47fd, 0x05f1: 0x4803, 0x05f2: 0x3cfd, 0x05f3: 0x3d15, 0x05f4: 0x3d05, 0x05f5: 0x3d1d, + 0x05f6: 0x3d0d, 0x05f7: 0x3d25, 0x05f8: 0x4785, 0x05f9: 0x478b, 0x05fa: 0x3bfd, 0x05fb: 0x3c15, + 0x05fc: 0x3c05, 0x05fd: 0x3c1d, 0x05fe: 0x3c0d, 0x05ff: 0x3c25, // Block 0x18, offset 0x600 - 0x0600: 0x2868, 0x0601: 0x286b, 0x0602: 0x286e, 0x0603: 0x2872, 0x0604: 0x2875, 0x0605: 0x2878, - 0x0606: 0x287b, 0x0607: 0x287e, 0x0608: 0x2881, 0x0609: 0x2885, 0x060a: 0x288a, 0x060b: 0x288d, - 0x060c: 0x2890, 0x060d: 0x2894, 0x060e: 0x2898, 0x060f: 0x289b, 0x0610: 0x289e, 0x0611: 0x28a1, - 0x0612: 0x28a5, 0x0613: 0x28a9, 0x0614: 0x28ad, 0x0615: 0x28b1, 0x0616: 0x28b5, 0x0617: 0x28b8, - 0x0618: 0x28bb, 0x0619: 0x28be, 0x061a: 0x28c1, 0x061b: 0x28c4, 0x061c: 0x28c8, 0x061d: 0x28cb, - 0x061e: 0x28ce, 0x061f: 0x28d1, 0x0620: 0x28d5, 0x0621: 0x28d9, 0x0622: 0x28dc, 0x0623: 0x28e0, - 0x0624: 0x28e4, 0x0625: 0x28e8, 0x0626: 0x28eb, 0x0627: 0x28ef, 0x0628: 0x28f5, 0x0629: 0x28fc, - 0x062a: 0x28ff, 0x062b: 0x2903, 0x062c: 0x2907, 0x062d: 0x290b, 0x062e: 0x290f, 0x062f: 0x2917, - 0x0630: 0x2920, 0x0631: 0x2923, 0x0632: 0x2926, 0x0633: 0x292a, 0x0634: 0x292d, 0x0635: 0x2930, - 0x0636: 0x2933, 0x0637: 0x2937, 0x0638: 0x293a, 0x0639: 0x293d, 0x063a: 0x2940, 0x063b: 0x2943, - 0x063c: 0x2946, 0x063d: 0x294a, 0x063e: 0x294d, 0x063f: 0x2950, + 0x0600: 0x4809, 0x0601: 0x480f, 0x0602: 0x3d2d, 0x0603: 0x3d3d, 0x0604: 0x3d35, 0x0605: 0x3d45, + 0x0608: 0x4791, 0x0609: 0x4797, 0x060a: 0x3c2d, 0x060b: 0x3c3d, + 0x060c: 0x3c35, 0x060d: 0x3c45, 0x0610: 0x481b, 0x0611: 0x4821, + 0x0612: 0x3d65, 0x0613: 0x3d7d, 0x0614: 0x3d6d, 0x0615: 0x3d85, 0x0616: 0x3d75, 0x0617: 0x3d8d, + 0x0619: 0x479d, 0x061b: 0x3c4d, 0x061d: 0x3c55, + 0x061f: 0x3c5d, 0x0620: 0x4833, 0x0621: 0x4839, 0x0622: 0x4935, 0x0623: 0x494d, + 0x0624: 0x493d, 0x0625: 0x4955, 0x0626: 0x4945, 0x0627: 0x495d, 0x0628: 0x47a3, 0x0629: 0x47a9, + 0x062a: 0x48a5, 0x062b: 0x48bd, 0x062c: 0x48ad, 0x062d: 0x48c5, 0x062e: 0x48b5, 0x062f: 0x48cd, + 0x0630: 0x47af, 0x0631: 0x421c, 0x0632: 0x3576, 0x0633: 0x4222, 0x0634: 0x47d9, 0x0635: 0x4228, + 0x0636: 0x3588, 0x0637: 0x422e, 0x0638: 0x35a6, 0x0639: 0x4234, 0x063a: 0x35be, 0x063b: 0x423a, + 0x063c: 0x4827, 0x063d: 0x4240, // Block 0x19, offset 0x640 - 0x0640: 0x2953, 0x0641: 0x2957, 0x0642: 0x295b, 0x0643: 0x2960, 0x0644: 0x2963, 0x0645: 0x2966, - 0x0646: 0x2969, 0x0647: 0x2970, 0x0648: 0x2974, 0x0649: 0x2977, 0x064a: 0x297a, 0x064b: 0x297d, - 0x064c: 0x2980, 0x064d: 0x2983, 0x064e: 0x2986, 0x064f: 0x2989, 0x0650: 0x298c, 0x0651: 0x298f, - 0x0652: 0x2992, 0x0653: 0x2996, 0x0654: 0x2999, 0x0655: 0x299c, 0x0656: 0x29a0, 0x0657: 0x29a4, - 0x0658: 0x29a7, 0x0659: 0x29ac, 0x065a: 0x29b0, 0x065b: 0x29b3, 0x065c: 0x29b6, 0x065d: 0x29b9, - 0x065e: 0x29bc, 0x065f: 0x29c2, 0x0660: 0x29c8, 0x0661: 0x29cd, 0x0662: 0x29d2, 0x0663: 0x29d7, - 0x0664: 0x29dc, 0x0665: 0x29e1, 0x0666: 0x29e6, 0x0667: 0x29eb, 0x0668: 0x29f0, 0x0669: 0x29f5, - 0x066a: 0x29fb, 0x066b: 0x2a01, 0x066c: 0x2a07, 0x066d: 0x2a0d, 0x066e: 0x2a13, 0x066f: 0x2a19, - 0x0670: 0x2a1f, 0x0671: 0x2a25, 0x0672: 0x2a2b, 0x0673: 0x2a31, 0x0674: 0x2a37, 0x0675: 0x2a3d, - 0x0676: 0x2a43, 0x0677: 0x2a49, 0x0678: 0x2a4f, 0x0679: 0x2a55, 0x067a: 0x2a5b, 0x067b: 0x2a61, - 0x067c: 0x2a67, 0x067d: 0x2a6d, 0x067e: 0x2a73, 0x067f: 0x2a79, + 0x0640: 0x3c85, 0x0641: 0x3c8d, 0x0642: 0x4069, 0x0643: 0x4087, 0x0644: 0x4073, 0x0645: 0x4091, + 0x0646: 0x407d, 0x0647: 0x409b, 0x0648: 0x3bbd, 0x0649: 0x3bc5, 0x064a: 0x3fb5, 0x064b: 0x3fd3, + 0x064c: 0x3fbf, 0x064d: 0x3fdd, 0x064e: 0x3fc9, 0x064f: 0x3fe7, 0x0650: 0x3ccd, 0x0651: 0x3cd5, + 0x0652: 0x40a5, 0x0653: 0x40c3, 0x0654: 0x40af, 0x0655: 0x40cd, 0x0656: 0x40b9, 0x0657: 0x40d7, + 0x0658: 0x3bed, 0x0659: 0x3bf5, 0x065a: 0x3ff1, 0x065b: 0x400f, 0x065c: 0x3ffb, 0x065d: 0x4019, + 0x065e: 0x4005, 0x065f: 0x4023, 0x0660: 0x3da5, 0x0661: 0x3dad, 0x0662: 0x40e1, 0x0663: 0x40ff, + 0x0664: 0x40eb, 0x0665: 0x4109, 0x0666: 0x40f5, 0x0667: 0x4113, 0x0668: 0x3c65, 0x0669: 0x3c6d, + 0x066a: 0x402d, 0x066b: 0x404b, 0x066c: 0x4037, 0x066d: 0x4055, 0x066e: 0x4041, 0x066f: 0x405f, + 0x0670: 0x356a, 0x0671: 0x3564, 0x0672: 0x3c75, 0x0673: 0x3570, 0x0674: 0x3c7d, + 0x0676: 0x47c7, 0x0677: 0x3c95, 0x0678: 0x34da, 0x0679: 0x34d4, 0x067a: 0x34c8, 0x067b: 0x41ec, + 0x067c: 0x34e0, 0x067d: 0x4173, 0x067e: 0x0490, 0x067f: 0x4173, // Block 0x1a, offset 0x680 - 0x0680: 0x2fce, 0x0681: 0x2fd2, 0x0682: 0x2fd6, 0x0683: 0x2fda, 0x0684: 0x2fde, 0x0685: 0x2fe2, - 0x0686: 0x2fe6, 0x0687: 0x2fea, 0x0688: 0x2fee, 0x0689: 0x2eed, 0x068a: 0x2ff2, 0x068b: 0x2ef1, - 0x068c: 0x2ff6, 0x068d: 0x2ffa, 0x068e: 0x2ffe, 0x068f: 0x3002, 0x0690: 0x3006, 0x0691: 0x2e6d, - 0x0692: 0x2b15, 0x0693: 0x300a, 0x0694: 0x300e, 0x0695: 0x195a, 0x0696: 0x2c25, 0x0697: 0x2d71, - 0x0698: 0x3012, 0x0699: 0x3016, 0x069a: 0x2f0d, 0x069b: 0x301a, 0x069c: 0x2f11, 0x069d: 0x301e, - 0x069e: 0x3022, 0x069f: 0x3026, 0x06a0: 0x2e75, 0x06a1: 0x302a, 0x06a2: 0x302e, 0x06a3: 0x3032, - 0x06a4: 0x3036, 0x06a5: 0x303a, 0x06a6: 0x2e79, 0x06a7: 0x303e, 0x06a8: 0x3042, 0x06a9: 0x3046, - 0x06aa: 0x304a, 0x06ab: 0x304e, 0x06ac: 0x3052, 0x06ad: 0x2f41, 0x06ae: 0x3056, 0x06af: 0x305a, - 0x06b0: 0x2cb1, 0x06b1: 0x305e, 0x06b2: 0x2f51, 0x06b3: 0x3062, 0x06b4: 0x3066, 0x06b5: 0x306a, - 0x06b6: 0x306e, 0x06b7: 0x3072, 0x06b8: 0x2f65, 0x06b9: 0x3076, 0x06ba: 0x2e99, 0x06bb: 0x307a, - 0x06bc: 0x2f69, 0x06bd: 0x2bd9, 0x06be: 0x307e, 0x06bf: 0x2f6d, + 0x0680: 0x418c, 0x0681: 0x4380, 0x0682: 0x3cbd, 0x0683: 0x3582, 0x0684: 0x3cc5, + 0x0686: 0x47f1, 0x0687: 0x3cdd, 0x0688: 0x34e6, 0x0689: 0x41f2, 0x068a: 0x34f2, 0x068b: 0x41f8, + 0x068c: 0x34fe, 0x068d: 0x4387, 0x068e: 0x438e, 0x068f: 0x4395, 0x0690: 0x359a, 0x0691: 0x3594, + 0x0692: 0x3ce5, 0x0693: 0x43e2, 0x0696: 0x35a0, 0x0697: 0x3cf5, + 0x0698: 0x3516, 0x0699: 0x3510, 0x069a: 0x3504, 0x069b: 0x41fe, 0x069d: 0x439c, + 0x069e: 0x43a3, 0x069f: 0x43aa, 0x06a0: 0x35d0, 0x06a1: 0x35ca, 0x06a2: 0x3d4d, 0x06a3: 0x43ea, + 0x06a4: 0x35b2, 0x06a5: 0x35b8, 0x06a6: 0x35d6, 0x06a7: 0x3d5d, 0x06a8: 0x3546, 0x06a9: 0x3540, + 0x06aa: 0x3534, 0x06ab: 0x420a, 0x06ac: 0x352e, 0x06ad: 0x4372, 0x06ae: 0x4379, 0x06af: 0x014f, + 0x06b2: 0x3d95, 0x06b3: 0x35dc, 0x06b4: 0x3d9d, + 0x06b6: 0x483f, 0x06b7: 0x3db5, 0x06b8: 0x3522, 0x06b9: 0x4204, 0x06ba: 0x3552, 0x06bb: 0x4216, + 0x06bc: 0x355e, 0x06bd: 0x4146, 0x06be: 0x4178, // Block 0x1b, offset 0x6c0 - 0x06c0: 0x3082, 0x06c1: 0x2f75, 0x06c2: 0x3086, 0x06c3: 0x308a, 0x06c4: 0x308e, 0x06c5: 0x3092, - 0x06c6: 0x3096, 0x06c7: 0x2f7d, 0x06c8: 0x2e8d, 0x06c9: 0x309a, 0x06ca: 0x2f81, 0x06cb: 0x309e, - 0x06cc: 0x2f85, 0x06cd: 0x30a2, 0x06ce: 0x1b76, 0x06cf: 0x30a6, 0x06d0: 0x30ab, 0x06d1: 0x30b0, - 0x06d2: 0x30b5, 0x06d3: 0x30b9, 0x06d4: 0x30bd, 0x06d5: 0x30c1, 0x06d6: 0x30c6, 0x06d7: 0x30cb, - 0x06d8: 0x30d0, 0x06d9: 0x30d4, + 0x06c0: 0x0729, 0x06c1: 0x072d, 0x06c2: 0x0115, 0x06c3: 0x07a5, 0x06c5: 0x0739, + 0x06c6: 0x073d, 0x06c7: 0x03a9, 0x06c9: 0x07a9, 0x06ca: 0x015d, 0x06cb: 0x011f, + 0x06cc: 0x011f, 0x06cd: 0x011f, 0x06ce: 0x015f, 0x06cf: 0x039d, 0x06d0: 0x0121, 0x06d1: 0x0121, + 0x06d2: 0x0127, 0x06d3: 0x0167, 0x06d5: 0x012b, 0x06d6: 0x02a7, + 0x06d9: 0x012f, 0x06da: 0x0131, 0x06db: 0x0133, 0x06dc: 0x0133, 0x06dd: 0x0133, + 0x06e0: 0x02b9, 0x06e1: 0x0719, 0x06e2: 0x02c2, + 0x06e4: 0x0143, 0x06e6: 0x0475, 0x06e8: 0x0143, + 0x06ea: 0x0125, 0x06eb: 0x41be, 0x06ec: 0x0113, 0x06ed: 0x0115, 0x06ef: 0x0159, + 0x06f0: 0x0119, 0x06f1: 0x011b, 0x06f3: 0x0129, 0x06f4: 0x016d, 0x06f5: 0x04cc, + 0x06f6: 0x04cf, 0x06f7: 0x04d2, 0x06f8: 0x04d5, 0x06f9: 0x0161, 0x06fb: 0x06e9, + 0x06fc: 0x04a5, 0x06fd: 0x047e, 0x06fe: 0x0436, 0x06ff: 0x045d, // Block 0x1c, offset 0x700 - 0x0700: 0x30d8, 0x0701: 0x30db, 0x0702: 0x30de, 0x0703: 0x30e1, 0x0704: 0x30e5, 0x0705: 0x30e9, - 0x0706: 0x30e9, - 0x0713: 0x30ec, 0x0714: 0x30f1, 0x0715: 0x30f6, 0x0716: 0x30fb, 0x0717: 0x3100, - 0x071d: 0x3105, - 0x071f: 0x310a, 0x0720: 0x310f, 0x0721: 0x14db, 0x0722: 0x14e4, 0x0723: 0x3112, - 0x0724: 0x3115, 0x0725: 0x3118, 0x0726: 0x311b, 0x0727: 0x311e, 0x0728: 0x3121, 0x0729: 0x1494, - 0x072a: 0x3124, 0x072b: 0x3129, 0x072c: 0x312e, 0x072d: 0x3135, 0x072e: 0x313c, 0x072f: 0x3141, - 0x0730: 0x3146, 0x0731: 0x314b, 0x0732: 0x3150, 0x0733: 0x3155, 0x0734: 0x315a, 0x0735: 0x315f, - 0x0736: 0x3164, 0x0738: 0x3169, 0x0739: 0x316e, 0x073a: 0x3173, 0x073b: 0x3178, - 0x073c: 0x317d, 0x073e: 0x3182, + 0x0700: 0x09a1, 0x0705: 0x0117, + 0x0706: 0x0157, 0x0707: 0x0159, 0x0708: 0x0161, 0x0709: 0x0163, + 0x0710: 0x2341, 0x0711: 0x234d, + 0x0712: 0x2401, 0x0713: 0x2329, 0x0714: 0x23ad, 0x0715: 0x2335, 0x0716: 0x23b3, 0x0717: 0x23cb, + 0x0718: 0x23d7, 0x0719: 0x233b, 0x071a: 0x23dd, 0x071b: 0x2347, 0x071c: 0x23d1, 0x071d: 0x23e3, + 0x071e: 0x23e9, 0x071f: 0x1ba9, 0x0720: 0x0121, 0x0721: 0x027a, 0x0722: 0x06f5, 0x0723: 0x0283, + 0x0724: 0x013b, 0x0725: 0x02c5, 0x0726: 0x0721, 0x0727: 0x1c35, 0x0728: 0x0286, 0x0729: 0x013f, + 0x072a: 0x02d1, 0x072b: 0x0725, 0x072c: 0x0127, 0x072d: 0x0115, 0x072e: 0x0117, 0x072f: 0x0129, + 0x0730: 0x0161, 0x0731: 0x02fe, 0x0732: 0x0769, 0x0733: 0x0307, 0x0734: 0x017b, 0x0735: 0x037c, + 0x0736: 0x079d, 0x0737: 0x1c49, 0x0738: 0x030a, 0x0739: 0x017f, 0x073a: 0x037f, 0x073b: 0x07a1, + 0x073c: 0x0167, 0x073d: 0x0155, 0x073e: 0x0157, 0x073f: 0x0169, // Block 0x1d, offset 0x740 - 0x0740: 0x3187, 0x0741: 0x318c, 0x0743: 0x3191, 0x0744: 0x3196, - 0x0746: 0x319b, 0x0747: 0x31a0, 0x0748: 0x31a5, 0x0749: 0x31aa, 0x074a: 0x31af, 0x074b: 0x31b4, - 0x074c: 0x31b9, 0x074d: 0x31be, 0x074e: 0x31c3, 0x074f: 0x31c8, 0x0750: 0x31cd, 0x0751: 0x31cd, - 0x0752: 0x31d0, 0x0753: 0x31d0, 0x0754: 0x31d0, 0x0755: 0x31d0, 0x0756: 0x31d3, 0x0757: 0x31d3, - 0x0758: 0x31d3, 0x0759: 0x31d3, 0x075a: 0x31d6, 0x075b: 0x31d6, 0x075c: 0x31d6, 0x075d: 0x31d6, - 0x075e: 0x31d9, 0x075f: 0x31d9, 0x0760: 0x31d9, 0x0761: 0x31d9, 0x0762: 0x31dc, 0x0763: 0x31dc, - 0x0764: 0x31dc, 0x0765: 0x31dc, 0x0766: 0x31df, 0x0767: 0x31df, 0x0768: 0x31df, 0x0769: 0x31df, - 0x076a: 0x31e2, 0x076b: 0x31e2, 0x076c: 0x31e2, 0x076d: 0x31e2, 0x076e: 0x31e5, 0x076f: 0x31e5, - 0x0770: 0x31e5, 0x0771: 0x31e5, 0x0772: 0x31e8, 0x0773: 0x31e8, 0x0774: 0x31e8, 0x0775: 0x31e8, - 0x0776: 0x31eb, 0x0777: 0x31eb, 0x0778: 0x31eb, 0x0779: 0x31eb, 0x077a: 0x31ee, 0x077b: 0x31ee, - 0x077c: 0x31ee, 0x077d: 0x31ee, 0x077e: 0x31f1, 0x077f: 0x31f1, + 0x0741: 0x3aeb, 0x0743: 0x8800, 0x0744: 0x3af2, 0x0745: 0x8800, + 0x0747: 0x3af9, 0x0748: 0x8800, 0x0749: 0x3b00, + 0x074d: 0x8800, + 0x0760: 0x2e4a, 0x0761: 0x8800, 0x0762: 0x3b0e, + 0x0764: 0x8800, 0x0765: 0x8800, + 0x076d: 0x3b07, 0x076e: 0x2e45, 0x076f: 0x2e4f, + 0x0770: 0x3b15, 0x0771: 0x3b1c, 0x0772: 0x8800, 0x0773: 0x8800, 0x0774: 0x3b23, 0x0775: 0x3b2a, + 0x0776: 0x8800, 0x0777: 0x8800, 0x0778: 0x3b31, 0x0779: 0x3b38, 0x077a: 0x8800, 0x077b: 0x8800, + 0x077c: 0x8800, 0x077d: 0x8800, // Block 0x1e, offset 0x780 - 0x0780: 0x31f1, 0x0781: 0x31f1, 0x0782: 0x31f4, 0x0783: 0x31f4, 0x0784: 0x31f7, 0x0785: 0x31f7, - 0x0786: 0x31fa, 0x0787: 0x31fa, 0x0788: 0x31fd, 0x0789: 0x31fd, 0x078a: 0x3200, 0x078b: 0x3200, - 0x078c: 0x3203, 0x078d: 0x3203, 0x078e: 0x3206, 0x078f: 0x3206, 0x0790: 0x3206, 0x0791: 0x3206, - 0x0792: 0x3209, 0x0793: 0x3209, 0x0794: 0x3209, 0x0795: 0x3209, 0x0796: 0x320c, 0x0797: 0x320c, - 0x0798: 0x320c, 0x0799: 0x320c, 0x079a: 0x320f, 0x079b: 0x320f, 0x079c: 0x320f, 0x079d: 0x320f, - 0x079e: 0x3212, 0x079f: 0x3212, 0x07a0: 0x3215, 0x07a1: 0x3215, 0x07a2: 0x3215, 0x07a3: 0x3215, - 0x07a4: 0x06ba, 0x07a5: 0x06ba, 0x07a6: 0x3218, 0x07a7: 0x3218, 0x07a8: 0x3218, 0x07a9: 0x3218, - 0x07aa: 0x321b, 0x07ab: 0x321b, 0x07ac: 0x321b, 0x07ad: 0x321b, 0x07ae: 0x321e, 0x07af: 0x321e, - 0x07b0: 0x06c4, 0x07b1: 0x06c4, + 0x0780: 0x3b3f, 0x0781: 0x3b46, 0x0782: 0x8800, 0x0783: 0x8800, 0x0784: 0x3b5b, 0x0785: 0x3b62, + 0x0786: 0x8800, 0x0787: 0x8800, 0x0788: 0x3b69, 0x0789: 0x3b70, + 0x0791: 0x8800, + 0x0792: 0x8800, + 0x07a2: 0x8800, + 0x07a8: 0x8800, 0x07a9: 0x8800, + 0x07ab: 0x8800, 0x07ac: 0x3b85, 0x07ad: 0x3b8c, 0x07ae: 0x3b93, 0x07af: 0x3b9a, + 0x07b2: 0x8800, 0x07b3: 0x8800, 0x07b4: 0x8800, 0x07b5: 0x8800, // Block 0x1f, offset 0x7c0 - 0x07d3: 0x3221, 0x07d4: 0x3221, 0x07d5: 0x3221, 0x07d6: 0x3221, 0x07d7: 0x3224, - 0x07d8: 0x3224, 0x07d9: 0x3227, 0x07da: 0x3227, 0x07db: 0x322a, 0x07dc: 0x322a, 0x07dd: 0x06b0, - 0x07de: 0x322d, 0x07df: 0x322d, 0x07e0: 0x3230, 0x07e1: 0x3230, 0x07e2: 0x3233, 0x07e3: 0x3233, - 0x07e4: 0x3236, 0x07e5: 0x3236, 0x07e6: 0x3236, 0x07e7: 0x3236, 0x07e8: 0x3239, 0x07e9: 0x3239, - 0x07ea: 0x323c, 0x07eb: 0x323c, 0x07ec: 0x3243, 0x07ed: 0x3243, 0x07ee: 0x324a, 0x07ef: 0x324a, - 0x07f0: 0x3251, 0x07f1: 0x3251, 0x07f2: 0x3258, 0x07f3: 0x3258, 0x07f4: 0x325f, 0x07f5: 0x325f, - 0x07f6: 0x3266, 0x07f7: 0x3266, 0x07f8: 0x3266, 0x07f9: 0x326d, 0x07fa: 0x326d, 0x07fb: 0x326d, - 0x07fc: 0x3274, 0x07fd: 0x3274, 0x07fe: 0x3274, 0x07ff: 0x3274, + 0x07e0: 0x00f1, 0x07e1: 0x00f3, 0x07e2: 0x00f5, 0x07e3: 0x00f7, + 0x07e4: 0x00f9, 0x07e5: 0x00fb, 0x07e6: 0x00fd, 0x07e7: 0x00ff, 0x07e8: 0x0101, 0x07e9: 0x01a2, + 0x07ea: 0x01a5, 0x07eb: 0x01a8, 0x07ec: 0x01ab, 0x07ed: 0x01ae, 0x07ee: 0x01b1, 0x07ef: 0x01b4, + 0x07f0: 0x01b7, 0x07f1: 0x01ba, 0x07f2: 0x01bd, 0x07f3: 0x01c6, 0x07f4: 0x05b9, 0x07f5: 0x05bd, + 0x07f6: 0x05c1, 0x07f7: 0x05c5, 0x07f8: 0x05c9, 0x07f9: 0x05cd, 0x07fa: 0x05d1, 0x07fb: 0x05d5, + 0x07fc: 0x05d9, 0x07fd: 0x1b6d, 0x07fe: 0x1b72, 0x07ff: 0x1b77, // Block 0x20, offset 0x800 - 0x0800: 0x33ba, 0x0801: 0x33bf, 0x0802: 0x33c4, 0x0803: 0x33c9, 0x0804: 0x33ce, 0x0805: 0x33d3, - 0x0806: 0x33d8, 0x0807: 0x33dd, 0x0808: 0x33e2, 0x0809: 0x33e7, 0x080a: 0x33ec, 0x080b: 0x33f1, - 0x080c: 0x33f6, 0x080d: 0x33fb, 0x080e: 0x3400, 0x080f: 0x3405, 0x0810: 0x340a, 0x0811: 0x340f, - 0x0812: 0x3414, 0x0813: 0x3419, 0x0814: 0x341e, 0x0815: 0x3423, 0x0816: 0x3428, 0x0817: 0x342d, - 0x0818: 0x3432, 0x0819: 0x3437, 0x081a: 0x343c, 0x081b: 0x3441, 0x081c: 0x3446, 0x081d: 0x344b, - 0x081e: 0x3450, 0x081f: 0x3456, 0x0820: 0x345c, 0x0821: 0x3462, 0x0822: 0x3468, 0x0823: 0x346e, - 0x0824: 0x3474, 0x0825: 0x347b, 0x0826: 0x3285, 0x0827: 0x3482, 0x0828: 0x326d, 0x0829: 0x328c, - 0x082a: 0x3489, 0x082b: 0x348e, 0x082c: 0x32a2, 0x082d: 0x3493, 0x082e: 0x32a7, 0x082f: 0x32ac, - 0x0830: 0x3498, 0x0831: 0x349d, 0x0832: 0x32c0, 0x0833: 0x34a2, 0x0834: 0x32c5, 0x0835: 0x32ca, - 0x0836: 0x34a7, 0x0837: 0x34ac, 0x0838: 0x32d4, 0x0839: 0x34b1, 0x083a: 0x32d9, 0x083b: 0x32de, - 0x083c: 0x336f, 0x083d: 0x3374, 0x083e: 0x3383, 0x083f: 0x3388, + 0x0800: 0x1b7c, 0x0801: 0x1b81, 0x0802: 0x1b86, 0x0803: 0x1b8b, 0x0804: 0x1b90, 0x0805: 0x1b95, + 0x0806: 0x1b9a, 0x0807: 0x1b9f, 0x0808: 0x019f, 0x0809: 0x01c3, 0x080a: 0x01e7, 0x080b: 0x020b, + 0x080c: 0x022f, 0x080d: 0x0238, 0x080e: 0x023e, 0x080f: 0x0244, 0x0810: 0x024a, 0x0811: 0x06b1, + 0x0812: 0x06b5, 0x0813: 0x06b9, 0x0814: 0x06bd, 0x0815: 0x06c1, 0x0816: 0x06c5, 0x0817: 0x06c9, + 0x0818: 0x06cd, 0x0819: 0x06d1, 0x081a: 0x06d5, 0x081b: 0x06d9, 0x081c: 0x0645, 0x081d: 0x0649, + 0x081e: 0x064d, 0x081f: 0x0651, 0x0820: 0x0655, 0x0821: 0x0659, 0x0822: 0x065d, 0x0823: 0x0661, + 0x0824: 0x0665, 0x0825: 0x0669, 0x0826: 0x066d, 0x0827: 0x0671, 0x0828: 0x0675, 0x0829: 0x0679, + 0x082a: 0x067d, 0x082b: 0x0681, 0x082c: 0x0685, 0x082d: 0x0689, 0x082e: 0x068d, 0x082f: 0x0691, + 0x0830: 0x0695, 0x0831: 0x0699, 0x0832: 0x069d, 0x0833: 0x06a1, 0x0834: 0x06a5, 0x0835: 0x06a9, + 0x0836: 0x0111, 0x0837: 0x0113, 0x0838: 0x0115, 0x0839: 0x0117, 0x083a: 0x0119, 0x083b: 0x011b, + 0x083c: 0x011d, 0x083d: 0x011f, 0x083e: 0x0121, 0x083f: 0x0123, // Block 0x21, offset 0x840 - 0x0840: 0x338d, 0x0841: 0x33a1, 0x0842: 0x33a6, 0x0843: 0x33ab, 0x0844: 0x33b0, 0x0845: 0x33c4, - 0x0846: 0x33c9, 0x0847: 0x33ce, 0x0848: 0x34b6, 0x0849: 0x33e2, 0x084a: 0x34bb, 0x084b: 0x34c0, - 0x084c: 0x3400, 0x084d: 0x34c5, 0x084e: 0x3405, 0x084f: 0x340a, 0x0850: 0x344b, 0x0851: 0x34ca, - 0x0852: 0x34cf, 0x0853: 0x3432, 0x0854: 0x34d4, 0x0855: 0x3437, 0x0856: 0x343c, 0x0857: 0x3277, - 0x0858: 0x327e, 0x0859: 0x34d9, 0x085a: 0x3285, 0x085b: 0x34e0, 0x085c: 0x3293, 0x085d: 0x3298, - 0x085e: 0x329d, 0x085f: 0x32a2, 0x0860: 0x34e7, 0x0861: 0x32b1, 0x0862: 0x32b6, 0x0863: 0x32bb, - 0x0864: 0x32c0, 0x0865: 0x34ec, 0x0866: 0x32d4, 0x0867: 0x32e3, 0x0868: 0x32e8, 0x0869: 0x32ed, - 0x086a: 0x32f2, 0x086b: 0x32f7, 0x086c: 0x3301, 0x086d: 0x3306, 0x086e: 0x330b, 0x086f: 0x3310, - 0x0870: 0x3315, 0x0871: 0x331a, 0x0872: 0x34f1, 0x0873: 0x331f, 0x0874: 0x3324, 0x0875: 0x3329, - 0x0876: 0x332e, 0x0877: 0x3333, 0x0878: 0x3338, 0x0879: 0x3342, 0x087a: 0x3347, 0x087b: 0x334c, - 0x087c: 0x3351, 0x087d: 0x3356, 0x087e: 0x335b, 0x087f: 0x3360, + 0x0840: 0x0bfd, 0x0841: 0x0c21, 0x0842: 0x0c2d, 0x0843: 0x0c3d, 0x0844: 0x0c45, 0x0845: 0x0c51, + 0x0846: 0x0c59, 0x0847: 0x0c61, 0x0848: 0x0c6d, 0x0849: 0x0cc1, 0x084a: 0x0cd9, 0x084b: 0x0ce9, + 0x084c: 0x0cf9, 0x084d: 0x0d09, 0x084e: 0x0d19, 0x084f: 0x0d39, 0x0850: 0x0d3d, 0x0851: 0x0d41, + 0x0852: 0x0d75, 0x0853: 0x0d9d, 0x0854: 0x0dad, 0x0855: 0x0db5, 0x0856: 0x0db9, 0x0857: 0x0dc5, + 0x0858: 0x0de1, 0x0859: 0x0de5, 0x085a: 0x0dfd, 0x085b: 0x0e01, 0x085c: 0x0e09, 0x085d: 0x0e19, + 0x085e: 0x0eb5, 0x085f: 0x0ec9, 0x0860: 0x0f09, 0x0861: 0x0f1d, 0x0862: 0x0f25, 0x0863: 0x0f29, + 0x0864: 0x0f39, 0x0865: 0x0f55, 0x0866: 0x0f81, 0x0867: 0x0f8d, 0x0868: 0x0fad, 0x0869: 0x0fb9, + 0x086a: 0x0fbd, 0x086b: 0x0fc1, 0x086c: 0x0fd9, 0x086d: 0x0fdd, 0x086e: 0x1009, 0x086f: 0x1015, + 0x0870: 0x101d, 0x0871: 0x1025, 0x0872: 0x1035, 0x0873: 0x103d, 0x0874: 0x1045, 0x0875: 0x1071, + 0x0876: 0x1075, 0x0877: 0x107d, 0x0878: 0x1081, 0x0879: 0x1089, 0x087a: 0x1091, 0x087b: 0x10a1, + 0x087c: 0x10bd, 0x087d: 0x1135, 0x087e: 0x1149, 0x087f: 0x114d, // Block 0x22, offset 0x880 - 0x0880: 0x3365, 0x0881: 0x336a, 0x0882: 0x3379, 0x0883: 0x337e, 0x0884: 0x3392, 0x0885: 0x3397, - 0x0886: 0x339c, 0x0887: 0x33a1, 0x0888: 0x33a6, 0x0889: 0x33b5, 0x088a: 0x33ba, 0x088b: 0x33bf, - 0x088c: 0x33c4, 0x088d: 0x34f6, 0x088e: 0x33d3, 0x088f: 0x33d8, 0x0890: 0x33dd, 0x0891: 0x33e2, - 0x0892: 0x33f1, 0x0893: 0x33f6, 0x0894: 0x33fb, 0x0895: 0x3400, 0x0896: 0x34fb, 0x0897: 0x340f, - 0x0898: 0x3414, 0x0899: 0x3500, 0x089a: 0x3423, 0x089b: 0x3428, 0x089c: 0x342d, 0x089d: 0x3432, - 0x089e: 0x3505, 0x089f: 0x3285, 0x08a0: 0x34e0, 0x08a1: 0x32a2, 0x08a2: 0x34e7, 0x08a3: 0x32c0, - 0x08a4: 0x34ec, 0x08a5: 0x32d4, 0x08a6: 0x350a, 0x08a7: 0x3315, 0x08a8: 0x350f, 0x08a9: 0x3514, - 0x08aa: 0x3519, 0x08ab: 0x33a1, 0x08ac: 0x33a6, 0x08ad: 0x33c4, 0x08ae: 0x3400, 0x08af: 0x34fb, - 0x08b0: 0x3432, 0x08b1: 0x3505, 0x08b2: 0x351e, 0x08b3: 0x3525, 0x08b4: 0x352c, 0x08b5: 0x3533, - 0x08b6: 0x3538, 0x08b7: 0x353d, 0x08b8: 0x3542, 0x08b9: 0x3547, 0x08ba: 0x354c, 0x08bb: 0x3551, - 0x08bc: 0x3556, 0x08bd: 0x355b, 0x08be: 0x3560, 0x08bf: 0x3565, + 0x0880: 0x11cd, 0x0881: 0x11d1, 0x0882: 0x11e5, 0x0883: 0x11e9, 0x0884: 0x11f1, 0x0885: 0x11f9, + 0x0886: 0x1201, 0x0887: 0x120d, 0x0888: 0x1235, 0x0889: 0x1245, 0x088a: 0x1259, 0x088b: 0x12c9, + 0x088c: 0x12d5, 0x088d: 0x12e5, 0x088e: 0x12f1, 0x088f: 0x12fd, 0x0890: 0x1305, 0x0891: 0x1309, + 0x0892: 0x130d, 0x0893: 0x1311, 0x0894: 0x1315, 0x0895: 0x13cd, 0x0896: 0x1415, 0x0897: 0x1421, + 0x0898: 0x1425, 0x0899: 0x1429, 0x089a: 0x142d, 0x089b: 0x1435, 0x089c: 0x1439, 0x089d: 0x144d, + 0x089e: 0x1469, 0x089f: 0x1471, 0x08a0: 0x14b1, 0x08a1: 0x14b5, 0x08a2: 0x14bd, 0x08a3: 0x14c1, + 0x08a4: 0x14c9, 0x08a5: 0x14cd, 0x08a6: 0x14f1, 0x08a7: 0x14f5, 0x08a8: 0x1511, 0x08a9: 0x1515, + 0x08aa: 0x1519, 0x08ab: 0x151d, 0x08ac: 0x1531, 0x08ad: 0x1555, 0x08ae: 0x1559, 0x08af: 0x155d, + 0x08b0: 0x1581, 0x08b1: 0x15c1, 0x08b2: 0x15c5, 0x08b3: 0x15e5, 0x08b4: 0x15f5, 0x08b5: 0x15fd, + 0x08b6: 0x161d, 0x08b7: 0x1641, 0x08b8: 0x1685, 0x08b9: 0x168d, 0x08ba: 0x16a1, 0x08bb: 0x16ad, + 0x08bc: 0x16b5, 0x08bd: 0x16bd, 0x08be: 0x16c1, 0x08bf: 0x16c5, // Block 0x23, offset 0x8c0 - 0x08c0: 0x16c7, 0x08c1: 0x391e, 0x08c2: 0x3922, 0x08c3: 0x3926, 0x08c4: 0x392a, - 0x08c7: 0x392e, 0x08c8: 0x3930, 0x08c9: 0x146c, 0x08ca: 0x146c, 0x08cb: 0x146c, - 0x08cc: 0x146c, 0x08cd: 0x3900, 0x08ce: 0x3900, 0x08cf: 0x3900, 0x08d0: 0x38e0, 0x08d1: 0x38e2, - 0x08d2: 0x143e, 0x08d4: 0x04e1, 0x08d5: 0x38ea, 0x08d6: 0x38ee, 0x08d7: 0x38ec, - 0x08d8: 0x38f8, 0x08d9: 0x149c, 0x08da: 0x149e, 0x08db: 0x3902, 0x08dc: 0x3904, 0x08dd: 0x3906, - 0x08de: 0x390a, 0x08df: 0x3932, 0x08e0: 0x3934, 0x08e1: 0x3936, 0x08e2: 0x1494, 0x08e3: 0x3938, - 0x08e4: 0x393a, 0x08e5: 0x393c, 0x08e6: 0x149a, 0x08e8: 0x393e, 0x08e9: 0x3940, - 0x08ea: 0x3942, 0x08eb: 0x3944, - 0x08f0: 0x3946, 0x08f1: 0x394a, 0x08f2: 0x394f, 0x08f4: 0x3953, - 0x08f6: 0x3957, 0x08f7: 0x395b, 0x08f8: 0x3960, 0x08f9: 0x3964, 0x08fa: 0x3969, 0x08fb: 0x396d, - 0x08fc: 0x3972, 0x08fd: 0x3976, 0x08fe: 0x397b, 0x08ff: 0x397f, + 0x08c0: 0x16dd, 0x08c1: 0x16e1, 0x08c2: 0x16fd, 0x08c3: 0x1705, 0x08c4: 0x170d, 0x08c5: 0x1711, + 0x08c6: 0x171d, 0x08c7: 0x1725, 0x08c8: 0x1729, 0x08c9: 0x172d, 0x08ca: 0x1735, 0x08cb: 0x1739, + 0x08cc: 0x17d9, 0x08cd: 0x17ed, 0x08ce: 0x1821, 0x08cf: 0x1825, 0x08d0: 0x182d, 0x08d1: 0x1859, + 0x08d2: 0x1861, 0x08d3: 0x1869, 0x08d4: 0x1871, 0x08d5: 0x18ad, 0x08d6: 0x18b1, 0x08d7: 0x18b9, + 0x08d8: 0x18bd, 0x08d9: 0x18c1, 0x08da: 0x18ed, 0x08db: 0x18f1, 0x08dc: 0x18f9, 0x08dd: 0x190d, + 0x08de: 0x1911, 0x08df: 0x192d, 0x08e0: 0x1935, 0x08e1: 0x1939, 0x08e2: 0x195d, 0x08e3: 0x1979, + 0x08e4: 0x1989, 0x08e5: 0x198d, 0x08e6: 0x1995, 0x08e7: 0x19c1, 0x08e8: 0x19c5, 0x08e9: 0x19d5, + 0x08ea: 0x19f9, 0x08eb: 0x1a01, 0x08ec: 0x1a11, 0x08ed: 0x1a29, 0x08ee: 0x1a31, 0x08ef: 0x1a35, + 0x08f0: 0x1a39, 0x08f1: 0x1a3d, 0x08f2: 0x1a49, 0x08f3: 0x1a4d, 0x08f4: 0x1a55, 0x08f5: 0x1a71, + 0x08f6: 0x1a75, 0x08f7: 0x1a79, 0x08f8: 0x1a91, 0x08f9: 0x1a95, 0x08fa: 0x1a9d, 0x08fb: 0x1ab1, + 0x08fc: 0x1ab5, 0x08fd: 0x1ab9, 0x08fe: 0x1ac1, 0x08ff: 0x1ac5, // Block 0x24, offset 0x900 - 0x0900: 0x3984, 0x0901: 0x068d, 0x0902: 0x068d, 0x0903: 0x0692, 0x0904: 0x0692, 0x0905: 0x0697, - 0x0906: 0x0697, 0x0907: 0x069c, 0x0908: 0x069c, 0x0909: 0x06a1, 0x090a: 0x06a1, 0x090b: 0x06a1, - 0x090c: 0x06a1, 0x090d: 0x3987, 0x090e: 0x3987, 0x090f: 0x398a, 0x0910: 0x398a, 0x0911: 0x398a, - 0x0912: 0x398a, 0x0913: 0x398d, 0x0914: 0x398d, 0x0915: 0x3990, 0x0916: 0x3990, 0x0917: 0x3990, - 0x0918: 0x3990, 0x0919: 0x3993, 0x091a: 0x3993, 0x091b: 0x3993, 0x091c: 0x3993, 0x091d: 0x3996, - 0x091e: 0x3996, 0x091f: 0x3996, 0x0920: 0x3996, 0x0921: 0x3999, 0x0922: 0x3999, 0x0923: 0x3999, - 0x0924: 0x3999, 0x0925: 0x399c, 0x0926: 0x399c, 0x0927: 0x399c, 0x0928: 0x399c, 0x0929: 0x399f, - 0x092a: 0x399f, 0x092b: 0x39a2, 0x092c: 0x39a2, 0x092d: 0x39a5, 0x092e: 0x39a5, 0x092f: 0x39a8, - 0x0930: 0x39a8, 0x0931: 0x39ab, 0x0932: 0x39ab, 0x0933: 0x39ab, 0x0934: 0x39ab, 0x0935: 0x39ae, - 0x0936: 0x39ae, 0x0937: 0x39ae, 0x0938: 0x39ae, 0x0939: 0x39b1, 0x093a: 0x39b1, 0x093b: 0x39b1, - 0x093c: 0x39b1, 0x093d: 0x39b4, 0x093e: 0x39b4, 0x093f: 0x39b4, + 0x0906: 0x8800, 0x090b: 0x8800, + 0x090c: 0x3ded, 0x090d: 0x8800, 0x090e: 0x3df5, 0x090f: 0x8800, 0x0910: 0x3dfd, 0x0911: 0x8800, + 0x0912: 0x3e05, 0x0913: 0x8800, 0x0914: 0x3e0d, 0x0915: 0x8800, 0x0916: 0x3e15, 0x0917: 0x8800, + 0x0918: 0x3e1d, 0x0919: 0x8800, 0x091a: 0x3e25, 0x091b: 0x8800, 0x091c: 0x3e2d, 0x091d: 0x8800, + 0x091e: 0x3e35, 0x091f: 0x8800, 0x0920: 0x3e3d, 0x0921: 0x8800, 0x0922: 0x3e45, + 0x0924: 0x8800, 0x0925: 0x3e4d, 0x0926: 0x8800, 0x0927: 0x3e55, 0x0928: 0x8800, 0x0929: 0x3e5d, + 0x092f: 0x8800, + 0x0930: 0x3e65, 0x0931: 0x3e6d, 0x0932: 0x8800, 0x0933: 0x3e75, 0x0934: 0x3e7d, 0x0935: 0x8800, + 0x0936: 0x3e85, 0x0937: 0x3e8d, 0x0938: 0x8800, 0x0939: 0x3e95, 0x093a: 0x3e9d, 0x093b: 0x8800, + 0x093c: 0x3ea5, 0x093d: 0x3ead, // Block 0x25, offset 0x940 - 0x0940: 0x39b4, 0x0941: 0x39b7, 0x0942: 0x39b7, 0x0943: 0x39b7, 0x0944: 0x39b7, 0x0945: 0x39ba, - 0x0946: 0x39ba, 0x0947: 0x39ba, 0x0948: 0x39ba, 0x0949: 0x39bd, 0x094a: 0x39bd, 0x094b: 0x39bd, - 0x094c: 0x39bd, 0x094d: 0x39c0, 0x094e: 0x39c0, 0x094f: 0x39c0, 0x0950: 0x39c0, 0x0951: 0x39c3, - 0x0952: 0x39c3, 0x0953: 0x39c3, 0x0954: 0x39c3, 0x0955: 0x39c6, 0x0956: 0x39c6, 0x0957: 0x39c6, - 0x0958: 0x39c6, 0x0959: 0x39c9, 0x095a: 0x39c9, 0x095b: 0x39c9, 0x095c: 0x39c9, 0x095d: 0x39cc, - 0x095e: 0x39cc, 0x095f: 0x39cc, 0x0960: 0x39cc, 0x0961: 0x39cf, 0x0962: 0x39cf, 0x0963: 0x39cf, - 0x0964: 0x39cf, 0x0965: 0x39d2, 0x0966: 0x39d2, 0x0967: 0x39d2, 0x0968: 0x39d2, 0x0969: 0x39d5, - 0x096a: 0x39d5, 0x096b: 0x39d5, 0x096c: 0x39d5, 0x096d: 0x39d8, 0x096e: 0x39d8, 0x096f: 0x3239, - 0x0970: 0x3239, 0x0971: 0x39db, 0x0972: 0x39db, 0x0973: 0x39db, 0x0974: 0x39db, 0x0975: 0x39de, - 0x0976: 0x39de, 0x0977: 0x39e5, 0x0978: 0x39e5, 0x0979: 0x39ec, 0x097a: 0x39ec, 0x097b: 0x39f3, - 0x097c: 0x39f3, + 0x0954: 0x3de5, + 0x0959: 0x8608, 0x095a: 0x8608, 0x095b: 0x41c8, 0x095c: 0x41ce, 0x095d: 0x8800, + 0x095e: 0x3eb5, 0x095f: 0x2830, + 0x0966: 0x8800, + 0x096b: 0x8800, 0x096c: 0x3ec5, 0x096d: 0x8800, 0x096e: 0x3ecd, 0x096f: 0x8800, + 0x0970: 0x3ed5, 0x0971: 0x8800, 0x0972: 0x3edd, 0x0973: 0x8800, 0x0974: 0x3ee5, 0x0975: 0x8800, + 0x0976: 0x3eed, 0x0977: 0x8800, 0x0978: 0x3ef5, 0x0979: 0x8800, 0x097a: 0x3efd, 0x097b: 0x8800, + 0x097c: 0x3f05, 0x097d: 0x8800, 0x097e: 0x3f0d, 0x097f: 0x8800, // Block 0x26, offset 0x980 - 0x0981: 0x38ec, 0x0982: 0x39f8, 0x0983: 0x3932, 0x0984: 0x3940, 0x0985: 0x3942, - 0x0986: 0x3934, 0x0987: 0x39fa, 0x0988: 0x149c, 0x0989: 0x149e, 0x098a: 0x3936, 0x098b: 0x1494, - 0x098c: 0x38e0, 0x098d: 0x3938, 0x098e: 0x143e, 0x098f: 0x39fc, 0x0990: 0x1486, 0x0991: 0x001c, - 0x0992: 0x000d, 0x0993: 0x000f, 0x0994: 0x1488, 0x0995: 0x148a, 0x0996: 0x148c, 0x0997: 0x148e, - 0x0998: 0x1490, 0x0999: 0x1492, 0x099a: 0x38ea, 0x099b: 0x04e1, 0x099c: 0x393a, 0x099d: 0x149a, - 0x099e: 0x393c, 0x099f: 0x38ee, 0x09a0: 0x3944, 0x09a1: 0x0906, 0x09a2: 0x090b, 0x09a3: 0x14ad, - 0x09a4: 0x090d, 0x09a5: 0x090f, 0x09a6: 0x14d9, 0x09a7: 0x0914, 0x09a8: 0x0916, 0x09a9: 0x0918, - 0x09aa: 0x091a, 0x09ab: 0x091c, 0x09ac: 0x091e, 0x09ad: 0x0920, 0x09ae: 0x0922, 0x09af: 0x0924, - 0x09b0: 0x0929, 0x09b1: 0x14c8, 0x09b2: 0x092b, 0x09b3: 0x17f6, 0x09b4: 0x092d, 0x09b5: 0x092f, - 0x09b6: 0x155f, 0x09b7: 0x0931, 0x09b8: 0x1570, 0x09b9: 0x17f8, 0x09ba: 0x14d4, 0x09bb: 0x392e, - 0x09bc: 0x393e, 0x09bd: 0x3930, 0x09be: 0x39fe, 0x09bf: 0x3900, + 0x0980: 0x3f15, 0x0981: 0x8800, 0x0982: 0x3f1d, 0x0984: 0x8800, 0x0985: 0x3f25, + 0x0986: 0x8800, 0x0987: 0x3f2d, 0x0988: 0x8800, 0x0989: 0x3f35, + 0x098f: 0x8800, 0x0990: 0x3f3d, 0x0991: 0x3f45, + 0x0992: 0x8800, 0x0993: 0x3f4d, 0x0994: 0x3f55, 0x0995: 0x8800, 0x0996: 0x3f5d, 0x0997: 0x3f65, + 0x0998: 0x8800, 0x0999: 0x3f6d, 0x099a: 0x3f75, 0x099b: 0x8800, 0x099c: 0x3f7d, 0x099d: 0x3f85, + 0x09af: 0x8800, + 0x09b0: 0x8800, 0x09b1: 0x8800, 0x09b2: 0x8800, 0x09b4: 0x3ebd, + 0x09b7: 0x3f8d, 0x09b8: 0x3f95, 0x09b9: 0x3f9d, 0x09ba: 0x3fa5, + 0x09bd: 0x8800, 0x09be: 0x3fad, 0x09bf: 0x2845, // Block 0x27, offset 0x9c0 - 0x09c0: 0x13f7, 0x09c1: 0x0007, 0x09c2: 0x093d, 0x09c3: 0x0984, 0x09c4: 0x093f, 0x09c5: 0x0941, - 0x09c6: 0x098c, 0x09c7: 0x094c, 0x09c8: 0x0494, 0x09c9: 0x097c, 0x09ca: 0x0499, 0x09cb: 0x094e, - 0x09cc: 0x04c5, 0x09cd: 0x0950, 0x09ce: 0x14a0, 0x09cf: 0x001e, 0x09d0: 0x0960, 0x09d1: 0x17fa, - 0x09d2: 0x049b, 0x09d3: 0x02c8, 0x09d4: 0x0962, 0x09d5: 0x0964, 0x09d6: 0x096d, 0x09d7: 0x04a6, - 0x09d8: 0x04c7, 0x09d9: 0x04a8, 0x09da: 0x09df, 0x09db: 0x3902, 0x09dc: 0x3a00, 0x09dd: 0x3904, - 0x09de: 0x3a02, 0x09df: 0x3a04, 0x09e0: 0x3a08, 0x09e1: 0x38e6, 0x09e2: 0x391e, 0x09e3: 0x3922, - 0x09e4: 0x38e2, 0x09e5: 0x3a0c, 0x09e6: 0x2321, 0x09e7: 0x3a10, 0x09e8: 0x3a14, 0x09e9: 0x3a18, - 0x09ea: 0x3a1c, 0x09eb: 0x3a20, 0x09ec: 0x3a24, 0x09ed: 0x3a28, 0x09ee: 0x3a2c, 0x09ef: 0x3a30, - 0x09f0: 0x3a34, 0x09f1: 0x2269, 0x09f2: 0x226d, 0x09f3: 0x2271, 0x09f4: 0x2275, 0x09f5: 0x2279, - 0x09f6: 0x227d, 0x09f7: 0x2281, 0x09f8: 0x2285, 0x09f9: 0x2289, 0x09fa: 0x228d, 0x09fb: 0x2291, - 0x09fc: 0x2295, 0x09fd: 0x2299, 0x09fe: 0x229d, 0x09ff: 0x22a1, + 0x09c0: 0x0875, 0x09c1: 0x0879, 0x09c2: 0x0949, 0x09c3: 0x094d, 0x09c4: 0x087d, 0x09c5: 0x0881, + 0x09c6: 0x0885, 0x09c7: 0x08e1, 0x09c8: 0x08e5, 0x09c9: 0x08e9, 0x09ca: 0x08ed, 0x09cb: 0x08f1, + 0x09cc: 0x08f5, 0x09cd: 0x08f9, 0x09ce: 0x08fd, + 0x09d2: 0x0bfd, 0x09d3: 0x0c59, 0x09d4: 0x0c09, 0x09d5: 0x0eb9, 0x09d6: 0x0c0d, 0x09d7: 0x0c25, + 0x09d8: 0x0c11, 0x09d9: 0x14d1, 0x09da: 0x0c45, 0x09db: 0x0c19, 0x09dc: 0x0c01, 0x09dd: 0x0f3d, + 0x09de: 0x0ecd, 0x09df: 0x0c6d, // Block 0x28, offset 0xa00 - 0x0a00: 0x0906, 0x0a01: 0x090b, 0x0a02: 0x14ad, 0x0a03: 0x090d, 0x0a04: 0x090f, 0x0a05: 0x14d9, - 0x0a06: 0x0914, 0x0a07: 0x0916, 0x0a08: 0x0918, 0x0a09: 0x091a, 0x0a0a: 0x091c, 0x0a0b: 0x091e, - 0x0a0c: 0x0920, 0x0a0d: 0x0922, 0x0a0e: 0x0924, 0x0a0f: 0x0929, 0x0a10: 0x14c8, 0x0a11: 0x092b, - 0x0a12: 0x17f6, 0x0a13: 0x092d, 0x0a14: 0x092f, 0x0a15: 0x155f, 0x0a16: 0x0931, 0x0a17: 0x1570, - 0x0a18: 0x17f8, 0x0a19: 0x14d4, 0x0a1a: 0x0007, 0x0a1b: 0x093d, 0x0a1c: 0x0984, 0x0a1d: 0x093f, - 0x0a1e: 0x0941, 0x0a1f: 0x098c, 0x0a20: 0x094c, 0x0a21: 0x0494, 0x0a22: 0x097c, 0x0a23: 0x0499, - 0x0a24: 0x094e, 0x0a25: 0x04c5, 0x0a26: 0x0950, 0x0a27: 0x14a0, 0x0a28: 0x001e, 0x0a29: 0x0960, - 0x0a2a: 0x17fa, 0x0a2b: 0x049b, 0x0a2c: 0x02c8, 0x0a2d: 0x0962, 0x0a2e: 0x0964, 0x0a2f: 0x096d, - 0x0a30: 0x04a6, 0x0a31: 0x04c7, 0x0a32: 0x04a8, 0x0a33: 0x09df, 0x0a34: 0x0906, 0x0a35: 0x090b, - 0x0a36: 0x14ad, 0x0a37: 0x090d, 0x0a38: 0x090f, 0x0a39: 0x14d9, 0x0a3a: 0x0914, 0x0a3b: 0x0916, - 0x0a3c: 0x0918, 0x0a3d: 0x091a, 0x0a3e: 0x091c, 0x0a3f: 0x091e, + 0x0a00: 0x2167, 0x0a01: 0x216d, 0x0a02: 0x2173, 0x0a03: 0x2179, 0x0a04: 0x217f, 0x0a05: 0x2185, + 0x0a06: 0x218b, 0x0a07: 0x2191, 0x0a08: 0x2197, 0x0a09: 0x219d, 0x0a0a: 0x21a3, 0x0a0b: 0x21a9, + 0x0a0c: 0x21af, 0x0a0d: 0x21b5, 0x0a0e: 0x28a2, 0x0a0f: 0x28ab, 0x0a10: 0x28b4, 0x0a11: 0x28bd, + 0x0a12: 0x28c6, 0x0a13: 0x28cf, 0x0a14: 0x28d8, 0x0a15: 0x28e1, 0x0a16: 0x28ea, 0x0a17: 0x28fc, + 0x0a18: 0x2905, 0x0a19: 0x290e, 0x0a1a: 0x2917, 0x0a1b: 0x2920, 0x0a1c: 0x28f3, 0x0a1d: 0x2d45, + 0x0a1e: 0x2c76, 0x0a20: 0x21bb, 0x0a21: 0x21d3, 0x0a22: 0x21c7, 0x0a23: 0x221b, + 0x0a24: 0x21d9, 0x0a25: 0x21f7, 0x0a26: 0x21c1, 0x0a27: 0x21f1, 0x0a28: 0x21cd, 0x0a29: 0x2203, + 0x0a2a: 0x2233, 0x0a2b: 0x2251, 0x0a2c: 0x224b, 0x0a2d: 0x223f, 0x0a2e: 0x228d, 0x0a2f: 0x2221, + 0x0a30: 0x222d, 0x0a31: 0x2245, 0x0a32: 0x2239, 0x0a33: 0x2263, 0x0a34: 0x220f, 0x0a35: 0x2257, + 0x0a36: 0x2281, 0x0a37: 0x2269, 0x0a38: 0x21fd, 0x0a39: 0x21df, 0x0a3a: 0x2215, 0x0a3b: 0x2227, + 0x0a3c: 0x225d, 0x0a3d: 0x21e5, 0x0a3e: 0x2287, 0x0a3f: 0x2209, // Block 0x29, offset 0xa40 - 0x0a40: 0x0920, 0x0a41: 0x0922, 0x0a42: 0x0924, 0x0a43: 0x0929, 0x0a44: 0x14c8, 0x0a45: 0x092b, - 0x0a46: 0x17f6, 0x0a47: 0x092d, 0x0a48: 0x092f, 0x0a49: 0x155f, 0x0a4a: 0x0931, 0x0a4b: 0x1570, - 0x0a4c: 0x17f8, 0x0a4d: 0x14d4, 0x0a4e: 0x0007, 0x0a4f: 0x093d, 0x0a50: 0x0984, 0x0a51: 0x093f, - 0x0a52: 0x0941, 0x0a53: 0x098c, 0x0a54: 0x094c, 0x0a56: 0x097c, 0x0a57: 0x0499, - 0x0a58: 0x094e, 0x0a59: 0x04c5, 0x0a5a: 0x0950, 0x0a5b: 0x14a0, 0x0a5c: 0x001e, 0x0a5d: 0x0960, - 0x0a5e: 0x17fa, 0x0a5f: 0x049b, 0x0a60: 0x02c8, 0x0a61: 0x0962, 0x0a62: 0x0964, 0x0a63: 0x096d, - 0x0a64: 0x04a6, 0x0a65: 0x04c7, 0x0a66: 0x04a8, 0x0a67: 0x09df, 0x0a68: 0x0906, 0x0a69: 0x090b, - 0x0a6a: 0x14ad, 0x0a6b: 0x090d, 0x0a6c: 0x090f, 0x0a6d: 0x14d9, 0x0a6e: 0x0914, 0x0a6f: 0x0916, - 0x0a70: 0x0918, 0x0a71: 0x091a, 0x0a72: 0x091c, 0x0a73: 0x091e, 0x0a74: 0x0920, 0x0a75: 0x0922, - 0x0a76: 0x0924, 0x0a77: 0x0929, 0x0a78: 0x14c8, 0x0a79: 0x092b, 0x0a7a: 0x17f6, 0x0a7b: 0x092d, - 0x0a7c: 0x092f, 0x0a7d: 0x155f, 0x0a7e: 0x0931, 0x0a7f: 0x1570, + 0x0a40: 0x226f, 0x0a41: 0x21eb, 0x0a42: 0x2275, 0x0a43: 0x227b, 0x0a44: 0x0e6d, 0x0a45: 0x1041, + 0x0a46: 0x11e5, 0x0a47: 0x1605, + 0x0a50: 0x0715, 0x0a51: 0x01c9, + 0x0a52: 0x01cc, 0x0a53: 0x01cf, 0x0a54: 0x01d2, 0x0a55: 0x01d5, 0x0a56: 0x01d8, 0x0a57: 0x01db, + 0x0a58: 0x01de, 0x0a59: 0x01e1, 0x0a5a: 0x01ea, 0x0a5b: 0x01ed, 0x0a5c: 0x01f0, 0x0a5d: 0x01f3, + 0x0a5e: 0x01f6, 0x0a5f: 0x01f9, 0x0a60: 0x07d9, 0x0a61: 0x07e1, 0x0a62: 0x07e5, 0x0a63: 0x07ed, + 0x0a64: 0x07f1, 0x0a65: 0x07f5, 0x0a66: 0x07fd, 0x0a67: 0x0805, 0x0a68: 0x0809, 0x0a69: 0x0811, + 0x0a6a: 0x0815, 0x0a6b: 0x0819, 0x0a6c: 0x081d, 0x0a6d: 0x0821, 0x0a6e: 0x27a4, 0x0a6f: 0x27ab, + 0x0a70: 0x27b2, 0x0a71: 0x27b9, 0x0a72: 0x27c0, 0x0a73: 0x27c7, 0x0a74: 0x27ce, 0x0a75: 0x27d5, + 0x0a76: 0x27e3, 0x0a77: 0x27ea, 0x0a78: 0x27f1, 0x0a79: 0x27f8, 0x0a7a: 0x27ff, 0x0a7b: 0x2806, + 0x0a7c: 0x2c95, 0x0a7d: 0x2b0a, 0x0a7e: 0x27dc, // Block 0x2a, offset 0xa80 - 0x0a80: 0x17f8, 0x0a81: 0x14d4, 0x0a82: 0x0007, 0x0a83: 0x093d, 0x0a84: 0x0984, 0x0a85: 0x093f, - 0x0a86: 0x0941, 0x0a87: 0x098c, 0x0a88: 0x094c, 0x0a89: 0x0494, 0x0a8a: 0x097c, 0x0a8b: 0x0499, - 0x0a8c: 0x094e, 0x0a8d: 0x04c5, 0x0a8e: 0x0950, 0x0a8f: 0x14a0, 0x0a90: 0x001e, 0x0a91: 0x0960, - 0x0a92: 0x17fa, 0x0a93: 0x049b, 0x0a94: 0x02c8, 0x0a95: 0x0962, 0x0a96: 0x0964, 0x0a97: 0x096d, - 0x0a98: 0x04a6, 0x0a99: 0x04c7, 0x0a9a: 0x04a8, 0x0a9b: 0x09df, 0x0a9c: 0x0906, - 0x0a9e: 0x14ad, 0x0a9f: 0x090d, 0x0aa2: 0x0914, - 0x0aa5: 0x091a, 0x0aa6: 0x091c, 0x0aa9: 0x0922, - 0x0aaa: 0x0924, 0x0aab: 0x0929, 0x0aac: 0x14c8, 0x0aae: 0x17f6, 0x0aaf: 0x092d, - 0x0ab0: 0x092f, 0x0ab1: 0x155f, 0x0ab2: 0x0931, 0x0ab3: 0x1570, 0x0ab4: 0x17f8, 0x0ab5: 0x14d4, - 0x0ab6: 0x0007, 0x0ab7: 0x093d, 0x0ab8: 0x0984, 0x0ab9: 0x093f, 0x0abb: 0x098c, - 0x0abd: 0x0494, 0x0abe: 0x097c, 0x0abf: 0x0499, + 0x0a80: 0x0bfd, 0x0a81: 0x0c59, 0x0a82: 0x0c09, 0x0a83: 0x0eb9, 0x0a84: 0x0c5d, 0x0a85: 0x0ced, + 0x0a86: 0x0c05, 0x0a87: 0x0ce9, 0x0a88: 0x0c49, 0x0a89: 0x0dc5, 0x0a8a: 0x1245, 0x0a8b: 0x13cd, + 0x0a8c: 0x1315, 0x0a8d: 0x1259, 0x0a8e: 0x1995, 0x0a8f: 0x0ec9, 0x0a90: 0x120d, 0x0a91: 0x1289, + 0x0a92: 0x1249, 0x0a93: 0x1589, 0x0a94: 0x0e39, 0x0a95: 0x1441, 0x0a96: 0x18c5, 0x0a97: 0x159d, + 0x0a98: 0x0d81, 0x0a99: 0x15cd, 0x0a9a: 0x14d9, 0x0a9b: 0x0f55, 0x0a9c: 0x194d, 0x0a9d: 0x0cbd, + 0x0a9e: 0x0de9, 0x0a9f: 0x1335, 0x0aa0: 0x1a59, 0x0aa1: 0x0c81, 0x0aa2: 0x0d11, 0x0aa3: 0x12d9, + 0x0aa4: 0x0c0d, 0x0aa5: 0x0c25, 0x0aa6: 0x0c11, 0x0aa7: 0x1019, 0x0aa8: 0x0e2d, 0x0aa9: 0x0dbd, + 0x0aaa: 0x0f95, 0x0aab: 0x0f89, 0x0aac: 0x1529, 0x0aad: 0x0c7d, 0x0aae: 0x18d9, 0x0aaf: 0x0dd9, + 0x0ab0: 0x0f31, 0x0ab1: 0x01fc, 0x0ab2: 0x01ff, 0x0ab3: 0x0202, 0x0ab4: 0x0205, 0x0ab5: 0x020e, + 0x0ab6: 0x0211, 0x0ab7: 0x0214, 0x0ab8: 0x0217, 0x0ab9: 0x021a, 0x0aba: 0x021d, 0x0abb: 0x0220, + 0x0abc: 0x0223, 0x0abd: 0x0226, 0x0abe: 0x0229, 0x0abf: 0x0232, // Block 0x2b, offset 0xac0 - 0x0ac0: 0x094e, 0x0ac1: 0x04c5, 0x0ac2: 0x0950, 0x0ac3: 0x14a0, 0x0ac5: 0x0960, - 0x0ac6: 0x17fa, 0x0ac7: 0x049b, 0x0ac8: 0x02c8, 0x0ac9: 0x0962, 0x0aca: 0x0964, 0x0acb: 0x096d, - 0x0acc: 0x04a6, 0x0acd: 0x04c7, 0x0ace: 0x04a8, 0x0acf: 0x09df, 0x0ad0: 0x0906, 0x0ad1: 0x090b, - 0x0ad2: 0x14ad, 0x0ad3: 0x090d, 0x0ad4: 0x090f, 0x0ad5: 0x14d9, 0x0ad6: 0x0914, 0x0ad7: 0x0916, - 0x0ad8: 0x0918, 0x0ad9: 0x091a, 0x0ada: 0x091c, 0x0adb: 0x091e, 0x0adc: 0x0920, 0x0add: 0x0922, - 0x0ade: 0x0924, 0x0adf: 0x0929, 0x0ae0: 0x14c8, 0x0ae1: 0x092b, 0x0ae2: 0x17f6, 0x0ae3: 0x092d, - 0x0ae4: 0x092f, 0x0ae5: 0x155f, 0x0ae6: 0x0931, 0x0ae7: 0x1570, 0x0ae8: 0x17f8, 0x0ae9: 0x14d4, - 0x0aea: 0x0007, 0x0aeb: 0x093d, 0x0aec: 0x0984, 0x0aed: 0x093f, 0x0aee: 0x0941, 0x0aef: 0x098c, - 0x0af0: 0x094c, 0x0af1: 0x0494, 0x0af2: 0x097c, 0x0af3: 0x0499, 0x0af4: 0x094e, 0x0af5: 0x04c5, - 0x0af6: 0x0950, 0x0af7: 0x14a0, 0x0af8: 0x001e, 0x0af9: 0x0960, 0x0afa: 0x17fa, 0x0afb: 0x049b, - 0x0afc: 0x02c8, 0x0afd: 0x0962, 0x0afe: 0x0964, 0x0aff: 0x096d, + 0x0ac0: 0x1bb3, 0x0ac1: 0x1bc2, 0x0ac2: 0x1bd1, 0x0ac3: 0x1be0, 0x0ac4: 0x1bef, 0x0ac5: 0x1bfe, + 0x0ac6: 0x1c0d, 0x0ac7: 0x1c1c, 0x0ac8: 0x1c2b, 0x0ac9: 0x229f, 0x0aca: 0x22b1, 0x0acb: 0x22c3, + 0x0acc: 0x0274, 0x0acd: 0x0755, 0x0ace: 0x02ec, 0x0acf: 0x06f9, 0x0ad0: 0x0a09, 0x0ad1: 0x0a11, + 0x0ad2: 0x0a19, 0x0ad3: 0x0a21, 0x0ad4: 0x0a29, 0x0ad5: 0x0a2d, 0x0ad6: 0x0a31, 0x0ad7: 0x0a35, + 0x0ad8: 0x0a39, 0x0ad9: 0x0a3d, 0x0ada: 0x0a41, 0x0adb: 0x0a45, 0x0adc: 0x0a49, 0x0add: 0x0a4d, + 0x0ade: 0x0a51, 0x0adf: 0x0a55, 0x0ae0: 0x0a59, 0x0ae1: 0x0a61, 0x0ae2: 0x0a65, 0x0ae3: 0x0a69, + 0x0ae4: 0x0a6d, 0x0ae5: 0x0a71, 0x0ae6: 0x0a75, 0x0ae7: 0x0a79, 0x0ae8: 0x0a7d, 0x0ae9: 0x0a81, + 0x0aea: 0x0a85, 0x0aeb: 0x0a89, 0x0aec: 0x0a8d, 0x0aed: 0x0a91, 0x0aee: 0x0a95, 0x0aef: 0x0a99, + 0x0af0: 0x0a9d, 0x0af1: 0x0aa1, 0x0af2: 0x0aa5, 0x0af3: 0x0aad, 0x0af4: 0x0ab5, 0x0af5: 0x0abd, + 0x0af6: 0x0ac1, 0x0af7: 0x0ac5, 0x0af8: 0x0ac9, 0x0af9: 0x0acd, 0x0afa: 0x0ad1, 0x0afb: 0x0ad5, + 0x0afc: 0x0ad9, 0x0afd: 0x0add, 0x0afe: 0x0ae1, // Block 0x2c, offset 0xb00 - 0x0b00: 0x04a6, 0x0b01: 0x04c7, 0x0b02: 0x04a8, 0x0b03: 0x09df, 0x0b04: 0x0906, 0x0b05: 0x090b, - 0x0b07: 0x090d, 0x0b08: 0x090f, 0x0b09: 0x14d9, 0x0b0a: 0x0914, - 0x0b0d: 0x091a, 0x0b0e: 0x091c, 0x0b0f: 0x091e, 0x0b10: 0x0920, 0x0b11: 0x0922, - 0x0b12: 0x0924, 0x0b13: 0x0929, 0x0b14: 0x14c8, 0x0b16: 0x17f6, 0x0b17: 0x092d, - 0x0b18: 0x092f, 0x0b19: 0x155f, 0x0b1a: 0x0931, 0x0b1b: 0x1570, 0x0b1c: 0x17f8, - 0x0b1e: 0x0007, 0x0b1f: 0x093d, 0x0b20: 0x0984, 0x0b21: 0x093f, 0x0b22: 0x0941, 0x0b23: 0x098c, - 0x0b24: 0x094c, 0x0b25: 0x0494, 0x0b26: 0x097c, 0x0b27: 0x0499, 0x0b28: 0x094e, 0x0b29: 0x04c5, - 0x0b2a: 0x0950, 0x0b2b: 0x14a0, 0x0b2c: 0x001e, 0x0b2d: 0x0960, 0x0b2e: 0x17fa, 0x0b2f: 0x049b, - 0x0b30: 0x02c8, 0x0b31: 0x0962, 0x0b32: 0x0964, 0x0b33: 0x096d, 0x0b34: 0x04a6, 0x0b35: 0x04c7, - 0x0b36: 0x04a8, 0x0b37: 0x09df, 0x0b38: 0x0906, 0x0b39: 0x090b, 0x0b3b: 0x090d, - 0x0b3c: 0x090f, 0x0b3d: 0x14d9, 0x0b3e: 0x0914, + 0x0b00: 0x2ca5, 0x0b01: 0x2b31, 0x0b02: 0x2cb5, 0x0b03: 0x29fc, 0x0b04: 0x45d3, 0x0b05: 0x2a06, + 0x0b06: 0x2a10, 0x0b07: 0x4617, 0x0b08: 0x2b3e, 0x0b09: 0x2a1a, 0x0b0a: 0x2a24, 0x0b0b: 0x2a2e, + 0x0b0c: 0x2b65, 0x0b0d: 0x2b72, 0x0b0e: 0x2b4b, 0x0b0f: 0x2b58, 0x0b10: 0x452b, 0x0b11: 0x2b7f, + 0x0b12: 0x2b8c, 0x0b13: 0x2d57, 0x0b14: 0x2837, 0x0b15: 0x2d6a, 0x0b16: 0x2d7d, 0x0b17: 0x2cc5, + 0x0b18: 0x2b99, 0x0b19: 0x2d90, 0x0b1a: 0x2da3, 0x0b1b: 0x2ba6, 0x0b1c: 0x2a38, 0x0b1d: 0x2a42, + 0x0b1e: 0x4539, 0x0b1f: 0x2bb3, 0x0b20: 0x2cd5, 0x0b21: 0x45e4, 0x0b22: 0x2a4c, 0x0b23: 0x2a56, + 0x0b24: 0x2bc0, 0x0b25: 0x2a60, 0x0b26: 0x2a6a, 0x0b27: 0x284c, 0x0b28: 0x2853, 0x0b29: 0x2a74, + 0x0b2a: 0x2a7e, 0x0b2b: 0x2db6, 0x0b2c: 0x2bcd, 0x0b2d: 0x2ce5, 0x0b2e: 0x2dc9, 0x0b2f: 0x2bda, + 0x0b30: 0x2a92, 0x0b31: 0x2a88, 0x0b32: 0x462b, 0x0b33: 0x2be7, 0x0b34: 0x2ddc, 0x0b35: 0x2a9c, + 0x0b36: 0x2cf5, 0x0b37: 0x2aa6, 0x0b38: 0x2c01, 0x0b39: 0x2ab0, 0x0b3a: 0x2c0e, 0x0b3b: 0x45f5, + 0x0b3c: 0x2bf4, 0x0b3d: 0x2d05, 0x0b3e: 0x2c1b, 0x0b3f: 0x285a, // Block 0x2d, offset 0xb40 - 0x0b40: 0x0918, 0x0b41: 0x091a, 0x0b42: 0x091c, 0x0b43: 0x091e, 0x0b44: 0x0920, - 0x0b46: 0x0924, 0x0b4a: 0x17f6, 0x0b4b: 0x092d, - 0x0b4c: 0x092f, 0x0b4d: 0x155f, 0x0b4e: 0x0931, 0x0b4f: 0x1570, 0x0b50: 0x17f8, - 0x0b52: 0x0007, 0x0b53: 0x093d, 0x0b54: 0x0984, 0x0b55: 0x093f, 0x0b56: 0x0941, 0x0b57: 0x098c, - 0x0b58: 0x094c, 0x0b59: 0x0494, 0x0b5a: 0x097c, 0x0b5b: 0x0499, 0x0b5c: 0x094e, 0x0b5d: 0x04c5, - 0x0b5e: 0x0950, 0x0b5f: 0x14a0, 0x0b60: 0x001e, 0x0b61: 0x0960, 0x0b62: 0x17fa, 0x0b63: 0x049b, - 0x0b64: 0x02c8, 0x0b65: 0x0962, 0x0b66: 0x0964, 0x0b67: 0x096d, 0x0b68: 0x04a6, 0x0b69: 0x04c7, - 0x0b6a: 0x04a8, 0x0b6b: 0x09df, 0x0b6c: 0x0906, 0x0b6d: 0x090b, 0x0b6e: 0x14ad, 0x0b6f: 0x090d, - 0x0b70: 0x090f, 0x0b71: 0x14d9, 0x0b72: 0x0914, 0x0b73: 0x0916, 0x0b74: 0x0918, 0x0b75: 0x091a, - 0x0b76: 0x091c, 0x0b77: 0x091e, 0x0b78: 0x0920, 0x0b79: 0x0922, 0x0b7a: 0x0924, 0x0b7b: 0x0929, - 0x0b7c: 0x14c8, 0x0b7d: 0x092b, 0x0b7e: 0x17f6, 0x0b7f: 0x092d, + 0x0b40: 0x4606, 0x0b41: 0x2aba, 0x0b42: 0x2ac4, 0x0b43: 0x2c28, 0x0b44: 0x2ace, 0x0b45: 0x2ad8, + 0x0b46: 0x2ae2, 0x0b47: 0x2d15, 0x0b48: 0x2c35, 0x0b49: 0x2861, 0x0b4a: 0x2def, 0x0b4b: 0x4520, + 0x0b4c: 0x2d25, 0x0b4d: 0x2c42, 0x0b4e: 0x4547, 0x0b4f: 0x2aec, 0x0b50: 0x2af6, 0x0b51: 0x2c4f, + 0x0b52: 0x2868, 0x0b53: 0x2c5c, 0x0b54: 0x2d35, 0x0b55: 0x286f, 0x0b56: 0x2e02, 0x0b57: 0x2b00, + 0x0b58: 0x1ba4, 0x0b59: 0x1bb8, 0x0b5a: 0x1bc7, 0x0b5b: 0x1bd6, 0x0b5c: 0x1be5, 0x0b5d: 0x1bf4, + 0x0b5e: 0x1c03, 0x0b5f: 0x1c12, 0x0b60: 0x1c21, 0x0b61: 0x1c30, 0x0b62: 0x22a5, 0x0b63: 0x22b7, + 0x0b64: 0x22c9, 0x0b65: 0x22d5, 0x0b66: 0x22e1, 0x0b67: 0x22ed, 0x0b68: 0x22f9, 0x0b69: 0x2305, + 0x0b6a: 0x2311, 0x0b6b: 0x231d, 0x0b6c: 0x2359, 0x0b6d: 0x2365, 0x0b6e: 0x2371, 0x0b6f: 0x237d, + 0x0b70: 0x2389, 0x0b71: 0x0765, 0x0b72: 0x02e0, 0x0b73: 0x0256, 0x0b74: 0x0735, 0x0b75: 0x0361, + 0x0b76: 0x0370, 0x0b77: 0x02e6, 0x0b78: 0x074d, 0x0b79: 0x0751, 0x0b7a: 0x0280, 0x0b7b: 0x287d, + 0x0b7c: 0x288b, 0x0b7d: 0x2876, 0x0b7e: 0x2884, 0x0b7f: 0x2c69, // Block 0x2e, offset 0xb80 - 0x0b80: 0x092f, 0x0b81: 0x155f, 0x0b82: 0x0931, 0x0b83: 0x1570, 0x0b84: 0x17f8, 0x0b85: 0x14d4, - 0x0b86: 0x0007, 0x0b87: 0x093d, 0x0b88: 0x0984, 0x0b89: 0x093f, 0x0b8a: 0x0941, 0x0b8b: 0x098c, - 0x0b8c: 0x094c, 0x0b8d: 0x0494, 0x0b8e: 0x097c, 0x0b8f: 0x0499, 0x0b90: 0x094e, 0x0b91: 0x04c5, - 0x0b92: 0x0950, 0x0b93: 0x14a0, 0x0b94: 0x001e, 0x0b95: 0x0960, 0x0b96: 0x17fa, 0x0b97: 0x049b, - 0x0b98: 0x02c8, 0x0b99: 0x0962, 0x0b9a: 0x0964, 0x0b9b: 0x096d, 0x0b9c: 0x04a6, 0x0b9d: 0x04c7, - 0x0b9e: 0x04a8, 0x0b9f: 0x09df, 0x0ba0: 0x0906, 0x0ba1: 0x090b, 0x0ba2: 0x14ad, 0x0ba3: 0x090d, - 0x0ba4: 0x090f, 0x0ba5: 0x14d9, 0x0ba6: 0x0914, 0x0ba7: 0x0916, 0x0ba8: 0x0918, 0x0ba9: 0x091a, - 0x0baa: 0x091c, 0x0bab: 0x091e, 0x0bac: 0x0920, 0x0bad: 0x0922, 0x0bae: 0x0924, 0x0baf: 0x0929, - 0x0bb0: 0x14c8, 0x0bb1: 0x092b, 0x0bb2: 0x17f6, 0x0bb3: 0x092d, 0x0bb4: 0x092f, 0x0bb5: 0x155f, - 0x0bb6: 0x0931, 0x0bb7: 0x1570, 0x0bb8: 0x17f8, 0x0bb9: 0x14d4, 0x0bba: 0x0007, 0x0bbb: 0x093d, - 0x0bbc: 0x0984, 0x0bbd: 0x093f, 0x0bbe: 0x0941, 0x0bbf: 0x098c, + 0x0b80: 0x0364, 0x0b81: 0x034c, 0x0b82: 0x07b1, 0x0b83: 0x0334, 0x0b84: 0x030d, 0x0b85: 0x0289, + 0x0b86: 0x0298, 0x0b87: 0x0268, 0x0b88: 0x0741, 0x0b89: 0x1c3f, 0x0b8a: 0x0367, 0x0b8b: 0x034f, + 0x0b8c: 0x07b5, 0x0b8d: 0x07c1, 0x0b8e: 0x0340, 0x0b8f: 0x0316, 0x0b90: 0x0277, 0x0b91: 0x076d, + 0x0b92: 0x0701, 0x0b93: 0x06ed, 0x0b94: 0x071d, 0x0b95: 0x07c5, 0x0b96: 0x0343, 0x0b97: 0x02e3, + 0x0b98: 0x0319, 0x0b99: 0x02f8, 0x0b9a: 0x035b, 0x0b9b: 0x07c9, 0x0b9c: 0x0346, 0x0b9d: 0x02da, + 0x0b9e: 0x031c, 0x0b9f: 0x078d, 0x0ba0: 0x0745, 0x0ba1: 0x032e, 0x0ba2: 0x0775, 0x0ba3: 0x0791, + 0x0ba4: 0x0749, 0x0ba5: 0x0331, 0x0ba6: 0x0779, 0x0ba7: 0x23fb, 0x0ba8: 0x240f, 0x0ba9: 0x02b0, + 0x0baa: 0x0771, 0x0bab: 0x0705, 0x0bac: 0x06f1, 0x0bad: 0x0799, 0x0bae: 0x2892, 0x0baf: 0x2929, + 0x0bb0: 0x0373, 0x0bb1: 0x035e, 0x0bb2: 0x07cd, 0x0bb3: 0x0349, 0x0bb4: 0x036a, 0x0bb5: 0x0352, + 0x0bb6: 0x07b9, 0x0bb7: 0x0337, 0x0bb8: 0x0310, 0x0bb9: 0x029b, 0x0bba: 0x036d, 0x0bbb: 0x0355, + 0x0bbc: 0x07bd, 0x0bbd: 0x033a, 0x0bbe: 0x0313, 0x0bbf: 0x029e, // Block 0x2f, offset 0xbc0 - 0x0bc0: 0x094c, 0x0bc1: 0x0494, 0x0bc2: 0x097c, 0x0bc3: 0x0499, 0x0bc4: 0x094e, 0x0bc5: 0x04c5, - 0x0bc6: 0x0950, 0x0bc7: 0x14a0, 0x0bc8: 0x001e, 0x0bc9: 0x0960, 0x0bca: 0x17fa, 0x0bcb: 0x049b, - 0x0bcc: 0x02c8, 0x0bcd: 0x0962, 0x0bce: 0x0964, 0x0bcf: 0x096d, 0x0bd0: 0x04a6, 0x0bd1: 0x04c7, - 0x0bd2: 0x04a8, 0x0bd3: 0x09df, 0x0bd4: 0x0906, 0x0bd5: 0x090b, 0x0bd6: 0x14ad, 0x0bd7: 0x090d, - 0x0bd8: 0x090f, 0x0bd9: 0x14d9, 0x0bda: 0x0914, 0x0bdb: 0x0916, 0x0bdc: 0x0918, 0x0bdd: 0x091a, - 0x0bde: 0x091c, 0x0bdf: 0x091e, 0x0be0: 0x0920, 0x0be1: 0x0922, 0x0be2: 0x0924, 0x0be3: 0x0929, - 0x0be4: 0x14c8, 0x0be5: 0x092b, 0x0be6: 0x17f6, 0x0be7: 0x092d, 0x0be8: 0x092f, 0x0be9: 0x155f, - 0x0bea: 0x0931, 0x0beb: 0x1570, 0x0bec: 0x17f8, 0x0bed: 0x14d4, 0x0bee: 0x0007, 0x0bef: 0x093d, - 0x0bf0: 0x0984, 0x0bf1: 0x093f, 0x0bf2: 0x0941, 0x0bf3: 0x098c, 0x0bf4: 0x094c, 0x0bf5: 0x0494, - 0x0bf6: 0x097c, 0x0bf7: 0x0499, 0x0bf8: 0x094e, 0x0bf9: 0x04c5, 0x0bfa: 0x0950, 0x0bfb: 0x14a0, - 0x0bfc: 0x001e, 0x0bfd: 0x0960, 0x0bfe: 0x17fa, 0x0bff: 0x049b, + 0x0bc0: 0x077d, 0x0bc1: 0x0709, 0x0bc2: 0x1c3a, 0x0bc3: 0x0259, 0x0bc4: 0x02d4, 0x0bc5: 0x02d7, + 0x0bc6: 0x2408, 0x0bc7: 0x06e5, 0x0bc8: 0x02dd, 0x0bc9: 0x026b, 0x0bca: 0x02fb, 0x0bcb: 0x026e, + 0x0bcc: 0x0304, 0x0bcd: 0x028c, 0x0bce: 0x028f, 0x0bcf: 0x031f, 0x0bd0: 0x0325, 0x0bd1: 0x0328, + 0x0bd2: 0x0781, 0x0bd3: 0x032b, 0x0bd4: 0x033d, 0x0bd5: 0x0789, 0x0bd6: 0x0795, 0x0bd7: 0x02aa, + 0x0bd8: 0x1c44, 0x0bd9: 0x070d, 0x0bda: 0x02ad, 0x0bdb: 0x0376, 0x0bdc: 0x02bf, 0x0bdd: 0x02ce, + 0x0bde: 0x23f5, 0x0bdf: 0x23ef, 0x0be0: 0x1bae, 0x0be1: 0x1bbd, 0x0be2: 0x1bcc, 0x0be3: 0x1bdb, + 0x0be4: 0x1bea, 0x0be5: 0x1bf9, 0x0be6: 0x1c08, 0x0be7: 0x1c17, 0x0be8: 0x1c26, 0x0be9: 0x2299, + 0x0bea: 0x22ab, 0x0beb: 0x22bd, 0x0bec: 0x22cf, 0x0bed: 0x22db, 0x0bee: 0x22e7, 0x0bef: 0x22f3, + 0x0bf0: 0x22ff, 0x0bf1: 0x230b, 0x0bf2: 0x2317, 0x0bf3: 0x2353, 0x0bf4: 0x235f, 0x0bf5: 0x236b, + 0x0bf6: 0x2377, 0x0bf7: 0x2383, 0x0bf8: 0x238f, 0x0bf9: 0x2395, 0x0bfa: 0x239b, 0x0bfb: 0x23a1, + 0x0bfc: 0x23a7, 0x0bfd: 0x23b9, 0x0bfe: 0x23bf, 0x0bff: 0x0761, // Block 0x30, offset 0xc00 - 0x0c00: 0x02c8, 0x0c01: 0x0962, 0x0c02: 0x0964, 0x0c03: 0x096d, 0x0c04: 0x04a6, 0x0c05: 0x04c7, - 0x0c06: 0x04a8, 0x0c07: 0x09df, 0x0c08: 0x0906, 0x0c09: 0x090b, 0x0c0a: 0x14ad, 0x0c0b: 0x090d, - 0x0c0c: 0x090f, 0x0c0d: 0x14d9, 0x0c0e: 0x0914, 0x0c0f: 0x0916, 0x0c10: 0x0918, 0x0c11: 0x091a, - 0x0c12: 0x091c, 0x0c13: 0x091e, 0x0c14: 0x0920, 0x0c15: 0x0922, 0x0c16: 0x0924, 0x0c17: 0x0929, - 0x0c18: 0x14c8, 0x0c19: 0x092b, 0x0c1a: 0x17f6, 0x0c1b: 0x092d, 0x0c1c: 0x092f, 0x0c1d: 0x155f, - 0x0c1e: 0x0931, 0x0c1f: 0x1570, 0x0c20: 0x17f8, 0x0c21: 0x14d4, 0x0c22: 0x0007, 0x0c23: 0x093d, - 0x0c24: 0x0984, 0x0c25: 0x093f, 0x0c26: 0x0941, 0x0c27: 0x098c, 0x0c28: 0x094c, 0x0c29: 0x0494, - 0x0c2a: 0x097c, 0x0c2b: 0x0499, 0x0c2c: 0x094e, 0x0c2d: 0x04c5, 0x0c2e: 0x0950, 0x0c2f: 0x14a0, - 0x0c30: 0x001e, 0x0c31: 0x0960, 0x0c32: 0x17fa, 0x0c33: 0x049b, 0x0c34: 0x02c8, 0x0c35: 0x0962, - 0x0c36: 0x0964, 0x0c37: 0x096d, 0x0c38: 0x04a6, 0x0c39: 0x04c7, 0x0c3a: 0x04a8, 0x0c3b: 0x09df, - 0x0c3c: 0x0906, 0x0c3d: 0x090b, 0x0c3e: 0x14ad, 0x0c3f: 0x090d, + 0x0c00: 0x18b5, 0x0c01: 0x1239, 0x0c02: 0x1911, 0x0c03: 0x18dd, 0x0c04: 0x1395, 0x0c05: 0x0c29, + 0x0c06: 0x0e1d, 0x0c07: 0x1b5d, 0x0c08: 0x1b5d, 0x0c09: 0x0f49, 0x0c0a: 0x1995, 0x0c0b: 0x0e81, + 0x0c0c: 0x0f45, 0x0c0d: 0x112d, 0x0c0e: 0x150d, 0x0c0f: 0x169d, 0x0c10: 0x17d5, 0x0c11: 0x1811, + 0x0c12: 0x1845, 0x0c13: 0x1959, 0x0c14: 0x12b1, 0x0c15: 0x133d, 0x0c16: 0x13e9, 0x0c17: 0x1481, + 0x0c18: 0x179d, 0x0c19: 0x197d, 0x0c1a: 0x1aa5, 0x0c1b: 0x0c4d, 0x0c1c: 0x0df1, 0x0c1d: 0x12c5, + 0x0c1e: 0x140d, 0x0c1f: 0x17d1, 0x0c20: 0x1af5, 0x0c21: 0x0ff1, 0x0c22: 0x13b5, 0x0c23: 0x17c1, + 0x0c24: 0x1855, 0x0c25: 0x1161, 0x0c26: 0x16f9, 0x0c27: 0x181d, 0x0c28: 0x105d, 0x0c29: 0x124d, + 0x0c2a: 0x1355, 0x0c2b: 0x1459, 0x0c2c: 0x1965, 0x0c2d: 0x0c8d, 0x0c2e: 0x0d25, 0x0c2f: 0x0d91, + 0x0c30: 0x11c9, 0x0c31: 0x12bd, 0x0c32: 0x1409, 0x0c33: 0x152d, 0x0c34: 0x16b5, 0x0c35: 0x17c9, + 0x0c36: 0x17e1, 0x0c37: 0x1905, 0x0c38: 0x1a21, 0x0c39: 0x1ad5, 0x0c3a: 0x1af1, 0x0c3b: 0x1569, + 0x0c3c: 0x15a9, 0x0c3d: 0x1661, 0x0c3e: 0x1781, 0x0c3f: 0x19b1, // Block 0x31, offset 0xc40 - 0x0c40: 0x090f, 0x0c41: 0x14d9, 0x0c42: 0x0914, 0x0c43: 0x0916, 0x0c44: 0x0918, 0x0c45: 0x091a, - 0x0c46: 0x091c, 0x0c47: 0x091e, 0x0c48: 0x0920, 0x0c49: 0x0922, 0x0c4a: 0x0924, 0x0c4b: 0x0929, - 0x0c4c: 0x14c8, 0x0c4d: 0x092b, 0x0c4e: 0x17f6, 0x0c4f: 0x092d, 0x0c50: 0x092f, 0x0c51: 0x155f, - 0x0c52: 0x0931, 0x0c53: 0x1570, 0x0c54: 0x17f8, 0x0c55: 0x14d4, 0x0c56: 0x0007, 0x0c57: 0x093d, - 0x0c58: 0x0984, 0x0c59: 0x093f, 0x0c5a: 0x0941, 0x0c5b: 0x098c, 0x0c5c: 0x094c, 0x0c5d: 0x0494, - 0x0c5e: 0x097c, 0x0c5f: 0x0499, 0x0c60: 0x094e, 0x0c61: 0x04c5, 0x0c62: 0x0950, 0x0c63: 0x14a0, - 0x0c64: 0x001e, 0x0c65: 0x0960, 0x0c66: 0x17fa, 0x0c67: 0x049b, 0x0c68: 0x02c8, 0x0c69: 0x0962, - 0x0c6a: 0x0964, 0x0c6b: 0x096d, 0x0c6c: 0x04a6, 0x0c6d: 0x04c7, 0x0c6e: 0x04a8, 0x0c6f: 0x09df, - 0x0c70: 0x0906, 0x0c71: 0x090b, 0x0c72: 0x14ad, 0x0c73: 0x090d, 0x0c74: 0x090f, 0x0c75: 0x14d9, - 0x0c76: 0x0914, 0x0c77: 0x0916, 0x0c78: 0x0918, 0x0c79: 0x091a, 0x0c7a: 0x091c, 0x0c7b: 0x091e, - 0x0c7c: 0x0920, 0x0c7d: 0x0922, 0x0c7e: 0x0924, 0x0c7f: 0x0929, + 0x0c40: 0x1afd, 0x0c41: 0x1889, 0x0c42: 0x0f05, 0x0c43: 0x1079, 0x0c44: 0x1619, 0x0c45: 0x16d9, + 0x0c46: 0x143d, 0x0c47: 0x1571, 0x0c48: 0x18d5, 0x0c49: 0x1a19, 0x0c4a: 0x0f01, 0x0c4b: 0x0fcd, + 0x0c4c: 0x12b5, 0x0c4d: 0x1369, 0x0c4e: 0x139d, 0x0c4f: 0x1651, 0x0c50: 0x1679, 0x0c51: 0x19dd, + 0x0c52: 0x0d8d, 0x0c53: 0x16e5, 0x0c54: 0x0d31, 0x0c55: 0x0d2d, 0x0c56: 0x15d5, 0x0c57: 0x1665, + 0x0c58: 0x1799, 0x0c59: 0x19e5, 0x0c5a: 0x18a5, 0x0c5b: 0x1165, 0x0c5c: 0x12b1, 0x0c5d: 0x1895, + 0x0c5e: 0x0c35, 0x0c5f: 0x0fa1, 0x0c60: 0x10d1, 0x0c61: 0x146d, 0x0c62: 0x14ed, 0x0c63: 0x0db1, + 0x0c64: 0x1579, 0x0c65: 0x0c9d, 0x0c66: 0x10b5, 0x0c67: 0x0c15, 0x0c68: 0x1329, 0x0c69: 0x11e1, + 0x0c6a: 0x164d, 0x0c6b: 0x0e05, 0x0c6c: 0x0ef1, 0x0c6d: 0x1539, 0x0c6e: 0x17a1, 0x0c6f: 0x1879, + 0x0c70: 0x12f5, 0x0c71: 0x1935, 0x0c72: 0x1321, 0x0c73: 0x1175, 0x0c74: 0x1759, 0x0c75: 0x1195, + 0x0c76: 0x14e9, 0x0c77: 0x0c69, 0x0c78: 0x0ce5, 0x0c79: 0x0d29, 0x0c7a: 0x1291, 0x0c7b: 0x1639, + 0x0c7c: 0x1731, 0x0c7d: 0x1885, 0x0c7e: 0x1991, 0x0c7f: 0x0d99, // Block 0x32, offset 0xc80 - 0x0c80: 0x14c8, 0x0c81: 0x092b, 0x0c82: 0x17f6, 0x0c83: 0x092d, 0x0c84: 0x092f, 0x0c85: 0x155f, - 0x0c86: 0x0931, 0x0c87: 0x1570, 0x0c88: 0x17f8, 0x0c89: 0x14d4, 0x0c8a: 0x0007, 0x0c8b: 0x093d, - 0x0c8c: 0x0984, 0x0c8d: 0x093f, 0x0c8e: 0x0941, 0x0c8f: 0x098c, 0x0c90: 0x094c, 0x0c91: 0x0494, - 0x0c92: 0x097c, 0x0c93: 0x0499, 0x0c94: 0x094e, 0x0c95: 0x04c5, 0x0c96: 0x0950, 0x0c97: 0x14a0, - 0x0c98: 0x001e, 0x0c99: 0x0960, 0x0c9a: 0x17fa, 0x0c9b: 0x049b, 0x0c9c: 0x02c8, 0x0c9d: 0x0962, - 0x0c9e: 0x0964, 0x0c9f: 0x096d, 0x0ca0: 0x04a6, 0x0ca1: 0x04c7, 0x0ca2: 0x04a8, 0x0ca3: 0x09df, - 0x0ca4: 0x3b27, 0x0ca5: 0x3b2a, 0x0ca8: 0x3b2d, 0x0ca9: 0x3b30, - 0x0caa: 0x14eb, 0x0cab: 0x3b33, 0x0cac: 0x3b36, 0x0cad: 0x3b39, 0x0cae: 0x3b3c, 0x0caf: 0x057b, - 0x0cb0: 0x3b3f, 0x0cb1: 0x3b42, 0x0cb2: 0x3b45, 0x0cb3: 0x3b48, 0x0cb4: 0x3b4b, 0x0cb5: 0x3b4e, - 0x0cb6: 0x3b51, 0x0cb7: 0x14ee, 0x0cb8: 0x3b54, 0x0cb9: 0x057b, 0x0cba: 0x0581, 0x0cbb: 0x3b57, - 0x0cbc: 0x055f, 0x0cbd: 0x3b5a, 0x0cbe: 0x3b5d, 0x0cbf: 0x3b60, + 0x0c80: 0x0e4d, 0x0c81: 0x0f55, 0x0c82: 0x106d, 0x0c83: 0x11fd, 0x0c84: 0x13b9, 0x0c85: 0x157d, + 0x0c86: 0x19cd, 0x0c87: 0x1aad, 0x0c88: 0x1b01, 0x0c89: 0x1b19, 0x0c8a: 0x0d75, 0x0c8b: 0x1231, + 0x0c8c: 0x12e1, 0x0c8d: 0x1929, 0x0c8e: 0x1039, 0x0c8f: 0x1115, 0x0c90: 0x1131, 0x0c91: 0x11c1, + 0x0c92: 0x13a9, 0x0c93: 0x13f5, 0x0c94: 0x14a5, 0x0c95: 0x15c9, 0x0c96: 0x166d, 0x0c97: 0x16d1, + 0x0c98: 0x1919, 0x0c99: 0x17a9, 0x0c9a: 0x1941, 0x0c9b: 0x19b5, 0x0c9c: 0x0d4d, 0x0c9d: 0x0d79, + 0x0c9e: 0x0e61, 0x0c9f: 0x13e5, 0x0ca0: 0x1831, 0x0ca1: 0x1879, 0x0ca2: 0x1059, 0x0ca3: 0x10c9, + 0x0ca4: 0x118d, 0x0ca5: 0x12ed, 0x0ca6: 0x1615, 0x0ca7: 0x1461, 0x0ca8: 0x0c79, 0x0ca9: 0x0ebd, + 0x0caa: 0x0fa1, 0x0cab: 0x1005, 0x0cac: 0x10d5, 0x0cad: 0x147d, 0x0cae: 0x1499, 0x0caf: 0x16a9, + 0x0cb0: 0x16c9, 0x0cb1: 0x1999, 0x0cb2: 0x1a15, 0x0cb3: 0x1a25, 0x0cb4: 0x1a61, 0x0cb5: 0x0c91, + 0x0cb6: 0x15bd, 0x0cb7: 0x1985, 0x0cb8: 0x19fd, 0x0cb9: 0x10ed, 0x0cba: 0x0c55, 0x0cbb: 0x0cb5, + 0x0cbc: 0x0fa5, 0x0cbd: 0x0fc5, 0x0cbe: 0x11ed, 0x0cbf: 0x12b1, // Block 0x33, offset 0xcc0 - 0x0cc0: 0x14d6, 0x0cc1: 0x3b63, 0x0cc2: 0x3b67, 0x0cc3: 0x0559, 0x0cc4: 0x0973, 0x0cc5: 0x0976, - 0x0cc6: 0x057e, 0x0cc7: 0x3b6a, 0x0cc8: 0x3b6d, 0x0cc9: 0x055c, 0x0cca: 0x12fd, 0x0ccb: 0x0572, - 0x0ccc: 0x3b70, 0x0ccd: 0x0015, 0x0cce: 0x3b73, 0x0ccf: 0x3b76, 0x0cd0: 0x3b79, 0x0cd1: 0x056f, - 0x0cd2: 0x0575, 0x0cd3: 0x0578, 0x0cd4: 0x3b7c, 0x0cd5: 0x3b7f, 0x0cd6: 0x3b82, 0x0cd7: 0x056c, - 0x0cd8: 0x0979, 0x0cd9: 0x3b85, 0x0cda: 0x3b88, 0x0cdb: 0x3b8b, 0x0cdc: 0x057e, 0x0cdd: 0x055c, - 0x0cde: 0x0572, 0x0cdf: 0x056c, 0x0ce0: 0x0575, 0x0ce1: 0x056f, 0x0ce2: 0x3b2d, 0x0ce3: 0x3b30, - 0x0ce4: 0x14eb, 0x0ce5: 0x3b33, 0x0ce6: 0x3b36, 0x0ce7: 0x3b39, 0x0ce8: 0x3b3c, 0x0ce9: 0x057b, - 0x0cea: 0x3b3f, 0x0ceb: 0x3b42, 0x0cec: 0x3b45, 0x0ced: 0x3b48, 0x0cee: 0x3b4b, 0x0cef: 0x3b4e, - 0x0cf0: 0x3b51, 0x0cf1: 0x14ee, 0x0cf2: 0x3b54, 0x0cf3: 0x057b, 0x0cf4: 0x0581, 0x0cf5: 0x3b57, - 0x0cf6: 0x055f, 0x0cf7: 0x3b5a, 0x0cf8: 0x3b5d, 0x0cf9: 0x3b60, 0x0cfa: 0x14d6, 0x0cfb: 0x3b63, - 0x0cfc: 0x3b67, 0x0cfd: 0x0559, 0x0cfe: 0x0973, 0x0cff: 0x0976, + 0x0cc0: 0x1401, 0x0cc1: 0x1509, 0x0cc2: 0x17b5, 0x0cc3: 0x1955, 0x0cc4: 0x1b55, 0x0cc5: 0x1221, + 0x0cc6: 0x19d9, 0x0cc7: 0x0d71, 0x0cc8: 0x126d, 0x0cc9: 0x1279, 0x0cca: 0x134d, 0x0ccb: 0x1385, + 0x0ccc: 0x1489, 0x0ccd: 0x14e5, 0x0cce: 0x1565, 0x0ccf: 0x1649, 0x0cd0: 0x1a6d, 0x0cd1: 0x0ced, + 0x0cd2: 0x1141, 0x0cd3: 0x19e9, 0x0cd4: 0x0ca5, 0x0cd5: 0x0fe9, 0x0cd6: 0x136d, 0x0cd7: 0x191d, + 0x0cd8: 0x10a5, 0x0cd9: 0x10f5, 0x0cda: 0x1281, 0x0cdb: 0x146d, 0x0cdc: 0x19f1, 0x0cdd: 0x0d55, + 0x0cde: 0x0e3d, 0x0cdf: 0x0fd5, 0x0ce0: 0x1211, 0x0ce1: 0x125d, 0x0ce2: 0x129d, 0x0ce3: 0x1331, + 0x0ce4: 0x1485, 0x0ce5: 0x14f9, 0x0ce6: 0x1695, 0x0ce7: 0x1835, 0x0ce8: 0x1841, 0x0ce9: 0x198d, + 0x0cea: 0x1a09, 0x0ceb: 0x0dc1, 0x0cec: 0x1389, 0x0ced: 0x0e41, 0x0cee: 0x1405, 0x0cef: 0x14a9, + 0x0cf0: 0x17c5, 0x0cf1: 0x19f5, 0x0cf2: 0x1add, 0x0cf3: 0x1b05, 0x0cf4: 0x1275, 0x0cf5: 0x1365, + 0x0cf6: 0x1701, 0x0cf7: 0x15f5, 0x0cf8: 0x1601, 0x0cf9: 0x1625, 0x0cfa: 0x1455, 0x0cfb: 0x13dd, + 0x0cfc: 0x18a1, 0x0cfd: 0x0c71, 0x0cfe: 0x1769, 0x0cff: 0x0d59, // Block 0x34, offset 0xd00 - 0x0d00: 0x057e, 0x0d01: 0x3b6a, 0x0d02: 0x3b6d, 0x0d03: 0x055c, 0x0d04: 0x12fd, 0x0d05: 0x0572, - 0x0d06: 0x3b70, 0x0d07: 0x0015, 0x0d08: 0x3b73, 0x0d09: 0x3b76, 0x0d0a: 0x3b79, 0x0d0b: 0x056f, - 0x0d0c: 0x0575, 0x0d0d: 0x0578, 0x0d0e: 0x3b7c, 0x0d0f: 0x3b7f, 0x0d10: 0x3b82, 0x0d11: 0x056c, - 0x0d12: 0x0979, 0x0d13: 0x3b85, 0x0d14: 0x3b88, 0x0d15: 0x3b8b, 0x0d16: 0x057e, 0x0d17: 0x055c, - 0x0d18: 0x0572, 0x0d19: 0x056c, 0x0d1a: 0x0575, 0x0d1b: 0x056f, 0x0d1c: 0x3b2d, 0x0d1d: 0x3b30, - 0x0d1e: 0x14eb, 0x0d1f: 0x3b33, 0x0d20: 0x3b36, 0x0d21: 0x3b39, 0x0d22: 0x3b3c, 0x0d23: 0x057b, - 0x0d24: 0x3b3f, 0x0d25: 0x3b42, 0x0d26: 0x3b45, 0x0d27: 0x3b48, 0x0d28: 0x3b4b, 0x0d29: 0x3b4e, - 0x0d2a: 0x3b51, 0x0d2b: 0x14ee, 0x0d2c: 0x3b54, 0x0d2d: 0x057b, 0x0d2e: 0x0581, 0x0d2f: 0x3b57, - 0x0d30: 0x055f, 0x0d31: 0x3b5a, 0x0d32: 0x3b5d, 0x0d33: 0x3b60, 0x0d34: 0x14d6, 0x0d35: 0x3b63, - 0x0d36: 0x3b67, 0x0d37: 0x0559, 0x0d38: 0x0973, 0x0d39: 0x0976, 0x0d3a: 0x057e, 0x0d3b: 0x3b6a, - 0x0d3c: 0x3b6d, 0x0d3d: 0x055c, 0x0d3e: 0x12fd, 0x0d3f: 0x0572, + 0x0d00: 0x0d49, 0x0d01: 0x1049, 0x0d02: 0x1169, 0x0d03: 0x1631, 0x0d04: 0x0f91, 0x0d05: 0x1341, + 0x0d06: 0x122d, 0x0d07: 0x1925, 0x0d08: 0x1825, 0x0d09: 0x19e1, 0x0d0a: 0x1861, 0x0d0b: 0x1065, + 0x0d0c: 0x0cc5, 0x0d0d: 0x0e99, 0x0d10: 0x0eed, + 0x0d12: 0x121d, 0x0d15: 0x0d35, 0x0d16: 0x145d, 0x0d17: 0x1521, + 0x0d18: 0x1585, 0x0d19: 0x15a1, 0x0d1a: 0x15a5, 0x0d1b: 0x15b9, 0x0d1c: 0x1a2d, 0x0d1d: 0x1629, + 0x0d1e: 0x16ad, 0x0d20: 0x17cd, 0x0d22: 0x1891, + 0x0d25: 0x1945, 0x0d26: 0x196d, + 0x0d2a: 0x1a81, 0x0d2b: 0x1a85, 0x0d2c: 0x1a89, 0x0d2d: 0x1aed, + 0x0d30: 0x0c95, 0x0d31: 0x0cb9, 0x0d32: 0x0ccd, 0x0d33: 0x0d89, 0x0d34: 0x0d95, 0x0d35: 0x0dd5, + 0x0d36: 0x0e89, 0x0d37: 0x0ea5, 0x0d38: 0x0ead, 0x0d39: 0x0ee9, 0x0d3a: 0x0ef5, 0x0d3b: 0x0fd1, + 0x0d3c: 0x0fd9, 0x0d3d: 0x10e1, 0x0d3e: 0x1109, 0x0d3f: 0x1111, // Block 0x35, offset 0xd40 - 0x0d40: 0x3b70, 0x0d41: 0x0015, 0x0d42: 0x3b73, 0x0d43: 0x3b76, 0x0d44: 0x3b79, 0x0d45: 0x056f, - 0x0d46: 0x0575, 0x0d47: 0x0578, 0x0d48: 0x3b7c, 0x0d49: 0x3b7f, 0x0d4a: 0x3b82, 0x0d4b: 0x056c, - 0x0d4c: 0x0979, 0x0d4d: 0x3b85, 0x0d4e: 0x3b88, 0x0d4f: 0x3b8b, 0x0d50: 0x057e, 0x0d51: 0x055c, - 0x0d52: 0x0572, 0x0d53: 0x056c, 0x0d54: 0x0575, 0x0d55: 0x056f, 0x0d56: 0x3b2d, 0x0d57: 0x3b30, - 0x0d58: 0x14eb, 0x0d59: 0x3b33, 0x0d5a: 0x3b36, 0x0d5b: 0x3b39, 0x0d5c: 0x3b3c, 0x0d5d: 0x057b, - 0x0d5e: 0x3b3f, 0x0d5f: 0x3b42, 0x0d60: 0x3b45, 0x0d61: 0x3b48, 0x0d62: 0x3b4b, 0x0d63: 0x3b4e, - 0x0d64: 0x3b51, 0x0d65: 0x14ee, 0x0d66: 0x3b54, 0x0d67: 0x057b, 0x0d68: 0x0581, 0x0d69: 0x3b57, - 0x0d6a: 0x055f, 0x0d6b: 0x3b5a, 0x0d6c: 0x3b5d, 0x0d6d: 0x3b60, 0x0d6e: 0x14d6, 0x0d6f: 0x3b63, - 0x0d70: 0x3b67, 0x0d71: 0x0559, 0x0d72: 0x0973, 0x0d73: 0x0976, 0x0d74: 0x057e, 0x0d75: 0x3b6a, - 0x0d76: 0x3b6d, 0x0d77: 0x055c, 0x0d78: 0x12fd, 0x0d79: 0x0572, 0x0d7a: 0x3b70, 0x0d7b: 0x0015, - 0x0d7c: 0x3b73, 0x0d7d: 0x3b76, 0x0d7e: 0x3b79, 0x0d7f: 0x056f, + 0x0d40: 0x1129, 0x0d41: 0x11d5, 0x0d42: 0x1205, 0x0d43: 0x1225, 0x0d44: 0x1295, 0x0d45: 0x1359, + 0x0d46: 0x1375, 0x0d47: 0x13a5, 0x0d48: 0x13f9, 0x0d49: 0x1419, 0x0d4a: 0x148d, 0x0d4b: 0x156d, + 0x0d4c: 0x1589, 0x0d4d: 0x1591, 0x0d4e: 0x158d, 0x0d4f: 0x1595, 0x0d50: 0x1599, 0x0d51: 0x159d, + 0x0d52: 0x15b1, 0x0d53: 0x15b5, 0x0d54: 0x15d9, 0x0d55: 0x15ed, 0x0d56: 0x1609, 0x0d57: 0x166d, + 0x0d58: 0x1675, 0x0d59: 0x167d, 0x0d5a: 0x1691, 0x0d5b: 0x16b9, 0x0d5c: 0x1709, 0x0d5d: 0x173d, + 0x0d5e: 0x173d, 0x0d5f: 0x17a5, 0x0d60: 0x184d, 0x0d61: 0x1865, 0x0d62: 0x1899, 0x0d63: 0x189d, + 0x0d64: 0x18e1, 0x0d65: 0x18e5, 0x0d66: 0x193d, 0x0d67: 0x1945, 0x0d68: 0x1a0d, 0x0d69: 0x1a51, + 0x0d6a: 0x1a69, 0x0d6b: 0x10d9, 0x0d6c: 0x2018, 0x0d6d: 0x1721, + 0x0d70: 0x0c1d, 0x0d71: 0x0d21, 0x0d72: 0x0ce1, 0x0d73: 0x0c89, 0x0d74: 0x0cc9, 0x0d75: 0x0cf5, + 0x0d76: 0x0d85, 0x0d77: 0x0da1, 0x0d78: 0x0e89, 0x0d79: 0x0e75, 0x0d7a: 0x0e85, 0x0d7b: 0x0ea1, + 0x0d7c: 0x0eed, 0x0d7d: 0x0efd, 0x0d7e: 0x0f41, 0x0d7f: 0x0f4d, // Block 0x36, offset 0xd80 - 0x0d80: 0x0575, 0x0d81: 0x0578, 0x0d82: 0x3b7c, 0x0d83: 0x3b7f, 0x0d84: 0x3b82, 0x0d85: 0x056c, - 0x0d86: 0x0979, 0x0d87: 0x3b85, 0x0d88: 0x3b88, 0x0d89: 0x3b8b, 0x0d8a: 0x057e, 0x0d8b: 0x055c, - 0x0d8c: 0x0572, 0x0d8d: 0x056c, 0x0d8e: 0x0575, 0x0d8f: 0x056f, 0x0d90: 0x3b2d, 0x0d91: 0x3b30, - 0x0d92: 0x14eb, 0x0d93: 0x3b33, 0x0d94: 0x3b36, 0x0d95: 0x3b39, 0x0d96: 0x3b3c, 0x0d97: 0x057b, - 0x0d98: 0x3b3f, 0x0d99: 0x3b42, 0x0d9a: 0x3b45, 0x0d9b: 0x3b48, 0x0d9c: 0x3b4b, 0x0d9d: 0x3b4e, - 0x0d9e: 0x3b51, 0x0d9f: 0x14ee, 0x0da0: 0x3b54, 0x0da1: 0x057b, 0x0da2: 0x0581, 0x0da3: 0x3b57, - 0x0da4: 0x055f, 0x0da5: 0x3b5a, 0x0da6: 0x3b5d, 0x0da7: 0x3b60, 0x0da8: 0x14d6, 0x0da9: 0x3b63, - 0x0daa: 0x3b67, 0x0dab: 0x0559, 0x0dac: 0x0973, 0x0dad: 0x0976, 0x0dae: 0x057e, 0x0daf: 0x3b6a, - 0x0db0: 0x3b6d, 0x0db1: 0x055c, 0x0db2: 0x12fd, 0x0db3: 0x0572, 0x0db4: 0x3b70, 0x0db5: 0x0015, - 0x0db6: 0x3b73, 0x0db7: 0x3b76, 0x0db8: 0x3b79, 0x0db9: 0x056f, 0x0dba: 0x0575, 0x0dbb: 0x0578, - 0x0dbc: 0x3b7c, 0x0dbd: 0x3b7f, 0x0dbe: 0x3b82, 0x0dbf: 0x056c, + 0x0d80: 0x0f69, 0x0d81: 0x0f79, 0x0d82: 0x1061, 0x0d83: 0x1069, 0x0d84: 0x1099, 0x0d85: 0x10b9, + 0x0d86: 0x10e9, 0x0d87: 0x1101, 0x0d88: 0x10f1, 0x0d89: 0x1111, 0x0d8a: 0x1105, 0x0d8b: 0x1129, + 0x0d8c: 0x1145, 0x0d8d: 0x119d, 0x0d8e: 0x11a9, 0x0d8f: 0x11b1, 0x0d90: 0x11d9, 0x0d91: 0x121d, + 0x0d92: 0x124d, 0x0d93: 0x1251, 0x0d94: 0x1265, 0x0d95: 0x12e5, 0x0d96: 0x12f5, 0x0d97: 0x134d, + 0x0d98: 0x1399, 0x0d99: 0x1391, 0x0d9a: 0x13a5, 0x0d9b: 0x13c1, 0x0d9c: 0x13f9, 0x0d9d: 0x1551, + 0x0d9e: 0x141d, 0x0d9f: 0x1451, 0x0da0: 0x145d, 0x0da1: 0x149d, 0x0da2: 0x14b9, 0x0da3: 0x14dd, + 0x0da4: 0x1501, 0x0da5: 0x1505, 0x0da6: 0x1521, 0x0da7: 0x1525, 0x0da8: 0x1535, 0x0da9: 0x1549, + 0x0daa: 0x1545, 0x0dab: 0x1575, 0x0dac: 0x15f1, 0x0dad: 0x1609, 0x0dae: 0x1621, 0x0daf: 0x1659, + 0x0db0: 0x166d, 0x0db1: 0x1689, 0x0db2: 0x16b9, 0x0db3: 0x176d, 0x0db4: 0x1795, 0x0db5: 0x1809, + 0x0db6: 0x1851, 0x0db7: 0x185d, 0x0db8: 0x1865, 0x0db9: 0x187d, 0x0dba: 0x1891, 0x0dbb: 0x1881, + 0x0dbc: 0x1899, 0x0dbd: 0x1895, 0x0dbe: 0x188d, 0x0dbf: 0x189d, // Block 0x37, offset 0xdc0 - 0x0dc0: 0x0979, 0x0dc1: 0x3b85, 0x0dc2: 0x3b88, 0x0dc3: 0x3b8b, 0x0dc4: 0x057e, 0x0dc5: 0x055c, - 0x0dc6: 0x0572, 0x0dc7: 0x056c, 0x0dc8: 0x0575, 0x0dc9: 0x056f, 0x0dca: 0x3b8f, 0x0dcb: 0x3b92, - 0x0dce: 0x1486, 0x0dcf: 0x001c, 0x0dd0: 0x000d, 0x0dd1: 0x000f, - 0x0dd2: 0x1488, 0x0dd3: 0x148a, 0x0dd4: 0x148c, 0x0dd5: 0x148e, 0x0dd6: 0x1490, 0x0dd7: 0x1492, - 0x0dd8: 0x1486, 0x0dd9: 0x001c, 0x0dda: 0x000d, 0x0ddb: 0x000f, 0x0ddc: 0x1488, 0x0ddd: 0x148a, - 0x0dde: 0x148c, 0x0ddf: 0x148e, 0x0de0: 0x1490, 0x0de1: 0x1492, 0x0de2: 0x1486, 0x0de3: 0x001c, - 0x0de4: 0x000d, 0x0de5: 0x000f, 0x0de6: 0x1488, 0x0de7: 0x148a, 0x0de8: 0x148c, 0x0de9: 0x148e, - 0x0dea: 0x1490, 0x0deb: 0x1492, 0x0dec: 0x1486, 0x0ded: 0x001c, 0x0dee: 0x000d, 0x0def: 0x000f, - 0x0df0: 0x1488, 0x0df1: 0x148a, 0x0df2: 0x148c, 0x0df3: 0x148e, 0x0df4: 0x1490, 0x0df5: 0x1492, - 0x0df6: 0x1486, 0x0df7: 0x001c, 0x0df8: 0x000d, 0x0df9: 0x000f, 0x0dfa: 0x1488, 0x0dfb: 0x148a, - 0x0dfc: 0x148c, 0x0dfd: 0x148e, 0x0dfe: 0x1490, 0x0dff: 0x1492, + 0x0dc0: 0x18a9, 0x0dc1: 0x18e5, 0x0dc2: 0x1921, 0x0dc3: 0x1951, 0x0dc4: 0x1981, 0x0dc5: 0x19a1, + 0x0dc6: 0x19ed, 0x0dc7: 0x1a0d, 0x0dc8: 0x1a2d, 0x0dc9: 0x1a41, 0x0dca: 0x1a51, 0x0dcb: 0x1a5d, + 0x0dcc: 0x1a69, 0x0dcd: 0x1abd, 0x0dce: 0x1b5d, 0x0dcf: 0x1faf, 0x0dd0: 0x1faa, 0x0dd1: 0x1fdc, + 0x0dd2: 0x0b45, 0x0dd3: 0x0b6d, 0x0dd4: 0x0b71, 0x0dd5: 0x205e, 0x0dd6: 0x208b, 0x0dd7: 0x2103, + 0x0dd8: 0x1b49, 0x0dd9: 0x1b59, // Block 0x38, offset 0xe00 - 0x0e00: 0x3b95, 0x0e01: 0x3b98, 0x0e02: 0x3b9b, 0x0e03: 0x3b9e, 0x0e04: 0x3ba1, 0x0e05: 0x3ba4, - 0x0e06: 0x3ba7, 0x0e07: 0x3baa, 0x0e08: 0x3bad, 0x0e09: 0x3bb0, 0x0e0a: 0x3bb3, - 0x0e10: 0x3bb6, 0x0e11: 0x3bba, - 0x0e12: 0x3bbe, 0x0e13: 0x3bc2, 0x0e14: 0x3bc6, 0x0e15: 0x3bca, 0x0e16: 0x3bce, 0x0e17: 0x3bd2, - 0x0e18: 0x3bd6, 0x0e19: 0x3bda, 0x0e1a: 0x3bde, 0x0e1b: 0x3be2, 0x0e1c: 0x3be6, 0x0e1d: 0x3bea, - 0x0e1e: 0x3bee, 0x0e1f: 0x3bf2, 0x0e20: 0x3bf6, 0x0e21: 0x3bfa, 0x0e22: 0x3bfe, 0x0e23: 0x3c02, - 0x0e24: 0x3c06, 0x0e25: 0x3c0a, 0x0e26: 0x3c0e, 0x0e27: 0x3c12, 0x0e28: 0x3c16, 0x0e29: 0x3c1a, - 0x0e2a: 0x3c1e, 0x0e2b: 0x14ad, 0x0e2c: 0x092b, 0x0e2d: 0x3c26, 0x0e2e: 0x3c29, - 0x0e30: 0x0906, 0x0e31: 0x090b, 0x0e32: 0x14ad, 0x0e33: 0x090d, 0x0e34: 0x090f, 0x0e35: 0x14d9, - 0x0e36: 0x0914, 0x0e37: 0x0916, 0x0e38: 0x0918, 0x0e39: 0x091a, 0x0e3a: 0x091c, 0x0e3b: 0x091e, - 0x0e3c: 0x0920, 0x0e3d: 0x0922, 0x0e3e: 0x0924, 0x0e3f: 0x0929, + 0x0e00: 0x02ef, 0x0e01: 0x02f2, 0x0e02: 0x02f5, 0x0e03: 0x0759, 0x0e04: 0x075d, 0x0e05: 0x0379, + 0x0e06: 0x0379, + 0x0e13: 0x1c62, 0x0e14: 0x1c53, 0x0e15: 0x1c58, 0x0e16: 0x1c67, 0x0e17: 0x1c5d, + 0x0e1d: 0x428e, + 0x0e1e: 0x801a, 0x0e1f: 0x4300, 0x0e20: 0x04e4, 0x0e21: 0x04cc, 0x0e22: 0x04d5, 0x0e23: 0x04d8, + 0x0e24: 0x04db, 0x0e25: 0x04de, 0x0e26: 0x04e1, 0x0e27: 0x04e7, 0x0e28: 0x04ea, 0x0e29: 0x00e5, + 0x0e2a: 0x42ee, 0x0e2b: 0x42f4, 0x0e2c: 0x43f2, 0x0e2d: 0x43fa, 0x0e2e: 0x4246, 0x0e2f: 0x424c, + 0x0e30: 0x4252, 0x0e31: 0x4258, 0x0e32: 0x4264, 0x0e33: 0x426a, 0x0e34: 0x4270, 0x0e35: 0x427c, + 0x0e36: 0x4282, 0x0e38: 0x4288, 0x0e39: 0x4294, 0x0e3a: 0x429a, 0x0e3b: 0x42a0, + 0x0e3c: 0x42ac, 0x0e3e: 0x42b2, // Block 0x39, offset 0xe40 - 0x0e40: 0x3c3f, 0x0e41: 0x3c46, 0x0e42: 0x2291, - 0x0e50: 0x1922, 0x0e51: 0x3c4d, - 0x0e52: 0x3c51, 0x0e53: 0x1cb3, 0x0e54: 0x183e, 0x0e55: 0x3c55, 0x0e56: 0x3c59, 0x0e57: 0x1ed0, - 0x0e58: 0x3c5d, 0x0e59: 0x3c61, 0x0e5a: 0x3c65, 0x0e5b: 0x2d49, 0x0e5c: 0x3c69, 0x0e5d: 0x3c6d, - 0x0e5e: 0x3c71, 0x0e5f: 0x3c75, 0x0e60: 0x3c79, 0x0e61: 0x3c7d, 0x0e62: 0x19b2, 0x0e63: 0x3c81, - 0x0e64: 0x3c85, 0x0e65: 0x3c89, 0x0e66: 0x3c8d, 0x0e67: 0x3c91, 0x0e68: 0x3c95, 0x0e69: 0x1826, - 0x0e6a: 0x1eb0, 0x0e6b: 0x3c99, 0x0e6c: 0x21c7, 0x0e6d: 0x1ebc, 0x0e6e: 0x21cb, 0x0e6f: 0x3c9d, - 0x0e70: 0x1a92, 0x0e71: 0x3ca1, 0x0e72: 0x3ca5, 0x0e73: 0x3ca9, 0x0e74: 0x3cad, 0x0e75: 0x3cb1, - 0x0e76: 0x2183, 0x0e77: 0x194a, 0x0e78: 0x3cb5, 0x0e79: 0x3cb9, 0x0e7a: 0x3cbd, + 0x0e40: 0x42b8, 0x0e41: 0x42be, 0x0e43: 0x42c4, 0x0e44: 0x42ca, + 0x0e46: 0x42d6, 0x0e47: 0x42dc, 0x0e48: 0x42e2, 0x0e49: 0x42e8, 0x0e4a: 0x42fa, 0x0e4b: 0x4276, + 0x0e4c: 0x425e, 0x0e4d: 0x42a6, 0x0e4e: 0x42d0, 0x0e4f: 0x1c6c, 0x0e50: 0x054a, 0x0e51: 0x054a, + 0x0e52: 0x0553, 0x0e53: 0x0553, 0x0e54: 0x0553, 0x0e55: 0x0553, 0x0e56: 0x0556, 0x0e57: 0x0556, + 0x0e58: 0x0556, 0x0e59: 0x0556, 0x0e5a: 0x055c, 0x0e5b: 0x055c, 0x0e5c: 0x055c, 0x0e5d: 0x055c, + 0x0e5e: 0x0550, 0x0e5f: 0x0550, 0x0e60: 0x0550, 0x0e61: 0x0550, 0x0e62: 0x0559, 0x0e63: 0x0559, + 0x0e64: 0x0559, 0x0e65: 0x0559, 0x0e66: 0x054d, 0x0e67: 0x054d, 0x0e68: 0x054d, 0x0e69: 0x054d, + 0x0e6a: 0x057d, 0x0e6b: 0x057d, 0x0e6c: 0x057d, 0x0e6d: 0x057d, 0x0e6e: 0x0580, 0x0e6f: 0x0580, + 0x0e70: 0x0580, 0x0e71: 0x0580, 0x0e72: 0x0562, 0x0e73: 0x0562, 0x0e74: 0x0562, 0x0e75: 0x0562, + 0x0e76: 0x055f, 0x0e77: 0x055f, 0x0e78: 0x055f, 0x0e79: 0x055f, 0x0e7a: 0x0565, 0x0e7b: 0x0565, + 0x0e7c: 0x0565, 0x0e7d: 0x0565, 0x0e7e: 0x0568, 0x0e7f: 0x0568, // Block 0x3a, offset 0xe80 - 0x0e80: 0x3d23, 0x0e81: 0x3d27, 0x0e82: 0x3d2b, 0x0e83: 0x3d2f, 0x0e84: 0x3d34, 0x0e85: 0x2eb5, - 0x0e86: 0x3d38, 0x0e87: 0x3d3c, 0x0e88: 0x3d40, 0x0e89: 0x3d44, 0x0e8a: 0x2eb9, 0x0e8b: 0x3d48, - 0x0e8c: 0x3d4c, 0x0e8d: 0x3d50, 0x0e8e: 0x2ebd, 0x0e8f: 0x3d55, 0x0e90: 0x3d59, 0x0e91: 0x3d5d, - 0x0e92: 0x3d61, 0x0e93: 0x3d66, 0x0e94: 0x3d6a, 0x0e95: 0x3c71, 0x0e96: 0x3d6e, 0x0e97: 0x3d73, - 0x0e98: 0x3d77, 0x0e99: 0x3d7b, 0x0e9a: 0x3d7f, 0x0e9b: 0x2f9a, 0x0e9c: 0x3d83, 0x0e9d: 0x1866, - 0x0e9e: 0x3d88, 0x0e9f: 0x3d8c, 0x0ea0: 0x3d90, 0x0ea1: 0x3d94, 0x0ea2: 0x3cb9, 0x0ea3: 0x3d98, - 0x0ea4: 0x3d9c, 0x0ea5: 0x2fae, 0x0ea6: 0x2ec1, 0x0ea7: 0x2ec5, 0x0ea8: 0x2fb2, 0x0ea9: 0x3da0, - 0x0eaa: 0x3da4, 0x0eab: 0x2bf1, 0x0eac: 0x3da8, 0x0ead: 0x2ec9, 0x0eae: 0x3dac, 0x0eaf: 0x3db0, - 0x0eb0: 0x3db4, 0x0eb1: 0x3db8, 0x0eb2: 0x3db8, 0x0eb3: 0x3db8, 0x0eb4: 0x3dbc, 0x0eb5: 0x3dc1, - 0x0eb6: 0x3dc5, 0x0eb7: 0x3dc9, 0x0eb8: 0x3dcd, 0x0eb9: 0x3dd2, 0x0eba: 0x3dd6, 0x0ebb: 0x3dda, - 0x0ebc: 0x3dde, 0x0ebd: 0x3de2, 0x0ebe: 0x3de6, 0x0ebf: 0x3dea, + 0x0e80: 0x0568, 0x0e81: 0x0568, 0x0e82: 0x0571, 0x0e83: 0x0571, 0x0e84: 0x056e, 0x0e85: 0x056e, + 0x0e86: 0x0574, 0x0e87: 0x0574, 0x0e88: 0x056b, 0x0e89: 0x056b, 0x0e8a: 0x057a, 0x0e8b: 0x057a, + 0x0e8c: 0x0577, 0x0e8d: 0x0577, 0x0e8e: 0x0583, 0x0e8f: 0x0583, 0x0e90: 0x0583, 0x0e91: 0x0583, + 0x0e92: 0x0589, 0x0e93: 0x0589, 0x0e94: 0x0589, 0x0e95: 0x0589, 0x0e96: 0x058f, 0x0e97: 0x058f, + 0x0e98: 0x058f, 0x0e99: 0x058f, 0x0e9a: 0x058c, 0x0e9b: 0x058c, 0x0e9c: 0x058c, 0x0e9d: 0x058c, + 0x0e9e: 0x0592, 0x0e9f: 0x0592, 0x0ea0: 0x0595, 0x0ea1: 0x0595, 0x0ea2: 0x0595, 0x0ea3: 0x0595, + 0x0ea4: 0x436c, 0x0ea5: 0x436c, 0x0ea6: 0x059b, 0x0ea7: 0x059b, 0x0ea8: 0x059b, 0x0ea9: 0x059b, + 0x0eaa: 0x0598, 0x0eab: 0x0598, 0x0eac: 0x0598, 0x0ead: 0x0598, 0x0eae: 0x05b6, 0x0eaf: 0x05b6, + 0x0eb0: 0x4366, 0x0eb1: 0x4366, // Block 0x3b, offset 0xec0 - 0x0ec0: 0x3dee, 0x0ec1: 0x3df2, 0x0ec2: 0x3df6, 0x0ec3: 0x3dfa, 0x0ec4: 0x3dfe, 0x0ec5: 0x3e02, - 0x0ec6: 0x3e02, 0x0ec7: 0x2fba, 0x0ec8: 0x3e06, 0x0ec9: 0x3e0a, 0x0eca: 0x3e0e, 0x0ecb: 0x3e12, - 0x0ecc: 0x2ed1, 0x0ecd: 0x3e16, 0x0ece: 0x3e1a, 0x0ecf: 0x3e1e, 0x0ed0: 0x2e39, 0x0ed1: 0x3e22, - 0x0ed2: 0x3e26, 0x0ed3: 0x3e2a, 0x0ed4: 0x3e2e, 0x0ed5: 0x3e32, 0x0ed6: 0x3e36, 0x0ed7: 0x3e3a, - 0x0ed8: 0x3e3e, 0x0ed9: 0x3e42, 0x0eda: 0x3e47, 0x0edb: 0x3e4b, 0x0edc: 0x3e4f, 0x0edd: 0x3c55, - 0x0ede: 0x3e53, 0x0edf: 0x3e57, 0x0ee0: 0x3e5b, 0x0ee1: 0x3e60, 0x0ee2: 0x3e65, 0x0ee3: 0x3e69, - 0x0ee4: 0x3e6d, 0x0ee5: 0x3e71, 0x0ee6: 0x3e75, 0x0ee7: 0x3e79, 0x0ee8: 0x3e7d, 0x0ee9: 0x3e81, - 0x0eea: 0x3e85, 0x0eeb: 0x3e85, 0x0eec: 0x3e89, 0x0eed: 0x3e8e, 0x0eee: 0x3e92, 0x0eef: 0x2be1, - 0x0ef0: 0x3e96, 0x0ef1: 0x3e9a, 0x0ef2: 0x3e9f, 0x0ef3: 0x3ea3, 0x0ef4: 0x3ea7, 0x0ef5: 0x18ce, - 0x0ef6: 0x3eab, 0x0ef7: 0x3eaf, 0x0ef8: 0x18d6, 0x0ef9: 0x3eb3, 0x0efa: 0x3eb7, 0x0efb: 0x3ebb, - 0x0efc: 0x3ec0, 0x0efd: 0x3ec4, 0x0efe: 0x3ec9, 0x0eff: 0x3ecd, + 0x0ed3: 0x0586, 0x0ed4: 0x0586, 0x0ed5: 0x0586, 0x0ed6: 0x0586, 0x0ed7: 0x05a4, + 0x0ed8: 0x05a4, 0x0ed9: 0x05a1, 0x0eda: 0x05a1, 0x0edb: 0x05a7, 0x0edc: 0x05a7, 0x0edd: 0x1f3c, + 0x0ede: 0x05ad, 0x0edf: 0x05ad, 0x0ee0: 0x059e, 0x0ee1: 0x059e, 0x0ee2: 0x05aa, 0x0ee3: 0x05aa, + 0x0ee4: 0x05b3, 0x0ee5: 0x05b3, 0x0ee6: 0x05b3, 0x0ee7: 0x05b3, 0x0ee8: 0x0544, 0x0ee9: 0x0544, + 0x0eea: 0x26bd, 0x0eeb: 0x26bd, 0x0eec: 0x272d, 0x0eed: 0x272d, 0x0eee: 0x26fc, 0x0eef: 0x26fc, + 0x0ef0: 0x2718, 0x0ef1: 0x2718, 0x0ef2: 0x2711, 0x0ef3: 0x2711, 0x0ef4: 0x271f, 0x0ef5: 0x271f, + 0x0ef6: 0x2726, 0x0ef7: 0x2726, 0x0ef8: 0x2726, 0x0ef9: 0x2703, 0x0efa: 0x2703, 0x0efb: 0x2703, + 0x0efc: 0x05b0, 0x0efd: 0x05b0, 0x0efe: 0x05b0, 0x0eff: 0x05b0, // Block 0x3c, offset 0xf00 - 0x0f00: 0x3ed1, 0x0f01: 0x3ed5, 0x0f02: 0x3ed9, 0x0f03: 0x3edd, 0x0f04: 0x3ee1, 0x0f05: 0x3ee5, - 0x0f06: 0x3ee9, 0x0f07: 0x3eed, 0x0f08: 0x3ef1, 0x0f09: 0x3ef5, 0x0f0a: 0x3efa, 0x0f0b: 0x3efe, - 0x0f0c: 0x3f02, 0x0f0d: 0x3f06, 0x0f0e: 0x2b11, 0x0f0f: 0x3f0a, 0x0f10: 0x18fe, 0x0f11: 0x3f0f, - 0x0f12: 0x3f0f, 0x0f13: 0x3f14, 0x0f14: 0x3f18, 0x0f15: 0x3f18, 0x0f16: 0x3f1c, 0x0f17: 0x3f20, - 0x0f18: 0x3f25, 0x0f19: 0x3f2a, 0x0f1a: 0x3f2e, 0x0f1b: 0x3f32, 0x0f1c: 0x3f36, 0x0f1d: 0x3f3a, - 0x0f1e: 0x3f3e, 0x0f1f: 0x3f42, 0x0f20: 0x3f46, 0x0f21: 0x3f4a, 0x0f22: 0x3f4e, 0x0f23: 0x2ee5, - 0x0f24: 0x3f52, 0x0f25: 0x3f57, 0x0f26: 0x3f5b, 0x0f27: 0x3f5f, 0x0f28: 0x2fea, 0x0f29: 0x3f5f, - 0x0f2a: 0x3f63, 0x0f2b: 0x2eed, 0x0f2c: 0x3f67, 0x0f2d: 0x3f6b, 0x0f2e: 0x3f6f, 0x0f2f: 0x3f73, - 0x0f30: 0x2ef1, 0x0f31: 0x2aa5, 0x0f32: 0x3f77, 0x0f33: 0x3f7b, 0x0f34: 0x3f7f, 0x0f35: 0x3f83, - 0x0f36: 0x3f87, 0x0f37: 0x3f8b, 0x0f38: 0x3f8f, 0x0f39: 0x3f94, 0x0f3a: 0x3f98, 0x0f3b: 0x3f9c, - 0x0f3c: 0x3fa0, 0x0f3d: 0x3fa4, 0x0f3e: 0x3fa8, 0x0f3f: 0x3fad, + 0x0f00: 0x26c4, 0x0f01: 0x26cb, 0x0f02: 0x26e7, 0x0f03: 0x2703, 0x0f04: 0x270a, 0x0f05: 0x1c76, + 0x0f06: 0x1c7b, 0x0f07: 0x1c80, 0x0f08: 0x1c8f, 0x0f09: 0x1c9e, 0x0f0a: 0x1ca3, 0x0f0b: 0x1ca8, + 0x0f0c: 0x1cad, 0x0f0d: 0x1cb2, 0x0f0e: 0x1cc1, 0x0f0f: 0x1cd0, 0x0f10: 0x1cd5, 0x0f11: 0x1cda, + 0x0f12: 0x1ce9, 0x0f13: 0x1cf8, 0x0f14: 0x1cfd, 0x0f15: 0x1d02, 0x0f16: 0x1d07, 0x0f17: 0x1d16, + 0x0f18: 0x1d1b, 0x0f19: 0x1d2a, 0x0f1a: 0x1d2f, 0x0f1b: 0x1d34, 0x0f1c: 0x1d43, 0x0f1d: 0x1d48, + 0x0f1e: 0x1d4d, 0x0f1f: 0x1d57, 0x0f20: 0x1d93, 0x0f21: 0x1da2, 0x0f22: 0x1db1, 0x0f23: 0x1db6, + 0x0f24: 0x1dbb, 0x0f25: 0x1dc5, 0x0f26: 0x1dd4, 0x0f27: 0x1dd9, 0x0f28: 0x1de8, 0x0f29: 0x1ded, + 0x0f2a: 0x1df2, 0x0f2b: 0x1e01, 0x0f2c: 0x1e06, 0x0f2d: 0x1e15, 0x0f2e: 0x1e1a, 0x0f2f: 0x1e1f, + 0x0f30: 0x1e24, 0x0f31: 0x1e29, 0x0f32: 0x1e2e, 0x0f33: 0x1e33, 0x0f34: 0x1e38, 0x0f35: 0x1e3d, + 0x0f36: 0x1e42, 0x0f37: 0x1e47, 0x0f38: 0x1e4c, 0x0f39: 0x1e51, 0x0f3a: 0x1e56, 0x0f3b: 0x1e5b, + 0x0f3c: 0x1e60, 0x0f3d: 0x1e65, 0x0f3e: 0x1e6a, 0x0f3f: 0x1e74, // Block 0x3d, offset 0xf40 - 0x0f40: 0x3fb1, 0x0f41: 0x3fb5, 0x0f42: 0x3fb9, 0x0f43: 0x3fbd, 0x0f44: 0x3fc1, 0x0f45: 0x3fc5, - 0x0f46: 0x3fc9, 0x0f47: 0x3fcd, 0x0f48: 0x2ef5, 0x0f49: 0x3fd1, 0x0f4a: 0x3fd5, 0x0f4b: 0x3fda, - 0x0f4c: 0x3fde, 0x0f4d: 0x3fe2, 0x0f4e: 0x3fe6, 0x0f4f: 0x2efd, 0x0f50: 0x3fea, 0x0f51: 0x3fee, - 0x0f52: 0x3ff2, 0x0f53: 0x3ff6, 0x0f54: 0x3ffa, 0x0f55: 0x3ffe, 0x0f56: 0x4002, 0x0f57: 0x4006, - 0x0f58: 0x2b15, 0x0f59: 0x300a, 0x0f5a: 0x400a, 0x0f5b: 0x400e, 0x0f5c: 0x4012, 0x0f5d: 0x4016, - 0x0f5e: 0x401b, 0x0f5f: 0x401f, 0x0f60: 0x4023, 0x0f61: 0x4027, 0x0f62: 0x2f01, 0x0f63: 0x402b, - 0x0f64: 0x4030, 0x0f65: 0x4034, 0x0f66: 0x4038, 0x0f67: 0x30b5, 0x0f68: 0x403c, 0x0f69: 0x4040, - 0x0f6a: 0x4044, 0x0f6b: 0x4048, 0x0f6c: 0x404c, 0x0f6d: 0x4051, 0x0f6e: 0x4055, 0x0f6f: 0x4059, - 0x0f70: 0x405d, 0x0f71: 0x4062, 0x0f72: 0x4066, 0x0f73: 0x406a, 0x0f74: 0x406e, 0x0f75: 0x2c25, - 0x0f76: 0x4072, 0x0f77: 0x4076, 0x0f78: 0x407b, 0x0f79: 0x4080, 0x0f7a: 0x4085, 0x0f7b: 0x4089, - 0x0f7c: 0x408e, 0x0f7d: 0x4092, 0x0f7e: 0x4096, 0x0f7f: 0x409a, + 0x0f40: 0x1e79, 0x0f41: 0x1e7e, 0x0f42: 0x1e83, 0x0f43: 0x1e8d, 0x0f44: 0x1e92, 0x0f45: 0x1e9c, + 0x0f46: 0x1ea1, 0x0f47: 0x1ea6, 0x0f48: 0x1eab, 0x0f49: 0x1eb0, 0x0f4a: 0x1eb5, 0x0f4b: 0x1eba, + 0x0f4c: 0x1ebf, 0x0f4d: 0x1ec4, 0x0f4e: 0x1ed3, 0x0f4f: 0x1ee2, 0x0f50: 0x1ee7, 0x0f51: 0x1eec, + 0x0f52: 0x1ef1, 0x0f53: 0x1ef6, 0x0f54: 0x1efb, 0x0f55: 0x1f05, 0x0f56: 0x1f0a, 0x0f57: 0x1f0f, + 0x0f58: 0x1f1e, 0x0f59: 0x1f2d, 0x0f5a: 0x1f32, 0x0f5b: 0x431e, 0x0f5c: 0x4324, 0x0f5d: 0x435a, + 0x0f5e: 0x43b1, 0x0f5f: 0x43b8, 0x0f60: 0x43bf, 0x0f61: 0x43c6, 0x0f62: 0x43cd, 0x0f63: 0x43d4, + 0x0f64: 0x26d9, 0x0f65: 0x26e0, 0x0f66: 0x26e7, 0x0f67: 0x26ee, 0x0f68: 0x2703, 0x0f69: 0x270a, + 0x0f6a: 0x1c85, 0x0f6b: 0x1c8a, 0x0f6c: 0x1c8f, 0x0f6d: 0x1c94, 0x0f6e: 0x1c9e, 0x0f6f: 0x1ca3, + 0x0f70: 0x1cb7, 0x0f71: 0x1cbc, 0x0f72: 0x1cc1, 0x0f73: 0x1cc6, 0x0f74: 0x1cd0, 0x0f75: 0x1cd5, + 0x0f76: 0x1cdf, 0x0f77: 0x1ce4, 0x0f78: 0x1ce9, 0x0f79: 0x1cee, 0x0f7a: 0x1cf8, 0x0f7b: 0x1cfd, + 0x0f7c: 0x1e29, 0x0f7d: 0x1e2e, 0x0f7e: 0x1e3d, 0x0f7f: 0x1e42, // Block 0x3e, offset 0xf80 - 0x0f80: 0x409e, 0x0f81: 0x2f05, 0x0f82: 0x2d71, 0x0f83: 0x40a2, 0x0f84: 0x40a6, 0x0f85: 0x40aa, - 0x0f86: 0x40ae, 0x0f87: 0x40b3, 0x0f88: 0x40b7, 0x0f89: 0x40bb, 0x0f8a: 0x40bf, 0x0f8b: 0x3016, - 0x0f8c: 0x40c3, 0x0f8d: 0x40c7, 0x0f8e: 0x40cc, 0x0f8f: 0x40d0, 0x0f90: 0x40d4, 0x0f91: 0x40d9, - 0x0f92: 0x40de, 0x0f93: 0x40e2, 0x0f94: 0x301a, 0x0f95: 0x40e6, 0x0f96: 0x40ea, 0x0f97: 0x40ee, - 0x0f98: 0x40f2, 0x0f99: 0x40f6, 0x0f9a: 0x40fa, 0x0f9b: 0x40fe, 0x0f9c: 0x4103, 0x0f9d: 0x4107, - 0x0f9e: 0x410c, 0x0f9f: 0x4110, 0x0fa0: 0x4115, 0x0fa1: 0x3022, 0x0fa2: 0x4119, 0x0fa3: 0x411d, - 0x0fa4: 0x4122, 0x0fa5: 0x4126, 0x0fa6: 0x412a, 0x0fa7: 0x412f, 0x0fa8: 0x4134, 0x0fa9: 0x4138, - 0x0faa: 0x413c, 0x0fab: 0x4140, 0x0fac: 0x4144, 0x0fad: 0x4144, 0x0fae: 0x4148, 0x0faf: 0x414c, - 0x0fb0: 0x302a, 0x0fb1: 0x4150, 0x0fb2: 0x4154, 0x0fb3: 0x4158, 0x0fb4: 0x415c, 0x0fb5: 0x4160, - 0x0fb6: 0x4165, 0x0fb7: 0x4169, 0x0fb8: 0x2bed, 0x0fb9: 0x416e, 0x0fba: 0x4173, 0x0fbb: 0x4177, - 0x0fbc: 0x417c, 0x0fbd: 0x4181, 0x0fbe: 0x4186, 0x0fbf: 0x418a, + 0x0f80: 0x1e47, 0x0f81: 0x1e5b, 0x0f82: 0x1e60, 0x0f83: 0x1e65, 0x0f84: 0x1e6a, 0x0f85: 0x1e83, + 0x0f86: 0x1e8d, 0x0f87: 0x1e92, 0x0f88: 0x1e97, 0x0f89: 0x1eab, 0x0f8a: 0x1ec9, 0x0f8b: 0x1ece, + 0x0f8c: 0x1ed3, 0x0f8d: 0x1ed8, 0x0f8e: 0x1ee2, 0x0f8f: 0x1ee7, 0x0f90: 0x435a, 0x0f91: 0x1f14, + 0x0f92: 0x1f19, 0x0f93: 0x1f1e, 0x0f94: 0x1f23, 0x0f95: 0x1f2d, 0x0f96: 0x1f32, 0x0f97: 0x26c4, + 0x0f98: 0x26cb, 0x0f99: 0x26d2, 0x0f9a: 0x26e7, 0x0f9b: 0x26f5, 0x0f9c: 0x1c76, 0x0f9d: 0x1c7b, + 0x0f9e: 0x1c80, 0x0f9f: 0x1c8f, 0x0fa0: 0x1c99, 0x0fa1: 0x1ca8, 0x0fa2: 0x1cad, 0x0fa3: 0x1cb2, + 0x0fa4: 0x1cc1, 0x0fa5: 0x1ccb, 0x0fa6: 0x1ce9, 0x0fa7: 0x1d02, 0x0fa8: 0x1d07, 0x0fa9: 0x1d16, + 0x0faa: 0x1d1b, 0x0fab: 0x1d2a, 0x0fac: 0x1d34, 0x0fad: 0x1d43, 0x0fae: 0x1d48, 0x0faf: 0x1d4d, + 0x0fb0: 0x1d57, 0x0fb1: 0x1d93, 0x0fb2: 0x1d98, 0x0fb3: 0x1da2, 0x0fb4: 0x1db1, 0x0fb5: 0x1db6, + 0x0fb6: 0x1dbb, 0x0fb7: 0x1dc5, 0x0fb8: 0x1dd4, 0x0fb9: 0x1de8, 0x0fba: 0x1ded, 0x0fbb: 0x1df2, + 0x0fbc: 0x1e01, 0x0fbd: 0x1e06, 0x0fbe: 0x1e15, 0x0fbf: 0x1e1a, // Block 0x3f, offset 0xfc0 - 0x0fc0: 0x3042, 0x0fc1: 0x418e, 0x0fc2: 0x4193, 0x0fc3: 0x4198, 0x0fc4: 0x419d, 0x0fc5: 0x41a2, - 0x0fc6: 0x41a6, 0x0fc7: 0x41a6, 0x0fc8: 0x3046, 0x0fc9: 0x30bd, 0x0fca: 0x41aa, 0x0fcb: 0x41ae, - 0x0fcc: 0x41b2, 0x0fcd: 0x41b6, 0x0fce: 0x41bb, 0x0fcf: 0x2b59, 0x0fd0: 0x304e, 0x0fd1: 0x41bf, - 0x0fd2: 0x41c3, 0x0fd3: 0x2f2d, 0x0fd4: 0x41c8, 0x0fd5: 0x41cd, 0x0fd6: 0x2e89, 0x0fd7: 0x41d2, - 0x0fd8: 0x41d6, 0x0fd9: 0x2f39, 0x0fda: 0x41da, 0x0fdb: 0x41de, 0x0fdc: 0x41e2, 0x0fdd: 0x41e7, - 0x0fde: 0x41e7, 0x0fdf: 0x41ec, 0x0fe0: 0x41f0, 0x0fe1: 0x41f4, 0x0fe2: 0x41f9, 0x0fe3: 0x41fd, - 0x0fe4: 0x4201, 0x0fe5: 0x4205, 0x0fe6: 0x420a, 0x0fe7: 0x420e, 0x0fe8: 0x4212, 0x0fe9: 0x4216, - 0x0fea: 0x421a, 0x0feb: 0x421e, 0x0fec: 0x4223, 0x0fed: 0x4227, 0x0fee: 0x422b, 0x0fef: 0x422f, - 0x0ff0: 0x4233, 0x0ff1: 0x4237, 0x0ff2: 0x423b, 0x0ff3: 0x4240, 0x0ff4: 0x4245, 0x0ff5: 0x4249, - 0x0ff6: 0x424e, 0x0ff7: 0x4252, 0x0ff8: 0x4257, 0x0ff9: 0x425b, 0x0ffa: 0x2f51, 0x0ffb: 0x425f, - 0x0ffc: 0x4264, 0x0ffd: 0x4269, 0x0ffe: 0x426d, 0x0fff: 0x4272, + 0x0fc0: 0x1e1f, 0x0fc1: 0x1e24, 0x0fc2: 0x1e33, 0x0fc3: 0x1e38, 0x0fc4: 0x1e4c, 0x0fc5: 0x1e51, + 0x0fc6: 0x1e56, 0x0fc7: 0x1e5b, 0x0fc8: 0x1e60, 0x0fc9: 0x1e74, 0x0fca: 0x1e79, 0x0fcb: 0x1e7e, + 0x0fcc: 0x1e83, 0x0fcd: 0x1e88, 0x0fce: 0x1e9c, 0x0fcf: 0x1ea1, 0x0fd0: 0x1ea6, 0x0fd1: 0x1eab, + 0x0fd2: 0x1eba, 0x0fd3: 0x1ebf, 0x0fd4: 0x1ec4, 0x0fd5: 0x1ed3, 0x0fd6: 0x1edd, 0x0fd7: 0x1eec, + 0x0fd8: 0x1ef1, 0x0fd9: 0x434e, 0x0fda: 0x1f05, 0x0fdb: 0x1f0a, 0x0fdc: 0x1f0f, 0x0fdd: 0x1f1e, + 0x0fde: 0x1f28, 0x0fdf: 0x26e7, 0x0fe0: 0x26f5, 0x0fe1: 0x1c8f, 0x0fe2: 0x1c99, 0x0fe3: 0x1cc1, + 0x0fe4: 0x1ccb, 0x0fe5: 0x1ce9, 0x0fe6: 0x1cf3, 0x0fe7: 0x1d57, 0x0fe8: 0x1d5c, 0x0fe9: 0x1d7f, + 0x0fea: 0x1d84, 0x0feb: 0x1e5b, 0x0fec: 0x1e60, 0x0fed: 0x1e83, 0x0fee: 0x1ed3, 0x0fef: 0x1edd, + 0x0ff0: 0x1f1e, 0x0ff1: 0x1f28, 0x0ff2: 0x4402, 0x0ff3: 0x440a, 0x0ff4: 0x4412, 0x0ff5: 0x1dde, + 0x0ff6: 0x1de3, 0x0ff7: 0x1df7, 0x0ff8: 0x1dfc, 0x0ff9: 0x1e0b, 0x0ffa: 0x1e10, 0x0ffb: 0x1d61, + 0x0ffc: 0x1d66, 0x0ffd: 0x1d89, 0x0ffe: 0x1d8e, 0x0fff: 0x1d20, // Block 0x40, offset 0x1000 - 0x1000: 0x4276, 0x1001: 0x427b, 0x1002: 0x427f, 0x1003: 0x4283, 0x1004: 0x4287, 0x1005: 0x428b, - 0x1006: 0x428f, 0x1007: 0x4293, 0x1008: 0x4298, 0x1009: 0x429d, 0x100a: 0x42a2, 0x100b: 0x3f14, - 0x100c: 0x42a7, 0x100d: 0x42ab, 0x100e: 0x42af, 0x100f: 0x42b3, 0x1010: 0x42b7, 0x1011: 0x42bb, - 0x1012: 0x42bf, 0x1013: 0x42c3, 0x1014: 0x42c7, 0x1015: 0x42cb, 0x1016: 0x42cf, 0x1017: 0x42d3, - 0x1018: 0x2c31, 0x1019: 0x42d8, 0x101a: 0x42dc, 0x101b: 0x42e0, 0x101c: 0x42e4, 0x101d: 0x42e8, - 0x101e: 0x42ec, 0x101f: 0x2f5d, 0x1020: 0x42f0, 0x1021: 0x42f4, 0x1022: 0x42f8, 0x1023: 0x42fc, - 0x1024: 0x4300, 0x1025: 0x4305, 0x1026: 0x430a, 0x1027: 0x430f, 0x1028: 0x4313, 0x1029: 0x4317, - 0x102a: 0x431b, 0x102b: 0x431f, 0x102c: 0x4324, 0x102d: 0x4328, 0x102e: 0x432d, 0x102f: 0x4331, - 0x1030: 0x4335, 0x1031: 0x433a, 0x1032: 0x433f, 0x1033: 0x4343, 0x1034: 0x2b45, 0x1035: 0x4347, - 0x1036: 0x434b, 0x1037: 0x434f, 0x1038: 0x4353, 0x1039: 0x4357, 0x103a: 0x435b, 0x103b: 0x306a, - 0x103c: 0x435f, 0x103d: 0x4363, 0x103e: 0x4367, 0x103f: 0x436b, + 0x1000: 0x1d25, 0x1001: 0x1d0c, 0x1002: 0x1d11, 0x1003: 0x1d39, 0x1004: 0x1d3e, 0x1005: 0x1da7, + 0x1006: 0x1dac, 0x1007: 0x1dca, 0x1008: 0x1dcf, 0x1009: 0x1d6b, 0x100a: 0x1d70, 0x100b: 0x1d75, + 0x100c: 0x1d7f, 0x100d: 0x1d7a, 0x100e: 0x1d52, 0x100f: 0x1d9d, 0x1010: 0x1dc0, 0x1011: 0x1dde, + 0x1012: 0x1de3, 0x1013: 0x1df7, 0x1014: 0x1dfc, 0x1015: 0x1e0b, 0x1016: 0x1e10, 0x1017: 0x1d61, + 0x1018: 0x1d66, 0x1019: 0x1d89, 0x101a: 0x1d8e, 0x101b: 0x1d20, 0x101c: 0x1d25, 0x101d: 0x1d0c, + 0x101e: 0x1d11, 0x101f: 0x1d39, 0x1020: 0x1d3e, 0x1021: 0x1da7, 0x1022: 0x1dac, 0x1023: 0x1dca, + 0x1024: 0x1dcf, 0x1025: 0x1d6b, 0x1026: 0x1d70, 0x1027: 0x1d75, 0x1028: 0x1d7f, 0x1029: 0x1d7a, + 0x102a: 0x1d52, 0x102b: 0x1d9d, 0x102c: 0x1dc0, 0x102d: 0x1d6b, 0x102e: 0x1d70, 0x102f: 0x1d75, + 0x1030: 0x1d7f, 0x1031: 0x1d5c, 0x1032: 0x1d84, 0x1033: 0x1dd9, 0x1034: 0x1d43, 0x1035: 0x1d48, + 0x1036: 0x1d4d, 0x1037: 0x1d6b, 0x1038: 0x1d70, 0x1039: 0x1d75, 0x103a: 0x1dd9, 0x103b: 0x1de8, + 0x103c: 0x4306, 0x103d: 0x4306, // Block 0x41, offset 0x1040 - 0x1040: 0x436f, 0x1041: 0x4373, 0x1042: 0x4377, 0x1043: 0x437b, 0x1044: 0x1a66, 0x1045: 0x437f, - 0x1046: 0x4384, 0x1047: 0x4388, 0x1048: 0x438c, 0x1049: 0x4390, 0x104a: 0x4394, 0x104b: 0x4398, - 0x104c: 0x439d, 0x104d: 0x43a2, 0x104e: 0x43a6, 0x104f: 0x43aa, 0x1050: 0x307e, 0x1051: 0x3082, - 0x1052: 0x1a82, 0x1053: 0x43ae, 0x1054: 0x43b3, 0x1055: 0x43b7, 0x1056: 0x43bb, 0x1057: 0x43bf, - 0x1058: 0x43c3, 0x1059: 0x43c8, 0x105a: 0x43cd, 0x105b: 0x43d1, 0x105c: 0x43d5, 0x105d: 0x43d9, - 0x105e: 0x43de, 0x105f: 0x3086, 0x1060: 0x43e2, 0x1061: 0x43e7, 0x1062: 0x43ec, 0x1063: 0x43f0, - 0x1064: 0x43f4, 0x1065: 0x43f8, 0x1066: 0x43fd, 0x1067: 0x4401, 0x1068: 0x4405, 0x1069: 0x4409, - 0x106a: 0x440d, 0x106b: 0x4411, 0x106c: 0x4415, 0x106d: 0x4419, 0x106e: 0x441e, 0x106f: 0x4422, - 0x1070: 0x4426, 0x1071: 0x442a, 0x1072: 0x442f, 0x1073: 0x4433, 0x1074: 0x4437, 0x1075: 0x443b, - 0x1076: 0x443f, 0x1077: 0x4444, 0x1078: 0x4449, 0x1079: 0x444d, 0x107a: 0x4451, 0x107b: 0x4455, - 0x107c: 0x445a, 0x107d: 0x445e, 0x107e: 0x309e, 0x107f: 0x309e, + 0x1050: 0x2424, 0x1051: 0x2439, + 0x1052: 0x2439, 0x1053: 0x2440, 0x1054: 0x2447, 0x1055: 0x245c, 0x1056: 0x2463, 0x1057: 0x246a, + 0x1058: 0x248d, 0x1059: 0x248d, 0x105a: 0x24b0, 0x105b: 0x24a9, 0x105c: 0x24c5, 0x105d: 0x24b7, + 0x105e: 0x24be, 0x105f: 0x24e1, 0x1060: 0x24e1, 0x1061: 0x24da, 0x1062: 0x24e8, 0x1063: 0x24e8, + 0x1064: 0x2512, 0x1065: 0x2512, 0x1066: 0x252e, 0x1067: 0x24f6, 0x1068: 0x24f6, 0x1069: 0x24ef, + 0x106a: 0x2504, 0x106b: 0x2504, 0x106c: 0x250b, 0x106d: 0x250b, 0x106e: 0x2535, 0x106f: 0x2543, + 0x1070: 0x2543, 0x1071: 0x254a, 0x1072: 0x254a, 0x1073: 0x2551, 0x1074: 0x2558, 0x1075: 0x255f, + 0x1076: 0x2566, 0x1077: 0x2566, 0x1078: 0x256d, 0x1079: 0x257b, 0x107a: 0x2589, 0x107b: 0x2582, + 0x107c: 0x2590, 0x107d: 0x2590, 0x107e: 0x25a5, 0x107f: 0x25ac, + // Block 0x42, offset 0x1080 + 0x1080: 0x25dd, 0x1081: 0x25eb, 0x1082: 0x25e4, 0x1083: 0x25c8, 0x1084: 0x25c8, 0x1085: 0x25f2, + 0x1086: 0x25f2, 0x1087: 0x25f9, 0x1088: 0x25f9, 0x1089: 0x2623, 0x108a: 0x262a, 0x108b: 0x2631, + 0x108c: 0x2607, 0x108d: 0x2615, 0x108e: 0x2638, 0x108f: 0x263f, + 0x1092: 0x260e, 0x1093: 0x2693, 0x1094: 0x269a, 0x1095: 0x2670, 0x1096: 0x2677, 0x1097: 0x265b, + 0x1098: 0x265b, 0x1099: 0x2662, 0x109a: 0x268c, 0x109b: 0x2685, 0x109c: 0x26af, 0x109d: 0x26af, + 0x109e: 0x241d, 0x109f: 0x2432, 0x10a0: 0x242b, 0x10a1: 0x2455, 0x10a2: 0x244e, 0x10a3: 0x2478, + 0x10a4: 0x2471, 0x10a5: 0x249b, 0x10a6: 0x247f, 0x10a7: 0x2494, 0x10a8: 0x24cc, 0x10a9: 0x2519, + 0x10aa: 0x24fd, 0x10ab: 0x253c, 0x10ac: 0x25d6, 0x10ad: 0x2600, 0x10ae: 0x26a8, 0x10af: 0x26a1, + 0x10b0: 0x26b6, 0x10b1: 0x264d, 0x10b2: 0x25b3, 0x10b3: 0x267e, 0x10b4: 0x25a5, 0x10b5: 0x25dd, + 0x10b6: 0x2574, 0x10b7: 0x25c1, 0x10b8: 0x2654, 0x10b9: 0x2646, 0x10ba: 0x25cf, 0x10bb: 0x25ba, + 0x10bc: 0x25cf, 0x10bd: 0x2654, 0x10be: 0x2486, 0x10bf: 0x24a2, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x261c, 0x10c1: 0x2597, 0x10c2: 0x2416, 0x10c3: 0x25ba, 0x10c4: 0x255f, 0x10c5: 0x252e, + 0x10c6: 0x24d3, 0x10c7: 0x2669, + 0x10f0: 0x2527, 0x10f1: 0x259e, 0x10f2: 0x293b, 0x10f3: 0x2932, 0x10f4: 0x2968, 0x10f5: 0x2956, + 0x10f6: 0x2944, 0x10f7: 0x295f, 0x10f8: 0x2971, 0x10f9: 0x2520, 0x10fa: 0x2e15, 0x10fb: 0x2c85, + 0x10fc: 0x294d, + // Block 0x44, offset 0x1100 + 0x1110: 0x00e7, 0x1111: 0x09c1, + 0x1112: 0x09c5, 0x1113: 0x0103, 0x1114: 0x0105, 0x1115: 0x00d1, 0x1116: 0x010d, 0x1117: 0x09fd, + 0x1118: 0x0a01, 0x1119: 0x06ad, + 0x1120: 0x80e6, 0x1121: 0x80e6, 0x1122: 0x80e6, 0x1123: 0x80e6, + 0x1124: 0x80e6, 0x1125: 0x80e6, 0x1126: 0x80e6, + 0x1130: 0x0193, 0x1131: 0x0981, 0x1132: 0x097d, 0x1133: 0x014d, 0x1134: 0x014d, 0x1135: 0x00df, + 0x1136: 0x00e1, 0x1137: 0x0185, 0x1138: 0x0189, 0x1139: 0x09f5, 0x113a: 0x09f9, 0x113b: 0x09e9, + 0x113c: 0x09ed, 0x113d: 0x09d1, 0x113e: 0x09d5, 0x113f: 0x09c9, + // Block 0x45, offset 0x1140 + 0x1140: 0x09cd, 0x1141: 0x09d9, 0x1142: 0x09dd, 0x1143: 0x09e1, 0x1144: 0x09e5, + 0x1147: 0x0145, 0x1148: 0x0149, 0x1149: 0x4155, 0x114a: 0x4155, 0x114b: 0x4155, + 0x114c: 0x4155, 0x114d: 0x014d, 0x114e: 0x014d, 0x114f: 0x014d, 0x1150: 0x00e7, 0x1151: 0x09c1, + 0x1152: 0x00eb, 0x1154: 0x0105, 0x1155: 0x0103, 0x1156: 0x010d, 0x1157: 0x00d1, + 0x1158: 0x0981, 0x1159: 0x00df, 0x115a: 0x00e1, 0x115b: 0x0185, 0x115c: 0x0189, 0x115d: 0x09f5, + 0x115e: 0x09f9, 0x115f: 0x00d5, 0x1160: 0x00db, 0x1161: 0x00e3, 0x1162: 0x00e5, 0x1163: 0x00e9, + 0x1164: 0x0107, 0x1165: 0x010b, 0x1166: 0x0109, 0x1168: 0x0147, 0x1169: 0x00d7, + 0x116a: 0x00d9, 0x116b: 0x010f, + 0x1170: 0x4196, 0x1171: 0x432a, 0x1172: 0x419b, 0x1174: 0x41a0, + 0x1176: 0x41a5, 0x1177: 0x4330, 0x1178: 0x41aa, 0x1179: 0x4336, 0x117a: 0x41af, 0x117b: 0x433c, + 0x117c: 0x41b4, 0x117d: 0x4342, 0x117e: 0x41b9, 0x117f: 0x4348, + // Block 0x46, offset 0x1180 + 0x1180: 0x04ed, 0x1181: 0x430c, 0x1182: 0x430c, 0x1183: 0x4312, 0x1184: 0x4312, 0x1185: 0x4354, + 0x1186: 0x4354, 0x1187: 0x4318, 0x1188: 0x4318, 0x1189: 0x4360, 0x118a: 0x4360, 0x118b: 0x4360, + 0x118c: 0x4360, 0x118d: 0x04f0, 0x118e: 0x04f0, 0x118f: 0x04f3, 0x1190: 0x04f3, 0x1191: 0x04f3, + 0x1192: 0x04f3, 0x1193: 0x04f6, 0x1194: 0x04f6, 0x1195: 0x04f9, 0x1196: 0x04f9, 0x1197: 0x04f9, + 0x1198: 0x04f9, 0x1199: 0x04fc, 0x119a: 0x04fc, 0x119b: 0x04fc, 0x119c: 0x04fc, 0x119d: 0x04ff, + 0x119e: 0x04ff, 0x119f: 0x04ff, 0x11a0: 0x04ff, 0x11a1: 0x0502, 0x11a2: 0x0502, 0x11a3: 0x0502, + 0x11a4: 0x0502, 0x11a5: 0x0505, 0x11a6: 0x0505, 0x11a7: 0x0505, 0x11a8: 0x0505, 0x11a9: 0x0508, + 0x11aa: 0x0508, 0x11ab: 0x050b, 0x11ac: 0x050b, 0x11ad: 0x050e, 0x11ae: 0x050e, 0x11af: 0x0511, + 0x11b0: 0x0511, 0x11b1: 0x0514, 0x11b2: 0x0514, 0x11b3: 0x0514, 0x11b4: 0x0514, 0x11b5: 0x0517, + 0x11b6: 0x0517, 0x11b7: 0x0517, 0x11b8: 0x0517, 0x11b9: 0x051a, 0x11ba: 0x051a, 0x11bb: 0x051a, + 0x11bc: 0x051a, 0x11bd: 0x051d, 0x11be: 0x051d, 0x11bf: 0x051d, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x051d, 0x11c1: 0x0520, 0x11c2: 0x0520, 0x11c3: 0x0520, 0x11c4: 0x0520, 0x11c5: 0x0523, + 0x11c6: 0x0523, 0x11c7: 0x0523, 0x11c8: 0x0523, 0x11c9: 0x0526, 0x11ca: 0x0526, 0x11cb: 0x0526, + 0x11cc: 0x0526, 0x11cd: 0x0529, 0x11ce: 0x0529, 0x11cf: 0x0529, 0x11d0: 0x0529, 0x11d1: 0x052c, + 0x11d2: 0x052c, 0x11d3: 0x052c, 0x11d4: 0x052c, 0x11d5: 0x052f, 0x11d6: 0x052f, 0x11d7: 0x052f, + 0x11d8: 0x052f, 0x11d9: 0x0532, 0x11da: 0x0532, 0x11db: 0x0532, 0x11dc: 0x0532, 0x11dd: 0x0535, + 0x11de: 0x0535, 0x11df: 0x0535, 0x11e0: 0x0535, 0x11e1: 0x0538, 0x11e2: 0x0538, 0x11e3: 0x0538, + 0x11e4: 0x0538, 0x11e5: 0x053b, 0x11e6: 0x053b, 0x11e7: 0x053b, 0x11e8: 0x053b, 0x11e9: 0x053e, + 0x11ea: 0x053e, 0x11eb: 0x053e, 0x11ec: 0x053e, 0x11ed: 0x0541, 0x11ee: 0x0541, 0x11ef: 0x0544, + 0x11f0: 0x0544, 0x11f1: 0x0547, 0x11f2: 0x0547, 0x11f3: 0x0547, 0x11f4: 0x0547, 0x11f5: 0x441a, + 0x11f6: 0x441a, 0x11f7: 0x4422, 0x11f8: 0x4422, 0x11f9: 0x442a, 0x11fa: 0x442a, 0x11fb: 0x1e6f, + 0x11fc: 0x1e6f, + // Block 0x48, offset 0x1200 + 0x1200: 0x014f, 0x1201: 0x0151, 0x1202: 0x0153, 0x1203: 0x0155, 0x1204: 0x0157, 0x1205: 0x0159, + 0x1206: 0x015b, 0x1207: 0x015d, 0x1208: 0x015f, 0x1209: 0x0161, 0x120a: 0x0163, 0x120b: 0x0165, + 0x120c: 0x0167, 0x120d: 0x0169, 0x120e: 0x016b, 0x120f: 0x016d, 0x1210: 0x016f, 0x1211: 0x0171, + 0x1212: 0x0173, 0x1213: 0x0175, 0x1214: 0x0177, 0x1215: 0x0179, 0x1216: 0x017b, 0x1217: 0x017d, + 0x1218: 0x017f, 0x1219: 0x0181, 0x121a: 0x0183, 0x121b: 0x0185, 0x121c: 0x0187, 0x121d: 0x0189, + 0x121e: 0x018b, 0x121f: 0x09b5, 0x1220: 0x09b9, 0x1221: 0x09c5, 0x1222: 0x09d9, 0x1223: 0x09dd, + 0x1224: 0x09c1, 0x1225: 0x0ae9, 0x1226: 0x0ae1, 0x1227: 0x0a05, 0x1228: 0x0a0d, 0x1229: 0x0a15, + 0x122a: 0x0a1d, 0x122b: 0x0a25, 0x122c: 0x0aa9, 0x122d: 0x0ab1, 0x122e: 0x0ab9, 0x122f: 0x0a5d, + 0x1230: 0x0aed, 0x1231: 0x0a09, 0x1232: 0x0a11, 0x1233: 0x0a19, 0x1234: 0x0a21, 0x1235: 0x0a29, + 0x1236: 0x0a2d, 0x1237: 0x0a31, 0x1238: 0x0a35, 0x1239: 0x0a39, 0x123a: 0x0a3d, 0x123b: 0x0a41, + 0x123c: 0x0a45, 0x123d: 0x0a49, 0x123e: 0x0a4d, 0x123f: 0x0a51, + // Block 0x49, offset 0x1240 + 0x1240: 0x0a55, 0x1241: 0x0a59, 0x1242: 0x0a61, 0x1243: 0x0a65, 0x1244: 0x0a69, 0x1245: 0x0a6d, + 0x1246: 0x0a71, 0x1247: 0x0a75, 0x1248: 0x0a79, 0x1249: 0x0a7d, 0x124a: 0x0a81, 0x124b: 0x0a85, + 0x124c: 0x0a89, 0x124d: 0x0a8d, 0x124e: 0x0a91, 0x124f: 0x0a95, 0x1250: 0x0a99, 0x1251: 0x0a9d, + 0x1252: 0x0aa1, 0x1253: 0x0aa5, 0x1254: 0x0aad, 0x1255: 0x0ab5, 0x1256: 0x0abd, 0x1257: 0x0ac1, + 0x1258: 0x0ac5, 0x1259: 0x0ac9, 0x125a: 0x0acd, 0x125b: 0x0ad1, 0x125c: 0x0ad5, 0x125d: 0x0ae5, + 0x125e: 0x4974, 0x125f: 0x497a, 0x1260: 0x0889, 0x1261: 0x07d9, 0x1262: 0x07dd, 0x1263: 0x0901, + 0x1264: 0x07e1, 0x1265: 0x0905, 0x1266: 0x0909, 0x1267: 0x07e5, 0x1268: 0x07e9, 0x1269: 0x07ed, + 0x126a: 0x090d, 0x126b: 0x0911, 0x126c: 0x0915, 0x126d: 0x0919, 0x126e: 0x091d, 0x126f: 0x0921, + 0x1270: 0x082d, 0x1271: 0x07f1, 0x1272: 0x07f5, 0x1273: 0x07f9, 0x1274: 0x0841, 0x1275: 0x07fd, + 0x1276: 0x0801, 0x1277: 0x0805, 0x1278: 0x0809, 0x1279: 0x080d, 0x127a: 0x0811, 0x127b: 0x0815, + 0x127c: 0x0819, 0x127d: 0x081d, 0x127e: 0x0821, + // Block 0x4a, offset 0x1280 + 0x1280: 0x0131, 0x1281: 0x0133, 0x1282: 0x0135, 0x1283: 0x0137, 0x1284: 0x0139, 0x1285: 0x013b, + 0x1286: 0x013d, 0x1287: 0x013f, 0x1288: 0x0141, 0x1289: 0x0143, 0x128a: 0x0151, 0x128b: 0x0153, + 0x128c: 0x0155, 0x128d: 0x0157, 0x128e: 0x0159, 0x128f: 0x015b, 0x1290: 0x015d, 0x1291: 0x015f, + 0x1292: 0x0161, 0x1293: 0x0163, 0x1294: 0x0165, 0x1295: 0x0167, 0x1296: 0x0169, 0x1297: 0x016b, + 0x1298: 0x016d, 0x1299: 0x016f, 0x129a: 0x0171, 0x129b: 0x0173, 0x129c: 0x0175, 0x129d: 0x0177, + 0x129e: 0x0179, 0x129f: 0x017b, 0x12a0: 0x017d, 0x12a1: 0x017f, 0x12a2: 0x0181, 0x12a3: 0x0183, + 0x12a4: 0x03a0, 0x12a5: 0x03b2, 0x12a8: 0x0430, 0x12a9: 0x0433, + 0x12aa: 0x0436, 0x12ab: 0x0439, 0x12ac: 0x043c, 0x12ad: 0x043f, 0x12ae: 0x0442, 0x12af: 0x0445, + 0x12b0: 0x0448, 0x12b1: 0x044b, 0x12b2: 0x044e, 0x12b3: 0x0451, 0x12b4: 0x0454, 0x12b5: 0x0457, + 0x12b6: 0x045a, 0x12b7: 0x045d, 0x12b8: 0x0460, 0x12b9: 0x0445, 0x12ba: 0x0463, 0x12bb: 0x0466, + 0x12bc: 0x0469, 0x12bd: 0x046c, 0x12be: 0x046f, 0x12bf: 0x0472, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x04ba, 0x12c1: 0x04bd, 0x12c2: 0x04c0, 0x12c3: 0x0999, 0x12c4: 0x0484, 0x12c5: 0x048d, + 0x12c6: 0x0493, 0x12c7: 0x04b7, 0x12c8: 0x04a8, 0x12c9: 0x04a5, 0x12ca: 0x04c3, 0x12cb: 0x04c6, + 0x12ce: 0x00ef, 0x12cf: 0x00f1, 0x12d0: 0x00f3, 0x12d1: 0x00f5, + 0x12d2: 0x00f7, 0x12d3: 0x00f9, 0x12d4: 0x00fb, 0x12d5: 0x00fd, 0x12d6: 0x00ff, 0x12d7: 0x0101, + 0x12d8: 0x00ef, 0x12d9: 0x00f1, 0x12da: 0x00f3, 0x12db: 0x00f5, 0x12dc: 0x00f7, 0x12dd: 0x00f9, + 0x12de: 0x00fb, 0x12df: 0x00fd, 0x12e0: 0x00ff, 0x12e1: 0x0101, 0x12e2: 0x00ef, 0x12e3: 0x00f1, + 0x12e4: 0x00f3, 0x12e5: 0x00f5, 0x12e6: 0x00f7, 0x12e7: 0x00f9, 0x12e8: 0x00fb, 0x12e9: 0x00fd, + 0x12ea: 0x00ff, 0x12eb: 0x0101, 0x12ec: 0x00ef, 0x12ed: 0x00f1, 0x12ee: 0x00f3, 0x12ef: 0x00f5, + 0x12f0: 0x00f7, 0x12f1: 0x00f9, 0x12f2: 0x00fb, 0x12f3: 0x00fd, 0x12f4: 0x00ff, 0x12f5: 0x0101, + 0x12f6: 0x00ef, 0x12f7: 0x00f1, 0x12f8: 0x00f3, 0x12f9: 0x00f5, 0x12fa: 0x00f7, 0x12fb: 0x00f9, + 0x12fc: 0x00fb, 0x12fd: 0x00fd, 0x12fe: 0x00ff, 0x12ff: 0x0101, + // Block 0x4c, offset 0x1300 + 0x1300: 0x0199, 0x1301: 0x0196, 0x1302: 0x019c, 0x1303: 0x01c0, 0x1304: 0x01e4, 0x1305: 0x0208, + 0x1306: 0x022c, 0x1307: 0x0235, 0x1308: 0x023b, 0x1309: 0x0241, 0x130a: 0x0247, + 0x1310: 0x05dd, 0x1311: 0x05e1, + 0x1312: 0x05e5, 0x1313: 0x05e9, 0x1314: 0x05ed, 0x1315: 0x05f1, 0x1316: 0x05f5, 0x1317: 0x05f9, + 0x1318: 0x05fd, 0x1319: 0x0601, 0x131a: 0x0605, 0x131b: 0x0609, 0x131c: 0x060d, 0x131d: 0x0611, + 0x131e: 0x0615, 0x131f: 0x0619, 0x1320: 0x061d, 0x1321: 0x0621, 0x1322: 0x0625, 0x1323: 0x0629, + 0x1324: 0x062d, 0x1325: 0x0631, 0x1326: 0x0635, 0x1327: 0x0639, 0x1328: 0x063d, 0x1329: 0x0641, + 0x132a: 0x289a, 0x132b: 0x0115, 0x132c: 0x0133, 0x132d: 0x025c, 0x132e: 0x02cb, + 0x1330: 0x0111, 0x1331: 0x0113, 0x1332: 0x0115, 0x1333: 0x0117, 0x1334: 0x0119, 0x1335: 0x011b, + 0x1336: 0x011d, 0x1337: 0x011f, 0x1338: 0x0121, 0x1339: 0x0123, 0x133a: 0x0125, 0x133b: 0x0127, + 0x133c: 0x0129, 0x133d: 0x012b, 0x133e: 0x012d, 0x133f: 0x012f, + // Block 0x4d, offset 0x1340 + 0x1340: 0x2829, 0x1341: 0x283e, 0x1342: 0x0a41, + 0x1350: 0x114d, 0x1351: 0x0f85, + 0x1352: 0x0e11, 0x1353: 0x44da, 0x1354: 0x0c59, 0x1355: 0x0f2d, 0x1356: 0x186d, 0x1357: 0x0f3d, + 0x1358: 0x0c65, 0x1359: 0x1215, 0x135a: 0x13ed, 0x135b: 0x11ed, 0x135c: 0x0d65, 0x135d: 0x10a9, + 0x135e: 0x0cfd, 0x135f: 0x11f5, 0x1360: 0x0d51, 0x1361: 0x1655, 0x1362: 0x14c1, 0x1363: 0x18c9, + 0x1364: 0x0f11, 0x1365: 0x0e49, 0x1366: 0x13a1, 0x1367: 0x1159, 0x1368: 0x1185, 0x1369: 0x0bfd, + 0x136a: 0x0c09, 0x136b: 0x1949, 0x136c: 0x1019, 0x136d: 0x0c25, 0x136e: 0x0e2d, 0x136f: 0x1179, + 0x1370: 0x18f1, 0x1371: 0x1151, 0x1372: 0x15ad, 0x1373: 0x15e9, 0x1374: 0x0e35, 0x1375: 0x1381, + 0x1376: 0x1249, 0x1377: 0x1245, 0x1378: 0x14d5, 0x1379: 0x0d69, 0x137a: 0x0e95, + // Block 0x4e, offset 0x1380 + 0x1380: 0x0c39, 0x1381: 0x0c31, 0x1382: 0x0c41, 0x1383: 0x1f41, 0x1384: 0x0c85, 0x1385: 0x0c95, + 0x1386: 0x0c99, 0x1387: 0x0ca1, 0x1388: 0x0ca9, 0x1389: 0x0cad, 0x138a: 0x0cb9, 0x138b: 0x0cb1, + 0x138c: 0x0af1, 0x138d: 0x1f55, 0x138e: 0x0ccd, 0x138f: 0x0cd1, 0x1390: 0x0cd5, 0x1391: 0x0cf1, + 0x1392: 0x1f46, 0x1393: 0x0af5, 0x1394: 0x0cdd, 0x1395: 0x0cfd, 0x1396: 0x1f50, 0x1397: 0x0d0d, + 0x1398: 0x0d15, 0x1399: 0x0c75, 0x139a: 0x0d1d, 0x139b: 0x0d21, 0x139c: 0x212b, 0x139d: 0x0d3d, + 0x139e: 0x0d45, 0x139f: 0x0afd, 0x13a0: 0x0d5d, 0x13a1: 0x0d61, 0x13a2: 0x0d69, 0x13a3: 0x0d6d, + 0x13a4: 0x0b01, 0x13a5: 0x0d85, 0x13a6: 0x0d89, 0x13a7: 0x0d95, 0x13a8: 0x0da1, 0x13a9: 0x0da5, + 0x13aa: 0x0da9, 0x13ab: 0x0db1, 0x13ac: 0x0dd1, 0x13ad: 0x0dd5, 0x13ae: 0x0ddd, 0x13af: 0x0ded, + 0x13b0: 0x0df5, 0x13b1: 0x0df9, 0x13b2: 0x0df9, 0x13b3: 0x0df9, 0x13b4: 0x1f64, 0x13b5: 0x13d1, + 0x13b6: 0x0e0d, 0x13b7: 0x0e15, 0x13b8: 0x1f69, 0x13b9: 0x0e21, 0x13ba: 0x0e29, 0x13bb: 0x0e31, + 0x13bc: 0x0e59, 0x13bd: 0x0e45, 0x13be: 0x0e51, 0x13bf: 0x0e55, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x0e5d, 0x13c1: 0x0e65, 0x13c2: 0x0e69, 0x13c3: 0x0e71, 0x13c4: 0x0e79, 0x13c5: 0x0e7d, + 0x13c6: 0x0e7d, 0x13c7: 0x0e85, 0x13c8: 0x0e8d, 0x13c9: 0x0e91, 0x13ca: 0x0e9d, 0x13cb: 0x0ec1, + 0x13cc: 0x0ea5, 0x13cd: 0x0ec5, 0x13ce: 0x0ea9, 0x13cf: 0x0eb1, 0x13d0: 0x0d49, 0x13d1: 0x0f0d, + 0x13d2: 0x0ed5, 0x13d3: 0x0ed9, 0x13d4: 0x0edd, 0x13d5: 0x0ed1, 0x13d6: 0x0ee5, 0x13d7: 0x0ee1, + 0x13d8: 0x0ef9, 0x13d9: 0x1f6e, 0x13da: 0x0f15, 0x13db: 0x0f19, 0x13dc: 0x0f21, 0x13dd: 0x0f2d, + 0x13de: 0x0f35, 0x13df: 0x0f51, 0x13e0: 0x1f73, 0x13e1: 0x1f78, 0x13e2: 0x0f5d, 0x13e3: 0x0f61, + 0x13e4: 0x0f65, 0x13e5: 0x0f59, 0x13e6: 0x0f6d, 0x13e7: 0x0b05, 0x13e8: 0x0b09, 0x13e9: 0x0f75, + 0x13ea: 0x0f7d, 0x13eb: 0x0f7d, 0x13ec: 0x1f7d, 0x13ed: 0x0f99, 0x13ee: 0x0f9d, 0x13ef: 0x0fa1, + 0x13f0: 0x0fa9, 0x13f1: 0x1f82, 0x13f2: 0x0fb1, 0x13f3: 0x0fb5, 0x13f4: 0x108d, 0x13f5: 0x0fbd, + 0x13f6: 0x0b0d, 0x13f7: 0x0fc9, 0x13f8: 0x0fd9, 0x13f9: 0x0fe5, 0x13fa: 0x0fe1, 0x13fb: 0x1f8c, + 0x13fc: 0x0fed, 0x13fd: 0x1f91, 0x13fe: 0x0ff9, 0x13ff: 0x0ff5, + // Block 0x50, offset 0x1400 + 0x1400: 0x0ffd, 0x1401: 0x100d, 0x1402: 0x1011, 0x1403: 0x0b11, 0x1404: 0x1021, 0x1405: 0x1029, + 0x1406: 0x102d, 0x1407: 0x1031, 0x1408: 0x0b15, 0x1409: 0x1f96, 0x140a: 0x0b19, 0x140b: 0x104d, + 0x140c: 0x1051, 0x140d: 0x1055, 0x140e: 0x105d, 0x140f: 0x215d, 0x1410: 0x1075, 0x1411: 0x1fa0, + 0x1412: 0x1fa0, 0x1413: 0x1715, 0x1414: 0x1085, 0x1415: 0x1085, 0x1416: 0x0b1d, 0x1417: 0x1fc3, + 0x1418: 0x2095, 0x1419: 0x1095, 0x141a: 0x109d, 0x141b: 0x0b21, 0x141c: 0x10b1, 0x141d: 0x10c1, + 0x141e: 0x10c5, 0x141f: 0x10cd, 0x1420: 0x10dd, 0x1421: 0x0b29, 0x1422: 0x0b25, 0x1423: 0x10e1, + 0x1424: 0x1fa5, 0x1425: 0x10e5, 0x1426: 0x10f9, 0x1427: 0x10fd, 0x1428: 0x1101, 0x1429: 0x10fd, + 0x142a: 0x110d, 0x142b: 0x1111, 0x142c: 0x1121, 0x142d: 0x1119, 0x142e: 0x111d, 0x142f: 0x1125, + 0x1430: 0x1129, 0x1431: 0x112d, 0x1432: 0x1139, 0x1433: 0x113d, 0x1434: 0x1155, 0x1435: 0x115d, + 0x1436: 0x116d, 0x1437: 0x1181, 0x1438: 0x1fb4, 0x1439: 0x117d, 0x143a: 0x1171, 0x143b: 0x1189, + 0x143c: 0x1191, 0x143d: 0x11a5, 0x143e: 0x1fb9, 0x143f: 0x11ad, + // Block 0x51, offset 0x1440 + 0x1440: 0x11a1, 0x1441: 0x1199, 0x1442: 0x0b2d, 0x1443: 0x11b5, 0x1444: 0x11bd, 0x1445: 0x11c5, + 0x1446: 0x11b9, 0x1447: 0x0b31, 0x1448: 0x11d5, 0x1449: 0x11dd, 0x144a: 0x1fbe, 0x144b: 0x1209, + 0x144c: 0x123d, 0x144d: 0x1219, 0x144e: 0x0b3d, 0x144f: 0x1225, 0x1450: 0x0b39, 0x1451: 0x0b35, + 0x1452: 0x0d01, 0x1453: 0x0d05, 0x1454: 0x1241, 0x1455: 0x1229, 0x1456: 0x16e9, 0x1457: 0x0ba1, + 0x1458: 0x124d, 0x1459: 0x1251, 0x145a: 0x1255, 0x145b: 0x1269, 0x145c: 0x1261, 0x145d: 0x1fd7, + 0x145e: 0x0b41, 0x145f: 0x127d, 0x1460: 0x1271, 0x1461: 0x128d, 0x1462: 0x1295, 0x1463: 0x1fe1, + 0x1464: 0x1299, 0x1465: 0x1285, 0x1466: 0x12a1, 0x1467: 0x0b45, 0x1468: 0x12a5, 0x1469: 0x12a9, + 0x146a: 0x12ad, 0x146b: 0x12b9, 0x146c: 0x1fe6, 0x146d: 0x12c1, 0x146e: 0x0b49, 0x146f: 0x12cd, + 0x1470: 0x1feb, 0x1471: 0x12d1, 0x1472: 0x0b4d, 0x1473: 0x12dd, 0x1474: 0x12e9, 0x1475: 0x12f5, + 0x1476: 0x12f9, 0x1477: 0x1ff0, 0x1478: 0x1f87, 0x1479: 0x1ff5, 0x147a: 0x1319, 0x147b: 0x1ffa, + 0x147c: 0x1325, 0x147d: 0x132d, 0x147e: 0x131d, 0x147f: 0x1339, + // Block 0x52, offset 0x1480 + 0x1480: 0x1349, 0x1481: 0x1359, 0x1482: 0x134d, 0x1483: 0x1351, 0x1484: 0x135d, 0x1485: 0x1361, + 0x1486: 0x1fff, 0x1487: 0x1345, 0x1488: 0x1379, 0x1489: 0x137d, 0x148a: 0x0b51, 0x148b: 0x1391, + 0x148c: 0x138d, 0x148d: 0x2004, 0x148e: 0x1371, 0x148f: 0x13ad, 0x1490: 0x2009, 0x1491: 0x200e, + 0x1492: 0x13b1, 0x1493: 0x13c5, 0x1494: 0x13c1, 0x1495: 0x13bd, 0x1496: 0x0b55, 0x1497: 0x13c9, + 0x1498: 0x13d9, 0x1499: 0x13d5, 0x149a: 0x13e1, 0x149b: 0x1f4b, 0x149c: 0x13f1, 0x149d: 0x2013, + 0x149e: 0x13fd, 0x149f: 0x201d, 0x14a0: 0x1411, 0x14a1: 0x141d, 0x14a2: 0x1431, 0x14a3: 0x2022, + 0x14a4: 0x1445, 0x14a5: 0x1449, 0x14a6: 0x2027, 0x14a7: 0x202c, 0x14a8: 0x1465, 0x14a9: 0x1475, + 0x14aa: 0x0b59, 0x14ab: 0x1479, 0x14ac: 0x0b5d, 0x14ad: 0x0b5d, 0x14ae: 0x1491, 0x14af: 0x1495, + 0x14b0: 0x149d, 0x14b1: 0x14a1, 0x14b2: 0x14ad, 0x14b3: 0x0b61, 0x14b4: 0x14c5, 0x14b5: 0x2031, + 0x14b6: 0x14e1, 0x14b7: 0x2036, 0x14b8: 0x14ed, 0x14b9: 0x1f9b, 0x14ba: 0x14fd, 0x14bb: 0x203b, + 0x14bc: 0x2040, 0x14bd: 0x2045, 0x14be: 0x0b65, 0x14bf: 0x0b69, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x1535, 0x14c1: 0x204f, 0x14c2: 0x204a, 0x14c3: 0x2054, 0x14c4: 0x2059, 0x14c5: 0x153d, + 0x14c6: 0x1541, 0x14c7: 0x1541, 0x14c8: 0x1549, 0x14c9: 0x0b71, 0x14ca: 0x154d, 0x14cb: 0x0b75, + 0x14cc: 0x0b79, 0x14cd: 0x2063, 0x14ce: 0x1561, 0x14cf: 0x1569, 0x14d0: 0x1575, 0x14d1: 0x0b7d, + 0x14d2: 0x2068, 0x14d3: 0x1599, 0x14d4: 0x206d, 0x14d5: 0x2072, 0x14d6: 0x15b9, 0x14d7: 0x15d1, + 0x14d8: 0x0b81, 0x14d9: 0x15d9, 0x14da: 0x15dd, 0x14db: 0x15e1, 0x14dc: 0x2077, 0x14dd: 0x207c, + 0x14de: 0x207c, 0x14df: 0x15f9, 0x14e0: 0x0b85, 0x14e1: 0x2081, 0x14e2: 0x160d, 0x14e3: 0x1611, + 0x14e4: 0x0b89, 0x14e5: 0x2086, 0x14e6: 0x162d, 0x14e7: 0x0b8d, 0x14e8: 0x163d, 0x14e9: 0x1635, + 0x14ea: 0x1645, 0x14eb: 0x2090, 0x14ec: 0x165d, 0x14ed: 0x0b91, 0x14ee: 0x1669, 0x14ef: 0x1671, + 0x14f0: 0x1681, 0x14f1: 0x0b95, 0x14f2: 0x209a, 0x14f3: 0x209f, 0x14f4: 0x0b99, 0x14f5: 0x20a4, + 0x14f6: 0x1699, 0x14f7: 0x20a9, 0x14f8: 0x16a5, 0x14f9: 0x16b1, 0x14fa: 0x16b9, 0x14fb: 0x20ae, + 0x14fc: 0x20b3, 0x14fd: 0x16cd, 0x14fe: 0x20b8, 0x14ff: 0x16d5, + // Block 0x54, offset 0x1500 + 0x1500: 0x1fc8, 0x1501: 0x0b9d, 0x1502: 0x16ed, 0x1503: 0x16f1, 0x1504: 0x0ba5, 0x1505: 0x16f5, + 0x1506: 0x0f71, 0x1507: 0x20bd, 0x1508: 0x20c2, 0x1509: 0x1fcd, 0x150a: 0x1fd2, 0x150b: 0x1715, + 0x150c: 0x1719, 0x150d: 0x1931, 0x150e: 0x0ba9, 0x150f: 0x1745, 0x1510: 0x1741, 0x1511: 0x1749, + 0x1512: 0x0d7d, 0x1513: 0x174d, 0x1514: 0x1751, 0x1515: 0x1755, 0x1516: 0x175d, 0x1517: 0x20c7, + 0x1518: 0x1759, 0x1519: 0x1761, 0x151a: 0x1775, 0x151b: 0x1779, 0x151c: 0x1765, 0x151d: 0x177d, + 0x151e: 0x1791, 0x151f: 0x17a5, 0x1520: 0x1771, 0x1521: 0x1785, 0x1522: 0x1789, 0x1523: 0x178d, + 0x1524: 0x20cc, 0x1525: 0x20d6, 0x1526: 0x20d1, 0x1527: 0x0bad, 0x1528: 0x17ad, 0x1529: 0x17b1, + 0x152a: 0x17b9, 0x152b: 0x20ea, 0x152c: 0x17bd, 0x152d: 0x20db, 0x152e: 0x0bb1, 0x152f: 0x0bb5, + 0x1530: 0x20e0, 0x1531: 0x20e5, 0x1532: 0x0bb9, 0x1533: 0x17dd, 0x1534: 0x17e1, 0x1535: 0x17e5, + 0x1536: 0x17e9, 0x1537: 0x17f5, 0x1538: 0x17f1, 0x1539: 0x17fd, 0x153a: 0x17f9, 0x153b: 0x1809, + 0x153c: 0x1801, 0x153d: 0x1805, 0x153e: 0x180d, 0x153f: 0x0bbd, + // Block 0x55, offset 0x1540 + 0x1540: 0x1815, 0x1541: 0x1819, 0x1542: 0x0bc1, 0x1543: 0x1829, 0x1544: 0x182d, 0x1545: 0x20ef, + 0x1546: 0x1839, 0x1547: 0x183d, 0x1548: 0x0bc5, 0x1549: 0x1849, 0x154a: 0x0af9, 0x154b: 0x20f4, + 0x154c: 0x20f9, 0x154d: 0x0bc9, 0x154e: 0x0bcd, 0x154f: 0x1875, 0x1550: 0x188d, 0x1551: 0x18a9, + 0x1552: 0x18b9, 0x1553: 0x20fe, 0x1554: 0x18cd, 0x1555: 0x18d1, 0x1556: 0x18e9, 0x1557: 0x18f5, + 0x1558: 0x2108, 0x1559: 0x1f5a, 0x155a: 0x1901, 0x155b: 0x18fd, 0x155c: 0x1909, 0x155d: 0x1f5f, + 0x155e: 0x1915, 0x155f: 0x1921, 0x1560: 0x210d, 0x1561: 0x2112, 0x1562: 0x1961, 0x1563: 0x1969, + 0x1564: 0x1971, 0x1565: 0x2117, 0x1566: 0x1975, 0x1567: 0x199d, 0x1568: 0x19a9, 0x1569: 0x19ad, + 0x156a: 0x19a5, 0x156b: 0x19b9, 0x156c: 0x19bd, 0x156d: 0x211c, 0x156e: 0x19c9, 0x156f: 0x0bd1, + 0x1570: 0x19d1, 0x1571: 0x2121, 0x1572: 0x0bd5, 0x1573: 0x1a05, 0x1574: 0x1001, 0x1575: 0x1a1d, + 0x1576: 0x2126, 0x1577: 0x2130, 0x1578: 0x0bd9, 0x1579: 0x0bdd, 0x157a: 0x1a45, 0x157b: 0x2135, + 0x157c: 0x0be1, 0x157d: 0x213a, 0x157e: 0x1a5d, 0x157f: 0x1a5d, + // Block 0x56, offset 0x1580 + 0x1580: 0x1a65, 0x1581: 0x213f, 0x1582: 0x1a7d, 0x1583: 0x0be5, 0x1584: 0x1a8d, 0x1585: 0x1a99, + 0x1586: 0x1aa1, 0x1587: 0x1aa9, 0x1588: 0x0be9, 0x1589: 0x2144, 0x158a: 0x1abd, 0x158b: 0x1ad9, + 0x158c: 0x1ae5, 0x158d: 0x0bed, 0x158e: 0x0bf1, 0x158f: 0x1ae9, 0x1590: 0x2149, 0x1591: 0x0bf5, + 0x1592: 0x214e, 0x1593: 0x2153, 0x1594: 0x2158, 0x1595: 0x1b0d, 0x1596: 0x0bf9, 0x1597: 0x1b21, + 0x1598: 0x1b29, 0x1599: 0x1b2d, 0x159a: 0x1b35, 0x159b: 0x1b3d, 0x159c: 0x1b45, 0x159d: 0x2162, } -// nfkcDecompSparseOffset: 93 entries, 186 bytes -var nfkcDecompSparseOffset = []uint16{0x0, 0xc, 0x16, 0x1e, 0x24, 0x27, 0x31, 0x37, 0x3e, 0x44, 0x4c, 0x59, 0x60, 0x66, 0x6e, 0x70, 0x72, 0x74, 0x78, 0x7c, 0x7e, 0x82, 0x85, 0x88, 0x8c, 0x8e, 0x90, 0x92, 0x96, 0x98, 0x9c, 0x9e, 0xa0, 0xa2, 0xa4, 0xae, 0xb6, 0xb8, 0xba, 0xc3, 0xc6, 0xcd, 0xd8, 0xe6, 0xf4, 0xfe, 0x102, 0x104, 0x10c, 0x118, 0x11d, 0x120, 0x122, 0x124, 0x127, 0x129, 0x12b, 0x12d, 0x12f, 0x131, 0x133, 0x135, 0x137, 0x139, 0x13e, 0x14d, 0x15b, 0x15d, 0x15f, 0x167, 0x177, 0x179, 0x184, 0x18b, 0x196, 0x1a2, 0x1b3, 0x1c4, 0x1cb, 0x1dc, 0x1ea, 0x1f8, 0x207, 0x218, 0x21d, 0x22a, 0x22e, 0x232, 0x236, 0x238, 0x247, 0x249, 0x24d} +// nfkcSparseOffset: 123 entries, 246 bytes +var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x6f, 0x74, 0x76, 0x7e, 0x85, 0x88, 0x90, 0x94, 0x98, 0x9a, 0x9c, 0xa5, 0xa9, 0xb0, 0xb5, 0xb8, 0xc2, 0xc4, 0xcb, 0xd3, 0xd7, 0xd9, 0xdc, 0xe0, 0xe6, 0xf7, 0x103, 0x105, 0x10b, 0x10d, 0x10f, 0x111, 0x113, 0x115, 0x117, 0x119, 0x11c, 0x11f, 0x121, 0x124, 0x127, 0x12b, 0x134, 0x136, 0x139, 0x13b, 0x144, 0x14f, 0x15e, 0x16c, 0x17a, 0x18a, 0x198, 0x19f, 0x1a5, 0x1b4, 0x1b8, 0x1ba, 0x1be, 0x1c0, 0x1c3, 0x1c5, 0x1c8, 0x1ca, 0x1cd, 0x1cf, 0x1d1, 0x1d3, 0x1df, 0x1e8, 0x1ef, 0x1fc, 0x1ff, 0x201, 0x203, 0x205, 0x208, 0x20a, 0x20c, 0x20e, 0x210, 0x216, 0x218, 0x21a, 0x21c, 0x21e, 0x220, 0x22f, 0x231, 0x237, 0x23f, 0x24c, 0x256, 0x258, 0x25a, 0x25e, 0x263, 0x26f, 0x274, 0x27d, 0x283, 0x288, 0x28c, 0x291, 0x295, 0x2a5, 0x2b3, 0x2c1, 0x2cf, 0x2d7, 0x2d9} -// nfkcDecompSparseValues: 603 entries, 2412 bytes -var nfkcDecompSparseValues = [603]valueRange{ +// nfkcSparseValues: 739 entries, 2956 bytes +var nfkcSparseValues = [739]valueRange{ // Block 0x0, offset 0x1 - {value: 0x0002, lo: 0x0b}, - {value: 0x0001, lo: 0xa0, hi: 0xa0}, - {value: 0x0003, lo: 0xa8, hi: 0xa8}, - {value: 0x0007, lo: 0xaa, hi: 0xaa}, - {value: 0x0009, lo: 0xaf, hi: 0xaf}, - {value: 0x000d, lo: 0xb2, hi: 0xb4}, - {value: 0x0015, lo: 0xb5, hi: 0xb5}, - {value: 0x0018, lo: 0xb8, hi: 0xb8}, - {value: 0x001c, lo: 0xb9, hi: 0xba}, - {value: 0x0020, lo: 0xbc, hi: 0xbc}, - {value: 0x0026, lo: 0xbd, hi: 0xbd}, - {value: 0x002c, lo: 0xbe, hi: 0xbe}, + {value: 0x0002, lo: 0x0d}, + {value: 0x00cf, lo: 0xa0, hi: 0xa0}, + {value: 0x4164, lo: 0xa8, hi: 0xa8}, + {value: 0x0151, lo: 0xaa, hi: 0xaa}, + {value: 0x4150, lo: 0xaf, hi: 0xaf}, + {value: 0x00f3, lo: 0xb2, hi: 0xb3}, + {value: 0x4146, lo: 0xb4, hi: 0xb4}, + {value: 0x0499, lo: 0xb5, hi: 0xb5}, + {value: 0x417d, lo: 0xb8, hi: 0xb8}, + {value: 0x00f1, lo: 0xb9, hi: 0xb9}, + {value: 0x016d, lo: 0xba, hi: 0xba}, + {value: 0x232f, lo: 0xbc, hi: 0xbc}, + {value: 0x2323, lo: 0xbd, hi: 0xbd}, + {value: 0x23c5, lo: 0xbe, hi: 0xbe}, // Block 0x1, offset 0x2 - {value: 0x0004, lo: 0x09}, - {value: 0x0032, lo: 0x80, hi: 0x85}, - {value: 0x004a, lo: 0x87, hi: 0x8f}, - {value: 0x006e, lo: 0x91, hi: 0x96}, - {value: 0x0086, lo: 0x99, hi: 0x9d}, - {value: 0x009a, lo: 0xa0, hi: 0xa5}, - {value: 0x00b2, lo: 0xa7, hi: 0xaf}, - {value: 0x00d6, lo: 0xb1, hi: 0xb6}, - {value: 0x00ee, lo: 0xb9, hi: 0xbd}, - {value: 0x0102, lo: 0xbf, hi: 0xbf}, + {value: 0x0091, lo: 0x03}, + {value: 0x4699, lo: 0xa0, hi: 0xa1}, + {value: 0x46cb, lo: 0xaf, hi: 0xb0}, + {value: 0x8800, lo: 0xb7, hi: 0xb7}, // Block 0x2, offset 0x3 - {value: 0x0004, lo: 0x07}, - {value: 0x0106, lo: 0x80, hi: 0x8f}, - {value: 0x0146, lo: 0x92, hi: 0xa5}, - {value: 0x0196, lo: 0xa8, hi: 0xb0}, - {value: 0x01ba, lo: 0xb2, hi: 0xb2}, - {value: 0x01bd, lo: 0xb3, hi: 0xb3}, - {value: 0x01c0, lo: 0xb4, hi: 0xb7}, - {value: 0x01d0, lo: 0xb9, hi: 0xbf}, + {value: 0x0003, lo: 0x08}, + {value: 0x8800, lo: 0x92, hi: 0x92}, + {value: 0x015f, lo: 0xb0, hi: 0xb0}, + {value: 0x03d9, lo: 0xb1, hi: 0xb1}, + {value: 0x0163, lo: 0xb2, hi: 0xb2}, + {value: 0x0173, lo: 0xb3, hi: 0xb3}, + {value: 0x0400, lo: 0xb4, hi: 0xb6}, + {value: 0x017d, lo: 0xb7, hi: 0xb7}, + {value: 0x0181, lo: 0xb8, hi: 0xb8}, // Block 0x3, offset 0x4 - {value: 0x0004, lo: 0x05}, - {value: 0x01ec, lo: 0x80, hi: 0x80}, - {value: 0x01f0, lo: 0x83, hi: 0x89}, - {value: 0x020c, lo: 0x8c, hi: 0x91}, - {value: 0x0224, lo: 0x94, hi: 0xa5}, - {value: 0x026c, lo: 0xa8, hi: 0xbf}, + {value: 0x000a, lo: 0x09}, + {value: 0x415a, lo: 0x98, hi: 0x98}, + {value: 0x415f, lo: 0x99, hi: 0x9a}, + {value: 0x4182, lo: 0x9b, hi: 0x9b}, + {value: 0x414b, lo: 0x9c, hi: 0x9c}, + {value: 0x416e, lo: 0x9d, hi: 0x9d}, + {value: 0x03d3, lo: 0xa0, hi: 0xa0}, + {value: 0x0167, lo: 0xa1, hi: 0xa1}, + {value: 0x0175, lo: 0xa2, hi: 0xa3}, + {value: 0x0424, lo: 0xa4, hi: 0xa4}, // Block 0x4, offset 0x5 - {value: 0x0004, lo: 0x02}, - {value: 0x02ca, lo: 0xa0, hi: 0xa1}, - {value: 0x02d2, lo: 0xaf, hi: 0xb0}, + {value: 0x0000, lo: 0x0f}, + {value: 0x8800, lo: 0x83, hi: 0x83}, + {value: 0x8800, lo: 0x87, hi: 0x87}, + {value: 0x8800, lo: 0x8b, hi: 0x8b}, + {value: 0x8800, lo: 0x8d, hi: 0x8d}, + {value: 0x368a, lo: 0x90, hi: 0x90}, + {value: 0x3696, lo: 0x91, hi: 0x91}, + {value: 0x3684, lo: 0x93, hi: 0x93}, + {value: 0x8800, lo: 0x96, hi: 0x96}, + {value: 0x36fc, lo: 0x97, hi: 0x97}, + {value: 0x36c6, lo: 0x9c, hi: 0x9c}, + {value: 0x36ae, lo: 0x9d, hi: 0x9d}, + {value: 0x36d8, lo: 0x9e, hi: 0x9e}, + {value: 0x8800, lo: 0xb4, hi: 0xb5}, + {value: 0x3702, lo: 0xb6, hi: 0xb6}, + {value: 0x3708, lo: 0xb7, hi: 0xb7}, // Block 0x5, offset 0x6 - {value: 0x0004, lo: 0x09}, - {value: 0x03d8, lo: 0x80, hi: 0x9b}, - {value: 0x0448, lo: 0x9e, hi: 0x9f}, - {value: 0x0450, lo: 0xa6, hi: 0xaa}, - {value: 0x0466, lo: 0xab, hi: 0xab}, - {value: 0x046c, lo: 0xac, hi: 0xac}, - {value: 0x0472, lo: 0xad, hi: 0xad}, - {value: 0x0478, lo: 0xae, hi: 0xb0}, - {value: 0x0486, lo: 0xb1, hi: 0xb1}, - {value: 0x048c, lo: 0xb2, hi: 0xb3}, + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0x83, hi: 0x87}, // Block 0x6, offset 0x7 - {value: 0x0002, lo: 0x05}, - {value: 0x0494, lo: 0xb0, hi: 0xb1}, - {value: 0x0499, lo: 0xb2, hi: 0xb4}, - {value: 0x04a0, lo: 0xb5, hi: 0xb5}, - {value: 0x04a3, lo: 0xb6, hi: 0xb6}, - {value: 0x04a6, lo: 0xb7, hi: 0xb8}, + {value: 0x0001, lo: 0x04}, + {value: 0x8018, lo: 0x81, hi: 0x82}, + {value: 0x80e6, lo: 0x84, hi: 0x84}, + {value: 0x80dc, lo: 0x85, hi: 0x85}, + {value: 0x8012, lo: 0x87, hi: 0x87}, // Block 0x7, offset 0x8 - {value: 0x0004, lo: 0x06}, - {value: 0x04aa, lo: 0x98, hi: 0x9d}, - {value: 0x04c2, lo: 0xa0, hi: 0xa0}, - {value: 0x04c5, lo: 0xa1, hi: 0xa1}, - {value: 0x02c8, lo: 0xa2, hi: 0xa2}, - {value: 0x04c7, lo: 0xa3, hi: 0xa3}, - {value: 0x04c9, lo: 0xa4, hi: 0xa4}, + {value: 0x0000, lo: 0x0a}, + {value: 0x80e6, lo: 0x90, hi: 0x97}, + {value: 0x801e, lo: 0x98, hi: 0x98}, + {value: 0x801f, lo: 0x99, hi: 0x99}, + {value: 0x8020, lo: 0x9a, hi: 0x9a}, + {value: 0x3726, lo: 0xa2, hi: 0xa2}, + {value: 0x372c, lo: 0xa3, hi: 0xa3}, + {value: 0x3738, lo: 0xa4, hi: 0xa4}, + {value: 0x3732, lo: 0xa5, hi: 0xa5}, + {value: 0x373e, lo: 0xa6, hi: 0xa6}, + {value: 0x8800, lo: 0xa7, hi: 0xa7}, // Block 0x8, offset 0x9 - {value: 0x0003, lo: 0x05}, - {value: 0x04cc, lo: 0x80, hi: 0x81}, - {value: 0x04d2, lo: 0x83, hi: 0x84}, - {value: 0x04da, lo: 0xb4, hi: 0xb4}, - {value: 0x04dd, lo: 0xba, hi: 0xba}, - {value: 0x04e1, lo: 0xbe, hi: 0xbe}, + {value: 0x0000, lo: 0x0e}, + {value: 0x3750, lo: 0x80, hi: 0x80}, + {value: 0x8800, lo: 0x81, hi: 0x81}, + {value: 0x3744, lo: 0x82, hi: 0x82}, + {value: 0x8800, lo: 0x92, hi: 0x92}, + {value: 0x374a, lo: 0x93, hi: 0x93}, + {value: 0x8800, lo: 0x95, hi: 0x95}, + {value: 0x80e6, lo: 0x96, hi: 0x9c}, + {value: 0x80e6, lo: 0x9f, hi: 0xa2}, + {value: 0x80dc, lo: 0xa3, hi: 0xa3}, + {value: 0x80e6, lo: 0xa4, hi: 0xa4}, + {value: 0x80e6, lo: 0xa7, hi: 0xa8}, + {value: 0x80dc, lo: 0xaa, hi: 0xaa}, + {value: 0x80e6, lo: 0xab, hi: 0xac}, + {value: 0x80dc, lo: 0xad, hi: 0xad}, // Block 0x9, offset 0xa - {value: 0x0005, lo: 0x07}, - {value: 0x0011, lo: 0x84, hi: 0x84}, - {value: 0x04e8, lo: 0x85, hi: 0x85}, - {value: 0x04ee, lo: 0x86, hi: 0x87}, - {value: 0x04f6, lo: 0x88, hi: 0x8a}, - {value: 0x0505, lo: 0x8c, hi: 0x8c}, - {value: 0x050a, lo: 0x8e, hi: 0x90}, - {value: 0x051b, lo: 0xaa, hi: 0xb0}, + {value: 0x0000, lo: 0x0c}, + {value: 0x8024, lo: 0x91, hi: 0x91}, + {value: 0x80e6, lo: 0xb0, hi: 0xb0}, + {value: 0x80dc, lo: 0xb1, hi: 0xb1}, + {value: 0x80e6, lo: 0xb2, hi: 0xb3}, + {value: 0x80dc, lo: 0xb4, hi: 0xb4}, + {value: 0x80e6, lo: 0xb5, hi: 0xb6}, + {value: 0x80dc, lo: 0xb7, hi: 0xb9}, + {value: 0x80e6, lo: 0xba, hi: 0xba}, + {value: 0x80dc, lo: 0xbb, hi: 0xbc}, + {value: 0x80e6, lo: 0xbd, hi: 0xbd}, + {value: 0x80dc, lo: 0xbe, hi: 0xbe}, + {value: 0x80e6, lo: 0xbf, hi: 0xbf}, // Block 0xa, offset 0xb - {value: 0x0003, lo: 0x0c}, - {value: 0x0540, lo: 0x8a, hi: 0x8a}, - {value: 0x0545, lo: 0x8b, hi: 0x8b}, - {value: 0x054a, lo: 0x8c, hi: 0x8c}, - {value: 0x054f, lo: 0x8d, hi: 0x8d}, - {value: 0x0554, lo: 0x8e, hi: 0x8e}, - {value: 0x0559, lo: 0x90, hi: 0x92}, - {value: 0x050a, lo: 0x93, hi: 0x93}, - {value: 0x0520, lo: 0x94, hi: 0x94}, - {value: 0x056c, lo: 0x95, hi: 0x96}, - {value: 0x0572, lo: 0xb0, hi: 0xb2}, - {value: 0x057b, lo: 0xb4, hi: 0xb5}, - {value: 0x0581, lo: 0xb9, hi: 0xb9}, + {value: 0x000a, lo: 0x07}, + {value: 0x80e6, lo: 0x80, hi: 0x80}, + {value: 0x80e6, lo: 0x81, hi: 0x81}, + {value: 0x80dc, lo: 0x82, hi: 0x83}, + {value: 0x80dc, lo: 0x84, hi: 0x85}, + {value: 0x80dc, lo: 0x86, hi: 0x87}, + {value: 0x80dc, lo: 0x88, hi: 0x89}, + {value: 0x80e6, lo: 0x8a, hi: 0x8a}, // Block 0xb, offset 0xc - {value: 0x0005, lo: 0x06}, - {value: 0x0584, lo: 0x80, hi: 0x81}, - {value: 0x058e, lo: 0x83, hi: 0x83}, - {value: 0x0593, lo: 0x87, hi: 0x87}, - {value: 0x0598, lo: 0x8c, hi: 0x8e}, - {value: 0x05a7, lo: 0x99, hi: 0x99}, - {value: 0x05ac, lo: 0xb9, hi: 0xb9}, + {value: 0x0000, lo: 0x03}, + {value: 0x80e6, lo: 0xab, hi: 0xb1}, + {value: 0x80dc, lo: 0xb2, hi: 0xb2}, + {value: 0x80e6, lo: 0xb3, hi: 0xb3}, // Block 0xc, offset 0xd - {value: 0x0005, lo: 0x05}, - {value: 0x05b1, lo: 0x90, hi: 0x91}, - {value: 0x05bb, lo: 0x93, hi: 0x93}, - {value: 0x05c0, lo: 0x97, hi: 0x97}, - {value: 0x05c5, lo: 0x9c, hi: 0x9e}, - {value: 0x05d4, lo: 0xb6, hi: 0xb7}, + {value: 0x0000, lo: 0x04}, + {value: 0x80e6, lo: 0x96, hi: 0x99}, + {value: 0x80e6, lo: 0x9b, hi: 0xa3}, + {value: 0x80e6, lo: 0xa5, hi: 0xa7}, + {value: 0x80e6, lo: 0xa9, hi: 0xad}, // Block 0xd, offset 0xe - {value: 0x0005, lo: 0x07}, - {value: 0x05de, lo: 0x81, hi: 0x82}, - {value: 0x05e8, lo: 0x90, hi: 0x93}, - {value: 0x05fc, lo: 0x96, hi: 0x97}, - {value: 0x0606, lo: 0x9a, hi: 0x9f}, - {value: 0x0624, lo: 0xa2, hi: 0xa7}, - {value: 0x0642, lo: 0xaa, hi: 0xb5}, - {value: 0x067e, lo: 0xb8, hi: 0xb9}, - // Block 0xe, offset 0xf {value: 0x0000, lo: 0x01}, - {value: 0x0688, lo: 0x87, hi: 0x87}, + {value: 0x80dc, lo: 0x99, hi: 0x9b}, + // Block 0xe, offset 0xf + {value: 0x0000, lo: 0x07}, + {value: 0x8800, lo: 0xa8, hi: 0xa8}, + {value: 0x3dbd, lo: 0xa9, hi: 0xa9}, + {value: 0x8800, lo: 0xb0, hi: 0xb0}, + {value: 0x3dc5, lo: 0xb1, hi: 0xb1}, + {value: 0x8800, lo: 0xb3, hi: 0xb3}, + {value: 0x3dcd, lo: 0xb4, hi: 0xb4}, + {value: 0x8607, lo: 0xbc, hi: 0xbc}, // Block 0xf, offset 0x10 - {value: 0x0005, lo: 0x01}, - {value: 0x068d, lo: 0xa2, hi: 0xa6}, + {value: 0x0008, lo: 0x06}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x80e6, lo: 0x91, hi: 0x91}, + {value: 0x80dc, lo: 0x92, hi: 0x92}, + {value: 0x80e6, lo: 0x93, hi: 0x93}, + {value: 0x80e6, lo: 0x94, hi: 0x94}, + {value: 0x4432, lo: 0x98, hi: 0x9f}, // Block 0x10, offset 0x11 - {value: 0x0005, lo: 0x01}, - {value: 0x06a6, lo: 0xb5, hi: 0xb8}, + {value: 0x0000, lo: 0x02}, + {value: 0x8007, lo: 0xbc, hi: 0xbc}, + {value: 0x8600, lo: 0xbe, hi: 0xbe}, // Block 0x11, offset 0x12 - {value: 0x0000, lo: 0x03}, - {value: 0x06ba, lo: 0x80, hi: 0x80}, - {value: 0x06bf, lo: 0x82, hi: 0x82}, - {value: 0x06c4, lo: 0x93, hi: 0x93}, + {value: 0x0007, lo: 0x07}, + {value: 0x8800, lo: 0x87, hi: 0x87}, + {value: 0x0001, lo: 0x8b, hi: 0x8c}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x8600, lo: 0x97, hi: 0x97}, + {value: 0x4472, lo: 0x9c, hi: 0x9c}, + {value: 0x447a, lo: 0x9d, hi: 0x9d}, + {value: 0x4482, lo: 0x9f, hi: 0x9f}, // Block 0x12, offset 0x13 {value: 0x0000, lo: 0x03}, - {value: 0x06c9, lo: 0xa9, hi: 0xa9}, - {value: 0x06d0, lo: 0xb1, hi: 0xb1}, - {value: 0x06d7, lo: 0xb4, hi: 0xb4}, + {value: 0x44aa, lo: 0xb3, hi: 0xb3}, + {value: 0x44b2, lo: 0xb6, hi: 0xb6}, + {value: 0x8007, lo: 0xbc, hi: 0xbc}, // Block 0x13, offset 0x14 - {value: 0x0007, lo: 0x01}, - {value: 0x06de, lo: 0x98, hi: 0x9f}, + {value: 0x0008, lo: 0x03}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x448a, lo: 0x99, hi: 0x9b}, + {value: 0x44a2, lo: 0x9e, hi: 0x9e}, // Block 0x14, offset 0x15 - {value: 0x0007, lo: 0x03}, - {value: 0x0716, lo: 0x8b, hi: 0x8c}, - {value: 0x0724, lo: 0x9c, hi: 0x9d}, - {value: 0x0732, lo: 0x9f, hi: 0x9f}, + {value: 0x0000, lo: 0x01}, + {value: 0x8007, lo: 0xbc, hi: 0xbc}, // Block 0x15, offset 0x16 - {value: 0x0000, lo: 0x02}, - {value: 0x0739, lo: 0xb3, hi: 0xb3}, - {value: 0x0740, lo: 0xb6, hi: 0xb6}, + {value: 0x0000, lo: 0x01}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, // Block 0x16, offset 0x17 - {value: 0x0007, lo: 0x02}, - {value: 0x0747, lo: 0x99, hi: 0x9b}, - {value: 0x075c, lo: 0x9e, hi: 0x9e}, + {value: 0x0000, lo: 0x08}, + {value: 0x8800, lo: 0x87, hi: 0x87}, + {value: 0x0016, lo: 0x88, hi: 0x88}, + {value: 0x000f, lo: 0x8b, hi: 0x8b}, + {value: 0x001d, lo: 0x8c, hi: 0x8c}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x8600, lo: 0x96, hi: 0x97}, + {value: 0x44ba, lo: 0x9c, hi: 0x9c}, + {value: 0x44c2, lo: 0x9d, hi: 0x9d}, // Block 0x17, offset 0x18 - {value: 0x0007, lo: 0x03}, - {value: 0x0763, lo: 0x88, hi: 0x88}, - {value: 0x076a, lo: 0x8b, hi: 0x8c}, - {value: 0x0778, lo: 0x9c, hi: 0x9d}, + {value: 0x0000, lo: 0x03}, + {value: 0x8800, lo: 0x92, hi: 0x92}, + {value: 0x0024, lo: 0x94, hi: 0x94}, + {value: 0x8600, lo: 0xbe, hi: 0xbe}, // Block 0x18, offset 0x19 - {value: 0x0000, lo: 0x01}, - {value: 0x0786, lo: 0x94, hi: 0x94}, + {value: 0x0000, lo: 0x06}, + {value: 0x8800, lo: 0x86, hi: 0x87}, + {value: 0x002b, lo: 0x8a, hi: 0x8a}, + {value: 0x0039, lo: 0x8b, hi: 0x8b}, + {value: 0x0032, lo: 0x8c, hi: 0x8c}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x8600, lo: 0x97, hi: 0x97}, // Block 0x19, offset 0x1a - {value: 0x0007, lo: 0x01}, - {value: 0x078d, lo: 0x8a, hi: 0x8c}, + {value: 0x0607, lo: 0x04}, + {value: 0x8800, lo: 0x86, hi: 0x86}, + {value: 0x3dd5, lo: 0x88, hi: 0x88}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x8054, lo: 0x95, hi: 0x96}, // Block 0x1a, offset 0x1b - {value: 0x0000, lo: 0x01}, - {value: 0x07a2, lo: 0x88, hi: 0x88}, + {value: 0x0000, lo: 0x02}, + {value: 0x8007, lo: 0xbc, hi: 0xbc}, + {value: 0x8800, lo: 0xbf, hi: 0xbf}, // Block 0x1b, offset 0x1c - {value: 0x0007, lo: 0x03}, - {value: 0x07a9, lo: 0x80, hi: 0x80}, - {value: 0x07b0, lo: 0x87, hi: 0x88}, - {value: 0x07be, lo: 0x8a, hi: 0x8b}, + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x8600, lo: 0x82, hi: 0x82}, + {value: 0x8800, lo: 0x86, hi: 0x86}, + {value: 0x0047, lo: 0x87, hi: 0x87}, + {value: 0x004e, lo: 0x88, hi: 0x88}, + {value: 0x2e37, lo: 0x8a, hi: 0x8a}, + {value: 0x00c5, lo: 0x8b, hi: 0x8b}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x8600, lo: 0x95, hi: 0x96}, // Block 0x1c, offset 0x1d - {value: 0x0007, lo: 0x01}, - {value: 0x07cf, lo: 0x8a, hi: 0x8c}, + {value: 0x0000, lo: 0x01}, + {value: 0x8600, lo: 0xbe, hi: 0xbe}, // Block 0x1d, offset 0x1e - {value: 0x0007, lo: 0x03}, - {value: 0x07e4, lo: 0x9a, hi: 0x9a}, - {value: 0x07eb, lo: 0x9c, hi: 0x9d}, - {value: 0x07fc, lo: 0x9e, hi: 0x9e}, + {value: 0x0000, lo: 0x06}, + {value: 0x8800, lo: 0x86, hi: 0x87}, + {value: 0x0055, lo: 0x8a, hi: 0x8a}, + {value: 0x0063, lo: 0x8b, hi: 0x8b}, + {value: 0x005c, lo: 0x8c, hi: 0x8c}, + {value: 0x8009, lo: 0x8d, hi: 0x8d}, + {value: 0x8600, lo: 0x97, hi: 0x97}, // Block 0x1e, offset 0x1f - {value: 0x0000, lo: 0x01}, - {value: 0x0803, lo: 0xb3, hi: 0xb3}, + {value: 0x12fd, lo: 0x07}, + {value: 0x8609, lo: 0x8a, hi: 0x8a}, + {value: 0x8600, lo: 0x8f, hi: 0x8f}, + {value: 0x8800, lo: 0x99, hi: 0x99}, + {value: 0x3ddd, lo: 0x9a, hi: 0x9a}, + {value: 0x2e3e, lo: 0x9c, hi: 0x9d}, + {value: 0x006a, lo: 0x9e, hi: 0x9e}, + {value: 0x8600, lo: 0x9f, hi: 0x9f}, // Block 0x1f, offset 0x20 - {value: 0x0000, lo: 0x01}, - {value: 0x080a, lo: 0xb3, hi: 0xb3}, + {value: 0x0000, lo: 0x03}, + {value: 0x2734, lo: 0xb3, hi: 0xb3}, + {value: 0x8067, lo: 0xb8, hi: 0xb9}, + {value: 0x8009, lo: 0xba, hi: 0xba}, // Block 0x20, offset 0x21 - {value: 0x0007, lo: 0x01}, - {value: 0x0811, lo: 0x9c, hi: 0x9d}, - // Block 0x21, offset 0x22 {value: 0x0000, lo: 0x01}, - {value: 0x081f, lo: 0x8c, hi: 0x8c}, + {value: 0x806b, lo: 0x88, hi: 0x8b}, + // Block 0x21, offset 0x22 + {value: 0x0000, lo: 0x02}, + {value: 0x2749, lo: 0xb3, hi: 0xb3}, + {value: 0x8076, lo: 0xb8, hi: 0xb9}, // Block 0x22, offset 0x23 - {value: 0x0007, lo: 0x09}, - {value: 0x0823, lo: 0x83, hi: 0x83}, - {value: 0x082a, lo: 0x8d, hi: 0x8d}, - {value: 0x0831, lo: 0x92, hi: 0x92}, - {value: 0x0838, lo: 0x97, hi: 0x97}, - {value: 0x083f, lo: 0x9c, hi: 0x9c}, - {value: 0x0846, lo: 0xa9, hi: 0xa9}, - {value: 0x084d, lo: 0xb3, hi: 0xb3}, - {value: 0x0854, lo: 0xb5, hi: 0xb7}, - {value: 0x086c, lo: 0xb8, hi: 0xb9}, + {value: 0x0000, lo: 0x03}, + {value: 0x807a, lo: 0x88, hi: 0x8b}, + {value: 0x273b, lo: 0x9c, hi: 0x9c}, + {value: 0x2742, lo: 0x9d, hi: 0x9d}, // Block 0x23, offset 0x24 - {value: 0x0000, lo: 0x07}, - {value: 0x087d, lo: 0x81, hi: 0x81}, - {value: 0x0884, lo: 0x93, hi: 0x93}, - {value: 0x088b, lo: 0x9d, hi: 0x9d}, - {value: 0x0892, lo: 0xa2, hi: 0xa2}, - {value: 0x0899, lo: 0xa7, hi: 0xa7}, - {value: 0x08a0, lo: 0xac, hi: 0xac}, - {value: 0x08a7, lo: 0xb9, hi: 0xb9}, + {value: 0x0000, lo: 0x05}, + {value: 0x07d1, lo: 0x8c, hi: 0x8c}, + {value: 0x80dc, lo: 0x98, hi: 0x99}, + {value: 0x80dc, lo: 0xb5, hi: 0xb5}, + {value: 0x80dc, lo: 0xb7, hi: 0xb7}, + {value: 0x80d8, lo: 0xb9, hi: 0xb9}, // Block 0x24, offset 0x25 - {value: 0x0000, lo: 0x01}, - {value: 0x08ae, lo: 0xa6, hi: 0xa6}, + {value: 0x0000, lo: 0x10}, + {value: 0x2757, lo: 0x83, hi: 0x83}, + {value: 0x275e, lo: 0x8d, hi: 0x8d}, + {value: 0x2765, lo: 0x92, hi: 0x92}, + {value: 0x276c, lo: 0x97, hi: 0x97}, + {value: 0x2773, lo: 0x9c, hi: 0x9c}, + {value: 0x2750, lo: 0xa9, hi: 0xa9}, + {value: 0x8081, lo: 0xb1, hi: 0xb1}, + {value: 0x8082, lo: 0xb2, hi: 0xb2}, + {value: 0x4987, lo: 0xb3, hi: 0xb3}, + {value: 0x8084, lo: 0xb4, hi: 0xb4}, + {value: 0x4990, lo: 0xb5, hi: 0xb5}, + {value: 0x44ca, lo: 0xb6, hi: 0xb6}, + {value: 0x450a, lo: 0xb7, hi: 0xb7}, + {value: 0x44d2, lo: 0xb8, hi: 0xb8}, + {value: 0x4515, lo: 0xb9, hi: 0xb9}, + {value: 0x8082, lo: 0xba, hi: 0xbd}, // Block 0x25, offset 0x26 - {value: 0x0000, lo: 0x01}, - {value: 0x08b5, lo: 0xbc, hi: 0xbc}, + {value: 0x0000, lo: 0x0b}, + {value: 0x8082, lo: 0x80, hi: 0x80}, + {value: 0x4999, lo: 0x81, hi: 0x81}, + {value: 0x80e6, lo: 0x82, hi: 0x83}, + {value: 0x8009, lo: 0x84, hi: 0x84}, + {value: 0x80e6, lo: 0x86, hi: 0x87}, + {value: 0x2781, lo: 0x93, hi: 0x93}, + {value: 0x2788, lo: 0x9d, hi: 0x9d}, + {value: 0x278f, lo: 0xa2, hi: 0xa2}, + {value: 0x2796, lo: 0xa7, hi: 0xa7}, + {value: 0x279d, lo: 0xac, hi: 0xac}, + {value: 0x277a, lo: 0xb9, hi: 0xb9}, // Block 0x26, offset 0x27 - {value: 0x0000, lo: 0x08}, - {value: 0x08b9, lo: 0x86, hi: 0x86}, - {value: 0x08c0, lo: 0x88, hi: 0x88}, - {value: 0x08c7, lo: 0x8a, hi: 0x8a}, - {value: 0x08ce, lo: 0x8c, hi: 0x8c}, - {value: 0x08d5, lo: 0x8e, hi: 0x8e}, - {value: 0x08dc, lo: 0x92, hi: 0x92}, - {value: 0x08e3, lo: 0xbb, hi: 0xbb}, - {value: 0x08ea, lo: 0xbd, hi: 0xbd}, + {value: 0x0000, lo: 0x01}, + {value: 0x80dc, lo: 0x86, hi: 0x86}, // Block 0x27, offset 0x28 - {value: 0x0007, lo: 0x02}, - {value: 0x08f1, lo: 0x80, hi: 0x81}, - {value: 0x08ff, lo: 0x83, hi: 0x83}, + {value: 0x0000, lo: 0x05}, + {value: 0x8800, lo: 0xa5, hi: 0xa5}, + {value: 0x0071, lo: 0xa6, hi: 0xa6}, + {value: 0x8600, lo: 0xae, hi: 0xae}, + {value: 0x8007, lo: 0xb7, hi: 0xb7}, + {value: 0x8009, lo: 0xb9, hi: 0xba}, // Block 0x28, offset 0x29 - {value: 0x0002, lo: 0x06}, - {value: 0x0906, lo: 0xac, hi: 0xad}, - {value: 0x090b, lo: 0xae, hi: 0xae}, - {value: 0x090d, lo: 0xb0, hi: 0xb2}, - {value: 0x0914, lo: 0xb3, hi: 0xba}, - {value: 0x0924, lo: 0xbc, hi: 0xbd}, - {value: 0x0929, lo: 0xbe, hi: 0xbf}, + {value: 0x0000, lo: 0x01}, + {value: 0x80dc, lo: 0x8d, hi: 0x8d}, // Block 0x29, offset 0x2a - {value: 0x0003, lo: 0x0a}, - {value: 0x0981, lo: 0x9b, hi: 0x9c}, - {value: 0x0986, lo: 0x9d, hi: 0x9e}, - {value: 0x0949, lo: 0x9f, hi: 0x9f}, - {value: 0x098c, lo: 0xa0, hi: 0xa0}, - {value: 0x098e, lo: 0xa1, hi: 0xa7}, - {value: 0x09a4, lo: 0xa8, hi: 0xaa}, - {value: 0x09ae, lo: 0xab, hi: 0xb8}, - {value: 0x09d9, lo: 0xb9, hi: 0xbb}, - {value: 0x09e1, lo: 0xbc, hi: 0xbe}, - {value: 0x055c, lo: 0xbf, hi: 0xbf}, + {value: 0x0000, lo: 0x01}, + {value: 0x07d5, lo: 0xbc, hi: 0xbc}, // Block 0x2a, offset 0x2b - {value: 0x0004, lo: 0x0d}, - {value: 0x09ea, lo: 0x80, hi: 0x88}, - {value: 0x0a10, lo: 0x89, hi: 0x89}, - {value: 0x0a16, lo: 0x8a, hi: 0x94}, - {value: 0x0a44, lo: 0x95, hi: 0x95}, - {value: 0x0a4a, lo: 0x96, hi: 0x96}, - {value: 0x0a50, lo: 0x97, hi: 0x97}, - {value: 0x0a56, lo: 0x98, hi: 0x9c}, - {value: 0x0a6c, lo: 0x9d, hi: 0x9d}, - {value: 0x0a72, lo: 0x9e, hi: 0xae}, - {value: 0x0ab8, lo: 0xaf, hi: 0xaf}, - {value: 0x0abe, lo: 0xb0, hi: 0xb8}, - {value: 0x0ae4, lo: 0xb9, hi: 0xb9}, - {value: 0x0aea, lo: 0xba, hi: 0xbf}, + {value: 0x0000, lo: 0x01}, + {value: 0x8800, lo: 0x80, hi: 0x92}, // Block 0x2b, offset 0x2c - {value: 0x0000, lo: 0x0d}, - {value: 0x0001, lo: 0x80, hi: 0x8a}, - {value: 0x1436, lo: 0x91, hi: 0x91}, - {value: 0x143a, lo: 0x97, hi: 0x97}, - {value: 0x143e, lo: 0xa4, hi: 0xa4}, - {value: 0x1440, lo: 0xa5, hi: 0xa5}, - {value: 0x1443, lo: 0xa6, hi: 0xa6}, - {value: 0x0001, lo: 0xaf, hi: 0xaf}, - {value: 0x1447, lo: 0xb3, hi: 0xb3}, - {value: 0x144e, lo: 0xb4, hi: 0xb4}, - {value: 0x1458, lo: 0xb6, hi: 0xb6}, - {value: 0x145f, lo: 0xb7, hi: 0xb7}, - {value: 0x1469, lo: 0xbc, hi: 0xbc}, - {value: 0x146c, lo: 0xbe, hi: 0xbe}, + {value: 0x0000, lo: 0x01}, + {value: 0x8e00, lo: 0xa1, hi: 0xb5}, // Block 0x2c, offset 0x2d - {value: 0x0002, lo: 0x09}, - {value: 0x1470, lo: 0x87, hi: 0x87}, - {value: 0x1473, lo: 0x88, hi: 0x88}, - {value: 0x1476, lo: 0x89, hi: 0x89}, - {value: 0x1479, lo: 0x97, hi: 0x97}, - {value: 0x0001, lo: 0x9f, hi: 0x9f}, - {value: 0x1486, lo: 0xb0, hi: 0xb0}, - {value: 0x097c, lo: 0xb1, hi: 0xb1}, - {value: 0x1488, lo: 0xb4, hi: 0xbb}, - {value: 0x149a, lo: 0xbc, hi: 0xbf}, + {value: 0x0000, lo: 0x01}, + {value: 0x8600, lo: 0xa8, hi: 0xbf}, // Block 0x2d, offset 0x2e - {value: 0x0006, lo: 0x03}, - {value: 0x1599, lo: 0x89, hi: 0x89}, - {value: 0x159f, lo: 0x9a, hi: 0x9b}, - {value: 0x15ab, lo: 0xae, hi: 0xae}, + {value: 0x0000, lo: 0x01}, + {value: 0x8600, lo: 0x80, hi: 0x82}, // Block 0x2e, offset 0x2f - {value: 0x0006, lo: 0x01}, - {value: 0x15b1, lo: 0x8d, hi: 0x8f}, + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0x9d, hi: 0x9f}, // Block 0x2f, offset 0x30 - {value: 0x0007, lo: 0x07}, - {value: 0x15c3, lo: 0x84, hi: 0x84}, - {value: 0x15c9, lo: 0x89, hi: 0x89}, - {value: 0x15cf, lo: 0x8c, hi: 0x8c}, - {value: 0x15d5, lo: 0xa4, hi: 0xa4}, - {value: 0x15db, lo: 0xa6, hi: 0xa6}, - {value: 0x15e1, lo: 0xac, hi: 0xad}, - {value: 0x15f2, lo: 0xaf, hi: 0xb0}, + {value: 0x0000, lo: 0x02}, + {value: 0x8009, lo: 0x94, hi: 0x94}, + {value: 0x8009, lo: 0xb4, hi: 0xb4}, // Block 0x30, offset 0x31 - {value: 0x0006, lo: 0x0b}, - {value: 0x1603, lo: 0x81, hi: 0x81}, - {value: 0x1609, lo: 0x84, hi: 0x84}, - {value: 0x160f, lo: 0x87, hi: 0x87}, - {value: 0x1615, lo: 0x89, hi: 0x89}, - {value: 0x161b, lo: 0xa0, hi: 0xa0}, - {value: 0x161f, lo: 0xa2, hi: 0xa2}, - {value: 0x1625, lo: 0xad, hi: 0xae}, - {value: 0x162f, lo: 0xaf, hi: 0xaf}, - {value: 0x1633, lo: 0xb0, hi: 0xb1}, - {value: 0x163f, lo: 0xb4, hi: 0xb5}, - {value: 0x164b, lo: 0xb8, hi: 0xb9}, + {value: 0x0000, lo: 0x02}, + {value: 0x8009, lo: 0x92, hi: 0x92}, + {value: 0x80e6, lo: 0x9d, hi: 0x9d}, // Block 0x31, offset 0x32 - {value: 0x0006, lo: 0x04}, - {value: 0x1657, lo: 0x80, hi: 0x81}, - {value: 0x1663, lo: 0x84, hi: 0x85}, - {value: 0x166f, lo: 0x88, hi: 0x89}, - {value: 0x167b, lo: 0xac, hi: 0xaf}, + {value: 0x0000, lo: 0x01}, + {value: 0x80e4, lo: 0xa9, hi: 0xa9}, // Block 0x32, offset 0x33 - {value: 0x0006, lo: 0x02}, - {value: 0x1693, lo: 0xa0, hi: 0xa3}, - {value: 0x16ab, lo: 0xaa, hi: 0xad}, + {value: 0x0008, lo: 0x02}, + {value: 0x80de, lo: 0xb9, hi: 0xba}, + {value: 0x80dc, lo: 0xbb, hi: 0xbb}, // Block 0x33, offset 0x34 - {value: 0x0004, lo: 0x01}, - {value: 0x16c3, lo: 0xa9, hi: 0xaa}, + {value: 0x0000, lo: 0x02}, + {value: 0x80e6, lo: 0x97, hi: 0x97}, + {value: 0x80dc, lo: 0x98, hi: 0x98}, // Block 0x34, offset 0x35 - {value: 0x0000, lo: 0x01}, - {value: 0x17fc, lo: 0x8c, hi: 0x8c}, + {value: 0x0000, lo: 0x03}, + {value: 0x8009, lo: 0xa0, hi: 0xa0}, + {value: 0x80e6, lo: 0xb5, hi: 0xbc}, + {value: 0x80dc, lo: 0xbf, hi: 0xbf}, // Block 0x35, offset 0x36 - {value: 0x0003, lo: 0x02}, - {value: 0x1809, lo: 0xb4, hi: 0xb4}, - {value: 0x180d, lo: 0xb5, hi: 0xb6}, + {value: 0x0000, lo: 0x08}, + {value: 0x00b0, lo: 0x80, hi: 0x80}, + {value: 0x00b7, lo: 0x81, hi: 0x81}, + {value: 0x8800, lo: 0x82, hi: 0x82}, + {value: 0x00be, lo: 0x83, hi: 0x83}, + {value: 0x8009, lo: 0x84, hi: 0x84}, + {value: 0x80e6, lo: 0xab, hi: 0xab}, + {value: 0x80dc, lo: 0xac, hi: 0xac}, + {value: 0x80e6, lo: 0xad, hi: 0xb3}, // Block 0x36, offset 0x37 {value: 0x0000, lo: 0x01}, - {value: 0x1814, lo: 0x9c, hi: 0x9c}, + {value: 0x8009, lo: 0xaa, hi: 0xaa}, // Block 0x37, offset 0x38 - {value: 0x10c6, lo: 0x01}, - {value: 0x0499, lo: 0xbc, hi: 0xbd}, + {value: 0x0000, lo: 0x02}, + {value: 0x8007, lo: 0xa6, hi: 0xa6}, + {value: 0x8009, lo: 0xb2, hi: 0xb3}, // Block 0x38, offset 0x39 {value: 0x0000, lo: 0x01}, - {value: 0x181a, lo: 0xaf, hi: 0xaf}, + {value: 0x8007, lo: 0xb7, hi: 0xb7}, // Block 0x39, offset 0x3a - {value: 0x0000, lo: 0x01}, - {value: 0x181e, lo: 0x9f, hi: 0x9f}, + {value: 0x0000, lo: 0x08}, + {value: 0x80e6, lo: 0x90, hi: 0x92}, + {value: 0x8001, lo: 0x94, hi: 0x94}, + {value: 0x80dc, lo: 0x95, hi: 0x99}, + {value: 0x80e6, lo: 0x9a, hi: 0x9b}, + {value: 0x80dc, lo: 0x9c, hi: 0x9f}, + {value: 0x80e6, lo: 0xa0, hi: 0xa0}, + {value: 0x8001, lo: 0xa2, hi: 0xa8}, + {value: 0x80dc, lo: 0xad, hi: 0xad}, // Block 0x3a, offset 0x3b - {value: 0x0000, lo: 0x01}, - {value: 0x1822, lo: 0xb3, hi: 0xb3}, + {value: 0x0002, lo: 0x0a}, + {value: 0x0111, lo: 0xac, hi: 0xac}, + {value: 0x0397, lo: 0xad, hi: 0xad}, + {value: 0x0113, lo: 0xae, hi: 0xae}, + {value: 0x0117, lo: 0xb0, hi: 0xb1}, + {value: 0x03a6, lo: 0xb2, hi: 0xb2}, + {value: 0x011d, lo: 0xb3, hi: 0xba}, + {value: 0x012d, lo: 0xbc, hi: 0xbc}, + {value: 0x03af, lo: 0xbd, hi: 0xbd}, + {value: 0x012f, lo: 0xbe, hi: 0xbe}, + {value: 0x0133, lo: 0xbf, hi: 0xbf}, // Block 0x3b, offset 0x3c - {value: 0x0004, lo: 0x01}, - {value: 0x1826, lo: 0x80, hi: 0xbf}, + {value: 0x0000, lo: 0x0e}, + {value: 0x80e6, lo: 0x80, hi: 0x81}, + {value: 0x80dc, lo: 0x82, hi: 0x82}, + {value: 0x80e6, lo: 0x83, hi: 0x89}, + {value: 0x80dc, lo: 0x8a, hi: 0x8a}, + {value: 0x80e6, lo: 0x8b, hi: 0x8c}, + {value: 0x80ea, lo: 0x8d, hi: 0x8d}, + {value: 0x80d6, lo: 0x8e, hi: 0x8e}, + {value: 0x80dc, lo: 0x8f, hi: 0x8f}, + {value: 0x80ca, lo: 0x90, hi: 0x90}, + {value: 0x80e6, lo: 0x91, hi: 0xa6}, + {value: 0x80e9, lo: 0xbc, hi: 0xbc}, + {value: 0x80dc, lo: 0xbd, hi: 0xbd}, + {value: 0x80e6, lo: 0xbe, hi: 0xbe}, + {value: 0x80dc, lo: 0xbf, hi: 0xbf}, // Block 0x3c, offset 0x3d - {value: 0x0004, lo: 0x01}, - {value: 0x1926, lo: 0x80, hi: 0xbf}, + {value: 0x0000, lo: 0x0d}, + {value: 0x00cf, lo: 0x80, hi: 0x8a}, + {value: 0x0979, lo: 0x91, hi: 0x91}, + {value: 0x4187, lo: 0x97, hi: 0x97}, + {value: 0x00eb, lo: 0xa4, hi: 0xa4}, + {value: 0x0193, lo: 0xa5, hi: 0xa5}, + {value: 0x06ad, lo: 0xa6, hi: 0xa6}, + {value: 0x00cf, lo: 0xaf, hi: 0xaf}, + {value: 0x280d, lo: 0xb3, hi: 0xb3}, + {value: 0x297a, lo: 0xb4, hi: 0xb4}, + {value: 0x2814, lo: 0xb6, hi: 0xb6}, + {value: 0x2984, lo: 0xb7, hi: 0xb7}, + {value: 0x018d, lo: 0xbc, hi: 0xbc}, + {value: 0x4155, lo: 0xbe, hi: 0xbe}, // Block 0x3d, offset 0x3e - {value: 0x0004, lo: 0x01}, - {value: 0x1a26, lo: 0x80, hi: 0xbf}, + {value: 0x0002, lo: 0x0d}, + {value: 0x0253, lo: 0x87, hi: 0x87}, + {value: 0x0250, lo: 0x88, hi: 0x88}, + {value: 0x0190, lo: 0x89, hi: 0x89}, + {value: 0x2b17, lo: 0x97, hi: 0x97}, + {value: 0x00cf, lo: 0x9f, hi: 0x9f}, + {value: 0x00ef, lo: 0xb0, hi: 0xb0}, + {value: 0x0161, lo: 0xb1, hi: 0xb1}, + {value: 0x00f7, lo: 0xb4, hi: 0xb9}, + {value: 0x00e5, lo: 0xba, hi: 0xba}, + {value: 0x09a5, lo: 0xbb, hi: 0xbb}, + {value: 0x0109, lo: 0xbc, hi: 0xbc}, + {value: 0x00df, lo: 0xbd, hi: 0xbe}, + {value: 0x016b, lo: 0xbf, hi: 0xbf}, // Block 0x3e, offset 0x3f - {value: 0x0004, lo: 0x01}, - {value: 0x1b26, lo: 0x80, hi: 0x95}, + {value: 0x0002, lo: 0x0f}, + {value: 0x00ef, lo: 0x80, hi: 0x89}, + {value: 0x00e5, lo: 0x8a, hi: 0x8a}, + {value: 0x09a5, lo: 0x8b, hi: 0x8b}, + {value: 0x0109, lo: 0x8c, hi: 0x8c}, + {value: 0x00df, lo: 0x8d, hi: 0x8e}, + {value: 0x0151, lo: 0x90, hi: 0x90}, + {value: 0x0159, lo: 0x91, hi: 0x91}, + {value: 0x016d, lo: 0x92, hi: 0x92}, + {value: 0x017f, lo: 0x93, hi: 0x93}, + {value: 0x03c4, lo: 0x94, hi: 0x94}, + {value: 0x015f, lo: 0x95, hi: 0x95}, + {value: 0x0165, lo: 0x96, hi: 0x99}, + {value: 0x016f, lo: 0x9a, hi: 0x9a}, + {value: 0x0175, lo: 0x9b, hi: 0x9c}, + {value: 0x02b3, lo: 0xa8, hi: 0xa8}, // Block 0x3f, offset 0x40 - {value: 0x0004, lo: 0x04}, - {value: 0x0001, lo: 0x80, hi: 0x80}, - {value: 0x1b7e, lo: 0xb6, hi: 0xb6}, - {value: 0x1882, lo: 0xb8, hi: 0xb8}, - {value: 0x1b82, lo: 0xb9, hi: 0xba}, + {value: 0x0000, lo: 0x0d}, + {value: 0x80e6, lo: 0x90, hi: 0x91}, + {value: 0x8001, lo: 0x92, hi: 0x93}, + {value: 0x80e6, lo: 0x94, hi: 0x97}, + {value: 0x8001, lo: 0x98, hi: 0x9a}, + {value: 0x80e6, lo: 0x9b, hi: 0x9c}, + {value: 0x80e6, lo: 0xa1, hi: 0xa1}, + {value: 0x8001, lo: 0xa5, hi: 0xa6}, + {value: 0x80e6, lo: 0xa7, hi: 0xa7}, + {value: 0x80dc, lo: 0xa8, hi: 0xa8}, + {value: 0x80e6, lo: 0xa9, hi: 0xa9}, + {value: 0x8001, lo: 0xaa, hi: 0xab}, + {value: 0x80dc, lo: 0xac, hi: 0xaf}, + {value: 0x80e6, lo: 0xb0, hi: 0xb0}, // Block 0x40, offset 0x41 - {value: 0x0005, lo: 0x0e}, - {value: 0x1c39, lo: 0x94, hi: 0x94}, - {value: 0x1c40, lo: 0x9b, hi: 0x9c}, - {value: 0x1c4a, lo: 0x9e, hi: 0x9e}, - {value: 0x1c51, lo: 0x9f, hi: 0x9f}, - {value: 0x1c58, lo: 0xac, hi: 0xac}, - {value: 0x1c5f, lo: 0xae, hi: 0xae}, - {value: 0x1c66, lo: 0xb0, hi: 0xb0}, - {value: 0x1c6d, lo: 0xb2, hi: 0xb2}, - {value: 0x1c74, lo: 0xb4, hi: 0xb4}, - {value: 0x1c7b, lo: 0xb6, hi: 0xb6}, - {value: 0x1c82, lo: 0xb8, hi: 0xb8}, - {value: 0x1c89, lo: 0xba, hi: 0xba}, - {value: 0x1c90, lo: 0xbc, hi: 0xbc}, - {value: 0x1c97, lo: 0xbe, hi: 0xbe}, + {value: 0x0007, lo: 0x06}, + {value: 0x2293, lo: 0x89, hi: 0x89}, + {value: 0x8800, lo: 0x90, hi: 0x90}, + {value: 0x8800, lo: 0x92, hi: 0x92}, + {value: 0x8800, lo: 0x94, hi: 0x94}, + {value: 0x3a9e, lo: 0x9a, hi: 0x9b}, + {value: 0x3aac, lo: 0xae, hi: 0xae}, // Block 0x41, offset 0x42 - {value: 0x0007, lo: 0x0d}, - {value: 0x1c9e, lo: 0x80, hi: 0x80}, - {value: 0x1ca5, lo: 0x82, hi: 0x82}, - {value: 0x1cac, lo: 0x85, hi: 0x85}, - {value: 0x1cb3, lo: 0x87, hi: 0x87}, - {value: 0x1cba, lo: 0x89, hi: 0x89}, - {value: 0x1cc1, lo: 0x90, hi: 0x91}, - {value: 0x1ccf, lo: 0x93, hi: 0x94}, - {value: 0x1cdd, lo: 0x96, hi: 0x97}, - {value: 0x1ceb, lo: 0x99, hi: 0x9a}, - {value: 0x1cf9, lo: 0x9c, hi: 0x9d}, - {value: 0x1d07, lo: 0xb4, hi: 0xb4}, - {value: 0x1d0e, lo: 0xb7, hi: 0xba}, - {value: 0x1d2a, lo: 0xbe, hi: 0xbf}, + {value: 0x000e, lo: 0x05}, + {value: 0x3ab3, lo: 0x8d, hi: 0x8e}, + {value: 0x3aba, lo: 0x8f, hi: 0x8f}, + {value: 0x8800, lo: 0x90, hi: 0x90}, + {value: 0x8800, lo: 0x92, hi: 0x92}, + {value: 0x8800, lo: 0x94, hi: 0x94}, // Block 0x42, offset 0x43 - {value: 0x0004, lo: 0x01}, - {value: 0x1d38, lo: 0xb1, hi: 0xbf}, + {value: 0x0173, lo: 0x0e}, + {value: 0x8800, lo: 0x83, hi: 0x83}, + {value: 0x3ac8, lo: 0x84, hi: 0x84}, + {value: 0x8800, lo: 0x88, hi: 0x88}, + {value: 0x3acf, lo: 0x89, hi: 0x89}, + {value: 0x8800, lo: 0x8b, hi: 0x8b}, + {value: 0x3ad6, lo: 0x8c, hi: 0x8c}, + {value: 0x8800, lo: 0xa3, hi: 0xa3}, + {value: 0x3add, lo: 0xa4, hi: 0xa4}, + {value: 0x8800, lo: 0xa5, hi: 0xa5}, + {value: 0x3ae4, lo: 0xa6, hi: 0xa6}, + {value: 0x281b, lo: 0xac, hi: 0xad}, + {value: 0x2822, lo: 0xaf, hi: 0xaf}, + {value: 0x2998, lo: 0xb0, hi: 0xb0}, + {value: 0x8800, lo: 0xbc, hi: 0xbc}, // Block 0x43, offset 0x44 - {value: 0x0004, lo: 0x01}, - {value: 0x1d74, lo: 0x80, hi: 0xbf}, + {value: 0x0007, lo: 0x03}, + {value: 0x3b4d, lo: 0xa0, hi: 0xa1}, + {value: 0x3b77, lo: 0xa2, hi: 0xa3}, + {value: 0x3ba1, lo: 0xaa, hi: 0xad}, // Block 0x44, offset 0x45 - {value: 0x0004, lo: 0x07}, - {value: 0x1e74, lo: 0x80, hi: 0x8e}, - {value: 0x1826, lo: 0x92, hi: 0x92}, - {value: 0x183e, lo: 0x93, hi: 0x93}, - {value: 0x1eb0, lo: 0x94, hi: 0x99}, - {value: 0x1836, lo: 0x9a, hi: 0x9a}, - {value: 0x1ec8, lo: 0x9b, hi: 0x9e}, - {value: 0x1846, lo: 0x9f, hi: 0x9f}, + {value: 0x0004, lo: 0x01}, + {value: 0x09c9, lo: 0xa9, hi: 0xaa}, // Block 0x45, offset 0x46 - {value: 0x0004, lo: 0x0f}, - {value: 0x221c, lo: 0x80, hi: 0x80}, - {value: 0x2221, lo: 0x81, hi: 0x81}, - {value: 0x2226, lo: 0x82, hi: 0x82}, - {value: 0x222b, lo: 0x83, hi: 0x83}, - {value: 0x2230, lo: 0x84, hi: 0x84}, - {value: 0x2235, lo: 0x85, hi: 0x85}, - {value: 0x223a, lo: 0x86, hi: 0x86}, - {value: 0x223f, lo: 0x87, hi: 0x87}, - {value: 0x2244, lo: 0x88, hi: 0x88}, - {value: 0x2249, lo: 0x89, hi: 0x89}, - {value: 0x224f, lo: 0x8a, hi: 0x8a}, - {value: 0x2255, lo: 0x8b, hi: 0x8b}, - {value: 0x225b, lo: 0x8c, hi: 0x8c}, - {value: 0x225e, lo: 0x8d, hi: 0x8e}, - {value: 0x2265, lo: 0x8f, hi: 0xbe}, + {value: 0x0002, lo: 0x03}, + {value: 0x0125, lo: 0x80, hi: 0x8f}, + {value: 0x0151, lo: 0x90, hi: 0xa9}, + {value: 0x00ef, lo: 0xaa, hi: 0xaa}, // Block 0x46, offset 0x47 {value: 0x0000, lo: 0x01}, - {value: 0x2a7d, lo: 0xb0, hi: 0xb0}, + {value: 0x2b24, lo: 0x8c, hi: 0x8c}, // Block 0x47, offset 0x48 - {value: 0x0004, lo: 0x0a}, - {value: 0x2a81, lo: 0x80, hi: 0x81}, - {value: 0x1a9e, lo: 0x82, hi: 0x82}, - {value: 0x2a89, lo: 0x83, hi: 0x86}, - {value: 0x1b76, lo: 0x87, hi: 0x87}, - {value: 0x1b76, lo: 0x88, hi: 0x88}, - {value: 0x2a99, lo: 0x89, hi: 0x89}, - {value: 0x1abe, lo: 0x8a, hi: 0x8a}, - {value: 0x2a9d, lo: 0x8b, hi: 0xb3}, - {value: 0x1a16, lo: 0xb4, hi: 0xb4}, - {value: 0x2b41, lo: 0xb5, hi: 0xbf}, + {value: 0x0494, lo: 0x02}, + {value: 0x06dd, lo: 0xb4, hi: 0xb4}, + {value: 0x024d, lo: 0xb5, hi: 0xb6}, // Block 0x48, offset 0x49 - {value: 0x0004, lo: 0x06}, - {value: 0x1b3a, lo: 0x80, hi: 0x80}, - {value: 0x2b6d, lo: 0x81, hi: 0x9b}, - {value: 0x2ac1, lo: 0x9c, hi: 0x9c}, - {value: 0x2bd9, lo: 0x9d, hi: 0xb0}, - {value: 0x1aa6, lo: 0xb1, hi: 0xb1}, - {value: 0x2c29, lo: 0xb2, hi: 0xbf}, + {value: 0x0000, lo: 0x01}, + {value: 0x43db, lo: 0x9c, hi: 0x9c}, // Block 0x49, offset 0x4a - {value: 0x0004, lo: 0x0a}, - {value: 0x2c61, lo: 0x80, hi: 0x80}, - {value: 0x18ba, lo: 0x81, hi: 0x81}, - {value: 0x2c65, lo: 0x82, hi: 0x89}, - {value: 0x186e, lo: 0x8a, hi: 0x8a}, - {value: 0x2c85, lo: 0x8b, hi: 0xa0}, - {value: 0x2c21, lo: 0xa1, hi: 0xa1}, - {value: 0x2cdd, lo: 0xa2, hi: 0xa9}, - {value: 0x2be1, lo: 0xaa, hi: 0xaa}, - {value: 0x2cfd, lo: 0xab, hi: 0xbe}, - {value: 0x2ac1, lo: 0xbf, hi: 0xbf}, + {value: 0x0000, lo: 0x02}, + {value: 0x0163, lo: 0xbc, hi: 0xbc}, + {value: 0x013b, lo: 0xbd, hi: 0xbd}, // Block 0x4a, offset 0x4b - {value: 0x0004, lo: 0x0b}, - {value: 0x2d4d, lo: 0x80, hi: 0x83}, - {value: 0x1b72, lo: 0x84, hi: 0x84}, - {value: 0x2d5d, lo: 0x85, hi: 0x90}, - {value: 0x2173, lo: 0x91, hi: 0x91}, - {value: 0x2d8d, lo: 0x92, hi: 0x9a}, - {value: 0x2be9, lo: 0x9b, hi: 0x9b}, - {value: 0x2db1, lo: 0x9c, hi: 0xa8}, - {value: 0x1aba, lo: 0xa9, hi: 0xa9}, - {value: 0x2de5, lo: 0xaa, hi: 0xb6}, - {value: 0x19f6, lo: 0xb7, hi: 0xb7}, - {value: 0x2e19, lo: 0xb8, hi: 0xbf}, + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0xaf, hi: 0xb1}, // Block 0x4b, offset 0x4c - {value: 0x0004, lo: 0x10}, - {value: 0x2e39, lo: 0x80, hi: 0x87}, - {value: 0x1a62, lo: 0x88, hi: 0x88}, - {value: 0x2e59, lo: 0x89, hi: 0x89}, - {value: 0x1a6e, lo: 0x8a, hi: 0x8a}, - {value: 0x2e5d, lo: 0x8b, hi: 0x8d}, - {value: 0x2e69, lo: 0x90, hi: 0x90}, - {value: 0x2e6d, lo: 0x92, hi: 0x92}, - {value: 0x2e71, lo: 0x95, hi: 0x9d}, - {value: 0x1a12, lo: 0x9e, hi: 0x9e}, - {value: 0x2e95, lo: 0xa0, hi: 0xa0}, - {value: 0x2e99, lo: 0xa2, hi: 0xa2}, - {value: 0x2e9d, lo: 0xa5, hi: 0xa6}, - {value: 0x2ea5, lo: 0xaa, hi: 0xad}, - {value: 0x2eb5, lo: 0xb0, hi: 0xbb}, - {value: 0x18d6, lo: 0xbc, hi: 0xbc}, - {value: 0x2ee5, lo: 0xbd, hi: 0xbf}, + {value: 0x0000, lo: 0x02}, + {value: 0x09bd, lo: 0xaf, hi: 0xaf}, + {value: 0x8009, lo: 0xbf, hi: 0xbf}, // Block 0x4c, offset 0x4d - {value: 0x0004, lo: 0x10}, - {value: 0x2ef1, lo: 0x80, hi: 0x8b}, - {value: 0x2187, lo: 0x8c, hi: 0x8c}, - {value: 0x2f21, lo: 0x8d, hi: 0x90}, - {value: 0x2197, lo: 0x91, hi: 0x91}, - {value: 0x2f31, lo: 0x92, hi: 0x96}, - {value: 0x2cb1, lo: 0x97, hi: 0x97}, - {value: 0x2f45, lo: 0x98, hi: 0x9d}, - {value: 0x2f59, lo: 0x9e, hi: 0xa6}, - {value: 0x2e9d, lo: 0xa7, hi: 0xa7}, - {value: 0x2f7d, lo: 0xa8, hi: 0xac}, - {value: 0x2f92, lo: 0xad, hi: 0xad}, - {value: 0x2f96, lo: 0xb0, hi: 0xb7}, - {value: 0x2ecd, lo: 0xb8, hi: 0xb8}, - {value: 0x2fb6, lo: 0xb9, hi: 0xbb}, - {value: 0x2e69, lo: 0xbc, hi: 0xbc}, - {value: 0x2fc2, lo: 0xbd, hi: 0xbf}, + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0xa0, hi: 0xbf}, // Block 0x4d, offset 0x4e - {value: 0x0005, lo: 0x06}, - {value: 0x3277, lo: 0x80, hi: 0x80}, - {value: 0x327e, lo: 0x81, hi: 0x81}, - {value: 0x3285, lo: 0x82, hi: 0x82}, - {value: 0x326d, lo: 0x83, hi: 0x83}, - {value: 0x328c, lo: 0x84, hi: 0x84}, - {value: 0x3293, lo: 0x85, hi: 0xbf}, + {value: 0x0000, lo: 0x01}, + {value: 0x1301, lo: 0x9f, hi: 0x9f}, // Block 0x4e, offset 0x4f - {value: 0x0005, lo: 0x10}, - {value: 0x356a, lo: 0x80, hi: 0x8b}, - {value: 0x3514, lo: 0x8c, hi: 0x8c}, - {value: 0x35a6, lo: 0x8d, hi: 0x90}, - {value: 0x3533, lo: 0x91, hi: 0xa7}, - {value: 0x3514, lo: 0xa8, hi: 0xa8}, - {value: 0x35a6, lo: 0xa9, hi: 0xac}, - {value: 0x3597, lo: 0xad, hi: 0xaf}, - {value: 0x3514, lo: 0xb0, hi: 0xb0}, - {value: 0x350f, lo: 0xb1, hi: 0xb1}, - {value: 0x3519, lo: 0xb2, hi: 0xb2}, - {value: 0x333d, lo: 0xb3, hi: 0xb3}, - {value: 0x3306, lo: 0xb4, hi: 0xb6}, - {value: 0x3597, lo: 0xb7, hi: 0xb9}, - {value: 0x333d, lo: 0xba, hi: 0xbb}, - {value: 0x35ba, lo: 0xbc, hi: 0xbc}, - {value: 0x35ba, lo: 0xbd, hi: 0xbd}, + {value: 0x0000, lo: 0x01}, + {value: 0x1b61, lo: 0xb3, hi: 0xb3}, // Block 0x4f, offset 0x50 - {value: 0x0007, lo: 0x0d}, - {value: 0x35bf, lo: 0x90, hi: 0x91}, - {value: 0x35c6, lo: 0x92, hi: 0x98}, - {value: 0x35f0, lo: 0x99, hi: 0x9f}, - {value: 0x361a, lo: 0xa0, hi: 0xa2}, - {value: 0x3628, lo: 0xa3, hi: 0xa4}, - {value: 0x362f, lo: 0xa5, hi: 0xa7}, - {value: 0x363d, lo: 0xa8, hi: 0xaa}, - {value: 0x364b, lo: 0xab, hi: 0xac}, - {value: 0x3652, lo: 0xad, hi: 0xaf}, - {value: 0x3660, lo: 0xb0, hi: 0xb1}, - {value: 0x3667, lo: 0xb2, hi: 0xb6}, - {value: 0x3683, lo: 0xb7, hi: 0xbc}, - {value: 0x36a6, lo: 0xbd, hi: 0xbf}, + {value: 0x0004, lo: 0x0b}, + {value: 0x1ac9, lo: 0x80, hi: 0x82}, + {value: 0x1ae1, lo: 0x83, hi: 0x83}, + {value: 0x1af9, lo: 0x84, hi: 0x85}, + {value: 0x1b09, lo: 0x86, hi: 0x89}, + {value: 0x1b1d, lo: 0x8a, hi: 0x8c}, + {value: 0x1b31, lo: 0x8d, hi: 0x8d}, + {value: 0x1b39, lo: 0x8e, hi: 0x8e}, + {value: 0x1b41, lo: 0x8f, hi: 0x90}, + {value: 0x1b4d, lo: 0x91, hi: 0x93}, + {value: 0x1b5d, lo: 0x94, hi: 0x94}, + {value: 0x1b65, lo: 0x95, hi: 0x95}, // Block 0x50, offset 0x51 - {value: 0x0007, lo: 0x0d}, - {value: 0x36bb, lo: 0x80, hi: 0x83}, - {value: 0x36d0, lo: 0x84, hi: 0x85}, - {value: 0x36d7, lo: 0x86, hi: 0x87}, - {value: 0x36de, lo: 0x88, hi: 0x8f}, - {value: 0x3716, lo: 0x92, hi: 0x97}, - {value: 0x3739, lo: 0x98, hi: 0x9c}, - {value: 0x3755, lo: 0x9d, hi: 0xb3}, - {value: 0x36ad, lo: 0xb4, hi: 0xb4}, - {value: 0x36bb, lo: 0xb5, hi: 0xb5}, - {value: 0x37f6, lo: 0xb6, hi: 0xbb}, - {value: 0x3812, lo: 0xbc, hi: 0xbc}, - {value: 0x3804, lo: 0xbd, hi: 0xbd}, - {value: 0x3820, lo: 0xbe, hi: 0xbf}, + {value: 0x0004, lo: 0x08}, + {value: 0x00cf, lo: 0x80, hi: 0x80}, + {value: 0x80da, lo: 0xaa, hi: 0xaa}, + {value: 0x80e4, lo: 0xab, hi: 0xac}, + {value: 0x80de, lo: 0xad, hi: 0xad}, + {value: 0x80e0, lo: 0xae, hi: 0xae}, + {value: 0x80e0, lo: 0xaf, hi: 0xaf}, + {value: 0x09f1, lo: 0xb6, hi: 0xb6}, + {value: 0x0dc5, lo: 0xb8, hi: 0xba}, // Block 0x51, offset 0x52 - {value: 0x0009, lo: 0x0e}, - {value: 0x382e, lo: 0x80, hi: 0x80}, - {value: 0x3835, lo: 0x81, hi: 0x81}, - {value: 0x383c, lo: 0x82, hi: 0x82}, - {value: 0x3819, lo: 0x83, hi: 0x83}, - {value: 0x367c, lo: 0x84, hi: 0x84}, - {value: 0x3636, lo: 0x85, hi: 0x85}, - {value: 0x3843, lo: 0x86, hi: 0x86}, - {value: 0x384a, lo: 0x87, hi: 0x87}, - {value: 0x3851, lo: 0xb0, hi: 0xb0}, - {value: 0x3858, lo: 0xb1, hi: 0xb1}, - {value: 0x385f, lo: 0xb2, hi: 0xb9}, - {value: 0x38a5, lo: 0xba, hi: 0xba}, - {value: 0x38c7, lo: 0xbb, hi: 0xbb}, - {value: 0x38d7, lo: 0xbc, hi: 0xbc}, + {value: 0x0004, lo: 0x06}, + {value: 0x07d9, lo: 0xb1, hi: 0xb2}, + {value: 0x0901, lo: 0xb3, hi: 0xb3}, + {value: 0x07e1, lo: 0xb4, hi: 0xb4}, + {value: 0x0905, lo: 0xb5, hi: 0xb6}, + {value: 0x07e5, lo: 0xb7, hi: 0xb9}, + {value: 0x090d, lo: 0xba, hi: 0xbf}, // Block 0x52, offset 0x53 - {value: 0x0004, lo: 0x10}, - {value: 0x38e0, lo: 0x90, hi: 0x90}, - {value: 0x38e2, lo: 0x91, hi: 0x93}, - {value: 0x04e1, lo: 0x94, hi: 0x94}, - {value: 0x38ec, lo: 0x95, hi: 0x95}, - {value: 0x38ee, lo: 0x96, hi: 0x96}, - {value: 0x38f0, lo: 0x97, hi: 0x98}, - {value: 0x1443, lo: 0x99, hi: 0x99}, - {value: 0x1440, lo: 0xb0, hi: 0xb0}, - {value: 0x38f8, lo: 0xb1, hi: 0xb3}, - {value: 0x3900, lo: 0xb4, hi: 0xb4}, - {value: 0x149c, lo: 0xb5, hi: 0xb5}, - {value: 0x149e, lo: 0xb6, hi: 0xb6}, - {value: 0x3902, lo: 0xb7, hi: 0xb7}, - {value: 0x3904, lo: 0xb8, hi: 0xb8}, - {value: 0x3906, lo: 0xb9, hi: 0xbe}, - {value: 0x16c3, lo: 0xbf, hi: 0xbf}, + {value: 0x0004, lo: 0x0c}, + {value: 0x082d, lo: 0x80, hi: 0x80}, + {value: 0x07f1, lo: 0x81, hi: 0x83}, + {value: 0x0841, lo: 0x84, hi: 0x84}, + {value: 0x07fd, lo: 0x85, hi: 0x8e}, + {value: 0x088d, lo: 0x8f, hi: 0xa3}, + {value: 0x0889, lo: 0xa4, hi: 0xa4}, + {value: 0x0825, lo: 0xa5, hi: 0xa6}, + {value: 0x0925, lo: 0xa7, hi: 0xad}, + {value: 0x0831, lo: 0xae, hi: 0xae}, + {value: 0x0941, lo: 0xaf, hi: 0xb0}, + {value: 0x0835, lo: 0xb1, hi: 0xb3}, + {value: 0x0845, lo: 0xb4, hi: 0xbf}, // Block 0x53, offset 0x54 - {value: 0x0004, lo: 0x04}, - {value: 0x22a5, lo: 0x80, hi: 0x9c}, - {value: 0x3a38, lo: 0x9d, hi: 0x9f}, - {value: 0x1e04, lo: 0xa0, hi: 0xa0}, - {value: 0x1d38, lo: 0xa1, hi: 0xbe}, + {value: 0x0000, lo: 0x02}, + {value: 0x80e6, lo: 0xaf, hi: 0xaf}, + {value: 0x80e6, lo: 0xbc, hi: 0xbd}, // Block 0x54, offset 0x55 - {value: 0x0004, lo: 0x0c}, - {value: 0x1db0, lo: 0x82, hi: 0x87}, - {value: 0x1dc8, lo: 0x8a, hi: 0x8f}, - {value: 0x1de0, lo: 0x92, hi: 0x97}, - {value: 0x1df8, lo: 0x9a, hi: 0x9c}, - {value: 0x3a44, lo: 0xa0, hi: 0xa0}, - {value: 0x3a47, lo: 0xa1, hi: 0xa1}, - {value: 0x3a4a, lo: 0xa2, hi: 0xa2}, - {value: 0x0009, lo: 0xa3, hi: 0xa3}, - {value: 0x3a4d, lo: 0xa4, hi: 0xa4}, - {value: 0x3a50, lo: 0xa5, hi: 0xa5}, - {value: 0x3a53, lo: 0xa6, hi: 0xa6}, - {value: 0x3a57, lo: 0xa8, hi: 0xae}, + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0xb0, hi: 0xb1}, // Block 0x55, offset 0x56 - {value: 0x0000, lo: 0x03}, - {value: 0x3a73, lo: 0x9a, hi: 0x9a}, - {value: 0x3a7c, lo: 0x9c, hi: 0x9c}, - {value: 0x3a85, lo: 0xab, hi: 0xab}, + {value: 0x0000, lo: 0x01}, + {value: 0x1b69, lo: 0xb0, hi: 0xb0}, // Block 0x56, offset 0x57 - {value: 0x000d, lo: 0x03}, - {value: 0x3a8e, lo: 0x9e, hi: 0x9e}, - {value: 0x3a97, lo: 0x9f, hi: 0x9f}, - {value: 0x3aa0, lo: 0xa0, hi: 0xa4}, + {value: 0x0000, lo: 0x01}, + {value: 0x8009, lo: 0x86, hi: 0x86}, // Block 0x57, offset 0x58 - {value: 0x0009, lo: 0x03}, - {value: 0x3ae1, lo: 0xbb, hi: 0xbd}, - {value: 0x3b00, lo: 0xbe, hi: 0xbe}, - {value: 0x3b0d, lo: 0xbf, hi: 0xbf}, + {value: 0x0000, lo: 0x02}, + {value: 0x8009, lo: 0x84, hi: 0x84}, + {value: 0x80e6, lo: 0xa0, hi: 0xb1}, // Block 0x58, offset 0x59 {value: 0x0000, lo: 0x01}, - {value: 0x3b1a, lo: 0x80, hi: 0x80}, + {value: 0x80dc, lo: 0xab, hi: 0xad}, // Block 0x59, offset 0x5a - {value: 0x0003, lo: 0x0e}, - {value: 0x14c8, lo: 0x80, hi: 0x80}, - {value: 0x092b, lo: 0x81, hi: 0x81}, - {value: 0x17f6, lo: 0x82, hi: 0x82}, - {value: 0x092d, lo: 0x83, hi: 0x83}, - {value: 0x092f, lo: 0x84, hi: 0x84}, - {value: 0x155f, lo: 0x85, hi: 0x85}, - {value: 0x0931, lo: 0x86, hi: 0x86}, - {value: 0x1570, lo: 0x87, hi: 0x87}, - {value: 0x17f8, lo: 0x88, hi: 0x88}, - {value: 0x14d4, lo: 0x89, hi: 0x89}, - {value: 0x3c2c, lo: 0x8a, hi: 0x8a}, - {value: 0x293d, lo: 0x8b, hi: 0x8b}, - {value: 0x3c2f, lo: 0x8c, hi: 0x8e}, - {value: 0x3c39, lo: 0x8f, hi: 0x8f}, + {value: 0x0000, lo: 0x01}, + {value: 0x8009, lo: 0x93, hi: 0x93}, // Block 0x5a, offset 0x5b {value: 0x0000, lo: 0x01}, - {value: 0x3c3c, lo: 0x90, hi: 0x90}, + {value: 0x8007, lo: 0xb3, hi: 0xb3}, // Block 0x5b, offset 0x5c - {value: 0x000a, lo: 0x03}, - {value: 0x3cc1, lo: 0x80, hi: 0x88}, - {value: 0x3d1b, lo: 0x90, hi: 0x90}, - {value: 0x3d1f, lo: 0x91, hi: 0x91}, + {value: 0x0000, lo: 0x01}, + {value: 0x8009, lo: 0x80, hi: 0x80}, // Block 0x5c, offset 0x5d - {value: 0x0004, lo: 0x0d}, - {value: 0x4463, lo: 0x80, hi: 0x81}, - {value: 0x446c, lo: 0x82, hi: 0x89}, - {value: 0x30a2, lo: 0x8a, hi: 0x8a}, - {value: 0x448d, lo: 0x8b, hi: 0x90}, - {value: 0x44a6, lo: 0x91, hi: 0x92}, - {value: 0x44af, lo: 0x93, hi: 0x93}, - {value: 0x44b4, lo: 0x94, hi: 0x94}, - {value: 0x1b42, lo: 0x95, hi: 0x95}, - {value: 0x44b9, lo: 0x96, hi: 0x96}, - {value: 0x1b52, lo: 0x97, hi: 0x97}, - {value: 0x44bd, lo: 0x98, hi: 0x9b}, - {value: 0x1b66, lo: 0x9c, hi: 0x9c}, - {value: 0x44cd, lo: 0x9d, hi: 0x9d}, + {value: 0x0000, lo: 0x05}, + {value: 0x80e6, lo: 0xb0, hi: 0xb0}, + {value: 0x80e6, lo: 0xb2, hi: 0xb3}, + {value: 0x80dc, lo: 0xb4, hi: 0xb4}, + {value: 0x80e6, lo: 0xb7, hi: 0xb8}, + {value: 0x80e6, lo: 0xbe, hi: 0xbf}, + // Block 0x5d, offset 0x5e + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0x81, hi: 0x81}, + // Block 0x5e, offset 0x5f + {value: 0x0000, lo: 0x01}, + {value: 0x8009, lo: 0xad, hi: 0xad}, + // Block 0x5f, offset 0x60 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x80, hi: 0xbf}, + // Block 0x60, offset 0x61 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x80, hi: 0xa3}, + // Block 0x61, offset 0x62 + {value: 0x0002, lo: 0x01}, + {value: 0x00d1, lo: 0x81, hi: 0xbf}, + // Block 0x62, offset 0x63 + {value: 0x0004, lo: 0x0e}, + {value: 0x088d, lo: 0x82, hi: 0x87}, + {value: 0x08a5, lo: 0x8a, hi: 0x8f}, + {value: 0x08bd, lo: 0x92, hi: 0x97}, + {value: 0x08d5, lo: 0x9a, hi: 0x9c}, + {value: 0x0382, lo: 0xa0, hi: 0xa0}, + {value: 0x0385, lo: 0xa1, hi: 0xa1}, + {value: 0x038e, lo: 0xa2, hi: 0xa2}, + {value: 0x4150, lo: 0xa3, hi: 0xa3}, + {value: 0x038b, lo: 0xa4, hi: 0xa4}, + {value: 0x0388, lo: 0xa5, hi: 0xa5}, + {value: 0x0985, lo: 0xa6, hi: 0xa6}, + {value: 0x09a9, lo: 0xa8, hi: 0xa8}, + {value: 0x0989, lo: 0xa9, hi: 0xac}, + {value: 0x09ad, lo: 0xad, hi: 0xae}, + // Block 0x63, offset 0x64 + {value: 0x0000, lo: 0x01}, + {value: 0x80dc, lo: 0xbd, hi: 0xbd}, + // Block 0x64, offset 0x65 + {value: 0x00db, lo: 0x05}, + {value: 0x80dc, lo: 0x8d, hi: 0x8d}, + {value: 0x80e6, lo: 0x8f, hi: 0x8f}, + {value: 0x80e6, lo: 0xb8, hi: 0xb8}, + {value: 0x8001, lo: 0xb9, hi: 0xba}, + {value: 0x8009, lo: 0xbf, hi: 0xbf}, + // Block 0x65, offset 0x66 + {value: 0x05fe, lo: 0x07}, + {value: 0x8800, lo: 0x99, hi: 0x99}, + {value: 0x411d, lo: 0x9a, hi: 0x9a}, + {value: 0x8800, lo: 0x9b, hi: 0x9b}, + {value: 0x4127, lo: 0x9c, hi: 0x9c}, + {value: 0x8800, lo: 0xa5, hi: 0xa5}, + {value: 0x4131, lo: 0xab, hi: 0xab}, + {value: 0x8009, lo: 0xb9, hi: 0xba}, + // Block 0x66, offset 0x67 + {value: 0x0000, lo: 0x0c}, + {value: 0x44e2, lo: 0x9e, hi: 0x9e}, + {value: 0x44ec, lo: 0x9f, hi: 0x9f}, + {value: 0x4555, lo: 0xa0, hi: 0xa0}, + {value: 0x4563, lo: 0xa1, hi: 0xa1}, + {value: 0x4571, lo: 0xa2, hi: 0xa2}, + {value: 0x457f, lo: 0xa3, hi: 0xa3}, + {value: 0x458d, lo: 0xa4, hi: 0xa4}, + {value: 0x80d8, lo: 0xa5, hi: 0xa6}, + {value: 0x8001, lo: 0xa7, hi: 0xa9}, + {value: 0x80e2, lo: 0xad, hi: 0xad}, + {value: 0x80d8, lo: 0xae, hi: 0xb2}, + {value: 0x80dc, lo: 0xbb, hi: 0xbf}, + // Block 0x67, offset 0x68 + {value: 0x0000, lo: 0x09}, + {value: 0x80dc, lo: 0x80, hi: 0x82}, + {value: 0x80e6, lo: 0x85, hi: 0x89}, + {value: 0x80dc, lo: 0x8a, hi: 0x8b}, + {value: 0x80e6, lo: 0xaa, hi: 0xad}, + {value: 0x44f6, lo: 0xbb, hi: 0xbb}, + {value: 0x4500, lo: 0xbc, hi: 0xbc}, + {value: 0x459b, lo: 0xbd, hi: 0xbd}, + {value: 0x45b7, lo: 0xbe, hi: 0xbe}, + {value: 0x45a9, lo: 0xbf, hi: 0xbf}, + // Block 0x68, offset 0x69 + {value: 0x0000, lo: 0x01}, + {value: 0x45c5, lo: 0x80, hi: 0x80}, + // Block 0x69, offset 0x6a + {value: 0x0000, lo: 0x01}, + {value: 0x80e6, lo: 0x82, hi: 0x84}, + // Block 0x6a, offset 0x6b + {value: 0x0002, lo: 0x03}, + {value: 0x0111, lo: 0x80, hi: 0x99}, + {value: 0x0151, lo: 0x9a, hi: 0xb3}, + {value: 0x0111, lo: 0xb4, hi: 0xbf}, + // Block 0x6b, offset 0x6c + {value: 0x0002, lo: 0x04}, + {value: 0x0129, lo: 0x80, hi: 0x8d}, + {value: 0x0151, lo: 0x8e, hi: 0x94}, + {value: 0x0161, lo: 0x96, hi: 0xa7}, + {value: 0x0111, lo: 0xa8, hi: 0xbf}, + // Block 0x6c, offset 0x6d + {value: 0x0002, lo: 0x0b}, + {value: 0x0141, lo: 0x80, hi: 0x81}, + {value: 0x0151, lo: 0x82, hi: 0x9b}, + {value: 0x0111, lo: 0x9c, hi: 0x9c}, + {value: 0x0115, lo: 0x9e, hi: 0x9f}, + {value: 0x011d, lo: 0xa2, hi: 0xa2}, + {value: 0x0123, lo: 0xa5, hi: 0xa6}, + {value: 0x012b, lo: 0xa9, hi: 0xac}, + {value: 0x0135, lo: 0xae, hi: 0xb5}, + {value: 0x0151, lo: 0xb6, hi: 0xb9}, + {value: 0x015b, lo: 0xbb, hi: 0xbb}, + {value: 0x015f, lo: 0xbd, hi: 0xbf}, + // Block 0x6d, offset 0x6e + {value: 0x0002, lo: 0x04}, + {value: 0x0165, lo: 0x80, hi: 0x83}, + {value: 0x016f, lo: 0x85, hi: 0x8f}, + {value: 0x0111, lo: 0x90, hi: 0xa9}, + {value: 0x0151, lo: 0xaa, hi: 0xbf}, + // Block 0x6e, offset 0x6f + {value: 0x0002, lo: 0x08}, + {value: 0x017d, lo: 0x80, hi: 0x83}, + {value: 0x0111, lo: 0x84, hi: 0x85}, + {value: 0x0117, lo: 0x87, hi: 0x8a}, + {value: 0x0123, lo: 0x8d, hi: 0x94}, + {value: 0x0135, lo: 0x96, hi: 0x9c}, + {value: 0x0151, lo: 0x9e, hi: 0xb7}, + {value: 0x0111, lo: 0xb8, hi: 0xb9}, + {value: 0x0117, lo: 0xbb, hi: 0xbe}, + // Block 0x6f, offset 0x70 + {value: 0x0002, lo: 0x05}, + {value: 0x0121, lo: 0x80, hi: 0x84}, + {value: 0x012d, lo: 0x86, hi: 0x86}, + {value: 0x0135, lo: 0x8a, hi: 0x90}, + {value: 0x0151, lo: 0x92, hi: 0xab}, + {value: 0x0111, lo: 0xac, hi: 0xbf}, + // Block 0x70, offset 0x71 + {value: 0x0002, lo: 0x04}, + {value: 0x0139, lo: 0x80, hi: 0x85}, + {value: 0x0151, lo: 0x86, hi: 0x9f}, + {value: 0x0111, lo: 0xa0, hi: 0xb9}, + {value: 0x0151, lo: 0xba, hi: 0xbf}, + // Block 0x71, offset 0x72 + {value: 0x0002, lo: 0x03}, + {value: 0x015d, lo: 0x80, hi: 0x93}, + {value: 0x0111, lo: 0x94, hi: 0xad}, + {value: 0x0151, lo: 0xae, hi: 0xbf}, + // Block 0x72, offset 0x73 + {value: 0x0002, lo: 0x04}, + {value: 0x0175, lo: 0x80, hi: 0x87}, + {value: 0x0111, lo: 0x88, hi: 0xa1}, + {value: 0x0151, lo: 0xa2, hi: 0xbb}, + {value: 0x0111, lo: 0xbc, hi: 0xbf}, + // Block 0x73, offset 0x74 + {value: 0x0002, lo: 0x03}, + {value: 0x0119, lo: 0x80, hi: 0x95}, + {value: 0x0151, lo: 0x96, hi: 0xaf}, + {value: 0x0111, lo: 0xb0, hi: 0xbf}, + // Block 0x74, offset 0x75 + {value: 0x0003, lo: 0x0f}, + {value: 0x0475, lo: 0x80, hi: 0x80}, + {value: 0x099d, lo: 0x81, hi: 0x81}, + {value: 0x0478, lo: 0x82, hi: 0x9a}, + {value: 0x0999, lo: 0x9b, hi: 0x9b}, + {value: 0x0484, lo: 0x9c, hi: 0x9c}, + {value: 0x048d, lo: 0x9d, hi: 0x9d}, + {value: 0x0493, lo: 0x9e, hi: 0x9e}, + {value: 0x04b7, lo: 0x9f, hi: 0x9f}, + {value: 0x04a8, lo: 0xa0, hi: 0xa0}, + {value: 0x04a5, lo: 0xa1, hi: 0xa1}, + {value: 0x0430, lo: 0xa2, hi: 0xb2}, + {value: 0x0445, lo: 0xb3, hi: 0xb3}, + {value: 0x0463, lo: 0xb4, hi: 0xba}, + {value: 0x099d, lo: 0xbb, hi: 0xbb}, + {value: 0x0478, lo: 0xbc, hi: 0xbf}, + // Block 0x75, offset 0x76 + {value: 0x0003, lo: 0x0d}, + {value: 0x0484, lo: 0x80, hi: 0x94}, + {value: 0x0999, lo: 0x95, hi: 0x95}, + {value: 0x0484, lo: 0x96, hi: 0x96}, + {value: 0x048d, lo: 0x97, hi: 0x97}, + {value: 0x0493, lo: 0x98, hi: 0x98}, + {value: 0x04b7, lo: 0x99, hi: 0x99}, + {value: 0x04a8, lo: 0x9a, hi: 0x9a}, + {value: 0x04a5, lo: 0x9b, hi: 0x9b}, + {value: 0x0430, lo: 0x9c, hi: 0xac}, + {value: 0x0445, lo: 0xad, hi: 0xad}, + {value: 0x0463, lo: 0xae, hi: 0xb4}, + {value: 0x099d, lo: 0xb5, hi: 0xb5}, + {value: 0x0478, lo: 0xb6, hi: 0xbf}, + // Block 0x76, offset 0x77 + {value: 0x0003, lo: 0x0d}, + {value: 0x0496, lo: 0x80, hi: 0x8e}, + {value: 0x0999, lo: 0x8f, hi: 0x8f}, + {value: 0x0484, lo: 0x90, hi: 0x90}, + {value: 0x048d, lo: 0x91, hi: 0x91}, + {value: 0x0493, lo: 0x92, hi: 0x92}, + {value: 0x04b7, lo: 0x93, hi: 0x93}, + {value: 0x04a8, lo: 0x94, hi: 0x94}, + {value: 0x04a5, lo: 0x95, hi: 0x95}, + {value: 0x0430, lo: 0x96, hi: 0xa6}, + {value: 0x0445, lo: 0xa7, hi: 0xa7}, + {value: 0x0463, lo: 0xa8, hi: 0xae}, + {value: 0x099d, lo: 0xaf, hi: 0xaf}, + {value: 0x0478, lo: 0xb0, hi: 0xbf}, + // Block 0x77, offset 0x78 + {value: 0x0003, lo: 0x0d}, + {value: 0x04a8, lo: 0x80, hi: 0x88}, + {value: 0x0999, lo: 0x89, hi: 0x89}, + {value: 0x0484, lo: 0x8a, hi: 0x8a}, + {value: 0x048d, lo: 0x8b, hi: 0x8b}, + {value: 0x0493, lo: 0x8c, hi: 0x8c}, + {value: 0x04b7, lo: 0x8d, hi: 0x8d}, + {value: 0x04a8, lo: 0x8e, hi: 0x8e}, + {value: 0x04a5, lo: 0x8f, hi: 0x8f}, + {value: 0x0430, lo: 0x90, hi: 0xa0}, + {value: 0x0445, lo: 0xa1, hi: 0xa1}, + {value: 0x0463, lo: 0xa2, hi: 0xa8}, + {value: 0x099d, lo: 0xa9, hi: 0xa9}, + {value: 0x0478, lo: 0xaa, hi: 0xbf}, + // Block 0x78, offset 0x79 + {value: 0x0002, lo: 0x07}, + {value: 0x0131, lo: 0x80, hi: 0x89}, + {value: 0x0271, lo: 0x8a, hi: 0x8a}, + {value: 0x029b, lo: 0x8b, hi: 0x8b}, + {value: 0x02b6, lo: 0x8c, hi: 0x8c}, + {value: 0x02bc, lo: 0x8d, hi: 0x8d}, + {value: 0x0711, lo: 0x8e, hi: 0x8e}, + {value: 0x02c8, lo: 0x8f, hi: 0x8f}, + // Block 0x79, offset 0x7a + {value: 0x0000, lo: 0x01}, + {value: 0x025f, lo: 0x90, hi: 0x90}, + // Block 0x7a, offset 0x7b + {value: 0x0028, lo: 0x09}, + {value: 0x29de, lo: 0x80, hi: 0x80}, + {value: 0x29a2, lo: 0x81, hi: 0x81}, + {value: 0x29ac, lo: 0x82, hi: 0x82}, + {value: 0x29c0, lo: 0x83, hi: 0x84}, + {value: 0x29ca, lo: 0x85, hi: 0x86}, + {value: 0x29b6, lo: 0x87, hi: 0x87}, + {value: 0x29d4, lo: 0x88, hi: 0x88}, + {value: 0x10ad, lo: 0x90, hi: 0x90}, + {value: 0x0e25, lo: 0x91, hi: 0x91}, } -// nfkcDecompLookup: 960 bytes +// nfkcLookup: 1152 bytes // Block 0 is the null block. -var nfkcDecompLookup = [960]uint8{ +var nfkcLookup = [1152]uint8{ // Block 0x0, offset 0x0 // Block 0x1, offset 0x40 // Block 0x2, offset 0x80 // Block 0x3, offset 0xc0 - 0x0c2: 0x42, 0x0c3: 0x43, 0x0c4: 0x44, 0x0c5: 0x45, 0x0c6: 0x46, 0x0c7: 0x03, - 0x0c8: 0x47, 0x0ca: 0x48, 0x0cb: 0x49, 0x0cd: 0x4a, 0x0ce: 0x4b, 0x0cf: 0x4c, - 0x0d0: 0x4d, 0x0d1: 0x4e, 0x0d3: 0x4f, 0x0d6: 0x50, - 0x0d8: 0x51, 0x0d9: 0x52, 0x0db: 0x53, + 0x0c2: 0x57, 0x0c3: 0x03, 0x0c4: 0x04, 0x0c5: 0x05, 0x0c6: 0x58, 0x0c7: 0x06, + 0x0c8: 0x07, 0x0ca: 0x59, 0x0cb: 0x5a, 0x0cc: 0x08, 0x0cd: 0x09, 0x0ce: 0x0a, 0x0cf: 0x0b, + 0x0d0: 0x0c, 0x0d1: 0x5b, 0x0d2: 0x5c, 0x0d3: 0x0d, 0x0d6: 0x0e, 0x0d7: 0x5d, + 0x0d8: 0x5e, 0x0d9: 0x0f, 0x0db: 0x5f, 0x0dc: 0x60, 0x0dd: 0x61, 0x0df: 0x62, 0x0e0: 0x04, 0x0e1: 0x05, 0x0e2: 0x06, 0x0e3: 0x07, - 0x0ea: 0x08, 0x0ef: 0x09, - 0x0f0: 0x0e, + 0x0ea: 0x08, 0x0eb: 0x09, 0x0ec: 0x09, 0x0ed: 0x0a, 0x0ef: 0x0b, + 0x0f0: 0x11, // Block 0x4, offset 0x100 - 0x124: 0x54, 0x125: 0x55, 0x127: 0x56, - 0x128: 0x57, 0x129: 0x58, 0x12d: 0x59, 0x12e: 0x5a, 0x12f: 0x5b, - 0x131: 0x5c, 0x133: 0x5d, 0x135: 0x5e, 0x137: 0x5f, - 0x138: 0x60, 0x13a: 0x61, 0x13b: 0x62, 0x13c: 0x63, 0x13d: 0x64, 0x13e: 0x65, + 0x120: 0x63, 0x121: 0x64, 0x124: 0x65, 0x125: 0x66, 0x126: 0x67, 0x127: 0x68, + 0x128: 0x69, 0x129: 0x6a, 0x12a: 0x6b, 0x12b: 0x6c, 0x12c: 0x67, 0x12d: 0x6d, 0x12e: 0x6e, 0x12f: 0x6f, + 0x131: 0x70, 0x132: 0x71, 0x133: 0x72, 0x134: 0x73, 0x135: 0x74, 0x137: 0x75, + 0x138: 0x76, 0x139: 0x77, 0x13a: 0x78, 0x13b: 0x79, 0x13c: 0x7a, 0x13d: 0x7b, 0x13e: 0x7c, 0x13f: 0x7d, // Block 0x5, offset 0x140 - 0x140: 0x66, 0x143: 0x67, - 0x16c: 0x68, 0x16d: 0x69, - 0x174: 0x6a, 0x175: 0x04, 0x176: 0x6b, - 0x178: 0x6c, 0x179: 0x05, 0x17a: 0x06, 0x17b: 0x07, 0x17c: 0x08, 0x17d: 0x09, 0x17e: 0x0a, 0x17f: 0x0b, + 0x140: 0x7e, 0x142: 0x7f, 0x143: 0x80, 0x144: 0x81, 0x145: 0x82, 0x146: 0x83, 0x147: 0x84, + 0x14d: 0x85, + 0x15c: 0x86, 0x15f: 0x87, + 0x162: 0x88, 0x164: 0x89, + 0x168: 0x8a, 0x169: 0x8b, 0x16c: 0x10, 0x16d: 0x8c, 0x16e: 0x8d, 0x16f: 0x8e, + 0x170: 0x8f, 0x173: 0x90, 0x174: 0x91, 0x175: 0x11, 0x176: 0x12, 0x177: 0x92, + 0x178: 0x13, 0x179: 0x14, 0x17a: 0x15, 0x17b: 0x16, 0x17c: 0x17, 0x17d: 0x18, 0x17e: 0x19, 0x17f: 0x1a, // Block 0x6, offset 0x180 - 0x180: 0x6d, 0x181: 0x6e, 0x182: 0x0c, 0x184: 0x0d, 0x185: 0x0e, 0x186: 0x6f, 0x187: 0x70, - 0x188: 0x71, 0x189: 0x72, 0x18a: 0x73, 0x18b: 0x74, 0x18c: 0x75, - 0x191: 0x0f, 0x192: 0x10, 0x193: 0x11, - 0x1a8: 0x76, 0x1a9: 0x77, 0x1ab: 0x78, - 0x1b1: 0x79, 0x1b5: 0x7a, - 0x1ba: 0x7b, 0x1bb: 0x7c, 0x1bc: 0x7d, 0x1bd: 0x7e, 0x1be: 0x7f, 0x1bf: 0x80, + 0x180: 0x93, 0x181: 0x94, 0x182: 0x95, 0x183: 0x96, 0x184: 0x1b, 0x185: 0x1c, 0x186: 0x97, 0x187: 0x98, + 0x188: 0x99, 0x189: 0x1d, 0x18a: 0x1e, 0x18b: 0x9a, 0x18c: 0x9b, + 0x191: 0x1f, 0x192: 0x20, 0x193: 0x9c, + 0x1a8: 0x9d, 0x1a9: 0x9e, 0x1ab: 0x9f, + 0x1b1: 0xa0, 0x1b3: 0xa1, 0x1b5: 0xa2, 0x1b7: 0xa3, + 0x1ba: 0xa4, 0x1bb: 0xa5, 0x1bc: 0x21, 0x1bd: 0x22, 0x1be: 0x23, 0x1bf: 0xa6, // Block 0x7, offset 0x1c0 - 0x1c0: 0x81, 0x1c1: 0x12, 0x1c2: 0x82, 0x1c3: 0x83, 0x1c4: 0x84, 0x1c5: 0x85, 0x1c6: 0x86, - 0x1c8: 0x13, 0x1c9: 0x14, 0x1ca: 0x15, 0x1cb: 0x87, 0x1cc: 0x16, 0x1cd: 0x17, 0x1ce: 0x18, 0x1cf: 0x19, + 0x1c0: 0xa7, 0x1c1: 0x24, 0x1c2: 0x25, 0x1c3: 0x26, 0x1c4: 0xa8, 0x1c5: 0xa9, 0x1c6: 0x27, + 0x1c8: 0x28, 0x1c9: 0x29, 0x1ca: 0x2a, 0x1cb: 0x2b, 0x1cc: 0x2c, 0x1cd: 0x2d, 0x1ce: 0x2e, 0x1cf: 0x2f, // Block 0x8, offset 0x200 - 0x21d: 0x88, + 0x219: 0xaa, 0x21b: 0xab, 0x21d: 0xac, + 0x220: 0xad, 0x223: 0xae, 0x224: 0xaf, 0x225: 0xb0, 0x226: 0xb1, 0x227: 0xb2, + 0x22a: 0xb3, 0x22b: 0xb4, 0x22f: 0xb5, + 0x230: 0xb6, 0x231: 0xb6, 0x232: 0xb6, 0x233: 0xb6, 0x234: 0xb6, 0x235: 0xb6, 0x236: 0xb6, 0x237: 0xb6, + 0x238: 0xb6, 0x239: 0xb6, 0x23a: 0xb6, 0x23b: 0xb6, 0x23c: 0xb6, 0x23d: 0xb6, 0x23e: 0xb6, 0x23f: 0xb6, // Block 0x9, offset 0x240 - 0x264: 0x89, 0x265: 0x8a, 0x266: 0x8b, 0x267: 0x8c, - 0x268: 0x8d, 0x269: 0x8e, 0x26a: 0x1a, 0x26b: 0x1b, 0x26c: 0x1c, 0x26d: 0x1d, 0x26e: 0x1e, 0x26f: 0x1f, - 0x270: 0x8f, 0x271: 0x20, 0x272: 0x21, 0x273: 0x22, 0x274: 0x90, 0x275: 0x91, 0x276: 0x92, 0x277: 0x93, - 0x278: 0x94, 0x279: 0x23, 0x27a: 0x24, 0x27b: 0x25, 0x27c: 0x26, 0x27d: 0x27, 0x27e: 0x95, 0x27f: 0x96, + 0x240: 0xb6, 0x241: 0xb6, 0x242: 0xb6, 0x243: 0xb6, 0x244: 0xb6, 0x245: 0xb6, 0x246: 0xb6, 0x247: 0xb6, + 0x248: 0xb6, 0x249: 0xb6, 0x24a: 0xb6, 0x24b: 0xb6, 0x24c: 0xb6, 0x24d: 0xb6, 0x24e: 0xb6, 0x24f: 0xb6, + 0x250: 0xb6, 0x251: 0xb6, 0x252: 0xb6, 0x253: 0xb6, 0x254: 0xb6, 0x255: 0xb6, 0x256: 0xb6, 0x257: 0xb6, + 0x258: 0xb6, 0x259: 0xb6, 0x25a: 0xb6, 0x25b: 0xb6, 0x25c: 0xb6, 0x25d: 0xb6, 0x25e: 0xb6, 0x25f: 0xb6, + 0x260: 0xb6, 0x261: 0xb6, 0x262: 0xb6, 0x263: 0xb6, 0x264: 0xb6, 0x265: 0xb6, 0x266: 0xb6, 0x267: 0xb6, + 0x268: 0xb6, 0x269: 0xb6, 0x26a: 0xb6, 0x26b: 0xb6, 0x26c: 0xb6, 0x26d: 0xb6, 0x26e: 0xb6, 0x26f: 0xb6, + 0x270: 0xb6, 0x271: 0xb6, 0x272: 0xb6, 0x273: 0xb6, 0x274: 0xb6, 0x275: 0xb6, 0x276: 0xb6, 0x277: 0xb6, + 0x278: 0xb6, 0x279: 0xb6, 0x27a: 0xb6, 0x27b: 0xb6, 0x27c: 0xb6, 0x27d: 0xb6, 0x27e: 0xb6, 0x27f: 0xb6, // Block 0xa, offset 0x280 - 0x282: 0x97, + 0x280: 0xb6, 0x281: 0xb6, 0x282: 0xb6, 0x283: 0xb6, 0x284: 0xb6, 0x285: 0xb6, 0x286: 0xb6, 0x287: 0xb6, + 0x288: 0xb6, 0x289: 0xb6, 0x28a: 0xb6, 0x28b: 0xb6, 0x28c: 0xb6, 0x28d: 0xb6, 0x28e: 0xb6, 0x28f: 0xb6, + 0x290: 0xb6, 0x291: 0xb6, 0x292: 0xb6, 0x293: 0xb6, 0x294: 0xb6, 0x295: 0xb6, 0x296: 0xb6, 0x297: 0xb6, + 0x298: 0xb6, 0x299: 0xb6, 0x29a: 0xb6, 0x29b: 0xb6, 0x29c: 0xb6, 0x29d: 0xb6, 0x29e: 0xb7, // Block 0xb, offset 0x2c0 - 0x2c5: 0x98, 0x2c6: 0x99, 0x2c7: 0x9a, - 0x2d0: 0x28, 0x2d1: 0x29, 0x2d2: 0x2a, 0x2d3: 0x2b, 0x2d4: 0x2c, 0x2d5: 0x2d, 0x2d6: 0x2e, 0x2d7: 0x2f, - 0x2d8: 0x30, 0x2d9: 0x31, 0x2da: 0x32, 0x2db: 0x33, 0x2dc: 0x34, 0x2dd: 0x35, 0x2de: 0x36, 0x2df: 0x37, + 0x2e4: 0x30, 0x2e5: 0x31, 0x2e6: 0x32, 0x2e7: 0x33, + 0x2e8: 0x34, 0x2e9: 0x35, 0x2ea: 0x36, 0x2eb: 0x37, 0x2ec: 0x38, 0x2ed: 0x39, 0x2ee: 0x3a, 0x2ef: 0x3b, + 0x2f0: 0x3c, 0x2f1: 0x3d, 0x2f2: 0x3e, 0x2f3: 0x3f, 0x2f4: 0x40, 0x2f5: 0x41, 0x2f6: 0x42, 0x2f7: 0x43, + 0x2f8: 0x44, 0x2f9: 0x45, 0x2fa: 0x46, 0x2fb: 0x47, 0x2fc: 0xb8, 0x2fd: 0x48, 0x2fe: 0x49, 0x2ff: 0xb9, // Block 0xc, offset 0x300 - 0x304: 0x38, 0x305: 0x9b, 0x306: 0x9c, - 0x308: 0x39, 0x309: 0x9d, + 0x307: 0xba, + 0x328: 0xbb, // Block 0xd, offset 0x340 - 0x360: 0x3a, 0x361: 0x3b, 0x362: 0x3c, 0x363: 0x3d, 0x364: 0x3e, 0x365: 0x3f, 0x366: 0x40, 0x367: 0x41, - 0x368: 0x9e, + 0x341: 0xad, 0x342: 0xbc, // Block 0xe, offset 0x380 - 0x391: 0x0a, - 0x39d: 0x0b, 0x39f: 0x0c, - 0x3af: 0x0d, + 0x385: 0xbd, 0x386: 0xbe, 0x387: 0xbf, + 0x389: 0xc0, + 0x390: 0xc1, 0x391: 0xc2, 0x392: 0xc3, 0x393: 0xc4, 0x394: 0xc5, 0x395: 0xc6, 0x396: 0xc7, 0x397: 0xc8, + 0x398: 0xc9, 0x399: 0xca, 0x39a: 0x4a, 0x39b: 0xcb, 0x39c: 0xcc, 0x39d: 0xcd, 0x39e: 0xce, 0x39f: 0x4b, + // Block 0xf, offset 0x3c0 + 0x3c4: 0x4c, 0x3c5: 0xcf, 0x3c6: 0xd0, + 0x3c8: 0x4d, 0x3c9: 0xd1, + // Block 0x10, offset 0x400 + 0x420: 0x4e, 0x421: 0x4f, 0x422: 0x50, 0x423: 0x51, 0x424: 0x52, 0x425: 0x53, 0x426: 0x54, 0x427: 0x55, + 0x428: 0x56, + // Block 0x11, offset 0x440 + 0x450: 0x0c, 0x451: 0x0d, + 0x45d: 0x0e, 0x45f: 0x0f, + 0x46f: 0x10, } -var nfkcDecompTrie = trie{nfkcDecompLookup[:], nfkcDecompValues[:], nfkcDecompSparseValues[:], nfkcDecompSparseOffset[:], 66} +var nfkcTrie = trie{nfkcLookup[:], nfkcValues[:], nfkcSparseValues[:], nfkcSparseOffset[:], 87} // recompMap: 7448 bytes (entries only) var recompMap = map[uint32]rune{ @@ -5595,1172 +6655,4 @@ var recompMap = map[uint32]rune{ 0x10A510BA: 0x110AB, } -// charInfoValues: 1024 entries, 2048 bytes -// Block 2 is the null block. -var charInfoValues = [1024]uint16{ - // Block 0x0, offset 0x0 - 0x003c: 0x8800, 0x003d: 0x8800, 0x003e: 0x8800, - // Block 0x1, offset 0x40 - 0x0041: 0x8800, 0x0042: 0x8800, 0x0043: 0x8800, 0x0044: 0x8800, 0x0045: 0x8800, - 0x0046: 0x8800, 0x0047: 0x8800, 0x0048: 0x8800, 0x0049: 0x8800, 0x004a: 0x8800, 0x004b: 0x8800, - 0x004c: 0x8800, 0x004d: 0x8800, 0x004e: 0x8800, 0x004f: 0x8800, 0x0050: 0x8800, - 0x0052: 0x8800, 0x0053: 0x8800, 0x0054: 0x8800, 0x0055: 0x8800, 0x0056: 0x8800, 0x0057: 0x8800, - 0x0058: 0x8800, 0x0059: 0x8800, 0x005a: 0x8800, - 0x0061: 0x8800, 0x0062: 0x8800, 0x0063: 0x8800, - 0x0064: 0x8800, 0x0065: 0x8800, 0x0066: 0x8800, 0x0067: 0x8800, 0x0068: 0x8800, 0x0069: 0x8800, - 0x006a: 0x8800, 0x006b: 0x8800, 0x006c: 0x8800, 0x006d: 0x8800, 0x006e: 0x8800, 0x006f: 0x8800, - 0x0070: 0x8800, 0x0072: 0x8800, 0x0073: 0x8800, 0x0074: 0x8800, 0x0075: 0x8800, - 0x0076: 0x8800, 0x0077: 0x8800, 0x0078: 0x8800, 0x0079: 0x8800, 0x007a: 0x8800, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0x00c0: 0x1100, 0x00c1: 0x1100, 0x00c2: 0x9900, 0x00c3: 0x1100, 0x00c4: 0x9900, 0x00c5: 0x9900, - 0x00c6: 0x8800, 0x00c7: 0x9900, 0x00c8: 0x1100, 0x00c9: 0x1100, 0x00ca: 0x9900, 0x00cb: 0x1100, - 0x00cc: 0x1100, 0x00cd: 0x1100, 0x00ce: 0x1100, 0x00cf: 0x9900, 0x00d1: 0x1100, - 0x00d2: 0x1100, 0x00d3: 0x1100, 0x00d4: 0x9900, 0x00d5: 0x9900, 0x00d6: 0x9900, - 0x00d8: 0x8800, 0x00d9: 0x1100, 0x00da: 0x1100, 0x00db: 0x1100, 0x00dc: 0x9900, 0x00dd: 0x1100, - 0x00e0: 0x1100, 0x00e1: 0x1100, 0x00e2: 0x9900, 0x00e3: 0x1100, - 0x00e4: 0x9900, 0x00e5: 0x9900, 0x00e6: 0x8800, 0x00e7: 0x9900, 0x00e8: 0x1100, 0x00e9: 0x1100, - 0x00ea: 0x9900, 0x00eb: 0x1100, 0x00ec: 0x1100, 0x00ed: 0x1100, 0x00ee: 0x1100, 0x00ef: 0x9900, - 0x00f1: 0x1100, 0x00f2: 0x1100, 0x00f3: 0x1100, 0x00f4: 0x9900, 0x00f5: 0x9900, - 0x00f6: 0x9900, 0x00f8: 0x8800, 0x00f9: 0x1100, 0x00fa: 0x1100, 0x00fb: 0x1100, - 0x00fc: 0x9900, 0x00fd: 0x1100, 0x00ff: 0x1100, - // Block 0x4, offset 0x100 - 0x0100: 0x66e6, 0x0101: 0x66e6, 0x0102: 0x66e6, 0x0103: 0x66e6, 0x0104: 0x66e6, 0x0105: 0x00e6, - 0x0106: 0x66e6, 0x0107: 0x66e6, 0x0108: 0x66e6, 0x0109: 0x66e6, 0x010a: 0x66e6, 0x010b: 0x66e6, - 0x010c: 0x66e6, 0x010d: 0x00e6, 0x010e: 0x00e6, 0x010f: 0x66e6, 0x0110: 0x00e6, 0x0111: 0x66e6, - 0x0112: 0x00e6, 0x0113: 0x66e6, 0x0114: 0x66e6, 0x0115: 0x00e8, 0x0116: 0x00dc, 0x0117: 0x00dc, - 0x0118: 0x00dc, 0x0119: 0x00dc, 0x011a: 0x00e8, 0x011b: 0x66d8, 0x011c: 0x00dc, 0x011d: 0x00dc, - 0x011e: 0x00dc, 0x011f: 0x00dc, 0x0120: 0x00dc, 0x0121: 0x00ca, 0x0122: 0x00ca, 0x0123: 0x66dc, - 0x0124: 0x66dc, 0x0125: 0x66dc, 0x0126: 0x66dc, 0x0127: 0x66ca, 0x0128: 0x66ca, 0x0129: 0x00dc, - 0x012a: 0x00dc, 0x012b: 0x00dc, 0x012c: 0x00dc, 0x012d: 0x66dc, 0x012e: 0x66dc, 0x012f: 0x00dc, - 0x0130: 0x66dc, 0x0131: 0x66dc, 0x0132: 0x00dc, 0x0133: 0x00dc, 0x0134: 0x0001, 0x0135: 0x0001, - 0x0136: 0x0001, 0x0137: 0x0001, 0x0138: 0x6601, 0x0139: 0x00dc, 0x013a: 0x00dc, 0x013b: 0x00dc, - 0x013c: 0x00dc, 0x013d: 0x00e6, 0x013e: 0x00e6, 0x013f: 0x00e6, - // Block 0x5, offset 0x140 - 0x0140: 0x55e6, 0x0141: 0x55e6, 0x0142: 0x66e6, 0x0143: 0x55e6, 0x0144: 0x55e6, 0x0145: 0x66f0, - 0x0146: 0x00e6, 0x0147: 0x00dc, 0x0148: 0x00dc, 0x0149: 0x00dc, 0x014a: 0x00e6, 0x014b: 0x00e6, - 0x014c: 0x00e6, 0x014d: 0x00dc, 0x014e: 0x00dc, 0x0150: 0x00e6, 0x0151: 0x00e6, - 0x0152: 0x00e6, 0x0153: 0x00dc, 0x0154: 0x00dc, 0x0155: 0x00dc, 0x0156: 0x00dc, 0x0157: 0x00e6, - 0x0158: 0x00e8, 0x0159: 0x00dc, 0x015a: 0x00dc, 0x015b: 0x00e6, 0x015c: 0x00e9, 0x015d: 0x00ea, - 0x015e: 0x00ea, 0x015f: 0x00e9, 0x0160: 0x00ea, 0x0161: 0x00ea, 0x0162: 0x00e9, 0x0163: 0x00e6, - 0x0164: 0x00e6, 0x0165: 0x00e6, 0x0166: 0x00e6, 0x0167: 0x00e6, 0x0168: 0x00e6, 0x0169: 0x00e6, - 0x016a: 0x00e6, 0x016b: 0x00e6, 0x016c: 0x00e6, 0x016d: 0x00e6, 0x016e: 0x00e6, 0x016f: 0x00e6, - 0x0174: 0x5500, - 0x017a: 0x5000, - 0x017e: 0x5500, - // Block 0x6, offset 0x180 - 0x0184: 0x5000, 0x0185: 0x5100, - 0x0186: 0x1100, 0x0187: 0x5500, 0x0188: 0x1100, 0x0189: 0x1100, 0x018a: 0x1100, - 0x018c: 0x1100, 0x018e: 0x1100, 0x018f: 0x1100, 0x0190: 0x1100, 0x0191: 0x8800, - 0x0195: 0x8800, 0x0197: 0x8800, - 0x0199: 0x8800, - 0x019f: 0x8800, 0x01a1: 0x8800, - 0x01a5: 0x8800, 0x01a9: 0x8800, - 0x01aa: 0x1100, 0x01ab: 0x1100, 0x01ac: 0x9900, 0x01ad: 0x1100, 0x01ae: 0x9900, 0x01af: 0x1100, - 0x01b0: 0x1100, 0x01b1: 0x8800, 0x01b5: 0x8800, - 0x01b7: 0x8800, 0x01b9: 0x8800, - 0x01bf: 0x8800, - // Block 0x7, offset 0x1c0 - 0x01c0: 0x1100, 0x01c1: 0x1100, 0x01c3: 0x1100, - 0x01c6: 0x8800, 0x01c7: 0x1100, - 0x01cc: 0x1100, 0x01cd: 0x1100, 0x01ce: 0x1100, 0x01d0: 0x8800, - 0x01d3: 0x8800, 0x01d5: 0x8800, 0x01d6: 0x8800, 0x01d7: 0x8800, - 0x01d8: 0x8800, 0x01d9: 0x1100, 0x01da: 0x8800, - 0x01de: 0x8800, 0x01e3: 0x8800, - 0x01e7: 0x8800, - 0x01eb: 0x8800, 0x01ed: 0x8800, - 0x01f0: 0x8800, 0x01f3: 0x8800, 0x01f5: 0x8800, - 0x01f6: 0x8800, 0x01f7: 0x8800, 0x01f8: 0x8800, 0x01f9: 0x1100, 0x01fa: 0x8800, - 0x01fe: 0x8800, - // Block 0x8, offset 0x200 - 0x0207: 0x5000, - 0x0211: 0x00dc, - 0x0212: 0x00e6, 0x0213: 0x00e6, 0x0214: 0x00e6, 0x0215: 0x00e6, 0x0216: 0x00dc, 0x0217: 0x00e6, - 0x0218: 0x00e6, 0x0219: 0x00e6, 0x021a: 0x00de, 0x021b: 0x00dc, 0x021c: 0x00e6, 0x021d: 0x00e6, - 0x021e: 0x00e6, 0x021f: 0x00e6, 0x0220: 0x00e6, 0x0221: 0x00e6, 0x0222: 0x00dc, 0x0223: 0x00dc, - 0x0224: 0x00dc, 0x0225: 0x00dc, 0x0226: 0x00dc, 0x0227: 0x00dc, 0x0228: 0x00e6, 0x0229: 0x00e6, - 0x022a: 0x00dc, 0x022b: 0x00e6, 0x022c: 0x00e6, 0x022d: 0x00de, 0x022e: 0x00e4, 0x022f: 0x00e6, - 0x0230: 0x000a, 0x0231: 0x000b, 0x0232: 0x000c, 0x0233: 0x000d, 0x0234: 0x000e, 0x0235: 0x000f, - 0x0236: 0x0010, 0x0237: 0x0011, 0x0238: 0x0012, 0x0239: 0x0013, 0x023a: 0x0013, 0x023b: 0x0014, - 0x023c: 0x0015, 0x023d: 0x0016, 0x023f: 0x0017, - // Block 0x9, offset 0x240 - 0x0248: 0x8800, 0x024a: 0x8800, 0x024b: 0x001b, - 0x024c: 0x001c, 0x024d: 0x001d, 0x024e: 0x001e, 0x024f: 0x001f, 0x0250: 0x0020, 0x0251: 0x0021, - 0x0252: 0x0022, 0x0253: 0x66e6, 0x0254: 0x66e6, 0x0255: 0x66dc, 0x0256: 0x00dc, 0x0257: 0x00e6, - 0x0258: 0x00e6, 0x0259: 0x00e6, 0x025a: 0x00e6, 0x025b: 0x00e6, 0x025c: 0x00dc, 0x025d: 0x00e6, - 0x025e: 0x00e6, 0x025f: 0x00dc, - 0x0270: 0x0023, 0x0275: 0x5000, - 0x0276: 0x5000, 0x0277: 0x5000, 0x0278: 0x5000, - // Block 0xa, offset 0x280 - 0x0280: 0x9900, 0x0281: 0x9900, 0x0282: 0x1100, 0x0283: 0x1100, 0x0284: 0x1100, 0x0285: 0x1100, - 0x0288: 0x9900, 0x0289: 0x9900, 0x028a: 0x1100, 0x028b: 0x1100, - 0x028c: 0x1100, 0x028d: 0x1100, 0x0290: 0x9900, 0x0291: 0x9900, - 0x0292: 0x1100, 0x0293: 0x1100, 0x0294: 0x1100, 0x0295: 0x1100, 0x0296: 0x1100, 0x0297: 0x1100, - 0x0299: 0x9900, 0x029b: 0x1100, 0x029d: 0x1100, - 0x029f: 0x1100, 0x02a0: 0x9900, 0x02a1: 0x9900, 0x02a2: 0x9900, 0x02a3: 0x9900, - 0x02a4: 0x9900, 0x02a5: 0x9900, 0x02a6: 0x9900, 0x02a7: 0x9900, 0x02a8: 0x9900, 0x02a9: 0x9900, - 0x02aa: 0x9900, 0x02ab: 0x9900, 0x02ac: 0x9900, 0x02ad: 0x9900, 0x02ae: 0x9900, 0x02af: 0x9900, - 0x02b0: 0x9900, 0x02b1: 0x5500, 0x02b2: 0x1100, 0x02b3: 0x5500, 0x02b4: 0x9900, 0x02b5: 0x5500, - 0x02b6: 0x1100, 0x02b7: 0x5500, 0x02b8: 0x1100, 0x02b9: 0x5500, 0x02ba: 0x1100, 0x02bb: 0x5500, - 0x02bc: 0x9900, 0x02bd: 0x5500, - // Block 0xb, offset 0x2c0 - 0x02c0: 0x5000, 0x02c1: 0x5100, 0x02c2: 0x1100, 0x02c3: 0x1100, 0x02c4: 0x1100, - 0x02c6: 0x9900, 0x02c7: 0x1100, 0x02c8: 0x1100, 0x02c9: 0x5500, 0x02ca: 0x1100, 0x02cb: 0x5500, - 0x02cc: 0x1100, 0x02cd: 0x5100, 0x02ce: 0x5100, 0x02cf: 0x5100, 0x02d0: 0x1100, 0x02d1: 0x1100, - 0x02d2: 0x1100, 0x02d3: 0x5500, 0x02d6: 0x1100, 0x02d7: 0x1100, - 0x02d8: 0x1100, 0x02d9: 0x1100, 0x02da: 0x1100, 0x02db: 0x5500, 0x02dd: 0x5100, - 0x02de: 0x5100, 0x02df: 0x5100, 0x02e0: 0x1100, 0x02e1: 0x1100, 0x02e2: 0x1100, 0x02e3: 0x5500, - 0x02e4: 0x1100, 0x02e5: 0x1100, 0x02e6: 0x1100, 0x02e7: 0x1100, 0x02e8: 0x1100, 0x02e9: 0x1100, - 0x02ea: 0x1100, 0x02eb: 0x5500, 0x02ec: 0x1100, 0x02ed: 0x5100, 0x02ee: 0x5500, 0x02ef: 0x5500, - 0x02f2: 0x1100, 0x02f3: 0x1100, 0x02f4: 0x1100, - 0x02f6: 0x9900, 0x02f7: 0x1100, 0x02f8: 0x1100, 0x02f9: 0x5500, 0x02fa: 0x1100, 0x02fb: 0x5500, - 0x02fc: 0x1100, 0x02fd: 0x5500, 0x02fe: 0x5800, - // Block 0xc, offset 0x300 - 0x0301: 0x1100, 0x0303: 0x8800, 0x0304: 0x1100, 0x0305: 0x8800, - 0x0307: 0x1100, 0x0308: 0x8800, 0x0309: 0x1100, - 0x030d: 0x8800, - 0x0320: 0x1100, 0x0321: 0x8800, 0x0322: 0x1100, - 0x0324: 0x8800, 0x0325: 0x8800, - 0x032d: 0x1100, 0x032e: 0x1100, 0x032f: 0x1100, - 0x0330: 0x1100, 0x0331: 0x1100, 0x0332: 0x8800, 0x0333: 0x8800, 0x0334: 0x1100, 0x0335: 0x1100, - 0x0336: 0x8800, 0x0337: 0x8800, 0x0338: 0x1100, 0x0339: 0x1100, 0x033a: 0x8800, 0x033b: 0x8800, - 0x033c: 0x8800, 0x033d: 0x8800, - // Block 0xd, offset 0x340 - 0x0346: 0x8800, 0x034b: 0x8800, - 0x034c: 0x1100, 0x034d: 0x8800, 0x034e: 0x1100, 0x034f: 0x8800, 0x0350: 0x1100, 0x0351: 0x8800, - 0x0352: 0x1100, 0x0353: 0x8800, 0x0354: 0x1100, 0x0355: 0x8800, 0x0356: 0x1100, 0x0357: 0x8800, - 0x0358: 0x1100, 0x0359: 0x8800, 0x035a: 0x1100, 0x035b: 0x8800, 0x035c: 0x1100, 0x035d: 0x8800, - 0x035e: 0x1100, 0x035f: 0x8800, 0x0360: 0x1100, 0x0361: 0x8800, 0x0362: 0x1100, - 0x0364: 0x8800, 0x0365: 0x1100, 0x0366: 0x8800, 0x0367: 0x1100, 0x0368: 0x8800, 0x0369: 0x1100, - 0x036f: 0x8800, - 0x0370: 0x1100, 0x0371: 0x1100, 0x0372: 0x8800, 0x0373: 0x1100, 0x0374: 0x1100, 0x0375: 0x8800, - 0x0376: 0x1100, 0x0377: 0x1100, 0x0378: 0x8800, 0x0379: 0x1100, 0x037a: 0x1100, 0x037b: 0x8800, - 0x037c: 0x1100, 0x037d: 0x1100, - // Block 0xe, offset 0x380 - 0x0394: 0x1100, - 0x0399: 0x6608, 0x039a: 0x6608, 0x039b: 0x5000, 0x039c: 0x5000, 0x039d: 0x8800, - 0x039e: 0x1100, 0x039f: 0x5000, - 0x03a6: 0x8800, - 0x03ab: 0x8800, 0x03ac: 0x1100, 0x03ad: 0x8800, 0x03ae: 0x1100, 0x03af: 0x8800, - 0x03b0: 0x1100, 0x03b1: 0x8800, 0x03b2: 0x1100, 0x03b3: 0x8800, 0x03b4: 0x1100, 0x03b5: 0x8800, - 0x03b6: 0x1100, 0x03b7: 0x8800, 0x03b8: 0x1100, 0x03b9: 0x8800, 0x03ba: 0x1100, 0x03bb: 0x8800, - 0x03bc: 0x1100, 0x03bd: 0x8800, 0x03be: 0x1100, 0x03bf: 0x8800, - // Block 0xf, offset 0x3c0 - 0x03c0: 0x1100, 0x03c1: 0x8800, 0x03c2: 0x1100, 0x03c4: 0x8800, 0x03c5: 0x1100, - 0x03c6: 0x8800, 0x03c7: 0x1100, 0x03c8: 0x8800, 0x03c9: 0x1100, - 0x03cf: 0x8800, 0x03d0: 0x1100, 0x03d1: 0x1100, - 0x03d2: 0x8800, 0x03d3: 0x1100, 0x03d4: 0x1100, 0x03d5: 0x8800, 0x03d6: 0x1100, 0x03d7: 0x1100, - 0x03d8: 0x8800, 0x03d9: 0x1100, 0x03da: 0x1100, 0x03db: 0x8800, 0x03dc: 0x1100, 0x03dd: 0x1100, - 0x03ef: 0x8800, - 0x03f0: 0x8800, 0x03f1: 0x8800, 0x03f2: 0x8800, 0x03f4: 0x1100, - 0x03f7: 0x1100, 0x03f8: 0x1100, 0x03f9: 0x1100, 0x03fa: 0x1100, - 0x03fd: 0x8800, 0x03fe: 0x1100, 0x03ff: 0x5000, -} - -// charInfoSparseOffset: 156 entries, 312 bytes -var charInfoSparseOffset = []uint16{0x0, 0x8, 0x13, 0x21, 0x25, 0x2f, 0x36, 0x39, 0x3c, 0x4a, 0x56, 0x58, 0x62, 0x67, 0x6e, 0x7d, 0x8a, 0x92, 0x96, 0x9b, 0x9d, 0xa5, 0xab, 0xae, 0xb5, 0xb9, 0xbd, 0xbf, 0xc1, 0xc8, 0xcc, 0xd1, 0xd6, 0xd9, 0xe2, 0xe4, 0xec, 0xf0, 0xf2, 0xf5, 0xf8, 0xfe, 0x10e, 0x11a, 0x11c, 0x122, 0x124, 0x126, 0x128, 0x12a, 0x12c, 0x12e, 0x130, 0x133, 0x136, 0x138, 0x13b, 0x13e, 0x142, 0x151, 0x159, 0x15b, 0x15e, 0x160, 0x169, 0x16d, 0x171, 0x173, 0x182, 0x186, 0x18c, 0x194, 0x198, 0x1a1, 0x1aa, 0x1b5, 0x1bb, 0x1bf, 0x1cd, 0x1dc, 0x1e0, 0x1e7, 0x1ec, 0x1fa, 0x206, 0x209, 0x20b, 0x20d, 0x20f, 0x211, 0x213, 0x215, 0x217, 0x219, 0x21b, 0x21e, 0x220, 0x222, 0x224, 0x226, 0x22f, 0x231, 0x234, 0x237, 0x23a, 0x23c, 0x23f, 0x241, 0x243, 0x245, 0x248, 0x24a, 0x24c, 0x24e, 0x250, 0x256, 0x258, 0x25a, 0x25c, 0x25e, 0x260, 0x26a, 0x26d, 0x26f, 0x279, 0x27e, 0x280, 0x282, 0x284, 0x286, 0x289, 0x28c, 0x290, 0x298, 0x29a, 0x29c, 0x2a3, 0x2a5, 0x2ab, 0x2b3, 0x2ba, 0x2c0, 0x2c2, 0x2c4, 0x2c7, 0x2d0, 0x2d3, 0x2da, 0x2df, 0x2e2, 0x2e5, 0x2e9, 0x2eb, 0x2ed, 0x2f0, 0x2f3} - -// charInfoSparseValues: 757 entries, 3028 bytes -var charInfoSparseValues = [757]valueRange{ - // Block 0x0, offset 0x1 - {value: 0x0000, lo: 0x07}, - {value: 0x5000, lo: 0xa0, hi: 0xa0}, - {value: 0x5800, lo: 0xa8, hi: 0xa8}, - {value: 0x5000, lo: 0xaa, hi: 0xaa}, - {value: 0x5000, lo: 0xaf, hi: 0xaf}, - {value: 0x5000, lo: 0xb2, hi: 0xb5}, - {value: 0x5000, lo: 0xb8, hi: 0xba}, - {value: 0x5000, lo: 0xbc, hi: 0xbe}, - // Block 0x1, offset 0x2 - {value: 0x0000, lo: 0x0a}, - {value: 0x1100, lo: 0x80, hi: 0x81}, - {value: 0x9900, lo: 0x82, hi: 0x83}, - {value: 0x1100, lo: 0x84, hi: 0x8f}, - {value: 0x9900, lo: 0x92, hi: 0x93}, - {value: 0x1100, lo: 0x94, hi: 0xa5}, - {value: 0x1100, lo: 0xa8, hi: 0xb0}, - {value: 0x5000, lo: 0xb2, hi: 0xb3}, - {value: 0x1100, lo: 0xb4, hi: 0xb7}, - {value: 0x1100, lo: 0xb9, hi: 0xbe}, - {value: 0x5000, lo: 0xbf, hi: 0xbf}, - // Block 0x2, offset 0x3 - {value: 0x0000, lo: 0x0d}, - {value: 0x5000, lo: 0x80, hi: 0x80}, - {value: 0x1100, lo: 0x83, hi: 0x88}, - {value: 0x5000, lo: 0x89, hi: 0x89}, - {value: 0x9900, lo: 0x8c, hi: 0x8d}, - {value: 0x1100, lo: 0x8e, hi: 0x91}, - {value: 0x1100, lo: 0x94, hi: 0x99}, - {value: 0x9900, lo: 0x9a, hi: 0x9b}, - {value: 0x1100, lo: 0x9c, hi: 0x9f}, - {value: 0x9900, lo: 0xa0, hi: 0xa1}, - {value: 0x1100, lo: 0xa2, hi: 0xa5}, - {value: 0x9900, lo: 0xa8, hi: 0xab}, - {value: 0x1100, lo: 0xac, hi: 0xbe}, - {value: 0x5800, lo: 0xbf, hi: 0xbf}, - // Block 0x3, offset 0x4 - {value: 0x0000, lo: 0x03}, - {value: 0x9900, lo: 0xa0, hi: 0xa1}, - {value: 0x9900, lo: 0xaf, hi: 0xb0}, - {value: 0x8800, lo: 0xb7, hi: 0xb7}, - // Block 0x4, offset 0x5 - {value: 0x0000, lo: 0x09}, - {value: 0x5000, lo: 0x84, hi: 0x8c}, - {value: 0x1100, lo: 0x8d, hi: 0x9c}, - {value: 0x1100, lo: 0x9e, hi: 0xa3}, - {value: 0x1100, lo: 0xa6, hi: 0xa9}, - {value: 0x9900, lo: 0xaa, hi: 0xab}, - {value: 0x1100, lo: 0xac, hi: 0xb0}, - {value: 0x5000, lo: 0xb1, hi: 0xb3}, - {value: 0x1100, lo: 0xb4, hi: 0xb5}, - {value: 0x1100, lo: 0xb8, hi: 0xbf}, - // Block 0x5, offset 0x6 - {value: 0x0000, lo: 0x06}, - {value: 0x1100, lo: 0x80, hi: 0x9b}, - {value: 0x1100, lo: 0x9e, hi: 0x9f}, - {value: 0x9900, lo: 0xa6, hi: 0xa9}, - {value: 0x1100, lo: 0xaa, hi: 0xad}, - {value: 0x9900, lo: 0xae, hi: 0xaf}, - {value: 0x1100, lo: 0xb0, hi: 0xb3}, - // Block 0x6, offset 0x7 - {value: 0x0000, lo: 0x02}, - {value: 0x8800, lo: 0x92, hi: 0x92}, - {value: 0x5000, lo: 0xb0, hi: 0xb8}, - // Block 0x7, offset 0x8 - {value: 0x0000, lo: 0x02}, - {value: 0x5000, lo: 0x98, hi: 0x9d}, - {value: 0x5000, lo: 0xa0, hi: 0xa4}, - // Block 0x8, offset 0x9 - {value: 0x0000, lo: 0x0d}, - {value: 0x8800, lo: 0x81, hi: 0x81}, - {value: 0x8800, lo: 0x85, hi: 0x85}, - {value: 0x8800, lo: 0x89, hi: 0x89}, - {value: 0x9900, lo: 0x8a, hi: 0x8b}, - {value: 0x1100, lo: 0x8c, hi: 0x8d}, - {value: 0x9900, lo: 0x8e, hi: 0x8e}, - {value: 0x5000, lo: 0x90, hi: 0x91}, - {value: 0x5800, lo: 0x92, hi: 0x92}, - {value: 0x5100, lo: 0x93, hi: 0x94}, - {value: 0x5000, lo: 0x95, hi: 0x96}, - {value: 0x5000, lo: 0xb0, hi: 0xb2}, - {value: 0x5000, lo: 0xb4, hi: 0xb5}, - {value: 0x5000, lo: 0xb9, hi: 0xb9}, - // Block 0x9, offset 0xa - {value: 0x0000, lo: 0x0b}, - {value: 0x8800, lo: 0x83, hi: 0x83}, - {value: 0x8800, lo: 0x87, hi: 0x87}, - {value: 0x8800, lo: 0x8b, hi: 0x8b}, - {value: 0x8800, lo: 0x8d, hi: 0x8d}, - {value: 0x1100, lo: 0x90, hi: 0x91}, - {value: 0x1100, lo: 0x93, hi: 0x93}, - {value: 0x8800, lo: 0x96, hi: 0x96}, - {value: 0x1100, lo: 0x97, hi: 0x97}, - {value: 0x1100, lo: 0x9c, hi: 0x9e}, - {value: 0x8800, lo: 0xb4, hi: 0xb5}, - {value: 0x1100, lo: 0xb6, hi: 0xb7}, - // Block 0xa, offset 0xb - {value: 0x0000, lo: 0x01}, - {value: 0x00e6, lo: 0x83, hi: 0x87}, - // Block 0xb, offset 0xc - {value: 0x0000, lo: 0x09}, - {value: 0x1100, lo: 0x81, hi: 0x82}, - {value: 0x1100, lo: 0x90, hi: 0x93}, - {value: 0x1100, lo: 0x96, hi: 0x97}, - {value: 0x8800, lo: 0x98, hi: 0x99}, - {value: 0x1100, lo: 0x9a, hi: 0x9f}, - {value: 0x1100, lo: 0xa2, hi: 0xa7}, - {value: 0x8800, lo: 0xa8, hi: 0xa9}, - {value: 0x1100, lo: 0xaa, hi: 0xb5}, - {value: 0x1100, lo: 0xb8, hi: 0xb9}, - // Block 0xc, offset 0xd - {value: 0x0001, lo: 0x04}, - {value: 0x0018, lo: 0x81, hi: 0x82}, - {value: 0x00e6, lo: 0x84, hi: 0x84}, - {value: 0x00dc, lo: 0x85, hi: 0x85}, - {value: 0x0012, lo: 0x87, hi: 0x87}, - // Block 0xd, offset 0xe - {value: 0x0000, lo: 0x06}, - {value: 0x00e6, lo: 0x90, hi: 0x97}, - {value: 0x001e, lo: 0x98, hi: 0x98}, - {value: 0x001f, lo: 0x99, hi: 0x99}, - {value: 0x0020, lo: 0x9a, hi: 0x9a}, - {value: 0x1100, lo: 0xa2, hi: 0xa6}, - {value: 0x8800, lo: 0xa7, hi: 0xa7}, - // Block 0xe, offset 0xf - {value: 0x0000, lo: 0x0e}, - {value: 0x1100, lo: 0x80, hi: 0x80}, - {value: 0x8800, lo: 0x81, hi: 0x81}, - {value: 0x1100, lo: 0x82, hi: 0x82}, - {value: 0x8800, lo: 0x92, hi: 0x92}, - {value: 0x1100, lo: 0x93, hi: 0x93}, - {value: 0x8800, lo: 0x95, hi: 0x95}, - {value: 0x00e6, lo: 0x96, hi: 0x9c}, - {value: 0x00e6, lo: 0x9f, hi: 0xa2}, - {value: 0x00dc, lo: 0xa3, hi: 0xa3}, - {value: 0x00e6, lo: 0xa4, hi: 0xa4}, - {value: 0x00e6, lo: 0xa7, hi: 0xa8}, - {value: 0x00dc, lo: 0xaa, hi: 0xaa}, - {value: 0x00e6, lo: 0xab, hi: 0xac}, - {value: 0x00dc, lo: 0xad, hi: 0xad}, - // Block 0xf, offset 0x10 - {value: 0x0000, lo: 0x0c}, - {value: 0x0024, lo: 0x91, hi: 0x91}, - {value: 0x00e6, lo: 0xb0, hi: 0xb0}, - {value: 0x00dc, lo: 0xb1, hi: 0xb1}, - {value: 0x00e6, lo: 0xb2, hi: 0xb3}, - {value: 0x00dc, lo: 0xb4, hi: 0xb4}, - {value: 0x00e6, lo: 0xb5, hi: 0xb6}, - {value: 0x00dc, lo: 0xb7, hi: 0xb9}, - {value: 0x00e6, lo: 0xba, hi: 0xba}, - {value: 0x00dc, lo: 0xbb, hi: 0xbc}, - {value: 0x00e6, lo: 0xbd, hi: 0xbd}, - {value: 0x00dc, lo: 0xbe, hi: 0xbe}, - {value: 0x00e6, lo: 0xbf, hi: 0xbf}, - // Block 0x10, offset 0x11 - {value: 0x000a, lo: 0x07}, - {value: 0x00e6, lo: 0x80, hi: 0x80}, - {value: 0x00e6, lo: 0x81, hi: 0x81}, - {value: 0x00dc, lo: 0x82, hi: 0x83}, - {value: 0x00dc, lo: 0x84, hi: 0x85}, - {value: 0x00dc, lo: 0x86, hi: 0x87}, - {value: 0x00dc, lo: 0x88, hi: 0x89}, - {value: 0x00e6, lo: 0x8a, hi: 0x8a}, - // Block 0x11, offset 0x12 - {value: 0x0000, lo: 0x03}, - {value: 0x00e6, lo: 0xab, hi: 0xb1}, - {value: 0x00dc, lo: 0xb2, hi: 0xb2}, - {value: 0x00e6, lo: 0xb3, hi: 0xb3}, - // Block 0x12, offset 0x13 - {value: 0x0000, lo: 0x04}, - {value: 0x00e6, lo: 0x96, hi: 0x99}, - {value: 0x00e6, lo: 0x9b, hi: 0xa3}, - {value: 0x00e6, lo: 0xa5, hi: 0xa7}, - {value: 0x00e6, lo: 0xa9, hi: 0xad}, - // Block 0x13, offset 0x14 - {value: 0x0000, lo: 0x01}, - {value: 0x00dc, lo: 0x99, hi: 0x9b}, - // Block 0x14, offset 0x15 - {value: 0x0000, lo: 0x07}, - {value: 0x8800, lo: 0xa8, hi: 0xa8}, - {value: 0x1100, lo: 0xa9, hi: 0xa9}, - {value: 0x8800, lo: 0xb0, hi: 0xb0}, - {value: 0x1100, lo: 0xb1, hi: 0xb1}, - {value: 0x8800, lo: 0xb3, hi: 0xb3}, - {value: 0x1100, lo: 0xb4, hi: 0xb4}, - {value: 0x6607, lo: 0xbc, hi: 0xbc}, - // Block 0x15, offset 0x16 - {value: 0x0000, lo: 0x05}, - {value: 0x0009, lo: 0x8d, hi: 0x8d}, - {value: 0x00e6, lo: 0x91, hi: 0x91}, - {value: 0x00dc, lo: 0x92, hi: 0x92}, - {value: 0x00e6, lo: 0x93, hi: 0x94}, - {value: 0x5500, lo: 0x98, hi: 0x9f}, - // Block 0x16, offset 0x17 - {value: 0x0000, lo: 0x02}, - {value: 0x0007, lo: 0xbc, hi: 0xbc}, - {value: 0x6600, lo: 0xbe, hi: 0xbe}, - // Block 0x17, offset 0x18 - {value: 0x0000, lo: 0x06}, - {value: 0x8800, lo: 0x87, hi: 0x87}, - {value: 0x1100, lo: 0x8b, hi: 0x8c}, - {value: 0x0009, lo: 0x8d, hi: 0x8d}, - {value: 0x6600, lo: 0x97, hi: 0x97}, - {value: 0x5500, lo: 0x9c, hi: 0x9d}, - {value: 0x5500, lo: 0x9f, hi: 0x9f}, - // Block 0x18, offset 0x19 - {value: 0x0000, lo: 0x03}, - {value: 0x5500, lo: 0xb3, hi: 0xb3}, - {value: 0x5500, lo: 0xb6, hi: 0xb6}, - {value: 0x0007, lo: 0xbc, hi: 0xbc}, - // Block 0x19, offset 0x1a - {value: 0x0000, lo: 0x03}, - {value: 0x0009, lo: 0x8d, hi: 0x8d}, - {value: 0x5500, lo: 0x99, hi: 0x9b}, - {value: 0x5500, lo: 0x9e, hi: 0x9e}, - // Block 0x1a, offset 0x1b - {value: 0x0000, lo: 0x01}, - {value: 0x0007, lo: 0xbc, hi: 0xbc}, - // Block 0x1b, offset 0x1c - {value: 0x0000, lo: 0x01}, - {value: 0x0009, lo: 0x8d, hi: 0x8d}, - // Block 0x1c, offset 0x1d - {value: 0x0000, lo: 0x06}, - {value: 0x8800, lo: 0x87, hi: 0x87}, - {value: 0x1100, lo: 0x88, hi: 0x88}, - {value: 0x1100, lo: 0x8b, hi: 0x8c}, - {value: 0x0009, lo: 0x8d, hi: 0x8d}, - {value: 0x6600, lo: 0x96, hi: 0x97}, - {value: 0x5500, lo: 0x9c, hi: 0x9d}, - // Block 0x1d, offset 0x1e - {value: 0x0000, lo: 0x03}, - {value: 0x8800, lo: 0x92, hi: 0x92}, - {value: 0x1100, lo: 0x94, hi: 0x94}, - {value: 0x6600, lo: 0xbe, hi: 0xbe}, - // Block 0x1e, offset 0x1f - {value: 0x0000, lo: 0x04}, - {value: 0x8800, lo: 0x86, hi: 0x87}, - {value: 0x1100, lo: 0x8a, hi: 0x8c}, - {value: 0x0009, lo: 0x8d, hi: 0x8d}, - {value: 0x6600, lo: 0x97, hi: 0x97}, - // Block 0x1f, offset 0x20 - {value: 0x6607, lo: 0x04}, - {value: 0x8800, lo: 0x86, hi: 0x86}, - {value: 0x1100, lo: 0x88, hi: 0x88}, - {value: 0x0009, lo: 0x8d, hi: 0x8d}, - {value: 0x0054, lo: 0x95, hi: 0x96}, - // Block 0x20, offset 0x21 - {value: 0x0000, lo: 0x02}, - {value: 0x0007, lo: 0xbc, hi: 0xbc}, - {value: 0x8800, lo: 0xbf, hi: 0xbf}, - // Block 0x21, offset 0x22 - {value: 0x0000, lo: 0x08}, - {value: 0x1100, lo: 0x80, hi: 0x80}, - {value: 0x6600, lo: 0x82, hi: 0x82}, - {value: 0x8800, lo: 0x86, hi: 0x86}, - {value: 0x1100, lo: 0x87, hi: 0x88}, - {value: 0x9900, lo: 0x8a, hi: 0x8a}, - {value: 0x1100, lo: 0x8b, hi: 0x8b}, - {value: 0x0009, lo: 0x8d, hi: 0x8d}, - {value: 0x6600, lo: 0x95, hi: 0x96}, - // Block 0x22, offset 0x23 - {value: 0x0000, lo: 0x01}, - {value: 0x6600, lo: 0xbe, hi: 0xbe}, - // Block 0x23, offset 0x24 - {value: 0x0000, lo: 0x07}, - {value: 0x6609, lo: 0x8a, hi: 0x8a}, - {value: 0x6600, lo: 0x8f, hi: 0x8f}, - {value: 0x8800, lo: 0x99, hi: 0x99}, - {value: 0x1100, lo: 0x9a, hi: 0x9a}, - {value: 0x9900, lo: 0x9c, hi: 0x9c}, - {value: 0x1100, lo: 0x9d, hi: 0x9e}, - {value: 0x6600, lo: 0x9f, hi: 0x9f}, - // Block 0x24, offset 0x25 - {value: 0x0000, lo: 0x03}, - {value: 0x5000, lo: 0xb3, hi: 0xb3}, - {value: 0x0067, lo: 0xb8, hi: 0xb9}, - {value: 0x0009, lo: 0xba, hi: 0xba}, - // Block 0x25, offset 0x26 - {value: 0x0000, lo: 0x01}, - {value: 0x006b, lo: 0x88, hi: 0x8b}, - // Block 0x26, offset 0x27 - {value: 0x0000, lo: 0x02}, - {value: 0x5000, lo: 0xb3, hi: 0xb3}, - {value: 0x0076, lo: 0xb8, hi: 0xb9}, - // Block 0x27, offset 0x28 - {value: 0x0000, lo: 0x02}, - {value: 0x007a, lo: 0x88, hi: 0x8b}, - {value: 0x5000, lo: 0x9c, hi: 0x9d}, - // Block 0x28, offset 0x29 - {value: 0x0000, lo: 0x05}, - {value: 0x5000, lo: 0x8c, hi: 0x8c}, - {value: 0x00dc, lo: 0x98, hi: 0x99}, - {value: 0x00dc, lo: 0xb5, hi: 0xb5}, - {value: 0x00dc, lo: 0xb7, hi: 0xb7}, - {value: 0x00d8, lo: 0xb9, hi: 0xb9}, - // Block 0x29, offset 0x2a - {value: 0x0000, lo: 0x0f}, - {value: 0x5500, lo: 0x83, hi: 0x83}, - {value: 0x5500, lo: 0x8d, hi: 0x8d}, - {value: 0x5500, lo: 0x92, hi: 0x92}, - {value: 0x5500, lo: 0x97, hi: 0x97}, - {value: 0x5500, lo: 0x9c, hi: 0x9c}, - {value: 0x5500, lo: 0xa9, hi: 0xa9}, - {value: 0x0081, lo: 0xb1, hi: 0xb1}, - {value: 0x0082, lo: 0xb2, hi: 0xb2}, - {value: 0x5500, lo: 0xb3, hi: 0xb3}, - {value: 0x0084, lo: 0xb4, hi: 0xb4}, - {value: 0x5500, lo: 0xb5, hi: 0xb6}, - {value: 0x5000, lo: 0xb7, hi: 0xb7}, - {value: 0x5500, lo: 0xb8, hi: 0xb8}, - {value: 0x5000, lo: 0xb9, hi: 0xb9}, - {value: 0x0082, lo: 0xba, hi: 0xbd}, - // Block 0x2a, offset 0x2b - {value: 0x0000, lo: 0x0b}, - {value: 0x0082, lo: 0x80, hi: 0x80}, - {value: 0x5500, lo: 0x81, hi: 0x81}, - {value: 0x00e6, lo: 0x82, hi: 0x83}, - {value: 0x0009, lo: 0x84, hi: 0x84}, - {value: 0x00e6, lo: 0x86, hi: 0x87}, - {value: 0x5500, lo: 0x93, hi: 0x93}, - {value: 0x5500, lo: 0x9d, hi: 0x9d}, - {value: 0x5500, lo: 0xa2, hi: 0xa2}, - {value: 0x5500, lo: 0xa7, hi: 0xa7}, - {value: 0x5500, lo: 0xac, hi: 0xac}, - {value: 0x5500, lo: 0xb9, hi: 0xb9}, - // Block 0x2b, offset 0x2c - {value: 0x0000, lo: 0x01}, - {value: 0x00dc, lo: 0x86, hi: 0x86}, - // Block 0x2c, offset 0x2d - {value: 0x0000, lo: 0x05}, - {value: 0x8800, lo: 0xa5, hi: 0xa5}, - {value: 0x1100, lo: 0xa6, hi: 0xa6}, - {value: 0x6600, lo: 0xae, hi: 0xae}, - {value: 0x0007, lo: 0xb7, hi: 0xb7}, - {value: 0x0009, lo: 0xb9, hi: 0xba}, - // Block 0x2d, offset 0x2e - {value: 0x0000, lo: 0x01}, - {value: 0x00dc, lo: 0x8d, hi: 0x8d}, - // Block 0x2e, offset 0x2f - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0xbc, hi: 0xbc}, - // Block 0x2f, offset 0x30 - {value: 0x0000, lo: 0x01}, - {value: 0x8800, lo: 0x80, hi: 0x92}, - // Block 0x30, offset 0x31 - {value: 0x0000, lo: 0x01}, - {value: 0xee00, lo: 0xa1, hi: 0xb5}, - // Block 0x31, offset 0x32 - {value: 0x0000, lo: 0x01}, - {value: 0x6600, lo: 0xa8, hi: 0xbf}, - // Block 0x32, offset 0x33 - {value: 0x0000, lo: 0x01}, - {value: 0x6600, lo: 0x80, hi: 0x82}, - // Block 0x33, offset 0x34 - {value: 0x0000, lo: 0x01}, - {value: 0x00e6, lo: 0x9d, hi: 0x9f}, - // Block 0x34, offset 0x35 - {value: 0x0000, lo: 0x02}, - {value: 0x0009, lo: 0x94, hi: 0x94}, - {value: 0x0009, lo: 0xb4, hi: 0xb4}, - // Block 0x35, offset 0x36 - {value: 0x0000, lo: 0x02}, - {value: 0x0009, lo: 0x92, hi: 0x92}, - {value: 0x00e6, lo: 0x9d, hi: 0x9d}, - // Block 0x36, offset 0x37 - {value: 0x0000, lo: 0x01}, - {value: 0x00e4, lo: 0xa9, hi: 0xa9}, - // Block 0x37, offset 0x38 - {value: 0x0008, lo: 0x02}, - {value: 0x00de, lo: 0xb9, hi: 0xba}, - {value: 0x00dc, lo: 0xbb, hi: 0xbb}, - // Block 0x38, offset 0x39 - {value: 0x0000, lo: 0x02}, - {value: 0x00e6, lo: 0x97, hi: 0x97}, - {value: 0x00dc, lo: 0x98, hi: 0x98}, - // Block 0x39, offset 0x3a - {value: 0x0000, lo: 0x03}, - {value: 0x0009, lo: 0xa0, hi: 0xa0}, - {value: 0x00e6, lo: 0xb5, hi: 0xbc}, - {value: 0x00dc, lo: 0xbf, hi: 0xbf}, - // Block 0x3a, offset 0x3b - {value: 0x7700, lo: 0x0e}, - {value: 0x8800, lo: 0x85, hi: 0x85}, - {value: 0x1100, lo: 0x86, hi: 0x87}, - {value: 0x1100, lo: 0x88, hi: 0x89}, - {value: 0x1100, lo: 0x8a, hi: 0x8b}, - {value: 0x1100, lo: 0x8c, hi: 0x8d}, - {value: 0x1100, lo: 0x8e, hi: 0x8e}, - {value: 0x8800, lo: 0x91, hi: 0x91}, - {value: 0x1100, lo: 0x92, hi: 0x92}, - {value: 0x0007, lo: 0xb4, hi: 0xb4}, - {value: 0x6600, lo: 0xb5, hi: 0xb5}, - {value: 0x8800, lo: 0xba, hi: 0xba}, - {value: 0x1100, lo: 0xbb, hi: 0xbc}, - {value: 0x1100, lo: 0xbd, hi: 0xbe}, - {value: 0x8800, lo: 0xbf, hi: 0xbf}, - // Block 0x3b, offset 0x3c - {value: 0x0000, lo: 0x07}, - {value: 0x1100, lo: 0x80, hi: 0x81}, - {value: 0x8800, lo: 0x82, hi: 0x82}, - {value: 0x1100, lo: 0x83, hi: 0x83}, - {value: 0x0009, lo: 0x84, hi: 0x84}, - {value: 0x00e6, lo: 0xab, hi: 0xab}, - {value: 0x00dc, lo: 0xac, hi: 0xac}, - {value: 0x00e6, lo: 0xad, hi: 0xb3}, - // Block 0x3c, offset 0x3d - {value: 0x0000, lo: 0x01}, - {value: 0x0009, lo: 0xaa, hi: 0xaa}, - // Block 0x3d, offset 0x3e - {value: 0x0000, lo: 0x02}, - {value: 0x0007, lo: 0xa6, hi: 0xa6}, - {value: 0x0009, lo: 0xb2, hi: 0xb3}, - // Block 0x3e, offset 0x3f - {value: 0x0000, lo: 0x01}, - {value: 0x0007, lo: 0xb7, hi: 0xb7}, - // Block 0x3f, offset 0x40 - {value: 0x0000, lo: 0x08}, - {value: 0x00e6, lo: 0x90, hi: 0x92}, - {value: 0x0001, lo: 0x94, hi: 0x94}, - {value: 0x00dc, lo: 0x95, hi: 0x99}, - {value: 0x00e6, lo: 0x9a, hi: 0x9b}, - {value: 0x00dc, lo: 0x9c, hi: 0x9f}, - {value: 0x00e6, lo: 0xa0, hi: 0xa0}, - {value: 0x0001, lo: 0xa2, hi: 0xa8}, - {value: 0x00dc, lo: 0xad, hi: 0xad}, - // Block 0x40, offset 0x41 - {value: 0x0000, lo: 0x03}, - {value: 0x5000, lo: 0xac, hi: 0xae}, - {value: 0x5000, lo: 0xb0, hi: 0xba}, - {value: 0x5000, lo: 0xbc, hi: 0xbf}, - // Block 0x41, offset 0x42 - {value: 0x0000, lo: 0x03}, - {value: 0x5000, lo: 0x80, hi: 0x8d}, - {value: 0x5000, lo: 0x8f, hi: 0xaa}, - {value: 0x5000, lo: 0xb8, hi: 0xb8}, - // Block 0x42, offset 0x43 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x9b, hi: 0xbf}, - // Block 0x43, offset 0x44 - {value: 0x0000, lo: 0x0e}, - {value: 0x00e6, lo: 0x80, hi: 0x81}, - {value: 0x00dc, lo: 0x82, hi: 0x82}, - {value: 0x00e6, lo: 0x83, hi: 0x89}, - {value: 0x00dc, lo: 0x8a, hi: 0x8a}, - {value: 0x00e6, lo: 0x8b, hi: 0x8c}, - {value: 0x00ea, lo: 0x8d, hi: 0x8d}, - {value: 0x00d6, lo: 0x8e, hi: 0x8e}, - {value: 0x00dc, lo: 0x8f, hi: 0x8f}, - {value: 0x00ca, lo: 0x90, hi: 0x90}, - {value: 0x00e6, lo: 0x91, hi: 0xa6}, - {value: 0x00e9, lo: 0xbc, hi: 0xbc}, - {value: 0x00dc, lo: 0xbd, hi: 0xbd}, - {value: 0x00e6, lo: 0xbe, hi: 0xbe}, - {value: 0x00dc, lo: 0xbf, hi: 0xbf}, - // Block 0x44, offset 0x45 - {value: 0x0000, lo: 0x03}, - {value: 0x1100, lo: 0x80, hi: 0xb5}, - {value: 0x9900, lo: 0xb6, hi: 0xb7}, - {value: 0x1100, lo: 0xb8, hi: 0xbf}, - // Block 0x45, offset 0x46 - {value: 0x0000, lo: 0x05}, - {value: 0x1100, lo: 0x80, hi: 0x99}, - {value: 0x9900, lo: 0x9a, hi: 0x9b}, - {value: 0x1100, lo: 0x9c, hi: 0xa1}, - {value: 0x9900, lo: 0xa2, hi: 0xa3}, - {value: 0x1100, lo: 0xa4, hi: 0xbf}, - // Block 0x46, offset 0x47 - {value: 0x0000, lo: 0x07}, - {value: 0x1100, lo: 0x80, hi: 0x99}, - {value: 0x5000, lo: 0x9a, hi: 0x9a}, - {value: 0x5100, lo: 0x9b, hi: 0x9b}, - {value: 0x9900, lo: 0xa0, hi: 0xa1}, - {value: 0x1100, lo: 0xa2, hi: 0xb7}, - {value: 0x9900, lo: 0xb8, hi: 0xb9}, - {value: 0x1100, lo: 0xba, hi: 0xbf}, - // Block 0x47, offset 0x48 - {value: 0x0000, lo: 0x03}, - {value: 0x1100, lo: 0x80, hi: 0x8b}, - {value: 0x9900, lo: 0x8c, hi: 0x8d}, - {value: 0x1100, lo: 0x8e, hi: 0xb9}, - // Block 0x48, offset 0x49 - {value: 0x0000, lo: 0x08}, - {value: 0x9900, lo: 0x80, hi: 0x91}, - {value: 0x1100, lo: 0x92, hi: 0x95}, - {value: 0x9900, lo: 0x98, hi: 0x99}, - {value: 0x1100, lo: 0x9a, hi: 0x9d}, - {value: 0x9900, lo: 0xa0, hi: 0xb1}, - {value: 0x1100, lo: 0xb2, hi: 0xb7}, - {value: 0x9900, lo: 0xb8, hi: 0xb9}, - {value: 0x1100, lo: 0xba, hi: 0xbf}, - // Block 0x49, offset 0x4a - {value: 0x0000, lo: 0x08}, - {value: 0x1100, lo: 0x80, hi: 0xb4}, - {value: 0x9900, lo: 0xb6, hi: 0xb6}, - {value: 0x1100, lo: 0xb7, hi: 0xba}, - {value: 0x5500, lo: 0xbb, hi: 0xbb}, - {value: 0x1100, lo: 0xbc, hi: 0xbc}, - {value: 0x5000, lo: 0xbd, hi: 0xbd}, - {value: 0x5500, lo: 0xbe, hi: 0xbe}, - {value: 0x5800, lo: 0xbf, hi: 0xbf}, - // Block 0x4a, offset 0x4b - {value: 0x0000, lo: 0x0a}, - {value: 0x5500, lo: 0x80, hi: 0x81}, - {value: 0x5000, lo: 0x82, hi: 0x8a}, - {value: 0x5000, lo: 0x91, hi: 0x91}, - {value: 0x5000, lo: 0x97, hi: 0x97}, - {value: 0x5000, lo: 0xa4, hi: 0xa6}, - {value: 0x5000, lo: 0xaf, hi: 0xaf}, - {value: 0x5000, lo: 0xb3, hi: 0xb4}, - {value: 0x5000, lo: 0xb6, hi: 0xb7}, - {value: 0x5000, lo: 0xbc, hi: 0xbc}, - {value: 0x5000, lo: 0xbe, hi: 0xbe}, - // Block 0x4b, offset 0x4c - {value: 0x0000, lo: 0x05}, - {value: 0x5000, lo: 0x87, hi: 0x89}, - {value: 0x5000, lo: 0x97, hi: 0x97}, - {value: 0x5000, lo: 0x9f, hi: 0x9f}, - {value: 0x5000, lo: 0xb0, hi: 0xb1}, - {value: 0x5000, lo: 0xb4, hi: 0xbf}, - // Block 0x4c, offset 0x4d - {value: 0x0000, lo: 0x03}, - {value: 0x5000, lo: 0x80, hi: 0x8e}, - {value: 0x5000, lo: 0x90, hi: 0x9c}, - {value: 0x5000, lo: 0xa8, hi: 0xa8}, - // Block 0x4d, offset 0x4e - {value: 0x0000, lo: 0x0d}, - {value: 0x00e6, lo: 0x90, hi: 0x91}, - {value: 0x0001, lo: 0x92, hi: 0x93}, - {value: 0x00e6, lo: 0x94, hi: 0x97}, - {value: 0x0001, lo: 0x98, hi: 0x9a}, - {value: 0x00e6, lo: 0x9b, hi: 0x9c}, - {value: 0x00e6, lo: 0xa1, hi: 0xa1}, - {value: 0x0001, lo: 0xa5, hi: 0xa6}, - {value: 0x00e6, lo: 0xa7, hi: 0xa7}, - {value: 0x00dc, lo: 0xa8, hi: 0xa8}, - {value: 0x00e6, lo: 0xa9, hi: 0xa9}, - {value: 0x0001, lo: 0xaa, hi: 0xab}, - {value: 0x00dc, lo: 0xac, hi: 0xaf}, - {value: 0x00e6, lo: 0xb0, hi: 0xb0}, - // Block 0x4e, offset 0x4f - {value: 0x0000, lo: 0x0e}, - {value: 0x5000, lo: 0x80, hi: 0x83}, - {value: 0x5000, lo: 0x85, hi: 0x87}, - {value: 0x5000, lo: 0x89, hi: 0x93}, - {value: 0x5000, lo: 0x95, hi: 0x96}, - {value: 0x5000, lo: 0x99, hi: 0x9d}, - {value: 0x5000, lo: 0xa0, hi: 0xa2}, - {value: 0x5000, lo: 0xa4, hi: 0xa4}, - {value: 0x5500, lo: 0xa6, hi: 0xa6}, - {value: 0x5000, lo: 0xa8, hi: 0xa8}, - {value: 0x5500, lo: 0xaa, hi: 0xab}, - {value: 0x5000, lo: 0xac, hi: 0xad}, - {value: 0x5000, lo: 0xaf, hi: 0xb1}, - {value: 0x5000, lo: 0xb3, hi: 0xb9}, - {value: 0x5000, lo: 0xbb, hi: 0xbf}, - // Block 0x4f, offset 0x50 - {value: 0x0000, lo: 0x03}, - {value: 0x5000, lo: 0x80, hi: 0x80}, - {value: 0x5000, lo: 0x85, hi: 0x89}, - {value: 0x5000, lo: 0x90, hi: 0xbf}, - // Block 0x50, offset 0x51 - {value: 0x0000, lo: 0x06}, - {value: 0x5000, lo: 0x89, hi: 0x89}, - {value: 0x8800, lo: 0x90, hi: 0x90}, - {value: 0x8800, lo: 0x92, hi: 0x92}, - {value: 0x8800, lo: 0x94, hi: 0x94}, - {value: 0x1100, lo: 0x9a, hi: 0x9b}, - {value: 0x1100, lo: 0xae, hi: 0xae}, - // Block 0x51, offset 0x52 - {value: 0x0000, lo: 0x04}, - {value: 0x1100, lo: 0x8d, hi: 0x8f}, - {value: 0x8800, lo: 0x90, hi: 0x90}, - {value: 0x8800, lo: 0x92, hi: 0x92}, - {value: 0x8800, lo: 0x94, hi: 0x94}, - // Block 0x52, offset 0x53 - {value: 0x0000, lo: 0x0d}, - {value: 0x8800, lo: 0x83, hi: 0x83}, - {value: 0x1100, lo: 0x84, hi: 0x84}, - {value: 0x8800, lo: 0x88, hi: 0x88}, - {value: 0x1100, lo: 0x89, hi: 0x89}, - {value: 0x8800, lo: 0x8b, hi: 0x8b}, - {value: 0x1100, lo: 0x8c, hi: 0x8c}, - {value: 0x8800, lo: 0xa3, hi: 0xa3}, - {value: 0x1100, lo: 0xa4, hi: 0xa4}, - {value: 0x8800, lo: 0xa5, hi: 0xa5}, - {value: 0x1100, lo: 0xa6, hi: 0xa6}, - {value: 0x5000, lo: 0xac, hi: 0xad}, - {value: 0x5000, lo: 0xaf, hi: 0xb0}, - {value: 0x8800, lo: 0xbc, hi: 0xbc}, - // Block 0x53, offset 0x54 - {value: 0x0000, lo: 0x0b}, - {value: 0x1100, lo: 0x80, hi: 0x81}, - {value: 0x8800, lo: 0x82, hi: 0x83}, - {value: 0x1100, lo: 0x84, hi: 0x85}, - {value: 0x8800, lo: 0x86, hi: 0x87}, - {value: 0x1100, lo: 0x88, hi: 0x89}, - {value: 0x8800, lo: 0x91, hi: 0x92}, - {value: 0x8800, lo: 0xa2, hi: 0xa2}, - {value: 0x8800, lo: 0xa8, hi: 0xa9}, - {value: 0x8800, lo: 0xab, hi: 0xab}, - {value: 0x1100, lo: 0xac, hi: 0xaf}, - {value: 0x8800, lo: 0xb2, hi: 0xb5}, - // Block 0x54, offset 0x55 - {value: 0x0000, lo: 0x02}, - {value: 0x1100, lo: 0xa0, hi: 0xa3}, - {value: 0x1100, lo: 0xaa, hi: 0xad}, - // Block 0x55, offset 0x56 - {value: 0x0000, lo: 0x01}, - {value: 0x5500, lo: 0xa9, hi: 0xaa}, - // Block 0x56, offset 0x57 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0xa0, hi: 0xbf}, - // Block 0x57, offset 0x58 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x80, hi: 0xbf}, - // Block 0x58, offset 0x59 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x80, hi: 0xaa}, - // Block 0x59, offset 0x5a - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x8c, hi: 0x8c}, - // Block 0x5a, offset 0x5b - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0xb4, hi: 0xb6}, - // Block 0x5b, offset 0x5c - {value: 0x0000, lo: 0x01}, - {value: 0x5500, lo: 0x9c, hi: 0x9c}, - // Block 0x5c, offset 0x5d - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0xbc, hi: 0xbd}, - // Block 0x5d, offset 0x5e - {value: 0x0000, lo: 0x01}, - {value: 0x00e6, lo: 0xaf, hi: 0xb1}, - // Block 0x5e, offset 0x5f - {value: 0x0000, lo: 0x02}, - {value: 0x5000, lo: 0xaf, hi: 0xaf}, - {value: 0x0009, lo: 0xbf, hi: 0xbf}, - // Block 0x5f, offset 0x60 - {value: 0x0000, lo: 0x01}, - {value: 0x00e6, lo: 0xa0, hi: 0xbf}, - // Block 0x60, offset 0x61 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x9f, hi: 0x9f}, - // Block 0x61, offset 0x62 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0xb3, hi: 0xb3}, - // Block 0x62, offset 0x63 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x80, hi: 0x95}, - // Block 0x63, offset 0x64 - {value: 0x0000, lo: 0x08}, - {value: 0x5000, lo: 0x80, hi: 0x80}, - {value: 0x00da, lo: 0xaa, hi: 0xaa}, - {value: 0x00e4, lo: 0xab, hi: 0xab}, - {value: 0x00e8, lo: 0xac, hi: 0xac}, - {value: 0x00de, lo: 0xad, hi: 0xad}, - {value: 0x00e0, lo: 0xae, hi: 0xaf}, - {value: 0x5000, lo: 0xb6, hi: 0xb6}, - {value: 0x5000, lo: 0xb8, hi: 0xba}, - // Block 0x64, offset 0x65 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0xb1, hi: 0xbf}, - // Block 0x65, offset 0x66 - {value: 0x0000, lo: 0x02}, - {value: 0x5000, lo: 0x80, hi: 0x8e}, - {value: 0x5000, lo: 0x92, hi: 0x9f}, - // Block 0x66, offset 0x67 - {value: 0x0000, lo: 0x02}, - {value: 0x5000, lo: 0x80, hi: 0x9e}, - {value: 0x5000, lo: 0xa0, hi: 0xbf}, - // Block 0x67, offset 0x68 - {value: 0x0000, lo: 0x02}, - {value: 0x5000, lo: 0x80, hi: 0x87}, - {value: 0x5000, lo: 0x90, hi: 0xbe}, - // Block 0x68, offset 0x69 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x80, hi: 0xbe}, - // Block 0x69, offset 0x6a - {value: 0x0000, lo: 0x02}, - {value: 0x00e6, lo: 0xaf, hi: 0xaf}, - {value: 0x00e6, lo: 0xbc, hi: 0xbd}, - // Block 0x6a, offset 0x6b - {value: 0x0000, lo: 0x01}, - {value: 0x00e6, lo: 0xb0, hi: 0xb1}, - // Block 0x6b, offset 0x6c - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0xb0, hi: 0xb0}, - // Block 0x6c, offset 0x6d - {value: 0x0000, lo: 0x01}, - {value: 0x0009, lo: 0x86, hi: 0x86}, - // Block 0x6d, offset 0x6e - {value: 0x0000, lo: 0x02}, - {value: 0x0009, lo: 0x84, hi: 0x84}, - {value: 0x00e6, lo: 0xa0, hi: 0xb1}, - // Block 0x6e, offset 0x6f - {value: 0x0000, lo: 0x01}, - {value: 0x00dc, lo: 0xab, hi: 0xad}, - // Block 0x6f, offset 0x70 - {value: 0x0000, lo: 0x01}, - {value: 0x0009, lo: 0x93, hi: 0x93}, - // Block 0x70, offset 0x71 - {value: 0x0000, lo: 0x01}, - {value: 0x0007, lo: 0xb3, hi: 0xb3}, - // Block 0x71, offset 0x72 - {value: 0x0000, lo: 0x01}, - {value: 0x0009, lo: 0x80, hi: 0x80}, - // Block 0x72, offset 0x73 - {value: 0x0000, lo: 0x05}, - {value: 0x00e6, lo: 0xb0, hi: 0xb0}, - {value: 0x00e6, lo: 0xb2, hi: 0xb3}, - {value: 0x00dc, lo: 0xb4, hi: 0xb4}, - {value: 0x00e6, lo: 0xb7, hi: 0xb8}, - {value: 0x00e6, lo: 0xbe, hi: 0xbf}, - // Block 0x73, offset 0x74 - {value: 0x0000, lo: 0x01}, - {value: 0x00e6, lo: 0x81, hi: 0x81}, - // Block 0x74, offset 0x75 - {value: 0x0000, lo: 0x01}, - {value: 0x0009, lo: 0xad, hi: 0xad}, - // Block 0x75, offset 0x76 - {value: 0x0000, lo: 0x01}, - {value: 0x1100, lo: 0x80, hi: 0xbf}, - // Block 0x76, offset 0x77 - {value: 0x0000, lo: 0x01}, - {value: 0x1100, lo: 0x80, hi: 0xa3}, - // Block 0x77, offset 0x78 - {value: 0x0000, lo: 0x01}, - {value: 0x5500, lo: 0x80, hi: 0xbf}, - // Block 0x78, offset 0x79 - {value: 0x0000, lo: 0x09}, - {value: 0x5500, lo: 0x80, hi: 0x8d}, - {value: 0x5500, lo: 0x90, hi: 0x90}, - {value: 0x5500, lo: 0x92, hi: 0x92}, - {value: 0x5500, lo: 0x95, hi: 0x9e}, - {value: 0x5500, lo: 0xa0, hi: 0xa0}, - {value: 0x5500, lo: 0xa2, hi: 0xa2}, - {value: 0x5500, lo: 0xa5, hi: 0xa6}, - {value: 0x5500, lo: 0xaa, hi: 0xad}, - {value: 0x5500, lo: 0xb0, hi: 0xbf}, - // Block 0x79, offset 0x7a - {value: 0x0000, lo: 0x02}, - {value: 0x5500, lo: 0x80, hi: 0xad}, - {value: 0x5500, lo: 0xb0, hi: 0xbf}, - // Block 0x7a, offset 0x7b - {value: 0x0000, lo: 0x01}, - {value: 0x5500, lo: 0x80, hi: 0x99}, - // Block 0x7b, offset 0x7c - {value: 0x0000, lo: 0x09}, - {value: 0x5000, lo: 0x80, hi: 0x86}, - {value: 0x5000, lo: 0x93, hi: 0x97}, - {value: 0x5500, lo: 0x9d, hi: 0x9d}, - {value: 0x001a, lo: 0x9e, hi: 0x9e}, - {value: 0x5500, lo: 0x9f, hi: 0x9f}, - {value: 0x5000, lo: 0xa0, hi: 0xa9}, - {value: 0x5500, lo: 0xaa, hi: 0xb6}, - {value: 0x5500, lo: 0xb8, hi: 0xbc}, - {value: 0x5500, lo: 0xbe, hi: 0xbe}, - // Block 0x7c, offset 0x7d - {value: 0x0000, lo: 0x04}, - {value: 0x5500, lo: 0x80, hi: 0x81}, - {value: 0x5500, lo: 0x83, hi: 0x84}, - {value: 0x5500, lo: 0x86, hi: 0x8e}, - {value: 0x5000, lo: 0x8f, hi: 0xbf}, - // Block 0x7d, offset 0x7e - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x80, hi: 0xb1}, - // Block 0x7e, offset 0x7f - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x93, hi: 0xbf}, - // Block 0x7f, offset 0x80 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x80, hi: 0xbd}, - // Block 0x80, offset 0x81 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x90, hi: 0xbf}, - // Block 0x81, offset 0x82 - {value: 0x0000, lo: 0x02}, - {value: 0x5000, lo: 0x80, hi: 0x8f}, - {value: 0x5000, lo: 0x92, hi: 0xbf}, - // Block 0x82, offset 0x83 - {value: 0x0000, lo: 0x02}, - {value: 0x5000, lo: 0x80, hi: 0x87}, - {value: 0x5000, lo: 0xb0, hi: 0xbc}, - // Block 0x83, offset 0x84 - {value: 0x0000, lo: 0x03}, - {value: 0x5000, lo: 0x90, hi: 0x99}, - {value: 0x00e6, lo: 0xa0, hi: 0xa6}, - {value: 0x5000, lo: 0xb0, hi: 0xbf}, - // Block 0x84, offset 0x85 - {value: 0x0000, lo: 0x07}, - {value: 0x5000, lo: 0x80, hi: 0x84}, - {value: 0x5000, lo: 0x87, hi: 0x92}, - {value: 0x5000, lo: 0x94, hi: 0xa6}, - {value: 0x5000, lo: 0xa8, hi: 0xab}, - {value: 0x5000, lo: 0xb0, hi: 0xb2}, - {value: 0x5000, lo: 0xb4, hi: 0xb4}, - {value: 0x5000, lo: 0xb6, hi: 0xbf}, - // Block 0x85, offset 0x86 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x80, hi: 0xbc}, - // Block 0x86, offset 0x87 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x81, hi: 0xbf}, - // Block 0x87, offset 0x88 - {value: 0x0000, lo: 0x06}, - {value: 0x5000, lo: 0x82, hi: 0x87}, - {value: 0x5000, lo: 0x8a, hi: 0x8f}, - {value: 0x5000, lo: 0x92, hi: 0x97}, - {value: 0x5000, lo: 0x9a, hi: 0x9c}, - {value: 0x5000, lo: 0xa0, hi: 0xa6}, - {value: 0x5000, lo: 0xa8, hi: 0xae}, - // Block 0x88, offset 0x89 - {value: 0x0000, lo: 0x01}, - {value: 0x00dc, lo: 0xbd, hi: 0xbd}, - // Block 0x89, offset 0x8a - {value: 0x00db, lo: 0x05}, - {value: 0x00dc, lo: 0x8d, hi: 0x8d}, - {value: 0x00e6, lo: 0x8f, hi: 0x8f}, - {value: 0x00e6, lo: 0xb8, hi: 0xb8}, - {value: 0x0001, lo: 0xb9, hi: 0xba}, - {value: 0x0009, lo: 0xbf, hi: 0xbf}, - // Block 0x8a, offset 0x8b - {value: 0x65fe, lo: 0x07}, - {value: 0x8800, lo: 0x99, hi: 0x99}, - {value: 0x1100, lo: 0x9a, hi: 0x9a}, - {value: 0x8800, lo: 0x9b, hi: 0x9b}, - {value: 0x1100, lo: 0x9c, hi: 0x9c}, - {value: 0x8800, lo: 0xa5, hi: 0xa5}, - {value: 0x1100, lo: 0xab, hi: 0xab}, - {value: 0x0009, lo: 0xb9, hi: 0xba}, - // Block 0x8b, offset 0x8c - {value: 0x0000, lo: 0x06}, - {value: 0x5500, lo: 0x9e, hi: 0xa4}, - {value: 0x00d8, lo: 0xa5, hi: 0xa6}, - {value: 0x0001, lo: 0xa7, hi: 0xa9}, - {value: 0x00e2, lo: 0xad, hi: 0xad}, - {value: 0x00d8, lo: 0xae, hi: 0xb2}, - {value: 0x00dc, lo: 0xbb, hi: 0xbf}, - // Block 0x8c, offset 0x8d - {value: 0x0000, lo: 0x05}, - {value: 0x00dc, lo: 0x80, hi: 0x82}, - {value: 0x00e6, lo: 0x85, hi: 0x89}, - {value: 0x00dc, lo: 0x8a, hi: 0x8b}, - {value: 0x00e6, lo: 0xaa, hi: 0xad}, - {value: 0x5500, lo: 0xbb, hi: 0xbf}, - // Block 0x8d, offset 0x8e - {value: 0x0000, lo: 0x01}, - {value: 0x5500, lo: 0x80, hi: 0x80}, - // Block 0x8e, offset 0x8f - {value: 0x0000, lo: 0x01}, - {value: 0x00e6, lo: 0x82, hi: 0x84}, - // Block 0x8f, offset 0x90 - {value: 0x0000, lo: 0x02}, - {value: 0x5000, lo: 0x80, hi: 0x94}, - {value: 0x5000, lo: 0x96, hi: 0xbf}, - // Block 0x90, offset 0x91 - {value: 0x0000, lo: 0x08}, - {value: 0x5000, lo: 0x80, hi: 0x9c}, - {value: 0x5000, lo: 0x9e, hi: 0x9f}, - {value: 0x5000, lo: 0xa2, hi: 0xa2}, - {value: 0x5000, lo: 0xa5, hi: 0xa6}, - {value: 0x5000, lo: 0xa9, hi: 0xac}, - {value: 0x5000, lo: 0xae, hi: 0xb9}, - {value: 0x5000, lo: 0xbb, hi: 0xbb}, - {value: 0x5000, lo: 0xbd, hi: 0xbf}, - // Block 0x91, offset 0x92 - {value: 0x0000, lo: 0x02}, - {value: 0x5000, lo: 0x80, hi: 0x83}, - {value: 0x5000, lo: 0x85, hi: 0xbf}, - // Block 0x92, offset 0x93 - {value: 0x0000, lo: 0x06}, - {value: 0x5000, lo: 0x80, hi: 0x85}, - {value: 0x5000, lo: 0x87, hi: 0x8a}, - {value: 0x5000, lo: 0x8d, hi: 0x94}, - {value: 0x5000, lo: 0x96, hi: 0x9c}, - {value: 0x5000, lo: 0x9e, hi: 0xb9}, - {value: 0x5000, lo: 0xbb, hi: 0xbe}, - // Block 0x93, offset 0x94 - {value: 0x0000, lo: 0x04}, - {value: 0x5000, lo: 0x80, hi: 0x84}, - {value: 0x5000, lo: 0x86, hi: 0x86}, - {value: 0x5000, lo: 0x8a, hi: 0x90}, - {value: 0x5000, lo: 0x92, hi: 0xbf}, - // Block 0x94, offset 0x95 - {value: 0x0000, lo: 0x02}, - {value: 0x5000, lo: 0x80, hi: 0xa5}, - {value: 0x5000, lo: 0xa8, hi: 0xbf}, - // Block 0x95, offset 0x96 - {value: 0x0000, lo: 0x02}, - {value: 0x5000, lo: 0x80, hi: 0x8b}, - {value: 0x5000, lo: 0x8e, hi: 0xbf}, - // Block 0x96, offset 0x97 - {value: 0x0000, lo: 0x03}, - {value: 0x5000, lo: 0x80, hi: 0x8a}, - {value: 0x5000, lo: 0x90, hi: 0xae}, - {value: 0x5000, lo: 0xb0, hi: 0xbf}, - // Block 0x97, offset 0x98 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x80, hi: 0x8f}, - // Block 0x98, offset 0x99 - {value: 0x0000, lo: 0x01}, - {value: 0x5000, lo: 0x90, hi: 0x90}, - // Block 0x99, offset 0x9a - {value: 0x0000, lo: 0x02}, - {value: 0x5000, lo: 0x80, hi: 0x82}, - {value: 0x5000, lo: 0x90, hi: 0xba}, - // Block 0x9a, offset 0x9b - {value: 0x0000, lo: 0x02}, - {value: 0x5000, lo: 0x80, hi: 0x88}, - {value: 0x5000, lo: 0x90, hi: 0x91}, - // Block 0x9b, offset 0x9c - {value: 0x0000, lo: 0x01}, - {value: 0x5500, lo: 0x80, hi: 0x9d}, -} - -// charInfoLookup: 1152 bytes -// Block 0 is the null block. -var charInfoLookup = [1152]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0x0c2: 0x10, 0x0c3: 0x03, 0x0c4: 0x11, 0x0c5: 0x12, 0x0c6: 0x13, 0x0c7: 0x14, - 0x0c8: 0x15, 0x0ca: 0x16, 0x0cb: 0x17, 0x0cc: 0x04, 0x0cd: 0x05, 0x0ce: 0x06, 0x0cf: 0x18, - 0x0d0: 0x07, 0x0d1: 0x19, 0x0d2: 0x1a, 0x0d3: 0x1b, 0x0d6: 0x08, 0x0d7: 0x1c, - 0x0d8: 0x1d, 0x0d9: 0x09, 0x0db: 0x1e, 0x0dc: 0x1f, 0x0dd: 0x20, 0x0df: 0x21, - 0x0e0: 0x04, 0x0e1: 0x05, 0x0e2: 0x06, 0x0e3: 0x07, - 0x0ea: 0x08, 0x0eb: 0x09, 0x0ec: 0x09, 0x0ed: 0x0a, 0x0ef: 0x0b, - 0x0f0: 0x11, - // Block 0x4, offset 0x100 - 0x120: 0x22, 0x121: 0x23, 0x124: 0x24, 0x125: 0x25, 0x126: 0x26, 0x127: 0x27, - 0x128: 0x28, 0x129: 0x29, 0x12a: 0x2a, 0x12b: 0x2b, 0x12c: 0x26, 0x12d: 0x2c, 0x12e: 0x2d, 0x12f: 0x2e, - 0x131: 0x2f, 0x132: 0x30, 0x133: 0x31, 0x134: 0x32, 0x135: 0x2e, 0x137: 0x33, - 0x138: 0x34, 0x139: 0x35, 0x13a: 0x36, 0x13b: 0x37, 0x13c: 0x38, 0x13d: 0x39, 0x13e: 0x3a, 0x13f: 0x3b, - // Block 0x5, offset 0x140 - 0x140: 0x3c, 0x142: 0x3d, 0x143: 0x3e, 0x144: 0x3f, 0x145: 0x40, 0x146: 0x41, 0x147: 0x42, - 0x14d: 0x43, - 0x15c: 0x44, 0x15f: 0x45, - 0x162: 0x46, 0x164: 0x47, - 0x168: 0x48, 0x169: 0x49, 0x16c: 0x4a, 0x16d: 0x4b, 0x16e: 0x4c, 0x16f: 0x4d, - 0x170: 0x4e, 0x173: 0x4f, 0x174: 0x50, 0x175: 0x51, 0x176: 0x52, 0x177: 0x53, - 0x178: 0x54, 0x179: 0x55, 0x17a: 0x56, 0x17b: 0x57, 0x17c: 0x58, 0x17d: 0x0a, 0x17e: 0x59, 0x17f: 0x0b, - // Block 0x6, offset 0x180 - 0x180: 0x5a, 0x181: 0x5b, 0x182: 0x5c, 0x183: 0x5d, 0x184: 0x5e, 0x185: 0x5f, 0x186: 0x60, 0x187: 0x61, - 0x188: 0x62, 0x189: 0x0c, 0x18a: 0x63, 0x18b: 0x64, 0x18c: 0x65, - 0x191: 0x66, 0x192: 0x67, 0x193: 0x68, - 0x1a8: 0x69, 0x1a9: 0x6a, 0x1ab: 0x6b, - 0x1b1: 0x6c, 0x1b3: 0x6d, 0x1b5: 0x6e, 0x1b7: 0x6f, - 0x1ba: 0x70, 0x1bb: 0x71, 0x1bc: 0x67, 0x1bd: 0x67, 0x1be: 0x67, 0x1bf: 0x72, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x73, 0x1c1: 0x0d, 0x1c2: 0x0e, 0x1c3: 0x0f, 0x1c4: 0x74, 0x1c5: 0x67, 0x1c6: 0x75, - 0x1c8: 0x76, 0x1c9: 0x77, 0x1ca: 0x67, 0x1cb: 0x78, 0x1cc: 0x67, 0x1cd: 0x67, 0x1ce: 0x67, 0x1cf: 0x67, - // Block 0x8, offset 0x200 - 0x219: 0x79, 0x21b: 0x7a, 0x21d: 0x7b, - 0x220: 0x7c, 0x223: 0x7d, 0x224: 0x7e, 0x225: 0x7f, 0x226: 0x80, 0x227: 0x81, - 0x22a: 0x82, 0x22b: 0x83, 0x22f: 0x84, - 0x230: 0x85, 0x231: 0x85, 0x232: 0x85, 0x233: 0x85, 0x234: 0x85, 0x235: 0x85, 0x236: 0x85, 0x237: 0x85, - 0x238: 0x85, 0x239: 0x85, 0x23a: 0x85, 0x23b: 0x85, 0x23c: 0x85, 0x23d: 0x85, 0x23e: 0x85, 0x23f: 0x85, - // Block 0x9, offset 0x240 - 0x240: 0x85, 0x241: 0x85, 0x242: 0x85, 0x243: 0x85, 0x244: 0x85, 0x245: 0x85, 0x246: 0x85, 0x247: 0x85, - 0x248: 0x85, 0x249: 0x85, 0x24a: 0x85, 0x24b: 0x85, 0x24c: 0x85, 0x24d: 0x85, 0x24e: 0x85, 0x24f: 0x85, - 0x250: 0x85, 0x251: 0x85, 0x252: 0x85, 0x253: 0x85, 0x254: 0x85, 0x255: 0x85, 0x256: 0x85, 0x257: 0x85, - 0x258: 0x85, 0x259: 0x85, 0x25a: 0x85, 0x25b: 0x85, 0x25c: 0x85, 0x25d: 0x85, 0x25e: 0x85, 0x25f: 0x85, - 0x260: 0x85, 0x261: 0x85, 0x262: 0x85, 0x263: 0x85, 0x264: 0x85, 0x265: 0x85, 0x266: 0x85, 0x267: 0x85, - 0x268: 0x85, 0x269: 0x85, 0x26a: 0x85, 0x26b: 0x85, 0x26c: 0x85, 0x26d: 0x85, 0x26e: 0x85, 0x26f: 0x85, - 0x270: 0x85, 0x271: 0x85, 0x272: 0x85, 0x273: 0x85, 0x274: 0x85, 0x275: 0x85, 0x276: 0x85, 0x277: 0x85, - 0x278: 0x85, 0x279: 0x85, 0x27a: 0x85, 0x27b: 0x85, 0x27c: 0x85, 0x27d: 0x85, 0x27e: 0x85, 0x27f: 0x85, - // Block 0xa, offset 0x280 - 0x280: 0x85, 0x281: 0x85, 0x282: 0x85, 0x283: 0x85, 0x284: 0x85, 0x285: 0x85, 0x286: 0x85, 0x287: 0x85, - 0x288: 0x85, 0x289: 0x85, 0x28a: 0x85, 0x28b: 0x85, 0x28c: 0x85, 0x28d: 0x85, 0x28e: 0x85, 0x28f: 0x85, - 0x290: 0x85, 0x291: 0x85, 0x292: 0x85, 0x293: 0x85, 0x294: 0x85, 0x295: 0x85, 0x296: 0x85, 0x297: 0x85, - 0x298: 0x85, 0x299: 0x85, 0x29a: 0x85, 0x29b: 0x85, 0x29c: 0x85, 0x29d: 0x85, 0x29e: 0x86, - // Block 0xb, offset 0x2c0 - 0x2e4: 0x87, 0x2e5: 0x87, 0x2e6: 0x87, 0x2e7: 0x87, - 0x2e8: 0x88, 0x2e9: 0x89, 0x2ea: 0x87, 0x2eb: 0x8a, 0x2ec: 0x8b, 0x2ed: 0x8c, 0x2ee: 0x8d, 0x2ef: 0x8e, - 0x2f0: 0x67, 0x2f1: 0x67, 0x2f2: 0x67, 0x2f3: 0x67, 0x2f4: 0x8f, 0x2f5: 0x90, 0x2f6: 0x91, 0x2f7: 0x92, - 0x2f8: 0x93, 0x2f9: 0x94, 0x2fa: 0x67, 0x2fb: 0x95, 0x2fc: 0x96, 0x2fd: 0x67, 0x2fe: 0x78, 0x2ff: 0x97, - // Block 0xc, offset 0x300 - 0x307: 0x98, - 0x328: 0x99, - // Block 0xd, offset 0x340 - 0x341: 0x7c, 0x342: 0x9a, - // Block 0xe, offset 0x380 - 0x385: 0x9b, 0x386: 0x9c, 0x387: 0x9d, - 0x389: 0x9e, - 0x390: 0x67, 0x391: 0x9f, 0x392: 0xa0, 0x393: 0xa1, 0x394: 0xa2, 0x395: 0xa3, 0x396: 0x67, 0x397: 0x67, - 0x398: 0x67, 0x399: 0x67, 0x39a: 0xa4, 0x39b: 0x67, 0x39c: 0x67, 0x39d: 0x67, 0x39e: 0x67, 0x39f: 0xa5, - // Block 0xf, offset 0x3c0 - 0x3c4: 0xa6, 0x3c5: 0xa7, 0x3c6: 0xa8, - 0x3c8: 0xa9, 0x3c9: 0xaa, - // Block 0x10, offset 0x400 - 0x420: 0x87, 0x421: 0x87, 0x422: 0x87, 0x423: 0x87, 0x424: 0x87, 0x425: 0x87, 0x426: 0x87, 0x427: 0x87, - 0x428: 0xab, - // Block 0x11, offset 0x440 - 0x450: 0x0c, 0x451: 0x0d, - 0x45d: 0x0e, 0x45f: 0x0f, - 0x46f: 0x10, -} - -var charInfoTrie = trie{charInfoLookup[:], charInfoValues[:], charInfoSparseValues[:], charInfoSparseOffset[:], 16} - -// Total size of tables: 48KB (48736 bytes) +// Total size of tables: 50KB (50848 bytes) diff --git a/libgo/go/exp/norm/triegen.go b/libgo/go/exp/norm/triegen.go index 4ad9e0e057c..2e275a06254 100644 --- a/libgo/go/exp/norm/triegen.go +++ b/libgo/go/exp/norm/triegen.go @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// +build ignore + // Trie table generator. // Used by make*tables tools to generate a go file with trie data structures // for mapping UTF-8 to a 16-bit value. All but the last byte in a UTF-8 byte diff --git a/libgo/go/exp/proxy/per_host.go b/libgo/go/exp/proxy/per_host.go index 397ef57cd92..0c627e9ab54 100644 --- a/libgo/go/exp/proxy/per_host.go +++ b/libgo/go/exp/proxy/per_host.go @@ -75,7 +75,7 @@ func (p *PerHost) dialerForRequest(host string) Dialer { } // AddFromString parses a string that contains comma-separated values -// specifing hosts that should use the bypass proxy. Each value is either an +// specifying hosts that should use the bypass proxy. Each value is either an // IP address, a CIDR range, a zone (*.example.com) or a hostname // (localhost). A best effort is made to parse the string and errors are // ignored. diff --git a/libgo/go/exp/proxy/socks5.go b/libgo/go/exp/proxy/socks5.go index 466e135eb10..62fa5c9296d 100644 --- a/libgo/go/exp/proxy/socks5.go +++ b/libgo/go/exp/proxy/socks5.go @@ -98,9 +98,9 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) { buf = append(buf, socks5Version) if len(s.user) > 0 && len(s.user) < 256 && len(s.password) < 256 { - buf = append(buf, 2, /* num auth methods */ socks5AuthNone, socks5AuthPassword) + buf = append(buf, 2 /* num auth methods */, socks5AuthNone, socks5AuthPassword) } else { - buf = append(buf, 1, /* num auth methods */ socks5AuthNone) + buf = append(buf, 1 /* num auth methods */, socks5AuthNone) } if _, err = conn.Write(buf); err != nil { @@ -139,7 +139,7 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) { } buf = buf[:0] - buf = append(buf, socks5Version, socks5Connect, 0 /* reserved */ ) + buf = append(buf, socks5Version, socks5Connect, 0 /* reserved */) if ip := net.ParseIP(host); ip != nil { if len(ip) == 4 { diff --git a/libgo/go/exp/signal/signal.go b/libgo/go/exp/signal/signal.go deleted file mode 100644 index bce4530e7bc..00000000000 --- a/libgo/go/exp/signal/signal.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build darwin freebsd linux netbsd openbsd - -// Package signal implements operating system-independent signal handling. -package signal - -import ( - "os" - "runtime" -) - -// Incoming is the global signal channel. -// All signals received by the program will be delivered to this channel. -var Incoming <-chan os.Signal - -func process(ch chan<- os.Signal) { - for { - var mask uint32 = runtime.Sigrecv() - for sig := uint(0); sig < 32; sig++ { - if mask&(1<<sig) != 0 { - ch <- os.UnixSignal(sig) - } - } - } -} - -func init() { - runtime.Siginit() - ch := make(chan os.Signal) // Done here so Incoming can have type <-chan Signal - Incoming = ch - go process(ch) -} - -// BUG(rsc): This package is unavailable on Plan 9 and Windows. diff --git a/libgo/go/exp/signal/signal_test.go b/libgo/go/exp/signal/signal_test.go deleted file mode 100644 index a7cecb38256..00000000000 --- a/libgo/go/exp/signal/signal_test.go +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build darwin freebsd linux netbsd openbsd - -package signal - -import ( - "os" - "syscall" - "testing" -) - -const sighup = os.UnixSignal(syscall.SIGHUP) - -func TestSignal(t *testing.T) { - // Send this process a SIGHUP. - syscall.Syscall(syscall.SYS_KILL, uintptr(syscall.Getpid()), syscall.SIGHUP, 0) - - if sig := (<-Incoming).(os.UnixSignal); sig != sighup { - t.Errorf("signal was %v, want %v", sig, sighup) - } -} diff --git a/libgo/go/exp/terminal/terminal.go b/libgo/go/exp/terminal/terminal.go index c3ba5bde2ee..c1ed0c0c443 100644 --- a/libgo/go/exp/terminal/terminal.go +++ b/libgo/go/exp/terminal/terminal.go @@ -389,12 +389,12 @@ func (t *Terminal) Write(buf []byte) (n int, err error) { // We have a prompt and possibly user input on the screen. We // have to clear it first. - t.move(0, /* up */ 0, /* down */ t.cursorX, /* left */ 0 /* right */ ) + t.move(0 /* up */, 0 /* down */, t.cursorX /* left */, 0 /* right */) t.cursorX = 0 t.clearLineToRight() for t.cursorY > 0 { - t.move(1, /* up */ 0, 0, 0) + t.move(1 /* up */, 0, 0, 0) t.cursorY-- t.clearLineToRight() } diff --git a/libgo/go/exp/types/check.go b/libgo/go/exp/types/check.go index 09e29d1261a..ae0beb4e9b0 100644 --- a/libgo/go/exp/types/check.go +++ b/libgo/go/exp/types/check.go @@ -17,14 +17,14 @@ import ( const debug = false type checker struct { - fset *token.FileSet - scanner.ErrorVector - types map[ast.Expr]Type + fset *token.FileSet + errors scanner.ErrorList + types map[ast.Expr]Type } func (c *checker) errorf(pos token.Pos, format string, args ...interface{}) string { msg := fmt.Sprintf(format, args...) - c.Error(c.fset.Position(pos), msg) + c.errors.Add(c.fset.Position(pos), msg) return msg } @@ -221,5 +221,6 @@ func Check(fset *token.FileSet, pkg *ast.Package) (types map[ast.Expr]Type, err c.checkObj(obj, false) } - return c.types, c.GetError(scanner.NoMultiples) + c.errors.RemoveMultiples() + return c.types, c.errors.Err() } diff --git a/libgo/go/exp/types/gcimporter.go b/libgo/go/exp/types/gcimporter.go index a573fbb2463..cb996f28055 100644 --- a/libgo/go/exp/types/gcimporter.go +++ b/libgo/go/exp/types/gcimporter.go @@ -11,20 +11,20 @@ import ( "errors" "fmt" "go/ast" + "go/build" "go/token" "io" "math/big" "os" "path/filepath" - "runtime" "strconv" + "strings" "text/scanner" ) const trace = false // set to true for debugging var ( - pkgRoot = filepath.Join(runtime.GOROOT(), "pkg", runtime.GOOS+"_"+runtime.GOARCH) pkgExts = [...]string{".a", ".5", ".6", ".8"} ) @@ -39,8 +39,15 @@ func findPkg(path string) (filename, id string) { var noext string switch path[0] { default: - // "x" -> "$GOROOT/pkg/$GOOS_$GOARCH/x.ext", "x" - noext = filepath.Join(pkgRoot, path) + // "x" -> "$GOPATH/pkg/$GOOS_$GOARCH/x.ext", "x" + bp, _ := build.Import(path, "", build.FindOnly) + if bp.PkgObj == "" { + return + } + noext = bp.PkgObj + if strings.HasSuffix(noext, ".a") { + noext = noext[:len(noext)-2] + } case '.': // "./x" -> "/this/directory/x.ext", "/this/directory/x" @@ -739,7 +746,7 @@ func (p *gcParser) parseVarDecl() { } // FuncBody = "{" ... "}" . -// +// func (p *gcParser) parseFuncBody() { p.expect('{') for i := 1; i > 0; p.next() { diff --git a/libgo/go/exp/types/gcimporter_test.go b/libgo/go/exp/types/gcimporter_test.go index 912d467ea08..c229b50113d 100644 --- a/libgo/go/exp/types/gcimporter_test.go +++ b/libgo/go/exp/types/gcimporter_test.go @@ -6,7 +6,9 @@ package types import ( "go/ast" + "go/build" "io/ioutil" + "os" "os/exec" "path/filepath" "runtime" @@ -31,7 +33,7 @@ func init() { gcPath = gcName return } - gcPath = filepath.Join(runtime.GOROOT(), "/bin/tool/", gcName) + gcPath = filepath.Join(build.ToolDir, gcName) } func compile(t *testing.T, dirname, filename string) { @@ -61,7 +63,7 @@ func testPath(t *testing.T, path string) bool { const maxTime = 3 * time.Second func testDir(t *testing.T, dir string, endTime time.Time) (nimports int) { - dirname := filepath.Join(pkgRoot, dir) + dirname := filepath.Join(runtime.GOROOT(), "pkg", runtime.GOOS+"_"+runtime.GOARCH, dir) list, err := ioutil.ReadDir(dirname) if err != nil { t.Errorf("testDir(%s): %s", dirname, err) @@ -90,6 +92,13 @@ func testDir(t *testing.T, dir string, endTime time.Time) (nimports int) { } func TestGcImport(t *testing.T) { + // On cross-compile builds, the path will not exist. + // Need to use GOHOSTOS, which is not available. + if _, err := os.Stat(gcPath); err != nil { + t.Logf("skipping test: %v", err) + return + } + compile(t, "testdata", "exports.go") nimports := 0 diff --git a/libgo/go/exp/types/types.go b/libgo/go/exp/types/types.go index 3aa896892e3..85d244cf04a 100644 --- a/libgo/go/exp/types/types.go +++ b/libgo/go/exp/types/types.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// PACKAGE UNDER CONSTRUCTION. ANY AND ALL PARTS MAY CHANGE. -// Package types declares the types used to represent Go types. +// Package types declares the types used to represent Go types +// (UNDER CONSTRUCTION). ANY AND ALL PARTS MAY CHANGE. // package types diff --git a/libgo/go/exp/winfsnotify/winfsnotify_test.go b/libgo/go/exp/winfsnotify/winfsnotify_test.go index 59ac1624a26..4a1929a8397 100644 --- a/libgo/go/exp/winfsnotify/winfsnotify_test.go +++ b/libgo/go/exp/winfsnotify/winfsnotify_test.go @@ -7,6 +7,7 @@ package winfsnotify import ( + "io/ioutil" "os" "testing" "time" @@ -115,7 +116,13 @@ func TestNotifyClose(t *testing.T) { t.Fatal("double Close() test failed: second Close() call didn't return") } - err := watcher.Watch("_test") + dir, err := ioutil.TempDir("", "wininotify") + if err != nil { + t.Fatalf("TempDir failed: %s", err) + } + defer os.RemoveAll(dir) + + err = watcher.Watch(dir) if err == nil { t.Fatal("expected error on Watch() after Close(), got nil") } diff --git a/libgo/go/fmt/fmt_test.go b/libgo/go/fmt/fmt_test.go index 1b02f52baa9..f34df59422f 100644 --- a/libgo/go/fmt/fmt_test.go +++ b/libgo/go/fmt/fmt_test.go @@ -423,6 +423,7 @@ var fmttests = []struct { {"p0=%p", new(int), "p0=0xPTR"}, {"p1=%s", &pValue, "p1=String(p)"}, // String method... {"p2=%p", &pValue, "p2=0xPTR"}, // ... not called with %p + {"p3=%p", (*int)(nil), "p3=0x0"}, {"p4=%#p", new(int), "p4=PTR"}, // %p on non-pointers @@ -431,6 +432,14 @@ var fmttests = []struct { {"%p", make([]int, 1), "0xPTR"}, {"%p", 27, "%!p(int=27)"}, // not a pointer at all + // %q on pointers + {"%q", (*int)(nil), "%!q(*int=<nil>)"}, + {"%q", new(int), "%!q(*int=0xPTR)"}, + + // %v on pointers formats 0 as <nil> + {"%v", (*int)(nil), "<nil>"}, + {"%v", new(int), "0xPTR"}, + // %d on Stringer should give integer if possible {"%s", time.Time{}.Month(), "January"}, {"%d", time.Time{}.Month(), "1"}, diff --git a/libgo/go/fmt/print.go b/libgo/go/fmt/print.go index 3b7d3464e20..c3ba2f339e5 100644 --- a/libgo/go/fmt/print.go +++ b/libgo/go/fmt/print.go @@ -553,6 +553,14 @@ func (p *pp) fmtBytes(v []byte, verb rune, goSyntax bool, depth int) { } func (p *pp) fmtPointer(value reflect.Value, verb rune, goSyntax bool) { + switch verb { + case 'p', 'v', 'b', 'd', 'o', 'x', 'X': + // ok + default: + p.badVerb(verb) + return + } + var u uintptr switch value.Kind() { case reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr, reflect.Slice, reflect.UnsafePointer: @@ -561,6 +569,7 @@ func (p *pp) fmtPointer(value reflect.Value, verb rune, goSyntax bool) { p.badVerb(verb) return } + if goSyntax { p.add('(') p.buf.WriteString(value.Type().String()) @@ -572,6 +581,8 @@ func (p *pp) fmtPointer(value reflect.Value, verb rune, goSyntax bool) { p.fmt0x64(uint64(u), true) } p.add(')') + } else if verb == 'v' && u == 0 { + p.buf.Write(nilAngleBytes) } else { p.fmt0x64(uint64(u), !p.fmt.sharp) } @@ -929,24 +940,7 @@ BigSwitch: break BigSwitch } } - if goSyntax { - p.buf.WriteByte('(') - p.buf.WriteString(value.Type().String()) - p.buf.WriteByte(')') - p.buf.WriteByte('(') - if v == 0 { - p.buf.Write(nilBytes) - } else { - p.fmt0x64(uint64(v), true) - } - p.buf.WriteByte(')') - break - } - if v == 0 { - p.buf.Write(nilAngleBytes) - break - } - p.fmt0x64(uint64(v), true) + fallthrough case reflect.Chan, reflect.Func, reflect.UnsafePointer: p.fmtPointer(value, verb, goSyntax) default: diff --git a/libgo/go/fmt/scan.go b/libgo/go/fmt/scan.go index 36c6aebad0e..fa9a5584a88 100644 --- a/libgo/go/fmt/scan.go +++ b/libgo/go/fmt/scan.go @@ -512,7 +512,7 @@ func (s *ss) scanBool(verb rune) bool { } return true case 'f', 'F': - if s.accept("aL") && (!s.accept("lL") || !s.accept("sS") || !s.accept("eE")) { + if s.accept("aA") && (!s.accept("lL") || !s.accept("sS") || !s.accept("eE")) { s.error(boolError) } return false diff --git a/libgo/go/fmt/scan_test.go b/libgo/go/fmt/scan_test.go index b26c828cbfc..61b48f9cc6d 100644 --- a/libgo/go/fmt/scan_test.go +++ b/libgo/go/fmt/scan_test.go @@ -317,6 +317,7 @@ var overflowTests = []ScanTest{ {"(1-1e500i)", &complex128Val, 0}, } +var truth bool var i, j, k int var f float64 var s, t string @@ -350,6 +351,9 @@ var multiTests = []ScanfMultiTest{ // Bad UTF-8: should see every byte. {"%c%c%c", "\xc2X\xc2", args(&r1, &r2, &r3), args(utf8.RuneError, 'X', utf8.RuneError), ""}, + + // Fixed bugs + {"%v%v", "FALSE23", args(&truth, &i), args(false, 23), ""}, } func testScan(name string, t *testing.T, scan func(r io.Reader, a ...interface{}) (int, error)) { diff --git a/libgo/go/go/ast/print.go b/libgo/go/go/ast/print.go index f6c63c0d889..02cf9e02234 100644 --- a/libgo/go/go/ast/print.go +++ b/libgo/go/go/ast/print.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// This file contains printing suppport for ASTs. +// This file contains printing support for ASTs. package ast diff --git a/libgo/go/go/ast/resolve.go b/libgo/go/go/ast/resolve.go index c7c8e7c101e..908e61c5da0 100644 --- a/libgo/go/go/ast/resolve.go +++ b/libgo/go/go/ast/resolve.go @@ -14,12 +14,12 @@ import ( ) type pkgBuilder struct { - scanner.ErrorVector - fset *token.FileSet + fset *token.FileSet + errors scanner.ErrorList } func (p *pkgBuilder) error(pos token.Pos, msg string) { - p.Error(p.fset.Position(pos), msg) + p.errors.Add(p.fset.Position(pos), msg) } func (p *pkgBuilder) errorf(pos token.Pos, format string, args ...interface{}) { @@ -169,5 +169,6 @@ func NewPackage(fset *token.FileSet, files map[string]*File, importer Importer, pkgScope.Outer = universe // reset universe scope } - return &Package{pkgName, pkgScope, imports, files}, p.GetError(scanner.Sorted) + p.errors.Sort() + return &Package{pkgName, pkgScope, imports, files}, p.errors.Err() } diff --git a/libgo/go/go/build/build.go b/libgo/go/go/build/build.go index 68e8d342005..eece7610562 100644 --- a/libgo/go/go/build/build.go +++ b/libgo/go/go/build/build.go @@ -2,10 +2,948 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package build provides tools for building Go packages. package build -import "errors" +import ( + "bytes" + "errors" + "fmt" + "go/ast" + "go/doc" + "go/parser" + "go/token" + "io" + "io/ioutil" + "log" + "os" + pathpkg "path" + "path/filepath" + "runtime" + "sort" + "strconv" + "strings" + "unicode" +) + +// A Context specifies the supporting context for a build. +type Context struct { + GOARCH string // target architecture + GOOS string // target operating system + GOROOT string // Go root + GOPATH string // Go path + CgoEnabled bool // whether cgo can be used + BuildTags []string // additional tags to recognize in +build lines + UseAllFiles bool // use files regardless of +build lines, file names + Gccgo bool // assume use of gccgo when computing object paths + + // By default, Import uses the operating system's file system calls + // to read directories and files. To read from other sources, + // callers can set the following functions. They all have default + // behaviors that use the local file system, so clients need only set + // the functions whose behaviors they wish to change. + + // JoinPath joins the sequence of path fragments into a single path. + // If JoinPath is nil, Import uses filepath.Join. + JoinPath func(elem ...string) string + + // SplitPathList splits the path list into a slice of individual paths. + // If SplitPathList is nil, Import uses filepath.SplitList. + SplitPathList func(list string) []string + + // IsAbsPath reports whether path is an absolute path. + // If IsAbsPath is nil, Import uses filepath.IsAbs. + IsAbsPath func(path string) bool + + // IsDir reports whether the path names a directory. + // If IsDir is nil, Import calls os.Stat and uses the result's IsDir method. + IsDir func(path string) bool + + // HasSubdir reports whether dir is a subdirectory of + // (perhaps multiple levels below) root. + // If so, HasSubdir sets rel to a slash-separated path that + // can be joined to root to produce a path equivalent to dir. + // If HasSubdir is nil, Import uses an implementation built on + // filepath.EvalSymlinks. + HasSubdir func(root, dir string) (rel string, ok bool) + + // ReadDir returns a slice of os.FileInfo, sorted by Name, + // describing the content of the named directory. + // If ReadDir is nil, Import uses io.ReadDir. + ReadDir func(dir string) (fi []os.FileInfo, err error) + + // OpenFile opens a file (not a directory) for reading. + // If OpenFile is nil, Import uses os.Open. + OpenFile func(path string) (r io.ReadCloser, err error) +} + +// joinPath calls ctxt.JoinPath (if not nil) or else filepath.Join. +func (ctxt *Context) joinPath(elem ...string) string { + if f := ctxt.JoinPath; f != nil { + return f(elem...) + } + return filepath.Join(elem...) +} + +// splitPathList calls ctxt.SplitPathList (if not nil) or else filepath.SplitList. +func (ctxt *Context) splitPathList(s string) []string { + if f := ctxt.SplitPathList; f != nil { + return f(s) + } + return filepath.SplitList(s) +} + +// isAbsPath calls ctxt.IsAbsSPath (if not nil) or else filepath.IsAbs. +func (ctxt *Context) isAbsPath(path string) bool { + if f := ctxt.IsAbsPath; f != nil { + return f(path) + } + return filepath.IsAbs(path) +} + +// isDir calls ctxt.IsDir (if not nil) or else uses os.Stat. +func (ctxt *Context) isDir(path string) bool { + if f := ctxt.IsDir; f != nil { + return f(path) + } + fi, err := os.Stat(path) + return err == nil && fi.IsDir() +} + +// hasSubdir calls ctxt.HasSubdir (if not nil) or else uses +// the local file system to answer the question. +func (ctxt *Context) hasSubdir(root, dir string) (rel string, ok bool) { + if f := ctxt.HasSubdir; f != nil { + return f(root, dir) + } + + if p, err := filepath.EvalSymlinks(root); err == nil { + root = p + } + if p, err := filepath.EvalSymlinks(dir); err == nil { + dir = p + } + const sep = string(filepath.Separator) + root = filepath.Clean(root) + if !strings.HasSuffix(root, sep) { + root += sep + } + dir = filepath.Clean(dir) + if !strings.HasPrefix(dir, root) { + return "", false + } + return filepath.ToSlash(dir[len(root):]), true +} + +// readDir calls ctxt.ReadDir (if not nil) or else ioutil.ReadDir. +func (ctxt *Context) readDir(path string) ([]os.FileInfo, error) { + if f := ctxt.ReadDir; f != nil { + return f(path) + } + return ioutil.ReadDir(path) +} + +// openFile calls ctxt.OpenFile (if not nil) or else os.Open. +func (ctxt *Context) openFile(path string) (io.ReadCloser, error) { + if fn := ctxt.OpenFile; fn != nil { + return fn(path) + } + + f, err := os.Open(path) + if err != nil { + return nil, err // nil interface + } + return f, nil +} + +// isFile determines whether path is a file by trying to open it. +// It reuses openFile instead of adding another function to the +// list in Context. +func (ctxt *Context) isFile(path string) bool { + f, err := ctxt.openFile(path) + if err != nil { + return false + } + f.Close() + return true +} + +// gopath returns the list of Go path directories. +func (ctxt *Context) gopath() []string { + var all []string + for _, p := range ctxt.splitPathList(ctxt.GOPATH) { + if p == "" || p == ctxt.GOROOT { + // Empty paths are uninteresting. + // If the path is the GOROOT, ignore it. + // People sometimes set GOPATH=$GOROOT, which is useless + // but would cause us to find packages with import paths + // like "pkg/math". + // Do not get confused by this common mistake. + continue + } + all = append(all, p) + } + return all +} + +// SrcDirs returns a list of package source root directories. +// It draws from the current Go root and Go path but omits directories +// that do not exist. +func (ctxt *Context) SrcDirs() []string { + var all []string + if ctxt.GOROOT != "" { + dir := ctxt.joinPath(ctxt.GOROOT, "src", "pkg") + if ctxt.isDir(dir) { + all = append(all, dir) + } + } + for _, p := range ctxt.gopath() { + dir := ctxt.joinPath(p, "src") + if ctxt.isDir(dir) { + all = append(all, dir) + } + } + return all +} + +// Default is the default Context for builds. +// It uses the GOARCH, GOOS, GOROOT, and GOPATH environment variables +// if set, or else the compiled code's GOARCH, GOOS, and GOROOT. +var Default Context = defaultContext() + +var cgoEnabled = map[string]bool{ + "darwin/386": true, + "darwin/amd64": true, + "linux/386": true, + "linux/amd64": true, + "freebsd/386": true, + "freebsd/amd64": true, + "windows/386": true, + "windows/amd64": true, +} + +func defaultContext() Context { + var c Context + + c.GOARCH = envOr("GOARCH", runtime.GOARCH) + c.GOOS = envOr("GOOS", runtime.GOOS) + c.GOROOT = runtime.GOROOT() + c.GOPATH = envOr("GOPATH", "") + + switch os.Getenv("CGO_ENABLED") { + case "1": + c.CgoEnabled = true + case "0": + c.CgoEnabled = false + default: + c.CgoEnabled = cgoEnabled[c.GOOS+"/"+c.GOARCH] + } + + return c +} + +func envOr(name, def string) string { + s := os.Getenv(name) + if s == "" { + return def + } + return s +} + +// An ImportMode controls the behavior of the Import method. +type ImportMode uint + +const ( + // If FindOnly is set, Import stops after locating the directory + // that should contain the sources for a package. It does not + // read any files in the directory. + FindOnly ImportMode = 1 << iota + + // If AllowBinary is set, Import can be satisfied by a compiled + // package object without corresponding sources. + AllowBinary +) + +// A Package describes the Go package found in a directory. +type Package struct { + Dir string // directory containing package sources + Name string // package name + Doc string // documentation synopsis + ImportPath string // import path of package ("" if unknown) + Root string // root of Go tree where this package lives + SrcRoot string // package source root directory ("" if unknown) + PkgRoot string // package install root directory ("" if unknown) + BinDir string // command install directory ("" if unknown) + Goroot bool // package found in Go root + PkgObj string // installed .a file + + // Source files + GoFiles []string // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles) + CgoFiles []string // .go source files that import "C" + CFiles []string // .c source files + HFiles []string // .h source files + SFiles []string // .s source files + + // Cgo directives + CgoPkgConfig []string // Cgo pkg-config directives + CgoCFLAGS []string // Cgo CFLAGS directives + CgoLDFLAGS []string // Cgo LDFLAGS directives + + // Dependency information + Imports []string // imports from GoFiles, CgoFiles + ImportPos map[string][]token.Position // line information for Imports + + // Test information + TestGoFiles []string // _test.go files in package + TestImports []string // imports from TestGoFiles + TestImportPos map[string][]token.Position // line information for TestImports + XTestGoFiles []string // _test.go files outside package + XTestImports []string // imports from XTestGoFiles + XTestImportPos map[string][]token.Position // line information for XTestImports +} + +// IsCommand reports whether the package is considered a +// command to be installed (not just a library). +// Packages named "main" are treated as commands. +func (p *Package) IsCommand() bool { + return p.Name == "main" +} + +// ImportDir is like Import but processes the Go package found in +// the named directory. +func (ctxt *Context) ImportDir(dir string, mode ImportMode) (*Package, error) { + return ctxt.Import(".", dir, mode) +} + +// Import returns details about the Go package named by the import path, +// interpreting local import paths relative to the src directory. If the path +// is a local import path naming a package that can be imported using a +// standard import path, the returned package will set p.ImportPath to +// that path. +// +// In the directory containing the package, .go, .c, .h, and .s files are +// considered part of the package except for: +// +// - .go files in package documentation +// - files starting with _ or . +// - files with build constraints not satisfied by the context +// +// If an error occurs, Import returns a non-nil error also returns a non-nil +// *Package containing partial information. +// +func (ctxt *Context) Import(path string, src string, mode ImportMode) (*Package, error) { + p := &Package{ + ImportPath: path, + } + + var pkga string + if ctxt.Gccgo { + dir, elem := pathpkg.Split(p.ImportPath) + pkga = "pkg/gccgo/" + dir + "lib" + elem + ".a" + } else { + pkga = "pkg/" + ctxt.GOOS + "_" + ctxt.GOARCH + "/" + p.ImportPath + ".a" + } + + binaryOnly := false + if IsLocalImport(path) { + if src == "" { + return p, fmt.Errorf("import %q: import relative to unknown directory", path) + } + if !ctxt.isAbsPath(path) { + p.Dir = ctxt.joinPath(src, path) + } + // Determine canonical import path, if any. + if ctxt.GOROOT != "" { + root := ctxt.joinPath(ctxt.GOROOT, "src", "pkg") + if sub, ok := ctxt.hasSubdir(root, p.Dir); ok { + p.Goroot = true + p.ImportPath = sub + p.Root = ctxt.GOROOT + goto Found + } + } + all := ctxt.gopath() + for i, root := range all { + rootsrc := ctxt.joinPath(root, "src") + if sub, ok := ctxt.hasSubdir(rootsrc, p.Dir); ok { + // We found a potential import path for dir, + // but check that using it wouldn't find something + // else first. + if ctxt.GOROOT != "" { + if dir := ctxt.joinPath(ctxt.GOROOT, "src", sub); ctxt.isDir(dir) { + goto Found + } + } + for _, earlyRoot := range all[:i] { + if dir := ctxt.joinPath(earlyRoot, "src", sub); ctxt.isDir(dir) { + goto Found + } + } + + // sub would not name some other directory instead of this one. + // Record it. + p.ImportPath = sub + p.Root = root + goto Found + } + } + // It's okay that we didn't find a root containing dir. + // Keep going with the information we have. + } else { + if strings.HasPrefix(path, "/") { + return p, fmt.Errorf("import %q: cannot import absolute path", path) + } + // Determine directory from import path. + if ctxt.GOROOT != "" { + dir := ctxt.joinPath(ctxt.GOROOT, "src", "pkg", path) + isDir := ctxt.isDir(dir) + binaryOnly = !isDir && mode&AllowBinary != 0 && ctxt.isFile(ctxt.joinPath(ctxt.GOROOT, pkga)) + if isDir || binaryOnly { + p.Dir = dir + p.Goroot = true + p.Root = ctxt.GOROOT + goto Found + } + } + for _, root := range ctxt.gopath() { + dir := ctxt.joinPath(root, "src", path) + isDir := ctxt.isDir(dir) + binaryOnly = !isDir && mode&AllowBinary != 0 && ctxt.isFile(ctxt.joinPath(root, pkga)) + if isDir || binaryOnly { + p.Dir = dir + p.Root = root + goto Found + } + } + return p, fmt.Errorf("import %q: cannot find package", path) + } + +Found: + if p.Root != "" { + if p.Goroot { + p.SrcRoot = ctxt.joinPath(p.Root, "src", "pkg") + } else { + p.SrcRoot = ctxt.joinPath(p.Root, "src") + } + p.PkgRoot = ctxt.joinPath(p.Root, "pkg") + p.BinDir = ctxt.joinPath(p.Root, "bin") + p.PkgObj = ctxt.joinPath(p.Root, pkga) + } + + if mode&FindOnly != 0 { + return p, nil + } + if binaryOnly && (mode&AllowBinary) != 0 { + return p, nil + } + + dirs, err := ctxt.readDir(p.Dir) + if err != nil { + return p, err + } + + var Sfiles []string // files with ".S" (capital S) + var firstFile string + imported := make(map[string][]token.Position) + testImported := make(map[string][]token.Position) + xTestImported := make(map[string][]token.Position) + fset := token.NewFileSet() + for _, d := range dirs { + if d.IsDir() { + continue + } + name := d.Name() + if strings.HasPrefix(name, "_") || + strings.HasPrefix(name, ".") { + continue + } + if !ctxt.UseAllFiles && !ctxt.goodOSArchFile(name) { + continue + } + + i := strings.LastIndex(name, ".") + if i < 0 { + i = len(name) + } + ext := name[i:] + switch ext { + case ".go", ".c", ".s", ".h", ".S": + // tentatively okay + default: + // skip + continue + } + + filename := ctxt.joinPath(p.Dir, name) + f, err := ctxt.openFile(filename) + if err != nil { + return p, err + } + data, err := ioutil.ReadAll(f) + f.Close() + if err != nil { + return p, fmt.Errorf("read %s: %v", filename, err) + } + + // Look for +build comments to accept or reject the file. + if !ctxt.UseAllFiles && !ctxt.shouldBuild(data) { + continue + } + + // Going to save the file. For non-Go files, can stop here. + switch ext { + case ".c": + p.CFiles = append(p.CFiles, name) + continue + case ".h": + p.HFiles = append(p.HFiles, name) + continue + case ".s": + p.SFiles = append(p.SFiles, name) + continue + case ".S": + Sfiles = append(Sfiles, name) + continue + } + + pf, err := parser.ParseFile(fset, filename, data, parser.ImportsOnly|parser.ParseComments) + if err != nil { + return p, err + } + + pkg := string(pf.Name.Name) + if pkg == "documentation" { + continue + } + + isTest := strings.HasSuffix(name, "_test.go") + isXTest := false + if isTest && strings.HasSuffix(pkg, "_test") { + isXTest = true + pkg = pkg[:len(pkg)-len("_test")] + } + + if p.Name == "" { + p.Name = pkg + firstFile = name + } else if pkg != p.Name { + return p, fmt.Errorf("found packages %s (%s) and %s (%s) in %s", p.Name, firstFile, pkg, name, p.Dir) + } + if pf.Doc != nil && p.Doc == "" { + p.Doc = doc.Synopsis(pf.Doc.Text()) + } + + // Record imports and information about cgo. + isCgo := false + for _, decl := range pf.Decls { + d, ok := decl.(*ast.GenDecl) + if !ok { + continue + } + for _, dspec := range d.Specs { + spec, ok := dspec.(*ast.ImportSpec) + if !ok { + continue + } + quoted := string(spec.Path.Value) + path, err := strconv.Unquote(quoted) + if err != nil { + log.Panicf("%s: parser returned invalid quoted string: <%s>", filename, quoted) + } + if isXTest { + xTestImported[path] = append(xTestImported[path], fset.Position(spec.Pos())) + } else if isTest { + testImported[path] = append(testImported[path], fset.Position(spec.Pos())) + } else { + imported[path] = append(imported[path], fset.Position(spec.Pos())) + } + if path == "C" { + if isTest { + return p, fmt.Errorf("use of cgo in test %s not supported", filename) + } + cg := spec.Doc + if cg == nil && len(d.Specs) == 1 { + cg = d.Doc + } + if cg != nil { + if err := ctxt.saveCgo(filename, p, cg); err != nil { + return p, err + } + } + isCgo = true + } + } + } + if isCgo { + if ctxt.CgoEnabled { + p.CgoFiles = append(p.CgoFiles, name) + } + } else if isXTest { + p.XTestGoFiles = append(p.XTestGoFiles, name) + } else if isTest { + p.TestGoFiles = append(p.TestGoFiles, name) + } else { + p.GoFiles = append(p.GoFiles, name) + } + } + if p.Name == "" { + return p, fmt.Errorf("no Go source files in %s", p.Dir) + } + + p.Imports, p.ImportPos = cleanImports(imported) + p.TestImports, p.TestImportPos = cleanImports(testImported) + p.XTestImports, p.XTestImportPos = cleanImports(xTestImported) + + // add the .S files only if we are using cgo + // (which means gcc will compile them). + // The standard assemblers expect .s files. + if len(p.CgoFiles) > 0 { + p.SFiles = append(p.SFiles, Sfiles...) + sort.Strings(p.SFiles) + } + + return p, nil +} + +func cleanImports(m map[string][]token.Position) ([]string, map[string][]token.Position) { + all := make([]string, 0, len(m)) + for path := range m { + all = append(all, path) + } + sort.Strings(all) + return all, m +} + +// Import is shorthand for Default.Import. +func Import(path, src string, mode ImportMode) (*Package, error) { + return Default.Import(path, src, mode) +} + +// ImportDir is shorthand for Default.ImportDir. +func ImportDir(dir string, mode ImportMode) (*Package, error) { + return Default.ImportDir(dir, mode) +} + +var slashslash = []byte("//") + +// shouldBuild reports whether it is okay to use this file, +// The rule is that in the file's leading run of // comments +// and blank lines, which must be followed by a blank line +// (to avoid including a Go package clause doc comment), +// lines beginning with '// +build' are taken as build directives. +// +// The file is accepted only if each such line lists something +// matching the file. For example: +// +// // +build windows linux +// +// marks the file as applicable only on Windows and Linux. +// +func (ctxt *Context) shouldBuild(content []byte) bool { + // Pass 1. Identify leading run of // comments and blank lines, + // which must be followed by a blank line. + end := 0 + p := content + for len(p) > 0 { + line := p + if i := bytes.IndexByte(line, '\n'); i >= 0 { + line, p = line[:i], p[i+1:] + } else { + p = p[len(p):] + } + line = bytes.TrimSpace(line) + if len(line) == 0 { // Blank line + end = cap(content) - cap(line) // &line[0] - &content[0] + continue + } + if !bytes.HasPrefix(line, slashslash) { // Not comment line + break + } + } + content = content[:end] + + // Pass 2. Process each line in the run. + p = content + for len(p) > 0 { + line := p + if i := bytes.IndexByte(line, '\n'); i >= 0 { + line, p = line[:i], p[i+1:] + } else { + p = p[len(p):] + } + line = bytes.TrimSpace(line) + if bytes.HasPrefix(line, slashslash) { + line = bytes.TrimSpace(line[len(slashslash):]) + if len(line) > 0 && line[0] == '+' { + // Looks like a comment +line. + f := strings.Fields(string(line)) + if f[0] == "+build" { + ok := false + for _, tok := range f[1:] { + if ctxt.match(tok) { + ok = true + break + } + } + if !ok { + return false // this one doesn't match + } + } + } + } + } + return true // everything matches +} + +// saveCgo saves the information from the #cgo lines in the import "C" comment. +// These lines set CFLAGS and LDFLAGS and pkg-config directives that affect +// the way cgo's C code is built. +// +// TODO(rsc): This duplicates code in cgo. +// Once the dust settles, remove this code from cgo. +func (ctxt *Context) saveCgo(filename string, di *Package, cg *ast.CommentGroup) error { + text := cg.Text() + for _, line := range strings.Split(text, "\n") { + orig := line + + // Line is + // #cgo [GOOS/GOARCH...] LDFLAGS: stuff + // + line = strings.TrimSpace(line) + if len(line) < 5 || line[:4] != "#cgo" || (line[4] != ' ' && line[4] != '\t') { + continue + } + + // Split at colon. + line = strings.TrimSpace(line[4:]) + i := strings.Index(line, ":") + if i < 0 { + return fmt.Errorf("%s: invalid #cgo line: %s", filename, orig) + } + line, argstr := line[:i], line[i+1:] + + // Parse GOOS/GOARCH stuff. + f := strings.Fields(line) + if len(f) < 1 { + return fmt.Errorf("%s: invalid #cgo line: %s", filename, orig) + } + + cond, verb := f[:len(f)-1], f[len(f)-1] + if len(cond) > 0 { + ok := false + for _, c := range cond { + if ctxt.match(c) { + ok = true + break + } + } + if !ok { + continue + } + } + + args, err := splitQuoted(argstr) + if err != nil { + return fmt.Errorf("%s: invalid #cgo line: %s", filename, orig) + } + for _, arg := range args { + if !safeName(arg) { + return fmt.Errorf("%s: malformed #cgo argument: %s", filename, arg) + } + } + + switch verb { + case "CFLAGS": + di.CgoCFLAGS = append(di.CgoCFLAGS, args...) + case "LDFLAGS": + di.CgoLDFLAGS = append(di.CgoLDFLAGS, args...) + case "pkg-config": + di.CgoPkgConfig = append(di.CgoPkgConfig, args...) + default: + return fmt.Errorf("%s: invalid #cgo verb: %s", filename, orig) + } + } + return nil +} + +var safeBytes = []byte("+-.,/0123456789=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz:") + +func safeName(s string) bool { + if s == "" { + return false + } + for i := 0; i < len(s); i++ { + if c := s[i]; c < 0x80 && bytes.IndexByte(safeBytes, c) < 0 { + return false + } + } + return true +} + +// splitQuoted splits the string s around each instance of one or more consecutive +// white space characters while taking into account quotes and escaping, and +// returns an array of substrings of s or an empty list if s contains only white space. +// Single quotes and double quotes are recognized to prevent splitting within the +// quoted region, and are removed from the resulting substrings. If a quote in s +// isn't closed err will be set and r will have the unclosed argument as the +// last element. The backslash is used for escaping. +// +// For example, the following string: +// +// a b:"c d" 'e''f' "g\"" +// +// Would be parsed as: +// +// []string{"a", "b:c d", "ef", `g"`} +// +func splitQuoted(s string) (r []string, err error) { + var args []string + arg := make([]rune, len(s)) + escaped := false + quoted := false + quote := '\x00' + i := 0 + for _, rune := range s { + switch { + case escaped: + escaped = false + case rune == '\\': + escaped = true + continue + case quote != '\x00': + if rune == quote { + quote = '\x00' + continue + } + case rune == '"' || rune == '\'': + quoted = true + quote = rune + continue + case unicode.IsSpace(rune): + if quoted || i > 0 { + quoted = false + args = append(args, string(arg[:i])) + i = 0 + } + continue + } + arg[i] = rune + i++ + } + if quoted || i > 0 { + args = append(args, string(arg[:i])) + } + if quote != 0 { + err = errors.New("unclosed quote") + } else if escaped { + err = errors.New("unfinished escaping") + } + return args, err +} + +// match returns true if the name is one of: +// +// $GOOS +// $GOARCH +// cgo (if cgo is enabled) +// !cgo (if cgo is disabled) +// tag (if tag is listed in ctxt.BuildTags) +// !tag (if tag is not listed in ctxt.BuildTags) +// a slash-separated list of any of these +// +func (ctxt *Context) match(name string) bool { + if name == "" { + return false + } + if i := strings.Index(name, ","); i >= 0 { + // comma-separated list + return ctxt.match(name[:i]) && ctxt.match(name[i+1:]) + } + if strings.HasPrefix(name, "!!") { // bad syntax, reject always + return false + } + if strings.HasPrefix(name, "!") { // negation + return !ctxt.match(name[1:]) + } + + // Tags must be letters, digits, underscores. + // Unlike in Go identifiers, all digits is fine (e.g., "386"). + for _, c := range name { + if !unicode.IsLetter(c) && !unicode.IsDigit(c) && c != '_' { + return false + } + } + + // special tags + if ctxt.CgoEnabled && name == "cgo" { + return true + } + if name == ctxt.GOOS || name == ctxt.GOARCH { + return true + } + + // other tags + for _, tag := range ctxt.BuildTags { + if tag == name { + return true + } + } + + return false +} + +// goodOSArchFile returns false if the name contains a $GOOS or $GOARCH +// suffix which does not match the current system. +// The recognized name formats are: +// +// name_$(GOOS).* +// name_$(GOARCH).* +// name_$(GOOS)_$(GOARCH).* +// name_$(GOOS)_test.* +// name_$(GOARCH)_test.* +// name_$(GOOS)_$(GOARCH)_test.* +// +func (ctxt *Context) goodOSArchFile(name string) bool { + if dot := strings.Index(name, "."); dot != -1 { + name = name[:dot] + } + l := strings.Split(name, "_") + if n := len(l); n > 0 && l[n-1] == "test" { + l = l[:n-1] + } + n := len(l) + if n >= 2 && knownOS[l[n-2]] && knownArch[l[n-1]] { + return l[n-2] == ctxt.GOOS && l[n-1] == ctxt.GOARCH + } + if n >= 1 && knownOS[l[n-1]] { + return l[n-1] == ctxt.GOOS + } + if n >= 1 && knownArch[l[n-1]] { + return l[n-1] == ctxt.GOARCH + } + return true +} + +var knownOS = make(map[string]bool) +var knownArch = make(map[string]bool) + +func init() { + for _, v := range strings.Fields(goosList) { + knownOS[v] = true + } + for _, v := range strings.Fields(goarchList) { + knownArch[v] = true + } +} + +// ToolDir is the directory containing build tools. +var ToolDir = filepath.Join(runtime.GOROOT(), "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH) + +// IsLocalImport reports whether the import path is +// a local import path, like ".", "..", "./foo", or "../foo". +func IsLocalImport(path string) bool { + return path == "." || path == ".." || + strings.HasPrefix(path, "./") || strings.HasPrefix(path, "../") +} // ArchChar returns the architecture character for the given goarch. // For example, ArchChar("amd64") returns "6". diff --git a/libgo/go/go/build/build_test.go b/libgo/go/go/build/build_test.go index 3c706a46edd..06b8b0e94f8 100644 --- a/libgo/go/go/build/build_test.go +++ b/libgo/go/go/build/build_test.go @@ -5,83 +5,14 @@ package build import ( + "os" "path/filepath" - "reflect" "runtime" - "sort" "testing" ) -func sortstr(x []string) []string { - sort.Strings(x) - return x -} - -var buildPkgs = []struct { - dir string - info *DirInfo -}{ - { - "go/build/pkgtest", - &DirInfo{ - GoFiles: []string{"pkgtest.go"}, - SFiles: []string{"sqrt_" + runtime.GOARCH + ".s"}, - Package: "pkgtest", - Imports: []string{"bytes"}, - TestImports: []string{"fmt", "pkgtest"}, - TestGoFiles: sortstr([]string{"sqrt_test.go", "sqrt_" + runtime.GOARCH + "_test.go"}), - XTestGoFiles: []string{"xsqrt_test.go"}, - }, - }, - { - "go/build/cmdtest", - &DirInfo{ - GoFiles: []string{"main.go"}, - Package: "main", - Imports: []string{"go/build/pkgtest"}, - TestImports: []string{}, - }, - }, - { - "go/build/cgotest", - &DirInfo{ - CgoFiles: ifCgo([]string{"cgotest.go"}), - CFiles: []string{"cgotest.c"}, - HFiles: []string{"cgotest.h"}, - Imports: []string{"C", "unsafe"}, - TestImports: []string{}, - Package: "cgotest", - }, - }, -} - -func ifCgo(x []string) []string { - if DefaultContext.CgoEnabled { - return x - } - return nil -} - -func TestBuild(t *testing.T) { - for _, tt := range buildPkgs { - tree := Path[0] // Goroot - dir := filepath.Join(tree.SrcDir(), tt.dir) - info, err := ScanDir(dir) - if err != nil { - t.Errorf("ScanDir(%#q): %v", tt.dir, err) - continue - } - // Don't bother testing import positions. - tt.info.ImportPos, tt.info.TestImportPos = info.ImportPos, info.TestImportPos - if !reflect.DeepEqual(info, tt.info) { - t.Errorf("ScanDir(%#q) = %#v, want %#v\n", tt.dir, info, tt.info) - continue - } - } -} - func TestMatch(t *testing.T) { - ctxt := DefaultContext + ctxt := Default what := "default" match := func(tag string) { if !ctxt.match(tag) { @@ -106,3 +37,40 @@ func TestMatch(t *testing.T) { match(runtime.GOOS + "," + runtime.GOARCH + ",!bar") nomatch(runtime.GOOS + "," + runtime.GOARCH + ",bar") } + +func TestDotSlashImport(t *testing.T) { + p, err := ImportDir("testdata/other", 0) + if err != nil { + t.Fatal(err) + } + if len(p.Imports) != 1 || p.Imports[0] != "./file" { + t.Fatalf("testdata/other: Imports=%v, want [./file]", p.Imports) + } + + p1, err := Import("./file", "testdata/other", 0) + if err != nil { + t.Fatal(err) + } + if p1.Name != "file" { + t.Fatalf("./file: Name=%q, want %q", p1.Name, "file") + } + dir := filepath.Clean("testdata/other/file") // Clean to use \ on Windows + if p1.Dir != dir { + t.Fatalf("./file: Dir=%q, want %q", p1.Name, dir) + } +} + +func TestLocalDirectory(t *testing.T) { + cwd, err := os.Getwd() + if err != nil { + t.Fatal(err) + } + + p, err := ImportDir(cwd, 0) + if err != nil { + t.Fatal(err) + } + if p.ImportPath != "go/build" { + t.Fatalf("ImportPath=%q, want %q", p.ImportPath, "go/build") + } +} diff --git a/libgo/go/go/build/cgotest/cgotest.go b/libgo/go/go/build/cgotest/cgotest.go deleted file mode 100644 index 93bbf06883f..00000000000 --- a/libgo/go/go/build/cgotest/cgotest.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cgotest - -/* -char* greeting = "hello, world"; -*/ -// #include "cgotest.h" -import "C" -import "unsafe" - -var Greeting = C.GoString(C.greeting) - -func DoAdd(x, y int) (sum int) { - C.Add(C.int(x), C.int(y), (*C.int)(unsafe.Pointer(&sum))) - return -} diff --git a/libgo/go/go/build/cmdtest/main.go b/libgo/go/go/build/cmdtest/main.go deleted file mode 100644 index bed4f485a0a..00000000000 --- a/libgo/go/go/build/cmdtest/main.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package main - -import "go/build/pkgtest" - -func main() { - pkgtest.Foo() - print(int(pkgtest.Sqrt(9))) -} diff --git a/libgo/go/go/build/dir.go b/libgo/go/go/build/dir.go deleted file mode 100644 index 0917e736aa4..00000000000 --- a/libgo/go/go/build/dir.go +++ /dev/null @@ -1,709 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package build - -import ( - "bytes" - "errors" - "fmt" - "go/ast" - "go/parser" - "go/token" - "io/ioutil" - "log" - "os" - "path" - "path/filepath" - "runtime" - "sort" - "strconv" - "strings" - "unicode" -) - -// A Context specifies the supporting context for a build. -type Context struct { - GOARCH string // target architecture - GOOS string // target operating system - CgoEnabled bool // whether cgo can be used - BuildTags []string // additional tags to recognize in +build lines - - // By default, ScanDir uses the operating system's - // file system calls to read directories and files. - // Callers can override those calls to provide other - // ways to read data by setting ReadDir and ReadFile. - // ScanDir does not make any assumptions about the - // format of the strings dir and file: they can be - // slash-separated, backslash-separated, even URLs. - - // ReadDir returns a slice of os.FileInfo, sorted by Name, - // describing the content of the named directory. - // The dir argument is the argument to ScanDir. - // If ReadDir is nil, ScanDir uses io.ReadDir. - ReadDir func(dir string) (fi []os.FileInfo, err error) - - // ReadFile returns the content of the file named file - // in the directory named dir. The dir argument is the - // argument to ScanDir, and the file argument is the - // Name field from an os.FileInfo returned by ReadDir. - // The returned path is the full name of the file, to be - // used in error messages. - // - // If ReadFile is nil, ScanDir uses filepath.Join(dir, file) - // as the path and ioutil.ReadFile to read the data. - ReadFile func(dir, file string) (path string, content []byte, err error) -} - -func (ctxt *Context) readDir(dir string) ([]os.FileInfo, error) { - if f := ctxt.ReadDir; f != nil { - return f(dir) - } - return ioutil.ReadDir(dir) -} - -func (ctxt *Context) readFile(dir, file string) (string, []byte, error) { - if f := ctxt.ReadFile; f != nil { - return f(dir, file) - } - p := filepath.Join(dir, file) - content, err := ioutil.ReadFile(p) - return p, content, err -} - -// The DefaultContext is the default Context for builds. -// It uses the GOARCH and GOOS environment variables -// if set, or else the compiled code's GOARCH and GOOS. -var DefaultContext Context = defaultContext() - -var cgoEnabled = map[string]bool{ - "darwin/386": true, - "darwin/amd64": true, - "linux/386": true, - "linux/amd64": true, - "freebsd/386": true, - "freebsd/amd64": true, - "windows/386": true, - "windows/amd64": true, -} - -func defaultContext() Context { - var c Context - - c.GOARCH = envOr("GOARCH", runtime.GOARCH) - c.GOOS = envOr("GOOS", runtime.GOOS) - - s := os.Getenv("CGO_ENABLED") - switch s { - case "1": - c.CgoEnabled = true - case "0": - c.CgoEnabled = false - default: - c.CgoEnabled = cgoEnabled[c.GOOS+"/"+c.GOARCH] - } - - return c -} - -func envOr(name, def string) string { - s := os.Getenv(name) - if s == "" { - return def - } - return s -} - -type DirInfo struct { - Package string // Name of package in dir - PackageComment *ast.CommentGroup // Package comments from GoFiles - ImportPath string // Import path of package in dir - Imports []string // All packages imported by GoFiles - ImportPos map[string][]token.Position // Source code location of imports - - // Source files - GoFiles []string // .go files in dir (excluding CgoFiles, TestGoFiles, XTestGoFiles) - HFiles []string // .h files in dir - CFiles []string // .c files in dir - SFiles []string // .s (and, when using cgo, .S files in dir) - CgoFiles []string // .go files that import "C" - - // Cgo directives - CgoPkgConfig []string // Cgo pkg-config directives - CgoCFLAGS []string // Cgo CFLAGS directives - CgoLDFLAGS []string // Cgo LDFLAGS directives - - // Test information - TestGoFiles []string // _test.go files in package - XTestGoFiles []string // _test.go files outside package - TestImports []string // All packages imported by (X)TestGoFiles - TestImportPos map[string][]token.Position -} - -func (d *DirInfo) IsCommand() bool { - // TODO(rsc): This is at least a little bogus. - return d.Package == "main" -} - -// ScanDir calls DefaultContext.ScanDir. -func ScanDir(dir string) (info *DirInfo, err error) { - return DefaultContext.ScanDir(dir) -} - -// TODO(rsc): Move this comment to a more appropriate place. - -// ScanDir returns a structure with details about the Go package -// found in the given directory. -// -// Most .go, .c, .h, and .s files in the directory are considered part -// of the package. The exceptions are: -// -// - .go files in package main (unless no other package is found) -// - .go files in package documentation -// - files starting with _ or . -// - files with build constraints not satisfied by the context -// -// Build Constraints -// -// A build constraint is a line comment beginning with the directive +build -// that lists the conditions under which a file should be included in the package. -// Constraints may appear in any kind of source file (not just Go), but -// they must be appear near the top of the file, preceded -// only by blank lines and other line comments. -// -// A build constraint is evaluated as the OR of space-separated options; -// each option evaluates as the AND of its comma-separated terms; -// and each term is an alphanumeric word or, preceded by !, its negation. -// That is, the build constraint: -// -// // +build linux,386 darwin,!cgo -// -// corresponds to the boolean formula: -// -// (linux AND 386) OR (darwin AND (NOT cgo)) -// -// During a particular build, the following words are satisfied: -// -// - the target operating system, as spelled by runtime.GOOS -// - the target architecture, as spelled by runtime.GOARCH -// - "cgo", if ctxt.CgoEnabled is true -// - any additional words listed in ctxt.BuildTags -// -// If a file's name, after stripping the extension and a possible _test suffix, -// matches *_GOOS, *_GOARCH, or *_GOOS_GOARCH for any known operating -// system and architecture values, then the file is considered to have an implicit -// build constraint requiring those terms. -// -// Examples -// -// To keep a file from being considered for the build: -// -// // +build ignore -// -// (any other unsatisfied word will work as well, but ``ignore'' is conventional.) -// -// To build a file only when using cgo, and only on Linux and OS X: -// -// // +build linux,cgo darwin,cgo -// -// Such a file is usually paired with another file implementing the -// default functionality for other systems, which in this case would -// carry the constraint: -// -// // +build !linux !darwin !cgo -// -// Naming a file dns_windows.go will cause it to be included only when -// building the package for Windows; similarly, math_386.s will be included -// only when building the package for 32-bit x86. -// -func (ctxt *Context) ScanDir(dir string) (info *DirInfo, err error) { - dirs, err := ctxt.readDir(dir) - if err != nil { - return nil, err - } - - var Sfiles []string // files with ".S" (capital S) - var di DirInfo - imported := make(map[string][]token.Position) - testImported := make(map[string][]token.Position) - fset := token.NewFileSet() - for _, d := range dirs { - if d.IsDir() { - continue - } - name := d.Name() - if strings.HasPrefix(name, "_") || - strings.HasPrefix(name, ".") { - continue - } - if !ctxt.goodOSArchFile(name) { - continue - } - - ext := path.Ext(name) - switch ext { - case ".go", ".c", ".s", ".h", ".S": - // tentatively okay - default: - // skip - continue - } - - // Look for +build comments to accept or reject the file. - filename, data, err := ctxt.readFile(dir, name) - if err != nil { - return nil, err - } - if !ctxt.shouldBuild(data) { - continue - } - - // Going to save the file. For non-Go files, can stop here. - switch ext { - case ".c": - di.CFiles = append(di.CFiles, name) - continue - case ".h": - di.HFiles = append(di.HFiles, name) - continue - case ".s": - di.SFiles = append(di.SFiles, name) - continue - case ".S": - Sfiles = append(Sfiles, name) - continue - } - - pf, err := parser.ParseFile(fset, filename, data, parser.ImportsOnly|parser.ParseComments) - if err != nil { - return nil, err - } - - pkg := string(pf.Name.Name) - if pkg == "main" && di.Package != "" && di.Package != "main" { - continue - } - if pkg == "documentation" { - continue - } - - isTest := strings.HasSuffix(name, "_test.go") - if isTest && strings.HasSuffix(pkg, "_test") { - pkg = pkg[:len(pkg)-len("_test")] - } - - if pkg != di.Package && di.Package == "main" { - // Found non-main package but was recording - // information about package main. Reset. - di = DirInfo{} - } - if di.Package == "" { - di.Package = pkg - } else if pkg != di.Package { - return nil, fmt.Errorf("%s: found packages %s and %s", dir, pkg, di.Package) - } - if pf.Doc != nil { - if di.PackageComment != nil { - di.PackageComment.List = append(di.PackageComment.List, pf.Doc.List...) - } else { - di.PackageComment = pf.Doc - } - } - - // Record imports and information about cgo. - isCgo := false - for _, decl := range pf.Decls { - d, ok := decl.(*ast.GenDecl) - if !ok { - continue - } - for _, dspec := range d.Specs { - spec, ok := dspec.(*ast.ImportSpec) - if !ok { - continue - } - quoted := string(spec.Path.Value) - path, err := strconv.Unquote(quoted) - if err != nil { - log.Panicf("%s: parser returned invalid quoted string: <%s>", filename, quoted) - } - if isTest { - testImported[path] = append(testImported[path], fset.Position(spec.Pos())) - } else { - imported[path] = append(imported[path], fset.Position(spec.Pos())) - } - if path == "C" { - if isTest { - return nil, fmt.Errorf("%s: use of cgo in test not supported", filename) - } - cg := spec.Doc - if cg == nil && len(d.Specs) == 1 { - cg = d.Doc - } - if cg != nil { - if err := ctxt.saveCgo(filename, &di, cg); err != nil { - return nil, err - } - } - isCgo = true - } - } - } - if isCgo { - if ctxt.CgoEnabled { - di.CgoFiles = append(di.CgoFiles, name) - } - } else if isTest { - if pkg == string(pf.Name.Name) { - di.TestGoFiles = append(di.TestGoFiles, name) - } else { - di.XTestGoFiles = append(di.XTestGoFiles, name) - } - } else { - di.GoFiles = append(di.GoFiles, name) - } - } - if di.Package == "" { - return nil, fmt.Errorf("%s: no Go source files", dir) - } - di.Imports = make([]string, len(imported)) - di.ImportPos = imported - i := 0 - for p := range imported { - di.Imports[i] = p - i++ - } - di.TestImports = make([]string, len(testImported)) - di.TestImportPos = testImported - i = 0 - for p := range testImported { - di.TestImports[i] = p - i++ - } - - // add the .S files only if we are using cgo - // (which means gcc will compile them). - // The standard assemblers expect .s files. - if len(di.CgoFiles) > 0 { - di.SFiles = append(di.SFiles, Sfiles...) - sort.Strings(di.SFiles) - } - - // File name lists are sorted because ReadDir sorts. - sort.Strings(di.Imports) - sort.Strings(di.TestImports) - return &di, nil -} - -var slashslash = []byte("//") - -// shouldBuild reports whether it is okay to use this file, -// The rule is that in the file's leading run of // comments -// and blank lines, which must be followed by a blank line -// (to avoid including a Go package clause doc comment), -// lines beginning with '// +build' are taken as build directives. -// -// The file is accepted only if each such line lists something -// matching the file. For example: -// -// // +build windows linux -// -// marks the file as applicable only on Windows and Linux. -// -func (ctxt *Context) shouldBuild(content []byte) bool { - // Pass 1. Identify leading run of // comments and blank lines, - // which must be followed by a blank line. - end := 0 - p := content - for len(p) > 0 { - line := p - if i := bytes.IndexByte(line, '\n'); i >= 0 { - line, p = line[:i], p[i+1:] - } else { - p = p[len(p):] - } - line = bytes.TrimSpace(line) - if len(line) == 0 { // Blank line - end = cap(content) - cap(line) // &line[0] - &content[0] - continue - } - if !bytes.HasPrefix(line, slashslash) { // Not comment line - break - } - } - content = content[:end] - - // Pass 2. Process each line in the run. - p = content - for len(p) > 0 { - line := p - if i := bytes.IndexByte(line, '\n'); i >= 0 { - line, p = line[:i], p[i+1:] - } else { - p = p[len(p):] - } - line = bytes.TrimSpace(line) - if bytes.HasPrefix(line, slashslash) { - line = bytes.TrimSpace(line[len(slashslash):]) - if len(line) > 0 && line[0] == '+' { - // Looks like a comment +line. - f := strings.Fields(string(line)) - if f[0] == "+build" { - ok := false - for _, tok := range f[1:] { - if ctxt.match(tok) { - ok = true - break - } - } - if !ok { - return false // this one doesn't match - } - } - } - } - } - return true // everything matches -} - -// saveCgo saves the information from the #cgo lines in the import "C" comment. -// These lines set CFLAGS and LDFLAGS and pkg-config directives that affect -// the way cgo's C code is built. -// -// TODO(rsc): This duplicates code in cgo. -// Once the dust settles, remove this code from cgo. -func (ctxt *Context) saveCgo(filename string, di *DirInfo, cg *ast.CommentGroup) error { - text := cg.Text() - for _, line := range strings.Split(text, "\n") { - orig := line - - // Line is - // #cgo [GOOS/GOARCH...] LDFLAGS: stuff - // - line = strings.TrimSpace(line) - if len(line) < 5 || line[:4] != "#cgo" || (line[4] != ' ' && line[4] != '\t') { - continue - } - - // Split at colon. - line = strings.TrimSpace(line[4:]) - i := strings.Index(line, ":") - if i < 0 { - return fmt.Errorf("%s: invalid #cgo line: %s", filename, orig) - } - line, argstr := line[:i], line[i+1:] - - // Parse GOOS/GOARCH stuff. - f := strings.Fields(line) - if len(f) < 1 { - return fmt.Errorf("%s: invalid #cgo line: %s", filename, orig) - } - - cond, verb := f[:len(f)-1], f[len(f)-1] - if len(cond) > 0 { - ok := false - for _, c := range cond { - if ctxt.match(c) { - ok = true - break - } - } - if !ok { - continue - } - } - - args, err := splitQuoted(argstr) - if err != nil { - return fmt.Errorf("%s: invalid #cgo line: %s", filename, orig) - } - for _, arg := range args { - if !safeName(arg) { - return fmt.Errorf("%s: malformed #cgo argument: %s", filename, arg) - } - } - - switch verb { - case "CFLAGS": - di.CgoCFLAGS = append(di.CgoCFLAGS, args...) - case "LDFLAGS": - di.CgoLDFLAGS = append(di.CgoLDFLAGS, args...) - case "pkg-config": - di.CgoPkgConfig = append(di.CgoPkgConfig, args...) - default: - return fmt.Errorf("%s: invalid #cgo verb: %s", filename, orig) - } - } - return nil -} - -var safeBytes = []byte("+-.,/0123456789=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz:") - -func safeName(s string) bool { - if s == "" { - return false - } - for i := 0; i < len(s); i++ { - if c := s[i]; c < 0x80 && bytes.IndexByte(safeBytes, c) < 0 { - return false - } - } - return true -} - -// splitQuoted splits the string s around each instance of one or more consecutive -// white space characters while taking into account quotes and escaping, and -// returns an array of substrings of s or an empty list if s contains only white space. -// Single quotes and double quotes are recognized to prevent splitting within the -// quoted region, and are removed from the resulting substrings. If a quote in s -// isn't closed err will be set and r will have the unclosed argument as the -// last element. The backslash is used for escaping. -// -// For example, the following string: -// -// a b:"c d" 'e''f' "g\"" -// -// Would be parsed as: -// -// []string{"a", "b:c d", "ef", `g"`} -// -func splitQuoted(s string) (r []string, err error) { - var args []string - arg := make([]rune, len(s)) - escaped := false - quoted := false - quote := '\x00' - i := 0 - for _, rune := range s { - switch { - case escaped: - escaped = false - case rune == '\\': - escaped = true - continue - case quote != '\x00': - if rune == quote { - quote = '\x00' - continue - } - case rune == '"' || rune == '\'': - quoted = true - quote = rune - continue - case unicode.IsSpace(rune): - if quoted || i > 0 { - quoted = false - args = append(args, string(arg[:i])) - i = 0 - } - continue - } - arg[i] = rune - i++ - } - if quoted || i > 0 { - args = append(args, string(arg[:i])) - } - if quote != 0 { - err = errors.New("unclosed quote") - } else if escaped { - err = errors.New("unfinished escaping") - } - return args, err -} - -// match returns true if the name is one of: -// -// $GOOS -// $GOARCH -// cgo (if cgo is enabled) -// !cgo (if cgo is disabled) -// tag (if tag is listed in ctxt.BuildTags) -// !tag (if tag is not listed in ctxt.BuildTags) -// a slash-separated list of any of these -// -func (ctxt *Context) match(name string) bool { - if name == "" { - return false - } - if i := strings.Index(name, ","); i >= 0 { - // comma-separated list - return ctxt.match(name[:i]) && ctxt.match(name[i+1:]) - } - if strings.HasPrefix(name, "!!") { // bad syntax, reject always - return false - } - if strings.HasPrefix(name, "!") { // negation - return !ctxt.match(name[1:]) - } - - // Tags must be letters, digits, underscores. - // Unlike in Go identifiers, all digits is fine (e.g., "386"). - for _, c := range name { - if !unicode.IsLetter(c) && !unicode.IsDigit(c) && c != '_' { - return false - } - } - - // special tags - if ctxt.CgoEnabled && name == "cgo" { - return true - } - if name == ctxt.GOOS || name == ctxt.GOARCH { - return true - } - - // other tags - for _, tag := range ctxt.BuildTags { - if tag == name { - return true - } - } - - return false -} - -// goodOSArchFile returns false if the name contains a $GOOS or $GOARCH -// suffix which does not match the current system. -// The recognized name formats are: -// -// name_$(GOOS).* -// name_$(GOARCH).* -// name_$(GOOS)_$(GOARCH).* -// name_$(GOOS)_test.* -// name_$(GOARCH)_test.* -// name_$(GOOS)_$(GOARCH)_test.* -// -func (ctxt *Context) goodOSArchFile(name string) bool { - if dot := strings.Index(name, "."); dot != -1 { - name = name[:dot] - } - l := strings.Split(name, "_") - if n := len(l); n > 0 && l[n-1] == "test" { - l = l[:n-1] - } - n := len(l) - if n >= 2 && knownOS[l[n-2]] && knownArch[l[n-1]] { - return l[n-2] == ctxt.GOOS && l[n-1] == ctxt.GOARCH - } - if n >= 1 && knownOS[l[n-1]] { - return l[n-1] == ctxt.GOOS - } - if n >= 1 && knownArch[l[n-1]] { - return l[n-1] == ctxt.GOARCH - } - return true -} - -var knownOS = make(map[string]bool) -var knownArch = make(map[string]bool) - -func init() { - for _, v := range strings.Fields(goosList) { - knownOS[v] = true - } - for _, v := range strings.Fields(goarchList) { - knownArch[v] = true - } -} diff --git a/libgo/go/go/build/doc.go b/libgo/go/go/build/doc.go new file mode 100644 index 00000000000..67c26ac7f4f --- /dev/null +++ b/libgo/go/go/build/doc.go @@ -0,0 +1,109 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package build gathers information about Go packages. +// +// Go Path +// +// The Go path is a list of directory trees containing Go source code. +// It is consulted to resolve imports that cannot be found in the standard +// Go tree. The default path is the value of the GOPATH environment +// variable, interpreted as a path list appropriate to the operating system +// (on Unix, the variable is a colon-separated string; +// on Windows, a semicolon-separated string; +// on Plan 9, a list). +// +// Each directory listed in the Go path must have a prescribed structure: +// +// The src/ directory holds source code. The path below 'src' determines +// the import path or executable name. +// +// The pkg/ directory holds installed package objects. +// As in the Go tree, each target operating system and +// architecture pair has its own subdirectory of pkg +// (pkg/GOOS_GOARCH). +// +// If DIR is a directory listed in the Go path, a package with +// source in DIR/src/foo/bar can be imported as "foo/bar" and +// has its compiled form installed to "DIR/pkg/GOOS_GOARCH/foo/bar.a" +// (or, for gccgo, "DIR/pkg/gccgo/foo/libbar.a"). +// +// The bin/ directory holds compiled commands. +// Each command is named for its source directory, but only +// using the final element, not the entire path. That is, the +// command with source in DIR/src/foo/quux is installed into +// DIR/bin/quux, not DIR/bin/foo/quux. The foo/ is stripped +// so that you can add DIR/bin to your PATH to get at the +// installed commands. +// +// Here's an example directory layout: +// +// GOPATH=/home/user/gocode +// +// /home/user/gocode/ +// src/ +// foo/ +// bar/ (go code in package bar) +// x.go +// quux/ (go code in package main) +// y.go +// bin/ +// quux (installed command) +// pkg/ +// linux_amd64/ +// foo/ +// bar.a (installed package object) +// +// Build Constraints +// +// A build constraint is a line comment beginning with the directive +build +// that lists the conditions under which a file should be included in the package. +// Constraints may appear in any kind of source file (not just Go), but +// they must be appear near the top of the file, preceded +// only by blank lines and other line comments. +// +// A build constraint is evaluated as the OR of space-separated options; +// each option evaluates as the AND of its comma-separated terms; +// and each term is an alphanumeric word or, preceded by !, its negation. +// That is, the build constraint: +// +// // +build linux,386 darwin,!cgo +// +// corresponds to the boolean formula: +// +// (linux AND 386) OR (darwin AND (NOT cgo)) +// +// During a particular build, the following words are satisfied: +// +// - the target operating system, as spelled by runtime.GOOS +// - the target architecture, as spelled by runtime.GOARCH +// - "cgo", if ctxt.CgoEnabled is true +// - any additional words listed in ctxt.BuildTags +// +// If a file's name, after stripping the extension and a possible _test suffix, +// matches *_GOOS, *_GOARCH, or *_GOOS_GOARCH for any known operating +// system and architecture values, then the file is considered to have an implicit +// build constraint requiring those terms. +// +// To keep a file from being considered for the build: +// +// // +build ignore +// +// (any other unsatisfied word will work as well, but ``ignore'' is conventional.) +// +// To build a file only when using cgo, and only on Linux and OS X: +// +// // +build linux,cgo darwin,cgo +// +// Such a file is usually paired with another file implementing the +// default functionality for other systems, which in this case would +// carry the constraint: +// +// // +build !linux !darwin !cgo +// +// Naming a file dns_windows.go will cause it to be included only when +// building the package for Windows; similarly, math_386.s will be included +// only when building the package for 32-bit x86. +// +package build diff --git a/libgo/go/go/build/path.go b/libgo/go/go/build/path.go deleted file mode 100644 index 7e931faff19..00000000000 --- a/libgo/go/go/build/path.go +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package build - -import ( - "errors" - "fmt" - "os" - "path/filepath" - "runtime" -) - -// Path is a validated list of Trees derived from $GOROOT and $GOPATH at init. -var Path []*Tree - -// Tree describes a Go source tree, either $GOROOT or one from $GOPATH. -type Tree struct { - Path string - Goroot bool -} - -func newTree(p string) (*Tree, error) { - if !filepath.IsAbs(p) { - return nil, errors.New("must be absolute") - } - ep, err := filepath.EvalSymlinks(p) - if err != nil { - return nil, err - } - return &Tree{Path: ep}, nil -} - -// SrcDir returns the tree's package source directory. -func (t *Tree) SrcDir() string { - if t.Goroot { - return filepath.Join(t.Path, "src", "pkg") - } - return filepath.Join(t.Path, "src") -} - -// PkgDir returns the tree's package object directory. -func (t *Tree) PkgDir() string { - goos, goarch := runtime.GOOS, runtime.GOARCH - if e := os.Getenv("GOOS"); e != "" { - goos = e - } - if e := os.Getenv("GOARCH"); e != "" { - goarch = e - } - return filepath.Join(t.Path, "pkg", goos+"_"+goarch) -} - -// BinDir returns the tree's binary executable directory. -func (t *Tree) BinDir() string { - if t.Goroot { - if gobin := os.Getenv("GOBIN"); gobin != "" { - return filepath.Clean(gobin) - } - } - return filepath.Join(t.Path, "bin") -} - -// HasSrc returns whether the given package's -// source can be found inside this Tree. -func (t *Tree) HasSrc(pkg string) bool { - fi, err := os.Stat(filepath.Join(t.SrcDir(), pkg)) - if err != nil { - return false - } - return fi.IsDir() -} - -// HasPkg returns whether the given package's -// object file can be found inside this Tree. -func (t *Tree) HasPkg(pkg string) bool { - fi, err := os.Stat(filepath.Join(t.PkgDir(), pkg+".a")) - if err != nil { - return false - } - return !fi.IsDir() -} - -var ( - ErrNotFound = errors.New("package could not be found locally") - ErrTreeNotFound = errors.New("no valid GOROOT or GOPATH could be found") -) - -// FindTree takes an import or filesystem path and returns the -// tree where the package source should be and the package import path. -func FindTree(path string) (tree *Tree, pkg string, err error) { - if isLocalPath(path) { - if path, err = filepath.Abs(path); err != nil { - return - } - if path, err = filepath.EvalSymlinks(path); err != nil { - return - } - for _, t := range Path { - tpath := t.SrcDir() + string(filepath.Separator) - if !filepath.HasPrefix(path, tpath) { - continue - } - tree = t - pkg = filepath.ToSlash(path[len(tpath):]) - return - } - err = fmt.Errorf("path %q not inside a GOPATH", path) - return - } - tree = defaultTree - pkg = filepath.ToSlash(path) - for _, t := range Path { - if t.HasSrc(pkg) { - tree = t - return - } - } - if tree == nil { - err = ErrTreeNotFound - } else { - err = ErrNotFound - } - return -} - -// isLocalPath returns whether the given path is local (/foo ./foo ../foo . ..) -// Windows paths that starts with drive letter (c:\foo c:foo) are considered local. -func isLocalPath(s string) bool { - const sep = string(filepath.Separator) - return s == "." || s == ".." || - filepath.HasPrefix(s, sep) || - filepath.HasPrefix(s, "."+sep) || filepath.HasPrefix(s, ".."+sep) || - filepath.VolumeName(s) != "" -} - -var ( - // argument lists used by the build's gc and ld methods - gcImportArgs []string - ldImportArgs []string - - // default tree for remote packages - defaultTree *Tree -) - -// set up Path: parse and validate GOROOT and GOPATH variables -func init() { - root := runtime.GOROOT() - t, err := newTree(root) - if err == nil { - t.Goroot = true - Path = []*Tree{t} - } - - for _, p := range filepath.SplitList(os.Getenv("GOPATH")) { - if p == "" { - continue - } - t, err := newTree(p) - if err != nil { - continue - } - - Path = append(Path, t) - gcImportArgs = append(gcImportArgs, "-I", t.PkgDir()) - ldImportArgs = append(ldImportArgs, "-L", t.PkgDir()) - - // select first GOPATH entry as default - if defaultTree == nil { - defaultTree = t - } - } - - // use GOROOT if no valid GOPATH specified - if defaultTree == nil && len(Path) > 0 { - defaultTree = Path[0] - } -} diff --git a/libgo/go/go/build/pkgtest/pkgtest.go b/libgo/go/go/build/pkgtest/pkgtest.go deleted file mode 100644 index 08eea1e2bc3..00000000000 --- a/libgo/go/go/build/pkgtest/pkgtest.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkgtest - -import "bytes" - -func Foo() *bytes.Buffer { - return nil -} - -func Sqrt(x float64) float64 diff --git a/libgo/go/go/build/pkgtest/sqrt_386_test.go b/libgo/go/go/build/pkgtest/sqrt_386_test.go deleted file mode 100644 index 26b483fa0ba..00000000000 --- a/libgo/go/go/build/pkgtest/sqrt_386_test.go +++ /dev/null @@ -1 +0,0 @@ -package pkgtest diff --git a/libgo/go/go/build/pkgtest/sqrt_amd64_test.go b/libgo/go/go/build/pkgtest/sqrt_amd64_test.go deleted file mode 100644 index 26b483fa0ba..00000000000 --- a/libgo/go/go/build/pkgtest/sqrt_amd64_test.go +++ /dev/null @@ -1 +0,0 @@ -package pkgtest diff --git a/libgo/go/go/build/pkgtest/sqrt_arm_test.go b/libgo/go/go/build/pkgtest/sqrt_arm_test.go deleted file mode 100644 index 26b483fa0ba..00000000000 --- a/libgo/go/go/build/pkgtest/sqrt_arm_test.go +++ /dev/null @@ -1 +0,0 @@ -package pkgtest diff --git a/libgo/go/go/build/pkgtest/sqrt_test.go b/libgo/go/go/build/pkgtest/sqrt_test.go deleted file mode 100644 index ee9fd5de688..00000000000 --- a/libgo/go/go/build/pkgtest/sqrt_test.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkgtest - -import "fmt" - -var _ = fmt.Printf diff --git a/libgo/go/go/build/pkgtest/xsqrt_test.go b/libgo/go/go/build/pkgtest/xsqrt_test.go deleted file mode 100644 index 3898d1dda59..00000000000 --- a/libgo/go/go/build/pkgtest/xsqrt_test.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkgtest_test - -import "pkgtest" - -var _ = pkgtest.Foo diff --git a/libgo/go/go/build/syslist_test.go b/libgo/go/go/build/syslist_test.go index d27630d758d..9157faf8cb9 100644 --- a/libgo/go/go/build/syslist_test.go +++ b/libgo/go/go/build/syslist_test.go @@ -55,7 +55,7 @@ var tests = []GoodFileTest{ func TestGoodOSArch(t *testing.T) { for _, test := range tests { - if DefaultContext.goodOSArchFile(test.name) != test.result { + if Default.goodOSArchFile(test.name) != test.result { t.Fatalf("goodOSArchFile(%q) != %v", test.name, test.result) } } diff --git a/libgo/go/go/build/testdata/other/file/file.go b/libgo/go/go/build/testdata/other/file/file.go new file mode 100644 index 00000000000..bbfd3e9e598 --- /dev/null +++ b/libgo/go/go/build/testdata/other/file/file.go @@ -0,0 +1,5 @@ +// Test data - not compiled. + +package file + +func F() {} diff --git a/libgo/go/go/build/testdata/other/main.go b/libgo/go/go/build/testdata/other/main.go new file mode 100644 index 00000000000..e0904357c92 --- /dev/null +++ b/libgo/go/go/build/testdata/other/main.go @@ -0,0 +1,11 @@ +// Test data - not compiled. + +package main + +import ( + "./file" +) + +func main() { + file.F() +} diff --git a/libgo/go/go/doc/doc_test.go b/libgo/go/go/doc/doc_test.go index 9ffe72032c2..f957ede4abf 100644 --- a/libgo/go/go/doc/doc_test.go +++ b/libgo/go/go/doc/doc_test.go @@ -14,12 +14,14 @@ import ( "io/ioutil" "os" "path/filepath" + "regexp" "strings" "testing" "text/template" ) var update = flag.Bool("update", false, "update golden (.out) files") +var files = flag.String("files", "", "consider only Go test files matching this regular expression") const dataDir = "testdata" @@ -66,14 +68,26 @@ type bundle struct { } func test(t *testing.T, mode Mode) { - // get all packages + // determine file filter + filter := isGoFile + if *files != "" { + rx, err := regexp.Compile(*files) + if err != nil { + t.Fatal(err) + } + filter = func(fi os.FileInfo) bool { + return isGoFile(fi) && rx.MatchString(fi.Name()) + } + } + + // get packages fset := token.NewFileSet() - pkgs, err := parser.ParseDir(fset, dataDir, isGoFile, parser.ParseComments) + pkgs, err := parser.ParseDir(fset, dataDir, filter, parser.ParseComments) if err != nil { t.Fatal(err) } - // test all packages + // test packages for _, pkg := range pkgs { importpath := dataDir + "/" + pkg.Name doc := New(pkg, importpath, mode) diff --git a/libgo/go/go/doc/example.go b/libgo/go/go/doc/example.go index d5b58d26643..a7e0e250a2e 100644 --- a/libgo/go/go/doc/example.go +++ b/libgo/go/go/doc/example.go @@ -2,47 +2,98 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Extract example functions from package ASTs. +// Extract example functions from file ASTs. package doc import ( "go/ast" - "go/printer" + "go/token" + "regexp" + "sort" "strings" "unicode" "unicode/utf8" ) type Example struct { - Name string // name of the item being demonstrated - Body *printer.CommentedNode // code - Output string // expected output + Name string // name of the item being exemplified + Doc string // example function doc string + Code ast.Node + Comments []*ast.CommentGroup + Output string // expected output } -func Examples(pkg *ast.Package) []*Example { - var examples []*Example - for _, src := range pkg.Files { - for _, decl := range src.Decls { +func Examples(files ...*ast.File) []*Example { + var list []*Example + for _, file := range files { + hasTests := false // file contains tests or benchmarks + numDecl := 0 // number of non-import declarations in the file + var flist []*Example + for _, decl := range file.Decls { + if g, ok := decl.(*ast.GenDecl); ok && g.Tok != token.IMPORT { + numDecl++ + continue + } f, ok := decl.(*ast.FuncDecl) if !ok { continue } + numDecl++ name := f.Name.Name + if isTest(name, "Test") || isTest(name, "Benchmark") { + hasTests = true + continue + } if !isTest(name, "Example") { continue } - examples = append(examples, &Example{ - Name: name[len("Example"):], - Body: &printer.CommentedNode{ - Node: f.Body, - Comments: src.Comments, - }, - Output: f.Doc.Text(), + var doc string + if f.Doc != nil { + doc = f.Doc.Text() + } + flist = append(flist, &Example{ + Name: name[len("Example"):], + Doc: doc, + Code: f.Body, + Comments: file.Comments, + Output: exampleOutput(f, file.Comments), }) } + if !hasTests && numDecl > 1 && len(flist) == 1 { + // If this file only has one example function, some + // other top-level declarations, and no tests or + // benchmarks, use the whole file as the example. + flist[0].Code = file + } + list = append(list, flist...) + } + sort.Sort(exampleByName(list)) + return list +} + +var outputPrefix = regexp.MustCompile(`(?i)^[[:space:]]*output:`) + +func exampleOutput(fun *ast.FuncDecl, comments []*ast.CommentGroup) string { + // find the last comment in the function + var last *ast.CommentGroup + for _, cg := range comments { + if cg.Pos() < fun.Pos() { + continue + } + if cg.End() > fun.End() { + break + } + last = cg } - return examples + if last != nil { + // test that it begins with the correct prefix + text := last.Text() + if loc := outputPrefix.FindStringIndex(text); loc != nil { + return strings.TrimSpace(text[loc[1]:]) + } + } + return "" // no suitable comment found } // isTest tells whether name looks like a test, example, or benchmark. @@ -58,3 +109,9 @@ func isTest(name, prefix string) bool { rune, _ := utf8.DecodeRuneInString(name[len(prefix):]) return !unicode.IsLower(rune) } + +type exampleByName []*Example + +func (s exampleByName) Len() int { return len(s) } +func (s exampleByName) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s exampleByName) Less(i, j int) bool { return s[i].Name < s[j].Name } diff --git a/libgo/go/go/doc/exports.go b/libgo/go/go/doc/exports.go index 68dd3841bed..146be5d8707 100644 --- a/libgo/go/go/doc/exports.go +++ b/libgo/go/go/doc/exports.go @@ -22,12 +22,38 @@ func filterIdentList(list []*ast.Ident) []*ast.Ident { return list[0:j] } +// removeErrorField removes anonymous fields named "error" from an interface. +// This is called when "error" has been determined to be a local name, +// not the predeclared type. +// +func removeErrorField(ityp *ast.InterfaceType) { + list := ityp.Methods.List // we know that ityp.Methods != nil + j := 0 + for _, field := range list { + keepField := true + if n := len(field.Names); n == 0 { + // anonymous field + if fname, _ := baseTypeName(field.Type); fname == "error" { + keepField = false + } + } + if keepField { + list[j] = field + j++ + } + } + if j < len(list) { + ityp.Incomplete = true + } + ityp.Methods.List = list[0:j] +} + // filterFieldList removes unexported fields (field names) from the field list // in place and returns true if fields were removed. Anonymous fields are // recorded with the parent type. filterType is called with the types of // all remaining fields. // -func (r *reader) filterFieldList(parent *namedType, fields *ast.FieldList) (removedFields bool) { +func (r *reader) filterFieldList(parent *namedType, fields *ast.FieldList, ityp *ast.InterfaceType) (removedFields bool) { if fields == nil { return } @@ -37,9 +63,15 @@ func (r *reader) filterFieldList(parent *namedType, fields *ast.FieldList) (remo keepField := false if n := len(field.Names); n == 0 { // anonymous field - name := r.recordAnonymousField(parent, field.Type) - if ast.IsExported(name) { + fname := r.recordAnonymousField(parent, field.Type) + if ast.IsExported(fname) { + keepField = true + } else if ityp != nil && fname == "error" { + // possibly the predeclared error interface; keep + // it for now but remember this interface so that + // it can be fixed if error is also defined locally keepField = true + r.remember(ityp) } } else { field.Names = filterIdentList(field.Names) @@ -86,14 +118,14 @@ func (r *reader) filterType(parent *namedType, typ ast.Expr) { case *ast.ArrayType: r.filterType(nil, t.Elt) case *ast.StructType: - if r.filterFieldList(parent, t.Fields) { + if r.filterFieldList(parent, t.Fields, nil) { t.Incomplete = true } case *ast.FuncType: r.filterParamList(t.Params) r.filterParamList(t.Results) case *ast.InterfaceType: - if r.filterFieldList(parent, t.Methods) { + if r.filterFieldList(parent, t.Methods, t) { t.Incomplete = true } case *ast.MapType: @@ -116,9 +148,12 @@ func (r *reader) filterSpec(spec ast.Spec) bool { return true } case *ast.TypeSpec: - if ast.IsExported(s.Name.Name) { + if name := s.Name.Name; ast.IsExported(name) { r.filterType(r.lookupType(s.Name.Name), s.Type) return true + } else if name == "error" { + // special case: remember that error is declared locally + r.errorDecl = true } } return false diff --git a/libgo/go/go/doc/headscan.go b/libgo/go/go/doc/headscan.go index 37486b126fd..f5593476382 100644 --- a/libgo/go/go/doc/headscan.go +++ b/libgo/go/go/doc/headscan.go @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// +build ignore + /* The headscan command extracts comment headings from package files; it is used to detect false positives which may require an adjustment diff --git a/libgo/go/go/doc/reader.go b/libgo/go/go/doc/reader.go index dcf49f68fd3..5eaae37b7de 100644 --- a/libgo/go/go/doc/reader.go +++ b/libgo/go/go/doc/reader.go @@ -17,7 +17,7 @@ import ( // // Internally, we treat functions like methods and collect them in method sets. -// methodSet describes a set of methods. Entries where Decl == nil are conflict +// A methodSet describes a set of methods. Entries where Decl == nil are conflict // entries (more then one method with the same name at the same embedding level). // type methodSet map[string]*Func @@ -110,6 +110,9 @@ func baseTypeName(x ast.Expr) (name string, imported bool) { return } +// An embeddedSet describes a set of embedded types. +type embeddedSet map[*namedType]bool + // A namedType represents a named unqualified (package local, or possibly // predeclared) type. The namedType for a type name is always found via // reader.lookupType. @@ -119,9 +122,9 @@ type namedType struct { name string // type name decl *ast.GenDecl // nil if declaration hasn't been seen yet - isEmbedded bool // true if this type is embedded - isStruct bool // true if this type is a struct - embedded map[*namedType]bool // true if the embedded type is a pointer + isEmbedded bool // true if this type is embedded + isStruct bool // true if this type is a struct + embedded embeddedSet // true if the embedded type is a pointer // associated declarations values []*Value // consts and vars @@ -152,6 +155,10 @@ type reader struct { values []*Value // consts and vars types map[string]*namedType funcs methodSet + + // support for package-local error type declarations + errorDecl bool // if set, type "error" was declared locally + fixlist []*ast.InterfaceType // list of interfaces containing anonymous field "error" } func (r *reader) isVisible(name string) bool { @@ -173,7 +180,7 @@ func (r *reader) lookupType(name string) *namedType { // type not found - add one without declaration typ := &namedType{ name: name, - embedded: make(map[*namedType]bool), + embedded: make(embeddedSet), funcs: make(methodSet), methods: make(methodSet), } @@ -210,6 +217,10 @@ func (r *reader) readDoc(comment *ast.CommentGroup) { r.doc += "\n" + text } +func (r *reader) remember(typ *ast.InterfaceType) { + r.fixlist = append(r.fixlist, typ) +} + func specNames(specs []ast.Spec) []string { names := make([]string, 0, len(specs)) // reasonable estimate for _, s := range specs { @@ -274,7 +285,7 @@ func (r *reader) readValue(decl *ast.GenDecl) { // determine values list with which to associate the Value for this decl values := &r.values const threshold = 0.75 - if domName != "" && domFreq >= int(float64(len(decl.Specs))*threshold) { + if domName != "" && r.isVisible(domName) && domFreq >= int(float64(len(decl.Specs))*threshold) { // typed entries are sufficiently frequent if typ := r.lookupType(domName); typ != nil { values = &typ.values // associate with that type @@ -315,7 +326,7 @@ func (r *reader) readType(decl *ast.GenDecl, spec *ast.TypeSpec) { return // no name or blank name - ignore the type } - // A type should be added at most once, so info.decl + // A type should be added at most once, so typ.decl // should be nil - if it is not, simply overwrite it. typ.decl = decl @@ -421,6 +432,17 @@ func (r *reader) readFile(src *ast.File) { r.readValue(d) case token.TYPE: // types are handled individually + if len(d.Specs) == 1 && !d.Lparen.IsValid() { + // common case: single declaration w/o parentheses + // (if a single declaration is parenthesized, + // create a new fake declaration below, so that + // go/doc type declarations always appear w/o + // parentheses) + if s, ok := d.Specs[0].(*ast.TypeSpec); ok { + r.readType(d, s) + } + break + } for _, spec := range d.Specs { if s, ok := spec.(*ast.TypeSpec); ok { // use an individual (possibly fake) declaration @@ -428,8 +450,15 @@ func (r *reader) readFile(src *ast.File) { // gets to (re-)use the declaration documentation // if there's none associated with the spec itself fake := &ast.GenDecl{ - d.Doc, d.Pos(), token.TYPE, token.NoPos, - []ast.Spec{s}, token.NoPos, + Doc: d.Doc, + // don't use the existing TokPos because it + // will lead to the wrong selection range for + // the fake declaration if there are more + // than one type in the group (this affects + // src/cmd/godoc/godoc.go's posLink_urlFunc) + TokPos: s.Pos(), + Tok: token.TYPE, + Specs: []ast.Spec{s}, } r.readType(fake, s) } @@ -449,7 +478,7 @@ func (r *reader) readFile(src *ast.File) { // non-empty BUG comment; collect comment without BUG prefix list := append([]*ast.Comment(nil), c.List...) // make a copy list[0].Text = text[m[1]:] - r.bugs = append(r.bugs, (&ast.CommentGroup{list}).Text()) + r.bugs = append(r.bugs, (&ast.CommentGroup{List: list}).Text()) } } } @@ -519,7 +548,7 @@ func customizeRecv(f *Func, recvTypeName string, embeddedIsPtr bool, level int) _, origRecvIsPtr := newField.Type.(*ast.StarExpr) var typ ast.Expr = ast.NewIdent(recvTypeName) if !embeddedIsPtr && origRecvIsPtr { - typ = &ast.StarExpr{token.NoPos, typ} + typ = &ast.StarExpr{X: typ} } newField.Type = typ @@ -543,7 +572,8 @@ func customizeRecv(f *Func, recvTypeName string, embeddedIsPtr bool, level int) // collectEmbeddedMethods collects the embedded methods of typ in mset. // -func (r *reader) collectEmbeddedMethods(mset methodSet, typ *namedType, recvTypeName string, embeddedIsPtr bool, level int) { +func (r *reader) collectEmbeddedMethods(mset methodSet, typ *namedType, recvTypeName string, embeddedIsPtr bool, level int, visited embeddedSet) { + visited[typ] = true for embedded, isPtr := range typ.embedded { // Once an embedded type is embedded as a pointer type // all embedded types in those types are treated like @@ -557,8 +587,11 @@ func (r *reader) collectEmbeddedMethods(mset methodSet, typ *namedType, recvType mset.add(customizeRecv(m, recvTypeName, thisEmbeddedIsPtr, level)) } } - r.collectEmbeddedMethods(mset, embedded, recvTypeName, thisEmbeddedIsPtr, level+1) + if !visited[embedded] { + r.collectEmbeddedMethods(mset, embedded, recvTypeName, thisEmbeddedIsPtr, level+1, visited) + } } + delete(visited, typ) } // computeMethodSets determines the actual method sets for each type encountered. @@ -568,12 +601,19 @@ func (r *reader) computeMethodSets() { // collect embedded methods for t if t.isStruct { // struct - r.collectEmbeddedMethods(t.methods, t, t.name, false, 1) + r.collectEmbeddedMethods(t.methods, t, t.name, false, 1, make(embeddedSet)) } else { // interface // TODO(gri) fix this } } + + // if error was declared locally, don't treat it as exported field anymore + if r.errorDecl { + for _, ityp := range r.fixlist { + removeErrorField(ityp) + } + } } // cleanupTypes removes the association of functions and methods with diff --git a/libgo/go/go/doc/synopsis.go b/libgo/go/go/doc/synopsis.go new file mode 100644 index 00000000000..2192d78c0cd --- /dev/null +++ b/libgo/go/go/doc/synopsis.go @@ -0,0 +1,52 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package doc + +import "unicode" + +// firstSentenceLen returns the length of the first sentence in s. +// The sentence ends after the first period followed by space and +// not preceded by exactly one uppercase letter. +// +func firstSentenceLen(s string) int { + var ppp, pp, p rune + for i, q := range s { + if q == '\n' || q == '\r' || q == '\t' { + q = ' ' + } + if q == ' ' && p == '.' && (!unicode.IsUpper(pp) || unicode.IsUpper(ppp)) { + return i + } + ppp, pp, p = pp, p, q + } + return len(s) +} + +// Synopsis returns a cleaned version of the first sentence in s. +// That sentence ends after the first period followed by space and +// not preceded by exactly one uppercase letter. The result string +// has no \n, \r, or \t characters and uses only single spaces between +// words. +// +func Synopsis(s string) string { + n := firstSentenceLen(s) + var b []byte + p := byte(' ') + for i := 0; i < n; i++ { + q := s[i] + if q == '\n' || q == '\r' || q == '\t' { + q = ' ' + } + if q != ' ' || p != ' ' { + b = append(b, q) + p = q + } + } + // remove trailing blank, if any + if n := len(b); n > 0 && p == ' ' { + b = b[0 : n-1] + } + return string(b) +} diff --git a/libgo/go/go/doc/synopsis_test.go b/libgo/go/go/doc/synopsis_test.go new file mode 100644 index 00000000000..dfc6598af47 --- /dev/null +++ b/libgo/go/go/doc/synopsis_test.go @@ -0,0 +1,44 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package doc + +import "testing" + +var tests = []struct { + txt string + fsl int + syn string +}{ + {"", 0, ""}, + {"foo", 3, "foo"}, + {"foo.", 4, "foo."}, + {"foo.bar", 7, "foo.bar"}, + {" foo. ", 6, "foo."}, + {" foo\t bar.\n", 12, "foo bar."}, + {" foo\t bar.\n", 12, "foo bar."}, + {"a b\n\nc\r\rd\t\t", 12, "a b c d"}, + {"a b\n\nc\r\rd\t\t . BLA", 15, "a b c d ."}, + {"Package poems by T.S.Eliot. To rhyme...", 27, "Package poems by T.S.Eliot."}, + {"Package poems by T. S. Eliot. To rhyme...", 29, "Package poems by T. S. Eliot."}, + {"foo implements the foo ABI. The foo ABI is...", 27, "foo implements the foo ABI."}, + {"Package\nfoo. ..", 12, "Package foo."}, + {"P . Q.", 3, "P ."}, + {"P. Q. ", 8, "P. Q."}, + {"Package ΚαλημÎÏα κόσμε.", 36, "Package ΚαλημÎÏα κόσμε."}, + {"Package ã“ã‚“ã«ã¡ã¯ 世界\n", 31, "Package ã“ã‚“ã«ã¡ã¯ 世界"}, +} + +func TestSynopsis(t *testing.T) { + for _, e := range tests { + fsl := firstSentenceLen(e.txt) + if fsl != e.fsl { + t.Errorf("got fsl = %d; want %d for %q\n", fsl, e.fsl, e.txt) + } + syn := Synopsis(e.txt) + if syn != e.syn { + t.Errorf("got syn = %q; want %q for %q\n", syn, e.syn, e.txt) + } + } +} diff --git a/libgo/go/go/doc/testdata/b.0.golden b/libgo/go/go/doc/testdata/b.0.golden index 7c33300616d..9d93392eaa5 100644 --- a/libgo/go/go/doc/testdata/b.0.golden +++ b/libgo/go/go/doc/testdata/b.0.golden @@ -12,18 +12,46 @@ FILENAMES CONSTANTS // + const ( + C1 notExported = iota + C2 + + C4 + C5 + ) + + // + const C notExported = 0 + + // const Pi = 3.14 // Pi VARIABLES // + var ( + U1, U2, U4, U5 notExported + + U7 notExported = 7 + ) + + // var MaxInt int // MaxInt + // + var V notExported + + // + var V1, V2, V4, V5 notExported + FUNCTIONS // func F(x int) int + // + func F1() notExported + // Always under the package functions list. func NotAFactory() int diff --git a/libgo/go/go/doc/testdata/b.1.golden b/libgo/go/go/doc/testdata/b.1.golden index f30380516bd..66c47b5c2a7 100644 --- a/libgo/go/go/doc/testdata/b.1.golden +++ b/libgo/go/go/doc/testdata/b.1.golden @@ -38,8 +38,42 @@ TYPES // func (x *T) M() + // + type notExported int + + // + const ( + C1 notExported = iota + C2 + c3 + C4 + C5 + ) + + // + const C notExported = 0 + + // + var ( + U1, U2, u3, U4, U5 notExported + u6 notExported + U7 notExported = 7 + ) + + // + var V notExported + + // + var V1, V2, v3, V4, V5 notExported + + // + func F1() notExported + + // + func f2() notExported + // Should only appear if AllDecls is set. - type uint struct{} + type uint struct{} // overrides a predeclared type uint // Associated with uint type if AllDecls is set. func UintFactory() uint diff --git a/libgo/go/go/doc/testdata/b.2.golden b/libgo/go/go/doc/testdata/b.2.golden index 7c33300616d..9d93392eaa5 100644 --- a/libgo/go/go/doc/testdata/b.2.golden +++ b/libgo/go/go/doc/testdata/b.2.golden @@ -12,18 +12,46 @@ FILENAMES CONSTANTS // + const ( + C1 notExported = iota + C2 + + C4 + C5 + ) + + // + const C notExported = 0 + + // const Pi = 3.14 // Pi VARIABLES // + var ( + U1, U2, U4, U5 notExported + + U7 notExported = 7 + ) + + // var MaxInt int // MaxInt + // + var V notExported + + // + var V1, V2, V4, V5 notExported + FUNCTIONS // func F(x int) int + // + func F1() notExported + // Always under the package functions list. func NotAFactory() int diff --git a/libgo/go/go/doc/testdata/b.go b/libgo/go/go/doc/testdata/b.go index 28660f9be7c..e50663b3dfa 100644 --- a/libgo/go/go/doc/testdata/b.go +++ b/libgo/go/go/doc/testdata/b.go @@ -6,6 +6,7 @@ package b import "a" +// ---------------------------------------------------------------------------- // Basic declarations const Pi = 3.14 // Pi @@ -28,3 +29,30 @@ func uintFactory() uint {} // Should only appear if AllDecls is set. type uint struct{} // overrides a predeclared type uint + +// ---------------------------------------------------------------------------- +// Exported declarations associated with non-exported types must always be shown. + +type notExported int + +const C notExported = 0 + +const ( + C1 notExported = iota + C2 + c3 + C4 + C5 +) + +var V notExported +var V1, V2, v3, V4, V5 notExported + +var ( + U1, U2, u3, U4, U5 notExported + u6 notExported + U7 notExported = 7 +) + +func F1() notExported {} +func f2() notExported {} diff --git a/libgo/go/go/doc/testdata/benchmark.go b/libgo/go/go/doc/testdata/benchmark.go index 0bf567b7c4d..0aded5bb4c7 100644 --- a/libgo/go/go/doc/testdata/benchmark.go +++ b/libgo/go/go/doc/testdata/benchmark.go @@ -16,7 +16,7 @@ var matchBenchmarks = flag.String("test.bench", "", "regular expression to selec var benchTime = flag.Float64("test.benchtime", 1, "approximate run time for each benchmark, in seconds") // An internal type but exported because it is cross-package; part of the implementation -// of gotest. +// of go test. type InternalBenchmark struct { Name string F func(b *B) @@ -213,7 +213,7 @@ func (r BenchmarkResult) String() string { } // An internal function but exported because it is cross-package; part of the implementation -// of gotest. +// of go test. func RunBenchmarks(matchString func(pat, str string) (bool, error), benchmarks []InternalBenchmark) { // If no flag was specified, don't run benchmarks. if len(*matchBenchmarks) == 0 { @@ -281,7 +281,7 @@ func (b *B) trimOutput() { } // Benchmark benchmarks a single function. Useful for creating -// custom benchmarks that do not use gotest. +// custom benchmarks that do not use go test. func Benchmark(f func(b *B)) BenchmarkResult { b := &B{ common: common{ diff --git a/libgo/go/go/doc/testdata/e.0.golden b/libgo/go/go/doc/testdata/e.0.golden index 096a50ff41f..6987e5867cf 100644 --- a/libgo/go/go/doc/testdata/e.0.golden +++ b/libgo/go/go/doc/testdata/e.0.golden @@ -40,3 +40,70 @@ TYPES T4 } + // + type U1 struct { + *U1 + } + + // U1.M should appear as method of U1. + func (*U1) M() + + // + type U2 struct { + *U3 + } + + // U2.M should appear as method of U2 and as method of U3 only if ... + func (*U2) M() + + // + type U3 struct { + *U2 + } + + // U3.N should appear as method of U3 and as method of U2 only if ... + func (*U3) N() + + // + type U4 struct { + // contains filtered or unexported fields + } + + // U4.M should appear as method of U4. + func (*U4) M() + + // + type V1 struct { + *V2 + *V5 + } + + // + type V2 struct { + *V3 + } + + // + type V3 struct { + *V4 + } + + // + type V4 struct { + *V5 + } + + // V4.M should appear as method of V2 and V3 if AllMethods is set. + func (*V4) M() + + // + type V5 struct { + *V6 + } + + // + type V6 struct{} + + // V6.M should appear as method of V1 and V5 if AllMethods is set. + func (*V6) M() + diff --git a/libgo/go/go/doc/testdata/e.1.golden b/libgo/go/go/doc/testdata/e.1.golden index 28be74a1fd6..cbe22e0bf63 100644 --- a/libgo/go/go/doc/testdata/e.1.golden +++ b/libgo/go/go/doc/testdata/e.1.golden @@ -43,6 +43,73 @@ TYPES } // + type U1 struct { + *U1 + } + + // U1.M should appear as method of U1. + func (*U1) M() + + // + type U2 struct { + *U3 + } + + // U2.M should appear as method of U2 and as method of U3 only if ... + func (*U2) M() + + // + type U3 struct { + *U2 + } + + // U3.N should appear as method of U3 and as method of U2 only if ... + func (*U3) N() + + // + type U4 struct { + *u5 + } + + // U4.M should appear as method of U4. + func (*U4) M() + + // + type V1 struct { + *V2 + *V5 + } + + // + type V2 struct { + *V3 + } + + // + type V3 struct { + *V4 + } + + // + type V4 struct { + *V5 + } + + // V4.M should appear as method of V2 and V3 if AllMethods is set. + func (*V4) M() + + // + type V5 struct { + *V6 + } + + // + type V6 struct{} + + // V6.M should appear as method of V1 and V5 if AllMethods is set. + func (*V6) M() + + // type t1 struct{} // t1.M should not appear as method in a Tx type. @@ -70,3 +137,8 @@ TYPES // t2.M should not appear as method in a Tx type. func (t2e) M() + // + type u5 struct { + *U4 + } + diff --git a/libgo/go/go/doc/testdata/e.2.golden b/libgo/go/go/doc/testdata/e.2.golden index f9a2b816774..e7b05e80faf 100644 --- a/libgo/go/go/doc/testdata/e.2.golden +++ b/libgo/go/go/doc/testdata/e.2.golden @@ -43,3 +43,88 @@ TYPES // T4.M should appear as method of T5 only if AllMethods is set. func (*T5) M() + // + type U1 struct { + *U1 + } + + // U1.M should appear as method of U1. + func (*U1) M() + + // + type U2 struct { + *U3 + } + + // U2.M should appear as method of U2 and as method of U3 only if ... + func (*U2) M() + + // U3.N should appear as method of U3 and as method of U2 only if ... + func (U2) N() + + // + type U3 struct { + *U2 + } + + // U2.M should appear as method of U2 and as method of U3 only if ... + func (U3) M() + + // U3.N should appear as method of U3 and as method of U2 only if ... + func (*U3) N() + + // + type U4 struct { + // contains filtered or unexported fields + } + + // U4.M should appear as method of U4. + func (*U4) M() + + // + type V1 struct { + *V2 + *V5 + } + + // V6.M should appear as method of V1 and V5 if AllMethods is set. + func (V1) M() + + // + type V2 struct { + *V3 + } + + // V4.M should appear as method of V2 and V3 if AllMethods is set. + func (V2) M() + + // + type V3 struct { + *V4 + } + + // V4.M should appear as method of V2 and V3 if AllMethods is set. + func (V3) M() + + // + type V4 struct { + *V5 + } + + // V4.M should appear as method of V2 and V3 if AllMethods is set. + func (*V4) M() + + // + type V5 struct { + *V6 + } + + // V6.M should appear as method of V1 and V5 if AllMethods is set. + func (V5) M() + + // + type V6 struct{} + + // V6.M should appear as method of V1 and V5 if AllMethods is set. + func (*V6) M() + diff --git a/libgo/go/go/doc/testdata/e.go b/libgo/go/go/doc/testdata/e.go index 526a91f4f00..19dd138cf40 100644 --- a/libgo/go/go/doc/testdata/e.go +++ b/libgo/go/go/doc/testdata/e.go @@ -1,4 +1,4 @@ -// Copyright 2011 The Go Authors. All rights reserved. +// Copyright 2012 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. @@ -77,3 +77,71 @@ func (*T4) M() {} type T5 struct { T4 } + +// ---------------------------------------------------------------------------- +// Recursive type declarations must not lead to endless recursion. + +type U1 struct { + *U1 +} + +// U1.M should appear as method of U1. +func (*U1) M() {} + +type U2 struct { + *U3 +} + +// U2.M should appear as method of U2 and as method of U3 only if AllMethods is set. +func (*U2) M() {} + +type U3 struct { + *U2 +} + +// U3.N should appear as method of U3 and as method of U2 only if AllMethods is set. +func (*U3) N() {} + +type U4 struct { + *u5 +} + +// U4.M should appear as method of U4. +func (*U4) M() {} + +type u5 struct { + *U4 +} + +// ---------------------------------------------------------------------------- +// A higher-level embedded type (and its methods) wins over the same type (and +// its methods) embedded at a lower level. + +type V1 struct { + *V2 + *V5 +} + +type V2 struct { + *V3 +} + +type V3 struct { + *V4 +} + +type V4 struct { + *V5 +} + +type V5 struct { + *V6 +} + +type V6 struct{} + +// V4.M should appear as method of V2 and V3 if AllMethods is set. +func (*V4) M() {} + +// V6.M should appear as method of V1 and V5 if AllMethods is set. +func (*V6) M() {} diff --git a/libgo/go/go/doc/testdata/error1.0.golden b/libgo/go/go/doc/testdata/error1.0.golden new file mode 100644 index 00000000000..6c6fe5d49bd --- /dev/null +++ b/libgo/go/go/doc/testdata/error1.0.golden @@ -0,0 +1,30 @@ +// +PACKAGE error1 + +IMPORTPATH + testdata/error1 + +FILENAMES + testdata/error1.go + +TYPES + // + type I0 interface { + // When embedded, the predeclared error interface + // must remain visible in interface types. + error + } + + // + type S0 struct { + // contains filtered or unexported fields + } + + // + type T0 struct { + ExportedField interface { + // error should be visible + error + } + } + diff --git a/libgo/go/go/doc/testdata/error1.1.golden b/libgo/go/go/doc/testdata/error1.1.golden new file mode 100644 index 00000000000..a8dc2e71dc3 --- /dev/null +++ b/libgo/go/go/doc/testdata/error1.1.golden @@ -0,0 +1,32 @@ +// +PACKAGE error1 + +IMPORTPATH + testdata/error1 + +FILENAMES + testdata/error1.go + +TYPES + // + type I0 interface { + // When embedded, the predeclared error interface + // must remain visible in interface types. + error + } + + // + type S0 struct { + // In struct types, an embedded error must only be visible + // if AllDecls is set. + error + } + + // + type T0 struct { + ExportedField interface { + // error should be visible + error + } + } + diff --git a/libgo/go/go/doc/testdata/error1.2.golden b/libgo/go/go/doc/testdata/error1.2.golden new file mode 100644 index 00000000000..6c6fe5d49bd --- /dev/null +++ b/libgo/go/go/doc/testdata/error1.2.golden @@ -0,0 +1,30 @@ +// +PACKAGE error1 + +IMPORTPATH + testdata/error1 + +FILENAMES + testdata/error1.go + +TYPES + // + type I0 interface { + // When embedded, the predeclared error interface + // must remain visible in interface types. + error + } + + // + type S0 struct { + // contains filtered or unexported fields + } + + // + type T0 struct { + ExportedField interface { + // error should be visible + error + } + } + diff --git a/libgo/go/go/doc/testdata/error1.go b/libgo/go/go/doc/testdata/error1.go new file mode 100644 index 00000000000..3c777a78005 --- /dev/null +++ b/libgo/go/go/doc/testdata/error1.go @@ -0,0 +1,24 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package error1 + +type I0 interface { + // When embedded, the predeclared error interface + // must remain visible in interface types. + error +} + +type T0 struct { + ExportedField interface { + // error should be visible + error + } +} + +type S0 struct { + // In struct types, an embedded error must only be visible + // if AllDecls is set. + error +} diff --git a/libgo/go/go/doc/testdata/error2.0.golden b/libgo/go/go/doc/testdata/error2.0.golden new file mode 100644 index 00000000000..dedfe412a0f --- /dev/null +++ b/libgo/go/go/doc/testdata/error2.0.golden @@ -0,0 +1,27 @@ +// +PACKAGE error2 + +IMPORTPATH + testdata/error2 + +FILENAMES + testdata/error2.go + +TYPES + // + type I0 interface { + // contains filtered or unexported methods + } + + // + type S0 struct { + // contains filtered or unexported fields + } + + // + type T0 struct { + ExportedField interface { + // contains filtered or unexported methods + } + } + diff --git a/libgo/go/go/doc/testdata/error2.1.golden b/libgo/go/go/doc/testdata/error2.1.golden new file mode 100644 index 00000000000..776bd1b3e40 --- /dev/null +++ b/libgo/go/go/doc/testdata/error2.1.golden @@ -0,0 +1,37 @@ +// +PACKAGE error2 + +IMPORTPATH + testdata/error2 + +FILENAMES + testdata/error2.go + +TYPES + // + type I0 interface { + // When embedded, the the locally declared error interface + // is only visible if all declarations are shown. + error + } + + // + type S0 struct { + // In struct types, an embedded error must only be visible + // if AllDecls is set. + error + } + + // + type T0 struct { + ExportedField interface { + // error should not be visible + error + } + } + + // This error declaration shadows the predeclared error type. + type error interface { + Error() string + } + diff --git a/libgo/go/go/doc/testdata/error2.2.golden b/libgo/go/go/doc/testdata/error2.2.golden new file mode 100644 index 00000000000..dedfe412a0f --- /dev/null +++ b/libgo/go/go/doc/testdata/error2.2.golden @@ -0,0 +1,27 @@ +// +PACKAGE error2 + +IMPORTPATH + testdata/error2 + +FILENAMES + testdata/error2.go + +TYPES + // + type I0 interface { + // contains filtered or unexported methods + } + + // + type S0 struct { + // contains filtered or unexported fields + } + + // + type T0 struct { + ExportedField interface { + // contains filtered or unexported methods + } + } + diff --git a/libgo/go/go/doc/testdata/error2.go b/libgo/go/go/doc/testdata/error2.go new file mode 100644 index 00000000000..6cc36feef3e --- /dev/null +++ b/libgo/go/go/doc/testdata/error2.go @@ -0,0 +1,29 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package error2 + +type I0 interface { + // When embedded, the the locally declared error interface + // is only visible if all declarations are shown. + error +} + +type T0 struct { + ExportedField interface { + // error should not be visible + error + } +} + +type S0 struct { + // In struct types, an embedded error must only be visible + // if AllDecls is set. + error +} + +// This error declaration shadows the predeclared error type. +type error interface { + Error() string +} diff --git a/libgo/go/go/doc/testdata/f.go b/libgo/go/go/doc/testdata/f.go index a3051e1fb3b..7e9add90784 100644 --- a/libgo/go/go/doc/testdata/f.go +++ b/libgo/go/go/doc/testdata/f.go @@ -1,4 +1,4 @@ -// Copyright 2011 The Go Authors. All rights reserved. +// Copyright 2012 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/libgo/go/go/doc/testdata/testing.1.golden b/libgo/go/go/doc/testdata/testing.1.golden index 1f92f8fe3e1..d26a4685ca0 100644 --- a/libgo/go/go/doc/testdata/testing.1.golden +++ b/libgo/go/go/doc/testdata/testing.1.golden @@ -27,7 +27,7 @@ VARIABLES // The short flag requests that tests run more quickly, but its functionality // is provided by test writers themselves. The testing package is just its // home. The all.bash installation script sets it to make installation more - // efficient, but by default the flag is off so a plain "gotest" will do a + // efficient, but by default the flag is off so a plain "go test" will do a // full test of the package. short = flag.Bool("test.short", false, "run smaller test suite to save time") diff --git a/libgo/go/go/doc/testdata/testing.go b/libgo/go/go/doc/testdata/testing.go index cfe212dc1d7..71c1d1eaf0e 100644 --- a/libgo/go/go/doc/testdata/testing.go +++ b/libgo/go/go/doc/testdata/testing.go @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. // Package testing provides support for automated testing of Go packages. -// It is intended to be used in concert with the ``gotest'' utility, which automates +// It is intended to be used in concert with the ``go test'' utility, which automates // execution of any function of the form // func TestXxx(*testing.T) // where Xxx can be any alphanumeric string (but the first letter must not be in @@ -12,7 +12,7 @@ // // Functions of the form // func BenchmarkXxx(*testing.B) -// are considered benchmarks, and are executed by gotest when the -test.bench +// are considered benchmarks, and are executed by go test when the -test.bench // flag is provided. // // A sample benchmark function looks like this: @@ -53,7 +53,7 @@ var ( // The short flag requests that tests run more quickly, but its functionality // is provided by test writers themselves. The testing package is just its // home. The all.bash installation script sets it to make installation more - // efficient, but by default the flag is off so a plain "gotest" will do a + // efficient, but by default the flag is off so a plain "go test" will do a // full test of the package. short = flag.Bool("test.short", false, "run smaller test suite to save time") @@ -205,7 +205,7 @@ func (t *T) Parallel() { } // An internal type but exported because it is cross-package; part of the implementation -// of gotest. +// of go test. type InternalTest struct { Name string F func(*T) @@ -227,7 +227,7 @@ func tRunner(t *T, test *InternalTest) { } // An internal function but exported because it is cross-package; part of the implementation -// of gotest. +// of go test. func Main(matchString func(pat, str string) (bool, error), tests []InternalTest, benchmarks []InternalBenchmark, examples []InternalExample) { flag.Parse() parseCpuList() diff --git a/libgo/go/go/parser/interface.go b/libgo/go/go/parser/interface.go index f1b4ce34d1a..5c203a7846e 100644 --- a/libgo/go/go/parser/interface.go +++ b/libgo/go/go/parser/interface.go @@ -80,13 +80,25 @@ const ( // are returned via a scanner.ErrorList which is sorted by file position. // func ParseFile(fset *token.FileSet, filename string, src interface{}, mode Mode) (*ast.File, error) { + // get source text, err := readSource(filename, src) if err != nil { return nil, err } + + // parse source var p parser p.init(fset, filename, text, mode) - return p.parseFile(), p.errors() + f := p.parseFile() + + // sort errors + if p.mode&SpuriousErrors == 0 { + p.errors.RemoveMultiples() + } else { + p.errors.Sort() + } + + return f, p.errors.Err() } // ParseDir calls ParseFile for the files in the directory specified by path and diff --git a/libgo/go/go/parser/parser.go b/libgo/go/go/parser/parser.go index 6bee8de9f65..a122baf0879 100644 --- a/libgo/go/go/parser/parser.go +++ b/libgo/go/go/parser/parser.go @@ -14,12 +14,15 @@ import ( "go/ast" "go/scanner" "go/token" + "strconv" + "strings" + "unicode" ) // The parser structure holds the parser's internal state. type parser struct { - file *token.File - scanner.ErrorVector + file *token.File + errors scanner.ErrorList scanner scanner.Scanner // Tracing/debugging @@ -58,7 +61,8 @@ func (p *parser) init(fset *token.FileSet, filename string, src []byte, mode Mod if mode&ParseComments != 0 { m = scanner.ScanComments } - p.scanner.Init(p.file, src, p, m) + eh := func(pos token.Position, msg string) { p.errors.Add(pos, msg) } + p.scanner.Init(p.file, src, eh, m) p.mode = mode p.trace = mode&Trace != 0 // for convenience (p.trace is used frequently) @@ -74,14 +78,6 @@ func (p *parser) init(fset *token.FileSet, filename string, src []byte, mode Mod p.openLabelScope() } -func (p *parser) errors() error { - m := scanner.Sorted - if p.mode&SpuriousErrors == 0 { - m = scanner.NoMultiples - } - return p.GetError(m) -} - // ---------------------------------------------------------------------------- // Scoping support @@ -256,7 +252,7 @@ func (p *parser) consumeComment() (comment *ast.Comment, endline int) { } } - comment = &ast.Comment{p.pos, p.lit} + comment = &ast.Comment{Slash: p.pos, Text: p.lit} p.next0() return @@ -277,7 +273,7 @@ func (p *parser) consumeCommentGroup() (comments *ast.CommentGroup, endline int) } // add comment group to the comments list - comments = &ast.CommentGroup{list} + comments = &ast.CommentGroup{List: list} p.comments = append(p.comments, comments) return @@ -334,7 +330,7 @@ func (p *parser) next() { } func (p *parser) error(pos token.Pos, msg string) { - p.Error(p.file.Position(pos), msg) + p.errors.Add(p.file.Position(pos), msg) } func (p *parser) errorExpected(pos token.Pos, msg string) { @@ -342,7 +338,7 @@ func (p *parser) errorExpected(pos token.Pos, msg string) { if pos == p.pos { // the error happened at the current position; // make the error message more specific - if p.tok == token.SEMICOLON && p.lit[0] == '\n' { + if p.tok == token.SEMICOLON && p.lit == "\n" { msg += ", found newline" } else { msg += ", found '" + p.tok.String() + "'" @@ -363,6 +359,17 @@ func (p *parser) expect(tok token.Token) token.Pos { return pos } +// expectClosing is like expect but provides a better error message +// for the common case of a missing comma before a newline. +// +func (p *parser) expectClosing(tok token.Token, construct string) token.Pos { + if p.tok != tok && p.tok == token.SEMICOLON && p.lit == "\n" { + p.error(p.pos, "missing ',' before newline in "+construct) + p.next() + } + return p.expect(tok) +} + func (p *parser) expectSemi() { if p.tok != token.RPAREN && p.tok != token.RBRACE { p.expect(token.SEMICOLON) @@ -387,7 +394,7 @@ func (p *parser) parseIdent() *ast.Ident { } else { p.expect(token.IDENT) // use expect() error handling } - return &ast.Ident{pos, name, nil} + return &ast.Ident{NamePos: pos, Name: name} } func (p *parser) parseIdentList() (list []*ast.Ident) { @@ -465,7 +472,7 @@ func (p *parser) parseType() ast.Expr { pos := p.pos p.errorExpected(pos, "type") p.next() // make progress - return &ast.BadExpr{pos, p.pos} + return &ast.BadExpr{From: pos, To: p.pos} } return typ @@ -485,7 +492,7 @@ func (p *parser) parseTypeName() ast.Expr { p.next() p.resolve(ident) sel := p.parseIdent() - return &ast.SelectorExpr{ident, sel} + return &ast.SelectorExpr{X: ident, Sel: sel} } return ident @@ -499,7 +506,7 @@ func (p *parser) parseArrayType(ellipsisOk bool) ast.Expr { lbrack := p.expect(token.LBRACK) var len ast.Expr if ellipsisOk && p.tok == token.ELLIPSIS { - len = &ast.Ellipsis{p.pos, nil} + len = &ast.Ellipsis{Ellipsis: p.pos} p.next() } else if p.tok != token.RBRACK { len = p.parseRhs() @@ -507,7 +514,7 @@ func (p *parser) parseArrayType(ellipsisOk bool) ast.Expr { p.expect(token.RBRACK) elt := p.parseType() - return &ast.ArrayType{lbrack, len, elt} + return &ast.ArrayType{Lbrack: lbrack, Len: len, Elt: elt} } func (p *parser) makeIdentList(list []ast.Expr) []*ast.Ident { @@ -517,7 +524,7 @@ func (p *parser) makeIdentList(list []ast.Expr) []*ast.Ident { if !isIdent { pos := x.Pos() p.errorExpected(pos, "identifier") - ident = &ast.Ident{pos, "_", nil} + ident = &ast.Ident{NamePos: pos, Name: "_"} } idents[i] = ident } @@ -537,7 +544,7 @@ func (p *parser) parseFieldDecl(scope *ast.Scope) *ast.Field { // optional tag var tag *ast.BasicLit if p.tok == token.STRING { - tag = &ast.BasicLit{p.pos, p.tok, p.lit} + tag = &ast.BasicLit{ValuePos: p.pos, Kind: p.tok, Value: p.lit} p.next() } @@ -553,13 +560,13 @@ func (p *parser) parseFieldDecl(scope *ast.Scope) *ast.Field { if n := len(list); n > 1 || !isTypeName(deref(typ)) { pos := typ.Pos() p.errorExpected(pos, "anonymous field") - typ = &ast.BadExpr{pos, list[n-1].End()} + typ = &ast.BadExpr{From: pos, To: list[n-1].End()} } } p.expectSemi() // call before accessing p.linecomment - field := &ast.Field{doc, idents, typ, tag, p.lineComment} + field := &ast.Field{Doc: doc, Names: idents, Type: typ, Tag: tag, Comment: p.lineComment} p.declare(field, nil, scope, ast.Var, idents...) return field @@ -582,7 +589,14 @@ func (p *parser) parseStructType() *ast.StructType { } rbrace := p.expect(token.RBRACE) - return &ast.StructType{pos, &ast.FieldList{lbrace, list, rbrace}, false} + return &ast.StructType{ + Struct: pos, + Fields: &ast.FieldList{ + Opening: lbrace, + List: list, + Closing: rbrace, + }, + } } func (p *parser) parsePointerType() *ast.StarExpr { @@ -593,7 +607,7 @@ func (p *parser) parsePointerType() *ast.StarExpr { star := p.expect(token.MUL) base := p.parseType() - return &ast.StarExpr{star, base} + return &ast.StarExpr{Star: star, X: base} } func (p *parser) tryVarType(isParam bool) ast.Expr { @@ -603,9 +617,9 @@ func (p *parser) tryVarType(isParam bool) ast.Expr { typ := p.tryIdentOrType(isParam) // don't use parseType so we can provide better error message if typ == nil { p.error(pos, "'...' parameter is missing type") - typ = &ast.BadExpr{pos, p.pos} + typ = &ast.BadExpr{From: pos, To: p.pos} } - return &ast.Ellipsis{pos, typ} + return &ast.Ellipsis{Ellipsis: pos, Elt: typ} } return p.tryIdentOrType(false) } @@ -616,7 +630,7 @@ func (p *parser) parseVarType(isParam bool) ast.Expr { pos := p.pos p.errorExpected(pos, "type") p.next() // make progress - typ = &ast.BadExpr{pos, p.pos} + typ = &ast.BadExpr{From: pos, To: p.pos} } return typ } @@ -657,7 +671,7 @@ func (p *parser) parseParameterList(scope *ast.Scope, ellipsisOk bool) (params [ if typ != nil { // IdentifierList Type idents := p.makeIdentList(list) - field := &ast.Field{nil, idents, typ, nil, nil} + field := &ast.Field{Names: idents, Type: typ} params = append(params, field) // Go spec: The scope of an identifier denoting a function // parameter or result variable is the function body. @@ -669,7 +683,7 @@ func (p *parser) parseParameterList(scope *ast.Scope, ellipsisOk bool) (params [ for p.tok != token.RPAREN && p.tok != token.EOF { idents := p.parseIdentList() typ := p.parseVarType(ellipsisOk) - field := &ast.Field{nil, idents, typ, nil, nil} + field := &ast.Field{Names: idents, Type: typ} params = append(params, field) // Go spec: The scope of an identifier denoting a function // parameter or result variable is the function body. @@ -704,7 +718,7 @@ func (p *parser) parseParameters(scope *ast.Scope, ellipsisOk bool) *ast.FieldLi } rparen := p.expect(token.RPAREN) - return &ast.FieldList{lparen, params, rparen} + return &ast.FieldList{Opening: lparen, List: params, Closing: rparen} } func (p *parser) parseResult(scope *ast.Scope) *ast.FieldList { @@ -746,7 +760,7 @@ func (p *parser) parseFuncType() (*ast.FuncType, *ast.Scope) { scope := ast.NewScope(p.topScope) // function scope params, results := p.parseSignature(scope) - return &ast.FuncType{pos, params, results}, scope + return &ast.FuncType{Func: pos, Params: params, Results: results}, scope } func (p *parser) parseMethodSpec(scope *ast.Scope) *ast.Field { @@ -763,7 +777,7 @@ func (p *parser) parseMethodSpec(scope *ast.Scope) *ast.Field { idents = []*ast.Ident{ident} scope := ast.NewScope(nil) // method scope params, results := p.parseSignature(scope) - typ = &ast.FuncType{token.NoPos, params, results} + typ = &ast.FuncType{Func: token.NoPos, Params: params, Results: results} } else { // embedded interface typ = x @@ -771,7 +785,7 @@ func (p *parser) parseMethodSpec(scope *ast.Scope) *ast.Field { } p.expectSemi() // call before accessing p.linecomment - spec := &ast.Field{doc, idents, typ, nil, p.lineComment} + spec := &ast.Field{Doc: doc, Names: idents, Type: typ, Comment: p.lineComment} p.declare(spec, nil, scope, ast.Fun, idents...) return spec @@ -791,7 +805,14 @@ func (p *parser) parseInterfaceType() *ast.InterfaceType { } rbrace := p.expect(token.RBRACE) - return &ast.InterfaceType{pos, &ast.FieldList{lbrace, list, rbrace}, false} + return &ast.InterfaceType{ + Interface: pos, + Methods: &ast.FieldList{ + Opening: lbrace, + List: list, + Closing: rbrace, + }, + } } func (p *parser) parseMapType() *ast.MapType { @@ -805,7 +826,7 @@ func (p *parser) parseMapType() *ast.MapType { p.expect(token.RBRACK) value := p.parseType() - return &ast.MapType{pos, key, value} + return &ast.MapType{Map: pos, Key: key, Value: value} } func (p *parser) parseChanType() *ast.ChanType { @@ -828,7 +849,7 @@ func (p *parser) parseChanType() *ast.ChanType { } value := p.parseType() - return &ast.ChanType{pos, dir, value} + return &ast.ChanType{Begin: pos, Dir: dir, Value: value} } // If the result is an identifier, it is not resolved. @@ -856,7 +877,7 @@ func (p *parser) tryIdentOrType(ellipsisOk bool) ast.Expr { p.next() typ := p.parseType() rparen := p.expect(token.RPAREN) - return &ast.ParenExpr{lparen, typ, rparen} + return &ast.ParenExpr{Lparen: lparen, X: typ, Rparen: rparen} } // no type found @@ -899,7 +920,7 @@ func (p *parser) parseBody(scope *ast.Scope) *ast.BlockStmt { p.closeScope() rbrace := p.expect(token.RBRACE) - return &ast.BlockStmt{lbrace, list, rbrace} + return &ast.BlockStmt{Lbrace: lbrace, List: list, Rbrace: rbrace} } func (p *parser) parseBlockStmt() *ast.BlockStmt { @@ -913,7 +934,7 @@ func (p *parser) parseBlockStmt() *ast.BlockStmt { p.closeScope() rbrace := p.expect(token.RBRACE) - return &ast.BlockStmt{lbrace, list, rbrace} + return &ast.BlockStmt{Lbrace: lbrace, List: list, Rbrace: rbrace} } // ---------------------------------------------------------------------------- @@ -934,7 +955,7 @@ func (p *parser) parseFuncTypeOrLit() ast.Expr { body := p.parseBody(scope) p.exprLev-- - return &ast.FuncLit{typ, body} + return &ast.FuncLit{Type: typ, Body: body} } // parseOperand may return an expression or a raw type (incl. array @@ -955,7 +976,7 @@ func (p *parser) parseOperand(lhs bool) ast.Expr { return x case token.INT, token.FLOAT, token.IMAG, token.CHAR, token.STRING: - x := &ast.BasicLit{p.pos, p.tok, p.lit} + x := &ast.BasicLit{ValuePos: p.pos, Kind: p.tok, Value: p.lit} p.next() return x @@ -966,7 +987,7 @@ func (p *parser) parseOperand(lhs bool) ast.Expr { x := p.parseRhsOrType() // types may be parenthesized: (some type) p.exprLev-- rparen := p.expect(token.RPAREN) - return &ast.ParenExpr{lparen, x, rparen} + return &ast.ParenExpr{Lparen: lparen, X: x, Rparen: rparen} case token.FUNC: return p.parseFuncTypeOrLit() @@ -983,7 +1004,7 @@ func (p *parser) parseOperand(lhs bool) ast.Expr { pos := p.pos p.errorExpected(pos, "operand") p.next() // make progress - return &ast.BadExpr{pos, p.pos} + return &ast.BadExpr{From: pos, To: p.pos} } func (p *parser) parseSelector(x ast.Expr) ast.Expr { @@ -993,7 +1014,7 @@ func (p *parser) parseSelector(x ast.Expr) ast.Expr { sel := p.parseIdent() - return &ast.SelectorExpr{x, sel} + return &ast.SelectorExpr{X: x, Sel: sel} } func (p *parser) parseTypeAssertion(x ast.Expr) ast.Expr { @@ -1011,7 +1032,7 @@ func (p *parser) parseTypeAssertion(x ast.Expr) ast.Expr { } p.expect(token.RPAREN) - return &ast.TypeAssertExpr{x, typ} + return &ast.TypeAssertExpr{X: x, Type: typ} } func (p *parser) parseIndexOrSlice(x ast.Expr) ast.Expr { @@ -1037,9 +1058,9 @@ func (p *parser) parseIndexOrSlice(x ast.Expr) ast.Expr { rbrack := p.expect(token.RBRACK) if isSlice { - return &ast.SliceExpr{x, lbrack, low, high, rbrack} + return &ast.SliceExpr{X: x, Lbrack: lbrack, Low: low, High: high, Rbrack: rbrack} } - return &ast.IndexExpr{x, lbrack, low, rbrack} + return &ast.IndexExpr{X: x, Lbrack: lbrack, Index: low, Rbrack: rbrack} } func (p *parser) parseCallOrConversion(fun ast.Expr) *ast.CallExpr { @@ -1063,9 +1084,9 @@ func (p *parser) parseCallOrConversion(fun ast.Expr) *ast.CallExpr { p.next() } p.exprLev-- - rparen := p.expect(token.RPAREN) + rparen := p.expectClosing(token.RPAREN, "argument list") - return &ast.CallExpr{fun, lparen, list, ellipsis, rparen} + return &ast.CallExpr{Fun: fun, Lparen: lparen, Args: list, Ellipsis: ellipsis, Rparen: rparen} } func (p *parser) parseElement(keyOk bool) ast.Expr { @@ -1082,7 +1103,7 @@ func (p *parser) parseElement(keyOk bool) ast.Expr { if p.tok == token.COLON { colon := p.pos p.next() - return &ast.KeyValueExpr{x, colon, p.parseElement(false)} + return &ast.KeyValueExpr{Key: x, Colon: colon, Value: p.parseElement(false)} } p.resolve(x) // not a map key } @@ -1118,8 +1139,8 @@ func (p *parser) parseLiteralValue(typ ast.Expr) ast.Expr { elts = p.parseElementList() } p.exprLev-- - rbrace := p.expect(token.RBRACE) - return &ast.CompositeLit{typ, lbrace, elts, rbrace} + rbrace := p.expectClosing(token.RBRACE, "composite literal") + return &ast.CompositeLit{Type: typ, Lbrace: lbrace, Elts: elts, Rbrace: rbrace} } // checkExpr checks that x is an expression (and not a type). @@ -1148,7 +1169,7 @@ func (p *parser) checkExpr(x ast.Expr) ast.Expr { default: // all other nodes are not proper expressions p.errorExpected(x.Pos(), "expression") - x = &ast.BadExpr{x.Pos(), x.End()} + x = &ast.BadExpr{From: x.Pos(), To: x.End()} } return x } @@ -1211,7 +1232,7 @@ func (p *parser) checkExprOrType(x ast.Expr) ast.Expr { case *ast.ArrayType: if len, isEllipsis := t.Len.(*ast.Ellipsis); isEllipsis { p.error(len.Pos(), "expected array length, found '...'") - x = &ast.BadExpr{x.Pos(), x.End()} + x = &ast.BadExpr{From: x.Pos(), To: x.End()} } } @@ -1243,7 +1264,7 @@ L: pos := p.pos p.next() // make progress p.errorExpected(pos, "selector or type assertion") - x = &ast.BadExpr{pos, p.pos} + x = &ast.BadExpr{From: pos, To: p.pos} } case token.LBRACK: if lhs { @@ -1284,7 +1305,7 @@ func (p *parser) parseUnaryExpr(lhs bool) ast.Expr { pos, op := p.pos, p.tok p.next() x := p.parseUnaryExpr(false) - return &ast.UnaryExpr{pos, op, p.checkExpr(x)} + return &ast.UnaryExpr{OpPos: pos, Op: op, X: p.checkExpr(x)} case token.ARROW: // channel type or receive expression @@ -1293,18 +1314,18 @@ func (p *parser) parseUnaryExpr(lhs bool) ast.Expr { if p.tok == token.CHAN { p.next() value := p.parseType() - return &ast.ChanType{pos, ast.RECV, value} + return &ast.ChanType{Begin: pos, Dir: ast.RECV, Value: value} } x := p.parseUnaryExpr(false) - return &ast.UnaryExpr{pos, token.ARROW, p.checkExpr(x)} + return &ast.UnaryExpr{OpPos: pos, Op: token.ARROW, X: p.checkExpr(x)} case token.MUL: // pointer type or unary "*" expression pos := p.pos p.next() x := p.parseUnaryExpr(false) - return &ast.StarExpr{pos, p.checkExprOrType(x)} + return &ast.StarExpr{Star: pos, X: p.checkExprOrType(x)} } return p.parsePrimaryExpr(lhs) @@ -1326,7 +1347,7 @@ func (p *parser) parseBinaryExpr(lhs bool, prec1 int) ast.Expr { lhs = false } y := p.parseBinaryExpr(false, prec+1) - x = &ast.BinaryExpr{p.checkExpr(x), pos, op, p.checkExpr(y)} + x = &ast.BinaryExpr{X: p.checkExpr(x), OpPos: pos, Op: op, Y: p.checkExpr(y)} } } @@ -1388,12 +1409,12 @@ func (p *parser) parseSimpleStmt(mode int) (ast.Stmt, bool) { if mode == rangeOk && p.tok == token.RANGE && (tok == token.DEFINE || tok == token.ASSIGN) { pos := p.pos p.next() - y = []ast.Expr{&ast.UnaryExpr{pos, token.RANGE, p.parseRhs()}} + y = []ast.Expr{&ast.UnaryExpr{OpPos: pos, Op: token.RANGE, X: p.parseRhs()}} isRange = true } else { y = p.parseRhsList() } - as := &ast.AssignStmt{x, pos, tok, y} + as := &ast.AssignStmt{Lhs: x, TokPos: pos, Tok: tok, Rhs: y} if tok == token.DEFINE { p.shortVarDecl(as, x) } @@ -1414,7 +1435,7 @@ func (p *parser) parseSimpleStmt(mode int) (ast.Stmt, bool) { // Go spec: The scope of a label is the body of the function // in which it is declared and excludes the body of any nested // function. - stmt := &ast.LabeledStmt{label, colon, p.parseStmt()} + stmt := &ast.LabeledStmt{Label: label, Colon: colon, Stmt: p.parseStmt()} p.declare(stmt, nil, p.labelScope, ast.Lbl, label) return stmt, false } @@ -1425,24 +1446,24 @@ func (p *parser) parseSimpleStmt(mode int) (ast.Stmt, bool) { // before the ':' that caused the problem. Thus, use the (latest) colon // position for error reporting. p.error(colon, "illegal label declaration") - return &ast.BadStmt{x[0].Pos(), colon + 1}, false + return &ast.BadStmt{From: x[0].Pos(), To: colon + 1}, false case token.ARROW: // send statement arrow := p.pos p.next() y := p.parseRhs() - return &ast.SendStmt{x[0], arrow, y}, false + return &ast.SendStmt{Chan: x[0], Arrow: arrow, Value: y}, false case token.INC, token.DEC: // increment or decrement - s := &ast.IncDecStmt{x[0], p.pos, p.tok} + s := &ast.IncDecStmt{X: x[0], TokPos: p.pos, Tok: p.tok} p.next() return s, false } // expression - return &ast.ExprStmt{x[0]}, false + return &ast.ExprStmt{X: x[0]}, false } func (p *parser) parseCallExpr() *ast.CallExpr { @@ -1463,10 +1484,10 @@ func (p *parser) parseGoStmt() ast.Stmt { call := p.parseCallExpr() p.expectSemi() if call == nil { - return &ast.BadStmt{pos, pos + 2} // len("go") + return &ast.BadStmt{From: pos, To: pos + 2} // len("go") } - return &ast.GoStmt{pos, call} + return &ast.GoStmt{Go: pos, Call: call} } func (p *parser) parseDeferStmt() ast.Stmt { @@ -1478,10 +1499,10 @@ func (p *parser) parseDeferStmt() ast.Stmt { call := p.parseCallExpr() p.expectSemi() if call == nil { - return &ast.BadStmt{pos, pos + 5} // len("defer") + return &ast.BadStmt{From: pos, To: pos + 5} // len("defer") } - return &ast.DeferStmt{pos, call} + return &ast.DeferStmt{Defer: pos, Call: call} } func (p *parser) parseReturnStmt() *ast.ReturnStmt { @@ -1497,7 +1518,7 @@ func (p *parser) parseReturnStmt() *ast.ReturnStmt { } p.expectSemi() - return &ast.ReturnStmt{pos, x} + return &ast.ReturnStmt{Return: pos, Results: x} } func (p *parser) parseBranchStmt(tok token.Token) *ast.BranchStmt { @@ -1515,7 +1536,7 @@ func (p *parser) parseBranchStmt(tok token.Token) *ast.BranchStmt { } p.expectSemi() - return &ast.BranchStmt{pos, tok, label} + return &ast.BranchStmt{TokPos: pos, Tok: tok, Label: label} } func (p *parser) makeExpr(s ast.Stmt) ast.Expr { @@ -1526,7 +1547,7 @@ func (p *parser) makeExpr(s ast.Stmt) ast.Expr { return p.checkExpr(es.X) } p.error(s.Pos(), "expected condition, found simple statement") - return &ast.BadExpr{s.Pos(), s.End()} + return &ast.BadExpr{From: s.Pos(), To: s.End()} } func (p *parser) parseIfStmt() *ast.IfStmt { @@ -1568,7 +1589,7 @@ func (p *parser) parseIfStmt() *ast.IfStmt { p.expectSemi() } - return &ast.IfStmt{pos, s, x, body, else_} + return &ast.IfStmt{If: pos, Init: s, Cond: x, Body: body, Else: else_} } func (p *parser) parseTypeList() (list []ast.Expr) { @@ -1608,7 +1629,7 @@ func (p *parser) parseCaseClause(typeSwitch bool) *ast.CaseClause { body := p.parseStmtList() p.closeScope() - return &ast.CaseClause{pos, list, colon, body} + return &ast.CaseClause{Case: pos, List: list, Colon: colon, Body: body} } func isTypeSwitchAssert(x ast.Expr) bool { @@ -1677,13 +1698,13 @@ func (p *parser) parseSwitchStmt() ast.Stmt { } rbrace := p.expect(token.RBRACE) p.expectSemi() - body := &ast.BlockStmt{lbrace, list, rbrace} + body := &ast.BlockStmt{Lbrace: lbrace, List: list, Rbrace: rbrace} if typeSwitch { - return &ast.TypeSwitchStmt{pos, s1, s2, body} + return &ast.TypeSwitchStmt{Switch: pos, Init: s1, Assign: s2, Body: body} } - return &ast.SwitchStmt{pos, s1, p.makeExpr(s2), body} + return &ast.SwitchStmt{Switch: pos, Init: s1, Tag: p.makeExpr(s2), Body: body} } func (p *parser) parseCommClause() *ast.CommClause { @@ -1706,7 +1727,7 @@ func (p *parser) parseCommClause() *ast.CommClause { arrow := p.pos p.next() rhs := p.parseRhs() - comm = &ast.SendStmt{lhs[0], arrow, rhs} + comm = &ast.SendStmt{Chan: lhs[0], Arrow: arrow, Value: rhs} } else { // RecvStmt if tok := p.tok; tok == token.ASSIGN || tok == token.DEFINE { @@ -1719,7 +1740,7 @@ func (p *parser) parseCommClause() *ast.CommClause { pos := p.pos p.next() rhs := p.parseRhs() - as := &ast.AssignStmt{lhs, pos, tok, []ast.Expr{rhs}} + as := &ast.AssignStmt{Lhs: lhs, TokPos: pos, Tok: tok, Rhs: []ast.Expr{rhs}} if tok == token.DEFINE { p.shortVarDecl(as, lhs) } @@ -1730,7 +1751,7 @@ func (p *parser) parseCommClause() *ast.CommClause { p.errorExpected(lhs[0].Pos(), "1 expression") // continue with first expression } - comm = &ast.ExprStmt{lhs[0]} + comm = &ast.ExprStmt{X: lhs[0]} } } } else { @@ -1741,7 +1762,7 @@ func (p *parser) parseCommClause() *ast.CommClause { body := p.parseStmtList() p.closeScope() - return &ast.CommClause{pos, comm, colon, body} + return &ast.CommClause{Case: pos, Comm: comm, Colon: colon, Body: body} } func (p *parser) parseSelectStmt() *ast.SelectStmt { @@ -1757,9 +1778,9 @@ func (p *parser) parseSelectStmt() *ast.SelectStmt { } rbrace := p.expect(token.RBRACE) p.expectSemi() - body := &ast.BlockStmt{lbrace, list, rbrace} + body := &ast.BlockStmt{Lbrace: lbrace, List: list, Rbrace: rbrace} - return &ast.SelectStmt{pos, body} + return &ast.SelectStmt{Select: pos, Body: body} } func (p *parser) parseForStmt() ast.Stmt { @@ -1808,16 +1829,30 @@ func (p *parser) parseForStmt() ast.Stmt { key = as.Lhs[0] default: p.errorExpected(as.Lhs[0].Pos(), "1 or 2 expressions") - return &ast.BadStmt{pos, body.End()} + return &ast.BadStmt{From: pos, To: body.End()} } // parseSimpleStmt returned a right-hand side that // is a single unary expression of the form "range x" x := as.Rhs[0].(*ast.UnaryExpr).X - return &ast.RangeStmt{pos, key, value, as.TokPos, as.Tok, x, body} + return &ast.RangeStmt{ + For: pos, + Key: key, + Value: value, + TokPos: as.TokPos, + Tok: as.Tok, + X: x, + Body: body, + } } // regular for statement - return &ast.ForStmt{pos, s1, p.makeExpr(s2), s3, body} + return &ast.ForStmt{ + For: pos, + Init: s1, + Cond: p.makeExpr(s2), + Post: s3, + Body: body, + } } func (p *parser) parseStmt() (s ast.Stmt) { @@ -1827,12 +1862,12 @@ func (p *parser) parseStmt() (s ast.Stmt) { switch p.tok { case token.CONST, token.TYPE, token.VAR: - s = &ast.DeclStmt{p.parseDecl()} + s = &ast.DeclStmt{Decl: p.parseDecl()} case - // tokens that may start a top-level expression - token.IDENT, token.INT, token.FLOAT, token.CHAR, token.STRING, token.FUNC, token.LPAREN, // operand - token.LBRACK, token.STRUCT, // composite type - token.MUL, token.AND, token.ARROW, token.ADD, token.SUB, token.XOR: // unary operators + // tokens that may start an expression + token.IDENT, token.INT, token.FLOAT, token.IMAG, token.CHAR, token.STRING, token.FUNC, token.LPAREN, // operands + token.LBRACK, token.STRUCT, // composite types + token.ADD, token.SUB, token.MUL, token.AND, token.XOR, token.ARROW, token.NOT: // unary operators s, _ = p.parseSimpleStmt(labelOk) // because of the required look-ahead, labeled statements are // parsed by parseSimpleStmt - don't expect a semicolon after @@ -1860,17 +1895,17 @@ func (p *parser) parseStmt() (s ast.Stmt) { case token.FOR: s = p.parseForStmt() case token.SEMICOLON: - s = &ast.EmptyStmt{p.pos} + s = &ast.EmptyStmt{Semicolon: p.pos} p.next() case token.RBRACE: // a semicolon may be omitted before a closing "}" - s = &ast.EmptyStmt{p.pos} + s = &ast.EmptyStmt{Semicolon: p.pos} default: // no statement found pos := p.pos p.errorExpected(pos, "statement") p.next() // make progress - s = &ast.BadStmt{pos, p.pos} + s = &ast.BadStmt{From: pos, To: p.pos} } return @@ -1881,6 +1916,17 @@ func (p *parser) parseStmt() (s ast.Stmt) { type parseSpecFunction func(p *parser, doc *ast.CommentGroup, iota int) ast.Spec +func isValidImport(lit string) bool { + const illegalChars = `!"#$%&'()*,:;<=>?[\]^{|}` + "`\uFFFD" + s, _ := strconv.Unquote(lit) // go/scanner returns a legal string literal + for _, r := range s { + if !unicode.IsGraphic(r) || unicode.IsSpace(r) || strings.ContainsRune(illegalChars, r) { + return false + } + } + return s != "" +} + func parseImportSpec(p *parser, doc *ast.CommentGroup, _ int) ast.Spec { if p.trace { defer un(trace(p, "ImportSpec")) @@ -1889,7 +1935,7 @@ func parseImportSpec(p *parser, doc *ast.CommentGroup, _ int) ast.Spec { var ident *ast.Ident switch p.tok { case token.PERIOD: - ident = &ast.Ident{p.pos, ".", nil} + ident = &ast.Ident{NamePos: p.pos, Name: "."} p.next() case token.IDENT: ident = p.parseIdent() @@ -1897,7 +1943,10 @@ func parseImportSpec(p *parser, doc *ast.CommentGroup, _ int) ast.Spec { var path *ast.BasicLit if p.tok == token.STRING { - path = &ast.BasicLit{p.pos, p.tok, p.lit} + if !isValidImport(p.lit) { + p.error(p.pos, "invalid import path: "+p.lit) + } + path = &ast.BasicLit{ValuePos: p.pos, Kind: p.tok, Value: p.lit} p.next() } else { p.expect(token.STRING) // use expect() error handling @@ -1905,7 +1954,12 @@ func parseImportSpec(p *parser, doc *ast.CommentGroup, _ int) ast.Spec { p.expectSemi() // call before accessing p.linecomment // collect imports - spec := &ast.ImportSpec{doc, ident, path, p.lineComment, token.NoPos} + spec := &ast.ImportSpec{ + Doc: doc, + Name: ident, + Path: path, + Comment: p.lineComment, + } p.imports = append(p.imports, spec) return spec @@ -1929,7 +1983,13 @@ func parseConstSpec(p *parser, doc *ast.CommentGroup, iota int) ast.Spec { // a function begins at the end of the ConstSpec or VarSpec and ends at // the end of the innermost containing block. // (Global identifiers are resolved in a separate phase after parsing.) - spec := &ast.ValueSpec{doc, idents, typ, values, p.lineComment} + spec := &ast.ValueSpec{ + Doc: doc, + Names: idents, + Type: typ, + Values: values, + Comment: p.lineComment, + } p.declare(spec, iota, p.topScope, ast.Con, idents...) return spec @@ -1946,7 +2006,7 @@ func parseTypeSpec(p *parser, doc *ast.CommentGroup, _ int) ast.Spec { // at the identifier in the TypeSpec and ends at the end of the innermost // containing block. // (Global identifiers are resolved in a separate phase after parsing.) - spec := &ast.TypeSpec{doc, ident, nil, nil} + spec := &ast.TypeSpec{Doc: doc, Name: ident} p.declare(spec, nil, p.topScope, ast.Typ, ident) spec.Type = p.parseType() @@ -1974,7 +2034,13 @@ func parseVarSpec(p *parser, doc *ast.CommentGroup, _ int) ast.Spec { // a function begins at the end of the ConstSpec or VarSpec and ends at // the end of the innermost containing block. // (Global identifiers are resolved in a separate phase after parsing.) - spec := &ast.ValueSpec{doc, idents, typ, values, p.lineComment} + spec := &ast.ValueSpec{ + Doc: doc, + Names: idents, + Type: typ, + Values: values, + Comment: p.lineComment, + } p.declare(spec, nil, p.topScope, ast.Var, idents...) return spec @@ -2001,7 +2067,14 @@ func (p *parser) parseGenDecl(keyword token.Token, f parseSpecFunction) *ast.Gen list = append(list, f(p, nil, 0)) } - return &ast.GenDecl{doc, pos, keyword, lparen, list, rparen} + return &ast.GenDecl{ + Doc: doc, + TokPos: pos, + Tok: keyword, + Lparen: lparen, + Specs: list, + Rparen: rparen, + } } func (p *parser) parseReceiver(scope *ast.Scope) *ast.FieldList { @@ -2014,7 +2087,7 @@ func (p *parser) parseReceiver(scope *ast.Scope) *ast.FieldList { // must have exactly one receiver if par.NumFields() != 1 { p.errorExpected(par.Opening, "exactly one receiver") - par.List = []*ast.Field{{Type: &ast.BadExpr{par.Opening, par.Closing + 1}}} + par.List = []*ast.Field{{Type: &ast.BadExpr{From: par.Opening, To: par.Closing + 1}}} return par } @@ -2023,7 +2096,7 @@ func (p *parser) parseReceiver(scope *ast.Scope) *ast.FieldList { base := deref(recv.Type) if _, isIdent := base.(*ast.Ident); !isIdent { p.errorExpected(base.Pos(), "(unqualified) identifier") - par.List = []*ast.Field{{Type: &ast.BadExpr{recv.Pos(), recv.End()}}} + par.List = []*ast.Field{{Type: &ast.BadExpr{From: recv.Pos(), To: recv.End()}}} } return par @@ -2053,7 +2126,17 @@ func (p *parser) parseFuncDecl() *ast.FuncDecl { } p.expectSemi() - decl := &ast.FuncDecl{doc, recv, ident, &ast.FuncType{pos, params, results}, body} + decl := &ast.FuncDecl{ + Doc: doc, + Recv: recv, + Name: ident, + Type: &ast.FuncType{ + Func: pos, + Params: params, + Results: results, + }, + Body: body, + } if recv == nil { // Go spec: The scope of an identifier denoting a constant, type, // variable, or function (but not method) declared at top level @@ -2092,7 +2175,7 @@ func (p *parser) parseDecl() ast.Decl { pos := p.pos p.errorExpected(pos, "declaration") p.next() // make progress - decl := &ast.BadDecl{pos, p.pos} + decl := &ast.BadDecl{From: pos, To: p.pos} return decl } @@ -2123,7 +2206,7 @@ func (p *parser) parseFile() *ast.File { // Don't bother parsing the rest if we had errors already. // Likely not a Go source file at all. - if p.ErrorCount() == 0 && p.mode&PackageClauseOnly == 0 { + if p.errors.Len() == 0 && p.mode&PackageClauseOnly == 0 { // import decls for p.tok == token.IMPORT { decls = append(decls, p.parseGenDecl(token.IMPORT, parseImportSpec)) @@ -2151,5 +2234,14 @@ func (p *parser) parseFile() *ast.File { } } - return &ast.File{doc, pos, ident, decls, p.pkgScope, p.imports, p.unresolved[0:i], p.comments} + return &ast.File{ + Doc: doc, + Package: pos, + Name: ident, + Decls: decls, + Scope: p.pkgScope, + Imports: p.imports, + Unresolved: p.unresolved[0:i], + Comments: p.comments, + } } diff --git a/libgo/go/go/parser/parser_test.go b/libgo/go/go/parser/parser_test.go index a3ee8525de2..93ca3d6aa39 100644 --- a/libgo/go/go/parser/parser_test.go +++ b/libgo/go/go/parser/parser_test.go @@ -5,6 +5,7 @@ package parser import ( + "fmt" "go/ast" "go/token" "os" @@ -204,3 +205,48 @@ func TestVarScope(t *testing.T) { } } } + +var imports = map[string]bool{ + `"a"`: true, + "`a`": true, + `"a/b"`: true, + `"a.b"`: true, + `"m\x61th"`: true, + `"greek/αβ"`: true, + `""`: false, + + // Each of these pairs tests both `` vs "" strings + // and also use of invalid characters spelled out as + // escape sequences and written directly. + // For example `"\x00"` tests import "\x00" + // while "`\x00`" tests import `<actual-NUL-byte>`. + `"\x00"`: false, + "`\x00`": false, + `"\x7f"`: false, + "`\x7f`": false, + `"a!"`: false, + "`a!`": false, + `"a b"`: false, + "`a b`": false, + `"a\\b"`: false, + "`a\\b`": false, + "\"`a`\"": false, + "`\"a\"`": false, + `"\x80\x80"`: false, + "`\x80\x80`": false, + `"\xFFFD"`: false, + "`\xFFFD`": false, +} + +func TestImports(t *testing.T) { + for path, isValid := range imports { + src := fmt.Sprintf("package p; import %s", path) + _, err := ParseFile(fset, "", src, 0) + switch { + case err != nil && isValid: + t.Errorf("ParseFile(%s): got %v; expected no error", src, err) + case err == nil && !isValid: + t.Errorf("ParseFile(%s): got no error; expected one", src) + } + } +} diff --git a/libgo/go/go/printer/nodes.go b/libgo/go/go/printer/nodes.go index 25935fb42bb..05b4ef59a2d 100644 --- a/libgo/go/go/printer/nodes.go +++ b/libgo/go/go/printer/nodes.go @@ -12,6 +12,7 @@ import ( "bytes" "go/ast" "go/token" + "unicode/utf8" ) // Other formatting issues: @@ -82,47 +83,37 @@ func (p *printer) setComment(g *ast.CommentGroup) { type exprListMode uint const ( - blankStart exprListMode = 1 << iota // print a blank before a non-empty list - blankEnd // print a blank after a non-empty list - commaSep // elements are separated by commas - commaTerm // list is optionally terminated by a comma - noIndent // no extra indentation in multi-line lists - periodSep // elements are separated by periods + commaTerm exprListMode = 1 << iota // list is optionally terminated by a comma + noIndent // no extra indentation in multi-line lists ) -// Sets multiLine to true if the identifier list spans multiple lines. // If indent is set, a multi-line identifier list is indented after the // first linebreak encountered. -func (p *printer) identList(list []*ast.Ident, indent bool, multiLine *bool) { +func (p *printer) identList(list []*ast.Ident, indent bool) { // convert into an expression list so we can re-use exprList formatting xlist := make([]ast.Expr, len(list)) for i, x := range list { xlist[i] = x } - mode := commaSep + var mode exprListMode if !indent { - mode |= noIndent + mode = noIndent } - p.exprList(token.NoPos, xlist, 1, mode, multiLine, token.NoPos) + p.exprList(token.NoPos, xlist, 1, mode, token.NoPos) } // Print a list of expressions. If the list spans multiple // source lines, the original line breaks are respected between -// expressions. Sets multiLine to true if the list spans multiple -// lines. +// expressions. // // TODO(gri) Consider rewriting this to be independent of []ast.Expr // so that we can use the algorithm for any kind of list // (e.g., pass list via a channel over which to range). -func (p *printer) exprList(prev0 token.Pos, list []ast.Expr, depth int, mode exprListMode, multiLine *bool, next0 token.Pos) { +func (p *printer) exprList(prev0 token.Pos, list []ast.Expr, depth int, mode exprListMode, next0 token.Pos) { if len(list) == 0 { return } - if mode&blankStart != 0 { - p.print(blank) - } - prev := p.posFor(prev0) next := p.posFor(next0) line := p.lineFor(list[0].Pos()) @@ -132,15 +123,11 @@ func (p *printer) exprList(prev0 token.Pos, list []ast.Expr, depth int, mode exp // all list entries on a single line for i, x := range list { if i > 0 { - if mode&commaSep != 0 { - p.print(token.COMMA) - } - p.print(blank) + // use position of expression following the comma as + // comma position for correct comment placement + p.print(x.Pos(), token.COMMA, blank) } - p.expr0(x, depth, multiLine) - } - if mode&blankEnd != 0 { - p.print(blank) + p.expr0(x, depth) } return } @@ -160,7 +147,6 @@ func (p *printer) exprList(prev0 token.Pos, list []ast.Expr, depth int, mode exp prevBreak := -1 // index of last expression that was followed by a linebreak if prev.IsValid() && prev.Line < line && p.linebreak(line, 0, ws, true) { ws = ignore - *multiLine = true prevBreak = 0 } @@ -213,20 +199,21 @@ func (p *printer) exprList(prev0 token.Pos, list []ast.Expr, depth int, mode exp } if i > 0 { - switch { - case mode&commaSep != 0: - p.print(token.COMMA) - case mode&periodSep != 0: - p.print(token.PERIOD) + needsLinebreak := prevLine < line && prevLine > 0 && line > 0 + // use position of expression following the comma as + // comma position for correct comment placement, but + // only if the expression is on the same line + if !needsLinebreak { + p.print(x.Pos()) } - needsBlank := mode&periodSep == 0 // period-separated list elements don't need a blank - if prevLine < line && prevLine > 0 && line > 0 { + p.print(token.COMMA) + needsBlank := true + if needsLinebreak { // lines are broken using newlines so comments remain aligned // unless forceFF is set or there are multiple expressions on // the same line in which case formfeed is used if p.linebreak(line, 0, ws, useFF || prevBreak+1 < i) { ws = ignore - *multiLine = true prevBreak = i needsBlank = false // we got a line break instead } @@ -240,11 +227,11 @@ func (p *printer) exprList(prev0 token.Pos, list []ast.Expr, depth int, mode exp // we have a key:value expression that fits onto one line and // is in a list with more then one entry: use a column for the // key such that consecutive entries can align if possible - p.expr(pair.Key, multiLine) + p.expr(pair.Key) p.print(pair.Colon, token.COLON, vtab) - p.expr(pair.Value, multiLine) + p.expr(pair.Value) } else { - p.expr0(x, depth, multiLine) + p.expr0(x, depth) } } @@ -259,18 +246,13 @@ func (p *printer) exprList(prev0 token.Pos, list []ast.Expr, depth int, mode exp return } - if mode&blankEnd != 0 { - p.print(blank) - } - if ws == ignore && mode&noIndent == 0 { // unindent if we indented p.print(unindent) } } -// Sets multiLine to true if the the parameter list spans multiple lines. -func (p *printer) parameters(fields *ast.FieldList, multiLine *bool) { +func (p *printer) parameters(fields *ast.FieldList) { p.print(fields.Opening, token.LPAREN) if len(fields.List) > 0 { prevLine := p.lineFor(fields.Opening) @@ -287,14 +269,20 @@ func (p *printer) parameters(fields *ast.FieldList, multiLine *bool) { parLineBeg = parLineEnd } // separating "," if needed + needsLinebreak := 0 < prevLine && prevLine < parLineBeg if i > 0 { + // use position of parameter following the comma as + // comma position for correct comma placement, but + // only if the next parameter is on the same line + if !needsLinebreak { + p.print(par.Pos()) + } p.print(token.COMMA) } // separator if needed (linebreak or blank) - if 0 < prevLine && prevLine < parLineBeg && p.linebreak(parLineBeg, 0, ws, true) { + if needsLinebreak && p.linebreak(parLineBeg, 0, ws, true) { // break line if the opening "(" or previous parameter ended on a different line ws = ignore - *multiLine = true } else if i > 0 { p.print(blank) } @@ -306,17 +294,17 @@ func (p *printer) parameters(fields *ast.FieldList, multiLine *bool) { // again at the end (and still ws == indent). Thus, a subsequent indent // by a linebreak call after a type, or in the next multi-line identList // will do the right thing. - p.identList(par.Names, ws == indent, multiLine) + p.identList(par.Names, ws == indent) p.print(blank) } // parameter type - p.expr(par.Type, multiLine) + p.expr(par.Type) prevLine = parLineEnd } // if the closing ")" is on a separate line from the last parameter, // print an additional "," and line break if closing := p.lineFor(fields.Closing); 0 < prevLine && prevLine < closing { - p.print(",") + p.print(token.COMMA) p.linebreak(closing, 0, ignore, true) } // unindent if we indented @@ -327,27 +315,26 @@ func (p *printer) parameters(fields *ast.FieldList, multiLine *bool) { p.print(fields.Closing, token.RPAREN) } -// Sets multiLine to true if the signature spans multiple lines. -func (p *printer) signature(params, result *ast.FieldList, multiLine *bool) { - p.parameters(params, multiLine) +func (p *printer) signature(params, result *ast.FieldList) { + p.parameters(params) n := result.NumFields() if n > 0 { p.print(blank) if n == 1 && result.List[0].Names == nil { // single anonymous result; no ()'s - p.expr(result.List[0].Type, multiLine) + p.expr(result.List[0].Type) return } - p.parameters(result, multiLine) + p.parameters(result) } } func identListSize(list []*ast.Ident, maxSize int) (size int) { for i, x := range list { if i > 0 { - size += 2 // ", " + size += len(", ") } - size += len(x.Name) + size += utf8.RuneCountInString(x.Name) if size >= maxSize { break } @@ -374,7 +361,11 @@ func (p *printer) isOneLineFieldList(list []*ast.Field) bool { } func (p *printer) setLineComment(text string) { - p.setComment(&ast.CommentGroup{[]*ast.Comment{{token.NoPos, text}}}) + p.setComment(&ast.CommentGroup{List: []*ast.Comment{{Slash: token.NoPos, Text: text}}}) +} + +func (p *printer) isMultiLine(n ast.Node) bool { + return p.lineFor(n.End())-p.lineFor(n.Pos()) > 1 } func (p *printer) fieldList(fields *ast.FieldList, isStruct, isIncomplete bool) { @@ -397,14 +388,15 @@ func (p *printer) fieldList(fields *ast.FieldList, isStruct, isIncomplete bool) f := list[0] for i, x := range f.Names { if i > 0 { + // no comments so no need for comma position p.print(token.COMMA, blank) } - p.expr(x, ignoreMultiLine) + p.expr(x) } if len(f.Names) > 0 { p.print(blank) } - p.expr(f.Type, ignoreMultiLine) + p.expr(f.Type) p.print(blank, rbrace, token.RBRACE) return } @@ -422,23 +414,22 @@ func (p *printer) fieldList(fields *ast.FieldList, isStruct, isIncomplete bool) if len(list) == 1 { sep = blank } - var ml bool + newSection := false for i, f := range list { if i > 0 { - p.linebreak(p.lineFor(f.Pos()), 1, ignore, ml) + p.linebreak(p.lineFor(f.Pos()), 1, ignore, newSection) } - ml = false extraTabs := 0 p.setComment(f.Doc) if len(f.Names) > 0 { // named fields - p.identList(f.Names, false, &ml) + p.identList(f.Names, false) p.print(sep) - p.expr(f.Type, &ml) + p.expr(f.Type) extraTabs = 1 } else { // anonymous field - p.expr(f.Type, &ml) + p.expr(f.Type) extraTabs = 2 } if f.Tag != nil { @@ -446,7 +437,7 @@ func (p *printer) fieldList(fields *ast.FieldList, isStruct, isIncomplete bool) p.print(sep) } p.print(sep) - p.expr(f.Tag, &ml) + p.expr(f.Tag) extraTabs = 0 } if f.Comment != nil { @@ -455,6 +446,7 @@ func (p *printer) fieldList(fields *ast.FieldList, isStruct, isIncomplete bool) } p.setComment(f.Comment) } + newSection = p.isMultiLine(f) } if isIncomplete { if len(list) > 0 { @@ -466,22 +458,22 @@ func (p *printer) fieldList(fields *ast.FieldList, isStruct, isIncomplete bool) } else { // interface - var ml bool + newSection := false for i, f := range list { if i > 0 { - p.linebreak(p.lineFor(f.Pos()), 1, ignore, ml) + p.linebreak(p.lineFor(f.Pos()), 1, ignore, newSection) } - ml = false p.setComment(f.Doc) if ftyp, isFtyp := f.Type.(*ast.FuncType); isFtyp { // method - p.expr(f.Names[0], &ml) - p.signature(ftyp.Params, ftyp.Results, &ml) + p.expr(f.Names[0]) + p.signature(ftyp.Params, ftyp.Results) } else { // embedded interface - p.expr(f.Type, &ml) + p.expr(f.Type) } p.setComment(f.Comment) + newSection = p.isMultiLine(f) } if isIncomplete { if len(list) > 0 { @@ -622,15 +614,14 @@ func reduceDepth(depth int) int { // cutoff is 6 (always use spaces) in Normal mode // and 4 (never use spaces) in Compact mode. // -// Sets multiLine to true if the binary expression spans multiple lines. -func (p *printer) binaryExpr(x *ast.BinaryExpr, prec1, cutoff, depth int, multiLine *bool) { +func (p *printer) binaryExpr(x *ast.BinaryExpr, prec1, cutoff, depth int) { prec := x.Op.Precedence() if prec < prec1 { // parenthesis needed // Note: The parser inserts an ast.ParenExpr node; thus this case // can only occur if the AST is created in a different way. p.print(token.LPAREN) - p.expr0(x, reduceDepth(depth), multiLine) // parentheses undo one level of depth + p.expr0(x, reduceDepth(depth)) // parentheses undo one level of depth p.print(token.RPAREN) return } @@ -638,7 +629,7 @@ func (p *printer) binaryExpr(x *ast.BinaryExpr, prec1, cutoff, depth int, multiL printBlank := prec < cutoff ws := indent - p.expr1(x.X, prec, depth+diffPrec(x.X, prec), multiLine) + p.expr1(x.X, prec, depth+diffPrec(x.X, prec)) if printBlank { p.print(blank) } @@ -650,14 +641,13 @@ func (p *printer) binaryExpr(x *ast.BinaryExpr, prec1, cutoff, depth int, multiL // in the source if p.linebreak(yline, 1, ws, true) { ws = ignore - *multiLine = true printBlank = false // no blank after line break } } if printBlank { p.print(blank) } - p.expr1(x.Y, prec+1, depth+1, multiLine) + p.expr1(x.Y, prec+1, depth+1) if ws == ignore { p.print(unindent) } @@ -668,65 +658,7 @@ func isBinary(expr ast.Expr) bool { return ok } -// If the expression contains one or more selector expressions, splits it into -// two expressions at the rightmost period. Writes entire expr to suffix when -// selector isn't found. Rewrites AST nodes for calls, index expressions and -// type assertions, all of which may be found in selector chains, to make them -// parts of the chain. -func splitSelector(expr ast.Expr) (body, suffix ast.Expr) { - switch x := expr.(type) { - case *ast.SelectorExpr: - body, suffix = x.X, x.Sel - return - case *ast.CallExpr: - body, suffix = splitSelector(x.Fun) - if body != nil { - suffix = &ast.CallExpr{suffix, x.Lparen, x.Args, x.Ellipsis, x.Rparen} - return - } - case *ast.IndexExpr: - body, suffix = splitSelector(x.X) - if body != nil { - suffix = &ast.IndexExpr{suffix, x.Lbrack, x.Index, x.Rbrack} - return - } - case *ast.SliceExpr: - body, suffix = splitSelector(x.X) - if body != nil { - suffix = &ast.SliceExpr{suffix, x.Lbrack, x.Low, x.High, x.Rbrack} - return - } - case *ast.TypeAssertExpr: - body, suffix = splitSelector(x.X) - if body != nil { - suffix = &ast.TypeAssertExpr{suffix, x.Type} - return - } - } - suffix = expr - return -} - -// Convert an expression into an expression list split at the periods of -// selector expressions. -func selectorExprList(expr ast.Expr) (list []ast.Expr) { - // split expression - for expr != nil { - var suffix ast.Expr - expr, suffix = splitSelector(expr) - list = append(list, suffix) - } - - // reverse list - for i, j := 0, len(list)-1; i < j; i, j = i+1, j-1 { - list[i], list[j] = list[j], list[i] - } - - return -} - -// Sets multiLine to true if the expression spans multiple lines. -func (p *printer) expr1(expr ast.Expr, prec1, depth int, multiLine *bool) { +func (p *printer) expr1(expr ast.Expr, prec1, depth int) { p.print(expr.Pos()) switch x := expr.(type) { @@ -741,12 +673,12 @@ func (p *printer) expr1(expr ast.Expr, prec1, depth int, multiLine *bool) { p.internalError("depth < 1:", depth) depth = 1 } - p.binaryExpr(x, prec1, cutoff(x, depth), depth, multiLine) + p.binaryExpr(x, prec1, cutoff(x, depth), depth) case *ast.KeyValueExpr: - p.expr(x.Key, multiLine) + p.expr(x.Key) p.print(x.Colon, token.COLON, blank) - p.expr(x.Value, multiLine) + p.expr(x.Value) case *ast.StarExpr: const prec = token.UnaryPrec @@ -754,12 +686,12 @@ func (p *printer) expr1(expr ast.Expr, prec1, depth int, multiLine *bool) { // parenthesis needed p.print(token.LPAREN) p.print(token.MUL) - p.expr(x.X, multiLine) + p.expr(x.X) p.print(token.RPAREN) } else { // no parenthesis needed p.print(token.MUL) - p.expr(x.X, multiLine) + p.expr(x.X) } case *ast.UnaryExpr: @@ -767,7 +699,7 @@ func (p *printer) expr1(expr ast.Expr, prec1, depth int, multiLine *bool) { if prec < prec1 { // parenthesis needed p.print(token.LPAREN) - p.expr(x, multiLine) + p.expr(x) p.print(token.RPAREN) } else { // no parenthesis needed @@ -776,36 +708,41 @@ func (p *printer) expr1(expr ast.Expr, prec1, depth int, multiLine *bool) { // TODO(gri) Remove this code if it cannot be reached. p.print(blank) } - p.expr1(x.X, prec, depth, multiLine) + p.expr1(x.X, prec, depth) } case *ast.BasicLit: p.print(x) case *ast.FuncLit: - p.expr(x.Type, multiLine) - p.funcBody(x.Body, p.distance(x.Type.Pos(), p.pos), true, multiLine) + p.expr(x.Type) + p.funcBody(x.Body, p.distance(x.Type.Pos(), p.pos), true) case *ast.ParenExpr: if _, hasParens := x.X.(*ast.ParenExpr); hasParens { // don't print parentheses around an already parenthesized expression // TODO(gri) consider making this more general and incorporate precedence levels - p.expr0(x.X, reduceDepth(depth), multiLine) // parentheses undo one level of depth + p.expr0(x.X, reduceDepth(depth)) // parentheses undo one level of depth } else { p.print(token.LPAREN) - p.expr0(x.X, reduceDepth(depth), multiLine) // parentheses undo one level of depth + p.expr0(x.X, reduceDepth(depth)) // parentheses undo one level of depth p.print(x.Rparen, token.RPAREN) } case *ast.SelectorExpr: - parts := selectorExprList(expr) - p.exprList(token.NoPos, parts, depth, periodSep, multiLine, token.NoPos) + p.expr1(x.X, token.HighestPrec, depth) + p.print(token.PERIOD) + if line := p.lineFor(x.Sel.Pos()); p.pos.IsValid() && p.pos.Line < line { + p.print(indent, newline, x.Sel.Pos(), x.Sel, unindent) + } else { + p.print(x.Sel.Pos(), x.Sel) + } case *ast.TypeAssertExpr: - p.expr1(x.X, token.HighestPrec, depth, multiLine) + p.expr1(x.X, token.HighestPrec, depth) p.print(token.PERIOD, token.LPAREN) if x.Type != nil { - p.expr(x.Type, multiLine) + p.expr(x.Type) } else { p.print(token.TYPE) } @@ -813,17 +750,17 @@ func (p *printer) expr1(expr ast.Expr, prec1, depth int, multiLine *bool) { case *ast.IndexExpr: // TODO(gri): should treat[] like parentheses and undo one level of depth - p.expr1(x.X, token.HighestPrec, 1, multiLine) + p.expr1(x.X, token.HighestPrec, 1) p.print(x.Lbrack, token.LBRACK) - p.expr0(x.Index, depth+1, multiLine) + p.expr0(x.Index, depth+1) p.print(x.Rbrack, token.RBRACK) case *ast.SliceExpr: // TODO(gri): should treat[] like parentheses and undo one level of depth - p.expr1(x.X, token.HighestPrec, 1, multiLine) + p.expr1(x.X, token.HighestPrec, 1) p.print(x.Lbrack, token.LBRACK) if x.Low != nil { - p.expr0(x.Low, depth+1, multiLine) + p.expr0(x.Low, depth+1) } // blanks around ":" if both sides exist and either side is a binary expression if depth <= 1 && x.Low != nil && x.High != nil && (isBinary(x.Low) || isBinary(x.High)) { @@ -832,7 +769,7 @@ func (p *printer) expr1(expr ast.Expr, prec1, depth int, multiLine *bool) { p.print(token.COLON) } if x.High != nil { - p.expr0(x.High, depth+1, multiLine) + p.expr0(x.High, depth+1) } p.print(x.Rbrack, token.RBRACK) @@ -840,21 +777,26 @@ func (p *printer) expr1(expr ast.Expr, prec1, depth int, multiLine *bool) { if len(x.Args) > 1 { depth++ } - p.expr1(x.Fun, token.HighestPrec, depth, multiLine) + p.expr1(x.Fun, token.HighestPrec, depth) p.print(x.Lparen, token.LPAREN) - p.exprList(x.Lparen, x.Args, depth, commaSep|commaTerm, multiLine, x.Rparen) if x.Ellipsis.IsValid() { + p.exprList(x.Lparen, x.Args, depth, 0, x.Ellipsis) p.print(x.Ellipsis, token.ELLIPSIS) + if x.Rparen.IsValid() && p.lineFor(x.Ellipsis) < p.lineFor(x.Rparen) { + p.print(token.COMMA, formfeed) + } + } else { + p.exprList(x.Lparen, x.Args, depth, commaTerm, x.Rparen) } p.print(x.Rparen, token.RPAREN) case *ast.CompositeLit: // composite literal elements that are composite literals themselves may have the type omitted if x.Type != nil { - p.expr1(x.Type, token.HighestPrec, depth, multiLine) + p.expr1(x.Type, token.HighestPrec, depth) } p.print(x.Lbrace, token.LBRACE) - p.exprList(x.Lbrace, x.Elts, 1, commaSep|commaTerm, multiLine, x.Rbrace) + p.exprList(x.Lbrace, x.Elts, 1, commaTerm, x.Rbrace) // do not insert extra line breaks because of comments before // the closing '}' as it might break the code if there is no // trailing ',' @@ -863,16 +805,16 @@ func (p *printer) expr1(expr ast.Expr, prec1, depth int, multiLine *bool) { case *ast.Ellipsis: p.print(token.ELLIPSIS) if x.Elt != nil { - p.expr(x.Elt, multiLine) + p.expr(x.Elt) } case *ast.ArrayType: p.print(token.LBRACK) if x.Len != nil { - p.expr(x.Len, multiLine) + p.expr(x.Len) } p.print(token.RBRACK) - p.expr(x.Elt, multiLine) + p.expr(x.Elt) case *ast.StructType: p.print(token.STRUCT) @@ -880,7 +822,7 @@ func (p *printer) expr1(expr ast.Expr, prec1, depth int, multiLine *bool) { case *ast.FuncType: p.print(token.FUNC) - p.signature(x.Params, x.Results, multiLine) + p.signature(x.Params, x.Results) case *ast.InterfaceType: p.print(token.INTERFACE) @@ -888,9 +830,9 @@ func (p *printer) expr1(expr ast.Expr, prec1, depth int, multiLine *bool) { case *ast.MapType: p.print(token.MAP, token.LBRACK) - p.expr(x.Key, multiLine) + p.expr(x.Key) p.print(token.RBRACK) - p.expr(x.Value, multiLine) + p.expr(x.Value) case *ast.ChanType: switch x.Dir { @@ -902,7 +844,7 @@ func (p *printer) expr1(expr ast.Expr, prec1, depth int, multiLine *bool) { p.print(token.CHAN, token.ARROW) } p.print(blank) - p.expr(x.Value, multiLine) + p.expr(x.Value) default: panic("unreachable") @@ -911,14 +853,13 @@ func (p *printer) expr1(expr ast.Expr, prec1, depth int, multiLine *bool) { return } -func (p *printer) expr0(x ast.Expr, depth int, multiLine *bool) { - p.expr1(x, token.LowestPrec, depth, multiLine) +func (p *printer) expr0(x ast.Expr, depth int) { + p.expr1(x, token.LowestPrec, depth) } -// Sets multiLine to true if the expression spans multiple lines. -func (p *printer) expr(x ast.Expr, multiLine *bool) { +func (p *printer) expr(x ast.Expr) { const depth = 1 - p.expr1(x, token.LowestPrec, depth, multiLine) + p.expr1(x, token.LowestPrec, depth) } // ---------------------------------------------------------------------------- @@ -932,13 +873,13 @@ func (p *printer) stmtList(list []ast.Stmt, _indent int, nextIsRBrace bool) { if _indent > 0 { p.print(indent) } - var multiLine bool + multiLine := false for i, s := range list { // _indent == 0 only for lists of switch/select case clauses; // in those cases each clause is a new section p.linebreak(p.lineFor(s.Pos()), 1, ignore, i == 0 || _indent == 0 || multiLine) - multiLine = false - p.stmt(s, nextIsRBrace && i == len(list)-1, &multiLine) + p.stmt(s, nextIsRBrace && i == len(list)-1) + multiLine = p.isMultiLine(s) } if _indent > 0 { p.print(unindent) @@ -995,25 +936,25 @@ func (p *printer) controlClause(isForStmt bool, init ast.Stmt, expr ast.Expr, po if init == nil && post == nil { // no semicolons required if expr != nil { - p.expr(stripParens(expr), ignoreMultiLine) + p.expr(stripParens(expr)) needsBlank = true } } else { // all semicolons required // (they are not separators, print them explicitly) if init != nil { - p.stmt(init, false, ignoreMultiLine) + p.stmt(init, false) } p.print(token.SEMICOLON, blank) if expr != nil { - p.expr(stripParens(expr), ignoreMultiLine) + p.expr(stripParens(expr)) needsBlank = true } if isForStmt { p.print(token.SEMICOLON, blank) needsBlank = false if post != nil { - p.stmt(post, false, ignoreMultiLine) + p.stmt(post, false) needsBlank = true } } @@ -1023,8 +964,7 @@ func (p *printer) controlClause(isForStmt bool, init ast.Stmt, expr ast.Expr, po } } -// Sets multiLine to true if the statements spans multiple lines. -func (p *printer) stmt(stmt ast.Stmt, nextIsRBrace bool, multiLine *bool) { +func (p *printer) stmt(stmt ast.Stmt, nextIsRBrace bool) { p.print(stmt.Pos()) switch s := stmt.(type) { @@ -1032,7 +972,7 @@ func (p *printer) stmt(stmt ast.Stmt, nextIsRBrace bool, multiLine *bool) { p.print("BadStmt") case *ast.DeclStmt: - p.decl(s.Decl, multiLine) + p.decl(s.Decl) case *ast.EmptyStmt: // nothing to do @@ -1042,7 +982,7 @@ func (p *printer) stmt(stmt ast.Stmt, nextIsRBrace bool, multiLine *bool) { // is applied before the line break if there is no comment // between (see writeWhitespace) p.print(unindent) - p.expr(s.Label, multiLine) + p.expr(s.Label) p.print(s.Colon, token.COLON, indent) if e, isEmpty := s.Stmt.(*ast.EmptyStmt); isEmpty { if !nextIsRBrace { @@ -1052,21 +992,21 @@ func (p *printer) stmt(stmt ast.Stmt, nextIsRBrace bool, multiLine *bool) { } else { p.linebreak(p.lineFor(s.Stmt.Pos()), 1, ignore, true) } - p.stmt(s.Stmt, nextIsRBrace, multiLine) + p.stmt(s.Stmt, nextIsRBrace) case *ast.ExprStmt: const depth = 1 - p.expr0(s.X, depth, multiLine) + p.expr0(s.X, depth) case *ast.SendStmt: const depth = 1 - p.expr0(s.Chan, depth, multiLine) + p.expr0(s.Chan, depth) p.print(blank, s.Arrow, token.ARROW, blank) - p.expr0(s.Value, depth, multiLine) + p.expr0(s.Value, depth) case *ast.IncDecStmt: const depth = 1 - p.expr0(s.X, depth+1, multiLine) + p.expr0(s.X, depth+1) p.print(s.TokPos, s.Tok) case *ast.AssignStmt: @@ -1074,56 +1014,55 @@ func (p *printer) stmt(stmt ast.Stmt, nextIsRBrace bool, multiLine *bool) { if len(s.Lhs) > 1 && len(s.Rhs) > 1 { depth++ } - p.exprList(s.Pos(), s.Lhs, depth, commaSep, multiLine, s.TokPos) - p.print(blank, s.TokPos, s.Tok) - p.exprList(s.TokPos, s.Rhs, depth, blankStart|commaSep, multiLine, token.NoPos) + p.exprList(s.Pos(), s.Lhs, depth, 0, s.TokPos) + p.print(blank, s.TokPos, s.Tok, blank) + p.exprList(s.TokPos, s.Rhs, depth, 0, token.NoPos) case *ast.GoStmt: p.print(token.GO, blank) - p.expr(s.Call, multiLine) + p.expr(s.Call) case *ast.DeferStmt: p.print(token.DEFER, blank) - p.expr(s.Call, multiLine) + p.expr(s.Call) case *ast.ReturnStmt: p.print(token.RETURN) if s.Results != nil { - p.exprList(s.Pos(), s.Results, 1, blankStart|commaSep, multiLine, token.NoPos) + p.print(blank) + p.exprList(s.Pos(), s.Results, 1, 0, token.NoPos) } case *ast.BranchStmt: p.print(s.Tok) if s.Label != nil { p.print(blank) - p.expr(s.Label, multiLine) + p.expr(s.Label) } case *ast.BlockStmt: p.block(s, 1) - *multiLine = true case *ast.IfStmt: p.print(token.IF) p.controlClause(false, s.Init, s.Cond, nil) p.block(s.Body, 1) - *multiLine = true if s.Else != nil { p.print(blank, token.ELSE, blank) switch s.Else.(type) { case *ast.BlockStmt, *ast.IfStmt: - p.stmt(s.Else, nextIsRBrace, ignoreMultiLine) + p.stmt(s.Else, nextIsRBrace) default: p.print(token.LBRACE, indent, formfeed) - p.stmt(s.Else, true, ignoreMultiLine) + p.stmt(s.Else, true) p.print(unindent, formfeed, token.RBRACE) } } case *ast.CaseClause: if s.List != nil { - p.print(token.CASE) - p.exprList(s.Pos(), s.List, 1, blankStart|commaSep, multiLine, s.Colon) + p.print(token.CASE, blank) + p.exprList(s.Pos(), s.List, 1, 0, s.Colon) } else { p.print(token.DEFAULT) } @@ -1134,25 +1073,23 @@ func (p *printer) stmt(stmt ast.Stmt, nextIsRBrace bool, multiLine *bool) { p.print(token.SWITCH) p.controlClause(false, s.Init, s.Tag, nil) p.block(s.Body, 0) - *multiLine = true case *ast.TypeSwitchStmt: p.print(token.SWITCH) if s.Init != nil { p.print(blank) - p.stmt(s.Init, false, ignoreMultiLine) + p.stmt(s.Init, false) p.print(token.SEMICOLON) } p.print(blank) - p.stmt(s.Assign, false, ignoreMultiLine) + p.stmt(s.Assign, false) p.print(blank) p.block(s.Body, 0) - *multiLine = true case *ast.CommClause: if s.Comm != nil { p.print(token.CASE, blank) - p.stmt(s.Comm, false, ignoreMultiLine) + p.stmt(s.Comm, false) } else { p.print(token.DEFAULT) } @@ -1167,27 +1104,26 @@ func (p *printer) stmt(stmt ast.Stmt, nextIsRBrace bool, multiLine *bool) { p.print(body.Lbrace, token.LBRACE, body.Rbrace, token.RBRACE) } else { p.block(body, 0) - *multiLine = true } case *ast.ForStmt: p.print(token.FOR) p.controlClause(true, s.Init, s.Cond, s.Post) p.block(s.Body, 1) - *multiLine = true case *ast.RangeStmt: p.print(token.FOR, blank) - p.expr(s.Key, multiLine) + p.expr(s.Key) if s.Value != nil { - p.print(token.COMMA, blank) - p.expr(s.Value, multiLine) + // use position of value following the comma as + // comma position for correct comment placement + p.print(s.Value.Pos(), token.COMMA, blank) + p.expr(s.Value) } p.print(blank, s.TokPos, s.Tok, blank, token.RANGE, blank) - p.expr(stripParens(s.X), multiLine) + p.expr(stripParens(s.X)) p.print(blank) p.block(s.Body, 1) - *multiLine = true default: panic("unreachable") @@ -1264,20 +1200,20 @@ func keepTypeColumn(specs []ast.Spec) []bool { return m } -func (p *printer) valueSpec(s *ast.ValueSpec, keepType, doIndent bool, multiLine *bool) { +func (p *printer) valueSpec(s *ast.ValueSpec, keepType, doIndent bool) { p.setComment(s.Doc) - p.identList(s.Names, doIndent, multiLine) // always present + p.identList(s.Names, doIndent) // always present extraTabs := 3 if s.Type != nil || keepType { p.print(vtab) extraTabs-- } if s.Type != nil { - p.expr(s.Type, multiLine) + p.expr(s.Type) } if s.Values != nil { - p.print(vtab, token.ASSIGN) - p.exprList(token.NoPos, s.Values, 1, blankStart|commaSep, multiLine, token.NoPos) + p.print(vtab, token.ASSIGN, blank) + p.exprList(token.NoPos, s.Values, 1, 0, token.NoPos) extraTabs-- } if s.Comment != nil { @@ -1291,17 +1227,16 @@ func (p *printer) valueSpec(s *ast.ValueSpec, keepType, doIndent bool, multiLine // The parameter n is the number of specs in the group. If doIndent is set, // multi-line identifier lists in the spec are indented when the first // linebreak is encountered. -// Sets multiLine to true if the spec spans multiple lines. // -func (p *printer) spec(spec ast.Spec, n int, doIndent bool, multiLine *bool) { +func (p *printer) spec(spec ast.Spec, n int, doIndent bool) { switch s := spec.(type) { case *ast.ImportSpec: p.setComment(s.Doc) if s.Name != nil { - p.expr(s.Name, multiLine) + p.expr(s.Name) p.print(blank) } - p.expr(s.Path, multiLine) + p.expr(s.Path) p.setComment(s.Comment) p.print(s.EndPos) @@ -1310,26 +1245,26 @@ func (p *printer) spec(spec ast.Spec, n int, doIndent bool, multiLine *bool) { p.internalError("expected n = 1; got", n) } p.setComment(s.Doc) - p.identList(s.Names, doIndent, multiLine) // always present + p.identList(s.Names, doIndent) // always present if s.Type != nil { p.print(blank) - p.expr(s.Type, multiLine) + p.expr(s.Type) } if s.Values != nil { - p.print(blank, token.ASSIGN) - p.exprList(token.NoPos, s.Values, 1, blankStart|commaSep, multiLine, token.NoPos) + p.print(blank, token.ASSIGN, blank) + p.exprList(token.NoPos, s.Values, 1, 0, token.NoPos) } p.setComment(s.Comment) case *ast.TypeSpec: p.setComment(s.Doc) - p.expr(s.Name, multiLine) + p.expr(s.Name) if n == 1 { p.print(blank) } else { p.print(vtab) } - p.expr(s.Type, multiLine) + p.expr(s.Type) p.setComment(s.Comment) default: @@ -1337,8 +1272,7 @@ func (p *printer) spec(spec ast.Spec, n int, doIndent bool, multiLine *bool) { } } -// Sets multiLine to true if the declaration spans multiple lines. -func (p *printer) genDecl(d *ast.GenDecl, multiLine *bool) { +func (p *printer) genDecl(d *ast.GenDecl) { p.setComment(d.Doc) p.print(d.Pos(), d.Tok, blank) @@ -1351,32 +1285,31 @@ func (p *printer) genDecl(d *ast.GenDecl, multiLine *bool) { // two or more grouped const/var declarations: // determine if the type column must be kept keepType := keepTypeColumn(d.Specs) - var ml bool + newSection := false for i, s := range d.Specs { if i > 0 { - p.linebreak(p.lineFor(s.Pos()), 1, ignore, ml) + p.linebreak(p.lineFor(s.Pos()), 1, ignore, newSection) } - ml = false - p.valueSpec(s.(*ast.ValueSpec), keepType[i], false, &ml) + p.valueSpec(s.(*ast.ValueSpec), keepType[i], false) + newSection = p.isMultiLine(s) } } else { - var ml bool + newSection := false for i, s := range d.Specs { if i > 0 { - p.linebreak(p.lineFor(s.Pos()), 1, ignore, ml) + p.linebreak(p.lineFor(s.Pos()), 1, ignore, newSection) } - ml = false - p.spec(s, n, false, &ml) + p.spec(s, n, false) + newSection = p.isMultiLine(s) } } p.print(unindent, formfeed) - *multiLine = true } p.print(d.Rparen, token.RPAREN) } else { // single declaration - p.spec(d.Specs[0], 1, true, multiLine) + p.spec(d.Specs[0], 1, true) } } @@ -1440,8 +1373,7 @@ func (p *printer) isOneLineFunc(b *ast.BlockStmt, headerSize int) bool { return headerSize+bodySize <= maxSize } -// Sets multiLine to true if the function body spans multiple lines. -func (p *printer) funcBody(b *ast.BlockStmt, headerSize int, isLit bool, multiLine *bool) { +func (p *printer) funcBody(b *ast.BlockStmt, headerSize int, isLit bool) { if b == nil { return } @@ -1458,7 +1390,7 @@ func (p *printer) funcBody(b *ast.BlockStmt, headerSize int, isLit bool, multiLi if i > 0 { p.print(token.SEMICOLON, blank) } - p.stmt(s, i == len(b.List)-1, ignoreMultiLine) + p.stmt(s, i == len(b.List)-1) } p.print(blank) } @@ -1468,7 +1400,6 @@ func (p *printer) funcBody(b *ast.BlockStmt, headerSize int, isLit bool, multiLi p.print(blank) p.block(b, 1) - *multiLine = true } // distance returns the column difference between from and to if both @@ -1482,28 +1413,26 @@ func (p *printer) distance(from0 token.Pos, to token.Position) int { return infinity } -// Sets multiLine to true if the declaration spans multiple lines. -func (p *printer) funcDecl(d *ast.FuncDecl, multiLine *bool) { +func (p *printer) funcDecl(d *ast.FuncDecl) { p.setComment(d.Doc) p.print(d.Pos(), token.FUNC, blank) if d.Recv != nil { - p.parameters(d.Recv, multiLine) // method: print receiver + p.parameters(d.Recv) // method: print receiver p.print(blank) } - p.expr(d.Name, multiLine) - p.signature(d.Type.Params, d.Type.Results, multiLine) - p.funcBody(d.Body, p.distance(d.Pos(), p.pos), false, multiLine) + p.expr(d.Name) + p.signature(d.Type.Params, d.Type.Results) + p.funcBody(d.Body, p.distance(d.Pos(), p.pos), false) } -// Sets multiLine to true if the declaration spans multiple lines. -func (p *printer) decl(decl ast.Decl, multiLine *bool) { +func (p *printer) decl(decl ast.Decl) { switch d := decl.(type) { case *ast.BadDecl: p.print(d.Pos(), "BadDecl") case *ast.GenDecl: - p.genDecl(d, multiLine) + p.genDecl(d) case *ast.FuncDecl: - p.funcDecl(d, multiLine) + p.funcDecl(d) default: panic("unreachable") } @@ -1526,7 +1455,7 @@ func declToken(decl ast.Decl) (tok token.Token) { func (p *printer) file(src *ast.File) { p.setComment(src.Doc) p.print(src.Pos(), token.PACKAGE, blank) - p.expr(src.Name, ignoreMultiLine) + p.expr(src.Name) if len(src.Decls) > 0 { tok := token.ILLEGAL @@ -1545,7 +1474,7 @@ func (p *printer) file(src *ast.File) { min = 2 } p.linebreak(p.lineFor(d.Pos()), min, ignore, false) - p.decl(d, ignoreMultiLine) + p.decl(d) } } diff --git a/libgo/go/go/printer/performance_test.go b/libgo/go/go/printer/performance_test.go index dbd942292b5..0c6a4e71f13 100644 --- a/libgo/go/go/printer/performance_test.go +++ b/libgo/go/go/printer/performance_test.go @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. // This file implements a simple printer performance benchmark: -// gotest -bench=BenchmarkPrint +// go test -bench=BenchmarkPrint package printer diff --git a/libgo/go/go/printer/printer.go b/libgo/go/go/printer/printer.go index fe99e675eb0..a027d32da89 100644 --- a/libgo/go/go/printer/printer.go +++ b/libgo/go/go/printer/printer.go @@ -6,7 +6,6 @@ package printer import ( - "bytes" "fmt" "go/ast" "go/token" @@ -35,9 +34,6 @@ const ( unindent = whiteSpace('<') ) -// Use ignoreMultiLine if the multiLine information is not important. -var ignoreMultiLine = new(bool) - // A pmode value represents the current printer mode. type pmode int @@ -51,22 +47,22 @@ type printer struct { fset *token.FileSet // Current state - output bytes.Buffer // raw printer result + output []byte // raw printer result indent int // current indentation mode pmode // current printer mode impliedSemi bool // if set, a linebreak implies a semicolon lastTok token.Token // the last token printed (token.ILLEGAL if it's whitespace) wsbuf []whiteSpace // delayed white space - // The (possibly estimated) position in the generated output; - // in AST space (i.e., pos is set whenever a token position is - // known accurately, and updated dependending on what has been - // written). - pos token.Position - - // The value of pos immediately after the last item has been - // written using writeItem. - last token.Position + // Positions + // The out position differs from the pos position when the result + // formatting differs from the source formatting (in the amount of + // white space). If there's a difference and SourcePos is set in + // ConfigMode, //line comments are used in the output to restore + // original source positions for a reader. + pos token.Position // current position in AST (source) space + out token.Position // current position in output space + last token.Position // value of pos after calling writeString // The list of all source comments, in order of appearance. comments []*ast.CommentGroup // may be nil @@ -89,6 +85,8 @@ type printer struct { func (p *printer) init(cfg *Config, fset *token.FileSet, nodeSizes map[ast.Node]int) { p.Config = *cfg p.fset = fset + p.pos = token.Position{Line: 1, Column: 1} + p.out = token.Position{Line: 1, Column: 1} p.wsbuf = make([]whiteSpace, 0, 16) // whitespace sequences are short p.nodeSizes = nodeSizes p.cachedPos = -1 @@ -151,41 +149,57 @@ func (p *printer) lineFor(pos token.Pos) int { return p.cachedLine } -// writeByte writes ch to p.output and updates p.pos. -func (p *printer) writeByte(ch byte) { - p.output.WriteByte(ch) - p.pos.Offset++ - p.pos.Column++ - - if ch == '\n' || ch == '\f' { - // write indentation - // use "hard" htabs - indentation columns - // must not be discarded by the tabwriter - const htabs = "\t\t\t\t\t\t\t\t" - j := p.indent - for j > len(htabs) { - p.output.WriteString(htabs) - j -= len(htabs) - } - p.output.WriteString(htabs[0:j]) +// atLineBegin emits a //line comment if necessary and prints indentation. +func (p *printer) atLineBegin(pos token.Position) { + // write a //line comment if necessary + if p.Config.Mode&SourcePos != 0 && pos.IsValid() && (p.out.Line != pos.Line || p.out.Filename != pos.Filename) { + p.output = append(p.output, tabwriter.Escape) // protect '\n' in //line from tabwriter interpretation + p.output = append(p.output, fmt.Sprintf("//line %s:%d\n", pos.Filename, pos.Line)...) + p.output = append(p.output, tabwriter.Escape) + // p.out must match the //line comment + p.out.Filename = pos.Filename + p.out.Line = pos.Line + } - // update p.pos - p.pos.Line++ - p.pos.Offset += p.indent - p.pos.Column = 1 + p.indent + // write indentation + // use "hard" htabs - indentation columns + // must not be discarded by the tabwriter + for i := 0; i < p.indent; i++ { + p.output = append(p.output, '\t') } + + // update positions + i := p.indent + p.pos.Offset += i + p.pos.Column += i + p.out.Column += i } -// writeByteN writes ch n times to p.output and updates p.pos. -func (p *printer) writeByteN(ch byte, n int) { - for n > 0 { - p.writeByte(ch) - n-- +// writeByte writes ch n times to p.output and updates p.pos. +func (p *printer) writeByte(ch byte, n int) { + if p.out.Column == 1 { + p.atLineBegin(p.pos) } + + for i := 0; i < n; i++ { + p.output = append(p.output, ch) + } + + // update positions + p.pos.Offset += n + if ch == '\n' || ch == '\f' { + p.pos.Line += n + p.out.Line += n + p.pos.Column = 1 + p.out.Column = 1 + return + } + p.pos.Column += n + p.out.Column += n } -// writeString writes the string s to p.output and updates p.pos. -// If isLit is set, s is escaped w/ tabwriter.Escape characters +// writeString writes the string s to p.output and updates p.pos, p.out, +// and p.last. If isLit is set, s is escaped w/ tabwriter.Escape characters // to protect s from being interpreted by the tabwriter. // // Note: writeString is only used to write Go tokens, literals, and @@ -195,81 +209,85 @@ func (p *printer) writeByteN(ch byte, n int) { // avoids processing extra escape characters and reduces run time of the // printer benchmark by up to 10%. // -func (p *printer) writeString(s string, isLit bool) { +func (p *printer) writeString(pos token.Position, s string, isLit bool) { + if p.out.Column == 1 { + p.atLineBegin(pos) + } + + if pos.IsValid() { + // update p.pos (if pos is invalid, continue with existing p.pos) + // Note: Must do this after handling line beginnings because + // atLineBegin updates p.pos if there's indentation, but p.pos + // is the position of s. + p.pos = pos + // reset state if the file changed + // (used when printing merged ASTs of different files + // e.g., the result of ast.MergePackageFiles) + if p.last.IsValid() && p.last.Filename != pos.Filename { + p.indent = 0 + p.mode = 0 + p.wsbuf = p.wsbuf[0:0] + } + } + if isLit { // Protect s such that is passes through the tabwriter // unchanged. Note that valid Go programs cannot contain // tabwriter.Escape bytes since they do not appear in legal // UTF-8 sequences. - p.output.WriteByte(tabwriter.Escape) + p.output = append(p.output, tabwriter.Escape) } - p.output.WriteString(s) + if debug { + p.output = append(p.output, fmt.Sprintf("/*%s*/", pos)...) // do not update p.pos! + } + p.output = append(p.output, s...) - // update p.pos + // update positions nlines := 0 - column := p.pos.Column + len(s) + var li int // index of last newline; valid if nlines > 0 for i := 0; i < len(s); i++ { + // Go tokens cannot contain '\f' - no need to look for it if s[i] == '\n' { nlines++ - column = len(s) - i + li = i } } p.pos.Offset += len(s) - p.pos.Line += nlines - p.pos.Column = column + if nlines > 0 { + p.pos.Line += nlines + p.out.Line += nlines + c := len(s) - li + p.pos.Column = c + p.out.Column = c + } else { + p.pos.Column += len(s) + p.out.Column += len(s) + } if isLit { - p.output.WriteByte(tabwriter.Escape) + p.output = append(p.output, tabwriter.Escape) } -} -// writeItem writes data at position pos. data is the text corresponding to -// a single lexical token, but may also be comment text. pos is the actual -// (or at least very accurately estimated) position of the data in the original -// source text. writeItem updates p.last to the position immediately following -// the data. -// -func (p *printer) writeItem(pos token.Position, data string, isLit bool) { - if pos.IsValid() { - // continue with previous position if we don't have a valid pos - if p.last.IsValid() && p.last.Filename != pos.Filename { - // the file has changed - reset state - // (used when printing merged ASTs of different files - // e.g., the result of ast.MergePackageFiles) - p.indent = 0 - p.mode = 0 - p.wsbuf = p.wsbuf[0:0] - } - p.pos = pos - } - if debug { - // do not update p.pos - use write0 - fmt.Fprintf(&p.output, "/*%s*/", pos) - } - p.writeString(data, isLit) p.last = p.pos } -const linePrefix = "//line " - // writeCommentPrefix writes the whitespace before a comment. // If there is any pending whitespace, it consumes as much of // it as is likely to help position the comment nicely. // pos is the comment position, next the position of the item // after all pending comments, prev is the previous comment in -// a group of comments (or nil), and isKeyword indicates if the -// next item is a keyword. +// a group of comments (or nil), and tok is the next token. // -func (p *printer) writeCommentPrefix(pos, next token.Position, prev, comment *ast.Comment, isKeyword bool) { - if p.output.Len() == 0 { +func (p *printer) writeCommentPrefix(pos, next token.Position, prev, comment *ast.Comment, tok token.Token) { + if len(p.output) == 0 { // the comment is the first item to be printed - don't write any whitespace return } if pos.IsValid() && pos.Filename != p.last.Filename { // comment in a different file - separate with newlines - p.writeByteN('\f', maxNewlines) + p.writeByte('\f', maxNewlines) return } @@ -309,45 +327,48 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, prev, comment *as // with a blank instead of a tab sep = ' ' } - p.writeByte(sep) + p.writeByte(sep, 1) } } else { // comment on a different line: // separate with at least one line break droppedLinebreak := false - if prev == nil { - // first comment of a comment group - j := 0 - for i, ch := range p.wsbuf { - switch ch { - case blank, vtab: - // ignore any horizontal whitespace before line breaks - p.wsbuf[i] = ignore + j := 0 + for i, ch := range p.wsbuf { + switch ch { + case blank, vtab: + // ignore any horizontal whitespace before line breaks + p.wsbuf[i] = ignore + continue + case indent: + // apply pending indentation + continue + case unindent: + // if this is not the last unindent, apply it + // as it is (likely) belonging to the last + // construct (e.g., a multi-line expression list) + // and is not part of closing a block + if i+1 < len(p.wsbuf) && p.wsbuf[i+1] == unindent { continue - case indent: - // apply pending indentation + } + // if the next token is not a closing }, apply the unindent + // if it appears that the comment is aligned with the + // token; otherwise assume the unindent is part of a + // closing block and stop (this scenario appears with + // comments before a case label where the comments + // apply to the next case instead of the current one) + if tok != token.RBRACE && pos.Column == next.Column { continue - case unindent: - // if the next token is a keyword, apply the outdent - // if it appears that the comment is aligned with the - // keyword; otherwise assume the outdent is part of a - // closing block and stop (this scenario appears with - // comments before a case label where the comments - // apply to the next case instead of the current one) - if isKeyword && pos.Column == next.Column { - continue - } - case newline, formfeed: - // TODO(gri): may want to keep formfeed info in some cases - p.wsbuf[i] = ignore - droppedLinebreak = true } - j = i - break + case newline, formfeed: + p.wsbuf[i] = ignore + droppedLinebreak = prev == nil // record only if first comment of a group } - p.writeWhitespace(j) + j = i + break } + p.writeWhitespace(j) // determine number of linebreaks before the comment n := 0 @@ -373,23 +394,17 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, prev, comment *as } if n > 0 { - // turn off indent if we're about to print a line directive - indent := p.indent - if strings.HasPrefix(comment.Text, linePrefix) { - p.indent = 0 - } // use formfeeds to break columns before a comment; // this is analogous to using formfeeds to separate // individual lines of /*-style comments - p.writeByteN('\f', nlimit(n)) - p.indent = indent // restore indent + p.writeByte('\f', nlimit(n)) } } } // Split comment text into lines // (using strings.Split(text, "\n") is significantly slower for -// this specific purpose, as measured with: gotest -bench=Print) +// this specific purpose, as measured with: go test -bench=Print) func split(text string) []string { // count lines (comment text never ends in a newline) n := 1 @@ -564,30 +579,33 @@ func stripCommonPrefix(lines []string) { func (p *printer) writeComment(comment *ast.Comment) { text := comment.Text + pos := p.posFor(comment.Pos()) - if strings.HasPrefix(text, linePrefix) { - pos := strings.TrimSpace(text[len(linePrefix):]) - i := strings.LastIndex(pos, ":") - if i >= 0 { - // The line directive we are about to print changed - // the Filename and Line number used by go/token - // as it was reading the input originally. - // In order to match the original input, we have to - // update our own idea of the file and line number - // accordingly, after printing the directive. - file := pos[:i] - line, _ := strconv.Atoi(pos[i+1:]) - defer func() { - p.pos.Filename = file - p.pos.Line = line - p.pos.Column = 1 - }() + const linePrefix = "//line " + if strings.HasPrefix(text, linePrefix) && (!pos.IsValid() || pos.Column == 1) { + // possibly a line directive + ldir := strings.TrimSpace(text[len(linePrefix):]) + if i := strings.LastIndex(ldir, ":"); i >= 0 { + if line, err := strconv.Atoi(ldir[i+1:]); err == nil && line > 0 { + // The line directive we are about to print changed + // the Filename and Line number used for subsequent + // tokens. We have to update our AST-space position + // accordingly and suspend indentation temporarily. + indent := p.indent + p.indent = 0 + defer func() { + p.pos.Filename = ldir[:i] + p.pos.Line = line + p.pos.Column = 1 + p.indent = indent + }() + } } } // shortcut common case of //-style comments if text[1] == '/' { - p.writeItem(p.posFor(comment.Pos()), text, true) + p.writeString(pos, text, true) return } @@ -598,14 +616,13 @@ func (p *printer) writeComment(comment *ast.Comment) { // write comment lines, separated by formfeed, // without a line break after the last line - pos := p.posFor(comment.Pos()) for i, line := range lines { if i > 0 { - p.writeByte('\f') + p.writeByte('\f', 1) pos = p.pos } if len(line) > 0 { - p.writeItem(pos, line, true) + p.writeString(pos, line, true) } } } @@ -643,7 +660,7 @@ func (p *printer) writeCommentSuffix(needsLinebreak bool) (wroteNewline, dropped // make sure we have a line break if needsLinebreak { - p.writeByte('\n') + p.writeByte('\n', 1) wroteNewline = true } @@ -660,7 +677,7 @@ func (p *printer) intersperseComments(next token.Position, tok token.Token) (wro var last *ast.Comment for p.commentBefore(next) { for _, c := range p.comment.List { - p.writeCommentPrefix(p.posFor(c.Pos()), next, last, c, tok.IsKeyword()) + p.writeCommentPrefix(p.posFor(c.Pos()), next, last, c, tok) p.writeComment(c) last = c } @@ -668,10 +685,12 @@ func (p *printer) intersperseComments(next token.Position, tok token.Token) (wro } if last != nil { - if last.Text[1] == '*' && p.lineFor(last.Pos()) == next.Line { - // the last comment is a /*-style comment and the next item - // follows on the same line: separate with an extra blank - p.writeByte(' ') + // if the last comment is a /*-style comment and the next item + // follows on the same line but is not a comma or a "closing" + // token, add an extra blank for separation + if last.Text[1] == '*' && p.lineFor(last.Pos()) == next.Line && tok != token.COMMA && + tok != token.RPAREN && tok != token.RBRACK && tok != token.RBRACE { + p.writeByte(' ', 1) } // ensure that there is a line break after a //-style comment, // before a closing '}' unless explicitly disabled, or at eof @@ -722,7 +741,7 @@ func (p *printer) writeWhitespace(n int) { } fallthrough default: - p.writeByte(byte(ch)) + p.writeByte(byte(ch), 1) } } @@ -886,12 +905,12 @@ func (p *printer) print(args ...interface{}) { if droppedFF { ch = '\f' // use formfeed since we dropped one before } - p.writeByteN(ch, n) + p.writeByte(ch, n) impliedSemi = false } } - p.writeItem(next, data, isLit) + p.writeString(next, data, isLit) p.impliedSemi = impliedSemi } } @@ -991,18 +1010,18 @@ func (p *printer) printNode(node interface{}) error { // format node switch n := node.(type) { case ast.Expr: - p.expr(n, ignoreMultiLine) + p.expr(n) case ast.Stmt: // A labeled statement will un-indent to position the // label. Set indent to 1 so we don't get indent "underflow". if _, labeledStmt := n.(*ast.LabeledStmt); labeledStmt { p.indent = 1 } - p.stmt(n, false, ignoreMultiLine) + p.stmt(n, false) case ast.Decl: - p.decl(n, ignoreMultiLine) + p.decl(n) case ast.Spec: - p.spec(n, 1, false, ignoreMultiLine) + p.spec(n, 1, false) case *ast.File: p.file(n) default: @@ -1027,7 +1046,7 @@ unsupported: type trimmer struct { output io.Writer state int - space bytes.Buffer + space []byte } // trimmer is implemented as a state machine. @@ -1038,6 +1057,11 @@ const ( inText // inside text ) +func (p *trimmer) resetSpace() { + p.state = inSpace + p.space = p.space[0:0] +} + // Design note: It is tempting to eliminate extra blanks occurring in // whitespace in this function as it could simplify some // of the blanks logic in the node printing functions. @@ -1062,36 +1086,33 @@ func (p *trimmer) Write(data []byte) (n int, err error) { case inSpace: switch b { case '\t', ' ': - p.space.WriteByte(b) // WriteByte returns no errors + p.space = append(p.space, b) case '\n', '\f': - p.space.Reset() // discard trailing space + p.resetSpace() // discard trailing space _, err = p.output.Write(aNewline) case tabwriter.Escape: - _, err = p.output.Write(p.space.Bytes()) + _, err = p.output.Write(p.space) p.state = inEscape m = n + 1 // +1: skip tabwriter.Escape default: - _, err = p.output.Write(p.space.Bytes()) + _, err = p.output.Write(p.space) p.state = inText m = n } case inEscape: if b == tabwriter.Escape { _, err = p.output.Write(data[m:n]) - p.state = inSpace - p.space.Reset() + p.resetSpace() } case inText: switch b { case '\t', ' ': _, err = p.output.Write(data[m:n]) - p.state = inSpace - p.space.Reset() - p.space.WriteByte(b) // WriteByte returns no errors + p.resetSpace() + p.space = append(p.space, b) case '\n', '\f': _, err = p.output.Write(data[m:n]) - p.state = inSpace - p.space.Reset() + p.resetSpace() _, err = p.output.Write(aNewline) case tabwriter.Escape: _, err = p.output.Write(data[m:n]) @@ -1110,8 +1131,7 @@ func (p *trimmer) Write(data []byte) (n int, err error) { switch p.state { case inEscape, inText: _, err = p.output.Write(data[m:n]) - p.state = inSpace - p.space.Reset() + p.resetSpace() } return @@ -1120,16 +1140,19 @@ func (p *trimmer) Write(data []byte) (n int, err error) { // ---------------------------------------------------------------------------- // Public interface -// General printing is controlled with these Config.Mode flags. +// A Mode value is a set of flags (or 0). They coontrol printing. +type Mode uint + const ( - RawFormat uint = 1 << iota // do not use a tabwriter; if set, UseSpaces is ignored + RawFormat Mode = 1 << iota // do not use a tabwriter; if set, UseSpaces is ignored TabIndent // use tabs for indentation independent of UseSpaces UseSpaces // use spaces instead of tabs for alignment + SourcePos // emit //line comments to preserve original source positions ) // A Config node controls the output of Fprint. type Config struct { - Mode uint // default: 0 + Mode Mode // default: 0 Tabwidth int // default: 8 } @@ -1170,7 +1193,7 @@ func (cfg *Config) fprint(output io.Writer, fset *token.FileSet, node interface{ } // write printer result via tabwriter/trimmer to output - if _, err = output.Write(p.output.Bytes()); err != nil { + if _, err = output.Write(p.output); err != nil { return } diff --git a/libgo/go/go/printer/printer_test.go b/libgo/go/go/printer/printer_test.go index 9adf48cda61..497d671f240 100644 --- a/libgo/go/go/printer/printer_test.go +++ b/libgo/go/go/printer/printer_test.go @@ -67,6 +67,13 @@ func runcheck(t *testing.T, source, golden string, mode checkMode) { } res := buf.Bytes() + // formatted source must be valid + if _, err := parser.ParseFile(fset, "", res, 0); err != nil { + t.Error(err) + t.Logf("\n%s", res) + return + } + // update golden files if necessary if *update { if err := ioutil.WriteFile(golden, res, 0644); err != nil { @@ -133,7 +140,7 @@ type entry struct { mode checkMode } -// Use gotest -update to create/update the respective golden files. +// Use go test -update to create/update the respective golden files. var data = []entry{ {"empty.input", "empty.golden", 0}, {"comments.input", "comments.golden", 0}, @@ -147,15 +154,12 @@ var data = []entry{ } func TestFiles(t *testing.T) { - for i, e := range data { + for _, e := range data { source := filepath.Join(dataDir, e.source) golden := filepath.Join(dataDir, e.golden) check(t, source, golden, e.mode) // TODO(gri) check that golden is idempotent //check(t, golden, golden, e.mode) - if testing.Short() && i >= 3 { - break - } } } @@ -223,7 +227,8 @@ func TestBadNodes(t *testing.T) { } } -// Print and parse f with +// testComment verifies that f can be parsed again after printing it +// with its first comment set to comment at any possible source offset. func testComment(t *testing.T, f *ast.File, srclen int, comment *ast.Comment) { f.Comments[0].List[0] = comment var buf bytes.Buffer @@ -275,8 +280,133 @@ func fibo(n int) { t.Error("expected offset 1") // error in test } - testComment(t, f, len(src), &ast.Comment{pos, "//-style comment"}) - testComment(t, f, len(src), &ast.Comment{pos, "/*-style comment */"}) - testComment(t, f, len(src), &ast.Comment{pos, "/*-style \n comment */"}) - testComment(t, f, len(src), &ast.Comment{pos, "/*-style comment \n\n\n */"}) + testComment(t, f, len(src), &ast.Comment{Slash: pos, Text: "//-style comment"}) + testComment(t, f, len(src), &ast.Comment{Slash: pos, Text: "/*-style comment */"}) + testComment(t, f, len(src), &ast.Comment{Slash: pos, Text: "/*-style \n comment */"}) + testComment(t, f, len(src), &ast.Comment{Slash: pos, Text: "/*-style comment \n\n\n */"}) +} + +type visitor chan *ast.Ident + +func (v visitor) Visit(n ast.Node) (w ast.Visitor) { + if ident, ok := n.(*ast.Ident); ok { + v <- ident + } + return v +} + +// idents is an iterator that returns all idents in f via the result channel. +func idents(f *ast.File) <-chan *ast.Ident { + v := make(visitor) + go func() { + ast.Walk(v, f) + close(v) + }() + return v +} + +// identCount returns the number of identifiers found in f. +func identCount(f *ast.File) int { + n := 0 + for _ = range idents(f) { + n++ + } + return n +} + +// Verify that the SourcePos mode emits correct //line comments +// by testing that position information for matching identifiers +// is maintained. +func TestSourcePos(t *testing.T) { + const src = ` +package p +import ( "go/printer"; "math" ) +const pi = 3.14; var x = 0 +type t struct{ x, y, z int; u, v, w float32 } +func (t *t) foo(a, b, c int) int { + return a*t.x + b*t.y + + // two extra lines here + // ... + c*t.z +} +` + + // parse original + f1, err := parser.ParseFile(fset, "src", src, parser.ParseComments) + if err != nil { + t.Fatal(err) + } + + // pretty-print original + var buf bytes.Buffer + err = (&Config{Mode: UseSpaces | SourcePos, Tabwidth: 8}).Fprint(&buf, fset, f1) + if err != nil { + t.Fatal(err) + } + + // parse pretty printed original + // (//line comments must be interpreted even w/o parser.ParseComments set) + f2, err := parser.ParseFile(fset, "", buf.Bytes(), 0) + if err != nil { + t.Fatalf("%s\n%s", err, buf.Bytes()) + } + + // At this point the position information of identifiers in f2 should + // match the position information of corresponding identifiers in f1. + + // number of identifiers must be > 0 (test should run) and must match + n1 := identCount(f1) + n2 := identCount(f2) + if n1 == 0 { + t.Fatal("got no idents") + } + if n2 != n1 { + t.Errorf("got %d idents; want %d", n2, n1) + } + + // verify that all identifiers have correct line information + i2range := idents(f2) + for i1 := range idents(f1) { + i2 := <-i2range + + if i2.Name != i1.Name { + t.Errorf("got ident %s; want %s", i2.Name, i1.Name) + } + + l1 := fset.Position(i1.Pos()).Line + l2 := fset.Position(i2.Pos()).Line + if l2 != l1 { + t.Errorf("got line %d; want %d for %s", l2, l1, i1.Name) + } + } + + if t.Failed() { + t.Logf("\n%s", buf.Bytes()) + } +} + +// TextX is a skeleton test that can be filled in for debugging one-off cases. +// Do not remove. +func TestX(t *testing.T) { + const src = ` +package p +func _() {} +` + // parse original + f, err := parser.ParseFile(fset, "src", src, parser.ParseComments) + if err != nil { + t.Fatal(err) + } + + // pretty-print original + var buf bytes.Buffer + if err = (&Config{Mode: UseSpaces, Tabwidth: 8}).Fprint(&buf, fset, f); err != nil { + t.Fatal(err) + } + + // parse pretty printed original + if _, err := parser.ParseFile(fset, "", buf.Bytes(), 0); err != nil { + t.Fatalf("%s\n%s", err, buf.Bytes()) + } + } diff --git a/libgo/go/go/printer/testdata/comments.golden b/libgo/go/go/printer/testdata/comments.golden index d2ad9e3a2ff..d9aa2d82f7d 100644 --- a/libgo/go/go/printer/testdata/comments.golden +++ b/libgo/go/go/printer/testdata/comments.golden @@ -168,6 +168,91 @@ func typeswitch(x interface{}) { // this comment should not be indented } +// +// Indentation of comments after possibly indented multi-line constructs +// (test cases for issue 3147). +// + +func _() { + s := 1 + + 2 + // should be indented like s +} + +func _() { + s := 1 + + 2 // comment + // should be indented like s +} + +func _() { + s := 1 + + 2 // comment + // should be indented like s + _ = 0 +} + +func _() { + s := 1 + + 2 + // should be indented like s + _ = 0 +} + +func _() { + s := 1 + + 2 + + // should be indented like s +} + +func _() { + s := 1 + + 2 // comment + + // should be indented like s +} + +func _() { + s := 1 + + 2 // comment + + // should be indented like s + _ = 0 +} + +func _() { + s := 1 + + 2 + + // should be indented like s + _ = 0 +} + +// Test case from issue 3147. +func f() { + templateText := "a" + // A + "b" + // B + "c" // C + + // should be aligned with f() + f() +} + +// Modified test case from issue 3147. +func f() { + templateText := "a" + // A + "b" + // B + "c" // C + + // may not be aligned with f() (source is not aligned) + f() +} + +// +// Test cases for alignment of lines in general comments. +// + func _() { /* freestanding comment aligned line @@ -404,17 +489,18 @@ func _() { */ } -// Some interesting interspersed comments +// Some interesting interspersed comments. +// See below for more common cases. func _( /* this */ x /* is */ /* an */ int) { } -func _( /* no params */ ) {} +func _( /* no params */) {} func _() { - f( /* no args */ ) + f( /* no args */) } -func ( /* comment1 */ T /* comment2 */ ) _() {} +func ( /* comment1 */ T /* comment2 */) _() {} func _() { /* one-line functions with comments are formatted as multi-line functions */ } @@ -425,11 +511,32 @@ func _() { } func _() { - _ = []int{0, 1 /* don't introduce a newline after this comment - was issue 1365 */ } + _ = []int{0, 1 /* don't introduce a newline after this comment - was issue 1365 */} } -// Comments immediately adjacent to punctuation (for which the go/printer -// may only have estimated position information) must remain after the punctuation. +// Test cases from issue 1542: +// Comments must not be placed before commas and cause invalid programs. +func _() { + var a = []int{1, 2 /*jasldf*/} + _ = a +} + +func _() { + var a = []int{1, 2}/*jasldf + */ + + _ = a +} + +func _() { + var a = []int{1, 2}// jasldf + + _ = a +} + +// Comments immediately adjacent to punctuation followed by a newline +// remain after the punctuation (looks better and permits alignment of +// comments). func _() { _ = T{ 1, // comment after comma @@ -459,6 +566,54 @@ func _() { } } +// If there is no newline following punctuation, commas move before the punctuation. +// This way, commas interspersed in lists stay with the respective expression. +func f(x /* comment */, y int, z int /* comment */, u, v, w int /* comment */) { + f(x /* comment */, y) + f(x, /* comment */ + y) + f( + x, /* comment */ + ) +} + +func g( + x int, /* comment */ +) { +} + +type _ struct { + a, b /* comment */, c int +} + +type _ struct { + a, b /* comment */, c int +} + +func _() { + for a /* comment */, b := range x { + } +} + +// Print line directives correctly. + +// The following is a legal line directive. +//line foo:1 +func _() { + _ = 0 + // The following is a legal line directive. It must not be indented: +//line foo:2 + _ = 1 + + // The following is not a legal line directive (it doesn't start in column 1): + //line foo:2 + _ = 2 + + // The following is not a legal line directive (negative line number): + //line foo:-3 + _ = 3 +} + // Line comments with tabs func _() { var finput *bufio.Reader // input file diff --git a/libgo/go/go/printer/testdata/comments.input b/libgo/go/go/printer/testdata/comments.input index 222e0a713d4..6084b3fe450 100644 --- a/libgo/go/go/printer/testdata/comments.input +++ b/libgo/go/go/printer/testdata/comments.input @@ -171,6 +171,91 @@ func typeswitch(x interface{}) { // this comment should not be indented } +// +// Indentation of comments after possibly indented multi-line constructs +// (test cases for issue 3147). +// + +func _() { + s := 1 + + 2 +// should be indented like s +} + +func _() { + s := 1 + + 2 // comment + // should be indented like s +} + +func _() { + s := 1 + + 2 // comment + // should be indented like s + _ = 0 +} + +func _() { + s := 1 + + 2 + // should be indented like s + _ = 0 +} + +func _() { + s := 1 + + 2 + +// should be indented like s +} + +func _() { + s := 1 + + 2 // comment + + // should be indented like s +} + +func _() { + s := 1 + + 2 // comment + + // should be indented like s + _ = 0 +} + +func _() { + s := 1 + + 2 + + // should be indented like s + _ = 0 +} + +// Test case from issue 3147. +func f() { + templateText := "a" + // A + "b" + // B + "c" // C + + // should be aligned with f() + f() +} + +// Modified test case from issue 3147. +func f() { + templateText := "a" + // A + "b" + // B + "c" // C + + // may not be aligned with f() (source is not aligned) + f() +} + +// +// Test cases for alignment of lines in general comments. +// + func _() { /* freestanding comment aligned line @@ -410,7 +495,8 @@ func _() { } -// Some interesting interspersed comments +// Some interesting interspersed comments. +// See below for more common cases. func _(/* this */x/* is *//* an */ int) { } @@ -432,9 +518,30 @@ func _() { _ = []int{0, 1 /* don't introduce a newline after this comment - was issue 1365 */} } +// Test cases from issue 1542: +// Comments must not be placed before commas and cause invalid programs. +func _() { + var a = []int{1, 2, /*jasldf*/ + } + _ = a +} + +func _() { + var a = []int{1, 2, /*jasldf + */ + } + _ = a +} -// Comments immediately adjacent to punctuation (for which the go/printer -// may only have estimated position information) must remain after the punctuation. +func _() { + var a = []int{1, 2, // jasldf + } + _ = a +} + +// Comments immediately adjacent to punctuation followed by a newline +// remain after the punctuation (looks better and permits alignment of +// comments). func _() { _ = T{ 1, // comment after comma @@ -466,6 +573,50 @@ func _() { } } +// If there is no newline following punctuation, commas move before the punctuation. +// This way, commas interspersed in lists stay with the respective expression. +func f(x/* comment */, y int, z int /* comment */, u, v, w int /* comment */) { + f(x /* comment */, y) + f(x /* comment */, + y) + f( + x /* comment */, + ) +} + +func g( + x int /* comment */, +) {} + +type _ struct { + a, b /* comment */, c int +} + +type _ struct { a, b /* comment */, c int } + +func _() { + for a /* comment */, b := range x { + } +} + +// Print line directives correctly. + +// The following is a legal line directive. +//line foo:1 +func _() { + _ = 0 +// The following is a legal line directive. It must not be indented: +//line foo:2 + _ = 1 + +// The following is not a legal line directive (it doesn't start in column 1): + //line foo:2 + _ = 2 + +// The following is not a legal line directive (negative line number): +//line foo:-3 + _ = 3 +} // Line comments with tabs func _() { diff --git a/libgo/go/go/printer/testdata/declarations.golden b/libgo/go/go/printer/testdata/declarations.golden index 928b8ce0a9f..7ed7cb61ae5 100644 --- a/libgo/go/go/printer/testdata/declarations.golden +++ b/libgo/go/go/printer/testdata/declarations.golden @@ -83,13 +83,13 @@ import ( // more import examples import ( "xxx" - "much longer name" // comment - "short name" // comment + "much_longer_name" // comment + "short_name" // comment ) import ( _ "xxx" - "much longer name" // comment + "much_longer_name" // comment ) import ( @@ -500,7 +500,7 @@ type _ struct { type _ struct { a, b, - c, d int // this line should be indented + c, d int // this line should be indented u, v, w, x float // this line should be indented p, q, r, s float // this line should be indented @@ -562,7 +562,7 @@ var a2, b2, var ( a3, b3, - c3, d3 int // this line should be indented + c3, d3 int // this line should be indented a4, b4, c4 int // this line should be indented ) diff --git a/libgo/go/go/printer/testdata/declarations.input b/libgo/go/go/printer/testdata/declarations.input index 68f90308a36..df8c2b167e1 100644 --- a/libgo/go/go/printer/testdata/declarations.input +++ b/libgo/go/go/printer/testdata/declarations.input @@ -84,13 +84,13 @@ import ( // more import examples import ( "xxx" - "much longer name" // comment - "short name" // comment + "much_longer_name" // comment + "short_name" // comment ) import ( _ "xxx" - "much longer name" // comment + "much_longer_name" // comment ) import ( diff --git a/libgo/go/go/printer/testdata/expressions.golden b/libgo/go/go/printer/testdata/expressions.golden index d0cf24ad6f6..45fa4d97a4a 100644 --- a/libgo/go/go/printer/testdata/expressions.golden +++ b/libgo/go/go/printer/testdata/expressions.golden @@ -545,7 +545,7 @@ func _() { // handle multiline argument list correctly _ = new(T). foo( - 1). + 1). foo(2) _ = new(T).foo( @@ -587,12 +587,12 @@ func _() { _ = new(T). Field. Array[3+ - 4]. + 4]. Table["foo"]. Blob.(*Type). Slices[1:4]. Method(1, 2, - 3). + 3). Thingy _ = a.b.c @@ -625,3 +625,25 @@ func f() { log.Fatal(err) } } + +// Handle multi-line argument lists ending in ... correctly. +// Was issue 3130. +func _() { + _ = append(s, a...) + _ = append( + s, a...) + _ = append(s, + a...) + _ = append( + s, + a...) + _ = append(s, a..., + ) + _ = append(s, + a..., + ) + _ = append( + s, + a..., + ) +} diff --git a/libgo/go/go/printer/testdata/expressions.input b/libgo/go/go/printer/testdata/expressions.input index d1131498352..f545c66057c 100644 --- a/libgo/go/go/printer/testdata/expressions.input +++ b/libgo/go/go/printer/testdata/expressions.input @@ -654,3 +654,25 @@ func f() { log.Fatal(err) } } + +// Handle multi-line argument lists ending in ... correctly. +// Was issue 3130. +func _() { + _ = append(s, a...) + _ = append( + s, a...) + _ = append(s, + a...) + _ = append( + s, + a...) + _ = append(s, a..., + ) + _ = append(s, + a..., + ) + _ = append( + s, + a..., + ) +} diff --git a/libgo/go/go/printer/testdata/expressions.raw b/libgo/go/go/printer/testdata/expressions.raw index d7819a3baad..87a4b00836d 100644 --- a/libgo/go/go/printer/testdata/expressions.raw +++ b/libgo/go/go/printer/testdata/expressions.raw @@ -545,7 +545,7 @@ func _() { // handle multiline argument list correctly _ = new(T). foo( - 1). + 1). foo(2) _ = new(T).foo( @@ -587,12 +587,12 @@ func _() { _ = new(T). Field. Array[3+ - 4]. + 4]. Table["foo"]. Blob.(*Type). Slices[1:4]. Method(1, 2, - 3). + 3). Thingy _ = a.b.c @@ -625,3 +625,25 @@ func f() { log.Fatal(err) } } + +// Handle multi-line argument lists ending in ... correctly. +// Was issue 3130. +func _() { + _ = append(s, a...) + _ = append( + s, a...) + _ = append(s, + a...) + _ = append( + s, + a...) + _ = append(s, a..., + ) + _ = append(s, + a..., + ) + _ = append( + s, + a..., + ) +} diff --git a/libgo/go/go/printer/testdata/parser.go b/libgo/go/go/printer/testdata/parser.go index c85297f5831..dba8bbd4351 100644 --- a/libgo/go/go/printer/testdata/parser.go +++ b/libgo/go/go/printer/testdata/parser.go @@ -52,7 +52,7 @@ type parser struct { // Non-syntactic parser control exprLev int // < 0: in control clause, >= 0: in expression - // Ordinary identifer scopes + // Ordinary identifier scopes pkgScope *ast.Scope // pkgScope.Outer == nil topScope *ast.Scope // top-most scope; may be pkgScope unresolved []*ast.Ident // unresolved identifiers diff --git a/libgo/go/go/printer/testdata/statements.golden b/libgo/go/go/printer/testdata/statements.golden index 90e1743557d..ffca21edba9 100644 --- a/libgo/go/go/printer/testdata/statements.golden +++ b/libgo/go/go/printer/testdata/statements.golden @@ -8,6 +8,82 @@ var expr bool func use(x interface{}) {} +// Formatting of multi-line return statements. +func _f() { + return + return x, y, z + return T{} + return T{1, 2, 3}, + x, y, z + return T{1, 2, 3}, + x, y, + z + return T{1, + 2, + 3} + return T{1, + 2, + 3, + } + return T{ + 1, + 2, + 3} + return T{ + 1, + 2, + 3, + } + return T{ + 1, + T{1, 2, 3}, + 3, + } + return T{ + 1, + T{1, + 2, 3}, + 3, + } + return T{ + 1, + T{1, + 2, + 3}, + 3, + } + return T{ + 1, + 2, + }, + nil + return T{ + 1, + 2, + }, + T{ + x: 3, + y: 4, + }, + nil + return x + y + + z + return func() {} + return func() { + _ = 0 + }, T{ + 1, 2, + } + return func() { + _ = 0 + } + return func() T { + return T{ + 1, 2, + } + } +} + // Formatting of if-statement headers. func _() { if true { diff --git a/libgo/go/go/printer/testdata/statements.input b/libgo/go/go/printer/testdata/statements.input index 86a753c5ad9..99945e9551a 100644 --- a/libgo/go/go/printer/testdata/statements.input +++ b/libgo/go/go/printer/testdata/statements.input @@ -8,6 +8,82 @@ var expr bool func use(x interface{}) {} +// Formatting of multi-line return statements. +func _f() { + return + return x, y, z + return T{} + return T{1, 2, 3}, + x, y, z + return T{1, 2, 3}, + x, y, + z + return T{1, + 2, + 3} + return T{1, + 2, + 3, + } + return T{ + 1, + 2, + 3} + return T{ + 1, + 2, + 3, + } + return T{ + 1, + T{1, 2, 3}, + 3, + } + return T{ + 1, + T{1, + 2, 3}, + 3, + } + return T{ + 1, + T{1, + 2, + 3}, + 3, + } + return T{ + 1, + 2, + }, + nil + return T{ + 1, + 2, + }, + T{ + x: 3, + y: 4, + }, + nil + return x + y + + z + return func() {} + return func() { + _ = 0 + }, T{ + 1, 2, + } + return func() { + _ = 0 + } + return func() T { + return T { + 1, 2, + } + } +} + // Formatting of if-statement headers. func _() { if true {} diff --git a/libgo/go/go/scanner/errors.go b/libgo/go/go/scanner/errors.go index cd9620b878b..8a75a96508e 100644 --- a/libgo/go/go/scanner/errors.go +++ b/libgo/go/go/scanner/errors.go @@ -11,44 +11,18 @@ import ( "sort" ) -// An implementation of an ErrorHandler may be provided to the Scanner. -// If a syntax error is encountered and a handler was installed, Error -// is called with a position and an error message. The position points -// to the beginning of the offending token. -// -type ErrorHandler interface { - Error(pos token.Position, msg string) -} - -// ErrorVector implements the ErrorHandler interface. It maintains a list -// of errors which can be retrieved with GetErrorList and GetError. The -// zero value for an ErrorVector is an empty ErrorVector ready to use. -// -// A common usage pattern is to embed an ErrorVector alongside a -// scanner in a data structure that uses the scanner. By passing a -// reference to an ErrorVector to the scanner's Init call, default -// error handling is obtained. -// -type ErrorVector struct { - errors []*Error -} - -// Reset resets an ErrorVector to no errors. -func (h *ErrorVector) Reset() { h.errors = h.errors[:0] } - -// ErrorCount returns the number of errors collected. -func (h *ErrorVector) ErrorCount() int { return len(h.errors) } - -// Within ErrorVector, an error is represented by an Error node. The -// position Pos, if valid, points to the beginning of the offending -// token, and the error condition is described by Msg. +// In an ErrorList, an error is represented by an *Error. +// The position Pos, if valid, points to the beginning of +// the offending token, and the error condition is described +// by Msg. // type Error struct { Pos token.Position Msg string } -func (e *Error) Error() string { +// Error implements the error interface. +func (e Error) Error() string { if e.Pos.Filename != "" || e.Pos.IsValid() { // don't print "<unknown position>" // TODO(gri) reconsider the semantics of Position.IsValid @@ -57,9 +31,19 @@ func (e *Error) Error() string { return e.Msg } -// An ErrorList is a (possibly sorted) list of Errors. +// ErrorList is a list of *Errors. +// The zero value for an ErrorList is an empty ErrorList ready to use. +// type ErrorList []*Error +// Add adds an Error with given position and error message to an ErrorList. +func (p *ErrorList) Add(pos token.Position, msg string) { + *p = append(*p, &Error{pos, msg}) +} + +// Reset resets an ErrorList to no errors. +func (p *ErrorList) Reset() { *p = (*p)[0:0] } + // ErrorList implements the sort Interface. func (p ErrorList) Len() int { return len(p) } func (p ErrorList) Swap(i, j int) { p[i], p[j] = p[j], p[i] } @@ -84,72 +68,47 @@ func (p ErrorList) Less(i, j int) bool { return false } +// Sort sorts an ErrorList. *Error entries are sorted by position, +// other errors are sorted by error message, and before any *Error +// entry. +// +func (p ErrorList) Sort() { + sort.Sort(p) +} + +// RemoveMultiples sorts an ErrorList and removes all but the first error per line. +func (p *ErrorList) RemoveMultiples() { + sort.Sort(p) + var last token.Position // initial last.Line is != any legal error line + i := 0 + for _, e := range *p { + if e.Pos.Filename != last.Filename || e.Pos.Line != last.Line { + last = e.Pos + (*p)[i] = e + i++ + } + } + (*p) = (*p)[0:i] +} + +// An ErrorList implements the error interface. func (p ErrorList) Error() string { switch len(p) { case 0: - return "unspecified error" + return "no errors" case 1: return p[0].Error() } return fmt.Sprintf("%s (and %d more errors)", p[0], len(p)-1) } -// These constants control the construction of the ErrorList -// returned by GetErrors. -// -const ( - Raw = iota // leave error list unchanged - Sorted // sort error list by file, line, and column number - NoMultiples // sort error list and leave only the first error per line -) - -// GetErrorList returns the list of errors collected by an ErrorVector. -// The construction of the ErrorList returned is controlled by the mode -// parameter. If there are no errors, the result is nil. -// -func (h *ErrorVector) GetErrorList(mode int) ErrorList { - if len(h.errors) == 0 { - return nil - } - - list := make(ErrorList, len(h.errors)) - copy(list, h.errors) - - if mode >= Sorted { - sort.Sort(list) - } - - if mode >= NoMultiples { - var last token.Position // initial last.Line is != any legal error line - i := 0 - for _, e := range list { - if e.Pos.Filename != last.Filename || e.Pos.Line != last.Line { - last = e.Pos - list[i] = e - i++ - } - } - list = list[0:i] - } - - return list -} - -// GetError is like GetErrorList, but it returns an error instead -// so that a nil result can be assigned to an error variable and -// remains nil. -// -func (h *ErrorVector) GetError(mode int) error { - if len(h.errors) == 0 { +// Err returns an error equivalent to this error list. +// If the list is empty, Err returns nil. +func (p ErrorList) Err() error { + if len(p) == 0 { return nil } - - return h.GetErrorList(mode) -} - -// ErrorVector implements the ErrorHandler interface. -func (h *ErrorVector) Error(pos token.Position, msg string) { - h.errors = append(h.errors, &Error{pos, msg}) + return p } // PrintError is a utility function that prints a list of errors to w, diff --git a/libgo/go/go/scanner/scanner.go b/libgo/go/go/scanner/scanner.go index 0aabfe34c41..2395363b0ec 100644 --- a/libgo/go/go/scanner/scanner.go +++ b/libgo/go/go/scanner/scanner.go @@ -2,21 +2,9 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package scanner implements a scanner for Go source text. Takes a []byte as -// source which can then be tokenized through repeated calls to the Scan -// function. Typical use: -// -// var s scanner.Scanner -// fset := token.NewFileSet() // position information is relative to fset -// file := fset.AddFile(filename, fset.Base(), len(src)) // register file -// s.Init(file, src, nil /* no error handler */, 0) -// for { -// pos, tok, lit := s.Scan() -// if tok == token.EOF { -// break -// } -// // do something here with pos, tok, and lit -// } +// Package scanner implements a scanner for Go source text. +// It takes a []byte as source which can then be tokenized +// through repeated calls to the Scan method. // package scanner @@ -30,6 +18,13 @@ import ( "unicode/utf8" ) +// An ErrorHandler may be provided to Scanner.Init. If a syntax error is +// encountered and a handler was installed, the handler is called with a +// position and an error message. The position points to the beginning of +// the offending token. +// +type ErrorHandler func(pos token.Position, msg string) + // A Scanner holds the scanner's internal state while processing // a given text. It can be allocated as part of another data // structure but must be initialized via Init before use. @@ -103,7 +98,7 @@ const ( // line information which is already present is ignored. Init causes a // panic if the file size does not match the src size. // -// Calls to Scan will use the error handler err if they encounter a +// Calls to Scan will invoke the error handler err if they encounter a // syntax error and err is not nil. Also, for each error encountered, // the Scanner field ErrorCount is incremented by one. The mode parameter // determines how comments are handled. @@ -134,7 +129,7 @@ func (s *Scanner) Init(file *token.File, src []byte, err ErrorHandler, mode Mode func (s *Scanner) error(offs int, msg string) { if s.err != nil { - s.err.Error(s.file.Position(s.file.Pos(offs)), msg) + s.err(s.file.Position(s.file.Pos(offs)), msg) } s.ErrorCount++ } diff --git a/libgo/go/go/scanner/scanner_test.go b/libgo/go/go/scanner/scanner_test.go index e7f7cd1c1e9..06223e23bd8 100644 --- a/libgo/go/go/scanner/scanner_test.go +++ b/libgo/go/go/scanner/scanner_test.go @@ -186,14 +186,6 @@ var source = func() []byte { return src }() -type testErrorHandler struct { - t *testing.T -} - -func (h *testErrorHandler) Error(pos token.Position, msg string) { - h.t.Errorf("Error() called (msg = %s)", msg) -} - func newlineCount(s string) int { n := 0 for i := 0; i < len(s); i++ { @@ -226,9 +218,14 @@ func TestScan(t *testing.T) { src_linecount := newlineCount(string(source)) whitespace_linecount := newlineCount(whitespace) + // error handler + eh := func(_ token.Position, msg string) { + t.Errorf("error handler called (msg = %s)", msg) + } + // verify scan var s Scanner - s.Init(fset.AddFile("", fset.Base(), len(source)), source, &testErrorHandler{t}, ScanComments|dontInsertSemis) + s.Init(fset.AddFile("", fset.Base(), len(source)), source, eh, ScanComments|dontInsertSemis) index := 0 // epos is the expected position epos := token.Position{ @@ -569,36 +566,37 @@ func TestStdErrorHander(t *testing.T) { "//line File1:1\n" + "@ @ @" // original file, line 1 again - v := new(ErrorVector) + var list ErrorList + eh := func(pos token.Position, msg string) { list.Add(pos, msg) } + var s Scanner - s.Init(fset.AddFile("File1", fset.Base(), len(src)), []byte(src), v, dontInsertSemis) + s.Init(fset.AddFile("File1", fset.Base(), len(src)), []byte(src), eh, dontInsertSemis) for { if _, tok, _ := s.Scan(); tok == token.EOF { break } } - list := v.GetErrorList(Raw) + if len(list) != s.ErrorCount { + t.Errorf("found %d errors, expected %d", len(list), s.ErrorCount) + } + if len(list) != 9 { t.Errorf("found %d raw errors, expected 9", len(list)) PrintError(os.Stderr, list) } - list = v.GetErrorList(Sorted) + list.Sort() if len(list) != 9 { t.Errorf("found %d sorted errors, expected 9", len(list)) PrintError(os.Stderr, list) } - list = v.GetErrorList(NoMultiples) + list.RemoveMultiples() if len(list) != 4 { t.Errorf("found %d one-per-line errors, expected 4", len(list)) PrintError(os.Stderr, list) } - - if v.ErrorCount() != s.ErrorCount { - t.Errorf("found %d errors, expected %d", v.ErrorCount(), s.ErrorCount) - } } type errorCollector struct { @@ -607,16 +605,15 @@ type errorCollector struct { pos token.Position // last error position encountered } -func (h *errorCollector) Error(pos token.Position, msg string) { - h.cnt++ - h.msg = msg - h.pos = pos -} - func checkError(t *testing.T, src string, tok token.Token, pos int, err string) { var s Scanner var h errorCollector - s.Init(fset.AddFile("", fset.Base(), len(src)), []byte(src), &h, ScanComments|dontInsertSemis) + eh := func(pos token.Position, msg string) { + h.cnt++ + h.msg = msg + h.pos = pos + } + s.Init(fset.AddFile("", fset.Base(), len(src)), []byte(src), eh, ScanComments|dontInsertSemis) _, tok0, _ := s.Scan() _, tok1, _ := s.Scan() if tok0 != tok { diff --git a/libgo/go/html/template/clone.go b/libgo/go/html/template/clone.go deleted file mode 100644 index d0d8ea46733..00000000000 --- a/libgo/go/html/template/clone.go +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package template - -import ( - "text/template/parse" -) - -// clone clones a template Node. -func clone(n parse.Node) parse.Node { - switch t := n.(type) { - case *parse.ActionNode: - return cloneAction(t) - case *parse.IfNode: - b := new(parse.IfNode) - copyBranch(&b.BranchNode, &t.BranchNode) - return b - case *parse.ListNode: - return cloneList(t) - case *parse.RangeNode: - b := new(parse.RangeNode) - copyBranch(&b.BranchNode, &t.BranchNode) - return b - case *parse.TemplateNode: - return cloneTemplate(t) - case *parse.TextNode: - return cloneText(t) - case *parse.WithNode: - b := new(parse.WithNode) - copyBranch(&b.BranchNode, &t.BranchNode) - return b - } - panic("cloning " + n.String() + " is unimplemented") -} - -// cloneAction returns a deep clone of n. -func cloneAction(n *parse.ActionNode) *parse.ActionNode { - // We use keyless fields because they won't compile if a field is added. - return &parse.ActionNode{n.NodeType, n.Line, clonePipe(n.Pipe)} -} - -// cloneList returns a deep clone of n. -func cloneList(n *parse.ListNode) *parse.ListNode { - if n == nil { - return nil - } - // We use keyless fields because they won't compile if a field is added. - c := parse.ListNode{n.NodeType, make([]parse.Node, len(n.Nodes))} - for i, child := range n.Nodes { - c.Nodes[i] = clone(child) - } - return &c -} - -// clonePipe returns a shallow clone of n. -// The escaper does not modify pipe descendants in place so there's no need to -// clone deeply. -func clonePipe(n *parse.PipeNode) *parse.PipeNode { - if n == nil { - return nil - } - // We use keyless fields because they won't compile if a field is added. - return &parse.PipeNode{n.NodeType, n.Line, n.Decl, n.Cmds} -} - -// cloneTemplate returns a deep clone of n. -func cloneTemplate(n *parse.TemplateNode) *parse.TemplateNode { - // We use keyless fields because they won't compile if a field is added. - return &parse.TemplateNode{n.NodeType, n.Line, n.Name, clonePipe(n.Pipe)} -} - -// cloneText clones the given node sharing its []byte. -func cloneText(n *parse.TextNode) *parse.TextNode { - // We use keyless fields because they won't compile if a field is added. - return &parse.TextNode{n.NodeType, n.Text} -} - -// copyBranch clones src into dst. -func copyBranch(dst, src *parse.BranchNode) { - // We use keyless fields because they won't compile if a field is added. - *dst = parse.BranchNode{ - src.NodeType, - src.Line, - clonePipe(src.Pipe), - cloneList(src.List), - cloneList(src.ElseList), - } -} diff --git a/libgo/go/html/template/clone_test.go b/libgo/go/html/template/clone_test.go index 39788173b99..c612775d4f0 100644 --- a/libgo/go/html/template/clone_test.go +++ b/libgo/go/html/template/clone_test.go @@ -7,86 +7,109 @@ package template import ( "bytes" "testing" + "text/template/parse" ) +func TestAddParseTree(t *testing.T) { + root := Must(New("root").Parse(`{{define "a"}} {{.}} {{template "b"}} {{.}} "></a>{{end}}`)) + tree, err := parse.Parse("t", `{{define "b"}}<a href="{{end}}`, "", "", nil, nil) + if err != nil { + t.Fatal(err) + } + added := Must(root.AddParseTree("b", tree["b"])) + b := new(bytes.Buffer) + err = added.ExecuteTemplate(b, "a", "1>0") + if err != nil { + t.Fatal(err) + } + if got, want := b.String(), ` 1>0 <a href=" 1%3e0 "></a>`; got != want { + t.Errorf("got %q want %q", got, want) + } +} + func TestClone(t *testing.T) { - tests := []struct { - input, want, wantClone string - }{ - { - `Hello, {{if true}}{{"<World>"}}{{end}}!`, - "Hello, <World>!", - "Hello, <World>!", - }, - { - `Hello, {{if false}}{{.X}}{{else}}{{"<World>"}}{{end}}!`, - "Hello, <World>!", - "Hello, <World>!", - }, - { - `Hello, {{with "<World>"}}{{.}}{{end}}!`, - "Hello, <World>!", - "Hello, <World>!", - }, - { - `{{range .}}<p>{{.}}</p>{{end}}`, - "<p>foo</p><p><bar></p><p>baz</p>", - "<p>foo</p><p><bar></p><p>baz</p>", - }, - { - `Hello, {{"<World>" | html}}!`, - "Hello, <World>!", - "Hello, <World>!", - }, - { - `Hello{{if 1}}, World{{else}}{{template "d"}}{{end}}!`, - "Hello, World!", - "Hello, World!", - }, + // The {{.}} will be executed with data "<i>*/" in different contexts. + // In the t0 template, it will be in a text context. + // In the t1 template, it will be in a URL context. + // In the t2 template, it will be in a JavaScript context. + // In the t3 template, it will be in a CSS context. + const tmpl = `{{define "a"}}{{template "lhs"}}{{.}}{{template "rhs"}}{{end}}` + b := new(bytes.Buffer) + + // Create an incomplete template t0. + t0 := Must(New("t0").Parse(tmpl)) + + // Clone t0 as t1. + t1 := Must(t0.Clone()) + Must(t1.Parse(`{{define "lhs"}} <a href=" {{end}}`)) + Must(t1.Parse(`{{define "rhs"}} "></a> {{end}}`)) + + // Execute t1. + b.Reset() + if err := t1.ExecuteTemplate(b, "a", "<i>*/"); err != nil { + t.Fatal(err) + } + if got, want := b.String(), ` <a href=" %3ci%3e*/ "></a> `; got != want { + t.Errorf("t1: got %q want %q", got, want) + } + + // Clone t0 as t2. + t2 := Must(t0.Clone()) + Must(t2.Parse(`{{define "lhs"}} <p onclick="javascript: {{end}}`)) + Must(t2.Parse(`{{define "rhs"}} "></p> {{end}}`)) + + // Execute t2. + b.Reset() + if err := t2.ExecuteTemplate(b, "a", "<i>*/"); err != nil { + t.Fatal(err) + } + if got, want := b.String(), ` <p onclick="javascript: "\u003ci\u003e*/" "></p> `; got != want { + t.Errorf("t2: got %q want %q", got, want) } - for _, test := range tests { - s, err := New("s").Parse(test.input) - if err != nil { - t.Errorf("input=%q: unexpected parse error %v", test.input, err) - } - - d, _ := New("d").Parse(test.input) - // Hack: just replace the root of the tree. - d.text.Root = cloneList(s.text.Root) - - if want, got := s.text.Root.String(), d.text.Root.String(); want != got { - t.Errorf("want %q, got %q", want, got) - } - - err = escapeTemplates(d, "d") - if err != nil { - t.Errorf("%q: failed to escape: %s", test.input, err) - continue - } - - if want, got := "s", s.Name(); want != got { - t.Errorf("want %q, got %q", want, got) - continue - } - if want, got := "d", d.Name(); want != got { - t.Errorf("want %q, got %q", want, got) - continue - } - - data := []string{"foo", "<bar>", "baz"} - - var b bytes.Buffer - d.Execute(&b, data) - if got := b.String(); got != test.wantClone { - t.Errorf("input=%q: want %q, got %q", test.input, test.wantClone, got) - } - - // Make sure escaping d did not affect s. - b.Reset() - s.text.Execute(&b, data) - if got := b.String(); got != test.want { - t.Errorf("input=%q: want %q, got %q", test.input, test.want, got) - } + // Clone t0 as t3, but do not execute t3 yet. + t3 := Must(t0.Clone()) + Must(t3.Parse(`{{define "lhs"}} <style> {{end}}`)) + Must(t3.Parse(`{{define "rhs"}} </style> {{end}}`)) + + // Complete t0. + Must(t0.Parse(`{{define "lhs"}} ( {{end}}`)) + Must(t0.Parse(`{{define "rhs"}} ) {{end}}`)) + + // Clone t0 as t4. Redefining the "lhs" template should fail. + t4 := Must(t0.Clone()) + if _, err := t4.Parse(`{{define "lhs"}} FAIL {{end}}`); err == nil { + t.Error(`redefine "lhs": got nil err want non-nil`) + } + + // Execute t0. + b.Reset() + if err := t0.ExecuteTemplate(b, "a", "<i>*/"); err != nil { + t.Fatal(err) + } + if got, want := b.String(), ` ( <i>*/ ) `; got != want { + t.Errorf("t0: got %q want %q", got, want) + } + + // Clone t0. This should fail, as t0 has already executed. + if _, err := t0.Clone(); err == nil { + t.Error(`t0.Clone(): got nil err want non-nil`) + } + + // Similarly, cloning sub-templates should fail. + if _, err := t0.Lookup("a").Clone(); err == nil { + t.Error(`t0.Lookup("a").Clone(): got nil err want non-nil`) + } + if _, err := t0.Lookup("lhs").Clone(); err == nil { + t.Error(`t0.Lookup("lhs").Clone(): got nil err want non-nil`) + } + + // Execute t3. + b.Reset() + if err := t3.ExecuteTemplate(b, "a", "<i>*/"); err != nil { + t.Fatal(err) + } + if got, want := b.String(), ` <style> ZgotmplZ </style> `; got != want { + t.Errorf("t3: got %q want %q", got, want) } } diff --git a/libgo/go/html/template/content.go b/libgo/go/html/template/content.go index 4de7ccde912..539664f9729 100644 --- a/libgo/go/html/template/content.go +++ b/libgo/go/html/template/content.go @@ -85,6 +85,22 @@ func indirect(a interface{}) interface{} { return v.Interface() } +var ( + errorType = reflect.TypeOf((*error)(nil)).Elem() + fmtStringerType = reflect.TypeOf((*fmt.Stringer)(nil)).Elem() +) + +// indirectToStringerOrError returns the value, after dereferencing as many times +// as necessary to reach the base type (or nil) or an implementation of fmt.Stringer +// or error, +func indirectToStringerOrError(a interface{}) interface{} { + v := reflect.ValueOf(a) + for !v.Type().Implements(fmtStringerType) && !v.Type().Implements(errorType) && v.Kind() == reflect.Ptr && !v.IsNil() { + v = v.Elem() + } + return v.Interface() +} + // stringify converts its arguments to a string and the type of the content. // All pointers are dereferenced, as in the text/template package. func stringify(args ...interface{}) (string, contentType) { @@ -107,7 +123,7 @@ func stringify(args ...interface{}) (string, contentType) { } } for i, arg := range args { - args[i] = indirect(arg) + args[i] = indirectToStringerOrError(arg) } return fmt.Sprint(args...), contentTypePlain } diff --git a/libgo/go/html/template/content_test.go b/libgo/go/html/template/content_test.go index c96a521a59c..3c32e5e89cf 100644 --- a/libgo/go/html/template/content_test.go +++ b/libgo/go/html/template/content_test.go @@ -6,6 +6,7 @@ package template import ( "bytes" + "fmt" "strings" "testing" ) @@ -219,3 +220,42 @@ func TestTypedContent(t *testing.T) { } } } + +// Test that we print using the String method. Was issue 3073. +type stringer struct { + v int +} + +func (s *stringer) String() string { + return fmt.Sprintf("string=%d", s.v) +} + +type errorer struct { + v int +} + +func (s *errorer) Error() string { + return fmt.Sprintf("error=%d", s.v) +} + +func TestStringer(t *testing.T) { + s := &stringer{3} + b := new(bytes.Buffer) + tmpl := Must(New("x").Parse("{{.}}")) + if err := tmpl.Execute(b, s); err != nil { + t.Fatal(err) + } + var expect = "string=3" + if b.String() != expect { + t.Errorf("expected %q got %q", expect, b.String()) + } + e := &errorer{7} + b.Reset() + if err := tmpl.Execute(b, e); err != nil { + t.Fatal(err) + } + expect = "error=7" + if b.String() != expect { + t.Errorf("expected %q got %q", expect, b.String()) + } +} diff --git a/libgo/go/html/template/doc.go b/libgo/go/html/template/doc.go index 77a9bf2e225..3699ea1a91c 100644 --- a/libgo/go/html/template/doc.go +++ b/libgo/go/html/template/doc.go @@ -3,21 +3,25 @@ // license that can be found in the LICENSE file. /* -Package template (html/template) is a specialization of package text/template -that automates the construction of HTML output that is safe against code -injection. +Package template (html/template) implements data-driven templates for +generating HTML output safe against code injection. It provides the +same interface as package text/template and should be used instead of +text/template whenever the output is HTML. +The documentation here focuses on the security features of the package. +For information about how to program the templates themselves, see the +documentation for text/template. Introduction -This package wraps package template so you can use the standard template API -to parse and execute templates. +This package wraps package text/template so you can share its template API +to parse and execute HTML templates safely. - set, err := new(template.Set).Parse(...) + tmpl, err := template.New("name").Parse(...) // Error checking elided - err = set.Execute(out, "Foo", data) + err = tmpl.Execute(out, data) -If successful, set will now be injection-safe. Otherwise, err is an error +If successful, tmpl will now be injection-safe. Otherwise, err is an error defined in the docs for ErrorCode. HTML templates treat data values as plain text which should be encoded so they @@ -25,7 +29,8 @@ can be safely embedded in an HTML document. The escaping is contextual, so actions can appear within JavaScript, CSS, and URI contexts. The security model used by this package assumes that template authors are -trusted, while Execute's data parameter is not. More details are provided below. +trusted, while text/template Execute's data parameter is not. More details are +provided below. Example @@ -38,7 +43,7 @@ produces Hello, <script>alert('you have been pwned')</script>! -but with contextual autoescaping, +but the contextual autoescaping in html/template import "html/template" ... @@ -167,18 +172,18 @@ This package assumes that template authors are trusted, that Execute's data parameter is not, and seeks to preserve the properties below in the face of untrusted data: -Structure Preservation Property +Structure Preservation Property: "... when a template author writes an HTML tag in a safe templating language, the browser will interpret the corresponding portion of the output as a tag regardless of the values of untrusted data, and similarly for other structures such as attribute boundaries and JS and CSS string boundaries." -Code Effect Property +Code Effect Property: "... only code specified by the template author should run as a result of injecting the template output into a page and all code specified by the template author should run as a result of the same." -Least Surprise Property +Least Surprise Property: "A developer (or code reviewer) familiar with HTML, CSS, and JavaScript, who knows that contextual autoescaping happens should be able to look at a {{.}} and correctly infer what sanitization happens." diff --git a/libgo/go/html/template/escape.go b/libgo/go/html/template/escape.go index c6f723ae4a4..a058e20d7b3 100644 --- a/libgo/go/html/template/escape.go +++ b/libgo/go/html/template/escape.go @@ -46,30 +46,30 @@ func escapeTemplates(tmpl *Template, names ...string) error { // funcMap maps command names to functions that render their inputs safe. var funcMap = template.FuncMap{ - "exp_template_html_attrescaper": attrEscaper, - "exp_template_html_commentescaper": commentEscaper, - "exp_template_html_cssescaper": cssEscaper, - "exp_template_html_cssvaluefilter": cssValueFilter, - "exp_template_html_htmlnamefilter": htmlNameFilter, - "exp_template_html_htmlescaper": htmlEscaper, - "exp_template_html_jsregexpescaper": jsRegexpEscaper, - "exp_template_html_jsstrescaper": jsStrEscaper, - "exp_template_html_jsvalescaper": jsValEscaper, - "exp_template_html_nospaceescaper": htmlNospaceEscaper, - "exp_template_html_rcdataescaper": rcdataEscaper, - "exp_template_html_urlescaper": urlEscaper, - "exp_template_html_urlfilter": urlFilter, - "exp_template_html_urlnormalizer": urlNormalizer, + "html_template_attrescaper": attrEscaper, + "html_template_commentescaper": commentEscaper, + "html_template_cssescaper": cssEscaper, + "html_template_cssvaluefilter": cssValueFilter, + "html_template_htmlnamefilter": htmlNameFilter, + "html_template_htmlescaper": htmlEscaper, + "html_template_jsregexpescaper": jsRegexpEscaper, + "html_template_jsstrescaper": jsStrEscaper, + "html_template_jsvalescaper": jsValEscaper, + "html_template_nospaceescaper": htmlNospaceEscaper, + "html_template_rcdataescaper": rcdataEscaper, + "html_template_urlescaper": urlEscaper, + "html_template_urlfilter": urlFilter, + "html_template_urlnormalizer": urlNormalizer, } // equivEscapers matches contextual escapers to equivalent template builtins. var equivEscapers = map[string]string{ - "exp_template_html_attrescaper": "html", - "exp_template_html_htmlescaper": "html", - "exp_template_html_nospaceescaper": "html", - "exp_template_html_rcdataescaper": "html", - "exp_template_html_urlescaper": "urlquery", - "exp_template_html_urlnormalizer": "urlquery", + "html_template_attrescaper": "html", + "html_template_htmlescaper": "html", + "html_template_nospaceescaper": "html", + "html_template_rcdataescaper": "html", + "html_template_urlescaper": "urlquery", + "html_template_urlnormalizer": "urlquery", } // escaper collects type inferences about templates and changes needed to make @@ -147,17 +147,17 @@ func (e *escaper) escapeAction(c context, n *parse.ActionNode) context { case stateURL, stateCSSDqStr, stateCSSSqStr, stateCSSDqURL, stateCSSSqURL, stateCSSURL: switch c.urlPart { case urlPartNone: - s = append(s, "exp_template_html_urlfilter") + s = append(s, "html_template_urlfilter") fallthrough case urlPartPreQuery: switch c.state { case stateCSSDqStr, stateCSSSqStr: - s = append(s, "exp_template_html_cssescaper") + s = append(s, "html_template_cssescaper") default: - s = append(s, "exp_template_html_urlnormalizer") + s = append(s, "html_template_urlnormalizer") } case urlPartQueryOrFrag: - s = append(s, "exp_template_html_urlescaper") + s = append(s, "html_template_urlescaper") case urlPartUnknown: return context{ state: stateError, @@ -167,27 +167,27 @@ func (e *escaper) escapeAction(c context, n *parse.ActionNode) context { panic(c.urlPart.String()) } case stateJS: - s = append(s, "exp_template_html_jsvalescaper") + s = append(s, "html_template_jsvalescaper") // A slash after a value starts a div operator. c.jsCtx = jsCtxDivOp case stateJSDqStr, stateJSSqStr: - s = append(s, "exp_template_html_jsstrescaper") + s = append(s, "html_template_jsstrescaper") case stateJSRegexp: - s = append(s, "exp_template_html_jsregexpescaper") + s = append(s, "html_template_jsregexpescaper") case stateCSS: - s = append(s, "exp_template_html_cssvaluefilter") + s = append(s, "html_template_cssvaluefilter") case stateText: - s = append(s, "exp_template_html_htmlescaper") + s = append(s, "html_template_htmlescaper") case stateRCDATA: - s = append(s, "exp_template_html_rcdataescaper") + s = append(s, "html_template_rcdataescaper") case stateAttr: // Handled below in delim check. case stateAttrName, stateTag: c.state = stateAttrName - s = append(s, "exp_template_html_htmlnamefilter") + s = append(s, "html_template_htmlnamefilter") default: if isComment(c.state) { - s = append(s, "exp_template_html_commentescaper") + s = append(s, "html_template_commentescaper") } else { panic("unexpected state " + c.state.String()) } @@ -196,9 +196,9 @@ func (e *escaper) escapeAction(c context, n *parse.ActionNode) context { case delimNone: // No extra-escaping needed for raw text content. case delimSpaceOrTagEnd: - s = append(s, "exp_template_html_nospaceescaper") + s = append(s, "html_template_nospaceescaper") default: - s = append(s, "exp_template_html_attrescaper") + s = append(s, "html_template_attrescaper") } e.editActionNode(n, s) return c @@ -260,22 +260,22 @@ func ensurePipelineContains(p *parse.PipeNode, s []string) { // redundantFuncs[a][b] implies that funcMap[b](funcMap[a](x)) == funcMap[a](x) // for all x. var redundantFuncs = map[string]map[string]bool{ - "exp_template_html_commentescaper": { - "exp_template_html_attrescaper": true, - "exp_template_html_nospaceescaper": true, - "exp_template_html_htmlescaper": true, + "html_template_commentescaper": { + "html_template_attrescaper": true, + "html_template_nospaceescaper": true, + "html_template_htmlescaper": true, }, - "exp_template_html_cssescaper": { - "exp_template_html_attrescaper": true, + "html_template_cssescaper": { + "html_template_attrescaper": true, }, - "exp_template_html_jsregexpescaper": { - "exp_template_html_attrescaper": true, + "html_template_jsregexpescaper": { + "html_template_attrescaper": true, }, - "exp_template_html_jsstrescaper": { - "exp_template_html_attrescaper": true, + "html_template_jsstrescaper": { + "html_template_attrescaper": true, }, - "exp_template_html_urlescaper": { - "exp_template_html_urlnormalizer": true, + "html_template_urlescaper": { + "html_template_urlnormalizer": true, }, } @@ -505,7 +505,7 @@ func (e *escaper) escapeTree(c context, name string, line int) (context, string) dt := e.template(dname) if dt == nil { dt = template.New(dname) - dt.Tree = &parse.Tree{Name: dname, Root: cloneList(t.Root)} + dt.Tree = &parse.Tree{Name: dname, Root: t.Root.CopyList()} e.derived[dname] = dt } t = dt @@ -593,7 +593,7 @@ func (e *escaper) escapeText(c context, n *parse.TextNode) context { } } for j := i; j < end; j++ { - if s[j] == '<' && !bytes.HasPrefix(s[j:], doctypeBytes) { + if s[j] == '<' && !bytes.HasPrefix(bytes.ToUpper(s[j:]), doctypeBytes) { b.Write(s[written:j]) b.WriteString("<") written = j + 1 diff --git a/libgo/go/html/template/escape_test.go b/libgo/go/html/template/escape_test.go index 70cada3f50b..2bbb1b1bc94 100644 --- a/libgo/go/html/template/escape_test.go +++ b/libgo/go/html/template/escape_test.go @@ -223,14 +223,14 @@ func TestEscape(t *testing.T) { `<button onclick='alert("\x3cHello\x3e")'>`, }, { - "badMarshaller", + "badMarshaler", `<button onclick='alert(1/{{.B}}in numbers)'>`, `<button onclick='alert(1/ /* json: error calling MarshalJSON for type *template.badMarshaler: invalid character 'f' looking for beginning of object key string */null in numbers)'>`, }, { - "jsMarshaller", + "jsMarshaler", `<button onclick='alert({{.M}})'>`, - `<button onclick='alert({"<foo>":"O'Reilly"})'>`, + `<button onclick='alert({"\u003cfoo\u003e":"O'Reilly"})'>`, }, { "jsStrNotUnderEscaped", @@ -432,6 +432,11 @@ func TestEscape(t *testing.T) { "<!DOCTYPE html>Hello, World!", }, { + "HTML doctype not case-insensitive", + "<!doCtYPE htMl>Hello, World!", + "<!doCtYPE htMl>Hello, World!", + }, + { "No doctype injection", `<!{{"DOCTYPE"}}`, "<!DOCTYPE", diff --git a/libgo/go/html/template/html.go b/libgo/go/html/template/html.go index 7b77d6531ab..36c88e23e6e 100644 --- a/libgo/go/html/template/html.go +++ b/libgo/go/html/template/html.go @@ -134,7 +134,7 @@ var htmlNospaceNormReplacementTable = []string{ '`': "`", } -// htmlReplacer returns s with runes replaced acccording to replacementTable +// htmlReplacer returns s with runes replaced according to replacementTable // and when badRunes is true, certain bad runes are allowed through unescaped. func htmlReplacer(s string, replacementTable []string, badRunes bool) string { written, b := 0, new(bytes.Buffer) diff --git a/libgo/go/html/template/template.go b/libgo/go/html/template/template.go index 9ffe41413a8..b0bae7a54fb 100644 --- a/libgo/go/html/template/template.go +++ b/libgo/go/html/template/template.go @@ -50,7 +50,7 @@ func (t *Template) Execute(wr io.Writer, data interface{}) (err error) { // ExecuteTemplate applies the template associated with t that has the given // name to the specified data object and writes the output to wr. func (t *Template) ExecuteTemplate(wr io.Writer, name string, data interface{}) error { - tmpl, err := t.lookupAndEscapeTemplate(wr, name) + tmpl, err := t.lookupAndEscapeTemplate(name) if err != nil { return err } @@ -60,7 +60,7 @@ func (t *Template) ExecuteTemplate(wr io.Writer, name string, data interface{}) // lookupAndEscapeTemplate guarantees that the template with the given name // is escaped, or returns an error if it cannot be. It returns the named // template. -func (t *Template) lookupAndEscapeTemplate(wr io.Writer, name string) (tmpl *Template, err error) { +func (t *Template) lookupAndEscapeTemplate(name string) (tmpl *Template, err error) { t.nameSpace.mu.Lock() defer t.nameSpace.mu.Unlock() tmpl = t.set[name] @@ -106,14 +106,71 @@ func (t *Template) Parse(src string) (*Template, error) { return t, nil } -// AddParseTree is unimplemented. -func (t *Template) AddParseTree(name string, tree *parse.Tree) error { - return fmt.Errorf("html/template: AddParseTree unimplemented") +// AddParseTree creates a new template with the name and parse tree +// and associates it with t. +// +// It returns an error if t has already been executed. +func (t *Template) AddParseTree(name string, tree *parse.Tree) (*Template, error) { + t.nameSpace.mu.Lock() + defer t.nameSpace.mu.Unlock() + if t.escaped { + return nil, fmt.Errorf("html/template: cannot AddParseTree to %q after it has executed", t.Name()) + } + text, err := t.text.AddParseTree(name, tree) + if err != nil { + return nil, err + } + ret := &Template{ + false, + text, + t.nameSpace, + } + t.set[name] = ret + return ret, nil } -// Clone is unimplemented. -func (t *Template) Clone(name string) error { - return fmt.Errorf("html/template: Clone unimplemented") +// Clone returns a duplicate of the template, including all associated +// templates. The actual representation is not copied, but the name space of +// associated templates is, so further calls to Parse in the copy will add +// templates to the copy but not to the original. Clone can be used to prepare +// common templates and use them with variant definitions for other templates +// by adding the variants after the clone is made. +// +// It returns an error if t has already been executed. +func (t *Template) Clone() (*Template, error) { + t.nameSpace.mu.Lock() + defer t.nameSpace.mu.Unlock() + if t.escaped { + return nil, fmt.Errorf("html/template: cannot Clone %q after it has executed", t.Name()) + } + textClone, err := t.text.Clone() + if err != nil { + return nil, err + } + ret := &Template{ + false, + textClone, + &nameSpace{ + set: make(map[string]*Template), + }, + } + for _, x := range textClone.Templates() { + name := x.Name() + src := t.set[name] + if src == nil || src.escaped { + return nil, fmt.Errorf("html/template: cannot Clone %q after it has executed", t.Name()) + } + x.Tree = &parse.Tree{ + Name: x.Tree.Name, + Root: x.Tree.Root.CopyList(), + } + ret.set[name] = &Template{ + false, + x, + ret.nameSpace, + } + } + return ret, nil } // New allocates a new HTML template with the given name. diff --git a/libgo/go/image/decode_example_test.go b/libgo/go/image/decode_example_test.go new file mode 100644 index 00000000000..aa5a841c0a5 --- /dev/null +++ b/libgo/go/image/decode_example_test.go @@ -0,0 +1,79 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This example demonstrates decoding a JPEG image and examining its pixels. +package image_test + +import ( + "fmt" + "image" + "log" + "os" + + // Package image/jpeg is not used explicitly in the code below, + // but is imported for its initialization side-effect, which allows + // image.Decode to understand JPEG formatted images. Uncomment these + // two lines to also understand GIF and PNG images: + // _ "image/gif" + // _ "image/png" + _ "image/jpeg" +) + +func Example() { + // Open the file. + file, err := os.Open("testdata/video-001.jpeg") + if err != nil { + log.Fatal(err) + } + defer file.Close() + + // Decode the image. + m, _, err := image.Decode(file) + if err != nil { + log.Fatal(err) + } + bounds := m.Bounds() + + // Calculate a 16-bin histogram for m's red, green, blue and alpha components. + // + // An image's bounds do not necessarily start at (0, 0), so the two loops start + // at bounds.Min.Y and bounds.Min.X. Looping over Y first and X second is more + // likely to result in better memory access patterns than X first and Y second. + var histogram [16][4]int + for y := bounds.Min.Y; y < bounds.Max.Y; y++ { + for x := bounds.Min.X; x < bounds.Max.X; x++ { + r, g, b, a := m.At(x, y).RGBA() + // A color's RGBA method returns values in the range [0, 65535]. + // Shifting by 12 reduces this to the range [0, 15]. + histogram[r>>12][0]++ + histogram[g>>12][1]++ + histogram[b>>12][2]++ + histogram[a>>12][3]++ + } + } + + // Print the results. + fmt.Printf("%-14s %6s %6s %6s %6s\n", "bin", "red", "green", "blue", "alpha") + for i, x := range histogram { + fmt.Printf("0x%04x-0x%04x: %6d %6d %6d %6d\n", i<<12, (i+1)<<12-1, x[0], x[1], x[2], x[3]) + } + // Output: + // bin red green blue alpha + // 0x0000-0x0fff: 471 819 7596 0 + // 0x1000-0x1fff: 576 2892 726 0 + // 0x2000-0x2fff: 1038 2330 943 0 + // 0x3000-0x3fff: 883 2321 1014 0 + // 0x4000-0x4fff: 501 1295 525 0 + // 0x5000-0x5fff: 302 962 242 0 + // 0x6000-0x6fff: 219 358 150 0 + // 0x7000-0x7fff: 352 281 192 0 + // 0x8000-0x8fff: 3688 216 246 0 + // 0x9000-0x9fff: 2277 237 283 0 + // 0xa000-0xafff: 971 254 357 0 + // 0xb000-0xbfff: 317 306 429 0 + // 0xc000-0xcfff: 203 402 401 0 + // 0xd000-0xdfff: 256 394 241 0 + // 0xe000-0xefff: 378 343 173 0 + // 0xf000-0xffff: 3018 2040 1932 15450 +} diff --git a/libgo/go/image/png/reader_test.go b/libgo/go/image/png/reader_test.go index 7eb1fc21a89..24c4ea44808 100644 --- a/libgo/go/image/png/reader_test.go +++ b/libgo/go/image/png/reader_test.go @@ -246,7 +246,7 @@ var readerErrors = []struct { file string err string }{ - {"invalid-zlib.png", "zlib checksum error"}, + {"invalid-zlib.png", "zlib: invalid checksum"}, {"invalid-crc32.png", "invalid checksum"}, {"invalid-noend.png", "unexpected EOF"}, {"invalid-trunc.png", "unexpected EOF"}, diff --git a/libgo/go/image/png/writer.go b/libgo/go/image/png/writer.go index 286a3bc15db..57c03792b59 100644 --- a/libgo/go/image/png/writer.go +++ b/libgo/go/image/png/writer.go @@ -263,10 +263,7 @@ func filter(cr *[nFilter][]byte, pr []byte, bpp int) int { } func writeImage(w io.Writer, m image.Image, cb int) error { - zw, err := zlib.NewWriter(w) - if err != nil { - return err - } + zw := zlib.NewWriter(w) defer zw.Close() bpp := 0 // Bytes per pixel. @@ -391,8 +388,7 @@ func writeImage(w io.Writer, m image.Image, cb int) error { f := filter(&cr, pr, bpp) // Write the compressed bytes. - _, err = zw.Write(cr[f]) - if err != nil { + if _, err := zw.Write(cr[f]); err != nil { return err } diff --git a/libgo/go/image/ycbcr_test.go b/libgo/go/image/ycbcr_test.go index eb8b1950bfe..b2373f79ba3 100644 --- a/libgo/go/image/ycbcr_test.go +++ b/libgo/go/image/ycbcr_test.go @@ -50,6 +50,9 @@ func TestYCbCr(t *testing.T) { testYCbCr(t, r, subsampleRatio, delta) } } + if testing.Short() { + break + } } } diff --git a/libgo/go/io/io.go b/libgo/go/io/io.go index bbfa6c2b2aa..7074834d613 100644 --- a/libgo/go/io/io.go +++ b/libgo/go/io/io.go @@ -6,6 +6,10 @@ // Its primary job is to wrap existing implementations of such primitives, // such as those in package os, into shared public interfaces that // abstract the functionality, plus some other related primitives. +// +// Because these interfaces and primitives wrap lower-level operations with +// various implementations, unless otherwise informed clients should not +// assume they are safe for parallel execution. package io import ( @@ -156,6 +160,9 @@ type WriterTo interface { // If ReadAt is reading from an input source with a seek offset, // ReadAt should not affect nor be affected by the underlying // seek offset. +// +// Clients of ReadAt can execute parallel ReadAt calls on the +// same input source. type ReaderAt interface { ReadAt(p []byte, off int64) (n int, err error) } diff --git a/libgo/go/io/ioutil/tempfile.go b/libgo/go/io/ioutil/tempfile.go index 645eed6abb8..42d2e675869 100644 --- a/libgo/go/io/ioutil/tempfile.go +++ b/libgo/go/io/ioutil/tempfile.go @@ -49,7 +49,7 @@ func TempFile(dir, prefix string) (f *os.File, err error) { for i := 0; i < 10000; i++ { name := filepath.Join(dir, prefix+nextSuffix()) f, err = os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600) - if pe, ok := err.(*os.PathError); ok && pe.Err == os.EEXIST { + if os.IsExist(err) { if nconflict++; nconflict > 10 { rand = reseed() } @@ -76,7 +76,7 @@ func TempDir(dir, prefix string) (name string, err error) { for i := 0; i < 10000; i++ { try := filepath.Join(dir, prefix+nextSuffix()) err = os.Mkdir(try, 0700) - if pe, ok := err.(*os.PathError); ok && pe.Err == os.EEXIST { + if os.IsExist(err) { if nconflict++; nconflict > 10 { rand = reseed() } diff --git a/libgo/go/io/pipe.go b/libgo/go/io/pipe.go index cf05e0c1ad7..f3f0f175706 100644 --- a/libgo/go/io/pipe.go +++ b/libgo/go/io/pipe.go @@ -175,6 +175,10 @@ func (w *PipeWriter) CloseWithError(err error) error { // with code expecting an io.Writer. // Reads on one end are matched with writes on the other, // copying data directly between the two; there is no internal buffering. +// It is safe to call Read and Write in parallel with each other or with +// Close. Close will complete once pending I/O is done. Parallel calls to +// Read, and parallel calls to Write, are also safe: +// the individual calls will be gated sequentially. func Pipe() (*PipeReader, *PipeWriter) { p := new(pipe) p.rwait.L = &p.l diff --git a/libgo/go/log/log.go b/libgo/go/log/log.go index a5d88fd9b34..02a407ebc60 100644 --- a/libgo/go/log/log.go +++ b/libgo/go/log/log.go @@ -14,6 +14,7 @@ package log import ( "bytes" + _ "debug/elf" "fmt" "io" "os" diff --git a/libgo/go/log/log_test.go b/libgo/go/log/log_test.go index 72ebf398eda..158c3d93c7e 100644 --- a/libgo/go/log/log_test.go +++ b/libgo/go/log/log_test.go @@ -17,9 +17,9 @@ const ( Rdate = `[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]` Rtime = `[0-9][0-9]:[0-9][0-9]:[0-9][0-9]` Rmicroseconds = `\.[0-9][0-9][0-9][0-9][0-9][0-9]` - Rline = `[0-9]+:` // must update if the calls to l.Printf / l.Print below move - Rlongfile = `.*/[A-Za-z0-9_\-]+\.go:|\?\?\?:` + Rline - Rshortfile = `[A-Za-z0-9_\-]+\.go:|\?\?\?:` + Rline + Rline = `(54|56):` // must update if the calls to l.Printf / l.Print below move + Rlongfile = `.*/[A-Za-z0-9_\-]+\.go:` + Rline + Rshortfile = `[A-Za-z0-9_\-]+\.go:` + Rline ) type tester struct { diff --git a/libgo/go/log/syslog/syslog.go b/libgo/go/log/syslog/syslog.go index aef63480f16..f53310cb0a1 100644 --- a/libgo/go/log/syslog/syslog.go +++ b/libgo/go/log/syslog/syslog.go @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// +build !windows,!plan9 + // Package syslog provides a simple interface to the system log service. It // can send messages to the syslog daemon using UNIX domain sockets, UDP, or // TCP connections. @@ -136,25 +138,33 @@ func (w *Writer) Debug(m string) (err error) { } func (n netConn) writeBytes(p Priority, prefix string, b []byte) (int, error) { - return fmt.Fprintf(n.conn, "<%d>%s: %s\n", p, prefix, b) + _, err := fmt.Fprintf(n.conn, "<%d>%s: %s\n", p, prefix, b) + if err != nil { + return 0, err + } + return len(b), nil } func (n netConn) writeString(p Priority, prefix string, s string) (int, error) { - return fmt.Fprintf(n.conn, "<%d>%s: %s\n", p, prefix, s) + _, err := fmt.Fprintf(n.conn, "<%d>%s: %s\n", p, prefix, s) + if err != nil { + return 0, err + } + return len(s), nil } func (n netConn) close() error { return n.conn.Close() } -// NewLogger provides an object that implements the full log.Logger interface, -// but sends messages to Syslog instead; flag is passed as is to Logger; -// priority will be used for all messages sent using this interface. -// All messages are logged with priority p. -func NewLogger(p Priority, flag int) *log.Logger { +// NewLogger creates a log.Logger whose output is written to +// the system log service with the specified priority. The logFlag +// argument is the flag set passed through to log.New to create +// the Logger. +func NewLogger(p Priority, logFlag int) (*log.Logger, error) { s, err := New(p, "") if err != nil { - return nil + return nil, err } - return log.New(s, "", flag) + return log.New(s, "", logFlag), nil } diff --git a/libgo/go/log/syslog/syslog_test.go b/libgo/go/log/syslog/syslog_test.go index b9793e91abd..0fd6239059a 100644 --- a/libgo/go/log/syslog/syslog_test.go +++ b/libgo/go/log/syslog/syslog_test.go @@ -1,6 +1,9 @@ // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. + +// +build !windows,!plan9 + package syslog import ( @@ -61,9 +64,9 @@ func TestNewLogger(t *testing.T) { if skipNetTest(t) { return } - f := NewLogger(LOG_INFO, 0) + f, err := NewLogger(LOG_INFO, 0) if f == nil { - t.Error("NewLogger() failed") + t.Error(err) } } diff --git a/libgo/go/log/syslog/syslog_unix.go b/libgo/go/log/syslog/syslog_unix.go index b1c929ad2fe..46a164dd577 100644 --- a/libgo/go/log/syslog/syslog_unix.go +++ b/libgo/go/log/syslog/syslog_unix.go @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// +build !windows,!plan9 + package syslog import ( diff --git a/libgo/go/math/big/calibrate_test.go b/libgo/go/math/big/calibrate_test.go index 0950eeedbd2..efe1837bba3 100644 --- a/libgo/go/math/big/calibrate_test.go +++ b/libgo/go/math/big/calibrate_test.go @@ -8,7 +8,7 @@ // results are somewhat fragile; use repeated runs to get // a clear picture. -// Usage: gotest -calibrate +// Usage: go test -run=TestCalibrate -calibrate package big diff --git a/libgo/go/math/big/nat.go b/libgo/go/math/big/nat.go index 6e1c7ffde4e..da1ac944c5c 100644 --- a/libgo/go/math/big/nat.go +++ b/libgo/go/math/big/nat.go @@ -897,7 +897,7 @@ func (q nat) convertWords(s []byte, charset string, b Word, ndigits int, bb Word } // Split blocks greater than leafSize Words (or set to 0 to disable recursive conversion) -// Benchmark and configure leafSize using: gotest -test.bench="Leaf" +// Benchmark and configure leafSize using: go test -bench="Leaf" // 8 and 16 effective on 3.0 GHz Xeon "Clovertown" CPU (128 byte cache lines) // 8 and 16 effective on 2.66 GHz Core 2 Duo "Penryn" CPU var leafSize int = 8 // number of Word-size binary values treat as a monolithic block diff --git a/libgo/go/math/big/nat_test.go b/libgo/go/math/big/nat_test.go index 25e39273c0c..7f3f76dc36f 100644 --- a/libgo/go/math/big/nat_test.go +++ b/libgo/go/math/big/nat_test.go @@ -512,6 +512,9 @@ func TestStringPowers(t *testing.T) { t.Errorf("failed at %d ** %d in base %d: %s != %s", b, p, b, xs, xs2) } } + if b >= 3 && testing.Short() { + break + } } } diff --git a/libgo/go/math/const.go b/libgo/go/math/const.go index 282561f98bb..f1247c383fd 100644 --- a/libgo/go/math/const.go +++ b/libgo/go/math/const.go @@ -6,7 +6,7 @@ package math // Mathematical constants. -// Reference: http://www.research.att.com/~njas/sequences/Axxxxxx +// Reference: http://oeis.org/Axxxxxx const ( E = 2.71828182845904523536028747135266249775724709369995957496696763 // A001113 Pi = 3.14159265358979323846264338327950288419716939937510582097494459 // A000796 @@ -27,11 +27,11 @@ const ( // Max is the largest finite value representable by the type. // SmallestNonzero is the smallest positive, non-zero value representable by the type. const ( - MaxFloat32 = 3.40282346638528859811704183484516925440e+38 /* 2**127 * (2**24 - 1) / 2**23 */ - SmallestNonzeroFloat32 = 1.401298464324817070923729583289916131280e-45 /* 1 / 2**(127 - 1 + 23) */ + MaxFloat32 = 3.40282346638528859811704183484516925440e+38 // 2**127 * (2**24 - 1) / 2**23 + SmallestNonzeroFloat32 = 1.401298464324817070923729583289916131280e-45 // 1 / 2**(127 - 1 + 23) - MaxFloat64 = 1.797693134862315708145274237317043567981e+308 /* 2**1023 * (2**53 - 1) / 2**52 */ - SmallestNonzeroFloat64 = 4.940656458412465441765687928682213723651e-324 /* 1 / 2**(1023 - 1 + 52) */ + MaxFloat64 = 1.797693134862315708145274237317043567981e+308 // 2**1023 * (2**53 - 1) / 2**52 + SmallestNonzeroFloat64 = 4.940656458412465441765687928682213723651e-324 // 1 / 2**(1023 - 1 + 52) ) // Integer limit values. diff --git a/libgo/go/math/gamma.go b/libgo/go/math/gamma.go index 2385a53b8a5..7c6f421bad1 100644 --- a/libgo/go/math/gamma.go +++ b/libgo/go/math/gamma.go @@ -116,7 +116,7 @@ func stirling(x float64) float64 { // Gamma(±Inf) = ±Inf // Gamma(NaN) = NaN // Large values overflow to +Inf. -// Negative integer values equal ±Inf. +// Zero and negative integer arguments return ±Inf. func Gamma(x float64) float64 { const Euler = 0.57721566490153286060651209008240243104215933593992 // A001620 // special cases diff --git a/libgo/go/math/rand/rand.go b/libgo/go/math/rand/rand.go index 89552192030..94f84a85fbe 100644 --- a/libgo/go/math/rand/rand.go +++ b/libgo/go/math/rand/rand.go @@ -49,9 +49,10 @@ func (r *Rand) Int() int { } // Int63n returns, as an int64, a non-negative pseudo-random number in [0,n). +// It panics if n <= 0. func (r *Rand) Int63n(n int64) int64 { if n <= 0 { - return 0 + panic("invalid argument to Int63n") } max := int64((1 << 63) - 1 - (1<<63)%uint64(n)) v := r.Int63() @@ -62,9 +63,10 @@ func (r *Rand) Int63n(n int64) int64 { } // Int31n returns, as an int32, a non-negative pseudo-random number in [0,n). +// It panics if n <= 0. func (r *Rand) Int31n(n int32) int32 { if n <= 0 { - return 0 + panic("invalid argument to Int31n") } max := int32((1 << 31) - 1 - (1<<31)%uint32(n)) v := r.Int31() @@ -75,7 +77,11 @@ func (r *Rand) Int31n(n int32) int32 { } // Intn returns, as an int, a non-negative pseudo-random number in [0,n). +// It panics if n <= 0. func (r *Rand) Intn(n int) int { + if n <= 0 { + panic("invalid argument to Intn") + } if n <= 1<<31-1 { return int(r.Int31n(int32(n))) } @@ -125,12 +131,15 @@ func Int31() int32 { return globalRand.Int31() } func Int() int { return globalRand.Int() } // Int63n returns, as an int64, a non-negative pseudo-random number in [0,n). +// It panics if n <= 0. func Int63n(n int64) int64 { return globalRand.Int63n(n) } // Int31n returns, as an int32, a non-negative pseudo-random number in [0,n). +// It panics if n <= 0. func Int31n(n int32) int32 { return globalRand.Int31n(n) } // Intn returns, as an int, a non-negative pseudo-random number in [0,n). +// It panics if n <= 0. func Intn(n int) int { return globalRand.Intn(n) } // Float64 returns, as a float64, a pseudo-random number in [0.0,1.0). diff --git a/libgo/go/math/rand/rand_test.go b/libgo/go/math/rand/rand_test.go index 0ba8f98c496..bbd44e3f8b1 100644 --- a/libgo/go/math/rand/rand_test.go +++ b/libgo/go/math/rand/rand_test.go @@ -141,6 +141,9 @@ func TestNonStandardNormalValues(t *testing.T) { for m := 0.5; m < mmax; m *= 2 { for _, seed := range testSeeds { testNormalDistribution(t, numTestSamples, m, sd, seed) + if testing.Short() { + break + } } } } @@ -191,6 +194,9 @@ func TestNonStandardExponentialValues(t *testing.T) { for rate := 0.05; rate < 10; rate *= 2 { for _, seed := range testSeeds { testExponentialDistribution(t, numTestSamples, rate, seed) + if testing.Short() { + break + } } } } diff --git a/libgo/go/mime/grammar.go b/libgo/go/mime/grammar.go index e16a06c86be..83cc411343f 100644 --- a/libgo/go/mime/grammar.go +++ b/libgo/go/mime/grammar.go @@ -14,25 +14,25 @@ func isTSpecial(r rune) bool { return strings.IndexRune(`()<>@,;:\"/[]?=`, r) != -1 } -// IsTokenChar returns true if rune is in 'token' as defined by RFC +// isTokenChar returns true if rune is in 'token' as defined by RFC // 1521 and RFC 2045. -func IsTokenChar(r rune) bool { +func isTokenChar(r rune) bool { // token := 1*<any (US-ASCII) CHAR except SPACE, CTLs, // or tspecials> return r > 0x20 && r < 0x7f && !isTSpecial(r) } -// IsToken returns true if s is a 'token' as as defined by RFC 1521 +// isToken returns true if s is a 'token' as as defined by RFC 1521 // and RFC 2045. -func IsToken(s string) bool { +func isToken(s string) bool { if s == "" { return false } return strings.IndexFunc(s, isNotTokenChar) < 0 } -// IsQText returns true if rune is in 'qtext' as defined by RFC 822. -func IsQText(r int) bool { +// isQText returns true if rune is in 'qtext' as defined by RFC 822. +func isQText(r int) bool { // CHAR = <any ASCII character> ; ( 0-177, 0.-127.) // qtext = <any CHAR excepting <">, ; => may be folded // "\" & CR, and including diff --git a/libgo/go/mime/mediatype.go b/libgo/go/mime/mediatype.go index 41844c25f2a..9398dece1d9 100644 --- a/libgo/go/mime/mediatype.go +++ b/libgo/go/mime/mediatype.go @@ -23,7 +23,7 @@ func FormatMediaType(t string, param map[string]string) string { return "" } major, sub := t[:slash], t[slash+1:] - if !IsToken(major) || !IsToken(sub) { + if !isToken(major) || !isToken(sub) { return "" } var b bytes.Buffer @@ -34,12 +34,12 @@ func FormatMediaType(t string, param map[string]string) string { for attribute, value := range param { b.WriteByte(';') b.WriteByte(' ') - if !IsToken(attribute) { + if !isToken(attribute) { return "" } b.WriteString(strings.ToLower(attribute)) b.WriteByte('=') - if IsToken(value) { + if isToken(value) { b.WriteString(value) continue } @@ -205,7 +205,7 @@ func decode2231Enc(v string) string { } func isNotTokenChar(r rune) bool { - return !IsTokenChar(r) + return !isTokenChar(r) } // consumeToken consumes a token from the beginning of provided diff --git a/libgo/go/mime/multipart/formdata.go b/libgo/go/mime/multipart/formdata.go index ec643c1476f..eee53fc8dd0 100644 --- a/libgo/go/mime/multipart/formdata.go +++ b/libgo/go/mime/multipart/formdata.go @@ -130,7 +130,7 @@ type FileHeader struct { // Open opens and returns the FileHeader's associated File. func (fh *FileHeader) Open() (File, error) { if b := fh.content; b != nil { - r := io.NewSectionReader(sliceReaderAt(b), 0, int64(len(b))) + r := io.NewSectionReader(bytes.NewReader(b), 0, int64(len(b))) return sectionReadCloser{r}, nil } return os.Open(fh.tmpfile) @@ -155,13 +155,3 @@ type sectionReadCloser struct { func (rc sectionReadCloser) Close() error { return nil } - -type sliceReaderAt []byte - -func (r sliceReaderAt) ReadAt(b []byte, off int64) (int, error) { - if int(off) >= len(r) || off < 0 { - return 0, io.ErrUnexpectedEOF - } - n := copy(b, r[int(off):]) - return n, nil -} diff --git a/libgo/go/net/dial.go b/libgo/go/net/dial.go index 5d596bcb6b4..10ca5faf707 100644 --- a/libgo/go/net/dial.go +++ b/libgo/go/net/dial.go @@ -69,7 +69,7 @@ func resolveNetAddr(op, net, addr string) (afnet string, a Addr, err error) { // // Known networks are "tcp", "tcp4" (IPv4-only), "tcp6" (IPv6-only), // "udp", "udp4" (IPv4-only), "udp6" (IPv6-only), "ip", "ip4" -// (IPv4-only), "ip6" (IPv6-only), "unix", "unixgram" and "unixpacket". +// (IPv4-only), "ip6" (IPv6-only), "unix" and "unixpacket". // // For TCP and UDP networks, addresses have the form host:port. // If host is a literal IPv6 address, it must be enclosed @@ -185,7 +185,7 @@ func Listen(net, laddr string) (Listener, error) { if a != nil { la = a.(*TCPAddr) } - return ListenTCP(afnet, la) + return ListenTCP(net, la) case "unix", "unixpacket": var la *UnixAddr if a != nil { diff --git a/libgo/go/net/dial_test.go b/libgo/go/net/dial_test.go index de35ec9f940..5f5aea146a6 100644 --- a/libgo/go/net/dial_test.go +++ b/libgo/go/net/dial_test.go @@ -5,6 +5,8 @@ package net import ( + "flag" + "regexp" "runtime" "testing" "time" @@ -27,8 +29,7 @@ func TestDialTimeout(t *testing.T) { errc := make(chan error) - const SOMAXCONN = 0x80 // copied from syscall, but not always available - const numConns = SOMAXCONN + 10 + numConns := listenerBacklog + 10 // TODO(bradfitz): It's hard to test this in a portable // way. This is unforunate, but works for now. @@ -43,7 +44,7 @@ func TestDialTimeout(t *testing.T) { errc <- err }() } - case "darwin", "windows": + case "darwin": // At least OS X 10.7 seems to accept any number of // connections, ignoring listen's backlog, so resort // to connecting to a hopefully-dead 127/8 address. @@ -54,8 +55,10 @@ func TestDialTimeout(t *testing.T) { }() default: // TODO(bradfitz): - // OpenBSD may have a reject route to 10/8. - // FreeBSD likely works, but is untested. + // OpenBSD may have a reject route to 127/8 except 127.0.0.1/32 + // by default. FreeBSD likely works, but is untested. + // TODO(rsc): + // The timeout never happens on Windows. Why? Issue 3016. t.Logf("skipping test on %q; untested.", runtime.GOOS) return } @@ -85,3 +88,124 @@ func TestDialTimeout(t *testing.T) { } } } + +func TestSelfConnect(t *testing.T) { + if runtime.GOOS == "windows" { + // TODO(brainman): do not know why it hangs. + t.Logf("skipping known-broken test on windows") + return + } + // Test that Dial does not honor self-connects. + // See the comment in DialTCP. + + // Find a port that would be used as a local address. + l, err := Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + c, err := Dial("tcp", l.Addr().String()) + if err != nil { + t.Fatal(err) + } + addr := c.LocalAddr().String() + c.Close() + l.Close() + + // Try to connect to that address repeatedly. + n := 100000 + if testing.Short() { + n = 1000 + } + switch runtime.GOOS { + case "darwin", "freebsd", "openbsd", "windows": + // Non-Linux systems take a long time to figure + // out that there is nothing listening on localhost. + n = 100 + } + for i := 0; i < n; i++ { + c, err := Dial("tcp", addr) + if err == nil { + c.Close() + t.Errorf("#%d: Dial %q succeeded", i, addr) + } + } +} + +var runErrorTest = flag.Bool("run_error_test", false, "let TestDialError check for dns errors") + +type DialErrorTest struct { + Net string + Raddr string + Pattern string +} + +var dialErrorTests = []DialErrorTest{ + { + "datakit", "mh/astro/r70", + "dial datakit mh/astro/r70: unknown network datakit", + }, + { + "tcp", "127.0.0.1:☺", + "dial tcp 127.0.0.1:☺: unknown port tcp/☺", + }, + { + "tcp", "no-such-name.google.com.:80", + "dial tcp no-such-name.google.com.:80: lookup no-such-name.google.com.( on .*)?: no (.*)", + }, + { + "tcp", "no-such-name.no-such-top-level-domain.:80", + "dial tcp no-such-name.no-such-top-level-domain.:80: lookup no-such-name.no-such-top-level-domain.( on .*)?: no (.*)", + }, + { + "tcp", "no-such-name:80", + `dial tcp no-such-name:80: lookup no-such-name\.(.*\.)?( on .*)?: no (.*)`, + }, + { + "tcp", "mh/astro/r70:http", + "dial tcp mh/astro/r70:http: lookup mh/astro/r70: invalid domain name", + }, + { + "unix", "/etc/file-not-found", + "dial unix /etc/file-not-found: no such file or directory", + }, + { + "unix", "/etc/", + "dial unix /etc/: (permission denied|socket operation on non-socket|connection refused)", + }, + { + "unixpacket", "/etc/file-not-found", + "dial unixpacket /etc/file-not-found: no such file or directory", + }, + { + "unixpacket", "/etc/", + "dial unixpacket /etc/: (permission denied|socket operation on non-socket|connection refused)", + }, +} + +var duplicateErrorPattern = `dial (.*) dial (.*)` + +func TestDialError(t *testing.T) { + if !*runErrorTest { + t.Logf("test disabled; use -run_error_test to enable") + return + } + for i, tt := range dialErrorTests { + c, err := Dial(tt.Net, tt.Raddr) + if c != nil { + c.Close() + } + if err == nil { + t.Errorf("#%d: nil error, want match for %#q", i, tt.Pattern) + continue + } + s := err.Error() + match, _ := regexp.MatchString(tt.Pattern, s) + if !match { + t.Errorf("#%d: %q, want match for %#q", i, s, tt.Pattern) + } + match, _ = regexp.MatchString(duplicateErrorPattern, s) + if match { + t.Errorf("#%d: %q, duplicate error return from Dial", i, s) + } + } +} diff --git a/libgo/go/net/dialgoogle_test.go b/libgo/go/net/dialgoogle_test.go index 81750a3d739..03c4499720f 100644 --- a/libgo/go/net/dialgoogle_test.go +++ b/libgo/go/net/dialgoogle_test.go @@ -14,7 +14,7 @@ import ( ) // If an IPv6 tunnel is running, we can try dialing a real IPv6 address. -var ipv6 = flag.Bool("ipv6", false, "assume ipv6 tunnel is present") +var testIPv6 = flag.Bool("ipv6", false, "assume ipv6 tunnel is present") // fd is already connected to the destination, port 80. // Run an HTTP request to fetch the appropriate page. @@ -42,9 +42,8 @@ func doDial(t *testing.T, network, addr string) { } func TestLookupCNAME(t *testing.T) { - if testing.Short() { - // Don't use external network. - t.Logf("skipping external network test during -short") + if testing.Short() || !*testExternal { + t.Logf("skipping test to avoid external network") return } cname, err := LookupCNAME("www.google.com") @@ -67,9 +66,8 @@ var googleaddrsipv4 = []string{ } func TestDialGoogleIPv4(t *testing.T) { - if testing.Short() { - // Don't use external network. - t.Logf("skipping external network test during -short") + if testing.Short() || !*testExternal { + t.Logf("skipping test to avoid external network") return } @@ -124,13 +122,12 @@ var googleaddrsipv6 = []string{ } func TestDialGoogleIPv6(t *testing.T) { - if testing.Short() { - // Don't use external network. - t.Logf("skipping external network test during -short") + if testing.Short() || !*testExternal { + t.Logf("skipping test to avoid external network") return } // Only run tcp6 if the kernel will take it. - if !*ipv6 || !supportsIPv6 { + if !*testIPv6 || !supportsIPv6 { return } diff --git a/libgo/go/net/fd.go b/libgo/go/net/fd.go index 2352d22e115..ae1bf2614a2 100644 --- a/libgo/go/net/fd.go +++ b/libgo/go/net/fd.go @@ -7,6 +7,7 @@ package net import ( + "errors" "io" "os" "sync" @@ -17,8 +18,11 @@ import ( // Network file descriptor. type netFD struct { // locking/lifetime of sysfd - sysmu sync.Mutex - sysref int + sysmu sync.Mutex + sysref int + + // must lock both sysmu and pollserver to write + // can lock either to read closing bool // immutable until Close @@ -27,8 +31,8 @@ type netFD struct { sotype int isConnected bool sysfile *os.File - cr chan bool - cw chan bool + cr chan error + cw chan error net string laddr Addr raddr Addr @@ -86,20 +90,15 @@ type pollServer struct { deadline int64 // next deadline (nsec since 1970) } -func (s *pollServer) AddFD(fd *netFD, mode int) { +func (s *pollServer) AddFD(fd *netFD, mode int) error { + s.Lock() intfd := fd.sysfd - if intfd < 0 { + if intfd < 0 || fd.closing { // fd closed underfoot - if mode == 'r' { - fd.cr <- true - } else { - fd.cw <- true - } - return + s.Unlock() + return errClosing } - s.Lock() - var t int64 key := intfd << 1 if mode == 'r' { @@ -124,12 +123,28 @@ func (s *pollServer) AddFD(fd *netFD, mode int) { if wake { doWakeup = true } - s.Unlock() if doWakeup { s.Wakeup() } + return nil +} + +// Evict evicts fd from the pending list, unblocking +// any I/O running on fd. The caller must have locked +// pollserver. +func (s *pollServer) Evict(fd *netFD) { + if s.pending[fd.sysfd<<1] == fd { + s.WakeFD(fd, 'r', errClosing) + s.poll.DelFD(fd.sysfd, 'r') + delete(s.pending, fd.sysfd<<1) + } + if s.pending[fd.sysfd<<1|1] == fd { + s.WakeFD(fd, 'w', errClosing) + s.poll.DelFD(fd.sysfd, 'w') + delete(s.pending, fd.sysfd<<1|1) + } } var wakeupbuf [1]byte @@ -149,16 +164,16 @@ func (s *pollServer) LookupFD(fd int, mode int) *netFD { return netfd } -func (s *pollServer) WakeFD(fd *netFD, mode int) { +func (s *pollServer) WakeFD(fd *netFD, mode int, err error) { if mode == 'r' { for fd.ncr > 0 { fd.ncr-- - fd.cr <- true + fd.cr <- err } } else { for fd.ncw > 0 { fd.ncw-- - fd.cw <- true + fd.cw <- err } } } @@ -196,7 +211,7 @@ func (s *pollServer) CheckDeadlines() { s.poll.DelFD(fd.sysfd, mode) fd.wdeadline = -1 } - s.WakeFD(fd, mode) + s.WakeFD(fd, mode, nil) } else if next_deadline == 0 || t < next_deadline { next_deadline = t } @@ -228,7 +243,7 @@ func (s *pollServer) Run() { s.CheckDeadlines() continue } - if fd == s.pr.Fd() { + if fd == int(s.pr.Fd()) { // Drain our wakeup pipe (we could loop here, // but it's unlikely that there are more than // len(scratch) wakeup calls). @@ -237,22 +252,30 @@ func (s *pollServer) Run() { } else { netfd := s.LookupFD(fd, mode) if netfd == nil { - print("pollServer: unexpected wakeup for fd=", fd, " mode=", string(mode), "\n") + // This can happen because the WaitFD runs without + // holding s's lock, so there might be a pending wakeup + // for an fd that has been evicted. No harm done. continue } - s.WakeFD(netfd, mode) + s.WakeFD(netfd, mode, nil) } } } -func (s *pollServer) WaitRead(fd *netFD) { - s.AddFD(fd, 'r') - <-fd.cr +func (s *pollServer) WaitRead(fd *netFD) error { + err := s.AddFD(fd, 'r') + if err == nil { + err = <-fd.cr + } + return err } -func (s *pollServer) WaitWrite(fd *netFD) { - s.AddFD(fd, 'w') - <-fd.cw +func (s *pollServer) WaitWrite(fd *netFD) error { + err := s.AddFD(fd, 'w') + if err == nil { + err = <-fd.cw + } + return err } // Network FD methods. @@ -280,8 +303,8 @@ func newFD(fd, family, sotype int, net string) (*netFD, error) { sotype: sotype, net: net, } - netfd.cr = make(chan bool, 1) - netfd.cw = make(chan bool, 1) + netfd.cr = make(chan error, 1) + netfd.cw = make(chan error, 1) return netfd, nil } @@ -295,13 +318,15 @@ func (fd *netFD) setAddr(laddr, raddr Addr) { if raddr != nil { rs = raddr.String() } - fd.sysfile = os.NewFile(fd.sysfd, fd.net+":"+ls+"->"+rs) + fd.sysfile = os.NewFile(uintptr(fd.sysfd), fd.net+":"+ls+"->"+rs) } func (fd *netFD) connect(ra syscall.Sockaddr) error { err := syscall.Connect(fd.sysfd, ra) if err == syscall.EINPROGRESS { - pollserver.WaitWrite(fd) + if err = pollserver.WaitWrite(fd); err != nil { + return err + } var e int e, err = syscall.GetsockoptInt(fd.sysfd, syscall.SOL_SOCKET, syscall.SO_ERROR) if err != nil { @@ -314,24 +339,37 @@ func (fd *netFD) connect(ra syscall.Sockaddr) error { return err } +var errClosing = errors.New("use of closed network connection") + // Add a reference to this fd. -func (fd *netFD) incref() { +// If closing==true, pollserver must be locked; mark the fd as closing. +// Returns an error if the fd cannot be used. +func (fd *netFD) incref(closing bool) error { + if fd == nil { + return errClosing + } fd.sysmu.Lock() + if fd.closing { + fd.sysmu.Unlock() + return errClosing + } fd.sysref++ + if closing { + fd.closing = true + } fd.sysmu.Unlock() + return nil } // Remove a reference to this FD and close if we've been asked to do so (and // there are no references left. func (fd *netFD) decref() { + if fd == nil { + return + } fd.sysmu.Lock() fd.sysref-- - if fd.closing && fd.sysref == 0 && fd.sysfd >= 0 { - // In case the user has set linger, switch to blocking mode so - // the close blocks. As long as this doesn't happen often, we - // can handle the extra OS processes. Otherwise we'll need to - // use the pollserver for Close too. Sigh. - syscall.SetNonblock(fd.sysfd, false) + if fd.closing && fd.sysref == 0 && fd.sysfile != nil { fd.sysfile.Close() fd.sysfile = nil fd.sysfd = -1 @@ -340,21 +378,26 @@ func (fd *netFD) decref() { } func (fd *netFD) Close() error { - if fd == nil || fd.sysfile == nil { - return os.EINVAL - } - - fd.incref() - syscall.Shutdown(fd.sysfd, syscall.SHUT_RDWR) - fd.closing = true + pollserver.Lock() // needed for both fd.incref(true) and pollserver.Evict + defer pollserver.Unlock() + if err := fd.incref(true); err != nil { + return err + } + // Unblock any I/O. Once it all unblocks and returns, + // so that it cannot be referring to fd.sysfd anymore, + // the final decref will close fd.sysfd. This should happen + // fairly quickly, since all the I/O is non-blocking, and any + // attempts to block in the pollserver will return errClosing. + pollserver.Evict(fd) fd.decref() return nil } func (fd *netFD) shutdown(how int) error { - if fd == nil || fd.sysfile == nil { - return os.EINVAL + if err := fd.incref(false); err != nil { + return err } + defer fd.decref() err := syscall.Shutdown(fd.sysfd, how) if err != nil { return &OpError{"shutdown", fd.net, fd.laddr, err} @@ -371,24 +414,21 @@ func (fd *netFD) CloseWrite() error { } func (fd *netFD) Read(p []byte) (n int, err error) { - if fd == nil { - return 0, os.EINVAL - } fd.rio.Lock() defer fd.rio.Unlock() - fd.incref() - defer fd.decref() - if fd.sysfile == nil { - return 0, os.EINVAL + if err := fd.incref(false); err != nil { + return 0, err } + defer fd.decref() for { - n, err = syscall.Read(fd.sysfile.Fd(), p) + n, err = syscall.Read(int(fd.sysfd), p) if err == syscall.EAGAIN { + err = errTimeout if fd.rdeadline >= 0 { - pollserver.WaitRead(fd) - continue + if err = pollserver.WaitRead(fd); err == nil { + continue + } } - err = errTimeout } if err != nil { n = 0 @@ -404,49 +444,49 @@ func (fd *netFD) Read(p []byte) (n int, err error) { } func (fd *netFD) ReadFrom(p []byte) (n int, sa syscall.Sockaddr, err error) { - if fd == nil || fd.sysfile == nil { - return 0, nil, os.EINVAL - } fd.rio.Lock() defer fd.rio.Unlock() - fd.incref() + if err := fd.incref(false); err != nil { + return 0, nil, err + } defer fd.decref() for { n, sa, err = syscall.Recvfrom(fd.sysfd, p, 0) if err == syscall.EAGAIN { + err = errTimeout if fd.rdeadline >= 0 { - pollserver.WaitRead(fd) - continue + if err = pollserver.WaitRead(fd); err == nil { + continue + } } - err = errTimeout } if err != nil { n = 0 } break } - if err != nil { + if err != nil && err != io.EOF { err = &OpError{"read", fd.net, fd.laddr, err} } return } func (fd *netFD) ReadMsg(p []byte, oob []byte) (n, oobn, flags int, sa syscall.Sockaddr, err error) { - if fd == nil || fd.sysfile == nil { - return 0, 0, 0, nil, os.EINVAL - } fd.rio.Lock() defer fd.rio.Unlock() - fd.incref() + if err := fd.incref(false); err != nil { + return 0, 0, 0, nil, err + } defer fd.decref() for { n, oobn, flags, sa, err = syscall.Recvmsg(fd.sysfd, p, oob, 0) if err == syscall.EAGAIN { + err = errTimeout if fd.rdeadline >= 0 { - pollserver.WaitRead(fd) - continue + if err = pollserver.WaitRead(fd); err == nil { + continue + } } - err = errTimeout } if err == nil && n == 0 { err = io.EOF @@ -461,22 +501,21 @@ func (fd *netFD) ReadMsg(p []byte, oob []byte) (n, oobn, flags int, sa syscall.S } func (fd *netFD) Write(p []byte) (int, error) { - if fd == nil { - return 0, os.EINVAL - } fd.wio.Lock() defer fd.wio.Unlock() - fd.incref() + if err := fd.incref(false); err != nil { + return 0, err + } defer fd.decref() if fd.sysfile == nil { - return 0, os.EINVAL + return 0, syscall.EINVAL } var err error nn := 0 for { var n int - n, err = syscall.Write(fd.sysfile.Fd(), p[nn:]) + n, err = syscall.Write(int(fd.sysfd), p[nn:]) if n > 0 { nn += n } @@ -484,11 +523,12 @@ func (fd *netFD) Write(p []byte) (int, error) { break } if err == syscall.EAGAIN { + err = errTimeout if fd.wdeadline >= 0 { - pollserver.WaitWrite(fd) - continue + if err = pollserver.WaitWrite(fd); err == nil { + continue + } } - err = errTimeout } if err != nil { n = 0 @@ -506,21 +546,21 @@ func (fd *netFD) Write(p []byte) (int, error) { } func (fd *netFD) WriteTo(p []byte, sa syscall.Sockaddr) (n int, err error) { - if fd == nil || fd.sysfile == nil { - return 0, os.EINVAL - } fd.wio.Lock() defer fd.wio.Unlock() - fd.incref() + if err := fd.incref(false); err != nil { + return 0, err + } defer fd.decref() for { err = syscall.Sendto(fd.sysfd, p, 0, sa) if err == syscall.EAGAIN { + err = errTimeout if fd.wdeadline >= 0 { - pollserver.WaitWrite(fd) - continue + if err = pollserver.WaitWrite(fd); err == nil { + continue + } } - err = errTimeout } break } @@ -533,21 +573,21 @@ func (fd *netFD) WriteTo(p []byte, sa syscall.Sockaddr) (n int, err error) { } func (fd *netFD) WriteMsg(p []byte, oob []byte, sa syscall.Sockaddr) (n int, oobn int, err error) { - if fd == nil || fd.sysfile == nil { - return 0, 0, os.EINVAL - } fd.wio.Lock() defer fd.wio.Unlock() - fd.incref() + if err := fd.incref(false); err != nil { + return 0, 0, err + } defer fd.decref() for { err = syscall.Sendmsg(fd.sysfd, p, oob, sa, 0) if err == syscall.EAGAIN { + err = errTimeout if fd.wdeadline >= 0 { - pollserver.WaitWrite(fd) - continue + if err = pollserver.WaitWrite(fd); err == nil { + continue + } } - err = errTimeout } break } @@ -561,11 +601,9 @@ func (fd *netFD) WriteMsg(p []byte, oob []byte, sa syscall.Sockaddr) (n int, oob } func (fd *netFD) accept(toAddr func(syscall.Sockaddr) Addr) (netfd *netFD, err error) { - if fd == nil || fd.sysfile == nil { - return nil, os.EINVAL + if err := fd.incref(false); err != nil { + return nil, err } - - fd.incref() defer fd.decref() // See ../syscall/exec.go for description of ForkLock. @@ -574,19 +612,17 @@ func (fd *netFD) accept(toAddr func(syscall.Sockaddr) Addr) (netfd *netFD, err e var s int var rsa syscall.Sockaddr for { - if fd.closing { - return nil, os.EINVAL - } syscall.ForkLock.RLock() s, rsa, err = syscall.Accept(fd.sysfd) if err != nil { syscall.ForkLock.RUnlock() if err == syscall.EAGAIN { + err = errTimeout if fd.rdeadline >= 0 { - pollserver.WaitRead(fd) - continue + if err = pollserver.WaitRead(fd); err == nil { + continue + } } - err = errTimeout } return nil, &OpError{"accept", fd.net, fd.laddr, err} } @@ -615,7 +651,7 @@ func (fd *netFD) dup() (f *os.File, err error) { return nil, &OpError{"setnonblock", fd.net, fd.laddr, err} } - return os.NewFile(ns, fd.sysfile.Name()), nil + return os.NewFile(uintptr(ns), fd.sysfile.Name()), nil } func closesocket(s int) error { diff --git a/libgo/go/net/fd_windows.go b/libgo/go/net/fd_windows.go index 78168eb6c86..45f5c2d882f 100644 --- a/libgo/go/net/fd_windows.go +++ b/libgo/go/net/fd_windows.go @@ -5,6 +5,7 @@ package net import ( + "errors" "io" "os" "runtime" @@ -272,11 +273,27 @@ func (fd *netFD) connect(ra syscall.Sockaddr) error { return syscall.Connect(fd.sysfd, ra) } +var errClosing = errors.New("use of closed network connection") + // Add a reference to this fd. -func (fd *netFD) incref() { +// If closing==true, mark the fd as closing. +// Returns an error if the fd cannot be used. +func (fd *netFD) incref(closing bool) error { + if fd == nil { + return errClosing + } fd.sysmu.Lock() + if fd.closing { + fd.sysmu.Unlock() + return errClosing + } fd.sysref++ + if closing { + fd.closing = true + } + closing = fd.closing fd.sysmu.Unlock() + return nil } // Remove a reference to this FD and close if we've been asked to do so (and @@ -284,7 +301,17 @@ func (fd *netFD) incref() { func (fd *netFD) decref() { fd.sysmu.Lock() fd.sysref-- - if fd.closing && fd.sysref == 0 && fd.sysfd != syscall.InvalidHandle { + // NOTE(rsc): On Unix we check fd.sysref == 0 here before closing, + // but on Windows we have no way to wake up the blocked I/O other + // than closing the socket (or calling Shutdown, which breaks other + // programs that might have a reference to the socket). So there is + // a small race here that we might close fd.sysfd and then some other + // goroutine might start a read of fd.sysfd (having read it before we + // write InvalidHandle to it), which might refer to some other file + // if the specific handle value gets reused. I think handle values on + // Windows are not reused as aggressively as file descriptors on Unix, + // so this might be tolerable. + if fd.closing && fd.sysfd != syscall.InvalidHandle { // In case the user has set linger, switch to blocking mode so // the close blocks. As long as this doesn't happen often, we // can handle the extra OS processes. Otherwise we'll need to @@ -299,20 +326,16 @@ func (fd *netFD) decref() { } func (fd *netFD) Close() error { - if fd == nil || fd.sysfd == syscall.InvalidHandle { - return os.EINVAL + if err := fd.incref(true); err != nil { + return err } - - fd.incref() - syscall.Shutdown(fd.sysfd, syscall.SHUT_RDWR) - fd.closing = true fd.decref() return nil } func (fd *netFD) shutdown(how int) error { if fd == nil || fd.sysfd == syscall.InvalidHandle { - return os.EINVAL + return syscall.EINVAL } err := syscall.Shutdown(fd.sysfd, how) if err != nil { @@ -346,14 +369,16 @@ func (o *readOp) Name() string { func (fd *netFD) Read(buf []byte) (int, error) { if fd == nil { - return 0, os.EINVAL + return 0, syscall.EINVAL } fd.rio.Lock() defer fd.rio.Unlock() - fd.incref() + if err := fd.incref(false); err != nil { + return 0, err + } defer fd.decref() if fd.sysfd == syscall.InvalidHandle { - return 0, os.EINVAL + return 0, syscall.EINVAL } var o readOp o.Init(fd, buf, 'r') @@ -383,18 +408,17 @@ func (o *readFromOp) Name() string { func (fd *netFD) ReadFrom(buf []byte) (n int, sa syscall.Sockaddr, err error) { if fd == nil { - return 0, nil, os.EINVAL + return 0, nil, syscall.EINVAL } if len(buf) == 0 { return 0, nil, nil } fd.rio.Lock() defer fd.rio.Unlock() - fd.incref() - defer fd.decref() - if fd.sysfd == syscall.InvalidHandle { - return 0, nil, os.EINVAL + if err := fd.incref(false); err != nil { + return 0, nil, err } + defer fd.decref() var o readFromOp o.Init(fd, buf, 'r') o.rsan = int32(unsafe.Sizeof(o.rsa)) @@ -423,15 +447,14 @@ func (o *writeOp) Name() string { func (fd *netFD) Write(buf []byte) (int, error) { if fd == nil { - return 0, os.EINVAL + return 0, syscall.EINVAL } fd.wio.Lock() defer fd.wio.Unlock() - fd.incref() - defer fd.decref() - if fd.sysfd == syscall.InvalidHandle { - return 0, os.EINVAL + if err := fd.incref(false); err != nil { + return 0, err } + defer fd.decref() var o writeOp o.Init(fd, buf, 'w') return iosrv.ExecIO(&o, fd.wdeadline) @@ -455,17 +478,19 @@ func (o *writeToOp) Name() string { func (fd *netFD) WriteTo(buf []byte, sa syscall.Sockaddr) (int, error) { if fd == nil { - return 0, os.EINVAL + return 0, syscall.EINVAL } if len(buf) == 0 { return 0, nil } fd.wio.Lock() defer fd.wio.Unlock() - fd.incref() + if err := fd.incref(false); err != nil { + return 0, err + } defer fd.decref() if fd.sysfd == syscall.InvalidHandle { - return 0, os.EINVAL + return 0, syscall.EINVAL } var o writeToOp o.Init(fd, buf, 'w') @@ -493,10 +518,9 @@ func (o *acceptOp) Name() string { } func (fd *netFD) accept(toAddr func(syscall.Sockaddr) Addr) (*netFD, error) { - if fd == nil || fd.sysfd == syscall.InvalidHandle { - return nil, os.EINVAL + if err := fd.incref(false); err != nil { + return nil, err } - fd.incref() defer fd.decref() // Get new socket. @@ -554,10 +578,12 @@ func (fd *netFD) dup() (*os.File, error) { return nil, os.NewSyscallError("dup", syscall.EWINDOWS) } +var errNoSupport = errors.New("address family not supported") + func (fd *netFD) ReadMsg(p []byte, oob []byte) (n, oobn, flags int, sa syscall.Sockaddr, err error) { - return 0, 0, 0, nil, os.EAFNOSUPPORT + return 0, 0, 0, nil, errNoSupport } func (fd *netFD) WriteMsg(p []byte, oob []byte, sa syscall.Sockaddr) (n int, oobn int, err error) { - return 0, 0, os.EAFNOSUPPORT + return 0, 0, errNoSupport } diff --git a/libgo/go/net/file.go b/libgo/go/net/file.go index 901b8565995..c95d16d64e7 100644 --- a/libgo/go/net/file.go +++ b/libgo/go/net/file.go @@ -12,7 +12,7 @@ import ( ) func newFileFD(f *os.File) (*netFD, error) { - fd, err := syscall.Dup(f.Fd()) + fd, err := syscall.Dup(int(f.Fd())) if err != nil { return nil, os.NewSyscallError("dup", err) } @@ -28,7 +28,7 @@ func newFileFD(f *os.File) (*netFD, error) { switch sa.(type) { default: closesocket(fd) - return nil, os.EINVAL + return nil, syscall.EINVAL case *syscall.SockaddrInet4: family = syscall.AF_INET if proto == syscall.SOCK_DGRAM { @@ -84,7 +84,7 @@ func FileConn(f *os.File) (c Conn, err error) { return newIPConn(fd), nil } fd.Close() - return nil, os.EINVAL + return nil, syscall.EINVAL } // FileListener returns a copy of the network listener corresponding @@ -103,7 +103,7 @@ func FileListener(f *os.File) (l Listener, err error) { return &UnixListener{fd, laddr.Name}, nil } fd.Close() - return nil, os.EINVAL + return nil, syscall.EINVAL } // FilePacketConn returns a copy of the packet network connection @@ -122,5 +122,5 @@ func FilePacketConn(f *os.File) (c PacketConn, err error) { return newUnixConn(fd), nil } fd.Close() - return nil, os.EINVAL + return nil, syscall.EINVAL } diff --git a/libgo/go/net/file_plan9.go b/libgo/go/net/file_plan9.go index 06d7cc89846..04f7ee0401b 100644 --- a/libgo/go/net/file_plan9.go +++ b/libgo/go/net/file_plan9.go @@ -6,6 +6,7 @@ package net import ( "os" + "syscall" ) // FileConn returns a copy of the network connection corresponding to @@ -13,7 +14,7 @@ import ( // finished. Closing c does not affect f, and closing f does not // affect c. func FileConn(f *os.File) (c Conn, err error) { - return nil, os.EPLAN9 + return nil, syscall.EPLAN9 } // FileListener returns a copy of the network listener corresponding @@ -21,7 +22,7 @@ func FileConn(f *os.File) (c Conn, err error) { // when finished. Closing c does not affect l, and closing l does not // affect c. func FileListener(f *os.File) (l Listener, err error) { - return nil, os.EPLAN9 + return nil, syscall.EPLAN9 } // FilePacketConn returns a copy of the packet network connection @@ -29,5 +30,5 @@ func FileListener(f *os.File) (l Listener, err error) { // responsibility to close f when finished. Closing c does not affect // f, and closing f does not affect c. func FilePacketConn(f *os.File) (c PacketConn, err error) { - return nil, os.EPLAN9 + return nil, syscall.EPLAN9 } diff --git a/libgo/go/net/hosts_test.go b/libgo/go/net/hosts_test.go index 1bd00541c6d..064e7e43282 100644 --- a/libgo/go/net/hosts_test.go +++ b/libgo/go/net/hosts_test.go @@ -34,7 +34,7 @@ var hosttests = []hostTest{ func TestLookupStaticHost(t *testing.T) { p := hostsPath - hostsPath = "hosts_testdata" + hostsPath = "testdata/hosts" for i := 0; i < len(hosttests); i++ { tt := hosttests[i] ips := lookupStaticHost(tt.host) diff --git a/libgo/go/net/http/cgi/child.go b/libgo/go/net/http/cgi/child.go index e6c3ef911ab..1ba7bec5fc5 100644 --- a/libgo/go/net/http/cgi/child.go +++ b/libgo/go/net/http/cgi/child.go @@ -144,6 +144,7 @@ func Serve(handler http.Handler) error { bufw: bufio.NewWriter(os.Stdout), } handler.ServeHTTP(rw, req) + rw.Write(nil) // make sure a response is sent if err = rw.bufw.Flush(); err != nil { return err } diff --git a/libgo/go/net/http/cgi/host_test.go b/libgo/go/net/http/cgi/host_test.go index b8dbdb4edd2..859911f9805 100644 --- a/libgo/go/net/http/cgi/host_test.go +++ b/libgo/go/net/http/cgi/host_test.go @@ -19,6 +19,7 @@ import ( "runtime" "strconv" "strings" + "syscall" "testing" "time" ) @@ -40,6 +41,7 @@ func runCgiTest(t *testing.T, h *Handler, httpreq string, expectedMap map[string // Make a map to hold the test map that the CGI returns. m := make(map[string]string) + m["_body"] = rw.Body.String() linesRead := 0 readlines: for { @@ -355,7 +357,7 @@ func TestCopyError(t *testing.T) { if err != nil { return false } - return p.Signal(os.UnixSignal(0)) == nil + return p.Signal(syscall.Signal(0)) == nil } if !childRunning() { diff --git a/libgo/go/net/http/cgi/matryoshka_test.go b/libgo/go/net/http/cgi/matryoshka_test.go index 1a44df20401..e1a78c8f62f 100644 --- a/libgo/go/net/http/cgi/matryoshka_test.go +++ b/libgo/go/net/http/cgi/matryoshka_test.go @@ -51,6 +51,22 @@ func TestHostingOurselves(t *testing.T) { } } +// Test that a child handler only writing headers works. +func TestChildOnlyHeaders(t *testing.T) { + h := &Handler{ + Path: os.Args[0], + Root: "/test.go", + Args: []string{"-test.run=TestBeChildCGIProcess"}, + } + expectedMap := map[string]string{ + "_body": "", + } + replay := runCgiTest(t, h, "GET /test.go?no-body=1 HTTP/1.0\nHost: example.com\n\n", expectedMap) + if expected, got := "X-Test-Value", replay.Header().Get("X-Test-Header"); got != expected { + t.Errorf("got a X-Test-Header of %q; expected %q", got, expected) + } +} + // Note: not actually a test. func TestBeChildCGIProcess(t *testing.T) { if os.Getenv("REQUEST_METHOD") == "" { @@ -59,8 +75,11 @@ func TestBeChildCGIProcess(t *testing.T) { } Serve(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { rw.Header().Set("X-Test-Header", "X-Test-Value") - fmt.Fprintf(rw, "test=Hello CGI-in-CGI\n") req.ParseForm() + if req.FormValue("no-body") == "1" { + return + } + fmt.Fprintf(rw, "test=Hello CGI-in-CGI\n") for k, vv := range req.Form { for _, v := range vv { fmt.Fprintf(rw, "param-%s=%s\n", k, v) diff --git a/libgo/go/net/http/cookie_test.go b/libgo/go/net/http/cookie_test.go index 712350dfcef..1e9186a0581 100644 --- a/libgo/go/net/http/cookie_test.go +++ b/libgo/go/net/http/cookie_test.go @@ -128,6 +128,34 @@ var readSetCookiesTests = []struct { Raw: "NID=99=YsDT5i3E-CXax-; expires=Wed, 23-Nov-2011 01:05:03 GMT; path=/; domain=.google.ch; HttpOnly", }}, }, + { + Header{"Set-Cookie": {".ASPXAUTH=7E3AA; expires=Wed, 07-Mar-2012 14:25:06 GMT; path=/; HttpOnly"}}, + []*Cookie{{ + Name: ".ASPXAUTH", + Value: "7E3AA", + Path: "/", + Expires: time.Date(2012, 3, 7, 14, 25, 6, 0, time.UTC), + RawExpires: "Wed, 07-Mar-2012 14:25:06 GMT", + HttpOnly: true, + Raw: ".ASPXAUTH=7E3AA; expires=Wed, 07-Mar-2012 14:25:06 GMT; path=/; HttpOnly", + }}, + }, + { + Header{"Set-Cookie": {"ASP.NET_SessionId=foo; path=/; HttpOnly"}}, + []*Cookie{{ + Name: "ASP.NET_SessionId", + Value: "foo", + Path: "/", + HttpOnly: true, + Raw: "ASP.NET_SessionId=foo; path=/; HttpOnly", + }}, + }, + + // TODO(bradfitz): users have reported seeing this in the + // wild, but do browsers handle it? RFC 6265 just says "don't + // do that" (section 3) and then never mentions header folding + // again. + // Header{"Set-Cookie": {"ASP.NET_SessionId=foo; path=/; HttpOnly, .ASPXAUTH=7E3AA; expires=Wed, 07-Mar-2012 14:25:06 GMT; path=/; HttpOnly"}}, } func toJSON(v interface{}) string { diff --git a/libgo/go/net/http/doc.go b/libgo/go/net/http/doc.go index 8962ed31e6a..b6ae8b87a2f 100644 --- a/libgo/go/net/http/doc.go +++ b/libgo/go/net/http/doc.go @@ -12,7 +12,7 @@ Get, Head, Post, and PostForm make HTTP requests: resp, err := http.Post("http://example.com/upload", "image/jpeg", &buf) ... resp, err := http.PostForm("http://example.com/form", - url.Values{"key": {"Value"}, "id": {"123"}}) + url.Values{"key": {"Value"}, "id": {"123"}}) The client must close the response body when finished with it: @@ -60,7 +60,7 @@ Handle and HandleFunc add handlers to DefaultServeMux: http.Handle("/foo", fooHandler) http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.RawPath)) + fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path)) }) log.Fatal(http.ListenAndServe(":8080", nil)) diff --git a/libgo/go/net/http/example_test.go b/libgo/go/net/http/example_test.go new file mode 100644 index 00000000000..2584afc439e --- /dev/null +++ b/libgo/go/net/http/example_test.go @@ -0,0 +1,51 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http_test + +import ( + "fmt" + "io/ioutil" + "log" + "net/http" +) + +func ExampleHijacker() { + http.HandleFunc("/hijack", func(w http.ResponseWriter, r *http.Request) { + hj, ok := w.(http.Hijacker) + if !ok { + http.Error(w, "webserver doesn't support hijacking", http.StatusInternalServerError) + return + } + conn, bufrw, err := hj.Hijack() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + // Don't forget to close the connection: + defer conn.Close() + bufrw.WriteString("Now we're speaking raw TCP. Say hi: ") + bufrw.Flush() + s, err := bufrw.ReadString('\n') + if err != nil { + log.Printf("error reading string: %v", err) + return + } + fmt.Fprintf(bufrw, "You said: %q\nBye.\n", s) + bufrw.Flush() + }) +} + +func ExampleGet() { + res, err := http.Get("http://www.google.com/robots.txt") + if err != nil { + log.Fatal(err) + } + robots, err := ioutil.ReadAll(res.Body) + if err != nil { + log.Fatal(err) + } + res.Body.Close() + fmt.Printf("%s", robots) +} diff --git a/libgo/go/net/http/fcgi/child.go b/libgo/go/net/http/fcgi/child.go index c94b9a7b249..c8b9a33c87b 100644 --- a/libgo/go/net/http/fcgi/child.go +++ b/libgo/go/net/http/fcgi/child.go @@ -243,9 +243,9 @@ func (c *child) serveRequest(req *request, body io.ReadCloser) { } // Serve accepts incoming FastCGI connections on the listener l, creating a new -// service thread for each. The service threads read requests and then call handler +// goroutine for each. The goroutine reads requests and then calls handler // to reply to them. -// If l is nil, Serve accepts connections on stdin. +// If l is nil, Serve accepts connections from os.Stdin. // If handler is nil, http.DefaultServeMux is used. func Serve(l net.Listener, handler http.Handler) error { if l == nil { diff --git a/libgo/go/net/http/fs.go b/libgo/go/net/http/fs.go index 1392ca68ad6..f35dd32c305 100644 --- a/libgo/go/net/http/fs.go +++ b/libgo/go/net/http/fs.go @@ -17,7 +17,6 @@ import ( "strconv" "strings" "time" - "unicode/utf8" ) // A Dir implements http.FileSystem using the native file @@ -58,32 +57,6 @@ type File interface { Seek(offset int64, whence int) (int64, error) } -// Heuristic: b is text if it is valid UTF-8 and doesn't -// contain any unprintable ASCII or Unicode characters. -func isText(b []byte) bool { - for len(b) > 0 && utf8.FullRune(b) { - rune, size := utf8.DecodeRune(b) - if size == 1 && rune == utf8.RuneError { - // decoding error - return false - } - if 0x7F <= rune && rune <= 0x9F { - return false - } - if rune < ' ' { - switch rune { - case '\n', '\r', '\t': - // okay - default: - // binary garbage - return false - } - } - b = b[size:] - } - return true -} - func dirList(w ResponseWriter, f File) { w.Header().Set("Content-Type", "text/html; charset=utf-8") fmt.Fprintf(w, "<pre>\n") @@ -104,6 +77,126 @@ func dirList(w ResponseWriter, f File) { fmt.Fprintf(w, "</pre>\n") } +// ServeContent replies to the request using the content in the +// provided ReadSeeker. The main benefit of ServeContent over io.Copy +// is that it handles Range requests properly, sets the MIME type, and +// handles If-Modified-Since requests. +// +// If the response's Content-Type header is not set, ServeContent +// first tries to deduce the type from name's file extension and, +// if that fails, falls back to reading the first block of the content +// and passing it to DetectContentType. +// The name is otherwise unused; in particular it can be empty and is +// never sent in the response. +// +// If modtime is not the zero time, ServeContent includes it in a +// Last-Modified header in the response. If the request includes an +// If-Modified-Since header, ServeContent uses modtime to decide +// whether the content needs to be sent at all. +// +// The content's Seek method must work: ServeContent uses +// a seek to the end of the content to determine its size. +// +// Note that *os.File implements the io.ReadSeeker interface. +func ServeContent(w ResponseWriter, req *Request, name string, modtime time.Time, content io.ReadSeeker) { + size, err := content.Seek(0, os.SEEK_END) + if err != nil { + Error(w, "seeker can't seek", StatusInternalServerError) + return + } + _, err = content.Seek(0, os.SEEK_SET) + if err != nil { + Error(w, "seeker can't seek", StatusInternalServerError) + return + } + serveContent(w, req, name, modtime, size, content) +} + +// if name is empty, filename is unknown. (used for mime type, before sniffing) +// if modtime.IsZero(), modtime is unknown. +// content must be seeked to the beginning of the file. +func serveContent(w ResponseWriter, r *Request, name string, modtime time.Time, size int64, content io.ReadSeeker) { + if checkLastModified(w, r, modtime) { + return + } + + code := StatusOK + + // If Content-Type isn't set, use the file's extension to find it. + if w.Header().Get("Content-Type") == "" { + ctype := mime.TypeByExtension(filepath.Ext(name)) + if ctype == "" { + // read a chunk to decide between utf-8 text and binary + var buf [1024]byte + n, _ := io.ReadFull(content, buf[:]) + b := buf[:n] + ctype = DetectContentType(b) + _, err := content.Seek(0, os.SEEK_SET) // rewind to output whole file + if err != nil { + Error(w, "seeker can't seek", StatusInternalServerError) + return + } + } + w.Header().Set("Content-Type", ctype) + } + + // handle Content-Range header. + // TODO(adg): handle multiple ranges + sendSize := size + if size >= 0 { + ranges, err := parseRange(r.Header.Get("Range"), size) + if err == nil && len(ranges) > 1 { + err = errors.New("multiple ranges not supported") + } + if err != nil { + Error(w, err.Error(), StatusRequestedRangeNotSatisfiable) + return + } + if len(ranges) == 1 { + ra := ranges[0] + if _, err := content.Seek(ra.start, os.SEEK_SET); err != nil { + Error(w, err.Error(), StatusRequestedRangeNotSatisfiable) + return + } + sendSize = ra.length + code = StatusPartialContent + w.Header().Set("Content-Range", fmt.Sprintf("bytes %d-%d/%d", ra.start, ra.start+ra.length-1, size)) + } + + w.Header().Set("Accept-Ranges", "bytes") + if w.Header().Get("Content-Encoding") == "" { + w.Header().Set("Content-Length", strconv.FormatInt(sendSize, 10)) + } + } + + w.WriteHeader(code) + + if r.Method != "HEAD" { + if sendSize == -1 { + io.Copy(w, content) + } else { + io.CopyN(w, content, sendSize) + } + } +} + +// modtime is the modification time of the resource to be served, or IsZero(). +// return value is whether this request is now complete. +func checkLastModified(w ResponseWriter, r *Request, modtime time.Time) bool { + if modtime.IsZero() { + return false + } + + // The Date-Modified header truncates sub-second precision, so + // use mtime < t+1s instead of mtime <= t to check for unmodified. + if t, err := time.Parse(TimeFormat, r.Header.Get("If-Modified-Since")); err == nil && modtime.Before(t.Add(1*time.Second)) { + w.WriteHeader(StatusNotModified) + return true + } + w.Header().Set("Last-Modified", modtime.UTC().Format(TimeFormat)) + return false +} + // name is '/'-separated, not filepath.Separator. func serveFile(w ResponseWriter, r *Request, fs FileSystem, name string, redirect bool) { const indexPage = "/index.html" @@ -148,14 +241,11 @@ func serveFile(w ResponseWriter, r *Request, fs FileSystem, name string, redirec } } - if t, err := time.Parse(TimeFormat, r.Header.Get("If-Modified-Since")); err == nil && !d.ModTime().After(t) { - w.WriteHeader(StatusNotModified) - return - } - w.Header().Set("Last-Modified", d.ModTime().UTC().Format(TimeFormat)) - // use contents of index.html for directory, if present if d.IsDir() { + if checkLastModified(w, r, d.ModTime()) { + return + } index := name + indexPage ff, err := fs.Open(index) if err == nil { @@ -174,60 +264,7 @@ func serveFile(w ResponseWriter, r *Request, fs FileSystem, name string, redirec return } - // serve file - size := d.Size() - code := StatusOK - - // If Content-Type isn't set, use the file's extension to find it. - if w.Header().Get("Content-Type") == "" { - ctype := mime.TypeByExtension(filepath.Ext(name)) - if ctype == "" { - // read a chunk to decide between utf-8 text and binary - var buf [1024]byte - n, _ := io.ReadFull(f, buf[:]) - b := buf[:n] - if isText(b) { - ctype = "text/plain; charset=utf-8" - } else { - // generic binary - ctype = "application/octet-stream" - } - f.Seek(0, os.SEEK_SET) // rewind to output whole file - } - w.Header().Set("Content-Type", ctype) - } - - // handle Content-Range header. - // TODO(adg): handle multiple ranges - ranges, err := parseRange(r.Header.Get("Range"), size) - if err == nil && len(ranges) > 1 { - err = errors.New("multiple ranges not supported") - } - if err != nil { - Error(w, err.Error(), StatusRequestedRangeNotSatisfiable) - return - } - if len(ranges) == 1 { - ra := ranges[0] - if _, err := f.Seek(ra.start, os.SEEK_SET); err != nil { - Error(w, err.Error(), StatusRequestedRangeNotSatisfiable) - return - } - size = ra.length - code = StatusPartialContent - w.Header().Set("Content-Range", fmt.Sprintf("bytes %d-%d/%d", ra.start, ra.start+ra.length-1, d.Size())) - } - - w.Header().Set("Accept-Ranges", "bytes") - if w.Header().Get("Content-Encoding") == "" { - w.Header().Set("Content-Length", strconv.FormatInt(size, 10)) - } - - w.WriteHeader(code) - - if r.Method != "HEAD" { - io.CopyN(w, f, size) - } + serveContent(w, r, d.Name(), d.ModTime(), d.Size(), f) } // localRedirect gives a Moved Permanently response. diff --git a/libgo/go/net/http/fs_test.go b/libgo/go/net/http/fs_test.go index feea9209e6a..5aa93ce5837 100644 --- a/libgo/go/net/http/fs_test.go +++ b/libgo/go/net/http/fs_test.go @@ -5,15 +5,23 @@ package http_test import ( + "bytes" + "errors" "fmt" + "io" "io/ioutil" + "net" . "net/http" "net/http/httptest" "net/url" "os" + "os/exec" "path/filepath" + "regexp" + "runtime" "strings" "testing" + "time" ) const ( @@ -56,18 +64,18 @@ func TestServeFile(t *testing.T) { req.Method = "GET" // straight GET - _, body := getBody(t, req) + _, body := getBody(t, "straight get", req) if !equal(body, file) { t.Fatalf("body mismatch: got %q, want %q", body, file) } // Range tests - for _, rt := range ServeFileRangeTests { + for i, rt := range ServeFileRangeTests { req.Header.Set("Range", "bytes="+rt.r) if rt.r == "" { req.Header["Range"] = nil } - r, body := getBody(t, req) + r, body := getBody(t, fmt.Sprintf("test %d", i), req) if r.StatusCode != rt.code { t.Errorf("range=%q: StatusCode=%d, want %d", rt.r, r.StatusCode, rt.code) } @@ -124,7 +132,7 @@ func TestFileServerCleans(t *testing.T) { ch := make(chan string, 1) fs := FileServer(&testFileSystem{func(name string) (File, error) { ch <- name - return nil, os.ENOENT + return nil, errors.New("file does not exist") }}) tests := []struct { reqPath, openArg string @@ -144,12 +152,19 @@ func TestFileServerCleans(t *testing.T) { } } +func mustRemoveAll(dir string) { + err := os.RemoveAll(dir) + if err != nil { + panic(err) + } +} + func TestFileServerImplicitLeadingSlash(t *testing.T) { tempDir, err := ioutil.TempDir("", "") if err != nil { t.Fatalf("TempDir: %v", err) } - defer os.RemoveAll(tempDir) + defer mustRemoveAll(tempDir) if err := ioutil.WriteFile(filepath.Join(tempDir, "foo.txt"), []byte("Hello world"), 0644); err != nil { t.Fatalf("WriteFile: %v", err) } @@ -164,6 +179,7 @@ func TestFileServerImplicitLeadingSlash(t *testing.T) { if err != nil { t.Fatalf("ReadAll %s: %v", suffix, err) } + res.Body.Close() return string(b) } if s := get("/bar/"); !strings.Contains(s, ">foo.txt<") { @@ -298,7 +314,6 @@ func TestServeIndexHtml(t *testing.T) { if err != nil { t.Fatal(err) } - defer res.Body.Close() b, err := ioutil.ReadAll(res.Body) if err != nil { t.Fatal("reading Body:", err) @@ -306,21 +321,150 @@ func TestServeIndexHtml(t *testing.T) { if s := string(b); s != want { t.Errorf("for path %q got %q, want %q", path, s, want) } + res.Body.Close() } } -func getBody(t *testing.T, req Request) (*Response, []byte) { +func TestServeContent(t *testing.T) { + type req struct { + name string + modtime time.Time + content io.ReadSeeker + } + ch := make(chan req, 1) + ts := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) { + p := <-ch + ServeContent(w, r, p.name, p.modtime, p.content) + })) + defer ts.Close() + + css, err := os.Open("testdata/style.css") + if err != nil { + t.Fatal(err) + } + defer css.Close() + + ch <- req{"style.css", time.Time{}, css} + res, err := Get(ts.URL) + if err != nil { + t.Fatal(err) + } + if g, e := res.Header.Get("Content-Type"), "text/css; charset=utf-8"; g != e { + t.Errorf("style.css: content type = %q, want %q", g, e) + } + if g := res.Header.Get("Last-Modified"); g != "" { + t.Errorf("want empty Last-Modified; got %q", g) + } + + fi, err := css.Stat() + if err != nil { + t.Fatal(err) + } + ch <- req{"style.html", fi.ModTime(), css} + res, err = Get(ts.URL) + if err != nil { + t.Fatal(err) + } + if g, e := res.Header.Get("Content-Type"), "text/html; charset=utf-8"; g != e { + t.Errorf("style.html: content type = %q, want %q", g, e) + } + if g := res.Header.Get("Last-Modified"); g == "" { + t.Errorf("want non-empty last-modified") + } +} + +// verifies that sendfile is being used on Linux +func TestLinuxSendfile(t *testing.T) { + if runtime.GOOS != "linux" { + t.Logf("skipping; linux-only test") + return + } + _, err := exec.LookPath("strace") + if err != nil { + t.Logf("skipping; strace not found in path") + return + } + + ln, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + lnf, err := ln.(*net.TCPListener).File() + if err != nil { + t.Fatal(err) + } + defer ln.Close() + + var buf bytes.Buffer + child := exec.Command("strace", "-f", os.Args[0], "-test.run=TestLinuxSendfileChild") + child.ExtraFiles = append(child.ExtraFiles, lnf) + child.Env = append([]string{"GO_WANT_HELPER_PROCESS=1"}, os.Environ()...) + child.Stdout = &buf + child.Stderr = &buf + err = child.Start() + if err != nil { + t.Logf("skipping; failed to start straced child: %v", err) + return + } + + res, err := Get(fmt.Sprintf("http://%s/", ln.Addr())) + if err != nil { + t.Fatalf("http client error: %v", err) + } + _, err = io.Copy(ioutil.Discard, res.Body) + if err != nil { + t.Fatalf("client body read error: %v", err) + } + res.Body.Close() + + // Force child to exit cleanly. + Get(fmt.Sprintf("http://%s/quit", ln.Addr())) + child.Wait() + + rx := regexp.MustCompile(`sendfile(64)?\(\d+,\s*\d+,\s*NULL,\s*\d+\)\s*=\s*\d+\s*\n`) + rxResume := regexp.MustCompile(`<\.\.\. sendfile(64)? resumed> \)\s*=\s*\d+\s*\n`) + out := buf.String() + if !rx.MatchString(out) && !rxResume.MatchString(out) { + t.Errorf("no sendfile system call found in:\n%s", out) + } +} + +func getBody(t *testing.T, testName string, req Request) (*Response, []byte) { r, err := DefaultClient.Do(&req) if err != nil { - t.Fatal(req.URL.String(), "send:", err) + t.Fatalf("%s: for URL %q, send error: %v", testName, req.URL.String(), err) } b, err := ioutil.ReadAll(r.Body) if err != nil { - t.Fatal("reading Body:", err) + t.Fatalf("%s: for URL %q, reading body: %v", testName, req.URL.String(), err) } return r, b } +// TestLinuxSendfileChild isn't a real test. It's used as a helper process +// for TestLinuxSendfile. +func TestLinuxSendfileChild(*testing.T) { + if os.Getenv("GO_WANT_HELPER_PROCESS") != "1" { + return + } + defer os.Exit(0) + fd3 := os.NewFile(3, "ephemeral-port-listener") + ln, err := net.FileListener(fd3) + if err != nil { + panic(err) + } + mux := NewServeMux() + mux.Handle("/", FileServer(Dir("testdata"))) + mux.HandleFunc("/quit", func(ResponseWriter, *Request) { + os.Exit(0) + }) + s := &Server{Handler: mux} + err = s.Serve(ln) + if err != nil { + panic(err) + } +} + func equal(a, b []byte) bool { if len(a) != len(b) { return false diff --git a/libgo/go/net/http/httptest/server.go b/libgo/go/net/http/httptest/server.go index 5b02e143d4a..57cf0c9417d 100644 --- a/libgo/go/net/http/httptest/server.go +++ b/libgo/go/net/http/httptest/server.go @@ -13,6 +13,7 @@ import ( "net" "net/http" "os" + "sync" ) // A Server is an HTTP server listening on a system-chosen port on the @@ -25,6 +26,10 @@ type Server struct { // Config may be changed after calling NewUnstartedServer and // before Start or StartTLS. Config *http.Server + + // wg counts the number of outstanding HTTP requests on this server. + // Close blocks until all requests are finished. + wg sync.WaitGroup } // historyListener keeps track of all connections that it's ever @@ -61,7 +66,7 @@ func newLocalListener() net.Listener { // When debugging a particular http server-based test, // this flag lets you run -// gotest -run=BrokenTest -httptest.serve=127.0.0.1:8000 +// go test -run=BrokenTest -httptest.serve=127.0.0.1:8000 // to start the broken server so you can interact with it manually. var serve = flag.String("httptest.serve", "", "if non-empty, httptest.NewServer serves on this address and blocks") @@ -93,9 +98,10 @@ func (s *Server) Start() { } s.Listener = &historyListener{s.Listener, make([]net.Conn, 0)} s.URL = "http://" + s.Listener.Addr().String() + s.wrapHandler() go s.Config.Serve(s.Listener) if *serve != "" { - fmt.Println(os.Stderr, "httptest: serving on", s.URL) + fmt.Fprintln(os.Stderr, "httptest: serving on", s.URL) select {} } } @@ -118,9 +124,21 @@ func (s *Server) StartTLS() { s.Listener = &historyListener{tlsListener, make([]net.Conn, 0)} s.URL = "https://" + s.Listener.Addr().String() + s.wrapHandler() go s.Config.Serve(s.Listener) } +func (s *Server) wrapHandler() { + h := s.Config.Handler + if h == nil { + h = http.DefaultServeMux + } + s.Config.Handler = &waitGroupHandler{ + s: s, + h: h, + } +} + // NewTLSServer starts and returns a new Server using TLS. // The caller should call Close when finished, to shut it down. func NewTLSServer(handler http.Handler) *Server { @@ -129,9 +147,11 @@ func NewTLSServer(handler http.Handler) *Server { return ts } -// Close shuts down the server. +// Close shuts down the server and blocks until all outstanding +// requests on this server have completed. func (s *Server) Close() { s.Listener.Close() + s.wg.Wait() } // CloseClientConnections closes any currently open HTTP connections @@ -146,6 +166,20 @@ func (s *Server) CloseClientConnections() { } } +// waitGroupHandler wraps a handler, incrementing and decrementing a +// sync.WaitGroup on each request, to enable Server.Close to block +// until outstanding requests are finished. +type waitGroupHandler struct { + s *Server + h http.Handler // non-nil +} + +func (h *waitGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + h.s.wg.Add(1) + defer h.s.wg.Done() // a defer, in case ServeHTTP below panics + h.h.ServeHTTP(w, r) +} + // localhostCert is a PEM-encoded TLS cert with SAN DNS names // "127.0.0.1" and "[::1]", expiring at the last second of 2049 (the end // of ASN.1 time). diff --git a/libgo/go/net/http/httptest/server_test.go b/libgo/go/net/http/httptest/server_test.go new file mode 100644 index 00000000000..500a9f0b800 --- /dev/null +++ b/libgo/go/net/http/httptest/server_test.go @@ -0,0 +1,29 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package httptest + +import ( + "io/ioutil" + "net/http" + "testing" +) + +func TestServer(t *testing.T) { + ts := NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("hello")) + })) + defer ts.Close() + res, err := http.Get(ts.URL) + if err != nil { + t.Fatal(err) + } + got, err := ioutil.ReadAll(res.Body) + if err != nil { + t.Fatal(err) + } + if string(got) != "hello" { + t.Errorf("got %q, want hello", string(got)) + } +} diff --git a/libgo/go/net/http/httputil/dump.go b/libgo/go/net/http/httputil/dump.go index c853066f1cf..892ef4eded0 100644 --- a/libgo/go/net/http/httputil/dump.go +++ b/libgo/go/net/http/httputil/dump.go @@ -12,6 +12,7 @@ import ( "io/ioutil" "net" "net/http" + "net/url" "strings" "time" ) @@ -59,6 +60,19 @@ func DumpRequestOut(req *http.Request, body bool) ([]byte, error) { } } + // Since we're using the actual Transport code to write the request, + // switch to http so the Transport doesn't try to do an SSL + // negotiation with our dumpConn and its bytes.Buffer & pipe. + // The wire format for https and http are the same, anyway. + reqSend := req + if req.URL.Scheme == "https" { + reqSend = new(http.Request) + *reqSend = *req + reqSend.URL = new(url.URL) + *reqSend.URL = *req.URL + reqSend.URL.Scheme = "http" + } + // Use the actual Transport code to record what we would send // on the wire, but not using TCP. Use a Transport with a // customer dialer that returns a fake net.Conn that waits @@ -79,7 +93,7 @@ func DumpRequestOut(req *http.Request, body bool) ([]byte, error) { }, } - _, err := t.RoundTrip(req) + _, err := t.RoundTrip(reqSend) req.Body = save if err != nil { diff --git a/libgo/go/net/http/httputil/dump_test.go b/libgo/go/net/http/httputil/dump_test.go index 819efb5847b..5afe9ba74e3 100644 --- a/libgo/go/net/http/httputil/dump_test.go +++ b/libgo/go/net/http/httputil/dump_test.go @@ -71,6 +71,18 @@ var dumpTests = []dumpTest{ "User-Agent: Go http package\r\n" + "Accept-Encoding: gzip\r\n\r\n", }, + + // Test that an https URL doesn't try to do an SSL negotiation + // with a bytes.Buffer and hang with all goroutines not + // runnable. + { + Req: *mustNewRequest("GET", "https://example.com/foo", nil), + + WantDumpOut: "GET /foo HTTP/1.1\r\n" + + "Host: example.com\r\n" + + "User-Agent: Go http package\r\n" + + "Accept-Encoding: gzip\r\n\r\n", + }, } func TestDumpRequest(t *testing.T) { diff --git a/libgo/go/net/http/httputil/persist.go b/libgo/go/net/http/httputil/persist.go index c065ccfb499..507938acac7 100644 --- a/libgo/go/net/http/httputil/persist.go +++ b/libgo/go/net/http/httputil/persist.go @@ -13,12 +13,12 @@ import ( "net" "net/http" "net/textproto" - "os" "sync" ) var ( ErrPersistEOF = &http.ProtocolError{ErrorString: "persistent connection closed"} + ErrClosed = &http.ProtocolError{ErrorString: "connection closed by user"} ErrPipeline = &http.ProtocolError{ErrorString: "pipeline error"} ) @@ -191,7 +191,7 @@ func (sc *ServerConn) Write(req *http.Request, resp *http.Response) error { } if sc.c == nil { // connection closed by user in the meantime defer sc.lk.Unlock() - return os.EBADF + return ErrClosed } c := sc.c if sc.nread <= sc.nwritten { @@ -383,7 +383,7 @@ func (cc *ClientConn) Read(req *http.Request) (resp *http.Response, err error) { // Make sure body is fully consumed, even if user does not call body.Close if lastbody != nil { // body.Close is assumed to be idempotent and multiple calls to - // it should return the error that its first invokation + // it should return the error that its first invocation // returned. err = lastbody.Close() if err != nil { diff --git a/libgo/go/net/http/lex.go b/libgo/go/net/http/lex.go index 93b67e70176..ffb393ccf6a 100644 --- a/libgo/go/net/http/lex.go +++ b/libgo/go/net/http/lex.go @@ -14,14 +14,6 @@ func isSeparator(c byte) bool { return false } -func isSpace(c byte) bool { - switch c { - case ' ', '\t', '\r', '\n': - return true - } - return false -} - func isCtl(c byte) bool { return (0 <= c && c <= 31) || c == 127 } func isChar(c byte) bool { return 0 <= c && c <= 127 } diff --git a/libgo/go/net/http/pprof/pprof.go b/libgo/go/net/http/pprof/pprof.go index 21eac4743ac..b8874f35d2f 100644 --- a/libgo/go/net/http/pprof/pprof.go +++ b/libgo/go/net/http/pprof/pprof.go @@ -12,23 +12,34 @@ // The handled paths all begin with /debug/pprof/. // // To use pprof, link this package into your program: -// import _ "http/pprof" +// import _ "net/http/pprof" // // Then use the pprof tool to look at the heap profile: // -// pprof http://localhost:6060/debug/pprof/heap +// go tool pprof http://localhost:6060/debug/pprof/heap // // Or to look at a 30-second CPU profile: // -// pprof http://localhost:6060/debug/pprof/profile +// go tool pprof http://localhost:6060/debug/pprof/profile +// +// Or to view all available profiles: +// +// go tool pprof http://localhost:6060/debug/pprof/ +// +// For a study of the facility in action, visit +// +// http://blog.golang.org/2011/06/profiling-go-programs.html // package pprof import ( "bufio" "bytes" + _ "debug/elf" "fmt" + "html/template" "io" + "log" "net/http" "os" "runtime" @@ -39,9 +50,9 @@ import ( ) func init() { + http.Handle("/debug/pprof/", http.HandlerFunc(Index)) http.Handle("/debug/pprof/cmdline", http.HandlerFunc(Cmdline)) http.Handle("/debug/pprof/profile", http.HandlerFunc(Profile)) - http.Handle("/debug/pprof/heap", http.HandlerFunc(Heap)) http.Handle("/debug/pprof/symbol", http.HandlerFunc(Symbol)) } @@ -53,13 +64,6 @@ func Cmdline(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, strings.Join(os.Args, "\x00")) } -// Heap responds with the pprof-formatted heap profile. -// The package initialization registers it as /debug/pprof/heap. -func Heap(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "text/plain; charset=utf-8") - pprof.WriteHeapProfile(w) -} - // Profile responds with the pprof-formatted cpu profile. // The package initialization registers it as /debug/pprof/profile. func Profile(w http.ResponseWriter, r *http.Request) { @@ -131,3 +135,61 @@ func Symbol(w http.ResponseWriter, r *http.Request) { w.Write(buf.Bytes()) } + +// Handler returns an HTTP handler that serves the named profile. +func Handler(name string) http.Handler { + return handler(name) +} + +type handler string + +func (name handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "text/plain; charset=utf-8") + debug, _ := strconv.Atoi(r.FormValue("debug")) + p := pprof.Lookup(string(name)) + if p == nil { + w.WriteHeader(404) + fmt.Fprintf(w, "Unknown profile: %s\n", name) + return + } + p.WriteTo(w, debug) + return +} + +// Index responds with the pprof-formatted profile named by the request. +// For example, "/debug/pprof/heap" serves the "heap" profile. +// Index responds to a request for "/debug/pprof/" with an HTML page +// listing the available profiles. +func Index(w http.ResponseWriter, r *http.Request) { + if strings.HasPrefix(r.URL.Path, "/debug/pprof/") { + name := r.URL.Path[len("/debug/pprof/"):] + if name != "" { + handler(name).ServeHTTP(w, r) + return + } + } + + profiles := pprof.Profiles() + if err := indexTmpl.Execute(w, profiles); err != nil { + log.Print(err) + } +} + +var indexTmpl = template.Must(template.New("index").Parse(`<html> +<head> +<title>/debug/pprof/</title> +</head> +/debug/pprof/<br> +<br> +<body> +profiles:<br> +<table> +{{range .}} +<tr><td align=right>{{.Count}}<td><a href="/debug/pprof/{{.Name}}?debug=1">{{.Name}}</a> +{{end}} +</table> +<br> +<a href="/debug/pprof/goroutine?debug=2">full goroutine stack dump</a><br> +</body> +</html> +`)) diff --git a/libgo/go/net/http/request.go b/libgo/go/net/http/request.go index 0bbec53be71..5277657805d 100644 --- a/libgo/go/net/http/request.go +++ b/libgo/go/net/http/request.go @@ -186,7 +186,7 @@ func (r *Request) Cookies() []*Cookie { return readCookies(r.Header, "") } -var ErrNoCookie = errors.New("http: named cookied not present") +var ErrNoCookie = errors.New("http: named cookie not present") // Cookie returns the named cookie provided in the request or // ErrNoCookie if not found. @@ -486,7 +486,7 @@ func ReadRequest(b *bufio.Reader) (req *Request, err error) { rawurl = "http://" + rawurl } - if req.URL, err = url.ParseRequest(rawurl); err != nil { + if req.URL, err = url.ParseRequestURI(rawurl); err != nil { return nil, err } diff --git a/libgo/go/net/http/response_test.go b/libgo/go/net/http/response_test.go index e5d01698e55..165ec3624a4 100644 --- a/libgo/go/net/http/response_test.go +++ b/libgo/go/net/http/response_test.go @@ -321,9 +321,7 @@ func TestReadResponseCloseInMiddle(t *testing.T) { } if test.compressed { buf.WriteString("Content-Encoding: gzip\r\n") - var err error - wr, err = gzip.NewWriter(wr) - checkErr(err, "gzip.NewWriter") + wr = gzip.NewWriter(wr) } buf.WriteString("\r\n") @@ -337,7 +335,7 @@ func TestReadResponseCloseInMiddle(t *testing.T) { wr.Write(chunk) } if test.compressed { - err := wr.(*gzip.Compressor).Close() + err := wr.(*gzip.Writer).Close() checkErr(err, "compressor close") } if test.chunked { diff --git a/libgo/go/net/http/serve_test.go b/libgo/go/net/http/serve_test.go index e2860c3edcf..b6a6b4c77d1 100644 --- a/libgo/go/net/http/serve_test.go +++ b/libgo/go/net/http/serve_test.go @@ -245,8 +245,7 @@ func TestServerTimeouts(t *testing.T) { fmt.Fprintf(res, "req=%d", reqNum) }) - const second = 1000000000 /* nanos */ - server := &Server{Handler: handler, ReadTimeout: 0.25 * second, WriteTimeout: 0.25 * second} + server := &Server{Handler: handler, ReadTimeout: 250 * time.Millisecond, WriteTimeout: 250 * time.Millisecond} go server.Serve(l) url := fmt.Sprintf("http://%s/", addr) @@ -277,7 +276,7 @@ func TestServerTimeouts(t *testing.T) { if n != 0 || err != io.EOF { t.Errorf("Read = %v, %v, wanted %v, %v", n, err, 0, io.EOF) } - if latency < 200*time.Millisecond /* fudge from 0.25 above */ { + if latency < 200*time.Millisecond /* fudge from 250 ms above */ { t.Errorf("got EOF after %s, want >= %s", latency, 200*time.Millisecond) } diff --git a/libgo/go/net/http/server.go b/libgo/go/net/http/server.go index 288539ba576..fa0df54a236 100644 --- a/libgo/go/net/http/server.go +++ b/libgo/go/net/http/server.go @@ -12,7 +12,6 @@ package http import ( "bufio" "bytes" - "crypto/rand" "crypto/tls" "errors" "fmt" @@ -59,7 +58,9 @@ type ResponseWriter interface { // Write writes the data to the connection as part of an HTTP reply. // If WriteHeader has not yet been called, Write calls WriteHeader(http.StatusOK) - // before writing the data. + // before writing the data. If the Header does not contain a + // Content-Type line, Write adds a Content-Type set to the result of passing + // the initial 512 bytes of written data to DetectContentType. Write([]byte) (int, error) // WriteHeader sends an HTTP response header with status code. @@ -833,11 +834,17 @@ func RedirectHandler(url string, code int) Handler { // redirecting any request containing . or .. elements to an // equivalent .- and ..-free URL. type ServeMux struct { - m map[string]Handler + mu sync.RWMutex + m map[string]muxEntry +} + +type muxEntry struct { + explicit bool + h Handler } // NewServeMux allocates and returns a new ServeMux. -func NewServeMux() *ServeMux { return &ServeMux{make(map[string]Handler)} } +func NewServeMux() *ServeMux { return &ServeMux{m: make(map[string]muxEntry)} } // DefaultServeMux is the default ServeMux used by Serve. var DefaultServeMux = NewServeMux() @@ -883,12 +890,28 @@ func (mux *ServeMux) match(path string) Handler { } if h == nil || len(k) > n { n = len(k) - h = v + h = v.h } } return h } +// handler returns the handler to use for the request r. +func (mux *ServeMux) handler(r *Request) Handler { + mux.mu.RLock() + defer mux.mu.RUnlock() + + // Host-specific pattern takes precedence over generic ones + h := mux.match(r.Host + r.URL.Path) + if h == nil { + h = mux.match(r.URL.Path) + } + if h == nil { + h = NotFoundHandler() + } + return h +} + // ServeHTTP dispatches the request to the handler whose // pattern most closely matches the request URL. func (mux *ServeMux) ServeHTTP(w ResponseWriter, r *Request) { @@ -898,30 +921,33 @@ func (mux *ServeMux) ServeHTTP(w ResponseWriter, r *Request) { w.WriteHeader(StatusMovedPermanently) return } - // Host-specific pattern takes precedence over generic ones - h := mux.match(r.Host + r.URL.Path) - if h == nil { - h = mux.match(r.URL.Path) - } - if h == nil { - h = NotFoundHandler() - } - h.ServeHTTP(w, r) + mux.handler(r).ServeHTTP(w, r) } // Handle registers the handler for the given pattern. +// If a handler already exists for pattern, Handle panics. func (mux *ServeMux) Handle(pattern string, handler Handler) { + mux.mu.Lock() + defer mux.mu.Unlock() + if pattern == "" { panic("http: invalid pattern " + pattern) } + if handler == nil { + panic("http: nil handler") + } + if mux.m[pattern].explicit { + panic("http: multiple registrations for " + pattern) + } - mux.m[pattern] = handler + mux.m[pattern] = muxEntry{explicit: true, h: handler} // Helpful behavior: - // If pattern is /tree/, insert permanent redirect for /tree. + // If pattern is /tree/, insert an implicit permanent redirect for /tree. + // It can be overridden by an explicit registration. n := len(pattern) - if n > 0 && pattern[n-1] == '/' { - mux.m[pattern[0:n-1]] = RedirectHandler(pattern, StatusMovedPermanently) + if n > 0 && pattern[n-1] == '/' && !mux.m[pattern[0:n-1]].explicit { + mux.m[pattern[0:n-1]] = muxEntry{h: RedirectHandler(pattern, StatusMovedPermanently)} } } @@ -958,6 +984,7 @@ type Server struct { ReadTimeout time.Duration // maximum duration before timing out read of the request WriteTimeout time.Duration // maximum duration before timing out write of the response MaxHeaderBytes int // maximum size of request headers, DefaultMaxHeaderBytes if 0 + TLSConfig *tls.Config // optional TLS config, used by ListenAndServeTLS } // ListenAndServe listens on the TCP network address srv.Addr and then @@ -980,15 +1007,26 @@ func (srv *Server) ListenAndServe() error { // then call srv.Handler to reply to them. func (srv *Server) Serve(l net.Listener) error { defer l.Close() + var tempDelay time.Duration // how long to sleep on accept failure for { rw, e := l.Accept() if e != nil { if ne, ok := e.(net.Error); ok && ne.Temporary() { - log.Printf("http: Accept error: %v", e) + if tempDelay == 0 { + tempDelay = 5 * time.Millisecond + } else { + tempDelay *= 2 + } + if max := 1 * time.Second; tempDelay > max { + tempDelay = max + } + log.Printf("http: Accept error: %v; retrying in %v", e, tempDelay) + time.Sleep(tempDelay) continue } return e } + tempDelay = 0 if srv.ReadTimeout != 0 { rw.SetReadDeadline(time.Now().Add(srv.ReadTimeout)) } @@ -1083,9 +1121,12 @@ func (srv *Server) ListenAndServeTLS(certFile, keyFile string) error { if addr == "" { addr = ":https" } - config := &tls.Config{ - Rand: rand.Reader, - NextProtos: []string{"http/1.1"}, + config := &tls.Config{} + if srv.TLSConfig != nil { + *config = *srv.TLSConfig + } + if config.NextProtos == nil { + config.NextProtos = []string{"http/1.1"} } var err error diff --git a/libgo/go/net/http/sniff.go b/libgo/go/net/http/sniff.go index c1c78e2417d..68f519b0542 100644 --- a/libgo/go/net/http/sniff.go +++ b/libgo/go/net/http/sniff.go @@ -9,15 +9,15 @@ import ( "encoding/binary" ) -// Content-type sniffing algorithm. -// References in this file refer to this draft specification: -// http://mimesniff.spec.whatwg.org/ - -// The algorithm prefers to use sniffLen bytes to make its decision. +// The algorithm uses at most sniffLen bytes to make its decision. const sniffLen = 512 -// DetectContentType returns the sniffed Content-Type string -// for the given data. This function always returns a valid MIME type. +// DetectContentType implements the algorithm described +// at http://mimesniff.spec.whatwg.org/ to determine the +// Content-Type of the given data. It considers at most the +// first 512 bytes of data. DetectContentType always returns +// a valid MIME type: if it cannot determine a more specific one, it +// returns "application/octet-stream". func DetectContentType(data []byte) string { if len(data) > sniffLen { data = data[:sniffLen] diff --git a/libgo/go/net/http/sniff_test.go b/libgo/go/net/http/sniff_test.go index 6efa8ce1ca2..8ab72ac23f9 100644 --- a/libgo/go/net/http/sniff_test.go +++ b/libgo/go/net/http/sniff_test.go @@ -129,9 +129,10 @@ func TestSniffWriteSize(t *testing.T) { })) defer ts.Close() for _, size := range []int{0, 1, 200, 600, 999, 1000, 1023, 1024, 512 << 10, 1 << 20} { - _, err := Get(fmt.Sprintf("%s/?size=%d", ts.URL, size)) + res, err := Get(fmt.Sprintf("%s/?size=%d", ts.URL, size)) if err != nil { t.Fatalf("size %d: %v", size, err) } + res.Body.Close() } } diff --git a/libgo/go/net/http/status.go b/libgo/go/net/http/status.go index b6e2d65c6a5..5af0b77c428 100644 --- a/libgo/go/net/http/status.go +++ b/libgo/go/net/http/status.go @@ -43,6 +43,7 @@ const ( StatusUnsupportedMediaType = 415 StatusRequestedRangeNotSatisfiable = 416 StatusExpectationFailed = 417 + StatusTeapot = 418 StatusInternalServerError = 500 StatusNotImplemented = 501 @@ -90,6 +91,7 @@ var statusText = map[int]string{ StatusUnsupportedMediaType: "Unsupported Media Type", StatusRequestedRangeNotSatisfiable: "Requested Range Not Satisfiable", StatusExpectationFailed: "Expectation Failed", + StatusTeapot: "I'm a teapot", StatusInternalServerError: "Internal Server Error", StatusNotImplemented: "Not Implemented", diff --git a/libgo/go/net/http/transfer.go b/libgo/go/net/http/transfer.go index ef9564af9c5..3c8fe7f5b51 100644 --- a/libgo/go/net/http/transfer.go +++ b/libgo/go/net/http/transfer.go @@ -383,7 +383,7 @@ func fixTransferEncoding(requestMethod string, header Header) ([]string, error) // chunked encoding must always come first. for _, encoding := range encodings { encoding = strings.ToLower(strings.TrimSpace(encoding)) - // "identity" encoding is not recored + // "identity" encoding is not recorded if encoding == "identity" { break } diff --git a/libgo/go/net/http/transport.go b/libgo/go/net/http/transport.go index 693215edd4f..09579f8a093 100644 --- a/libgo/go/net/http/transport.go +++ b/libgo/go/net/http/transport.go @@ -76,7 +76,9 @@ type Transport struct { // ProxyFromEnvironment returns the URL of the proxy to use for a // given request, as indicated by the environment variables // $HTTP_PROXY and $NO_PROXY (or $http_proxy and $no_proxy). -// Either URL or an error is returned. +// An error is returned if the proxy environment is invalid. +// A nil URL and nil error are returned if no proxy is defined in the +// environment, or a proxy should not be used for the given request. func ProxyFromEnvironment(req *Request) (*url.URL, error) { proxy := getenvEitherCase("HTTP_PROXY") if proxy == "" { @@ -85,16 +87,16 @@ func ProxyFromEnvironment(req *Request) (*url.URL, error) { if !useProxy(canonicalAddr(req.URL)) { return nil, nil } - proxyURL, err := url.ParseRequest(proxy) - if err != nil { - return nil, errors.New("invalid proxy address") - } - if proxyURL.Host == "" { - proxyURL, err = url.ParseRequest("http://" + proxy) - if err != nil { - return nil, errors.New("invalid proxy address") + proxyURL, err := url.Parse(proxy) + if err != nil || proxyURL.Scheme == "" { + if u, err := url.Parse("http://" + proxy); err == nil { + proxyURL = u + err = nil } } + if err != nil { + return nil, fmt.Errorf("invalid proxy address %q: %v", proxy, err) + } return proxyURL, nil } @@ -235,15 +237,19 @@ func (cm *connectMethod) proxyAuth() string { return "" } -func (t *Transport) putIdleConn(pconn *persistConn) { +// putIdleConn adds pconn to the list of idle persistent connections awaiting +// a new request. +// If pconn is no longer needed or not in a good state, putIdleConn +// returns false. +func (t *Transport) putIdleConn(pconn *persistConn) bool { t.lk.Lock() defer t.lk.Unlock() if t.DisableKeepAlives || t.MaxIdleConnsPerHost < 0 { pconn.close() - return + return false } if pconn.isBroken() { - return + return false } key := pconn.cacheKey max := t.MaxIdleConnsPerHost @@ -252,9 +258,10 @@ func (t *Transport) putIdleConn(pconn *persistConn) { } if len(t.idleConn[key]) >= max { pconn.close() - return + return false } t.idleConn[key] = append(t.idleConn[key], pconn) + return true } func (t *Transport) getIdleConn(cm *connectMethod) (pconn *persistConn) { @@ -565,7 +572,9 @@ func (pc *persistConn) readLoop() { lastbody = resp.Body waitForBodyRead = make(chan bool) resp.Body.(*bodyEOFSignal).fn = func() { - pc.t.putIdleConn(pc) + if !pc.t.putIdleConn(pc) { + alive = false + } waitForBodyRead <- true } } else { @@ -578,7 +587,9 @@ func (pc *persistConn) readLoop() { // read it (even though it'll just be 0, EOF). lastbody = nil - pc.t.putIdleConn(pc) + if !pc.t.putIdleConn(pc) { + alive = false + } } } diff --git a/libgo/go/net/http/transport_test.go b/libgo/go/net/http/transport_test.go index caf81d6e46b..cbb3884f9ea 100644 --- a/libgo/go/net/http/transport_test.go +++ b/libgo/go/net/http/transport_test.go @@ -16,6 +16,8 @@ import ( . "net/http" "net/http/httptest" "net/url" + "os" + "runtime" "strconv" "strings" "testing" @@ -441,11 +443,7 @@ func TestRoundTripGzip(t *testing.T) { } if accept == "gzip" { rw.Header().Set("Content-Encoding", "gzip") - gz, err := gzip.NewWriter(rw) - if err != nil { - t.Errorf("gzip NewWriter: %v", err) - return - } + gz := gzip.NewWriter(rw) gz.Write([]byte(responseBody)) gz.Close() } else { @@ -512,7 +510,7 @@ func TestTransportGzip(t *testing.T) { rw.Header().Set("Content-Length", strconv.Itoa(buf.Len())) }() } - gz, _ := gzip.NewWriter(w) + gz := gzip.NewWriter(w) gz.Write([]byte(testString)) if req.FormValue("body") == "large" { io.CopyN(gz, rand.Reader, nRandBytes) @@ -636,6 +634,70 @@ func TestTransportGzipRecursive(t *testing.T) { } } +// tests that persistent goroutine connections shut down when no longer desired. +func TestTransportPersistConnLeak(t *testing.T) { + gotReqCh := make(chan bool) + unblockCh := make(chan bool) + ts := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) { + gotReqCh <- true + <-unblockCh + w.Header().Set("Content-Length", "0") + w.WriteHeader(204) + })) + defer ts.Close() + + tr := &Transport{} + c := &Client{Transport: tr} + + n0 := runtime.NumGoroutine() + + const numReq = 25 + didReqCh := make(chan bool) + for i := 0; i < numReq; i++ { + go func() { + res, err := c.Get(ts.URL) + didReqCh <- true + if err != nil { + t.Errorf("client fetch error: %v", err) + return + } + res.Body.Close() + }() + } + + // Wait for all goroutines to be stuck in the Handler. + for i := 0; i < numReq; i++ { + <-gotReqCh + } + + nhigh := runtime.NumGoroutine() + + // Tell all handlers to unblock and reply. + for i := 0; i < numReq; i++ { + unblockCh <- true + } + + // Wait for all HTTP clients to be done. + for i := 0; i < numReq; i++ { + <-didReqCh + } + + tr.CloseIdleConnections() + time.Sleep(100 * time.Millisecond) + runtime.GC() + runtime.GC() // even more. + nfinal := runtime.NumGoroutine() + + growth := nfinal - n0 + + // We expect 0 or 1 extra goroutine, empirically. Allow up to 5. + // Previously we were leaking one per numReq. + t.Logf("goroutine growth: %d -> %d -> %d (delta: %d)", n0, nhigh, nfinal, growth) + if int(growth) > 5 { + t.Error("too many new goroutines") + } +} + type fooProto struct{} func (fooProto) RoundTrip(req *Request) (*Response, error) { @@ -666,6 +728,36 @@ func TestTransportAltProto(t *testing.T) { } } +var proxyFromEnvTests = []struct { + env string + wanturl string + wanterr error +}{ + {"127.0.0.1:8080", "http://127.0.0.1:8080", nil}, + {"http://127.0.0.1:8080", "http://127.0.0.1:8080", nil}, + {"https://127.0.0.1:8080", "https://127.0.0.1:8080", nil}, + {"", "<nil>", nil}, +} + +func TestProxyFromEnvironment(t *testing.T) { + os.Setenv("HTTP_PROXY", "") + os.Setenv("http_proxy", "") + os.Setenv("NO_PROXY", "") + os.Setenv("no_proxy", "") + for i, tt := range proxyFromEnvTests { + os.Setenv("HTTP_PROXY", tt.env) + req, _ := NewRequest("GET", "http://example.com", nil) + url, err := ProxyFromEnvironment(req) + if g, e := fmt.Sprintf("%v", err), fmt.Sprintf("%v", tt.wanterr); g != e { + t.Errorf("%d. got error = %q, want %q", i, g, e) + continue + } + if got := fmt.Sprintf("%s", url); got != tt.wanturl { + t.Errorf("%d. got URL = %q, want %q", i, url, tt.wanturl) + } + } +} + // rgz is a gzip quine that uncompresses to itself. var rgz = []byte{ 0x1f, 0x8b, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, diff --git a/libgo/go/net/http/triv.go b/libgo/go/net/http/triv.go index 994fc0e32f6..269af0ca3d5 100644 --- a/libgo/go/net/http/triv.go +++ b/libgo/go/net/http/triv.go @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// +build ignore + package main import ( @@ -106,7 +108,6 @@ func DateServer(rw http.ResponseWriter, req *http.Request) { fmt.Fprintf(rw, "fork/exec: %s\n", err) return } - defer p.Release() io.Copy(rw, r) wait, err := p.Wait(0) if err != nil { diff --git a/libgo/go/net/interface.go b/libgo/go/net/interface.go index 5e7b352ed50..f25d046c171 100644 --- a/libgo/go/net/interface.go +++ b/libgo/go/net/interface.go @@ -6,11 +6,7 @@ package net -import ( - "bytes" - "errors" - "fmt" -) +import "errors" var ( errInvalidInterface = errors.New("net: invalid interface") @@ -20,77 +16,6 @@ var ( errNoSuchMulticastInterface = errors.New("net: no such multicast interface") ) -// A HardwareAddr represents a physical hardware address. -type HardwareAddr []byte - -func (a HardwareAddr) String() string { - var buf bytes.Buffer - for i, b := range a { - if i > 0 { - buf.WriteByte(':') - } - fmt.Fprintf(&buf, "%02x", b) - } - return buf.String() -} - -// ParseMAC parses s as an IEEE 802 MAC-48, EUI-48, or EUI-64 using one of the -// following formats: -// 01:23:45:67:89:ab -// 01:23:45:67:89:ab:cd:ef -// 01-23-45-67-89-ab -// 01-23-45-67-89-ab-cd-ef -// 0123.4567.89ab -// 0123.4567.89ab.cdef -func ParseMAC(s string) (hw HardwareAddr, err error) { - if len(s) < 14 { - goto error - } - - if s[2] == ':' || s[2] == '-' { - if (len(s)+1)%3 != 0 { - goto error - } - n := (len(s) + 1) / 3 - if n != 6 && n != 8 { - goto error - } - hw = make(HardwareAddr, n) - for x, i := 0, 0; i < n; i++ { - var ok bool - if hw[i], ok = xtoi2(s[x:], s[2]); !ok { - goto error - } - x += 3 - } - } else if s[4] == '.' { - if (len(s)+1)%5 != 0 { - goto error - } - n := 2 * (len(s) + 1) / 5 - if n != 6 && n != 8 { - goto error - } - hw = make(HardwareAddr, n) - for x, i := 0, 0; i < n; i += 2 { - var ok bool - if hw[i], ok = xtoi2(s[x:x+2], 0); !ok { - goto error - } - if hw[i+1], ok = xtoi2(s[x+2:], s[4]); !ok { - goto error - } - x += 5 - } - } else { - goto error - } - return hw, nil - -error: - return nil, errors.New("invalid MAC address: " + s) -} - // Interface represents a mapping between network interface name // and index. It also represents network interface facility // information. diff --git a/libgo/go/net/interface_linux.go b/libgo/go/net/interface_linux.go index 21038c629b1..15c2f3781b1 100644 --- a/libgo/go/net/interface_linux.go +++ b/libgo/go/net/interface_linux.go @@ -166,13 +166,13 @@ func interfaceMulticastAddrTable(ifindex int) ([]Addr, error) { return nil, err } } - ifmat4 := parseProcNetIGMP(ifi) - ifmat6 := parseProcNetIGMP6(ifi) + ifmat4 := parseProcNetIGMP("/proc/net/igmp", ifi) + ifmat6 := parseProcNetIGMP6("/proc/net/igmp6", ifi) return append(ifmat4, ifmat6...), nil } -func parseProcNetIGMP(ifi *Interface) []Addr { - fd, err := open("/proc/net/igmp") +func parseProcNetIGMP(path string, ifi *Interface) []Addr { + fd, err := open(path) if err != nil { return nil } @@ -185,23 +185,26 @@ func parseProcNetIGMP(ifi *Interface) []Addr { fd.readLine() // skip first line b := make([]byte, IPv4len) for l, ok := fd.readLine(); ok; l, ok = fd.readLine() { - f := getFields(l) - switch len(f) { - case 4: + f := splitAtBytes(l, " :\r\t\n") + if len(f) < 4 { + continue + } + switch { + case l[0] != ' ' && l[0] != '\t': // new interface line + name = f[1] + case len(f[0]) == 8: if ifi == nil || name == ifi.Name { fmt.Sscanf(f[0], "%08x", &b) ifma := IPAddr{IP: IPv4(b[3], b[2], b[1], b[0])} ifmat = append(ifmat, ifma.toAddr()) } - case 5: - name = f[1] } } return ifmat } -func parseProcNetIGMP6(ifi *Interface) []Addr { - fd, err := open("/proc/net/igmp6") +func parseProcNetIGMP6(path string, ifi *Interface) []Addr { + fd, err := open(path) if err != nil { return nil } @@ -210,7 +213,10 @@ func parseProcNetIGMP6(ifi *Interface) []Addr { var ifmat []Addr b := make([]byte, IPv6len) for l, ok := fd.readLine(); ok; l, ok = fd.readLine() { - f := getFields(l) + f := splitAtBytes(l, " \r\t\n") + if len(f) < 6 { + continue + } if ifi == nil || f[1] == ifi.Name { fmt.Sscanf(f[2], "%32x", &b) ifma := IPAddr{IP: IP{b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15]}} diff --git a/libgo/go/net/interface_test.go b/libgo/go/net/interface_test.go index 4ce01dc9061..0a33bfdb517 100644 --- a/libgo/go/net/interface_test.go +++ b/libgo/go/net/interface_test.go @@ -6,8 +6,6 @@ package net import ( "bytes" - "reflect" - "strings" "testing" ) @@ -31,17 +29,17 @@ func TestInterfaces(t *testing.T) { for _, ifi := range ift { ifxi, err := InterfaceByIndex(ifi.Index) if err != nil { - t.Fatalf("InterfaceByIndex(%#q) failed: %v", ifi.Index, err) + t.Fatalf("InterfaceByIndex(%q) failed: %v", ifi.Index, err) } if !sameInterface(ifxi, &ifi) { - t.Fatalf("InterfaceByIndex(%#q) = %v, want %v", ifi.Index, *ifxi, ifi) + t.Fatalf("InterfaceByIndex(%q) = %v, want %v", ifi.Index, *ifxi, ifi) } ifxn, err := InterfaceByName(ifi.Name) if err != nil { - t.Fatalf("InterfaceByName(%#q) failed: %v", ifi.Name, err) + t.Fatalf("InterfaceByName(%q) failed: %v", ifi.Name, err) } if !sameInterface(ifxn, &ifi) { - t.Fatalf("InterfaceByName(%#q) = %v, want %v", ifi.Name, *ifxn, ifi) + t.Fatalf("InterfaceByName(%q) = %v, want %v", ifi.Name, *ifxn, ifi) } t.Logf("%q: flags %q, ifindex %v, mtu %v\n", ifi.Name, ifi.Flags.String(), ifi.Index, ifi.MTU) t.Logf("\thardware address %q", ifi.HardwareAddr.String()) @@ -96,46 +94,3 @@ func testMulticastAddrs(t *testing.T, ifmat []Addr) { } } } - -var mactests = []struct { - in string - out HardwareAddr - err string -}{ - {"01:23:45:67:89:AB", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab}, ""}, - {"01-23-45-67-89-AB", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab}, ""}, - {"0123.4567.89AB", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab}, ""}, - {"ab:cd:ef:AB:CD:EF", HardwareAddr{0xab, 0xcd, 0xef, 0xab, 0xcd, 0xef}, ""}, - {"01.02.03.04.05.06", nil, "invalid MAC address"}, - {"01:02:03:04:05:06:", nil, "invalid MAC address"}, - {"x1:02:03:04:05:06", nil, "invalid MAC address"}, - {"01002:03:04:05:06", nil, "invalid MAC address"}, - {"01:02003:04:05:06", nil, "invalid MAC address"}, - {"01:02:03004:05:06", nil, "invalid MAC address"}, - {"01:02:03:04005:06", nil, "invalid MAC address"}, - {"01:02:03:04:05006", nil, "invalid MAC address"}, - {"01-02:03:04:05:06", nil, "invalid MAC address"}, - {"01:02-03-04-05-06", nil, "invalid MAC address"}, - {"0123:4567:89AF", nil, "invalid MAC address"}, - {"0123-4567-89AF", nil, "invalid MAC address"}, - {"01:23:45:67:89:AB:CD:EF", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}, ""}, - {"01-23-45-67-89-AB-CD-EF", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}, ""}, - {"0123.4567.89AB.CDEF", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}, ""}, -} - -func match(err error, s string) bool { - if s == "" { - return err == nil - } - return err != nil && strings.Contains(err.Error(), s) -} - -func TestParseMAC(t *testing.T) { - for _, tt := range mactests { - out, err := ParseMAC(tt.in) - if !reflect.DeepEqual(out, tt.out) || !match(err, tt.err) { - t.Errorf("ParseMAC(%q) = %v, %v, want %v, %v", tt.in, out, err, tt.out, - tt.err) - } - } -} diff --git a/libgo/go/net/ip_test.go b/libgo/go/net/ip_test.go index df647ef73c0..d0e987b85f7 100644 --- a/libgo/go/net/ip_test.go +++ b/libgo/go/net/ip_test.go @@ -6,6 +6,7 @@ package net import ( "bytes" + _ "debug/elf" "reflect" "runtime" "testing" diff --git a/libgo/go/net/ipraw_test.go b/libgo/go/net/ipraw_test.go index f9401c1104e..6136202727c 100644 --- a/libgo/go/net/ipraw_test.go +++ b/libgo/go/net/ipraw_test.go @@ -7,6 +7,7 @@ package net import ( "bytes" "os" + "syscall" "testing" "time" ) @@ -15,7 +16,7 @@ var icmpTests = []struct { net string laddr string raddr string - ipv6 bool + ipv6 bool // test with underlying AF_INET6 socket }{ {"ip4:icmp", "", "127.0.0.1", false}, {"ip6:icmp", "", "::1", true}, @@ -34,15 +35,15 @@ func TestICMP(t *testing.T) { } id := os.Getpid() & 0xffff seqnum++ - echo := newICMPEchoRequest(tt.ipv6, id, seqnum, 128, []byte("Go Go Gadget Ping!!!")) - exchangeICMPEcho(t, tt.net, tt.laddr, tt.raddr, tt.ipv6, echo) + echo := newICMPEchoRequest(tt.net, id, seqnum, 128, []byte("Go Go Gadget Ping!!!")) + exchangeICMPEcho(t, tt.net, tt.laddr, tt.raddr, echo) } } -func exchangeICMPEcho(t *testing.T, net, laddr, raddr string, ipv6 bool, echo []byte) { +func exchangeICMPEcho(t *testing.T, net, laddr, raddr string, echo []byte) { c, err := ListenPacket(net, laddr) if err != nil { - t.Errorf("ListenPacket(%#q, %#q) failed: %v", net, laddr, err) + t.Errorf("ListenPacket(%q, %q) failed: %v", net, laddr, err) return } c.SetDeadline(time.Now().Add(100 * time.Millisecond)) @@ -50,12 +51,12 @@ func exchangeICMPEcho(t *testing.T, net, laddr, raddr string, ipv6 bool, echo [] ra, err := ResolveIPAddr(net, raddr) if err != nil { - t.Errorf("ResolveIPAddr(%#q, %#q) failed: %v", net, raddr, err) + t.Errorf("ResolveIPAddr(%q, %q) failed: %v", net, raddr, err) return } waitForReady := make(chan bool) - go icmpEchoTransponder(t, net, raddr, ipv6, waitForReady) + go icmpEchoTransponder(t, net, raddr, waitForReady) <-waitForReady _, err = c.WriteTo(echo, ra) @@ -71,11 +72,15 @@ func exchangeICMPEcho(t *testing.T, net, laddr, raddr string, ipv6 bool, echo [] t.Errorf("ReadFrom failed: %v", err) return } - if !ipv6 && reply[0] != ICMP4_ECHO_REPLY { - continue - } - if ipv6 && reply[0] != ICMP6_ECHO_REPLY { - continue + switch c.(*IPConn).fd.family { + case syscall.AF_INET: + if reply[0] != ICMP4_ECHO_REPLY { + continue + } + case syscall.AF_INET6: + if reply[0] != ICMP6_ECHO_REPLY { + continue + } } xid, xseqnum := parseICMPEchoReply(echo) rid, rseqnum := parseICMPEchoReply(reply) @@ -87,11 +92,11 @@ func exchangeICMPEcho(t *testing.T, net, laddr, raddr string, ipv6 bool, echo [] } } -func icmpEchoTransponder(t *testing.T, net, raddr string, ipv6 bool, waitForReady chan bool) { +func icmpEchoTransponder(t *testing.T, net, raddr string, waitForReady chan bool) { c, err := Dial(net, raddr) if err != nil { waitForReady <- true - t.Errorf("Dial(%#q, %#q) failed: %v", net, raddr, err) + t.Errorf("Dial(%q, %q) failed: %v", net, raddr, err) return } c.SetDeadline(time.Now().Add(100 * time.Millisecond)) @@ -106,18 +111,23 @@ func icmpEchoTransponder(t *testing.T, net, raddr string, ipv6 bool, waitForRead t.Errorf("Read failed: %v", err) return } - if !ipv6 && echo[0] != ICMP4_ECHO_REQUEST { - continue - } - if ipv6 && echo[0] != ICMP6_ECHO_REQUEST { - continue + switch c.(*IPConn).fd.family { + case syscall.AF_INET: + if echo[0] != ICMP4_ECHO_REQUEST { + continue + } + case syscall.AF_INET6: + if echo[0] != ICMP6_ECHO_REQUEST { + continue + } } break } - if !ipv6 { + switch c.(*IPConn).fd.family { + case syscall.AF_INET: echo[0] = ICMP4_ECHO_REPLY - } else { + case syscall.AF_INET6: echo[0] = ICMP6_ECHO_REPLY } @@ -135,11 +145,15 @@ const ( ICMP6_ECHO_REPLY = 129 ) -func newICMPEchoRequest(ipv6 bool, id, seqnum, msglen int, filler []byte) []byte { - if !ipv6 { +func newICMPEchoRequest(net string, id, seqnum, msglen int, filler []byte) []byte { + afnet, _, _ := parseDialNetwork(net) + switch afnet { + case "ip4": return newICMPv4EchoRequest(id, seqnum, msglen, filler) + case "ip6": + return newICMPv6EchoRequest(id, seqnum, msglen, filler) } - return newICMPv6EchoRequest(id, seqnum, msglen, filler) + return nil } func newICMPv4EchoRequest(id, seqnum, msglen int, filler []byte) []byte { diff --git a/libgo/go/net/iprawsock_plan9.go b/libgo/go/net/iprawsock_plan9.go index 382a4402770..43719fc99cd 100644 --- a/libgo/go/net/iprawsock_plan9.go +++ b/libgo/go/net/iprawsock_plan9.go @@ -7,7 +7,7 @@ package net import ( - "os" + "syscall" "time" ) @@ -17,34 +17,34 @@ type IPConn bool // SetDeadline implements the Conn SetDeadline method. func (c *IPConn) SetDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } // SetReadDeadline implements the Conn SetReadDeadline method. func (c *IPConn) SetReadDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } // SetWriteDeadline implements the Conn SetWriteDeadline method. func (c *IPConn) SetWriteDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } // Implementation of the Conn interface - see Conn for documentation. // Read implements the Conn Read method. func (c *IPConn) Read(b []byte) (int, error) { - return 0, os.EPLAN9 + return 0, syscall.EPLAN9 } // Write implements the Conn Write method. func (c *IPConn) Write(b []byte) (int, error) { - return 0, os.EPLAN9 + return 0, syscall.EPLAN9 } // Close closes the IP connection. func (c *IPConn) Close() error { - return os.EPLAN9 + return syscall.EPLAN9 } // LocalAddr returns the local network address. @@ -67,12 +67,12 @@ func (c *IPConn) RemoteAddr() Addr { // Timeout() == true after a fixed time limit; see SetDeadline and // SetReadDeadline. func (c *IPConn) ReadFromIP(b []byte) (int, *IPAddr, error) { - return 0, nil, os.EPLAN9 + return 0, nil, syscall.EPLAN9 } // ReadFrom implements the PacketConn ReadFrom method. func (c *IPConn) ReadFrom(b []byte) (int, Addr, error) { - return 0, nil, os.EPLAN9 + return 0, nil, syscall.EPLAN9 } // WriteToIP writes a IP packet to addr via c, copying the payload from b. @@ -82,18 +82,18 @@ func (c *IPConn) ReadFrom(b []byte) (int, Addr, error) { // see SetDeadline and SetWriteDeadline. // On packet-oriented connections, write timeouts are rare. func (c *IPConn) WriteToIP(b []byte, addr *IPAddr) (int, error) { - return 0, os.EPLAN9 + return 0, syscall.EPLAN9 } // WriteTo implements the PacketConn WriteTo method. func (c *IPConn) WriteTo(b []byte, addr Addr) (int, error) { - return 0, os.EPLAN9 + return 0, syscall.EPLAN9 } // DialIP connects to the remote address raddr on the network protocol netProto, // which must be "ip", "ip4", or "ip6" followed by a colon and a protocol number or name. func DialIP(netProto string, laddr, raddr *IPAddr) (*IPConn, error) { - return nil, os.EPLAN9 + return nil, syscall.EPLAN9 } // ListenIP listens for incoming IP packets addressed to the @@ -101,5 +101,5 @@ func DialIP(netProto string, laddr, raddr *IPAddr) (*IPConn, error) { // and WriteTo methods can be used to receive and send IP // packets with per-packet addressing. func ListenIP(netProto string, laddr *IPAddr) (*IPConn, error) { - return nil, os.EPLAN9 + return nil, syscall.EPLAN9 } diff --git a/libgo/go/net/iprawsock_posix.go b/libgo/go/net/iprawsock_posix.go index c34ffeb121d..9caa86985a5 100644 --- a/libgo/go/net/iprawsock_posix.go +++ b/libgo/go/net/iprawsock_posix.go @@ -66,7 +66,7 @@ func (c *IPConn) Read(b []byte) (int, error) { // Write implements the Conn Write method. func (c *IPConn) Write(b []byte) (int, error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } return c.fd.Write(b) } @@ -74,7 +74,7 @@ func (c *IPConn) Write(b []byte) (int, error) { // Close closes the IP connection. func (c *IPConn) Close() error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } err := c.fd.Close() c.fd = nil @@ -100,7 +100,7 @@ func (c *IPConn) RemoteAddr() Addr { // SetDeadline implements the Conn SetDeadline method. func (c *IPConn) SetDeadline(t time.Time) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setDeadline(c.fd, t) } @@ -108,7 +108,7 @@ func (c *IPConn) SetDeadline(t time.Time) error { // SetReadDeadline implements the Conn SetReadDeadline method. func (c *IPConn) SetReadDeadline(t time.Time) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setReadDeadline(c.fd, t) } @@ -116,7 +116,7 @@ func (c *IPConn) SetReadDeadline(t time.Time) error { // SetWriteDeadline implements the Conn SetWriteDeadline method. func (c *IPConn) SetWriteDeadline(t time.Time) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setWriteDeadline(c.fd, t) } @@ -125,7 +125,7 @@ func (c *IPConn) SetWriteDeadline(t time.Time) error { // receive buffer associated with the connection. func (c *IPConn) SetReadBuffer(bytes int) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setReadBuffer(c.fd, bytes) } @@ -134,7 +134,7 @@ func (c *IPConn) SetReadBuffer(bytes int) error { // transmit buffer associated with the connection. func (c *IPConn) SetWriteBuffer(bytes int) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setWriteBuffer(c.fd, bytes) } @@ -150,7 +150,7 @@ func (c *IPConn) SetWriteBuffer(bytes int) error { // SetReadDeadline. func (c *IPConn) ReadFromIP(b []byte) (int, *IPAddr, error) { if !c.ok() { - return 0, nil, os.EINVAL + return 0, nil, syscall.EINVAL } // TODO(cw,rsc): consider using readv if we know the family // type to avoid the header trim/copy @@ -173,7 +173,7 @@ func (c *IPConn) ReadFromIP(b []byte) (int, *IPAddr, error) { // ReadFrom implements the PacketConn ReadFrom method. func (c *IPConn) ReadFrom(b []byte) (int, Addr, error) { if !c.ok() { - return 0, nil, os.EINVAL + return 0, nil, syscall.EINVAL } n, uaddr, err := c.ReadFromIP(b) return n, uaddr.toAddr(), err @@ -187,7 +187,7 @@ func (c *IPConn) ReadFrom(b []byte) (int, Addr, error) { // On packet-oriented connections, write timeouts are rare. func (c *IPConn) WriteToIP(b []byte, addr *IPAddr) (int, error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } sa, err := addr.sockaddr(c.fd.family) if err != nil { @@ -199,11 +199,11 @@ func (c *IPConn) WriteToIP(b []byte, addr *IPAddr) (int, error) { // WriteTo implements the PacketConn WriteTo method. func (c *IPConn) WriteTo(b []byte, addr Addr) (int, error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } a, ok := addr.(*IPAddr) if !ok { - return 0, &OpError{"write", c.fd.net, addr, os.EINVAL} + return 0, &OpError{"write", c.fd.net, addr, syscall.EINVAL} } return c.WriteToIP(b, a) } diff --git a/libgo/go/net/ipsock_plan9.go b/libgo/go/net/ipsock_plan9.go index 597b1277544..eab0bf3e899 100644 --- a/libgo/go/net/ipsock_plan9.go +++ b/libgo/go/net/ipsock_plan9.go @@ -10,6 +10,7 @@ import ( "errors" "io" "os" + "syscall" "time" ) @@ -83,7 +84,7 @@ func (c *plan9Conn) ok() bool { return c != nil && c.ctl != nil } // Read implements the Conn Read method. func (c *plan9Conn) Read(b []byte) (n int, err error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } if c.data == nil { c.data, err = os.OpenFile(c.dir+"/data", os.O_RDWR, 0) @@ -102,7 +103,7 @@ func (c *plan9Conn) Read(b []byte) (n int, err error) { // Write implements the Conn Write method. func (c *plan9Conn) Write(b []byte) (n int, err error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } if c.data == nil { c.data, err = os.OpenFile(c.dir+"/data", os.O_RDWR, 0) @@ -116,7 +117,7 @@ func (c *plan9Conn) Write(b []byte) (n int, err error) { // Close closes the connection. func (c *plan9Conn) Close() error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } err := c.ctl.Close() if err != nil { @@ -148,17 +149,17 @@ func (c *plan9Conn) RemoteAddr() Addr { // SetDeadline implements the Conn SetDeadline method. func (c *plan9Conn) SetDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } // SetReadDeadline implements the Conn SetReadDeadline method. func (c *plan9Conn) SetReadDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } // SetWriteDeadline implements the Conn SetWriteDeadline method. func (c *plan9Conn) SetWriteDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } func startPlan9(net string, addr Addr) (ctl *os.File, dest, proto, name string, err error) { @@ -280,7 +281,7 @@ func (l *plan9Listener) Accept() (c Conn, err error) { func (l *plan9Listener) Close() error { if l == nil || l.ctl == nil { - return os.EINVAL + return syscall.EINVAL } return l.ctl.Close() } diff --git a/libgo/go/net/ipsock_posix.go b/libgo/go/net/ipsock_posix.go index 3a059f516bc..4841057d6be 100644 --- a/libgo/go/net/ipsock_posix.go +++ b/libgo/go/net/ipsock_posix.go @@ -53,13 +53,13 @@ func probeIPv6Stack() (supportsIPv6, supportsIPv4map bool) { } // favoriteAddrFamily returns the appropriate address family to -// the given net, raddr, laddr and mode. At first it figures +// the given net, laddr, raddr and mode. At first it figures // address family out from the net. If mode indicates "listen" // and laddr.(type).IP is nil, it assumes that the user wants to // make a passive connection with wildcard address family, both // INET and INET6, and wildcard address. Otherwise guess: if the // addresses are IPv4 then returns INET, or else returns INET6. -func favoriteAddrFamily(net string, raddr, laddr sockaddr, mode string) int { +func favoriteAddrFamily(net string, laddr, raddr sockaddr, mode string) int { switch net[len(net)-1] { case '4': return syscall.AF_INET @@ -68,17 +68,20 @@ func favoriteAddrFamily(net string, raddr, laddr sockaddr, mode string) int { } if mode == "listen" { + // Note that OpenBSD allows neither "net.inet6.ip6.v6only" + // change nor IPPROTO_IPV6 level IPV6_V6ONLY socket option + // setting. switch a := laddr.(type) { case *TCPAddr: - if a.IP == nil && supportsIPv6 { + if a.IP == nil && supportsIPv6 && supportsIPv4map { return syscall.AF_INET6 } case *UDPAddr: - if a.IP == nil && supportsIPv6 { + if a.IP == nil && supportsIPv6 && supportsIPv4map { return syscall.AF_INET6 } case *IPAddr: - if a.IP == nil && supportsIPv6 { + if a.IP == nil && supportsIPv6 && supportsIPv4map { return syscall.AF_INET6 } } @@ -102,21 +105,20 @@ type sockaddr interface { } func internetSocket(net string, laddr, raddr sockaddr, sotype, proto int, mode string, toAddr func(syscall.Sockaddr) Addr) (fd *netFD, err error) { - var oserr error var la, ra syscall.Sockaddr - family := favoriteAddrFamily(net, raddr, laddr, mode) + family := favoriteAddrFamily(net, laddr, raddr, mode) if laddr != nil { - if la, oserr = laddr.sockaddr(family); oserr != nil { + if la, err = laddr.sockaddr(family); err != nil { goto Error } } if raddr != nil { - if ra, oserr = raddr.sockaddr(family); oserr != nil { + if ra, err = raddr.sockaddr(family); err != nil { goto Error } } - fd, oserr = socket(net, family, sotype, proto, la, ra, toAddr) - if oserr != nil { + fd, err = socket(net, family, sotype, proto, la, ra, toAddr) + if err != nil { goto Error } return fd, nil @@ -126,7 +128,7 @@ Error: if mode == "listen" { addr = laddr } - return nil, &OpError{mode, net, addr, oserr} + return nil, &OpError{mode, net, addr, err} } func ipToSockaddr(family int, ip IP, port int) (syscall.Sockaddr, error) { diff --git a/libgo/go/net/lookup_plan9.go b/libgo/go/net/lookup_plan9.go index c0bb9225a7d..2c698304b21 100644 --- a/libgo/go/net/lookup_plan9.go +++ b/libgo/go/net/lookup_plan9.go @@ -7,6 +7,7 @@ package net import ( "errors" "os" + "syscall" ) func query(filename, query string, bufSize int) (res []string, err error) { @@ -71,11 +72,11 @@ func queryDNS(addr string, typ string) (res []string, err error) { func lookupProtocol(name string) (proto int, err error) { // TODO: Implement this - return 0, os.EPLAN9 + return 0, syscall.EPLAN9 } func lookupHost(host string) (addrs []string, err error) { - // Use /net/cs insead of /net/dns because cs knows about + // Use /net/cs instead of /net/dns because cs knows about // host names in local network (e.g. from /lib/ndb/local) lines, err := queryCS("tcp", host, "1") if err != nil { diff --git a/libgo/go/net/lookup_test.go b/libgo/go/net/lookup_test.go index 9a39ca8a1eb..3a61dfb29c2 100644 --- a/libgo/go/net/lookup_test.go +++ b/libgo/go/net/lookup_test.go @@ -8,14 +8,14 @@ package net import ( - "runtime" + "flag" "testing" ) -var avoidMacFirewall = runtime.GOOS == "darwin" +var testExternal = flag.Bool("external", true, "allow use of external networks during long test") func TestGoogleSRV(t *testing.T) { - if testing.Short() || avoidMacFirewall { + if testing.Short() || !*testExternal { t.Logf("skipping test to avoid external network") return } @@ -38,7 +38,7 @@ func TestGoogleSRV(t *testing.T) { } func TestGmailMX(t *testing.T) { - if testing.Short() || avoidMacFirewall { + if testing.Short() || !*testExternal { t.Logf("skipping test to avoid external network") return } @@ -52,7 +52,7 @@ func TestGmailMX(t *testing.T) { } func TestGmailTXT(t *testing.T) { - if testing.Short() || avoidMacFirewall { + if testing.Short() || !*testExternal { t.Logf("skipping test to avoid external network") return } @@ -66,7 +66,7 @@ func TestGmailTXT(t *testing.T) { } func TestGoogleDNSAddr(t *testing.T) { - if testing.Short() || avoidMacFirewall { + if testing.Short() || !*testExternal { t.Logf("skipping test to avoid external network") return } @@ -78,3 +78,40 @@ func TestGoogleDNSAddr(t *testing.T) { t.Errorf("no results") } } + +var revAddrTests = []struct { + Addr string + Reverse string + ErrPrefix string +}{ + {"1.2.3.4", "4.3.2.1.in-addr.arpa.", ""}, + {"245.110.36.114", "114.36.110.245.in-addr.arpa.", ""}, + {"::ffff:12.34.56.78", "78.56.34.12.in-addr.arpa.", ""}, + {"::1", "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.", ""}, + {"1::", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.ip6.arpa.", ""}, + {"1234:567::89a:bcde", "e.d.c.b.a.9.8.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.7.6.5.0.4.3.2.1.ip6.arpa.", ""}, + {"1234:567:fefe:bcbc:adad:9e4a:89a:bcde", "e.d.c.b.a.9.8.0.a.4.e.9.d.a.d.a.c.b.c.b.e.f.e.f.7.6.5.0.4.3.2.1.ip6.arpa.", ""}, + {"1.2.3", "", "unrecognized address"}, + {"1.2.3.4.5", "", "unrecognized address"}, + {"1234:567:bcbca::89a:bcde", "", "unrecognized address"}, + {"1234:567::bcbc:adad::89a:bcde", "", "unrecognized address"}, +} + +func TestReverseAddress(t *testing.T) { + for i, tt := range revAddrTests { + a, err := reverseaddr(tt.Addr) + if len(tt.ErrPrefix) > 0 && err == nil { + t.Errorf("#%d: expected %q, got <nil> (error)", i, tt.ErrPrefix) + continue + } + if len(tt.ErrPrefix) == 0 && err != nil { + t.Errorf("#%d: expected <nil>, got %q (error)", i, err) + } + if err != nil && err.(*DNSError).Err != tt.ErrPrefix { + t.Errorf("#%d: expected %q, got %q (mismatched error)", i, tt.ErrPrefix, err.(*DNSError).Err) + } + if a != tt.Reverse { + t.Errorf("#%d: expected %q, got %q (reverse address)", i, tt.Reverse, a) + } + } +} diff --git a/libgo/go/net/mac.go b/libgo/go/net/mac.go new file mode 100644 index 00000000000..e0637d00b74 --- /dev/null +++ b/libgo/go/net/mac.go @@ -0,0 +1,84 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// MAC address manipulations + +package net + +import ( + "bytes" + "errors" + "fmt" +) + +// A HardwareAddr represents a physical hardware address. +type HardwareAddr []byte + +func (a HardwareAddr) String() string { + var buf bytes.Buffer + for i, b := range a { + if i > 0 { + buf.WriteByte(':') + } + fmt.Fprintf(&buf, "%02x", b) + } + return buf.String() +} + +// ParseMAC parses s as an IEEE 802 MAC-48, EUI-48, or EUI-64 using one of the +// following formats: +// 01:23:45:67:89:ab +// 01:23:45:67:89:ab:cd:ef +// 01-23-45-67-89-ab +// 01-23-45-67-89-ab-cd-ef +// 0123.4567.89ab +// 0123.4567.89ab.cdef +func ParseMAC(s string) (hw HardwareAddr, err error) { + if len(s) < 14 { + goto error + } + + if s[2] == ':' || s[2] == '-' { + if (len(s)+1)%3 != 0 { + goto error + } + n := (len(s) + 1) / 3 + if n != 6 && n != 8 { + goto error + } + hw = make(HardwareAddr, n) + for x, i := 0, 0; i < n; i++ { + var ok bool + if hw[i], ok = xtoi2(s[x:], s[2]); !ok { + goto error + } + x += 3 + } + } else if s[4] == '.' { + if (len(s)+1)%5 != 0 { + goto error + } + n := 2 * (len(s) + 1) / 5 + if n != 6 && n != 8 { + goto error + } + hw = make(HardwareAddr, n) + for x, i := 0, 0; i < n; i += 2 { + var ok bool + if hw[i], ok = xtoi2(s[x:x+2], 0); !ok { + goto error + } + if hw[i+1], ok = xtoi2(s[x+2:], s[4]); !ok { + goto error + } + x += 5 + } + } else { + goto error + } + return hw, nil + +error: + return nil, errors.New("invalid MAC address: " + s) +} diff --git a/libgo/go/net/mac_test.go b/libgo/go/net/mac_test.go new file mode 100644 index 00000000000..3837e740cf9 --- /dev/null +++ b/libgo/go/net/mac_test.go @@ -0,0 +1,54 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package net + +import ( + "reflect" + "strings" + "testing" +) + +var mactests = []struct { + in string + out HardwareAddr + err string +}{ + {"01:23:45:67:89:AB", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab}, ""}, + {"01-23-45-67-89-AB", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab}, ""}, + {"0123.4567.89AB", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab}, ""}, + {"ab:cd:ef:AB:CD:EF", HardwareAddr{0xab, 0xcd, 0xef, 0xab, 0xcd, 0xef}, ""}, + {"01.02.03.04.05.06", nil, "invalid MAC address"}, + {"01:02:03:04:05:06:", nil, "invalid MAC address"}, + {"x1:02:03:04:05:06", nil, "invalid MAC address"}, + {"01002:03:04:05:06", nil, "invalid MAC address"}, + {"01:02003:04:05:06", nil, "invalid MAC address"}, + {"01:02:03004:05:06", nil, "invalid MAC address"}, + {"01:02:03:04005:06", nil, "invalid MAC address"}, + {"01:02:03:04:05006", nil, "invalid MAC address"}, + {"01-02:03:04:05:06", nil, "invalid MAC address"}, + {"01:02-03-04-05-06", nil, "invalid MAC address"}, + {"0123:4567:89AF", nil, "invalid MAC address"}, + {"0123-4567-89AF", nil, "invalid MAC address"}, + {"01:23:45:67:89:AB:CD:EF", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}, ""}, + {"01-23-45-67-89-AB-CD-EF", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}, ""}, + {"0123.4567.89AB.CDEF", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}, ""}, +} + +func match(err error, s string) bool { + if s == "" { + return err == nil + } + return err != nil && strings.Contains(err.Error(), s) +} + +func TestParseMAC(t *testing.T) { + for _, tt := range mactests { + out, err := ParseMAC(tt.in) + if !reflect.DeepEqual(out, tt.out) || !match(err, tt.err) { + t.Errorf("ParseMAC(%q) = %v, %v, want %v, %v", tt.in, out, err, tt.out, + tt.err) + } + } +} diff --git a/libgo/go/net/multicast_test.go b/libgo/go/net/multicast_test.go index f62580de66e..1d760c21051 100644 --- a/libgo/go/net/multicast_test.go +++ b/libgo/go/net/multicast_test.go @@ -5,30 +5,46 @@ package net import ( + "errors" "os" "runtime" + "syscall" "testing" ) -var listenMulticastUDPTests = []struct { +var multicastListenerTests = []struct { net string gaddr *UDPAddr flags Flags - ipv6 bool + ipv6 bool // test with underlying AF_INET6 socket }{ // cf. RFC 4727: Experimental Values in IPv4, IPv6, ICMPv4, ICMPv6, UDP, and TCP Headers + {"udp", &UDPAddr{IPv4(224, 0, 0, 254), 12345}, FlagUp | FlagLoopback, false}, - {"udp4", &UDPAddr{IPv4(224, 0, 0, 254), 12345}, FlagUp | FlagLoopback, false}, + {"udp", &UDPAddr{IPv4(224, 0, 0, 254), 12345}, 0, false}, {"udp", &UDPAddr{ParseIP("ff0e::114"), 12345}, FlagUp | FlagLoopback, true}, + {"udp", &UDPAddr{ParseIP("ff0e::114"), 12345}, 0, true}, + + {"udp4", &UDPAddr{IPv4(224, 0, 0, 254), 12345}, FlagUp | FlagLoopback, false}, + {"udp4", &UDPAddr{IPv4(224, 0, 0, 254), 12345}, 0, false}, + {"udp6", &UDPAddr{ParseIP("ff01::114"), 12345}, FlagUp | FlagLoopback, true}, + {"udp6", &UDPAddr{ParseIP("ff01::114"), 12345}, 0, true}, {"udp6", &UDPAddr{ParseIP("ff02::114"), 12345}, FlagUp | FlagLoopback, true}, + {"udp6", &UDPAddr{ParseIP("ff02::114"), 12345}, 0, true}, {"udp6", &UDPAddr{ParseIP("ff04::114"), 12345}, FlagUp | FlagLoopback, true}, + {"udp6", &UDPAddr{ParseIP("ff04::114"), 12345}, 0, true}, {"udp6", &UDPAddr{ParseIP("ff05::114"), 12345}, FlagUp | FlagLoopback, true}, + {"udp6", &UDPAddr{ParseIP("ff05::114"), 12345}, 0, true}, {"udp6", &UDPAddr{ParseIP("ff08::114"), 12345}, FlagUp | FlagLoopback, true}, + {"udp6", &UDPAddr{ParseIP("ff08::114"), 12345}, 0, true}, {"udp6", &UDPAddr{ParseIP("ff0e::114"), 12345}, FlagUp | FlagLoopback, true}, + {"udp6", &UDPAddr{ParseIP("ff0e::114"), 12345}, 0, true}, } -func TestListenMulticastUDP(t *testing.T) { +// TestMulticastListener tests both single and double listen to a test +// listener with same address family, same group address and same port. +func TestMulticastListener(t *testing.T) { switch runtime.GOOS { case "netbsd", "openbsd", "plan9", "windows": return @@ -38,112 +54,142 @@ func TestListenMulticastUDP(t *testing.T) { } } - for _, tt := range listenMulticastUDPTests { + for _, tt := range multicastListenerTests { if tt.ipv6 && (!supportsIPv6 || os.Getuid() != 0) { continue } - ift, err := Interfaces() + ifi, err := availMulticastInterface(t, tt.flags) if err != nil { - t.Fatalf("Interfaces failed: %v", err) - } - var ifi *Interface - for _, x := range ift { - if x.Flags&tt.flags == tt.flags { - ifi = &x - break - } - } - if ifi == nil { - t.Logf("an appropriate multicast interface not found") - return + continue } - c, err := ListenMulticastUDP(tt.net, ifi, tt.gaddr) + c1, err := ListenMulticastUDP(tt.net, ifi, tt.gaddr) if err != nil { - t.Fatalf("ListenMulticastUDP failed: %v", err) + t.Fatalf("First ListenMulticastUDP failed: %v", err) } - defer c.Close() // test to listen concurrently across multiple listeners - if !tt.ipv6 { - testIPv4MulticastSocketOptions(t, c.fd, ifi) - } else { - testIPv6MulticastSocketOptions(t, c.fd, ifi) - } - ifmat, err := ifi.MulticastAddrs() + checkMulticastListener(t, err, c1, tt.gaddr) + c2, err := ListenMulticastUDP(tt.net, ifi, tt.gaddr) if err != nil { - t.Fatalf("MulticastAddrs failed: %v", err) - } - var found bool - for _, ifma := range ifmat { - if ifma.(*IPAddr).IP.Equal(tt.gaddr.IP) { - found = true - break - } + t.Fatalf("Second ListenMulticastUDP failed: %v", err) } - if !found { - t.Fatalf("%q not found in RIB", tt.gaddr.String()) + checkMulticastListener(t, err, c2, tt.gaddr) + c2.Close() + switch c1.fd.family { + case syscall.AF_INET: + testIPv4MulticastSocketOptions(t, c1.fd, ifi) + case syscall.AF_INET6: + testIPv6MulticastSocketOptions(t, c1.fd, ifi) } + c1.Close() } } -func TestSimpleListenMulticastUDP(t *testing.T) { +func TestSimpleMulticastListener(t *testing.T) { switch runtime.GOOS { case "plan9": return } - for _, tt := range listenMulticastUDPTests { + for _, tt := range multicastListenerTests { if tt.ipv6 { continue } - tt.flags = FlagUp | FlagMulticast + tt.flags = FlagUp | FlagMulticast // for windows testing + ifi, err := availMulticastInterface(t, tt.flags) + if err != nil { + continue + } + c1, err := ListenMulticastUDP(tt.net, ifi, tt.gaddr) + if err != nil { + t.Fatalf("First ListenMulticastUDP failed: %v", err) + } + checkSimpleMulticastListener(t, err, c1, tt.gaddr) + c2, err := ListenMulticastUDP(tt.net, ifi, tt.gaddr) + if err != nil { + t.Fatalf("Second ListenMulticastUDP failed: %v", err) + } + checkSimpleMulticastListener(t, err, c2, tt.gaddr) + c2.Close() + c1.Close() + } +} + +func checkMulticastListener(t *testing.T, err error, c *UDPConn, gaddr *UDPAddr) { + if !multicastRIBContains(t, gaddr.IP) { + t.Fatalf("%q not found in RIB", gaddr.String()) + } + if c.LocalAddr().String() != gaddr.String() { + t.Fatalf("LocalAddr returns %q, expected %q", c.LocalAddr().String(), gaddr.String()) + } +} + +func checkSimpleMulticastListener(t *testing.T, err error, c *UDPConn, gaddr *UDPAddr) { + if c.LocalAddr().String() != gaddr.String() { + t.Fatalf("LocalAddr returns %q, expected %q", c.LocalAddr().String(), gaddr.String()) + } +} + +func availMulticastInterface(t *testing.T, flags Flags) (*Interface, error) { + var ifi *Interface + if flags != Flags(0) { ift, err := Interfaces() if err != nil { t.Fatalf("Interfaces failed: %v", err) } - var ifi *Interface for _, x := range ift { - if x.Flags&tt.flags == tt.flags { + if x.Flags&flags == flags { ifi = &x break } } if ifi == nil { - t.Logf("an appropriate multicast interface not found") - return + return nil, errors.New("an appropriate multicast interface not found") } - c, err := ListenMulticastUDP(tt.net, ifi, tt.gaddr) + } + return ifi, nil +} + +func multicastRIBContains(t *testing.T, ip IP) bool { + ift, err := Interfaces() + if err != nil { + t.Fatalf("Interfaces failed: %v", err) + } + for _, ifi := range ift { + ifmat, err := ifi.MulticastAddrs() if err != nil { - t.Fatalf("ListenMulticastUDP failed: %v", err) + t.Fatalf("MulticastAddrs failed: %v", err) + } + for _, ifma := range ifmat { + if ifma.(*IPAddr).IP.Equal(ip) { + return true + } } - c.Close() } + return false } func testIPv4MulticastSocketOptions(t *testing.T, fd *netFD, ifi *Interface) { - ifmc, err := ipv4MulticastInterface(fd) + _, err := ipv4MulticastInterface(fd) if err != nil { t.Fatalf("ipv4MulticastInterface failed: %v", err) } - t.Logf("IPv4 multicast interface: %v", ifmc) - err = setIPv4MulticastInterface(fd, ifi) - if err != nil { - t.Fatalf("setIPv4MulticastInterface failed: %v", err) + if ifi != nil { + err = setIPv4MulticastInterface(fd, ifi) + if err != nil { + t.Fatalf("setIPv4MulticastInterface failed: %v", err) + } } - - ttl, err := ipv4MulticastTTL(fd) + _, err = ipv4MulticastTTL(fd) if err != nil { t.Fatalf("ipv4MulticastTTL failed: %v", err) } - t.Logf("IPv4 multicast TTL: %v", ttl) err = setIPv4MulticastTTL(fd, 1) if err != nil { t.Fatalf("setIPv4MulticastTTL failed: %v", err) } - - loop, err := ipv4MulticastLoopback(fd) + _, err = ipv4MulticastLoopback(fd) if err != nil { t.Fatalf("ipv4MulticastLoopback failed: %v", err) } - t.Logf("IPv4 multicast loopback: %v", loop) err = setIPv4MulticastLoopback(fd, false) if err != nil { t.Fatalf("setIPv4MulticastLoopback failed: %v", err) @@ -151,31 +197,28 @@ func testIPv4MulticastSocketOptions(t *testing.T, fd *netFD, ifi *Interface) { } func testIPv6MulticastSocketOptions(t *testing.T, fd *netFD, ifi *Interface) { - ifmc, err := ipv6MulticastInterface(fd) + _, err := ipv6MulticastInterface(fd) if err != nil { t.Fatalf("ipv6MulticastInterface failed: %v", err) } - t.Logf("IPv6 multicast interface: %v", ifmc) - err = setIPv6MulticastInterface(fd, ifi) - if err != nil { - t.Fatalf("setIPv6MulticastInterface failed: %v", err) + if ifi != nil { + err = setIPv6MulticastInterface(fd, ifi) + if err != nil { + t.Fatalf("setIPv6MulticastInterface failed: %v", err) + } } - - hoplim, err := ipv6MulticastHopLimit(fd) + _, err = ipv6MulticastHopLimit(fd) if err != nil { t.Fatalf("ipv6MulticastHopLimit failed: %v", err) } - t.Logf("IPv6 multicast hop limit: %v", hoplim) err = setIPv6MulticastHopLimit(fd, 1) if err != nil { t.Fatalf("setIPv6MulticastHopLimit failed: %v", err) } - - loop, err := ipv6MulticastLoopback(fd) + _, err = ipv6MulticastLoopback(fd) if err != nil { t.Fatalf("ipv6MulticastLoopback failed: %v", err) } - t.Logf("IPv6 multicast loopback: %v", loop) err = setIPv6MulticastLoopback(fd, false) if err != nil { t.Fatalf("setIPv6MulticastLoopback failed: %v", err) diff --git a/libgo/go/net/net.go b/libgo/go/net/net.go index 79d36a2a813..bf242ff8dd6 100644 --- a/libgo/go/net/net.go +++ b/libgo/go/net/net.go @@ -2,8 +2,41 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package net provides a portable interface to Unix networks sockets, -// including TCP/IP, UDP, domain name resolution, and Unix domain sockets. +/* +Package net provides a portable interface for network I/O, including +TCP/IP, UDP, domain name resolution, and Unix domain sockets. + +Although the package provides access to low-level networking +primitives, most clients will need only the basic interface provided +by the Dial, Listen, and Accept functions and the associated +Conn and Listener interfaces. The crypto/tls package uses +the same interfaces and similar Dial and Listen functions. + +The Dial function connects to a server: + + conn, err := net.Dial("tcp", "google.com:80") + if err != nil { + // handle error + } + fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n") + status, err := bufio.NewReader(conn).ReadString('\n') + // ... + +The Listen function creates servers: + + ln, err := net.Listen("tcp", ":8080") + if err != nil { + // handle error + } + for { + conn, err := ln.Accept() + if err != nil { + // handle error + continue + } + go handleConnection(conn) + } +*/ package net // TODO(rsc): @@ -42,21 +75,28 @@ type Conn interface { RemoteAddr() Addr // SetDeadline sets the read and write deadlines associated - // with the connection. + // with the connection. It is equivalent to calling both + // SetReadDeadline and SetWriteDeadline. + // + // A deadline is an absolute time after which I/O operations + // fail with a timeout (see type Error) instead of + // blocking. The deadline applies to all future I/O, not just + // the immediately following call to Read or Write. + // + // An idle timeout can be implemented by repeatedly extending + // the deadline after successful Read or Write calls. + // + // A zero value for t means I/O operations will not time out. SetDeadline(t time.Time) error - // SetReadDeadline sets the deadline for all Read calls to return. - // If the deadline is reached, Read will fail with a timeout - // (see type Error) instead of blocking. + // SetReadDeadline sets the deadline for Read calls. // A zero value for t means Read will not time out. SetReadDeadline(t time.Time) error - // SetWriteDeadline sets the deadline for all Write calls to return. - // If the deadline is reached, Write will fail with a timeout - // (see type Error) instead of blocking. - // A zero value for t means Write will not time out. + // SetWriteDeadline sets the deadline for Write calls. // Even if write times out, it may return n > 0, indicating that // some of the data was successfully written. + // A zero value for t means Write will not time out. SetWriteDeadline(t time.Time) error } diff --git a/libgo/go/net/net_test.go b/libgo/go/net/net_test.go index 1bc997754bb..c1a90de0131 100644 --- a/libgo/go/net/net_test.go +++ b/libgo/go/net/net_test.go @@ -5,129 +5,12 @@ package net import ( - "flag" "io" - "regexp" "runtime" "testing" + "time" ) -var runErrorTest = flag.Bool("run_error_test", false, "let TestDialError check for dns errors") - -type DialErrorTest struct { - Net string - Raddr string - Pattern string -} - -var dialErrorTests = []DialErrorTest{ - { - "datakit", "mh/astro/r70", - "dial datakit mh/astro/r70: unknown network datakit", - }, - { - "tcp", "127.0.0.1:☺", - "dial tcp 127.0.0.1:☺: unknown port tcp/☺", - }, - { - "tcp", "no-such-name.google.com.:80", - "dial tcp no-such-name.google.com.:80: lookup no-such-name.google.com.( on .*)?: no (.*)", - }, - { - "tcp", "no-such-name.no-such-top-level-domain.:80", - "dial tcp no-such-name.no-such-top-level-domain.:80: lookup no-such-name.no-such-top-level-domain.( on .*)?: no (.*)", - }, - { - "tcp", "no-such-name:80", - `dial tcp no-such-name:80: lookup no-such-name\.(.*\.)?( on .*)?: no (.*)`, - }, - { - "tcp", "mh/astro/r70:http", - "dial tcp mh/astro/r70:http: lookup mh/astro/r70: invalid domain name", - }, - { - "unix", "/etc/file-not-found", - "dial unix /etc/file-not-found: [nN]o such file or directory", - }, - { - "unix", "/etc/", - "dial unix /etc/: ([pP]ermission denied|socket operation on non-socket|connection refused)", - }, - { - "unixpacket", "/etc/file-not-found", - "dial unixpacket /etc/file-not-found: no such file or directory", - }, - { - "unixpacket", "/etc/", - "dial unixpacket /etc/: (permission denied|socket operation on non-socket|connection refused)", - }, -} - -var duplicateErrorPattern = `dial (.*) dial (.*)` - -func TestDialError(t *testing.T) { - if !*runErrorTest { - t.Logf("test disabled; use --run_error_test to enable") - return - } - for i, tt := range dialErrorTests { - c, err := Dial(tt.Net, tt.Raddr) - if c != nil { - c.Close() - } - if err == nil { - t.Errorf("#%d: nil error, want match for %#q", i, tt.Pattern) - continue - } - s := err.Error() - match, _ := regexp.MatchString(tt.Pattern, s) - if !match { - t.Errorf("#%d: %q, want match for %#q", i, s, tt.Pattern) - } - match, _ = regexp.MatchString(duplicateErrorPattern, s) - if match { - t.Errorf("#%d: %q, duplicate error return from Dial", i, s) - } - } -} - -var revAddrTests = []struct { - Addr string - Reverse string - ErrPrefix string -}{ - {"1.2.3.4", "4.3.2.1.in-addr.arpa.", ""}, - {"245.110.36.114", "114.36.110.245.in-addr.arpa.", ""}, - {"::ffff:12.34.56.78", "78.56.34.12.in-addr.arpa.", ""}, - {"::1", "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.", ""}, - {"1::", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.ip6.arpa.", ""}, - {"1234:567::89a:bcde", "e.d.c.b.a.9.8.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.7.6.5.0.4.3.2.1.ip6.arpa.", ""}, - {"1234:567:fefe:bcbc:adad:9e4a:89a:bcde", "e.d.c.b.a.9.8.0.a.4.e.9.d.a.d.a.c.b.c.b.e.f.e.f.7.6.5.0.4.3.2.1.ip6.arpa.", ""}, - {"1.2.3", "", "unrecognized address"}, - {"1.2.3.4.5", "", "unrecognized address"}, - {"1234:567:bcbca::89a:bcde", "", "unrecognized address"}, - {"1234:567::bcbc:adad::89a:bcde", "", "unrecognized address"}, -} - -func TestReverseAddress(t *testing.T) { - for i, tt := range revAddrTests { - a, err := reverseaddr(tt.Addr) - if len(tt.ErrPrefix) > 0 && err == nil { - t.Errorf("#%d: expected %q, got <nil> (error)", i, tt.ErrPrefix) - continue - } - if len(tt.ErrPrefix) == 0 && err != nil { - t.Errorf("#%d: expected <nil>, got %q (error)", i, err) - } - if err != nil && err.(*DNSError).Err != tt.ErrPrefix { - t.Errorf("#%d: expected %q, got %q (mismatched error)", i, tt.ErrPrefix, err.(*DNSError).Err) - } - if a != tt.Reverse { - t.Errorf("#%d: expected %q, got %q (reverse address)", i, tt.Reverse, a) - } - } -} - func TestShutdown(t *testing.T) { if runtime.GOOS == "plan9" { return @@ -173,3 +56,58 @@ func TestShutdown(t *testing.T) { t.Errorf("read = %q, want \"response\"", got) } } + +func TestTCPListenClose(t *testing.T) { + l, err := Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatalf("Listen failed: %v", err) + } + + done := make(chan bool, 1) + go func() { + time.Sleep(100 * time.Millisecond) + l.Close() + }() + go func() { + _, err = l.Accept() + if err == nil { + t.Error("Accept succeeded") + } else { + t.Logf("Accept timeout error: %s (any error is fine)", err) + } + done <- true + }() + select { + case <-done: + case <-time.After(2 * time.Second): + t.Fatal("timeout waiting for TCP close") + } +} + +func TestUDPListenClose(t *testing.T) { + l, err := ListenPacket("udp", "127.0.0.1:0") + if err != nil { + t.Fatalf("Listen failed: %v", err) + } + + buf := make([]byte, 1000) + done := make(chan bool, 1) + go func() { + time.Sleep(100 * time.Millisecond) + l.Close() + }() + go func() { + _, _, err = l.ReadFrom(buf) + if err == nil { + t.Error("ReadFrom succeeded") + } else { + t.Logf("ReadFrom timeout error: %s (any error is fine)", err) + } + done <- true + }() + select { + case <-done: + case <-time.After(2 * time.Second): + t.Fatal("timeout waiting for UDP close") + } +} diff --git a/libgo/go/net/newpollserver.go b/libgo/go/net/newpollserver.go index 06bc24cd8a2..d34bb511f7f 100644 --- a/libgo/go/net/newpollserver.go +++ b/libgo/go/net/newpollserver.go @@ -18,16 +18,16 @@ func newPollServer() (s *pollServer, err error) { if s.pr, s.pw, err = os.Pipe(); err != nil { return nil, err } - if err = syscall.SetNonblock(s.pr.Fd(), true); err != nil { + if err = syscall.SetNonblock(int(s.pr.Fd()), true); err != nil { goto Errno } - if err = syscall.SetNonblock(s.pw.Fd(), true); err != nil { + if err = syscall.SetNonblock(int(s.pw.Fd()), true); err != nil { goto Errno } if s.poll, err = newpollster(); err != nil { goto Error } - if _, err = s.poll.AddFD(s.pr.Fd(), 'r', true); err != nil { + if _, err = s.poll.AddFD(int(s.pr.Fd()), 'r', true); err != nil { s.poll.Close() goto Error } diff --git a/libgo/go/net/parse.go b/libgo/go/net/parse.go index 4c4200a49b7..7c87b42f6d9 100644 --- a/libgo/go/net/parse.go +++ b/libgo/go/net/parse.go @@ -67,7 +67,7 @@ func open(name string) (*file, error) { if err != nil { return nil, err } - return &file{fd, make([]byte, 1024)[0:0], false}, nil + return &file{fd, make([]byte, os.Getpagesize())[0:0], false}, nil } func byteIndex(s string, c byte) int { diff --git a/libgo/go/net/rpc/client.go b/libgo/go/net/rpc/client.go index 34f9ae317e2..f7abf21f157 100644 --- a/libgo/go/net/rpc/client.go +++ b/libgo/go/net/rpc/client.go @@ -140,7 +140,7 @@ func (client *Client) input() { } client.mutex.Unlock() client.sending.Unlock() - if err != io.EOF || !closing { + if err != io.EOF && !closing { log.Println("rpc: client protocol error:", err) } } diff --git a/libgo/go/net/rpc/server.go b/libgo/go/net/rpc/server.go index 920ae9137a6..1680e2f0d70 100644 --- a/libgo/go/net/rpc/server.go +++ b/libgo/go/net/rpc/server.go @@ -13,13 +13,19 @@ Only methods that satisfy these criteria will be made available for remote access; other methods will be ignored: - - the method name is exported, that is, begins with an upper case letter. - - the method receiver is exported or local (defined in the package - registering the service). - - the method has two arguments, both exported or local types. + - the method is exported. + - the method has two arguments, both exported (or builtin) types. - the method's second argument is a pointer. - the method has return type error. + In effect, the method must look schematically like + + func (t *T) MethodName(argType T1, replyType *T2) error + + where T, T1 and T2 can be marshaled by encoding/gob. + These requirements apply even if a different codec is used. + (In future, these requirements may soften for custom codecs.) + The method's first argument represents the arguments provided by the caller; the second argument represents the result parameters to be returned to the caller. The method's return value, if non-nil, is passed back as a string that the client @@ -36,10 +42,12 @@ call, a pointer containing the arguments, and a pointer to receive the result parameters. - Call waits for the remote call to complete; Go launches the call asynchronously - and returns a channel that will signal completion. + The Call method waits for the remote call to complete while the Go method + launches the call asynchronously and signals completion using the Call + structure's Done channel. - Package "gob" is used to transport the data. + Unless an explicit codec is set up, package encoding/gob is used to + transport the data. Here is a simple example. A server wishes to export an object of type Arith: @@ -256,6 +264,7 @@ func (server *Server) register(rcvr interface{}, name string, useName bool) erro method := s.typ.Method(m) mtype := method.Type mname := method.Name + // Method must be exported. if method.PkgPath != "" { continue } @@ -267,7 +276,7 @@ func (server *Server) register(rcvr interface{}, name string, useName bool) erro // First arg need not be a pointer. argType := mtype.In(1) if !isExportedOrBuiltinType(argType) { - log.Println(mname, "argument type not exported or local:", argType) + log.Println(mname, "argument type not exported:", argType) continue } // Second arg must be a pointer. @@ -276,15 +285,17 @@ func (server *Server) register(rcvr interface{}, name string, useName bool) erro log.Println("method", mname, "reply type not a pointer:", replyType) continue } + // Reply type must be exported. if !isExportedOrBuiltinType(replyType) { - log.Println("method", mname, "reply type not exported or local:", replyType) + log.Println("method", mname, "reply type not exported:", replyType) continue } - // Method needs one out: error. + // Method needs one out. if mtype.NumOut() != 1 { log.Println("method", mname, "has wrong number of outs:", mtype.NumOut()) continue } + // The return type of the method must be error. if returnType := mtype.Out(0); returnType != typeOfError { log.Println("method", mname, "returns", returnType.String(), "not error") continue @@ -301,10 +312,10 @@ func (server *Server) register(rcvr interface{}, name string, useName bool) erro return nil } -// A value sent as a placeholder for the response when the server receives an invalid request. -type InvalidRequest struct{} - -var invalidRequest = InvalidRequest{} +// A value sent as a placeholder for the server's response value when the server +// receives an invalid request. It is never decoded by the client since the Response +// contains an error when it is used. +var invalidRequest = struct{}{} func (server *Server) sendResponse(sending *sync.Mutex, req *Request, reply interface{}, codec ServerCodec, errmsg string) { resp := server.getResponse() diff --git a/libgo/go/net/rpc/server_test.go b/libgo/go/net/rpc/server_test.go index 8cfa033ccc3..62c7b1e6004 100644 --- a/libgo/go/net/rpc/server_test.go +++ b/libgo/go/net/rpc/server_test.go @@ -387,12 +387,12 @@ func (WriteFailCodec) WriteRequest(*Request, interface{}) error { } func (WriteFailCodec) ReadResponseHeader(*Response) error { - time.Sleep(120 * time.Second) + select {} panic("unreachable") } func (WriteFailCodec) ReadResponseBody(interface{}) error { - time.Sleep(120 * time.Second) + select {} panic("unreachable") } diff --git a/libgo/go/net/sendfile_linux.go b/libgo/go/net/sendfile_linux.go index 7f51519b2ed..a0d53036263 100644 --- a/libgo/go/net/sendfile_linux.go +++ b/libgo/go/net/sendfile_linux.go @@ -38,11 +38,13 @@ func sendFile(c *netFD, r io.Reader) (written int64, err error, handled bool) { c.wio.Lock() defer c.wio.Unlock() - c.incref() + if err := c.incref(false); err != nil { + return 0, err, true + } defer c.decref() dst := c.sysfd - src := f.Fd() + src := int(f.Fd()) for remain > 0 { n := maxSendfileSize if int64(n) > remain { @@ -57,8 +59,9 @@ func sendFile(c *netFD, r io.Reader) (written int64, err error, handled bool) { break } if err1 == syscall.EAGAIN && c.wdeadline >= 0 { - pollserver.WaitWrite(c) - continue + if err1 = pollserver.WaitWrite(c); err1 == nil { + continue + } } if err1 != nil { // This includes syscall.ENOSYS (no kernel diff --git a/libgo/go/net/sendfile_windows.go b/libgo/go/net/sendfile_windows.go index ee7ff8b98c2..f5a6d8804da 100644 --- a/libgo/go/net/sendfile_windows.go +++ b/libgo/go/net/sendfile_windows.go @@ -50,13 +50,15 @@ func sendFile(c *netFD, r io.Reader) (written int64, err error, handled bool) { c.wio.Lock() defer c.wio.Unlock() - c.incref() + if err := c.incref(false); err != nil { + return 0, err, true + } defer c.decref() var o sendfileOp o.Init(c, 'w') o.n = uint32(n) - o.src = f.Fd() + o.src = syscall.Handle(f.Fd()) done, err := iosrv.ExecIO(&o, 0) if err != nil { return 0, err, false diff --git a/libgo/go/net/server_test.go b/libgo/go/net/server_test.go index b0b546be32b..b9862168153 100644 --- a/libgo/go/net/server_test.go +++ b/libgo/go/net/server_test.go @@ -83,7 +83,7 @@ func connect(t *testing.T, network, addr string, isEmpty bool) { } // Send explicit ending for unixpacket. - // Older Linux kernels do stop reads on close. + // Older Linux kernels do not stop reads on close. if network == "unixpacket" { fd.Write([]byte("END")) } @@ -95,7 +95,7 @@ func doTest(t *testing.T, network, listenaddr, dialaddr string) { t.Logf("Test %q %q %q", network, listenaddr, dialaddr) switch listenaddr { case "", "0.0.0.0", "[::]", "[::ffff:0.0.0.0]": - if testing.Short() || avoidMacFirewall { + if testing.Short() || !*testExternal { t.Logf("skip wildcard listen during short test") return } @@ -115,16 +115,13 @@ func doTest(t *testing.T, network, listenaddr, dialaddr string) { } func TestTCPServer(t *testing.T) { - if runtime.GOOS != "openbsd" { - doTest(t, "tcp", "", "127.0.0.1") - } + doTest(t, "tcp", "", "127.0.0.1") doTest(t, "tcp", "0.0.0.0", "127.0.0.1") doTest(t, "tcp", "127.0.0.1", "127.0.0.1") doTest(t, "tcp4", "", "127.0.0.1") doTest(t, "tcp4", "0.0.0.0", "127.0.0.1") doTest(t, "tcp4", "127.0.0.1", "127.0.0.1") if supportsIPv6 { - doTest(t, "tcp", "", "[::1]") doTest(t, "tcp", "[::]", "[::1]") doTest(t, "tcp", "[::1]", "[::1]") doTest(t, "tcp6", "", "[::1]") diff --git a/libgo/go/net/smtp/smtp.go b/libgo/go/net/smtp/smtp.go index f600cc86482..59f6449f0ab 100644 --- a/libgo/go/net/smtp/smtp.go +++ b/libgo/go/net/smtp/smtp.go @@ -50,15 +50,14 @@ func Dial(addr string) (*Client, error) { // server name to be used when authenticating. func NewClient(conn net.Conn, host string) (*Client, error) { text := textproto.NewConn(conn) - _, msg, err := text.ReadResponse(220) + _, _, err := text.ReadResponse(220) if err != nil { text.Close() return nil, err } c := &Client{Text: text, conn: conn, serverName: host} - if strings.Contains(msg, "ESMTP") { - err = c.ehlo() - } else { + err = c.ehlo() + if err != nil { err = c.helo() } return c, err diff --git a/libgo/go/net/smtp/smtp_test.go b/libgo/go/net/smtp/smtp_test.go index ce887820531..c315d185c9d 100644 --- a/libgo/go/net/smtp/smtp_test.go +++ b/libgo/go/net/smtp/smtp_test.go @@ -8,9 +8,11 @@ import ( "bufio" "bytes" "io" + "net" "net/textproto" "strings" "testing" + "time" ) type authTest struct { @@ -59,9 +61,12 @@ type faker struct { io.ReadWriter } -func (f faker) Close() error { - return nil -} +func (f faker) Close() error { return nil } +func (f faker) LocalAddr() net.Addr { return nil } +func (f faker) RemoteAddr() net.Addr { return nil } +func (f faker) SetDeadline(time.Time) error { return nil } +func (f faker) SetReadDeadline(time.Time) error { return nil } +func (f faker) SetWriteDeadline(time.Time) error { return nil } func TestBasic(t *testing.T) { basicServer = strings.Join(strings.Split(basicServer, "\n"), "\r\n") @@ -180,3 +185,87 @@ Goodbye. . QUIT ` + +func TestNewClient(t *testing.T) { + newClientServer = strings.Join(strings.Split(newClientServer, "\n"), "\r\n") + newClientClient = strings.Join(strings.Split(newClientClient, "\n"), "\r\n") + + var cmdbuf bytes.Buffer + bcmdbuf := bufio.NewWriter(&cmdbuf) + out := func() string { + bcmdbuf.Flush() + return cmdbuf.String() + } + var fake faker + fake.ReadWriter = bufio.NewReadWriter(bufio.NewReader(strings.NewReader(newClientServer)), bcmdbuf) + c, err := NewClient(fake, "fake.host") + if err != nil { + t.Fatalf("NewClient: %v\n(after %v)", err, out()) + } + if ok, args := c.Extension("aUtH"); !ok || args != "LOGIN PLAIN" { + t.Fatalf("Expected AUTH supported") + } + if ok, _ := c.Extension("DSN"); ok { + t.Fatalf("Shouldn't support DSN") + } + if err := c.Quit(); err != nil { + t.Fatalf("QUIT failed: %s", err) + } + + actualcmds := out() + if newClientClient != actualcmds { + t.Fatalf("Got:\n%s\nExpected:\n%s", actualcmds, newClientClient) + } +} + +var newClientServer = `220 hello world +250-mx.google.com at your service +250-SIZE 35651584 +250-AUTH LOGIN PLAIN +250 8BITMIME +221 OK +` + +var newClientClient = `EHLO localhost +QUIT +` + +func TestNewClient2(t *testing.T) { + newClient2Server = strings.Join(strings.Split(newClient2Server, "\n"), "\r\n") + newClient2Client = strings.Join(strings.Split(newClient2Client, "\n"), "\r\n") + + var cmdbuf bytes.Buffer + bcmdbuf := bufio.NewWriter(&cmdbuf) + var fake faker + fake.ReadWriter = bufio.NewReadWriter(bufio.NewReader(strings.NewReader(newClient2Server)), bcmdbuf) + c, err := NewClient(fake, "fake.host") + if err != nil { + t.Fatalf("NewClient: %v", err) + } + if ok, _ := c.Extension("DSN"); ok { + t.Fatalf("Shouldn't support DSN") + } + if err := c.Quit(); err != nil { + t.Fatalf("QUIT failed: %s", err) + } + + bcmdbuf.Flush() + actualcmds := cmdbuf.String() + if newClient2Client != actualcmds { + t.Fatalf("Got:\n%s\nExpected:\n%s", actualcmds, newClient2Client) + } +} + +var newClient2Server = `220 hello world +502 EH? +250-mx.google.com at your service +250-SIZE 35651584 +250-AUTH LOGIN PLAIN +250 8BITMIME +221 OK +` + +var newClient2Client = `EHLO localhost +HELO localhost +QUIT +` diff --git a/libgo/go/net/sock.go b/libgo/go/net/sock.go index 70064c307ef..dc139f04a25 100644 --- a/libgo/go/net/sock.go +++ b/libgo/go/net/sock.go @@ -33,13 +33,14 @@ func socket(net string, f, t, p int, la, ra syscall.Sockaddr, toAddr func(syscal return nil, err } + var bla syscall.Sockaddr if la != nil { - la, err = listenerSockaddr(s, f, la, toAddr) + bla, err = listenerSockaddr(s, f, la, toAddr) if err != nil { closesocket(s) return nil, err } - err = syscall.Bind(s, la) + err = syscall.Bind(s, bla) if err != nil { closesocket(s) return nil, err @@ -61,7 +62,12 @@ func socket(net string, f, t, p int, la, ra syscall.Sockaddr, toAddr func(syscal } sa, _ := syscall.Getsockname(s) - laddr := toAddr(sa) + var laddr Addr + if la != nil && bla != la { + laddr = toAddr(la) + } else { + laddr = toAddr(sa) + } sa, _ = syscall.Getpeername(s) raddr := toAddr(sa) diff --git a/libgo/go/net/sock_bsd.go b/libgo/go/net/sock_bsd.go index 7c693a271f7..2607b04c7bc 100644 --- a/libgo/go/net/sock_bsd.go +++ b/libgo/go/net/sock_bsd.go @@ -38,6 +38,11 @@ func listenerSockaddr(s, f int, la syscall.Sockaddr, toAddr func(syscall.Sockadd return la, nil } switch v := a.(type) { + case *TCPAddr, *UnixAddr: + err := setDefaultListenerSockopts(s) + if err != nil { + return nil, err + } case *UDPAddr: if v.IP.IsMulticast() { err := setDefaultMulticastSockopts(s) diff --git a/libgo/go/net/sock_linux.go b/libgo/go/net/sock_linux.go index 0743843bf28..e509d93978b 100644 --- a/libgo/go/net/sock_linux.go +++ b/libgo/go/net/sock_linux.go @@ -32,6 +32,11 @@ func listenerSockaddr(s, f int, la syscall.Sockaddr, toAddr func(syscall.Sockadd return la, nil } switch v := a.(type) { + case *TCPAddr, *UnixAddr: + err := setDefaultListenerSockopts(s) + if err != nil { + return nil, err + } case *UDPAddr: if v.IP.IsMulticast() { err := setDefaultMulticastSockopts(s) diff --git a/libgo/go/net/sock_windows.go b/libgo/go/net/sock_windows.go index 434122c9e46..cce6181c9e5 100644 --- a/libgo/go/net/sock_windows.go +++ b/libgo/go/net/sock_windows.go @@ -19,6 +19,11 @@ func listenerSockaddr(s syscall.Handle, f int, la syscall.Sockaddr, toAddr func( return la, nil } switch v := a.(type) { + case *TCPAddr, *UnixAddr: + err := setDefaultListenerSockopts(s) + if err != nil { + return nil, err + } case *UDPAddr: if v.IP.IsMulticast() { err := setDefaultMulticastSockopts(s) diff --git a/libgo/go/net/sockopt.go b/libgo/go/net/sockopt.go index b5b75a2745a..0a051d7ae3c 100644 --- a/libgo/go/net/sockopt.go +++ b/libgo/go/net/sockopt.go @@ -105,13 +105,17 @@ done: } func setReadBuffer(fd *netFD, bytes int) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd.sysfd, syscall.SOL_SOCKET, syscall.SO_RCVBUF, bytes)) } func setWriteBuffer(fd *netFD, bytes int) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd.sysfd, syscall.SOL_SOCKET, syscall.SO_SNDBUF, bytes)) } @@ -142,25 +146,33 @@ func setDeadline(fd *netFD, t time.Time) error { } func setReuseAddr(fd *netFD, reuse bool) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd.sysfd, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, boolint(reuse))) } func setDontRoute(fd *netFD, dontroute bool) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd.sysfd, syscall.SOL_SOCKET, syscall.SO_DONTROUTE, boolint(dontroute))) } func setKeepAlive(fd *netFD, keepalive bool) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd.sysfd, syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, boolint(keepalive))) } func setNoDelay(fd *netFD, noDelay bool) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_TCP, syscall.TCP_NODELAY, boolint(noDelay))) } @@ -174,7 +186,9 @@ func setLinger(fd *netFD, sec int) error { l.Onoff = 0 l.Linger = 0 } - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() return os.NewSyscallError("setsockopt", syscall.SetsockoptLinger(fd.sysfd, syscall.SOL_SOCKET, syscall.SO_LINGER, &l)) } diff --git a/libgo/go/net/sockopt_bsd.go b/libgo/go/net/sockopt_bsd.go index bc764650627..79e0e57e21e 100644 --- a/libgo/go/net/sockopt_bsd.go +++ b/libgo/go/net/sockopt_bsd.go @@ -20,31 +20,20 @@ func setDefaultSockopts(s, f, t int) error { // Note that some operating systems never admit this option. syscall.SetsockoptInt(s, syscall.IPPROTO_IPV6, syscall.IPV6_V6ONLY, 0) } - - if f == syscall.AF_UNIX || - (f == syscall.AF_INET || f == syscall.AF_INET6) && t == syscall.SOCK_STREAM { - // Allow reuse of recently-used addresses. - err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1) - if err != nil { - return os.NewSyscallError("setsockopt", err) - } - - // Allow reuse of recently-used ports. - // This option is supported only in descendants of 4.4BSD, - // to make an effective multicast application and an application - // that requires quick draw possible. - err = syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEPORT, 1) - if err != nil { - return os.NewSyscallError("setsockopt", err) - } - } - // Allow broadcast. err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_BROADCAST, 1) if err != nil { return os.NewSyscallError("setsockopt", err) } + return nil +} +func setDefaultListenerSockopts(s int) error { + // Allow reuse of recently-used addresses. + err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1) + if err != nil { + return os.NewSyscallError("setsockopt", err) + } return nil } @@ -55,6 +44,10 @@ func setDefaultMulticastSockopts(s int) error { if err != nil { return os.NewSyscallError("setsockopt", err) } + // Allow reuse of recently-used ports. + // This option is supported only in descendants of 4.4BSD, + // to make an effective multicast application that requires + // quick draw possible. err = syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEPORT, 1) if err != nil { return os.NewSyscallError("setsockopt", err) diff --git a/libgo/go/net/sockopt_linux.go b/libgo/go/net/sockopt_linux.go index 67c1dc87a7a..7509c29eecf 100644 --- a/libgo/go/net/sockopt_linux.go +++ b/libgo/go/net/sockopt_linux.go @@ -18,23 +18,20 @@ func setDefaultSockopts(s, f, t int) error { // Note that some operating systems never admit this option. syscall.SetsockoptInt(s, syscall.IPPROTO_IPV6, syscall.IPV6_V6ONLY, 0) } - - if f == syscall.AF_UNIX || - (f == syscall.AF_INET || f == syscall.AF_INET6) && t == syscall.SOCK_STREAM { - // Allow reuse of recently-used addresses. - err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1) - if err != nil { - return os.NewSyscallError("setsockopt", err) - } - - } - // Allow broadcast. err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_BROADCAST, 1) if err != nil { return os.NewSyscallError("setsockopt", err) } + return nil +} +func setDefaultListenerSockopts(s int) error { + // Allow reuse of recently-used addresses. + err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1) + if err != nil { + return os.NewSyscallError("setsockopt", err) + } return nil } diff --git a/libgo/go/net/sockopt_windows.go b/libgo/go/net/sockopt_windows.go index 842bccc8f40..b18af67d754 100644 --- a/libgo/go/net/sockopt_windows.go +++ b/libgo/go/net/sockopt_windows.go @@ -18,16 +18,18 @@ func setDefaultSockopts(s syscall.Handle, f, t int) error { // Note that some operating systems never admit this option. syscall.SetsockoptInt(s, syscall.IPPROTO_IPV6, syscall.IPV6_V6ONLY, 0) } + // Allow broadcast. + syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_BROADCAST, 1) + return nil +} +func setDefaultListenerSockopts(s syscall.Handle) error { // Windows will reuse recently-used addresses by default. // SO_REUSEADDR should not be used here, as it allows // a socket to forcibly bind to a port in use by another socket. // This could lead to a non-deterministic behavior, where // connection requests over the port cannot be guaranteed // to be handled by the correct socket. - - // Allow broadcast. - syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_BROADCAST, 1) return nil } diff --git a/libgo/go/net/sockoptip.go b/libgo/go/net/sockoptip.go index 90b6f751e1d..1fcad4018cc 100644 --- a/libgo/go/net/sockoptip.go +++ b/libgo/go/net/sockoptip.go @@ -14,17 +14,21 @@ import ( ) func ipv4TOS(fd *netFD) (int, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return 0, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_TOS) if err != nil { - return -1, os.NewSyscallError("getsockopt", err) + return 0, os.NewSyscallError("getsockopt", err) } return v, nil } func setIPv4TOS(fd *netFD, v int) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_TOS, v) if err != nil { @@ -34,17 +38,21 @@ func setIPv4TOS(fd *netFD, v int) error { } func ipv4TTL(fd *netFD) (int, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return 0, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_TTL) if err != nil { - return -1, os.NewSyscallError("getsockopt", err) + return 0, os.NewSyscallError("getsockopt", err) } return v, nil } func setIPv4TTL(fd *netFD, v int) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_TTL, v) if err != nil { @@ -58,7 +66,9 @@ func joinIPv4Group(fd *netFD, ifi *Interface, ip IP) error { if err := setIPv4MreqToInterface(mreq, ifi); err != nil { return err } - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() return os.NewSyscallError("setsockopt", syscall.SetsockoptIPMreq(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_ADD_MEMBERSHIP, mreq)) } @@ -68,23 +78,29 @@ func leaveIPv4Group(fd *netFD, ifi *Interface, ip IP) error { if err := setIPv4MreqToInterface(mreq, ifi); err != nil { return err } - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() return os.NewSyscallError("setsockopt", syscall.SetsockoptIPMreq(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_DROP_MEMBERSHIP, mreq)) } func ipv6HopLimit(fd *netFD) (int, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return 0, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_UNICAST_HOPS) if err != nil { - return -1, os.NewSyscallError("getsockopt", err) + return 0, os.NewSyscallError("getsockopt", err) } return v, nil } func setIPv6HopLimit(fd *netFD, v int) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_UNICAST_HOPS, v) if err != nil { @@ -94,7 +110,9 @@ func setIPv6HopLimit(fd *netFD, v int) error { } func ipv6MulticastInterface(fd *netFD) (*Interface, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return nil, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_MULTICAST_IF) if err != nil { @@ -115,7 +133,9 @@ func setIPv6MulticastInterface(fd *netFD, ifi *Interface) error { if ifi != nil { v = ifi.Index } - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_MULTICAST_IF, v) if err != nil { @@ -125,17 +145,21 @@ func setIPv6MulticastInterface(fd *netFD, ifi *Interface) error { } func ipv6MulticastHopLimit(fd *netFD) (int, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return 0, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_MULTICAST_HOPS) if err != nil { - return -1, os.NewSyscallError("getsockopt", err) + return 0, os.NewSyscallError("getsockopt", err) } return v, nil } func setIPv6MulticastHopLimit(fd *netFD, v int) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_MULTICAST_HOPS, v) if err != nil { @@ -145,7 +169,9 @@ func setIPv6MulticastHopLimit(fd *netFD, v int) error { } func ipv6MulticastLoopback(fd *netFD) (bool, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return false, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_MULTICAST_LOOP) if err != nil { @@ -155,7 +181,9 @@ func ipv6MulticastLoopback(fd *netFD) (bool, error) { } func setIPv6MulticastLoopback(fd *netFD, v bool) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_MULTICAST_LOOP, boolint(v)) if err != nil { @@ -170,7 +198,9 @@ func joinIPv6Group(fd *netFD, ifi *Interface, ip IP) error { if ifi != nil { mreq.Interface = uint32(ifi.Index) } - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() return os.NewSyscallError("setsockopt", syscall.SetsockoptIPv6Mreq(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_JOIN_GROUP, mreq)) } @@ -181,7 +211,9 @@ func leaveIPv6Group(fd *netFD, ifi *Interface, ip IP) error { if ifi != nil { mreq.Interface = uint32(ifi.Index) } - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() return os.NewSyscallError("setsockopt", syscall.SetsockoptIPv6Mreq(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_LEAVE_GROUP, mreq)) } diff --git a/libgo/go/net/sockoptip_bsd.go b/libgo/go/net/sockoptip_bsd.go index 5f7dff248a3..19e2b142e92 100644 --- a/libgo/go/net/sockoptip_bsd.go +++ b/libgo/go/net/sockoptip_bsd.go @@ -14,17 +14,21 @@ import ( ) func ipv4MulticastTTL(fd *netFD) (int, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return 0, err + } defer fd.decref() v, err := syscall.GetsockoptByte(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_TTL) if err != nil { - return -1, os.NewSyscallError("getsockopt", err) + return 0, os.NewSyscallError("getsockopt", err) } return int(v), nil } func setIPv4MulticastTTL(fd *netFD, v int) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptByte(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_TTL, byte(v)) if err != nil { @@ -34,17 +38,21 @@ func setIPv4MulticastTTL(fd *netFD, v int) error { } func ipv6TrafficClass(fd *netFD) (int, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return 0, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_TCLASS) if err != nil { - return -1, os.NewSyscallError("getsockopt", err) + return 0, os.NewSyscallError("getsockopt", err) } return v, nil } func setIPv6TrafficClass(fd *netFD, v int) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_TCLASS, v) if err != nil { diff --git a/libgo/go/net/sockoptip_darwin.go b/libgo/go/net/sockoptip_darwin.go index dedfd6f4c3a..52b237c4b8d 100644 --- a/libgo/go/net/sockoptip_darwin.go +++ b/libgo/go/net/sockoptip_darwin.go @@ -12,7 +12,9 @@ import ( ) func ipv4MulticastInterface(fd *netFD) (*Interface, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return nil, err + } defer fd.decref() a, err := syscall.GetsockoptInet4Addr(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF) if err != nil { @@ -28,7 +30,9 @@ func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error { } var x [4]byte copy(x[:], ip.To4()) - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err = syscall.SetsockoptInet4Addr(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, x) if err != nil { @@ -38,7 +42,9 @@ func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error { } func ipv4MulticastLoopback(fd *netFD) (bool, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return false, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP) if err != nil { @@ -48,7 +54,9 @@ func ipv4MulticastLoopback(fd *netFD) (bool, error) { } func setIPv4MulticastLoopback(fd *netFD, v bool) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, boolint(v)) if err != nil { @@ -58,7 +66,9 @@ func setIPv4MulticastLoopback(fd *netFD, v bool) error { } func ipv4ReceiveInterface(fd *netFD) (bool, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return false, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_RECVIF) if err != nil { @@ -68,7 +78,9 @@ func ipv4ReceiveInterface(fd *netFD) (bool, error) { } func setIPv4ReceiveInterface(fd *netFD, v bool) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_RECVIF, boolint(v)) if err != nil { diff --git a/libgo/go/net/sockoptip_freebsd.go b/libgo/go/net/sockoptip_freebsd.go index 55f7b1a6025..4a3bc2e82c8 100644 --- a/libgo/go/net/sockoptip_freebsd.go +++ b/libgo/go/net/sockoptip_freebsd.go @@ -12,7 +12,9 @@ import ( ) func ipv4MulticastInterface(fd *netFD) (*Interface, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return nil, err + } defer fd.decref() mreq, err := syscall.GetsockoptIPMreqn(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF) if err != nil { @@ -30,7 +32,9 @@ func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error { v = int32(ifi.Index) } mreq := &syscall.IPMreqn{Ifindex: v} - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptIPMreqn(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, mreq) if err != nil { @@ -40,7 +44,9 @@ func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error { } func ipv4MulticastLoopback(fd *netFD) (bool, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return false, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP) if err != nil { @@ -50,7 +56,9 @@ func ipv4MulticastLoopback(fd *netFD) (bool, error) { } func setIPv4MulticastLoopback(fd *netFD, v bool) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, boolint(v)) if err != nil { @@ -60,7 +68,9 @@ func setIPv4MulticastLoopback(fd *netFD, v bool) error { } func ipv4ReceiveInterface(fd *netFD) (bool, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return false, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_RECVIF) if err != nil { @@ -70,7 +80,9 @@ func ipv4ReceiveInterface(fd *netFD) (bool, error) { } func setIPv4ReceiveInterface(fd *netFD, v bool) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_RECVIF, boolint(v)) if err != nil { diff --git a/libgo/go/net/sockoptip_linux.go b/libgo/go/net/sockoptip_linux.go index 360f8dea60a..169718f14aa 100644 --- a/libgo/go/net/sockoptip_linux.go +++ b/libgo/go/net/sockoptip_linux.go @@ -12,7 +12,9 @@ import ( ) func ipv4MulticastInterface(fd *netFD) (*Interface, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return nil, err + } defer fd.decref() mreq, err := syscall.GetsockoptIPMreqn(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF) if err != nil { @@ -30,7 +32,9 @@ func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error { v = int32(ifi.Index) } mreq := &syscall.IPMreqn{Ifindex: v} - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptIPMreqn(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, mreq) if err != nil { @@ -40,7 +44,9 @@ func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error { } func ipv4MulticastTTL(fd *netFD) (int, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return 0, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_TTL) if err != nil { @@ -50,7 +56,9 @@ func ipv4MulticastTTL(fd *netFD) (int, error) { } func setIPv4MulticastTTL(fd *netFD, v int) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_TTL, v) if err != nil { @@ -60,7 +68,9 @@ func setIPv4MulticastTTL(fd *netFD, v int) error { } func ipv4MulticastLoopback(fd *netFD) (bool, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return false, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP) if err != nil { @@ -70,7 +80,9 @@ func ipv4MulticastLoopback(fd *netFD) (bool, error) { } func setIPv4MulticastLoopback(fd *netFD, v bool) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, boolint(v)) if err != nil { @@ -80,7 +92,9 @@ func setIPv4MulticastLoopback(fd *netFD, v bool) error { } func ipv4ReceiveInterface(fd *netFD) (bool, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return false, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_PKTINFO) if err != nil { @@ -90,7 +104,9 @@ func ipv4ReceiveInterface(fd *netFD) (bool, error) { } func setIPv4ReceiveInterface(fd *netFD, v bool) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_PKTINFO, boolint(v)) if err != nil { @@ -100,17 +116,21 @@ func setIPv4ReceiveInterface(fd *netFD, v bool) error { } func ipv6TrafficClass(fd *netFD) (int, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return 0, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_TCLASS) if err != nil { - return -1, os.NewSyscallError("getsockopt", err) + return 0, os.NewSyscallError("getsockopt", err) } return v, nil } func setIPv6TrafficClass(fd *netFD, v int) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IPV6, syscall.IPV6_TCLASS, v) if err != nil { diff --git a/libgo/go/net/sockoptip_netbsd.go b/libgo/go/net/sockoptip_netbsd.go new file mode 100644 index 00000000000..446d92aa343 --- /dev/null +++ b/libgo/go/net/sockoptip_netbsd.go @@ -0,0 +1,39 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// IP-level socket options for NetBSD + +package net + +import "syscall" + +func ipv4MulticastInterface(fd *netFD) (*Interface, error) { + // TODO: Implement this + return nil, syscall.EAFNOSUPPORT +} + +func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error { + // TODO: Implement this + return syscall.EAFNOSUPPORT +} + +func ipv4MulticastLoopback(fd *netFD) (bool, error) { + // TODO: Implement this + return false, syscall.EAFNOSUPPORT +} + +func setIPv4MulticastLoopback(fd *netFD, v bool) error { + // TODO: Implement this + return syscall.EAFNOSUPPORT +} + +func ipv4ReceiveInterface(fd *netFD) (bool, error) { + // TODO: Implement this + return false, syscall.EAFNOSUPPORT +} + +func setIPv4ReceiveInterface(fd *netFD, v bool) error { + // TODO: Implement this + return syscall.EAFNOSUPPORT +} diff --git a/libgo/go/net/sockoptip_openbsd.go b/libgo/go/net/sockoptip_openbsd.go index 89b8e459207..f3e42f1a9bc 100644 --- a/libgo/go/net/sockoptip_openbsd.go +++ b/libgo/go/net/sockoptip_openbsd.go @@ -12,7 +12,9 @@ import ( ) func ipv4MulticastInterface(fd *netFD) (*Interface, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return nil, err + } defer fd.decref() a, err := syscall.GetsockoptInet4Addr(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF) if err != nil { @@ -28,7 +30,9 @@ func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error { } var x [4]byte copy(x[:], ip.To4()) - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err = syscall.SetsockoptInet4Addr(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, x) if err != nil { @@ -38,7 +42,9 @@ func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error { } func ipv4MulticastLoopback(fd *netFD) (bool, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return false, err + } defer fd.decref() v, err := syscall.GetsockoptByte(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP) if err != nil { @@ -48,7 +54,9 @@ func ipv4MulticastLoopback(fd *netFD) (bool, error) { } func setIPv4MulticastLoopback(fd *netFD, v bool) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptByte(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, byte(boolint(v))) if err != nil { @@ -58,7 +66,9 @@ func setIPv4MulticastLoopback(fd *netFD, v bool) error { } func ipv4ReceiveInterface(fd *netFD) (bool, error) { - fd.incref() + if err := fd.incref(false); err != nil { + return false, err + } defer fd.decref() v, err := syscall.GetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_RECVIF) if err != nil { @@ -68,7 +78,9 @@ func ipv4ReceiveInterface(fd *netFD) (bool, error) { } func setIPv4ReceiveInterface(fd *netFD, v bool) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_RECVIF, boolint(v)) if err != nil { diff --git a/libgo/go/net/sockoptip_windows.go b/libgo/go/net/sockoptip_windows.go index a8a9d1c2bfb..b9db3334d5f 100644 --- a/libgo/go/net/sockoptip_windows.go +++ b/libgo/go/net/sockoptip_windows.go @@ -23,7 +23,9 @@ func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error { } var x [4]byte copy(x[:], ip.To4()) - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err = syscall.SetsockoptInet4Addr(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, x) if err != nil { @@ -38,7 +40,9 @@ func ipv4MulticastTTL(fd *netFD) (int, error) { } func setIPv4MulticastTTL(fd *netFD, v int) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_TTL, v) if err != nil { @@ -54,7 +58,9 @@ func ipv4MulticastLoopback(fd *netFD) (bool, error) { } func setIPv4MulticastLoopback(fd *netFD, v bool) error { - fd.incref() + if err := fd.incref(false); err != nil { + return err + } defer fd.decref() err := syscall.SetsockoptInt(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, boolint(v)) if err != nil { diff --git a/libgo/go/net/tcpsock_plan9.go b/libgo/go/net/tcpsock_plan9.go index 128766144dd..35f56966eae 100644 --- a/libgo/go/net/tcpsock_plan9.go +++ b/libgo/go/net/tcpsock_plan9.go @@ -7,7 +7,7 @@ package net import ( - "os" + "syscall" "time" ) @@ -19,35 +19,35 @@ type TCPConn struct { // SetDeadline implements the Conn SetDeadline method. func (c *TCPConn) SetDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } // SetReadDeadline implements the Conn SetReadDeadline method. func (c *TCPConn) SetReadDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } // SetWriteDeadline implements the Conn SetWriteDeadline method. func (c *TCPConn) SetWriteDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } // CloseRead shuts down the reading side of the TCP connection. // Most callers should just use Close. func (c *TCPConn) CloseRead() error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } - return os.EPLAN9 + return syscall.EPLAN9 } // CloseWrite shuts down the writing side of the TCP connection. // Most callers should just use Close. func (c *TCPConn) CloseWrite() error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } - return os.EPLAN9 + return syscall.EPLAN9 } // DialTCP connects to the remote address raddr on the network net, diff --git a/libgo/go/net/tcpsock_posix.go b/libgo/go/net/tcpsock_posix.go index 51a5d6f0ed8..e05bc10170e 100644 --- a/libgo/go/net/tcpsock_posix.go +++ b/libgo/go/net/tcpsock_posix.go @@ -9,6 +9,7 @@ package net import ( + "fmt" "io" "os" "syscall" @@ -26,6 +27,11 @@ func sockaddrToTCP(sa syscall.Sockaddr) Addr { return &TCPAddr{sa.Addr[0:], sa.Port} case *syscall.SockaddrInet6: return &TCPAddr{sa.Addr[0:], sa.Port} + default: + if sa != nil { + // Diagnose when we will turn a non-nil sockaddr into a nil. + panic(fmt.Sprintf("unexpected type in sockaddrToTCP: %T", sa)) + } } return nil } @@ -70,7 +76,7 @@ func (c *TCPConn) ok() bool { return c != nil && c.fd != nil } // Read implements the Conn Read method. func (c *TCPConn) Read(b []byte) (n int, err error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } return c.fd.Read(b) } @@ -86,7 +92,7 @@ func (c *TCPConn) ReadFrom(r io.Reader) (int64, error) { // Write implements the Conn Write method. func (c *TCPConn) Write(b []byte) (n int, err error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } return c.fd.Write(b) } @@ -94,7 +100,7 @@ func (c *TCPConn) Write(b []byte) (n int, err error) { // Close closes the TCP connection. func (c *TCPConn) Close() error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } err := c.fd.Close() c.fd = nil @@ -105,7 +111,7 @@ func (c *TCPConn) Close() error { // Most callers should just use Close. func (c *TCPConn) CloseRead() error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return c.fd.CloseRead() } @@ -114,7 +120,7 @@ func (c *TCPConn) CloseRead() error { // Most callers should just use Close. func (c *TCPConn) CloseWrite() error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return c.fd.CloseWrite() } @@ -138,7 +144,7 @@ func (c *TCPConn) RemoteAddr() Addr { // SetDeadline implements the Conn SetDeadline method. func (c *TCPConn) SetDeadline(t time.Time) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setDeadline(c.fd, t) } @@ -146,7 +152,7 @@ func (c *TCPConn) SetDeadline(t time.Time) error { // SetReadDeadline implements the Conn SetReadDeadline method. func (c *TCPConn) SetReadDeadline(t time.Time) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setReadDeadline(c.fd, t) } @@ -154,7 +160,7 @@ func (c *TCPConn) SetReadDeadline(t time.Time) error { // SetWriteDeadline implements the Conn SetWriteDeadline method. func (c *TCPConn) SetWriteDeadline(t time.Time) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setWriteDeadline(c.fd, t) } @@ -163,7 +169,7 @@ func (c *TCPConn) SetWriteDeadline(t time.Time) error { // receive buffer associated with the connection. func (c *TCPConn) SetReadBuffer(bytes int) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setReadBuffer(c.fd, bytes) } @@ -172,7 +178,7 @@ func (c *TCPConn) SetReadBuffer(bytes int) error { // transmit buffer associated with the connection. func (c *TCPConn) SetWriteBuffer(bytes int) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setWriteBuffer(c.fd, bytes) } @@ -190,7 +196,7 @@ func (c *TCPConn) SetWriteBuffer(bytes int) error { // data to be sent and acknowledged. func (c *TCPConn) SetLinger(sec int) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setLinger(c.fd, sec) } @@ -199,7 +205,7 @@ func (c *TCPConn) SetLinger(sec int) error { // keepalive messages on the connection. func (c *TCPConn) SetKeepAlive(keepalive bool) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setKeepAlive(c.fd, keepalive) } @@ -210,7 +216,7 @@ func (c *TCPConn) SetKeepAlive(keepalive bool) error { // that data is sent as soon as possible after a Write. func (c *TCPConn) SetNoDelay(noDelay bool) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setNoDelay(c.fd, noDelay) } @@ -227,13 +233,54 @@ func DialTCP(net string, laddr, raddr *TCPAddr) (*TCPConn, error) { if raddr == nil { return nil, &OpError{"dial", net, nil, errMissingAddress} } + fd, err := internetSocket(net, laddr.toAddr(), raddr.toAddr(), syscall.SOCK_STREAM, 0, "dial", sockaddrToTCP) + + // TCP has a rarely used mechanism called a 'simultaneous connection' in + // which Dial("tcp", addr1, addr2) run on the machine at addr1 can + // connect to a simultaneous Dial("tcp", addr2, addr1) run on the machine + // at addr2, without either machine executing Listen. If laddr == nil, + // it means we want the kernel to pick an appropriate originating local + // address. Some Linux kernels cycle blindly through a fixed range of + // local ports, regardless of destination port. If a kernel happens to + // pick local port 50001 as the source for a Dial("tcp", "", "localhost:50001"), + // then the Dial will succeed, having simultaneously connected to itself. + // This can only happen when we are letting the kernel pick a port (laddr == nil) + // and when there is no listener for the destination address. + // It's hard to argue this is anything other than a kernel bug. If we + // see this happen, rather than expose the buggy effect to users, we + // close the fd and try again. If it happens twice more, we relent and + // use the result. See also: + // http://golang.org/issue/2690 + // http://stackoverflow.com/questions/4949858/ + for i := 0; i < 2 && err == nil && laddr == nil && selfConnect(fd); i++ { + fd.Close() + fd, err = internetSocket(net, laddr.toAddr(), raddr.toAddr(), syscall.SOCK_STREAM, 0, "dial", sockaddrToTCP) + } + if err != nil { return nil, err } return newTCPConn(fd), nil } +func selfConnect(fd *netFD) bool { + // The socket constructor can return an fd with raddr nil under certain + // unknown conditions. The errors in the calls there to Getpeername + // are discarded, but we can't catch the problem there because those + // calls are sometimes legally erroneous with a "socket not connected". + // Since this code (selfConnect) is already trying to work around + // a problem, we make sure if this happens we recognize trouble and + // ask the DialTCP routine to try again. + // TODO: try to understand what's really going on. + if fd.laddr == nil || fd.raddr == nil { + return true + } + l := fd.laddr.(*TCPAddr) + r := fd.raddr.(*TCPAddr) + return l.Port == r.Port && l.IP.Equal(r.IP) +} + // TCPListener is a TCP network listener. // Clients should typically use variables of type Listener // instead of assuming TCP. @@ -264,7 +311,7 @@ func ListenTCP(net string, laddr *TCPAddr) (*TCPListener, error) { // and the remote address. func (l *TCPListener) AcceptTCP() (c *TCPConn, err error) { if l == nil || l.fd == nil || l.fd.sysfd < 0 { - return nil, os.EINVAL + return nil, syscall.EINVAL } fd, err := l.fd.accept(sockaddrToTCP) if err != nil { @@ -287,7 +334,7 @@ func (l *TCPListener) Accept() (c Conn, err error) { // Already Accepted connections are not closed. func (l *TCPListener) Close() error { if l == nil || l.fd == nil { - return os.EINVAL + return syscall.EINVAL } return l.fd.Close() } @@ -299,7 +346,7 @@ func (l *TCPListener) Addr() Addr { return l.fd.laddr } // A zero time value disables the deadline. func (l *TCPListener) SetDeadline(t time.Time) error { if l == nil || l.fd == nil { - return os.EINVAL + return syscall.EINVAL } return setDeadline(l.fd, t) } diff --git a/libgo/go/net/testdata/hosts b/libgo/go/net/testdata/hosts new file mode 100644 index 00000000000..b601763898b --- /dev/null +++ b/libgo/go/net/testdata/hosts @@ -0,0 +1,12 @@ +255.255.255.255 broadcasthost +127.0.0.2 odin +127.0.0.3 odin # inline comment +::2 odin +127.1.1.1 thor +# aliases +127.1.1.2 ullr ullrhost +# Bogus entries that must be ignored. +123.123.123 loki +321.321.321.321 +# TODO(yvesj): Should we be able to parse this? From a Darwin system. +fe80::1%lo0 localhost diff --git a/libgo/go/net/testdata/igmp b/libgo/go/net/testdata/igmp new file mode 100644 index 00000000000..5f380a2c7db --- /dev/null +++ b/libgo/go/net/testdata/igmp @@ -0,0 +1,24 @@ +Idx Device : Count Querier Group Users Timer Reporter +1 lo : 1 V3 + 010000E0 1 0:00000000 0 +2 eth0 : 2 V2 + FB0000E0 1 0:00000000 1 + 010000E0 1 0:00000000 0 +3 eth1 : 1 V3 + 010000E0 1 0:00000000 0 +4 eth2 : 1 V3 + 010000E0 1 0:00000000 0 +5 eth0.100 : 2 V3 + FB0000E0 1 0:00000000 0 + 010000E0 1 0:00000000 0 +6 eth0.101 : 2 V3 + FB0000E0 1 0:00000000 0 + 010000E0 1 0:00000000 0 +7 eth0.102 : 2 V3 + FB0000E0 1 0:00000000 0 + 010000E0 1 0:00000000 0 +8 eth0.103 : 2 V3 + FB0000E0 1 0:00000000 0 + 010000E0 1 0:00000000 0 +9 device1tap2: 1 V3 + 010000E0 1 0:00000000 0 diff --git a/libgo/go/net/testdata/igmp6 b/libgo/go/net/testdata/igmp6 new file mode 100644 index 00000000000..6cd5a2d4d9d --- /dev/null +++ b/libgo/go/net/testdata/igmp6 @@ -0,0 +1,18 @@ +1 lo ff020000000000000000000000000001 1 0000000C 0 +2 eth0 ff0200000000000000000001ffac891e 1 00000006 0 +2 eth0 ff020000000000000000000000000001 1 0000000C 0 +3 eth1 ff0200000000000000000001ffac8928 2 00000006 0 +3 eth1 ff020000000000000000000000000001 1 0000000C 0 +4 eth2 ff0200000000000000000001ffac8932 2 00000006 0 +4 eth2 ff020000000000000000000000000001 1 0000000C 0 +5 eth0.100 ff0200000000000000000001ffac891e 1 00000004 0 +5 eth0.100 ff020000000000000000000000000001 1 0000000C 0 +6 pan0 ff020000000000000000000000000001 1 0000000C 0 +7 eth0.101 ff0200000000000000000001ffac891e 1 00000004 0 +7 eth0.101 ff020000000000000000000000000001 1 0000000C 0 +8 eth0.102 ff0200000000000000000001ffac891e 1 00000004 0 +8 eth0.102 ff020000000000000000000000000001 1 0000000C 0 +9 eth0.103 ff0200000000000000000001ffac891e 1 00000004 0 +9 eth0.103 ff020000000000000000000000000001 1 0000000C 0 +10 device1tap2 ff0200000000000000000001ff4cc3a3 1 00000004 0 +10 device1tap2 ff020000000000000000000000000001 1 0000000C 0 diff --git a/libgo/go/net/textproto/reader.go b/libgo/go/net/textproto/reader.go index 862cd536c46..125feb3e885 100644 --- a/libgo/go/net/textproto/reader.go +++ b/libgo/go/net/textproto/reader.go @@ -454,10 +454,14 @@ func (r *Reader) ReadMIMEHeader() (MIMEHeader, error) { // Key ends at first colon; must not have spaces. i := bytes.IndexByte(kv, ':') - if i < 0 || bytes.IndexByte(kv[0:i], ' ') >= 0 { + if i < 0 { return m, ProtocolError("malformed MIME header line: " + string(kv)) } - key := CanonicalMIMEHeaderKey(string(kv[0:i])) + key := string(kv[0:i]) + if strings.Index(key, " ") >= 0 { + key = strings.TrimRight(key, " ") + } + key = CanonicalMIMEHeaderKey(key) // Skip initial spaces in value. i++ // skip colon @@ -503,6 +507,11 @@ MustRewrite: a := []byte(s) upper := true for i, v := range a { + if v == ' ' { + a[i] = '-' + upper = true + continue + } if upper && 'a' <= v && v <= 'z' { a[i] = v + 'A' - 'a' } diff --git a/libgo/go/net/textproto/reader_test.go b/libgo/go/net/textproto/reader_test.go index 4d036914801..7c5d16227ff 100644 --- a/libgo/go/net/textproto/reader_test.go +++ b/libgo/go/net/textproto/reader_test.go @@ -164,6 +164,29 @@ func TestLargeReadMIMEHeader(t *testing.T) { } } +// Test that we read slightly-bogus MIME headers seen in the wild, +// with spaces before colons, and spaces in keys. +func TestReadMIMEHeaderNonCompliant(t *testing.T) { + // Invalid HTTP response header as sent by an Axis security + // camera: (this is handled by IE, Firefox, Chrome, curl, etc.) + r := reader("Foo: bar\r\n" + + "Content-Language: en\r\n" + + "SID : 0\r\n" + + "Audio Mode : None\r\n" + + "Privilege : 127\r\n\r\n") + m, err := r.ReadMIMEHeader() + want := MIMEHeader{ + "Foo": {"bar"}, + "Content-Language": {"en"}, + "Sid": {"0"}, + "Audio-Mode": {"None"}, + "Privilege": {"127"}, + } + if !reflect.DeepEqual(m, want) || err != nil { + t.Fatalf("ReadMIMEHeader =\n%v, %v; want:\n%v", m, err, want) + } +} + type readResponseTest struct { in string inCode int diff --git a/libgo/go/net/textproto/textproto.go b/libgo/go/net/textproto/textproto.go index 317ec72b0cc..ad5840cf7da 100644 --- a/libgo/go/net/textproto/textproto.go +++ b/libgo/go/net/textproto/textproto.go @@ -20,6 +20,9 @@ // // Writer, to write dot-encoded text blocks. // +// Conn, a convenient packaging of Reader, Writer, and Pipeline for use +// with a single network connection. +// package textproto import ( diff --git a/libgo/go/net/timeout_test.go b/libgo/go/net/timeout_test.go index bae37c86b2e..ef350f0f946 100644 --- a/libgo/go/net/timeout_test.go +++ b/libgo/go/net/timeout_test.go @@ -40,7 +40,7 @@ func testTimeout(t *testing.T, network, addr string, readFrom bool) { errc <- fmt.Errorf("fd.%s on %s %s did not return 0, timeout: %v, %v", what, network, addr, n, err1) return } - if dt := t1.Sub(t0); dt < 50*time.Millisecond || dt > 250*time.Millisecond { + if dt := t1.Sub(t0); dt < 50*time.Millisecond || !testing.Short() && dt > 250*time.Millisecond { errc <- fmt.Errorf("fd.%s on %s %s took %s, expected 0.1s", what, network, addr, dt) return } diff --git a/libgo/go/net/udp_test.go b/libgo/go/net/udp_test.go index 6ba762b1f78..ea5fad41a53 100644 --- a/libgo/go/net/udp_test.go +++ b/libgo/go/net/udp_test.go @@ -38,18 +38,18 @@ func testWriteToConn(t *testing.T, raddr string) { _, err = c.(*UDPConn).WriteToUDP([]byte("Connection-oriented mode socket"), ra) if err == nil { - t.Fatal("WriteToUDP should be failed") + t.Fatal("WriteToUDP should fail") } if err != nil && err.(*OpError).Err != ErrWriteToConnected { - t.Fatalf("WriteToUDP should be failed as ErrWriteToConnected: %v", err) + t.Fatalf("WriteToUDP should fail as ErrWriteToConnected: %v", err) } _, err = c.(*UDPConn).WriteTo([]byte("Connection-oriented mode socket"), ra) if err == nil { - t.Fatal("WriteTo should be failed") + t.Fatal("WriteTo should fail") } if err != nil && err.(*OpError).Err != ErrWriteToConnected { - t.Fatalf("WriteTo should be failed as ErrWriteToConnected: %v", err) + t.Fatalf("WriteTo should fail as ErrWriteToConnected: %v", err) } _, err = c.Write([]byte("Connection-oriented mode socket")) @@ -82,6 +82,6 @@ func testWriteToPacketConn(t *testing.T, raddr string) { _, err = c.(*UDPConn).Write([]byte("Connection-less mode socket")) if err == nil { - t.Fatal("Write should be failed") + t.Fatal("Write should fail") } } diff --git a/libgo/go/net/udpsock_plan9.go b/libgo/go/net/udpsock_plan9.go index f90a5fe9ab8..4f298a42f87 100644 --- a/libgo/go/net/udpsock_plan9.go +++ b/libgo/go/net/udpsock_plan9.go @@ -9,6 +9,7 @@ package net import ( "errors" "os" + "syscall" "time" ) @@ -20,17 +21,17 @@ type UDPConn struct { // SetDeadline implements the Conn SetDeadline method. func (c *UDPConn) SetDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } // SetReadDeadline implements the Conn SetReadDeadline method. func (c *UDPConn) SetReadDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } // SetWriteDeadline implements the Conn SetWriteDeadline method. func (c *UDPConn) SetWriteDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } // UDP-specific methods. @@ -43,7 +44,7 @@ func (c *UDPConn) SetWriteDeadline(t time.Time) error { // after a fixed time limit; see SetDeadline and SetReadDeadline. func (c *UDPConn) ReadFromUDP(b []byte) (n int, addr *UDPAddr, err error) { if !c.ok() { - return 0, nil, os.EINVAL + return 0, nil, syscall.EINVAL } if c.data == nil { c.data, err = os.OpenFile(c.dir+"/data", os.O_RDWR, 0) @@ -69,7 +70,7 @@ func (c *UDPConn) ReadFromUDP(b []byte) (n int, addr *UDPAddr, err error) { // ReadFrom implements the PacketConn ReadFrom method. func (c *UDPConn) ReadFrom(b []byte) (n int, addr Addr, err error) { if !c.ok() { - return 0, nil, os.EINVAL + return 0, nil, syscall.EINVAL } return c.ReadFromUDP(b) } @@ -82,7 +83,7 @@ func (c *UDPConn) ReadFrom(b []byte) (n int, addr Addr, err error) { // On packet-oriented connections, write timeouts are rare. func (c *UDPConn) WriteToUDP(b []byte, addr *UDPAddr) (n int, err error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } if c.data == nil { c.data, err = os.OpenFile(c.dir+"/data", os.O_RDWR, 0) @@ -106,11 +107,11 @@ func (c *UDPConn) WriteToUDP(b []byte, addr *UDPAddr) (n int, err error) { // WriteTo implements the PacketConn WriteTo method. func (c *UDPConn) WriteTo(b []byte, addr Addr) (n int, err error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } a, ok := addr.(*UDPAddr) if !ok { - return 0, &OpError{"write", c.dir, addr, os.EINVAL} + return 0, &OpError{"write", c.dir, addr, syscall.EINVAL} } return c.WriteToUDP(b, a) } @@ -191,5 +192,5 @@ func ListenUDP(net string, laddr *UDPAddr) (c *UDPConn, err error) { // the interface to join. ListenMulticastUDP uses default // multicast interface if ifi is nil. func ListenMulticastUDP(net string, ifi *Interface, gaddr *UDPAddr) (*UDPConn, error) { - return nil, os.EPLAN9 + return nil, syscall.EPLAN9 } diff --git a/libgo/go/net/udpsock_posix.go b/libgo/go/net/udpsock_posix.go index 6108373568a..1f99dc53867 100644 --- a/libgo/go/net/udpsock_posix.go +++ b/libgo/go/net/udpsock_posix.go @@ -63,7 +63,7 @@ func (c *UDPConn) ok() bool { return c != nil && c.fd != nil } // Read implements the Conn Read method. func (c *UDPConn) Read(b []byte) (int, error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } return c.fd.Read(b) } @@ -71,7 +71,7 @@ func (c *UDPConn) Read(b []byte) (int, error) { // Write implements the Conn Write method. func (c *UDPConn) Write(b []byte) (int, error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } return c.fd.Write(b) } @@ -79,7 +79,7 @@ func (c *UDPConn) Write(b []byte) (int, error) { // Close closes the UDP connection. func (c *UDPConn) Close() error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } err := c.fd.Close() c.fd = nil @@ -105,7 +105,7 @@ func (c *UDPConn) RemoteAddr() Addr { // SetDeadline implements the Conn SetDeadline method. func (c *UDPConn) SetDeadline(t time.Time) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setDeadline(c.fd, t) } @@ -113,7 +113,7 @@ func (c *UDPConn) SetDeadline(t time.Time) error { // SetReadDeadline implements the Conn SetReadDeadline method. func (c *UDPConn) SetReadDeadline(t time.Time) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setReadDeadline(c.fd, t) } @@ -121,7 +121,7 @@ func (c *UDPConn) SetReadDeadline(t time.Time) error { // SetWriteDeadline implements the Conn SetWriteDeadline method. func (c *UDPConn) SetWriteDeadline(t time.Time) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setWriteDeadline(c.fd, t) } @@ -130,7 +130,7 @@ func (c *UDPConn) SetWriteDeadline(t time.Time) error { // receive buffer associated with the connection. func (c *UDPConn) SetReadBuffer(bytes int) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setReadBuffer(c.fd, bytes) } @@ -139,7 +139,7 @@ func (c *UDPConn) SetReadBuffer(bytes int) error { // transmit buffer associated with the connection. func (c *UDPConn) SetWriteBuffer(bytes int) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setWriteBuffer(c.fd, bytes) } @@ -154,7 +154,7 @@ func (c *UDPConn) SetWriteBuffer(bytes int) error { // after a fixed time limit; see SetDeadline and SetReadDeadline. func (c *UDPConn) ReadFromUDP(b []byte) (n int, addr *UDPAddr, err error) { if !c.ok() { - return 0, nil, os.EINVAL + return 0, nil, syscall.EINVAL } n, sa, err := c.fd.ReadFrom(b) switch sa := sa.(type) { @@ -169,7 +169,7 @@ func (c *UDPConn) ReadFromUDP(b []byte) (n int, addr *UDPAddr, err error) { // ReadFrom implements the PacketConn ReadFrom method. func (c *UDPConn) ReadFrom(b []byte) (int, Addr, error) { if !c.ok() { - return 0, nil, os.EINVAL + return 0, nil, syscall.EINVAL } n, uaddr, err := c.ReadFromUDP(b) return n, uaddr.toAddr(), err @@ -183,7 +183,7 @@ func (c *UDPConn) ReadFrom(b []byte) (int, Addr, error) { // On packet-oriented connections, write timeouts are rare. func (c *UDPConn) WriteToUDP(b []byte, addr *UDPAddr) (int, error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } if c.fd.isConnected { return 0, &OpError{"write", c.fd.net, addr, ErrWriteToConnected} @@ -198,11 +198,11 @@ func (c *UDPConn) WriteToUDP(b []byte, addr *UDPAddr) (int, error) { // WriteTo implements the PacketConn WriteTo method. func (c *UDPConn) WriteTo(b []byte, addr Addr) (int, error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } a, ok := addr.(*UDPAddr) if !ok { - return 0, &OpError{"write", c.fd.net, addr, os.EINVAL} + return 0, &OpError{"write", c.fd.net, addr, syscall.EINVAL} } return c.WriteToUDP(b, a) } @@ -262,7 +262,7 @@ func ListenMulticastUDP(net string, ifi *Interface, gaddr *UDPAddr) (*UDPConn, e return nil, UnknownNetworkError(net) } if gaddr == nil || gaddr.IP == nil { - return nil, &OpError{"listenmulticastudp", "udp", nil, errMissingAddress} + return nil, &OpError{"listenmulticast", net, nil, errMissingAddress} } fd, err := internetSocket(net, gaddr.toAddr(), nil, syscall.SOCK_DGRAM, 0, "listen", sockaddrToUDP) if err != nil { diff --git a/libgo/go/net/unixsock_plan9.go b/libgo/go/net/unixsock_plan9.go index 1d9d7578f4f..7b4ae6bd116 100644 --- a/libgo/go/net/unixsock_plan9.go +++ b/libgo/go/net/unixsock_plan9.go @@ -7,7 +7,7 @@ package net import ( - "os" + "syscall" "time" ) @@ -19,17 +19,17 @@ type UnixConn bool // Read implements the Conn Read method. func (c *UnixConn) Read(b []byte) (n int, err error) { - return 0, os.EPLAN9 + return 0, syscall.EPLAN9 } // Write implements the Conn Write method. func (c *UnixConn) Write(b []byte) (n int, err error) { - return 0, os.EPLAN9 + return 0, syscall.EPLAN9 } // Close closes the Unix domain connection. func (c *UnixConn) Close() error { - return os.EPLAN9 + return syscall.EPLAN9 } // LocalAddr returns the local network address, a *UnixAddr. @@ -47,28 +47,28 @@ func (c *UnixConn) RemoteAddr() Addr { // SetDeadline implements the Conn SetDeadline method. func (c *UnixConn) SetDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } // SetReadDeadline implements the Conn SetReadDeadline method. func (c *UnixConn) SetReadDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } // SetWriteDeadline implements the Conn SetWriteDeadline method. func (c *UnixConn) SetWriteDeadline(t time.Time) error { - return os.EPLAN9 + return syscall.EPLAN9 } // ReadFrom implements the PacketConn ReadFrom method. func (c *UnixConn) ReadFrom(b []byte) (n int, addr Addr, err error) { - err = os.EPLAN9 + err = syscall.EPLAN9 return } // WriteTo implements the PacketConn WriteTo method. func (c *UnixConn) WriteTo(b []byte, addr Addr) (n int, err error) { - err = os.EPLAN9 + err = syscall.EPLAN9 return } @@ -76,7 +76,7 @@ func (c *UnixConn) WriteTo(b []byte, addr Addr) (n int, err error) { // which must be "unix" or "unixgram". If laddr is not nil, it is used // as the local address for the connection. func DialUnix(net string, laddr, raddr *UnixAddr) (c *UnixConn, err error) { - return nil, os.EPLAN9 + return nil, syscall.EPLAN9 } // UnixListener is a Unix domain socket listener. @@ -87,19 +87,19 @@ type UnixListener bool // ListenUnix announces on the Unix domain socket laddr and returns a Unix listener. // Net must be "unix" (stream sockets). func ListenUnix(net string, laddr *UnixAddr) (l *UnixListener, err error) { - return nil, os.EPLAN9 + return nil, syscall.EPLAN9 } // Accept implements the Accept method in the Listener interface; // it waits for the next call and returns a generic Conn. func (l *UnixListener) Accept() (c Conn, err error) { - return nil, os.EPLAN9 + return nil, syscall.EPLAN9 } // Close stops listening on the Unix address. // Already accepted connections are not closed. func (l *UnixListener) Close() error { - return os.EPLAN9 + return syscall.EPLAN9 } // Addr returns the listener's network address. diff --git a/libgo/go/net/unixsock_posix.go b/libgo/go/net/unixsock_posix.go index 10b79668511..3a94cf5c5ad 100644 --- a/libgo/go/net/unixsock_posix.go +++ b/libgo/go/net/unixsock_posix.go @@ -59,8 +59,8 @@ func unixSocket(net string, laddr, raddr *UnixAddr, mode string) (fd *netFD, err f = sockaddrToUnixpacket } - fd, oserr := socket(net, syscall.AF_UNIX, sotype, 0, la, ra, f) - if oserr != nil { + fd, err = socket(net, syscall.AF_UNIX, sotype, 0, la, ra, f) + if err != nil { goto Error } return fd, nil @@ -70,7 +70,7 @@ Error: if mode == "listen" { addr = laddr } - return nil, &OpError{Op: mode, Net: net, Addr: addr, Err: oserr} + return nil, &OpError{Op: mode, Net: net, Addr: addr, Err: err} } func sockaddrToUnix(sa syscall.Sockaddr) Addr { @@ -123,7 +123,7 @@ func (c *UnixConn) ok() bool { return c != nil && c.fd != nil } // Read implements the Conn Read method. func (c *UnixConn) Read(b []byte) (n int, err error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } return c.fd.Read(b) } @@ -131,7 +131,7 @@ func (c *UnixConn) Read(b []byte) (n int, err error) { // Write implements the Conn Write method. func (c *UnixConn) Write(b []byte) (n int, err error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } return c.fd.Write(b) } @@ -139,7 +139,7 @@ func (c *UnixConn) Write(b []byte) (n int, err error) { // Close closes the Unix domain connection. func (c *UnixConn) Close() error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } err := c.fd.Close() c.fd = nil @@ -168,7 +168,7 @@ func (c *UnixConn) RemoteAddr() Addr { // SetDeadline implements the Conn SetDeadline method. func (c *UnixConn) SetDeadline(t time.Time) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setDeadline(c.fd, t) } @@ -176,7 +176,7 @@ func (c *UnixConn) SetDeadline(t time.Time) error { // SetReadDeadline implements the Conn SetReadDeadline method. func (c *UnixConn) SetReadDeadline(t time.Time) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setReadDeadline(c.fd, t) } @@ -184,7 +184,7 @@ func (c *UnixConn) SetReadDeadline(t time.Time) error { // SetWriteDeadline implements the Conn SetWriteDeadline method. func (c *UnixConn) SetWriteDeadline(t time.Time) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setWriteDeadline(c.fd, t) } @@ -193,7 +193,7 @@ func (c *UnixConn) SetWriteDeadline(t time.Time) error { // receive buffer associated with the connection. func (c *UnixConn) SetReadBuffer(bytes int) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setReadBuffer(c.fd, bytes) } @@ -202,7 +202,7 @@ func (c *UnixConn) SetReadBuffer(bytes int) error { // transmit buffer associated with the connection. func (c *UnixConn) SetWriteBuffer(bytes int) error { if !c.ok() { - return os.EINVAL + return syscall.EINVAL } return setWriteBuffer(c.fd, bytes) } @@ -216,7 +216,7 @@ func (c *UnixConn) SetWriteBuffer(bytes int) error { // see SetDeadline and SetReadDeadline. func (c *UnixConn) ReadFromUnix(b []byte) (n int, addr *UnixAddr, err error) { if !c.ok() { - return 0, nil, os.EINVAL + return 0, nil, syscall.EINVAL } n, sa, err := c.fd.ReadFrom(b) switch sa := sa.(type) { @@ -229,7 +229,7 @@ func (c *UnixConn) ReadFromUnix(b []byte) (n int, addr *UnixAddr, err error) { // ReadFrom implements the PacketConn ReadFrom method. func (c *UnixConn) ReadFrom(b []byte) (n int, addr Addr, err error) { if !c.ok() { - return 0, nil, os.EINVAL + return 0, nil, syscall.EINVAL } n, uaddr, err := c.ReadFromUnix(b) return n, uaddr.toAddr(), err @@ -243,10 +243,10 @@ func (c *UnixConn) ReadFrom(b []byte) (n int, addr Addr, err error) { // On packet-oriented connections, write timeouts are rare. func (c *UnixConn) WriteToUnix(b []byte, addr *UnixAddr) (n int, err error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } if addr.Net != sotypeToNet(c.fd.sotype) { - return 0, os.EAFNOSUPPORT + return 0, syscall.EAFNOSUPPORT } sa := &syscall.SockaddrUnix{Name: addr.Name} return c.fd.WriteTo(b, sa) @@ -255,18 +255,18 @@ func (c *UnixConn) WriteToUnix(b []byte, addr *UnixAddr) (n int, err error) { // WriteTo implements the PacketConn WriteTo method. func (c *UnixConn) WriteTo(b []byte, addr Addr) (n int, err error) { if !c.ok() { - return 0, os.EINVAL + return 0, syscall.EINVAL } a, ok := addr.(*UnixAddr) if !ok { - return 0, &OpError{"write", c.fd.net, addr, os.EINVAL} + return 0, &OpError{"write", c.fd.net, addr, syscall.EINVAL} } return c.WriteToUnix(b, a) } func (c *UnixConn) ReadMsgUnix(b, oob []byte) (n, oobn, flags int, addr *UnixAddr, err error) { if !c.ok() { - return 0, 0, 0, nil, os.EINVAL + return 0, 0, 0, nil, syscall.EINVAL } n, oobn, flags, sa, err := c.fd.ReadMsg(b, oob) switch sa := sa.(type) { @@ -278,11 +278,11 @@ func (c *UnixConn) ReadMsgUnix(b, oob []byte) (n, oobn, flags int, addr *UnixAdd func (c *UnixConn) WriteMsgUnix(b, oob []byte, addr *UnixAddr) (n, oobn int, err error) { if !c.ok() { - return 0, 0, os.EINVAL + return 0, 0, syscall.EINVAL } if addr != nil { if addr.Net != sotypeToNet(c.fd.sotype) { - return 0, 0, os.EAFNOSUPPORT + return 0, 0, syscall.EAFNOSUPPORT } sa := &syscall.SockaddrUnix{Name: addr.Name} return c.fd.WriteMsg(b, oob, sa) @@ -339,7 +339,7 @@ func ListenUnix(net string, laddr *UnixAddr) (*UnixListener, error) { // and the remote address. func (l *UnixListener) AcceptUnix() (*UnixConn, error) { if l == nil || l.fd == nil { - return nil, os.EINVAL + return nil, syscall.EINVAL } fd, err := l.fd.accept(sockaddrToUnix) if err != nil { @@ -363,7 +363,7 @@ func (l *UnixListener) Accept() (c Conn, err error) { // Already accepted connections are not closed. func (l *UnixListener) Close() error { if l == nil || l.fd == nil { - return os.EINVAL + return syscall.EINVAL } // The operating system doesn't clean up @@ -391,7 +391,7 @@ func (l *UnixListener) Addr() Addr { return l.fd.laddr } // A zero time value disables the deadline. func (l *UnixListener) SetDeadline(t time.Time) (err error) { if l == nil || l.fd == nil { - return os.EINVAL + return syscall.EINVAL } return setDeadline(l.fd, t) } diff --git a/libgo/go/net/url/url.go b/libgo/go/net/url/url.go index a9ce3b31e24..88ff7ebfef3 100644 --- a/libgo/go/net/url/url.go +++ b/libgo/go/net/url/url.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package URL parses URLs and implements query escaping. +// Package url parses URLs and implements query escaping. // See RFC 3986. package url @@ -321,19 +321,28 @@ func split(s string, c byte, cutc bool) (string, string) { } // Parse parses rawurl into a URL structure. -// The string rawurl is assumed not to have a #fragment suffix. -// (Web browsers strip #fragment before sending the URL to a web server.) // The rawurl may be relative or absolute. func Parse(rawurl string) (url *URL, err error) { - return parse(rawurl, false) + // Cut off #frag + u, frag := split(rawurl, '#', true) + if url, err = parse(u, false); err != nil { + return nil, err + } + if frag == "" { + return url, nil + } + if url.Fragment, err = unescape(frag, encodeFragment); err != nil { + return nil, &Error{"parse", rawurl, err} + } + return url, nil } -// ParseRequest parses rawurl into a URL structure. It assumes that -// rawurl was received from an HTTP request, so the rawurl is interpreted +// ParseRequestURI parses rawurl into a URL structure. It assumes that +// rawurl was received in an HTTP request, so the rawurl is interpreted // only as an absolute URI or an absolute path. // The string rawurl is assumed not to have a #fragment suffix. // (Web browsers strip #fragment before sending the URL to a web server.) -func ParseRequest(rawurl string) (url *URL, err error) { +func ParseRequestURI(rawurl string) (url *URL, err error) { return parse(rawurl, true) } @@ -415,22 +424,6 @@ func parseAuthority(authority string) (user *Userinfo, host string, err error) { return } -// ParseWithReference is like Parse but allows a trailing #fragment. -func ParseWithReference(rawurlref string) (url *URL, err error) { - // Cut off #frag - rawurl, frag := split(rawurlref, '#', true) - if url, err = Parse(rawurl); err != nil { - return nil, err - } - if frag == "" { - return url, nil - } - if url.Fragment, err = unescape(frag, encodeFragment); err != nil { - return nil, &Error{"parse", rawurlref, err} - } - return url, nil -} - // String reassembles the URL into a valid URL string. func (u *URL) String() string { // TODO: Rewrite to use bytes.Buffer @@ -589,15 +582,15 @@ func (u *URL) IsAbs() bool { return u.Scheme != "" } -// Parse parses a URL in the context of a base URL. The URL in ref +// Parse parses a URL in the context of the receiver. The provided URL // may be relative or absolute. Parse returns nil, err on parse // failure, otherwise its return value is the same as ResolveReference. -func (base *URL) Parse(ref string) (*URL, error) { +func (u *URL) Parse(ref string) (*URL, error) { refurl, err := Parse(ref) if err != nil { return nil, err } - return base.ResolveReference(refurl), nil + return u.ResolveReference(refurl), nil } // ResolveReference resolves a URI reference to an absolute URI from @@ -606,13 +599,13 @@ func (base *URL) Parse(ref string) (*URL, error) { // URL instance, even if the returned URL is identical to either the // base or reference. If ref is an absolute URL, then ResolveReference // ignores base and returns a copy of ref. -func (base *URL) ResolveReference(ref *URL) *URL { +func (u *URL) ResolveReference(ref *URL) *URL { if ref.IsAbs() { url := *ref return &url } // relativeURI = ( net_path | abs_path | rel_path ) [ "?" query ] - url := *base + url := *u url.RawQuery = ref.RawQuery url.Fragment = ref.Fragment if ref.Opaque != "" { @@ -632,7 +625,7 @@ func (base *URL) ResolveReference(ref *URL) *URL { url.Path = ref.Path } else { // The "rel_path" case. - path := resolvePath(base.Path, ref.Path) + path := resolvePath(u.Path, ref.Path) if !strings.HasPrefix(path, "/") { path = "/" + path } diff --git a/libgo/go/net/url/url_test.go b/libgo/go/net/url/url_test.go index 9fe5ff886b7..2d911ed505a 100644 --- a/libgo/go/net/url/url_test.go +++ b/libgo/go/net/url/url_test.go @@ -188,22 +188,6 @@ var urltests = []URLTest{ }, "http://user:password@google.com", }, -} - -var urlnofragtests = []URLTest{ - { - "http://www.google.com/?q=go+language#foo", - &URL{ - Scheme: "http", - Host: "www.google.com", - Path: "/", - RawQuery: "q=go+language#foo", - }, - "", - }, -} - -var urlfragtests = []URLTest{ { "http://www.google.com/?q=go+language#foo", &URL{ @@ -257,12 +241,6 @@ func DoTest(t *testing.T, parse func(string) (*URL, error), name string, tests [ func TestParse(t *testing.T) { DoTest(t, Parse, "Parse", urltests) - DoTest(t, Parse, "Parse", urlnofragtests) -} - -func TestParseWithReference(t *testing.T) { - DoTest(t, ParseWithReference, "ParseWithReference", urltests) - DoTest(t, ParseWithReference, "ParseWithReference", urlfragtests) } const pathThatLooksSchemeRelative = "//not.a.user@not.a.host/just/a/path" @@ -281,16 +259,16 @@ var parseRequestUrlTests = []struct { {"../dir/", false}, } -func TestParseRequest(t *testing.T) { +func TestParseRequestURI(t *testing.T) { for _, test := range parseRequestUrlTests { - _, err := ParseRequest(test.url) + _, err := ParseRequestURI(test.url) valid := err == nil if valid != test.expectedValid { t.Errorf("Expected valid=%v for %q; got %v", test.expectedValid, test.url, valid) } } - url, err := ParseRequest(pathThatLooksSchemeRelative) + url, err := ParseRequestURI(pathThatLooksSchemeRelative) if err != nil { t.Fatalf("Unexpected error %v", err) } @@ -319,9 +297,6 @@ func DoTestString(t *testing.T, parse func(string) (*URL, error), name string, t func TestURLString(t *testing.T) { DoTestString(t, Parse, "Parse", urltests) - DoTestString(t, Parse, "Parse", urlnofragtests) - DoTestString(t, ParseWithReference, "ParseWithReference", urltests) - DoTestString(t, ParseWithReference, "ParseWithReference", urlfragtests) } type EscapeTest struct { @@ -538,7 +513,7 @@ var resolveReferenceTests = []struct { func TestResolveReference(t *testing.T) { mustParse := func(url string) *URL { - u, err := ParseWithReference(url) + u, err := Parse(url) if err != nil { t.Fatalf("Expected URL to parse: %q, got error: %v", url, err) } @@ -589,7 +564,7 @@ func TestResolveReference(t *testing.T) { func TestResolveReferenceOpaque(t *testing.T) { mustParse := func(url string) *URL { - u, err := ParseWithReference(url) + u, err := Parse(url) if err != nil { t.Fatalf("Expected URL to parse: %q, got error: %v", url, err) } diff --git a/libgo/go/old/netchan/netchan_test.go b/libgo/go/old/netchan/netchan_test.go index 53f0f787765..9a7c076d59c 100644 --- a/libgo/go/old/netchan/netchan_test.go +++ b/libgo/go/old/netchan/netchan_test.go @@ -291,6 +291,10 @@ func exportLoopback(exp *Exporter, t *testing.T) { // This test checks that channel operations can proceed // even when other concurrent operations are blocked. func TestIndependentSends(t *testing.T) { + if testing.Short() { + t.Logf("disabled test during -short") + return + } exp, imp := pair(t) exportLoopback(exp, t) @@ -378,6 +382,10 @@ const flowCount = 100 // test flow control from exporter to importer. func TestExportFlowControl(t *testing.T) { + if testing.Short() { + t.Logf("disabled test during -short") + return + } exp, imp := pair(t) sendDone := make(chan bool, 1) @@ -394,6 +402,10 @@ func TestExportFlowControl(t *testing.T) { // test flow control from importer to exporter. func TestImportFlowControl(t *testing.T) { + if testing.Short() { + t.Logf("disabled test during -short") + return + } exp, imp := pair(t) ch := make(chan int) diff --git a/libgo/go/os/dir_plan9.go b/libgo/go/os/dir_plan9.go index f2dc15409db..7fa4c7f4449 100644 --- a/libgo/go/os/dir_plan9.go +++ b/libgo/go/os/dir_plan9.go @@ -10,6 +10,9 @@ import ( "syscall" ) +var errShortStat = errors.New("short stat message") +var errBadStat = errors.New("bad stat message format") + func (file *File) readdir(n int) (fi []FileInfo, err error) { // If this file has no dirinfo, create one. if file.dirinfo == nil { @@ -35,7 +38,7 @@ func (file *File) readdir(n int) (fi []FileInfo, err error) { break } if d.nbuf < syscall.STATFIXLEN { - return result, &PathError{"readdir", file.name, Eshortstat} + return result, &PathError{"readdir", file.name, errShortStat} } } @@ -43,7 +46,7 @@ func (file *File) readdir(n int) (fi []FileInfo, err error) { m, _ := gbit16(d.buf[d.bufp:]) m += 2 if m < syscall.STATFIXLEN { - return result, &PathError{"readdir", file.name, Eshortstat} + return result, &PathError{"readdir", file.name, errShortStat} } dir, e := UnmarshalDir(d.buf[d.bufp : d.bufp+int(m)]) if e != nil { @@ -138,7 +141,7 @@ func UnmarshalDir(b []byte) (d *Dir, err error) { n, b = gbit16(b) if int(n) != len(b) { - return nil, Ebadstat + return nil, errBadStat } d = new(Dir) @@ -155,7 +158,7 @@ func UnmarshalDir(b []byte) (d *Dir, err error) { d.Muid, b = gstring(b) if len(b) != 0 { - return nil, Ebadstat + return nil, errBadStat } return d, nil diff --git a/libgo/go/os/doc.go b/libgo/go/os/doc.go index ef857c0429f..6a531e0d74e 100644 --- a/libgo/go/os/doc.go +++ b/libgo/go/os/doc.go @@ -4,6 +4,8 @@ package os +import "time" + // FindProcess looks for a running process by its pid. // The Process it returns can be used to obtain information // about the underlying operating system process. @@ -11,6 +13,76 @@ func FindProcess(pid int) (p *Process, err error) { return findProcess(pid) } +// StartProcess starts a new process with the program, arguments and attributes +// specified by name, argv and attr. +// +// StartProcess is a low-level interface. The os/exec package provides +// higher-level interfaces. +// +// If there is an error, it will be of type *PathError. +func StartProcess(name string, argv []string, attr *ProcAttr) (*Process, error) { + return startProcess(name, argv, attr) +} + +// Release releases any resources associated with the Process p, +// rendering it unusable in the future. +// Release only needs to be called if Wait is not. +func (p *Process) Release() error { + return p.release() +} + +// Kill causes the Process to exit immediately. +func (p *Process) Kill() error { + return p.kill() +} + +// Wait waits for the Process to exit, and then returns a +// ProcessState describing its status and an error, if any. +// Wait releases any resources associated with the Process. +func (p *Process) Wait() (*ProcessState, error) { + return p.wait() +} + +// Signal sends a signal to the Process. +func (p *Process) Signal(sig Signal) error { + return p.signal(sig) +} + +// UserTime returns the user CPU time of the exited process and its children. +func (p *ProcessState) UserTime() time.Duration { + return p.userTime() +} + +// SystemTime returns the system CPU time of the exited process and its children. +func (p *ProcessState) SystemTime() time.Duration { + return p.systemTime() +} + +// Exited returns whether the program has exited. +func (p *ProcessState) Exited() bool { + return p.exited() +} + +// Success reports whether the program exited successfully, +// such as with exit status 0 on Unix. +func (p *ProcessState) Success() bool { + return p.success() +} + +// Sys returns system-dependent exit information about +// the process. Convert it to the appropriate underlying +// type, such as syscall.WaitStatus on Unix, to access its contents. +func (p *ProcessState) Sys() interface{} { + return p.sys() +} + +// SysUsage returns system-dependent resource usage information about +// the exited process. Convert it to the appropriate underlying +// type, such as *syscall.Rusage on Unix, to access its contents. +func (p *ProcessState) SysUsage() interface{} { + return p.sysUsage() +} + // Hostname returns the host name reported by the kernel. func Hostname() (name string, err error) { return hostname() diff --git a/libgo/go/os/env.go b/libgo/go/os/env.go index 7e3f52502e5..eb265f24138 100644 --- a/libgo/go/os/env.go +++ b/libgo/go/os/env.go @@ -6,10 +6,7 @@ package os -import ( - "errors" - "syscall" -) +import "syscall" // Expand replaces ${var} or $var in the string based on the mapping function. // Invocations of undefined variables are replaced with the empty string. @@ -29,10 +26,10 @@ func Expand(s string, mapping func(string) string) string { return string(buf) + s[i:] } -// ShellExpand replaces ${var} or $var in the string according to the values -// of the operating system's environment variables. References to undefined +// ExpandEnv replaces ${var} or $var in the string according to the values +// of the current environment variables. References to undefined // variables are replaced by the empty string. -func ShellExpand(s string) string { +func ExpandEnv(s string) string { return Expand(s, Getenv) } @@ -77,26 +74,10 @@ func getShellName(s string) (string, int) { return s[:i], i } -// ENOENV is the error indicating that an environment variable does not exist. -var ENOENV = errors.New("no such environment variable") - -// Getenverror retrieves the value of the environment variable named by the key. -// It returns the value and an error, if any. -func Getenverror(key string) (value string, err error) { - if len(key) == 0 { - return "", EINVAL - } - val, found := syscall.Getenv(key) - if !found { - return "", ENOENV - } - return val, nil -} - // Getenv retrieves the value of the environment variable named by the key. // It returns the value, which will be empty if the variable is not present. func Getenv(key string) string { - v, _ := Getenverror(key) + v, _ := syscall.Getenv(key) return v } @@ -115,7 +96,7 @@ func Clearenv() { syscall.Clearenv() } -// Environ returns an array of strings representing the environment, +// Environ returns a copy of strings representing the environment, // in the form "key=value". func Environ() []string { return syscall.Environ() diff --git a/libgo/go/os/error.go b/libgo/go/os/error.go index c3dd06feb7b..e0b83b5c22c 100644 --- a/libgo/go/os/error.go +++ b/libgo/go/os/error.go @@ -4,6 +4,18 @@ package os +import ( + "errors" +) + +// Portable analogs of some common system call errors. +var ( + ErrInvalid = errors.New("invalid argument") + ErrPermission = errors.New("permission denied") + ErrExist = errors.New("file already exists") + ErrNotExist = errors.New("file does not exist") +) + // PathError records an error and the operation and file path that caused it. type PathError struct { Op string @@ -12,3 +24,21 @@ type PathError struct { } func (e *PathError) Error() string { return e.Op + " " + e.Path + ": " + e.Err.Error() } + +// SyscallError records an error from a specific system call. +type SyscallError struct { + Syscall string + Err error +} + +func (e *SyscallError) Error() string { return e.Syscall + ": " + e.Err.Error() } + +// NewSyscallError returns, as an error, a new SyscallError +// with the given system call name and error details. +// As a convenience, if err is nil, NewSyscallError returns nil. +func NewSyscallError(syscall string, err error) error { + if err == nil { + return nil + } + return &SyscallError{syscall, err} +} diff --git a/libgo/go/os/error_plan9.go b/libgo/go/os/error_plan9.go index 3c727b2ab39..159d685e7cd 100644 --- a/libgo/go/os/error_plan9.go +++ b/libgo/go/os/error_plan9.go @@ -4,52 +4,38 @@ package os -import ( - "errors" - "syscall" -) - -// SyscallError records an error from a specific system call. -type SyscallError struct { - Syscall string - Err string +// IsExist returns whether the error is known to report that a file already exists. +func IsExist(err error) bool { + if pe, ok := err.(*PathError); ok { + err = pe.Err + } + return contains(err.Error(), " exists") } -func (e *SyscallError) Error() string { return e.Syscall + ": " + e.Err } - -// NewSyscallError returns, as an error, a new SyscallError -// with the given system call name and error details. -// As a convenience, if err is nil, NewSyscallError returns nil. -func NewSyscallError(syscall string, err error) error { - if err == nil { - return nil +// IsNotExist returns whether the error is known to report that a file does not exist. +func IsNotExist(err error) bool { + if pe, ok := err.(*PathError); ok { + err = pe.Err } - return &SyscallError{syscall, err.Error()} + return contains(err.Error(), "does not exist") } -var ( - Eshortstat = errors.New("stat buffer too small") - Ebadstat = errors.New("malformed stat buffer") - Ebadfd = errors.New("fd out of range or not open") - Ebadarg = errors.New("bad arg in system call") - Enotdir = errors.New("not a directory") - Enonexist = errors.New("file does not exist") - Eexist = errors.New("file already exists") - Eio = errors.New("i/o error") - Eperm = errors.New("permission denied") - - EINVAL = Ebadarg - ENOTDIR = Enotdir - ENOENT = Enonexist - EEXIST = Eexist - EIO = Eio - EACCES = Eperm - EPERM = Eperm - EISDIR = syscall.EISDIR +// IsPermission returns whether the error is known to report that permission is denied. +func IsPermission(err error) bool { + if pe, ok := err.(*PathError); ok { + err = pe.Err + } + return contains(err.Error(), "permission denied") +} - EBADF = errors.New("bad file descriptor") - ENAMETOOLONG = errors.New("file name too long") - ERANGE = errors.New("math result not representable") - EPIPE = errors.New("Broken Pipe") - EPLAN9 = errors.New("not supported by plan 9") -) +// contains is a local version of strings.Contains. It knows len(sep) > 1. +func contains(s, sep string) bool { + n := len(sep) + c := sep[0] + for i := 0; i+n <= len(s); i++ { + if s[i] == c && s[i:i+n] == sep { + return true + } + } + return false +} diff --git a/libgo/go/os/error_posix.go b/libgo/go/os/error_posix.go index 1a08627256a..74b75d11218 100644 --- a/libgo/go/os/error_posix.go +++ b/libgo/go/os/error_posix.go @@ -6,65 +6,31 @@ package os -import syscall "syscall" +import "syscall" -// Commonly known Unix errors. -var ( - EPERM error = syscall.EPERM - ENOENT error = syscall.ENOENT - ESRCH error = syscall.ESRCH - EINTR error = syscall.EINTR - EIO error = syscall.EIO - ENXIO error = syscall.ENXIO - E2BIG error = syscall.E2BIG - ENOEXEC error = syscall.ENOEXEC - EBADF error = syscall.EBADF - ECHILD error = syscall.ECHILD - EDEADLK error = syscall.EDEADLK - ENOMEM error = syscall.ENOMEM - EACCES error = syscall.EACCES - EFAULT error = syscall.EFAULT - EBUSY error = syscall.EBUSY - EEXIST error = syscall.EEXIST - EXDEV error = syscall.EXDEV - ENODEV error = syscall.ENODEV - ENOTDIR error = syscall.ENOTDIR - EISDIR error = syscall.EISDIR - EINVAL error = syscall.EINVAL - ENFILE error = syscall.ENFILE - EMFILE error = syscall.EMFILE - ENOTTY error = syscall.ENOTTY - EFBIG error = syscall.EFBIG - ENOSPC error = syscall.ENOSPC - ESPIPE error = syscall.ESPIPE - EROFS error = syscall.EROFS - EMLINK error = syscall.EMLINK - EPIPE error = syscall.EPIPE - EAGAIN error = syscall.EAGAIN - EDOM error = syscall.EDOM - ERANGE error = syscall.ERANGE - EADDRINUSE error = syscall.EADDRINUSE - ECONNREFUSED error = syscall.ECONNREFUSED - ENAMETOOLONG error = syscall.ENAMETOOLONG - EAFNOSUPPORT error = syscall.EAFNOSUPPORT - ETIMEDOUT error = syscall.ETIMEDOUT - ENOTCONN error = syscall.ENOTCONN -) - -// SyscallError records an error from a specific system call. -type SyscallError struct { - Syscall string - Errno error +// IsExist returns whether the error is known to report that a file already exists. +// It is satisfied by ErrExist as well as some syscall errors. +func IsExist(err error) bool { + if pe, ok := err.(*PathError); ok { + err = pe.Err + } + return err == syscall.EEXIST || err == ErrExist } -func (e *SyscallError) Error() string { return e.Syscall + ": " + e.Errno.Error() } +// IsNotExist returns whether the error is known to report that a file does not exist. +// It is satisfied by ErrNotExist as well as some syscall errors. +func IsNotExist(err error) bool { + if pe, ok := err.(*PathError); ok { + err = pe.Err + } + return err == syscall.ENOENT || err == ErrNotExist +} -// NewSyscallError returns, as an error, a new SyscallError -// with the given system call name and error details. -// As a convenience, if err is nil, NewSyscallError returns nil. -func NewSyscallError(syscall string, err error) error { - if err == nil { - return nil +// IsPermission returns whether the error is known to report that permission is denied. +// It is satisfied by ErrPermission as well as some syscall errors. +func IsPermission(err error) bool { + if pe, ok := err.(*PathError); ok { + err = pe.Err } - return &SyscallError{syscall, err} + return err == syscall.EACCES || err == syscall.EPERM || err == ErrPermission } diff --git a/libgo/go/os/exec.go b/libgo/go/os/exec.go index 6e0f168c767..531b87ca556 100644 --- a/libgo/go/os/exec.go +++ b/libgo/go/os/exec.go @@ -13,7 +13,7 @@ import ( type Process struct { Pid int handle uintptr - done bool // process has been successfuly waited on + done bool // process has been successfully waited on } func newProcess(pid int, handle uintptr) *Process { @@ -46,11 +46,22 @@ type ProcAttr struct { Sys *syscall.SysProcAttr } -// A Signal can represent any operating system signal. +// A Signal represents an operating system signal. +// The usual underlying implementation is operating system-dependent: +// on Unix it is syscall.Signal. type Signal interface { String() string + Signal() // to distinguish from other Stringers } +// The only signal values guaranteed to be present on all systems +// are Interrupt (send the process an interrupt) and +// Kill (force the process to exit). +var ( + Interrupt Signal = syscall.SIGINT + Kill Signal = syscall.SIGKILL +) + // Getpid returns the process id of the caller. func Getpid() int { return syscall.Getpid() } diff --git a/libgo/go/os/exec/exec.go b/libgo/go/os/exec/exec.go index a00fdad497f..ebe92a9fba3 100644 --- a/libgo/go/os/exec/exec.go +++ b/libgo/go/os/exec/exec.go @@ -68,7 +68,7 @@ type Cmd struct { // new process. It does not include standard input, standard output, or // standard error. If non-nil, entry i becomes file descriptor 3+i. // - // BUG: on OS X 10.6, child processes may sometimes inherit extra fds. + // BUG: on OS X 10.6, child processes may sometimes inherit unwanted fds. // http://golang.org/issue/2603 ExtraFiles []*os.File @@ -79,6 +79,10 @@ type Cmd struct { // Process is the underlying process, once started. Process *os.Process + // ProcessState contains information about an exited process, + // available after a call to Wait or Run. + ProcessState *os.ProcessState + err error // last error (from LookPath, stdin, stdout, stderr) finished bool // when Wait was called childFiles []*os.File @@ -262,11 +266,11 @@ func (c *Cmd) Start() error { // An ExitError reports an unsuccessful exit by a command. type ExitError struct { - *os.Waitmsg + *os.ProcessState } func (e *ExitError) Error() string { - return e.Waitmsg.String() + return e.ProcessState.String() } // Wait waits for the command to exit. @@ -287,7 +291,8 @@ func (c *Cmd) Wait() error { return errors.New("exec: Wait was already called") } c.finished = true - msg, err := c.Process.Wait(0) + state, err := c.Process.Wait() + c.ProcessState = state var copyError error for _ = range c.goroutine { @@ -302,8 +307,8 @@ func (c *Cmd) Wait() error { if err != nil { return err - } else if !msg.Exited() || msg.ExitStatus() != 0 { - return &ExitError{msg} + } else if !state.Success() { + return &ExitError{state} } return copyError diff --git a/libgo/go/os/exec/exec_test.go b/libgo/go/os/exec/exec_test.go index d00d12008f7..52f4bce3aea 100644 --- a/libgo/go/os/exec/exec_test.go +++ b/libgo/go/os/exec/exec_test.go @@ -17,7 +17,6 @@ import ( "runtime" "strconv" "strings" - "syscall" "testing" ) @@ -154,7 +153,7 @@ func TestExtraFiles(t *testing.T) { // Ensure that file descriptors have not already been leaked into // our environment. for fd := os.Stderr.Fd() + 1; fd <= 101; fd++ { - err := syscall.Close(fd) + err := os.NewFile(fd, "").Close() if err == nil { t.Logf("Something already leaked - closed fd %d", fd) } diff --git a/libgo/go/os/exec/lp_plan9.go b/libgo/go/os/exec/lp_plan9.go index d88cd0df959..0e229e03ee7 100644 --- a/libgo/go/os/exec/lp_plan9.go +++ b/libgo/go/os/exec/lp_plan9.go @@ -8,6 +8,7 @@ import ( "errors" "os" "strings" + "syscall" ) // ErrNotFound is the error resulting if a path search failed to find an executable file. @@ -21,7 +22,7 @@ func findExecutable(file string) error { if m := d.Mode(); !m.IsDir() && m&0111 != 0 { return nil } - return os.EPERM + return syscall.EPERM } // LookPath searches for an executable binary named file diff --git a/libgo/go/os/exec/lp_unix.go b/libgo/go/os/exec/lp_unix.go index 2d3a919dc6e..21632219972 100644 --- a/libgo/go/os/exec/lp_unix.go +++ b/libgo/go/os/exec/lp_unix.go @@ -23,7 +23,7 @@ func findExecutable(file string) error { if m := d.Mode(); !m.IsDir() && m&0111 != 0 { return nil } - return os.EPERM + return os.ErrPermission } // LookPath searches for an executable binary named file diff --git a/libgo/go/os/exec/lp_windows.go b/libgo/go/os/exec/lp_windows.go index b7efcd68b80..d8351d7e6d3 100644 --- a/libgo/go/os/exec/lp_windows.go +++ b/libgo/go/os/exec/lp_windows.go @@ -19,7 +19,7 @@ func chkStat(file string) error { return err } if d.IsDir() { - return os.EPERM + return os.ErrPermission } return nil } @@ -39,7 +39,7 @@ func findExecutable(file string, exts []string) (string, error) { return f, nil } } - return ``, os.ENOENT + return ``, os.ErrNotExist } // LookPath searches for an executable binary named file diff --git a/libgo/go/os/exec_plan9.go b/libgo/go/os/exec_plan9.go index 879d4d2a736..41cc8c26f4c 100644 --- a/libgo/go/os/exec_plan9.go +++ b/libgo/go/os/exec_plan9.go @@ -8,29 +8,20 @@ import ( "errors" "runtime" "syscall" + "time" ) -// StartProcess starts a new process with the program, arguments and attributes -// specified by name, argv and attr. -func StartProcess(name string, argv []string, attr *ProcAttr) (p *Process, err error) { +func startProcess(name string, argv []string, attr *ProcAttr) (p *Process, err error) { sysattr := &syscall.ProcAttr{ Dir: attr.Dir, Env: attr.Env, Sys: attr.Sys, } - // Create array of integer (system) fds. - intfd := make([]int, len(attr.Files)) - for i, f := range attr.Files { - if f == nil { - intfd[i] = -1 - } else { - intfd[i] = f.Fd() - } + for _, f := range attr.Files { + sysattr.Files = append(sysattr.Files, f.Fd()) } - sysattr.Files = intfd - pid, h, e := syscall.StartProcess(name, argv, sysattr) if e != nil { return nil, &PathError{"fork/exec", name, e} @@ -46,7 +37,7 @@ func (note Plan9Note) String() string { return string(note) } -func (p *Process) Signal(sig Signal) error { +func (p *Process) signal(sig Signal) error { if p.done { return errors.New("os: process already finished") } @@ -60,8 +51,7 @@ func (p *Process) Signal(sig Signal) error { return e } -// Kill causes the Process to exit immediately. -func (p *Process) Kill() error { +func (p *Process) kill() error { f, e := OpenFile("/proc/"+itoa(p.Pid)+"/ctl", O_WRONLY, 0) if e != nil { return NewSyscallError("kill", e) @@ -71,32 +61,11 @@ func (p *Process) Kill() error { return e } -// Exec replaces the current process with an execution of the -// named binary, with arguments argv and environment envv. -// If successful, Exec never returns. If it fails, it returns an error. -// ForkExec is almost always a better way to execute a program. -func Exec(name string, argv []string, envv []string) error { - e := syscall.Exec(name, argv, envv) - if e != nil { - return &PathError{"exec", name, e} - } - - return nil -} - -// Waitmsg stores the information about an exited process as reported by Wait. -type Waitmsg struct { - syscall.Waitmsg -} - -// Wait waits for the Process to exit or stop, and then returns a -// Waitmsg describing its status and an error, if any. The options -// (WNOHANG etc.) affect the behavior of the Wait call. -func (p *Process) Wait(options int) (w *Waitmsg, err error) { +func (p *Process) wait() (ps *ProcessState, err error) { var waitmsg syscall.Waitmsg if p.Pid == -1 { - return nil, EINVAL + return nil, ErrInvalid } for true { @@ -112,25 +81,14 @@ func (p *Process) Wait(options int) (w *Waitmsg, err error) { } } - return &Waitmsg{waitmsg}, nil -} - -// Wait waits for process pid to exit or stop, and then returns a -// Waitmsg describing its status and an error, if any. The options -// (WNOHANG etc.) affect the behavior of the Wait call. -// Wait is equivalent to calling FindProcess and then Wait -// and Release on the result. -func Wait(pid int, options int) (w *Waitmsg, err error) { - p, e := FindProcess(pid) - if e != nil { - return nil, e + ps = &ProcessState{ + pid: waitmsg.Pid, + status: &waitmsg, } - defer p.Release() - return p.Wait(options) + return ps, nil } -// Release releases any resources associated with the Process. -func (p *Process) Release() error { +func (p *Process) release() error { // NOOP for Plan 9. p.Pid = -1 // no need for a finalizer anymore @@ -143,9 +101,44 @@ func findProcess(pid int) (p *Process, err error) { return newProcess(pid, 0), nil } -func (w *Waitmsg) String() string { - if w == nil { +// ProcessState stores information about a process, as reported by Wait. +type ProcessState struct { + pid int // The process's id. + status *syscall.Waitmsg // System-dependent status info. +} + +// Pid returns the process id of the exited process. +func (p *ProcessState) Pid() int { + return p.pid +} + +func (p *ProcessState) exited() bool { + return p.status.Exited() +} + +func (p *ProcessState) success() bool { + return p.status.ExitStatus() == 0 +} + +func (p *ProcessState) sys() interface{} { + return p.status +} + +func (p *ProcessState) sysUsage() interface{} { + return p.status +} + +func (p *ProcessState) userTime() time.Duration { + return time.Duration(p.status.Time[0]) * time.Millisecond +} + +func (p *ProcessState) systemTime() time.Duration { + return time.Duration(p.status.Time[1]) * time.Millisecond +} + +func (p *ProcessState) String() string { + if p == nil { return "<nil>" } - return "exit status: " + w.Msg + return "exit status: " + p.status.Msg } diff --git a/libgo/go/os/exec_posix.go b/libgo/go/os/exec_posix.go index 6465bfbb653..70351cfb313 100644 --- a/libgo/go/os/exec_posix.go +++ b/libgo/go/os/exec_posix.go @@ -7,26 +7,20 @@ package os import ( - "runtime" "syscall" ) -type UnixSignal int32 - -func (sig UnixSignal) String() string { - s := runtime.Signame(int32(sig)) - if len(s) > 0 { - return s +func startProcess(name string, argv []string, attr *ProcAttr) (p *Process, err error) { + // Double-check existence of the directory we want + // to chdir into. We can make the error clearer this way. + if attr != nil && attr.Dir != "" { + if _, err := Stat(attr.Dir); err != nil { + pe := err.(*PathError) + pe.Op = "chdir" + return nil, pe + } } - return "UnixSignal" -} -// StartProcess starts a new process with the program, arguments and attributes -// specified by name, argv and attr. -// -// StartProcess is a low-level interface. The os/exec package provides -// higher-level interfaces. -func StartProcess(name string, argv []string, attr *ProcAttr) (p *Process, err error) { sysattr := &syscall.ProcAttr{ Dir: attr.Dir, Env: attr.Env, @@ -46,54 +40,36 @@ func StartProcess(name string, argv []string, attr *ProcAttr) (p *Process, err e return newProcess(pid, h), nil } -// Kill causes the Process to exit immediately. -func (p *Process) Kill() error { - return p.Signal(UnixSignal(syscall.SIGKILL)) +func (p *Process) kill() error { + return p.Signal(Kill) } -// Exec replaces the current process with an execution of the -// named binary, with arguments argv and environment envv. -// If successful, Exec never returns. If it fails, it returns an error. -// -// To run a child process, see StartProcess (for a low-level interface) -// or the os/exec package (for higher-level interfaces). -func Exec(name string, argv []string, envv []string) error { - if envv == nil { - envv = Environ() - } - e := syscall.Exec(name, argv, envv) - if e != nil { - return &PathError{"exec", name, e} - } - return nil +// ProcessState stores information about a process, as reported by Wait. +type ProcessState struct { + pid int // The process's id. + status syscall.WaitStatus // System-dependent status info. + rusage *syscall.Rusage } -// TODO(rsc): Should os implement its own syscall.WaitStatus -// wrapper with the methods, or is exposing the underlying one enough? -// -// TODO(rsc): Certainly need to have Rusage struct, -// since syscall one might have different field types across -// different OS. - -// Waitmsg stores the information about an exited process as reported by Wait. -type Waitmsg struct { - Pid int // The process's id. - syscall.WaitStatus // System-dependent status info. - Rusage *syscall.Rusage // System-dependent resource usage info. +// Pid returns the process id of the exited process. +func (p *ProcessState) Pid() int { + return p.pid } -// Wait waits for process pid to exit or stop, and then returns a -// Waitmsg describing its status and an error, if any. The options -// (WNOHANG etc.) affect the behavior of the Wait call. -// Wait is equivalent to calling FindProcess and then Wait -// and Release on the result. -func Wait(pid int, options int) (w *Waitmsg, err error) { - p, e := FindProcess(pid) - if e != nil { - return nil, e - } - defer p.Release() - return p.Wait(options) +func (p *ProcessState) exited() bool { + return p.status.Exited() +} + +func (p *ProcessState) success() bool { + return p.status.ExitStatus() == 0 +} + +func (p *ProcessState) sys() interface{} { + return p.status +} + +func (p *ProcessState) sysUsage() interface{} { + return p.rusage } // Convert i to decimal string. @@ -123,26 +99,26 @@ func itod(i int) string { return string(b[bp:]) } -func (w *Waitmsg) String() string { - if w == nil { +func (p *ProcessState) String() string { + if p == nil { return "<nil>" } - // TODO(austin) Use signal names when possible? + status := p.Sys().(syscall.WaitStatus) res := "" switch { - case w.Exited(): - res = "exit status " + itod(w.ExitStatus()) - case w.Signaled(): - res = "signal " + itod(w.Signal()) - case w.Stopped(): - res = "stop signal " + itod(w.StopSignal()) - if w.StopSignal() == syscall.SIGTRAP && w.TrapCause() != 0 { - res += " (trap " + itod(w.TrapCause()) + ")" + case status.Exited(): + res = "exit status " + itod(status.ExitStatus()) + case status.Signaled(): + res = "signal " + itod(int(status.Signal())) + case status.Stopped(): + res = "stop signal " + itod(int(status.StopSignal())) + if status.StopSignal() == syscall.SIGTRAP && status.TrapCause() != 0 { + res += " (trap " + itod(status.TrapCause()) + ")" } - case w.Continued(): + case status.Continued(): res = "continued" } - if w.CoreDump() { + if status.CoreDump() { res += " (core dumped)" } return res diff --git a/libgo/go/os/exec_unix.go b/libgo/go/os/exec_unix.go index 6c11b63c34f..ecfe5353bc1 100644 --- a/libgo/go/os/exec_unix.go +++ b/libgo/go/os/exec_unix.go @@ -10,61 +10,45 @@ import ( "errors" "runtime" "syscall" + "time" ) -// Options for Wait. -const ( - WNOHANG = syscall.WNOHANG // Don't wait if no process has exited. - WSTOPPED = syscall.WSTOPPED // If set, status of stopped subprocesses is also reported. - WUNTRACED = syscall.WUNTRACED // Usually an alias for WSTOPPED. - WRUSAGE = 1 << 20 // Record resource usage. -) - -// WRUSAGE must not be too high a bit, to avoid clashing with Linux's -// WCLONE, WALL, and WNOTHREAD flags, which sit in the top few bits of -// the options - -// Wait waits for the Process to exit or stop, and then returns a -// Waitmsg describing its status and an error, if any. The options -// (WNOHANG etc.) affect the behavior of the Wait call. -func (p *Process) Wait(options int) (w *Waitmsg, err error) { +func (p *Process) wait() (ps *ProcessState, err error) { if p.Pid == -1 { - return nil, EINVAL + return nil, syscall.EINVAL } var status syscall.WaitStatus - var rusage *syscall.Rusage - if options&WRUSAGE != 0 { - rusage = new(syscall.Rusage) - options ^= WRUSAGE - } - pid1, e := syscall.Wait4(p.Pid, &status, options, rusage) + var rusage syscall.Rusage + pid1, e := syscall.Wait4(p.Pid, &status, 0, &rusage) if e != nil { return nil, NewSyscallError("wait", e) } - // With WNOHANG pid is 0 if child has not exited. - if pid1 != 0 && options&WSTOPPED == 0 { + if pid1 != 0 { p.done = true } - w = new(Waitmsg) - w.Pid = pid1 - w.WaitStatus = status - w.Rusage = rusage - return w, nil + ps = &ProcessState{ + pid: pid1, + status: status, + rusage: &rusage, + } + return ps, nil } -// Signal sends a signal to the Process. -func (p *Process) Signal(sig Signal) error { +func (p *Process) signal(sig Signal) error { if p.done { return errors.New("os: process already finished") } - if e := syscall.Kill(p.Pid, int(sig.(UnixSignal))); e != nil { + s, ok := sig.(syscall.Signal) + if !ok { + return errors.New("os: unsupported signal type") + } + if e := syscall.Kill(p.Pid, s); e != nil { return e } return nil } -// Release releases any resources associated with the Process. -func (p *Process) Release() error { +func (p *Process) release() error { // NOOP for unix. p.Pid = -1 // no need for a finalizer anymore @@ -76,3 +60,11 @@ func findProcess(pid int) (p *Process, err error) { // NOOP for unix. return newProcess(pid, 0), nil } + +func (p *ProcessState) userTime() time.Duration { + return time.Duration(p.rusage.Utime.Nano()) * time.Nanosecond +} + +func (p *ProcessState) systemTime() time.Duration { + return time.Duration(p.rusage.Stime.Nano()) * time.Nanosecond +} diff --git a/libgo/go/os/exec_windows.go b/libgo/go/os/exec_windows.go index 9463d2c0e3f..5beca4a6509 100644 --- a/libgo/go/os/exec_windows.go +++ b/libgo/go/os/exec_windows.go @@ -8,12 +8,11 @@ import ( "errors" "runtime" "syscall" + "time" "unsafe" ) -// Wait waits for the Process to exit or stop, and then returns a -// Waitmsg describing its status and an error, if any. -func (p *Process) Wait(options int) (w *Waitmsg, err error) { +func (p *Process) wait() (ps *ProcessState, err error) { s, e := syscall.WaitForSingleObject(syscall.Handle(p.handle), syscall.INFINITE) switch s { case syscall.WAIT_OBJECT_0: @@ -28,26 +27,36 @@ func (p *Process) Wait(options int) (w *Waitmsg, err error) { if e != nil { return nil, NewSyscallError("GetExitCodeProcess", e) } + var u syscall.Rusage + e = syscall.GetProcessTimes(syscall.Handle(p.handle), &u.CreationTime, &u.ExitTime, &u.KernelTime, &u.UserTime) + if e != nil { + return nil, NewSyscallError("GetProcessTimes", e) + } p.done = true - return &Waitmsg{p.Pid, syscall.WaitStatus{Status: s, ExitCode: ec}, new(syscall.Rusage)}, nil + // NOTE(brainman): It seems that sometimes process is not dead + // when WaitForSingleObject returns. But we do not know any + // other way to wait for it. Sleeping for a while seems to do + // the trick sometimes. So we will sleep and smell the roses. + defer time.Sleep(5 * time.Millisecond) + defer p.Release() + return &ProcessState{p.Pid, syscall.WaitStatus{ExitCode: ec}, &u}, nil } -// Signal sends a signal to the Process. -func (p *Process) Signal(sig Signal) error { +func (p *Process) signal(sig Signal) error { if p.done { return errors.New("os: process already finished") } - if us, ok := sig.(UnixSignal); ok && us == syscall.SIGKILL { + if sig == Kill { e := syscall.TerminateProcess(syscall.Handle(p.handle), 1) return NewSyscallError("TerminateProcess", e) } + // TODO(rsc): Handle Interrupt too? return syscall.Errno(syscall.EWINDOWS) } -// Release releases any resources associated with the Process. -func (p *Process) Release() error { +func (p *Process) release() error { if p.handle == uintptr(syscall.InvalidHandle) { - return EINVAL + return syscall.EINVAL } e := syscall.CloseHandle(syscall.Handle(p.handle)) if e != nil { @@ -82,3 +91,16 @@ func init() { Args[i] = string(syscall.UTF16ToString((*v)[:])) } } + +func ftToDuration(ft *syscall.Filetime) time.Duration { + n := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime) // in 100-nanosecond intervals + return time.Duration(n*100) * time.Nanosecond +} + +func (p *ProcessState) userTime() time.Duration { + return ftToDuration(&p.rusage.UserTime) +} + +func (p *ProcessState) systemTime() time.Duration { + return ftToDuration(&p.rusage.KernelTime) +} diff --git a/libgo/go/os/file.go b/libgo/go/os/file.go index 3efa650c657..4acf35d6755 100644 --- a/libgo/go/os/file.go +++ b/libgo/go/os/file.go @@ -3,9 +3,37 @@ // license that can be found in the LICENSE file. // Package os provides a platform-independent interface to operating system -// functionality. The design is Unix-like. +// functionality. The design is Unix-like, although the error handling is +// Go-like; failing calls return values of type error rather than error numbers. +// Often, more information is available within the error. For example, +// if a call that takes a file name fails, such as Open or Stat, the error +// will include the failing file name when printed and will be of type +// *PathError, which may be unpacked for more information. +// // The os interface is intended to be uniform across all operating systems. // Features not generally available appear in the system-specific package syscall. +// +// Here is a simple example, opening a file and reading some of it. +// +// file, err := os.Open("file.go") // For read access. +// if err != nil { +// log.Fatal(err) +// } +// +// If the open fails, the error string will be self-explanatory, like +// +// open file.go: no such file or directory +// +// The file's data can then be read into a slice of bytes. Read and +// Write take their byte counts from the length of the argument slice. +// +// data := make([]byte, 100) +// count, err := file.Read(data) +// if err != nil { +// log.Fatal(err) +// } +// fmt.Printf("read %d bytes: %q\n", count, data[:count]) +// package os import ( @@ -19,26 +47,22 @@ func (f *File) Name() string { return f.name } // Stdin, Stdout, and Stderr are open Files pointing to the standard input, // standard output, and standard error file descriptors. var ( - Stdin = NewFile(syscall.Stdin, "/dev/stdin") - Stdout = NewFile(syscall.Stdout, "/dev/stdout") - Stderr = NewFile(syscall.Stderr, "/dev/stderr") + Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin") + Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout") + Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr") ) // Flags to Open wrapping those of the underlying system. Not all flags // may be implemented on a given system. const ( - O_RDONLY int = syscall.O_RDONLY // open the file read-only. - O_WRONLY int = syscall.O_WRONLY // open the file write-only. - O_RDWR int = syscall.O_RDWR // open the file read-write. - O_APPEND int = syscall.O_APPEND // append data to the file when writing. - O_ASYNC int = syscall.O_ASYNC // generate a signal when I/O is available. - O_CREATE int = syscall.O_CREAT // create a new file if none exists. - O_EXCL int = syscall.O_EXCL // used with O_CREATE, file must not exist - O_NOCTTY int = syscall.O_NOCTTY // do not make file the controlling tty. - O_NONBLOCK int = syscall.O_NONBLOCK // open in non-blocking mode. - O_NDELAY int = O_NONBLOCK // synonym for O_NONBLOCK - O_SYNC int = syscall.O_SYNC // open for synchronous I/O. - O_TRUNC int = syscall.O_TRUNC // if possible, truncate file when opened. + O_RDONLY int = syscall.O_RDONLY // open the file read-only. + O_WRONLY int = syscall.O_WRONLY // open the file write-only. + O_RDWR int = syscall.O_RDWR // open the file read-write. + O_APPEND int = syscall.O_APPEND // append data to the file when writing. + O_CREATE int = syscall.O_CREAT // create a new file if none exists. + O_EXCL int = syscall.O_EXCL // used with O_CREATE, file must not exist + O_SYNC int = syscall.O_SYNC // open for synchronous I/O. + O_TRUNC int = syscall.O_TRUNC // if possible, truncate file when opened. ) // Seek whence values. @@ -48,12 +72,25 @@ const ( SEEK_END int = 2 // seek relative to the end ) +// LinkError records an error during a link or symlink or rename +// system call and the paths that caused it. +type LinkError struct { + Op string + Old string + New string + Err error +} + +func (e *LinkError) Error() string { + return e.Op + " " + e.Old + " " + e.New + ": " + e.Err.Error() +} + // Read reads up to len(b) bytes from the File. // It returns the number of bytes read and an error, if any. // EOF is signaled by a zero count with err set to io.EOF. func (f *File) Read(b []byte) (n int, err error) { if f == nil { - return 0, EINVAL + return 0, ErrInvalid } n, e := f.read(b) if n < 0 { @@ -74,7 +111,7 @@ func (f *File) Read(b []byte) (n int, err error) { // At end of file, that error is io.EOF. func (f *File) ReadAt(b []byte, off int64) (n int, err error) { if f == nil { - return 0, EINVAL + return 0, ErrInvalid } for len(b) > 0 { m, e := f.pread(b, off) @@ -97,7 +134,7 @@ func (f *File) ReadAt(b []byte, off int64) (n int, err error) { // Write returns a non-nil error when n != len(b). func (f *File) Write(b []byte) (n int, err error) { if f == nil { - return 0, EINVAL + return 0, ErrInvalid } n, e := f.write(b) if n < 0 { @@ -117,7 +154,7 @@ func (f *File) Write(b []byte) (n int, err error) { // WriteAt returns a non-nil error when n != len(b). func (f *File) WriteAt(b []byte, off int64) (n int, err error) { if f == nil { - return 0, EINVAL + return 0, ErrInvalid } for len(b) > 0 { m, e := f.pwrite(b, off) @@ -151,13 +188,13 @@ func (f *File) Seek(offset int64, whence int) (ret int64, err error) { // an array of bytes. func (f *File) WriteString(s string) (ret int, err error) { if f == nil { - return 0, EINVAL + return 0, ErrInvalid } return f.Write([]byte(s)) } // Mkdir creates a new directory with the specified name and permission bits. -// It returns an error, if any. +// If there is an error, it will be of type *PathError. func Mkdir(name string, perm FileMode) error { e := syscall.Mkdir(name, syscallMode(perm)) if e != nil { @@ -167,6 +204,7 @@ func Mkdir(name string, perm FileMode) error { } // Chdir changes the current working directory to the named directory. +// If there is an error, it will be of type *PathError. func Chdir(dir string) error { if e := syscall.Chdir(dir); e != nil { return &PathError{"chdir", dir, e} @@ -176,6 +214,7 @@ func Chdir(dir string) error { // Chdir changes the current working directory to the file, // which must be a directory. +// If there is an error, it will be of type *PathError. func (f *File) Chdir() error { if e := syscall.Fchdir(f.fd); e != nil { return &PathError{"chdir", f.name, e} @@ -186,7 +225,7 @@ func (f *File) Chdir() error { // Open opens the named file for reading. If successful, methods on // the returned file can be used for reading; the associated file // descriptor has mode O_RDONLY. -// It returns the File and an error, if any. +// If there is an error, it will be of type *PathError. func Open(name string) (file *File, err error) { return OpenFile(name, O_RDONLY, 0) } @@ -195,7 +234,7 @@ func Open(name string) (file *File, err error) { // it if it already exists. If successful, methods on the returned // File can be used for I/O; the associated file descriptor has mode // O_RDWR. -// It returns the File and an error, if any. +// If there is an error, it will be of type *PathError. func Create(name string) (file *File, err error) { return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666) } diff --git a/libgo/go/os/file_plan9.go b/libgo/go/os/file_plan9.go index 7d136eb3686..cb0e9ef9289 100644 --- a/libgo/go/os/file_plan9.go +++ b/libgo/go/os/file_plan9.go @@ -5,11 +5,14 @@ package os import ( + "errors" "runtime" "syscall" "time" ) +var ErrPlan9 = errors.New("unimplemented on Plan 9") + // File represents an open file descriptor. type File struct { *file @@ -26,19 +29,20 @@ type file struct { } // Fd returns the integer Unix file descriptor referencing the open file. -func (file *File) Fd() int { - if file == nil { - return -1 +func (f *File) Fd() uintptr { + if f == nil { + return ^(uintptr(0)) } - return file.fd + return uintptr(f.fd) } // NewFile returns a new File with the given file descriptor and name. -func NewFile(fd int, name string) *File { - if fd < 0 { +func NewFile(fd uintptr, name string) *File { + fdi := int(fd) + if fdi < 0 { return nil } - f := &File{&file{fd: fd, name: name}} + f := &File{&file{fd: fdi, name: name}} runtime.SetFinalizer(f.file, (*file).close) return f } @@ -76,7 +80,7 @@ func syscallMode(i FileMode) (o uint32) { // or Create instead. It opens the named file with specified flag // (O_RDONLY etc.) and perm, (0666 etc.) if applicable. If successful, // methods on the returned File can be used for I/O. -// It returns the File and an error, if any. +// If there is an error, it will be of type *PathError. func OpenFile(name string, flag int, perm FileMode) (file *File, err error) { var ( fd int @@ -128,7 +132,7 @@ func OpenFile(name string, flag int, perm FileMode) (file *File, err error) { } } - return NewFile(fd, name), nil + return NewFile(uintptr(fd), name), nil } // Close closes the File, rendering it unusable for I/O. @@ -139,7 +143,7 @@ func (file *File) Close() error { func (file *file) close() error { if file == nil || file.fd < 0 { - return Ebadfd + return ErrInvalid } var err error syscall.ForkLock.RLock() @@ -181,6 +185,7 @@ func (f *File) Truncate(size int64) error { const chmodMask = uint32(syscall.DMAPPEND | syscall.DMEXCL | syscall.DMTMP | ModePerm) // Chmod changes the mode of the file to mode. +// If there is an error, it will be of type *PathError. func (f *File) Chmod(mode FileMode) error { var d Dir @@ -201,7 +206,7 @@ func (f *File) Chmod(mode FileMode) error { // of recently written data to disk. func (f *File) Sync() (err error) { if f == nil { - return EINVAL + return ErrInvalid } var d Dir @@ -248,6 +253,7 @@ func (f *File) seek(offset int64, whence int) (ret int64, err error) { // Truncate changes the size of the named file. // If the file is a symbolic link, it changes the size of the link's target. +// If there is an error, it will be of type *PathError. func Truncate(name string, size int64) error { var d Dir d.Null() @@ -261,6 +267,7 @@ func Truncate(name string, size int64) error { } // Remove removes the named file or directory. +// If there is an error, it will be of type *PathError. func Remove(name string) error { if e := syscall.Remove(name); e != nil { return &PathError{"remove", name, e} @@ -282,6 +289,7 @@ func Rename(oldname, newname string) error { } // Chmod changes the mode of the named file to mode. +// If there is an error, it will be of type *PathError. func Chmod(name string, mode FileMode) error { var d Dir @@ -325,34 +333,37 @@ func Pipe() (r *File, w *File, err error) { } syscall.ForkLock.RUnlock() - return NewFile(p[0], "|0"), NewFile(p[1], "|1"), nil + return NewFile(uintptr(p[0]), "|0"), NewFile(uintptr(p[1]), "|1"), nil } // not supported on Plan 9 // Link creates a hard link. +// If there is an error, it will be of type *LinkError. func Link(oldname, newname string) error { - return EPLAN9 + return &LinkError{"link", oldname, newname, ErrPlan9} } +// Symlink creates newname as a symbolic link to oldname. +// If there is an error, it will be of type *LinkError. func Symlink(oldname, newname string) error { - return EPLAN9 + return &LinkError{"symlink", oldname, newname, ErrPlan9} } func Readlink(name string) (string, error) { - return "", EPLAN9 + return "", ErrPlan9 } func Chown(name string, uid, gid int) error { - return EPLAN9 + return ErrPlan9 } func Lchown(name string, uid, gid int) error { - return EPLAN9 + return ErrPlan9 } func (f *File) Chown(uid, gid int) error { - return EPLAN9 + return ErrPlan9 } // TempDir returns the default directory to use for temporary files. diff --git a/libgo/go/os/file_posix.go b/libgo/go/os/file_posix.go index 86ac1cab2cb..073bd56a471 100644 --- a/libgo/go/os/file_posix.go +++ b/libgo/go/os/file_posix.go @@ -24,20 +24,8 @@ func epipecheck(file *File, e error) { } } -// LinkError records an error during a link or symlink or rename -// system call and the paths that caused it. -type LinkError struct { - Op string - Old string - New string - Err error -} - -func (e *LinkError) Error() string { - return e.Op + " " + e.Old + " " + e.New + ": " + e.Err.Error() -} - -// Link creates a hard link. +// Link creates newname as a hard link to the oldname file. +// If there is an error, it will be of type *LinkError. func Link(oldname, newname string) error { e := syscall.Link(oldname, newname) if e != nil { @@ -46,7 +34,8 @@ func Link(oldname, newname string) error { return nil } -// Symlink creates a symbolic link. +// Symlink creates newname as a symbolic link to oldname. +// If there is an error, it will be of type *LinkError. func Symlink(oldname, newname string) error { e := syscall.Symlink(oldname, newname) if e != nil { @@ -55,8 +44,8 @@ func Symlink(oldname, newname string) error { return nil } -// Readlink reads the contents of a symbolic link: the destination of -// the link. It returns the contents and an error, if any. +// Readlink returns the destination of the named symbolic link. +// If there is an error, it will be of type *PathError. func Readlink(name string) (string, error) { for len := 128; ; len *= 2 { b := make([]byte, len) @@ -99,6 +88,7 @@ func syscallMode(i FileMode) (o uint32) { // Chmod changes the mode of the named file to mode. // If the file is a symbolic link, it changes the mode of the link's target. +// If there is an error, it will be of type *PathError. func Chmod(name string, mode FileMode) error { if e := syscall.Chmod(name, syscallMode(mode)); e != nil { return &PathError{"chmod", name, e} @@ -107,6 +97,7 @@ func Chmod(name string, mode FileMode) error { } // Chmod changes the mode of the file to mode. +// If there is an error, it will be of type *PathError. func (f *File) Chmod(mode FileMode) error { if e := syscall.Fchmod(f.fd, syscallMode(mode)); e != nil { return &PathError{"chmod", f.name, e} @@ -116,6 +107,7 @@ func (f *File) Chmod(mode FileMode) error { // Chown changes the numeric uid and gid of the named file. // If the file is a symbolic link, it changes the uid and gid of the link's target. +// If there is an error, it will be of type *PathError. func Chown(name string, uid, gid int) error { if e := syscall.Chown(name, uid, gid); e != nil { return &PathError{"chown", name, e} @@ -125,6 +117,7 @@ func Chown(name string, uid, gid int) error { // Lchown changes the numeric uid and gid of the named file. // If the file is a symbolic link, it changes the uid and gid of the link itself. +// If there is an error, it will be of type *PathError. func Lchown(name string, uid, gid int) error { if e := syscall.Lchown(name, uid, gid); e != nil { return &PathError{"lchown", name, e} @@ -133,6 +126,7 @@ func Lchown(name string, uid, gid int) error { } // Chown changes the numeric uid and gid of the named file. +// If there is an error, it will be of type *PathError. func (f *File) Chown(uid, gid int) error { if e := syscall.Fchown(f.fd, uid, gid); e != nil { return &PathError{"chown", f.name, e} @@ -142,6 +136,7 @@ func (f *File) Chown(uid, gid int) error { // Truncate changes the size of the file. // It does not change the I/O offset. +// If there is an error, it will be of type *PathError. func (f *File) Truncate(size int64) error { if e := syscall.Ftruncate(f.fd, size); e != nil { return &PathError{"truncate", f.name, e} @@ -154,7 +149,7 @@ func (f *File) Truncate(size int64) error { // of recently written data to disk. func (f *File) Sync() (err error) { if f == nil { - return EINVAL + return syscall.EINVAL } if e := syscall.Fsync(f.fd); e != nil { return NewSyscallError("fsync", e) @@ -167,6 +162,7 @@ func (f *File) Sync() (err error) { // // The underlying filesystem may truncate or round the values to a // less precise time unit. +// If there is an error, it will be of type *PathError. func Chtimes(name string, atime time.Time, mtime time.Time) error { var utimes [2]syscall.Timeval atime_ns := atime.Unix()*1e9 + int64(atime.Nanosecond()) diff --git a/libgo/go/os/file_unix.go b/libgo/go/os/file_unix.go index 8c61a82248f..a69680cb8c9 100644 --- a/libgo/go/os/file_unix.go +++ b/libgo/go/os/file_unix.go @@ -28,19 +28,20 @@ type file struct { } // Fd returns the integer Unix file descriptor referencing the open file. -func (f *File) Fd() int { +func (f *File) Fd() uintptr { if f == nil { - return -1 + return ^(uintptr(0)) } - return f.fd + return uintptr(f.fd) } // NewFile returns a new File with the given file descriptor and name. -func NewFile(fd int, name string) *File { - if fd < 0 { +func NewFile(fd uintptr, name string) *File { + fdi := int(fd) + if fdi < 0 { return nil } - f := &File{&file{fd: fd, name: name}} + f := &File{&file{fd: fdi, name: name}} runtime.SetFinalizer(f.file, (*file).close) return f } @@ -59,7 +60,7 @@ const DevNull = "/dev/null" // or Create instead. It opens the named file with specified flag // (O_RDONLY etc.) and perm, (0666 etc.) if applicable. If successful, // methods on the returned File can be used for I/O. -// It returns the File and an error, if any. +// If there is an error, it will be of type *PathError. func OpenFile(name string, flag int, perm FileMode) (file *File, err error) { r, e := syscall.Open(name, flag|syscall.O_CLOEXEC, syscallMode(perm)) if e != nil { @@ -77,7 +78,7 @@ func OpenFile(name string, flag int, perm FileMode) (file *File, err error) { syscall.CloseOnExec(r) } - return NewFile(r, name), nil + return NewFile(uintptr(r), name), nil } // Close closes the File, rendering it unusable for I/O. @@ -88,7 +89,7 @@ func (f *File) Close() error { func (file *file) close() error { if file == nil || file.fd < 0 { - return EINVAL + return syscall.EINVAL } var err error if e := syscall.Close(file.fd); e != nil { @@ -109,7 +110,7 @@ func (file *file) close() error { } // Stat returns the FileInfo structure describing file. -// It returns the FileInfo and an error, if any. +// If there is an error, it will be of type *PathError. func (f *File) Stat() (fi FileInfo, err error) { var stat syscall.Stat_t err = syscall.Fstat(f.fd, &stat) @@ -119,11 +120,8 @@ func (f *File) Stat() (fi FileInfo, err error) { return fileInfoFromStat(&stat, f.name), nil } -// Stat returns a FileInfo describing the named file and an error, if any. -// If name names a valid symbolic link, the returned FileInfo describes -// the file pointed at by the link and has fi.FollowedSymlink set to true. -// If name names an invalid symbolic link, the returned FileInfo describes -// the link itself and has fi.FollowedSymlink set to false. +// Stat returns a FileInfo describing the named file. +// If there is an error, it will be of type *PathError. func Stat(name string) (fi FileInfo, err error) { var stat syscall.Stat_t err = syscall.Stat(name, &stat) @@ -133,9 +131,10 @@ func Stat(name string) (fi FileInfo, err error) { return fileInfoFromStat(&stat, name), nil } -// Lstat returns a FileInfo describing the named file and an -// error, if any. If the file is a symbolic link, the returned FileInfo +// Lstat returns a FileInfo describing the named file. +// If the file is a symbolic link, the returned FileInfo // describes the symbolic link. Lstat makes no attempt to follow the link. +// If there is an error, it will be of type *PathError. func Lstat(name string) (fi FileInfo, err error) { var stat syscall.Stat_t err = syscall.Lstat(name, &stat) @@ -199,6 +198,7 @@ func (f *File) seek(offset int64, whence int) (ret int64, err error) { // Truncate changes the size of the named file. // If the file is a symbolic link, it changes the size of the link's target. +// If there is an error, it will be of type *PathError. func Truncate(name string, size int64) error { if e := syscall.Truncate(name, size); e != nil { return &PathError{"truncate", name, e} @@ -207,6 +207,7 @@ func Truncate(name string, size int64) error { } // Remove removes the named file or directory. +// If there is an error, it will be of type *PathError. func Remove(name string) error { // System call interface forces us to know // whether name is a file or directory. @@ -270,7 +271,7 @@ func Pipe() (r *File, w *File, err error) { syscall.CloseOnExec(p[1]) syscall.ForkLock.RUnlock() - return NewFile(p[0], "|0"), NewFile(p[1], "|1"), nil + return NewFile(uintptr(p[0]), "|0"), NewFile(uintptr(p[1]), "|1"), nil } // TempDir returns the default directory to use for temporary files. diff --git a/libgo/go/os/getwd.go b/libgo/go/os/getwd.go index 56836434dbe..81d8fed926e 100644 --- a/libgo/go/os/getwd.go +++ b/libgo/go/os/getwd.go @@ -52,7 +52,7 @@ func Getwd() (pwd string, err error) { pwd = "" for parent := ".."; ; parent = "../" + parent { if len(parent) >= 1024 { // Sanity check - return "", ENAMETOOLONG + return "", syscall.ENAMETOOLONG } fd, err := Open(parent) if err != nil { @@ -74,7 +74,7 @@ func Getwd() (pwd string, err error) { } } fd.Close() - return "", ENOENT + return "", ErrNotExist Found: pd, err := fd.Stat() diff --git a/libgo/go/os/mkunixsignals.sh b/libgo/go/os/mkunixsignals.sh deleted file mode 100644 index 3487bc3bc3c..00000000000 --- a/libgo/go/os/mkunixsignals.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash -# Copyright 2010 The Go Authors. All rights reserved. -# Use of this source code is governed by a BSD-style -# license that can be found in the LICENSE file. - -echo '// ./mkunix.sh' "$1" -echo '// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT' -echo - -cat <<EOH -package os - -import ( - "syscall" -) - -var _ = syscall.Open // in case there are zero signals - -const ( -EOH - -sed -n 's/^const[ ]*\(SIG[A-Z0-9][A-Z0-9]*\)[ ].*/ \1 = UnixSignal(syscall.\1)/p' "$1" - -echo ")" diff --git a/libgo/go/os/os_test.go b/libgo/go/os/os_test.go index 36bb496d979..aa01669a5da 100644 --- a/libgo/go/os/os_test.go +++ b/libgo/go/os/os_test.go @@ -13,6 +13,7 @@ import ( "path/filepath" "runtime" "strings" + "syscall" "testing" "time" ) @@ -23,7 +24,6 @@ var dot = []string{ "error.go", "file.go", "os_test.go", - "time.go", "types.go", } @@ -528,7 +528,6 @@ func exec(t *testing.T, dir, cmd string, args []string, expect string) { if err != nil { t.Fatalf("StartProcess: %v", err) } - defer p.Release() w.Close() var b bytes.Buffer @@ -539,7 +538,7 @@ func exec(t *testing.T, dir, cmd string, args []string, expect string) { t.Errorf("exec %q returned %q wanted %q", strings.Join(append([]string{cmd}, args...), " "), output, expect) } - p.Wait(0) + p.Wait() } func TestStartProcess(t *testing.T) { @@ -742,19 +741,6 @@ func TestChdirAndGetwd(t *testing.T) { fd.Close() } -func TestTime(t *testing.T) { - // Just want to check that Time() is getting something. - // A common failure mode on Darwin is to get 0, 0, - // because it returns the time in registers instead of - // filling in the structure passed to the system call. - // Too bad the compiler doesn't know that - // 365.24*86400 is an integer. - sec, nsec, err := Time() - if sec < (2009-1970)*36524*864 { - t.Errorf("Time() = %d, %d, %s; not plausible", sec, nsec, err) - } -} - func TestSeek(t *testing.T) { f := newFile("TestSeek", t) defer Remove(f.Name()) @@ -781,7 +767,7 @@ func TestSeek(t *testing.T) { for i, tt := range tests { off, err := f.Seek(tt.in, tt.whence) if off != tt.out || err != nil { - if e, ok := err.(*PathError); ok && e.Err == EINVAL && tt.out > 1<<32 { + if e, ok := err.(*PathError); ok && e.Err == syscall.EINVAL && tt.out > 1<<32 { // Reiserfs rejects the big seeks. // http://code.google.com/p/go/issues/detail?id=91 break @@ -801,17 +787,17 @@ var openErrorTests = []openErrorTest{ { sfdir + "/no-such-file", O_RDONLY, - ENOENT, + syscall.ENOENT, }, { sfdir, O_WRONLY, - EISDIR, + syscall.EISDIR, }, { sfdir + "/" + sfname + "/no-such-file", O_WRONLY, - ENOTDIR, + syscall.ENOTDIR, }, } @@ -859,12 +845,11 @@ func run(t *testing.T, cmd []string) string { if err != nil { t.Fatal(err) } - defer p.Release() w.Close() var b bytes.Buffer io.Copy(&b, r) - _, err = p.Wait(0) + _, err = p.Wait() if err != nil { t.Fatalf("run hostname Wait: %v", err) } @@ -997,32 +982,66 @@ func TestAppend(t *testing.T) { } func TestStatDirWithTrailingSlash(t *testing.T) { - // Create new dir, in _test so it will get - // cleaned up by make if not by us. - path := "_test/_TestStatDirWithSlash_" - err := MkdirAll(path, 0777) + // Create new temporary directory and arrange to clean it up. + path, err := ioutil.TempDir("", "/_TestStatDirWithSlash_") if err != nil { - t.Fatalf("MkdirAll %q: %s", path, err) + t.Fatalf("TempDir: %s", err) } defer RemoveAll(path) // Stat of path should succeed. _, err = Stat(path) if err != nil { - t.Fatal("stat failed:", err) + t.Fatalf("stat %s failed: %s", path, err) } // Stat of path+"/" should succeed too. - _, err = Stat(path + "/") + path += "/" + _, err = Stat(path) if err != nil { - t.Fatal("stat failed:", err) + t.Fatalf("stat %s failed: %s", path, err) } } -func TestNilWaitmsgString(t *testing.T) { - var w *Waitmsg - s := w.String() +func TestNilProcessStateString(t *testing.T) { + var ps *ProcessState + s := ps.String() if s != "<nil>" { - t.Errorf("(*Waitmsg)(nil).String() = %q, want %q", s, "<nil>") + t.Errorf("(*ProcessState)(nil).String() = %q, want %q", s, "<nil>") + } +} + +func TestSameFile(t *testing.T) { + fa, err := Create("a") + if err != nil { + t.Fatalf("Create(a): %v", err) + } + defer Remove(fa.Name()) + fa.Close() + fb, err := Create("b") + if err != nil { + t.Fatalf("Create(b): %v", err) + } + defer Remove(fb.Name()) + fb.Close() + + ia1, err := Stat("a") + if err != nil { + t.Fatalf("Stat(a): %v", err) + } + ia2, err := Stat("a") + if err != nil { + t.Fatalf("Stat(a): %v", err) + } + if !SameFile(ia1, ia2) { + t.Errorf("files should be same") + } + + ib, err := Stat("b") + if err != nil { + t.Fatalf("Stat(b): %v", err) + } + if SameFile(ia1, ib) { + t.Errorf("files should be different") } } diff --git a/libgo/go/os/path.go b/libgo/go/os/path.go index e962f3e397b..02a77ec8051 100644 --- a/libgo/go/os/path.go +++ b/libgo/go/os/path.go @@ -4,7 +4,10 @@ package os -import "io" +import ( + "io" + "syscall" +) // MkdirAll creates a directory named path, // along with any necessary parents, and returns nil, @@ -20,7 +23,7 @@ func MkdirAll(path string, perm FileMode) error { if dir.IsDir() { return nil } - return &PathError{"mkdir", path, ENOTDIR} + return &PathError{"mkdir", path, syscall.ENOTDIR} } // Doesn't already exist; make sure parent does. @@ -70,7 +73,7 @@ func RemoveAll(path string) error { // Otherwise, is this a directory we need to recurse into? dir, serr := Lstat(path) if serr != nil { - if serr, ok := serr.(*PathError); ok && (serr.Err == ENOENT || serr.Err == ENOTDIR) { + if serr, ok := serr.(*PathError); ok && (IsNotExist(serr.Err) || serr.Err == syscall.ENOTDIR) { return nil } return serr diff --git a/libgo/go/os/path_test.go b/libgo/go/os/path_test.go index 18634ba410e..c1e3fb35436 100644 --- a/libgo/go/os/path_test.go +++ b/libgo/go/os/path_test.go @@ -8,18 +8,18 @@ import ( . "os" "path/filepath" "runtime" + "syscall" "testing" ) func TestMkdirAll(t *testing.T) { - // Create new dir, in _test so it will get - // cleaned up by make if not by us. - path := "_test/_TestMkdirAll_/dir/./dir2" + tmpDir := TempDir() + path := tmpDir + "/_TestMkdirAll_/dir/./dir2" err := MkdirAll(path, 0777) if err != nil { t.Fatalf("MkdirAll %q: %s", path, err) } - defer RemoveAll("_test/_TestMkdirAll_") + defer RemoveAll(tmpDir + "/_TestMkdirAll_") // Already exists, should succeed. err = MkdirAll(path, 0777) @@ -63,7 +63,7 @@ func TestMkdirAll(t *testing.T) { } if runtime.GOOS == "windows" { - path := `_test\_TestMkdirAll_\dir\.\dir2\` + path := tmpDir + `\_TestMkdirAll_\dir\.\dir2\` err := MkdirAll(path, 0777) if err != nil { t.Fatalf("MkdirAll %q: %s", path, err) @@ -72,8 +72,9 @@ func TestMkdirAll(t *testing.T) { } func TestRemoveAll(t *testing.T) { + tmpDir := TempDir() // Work directory. - path := "_test/_TestRemoveAll_" + path := tmpDir + "/_TestRemoveAll_" fpath := path + "/file" dpath := path + "/dir" @@ -170,19 +171,22 @@ func TestMkdirAllWithSymlink(t *testing.T) { return } - err := Mkdir("_test/dir", 0755) + tmpDir := TempDir() + dir := tmpDir + "/dir" + err := Mkdir(dir, 0755) if err != nil { - t.Fatal(`Mkdir "_test/dir":`, err) + t.Fatalf("Mkdir %s: %s", dir, err) } - defer RemoveAll("_test/dir") + defer RemoveAll(dir) - err = Symlink("dir", "_test/link") + link := tmpDir + "/link" + err = Symlink("dir", link) if err != nil { - t.Fatal(`Symlink "dir", "_test/link":`, err) + t.Fatalf("Symlink %s: %s", link, err) } - defer RemoveAll("_test/link") + defer RemoveAll(link) - path := "_test/link/foo" + path := link + "/foo" err = MkdirAll(path, 0755) if err != nil { t.Errorf("MkdirAll %q: %s", path, err) @@ -198,7 +202,7 @@ func TestMkdirAllAtSlash(t *testing.T) { if err != nil { pathErr, ok := err.(*PathError) // common for users not to be able to write to / - if ok && pathErr.Err == EACCES { + if ok && pathErr.Err == syscall.EACCES { return } t.Fatalf(`MkdirAll "/_go_os_test/dir": %v`, err) diff --git a/libgo/go/os/signal/signal.go b/libgo/go/os/signal/signal.go new file mode 100644 index 00000000000..dfdcf406173 --- /dev/null +++ b/libgo/go/os/signal/signal.go @@ -0,0 +1,72 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package signal implements access to incoming signals. +package signal + +// BUG(rsc): This package is not yet implemented on Plan 9 and Windows. + +import ( + "os" + "sync" +) + +var handlers struct { + sync.Mutex + list []handler +} + +type handler struct { + c chan<- os.Signal + sig os.Signal + all bool +} + +// Notify causes package signal to relay incoming signals to c. +// If no signals are listed, all incoming signals will be relayed to c. +// Otherwise, just the listed signals will. +// +// Package signal will not block sending to c: the caller must ensure +// that c has sufficient buffer space to keep up with the expected +// signal rate. For a channel used for notification of just one signal value, +// a buffer of size 1 is sufficient. +// +func Notify(c chan<- os.Signal, sig ...os.Signal) { + if c == nil { + panic("os/signal: Notify using nil channel") + } + + handlers.Lock() + defer handlers.Unlock() + if len(sig) == 0 { + enableSignal(nil) + handlers.list = append(handlers.list, handler{c: c, all: true}) + } else { + for _, s := range sig { + // We use nil as a special wildcard value for enableSignal, + // so filter it out of the list of arguments. This is safe because + // we will never get an incoming nil signal, so discarding the + // registration cannot affect the observed behavior. + if s != nil { + enableSignal(s) + handlers.list = append(handlers.list, handler{c: c, sig: s}) + } + } + } +} + +func process(sig os.Signal) { + handlers.Lock() + defer handlers.Unlock() + + for _, h := range handlers.list { + if h.all || h.sig == sig { + // send but do not block for it + select { + case h.c <- sig: + default: + } + } + } +} diff --git a/libgo/go/os/signal/signal_stub.go b/libgo/go/os/signal/signal_stub.go new file mode 100644 index 00000000000..fc227cf4c2d --- /dev/null +++ b/libgo/go/os/signal/signal_stub.go @@ -0,0 +1,11 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build plan9 + +package signal + +import "os" + +func enableSignal(sig os.Signal) {} diff --git a/libgo/go/os/signal/signal_test.go b/libgo/go/os/signal/signal_test.go new file mode 100644 index 00000000000..3494f8c34cb --- /dev/null +++ b/libgo/go/os/signal/signal_test.go @@ -0,0 +1,60 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin freebsd linux netbsd openbsd + +package signal + +import ( + "os" + "syscall" + "testing" + "time" +) + +const sighup = syscall.SIGHUP + +func waitSig(t *testing.T, c <-chan os.Signal, sig os.Signal) { + select { + case s := <-c: + if s != sig { + t.Fatalf("signal was %v, want %v", s, sig) + } + case <-time.After(1 * time.Second): + t.Fatalf("timeout waiting for %v", sig) + } +} + +func TestSignal(t *testing.T) { + // Ask for SIGHUP + c := make(chan os.Signal, 1) + Notify(c, sighup) + + t.Logf("sighup...") + // Send this process a SIGHUP + syscall.Kill(syscall.Getpid(), sighup) + waitSig(t, c, sighup) + + // Ask for everything we can get. + c1 := make(chan os.Signal, 1) + Notify(c1) + + t.Logf("sigwinch...") + // Send this process a SIGWINCH + syscall.Kill(syscall.Getpid(), syscall.SIGWINCH) + waitSig(t, c1, syscall.SIGWINCH) + + // Send two more SIGHUPs, to make sure that + // they get delivered on c1 and that not reading + // from c does not block everything. + t.Logf("sigwinch...") + syscall.Kill(syscall.Getpid(), syscall.SIGHUP) + waitSig(t, c1, syscall.SIGHUP) + t.Logf("sigwinch...") + syscall.Kill(syscall.Getpid(), syscall.SIGHUP) + waitSig(t, c1, syscall.SIGHUP) + + // The first SIGHUP should be waiting for us on c. + waitSig(t, c, syscall.SIGHUP) +} diff --git a/libgo/go/os/signal/signal_unix.go b/libgo/go/os/signal/signal_unix.go new file mode 100644 index 00000000000..20ee5f26aaa --- /dev/null +++ b/libgo/go/os/signal/signal_unix.go @@ -0,0 +1,38 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin freebsd linux netbsd openbsd windows + +package signal + +import ( + "os" + "syscall" +) + +// In assembly. +func signal_enable(uint32) +func signal_recv() uint32 + +func loop() { + for { + process(syscall.Signal(signal_recv())) + } +} + +func init() { + signal_enable(0) // first call - initialize + go loop() +} + +func enableSignal(sig os.Signal) { + switch sig := sig.(type) { + case nil: + signal_enable(^uint32(0)) + case syscall.Signal: + signal_enable(uint32(sig)) + default: + // Can ignore: this signal (whatever it is) will never come in. + } +} diff --git a/libgo/go/os/stat_plan9.go b/libgo/go/os/stat_plan9.go index 7c2d1bd4efc..a7990a359ec 100644 --- a/libgo/go/os/stat_plan9.go +++ b/libgo/go/os/stat_plan9.go @@ -62,7 +62,7 @@ func dirstat(arg interface{}) (d *Dir, err error) { return nil, &PathError{"stat", name, err} } if n < syscall.STATFIXLEN { - return nil, &PathError{"stat", name, Eshortstat} + return nil, &PathError{"stat", name, errShortStat} } // Pull the real size out of the stat message. @@ -79,10 +79,11 @@ func dirstat(arg interface{}) (d *Dir, err error) { return } } - return nil, &PathError{"stat", name, Ebadstat} + return nil, &PathError{"stat", name, errBadStat} } -// Stat returns a FileInfo structure describing the named file and an error, if any. +// Stat returns a FileInfo structure describing the named file. +// If there is an error, it will be of type *PathError. func Stat(name string) (FileInfo, error) { d, err := dirstat(name) if err != nil { @@ -91,9 +92,10 @@ func Stat(name string) (FileInfo, error) { return fileInfoFromStat(d), nil } -// Lstat returns the FileInfo structure describing the named file and an -// error, if any. If the file is a symbolic link (though Plan 9 does not have symbolic links), +// Lstat returns the FileInfo structure describing the named file. +// If the file is a symbolic link (though Plan 9 does not have symbolic links), // the returned FileInfo describes the symbolic link. Lstat makes no attempt to follow the link. +// If there is an error, it will be of type *PathError. func Lstat(name string) (FileInfo, error) { return Stat(name) } diff --git a/libgo/go/os/time.go b/libgo/go/os/time.go deleted file mode 100644 index eb564e57a6c..00000000000 --- a/libgo/go/os/time.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package os - -import "syscall" - -// Time returns the current time, in whole seconds and -// fractional nanoseconds, plus an error if any. The current -// time is thus 1e9*sec+nsec, in nanoseconds. The zero of -// time is the Unix epoch. -func Time() (sec int64, nsec int64, err error) { - var tv syscall.Timeval - if e := syscall.Gettimeofday(&tv); e != nil { - return 0, 0, NewSyscallError("gettimeofday", e) - } - return int64(tv.Sec), int64(tv.Usec) * 1000, err -} diff --git a/libgo/go/path/example_test.go b/libgo/go/path/example_test.go index f0ac1301408..ca18b32305e 100644 --- a/libgo/go/path/example_test.go +++ b/libgo/go/path/example_test.go @@ -11,17 +11,11 @@ import ( "path" ) -// b func ExampleBase() { fmt.Println(path.Base("/a/b")) + // Output: b } -// Clean("a/c") = "a/c" -// Clean("a//c") = "a/c" -// Clean("a/c/.") = "a/c" -// Clean("a/c/b/..") = "a/c" -// Clean("/../a/c") = "/a/c" -// Clean("/../a/b/../././/c") = "/a/c" func ExampleClean() { paths := []string{ "a/c", @@ -35,31 +29,39 @@ func ExampleClean() { for _, p := range paths { fmt.Printf("Clean(%q) = %q\n", p, path.Clean(p)) } + + // Output: + // Clean("a/c") = "a/c" + // Clean("a//c") = "a/c" + // Clean("a/c/.") = "a/c" + // Clean("a/c/b/..") = "a/c" + // Clean("/../a/c") = "/a/c" + // Clean("/../a/b/../././/c") = "/a/c" } -// /a/b func ExampleDir() { fmt.Println(path.Dir("/a/b/c")) + // Output: /a/b } -// .css func ExampleExt() { fmt.Println(path.Ext("/a/b/c/bar.css")) + // Output: .css } -// true func ExampleIsAbs() { fmt.Println(path.IsAbs("/dev/null")) + // Output: true } -// a/b/c func ExampleJoin() { fmt.Println(path.Join("a", "b", "c")) + // Output: a/b/c } -// static/ myfile.css func ExampleSplit() { fmt.Println(path.Split("static/myfile.css")) + // Output: static/ myfile.css } */ diff --git a/libgo/go/path/filepath/match.go b/libgo/go/path/filepath/match.go index c3678f541d4..38d264fb97a 100644 --- a/libgo/go/path/filepath/match.go +++ b/libgo/go/path/filepath/match.go @@ -12,6 +12,7 @@ import ( "unicode/utf8" ) +// ErrBadPattern indicates a globbing pattern was malformed. var ErrBadPattern = errors.New("syntax error in pattern") // Match returns true if name matches the shell file name pattern. @@ -33,7 +34,8 @@ var ErrBadPattern = errors.New("syntax error in pattern") // lo '-' hi matches character c for lo <= c <= hi // // Match requires pattern to match all of name, not just a substring. -// The only possible error return occurs when the pattern is malformed. +// The only possible returned error is ErrBadPattern, when pattern +// is malformed. // func Match(pattern, name string) (matched bool, err error) { Pattern: @@ -211,7 +213,6 @@ func getEsc(chunk string) (r rune, nchunk string, err error) { // if there is no matching file. The syntax of patterns is the same // as in Match. The pattern may describe hierarchical names such as // /usr/*/bin/ed (assuming the Separator is '/'). -// The only possible error return occurs when the pattern is malformed. // func Glob(pattern string) (matches []string, err error) { if !hasMeta(pattern) { @@ -253,7 +254,6 @@ func Glob(pattern string) (matches []string, err error) { // and appends them to matches. If the directory cannot be // opened, it returns the existing matches. New matches are // added in lexicographical order. -// The only possible error return occurs when the pattern is malformed. func glob(dir, pattern string, matches []string) (m []string, e error) { m = matches fi, err := os.Stat(dir) diff --git a/libgo/go/path/filepath/path.go b/libgo/go/path/filepath/path.go index 3dc52aab467..cfe46981f13 100644 --- a/libgo/go/path/filepath/path.go +++ b/libgo/go/path/filepath/path.go @@ -36,7 +36,7 @@ const ( // returns the string ".". // // See also Rob Pike, ``Lexical File Names in Plan 9 or -// Getting Dot-Dot right,'' +// Getting Dot-Dot Right,'' // http://plan9.bell-labs.com/sys/doc/lexnames.html func Clean(path string) string { vol := VolumeName(path) @@ -118,7 +118,8 @@ func Clean(path string) string { } // ToSlash returns the result of replacing each separator character -// in path with a slash ('/') character. +// in path with a slash ('/') character. Multiple separators are +// replaced by multiple slashes. func ToSlash(path string) string { if Separator == '/' { return path @@ -127,7 +128,8 @@ func ToSlash(path string) string { } // FromSlash returns the result of replacing each slash ('/') character -// in path with a separator character. +// in path with a separator character. Multiple slashes are replaced +// by multiple separators. func FromSlash(path string) string { if Separator == '/' { return path @@ -135,7 +137,9 @@ func FromSlash(path string) string { return strings.Replace(path, "/", string(Separator), -1) } -// SplitList splits a list of paths joined by the OS-specific ListSeparator. +// SplitList splits a list of paths joined by the OS-specific ListSeparator, +// usually found in PATH or GOPATH environment variables. +// Unlike strings.Split, SplitList returns an empty slice when passed an empty string. func SplitList(path string) []string { if path == "" { return []string{} @@ -158,7 +162,8 @@ func Split(path string) (dir, file string) { } // Join joins any number of path elements into a single path, adding -// a Separator if necessary. All empty strings are ignored. +// a Separator if necessary. The result is Cleaned, in particular +// all empty strings are ignored. func Join(elem ...string) string { for i, e := range elem { if e != "" { @@ -183,7 +188,8 @@ func Ext(path string) string { // EvalSymlinks returns the path name after the evaluation of any symbolic // links. -// If path is relative it will be evaluated relative to the current directory. +// If path is relative the result will be relative to the current directory, +// unless one of the components is an absolute symbolic link. func EvalSymlinks(path string) (string, error) { if runtime.GOOS == "windows" { // Symlinks are not supported under windows. @@ -443,7 +449,7 @@ func Base(path string) string { return path } -// Dir returns the all but the last element of path, typically the path's directory. +// Dir returns all but the last element of path, typically the path's directory. // Trailing path separators are removed before processing. // If the path is empty, Dir returns ".". // If the path consists entirely of separators, Dir returns a single separator. diff --git a/libgo/go/path/filepath/path_plan9.go b/libgo/go/path/filepath/path_plan9.go index 17b873f1a9b..cf028a75c52 100644 --- a/libgo/go/path/filepath/path_plan9.go +++ b/libgo/go/path/filepath/path_plan9.go @@ -17,7 +17,7 @@ func VolumeName(path string) string { return "" } -// HasPrefix tests whether the path p begins with prefix. +// HasPrefix exists for historical compatibility and should not be used. func HasPrefix(p, prefix string) bool { return strings.HasPrefix(p, prefix) } diff --git a/libgo/go/path/filepath/path_test.go b/libgo/go/path/filepath/path_test.go index fdcc637759c..93cca1e4c2b 100644 --- a/libgo/go/path/filepath/path_test.go +++ b/libgo/go/path/filepath/path_test.go @@ -356,7 +356,7 @@ func TestWalk(t *testing.T) { // Test permission errors. Only possible if we're not root // and only on some file systems (AFS, FAT). To avoid errors during - // all.bash on those file systems, skip during gotest -short. + // all.bash on those file systems, skip during go test -short. if os.Getuid() > 0 && !testing.Short() { // introduce 2 errors: chmod top-level directories to 0 os.Chmod(filepath.Join(tree.name, tree.entries[1].name), 0) @@ -558,6 +558,7 @@ var EvalSymlinksTestDirs = []EvalSymlinksTest{ {"test/dir/link3", "../../"}, {"test/link1", "../test"}, {"test/link2", "dir"}, + {"test/linkabs", "/"}, } var EvalSymlinksTests = []EvalSymlinksTest{ @@ -570,6 +571,7 @@ var EvalSymlinksTests = []EvalSymlinksTest{ {"test/link2/..", "test"}, {"test/dir/link3", "."}, {"test/link2/link3/test", "test"}, + {"test/linkabs", "/"}, } var EvalSymlinksAbsWindowsTests = []EvalSymlinksTest{ @@ -628,6 +630,9 @@ func TestEvalSymlinks(t *testing.T) { for _, d := range tests { path := simpleJoin(tmpDir, d.path) dest := simpleJoin(tmpDir, d.dest) + if filepath.IsAbs(d.dest) { + dest = d.dest + } if p, err := filepath.EvalSymlinks(path); err != nil { t.Errorf("EvalSymlinks(%q) error: %v", d.path, err) } else if filepath.Clean(p) != filepath.Clean(dest) { diff --git a/libgo/go/path/filepath/path_unix.go b/libgo/go/path/filepath/path_unix.go index c5ac71efe21..305e307272f 100644 --- a/libgo/go/path/filepath/path_unix.go +++ b/libgo/go/path/filepath/path_unix.go @@ -19,7 +19,7 @@ func VolumeName(path string) string { return "" } -// HasPrefix tests whether the path p begins with prefix. +// HasPrefix exists for historical compatibility and should not be used. func HasPrefix(p, prefix string) bool { return strings.HasPrefix(p, prefix) } diff --git a/libgo/go/path/filepath/path_windows.go b/libgo/go/path/filepath/path_windows.go index 9692fd978c5..1d1d23bfe7c 100644 --- a/libgo/go/path/filepath/path_windows.go +++ b/libgo/go/path/filepath/path_windows.go @@ -67,8 +67,7 @@ func VolumeName(path string) (v string) { return "" } -// HasPrefix tests whether the path p begins with prefix. -// It ignores case while comparing. +// HasPrefix exists for historical compatibility and should not be used. func HasPrefix(p, prefix string) bool { if strings.HasPrefix(p, prefix) { return true diff --git a/libgo/go/path/match.go b/libgo/go/path/match.go index ba7e4de321e..8154bf60251 100644 --- a/libgo/go/path/match.go +++ b/libgo/go/path/match.go @@ -10,6 +10,7 @@ import ( "unicode/utf8" ) +// ErrBadPattern indicates a globbing pattern was malformed. var ErrBadPattern = errors.New("syntax error in pattern") // Match returns true if name matches the shell file name pattern. @@ -31,7 +32,8 @@ var ErrBadPattern = errors.New("syntax error in pattern") // lo '-' hi matches character c for lo <= c <= hi // // Match requires pattern to match all of name, not just a substring. -// The only possible error return is when pattern is malformed. +// The only possible returned error is ErrBadPattern, when pattern +// is malformed. // func Match(pattern, name string) (matched bool, err error) { Pattern: diff --git a/libgo/go/path/path.go b/libgo/go/path/path.go index 20d89c9ff0c..13abed0b09d 100644 --- a/libgo/go/path/path.go +++ b/libgo/go/path/path.go @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. // Package path implements utility routines for manipulating slash-separated -// filename paths. +// paths. package path import ( @@ -25,7 +25,7 @@ import ( // returns the string ".". // // See also Rob Pike, ``Lexical File Names in Plan 9 or -// Getting Dot-Dot right,'' +// Getting Dot-Dot Right,'' // http://plan9.bell-labs.com/sys/doc/lexnames.html func Clean(path string) string { if path == "" { @@ -100,17 +100,19 @@ func Clean(path string) string { return string(buf[0:w]) } -// Split splits path immediately following the final path separator, +// Split splits path immediately following the final slash. // separating it into a directory and file name component. -// If there is no separator in path, Split returns an empty dir and +// If there is no slash path, Split returns an empty dir and // file set to path. +// The returned values have the property that path = dir+file. func Split(path string) (dir, file string) { i := strings.LastIndex(path, "/") return path[:i+1], path[i+1:] } // Join joins any number of path elements into a single path, adding a -// separating slash if necessary. All empty strings are ignored. +// separating slash if necessary. The result is Cleaned; in particular, +// all empty strings are ignored. func Join(elem ...string) string { for i, e := range elem { if e != "" { @@ -161,11 +163,12 @@ func IsAbs(path string) bool { return len(path) > 0 && path[0] == '/' } -// Dir returns the all but the last element of path, typically the path's directory. -// Trailing path separators are removed before processing. +// Dir returns all but the last element of path, typically the path's directory. +// The path is Cleaned and trailing slashes are removed before processing. // If the path is empty, Dir returns ".". -// If the path consists entirely of separators, Dir returns a single separator. -// The returned path does not end in a separator unless it is the root directory. +// If the path consists entirely of slashes followed by non-slash bytes, Dir +// returns a single slash. In any other case, the returned path does not end in a +// slash. func Dir(path string) string { dir, _ := Split(path) dir = Clean(dir) diff --git a/libgo/go/reflect/all_test.go b/libgo/go/reflect/all_test.go index 557fb8e843e..56744a514bc 100644 --- a/libgo/go/reflect/all_test.go +++ b/libgo/go/reflect/all_test.go @@ -629,6 +629,13 @@ type DeepEqualTest struct { eq bool } +// Simple functions for DeepEqual tests. +var ( + fn1 func() // nil. + fn2 func() // nil. + fn3 = func() { fn1() } // Not nil. +) + var deepEqualTests = []DeepEqualTest{ // Equalities {1, 1, true}, @@ -641,6 +648,7 @@ var deepEqualTests = []DeepEqualTest{ {Basic{1, 0.5}, Basic{1, 0.5}, true}, {error(nil), error(nil), true}, {map[int]string{1: "one", 2: "two"}, map[int]string{2: "two", 1: "one"}, true}, + {fn1, fn2, true}, // Inequalities {1, 2, false}, @@ -658,6 +666,8 @@ var deepEqualTests = []DeepEqualTest{ {map[int]string{2: "two", 1: "one"}, map[int]string{1: "one"}, false}, {nil, 1, false}, {1, nil, false}, + {fn1, fn3, false}, + {fn3, fn3, false}, // Nil vs empty: not the same. {[]int{}, []int(nil), false}, @@ -1737,3 +1747,15 @@ func isValid(v Value) { panic("zero Value") } } + +func TestAlias(t *testing.T) { + x := string("hello") + v := ValueOf(&x).Elem() + oldvalue := v.Interface() + v.SetString("world") + newvalue := v.Interface() + + if oldvalue != "hello" || newvalue != "world" { + t.Errorf("aliasing: old=%q new=%q, want hello, world", oldvalue, newvalue) + } +} diff --git a/libgo/go/reflect/deepequal.go b/libgo/go/reflect/deepequal.go index df5ec0a6099..c12e90f36cc 100644 --- a/libgo/go/reflect/deepequal.go +++ b/libgo/go/reflect/deepequal.go @@ -108,6 +108,12 @@ func deepValueEqual(v1, v2 Value, visited map[uintptr]*visit, depth int) (b bool } } return true + case Func: + if v1.IsNil() && v2.IsNil() { + return true + } + // Can't do better than this: + return false default: // Normal equality suffices return valueInterface(v1, false) == valueInterface(v2, false) @@ -117,8 +123,8 @@ func deepValueEqual(v1, v2 Value, visited map[uintptr]*visit, depth int) (b bool } // DeepEqual tests for deep equality. It uses normal == equality where possible -// but will scan members of arrays, slices, and fields of structs. It correctly -// handles recursive types. +// but will scan members of arrays, slices, maps, and fields of structs. It correctly +// handles recursive types. Functions are equal only if they are both nil. func DeepEqual(a1, a2 interface{}) bool { if a1 == nil || a2 == nil { return a1 == a2 diff --git a/libgo/go/reflect/type.go b/libgo/go/reflect/type.go index 1bb0a26b7a6..b1dd0a1fecd 100644 --- a/libgo/go/reflect/type.go +++ b/libgo/go/reflect/type.go @@ -12,11 +12,10 @@ // for that type. // // See "The Laws of Reflection" for an introduction to reflection in Go: -// http://blog.golang.org/2011/09/laws-of-reflection.html +// http://golang.org/doc/articles/laws_of_reflection.html package reflect import ( - "runtime" "strconv" "sync" "unsafe" @@ -181,7 +180,7 @@ type Type interface { // It panics if i is not in the range [0, NumOut()). Out(i int) Type - runtimeType() *runtime.Type + runtimeType() *runtimeType common() *commonType uncommon() *uncommonType } @@ -221,127 +220,127 @@ const ( ) /* - * Copy of data structures from ../runtime/type.go. - * For comments, see the ones in that file. - * - * These data structures are known to the compiler and the runtime. - * - * Putting these types in runtime instead of reflect means that - * reflect doesn't need to be autolinked into every binary, which - * simplifies bootstrapping and package dependencies. - * Unfortunately, it also means that reflect needs its own - * copy in order to access the private fields. + * These data structures are known to the compiler (../../cmd/gc/reflect.c). + * A few are known to ../runtime/type.go to convey to debuggers. */ +type runtimeType commonType + // commonType is the common implementation of most values. // It is embedded in other, public struct types, but always // with a unique tag like `reflect:"array"` or `reflect:"ptr"` // so that code cannot convert from, say, *arrayType to *ptrType. - type commonType struct { - kind uint8 - align int8 - fieldAlign uint8 - size uintptr - hash uint32 - hashfn func(unsafe.Pointer, uintptr) - equalfn func(unsafe.Pointer, unsafe.Pointer, uintptr) - string *string - *uncommonType - ptrToThis *runtime.Type + kind uint8 // enumeration for C + align int8 // alignment of variable with this type + fieldAlign uint8 // alignment of struct field with this type + size uintptr // size in bytes + hash uint32 // hash of type; avoids computation in hash tables + + hashfn func(unsafe.Pointer, uintptr) // hash function + equalfn func(unsafe.Pointer, unsafe.Pointer, uintptr) // equality function + + string *string // string form; unnecessary but undeniably useful + *uncommonType // (relatively) uncommon fields + ptrToThis *runtimeType // pointer to this type, if used in binary or has methods } +// Method on non-interface type type method struct { - name *string - pkgPath *string - mtyp *runtime.Type - typ *runtime.Type - tfn unsafe.Pointer + name *string // name of method + pkgPath *string // nil for exported Names; otherwise import path + mtyp *runtimeType // method type (without receiver) + typ *runtimeType // .(*FuncType) underneath (with receiver) + tfn unsafe.Pointer // fn used for normal method call } +// uncommonType is present only for types with names or methods +// (if T is a named type, the uncommonTypes for T and *T have methods). +// Using a pointer to this struct reduces the overall size required +// to describe an unnamed type with no methods. type uncommonType struct { - name *string - pkgPath *string - methods []method + name *string // name of type + pkgPath *string // import path; nil for built-in types like int, string + methods []method // methods associated with type } // ChanDir represents a channel type's direction. type ChanDir int const ( - RecvDir ChanDir = 1 << iota - SendDir - BothDir = RecvDir | SendDir + RecvDir ChanDir = 1 << iota // <-chan + SendDir // chan<- + BothDir = RecvDir | SendDir // chan ) // arrayType represents a fixed array type. type arrayType struct { commonType `reflect:"array"` - elem *runtime.Type - slice *runtime.Type + elem *runtimeType // array element type + slice *runtimeType // slice type len uintptr } // chanType represents a channel type. type chanType struct { commonType `reflect:"chan"` - elem *runtime.Type - dir uintptr + elem *runtimeType // channel element type + dir uintptr // channel direction (ChanDir) } // funcType represents a function type. type funcType struct { commonType `reflect:"func"` - dotdotdot bool - in []*runtime.Type - out []*runtime.Type + dotdotdot bool // last input parameter is ... + in []*runtimeType // input parameter types + out []*runtimeType // output parameter types } // imethod represents a method on an interface type type imethod struct { - name *string - pkgPath *string - typ *runtime.Type + name *string // name of method + pkgPath *string // nil for exported Names; otherwise import path + typ *runtimeType // .(*FuncType) underneath } // interfaceType represents an interface type. type interfaceType struct { commonType `reflect:"interface"` - methods []imethod + methods []imethod // sorted by hash } // mapType represents a map type. type mapType struct { commonType `reflect:"map"` - key *runtime.Type - elem *runtime.Type + key *runtimeType // map key type + elem *runtimeType // map element (value) type } // ptrType represents a pointer type. type ptrType struct { commonType `reflect:"ptr"` - elem *runtime.Type + elem *runtimeType // pointer element (pointed at) type } // sliceType represents a slice type. type sliceType struct { commonType `reflect:"slice"` - elem *runtime.Type + elem *runtimeType // slice element type } // Struct field type structField struct { - name *string - pkgPath *string - typ *runtime.Type - tag *string - offset uintptr + name *string // nil for embedded fields + pkgPath *string // nil for exported Names; otherwise import path + typ *runtimeType // type of field + tag *string // nil if no tag + offset uintptr // byte offset of field within struct } // structType represents a struct type. type structType struct { commonType `reflect:"struct"` - fields []structField + fields []structField // sorted by offset } /* @@ -559,7 +558,7 @@ func (t *commonType) Elem() Type { tt := (*sliceType)(unsafe.Pointer(t)) return toType(tt.elem) } - panic("reflect; Elem of invalid type") + panic("reflect: Elem of invalid type") } func (t *commonType) Field(i int) StructField { @@ -628,7 +627,7 @@ func (t *commonType) NumField() int { func (t *commonType) NumIn() int { if t.Kind() != Func { - panic("reflect; NumIn of non-func type") + panic("reflect: NumIn of non-func type") } tt := (*funcType)(unsafe.Pointer(t)) return len(tt.in) @@ -636,7 +635,7 @@ func (t *commonType) NumIn() int { func (t *commonType) NumOut() int { if t.Kind() != Func { - panic("reflect; NumOut of non-func type") + panic("reflect: NumOut of non-func type") } tt := (*funcType)(unsafe.Pointer(t)) return len(tt.out) @@ -909,12 +908,11 @@ func (t *structType) FieldByNameFunc(match func(string) bool) (f StructField, pr } // Convert runtime type to reflect type. -func toCommonType(p *runtime.Type) *commonType { +func toCommonType(p *runtimeType) *commonType { if p == nil { return nil } - x := unsafe.Pointer(p) - return (*commonType)(x) + return (*commonType)(unsafe.Pointer(p)) } // Canonicalize a Type. @@ -949,11 +947,11 @@ func canonicalize(t Type) Type { return t } -func toType(p *runtime.Type) Type { +func toType(p *runtimeType) Type { if p == nil { return nil } - return toCommonType(p).toType() + return (*commonType)(unsafe.Pointer(p)) } // TypeOf returns the reflection Type of the value in the interface{}. @@ -968,8 +966,8 @@ var ptrMap struct { m map[*commonType]*ptrType } -func (t *commonType) runtimeType() *runtime.Type { - return (*runtime.Type)(unsafe.Pointer(t)) +func (t *commonType) runtimeType() *runtimeType { + return (*runtimeType)(unsafe.Pointer(t)) } // PtrTo returns the pointer type with element t. @@ -1018,13 +1016,10 @@ func (ct *commonType) ptrTo() *commonType { return r.(*commonType) } - rp := new(runtime.PtrType) - // initialize p using *byte's ptrType as a prototype. - // have to do assignment as ptrType, not runtime.PtrType, - // in order to write to unexported fields. - p = (*ptrType)(unsafe.Pointer(rp)) - bp := (*ptrType)(unsafe.Pointer(unsafe.Typeof((*byte)(nil)).(*runtime.PtrType))) + p = new(ptrType) + var ibyte interface{} = (*byte)(nil) + bp := (*ptrType)(unsafe.Pointer(*(**runtimeType)(unsafe.Pointer(&ibyte)))) *p = *bp p.string = &s @@ -1040,7 +1035,7 @@ func (ct *commonType) ptrTo() *commonType { p.uncommonType = nil p.ptrToThis = nil - p.elem = (*runtime.Type)(unsafe.Pointer(ct)) + p.elem = (*runtimeType)(unsafe.Pointer(ct)) p = canonicalize(p).(*ptrType) diff --git a/libgo/go/reflect/value.go b/libgo/go/reflect/value.go index a1bc3342620..b490e99f409 100644 --- a/libgo/go/reflect/value.go +++ b/libgo/go/reflect/value.go @@ -207,7 +207,7 @@ func storeIword(p unsafe.Pointer, w iword, n uintptr) { // emptyInterface is the header for an interface{} value. type emptyInterface struct { - typ *runtime.Type + typ *runtimeType word iword } @@ -215,7 +215,7 @@ type emptyInterface struct { type nonEmptyInterface struct { // see ../runtime/iface.c:/Itab itab *struct { - typ *runtime.Type // dynamic concrete type + typ *runtimeType // dynamic concrete type fun [100000]unsafe.Pointer // method table } word iword @@ -692,7 +692,7 @@ func (v Value) FieldByNameFunc(match func(string) bool) Value { return Value{} } -// Float returns v's underlying value, as an float64. +// Float returns v's underlying value, as a float64. // It panics if v's Kind is not Float32 or Float64 func (v Value) Float() float64 { k := v.kind() @@ -792,11 +792,15 @@ func (v Value) CanInterface() bool { return v.flag&(flagMethod|flagRO) == 0 } -// Interface returns v's value as an interface{}. +// Interface returns v's current value as an interface{}. +// It is equivalent to: +// var i interface{} = (v's underlying value) // If v is a method obtained by invoking Value.Method // (as opposed to Type.Method), Interface cannot return an // interface value, so it panics. -func (v Value) Interface() interface{} { +// It also panics if the Value was obtained by accessing +// unexported struct fields. +func (v Value) Interface() (i interface{}) { return valueInterface(v, true) } @@ -832,6 +836,16 @@ func valueInterface(v Value, safe bool) interface{} { var eface emptyInterface eface.typ = v.typ.runtimeType() eface.word = v.iword() + + if v.flag&flagIndir != 0 && v.typ.size > ptrSize { + // eface.word is a pointer to the actual data, + // which might be changed. We need to return + // a pointer to unchanging data, so make a copy. + ptr := unsafe_New(v.typ) + memmove(ptr, unsafe.Pointer(eface.word), v.typ.size) + eface.word = iword(ptr) + } + return *(*interface{})(unsafe.Pointer(&eface)) } @@ -1244,7 +1258,8 @@ func (v Value) SetInt(x int64) { } // SetLen sets v's length to n. -// It panics if v's Kind is not Slice. +// It panics if v's Kind is not Slice or if n is negative or +// greater than the capacity of the slice. func (v Value) SetLen(n int) { v.mustBeAssignable() v.mustBe(Slice) @@ -1595,6 +1610,10 @@ func Copy(dst, src Value) int { * constructors */ +// implemented in package runtime +func unsafe_New(Type) unsafe.Pointer +func unsafe_NewArray(Type, int) unsafe.Pointer + // MakeSlice creates a new zero-initialized slice value // for the specified slice type, length, and capacity. func MakeSlice(typ Type, len, cap int) Value { @@ -1607,7 +1626,7 @@ func MakeSlice(typ Type, len, cap int) Value { // Reinterpret as *SliceHeader to edit. s := (*SliceHeader)(unsafe.Pointer(&x)) - s.Data = uintptr(unsafe.NewArray(typ.Elem(), cap)) + s.Data = uintptr(unsafe_NewArray(typ.Elem(), cap)) s.Len = len s.Cap = cap @@ -1639,7 +1658,7 @@ func MakeMap(typ Type) Value { } // Indirect returns the value that v points to. -// If v is a nil pointer, Indirect returns a nil Value. +// If v is a nil pointer, Indirect returns a zero Value. // If v is not a pointer, Indirect returns v. func Indirect(v Value) Value { if v.Kind() != Ptr { @@ -1686,7 +1705,7 @@ func Zero(typ Type) Value { if t.Kind() == Ptr || t.Kind() == UnsafePointer { return Value{t, nil, fl} } - return Value{t, unsafe.New(typ), fl | flagIndir} + return Value{t, unsafe_New(typ), fl | flagIndir} } // New returns a Value representing a pointer to a new zero value @@ -1695,11 +1714,18 @@ func New(typ Type) Value { if typ == nil { panic("reflect: New(nil)") } - ptr := unsafe.New(typ) + ptr := unsafe_New(typ) fl := flag(Ptr) << flagKindShift return Value{typ.common().ptrTo(), ptr, fl} } +// NewAt returns a Value representing a pointer to a value of the +// specified type, using p as that pointer. +func NewAt(typ Type, p unsafe.Pointer) Value { + fl := flag(Ptr) << flagKindShift + return Value{typ.common().ptrTo(), p, fl} +} + // assignTo returns a value v that can be assigned directly to typ. // It panics if v is not assignable to typ. // For a conversion to an interface type, target is a suggested scratch space to use. @@ -1738,20 +1764,20 @@ func (v Value) assignTo(context string, dst *commonType, target *interface{}) Va func chancap(ch iword) int32 func chanclose(ch iword) func chanlen(ch iword) int32 -func chanrecv(t *runtime.Type, ch iword, nb bool) (val iword, selected, received bool) -func chansend(t *runtime.Type, ch iword, val iword, nb bool) bool - -func makechan(typ *runtime.Type, size uint32) (ch iword) -func makemap(t *runtime.Type) (m iword) -func mapaccess(t *runtime.Type, m iword, key iword) (val iword, ok bool) -func mapassign(t *runtime.Type, m iword, key, val iword, ok bool) -func mapiterinit(t *runtime.Type, m iword) *byte +func chanrecv(t *runtimeType, ch iword, nb bool) (val iword, selected, received bool) +func chansend(t *runtimeType, ch iword, val iword, nb bool) bool + +func makechan(typ *runtimeType, size uint32) (ch iword) +func makemap(t *runtimeType) (m iword) +func mapaccess(t *runtimeType, m iword, key iword) (val iword, ok bool) +func mapassign(t *runtimeType, m iword, key, val iword, ok bool) +func mapiterinit(t *runtimeType, m iword) *byte func mapiterkey(it *byte) (key iword, ok bool) func mapiternext(it *byte) func maplen(m iword) int32 func call(typ *commonType, fnaddr unsafe.Pointer, isInterface bool, isMethod bool, params *unsafe.Pointer, results *unsafe.Pointer) -func ifaceE2I(t *runtime.Type, src interface{}, dst unsafe.Pointer) +func ifaceE2I(t *runtimeType, src interface{}, dst unsafe.Pointer) // Dummy annotation marking that the value x escapes, // for use in cases where the reflect code is so clever that diff --git a/libgo/go/regexp/all_test.go b/libgo/go/regexp/all_test.go index 107dfe37cc7..f7b41a67416 100644 --- a/libgo/go/regexp/all_test.go +++ b/libgo/go/regexp/all_test.go @@ -176,6 +176,45 @@ var replaceTests = []ReplaceTest{ {"[a-c]*", "x", "def", "xdxexfx"}, {"[a-c]+", "x", "abcbcdcdedef", "xdxdedef"}, {"[a-c]*", "x", "abcbcdcdedef", "xdxdxexdxexfx"}, + + // Substitutions + {"a+", "($0)", "banana", "b(a)n(a)n(a)"}, + {"a+", "(${0})", "banana", "b(a)n(a)n(a)"}, + {"a+", "(${0})$0", "banana", "b(a)an(a)an(a)a"}, + {"a+", "(${0})$0", "banana", "b(a)an(a)an(a)a"}, + {"hello, (.+)", "goodbye, ${1}", "hello, world", "goodbye, world"}, + {"hello, (.+)", "goodbye, $1x", "hello, world", "goodbye, "}, + {"hello, (.+)", "goodbye, ${1}x", "hello, world", "goodbye, worldx"}, + {"hello, (.+)", "<$0><$1><$2><$3>", "hello, world", "<hello, world><world><><>"}, + {"hello, (?P<noun>.+)", "goodbye, $noun!", "hello, world", "goodbye, world!"}, + {"hello, (?P<noun>.+)", "goodbye, ${noun}", "hello, world", "goodbye, world"}, + {"(?P<x>hi)|(?P<x>bye)", "$x$x$x", "hi", "hihihi"}, + {"(?P<x>hi)|(?P<x>bye)", "$x$x$x", "bye", "byebyebye"}, + {"(?P<x>hi)|(?P<x>bye)", "$xyz", "hi", ""}, + {"(?P<x>hi)|(?P<x>bye)", "${x}yz", "hi", "hiyz"}, + {"(?P<x>hi)|(?P<x>bye)", "hello $$x", "hi", "hello $x"}, + {"a+", "${oops", "aaa", "${oops"}, + {"a+", "$$", "aaa", "$"}, + {"a+", "$", "aaa", "$"}, +} + +var replaceLiteralTests = []ReplaceTest{ + // Substitutions + {"a+", "($0)", "banana", "b($0)n($0)n($0)"}, + {"a+", "(${0})", "banana", "b(${0})n(${0})n(${0})"}, + {"a+", "(${0})$0", "banana", "b(${0})$0n(${0})$0n(${0})$0"}, + {"a+", "(${0})$0", "banana", "b(${0})$0n(${0})$0n(${0})$0"}, + {"hello, (.+)", "goodbye, ${1}", "hello, world", "goodbye, ${1}"}, + {"hello, (?P<noun>.+)", "goodbye, $noun!", "hello, world", "goodbye, $noun!"}, + {"hello, (?P<noun>.+)", "goodbye, ${noun}", "hello, world", "goodbye, ${noun}"}, + {"(?P<x>hi)|(?P<x>bye)", "$x$x$x", "hi", "$x$x$x"}, + {"(?P<x>hi)|(?P<x>bye)", "$x$x$x", "bye", "$x$x$x"}, + {"(?P<x>hi)|(?P<x>bye)", "$xyz", "hi", "$xyz"}, + {"(?P<x>hi)|(?P<x>bye)", "${x}yz", "hi", "${x}yz"}, + {"(?P<x>hi)|(?P<x>bye)", "hello $$x", "hi", "hello $$x"}, + {"a+", "${oops", "aaa", "${oops"}, + {"a+", "$$", "aaa", "$$"}, + {"a+", "$", "aaa", "$"}, } type ReplaceFuncTest struct { @@ -199,13 +238,58 @@ func TestReplaceAll(t *testing.T) { } actual := re.ReplaceAllString(tc.input, tc.replacement) if actual != tc.output { - t.Errorf("%q.Replace(%q,%q) = %q; want %q", + t.Errorf("%q.ReplaceAllString(%q,%q) = %q; want %q", tc.pattern, tc.input, tc.replacement, actual, tc.output) } // now try bytes actual = string(re.ReplaceAll([]byte(tc.input), []byte(tc.replacement))) if actual != tc.output { - t.Errorf("%q.Replace(%q,%q) = %q; want %q", + t.Errorf("%q.ReplaceAll(%q,%q) = %q; want %q", + tc.pattern, tc.input, tc.replacement, actual, tc.output) + } + } +} + +func TestReplaceAllLiteral(t *testing.T) { + // Run ReplaceAll tests that do not have $ expansions. + for _, tc := range replaceTests { + if strings.Contains(tc.replacement, "$") { + continue + } + re, err := Compile(tc.pattern) + if err != nil { + t.Errorf("Unexpected error compiling %q: %v", tc.pattern, err) + continue + } + actual := re.ReplaceAllLiteralString(tc.input, tc.replacement) + if actual != tc.output { + t.Errorf("%q.ReplaceAllLiteralString(%q,%q) = %q; want %q", + tc.pattern, tc.input, tc.replacement, actual, tc.output) + } + // now try bytes + actual = string(re.ReplaceAllLiteral([]byte(tc.input), []byte(tc.replacement))) + if actual != tc.output { + t.Errorf("%q.ReplaceAllLiteral(%q,%q) = %q; want %q", + tc.pattern, tc.input, tc.replacement, actual, tc.output) + } + } + + // Run literal-specific tests. + for _, tc := range replaceLiteralTests { + re, err := Compile(tc.pattern) + if err != nil { + t.Errorf("Unexpected error compiling %q: %v", tc.pattern, err) + continue + } + actual := re.ReplaceAllLiteralString(tc.input, tc.replacement) + if actual != tc.output { + t.Errorf("%q.ReplaceAllLiteralString(%q,%q) = %q; want %q", + tc.pattern, tc.input, tc.replacement, actual, tc.output) + } + // now try bytes + actual = string(re.ReplaceAllLiteral([]byte(tc.input), []byte(tc.replacement))) + if actual != tc.output { + t.Errorf("%q.ReplaceAllLiteral(%q,%q) = %q; want %q", tc.pattern, tc.input, tc.replacement, actual, tc.output) } } diff --git a/libgo/go/regexp/regexp.go b/libgo/go/regexp/regexp.go index 7aebd3728a3..54c53776cf7 100644 --- a/libgo/go/regexp/regexp.go +++ b/libgo/go/regexp/regexp.go @@ -61,6 +61,7 @@ import ( "strconv" "strings" "sync" + "unicode" "unicode/utf8" ) @@ -416,41 +417,79 @@ func Match(pattern string, b []byte) (matched bool, error error) { return re.Match(b), nil } -// ReplaceAllString returns a copy of src in which all matches for the Regexp -// have been replaced by repl. No support is provided for expressions -// (e.g. \1 or $1) in the replacement string. +// ReplaceAllString returns a copy of src, replacing matches of the Regexp +// with the replacement string repl. Inside repl, $ signs are interpreted as +// in Expand, so for instance $1 represents the text of the first submatch. func (re *Regexp) ReplaceAllString(src, repl string) string { - return re.ReplaceAllStringFunc(src, func(string) string { return repl }) + n := 2 + if strings.Index(repl, "$") >= 0 { + n = 2 * (re.numSubexp + 1) + } + b := re.replaceAll(nil, src, n, func(dst []byte, match []int) []byte { + return re.expand(dst, repl, nil, src, match) + }) + return string(b) } -// ReplaceAllStringFunc returns a copy of src in which all matches for the -// Regexp have been replaced by the return value of of function repl (whose -// first argument is the matched string). No support is provided for -// expressions (e.g. \1 or $1) in the replacement string. +// ReplaceAllStringLiteral returns a copy of src, replacing matches of the Regexp +// with the replacement string repl. The replacement repl is substituted directly, +// without using Expand. +func (re *Regexp) ReplaceAllLiteralString(src, repl string) string { + return string(re.replaceAll(nil, src, 2, func(dst []byte, match []int) []byte { + return append(dst, repl...) + })) +} + +// ReplaceAllStringFunc returns a copy of src in which all matches of the +// Regexp have been replaced by the return value of of function repl applied +// to the matched substring. The replacement returned by repl is substituted +// directly, without using Expand. func (re *Regexp) ReplaceAllStringFunc(src string, repl func(string) string) string { + b := re.replaceAll(nil, src, 2, func(dst []byte, match []int) []byte { + return append(dst, repl(src[match[0]:match[1]])...) + }) + return string(b) +} + +func (re *Regexp) replaceAll(bsrc []byte, src string, nmatch int, repl func(dst []byte, m []int) []byte) []byte { lastMatchEnd := 0 // end position of the most recent match searchPos := 0 // position where we next look for a match - buf := new(bytes.Buffer) - for searchPos <= len(src) { - a := re.doExecute(nil, nil, src, searchPos, 2) + var buf []byte + var endPos int + if bsrc != nil { + endPos = len(bsrc) + } else { + endPos = len(src) + } + for searchPos <= endPos { + a := re.doExecute(nil, bsrc, src, searchPos, nmatch) if len(a) == 0 { break // no more matches } // Copy the unmatched characters before this match. - io.WriteString(buf, src[lastMatchEnd:a[0]]) + if bsrc != nil { + buf = append(buf, bsrc[lastMatchEnd:a[0]]...) + } else { + buf = append(buf, src[lastMatchEnd:a[0]]...) + } // Now insert a copy of the replacement string, but not for a // match of the empty string immediately after another match. // (Otherwise, we get double replacement for patterns that // match both empty and nonempty strings.) if a[1] > lastMatchEnd || a[0] == 0 { - io.WriteString(buf, repl(src[a[0]:a[1]])) + buf = repl(buf, a) } lastMatchEnd = a[1] // Advance past this match; always advance at least one character. - _, width := utf8.DecodeRuneInString(src[searchPos:]) + var width int + if bsrc != nil { + _, width = utf8.DecodeRune(bsrc[searchPos:]) + } else { + _, width = utf8.DecodeRuneInString(src[searchPos:]) + } if searchPos+width > a[1] { searchPos += width } else if searchPos+1 > a[1] { @@ -463,61 +502,50 @@ func (re *Regexp) ReplaceAllStringFunc(src string, repl func(string) string) str } // Copy the unmatched characters after the last match. - io.WriteString(buf, src[lastMatchEnd:]) + if bsrc != nil { + buf = append(buf, bsrc[lastMatchEnd:]...) + } else { + buf = append(buf, src[lastMatchEnd:]...) + } - return buf.String() + return buf } -// ReplaceAll returns a copy of src in which all matches for the Regexp -// have been replaced by repl. No support is provided for expressions -// (e.g. \1 or $1) in the replacement text. +// ReplaceAll returns a copy of src, replacing matches of the Regexp +// with the replacement string repl. Inside repl, $ signs are interpreted as +// in Expand, so for instance $1 represents the text of the first submatch. func (re *Regexp) ReplaceAll(src, repl []byte) []byte { - return re.ReplaceAllFunc(src, func([]byte) []byte { return repl }) -} - -// ReplaceAllFunc returns a copy of src in which all matches for the -// Regexp have been replaced by the return value of of function repl (whose -// first argument is the matched []byte). No support is provided for -// expressions (e.g. \1 or $1) in the replacement string. -func (re *Regexp) ReplaceAllFunc(src []byte, repl func([]byte) []byte) []byte { - lastMatchEnd := 0 // end position of the most recent match - searchPos := 0 // position where we next look for a match - buf := new(bytes.Buffer) - for searchPos <= len(src) { - a := re.doExecute(nil, src, "", searchPos, 2) - if len(a) == 0 { - break // no more matches - } - - // Copy the unmatched characters before this match. - buf.Write(src[lastMatchEnd:a[0]]) - - // Now insert a copy of the replacement string, but not for a - // match of the empty string immediately after another match. - // (Otherwise, we get double replacement for patterns that - // match both empty and nonempty strings.) - if a[1] > lastMatchEnd || a[0] == 0 { - buf.Write(repl(src[a[0]:a[1]])) - } - lastMatchEnd = a[1] - - // Advance past this match; always advance at least one character. - _, width := utf8.DecodeRune(src[searchPos:]) - if searchPos+width > a[1] { - searchPos += width - } else if searchPos+1 > a[1] { - // This clause is only needed at the end of the input - // string. In that case, DecodeRuneInString returns width=0. - searchPos++ - } else { - searchPos = a[1] - } + n := 2 + if bytes.IndexByte(repl, '$') >= 0 { + n = 2 * (re.numSubexp + 1) } + srepl := "" + b := re.replaceAll(src, "", n, func(dst []byte, match []int) []byte { + if len(srepl) != len(repl) { + srepl = string(repl) + } + return re.expand(dst, srepl, src, "", match) + }) + return b +} - // Copy the unmatched characters after the last match. - buf.Write(src[lastMatchEnd:]) +// ReplaceAllLiteral returns a copy of src, replacing matches of the Regexp +// with the replacement bytes repl. The replacement repl is substituted directly, +// without using Expand. +func (re *Regexp) ReplaceAllLiteral(src, repl []byte) []byte { + return re.replaceAll(src, "", 2, func(dst []byte, match []int) []byte { + return append(dst, repl...) + }) +} - return buf.Bytes() +// ReplaceAllFunc returns a copy of src in which all matches of the +// Regexp have been replaced by the return value of of function repl applied +// to the matched byte slice. The replacement returned by repl is substituted +// directly, without using Expand. +func (re *Regexp) ReplaceAllFunc(src []byte, repl func([]byte) []byte) []byte { + return re.replaceAll(src, "", 2, func(dst []byte, match []int) []byte { + return append(dst, repl(src[match[0]:match[1]])...) + }) } var specialBytes = []byte(`\.+*?()|[]{}^$`) @@ -648,7 +676,7 @@ func (re *Regexp) FindString(s string) string { // location of the leftmost match in s of the regular expression. The match // itself is at s[loc[0]:loc[1]]. // A return value of nil indicates no match. -func (re *Regexp) FindStringIndex(s string) []int { +func (re *Regexp) FindStringIndex(s string) (loc []int) { a := re.doExecute(nil, nil, s, 0, 2) if a == nil { return nil @@ -660,7 +688,7 @@ func (re *Regexp) FindStringIndex(s string) []int { // location of the leftmost match of the regular expression in text read from // the RuneReader. The match itself is at s[loc[0]:loc[1]]. A return // value of nil indicates no match. -func (re *Regexp) FindReaderIndex(r io.RuneReader) []int { +func (re *Regexp) FindReaderIndex(r io.RuneReader) (loc []int) { a := re.doExecute(r, nil, "", 0, 2) if a == nil { return nil @@ -687,6 +715,134 @@ func (re *Regexp) FindSubmatch(b []byte) [][]byte { return ret } +// Expand appends template to dst and returns the result; during the +// append, Expand replaces variables in the template with corresponding +// matches drawn from src. The match slice should have been returned by +// FindSubmatchIndex. +// +// In the template, a variable is denoted by a substring of the form +// $name or ${name}, where name is a non-empty sequence of letters, +// digits, and underscores. A purely numeric name like $1 refers to +// the submatch with the corresponding index; other names refer to +// capturing parentheses named with the (?P<name>...) syntax. A +// reference to an out of range or unmatched index or a name that is not +// present in the regular expression is replaced with an empty string. +// +// In the $name form, name is taken to be as long as possible: $1x is +// equivalent to ${1x}, not ${1}x, and, $10 is equivalent to ${10}, not ${1}0. +// +// To insert a literal $ in the output, use $$ in the template. +func (re *Regexp) Expand(dst []byte, template []byte, src []byte, match []int) []byte { + return re.expand(dst, string(template), src, "", match) +} + +// ExpandString is like Expand but the template and source are strings. +// It appends to and returns a byte slice in order to give the calling +// code control over allocation. +func (re *Regexp) ExpandString(dst []byte, template string, src string, match []int) []byte { + return re.expand(dst, template, nil, src, match) +} + +func (re *Regexp) expand(dst []byte, template string, bsrc []byte, src string, match []int) []byte { + for len(template) > 0 { + i := strings.Index(template, "$") + if i < 0 { + break + } + dst = append(dst, template[:i]...) + template = template[i:] + if len(template) > 1 && template[1] == '$' { + // Treat $$ as $. + dst = append(dst, '$') + template = template[2:] + continue + } + name, num, rest, ok := extract(template) + if !ok { + // Malformed; treat $ as raw text. + dst = append(dst, '$') + template = template[1:] + continue + } + template = rest + if num >= 0 { + if 2*num+1 < len(match) { + if bsrc != nil { + dst = append(dst, bsrc[match[2*num]:match[2*num+1]]...) + } else { + dst = append(dst, src[match[2*num]:match[2*num+1]]...) + } + } + } else { + for i, namei := range re.subexpNames { + if name == namei && 2*i+1 < len(match) && match[2*i] >= 0 { + if bsrc != nil { + dst = append(dst, bsrc[match[2*i]:match[2*i+1]]...) + } else { + dst = append(dst, src[match[2*i]:match[2*i+1]]...) + } + break + } + } + } + } + dst = append(dst, template...) + return dst +} + +// extract returns the name from a leading "$name" or "${name}" in str. +// If it is a number, extract returns num set to that number; otherwise num = -1. +func extract(str string) (name string, num int, rest string, ok bool) { + if len(str) < 2 || str[0] != '$' { + return + } + brace := false + if str[1] == '{' { + brace = true + str = str[2:] + } else { + str = str[1:] + } + i := 0 + for i < len(str) { + rune, size := utf8.DecodeRuneInString(str[i:]) + if !unicode.IsLetter(rune) && !unicode.IsDigit(rune) && rune != '_' { + break + } + i += size + } + if i == 0 { + // empty name is not okay + return + } + name = str[:i] + if brace { + if i >= len(str) || str[i] != '}' { + // missing closing brace + return + } + i++ + } + + // Parse number. + num = 0 + for i := 0; i < len(name); i++ { + if name[i] < '0' || '9' < name[i] || num >= 1e8 { + num = -1 + break + } + num = num*10 + int(name[i]) - '0' + } + // Disallow leading zeros. + if name[0] == '0' && len(name) > 1 { + num = -1 + } + + rest = str[i:] + ok = true + return +} + // FindSubmatchIndex returns a slice holding the index pairs identifying the // leftmost match of the regular expression in b and the matches, if any, of // its subexpressions, as defined by the 'Submatch' and 'Index' descriptions diff --git a/libgo/go/regexp/syntax/parse.go b/libgo/go/regexp/syntax/parse.go index 07688bef9c4..71b07b99307 100644 --- a/libgo/go/regexp/syntax/parse.go +++ b/libgo/go/regexp/syntax/parse.go @@ -2,6 +2,10 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// Package syntax parses regular expressions into parse trees and compiles +// parse trees into programs. Most clients of regular expressions will use +// the facilities of package regexp (such as Compile and Match) instead of +// this package. package syntax import ( @@ -648,6 +652,9 @@ func literalRegexp(s string, flags Flags) *Regexp { // Parsing. +// Parse parses a regular expression string s, controlled by the specified +// Flags, and returns a regular expression parse tree. The syntax is +// described in the top-level comment for package regexp. func Parse(s string, flags Flags) (*Regexp, error) { if flags&Literal != 0 { // Trivial parser for literal string. diff --git a/libgo/go/regexp/syntax/regexp.go b/libgo/go/regexp/syntax/regexp.go index 668a07764a1..329a90e0129 100644 --- a/libgo/go/regexp/syntax/regexp.go +++ b/libgo/go/regexp/syntax/regexp.go @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package syntax parses regular expressions into syntax trees. -// WORK IN PROGRESS. package syntax // Note to implementers: diff --git a/libgo/go/runtime/debug.go b/libgo/go/runtime/debug.go index 4f09146fac1..b802fc63f71 100644 --- a/libgo/go/runtime/debug.go +++ b/libgo/go/runtime/debug.go @@ -26,23 +26,11 @@ func GOMAXPROCS(n int) int // NumCPU returns the number of logical CPUs on the local machine. func NumCPU() int -// Cgocalls returns the number of cgo calls made by the current process. -func Cgocalls() int64 +// NumCgoCall returns the number of cgo calls made by the current process. +func NumCgoCall() int64 -// Goroutines returns the number of goroutines that currently exist. -func Goroutines() int32 - -// Alloc allocates a block of the given size. -// FOR TESTING AND DEBUGGING ONLY. -func Alloc(uintptr) *byte - -// Free frees the block starting at the given pointer. -// FOR TESTING AND DEBUGGING ONLY. -func Free(*byte) - -// Lookup returns the base and size of the block containing the given pointer. -// FOR TESTING AND DEBUGGING ONLY. -func Lookup(*byte) (*byte, uintptr) +// NumGoroutine returns the number of goroutines that currently exist. +func NumGoroutine() int // MemProfileRate controls the fraction of memory allocations // that are recorded and reported in the memory profile. @@ -95,11 +83,44 @@ func (r *MemProfileRecord) Stack() []uintptr { // where r.AllocBytes > 0 but r.AllocBytes == r.FreeBytes. // These are sites where memory was allocated, but it has all // been released back to the runtime. +// // Most clients should use the runtime/pprof package or // the testing package's -test.memprofile flag instead // of calling MemProfile directly. func MemProfile(p []MemProfileRecord, inuseZero bool) (n int, ok bool) +// A StackRecord describes a single execution stack. +type StackRecord struct { + Stack0 [32]uintptr // stack trace for this record; ends at first 0 entry +} + +// Stack returns the stack trace associated with the record, +// a prefix of r.Stack0. +func (r *StackRecord) Stack() []uintptr { + for i, v := range r.Stack0 { + if v == 0 { + return r.Stack0[0:i] + } + } + return r.Stack0[0:] +} + +// ThreadCreateProfile returns n, the number of records in the thread creation profile. +// If len(p) >= n, ThreadCreateProfile copies the profile into p and returns n, true. +// If len(p) < n, ThreadCreateProfile does not change p and returns n, false. +// +// Most clients should use the runtime/pprof package instead +// of calling ThreadCreateProfile directly. +func ThreadCreateProfile(p []StackRecord) (n int, ok bool) + +// GoroutineProfile returns n, the number of records in the active goroutine stack profile. +// If len(p) >= n, GoroutineProfile copies the profile into p and returns n, true. +// If len(p) < n, GoroutineProfile does not change p and returns n, false. +// +// Most clients should use the runtime/pprof package instead +// of calling GoroutineProfile directly. +func GoroutineProfile(p []StackRecord) (n int, ok bool) + // CPUProfile returns the next chunk of binary CPU profiling stack trace data, // blocking until data is available. If profiling is turned off and all the profile // data accumulated while it was on has been returned, CPUProfile returns nil. @@ -116,3 +137,9 @@ func CPUProfile() []byte // the testing package's -test.cpuprofile flag instead of calling // SetCPUProfileRate directly. func SetCPUProfileRate(hz int) + +// Stack formats a stack trace of the calling goroutine into buf +// and returns the number of bytes written to buf. +// If all is true, Stack formats stack traces of all other goroutines +// into buf after the trace for the current goroutine. +func Stack(buf []byte, all bool) int diff --git a/libgo/go/runtime/debug/stack.go b/libgo/go/runtime/debug/stack.go index a533a5c3bf4..fc74e537b75 100644 --- a/libgo/go/runtime/debug/stack.go +++ b/libgo/go/runtime/debug/stack.go @@ -8,6 +8,7 @@ package debug import ( "bytes" + _ "debug/elf" "fmt" "io/ioutil" "os" diff --git a/libgo/go/runtime/error.go b/libgo/go/runtime/error.go index c5168a74be7..d3913ec27b8 100644 --- a/libgo/go/runtime/error.go +++ b/libgo/go/runtime/error.go @@ -17,9 +17,6 @@ type Error interface { // A TypeAssertionError explains a failed type assertion. type TypeAssertionError struct { - interfaceType *Type // interface had this type - concreteType *Type // concrete value had this type - assertedType *Type // asserted type interfaceString string concreteString string assertedString string @@ -33,7 +30,7 @@ func (e *TypeAssertionError) Error() string { if inter == "" { inter = "interface" } - if e.concreteType == nil { + if e.concreteString == "" { return "interface conversion: " + inter + " is nil, not " + e.assertedString } if e.missingMethod == "" { @@ -44,40 +41,10 @@ func (e *TypeAssertionError) Error() string { ": missing method " + e.missingMethod } -// Concrete returns the type of the concrete value in the failed type assertion. -// If the interface value was nil, Concrete returns nil. -func (e *TypeAssertionError) Concrete() *Type { - return e.concreteType -} - -// Asserted returns the type incorrectly asserted by the type assertion. -func (e *TypeAssertionError) Asserted() *Type { - return e.assertedType -} - -// If the type assertion is to an interface type, MissingMethod returns the -// name of a method needed to satisfy that interface type but not implemented -// by Concrete. If there are multiple such methods, -// MissingMethod returns one; which one is unspecified. -// If the type assertion is not to an interface type, MissingMethod returns an empty string. -func (e *TypeAssertionError) MissingMethod() string { - return e.missingMethod -} - // For calling from C. -func NewTypeAssertionError(pt1, pt2, pt3 *Type, ps1, ps2, ps3 *string, pmeth *string, ret *interface{}) { - var t1, t2, t3 *Type +func NewTypeAssertionError(ps1, ps2, ps3 *string, pmeth *string, ret *interface{}) { var s1, s2, s3, meth string - if pt1 != nil { - t1 = pt1 - } - if pt2 != nil { - t2 = pt2 - } - if pt3 != nil { - t3 = pt3 - } if ps1 != nil { s1 = *ps1 } @@ -90,7 +57,7 @@ func NewTypeAssertionError(pt1, pt2, pt3 *Type, ps1, ps2, ps3 *string, pmeth *st if pmeth != nil { meth = *pmeth } - *ret = &TypeAssertionError{t1, t2, t3, s1, s2, s3, meth} + *ret = &TypeAssertionError{s1, s2, s3, meth} } // An errorString represents a runtime error described by a single string. diff --git a/libgo/go/runtime/extern.go b/libgo/go/runtime/extern.go index eafa2f19f19..2c097b0c013 100644 --- a/libgo/go/runtime/extern.go +++ b/libgo/go/runtime/extern.go @@ -32,16 +32,8 @@ func Caller(skip int) (pc uintptr, file string, line int, ok bool) func Callers(skip int, pc []uintptr) int type Func struct { // Keep in sync with runtime.h:struct Func - name string - typ string // go type string - src string // src file name - pcln []byte // pc/ln tab for this func - entry uintptr // entry pc - pc0 uintptr // starting pc, ln for table - ln0 int32 - frame int32 // stack frame size - args int32 // number of 32-bit in/out args - locals int32 // number of 32-bit locals + name string + entry uintptr // entry pc } // FuncForPC returns a *Func describing the function that contains the @@ -65,20 +57,13 @@ func (f *Func) FileLine(pc uintptr) (file string, line int) { // implemented in symtab.c func funcline_go(*Func, uintptr) (string, int) +// A gccgo specific hook to use debug info to get file/line info. +func RegisterDebugLookup(func(pc uintptr, function *string, file *string, line *int) bool, + func(sym string, val *uintptr) bool) + // mid returns the current os thread (m) id. func mid() uint32 -// Semacquire waits until *s > 0 and then atomically decrements it. -// It is intended as a simple sleep primitive for use by the synchronization -// library and should not be used directly. -func Semacquire(s *uint32) - -// Semrelease atomically increments *s and notifies a waiting goroutine -// if one is blocked in Semacquire. -// It is intended as a simple wakeup primitive for use by the synchronization -// library and should not be used directly. -func Semrelease(s *uint32) - // SetFinalizer sets the finalizer associated with x to f. // When the garbage collector finds an unreachable block // with an associated finalizer, it clears the association and runs @@ -141,10 +126,10 @@ func Version() string { return theVersion } -// GOOS is the Go tree's operating system target: +// GOOS is the running program's operating system target: // one of darwin, freebsd, linux, and so on. const GOOS string = theGoos -// GOARCH is the Go tree's architecture target: +// GOARCH is the running program's architecture target: // 386, amd64, or arm. const GOARCH string = theGoarch diff --git a/libgo/go/runtime/gc_test.go b/libgo/go/runtime/gc_test.go index 739ebcba2ff..65894a6fd01 100644 --- a/libgo/go/runtime/gc_test.go +++ b/libgo/go/runtime/gc_test.go @@ -15,7 +15,11 @@ func TestGcSys(t *testing.T) { runtime.ReadMemStats(memstats) sys := memstats.Sys - for i := 0; i < 1000000; i++ { + itercount := 1000000 + if testing.Short() { + itercount = 100000 + } + for i := 0; i < itercount; i++ { workthegc() } diff --git a/gcc/testsuite/go.test/test/malloc1.go b/libgo/go/runtime/malloc1.go index 0f7f0b267a0..da92f4c2fbf 100644 --- a/gcc/testsuite/go.test/test/malloc1.go +++ b/libgo/go/runtime/malloc1.go @@ -1,9 +1,9 @@ -// $G $D/$F.go && $L $F.$A && ./$A.out - // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// +build ignore + // trivial malloc test package main diff --git a/gcc/testsuite/go.test/test/mallocrand.go b/libgo/go/runtime/mallocrand.go index 69d07cec5d2..f1bcb89cfa4 100644 --- a/gcc/testsuite/go.test/test/mallocrand.go +++ b/libgo/go/runtime/mallocrand.go @@ -1,9 +1,9 @@ -// $G $D/$F.go && $L $F.$A && ./$A.out - // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// +build ignore + // Random malloc test. package main diff --git a/gcc/testsuite/go.test/test/mallocrep.go b/libgo/go/runtime/mallocrep.go index 4188da9b833..03ee71edb42 100644 --- a/gcc/testsuite/go.test/test/mallocrep.go +++ b/libgo/go/runtime/mallocrep.go @@ -1,11 +1,11 @@ -// $G $D/$F.go && $L $F.$A && ./$A.out - // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Repeated malloc test. +// +build ignore + package main import ( diff --git a/gcc/testsuite/go.test/test/mallocrep1.go b/libgo/go/runtime/mallocrep1.go index f9d7286efd9..41c104c0ba7 100644 --- a/gcc/testsuite/go.test/test/mallocrep1.go +++ b/libgo/go/runtime/mallocrep1.go @@ -1,9 +1,9 @@ -// $G $D/$F.go && $L $F.$A && ./$A.out - // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// +build ignore + // Repeated malloc test. package main diff --git a/libgo/go/runtime/mem.go b/libgo/go/runtime/mem.go index 1301674c027..95e8aa7a533 100644 --- a/libgo/go/runtime/mem.go +++ b/libgo/go/runtime/mem.go @@ -17,11 +17,12 @@ type MemStats struct { Frees uint64 // number of frees // Main allocation heap statistics. - HeapAlloc uint64 // bytes allocated and still in use - HeapSys uint64 // bytes obtained from system - HeapIdle uint64 // bytes in idle spans - HeapInuse uint64 // bytes in non-idle span - HeapObjects uint64 // total number of allocated objects + HeapAlloc uint64 // bytes allocated and still in use + HeapSys uint64 // bytes obtained from system + HeapIdle uint64 // bytes in idle spans + HeapInuse uint64 // bytes in non-idle span + HeapReleased uint64 // bytes released to the OS + HeapObjects uint64 // total number of allocated objects // Low-level fixed-size structure allocator statistics. // Inuse is bytes used now. @@ -35,7 +36,8 @@ type MemStats struct { BuckHashSys uint64 // profiling bucket hash table // Garbage collector statistics. - NextGC uint64 + NextGC uint64 // next run in HeapAlloc time (bytes) + LastGC uint64 // last run in absolute time (ns) PauseTotalNs uint64 PauseNs [256]uint64 // most recent GC pause times NumGC uint32 diff --git a/libgo/go/runtime/pprof/pprof.go b/libgo/go/runtime/pprof/pprof.go index a8e78e0ea75..87f17d2db12 100644 --- a/libgo/go/runtime/pprof/pprof.go +++ b/libgo/go/runtime/pprof/pprof.go @@ -10,19 +10,355 @@ package pprof import ( "bufio" + "bytes" + _ "debug/elf" "fmt" "io" "runtime" + "sort" + "strings" "sync" + "text/tabwriter" ) -// BUG(rsc): CPU profiling is broken on OS X, due to an Apple kernel bug. -// For details, see http://code.google.com/p/go/source/detail?r=35b716c94225. +// BUG(rsc): A bug in the OS X Snow Leopard 64-bit kernel prevents +// CPU profiling from giving accurate results on that system. -// WriteHeapProfile writes a pprof-formatted heap profile to w. -// If a write to w returns an error, WriteHeapProfile returns that error. -// Otherwise, WriteHeapProfile returns nil. +// A Profile is a collection of stack traces showing the call sequences +// that led to instances of a particular event, such as allocation. +// Packages can create and maintain their own profiles; the most common +// use is for tracking resources that must be explicitly closed, such as files +// or network connections. +// +// A Profile's methods can be called from multiple goroutines simultaneously. +// +// Each Profile has a unique name. A few profiles are predefined: +// +// goroutine - stack traces of all current goroutines +// heap - a sampling of all heap allocations +// threadcreate - stack traces that led to the creation of new OS threads +// +// These predefine profiles maintain themselves and panic on an explicit +// Add or Remove method call. +// +// The CPU profile is not available as a Profile. It has a special API, +// the StartCPUProfile and StopCPUProfile functions, because it streams +// output to a writer during profiling. +// +type Profile struct { + name string + mu sync.Mutex + m map[interface{}][]uintptr + count func() int + write func(io.Writer, int) error +} + +// profiles records all registered profiles. +var profiles struct { + mu sync.Mutex + m map[string]*Profile +} + +var goroutineProfile = &Profile{ + name: "goroutine", + count: countGoroutine, + write: writeGoroutine, +} + +var threadcreateProfile = &Profile{ + name: "threadcreate", + count: countThreadCreate, + write: writeThreadCreate, +} + +var heapProfile = &Profile{ + name: "heap", + count: countHeap, + write: writeHeap, +} + +func lockProfiles() { + profiles.mu.Lock() + if profiles.m == nil { + // Initial built-in profiles. + profiles.m = map[string]*Profile{ + "goroutine": goroutineProfile, + "threadcreate": threadcreateProfile, + "heap": heapProfile, + } + } +} + +func unlockProfiles() { + profiles.mu.Unlock() +} + +// NewProfile creates a new profile with the given name. +// If a profile with that name already exists, NewProfile panics. +// The convention is to use a 'import/path.' prefix to create +// separate name spaces for each package. +func NewProfile(name string) *Profile { + lockProfiles() + defer unlockProfiles() + if name == "" { + panic("pprof: NewProfile with empty name") + } + if profiles.m[name] != nil { + panic("pprof: NewProfile name already in use: " + name) + } + p := &Profile{ + name: name, + m: map[interface{}][]uintptr{}, + } + profiles.m[name] = p + return p +} + +// Lookup returns the profile with the given name, or nil if no such profile exists. +func Lookup(name string) *Profile { + lockProfiles() + defer unlockProfiles() + return profiles.m[name] +} + +// Profiles returns a slice of all the known profiles, sorted by name. +func Profiles() []*Profile { + lockProfiles() + defer unlockProfiles() + + var all []*Profile + for _, p := range profiles.m { + all = append(all, p) + } + + sort.Sort(byName(all)) + return all +} + +type byName []*Profile + +func (x byName) Len() int { return len(x) } +func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] } +func (x byName) Less(i, j int) bool { return x[i].name < x[j].name } + +// Name returns this profile's name, which can be passed to Lookup to reobtain the profile. +func (p *Profile) Name() string { + return p.name +} + +// Count returns the number of execution stacks currently in the profile. +func (p *Profile) Count() int { + p.mu.Lock() + defer p.mu.Unlock() + if p.count != nil { + return p.count() + } + return len(p.m) +} + +// Add adds the current execution stack to the profile, associated with value. +// Add stores value in an internal map, so value must be suitable for use as +// a map key and will not be garbage collected until the corresponding +// call to Remove. Add panics if the profile already contains a stack for value. +// +// The skip parameter has the same meaning as runtime.Caller's skip +// and controls where the stack trace begins. Passing skip=0 begins the +// trace in the function calling Add. For example, given this +// execution stack: +// +// Add +// called from rpc.NewClient +// called from mypkg.Run +// called from main.main +// +// Passing skip=0 begins the stack trace at the call to Add inside rpc.NewClient. +// Passing skip=1 begins the stack trace at the call to NewClient inside mypkg.Run. +// +func (p *Profile) Add(value interface{}, skip int) { + if p.name == "" { + panic("pprof: use of uninitialized Profile") + } + if p.write != nil { + panic("pprof: Add called on built-in Profile " + p.name) + } + + stk := make([]uintptr, 32) + n := runtime.Callers(skip+1, stk[:]) + + p.mu.Lock() + defer p.mu.Unlock() + if p.m[value] != nil { + panic("pprof: Profile.Add of duplicate value") + } + p.m[value] = stk[:n] +} + +// Remove removes the execution stack associated with value from the profile. +// It is a no-op if the value is not in the profile. +func (p *Profile) Remove(value interface{}) { + p.mu.Lock() + defer p.mu.Unlock() + delete(p.m, value) +} + +// WriteTo writes a pprof-formatted snapshot of the profile to w. +// If a write to w returns an error, WriteTo returns that error. +// Otherwise, WriteTo returns nil. +// +// The debug parameter enables additional output. +// Passing debug=0 prints only the hexadecimal addresses that pprof needs. +// Passing debug=1 adds comments translating addresses to function names +// and line numbers, so that a programmer can read the profile without tools. +// +// The predefined profiles may assign meaning to other debug values; +// for example, when printing the "goroutine" profile, debug=2 means to +// print the goroutine stacks in the same form that a Go program uses +// when dying due to an unrecovered panic. +func (p *Profile) WriteTo(w io.Writer, debug int) error { + if p.name == "" { + panic("pprof: use of zero Profile") + } + if p.write != nil { + return p.write(w, debug) + } + + // Obtain consistent snapshot under lock; then process without lock. + var all [][]uintptr + p.mu.Lock() + for _, stk := range p.m { + all = append(all, stk) + } + p.mu.Unlock() + + // Map order is non-deterministic; make output deterministic. + sort.Sort(stackProfile(all)) + + return printCountProfile(w, debug, p.name, stackProfile(all)) +} + +type stackProfile [][]uintptr + +func (x stackProfile) Len() int { return len(x) } +func (x stackProfile) Stack(i int) []uintptr { return x[i] } +func (x stackProfile) Swap(i, j int) { x[i], x[j] = x[j], x[i] } +func (x stackProfile) Less(i, j int) bool { + t, u := x[i], x[j] + for k := 0; k < len(t) && k < len(u); k++ { + if t[k] != u[k] { + return t[k] < u[k] + } + } + return len(t) < len(u) +} + +// A countProfile is a set of stack traces to be printed as counts +// grouped by stack trace. There are multiple implementations: +// all that matters is that we can find out how many traces there are +// and obtain each trace in turn. +type countProfile interface { + Len() int + Stack(i int) []uintptr +} + +// printCountProfile prints a countProfile at the specified debug level. +func printCountProfile(w io.Writer, debug int, name string, p countProfile) error { + b := bufio.NewWriter(w) + var tw *tabwriter.Writer + w = b + if debug > 0 { + tw = tabwriter.NewWriter(w, 1, 8, 1, '\t', 0) + w = tw + } + + fmt.Fprintf(w, "%s profile: total %d\n", name, p.Len()) + + // Build count of each stack. + var buf bytes.Buffer + key := func(stk []uintptr) string { + buf.Reset() + fmt.Fprintf(&buf, "@") + for _, pc := range stk { + fmt.Fprintf(&buf, " %#x", pc) + } + return buf.String() + } + m := map[string]int{} + n := p.Len() + for i := 0; i < n; i++ { + m[key(p.Stack(i))]++ + } + + // Print stacks, listing count on first occurrence of a unique stack. + for i := 0; i < n; i++ { + stk := p.Stack(i) + s := key(stk) + if count := m[s]; count != 0 { + fmt.Fprintf(w, "%d %s\n", count, s) + if debug > 0 { + printStackRecord(w, stk, false) + } + delete(m, s) + } + } + + if tw != nil { + tw.Flush() + } + return b.Flush() +} + +// printStackRecord prints the function + source line information +// for a single stack trace. +func printStackRecord(w io.Writer, stk []uintptr, allFrames bool) { + show := allFrames + for _, pc := range stk { + f := runtime.FuncForPC(pc) + if f == nil { + show = true + fmt.Fprintf(w, "#\t%#x\n", pc) + } else { + file, line := f.FileLine(pc) + name := f.Name() + // Hide runtime.goexit and any runtime functions at the beginning. + // This is useful mainly for allocation traces. + if name == "runtime.goexit" || !show && strings.HasPrefix(name, "runtime.") { + continue + } + show = true + fmt.Fprintf(w, "#\t%#x\t%s+%#x\t%s:%d\n", pc, f.Name(), pc-f.Entry(), file, line) + } + } + if !show { + // We didn't print anything; do it again, + // and this time include runtime functions. + printStackRecord(w, stk, true) + return + } + fmt.Fprintf(w, "\n") +} + +// Interface to system profiles. + +type byInUseBytes []runtime.MemProfileRecord + +func (x byInUseBytes) Len() int { return len(x) } +func (x byInUseBytes) Swap(i, j int) { x[i], x[j] = x[j], x[i] } +func (x byInUseBytes) Less(i, j int) bool { return x[i].InUseBytes() > x[j].InUseBytes() } + +// WriteHeapProfile is shorthand for Lookup("heap").WriteTo(w, 0). +// It is preserved for backwards compatibility. func WriteHeapProfile(w io.Writer) error { + return writeHeap(w, 0) +} + +// countHeap returns the number of records in the heap profile. +func countHeap() int { + n, _ := runtime.MemProfile(nil, false) + return n +} + +// writeHeapProfile writes the current runtime heap profile to w. +func writeHeap(w io.Writer, debug int) error { // Find out how many records there are (MemProfile(nil, false)), // allocate that many records, and get the data. // There's a race—more records might be added between @@ -44,6 +380,16 @@ func WriteHeapProfile(w io.Writer) error { // Profile grew; try again. } + sort.Sort(byInUseBytes(p)) + + b := bufio.NewWriter(w) + var tw *tabwriter.Writer + w = b + if debug > 0 { + tw = tabwriter.NewWriter(w, 1, 8, 1, '\t', 0) + w = tw + } + var total runtime.MemProfileRecord for i := range p { r := &p[i] @@ -56,60 +402,135 @@ func WriteHeapProfile(w io.Writer) error { // Technically the rate is MemProfileRate not 2*MemProfileRate, // but early versions of the C++ heap profiler reported 2*MemProfileRate, // so that's what pprof has come to expect. - b := bufio.NewWriter(w) - fmt.Fprintf(b, "heap profile: %d: %d [%d: %d] @ heap/%d\n", + fmt.Fprintf(w, "heap profile: %d: %d [%d: %d] @ heap/%d\n", total.InUseObjects(), total.InUseBytes(), total.AllocObjects, total.AllocBytes, 2*runtime.MemProfileRate) for i := range p { r := &p[i] - fmt.Fprintf(b, "%d: %d [%d: %d] @", + fmt.Fprintf(w, "%d: %d [%d: %d] @", r.InUseObjects(), r.InUseBytes(), r.AllocObjects, r.AllocBytes) for _, pc := range r.Stack() { - fmt.Fprintf(b, " %#x", pc) + fmt.Fprintf(w, " %#x", pc) + } + fmt.Fprintf(w, "\n") + if debug > 0 { + printStackRecord(w, r.Stack(), false) } - fmt.Fprintf(b, "\n") } // Print memstats information too. - // Pprof will ignore, but useful for people. - s := new(runtime.MemStats) - runtime.ReadMemStats(s) - fmt.Fprintf(b, "\n# runtime.MemStats\n") - fmt.Fprintf(b, "# Alloc = %d\n", s.Alloc) - fmt.Fprintf(b, "# TotalAlloc = %d\n", s.TotalAlloc) - fmt.Fprintf(b, "# Sys = %d\n", s.Sys) - fmt.Fprintf(b, "# Lookups = %d\n", s.Lookups) - fmt.Fprintf(b, "# Mallocs = %d\n", s.Mallocs) - - fmt.Fprintf(b, "# HeapAlloc = %d\n", s.HeapAlloc) - fmt.Fprintf(b, "# HeapSys = %d\n", s.HeapSys) - fmt.Fprintf(b, "# HeapIdle = %d\n", s.HeapIdle) - fmt.Fprintf(b, "# HeapInuse = %d\n", s.HeapInuse) - - fmt.Fprintf(b, "# Stack = %d / %d\n", s.StackInuse, s.StackSys) - fmt.Fprintf(b, "# MSpan = %d / %d\n", s.MSpanInuse, s.MSpanSys) - fmt.Fprintf(b, "# MCache = %d / %d\n", s.MCacheInuse, s.MCacheSys) - fmt.Fprintf(b, "# BuckHashSys = %d\n", s.BuckHashSys) - - fmt.Fprintf(b, "# NextGC = %d\n", s.NextGC) - fmt.Fprintf(b, "# PauseNs = %d\n", s.PauseNs) - fmt.Fprintf(b, "# NumGC = %d\n", s.NumGC) - fmt.Fprintf(b, "# EnableGC = %v\n", s.EnableGC) - fmt.Fprintf(b, "# DebugGC = %v\n", s.DebugGC) - - fmt.Fprintf(b, "# BySize = Size * (Active = Mallocs - Frees)\n") - fmt.Fprintf(b, "# (Excluding large blocks.)\n") - for _, t := range s.BySize { - if t.Mallocs > 0 { - fmt.Fprintf(b, "# %d * (%d = %d - %d)\n", t.Size, t.Mallocs-t.Frees, t.Mallocs, t.Frees) - } + // Pprof will ignore, but useful for people + if debug > 0 { + s := new(runtime.MemStats) + runtime.ReadMemStats(s) + fmt.Fprintf(w, "\n# runtime.MemStats\n") + fmt.Fprintf(w, "# Alloc = %d\n", s.Alloc) + fmt.Fprintf(w, "# TotalAlloc = %d\n", s.TotalAlloc) + fmt.Fprintf(w, "# Sys = %d\n", s.Sys) + fmt.Fprintf(w, "# Lookups = %d\n", s.Lookups) + fmt.Fprintf(w, "# Mallocs = %d\n", s.Mallocs) + + fmt.Fprintf(w, "# HeapAlloc = %d\n", s.HeapAlloc) + fmt.Fprintf(w, "# HeapSys = %d\n", s.HeapSys) + fmt.Fprintf(w, "# HeapIdle = %d\n", s.HeapIdle) + fmt.Fprintf(w, "# HeapInuse = %d\n", s.HeapInuse) + + fmt.Fprintf(w, "# Stack = %d / %d\n", s.StackInuse, s.StackSys) + fmt.Fprintf(w, "# MSpan = %d / %d\n", s.MSpanInuse, s.MSpanSys) + fmt.Fprintf(w, "# MCache = %d / %d\n", s.MCacheInuse, s.MCacheSys) + fmt.Fprintf(w, "# BuckHashSys = %d\n", s.BuckHashSys) + + fmt.Fprintf(w, "# NextGC = %d\n", s.NextGC) + fmt.Fprintf(w, "# PauseNs = %d\n", s.PauseNs) + fmt.Fprintf(w, "# NumGC = %d\n", s.NumGC) + fmt.Fprintf(w, "# EnableGC = %v\n", s.EnableGC) + fmt.Fprintf(w, "# DebugGC = %v\n", s.DebugGC) + } + + if tw != nil { + tw.Flush() } return b.Flush() } +// countThreadCreate returns the size of the current ThreadCreateProfile. +func countThreadCreate() int { + n, _ := runtime.ThreadCreateProfile(nil) + return n +} + +// writeThreadCreate writes the current runtime ThreadCreateProfile to w. +func writeThreadCreate(w io.Writer, debug int) error { + return writeRuntimeProfile(w, debug, "threadcreate", runtime.ThreadCreateProfile) +} + +// countGoroutine returns the number of goroutines. +func countGoroutine() int { + return runtime.NumGoroutine() +} + +// writeGoroutine writes the current runtime GoroutineProfile to w. +func writeGoroutine(w io.Writer, debug int) error { + if debug >= 2 { + return writeGoroutineStacks(w) + } + return writeRuntimeProfile(w, debug, "goroutine", runtime.GoroutineProfile) +} + +func writeGoroutineStacks(w io.Writer) error { + // We don't know how big the buffer needs to be to collect + // all the goroutines. Start with 1 MB and try a few times, doubling each time. + // Give up and use a truncated trace if 64 MB is not enough. + buf := make([]byte, 1<<20) + for i := 0; ; i++ { + n := runtime.Stack(buf, true) + if n < len(buf) { + buf = buf[:n] + break + } + if len(buf) >= 64<<20 { + // Filled 64 MB - stop there. + break + } + buf = make([]byte, 2*len(buf)) + } + _, err := w.Write(buf) + return err +} + +func writeRuntimeProfile(w io.Writer, debug int, name string, fetch func([]runtime.StackRecord) (int, bool)) error { + // Find out how many records there are (fetch(nil)), + // allocate that many records, and get the data. + // There's a race—more records might be added between + // the two calls—so allocate a few extra records for safety + // and also try again if we're very unlucky. + // The loop should only execute one iteration in the common case. + var p []runtime.StackRecord + n, ok := fetch(nil) + for { + // Allocate room for a slightly bigger profile, + // in case a few more entries have been added + // since the call to ThreadProfile. + p = make([]runtime.StackRecord, n+10) + n, ok = fetch(p) + if ok { + p = p[0:n] + break + } + // Profile grew; try again. + } + + return printCountProfile(w, debug, name, runtimeProfile(p)) +} + +type runtimeProfile []runtime.StackRecord + +func (p runtimeProfile) Len() int { return len(p) } +func (p runtimeProfile) Stack(i int) []uintptr { return p[i].Stack() } + var cpu struct { sync.Mutex profiling bool diff --git a/libgo/go/runtime/pprof/pprof_test.go b/libgo/go/runtime/pprof/pprof_test.go index 5f128c01cf1..2dc7aef7e96 100644 --- a/libgo/go/runtime/pprof/pprof_test.go +++ b/libgo/go/runtime/pprof/pprof_test.go @@ -7,6 +7,7 @@ package pprof_test import ( "bytes" "hash/crc32" + "os/exec" "runtime" . "runtime/pprof" "strings" @@ -17,8 +18,16 @@ import ( func TestCPUProfile(t *testing.T) { switch runtime.GOOS { case "darwin": - // see Apple Bug Report #9177434 (copied into change description) - return + out, err := exec.Command("uname", "-a").CombinedOutput() + if err != nil { + t.Fatal(err) + } + vers := string(out) + t.Logf("uname -a: %v", vers) + if strings.Contains(vers, "Darwin Kernel Version 10.8.0") && strings.Contains(vers, "root:xnu-1504.15.3~1/RELEASE_X86_64") { + t.Logf("skipping test on known-broken kernel (64-bit Snow Leopard)") + return + } case "plan9": // unimplemented return diff --git a/libgo/go/runtime/runtime_test.go b/libgo/go/runtime/runtime_test.go new file mode 100644 index 00000000000..d68b363e998 --- /dev/null +++ b/libgo/go/runtime/runtime_test.go @@ -0,0 +1,40 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package runtime_test + +import ( + "io" + "testing" +) + +var errf error + +func errfn() error { + return errf +} + +func errfn1() error { + return io.EOF +} + +func BenchmarkIfaceCmp100(b *testing.B) { + for i := 0; i < b.N; i++ { + for j := 0; j < 100; j++ { + if errfn() == io.EOF { + b.Fatal("bad comparison") + } + } + } +} + +func BenchmarkIfaceCmpNil100(b *testing.B) { + for i := 0; i < b.N; i++ { + for j := 0; j < 100; j++ { + if errfn1() == nil { + b.Fatal("bad comparison") + } + } + } +} diff --git a/libgo/go/runtime/sig.go b/libgo/go/runtime/sig.go deleted file mode 100644 index 6d560b90077..00000000000 --- a/libgo/go/runtime/sig.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package runtime - -// Sigrecv returns a bitmask of signals that have arrived since the last call to Sigrecv. -// It blocks until at least one signal arrives. -func Sigrecv() uint32 - -// Signame returns a string describing the signal, or "" if the signal is unknown. -func Signame(sig int32) string - -// Siginit enables receipt of signals via Sigrecv. It should typically -// be called during initialization. -func Siginit() diff --git a/libgo/go/runtime/softfloat64.go b/libgo/go/runtime/softfloat64.go index e0c3b7b738d..4fcf8f26901 100644 --- a/libgo/go/runtime/softfloat64.go +++ b/libgo/go/runtime/softfloat64.go @@ -4,7 +4,7 @@ // Software IEEE754 64-bit floating point. // Only referred to (and thus linked in) by arm port -// and by gotest in this directory. +// and by tests in this directory. package runtime diff --git a/libgo/go/runtime/type.go b/libgo/go/runtime/type.go index b59f2e4c383..c15c1c10c85 100644 --- a/libgo/go/runtime/type.go +++ b/libgo/go/runtime/type.go @@ -4,205 +4,52 @@ /* * Runtime type representation. - * - * The following files know the exact layout of these - * data structures and must be kept in sync with this file: - * - * ../../cmd/gc/reflect.c - * ../../cmd/ld/dwarf.c decodetype_* - * ../reflect/type.go - * type.h + * This file exists only to provide types that 6l can turn into + * DWARF information for use by gdb. Nothing else uses these. + * They should match the same types in ../reflect/type.go. + * For comments see ../reflect/type.go. */ package runtime import "unsafe" -// All types begin with a few common fields needed for -// the interface runtime. type commonType struct { - Kind uint8 // type kind - align uint8 // alignment of variable with this type - fieldAlign uint8 // alignment of struct field with this type - size uintptr // size in bytes - hash uint32 // hash of type; avoids computation in hash tables + Kind uint8 + align uint8 + fieldAlign uint8 + size uintptr + hash uint32 - hashfn func(unsafe.Pointer, uintptr) uintptr // hash function - equalfn func(unsafe.Pointer, unsafe.Pointer, uintptr) bool // equality function + hashfn func(unsafe.Pointer, uintptr) uintptr + equalfn func(unsafe.Pointer, unsafe.Pointer, uintptr) bool - string *string // string form; unnecessary but undeniably useful - *uncommonType // (relatively) uncommon fields - ptrToThis *Type // pointer to this type, if used in binary or has methods + string *string + *uncommonType + ptrToThis *commonType } -// Values for commonType.kind. -const ( - kindBool = 1 + iota - kindInt - kindInt8 - kindInt16 - kindInt32 - kindInt64 - kindUint - kindUint8 - kindUint16 - kindUint32 - kindUint64 - kindUintptr - kindFloat32 - kindFloat64 - kindComplex64 - kindComplex128 - kindArray - kindChan - kindFunc - kindInterface - kindMap - kindPtr - kindSlice - kindString - kindStruct - kindUnsafePointer - - // Not currently generated by gccgo. - // kindNoPointers = 1 << 7 // OR'ed into kind -) - -// Externally visible name. -type Type commonType - -// Method on non-interface type -type _method struct { // underscore is to avoid collision with C - name *string // name of method - pkgPath *string // nil for exported Names; otherwise import path - mtyp *Type // method type (without receiver) - typ *Type // .(*FuncType) underneath (with receiver) - tfn unsafe.Pointer // fn used for normal method call +type _method struct { + name *string + pkgPath *string + mtyp *commonType + typ *commonType + tfn unsafe.Pointer } -// uncommonType is present only for types with names or methods -// (if T is a named type, the uncommonTypes for T and *T have methods). -// Using a pointer to this struct reduces the overall size required -// to describe an unnamed type with no methods. type uncommonType struct { - name *string // name of type - pkgPath *string // import path; nil for built-in types like int, string - methods []_method // methods associated with type -} - -// BoolType represents a boolean type. -type BoolType commonType - -// FloatType represents a float type. -type FloatType commonType - -// ComplexType represents a complex type. -type ComplexType commonType - -// IntType represents an int type. -type IntType commonType - -// UintType represents a uint type. -type UintType commonType - -// StringType represents a string type. -type StringType commonType - -// UintptrType represents a uintptr type. -type UintptrType commonType - -// UnsafePointerType represents an unsafe.Pointer type. -type UnsafePointerType commonType - -// ArrayType represents a fixed array type. -type ArrayType struct { - commonType - elem *Type // array element type - slice *Type // slice type - len uintptr -} - -// SliceType represents a slice type. -type SliceType struct { - commonType - elem *Type // slice element type -} - -// ChanDir represents a channel type's direction. -type ChanDir int - -const ( - RecvDir ChanDir = 1 << iota // <-chan - SendDir // chan<- - BothDir = RecvDir | SendDir // chan -) - -// ChanType represents a channel type. -type ChanType struct { - commonType - elem *Type // channel element type - dir uintptr // channel direction (ChanDir) -} - -// FuncType represents a function type. -type FuncType struct { - commonType - dotdotdot bool // last input parameter is ... - in []*Type // input parameter types - out []*Type // output parameter types -} - -// Method on interface type -type _imethod struct { // underscore is to avoid collision with C - name *string // name of method - pkgPath *string // nil for exported Names; otherwise import path - typ *Type // .(*FuncType) underneath -} - -// InterfaceType represents an interface type. -type InterfaceType struct { - commonType - methods []_imethod // sorted by hash + name *string + pkgPath *string + methods []_method } -// MapType represents a map type. -type MapType struct { - commonType - key *Type // map key type - elem *Type // map element (value) type -} - -// PtrType represents a pointer type. -type PtrType struct { - commonType - elem *Type // pointer element (pointed at) type -} - -// Struct field -type structField struct { - name *string // nil for embedded fields - pkgPath *string // nil for exported Names; otherwise import path - typ *Type // type of field - tag *string // nil if no tag - offset uintptr // byte offset of field within struct +type _imethod struct { + name *string + pkgPath *string + typ *commonType } -// StructType represents a struct type. -type StructType struct { +type interfaceType struct { commonType - fields []structField // sorted by offset -} - -/* - * Must match iface.c:/Itab and compilers. - * NOTE: this is the version used by the reflection code, there is another - * one in iface_defs.go that is closer to the original C version. - */ -type Itable struct { - Itype *Type // (*tab.inter).(*InterfaceType) is the interface type - Type *Type - link *Itable - bad int32 - unused int32 - Fn [100000]uintptr // bigger than we'll ever see + methods []_imethod } diff --git a/libgo/go/sort/example_interface_test.go b/libgo/go/sort/example_interface_test.go new file mode 100644 index 00000000000..4c88821be7c --- /dev/null +++ b/libgo/go/sort/example_interface_test.go @@ -0,0 +1,77 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sort_test + +import ( + "fmt" + "sort" +) + +type Grams int + +func (g Grams) String() string { return fmt.Sprintf("%dg", int(g)) } + +type Organ struct { + Name string + Weight Grams +} + +type Organs []*Organ + +func (s Organs) Len() int { return len(s) } +func (s Organs) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// ByName implements sort.Interface by providing Less and using the Len and +// Swap methods of the embedded Organs value. +type ByName struct{ Organs } + +func (s ByName) Less(i, j int) bool { return s.Organs[i].Name < s.Organs[j].Name } + +// ByWeight implements sort.Interface by providing Less and using the Len and +// Swap methods of the embedded Organs value. +type ByWeight struct{ Organs } + +func (s ByWeight) Less(i, j int) bool { return s.Organs[i].Weight < s.Organs[j].Weight } + +func ExampleInterface() { + s := []*Organ{ + {"brain", 1340}, + {"heart", 290}, + {"liver", 1494}, + {"pancreas", 131}, + {"prostate", 62}, + {"spleen", 162}, + } + + sort.Sort(ByWeight{s}) + fmt.Println("Organs by weight:") + printOrgans(s) + + sort.Sort(ByName{s}) + fmt.Println("Organs by name:") + printOrgans(s) + + // Output: + // Organs by weight: + // prostate (62g) + // pancreas (131g) + // spleen (162g) + // heart (290g) + // brain (1340g) + // liver (1494g) + // Organs by name: + // brain (1340g) + // heart (290g) + // liver (1494g) + // pancreas (131g) + // prostate (62g) + // spleen (162g) +} + +func printOrgans(s []*Organ) { + for _, o := range s { + fmt.Printf("%-8s (%v)\n", o.Name, o.Weight) + } +} diff --git a/libgo/go/sort/example_reverse_test.go b/libgo/go/sort/example_reverse_test.go new file mode 100644 index 00000000000..7c7f05bf3a2 --- /dev/null +++ b/libgo/go/sort/example_reverse_test.go @@ -0,0 +1,30 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sort_test + +import ( + "fmt" + "sort" +) + +// Reverse embeds a sort.Interface value and implements a reverse sort over +// that value. +type Reverse struct { + // This embedded Interface permits Reverse to use the methods of + // another Interface implementation. + sort.Interface +} + +// Less returns the opposite of the embedded implementation's Less method. +func (r Reverse) Less(i, j int) bool { + return r.Interface.Less(j, i) +} + +func ExampleInterface_reverse() { + s := []int{5, 2, 6, 3, 1, 4} // unsorted + sort.Sort(Reverse{sort.IntSlice(s)}) + fmt.Println(s) + // Output: [6 5 4 3 2 1] +} diff --git a/libgo/go/sort/example_test.go b/libgo/go/sort/example_test.go index 2224db7e13c..f57d02546f7 100644 --- a/libgo/go/sort/example_test.go +++ b/libgo/go/sort/example_test.go @@ -9,9 +9,9 @@ import ( "sort" ) -// [1 2 3 4 5 6] func ExampleInts() { s := []int{5, 2, 6, 3, 1, 4} // unsorted sort.Ints(s) fmt.Println(s) + // Output: [1 2 3 4 5 6] } diff --git a/libgo/go/strconv/atof.go b/libgo/go/strconv/atof.go index 42fc431db8a..d99117bed1d 100644 --- a/libgo/go/strconv/atof.go +++ b/libgo/go/strconv/atof.go @@ -13,6 +13,7 @@ package strconv // 3) Multiply by 2^precision and round to get mantissa. import "math" +import "runtime" var optimize = true // can change for testing @@ -52,10 +53,10 @@ func special(s string) (f float64, ok bool) { return } -// TODO(rsc): Better truncation handling. func (b *decimal) set(s string) (ok bool) { i := 0 b.neg = false + b.trunc = false // optional sign if i >= len(s) { @@ -88,8 +89,12 @@ func (b *decimal) set(s string) (ok bool) { b.dp-- continue } - b.d[b.nd] = s[i] - b.nd++ + if b.nd < len(b.d) { + b.d[b.nd] = s[i] + b.nd++ + } else if s[i] != '0' { + b.trunc = true + } continue } break @@ -296,6 +301,11 @@ func (d *decimal) atof64() (f float64, ok bool) { if d.nd > 15 { return } + // gccgo gets this wrong on 32-bit i386 when not using -msse. + // See TestRoundTrip in atof_test.go for a test case. + if runtime.GOARCH == "386" { + return + } switch { case d.dp == d.nd: // int f := d.atof64int() diff --git a/libgo/go/strconv/atof_test.go b/libgo/go/strconv/atof_test.go index 3fa637d2bc6..59950238230 100644 --- a/libgo/go/strconv/atof_test.go +++ b/libgo/go/strconv/atof_test.go @@ -9,6 +9,7 @@ import ( "math/rand" "reflect" . "strconv" + "strings" "testing" "time" ) @@ -117,6 +118,20 @@ var atoftests = []atofTest{ // A very large number (initially wrongly parsed by the fast algorithm). {"4.630813248087435e+307", "4.630813248087435e+307", nil}, + + // A different kind of very large number. + {"22.222222222222222", "22.22222222222222", nil}, + {"2." + strings.Repeat("2", 4000) + "e+1", "22.22222222222222", nil}, + + // Exactly halfway between 1 and math.Nextafter(1, 2). + // Round to even (down). + {"1.00000000000000011102230246251565404236316680908203125", "1", nil}, + // Slightly lower; still round down. + {"1.00000000000000011102230246251565404236316680908203124", "1", nil}, + // Slightly higher; round up. + {"1.00000000000000011102230246251565404236316680908203126", "1.0000000000000002", nil}, + // Slightly higher, but you have to read all the way to the end. + {"1.00000000000000011102230246251565404236316680908203125" + strings.Repeat("0", 10000) + "1", "1.0000000000000002", nil}, } type atofSimpleTest struct { @@ -211,6 +226,44 @@ func TestAtofRandom(t *testing.T) { t.Logf("tested %d random numbers", len(atofRandomTests)) } +var roundTripCases = []struct { + f float64 + s string +}{ + // Issue 2917. + // This test will break the optimized conversion if the + // FPU is using 80-bit registers instead of 64-bit registers, + // usually because the operating system initialized the + // thread with 80-bit precision and the Go runtime didn't + // fix the FP control word. + {8865794286000691 << 39, "4.87402195346389e+27"}, + {8865794286000692 << 39, "4.8740219534638903e+27"}, +} + +func TestRoundTrip(t *testing.T) { + for _, tt := range roundTripCases { + old := SetOptimize(false) + s := FormatFloat(tt.f, 'g', -1, 64) + if s != tt.s { + t.Errorf("no-opt FormatFloat(%b) = %s, want %s", tt.f, s, tt.s) + } + f, err := ParseFloat(tt.s, 64) + if f != tt.f || err != nil { + t.Errorf("no-opt ParseFloat(%s) = %b, %v want %b, nil", tt.s, f, err, tt.f) + } + SetOptimize(true) + s = FormatFloat(tt.f, 'g', -1, 64) + if s != tt.s { + t.Errorf("opt FormatFloat(%b) = %s, want %s", tt.f, s, tt.s) + } + f, err = ParseFloat(tt.s, 64) + if f != tt.f || err != nil { + t.Errorf("opt ParseFloat(%s) = %b, %v want %b, nil", tt.s, f, err, tt.f) + } + SetOptimize(old) + } +} + func BenchmarkAtof64Decimal(b *testing.B) { for i := 0; i < b.N; i++ { ParseFloat("33909", 64) diff --git a/libgo/go/strconv/decimal.go b/libgo/go/strconv/decimal.go index cc5591a8d8f..a75071dcc46 100644 --- a/libgo/go/strconv/decimal.go +++ b/libgo/go/strconv/decimal.go @@ -12,12 +12,11 @@ package strconv type decimal struct { - // TODO(rsc): Can make d[] a bit smaller and add - // truncated bool; - d [800]byte // digits - nd int // number of digits used - dp int // decimal point - neg bool + d [800]byte // digits + nd int // number of digits used + dp int // decimal point + neg bool + trunc bool // discarded nonzero digits beyond d[:nd] } func (a *decimal) String() string { @@ -145,8 +144,12 @@ func rightShift(a *decimal, k uint) { for n > 0 { dig := n >> k n -= dig << k - a.d[w] = byte(dig + '0') - w++ + if w < len(a.d) { + a.d[w] = byte(dig + '0') + w++ + } else if dig > 0 { + a.trunc = true + } n = n * 10 } @@ -242,7 +245,11 @@ func leftShift(a *decimal, k uint) { quo := n / 10 rem := n - 10*quo w-- - a.d[w] = byte(rem + '0') + if w < len(a.d) { + a.d[w] = byte(rem + '0') + } else if rem != 0 { + a.trunc = true + } n = quo } @@ -251,11 +258,18 @@ func leftShift(a *decimal, k uint) { quo := n / 10 rem := n - 10*quo w-- - a.d[w] = byte(rem + '0') + if w < len(a.d) { + a.d[w] = byte(rem + '0') + } else if rem != 0 { + a.trunc = true + } n = quo } a.nd += delta + if a.nd >= len(a.d) { + a.nd = len(a.d) + } a.dp += delta trim(a) } @@ -286,6 +300,10 @@ func shouldRoundUp(a *decimal, nd int) bool { return false } if a.d[nd] == '5' && nd+1 == a.nd { // exactly halfway - round to even + // if we truncated, a little higher than what's recorded - always round up + if a.trunc { + return true + } return nd > 0 && (a.d[nd-1]-'0')%2 != 0 } // not halfway - digit tells all @@ -293,7 +311,6 @@ func shouldRoundUp(a *decimal, nd int) bool { } // Round a to nd digits (or fewer). -// Returns receiver for convenience. // If nd is zero, it means we're rounding // just to the left of the digits, as in // 0.09 -> 0.1. @@ -309,7 +326,6 @@ func (a *decimal) Round(nd int) { } // Round a down to nd digits (or fewer). -// Returns receiver for convenience. func (a *decimal) RoundDown(nd int) { if nd < 0 || nd >= a.nd { return @@ -319,7 +335,6 @@ func (a *decimal) RoundDown(nd int) { } // Round a up to nd digits (or fewer). -// Returns receiver for convenience. func (a *decimal) RoundUp(nd int) { if nd < 0 || nd >= a.nd { return diff --git a/libgo/go/strconv/extfloat.go b/libgo/go/strconv/extfloat.go index 64ab84f4554..aa5e5607ca0 100644 --- a/libgo/go/strconv/extfloat.go +++ b/libgo/go/strconv/extfloat.go @@ -477,7 +477,7 @@ func (f *extFloat) ShortestDecimal(d *decimal, lower, upper *extFloat) bool { // all data is known with a error estimate of ulpBinary*ε. func adjustLastDigit(d *decimal, currentDiff, targetDiff, maxDiff, ulpDecimal, ulpBinary uint64) bool { if ulpDecimal < 2*ulpBinary { - // Appromixation is too wide. + // Approximation is too wide. return false } for currentDiff+ulpDecimal/2+ulpBinary < targetDiff { diff --git a/libgo/go/strconv/itoa_test.go b/libgo/go/strconv/itoa_test.go index bac23e6ea67..63d2fa44e02 100644 --- a/libgo/go/strconv/itoa_test.go +++ b/libgo/go/strconv/itoa_test.go @@ -127,6 +127,7 @@ func TestUitoa(t *testing.T) { } func numAllocations(f func()) int { + runtime.GC() memstats := new(runtime.MemStats) runtime.ReadMemStats(memstats) n0 := memstats.Mallocs diff --git a/libgo/go/strings/example_test.go b/libgo/go/strings/example_test.go index 16e53678b20..daeb85ef6bb 100644 --- a/libgo/go/strings/example_test.go +++ b/libgo/go/strings/example_test.go @@ -9,7 +9,174 @@ import ( "strings" ) -// Fields are: ["foo" "bar" "baz"] func ExampleFields() { fmt.Printf("Fields are: %q", strings.Fields(" foo bar baz ")) + // Output: Fields are: ["foo" "bar" "baz"] +} + +func ExampleContains() { + fmt.Println(strings.Contains("seafood", "foo")) + fmt.Println(strings.Contains("seafood", "bar")) + fmt.Println(strings.Contains("seafood", "")) + fmt.Println(strings.Contains("", "")) + // Output: + // true + // false + // true + // true +} + +func ExampleContainsAny() { + fmt.Println(strings.ContainsAny("team", "i")) + fmt.Println(strings.ContainsAny("failure", "u & i")) + fmt.Println(strings.ContainsAny("foo", "")) + fmt.Println(strings.ContainsAny("", "")) + // Output: + // false + // true + // false + // false +} + +func ExampleCount() { + fmt.Println(strings.Count("cheese", "e")) + fmt.Println(strings.Count("five", "")) // before & after each rune + + // Output: + // 3 + // 5 +} + +func ExampleEqualFold() { + fmt.Println(strings.EqualFold("Go", "go")) + // Output: true +} + +func ExampleIndex() { + fmt.Println(strings.Index("chicken", "ken")) + fmt.Println(strings.Index("chicken", "dmr")) + // Output: + // 4 + // -1 +} + +func ExampleRune() { + fmt.Println(strings.IndexRune("chicken", 'k')) + fmt.Println(strings.IndexRune("chicken", 'd')) + // Output: + // 4 + // -1 +} + +func ExampleLastIndex() { + fmt.Println(strings.Index("go gopher", "go")) + fmt.Println(strings.LastIndex("go gopher", "go")) + fmt.Println(strings.LastIndex("go gopher", "rodent")) + // Output: + // 0 + // 3 + // -1 +} + +func ExampleJoin() { + s := []string{"foo", "bar", "baz"} + fmt.Println(strings.Join(s, ", ")) + // Output: foo, bar, baz +} + +func ExampleRepeat() { + fmt.Println("ba" + strings.Repeat("na", 2)) + // Output: banana +} + +func ExampleReplace() { + fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2)) + fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1)) + // Output: + // oinky oinky oink + // moo moo moo +} + +func ExampleSplit() { + fmt.Printf("%q\n", strings.Split("a,b,c", ",")) + fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a ")) + fmt.Printf("%q\n", strings.Split(" xyz ", "")) + fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins")) + // Output: + // ["a" "b" "c"] + // ["" "man " "plan " "canal panama"] + // [" " "x" "y" "z" " "] + // [""] +} + +func ExampleSplitN() { + fmt.Printf("%q\n", strings.SplitN("a,b,c", ",", 2)) + z := strings.SplitN("a,b,c", ",", 0) + fmt.Printf("%q (nil = %v)\n", z, z == nil) + // Output: + // ["a" "b,c"] + // [] (nil = true) +} + +func ExampleSplitAfter() { + fmt.Printf("%q\n", strings.SplitAfter("a,b,c", ",")) + // Output: ["a," "b," "c"] +} + +func ExampleSplitAfterN() { + fmt.Printf("%q\n", strings.SplitAfterN("a,b,c", ",", 2)) + // Output: ["a," "b,c"] +} + +func ExampleTitle() { + fmt.Println(strings.Title("her royal highness")) + // Output: Her Royal Highness +} + +func ExampleToTitle() { + fmt.Println(strings.ToTitle("loud noises")) + fmt.Println(strings.ToTitle("хлеб")) + // Output: + // LOUD NOISES + // ХЛЕБ +} + +func ExampleTrim() { + fmt.Printf("[%q]", strings.Trim(" !!! Achtung !!! ", "! ")) + // Output: ["Achtung"] +} + +func ExampleMap() { + rot13 := func(r rune) rune { + switch { + case r >= 'A' && r <= 'Z': + return 'A' + (r-'A'+13)%26 + case r >= 'a' && r <= 'z': + return 'a' + (r-'a'+13)%26 + } + return r + } + fmt.Println(strings.Map(rot13, "'Twas brillig and the slithy gopher...")) + // Output: 'Gjnf oevyyvt naq gur fyvgul tbcure... +} + +func ExampleTrimSpace() { + fmt.Println(strings.TrimSpace(" \t\n a lone gopher \n\t\r\n")) + // Output: a lone gopher +} + +func ExampleNewReplacer() { + r := strings.NewReplacer("<", "<", ">", ">") + fmt.Println(r.Replace("This is <b>HTML</b>!")) + // Output: This is <b>HTML</b>! +} + +func ExampleToUpper() { + fmt.Println(strings.ToUpper("Gopher")) + // Output: GOPHER +} + +func ExampleToLower() { + fmt.Println(strings.ToLower("Gopher")) + // Output: gopher } diff --git a/libgo/go/strings/reader.go b/libgo/go/strings/reader.go index 8ff851f36a8..8569805552d 100644 --- a/libgo/go/strings/reader.go +++ b/libgo/go/strings/reader.go @@ -10,8 +10,9 @@ import ( "unicode/utf8" ) -// A Reader implements the io.Reader, io.ByteScanner, and -// io.RuneScanner interfaces by reading from a string. +// A Reader implements the io.Reader, io.ReaderAt, io.Seeker, +// io.ByteScanner, and io.RuneScanner interfaces by reading +// from a string. type Reader struct { s string i int // current reading index @@ -21,10 +22,16 @@ type Reader struct { // Len returns the number of bytes of the unread portion of the // string. func (r *Reader) Len() int { + if r.i >= len(r.s) { + return 0 + } return len(r.s) - r.i } func (r *Reader) Read(b []byte) (n int, err error) { + if len(b) == 0 { + return 0, nil + } if r.i >= len(r.s) { return 0, io.EOF } @@ -34,6 +41,20 @@ func (r *Reader) Read(b []byte) (n int, err error) { return } +func (r *Reader) ReadAt(b []byte, off int64) (n int, err error) { + if off < 0 { + return 0, errors.New("strings: invalid offset") + } + if off >= int64(len(r.s)) { + return 0, io.EOF + } + n = copy(b, r.s[int(off):]) + if n < len(b) { + err = io.EOF + } + return +} + func (r *Reader) ReadByte() (b byte, err error) { if r.i >= len(r.s) { return 0, io.EOF @@ -44,9 +65,6 @@ func (r *Reader) ReadByte() (b byte, err error) { return } -// UnreadByte moves the reading position back by one byte. -// It is an error to call UnreadByte if nothing has been -// read yet. func (r *Reader) UnreadByte() error { if r.i <= 0 { return errors.New("strings.Reader: at beginning of string") @@ -56,11 +74,6 @@ func (r *Reader) UnreadByte() error { return nil } -// ReadRune reads and returns the next UTF-8-encoded -// Unicode code point from the buffer. -// If no bytes are available, the error returned is io.EOF. -// If the bytes are an erroneous UTF-8 encoding, it -// consumes one byte and returns U+FFFD, 1. func (r *Reader) ReadRune() (ch rune, size int, err error) { if r.i >= len(r.s) { return 0, 0, io.EOF @@ -75,9 +88,6 @@ func (r *Reader) ReadRune() (ch rune, size int, err error) { return } -// UnreadRune causes the next call to ReadRune to return the same rune -// as the previous call to ReadRune. -// The last method called on r must have been ReadRune. func (r *Reader) UnreadRune() error { if r.prevRune < 0 { return errors.New("strings.Reader: previous operation was not ReadRune") @@ -87,6 +97,29 @@ func (r *Reader) UnreadRune() error { return nil } +// Seek implements the io.Seeker interface. +func (r *Reader) Seek(offset int64, whence int) (int64, error) { + var abs int64 + switch whence { + case 0: + abs = offset + case 1: + abs = int64(r.i) + offset + case 2: + abs = int64(len(r.s)) + offset + default: + return 0, errors.New("strings: invalid whence") + } + if abs < 0 { + return 0, errors.New("strings: negative position") + } + if abs >= 1<<31 { + return 0, errors.New("strings: position out of range") + } + r.i = int(abs) + return abs, nil +} + // NewReader returns a new Reader reading from s. // It is similar to bytes.NewBufferString but more efficient and read-only. func NewReader(s string) *Reader { return &Reader{s, 0, -1} } diff --git a/libgo/go/strings/reader_test.go b/libgo/go/strings/reader_test.go new file mode 100644 index 00000000000..a99ae2a0ea6 --- /dev/null +++ b/libgo/go/strings/reader_test.go @@ -0,0 +1,88 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package strings_test + +import ( + "fmt" + "io" + "os" + "strings" + "testing" +) + +func TestReader(t *testing.T) { + r := strings.NewReader("0123456789") + tests := []struct { + off int64 + seek int + n int + want string + wantpos int64 + seekerr string + }{ + {seek: os.SEEK_SET, off: 0, n: 20, want: "0123456789"}, + {seek: os.SEEK_SET, off: 1, n: 1, want: "1"}, + {seek: os.SEEK_CUR, off: 1, wantpos: 3, n: 2, want: "34"}, + {seek: os.SEEK_SET, off: -1, seekerr: "strings: negative position"}, + {seek: os.SEEK_SET, off: 1<<31 - 1}, + {seek: os.SEEK_CUR, off: 1, seekerr: "strings: position out of range"}, + {seek: os.SEEK_SET, n: 5, want: "01234"}, + {seek: os.SEEK_CUR, n: 5, want: "56789"}, + {seek: os.SEEK_END, off: -1, n: 1, wantpos: 9, want: "9"}, + } + + for i, tt := range tests { + pos, err := r.Seek(tt.off, tt.seek) + if err == nil && tt.seekerr != "" { + t.Errorf("%d. want seek error %q", i, tt.seekerr) + continue + } + if err != nil && err.Error() != tt.seekerr { + t.Errorf("%d. seek error = %q; want %q", i, err.Error(), tt.seekerr) + continue + } + if tt.wantpos != 0 && tt.wantpos != pos { + t.Errorf("%d. pos = %d, want %d", i, pos, tt.wantpos) + } + buf := make([]byte, tt.n) + n, err := r.Read(buf) + if err != nil { + t.Errorf("%d. read = %v", i, err) + continue + } + got := string(buf[:n]) + if got != tt.want { + t.Errorf("%d. got %q; want %q", i, got, tt.want) + } + } +} + +func TestReaderAt(t *testing.T) { + r := strings.NewReader("0123456789") + tests := []struct { + off int64 + n int + want string + wanterr interface{} + }{ + {0, 10, "0123456789", nil}, + {1, 10, "123456789", io.EOF}, + {1, 9, "123456789", nil}, + {11, 10, "", io.EOF}, + {0, 0, "", nil}, + {-1, 0, "", "strings: invalid offset"}, + } + for i, tt := range tests { + b := make([]byte, tt.n) + rn, err := r.ReadAt(b, tt.off) + got := string(b[:rn]) + if got != tt.want { + t.Errorf("%d. got %q; want %q", i, got, tt.want) + } + if fmt.Sprintf("%v", err) != fmt.Sprintf("%v", tt.wanterr) { + t.Errorf("%d. got error = %v; want %v", i, err, tt.wanterr) + } + } +} diff --git a/libgo/go/sync/cond.go b/libgo/go/sync/cond.go index 75494b53536..1fc3deaf1e0 100644 --- a/libgo/go/sync/cond.go +++ b/libgo/go/sync/cond.go @@ -4,8 +4,6 @@ package sync -import "runtime" - // Cond implements a condition variable, a rendezvous point // for goroutines waiting for or announcing the occurrence // of an event. @@ -43,9 +41,10 @@ func NewCond(l Locker) *Cond { // Wait atomically unlocks c.L and suspends execution // of the calling goroutine. After later resuming execution, -// Wait locks c.L before returning. +// Wait locks c.L before returning. Unlike in other systems, +// Wait cannot return unless awoken by Broadcast or Signal. // -// Because L is not locked when Wait first resumes, the caller +// Because c.L is not locked when Wait first resumes, the caller // typically cannot assume that the condition is true when // Wait returns. Instead, the caller should Wait in a loop: // @@ -65,7 +64,7 @@ func (c *Cond) Wait() { c.newWaiters++ c.m.Unlock() c.L.Unlock() - runtime.Semacquire(s) + runtime_Semacquire(s) c.L.Lock() } @@ -84,7 +83,7 @@ func (c *Cond) Signal() { } if c.oldWaiters > 0 { c.oldWaiters-- - runtime.Semrelease(c.oldSema) + runtime_Semrelease(c.oldSema) } c.m.Unlock() } @@ -98,13 +97,13 @@ func (c *Cond) Broadcast() { // Wake both generations. if c.oldWaiters > 0 { for i := 0; i < c.oldWaiters; i++ { - runtime.Semrelease(c.oldSema) + runtime_Semrelease(c.oldSema) } c.oldWaiters = 0 } if c.newWaiters > 0 { for i := 0; i < c.newWaiters; i++ { - runtime.Semrelease(c.newSema) + runtime_Semrelease(c.newSema) } c.newWaiters = 0 c.newSema = nil diff --git a/libgo/go/sync/example_test.go b/libgo/go/sync/example_test.go new file mode 100644 index 00000000000..15649240035 --- /dev/null +++ b/libgo/go/sync/example_test.go @@ -0,0 +1,54 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sync_test + +import ( + "fmt" + "net/http" + "sync" +) + +// This example fetches several URLs concurrently, +// using a WaitGroup to block until all the fetches are complete. +func ExampleWaitGroup() { + var wg sync.WaitGroup + var urls = []string{ + "http://www.golang.org/", + "http://www.google.com/", + "http://www.somestupidname.com/", + } + for _, url := range urls { + // Increment the WaitGroup counter. + wg.Add(1) + // Launch a goroutine to fetch the URL. + go func(url string) { + // Fetch the URL. + http.Get(url) + // Decrement the counter. + wg.Done() + }(url) + } + // Wait for all HTTP fetches to complete. + wg.Wait() +} + +func ExampleOnce() { + var once sync.Once + onceBody := func() { + fmt.Printf("Only once\n") + } + done := make(chan bool) + for i := 0; i < 10; i++ { + go func() { + once.Do(onceBody) + done <- true + }() + } + for i := 0; i < 10; i++ { + <-done + } + // Output: + // Only once +} diff --git a/libgo/go/sync/export_test.go b/libgo/go/sync/export_test.go new file mode 100644 index 00000000000..fa5983a2d1e --- /dev/null +++ b/libgo/go/sync/export_test.go @@ -0,0 +1,9 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sync + +// Export for testing. +var Runtime_Semacquire = runtime_Semacquire +var Runtime_Semrelease = runtime_Semrelease diff --git a/libgo/go/sync/mutex.go b/libgo/go/sync/mutex.go index 4fc02743c6e..9494cc3f826 100644 --- a/libgo/go/sync/mutex.go +++ b/libgo/go/sync/mutex.go @@ -10,10 +10,7 @@ // Values containing the types defined in this package should not be copied. package sync -import ( - "runtime" - "sync/atomic" -) +import "sync/atomic" // A Mutex is a mutual exclusion lock. // Mutexes can be created as part of other structures; @@ -60,7 +57,7 @@ func (m *Mutex) Lock() { if old&mutexLocked == 0 { break } - runtime.Semacquire(&m.sema) + runtime_Semacquire(&m.sema) awoke = true } } @@ -89,7 +86,7 @@ func (m *Mutex) Unlock() { // Grab the right to wake someone. new = (old - 1<<mutexWaiterShift) | mutexWoken if atomic.CompareAndSwapInt32(&m.state, old, new) { - runtime.Semrelease(&m.sema) + runtime_Semrelease(&m.sema) return } old = m.state diff --git a/libgo/go/sync/mutex_test.go b/libgo/go/sync/mutex_test.go index 47758844f27..bf78c6f609c 100644 --- a/libgo/go/sync/mutex_test.go +++ b/libgo/go/sync/mutex_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// GOMAXPROCS=10 gotest +// GOMAXPROCS=10 go test package sync_test @@ -15,8 +15,8 @@ import ( func HammerSemaphore(s *uint32, loops int, cdone chan bool) { for i := 0; i < loops; i++ { - runtime.Semacquire(s) - runtime.Semrelease(s) + Runtime_Semacquire(s) + Runtime_Semrelease(s) } cdone <- true } diff --git a/libgo/go/sync/runtime.go b/libgo/go/sync/runtime.go new file mode 100644 index 00000000000..e99599c11ae --- /dev/null +++ b/libgo/go/sync/runtime.go @@ -0,0 +1,18 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sync + +// defined in package runtime + +// Semacquire waits until *s > 0 and then atomically decrements it. +// It is intended as a simple sleep primitive for use by the synchronization +// library and should not be used directly. +func runtime_Semacquire(s *uint32) + +// Semrelease atomically increments *s and notifies a waiting goroutine +// if one is blocked in Semacquire. +// It is intended as a simple wakeup primitive for use by the synchronization +// library and should not be used directly. +func runtime_Semrelease(s *uint32) diff --git a/libgo/go/runtime/sema_test.go b/libgo/go/sync/runtime_sema_test.go index d95bb1ec58f..57a8dbee783 100644 --- a/libgo/go/runtime/sema_test.go +++ b/libgo/go/sync/runtime_sema_test.go @@ -2,10 +2,11 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package runtime_test +package sync_test import ( "runtime" + . "sync" "sync/atomic" "testing" ) @@ -25,8 +26,8 @@ func BenchmarkSemaUncontended(b *testing.B) { for atomic.AddInt32(&N, -1) >= 0 { runtime.Gosched() for g := 0; g < CallsPerSched; g++ { - runtime.Semrelease(&sem.sem) - runtime.Semacquire(&sem.sem) + Runtime_Semrelease(&sem.sem) + Runtime_Semacquire(&sem.sem) } } c <- true @@ -48,7 +49,7 @@ func benchmarkSema(b *testing.B, block, work bool) { if block { for p := 0; p < procs/2; p++ { go func() { - runtime.Semacquire(&sem) + Runtime_Semacquire(&sem) c2 <- true }() } @@ -59,18 +60,18 @@ func benchmarkSema(b *testing.B, block, work bool) { for atomic.AddInt32(&N, -1) >= 0 { runtime.Gosched() for g := 0; g < CallsPerSched; g++ { - runtime.Semrelease(&sem) + Runtime_Semrelease(&sem) if work { for i := 0; i < LocalWork; i++ { foo *= 2 foo /= 2 } } - runtime.Semacquire(&sem) + Runtime_Semacquire(&sem) } } c <- foo == 42 - runtime.Semrelease(&sem) + Runtime_Semrelease(&sem) }() } if block { diff --git a/libgo/go/sync/rwmutex.go b/libgo/go/sync/rwmutex.go index cb1a47720b2..782a9c31968 100644 --- a/libgo/go/sync/rwmutex.go +++ b/libgo/go/sync/rwmutex.go @@ -4,10 +4,7 @@ package sync -import ( - "runtime" - "sync/atomic" -) +import "sync/atomic" // An RWMutex is a reader/writer mutual exclusion lock. // The lock can be held by an arbitrary number of readers @@ -29,7 +26,7 @@ const rwmutexMaxReaders = 1 << 30 func (rw *RWMutex) RLock() { if atomic.AddInt32(&rw.readerCount, 1) < 0 { // A writer is pending, wait for it. - runtime.Semacquire(&rw.readerSem) + runtime_Semacquire(&rw.readerSem) } } @@ -42,7 +39,7 @@ func (rw *RWMutex) RUnlock() { // A writer is pending. if atomic.AddInt32(&rw.readerWait, -1) == 0 { // The last reader unblocks the writer. - runtime.Semrelease(&rw.writerSem) + runtime_Semrelease(&rw.writerSem) } } } @@ -60,7 +57,7 @@ func (rw *RWMutex) Lock() { r := atomic.AddInt32(&rw.readerCount, -rwmutexMaxReaders) + rwmutexMaxReaders // Wait for active readers. if r != 0 && atomic.AddInt32(&rw.readerWait, r) != 0 { - runtime.Semacquire(&rw.writerSem) + runtime_Semacquire(&rw.writerSem) } } @@ -75,7 +72,7 @@ func (rw *RWMutex) Unlock() { r := atomic.AddInt32(&rw.readerCount, rwmutexMaxReaders) // Unblock blocked readers, if any. for i := 0; i < int(r); i++ { - runtime.Semrelease(&rw.readerSem) + runtime_Semrelease(&rw.readerSem) } // Allow other writers to proceed. rw.w.Unlock() diff --git a/libgo/go/sync/rwmutex_test.go b/libgo/go/sync/rwmutex_test.go index dc8ce9653ce..39d5d6540de 100644 --- a/libgo/go/sync/rwmutex_test.go +++ b/libgo/go/sync/rwmutex_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// GOMAXPROCS=10 gotest +// GOMAXPROCS=10 go test package sync_test diff --git a/libgo/go/sync/waitgroup.go b/libgo/go/sync/waitgroup.go index a4c9b7e43cd..0165b1ffb2b 100644 --- a/libgo/go/sync/waitgroup.go +++ b/libgo/go/sync/waitgroup.go @@ -4,31 +4,13 @@ package sync -import ( - "runtime" - "sync/atomic" -) +import "sync/atomic" // A WaitGroup waits for a collection of goroutines to finish. // The main goroutine calls Add to set the number of // goroutines to wait for. Then each of the goroutines // runs and calls Done when finished. At the same time, // Wait can be used to block until all goroutines have finished. -// -// For example: -// -// for i := 0; i < n; i++ { -// if !condition(i) { -// continue -// } -// wg.Add(1) -// go func() { -// // Do something. -// wg.Done() -// }() -// } -// wg.Wait() -// type WaitGroup struct { m Mutex counter int32 @@ -60,7 +42,7 @@ func (wg *WaitGroup) Add(delta int) { } wg.m.Lock() for i := int32(0); i < wg.waiters; i++ { - runtime.Semrelease(wg.sema) + runtime_Semrelease(wg.sema) } wg.waiters = 0 wg.sema = nil @@ -93,5 +75,5 @@ func (wg *WaitGroup) Wait() { } s := wg.sema wg.m.Unlock() - runtime.Semacquire(s) + runtime_Semacquire(s) } diff --git a/libgo/go/syscall/exec_bsd.go b/libgo/go/syscall/exec_bsd.go index 68143536182..f1f7a188de2 100644 --- a/libgo/go/syscall/exec_bsd.go +++ b/libgo/go/syscall/exec_bsd.go @@ -38,8 +38,10 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr i int ) - // guard against side effects of shuffling fds below. - fd := append([]int(nil), attr.Files...) + fd := make([]int, len(attr.Files)) + for i, ufd := range attr.Files { + fd[i] = int(ufd) + } // About to call fork. // No more allocation or calls of non-assembly functions. diff --git a/libgo/go/syscall/exec_linux.go b/libgo/go/syscall/exec_linux.go index cc3cfdb0805..a6c4427a59f 100644 --- a/libgo/go/syscall/exec_linux.go +++ b/libgo/go/syscall/exec_linux.go @@ -21,7 +21,7 @@ type SysProcAttr struct { Setpgid bool // Set process group ID to new pid (SYSV setpgrp) Setctty bool // Set controlling terminal to fd 0 Noctty bool // Detach fd 0 from controlling terminal - Pdeathsig int // Signal that the process will get when its parent dies (Linux only) + Pdeathsig Signal // Signal that the process will get when its parent dies (Linux only) } // Fork, dup fd onto 0..len(fd), and exec(argv0, argvv, envv) in child. @@ -43,7 +43,10 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr ) // guard against side effects of shuffling fds below. - fd := append([]int(nil), attr.Files...) + fd := make([]int, len(attr.Files)) + for i, ufd := range attr.Files { + fd[i] = int(ufd) + } // About to call fork. // No more allocation or calls of non-assembly functions. @@ -61,7 +64,7 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr // Parent death signal if sys.Pdeathsig != 0 { - _, err1 = raw_prctl(PR_SET_PDEATHSIG, sys.Pdeathsig, 0, 0, 0) + _, err1 = raw_prctl(PR_SET_PDEATHSIG, int(sys.Pdeathsig), 0, 0, 0) if err1 != 0 { goto childerror } diff --git a/libgo/go/syscall/exec_unix.go b/libgo/go/syscall/exec_unix.go index 49441f8e1c4..664908d1310 100644 --- a/libgo/go/syscall/exec_unix.go +++ b/libgo/go/syscall/exec_unix.go @@ -141,9 +141,9 @@ type Credential struct { // ProcAttr holds attributes that will be applied to a new process started // by StartProcess. type ProcAttr struct { - Dir string // Current working directory. - Env []string // Environment. - Files []int // File descriptors. + Dir string // Current working directory. + Env []string // Environment. + Files []uintptr // File descriptors. Sys *SysProcAttr } diff --git a/libgo/go/syscall/exec_windows.go b/libgo/go/syscall/exec_windows.go index 6cb25a7d00a..4dc4d059d7e 100644 --- a/libgo/go/syscall/exec_windows.go +++ b/libgo/go/syscall/exec_windows.go @@ -220,7 +220,7 @@ func joinExeDirAndFName(dir, p string) (name string, err error) { type ProcAttr struct { Dir string Env []string - Files []Handle + Files []uintptr Sys *SysProcAttr } diff --git a/libgo/go/syscall/libcall_linux.go b/libgo/go/syscall/libcall_linux.go index aa1440118e3..bb960731f75 100644 --- a/libgo/go/syscall/libcall_linux.go +++ b/libgo/go/syscall/libcall_linux.go @@ -160,27 +160,23 @@ func PtraceAttach(pid int) (err error) { return ptrace(PTRACE_ATTACH, pid, 0, 0) func PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) } -// FIXME: mksysinfo needs to produce LINUX_REBOOT_MAGIC[12]. - -// //sys reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) -// //reboot(magic1 uint, magic2 uint, cmd int, arg *byte) int -// func Reboot(cmd int) (err error) { -// return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, "") -// } +//sys reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) +//reboot(magic1 uint, magic2 uint, cmd int, arg *byte) int +func Reboot(cmd int) (err error) { + return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, "") +} //sys Acct(path string) (err error) //acct(path *byte) int -// FIXME: mksysinfo Timex -// //sys Adjtimex(buf *Timex) (state int, err error) -// //adjtimex(buf *Timex) int +//sys Adjtimex(buf *Timex) (state int, err error) +//adjtimex(buf *Timex) int //sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) //faccessat(dirfd int, pathname *byte, mode int, flags int) int -// FIXME: Only in glibc 2.10 and later. -// //sys Fallocate(fd int, mode uint32, off int64, len int64) (err error) -// //fallocate(fd int, mode int, offset Offset_t, len Offset_t) int +//sys Fallocate(fd int, mode uint32, off int64, len int64) (err error) +//fallocate(fd int, mode int, offset Offset_t, len Offset_t) int //sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) //fchmodat(dirfd int, pathname *byte, mode Mode_t, flags int) int @@ -191,19 +187,64 @@ func PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) //sys Flock(fd int, how int) (err error) //flock(fd int, how int) int -// FIXME: mksysinfo statfs -// //sys Fstatfs(fd int, buf *Statfs_t) (err error) -// //fstatfs(fd int, buf *Statfs_t) int +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//fstatfs(fd int, buf *Statfs_t) int func Gettid() (tid int) { r1, _, _ := Syscall(SYS_GETTID, 0, 0, 0) return int(r1) } -// FIXME: mksysinfo linux_dirent -// Or just abandon this function. -// //sys Getdents(fd int, buf []byte) (n int, err error) -// //getdents64(fd int, buf *byte, count uint) +func Getdents(fd int, buf []byte) (n int, err error) { + var p *byte + if len(buf) > 0 { + p = &buf[0] + } else { + p = (*byte)(unsafe.Pointer(&_zero)) + } + entersyscall() + r1, _, errno := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(len(buf))) + n = int(r1) + if n < 0 { + err = errno + } + exitsyscall() + return +} + +func clen(n []byte) int { + for i := 0; i < len(n); i++ { + if n[i] == 0 { + return i + } + } + return len(n) +} + +func ReadDirent(fd int, buf []byte) (n int, err error) { + return Getdents(fd, buf) +} + +func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { + origlen := len(buf) + count = 0 + for max != 0 && len(buf) > 0 { + dirent := (*Dirent)(unsafe.Pointer(&buf[0])) + buf = buf[dirent.Reclen:] + if dirent.Ino == 0 { // File absent in directory. + continue + } + bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0])) + var name = string(bytes[0:clen(bytes[:])]) + if name == "." || name == ".." { // Useless names + continue + } + max-- + count++ + names = append(names, name) + } + return origlen - len(buf), count, names +} //sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) //inotify_add_watch(fd int, pathname *byte, mask uint32) int @@ -211,9 +252,8 @@ func Gettid() (tid int) { //sysnb InotifyInit() (fd int, err error) //inotify_init() int -// FIXME: Only in glibc 2.9 and later. -// //sysnb InotifyInit1(flags int) (fd int, err error) -// //inotify_init1(flags int) int +//sysnb InotifyInit1(flags int) (fd int, err error) +//inotify_init1(flags int) int //sysnb InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) //inotify_rm_watch(fd int, wd uint32) int @@ -283,24 +323,25 @@ func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n i return } -// FIXME: mksysinfo statfs -// //sys Statfs(path string, buf *Statfs_t) (err error) -// //statfs(path *byte, buf *Statfs_t) int +//sys Statfs(path string, buf *Statfs_t) (err error) +//statfs(path *byte, buf *Statfs_t) int -// FIXME: Only in glibc 2.6 and later. -// //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) -// //sync_file_range(fd int, off Offset_t, n Offset_t, flags uint) int +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sync_file_range(fd int, off Offset_t, n Offset_t, flags uint) int -// FIXME: mksysinfo Sysinfo_t -// //sysnb Sysinfo(info *Sysinfo_t) (err error) -// //sysinfo(info *Sysinfo_t) int +//sysnb Sysinfo(info *Sysinfo_t) (err error) +//sysinfo(info *Sysinfo_t) int //sys Tee(rfd int, wfd int, len int, flags int) (n int64, err error) //tee(rfd int, wfd int, len Size_t, flags uint) Ssize_t -// FIXME: Only available as a syscall. -// //sysnb Tgkill(tgid int, tid int, sig int) (err error) -// //tgkill(tgid int, tid int, sig int) int +func Tgkill(tgid, tid, sig Signal) error { + r1, _, errno := Syscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if r1 < 0 { + return errno + } + return nil +} //sys unlinkat(dirfd int, path string, flags int) (err error) //unlinkat(dirfd int, path *byte, flags int) int @@ -315,6 +356,5 @@ func Unlinkat(dirfd int, path string) (err error) { //sys Unshare(flags int) (err error) //unshare(flags int) int -// FIXME: mksysinfo Ustat_t -// //sys Ustat(dev int, ubuf *Ustat_t) (err error) -// //ustat(dev _dev_t, ubuf *Ustat_t) int +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//ustat(dev _dev_t, ubuf *Ustat_t) int diff --git a/libgo/go/syscall/libcall_posix.go b/libgo/go/syscall/libcall_posix.go index 1226c1cfbd4..92feae0c102 100644 --- a/libgo/go/syscall/libcall_posix.go +++ b/libgo/go/syscall/libcall_posix.go @@ -61,6 +61,18 @@ func Getwd() (ret string, err error) { } } +func Getcwd(buf []byte) (n int, err error) { + err = getcwd(&buf[0], Size_t(len(buf))) + if err == nil { + i := 0 + for buf[i] != 0 { + i++ + } + n = i + 1 + } + return +} + //sysnb getgroups(size int, list *Gid_t) (nn int, err error) //getgroups(size int, list *Gid_t) int @@ -116,8 +128,8 @@ func (w WaitStatus) Stopped() bool func (w WaitStatus) Continued() bool func (w WaitStatus) CoreDump() bool func (w WaitStatus) ExitStatus() int -func (w WaitStatus) Signal() int -func (w WaitStatus) StopSignal() int +func (w WaitStatus) Signal() Signal +func (w WaitStatus) StopSignal() Signal func (w WaitStatus) TrapCause() int //sys Mkfifo(path string, mode uint32) (err error) @@ -226,9 +238,8 @@ func FDZero(set *FdSet) { //sysnb Getppid() (ppid int) //getppid() Pid_t -// FIXME: mksysinfo Rlimit -// //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) -// //getrlimit(resource int, rlim *Rlimit) int +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//getrlimit(resource int, rlim *Rlimit) int //sysnb Getrusage(who int, rusage *Rusage) (err error) //getrusage(who int, rusage *Rusage) int @@ -242,7 +253,7 @@ func Gettimeofday(tv *Timeval) (err error) { //sysnb Getuid() (uid int) //getuid() Uid_t -//sysnb Kill(pid int, sig int) (err error) +//sysnb Kill(pid int, sig Signal) (err error) //kill(pid Pid_t, sig int) int //sys Lchown(path string, uid int, gid int) (err error) @@ -296,9 +307,8 @@ func Gettimeofday(tv *Timeval) (err error) { //sysnb Setreuid(ruid int, euid int) (err error) //setreuid(ruid Uid_t, euid Uid_t) int -// FIXME: mksysinfo Rlimit -// //sysnb Setrlimit(resource int, rlim *Rlimit) (err error) -// //setrlimit(resource int, rlim *Rlimit) int +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//setrlimit(resource int, rlim *Rlimit) int //sysnb Setsid() (pid int, err error) //setsid() Pid_t @@ -319,9 +329,8 @@ func Settimeofday(tv *Timeval) (err error) { //sys Sync() //sync() -// FIXME: mksysinfo Time_t -// //sysnb Time(t *Time_t) (tt Time_t, err error) -// //time(t *Time_t) Time_t +//sysnb Time(t *Time_t) (tt Time_t, err error) +//time(t *Time_t) Time_t //sysnb Times(tms *Tms) (ticks uintptr, err error) //times(tms *Tms) _clock_t @@ -332,9 +341,8 @@ func Settimeofday(tv *Timeval) (err error) { //sys Unlink(path string) (err error) //unlink(path *byte) int -// FIXME: mksysinfo Utimbuf -// //sys Utime(path string, buf *Utimbuf) (err error) -// //utime(path *byte, buf *Utimbuf) int +//sys Utime(path string, buf *Utimbuf) (err error) +//utime(path *byte, buf *Utimbuf) int //sys Write(fd int, p []byte) (n int, err error) //write(fd int, buf *byte, count Size_t) Ssize_t diff --git a/libgo/go/syscall/lsf_linux.go b/libgo/go/syscall/lsf_linux.go index 05d653b4aa0..5296cec9c6e 100644 --- a/libgo/go/syscall/lsf_linux.go +++ b/libgo/go/syscall/lsf_linux.go @@ -69,10 +69,10 @@ func AttachLsf(fd int, i []SockFilter) error { var p SockFprog p.Len = uint16(len(i)) p.Filter = (*SockFilter)(unsafe.Pointer(&i[0])) - return setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, uintptr(unsafe.Pointer(&p)), unsafe.Sizeof(p)) + return setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, (*byte)(unsafe.Pointer(&p)), Socklen_t(unsafe.Sizeof(p))) } func DetachLsf(fd int) error { var dummy int - return setsockopt(fd, SOL_SOCKET, SO_DETACH_FILTER, uintptr(unsafe.Pointer(&dummy)), unsafe.Sizeof(dummy)) + return setsockopt(fd, SOL_SOCKET, SO_DETACH_FILTER, (*byte)(unsafe.Pointer(&dummy)), Socklen_t(unsafe.Sizeof(dummy))) } diff --git a/libgo/go/syscall/signame.c b/libgo/go/syscall/signame.c new file mode 100644 index 00000000000..f2ff85a9a02 --- /dev/null +++ b/libgo/go/syscall/signame.c @@ -0,0 +1,40 @@ +/* signame.c -- get the name of a signal + + Copyright 2012 The Go Authors. All rights reserved. + Use of this source code is governed by a BSD-style + license that can be found in the LICENSE file. */ + +#include <string.h> + +#include "config.h" +#include "runtime.h" +#include "arch.h" +#include "malloc.h" + +String Signame (int sig) asm ("libgo_syscall.syscall.Signame"); + +String +Signame (int sig) +{ + const char* s = NULL; + char buf[100]; + size_t len; + unsigned char *data; + String ret; + +#if defined(HAVE_STRSIGNAL) + s = strsignal (sig); +#endif + + if (s == NULL) + { + snprintf(buf, sizeof buf, "signal %d", sig); + s = buf; + } + len = __builtin_strlen (s); + data = runtime_mallocgc (len, FlagNoPointers, 0, 0); + __builtin_memcpy (data, s, len); + ret.__data = data; + ret.__length = len; + return ret; +} diff --git a/libgo/go/syscall/socket.go b/libgo/go/syscall/socket.go index 7a2e95ca2a2..6d36e3985f3 100644 --- a/libgo/go/syscall/socket.go +++ b/libgo/go/syscall/socket.go @@ -217,6 +217,13 @@ func Socketpair(domain, typ, proto int) (fd [2]int, err error) { //sys getsockopt(s int, level int, name int, val uintptr, vallen *Socklen_t) (err error) //getsockopt(s int, level int, name int, val *byte, vallen *Socklen_t) int +func GetsockoptByte(fd, level, opt int) (value byte, err error) { + var n byte + vallen := Socklen_t(1) + err = getsockopt(fd, level, opt, uintptr(unsafe.Pointer(&n)), &vallen) + return n, err +} + func GetsockoptInt(fd, level, opt int) (value int, err error) { var n int32 vallen := Socklen_t(4) @@ -254,6 +261,11 @@ func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) { //sys setsockopt(s int, level int, name int, val *byte, vallen Socklen_t) (err error) //setsockopt(s int, level int, optname int, val *byte, vallen Socklen_t) int +func SetsockoptByte(fd, level, opt int, value byte) (err error) { + var n = byte(value) + return setsockopt(fd, level, opt, (*byte)(unsafe.Pointer(&n)), 1) +} + func SetsockoptInt(fd, level, opt int, value int) (err error) { var n = int32(value) return setsockopt(fd, level, opt, (*byte)(unsafe.Pointer(&n)), 4) diff --git a/libgo/go/syscall/syscall_unix.go b/libgo/go/syscall/syscall_unix.go index 98e7d689f77..85182b764b0 100644 --- a/libgo/go/syscall/syscall_unix.go +++ b/libgo/go/syscall/syscall_unix.go @@ -163,3 +163,15 @@ func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, e func Munmap(b []byte) (err error) { return mapper.Munmap(b) } + +// A Signal is a number describing a process signal. +// It implements the os.Signal interface. +type Signal int + +func (s Signal) Signal() {} + +func Signame(s Signal) string + +func (s Signal) String() string { + return Signame(s) +} diff --git a/libgo/go/testing/benchmark.go b/libgo/go/testing/benchmark.go index 0bf567b7c4d..41290594ee2 100644 --- a/libgo/go/testing/benchmark.go +++ b/libgo/go/testing/benchmark.go @@ -16,7 +16,7 @@ var matchBenchmarks = flag.String("test.bench", "", "regular expression to selec var benchTime = flag.Float64("test.benchtime", 1, "approximate run time for each benchmark, in seconds") // An internal type but exported because it is cross-package; part of the implementation -// of gotest. +// of the "go test" command. type InternalBenchmark struct { Name string F func(b *B) @@ -213,7 +213,7 @@ func (r BenchmarkResult) String() string { } // An internal function but exported because it is cross-package; part of the implementation -// of gotest. +// of the "go test" command. func RunBenchmarks(matchString func(pat, str string) (bool, error), benchmarks []InternalBenchmark) { // If no flag was specified, don't run benchmarks. if len(*matchBenchmarks) == 0 { @@ -281,7 +281,7 @@ func (b *B) trimOutput() { } // Benchmark benchmarks a single function. Useful for creating -// custom benchmarks that do not use gotest. +// custom benchmarks that do not use the "go test" command. func Benchmark(f func(b *B)) BenchmarkResult { b := &B{ common: common{ diff --git a/libgo/go/testing/example.go b/libgo/go/testing/example.go index 7f8ff2d0541..671c798760b 100644 --- a/libgo/go/testing/example.go +++ b/libgo/go/testing/example.go @@ -19,7 +19,7 @@ type InternalExample struct { Output string } -func RunExamples(examples []InternalExample) (ok bool) { +func RunExamples(matchString func(pat, str string) (bool, error), examples []InternalExample) (ok bool) { ok = true var eg InternalExample @@ -27,6 +27,14 @@ func RunExamples(examples []InternalExample) (ok bool) { stdout, stderr := os.Stdout, os.Stderr for _, eg = range examples { + matched, err := matchString(*match, eg.Name) + if err != nil { + fmt.Fprintf(os.Stderr, "testing: invalid regexp for -test.run: %s\n", err) + os.Exit(1) + } + if !matched { + continue + } if *chatty { fmt.Printf("=== RUN: %s\n", eg.Name) } diff --git a/libgo/go/testing/iotest/reader.go b/libgo/go/testing/iotest/reader.go index ab8dc31a1f7..441b9102d94 100644 --- a/libgo/go/testing/iotest/reader.go +++ b/libgo/go/testing/iotest/reader.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package iotest implements Readers and Writers useful only for testing. +// Package iotest implements Readers and Writers useful mainly for testing. package iotest import ( diff --git a/libgo/go/testing/quick/quick.go b/libgo/go/testing/quick/quick.go index f94c541f2ba..24270982281 100644 --- a/libgo/go/testing/quick/quick.go +++ b/libgo/go/testing/quick/quick.go @@ -50,7 +50,7 @@ const complexSize = 50 // Value returns an arbitrary value of the given type. // If the type implements the Generator interface, that will be used. -// Note: in order to create arbitrary values for structs, all the members must be public. +// Note: To create arbitrary values for structs, all the fields must be exported. func Value(t reflect.Type, rand *rand.Rand) (value reflect.Value, ok bool) { if m, ok := reflect.Zero(t).Interface().(Generator); ok { return m.Generate(rand, complexSize), true @@ -155,9 +155,10 @@ type Config struct { // If non-nil, rand is a source of random numbers. Otherwise a default // pseudo-random source will be used. Rand *rand.Rand - // If non-nil, Values is a function which generates a slice of arbitrary - // Values that are congruent with the arguments to the function being - // tested. Otherwise, Values is used to generate the values. + // If non-nil, the Values function generates a slice of arbitrary + // reflect.Values that are congruent with the arguments to the function + // being tested. Otherwise, the top-level Values function is used + // to generate them. Values func([]reflect.Value, *rand.Rand) } diff --git a/libgo/go/testing/script/script.go b/libgo/go/testing/script/script.go deleted file mode 100644 index d8f8093af90..00000000000 --- a/libgo/go/testing/script/script.go +++ /dev/null @@ -1,358 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package script aids in the testing of code that uses channels. -package script - -import ( - "fmt" - "math/rand" - "reflect" - "strings" -) - -// An Event is an element in a partially ordered set that either sends a value -// to a channel or expects a value from a channel. -type Event struct { - name string - occurred bool - predecessors []*Event - action action -} - -type action interface { - // getSend returns nil if the action is not a send action. - getSend() sendAction - // getRecv returns nil if the action is not a receive action. - getRecv() recvAction - // getChannel returns the channel that the action operates on. - getChannel() interface{} -} - -type recvAction interface { - recvMatch(interface{}) bool -} - -type sendAction interface { - send() -} - -// isReady returns true if all the predecessors of an Event have occurred. -func (e Event) isReady() bool { - for _, predecessor := range e.predecessors { - if !predecessor.occurred { - return false - } - } - - return true -} - -// A Recv action reads a value from a channel and uses reflect.DeepMatch to -// compare it with an expected value. -type Recv struct { - Channel interface{} - Expected interface{} -} - -func (r Recv) getRecv() recvAction { return r } - -func (Recv) getSend() sendAction { return nil } - -func (r Recv) getChannel() interface{} { return r.Channel } - -func (r Recv) recvMatch(chanEvent interface{}) bool { - c, ok := chanEvent.(channelRecv) - if !ok || c.channel != r.Channel { - return false - } - - return reflect.DeepEqual(c.value, r.Expected) -} - -// A RecvMatch action reads a value from a channel and calls a function to -// determine if the value matches. -type RecvMatch struct { - Channel interface{} - Match func(interface{}) bool -} - -func (r RecvMatch) getRecv() recvAction { return r } - -func (RecvMatch) getSend() sendAction { return nil } - -func (r RecvMatch) getChannel() interface{} { return r.Channel } - -func (r RecvMatch) recvMatch(chanEvent interface{}) bool { - c, ok := chanEvent.(channelRecv) - if !ok || c.channel != r.Channel { - return false - } - - return r.Match(c.value) -} - -// A Closed action matches if the given channel is closed. The closing is -// treated as an event, not a state, thus Closed will only match once for a -// given channel. -type Closed struct { - Channel interface{} -} - -func (r Closed) getRecv() recvAction { return r } - -func (Closed) getSend() sendAction { return nil } - -func (r Closed) getChannel() interface{} { return r.Channel } - -func (r Closed) recvMatch(chanEvent interface{}) bool { - c, ok := chanEvent.(channelClosed) - if !ok || c.channel != r.Channel { - return false - } - - return true -} - -// A Send action sends a value to a channel. The value must match the -// type of the channel exactly unless the channel if of type chan interface{}. -type Send struct { - Channel interface{} - Value interface{} -} - -func (Send) getRecv() recvAction { return nil } - -func (s Send) getSend() sendAction { return s } - -func (s Send) getChannel() interface{} { return s.Channel } - -type empty struct { - x interface{} -} - -func newEmptyInterface(e empty) reflect.Value { - return reflect.ValueOf(e).Field(0) -} - -func (s Send) send() { - // With reflect.ChanValue.Send, we must match the types exactly. So, if - // s.Channel is a chan interface{} we convert s.Value to an interface{} - // first. - c := reflect.ValueOf(s.Channel) - var v reflect.Value - if iface := c.Type().Elem(); iface.Kind() == reflect.Interface && iface.NumMethod() == 0 { - v = newEmptyInterface(empty{s.Value}) - } else { - v = reflect.ValueOf(s.Value) - } - c.Send(v) -} - -// A Close action closes the given channel. -type Close struct { - Channel interface{} -} - -func (Close) getRecv() recvAction { return nil } - -func (s Close) getSend() sendAction { return s } - -func (s Close) getChannel() interface{} { return s.Channel } - -func (s Close) send() { reflect.ValueOf(s.Channel).Close() } - -// A ReceivedUnexpected error results if no active Events match a value -// received from a channel. -type ReceivedUnexpected struct { - Value interface{} - ready []*Event -} - -func (r ReceivedUnexpected) Error() string { - names := make([]string, len(r.ready)) - for i, v := range r.ready { - names[i] = v.name - } - return fmt.Sprintf("received unexpected value on one of the channels: %#v. Runnable events: %s", r.Value, strings.Join(names, ", ")) -} - -// A SetupError results if there is a error with the configuration of a set of -// Events. -type SetupError string - -func (s SetupError) Error() string { return string(s) } - -func NewEvent(name string, predecessors []*Event, action action) *Event { - e := &Event{name, false, predecessors, action} - return e -} - -// Given a set of Events, Perform repeatedly iterates over the set and finds the -// subset of ready Events (that is, all of their predecessors have -// occurred). From that subset, it pseudo-randomly selects an Event to perform. -// If the Event is a send event, the send occurs and Perform recalculates the ready -// set. If the event is a receive event, Perform waits for a value from any of the -// channels that are contained in any of the events. That value is then matched -// against the ready events. The first event that matches is considered to -// have occurred and Perform recalculates the ready set. -// -// Perform continues this until all Events have occurred. -// -// Note that uncollected goroutines may still be reading from any of the -// channels read from after Perform returns. -// -// For example, consider the problem of testing a function that reads values on -// one channel and echos them to two output channels. To test this we would -// create three events: a send event and two receive events. Each of the -// receive events must list the send event as a predecessor but there is no -// ordering between the receive events. -// -// send := NewEvent("send", nil, Send{c, 1}) -// recv1 := NewEvent("recv 1", []*Event{send}, Recv{c, 1}) -// recv2 := NewEvent("recv 2", []*Event{send}, Recv{c, 1}) -// Perform(0, []*Event{send, recv1, recv2}) -// -// At first, only the send event would be in the ready set and thus Perform will -// send a value to the input channel. Now the two receive events are ready and -// Perform will match each of them against the values read from the output channels. -// -// It would be invalid to list one of the receive events as a predecessor of -// the other. At each receive step, all the receive channels are considered, -// thus Perform may see a value from a channel that is not in the current ready -// set and fail. -func Perform(seed int64, events []*Event) (err error) { - r := rand.New(rand.NewSource(seed)) - - channels, err := getChannels(events) - if err != nil { - return - } - multiplex := make(chan interface{}) - for _, channel := range channels { - go recvValues(multiplex, channel) - } - -Outer: - for { - ready, err := readyEvents(events) - if err != nil { - return err - } - - if len(ready) == 0 { - // All events occurred. - break - } - - event := ready[r.Intn(len(ready))] - if send := event.action.getSend(); send != nil { - send.send() - event.occurred = true - continue - } - - v := <-multiplex - for _, event := range ready { - if recv := event.action.getRecv(); recv != nil && recv.recvMatch(v) { - event.occurred = true - continue Outer - } - } - - return ReceivedUnexpected{v, ready} - } - - return nil -} - -// getChannels returns all the channels listed in any receive events. -func getChannels(events []*Event) ([]interface{}, error) { - channels := make([]interface{}, len(events)) - - j := 0 - for _, event := range events { - if recv := event.action.getRecv(); recv == nil { - continue - } - c := event.action.getChannel() - if reflect.ValueOf(c).Kind() != reflect.Chan { - return nil, SetupError("one of the channel values is not a channel") - } - - duplicate := false - for _, other := range channels[0:j] { - if c == other { - duplicate = true - break - } - } - - if !duplicate { - channels[j] = c - j++ - } - } - - return channels[0:j], nil -} - -// recvValues is a multiplexing helper function. It reads values from the given -// channel repeatedly, wrapping them up as either a channelRecv or -// channelClosed structure, and forwards them to the multiplex channel. -func recvValues(multiplex chan<- interface{}, channel interface{}) { - c := reflect.ValueOf(channel) - - for { - v, ok := c.Recv() - if !ok { - multiplex <- channelClosed{channel} - return - } - - multiplex <- channelRecv{channel, v.Interface()} - } -} - -type channelClosed struct { - channel interface{} -} - -type channelRecv struct { - channel interface{} - value interface{} -} - -// readyEvents returns the subset of events that are ready. -func readyEvents(events []*Event) ([]*Event, error) { - ready := make([]*Event, len(events)) - - j := 0 - eventsWaiting := false - for _, event := range events { - if event.occurred { - continue - } - - eventsWaiting = true - if event.isReady() { - ready[j] = event - j++ - } - } - - if j == 0 && eventsWaiting { - names := make([]string, len(events)) - for _, event := range events { - if event.occurred { - continue - } - names[j] = event.name - } - - return nil, SetupError("dependency cycle in events. These events are waiting to run but cannot: " + strings.Join(names, ", ")) - } - - return ready[0:j], nil -} diff --git a/libgo/go/testing/script/script_test.go b/libgo/go/testing/script/script_test.go deleted file mode 100644 index e9ab142c2b1..00000000000 --- a/libgo/go/testing/script/script_test.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package script - -import ( - "testing" -) - -func TestNoop(t *testing.T) { - err := Perform(0, nil) - if err != nil { - t.Errorf("Got error: %s", err) - } -} - -func TestSimple(t *testing.T) { - c := make(chan int) - defer close(c) - - a := NewEvent("send", nil, Send{c, 1}) - b := NewEvent("recv", []*Event{a}, Recv{c, 1}) - - err := Perform(0, []*Event{a, b}) - if err != nil { - t.Errorf("Got error: %s", err) - } -} - -func TestFail(t *testing.T) { - c := make(chan int) - defer close(c) - - a := NewEvent("send", nil, Send{c, 2}) - b := NewEvent("recv", []*Event{a}, Recv{c, 1}) - - err := Perform(0, []*Event{a, b}) - if err == nil { - t.Errorf("Failed to get expected error") - } else if _, ok := err.(ReceivedUnexpected); !ok { - t.Errorf("Error returned was of the wrong type: %s", err) - } -} - -func TestClose(t *testing.T) { - c := make(chan int) - - a := NewEvent("close", nil, Close{c}) - b := NewEvent("closed", []*Event{a}, Closed{c}) - - err := Perform(0, []*Event{a, b}) - if err != nil { - t.Errorf("Got error: %s", err) - } -} - -func matchOne(v interface{}) bool { - if i, ok := v.(int); ok && i == 1 { - return true - } - return false -} - -func TestRecvMatch(t *testing.T) { - c := make(chan int) - - a := NewEvent("send", nil, Send{c, 1}) - b := NewEvent("recv", []*Event{a}, RecvMatch{c, matchOne}) - - err := Perform(0, []*Event{a, b}) - if err != nil { - t.Errorf("Got error: %s", err) - } -} diff --git a/libgo/go/testing/testing.go b/libgo/go/testing/testing.go index 68ecebb36f4..7072262a91d 100644 --- a/libgo/go/testing/testing.go +++ b/libgo/go/testing/testing.go @@ -12,8 +12,8 @@ // // Functions of the form // func BenchmarkXxx(*testing.B) -// are considered benchmarks, and are executed by gotest when the -test.bench -// flag is provided. +// are considered benchmarks, and are executed by the "go test" command when +// the -test.bench flag is provided. // // A sample benchmark function looks like this: // func BenchmarkHello(b *testing.B) { @@ -38,16 +38,25 @@ // } // } // -// The package also runs and verifies example code. Example functions -// include an introductory comment that is compared with the standard output -// of the function when the tests are run, as in this example of an example: +// The package also runs and verifies example code. Example functions may +// include a concluding comment that begins with "Output:" and is compared with +// the standard output of the function when the tests are run, as in these +// examples of an example: // -// // hello // func ExampleHello() { // fmt.Println("hello") +// // Output: hello // } // -// Example functions without comments are compiled but not executed. +// func ExampleSalutations() { +// fmt.Println("hello, and") +// fmt.Println("goodbye") +// // Output: +// // hello, and +// // goodbye +// } +// +// Example functions without output comments are compiled but not executed. // // The naming convention to declare examples for a function F, a type T and // method M on type T are: @@ -64,9 +73,13 @@ // func ExampleT_suffix() { ... } // func ExampleT_M_suffix() { ... } // +// The entire test file is presented as the example when it contains a single +// example function, at least one other function, type, variable, or constant +// declaration, and no test or benchmark functions. package testing import ( + _ "debug/elf" "flag" "fmt" "os" @@ -81,13 +94,13 @@ var ( // The short flag requests that tests run more quickly, but its functionality // is provided by test writers themselves. The testing package is just its // home. The all.bash installation script sets it to make installation more - // efficient, but by default the flag is off so a plain "gotest" will do a + // efficient, but by default the flag is off so a plain "go test" will do a // full test of the package. short = flag.Bool("test.short", false, "run smaller test suite to save time") // Report as tests are run; default is silent for success. chatty = flag.Bool("test.v", false, "verbose: print additional output") - match = flag.String("test.run", "", "regular expression to select tests to run") + match = flag.String("test.run", "", "regular expression to select tests and examples to run") memProfile = flag.String("test.memprofile", "", "write a memory profile to the named file after execution") memProfileRate = flag.Int("test.memprofilerate", 0, "if >=0, sets runtime.MemProfileRate") cpuProfile = flag.String("test.cpuprofile", "", "write a cpu profile to the named file during execution") @@ -162,7 +175,7 @@ func (c *common) Fail() { c.failed = true } func (c *common) Failed() bool { return c.failed } // FailNow marks the function as having failed and stops its execution. -// Execution will continue at the next Test. +// Execution will continue at the next test or benchmark. func (c *common) FailNow() { c.Fail() @@ -225,19 +238,6 @@ func (c *common) Fatalf(format string, args ...interface{}) { c.FailNow() } -// TODO(dsymonds): Consider hooking into runtime·traceback instead. -func (c *common) stack() { - for i := 2; ; i++ { // Caller we care about is the user, 2 frames up - pc, file, line, ok := runtime.Caller(i) - f := runtime.FuncForPC(pc) - if !ok || f == nil { - break - } - c.Logf("%s:%d (0x%x)", file, line, pc) - c.Logf("\t%s", f.Name()) - } -} - // Parallel signals that this test is to be run in parallel with (and only with) // other parallel tests in this CPU group. func (t *T) Parallel() { @@ -246,7 +246,7 @@ func (t *T) Parallel() { } // An internal type but exported because it is cross-package; part of the implementation -// of gotest. +// of the "go test" command. type InternalTest struct { Name string F func(*T) @@ -260,14 +260,12 @@ func tRunner(t *T, test *InternalTest) { // a call to runtime.Goexit, record the duration and send // a signal saying that the test is done. defer func() { - // Consider any uncaught panic a failure. + t.duration = time.Now().Sub(t.start) + // If the test panicked, print any test output before dying. if err := recover(); err != nil { - t.failed = true - t.Log(err) - t.stack() + t.report() + panic(err) } - - t.duration = time.Now().Sub(t.start) t.signal <- t }() @@ -275,7 +273,7 @@ func tRunner(t *T, test *InternalTest) { } // An internal function but exported because it is cross-package; part of the implementation -// of gotest. +// of the "go test" command. func Main(matchString func(pat, str string) (bool, error), tests []InternalTest, benchmarks []InternalBenchmark, examples []InternalExample) { flag.Parse() parseCpuList() @@ -283,7 +281,7 @@ func Main(matchString func(pat, str string) (bool, error), tests []InternalTest, before() startAlarm() testOk := RunTests(matchString, tests) - exampleOk := RunExamples(examples) + exampleOk := RunExamples(matchString, examples) if !testOk || !exampleOk { fmt.Println("FAIL") os.Exit(1) diff --git a/libgo/go/text/scanner/scanner.go b/libgo/go/text/scanner/scanner.go index f46f63d0ee6..565650edf9c 100644 --- a/libgo/go/text/scanner/scanner.go +++ b/libgo/go/text/scanner/scanner.go @@ -5,8 +5,7 @@ // Package scanner provides a scanner and tokenizer for UTF-8-encoded text. // It takes an io.Reader providing the source, which then can be tokenized // through repeated calls to the Scan function. For compatibility with -// existing tools, the NUL character is not allowed (implementation -// restriction). +// existing tools, the NUL character is not allowed. // // By default, a Scanner skips white space and Go comments and recognizes all // literals as defined by the Go language specification. It may be @@ -104,7 +103,7 @@ var tokenString = map[rune]string{ Comment: "Comment", } -// TokenString returns a (visible) string for a token or Unicode character. +// TokenString returns a printable string for a token or Unicode character. func TokenString(tok rune) string { if s, found := tokenString[tok]; found { return s @@ -287,7 +286,7 @@ func (s *Scanner) next() rune { // special situations switch ch { case 0: - // implementation restriction for compatibility with other tools + // for compatibility with other tools s.error("illegal character NUL") case '\n': s.line++ diff --git a/libgo/go/text/tabwriter/example_test.go b/libgo/go/text/tabwriter/example_test.go new file mode 100644 index 00000000000..20443cb1ffb --- /dev/null +++ b/libgo/go/text/tabwriter/example_test.go @@ -0,0 +1,38 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package tabwriter_test + +import ( + "fmt" + "os" + "text/tabwriter" +) + +func ExampleWriter_Init() { + w := new(tabwriter.Writer) + + // Format in tab-separated columns with a tab stop of 8. + w.Init(os.Stdout, 0, 8, 0, '\t', 0) + fmt.Fprintln(w, "a\tb\tc\td\t.") + fmt.Fprintln(w, "123\t12345\t1234567\t123456789\t.") + fmt.Fprintln(w) + w.Flush() + + // Format right-aligned in space-separated columns of minimal width 5 + // and at least one blank of padding (so wider column entries do not + // touch each other). + w.Init(os.Stdout, 5, 0, 1, ' ', tabwriter.AlignRight) + fmt.Fprintln(w, "a\tb\tc\td\t.") + fmt.Fprintln(w, "123\t12345\t1234567\t123456789\t.") + fmt.Fprintln(w) + w.Flush() + + // output: + // a b c d . + // 123 12345 1234567 123456789 . + // + // a b c d. + // 123 12345 1234567 123456789. +} diff --git a/libgo/go/text/tabwriter/tabwriter.go b/libgo/go/text/tabwriter/tabwriter.go index ea7c4008111..ce84600d604 100644 --- a/libgo/go/text/tabwriter/tabwriter.go +++ b/libgo/go/text/tabwriter/tabwriter.go @@ -169,12 +169,6 @@ const ( // to the tab width in the viewer displaying the result) // flags formatting control // -// To format in tab-separated columns with a tab stop of 8: -// b.Init(w, 8, 1, 8, '\t', 0); -// -// To format in space-separated columns with at least 4 spaces between columns: -// b.Init(w, 0, 4, 8, ' ', 0); -// func (b *Writer) Init(output io.Writer, minwidth, tabwidth, padding int, padchar byte, flags uint) *Writer { if minwidth < 0 || tabwidth < 0 || padding < 0 { panic("negative minwidth, tabwidth, or padding") diff --git a/libgo/go/text/tabwriter/tabwriter_test.go b/libgo/go/text/tabwriter/tabwriter_test.go index 1ffb330d432..ace53564737 100644 --- a/libgo/go/text/tabwriter/tabwriter_test.go +++ b/libgo/go/text/tabwriter/tabwriter_test.go @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package tabwriter +package tabwriter_test import ( "io" "testing" + . "text/tabwriter" ) type buffer struct { diff --git a/libgo/go/text/template/doc.go b/libgo/go/text/template/doc.go index 3be1ec44e69..10e0f7fc373 100644 --- a/libgo/go/text/template/doc.go +++ b/libgo/go/text/template/doc.go @@ -3,8 +3,10 @@ // license that can be found in the LICENSE file. /* -Package template implements data-driven templates for generating textual output -such as HTML. +Package template implements data-driven templates for generating textual output. + +To generate HTML output, see package html/template, which has the same interface +as this package but automatically secures HTML output against certain attacks. Templates are executed by applying them to a data structure. Annotations in the template refer to elements of the data structure (typically a field of a struct @@ -20,6 +22,20 @@ Actions may not span newlines, although comments can. Once constructed, a template may be executed safely in parallel. +Here is a trivial example that prints "17 items are made of wool". + + type Inventory struct { + Material string + Count uint + } + sweaters := Inventory{"wool", 17} + tmpl, err := template.New("test").Parse("{{.Count}} items are made of {{.Material}}") + if err != nil { panic(err) } + err = tmpl.Execute(os.Stdout, sweaters) + if err != nil { panic(err) } + +More intricate examples appear below. + Actions Here is the list of actions. "Arguments" and "pipelines" are evaluations of @@ -134,6 +150,10 @@ An argument is a simple value, denoted by one of the following. Arguments may evaluate to any type; if they are pointers the implementation automatically indirects to the base type when required. +If an evaluation yields a function value, such as a function-valued +field of a struct, the function is not invoked automatically, but it +can be used as a truth value for an if action and the like. To invoke +it, use the call function, defined below. A pipeline is a possibly chained sequence of "commands". A command is a simple value (argument) or a function or method call, possibly with multiple arguments: @@ -233,6 +253,17 @@ Predefined global functions are named as follows. first empty argument or the last argument, that is, "and x y" behaves as "if x then y else x". All the arguments are evaluated. + call + Returns the result of calling the first argument, which + must be a function, with the remaining arguments as parameters. + Thus "call .X.Y 1 2" is, in Go notation, dot.X.Y(1, 2) where + Y is a func-valued field, map entry, or the like. + The first argument must be the result of an evaluation + that yields a value of function type (as distinct from + a predefined function such as print). The function must + return either one or two result values, the second of which + is of type error. If the arguments don't match the function + or the returned error value is non-nil, execution stops. html Returns the escaped HTML equivalent of the textual representation of its arguments. @@ -301,7 +332,7 @@ produce the text By construction, a template may reside in only one association. If it's necessary to have a template addressable from multiple associations, the template definition must be parsed multiple times to create distinct *Template -values. +values, or must be copied with the Clone or AddParseTree method. Parse may be called multiple times to assemble the various associated templates; see the ParseFiles and ParseGlob functions and methods for simple ways to parse diff --git a/libgo/go/text/template/exec.go b/libgo/go/text/template/exec.go index 973189a8a62..ad0118e4e68 100644 --- a/libgo/go/text/template/exec.go +++ b/libgo/go/text/template/exec.go @@ -419,10 +419,11 @@ func (s *state) evalField(dot reflect.Value, fieldName string, args []parse.Node tField, ok := receiver.Type().FieldByName(fieldName) if ok { field := receiver.FieldByIndex(tField.Index) - if hasArgs { - s.errorf("%s is not a method but has arguments", fieldName) - } if tField.PkgPath == "" { // field is exported + // If it's a function, we must call it. + if hasArgs { + s.errorf("%s has arguments but cannot be invoked as function", fieldName) + } return field } } diff --git a/libgo/go/text/template/exec_test.go b/libgo/go/text/template/exec_test.go index 2070cefde73..70ab39cad20 100644 --- a/libgo/go/text/template/exec_test.go +++ b/libgo/go/text/template/exec_test.go @@ -9,7 +9,6 @@ import ( "errors" "flag" "fmt" - "os" "reflect" "strings" "testing" @@ -60,6 +59,10 @@ type T struct { PI *int PSI *[]int NIL *int + // Function (not method) + BinaryFunc func(string, string) string + VariadicFunc func(...string) string + VariadicFuncInt func(int, ...string) string // Template to test evaluation of templates. Tmpl *Template } @@ -119,6 +122,9 @@ var tVal = &T{ Err: errors.New("erroozle"), PI: newInt(23), PSI: newIntSlice(21, 22, 23), + BinaryFunc: func(a, b string) string { return fmt.Sprintf("[%s=%s]", a, b) }, + VariadicFunc: func(s ...string) string { return fmt.Sprint("<", strings.Join(s, "+"), ">") }, + VariadicFuncInt: func(a int, s ...string) string { return fmt.Sprint(a, "=<", strings.Join(s, "+"), ">") }, Tmpl: Must(New("x").Parse("test template")), // "x" is the value of .X } @@ -168,10 +174,12 @@ func (t *T) MAdd(a int, b []int) []int { return v } -// EPERM returns a value and an error according to its argument. -func (t *T) EPERM(error bool) (bool, error) { +var myError = errors.New("my error") + +// MyError returns a value and an error according to its argument. +func (t *T) MyError(error bool) (bool, error) { if error { - return true, os.EPERM + return true, myError } return false, nil } @@ -296,8 +304,26 @@ var execTests = []execTest{ "{{with $x := .}}{{with .SI}}{{$.GetU.TrueFalse $.True}}{{end}}{{end}}", "true", tVal, true}, + // Function call builtin. + {".BinaryFunc", "{{call .BinaryFunc `1` `2`}}", "[1=2]", tVal, true}, + {".VariadicFunc0", "{{call .VariadicFunc}}", "<>", tVal, true}, + {".VariadicFunc2", "{{call .VariadicFunc `he` `llo`}}", "<he+llo>", tVal, true}, + {".VariadicFuncInt", "{{call .VariadicFuncInt 33 `he` `llo`}}", "33=<he+llo>", tVal, true}, + {"if .BinaryFunc call", "{{ if .BinaryFunc}}{{call .BinaryFunc `1` `2`}}{{end}}", "[1=2]", tVal, true}, + {"if not .BinaryFunc call", "{{ if not .BinaryFunc}}{{call .BinaryFunc `1` `2`}}{{else}}No{{end}}", "No", tVal, true}, + + // Erroneous function calls (check args). + {".BinaryFuncTooFew", "{{call .BinaryFunc `1`}}", "", tVal, false}, + {".BinaryFuncTooMany", "{{call .BinaryFunc `1` `2` `3`}}", "", tVal, false}, + {".BinaryFuncBad0", "{{call .BinaryFunc 1 3}}", "", tVal, false}, + {".BinaryFuncBad1", "{{call .BinaryFunc `1` 3}}", "", tVal, false}, + {".VariadicFuncBad0", "{{call .VariadicFunc 3}}", "", tVal, false}, + {".VariadicFuncIntBad0", "{{call .VariadicFuncInt}}", "", tVal, false}, + {".VariadicFuncIntBad`", "{{call .VariadicFuncInt `x`}}", "", tVal, false}, + // Pipelines. {"pipeline", "-{{.Method0 | .Method2 .U16}}-", "-Method2: 16 M0-", tVal, true}, + {"pipeline func", "-{{call .VariadicFunc `llo` | call .VariadicFunc `he` }}-", "-<he+<llo>>-", tVal, true}, // If. {"if true", "{{if true}}TRUE{{end}}", "TRUE", tVal, true}, @@ -417,8 +443,8 @@ var execTests = []execTest{ {"or as if false", `{{or .SIEmpty "slice is empty"}}`, "slice is empty", tVal, true}, // Error handling. - {"error method, error", "{{.EPERM true}}", "", tVal, false}, - {"error method, no error", "{{.EPERM false}}", "false", tVal, true}, + {"error method, error", "{{.MyError true}}", "", tVal, false}, + {"error method, no error", "{{.MyError false}}", "false", tVal, true}, // Fixed bugs. // Must separate dot and receiver; otherwise args are evaluated with dot set to variable. @@ -565,18 +591,18 @@ func TestDelims(t *testing.T) { func TestExecuteError(t *testing.T) { b := new(bytes.Buffer) tmpl := New("error") - _, err := tmpl.Parse("{{.EPERM true}}") + _, err := tmpl.Parse("{{.MyError true}}") if err != nil { t.Fatalf("parse error: %s", err) } err = tmpl.Execute(b, tVal) if err == nil { t.Errorf("expected error; got none") - } else if !strings.Contains(err.Error(), os.EPERM.Error()) { + } else if !strings.Contains(err.Error(), myError.Error()) { if *debug { fmt.Printf("test execute error: %s\n", err) } - t.Errorf("expected os.EPERM; got %s", err) + t.Errorf("expected myError; got %s", err) } } diff --git a/libgo/go/text/template/funcs.go b/libgo/go/text/template/funcs.go index d6e4bf1a216..525179cb499 100644 --- a/libgo/go/text/template/funcs.go +++ b/libgo/go/text/template/funcs.go @@ -24,6 +24,7 @@ type FuncMap map[string]interface{} var builtins = FuncMap{ "and": and, + "call": call, "html": HTMLEscaper, "index": index, "js": JSEscaper, @@ -151,6 +152,53 @@ func length(item interface{}) (int, error) { return 0, fmt.Errorf("len of type %s", v.Type()) } +// Function invocation + +// call returns the result of evaluating the the first argument as a function. +// The function must return 1 result, or 2 results, the second of which is an error. +func call(fn interface{}, args ...interface{}) (interface{}, error) { + v := reflect.ValueOf(fn) + typ := v.Type() + if typ.Kind() != reflect.Func { + return nil, fmt.Errorf("non-function of type %s", typ) + } + if !goodFunc(typ) { + return nil, fmt.Errorf("function called with %d args; should be 1 or 2", typ.NumOut()) + } + numIn := typ.NumIn() + var dddType reflect.Type + if typ.IsVariadic() { + if len(args) < numIn-1 { + return nil, fmt.Errorf("wrong number of args: got %d want at least %d", len(args), numIn-1) + } + dddType = typ.In(numIn - 1).Elem() + } else { + if len(args) != numIn { + return nil, fmt.Errorf("wrong number of args: got %d want %d", len(args), numIn) + } + } + argv := make([]reflect.Value, len(args)) + for i, arg := range args { + value := reflect.ValueOf(arg) + // Compute the expected type. Clumsy because of variadics. + var argType reflect.Type + if !typ.IsVariadic() || i < numIn-1 { + argType = typ.In(i) + } else { + argType = dddType + } + if !value.Type().AssignableTo(argType) { + return nil, fmt.Errorf("arg %d has type %s; should be %s", i, value.Type(), argType) + } + argv[i] = reflect.ValueOf(arg) + } + result := v.Call(argv) + if len(result) == 2 { + return result[0].Interface(), result[1].Interface().(error) + } + return result[0].Interface(), nil +} + // Boolean logic. func truth(a interface{}) bool { diff --git a/libgo/go/text/template/multi_test.go b/libgo/go/text/template/multi_test.go index 274f5ef1477..22dedc4f839 100644 --- a/libgo/go/text/template/multi_test.go +++ b/libgo/go/text/template/multi_test.go @@ -193,7 +193,7 @@ func TestClone(t *testing.T) { if err != nil { t.Fatal(err) } - clone := root.Clone() + clone := Must(root.Clone()) // Add variants to both. _, err = root.Parse(cloneText3) if err != nil { @@ -265,6 +265,12 @@ func TestRedefinition(t *testing.T) { if tmpl, err = New("tmpl1").Parse(`{{define "test"}}foo{{end}}`); err != nil { t.Fatalf("parse 1: %v", err) } + if _, err = tmpl.Parse(`{{define "test"}}bar{{end}}`); err == nil { + t.Fatal("expected error") + } + if !strings.Contains(err.Error(), "redefinition") { + t.Fatalf("expected redefinition error; got %v", err) + } if _, err = tmpl.New("tmpl2").Parse(`{{define "test"}}bar{{end}}`); err == nil { t.Fatal("expected error") } diff --git a/libgo/go/text/template/parse/lex.go b/libgo/go/text/template/parse/lex.go index 97c19a160b0..54e75ee0ca2 100644 --- a/libgo/go/text/template/parse/lex.go +++ b/libgo/go/text/template/parse/lex.go @@ -187,7 +187,7 @@ func (l *lexer) lineNumber() int { } // error returns an error token and terminates the scan by passing -// back a nil pointer that will be the next state, terminating l.run. +// back a nil pointer that will be the next state, terminating l.nextItem. func (l *lexer) errorf(format string, args ...interface{}) stateFn { l.items <- item{itemError, fmt.Sprintf(format, args...)} return nil diff --git a/libgo/go/text/template/parse/node.go b/libgo/go/text/template/parse/node.go index 0d030b8b4be..db645624c56 100644 --- a/libgo/go/text/template/parse/node.go +++ b/libgo/go/text/template/parse/node.go @@ -17,6 +17,10 @@ import ( type Node interface { Type() NodeType String() string + // Copy does a deep copy of the Node and all its components. + // To avoid type assertions, some XxxNodes also have specialized + // CopyXxx methods that return *XxxNode. + Copy() Node } // NodeType identifies the type of a parse tree node. @@ -73,6 +77,21 @@ func (l *ListNode) String() string { return b.String() } +func (l *ListNode) CopyList() *ListNode { + if l == nil { + return l + } + n := newList() + for _, elem := range l.Nodes { + n.append(elem.Copy()) + } + return n +} + +func (l *ListNode) Copy() Node { + return l.CopyList() +} + // TextNode holds plain text. type TextNode struct { NodeType @@ -87,6 +106,10 @@ func (t *TextNode) String() string { return fmt.Sprintf("%q", t.Text) } +func (t *TextNode) Copy() Node { + return &TextNode{NodeType: NodeText, Text: append([]byte{}, t.Text...)} +} + // PipeNode holds a pipeline with optional declaration type PipeNode struct { NodeType @@ -123,6 +146,25 @@ func (p *PipeNode) String() string { return s } +func (p *PipeNode) CopyPipe() *PipeNode { + if p == nil { + return p + } + var decl []*VariableNode + for _, d := range p.Decl { + decl = append(decl, d.Copy().(*VariableNode)) + } + n := newPipeline(p.Line, decl) + for _, c := range p.Cmds { + n.append(c.Copy().(*CommandNode)) + } + return n +} + +func (p *PipeNode) Copy() Node { + return p.CopyPipe() +} + // ActionNode holds an action (something bounded by delimiters). // Control actions have their own nodes; ActionNode represents simple // ones such as field evaluations. @@ -141,6 +183,11 @@ func (a *ActionNode) String() string { } +func (a *ActionNode) Copy() Node { + return newAction(a.Line, a.Pipe.CopyPipe()) + +} + // CommandNode holds a command (a pipeline inside an evaluating action). type CommandNode struct { NodeType @@ -166,6 +213,17 @@ func (c *CommandNode) String() string { return s } +func (c *CommandNode) Copy() Node { + if c == nil { + return c + } + n := newCommand() + for _, c := range c.Args { + n.append(c.Copy()) + } + return n +} + // IdentifierNode holds an identifier. type IdentifierNode struct { NodeType @@ -181,6 +239,10 @@ func (i *IdentifierNode) String() string { return i.Ident } +func (i *IdentifierNode) Copy() Node { + return NewIdentifier(i.Ident) +} + // VariableNode holds a list of variable names. The dollar sign is // part of the name. type VariableNode struct { @@ -203,6 +265,10 @@ func (v *VariableNode) String() string { return s } +func (v *VariableNode) Copy() Node { + return &VariableNode{NodeType: NodeVariable, Ident: append([]string{}, v.Ident...)} +} + // DotNode holds the special identifier '.'. It is represented by a nil pointer. type DotNode bool @@ -218,6 +284,10 @@ func (d *DotNode) String() string { return "." } +func (d *DotNode) Copy() Node { + return newDot() +} + // FieldNode holds a field (identifier starting with '.'). // The names may be chained ('.x.y'). // The period is dropped from each ident. @@ -238,6 +308,10 @@ func (f *FieldNode) String() string { return s } +func (f *FieldNode) Copy() Node { + return &FieldNode{NodeType: NodeField, Ident: append([]string{}, f.Ident...)} +} + // BoolNode holds a boolean constant. type BoolNode struct { NodeType @@ -255,6 +329,10 @@ func (b *BoolNode) String() string { return "false" } +func (b *BoolNode) Copy() Node { + return newBool(b.True) +} + // NumberNode holds a number: signed or unsigned integer, float, or complex. // The value is parsed and stored under all the types that can represent the value. // This simulates in a small amount of code the behavior of Go's ideal constants. @@ -373,6 +451,12 @@ func (n *NumberNode) String() string { return n.Text } +func (n *NumberNode) Copy() Node { + nn := new(NumberNode) + *nn = *n // Easy, fast, correct. + return nn +} + // StringNode holds a string constant. The value has been "unquoted". type StringNode struct { NodeType @@ -388,6 +472,10 @@ func (s *StringNode) String() string { return s.Quoted } +func (s *StringNode) Copy() Node { + return newString(s.Quoted, s.Text) +} + // endNode represents an {{end}} action. It is represented by a nil pointer. // It does not appear in the final parse tree. type endNode bool @@ -404,6 +492,10 @@ func (e *endNode) String() string { return "{{end}}" } +func (e *endNode) Copy() Node { + return newEnd() +} + // elseNode represents an {{else}} action. Does not appear in the final tree. type elseNode struct { NodeType @@ -422,6 +514,10 @@ func (e *elseNode) String() string { return "{{else}}" } +func (e *elseNode) Copy() Node { + return newElse(e.Line) +} + // BranchNode is the common representation of if, range, and with. type BranchNode struct { NodeType @@ -458,6 +554,10 @@ func newIf(line int, pipe *PipeNode, list, elseList *ListNode) *IfNode { return &IfNode{BranchNode{NodeType: NodeIf, Line: line, Pipe: pipe, List: list, ElseList: elseList}} } +func (i *IfNode) Copy() Node { + return newIf(i.Line, i.Pipe.CopyPipe(), i.List.CopyList(), i.ElseList.CopyList()) +} + // RangeNode represents a {{range}} action and its commands. type RangeNode struct { BranchNode @@ -467,6 +567,10 @@ func newRange(line int, pipe *PipeNode, list, elseList *ListNode) *RangeNode { return &RangeNode{BranchNode{NodeType: NodeRange, Line: line, Pipe: pipe, List: list, ElseList: elseList}} } +func (r *RangeNode) Copy() Node { + return newRange(r.Line, r.Pipe.CopyPipe(), r.List.CopyList(), r.ElseList.CopyList()) +} + // WithNode represents a {{with}} action and its commands. type WithNode struct { BranchNode @@ -476,6 +580,10 @@ func newWith(line int, pipe *PipeNode, list, elseList *ListNode) *WithNode { return &WithNode{BranchNode{NodeType: NodeWith, Line: line, Pipe: pipe, List: list, ElseList: elseList}} } +func (w *WithNode) Copy() Node { + return newWith(w.Line, w.Pipe.CopyPipe(), w.List.CopyList(), w.ElseList.CopyList()) +} + // TemplateNode represents a {{template}} action. type TemplateNode struct { NodeType @@ -494,3 +602,7 @@ func (t *TemplateNode) String() string { } return fmt.Sprintf("{{template %q %s}}", t.Name, t.Pipe) } + +func (t *TemplateNode) Copy() Node { + return newTemplate(t.Line, t.Name, t.Pipe.CopyPipe()) +} diff --git a/libgo/go/text/template/parse/parse.go b/libgo/go/text/template/parse/parse.go index 4da756657d5..d67b3888085 100644 --- a/libgo/go/text/template/parse/parse.go +++ b/libgo/go/text/template/parse/parse.go @@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package parse builds parse trees for templates. The grammar is defined -// in the documents for the template package. +// Package parse builds parse trees for templates as defined by text/template +// and html/template. Clients should use those packages to construct templates +// rather than this one, which provides shared internal data structures not +// intended for general use. package parse import ( @@ -191,6 +193,8 @@ func (t *Tree) add(treeSet map[string]*Tree) { // IsEmptyTree reports whether this tree (node) is empty of everything but space. func IsEmptyTree(n Node) bool { switch n := n.(type) { + case nil: + return true case *ActionNode: case *IfNode: case *ListNode: diff --git a/libgo/go/text/template/parse/parse_test.go b/libgo/go/text/template/parse/parse_test.go index 13c5548abbf..18c0a8b835e 100644 --- a/libgo/go/text/template/parse/parse_test.go +++ b/libgo/go/text/template/parse/parse_test.go @@ -232,7 +232,7 @@ var builtins = map[string]interface{}{ "printf": fmt.Sprintf, } -func TestParse(t *testing.T) { +func testParse(doCopy bool, t *testing.T) { for _, test := range parseTests { tmpl, err := New(test.name).Parse(test.input, "", "", make(map[string]*Tree), builtins) switch { @@ -249,13 +249,27 @@ func TestParse(t *testing.T) { } continue } - result := tmpl.Root.String() + var result string + if doCopy { + result = tmpl.Root.Copy().String() + } else { + result = tmpl.Root.String() + } if result != test.result { t.Errorf("%s=(%q): got\n\t%v\nexpected\n\t%v", test.name, test.input, result, test.result) } } } +func TestParse(t *testing.T) { + testParse(false, t) +} + +// Same as TestParse, but we copy the node first +func TestParseCopy(t *testing.T) { + testParse(true, t) +} + type isEmptyTest struct { name string input string @@ -273,6 +287,9 @@ var isEmptyTests = []isEmptyTest{ } func TestIsEmpty(t *testing.T) { + if !IsEmptyTree(nil) { + t.Errorf("nil tree is not empty") + } for _, test := range isEmptyTests { tree, err := New("root").Parse(test.input, "", "", make(map[string]*Tree), nil) if err != nil { diff --git a/libgo/go/text/template/template.go b/libgo/go/text/template/template.go index 87e39d3af74..82fc9e5e39d 100644 --- a/libgo/go/text/template/template.go +++ b/libgo/go/text/template/template.go @@ -69,9 +69,9 @@ func (t *Template) init() { // templates. The actual representation is not copied, but the name space of // associated templates is, so further calls to Parse in the copy will add // templates to the copy but not to the original. Clone can be used to prepare -// common templates and use them with variant definitions for other templates by -// adding the variants after the clone is made. -func (t *Template) Clone() *Template { +// common templates and use them with variant definitions for other templates +// by adding the variants after the clone is made. +func (t *Template) Clone() (*Template, error) { nt := t.copy(nil) nt.init() nt.tmpl[t.name] = nt @@ -89,7 +89,7 @@ func (t *Template) Clone() *Template { for k, v := range t.execFuncs { nt.execFuncs[k] = v } - return nt + return nt, nil } // copy returns a shallow copy of t, with common set to the argument. @@ -178,10 +178,11 @@ func (t *Template) Parse(text string) (*Template, error) { tmpl = t.New(name) } // Even if t == tmpl, we need to install it in the common.tmpl map. - if err := t.associate(tmpl); err != nil { + if replace, err := t.associate(tmpl, tree); err != nil { return nil, err + } else if replace { + tmpl.Tree = tree } - tmpl.Tree = tree tmpl.leftDelim = t.leftDelim tmpl.rightDelim = t.rightDelim } @@ -191,22 +192,23 @@ func (t *Template) Parse(text string) (*Template, error) { // associate installs the new template into the group of templates associated // with t. It is an error to reuse a name except to overwrite an empty // template. The two are already known to share the common structure. -func (t *Template) associate(new *Template) error { +// The boolean return value reports wither to store this tree as t.Tree. +func (t *Template) associate(new *Template, tree *parse.Tree) (bool, error) { if new.common != t.common { panic("internal error: associate not common") } name := new.name if old := t.tmpl[name]; old != nil { oldIsEmpty := parse.IsEmptyTree(old.Root) - newIsEmpty := new.Tree != nil && parse.IsEmptyTree(new.Root) - if !oldIsEmpty && !newIsEmpty { - return fmt.Errorf("template: redefinition of template %q", name) - } + newIsEmpty := parse.IsEmptyTree(tree.Root) if newIsEmpty { // Whether old is empty or not, new is empty; no reason to replace old. - return nil + return false, nil + } + if !oldIsEmpty { + return false, fmt.Errorf("template: redefinition of template %q", name) } } t.tmpl[name] = new - return nil + return true, nil } diff --git a/libgo/go/time/example_test.go b/libgo/go/time/example_test.go index 153b1a3b660..944cc789c31 100644 --- a/libgo/go/time/example_test.go +++ b/libgo/go/time/example_test.go @@ -51,8 +51,8 @@ func ExampleMonth() { } } -// Go launched at Tue Nov 10 15:00:00 -0800 PST 2009 func ExampleDate() { t := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC) fmt.Printf("Go launched at %s\n", t.Local()) + // Output: Go launched at 2009-11-10 15:00:00 -0800 PST } diff --git a/libgo/go/time/format.go b/libgo/go/time/format.go index 76bf6ff4194..ad52bab216f 100644 --- a/libgo/go/time/format.go +++ b/libgo/go/time/format.go @@ -6,28 +6,25 @@ package time import "errors" -const ( - numeric = iota - alphabetic - separator - plus - minus -) - // These are predefined layouts for use in Time.Format. // The standard time used in the layouts is: -// Mon Jan 2 15:04:05 MST 2006 (MST is GMT-0700) -// which is Unix time 1136243045. -// (Think of it as 01/02 03:04:05PM '06 -0700.) -// To define your own format, write down what the standard -// time would look like formatted your way. +// Mon Jan 2 15:04:05 MST 2006 +// which is Unix time 1136243045. Since MST is GMT-0700, +// the standard time can be thought of as +// 01/02 03:04:05PM '06 -0700 +// To define your own format, write down what the standard time would look +// like formatted your way; see the values of constants like ANSIC, +// StampMicro or Kitchen for examples. // // Within the format string, an underscore _ represents a space that may be // replaced by a digit if the following number (a day) has two digits; for // compatibility with fixed-width Unix time formats. // // A decimal point followed by one or more zeros represents a fractional -// second. When parsing (only), the input may contain a fractional second +// second, printed to the given number of decimal places. A decimal point +// followed by one or more nines represents a fractional second, printed to +// the given number of decimal places, with trailing zeros removed. +// When parsing (only), the input may contain a fractional second // field immediately after the seconds field, even if the layout does not // signify its presence. In that case a decimal point followed by a maximal // series of digits is parsed as a fractional second. @@ -41,16 +38,17 @@ const ( // Z0700 Z or ±hhmm // Z07:00 Z or ±hh:mm const ( - ANSIC = "Mon Jan _2 15:04:05 2006" - UnixDate = "Mon Jan _2 15:04:05 MST 2006" - RubyDate = "Mon Jan 02 15:04:05 -0700 2006" - RFC822 = "02 Jan 06 1504 MST" - RFC822Z = "02 Jan 06 1504 -0700" // RFC822 with numeric zone - RFC850 = "Monday, 02-Jan-06 15:04:05 MST" - RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST" - RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone - RFC3339 = "2006-01-02T15:04:05Z07:00" - Kitchen = "3:04PM" + ANSIC = "Mon Jan _2 15:04:05 2006" + UnixDate = "Mon Jan _2 15:04:05 MST 2006" + RubyDate = "Mon Jan 02 15:04:05 -0700 2006" + RFC822 = "02 Jan 06 1504 MST" + RFC822Z = "02 Jan 06 1504 -0700" // RFC822 with numeric zone + RFC850 = "Monday, 02-Jan-06 15:04:05 MST" + RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST" + RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone + RFC3339 = "2006-01-02T15:04:05Z07:00" + RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00" + Kitchen = "3:04PM" // Handy time stamps. Stamp = "Jan _2 15:04:05" StampMilli = "Jan _2 15:04:05.000" @@ -165,15 +163,17 @@ func nextStdChunk(layout string) (prefix, std, suffix string) { if len(layout) >= i+6 && layout[i:i+6] == stdISO8601ColonTZ { return layout[0:i], layout[i : i+6], layout[i+6:] } - case '.': // .000 - multiple digits of zeros (only) for fractional seconds. - numZeros := 0 - var j int - for j = i + 1; j < len(layout) && layout[j] == '0'; j++ { - numZeros++ - } - // String of digits must end here - only fractional second is all zeros. - if numZeros > 0 && !isDigit(layout, j) { - return layout[0:i], layout[i : i+1+numZeros], layout[i+1+numZeros:] + case '.': // .000 or .999 - repeated digits for fractional seconds. + if i+1 < len(layout) && (layout[i+1] == '0' || layout[i+1] == '9') { + ch := layout[i+1] + j := i + 1 + for j < len(layout) && layout[j] == ch { + j++ + } + // String of digits must end here - only fractional second is all digits. + if !isDigit(layout, j) { + return layout[0:i], layout[i:j], layout[j:] + } } } } @@ -313,7 +313,7 @@ func pad(i int, padding string) string { func zeroPad(i int) string { return pad(i, "0") } // formatNano formats a fractional second, as nanoseconds. -func formatNano(nanosec, n int) string { +func formatNano(nanosec, n int, trim bool) string { // User might give us bad data. Make sure it's positive and in range. // They'll get nonsense output but it will have the right format. s := itoa(int(uint(nanosec) % 1e9)) @@ -324,13 +324,21 @@ func formatNano(nanosec, n int) string { if n > 9 { n = 9 } + if trim { + for n > 0 && s[n-1] == '0' { + n-- + } + if n == 0 { + return "" + } + } return "." + s[:n] } // String returns the time formatted using the format string -// "Mon Jan _2 15:04:05 -0700 MST 2006" +// "2006-01-02 15:04:05.999999999 -0700 MST" func (t Time) String() string { - return t.Format("Mon Jan _2 15:04:05 -0700 MST 2006") + return t.Format("2006-01-02 15:04:05.999999999 -0700 MST") } type buffer []byte @@ -345,10 +353,12 @@ func (b *buffer) String() string { // Format returns a textual representation of the time value formatted // according to layout. The layout defines the format by showing the -// representation of a standard time, which is then used to describe -// the time to be formatted. Predefined layouts ANSIC, UnixDate, -// RFC3339 and others describe standard representations. For more -// information about the formats, see the documentation for ANSIC. +// representation of the standard time, +// Mon Jan 2 15:04:05 -0700 MST 2006 +// which is then used to describe the time to be formatted. Predefined +// layouts ANSIC, UnixDate, RFC3339 and others describe standard +// representations. For more information about the formats and the +// definition of the standard time, see the documentation for ANSIC. func (t Time) Format(layout string) string { var ( year int = -1 @@ -388,7 +398,24 @@ func (t Time) Format(layout string) string { case stdYear: p = zeroPad(year % 100) case stdLongYear: + // Pad year to at least 4 digits. p = itoa(year) + switch { + case year <= -1000: + // ok + case year <= -100: + p = p[:1] + "0" + p[1:] + case year <= -10: + p = p[:1] + "00" + p[1:] + case year < 0: + p = p[:1] + "000" + p[1:] + case year < 10: + p = "000" + p + case year < 100: + p = "00" + p + case year < 1000: + p = "0" + p + } case stdMonth: p = month.String()[:3] case stdLongMonth: @@ -481,8 +508,8 @@ func (t Time) Format(layout string) string { p += zeroPad(zone % 60) } default: - if len(std) >= 2 && std[0:2] == ".0" { - p = formatNano(t.Nanosecond(), len(std)-1) + if len(std) >= 2 && (std[0:2] == ".0" || std[0:2] == ".9") { + p = formatNano(t.Nanosecond(), len(std)-1, std[1] == '9') } } b.WriteString(p) @@ -574,13 +601,15 @@ func skip(value, prefix string) (string, error) { } // Parse parses a formatted string and returns the time value it represents. -// The layout defines the format by showing the representation of a standard -// time, which is then used to describe the string to be parsed. Predefined -// layouts ANSIC, UnixDate, RFC3339 and others describe standard -// representations.For more information about the formats, see the -// documentation for ANSIC. +// The layout defines the format by showing the representation of the +// standard time, +// Mon Jan 2 15:04:05 -0700 MST 2006 +// which is then used to describe the string to be parsed. Predefined layouts +// ANSIC, UnixDate, RFC3339 and others describe standard representations. For +// more information about the formats and the definition of the standard +// time, see the documentation for ANSIC. // -// Elements omitted from the value are assumed to be zero, or when +// Elements omitted from the value are assumed to be zero or, when // zero is impossible, one, so parsing "3:04pm" returns the time // corresponding to Jan 1, year 0, 15:04:00 UTC. // Years must be in the range 0000..9999. The day of the week is checked diff --git a/libgo/go/time/sleep_test.go b/libgo/go/time/sleep_test.go index 3cb088c319f..440d3b42f12 100644 --- a/libgo/go/time/sleep_test.go +++ b/libgo/go/time/sleep_test.go @@ -108,10 +108,11 @@ func TestAfter(t *testing.T) { } func TestAfterTick(t *testing.T) { - const ( - Delta = 100 * Millisecond - Count = 10 - ) + const Count = 10 + Delta := 100 * Millisecond + if testing.Short() { + Delta = 10 * Millisecond + } t0 := Now() for i := 0; i < Count; i++ { <-After(Delta) @@ -119,8 +120,11 @@ func TestAfterTick(t *testing.T) { t1 := Now() d := t1.Sub(t0) target := Delta * Count - if d < target*9/10 || d > target*30/10 { - t.Fatalf("%d ticks of %s took %s, expected %s", Count, Delta, d, target) + if d < target*9/10 { + t.Fatalf("%d ticks of %s too fast: took %s, expected %s", Count, Delta, d, target) + } + if !testing.Short() && d > target*30/10 { + t.Fatalf("%d ticks of %s too slow: took %s, expected %s", Count, Delta, d, target) } } @@ -165,7 +169,7 @@ func TestAfterQueuing(t *testing.T) { } // For gccgo omit 0 for now because it can take too long to start the -var slots = []int{5, 3, 6, 6, 6, 1, 1, 2, 7, 9, 4, 8 /*0*/ } +var slots = []int{5, 3, 6, 6, 6, 1, 1, 2, 7, 9, 4, 8 /*0*/} type afterResult struct { slot int @@ -177,9 +181,10 @@ func await(slot int, result chan<- afterResult, ac <-chan Time) { } func testAfterQueuing(t *testing.T) error { - const ( - Delta = 100 * Millisecond - ) + Delta := 100 * Millisecond + if testing.Short() { + Delta = 20 * Millisecond + } // make the result channel buffered because we don't want // to depend on channel queueing semantics that might // possibly change in the future. diff --git a/libgo/go/time/sys_plan9.go b/libgo/go/time/sys_plan9.go index c7cfa792a29..8484729448e 100644 --- a/libgo/go/time/sys_plan9.go +++ b/libgo/go/time/sys_plan9.go @@ -6,7 +6,10 @@ package time -import "syscall" +import ( + "errors" + "syscall" +) // for testing: whatever interrupts a sleep func interrupt() { @@ -38,3 +41,36 @@ func readFile(name string) ([]byte, error) { } return ret, err } + +func open(name string) (uintptr, error) { + fd, err := syscall.Open(name, syscall.O_RDONLY) + if err != nil { + return 0, err + } + return uintptr(fd), nil +} + +func closefd(fd uintptr) { + syscall.Close(int(fd)) +} + +func preadn(fd uintptr, buf []byte, off int) error { + whence := 0 + if off < 0 { + whence = 2 + } + if _, err := syscall.Seek(int(fd), int64(off), whence); err != nil { + return err + } + for len(buf) > 0 { + m, err := syscall.Read(int(fd), buf) + if m <= 0 { + if err == nil { + return errors.New("short read") + } + return err + } + buf = buf[m:] + } + return nil +} diff --git a/libgo/go/time/sys_unix.go b/libgo/go/time/sys_unix.go index 56a7414e0ce..7f69b492c9f 100644 --- a/libgo/go/time/sys_unix.go +++ b/libgo/go/time/sys_unix.go @@ -6,7 +6,10 @@ package time -import "syscall" +import ( + "errors" + "syscall" +) // for testing: whatever interrupts a sleep func interrupt() { @@ -38,3 +41,36 @@ func readFile(name string) ([]byte, error) { } return ret, err } + +func open(name string) (uintptr, error) { + fd, err := syscall.Open(name, syscall.O_RDONLY, 0) + if err != nil { + return 0, err + } + return uintptr(fd), nil +} + +func closefd(fd uintptr) { + syscall.Close(int(fd)) +} + +func preadn(fd uintptr, buf []byte, off int) error { + whence := 0 + if off < 0 { + whence = 2 + } + if _, err := syscall.Seek(int(fd), int64(off), whence); err != nil { + return err + } + for len(buf) > 0 { + m, err := syscall.Read(int(fd), buf) + if m <= 0 { + if err == nil { + return errors.New("short read") + } + return err + } + buf = buf[m:] + } + return nil +} diff --git a/libgo/go/time/sys_windows.go b/libgo/go/time/sys_windows.go index 8c7242f4275..de63b4bf4bb 100644 --- a/libgo/go/time/sys_windows.go +++ b/libgo/go/time/sys_windows.go @@ -4,6 +4,70 @@ package time +import ( + "errors" + "syscall" +) + // for testing: whatever interrupts a sleep func interrupt() { } + +// readFile reads and returns the content of the named file. +// It is a trivial implementation of ioutil.ReadFile, reimplemented +// here to avoid depending on io/ioutil or os. +func readFile(name string) ([]byte, error) { + f, err := syscall.Open(name, syscall.O_RDONLY, 0) + if err != nil { + return nil, err + } + defer syscall.Close(f) + var ( + buf [4096]byte + ret []byte + n int + ) + for { + n, err = syscall.Read(f, buf[:]) + if n > 0 { + ret = append(ret, buf[:n]...) + } + if n == 0 || err != nil { + break + } + } + return ret, err +} + +func open(name string) (uintptr, error) { + fd, err := syscall.Open(name, syscall.O_RDONLY, 0) + if err != nil { + return 0, err + } + return uintptr(fd), nil +} + +func closefd(fd uintptr) { + syscall.Close(syscall.Handle(fd)) +} + +func preadn(fd uintptr, buf []byte, off int) error { + whence := 0 + if off < 0 { + whence = 2 + } + if _, err := syscall.Seek(syscall.Handle(fd), int64(off), whence); err != nil { + return err + } + for len(buf) > 0 { + m, err := syscall.Read(syscall.Handle(fd), buf) + if m <= 0 { + if err == nil { + return errors.New("short read") + } + return err + } + buf = buf[m:] + } + return nil +} diff --git a/libgo/go/time/tick_test.go b/libgo/go/time/tick_test.go index 36349349ce0..914f02c861c 100644 --- a/libgo/go/time/tick_test.go +++ b/libgo/go/time/tick_test.go @@ -10,10 +10,8 @@ import ( ) func TestTicker(t *testing.T) { - const ( - Delta = 100 * Millisecond - Count = 10 - ) + const Count = 10 + Delta := 100 * Millisecond ticker := NewTicker(Delta) t0 := Now() for i := 0; i < Count; i++ { @@ -39,8 +37,12 @@ func TestTicker(t *testing.T) { // Test that a bug tearing down a ticker has been fixed. This routine should not deadlock. func TestTeardown(t *testing.T) { + Delta := 100 * Millisecond + if testing.Short() { + Delta = 20 * Millisecond + } for i := 0; i < 3; i++ { - ticker := NewTicker(1e8) + ticker := NewTicker(Delta) <-ticker.C ticker.Stop() } diff --git a/libgo/go/time/time.go b/libgo/go/time/time.go index 39d4b95dd06..f7ded24d292 100644 --- a/libgo/go/time/time.go +++ b/libgo/go/time/time.go @@ -152,7 +152,7 @@ func (d Weekday) String() string { return days[d] } // rely heavily on division and modulus by positive constants. For // calendrical calculations we want these divisions to round down, even // for negative values, so that the remainder is always positive, but -// Go's division (like most hardware divison instructions) rounds to +// Go's division (like most hardware division instructions) rounds to // zero. We can still do those computations and then adjust the result // for a negative numerator, but it's annoying to write the adjustment // over and over. Instead, we can change to a different epoch so long @@ -384,6 +384,15 @@ type Duration int64 // Common durations. There is no definition for units of Day or larger // to avoid confusion across daylight savings time zone transitions. +// +// To count the number of units in a Duration, divide: +// second := time.Second +// fmt.Print(int64(second/time.Millisecond)) // prints 1000 +// +// To convert an integer number of units to a Duration, multiply: +// seconds := 10 +// fmt.Print(time.Duration(seconds)*time.Second) // prints 10s +// const ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond @@ -758,10 +767,6 @@ func (t Time) UnixNano() int64 { return (t.sec+internalToUnix)*1e9 + int64(t.nsec) } -type gobError string - -func (g gobError) Error() string { return string(g) } - const timeGobVersion byte = 1 // GobEncode implements the gob.GobEncoder interface. @@ -841,46 +846,17 @@ func (t *Time) GobDecode(buf []byte) error { // MarshalJSON implements the json.Marshaler interface. // Time is formatted as RFC3339. func (t Time) MarshalJSON() ([]byte, error) { - yearInt := t.Year() - if yearInt < 0 || yearInt > 9999 { + if y := t.Year(); y < 0 || y >= 10000 { return nil, errors.New("Time.MarshalJSON: year outside of range [0,9999]") } - - // We need a four-digit year, but Format produces variable-width years. - year := itoa(yearInt) - year = "0000"[:4-len(year)] + year - - var formattedTime string - if t.nsec == 0 { - // RFC3339, no fractional second - formattedTime = t.Format("-01-02T15:04:05Z07:00") - } else { - // RFC3339 with fractional second - formattedTime = t.Format("-01-02T15:04:05.000000000Z07:00") - - // Trim trailing zeroes from fractional second. - const nanoEnd = 24 // Index of last digit of fractional second - var i int - for i = nanoEnd; formattedTime[i] == '0'; i-- { - // Seek backwards until first significant digit is found. - } - - formattedTime = formattedTime[:i+1] + formattedTime[nanoEnd+1:] - } - - buf := make([]byte, 0, 1+len(year)+len(formattedTime)+1) - buf = append(buf, '"') - buf = append(buf, year...) - buf = append(buf, formattedTime...) - buf = append(buf, '"') - return buf, nil + return []byte(t.Format(`"` + RFC3339Nano + `"`)), nil } // UnmarshalJSON implements the json.Unmarshaler interface. // Time is expected in RFC3339 format. func (t *Time) UnmarshalJSON(data []byte) (err error) { - *t, err = Parse("\""+RFC3339+"\"", string(data)) // Fractional seconds are handled implicitly by Parse. + *t, err = Parse(`"`+RFC3339+`"`, string(data)) return } diff --git a/libgo/go/time/time_test.go b/libgo/go/time/time_test.go index cdc1c39c5f5..3430526b8bf 100644 --- a/libgo/go/time/time_test.go +++ b/libgo/go/time/time_test.go @@ -8,6 +8,7 @@ import ( "bytes" "encoding/gob" "encoding/json" + "fmt" "math/rand" "strconv" "strings" @@ -227,6 +228,7 @@ var formatTests = []FormatTest{ {"RFC1123", RFC1123, "Wed, 04 Feb 2009 21:00:57 PST"}, {"RFC1123Z", RFC1123Z, "Wed, 04 Feb 2009 21:00:57 -0800"}, {"RFC3339", RFC3339, "2009-02-04T21:00:57-08:00"}, + {"RFC3339Nano", RFC3339Nano, "2009-02-04T21:00:57.0123456-08:00"}, {"Kitchen", Kitchen, "9:00PM"}, {"am/pm", "3pm", "9pm"}, {"AM/PM", "3PM", "9PM"}, @@ -235,12 +237,12 @@ var formatTests = []FormatTest{ {"Stamp", Stamp, "Feb 4 21:00:57"}, {"StampMilli", StampMilli, "Feb 4 21:00:57.012"}, {"StampMicro", StampMicro, "Feb 4 21:00:57.012345"}, - {"StampNano", StampNano, "Feb 4 21:00:57.012345678"}, + {"StampNano", StampNano, "Feb 4 21:00:57.012345600"}, } func TestFormat(t *testing.T) { - // The numeric time represents Thu Feb 4 21:00:57.012345678 PST 2010 - time := Unix(0, 1233810057012345678) + // The numeric time represents Thu Feb 4 21:00:57.012345600 PST 2010 + time := Unix(0, 1233810057012345600) for _, test := range formatTests { result := time.Format(test.format) if result != test.result { @@ -249,6 +251,38 @@ func TestFormat(t *testing.T) { } } +func TestFormatShortYear(t *testing.T) { + years := []int{ + -100001, -100000, -99999, + -10001, -10000, -9999, + -1001, -1000, -999, + -101, -100, -99, + -11, -10, -9, + -1, 0, 1, + 9, 10, 11, + 99, 100, 101, + 999, 1000, 1001, + 9999, 10000, 10001, + 99999, 100000, 100001, + } + + for _, y := range years { + time := Date(y, January, 1, 0, 0, 0, 0, UTC) + result := time.Format("2006.01.02") + var want string + if y < 0 { + // The 4 in %04d counts the - sign, so print -y instead + // and introduce our own - sign. + want = fmt.Sprintf("-%04d.%02d.%02d", -y, 1, 1) + } else { + want = fmt.Sprintf("%04d.%02d.%02d", y, 1, 1) + } + if result != want { + t.Errorf("(jan 1 %d).Format(\"2006.01.02\") = %q, want %q", y, result, want) + } + } +} + type ParseTest struct { name string format string @@ -782,7 +816,7 @@ func TestTimeJSON(t *testing.T) { if jsonBytes, err := json.Marshal(tt.time); err != nil { t.Errorf("%v json.Marshal error = %v, want nil", tt.time, err) } else if string(jsonBytes) != tt.json { - t.Errorf("%v JSON = %q, want %q", tt.time, string(jsonBytes), tt.json) + t.Errorf("%v JSON = %#q, want %#q", tt.time, string(jsonBytes), tt.json) } else if err = json.Unmarshal(jsonBytes, &jsonTime); err != nil { t.Errorf("%v json.Unmarshal error = %v, want nil", tt.time, err) } else if !equalTimeAndZone(jsonTime, tt.time) { diff --git a/libgo/go/time/zoneinfo.go b/libgo/go/time/zoneinfo.go index aca56e746af..3c57744043e 100644 --- a/libgo/go/time/zoneinfo.go +++ b/libgo/go/time/zoneinfo.go @@ -4,7 +4,10 @@ package time -import "sync" +import ( + "sync" + "syscall" +) // A Location maps time instants to the zone in use at that time. // Typically, the Location represents the collection of time offsets @@ -168,10 +171,7 @@ func (l *Location) lookupOffset(offset int) (name string, isDST bool, ok bool) { // NOTE(rsc): Eventually we will need to accept the POSIX TZ environment // syntax too, but I don't feel like implementing it today. -// NOTE(rsc): Using the IANA names below means ensuring we have access -// to the database. Probably we will ship the files in $GOROOT/lib/zoneinfo/ -// and only look there if there are no system files available (such as on Windows). -// The files total 200 kB. +var zoneinfo, _ = syscall.Getenv("ZONEINFO") // LoadLocation returns the Location with the given name. // @@ -180,6 +180,13 @@ func (l *Location) lookupOffset(offset int) (name string, isDST bool, ok bool) { // // Otherwise, the name is taken to be a location name corresponding to a file // in the IANA Time Zone database, such as "America/New_York". +// +// The time zone database needed by LoadLocation may not be +// present on all systems, especially non-Unix systems. +// LoadLocation looks in the directory or uncompressed zip file +// named by the ZONEINFO environment variable, if any, then looks in +// known installation locations on Unix systems, +// and finally looks in $GOROOT/lib/time/zoneinfo.zip. func LoadLocation(name string) (*Location, error) { if name == "" || name == "UTC" { return UTC, nil @@ -187,5 +194,11 @@ func LoadLocation(name string) (*Location, error) { if name == "Local" { return Local, nil } + if zoneinfo != "" { + if z, err := loadZoneFile(zoneinfo, name); err == nil { + z.name = name + return z, nil + } + } return loadLocation(name) } diff --git a/libgo/go/time/zoneinfo_plan9.go b/libgo/go/time/zoneinfo_plan9.go index 9c052d42cd3..6855238dc84 100644 --- a/libgo/go/time/zoneinfo_plan9.go +++ b/libgo/go/time/zoneinfo_plan9.go @@ -8,11 +8,10 @@ package time import ( "errors" + "runtime" "syscall" ) -var badData = errors.New("malformed time zone information") - func isSpace(r rune) bool { return r == ' ' || r == '\t' || r == '\n' } @@ -51,7 +50,7 @@ func fields(s string) []string { return a } -func loadZoneData(s string) (l *Location, err error) { +func loadZoneDataPlan9(s string) (l *Location, err error) { f := fields(s) if len(f) < 4 { if len(f) == 2 && f[0] == "GMT" { @@ -112,33 +111,32 @@ func loadZoneData(s string) (l *Location, err error) { return l, nil } -func loadZoneFile(name string) (*Location, error) { +func loadZoneFilePlan9(name string) (*Location, error) { b, err := readFile(name) if err != nil { return nil, err } - return loadZoneData(string(b)) + return loadZoneDataPlan9(string(b)) } func initTestingZone() { - if z, err := loadZoneFile("/adm/timezone/US_Pacific"); err == nil { - localLoc = *z - return + z, err := loadLocation("America/Los_Angeles") + if err != nil { + panic("cannot load America/Los_Angeles for testing: " + err.Error()) } - - // Fall back to UTC. - localLoc.name = "UTC" + z.name = "Local" + localLoc = *z } func initLocal() { t, ok := syscall.Getenv("timezone") if ok { - if z, err := loadZoneData(t); err == nil { + if z, err := loadZoneDataPlan9(t); err == nil { localLoc = *z return } } else { - if z, err := loadZoneFile("/adm/timezone/local"); err == nil { + if z, err := loadZoneFilePlan9("/adm/timezone/local"); err == nil { localLoc = *z localLoc.name = "Local" return @@ -150,7 +148,8 @@ func initLocal() { } func loadLocation(name string) (*Location, error) { - if z, err := loadZoneFile("/adm/timezone/" + name); err == nil { + if z, err := loadZoneFile(runtime.GOROOT()+"/lib/time/zoneinfo.zip", name); err == nil { + z.name = name return z, nil } return nil, errors.New("unknown time zone " + name) diff --git a/libgo/go/time/zoneinfo_read.go b/libgo/go/time/zoneinfo_read.go new file mode 100644 index 00000000000..ebb4205a98f --- /dev/null +++ b/libgo/go/time/zoneinfo_read.go @@ -0,0 +1,341 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Parse "zoneinfo" time zone file. +// This is a fairly standard file format used on OS X, Linux, BSD, Sun, and others. +// See tzfile(5), http://en.wikipedia.org/wiki/Zoneinfo, +// and ftp://munnari.oz.au/pub/oldtz/ + +package time + +import "errors" + +const ( + headerSize = 4 + 16 + 4*7 +) + +// Simple I/O interface to binary blob of data. +type data struct { + p []byte + error bool +} + +func (d *data) read(n int) []byte { + if len(d.p) < n { + d.p = nil + d.error = true + return nil + } + p := d.p[0:n] + d.p = d.p[n:] + return p +} + +func (d *data) big4() (n uint32, ok bool) { + p := d.read(4) + if len(p) < 4 { + d.error = true + return 0, false + } + return uint32(p[0])<<24 | uint32(p[1])<<16 | uint32(p[2])<<8 | uint32(p[3]), true +} + +func (d *data) byte() (n byte, ok bool) { + p := d.read(1) + if len(p) < 1 { + d.error = true + return 0, false + } + return p[0], true +} + +// Make a string by stopping at the first NUL +func byteString(p []byte) string { + for i := 0; i < len(p); i++ { + if p[i] == 0 { + return string(p[0:i]) + } + } + return string(p) +} + +var badData = errors.New("malformed time zone information") + +func loadZoneData(bytes []byte) (l *Location, err error) { + d := data{bytes, false} + + // 4-byte magic "TZif" + if magic := d.read(4); string(magic) != "TZif" { + return nil, badData + } + + // 1-byte version, then 15 bytes of padding + var p []byte + if p = d.read(16); len(p) != 16 || p[0] != 0 && p[0] != '2' { + return nil, badData + } + + // six big-endian 32-bit integers: + // number of UTC/local indicators + // number of standard/wall indicators + // number of leap seconds + // number of transition times + // number of local time zones + // number of characters of time zone abbrev strings + const ( + NUTCLocal = iota + NStdWall + NLeap + NTime + NZone + NChar + ) + var n [6]int + for i := 0; i < 6; i++ { + nn, ok := d.big4() + if !ok { + return nil, badData + } + n[i] = int(nn) + } + + // Transition times. + txtimes := data{d.read(n[NTime] * 4), false} + + // Time zone indices for transition times. + txzones := d.read(n[NTime]) + + // Zone info structures + zonedata := data{d.read(n[NZone] * 6), false} + + // Time zone abbreviations. + abbrev := d.read(n[NChar]) + + // Leap-second time pairs + d.read(n[NLeap] * 8) + + // Whether tx times associated with local time types + // are specified as standard time or wall time. + isstd := d.read(n[NStdWall]) + + // Whether tx times associated with local time types + // are specified as UTC or local time. + isutc := d.read(n[NUTCLocal]) + + if d.error { // ran out of data + return nil, badData + } + + // If version == 2, the entire file repeats, this time using + // 8-byte ints for txtimes and leap seconds. + // We won't need those until 2106. + + // Now we can build up a useful data structure. + // First the zone information. + // utcoff[4] isdst[1] nameindex[1] + zone := make([]zone, n[NZone]) + for i := range zone { + var ok bool + var n uint32 + if n, ok = zonedata.big4(); !ok { + return nil, badData + } + zone[i].offset = int(n) + var b byte + if b, ok = zonedata.byte(); !ok { + return nil, badData + } + zone[i].isDST = b != 0 + if b, ok = zonedata.byte(); !ok || int(b) >= len(abbrev) { + return nil, badData + } + zone[i].name = byteString(abbrev[b:]) + } + + // Now the transition time info. + tx := make([]zoneTrans, n[NTime]) + for i := range tx { + var ok bool + var n uint32 + if n, ok = txtimes.big4(); !ok { + return nil, badData + } + tx[i].when = int64(int32(n)) + if int(txzones[i]) >= len(zone) { + return nil, badData + } + tx[i].index = txzones[i] + if i < len(isstd) { + tx[i].isstd = isstd[i] != 0 + } + if i < len(isutc) { + tx[i].isutc = isutc[i] != 0 + } + } + + // Commited to succeed. + l = &Location{zone: zone, tx: tx} + + // Fill in the cache with information about right now, + // since that will be the most common lookup. + sec, _ := now() + for i := range tx { + if tx[i].when <= sec && (i+1 == len(tx) || sec < tx[i+1].when) { + l.cacheStart = tx[i].when + l.cacheEnd = 1<<63 - 1 + if i+1 < len(tx) { + l.cacheEnd = tx[i+1].when + } + l.cacheZone = &l.zone[tx[i].index] + } + } + + return l, nil +} + +func loadZoneFile(dir, name string) (l *Location, err error) { + if len(dir) > 4 && dir[len(dir)-4:] == ".zip" { + return loadZoneZip(dir, name) + } + if dir != "" { + name = dir + "/" + name + } + buf, err := readFile(name) + if err != nil { + return + } + return loadZoneData(buf) +} + +// There are 500+ zoneinfo files. Rather than distribute them all +// individually, we ship them in an uncompressed zip file. +// Used this way, the zip file format serves as a commonly readable +// container for the individual small files. We choose zip over tar +// because zip files have a contiguous table of contents, making +// individual file lookups faster, and because the per-file overhead +// in a zip file is considerably less than tar's 512 bytes. + +// get4 returns the little-endian 32-bit value in b. +func get4(b []byte) int { + if len(b) < 4 { + return 0 + } + return int(b[0]) | int(b[1])<<8 | int(b[2])<<16 | int(b[3])<<24 +} + +// get2 returns the little-endian 16-bit value in b. +func get2(b []byte) int { + if len(b) < 2 { + return 0 + } + return int(b[0]) | int(b[1])<<8 +} + +func loadZoneZip(zipfile, name string) (l *Location, err error) { + fd, err := open(zipfile) + if err != nil { + return nil, errors.New("open " + zipfile + ": " + err.Error()) + } + defer closefd(fd) + + const ( + zecheader = 0x06054b50 + zcheader = 0x02014b50 + ztailsize = 22 + + zheadersize = 30 + zheader = 0x04034b50 + ) + + buf := make([]byte, ztailsize) + if err := preadn(fd, buf, -ztailsize); err != nil || get4(buf) != zecheader { + return nil, errors.New("corrupt zip file " + zipfile) + } + n := get2(buf[10:]) + size := get4(buf[12:]) + off := get4(buf[16:]) + + buf = make([]byte, size) + if err := preadn(fd, buf, off); err != nil { + return nil, errors.New("corrupt zip file " + zipfile) + } + + for i := 0; i < n; i++ { + // zip entry layout: + // 0 magic[4] + // 4 madevers[1] + // 5 madeos[1] + // 6 extvers[1] + // 7 extos[1] + // 8 flags[2] + // 10 meth[2] + // 12 modtime[2] + // 14 moddate[2] + // 16 crc[4] + // 20 csize[4] + // 24 uncsize[4] + // 28 namelen[2] + // 30 xlen[2] + // 32 fclen[2] + // 34 disknum[2] + // 36 iattr[2] + // 38 eattr[4] + // 42 off[4] + // 46 name[namelen] + // 46+namelen+xlen+fclen - next header + // + if get4(buf) != zcheader { + break + } + meth := get2(buf[10:]) + size := get4(buf[24:]) + namelen := get2(buf[28:]) + xlen := get2(buf[30:]) + fclen := get2(buf[32:]) + off := get4(buf[42:]) + zname := buf[46 : 46+namelen] + buf = buf[46+namelen+xlen+fclen:] + if string(zname) != name { + continue + } + if meth != 0 { + return nil, errors.New("unsupported compression for " + name + " in " + zipfile) + } + + // zip per-file header layout: + // 0 magic[4] + // 4 extvers[1] + // 5 extos[1] + // 6 flags[2] + // 8 meth[2] + // 10 modtime[2] + // 12 moddate[2] + // 14 crc[4] + // 18 csize[4] + // 22 uncsize[4] + // 26 namelen[2] + // 28 xlen[2] + // 30 name[namelen] + // 30+namelen+xlen - file data + // + buf = make([]byte, zheadersize+namelen) + if err := preadn(fd, buf, off); err != nil || + get4(buf) != zheader || + get2(buf[8:]) != meth || + get2(buf[26:]) != namelen || + string(buf[30:30+namelen]) != name { + return nil, errors.New("corrupt zip file " + zipfile) + } + xlen = get2(buf[28:]) + + buf = make([]byte, size) + if err := preadn(fd, buf, off+30+namelen+xlen); err != nil { + return nil, errors.New("corrupt zip file " + zipfile) + } + + return loadZoneData(buf) + } + + return nil, errors.New("cannot find " + name + " in zip file " + zipfile) +} diff --git a/libgo/go/time/zoneinfo_unix.go b/libgo/go/time/zoneinfo_unix.go index 540b653c57d..1bf1f11e24f 100644 --- a/libgo/go/time/zoneinfo_unix.go +++ b/libgo/go/time/zoneinfo_unix.go @@ -13,200 +13,10 @@ package time import ( "errors" + "runtime" "syscall" ) -const ( - headerSize = 4 + 16 + 4*7 -) - -// Simple I/O interface to binary blob of data. -type data struct { - p []byte - error bool -} - -func (d *data) read(n int) []byte { - if len(d.p) < n { - d.p = nil - d.error = true - return nil - } - p := d.p[0:n] - d.p = d.p[n:] - return p -} - -func (d *data) big4() (n uint32, ok bool) { - p := d.read(4) - if len(p) < 4 { - d.error = true - return 0, false - } - return uint32(p[0])<<24 | uint32(p[1])<<16 | uint32(p[2])<<8 | uint32(p[3]), true -} - -func (d *data) byte() (n byte, ok bool) { - p := d.read(1) - if len(p) < 1 { - d.error = true - return 0, false - } - return p[0], true -} - -// Make a string by stopping at the first NUL -func byteString(p []byte) string { - for i := 0; i < len(p); i++ { - if p[i] == 0 { - return string(p[0:i]) - } - } - return string(p) -} - -var badData = errors.New("malformed time zone information") - -func loadZoneData(bytes []byte) (l *Location, err error) { - d := data{bytes, false} - - // 4-byte magic "TZif" - if magic := d.read(4); string(magic) != "TZif" { - return nil, badData - } - - // 1-byte version, then 15 bytes of padding - var p []byte - if p = d.read(16); len(p) != 16 || p[0] != 0 && p[0] != '2' { - return nil, badData - } - - // six big-endian 32-bit integers: - // number of UTC/local indicators - // number of standard/wall indicators - // number of leap seconds - // number of transition times - // number of local time zones - // number of characters of time zone abbrev strings - const ( - NUTCLocal = iota - NStdWall - NLeap - NTime - NZone - NChar - ) - var n [6]int - for i := 0; i < 6; i++ { - nn, ok := d.big4() - if !ok { - return nil, badData - } - n[i] = int(nn) - } - - // Transition times. - txtimes := data{d.read(n[NTime] * 4), false} - - // Time zone indices for transition times. - txzones := d.read(n[NTime]) - - // Zone info structures - zonedata := data{d.read(n[NZone] * 6), false} - - // Time zone abbreviations. - abbrev := d.read(n[NChar]) - - // Leap-second time pairs - d.read(n[NLeap] * 8) - - // Whether tx times associated with local time types - // are specified as standard time or wall time. - isstd := d.read(n[NStdWall]) - - // Whether tx times associated with local time types - // are specified as UTC or local time. - isutc := d.read(n[NUTCLocal]) - - if d.error { // ran out of data - return nil, badData - } - - // If version == 2, the entire file repeats, this time using - // 8-byte ints for txtimes and leap seconds. - // We won't need those until 2106. - - // Now we can build up a useful data structure. - // First the zone information. - // utcoff[4] isdst[1] nameindex[1] - zone := make([]zone, n[NZone]) - for i := range zone { - var ok bool - var n uint32 - if n, ok = zonedata.big4(); !ok { - return nil, badData - } - zone[i].offset = int(n) - var b byte - if b, ok = zonedata.byte(); !ok { - return nil, badData - } - zone[i].isDST = b != 0 - if b, ok = zonedata.byte(); !ok || int(b) >= len(abbrev) { - return nil, badData - } - zone[i].name = byteString(abbrev[b:]) - } - - // Now the transition time info. - tx := make([]zoneTrans, n[NTime]) - for i := range tx { - var ok bool - var n uint32 - if n, ok = txtimes.big4(); !ok { - return nil, badData - } - tx[i].when = int64(int32(n)) - if int(txzones[i]) >= len(zone) { - return nil, badData - } - tx[i].index = txzones[i] - if i < len(isstd) { - tx[i].isstd = isstd[i] != 0 - } - if i < len(isutc) { - tx[i].isutc = isutc[i] != 0 - } - } - - // Commited to succeed. - l = &Location{zone: zone, tx: tx} - - // Fill in the cache with information about right now, - // since that will be the most common lookup. - sec, _ := now() - for i := range tx { - if tx[i].when <= sec && (i+1 == len(tx) || sec < tx[i+1].when) { - l.cacheStart = tx[i].when - l.cacheEnd = 1<<63 - 1 - if i+1 < len(tx) { - l.cacheEnd = tx[i+1].when - } - l.cacheZone = &l.zone[tx[i].index] - } - } - - return l, nil -} - -func loadZoneFile(name string) (l *Location, err error) { - buf, err := readFile(name) - if err != nil { - return - } - return loadZoneData(buf) -} - func initTestingZone() { syscall.Setenv("TZ", "America/Los_Angeles") initLocal() @@ -218,6 +28,7 @@ var zoneDirs = []string{ "/usr/share/zoneinfo/", "/usr/share/lib/zoneinfo/", "/usr/lib/locale/TZ/", + runtime.GOROOT() + "/lib/time/zoneinfo/", } func initLocal() { @@ -229,7 +40,7 @@ func initLocal() { tz, ok := syscall.Getenv("TZ") switch { case !ok: - z, err := loadZoneFile("/etc/localtime") + z, err := loadZoneFile("", "/etc/localtime") if err == nil { localLoc = *z localLoc.name = "Local" @@ -248,7 +59,7 @@ func initLocal() { func loadLocation(name string) (*Location, error) { for _, zoneDir := range zoneDirs { - if z, err := loadZoneFile(zoneDir + name); err == nil { + if z, err := loadZoneFile(zoneDir, name); err == nil { z.name = name return z, nil } diff --git a/libgo/go/time/zoneinfo_windows.go b/libgo/go/time/zoneinfo_windows.go index beef4de92b0..754e392deca 100644 --- a/libgo/go/time/zoneinfo_windows.go +++ b/libgo/go/time/zoneinfo_windows.go @@ -6,6 +6,7 @@ package time import ( "errors" + "runtime" "syscall" ) @@ -151,7 +152,10 @@ func initLocal() { initLocalFromTZI(&i) } -// TODO(rsc): Implement. func loadLocation(name string) (*Location, error) { + if z, err := loadZoneFile(runtime.GOROOT()+`\lib\time\zoneinfo.zip`, name); err == nil { + z.name = name + return z, nil + } return nil, errors.New("unknown time zone " + name) } diff --git a/libgo/go/unicode/graphic.go b/libgo/go/unicode/graphic.go index 2904da6c6d9..0de90ebd80c 100644 --- a/libgo/go/unicode/graphic.go +++ b/libgo/go/unicode/graphic.go @@ -53,7 +53,6 @@ func IsPrint(r rune) bool { } // IsOneOf reports whether the rune is a member of one of the ranges. -// The rune is known to be above Latin-1. func IsOneOf(set []*RangeTable, r rune) bool { for _, inside := range set { if Is(inside, r) { @@ -65,7 +64,7 @@ func IsOneOf(set []*RangeTable, r rune) bool { // IsControl reports whether the rune is a control character. // The C (Other) Unicode category includes more code points -// such as surrogates; use Is(C, rune) to test for them. +// such as surrogates; use Is(C, r) to test for them. func IsControl(r rune) bool { if uint32(r) <= MaxLatin1 { return properties[uint8(r)]&pC != 0 diff --git a/libgo/go/unicode/letter.go b/libgo/go/unicode/letter.go index dcc160a5b7d..be484553dc4 100644 --- a/libgo/go/unicode/letter.go +++ b/libgo/go/unicode/letter.go @@ -60,8 +60,8 @@ type CaseRange struct { // Methods of SpecialCase customize (by overriding) the standard mappings. type SpecialCase []CaseRange -//BUG(r): Provide a mechanism for full case folding (those that involve -// multiple runes in the input or output). +// BUG(r): There is no mechanism for full case folding, that is, for +// characters that involve multiple runes in the input or output. // Indices into the Delta arrays inside CaseRanges for case mapping. const ( @@ -288,7 +288,7 @@ type foldPair struct { // SimpleFold iterates over Unicode code points equivalent under // the Unicode-defined simple case folding. Among the code points // equivalent to rune (including rune itself), SimpleFold returns the -// smallest r >= rune if one exists, or else the smallest r >= 0. +// smallest rune >= r if one exists, or else the smallest rune >= 0. // // For example: // SimpleFold('A') = 'a' diff --git a/libgo/go/unicode/tables.go b/libgo/go/unicode/tables.go index 978c48ae43e..5009e6b98c8 100644 --- a/libgo/go/unicode/tables.go +++ b/libgo/go/unicode/tables.go @@ -7,7 +7,7 @@ package unicode // Version is the Unicode edition from which the tables are derived. const Version = "6.0.0" -// Categories is the set of Unicode data tables. +// Categories is the set of Unicode category tables. var Categories = map[string]*RangeTable{ "C": C, "Cc": Cc, diff --git a/libgo/go/unicode/utf8/utf8.go b/libgo/go/unicode/utf8/utf8.go index a5f9983b332..631533a5a35 100644 --- a/libgo/go/unicode/utf8/utf8.go +++ b/libgo/go/unicode/utf8/utf8.go @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. // Package utf8 implements functions and constants to support text encoded in -// UTF-8. This package calls a Unicode character a rune for brevity. +// UTF-8. It includes functions to translate between runes and UTF-8 byte sequences. package utf8 import "unicode" // only needed for a couple of constants @@ -198,19 +198,21 @@ func FullRuneInString(s string) bool { } // DecodeRune unpacks the first UTF-8 encoding in p and returns the rune and its width in bytes. +// If the encoding is invalid, it returns (RuneError, 1), an impossible result for correct UTF-8. func DecodeRune(p []byte) (r rune, size int) { r, size, _ = decodeRuneInternal(p) return } // DecodeRuneInString is like DecodeRune but its input is a string. +// If the encoding is invalid, it returns (RuneError, 1), an impossible result for correct UTF-8. func DecodeRuneInString(s string) (r rune, size int) { r, size, _ = decodeRuneInStringInternal(s) return } -// DecodeLastRune unpacks the last UTF-8 encoding in p -// and returns the rune and its width in bytes. +// DecodeLastRune unpacks the last UTF-8 encoding in p and returns the rune and its width in bytes. +// If the encoding is invalid, it returns (RuneError, 1), an impossible result for correct UTF-8. func DecodeLastRune(p []byte) (r rune, size int) { end := len(p) if end == 0 { @@ -244,6 +246,7 @@ func DecodeLastRune(p []byte) (r rune, size int) { } // DecodeLastRuneInString is like DecodeLastRune but its input is a string. +// If the encoding is invalid, it returns (RuneError, 1), an impossible result for correct UTF-8. func DecodeLastRuneInString(s string) (r rune, size int) { end := len(s) if end == 0 { diff --git a/libgo/merge.sh b/libgo/merge.sh index c8a57ca2816..32652118fe5 100755 --- a/libgo/merge.sh +++ b/libgo/merge.sh @@ -163,7 +163,7 @@ done done done -runtime="chan.c cpuprof.c goc2c.c lock_futex.c lock_sema.c mcache.c mcentral.c mfinal.c mfixalloc.c mgc0.c mheap.c msize.c proc.c runtime.c runtime.h malloc.h malloc.goc mprof.goc runtime1.goc sema.goc sigqueue.goc string.goc time.goc" +runtime="chan.c cpuprof.c goc2c.c lock_futex.c lock_sema.c mcache.c mcentral.c mfinal.c mfixalloc.c mgc0.c mheap.c msize.c proc.c runtime.c runtime.h signal_unix.c malloc.h malloc.goc mprof.goc runtime1.goc sema.goc sigqueue.goc string.goc time.goc" for f in $runtime; do merge_c $f $f done diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh index 62296b8af2f..e5f3066e26a 100755 --- a/libgo/mksysinfo.sh +++ b/libgo/mksysinfo.sh @@ -78,6 +78,7 @@ cat > sysinfo.c <<EOF #if defined(HAVE_SYS_SELECT_H) #include <sys/select.h> #endif +#include <time.h> #include <unistd.h> #include <netdb.h> #include <pwd.h> @@ -93,6 +94,30 @@ cat > sysinfo.c <<EOF #if defined(HAVE_NET_IF_H) #include <net/if.h> #endif +#if defined(HAVE_SYS_MOUNT_H) +#include <sys/mount.h> +#endif +#if defined(HAVE_SYS_VFS_H) +#include <sys/vfs.h> +#endif +#if defined(HAVE_STATFS_H) +#include <sys/statfs.h> +#endif +#if defined(HAVE_SYS_TIMEX_H) +#include <sys/timex.h> +#endif +#if defined(HAVE_SYS_SYSINFO_H) +#include <sys/sysinfo.h> +#endif +#if defined(HAVE_USTAT_H) +#include <ustat.h> +#endif +#if defined(HAVE_UTIME_H) +#include <utime.h> +#endif +#if defined(HAVE_LINUX_REBOOT_H) +#include <linux/reboot.h> +#endif /* Constants that may only be defined as expressions on some systems, expressions too complex for -fdump-go-spec to handle. These are @@ -147,7 +172,7 @@ fi # The signal numbers. grep '^const _SIG[^_]' gen-sysinfo.go | \ grep -v '^const _SIGEV_' | \ - sed -e 's/^\(const \)_\(SIG[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} + sed -e 's/^\(const \)_\(SIG[^= ]*\)\(.*\)$/\1\2 = Signal(_\2)/' >> ${OUT} # The syscall numbers. We force the names to upper case. grep '^const _SYS_' gen-sysinfo.go | \ @@ -166,6 +191,8 @@ grep '^const _PROT_' gen-sysinfo.go | \ sed -e 's/^\(const \)_\(PROT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} grep '^const _MAP_' gen-sysinfo.go | \ sed -e 's/^\(const \)_\(MAP_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} +grep '^const _MADV_' gen-sysinfo.go | \ + sed -e 's/^\(const \)_\(MADV_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} # Process status constants. grep '^const _W' gen-sysinfo.go | @@ -330,6 +357,11 @@ if grep "^// type _upad128_t" gen-sysinfo.go > /dev/null 2>&1; then echo "type _upad128_t struct { _l [4]uint32; }" >> ${OUT} fi +# The time_t type. +if grep '^type _time_t ' gen-sysinfo.go > /dev/null 2>&1; then + echo 'type Time_t _time_t' >> ${OUT} +fi + # The time structures need special handling: we need to name the # types, so that we can cast integers to the right types when # assigning to the structures. @@ -703,6 +735,10 @@ grep '^const _IFLA' gen-sysinfo.go | \ sed -e 's/^\(const \)_\(IFLA[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} grep '^const _IFF' gen-sysinfo.go | \ sed -e 's/^\(const \)_\(IFF[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} +grep '^const _IFNAMSIZ' gen-sysinfo.go | \ + sed -e 's/^\(const \)_\(IFNAMSIZ[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} +grep '^const _SIOC' gen-sysinfo.go | + sed -e 's/^\(const \)_\(SIOC[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} # The size of the ifinfomsg struct. if grep 'type IfInfomsg ' ${OUT} > /dev/null 2>&1; then @@ -766,4 +802,131 @@ for n in IGNBRK BRKINT IGNPAR PARMRK INPCK ISTRIP INLCR IGNCR ICRNL IUCLC \ sed -e 's/^\(const \)_\([^=]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} done +# The mount flags +grep '^const _MS_' gen-sysinfo.go | + sed -e 's/^\(const \)_\(MS_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} + +# The fallocate flags. +grep '^const _FALLOC_' gen-sysinfo.go | + sed -e 's/^\(const \)_\(FALLOC_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} + +# The statfs struct. +# Prefer largefile variant if available. +statfs=`grep '^type _statfs64 ' gen-sysinfo.go || true` +if test "$statfs" != ""; then + grep '^type _statfs64 ' gen-sysinfo.go +else + grep '^type _statfs ' gen-sysinfo.go +fi | sed -e 's/type _statfs64/type Statfs_t/' \ + -e 's/type _statfs/type Statfs_t/' \ + -e 's/f_type/Type/' \ + -e 's/f_bsize/Bsize/' \ + -e 's/f_blocks/Blocks/' \ + -e 's/f_bfree/Bfree/' \ + -e 's/f_bavail/Bavail/' \ + -e 's/f_files/Files/' \ + -e 's/f_ffree/Ffree/' \ + -e 's/f_fsid/Fsid/' \ + -e 's/f_namelen/Namelen/' \ + -e 's/f_frsize/Frsize/' \ + -e 's/f_flags/Flags/' \ + -e 's/f_spare/Spare/' \ + >> ${OUT} + +# The timex struct. +grep '^type _timex ' gen-sysinfo.go | \ + sed -e 's/_timex/Timex/' \ + -e 's/modes/Modes/' \ + -e 's/offset/Offset/' \ + -e 's/freq/Freq/' \ + -e 's/maxerror/Maxerror/' \ + -e 's/esterror/Esterror/' \ + -e 's/status/Status/' \ + -e 's/constant/Constant/' \ + -e 's/precision/Precision/' \ + -e 's/tolerance/Tolerance/' \ + -e 's/ time / Time /' \ + -e 's/tick/Tick/' \ + -e 's/ppsfreq/Ppsfreq/' \ + -e 's/jitter/Jitter/' \ + -e 's/shift/Shift/' \ + -e 's/stabil/Stabil/' \ + -e 's/jitcnt/Jitcnt/' \ + -e 's/calcnt/Calcnt/' \ + -e 's/errcnt/Errcnt/' \ + -e 's/stbcnt/Stbcnt/' \ + -e 's/tai/Tai/' \ + -e 's/_timeval/Timeval/' \ + >> ${OUT} + +# The rlimit struct. +grep '^type _rlimit ' gen-sysinfo.go | \ + sed -e 's/_rlimit/Rlimit/' \ + -e 's/rlim_cur/Cur/' \ + -e 's/rlim_max/Max/' \ + >> ${OUT} + +# The RLIMIT constants. +grep '^const _RLIMIT_' gen-sysinfo.go | + sed -e 's/^\(const \)_\(RLIMIT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} + +# The sysinfo struct. +grep '^type _sysinfo ' gen-sysinfo.go | \ + sed -e 's/_sysinfo/Sysinfo_t/' \ + -e 's/uptime/Uptime/' \ + -e 's/loads/Loads/' \ + -e 's/totalram/Totalram/' \ + -e 's/freeram/Freeram/' \ + -e 's/sharedram/Sharedram/' \ + -e 's/bufferram/Bufferram/' \ + -e 's/totalswap/Totalswap/' \ + -e 's/freeswap/Freeswap/' \ + -e 's/procs/Procs/' \ + -e 's/totalhigh/Totalhigh/' \ + -e 's/freehigh/Freehigh/' \ + -e 's/mem_unit/Unit/' \ + >> ${OUT} + +# The ustat struct. +grep '^type _ustat ' gen-sysinfo.go | \ + sed -e 's/_ustat/Ustat_t/' \ + -e 's/f_tfree/Tfree/' \ + -e 's/f_tinode/Tinoe/' \ + -e 's/f_fname/Fname/' \ + -e 's/f_fpack/Fpack/' \ + >> ${OUT} +# Force it to be defined, as on some older GNU/Linux systems the +# header file fails when using with <linux/filter.h>. +if ! grep 'type _ustat ' gen-sysinfo.go >/dev/null 2>&1; then + echo 'type Ustat_t struct { Tfree int32; Tinoe uint64; Fname [5+1]int8; Fpack [5+1]int8; }' >> ${OUT} +fi + +# The utimbuf struct. +grep '^type _utimbuf ' gen-sysinfo.go | \ + sed -e 's/_utimbuf/Utimbuf/' \ + -e 's/actime/Actime/' \ + -e 's/modtime/Modtime/' \ + >> ${OUT} + +# The GNU/Linux LINUX_REBOOT flags. +grep '^const _LINUX_REBOOT_' gen-sysinfo.go | + sed -e 's/^\(const \)_\(LINUX_REBOOT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} + +# The GNU/Linux sock_filter struct. +grep '^type _sock_filter ' gen-sysinfo.go | \ + sed -e 's/_sock_filter/SockFilter/' \ + -e 's/code/Code/' \ + -e 's/jt/Jt/' \ + -e 's/jf/Jf/' \ + -e 's/k /K /' \ + >> ${OUT} + +# The GNU/Linux sock_fprog struct. +grep '^type _sock_fprog ' gen-sysinfo.go | \ + sed -e 's/_sock_fprog/SockFprog/' \ + -e 's/len/Len/' \ + -e 's/filter/Filter/' \ + -e 's/_sock_filter/SockFilter/' \ + >> ${OUT} + exit $? diff --git a/libgo/runtime/chan.c b/libgo/runtime/chan.c index 24be9500a8b..db91d2c49ea 100644 --- a/libgo/runtime/chan.c +++ b/libgo/runtime/chan.c @@ -662,6 +662,10 @@ newselect(int32 size, Select **selp) if(size > 1) n = size-1; + // allocate all the memory we need in a single allocation + // start with Select with size cases + // then lockorder with size entries + // then pollorder with size entries sel = runtime_mal(sizeof(*sel) + n*sizeof(sel->scase[0]) + size*sizeof(sel->lockorder[0]) + diff --git a/libgo/runtime/go-assert-interface.c b/libgo/runtime/go-assert-interface.c index 57a092d59b6..94bdaeef429 100644 --- a/libgo/runtime/go-assert-interface.c +++ b/libgo/runtime/go-assert-interface.c @@ -8,6 +8,7 @@ #include "go-assert.h" #include "go-panic.h" #include "interface.h" +#include "runtime.h" /* This is called by the compiler to implement a type assertion from one interface type to another. This returns the value that should @@ -26,14 +27,8 @@ __go_assert_interface (const struct __go_type_descriptor *lhs_descriptor, /* A type assertion is not permitted with a nil interface. */ - newTypeAssertionError (NULL, - NULL, - lhs_descriptor, - NULL, - NULL, - lhs_descriptor->__reflection, - NULL, - &panic_arg); + runtime_newTypeAssertionError (NULL, NULL, lhs_descriptor->__reflection, + NULL, &panic_arg); __go_panic (panic_arg); } diff --git a/libgo/runtime/go-caller.c b/libgo/runtime/go-caller.c index b18759f2f4b..f2bebeba519 100644 --- a/libgo/runtime/go-caller.c +++ b/libgo/runtime/go-caller.c @@ -8,8 +8,64 @@ #include <stdint.h> +#include "runtime.h" #include "go-string.h" +/* Get the function name, file name, and line number for a PC value. + We use the DWARF debug information to get this. Rather than write + a whole new library in C, we use the existing Go library. + Unfortunately, the Go library is only available if the debug/elf + package is imported (we use debug/elf for both ELF and Mach-O, in + this case). We arrange for the debug/elf package to register + itself, and tweak the various packages that need this information + to import debug/elf where possible. */ + +/* The function that returns function/file/line information. */ + +typedef _Bool (*infofn_type) (uintptr_t, struct __go_string *, + struct __go_string *, int *); +static infofn_type infofn; + +/* The function that returns the value of a symbol, used to get the + entry address of a function. */ + +typedef _Bool (*symvalfn_type) (struct __go_string, uintptr_t *); +static symvalfn_type symvalfn; + +/* This is called by debug/elf to register the function that returns + function/file/line information. */ + +void RegisterDebugLookup (infofn_type, symvalfn_type) + __asm__ ("libgo_runtime.runtime.RegisterDebugLookup"); + +void +RegisterDebugLookup (infofn_type pi, symvalfn_type ps) +{ + infofn = pi; + symvalfn = ps; +} + +/* Return function/file/line information for PC. */ + +_Bool +__go_file_line (uintptr_t pc, struct __go_string *fn, struct __go_string *file, + int *line) +{ + if (infofn == NULL) + return 0; + return infofn (pc, fn, file, line); +} + +/* Return the value of a symbol. */ + +_Bool +__go_symbol_value (struct __go_string sym, uintptr_t *val) +{ + if (symvalfn == NULL) + return 0; + return symvalfn (sym, val); +} + /* The values returned by runtime.Caller. */ struct caller_ret @@ -20,32 +76,71 @@ struct caller_ret _Bool ok; }; -/* Implement runtime.Caller. */ - struct caller_ret Caller (int n) asm ("libgo_runtime.runtime.Caller"); +Func *FuncForPC (uintptr_t) asm ("libgo_runtime.runtime.FuncForPC"); + +/* Implement runtime.Caller. */ + struct caller_ret -Caller (int n __attribute__ ((unused))) +Caller (int skip) { struct caller_ret ret; + uintptr pc; + int32 n; + struct __go_string fn; - /* A proper implementation needs to dig through the debugging - information. */ - ret.pc = (uint64_t) (uintptr_t) __builtin_return_address (0); - ret.file.__data = NULL; - ret.file.__length = 0; - ret.line = 0; - ret.ok = 0; - + runtime_memclr (&ret, sizeof ret); + n = runtime_callers (skip + 1, &pc, 1); + if (n < 1) + return ret; + ret.pc = pc; + ret.ok = __go_file_line (pc, &fn, &ret.file, &ret.line); return ret; } /* Implement runtime.FuncForPC. */ -void *FuncForPC (uintptr_t) asm ("libgo_runtime.runtime.FuncForPC"); +Func * +FuncForPC (uintptr_t pc) +{ + Func *ret; + struct __go_string fn; + struct __go_string file; + int line; + uintptr_t val; -void * -FuncForPC(uintptr_t pc __attribute__ ((unused))) + if (!__go_file_line (pc, &fn, &file, &line)) + return NULL; + if (!__go_symbol_value (fn, &val)) + return NULL; + + ret = (Func *) runtime_malloc (sizeof (*ret)); + ret->name = fn; + ret->entry = val; + return ret; +} + +/* Look up the file and line information for a PC within a + function. */ + +struct funcline_go_return { - return NULL; + struct __go_string retfile; + int retline; +}; + +struct funcline_go_return +runtime_funcline_go (Func *f, uintptr targetpc) + __asm__ ("libgo_runtime.runtime.funcline_go"); + +struct funcline_go_return +runtime_funcline_go (Func *f __attribute__((unused)), uintptr targetpc) +{ + struct funcline_go_return ret; + struct __go_string fn; + + if (!__go_file_line (targetpc, &fn, &ret.retfile, &ret.retline)) + runtime_memclr (&ret, sizeof ret); + return ret; } diff --git a/libgo/runtime/go-callers.c b/libgo/runtime/go-callers.c new file mode 100644 index 00000000000..09556c33c7a --- /dev/null +++ b/libgo/runtime/go-callers.c @@ -0,0 +1,76 @@ +/* go-callers.c -- get callers for Go. + + Copyright 2012 The Go Authors. All rights reserved. + Use of this source code is governed by a BSD-style + license that can be found in the LICENSE file. */ + +#include "config.h" + +#include "unwind.h" + +#include "runtime.h" + +/* Argument passed to backtrace function. */ + +struct callers_data +{ + int skip; + uintptr *pcbuf; + int index; + int max; +}; + +static _Unwind_Reason_Code +backtrace (struct _Unwind_Context *context, void *varg) +{ + struct callers_data *arg = (struct callers_data *) varg; + uintptr pc; + int ip_before_insn = 0; + +#ifdef HAVE_GETIPINFO + pc = _Unwind_GetIPInfo (context, &ip_before_insn); +#else + pc = _Unwind_GetIP (context); +#endif + + /* FIXME: If PC is in the __morestack routine, we should ignore + it. */ + + if (arg->skip > 0) + --arg->skip; + else if (arg->index >= arg->max) + return _URC_END_OF_STACK; + else + { + /* Here PC will be the return address. We actually want the + address of the call instruction, so back up one byte and + count on the lookup routines handling that correctly. */ + if (!ip_before_insn) + --pc; + arg->pcbuf[arg->index] = pc; + ++arg->index; + } + return _URC_NO_REASON; +} + +int32 +runtime_callers (int32 skip, uintptr *pcbuf, int32 m) +{ + struct callers_data arg; + + arg.skip = skip + 1; + arg.pcbuf = pcbuf; + arg.index = 0; + arg.max = m; + _Unwind_Backtrace (backtrace, &arg); + return arg.index; +} + +int Callers (int, struct __go_open_array) + __asm__ ("libgo_runtime.runtime.Callers"); + +int +Callers (int skip, struct __go_open_array pc) +{ + return runtime_callers (skip, (uintptr *) pc.__values, pc.__count); +} diff --git a/libgo/runtime/go-check-interface.c b/libgo/runtime/go-check-interface.c index d2258a854b7..963559d8ed0 100644 --- a/libgo/runtime/go-check-interface.c +++ b/libgo/runtime/go-check-interface.c @@ -6,6 +6,7 @@ #include "go-panic.h" #include "interface.h" +#include "runtime.h" /* Check that an interface type matches for a conversion to a non-interface type. This panics if the types are bad. The actual @@ -21,8 +22,8 @@ __go_check_interface_type ( { struct __go_empty_interface panic_arg; - newTypeAssertionError(NULL, NULL, lhs_descriptor, NULL, NULL, - lhs_descriptor->__reflection, NULL, &panic_arg); + runtime_newTypeAssertionError(NULL, NULL, lhs_descriptor->__reflection, + NULL, &panic_arg); __go_panic(panic_arg); } @@ -35,12 +36,10 @@ __go_check_interface_type ( { struct __go_empty_interface panic_arg; - newTypeAssertionError(rhs_inter_descriptor, rhs_descriptor, - lhs_descriptor, - rhs_inter_descriptor->__reflection, - rhs_descriptor->__reflection, - lhs_descriptor->__reflection, - NULL, &panic_arg); + runtime_newTypeAssertionError(rhs_inter_descriptor->__reflection, + rhs_descriptor->__reflection, + lhs_descriptor->__reflection, + NULL, &panic_arg); __go_panic(panic_arg); } } diff --git a/libgo/runtime/go-convert-interface.c b/libgo/runtime/go-convert-interface.c index 259456cda16..8ce82ea5ed6 100644 --- a/libgo/runtime/go-convert-interface.c +++ b/libgo/runtime/go-convert-interface.c @@ -8,6 +8,7 @@ #include "go-assert.h" #include "go-panic.h" #include "interface.h" +#include "runtime.h" /* This is called when converting one interface type into another interface type. LHS_DESCRIPTOR is the type descriptor of the @@ -55,14 +56,10 @@ __go_convert_interface_2 (const struct __go_type_descriptor *lhs_descriptor, if (may_fail) return NULL; - newTypeAssertionError (NULL, - rhs_descriptor, - lhs_descriptor, - NULL, - rhs_descriptor->__reflection, - lhs_descriptor->__reflection, - lhs_methods[0].__name, - &panic_arg); + runtime_newTypeAssertionError (NULL, rhs_descriptor->__reflection, + lhs_descriptor->__reflection, + lhs_methods[0].__name, + &panic_arg); __go_panic (panic_arg); } @@ -100,14 +97,9 @@ __go_convert_interface_2 (const struct __go_type_descriptor *lhs_descriptor, if (may_fail) return NULL; - newTypeAssertionError (NULL, - rhs_descriptor, - lhs_descriptor, - NULL, - rhs_descriptor->__reflection, - lhs_descriptor->__reflection, - p_lhs_method->__name, - &panic_arg); + runtime_newTypeAssertionError (NULL, rhs_descriptor->__reflection, + lhs_descriptor->__reflection, + p_lhs_method->__name, &panic_arg); __go_panic (panic_arg); } diff --git a/libgo/runtime/go-main.c b/libgo/runtime/go-main.c index 45467ed06c0..7e8bb9b234f 100644 --- a/libgo/runtime/go-main.c +++ b/libgo/runtime/go-main.c @@ -40,7 +40,7 @@ static void mainstart (void *); int main (int argc, char **argv) { - runtime_initsig (0); + runtime_check (); runtime_args (argc, (byte **) argv); runtime_osinit (); runtime_schedinit (); diff --git a/libgo/runtime/go-nosys.c b/libgo/runtime/go-nosys.c index 6b328544f0d..4a30a57ad25 100644 --- a/libgo/runtime/go-nosys.c +++ b/libgo/runtime/go-nosys.c @@ -48,6 +48,18 @@ faccessat (int fd __attribute__ ((unused)), } #endif +#ifndef HAVE_FALLOCATE +int +fallocate (int fd __attribute__ ((unused)), + int mode __attribute__ ((unused)), + off_t offset __attribute__ ((unused)), + off_t len __attribute__ ((unused))) +{ + errno = ENOSYS; + return -1; +} +#endif + #ifndef HAVE_FCHMODAT int fchmodat (int dirfd __attribute__ ((unused)), @@ -104,6 +116,15 @@ inotify_init (void) } #endif +#ifndef HAVE_INOTIFY_INIT1 +int +inotify_init1 (int flags __attribute__ ((unused))) +{ + errno = ENOSYS; + return -1; +} +#endif + #ifndef HAVE_INOTIFY_RM_WATCH int inotify_rm_watch (int fd __attribute__ ((unused)), @@ -175,6 +196,18 @@ splice (int fd __attribute__ ((unused)), } #endif +#ifndef HAVE_SYNC_FILE_RANGE +int +sync_file_range (int fd __attribute__ ((unused)), + off64_t offset __attribute__ ((unused)), + off64_t nbytes __attribute__ ((unused)), + unsigned int flags __attribute__ ((unused))) +{ + errno = ENOSYS; + return -1; +} +#endif + #ifndef HAVE_TEE int tee (int fd_in __attribute__ ((unused)), diff --git a/libgo/runtime/go-panic.c b/libgo/runtime/go-panic.c index 24dc74bd285..7ba426f5148 100644 --- a/libgo/runtime/go-panic.c +++ b/libgo/runtime/go-panic.c @@ -27,7 +27,7 @@ __printpanics (struct __go_panic_stack *p) fprintf (stderr, "\t"); } fprintf (stderr, "panic: "); - printany (p->__arg); + runtime_printany (p->__arg); if (p->__was_recovered) fprintf (stderr, " [recovered]"); fputc ('\n', stderr); diff --git a/libgo/runtime/go-panic.h b/libgo/runtime/go-panic.h index 41996e43b5f..76411498759 100644 --- a/libgo/runtime/go-panic.h +++ b/libgo/runtime/go-panic.h @@ -40,23 +40,4 @@ extern struct __go_empty_interface __go_recover (void); extern void __go_unwind_stack (void); -/* Functions defined in libgo/go/runtime/error.go. */ - -extern void newTypeAssertionError(const struct __go_type_descriptor *pt1, - const struct __go_type_descriptor *pt2, - const struct __go_type_descriptor *pt3, - const struct __go_string *ps1, - const struct __go_string *ps2, - const struct __go_string *ps3, - const struct __go_string *pmeth, - struct __go_empty_interface *ret) - __asm__ ("libgo_runtime.runtime.NewTypeAssertionError"); - -extern void runtime_newErrorString(struct __go_string, - struct __go_empty_interface *) - __asm__ ("libgo_runtime.runtime.NewErrorString"); - -extern void printany(struct __go_empty_interface) - __asm__ ("libgo_runtime.runtime.Printany"); - #endif /* !defined(LIBGO_GO_PANIC_H) */ diff --git a/libgo/runtime/go-reflect.c b/libgo/runtime/go-reflect.c deleted file mode 100644 index d14a5805549..00000000000 --- a/libgo/runtime/go-reflect.c +++ /dev/null @@ -1,192 +0,0 @@ -/* go-reflect.c -- implement unsafe.Reflect and unsafe.Typeof for Go. - - Copyright 2009 The Go Authors. All rights reserved. - Use of this source code is governed by a BSD-style - license that can be found in the LICENSE file. */ - -#include <stdlib.h> -#include <stdint.h> - -#include "runtime.h" -#include "interface.h" -#include "go-alloc.h" -#include "go-string.h" -#include "go-type.h" - -/* For field alignment. */ - -struct field_align -{ - char c; - struct __go_type_descriptor *p; -}; - -/* The type descriptors in the runtime package. */ - -extern const struct __go_type_descriptor ptr_bool_descriptor - asm ("__go_td_pN30_libgo_runtime.runtime.BoolType"); -extern const struct __go_type_descriptor ptr_float_descriptor - asm ("__go_td_pN31_libgo_runtime.runtime.FloatType"); -extern const struct __go_type_descriptor ptr_complex_descriptor - asm ("__go_td_pN33_libgo_runtime.runtime.ComplexType"); -extern const struct __go_type_descriptor ptr_int_descriptor - asm ("__go_td_pN29_libgo_runtime.runtime.IntType"); -extern const struct __go_type_descriptor ptr_uint_descriptor - asm ("__go_td_pN30_libgo_runtime.runtime.UintType"); -extern const struct __go_type_descriptor ptr_string_descriptor - asm ("__go_td_pN32_libgo_runtime.runtime.StringType"); -extern const struct __go_type_descriptor ptr_unsafe_pointer_decriptor - asm ("__go_td_pN39_libgo_runtime.runtime.UnsafePointerType"); -extern const struct __go_type_descriptor ptr_array_descriptor - asm ("__go_td_pN31_libgo_runtime.runtime.ArrayType"); -extern const struct __go_type_descriptor ptr_slice_descriptor - asm ("__go_td_pN31_libgo_runtime.runtime.SliceType"); -extern const struct __go_type_descriptor ptr_chan_descriptor - asm ("__go_td_pN30_libgo_runtime.runtime.ChanType"); -extern const struct __go_type_descriptor ptr_func_descriptor - asm ("__go_td_pN30_libgo_runtime.runtime.FuncType"); -extern const struct __go_type_descriptor ptr_interface_descriptor - asm ("__go_td_pN35_libgo_runtime.runtime.InterfaceType"); -extern const struct __go_type_descriptor ptr_map_descriptor - asm ("__go_td_pN29_libgo_runtime.runtime.MapType"); -extern const struct __go_type_descriptor ptr_ptr_descriptor - asm ("__go_td_pN29_libgo_runtime.runtime.PtrType"); -extern const struct __go_type_descriptor ptr_struct_descriptor - asm ("__go_td_pN32_libgo_runtime.runtime.StructType"); - -const struct __go_type_descriptor * -get_descriptor (int code) -{ - switch (code & GO_CODE_MASK) - { - case GO_BOOL: - return &ptr_bool_descriptor; - case GO_FLOAT32: - case GO_FLOAT64: - return &ptr_float_descriptor; - case GO_COMPLEX64: - case GO_COMPLEX128: - return &ptr_complex_descriptor; - case GO_INT16: - case GO_INT32: - case GO_INT64: - case GO_INT8: - case GO_INT: - return &ptr_int_descriptor; - case GO_UINT16: - case GO_UINT32: - case GO_UINT64: - case GO_UINT8: - case GO_UINTPTR: - case GO_UINT: - return &ptr_uint_descriptor; - case GO_STRING: - return &ptr_string_descriptor; - case GO_UNSAFE_POINTER: - return &ptr_unsafe_pointer_decriptor; - case GO_ARRAY: - return &ptr_array_descriptor; - case GO_SLICE: - return &ptr_slice_descriptor; - case GO_CHAN: - return &ptr_chan_descriptor; - case GO_FUNC: - return &ptr_func_descriptor; - case GO_INTERFACE: - return &ptr_interface_descriptor; - case GO_MAP: - return &ptr_map_descriptor; - case GO_PTR: - return &ptr_ptr_descriptor; - case GO_STRUCT: - return &ptr_struct_descriptor; - default: - abort (); - } -} - -/* Implement unsafe.Reflect. */ - -struct reflect_ret -{ - struct __go_empty_interface rettype; - void *addr; -}; - -struct reflect_ret Reflect (struct __go_empty_interface) - asm ("libgo_unsafe.unsafe.Reflect"); - -struct reflect_ret -Reflect (struct __go_empty_interface e) -{ - struct reflect_ret ret; - - if (((uintptr_t) e.__type_descriptor & reflectFlags) != 0) - runtime_panicstring ("invalid interface value"); - - if (e.__type_descriptor == NULL) - { - ret.rettype.__type_descriptor = NULL; - ret.rettype.__object = NULL; - ret.addr = NULL; - } - else - { - size_t size; - - ret.rettype.__type_descriptor = - get_descriptor (e.__type_descriptor->__code); - - /* This memcpy is really just an assignment of a const pointer - to a non-const pointer. FIXME: We should canonicalize this - pointer, so that for a given type we always return the same - pointer. */ - __builtin_memcpy (&ret.rettype.__object, &e.__type_descriptor, - sizeof (void *)); - - /* Make a copy of the value. */ - size = e.__type_descriptor->__size; - if (size <= sizeof (uint64_t)) - ret.addr = __go_alloc (sizeof (uint64_t)); - else - ret.addr = __go_alloc (size); - if (__go_is_pointer_type (e.__type_descriptor)) - *(void **) ret.addr = e.__object; - else - __builtin_memcpy (ret.addr, e.__object, size); - } - - return ret; -} - -/* Implement unsafe.Typeof. */ - -struct __go_empty_interface Typeof (struct __go_empty_interface) - asm ("libgo_unsafe.unsafe.Typeof"); - -struct __go_empty_interface -Typeof (const struct __go_empty_interface e) -{ - struct __go_empty_interface ret; - - if (((uintptr_t) e.__type_descriptor & reflectFlags) != 0) - runtime_panicstring ("invalid interface value"); - - if (e.__type_descriptor == NULL) - { - ret.__type_descriptor = NULL; - ret.__object = NULL; - } - else - { - ret.__type_descriptor = get_descriptor (e.__type_descriptor->__code); - - /* This memcpy is really just an assignment of a const pointer - to a non-const pointer. FIXME: We should canonicalize this - pointer, so that for a given type we always return the same - pointer. */ - __builtin_memcpy (&ret.__object, &e.__type_descriptor, sizeof (void *)); - } - - return ret; -} diff --git a/libgo/runtime/go-signal.c b/libgo/runtime/go-signal.c index fd48f4ba659..b698ae2b897 100644 --- a/libgo/runtime/go-signal.c +++ b/libgo/runtime/go-signal.c @@ -25,11 +25,11 @@ extern void __splitstack_setcontext(void *context[10]); #endif -#define C SigCatch -#define I SigIgnore -#define R SigRestart -#define Q SigQueue +#define N SigNotify +#define K SigKill +#define T SigThrow #define P SigPanic +#define D SigDefault /* Signal actions. This collects the sigtab tables for several different targets from the master library. SIGKILL, SIGCONT, and @@ -38,105 +38,105 @@ extern void __splitstack_setcontext(void *context[10]); SigTab runtime_sigtab[] = { #ifdef SIGHUP - { SIGHUP, Q + R }, + { SIGHUP, N + K }, #endif #ifdef SIGINT - { SIGINT, Q + R }, + { SIGINT, N + K }, #endif #ifdef SIGQUIT - { SIGQUIT, C }, + { SIGQUIT, N + T }, #endif #ifdef SIGILL - { SIGILL, C }, + { SIGILL, T }, #endif #ifdef SIGTRAP - { SIGTRAP, C }, + { SIGTRAP, T }, #endif #ifdef SIGABRT - { SIGABRT, C }, + { SIGABRT, N + T }, #endif #ifdef SIGBUS - { SIGBUS, C + P }, + { SIGBUS, P }, #endif #ifdef SIGFPE - { SIGFPE, C + P }, + { SIGFPE, P }, #endif #ifdef SIGUSR1 - { SIGUSR1, Q + I + R }, + { SIGUSR1, N }, #endif #ifdef SIGSEGV - { SIGSEGV, C + P }, + { SIGSEGV, P }, #endif #ifdef SIGUSR2 - { SIGUSR2, Q + I + R }, + { SIGUSR2, N }, #endif #ifdef SIGPIPE - { SIGPIPE, I }, + { SIGPIPE, N }, #endif #ifdef SIGALRM - { SIGALRM, Q + I + R }, + { SIGALRM, N }, #endif #ifdef SIGTERM - { SIGTERM, Q + R }, + { SIGTERM, N + K }, #endif #ifdef SIGSTKFLT - { SIGSTKFLT, C }, + { SIGSTKFLT, T }, #endif #ifdef SIGCHLD - { SIGCHLD, Q + I + R }, + { SIGCHLD, N }, #endif #ifdef SIGTSTP - { SIGTSTP, Q + I + R }, + { SIGTSTP, N + D }, #endif #ifdef SIGTTIN - { SIGTTIN, Q + I + R }, + { SIGTTIN, N + D }, #endif #ifdef SIGTTOU - { SIGTTOU, Q + I + R }, + { SIGTTOU, N + D }, #endif #ifdef SIGURG - { SIGURG, Q + I + R }, + { SIGURG, N }, #endif #ifdef SIGXCPU - { SIGXCPU, Q + I + R }, + { SIGXCPU, N }, #endif #ifdef SIGXFSZ - { SIGXFSZ, Q + I + R }, + { SIGXFSZ, N }, #endif #ifdef SIGVTALRM - { SIGVTALRM, Q + I + R }, + { SIGVTALRM, N }, #endif #ifdef SIGPROF - { SIGPROF, Q + I + R }, + { SIGPROF, N }, #endif #ifdef SIGWINCH - { SIGWINCH, Q + I + R }, + { SIGWINCH, N }, #endif #ifdef SIGIO - { SIGIO, Q + I + R }, + { SIGIO, N }, #endif #ifdef SIGPWR - { SIGPWR, Q + I + R }, + { SIGPWR, N }, #endif #ifdef SIGSYS - { SIGSYS, C }, + { SIGSYS, N }, #endif #ifdef SIGEMT - { SIGEMT, C }, + { SIGEMT, T }, #endif #ifdef SIGINFO - { SIGINFO, Q + I + R }, + { SIGINFO, N }, #endif #ifdef SIGTHR - { SIGTHR, Q + I + R }, + { SIGTHR, N }, #endif { -1, 0 } }; -#undef C -#undef I -#undef R -#undef Q +#undef N +#undef K +#undef T #undef P +#undef D /* Handle a signal, for cases where we don't panic. We can split the stack here. */ @@ -158,21 +158,24 @@ sig_handler (int sig) for (i = 0; runtime_sigtab[i].sig != -1; ++i) { struct sigaction sa; + SigTab *t; - if (runtime_sigtab[i].sig != sig) + t = &runtime_sigtab[i]; + + if (t->sig != sig) continue; - if ((runtime_sigtab[i].flags & SigQueue) != 0) + if ((t->flags & SigNotify) != 0) { - if (__go_sigsend (sig) - || (runtime_sigtab[sig].flags & SigIgnore) != 0) + if (__go_sigsend (sig)) return; - runtime_exit (2); // SIGINT, SIGTERM, etc } - - if (runtime_panicking) + if ((t->flags & SigKill) != 0) runtime_exit (2); - runtime_panicking = 1; + if ((t->flags & SigThrow) == 0) + return; + + runtime_startpanic (); /* We should do a stack backtrace here. Until we can do that, we reraise the signal in order to get a slightly better @@ -227,7 +230,7 @@ static void sig_panic_info_handler (int sig, siginfo_t *info, void *context __attribute__ ((unused))) { - if (runtime_g () == NULL) + if (runtime_g () == NULL || info->si_code == SI_USER) { sig_handler (sig); return; @@ -316,16 +319,6 @@ sig_panic_handler (int sig) #endif /* !defined (SA_SIGINFO) */ -/* Ignore a signal. This is called on the alternate signal stack so - it may not split the stack. */ - -static void sig_ignore (int) __attribute__ ((no_split_stack)); - -static void -sig_ignore (int sig __attribute__ ((unused))) -{ -} - /* A signal handler used for signals which are not going to panic. This is called on the alternate signal stack so it may not split the stack. */ @@ -376,100 +369,41 @@ sig_tramp (int sig) } } -/* Initialize signal handling for Go. This is called when the program - starts. */ - void -runtime_initsig (int32 queue) +runtime_setsig (int32 i, bool def __attribute__ ((unused)), bool restart) { struct sigaction sa; - int i; - - siginit (); + int r; + SigTab *t; memset (&sa, 0, sizeof sa); - i = sigfillset (&sa.sa_mask); - __go_assert (i == 0); - - for (i = 0; runtime_sigtab[i].sig != -1; ++i) - { - if (runtime_sigtab[i].flags == 0) - continue; - if ((runtime_sigtab[i].flags & SigQueue) != queue) - continue; - - if ((runtime_sigtab[i].flags & (SigCatch | SigQueue)) != 0) - { - if ((runtime_sigtab[i].flags & SigPanic) == 0) - { - sa.sa_flags = SA_ONSTACK; - sa.sa_handler = sig_tramp; - } - else - { -#ifdef SA_SIGINFO - sa.sa_flags = SA_SIGINFO; - sa.sa_sigaction = sig_panic_info_handler; -#else - sa.sa_flags = 0; - sa.sa_handler = sig_panic_handler; -#endif - } - } - else - { - sa.sa_flags = SA_ONSTACK; - sa.sa_handler = sig_ignore; - } + r = sigfillset (&sa.sa_mask); + __go_assert (r == 0); - if ((runtime_sigtab[i].flags & SigRestart) != 0) - sa.sa_flags |= SA_RESTART; + t = &runtime_sigtab[i]; - if (sigaction (runtime_sigtab[i].sig, &sa, NULL) != 0) - __go_assert (0); - } -} - -void -runtime_resetcpuprofiler(int32 hz) -{ -#ifdef SIGPROF - struct itimerval it; - struct sigaction sa; - int i; - - memset (&it, 0, sizeof it); - - memset (&sa, 0, sizeof sa); - i = sigfillset (&sa.sa_mask); - __go_assert (i == 0); - - if (hz == 0) + if ((t->flags & SigPanic) == 0) { - i = setitimer (ITIMER_PROF, &it, NULL); - __go_assert (i == 0); - - sa.sa_handler = SIG_IGN; - i = sigaction (SIGPROF, &sa, NULL); - __go_assert (i == 0); + sa.sa_flags = SA_ONSTACK; + sa.sa_handler = sig_tramp; } else { - sa.sa_handler = sig_handler; - sa.sa_flags = SA_RESTART; - i = sigaction (SIGPROF, &sa, NULL); - __go_assert (i == 0); - - it.it_interval.tv_sec = 0; - it.it_interval.tv_usec = 1000000 / hz; - it.it_value = it.it_interval; - i = setitimer (ITIMER_PROF, &it, NULL); - __go_assert (i == 0); - } +#ifdef SA_SIGINFO + sa.sa_flags = SA_SIGINFO; + sa.sa_sigaction = sig_panic_info_handler; +#else + sa.sa_flags = 0; + sa.sa_handler = sig_panic_handler; #endif + } + + if (restart) + sa.sa_flags |= SA_RESTART; - runtime_m()->profilehz = hz; + if (sigaction (t->sig, &sa, NULL) != 0) + __go_assert (0); } /* Used by the os package to raise SIGPIPE. */ @@ -494,3 +428,9 @@ os_sigpipe (void) raise (SIGPIPE); } + +void +runtime_setprof(bool on) +{ + USED(on); +} diff --git a/libgo/runtime/go-type-identity.c b/libgo/runtime/go-type-identity.c index 142edf42464..a50a8a131a1 100644 --- a/libgo/runtime/go-type-identity.c +++ b/libgo/runtime/go-type-identity.c @@ -6,6 +6,7 @@ #include <stddef.h> +#include "config.h" #include "go-type.h" /* The 64-bit type. */ @@ -31,7 +32,11 @@ __go_type_hash_identity (const void *key, uintptr_t key_size) unsigned char a[8]; } u; u.v = 0; - __builtin_memcpy (&u.a, key, key_size); +#ifdef WORDS_BIGENDIAN + __builtin_memcpy (&u.a[8 - key_size], key, key_size); +#else + __builtin_memcpy (&u.a[0], key, key_size); +#endif if (sizeof (uintptr_t) >= 8) return (uintptr_t) u.v; else diff --git a/libgo/runtime/go-unreflect.c b/libgo/runtime/go-unreflect.c deleted file mode 100644 index 6f1ea732fa3..00000000000 --- a/libgo/runtime/go-unreflect.c +++ /dev/null @@ -1,34 +0,0 @@ -/* go-unreflect.c -- implement unsafe.Unreflect for Go. - - Copyright 2009 The Go Authors. All rights reserved. - Use of this source code is governed by a BSD-style - license that can be found in the LICENSE file. */ - -#include "runtime.h" -#include "go-alloc.h" -#include "go-type.h" -#include "interface.h" - -/* Implement unsafe.Unreflect. */ - -struct __go_empty_interface Unreflect (struct __go_empty_interface type, - void *object) - asm ("libgo_unsafe.unsafe.Unreflect"); - -struct __go_empty_interface -Unreflect (struct __go_empty_interface type, void *object) -{ - struct __go_empty_interface ret; - - if (((uintptr_t) type.__type_descriptor & reflectFlags) != 0) - runtime_panicstring ("invalid interface value"); - - /* FIXME: We should check __type_descriptor to verify that this is - really a type descriptor. */ - ret.__type_descriptor = type.__object; - if (__go_is_pointer_type (ret.__type_descriptor)) - ret.__object = *(void **) object; - else - ret.__object = object; - return ret; -} diff --git a/libgo/runtime/go-unsafe-new.c b/libgo/runtime/go-unsafe-new.c index c60e05b3bda..2b9e044dc33 100644 --- a/libgo/runtime/go-unsafe-new.c +++ b/libgo/runtime/go-unsafe-new.c @@ -9,15 +9,16 @@ #include "go-type.h" #include "interface.h" -/* Implement unsafe.New. */ +/* Implement unsafe_New, called from the reflect package. */ -void *New (struct __go_empty_interface type) asm ("libgo_unsafe.unsafe.New"); +void *unsafe_New (struct __go_empty_interface type) + asm ("libgo_reflect.reflect.unsafe_New"); /* The dynamic type of the argument will be a pointer to a type descriptor. */ void * -New (struct __go_empty_interface type) +unsafe_New (struct __go_empty_interface type) { const struct __go_type_descriptor *descriptor; diff --git a/libgo/runtime/go-unsafe-newarray.c b/libgo/runtime/go-unsafe-newarray.c index 470ed2d0c72..f4c5595d463 100644 --- a/libgo/runtime/go-unsafe-newarray.c +++ b/libgo/runtime/go-unsafe-newarray.c @@ -9,16 +9,16 @@ #include "go-type.h" #include "interface.h" -/* Implement unsafe.NewArray. */ +/* Implement unsafe_NewArray, called from the reflect package. */ -void *NewArray (struct __go_empty_interface type, int n) - asm ("libgo_unsafe.unsafe.NewArray"); +void *unsafe_NewArray (struct __go_empty_interface type, int n) + asm ("libgo_reflect.reflect.unsafe_NewArray"); /* The dynamic type of the argument will be a pointer to a type descriptor. */ void * -NewArray (struct __go_empty_interface type, int n) +unsafe_NewArray (struct __go_empty_interface type, int n) { const struct __go_type_descriptor *descriptor; diff --git a/libgo/runtime/lock_futex.c b/libgo/runtime/lock_futex.c index cdc12d7c75c..9a533a577a4 100644 --- a/libgo/runtime/lock_futex.c +++ b/libgo/runtime/lock_futex.c @@ -118,8 +118,12 @@ runtime_notewakeup(Note *n) void runtime_notesleep(Note *n) { + if(runtime_m()->profilehz > 0) + runtime_setprof(false); while(runtime_atomicload(&n->key) == 0) runtime_futexsleep(&n->key, 0, -1); + if(runtime_m()->profilehz > 0) + runtime_setprof(true); } void @@ -135,14 +139,18 @@ runtime_notetsleep(Note *n, int64 ns) if(runtime_atomicload(&n->key) != 0) return; + if(runtime_m()->profilehz > 0) + runtime_setprof(false); deadline = runtime_nanotime() + ns; for(;;) { runtime_futexsleep(&n->key, 0, ns); if(runtime_atomicload(&n->key) != 0) - return; + break; now = runtime_nanotime(); if(now >= deadline) - return; + break; ns = deadline - now; } + if(runtime_m()->profilehz > 0) + runtime_setprof(true); } diff --git a/libgo/runtime/lock_sema.c b/libgo/runtime/lock_sema.c index b2a8f53be41..8c4b3973bdc 100644 --- a/libgo/runtime/lock_sema.c +++ b/libgo/runtime/lock_sema.c @@ -159,7 +159,11 @@ runtime_notesleep(Note *n) return; } // Queued. Sleep. + if(m->profilehz > 0) + runtime_setprof(false); runtime_semasleep(-1); + if(m->profilehz > 0) + runtime_setprof(true); } void @@ -185,12 +189,16 @@ runtime_notetsleep(Note *n, int64 ns) return; } + if(m->profilehz > 0) + runtime_setprof(false); deadline = runtime_nanotime() + ns; for(;;) { // Registered. Sleep. if(runtime_semasleep(ns) >= 0) { // Acquired semaphore, semawakeup unregistered us. // Done. + if(m->profilehz > 0) + runtime_setprof(true); return; } @@ -203,6 +211,9 @@ runtime_notetsleep(Note *n, int64 ns) ns = deadline - now; } + if(m->profilehz > 0) + runtime_setprof(true); + // Deadline arrived. Still registered. Semaphore not acquired. // Want to give up and return, but have to unregister first, // so that any notewakeup racing with the return does not diff --git a/libgo/runtime/malloc.goc b/libgo/runtime/malloc.goc index 9ad9eda8350..3fde250af3b 100644 --- a/libgo/runtime/malloc.goc +++ b/libgo/runtime/malloc.goc @@ -19,6 +19,7 @@ package runtime #include "go-type.h" MHeap runtime_mheap; + extern MStats mstats; // defined in extern.go extern volatile int32 runtime_MemProfileRate @@ -276,15 +277,27 @@ runtime_mallocinit(void) uintptr arena_size, bitmap_size; extern byte end[]; byte *want; + uintptr limit; runtime_sizeof_C_MStats = sizeof(MStats); + p = nil; + arena_size = 0; + bitmap_size = 0; + + // for 64-bit build + USED(p); + USED(arena_size); + USED(bitmap_size); + runtime_InitSizes(); + limit = runtime_memlimit(); + // Set up the allocation arena, a contiguous area of memory where // allocated data will be found. The arena begins with a bitmap large // enough to hold 4 bits per allocated word. - if(sizeof(void*) == 8) { + if(sizeof(void*) == 8 && (limit == 0 || limit > (1<<30))) { // On a 64-bit machine, allocate from a single contiguous reservation. // 16 GB should be big enough for now. // @@ -307,12 +320,13 @@ runtime_mallocinit(void) // Actually we reserve 17 GB (because the bitmap ends up being 1 GB) // but it hardly matters: fc is not valid UTF-8 either, and we have to // allocate 15 GB before we get that far. + // + // If this fails we fall back to the 32 bit memory mechanism arena_size = (uintptr)(16LL<<30); bitmap_size = arena_size / (sizeof(void*)*8/4); p = runtime_SysReserve((void*)(0x00f8ULL<<32), bitmap_size + arena_size); - if(p == nil) - runtime_throw("runtime: cannot reserve arena virtual address space"); - } else { + } + if (p == nil) { // On a 32-bit machine, we can't typically get away // with a giant virtual address space reservation. // Instead we map the memory information bitmap @@ -332,6 +346,10 @@ runtime_mallocinit(void) // of address space, which is probably too much in a 32-bit world. bitmap_size = MaxArena32 / (sizeof(void*)*8/4); arena_size = 512<<20; + if(limit > 0 && arena_size+bitmap_size > limit) { + bitmap_size = (limit / 9) & ~((1<<PageShift) - 1); + arena_size = bitmap_size * 8; + } // SysReserve treats the address we ask for, end, as a hint, // not as an absolute requirement. If we ask for the end @@ -348,6 +366,8 @@ runtime_mallocinit(void) p = runtime_SysReserve(want, bitmap_size + arena_size); if(p == nil) runtime_throw("runtime: cannot reserve arena virtual address space"); + if((uintptr)p & (((uintptr)1<<PageShift)-1)) + runtime_printf("runtime: SysReserve returned unaligned address %p; asked for %p", p, (void*)(bitmap_size+arena_size)); } if((uintptr)p & (((uintptr)1<<PageShift)-1)) runtime_throw("runtime: SysReserve returned unaligned address"); @@ -379,8 +399,8 @@ runtime_MHeap_SysAlloc(MHeap *h, uintptr n) return p; } - // On 64-bit, our reservation is all we have. - if(sizeof(void*) == 8) + // If using 64-bit, our reservation is all we have. + if(sizeof(void*) == 8 && (uintptr)h->bitmap >= 0xffffffffU) return nil; // On 32-bit, once the reservation is gone we can @@ -419,18 +439,6 @@ func new(typ *Type) (ret *uint8) { ret = runtime_mallocgc(typ->__size, flag, 1, 1); } -func Alloc(n uintptr) (p *byte) { - p = runtime_malloc(n); -} - -func Free(p *byte) { - runtime_free(p); -} - -func Lookup(p *byte) (base *byte, size uintptr) { - runtime_mlookup(p, &base, &size, nil); -} - func GC() { runtime_gc(1); } diff --git a/libgo/runtime/malloc.h b/libgo/runtime/malloc.h index c1cf02c6deb..4cb07477f15 100644 --- a/libgo/runtime/malloc.h +++ b/libgo/runtime/malloc.h @@ -205,6 +205,7 @@ struct MStats uint64 heap_sys; // bytes obtained from system uint64 heap_idle; // bytes in idle spans uint64 heap_inuse; // bytes in non-idle spans + uint64 heap_released; // bytes released to the OS uint64 heap_objects; // total number of allocated objects // Statistics about allocation of low-level fixed-size structures. @@ -220,6 +221,7 @@ struct MStats // Statistics about garbage collector. // Protected by stopping the world during GC. uint64 next_gc; // next GC (in heap_alloc time) + uint64 last_gc; // last GC (in absolute time) uint64 pause_total_ns; uint64 pause_ns[256]; uint32 numgc; @@ -304,14 +306,16 @@ struct MSpan { MSpan *next; // in a span linked list MSpan *prev; // in a span linked list - MSpan *allnext; // in the list of all spans + MSpan *allnext; // in the list of all spans PageID start; // starting page number uintptr npages; // number of pages in span MLink *freelist; // list of free objects uint32 ref; // number of allocated objects in this span uint32 sizeclass; // size class uint32 state; // MSpanInUse etc - byte *limit; // end of data in span + int64 unusedsince; // First time spotted by GC in MSpanFree state + uintptr npreleased; // number of pages released to the OS + byte *limit; // end of data in span }; void runtime_MSpan_Init(MSpan *span, PageID start, uintptr npages); @@ -381,6 +385,7 @@ MSpan* runtime_MHeap_LookupMaybe(MHeap *h, void *v); void runtime_MGetSizeClassInfo(int32 sizeclass, uintptr *size, int32 *npages, int32 *nobj); void* runtime_MHeap_SysAlloc(MHeap *h, uintptr n); void runtime_MHeap_MapBits(MHeap *h); +void runtime_MHeap_Scavenger(void*); void* runtime_mallocgc(uintptr size, uint32 flag, int32 dogc, int32 zeroed); int32 runtime_mlookup(void *v, byte **base, uintptr *size, MSpan **s); @@ -406,19 +411,11 @@ enum void runtime_MProf_Malloc(void*, uintptr); void runtime_MProf_Free(void*, uintptr); +void runtime_MProf_GC(void); void runtime_MProf_Mark(void (*scan)(byte *, int64)); int32 runtime_helpgc(bool*); void runtime_gchelper(void); -// Malloc profiling settings. -// Must match definition in extern.go. -enum { - MProf_None = 0, - MProf_Sample = 1, - MProf_All = 2, -}; -extern int32 runtime_malloc_profile; - struct __go_func_type; bool runtime_getfinalizer(void *p, bool del, void (**fn)(void*), const struct __go_func_type **ft); void runtime_walkfintab(void (*fn)(void*), void (*scan)(byte *, int64)); diff --git a/libgo/runtime/mem.c b/libgo/runtime/mem.c index a1c5eaa36d7..9df4c870dcf 100644 --- a/libgo/runtime/mem.c +++ b/libgo/runtime/mem.c @@ -39,6 +39,22 @@ addrspace_free(void *v __attribute__ ((unused)), uintptr n __attribute__ ((unuse return 1; } +static void * +mmap_fixed(byte *v, uintptr n, int32 prot, int32 flags, int32 fd, uint32 offset) +{ + void *p; + + p = runtime_mmap((void *)v, n, prot, flags, fd, offset); + if(p != v && addrspace_free(v, n)) { + // On some systems, mmap ignores v without + // MAP_FIXED, so retry if the address space is free. + if(p != MAP_FAILED) + runtime_munmap(p, n); + p = runtime_mmap((void *)v, n, prot, flags|MAP_FIXED, fd, offset); + } + return p; +} + void* runtime_SysAlloc(uintptr n) { @@ -91,12 +107,6 @@ runtime_SysReserve(void *v, uintptr n) int fd = -1; void *p; - // On 64-bit, people with ulimit -v set complain if we reserve too - // much address space. Instead, assume that the reservation is okay - // and check the assumption in SysMap. - if(sizeof(void*) == 8) - return v; - #ifdef USE_DEV_ZERO if (dev_zero == -1) { dev_zero = open("/dev/zero", O_RDONLY); @@ -108,10 +118,21 @@ runtime_SysReserve(void *v, uintptr n) fd = dev_zero; #endif + // On 64-bit, people with ulimit -v set complain if we reserve too + // much address space. Instead, assume that the reservation is okay + // if we can reserve at least 64K and check the assumption in SysMap. + // Only user-mode Linux (UML) rejects these requests. + if(sizeof(void*) == 8 && (uintptr)v >= 0xffffffffU) { + p = mmap_fixed(v, 64<<10, PROT_NONE, MAP_ANON|MAP_PRIVATE, fd, 0); + if (p != v) + return nil; + runtime_munmap(p, 64<<10); + return v; + } + p = runtime_mmap(v, n, PROT_NONE, MAP_ANON|MAP_PRIVATE, fd, 0); - if((uintptr)p < 4096 || -(uintptr)p < 4096) { + if(p == MAP_FAILED) return nil; - } return p; } @@ -135,13 +156,10 @@ runtime_SysMap(void *v, uintptr n) #endif // On 64-bit, we don't actually have v reserved, so tread carefully. - if(sizeof(void*) == 8) { - p = runtime_mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, fd, 0); - if(p != v && addrspace_free(v, n)) { - // On some systems, mmap ignores v without - // MAP_FIXED, so retry if the address space is free. - p = runtime_mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_FIXED|MAP_PRIVATE, fd, 0); - } + if(sizeof(void*) == 8 && (uintptr)v >= 0xffffffffU) { + p = mmap_fixed(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, fd, 0); + if(p == MAP_FAILED && errno == ENOMEM) + runtime_throw("runtime: out of memory"); if(p != v) { runtime_printf("runtime: address space conflict: map(%p) = %p\n", v, p); runtime_throw("runtime: address space conflict"); diff --git a/libgo/runtime/mgc0.c b/libgo/runtime/mgc0.c index 73c399df239..4aa7c45dcb3 100644 --- a/libgo/runtime/mgc0.c +++ b/libgo/runtime/mgc0.c @@ -61,6 +61,21 @@ enum { #define bitMask (bitBlockBoundary | bitAllocated | bitMarked | bitSpecial) +// Holding worldsema grants an M the right to try to stop the world. +// The procedure is: +// +// runtime_semacquire(&runtime_worldsema); +// m->gcing = 1; +// runtime_stoptheworld(); +// +// ... do stuff ... +// +// m->gcing = 0; +// runtime_semrelease(&runtime_worldsema); +// runtime_starttheworld(); +// +uint32 runtime_worldsema = 1; + // TODO: Make these per-M. static uint64 nhandoff; @@ -92,7 +107,6 @@ struct FinBlock Finalizer fin[1]; }; - static G *fing; static FinBlock *finq; // list of finalizers that are to be executed static FinBlock *finc; // cache of free blocks @@ -640,14 +654,6 @@ markfin(void *v) scanblock(v, size); } -struct root_list { - struct root_list *next; - struct root { - void *decl; - size_t size; - } roots[]; -}; - static struct root_list* roots; void @@ -778,9 +784,11 @@ sweep(void) byte *p; MCache *c; byte *arena_start; + int64 now; m = runtime_m(); arena_start = runtime_mheap.arena_start; + now = runtime_nanotime(); for(;;) { s = work.spans; @@ -789,6 +797,11 @@ sweep(void) if(!runtime_casp(&work.spans, s, s->allnext)) continue; + // Stamp newly unused spans. The scavenger will use that + // info to potentially give back some pages to the OS. + if(s->state == MSpanFree && s->unusedsince == 0) + s->unusedsince = now; + if(s->state != MSpanInUse) continue; @@ -875,11 +888,6 @@ runtime_gchelper(void) runtime_notewakeup(&work.alldone); } -// Semaphore, not Lock, so that the goroutine -// reschedules when there is contention rather -// than spinning. -static uint32 gcsema = 1; - // Initialized from $GOGC. GOGC=off means no gc. // // Next gc is after we've allocated an extra amount of @@ -968,9 +976,9 @@ runtime_gc(int32 force) if(gcpercent < 0) return; - runtime_semacquire(&gcsema); + runtime_semacquire(&runtime_worldsema); if(!force && mstats.heap_alloc < mstats.next_gc) { - runtime_semrelease(&gcsema); + runtime_semrelease(&runtime_worldsema); return; } @@ -1032,6 +1040,7 @@ runtime_gc(int32 force) obj1 = mstats.nmalloc - mstats.nfree; t3 = runtime_nanotime(); + mstats.last_gc = t3; mstats.pause_ns[mstats.numgc%nelem(mstats.pause_ns)] = t3 - t0; mstats.pause_total_ns += t3 - t0; mstats.numgc++; @@ -1045,8 +1054,9 @@ runtime_gc(int32 force) (unsigned long long) mstats.nmalloc, (unsigned long long)mstats.nfree, (unsigned long long) nhandoff); } - - runtime_semrelease(&gcsema); + + runtime_MProf_GC(); + runtime_semrelease(&runtime_worldsema); // If we could have used another helper proc, start one now, // in the hope that it will be available next time. @@ -1073,18 +1083,18 @@ runtime_ReadMemStats(MStats *stats) { M *m; - // Have to acquire gcsema to stop the world, + // Have to acquire worldsema to stop the world, // because stoptheworld can only be used by // one goroutine at a time, and there might be // a pending garbage collection already calling it. - runtime_semacquire(&gcsema); + runtime_semacquire(&runtime_worldsema); m = runtime_m(); m->gcing = 1; runtime_stoptheworld(); cachestats(); *stats = mstats; m->gcing = 0; - runtime_semrelease(&gcsema); + runtime_semrelease(&runtime_worldsema); runtime_starttheworld(false); } diff --git a/libgo/runtime/mheap.c b/libgo/runtime/mheap.c index 5a5a1e71a12..6bf38aa9934 100644 --- a/libgo/runtime/mheap.c +++ b/libgo/runtime/mheap.c @@ -103,6 +103,8 @@ HaveSpan: runtime_MSpanList_Remove(s); s->state = MSpanInUse; mstats.heap_idle -= s->npages<<PageShift; + mstats.heap_released -= s->npreleased<<PageShift; + s->npreleased = 0; if(s->npages > npage) { // Trim extra and put it back in the heap. @@ -280,6 +282,8 @@ MHeap_FreeLocked(MHeap *h, MSpan *s) } mstats.heap_idle += s->npages<<PageShift; s->state = MSpanFree; + s->unusedsince = 0; + s->npreleased = 0; runtime_MSpanList_Remove(s); sp = (uintptr*)(s->start<<PageShift); @@ -292,6 +296,7 @@ MHeap_FreeLocked(MHeap *h, MSpan *s) *tp |= *sp; // propagate "needs zeroing" mark s->start = t->start; s->npages += t->npages; + s->npreleased = t->npreleased; // absorb released pages p -= t->npages; h->map[p] = s; runtime_MSpanList_Remove(t); @@ -304,6 +309,7 @@ MHeap_FreeLocked(MHeap *h, MSpan *s) tp = (uintptr*)(t->start<<PageShift); *sp |= *tp; // propagate "needs zeroing" mark s->npages += t->npages; + s->npreleased += t->npreleased; h->map[p + s->npages - 1] = s; runtime_MSpanList_Remove(t); t->state = MSpanDead; @@ -317,8 +323,86 @@ MHeap_FreeLocked(MHeap *h, MSpan *s) runtime_MSpanList_Insert(&h->free[s->npages], s); else runtime_MSpanList_Insert(&h->large, s); +} - // TODO(rsc): IncrementalScavenge() to return memory to OS. +// Release (part of) unused memory to OS. +// Goroutine created at startup. +// Loop forever. +void +runtime_MHeap_Scavenger(void* dummy) +{ + MHeap *h; + MSpan *s, *list; + uint64 tick, now, forcegc, limit; + uint32 k, i; + uintptr released, sumreleased; + const byte *env; + bool trace; + Note note; + + USED(dummy); + + // If we go two minutes without a garbage collection, force one to run. + forcegc = 2*60*1e9; + // If a span goes unused for 5 minutes after a garbage collection, + // we hand it back to the operating system. + limit = 5*60*1e9; + // Make wake-up period small enough for the sampling to be correct. + if(forcegc < limit) + tick = forcegc/2; + else + tick = limit/2; + + trace = false; + env = runtime_getenv("GOGCTRACE"); + if(env != nil) + trace = runtime_atoi(env) > 0; + + h = &runtime_mheap; + for(k=0;; k++) { + runtime_noteclear(¬e); + runtime_entersyscall(); + runtime_notetsleep(¬e, tick); + runtime_exitsyscall(); + + runtime_lock(h); + now = runtime_nanotime(); + if(now - mstats.last_gc > forcegc) { + runtime_unlock(h); + runtime_gc(1); + runtime_lock(h); + now = runtime_nanotime(); + if (trace) + runtime_printf("scvg%d: GC forced\n", k); + } + sumreleased = 0; + for(i=0; i < nelem(h->free)+1; i++) { + if(i < nelem(h->free)) + list = &h->free[i]; + else + list = &h->large; + if(runtime_MSpanList_IsEmpty(list)) + continue; + for(s=list->next; s != list; s=s->next) { + if(s->unusedsince != 0 && (now - s->unusedsince) > limit) { + released = (s->npages - s->npreleased) << PageShift; + mstats.heap_released += released; + sumreleased += released; + s->npreleased = s->npages; + runtime_SysUnused((void*)(s->start << PageShift), s->npages << PageShift); + } + } + } + runtime_unlock(h); + + if(trace) { + if(sumreleased > 0) + runtime_printf("scvg%d: %p MB released\n", k, (void*)(sumreleased>>20)); + runtime_printf("scvg%d: inuse: %lld, idle: %lld, sys: %lld, released: %lld, consumed: %lld (MB)\n", + k, (long long)(mstats.heap_inuse>>20), (long long)(mstats.heap_idle>>20), (long long)(mstats.heap_sys>>20), + (long long)(mstats.heap_released>>20), (long long)((mstats.heap_sys - mstats.heap_released)>>20)); + } + } } // Initialize a new span with the given start and npages. @@ -333,6 +417,8 @@ runtime_MSpan_Init(MSpan *span, PageID start, uintptr npages) span->ref = 0; span->sizeclass = 0; span->state = 0; + span->unusedsince = 0; + span->npreleased = 0; } // Initialize an empty doubly-linked list. diff --git a/libgo/runtime/mprof.goc b/libgo/runtime/mprof.goc index d143d19e5ba..c61c65ccee3 100644 --- a/libgo/runtime/mprof.goc +++ b/libgo/runtime/mprof.goc @@ -26,6 +26,10 @@ struct Bucket uintptr frees; uintptr alloc_bytes; uintptr free_bytes; + uintptr recent_allocs; // since last gc + uintptr recent_frees; + uintptr recent_alloc_bytes; + uintptr recent_free_bytes; uintptr hash; uintptr nstk; uintptr stk[1]; @@ -39,7 +43,7 @@ static uintptr bucketmem; // Return the bucket for stk[0:nstk], allocating new bucket if needed. static Bucket* -stkbucket(uintptr *stk, int32 nstk) +stkbucket(uintptr *stk, int32 nstk, bool alloc) { int32 i; uintptr h; @@ -66,6 +70,9 @@ stkbucket(uintptr *stk, int32 nstk) runtime_mcmp((byte*)b->stk, (byte*)stk, nstk*sizeof stk[0]) == 0) return b; + if(!alloc) + return nil; + b = runtime_mallocgc(sizeof *b + nstk*sizeof stk[0], FlagNoProfiling, 0, 1); bucketmem += sizeof *b + nstk*sizeof stk[0]; runtime_memmove(b->stk, stk, nstk*sizeof stk[0]); @@ -78,6 +85,26 @@ stkbucket(uintptr *stk, int32 nstk) return b; } +// Record that a gc just happened: all the 'recent' statistics are now real. +void +runtime_MProf_GC(void) +{ + Bucket *b; + + runtime_lock(&proflock); + for(b=buckets; b; b=b->allnext) { + b->allocs += b->recent_allocs; + b->frees += b->recent_frees; + b->alloc_bytes += b->recent_alloc_bytes; + b->free_bytes += b->recent_free_bytes; + b->recent_allocs = 0; + b->recent_frees = 0; + b->recent_alloc_bytes = 0; + b->recent_free_bytes = 0; + } + runtime_unlock(&proflock); +} + // Map from pointer to Bucket* that allocated it. // Three levels: // Linked-list hash table for top N-20 bits. @@ -198,15 +225,11 @@ runtime_MProf_Malloc(void *p, uintptr size) return; m->nomemprof++; -#if 0 nstk = runtime_callers(1, stk, 32); -#else - nstk = 0; -#endif runtime_lock(&proflock); - b = stkbucket(stk, nstk); - b->allocs++; - b->alloc_bytes += size; + b = stkbucket(stk, nstk, true); + b->recent_allocs++; + b->recent_alloc_bytes += size; setaddrbucket((uintptr)p, b); runtime_unlock(&proflock); m = runtime_m(); @@ -228,8 +251,8 @@ runtime_MProf_Free(void *p, uintptr size) runtime_lock(&proflock); b = getaddrbucket((uintptr)p); if(b != nil) { - b->frees++; - b->free_bytes += size; + b->recent_frees++; + b->recent_free_bytes += size; } runtime_unlock(&proflock); m = runtime_m(); @@ -240,7 +263,7 @@ runtime_MProf_Free(void *p, uintptr size) // Go interface to profile data. (Declared in extern.go) // Assumes Go sizeof(int) == sizeof(int32) -// Must match MemProfileRecord in extern.go. +// Must match MemProfileRecord in debug.go. typedef struct Record Record; struct Record { int64 alloc_bytes, free_bytes; @@ -292,3 +315,114 @@ runtime_MProf_Mark(void (*scan)(byte *, int64)) scan((byte*)&addrhash, sizeof addrhash); scan((byte*)&addrfree, sizeof addrfree); } + +// Must match StackRecord in debug.go. +typedef struct TRecord TRecord; +struct TRecord { + uintptr stk[32]; +}; + +func ThreadCreateProfile(p Slice) (n int32, ok bool) { + TRecord *r; + M *first, *m; + + first = runtime_atomicloadp(&runtime_allm); + n = 0; + for(m=first; m; m=m->alllink) + n++; + ok = false; + if(n <= p.__count) { + ok = true; + r = (TRecord*)p.__values; + for(m=first; m; m=m->alllink) { + runtime_memmove(r->stk, m->createstack, sizeof r->stk); + r++; + } + } +} + +func Stack(b Slice, all bool) (n int32) { + byte *pc, *sp; + + sp = runtime_getcallersp(&b); + pc = runtime_getcallerpc(&b); + + if(all) { + runtime_semacquire(&runtime_worldsema); + runtime_m()->gcing = 1; + runtime_stoptheworld(); + } + + if(b.__count == 0) + n = 0; + else{ + G* g = runtime_g(); + g->writebuf = (byte*)b.__values; + g->writenbuf = b.__count; + USED(pc); + USED(sp); + // runtime_goroutineheader(g); + // runtime_traceback(pc, sp, 0, g); + // if(all) + // runtime_tracebackothers(g); + n = b.__count - g->writenbuf; + g->writebuf = nil; + g->writenbuf = 0; + } + + if(all) { + runtime_m()->gcing = 0; + runtime_semrelease(&runtime_worldsema); + runtime_starttheworld(false); + } +} + +static void +saveg(byte *pc, byte *sp, G *g, TRecord *r) +{ + int32 n; + + USED(pc); + USED(sp); + USED(g); + // n = runtime_gentraceback(pc, sp, 0, g, 0, r->stk, nelem(r->stk)); + n = 0; + if((size_t)n < nelem(r->stk)) + r->stk[n] = 0; +} + +func GoroutineProfile(b Slice) (n int32, ok bool) { + byte *pc, *sp; + TRecord *r; + G *gp; + + sp = runtime_getcallersp(&b); + pc = runtime_getcallerpc(&b); + + ok = false; + n = runtime_gcount(); + if(n <= b.__count) { + runtime_semacquire(&runtime_worldsema); + runtime_m()->gcing = 1; + runtime_stoptheworld(); + + n = runtime_gcount(); + if(n <= b.__count) { + G* g = runtime_g(); + ok = true; + r = (TRecord*)b.__values; + saveg(pc, sp, g, r++); + for(gp = runtime_allg; gp != nil; gp = gp->alllink) { + if(gp == g || gp->status == Gdead) + continue; + //saveg(gp->sched.pc, gp->sched.sp, gp, r++); + r++; + } + } + + runtime_m()->gcing = 0; + runtime_semrelease(&runtime_worldsema); + runtime_starttheworld(false); + } +} + diff --git a/libgo/runtime/proc.c b/libgo/runtime/proc.c index d7e1e5ff405..31e8287e704 100644 --- a/libgo/runtime/proc.c +++ b/libgo/runtime/proc.c @@ -362,6 +362,9 @@ runtime_mcall(void (*pfn)(G*)) } } +// Keep trace of scavenger's goroutine for deadlock detection. +static G *scvg; + // The bootstrap sequence is: // // call osinit @@ -430,6 +433,7 @@ runtime_main(void) // to preserve the lock. runtime_LockOSThread(); runtime_sched.init = true; + scvg = __go_go(runtime_MHeap_Scavenger, nil); main_init(); runtime_sched.init = false; if(!runtime_sched.lockmain) @@ -536,18 +540,20 @@ runtime_idlegoroutine(void) static void mcommoninit(M *m) { - // Add to runtime_allm so garbage collector doesn't free m - // when it is just in a register or thread-local storage. - m->alllink = runtime_allm; - // runtime_Cgocalls() iterates over allm w/o schedlock, - // so we need to publish it safely. - runtime_atomicstorep((void**)&runtime_allm, m); - m->id = runtime_sched.mcount++; m->fastrand = 0x49f6428aUL + m->id + runtime_cputicks(); if(m->mcache == nil) m->mcache = runtime_allocmcache(); + + runtime_callers(1, m->createstack, nelem(m->createstack)); + + // Add to runtime_allm so garbage collector doesn't free m + // when it is just in a register or thread-local storage. + m->alllink = runtime_allm; + // runtime_NumCgoCall() iterates over allm w/o schedlock, + // so we need to publish it safely. + runtime_atomicstorep(&runtime_allm, m); } // Try to increment mcpu. Report whether succeeded. @@ -784,9 +790,13 @@ top: mput(m); } - v = runtime_atomicload(&runtime_sched.atomic); - if(runtime_sched.grunning == 0) + // Look for deadlock situation. + if((scvg == nil && runtime_sched.grunning == 0) || + (scvg != nil && runtime_sched.grunning == 1 && runtime_sched.gwait == 0 && + (scvg->status == Grunning || scvg->status == Gsyscall))) { runtime_throw("all goroutines are asleep - deadlock!"); + } + m->nextg = nil; m->waitnextg = 1; runtime_noteclear(&m->havenextg); @@ -795,6 +805,7 @@ top: // Entersyscall might have decremented mcpu too, but if so // it will see the waitstop and take the slow path. // Exitsyscall never increments mcpu beyond mcpumax. + v = runtime_atomicload(&runtime_sched.atomic); if(atomic_waitstop(v) && atomic_mcpu(v) <= atomic_mcpumax(v)) { // set waitstop = 0 (known to be 1) runtime_xadd(&runtime_sched.atomic, -1<<waitstopShift); @@ -1124,6 +1135,9 @@ runtime_entersyscall(void) { uint32 v; + if(m->profilehz > 0) + runtime_setprof(false); + // Leave SP around for gc and traceback. #ifdef USING_SPLIT_STACK g->gcstack = __splitstack_find(NULL, NULL, &g->gcstack_size, @@ -1194,6 +1208,9 @@ runtime_exitsyscall(void) #endif gp->gcnext_sp = nil; runtime_memclr(gp->gcregs, sizeof gp->gcregs); + + if(m->profilehz > 0) + runtime_setprof(true); return; } @@ -1470,11 +1487,17 @@ runtime_mid() return m->id; } -int32 runtime_Goroutines (void) - __asm__ ("libgo_runtime.runtime.Goroutines"); +int32 runtime_NumGoroutine (void) + __asm__ ("libgo_runtime.runtime.NumGoroutine"); + +int32 +runtime_NumGoroutine() +{ + return runtime_sched.gcount; +} int32 -runtime_Goroutines() +runtime_gcount(void) { return runtime_sched.gcount; } diff --git a/libgo/runtime/reflect.goc b/libgo/runtime/reflect.goc index d3cde7c0e5b..447b786a8d8 100644 --- a/libgo/runtime/reflect.goc +++ b/libgo/runtime/reflect.goc @@ -17,10 +17,10 @@ func ifaceE2I(inter *Type, e Eface, ret *Iface) { t = e.__type_descriptor; if(t == nil) { // explicit conversions require non-nil interface value. - newTypeAssertionError(nil, nil, inter, + runtime_newTypeAssertionError( nil, nil, inter->__reflection, nil, &err); - __go_panic(err); + runtime_panic(err); } ret->__object = e.__object; ret->__methods = __go_convert_interface(inter, t); diff --git a/libgo/runtime/runtime.c b/libgo/runtime/runtime.c index 7c8c436deeb..d1ce26db499 100644 --- a/libgo/runtime/runtime.c +++ b/libgo/runtime/runtime.c @@ -184,6 +184,21 @@ runtime_fastrand1(void) return x; } +static struct root_list runtime_roots = +{ NULL, + { { &syscall_Envs, sizeof syscall_Envs }, + { &os_Args, sizeof os_Args }, + { NULL, 0 } }, +}; + +void +runtime_check(void) +{ + __go_register_gc_roots(&runtime_roots); + + runtime_initsig (); +} + int64 runtime_cputicks(void) { @@ -196,22 +211,3 @@ runtime_cputicks(void) return 0; #endif } - -struct funcline_go_return -{ - String retfile; - int32 retline; -}; - -struct funcline_go_return -runtime_funcline_go(void *f, uintptr targetpc) - __asm__("libgo_runtime.runtime.funcline_go"); - -struct funcline_go_return -runtime_funcline_go(void *f __attribute__((unused)), - uintptr targetpc __attribute__((unused))) -{ - struct funcline_go_return ret; - runtime_memclr(&ret, sizeof ret); - return ret; -} diff --git a/libgo/runtime/runtime.h b/libgo/runtime/runtime.h index 41b0ef5f007..e012e1833bb 100644 --- a/libgo/runtime/runtime.h +++ b/libgo/runtime/runtime.h @@ -48,6 +48,7 @@ typedef unsigned int uintptr __attribute__ ((mode (pointer))); typedef uint8 bool; typedef uint8 byte; +typedef struct Func Func; typedef struct G G; typedef union Lock Lock; typedef struct M M; @@ -143,6 +144,8 @@ struct G M* lockedm; M* idlem; // int32 sig; + int32 writenbuf; + byte* writebuf; // uintptr sigcode0; // uintptr sigcode1; // uintptr sigpc; @@ -174,6 +177,7 @@ struct M MCache *mcache; G* lockedg; G* idleg; + uintptr createstack[32]; // Stack that created this thread. M* nextwaitm; // next M waiting for lock uintptr waitsema; // semaphore for parking on locks uint32 waitsemacount; @@ -187,11 +191,23 @@ struct SigTab }; enum { - SigCatch = 1<<0, - SigIgnore = 1<<1, - SigRestart = 1<<2, - SigQueue = 1<<3, - SigPanic = 1<<4, + SigNotify = 1<<0, // let signal.Notify have signal, even if from kernel + SigKill = 1<<1, // if signal.Notify doesn't take it, exit quietly + SigThrow = 1<<2, // if signal.Notify doesn't take it, exit loudly + SigPanic = 1<<3, // if the signal is from the kernel, panic + SigDefault = 1<<4, // if the signal isn't explicitly requested, don't monitor it +}; + +#ifndef NSIG +#define NSIG 32 +#endif + +// NOTE(rsc): keep in sync with extern.go:/type.Func. +// Eventually, the loaded symbol table should be closer to this form. +struct Func +{ + String name; + uintptr entry; // entry pc }; /* Macros. */ @@ -271,7 +287,8 @@ void runtime_throw(const char*) __attribute__ ((noreturn)); void runtime_panicstring(const char*) __attribute__ ((noreturn)); void* runtime_mal(uintptr); void runtime_schedinit(void); -void runtime_initsig(int32); +void runtime_initsig(void); +void runtime_sigenable(uint32 sig); String runtime_gostringnocopy(const byte*); void* runtime_mstart(void*); G* runtime_malg(int32, byte**, size_t*); @@ -285,11 +302,13 @@ void runtime_entersyscall(void) __asm__("libgo_syscall.syscall.entersyscall"); void runtime_exitsyscall(void) __asm__("libgo_syscall.syscall.exitsyscall"); void siginit(void); bool __go_sigsend(int32 sig); +int32 runtime_callers(int32, uintptr*, int32); int64 runtime_nanotime(void); int64 runtime_cputicks(void); void runtime_stoptheworld(void); void runtime_starttheworld(bool); +extern uint32 runtime_worldsema; G* __go_go(void (*pfn)(void*), void*); /* @@ -336,9 +355,26 @@ void runtime_futexsleep(uint32*, uint32, int64); void runtime_futexwakeup(uint32*, uint32); /* + * low level C-called + */ +#define runtime_mmap mmap +#define runtime_munmap munmap +#define runtime_madvise madvise +#define runtime_memclr(buf, size) __builtin_memset((buf), 0, (size)) +#define runtime_getcallerpc(p) __builtin_return_address(0) + +#ifdef __rtems__ +void __wrap_rtems_task_variable_add(void **); +#endif + +/* * runtime go-called */ void runtime_panic(Eface); +struct __go_func_type; +void reflect_call(const struct __go_func_type *, const void *, _Bool, _Bool, + void **, void **) + asm ("libgo_reflect.reflect.call"); /* Functions. */ #define runtime_panic __go_panic @@ -348,11 +384,9 @@ void runtime_panic(Eface); #define runtime_strcmp(s1, s2) __builtin_strcmp((s1), (s2)) #define runtime_mcmp(a, b, s) __builtin_memcmp((a), (b), (s)) #define runtime_memmove(a, b, s) __builtin_memmove((a), (b), (s)) -#define runtime_exit(s) _exit(s) +#define runtime_exit(s) exit(s) MCache* runtime_allocmcache(void); void free(void *v); -struct __go_func_type; -bool runtime_addfinalizer(void*, void(*fn)(void*), const struct __go_func_type *); #define runtime_cas(pval, old, new) __sync_bool_compare_and_swap (pval, old, new) #define runtime_casp(pval, old, new) __sync_bool_compare_and_swap (pval, old, new) #define runtime_xadd(p, v) __sync_add_and_fetch (p, v) @@ -362,6 +396,11 @@ bool runtime_addfinalizer(void*, void(*fn)(void*), const struct __go_func_type * #define runtime_atomicloadp(p) __atomic_load_n (p, __ATOMIC_SEQ_CST) #define runtime_atomicstorep(p, v) __atomic_store_n (p, v, __ATOMIC_SEQ_CST) +struct __go_func_type; +bool runtime_addfinalizer(void*, void(*fn)(void*), const struct __go_func_type *); +#define runtime_getcallersp(p) __builtin_frame_address(1) +int32 runtime_mcount(void); +int32 runtime_gcount(void); void runtime_dopanic(int32) __attribute__ ((noreturn)); void runtime_startpanic(void); void runtime_ready(G*); @@ -374,29 +413,55 @@ void runtime_resetcpuprofiler(int32); void runtime_setcpuprofilerate(void(*)(uintptr*, int32), int32); void runtime_usleep(uint32); +/* + * runtime c-called (but written in Go) + */ +void runtime_newError(String, Eface*); +void runtime_printany(Eface) + __asm__("libgo_runtime.runtime.Printany"); +void runtime_newTypeAssertionError(const String*, const String*, const String*, const String*, Eface*) + __asm__("libgo_runtime.runtime.NewTypeAssertionError"); +void runtime_newErrorString(String, Eface*) + __asm__("libgo_runtime.runtime.NewErrorString"); + +/* + * wrapped for go users + */ void runtime_semacquire(uint32 volatile *); void runtime_semrelease(uint32 volatile *); +String runtime_signame(int32 sig); int32 runtime_gomaxprocsfunc(int32 n); void runtime_procyield(uint32); void runtime_osyield(void); void runtime_LockOSThread(void) __asm__("libgo_runtime.runtime.LockOSThread"); void runtime_UnlockOSThread(void) __asm__("libgo_runtime.runtime.UnlockOSThread"); -/* - * low level C-called - */ -#define runtime_mmap mmap -#define runtime_munmap munmap -#define runtime_madvise madvise -#define runtime_memclr(buf, size) __builtin_memset((buf), 0, (size)) +uintptr runtime_memlimit(void); -struct __go_func_type; -void reflect_call(const struct __go_func_type *, const void *, _Bool, _Bool, - void **, void **) - asm ("libgo_reflect.reflect.call"); - -#ifdef __rtems__ -void __wrap_rtems_task_variable_add(void **); -#endif +// If appropriate, ask the operating system to control whether this +// thread should receive profiling signals. This is only necessary on OS X. +// An operating system should not deliver a profiling signal to a +// thread that is not actually executing (what good is that?), but that's +// what OS X prefers to do. When profiling is turned on, we mask +// away the profiling signal when threads go to sleep, so that OS X +// is forced to deliver the signal to a thread that's actually running. +// This is a no-op on other systems. +void runtime_setprof(bool); void runtime_time_scan(void (*)(byte*, int64)); + +void runtime_setsig(int32, bool, bool); +#define runtime_setitimer setitimer + +void runtime_check(void); + +// A list of global variables that the garbage collector must scan. +struct root_list { + struct root_list *next; + struct root { + void *decl; + size_t size; + } roots[]; +}; + +void __go_register_gc_roots(struct root_list*); diff --git a/libgo/runtime/sema.goc b/libgo/runtime/sema.goc index dd58cf38fb8..ff9c4f2e19e 100644 --- a/libgo/runtime/sema.goc +++ b/libgo/runtime/sema.goc @@ -17,7 +17,7 @@ // See Mullender and Cox, ``Semaphores in Plan 9,'' // http://swtch.com/semaphore.pdf -package runtime +package sync #include "runtime.h" #include "arch.h" @@ -172,10 +172,10 @@ runtime_semrelease(uint32 volatile *addr) runtime_ready(s->g); } -func Semacquire(addr *uint32) { +func runtime_Semacquire(addr *uint32) { runtime_semacquire(addr); } -func Semrelease(addr *uint32) { +func runtime_Semrelease(addr *uint32) { runtime_semrelease(addr); } diff --git a/libgo/runtime/signal_unix.c b/libgo/runtime/signal_unix.c new file mode 100644 index 00000000000..3b8f4393708 --- /dev/null +++ b/libgo/runtime/signal_unix.c @@ -0,0 +1,64 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin freebsd linux openbsd netbsd + +#include <sys/time.h> + +#include "runtime.h" +#include "defs.h" + +extern SigTab runtime_sigtab[]; + +void +runtime_initsig(void) +{ + int32 i; + SigTab *t; + + // First call: basic setup. + for(i = 0; runtime_sigtab[i].sig != -1; i++) { + t = &runtime_sigtab[i]; + if((t->flags == 0) || (t->flags & SigDefault)) + continue; + runtime_setsig(i, false, true); + } +} + +void +runtime_sigenable(uint32 sig) +{ + int32 i; + SigTab *t; + + for(i = 0; runtime_sigtab[i].sig != -1; i++) { + // ~0 means all signals. + if(~sig == 0 || runtime_sigtab[i].sig == (int32)sig) { + t = &runtime_sigtab[i]; + if(t->flags & SigDefault) { + runtime_setsig(i, false, true); + t->flags &= ~SigDefault; // make this idempotent + } + } + } +} + +void +runtime_resetcpuprofiler(int32 hz) +{ + struct itimerval it; + + runtime_memclr((byte*)&it, sizeof it); + if(hz == 0) { + runtime_setitimer(ITIMER_PROF, &it, nil); + runtime_setprof(false); + } else { + it.it_interval.tv_sec = 0; + it.it_interval.tv_usec = 1000000 / hz; + it.it_value = it.it_interval; + runtime_setitimer(ITIMER_PROF, &it, nil); + runtime_setprof(true); + } + runtime_m()->profilehz = hz; +} diff --git a/libgo/runtime/sigqueue.goc b/libgo/runtime/sigqueue.goc index e91571902c0..be7c5920cbc 100644 --- a/libgo/runtime/sigqueue.goc +++ b/libgo/runtime/sigqueue.goc @@ -11,7 +11,7 @@ // // Ownership for sig.Note passes back and forth between // the signal handler and the signal goroutine in rounds. -// The initial state is that sig.note is cleared (setup by siginit). +// The initial state is that sig.note is cleared (setup by signal_enable). // At the beginning of each round, mask == 0. // The round goes through three stages: // @@ -36,7 +36,7 @@ // ownership by returning from notesleep (caused by the notewakeup) // and gives up ownership by clearing mask. -package runtime +package signal #include "config.h" #include "runtime.h" #include "arch.h" @@ -45,33 +45,29 @@ package runtime static struct { Note; - uint32 mask; + uint32 mask[(NSIG+31)/32]; + uint32 wanted[(NSIG+31)/32]; + uint32 kick; bool inuse; } sig; -void -siginit(void) -{ - runtime_noteclear(&sig); -} - // Called from sighandler to send a signal back out of the signal handling thread. bool __go_sigsend(int32 s) { uint32 bit, mask; - if(!sig.inuse) + if(!sig.inuse || s < 0 || (size_t)s >= 32*nelem(sig.wanted) || !(sig.wanted[s/32]&(1U<<(s&31)))) return false; - bit = 1 << s; + bit = 1 << (s&31); for(;;) { - mask = sig.mask; + mask = sig.mask[s/32]; if(mask & bit) break; // signal already in queue - if(runtime_cas(&sig.mask, mask, mask|bit)) { + if(runtime_cas(&sig.mask[s/32], mask, mask|bit)) { // Added to queue. - // Only send a wakeup for the first signal in each round. - if(mask == 0) + // Only send a wakeup if the receiver needs a kick. + if(runtime_cas(&sig.kick, 1, 0)) runtime_notewakeup(&sig); break; } @@ -79,37 +75,79 @@ __go_sigsend(int32 s) return true; } -// Called to receive a bitmask of queued signals. -func Sigrecv() (m uint32) { - runtime_entersyscall(); - runtime_notesleep(&sig); - runtime_exitsyscall(); - runtime_noteclear(&sig); +// Called to receive the next queued signal. +// Must only be called from a single goroutine at a time. +func signal_recv() (m uint32) { + static uint32 recv[nelem(sig.mask)]; + int32 i, more; + for(;;) { - m = sig.mask; - if(runtime_cas(&sig.mask, m, 0)) - break; + // Serve from local copy if there are bits left. + for(i=0; i<NSIG; i++) { + if(recv[i/32]&(1U<<(i&31))) { + recv[i/32] ^= 1U<<(i&31); + m = i; + goto done; + } + } + + // Get a new local copy. + // Ask for a kick if more signals come in + // during or after our check (before the sleep). + if(sig.kick == 0) { + runtime_noteclear(&sig); + runtime_cas(&sig.kick, 0, 1); + } + + more = 0; + for(i=0; (size_t)i<nelem(sig.mask); i++) { + for(;;) { + m = sig.mask[i]; + if(runtime_cas(&sig.mask[i], m, 0)) + break; + } + recv[i] = m; + if(m != 0) + more = 1; + } + if(more) + continue; + + // Sleep waiting for more. + runtime_entersyscall(); + runtime_notesleep(&sig); + runtime_exitsyscall(); } + +done:; + // goc requires that we fall off the end of functions + // that return values instead of using our own return + // statements. } -func Signame(sig int32) (name String) { - const char* s = NULL; - char buf[100]; -#if defined(HAVE_STRSIGNAL) - s = strsignal(sig); -#endif - if (s == NULL) { - snprintf(buf, sizeof buf, "signal %d", sig); - s = buf; +// Must only be called from a single goroutine at a time. +func signal_enable(s uint32) { + int32 i; + + if(!sig.inuse) { + // The first call to signal_enable is for us + // to use for initialization. It does not pass + // signal information in m. + sig.inuse = true; // enable reception of signals; cannot disable + runtime_noteclear(&sig); + return; + } + + if(~s == 0) { + // Special case: want everything. + for(i=0; (size_t)i<nelem(sig.wanted); i++) + sig.wanted[i] = ~(uint32)0; + runtime_sigenable(s); + return; } - int32 len = __builtin_strlen(s); - unsigned char *data = runtime_mallocgc(len, FlagNoPointers, 0, 0); - __builtin_memcpy(data, s, len); - name.__data = data; - name.__length = len; -} -func Siginit() { - runtime_initsig(SigQueue); - sig.inuse = true; // enable reception of signals; cannot disable + if(s >= nelem(sig.wanted)*32) + return; + sig.wanted[s/32] |= 1U<<(s&31); + runtime_sigenable(s); } diff --git a/libgo/runtime/thread-linux.c b/libgo/runtime/thread-linux.c index 8dd5fc4b481..6a69fb429a4 100644 --- a/libgo/runtime/thread-linux.c +++ b/libgo/runtime/thread-linux.c @@ -3,6 +3,16 @@ // license that can be found in the LICENSE file. #include "runtime.h" +#include "defs.h" + +// Linux futex. +// +// futexsleep(uint32 *addr, uint32 val) +// futexwakeup(uint32 *addr) +// +// Futexsleep atomically checks if *addr == val and if so, sleeps on addr. +// Futexwakeup wakes up threads sleeping on addr. +// Futexsleep is allowed to wake up spuriously. #include <errno.h> #include <string.h> diff --git a/libgo/runtime/thread.c b/libgo/runtime/thread.c index 748a62d59f5..12d009926e3 100644 --- a/libgo/runtime/thread.c +++ b/libgo/runtime/thread.c @@ -4,6 +4,8 @@ #include <errno.h> #include <signal.h> +#include <sys/time.h> +#include <sys/resource.h> #include "runtime.h" #include "go-assert.h" @@ -138,6 +140,7 @@ runtime_minit(void) byte* stack; size_t stacksize; stack_t ss; + sigset_t sigs; // Initialize signal handling. runtime_m()->gsignal = runtime_malg(32*1024, &stack, &stacksize); // OS X wants >=8K, Linux >=2K @@ -146,4 +149,34 @@ runtime_minit(void) ss.ss_size = stacksize; if(sigaltstack(&ss, nil) < 0) *(int *)0xf1 = 0xf1; + if (sigemptyset(&sigs) != 0) + runtime_throw("sigemptyset"); + sigprocmask(SIG_SETMASK, &sigs, nil); +} + +uintptr +runtime_memlimit(void) +{ + struct rlimit rl; + uintptr used; + + if(getrlimit(RLIMIT_AS, &rl) != 0) + return 0; + if(rl.rlim_cur >= 0x7fffffff) + return 0; + + // Estimate our VM footprint excluding the heap. + // Not an exact science: use size of binary plus + // some room for thread stacks. + used = (64<<20); + if(used >= rl.rlim_cur) + return 0; + + // If there's not at least 16 MB left, we're probably + // not going to be able to do much. Treat as no limit. + rl.rlim_cur -= used; + if(rl.rlim_cur < (16<<20)) + return 0; + + return rl.rlim_cur - used; } diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 95a6303738e..44fabda7b36 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,23 @@ +2012-02-29 Eric Botcazou <ebotcazou@adacore.com> + + * config/linux/sparc/futex.h (cpu_relax): Read from CC register. + +2012-02-27 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR libstdc++/52188 + * acinclude.m4 (LIBGOMP_ENABLE_SYMVERS): Remove symvers_renaming. + Remove ENABLE_SYMVERS_SOL2. + * configure: Regenerate. + * Makefile.am [LIBGOMP_BUILD_VERSIONED_SHLIB] (comma): New variable. + (PREPROCESS): New variable. + (libgomp.ver): New target. + [LIBGOMP_BUILD_VERSIONED_SHLIB && + LIBGOMP_BUILD_VERSIONED_SHLIB_GNU]: Remove + LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2 handling. + Use libgomp.ver. + [LIBGOMP_BUILD_VERSIONED_SHLIB_SUN]: Use libgomp.ver, libgomp.ver-sun. + * Makefile.in: Regenerate. + 2012-02-14 Walter Lee <walt@tilera.com> * configure.tgt: Handle tilegx and tilepro. diff --git a/libgomp/Makefile.am b/libgomp/Makefile.am index c0c91678bab..2bc4986ad18 100644 --- a/libgomp/Makefile.am +++ b/libgomp/Makefile.am @@ -22,26 +22,26 @@ toolexeclib_LTLIBRARIES = libgomp.la nodist_toolexeclib_HEADERS = libgomp.spec if LIBGOMP_BUILD_VERSIONED_SHLIB +# -Wc is only a libtool option. +comma = , +PREPROCESS = $(subst -Wc$(comma), , $(COMPILE)) -E + +libgomp.ver: $(top_srcdir)/libgomp.map + $(EGREP) -v '#(#| |$$)' $< | \ + $(PREPROCESS) -P -include config.h - > $@ || (rm -f $@ ; exit 1) + if LIBGOMP_BUILD_VERSIONED_SHLIB_GNU -if LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2 -libgomp_version_script = -Wl,--version-script,libgomp.map-sol2 -libgomp_version_dep = libgomp.map-sol2 -libgomp.map-sol2 : $(top_srcdir)/libgomp.map - sed -e '/^#ifdef HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT/,/^#endif/d' $< \ - > $@ || (rm -f $@ ; exit 1) -else -libgomp_version_script = -Wl,--version-script,$(top_srcdir)/libgomp.map -libgomp_version_dep = $(top_srcdir)/libgomp.map -endif +libgomp_version_script = -Wl,--version-script,libgomp.ver +libgomp_version_dep = libgomp.ver endif if LIBGOMP_BUILD_VERSIONED_SHLIB_SUN -libgomp_version_script = -Wl,-M,libgomp.map-sun -libgomp_version_dep = libgomp.map-sun -libgomp.map-sun : $(top_srcdir)/libgomp.map \ +libgomp_version_script = -Wl,-M,libgomp.ver-sun +libgomp_version_dep = libgomp.ver-sun +libgomp.ver-sun : libgomp.ver \ $(top_srcdir)/../contrib/make_sunver.pl \ $(libgomp_la_OBJECTS) $(libgomp_la_LIBADD) perl $(top_srcdir)/../contrib/make_sunver.pl \ - $(top_srcdir)/libgomp.map \ + libgomp.ver \ $(libgomp_la_OBJECTS:%.lo=.libs/%.o) \ `echo $(libgomp_la_LIBADD) | \ sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \ diff --git a/libgomp/Makefile.in b/libgomp/Makefile.in index b81936ac5ca..ecc010eda4b 100644 --- a/libgomp/Makefile.in +++ b/libgomp/Makefile.in @@ -298,14 +298,16 @@ AM_CFLAGS = $(XCFLAGS) AM_LDFLAGS = $(XLDFLAGS) $(SECTION_LDFLAGS) $(OPT_LDFLAGS) toolexeclib_LTLIBRARIES = libgomp.la nodist_toolexeclib_HEADERS = libgomp.spec + +# -Wc is only a libtool option. +@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@comma = , +@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@PREPROCESS = $(subst -Wc$(comma), , $(COMPILE)) -E @LIBGOMP_BUILD_VERSIONED_SHLIB_FALSE@libgomp_version_script = -@LIBGOMP_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_FALSE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp_version_script = -Wl,--version-script,$(top_srcdir)/libgomp.map -@LIBGOMP_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp_version_script = -Wl,--version-script,libgomp.map-sol2 -@LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp_version_script = -Wl,-M,libgomp.map-sun +@LIBGOMP_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp_version_script = -Wl,--version-script,libgomp.ver +@LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp_version_script = -Wl,-M,libgomp.ver-sun @LIBGOMP_BUILD_VERSIONED_SHLIB_FALSE@libgomp_version_dep = -@LIBGOMP_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_FALSE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp_version_dep = $(top_srcdir)/libgomp.map -@LIBGOMP_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp_version_dep = libgomp.map-sol2 -@LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp_version_dep = libgomp.map-sun +@LIBGOMP_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp_version_dep = libgomp.ver +@LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp_version_dep = libgomp.ver-sun libgomp_version_info = -version-info $(libtool_VERSION) libgomp_la_LDFLAGS = $(libgomp_version_info) $(libgomp_version_script) \ $(lt_host_flags) @@ -1066,14 +1068,15 @@ uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ vpath % $(strip $(search_path)) -@LIBGOMP_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp.map-sol2 : $(top_srcdir)/libgomp.map -@LIBGOMP_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@ sed -e '/^#ifdef HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT/,/^#endif/d' $< \ -@LIBGOMP_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@ > $@ || (rm -f $@ ; exit 1) -@LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp.map-sun : $(top_srcdir)/libgomp.map \ + +@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp.ver: $(top_srcdir)/libgomp.map +@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@ $(EGREP) -v '#(#| |$$)' $< | \ +@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@ $(PREPROCESS) -P -include config.h - > $@ || (rm -f $@ ; exit 1) +@LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@libgomp.ver-sun : libgomp.ver \ @LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@ $(top_srcdir)/../contrib/make_sunver.pl \ @LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@ $(libgomp_la_OBJECTS) $(libgomp_la_LIBADD) @LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@ perl $(top_srcdir)/../contrib/make_sunver.pl \ -@LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@ $(top_srcdir)/libgomp.map \ +@LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@ libgomp.ver \ @LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@ $(libgomp_la_OBJECTS:%.lo=.libs/%.o) \ @LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@ `echo $(libgomp_la_LIBADD) | \ @LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBGOMP_BUILD_VERSIONED_SHLIB_TRUE@ sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \ diff --git a/libgomp/acinclude.m4 b/libgomp/acinclude.m4 index 4a4b62f01c3..d43aa885474 100644 --- a/libgomp/acinclude.m4 +++ b/libgomp/acinclude.m4 @@ -355,15 +355,12 @@ if test $enable_symvers != no ; then # The Solaris 2 runtime linker doesn't support the GNU extension of # binding the same symbol to different versions solaris2*) - symvers_renaming=no ;; + ;; # Other platforms with GNU symbol versioning (GNU/Linux, more?) do. *) AC_DEFINE(HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT, 1, [Define to 1 if the target runtime linker supports binding the same symbol to different versions.]) - symvers_renaming=yes ;; + ;; esac -else - symvers_renaming=no fi -AM_CONDITIONAL(LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2, test $symvers_renaming = no) ]) diff --git a/libgomp/config/linux/sparc/futex.h b/libgomp/config/linux/sparc/futex.h index 6c600446eb9..96e37b820c5 100644 --- a/libgomp/config/linux/sparc/futex.h +++ b/libgomp/config/linux/sparc/futex.h @@ -90,9 +90,5 @@ futex_wake (int *addr, int count) static inline void cpu_relax (void) { -#if defined __arch64__ || defined __sparc_v9__ - __asm volatile ("membar #LoadLoad" : : : "memory"); -#else - __asm volatile ("" : : : "memory"); -#endif + __asm volatile ("rd %%ccr, %%g0" : : : "memory"); } diff --git a/libgomp/configure b/libgomp/configure index 6f25c6f5eb9..8ed841a06e0 100755 --- a/libgomp/configure +++ b/libgomp/configure @@ -619,8 +619,6 @@ link_gomp XLDFLAGS XCFLAGS config_path -LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_FALSE -LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_TRUE LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_FALSE LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE LIBGOMP_BUILD_VERSIONED_SHLIB_GNU_FALSE @@ -11082,7 +11080,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11085 "configure" +#line 11083 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11188,7 +11186,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11191 "configure" +#line 11189 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -15994,27 +15992,17 @@ if test $enable_symvers != no ; then # The Solaris 2 runtime linker doesn't support the GNU extension of # binding the same symbol to different versions solaris2*) - symvers_renaming=no ;; + ;; # Other platforms with GNU symbol versioning (GNU/Linux, more?) do. *) $as_echo "#define HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT 1" >>confdefs.h - symvers_renaming=yes ;; + ;; esac -else - symvers_renaming=no -fi - if test $symvers_renaming = no; then - LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_TRUE= - LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_FALSE='#' -else - LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_TRUE='#' - LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_FALSE= fi - if test $enable_symvers = gnu; then $as_echo "#define LIBGOMP_GNU_SYMBOL_VERSIONING 1" >>confdefs.h @@ -16404,10 +16392,6 @@ if test -z "${LIBGOMP_BUILD_VERSIONED_SHLIB_SUN_TRUE}" && test -z "${LIBGOMP_BUI as_fn_error "conditional \"LIBGOMP_BUILD_VERSIONED_SHLIB_SUN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_TRUE}" && test -z "${LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2_FALSE}"; then - as_fn_error "conditional \"LIBGOMP_BUILD_VERSIONED_SHLIB_SOL2\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${USE_FORTRAN_TRUE}" && test -z "${USE_FORTRAN_FALSE}"; then as_fn_error "conditional \"USE_FORTRAN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 5f492cc3978..97bdfed4cc6 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,8 @@ +2012-03-07 Jason Merrill <jason@redhat.com> + + * cp-demangle.c (cplus_demangle_operators): Add li. + (d_unqualified_name): Handle it specially. + 2012-01-26 Jakub Jelinek <jakub@redhat.com> * make-relative-prefix.c (make_relative_prefix_1): Avoid warning diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c index 18b84a126e8..2b3d1820c60 100644 --- a/libiberty/cp-demangle.c +++ b/libiberty/cp-demangle.c @@ -1419,7 +1419,12 @@ d_unqualified_name (struct d_info *di) ret = d_operator_name (di); if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR) - di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2; + { + di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2; + if (!strcmp (ret->u.s_operator.op->code, "li")) + ret = d_make_comp (di, DEMANGLE_COMPONENT_UNARY, ret, + d_source_name (di)); + } return ret; } else if (peek == 'C' || peek == 'D') @@ -1596,6 +1601,7 @@ const struct demangle_operator_info cplus_demangle_operators[] = { "ix", NL ("[]"), 2 }, { "lS", NL ("<<="), 2 }, { "le", NL ("<="), 2 }, + { "li", NL ("operator\"\" "), 1 }, { "ls", NL ("<<"), 2 }, { "lt", NL ("<"), 2 }, { "mI", NL ("-="), 2 }, diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected index 408c4f47794..036c4813513 100644 --- a/libiberty/testsuite/demangle-expected +++ b/libiberty/testsuite/demangle-expected @@ -4072,6 +4072,9 @@ decltype (g({parm#1}, {})) f1<int>(int) --format=gnu-v3 _Z2f1IiEDTnw_T_ilEES0_ decltype (new int{}) f1<int>(int) +--format=gnu-v3 +_Zli2_wPKc +operator"" _w(char const*) # # Ada (GNAT) tests. # diff --git a/libitm/ChangeLog b/libitm/ChangeLog index e103ca0288b..9a3e484fc8a 100644 --- a/libitm/ChangeLog +++ b/libitm/ChangeLog @@ -1,3 +1,52 @@ +2012-03-05 Torvald Riegel <triegel@redhat.com> + + * dispatch.h (CREATE_DISPATCH_METHODS_MEM): Don't execute + memtransfer/memset if size isn't larger than zero. + +2012-03-02 Torvald Riegel <triegel@redhat.com> + + * libitm.texi: Link to specification and add a usage example. + +2012-02-24 Torvald Riegel <triegel@redhat.com> + + * retry.cc (GTM::gtm_thread::number_of_threads_changed): Change + default dispatch for more than 1 thread to ml_wt. + +2012-02-20 Torvald Riegel <triegel@redhat.com> + + * method-gl.cc (gl_wt_dispatch::orec): Put on separate cacheline. + +2012-02-20 Torvald Riegel <triegel@redhat.com> + + * method-gl.cc (gl_wt_dispatch::rollback): Optimize memory orders. + +2012-02-20 Torvald Riegel <triegel@redhat.com> + + * method-gl.cc (gl_wt_dispatch::trycommit): Remove handling of + serial mode corner cases made obsolete by prior gtm_rwlock changes. + (gl_wt_dispatch.rollback): Same. + +2012-02-20 Torvald Riegel <triegel@redhat.com> + + * method-gl.cc (gl_wt_dispatch::pre_write): Optimize memory orders. + +2012-02-20 Torvald Riegel <triegel@redhat.com> + + * method-gl.cc (gl_wt_dispatch::memtransfer_static): Add missing undo + for RfW src. Optimize number of calls to gtm_thr. + +2012-02-20 Torvald Riegel <triegel@redhat.com> + + * beginend.cc (GTM::gtm_thread::begin_transaction): Move serial lock + acquisition to ... + * retry.cc (GTM::gtm_thread::decide_begin_dispatch): ... here. + (default_dispatch): Make atomic. + (GTM::gtm_thread::set_default_dispatch): Access atomically. + (GTM::gtm_thread::decide_retry_strategy): Access atomically and + use decide_begin_dispatch() if default_dispatch might have changed. + (GTM::gtm_thread::number_of_threads_changed): Initialize + default_dispatch here. + 2012-02-15 Iain Sandoe <iains@gcc.gnu.org> Patrick Marlier <patrick.marlier@gmail.com> diff --git a/libitm/beginend.cc b/libitm/beginend.cc index 08c2174ea67..e6a84de13e2 100644 --- a/libitm/beginend.cc +++ b/libitm/beginend.cc @@ -233,16 +233,6 @@ GTM::gtm_thread::begin_transaction (uint32_t prop, const gtm_jmpbuf *jb) { // Outermost transaction disp = tx->decide_begin_dispatch (prop); - if (disp == dispatch_serialirr() || disp == dispatch_serial()) - { - tx->state = STATE_SERIAL; - if (disp == dispatch_serialirr()) - tx->state |= STATE_IRREVOCABLE; - serial_lock.write_lock (); - } - else - serial_lock.read_lock (tx); - set_abi_disp (disp); } diff --git a/libitm/dispatch.h b/libitm/dispatch.h index d059c493507..6a9e62ef6c0 100644 --- a/libitm/dispatch.h +++ b/libitm/dispatch.h @@ -102,11 +102,13 @@ virtual void memtransfer(void *dst, const void* src, size_t size, \ bool may_overlap, ls_modifier dst_mod, ls_modifier src_mod) \ { \ - memtransfer_static(dst, src, size, may_overlap, dst_mod, src_mod); \ + if (size > 0) \ + memtransfer_static(dst, src, size, may_overlap, dst_mod, src_mod); \ } \ virtual void memset(void *dst, int c, size_t size, ls_modifier mod) \ { \ - memset_static(dst, c, size, mod); \ + if (size > 0) \ + memset_static(dst, c, size, mod); \ } #define CREATE_DISPATCH_METHODS_MEM_PV() \ diff --git a/libitm/libitm.texi b/libitm/libitm.texi index b31657f7f97..6cfcaf9277d 100644 --- a/libitm/libitm.texi +++ b/libitm/libitm.texi @@ -82,8 +82,8 @@ several threads. To activate support for TM in C/C++, the compile-time flag @option{-fgnu-tm} must be specified. This enables TM language-level constructs such as -transaction statements (@code{__transaction}, @pxref{C/C++ Language -Constructs for TM} for details). +transaction statements (e.g., @code{__transaction_atomic}, @pxref{C/C++ +Language Constructs for TM} for details). @c --------------------------------------------------------------------- @c C/C++ Language Constructs for TM @@ -92,7 +92,35 @@ Constructs for TM} for details). @node C/C++ Language Constructs for TM @chapter C/C++ Language Constructs for TM -TODO: link to the C++ TM spec. a few examples. how gcc's support differs. +Transactions are supported in C++ and C in the form of transaction statements, +transaction expressions, and function transactions. In the following example, +both @code{a} and @code{b} will be read and the difference will be written to +@code{c}, all atomically and isolated from other transactions: + +@example +__transaction_atomic @{ c = a - b; @} +@end example + +Therefore, another thread can use the following code to concurrently update +@code{b} without ever causing @code{c} to hold a negative value (and without +having to use other synchronization constructs such as locks or C++11 +atomics): + +@example +__transaction_atomic @{ if (a > b) b++; @} +@end example + +GCC follows the @uref{https://sites.google.com/site/tmforcplusplus/, Draft +Specification of Transactional Language Constructs for C++ (v1.1)} in its +implementation of transactions. + +The precise semantics of transactions are defined in terms of the C++11/C11 +memory model (see the specification). Roughly, transactions provide +synchronization guarantees that are similar to what would be guaranteed when +using a single global lock as a guard for all transactions. Note that like +other synchronization constructs in C/C++, transactions rely on a +data-race-free program (e.g., a nontransactional write that is concurrent +with a transactional read to the same memory location is a data race). @c --------------------------------------------------------------------- @c The libitm ABI diff --git a/libitm/method-gl.cc b/libitm/method-gl.cc index d6d050de3a8..4b6769ba2c0 100644 --- a/libitm/method-gl.cc +++ b/libitm/method-gl.cc @@ -41,7 +41,8 @@ struct gl_mg : public method_group static gtm_word clear_locked(gtm_word l) { return l & ~LOCK_BIT; } // The global ownership record. - atomic<gtm_word> orec; + // No tail-padding necessary (the virtual functions aren't used frequently). + atomic<gtm_word> orec __attribute__((aligned(HW_CACHELINE_SIZE))); virtual void init() { @@ -52,7 +53,6 @@ struct gl_mg : public method_group virtual void fini() { } }; -// TODO cacheline padding static gl_mg o_gl_mg; @@ -76,18 +76,16 @@ static gl_mg o_gl_mg; // validate that no other update transaction comitted before we acquired the // orec, so we have the most recent timestamp and no other transaction can // commit until we have committed). -// However, we therefore cannot use this method for a serial transaction -// (because shared_state needs to remain at ~0) and we have to be careful -// when switching to serial mode (see the special handling in trycommit() and -// rollback()). -// ??? This sharing adds some complexity wrt. serial mode. Just use a separate -// state variable? +// However, we therefore depend on shared_state not being modified by the +// serial lock during upgrades to serial mode, which is ensured by +// gtm_thread::serialirr_mode by not calling gtm_rwlock::write_upgrade_finish +// before we have committed or rolled back. class gl_wt_dispatch : public abi_dispatch { protected: - static void pre_write(const void *addr, size_t len) + static void pre_write(const void *addr, size_t len, + gtm_thread *tx = gtm_thr()) { - gtm_thread *tx = gtm_thr(); gtm_word v = tx->shared_state.load(memory_order_relaxed); if (unlikely(!gl_mg::is_locked(v))) { @@ -104,16 +102,27 @@ protected: tx->restart(RESTART_VALIDATE_WRITE); // CAS global orec from our snapshot time to the locked state. - // We need acq_rel memory order here to synchronize with other loads - // and modifications of orec. + // We need acquire memory order here to synchronize with other + // (ownership) releases of the orec. We do not need acq_rel order + // because whenever another thread reads from this CAS' + // modification, then it will abort anyway and does not rely on + // any further happens-before relation to be established. + // Also note that unlike in ml_wt's increase of the global time + // base (remember that the global orec is used as time base), we do + // not need require memory order here because we do not need to make + // prior orec acquisitions visible to other threads that try to + // extend their snapshot time. if (!o_gl_mg.orec.compare_exchange_strong (now, gl_mg::set_locked(now), - memory_order_acq_rel)) + memory_order_acquire)) tx->restart(RESTART_LOCKED_WRITE); // We use an explicit fence here to avoid having to use release // memory order for all subsequent data stores. This fence will // synchronize with loads of the data with acquire memory order. See // validate() for why this is necessary. + // Adding require memory order to the prior CAS is not sufficient, + // at least according to the Batty et al. formalization of the + // memory model. atomic_thread_fence(memory_order_release); // Set shared_state to new value. @@ -123,7 +132,7 @@ protected: tx->undolog.log(addr, len); } - static void validate() + static void validate(gtm_thread *tx = gtm_thr()) { // Check that snapshot is consistent. We expect the previous data load to // have acquire memory order, or be atomic and followed by an acquire @@ -137,7 +146,6 @@ protected: // or read an orec value that was written after the data had been written. // Either will allow us to detect inconsistent reads because it will have // a higher/different value. - gtm_thread *tx = gtm_thr(); gtm_word l = o_gl_mg.orec.load(memory_order_relaxed); if (l != tx->shared_state.load(memory_order_relaxed)) tx->restart(RESTART_VALIDATE_READ); @@ -198,9 +206,13 @@ public: static void memtransfer_static(void *dst, const void* src, size_t size, bool may_overlap, ls_modifier dst_mod, ls_modifier src_mod) { - if ((dst_mod != WaW && src_mod != RaW) - && (dst_mod != NONTXNAL || src_mod == RfW)) - pre_write(dst, size); + gtm_thread *tx = gtm_thr(); + if (dst_mod != WaW && dst_mod != NONTXNAL) + pre_write(dst, size, tx); + // We need at least undo-logging for an RfW src region because we might + // subsequently write there with WaW. + if (src_mod == RfW) + pre_write(src, size, tx); // FIXME We should use atomics here (see store()). Let's just hope that // memcpy/memmove are good enough. @@ -211,7 +223,7 @@ public: if (src_mod != RfW && src_mod != RaW && src_mod != NONTXNAL && dst_mod != WaW) - validate(); + validate(tx); } static void memset_static(void *dst, int c, size_t size, ls_modifier mod) @@ -269,15 +281,6 @@ public: gtm_thread* tx = gtm_thr(); gtm_word v = tx->shared_state.load(memory_order_relaxed); - // Special case: If shared_state is ~0, then we have acquired the - // serial lock (tx->state is not updated yet). In this case, the previous - // value isn't available anymore, so grab it from the global lock, which - // must have a meaningful value because no other transactions are active - // anymore. In particular, if it is locked, then we are an update - // transaction, which is all we care about for commit. - if (v == ~(typeof v)0) - v = o_gl_mg.orec.load(memory_order_relaxed); - // Release the orec but do not reset shared_state, which will be modified // by the serial lock right after our commit anyway. Also, resetting // shared state here would interfere with the serial lock's use of this @@ -305,40 +308,32 @@ public: gtm_thread *tx = gtm_thr(); gtm_word v = tx->shared_state.load(memory_order_relaxed); - // Special case: If shared_state is ~0, then we have acquired the - // serial lock (tx->state is not updated yet). In this case, the previous - // value isn't available anymore, so grab it from the global lock, which - // must have a meaningful value because no other transactions are active - // anymore. In particular, if it is locked, then we are an update - // transaction, which is all we care about for rollback. - bool is_serial = v == ~(typeof v)0; - if (is_serial) - v = o_gl_mg.orec.load(memory_order_relaxed); // Release lock and increment version number to prevent dirty reads. // Also reset shared state here, so that begin_or_restart() can expect a // value that is correct wrt. privatization safety. if (gl_mg::is_locked(v)) { - // Release the global orec, increasing its version number / timestamp. - // See begin_or_restart() for why we need release memory order here. + // With our rollback, global time increases. v = gl_mg::clear_locked(v) + 1; - o_gl_mg.orec.store(v, memory_order_release); - // Also reset the timestamp published via shared_state. - // Special case: Only do this if we are not a serial transaction - // because otherwise, we would interfere with the serial lock. - if (!is_serial) - tx->shared_state.store(v, memory_order_release); - - // We need a store-load barrier after this store to prevent it - // from becoming visible after later data loads because the - // previous value of shared_state has been higher than the actual - // snapshot time (the lock bit had been set), which could break - // privatization safety. We do not need a barrier before this - // store (see pre_write() for an explanation). - // ??? What is the precise reasoning in the C++11 model? - atomic_thread_fence(memory_order_seq_cst); + // First reset the timestamp published via shared_state. Release + // memory order will make this happen after undoing prior data writes. + // This must also happen before we actually release the global orec + // next, so that future update transactions in other threads observe + // a meaningful snapshot time for our transaction; otherwise, they + // could read a shared_store value with the LOCK_BIT set, which can + // break privatization safety because it's larger than the actual + // snapshot time. Note that we only need to consider other update + // transactions because only those will potentially privatize data. + tx->shared_state.store(v, memory_order_release); + + // Release the global orec, increasing its version number / timestamp. + // See begin_or_restart() for why we need release memory order here, + // and we also need it to make future update transactions read the + // prior update to shared_state too (update transactions acquire the + // global orec with acquire memory order). + o_gl_mg.orec.store(v, memory_order_release); } } diff --git a/libitm/retry.cc b/libitm/retry.cc index d59c1834ef0..660bf5244e3 100644 --- a/libitm/retry.cc +++ b/libitm/retry.cc @@ -27,8 +27,16 @@ #include <ctype.h> #include "libitm_i.h" -// The default TM method used when starting a new transaction. -static GTM::abi_dispatch* default_dispatch = 0; +// The default TM method used when starting a new transaction. Initialized +// in number_of_threads_changed() below. +// Access to this variable is always synchronized with help of the serial +// lock, except one read access that happens in decide_begin_dispatch() before +// a transaction has become active (by acquiring the serial lock in read or +// write mode). The default_dispatch is only changed and initialized in +// serial mode. Transactions stay active when they restart (see beginend.cc), +// thus decide_retry_strategy() can expect default_dispatch to be unmodified. +// See decide_begin_dispatch() for further comments. +static std::atomic<GTM::abi_dispatch*> default_dispatch; // The default TM method as requested by the user, if any. static GTM::abi_dispatch* default_dispatch_user = 0; @@ -57,20 +65,24 @@ GTM::gtm_thread::decide_retry_strategy (gtm_restart_reason r) // given that re-inits should be very infrequent. serial_lock.read_unlock(this); serial_lock.write_lock(); - if (disp->get_method_group() == default_dispatch->get_method_group()) + if (disp->get_method_group() + == default_dispatch.load(memory_order_relaxed) + ->get_method_group()) // Still the same method group. disp->get_method_group()->reinit(); serial_lock.write_unlock(); - serial_lock.read_lock(this); - if (disp->get_method_group() != default_dispatch->get_method_group()) - { - disp = default_dispatch; - set_abi_disp(disp); - } + // Also, we're making the transaction inactive, so when we become + // active again, some other thread might have changed the default + // dispatch, so we run the same code as for the first execution + // attempt. + disp = decide_begin_dispatch(prop); + set_abi_disp(disp); } else // We are a serial transaction already, which makes things simple. disp->get_method_group()->reinit(); + + return; } bool retry_irr = (r == RESTART_SERIAL_IRR); @@ -124,48 +136,89 @@ GTM::gtm_thread::decide_retry_strategy (gtm_restart_reason r) // Decides which TM method should be used on the first attempt to run this -// transaction. +// transaction. Acquires the serial lock and sets transaction state +// according to the chosen TM method. GTM::abi_dispatch* GTM::gtm_thread::decide_begin_dispatch (uint32_t prop) { + abi_dispatch* dd; // TODO Pay more attention to prop flags (eg, *omitted) when selecting // dispatch. + // ??? We go irrevocable eagerly here, which is not always good for + // performance. Don't do this? if ((prop & pr_doesGoIrrevocable) || !(prop & pr_instrumentedCode)) - return dispatch_serialirr(); - - // If we might need closed nesting and the default dispatch has an - // alternative that supports closed nesting, use it. - // ??? We could choose another TM method that we know supports closed - // nesting but isn't the default (e.g., dispatch_serial()). However, we - // assume that aborts that need closed nesting are infrequent, so don't - // choose a non-default method until we have to actually restart the - // transaction. - if (!(prop & pr_hasNoAbort) && !default_dispatch->closed_nesting() - && default_dispatch->closed_nesting_alternative()) - return default_dispatch->closed_nesting_alternative(); - - // No special case, just use the default dispatch. - return default_dispatch; + dd = dispatch_serialirr(); + + else + { + // Load the default dispatch. We're not an active transaction and so it + // can change concurrently but will still be some valid dispatch. + // Relaxed memory order is okay because we expect each dispatch to be + // constructed properly already (at least that its closed_nesting() and + // closed_nesting_alternatives() will return sensible values). It is + // harmless if we incorrectly chose the serial or serialirr methods, and + // for all other methods we will acquire the serial lock in read mode + // and load the default dispatch again. + abi_dispatch* dd_orig = default_dispatch.load(memory_order_relaxed); + dd = dd_orig; + + // If we might need closed nesting and the default dispatch has an + // alternative that supports closed nesting, use it. + // ??? We could choose another TM method that we know supports closed + // nesting but isn't the default (e.g., dispatch_serial()). However, we + // assume that aborts that need closed nesting are infrequent, so don't + // choose a non-default method until we have to actually restart the + // transaction. + if (!(prop & pr_hasNoAbort) && !dd->closed_nesting() + && dd->closed_nesting_alternative()) + dd = dd->closed_nesting_alternative(); + + if (dd != dispatch_serial() && dd != dispatch_serialirr()) + { + // The current dispatch is supposedly a non-serial one. Become an + // active transaction and verify this. Relaxed memory order is fine + // because the serial lock itself will have established + // happens-before for any change to the selected dispatch. + serial_lock.read_lock (this); + if (default_dispatch.load(memory_order_relaxed) == dd_orig) + return dd; + + // If we raced with a concurrent modification of default_dispatch, + // just fall back to serialirr. The dispatch choice might not be + // up-to-date anymore, but this is harmless. + serial_lock.read_unlock (this); + dd = dispatch_serialirr(); + } + } + + // We are some kind of serial transaction. + serial_lock.write_lock(); + if (dd == dispatch_serialirr()) + state = STATE_SERIAL | STATE_IRREVOCABLE; + else + state = STATE_SERIAL; + return dd; } void GTM::gtm_thread::set_default_dispatch(GTM::abi_dispatch* disp) { - if (default_dispatch == disp) + abi_dispatch* dd = default_dispatch.load(memory_order_relaxed); + if (dd == disp) return; - if (default_dispatch) + if (dd) { // If we are switching method groups, initialize and shut down properly. - if (default_dispatch->get_method_group() != disp->get_method_group()) + if (dd->get_method_group() != disp->get_method_group()) { - default_dispatch->get_method_group()->fini(); + dd->get_method_group()->fini(); disp->get_method_group()->init(); } } else disp->get_method_group()->init(); - default_dispatch = disp; + default_dispatch.store(disp, memory_order_relaxed); } @@ -233,6 +286,7 @@ GTM::gtm_thread::number_of_threads_changed(unsigned previous, unsigned now) { initialized = true; // Check for user preferences here. + default_dispatch = 0; default_dispatch_user = parse_default_method(); } } @@ -260,7 +314,7 @@ GTM::gtm_thread::number_of_threads_changed(unsigned previous, unsigned now) set_default_dispatch(default_dispatch_user); else { - abi_dispatch* a = dispatch_serialirr_onwrite(); + abi_dispatch* a = dispatch_ml_wt(); if (a->supports(now)) set_default_dispatch(a); else diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 326927ed6a8..aa456129c72 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +2012-02-23 Patrick Marlier <patrick.marlier@gmail.com> + Jack Howarth <howarth@bromo.med.uc.edu> + + PR target/49461 + * configure.ac (SYSTEMSPEC): No longer pass -no_pie for darwin11. + * configure: Regenerate. + 2012-02-02 Kai Tietz <ktietz@redhat.com> PR libjava/48512 diff --git a/libjava/configure b/libjava/configure index b8f23d3f593..8ea1aec5ee0 100755 --- a/libjava/configure +++ b/libjava/configure @@ -19788,14 +19788,9 @@ case "${host}" in SYSTEMSPEC="-lunicows $SYSTEMSPEC" fi ;; - *-*-darwin9*) + *-*-darwin[912]*) SYSTEMSPEC="%{!Zdynamiclib:%{!Zbundle:-allow_stack_execute}}" ;; - *-*-darwin[12]*) - # Something is incompatible with pie, would be nice to fix it and - # remove -no_pie. PR49461 - SYSTEMSPEC="-no_pie %{!Zdynamiclib:%{!Zbundle:-allow_stack_execute}}" - ;; *) SYSTEMSPEC= ;; diff --git a/libjava/configure.ac b/libjava/configure.ac index 2b339c376df..ce428cac257 100644 --- a/libjava/configure.ac +++ b/libjava/configure.ac @@ -898,14 +898,9 @@ case "${host}" in SYSTEMSPEC="-lunicows $SYSTEMSPEC" fi ;; - *-*-darwin9*) + *-*-darwin[[912]]*) SYSTEMSPEC="%{!Zdynamiclib:%{!Zbundle:-allow_stack_execute}}" ;; - *-*-darwin[[12]]*) - # Something is incompatible with pie, would be nice to fix it and - # remove -no_pie. PR49461 - SYSTEMSPEC="-no_pie %{!Zdynamiclib:%{!Zbundle:-allow_stack_execute}}" - ;; *) SYSTEMSPEC= ;; diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index a9d47ed0735..d43172a75ba 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,433 @@ +2012-03-09 Paolo Carlini <paolo.carlini@oracle.com> + + * include/debug/formatter.h (enum _Debug_msg_id): Add + __msg_self_move_assign. + * include/debug/macros.h (__glibcxx_check_self_move_assign): Add. + * src/c++11/debug.cc (_S_debug_messages): Update. + * include/debug/safe_iterator.h (_Safe_iterator<>::operator= + (_Safe_iterator&&)): Add check for self move assignment. + * include/debug/set.h: Likewise. + * include/debug/unordered_map: Likewise. + * include/debug/multiset.h: Likewise. + * include/debug/forward_list: Likewise. + * include/debug/unordered_set: Likewise. + * include/debug/vector: Likewise. + * include/debug/map.h: Likewise. + * include/debug/deque: Likewise. + * include/debug/string: Likewise. + * include/debug/list: Likewise. + * include/debug/multimap.h: Likewise. + * testsuite/21_strings/debug/self_move_assign_neg.cc: New. + * testsuite/21_strings/debug/iterator_self_move_assign_neg.cc: Likewise. + * testsuite/23_containers/unordered_map/debug/self_move_assign_neg.cc: + Likewise. + * testsuite/23_containers/unordered_map/debug/ + iterator_self_move_assign_neg.cc: Likewise. + * testsuite/23_containers/multimap/debug/self_move_assign_neg.cc: + Likewise. + * testsuite/23_containers/multimap/debug/ + iterator_self_move_assign_neg.cc: Likewise. + * testsuite/23_containers/set/debug/self_move_assign_neg.cc: Likewise. + * testsuite/23_containers/set/debug/iterator_self_move_assign_neg.cc: + Likewise. + * testsuite/23_containers/unordered_multimap/debug/ + self_move_assign_neg.cc: Likewise. + * testsuite/23_containers/unordered_multimap/debug/ + iterator_self_move_assign_neg.cc: Likewise. + * testsuite/23_containers/forward_list/debug/self_move_assign_neg.cc: + Likewise. + * testsuite/23_containers/forward_list/debug/ + iterator_self_move_assign_neg.cc: Likewise. + * testsuite/23_containers/unordered_set/debug/self_move_assign_neg.cc: + Likewise. + * testsuite/23_containers/unordered_set/debug/ + iterator_self_move_assign_neg.cc: Likewise. + * testsuite/23_containers/vector/debug/self_move_assign_neg.cc: + Likewise. + * testsuite/23_containers/vector/debug/ + iterator_self_move_assign_neg.cc: Likewise. + * testsuite/23_containers/deque/debug/self_move_assign_neg.cc: Likewise. + * testsuite/23_containers/deque/debug/iterator_self_move_assign_neg.cc: + Likewise. + * testsuite/23_containers/multiset/debug/self_move_assign_neg.cc: + Likewise. + * testsuite/23_containers/multiset/debug/ + iterator_self_move_assign_neg.cc: Likewise. + * testsuite/23_containers/list/debug/self_move_assign_neg.cc: + Likewise. + * testsuite/23_containers/list/debug/iterator_self_move_assign_neg.cc: + Likewise. + * testsuite/23_containers/unordered_multiset/debug/ + self_move_assign_neg.cc: Likewise. + * testsuite/23_containers/unordered_multiset/debug/ + iterator_self_move_assign_neg.cc: Likewise. + * testsuite/23_containers/map/debug/self_move_assign_neg.cc: + Likewise. + * testsuite/23_containers/map/debug/iterator_self_move_assign_neg.cc: + Likewise. + +2012-03-08 Benjamin Kosnik <bkoz@redhat.com> + + * doc/doxygen/user.cfg.in: Update to Doxygen 1.8.0. + * include/bits/locale_facets.h: Adjust markup to avoid warnings. + * include/ext/pb_ds/assoc_container.hpp: Same. + * include/ext/pb_ds/priority_queue.hpp: Same. + * include/std/fstream: Same. + * include/std/ratio: Same. + * testsuite/20_util/ratio/cons/cons_overflow_neg.cc: Adjust line + numbers. + * testsuite/20_util/ratio/operations/ops_overflow_neg.cc: Same. + +2012-03-08 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/52433 + * include/debug/safe_iterator.h (_Safe_iterator): Add debug checks + to move constructor and move assignment operator. + +2012-03-05 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/stl_algobase.h (iter_swap): In C++11 mode simply + call swap. + * include/bits/stl_bvector.h (swap(_Bit_reference, + _Bit_reference), swap(_Bit_reference, bool&), + swap(bool&, _Bit_reference)): Add. + * testsuite/23_containers/vector/bool/swap.cc: New. + +2012-03-04 Paolo Carlini <paolo.carlini@oracle.com> + Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/43813 + * include/bits/stl_iterator_base_types.h (_RequireInputIter): New. + * include/ext/vstring.h (__versa_string<>::__versa_string + (_InputIterator, _InputIterator, const _Alloc&), + __versa_string<>::append(_InputIterator, _InputIterator), + __versa_string<>::assign(_InputIterator, _InputIterator), + __versa_string<>::insert(iterator, _InputIterator, + _InputIterator), __versa_string<>::replace(iterator, iterator, + _InputIterator, _InputIterator)): Use it. + * include/bits/stl_list.h (list<>::list(_InputIterator, + _InputIterator, const allocator_type&), list<>::assign(_InputIterator, + _InputIterator), list<>::insert(iterator, _InputIterator, + _InputIterator)): Likewise. + * include/bits/stl_vector.h (vector<>::vector(_InputIterator, + _InputIterator, const allocator_type&), vector<>::assign(_InputIterator, + _InputIterator), vectort<>::insert(iterator, _InputIterator, + _InputIterator)): Likewise. + * include/bits/stl_deque.h (deque<>::deque(_InputIterator, + _InputIterator, const allocator_type&), deque<>::deque(_InputIterator, + _InputIterator), deque<>::insert(iterator, _InputIterator, + _InputIterator)): Likewise. + * include/bits/stl_bvector.h (vector<>::vector(_InputIterator, + _InputIterator, const allocator_type&), vector<>::deque(_InputIterator, + _InputIterator), vector<>::insert(iterator, _InputIterator, + _InputIterator)): Likewise. + * include/bits/forward_list.h (forward_list<>::forward_list + (_InputIterator, _InputIterator, const allocator_type&), + forward_list<>::assign(_InputIterator, _InputIterator), + forward_list<>::insert_after(const_iterator, _InputIterator, + _InputIterator)): Likewise. + (forward_list<>::_M_initialize_dispatch(,, __true_type): Remove. + (forward_list<>::_M_range_initialize): Add, adjust everywhere. + * include/bits/forward_list.tcc: Adjust. + * include/debug/forward_list: Adjust. + * include/debug/vector: Likewise. + * include/debug/deque: Likewise. + * include/debug/list: Likewise. + * testsuite/ext/vstring/requirements/do_the_right_thing.cc: New. + * testsuite/23_containers/forward_list/requirements/ + do_the_right_thing.cc: Likewise. + * testsuite/23_containers/vector/requirements/ + do_the_right_thing.cc: Likewise. + * testsuite/23_containers/deque/requirements/ + do_the_right_thing.cc: Likewise. + * testsuite/23_containers/list/requirements/ + do_the_right_thing.cc: Likewise. + * testsuite/23_containers/forward_list/requirements/dr438/ + assign_neg.cc: Adjust dg-error line number. + * testsuite/23_containers/forward_list/requirements/dr438/ + insert_neg.cc: Likewise. + * testsuite/23_containers/forward_list/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/forward_list/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + assign_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + insert_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/deque/requirements/dr438/ + assign_neg.cc: Likewise. + * testsuite/23_containers/deque/requirements/dr438/ + insert_neg.cc: Likewise. + * testsuite/23_containers/deque/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/deque/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/list/requirements/dr438/ + assign_neg.cc: Likewise. + * testsuite/23_containers/list/requirements/dr438/ + insert_neg.cc: Likewise. + * testsuite/23_containers/list/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/list/requirements/dr438/ + constructor_2_neg.cc: Likewise. + +2012-03-04 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/52433 + * include/debug/safe_iterator.h (_Safe_iterator): Add move + constructor and move assignment operator. + * testsuite/23_containers/vector/debug/52433.cc: New. + +2012-03-02 Paolo Carlini <paolo.carlini@oracle.com> + + * include/std/limits (numeric_limits): Fix returns per C++11. + * testsuite/18_support/numeric_limits/primary.cc: New. + +2012-03-02 Benjamin Kosnik <bkoz@redhat.com> + + * include/c_global/cstdio: Remove extraneous extern. + * include/c_std/cstdio: Same. + +2012-03-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * config/abi/post/solaris2.8/baseline_symbols.txt: Regenerate. + * config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt: Likewise. + * config/abi/post/solaris2.10/baseline_symbols.txt: Likewise. + * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Likewise. + * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: Likewise. + +2012-03-01 Benjamin Kosnik <bkoz@redhat.com> + Ramana Radhakrishnan <ramana@gcc.gnu.org> + + PR libstdc++/51785 + * acinclude.m4 (GLIBCXX_CHECK_STDIO_PROTO): New. + * configure.ac: Call it. + * configure: Regenerate. + * config.h.in: Same. + * config/os/gnu-linux/os_defines.h: Conditionally undefine + _GLIBCXX_HAVE_GETS. + * include/c_global/cstdio: Conditionally declare deprecated gets. + * include/c_std/cstdio: Same. + +2012-03-01 Michael Spertus <mike_spertus@symantec.com> + + * include/tr2/type_traits (typelist): To __reflection_typelist. + (first, rest, empty): Remove. + +2012-03-01 Benjamin Kosnik <bkoz@redhat.com> + + * testsuite/Makefile.am (CLEANFILES): Add *.gdb. + * testsuite/Makefile.in: Regenerate. + +2012-02-29 H.J. Lu <hongjiu.lu@intel.com> + + * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Update. + +2012-02-28 Benjamin Kosnik <bkoz@redhat.com> + + PR libstdc++/52191 + * testsuite/util/testsuite_abi.cc (compare_symbols): Check new + symbols added into the latest version. Mark tls entities as + undesignated. + +2012-02-28 Jakub Jelinek <jakub@redhat.com> + + PR bootstrap/52414 + * src/Makefile.am (libstdc++-symbols.ver): Only remove comment lines + if they are at the beginning of lines (with optional whitespace before + #). + * src/Makefile.in: Regenerated. + +2012-02-27 Jakub Jelinek <jakub@redhat.com> + + * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Update. + * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Likewise. + * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt: + Likewise. + * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Likewise. + * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Likewise. + * config/abi/post/s390-linux-gnu/baseline_symbols.txt: Likewise. + * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Likewise. + * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Likewise. + * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Likewise. + +2012-02-27 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR libstdc++/52188 + * acinclude.m4 (GLIBCXX_ENABLE_SYMVERS): Remove symvers_renaming. + Remove ENABLE_SYMVERS_SOL2. + * configure: Regenerate. + * src/Makefile.am [ENABLE_SYMVERS] (libstdc++-symbols.ver): + Postprocess mapfile. + [ENABLE_SYMVERS_GNU]: Remove ENABLE_SYMVERS_SOL2 handling. + * src/Makefile.in: Regenerate. + + * config/abi/pre/gnu.ver (GLIBCXX_3.4.5) [!__sun__ && !__svr4__]: + Don't export + _ZNSt19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEppEv. + +2012-02-25 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + PR testsuite/52201 + * testsuite/29_atomics/atomic/operators/pointer_partial_void.cc: + Require atomic builtins. + * testsuite/29_atomics/atomic/operators/51811.cc: Likewise. + +2012-02-23 Jason Merrill <jason@redhat.com> + + * include/bits/locale_facets.h (class num_get): Undo reordering of + do_get virtual functions. + +2012-02-14 Edward Smith-Rowland <3dw4rd@verizon.net> + + * testsuite/26_numerics/random/ + uniform_real_distribution/requirements/typedefs.cc: Check param_type. + * testsuite/26_numerics/random/ + piecewise_constant_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + chi_squared_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + normal_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + uniform_int_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + poisson_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + bernoulli_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + discrete_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + weibull_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + cauchy_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + negative_binomial_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + gamma_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + fisher_f_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + exponential_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + binomial_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + lognormal_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + extreme_value_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + piecewise_linear_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + student_t_distribution/requirements/typedefs.cc: Ditto. + * testsuite/26_numerics/random/ + geometric_distribution/requirements/typedefs.cc: Ditto. + +2012-02-21 Benjamin Kosnik <bkoz@redhat.com> + + PR libstdc++/50349 + * config/abi/pre/gnu.ver: Only one local. + * config/abi/pre/gnu-versioned-namespace.ver: Same. + +2012-02-21 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/52317 (cont) + * include/profile/unordered_map: Ad Library Exception comment. + * include/profile/set: Likewise. + * include/profile/base.h: Likewise. + * include/profile/impl/profiler_list_to_slist.h: Likewise. + * include/profile/impl/profiler_container_size.h: Likewise. + * include/profile/impl/profiler_vector_size.h: Likewise. + * include/profile/impl/profiler_hash_func.h: Likewise. + * include/profile/impl/profiler_trace.h: Likewise. + * include/profile/impl/profiler_list_to_vector.h: Likewise. + * include/profile/impl/profiler_vector_to_list.h: Likewise. + * include/profile/impl/profiler.h: Likewise. + * include/profile/impl/profiler_state.h: Likewise. + * include/profile/impl/profiler_map_to_unordered_map.h: Likewise. + * include/profile/impl/profiler_algos.h: Likewise. + * include/profile/impl/profiler_hashtable_size.h: Likewise. + * include/profile/impl/profiler_node.h: Likewise. + * include/profile/vector: Likewise. + * include/profile/unordered_set: Likewise. + * include/profile/map.h: Likewise. + * include/profile/map: Likewise. + +2012-02-21 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/52317 + * python/Makefile.am: Update boilerplate license text to GPLv3. + * include/profile/unordered_map: Likewise. + * include/profile/set: Likewise. + * include/profile/base.h: Likewise. + * include/profile/impl/profiler_list_to_slist.h: Likewise. + * include/profile/impl/profiler_container_size.h: Likewise. + * include/profile/impl/profiler_vector_size.h: Likewise. + * include/profile/impl/profiler_hash_func.h: Likewise. + * include/profile/impl/profiler_trace.h: Likewise. + * include/profile/impl/profiler_list_to_vector.h: Likewise. + * include/profile/impl/profiler_vector_to_list.h: Likewise. + * include/profile/impl/profiler.h: Likewise. + * include/profile/impl/profiler_state.h: Likewise. + * include/profile/impl/profiler_map_to_unordered_map.h: Likewise. + * include/profile/impl/profiler_algos.h: Likewise. + * include/profile/impl/profiler_hashtable_size.h: Likewise. + * include/profile/impl/profiler_node.h: Likewise. + * include/profile/vector: Likewise. + * include/profile/unordered_set: Likewise. + * include/profile/map.h: Likewise. + * include/profile/map: Likewise. + * testsuite/21_strings/basic_string/numeric_conversions/ + wchar_t/dr1261.cc: Likewise. + * testsuite/21_strings/basic_string/numeric_conversions/ + char/dr1261.cc: Likewise. + * testsuite/20_util/reference_wrapper/invoke-2.cc: Likewise. + +2012-02-20 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/52241 + * src/c++98/tree.cc (local_Rb_tree_increment, + local_Rb_tree_decrement): Add. + (_Rb_tree_increment(const _Rb_tree_node_base*), + _Rb_tree_decrement(const _Rb_tree_node_base*)): Use the latter. + (_Rb_tree_increment(_Rb_tree_node_base*), + _Rb_tree_decrement(_Rb_tree_node_base*)): New. + +2012-02-20 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/52309 + * include/bits/hashtable_policy.h (_Equality_base<, true,>:: + _M_equal(const _Hashtable&)): Compare values with operator==. + * testsuite/23_containers/unordered_set/operators/52309.cc: New. + +2012-02-17 Benjamin Kosnik <bkoz@redhat.com> + + PR libstdc++/51798 continued. + * acinclude.m4 (GLIBCXX_ENABLE_ATOMIC_BUILTINS): Grep for + __atomic_, not __sync. + * configure: Regenerated. + +2012-02-17 Benjamin Kosnik <bkoz@redhat.com> + + PR libstdc++/47058 + * acinclude.m4 (GLIBCXX_ENABLE_WERROR): New. + (GLIBCXX_EXPORT_FLAGS): Add -Wabi to WARN_FLAGS + * configure.ac: Use it. + * fragment.am: Set WERROR_FLAG conditionally on --disable-werror. + * configure: Regenerate. + * python/Makefile.in: Same. + * Makefile.in: Same. + * doc/Makefile.in: Same. + * include/Makefile.in: Same. + * po/Makefile.in: Same. + * python/Makefile.in: Same. + * src/Makefile.in: Same. + * src/c++11/Makefile.in: Same. + * src/c++98/Makefile.in: Same. + * testsuite/Makefile.in: Same. + 2012-02-17 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> PR libstdc++/52189 diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in index 74fade4ca47..6a66c60a651 100644 --- a/libstdc++-v3/Makefile.in +++ b/libstdc++-v3/Makefile.in @@ -288,6 +288,8 @@ PWD_COMMAND = $${PWDCMD-pwd} STAMP = echo timestamp > toolexecdir = $(glibcxx_toolexecdir) toolexeclibdir = $(glibcxx_toolexeclibdir) +@ENABLE_WERROR_FALSE@WERROR_FLAG = +@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR) # These bits are all figured out from configure. Look in acinclude.m4 # or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS. @@ -295,7 +297,7 @@ CONFIG_CXXFLAGS = \ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@ WARN_CXXFLAGS = \ - $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once -Wabi + $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once # -I/-D flags to pass when compiling. diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index e7ffacc19e3..56711c06475 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -729,7 +729,7 @@ AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [ # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc AC_SUBST(OPTIMIZE_CXXFLAGS) - WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual' + WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi' AC_SUBST(WARN_FLAGS) ]) @@ -1809,6 +1809,35 @@ AC_DEFUN([GLIBCXX_CHECK_STDLIB_PROTO], [ ]) dnl +dnl Check whether required C++ overloads are present in <stdio.h>. +dnl +AC_DEFUN([GLIBCXX_CHECK_STDIO_PROTO], [ + + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + + AC_MSG_CHECKING([for gets declaration]) + AC_CACHE_VAL(glibcxx_cv_gets, [ + AC_COMPILE_IFELSE([AC_LANG_SOURCE( + [#include <stdio.h> + namespace test + { + using ::gets; + } + ])], + [glibcxx_cv_gets=yes], + [glibcxx_cv_gets=no] + )]) + + if test $glibcxx_cv_gets = yes; then + AC_DEFINE(HAVE_GETS, 1, [Define if gets is available in <stdio.h>.]) + fi + AC_MSG_RESULT($glibcxx_cv_gets) + + AC_LANG_RESTORE +]) + +dnl dnl Check whether macros, etc are present for <system_error> dnl AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [ @@ -2824,7 +2853,7 @@ EOF AC_MSG_CHECKING([for atomic builtins for bool]) if AC_TRY_EVAL(ac_compile); then - if grep __sync_ conftest.s >/dev/null 2>&1 ; then + if grep __atomic_ conftest.s >/dev/null 2>&1 ; then glibcxx_cv_atomic_bool=no else glibcxx_cv_atomic_bool=yes @@ -2853,7 +2882,7 @@ EOF AC_MSG_CHECKING([for atomic builtins for short]) if AC_TRY_EVAL(ac_compile); then - if grep __sync_ conftest.s >/dev/null 2>&1 ; then + if grep __atomic_ conftest.s >/dev/null 2>&1 ; then glibcxx_cv_atomic_short=no else glibcxx_cv_atomic_short=yes @@ -2883,7 +2912,7 @@ EOF AC_MSG_CHECKING([for atomic builtins for int]) if AC_TRY_EVAL(ac_compile); then - if grep __sync_ conftest.s >/dev/null 2>&1 ; then + if grep __atomic_ conftest.s >/dev/null 2>&1 ; then glibcxx_cv_atomic_int=no else glibcxx_cv_atomic_int=yes @@ -2912,7 +2941,7 @@ EOF AC_MSG_CHECKING([for atomic builtins for long long]) if AC_TRY_EVAL(ac_compile); then - if grep __sync_ conftest.s >/dev/null 2>&1 ; then + if grep __atomic_ conftest.s >/dev/null 2>&1 ; then glibcxx_cv_atomic_long_long=no else glibcxx_cv_atomic_long_long=yes @@ -3264,17 +3293,14 @@ if test $enable_symvers != no ; then # The Solaris 2 runtime linker doesn't support the GNU extension of # binding the same symbol to different versions solaris2*) - symvers_renaming=no ;; + ;; # Other platforms with GNU symbol versioning (GNU/Linux, more?) do. *) AC_DEFINE(HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT, 1, [Define to 1 if the target runtime linker supports binding the same symbol to different versions.]) - symvers_renaming=yes ;; + ;; esac -else - symvers_renaming=no fi -GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_SOL2, test $symvers_renaming = no) # Now, set up compatibility support, if any. # In addition, need this to deal with std::size_t mangling in @@ -3591,6 +3617,17 @@ AC_SUBST(python_mod_dir) GLIBCXX_CONDITIONAL(ENABLE_PYTHONDIR, test $python_mod_dir != no) ]) +dnl +dnl Check to see if -Werror is disabled. +dnl +dnl --enable-werror/--disable-werror +AC_DEFUN([GLIBCXX_ENABLE_WERROR], [ + AC_MSG_CHECKING([for -Werror]) + GLIBCXX_ENABLE(werror,$1,,[turns on -Werror]) + AC_MSG_RESULT($enable_werror) + GLIBCXX_CONDITIONAL(ENABLE_WERROR, test $enable_werror = yes) +]) + # Macros from the top-level gcc directory. m4_include([../config/gc++filt.m4]) diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in index 378ddabb3f2..4dea92b6d14 100644 --- a/libstdc++-v3/config.h.in +++ b/libstdc++-v3/config.h.in @@ -171,6 +171,9 @@ /* Define if _Unwind_GetIPInfo is available. */ #undef HAVE_GETIPINFO +/* Define if gets is available in <stdio.h>. */ +#undef HAVE_GETS + /* Define to 1 if you have the `hypot' function. */ #undef HAVE_HYPOT diff --git a/libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt index 64d59219722..fc05962add7 100644 --- a/libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt @@ -1295,6 +1295,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17 FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4 @@ -2523,6 +2526,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:12:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:12:_ZTISt10bad_typeid@@GLIBCXX_3.4 OBJECT:12:_ZTISt10istrstream@@GLIBCXX_3.4 @@ -3008,6 +3012,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4 OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 +OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11 @@ -3194,6 +3199,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3 diff --git a/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt index 64d59219722..fc05962add7 100644 --- a/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt @@ -1295,6 +1295,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17 FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4 @@ -2523,6 +2526,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:12:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:12:_ZTISt10bad_typeid@@GLIBCXX_3.4 OBJECT:12:_ZTISt10istrstream@@GLIBCXX_3.4 @@ -3008,6 +3012,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4 OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 +OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11 @@ -3194,6 +3199,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3 diff --git a/libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt index eba1be6f68b..6c090227465 100644 --- a/libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt @@ -1441,6 +1441,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17 FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4 @@ -2760,6 +2763,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4 OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4 OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4 @@ -3268,6 +3272,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4 OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 +OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11 @@ -3460,6 +3465,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3 diff --git a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt index eba1be6f68b..6c090227465 100644 --- a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt @@ -1441,6 +1441,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17 FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4 @@ -2760,6 +2763,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4 OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4 OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4 @@ -3268,6 +3272,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4 OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 +OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11 @@ -3460,6 +3465,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3 diff --git a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt index 1a6a1751353..f2e81e4d333 100644 --- a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt @@ -1441,6 +1441,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17 FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4 @@ -3225,6 +3228,7 @@ OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:24:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4 OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4 OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4 @@ -3479,6 +3483,7 @@ OBJECT:40:_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:40:_ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:40:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:40:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 +OBJECT:40:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:40:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt10bad_typeid@@GLIBCXX_3.4 OBJECT:40:_ZTVSt10lock_error@@GLIBCXX_3.4.11 @@ -3504,6 +3509,7 @@ OBJECT:40:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCX OBJECT:40:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt9bad_alloc@@GLIBCXX_3.4 OBJECT:40:_ZTVSt9exception@@GLIBCXX_3.4 +OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:45:_ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCXX_3.4 diff --git a/libstdc++-v3/config/abi/post/s390-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/s390-linux-gnu/baseline_symbols.txt index 3c5ecc325ec..dae21a09633 100644 --- a/libstdc++-v3/config/abi/post/s390-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/s390-linux-gnu/baseline_symbols.txt @@ -1441,6 +1441,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17 FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4 @@ -2760,6 +2763,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4 OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4 OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4 @@ -3268,6 +3272,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4 OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 +OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11 @@ -3460,6 +3465,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3 diff --git a/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt index 1a6a1751353..f2e81e4d333 100644 --- a/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt @@ -1441,6 +1441,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17 FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4 @@ -3225,6 +3228,7 @@ OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:24:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4 OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4 OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4 @@ -3479,6 +3483,7 @@ OBJECT:40:_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:40:_ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:40:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:40:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 +OBJECT:40:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:40:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt10bad_typeid@@GLIBCXX_3.4 OBJECT:40:_ZTVSt10lock_error@@GLIBCXX_3.4.11 @@ -3504,6 +3509,7 @@ OBJECT:40:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCX OBJECT:40:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt9bad_alloc@@GLIBCXX_3.4 OBJECT:40:_ZTVSt9exception@@GLIBCXX_3.4 +OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:45:_ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCXX_3.4 diff --git a/libstdc++-v3/config/abi/post/solaris2.10/amd64/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.10/amd64/baseline_symbols.txt index 27ffeef911b..d7f3613bbc3 100644 --- a/libstdc++-v3/config/abi/post/solaris2.10/amd64/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/solaris2.10/amd64/baseline_symbols.txt @@ -38,6 +38,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4 +FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17 FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10 FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10 FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4 @@ -720,6 +724,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4 FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4 FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4 FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.16 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4 @@ -801,6 +806,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@@GLIBCXX_3.4.5 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4 @@ -949,6 +955,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4 FUNC:_ZNSolsEt@@GLIBCXX_3.4 FUNC:_ZNSolsEx@@GLIBCXX_3.4 FUNC:_ZNSolsEy@@GLIBCXX_3.4 +FUNC:_ZNSs10_S_compareEmm@@GLIBCXX_3.4.16 FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4 @@ -1030,6 +1037,7 @@ FUNC:_ZNSs7replaceEmmRKSs@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEmmRKSsmm@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEmmmc@@GLIBCXX_3.4 FUNC:_ZNSs7reserveEm@@GLIBCXX_3.4 +FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSs9_M_assignEPcmc@@GLIBCXX_3.4.5 FUNC:_ZNSs9_M_mutateEmmm@@GLIBCXX_3.4 FUNC:_ZNSs9push_backEc@@GLIBCXX_3.4 @@ -1258,6 +1266,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17 FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4 @@ -1560,6 +1571,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3 FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEl@@GLIBCXX_3.4.16 +FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEl@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4 @@ -1599,6 +1612,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEl@@GLIBCXX_3.4.16 +FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEl@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4 @@ -1643,6 +1658,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPcl@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_l@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6 @@ -1660,6 +1676,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwl@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_l@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6 @@ -1920,6 +1937,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4 FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4 FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11 +FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17 FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11 FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11 FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EPim@@GLIBCXX_3.4 @@ -2392,14 +2410,17 @@ FUNC:_Znwm@@GLIBCXX_3.4 FUNC:_ZnwmRKSt9nothrow_t@@GLIBCXX_3.4 FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11 FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11 +FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6 FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 +FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 FUNC:__cxa_demangle@@CXXABI_1.3 FUNC:__cxa_end_catch@@CXXABI_1.3 +FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6 FUNC:__cxa_free_exception@@CXXABI_1.3 FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1 FUNC:__cxa_get_globals@@CXXABI_1.3 @@ -2410,6 +2431,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3 FUNC:__cxa_pure_virtual@@CXXABI_1.3 FUNC:__cxa_rethrow@@CXXABI_1.3 FUNC:__cxa_throw@@CXXABI_1.3 +FUNC:__cxa_tm_cleanup@@CXXABI_TM_1 FUNC:__cxa_vec_cctor@@CXXABI_1.3 FUNC:__cxa_vec_cleanup@@CXXABI_1.3 FUNC:__cxa_vec_ctor@@CXXABI_1.3 @@ -2431,6 +2453,8 @@ OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 OBJECT:0:CXXABI_1.3.5 +OBJECT:0:CXXABI_1.3.6 +OBJECT:0:CXXABI_TM_1 OBJECT:0:GLIBCXX_3.4 OBJECT:0:GLIBCXX_3.4.1 OBJECT:0:GLIBCXX_3.4.10 @@ -2439,6 +2463,8 @@ OBJECT:0:GLIBCXX_3.4.12 OBJECT:0:GLIBCXX_3.4.13 OBJECT:0:GLIBCXX_3.4.14 OBJECT:0:GLIBCXX_3.4.15 +OBJECT:0:GLIBCXX_3.4.16 +OBJECT:0:GLIBCXX_3.4.17 OBJECT:0:GLIBCXX_3.4.2 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 @@ -2772,6 +2798,32 @@ OBJECT:1:_ZNSt14numeric_limitsImE8is_exactE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsImE9is_iec559E@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsImE9is_moduloE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsImE9is_signedE@@GLIBCXX_3.4 +OBJECT:1:_ZNSt14numeric_limitsInE10is_boundedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE10is_integerE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE12has_infinityE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE13has_quiet_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE14is_specializedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE15has_denorm_lossE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE15tinyness_beforeE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE17has_signaling_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE5trapsE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE8is_exactE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE9is_iec559E@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE9is_moduloE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE9is_signedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE10is_boundedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE10is_integerE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE12has_infinityE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE13has_quiet_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE14is_specializedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE15has_denorm_lossE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE15tinyness_beforeE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE17has_signaling_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE5trapsE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE8is_exactE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE9is_iec559E@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE9is_moduloE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE9is_signedE@@GLIBCXX_3.4.17 OBJECT:1:_ZNSt14numeric_limitsIsE10is_boundedE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsIsE10is_integerE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsIsE12has_infinityE@@GLIBCXX_3.4 @@ -2887,6 +2939,7 @@ OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:24:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:24:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:24:_ZTISt10bad_typeid@@GLIBCXX_3.4 OBJECT:24:_ZTISt10istrstream@@GLIBCXX_3.4 @@ -3118,6 +3171,7 @@ OBJECT:40:_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:40:_ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:40:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:40:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 +OBJECT:40:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:40:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt10bad_typeid@@GLIBCXX_3.4 OBJECT:40:_ZTVSt10lock_error@@GLIBCXX_3.4.11 @@ -3143,6 +3197,7 @@ OBJECT:40:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCX OBJECT:40:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt9bad_alloc@@GLIBCXX_3.4 OBJECT:40:_ZTVSt9exception@@GLIBCXX_3.4 +OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:45:_ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCXX_3.4 @@ -3301,6 +3356,26 @@ OBJECT:4:_ZNSt14numeric_limitsImE14min_exponent10E@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsImE5radixE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsImE6digitsE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsImE8digits10E@@GLIBCXX_3.4 +OBJECT:4:_ZNSt14numeric_limitsInE10has_denormE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE11round_styleE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE12max_digits10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE12max_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE12min_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE14max_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE14min_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE5radixE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE6digitsE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE8digits10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE10has_denormE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE11round_styleE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE12max_digits10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE12max_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE12min_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE14max_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE14min_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE5radixE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE6digitsE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE8digits10E@@GLIBCXX_3.4.17 OBJECT:4:_ZNSt14numeric_limitsIsE10has_denormE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsIsE11round_styleE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsIsE12max_digits10E@@GLIBCXX_3.4.14 diff --git a/libstdc++-v3/config/abi/post/solaris2.10/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.10/baseline_symbols.txt index fca2a29d08a..d2356ba65ec 100644 --- a/libstdc++-v3/config/abi/post/solaris2.10/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/solaris2.10/baseline_symbols.txt @@ -38,6 +38,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4 +FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17 FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10 FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10 FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4 @@ -720,6 +724,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4 FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4 FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4 FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.16 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4 @@ -801,6 +806,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4 @@ -949,6 +955,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4 FUNC:_ZNSolsEt@@GLIBCXX_3.4 FUNC:_ZNSolsEx@@GLIBCXX_3.4 FUNC:_ZNSolsEy@@GLIBCXX_3.4 +FUNC:_ZNSs10_S_compareEjj@@GLIBCXX_3.4.16 FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4 @@ -1030,6 +1037,7 @@ FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4 FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4 +FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5 FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4 FUNC:_ZNSs9push_backEc@@GLIBCXX_3.4 @@ -1258,6 +1266,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17 FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4 @@ -1560,6 +1571,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3 FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16 +FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4 @@ -1599,6 +1612,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16 +FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4 @@ -1643,6 +1658,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6 @@ -1660,6 +1676,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEl@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEl@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6 @@ -1920,6 +1937,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4 FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4 FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11 +FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17 FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11 FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11 FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EPij@@GLIBCXX_3.4 @@ -2392,14 +2410,17 @@ FUNC:_Znwj@@GLIBCXX_3.4 FUNC:_ZnwjRKSt9nothrow_t@@GLIBCXX_3.4 FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11 FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11 +FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6 FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 +FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 FUNC:__cxa_demangle@@CXXABI_1.3 FUNC:__cxa_end_catch@@CXXABI_1.3 +FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6 FUNC:__cxa_free_exception@@CXXABI_1.3 FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1 FUNC:__cxa_get_globals@@CXXABI_1.3 @@ -2410,6 +2431,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3 FUNC:__cxa_pure_virtual@@CXXABI_1.3 FUNC:__cxa_rethrow@@CXXABI_1.3 FUNC:__cxa_throw@@CXXABI_1.3 +FUNC:__cxa_tm_cleanup@@CXXABI_TM_1 FUNC:__cxa_vec_cctor@@CXXABI_1.3 FUNC:__cxa_vec_cleanup@@CXXABI_1.3 FUNC:__cxa_vec_ctor@@CXXABI_1.3 @@ -2431,6 +2453,8 @@ OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 OBJECT:0:CXXABI_1.3.5 +OBJECT:0:CXXABI_1.3.6 +OBJECT:0:CXXABI_TM_1 OBJECT:0:GLIBCXX_3.4 OBJECT:0:GLIBCXX_3.4.1 OBJECT:0:GLIBCXX_3.4.10 @@ -2439,6 +2463,8 @@ OBJECT:0:GLIBCXX_3.4.12 OBJECT:0:GLIBCXX_3.4.13 OBJECT:0:GLIBCXX_3.4.14 OBJECT:0:GLIBCXX_3.4.15 +OBJECT:0:GLIBCXX_3.4.16 +OBJECT:0:GLIBCXX_3.4.17 OBJECT:0:GLIBCXX_3.4.2 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 @@ -2469,6 +2495,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:12:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:12:_ZTISt10bad_typeid@@GLIBCXX_3.4 OBJECT:12:_ZTISt10istrstream@@GLIBCXX_3.4 @@ -2951,6 +2978,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4 OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 +OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11 @@ -3126,6 +3154,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3 diff --git a/libstdc++-v3/config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt index ae03a091926..912ce2527a9 100644 --- a/libstdc++-v3/config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt @@ -38,6 +38,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4 +FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17 FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10 FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10 FUNC:_ZN9__gnu_cxx12__atomic_addEPVli@@GLIBCXX_3.4 @@ -720,6 +724,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4 FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4 FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4 FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.16 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4 @@ -801,6 +806,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@@GLIBCXX_3.4.5 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4 @@ -949,6 +955,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4 FUNC:_ZNSolsEt@@GLIBCXX_3.4 FUNC:_ZNSolsEx@@GLIBCXX_3.4 FUNC:_ZNSolsEy@@GLIBCXX_3.4 +FUNC:_ZNSs10_S_compareEmm@@GLIBCXX_3.4.16 FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4 @@ -1030,6 +1037,7 @@ FUNC:_ZNSs7replaceEmmRKSs@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEmmRKSsmm@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEmmmc@@GLIBCXX_3.4 FUNC:_ZNSs7reserveEm@@GLIBCXX_3.4 +FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSs9_M_assignEPcmc@@GLIBCXX_3.4.5 FUNC:_ZNSs9_M_mutateEmmm@@GLIBCXX_3.4 FUNC:_ZNSs9push_backEc@@GLIBCXX_3.4 @@ -1258,6 +1266,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17 FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4 @@ -1560,6 +1571,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3 FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEl@@GLIBCXX_3.4.16 +FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEl@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4 @@ -1599,6 +1612,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEl@@GLIBCXX_3.4.16 +FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEl@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4 @@ -1643,6 +1658,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPcl@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_l@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6 @@ -1660,6 +1676,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwl@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_l@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6 @@ -1920,6 +1937,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4 FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4 FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11 +FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17 FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11 FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11 FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EPim@@GLIBCXX_3.4 @@ -2392,14 +2410,17 @@ FUNC:_Znwm@@GLIBCXX_3.4 FUNC:_ZnwmRKSt9nothrow_t@@GLIBCXX_3.4 FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11 FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11 +FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6 FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 +FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 FUNC:__cxa_demangle@@CXXABI_1.3 FUNC:__cxa_end_catch@@CXXABI_1.3 +FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6 FUNC:__cxa_free_exception@@CXXABI_1.3 FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1 FUNC:__cxa_get_globals@@CXXABI_1.3 @@ -2410,6 +2431,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3 FUNC:__cxa_pure_virtual@@CXXABI_1.3 FUNC:__cxa_rethrow@@CXXABI_1.3 FUNC:__cxa_throw@@CXXABI_1.3 +FUNC:__cxa_tm_cleanup@@CXXABI_TM_1 FUNC:__cxa_vec_cctor@@CXXABI_1.3 FUNC:__cxa_vec_cleanup@@CXXABI_1.3 FUNC:__cxa_vec_ctor@@CXXABI_1.3 @@ -2431,6 +2453,8 @@ OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 OBJECT:0:CXXABI_1.3.5 +OBJECT:0:CXXABI_1.3.6 +OBJECT:0:CXXABI_TM_1 OBJECT:0:GLIBCXX_3.4 OBJECT:0:GLIBCXX_3.4.1 OBJECT:0:GLIBCXX_3.4.10 @@ -2439,6 +2463,8 @@ OBJECT:0:GLIBCXX_3.4.12 OBJECT:0:GLIBCXX_3.4.13 OBJECT:0:GLIBCXX_3.4.14 OBJECT:0:GLIBCXX_3.4.15 +OBJECT:0:GLIBCXX_3.4.16 +OBJECT:0:GLIBCXX_3.4.17 OBJECT:0:GLIBCXX_3.4.2 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 @@ -2772,6 +2798,32 @@ OBJECT:1:_ZNSt14numeric_limitsImE8is_exactE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsImE9is_iec559E@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsImE9is_moduloE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsImE9is_signedE@@GLIBCXX_3.4 +OBJECT:1:_ZNSt14numeric_limitsInE10is_boundedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE10is_integerE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE12has_infinityE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE13has_quiet_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE14is_specializedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE15has_denorm_lossE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE15tinyness_beforeE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE17has_signaling_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE5trapsE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE8is_exactE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE9is_iec559E@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE9is_moduloE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE9is_signedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE10is_boundedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE10is_integerE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE12has_infinityE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE13has_quiet_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE14is_specializedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE15has_denorm_lossE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE15tinyness_beforeE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE17has_signaling_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE5trapsE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE8is_exactE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE9is_iec559E@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE9is_moduloE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE9is_signedE@@GLIBCXX_3.4.17 OBJECT:1:_ZNSt14numeric_limitsIsE10is_boundedE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsIsE10is_integerE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsIsE12has_infinityE@@GLIBCXX_3.4 @@ -2887,6 +2939,7 @@ OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:24:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:24:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:24:_ZTISt10bad_typeid@@GLIBCXX_3.4 OBJECT:24:_ZTISt10istrstream@@GLIBCXX_3.4 @@ -3118,6 +3171,7 @@ OBJECT:40:_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:40:_ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:40:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:40:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 +OBJECT:40:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:40:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt10bad_typeid@@GLIBCXX_3.4 OBJECT:40:_ZTVSt10lock_error@@GLIBCXX_3.4.11 @@ -3143,6 +3197,7 @@ OBJECT:40:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCX OBJECT:40:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt9bad_alloc@@GLIBCXX_3.4 OBJECT:40:_ZTVSt9exception@@GLIBCXX_3.4 +OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:45:_ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCXX_3.4 @@ -3301,6 +3356,26 @@ OBJECT:4:_ZNSt14numeric_limitsImE14min_exponent10E@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsImE5radixE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsImE6digitsE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsImE8digits10E@@GLIBCXX_3.4 +OBJECT:4:_ZNSt14numeric_limitsInE10has_denormE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE11round_styleE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE12max_digits10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE12max_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE12min_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE14max_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE14min_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE5radixE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE6digitsE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE8digits10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE10has_denormE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE11round_styleE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE12max_digits10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE12max_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE12min_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE14max_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE14min_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE5radixE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE6digitsE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE8digits10E@@GLIBCXX_3.4.17 OBJECT:4:_ZNSt14numeric_limitsIsE10has_denormE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsIsE11round_styleE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsIsE12max_digits10E@@GLIBCXX_3.4.14 diff --git a/libstdc++-v3/config/abi/post/solaris2.8/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.8/baseline_symbols.txt index 6e4db5da7d2..143f0f4d73c 100644 --- a/libstdc++-v3/config/abi/post/solaris2.8/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/solaris2.8/baseline_symbols.txt @@ -38,6 +38,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4 +FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17 FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10 FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10 FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4 @@ -719,6 +723,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4 FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4 FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4 FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.16 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4 @@ -800,6 +805,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4 @@ -948,6 +954,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4 FUNC:_ZNSolsEt@@GLIBCXX_3.4 FUNC:_ZNSolsEx@@GLIBCXX_3.4 FUNC:_ZNSolsEy@@GLIBCXX_3.4 +FUNC:_ZNSs10_S_compareEjj@@GLIBCXX_3.4.16 FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4 @@ -1029,6 +1036,7 @@ FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4 FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4 +FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5 FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4 FUNC:_ZNSs9push_backEc@@GLIBCXX_3.4 @@ -1551,6 +1559,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3 FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16 +FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4 @@ -1590,6 +1600,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16 +FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4 @@ -1634,6 +1646,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6 @@ -1651,6 +1664,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEl@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEl@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6 @@ -2369,14 +2383,17 @@ FUNC:_Znwj@@GLIBCXX_3.4 FUNC:_ZnwjRKSt9nothrow_t@@GLIBCXX_3.4 FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11 FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11 +FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6 FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 +FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 FUNC:__cxa_demangle@@CXXABI_1.3 FUNC:__cxa_end_catch@@CXXABI_1.3 +FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6 FUNC:__cxa_free_exception@@CXXABI_1.3 FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1 FUNC:__cxa_get_globals@@CXXABI_1.3 @@ -2387,6 +2404,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3 FUNC:__cxa_pure_virtual@@CXXABI_1.3 FUNC:__cxa_rethrow@@CXXABI_1.3 FUNC:__cxa_throw@@CXXABI_1.3 +FUNC:__cxa_tm_cleanup@@CXXABI_TM_1 FUNC:__cxa_vec_cctor@@CXXABI_1.3 FUNC:__cxa_vec_cleanup@@CXXABI_1.3 FUNC:__cxa_vec_ctor@@CXXABI_1.3 @@ -2450,6 +2468,8 @@ OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 OBJECT:0:CXXABI_1.3.5 +OBJECT:0:CXXABI_1.3.6 +OBJECT:0:CXXABI_TM_1 OBJECT:0:GLIBCXX_3.4 OBJECT:0:GLIBCXX_3.4.1 OBJECT:0:GLIBCXX_3.4.10 @@ -2458,6 +2478,8 @@ OBJECT:0:GLIBCXX_3.4.12 OBJECT:0:GLIBCXX_3.4.13 OBJECT:0:GLIBCXX_3.4.14 OBJECT:0:GLIBCXX_3.4.15 +OBJECT:0:GLIBCXX_3.4.16 +OBJECT:0:GLIBCXX_3.4.17 OBJECT:0:GLIBCXX_3.4.2 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 diff --git a/libstdc++-v3/config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt index a30c45eb258..353d5374119 100644 --- a/libstdc++-v3/config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt @@ -38,6 +38,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4 +FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17 FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10 FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10 FUNC:_ZN9__gnu_cxx12__atomic_addEPVli@@GLIBCXX_3.4 @@ -719,6 +723,7 @@ FUNC:_ZNSaIwEC2ERKS_@@GLIBCXX_3.4 FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4 FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4 FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.16 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4 @@ -800,6 +805,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mm@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEm@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@@GLIBCXX_3.4.5 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4 @@ -948,6 +954,7 @@ FUNC:_ZNSolsEs@@GLIBCXX_3.4 FUNC:_ZNSolsEt@@GLIBCXX_3.4 FUNC:_ZNSolsEx@@GLIBCXX_3.4 FUNC:_ZNSolsEy@@GLIBCXX_3.4 +FUNC:_ZNSs10_S_compareEmm@@GLIBCXX_3.4.16 FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4 @@ -1029,6 +1036,7 @@ FUNC:_ZNSs7replaceEmmRKSs@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEmmRKSsmm@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEmmmc@@GLIBCXX_3.4 FUNC:_ZNSs7reserveEm@@GLIBCXX_3.4 +FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSs9_M_assignEPcmc@@GLIBCXX_3.4.5 FUNC:_ZNSs9_M_mutateEmmm@@GLIBCXX_3.4 FUNC:_ZNSs9push_backEc@@GLIBCXX_3.4 @@ -1551,6 +1559,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3 FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEl@@GLIBCXX_3.4.16 +FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEl@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4 @@ -1590,6 +1600,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEl@@GLIBCXX_3.4.16 +FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEl@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4 @@ -1634,6 +1646,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPcl@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_l@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6 @@ -1651,6 +1664,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwl@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwmm@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_l@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6 @@ -2369,14 +2383,17 @@ FUNC:_Znwm@@GLIBCXX_3.4 FUNC:_ZnwmRKSt9nothrow_t@@GLIBCXX_3.4 FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11 FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11 +FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6 FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 +FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 FUNC:__cxa_demangle@@CXXABI_1.3 FUNC:__cxa_end_catch@@CXXABI_1.3 +FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6 FUNC:__cxa_free_exception@@CXXABI_1.3 FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1 FUNC:__cxa_get_globals@@CXXABI_1.3 @@ -2387,6 +2404,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3 FUNC:__cxa_pure_virtual@@CXXABI_1.3 FUNC:__cxa_rethrow@@CXXABI_1.3 FUNC:__cxa_throw@@CXXABI_1.3 +FUNC:__cxa_tm_cleanup@@CXXABI_TM_1 FUNC:__cxa_vec_cctor@@CXXABI_1.3 FUNC:__cxa_vec_cleanup@@CXXABI_1.3 FUNC:__cxa_vec_ctor@@CXXABI_1.3 @@ -2450,6 +2468,8 @@ OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 OBJECT:0:CXXABI_1.3.5 +OBJECT:0:CXXABI_1.3.6 +OBJECT:0:CXXABI_TM_1 OBJECT:0:GLIBCXX_3.4 OBJECT:0:GLIBCXX_3.4.1 OBJECT:0:GLIBCXX_3.4.10 @@ -2458,6 +2478,8 @@ OBJECT:0:GLIBCXX_3.4.12 OBJECT:0:GLIBCXX_3.4.13 OBJECT:0:GLIBCXX_3.4.14 OBJECT:0:GLIBCXX_3.4.15 +OBJECT:0:GLIBCXX_3.4.16 +OBJECT:0:GLIBCXX_3.4.17 OBJECT:0:GLIBCXX_3.4.2 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 @@ -2788,6 +2810,32 @@ OBJECT:1:_ZNSt14numeric_limitsImE8is_exactE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsImE9is_iec559E@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsImE9is_moduloE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsImE9is_signedE@@GLIBCXX_3.4 +OBJECT:1:_ZNSt14numeric_limitsInE10is_boundedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE10is_integerE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE12has_infinityE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE13has_quiet_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE14is_specializedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE15has_denorm_lossE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE15tinyness_beforeE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE17has_signaling_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE5trapsE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE8is_exactE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE9is_iec559E@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE9is_moduloE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE9is_signedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE10is_boundedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE10is_integerE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE12has_infinityE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE13has_quiet_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE14is_specializedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE15has_denorm_lossE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE15tinyness_beforeE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE17has_signaling_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE5trapsE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE8is_exactE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE9is_iec559E@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE9is_moduloE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE9is_signedE@@GLIBCXX_3.4.17 OBJECT:1:_ZNSt14numeric_limitsIsE10is_boundedE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsIsE10is_integerE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsIsE12has_infinityE@@GLIBCXX_3.4 @@ -3313,6 +3361,26 @@ OBJECT:4:_ZNSt14numeric_limitsImE14min_exponent10E@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsImE5radixE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsImE6digitsE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsImE8digits10E@@GLIBCXX_3.4 +OBJECT:4:_ZNSt14numeric_limitsInE10has_denormE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE11round_styleE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE12max_digits10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE12max_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE12min_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE14max_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE14min_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE5radixE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE6digitsE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE8digits10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE10has_denormE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE11round_styleE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE12max_digits10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE12max_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE12min_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE14max_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE14min_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE5radixE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE6digitsE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE8digits10E@@GLIBCXX_3.4.17 OBJECT:4:_ZNSt14numeric_limitsIsE10has_denormE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsIsE11round_styleE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsIsE12max_digits10E@@GLIBCXX_3.4.14 diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt index 64d59219722..fc05962add7 100644 --- a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt @@ -1295,6 +1295,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17 FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4 @@ -2523,6 +2526,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:12:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:12:_ZTISt10bad_typeid@@GLIBCXX_3.4 OBJECT:12:_ZTISt10istrstream@@GLIBCXX_3.4 @@ -3008,6 +3012,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4 OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 +OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11 @@ -3194,6 +3199,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3 diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt index 081bc68432c..948bad58a48 100644 --- a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt @@ -1295,6 +1295,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17 FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4 @@ -2970,6 +2973,7 @@ OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:24:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:24:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:24:_ZTISt10bad_typeid@@GLIBCXX_3.4 OBJECT:24:_ZTISt10istrstream@@GLIBCXX_3.4 @@ -3212,6 +3216,7 @@ OBJECT:40:_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:40:_ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:40:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:40:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 +OBJECT:40:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:40:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt10bad_typeid@@GLIBCXX_3.4 OBJECT:40:_ZTVSt10lock_error@@GLIBCXX_3.4.11 @@ -3237,6 +3242,7 @@ OBJECT:40:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCX OBJECT:40:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt9bad_alloc@@GLIBCXX_3.4 OBJECT:40:_ZTVSt9exception@@GLIBCXX_3.4 +OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:45:_ZTSSt23__codecvt_abstract_baseIcc11__mbstate_tE@@GLIBCXX_3.4 diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt index 68ed54577f4..551e738a57c 100644 --- a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt @@ -43,6 +43,10 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4 +FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17 +FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17 FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10 FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10 FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4 @@ -820,6 +824,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4 @@ -1056,6 +1061,7 @@ FUNC:_ZNSs7replaceEjjRKSs@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4 FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4 FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4 +FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17 FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5 FUNC:_ZNSs9_M_assignEPcjc@GLIBCXX_3.4 FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4 @@ -1289,6 +1295,9 @@ FUNC:_ZNSt13__future_base12_Result_baseC2Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17 +FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17 FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4 @@ -1593,6 +1602,8 @@ FUNC:_ZNSt15__exception_ptreqERKNS_13exception_ptrES2_@@CXXABI_1.3.3 FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16 +FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4 @@ -1632,6 +1643,8 @@ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16 +FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4 FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4 @@ -1676,6 +1689,7 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE6setbufEPci@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6 @@ -1693,6 +1707,7 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE6setbufEPwi@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6 @@ -1957,6 +1972,7 @@ FUNC:_ZNSt6localeD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4 FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4 FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11 +FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17 FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11 FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11 FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj@@GLIBCXX_3.4 @@ -2431,14 +2447,17 @@ FUNC:_Znwj@@GLIBCXX_3.4 FUNC:_ZnwjRKSt9nothrow_t@@GLIBCXX_3.4 FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11 FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11 +FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6 FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 +FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 FUNC:__cxa_demangle@@CXXABI_1.3 FUNC:__cxa_end_catch@@CXXABI_1.3 +FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6 FUNC:__cxa_free_exception@@CXXABI_1.3 FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1 FUNC:__cxa_get_globals@@CXXABI_1.3 @@ -2449,6 +2468,7 @@ FUNC:__cxa_guard_release@@CXXABI_1.3 FUNC:__cxa_pure_virtual@@CXXABI_1.3 FUNC:__cxa_rethrow@@CXXABI_1.3 FUNC:__cxa_throw@@CXXABI_1.3 +FUNC:__cxa_tm_cleanup@@CXXABI_TM_1 FUNC:__cxa_vec_cctor@@CXXABI_1.3 FUNC:__cxa_vec_cleanup@@CXXABI_1.3 FUNC:__cxa_vec_ctor@@CXXABI_1.3 @@ -2470,6 +2490,8 @@ OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 OBJECT:0:CXXABI_1.3.5 +OBJECT:0:CXXABI_1.3.6 +OBJECT:0:CXXABI_TM_1 OBJECT:0:GLIBCXX_3.4 OBJECT:0:GLIBCXX_3.4.1 OBJECT:0:GLIBCXX_3.4.10 @@ -2479,6 +2501,7 @@ OBJECT:0:GLIBCXX_3.4.13 OBJECT:0:GLIBCXX_3.4.14 OBJECT:0:GLIBCXX_3.4.15 OBJECT:0:GLIBCXX_3.4.16 +OBJECT:0:GLIBCXX_3.4.17 OBJECT:0:GLIBCXX_3.4.2 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 @@ -2503,6 +2526,7 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:12:_ZTINSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:12:_ZTISt10bad_typeid@@GLIBCXX_3.4 OBJECT:12:_ZTISt10istrstream@@GLIBCXX_3.4 @@ -2900,6 +2924,32 @@ OBJECT:1:_ZNSt14numeric_limitsImE8is_exactE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsImE9is_iec559E@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsImE9is_moduloE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsImE9is_signedE@@GLIBCXX_3.4 +OBJECT:1:_ZNSt14numeric_limitsInE10is_boundedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE10is_integerE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE12has_infinityE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE13has_quiet_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE14is_specializedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE15has_denorm_lossE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE15tinyness_beforeE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE17has_signaling_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE5trapsE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE8is_exactE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE9is_iec559E@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE9is_moduloE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsInE9is_signedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE10is_boundedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE10is_integerE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE12has_infinityE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE13has_quiet_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE14is_specializedE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE15has_denorm_lossE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE15tinyness_beforeE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE17has_signaling_NaNE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE5trapsE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE8is_exactE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE9is_iec559E@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE9is_moduloE@@GLIBCXX_3.4.17 +OBJECT:1:_ZNSt14numeric_limitsIoE9is_signedE@@GLIBCXX_3.4.17 OBJECT:1:_ZNSt14numeric_limitsIsE10is_boundedE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsIsE10is_integerE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsIsE12has_infinityE@@GLIBCXX_3.4 @@ -2992,6 +3042,7 @@ OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4 OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 +OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4 OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11 @@ -3178,6 +3229,7 @@ OBJECT:40:_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3 @@ -3347,6 +3399,26 @@ OBJECT:4:_ZNSt14numeric_limitsImE14min_exponent10E@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsImE5radixE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsImE6digitsE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsImE8digits10E@@GLIBCXX_3.4 +OBJECT:4:_ZNSt14numeric_limitsInE10has_denormE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE11round_styleE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE12max_digits10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE12max_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE12min_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE14max_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE14min_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE5radixE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE6digitsE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsInE8digits10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE10has_denormE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE11round_styleE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE12max_digits10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE12max_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE12min_exponentE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE14max_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE14min_exponent10E@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE5radixE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE6digitsE@@GLIBCXX_3.4.17 +OBJECT:4:_ZNSt14numeric_limitsIoE8digits10E@@GLIBCXX_3.4.17 OBJECT:4:_ZNSt14numeric_limitsIsE10has_denormE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsIsE11round_styleE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsIsE12max_digits10E@@GLIBCXX_3.4.14 diff --git a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver index 2bd23cd1bea..e7e91624759 100644 --- a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver +++ b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver @@ -312,15 +312,12 @@ CXXABI_2.0 { _ZTVN10__cxxabiv120__si_class_type_infoE; _ZTVN10__cxxabiv121__vmi_class_type_infoE; - local: - *; }; # Symbols in the support library (libsupc++) supporting trans-mem. CXXABI_TM_1 { + global: __cxa_tm_cleanup; - local: - *; }; diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index 41d38a7a376..b99a8121680 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -1,7 +1,7 @@ ## Linker script for GNU versioning (GNU ld 2.13.91+ only.) ## -## Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 -## Free Software Foundation, Inc. +## Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +## 2011, 2012 Free Software Foundation, Inc. ## ## This file is part of the GNU ISO C++ Library. This library is free ## software; you can redistribute it and/or modify it under the @@ -890,8 +890,12 @@ GLIBCXX_3.4.5 { _ZNSt11char_traitsI[cw]E2eqERK[cw]S2_; + # Those template instantiations weren't exported on Solaris in GCC 4.6 + # and aren't necessary for correct operation, so don't emit them now + # (PR libstdc++/52188). +#if !defined(__sun__) && !defined(__svr4__) _ZNSt19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEppEv; - +#endif } GLIBCXX_3.4.4; GLIBCXX_3.4.6 { @@ -1421,8 +1425,6 @@ CXXABI_1.3 { # __gnu_cxx::_verbose_terminate_handler() _ZN9__gnu_cxx27__verbose_terminate_handlerEv; - local: - *; }; CXXABI_1.3.1 { @@ -1471,15 +1473,6 @@ CXXABI_1.3.3 { } CXXABI_1.3.2; -# Symbols in the support library (libsupc++) supporting trans-mem. -CXXABI_TM_1 { - global: - __cxa_tm_cleanup; - - local: - *; -}; - CXXABI_1.3.4 { # typeinfo for decimal floating point types @@ -1521,3 +1514,12 @@ CXXABI_1.3.6 { __cxa_deleted_virtual; } CXXABI_1.3.5; + + +# Symbols in the support library (libsupc++) supporting transactional memory. +CXXABI_TM_1 { + + global: + __cxa_tm_cleanup; + +};
\ No newline at end of file diff --git a/libstdc++-v3/config/os/gnu-linux/os_defines.h b/libstdc++-v3/config/os/gnu-linux/os_defines.h index c788cb0710d..c4aa305487d 100644 --- a/libstdc++-v3/config/os/gnu-linux/os_defines.h +++ b/libstdc++-v3/config/os/gnu-linux/os_defines.h @@ -1,6 +1,6 @@ // Specific definitions for GNU/Linux -*- C++ -*- -// Copyright (C) 2000, 2001, 2002, 2003, 2009, 2010 +// Copyright (C) 2000, 2001, 2002, 2003, 2009, 2010, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -39,4 +39,11 @@ #include <features.h> +// Provide a declaration for the possibly deprecated gets function, as +// glibc 2.15 and later does not declare gets for ISO C11 when +// __GNU_SOURCE is defined. +#if __GLIBC_PREREQ(2,15) && defined(_GNU_SOURCE) +# undef _GLIBCXX_HAVE_GETS +#endif + #endif diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 07b2a84e8d9..9e5731f8c55 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -644,8 +644,6 @@ GLIBCXX_LDBL_COMPAT_TRUE ENABLE_VISIBILITY_FALSE ENABLE_VISIBILITY_TRUE libtool_VERSION -ENABLE_SYMVERS_SOL2_FALSE -ENABLE_SYMVERS_SOL2_TRUE ENABLE_SYMVERS_SUN_FALSE ENABLE_SYMVERS_SUN_TRUE ENABLE_SYMVERS_DARWIN_FALSE @@ -664,6 +662,8 @@ LIBICONV OPT_LDFLAGS SECTION_LDFLAGS GLIBCXX_LIBS +ENABLE_WERROR_FALSE +ENABLE_WERROR_TRUE ENABLE_PYTHONDIR_FALSE ENABLE_PYTHONDIR_TRUE python_mod_dir @@ -860,6 +860,7 @@ enable_cxx_flags enable_fully_dynamic_string enable_extern_template with_python_dir +enable_werror enable_libstdcxx_time enable_tls enable_rpath @@ -1549,6 +1550,7 @@ Optional Features: memory [default=no] --enable-extern-template enable extern template [default=yes] + --enable-werror turns on -Werror [default=yes] --enable-libstdcxx-time[=KIND] use KIND for check type [default=no] --enable-tls Use thread-local storage [default=yes] @@ -11495,7 +11497,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11498 "configure" +#line 11500 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11601,7 +11603,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11604 "configure" +#line 11606 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -14959,7 +14961,7 @@ fi # # Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style. cat > conftest.$ac_ext << EOF -#line 14962 "configure" +#line 14964 "configure" struct S { ~S(); }; void bar(); void foo() @@ -15294,7 +15296,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; } # Fake what AC_TRY_COMPILE does. cat > conftest.$ac_ext << EOF -#line 15297 "configure" +#line 15299 "configure" int main() { typedef bool atomic_type; @@ -15318,7 +15320,7 @@ $as_echo_n "checking for atomic builtins for bool... " >&6; } ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - if grep __sync_ conftest.s >/dev/null 2>&1 ; then + if grep __atomic_ conftest.s >/dev/null 2>&1 ; then glibcxx_cv_atomic_bool=no else glibcxx_cv_atomic_bool=yes @@ -15329,7 +15331,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; } rm -f conftest* cat > conftest.$ac_ext << EOF -#line 15332 "configure" +#line 15334 "configure" int main() { typedef short atomic_type; @@ -15353,7 +15355,7 @@ $as_echo_n "checking for atomic builtins for short... " >&6; } ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - if grep __sync_ conftest.s >/dev/null 2>&1 ; then + if grep __atomic_ conftest.s >/dev/null 2>&1 ; then glibcxx_cv_atomic_short=no else glibcxx_cv_atomic_short=yes @@ -15364,7 +15366,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; } rm -f conftest* cat > conftest.$ac_ext << EOF -#line 15367 "configure" +#line 15369 "configure" int main() { // NB: _Atomic_word not necessarily int. @@ -15389,7 +15391,7 @@ $as_echo_n "checking for atomic builtins for int... " >&6; } ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - if grep __sync_ conftest.s >/dev/null 2>&1 ; then + if grep __atomic_ conftest.s >/dev/null 2>&1 ; then glibcxx_cv_atomic_int=no else glibcxx_cv_atomic_int=yes @@ -15400,7 +15402,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; } rm -f conftest* cat > conftest.$ac_ext << EOF -#line 15403 "configure" +#line 15405 "configure" int main() { typedef long long atomic_type; @@ -15424,7 +15426,7 @@ $as_echo_n "checking for atomic builtins for long long... " >&6; } ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - if grep __sync_ conftest.s >/dev/null 2>&1 ; then + if grep __atomic_ conftest.s >/dev/null 2>&1 ; then glibcxx_cv_atomic_long_long=no else glibcxx_cv_atomic_long_long=yes @@ -15480,7 +15482,7 @@ $as_echo "$as_me: WARNING: Performance of certain classes will degrade as a resu # unnecessary for this test. cat > conftest.$ac_ext << EOF -#line 15483 "configure" +#line 15485 "configure" int main() { _Decimal32 d1; @@ -15522,7 +15524,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # unnecessary for this test. cat > conftest.$ac_ext << EOF -#line 15525 "configure" +#line 15527 "configure" template<typename T1, typename T2> struct same { typedef T2 type; }; @@ -15556,7 +15558,7 @@ $as_echo "$enable_int128" >&6; } rm -f conftest* cat > conftest.$ac_ext << EOF -#line 15559 "configure" +#line 15561 "configure" template<typename T1, typename T2> struct same { typedef T2 type; }; @@ -17269,6 +17271,26 @@ python_mod_dir="${with_python_dir}" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Werror" >&5 +$as_echo_n "checking for -Werror... " >&6; } + # Check whether --enable-werror was given. +if test "${enable_werror+set}" = set; then : + enableval=$enable_werror; + case "$enableval" in + yes|no) ;; + *) as_fn_error "Argument to enable/disable werror must be yes or no" "$LINENO" 5 ;; + esac + +else + enable_werror=yes +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_werror" >&5 +$as_echo "$enable_werror" >&6; } + + + # Checks for operating systems support that doesn't require linking. @@ -17393,6 +17415,56 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gets declaration" >&5 +$as_echo_n "checking for gets declaration... " >&6; } + if test "${glibcxx_cv_gets+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> + namespace test + { + using ::gets; + } + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + glibcxx_cv_gets=yes +else + glibcxx_cv_gets=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + + if test $glibcxx_cv_gets = yes; then + +$as_echo "#define HAVE_GETS 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_gets" >&5 +$as_echo "$glibcxx_cv_gets" >&6; } + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOWNERDEAD" >&5 $as_echo_n "checking for EOWNERDEAD... " >&6; } if test "${glibcxx_cv_system_error1+set}" = set; then : @@ -64974,19 +65046,16 @@ if test $enable_symvers != no ; then # The Solaris 2 runtime linker doesn't support the GNU extension of # binding the same symbol to different versions solaris2*) - symvers_renaming=no ;; + ;; # Other platforms with GNU symbol versioning (GNU/Linux, more?) do. *) $as_echo "#define HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT 1" >>confdefs.h - symvers_renaming=yes ;; + ;; esac -else - symvers_renaming=no fi - # Now, set up compatibility support, if any. # In addition, need this to deal with std::size_t mangling in # src/compatibility.cc. In a perfect world, could use @@ -66123,6 +66192,15 @@ else fi + if test $enable_werror = yes; then + ENABLE_WERROR_TRUE= + ENABLE_WERROR_FALSE='#' +else + ENABLE_WERROR_TRUE='#' + ENABLE_WERROR_FALSE= +fi + + if test $enable_symvers != no; then ENABLE_SYMVERS_TRUE= ENABLE_SYMVERS_FALSE='#' @@ -66168,15 +66246,6 @@ else fi - if test $symvers_renaming = no; then - ENABLE_SYMVERS_SOL2_TRUE= - ENABLE_SYMVERS_SOL2_FALSE='#' -else - ENABLE_SYMVERS_SOL2_TRUE='#' - ENABLE_SYMVERS_SOL2_FALSE= -fi - - if test $enable_libstdcxx_visibility = yes; then ENABLE_VISIBILITY_TRUE= ENABLE_VISIBILITY_FALSE='#' @@ -66399,7 +66468,7 @@ $as_echo "$gxx_include_dir" >&6; } # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc - WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual' + WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi' @@ -66580,6 +66649,10 @@ if test -z "${ENABLE_PYTHONDIR_TRUE}" && test -z "${ENABLE_PYTHONDIR_FALSE}"; th as_fn_error "conditional \"ENABLE_PYTHONDIR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${ENABLE_WERROR_TRUE}" && test -z "${ENABLE_WERROR_FALSE}"; then + as_fn_error "conditional \"ENABLE_WERROR\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${ENABLE_SYMVERS_TRUE}" && test -z "${ENABLE_SYMVERS_FALSE}"; then as_fn_error "conditional \"ENABLE_SYMVERS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -66600,10 +66673,6 @@ if test -z "${ENABLE_SYMVERS_SUN_TRUE}" && test -z "${ENABLE_SYMVERS_SUN_FALSE}" as_fn_error "conditional \"ENABLE_SYMVERS_SUN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${ENABLE_SYMVERS_SOL2_TRUE}" && test -z "${ENABLE_SYMVERS_SOL2_FALSE}"; then - as_fn_error "conditional \"ENABLE_SYMVERS_SOL2\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${ENABLE_VISIBILITY_TRUE}" && test -z "${ENABLE_VISIBILITY_FALSE}"; then as_fn_error "conditional \"ENABLE_VISIBILITY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac index 81b523f0342..f04563ea758 100644 --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -131,10 +131,12 @@ GLIBCXX_ENABLE_CXX_FLAGS GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING([no]) GLIBCXX_ENABLE_EXTERN_TEMPLATE([yes]) GLIBCXX_ENABLE_PYTHON +GLIBCXX_ENABLE_WERROR([yes]) # Checks for operating systems support that doesn't require linking. GLIBCXX_CHECK_MATH_PROTO GLIBCXX_CHECK_STDLIB_PROTO +GLIBCXX_CHECK_STDIO_PROTO GLIBCXX_CHECK_SYSTEM_ERROR # For the streamoff typedef. diff --git a/libstdc++-v3/doc/Makefile.in b/libstdc++-v3/doc/Makefile.in index 933893448d6..39c7e1f5b27 100644 --- a/libstdc++-v3/doc/Makefile.in +++ b/libstdc++-v3/doc/Makefile.in @@ -272,6 +272,8 @@ PWD_COMMAND = $${PWDCMD-pwd} STAMP = echo timestamp > toolexecdir = $(glibcxx_toolexecdir) toolexeclibdir = $(glibcxx_toolexeclibdir) +@ENABLE_WERROR_FALSE@WERROR_FLAG = +@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR) # These bits are all figured out from configure. Look in acinclude.m4 # or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS. @@ -279,7 +281,7 @@ CONFIG_CXXFLAGS = \ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@ WARN_CXXFLAGS = \ - $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once -Wabi + $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once # -I/-D flags to pass when compiling. diff --git a/libstdc++-v3/doc/doxygen/user.cfg.in b/libstdc++-v3/doc/doxygen/user.cfg.in index af667b51bae..3defd8d1d1d 100644 --- a/libstdc++-v3/doc/doxygen/user.cfg.in +++ b/libstdc++-v3/doc/doxygen/user.cfg.in @@ -1,4 +1,4 @@ -# Doxyfile 1.7.6.1 +# Doxyfile 1.8.0 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -194,8 +194,8 @@ TAB_SIZE = 4 # You can put \n's in the value part of an alias to insert newlines. ALIASES = "doctodo=@todo\nNeeds documentation! See http://gcc.gnu.org/onlinedocs/libstdc++/manual/documentation_style.html" \ - "headername{1}=Instead, include <\1>." \ - "headername{2}=Instead, include <\1> or <\2>." + "headername{1}=Instead, include <\1>." \ + "headername{2}=Instead, include <\1> or <\2>." # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding @@ -242,6 +242,15 @@ OPTIMIZE_OUTPUT_VHDL = NO EXTENSION_MAPPING = +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and @@ -355,6 +364,10 @@ EXTRACT_ALL = NO EXTRACT_PRIVATE = NO +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. + +EXTRACT_PACKAGE = NO + # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. @@ -651,171 +664,171 @@ WARN_LOGFILE = # with spaces. INPUT = @srcdir@/doc/doxygen/doxygroups.cc \ - @srcdir@/libsupc++/cxxabi.h \ - @srcdir@/libsupc++/exception \ - @srcdir@/libsupc++/initializer_list \ - @srcdir@/libsupc++/new \ - @srcdir@/libsupc++/typeinfo \ - include/algorithm \ - include/array \ - include/atomic \ - include/bitset \ - include/chrono \ - include/complex \ - include/condition_variable \ - include/deque \ - include/forward_list \ - include/fstream \ - include/functional \ - include/future \ - include/iomanip \ - include/ios \ - include/iosfwd \ - include/iostream \ - include/istream \ - include/iterator \ - include/limits \ - include/list \ - include/locale \ - include/map \ - include/memory \ - include/mutex \ - include/numeric \ - include/ostream \ - include/queue \ - include/random \ - include/ratio \ - include/regex \ - include/scoped_allocator \ - include/set \ - include/sstream \ - include/stack \ - include/stdexcept \ - include/streambuf \ - include/string \ - include/system_error \ - include/thread \ - include/tuple \ - include/typeindex \ - include/type_traits \ - include/unordered_map \ - include/unordered_set \ - include/utility \ - include/valarray \ - include/vector \ - include/cassert \ - include/ccomplex \ - include/cctype \ - include/cerrno \ - include/cfenv \ - include/cfloat \ - include/cinttypes \ - include/ciso646 \ - include/climits \ - include/clocale \ - include/cmath \ - include/csetjmp \ - include/csignal \ - include/cstdarg \ - include/cstdbool \ - include/cstddef \ - include/cstdint \ - include/cstdio \ - include/cstdlib \ - include/cstring \ - include/ctgmath \ - include/ctime \ - include/cwchar \ - include/cwctype \ - include/ \ - include/bits \ - include/@host_alias@/bits \ - include/backward \ - include/backward/hash_map \ - include/backward/hash_set \ - include/backward/strstream \ - include/debug \ - include/debug/bitset \ - include/debug/deque \ - include/debug/forward_list \ - include/debug/list \ - include/debug/map \ - include/debug/set \ - include/debug/string \ - include/debug/unordered_map \ - include/debug/unordered_set \ - include/debug/vector \ - include/profile \ - include/profile/impl \ - include/profile/bitset \ - include/profile/deque \ - include/profile/forward_list \ - include/profile/list \ - include/profile/map \ - include/profile/set \ - include/profile/unordered_map \ - include/profile/unordered_set \ - include/profile/vector \ - include/ext/algorithm \ - include/ext/functional \ - include/ext/iterator \ - include/ext/memory \ - include/ext/numeric \ - include/ext/rb_tree \ - include/ext/rope \ - include/ext/slist \ - include/parallel \ - include/parallel/algorithm \ - include/parallel/numeric \ - include/tr1/ccomplex \ - include/tr1/cctype \ - include/tr1/cfenv \ - include/tr1/cfloat \ - include/tr1/cinttypes \ - include/tr1/climits \ - include/tr1/cmath \ - include/tr1/complex \ - include/tr1/cstdarg \ - include/tr1/cstdbool \ - include/tr1/cstdint \ - include/tr1/cstdio \ - include/tr1/cstdlib \ - include/tr1/ctgmath \ - include/tr1/ctime \ - include/tr1/cwchar \ - include/tr1/cwctype \ - include/tr2/ \ - include/tr2/bool_set \ - include/tr2/dynamic_bitset \ - include/tr2/ratio \ - include/tr2/type_traits \ - include/decimal/decimal \ - include/ext \ - include/ext/pb_ds \ - include/ext/pb_ds/detail \ - include/ext/pb_ds/detail/binary_heap_ \ - include/ext/pb_ds/detail/binomial_heap_ \ - include/ext/pb_ds/detail/binomial_heap_base_ \ - include/ext/pb_ds/detail/bin_search_tree_ \ - include/ext/pb_ds/detail/branch_policy \ - include/ext/pb_ds/detail/cc_hash_table_map_ \ - include/ext/pb_ds/detail/eq_fn \ - include/ext/pb_ds/detail/gp_hash_table_map_ \ - include/ext/pb_ds/detail/hash_fn \ - include/ext/pb_ds/detail/left_child_next_sibling_heap_ \ - include/ext/pb_ds/detail/list_update_map_ \ - include/ext/pb_ds/detail/list_update_policy \ - include/ext/pb_ds/detail/ov_tree_map_ \ - include/ext/pb_ds/detail/pairing_heap_ \ - include/ext/pb_ds/detail/pat_trie_ \ - include/ext/pb_ds/detail/rb_tree_map_ \ - include/ext/pb_ds/detail/rc_binomial_heap_ \ - include/ext/pb_ds/detail/resize_policy \ - include/ext/pb_ds/detail/splay_tree_ \ - include/ext/pb_ds/detail/thin_heap_ \ - include/ext/pb_ds/detail/tree_policy \ - include/ext/pb_ds/detail/trie_policy \ - include/ext/pb_ds/detail/unordered_iterator + @srcdir@/libsupc++/cxxabi.h \ + @srcdir@/libsupc++/exception \ + @srcdir@/libsupc++/initializer_list \ + @srcdir@/libsupc++/new \ + @srcdir@/libsupc++/typeinfo \ + include/algorithm \ + include/array \ + include/atomic \ + include/bitset \ + include/chrono \ + include/complex \ + include/condition_variable \ + include/deque \ + include/forward_list \ + include/fstream \ + include/functional \ + include/future \ + include/iomanip \ + include/ios \ + include/iosfwd \ + include/iostream \ + include/istream \ + include/iterator \ + include/limits \ + include/list \ + include/locale \ + include/map \ + include/memory \ + include/mutex \ + include/numeric \ + include/ostream \ + include/queue \ + include/random \ + include/ratio \ + include/regex \ + include/scoped_allocator \ + include/set \ + include/sstream \ + include/stack \ + include/stdexcept \ + include/streambuf \ + include/string \ + include/system_error \ + include/thread \ + include/tuple \ + include/typeindex \ + include/type_traits \ + include/unordered_map \ + include/unordered_set \ + include/utility \ + include/valarray \ + include/vector \ + include/cassert \ + include/ccomplex \ + include/cctype \ + include/cerrno \ + include/cfenv \ + include/cfloat \ + include/cinttypes \ + include/ciso646 \ + include/climits \ + include/clocale \ + include/cmath \ + include/csetjmp \ + include/csignal \ + include/cstdarg \ + include/cstdbool \ + include/cstddef \ + include/cstdint \ + include/cstdio \ + include/cstdlib \ + include/cstring \ + include/ctgmath \ + include/ctime \ + include/cwchar \ + include/cwctype \ + include/ \ + include/bits \ + include/@host_alias@/bits \ + include/backward \ + include/backward/hash_map \ + include/backward/hash_set \ + include/backward/strstream \ + include/debug \ + include/debug/bitset \ + include/debug/deque \ + include/debug/forward_list \ + include/debug/list \ + include/debug/map \ + include/debug/set \ + include/debug/string \ + include/debug/unordered_map \ + include/debug/unordered_set \ + include/debug/vector \ + include/profile \ + include/profile/impl \ + include/profile/bitset \ + include/profile/deque \ + include/profile/forward_list \ + include/profile/list \ + include/profile/map \ + include/profile/set \ + include/profile/unordered_map \ + include/profile/unordered_set \ + include/profile/vector \ + include/ext/algorithm \ + include/ext/functional \ + include/ext/iterator \ + include/ext/memory \ + include/ext/numeric \ + include/ext/rb_tree \ + include/ext/rope \ + include/ext/slist \ + include/parallel \ + include/parallel/algorithm \ + include/parallel/numeric \ + include/tr1/ccomplex \ + include/tr1/cctype \ + include/tr1/cfenv \ + include/tr1/cfloat \ + include/tr1/cinttypes \ + include/tr1/climits \ + include/tr1/cmath \ + include/tr1/complex \ + include/tr1/cstdarg \ + include/tr1/cstdbool \ + include/tr1/cstdint \ + include/tr1/cstdio \ + include/tr1/cstdlib \ + include/tr1/ctgmath \ + include/tr1/ctime \ + include/tr1/cwchar \ + include/tr1/cwctype \ + include/tr2/ \ + include/tr2/bool_set \ + include/tr2/dynamic_bitset \ + include/tr2/ratio \ + include/tr2/type_traits \ + include/decimal/decimal \ + include/ext \ + include/ext/pb_ds \ + include/ext/pb_ds/detail \ + include/ext/pb_ds/detail/binary_heap_ \ + include/ext/pb_ds/detail/binomial_heap_ \ + include/ext/pb_ds/detail/binomial_heap_base_ \ + include/ext/pb_ds/detail/bin_search_tree_ \ + include/ext/pb_ds/detail/branch_policy \ + include/ext/pb_ds/detail/cc_hash_table_map_ \ + include/ext/pb_ds/detail/eq_fn \ + include/ext/pb_ds/detail/gp_hash_table_map_ \ + include/ext/pb_ds/detail/hash_fn \ + include/ext/pb_ds/detail/left_child_next_sibling_heap_ \ + include/ext/pb_ds/detail/list_update_map_ \ + include/ext/pb_ds/detail/list_update_policy \ + include/ext/pb_ds/detail/ov_tree_map_ \ + include/ext/pb_ds/detail/pairing_heap_ \ + include/ext/pb_ds/detail/pat_trie_ \ + include/ext/pb_ds/detail/rb_tree_map_ \ + include/ext/pb_ds/detail/rc_binomial_heap_ \ + include/ext/pb_ds/detail/resize_policy \ + include/ext/pb_ds/detail/splay_tree_ \ + include/ext/pb_ds/detail/thin_heap_ \ + include/ext/pb_ds/detail/tree_policy \ + include/ext/pb_ds/detail/trie_policy \ + include/ext/pb_ds/detail/unordered_iterator # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is @@ -834,8 +847,8 @@ INPUT_ENCODING = UTF-8 # *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = *.h \ - *.hpp \ - *.tcc + *.hpp \ + *.tcc # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. @@ -864,9 +877,9 @@ EXCLUDE_SYMLINKS = NO # for example use the pattern */test/* EXCLUDE_PATTERNS = stamp-* \ - doxygroups.cc \ - *.gch \ - */.svn/* + doxygroups.cc \ + *.gch \ + */.svn/* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the @@ -1334,7 +1347,7 @@ FORMULA_TRANSPARENT = YES # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML -# output. When enabled you also need to install MathJax separately and +# output. When enabled you may also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = NO @@ -1343,10 +1356,11 @@ USE_MATHJAX = NO # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the -# mathjax.org site, so you can quickly see the result without installing -# MathJax, but it is strongly recommended to install a local copy of MathJax -# before deployment. +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. +# However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. MATHJAX_RELPATH = http://www.mathjax.org/mathjax @@ -1676,43 +1690,48 @@ INCLUDE_FILE_PATTERNS = # instead of the = operator. PREDEFINED = __cplusplus \ - __GTHREADS \ - _GLIBCXX_HAS_GTHREADS \ - __GXX_EXPERIMENTAL_CXX0X__ \ - _GLIBCXX_INCLUDE_AS_CXX0X \ - "_GLIBCXX_PURE= " \ - "_GLIBCXX_CONST= " \ - "_GLIBCXX_NORETURN= " \ - "_GLIBCXX_NOTHROW= " \ - "_GLIBCXX_STD_C= " \ - "_GLIBCXX_STD_A= " \ - "_GLIBCXX_VISIBILITY(V)= " \ - "_GLIBCXX_BEGIN_NAMESPACE_VERSION= " \ + __GTHREADS \ + _GLIBCXX_HAS_GTHREADS \ + __GXX_EXPERIMENTAL_CXX0X__ \ + _GLIBCXX_INCLUDE_AS_CXX0X \ + "_GLIBCXX_PURE= " \ + "_GLIBCXX_CONST= " \ + "_GLIBCXX_NORETURN= " \ + "_GLIBCXX_STD_C= " \ + "_GLIBCXX_STD_A= " \ + "_GLIBCXX_VISIBILITY(V)= " \ + "_GLIBCXX_BEGIN_NAMESPACE_VERSION= " \ + "_GLIBCXX_BEGIN_NAMESPACE_ALGO= " \ + "_GLIBCXX_BEGIN_NAMESPACE_CONTAINER= " \ + "_GLIBCXX_BEGIN_NAMESPACE_LDBL= " \ + "_GLIBCXX_END_NAMESPACE_VERSION= " \ + "_GLIBCXX_END_NAMESPACE_ALGO= " \ + "_GLIBCXX_END_NAMESPACE_CONTAINER= " \ + "_GLIBCXX_END_NAMESPACE_LDBL= " \ + "_GLIBCXX_TEMPLATE_ARGS=... " \ + _GLIBCXX_DEPRECATED \ + _GLIBCXX_CONSTEXPR=constexpr \ + _GLIBCXX_USE_CONSTEXPR=constexpr \ + "_GLIBCXX_THROW(E)= " \ + _GLIBCXX_NOEXCEPT=noexcept \ + _GLIBCXX_NOTHROW=noexcept \ + _GLIBCXX_USE_NOEXCEPT=noexcept \ + _GLIBCXX_USE_WCHAR_T \ + _GLIBCXX_USE_LONG_LONG \ + _GLIBCXX_USE_C99_STDINT_TR1 \ + _GLIBCXX_USE_SCHED_YIELD \ + _GLIBCXX_USE_NANOSLEEP \ + __EXCEPTIONS \ + __GXX_RTTI \ + ATOMIC_INT_LOCK_FREE \ + PB_DS_DATA_TRUE_INDICATOR \ + PB_DS_STATIC_ASSERT=// \ "_GLIBCXX_BEGIN_NAMESPACE_ALGO= " \ - "_GLIBCXX_BEGIN_NAMESPACE_CONTAINER= " \ - "_GLIBCXX_BEGIN_NAMESPACE_LDBL= " \ - "_GLIBCXX_END_NAMESPACE_VERSION= " \ - "_GLIBCXX_END_NAMESPACE_ALGO= " \ - "_GLIBCXX_END_NAMESPACE_CONTAINER= " \ - "_GLIBCXX_END_NAMESPACE_LDBL= " \ - "_GLIBCXX_TEMPLATE_ARGS=... " \ - _GLIBCXX_DEPRECATED \ - _GLIBCXX_CONSTEXPR=constexpr \ - _GLIBCXX_USE_CONSTEXPR=constexpr \ - _GLIBCXX_USE_WCHAR_T \ - _GLIBCXX_USE_LONG_LONG \ - _GLIBCXX_USE_C99_STDINT_TR1 \ - _GLIBCXX_USE_SCHED_YIELD \ - _GLIBCXX_USE_NANOSLEEP \ - __EXCEPTIONS \ - __GXX_RTTI \ - ATOMIC_INT_LOCK_FREE \ - PB_DS_DATA_TRUE_INDICATOR \ - __glibcxx_function_requires=// \ - __glibcxx_class_requires=// \ - __glibcxx_class_requires2=// \ - __glibcxx_class_requires3=// \ - __glibcxx_class_requires4=// + __glibcxx_function_requires=// \ + __glibcxx_class_requires=// \ + __glibcxx_class_requires2=// \ + __glibcxx_class_requires3=// \ + __glibcxx_class_requires4=// # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. @@ -1733,22 +1752,18 @@ SKIP_FUNCTION_MACROS = YES # Configuration::additions related to external references #--------------------------------------------------------------------------- -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. TAGFILES = @@ -1861,6 +1876,15 @@ GROUP_GRAPHS = YES UML_LOOK = NO +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# managable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 10 + # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. diff --git a/libstdc++-v3/fragment.am b/libstdc++-v3/fragment.am index 2bcbc1ab3d3..304d39637d9 100644 --- a/libstdc++-v3/fragment.am +++ b/libstdc++-v3/fragment.am @@ -13,12 +13,18 @@ STAMP = echo timestamp > toolexecdir = $(glibcxx_toolexecdir) toolexeclibdir = $(glibcxx_toolexeclibdir) +if ENABLE_WERROR +WERROR_FLAG=$(WERROR) +else +WERROR_FLAG= +endif + # These bits are all figured out from configure. Look in acinclude.m4 # or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS. CONFIG_CXXFLAGS = \ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@ WARN_CXXFLAGS = \ - $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once -Wabi + $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once # -I/-D flags to pass when compiling. AM_CPPFLAGS = $(GLIBCXX_INCLUDES) diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index b872ef50703..19a7c0edd38 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -262,6 +262,8 @@ PWD_COMMAND = $${PWDCMD-pwd} STAMP = echo timestamp > toolexecdir = $(glibcxx_toolexecdir) toolexeclibdir = $(glibcxx_toolexeclibdir) +@ENABLE_WERROR_FALSE@WERROR_FLAG = +@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR) # These bits are all figured out from configure. Look in acinclude.m4 # or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS. @@ -269,7 +271,7 @@ CONFIG_CXXFLAGS = \ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@ WARN_CXXFLAGS = \ - $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once -Wabi + $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once # -I/-D flags to pass when compiling. diff --git a/libstdc++-v3/include/bits/forward_list.h b/libstdc++-v3/include/bits/forward_list.h index 0fc8323767b..9ccf7554aaa 100644 --- a/libstdc++-v3/include/bits/forward_list.h +++ b/libstdc++-v3/include/bits/forward_list.h @@ -1,6 +1,6 @@ // <forward_list.h> -*- C++ -*- -// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -499,15 +499,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER * [@a __first,@a __last). This is linear in N (where N is * distance(@a __first,@a __last)). */ - template<typename _InputIterator> + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> forward_list(_InputIterator __first, _InputIterator __last, const _Alloc& __al = _Alloc()) : _Base(_Node_alloc_type(__al)) - { - // Check whether it's an integral type. If so, it's not an iterator. - typedef typename std::__is_integer<_InputIterator>::__type _Integral; - _M_initialize_dispatch(__first, __last, _Integral()); - } + { _M_range_initialize(__first, __last); } /** * @brief The %forward_list copy constructor. @@ -519,7 +516,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER */ forward_list(const forward_list& __list) : _Base(__list._M_get_Node_allocator()) - { _M_initialize_dispatch(__list.begin(), __list.end(), __false_type()); } + { _M_range_initialize(__list.begin(), __list.end()); } /** * @brief The %forward_list move constructor. @@ -544,7 +541,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER forward_list(std::initializer_list<_Tp> __il, const _Alloc& __al = _Alloc()) : _Base(_Node_alloc_type(__al)) - { _M_initialize_dispatch(__il.begin(), __il.end(), __false_type()); } + { _M_range_initialize(__il.begin(), __il.end()); } /** * @brief The forward_list dtor. @@ -609,8 +606,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER * that the resulting %forward_list's size is the same as the number * of elements assigned. Old data may be lost. */ - template<typename _InputIterator> - void + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + void assign(_InputIterator __first, _InputIterator __last) { clear(); @@ -905,7 +903,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER * This operation is linear in the number of elements inserted and * does not invalidate iterators and references. */ - template<typename _InputIterator> + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> iterator insert_after(const_iterator __pos, _InputIterator __first, _InputIterator __last); @@ -1207,16 +1206,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER { this->_M_impl._M_head._M_reverse_after(); } private: - template<typename _Integer> - void - _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type) - { _M_fill_initialize(static_cast<size_type>(__n), __x); } - // Called by the range constructor to implement [23.1.1]/9 template<typename _InputIterator> void - _M_initialize_dispatch(_InputIterator __first, _InputIterator __last, - __false_type); + _M_range_initialize(_InputIterator __first, _InputIterator __last); // Called by forward_list(n,v,a), and the range constructor when it // turns out to be the same thing. diff --git a/libstdc++-v3/include/bits/forward_list.tcc b/libstdc++-v3/include/bits/forward_list.tcc index 83f32c4e299..99fa3a01609 100644 --- a/libstdc++-v3/include/bits/forward_list.tcc +++ b/libstdc++-v3/include/bits/forward_list.tcc @@ -1,6 +1,6 @@ // <forward_list.tcc> -*- C++ -*- -// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -100,8 +100,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER template<typename _InputIterator> void forward_list<_Tp, _Alloc>:: - _M_initialize_dispatch(_InputIterator __first, _InputIterator __last, - __false_type) + _M_range_initialize(_InputIterator __first, _InputIterator __last) { _Node_base* __to = &this->_M_impl._M_head; for (; __first != __last; ++__first) @@ -111,8 +110,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER } } - // Called by forward_list(n,v,a), and the range constructor - // when it turns out to be the same thing. + // Called by forward_list(n,v,a). template<typename _Tp, typename _Alloc> void forward_list<_Tp, _Alloc>:: @@ -258,7 +256,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER } template<typename _Tp, typename _Alloc> - template<typename _InputIterator> + template<typename _InputIterator, typename> typename forward_list<_Tp, _Alloc>::iterator forward_list<_Tp, _Alloc>:: insert_after(const_iterator __pos, diff --git a/libstdc++-v3/include/bits/hashtable_policy.h b/libstdc++-v3/include/bits/hashtable_policy.h index a06f6e316bc..b585d23a970 100644 --- a/libstdc++-v3/include/bits/hashtable_policy.h +++ b/libstdc++-v3/include/bits/hashtable_policy.h @@ -1113,7 +1113,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION for (auto __itx = __this->begin(); __itx != __this->end(); ++__itx) { const auto __ity = __other.find(_ExtractKey()(*__itx)); - if (__ity == __other.end() || *__ity != *__itx) + if (__ity == __other.end() || !bool(*__ity == *__itx)) return false; } return true; @@ -1151,7 +1151,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION for (_Uiterator __it1 = __first1; __it1 != __last1; ++__it1) { _Uiterator __tmp = __first1; - while (__tmp != __it1 && !(*__tmp == *__it1)) + while (__tmp != __it1 && !bool(*__tmp == *__it1)) ++__tmp; // We've seen this one before. diff --git a/libstdc++-v3/include/bits/locale_facets.h b/libstdc++-v3/include/bits/locale_facets.h index 3b3139f9a82..baf54d79846 100644 --- a/libstdc++-v3/include/bits/locale_facets.h +++ b/libstdc++-v3/include/bits/locale_facets.h @@ -1,7 +1,7 @@ // Locale support -*- C++ -*- // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, -// 2006, 2007, 2008, 2009, 2010, 2011 +// 2006, 2007, 2008, 2009, 2010, 2011, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -40,7 +40,7 @@ #include <cwctype> // For wctype_t #include <cctype> -#include <bits/ctype_base.h> +#include <bits/ctype_base.h> #include <iosfwd> #include <bits/ios_base.h> // For ios_base, ios_base::iostate #include <streambuf> @@ -1524,16 +1524,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Below are the indices into _S_atoms_out. enum { - _S_ominus, - _S_oplus, - _S_ox, - _S_oX, - _S_odigits, - _S_odigits_end = _S_odigits + 16, - _S_oudigits = _S_odigits_end, - _S_oudigits_end = _S_oudigits + 16, - _S_oe = _S_odigits + 14, // For scientific notation, 'e' - _S_oE = _S_oudigits + 14, // For scientific notation, 'E' + _S_ominus, + _S_oplus, + _S_ox, + _S_oX, + _S_odigits, + _S_odigits_end = _S_odigits + 16, + _S_oudigits = _S_odigits_end, + _S_oudigits_end = _S_oudigits + 16, + _S_oe = _S_odigits + 14, // For scientific notation, 'e' + _S_oE = _S_oudigits + 14, // For scientific notation, 'E' _S_oend = _S_oudigits_end }; @@ -1599,7 +1599,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_truename(0), _M_truename_size(0), _M_falsename(0), _M_falsename_size(0), _M_decimal_point(_CharT()), _M_thousands_sep(_CharT()), _M_allocated(false) - { } + { } ~__numpunct_cache(); @@ -1609,7 +1609,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION private: __numpunct_cache& operator=(const __numpunct_cache&); - + explicit __numpunct_cache(const __numpunct_cache&); }; @@ -1981,9 +1981,10 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL * specifier. Otherwise, parses like %d for signed and %u for unsigned * types. The matching type length modifier is also used. * - * Digit grouping is interpreted according to numpunct::grouping() and - * numpunct::thousands_sep(). If the pattern of digit groups isn't - * consistent, sets err to ios_base::failbit. + * Digit grouping is interpreted according to + * numpunct::grouping() and numpunct::thousands_sep(). If the + * pattern of digit groups isn't consistent, sets err to + * ios_base::failbit. * * If parsing the string yields a valid value for @a v, @a v is set. * Otherwise, sets err to ios_base::failbit and leaves @a v unaltered. @@ -2040,9 +2041,10 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL * matching type length modifier is also used. * * The decimal point character used is numpunct::decimal_point(). - * Digit grouping is interpreted according to numpunct::grouping() and - * numpunct::thousands_sep(). If the pattern of digit groups isn't - * consistent, sets err to ios_base::failbit. + * Digit grouping is interpreted according to + * numpunct::grouping() and numpunct::thousands_sep(). If the + * pattern of digit groups isn't consistent, sets err to + * ios_base::failbit. * * If parsing the string yields a valid value for @a v, @a v is set. * Otherwise, sets err to ios_base::failbit and leaves @a v unaltered. @@ -2079,9 +2081,10 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL * * The input characters are parsed like the scanf %p specifier. * - * Digit grouping is interpreted according to numpunct::grouping() and - * numpunct::thousands_sep(). If the pattern of digit groups isn't - * consistent, sets err to ios_base::failbit. + * Digit grouping is interpreted according to + * numpunct::grouping() and numpunct::thousands_sep(). If the + * pattern of digit groups isn't consistent, sets err to + * ios_base::failbit. * * Note that the digit grouping effect for pointers is a bit ambiguous * in the standard and shouldn't be relied on. See DR 344. @@ -2111,14 +2114,14 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL string&) const; template<typename _ValueT> - iter_type - _M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&, + iter_type + _M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&, _ValueT&) const; template<typename _CharT2> typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, int>::__type - _M_find(const _CharT2*, size_t __len, _CharT2 __c) const - { + _M_find(const _CharT2*, size_t __len, _CharT2 __c) const + { int __ret = -1; if (__len <= 10) { @@ -2138,10 +2141,10 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL } template<typename _CharT2> - typename __gnu_cxx::__enable_if<!__is_char<_CharT2>::__value, + typename __gnu_cxx::__enable_if<!__is_char<_CharT2>::__value, int>::__type - _M_find(const _CharT2* __zero, size_t __len, _CharT2 __c) const - { + _M_find(const _CharT2* __zero, size_t __len, _CharT2 __c) const + { int __ret = -1; const char_type* __q = char_traits<_CharT2>::find(__zero, __len, __c); if (__q) @@ -2169,6 +2172,9 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL * @return Iterator after reading. */ virtual iter_type + do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const; + + virtual iter_type do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, long& __v) const { return _M_extract_int(__beg, __end, __io, __err, __v); } @@ -2192,7 +2198,7 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL virtual iter_type do_get(iter_type __beg, iter_type __end, ios_base& __io, ios_base::iostate& __err, long long& __v) const - { return _M_extract_int(__beg, __end, __io, __err, __v); } + { return _M_extract_int(__beg, __end, __io, __err, __v); } virtual iter_type do_get(iter_type __beg, iter_type __end, ios_base& __io, @@ -2201,9 +2207,6 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL #endif virtual iter_type - do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const; - - virtual iter_type do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, float&) const; virtual iter_type @@ -2313,9 +2316,9 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL * If ios_base::showbase is set, '0' precedes octal values (except 0) * and '0[xX]' precedes hex values. * - * Thousands separators are inserted according to numpunct::grouping() - * and numpunct::thousands_sep(). The decimal point character used is - * numpunct::decimal_point(). + * The decimal point character used is numpunct::decimal_point(). + * Thousands separators are inserted according to + * numpunct::grouping() and numpunct::thousands_sep(). * * If io.width() is non-zero, enough @a fill characters are inserted to * make the result at least that wide. If @@ -2376,9 +2379,9 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL * If ios_base::showpoint is set, a decimal point will always be * output. * - * Thousands separators are inserted according to numpunct::grouping() - * and numpunct::thousands_sep(). The decimal point character used is - * numpunct::decimal_point(). + * The decimal point character used is numpunct::decimal_point(). + * Thousands separators are inserted according to + * numpunct::grouping() and numpunct::thousands_sep(). * * If io.width() is non-zero, enough @a fill characters are inserted to * make the result at least that wide. If @@ -2425,8 +2428,8 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL protected: template<typename _ValueT> - iter_type - _M_insert_float(iter_type, ios_base& __io, char_type __fill, + iter_type + _M_insert_float(iter_type, ios_base& __io, char_type __fill, char __mod, _ValueT __v) const; void @@ -2435,8 +2438,8 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL char_type* __cs, int& __len) const; template<typename _ValueT> - iter_type - _M_insert_int(iter_type, ios_base& __io, char_type __fill, + iter_type + _M_insert_int(iter_type, ios_base& __io, char_type __fill, _ValueT __v) const; void @@ -2471,7 +2474,7 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL virtual iter_type do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const - { return _M_insert_int(__s, __io, __fill, __v); } + { return _M_insert_int(__s, __io, __fill, __v); } virtual iter_type do_put(iter_type __s, ios_base& __io, char_type __fill, @@ -2549,7 +2552,7 @@ _GLIBCXX_END_NAMESPACE_LDBL /// Convenience interface to ctype.is(ctype_base::lower, __c). template<typename _CharT> - inline bool + inline bool islower(_CharT __c, const locale& __loc) { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::lower, __c); } diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index a002461ae98..4e6e0f49c5b 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -1,7 +1,7 @@ // Core algorithmic facilities -*- C++ -*- // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -// 2011 Free Software Foundation, Inc. +// 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -74,6 +74,7 @@ namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION +#ifndef __GXX_EXPERIMENTAL_CXX0X__ // See http://gcc.gnu.org/ml/libstdc++/2004-08/msg00167.html: in a // nutshell, we are partially implementing the resolution of DR 187, // when it's safe, i.e., the value_types are equal. @@ -102,6 +103,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION swap(*__a, *__b); } }; +#endif /** * @brief Swaps the contents of two iterators. @@ -117,16 +119,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline void iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) { - typedef typename iterator_traits<_ForwardIterator1>::value_type - _ValueType1; - typedef typename iterator_traits<_ForwardIterator2>::value_type - _ValueType2; - // concept requirements __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< _ForwardIterator1>) __glibcxx_function_requires(_Mutable_ForwardIteratorConcept< _ForwardIterator2>) + +#ifndef __GXX_EXPERIMENTAL_CXX0X__ + typedef typename iterator_traits<_ForwardIterator1>::value_type + _ValueType1; + typedef typename iterator_traits<_ForwardIterator2>::value_type + _ValueType2; + __glibcxx_function_requires(_ConvertibleConcept<_ValueType1, _ValueType2>) __glibcxx_function_requires(_ConvertibleConcept<_ValueType2, @@ -140,6 +144,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION && __are_same<_ValueType1&, _ReferenceType1>::__value && __are_same<_ValueType2&, _ReferenceType2>::__value>:: iter_swap(__a, __b); +#else + swap(*__a, *__b); +#endif } /** diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h index bec63ff03f9..dfa0b32a65e 100644 --- a/libstdc++-v3/include/bits/stl_bvector.h +++ b/libstdc++-v3/include/bits/stl_bvector.h @@ -1,7 +1,7 @@ // vector<bool> specialization -*- C++ -*- // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -// 2011 Free Software Foundation, Inc. +// 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -108,6 +108,32 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER { *_M_p ^= _M_mask; } }; +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + inline void + swap(_Bit_reference __x, _Bit_reference __y) noexcept + { + bool __tmp = __x; + __x = __y; + __y = __tmp; + } + + inline void + swap(_Bit_reference __x, bool& __y) noexcept + { + bool __tmp = __x; + __x = __y; + __y = __tmp; + } + + inline void + swap(bool& __x, _Bit_reference __y) noexcept + { + bool __tmp = __x; + __x = __y; + __y = __tmp; + } +#endif + struct _Bit_iterator_base : public std::iterator<std::random_access_iterator_tag, bool> { @@ -557,6 +583,14 @@ template<typename _Alloc> } #endif +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + vector(_InputIterator __first, _InputIterator __last, + const allocator_type& __a = allocator_type()) + : _Base(__a) + { _M_initialize_dispatch(__first, __last, __false_type()); } +#else template<typename _InputIterator> vector(_InputIterator __first, _InputIterator __last, const allocator_type& __a = allocator_type()) @@ -565,6 +599,7 @@ template<typename _Alloc> typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_initialize_dispatch(__first, __last, _Integral()); } +#endif ~vector() _GLIBCXX_NOEXCEPT { } @@ -610,6 +645,13 @@ template<typename _Alloc> assign(size_type __n, const bool& __x) { _M_fill_assign(__n, __x); } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + void + assign(_InputIterator __first, _InputIterator __last) + { _M_assign_dispatch(__first, __last, __false_type()); } +#else template<typename _InputIterator> void assign(_InputIterator __first, _InputIterator __last) @@ -617,6 +659,7 @@ template<typename _Alloc> typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_assign_dispatch(__first, __last, _Integral()); } +#endif #ifdef __GXX_EXPERIMENTAL_CXX0X__ void @@ -806,6 +849,14 @@ template<typename _Alloc> return begin() + __n; } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + void + insert(iterator __position, + _InputIterator __first, _InputIterator __last) + { _M_insert_dispatch(__position, __first, __last, __false_type()); } +#else template<typename _InputIterator> void insert(iterator __position, @@ -814,6 +865,7 @@ template<typename _Alloc> typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_insert_dispatch(__position, __first, __last, _Integral()); } +#endif void insert(iterator __position, size_type __n, const bool& __x) diff --git a/libstdc++-v3/include/bits/stl_deque.h b/libstdc++-v3/include/bits/stl_deque.h index b9249179356..d8904199a7c 100644 --- a/libstdc++-v3/include/bits/stl_deque.h +++ b/libstdc++-v3/include/bits/stl_deque.h @@ -1,7 +1,7 @@ // Deque implementation -*- C++ -*- // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -// 2011 Free Software Foundation, Inc. +// 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -888,6 +888,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER * input iterators are used, then this will do at most 2N calls to the * copy constructor, and logN memory reallocations. */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + deque(_InputIterator __first, _InputIterator __last, + const allocator_type& __a = allocator_type()) + : _Base(__a) + { _M_initialize_dispatch(__first, __last, __false_type()); } +#else template<typename _InputIterator> deque(_InputIterator __first, _InputIterator __last, const allocator_type& __a = allocator_type()) @@ -897,6 +905,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_initialize_dispatch(__first, __last, _Integral()); } +#endif /** * The dtor only erases the elements, and note that if the elements @@ -979,6 +988,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER * resulting %deque's size is the same as the number of elements * assigned. Old data may be lost. */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + void + assign(_InputIterator __first, _InputIterator __last) + { _M_assign_dispatch(__first, __last, __false_type()); } +#else template<typename _InputIterator> void assign(_InputIterator __first, _InputIterator __last) @@ -986,6 +1002,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_assign_dispatch(__first, __last, _Integral()); } +#endif #ifdef __GXX_EXPERIMENTAL_CXX0X__ /** @@ -1510,6 +1527,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER * [__first,__last) into the %deque before the location specified * by @a __position. This is known as <em>range insert</em>. */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + void + insert(iterator __position, _InputIterator __first, + _InputIterator __last) + { _M_insert_dispatch(__position, __first, __last, __false_type()); } +#else template<typename _InputIterator> void insert(iterator __position, _InputIterator __first, @@ -1519,6 +1544,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_insert_dispatch(__position, __first, __last, _Integral()); } +#endif /** * @brief Remove element at given position. diff --git a/libstdc++-v3/include/bits/stl_iterator_base_types.h b/libstdc++-v3/include/bits/stl_iterator_base_types.h index 9944dc44102..1f56c061df5 100644 --- a/libstdc++-v3/include/bits/stl_iterator_base_types.h +++ b/libstdc++-v3/include/bits/stl_iterator_base_types.h @@ -1,6 +1,7 @@ // Types used in iterator implementation -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, +// 2010, 2011, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -65,7 +66,7 @@ #include <bits/c++config.h> #ifdef __GXX_EXPERIMENTAL_CXX0X__ -# include <type_traits> // For _GLIBCXX_HAS_NESTED_TYPE +# include <type_traits> // For _GLIBCXX_HAS_NESTED_TYPE, is_convertible #endif namespace std _GLIBCXX_VISIBILITY(default) @@ -222,6 +223,14 @@ _GLIBCXX_HAS_NESTED_TYPE(iterator_category) { return __it.base(); } }; +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _InIter> + using _RequireInputIter = typename + enable_if<is_convertible<typename + iterator_traits<_InIter>::iterator_category, + input_iterator_tag>::value>::type; +#endif + _GLIBCXX_END_NAMESPACE_VERSION } // namespace diff --git a/libstdc++-v3/include/bits/stl_list.h b/libstdc++-v3/include/bits/stl_list.h index e422de88e60..1e760ede693 100644 --- a/libstdc++-v3/include/bits/stl_list.h +++ b/libstdc++-v3/include/bits/stl_list.h @@ -1,7 +1,7 @@ // List implementation -*- C++ -*- // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -// 2011 Free Software Foundation, Inc. +// 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -638,6 +638,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER * [@a __first,@a __last). This is linear in N (where N is * distance(@a __first,@a __last)). */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + list(_InputIterator __first, _InputIterator __last, + const allocator_type& __a = allocator_type()) + : _Base(_Node_alloc_type(__a)) + { _M_initialize_dispatch(__first, __last, __false_type()); } +#else template<typename _InputIterator> list(_InputIterator __first, _InputIterator __last, const allocator_type& __a = allocator_type()) @@ -647,6 +655,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_initialize_dispatch(__first, __last, _Integral()); } +#endif /** * No explicit dtor needed as the _Base dtor takes care of @@ -725,6 +734,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER * that the resulting %list's size is the same as the number of * elements assigned. Old data may be lost. */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + void + assign(_InputIterator __first, _InputIterator __last) + { _M_assign_dispatch(__first, __last, __false_type()); } +#else template<typename _InputIterator> void assign(_InputIterator __first, _InputIterator __last) @@ -733,6 +749,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_assign_dispatch(__first, __last, _Integral()); } +#endif #ifdef __GXX_EXPERIMENTAL_CXX0X__ /** @@ -1148,7 +1165,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER * This operation is linear in the number of elements inserted and * does not invalidate iterators and references. */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> +#else template<typename _InputIterator> +#endif void insert(iterator __position, _InputIterator __first, _InputIterator __last) diff --git a/libstdc++-v3/include/bits/stl_vector.h b/libstdc++-v3/include/bits/stl_vector.h index ec21807321d..239f8b9dd36 100644 --- a/libstdc++-v3/include/bits/stl_vector.h +++ b/libstdc++-v3/include/bits/stl_vector.h @@ -1,7 +1,7 @@ // Vector implementation -*- C++ -*- // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -// 2011 Free Software Foundation, Inc. +// 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -383,6 +383,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER * used, then this will do at most 2N calls to the copy * constructor, and logN memory reallocations. */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + vector(_InputIterator __first, _InputIterator __last, + const allocator_type& __a = allocator_type()) + : _Base(__a) + { _M_initialize_dispatch(__first, __last, __false_type()); } +#else template<typename _InputIterator> vector(_InputIterator __first, _InputIterator __last, const allocator_type& __a = allocator_type()) @@ -392,6 +400,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_initialize_dispatch(__first, __last, _Integral()); } +#endif /** * The dtor only erases the elements, and note that if the @@ -497,6 +506,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER * that the resulting %vector's size is the same as the number * of elements assigned. Old data may be lost. */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + void + assign(_InputIterator __first, _InputIterator __last) + { _M_assign_dispatch(__first, __last, __false_type()); } +#else template<typename _InputIterator> void assign(_InputIterator __first, _InputIterator __last) @@ -505,6 +521,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_assign_dispatch(__first, __last, _Integral()); } +#endif #ifdef __GXX_EXPERIMENTAL_CXX0X__ /** @@ -1035,6 +1052,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER * %vector and if it is frequently used the user should * consider using std::list. */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + void + insert(iterator __position, _InputIterator __first, + _InputIterator __last) + { _M_insert_dispatch(__position, __first, __last, __false_type()); } +#else template<typename _InputIterator> void insert(iterator __position, _InputIterator __first, @@ -1044,6 +1069,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_insert_dispatch(__position, __first, __last, _Integral()); } +#endif /** * @brief Remove element at given position. diff --git a/libstdc++-v3/include/c_global/cstdio b/libstdc++-v3/include/c_global/cstdio index 049704d83b9..e6484759d5b 100644 --- a/libstdc++-v3/include/c_global/cstdio +++ b/libstdc++-v3/include/c_global/cstdio @@ -1,7 +1,7 @@ // -*- C++ -*- forwarding header. // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, -// 2006, 2007, 2008, 2009, 2010 +// 2006, 2007, 2008, 2009, 2010, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -46,6 +46,10 @@ #ifndef _GLIBCXX_CSTDIO #define _GLIBCXX_CSTDIO 1 +#ifndef _GLIBCXX_HAVE_GETS +extern "C" char* gets (char* __s) __attribute__((deprecated)); +#endif + // Get rid of those macros defined in <stdio.h> in lieu of real functions. #undef clearerr #undef fclose @@ -67,7 +71,6 @@ #undef ftell #undef fwrite #undef getc -#undef getchar #undef gets #undef perror #undef printf diff --git a/libstdc++-v3/include/c_std/cstdio b/libstdc++-v3/include/c_std/cstdio index 510f599d876..d4f473252e9 100644 --- a/libstdc++-v3/include/c_std/cstdio +++ b/libstdc++-v3/include/c_std/cstdio @@ -1,7 +1,7 @@ // -*- C++ -*- forwarding header. // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, -// 2009, 2010 Free Software Foundation, Inc. +// 2009, 2010, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -45,6 +45,10 @@ #include <bits/c++config.h> #include <stdio.h> +#ifndef _GLIBCXX_HAVE_GETS +extern "C" char* gets (char* __s) __attribute__((deprecated)); +#endif + // Get rid of those macros defined in <stdio.h> in lieu of real functions. #undef clearerr #undef fclose diff --git a/libstdc++-v3/include/debug/deque b/libstdc++-v3/include/debug/deque index 07b332b0191..1ce416c180c 100644 --- a/libstdc++-v3/include/debug/deque +++ b/libstdc++-v3/include/debug/deque @@ -1,6 +1,7 @@ // Debugging deque implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, +// 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -88,7 +89,12 @@ namespace __debug : _Base(__n, __value, __a) { } #endif +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<class _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> +#else template<class _InputIterator> +#endif deque(_InputIterator __first, _InputIterator __last, const _Allocator& __a = _Allocator()) : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, @@ -128,6 +134,7 @@ namespace __debug { // NB: DR 1204. // NB: DR 675. + __glibcxx_check_self_move_assign(__x); clear(); swap(__x); return *this; @@ -142,7 +149,12 @@ namespace __debug } #endif +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<class _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> +#else template<class _InputIterator> +#endif void assign(_InputIterator __first, _InputIterator __last) { @@ -413,7 +425,12 @@ namespace __debug this->_M_invalidate_all(); } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<class _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> +#else template<class _InputIterator> +#endif void insert(iterator __position, _InputIterator __first, _InputIterator __last) diff --git a/libstdc++-v3/include/debug/formatter.h b/libstdc++-v3/include/debug/formatter.h index d22a173e3ff..8f36285ff17 100644 --- a/libstdc++-v3/include/debug/formatter.h +++ b/libstdc++-v3/include/debug/formatter.h @@ -1,6 +1,6 @@ // Debug-mode error formatting implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -109,7 +109,9 @@ namespace __gnu_debug __msg_valid_range2, // unordered sequence local iterators __msg_local_iter_compare_bad, - __msg_non_empty_range + __msg_non_empty_range, + // self move assign + __msg_self_move_assign }; class _Error_formatter diff --git a/libstdc++-v3/include/debug/forward_list b/libstdc++-v3/include/debug/forward_list index b74b38a02bc..1f887da432c 100644 --- a/libstdc++-v3/include/debug/forward_list +++ b/libstdc++-v3/include/debug/forward_list @@ -1,6 +1,6 @@ // <forward_list> -*- C++ -*- -// Copyright (C) 2010 Free Software Foundation, Inc. +// Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -91,8 +91,9 @@ namespace __debug : _Base(__n, __value, __al) { } - template<typename _InputIterator> - forward_list(_InputIterator __first, _InputIterator __last, + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + forward_list(_InputIterator __first, _InputIterator __last, const _Alloc& __al = _Alloc()) : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, __last)), @@ -130,6 +131,7 @@ namespace __debug { // NB: DR 1204. // NB: DR 675. + __glibcxx_check_self_move_assign(__list); clear(); swap(__list); return *this; @@ -143,8 +145,9 @@ namespace __debug return *this; } - template<typename _InputIterator> - void + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + void assign(_InputIterator __first, _InputIterator __last) { __glibcxx_check_valid_range(__first, __last); @@ -273,7 +276,8 @@ namespace __debug this); } - template<typename _InputIterator> + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> iterator insert_after(const_iterator __pos, _InputIterator __first, _InputIterator __last) diff --git a/libstdc++-v3/include/debug/list b/libstdc++-v3/include/debug/list index 3931a3d3b68..df2031dd603 100644 --- a/libstdc++-v3/include/debug/list +++ b/libstdc++-v3/include/debug/list @@ -1,6 +1,7 @@ // Debugging list implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, +// 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -89,14 +90,18 @@ namespace __debug : _Base(__n, __value, __a) { } #endif +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<class _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> +#else template<class _InputIterator> - list(_InputIterator __first, _InputIterator __last, - const _Allocator& __a = _Allocator()) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), - __gnu_debug::__base(__last), __a) - { } - +#endif + list(_InputIterator __first, _InputIterator __last, + const _Allocator& __a = _Allocator()) + : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, + __last)), + __gnu_debug::__base(__last), __a) + { } list(const list& __x) : _Base(__x) { } @@ -130,6 +135,7 @@ namespace __debug { // NB: DR 1204. // NB: DR 675. + __glibcxx_check_self_move_assign(__x); clear(); swap(__x); return *this; @@ -151,7 +157,12 @@ namespace __debug } #endif +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<class _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> +#else template<class _InputIterator> +#endif void assign(_InputIterator __first, _InputIterator __last) { @@ -405,7 +416,12 @@ namespace __debug _Base::insert(__position.base(), __n, __x); } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<class _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> +#else template<class _InputIterator> +#endif void insert(iterator __position, _InputIterator __first, _InputIterator __last) diff --git a/libstdc++-v3/include/debug/macros.h b/libstdc++-v3/include/debug/macros.h index 07d714d353c..aac56348f88 100644 --- a/libstdc++-v3/include/debug/macros.h +++ b/libstdc++-v3/include/debug/macros.h @@ -1,6 +1,6 @@ // Debugging support implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -310,6 +310,12 @@ _GLIBCXX_DEBUG_VERIFY(std::__is_heap(_First, _Last, _Pred), \ ._M_iterator(_Last, #_Last) \ ._M_string(#_Pred)) +// Verify that the container is not self move assigned +#define __glibcxx_check_self_move_assign(_Other) \ +_GLIBCXX_DEBUG_VERIFY(this != &_Other, \ + _M_message(__gnu_debug::__msg_self_move_assign) \ + ._M_sequence(*this, "this")) + #ifdef _GLIBCXX_DEBUG_PEDANTIC # define __glibcxx_check_string(_String) _GLIBCXX_DEBUG_ASSERT(_String != 0) # define __glibcxx_check_string_len(_String,_Len) \ diff --git a/libstdc++-v3/include/debug/map.h b/libstdc++-v3/include/debug/map.h index 9abfee867d0..34b83a5cee5 100644 --- a/libstdc++-v3/include/debug/map.h +++ b/libstdc++-v3/include/debug/map.h @@ -1,6 +1,6 @@ // Debugging map implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -120,6 +120,7 @@ namespace __debug { // NB: DR 1204. // NB: DR 675. + __glibcxx_check_self_move_assign(__x); clear(); swap(__x); return *this; diff --git a/libstdc++-v3/include/debug/multimap.h b/libstdc++-v3/include/debug/multimap.h index e43094f8b4d..9157fa3458a 100644 --- a/libstdc++-v3/include/debug/multimap.h +++ b/libstdc++-v3/include/debug/multimap.h @@ -1,6 +1,6 @@ // Debugging multimap implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -121,6 +121,7 @@ namespace __debug { // NB: DR 1204. // NB: DR 675. + __glibcxx_check_self_move_assign(__x); clear(); swap(__x); return *this; diff --git a/libstdc++-v3/include/debug/multiset.h b/libstdc++-v3/include/debug/multiset.h index 9f510000d4d..c7f38eabb40 100644 --- a/libstdc++-v3/include/debug/multiset.h +++ b/libstdc++-v3/include/debug/multiset.h @@ -1,6 +1,6 @@ // Debugging multiset implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -120,6 +120,7 @@ namespace __debug { // NB: DR 1204. // NB: DR 675. + __glibcxx_check_self_move_assign(__x); clear(); swap(__x); return *this; diff --git a/libstdc++-v3/include/debug/safe_iterator.h b/libstdc++-v3/include/debug/safe_iterator.h index e7cfe9c9d53..b02fa7ab8ff 100644 --- a/libstdc++-v3/include/debug/safe_iterator.h +++ b/libstdc++-v3/include/debug/safe_iterator.h @@ -1,6 +1,6 @@ // Safe iterator implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2009, 2010, 2011 +// Copyright (C) 2003, 2004, 2005, 2006, 2009, 2010, 2011, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -169,6 +169,24 @@ namespace __gnu_debug ._M_iterator(__x, "other")); } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + /** + * @brief Move construction. + * @post __x is singular and unattached + */ + _Safe_iterator(_Safe_iterator&& __x) : _M_current() + { + _GLIBCXX_DEBUG_VERIFY(!__x._M_singular() + || __x._M_current == _Iterator(), + _M_message(__msg_init_copy_singular) + ._M_iterator(*this, "this") + ._M_iterator(__x, "other")); + std::swap(_M_current, __x._M_current); + this->_M_attach(__x._M_sequence); + __x._M_detach(); + } +#endif + /** * @brief Converting constructor from a mutable iterator to a * constant iterator. @@ -208,6 +226,30 @@ namespace __gnu_debug return *this; } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + /** + * @brief Move assignment. + * @post __x is singular and unattached + */ + _Safe_iterator& + operator=(_Safe_iterator&& __x) + { + _GLIBCXX_DEBUG_VERIFY(this != &__x, + _M_message(__msg_self_move_assign) + ._M_iterator(*this, "this")); + _GLIBCXX_DEBUG_VERIFY(!__x._M_singular() + || __x._M_current == _Iterator(), + _M_message(__msg_copy_singular) + ._M_iterator(*this, "this") + ._M_iterator(__x, "other")); + _M_current = __x._M_current; + _M_attach(__x._M_sequence); + __x._M_detach(); + __x._M_current = _Iterator(); + return *this; + } +#endif + /** * @brief Iterator dereference. * @pre iterator is dereferenceable @@ -422,7 +464,9 @@ namespace __gnu_debug /// Is this iterator equal to the sequence's before_begin() iterator if /// any? bool _M_is_before_begin() const - { return _BeforeBeginHelper<_Sequence>::_M_Is(base(), _M_get_sequence()); } + { + return _BeforeBeginHelper<_Sequence>::_M_Is(base(), _M_get_sequence()); + } }; template<typename _IteratorL, typename _IteratorR, typename _Sequence> diff --git a/libstdc++-v3/include/debug/set.h b/libstdc++-v3/include/debug/set.h index 9846ec865f9..d6dc06f9ee2 100644 --- a/libstdc++-v3/include/debug/set.h +++ b/libstdc++-v3/include/debug/set.h @@ -1,6 +1,6 @@ // Debugging set implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -120,6 +120,7 @@ namespace __debug { // NB: DR 1204. // NB: DR 675. + __glibcxx_check_self_move_assign(__x); clear(); swap(__x); return *this; diff --git a/libstdc++-v3/include/debug/string b/libstdc++-v3/include/debug/string index 6350f6de5e5..954a7ddf684 100644 --- a/libstdc++-v3/include/debug/string +++ b/libstdc++-v3/include/debug/string @@ -155,6 +155,7 @@ namespace __gnu_debug basic_string& operator=(basic_string&& __str) { + __glibcxx_check_self_move_assign(__str); *static_cast<_Base*>(this) = std::move(__str); this->_M_invalidate_all(); return *this; diff --git a/libstdc++-v3/include/debug/unordered_map b/libstdc++-v3/include/debug/unordered_map index 37ca3cee7cc..222bccf969f 100644 --- a/libstdc++-v3/include/debug/unordered_map +++ b/libstdc++-v3/include/debug/unordered_map @@ -1,6 +1,6 @@ // Debugging unordered_map/unordered_multimap implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -128,6 +128,7 @@ namespace __debug { // NB: DR 1204. // NB: DR 675. + __glibcxx_check_self_move_assign(__x); clear(); swap(__x); return *this; @@ -542,6 +543,7 @@ namespace __debug { // NB: DR 1204. // NB: DR 675. + __glibcxx_check_self_move_assign(__x); clear(); swap(__x); return *this; diff --git a/libstdc++-v3/include/debug/unordered_set b/libstdc++-v3/include/debug/unordered_set index 7323184d438..7996763829f 100644 --- a/libstdc++-v3/include/debug/unordered_set +++ b/libstdc++-v3/include/debug/unordered_set @@ -1,6 +1,6 @@ // Debugging unordered_set/unordered_multiset implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -128,6 +128,7 @@ namespace __debug { // NB: DR 1204. // NB: DR 675. + __glibcxx_check_self_move_assign(__x); clear(); swap(__x); return *this; @@ -537,6 +538,7 @@ namespace __debug { // NB: DR 1204. // NB: DR 675. + __glibcxx_check_self_move_assign(__x); clear(); swap(__x); return *this; diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector index 5ee0fabc32a..9e0f8439a12 100644 --- a/libstdc++-v3/include/debug/vector +++ b/libstdc++-v3/include/debug/vector @@ -1,6 +1,7 @@ // Debugging vector implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, +// 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -95,7 +96,12 @@ namespace __debug : _Base(__n, __value, __a), _M_guaranteed_capacity(__n) { } #endif +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<class _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> +#else template<class _InputIterator> +#endif vector(_InputIterator __first, _InputIterator __last, const _Allocator& __a = _Allocator()) : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, @@ -152,6 +158,7 @@ namespace __debug vector& operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move()) { + __glibcxx_check_self_move_assign(__x); _Base::operator=(std::move(__x)); this->_M_invalidate_all(); _M_update_guaranteed_capacity(); @@ -170,7 +177,12 @@ namespace __debug } #endif +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> +#else template<typename _InputIterator> +#endif void assign(_InputIterator __first, _InputIterator __last) { @@ -476,7 +488,12 @@ namespace __debug _M_update_guaranteed_capacity(); } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<class _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> +#else template<class _InputIterator> +#endif void insert(iterator __position, _InputIterator __first, _InputIterator __last) diff --git a/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp b/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp index 8196fc9e1c1..a6527698072 100644 --- a/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp +++ b/libstdc++-v3/include/ext/pb_ds/assoc_container.hpp @@ -57,7 +57,7 @@ namespace __gnu_pbds */ /** - * @defgroup hash-based + * @defgroup hash-based Hash-Based * @ingroup containers-pbds * @{ */ @@ -521,7 +521,7 @@ namespace __gnu_pbds /** - * @defgroup branch-based + * @defgroup branch-based Branch-Based * @ingroup containers-pbds * @{ */ @@ -617,7 +617,7 @@ namespace __gnu_pbds * @tparam Cmp_Fn Comparison functor. * @tparam Tag Instantiating data structure type, * see container_tag. - * @tparam Node_Update Updates nodes, + * @tparam Node_Update Updates tree internal-nodes, * restores invariants when invalidated. * XXX See design::tree-based-containers::node invariants. * @tparam _Alloc Allocator type. @@ -708,7 +708,7 @@ namespace __gnu_pbds * @tparam _ATraits Element access traits. * @tparam Tag Instantiating data structure type, * see container_tag. - * @tparam Node_Update Updates trie nodes, + * @tparam Node_Update Updates trie internal-nodes, * restores invariants when invalidated. * XXX See design::tree-based-containers::node invariants. * @tparam _Alloc Allocator type. @@ -786,7 +786,7 @@ namespace __gnu_pbds /** - * @defgroup list-based + * @defgroup list-based List-Based * @ingroup containers-pbds * @{ */ diff --git a/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp b/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp index 825699f4685..0cbf45c45d0 100644 --- a/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp +++ b/libstdc++-v3/include/ext/pb_ds/priority_queue.hpp @@ -49,7 +49,7 @@ namespace __gnu_pbds { /** - * @defgroup heap-based + * @defgroup heap-based Heap-Based * @ingroup containers-pbds * @{ */ diff --git a/libstdc++-v3/include/ext/vstring.h b/libstdc++-v3/include/ext/vstring.h index 8c4120a3be2..48e3d461eef 100644 --- a/libstdc++-v3/include/ext/vstring.h +++ b/libstdc++-v3/include/ext/vstring.h @@ -1,6 +1,6 @@ // Versatile string -*- C++ -*- -// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 +// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -238,7 +238,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __end End of range. * @param __a Allocator to use (default is default allocator). */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<class _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> +#else template<class _InputIterator> +#endif __versa_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a = _Alloc()) : __vstring_base(__beg, __end, __a) { } @@ -762,7 +767,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * * Appends characters in the range [first,last) to this string. */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<class _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> +#else template<class _InputIterator> +#endif __versa_string& append(_InputIterator __first, _InputIterator __last) { return this->replace(_M_iend(), _M_iend(), __first, __last); } @@ -886,7 +896,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * Sets value of string to characters in the range * [first,last). */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<class _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> +#else template<class _InputIterator> +#endif __versa_string& assign(_InputIterator __first, _InputIterator __last) { return this->replace(_M_ibegin(), _M_iend(), __first, __last); } @@ -931,7 +946,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * thrown. The value of the string doesn't change if an error * is thrown. */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<class _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> +#else template<class _InputIterator> +#endif void insert(iterator __p, _InputIterator __beg, _InputIterator __end) { this->replace(__p, __p, __beg, __end); } @@ -1367,6 +1387,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * of result exceeds max_size(), length_error is thrown. The * value of the string doesn't change if an error is thrown. */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<class _InputIterator, + typename = std::_RequireInputIter<_InputIterator>> + __versa_string& + replace(iterator __i1, iterator __i2, + _InputIterator __k1, _InputIterator __k2) + { + _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2 + && __i2 <= _M_iend()); + __glibcxx_requires_valid_range(__k1, __k2); + return this->_M_replace_dispatch(__i1, __i2, __k1, __k2, + std::__false_type()); + } +#else template<class _InputIterator> __versa_string& replace(iterator __i1, iterator __i2, @@ -1378,6 +1412,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef typename std::__is_integer<_InputIterator>::__type _Integral; return this->_M_replace_dispatch(__i1, __i2, __k1, __k2, _Integral()); } +#endif // Specializations for the common case of pointer and iterator: // useful to avoid the overhead of temporary buffering in _M_replace. diff --git a/libstdc++-v3/include/profile/base.h b/libstdc++-v3/include/profile/base.h index ef17443b37e..fd3e431df08 100644 --- a/libstdc++-v3/include/profile/base.h +++ b/libstdc++-v3/include/profile/base.h @@ -3,30 +3,23 @@ // Copyright (C) 2009, 2010 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 2, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this library; see the file COPYING. If not, write to -// the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -// MA 02111-1307, USA. - -// As a special exception, you may use this file as part of a free -// software library without restriction. Specifically, if other files -// instantiate templates or use macros or inline functions from this -// file, or you compile this file and link it with other files to -// produce an executable, this file does not by itself cause the -// resulting executable to be covered by the GNU General Public -// License. This exception does not however invalidate any other -// reasons why the executable file might be covered by the GNU General -// Public License. +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/base.h * @brief Sequential helper functions. diff --git a/libstdc++-v3/include/profile/impl/profiler.h b/libstdc++-v3/include/profile/impl/profiler.h index ab9cd903030..49785bbee8f 100644 --- a/libstdc++-v3/include/profile/impl/profiler.h +++ b/libstdc++-v3/include/profile/impl/profiler.h @@ -3,30 +3,23 @@ // Copyright (C) 2009, 2010 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 2, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this library; see the file COPYING. If not, write to -// the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -// MA 02111-1307, USA. +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. -// As a special exception, you may use this file as part of a free -// software library without restriction. Specifically, if other files -// instantiate templates or use macros or inline functions from this -// file, or you compile this file and link it with other files to -// produce an executable, this file does not by itself cause the -// resulting executable to be covered by the GNU General Public -// License. This exception does not however invalidate any other -// reasons why the executable file might be covered by the GNU General -// Public License. +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/impl/profiler.h * @brief Interface of the profiling runtime library. diff --git a/libstdc++-v3/include/profile/impl/profiler_algos.h b/libstdc++-v3/include/profile/impl/profiler_algos.h index d4de43e9ee0..977afaa800c 100644 --- a/libstdc++-v3/include/profile/impl/profiler_algos.h +++ b/libstdc++-v3/include/profile/impl/profiler_algos.h @@ -3,30 +3,23 @@ // Copyright (C) 2010 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 2, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this library; see the file COPYING. If not, write to -// the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -// MA 02111-1307, USA. +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. -// As a special exception, you may use this file as part of a free -// software library without restriction. Specifically, if other files -// instantiate templates or use macros or inline functions from this -// file, or you compile this file and link it with other files to -// produce an executable, this file does not by itself cause the -// resulting executable to be covered by the GNU General Public -// License. This exception does not however invalidate any other -// reasons why the executable file might be covered by the GNU General -// Public License. +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/impl/profiler_algos.h * @brief Algorithms used by the profile extension. diff --git a/libstdc++-v3/include/profile/impl/profiler_container_size.h b/libstdc++-v3/include/profile/impl/profiler_container_size.h index 12cee549695..26b2c72c2e5 100644 --- a/libstdc++-v3/include/profile/impl/profiler_container_size.h +++ b/libstdc++-v3/include/profile/impl/profiler_container_size.h @@ -3,30 +3,23 @@ // Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 2, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this library; see the file COPYING. If not, write to -// the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -// MA 02111-1307, USA. - -// As a special exception, you may use this file as part of a free -// software library without restriction. Specifically, if other files -// instantiate templates or use macros or inline functions from this -// file, or you compile this file and link it with other files to -// produce an executable, this file does not by itself cause the -// resulting executable to be covered by the GNU General Public -// License. This exception does not however invalidate any other -// reasons why the executable file might be covered by the GNU General -// Public License. +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/impl/profiler_container_size.h * @brief Diagnostics for container sizes. diff --git a/libstdc++-v3/include/profile/impl/profiler_hash_func.h b/libstdc++-v3/include/profile/impl/profiler_hash_func.h index 9f6c6416992..7ff11cd03b9 100644 --- a/libstdc++-v3/include/profile/impl/profiler_hash_func.h +++ b/libstdc++-v3/include/profile/impl/profiler_hash_func.h @@ -3,30 +3,23 @@ // Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 2, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this library; see the file COPYING. If not, write to -// the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -// MA 02111-1307, USA. - -// As a special exception, you may use this file as part of a free -// software library without restriction. Specifically, if other files -// instantiate templates or use macros or inline functions from this -// file, or you compile this file and link it with other files to -// produce an executable, this file does not by itself cause the -// resulting executable to be covered by the GNU General Public -// License. This exception does not however invalidate any other -// reasons why the executable file might be covered by the GNU General -// Public License. +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/impl/profiler_hash_func.h * @brief Data structures to represent profiling traces. diff --git a/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h b/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h index 9d5cbc793ef..8557a607316 100644 --- a/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h +++ b/libstdc++-v3/include/profile/impl/profiler_hashtable_size.h @@ -3,30 +3,23 @@ // Copyright (C) 2009, 2010 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 2, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this library; see the file COPYING. If not, write to -// the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -// MA 02111-1307, USA. - -// As a special exception, you may use this file as part of a free -// software library without restriction. Specifically, if other files -// instantiate templates or use macros or inline functions from this -// file, or you compile this file and link it with other files to -// produce an executable, this file does not by itself cause the -// resulting executable to be covered by the GNU General Public -// License. This exception does not however invalidate any other -// reasons why the executable file might be covered by the GNU General -// Public License. +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/impl/profiler_hashtable_size.h * @brief Collection of hashtable size traces. diff --git a/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h b/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h index 299a17d5af6..2195ccf90d9 100644 --- a/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h +++ b/libstdc++-v3/include/profile/impl/profiler_list_to_slist.h @@ -3,30 +3,23 @@ // Copyright (C) 2009, 2010 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 2, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this library; see the file COPYING. If not, write to -// the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -// MA 02111-1307, USA. - -// As a special exception, you may use this file as part of a free -// software library without restriction. Specifically, if other files -// instantiate templates or use macros or inline functions from this -// file, or you compile this file and link it with other files to -// produce an executable, this file does not by itself cause the -// resulting executable to be covered by the GNU General Public -// License. This exception does not however invalidate any other -// reasons why the executable file might be covered by the GNU General -// Public License. +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/impl/profiler_list_to_slist.h * @brief Diagnostics for list to slist. diff --git a/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h b/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h index df03267bd44..b3840a747cf 100644 --- a/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h +++ b/libstdc++-v3/include/profile/impl/profiler_list_to_vector.h @@ -3,30 +3,23 @@ // Copyright (C) 2009, 2010 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 2, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this library; see the file COPYING. If not, write to -// the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -// MA 02111-1307, USA. - -// As a special exception, you may use this file as part of a free -// software library without restriction. Specifically, if other files -// instantiate templates or use macros or inline functions from this -// file, or you compile this file and link it with other files to -// produce an executable, this file does not by itself cause the -// resulting executable to be covered by the GNU General Public -// License. This exception does not however invalidate any other -// reasons why the executable file might be covered by the GNU General -// Public License. +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/impl/profiler_list_to_vector.h * @brief diagnostics for list to vector. diff --git a/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h b/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h index cc7c849a422..e232effe840 100644 --- a/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h +++ b/libstdc++-v3/include/profile/impl/profiler_map_to_unordered_map.h @@ -3,30 +3,23 @@ // Copyright (C) 2009, 2010 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 2, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this library; see the file COPYING. If not, write to -// the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -// MA 02111-1307, USA. - -// As a special exception, you may use this file as part of a free -// software library without restriction. Specifically, if other files -// instantiate templates or use macros or inline functions from this -// file, or you compile this file and link it with other files to -// produce an executable, this file does not by itself cause the -// resulting executable to be covered by the GNU General Public -// License. This exception does not however invalidate any other -// reasons why the executable file might be covered by the GNU General -// Public License. +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/impl/profiler_map_to_unordered_map.h * @brief Diagnostics for map to unordered_map. diff --git a/libstdc++-v3/include/profile/impl/profiler_node.h b/libstdc++-v3/include/profile/impl/profiler_node.h index dfaff8c6b6f..efdfe146787 100644 --- a/libstdc++-v3/include/profile/impl/profiler_node.h +++ b/libstdc++-v3/include/profile/impl/profiler_node.h @@ -3,30 +3,23 @@ // Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 2, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this library; see the file COPYING. If not, write to -// the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -// MA 02111-1307, USA. - -// As a special exception, you may use this file as part of a free -// software library without restriction. Specifically, if other files -// instantiate templates or use macros or inline functions from this -// file, or you compile this file and link it with other files to -// produce an executable, this file does not by itself cause the -// resulting executable to be covered by the GNU General Public -// License. This exception does not however invalidate any other -// reasons why the executable file might be covered by the GNU General -// Public License. +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/impl/profiler_node.h * @brief Data structures to represent a single profiling event. diff --git a/libstdc++-v3/include/profile/impl/profiler_state.h b/libstdc++-v3/include/profile/impl/profiler_state.h index d48801ab561..b0f5f8b275b 100644 --- a/libstdc++-v3/include/profile/impl/profiler_state.h +++ b/libstdc++-v3/include/profile/impl/profiler_state.h @@ -3,30 +3,23 @@ // Copyright (C) 2009, 2010, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 2, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this library; see the file COPYING. If not, write to -// the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -// MA 02111-1307, USA. +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. -// As a special exception, you may use this file as part of a free -// software library without restriction. Specifically, if other files -// instantiate templates or use macros or inline functions from this -// file, or you compile this file and link it with other files to -// produce an executable, this file does not by itself cause the -// resulting executable to be covered by the GNU General Public -// License. This exception does not however invalidate any other -// reasons why the executable file might be covered by the GNU General -// Public License. +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/impl/profiler_state.h * @brief Global profiler state. diff --git a/libstdc++-v3/include/profile/impl/profiler_trace.h b/libstdc++-v3/include/profile/impl/profiler_trace.h index 1e0054208ca..dadc5cac5e7 100644 --- a/libstdc++-v3/include/profile/impl/profiler_trace.h +++ b/libstdc++-v3/include/profile/impl/profiler_trace.h @@ -3,30 +3,23 @@ // Copyright (C) 2009, 2010 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 2, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this library; see the file COPYING. If not, write to -// the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -// MA 02111-1307, USA. - -// As a special exception, you may use this file as part of a free -// software library without restriction. Specifically, if other files -// instantiate templates or use macros or inline functions from this -// file, or you compile this file and link it with other files to -// produce an executable, this file does not by itself cause the -// resulting executable to be covered by the GNU General Public -// License. This exception does not however invalidate any other -// reasons why the executable file might be covered by the GNU General -// Public License. +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/impl/profiler_trace.h * @brief Data structures to represent profiling traces. diff --git a/libstdc++-v3/include/profile/impl/profiler_vector_size.h b/libstdc++-v3/include/profile/impl/profiler_vector_size.h index 0af384f4ecb..604984577e4 100644 --- a/libstdc++-v3/include/profile/impl/profiler_vector_size.h +++ b/libstdc++-v3/include/profile/impl/profiler_vector_size.h @@ -3,30 +3,23 @@ // Copyright (C) 2009, 2010 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 2, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this library; see the file COPYING. If not, write to -// the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -// MA 02111-1307, USA. - -// As a special exception, you may use this file as part of a free -// software library without restriction. Specifically, if other files -// instantiate templates or use macros or inline functions from this -// file, or you compile this file and link it with other files to -// produce an executable, this file does not by itself cause the -// resulting executable to be covered by the GNU General Public -// License. This exception does not however invalidate any other -// reasons why the executable file might be covered by the GNU General -// Public License. +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/impl/profiler_vector_size.h * @brief Collection of vector size traces. diff --git a/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h b/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h index 91963139bd8..7387ab6145d 100644 --- a/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h +++ b/libstdc++-v3/include/profile/impl/profiler_vector_to_list.h @@ -3,30 +3,23 @@ // Copyright (C) 2009, 2010 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the terms -// of the GNU General Public License as published by the Free Software -// Foundation; either version 2, or (at your option) any later -// version. - -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this library; see the file COPYING. If not, write to -// the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -// MA 02111-1307, USA. - -// As a special exception, you may use this file as part of a free -// software library without restriction. Specifically, if other files -// instantiate templates or use macros or inline functions from this -// file, or you compile this file and link it with other files to -// produce an executable, this file does not by itself cause the -// resulting executable to be covered by the GNU General Public -// License. This exception does not however invalidate any other -// reasons why the executable file might be covered by the GNU General -// Public License. +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/impl/profiler_vector_to_list.h * @brief diagnostics for vector to list. diff --git a/libstdc++-v3/include/profile/map b/libstdc++-v3/include/profile/map index e396b852398..7806b992b59 100644 --- a/libstdc++-v3/include/profile/map +++ b/libstdc++-v3/include/profile/map @@ -5,27 +5,21 @@ // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) +// Free Software Foundation; either version 3, or (at your option) // any later version. - +// // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/map * This file is a GNU profile extension to the Standard C++ Library. diff --git a/libstdc++-v3/include/profile/map.h b/libstdc++-v3/include/profile/map.h index eb5c5d90d9c..200da370d73 100644 --- a/libstdc++-v3/include/profile/map.h +++ b/libstdc++-v3/include/profile/map.h @@ -5,27 +5,21 @@ // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) +// Free Software Foundation; either version 3, or (at your option) // any later version. - +// // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + // You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/map.h * This file is a GNU profile extension to the Standard C++ Library. diff --git a/libstdc++-v3/include/profile/set b/libstdc++-v3/include/profile/set index 11603a84858..55ffe74dee5 100644 --- a/libstdc++-v3/include/profile/set +++ b/libstdc++-v3/include/profile/set @@ -5,27 +5,21 @@ // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) +// Free Software Foundation; either version 3, or (at your option) // any later version. - +// // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/set * This file is a GNU profile extension to the Standard C++ Library. diff --git a/libstdc++-v3/include/profile/unordered_map b/libstdc++-v3/include/profile/unordered_map index 1d0f0d53064..36f34e0a105 100644 --- a/libstdc++-v3/include/profile/unordered_map +++ b/libstdc++-v3/include/profile/unordered_map @@ -5,27 +5,21 @@ // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) +// Free Software Foundation; either version 3, or (at your option) // any later version. - +// // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + // You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/unordered_map * This file is a GNU profile extension to the Standard C++ Library. diff --git a/libstdc++-v3/include/profile/unordered_set b/libstdc++-v3/include/profile/unordered_set index 7bb10dc45c0..6385605f8ee 100644 --- a/libstdc++-v3/include/profile/unordered_set +++ b/libstdc++-v3/include/profile/unordered_set @@ -5,27 +5,21 @@ // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) +// Free Software Foundation; either version 3, or (at your option) // any later version. - +// // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + // You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/unordered_set * This file is a GNU profile extension to the Standard C++ Library. diff --git a/libstdc++-v3/include/profile/vector b/libstdc++-v3/include/profile/vector index 0526c5aabb7..8a3e681b847 100644 --- a/libstdc++-v3/include/profile/vector +++ b/libstdc++-v3/include/profile/vector @@ -5,27 +5,21 @@ // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) +// Free Software Foundation; either version 3, or (at your option) // any later version. - +// // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + // You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. /** @file profile/vector * This file is a GNU profile extension to the Standard C++ Library. diff --git a/libstdc++-v3/include/std/fstream b/libstdc++-v3/include/std/fstream index 65de272811f..b4a86a1a19f 100644 --- a/libstdc++-v3/include/std/fstream +++ b/libstdc++-v3/include/std/fstream @@ -232,7 +232,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * * If a file is already open, this function immediately fails. * Otherwise it tries to open the file named @a __s using the flags - * given in @a mode. + * given in @a __mode. * * Table 92, adapted here, gives the relation between openmode * combinations and the equivalent fopen() flags. @@ -619,8 +619,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __s Null terminated string specifying the filename. * @param __mode Open file in specified mode (see std::ios_base). * - * @c ios_base::out|ios_base::trunc is automatically included in - * @p __mode. + * @c ios_base::out | @c ios_base::trunc is automatically included in + * @a __mode. * * Tip: When using std::string to hold the filename, you must use * .c_str() before passing it to this constructor. @@ -640,7 +640,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __s std::string specifying the filename. * @param __mode Open file in specified mode (see std::ios_base). * - * @c ios_base::out|ios_base::trunc is automatically included in + * @c ios_base::out | @c ios_base::trunc is automatically included in * @a __mode. */ explicit diff --git a/libstdc++-v3/include/std/limits b/libstdc++-v3/include/std/limits index ea37d9d20cd..e7a6e8fa934 100644 --- a/libstdc++-v3/include/std/limits +++ b/libstdc++-v3/include/std/limits @@ -306,47 +306,47 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /** The minimum finite value, or for floating types with denormalization, the minimum positive normalized value. */ static _GLIBCXX_CONSTEXPR _Tp - min() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } + min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } /** The maximum finite value. */ static _GLIBCXX_CONSTEXPR _Tp - max() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } + max() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } #ifdef __GXX_EXPERIMENTAL_CXX0X__ /** A finite value x such that there is no other finite value y * where y < x. */ static constexpr _Tp - lowest() noexcept { return static_cast<_Tp>(0); } + lowest() noexcept { return _Tp(); } #endif /** The @e machine @e epsilon: the difference between 1 and the least value greater than 1 that is representable. */ static _GLIBCXX_CONSTEXPR _Tp - epsilon() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } + epsilon() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } /** The maximum rounding error measurement (see LIA-1). */ static _GLIBCXX_CONSTEXPR _Tp - round_error() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } + round_error() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } /** The representation of positive infinity, if @c has_infinity. */ static _GLIBCXX_CONSTEXPR _Tp - infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } + infinity() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } /** The representation of a quiet <em>Not a Number</em>, if @c has_quiet_NaN. */ static _GLIBCXX_CONSTEXPR _Tp - quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } /** The representation of a signaling <em>Not a Number</em>, if @c has_signaling_NaN. */ static _GLIBCXX_CONSTEXPR _Tp - signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } + signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } /** The minimum positive denormalized value. For types where @c has_denorm is false, this is the minimum positive normalized value. */ static _GLIBCXX_CONSTEXPR _Tp - denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<_Tp>(0); } + denorm_min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); } }; #ifdef __GXX_EXPERIMENTAL_CXX0X__ diff --git a/libstdc++-v3/include/std/ratio b/libstdc++-v3/include/std/ratio index a9cbfe246e3..1fd1f1600ef 100644 --- a/libstdc++-v3/include/std/ratio +++ b/libstdc++-v3/include/std/ratio @@ -63,9 +63,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { }; template<intmax_t _Pn, intmax_t _Qn> - struct __static_gcd; - - template<intmax_t _Pn, intmax_t _Qn> struct __static_gcd : __static_gcd<_Qn, (_Pn % _Qn)> { }; diff --git a/libstdc++-v3/include/tr2/type_traits b/libstdc++-v3/include/tr2/type_traits index 9c301b30a01..eb8c012d589 100644 --- a/libstdc++-v3/include/tr2/type_traits +++ b/libstdc++-v3/include/tr2/type_traits @@ -1,6 +1,6 @@ // TR2 <type_traits> -*- C++ -*- -// Copyright (C) 2011 Free Software Foundation, Inc. +// Copyright (C) 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -53,60 +53,48 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * Simple typelist. Compile-time list of types. */ template<typename... _Elements> - struct typelist; + struct __reflection_typelist; /// Specialization for an empty typelist. template<> - struct typelist<> + struct __reflection_typelist<> { - typedef std::true_type empty; + typedef std::true_type empty; }; /// Partial specialization. template<typename _First, typename... _Rest> - struct typelist<_First, _Rest...> + struct __reflection_typelist<_First, _Rest...> { - typedef std::false_type empty; + typedef std::false_type empty; struct first { - typedef _First type; + typedef _First type; }; struct rest { - typedef typelist<_Rest...> type; + typedef __reflection_typelist<_Rest...> type; }; }; /// Sequence abstraction metafunctions for manipulating a typelist. - /// Return the first type in a typelist. - template<typename _Tp> - struct first : public _Tp::first { }; - - /// Return the typelist minus the first type. - template<typename _Tp> - struct rest : public _Tp::rest { }; - - /// Query to see if a typelist is empty. - template<typename _Tp> - struct empty : public _Tp::empty { }; - /// Enumerate all the base classes of a class. Form of a typelist. template<typename _Tp> struct bases { - typedef typelist<__bases(_Tp)...> type; + typedef __reflection_typelist<__bases(_Tp)...> type; }; /// Enumerate all the direct base classes of a class. Form of a typelist. template<typename _Tp> struct direct_bases { - typedef typelist<__direct_bases(_Tp)...> type; + typedef __reflection_typelist<__direct_bases(_Tp)...> type; }; /// @} group metaprogramming diff --git a/libstdc++-v3/libsupc++/Makefile.in b/libstdc++-v3/libsupc++/Makefile.in index 4d4aeb71d0f..ee65762bdcb 100644 --- a/libstdc++-v3/libsupc++/Makefile.in +++ b/libstdc++-v3/libsupc++/Makefile.in @@ -322,6 +322,8 @@ PWD_COMMAND = $${PWDCMD-pwd} STAMP = echo timestamp > toolexecdir = $(glibcxx_toolexecdir) toolexeclibdir = $(glibcxx_toolexeclibdir) +@ENABLE_WERROR_FALSE@WERROR_FLAG = +@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR) # These bits are all figured out from configure. Look in acinclude.m4 # or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS. @@ -329,7 +331,7 @@ CONFIG_CXXFLAGS = \ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@ WARN_CXXFLAGS = \ - $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once -Wabi + $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once # -I/-D flags to pass when compiling. diff --git a/libstdc++-v3/po/Makefile.in b/libstdc++-v3/po/Makefile.in index 2fc769fdcf5..4392d89d118 100644 --- a/libstdc++-v3/po/Makefile.in +++ b/libstdc++-v3/po/Makefile.in @@ -262,6 +262,8 @@ PWD_COMMAND = $${PWDCMD-pwd} STAMP = echo timestamp > toolexecdir = $(glibcxx_toolexecdir) toolexeclibdir = $(glibcxx_toolexeclibdir) +@ENABLE_WERROR_FALSE@WERROR_FLAG = +@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR) # These bits are all figured out from configure. Look in acinclude.m4 # or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS. @@ -269,7 +271,7 @@ CONFIG_CXXFLAGS = \ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@ WARN_CXXFLAGS = \ - $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once -Wabi + $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once # -I/-D flags to pass when compiling. diff --git a/libstdc++-v3/python/Makefile.am b/libstdc++-v3/python/Makefile.am index 49d8f86ac23..3626d7a1edb 100644 --- a/libstdc++-v3/python/Makefile.am +++ b/libstdc++-v3/python/Makefile.am @@ -8,18 +8,17 @@ ## This file is part of the GNU ISO C++ Library. This library is free ## software; you can redistribute it and/or modify it under the ## terms of the GNU General Public License as published by the -## Free Software Foundation; either version 2, or (at your option) +## Free Software Foundation; either version 3, or (at your option) ## any later version. - +## ## This library is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. - +## ## You should have received a copy of the GNU General Public License along -## with this library; see the file COPYING. If not, write to the Free -## Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -## USA. +## with this library; see the file COPYING3. If not see +## <http://www.gnu.org/licenses/>. include $(top_srcdir)/fragment.am diff --git a/libstdc++-v3/python/Makefile.in b/libstdc++-v3/python/Makefile.in index 7dde04f7766..f83fac87a09 100644 --- a/libstdc++-v3/python/Makefile.in +++ b/libstdc++-v3/python/Makefile.in @@ -286,6 +286,8 @@ PWD_COMMAND = $${PWDCMD-pwd} STAMP = echo timestamp > toolexecdir = $(glibcxx_toolexecdir) toolexeclibdir = $(glibcxx_toolexeclibdir) +@ENABLE_WERROR_FALSE@WERROR_FLAG = +@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR) # These bits are all figured out from configure. Look in acinclude.m4 # or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS. @@ -293,7 +295,7 @@ CONFIG_CXXFLAGS = \ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@ WARN_CXXFLAGS = \ - $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once -Wabi + $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once # -I/-D flags to pass when compiling. diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am index 2cd27749fa6..eb80bfecdd7 100644 --- a/libstdc++-v3/src/Makefile.am +++ b/libstdc++-v3/src/Makefile.am @@ -102,34 +102,29 @@ CXXLINK = $(LIBTOOL) --tag CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ if ENABLE_SYMVERS libstdc++-symbols.ver: ${glibcxx_srcdir}/$(SYMVER_FILE) \ $(port_specific_symbol_files) - cp ${glibcxx_srcdir}/$(SYMVER_FILE) ./libstdc++-symbols.ver - chmod +w ./libstdc++-symbols.ver + cp ${glibcxx_srcdir}/$(SYMVER_FILE) $@.tmp + chmod +w $@.tmp if test "x$(port_specific_symbol_files)" != x; then \ if grep '^# Appended to version file.' \ $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \ - cat $(port_specific_symbol_files) >> $@; \ + cat $(port_specific_symbol_files) >> $@.tmp; \ else \ - sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \ - sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \ - cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \ + sed -n '1,/DO NOT DELETE/p' $@.tmp > tmp.top; \ + sed -n '/DO NOT DELETE/,$$p' $@.tmp > tmp.bottom; \ + cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@.tmp; \ rm tmp.top tmp.bottom; \ fi; \ fi + $(EGREP) -v '^[ ]*#(#| |$$)' $@.tmp | \ + $(COMPILE) -E -P -include config.h - > $@ || (rm -f $@ ; exit 1) + rm -f $@.tmp CLEANFILES = libstdc++-symbols.ver if ENABLE_SYMVERS_GNU -if ENABLE_SYMVERS_SOL2 -version_arg = -Wl,--version-script,libstdc++-symbols.ver-sol2 -version_dep = libstdc++-symbols.ver-sol2 -libstdc++-symbols.ver-sol2 : libstdc++-symbols.ver - sed -e '/^#ifdef HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT/,/^#endif/d' $< \ - > $@ || (rm -f $@ ; exit 1) -else version_arg = -Wl,--version-script=libstdc++-symbols.ver version_dep = libstdc++-symbols.ver endif -endif if ENABLE_SYMVERS_GNU_NAMESPACE version_arg = -Wl,--version-script=libstdc++-symbols.ver version_dep = libstdc++-symbols.ver diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in index 9f5a18f260e..34c0a3156ed 100644 --- a/libstdc++-v3/src/Makefile.in +++ b/libstdc++-v3/src/Makefile.in @@ -313,6 +313,8 @@ PWD_COMMAND = $${PWDCMD-pwd} STAMP = echo timestamp > toolexecdir = $(glibcxx_toolexecdir) toolexeclibdir = $(glibcxx_toolexeclibdir) +@ENABLE_WERROR_FALSE@WERROR_FLAG = +@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR) # These bits are all figured out from configure. Look in acinclude.m4 # or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS. @@ -320,7 +322,7 @@ CONFIG_CXXFLAGS = \ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@ WARN_CXXFLAGS = \ - $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once -Wabi + $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once # -I/-D flags to pass when compiling. @@ -397,14 +399,12 @@ CXXLINK = $(LIBTOOL) --tag CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ @ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,-exported_symbols_list,libstdc++-symbols.explist @ENABLE_SYMVERS_FALSE@version_arg = @ENABLE_SYMVERS_GNU_NAMESPACE_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,--version-script=libstdc++-symbols.ver -@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_FALSE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,--version-script=libstdc++-symbols.ver -@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,--version-script,libstdc++-symbols.ver-sol2 +@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,--version-script=libstdc++-symbols.ver @ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@version_arg = -Wl,-M,libstdc++-symbols.ver-sun @ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.explist @ENABLE_SYMVERS_FALSE@version_dep = @ENABLE_SYMVERS_GNU_NAMESPACE_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver -@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_FALSE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver -@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver-sol2 +@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver @ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@version_dep = libstdc++-symbols.ver-sun @GLIBCXX_BUILD_DEBUG_FALSE@STAMP_DEBUG = @@ -763,22 +763,22 @@ vpath % $(top_srcdir) # Symbol versioning for shared libraries. @ENABLE_SYMVERS_TRUE@libstdc++-symbols.ver: ${glibcxx_srcdir}/$(SYMVER_FILE) \ @ENABLE_SYMVERS_TRUE@ $(port_specific_symbol_files) -@ENABLE_SYMVERS_TRUE@ cp ${glibcxx_srcdir}/$(SYMVER_FILE) ./libstdc++-symbols.ver -@ENABLE_SYMVERS_TRUE@ chmod +w ./libstdc++-symbols.ver +@ENABLE_SYMVERS_TRUE@ cp ${glibcxx_srcdir}/$(SYMVER_FILE) $@.tmp +@ENABLE_SYMVERS_TRUE@ chmod +w $@.tmp @ENABLE_SYMVERS_TRUE@ if test "x$(port_specific_symbol_files)" != x; then \ @ENABLE_SYMVERS_TRUE@ if grep '^# Appended to version file.' \ @ENABLE_SYMVERS_TRUE@ $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \ -@ENABLE_SYMVERS_TRUE@ cat $(port_specific_symbol_files) >> $@; \ +@ENABLE_SYMVERS_TRUE@ cat $(port_specific_symbol_files) >> $@.tmp; \ @ENABLE_SYMVERS_TRUE@ else \ -@ENABLE_SYMVERS_TRUE@ sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \ -@ENABLE_SYMVERS_TRUE@ sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \ -@ENABLE_SYMVERS_TRUE@ cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \ +@ENABLE_SYMVERS_TRUE@ sed -n '1,/DO NOT DELETE/p' $@.tmp > tmp.top; \ +@ENABLE_SYMVERS_TRUE@ sed -n '/DO NOT DELETE/,$$p' $@.tmp > tmp.bottom; \ +@ENABLE_SYMVERS_TRUE@ cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@.tmp; \ @ENABLE_SYMVERS_TRUE@ rm tmp.top tmp.bottom; \ @ENABLE_SYMVERS_TRUE@ fi; \ @ENABLE_SYMVERS_TRUE@ fi -@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@libstdc++-symbols.ver-sol2 : libstdc++-symbols.ver -@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@ sed -e '/^#ifdef HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT/,/^#endif/d' $< \ -@ENABLE_SYMVERS_GNU_TRUE@@ENABLE_SYMVERS_SOL2_TRUE@@ENABLE_SYMVERS_TRUE@ > $@ || (rm -f $@ ; exit 1) +@ENABLE_SYMVERS_TRUE@ $(EGREP) -v '^[ ]*#(#| |$$)' $@.tmp | \ +@ENABLE_SYMVERS_TRUE@ $(COMPILE) -E -P -include config.h - > $@ || (rm -f $@ ; exit 1) +@ENABLE_SYMVERS_TRUE@ rm -f $@.tmp @ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@libstdc++-symbols.ver-sun : libstdc++-symbols.ver \ @ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@ $(toplevel_srcdir)/contrib/make_sunver.pl \ @ENABLE_SYMVERS_SUN_TRUE@@ENABLE_SYMVERS_TRUE@ $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD) diff --git a/libstdc++-v3/src/c++11/Makefile.in b/libstdc++-v3/src/c++11/Makefile.in index 7cc1c8c1a84..b7f362af689 100644 --- a/libstdc++-v3/src/c++11/Makefile.in +++ b/libstdc++-v3/src/c++11/Makefile.in @@ -280,6 +280,8 @@ PWD_COMMAND = $${PWDCMD-pwd} STAMP = echo timestamp > toolexecdir = $(glibcxx_toolexecdir) toolexeclibdir = $(glibcxx_toolexeclibdir) +@ENABLE_WERROR_FALSE@WERROR_FLAG = +@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR) # These bits are all figured out from configure. Look in acinclude.m4 # or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS. @@ -287,7 +289,7 @@ CONFIG_CXXFLAGS = \ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@ WARN_CXXFLAGS = \ - $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once -Wabi + $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once # -I/-D flags to pass when compiling. diff --git a/libstdc++-v3/src/c++11/debug.cc b/libstdc++-v3/src/c++11/debug.cc index af45ae4f543..0c746c1fc37 100644 --- a/libstdc++-v3/src/c++11/debug.cc +++ b/libstdc++-v3/src/c++11/debug.cc @@ -1,7 +1,7 @@ // Debugging mode support code -*- C++ -*- // Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -// 2011 Free Software Foundation, Inc. +// 2011, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -177,7 +177,8 @@ namespace __gnu_debug // std::unordered_container::local_iterator "attempt to compare local iterators from different unordered container" " buckets", - "function requires a non-empty iterator range [%1.name;, %2.name;)" + "function requires a non-empty iterator range [%1.name;, %2.name;)", + "attempt to self move assign" }; void diff --git a/libstdc++-v3/src/c++98/Makefile.in b/libstdc++-v3/src/c++98/Makefile.in index 33afea4d5d0..b0e6c14d048 100644 --- a/libstdc++-v3/src/c++98/Makefile.in +++ b/libstdc++-v3/src/c++98/Makefile.in @@ -299,6 +299,8 @@ PWD_COMMAND = $${PWDCMD-pwd} STAMP = echo timestamp > toolexecdir = $(glibcxx_toolexecdir) toolexeclibdir = $(glibcxx_toolexeclibdir) +@ENABLE_WERROR_FALSE@WERROR_FLAG = +@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR) # These bits are all figured out from configure. Look in acinclude.m4 # or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS. @@ -306,7 +308,7 @@ CONFIG_CXXFLAGS = \ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@ WARN_CXXFLAGS = \ - $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once -Wabi + $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once # -I/-D flags to pass when compiling. diff --git a/libstdc++-v3/src/c++98/tree.cc b/libstdc++-v3/src/c++98/tree.cc index 0a7f6f9e485..731ce367a92 100644 --- a/libstdc++-v3/src/c++98/tree.cc +++ b/libstdc++-v3/src/c++98/tree.cc @@ -1,6 +1,6 @@ // RB tree utilities implementation -*- C++ -*- -// Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc. +// Copyright (C) 2003, 2005, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -56,8 +56,8 @@ namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION - _Rb_tree_node_base* - _Rb_tree_increment(_Rb_tree_node_base* __x) throw () + static _Rb_tree_node_base* + local_Rb_tree_increment(_Rb_tree_node_base* __x) throw () { if (__x->_M_right != 0) { @@ -79,14 +79,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __x; } + _Rb_tree_node_base* + _Rb_tree_increment(_Rb_tree_node_base* __x) throw () + { + return local_Rb_tree_increment(__x); + } + const _Rb_tree_node_base* _Rb_tree_increment(const _Rb_tree_node_base* __x) throw () { - return _Rb_tree_increment(const_cast<_Rb_tree_node_base*>(__x)); + return local_Rb_tree_increment(const_cast<_Rb_tree_node_base*>(__x)); } - _Rb_tree_node_base* - _Rb_tree_decrement(_Rb_tree_node_base* __x) throw () + static _Rb_tree_node_base* + local_Rb_tree_decrement(_Rb_tree_node_base* __x) throw () { if (__x->_M_color == _S_red && __x->_M_parent->_M_parent == __x) @@ -111,10 +117,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __x; } + _Rb_tree_node_base* + _Rb_tree_decrement(_Rb_tree_node_base* __x) throw () + { + return local_Rb_tree_decrement(__x); + } + const _Rb_tree_node_base* _Rb_tree_decrement(const _Rb_tree_node_base* __x) throw () { - return _Rb_tree_decrement(const_cast<_Rb_tree_node_base*>(__x)); + return local_Rb_tree_decrement(const_cast<_Rb_tree_node_base*>(__x)); } static void diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/primary.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/primary.cc new file mode 100644 index 00000000000..833b27a8f53 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/primary.cc @@ -0,0 +1,24 @@ +// { dg-do compile } + +// Copyright (C) 2012 Free Software Foundation +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <limits> + +struct MyBigNum { }; + +template class std::numeric_limits<MyBigNum>; diff --git a/libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc b/libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc index 8aa72f2e3f1..d2694e29c4c 100644 --- a/libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc +++ b/libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc @@ -49,7 +49,7 @@ test04() // { dg-error "required from here" "" { target *-*-* } 34 } // { dg-error "required from here" "" { target *-*-* } 40 } // { dg-error "required from here" "" { target *-*-* } 46 } -// { dg-error "denominator cannot be zero" "" { target *-*-* } 268 } -// { dg-error "out of range" "" { target *-*-* } 269 } +// { dg-error "denominator cannot be zero" "" { target *-*-* } 265 } +// { dg-error "out of range" "" { target *-*-* } 266 } // { dg-error "overflow in constant expression" "" { target *-*-* } 61 } // { dg-prune-output "not a member" } diff --git a/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc b/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc index 7483016b616..51a6bf65d2c 100644 --- a/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc +++ b/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc @@ -42,9 +42,9 @@ test02() // { dg-error "required from here" "" { target *-*-* } 29 } // { dg-error "required from here" "" { target *-*-* } 36 } // { dg-error "required from here" "" { target *-*-* } 38 } -// { dg-error "overflow in addition" "" { target *-*-* } 432 } -// { dg-error "overflow in multiplication" "" { target *-*-* } 104 } -// { dg-error "overflow in multiplication" "" { target *-*-* } 100 } -// { dg-error "overflow in multiplication" "" { target *-*-* } 102 } +// { dg-error "overflow in addition" "" { target *-*-* } 429 } +// { dg-error "overflow in multiplication" "" { target *-*-* } 97 } +// { dg-error "overflow in multiplication" "" { target *-*-* } 99 } +// { dg-error "overflow in multiplication" "" { target *-*-* } 101 } // { dg-prune-output "out of range" } // { dg-prune-output "not usable in a constant expression" } diff --git a/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc b/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc index 01217a40538..44463a1caf5 100644 --- a/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc +++ b/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc @@ -5,7 +5,7 @@ // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) +// Free Software Foundation; either version 3, or (at your option) // any later version. // // This library is distributed in the hope that it will be useful, @@ -14,9 +14,8 @@ // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. // 20.6.4 function object return types [func.ret] #include <functional> diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc index 739ceed3004..2030b7f632d 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc @@ -8,18 +8,17 @@ // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) +// Free Software Foundation; either version 3, or (at your option) // any later version. - +// // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. - +// // You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. #include <string> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/dr1261.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/dr1261.cc index 7d754b30102..e17cc5565b3 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/dr1261.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/dr1261.cc @@ -8,18 +8,17 @@ // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) +// Free Software Foundation; either version 3, or (at your option) // any later version. - +// // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. - +// // You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. #include <string> #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/21_strings/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/21_strings/debug/iterator_self_move_assign_neg.cc new file mode 100644 index 00000000000..a22770f2be5 --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/debug/iterator_self_move_assign_neg.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <debug/string> + +void test01() +{ + __gnu_debug::string s1; + auto it1 = s1.begin(); + it1 = std::move(it1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/21_strings/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/21_strings/debug/self_move_assign_neg.cc new file mode 100644 index 00000000000..fb25aa7b6a4 --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/debug/self_move_assign_neg.cc @@ -0,0 +1,34 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <debug/string> + +void test01() +{ + __gnu_debug::string s1; + s1 = std::move(s1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/iterator_self_move_assign_neg.cc new file mode 100644 index 00000000000..810c4331876 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/deque/debug/iterator_self_move_assign_neg.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <deque> + +void test01() +{ + std::deque<int> d1; + auto it1 = d1.begin(); + it1 = std::move(it1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/self_move_assign_neg.cc new file mode 100644 index 00000000000..c9b8cb2178c --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/deque/debug/self_move_assign_neg.cc @@ -0,0 +1,34 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <deque> + +void test01() +{ + std::deque<int> d1; + d1 = std::move(d1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/do_the_right_thing.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/do_the_right_thing.cc new file mode 100644 index 00000000000..0555d4ce2d9 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/do_the_right_thing.cc @@ -0,0 +1,29 @@ +// { dg-do compile } +// { dg-options "-std=gnu++11" } + +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <deque> + +// libstdc++/43813 +void test01() +{ + std::deque<double*> d(7, 0); + d.assign(7, 0); + d.insert(d.begin(), 7, 0); +} diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc index 006041dc5f7..a86e94643a2 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc @@ -1,6 +1,6 @@ // 2007-04-27 Paolo Carlini <pcarlini@suse.de> -// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1670 } +// { dg-error "no matching" "" { target *-*-* } 1696 } #include <deque> diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc index c7ed29a2104..da53d4f806d 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc @@ -1,6 +1,6 @@ // 2007-04-27 Paolo Carlini <pcarlini@suse.de> -// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1603 } +// { dg-error "no matching" "" { target *-*-* } 1629 } #include <deque> diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc index e390f44b565..10ecf6e5e81 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc @@ -1,6 +1,6 @@ // 2007-04-27 Paolo Carlini <pcarlini@suse.de> -// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1603 } +// { dg-error "no matching" "" { target *-*-* } 1629 } #include <deque> #include <utility> diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc index ed81d582fdf..f77b9a77936 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc @@ -1,6 +1,6 @@ // 2007-04-27 Paolo Carlini <pcarlini@suse.de> -// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1754 } +// { dg-error "no matching" "" { target *-*-* } 1780 } #include <deque> diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/iterator_self_move_assign_neg.cc new file mode 100644 index 00000000000..18c7f96e7a7 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/iterator_self_move_assign_neg.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <forward_list> + +void test01() +{ + std::forward_list<int> fl1; + auto it1 = fl1.begin(); + it1 = std::move(it1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/self_move_assign_neg.cc new file mode 100644 index 00000000000..5a0dff5ab7e --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/self_move_assign_neg.cc @@ -0,0 +1,34 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <forward_list> + +void test01() +{ + std::forward_list<int> fl1; + fl1 = std::move(fl1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/do_the_right_thing.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/do_the_right_thing.cc new file mode 100644 index 00000000000..35e96394330 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/do_the_right_thing.cc @@ -0,0 +1,29 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <forward_list> + +// libstdc++/43813 +void test01() +{ + std::forward_list<double*> fl(7, 0); + fl.assign(7, 0); + fl.insert_after(fl.before_begin(), 7, 0); +} diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc index 774c728ddab..c49a9c1d271 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc @@ -1,8 +1,8 @@ // { dg-do compile } // { dg-options "-std=gnu++0x" } -// { dg-error "no matching" "" { target *-*-* } 1213 } +// { dg-error "no matching" "" { target *-*-* } 33 } -// Copyright (C) 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc index e19698d6140..a5632c46b1b 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc @@ -1,8 +1,8 @@ // { dg-do compile } // { dg-options "-std=gnu++0x" } -// { dg-error "no matching" "" { target *-*-* } 1213 } +// { dg-error "no matching" "" { target *-*-* } 27 } -// Copyright (C) 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc index 1d7fdb8a2a3..c9cf2697914 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc @@ -1,8 +1,8 @@ // { dg-do compile } // { dg-options "-std=gnu++0x" } -// { dg-error "no matching" "" { target *-*-* } 1213 } +// { dg-error "no matching" "" { target *-*-* } 28 } -// Copyright (C) 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc index 12dd38e76e4..fcd31fb067b 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc @@ -1,8 +1,8 @@ // { dg-do compile } // { dg-options "-std=gnu++0x" } -// { dg-error "no matching" "" { target *-*-* } 1213 } +// { dg-error "no matching" "" { target *-*-* } 33 } -// Copyright (C) 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/iterator_self_move_assign_neg.cc new file mode 100644 index 00000000000..5ec29e97fce --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/list/debug/iterator_self_move_assign_neg.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <list> + +void test01() +{ + std::list<int> l1; + auto it1 = l1.begin(); + it1 = std::move(it1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/list/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/list/debug/self_move_assign_neg.cc new file mode 100644 index 00000000000..f6fd4f5fd07 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/list/debug/self_move_assign_neg.cc @@ -0,0 +1,34 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <list> + +void test01() +{ + std::list<int> l1; + l1 = std::move(l1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/do_the_right_thing.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/do_the_right_thing.cc new file mode 100644 index 00000000000..7dbb4f309f1 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/list/requirements/do_the_right_thing.cc @@ -0,0 +1,29 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <list> + +// libstdc++/43813 +void test01() +{ + std::list<double*> l(7, 0); + l.assign(7, 0); + l.insert(l.begin(), 7, 0); +} diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc index 42f28db9ab3..c088e6c5f11 100644 --- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc @@ -1,6 +1,6 @@ // 2007-04-27 Paolo Carlini <pcarlini@suse.de> -// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1552 } +// { dg-error "no matching" "" { target *-*-* } 1574 } #include <list> diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc index d4a446408f4..94fbe9afebb 100644 --- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc @@ -1,6 +1,6 @@ // 2007-04-27 Paolo Carlini <pcarlini@suse.de> -// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1508 } +// { dg-error "no matching" "" { target *-*-* } 1530 } #include <list> diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc index fb32ee497f5..c02d5a5426d 100644 --- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc @@ -1,6 +1,6 @@ // 2007-04-27 Paolo Carlini <pcarlini@suse.de> -// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1508 } +// { dg-error "no matching" "" { target *-*-* } 1530 } #include <list> #include <utility> diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc index d34be99e155..c2fa73716f2 100644 --- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc @@ -1,6 +1,6 @@ // 2007-04-27 Paolo Carlini <pcarlini@suse.de> -// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1508 } +// { dg-error "no matching" "" { target *-*-* } 1530 } #include <list> diff --git a/libstdc++-v3/testsuite/23_containers/map/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/map/debug/iterator_self_move_assign_neg.cc new file mode 100644 index 00000000000..e6de5b90b64 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/map/debug/iterator_self_move_assign_neg.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <map> + +void test01() +{ + std::map<int, int> m1; + auto it1 = m1.begin(); + it1 = std::move(it1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/map/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/map/debug/self_move_assign_neg.cc new file mode 100644 index 00000000000..b9dbfacbcf5 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/map/debug/self_move_assign_neg.cc @@ -0,0 +1,34 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <map> + +void test01() +{ + std::map<int, int> m1; + m1 = std::move(m1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/multimap/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/iterator_self_move_assign_neg.cc new file mode 100644 index 00000000000..efc7f9da7e1 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/multimap/debug/iterator_self_move_assign_neg.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <map> + +void test01() +{ + std::multimap<int, int> mm1; + auto it1 = mm1.begin(); + it1 = std::move(it1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/multimap/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/self_move_assign_neg.cc new file mode 100644 index 00000000000..995d9c2083d --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/multimap/debug/self_move_assign_neg.cc @@ -0,0 +1,34 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <map> + +void test01() +{ + std::multimap<int, int> mm1; + mm1 = std::move(mm1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/multiset/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/iterator_self_move_assign_neg.cc new file mode 100644 index 00000000000..1f1e61e1153 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/multiset/debug/iterator_self_move_assign_neg.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <set> + +void test01() +{ + std::multiset<int> ms1; + auto it1 = ms1.begin(); + it1 = std::move(it1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/multiset/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/self_move_assign_neg.cc new file mode 100644 index 00000000000..1789c95622d --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/multiset/debug/self_move_assign_neg.cc @@ -0,0 +1,34 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <set> + +void test01() +{ + std::multiset<int> ms1; + ms1 = std::move(ms1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/set/debug/iterator_self_move_assign_neg.cc new file mode 100644 index 00000000000..079ecd9b49a --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/set/debug/iterator_self_move_assign_neg.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <set> + +void test01() +{ + std::set<int> s1; + auto it1 = s1.begin(); + it1 = std::move(it1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/set/debug/self_move_assign_neg.cc new file mode 100644 index 00000000000..dd2bf9fb15c --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/set/debug/self_move_assign_neg.cc @@ -0,0 +1,34 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <set> + +void test01() +{ + std::set<int> s1; + s1 = std::move(s1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/iterator_self_move_assign_neg.cc new file mode 100644 index 00000000000..17b442aa5a1 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/iterator_self_move_assign_neg.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <unordered_map> + +void test01() +{ + std::unordered_map<int, int> um1; + auto it1 = um1.begin(); + it1 = std::move(it1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/self_move_assign_neg.cc new file mode 100644 index 00000000000..1b4bf136504 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/self_move_assign_neg.cc @@ -0,0 +1,34 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <unordered_map> + +void test01() +{ + std::unordered_map<int, int> um1; + um1 = std::move(um1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/iterator_self_move_assign_neg.cc new file mode 100644 index 00000000000..0f8b3143790 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/iterator_self_move_assign_neg.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <unordered_map> + +void test01() +{ + std::unordered_multimap<int, int> umm1; + auto it1 = umm1.begin(); + it1 = std::move(it1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/self_move_assign_neg.cc new file mode 100644 index 00000000000..6b5f396825c --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/self_move_assign_neg.cc @@ -0,0 +1,34 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <unordered_map> + +void test01() +{ + std::unordered_multimap<int, int> umm1; + umm1 = std::move(umm1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/iterator_self_move_assign_neg.cc new file mode 100644 index 00000000000..171243bf398 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/iterator_self_move_assign_neg.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <unordered_set> + +void test01() +{ + std::unordered_multiset<int> ums1; + auto it1 = ums1.begin(); + it1 = std::move(it1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/self_move_assign_neg.cc new file mode 100644 index 00000000000..fa9cc27fe3c --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/self_move_assign_neg.cc @@ -0,0 +1,34 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <unordered_set> + +void test01() +{ + std::unordered_multiset<int> ums1; + ums1 = std::move(ums1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/iterator_self_move_assign_neg.cc new file mode 100644 index 00000000000..17101c7a050 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/iterator_self_move_assign_neg.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <unordered_set> + +void test01() +{ + std::unordered_set<int> us1; + auto it1 = us1.begin(); + it1 = std::move(it1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/self_move_assign_neg.cc new file mode 100644 index 00000000000..1dc3e5c9dfc --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/self_move_assign_neg.cc @@ -0,0 +1,34 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <unordered_set> + +void test01() +{ + std::unordered_set<int> us1; + us1 = std::move(us1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/operators/52309.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/operators/52309.cc new file mode 100644 index 00000000000..5b16f0b3cd9 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/operators/52309.cc @@ -0,0 +1,28 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <unordered_set> + +// libstdc++/52309 +struct value {}; +struct hash { std::size_t operator()(const value&) const; }; +bool operator==(value const&, value const&); +std::unordered_set<value, hash> set; +bool z = (set == set); diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/swap.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/swap.cc new file mode 100644 index 00000000000..04aa0db0c6a --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/swap.cc @@ -0,0 +1,59 @@ +// { dg-options "-std=gnu++11" } + +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <vector> +#include <testsuite_hooks.h> + +template<class Cont> + void + my_reverse(Cont& c) + { + for (std::size_t i = 0, j = c.size(); i < j; ++i) + { + --j; + using std::swap; + swap(c[i], c[j]); + } + } + +template<class Cont> + void + my_compare(const Cont& c1, const Cont& c2) + { + bool test __attribute__((unused)) = true; + + VERIFY( c1.size() == c2.size() ); + + for (std::size_t i = 0; i < c1.size(); ++i) + VERIFY( c1[i] == c2[c1.size() - i - 1] ); + } + +void test01() +{ + const std::vector<bool> vb_ref{0, 1, 1, 0, 1}; + std::vector<bool> vb(vb_ref); + my_reverse(vb); + my_compare(vb_ref, vb); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc new file mode 100644 index 00000000000..f1f5917d103 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc @@ -0,0 +1,43 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++0x" } +// { dg-do compile } + +// PR libstdc++/52433 + +#include <vector> + +struct X +{ + std::vector<int>::iterator i; + + X() = default; + X(const X&) = default; + X(X&&) = default; + X& operator=(const X&) = default; + X& operator=(X&&) = default; +}; + +X test01() +{ + X x; + x = X(); + return x; +} + diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/iterator_self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/iterator_self_move_assign_neg.cc new file mode 100644 index 00000000000..7af4d92e9c9 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/debug/iterator_self_move_assign_neg.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <vector> + +void test01() +{ + std::vector<int> v1; + auto it1 = v1.begin(); + it1 = std::move(it1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/self_move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/self_move_assign_neg.cc new file mode 100644 index 00000000000..8cad4f23eaa --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/debug/self_move_assign_neg.cc @@ -0,0 +1,34 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do run { xfail *-*-* } } + +#include <vector> + +void test01() +{ + std::vector<int> v1; + v1 = std::move(v1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/do_the_right_thing.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/do_the_right_thing.cc new file mode 100644 index 00000000000..4419496872d --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/do_the_right_thing.cc @@ -0,0 +1,29 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <vector> + +// libstdc++/43813 +void test01() +{ + std::vector<double*> v(7, 0); + v.assign(7, 0); + v.insert(v.begin(), 7, 0); +} diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc index 1855fddafbd..73de8aed9e8 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc @@ -1,6 +1,6 @@ // 2007-04-27 Paolo Carlini <pcarlini@suse.de> -// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1225 } +// { dg-error "no matching" "" { target *-*-* } 1251 } #include <vector> diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc index 9c05486e35b..fa479c73094 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc @@ -1,6 +1,6 @@ // 2007-04-27 Paolo Carlini <pcarlini@suse.de> -// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1155 } +// { dg-error "no matching" "" { target *-*-* } 1181 } #include <vector> diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc index 152393c15dc..231cacebb97 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc @@ -1,6 +1,6 @@ // 2007-04-27 Paolo Carlini <pcarlini@suse.de> -// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1155 } +// { dg-error "no matching" "" { target *-*-* } 1181 } #include <vector> #include <utility> diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc index f44ae63eb99..b8e18bb4d4b 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc @@ -1,6 +1,6 @@ // 2007-04-27 Paolo Carlini <pcarlini@suse.de> -// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation +// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1266 } +// { dg-error "no matching" "" { target *-*-* } 1292 } #include <vector> diff --git a/libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/requirements/typedefs.cc index adea635e962..71cffdbb9ba 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::bernoulli_distribution test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/typedefs.cc index e60fac13c75..1f14321c6eb 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::binomial_distribution<int> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/typedefs.cc index 3d80d2ddf0f..933fcde9298 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::cauchy_distribution<double> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/typedefs.cc index 271e0fe451a..d4720328ee7 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::chi_squared_distribution<double> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/typedefs.cc index 7c5977b3808..ef4739badd6 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-12-03 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::discrete_distribution<> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/typedefs.cc index 7c696e25244..a2357b5a4fb 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::exponential_distribution<double> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/typedefs.cc index 8f5d99da494..28fe4063f2e 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::extreme_value_distribution<double> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/typedefs.cc index a92727d706b..0a9b2be4798 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::fisher_f_distribution<double> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/typedefs.cc index a1d15575e91..35b49762624 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::gamma_distribution<double> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/typedefs.cc index cc03ebf0ddb..6e2a4205c55 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::geometric_distribution<int> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/typedefs.cc index 2e3ade699c4..4122877674d 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::lognormal_distribution<double> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/typedefs.cc index 5b30fda671c..2097da2bf89 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::negative_binomial_distribution<int> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/typedefs.cc index 471379d5527..f0c04791ce6 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::normal_distribution<double> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/typedefs.cc index c0d458ef6a1..633cd540c30 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-12-03 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::piecewise_constant_distribution<> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/typedefs.cc index cb1d016dce2..1a4f5f66f17 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-12-03 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::piecewise_linear_distribution<> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/typedefs.cc index d6a600293da..2fcf5980542 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::poisson_distribution<int> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/typedefs.cc index e090b354200..6ee131f5ba0 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::student_t_distribution<double> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/typedefs.cc index 3d584b525c5..fb4075954b0 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::uniform_int_distribution<int> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/typedefs.cc index c14182f7230..147bd0da7da 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::uniform_real_distribution<double> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/typedefs.cc index 5c8d8e0769b..05cc31f5072 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/typedefs.cc @@ -4,7 +4,7 @@ // // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // -// Copyright (C) 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2008, 2009, 2012 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,4 +32,5 @@ test01() typedef std::weibull_distribution<double> test_type; typedef test_type::result_type result_type; + typedef test_type::param_type param_type; } diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/operators/51811.cc b/libstdc++-v3/testsuite/29_atomics/atomic/operators/51811.cc index 7c234f2ff02..934f1c6881a 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic/operators/51811.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic/operators/51811.cc @@ -1,3 +1,4 @@ +// { dg-require-atomic-builtins "" } // { dg-options "-std=gnu++0x" } // Copyright (C) 2012 Free Software Foundation, Inc. diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc b/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc index 09a4d44db8e..fcc9708da4f 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc @@ -1,3 +1,4 @@ +// { dg-require-atomic-builtins "" } // { dg-options "-std=gnu++0x" } // Copyright (C) 2012 Free Software Foundation, Inc. diff --git a/libstdc++-v3/testsuite/Makefile.am b/libstdc++-v3/testsuite/Makefile.am index e9774512dc3..166bd160fd2 100644 --- a/libstdc++-v3/testsuite/Makefile.am +++ b/libstdc++-v3/testsuite/Makefile.am @@ -1,7 +1,7 @@ ## Makefile for the testsuite subdirectory of the GNU C++ Standard library. ## ## Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -## 2011 Free Software Foundation, Inc. +## 2011, 2012 Free Software Foundation, Inc. ## ## This file is part of the libstdc++ version 3 distribution. ## Process this file with automake to produce Makefile.in. @@ -255,8 +255,8 @@ check-profile: site.exp # By adding these files here, automake will remove them for 'make clean' CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \ testsuite_* site.exp abi_check baseline_symbols *TEST* *.dat \ - *.ii *.s *.o *.cc *.x *.a *.so *.xml *.raw *.out + *.ii *.s *.o *.cc *.x *.a *.so *.xml *.raw *.out *.gdb # To remove directories. clean-local: - rm -rf de fr debug parallel profile binaries normal* + rm -rf de fr debug parallel profile binaries normal* diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in index fc9b31a4259..8c91fd03ec9 100644 --- a/libstdc++-v3/testsuite/Makefile.in +++ b/libstdc++-v3/testsuite/Makefile.in @@ -265,6 +265,8 @@ PWD_COMMAND = $${PWDCMD-pwd} STAMP = echo timestamp > toolexecdir = $(glibcxx_toolexecdir) toolexeclibdir = $(glibcxx_toolexeclibdir) +@ENABLE_WERROR_FALSE@WERROR_FLAG = +@ENABLE_WERROR_TRUE@WERROR_FLAG = $(WERROR) # These bits are all figured out from configure. Look in acinclude.m4 # or configure.ac to see how they are set. See GLIBCXX_EXPORT_FLAGS. @@ -272,7 +274,7 @@ CONFIG_CXXFLAGS = \ $(SECTION_FLAGS) $(EXTRA_CXX_FLAGS) -frandom-seed=$@ WARN_CXXFLAGS = \ - $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once -Wabi + $(WARN_FLAGS) $(WERROR_FLAG) -fdiagnostics-show-location=once # -I/-D flags to pass when compiling. @@ -320,7 +322,7 @@ profile_flags = "unix/-D_GLIBCXX_PROFILE" # By adding these files here, automake will remove them for 'make clean' CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \ testsuite_* site.exp abi_check baseline_symbols *TEST* *.dat \ - *.ii *.s *.o *.cc *.x *.a *.so *.xml *.raw *.out + *.ii *.s *.o *.cc *.x *.a *.so *.xml *.raw *.out *.gdb all: all-am @@ -661,7 +663,7 @@ check-profile: site.exp # To remove directories. clean-local: - rm -rf de fr debug parallel profile binaries normal* + rm -rf de fr debug parallel profile binaries normal* # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/libstdc++-v3/testsuite/ext/vstring/requirements/do_the_right_thing.cc b/libstdc++-v3/testsuite/ext/vstring/requirements/do_the_right_thing.cc new file mode 100644 index 00000000000..cd68d06f867 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/vstring/requirements/do_the_right_thing.cc @@ -0,0 +1,31 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <ext/vstring.h> + +// libstdc++/43813 +void test01() +{ + __gnu_cxx::__versa_string<double*> vs(7, 0); + vs.assign(7, 0); + vs.append(7, 0); + vs.insert(vs.begin(), 7, 0); + vs.replace(vs.begin(), vs.end(), 7, 0); +} diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.cc b/libstdc++-v3/testsuite/util/testsuite_abi.cc index 8c3b37f8373..a0294c694cd 100644 --- a/libstdc++-v3/testsuite/util/testsuite_abi.cc +++ b/libstdc++-v3/testsuite/util/testsuite_abi.cc @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 // Free Software Foundation, Inc. // This library is free software; you can redistribute it and/or @@ -30,7 +30,7 @@ using namespace std; -void +void symbol::init(string& data) { const char delim = ':'; @@ -119,9 +119,9 @@ symbol::print() const } cout << "version status: " << vers << endl; - if (version_name.size() + if (version_name.size() && (version_status == compatible || version_status == incompatible)) - cout << version_name << endl; + cout << version_name << endl; string type_string; switch (type) @@ -142,7 +142,7 @@ symbol::print() const type_string = "<default>"; } cout << "type: " << type_string << endl; - + if (type == object || type == tls) cout << "type size: " << size << endl; @@ -181,7 +181,7 @@ check_version(symbol& test, bool added) known_versions.push_back("GLIBCXX_3.4.1"); known_versions.push_back("GLIBCXX_3.4.2"); known_versions.push_back("GLIBCXX_3.4.3"); - known_versions.push_back("GLIBCXX_3.4.4"); + known_versions.push_back("GLIBCXX_3.4.4"); known_versions.push_back("GLIBCXX_3.4.5"); known_versions.push_back("GLIBCXX_3.4.6"); known_versions.push_back("GLIBCXX_3.4.7"); @@ -203,10 +203,10 @@ check_version(symbol& test, bool added) known_versions.push_back("CXXABI_1.3.2"); known_versions.push_back("CXXABI_1.3.3"); known_versions.push_back("CXXABI_1.3.4"); - known_versions.push_back("CXXABI_TM_1"); known_versions.push_back("CXXABI_1.3.5"); known_versions.push_back("CXXABI_1.3.6"); known_versions.push_back("CXXABI_LDBL_1.3"); + known_versions.push_back("CXXABI_TM_1"); } compat_list::iterator begin = known_versions.begin(); compat_list::iterator end = known_versions.end(); @@ -220,13 +220,12 @@ check_version(symbol& test, bool added) test.version_status = symbol::compatible; else test.version_status = symbol::incompatible; - - // Check that added symbols aren't added in the base versions. - if (added - && (test.version_name == known_versions[0] - || test.version_name == "CXXABI_1.3" - || test.version_name == "GLIBCXX_LDBL_3.4" - || test.version_name == "CXXABI_LDBL_1.3")) + + // Check that added symbols are added in the latest pre-release version. + bool latestp = (test.version_name == "GLIBCXX_3.4.17" + || test.version_name == "CXXABI_1.3.6" + || test.version_name == "CXXABI_TM_1"); + if (added && !latestp) test.version_status = symbol::incompatible; // Check that long double compatibility symbols demangled as @@ -241,8 +240,8 @@ check_version(symbol& test, bool added) // Check for weak label. if (it1 == end && it2 == end) test.version_status = symbol::incompatible; - - // Check that + + // Check that // GLIBCXX_3.4 // GLIBCXX_3.4.5 // version as compatible @@ -263,7 +262,7 @@ check_version(symbol& test, bool added) return test.version_status == symbol::compatible; } -bool +bool check_compatible(symbol& lhs, symbol& rhs, bool verbose) { bool ret = true; @@ -276,7 +275,7 @@ check_compatible(symbol& lhs, symbol& rhs, bool verbose) if (verbose) cout << tab << "incompatible types" << endl; } - + if (lhs.name != rhs.name) { ret = false; @@ -295,7 +294,7 @@ check_compatible(symbol& lhs, symbol& rhs, bool verbose) } } - if (lhs.version_name != rhs.version_name + if (lhs.version_name != rhs.version_name && !check_version(lhs) && !check_version(rhs)) { ret = false; @@ -334,7 +333,7 @@ get_symbol(const string& name, const symbols& s) } } -void +void examine_symbol(const char* name, const char* file) { try @@ -348,7 +347,7 @@ examine_symbol(const char* name, const char* file) } int -compare_symbols(const char* baseline_file, const char* test_file, +compare_symbols(const char* baseline_file, const char* test_file, bool verbose) { // Input both lists of symbols into container. @@ -377,7 +376,7 @@ compare_symbols(const char* baseline_file, const char* test_file, // duplicates. // // The names added to missing_names are baseline names not found in - // test names + // test names // -> symbols that have been deleted. // // The names added to added_names are test names not in @@ -416,6 +415,9 @@ compare_symbols(const char* baseline_file, const char* test_file, typedef pair<symbol, symbol> symbol_pair; vector<symbol_pair> incompatible; + // Fill out list of undesignated symbols. + vector<symbol> undesignated; + // Check missing names for compatibility. for (size_t j = 0; j < missing_names.size(); ++j) { @@ -440,11 +442,41 @@ compare_symbols(const char* baseline_file, const char* test_file, for (size_t l = 0; l < added_size; ++l) { symbol& stest = test[added_names[l]]; - stest.status = symbol::added; - if (!check_version(stest, true)) - incompatible.push_back(symbol_pair(stest, stest)); + + // Mark TLS as undesignated, remove from added. + if (stest.type == symbol::tls) + { + stest.status = symbol::undesignated; + if (!check_version(stest, false)) + incompatible.push_back(symbol_pair(stest, stest)); + else + undesignated.push_back(stest); + } + else + { + stest.status = symbol::added; + if (!check_version(stest, true)) + incompatible.push_back(symbol_pair(stest, stest)); + } } + // Normalize added names and undesignated names. + const size_t undesignated_size = undesignated.size(); + for (size_t l = 0; l < undesignated_size; ++l) + { + symbol& sundes = undesignated[l]; + symbol_names::iterator end = added_names.end(); + symbol_names::iterator it = find(added_names.begin(), end, sundes.name); + if (it != end) + { + // Found. + added_names.erase(it); + } + else + __throw_runtime_error(sundes.name.c_str()); + } + + // Report results. if (verbose && added_names.size()) { @@ -455,7 +487,7 @@ compare_symbols(const char* baseline_file, const char* test_file, test[added_names[j]].print(); } } - + if (verbose && missing_names.size()) { cout << endl << missing_names.size() << " missing symbols " << endl; @@ -465,7 +497,21 @@ compare_symbols(const char* baseline_file, const char* test_file, baseline[missing_names[j]].print(); } } - + + if (verbose && undesignated.size()) + { + cout << endl << undesignated.size() << " undesignated symbols " << endl; + for (size_t j = 0; j < undesignated.size() ; ++j) + { + // First, print index. + cout << j << endl; + + // Second, report name. + symbol& s = undesignated[j]; + s.print(); + } + } + if (verbose && incompatible.size()) { cout << endl << incompatible.size() << " incompatible symbols " << endl; @@ -478,16 +524,17 @@ compare_symbols(const char* baseline_file, const char* test_file, symbol& sbase = incompatible[j].first; symbol& stest = incompatible[j].second; stest.print(); - - // Second, report reason or reasons incompatible. + + // Third, report reason or reasons incompatible. check_compatible(sbase, stest, true); } } - + cout << "\n\t\t=== libstdc++-v3 check-abi Summary ===" << endl; cout << endl; cout << "# of added symbols:\t\t " << added_names.size() << endl; cout << "# of missing symbols:\t\t " << missing_names.size() << endl; + cout << "# of undesignated symbols:\t " << undesignated.size() << endl; cout << "# of incompatible symbols:\t " << incompatible.size() << endl; cout << endl; cout << "using: " << baseline_file << endl; @@ -563,4 +610,3 @@ demangle(const std::string& mangled) } return name; } - diff --git a/lto-plugin/ChangeLog b/lto-plugin/ChangeLog index 5db37e79143..ad2be69f642 100644 --- a/lto-plugin/ChangeLog +++ b/lto-plugin/ChangeLog @@ -1,3 +1,10 @@ +2012-02-22 Kai Tietz <ktietz@redhat.com> + + PR lto/50616 + * lto-plugin.c (PRI_LL): New macro. + (dump_symtab): Use PRI_LL instead of ll in print. + (process_symtab): Use PRI_LL instead of ll in scan. + 2011-12-20 Andreas Schwab <schwab@linux-m68k.org> * configure: Regenerate. diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c index d7a78136827..8d55cb8f491 100644 --- a/lto-plugin/lto-plugin.c +++ b/lto-plugin/lto-plugin.c @@ -62,6 +62,14 @@ along with this program; see the file COPYING3. If not see #include "simple-object.h" #include "plugin-api.h" +/* We need to use I64 instead of ll width-specifier on native Windows. + The reason for this is that older MS-runtimes don't support the ll. */ +#ifdef __MINGW32__ +#define PRI_LL "I64" +#else +#define PRI_LL "ll" +#endif + /* Handle opening elf files on hosts, such as Windows, that may use text file handling that will break binary access. */ #ifndef O_BINARY @@ -360,7 +368,7 @@ dump_symtab (FILE *f, struct plugin_symtab *symtab) assert (resolution != LDPR_UNKNOWN); - fprintf (f, "%u %llx %s %s\n", + fprintf (f, "%u %" PRI_LL "x %s %s\n", (unsigned int) slot, symtab->aux[j].id, lto_resolution_str[resolution], symtab->syms[j].name); @@ -816,7 +824,7 @@ process_symtab (void *data, const char *name, off_t offset, off_t length) s = strrchr (name, '.'); if (s) - sscanf (s, ".%llx", &obj->out->id); + sscanf (s, ".%" PRI_LL "x", &obj->out->id); secdata = xmalloc (length); offset += obj->file->offset; if (offset != lseek (obj->file->fd, offset, SEEK_SET) diff --git a/maintainer-scripts/ChangeLog b/maintainer-scripts/ChangeLog index e98f0af5086..d059090d374 100644 --- a/maintainer-scripts/ChangeLog +++ b/maintainer-scripts/ChangeLog @@ -1,3 +1,15 @@ +2013-03-05 Richard Guenther <rguenther@suse.de> + + * crontab: Remove 4.3 branch from the list of snapshots to make. + +2012-03-02 Richard Guenther <rguenther@suse.de> + + * crontab: Fix day-of-week. + +2012-03-02 Richard Guenther <rguenther@suse.de> + + * crontab: Update for 4.7 branching. + 2011-11-21 Gerald Pfeifer <gerald@pfeifer.com> * update_web_docs_svn: Make $DOCSDIR group writable after diff --git a/maintainer-scripts/crontab b/maintainer-scripts/crontab index 73f7f589239..87f1bd7b656 100644 --- a/maintainer-scripts/crontab +++ b/maintainer-scripts/crontab @@ -1,8 +1,8 @@ 16 0 * * * sh /home/gccadmin/scripts/update_version_svn 50 0 * * * sh /home/gccadmin/scripts/update_web_docs_svn 55 0 * * * sh /home/gccadmin/scripts/update_web_docs_libstdcxx_svn -32 22 * * 0 sh /home/gccadmin/scripts/gcc_release -s 4.3:branches/gcc-4_3-branch -l -d /sourceware/snapshot-tmp/gcc all 32 22 * * 2 sh /home/gccadmin/scripts/gcc_release -s 4.4:branches/gcc-4_4-branch -l -d /sourceware/snapshot-tmp/gcc all 32 22 * * 4 sh /home/gccadmin/scripts/gcc_release -s 4.5:branches/gcc-4_5-branch -l -d /sourceware/snapshot-tmp/gcc all 32 22 * * 5 sh /home/gccadmin/scripts/gcc_release -s 4.6:branches/gcc-4_6-branch -l -d /sourceware/snapshot-tmp/gcc all -32 22 * * 6 sh /home/gccadmin/scripts/gcc_release -s 4.7:trunk -l -d /sourceware/snapshot-tmp/gcc all +#32 22 * * 6 sh /home/gccadmin/scripts/gcc_release -s 4.7:branches/gcc-4_7-branch -l -d /sourceware/snapshot-tmp/gcc all +32 22 * * 7 sh /home/gccadmin/scripts/gcc_release -s 4.8:trunk -l -d /sourceware/snapshot-tmp/gcc all diff --git a/zlib/CMakeLists.txt b/zlib/CMakeLists.txt new file mode 100644 index 00000000000..a64fe0b2cae --- /dev/null +++ b/zlib/CMakeLists.txt @@ -0,0 +1,190 @@ +cmake_minimum_required(VERSION 2.4.4) +set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) + +project(zlib C) + +if(NOT DEFINED BUILD_SHARED_LIBS) + option(BUILD_SHARED_LIBS "Build a shared library form of zlib" ON) +endif() + +include(CheckTypeSize) +include(CheckFunctionExists) +include(CheckIncludeFile) +include(CheckCSourceCompiles) +enable_testing() + +check_include_file(sys/types.h HAVE_SYS_TYPES_H) +check_include_file(stdint.h HAVE_STDINT_H) +check_include_file(stddef.h HAVE_STDDEF_H) + +# +# Check to see if we have large file support +# +set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) +# We add these other definitions here because CheckTypeSize.cmake +# in CMake 2.4.x does not automatically do so and we want +# compatibility with CMake 2.4.x. +if(HAVE_SYS_TYPES_H) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H) +endif() +if(HAVE_STDINT_H) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H) +endif() +if(HAVE_STDDEF_H) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H) +endif() +check_type_size(off64_t OFF64_T) +if(HAVE_OFF64_T) + add_definitions(-D_LARGEFILE64_SOURCE=1) +endif() +set(CMAKE_REQUIRED_DEFINITIONS) # clear variable + +# +# Check for fseeko +# +check_function_exists(fseeko HAVE_FSEEKO) +if(NOT HAVE_FSEEKO) + add_definitions(-DNO_FSEEKO) +endif() + +# +# Check for unistd.h +# +check_include_file(unistd.h Z_HAVE_UNISTD_H) + +if(MSVC) + set(CMAKE_DEBUG_POSTFIX "d") + add_definitions(-D_CRT_SECURE_NO_DEPRECATE) + add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) +endif() + +if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) + # If we're doing an out of source build and the user has a zconf.h + # in their source tree... + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h) + message(FATAL_ERROR + "You must remove ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h " + "from the source tree. This file is included with zlib " + "but CMake generates this file for you automatically " + "in the build directory.") + endif() +endif() + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein + ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + + +#============================================================================ +# zlib +#============================================================================ + +set(ZLIB_PUBLIC_HDRS + ${CMAKE_CURRENT_BINARY_DIR}/zconf.h + zlib.h +) +set(ZLIB_PRIVATE_HDRS + crc32.h + deflate.h + gzguts.h + inffast.h + inffixed.h + inflate.h + inftrees.h + trees.h + zutil.h +) +set(ZLIB_SRCS + adler32.c + compress.c + crc32.c + deflate.c + gzclose.c + gzlib.c + gzread.c + gzwrite.c + inflate.c + infback.c + inftrees.c + inffast.c + trees.c + uncompr.c + zutil.c + win32/zlib1.rc +) + +# parse the full version number from zlib.h and include in ZLIB_FULL_VERSION +file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents) +string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([0-9A-Za-z.]+)\".*" + "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents}) + +if(MINGW) + # This gets us DLL resource information when compiling on MinGW. + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj + COMMAND windres.exe + -D GCC_WINDRES + -I ${CMAKE_CURRENT_SOURCE_DIR} + -I ${CMAKE_CURRENT_BINARY_DIR} + -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj + -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc) + set(ZLIB_SRCS ${ZLIB_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj) +endif(MINGW) + +add_library(zlib ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) +set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) + +set_target_properties(zlib PROPERTIES SOVERSION 1) + +if(NOT CYGWIN) + # This property causes shared libraries on Linux to have the full version + # encoded into their final filename. We disable this on Cygwin because + # it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll + # seems to be the default. + # + # This has no effect with MSVC, on that platform the version info for + # the DLL comes from the resource file win32/zlib1.rc + set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION}) +endif() + +if(UNIX) + # On unix-like platforms the library is almost always called libz + set_target_properties(zlib PROPERTIES OUTPUT_NAME z) +elseif(BUILD_SHARED_LIBS AND WIN32) + # Creates zlib1.dll when building shared library version + set_target_properties(zlib PROPERTIES SUFFIX "1.dll") +endif() + +if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) + install(TARGETS zlib + RUNTIME DESTINATION bin + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib ) +endif() +if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL ) + install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION include) +endif() +if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) + install(FILES zlib.3 DESTINATION share/man/man3) +endif() + +#============================================================================ +# Example binaries +#============================================================================ + +add_executable(example example.c) +target_link_libraries(example zlib) +add_test(example example) + +add_executable(minigzip minigzip.c) +target_link_libraries(minigzip zlib) + +if(HAVE_OFF64_T) + add_executable(example64 example.c) + target_link_libraries(example64 zlib) + set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") + add_test(example64 example64) + + add_executable(minigzip64 minigzip.c) + target_link_libraries(minigzip64 zlib) + set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") +endif() diff --git a/zlib/ChangeLog b/zlib/ChangeLog index aedb9367e08..fd4cae655e3 100644 --- a/zlib/ChangeLog +++ b/zlib/ChangeLog @@ -1,6 +1,359 @@ ChangeLog file for zlib +Changes in 1.2.5 (19 Apr 2010) +- Disable visibility attribute in win32/Makefile.gcc [Bar-Lev] +- Default to libdir as sharedlibdir in configure [Nieder] +- Update copyright dates on modified source files +- Update trees.c to be able to generate modified trees.h +- Exit configure for MinGW, suggesting win32/Makefile.gcc + +Changes in 1.2.4.5 (18 Apr 2010) +- Set sharedlibdir in configure [Torok] +- Set LDFLAGS in Makefile.in [Bar-Lev] +- Avoid mkdir objs race condition in Makefile.in [Bowler] +- Add ZLIB_INTERNAL in front of internal inter-module functions and arrays +- Define ZLIB_INTERNAL to hide internal functions and arrays for GNU C +- Don't use hidden attribute when it is a warning generator (e.g. Solaris) + +Changes in 1.2.4.4 (18 Apr 2010) +- Fix CROSS_PREFIX executable testing, CHOST extract, mingw* [Torok] +- Undefine _LARGEFILE64_SOURCE in zconf.h if it is zero, but not if empty +- Try to use bash or ksh regardless of functionality of /bin/sh +- Fix configure incompatibility with NetBSD sh +- Remove attempt to run under bash or ksh since have better NetBSD fix +- Fix win32/Makefile.gcc for MinGW [Bar-Lev] +- Add diagnostic messages when using CROSS_PREFIX in configure +- Added --sharedlibdir option to configure [Weigelt] +- Use hidden visibility attribute when available [Frysinger] + +Changes in 1.2.4.3 (10 Apr 2010) +- Only use CROSS_PREFIX in configure for ar and ranlib if they exist +- Use CROSS_PREFIX for nm [Bar-Lev] +- Assume _LARGEFILE64_SOURCE defined is equivalent to true +- Avoid use of undefined symbols in #if with && and || +- Make *64 prototypes in gzguts.h consistent with functions +- Add -shared load option for MinGW in configure [Bowler] +- Move z_off64_t to public interface, use instead of off64_t +- Remove ! from shell test in configure (not portable to Solaris) +- Change +0 macro tests to -0 for possibly increased portability + +Changes in 1.2.4.2 (9 Apr 2010) +- Add consistent carriage returns to readme.txt's in masmx86 and masmx64 +- Really provide prototypes for *64 functions when building without LFS +- Only define unlink() in minigzip.c if unistd.h not included +- Update README to point to contrib/vstudio project files +- Move projects/vc6 to old/ and remove projects/ +- Include stdlib.h in minigzip.c for setmode() definition under WinCE +- Clean up assembler builds in win32/Makefile.msc [Rowe] +- Include sys/types.h for Microsoft for off_t definition +- Fix memory leak on error in gz_open() +- Symbolize nm as $NM in configure [Weigelt] +- Use TEST_LDSHARED instead of LDSHARED to link test programs [Weigelt] +- Add +0 to _FILE_OFFSET_BITS and _LFS64_LARGEFILE in case not defined +- Fix bug in gzeof() to take into account unused input data +- Avoid initialization of structures with variables in puff.c +- Updated win32/README-WIN32.txt [Rowe] + +Changes in 1.2.4.1 (28 Mar 2010) +- Remove the use of [a-z] constructs for sed in configure [gentoo 310225] +- Remove $(SHAREDLIB) from LIBS in Makefile.in [Creech] +- Restore "for debugging" comment on sprintf() in gzlib.c +- Remove fdopen for MVS from gzguts.h +- Put new README-WIN32.txt in win32 [Rowe] +- Add check for shell to configure and invoke another shell if needed +- Fix big fat stinking bug in gzseek() on uncompressed files +- Remove vestigial F_OPEN64 define in zutil.h +- Set and check the value of _LARGEFILE_SOURCE and _LARGEFILE64_SOURCE +- Avoid errors on non-LFS systems when applications define LFS macros +- Set EXE to ".exe" in configure for MINGW [Kahle] +- Match crc32() in crc32.c exactly to the prototype in zlib.h [Sherrill] +- Add prefix for cross-compilation in win32/makefile.gcc [Bar-Lev] +- Add DLL install in win32/makefile.gcc [Bar-Lev] +- Allow Linux* or linux* from uname in configure [Bar-Lev] +- Allow ldconfig to be redefined in configure and Makefile.in [Bar-Lev] +- Add cross-compilation prefixes to configure [Bar-Lev] +- Match type exactly in gz_load() invocation in gzread.c +- Match type exactly of zcalloc() in zutil.c to zlib.h alloc_func +- Provide prototypes for *64 functions when building zlib without LFS +- Don't use -lc when linking shared library on MinGW +- Remove errno.h check in configure and vestigial errno code in zutil.h + +Changes in 1.2.4 (14 Mar 2010) +- Fix VER3 extraction in configure for no fourth subversion +- Update zlib.3, add docs to Makefile.in to make .pdf out of it +- Add zlib.3.pdf to distribution +- Don't set error code in gzerror() if passed pointer is NULL +- Apply destination directory fixes to CMakeLists.txt [Lowman] +- Move #cmakedefine's to a new zconf.in.cmakein +- Restore zconf.h for builds that don't use configure or cmake +- Add distclean to dummy Makefile for convenience +- Update and improve INDEX, README, and FAQ +- Update CMakeLists.txt for the return of zconf.h [Lowman] +- Update contrib/vstudio/vc9 and vc10 [Vollant] +- Change libz.dll.a back to libzdll.a in win32/Makefile.gcc +- Apply license and readme changes to contrib/asm686 [Raiter] +- Check file name lengths and add -c option in minigzip.c [Li] +- Update contrib/amd64 and contrib/masmx86/ [Vollant] +- Avoid use of "eof" parameter in trees.c to not shadow library variable +- Update make_vms.com for removal of zlibdefs.h [Zinser] +- Update assembler code and vstudio projects in contrib [Vollant] +- Remove outdated assembler code contrib/masm686 and contrib/asm586 +- Remove old vc7 and vc8 from contrib/vstudio +- Update win32/Makefile.msc, add ZLIB_VER_SUBREVISION [Rowe] +- Fix memory leaks in gzclose_r() and gzclose_w(), file leak in gz_open() +- Add contrib/gcc_gvmat64 for longest_match and inflate_fast [Vollant] +- Remove *64 functions from win32/zlib.def (they're not 64-bit yet) +- Fix bug in void-returning vsprintf() case in gzwrite.c +- Fix name change from inflate.h in contrib/inflate86/inffas86.c +- Check if temporary file exists before removing in make_vms.com [Zinser] +- Fix make install and uninstall for --static option +- Fix usage of _MSC_VER in gzguts.h and zutil.h [Truta] +- Update readme.txt in contrib/masmx64 and masmx86 to assemble + +Changes in 1.2.3.9 (21 Feb 2010) +- Expunge gzio.c +- Move as400 build information to old +- Fix updates in contrib/minizip and contrib/vstudio +- Add const to vsnprintf test in configure to avoid warnings [Weigelt] +- Delete zconf.h (made by configure) [Weigelt] +- Change zconf.in.h to zconf.h.in per convention [Weigelt] +- Check for NULL buf in gzgets() +- Return empty string for gzgets() with len == 1 (like fgets()) +- Fix description of gzgets() in zlib.h for end-of-file, NULL return +- Update minizip to 1.1 [Vollant] +- Avoid MSVC loss of data warnings in gzread.c, gzwrite.c +- Note in zlib.h that gzerror() should be used to distinguish from EOF +- Remove use of snprintf() from gzlib.c +- Fix bug in gzseek() +- Update contrib/vstudio, adding vc9 and vc10 [Kuno, Vollant] +- Fix zconf.h generation in CMakeLists.txt [Lowman] +- Improve comments in zconf.h where modified by configure + +Changes in 1.2.3.8 (13 Feb 2010) +- Clean up text files (tabs, trailing whitespace, etc.) [Oberhumer] +- Use z_off64_t in gz_zero() and gz_skip() to match state->skip +- Avoid comparison problem when sizeof(int) == sizeof(z_off64_t) +- Revert to Makefile.in from 1.2.3.6 (live with the clutter) +- Fix missing error return in gzflush(), add zlib.h note +- Add *64 functions to zlib.map [Levin] +- Fix signed/unsigned comparison in gz_comp() +- Use SFLAGS when testing shared linking in configure +- Add --64 option to ./configure to use -m64 with gcc +- Fix ./configure --help to correctly name options +- Have make fail if a test fails [Levin] +- Avoid buffer overrun in contrib/masmx64/gvmat64.asm [Simpson] +- Remove assembler object files from contrib + +Changes in 1.2.3.7 (24 Jan 2010) +- Always gzopen() with O_LARGEFILE if available +- Fix gzdirect() to work immediately after gzopen() or gzdopen() +- Make gzdirect() more precise when the state changes while reading +- Improve zlib.h documentation in many places +- Catch memory allocation failure in gz_open() +- Complete close operation if seek forward in gzclose_w() fails +- Return Z_ERRNO from gzclose_r() if close() fails +- Return Z_STREAM_ERROR instead of EOF for gzclose() being passed NULL +- Return zero for gzwrite() errors to match zlib.h description +- Return -1 on gzputs() error to match zlib.h description +- Add zconf.in.h to allow recovery from configure modification [Weigelt] +- Fix static library permissions in Makefile.in [Weigelt] +- Avoid warnings in configure tests that hide functionality [Weigelt] +- Add *BSD and DragonFly to Linux case in configure [gentoo 123571] +- Change libzdll.a to libz.dll.a in win32/Makefile.gcc [gentoo 288212] +- Avoid access of uninitialized data for first inflateReset2 call [Gomes] +- Keep object files in subdirectories to reduce the clutter somewhat +- Remove default Makefile and zlibdefs.h, add dummy Makefile +- Add new external functions to Z_PREFIX, remove duplicates, z_z_ -> z_ +- Remove zlibdefs.h completely -- modify zconf.h instead + +Changes in 1.2.3.6 (17 Jan 2010) +- Avoid void * arithmetic in gzread.c and gzwrite.c +- Make compilers happier with const char * for gz_error message +- Avoid unused parameter warning in inflate.c +- Avoid signed-unsigned comparison warning in inflate.c +- Indent #pragma's for traditional C +- Fix usage of strwinerror() in glib.c, change to gz_strwinerror() +- Correct email address in configure for system options +- Update make_vms.com and add make_vms.com to contrib/minizip [Zinser] +- Update zlib.map [Brown] +- Fix Makefile.in for Solaris 10 make of example64 and minizip64 [Torok] +- Apply various fixes to CMakeLists.txt [Lowman] +- Add checks on len in gzread() and gzwrite() +- Add error message for no more room for gzungetc() +- Remove zlib version check in gzwrite() +- Defer compression of gzprintf() result until need to +- Use snprintf() in gzdopen() if available +- Remove USE_MMAP configuration determination (only used by minigzip) +- Remove examples/pigz.c (available separately) +- Update examples/gun.c to 1.6 + +Changes in 1.2.3.5 (8 Jan 2010) +- Add space after #if in zutil.h for some compilers +- Fix relatively harmless bug in deflate_fast() [Exarevsky] +- Fix same problem in deflate_slow() +- Add $(SHAREDLIBV) to LIBS in Makefile.in [Brown] +- Add deflate_rle() for faster Z_RLE strategy run-length encoding +- Add deflate_huff() for faster Z_HUFFMAN_ONLY encoding +- Change name of "write" variable in inffast.c to avoid library collisions +- Fix premature EOF from gzread() in gzio.c [Brown] +- Use zlib header window size if windowBits is 0 in inflateInit2() +- Remove compressBound() call in deflate.c to avoid linking compress.o +- Replace use of errno in gz* with functions, support WinCE [Alves] +- Provide alternative to perror() in minigzip.c for WinCE [Alves] +- Don't use _vsnprintf on later versions of MSVC [Lowman] +- Add CMake build script and input file [Lowman] +- Update contrib/minizip to 1.1 [Svensson, Vollant] +- Moved nintendods directory from contrib to . +- Replace gzio.c with a new set of routines with the same functionality +- Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above +- Update contrib/minizip to 1.1b +- Change gzeof() to return 0 on error instead of -1 to agree with zlib.h + +Changes in 1.2.3.4 (21 Dec 2009) +- Use old school .SUFFIXES in Makefile.in for FreeBSD compatibility +- Update comments in configure and Makefile.in for default --shared +- Fix test -z's in configure [Marquess] +- Build examplesh and minigzipsh when not testing +- Change NULL's to Z_NULL's in deflate.c and in comments in zlib.h +- Import LDFLAGS from the environment in configure +- Fix configure to populate SFLAGS with discovered CFLAGS options +- Adapt make_vms.com to the new Makefile.in [Zinser] +- Add zlib2ansi script for C++ compilation [Marquess] +- Add _FILE_OFFSET_BITS=64 test to make test (when applicable) +- Add AMD64 assembler code for longest match to contrib [Teterin] +- Include options from $SFLAGS when doing $LDSHARED +- Simplify 64-bit file support by introducing z_off64_t type +- Make shared object files in objs directory to work around old Sun cc +- Use only three-part version number for Darwin shared compiles +- Add rc option to ar in Makefile.in for when ./configure not run +- Add -WI,-rpath,. to LDFLAGS for OSF 1 V4* +- Set LD_LIBRARYN32_PATH for SGI IRIX shared compile +- Protect against _FILE_OFFSET_BITS being defined when compiling zlib +- Rename Makefile.in targets allstatic to static and allshared to shared +- Fix static and shared Makefile.in targets to be independent +- Correct error return bug in gz_open() by setting state [Brown] +- Put spaces before ;;'s in configure for better sh compatibility +- Add pigz.c (parallel implementation of gzip) to examples/ +- Correct constant in crc32.c to UL [Leventhal] +- Reject negative lengths in crc32_combine() +- Add inflateReset2() function to work like inflateEnd()/inflateInit2() +- Include sys/types.h for _LARGEFILE64_SOURCE [Brown] +- Correct typo in doc/algorithm.txt [Janik] +- Fix bug in adler32_combine() [Zhu] +- Catch missing-end-of-block-code error in all inflates and in puff + Assures that random input to inflate eventually results in an error +- Added enough.c (calculation of ENOUGH for inftrees.h) to examples/ +- Update ENOUGH and its usage to reflect discovered bounds +- Fix gzerror() error report on empty input file [Brown] +- Add ush casts in trees.c to avoid pedantic runtime errors +- Fix typo in zlib.h uncompress() description [Reiss] +- Correct inflate() comments with regard to automatic header detection +- Remove deprecation comment on Z_PARTIAL_FLUSH (it stays) +- Put new version of gzlog (2.0) in examples with interruption recovery +- Add puff compile option to permit invalid distance-too-far streams +- Add puff TEST command options, ability to read piped input +- Prototype the *64 functions in zlib.h when _FILE_OFFSET_BITS == 64, but + _LARGEFILE64_SOURCE not defined +- Fix Z_FULL_FLUSH to truly erase the past by resetting s->strstart +- Fix deflateSetDictionary() to use all 32K for output consistency +- Remove extraneous #define MIN_LOOKAHEAD in deflate.c (in deflate.h) +- Clear bytes after deflate lookahead to avoid use of uninitialized data +- Change a limit in inftrees.c to be more transparent to Coverity Prevent +- Update win32/zlib.def with exported symbols from zlib.h +- Correct spelling error in zlib.h [Willem] +- Allow Z_BLOCK for deflate() to force a new block +- Allow negative bits in inflatePrime() to delete existing bit buffer +- Add Z_TREES flush option to inflate() to return at end of trees +- Add inflateMark() to return current state information for random access +- Add Makefile for NintendoDS to contrib [Costa] +- Add -w in configure compile tests to avoid spurious warnings [Beucler] +- Fix typos in zlib.h comments for deflateSetDictionary() +- Fix EOF detection in transparent gzread() [Maier] + +Changes in 1.2.3.3 (2 October 2006) +- Make --shared the default for configure, add a --static option +- Add compile option to permit invalid distance-too-far streams +- Add inflateUndermine() function which is required to enable above +- Remove use of "this" variable name for C++ compatibility [Marquess] +- Add testing of shared library in make test, if shared library built +- Use ftello() and fseeko() if available instead of ftell() and fseek() +- Provide two versions of all functions that use the z_off_t type for + binary compatibility -- a normal version and a 64-bit offset version, + per the Large File Support Extension when _LARGEFILE64_SOURCE is + defined; use the 64-bit versions by default when _FILE_OFFSET_BITS + is defined to be 64 +- Add a --uname= option to configure to perhaps help with cross-compiling + +Changes in 1.2.3.2 (3 September 2006) +- Turn off silly Borland warnings [Hay] +- Use off64_t and define _LARGEFILE64_SOURCE when present +- Fix missing dependency on inffixed.h in Makefile.in +- Rig configure --shared to build both shared and static [Teredesai, Truta] +- Remove zconf.in.h and instead create a new zlibdefs.h file +- Fix contrib/minizip/unzip.c non-encrypted after encrypted [Vollant] +- Add treebuild.xml (see http://treebuild.metux.de/) [Weigelt] + +Changes in 1.2.3.1 (16 August 2006) +- Add watcom directory with OpenWatcom make files [Daniel] +- Remove #undef of FAR in zconf.in.h for MVS [Fedtke] +- Update make_vms.com [Zinser] +- Use -fPIC for shared build in configure [Teredesai, Nicholson] +- Use only major version number for libz.so on IRIX and OSF1 [Reinholdtsen] +- Use fdopen() (not _fdopen()) for Interix in zutil.h [BŠck] +- Add some FAQ entries about the contrib directory +- Update the MVS question in the FAQ +- Avoid extraneous reads after EOF in gzio.c [Brown] +- Correct spelling of "successfully" in gzio.c [Randers-Pehrson] +- Add comments to zlib.h about gzerror() usage [Brown] +- Set extra flags in gzip header in gzopen() like deflate() does +- Make configure options more compatible with double-dash conventions + [Weigelt] +- Clean up compilation under Solaris SunStudio cc [Rowe, Reinholdtsen] +- Fix uninstall target in Makefile.in [Truta] +- Add pkgconfig support [Weigelt] +- Use $(DESTDIR) macro in Makefile.in [Reinholdtsen, Weigelt] +- Replace set_data_type() with a more accurate detect_data_type() in + trees.c, according to the txtvsbin.txt document [Truta] +- Swap the order of #include <stdio.h> and #include "zlib.h" in + gzio.c, example.c and minigzip.c [Truta] +- Shut up annoying VS2005 warnings about standard C deprecation [Rowe, + Truta] (where?) +- Fix target "clean" from win32/Makefile.bor [Truta] +- Create .pdb and .manifest files in win32/makefile.msc [Ziegler, Rowe] +- Update zlib www home address in win32/DLL_FAQ.txt [Truta] +- Update contrib/masmx86/inffas32.asm for VS2005 [Vollant, Van Wassenhove] +- Enable browse info in the "Debug" and "ASM Debug" configurations in + the Visual C++ 6 project, and set (non-ASM) "Debug" as default [Truta] +- Add pkgconfig support [Weigelt] +- Add ZLIB_VER_MAJOR, ZLIB_VER_MINOR and ZLIB_VER_REVISION in zlib.h, + for use in win32/zlib1.rc [Polushin, Rowe, Truta] +- Add a document that explains the new text detection scheme to + doc/txtvsbin.txt [Truta] +- Add rfc1950.txt, rfc1951.txt and rfc1952.txt to doc/ [Truta] +- Move algorithm.txt into doc/ [Truta] +- Synchronize FAQ with website +- Fix compressBound(), was low for some pathological cases [Fearnley] +- Take into account wrapper variations in deflateBound() +- Set examples/zpipe.c input and output to binary mode for Windows +- Update examples/zlib_how.html with new zpipe.c (also web site) +- Fix some warnings in examples/gzlog.c and examples/zran.c (it seems + that gcc became pickier in 4.0) +- Add zlib.map for Linux: "All symbols from zlib-1.1.4 remain + un-versioned, the patch adds versioning only for symbols introduced in + zlib-1.2.0 or later. It also declares as local those symbols which are + not designed to be exported." [Levin] +- Update Z_PREFIX list in zconf.in.h, add --zprefix option to configure +- Do not initialize global static by default in trees.c, add a response + NO_INIT_GLOBAL_POINTERS to initialize them if needed [Marquess] +- Don't use strerror() in gzio.c under WinCE [Yakimov] +- Don't use errno.h in zutil.h under WinCE [Yakimov] +- Move arguments for AR to its usage to allow replacing ar [Marot] +- Add HAVE_VISIBILITY_PRAGMA in zconf.in.h for Mozilla [Randers-Pehrson] +- Improve inflateInit() and inflateInit2() documentation +- Fix structure size comment in inflate.h +- Change configure help option from --h* to --help [Santos] + Changes in 1.2.3 (18 July 2005) - Apply security vulnerability fixes to contrib/infback9 as well - Clean up some text files (carriage returns, trailing space) @@ -13,7 +366,7 @@ Changes in 1.2.2.4 (11 July 2005) compile - Fix some spelling errors in comments [Betts] - Correct inflateInit2() error return documentation in zlib.h -- Added zran.c example of compressed data random access to examples +- Add zran.c example of compressed data random access to examples directory, shows use of inflatePrime() - Fix cast for assignments to strm->state in inflate.c and infback.c - Fix zlibCompileFlags() in zutil.c to use 1L for long shifts [Oberhumer] diff --git a/zlib/ChangeLog.gcj b/zlib/ChangeLog.gcj index 7afe93793c2..8cce45d3023 100644 --- a/zlib/ChangeLog.gcj +++ b/zlib/ChangeLog.gcj @@ -1,3 +1,7 @@ +2012-03-02 Matthias Klose <doko@ubuntu.com> + + * Imported zlib 1.2.5; merged local changes. + 2011-11-21 Andreas Tobler <andreast@fgznet.ch> * configure: Regenerate. @@ -3,8 +3,8 @@ If your question is not there, please check the zlib home page -http://www.zlib.org which may have more recent information. -The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html +http://zlib.net/ which may have more recent information. +The lastest zlib FAQ is at http://zlib.net/zlib_faq.html 1. Is zlib Y2K-compliant? @@ -13,54 +13,51 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 2. Where can I get a Windows DLL version? - The zlib sources can be compiled without change to produce a DLL. - See the file win32/DLL_FAQ.txt in the zlib distribution. - Pointers to the precompiled DLL are found in the zlib web site at - http://www.zlib.org. + The zlib sources can be compiled without change to produce a DLL. See the + file win32/DLL_FAQ.txt in the zlib distribution. Pointers to the + precompiled DLL are found in the zlib web site at http://zlib.net/ . 3. Where can I get a Visual Basic interface to zlib? See - * http://www.dogma.net/markn/articles/zlibtool/zlibtool.htm - * contrib/visual-basic.txt in the zlib distribution + * http://marknelson.us/1997/01/01/zlib-engine/ * win32/DLL_FAQ.txt in the zlib distribution 4. compress() returns Z_BUF_ERROR. - Make sure that before the call of compress, the length of the compressed - buffer is equal to the total size of the compressed buffer and not - zero. For Visual Basic, check that this parameter is passed by reference + Make sure that before the call of compress(), the length of the compressed + buffer is equal to the available size of the compressed buffer and not + zero. For Visual Basic, check that this parameter is passed by reference ("as any"), not by value ("as long"). 5. deflate() or inflate() returns Z_BUF_ERROR. - Before making the call, make sure that avail_in and avail_out are not - zero. When setting the parameter flush equal to Z_FINISH, also make sure - that avail_out is big enough to allow processing all pending input. - Note that a Z_BUF_ERROR is not fatal--another call to deflate() or - inflate() can be made with more input or output space. A Z_BUF_ERROR - may in fact be unavoidable depending on how the functions are used, since - it is not possible to tell whether or not there is more output pending - when strm.avail_out returns with zero. + Before making the call, make sure that avail_in and avail_out are not zero. + When setting the parameter flush equal to Z_FINISH, also make sure that + avail_out is big enough to allow processing all pending input. Note that a + Z_BUF_ERROR is not fatal--another call to deflate() or inflate() can be + made with more input or output space. A Z_BUF_ERROR may in fact be + unavoidable depending on how the functions are used, since it is not + possible to tell whether or not there is more output pending when + strm.avail_out returns with zero. See http://zlib.net/zlib_how.html for a + heavily annotated example. 6. Where's the zlib documentation (man pages, etc.)? - It's in zlib.h for the moment, and Francis S. Lin has converted it to a - web page zlib.html. Volunteers to transform this to Unix-style man pages, - please contact us (zlib@gzip.org). Examples of zlib usage are in the files - example.c and minigzip.c. + It's in zlib.h . Examples of zlib usage are in the files example.c and + minigzip.c, with more in examples/ . 7. Why don't you use GNU autoconf or libtool or ...? - Because we would like to keep zlib as a very small and simple - package. zlib is rather portable and doesn't need much configuration. + Because we would like to keep zlib as a very small and simple package. + zlib is rather portable and doesn't need much configuration. 8. I found a bug in zlib. - Most of the time, such problems are due to an incorrect usage of - zlib. Please try to reproduce the problem with a small program and send - the corresponding source to us at zlib@gzip.org . Do not send - multi-megabyte data files without prior agreement. + Most of the time, such problems are due to an incorrect usage of zlib. + Please try to reproduce the problem with a small program and send the + corresponding source to us at zlib@gzip.org . Do not send multi-megabyte + data files without prior agreement. 9. Why do I get "undefined reference to gzputc"? @@ -82,7 +79,7 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 12. Can zlib handle .Z files? - No, sorry. You have to spawn an uncompress or gunzip subprocess, or adapt + No, sorry. You have to spawn an uncompress or gunzip subprocess, or adapt the code of uncompress on your own. 13. How can I make a Unix shared library? @@ -99,8 +96,10 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html However, many flavors of Unix come with a shared zlib already installed. Before going to the trouble of compiling a shared version of zlib and - trying to install it, you may want to check if it's already there! If you - can #include <zlib.h>, it's there. The -lz option will probably link to it. + trying to install it, you may want to check if it's already there! If you + can #include <zlib.h>, it's there. The -lz option will probably link to + it. You can check the version at the top of zlib.h or with the + ZLIB_VERSION symbol defined in zlib.h . 15. I have a question about OttoPDF. @@ -109,8 +108,8 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 16. Can zlib decode Flate data in an Adobe PDF file? - Yes. See http://www.fastio.com/ (ClibPDF), or http://www.pdflib.com/ . - To modify PDF forms, see http://sourceforge.net/projects/acroformtool/ . + Yes. See http://www.pdflib.com/ . To modify PDF forms, see + http://sourceforge.net/projects/acroformtool/ . 17. Why am I getting this "register_frame_info not found" error on Solaris? @@ -121,67 +120,67 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html symbol __register_frame_info: referenced symbol not found The symbol __register_frame_info is not part of zlib, it is generated by - the C compiler (cc or gcc). You must recompile applications using zlib - which have this problem. This problem is specific to Solaris. See + the C compiler (cc or gcc). You must recompile applications using zlib + which have this problem. This problem is specific to Solaris. See http://www.sunfreeware.com for Solaris versions of zlib and applications using zlib. 18. Why does gzip give an error on a file I make with compress/deflate? The compress and deflate functions produce data in the zlib format, which - is different and incompatible with the gzip format. The gz* functions in - zlib on the other hand use the gzip format. Both the zlib and gzip - formats use the same compressed data format internally, but have different - headers and trailers around the compressed data. + is different and incompatible with the gzip format. The gz* functions in + zlib on the other hand use the gzip format. Both the zlib and gzip formats + use the same compressed data format internally, but have different headers + and trailers around the compressed data. 19. Ok, so why are there two different formats? - The gzip format was designed to retain the directory information about - a single file, such as the name and last modification date. The zlib - format on the other hand was designed for in-memory and communication - channel applications, and has a much more compact header and trailer and - uses a faster integrity check than gzip. + The gzip format was designed to retain the directory information about a + single file, such as the name and last modification date. The zlib format + on the other hand was designed for in-memory and communication channel + applications, and has a much more compact header and trailer and uses a + faster integrity check than gzip. 20. Well that's nice, but how do I make a gzip file in memory? You can request that deflate write the gzip format instead of the zlib - format using deflateInit2(). You can also request that inflate decode - the gzip format using inflateInit2(). Read zlib.h for more details. + format using deflateInit2(). You can also request that inflate decode the + gzip format using inflateInit2(). Read zlib.h for more details. 21. Is zlib thread-safe? - Yes. However any library routines that zlib uses and any application- - provided memory allocation routines must also be thread-safe. zlib's gz* + Yes. However any library routines that zlib uses and any application- + provided memory allocation routines must also be thread-safe. zlib's gz* functions use stdio library routines, and most of zlib's functions use the - library memory allocation routines by default. zlib's Init functions allow - for the application to provide custom memory allocation routines. + library memory allocation routines by default. zlib's *Init* functions + allow for the application to provide custom memory allocation routines. Of course, you should only operate on any given zlib or gzip stream from a single thread at a time. 22. Can I use zlib in my commercial application? - Yes. Please read the license in zlib.h. + Yes. Please read the license in zlib.h. 23. Is zlib under the GNU license? - No. Please read the license in zlib.h. + No. Please read the license in zlib.h. 24. The license says that altered source versions must be "plainly marked". So what exactly do I need to do to meet that requirement? - You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h. In + You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h. In particular, the final version number needs to be changed to "f", and an - identification string should be appended to ZLIB_VERSION. Version numbers + identification string should be appended to ZLIB_VERSION. Version numbers x.x.x.f are reserved for modifications to zlib by others than the zlib - maintainers. For example, if the version of the base zlib you are altering + maintainers. For example, if the version of the base zlib you are altering is "1.2.3.4", then in zlib.h you should change ZLIB_VERNUM to 0x123f, and - ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3". You can also + ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3". You can also update the version strings in deflate.c and inftrees.c. For altered source distributions, you should also note the origin and nature of the changes in zlib.h, as well as in ChangeLog and README, along - with the dates of the alterations. The origin should include at least your + with the dates of the alterations. The origin should include at least your name (or your company's name), and an email address to contact for help or issues with the library. @@ -197,105 +196,112 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 26. Will zlib work on a 64-bit machine? - It should. It has been tested on 64-bit machines, and has no dependence - on any data types being limited to 32-bits in length. If you have any + Yes. It has been tested on 64-bit machines, and has no dependence on any + data types being limited to 32-bits in length. If you have any difficulties, please provide a complete problem report to zlib@gzip.org 27. Will zlib decompress data from the PKWare Data Compression Library? - No. The PKWare DCL uses a completely different compressed data format - than does PKZIP and zlib. However, you can look in zlib's contrib/blast + No. The PKWare DCL uses a completely different compressed data format than + does PKZIP and zlib. However, you can look in zlib's contrib/blast directory for a possible solution to your problem. 28. Can I access data randomly in a compressed stream? - No, not without some preparation. If when compressing you periodically - use Z_FULL_FLUSH, carefully write all the pending data at those points, - and keep an index of those locations, then you can start decompression - at those points. You have to be careful to not use Z_FULL_FLUSH too - often, since it can significantly degrade compression. + No, not without some preparation. If when compressing you periodically use + Z_FULL_FLUSH, carefully write all the pending data at those points, and + keep an index of those locations, then you can start decompression at those + points. You have to be careful to not use Z_FULL_FLUSH too often, since it + can significantly degrade compression. Alternatively, you can scan a + deflate stream once to generate an index, and then use that index for + random access. See examples/zran.c . 29. Does zlib work on MVS, OS/390, CICS, etc.? - We don't know for sure. We have heard occasional reports of success on - these systems. If you do use it on one of these, please provide us with - a report, instructions, and patches that we can reference when we get - these questions. Thanks. + It has in the past, but we have not heard of any recent evidence. There + were working ports of zlib 1.1.4 to MVS, but those links no longer work. + If you know of recent, successful applications of zlib on these operating + systems, please let us know. Thanks. -30. Is there some simpler, easier to read version of inflate I can look at - to understand the deflate format? +30. Is there some simpler, easier to read version of inflate I can look at to + understand the deflate format? - First off, you should read RFC 1951. Second, yes. Look in zlib's + First off, you should read RFC 1951. Second, yes. Look in zlib's contrib/puff directory. 31. Does zlib infringe on any patents? - As far as we know, no. In fact, that was originally the whole point behind - zlib. Look here for some more information: + As far as we know, no. In fact, that was originally the whole point behind + zlib. Look here for some more information: http://www.gzip.org/#faq11 32. Can zlib work with greater than 4 GB of data? - Yes. inflate() and deflate() will process any amount of data correctly. + Yes. inflate() and deflate() will process any amount of data correctly. Each call of inflate() or deflate() is limited to input and output chunks of the maximum value that can be stored in the compiler's "unsigned int" - type, but there is no limit to the number of chunks. Note however that the - strm.total_in and strm_total_out counters may be limited to 4 GB. These + type, but there is no limit to the number of chunks. Note however that the + strm.total_in and strm_total_out counters may be limited to 4 GB. These counters are provided as a convenience and are not used internally by - inflate() or deflate(). The application can easily set up its own counters + inflate() or deflate(). The application can easily set up its own counters updated after each call of inflate() or deflate() to count beyond 4 GB. compress() and uncompress() may be limited to 4 GB, since they operate in a - single call. gzseek() and gztell() may be limited to 4 GB depending on how - zlib is compiled. See the zlibCompileFlags() function in zlib.h. + single call. gzseek() and gztell() may be limited to 4 GB depending on how + zlib is compiled. See the zlibCompileFlags() function in zlib.h. - The word "may" appears several times above since there is a 4 GB limit - only if the compiler's "long" type is 32 bits. If the compiler's "long" - type is 64 bits, then the limit is 16 exabytes. + The word "may" appears several times above since there is a 4 GB limit only + if the compiler's "long" type is 32 bits. If the compiler's "long" type is + 64 bits, then the limit is 16 exabytes. 33. Does zlib have any security vulnerabilities? - The only one that we are aware of is potentially in gzprintf(). If zlib - is compiled to use sprintf() or vsprintf(), then there is no protection - against a buffer overflow of a 4K string space, other than the caller of - gzprintf() assuring that the output will not exceed 4K. On the other - hand, if zlib is compiled to use snprintf() or vsnprintf(), which should - normally be the case, then there is no vulnerability. The ./configure - script will display warnings if an insecure variation of sprintf() will - be used by gzprintf(). Also the zlibCompileFlags() function will return - information on what variant of sprintf() is used by gzprintf(). + The only one that we are aware of is potentially in gzprintf(). If zlib is + compiled to use sprintf() or vsprintf(), then there is no protection + against a buffer overflow of an 8K string space (or other value as set by + gzbuffer()), other than the caller of gzprintf() assuring that the output + will not exceed 8K. On the other hand, if zlib is compiled to use + snprintf() or vsnprintf(), which should normally be the case, then there is + no vulnerability. The ./configure script will display warnings if an + insecure variation of sprintf() will be used by gzprintf(). Also the + zlibCompileFlags() function will return information on what variant of + sprintf() is used by gzprintf(). If you don't have snprintf() or vsnprintf() and would like one, you can find a portable implementation here: http://www.ijs.si/software/snprintf/ - Note that you should be using the most recent version of zlib. Versions - 1.1.3 and before were subject to a double-free vulnerability. + Note that you should be using the most recent version of zlib. Versions + 1.1.3 and before were subject to a double-free vulnerability, and versions + 1.2.1 and 1.2.2 were subject to an access exception when decompressing + invalid compressed data. 34. Is there a Java version of zlib? Probably what you want is to use zlib in Java. zlib is already included as part of the Java SDK in the java.util.zip package. If you really want a version of zlib written in the Java language, look on the zlib home - page for links: http://www.zlib.org/ + page for links: http://zlib.net/ . 35. I get this or that compiler or source-code scanner warning when I crank it up to maximally-pedantic. Can't you guys write proper code? Many years ago, we gave up attempting to avoid warnings on every compiler - in the universe. It just got to be a waste of time, and some compilers - were downright silly. So now, we simply make sure that the code always - works. + in the universe. It just got to be a waste of time, and some compilers + were downright silly as well as contradicted each other. So now, we simply + make sure that the code always works. 36. Valgrind (or some similar memory access checker) says that deflate is performing a conditional jump that depends on an uninitialized value. Isn't that a bug? - No. That is intentional for performance reasons, and the output of - deflate is not affected. This only started showing up recently since - zlib 1.2.x uses malloc() by default for allocations, whereas earlier - versions used calloc(), which zeros out the allocated memory. + No. That is intentional for performance reasons, and the output of deflate + is not affected. This only started showing up recently since zlib 1.2.x + uses malloc() by default for allocations, whereas earlier versions used + calloc(), which zeros out the allocated memory. Even though the code was + correct, versions 1.2.4 and later was changed to not stimulate these + checkers. 37. Will zlib read the (insert any ancient or arcane format here) compressed data format? @@ -305,20 +311,21 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 38. How can I encrypt/decrypt zip files with zlib? - zlib doesn't support encryption. The original PKZIP encryption is very weak - and can be broken with freely available programs. To get strong encryption, - use GnuPG, http://www.gnupg.org/ , which already includes zlib compression. - For PKZIP compatible "encryption", look at http://www.info-zip.org/ + zlib doesn't support encryption. The original PKZIP encryption is very + weak and can be broken with freely available programs. To get strong + encryption, use GnuPG, http://www.gnupg.org/ , which already includes zlib + compression. For PKZIP compatible "encryption", look at + http://www.info-zip.org/ 39. What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings? - "gzip" is the gzip format, and "deflate" is the zlib format. They should - probably have called the second one "zlib" instead to avoid confusion - with the raw deflate compressed data format. While the HTTP 1.1 RFC 2616 + "gzip" is the gzip format, and "deflate" is the zlib format. They should + probably have called the second one "zlib" instead to avoid confusion with + the raw deflate compressed data format. While the HTTP 1.1 RFC 2616 correctly points to the zlib specification in RFC 1950 for the "deflate" transfer encoding, there have been reports of servers and browsers that incorrectly produce or expect raw deflate data per the deflate - specficiation in RFC 1951, most notably Microsoft. So even though the + specficiation in RFC 1951, most notably Microsoft. So even though the "deflate" transfer encoding using the zlib format would be the more efficient approach (and in fact exactly what the zlib format was designed for), using the "gzip" transfer encoding is probably more reliable due to @@ -328,12 +335,32 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 40. Does zlib support the new "Deflate64" format introduced by PKWare? - No. PKWare has apparently decided to keep that format proprietary, since - they have not documented it as they have previous compression formats. - In any case, the compression improvements are so modest compared to other - more modern approaches, that it's not worth the effort to implement. + No. PKWare has apparently decided to keep that format proprietary, since + they have not documented it as they have previous compression formats. In + any case, the compression improvements are so modest compared to other more + modern approaches, that it's not worth the effort to implement. -41. Can you please sign these lengthy legal documents and fax them back to us +41. I'm having a problem with the zip functions in zlib, can you help? + + There are no zip functions in zlib. You are probably using minizip by + Giles Vollant, which is found in the contrib directory of zlib. It is not + part of zlib. In fact none of the stuff in contrib is part of zlib. The + files in there are not supported by the zlib authors. You need to contact + the authors of the respective contribution for help. + +42. The match.asm code in contrib is under the GNU General Public License. + Since it's part of zlib, doesn't that mean that all of zlib falls under the + GNU GPL? + + No. The files in contrib are not part of zlib. They were contributed by + other authors and are provided as a convenience to the user within the zlib + distribution. Each item in contrib has its own license. + +43. Is zlib subject to export controls? What is its ECCN? + + zlib is not subject to export controls, and so is classified as EAR99. + +44. Can you please sign these lengthy legal documents and fax them back to us so that we can use your software in our product? No. Go away. Shoo. diff --git a/zlib/INDEX b/zlib/INDEX index 0587e5902bd..f6c51ca1759 100644 --- a/zlib/INDEX +++ b/zlib/INDEX @@ -1,23 +1,32 @@ +CMakeLists.txt cmake build file ChangeLog history of changes FAQ Frequently Asked Questions about zlib INDEX this file -Makefile makefile for Unix (generated by configure) -Makefile.in makefile for Unix (template for configure) +Makefile dummy Makefile that tells you to ./configure +Makefile.in template for Unix Makefile README guess what -algorithm.txt description of the (de)compression algorithm configure configure script for Unix -zconf.in.h template for zconf.h (used by configure) +make_vms.com makefile for VMS +treebuild.xml XML description of source file dependencies +zconf.h.cmakein zconf.h template for cmake +zconf.h.in zconf.h template for configure +zlib.3 Man page for zlib +zlib.3.pdf Man page in PDF format +zlib.map Linux symbol information +zlib.pc.in Template for pkg-config descriptor +zlib2ansi perl script to convert source files for C++ compilation amiga/ makefiles for Amiga SAS C -as400/ makefiles for IBM AS/400 +doc/ documentation for formats and algorithms msdos/ makefiles for MSDOS +nintendods/ makefile for Nintendo DS old/ makefiles for various architectures and zlib documentation files that have not yet been updated for zlib 1.2.x -projects/ projects for various Integrated Development Environments qnx/ makefiles for QNX +watcom/ makefiles for OpenWatcom win32/ makefiles for Windows - zlib public header files (must be kept): + zlib public header files (required for library use): zconf.h zlib.h @@ -28,7 +37,11 @@ crc32.c crc32.h deflate.c deflate.h -gzio.c +gzclose.c +gzguts.h +gzlib.c +gzread.c +gzwrite.c infback.c inffast.c inffast.h @@ -46,6 +59,7 @@ zutil.h source files for sample programs: example.c minigzip.c +See examples/README.examples for more unsupported contribution by third parties See contrib/README.contrib diff --git a/zlib/Makefile.am b/zlib/Makefile.am index 55418e497a9..a9c42cb2cf5 100644 --- a/zlib/Makefile.am +++ b/zlib/Makefile.am @@ -5,9 +5,10 @@ AUTOMAKE_OPTIONS = 1.8 cygnus ACLOCAL_AMFLAGS = -I .. -I ../config ZLIB_SOURCES = adler32.c compress.c crc32.c crc32.h deflate.c \ -deflate.h gzio.c infback.c inffast.c inffast.h inffixed.h inflate.c \ +deflate.h gzguts.h gzread.c gzclose.c gzwrite.c gzlib.c \ +infback.c inffast.c inffast.h inffixed.h inflate.c \ inflate.h inftrees.c inftrees.h trees.c trees.h uncompr.c zconf.h \ -zconf.in.h zlib.h zutil.c zutil.h +zconf.h.in zlib.h zutil.c zutil.h if TARGET_LIBRARY noinst_LTLIBRARIES = libzgcj_convenience.la diff --git a/zlib/Makefile.in b/zlib/Makefile.in index 20b25499e58..f5ef37a647f 100644 --- a/zlib/Makefile.in +++ b/zlib/Makefile.in @@ -84,17 +84,19 @@ libz_a_AR = $(AR) $(ARFLAGS) libz_a_LIBADD = am__objects_1 = libz_a-adler32.$(OBJEXT) libz_a-compress.$(OBJEXT) \ libz_a-crc32.$(OBJEXT) libz_a-deflate.$(OBJEXT) \ - libz_a-gzio.$(OBJEXT) libz_a-infback.$(OBJEXT) \ - libz_a-inffast.$(OBJEXT) libz_a-inflate.$(OBJEXT) \ - libz_a-inftrees.$(OBJEXT) libz_a-trees.$(OBJEXT) \ - libz_a-uncompr.$(OBJEXT) libz_a-zutil.$(OBJEXT) + libz_a-gzread.$(OBJEXT) libz_a-gzclose.$(OBJEXT) \ + libz_a-gzwrite.$(OBJEXT) libz_a-gzlib.$(OBJEXT) \ + libz_a-infback.$(OBJEXT) libz_a-inffast.$(OBJEXT) \ + libz_a-inflate.$(OBJEXT) libz_a-inftrees.$(OBJEXT) \ + libz_a-trees.$(OBJEXT) libz_a-uncompr.$(OBJEXT) \ + libz_a-zutil.$(OBJEXT) @TARGET_LIBRARY_FALSE@am_libz_a_OBJECTS = $(am__objects_1) libz_a_OBJECTS = $(am_libz_a_OBJECTS) LTLIBRARIES = $(noinst_LTLIBRARIES) libzgcj_convenience_la_LIBADD = -am__objects_2 = adler32.lo compress.lo crc32.lo deflate.lo gzio.lo \ - infback.lo inffast.lo inflate.lo inftrees.lo trees.lo \ - uncompr.lo zutil.lo +am__objects_2 = adler32.lo compress.lo crc32.lo deflate.lo gzread.lo \ + gzclose.lo gzwrite.lo gzlib.lo infback.lo inffast.lo \ + inflate.lo inftrees.lo trees.lo uncompr.lo zutil.lo @TARGET_LIBRARY_TRUE@am_libzgcj_convenience_la_OBJECTS = \ @TARGET_LIBRARY_TRUE@ $(am__objects_2) libzgcj_convenience_la_OBJECTS = $(am_libzgcj_convenience_la_OBJECTS) @@ -244,9 +246,10 @@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.8 cygnus ACLOCAL_AMFLAGS = -I .. -I ../config ZLIB_SOURCES = adler32.c compress.c crc32.c crc32.h deflate.c \ -deflate.h gzio.c infback.c inffast.c inffast.h inffixed.h inflate.c \ +deflate.h gzguts.h gzread.c gzclose.c gzwrite.c gzlib.c \ +infback.c inffast.c inffast.h inffixed.h inflate.c \ inflate.h inftrees.c inftrees.h trees.c trees.h uncompr.c zconf.h \ -zconf.in.h zlib.h zutil.c zutil.h +zconf.h.in zlib.h zutil.c zutil.h @TARGET_LIBRARY_TRUE@noinst_LTLIBRARIES = libzgcj_convenience.la @TARGET_LIBRARY_TRUE@libzgcj_convenience_la_SOURCES = $(ZLIB_SOURCES) @@ -420,11 +423,29 @@ libz_a-deflate.o: deflate.c libz_a-deflate.obj: deflate.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-deflate.obj `if test -f 'deflate.c'; then $(CYGPATH_W) 'deflate.c'; else $(CYGPATH_W) '$(srcdir)/deflate.c'; fi` -libz_a-gzio.o: gzio.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-gzio.o `test -f 'gzio.c' || echo '$(srcdir)/'`gzio.c +libz_a-gzread.o: gzread.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-gzread.o `test -f 'gzread.c' || echo '$(srcdir)/'`gzread.c -libz_a-gzio.obj: gzio.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-gzio.obj `if test -f 'gzio.c'; then $(CYGPATH_W) 'gzio.c'; else $(CYGPATH_W) '$(srcdir)/gzio.c'; fi` +libz_a-gzread.obj: gzread.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-gzread.obj `if test -f 'gzread.c'; then $(CYGPATH_W) 'gzread.c'; else $(CYGPATH_W) '$(srcdir)/gzread.c'; fi` + +libz_a-gzclose.o: gzclose.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-gzclose.o `test -f 'gzclose.c' || echo '$(srcdir)/'`gzclose.c + +libz_a-gzclose.obj: gzclose.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-gzclose.obj `if test -f 'gzclose.c'; then $(CYGPATH_W) 'gzclose.c'; else $(CYGPATH_W) '$(srcdir)/gzclose.c'; fi` + +libz_a-gzwrite.o: gzwrite.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-gzwrite.o `test -f 'gzwrite.c' || echo '$(srcdir)/'`gzwrite.c + +libz_a-gzwrite.obj: gzwrite.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-gzwrite.obj `if test -f 'gzwrite.c'; then $(CYGPATH_W) 'gzwrite.c'; else $(CYGPATH_W) '$(srcdir)/gzwrite.c'; fi` + +libz_a-gzlib.o: gzlib.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-gzlib.o `test -f 'gzlib.c' || echo '$(srcdir)/'`gzlib.c + +libz_a-gzlib.obj: gzlib.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-gzlib.obj `if test -f 'gzlib.c'; then $(CYGPATH_W) 'gzlib.c'; else $(CYGPATH_W) '$(srcdir)/gzlib.c'; fi` libz_a-infback.o: infback.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libz_a_CFLAGS) $(CFLAGS) -c -o libz_a-infback.o `test -f 'infback.c' || echo '$(srcdir)/'`infback.c diff --git a/zlib/README b/zlib/README index 0f171029d20..2070218cf1e 100644 --- a/zlib/README +++ b/zlib/README @@ -3,57 +3,53 @@ shipped with GCC as convenience. ZLIB DATA COMPRESSION LIBRARY -zlib 1.2.3 is a general purpose data compression library. All the code is +zlib 1.2.5 is a general purpose data compression library. All the code is thread safe. The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) -and rfc1952.txt (gzip format). These documents are also available in other -formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html +and rfc1952.txt (gzip format). All functions of the compression library are documented in the file zlib.h -(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example +(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example of the library is given in the file example.c which also tests that the library -is working correctly. Another example is given in the file minigzip.c. The +is working correctly. Another example is given in the file minigzip.c. The compression library itself is composed of all source files except example.c and minigzip.c. To compile all files and run the test program, follow the instructions given at -the top of Makefile. In short "make test; make install" should work for most -machines. For Unix: "./configure; make test; make install". For MSDOS, use one -of the special makefiles such as Makefile.msc. For VMS, use make_vms.com. +the top of Makefile.in. In short "./configure; make test", and if that goes +well, "make install" should work for most flavors of Unix. For Windows, use one +of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use +make_vms.com. Questions about zlib should be sent to <zlib@gzip.org>, or to Gilles Vollant -<info@winimage.com> for the Windows DLL version. The zlib home page is -http://www.zlib.org or http://www.gzip.org/zlib/ Before reporting a problem, -please check this site to verify that you have the latest version of zlib; -otherwise get the latest version and check whether the problem still exists or -not. +<info@winimage.com> for the Windows DLL version. The zlib home page is +http://zlib.net/ . Before reporting a problem, please check this site to +verify that you have the latest version of zlib; otherwise get the latest +version and check whether the problem still exists or not. -PLEASE read the zlib FAQ http://www.gzip.org/zlib/zlib_faq.html before asking -for help. +PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help. -Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997 -issue of Dr. Dobb's Journal; a copy of the article is available in -http://dogma.net/markn/articles/zlibtool/zlibtool.htm +Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997 +issue of Dr. Dobb's Journal; a copy of the article is available at +http://marknelson.us/1997/01/01/zlib-engine/ . -The changes made in version 1.2.3 are documented in the file ChangeLog. +The changes made in version 1.2.5 are documented in the file ChangeLog. -Unsupported third party contributions are provided in directory "contrib". +Unsupported third party contributions are provided in directory contrib/ . -A Java implementation of zlib is available in the Java Development Kit -http://java.sun.com/j2se/1.4.2/docs/api/java/util/zip/package-summary.html -See the zlib home page http://www.zlib.org for details. +zlib is available in Java using the java.util.zip package, documented at +http://java.sun.com/developer/technicalArticles/Programming/compression/ . -A Perl interface to zlib written by Paul Marquess <pmqs@cpan.org> is in the -CPAN (Comprehensive Perl Archive Network) sites -http://www.cpan.org/modules/by-module/Compress/ +A Perl interface to zlib written by Paul Marquess <pmqs@cpan.org> is available +at CPAN (Comprehensive Perl Archive Network) sites, including +http://search.cpan.org/~pmqs/IO-Compress-Zlib/ . A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is available in Python 1.5 and later versions, see -http://www.python.org/doc/lib/module-zlib.html +http://www.python.org/doc/lib/module-zlib.html . -A zlib binding for TCL written by Andreas Kupries <a.kupries@westend.com> is -availlable at http://www.oche.de/~akupries/soft/trf/trf_zip.html +zlib is built into tcl: http://wiki.tcl.tk/4610 . An experimental package to read and write files in .zip format, written on top of zlib by Gilles Vollant <info@winimage.com>, is available in the @@ -77,25 +73,21 @@ Notes for some targets: - zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with other compilers. Use "make test" to check your compiler. -- gzdopen is not supported on RISCOS, BEOS and by some Mac compilers. +- gzdopen is not supported on RISCOS or BEOS. - For PalmOs, see http://palmzlib.sourceforge.net/ -- When building a shared, i.e. dynamic library on Mac OS X, the library must be - installed before testing (do "make install" before "make test"), since the - library location is specified in the library. - Acknowledgments: - The deflate format used by zlib was defined by Phil Katz. The deflate - and zlib specifications were written by L. Peter Deutsch. Thanks to all the - people who reported problems and suggested various improvements in zlib; - they are too numerous to cite here. + The deflate format used by zlib was defined by Phil Katz. The deflate and + zlib specifications were written by L. Peter Deutsch. Thanks to all the + people who reported problems and suggested various improvements in zlib; they + are too numerous to cite here. Copyright notice: - (C) 1995-2004 Jean-loup Gailly and Mark Adler + (C) 1995-2010 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -116,13 +108,11 @@ Copyright notice: Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu -If you use the zlib library in a product, we would appreciate *not* -receiving lengthy legal documents to sign. The sources are provided -for free but without warranty of any kind. The library has been -entirely written by Jean-loup Gailly and Mark Adler; it does not -include third-party code. +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. -If you redistribute modified sources, we would appreciate that you include -in the file ChangeLog history information documenting your changes. Please -read the FAQ for more information on the distribution of modified source -versions. +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. diff --git a/zlib/adler32.c b/zlib/adler32.c index 2aec8514131..c772d935184 100644 --- a/zlib/adler32.c +++ b/zlib/adler32.c @@ -1,12 +1,15 @@ /* adler32.c -- compute the Adler-32 checksum of a data stream - * Copyright (C) 1995-2004 Mark Adler + * Copyright (C) 1995-2007 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id: adler32.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */ -#define ZLIB_INTERNAL -#include "zlib.h" +#include "zutil.h" + +#define local static + +local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2); #define BASE 65521UL /* largest prime smaller than 65536 */ #define NMAX 5552 @@ -125,10 +128,10 @@ uLong ZEXPORT adler32(adler, buf, len) } /* ========================================================================= */ -uLong ZEXPORT adler32_combine(adler1, adler2, len2) +local uLong adler32_combine_(adler1, adler2, len2) uLong adler1; uLong adler2; - z_off_t len2; + z_off64_t len2; { unsigned long sum1; unsigned long sum2; @@ -141,9 +144,26 @@ uLong ZEXPORT adler32_combine(adler1, adler2, len2) MOD(sum2); sum1 += (adler2 & 0xffff) + BASE - 1; sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem; - if (sum1 > BASE) sum1 -= BASE; - if (sum1 > BASE) sum1 -= BASE; - if (sum2 > (BASE << 1)) sum2 -= (BASE << 1); - if (sum2 > BASE) sum2 -= BASE; + if (sum1 >= BASE) sum1 -= BASE; + if (sum1 >= BASE) sum1 -= BASE; + if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1); + if (sum2 >= BASE) sum2 -= BASE; return sum1 | (sum2 << 16); } + +/* ========================================================================= */ +uLong ZEXPORT adler32_combine(adler1, adler2, len2) + uLong adler1; + uLong adler2; + z_off_t len2; +{ + return adler32_combine_(adler1, adler2, len2); +} + +uLong ZEXPORT adler32_combine64(adler1, adler2, len2) + uLong adler1; + uLong adler2; + z_off64_t len2; +{ + return adler32_combine_(adler1, adler2, len2); +} diff --git a/zlib/amiga/Makefile.pup b/zlib/amiga/Makefile.pup index 3f7e15537f1..8940c120fbb 100644 --- a/zlib/amiga/Makefile.pup +++ b/zlib/amiga/Makefile.pup @@ -14,8 +14,8 @@ LDFLAGS = -o LDLIBS = LIB:scppc.a LIB:end.o RM = delete quiet -OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ - zutil.o inflate.o infback.o inftrees.o inffast.o +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o TEST_OBJS = example.o minigzip.o @@ -55,7 +55,10 @@ compress.o: zlib.h zconf.h crc32.o: crc32.h zlib.h zconf.h deflate.o: deflate.h zutil.h zlib.h zconf.h example.o: zlib.h zconf.h -gzio.o: zutil.h zlib.h zconf.h +gzclose.o: zlib.h zconf.h gzguts.h +gzlib.o: zlib.h zconf.h gzguts.h +gzread.o: zlib.h zconf.h gzguts.h +gzwrite.o: zlib.h zconf.h gzguts.h inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h diff --git a/zlib/amiga/Makefile.sas b/zlib/amiga/Makefile.sas index 296ef48a22b..749e2915271 100644 --- a/zlib/amiga/Makefile.sas +++ b/zlib/amiga/Makefile.sas @@ -13,8 +13,8 @@ SCOPTIONS=OPTSCHED OPTINLINE OPTALIAS OPTTIME OPTINLOCAL STRMERGE \ NOICONS PARMS=BOTH NOSTACKCHECK UTILLIB NOVERSION ERRORREXX \ DEF=POSTINC -OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ - zutil.o inflate.o infback.o inftrees.o inffast.o +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o TEST_OBJS = example.o minigzip.o @@ -54,7 +54,10 @@ compress.o: zlib.h zconf.h crc32.o: crc32.h zlib.h zconf.h deflate.o: deflate.h zutil.h zlib.h zconf.h example.o: zlib.h zconf.h -gzio.o: zutil.h zlib.h zconf.h +gzclose.o: zlib.h zconf.h gzguts.h +gzlib.o: zlib.h zconf.h gzguts.h +gzread.o: zlib.h zconf.h gzguts.h +gzwrite.o: zlib.h zconf.h gzguts.h inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h diff --git a/zlib/compress.c b/zlib/compress.c index 08f276718fa..7de97663f9e 100644 --- a/zlib/compress.c +++ b/zlib/compress.c @@ -1,5 +1,5 @@ /* compress.c -- compress a memory buffer - * Copyright (C) 1995-2003 Jean-loup Gailly. + * Copyright (C) 1995-2005 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -75,5 +75,6 @@ int ZEXPORT compress (dest, destLen, source, sourceLen) uLong ZEXPORT compressBound (sourceLen) uLong sourceLen; { - return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 11; + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + + (sourceLen >> 25) + 13; } diff --git a/zlib/contrib/README.contrib b/zlib/contrib/README.contrib index 20afc621541..dd2285d960a 100644 --- a/zlib/contrib/README.contrib +++ b/zlib/contrib/README.contrib @@ -8,7 +8,10 @@ ada/ by Dmitriy Anisimkov <anisimkov@yahoo.com> Support for Ada See http://zlib-ada.sourceforge.net/ -asm586/ +amd64/ by Mikhail Teterin <mi@ALDAN.algebra.com> + asm code for AMD64 + See patch at http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/96393 + asm686/ by Brian Raiter <breadbox@muppetlabs.com> asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax See http://www.muppetlabs.com/~breadbox/software/assembly.html @@ -22,6 +25,10 @@ delphi/ by Cosmin Truta <cosmint@cs.ubbcluj.ro> dotzlib/ by Henrik Ravn <henrik@ravn.com> Support for Microsoft .Net and Visual C++ .Net +gcc_gvmat64/by Gilles Vollant <info@winimage.com> + GCC Version of x86 64-bit (AMD64 and Intel EM64t) code for x64 + assembler to replace longest_match() and inflate_fast() + infback9/ by Mark Adler <madler@alumni.caltech.edu> Unsupported diffs to infback to decode the deflate64 format @@ -38,20 +45,19 @@ iostream3/ by Ludwig Schwardt <schwardt@sun.ac.za> and Kevin Ruland <kevin@rodin.wustl.edu> Yet another C++ I/O streams interface -masm686/ by Dan Higdon <hdan@kinesoft.com> - and Chuck Walbourn <chuckw@kinesoft.com> - asm code for Pentium Pro/PII, using the MASM syntax - masmx64/ by Gilles Vollant <info@winimage.com> - x86 64-bit (AMD64 and Intel EM64t) code for x64 assembler to - replace longest_match() and inflate_fast() + x86 64-bit (AMD64 and Intel EM64t) code for x64 assembler to + replace longest_match() and inflate_fast(), also masm x86 + 64-bits translation of Chris Anderson inflate_fast() masmx86/ by Gilles Vollant <info@winimage.com> x86 asm code to replace longest_match() and inflate_fast(), - for Visual C++ and MASM + for Visual C++ and MASM (32 bits). + Based on Brian Raiter (asm686) and Chris Anderson (inflate86) minizip/ by Gilles Vollant <info@winimage.com> Mini zip and unzip based on zlib + Includes Zip64 support by Mathias Svensson <mathias@result42.com> See http://www.winimage.com/zLibDll/unzip.html pascal/ by Bob Dellaca <bobdl@xtra.co.nz> et al. diff --git a/zlib/contrib/amd64/amd64-match.S b/zlib/contrib/amd64/amd64-match.S new file mode 100644 index 00000000000..81d4a1c9494 --- /dev/null +++ b/zlib/contrib/amd64/amd64-match.S @@ -0,0 +1,452 @@ +/* + * match.S -- optimized version of longest_match() + * based on the similar work by Gilles Vollant, and Brian Raiter, written 1998 + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the BSD License. Use by owners of Che Guevarra + * parafernalia is prohibited, where possible, and highly discouraged + * elsewhere. + */ + +#ifndef NO_UNDERLINE +# define match_init _match_init +# define longest_match _longest_match +#endif + +#define scanend ebx +#define scanendw bx +#define chainlenwmask edx /* high word: current chain len low word: s->wmask */ +#define curmatch rsi +#define curmatchd esi +#define windowbestlen r8 +#define scanalign r9 +#define scanalignd r9d +#define window r10 +#define bestlen r11 +#define bestlend r11d +#define scanstart r12d +#define scanstartw r12w +#define scan r13 +#define nicematch r14d +#define limit r15 +#define limitd r15d +#define prev rcx + +/* + * The 258 is a "magic number, not a parameter -- changing it + * breaks the hell loose + */ +#define MAX_MATCH (258) +#define MIN_MATCH (3) +#define MIN_LOOKAHEAD (MAX_MATCH + MIN_MATCH + 1) +#define MAX_MATCH_8 ((MAX_MATCH + 7) & ~7) + +/* stack frame offsets */ +#define LocalVarsSize (112) +#define _chainlenwmask ( 8-LocalVarsSize)(%rsp) +#define _windowbestlen (16-LocalVarsSize)(%rsp) +#define save_r14 (24-LocalVarsSize)(%rsp) +#define save_rsi (32-LocalVarsSize)(%rsp) +#define save_rbx (40-LocalVarsSize)(%rsp) +#define save_r12 (56-LocalVarsSize)(%rsp) +#define save_r13 (64-LocalVarsSize)(%rsp) +#define save_r15 (80-LocalVarsSize)(%rsp) + + +.globl match_init, longest_match + +/* + * On AMD64 the first argument of a function (in our case -- the pointer to + * deflate_state structure) is passed in %rdi, hence our offsets below are + * all off of that. + */ + +/* you can check the structure offset by running + +#include <stdlib.h> +#include <stdio.h> +#include "deflate.h" + +void print_depl() +{ +deflate_state ds; +deflate_state *s=&ds; +printf("size pointer=%u\n",(int)sizeof(void*)); + +printf("#define dsWSize (%3u)(%%rdi)\n",(int)(((char*)&(s->w_size))-((char*)s))); +printf("#define dsWMask (%3u)(%%rdi)\n",(int)(((char*)&(s->w_mask))-((char*)s))); +printf("#define dsWindow (%3u)(%%rdi)\n",(int)(((char*)&(s->window))-((char*)s))); +printf("#define dsPrev (%3u)(%%rdi)\n",(int)(((char*)&(s->prev))-((char*)s))); +printf("#define dsMatchLen (%3u)(%%rdi)\n",(int)(((char*)&(s->match_length))-((char*)s))); +printf("#define dsPrevMatch (%3u)(%%rdi)\n",(int)(((char*)&(s->prev_match))-((char*)s))); +printf("#define dsStrStart (%3u)(%%rdi)\n",(int)(((char*)&(s->strstart))-((char*)s))); +printf("#define dsMatchStart (%3u)(%%rdi)\n",(int)(((char*)&(s->match_start))-((char*)s))); +printf("#define dsLookahead (%3u)(%%rdi)\n",(int)(((char*)&(s->lookahead))-((char*)s))); +printf("#define dsPrevLen (%3u)(%%rdi)\n",(int)(((char*)&(s->prev_length))-((char*)s))); +printf("#define dsMaxChainLen (%3u)(%%rdi)\n",(int)(((char*)&(s->max_chain_length))-((char*)s))); +printf("#define dsGoodMatch (%3u)(%%rdi)\n",(int)(((char*)&(s->good_match))-((char*)s))); +printf("#define dsNiceMatch (%3u)(%%rdi)\n",(int)(((char*)&(s->nice_match))-((char*)s))); +} + +*/ + + +/* + to compile for XCode 3.2 on MacOSX x86_64 + - run "gcc -g -c -DXCODE_MAC_X64_STRUCTURE amd64-match.S" + */ + + +#ifndef CURRENT_LINX_XCODE_MAC_X64_STRUCTURE +#define dsWSize ( 68)(%rdi) +#define dsWMask ( 76)(%rdi) +#define dsWindow ( 80)(%rdi) +#define dsPrev ( 96)(%rdi) +#define dsMatchLen (144)(%rdi) +#define dsPrevMatch (148)(%rdi) +#define dsStrStart (156)(%rdi) +#define dsMatchStart (160)(%rdi) +#define dsLookahead (164)(%rdi) +#define dsPrevLen (168)(%rdi) +#define dsMaxChainLen (172)(%rdi) +#define dsGoodMatch (188)(%rdi) +#define dsNiceMatch (192)(%rdi) + +#else + +#ifndef STRUCT_OFFSET +# define STRUCT_OFFSET (0) +#endif + + +#define dsWSize ( 56 + STRUCT_OFFSET)(%rdi) +#define dsWMask ( 64 + STRUCT_OFFSET)(%rdi) +#define dsWindow ( 72 + STRUCT_OFFSET)(%rdi) +#define dsPrev ( 88 + STRUCT_OFFSET)(%rdi) +#define dsMatchLen (136 + STRUCT_OFFSET)(%rdi) +#define dsPrevMatch (140 + STRUCT_OFFSET)(%rdi) +#define dsStrStart (148 + STRUCT_OFFSET)(%rdi) +#define dsMatchStart (152 + STRUCT_OFFSET)(%rdi) +#define dsLookahead (156 + STRUCT_OFFSET)(%rdi) +#define dsPrevLen (160 + STRUCT_OFFSET)(%rdi) +#define dsMaxChainLen (164 + STRUCT_OFFSET)(%rdi) +#define dsGoodMatch (180 + STRUCT_OFFSET)(%rdi) +#define dsNiceMatch (184 + STRUCT_OFFSET)(%rdi) + +#endif + + + + +.text + +/* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */ + +longest_match: +/* + * Retrieve the function arguments. %curmatch will hold cur_match + * throughout the entire function (passed via rsi on amd64). + * rdi will hold the pointer to the deflate_state (first arg on amd64) + */ + mov %rsi, save_rsi + mov %rbx, save_rbx + mov %r12, save_r12 + mov %r13, save_r13 + mov %r14, save_r14 + mov %r15, save_r15 + +/* uInt wmask = s->w_mask; */ +/* unsigned chain_length = s->max_chain_length; */ +/* if (s->prev_length >= s->good_match) { */ +/* chain_length >>= 2; */ +/* } */ + + movl dsPrevLen, %eax + movl dsGoodMatch, %ebx + cmpl %ebx, %eax + movl dsWMask, %eax + movl dsMaxChainLen, %chainlenwmask + jl LastMatchGood + shrl $2, %chainlenwmask +LastMatchGood: + +/* chainlen is decremented once beforehand so that the function can */ +/* use the sign flag instead of the zero flag for the exit test. */ +/* It is then shifted into the high word, to make room for the wmask */ +/* value, which it will always accompany. */ + + decl %chainlenwmask + shll $16, %chainlenwmask + orl %eax, %chainlenwmask + +/* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; */ + + movl dsNiceMatch, %eax + movl dsLookahead, %ebx + cmpl %eax, %ebx + jl LookaheadLess + movl %eax, %ebx +LookaheadLess: movl %ebx, %nicematch + +/* register Bytef *scan = s->window + s->strstart; */ + + mov dsWindow, %window + movl dsStrStart, %limitd + lea (%limit, %window), %scan + +/* Determine how many bytes the scan ptr is off from being */ +/* dword-aligned. */ + + mov %scan, %scanalign + negl %scanalignd + andl $3, %scanalignd + +/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ? */ +/* s->strstart - (IPos)MAX_DIST(s) : NIL; */ + + movl dsWSize, %eax + subl $MIN_LOOKAHEAD, %eax + xorl %ecx, %ecx + subl %eax, %limitd + cmovng %ecx, %limitd + +/* int best_len = s->prev_length; */ + + movl dsPrevLen, %bestlend + +/* Store the sum of s->window + best_len in %windowbestlen locally, and in memory. */ + + lea (%window, %bestlen), %windowbestlen + mov %windowbestlen, _windowbestlen + +/* register ush scan_start = *(ushf*)scan; */ +/* register ush scan_end = *(ushf*)(scan+best_len-1); */ +/* Posf *prev = s->prev; */ + + movzwl (%scan), %scanstart + movzwl -1(%scan, %bestlen), %scanend + mov dsPrev, %prev + +/* Jump into the main loop. */ + + movl %chainlenwmask, _chainlenwmask + jmp LoopEntry + +.balign 16 + +/* do { + * match = s->window + cur_match; + * if (*(ushf*)(match+best_len-1) != scan_end || + * *(ushf*)match != scan_start) continue; + * [...] + * } while ((cur_match = prev[cur_match & wmask]) > limit + * && --chain_length != 0); + * + * Here is the inner loop of the function. The function will spend the + * majority of its time in this loop, and majority of that time will + * be spent in the first ten instructions. + */ +LookupLoop: + andl %chainlenwmask, %curmatchd + movzwl (%prev, %curmatch, 2), %curmatchd + cmpl %limitd, %curmatchd + jbe LeaveNow + subl $0x00010000, %chainlenwmask + js LeaveNow +LoopEntry: cmpw -1(%windowbestlen, %curmatch), %scanendw + jne LookupLoop + cmpw %scanstartw, (%window, %curmatch) + jne LookupLoop + +/* Store the current value of chainlen. */ + movl %chainlenwmask, _chainlenwmask + +/* %scan is the string under scrutiny, and %prev to the string we */ +/* are hoping to match it up with. In actuality, %esi and %edi are */ +/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is */ +/* initialized to -(MAX_MATCH_8 - scanalign). */ + + mov $(-MAX_MATCH_8), %rdx + lea (%curmatch, %window), %windowbestlen + lea MAX_MATCH_8(%windowbestlen, %scanalign), %windowbestlen + lea MAX_MATCH_8(%scan, %scanalign), %prev + +/* the prefetching below makes very little difference... */ + prefetcht1 (%windowbestlen, %rdx) + prefetcht1 (%prev, %rdx) + +/* + * Test the strings for equality, 8 bytes at a time. At the end, + * adjust %rdx so that it is offset to the exact byte that mismatched. + * + * It should be confessed that this loop usually does not represent + * much of the total running time. Replacing it with a more + * straightforward "rep cmpsb" would not drastically degrade + * performance -- unrolling it, for example, makes no difference. + */ + +#undef USE_SSE /* works, but is 6-7% slower, than non-SSE... */ + +LoopCmps: +#ifdef USE_SSE + /* Preload the SSE registers */ + movdqu (%windowbestlen, %rdx), %xmm1 + movdqu (%prev, %rdx), %xmm2 + pcmpeqb %xmm2, %xmm1 + movdqu 16(%windowbestlen, %rdx), %xmm3 + movdqu 16(%prev, %rdx), %xmm4 + pcmpeqb %xmm4, %xmm3 + movdqu 32(%windowbestlen, %rdx), %xmm5 + movdqu 32(%prev, %rdx), %xmm6 + pcmpeqb %xmm6, %xmm5 + movdqu 48(%windowbestlen, %rdx), %xmm7 + movdqu 48(%prev, %rdx), %xmm8 + pcmpeqb %xmm8, %xmm7 + + /* Check the comparisions' results */ + pmovmskb %xmm1, %rax + notw %ax + bsfw %ax, %ax + jnz LeaveLoopCmps + + /* this is the only iteration of the loop with a possibility of having + incremented rdx by 0x108 (each loop iteration add 16*4 = 0x40 + and (0x40*4)+8=0x108 */ + add $8, %rdx + jz LenMaximum + add $8, %rdx + + + pmovmskb %xmm3, %rax + notw %ax + bsfw %ax, %ax + jnz LeaveLoopCmps + + + add $16, %rdx + + + pmovmskb %xmm5, %rax + notw %ax + bsfw %ax, %ax + jnz LeaveLoopCmps + + add $16, %rdx + + + pmovmskb %xmm7, %rax + notw %ax + bsfw %ax, %ax + jnz LeaveLoopCmps + + add $16, %rdx + + jmp LoopCmps +LeaveLoopCmps: add %rax, %rdx +#else + mov (%windowbestlen, %rdx), %rax + xor (%prev, %rdx), %rax + jnz LeaveLoopCmps + + mov 8(%windowbestlen, %rdx), %rax + xor 8(%prev, %rdx), %rax + jnz LeaveLoopCmps8 + + mov 16(%windowbestlen, %rdx), %rax + xor 16(%prev, %rdx), %rax + jnz LeaveLoopCmps16 + + add $24, %rdx + jnz LoopCmps + jmp LenMaximum +# if 0 +/* + * This three-liner is tantalizingly simple, but bsf is a slow instruction, + * and the complicated alternative down below is quite a bit faster. Sad... + */ + +LeaveLoopCmps: bsf %rax, %rax /* find the first non-zero bit */ + shrl $3, %eax /* divide by 8 to get the byte */ + add %rax, %rdx +# else +LeaveLoopCmps16: + add $8, %rdx +LeaveLoopCmps8: + add $8, %rdx +LeaveLoopCmps: testl $0xFFFFFFFF, %eax /* Check the first 4 bytes */ + jnz Check16 + add $4, %rdx + shr $32, %rax +Check16: testw $0xFFFF, %ax + jnz LenLower + add $2, %rdx + shrl $16, %eax +LenLower: subb $1, %al + adc $0, %rdx +# endif +#endif + +/* Calculate the length of the match. If it is longer than MAX_MATCH, */ +/* then automatically accept it as the best possible match and leave. */ + + lea (%prev, %rdx), %rax + sub %scan, %rax + cmpl $MAX_MATCH, %eax + jge LenMaximum + +/* If the length of the match is not longer than the best match we */ +/* have so far, then forget it and return to the lookup loop. */ + + cmpl %bestlend, %eax + jg LongerMatch + mov _windowbestlen, %windowbestlen + mov dsPrev, %prev + movl _chainlenwmask, %edx + jmp LookupLoop + +/* s->match_start = cur_match; */ +/* best_len = len; */ +/* if (len >= nice_match) break; */ +/* scan_end = *(ushf*)(scan+best_len-1); */ + +LongerMatch: + movl %eax, %bestlend + movl %curmatchd, dsMatchStart + cmpl %nicematch, %eax + jge LeaveNow + + lea (%window, %bestlen), %windowbestlen + mov %windowbestlen, _windowbestlen + + movzwl -1(%scan, %rax), %scanend + mov dsPrev, %prev + movl _chainlenwmask, %chainlenwmask + jmp LookupLoop + +/* Accept the current string, with the maximum possible length. */ + +LenMaximum: + movl $MAX_MATCH, %bestlend + movl %curmatchd, dsMatchStart + +/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len; */ +/* return s->lookahead; */ + +LeaveNow: + movl dsLookahead, %eax + cmpl %eax, %bestlend + cmovngl %bestlend, %eax +LookaheadRet: + +/* Restore the registers and return from whence we came. */ + + mov save_rsi, %rsi + mov save_rbx, %rbx + mov save_r12, %r12 + mov save_r13, %r13 + mov save_r14, %r14 + mov save_r15, %r15 + + ret + +match_init: ret diff --git a/zlib/contrib/asm586/README.586 b/zlib/contrib/asm586/README.586 deleted file mode 100644 index 6bb78f32069..00000000000 --- a/zlib/contrib/asm586/README.586 +++ /dev/null @@ -1,43 +0,0 @@ -This is a patched version of zlib modified to use -Pentium-optimized assembly code in the deflation algorithm. The files -changed/added by this patch are: - -README.586 -match.S - -The effectiveness of these modifications is a bit marginal, as the the -program's bottleneck seems to be mostly L1-cache contention, for which -there is no real way to work around without rewriting the basic -algorithm. The speedup on average is around 5-10% (which is generally -less than the amount of variance between subsequent executions). -However, when used at level 9 compression, the cache contention can -drop enough for the assembly version to achieve 10-20% speedup (and -sometimes more, depending on the amount of overall redundancy in the -files). Even here, though, cache contention can still be the limiting -factor, depending on the nature of the program using the zlib library. -This may also mean that better improvements will be seen on a Pentium -with MMX, which suffers much less from L1-cache contention, but I have -not yet verified this. - -Note that this code has been tailored for the Pentium in particular, -and will not perform well on the Pentium Pro (due to the use of a -partial register in the inner loop). - -If you are using an assembler other than GNU as, you will have to -translate match.S to use your assembler's syntax. (Have fun.) - -Brian Raiter -breadbox@muppetlabs.com -April, 1998 - - -Added for zlib 1.1.3: - -The patches come from -http://www.muppetlabs.com/~breadbox/software/assembly.html - -To compile zlib with this asm file, copy match.S to the zlib directory -then do: - -CFLAGS="-O3 -DASMV" ./configure -make OBJA=match.o diff --git a/zlib/contrib/asm586/match.S b/zlib/contrib/asm586/match.S deleted file mode 100644 index 0368b35fe3a..00000000000 --- a/zlib/contrib/asm586/match.S +++ /dev/null @@ -1,364 +0,0 @@ -/* match.s -- Pentium-optimized version of longest_match() - * Written for zlib 1.1.2 - * Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com> - * - * This is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License. - */ - -#ifndef NO_UNDERLINE -#define match_init _match_init -#define longest_match _longest_match -#endif - -#define MAX_MATCH (258) -#define MIN_MATCH (3) -#define MIN_LOOKAHEAD (MAX_MATCH + MIN_MATCH + 1) -#define MAX_MATCH_8 ((MAX_MATCH + 7) & ~7) - -/* stack frame offsets */ - -#define wmask 0 /* local copy of s->wmask */ -#define window 4 /* local copy of s->window */ -#define windowbestlen 8 /* s->window + bestlen */ -#define chainlenscanend 12 /* high word: current chain len */ - /* low word: last bytes sought */ -#define scanstart 16 /* first two bytes of string */ -#define scanalign 20 /* dword-misalignment of string */ -#define nicematch 24 /* a good enough match size */ -#define bestlen 28 /* size of best match so far */ -#define scan 32 /* ptr to string wanting match */ - -#define LocalVarsSize (36) -/* saved ebx 36 */ -/* saved edi 40 */ -/* saved esi 44 */ -/* saved ebp 48 */ -/* return address 52 */ -#define deflatestate 56 /* the function arguments */ -#define curmatch 60 - -/* Offsets for fields in the deflate_state structure. These numbers - * are calculated from the definition of deflate_state, with the - * assumption that the compiler will dword-align the fields. (Thus, - * changing the definition of deflate_state could easily cause this - * program to crash horribly, without so much as a warning at - * compile time. Sigh.) - */ - -/* All the +zlib1222add offsets are due to the addition of fields - * in zlib in the deflate_state structure since the asm code was first written - * (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)"). - * (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0"). - * if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8"). - */ - -#define zlib1222add (8) - -#define dsWSize (36+zlib1222add) -#define dsWMask (44+zlib1222add) -#define dsWindow (48+zlib1222add) -#define dsPrev (56+zlib1222add) -#define dsMatchLen (88+zlib1222add) -#define dsPrevMatch (92+zlib1222add) -#define dsStrStart (100+zlib1222add) -#define dsMatchStart (104+zlib1222add) -#define dsLookahead (108+zlib1222add) -#define dsPrevLen (112+zlib1222add) -#define dsMaxChainLen (116+zlib1222add) -#define dsGoodMatch (132+zlib1222add) -#define dsNiceMatch (136+zlib1222add) - - -.file "match.S" - -.globl match_init, longest_match - -.text - -/* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */ - -longest_match: - -/* Save registers that the compiler may be using, and adjust %esp to */ -/* make room for our stack frame. */ - - pushl %ebp - pushl %edi - pushl %esi - pushl %ebx - subl $LocalVarsSize, %esp - -/* Retrieve the function arguments. %ecx will hold cur_match */ -/* throughout the entire function. %edx will hold the pointer to the */ -/* deflate_state structure during the function's setup (before */ -/* entering the main loop). */ - - movl deflatestate(%esp), %edx - movl curmatch(%esp), %ecx - -/* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; */ - - movl dsNiceMatch(%edx), %eax - movl dsLookahead(%edx), %ebx - cmpl %eax, %ebx - jl LookaheadLess - movl %eax, %ebx -LookaheadLess: movl %ebx, nicematch(%esp) - -/* register Bytef *scan = s->window + s->strstart; */ - - movl dsWindow(%edx), %esi - movl %esi, window(%esp) - movl dsStrStart(%edx), %ebp - lea (%esi,%ebp), %edi - movl %edi, scan(%esp) - -/* Determine how many bytes the scan ptr is off from being */ -/* dword-aligned. */ - - movl %edi, %eax - negl %eax - andl $3, %eax - movl %eax, scanalign(%esp) - -/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ? */ -/* s->strstart - (IPos)MAX_DIST(s) : NIL; */ - - movl dsWSize(%edx), %eax - subl $MIN_LOOKAHEAD, %eax - subl %eax, %ebp - jg LimitPositive - xorl %ebp, %ebp -LimitPositive: - -/* unsigned chain_length = s->max_chain_length; */ -/* if (s->prev_length >= s->good_match) { */ -/* chain_length >>= 2; */ -/* } */ - - movl dsPrevLen(%edx), %eax - movl dsGoodMatch(%edx), %ebx - cmpl %ebx, %eax - movl dsMaxChainLen(%edx), %ebx - jl LastMatchGood - shrl $2, %ebx -LastMatchGood: - -/* chainlen is decremented once beforehand so that the function can */ -/* use the sign flag instead of the zero flag for the exit test. */ -/* It is then shifted into the high word, to make room for the scanend */ -/* scanend value, which it will always accompany. */ - - decl %ebx - shll $16, %ebx - -/* int best_len = s->prev_length; */ - - movl dsPrevLen(%edx), %eax - movl %eax, bestlen(%esp) - -/* Store the sum of s->window + best_len in %esi locally, and in %esi. */ - - addl %eax, %esi - movl %esi, windowbestlen(%esp) - -/* register ush scan_start = *(ushf*)scan; */ -/* register ush scan_end = *(ushf*)(scan+best_len-1); */ - - movw (%edi), %bx - movw %bx, scanstart(%esp) - movw -1(%edi,%eax), %bx - movl %ebx, chainlenscanend(%esp) - -/* Posf *prev = s->prev; */ -/* uInt wmask = s->w_mask; */ - - movl dsPrev(%edx), %edi - movl dsWMask(%edx), %edx - mov %edx, wmask(%esp) - -/* Jump into the main loop. */ - - jmp LoopEntry - -.balign 16 - -/* do { - * match = s->window + cur_match; - * if (*(ushf*)(match+best_len-1) != scan_end || - * *(ushf*)match != scan_start) continue; - * [...] - * } while ((cur_match = prev[cur_match & wmask]) > limit - * && --chain_length != 0); - * - * Here is the inner loop of the function. The function will spend the - * majority of its time in this loop, and majority of that time will - * be spent in the first ten instructions. - * - * Within this loop: - * %ebx = chainlenscanend - i.e., ((chainlen << 16) | scanend) - * %ecx = curmatch - * %edx = curmatch & wmask - * %esi = windowbestlen - i.e., (window + bestlen) - * %edi = prev - * %ebp = limit - * - * Two optimization notes on the choice of instructions: - * - * The first instruction uses a 16-bit address, which costs an extra, - * unpairable cycle. This is cheaper than doing a 32-bit access and - * zeroing the high word, due to the 3-cycle misalignment penalty which - * would occur half the time. This also turns out to be cheaper than - * doing two separate 8-bit accesses, as the memory is so rarely in the - * L1 cache. - * - * The window buffer, however, apparently spends a lot of time in the - * cache, and so it is faster to retrieve the word at the end of the - * match string with two 8-bit loads. The instructions that test the - * word at the beginning of the match string, however, are executed - * much less frequently, and there it was cheaper to use 16-bit - * instructions, which avoided the necessity of saving off and - * subsequently reloading one of the other registers. - */ -LookupLoop: - /* 1 U & V */ - movw (%edi,%edx,2), %cx /* 2 U pipe */ - movl wmask(%esp), %edx /* 2 V pipe */ - cmpl %ebp, %ecx /* 3 U pipe */ - jbe LeaveNow /* 3 V pipe */ - subl $0x00010000, %ebx /* 4 U pipe */ - js LeaveNow /* 4 V pipe */ -LoopEntry: movb -1(%esi,%ecx), %al /* 5 U pipe */ - andl %ecx, %edx /* 5 V pipe */ - cmpb %bl, %al /* 6 U pipe */ - jnz LookupLoop /* 6 V pipe */ - movb (%esi,%ecx), %ah - cmpb %bh, %ah - jnz LookupLoop - movl window(%esp), %eax - movw (%eax,%ecx), %ax - cmpw scanstart(%esp), %ax - jnz LookupLoop - -/* Store the current value of chainlen. */ - - movl %ebx, chainlenscanend(%esp) - -/* Point %edi to the string under scrutiny, and %esi to the string we */ -/* are hoping to match it up with. In actuality, %esi and %edi are */ -/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is */ -/* initialized to -(MAX_MATCH_8 - scanalign). */ - - movl window(%esp), %esi - movl scan(%esp), %edi - addl %ecx, %esi - movl scanalign(%esp), %eax - movl $(-MAX_MATCH_8), %edx - lea MAX_MATCH_8(%edi,%eax), %edi - lea MAX_MATCH_8(%esi,%eax), %esi - -/* Test the strings for equality, 8 bytes at a time. At the end, - * adjust %edx so that it is offset to the exact byte that mismatched. - * - * We already know at this point that the first three bytes of the - * strings match each other, and they can be safely passed over before - * starting the compare loop. So what this code does is skip over 0-3 - * bytes, as much as necessary in order to dword-align the %edi - * pointer. (%esi will still be misaligned three times out of four.) - * - * It should be confessed that this loop usually does not represent - * much of the total running time. Replacing it with a more - * straightforward "rep cmpsb" would not drastically degrade - * performance. - */ -LoopCmps: - movl (%esi,%edx), %eax - movl (%edi,%edx), %ebx - xorl %ebx, %eax - jnz LeaveLoopCmps - movl 4(%esi,%edx), %eax - movl 4(%edi,%edx), %ebx - xorl %ebx, %eax - jnz LeaveLoopCmps4 - addl $8, %edx - jnz LoopCmps - jmp LenMaximum -LeaveLoopCmps4: addl $4, %edx -LeaveLoopCmps: testl $0x0000FFFF, %eax - jnz LenLower - addl $2, %edx - shrl $16, %eax -LenLower: subb $1, %al - adcl $0, %edx - -/* Calculate the length of the match. If it is longer than MAX_MATCH, */ -/* then automatically accept it as the best possible match and leave. */ - - lea (%edi,%edx), %eax - movl scan(%esp), %edi - subl %edi, %eax - cmpl $MAX_MATCH, %eax - jge LenMaximum - -/* If the length of the match is not longer than the best match we */ -/* have so far, then forget it and return to the lookup loop. */ - - movl deflatestate(%esp), %edx - movl bestlen(%esp), %ebx - cmpl %ebx, %eax - jg LongerMatch - movl chainlenscanend(%esp), %ebx - movl windowbestlen(%esp), %esi - movl dsPrev(%edx), %edi - movl wmask(%esp), %edx - andl %ecx, %edx - jmp LookupLoop - -/* s->match_start = cur_match; */ -/* best_len = len; */ -/* if (len >= nice_match) break; */ -/* scan_end = *(ushf*)(scan+best_len-1); */ - -LongerMatch: movl nicematch(%esp), %ebx - movl %eax, bestlen(%esp) - movl %ecx, dsMatchStart(%edx) - cmpl %ebx, %eax - jge LeaveNow - movl window(%esp), %esi - addl %eax, %esi - movl %esi, windowbestlen(%esp) - movl chainlenscanend(%esp), %ebx - movw -1(%edi,%eax), %bx - movl dsPrev(%edx), %edi - movl %ebx, chainlenscanend(%esp) - movl wmask(%esp), %edx - andl %ecx, %edx - jmp LookupLoop - -/* Accept the current string, with the maximum possible length. */ - -LenMaximum: movl deflatestate(%esp), %edx - movl $MAX_MATCH, bestlen(%esp) - movl %ecx, dsMatchStart(%edx) - -/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len; */ -/* return s->lookahead; */ - -LeaveNow: - movl deflatestate(%esp), %edx - movl bestlen(%esp), %ebx - movl dsLookahead(%edx), %eax - cmpl %eax, %ebx - jg LookaheadRet - movl %ebx, %eax -LookaheadRet: - -/* Restore the stack and return from whence we came. */ - - addl $LocalVarsSize, %esp - popl %ebx - popl %esi - popl %edi - popl %ebp -match_init: ret diff --git a/zlib/contrib/asm686/README.686 b/zlib/contrib/asm686/README.686 index a593f23afd6..a0bf3bea4af 100644 --- a/zlib/contrib/asm686/README.686 +++ b/zlib/contrib/asm686/README.686 @@ -32,3 +32,20 @@ then do: CFLAGS="-O3 -DASMV" ./configure make OBJA=match.o + + +Update: + +I've been ignoring these assembly routines for years, believing that +gcc's generated code had caught up with it sometime around gcc 2.95 +and the major rearchitecting of the Pentium 4. However, I recently +learned that, despite what I believed, this code still has some life +in it. On the Pentium 4 and AMD64 chips, it continues to run about 8% +faster than the code produced by gcc 4.1. + +In acknowledgement of its continuing usefulness, I've altered the +license to match that of the rest of zlib. Share and Enjoy! + +Brian Raiter +breadbox@muppetlabs.com +April, 2007 diff --git a/zlib/contrib/asm686/match.S b/zlib/contrib/asm686/match.S index 5c3e9ee3671..06817e1dd08 100644 --- a/zlib/contrib/asm686/match.S +++ b/zlib/contrib/asm686/match.S @@ -1,9 +1,23 @@ -/* match.s -- Pentium-Pro-optimized version of longest_match() - * Written for zlib 1.1.2 - * Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com> +/* match.S -- x86 assembly version of the zlib longest_match() function. + * Optimized for the Intel 686 chips (PPro and later). * - * This is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License. + * Copyright (C) 1998, 2007 Brian Raiter <breadbox@muppetlabs.com> + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the author be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. */ #ifndef NO_UNDERLINE diff --git a/zlib/contrib/delphi/ZLib.pas b/zlib/contrib/delphi/ZLib.pas index 3f2b8b4a5cd..0d86fb52fcf 100644 --- a/zlib/contrib/delphi/ZLib.pas +++ b/zlib/contrib/delphi/ZLib.pas @@ -152,7 +152,7 @@ procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; const OutBuf: Pointer; BufSize: Integer); const - zlib_version = '1.2.3'; + zlib_version = '1.2.5'; type EZlibError = class(Exception); diff --git a/zlib/contrib/delphi/zlibd32.mak b/zlib/contrib/delphi/zlibd32.mak index 88fafa0b14d..0d0699a69a3 100644 --- a/zlib/contrib/delphi/zlibd32.mak +++ b/zlib/contrib/delphi/zlibd32.mak @@ -18,10 +18,10 @@ LDFLAGS = # variables ZLIB_LIB = zlib.lib -OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj -OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj -OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infback.obj -OBJP2 = +inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj # targets @@ -38,7 +38,13 @@ crc32.obj: crc32.c zlib.h zconf.h crc32.h deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h -gzio.obj: gzio.c zutil.h zlib.h zconf.h +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ inffast.h inffixed.h diff --git a/zlib/contrib/dotzlib/DotZLib.build b/zlib/contrib/dotzlib/DotZLib.build index ed19cc9dcd9..7f90d6bc7c4 100644 --- a/zlib/contrib/dotzlib/DotZLib.build +++ b/zlib/contrib/dotzlib/DotZLib.build @@ -4,7 +4,7 @@ <property name="nunit.location" value="c:/program files/NUnit V2.1/bin" />
<property name="build.root" value="bin" />
-
+
<property name="debug" value="true" />
<property name="nunit" value="true" />
@@ -16,7 +16,7 @@ </target>
<target name="build" description="compiles the source code">
-
+
<mkdir dir="${build.folder}" />
<csc target="library" output="${build.folder}DotZLib.dll" debug="${debug}">
<references basedir="${nunit.location}">
diff --git a/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs b/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs index 6fc0fdcc24e..0491bfc2b03 100644 --- a/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs +++ b/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs @@ -2,7 +2,7 @@ using System.Reflection; using System.Runtime.CompilerServices;
//
-// General Information about an assembly is controlled through the following
+// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
//
@@ -13,42 +13,42 @@ using System.Runtime.CompilerServices; [assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("(c) 2004 by Henrik Ravn")]
[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
+[assembly: AssemblyCulture("")]
//
// Version information for an assembly consists of the following four values:
//
// Major Version
-// Minor Version
+// Minor Version
// Build Number
// Revision
//
-// You can specify all the values or you can default the Revision and Build Numbers
+// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.*")]
//
-// In order to sign your assembly you must specify a key to use. Refer to the
+// In order to sign your assembly you must specify a key to use. Refer to the
// Microsoft .NET Framework documentation for more information on assembly signing.
//
-// Use the attributes below to control which key is used for signing.
+// Use the attributes below to control which key is used for signing.
//
-// Notes:
+// Notes:
// (*) If no key is specified, the assembly is not signed.
// (*) KeyName refers to a key that has been installed in the Crypto Service
// Provider (CSP) on your machine. KeyFile refers to a file which contains
// a key.
-// (*) If the KeyFile and the KeyName values are both specified, the
+// (*) If the KeyFile and the KeyName values are both specified, the
// following processing occurs:
// (1) If the KeyName can be found in the CSP, that key is used.
-// (2) If the KeyName does not exist and the KeyFile does exist, the key
+// (2) If the KeyName does not exist and the KeyFile does exist, the key
// in the KeyFile is installed into the CSP and used.
// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
// When specifying the KeyFile, the location of the KeyFile should be
// relative to the project output directory which is
// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
-// located in the project directory, you would specify the AssemblyKeyFile
+// located in the project directory, you would specify the AssemblyKeyFile
// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
// documentation for more information on this.
diff --git a/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs b/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs index dfe7e90a8a1..788b2fceced 100644 --- a/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs +++ b/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs @@ -1,7 +1,7 @@ //
// © Copyright Henrik Ravn 2004
//
-// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
@@ -25,7 +25,7 @@ namespace DotZLib protected uint _current;
/// <summary>
- /// Initializes a new instance of the checksum generator base - the current checksum is
+ /// Initializes a new instance of the checksum generator base - the current checksum is
/// set to zero
/// </summary>
public ChecksumGeneratorBase()
@@ -61,7 +61,7 @@ namespace DotZLib /// <exception cref="ArgumentException">The sum of offset and count is larger than the length of <c>data</c></exception>
/// <exception cref="NullReferenceException"><c>data</c> is a null reference</exception>
/// <exception cref="ArgumentOutOfRangeException">Offset or count is negative.</exception>
- /// <remarks>All the other <c>Update</c> methods are implmeneted in terms of this one.
+ /// <remarks>All the other <c>Update</c> methods are implmeneted in terms of this one.
/// This is therefore the only method a derived class has to implement</remarks>
public abstract void Update(byte[] data, int offset, int count);
@@ -101,7 +101,7 @@ namespace DotZLib /// <summary>
/// Implements a CRC32 checksum generator
/// </summary>
- public sealed class CRC32Checksum : ChecksumGeneratorBase
+ public sealed class CRC32Checksum : ChecksumGeneratorBase
{
#region DLL imports
@@ -152,7 +152,7 @@ namespace DotZLib /// <summary>
/// Implements a checksum generator that computes the Adler checksum on data
/// </summary>
- public sealed class AdlerChecksum : ChecksumGeneratorBase
+ public sealed class AdlerChecksum : ChecksumGeneratorBase
{
#region DLL imports
diff --git a/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs b/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs index 16997e906b6..c1cab3a02c6 100644 --- a/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs +++ b/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs @@ -1,7 +1,7 @@ //
// © Copyright Henrik Ravn 2004
//
-// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
@@ -25,7 +25,7 @@ namespace DotZLib #endregion
public CircularBuffer(int capacity)
- {
+ {
Debug.Assert( capacity > 0 );
_buffer = new byte[capacity];
_capacity = capacity;
diff --git a/zlib/contrib/dotzlib/DotZLib/CodecBase.cs b/zlib/contrib/dotzlib/DotZLib/CodecBase.cs index 954db7db05f..42e6da3a565 100644 --- a/zlib/contrib/dotzlib/DotZLib/CodecBase.cs +++ b/zlib/contrib/dotzlib/DotZLib/CodecBase.cs @@ -1,7 +1,7 @@ //
// © Copyright Henrik Ravn 2004
//
-// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
@@ -19,7 +19,7 @@ namespace DotZLib #region Data members
/// <summary>
- /// Instance of the internal zlib buffer structure that is
+ /// Instance of the internal zlib buffer structure that is
/// passed to all functions in the zlib dll
/// </summary>
internal ZStream _ztream = new ZStream();
@@ -45,7 +45,7 @@ namespace DotZLib #endregion
/// <summary>
- /// Initializes a new instance of the <c>CodeBase</c> class.
+ /// Initializes a new instance of the <c>CodeBase</c> class.
/// </summary>
public CodecBase()
{
@@ -77,7 +77,7 @@ namespace DotZLib if (_ztream.total_out > 0)
{
if (DataAvailable != null)
- DataAvailable( _outBuffer, 0, (int)_ztream.total_out);
+ DataAvailable( _outBuffer, 0, (int)_ztream.total_out);
resetOutput();
}
}
diff --git a/zlib/contrib/dotzlib/DotZLib/Deflater.cs b/zlib/contrib/dotzlib/DotZLib/Deflater.cs index d7b8dcccac6..c2477925b62 100644 --- a/zlib/contrib/dotzlib/DotZLib/Deflater.cs +++ b/zlib/contrib/dotzlib/DotZLib/Deflater.cs @@ -1,7 +1,7 @@ //
// © Copyright Henrik Ravn 2004
//
-// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
@@ -56,7 +56,7 @@ namespace DotZLib if (data == null) throw new ArgumentNullException();
if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();
if ((offset+count) > data.Length) throw new ArgumentException();
-
+
int total = count;
int inputIndex = offset;
int err = 0;
@@ -86,7 +86,7 @@ namespace DotZLib public override void Finish()
{
int err;
- do
+ do
{
err = deflate(ref _ztream, (int)FlushTypes.Finish);
OnDataAvailable();
diff --git a/zlib/contrib/dotzlib/DotZLib/DotZLib.cs b/zlib/contrib/dotzlib/DotZLib/DotZLib.cs index 410deb08851..be184b4c71b 100644 --- a/zlib/contrib/dotzlib/DotZLib/DotZLib.cs +++ b/zlib/contrib/dotzlib/DotZLib/DotZLib.cs @@ -1,7 +1,7 @@ //
// © Copyright Henrik Ravn 2004
//
-// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
@@ -19,7 +19,7 @@ namespace DotZLib /// <summary>
/// Defines constants for the various flush types used with zlib
/// </summary>
- internal enum FlushTypes
+ internal enum FlushTypes
{
None, Partial, Sync, Full, Finish, Block
}
@@ -38,7 +38,7 @@ namespace DotZLib public uint total_out;
[MarshalAs(UnmanagedType.LPStr)]
- string msg;
+ string msg;
uint state;
uint zalloc;
@@ -51,7 +51,7 @@ namespace DotZLib }
#endregion
-
+
#endregion
#region Public enums
@@ -63,7 +63,7 @@ namespace DotZLib /// <summary>
/// The default compression level with a reasonable compromise between compression and speed
/// </summary>
- Default = -1,
+ Default = -1,
/// <summary>
/// No compression at all. The data are passed straight through.
/// </summary>
@@ -71,7 +71,7 @@ namespace DotZLib /// <summary>
/// The maximum compression rate available.
/// </summary>
- Best = 9,
+ Best = 9,
/// <summary>
/// The fastest available compression level.
/// </summary>
@@ -86,7 +86,7 @@ namespace DotZLib public class ZLibException : ApplicationException
{
/// <summary>
- /// Initializes a new instance of the <see cref="ZLibException"/> class with a specified
+ /// Initializes a new instance of the <see cref="ZLibException"/> class with a specified
/// error message and error code
/// </summary>
/// <param name="errorCode">The zlib error code that caused the exception</param>
@@ -96,7 +96,7 @@ namespace DotZLib }
/// <summary>
- /// Initializes a new instance of the <see cref="ZLibException"/> class with a specified
+ /// Initializes a new instance of the <see cref="ZLibException"/> class with a specified
/// error code
/// </summary>
/// <param name="errorCode">The zlib error code that caused the exception</param>
@@ -109,7 +109,7 @@ namespace DotZLib #region Interfaces
/// <summary>
- /// Declares methods and properties that enables a running checksum to be calculated
+ /// Declares methods and properties that enables a running checksum to be calculated
/// </summary>
public interface ChecksumGenerator
{
@@ -163,7 +163,7 @@ namespace DotZLib /// <paramref name="data">The byte array containing the processed data</paramref>
/// <paramref name="startIndex">The index of the first processed byte in <c>data</c></paramref>
/// <paramref name="count">The number of processed bytes available</paramref>
- /// <remarks>On return from this method, the data may be overwritten, so grab it while you can.
+ /// <remarks>On return from this method, the data may be overwritten, so grab it while you can.
/// You cannot assume that startIndex will be zero.
/// </remarks>
public delegate void DataAvailableHandler(byte[] data, int startIndex, int count);
diff --git a/zlib/contrib/dotzlib/DotZLib/GZipStream.cs b/zlib/contrib/dotzlib/DotZLib/GZipStream.cs index f861675b518..b161300b185 100644 --- a/zlib/contrib/dotzlib/DotZLib/GZipStream.cs +++ b/zlib/contrib/dotzlib/DotZLib/GZipStream.cs @@ -1,7 +1,7 @@ //
// © Copyright Henrik Ravn 2004
//
-// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
@@ -84,7 +84,7 @@ namespace DotZLib return !_isWriting;
}
}
-
+
/// <summary>
/// Returns false.
@@ -96,7 +96,7 @@ namespace DotZLib return false;
}
}
-
+
/// <summary>
/// Returns true if this tsream is writeable, false otherwise
/// </summary>
@@ -108,7 +108,7 @@ namespace DotZLib }
}
#endregion
-
+
#region Destructor & IDispose stuff
/// <summary>
@@ -137,7 +137,7 @@ namespace DotZLib }
}
#endregion
-
+
#region Basic reading and writing
/// <summary>
/// Attempts to read a number of bytes from the stream.
@@ -244,7 +244,7 @@ namespace DotZLib {
throw new NotSupportedException();
}
-
+
/// <summary>
/// Not suppported.
/// </summary>
@@ -256,7 +256,7 @@ namespace DotZLib {
throw new NotSupportedException();
}
-
+
/// <summary>
/// Flushes the <c>GZipStream</c>.
/// </summary>
@@ -266,7 +266,7 @@ namespace DotZLib {
// left empty on purpose
}
-
+
/// <summary>
/// Gets/sets the current position in the <c>GZipStream</c>. Not suppported.
/// </summary>
@@ -283,7 +283,7 @@ namespace DotZLib throw new NotSupportedException();
}
}
-
+
/// <summary>
/// Gets the size of the stream. Not suppported.
/// </summary>
diff --git a/zlib/contrib/dotzlib/DotZLib/Inflater.cs b/zlib/contrib/dotzlib/DotZLib/Inflater.cs index 4e60cda078b..8ed5451d664 100644 --- a/zlib/contrib/dotzlib/DotZLib/Inflater.cs +++ b/zlib/contrib/dotzlib/DotZLib/Inflater.cs @@ -1,7 +1,7 @@ //
// © Copyright Henrik Ravn 2004
//
-// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
@@ -11,7 +11,7 @@ using System.Runtime.InteropServices; namespace DotZLib
{
-
+
/// <summary>
/// Implements a data decompressor, using the inflate algorithm in the ZLib dll
/// </summary>
@@ -84,7 +84,7 @@ namespace DotZLib public override void Finish()
{
int err;
- do
+ do
{
err = inflate(ref _ztream, (int)FlushTypes.Finish);
OnDataAvailable();
diff --git a/zlib/contrib/dotzlib/DotZLib/UnitTests.cs b/zlib/contrib/dotzlib/DotZLib/UnitTests.cs index 8dc00db92dd..3bbcc8cee6e 100644 --- a/zlib/contrib/dotzlib/DotZLib/UnitTests.cs +++ b/zlib/contrib/dotzlib/DotZLib/UnitTests.cs @@ -1,7 +1,7 @@ //
// © Copyright Henrik Ravn 2004
//
-// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
+// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
@@ -156,7 +156,7 @@ namespace DotZLibTests public void Info_Version()
{
Info info = new Info();
- Assert.AreEqual("1.2.3", Info.Version);
+ Assert.AreEqual("1.2.5", Info.Version);
Assert.AreEqual(32, info.SizeOfUInt);
Assert.AreEqual(32, info.SizeOfULong);
Assert.AreEqual(32, info.SizeOfPointer);
@@ -225,7 +225,7 @@ namespace DotZLibTests [Test]
public void Inflate_Expand()
- {
+ {
uncompressedData.Clear();
using (Inflater inf = new Inflater())
@@ -271,4 +271,4 @@ namespace DotZLibTests }
}
-#endif
\ No newline at end of file +#endif
diff --git a/zlib/contrib/dotzlib/readme.txt b/zlib/contrib/dotzlib/readme.txt index 210f4b00192..b2395720d4c 100644 --- a/zlib/contrib/dotzlib/readme.txt +++ b/zlib/contrib/dotzlib/readme.txt @@ -1,6 +1,6 @@ This directory contains a .Net wrapper class library for the ZLib1.dll
-The wrapper includes support for inflating/deflating memory buffers,
+The wrapper includes support for inflating/deflating memory buffers,
.Net streaming wrappers for the gz streams part of zlib, and wrappers
for the checksum parts of zlib. See DotZLib/UnitTests.cs for examples.
@@ -26,11 +26,11 @@ Build instructions: 1. Using Visual Studio.Net 2003:
Open DotZLib.sln in VS.Net and build from there. Output file (DotZLib.dll)
- will be found ./DotZLib/bin/release or ./DotZLib/bin/debug, depending on
- you are building the release or debug version of the library. Check
+ will be found ./DotZLib/bin/release or ./DotZLib/bin/debug, depending on
+ you are building the release or debug version of the library. Check
DotZLib/UnitTests.cs for instructions on how to include unit tests in the
build.
-
+
2. Using NAnt:
Open a command prompt with access to the build environment and run nant
in the same directory as the DotZLib.build file.
@@ -38,15 +38,15 @@ Build instructions: debug={true|false} to toggle between release/debug builds (default=true).
nunit={true|false} to include or esclude unit tests (default=true).
Also the target clean will remove binaries.
- Output file (DotZLib.dll) will be found in either ./DotZLib/bin/release
- or ./DotZLib/bin/debug, depending on whether you are building the release
+ Output file (DotZLib.dll) will be found in either ./DotZLib/bin/release
+ or ./DotZLib/bin/debug, depending on whether you are building the release
or debug version of the library.
- Examples:
+ Examples:
nant -D:debug=false -D:nunit=false
will build a release mode version of the library without unit tests.
nant
- will build a debug version of the library with unit tests
+ will build a debug version of the library with unit tests
nant clean
will remove all previously built files.
@@ -54,5 +54,5 @@ Build instructions: ---------------------------------
Copyright (c) Henrik Ravn 2004
-Use, modification and distribution are subject to the Boost Software License, Version 1.0.
+Use, modification and distribution are subject to the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
diff --git a/zlib/contrib/gcc_gvmat64/gvmat64.S b/zlib/contrib/gcc_gvmat64/gvmat64.S new file mode 100644 index 00000000000..dd858ddbd16 --- /dev/null +++ b/zlib/contrib/gcc_gvmat64/gvmat64.S @@ -0,0 +1,574 @@ +/*
+;uInt longest_match_x64(
+; deflate_state *s,
+; IPos cur_match); // current match
+
+; gvmat64.S -- Asm portion of the optimized longest_match for 32 bits x86_64
+; (AMD64 on Athlon 64, Opteron, Phenom
+; and Intel EM64T on Pentium 4 with EM64T, Pentium D, Core 2 Duo, Core I5/I7)
+; this file is translation from gvmat64.asm to GCC 4.x (for Linux, Mac XCode)
+; Copyright (C) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant.
+;
+; File written by Gilles Vollant, by converting to assembly the longest_match
+; from Jean-loup Gailly in deflate.c of zLib and infoZip zip.
+; and by taking inspiration on asm686 with masm, optimised assembly code
+; from Brian Raiter, written 1998
+;
+; This software is provided 'as-is', without any express or implied
+; warranty. In no event will the authors be held liable for any damages
+; arising from the use of this software.
+;
+; Permission is granted to anyone to use this software for any purpose,
+; including commercial applications, and to alter it and redistribute it
+; freely, subject to the following restrictions:
+;
+; 1. The origin of this software must not be misrepresented; you must not
+; claim that you wrote the original software. If you use this software
+; in a product, an acknowledgment in the product documentation would be
+; appreciated but is not required.
+; 2. Altered source versions must be plainly marked as such, and must not be
+; misrepresented as being the original software
+; 3. This notice may not be removed or altered from any source distribution.
+;
+; http://www.zlib.net
+; http://www.winimage.com/zLibDll
+; http://www.muppetlabs.com/~breadbox/software/assembly.html
+;
+; to compile this file for zLib, I use option:
+; gcc -c -arch x86_64 gvmat64.S
+
+
+;uInt longest_match(s, cur_match)
+; deflate_state *s;
+; IPos cur_match; // current match /
+;
+; with XCode for Mac, I had strange error with some jump on intel syntax
+; this is why BEFORE_JMP and AFTER_JMP are used
+ */
+
+
+#define BEFORE_JMP .att_syntax
+#define AFTER_JMP .intel_syntax noprefix
+
+#ifndef NO_UNDERLINE
+# define match_init _match_init
+# define longest_match _longest_match
+#endif
+
+.intel_syntax noprefix
+
+.globl match_init, longest_match
+.text
+longest_match:
+
+
+
+#define LocalVarsSize 96
+/*
+; register used : rax,rbx,rcx,rdx,rsi,rdi,r8,r9,r10,r11,r12
+; free register : r14,r15
+; register can be saved : rsp
+*/
+
+#define chainlenwmask (rsp + 8 - LocalVarsSize)
+#define nicematch (rsp + 16 - LocalVarsSize)
+
+#define save_rdi (rsp + 24 - LocalVarsSize)
+#define save_rsi (rsp + 32 - LocalVarsSize)
+#define save_rbx (rsp + 40 - LocalVarsSize)
+#define save_rbp (rsp + 48 - LocalVarsSize)
+#define save_r12 (rsp + 56 - LocalVarsSize)
+#define save_r13 (rsp + 64 - LocalVarsSize)
+#define save_r14 (rsp + 72 - LocalVarsSize)
+#define save_r15 (rsp + 80 - LocalVarsSize)
+
+
+/*
+; all the +4 offsets are due to the addition of pending_buf_size (in zlib
+; in the deflate_state structure since the asm code was first written
+; (if you compile with zlib 1.0.4 or older, remove the +4).
+; Note : these value are good with a 8 bytes boundary pack structure
+*/
+
+#define MAX_MATCH 258
+#define MIN_MATCH 3
+#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
+
+/*
+;;; Offsets for fields in the deflate_state structure. These numbers
+;;; are calculated from the definition of deflate_state, with the
+;;; assumption that the compiler will dword-align the fields. (Thus,
+;;; changing the definition of deflate_state could easily cause this
+;;; program to crash horribly, without so much as a warning at
+;;; compile time. Sigh.)
+
+; all the +zlib1222add offsets are due to the addition of fields
+; in zlib in the deflate_state structure since the asm code was first written
+; (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)").
+; (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0").
+; if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8").
+*/
+
+
+
+/* you can check the structure offset by running
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "deflate.h"
+
+void print_depl()
+{
+deflate_state ds;
+deflate_state *s=&ds;
+printf("size pointer=%u\n",(int)sizeof(void*));
+
+printf("#define dsWSize %u\n",(int)(((char*)&(s->w_size))-((char*)s)));
+printf("#define dsWMask %u\n",(int)(((char*)&(s->w_mask))-((char*)s)));
+printf("#define dsWindow %u\n",(int)(((char*)&(s->window))-((char*)s)));
+printf("#define dsPrev %u\n",(int)(((char*)&(s->prev))-((char*)s)));
+printf("#define dsMatchLen %u\n",(int)(((char*)&(s->match_length))-((char*)s)));
+printf("#define dsPrevMatch %u\n",(int)(((char*)&(s->prev_match))-((char*)s)));
+printf("#define dsStrStart %u\n",(int)(((char*)&(s->strstart))-((char*)s)));
+printf("#define dsMatchStart %u\n",(int)(((char*)&(s->match_start))-((char*)s)));
+printf("#define dsLookahead %u\n",(int)(((char*)&(s->lookahead))-((char*)s)));
+printf("#define dsPrevLen %u\n",(int)(((char*)&(s->prev_length))-((char*)s)));
+printf("#define dsMaxChainLen %u\n",(int)(((char*)&(s->max_chain_length))-((char*)s)));
+printf("#define dsGoodMatch %u\n",(int)(((char*)&(s->good_match))-((char*)s)));
+printf("#define dsNiceMatch %u\n",(int)(((char*)&(s->nice_match))-((char*)s)));
+}
+*/
+
+#define dsWSize 68
+#define dsWMask 76
+#define dsWindow 80
+#define dsPrev 96
+#define dsMatchLen 144
+#define dsPrevMatch 148
+#define dsStrStart 156
+#define dsMatchStart 160
+#define dsLookahead 164
+#define dsPrevLen 168
+#define dsMaxChainLen 172
+#define dsGoodMatch 188
+#define dsNiceMatch 192
+
+#define window_size [ rcx + dsWSize]
+#define WMask [ rcx + dsWMask]
+#define window_ad [ rcx + dsWindow]
+#define prev_ad [ rcx + dsPrev]
+#define strstart [ rcx + dsStrStart]
+#define match_start [ rcx + dsMatchStart]
+#define Lookahead [ rcx + dsLookahead] //; 0ffffffffh on infozip
+#define prev_length [ rcx + dsPrevLen]
+#define max_chain_length [ rcx + dsMaxChainLen]
+#define good_match [ rcx + dsGoodMatch]
+#define nice_match [ rcx + dsNiceMatch]
+
+/*
+; windows:
+; parameter 1 in rcx(deflate state s), param 2 in rdx (cur match)
+
+; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and
+; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp
+;
+; All registers must be preserved across the call, except for
+; rax, rcx, rdx, r8, r9, r10, and r11, which are scratch.
+
+;
+; gcc on macosx-linux:
+; see http://www.x86-64.org/documentation/abi-0.99.pdf
+; param 1 in rdi, param 2 in rsi
+; rbx, rsp, rbp, r12 to r15 must be preserved
+
+;;; Save registers that the compiler may be using, and adjust esp to
+;;; make room for our stack frame.
+
+
+;;; Retrieve the function arguments. r8d will hold cur_match
+;;; throughout the entire function. edx will hold the pointer to the
+;;; deflate_state structure during the function's setup (before
+;;; entering the main loop.
+
+; ms: parameter 1 in rcx (deflate_state* s), param 2 in edx -> r8 (cur match)
+; mac: param 1 in rdi, param 2 rsi
+; this clear high 32 bits of r8, which can be garbage in both r8 and rdx
+*/
+ mov [save_rbx],rbx
+ mov [save_rbp],rbp
+
+
+ mov rcx,rdi
+
+ mov r8d,esi
+
+
+ mov [save_r12],r12
+ mov [save_r13],r13
+ mov [save_r14],r14
+ mov [save_r15],r15
+
+
+//;;; uInt wmask = s->w_mask;
+//;;; unsigned chain_length = s->max_chain_length;
+//;;; if (s->prev_length >= s->good_match) {
+//;;; chain_length >>= 2;
+//;;; }
+
+
+ mov edi, prev_length
+ mov esi, good_match
+ mov eax, WMask
+ mov ebx, max_chain_length
+ cmp edi, esi
+ jl LastMatchGood
+ shr ebx, 2
+LastMatchGood:
+
+//;;; chainlen is decremented once beforehand so that the function can
+//;;; use the sign flag instead of the zero flag for the exit test.
+//;;; It is then shifted into the high word, to make room for the wmask
+//;;; value, which it will always accompany.
+
+ dec ebx
+ shl ebx, 16
+ or ebx, eax
+
+//;;; on zlib only
+//;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+
+
+
+ mov eax, nice_match
+ mov [chainlenwmask], ebx
+ mov r10d, Lookahead
+ cmp r10d, eax
+ cmovnl r10d, eax
+ mov [nicematch],r10d
+
+
+
+//;;; register Bytef *scan = s->window + s->strstart;
+ mov r10, window_ad
+ mov ebp, strstart
+ lea r13, [r10 + rbp]
+
+//;;; Determine how many bytes the scan ptr is off from being
+//;;; dword-aligned.
+
+ mov r9,r13
+ neg r13
+ and r13,3
+
+//;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
+//;;; s->strstart - (IPos)MAX_DIST(s) : NIL;
+
+
+ mov eax, window_size
+ sub eax, MIN_LOOKAHEAD
+
+
+ xor edi,edi
+ sub ebp, eax
+
+ mov r11d, prev_length
+
+ cmovng ebp,edi
+
+//;;; int best_len = s->prev_length;
+
+
+//;;; Store the sum of s->window + best_len in esi locally, and in esi.
+
+ lea rsi,[r10+r11]
+
+//;;; register ush scan_start = *(ushf*)scan;
+//;;; register ush scan_end = *(ushf*)(scan+best_len-1);
+//;;; Posf *prev = s->prev;
+
+ movzx r12d,word ptr [r9]
+ movzx ebx, word ptr [r9 + r11 - 1]
+
+ mov rdi, prev_ad
+
+//;;; Jump into the main loop.
+
+ mov edx, [chainlenwmask]
+
+ cmp bx,word ptr [rsi + r8 - 1]
+ jz LookupLoopIsZero
+
+
+
+LookupLoop1:
+ and r8d, edx
+
+ movzx r8d, word ptr [rdi + r8*2]
+ cmp r8d, ebp
+ jbe LeaveNow
+
+
+
+ sub edx, 0x00010000
+ BEFORE_JMP
+ js LeaveNow
+ AFTER_JMP
+
+LoopEntry1:
+ cmp bx,word ptr [rsi + r8 - 1]
+ BEFORE_JMP
+ jz LookupLoopIsZero
+ AFTER_JMP
+
+LookupLoop2:
+ and r8d, edx
+
+ movzx r8d, word ptr [rdi + r8*2]
+ cmp r8d, ebp
+ BEFORE_JMP
+ jbe LeaveNow
+ AFTER_JMP
+ sub edx, 0x00010000
+ BEFORE_JMP
+ js LeaveNow
+ AFTER_JMP
+
+LoopEntry2:
+ cmp bx,word ptr [rsi + r8 - 1]
+ BEFORE_JMP
+ jz LookupLoopIsZero
+ AFTER_JMP
+
+LookupLoop4:
+ and r8d, edx
+
+ movzx r8d, word ptr [rdi + r8*2]
+ cmp r8d, ebp
+ BEFORE_JMP
+ jbe LeaveNow
+ AFTER_JMP
+ sub edx, 0x00010000
+ BEFORE_JMP
+ js LeaveNow
+ AFTER_JMP
+
+LoopEntry4:
+
+ cmp bx,word ptr [rsi + r8 - 1]
+ BEFORE_JMP
+ jnz LookupLoop1
+ jmp LookupLoopIsZero
+ AFTER_JMP
+/*
+;;; do {
+;;; match = s->window + cur_match;
+;;; if (*(ushf*)(match+best_len-1) != scan_end ||
+;;; *(ushf*)match != scan_start) continue;
+;;; [...]
+;;; } while ((cur_match = prev[cur_match & wmask]) > limit
+;;; && --chain_length != 0);
+;;;
+;;; Here is the inner loop of the function. The function will spend the
+;;; majority of its time in this loop, and majority of that time will
+;;; be spent in the first ten instructions.
+;;;
+;;; Within this loop:
+;;; ebx = scanend
+;;; r8d = curmatch
+;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)
+;;; esi = windowbestlen - i.e., (window + bestlen)
+;;; edi = prev
+;;; ebp = limit
+*/
+.balign 16
+LookupLoop:
+ and r8d, edx
+
+ movzx r8d, word ptr [rdi + r8*2]
+ cmp r8d, ebp
+ BEFORE_JMP
+ jbe LeaveNow
+ AFTER_JMP
+ sub edx, 0x00010000
+ BEFORE_JMP
+ js LeaveNow
+ AFTER_JMP
+
+LoopEntry:
+
+ cmp bx,word ptr [rsi + r8 - 1]
+ BEFORE_JMP
+ jnz LookupLoop1
+ AFTER_JMP
+LookupLoopIsZero:
+ cmp r12w, word ptr [r10 + r8]
+ BEFORE_JMP
+ jnz LookupLoop1
+ AFTER_JMP
+
+
+//;;; Store the current value of chainlen.
+ mov [chainlenwmask], edx
+/*
+;;; Point edi to the string under scrutiny, and esi to the string we
+;;; are hoping to match it up with. In actuality, esi and edi are
+;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is
+;;; initialized to -(MAX_MATCH_8 - scanalign).
+*/
+ lea rsi,[r8+r10]
+ mov rdx, 0xfffffffffffffef8 //; -(MAX_MATCH_8)
+ lea rsi, [rsi + r13 + 0x0108] //;MAX_MATCH_8]
+ lea rdi, [r9 + r13 + 0x0108] //;MAX_MATCH_8]
+
+ prefetcht1 [rsi+rdx]
+ prefetcht1 [rdi+rdx]
+
+/*
+;;; Test the strings for equality, 8 bytes at a time. At the end,
+;;; adjust rdx so that it is offset to the exact byte that mismatched.
+;;;
+;;; We already know at this point that the first three bytes of the
+;;; strings match each other, and they can be safely passed over before
+;;; starting the compare loop. So what this code does is skip over 0-3
+;;; bytes, as much as necessary in order to dword-align the edi
+;;; pointer. (rsi will still be misaligned three times out of four.)
+;;;
+;;; It should be confessed that this loop usually does not represent
+;;; much of the total running time. Replacing it with a more
+;;; straightforward "rep cmpsb" would not drastically degrade
+;;; performance.
+*/
+
+LoopCmps:
+ mov rax, [rsi + rdx]
+ xor rax, [rdi + rdx]
+ jnz LeaveLoopCmps
+
+ mov rax, [rsi + rdx + 8]
+ xor rax, [rdi + rdx + 8]
+ jnz LeaveLoopCmps8
+
+
+ mov rax, [rsi + rdx + 8+8]
+ xor rax, [rdi + rdx + 8+8]
+ jnz LeaveLoopCmps16
+
+ add rdx,8+8+8
+
+ BEFORE_JMP
+ jnz LoopCmps
+ jmp LenMaximum
+ AFTER_JMP
+
+LeaveLoopCmps16: add rdx,8
+LeaveLoopCmps8: add rdx,8
+LeaveLoopCmps:
+
+ test eax, 0x0000FFFF
+ jnz LenLower
+
+ test eax,0xffffffff
+
+ jnz LenLower32
+
+ add rdx,4
+ shr rax,32
+ or ax,ax
+ BEFORE_JMP
+ jnz LenLower
+ AFTER_JMP
+
+LenLower32:
+ shr eax,16
+ add rdx,2
+
+LenLower:
+ sub al, 1
+ adc rdx, 0
+//;;; Calculate the length of the match. If it is longer than MAX_MATCH,
+//;;; then automatically accept it as the best possible match and leave.
+
+ lea rax, [rdi + rdx]
+ sub rax, r9
+ cmp eax, MAX_MATCH
+ BEFORE_JMP
+ jge LenMaximum
+ AFTER_JMP
+/*
+;;; If the length of the match is not longer than the best match we
+;;; have so far, then forget it and return to the lookup loop.
+;///////////////////////////////////
+*/
+ cmp eax, r11d
+ jg LongerMatch
+
+ lea rsi,[r10+r11]
+
+ mov rdi, prev_ad
+ mov edx, [chainlenwmask]
+ BEFORE_JMP
+ jmp LookupLoop
+ AFTER_JMP
+/*
+;;; s->match_start = cur_match;
+;;; best_len = len;
+;;; if (len >= nice_match) break;
+;;; scan_end = *(ushf*)(scan+best_len-1);
+*/
+LongerMatch:
+ mov r11d, eax
+ mov match_start, r8d
+ cmp eax, [nicematch]
+ BEFORE_JMP
+ jge LeaveNow
+ AFTER_JMP
+
+ lea rsi,[r10+rax]
+
+ movzx ebx, word ptr [r9 + rax - 1]
+ mov rdi, prev_ad
+ mov edx, [chainlenwmask]
+ BEFORE_JMP
+ jmp LookupLoop
+ AFTER_JMP
+
+//;;; Accept the current string, with the maximum possible length.
+
+LenMaximum:
+ mov r11d,MAX_MATCH
+ mov match_start, r8d
+
+//;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
+//;;; return s->lookahead;
+
+LeaveNow:
+ mov eax, Lookahead
+ cmp r11d, eax
+ cmovng eax, r11d
+
+
+
+//;;; Restore the stack and return from whence we came.
+
+
+// mov rsi,[save_rsi]
+// mov rdi,[save_rdi]
+ mov rbx,[save_rbx]
+ mov rbp,[save_rbp]
+ mov r12,[save_r12]
+ mov r13,[save_r13]
+ mov r14,[save_r14]
+ mov r15,[save_r15]
+
+
+ ret 0
+//; please don't remove this string !
+//; Your can freely use gvmat64 in any free or commercial app
+//; but it is far better don't remove the string in the binary!
+ // db 0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998, converted to amd 64 by Gilles Vollant 2005",0dh,0ah,0
+
+
+match_init:
+ ret 0
+
+
diff --git a/zlib/contrib/infback9/infback9.c b/zlib/contrib/infback9/infback9.c index f5ddde67da6..7bbe90ced2e 100644 --- a/zlib/contrib/infback9/infback9.c +++ b/zlib/contrib/infback9/infback9.c @@ -1,5 +1,5 @@ /* infback9.c -- inflate deflate64 data using a call-back interface - * Copyright (C) 1995-2003 Mark Adler + * Copyright (C) 1995-2008 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -242,7 +242,7 @@ void FAR *out_desc; code const FAR *distcode; /* starting table for distance codes */ unsigned lenbits; /* index bits for lencode */ unsigned distbits; /* index bits for distcode */ - code this; /* current decoding table entry */ + code here; /* current decoding table entry */ code last; /* parent table entry */ unsigned len; /* length to copy for repeats, bits to drop */ int ret; /* return code */ @@ -384,19 +384,19 @@ void FAR *out_desc; state->have = 0; while (state->have < state->nlen + state->ndist) { for (;;) { - this = lencode[BITS(lenbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = lencode[BITS(lenbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if (this.val < 16) { - NEEDBITS(this.bits); - DROPBITS(this.bits); - state->lens[state->have++] = this.val; + if (here.val < 16) { + NEEDBITS(here.bits); + DROPBITS(here.bits); + state->lens[state->have++] = here.val; } else { - if (this.val == 16) { - NEEDBITS(this.bits + 2); - DROPBITS(this.bits); + if (here.val == 16) { + NEEDBITS(here.bits + 2); + DROPBITS(here.bits); if (state->have == 0) { strm->msg = (char *)"invalid bit length repeat"; mode = BAD; @@ -406,16 +406,16 @@ void FAR *out_desc; copy = 3 + BITS(2); DROPBITS(2); } - else if (this.val == 17) { - NEEDBITS(this.bits + 3); - DROPBITS(this.bits); + else if (here.val == 17) { + NEEDBITS(here.bits + 3); + DROPBITS(here.bits); len = 0; copy = 3 + BITS(3); DROPBITS(3); } else { - NEEDBITS(this.bits + 7); - DROPBITS(this.bits); + NEEDBITS(here.bits + 7); + DROPBITS(here.bits); len = 0; copy = 11 + BITS(7); DROPBITS(7); @@ -433,7 +433,16 @@ void FAR *out_desc; /* handle error breaks in while */ if (mode == BAD) break; - /* build code tables */ + /* check for end-of-block code (better have one) */ + if (state->lens[256] == 0) { + strm->msg = (char *)"invalid code -- missing end-of-block"; + mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftree9.h + concerning the ENOUGH constants, which depend on those values */ state->next = state->codes; lencode = (code const FAR *)(state->next); lenbits = 9; @@ -460,28 +469,28 @@ void FAR *out_desc; case LEN: /* get a literal, length, or end-of-block code */ for (;;) { - this = lencode[BITS(lenbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = lencode[BITS(lenbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if (this.op && (this.op & 0xf0) == 0) { - last = this; + if (here.op && (here.op & 0xf0) == 0) { + last = here; for (;;) { - this = lencode[last.val + + here = lencode[last.val + (BITS(last.bits + last.op) >> last.bits)]; - if ((unsigned)(last.bits + this.bits) <= bits) break; + if ((unsigned)(last.bits + here.bits) <= bits) break; PULLBYTE(); } DROPBITS(last.bits); } - DROPBITS(this.bits); - length = (unsigned)this.val; + DROPBITS(here.bits); + length = (unsigned)here.val; /* process literal */ - if (this.op == 0) { - Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + if (here.op == 0) { + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? "inflate: literal '%c'\n" : - "inflate: literal 0x%02x\n", this.val)); + "inflate: literal 0x%02x\n", here.val)); ROOM(); *put++ = (unsigned char)(length); left--; @@ -490,21 +499,21 @@ void FAR *out_desc; } /* process end of block */ - if (this.op & 32) { + if (here.op & 32) { Tracevv((stderr, "inflate: end of block\n")); mode = TYPE; break; } /* invalid code */ - if (this.op & 64) { + if (here.op & 64) { strm->msg = (char *)"invalid literal/length code"; mode = BAD; break; } /* length code -- get extra bits, if any */ - extra = (unsigned)(this.op) & 31; + extra = (unsigned)(here.op) & 31; if (extra != 0) { NEEDBITS(extra); length += BITS(extra); @@ -514,30 +523,30 @@ void FAR *out_desc; /* get distance code */ for (;;) { - this = distcode[BITS(distbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = distcode[BITS(distbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if ((this.op & 0xf0) == 0) { - last = this; + if ((here.op & 0xf0) == 0) { + last = here; for (;;) { - this = distcode[last.val + + here = distcode[last.val + (BITS(last.bits + last.op) >> last.bits)]; - if ((unsigned)(last.bits + this.bits) <= bits) break; + if ((unsigned)(last.bits + here.bits) <= bits) break; PULLBYTE(); } DROPBITS(last.bits); } - DROPBITS(this.bits); - if (this.op & 64) { + DROPBITS(here.bits); + if (here.op & 64) { strm->msg = (char *)"invalid distance code"; mode = BAD; break; } - offset = (unsigned)this.val; + offset = (unsigned)here.val; /* get distance extra bits, if any */ - extra = (unsigned)(this.op) & 15; + extra = (unsigned)(here.op) & 15; if (extra != 0) { NEEDBITS(extra); offset += BITS(extra); diff --git a/zlib/contrib/infback9/inftree9.c b/zlib/contrib/infback9/inftree9.c index 0993f75646c..306c5f1b19e 100644 --- a/zlib/contrib/infback9/inftree9.c +++ b/zlib/contrib/infback9/inftree9.c @@ -1,5 +1,5 @@ /* inftree9.c -- generate Huffman trees for efficient decoding - * Copyright (C) 1995-2005 Mark Adler + * Copyright (C) 1995-2010 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate9_copyright[] = - " inflate9 1.2.3 Copyright 1995-2005 Mark Adler "; + " inflate9 1.2.5 Copyright 1995-2010 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -64,7 +64,7 @@ unsigned short FAR *work; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132, - 133, 133, 133, 133, 144, 201, 196}; + 133, 133, 133, 133, 144, 73, 195}; static const unsigned short dbase[32] = { /* Distance codes 0..31 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, @@ -160,11 +160,10 @@ unsigned short FAR *work; entered in the tables. used keeps track of how many table entries have been allocated from the - provided *table space. It is checked when a LENS table is being made - against the space in *table, ENOUGH, minus the maximum space needed by - the worst case distance code, MAXD. This should never happen, but the - sufficiency of ENOUGH has not been proven exhaustively, hence the check. - This assumes that when type == LENS, bits == 9. + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftree9.h + for more information. sym increments through all symbols, and the loop terminates when all codes of length max, i.e. all codes, have been processed. This @@ -203,7 +202,8 @@ unsigned short FAR *work; mask = used - 1; /* mask for comparing low */ /* check available table space */ - if (type == LENS && used >= ENOUGH - MAXD) + if ((type == LENS && used >= ENOUGH_LENS) || + (type == DISTS && used >= ENOUGH_DISTS)) return 1; /* process all codes and make table entries */ @@ -270,7 +270,8 @@ unsigned short FAR *work; /* check for enough space */ used += 1U << curr; - if (type == LENS && used >= ENOUGH - MAXD) + if ((type == LENS && used >= ENOUGH_LENS) || + (type == DISTS && used >= ENOUGH_DISTS)) return 1; /* point entry in root table to sub-table */ diff --git a/zlib/contrib/infback9/inftree9.h b/zlib/contrib/infback9/inftree9.h index a268084eea6..5ab21f0c6d1 100644 --- a/zlib/contrib/infback9/inftree9.h +++ b/zlib/contrib/infback9/inftree9.h @@ -1,5 +1,5 @@ /* inftree9.h -- header to use inftree9.c - * Copyright (C) 1995-2003 Mark Adler + * Copyright (C) 1995-2008 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -35,15 +35,21 @@ typedef struct { 01000000 - invalid code */ -/* Maximum size of dynamic tree. The maximum found in a long but non- - exhaustive search was 1444 code structures (852 for length/literals - and 592 for distances, the latter actually the result of an - exhaustive search). The true maximum is not known, but the value - below is more than safe. */ -#define ENOUGH 2048 -#define MAXD 592 +/* Maximum size of the dynamic table. The maximum number of code structures is + 1446, which is the sum of 852 for literal/length codes and 594 for distance + codes. These values were found by exhaustive searches using the program + examples/enough.c found in the zlib distribtution. The arguments to that + program are the number of symbols, the initial root table size, and the + maximum bit length of a code. "enough 286 9 15" for literal/length codes + returns returns 852, and "enough 32 6 15" for distance codes returns 594. + The initial root table size (9 or 6) is found in the fifth argument of the + inflate_table() calls in infback9.c. If the root table size is changed, + then these maximum sizes would be need to be recalculated and updated. */ +#define ENOUGH_LENS 852 +#define ENOUGH_DISTS 594 +#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS) -/* Type of code to build for inftable() */ +/* Type of code to build for inflate_table9() */ typedef enum { CODES, LENS, diff --git a/zlib/contrib/inflate86/inffas86.c b/zlib/contrib/inflate86/inffas86.c index 6da76358ccb..7292f67b753 100644 --- a/zlib/contrib/inflate86/inffas86.c +++ b/zlib/contrib/inflate86/inffas86.c @@ -113,7 +113,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ ar.beg = ar.out - (start - strm->avail_out); ar.end = ar.out + (strm->avail_out - PAD_AVAIL_OUT); ar.wsize = state->wsize; - ar.write = state->write; + ar.write = state->wnext; ar.window = state->window; ar.hold = state->hold; ar.bits = state->bits; diff --git a/zlib/contrib/masm686/match.asm b/zlib/contrib/masm686/match.asm deleted file mode 100644 index 4b03a71abd5..00000000000 --- a/zlib/contrib/masm686/match.asm +++ /dev/null @@ -1,413 +0,0 @@ -
-; match.asm -- Pentium-Pro optimized version of longest_match()
-;
-; Updated for zlib 1.1.3 and converted to MASM 6.1x
-; Copyright (C) 2000 Dan Higdon <hdan@kinesoft.com>
-; and Chuck Walbourn <chuckw@kinesoft.com>
-; Corrections by Cosmin Truta <cosmint@cs.ubbcluj.ro>
-;
-; This is free software; you can redistribute it and/or modify it
-; under the terms of the GNU General Public License.
-
-; Based on match.S
-; Written for zlib 1.1.2
-; Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>
-;
-; Modified by Gilles Vollant (2005) for add gzhead and gzindex
-
- .686P
- .MODEL FLAT
-
-;===========================================================================
-; EQUATES
-;===========================================================================
-
-MAX_MATCH EQU 258
-MIN_MATCH EQU 3
-MIN_LOOKAHEAD EQU (MAX_MATCH + MIN_MATCH + 1)
-MAX_MATCH_8 EQU ((MAX_MATCH + 7) AND (NOT 7))
-
-;===========================================================================
-; STRUCTURES
-;===========================================================================
-
-; This STRUCT assumes a 4-byte alignment
-
-DEFLATE_STATE STRUCT
-ds_strm dd ?
-ds_status dd ?
-ds_pending_buf dd ?
-ds_pending_buf_size dd ?
-ds_pending_out dd ?
-ds_pending dd ?
-ds_wrap dd ?
-; gzhead and gzindex are added in zlib 1.2.2.2 (see deflate.h)
-ds_gzhead dd ?
-ds_gzindex dd ?
-ds_data_type db ?
-ds_method db ?
- db ? ; padding
- db ? ; padding
-ds_last_flush dd ?
-ds_w_size dd ? ; used
-ds_w_bits dd ?
-ds_w_mask dd ? ; used
-ds_window dd ? ; used
-ds_window_size dd ?
-ds_prev dd ? ; used
-ds_head dd ?
-ds_ins_h dd ?
-ds_hash_size dd ?
-ds_hash_bits dd ?
-ds_hash_mask dd ?
-ds_hash_shift dd ?
-ds_block_start dd ?
-ds_match_length dd ? ; used
-ds_prev_match dd ? ; used
-ds_match_available dd ?
-ds_strstart dd ? ; used
-ds_match_start dd ? ; used
-ds_lookahead dd ? ; used
-ds_prev_length dd ? ; used
-ds_max_chain_length dd ? ; used
-ds_max_laxy_match dd ?
-ds_level dd ?
-ds_strategy dd ?
-ds_good_match dd ? ; used
-ds_nice_match dd ? ; used
-
-; Don't need anymore of the struct for match
-DEFLATE_STATE ENDS
-
-;===========================================================================
-; CODE
-;===========================================================================
-_TEXT SEGMENT
-
-;---------------------------------------------------------------------------
-; match_init
-;---------------------------------------------------------------------------
- ALIGN 4
-PUBLIC _match_init
-_match_init PROC
- ; no initialization needed
- ret
-_match_init ENDP
-
-;---------------------------------------------------------------------------
-; uInt longest_match(deflate_state *deflatestate, IPos curmatch)
-;---------------------------------------------------------------------------
- ALIGN 4
-
-PUBLIC _longest_match
-_longest_match PROC
-
-; Since this code uses EBP for a scratch register, the stack frame must
-; be manually constructed and referenced relative to the ESP register.
-
-; Stack image
-; Variables
-chainlenwmask = 0 ; high word: current chain len
- ; low word: s->wmask
-window = 4 ; local copy of s->window
-windowbestlen = 8 ; s->window + bestlen
-scanend = 12 ; last two bytes of string
-scanstart = 16 ; first two bytes of string
-scanalign = 20 ; dword-misalignment of string
-nicematch = 24 ; a good enough match size
-bestlen = 28 ; size of best match so far
-scan = 32 ; ptr to string wanting match
-varsize = 36 ; number of bytes (also offset to last saved register)
-
-; Saved Registers (actually pushed into place)
-ebx_save = 36
-edi_save = 40
-esi_save = 44
-ebp_save = 48
-
-; Parameters
-retaddr = 52
-deflatestate = 56
-curmatch = 60
-
-; Save registers that the compiler may be using
- push ebp
- push edi
- push esi
- push ebx
-
-; Allocate local variable space
- sub esp,varsize
-
-; Retrieve the function arguments. ecx will hold cur_match
-; throughout the entire function. edx will hold the pointer to the
-; deflate_state structure during the function's setup (before
-; entering the main loop).
-
- mov edx, [esp+deflatestate]
-ASSUME edx:PTR DEFLATE_STATE
-
- mov ecx, [esp+curmatch]
-
-; uInt wmask = s->w_mask;
-; unsigned chain_length = s->max_chain_length;
-; if (s->prev_length >= s->good_match) {
-; chain_length >>= 2;
-; }
-
- mov eax, [edx].ds_prev_length
- mov ebx, [edx].ds_good_match
- cmp eax, ebx
- mov eax, [edx].ds_w_mask
- mov ebx, [edx].ds_max_chain_length
- jl SHORT LastMatchGood
- shr ebx, 2
-LastMatchGood:
-
-; chainlen is decremented once beforehand so that the function can
-; use the sign flag instead of the zero flag for the exit test.
-; It is then shifted into the high word, to make room for the wmask
-; value, which it will always accompany.
-
- dec ebx
- shl ebx, 16
- or ebx, eax
- mov [esp+chainlenwmask], ebx
-
-; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
-
- mov eax, [edx].ds_nice_match
- mov ebx, [edx].ds_lookahead
- cmp ebx, eax
- jl SHORT LookaheadLess
- mov ebx, eax
-LookaheadLess:
- mov [esp+nicematch], ebx
-
-;/* register Bytef *scan = s->window + s->strstart; */
-
- mov esi, [edx].ds_window
- mov [esp+window], esi
- mov ebp, [edx].ds_strstart
- lea edi, [esi+ebp]
- mov [esp+scan],edi
-
-;/* Determine how many bytes the scan ptr is off from being */
-;/* dword-aligned. */
-
- mov eax, edi
- neg eax
- and eax, 3
- mov [esp+scanalign], eax
-
-;/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ? */
-;/* s->strstart - (IPos)MAX_DIST(s) : NIL; */
-
- mov eax, [edx].ds_w_size
- sub eax, MIN_LOOKAHEAD
- sub ebp, eax
- jg SHORT LimitPositive
- xor ebp, ebp
-LimitPositive:
-
-;/* int best_len = s->prev_length; */
-
- mov eax, [edx].ds_prev_length
- mov [esp+bestlen], eax
-
-;/* Store the sum of s->window + best_len in %esi locally, and in %esi. */
-
- add esi, eax
- mov [esp+windowbestlen], esi
-
-;/* register ush scan_start = *(ushf*)scan; */
-;/* register ush scan_end = *(ushf*)(scan+best_len-1); */
-;/* Posf *prev = s->prev; */
-
- movzx ebx, WORD PTR[edi]
- mov [esp+scanstart], ebx
- movzx ebx, WORD PTR[eax+edi-1]
- mov [esp+scanend], ebx
- mov edi, [edx].ds_prev
-
-;/* Jump into the main loop. */
-
- mov edx, [esp+chainlenwmask]
- jmp SHORT LoopEntry
-
-;/* do {
-; * match = s->window + cur_match;
-; * if (*(ushf*)(match+best_len-1) != scan_end ||
-; * *(ushf*)match != scan_start) continue;
-; * [...]
-; * } while ((cur_match = prev[cur_match & wmask]) > limit
-; * && --chain_length != 0);
-; *
-; * Here is the inner loop of the function. The function will spend the
-; * majority of its time in this loop, and majority of that time will
-; * be spent in the first ten instructions.
-; *
-; * Within this loop:
-; * %ebx = scanend
-; * %ecx = curmatch
-; * %edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)
-; * %esi = windowbestlen - i.e., (window + bestlen)
-; * %edi = prev
-; * %ebp = limit
-; */
-
- ALIGN 4
-LookupLoop:
- and ecx, edx
- movzx ecx, WORD PTR[edi+ecx*2]
- cmp ecx, ebp
- jbe LeaveNow
- sub edx, 000010000H
- js LeaveNow
-
-LoopEntry:
- movzx eax, WORD PTR[esi+ecx-1]
- cmp eax, ebx
- jnz SHORT LookupLoop
-
- mov eax, [esp+window]
- movzx eax, WORD PTR[eax+ecx]
- cmp eax, [esp+scanstart]
- jnz SHORT LookupLoop
-
-;/* Store the current value of chainlen. */
-
- mov [esp+chainlenwmask], edx
-
-;/* Point %edi to the string under scrutiny, and %esi to the string we */
-;/* are hoping to match it up with. In actuality, %esi and %edi are */
-;/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is */
-;/* initialized to -(MAX_MATCH_8 - scanalign). */
-
- mov esi, [esp+window]
- mov edi, [esp+scan]
- add esi, ecx
- mov eax, [esp+scanalign]
- mov edx, -MAX_MATCH_8
- lea edi, [edi+eax+MAX_MATCH_8]
- lea esi, [esi+eax+MAX_MATCH_8]
-
-;/* Test the strings for equality, 8 bytes at a time. At the end,
-; * adjust %edx so that it is offset to the exact byte that mismatched.
-; *
-; * We already know at this point that the first three bytes of the
-; * strings match each other, and they can be safely passed over before
-; * starting the compare loop. So what this code does is skip over 0-3
-; * bytes, as much as necessary in order to dword-align the %edi
-; * pointer. (%esi will still be misaligned three times out of four.)
-; *
-; * It should be confessed that this loop usually does not represent
-; * much of the total running time. Replacing it with a more
-; * straightforward "rep cmpsb" would not drastically degrade
-; * performance.
-; */
-
-LoopCmps:
- mov eax, DWORD PTR[esi+edx]
- xor eax, DWORD PTR[edi+edx]
- jnz SHORT LeaveLoopCmps
-
- mov eax, DWORD PTR[esi+edx+4]
- xor eax, DWORD PTR[edi+edx+4]
- jnz SHORT LeaveLoopCmps4
-
- add edx, 8
- jnz SHORT LoopCmps
- jmp LenMaximum
- ALIGN 4
-
-LeaveLoopCmps4:
- add edx, 4
-
-LeaveLoopCmps:
- test eax, 00000FFFFH
- jnz SHORT LenLower
-
- add edx, 2
- shr eax, 16
-
-LenLower:
- sub al, 1
- adc edx, 0
-
-;/* Calculate the length of the match. If it is longer than MAX_MATCH, */
-;/* then automatically accept it as the best possible match and leave. */
-
- lea eax, [edi+edx]
- mov edi, [esp+scan]
- sub eax, edi
- cmp eax, MAX_MATCH
- jge SHORT LenMaximum
-
-;/* If the length of the match is not longer than the best match we */
-;/* have so far, then forget it and return to the lookup loop. */
-
- mov edx, [esp+deflatestate]
- mov ebx, [esp+bestlen]
- cmp eax, ebx
- jg SHORT LongerMatch
- mov esi, [esp+windowbestlen]
- mov edi, [edx].ds_prev
- mov ebx, [esp+scanend]
- mov edx, [esp+chainlenwmask]
- jmp LookupLoop
- ALIGN 4
-
-;/* s->match_start = cur_match; */
-;/* best_len = len; */
-;/* if (len >= nice_match) break; */
-;/* scan_end = *(ushf*)(scan+best_len-1); */
-
-LongerMatch:
- mov ebx, [esp+nicematch]
- mov [esp+bestlen], eax
- mov [edx].ds_match_start, ecx
- cmp eax, ebx
- jge SHORT LeaveNow
- mov esi, [esp+window]
- add esi, eax
- mov [esp+windowbestlen], esi
- movzx ebx, WORD PTR[edi+eax-1]
- mov edi, [edx].ds_prev
- mov [esp+scanend], ebx
- mov edx, [esp+chainlenwmask]
- jmp LookupLoop
- ALIGN 4
-
-;/* Accept the current string, with the maximum possible length. */
-
-LenMaximum:
- mov edx, [esp+deflatestate]
- mov DWORD PTR[esp+bestlen], MAX_MATCH
- mov [edx].ds_match_start, ecx
-
-;/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len; */
-;/* return s->lookahead; */
-
-LeaveNow:
- mov edx, [esp+deflatestate]
- mov ebx, [esp+bestlen]
- mov eax, [edx].ds_lookahead
- cmp ebx, eax
- jg SHORT LookaheadRet
- mov eax, ebx
-LookaheadRet:
-
-; Restore the stack and return from whence we came.
-
- add esp, varsize
- pop ebx
- pop esi
- pop edi
- pop ebp
- ret
-
-_longest_match ENDP
-
-_TEXT ENDS
-END
diff --git a/zlib/contrib/masmx64/gvmat64.asm b/zlib/contrib/masmx64/gvmat64.asm index 790d65554a1..9879c28b908 100644 --- a/zlib/contrib/masmx64/gvmat64.asm +++ b/zlib/contrib/masmx64/gvmat64.asm @@ -2,8 +2,10 @@ ; deflate_state *s,
; IPos cur_match); /* current match */
-; gvmat64.asm -- Asm portion of the optimized longest_match for 32 bits x86
-; Copyright (C) 1995-2005 Jean-loup Gailly, Brian Raiter and Gilles Vollant.
+; gvmat64.asm -- Asm portion of the optimized longest_match for 32 bits x86_64
+; (AMD64 on Athlon 64, Opteron, Phenom
+; and Intel EM64T on Pentium 4 with EM64T, Pentium D, Core 2 Duo, Core I5/I7)
+; Copyright (C) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant.
;
; File written by Gilles Vollant, by converting to assembly the longest_match
; from Jean-loup Gailly in deflate.c of zLib and infoZip zip.
@@ -11,6 +13,24 @@ ; and by taking inspiration on asm686 with masm, optimised assembly code
; from Brian Raiter, written 1998
;
+; This software is provided 'as-is', without any express or implied
+; warranty. In no event will the authors be held liable for any damages
+; arising from the use of this software.
+;
+; Permission is granted to anyone to use this software for any purpose,
+; including commercial applications, and to alter it and redistribute it
+; freely, subject to the following restrictions:
+;
+; 1. The origin of this software must not be misrepresented; you must not
+; claim that you wrote the original software. If you use this software
+; in a product, an acknowledgment in the product documentation would be
+; appreciated but is not required.
+; 2. Altered source versions must be plainly marked as such, and must not be
+; misrepresented as being the original software
+; 3. This notice may not be removed or altered from any source distribution.
+;
+;
+;
; http://www.zlib.net
; http://www.winimage.com/zLibDll
; http://www.muppetlabs.com/~breadbox/software/assembly.html
@@ -26,10 +46,10 @@ ;
; This file compile with Microsoft Macro Assembler (x64) for AMD64
;
-; ml64.exe is given with Visual Studio 2005 and Windows 2003 server DDK
+; ml64.exe is given with Visual Studio 2005/2008/2010 and Windows WDK
;
-; (you can get Windows 2003 server DDK with ml64 and cl for AMD64 from
-; http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price)
+; (you can get Windows WDK with ml64 for AMD64 from
+; http://www.microsoft.com/whdc/Devtools/wdk/default.mspx for low price)
;
@@ -71,6 +91,25 @@ save_r13 equ rsp + 64 - LocalVarsSize ;save_r15 equ rsp + 80 - LocalVarsSize
+; summary of register usage
+; scanend ebx
+; scanendw bx
+; chainlenwmask edx
+; curmatch rsi
+; curmatchd esi
+; windowbestlen r8
+; scanalign r9
+; scanalignd r9d
+; window r10
+; bestlen r11
+; bestlend r11d
+; scanstart r12d
+; scanstartw r12w
+; scan r13
+; nicematch r14d
+; limit r15
+; limitd r15d
+; prev rcx
; all the +4 offsets are due to the addition of pending_buf_size (in zlib
; in the deflate_state structure since the asm code was first written
@@ -406,7 +445,8 @@ LoopCmps: add rdx,8+8+8
- jmp short LoopCmps
+ jnz short LoopCmps
+ jmp short LenMaximum
LeaveLoopCmps16: add rdx,8
LeaveLoopCmps8: add rdx,8
LeaveLoopCmps:
diff --git a/zlib/contrib/masmx64/inffas8664.c b/zlib/contrib/masmx64/inffas8664.c index 3af764de9c8..e8af06fa023 100644 --- a/zlib/contrib/masmx64/inffas8664.c +++ b/zlib/contrib/masmx64/inffas8664.c @@ -111,11 +111,11 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ type_ar ar;
void inffas8664fnc(struct inffast_ar * par);
-
+
#if (defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 )) || (defined(_MSC_VER) && defined(_M_AMD64))
#define PAD_AVAIL_IN 6
-#define PAD_AVAIL_OUT 258
+#define PAD_AVAIL_OUT 258
#else
#define PAD_AVAIL_IN 5
#define PAD_AVAIL_OUT 257
@@ -130,7 +130,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ ar.beg = ar.out - (start - strm->avail_out);
ar.end = ar.out + (strm->avail_out - PAD_AVAIL_OUT);
ar.wsize = state->wsize;
- ar.write = state->write;
+ ar.write = state->wnext;
ar.window = state->window;
ar.hold = state->hold;
ar.bits = state->bits;
diff --git a/zlib/contrib/masmx64/inffasx64.asm b/zlib/contrib/masmx64/inffasx64.asm index b5d93a272ab..60a8d89b718 100644 --- a/zlib/contrib/masmx64/inffasx64.asm +++ b/zlib/contrib/masmx64/inffasx64.asm @@ -9,12 +9,16 @@ ; ml64.exe /Flinffasx64 /c /Zi inffasx64.asm
; with Microsoft Macro Assembler (x64) for AMD64
;
-; ml64.exe is given with Visual Studio 2005, Windows 2003 server DDK
+
+; This file compile with Microsoft Macro Assembler (x64) for AMD64
+;
+; ml64.exe is given with Visual Studio 2005/2008/2010 and Windows WDK
;
-; (you can get Windows 2003 server DDK with ml64 and cl.exe for AMD64 from
-; http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price)
+; (you can get Windows WDK with ml64 for AMD64 from
+; http://www.microsoft.com/whdc/Devtools/wdk/default.mspx for low price)
;
+
.code
inffas8664fnc PROC
@@ -379,7 +383,7 @@ L_break_loop_with_status: mov r14,[rsp-40]
mov r15,[rsp-48]
mov rbx,[rsp-56]
-
+
ret 0
; :
; : "m" (ar)
diff --git a/zlib/contrib/masmx64/readme.txt b/zlib/contrib/masmx64/readme.txt index ee03115c5a7..2da6733412a 100644 --- a/zlib/contrib/masmx64/readme.txt +++ b/zlib/contrib/masmx64/readme.txt @@ -12,7 +12,10 @@ inffasx64.asm and inffas8664.c were written by Chris Anderson, by optimizing Use instructions
----------------
-Copy these files into the zlib source directory.
+Assemble the .asm files using MASM and put the object files into the zlib source
+directory. You can also get object files here:
+
+ http://www.winimage.com/zLibDll/zlib124_masm_obj.zip
define ASMV and ASMINF in your project. Include inffas8664.c in your source tree,
and inffasx64.obj and gvmat64.obj as object to link.
@@ -24,5 +27,5 @@ run bld_64.bat with Microsoft Macro Assembler (x64) for AMD64 (ml64.exe) ml64.exe is given with Visual Studio 2005, Windows 2003 server DDK
-You can get Windows 2003 server DDK with ml64 and cl for AMD64 from
+You can get Windows 2003 server DDK with ml64 and cl for AMD64 from
http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price)
diff --git a/zlib/contrib/masmx86/bld_ml32.bat b/zlib/contrib/masmx86/bld_ml32.bat index 99144d07af0..e1b86bf68a9 100644 --- a/zlib/contrib/masmx86/bld_ml32.bat +++ b/zlib/contrib/masmx86/bld_ml32.bat @@ -1,2 +1,2 @@ -ml /coff /Zi /c /Flgvmat32.lst gvmat32.asm
-ml /coff /Zi /c /Flinffas32.lst inffas32.asm
+ml /coff /Zi /c /Flmatch686.lst match686.asm
+ml /coff /Zi /c /Flinffas32.lst inffas32.asm
diff --git a/zlib/contrib/masmx86/gvmat32.asm b/zlib/contrib/masmx86/gvmat32.asm deleted file mode 100644 index 874bb2d482b..00000000000 --- a/zlib/contrib/masmx86/gvmat32.asm +++ /dev/null @@ -1,972 +0,0 @@ -; gvmat32.asm -- Asm portion of the optimized longest_match for 32 bits x86
-; Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant.
-; File written by Gilles Vollant, by modifiying the longest_match
-; from Jean-loup Gailly in deflate.c
-;
-; http://www.zlib.net
-; http://www.winimage.com/zLibDll
-; http://www.muppetlabs.com/~breadbox/software/assembly.html
-;
-; For Visual C++ 4.x and higher and ML 6.x and higher
-; ml.exe is in directory \MASM611C of Win95 DDK
-; ml.exe is also distributed in http://www.masm32.com/masmdl.htm
-; and in VC++2003 toolkit at http://msdn.microsoft.com/visualc/vctoolkit2003/
-;
-; this file contain two implementation of longest_match
-;
-; longest_match_7fff : written 1996 by Gilles Vollant optimized for
-; first Pentium. Assume s->w_mask == 0x7fff
-; longest_match_686 : written by Brian raiter (1998), optimized for Pentium Pro
-;
-; for using an seembly version of longest_match, you need define ASMV in project
-; There is two way in using gvmat32.asm
-;
-; A) Suggested method
-; if you want include both longest_match_7fff and longest_match_686
-; compile the asm file running
-; ml /coff /Zi /Flgvmat32.lst /c gvmat32.asm
-; and include gvmat32c.c in your project
-; if you have an old cpu (386,486 or first Pentium) and s->w_mask==0x7fff,
-; longest_match_7fff will be used
-; if you have a more modern CPU (Pentium Pro, II and higher)
-; longest_match_686 will be used
-; on old cpu with s->w_mask!=0x7fff, longest_match_686 will be used,
-; but this is not a sitation you'll find often
-;
-; B) Alternative
-; if you are not interresed in old cpu performance and want the smaller
-; binaries possible
-;
-; compile the asm file running
-; ml /coff /Zi /c /Flgvmat32.lst /DNOOLDPENTIUMCODE gvmat32.asm
-; and do not include gvmat32c.c in your project (ou define also
-; NOOLDPENTIUMCODE)
-;
-; note : as I known, longest_match_686 is very faster than longest_match_7fff
-; on pentium Pro/II/III, faster (but less) in P4, but it seem
-; longest_match_7fff can be faster (very very litte) on AMD Athlon64/K8
-;
-; see below : zlib1222add must be adjuster if you use a zlib version < 1.2.2.2
-
-;uInt longest_match_7fff(s, cur_match)
-; deflate_state *s;
-; IPos cur_match; /* current match */
-
- NbStack equ 76
- cur_match equ dword ptr[esp+NbStack-0]
- str_s equ dword ptr[esp+NbStack-4]
-; 5 dword on top (ret,ebp,esi,edi,ebx)
- adrret equ dword ptr[esp+NbStack-8]
- pushebp equ dword ptr[esp+NbStack-12]
- pushedi equ dword ptr[esp+NbStack-16]
- pushesi equ dword ptr[esp+NbStack-20]
- pushebx equ dword ptr[esp+NbStack-24]
-
- chain_length equ dword ptr [esp+NbStack-28]
- limit equ dword ptr [esp+NbStack-32]
- best_len equ dword ptr [esp+NbStack-36]
- window equ dword ptr [esp+NbStack-40]
- prev equ dword ptr [esp+NbStack-44]
- scan_start equ word ptr [esp+NbStack-48]
- wmask equ dword ptr [esp+NbStack-52]
- match_start_ptr equ dword ptr [esp+NbStack-56]
- nice_match equ dword ptr [esp+NbStack-60]
- scan equ dword ptr [esp+NbStack-64]
-
- windowlen equ dword ptr [esp+NbStack-68]
- match_start equ dword ptr [esp+NbStack-72]
- strend equ dword ptr [esp+NbStack-76]
- NbStackAdd equ (NbStack-24)
-
- .386p
-
- name gvmatch
- .MODEL FLAT
-
-
-
-; all the +zlib1222add offsets are due to the addition of fields
-; in zlib in the deflate_state structure since the asm code was first written
-; (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)").
-; (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0").
-; if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8").
-
- zlib1222add equ 8
-
-; Note : these value are good with a 8 bytes boundary pack structure
- dep_chain_length equ 74h+zlib1222add
- dep_window equ 30h+zlib1222add
- dep_strstart equ 64h+zlib1222add
- dep_prev_length equ 70h+zlib1222add
- dep_nice_match equ 88h+zlib1222add
- dep_w_size equ 24h+zlib1222add
- dep_prev equ 38h+zlib1222add
- dep_w_mask equ 2ch+zlib1222add
- dep_good_match equ 84h+zlib1222add
- dep_match_start equ 68h+zlib1222add
- dep_lookahead equ 6ch+zlib1222add
-
-
-_TEXT segment
-
-IFDEF NOUNDERLINE
- IFDEF NOOLDPENTIUMCODE
- public longest_match
- public match_init
- ELSE
- public longest_match_7fff
- public cpudetect32
- public longest_match_686
- ENDIF
-ELSE
- IFDEF NOOLDPENTIUMCODE
- public _longest_match
- public _match_init
- ELSE
- public _longest_match_7fff
- public _cpudetect32
- public _longest_match_686
- ENDIF
-ENDIF
-
- MAX_MATCH equ 258
- MIN_MATCH equ 3
- MIN_LOOKAHEAD equ (MAX_MATCH+MIN_MATCH+1)
-
-
-
-IFNDEF NOOLDPENTIUMCODE
-IFDEF NOUNDERLINE
-longest_match_7fff proc near
-ELSE
-_longest_match_7fff proc near
-ENDIF
-
- mov edx,[esp+4]
-
-
-
- push ebp
- push edi
- push esi
- push ebx
-
- sub esp,NbStackAdd
-
-; initialize or check the variables used in match.asm.
- mov ebp,edx
-
-; chain_length = s->max_chain_length
-; if (prev_length>=good_match) chain_length >>= 2
- mov edx,[ebp+dep_chain_length]
- mov ebx,[ebp+dep_prev_length]
- cmp [ebp+dep_good_match],ebx
- ja noshr
- shr edx,2
-noshr:
-; we increment chain_length because in the asm, the --chain_lenght is in the beginning of the loop
- inc edx
- mov edi,[ebp+dep_nice_match]
- mov chain_length,edx
- mov eax,[ebp+dep_lookahead]
- cmp eax,edi
-; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
- jae nolookaheadnicematch
- mov edi,eax
-nolookaheadnicematch:
-; best_len = s->prev_length
- mov best_len,ebx
-
-; window = s->window
- mov esi,[ebp+dep_window]
- mov ecx,[ebp+dep_strstart]
- mov window,esi
-
- mov nice_match,edi
-; scan = window + strstart
- add esi,ecx
- mov scan,esi
-; dx = *window
- mov dx,word ptr [esi]
-; bx = *(window+best_len-1)
- mov bx,word ptr [esi+ebx-1]
- add esi,MAX_MATCH-1
-; scan_start = *scan
- mov scan_start,dx
-; strend = scan + MAX_MATCH-1
- mov strend,esi
-; bx = scan_end = *(window+best_len-1)
-
-; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
-; s->strstart - (IPos)MAX_DIST(s) : NIL;
-
- mov esi,[ebp+dep_w_size]
- sub esi,MIN_LOOKAHEAD
-; here esi = MAX_DIST(s)
- sub ecx,esi
- ja nodist
- xor ecx,ecx
-nodist:
- mov limit,ecx
-
-; prev = s->prev
- mov edx,[ebp+dep_prev]
- mov prev,edx
-
-;
- mov edx,dword ptr [ebp+dep_match_start]
- mov bp,scan_start
- mov eax,cur_match
- mov match_start,edx
-
- mov edx,window
- mov edi,edx
- add edi,best_len
- mov esi,prev
- dec edi
-; windowlen = window + best_len -1
- mov windowlen,edi
-
- jmp beginloop2
- align 4
-
-; here, in the loop
-; eax = ax = cur_match
-; ecx = limit
-; bx = scan_end
-; bp = scan_start
-; edi = windowlen (window + best_len -1)
-; esi = prev
-
-
-;// here; chain_length <=16
-normalbeg0add16:
- add chain_length,16
- jz exitloop
-normalbeg0:
- cmp word ptr[edi+eax],bx
- je normalbeg2noroll
-rcontlabnoroll:
-; cur_match = prev[cur_match & wmask]
- and eax,7fffh
- mov ax,word ptr[esi+eax*2]
-; if cur_match > limit, go to exitloop
- cmp ecx,eax
- jnb exitloop
-; if --chain_length != 0, go to exitloop
- dec chain_length
- jnz normalbeg0
- jmp exitloop
-
-normalbeg2noroll:
-; if (scan_start==*(cur_match+window)) goto normalbeg2
- cmp bp,word ptr[edx+eax]
- jne rcontlabnoroll
- jmp normalbeg2
-
-contloop3:
- mov edi,windowlen
-
-; cur_match = prev[cur_match & wmask]
- and eax,7fffh
- mov ax,word ptr[esi+eax*2]
-; if cur_match > limit, go to exitloop
- cmp ecx,eax
-jnbexitloopshort1:
- jnb exitloop
-; if --chain_length != 0, go to exitloop
-
-
-; begin the main loop
-beginloop2:
- sub chain_length,16+1
-; if chain_length <=16, don't use the unrolled loop
- jna normalbeg0add16
-
-do16:
- cmp word ptr[edi+eax],bx
- je normalbeg2dc0
-
-maccn MACRO lab
- and eax,7fffh
- mov ax,word ptr[esi+eax*2]
- cmp ecx,eax
- jnb exitloop
- cmp word ptr[edi+eax],bx
- je lab
- ENDM
-
-rcontloop0:
- maccn normalbeg2dc1
-
-rcontloop1:
- maccn normalbeg2dc2
-
-rcontloop2:
- maccn normalbeg2dc3
-
-rcontloop3:
- maccn normalbeg2dc4
-
-rcontloop4:
- maccn normalbeg2dc5
-
-rcontloop5:
- maccn normalbeg2dc6
-
-rcontloop6:
- maccn normalbeg2dc7
-
-rcontloop7:
- maccn normalbeg2dc8
-
-rcontloop8:
- maccn normalbeg2dc9
-
-rcontloop9:
- maccn normalbeg2dc10
-
-rcontloop10:
- maccn short normalbeg2dc11
-
-rcontloop11:
- maccn short normalbeg2dc12
-
-rcontloop12:
- maccn short normalbeg2dc13
-
-rcontloop13:
- maccn short normalbeg2dc14
-
-rcontloop14:
- maccn short normalbeg2dc15
-
-rcontloop15:
- and eax,7fffh
- mov ax,word ptr[esi+eax*2]
- cmp ecx,eax
- jnb exitloop
-
- sub chain_length,16
- ja do16
- jmp normalbeg0add16
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-normbeg MACRO rcontlab,valsub
-; if we are here, we know that *(match+best_len-1) == scan_end
- cmp bp,word ptr[edx+eax]
-; if (match != scan_start) goto rcontlab
- jne rcontlab
-; calculate the good chain_length, and we'll compare scan and match string
- add chain_length,16-valsub
- jmp iseq
- ENDM
-
-
-normalbeg2dc11:
- normbeg rcontloop11,11
-
-normalbeg2dc12:
- normbeg short rcontloop12,12
-
-normalbeg2dc13:
- normbeg short rcontloop13,13
-
-normalbeg2dc14:
- normbeg short rcontloop14,14
-
-normalbeg2dc15:
- normbeg short rcontloop15,15
-
-normalbeg2dc10:
- normbeg rcontloop10,10
-
-normalbeg2dc9:
- normbeg rcontloop9,9
-
-normalbeg2dc8:
- normbeg rcontloop8,8
-
-normalbeg2dc7:
- normbeg rcontloop7,7
-
-normalbeg2dc6:
- normbeg rcontloop6,6
-
-normalbeg2dc5:
- normbeg rcontloop5,5
-
-normalbeg2dc4:
- normbeg rcontloop4,4
-
-normalbeg2dc3:
- normbeg rcontloop3,3
-
-normalbeg2dc2:
- normbeg rcontloop2,2
-
-normalbeg2dc1:
- normbeg rcontloop1,1
-
-normalbeg2dc0:
- normbeg rcontloop0,0
-
-
-; we go in normalbeg2 because *(ushf*)(match+best_len-1) == scan_end
-
-normalbeg2:
- mov edi,window
-
- cmp bp,word ptr[edi+eax]
- jne contloop3 ; if *(ushf*)match != scan_start, continue
-
-iseq:
-; if we are here, we know that *(match+best_len-1) == scan_end
-; and (match == scan_start)
-
- mov edi,edx
- mov esi,scan ; esi = scan
- add edi,eax ; edi = window + cur_match = match
-
- mov edx,[esi+3] ; compare manually dword at match+3
- xor edx,[edi+3] ; and scan +3
-
- jz begincompare ; if equal, go to long compare
-
-; we will determine the unmatch byte and calculate len (in esi)
- or dl,dl
- je eq1rr
- mov esi,3
- jmp trfinval
-eq1rr:
- or dx,dx
- je eq1
-
- mov esi,4
- jmp trfinval
-eq1:
- and edx,0ffffffh
- jz eq11
- mov esi,5
- jmp trfinval
-eq11:
- mov esi,6
- jmp trfinval
-
-begincompare:
- ; here we now scan and match begin same
- add edi,6
- add esi,6
- mov ecx,(MAX_MATCH-(2+4))/4 ; scan for at most MAX_MATCH bytes
- repe cmpsd ; loop until mismatch
-
- je trfin ; go to trfin if not unmatch
-; we determine the unmatch byte
- sub esi,4
- mov edx,[edi-4]
- xor edx,[esi]
-
- or dl,dl
- jnz trfin
- inc esi
-
- or dx,dx
- jnz trfin
- inc esi
-
- and edx,0ffffffh
- jnz trfin
- inc esi
-
-trfin:
- sub esi,scan ; esi = len
-trfinval:
-; here we have finised compare, and esi contain len of equal string
- cmp esi,best_len ; if len > best_len, go newbestlen
- ja short newbestlen
-; now we restore edx, ecx and esi, for the big loop
- mov esi,prev
- mov ecx,limit
- mov edx,window
- jmp contloop3
-
-newbestlen:
- mov best_len,esi ; len become best_len
-
- mov match_start,eax ; save new position as match_start
- cmp esi,nice_match ; if best_len >= nice_match, exit
- jae exitloop
- mov ecx,scan
- mov edx,window ; restore edx=window
- add ecx,esi
- add esi,edx
-
- dec esi
- mov windowlen,esi ; windowlen = window + best_len-1
- mov bx,[ecx-1] ; bx = *(scan+best_len-1) = scan_end
-
-; now we restore ecx and esi, for the big loop :
- mov esi,prev
- mov ecx,limit
- jmp contloop3
-
-exitloop:
-; exit : s->match_start=match_start
- mov ebx,match_start
- mov ebp,str_s
- mov ecx,best_len
- mov dword ptr [ebp+dep_match_start],ebx
- mov eax,dword ptr [ebp+dep_lookahead]
- cmp ecx,eax
- ja minexlo
- mov eax,ecx
-minexlo:
-; return min(best_len,s->lookahead)
-
-; restore stack and register ebx,esi,edi,ebp
- add esp,NbStackAdd
-
- pop ebx
- pop esi
- pop edi
- pop ebp
- ret
-InfoAuthor:
-; please don't remove this string !
-; Your are free use gvmat32 in any fre or commercial apps if you don't remove the string in the binary!
- db 0dh,0ah,"GVMat32 optimised assembly code written 1996-98 by Gilles Vollant",0dh,0ah
-
-
-
-IFDEF NOUNDERLINE
-longest_match_7fff endp
-ELSE
-_longest_match_7fff endp
-ENDIF
-
-
-IFDEF NOUNDERLINE
-cpudetect32 proc near
-ELSE
-_cpudetect32 proc near
-ENDIF
-
- push ebx
-
- pushfd ; push original EFLAGS
- pop eax ; get original EFLAGS
- mov ecx, eax ; save original EFLAGS
- xor eax, 40000h ; flip AC bit in EFLAGS
- push eax ; save new EFLAGS value on stack
- popfd ; replace current EFLAGS value
- pushfd ; get new EFLAGS
- pop eax ; store new EFLAGS in EAX
- xor eax, ecx ; can’t toggle AC bit, processor=80386
- jz end_cpu_is_386 ; jump if 80386 processor
- push ecx
- popfd ; restore AC bit in EFLAGS first
-
- pushfd
- pushfd
- pop ecx
-
- mov eax, ecx ; get original EFLAGS
- xor eax, 200000h ; flip ID bit in EFLAGS
- push eax ; save new EFLAGS value on stack
- popfd ; replace current EFLAGS value
- pushfd ; get new EFLAGS
- pop eax ; store new EFLAGS in EAX
- popfd ; restore original EFLAGS
- xor eax, ecx ; can’t toggle ID bit,
- je is_old_486 ; processor=old
-
- mov eax,1
- db 0fh,0a2h ;CPUID
-
-exitcpudetect:
- pop ebx
- ret
-
-end_cpu_is_386:
- mov eax,0300h
- jmp exitcpudetect
-
-is_old_486:
- mov eax,0400h
- jmp exitcpudetect
-
-IFDEF NOUNDERLINE
-cpudetect32 endp
-ELSE
-_cpudetect32 endp
-ENDIF
-ENDIF
-
-MAX_MATCH equ 258
-MIN_MATCH equ 3
-MIN_LOOKAHEAD equ (MAX_MATCH + MIN_MATCH + 1)
-MAX_MATCH_8_ equ ((MAX_MATCH + 7) AND 0FFF0h)
-
-
-;;; stack frame offsets
-
-chainlenwmask equ esp + 0 ; high word: current chain len
- ; low word: s->wmask
-window equ esp + 4 ; local copy of s->window
-windowbestlen equ esp + 8 ; s->window + bestlen
-scanstart equ esp + 16 ; first two bytes of string
-scanend equ esp + 12 ; last two bytes of string
-scanalign equ esp + 20 ; dword-misalignment of string
-nicematch equ esp + 24 ; a good enough match size
-bestlen equ esp + 28 ; size of best match so far
-scan equ esp + 32 ; ptr to string wanting match
-
-LocalVarsSize equ 36
-; saved ebx byte esp + 36
-; saved edi byte esp + 40
-; saved esi byte esp + 44
-; saved ebp byte esp + 48
-; return address byte esp + 52
-deflatestate equ esp + 56 ; the function arguments
-curmatch equ esp + 60
-
-;;; Offsets for fields in the deflate_state structure. These numbers
-;;; are calculated from the definition of deflate_state, with the
-;;; assumption that the compiler will dword-align the fields. (Thus,
-;;; changing the definition of deflate_state could easily cause this
-;;; program to crash horribly, without so much as a warning at
-;;; compile time. Sigh.)
-
-dsWSize equ 36+zlib1222add
-dsWMask equ 44+zlib1222add
-dsWindow equ 48+zlib1222add
-dsPrev equ 56+zlib1222add
-dsMatchLen equ 88+zlib1222add
-dsPrevMatch equ 92+zlib1222add
-dsStrStart equ 100+zlib1222add
-dsMatchStart equ 104+zlib1222add
-dsLookahead equ 108+zlib1222add
-dsPrevLen equ 112+zlib1222add
-dsMaxChainLen equ 116+zlib1222add
-dsGoodMatch equ 132+zlib1222add
-dsNiceMatch equ 136+zlib1222add
-
-
-;;; match.asm -- Pentium-Pro-optimized version of longest_match()
-;;; Written for zlib 1.1.2
-;;; Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>
-;;; You can look at http://www.muppetlabs.com/~breadbox/software/assembly.html
-;;;
-;;; This is free software; you can redistribute it and/or modify it
-;;; under the terms of the GNU General Public License.
-
-;GLOBAL _longest_match, _match_init
-
-
-;SECTION .text
-
-;;; uInt longest_match(deflate_state *deflatestate, IPos curmatch)
-
-;_longest_match:
-IFDEF NOOLDPENTIUMCODE
- IFDEF NOUNDERLINE
- longest_match proc near
- ELSE
- _longest_match proc near
- ENDIF
-ELSE
- IFDEF NOUNDERLINE
- longest_match_686 proc near
- ELSE
- _longest_match_686 proc near
- ENDIF
-ENDIF
-
-;;; Save registers that the compiler may be using, and adjust esp to
-;;; make room for our stack frame.
-
- push ebp
- push edi
- push esi
- push ebx
- sub esp, LocalVarsSize
-
-;;; Retrieve the function arguments. ecx will hold cur_match
-;;; throughout the entire function. edx will hold the pointer to the
-;;; deflate_state structure during the function's setup (before
-;;; entering the main loop.
-
- mov edx, [deflatestate]
- mov ecx, [curmatch]
-
-;;; uInt wmask = s->w_mask;
-;;; unsigned chain_length = s->max_chain_length;
-;;; if (s->prev_length >= s->good_match) {
-;;; chain_length >>= 2;
-;;; }
-
- mov eax, [edx + dsPrevLen]
- mov ebx, [edx + dsGoodMatch]
- cmp eax, ebx
- mov eax, [edx + dsWMask]
- mov ebx, [edx + dsMaxChainLen]
- jl LastMatchGood
- shr ebx, 2
-LastMatchGood:
-
-;;; chainlen is decremented once beforehand so that the function can
-;;; use the sign flag instead of the zero flag for the exit test.
-;;; It is then shifted into the high word, to make room for the wmask
-;;; value, which it will always accompany.
-
- dec ebx
- shl ebx, 16
- or ebx, eax
- mov [chainlenwmask], ebx
-
-;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
-
- mov eax, [edx + dsNiceMatch]
- mov ebx, [edx + dsLookahead]
- cmp ebx, eax
- jl LookaheadLess
- mov ebx, eax
-LookaheadLess: mov [nicematch], ebx
-
-;;; register Bytef *scan = s->window + s->strstart;
-
- mov esi, [edx + dsWindow]
- mov [window], esi
- mov ebp, [edx + dsStrStart]
- lea edi, [esi + ebp]
- mov [scan], edi
-
-;;; Determine how many bytes the scan ptr is off from being
-;;; dword-aligned.
-
- mov eax, edi
- neg eax
- and eax, 3
- mov [scanalign], eax
-
-;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
-;;; s->strstart - (IPos)MAX_DIST(s) : NIL;
-
- mov eax, [edx + dsWSize]
- sub eax, MIN_LOOKAHEAD
- sub ebp, eax
- jg LimitPositive
- xor ebp, ebp
-LimitPositive:
-
-;;; int best_len = s->prev_length;
-
- mov eax, [edx + dsPrevLen]
- mov [bestlen], eax
-
-;;; Store the sum of s->window + best_len in esi locally, and in esi.
-
- add esi, eax
- mov [windowbestlen], esi
-
-;;; register ush scan_start = *(ushf*)scan;
-;;; register ush scan_end = *(ushf*)(scan+best_len-1);
-;;; Posf *prev = s->prev;
-
- movzx ebx, word ptr [edi]
- mov [scanstart], ebx
- movzx ebx, word ptr [edi + eax - 1]
- mov [scanend], ebx
- mov edi, [edx + dsPrev]
-
-;;; Jump into the main loop.
-
- mov edx, [chainlenwmask]
- jmp short LoopEntry
-
-align 4
-
-;;; do {
-;;; match = s->window + cur_match;
-;;; if (*(ushf*)(match+best_len-1) != scan_end ||
-;;; *(ushf*)match != scan_start) continue;
-;;; [...]
-;;; } while ((cur_match = prev[cur_match & wmask]) > limit
-;;; && --chain_length != 0);
-;;;
-;;; Here is the inner loop of the function. The function will spend the
-;;; majority of its time in this loop, and majority of that time will
-;;; be spent in the first ten instructions.
-;;;
-;;; Within this loop:
-;;; ebx = scanend
-;;; ecx = curmatch
-;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)
-;;; esi = windowbestlen - i.e., (window + bestlen)
-;;; edi = prev
-;;; ebp = limit
-
-LookupLoop:
- and ecx, edx
- movzx ecx, word ptr [edi + ecx*2]
- cmp ecx, ebp
- jbe LeaveNow
- sub edx, 00010000h
- js LeaveNow
-LoopEntry: movzx eax, word ptr [esi + ecx - 1]
- cmp eax, ebx
- jnz LookupLoop
- mov eax, [window]
- movzx eax, word ptr [eax + ecx]
- cmp eax, [scanstart]
- jnz LookupLoop
-
-;;; Store the current value of chainlen.
-
- mov [chainlenwmask], edx
-
-;;; Point edi to the string under scrutiny, and esi to the string we
-;;; are hoping to match it up with. In actuality, esi and edi are
-;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is
-;;; initialized to -(MAX_MATCH_8 - scanalign).
-
- mov esi, [window]
- mov edi, [scan]
- add esi, ecx
- mov eax, [scanalign]
- mov edx, 0fffffef8h; -(MAX_MATCH_8)
- lea edi, [edi + eax + 0108h] ;MAX_MATCH_8]
- lea esi, [esi + eax + 0108h] ;MAX_MATCH_8]
-
-;;; Test the strings for equality, 8 bytes at a time. At the end,
-;;; adjust edx so that it is offset to the exact byte that mismatched.
-;;;
-;;; We already know at this point that the first three bytes of the
-;;; strings match each other, and they can be safely passed over before
-;;; starting the compare loop. So what this code does is skip over 0-3
-;;; bytes, as much as necessary in order to dword-align the edi
-;;; pointer. (esi will still be misaligned three times out of four.)
-;;;
-;;; It should be confessed that this loop usually does not represent
-;;; much of the total running time. Replacing it with a more
-;;; straightforward "rep cmpsb" would not drastically degrade
-;;; performance.
-
-LoopCmps:
- mov eax, [esi + edx]
- xor eax, [edi + edx]
- jnz LeaveLoopCmps
- mov eax, [esi + edx + 4]
- xor eax, [edi + edx + 4]
- jnz LeaveLoopCmps4
- add edx, 8
- jnz LoopCmps
- jmp short LenMaximum
-LeaveLoopCmps4: add edx, 4
-LeaveLoopCmps: test eax, 0000FFFFh
- jnz LenLower
- add edx, 2
- shr eax, 16
-LenLower: sub al, 1
- adc edx, 0
-
-;;; Calculate the length of the match. If it is longer than MAX_MATCH,
-;;; then automatically accept it as the best possible match and leave.
-
- lea eax, [edi + edx]
- mov edi, [scan]
- sub eax, edi
- cmp eax, MAX_MATCH
- jge LenMaximum
-
-;;; If the length of the match is not longer than the best match we
-;;; have so far, then forget it and return to the lookup loop.
-
- mov edx, [deflatestate]
- mov ebx, [bestlen]
- cmp eax, ebx
- jg LongerMatch
- mov esi, [windowbestlen]
- mov edi, [edx + dsPrev]
- mov ebx, [scanend]
- mov edx, [chainlenwmask]
- jmp LookupLoop
-
-;;; s->match_start = cur_match;
-;;; best_len = len;
-;;; if (len >= nice_match) break;
-;;; scan_end = *(ushf*)(scan+best_len-1);
-
-LongerMatch: mov ebx, [nicematch]
- mov [bestlen], eax
- mov [edx + dsMatchStart], ecx
- cmp eax, ebx
- jge LeaveNow
- mov esi, [window]
- add esi, eax
- mov [windowbestlen], esi
- movzx ebx, word ptr [edi + eax - 1]
- mov edi, [edx + dsPrev]
- mov [scanend], ebx
- mov edx, [chainlenwmask]
- jmp LookupLoop
-
-;;; Accept the current string, with the maximum possible length.
-
-LenMaximum: mov edx, [deflatestate]
- mov dword ptr [bestlen], MAX_MATCH
- mov [edx + dsMatchStart], ecx
-
-;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
-;;; return s->lookahead;
-
-LeaveNow:
- mov edx, [deflatestate]
- mov ebx, [bestlen]
- mov eax, [edx + dsLookahead]
- cmp ebx, eax
- jg LookaheadRet
- mov eax, ebx
-LookaheadRet:
-
-;;; Restore the stack and return from whence we came.
-
- add esp, LocalVarsSize
- pop ebx
- pop esi
- pop edi
- pop ebp
-
- ret
-; please don't remove this string !
-; Your can freely use gvmat32 in any free or commercial app if you don't remove the string in the binary!
- db 0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998",0dh,0ah
-
-
-IFDEF NOOLDPENTIUMCODE
- IFDEF NOUNDERLINE
- longest_match endp
- ELSE
- _longest_match endp
- ENDIF
-
- IFDEF NOUNDERLINE
- match_init proc near
- ret
- match_init endp
- ELSE
- _match_init proc near
- ret
- _match_init endp
- ENDIF
-ELSE
- IFDEF NOUNDERLINE
- longest_match_686 endp
- ELSE
- _longest_match_686 endp
- ENDIF
-ENDIF
-
-_TEXT ends
-end
diff --git a/zlib/contrib/masmx86/gvmat32c.c b/zlib/contrib/masmx86/gvmat32c.c deleted file mode 100644 index 7ad2b27943b..00000000000 --- a/zlib/contrib/masmx86/gvmat32c.c +++ /dev/null @@ -1,62 +0,0 @@ -/* gvmat32.c -- C portion of the optimized longest_match for 32 bits x86
- * Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant.
- * File written by Gilles Vollant, by modifiying the longest_match
- * from Jean-loup Gailly in deflate.c
- * it prepare all parameters and call the assembly longest_match_gvasm
- * longest_match execute standard C code is wmask != 0x7fff
- * (assembly code is faster with a fixed wmask)
- *
- * Read comment at beginning of gvmat32.asm for more information
- */
-
-#if defined(ASMV) && (!defined(NOOLDPENTIUMCODE))
-#include "deflate.h"
-
-/* if your C compiler don't add underline before function name,
- define ADD_UNDERLINE_ASMFUNC */
-#ifdef ADD_UNDERLINE_ASMFUNC
-#define longest_match_7fff _longest_match_7fff
-#define longest_match_686 _longest_match_686
-#define cpudetect32 _cpudetect32
-#endif
-
-
-unsigned long cpudetect32();
-
-uInt longest_match_c(
- deflate_state *s,
- IPos cur_match); /* current match */
-
-
-uInt longest_match_7fff(
- deflate_state *s,
- IPos cur_match); /* current match */
-
-uInt longest_match_686(
- deflate_state *s,
- IPos cur_match); /* current match */
-
-
-static uInt iIsPPro=2;
-
-void match_init ()
-{
- iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0;
-}
-
-uInt longest_match(
- deflate_state *s,
- IPos cur_match) /* current match */
-{
- if (iIsPPro!=0)
- return longest_match_686(s,cur_match);
-
- if (s->w_mask != 0x7fff)
- return longest_match_686(s,cur_match);
-
- /* now ((s->w_mask == 0x7fff) && (iIsPPro==0)) */
- return longest_match_7fff(s,cur_match);
-}
-
-
-#endif /* defined(ASMV) && (!defined(NOOLDPENTIUMCODE)) */
diff --git a/zlib/contrib/masmx86/inffas32.asm b/zlib/contrib/masmx86/inffas32.asm index 4a205125ec5..92ac22ad9d9 100644 --- a/zlib/contrib/masmx86/inffas32.asm +++ b/zlib/contrib/masmx86/inffas32.asm @@ -16,7 +16,7 @@ ; * enabled. I will attempt to merge the MMX code into this version. Newer
; * versions of this and inffast.S can be found at
; * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/
-; *
+; *
; * 2005 : modification by Gilles Vollant
; */
; For Visual C++ 4.x and higher and ML 6.x and higher
@@ -33,7 +33,7 @@ ; zlib122sup is 0 fort zlib 1.2.2.1 and lower
-; zlib122sup is 8 fort zlib 1.2.2.2 and more (with addition of dmax and head
+; zlib122sup is 8 fort zlib 1.2.2.2 and more (with addition of dmax and head
; in inflate_state in inflate.h)
zlib1222sup equ 8
@@ -644,9 +644,9 @@ L_init_mmx: movd mm0,ebp
mov ebp,ebx
; 896 "inffast.S"
- movd mm4,[esp+0]
+ movd mm4,dword ptr [esp+0]
movq mm3,mm4
- movd mm5,[esp+4]
+ movd mm5,dword ptr [esp+4]
movq mm2,mm5
pxor mm1,mm1
mov ebx, [esp+8]
@@ -660,7 +660,7 @@ L_do_loop_mmx: ja L_get_length_code_mmx
movd mm6,ebp
- movd mm7,[esi]
+ movd mm7,dword ptr [esi]
add esi,4
psllq mm7,mm6
add ebp,32
@@ -717,7 +717,7 @@ L_decode_distance_mmx: ja L_get_dist_code_mmx
movd mm6,ebp
- movd mm7,[esi]
+ movd mm7,dword ptr [esi]
add esi,4
psllq mm7,mm6
add ebp,32
diff --git a/zlib/contrib/masmx86/match686.asm b/zlib/contrib/masmx86/match686.asm new file mode 100644 index 00000000000..1eaf555026f --- /dev/null +++ b/zlib/contrib/masmx86/match686.asm @@ -0,0 +1,478 @@ +; match686.asm -- Asm portion of the optimized longest_match for 32 bits x86
+; Copyright (C) 1995-1996 Jean-loup Gailly, Brian Raiter and Gilles Vollant.
+; File written by Gilles Vollant, by converting match686.S from Brian Raiter
+; for MASM. This is as assembly version of longest_match
+; from Jean-loup Gailly in deflate.c
+;
+; http://www.zlib.net
+; http://www.winimage.com/zLibDll
+; http://www.muppetlabs.com/~breadbox/software/assembly.html
+;
+; For Visual C++ 4.x and higher and ML 6.x and higher
+; ml.exe is distributed in
+; http://www.microsoft.com/downloads/details.aspx?FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64
+;
+; this file contain two implementation of longest_match
+;
+; this longest_match was written by Brian raiter (1998), optimized for Pentium Pro
+; (and the faster known version of match_init on modern Core 2 Duo and AMD Phenom)
+;
+; for using an assembly version of longest_match, you need define ASMV in project
+;
+; compile the asm file running
+; ml /coff /Zi /c /Flmatch686.lst match686.asm
+; and do not include match686.obj in your project
+;
+; note: contrib of zLib 1.2.3 and earlier contained both a deprecated version for
+; Pentium (prior Pentium Pro) and this version for Pentium Pro and modern processor
+; with autoselect (with cpu detection code)
+; if you want support the old pentium optimization, you can still use these version
+;
+; this file is not optimized for old pentium, but it compatible with all x86 32 bits
+; processor (starting 80386)
+;
+;
+; see below : zlib1222add must be adjuster if you use a zlib version < 1.2.2.2
+
+;uInt longest_match(s, cur_match)
+; deflate_state *s;
+; IPos cur_match; /* current match */
+
+ NbStack equ 76
+ cur_match equ dword ptr[esp+NbStack-0]
+ str_s equ dword ptr[esp+NbStack-4]
+; 5 dword on top (ret,ebp,esi,edi,ebx)
+ adrret equ dword ptr[esp+NbStack-8]
+ pushebp equ dword ptr[esp+NbStack-12]
+ pushedi equ dword ptr[esp+NbStack-16]
+ pushesi equ dword ptr[esp+NbStack-20]
+ pushebx equ dword ptr[esp+NbStack-24]
+
+ chain_length equ dword ptr [esp+NbStack-28]
+ limit equ dword ptr [esp+NbStack-32]
+ best_len equ dword ptr [esp+NbStack-36]
+ window equ dword ptr [esp+NbStack-40]
+ prev equ dword ptr [esp+NbStack-44]
+ scan_start equ word ptr [esp+NbStack-48]
+ wmask equ dword ptr [esp+NbStack-52]
+ match_start_ptr equ dword ptr [esp+NbStack-56]
+ nice_match equ dword ptr [esp+NbStack-60]
+ scan equ dword ptr [esp+NbStack-64]
+
+ windowlen equ dword ptr [esp+NbStack-68]
+ match_start equ dword ptr [esp+NbStack-72]
+ strend equ dword ptr [esp+NbStack-76]
+ NbStackAdd equ (NbStack-24)
+
+ .386p
+
+ name gvmatch
+ .MODEL FLAT
+
+
+
+; all the +zlib1222add offsets are due to the addition of fields
+; in zlib in the deflate_state structure since the asm code was first written
+; (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)").
+; (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0").
+; if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8").
+
+ zlib1222add equ 8
+
+; Note : these value are good with a 8 bytes boundary pack structure
+ dep_chain_length equ 74h+zlib1222add
+ dep_window equ 30h+zlib1222add
+ dep_strstart equ 64h+zlib1222add
+ dep_prev_length equ 70h+zlib1222add
+ dep_nice_match equ 88h+zlib1222add
+ dep_w_size equ 24h+zlib1222add
+ dep_prev equ 38h+zlib1222add
+ dep_w_mask equ 2ch+zlib1222add
+ dep_good_match equ 84h+zlib1222add
+ dep_match_start equ 68h+zlib1222add
+ dep_lookahead equ 6ch+zlib1222add
+
+
+_TEXT segment
+
+IFDEF NOUNDERLINE
+ public longest_match
+ public match_init
+ELSE
+ public _longest_match
+ public _match_init
+ENDIF
+
+ MAX_MATCH equ 258
+ MIN_MATCH equ 3
+ MIN_LOOKAHEAD equ (MAX_MATCH+MIN_MATCH+1)
+
+
+
+MAX_MATCH equ 258
+MIN_MATCH equ 3
+MIN_LOOKAHEAD equ (MAX_MATCH + MIN_MATCH + 1)
+MAX_MATCH_8_ equ ((MAX_MATCH + 7) AND 0FFF0h)
+
+
+;;; stack frame offsets
+
+chainlenwmask equ esp + 0 ; high word: current chain len
+ ; low word: s->wmask
+window equ esp + 4 ; local copy of s->window
+windowbestlen equ esp + 8 ; s->window + bestlen
+scanstart equ esp + 16 ; first two bytes of string
+scanend equ esp + 12 ; last two bytes of string
+scanalign equ esp + 20 ; dword-misalignment of string
+nicematch equ esp + 24 ; a good enough match size
+bestlen equ esp + 28 ; size of best match so far
+scan equ esp + 32 ; ptr to string wanting match
+
+LocalVarsSize equ 36
+; saved ebx byte esp + 36
+; saved edi byte esp + 40
+; saved esi byte esp + 44
+; saved ebp byte esp + 48
+; return address byte esp + 52
+deflatestate equ esp + 56 ; the function arguments
+curmatch equ esp + 60
+
+;;; Offsets for fields in the deflate_state structure. These numbers
+;;; are calculated from the definition of deflate_state, with the
+;;; assumption that the compiler will dword-align the fields. (Thus,
+;;; changing the definition of deflate_state could easily cause this
+;;; program to crash horribly, without so much as a warning at
+;;; compile time. Sigh.)
+
+dsWSize equ 36+zlib1222add
+dsWMask equ 44+zlib1222add
+dsWindow equ 48+zlib1222add
+dsPrev equ 56+zlib1222add
+dsMatchLen equ 88+zlib1222add
+dsPrevMatch equ 92+zlib1222add
+dsStrStart equ 100+zlib1222add
+dsMatchStart equ 104+zlib1222add
+dsLookahead equ 108+zlib1222add
+dsPrevLen equ 112+zlib1222add
+dsMaxChainLen equ 116+zlib1222add
+dsGoodMatch equ 132+zlib1222add
+dsNiceMatch equ 136+zlib1222add
+
+
+;;; match686.asm -- Pentium-Pro-optimized version of longest_match()
+;;; Written for zlib 1.1.2
+;;; Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>
+;;; You can look at http://www.muppetlabs.com/~breadbox/software/assembly.html
+;;;
+;;
+;; This software is provided 'as-is', without any express or implied
+;; warranty. In no event will the authors be held liable for any damages
+;; arising from the use of this software.
+;;
+;; Permission is granted to anyone to use this software for any purpose,
+;; including commercial applications, and to alter it and redistribute it
+;; freely, subject to the following restrictions:
+;;
+;; 1. The origin of this software must not be misrepresented; you must not
+;; claim that you wrote the original software. If you use this software
+;; in a product, an acknowledgment in the product documentation would be
+;; appreciated but is not required.
+;; 2. Altered source versions must be plainly marked as such, and must not be
+;; misrepresented as being the original software
+;; 3. This notice may not be removed or altered from any source distribution.
+;;
+
+;GLOBAL _longest_match, _match_init
+
+
+;SECTION .text
+
+;;; uInt longest_match(deflate_state *deflatestate, IPos curmatch)
+
+;_longest_match:
+ IFDEF NOUNDERLINE
+ longest_match proc near
+ ELSE
+ _longest_match proc near
+ ENDIF
+
+;;; Save registers that the compiler may be using, and adjust esp to
+;;; make room for our stack frame.
+
+ push ebp
+ push edi
+ push esi
+ push ebx
+ sub esp, LocalVarsSize
+
+;;; Retrieve the function arguments. ecx will hold cur_match
+;;; throughout the entire function. edx will hold the pointer to the
+;;; deflate_state structure during the function's setup (before
+;;; entering the main loop.
+
+ mov edx, [deflatestate]
+ mov ecx, [curmatch]
+
+;;; uInt wmask = s->w_mask;
+;;; unsigned chain_length = s->max_chain_length;
+;;; if (s->prev_length >= s->good_match) {
+;;; chain_length >>= 2;
+;;; }
+
+ mov eax, [edx + dsPrevLen]
+ mov ebx, [edx + dsGoodMatch]
+ cmp eax, ebx
+ mov eax, [edx + dsWMask]
+ mov ebx, [edx + dsMaxChainLen]
+ jl LastMatchGood
+ shr ebx, 2
+LastMatchGood:
+
+;;; chainlen is decremented once beforehand so that the function can
+;;; use the sign flag instead of the zero flag for the exit test.
+;;; It is then shifted into the high word, to make room for the wmask
+;;; value, which it will always accompany.
+
+ dec ebx
+ shl ebx, 16
+ or ebx, eax
+ mov [chainlenwmask], ebx
+
+;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+
+ mov eax, [edx + dsNiceMatch]
+ mov ebx, [edx + dsLookahead]
+ cmp ebx, eax
+ jl LookaheadLess
+ mov ebx, eax
+LookaheadLess: mov [nicematch], ebx
+
+;;; register Bytef *scan = s->window + s->strstart;
+
+ mov esi, [edx + dsWindow]
+ mov [window], esi
+ mov ebp, [edx + dsStrStart]
+ lea edi, [esi + ebp]
+ mov [scan], edi
+
+;;; Determine how many bytes the scan ptr is off from being
+;;; dword-aligned.
+
+ mov eax, edi
+ neg eax
+ and eax, 3
+ mov [scanalign], eax
+
+;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
+;;; s->strstart - (IPos)MAX_DIST(s) : NIL;
+
+ mov eax, [edx + dsWSize]
+ sub eax, MIN_LOOKAHEAD
+ sub ebp, eax
+ jg LimitPositive
+ xor ebp, ebp
+LimitPositive:
+
+;;; int best_len = s->prev_length;
+
+ mov eax, [edx + dsPrevLen]
+ mov [bestlen], eax
+
+;;; Store the sum of s->window + best_len in esi locally, and in esi.
+
+ add esi, eax
+ mov [windowbestlen], esi
+
+;;; register ush scan_start = *(ushf*)scan;
+;;; register ush scan_end = *(ushf*)(scan+best_len-1);
+;;; Posf *prev = s->prev;
+
+ movzx ebx, word ptr [edi]
+ mov [scanstart], ebx
+ movzx ebx, word ptr [edi + eax - 1]
+ mov [scanend], ebx
+ mov edi, [edx + dsPrev]
+
+;;; Jump into the main loop.
+
+ mov edx, [chainlenwmask]
+ jmp short LoopEntry
+
+align 4
+
+;;; do {
+;;; match = s->window + cur_match;
+;;; if (*(ushf*)(match+best_len-1) != scan_end ||
+;;; *(ushf*)match != scan_start) continue;
+;;; [...]
+;;; } while ((cur_match = prev[cur_match & wmask]) > limit
+;;; && --chain_length != 0);
+;;;
+;;; Here is the inner loop of the function. The function will spend the
+;;; majority of its time in this loop, and majority of that time will
+;;; be spent in the first ten instructions.
+;;;
+;;; Within this loop:
+;;; ebx = scanend
+;;; ecx = curmatch
+;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)
+;;; esi = windowbestlen - i.e., (window + bestlen)
+;;; edi = prev
+;;; ebp = limit
+
+LookupLoop:
+ and ecx, edx
+ movzx ecx, word ptr [edi + ecx*2]
+ cmp ecx, ebp
+ jbe LeaveNow
+ sub edx, 00010000h
+ js LeaveNow
+LoopEntry: movzx eax, word ptr [esi + ecx - 1]
+ cmp eax, ebx
+ jnz LookupLoop
+ mov eax, [window]
+ movzx eax, word ptr [eax + ecx]
+ cmp eax, [scanstart]
+ jnz LookupLoop
+
+;;; Store the current value of chainlen.
+
+ mov [chainlenwmask], edx
+
+;;; Point edi to the string under scrutiny, and esi to the string we
+;;; are hoping to match it up with. In actuality, esi and edi are
+;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is
+;;; initialized to -(MAX_MATCH_8 - scanalign).
+
+ mov esi, [window]
+ mov edi, [scan]
+ add esi, ecx
+ mov eax, [scanalign]
+ mov edx, 0fffffef8h; -(MAX_MATCH_8)
+ lea edi, [edi + eax + 0108h] ;MAX_MATCH_8]
+ lea esi, [esi + eax + 0108h] ;MAX_MATCH_8]
+
+;;; Test the strings for equality, 8 bytes at a time. At the end,
+;;; adjust edx so that it is offset to the exact byte that mismatched.
+;;;
+;;; We already know at this point that the first three bytes of the
+;;; strings match each other, and they can be safely passed over before
+;;; starting the compare loop. So what this code does is skip over 0-3
+;;; bytes, as much as necessary in order to dword-align the edi
+;;; pointer. (esi will still be misaligned three times out of four.)
+;;;
+;;; It should be confessed that this loop usually does not represent
+;;; much of the total running time. Replacing it with a more
+;;; straightforward "rep cmpsb" would not drastically degrade
+;;; performance.
+
+LoopCmps:
+ mov eax, [esi + edx]
+ xor eax, [edi + edx]
+ jnz LeaveLoopCmps
+ mov eax, [esi + edx + 4]
+ xor eax, [edi + edx + 4]
+ jnz LeaveLoopCmps4
+ add edx, 8
+ jnz LoopCmps
+ jmp short LenMaximum
+LeaveLoopCmps4: add edx, 4
+LeaveLoopCmps: test eax, 0000FFFFh
+ jnz LenLower
+ add edx, 2
+ shr eax, 16
+LenLower: sub al, 1
+ adc edx, 0
+
+;;; Calculate the length of the match. If it is longer than MAX_MATCH,
+;;; then automatically accept it as the best possible match and leave.
+
+ lea eax, [edi + edx]
+ mov edi, [scan]
+ sub eax, edi
+ cmp eax, MAX_MATCH
+ jge LenMaximum
+
+;;; If the length of the match is not longer than the best match we
+;;; have so far, then forget it and return to the lookup loop.
+
+ mov edx, [deflatestate]
+ mov ebx, [bestlen]
+ cmp eax, ebx
+ jg LongerMatch
+ mov esi, [windowbestlen]
+ mov edi, [edx + dsPrev]
+ mov ebx, [scanend]
+ mov edx, [chainlenwmask]
+ jmp LookupLoop
+
+;;; s->match_start = cur_match;
+;;; best_len = len;
+;;; if (len >= nice_match) break;
+;;; scan_end = *(ushf*)(scan+best_len-1);
+
+LongerMatch: mov ebx, [nicematch]
+ mov [bestlen], eax
+ mov [edx + dsMatchStart], ecx
+ cmp eax, ebx
+ jge LeaveNow
+ mov esi, [window]
+ add esi, eax
+ mov [windowbestlen], esi
+ movzx ebx, word ptr [edi + eax - 1]
+ mov edi, [edx + dsPrev]
+ mov [scanend], ebx
+ mov edx, [chainlenwmask]
+ jmp LookupLoop
+
+;;; Accept the current string, with the maximum possible length.
+
+LenMaximum: mov edx, [deflatestate]
+ mov dword ptr [bestlen], MAX_MATCH
+ mov [edx + dsMatchStart], ecx
+
+;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
+;;; return s->lookahead;
+
+LeaveNow:
+ mov edx, [deflatestate]
+ mov ebx, [bestlen]
+ mov eax, [edx + dsLookahead]
+ cmp ebx, eax
+ jg LookaheadRet
+ mov eax, ebx
+LookaheadRet:
+
+;;; Restore the stack and return from whence we came.
+
+ add esp, LocalVarsSize
+ pop ebx
+ pop esi
+ pop edi
+ pop ebp
+
+ ret
+; please don't remove this string !
+; Your can freely use match686 in any free or commercial app if you don't remove the string in the binary!
+ db 0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998",0dh,0ah
+
+
+ IFDEF NOUNDERLINE
+ longest_match endp
+ ELSE
+ _longest_match endp
+ ENDIF
+
+ IFDEF NOUNDERLINE
+ match_init proc near
+ ret
+ match_init endp
+ ELSE
+ _match_init proc near
+ ret
+ _match_init endp
+ ENDIF
+
+
+_TEXT ends
+end
diff --git a/zlib/contrib/masmx86/mkasm.bat b/zlib/contrib/masmx86/mkasm.bat deleted file mode 100755 index 70a51f83777..00000000000 --- a/zlib/contrib/masmx86/mkasm.bat +++ /dev/null @@ -1,3 +0,0 @@ -cl /DASMV /I..\.. /O2 /c gvmat32c.c
-ml /coff /Zi /c /Flgvmat32.lst gvmat32.asm
-ml /coff /Zi /c /Flinffas32.lst inffas32.asm
diff --git a/zlib/contrib/masmx86/readme.txt b/zlib/contrib/masmx86/readme.txt index 7b57167b71c..3271f720a1a 100644 --- a/zlib/contrib/masmx86/readme.txt +++ b/zlib/contrib/masmx86/readme.txt @@ -1,21 +1,27 @@ - -Summary -------- -This directory contains ASM implementations of the functions -longest_match() and inflate_fast(). - - -Use instructions ----------------- -Copy these files into the zlib source directory, then run the -appropriate makefile, as suggested below. - - -Build instructions ------------------- -* With Microsoft C and MASM: -nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="gvmat32c.obj gvmat32.obj inffas32.obj" - -* With Borland C and TASM: -make -f win32/Makefile.bor LOCAL_ZLIB="-DASMV -DASMINF" OBJA="gvmat32c.obj gvmat32.obj inffas32.obj" OBJPA="+gvmat32c.obj+gvmat32.obj+inffas32.obj" - +
+Summary
+-------
+This directory contains ASM implementations of the functions
+longest_match() and inflate_fast().
+
+
+Use instructions
+----------------
+Assemble using MASM, and copy the object files into the zlib source
+directory, then run the appropriate makefile, as suggested below. You can
+donwload MASM from here:
+
+ http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64
+
+You can also get objects files here:
+
+ http://www.winimage.com/zLibDll/zlib124_masm_obj.zip
+
+Build instructions
+------------------
+* With Microsoft C and MASM:
+nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="match686.obj inffas32.obj"
+
+* With Borland C and TASM:
+make -f win32/Makefile.bor LOCAL_ZLIB="-DASMV -DASMINF" OBJA="match686.obj inffas32.obj" OBJPA="+match686c.obj+match686.obj+inffas32.obj"
+
diff --git a/zlib/contrib/minizip/ChangeLogUnzip b/zlib/contrib/minizip/ChangeLogUnzip deleted file mode 100644 index 50ca6a9e0f3..00000000000 --- a/zlib/contrib/minizip/ChangeLogUnzip +++ /dev/null @@ -1,67 +0,0 @@ -Change in 1.01e (12 feb 05) -- Fix in zipOpen2 for globalcomment (Rolf Kalbermatter) -- Fix possible memory leak in unzip.c (Zoran Stevanovic) - -Change in 1.01b (20 may 04) -- Integrate patch from Debian package (submited by Mark Brown) -- Add tools mztools from Xavier Roche - -Change in 1.01 (8 may 04) -- fix buffer overrun risk in unzip.c (Xavier Roche) -- fix a minor buffer insecurity in minizip.c (Mike Whittaker) - -Change in 1.00: (10 sept 03) -- rename to 1.00 -- cosmetic code change - -Change in 0.22: (19 May 03) -- crypting support (unless you define NOCRYPT) -- append file in existing zipfile - -Change in 0.21: (10 Mar 03) -- bug fixes - -Change in 0.17: (27 Jan 02) -- bug fixes - -Change in 0.16: (19 Jan 02) -- Support of ioapi for virtualize zip file access - -Change in 0.15: (19 Mar 98) -- fix memory leak in minizip.c - -Change in 0.14: (10 Mar 98) -- fix bugs in minizip.c sample for zipping big file -- fix problem in month in date handling -- fix bug in unzlocal_GetCurrentFileInfoInternal in unzip.c for - comment handling - -Change in 0.13: (6 Mar 98) -- fix bugs in zip.c -- add real minizip sample - -Change in 0.12: (4 Mar 98) -- add zip.c and zip.h for creates .zip file -- fix change_file_date in miniunz.c for Unix (Jean-loup Gailly) -- fix miniunz.c for file without specific record for directory - -Change in 0.11: (3 Mar 98) -- fix bug in unzGetCurrentFileInfo for get extra field and comment -- enhance miniunz sample, remove the bad unztst.c sample - -Change in 0.10: (2 Mar 98) -- fix bug in unzReadCurrentFile -- rename unzip* to unz* function and structure -- remove Windows-like hungary notation variable name -- modify some structure in unzip.h -- add somes comment in source -- remove unzipGetcCurrentFile function -- replace ZUNZEXPORT by ZEXPORT -- add unzGetLocalExtrafield for get the local extrafield info -- add a new sample, miniunz.c - -Change in 0.4: (25 Feb 98) -- suppress the type unzipFileInZip. - Only on file in the zipfile can be open at the same time -- fix somes typo in code -- added tm_unz structure in unzip_file_info (date/time in readable format) diff --git a/zlib/contrib/minizip/MiniZip64_Changes.txt b/zlib/contrib/minizip/MiniZip64_Changes.txt new file mode 100644 index 00000000000..13a1bd91a9b --- /dev/null +++ b/zlib/contrib/minizip/MiniZip64_Changes.txt @@ -0,0 +1,6 @@ + +MiniZip 1.1 was derrived from MiniZip at version 1.01f + +Change in 1.0 (Okt 2009) + - **TODO - Add history** + diff --git a/zlib/contrib/minizip/MiniZip64_info.txt b/zlib/contrib/minizip/MiniZip64_info.txt new file mode 100644 index 00000000000..57d71524208 --- /dev/null +++ b/zlib/contrib/minizip/MiniZip64_info.txt @@ -0,0 +1,74 @@ +MiniZip - Copyright (c) 1998-2010 - by Gilles Vollant - version 1.1 64 bits from Mathias Svensson + +Introduction +--------------------- +MiniZip 1.1 is built from MiniZip 1.0 by Gilles Vollant ( http://www.winimage.com/zLibDll/minizip.html ) + +When adding ZIP64 support into minizip it would result into risk of breaking compatibility with minizip 1.0. +All possible work was done for compatibility. + + +Background +--------------------- +When adding ZIP64 support Mathias Svensson found that Even Rouault have added ZIP64 +support for unzip.c into minizip for a open source project called gdal ( http://www.gdal.org/ ) + +That was used as a starting point. And after that ZIP64 support was added to zip.c +some refactoring and code cleanup was also done. + + +Changed from MiniZip 1.0 to MiniZip 1.1 +--------------------------------------- +* Added ZIP64 support for unzip ( by Even Rouault ) +* Added ZIP64 support for zip ( by Mathias Svensson ) +* Reverted some changed that Even Rouault did. +* Bunch of patches received from Gulles Vollant that he received for MiniZip from various users. +* Added unzip patch for BZIP Compression method (patch create by Daniel Borca) +* Added BZIP Compress method for zip +* Did some refactoring and code cleanup + + +Credits + + Gilles Vollant - Original MiniZip author + Even Rouault - ZIP64 unzip Support + Daniel Borca - BZip Compression method support in unzip + Mathias Svensson - ZIP64 zip support + Mathias Svensson - BZip Compression method support in zip + + Resources + + ZipLayout http://result42.com/projects/ZipFileLayout + Command line tool for Windows that shows the layout and information of the headers in a zip archive. + Used when debugging and validating the creation of zip files using MiniZip64 + + + ZIP App Note http://www.pkware.com/documents/casestudies/APPNOTE.TXT + Zip File specification + + +Notes. + * To be able to use BZip compression method in zip64.c or unzip64.c the BZIP2 lib is needed and HAVE_BZIP2 need to be defined. + +License +---------------------------------------------------------- + Condition of use and distribution are the same than zlib : + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + +---------------------------------------------------------- + diff --git a/zlib/contrib/minizip/crypt.h b/zlib/contrib/minizip/crypt.h index 622f4bc2ec4..a01d08d9328 100644 --- a/zlib/contrib/minizip/crypt.h +++ b/zlib/contrib/minizip/crypt.h @@ -87,13 +87,12 @@ static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned lon # define ZCR_SEED2 3141592654UL /* use PI as default pattern */ # endif -static int crypthead(passwd, buf, bufSize, pkeys, pcrc_32_tab, crcForCrypting) - const char *passwd; /* password string */ - unsigned char *buf; /* where to write header */ - int bufSize; - unsigned long* pkeys; - const unsigned long* pcrc_32_tab; - unsigned long crcForCrypting; +static int crypthead(const char* passwd, /* password string */ + unsigned char* buf, /* where to write header */ + int bufSize, + unsigned long* pkeys, + const unsigned long* pcrc_32_tab, + unsigned long crcForCrypting) { int n; /* index in random header */ int t; /* temporary */ @@ -124,8 +123,8 @@ static int crypthead(passwd, buf, bufSize, pkeys, pcrc_32_tab, crcForCrypting) { buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t); } - buf[n++] = zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t); - buf[n++] = zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t); + buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t); + buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t); return n; } diff --git a/zlib/contrib/minizip/ioapi.c b/zlib/contrib/minizip/ioapi.c index f1bee23e64b..49958f61ffd 100644 --- a/zlib/contrib/minizip/ioapi.c +++ b/zlib/contrib/minizip/ioapi.c @@ -1,74 +1,104 @@ -/* ioapi.c -- IO base function header for compress/uncompress .zip - files using zlib + zip or unzip API +/* ioapi.h -- IO base function header for compress/uncompress .zip + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) - Version 1.01e, February 12th, 2005 - - Copyright (C) 1998-2005 Gilles Vollant -*/ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "zlib.h" -#include "ioapi.h" + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + For more info read MiniZip_info.txt -/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */ +*/ -#ifndef SEEK_CUR -#define SEEK_CUR 1 +#if (defined(_WIN32)) + #define _CRT_SECURE_NO_WARNINGS #endif -#ifndef SEEK_END -#define SEEK_END 2 -#endif +#include "ioapi.h" -#ifndef SEEK_SET -#define SEEK_SET 0 -#endif +voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode) +{ + if (pfilefunc->zfile_func64.zopen64_file != NULL) + return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode); + else + { + return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode); + } +} -voidpf ZCALLBACK fopen_file_func OF(( - voidpf opaque, - const char* filename, - int mode)); +long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin) +{ + if (pfilefunc->zfile_func64.zseek64_file != NULL) + return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin); + else + { + uLong offsetTruncated = (uLong)offset; + if (offsetTruncated != offset) + return -1; + else + return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin); + } +} -uLong ZCALLBACK fread_file_func OF(( - voidpf opaque, - voidpf stream, - void* buf, - uLong size)); +ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream) +{ + if (pfilefunc->zfile_func64.zseek64_file != NULL) + return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream); + else + { + uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream); + if ((tell_uLong) == ((uLong)-1)) + return (ZPOS64_T)-1; + else + return tell_uLong; + } +} -uLong ZCALLBACK fwrite_file_func OF(( - voidpf opaque, - voidpf stream, - const void* buf, - uLong size)); +void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32) +{ + p_filefunc64_32->zfile_func64.zopen64_file = NULL; + p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file; + p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file; + p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file; + p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file; + p_filefunc64_32->zfile_func64.ztell64_file = NULL; + p_filefunc64_32->zfile_func64.zseek64_file = NULL; + p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file; + p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file; + p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque; + p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file; + p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file; +} -long ZCALLBACK ftell_file_func OF(( - voidpf opaque, - voidpf stream)); -long ZCALLBACK fseek_file_func OF(( - voidpf opaque, - voidpf stream, - uLong offset, - int origin)); -int ZCALLBACK fclose_file_func OF(( - voidpf opaque, - voidpf stream)); +static voidpf ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode)); +static uLong ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size)); +static uLong ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size)); +static ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream)); +static long ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); +static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream)); +static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream)); -int ZCALLBACK ferror_file_func OF(( - voidpf opaque, - voidpf stream)); +static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode) +{ + FILE* file = NULL; + const char* mode_fopen = NULL; + if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) + mode_fopen = "rb"; + else + if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + mode_fopen = "r+b"; + else + if (mode & ZLIB_FILEFUNC_MODE_CREATE) + mode_fopen = "wb"; + if ((filename!=NULL) && (mode_fopen != NULL)) + file = fopen(filename, mode_fopen); + return file; +} -voidpf ZCALLBACK fopen_file_func (opaque, filename, mode) - voidpf opaque; - const char* filename; - int mode; +static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode) { FILE* file = NULL; const char* mode_fopen = NULL; @@ -82,48 +112,41 @@ voidpf ZCALLBACK fopen_file_func (opaque, filename, mode) mode_fopen = "wb"; if ((filename!=NULL) && (mode_fopen != NULL)) - file = fopen(filename, mode_fopen); + file = fopen64((const char*)filename, mode_fopen); return file; } -uLong ZCALLBACK fread_file_func (opaque, stream, buf, size) - voidpf opaque; - voidpf stream; - void* buf; - uLong size; +static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size) { uLong ret; ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); return ret; } - -uLong ZCALLBACK fwrite_file_func (opaque, stream, buf, size) - voidpf opaque; - voidpf stream; - const void* buf; - uLong size; +static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size) { uLong ret; ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); return ret; } -long ZCALLBACK ftell_file_func (opaque, stream) - voidpf opaque; - voidpf stream; +static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream) { long ret; ret = ftell((FILE *)stream); return ret; } -long ZCALLBACK fseek_file_func (opaque, stream, offset, origin) - voidpf opaque; - voidpf stream; - uLong offset; - int origin; + +static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream) +{ + ZPOS64_T ret; + ret = ftello64((FILE *)stream); + return ret; +} + +static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin) { int fseek_origin=0; long ret; @@ -141,22 +164,45 @@ long ZCALLBACK fseek_file_func (opaque, stream, offset, origin) default: return -1; } ret = 0; - fseek((FILE *)stream, offset, fseek_origin); + if (fseek((FILE *)stream, offset, fseek_origin) != 0) + ret = -1; return ret; } -int ZCALLBACK fclose_file_func (opaque, stream) - voidpf opaque; - voidpf stream; +static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin) +{ + int fseek_origin=0; + long ret; + switch (origin) + { + case ZLIB_FILEFUNC_SEEK_CUR : + fseek_origin = SEEK_CUR; + break; + case ZLIB_FILEFUNC_SEEK_END : + fseek_origin = SEEK_END; + break; + case ZLIB_FILEFUNC_SEEK_SET : + fseek_origin = SEEK_SET; + break; + default: return -1; + } + ret = 0; + + if(fseeko64((FILE *)stream, offset, fseek_origin) != 0) + ret = -1; + + return ret; +} + + +static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream) { int ret; ret = fclose((FILE *)stream); return ret; } -int ZCALLBACK ferror_file_func (opaque, stream) - voidpf opaque; - voidpf stream; +static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream) { int ret; ret = ferror((FILE *)stream); @@ -175,3 +221,15 @@ void fill_fopen_filefunc (pzlib_filefunc_def) pzlib_filefunc_def->zerror_file = ferror_file_func; pzlib_filefunc_def->opaque = NULL; } + +void fill_fopen64_filefunc (zlib_filefunc64_def* pzlib_filefunc_def) +{ + pzlib_filefunc_def->zopen64_file = fopen64_file_func; + pzlib_filefunc_def->zread_file = fread_file_func; + pzlib_filefunc_def->zwrite_file = fwrite_file_func; + pzlib_filefunc_def->ztell64_file = ftell64_file_func; + pzlib_filefunc_def->zseek64_file = fseek64_file_func; + pzlib_filefunc_def->zclose_file = fclose_file_func; + pzlib_filefunc_def->zerror_file = ferror_file_func; + pzlib_filefunc_def->opaque = NULL; +} diff --git a/zlib/contrib/minizip/ioapi.h b/zlib/contrib/minizip/ioapi.h index 7d457baab34..8309c4cf8f4 100644 --- a/zlib/contrib/minizip/ioapi.h +++ b/zlib/contrib/minizip/ioapi.h @@ -1,13 +1,104 @@ /* ioapi.h -- IO base function header for compress/uncompress .zip - files using zlib + zip or unzip API + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) - Version 1.01e, February 12th, 2005 + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - Copyright (C) 1998-2005 Gilles Vollant + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + Changes + + Oct-2009 - Defined ZPOS64_T to fpos_t on windows and u_int64_t on linux. (might need to find a better why for this) + Oct-2009 - Change to fseeko64, ftello64 and fopen64 so large files would work on linux. + More if/def section may be needed to support other platforms + Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows. + (but you should use iowin32.c for windows instead) + +*/ + +#ifndef _ZLIBIOAPI64_H +#define _ZLIBIOAPI64_H + +#if (!defined(_WIN32)) && (!defined(WIN32)) + + // Linux needs this to support file operation on files larger then 4+GB + // But might need better if/def to select just the platforms that needs them. + + #ifndef __USE_FILE_OFFSET64 + #define __USE_FILE_OFFSET64 + #endif + #ifndef __USE_LARGEFILE64 + #define __USE_LARGEFILE64 + #endif + #ifndef _LARGEFILE64_SOURCE + #define _LARGEFILE64_SOURCE + #endif + #ifndef _FILE_OFFSET_BIT + #define _FILE_OFFSET_BIT 64 + #endif +#endif + +#include <stdio.h> +#include <stdlib.h> +#include "zlib.h" + +#if defined(USE_FILE32API) +#define fopen64 fopen +#define ftello64 ftell +#define fseeko64 fseek +#else +#ifdef _MSC_VER + #define fopen64 fopen + #if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC))) + #define ftello64 _ftelli64 + #define fseeko64 _fseeki64 + #else // old MSC + #define ftello64 ftell + #define fseeko64 fseek + #endif +#endif +#endif + +/* +#ifndef ZPOS64_T + #ifdef _WIN32 + #define ZPOS64_T fpos_t + #else + #include <stdint.h> + #define ZPOS64_T uint64_t + #endif +#endif */ -#ifndef _ZLIBIOAPI_H -#define _ZLIBIOAPI_H +#ifdef HAVE_MINIZIP64_CONF_H +#include "mz64conf.h" +#endif + +/* a type choosen by DEFINE */ +#ifdef HAVE_64BIT_INT_CUSTOM +typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T; +#else +#ifdef HAS_STDINT_H +#include "stdint.h" +typedef uint64_t ZPOS64_T; +#else + + +#if defined(_MSC_VER) || defined(__BORLANDC__) +typedef unsigned __int64 ZPOS64_T; +#else +typedef unsigned long long int ZPOS64_T; +#endif +#endif +#endif + + + +#ifdef __cplusplus +extern "C" { +#endif #define ZLIB_FILEFUNC_SEEK_CUR (1) @@ -23,26 +114,27 @@ #ifndef ZCALLBACK - -#if (defined(WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) -#define ZCALLBACK CALLBACK -#else -#define ZCALLBACK -#endif + #if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) + #define ZCALLBACK CALLBACK + #else + #define ZCALLBACK + #endif #endif -#ifdef __cplusplus -extern "C" { -#endif -typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode)); -typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size)); -typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); -typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream)); -typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin)); -typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream)); -typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream)); + +typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode)); +typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size)); +typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); +typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream)); +typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream)); + +typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream)); +typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin)); + + +/* here is the "old" 32 bits structure structure */ typedef struct zlib_filefunc_def_s { open_file_func zopen_file; @@ -55,21 +147,54 @@ typedef struct zlib_filefunc_def_s voidpf opaque; } zlib_filefunc_def; +typedef ZPOS64_T (ZCALLBACK *tell64_file_func) OF((voidpf opaque, voidpf stream)); +typedef long (ZCALLBACK *seek64_file_func) OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); +typedef voidpf (ZCALLBACK *open64_file_func) OF((voidpf opaque, const void* filename, int mode)); +typedef struct zlib_filefunc64_def_s +{ + open64_file_func zopen64_file; + read_file_func zread_file; + write_file_func zwrite_file; + tell64_file_func ztell64_file; + seek64_file_func zseek64_file; + close_file_func zclose_file; + testerror_file_func zerror_file; + voidpf opaque; +} zlib_filefunc64_def; +void fill_fopen64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def)); void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); -#define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size)) -#define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size)) -#define ZTELL(filefunc,filestream) ((*((filefunc).ztell_file))((filefunc).opaque,filestream)) -#define ZSEEK(filefunc,filestream,pos,mode) ((*((filefunc).zseek_file))((filefunc).opaque,filestream,pos,mode)) -#define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream)) -#define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream)) +/* now internal definition, only for zip.c and unzip.h */ +typedef struct zlib_filefunc64_32_def_s +{ + zlib_filefunc64_def zfile_func64; + open_file_func zopen32_file; + tell_file_func ztell32_file; + seek_file_func zseek32_file; +} zlib_filefunc64_32_def; + + +#define ZREAD64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zread_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size)) +#define ZWRITE64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zwrite_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size)) +//#define ZTELL64(filefunc,filestream) ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream)) +//#define ZSEEK64(filefunc,filestream,pos,mode) ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode)) +#define ZCLOSE64(filefunc,filestream) ((*((filefunc).zfile_func64.zclose_file)) ((filefunc).zfile_func64.opaque,filestream)) +#define ZERROR64(filefunc,filestream) ((*((filefunc).zfile_func64.zerror_file)) ((filefunc).zfile_func64.opaque,filestream)) +voidpf call_zopen64 OF((const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)); +long call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)); +ZPOS64_T call_ztell64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)); + +void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32); + +#define ZOPEN64(filefunc,filename,mode) (call_zopen64((&(filefunc)),(filename),(mode))) +#define ZTELL64(filefunc,filestream) (call_ztell64((&(filefunc)),(filestream))) +#define ZSEEK64(filefunc,filestream,pos,mode) (call_zseek64((&(filefunc)),(filestream),(pos),(mode))) #ifdef __cplusplus } #endif #endif - diff --git a/zlib/contrib/minizip/iowin32.c b/zlib/contrib/minizip/iowin32.c index a9b5f783996..6a2a883be72 100644 --- a/zlib/contrib/minizip/iowin32.c +++ b/zlib/contrib/minizip/iowin32.c @@ -1,10 +1,14 @@ /* iowin32.c -- IO base function header for compress/uncompress .zip - files using zlib + zip or unzip API - This IO API version uses the Win32 API (for Microsoft Windows) + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) - Version 1.01e, February 12th, 2005 + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt - Copyright (C) 1998-2005 Gilles Vollant */ #include <stdlib.h> @@ -21,40 +25,13 @@ #define INVALID_SET_FILE_POINTER ((DWORD)-1) #endif -voidpf ZCALLBACK win32_open_file_func OF(( - voidpf opaque, - const char* filename, - int mode)); - -uLong ZCALLBACK win32_read_file_func OF(( - voidpf opaque, - voidpf stream, - void* buf, - uLong size)); - -uLong ZCALLBACK win32_write_file_func OF(( - voidpf opaque, - voidpf stream, - const void* buf, - uLong size)); - -long ZCALLBACK win32_tell_file_func OF(( - voidpf opaque, - voidpf stream)); - -long ZCALLBACK win32_seek_file_func OF(( - voidpf opaque, - voidpf stream, - uLong offset, - int origin)); - -int ZCALLBACK win32_close_file_func OF(( - voidpf opaque, - voidpf stream)); - -int ZCALLBACK win32_error_file_func OF(( - voidpf opaque, - voidpf stream)); +voidpf ZCALLBACK win32_open_file_func OF((voidpf opaque, const char* filename, int mode)); +uLong ZCALLBACK win32_read_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size)); +uLong ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); +ZPOS64_T ZCALLBACK win32_tell64_file_func OF((voidpf opaque, voidpf stream)); +long ZCALLBACK win32_seek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); +int ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream)); +int ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream)); typedef struct { @@ -62,69 +39,121 @@ typedef struct int error; } WIN32FILE_IOWIN; -voidpf ZCALLBACK win32_open_file_func (opaque, filename, mode) - voidpf opaque; - const char* filename; - int mode; -{ - const char* mode_fopen = NULL; - DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; - HANDLE hFile = 0; - voidpf ret=NULL; - dwDesiredAccess = dwShareMode = dwFlagsAndAttributes = 0; +static void win32_translate_open_mode(int mode, + DWORD* lpdwDesiredAccess, + DWORD* lpdwCreationDisposition, + DWORD* lpdwShareMode, + DWORD* lpdwFlagsAndAttributes) +{ + *lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0; if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) { - dwDesiredAccess = GENERIC_READ; - dwCreationDisposition = OPEN_EXISTING; - dwShareMode = FILE_SHARE_READ; + *lpdwDesiredAccess = GENERIC_READ; + *lpdwCreationDisposition = OPEN_EXISTING; + *lpdwShareMode = FILE_SHARE_READ; } - else - if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + else if (mode & ZLIB_FILEFUNC_MODE_EXISTING) { - dwDesiredAccess = GENERIC_WRITE | GENERIC_READ; - dwCreationDisposition = OPEN_EXISTING; + *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ; + *lpdwCreationDisposition = OPEN_EXISTING; } - else - if (mode & ZLIB_FILEFUNC_MODE_CREATE) + else if (mode & ZLIB_FILEFUNC_MODE_CREATE) { - dwDesiredAccess = GENERIC_WRITE | GENERIC_READ; - dwCreationDisposition = CREATE_ALWAYS; + *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ; + *lpdwCreationDisposition = CREATE_ALWAYS; } +} - if ((filename!=NULL) && (dwDesiredAccess != 0)) - hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, - dwCreationDisposition, dwFlagsAndAttributes, NULL); - - if (hFile == INVALID_HANDLE_VALUE) - hFile = NULL; +static voidpf win32_build_iowin(HANDLE hFile) +{ + voidpf ret=NULL; - if (hFile != NULL) + if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE)) { WIN32FILE_IOWIN w32fiow; w32fiow.hf = hFile; w32fiow.error = 0; ret = malloc(sizeof(WIN32FILE_IOWIN)); + if (ret==NULL) CloseHandle(hFile); - else *((WIN32FILE_IOWIN*)ret) = w32fiow; + else + *((WIN32FILE_IOWIN*)ret) = w32fiow; } return ret; } +voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int mode) +{ + const char* mode_fopen = NULL; + DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; + HANDLE hFile = NULL; + + win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); + + return win32_build_iowin(hFile); +} + -uLong ZCALLBACK win32_read_file_func (opaque, stream, buf, size) - voidpf opaque; - voidpf stream; - void* buf; - uLong size; +voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int mode) +{ + const char* mode_fopen = NULL; + DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; + HANDLE hFile = NULL; + + win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); + + return win32_build_iowin(hFile); +} + + +voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int mode) +{ + const char* mode_fopen = NULL; + DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; + HANDLE hFile = NULL; + + win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); + + return win32_build_iowin(hFile); +} + + +voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mode) +{ + const char* mode_fopen = NULL; + DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; + HANDLE hFile = NULL; + + win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); + + return win32_build_iowin(hFile); +} + + +uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uLong size) { uLong ret=0; HANDLE hFile = NULL; if (stream!=NULL) hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + if (hFile != NULL) + { if (!ReadFile(hFile, buf, size, &ret, NULL)) { DWORD dwErr = GetLastError(); @@ -132,23 +161,21 @@ uLong ZCALLBACK win32_read_file_func (opaque, stream, buf, size) dwErr = 0; ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; } + } return ret; } -uLong ZCALLBACK win32_write_file_func (opaque, stream, buf, size) - voidpf opaque; - voidpf stream; - const void* buf; - uLong size; +uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size) { uLong ret=0; HANDLE hFile = NULL; if (stream!=NULL) hFile = ((WIN32FILE_IOWIN*)stream) -> hf; - if (hFile !=NULL) + if (hFile != NULL) + { if (!WriteFile(hFile, buf, size, &ret, NULL)) { DWORD dwErr = GetLastError(); @@ -156,13 +183,12 @@ uLong ZCALLBACK win32_write_file_func (opaque, stream, buf, size) dwErr = 0; ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; } + } return ret; } -long ZCALLBACK win32_tell_file_func (opaque, stream) - voidpf opaque; - voidpf stream; +long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream) { long ret=-1; HANDLE hFile = NULL; @@ -183,11 +209,32 @@ long ZCALLBACK win32_tell_file_func (opaque, stream) return ret; } -long ZCALLBACK win32_seek_file_func (opaque, stream, offset, origin) - voidpf opaque; - voidpf stream; - uLong offset; - int origin; +ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream) +{ + ZPOS64_T ret= (ZPOS64_T)-1; + HANDLE hFile = NULL; + if (stream!=NULL) + hFile = ((WIN32FILE_IOWIN*)stream)->hf; + + if (hFile) + { + LARGE_INTEGER li; + li.QuadPart = 0; + li.u.LowPart = SetFilePointer(hFile, li.u.LowPart, &li.u.HighPart, FILE_CURRENT); + if ( (li.LowPart == 0xFFFFFFFF) && (GetLastError() != NO_ERROR)) + { + DWORD dwErr = GetLastError(); + ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + ret = (ZPOS64_T)-1; + } + else + ret=li.QuadPart; + } + return ret; +} + + +long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,int origin) { DWORD dwMoveMethod=0xFFFFFFFF; HANDLE hFile = NULL; @@ -224,9 +271,46 @@ long ZCALLBACK win32_seek_file_func (opaque, stream, offset, origin) return ret; } -int ZCALLBACK win32_close_file_func (opaque, stream) - voidpf opaque; - voidpf stream; +long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T offset,int origin) +{ + DWORD dwMoveMethod=0xFFFFFFFF; + HANDLE hFile = NULL; + long ret=-1; + + if (stream!=NULL) + hFile = ((WIN32FILE_IOWIN*)stream)->hf; + + switch (origin) + { + case ZLIB_FILEFUNC_SEEK_CUR : + dwMoveMethod = FILE_CURRENT; + break; + case ZLIB_FILEFUNC_SEEK_END : + dwMoveMethod = FILE_END; + break; + case ZLIB_FILEFUNC_SEEK_SET : + dwMoveMethod = FILE_BEGIN; + break; + default: return -1; + } + + if (hFile) + { + LARGE_INTEGER* li = (LARGE_INTEGER*)&offset; + DWORD dwSet = SetFilePointer(hFile, li->u.LowPart, &li->u.HighPart, dwMoveMethod); + if (dwSet == INVALID_SET_FILE_POINTER) + { + DWORD dwErr = GetLastError(); + ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + ret = -1; + } + else + ret=0; + } + return ret; +} + +int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream) { int ret=-1; @@ -244,9 +328,7 @@ int ZCALLBACK win32_close_file_func (opaque, stream) return ret; } -int ZCALLBACK win32_error_file_func (opaque, stream) - voidpf opaque; - voidpf stream; +int ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream) { int ret=-1; if (stream!=NULL) @@ -256,8 +338,7 @@ int ZCALLBACK win32_error_file_func (opaque, stream) return ret; } -void fill_win32_filefunc (pzlib_filefunc_def) - zlib_filefunc_def* pzlib_filefunc_def; +void fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def) { pzlib_filefunc_def->zopen_file = win32_open_file_func; pzlib_filefunc_def->zread_file = win32_read_file_func; @@ -266,5 +347,43 @@ void fill_win32_filefunc (pzlib_filefunc_def) pzlib_filefunc_def->zseek_file = win32_seek_file_func; pzlib_filefunc_def->zclose_file = win32_close_file_func; pzlib_filefunc_def->zerror_file = win32_error_file_func; - pzlib_filefunc_def->opaque=NULL; + pzlib_filefunc_def->opaque = NULL; +} + +void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def) +{ + pzlib_filefunc_def->zopen64_file = win32_open64_file_func; + pzlib_filefunc_def->zread_file = win32_read_file_func; + pzlib_filefunc_def->zwrite_file = win32_write_file_func; + pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; + pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; + pzlib_filefunc_def->zclose_file = win32_close_file_func; + pzlib_filefunc_def->zerror_file = win32_error_file_func; + pzlib_filefunc_def->opaque = NULL; +} + + +void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def) +{ + pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA; + pzlib_filefunc_def->zread_file = win32_read_file_func; + pzlib_filefunc_def->zwrite_file = win32_write_file_func; + pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; + pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; + pzlib_filefunc_def->zclose_file = win32_close_file_func; + pzlib_filefunc_def->zerror_file = win32_error_file_func; + pzlib_filefunc_def->opaque = NULL; +} + + +void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def) +{ + pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW; + pzlib_filefunc_def->zread_file = win32_read_file_func; + pzlib_filefunc_def->zwrite_file = win32_write_file_func; + pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; + pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; + pzlib_filefunc_def->zclose_file = win32_close_file_func; + pzlib_filefunc_def->zerror_file = win32_error_file_func; + pzlib_filefunc_def->opaque = NULL; } diff --git a/zlib/contrib/minizip/iowin32.h b/zlib/contrib/minizip/iowin32.h index a3a437adf84..0ca0969a7d0 100644 --- a/zlib/contrib/minizip/iowin32.h +++ b/zlib/contrib/minizip/iowin32.h @@ -1,10 +1,14 @@ /* iowin32.h -- IO base function header for compress/uncompress .zip - files using zlib + zip or unzip API - This IO API version uses the Win32 API (for Microsoft Windows) + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) - Version 1.01e, February 12th, 2005 + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt - Copyright (C) 1998-2005 Gilles Vollant */ #include <windows.h> @@ -15,6 +19,9 @@ extern "C" { #endif void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); +void fill_win32_filefunc64 OF((zlib_filefunc64_def* pzlib_filefunc_def)); +void fill_win32_filefunc64A OF((zlib_filefunc64_def* pzlib_filefunc_def)); +void fill_win32_filefunc64W OF((zlib_filefunc64_def* pzlib_filefunc_def)); #ifdef __cplusplus } diff --git a/zlib/contrib/minizip/make_vms.com b/zlib/contrib/minizip/make_vms.com new file mode 100644 index 00000000000..9ac13a98fa5 --- /dev/null +++ b/zlib/contrib/minizip/make_vms.com @@ -0,0 +1,25 @@ +$ if f$search("ioapi.h_orig") .eqs. "" then copy ioapi.h ioapi.h_orig +$ open/write zdef vmsdefs.h +$ copy sys$input: zdef +$ deck +#define unix +#define fill_zlib_filefunc64_32_def_from_filefunc32 fillzffunc64from +#define Write_Zip64EndOfCentralDirectoryLocator Write_Zip64EoDLocator +#define Write_Zip64EndOfCentralDirectoryRecord Write_Zip64EoDRecord +#define Write_EndOfCentralDirectoryRecord Write_EoDRecord +$ eod +$ close zdef +$ copy vmsdefs.h,ioapi.h_orig ioapi.h +$ cc/include=[--]/prefix=all ioapi.c +$ cc/include=[--]/prefix=all miniunz.c +$ cc/include=[--]/prefix=all unzip.c +$ cc/include=[--]/prefix=all minizip.c +$ cc/include=[--]/prefix=all zip.c +$ link miniunz,unzip,ioapi,[--]libz.olb/lib +$ link minizip,zip,ioapi,[--]libz.olb/lib +$ mcr []minizip test minizip_info.txt +$ mcr []miniunz -l test.zip +$ rename minizip_info.txt; minizip_info.txt_old +$ mcr []miniunz test.zip +$ delete test.zip;* +$exit diff --git a/zlib/contrib/minizip/miniunz.c b/zlib/contrib/minizip/miniunz.c index f599938884e..9ed009fbd99 100644 --- a/zlib/contrib/minizip/miniunz.c +++ b/zlib/contrib/minizip/miniunz.c @@ -1,10 +1,31 @@ /* miniunz.c - Version 1.01e, February 12th, 2005 + Version 1.1, February 14h, 2010 + sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) - Copyright (C) 1998-2005 Gilles Vollant + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications of Unzip for Zip64 + Copyright (C) 2007-2008 Even Rouault + + Modifications for Zip64 support on both zip and unzip + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) */ +#ifndef _WIN32 + #ifndef __USE_FILE_OFFSET64 + #define __USE_FILE_OFFSET64 + #endif + #ifndef __USE_LARGEFILE64 + #define __USE_LARGEFILE64 + #endif + #ifndef _LARGEFILE64_SOURCE + #define _LARGEFILE64_SOURCE + #endif + #ifndef _FILE_OFFSET_BIT + #define _FILE_OFFSET_BIT 64 + #endif +#endif #include <stdio.h> #include <stdlib.h> @@ -27,7 +48,7 @@ #define WRITEBUFFERSIZE (8192) #define MAXFILENAME (256) -#ifdef WIN32 +#ifdef _WIN32 #define USEWIN32IOAPI #include "iowin32.h" #endif @@ -51,11 +72,11 @@ void change_file_date(filename,dosdate,tmu_date) uLong dosdate; tm_unz tmu_date; { -#ifdef WIN32 +#ifdef _WIN32 HANDLE hFile; FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite; - hFile = CreateFile(filename,GENERIC_READ | GENERIC_WRITE, + hFile = CreateFileA(filename,GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL); GetFileTime(hFile,&ftCreate,&ftLastAcc,&ftLastWrite); DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal); @@ -91,8 +112,8 @@ int mymkdir(dirname) const char* dirname; { int ret=0; -#ifdef WIN32 - ret = mkdir(dirname); +#ifdef _WIN32 + ret = _mkdir(dirname); #else #ifdef unix ret = mkdir (dirname,0775); @@ -112,6 +133,11 @@ int makedir (newdir) return 0; buffer = (char*)malloc(len+1); + if (buffer==NULL) + { + printf("Error allocating memory\n"); + return UNZ_INTERNALERROR; + } strcpy(buffer,newdir); if (buffer[len-1] == '/') { @@ -164,34 +190,61 @@ void do_help() " -p extract crypted file using password\n\n"); } +void Display64BitsSize(ZPOS64_T n, int size_char) +{ + /* to avoid compatibility problem , we do here the conversion */ + char number[21]; + int offset=19; + int pos_string = 19; + number[20]=0; + for (;;) { + number[offset]=(char)((n%10)+'0'); + if (number[offset] != '0') + pos_string=offset; + n/=10; + if (offset==0) + break; + offset--; + } + { + int size_display_string = 19-pos_string; + while (size_char > size_display_string) + { + size_char--; + printf(" "); + } + } + + printf("%s",&number[pos_string]); +} int do_list(uf) unzFile uf; { uLong i; - unz_global_info gi; + unz_global_info64 gi; int err; - err = unzGetGlobalInfo (uf,&gi); + err = unzGetGlobalInfo64(uf,&gi); if (err!=UNZ_OK) printf("error %d with zipfile in unzGetGlobalInfo \n",err); - printf(" Length Method Size Ratio Date Time CRC-32 Name\n"); - printf(" ------ ------ ---- ----- ---- ---- ------ ----\n"); + printf(" Length Method Size Ratio Date Time CRC-32 Name\n"); + printf(" ------ ------ ---- ----- ---- ---- ------ ----\n"); for (i=0;i<gi.number_entry;i++) { char filename_inzip[256]; - unz_file_info file_info; + unz_file_info64 file_info; uLong ratio=0; const char *string_method; char charCrypt=' '; - err = unzGetCurrentFileInfo(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0); + err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0); if (err!=UNZ_OK) { printf("error %d with zipfile in unzGetCurrentFileInfo\n",err); break; } if (file_info.uncompressed_size>0) - ratio = (file_info.compressed_size*100)/file_info.uncompressed_size; + ratio = (uLong)((file_info.compressed_size*100)/file_info.uncompressed_size); /* display a '*' if the file is crypted */ if ((file_info.flag & 1) != 0) @@ -211,12 +264,17 @@ int do_list(uf) string_method="Defl:F"; /* 2:fast , 3 : extra fast*/ } else + if (file_info.compression_method==Z_BZIP2ED) + { + string_method="BZip2 "; + } + else string_method="Unkn. "; - printf("%7lu %6s%c%7lu %3lu%% %2.2lu-%2.2lu-%2.2lu %2.2lu:%2.2lu %8.8lx %s\n", - file_info.uncompressed_size,string_method, - charCrypt, - file_info.compressed_size, + Display64BitsSize(file_info.uncompressed_size,7); + printf(" %6s%c",string_method,charCrypt); + Display64BitsSize(file_info.compressed_size,7); + printf(" %3lu%% %2.2lu-%2.2lu-%2.2lu %2.2lu:%2.2lu %8.8lx %s\n", ratio, (uLong)file_info.tmu_date.tm_mon + 1, (uLong)file_info.tmu_date.tm_mday, @@ -252,9 +310,9 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) void* buf; uInt size_buf; - unz_file_info file_info; + unz_file_info64 file_info; uLong ratio=0; - err = unzGetCurrentFileInfo(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0); + err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0); if (err!=UNZ_OK) { @@ -306,7 +364,7 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) { char rep=0; FILE* ftestexist; - ftestexist = fopen(write_filename,"rb"); + ftestexist = fopen64(write_filename,"rb"); if (ftestexist!=NULL) { fclose(ftestexist); @@ -317,7 +375,7 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) printf("The file %s exists. Overwrite ? [y]es, [n]o, [A]ll: ",write_filename); ret = scanf("%1s",answer); - if (ret != 1) + if (ret != 1) { exit(EXIT_FAILURE); } @@ -337,7 +395,7 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) if ((skip==0) && (err==UNZ_OK)) { - fout=fopen(write_filename,"wb"); + fout=fopen64(write_filename,"wb"); /* some zipfile don't contain directory alone before file */ if ((fout==NULL) && ((*popt_extract_without_path)==0) && @@ -347,7 +405,7 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) *(filename_withoutpath-1)='\0'; makedir(write_filename); *(filename_withoutpath-1)=c; - fout=fopen(write_filename,"wb"); + fout=fopen64(write_filename,"wb"); } if (fout==NULL) @@ -409,11 +467,11 @@ int do_extract(uf,opt_extract_without_path,opt_overwrite,password) const char* password; { uLong i; - unz_global_info gi; + unz_global_info64 gi; int err; FILE* fout=NULL; - err = unzGetGlobalInfo (uf,&gi); + err = unzGetGlobalInfo64(uf,&gi); if (err!=UNZ_OK) printf("error %d with zipfile in unzGetGlobalInfo \n",err); @@ -470,6 +528,7 @@ int main(argc,argv) const char *password=NULL; char filename_try[MAXFILENAME+16] = ""; int i; + int ret_value=0; int opt_do_list=0; int opt_do_extract=1; int opt_do_extract_withoutpath=0; @@ -532,7 +591,7 @@ int main(argc,argv) { # ifdef USEWIN32IOAPI - zlib_filefunc_def ffunc; + zlib_filefunc64_def ffunc; # endif strncpy(filename_try, zipfilename,MAXFILENAME-1); @@ -540,18 +599,18 @@ int main(argc,argv) filename_try[ MAXFILENAME ] = '\0'; # ifdef USEWIN32IOAPI - fill_win32_filefunc(&ffunc); - uf = unzOpen2(zipfilename,&ffunc); + fill_win32_filefunc64A(&ffunc); + uf = unzOpen2_64(zipfilename,&ffunc); # else - uf = unzOpen(zipfilename); + uf = unzOpen64(zipfilename); # endif if (uf==NULL) { strcat(filename_try,".zip"); # ifdef USEWIN32IOAPI - uf = unzOpen2(filename_try,&ffunc); + uf = unzOpen2_64(filename_try,&ffunc); # else - uf = unzOpen(filename_try); + uf = unzOpen64(filename_try); # endif } } @@ -564,22 +623,26 @@ int main(argc,argv) printf("%s opened\n",filename_try); if (opt_do_list==1) - return do_list(uf); + ret_value = do_list(uf); else if (opt_do_extract==1) { - if (opt_extractdir && chdir(dirname)) +#ifdef _WIN32 + if (opt_extractdir && _chdir(dirname)) +#else + if (opt_extractdir && chdir(dirname)) +#endif { printf("Error changing into %s, aborting\n", dirname); exit(-1); } if (filename_to_extract == NULL) - return do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,password); + ret_value = do_extract(uf, opt_do_extract_withoutpath, opt_overwrite, password); else - return do_extract_onefile(uf,filename_to_extract, - opt_do_extract_withoutpath,opt_overwrite,password); + ret_value = do_extract_onefile(uf, filename_to_extract, opt_do_extract_withoutpath, opt_overwrite, password); } - unzCloseCurrentFile(uf); - return 0; + unzClose(uf); + + return ret_value; } diff --git a/zlib/contrib/minizip/minizip.c b/zlib/contrib/minizip/minizip.c index f2dfecd8b12..7a4fa5a643e 100644 --- a/zlib/contrib/minizip/minizip.c +++ b/zlib/contrib/minizip/minizip.c @@ -1,10 +1,33 @@ /* minizip.c - Version 1.01e, February 12th, 2005 + Version 1.1, February 14h, 2010 + sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) - Copyright (C) 1998-2005 Gilles Vollant + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications of Unzip for Zip64 + Copyright (C) 2007-2008 Even Rouault + + Modifications for Zip64 support on both zip and unzip + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) */ + +#ifndef _WIN32 + #ifndef __USE_FILE_OFFSET64 + #define __USE_FILE_OFFSET64 + #endif + #ifndef __USE_LARGEFILE64 + #define __USE_LARGEFILE64 + #endif + #ifndef _LARGEFILE64_SOURCE + #define _LARGEFILE64_SOURCE + #endif + #ifndef _FILE_OFFSET_BIT + #define _FILE_OFFSET_BIT 64 + #endif +#endif + #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -24,9 +47,9 @@ #include "zip.h" -#ifdef WIN32 -#define USEWIN32IOAPI -#include "iowin32.h" +#ifdef _WIN32 + #define USEWIN32IOAPI + #include "iowin32.h" #endif @@ -34,7 +57,7 @@ #define WRITEBUFFERSIZE (16384) #define MAXFILENAME (256) -#ifdef WIN32 +#ifdef _WIN32 uLong filetime(f, tmzip, dt) char *f; /* name of file to get info on */ tm_zip *tmzip; /* return value: access, modific. and creation times */ @@ -44,9 +67,9 @@ uLong filetime(f, tmzip, dt) { FILETIME ftLocal; HANDLE hFind; - WIN32_FIND_DATA ff32; + WIN32_FIND_DATAA ff32; - hFind = FindFirstFile(f,&ff32); + hFind = FindFirstFileA(f,&ff32); if (hFind != INVALID_HANDLE_VALUE) { FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal); @@ -119,7 +142,7 @@ int check_exist_file(filename) { FILE* ftestexist; int ret = 1; - ftestexist = fopen(filename,"rb"); + ftestexist = fopen64(filename,"rb"); if (ftestexist==NULL) ret = 0; else @@ -129,18 +152,19 @@ int check_exist_file(filename) void do_banner() { - printf("MiniZip 1.01b, demo of zLib + Zip package written by Gilles Vollant\n"); - printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n"); + printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n"); + printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n"); } void do_help() { - printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] file.zip [files_to_add]\n\n" \ + printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \ " -o Overwrite existing file.zip\n" \ " -a Append to existing file.zip\n" \ " -0 Store only\n" \ " -1 Compress faster\n" \ - " -9 Compress better\n\n"); + " -9 Compress better\n\n" \ + " -j exclude path. store only the file name.\n\n"); } /* calculate the CRC32 of a file, @@ -149,7 +173,7 @@ int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigne { unsigned long calculate_crc=0; int err=ZIP_OK; - FILE * fin = fopen(filenameinzip,"rb"); + FILE * fin = fopen64(filenameinzip,"rb"); unsigned long size_read = 0; unsigned long total_read = 0; if (fin==NULL) @@ -179,10 +203,33 @@ int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigne fclose(fin); *result_crc=calculate_crc; - printf("file %s crc %x\n",filenameinzip,calculate_crc); + printf("file %s crc %lx\n", filenameinzip, calculate_crc); return err; } +int isLargeFile(const char* filename) +{ + int largeFile = 0; + ZPOS64_T pos = 0; + FILE* pFile = fopen64(filename, "rb"); + + if(pFile != NULL) + { + int n = fseeko64(pFile, 0, SEEK_END); + + pos = ftello64(pFile); + + printf("File : %s is %lld bytes\n", filename, pos); + + if(pos >= 0xffffffff) + largeFile = 1; + + fclose(pFile); + } + + return largeFile; +} + int main(argc,argv) int argc; char *argv[]; @@ -190,6 +237,7 @@ int main(argc,argv) int i; int opt_overwrite=0; int opt_compress_level=Z_DEFAULT_COMPRESSION; + int opt_exclude_path=0; int zipfilenamearg = 0; char filename_try[MAXFILENAME+16]; int zipok; @@ -222,6 +270,8 @@ int main(argc,argv) opt_overwrite = 2; if ((c>='0') && (c<='9')) opt_compress_level = c-'0'; + if ((c=='j') || (c=='J')) + opt_exclude_path = 1; if (((c=='p') || (c=='P')) && (i+1<argc)) { @@ -231,8 +281,12 @@ int main(argc,argv) } } else + { if (zipfilenamearg == 0) + { zipfilenamearg = i ; + } + } } } @@ -245,7 +299,9 @@ int main(argc,argv) } if (zipfilenamearg==0) + { zipok=0; + } else { int i,len; @@ -302,11 +358,11 @@ int main(argc,argv) zipFile zf; int errclose; # ifdef USEWIN32IOAPI - zlib_filefunc_def ffunc; - fill_win32_filefunc(&ffunc); - zf = zipOpen2(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc); + zlib_filefunc64_def ffunc; + fill_win32_filefunc64A(&ffunc); + zf = zipOpen2_64(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc); # else - zf = zipOpen(filename_try,(opt_overwrite==2) ? 2 : 0); + zf = zipOpen64(filename_try,(opt_overwrite==2) ? 2 : 0); # endif if (zf == NULL) @@ -329,8 +385,10 @@ int main(argc,argv) FILE * fin; int size_read; const char* filenameinzip = argv[i]; + const char *savefilenameinzip; zip_fileinfo zi; unsigned long crcFile=0; + int zip64 = 0; zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour = zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0; @@ -348,19 +406,48 @@ int main(argc,argv) if ((password != NULL) && (err==ZIP_OK)) err = getFileCrc(filenameinzip,buf,size_buf,&crcFile); - err = zipOpenNewFileInZip3(zf,filenameinzip,&zi, + zip64 = isLargeFile(filenameinzip); + + /* The path name saved, should not include a leading slash. */ + /*if it did, windows/xp and dynazip couldn't read the zip file. */ + savefilenameinzip = filenameinzip; + while( savefilenameinzip[0] == '\\' || savefilenameinzip[0] == '/' ) + { + savefilenameinzip++; + } + + /*should the zip file contain any path at all?*/ + if( opt_exclude_path ) + { + const char *tmpptr; + const char *lastslash = 0; + for( tmpptr = savefilenameinzip; *tmpptr; tmpptr++) + { + if( *tmpptr == '\\' || *tmpptr == '/') + { + lastslash = tmpptr; + } + } + if( lastslash != NULL ) + { + savefilenameinzip = lastslash+1; // base filename follows last slash. + } + } + + /**/ + err = zipOpenNewFileInZip3_64(zf,savefilenameinzip,&zi, NULL,0,NULL,0,NULL /* comment*/, (opt_compress_level != 0) ? Z_DEFLATED : 0, opt_compress_level,0, /* -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, */ -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, - password,crcFile); + password,crcFile, zip64); if (err != ZIP_OK) printf("error in opening %s in zipfile\n",filenameinzip); else { - fin = fopen(filenameinzip,"rb"); + fin = fopen64(filenameinzip,"rb"); if (fin==NULL) { err=ZIP_ERRNO; diff --git a/zlib/contrib/minizip/mztools.c b/zlib/contrib/minizip/mztools.c index 8a50ee43925..f9092e65ae6 100644 --- a/zlib/contrib/minizip/mztools.c +++ b/zlib/contrib/minizip/mztools.c @@ -62,7 +62,7 @@ uLong* bytesRecovered; unsigned int fnsize = READ_16(header + 26); /* file name length */ unsigned int extsize = READ_16(header + 28); /* extra field length */ filename[0] = extra[0] = '\0'; - + /* Header */ if (fwrite(header, 1, 30, fpOut) == 30) { offset += 30; @@ -70,7 +70,7 @@ uLong* bytesRecovered; err = Z_ERRNO; break; } - + /* Filename */ if (fnsize > 0) { if (fread(filename, 1, fnsize, fpZip) == fnsize) { @@ -103,7 +103,7 @@ uLong* bytesRecovered; break; } } - + /* Data */ { int dataSize = cpsize; @@ -133,7 +133,7 @@ uLong* bytesRecovered; } } } - + /* Central directory entry */ { char header[46]; @@ -159,7 +159,7 @@ uLong* bytesRecovered; /* Header */ if (fwrite(header, 1, 46, fpOutCD) == 46) { offsetCD += 46; - + /* Filename */ if (fnsize > 0) { if (fwrite(filename, 1, fnsize, fpOutCD) == fnsize) { @@ -172,7 +172,7 @@ uLong* bytesRecovered; err = Z_STREAM_ERROR; break; } - + /* Extra field */ if (extsize > 0) { if (fwrite(extra, 1, extsize, fpOutCD) == extsize) { @@ -182,7 +182,7 @@ uLong* bytesRecovered; break; } } - + /* Comment field */ if (comsize > 0) { if ((int)fwrite(comment, 1, comsize, fpOutCD) == comsize) { @@ -192,8 +192,8 @@ uLong* bytesRecovered; break; } } - - + + } else { err = Z_ERRNO; break; @@ -225,17 +225,17 @@ uLong* bytesRecovered; WRITE_32(header + 12, offsetCD); /* size of CD */ WRITE_32(header + 16, offset); /* offset to CD */ WRITE_16(header + 20, comsize); /* comment */ - + /* Header */ if (fwrite(header, 1, 22, fpOutCD) == 22) { - + /* Comment field */ if (comsize > 0) { if ((int)fwrite(comment, 1, comsize, fpOutCD) != comsize) { err = Z_ERRNO; } } - + } else { err = Z_ERRNO; } @@ -257,14 +257,14 @@ uLong* bytesRecovered; fclose(fpOutCD); } } - + /* Close */ fclose(fpZip); fclose(fpOut); - + /* Wipe temporary file */ (void)remove(fileOutTmp); - + /* Number of recovered entries */ if (err == Z_OK) { if (nRecovered != NULL) { diff --git a/zlib/contrib/minizip/mztools.h b/zlib/contrib/minizip/mztools.h index eee78dc56b5..88b34592bf5 100644 --- a/zlib/contrib/minizip/mztools.h +++ b/zlib/contrib/minizip/mztools.h @@ -17,14 +17,14 @@ extern "C" { #include "unzip.h" -/* Repair a ZIP file (missing central directory) +/* Repair a ZIP file (missing central directory) file: file to recover fileOut: output file after recovery fileOutTmp: temporary file name used for recovery */ -extern int ZEXPORT unzRepair(const char* file, - const char* fileOut, - const char* fileOutTmp, +extern int ZEXPORT unzRepair(const char* file, + const char* fileOut, + const char* fileOutTmp, uLong* nRecovered, uLong* bytesRecovered); diff --git a/zlib/contrib/minizip/unzip.c b/zlib/contrib/minizip/unzip.c index 9ad4766d8db..7617f41f1cc 100644 --- a/zlib/contrib/minizip/unzip.c +++ b/zlib/contrib/minizip/unzip.c @@ -1,43 +1,77 @@ /* unzip.c -- IO for uncompress .zip files using zlib - Version 1.01e, February 12th, 2005 + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) - Copyright (C) 1998-2005 Gilles Vollant + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - Read unzip.h for more info -*/ + Modifications of Unzip for Zip64 + Copyright (C) 2007-2008 Even Rouault + + Modifications for Zip64 support on both zip and unzip + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + + ------------------------------------------------------------------------------------ + Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of + compatibility with older software. The following is from the original crypt.c. + Code woven in by Terry Thorsen 1/2003. -/* Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of -compatibility with older software. The following is from the original crypt.c. Code -woven in by Terry Thorsen 1/2003. -*/ -/* Copyright (c) 1990-2000 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html -*/ -/* - crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h] + + crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h] The encryption/decryption parts of this source code (as opposed to the non-echoing password parts) were originally written in Europe. The whole source package can be freely distributed, including from the USA. (Prior to January 2000, re-export from the US was a violation of US law.) - */ -/* - This encryption code is a direct transcription of the algorithm from + This encryption code is a direct transcription of the algorithm from Roger Schlafly, described by Phil Katz in the file appnote.txt. This file (appnote.txt) is distributed with the PKZIP program (even in the version without encryption capabilities). - */ + + ------------------------------------------------------------------------------------ + + Changes in unzip.c + + 2007-2008 - Even Rouault - Addition of cpl_unzGetCurrentFileZStreamPos + 2007-2008 - Even Rouault - Decoration of symbol names unz* -> cpl_unz* + 2007-2008 - Even Rouault - Remove old C style function prototypes + 2007-2008 - Even Rouault - Add unzip support for ZIP64 + + Copyright (C) 2007-2008 Even Rouault + + + Oct-2009 - Mathias Svensson - Removed cpl_* from symbol names (Even Rouault added them but since this is now moved to a new project (minizip64) I renamed them again). + Oct-2009 - Mathias Svensson - Fixed problem if uncompressed size was > 4G and compressed size was <4G + should only read the compressed/uncompressed size from the Zip64 format if + the size from normal header was 0xFFFFFFFF + Oct-2009 - Mathias Svensson - Applied some bug fixes from paches recived from Gilles Vollant + Oct-2009 - Mathias Svensson - Applied support to unzip files with compression mathod BZIP2 (bzip2 lib is required) + Patch created by Daniel Borca + + Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer + + Copyright (C) 1998 - 2010 Gilles Vollant, Even Rouault, Mathias Svensson + +*/ #include <stdio.h> #include <stdlib.h> #include <string.h> + +#ifndef NOUNCRYPT + #define NOUNCRYPT +#endif + #include "zlib.h" #include "unzip.h" @@ -85,16 +119,14 @@ woven in by Terry Thorsen 1/2003. #define SIZEZIPLOCALHEADER (0x1e) - - const char unz_copyright[] = " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll"; /* unz_file_info_interntal contain internal info about a file in zipfile*/ -typedef struct unz_file_info_internal_s +typedef struct unz_file_info64_internal_s { - uLong offset_curfile;/* relative offset of local header 4 bytes */ -} unz_file_info_internal; + ZPOS64_T offset_curfile;/* relative offset of local header 8 bytes */ +} unz_file_info64_internal; /* file_in_zip_read_info_s contain internal information about a file in zipfile, @@ -104,52 +136,61 @@ typedef struct char *read_buffer; /* internal buffer for compressed data */ z_stream stream; /* zLib stream structure for inflate */ - uLong pos_in_zipfile; /* position in byte on the zipfile, for fseek*/ +#ifdef HAVE_BZIP2 + bz_stream bstream; /* bzLib stream structure for bziped */ +#endif + + ZPOS64_T pos_in_zipfile; /* position in byte on the zipfile, for fseek*/ uLong stream_initialised; /* flag set if stream structure is initialised*/ - uLong offset_local_extrafield;/* offset of the local extra field */ + ZPOS64_T offset_local_extrafield;/* offset of the local extra field */ uInt size_local_extrafield;/* size of the local extra field */ - uLong pos_local_extrafield; /* position in the local extra field in read*/ + ZPOS64_T pos_local_extrafield; /* position in the local extra field in read*/ + ZPOS64_T total_out_64; uLong crc32; /* crc32 of all data uncompressed */ uLong crc32_wait; /* crc32 we must obtain after decompress all */ - uLong rest_read_compressed; /* number of byte to be decompressed */ - uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/ - zlib_filefunc_def z_filefunc; + ZPOS64_T rest_read_compressed; /* number of byte to be decompressed */ + ZPOS64_T rest_read_uncompressed;/*number of byte to be obtained after decomp*/ + zlib_filefunc64_32_def z_filefunc; voidpf filestream; /* io structore of the zipfile */ uLong compression_method; /* compression method (0==store) */ - uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ int raw; -} file_in_zip_read_info_s; +} file_in_zip64_read_info_s; -/* unz_s contain internal information about the zipfile +/* unz64_s contain internal information about the zipfile */ typedef struct { - zlib_filefunc_def z_filefunc; + zlib_filefunc64_32_def z_filefunc; + int is64bitOpenFunction; voidpf filestream; /* io structore of the zipfile */ - unz_global_info gi; /* public global information */ - uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ - uLong num_file; /* number of the current file in the zipfile*/ - uLong pos_in_central_dir; /* pos of the current file in the central dir*/ - uLong current_file_ok; /* flag about the usability of the current file*/ - uLong central_pos; /* position of the beginning of the central dir*/ - - uLong size_central_dir; /* size of the central directory */ - uLong offset_central_dir; /* offset of start of central directory with + unz_global_info64 gi; /* public global information */ + ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + ZPOS64_T num_file; /* number of the current file in the zipfile*/ + ZPOS64_T pos_in_central_dir; /* pos of the current file in the central dir*/ + ZPOS64_T current_file_ok; /* flag about the usability of the current file*/ + ZPOS64_T central_pos; /* position of the beginning of the central dir*/ + + ZPOS64_T size_central_dir; /* size of the central directory */ + ZPOS64_T offset_central_dir; /* offset of start of central directory with respect to the starting disk number */ - unz_file_info cur_file_info; /* public info about the current file in zip*/ - unz_file_info_internal cur_file_info_internal; /* private info about it*/ - file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current + unz_file_info64 cur_file_info; /* public info about the current file in zip*/ + unz_file_info64_internal cur_file_info_internal; /* private info about it*/ + file_in_zip64_read_info_s* pfile_in_zip_read; /* structure about the current file if we are decompressing it */ int encrypted; + + int isZip64; + # ifndef NOUNCRYPT unsigned long keys[3]; /* keys defining the pseudo-random sequence */ const unsigned long* pcrc_32_tab; # endif -} unz_s; +} unz64_s; #ifndef NOUNCRYPT @@ -163,18 +204,15 @@ typedef struct */ -local int unzlocal_getByte OF(( - const zlib_filefunc_def* pzlib_filefunc_def, +local int unz64local_getByte OF(( + const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi)); -local int unzlocal_getByte(pzlib_filefunc_def,filestream,pi) - const zlib_filefunc_def* pzlib_filefunc_def; - voidpf filestream; - int *pi; +local int unz64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi) { unsigned char c; - int err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1); + int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1); if (err==1) { *pi = (int)c; @@ -182,7 +220,7 @@ local int unzlocal_getByte(pzlib_filefunc_def,filestream,pi) } else { - if (ZERROR(*pzlib_filefunc_def,filestream)) + if (ZERROR64(*pzlib_filefunc_def,filestream)) return UNZ_ERRNO; else return UNZ_EOF; @@ -193,26 +231,25 @@ local int unzlocal_getByte(pzlib_filefunc_def,filestream,pi) /* =========================================================================== Reads a long in LSB order from the given gz_stream. Sets */ -local int unzlocal_getShort OF(( - const zlib_filefunc_def* pzlib_filefunc_def, +local int unz64local_getShort OF(( + const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX)); -local int unzlocal_getShort (pzlib_filefunc_def,filestream,pX) - const zlib_filefunc_def* pzlib_filefunc_def; - voidpf filestream; - uLong *pX; +local int unz64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + uLong *pX) { uLong x ; - int i; + int i = 0; int err; - err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); x = (uLong)i; if (err==UNZ_OK) - err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); - x += ((uLong)i)<<8; + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((uLong)i)<<8; if (err==UNZ_OK) *pX = x; @@ -221,33 +258,32 @@ local int unzlocal_getShort (pzlib_filefunc_def,filestream,pX) return err; } -local int unzlocal_getLong OF(( - const zlib_filefunc_def* pzlib_filefunc_def, +local int unz64local_getLong OF(( + const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX)); -local int unzlocal_getLong (pzlib_filefunc_def,filestream,pX) - const zlib_filefunc_def* pzlib_filefunc_def; - voidpf filestream; - uLong *pX; +local int unz64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + uLong *pX) { uLong x ; - int i; + int i = 0; int err; - err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); x = (uLong)i; if (err==UNZ_OK) - err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); - x += ((uLong)i)<<8; + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((uLong)i)<<8; if (err==UNZ_OK) - err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); - x += ((uLong)i)<<16; + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((uLong)i)<<16; if (err==UNZ_OK) - err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); x += ((uLong)i)<<24; if (err==UNZ_OK) @@ -257,11 +293,60 @@ local int unzlocal_getLong (pzlib_filefunc_def,filestream,pX) return err; } +local int unz64local_getLong64 OF(( + const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + ZPOS64_T *pX)); + + +local int unz64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + ZPOS64_T *pX) +{ + ZPOS64_T x ; + int i = 0; + int err; + + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x = (ZPOS64_T)i; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((ZPOS64_T)i)<<8; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((ZPOS64_T)i)<<16; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((ZPOS64_T)i)<<24; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((ZPOS64_T)i)<<32; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((ZPOS64_T)i)<<40; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((ZPOS64_T)i)<<48; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((ZPOS64_T)i)<<56; + + if (err==UNZ_OK) + *pX = x; + else + *pX = 0; + return err; +} /* My own strcmpi / strcasecmp */ -local int strcmpcasenosensitive_internal (fileName1,fileName2) - const char* fileName1; - const char* fileName2; +local int strcmpcasenosensitive_internal (const char* fileName1, const char* fileName2) { for (;;) { @@ -302,10 +387,10 @@ local int strcmpcasenosensitive_internal (fileName1,fileName2) (like 1 on Unix, 2 on Windows) */ -extern int ZEXPORT unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivity) - const char* fileName1; - const char* fileName2; - int iCaseSensitivity; +extern int ZEXPORT unzStringFileNameCompare (const char* fileName1, + const char* fileName2, + int iCaseSensitivity) + { if (iCaseSensitivity==0) iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE; @@ -324,25 +409,20 @@ extern int ZEXPORT unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivit Locate the Central directory of a zipfile (at the end, just before the global comment) */ -local uLong unzlocal_SearchCentralDir OF(( - const zlib_filefunc_def* pzlib_filefunc_def, - voidpf filestream)); - -local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream) - const zlib_filefunc_def* pzlib_filefunc_def; - voidpf filestream; +local ZPOS64_T unz64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)); +local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) { unsigned char* buf; - uLong uSizeFile; - uLong uBackRead; - uLong uMaxBack=0xffff; /* maximum size of global comment */ - uLong uPosFound=0; + ZPOS64_T uSizeFile; + ZPOS64_T uBackRead; + ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ + ZPOS64_T uPosFound=0; - if (ZSEEK(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) return 0; - uSizeFile = ZTELL(*pzlib_filefunc_def,filestream); + uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); if (uMaxBack>uSizeFile) uMaxBack = uSizeFile; @@ -354,7 +434,8 @@ local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream) uBackRead = 4; while (uBackRead<uMaxBack) { - uLong uReadSize,uReadPos ; + uLong uReadSize; + ZPOS64_T uReadPos ; int i; if (uBackRead+BUFREADCOMMENT>uMaxBack) uBackRead = uMaxBack; @@ -363,11 +444,11 @@ local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream) uReadPos = uSizeFile-uBackRead ; uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? - (BUFREADCOMMENT+4) : (uSizeFile-uReadPos); - if (ZSEEK(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) break; - if (ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) break; for (i=(int)uReadSize-3; (i--)>0;) @@ -385,6 +466,112 @@ local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream) return uPosFound; } + +/* + Locate the Central directory 64 of a zipfile (at the end, just before + the global comment) +*/ +local ZPOS64_T unz64local_SearchCentralDir64 OF(( + const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream)); + +local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream) +{ + unsigned char* buf; + ZPOS64_T uSizeFile; + ZPOS64_T uBackRead; + ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ + ZPOS64_T uPosFound=0; + uLong uL; + ZPOS64_T relativeOffset; + + if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + return 0; + + + uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); + + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return 0; + + uBackRead = 4; + while (uBackRead<uMaxBack) + { + uLong uReadSize; + ZPOS64_T uReadPos; + int i; + if (uBackRead+BUFREADCOMMENT>uMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + break; + + if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + break; + + for (i=(int)uReadSize-3; (i--)>0;) + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && + ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07)) + { + uPosFound = uReadPos+i; + break; + } + + if (uPosFound!=0) + break; + } + TRYFREE(buf); + if (uPosFound == 0) + return 0; + + /* Zip64 end of central directory locator */ + if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0) + return 0; + + /* the signature, already checked */ + if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK) + return 0; + + /* number of the disk with the start of the zip64 end of central directory */ + if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK) + return 0; + if (uL != 0) + return 0; + + /* relative offset of the zip64 end of central directory record */ + if (unz64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=UNZ_OK) + return 0; + + /* total number of disks */ + if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK) + return 0; + if (uL != 1) + return 0; + + /* Goto end of central directory record */ + if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0) + return 0; + + /* the signature */ + if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK) + return 0; + + if (uL != 0x06064b50) + return 0; + + return relativeOffset; +} + /* Open a Zip file. path contain the full pathname (by example, on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer @@ -394,19 +581,20 @@ local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream) Else, the return value is a unzFile Handle, usable with other function of this unzip package. */ -extern unzFile ZEXPORT unzOpen2 (path, pzlib_filefunc_def) - const char *path; - zlib_filefunc_def* pzlib_filefunc_def; +local unzFile unzOpenInternal (const void *path, + zlib_filefunc64_32_def* pzlib_filefunc64_32_def, + int is64bitOpenFunction) { - unz_s us; - unz_s *s; - uLong central_pos,uL; + unz64_s us; + unz64_s *s; + ZPOS64_T central_pos; + uLong uL; uLong number_disk; /* number of the current dist, used for spaning ZIP, unsupported, always 0*/ uLong number_disk_with_CD; /* number the the disk with central dir, used for spaning ZIP, unsupported, always 0*/ - uLong number_entry_CD; /* total number of entries in + ZPOS64_T number_entry_CD; /* total number of entries in the central dir (same than number_entry on nospan) */ @@ -415,63 +603,137 @@ extern unzFile ZEXPORT unzOpen2 (path, pzlib_filefunc_def) if (unz_copyright[0]!=' ') return NULL; - if (pzlib_filefunc_def==NULL) - fill_fopen_filefunc(&us.z_filefunc); + us.z_filefunc.zseek32_file = NULL; + us.z_filefunc.ztell32_file = NULL; + if (pzlib_filefunc64_32_def==NULL) + fill_fopen64_filefunc(&us.z_filefunc.zfile_func64); else - us.z_filefunc = *pzlib_filefunc_def; + us.z_filefunc = *pzlib_filefunc64_32_def; + us.is64bitOpenFunction = is64bitOpenFunction; - us.filestream= (*(us.z_filefunc.zopen_file))(us.z_filefunc.opaque, + + + us.filestream = ZOPEN64(us.z_filefunc, path, ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_EXISTING); if (us.filestream==NULL) return NULL; - central_pos = unzlocal_SearchCentralDir(&us.z_filefunc,us.filestream); - if (central_pos==0) - err=UNZ_ERRNO; + central_pos = unz64local_SearchCentralDir64(&us.z_filefunc,us.filestream); + if (central_pos) + { + uLong uS; + ZPOS64_T uL64; + + us.isZip64 = 1; - if (ZSEEK(us.z_filefunc, us.filestream, + if (ZSEEK64(us.z_filefunc, us.filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) err=UNZ_ERRNO; - /* the signature, already checked */ - if (unzlocal_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) - err=UNZ_ERRNO; + /* the signature, already checked */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; - /* number of this disk */ - if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK) - err=UNZ_ERRNO; + /* size of zip64 end of central directory record */ + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&uL64)!=UNZ_OK) + err=UNZ_ERRNO; - /* number of the disk with the start of the central directory */ - if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK) - err=UNZ_ERRNO; + /* version made by */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK) + err=UNZ_ERRNO; - /* total number of entries in the central dir on this disk */ - if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK) - err=UNZ_ERRNO; + /* version needed to extract */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK) + err=UNZ_ERRNO; - /* total number of entries in the central dir */ - if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK) - err=UNZ_ERRNO; + /* number of this disk */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK) + err=UNZ_ERRNO; - if ((number_entry_CD!=us.gi.number_entry) || - (number_disk_with_CD!=0) || - (number_disk!=0)) - err=UNZ_BADZIPFILE; + /* number of the disk with the start of the central directory */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK) + err=UNZ_ERRNO; - /* size of the central directory */ - if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK) - err=UNZ_ERRNO; + /* total number of entries in the central directory on this disk */ + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central directory */ + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK) + err=UNZ_ERRNO; - /* offset of start of central directory with respect to the + if ((number_entry_CD!=us.gi.number_entry) || + (number_disk_with_CD!=0) || + (number_disk!=0)) + err=UNZ_BADZIPFILE; + + /* size of the central directory */ + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK) + err=UNZ_ERRNO; + + /* offset of start of central directory with respect to the starting disk number */ - if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK) - err=UNZ_ERRNO; + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK) + err=UNZ_ERRNO; - /* zipfile comment length */ - if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK) - err=UNZ_ERRNO; + us.gi.size_comment = 0; + } + else + { + central_pos = unz64local_SearchCentralDir(&us.z_filefunc,us.filestream); + if (central_pos==0) + err=UNZ_ERRNO; + + us.isZip64 = 0; + + if (ZSEEK64(us.z_filefunc, us.filestream, + central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) + err=UNZ_ERRNO; + + /* the signature, already checked */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of this disk */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of the disk with the start of the central directory */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central dir on this disk */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + us.gi.number_entry = uL; + + /* total number of entries in the central dir */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + number_entry_CD = uL; + + if ((number_entry_CD!=us.gi.number_entry) || + (number_disk_with_CD!=0) || + (number_disk!=0)) + err=UNZ_BADZIPFILE; + + /* size of the central directory */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + us.size_central_dir = uL; + + /* offset of start of central directory with respect to the + starting disk number */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + us.offset_central_dir = uL; + + /* zipfile comment length */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK) + err=UNZ_ERRNO; + } if ((central_pos<us.offset_central_dir+us.size_central_dir) && (err==UNZ_OK)) @@ -479,7 +741,7 @@ extern unzFile ZEXPORT unzOpen2 (path, pzlib_filefunc_def) if (err!=UNZ_OK) { - ZCLOSE(us.z_filefunc, us.filestream); + ZCLOSE64(us.z_filefunc, us.filestream); return NULL; } @@ -490,17 +752,52 @@ extern unzFile ZEXPORT unzOpen2 (path, pzlib_filefunc_def) us.encrypted = 0; - s=(unz_s*)ALLOC(sizeof(unz_s)); - *s=us; - unzGoToFirstFile((unzFile)s); + s=(unz64_s*)ALLOC(sizeof(unz64_s)); + if( s != NULL) + { + *s=us; + unzGoToFirstFile((unzFile)s); + } return (unzFile)s; } -extern unzFile ZEXPORT unzOpen (path) - const char *path; +extern unzFile ZEXPORT unzOpen2 (const char *path, + zlib_filefunc_def* pzlib_filefunc32_def) { - return unzOpen2(path, NULL); + if (pzlib_filefunc32_def != NULL) + { + zlib_filefunc64_32_def zlib_filefunc64_32_def_fill; + fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def); + return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 0); + } + else + return unzOpenInternal(path, NULL, 0); +} + +extern unzFile ZEXPORT unzOpen2_64 (const void *path, + zlib_filefunc64_def* pzlib_filefunc_def) +{ + if (pzlib_filefunc_def != NULL) + { + zlib_filefunc64_32_def zlib_filefunc64_32_def_fill; + zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def; + zlib_filefunc64_32_def_fill.ztell32_file = NULL; + zlib_filefunc64_32_def_fill.zseek32_file = NULL; + return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 1); + } + else + return unzOpenInternal(path, NULL, 1); +} + +extern unzFile ZEXPORT unzOpen (const char *path) +{ + return unzOpenInternal(path, NULL, 0); +} + +extern unzFile ZEXPORT unzOpen64 (const void *path) +{ + return unzOpenInternal(path, NULL, 1); } /* @@ -508,18 +805,17 @@ extern unzFile ZEXPORT unzOpen (path) If there is files inside the .Zip opened with unzipOpenCurrentFile (see later), these files MUST be closed with unzipCloseCurrentFile before call unzipClose. return UNZ_OK if there is no problem. */ -extern int ZEXPORT unzClose (file) - unzFile file; +extern int ZEXPORT unzClose (unzFile file) { - unz_s* s; + unz64_s* s; if (file==NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s=(unz64_s*)file; if (s->pfile_in_zip_read!=NULL) unzCloseCurrentFile(file); - ZCLOSE(s->z_filefunc, s->filestream); + ZCLOSE64(s->z_filefunc, s->filestream); TRYFREE(s); return UNZ_OK; } @@ -529,28 +825,34 @@ extern int ZEXPORT unzClose (file) Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed return UNZ_OK if there is no problem. */ -extern int ZEXPORT unzGetGlobalInfo (file,pglobal_info) - unzFile file; - unz_global_info *pglobal_info; +extern int ZEXPORT unzGetGlobalInfo64 (unzFile file, unz_global_info64* pglobal_info) { - unz_s* s; + unz64_s* s; if (file==NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s=(unz64_s*)file; *pglobal_info=s->gi; return UNZ_OK; } - +extern int ZEXPORT unzGetGlobalInfo (unzFile file, unz_global_info* pglobal_info32) +{ + unz64_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + /* to do : check if number_entry is not truncated */ + pglobal_info32->number_entry = (uLong)s->gi.number_entry; + pglobal_info32->size_comment = s->gi.size_comment; + return UNZ_OK; +} /* Translate date/time from Dos format to tm_unz (readable more easilty) */ -local void unzlocal_DosDateToTmuDate (ulDosDate, ptm) - uLong ulDosDate; - tm_unz* ptm; +local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm) { - uLong uDate; - uDate = (uLong)(ulDosDate>>16); + ZPOS64_T uDate; + uDate = (ZPOS64_T)(ulDosDate>>16); ptm->tm_mday = (uInt)(uDate&0x1f) ; ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ; ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ; @@ -563,9 +865,9 @@ local void unzlocal_DosDateToTmuDate (ulDosDate, ptm) /* Get Info about the current file in the zipfile, with internal only info */ -local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file, - unz_file_info *pfile_info, - unz_file_info_internal +local int unz64local_GetCurrentFileInfoInternal OF((unzFile file, + unz_file_info64 *pfile_info, + unz_file_info64_internal *pfile_info_internal, char *szFileName, uLong fileNameBufferSize, @@ -574,33 +876,29 @@ local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file, char *szComment, uLong commentBufferSize)); -local int unzlocal_GetCurrentFileInfoInternal (file, - pfile_info, - pfile_info_internal, - szFileName, fileNameBufferSize, - extraField, extraFieldBufferSize, - szComment, commentBufferSize) - unzFile file; - unz_file_info *pfile_info; - unz_file_info_internal *pfile_info_internal; - char *szFileName; - uLong fileNameBufferSize; - void *extraField; - uLong extraFieldBufferSize; - char *szComment; - uLong commentBufferSize; +local int unz64local_GetCurrentFileInfoInternal (unzFile file, + unz_file_info64 *pfile_info, + unz_file_info64_internal + *pfile_info_internal, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize) { - unz_s* s; - unz_file_info file_info; - unz_file_info_internal file_info_internal; + unz64_s* s; + unz_file_info64 file_info; + unz_file_info64_internal file_info_internal; int err=UNZ_OK; uLong uMagic; long lSeek=0; + uLong uL; if (file==NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; - if (ZSEEK(s->z_filefunc, s->filestream, + s=(unz64_s*)file; + if (ZSEEK64(s->z_filefunc, s->filestream, s->pos_in_central_dir+s->byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET)!=0) err=UNZ_ERRNO; @@ -608,57 +906,63 @@ local int unzlocal_GetCurrentFileInfoInternal (file, /* we check the magic */ if (err==UNZ_OK) - if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) + { + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) err=UNZ_ERRNO; else if (uMagic!=0x02014b50) err=UNZ_BADZIPFILE; + } - if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK) + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK) err=UNZ_ERRNO; - if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK) + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK) err=UNZ_ERRNO; - if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK) + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK) err=UNZ_ERRNO; - if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK) + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK) err=UNZ_ERRNO; - if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK) + if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK) err=UNZ_ERRNO; - unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date); + unz64local_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date); - if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK) + if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK) err=UNZ_ERRNO; - if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK) + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) err=UNZ_ERRNO; + file_info.compressed_size = uL; - if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK) + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) err=UNZ_ERRNO; + file_info.uncompressed_size = uL; - if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK) + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK) err=UNZ_ERRNO; - if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK) + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK) err=UNZ_ERRNO; - if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK) + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK) err=UNZ_ERRNO; - if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK) + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK) err=UNZ_ERRNO; - if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK) + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK) err=UNZ_ERRNO; - if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK) + if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK) err=UNZ_ERRNO; - if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK) + // relative offset of local header + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) err=UNZ_ERRNO; + file_info_internal.offset_curfile = uL; lSeek+=file_info.size_filename; if ((err==UNZ_OK) && (szFileName!=NULL)) @@ -673,33 +977,105 @@ local int unzlocal_GetCurrentFileInfoInternal (file, uSizeRead = fileNameBufferSize; if ((file_info.size_filename>0) && (fileNameBufferSize>0)) - if (ZREAD(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead) + if (ZREAD64(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead) err=UNZ_ERRNO; lSeek -= uSizeRead; } - + // Read extrafield if ((err==UNZ_OK) && (extraField!=NULL)) { - uLong uSizeRead ; + ZPOS64_T uSizeRead ; if (file_info.size_file_extra<extraFieldBufferSize) uSizeRead = file_info.size_file_extra; else uSizeRead = extraFieldBufferSize; if (lSeek!=0) - if (ZSEEK(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + { + if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) lSeek=0; else err=UNZ_ERRNO; + } + if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) - if (ZREAD(s->z_filefunc, s->filestream,extraField,uSizeRead)!=uSizeRead) + if (ZREAD64(s->z_filefunc, s->filestream,extraField,(uLong)uSizeRead)!=uSizeRead) err=UNZ_ERRNO; - lSeek += file_info.size_file_extra - uSizeRead; + + lSeek += file_info.size_file_extra - (uLong)uSizeRead; } else - lSeek+=file_info.size_file_extra; + lSeek += file_info.size_file_extra; + + + if ((err==UNZ_OK) && (file_info.size_file_extra != 0)) + { + uLong acc = 0; + + // since lSeek now points to after the extra field we need to move back + lSeek -= file_info.size_file_extra; + + if (lSeek!=0) + { + if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + } + while(acc < file_info.size_file_extra) + { + uLong headerId; + uLong dataSize; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&headerId) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&dataSize) != UNZ_OK) + err=UNZ_ERRNO; + + /* ZIP64 extra fields */ + if (headerId == 0x0001) + { + uLong uL; + + if(file_info.uncompressed_size == (ZPOS64_T)(unsigned long)-1) + { + if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK) + err=UNZ_ERRNO; + } + + if(file_info.compressed_size == (ZPOS64_T)(unsigned long)-1) + { + if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK) + err=UNZ_ERRNO; + } + + if(file_info_internal.offset_curfile == (ZPOS64_T)(unsigned long)-1) + { + /* Relative Header offset */ + if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK) + err=UNZ_ERRNO; + } + + if(file_info.disk_num_start == (unsigned long)-1) + { + /* Disk Start Number */ + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) + err=UNZ_ERRNO; + } + + } + else + { + if (ZSEEK64(s->z_filefunc, s->filestream,dataSize,ZLIB_FILEFUNC_SEEK_CUR)!=0) + err=UNZ_ERRNO; + } + + acc += 2 + 2 + dataSize; + } + } if ((err==UNZ_OK) && (szComment!=NULL)) { @@ -713,18 +1089,22 @@ local int unzlocal_GetCurrentFileInfoInternal (file, uSizeRead = commentBufferSize; if (lSeek!=0) - if (ZSEEK(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + { + if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) lSeek=0; else err=UNZ_ERRNO; + } + if ((file_info.size_file_comment>0) && (commentBufferSize>0)) - if (ZREAD(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead) + if (ZREAD64(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead) err=UNZ_ERRNO; lSeek+=file_info.size_file_comment - uSizeRead; } else lSeek+=file_info.size_file_comment; + if ((err==UNZ_OK) && (pfile_info!=NULL)) *pfile_info=file_info; @@ -741,41 +1121,70 @@ local int unzlocal_GetCurrentFileInfoInternal (file, No preparation of the structure is needed return UNZ_OK if there is no problem. */ -extern int ZEXPORT unzGetCurrentFileInfo (file, - pfile_info, - szFileName, fileNameBufferSize, - extraField, extraFieldBufferSize, - szComment, commentBufferSize) - unzFile file; - unz_file_info *pfile_info; - char *szFileName; - uLong fileNameBufferSize; - void *extraField; - uLong extraFieldBufferSize; - char *szComment; - uLong commentBufferSize; +extern int ZEXPORT unzGetCurrentFileInfo64 (unzFile file, + unz_file_info64 * pfile_info, + char * szFileName, uLong fileNameBufferSize, + void *extraField, uLong extraFieldBufferSize, + char* szComment, uLong commentBufferSize) { - return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL, + return unz64local_GetCurrentFileInfoInternal(file,pfile_info,NULL, szFileName,fileNameBufferSize, extraField,extraFieldBufferSize, szComment,commentBufferSize); } +extern int ZEXPORT unzGetCurrentFileInfo (unzFile file, + unz_file_info * pfile_info, + char * szFileName, uLong fileNameBufferSize, + void *extraField, uLong extraFieldBufferSize, + char* szComment, uLong commentBufferSize) +{ + int err; + unz_file_info64 file_info64; + err = unz64local_GetCurrentFileInfoInternal(file,&file_info64,NULL, + szFileName,fileNameBufferSize, + extraField,extraFieldBufferSize, + szComment,commentBufferSize); + if (err==UNZ_OK) + { + pfile_info->version = file_info64.version; + pfile_info->version_needed = file_info64.version_needed; + pfile_info->flag = file_info64.flag; + pfile_info->compression_method = file_info64.compression_method; + pfile_info->dosDate = file_info64.dosDate; + pfile_info->crc = file_info64.crc; + + pfile_info->size_filename = file_info64.size_filename; + pfile_info->size_file_extra = file_info64.size_file_extra; + pfile_info->size_file_comment = file_info64.size_file_comment; + + pfile_info->disk_num_start = file_info64.disk_num_start; + pfile_info->internal_fa = file_info64.internal_fa; + pfile_info->external_fa = file_info64.external_fa; + + pfile_info->tmu_date = file_info64.tmu_date, + + + pfile_info->compressed_size = (uLong)file_info64.compressed_size; + pfile_info->uncompressed_size = (uLong)file_info64.uncompressed_size; + + } + return err; +} /* Set the current file of the zipfile to the first file. return UNZ_OK if there is no problem */ -extern int ZEXPORT unzGoToFirstFile (file) - unzFile file; +extern int ZEXPORT unzGoToFirstFile (unzFile file) { int err=UNZ_OK; - unz_s* s; + unz64_s* s; if (file==NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s=(unz64_s*)file; s->pos_in_central_dir=s->offset_central_dir; s->num_file=0; - err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + err=unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, &s->cur_file_info_internal, NULL,0,NULL,0,NULL,0); s->current_file_ok = (err == UNZ_OK); @@ -787,15 +1196,14 @@ extern int ZEXPORT unzGoToFirstFile (file) return UNZ_OK if there is no problem return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. */ -extern int ZEXPORT unzGoToNextFile (file) - unzFile file; +extern int ZEXPORT unzGoToNextFile (unzFile file) { - unz_s* s; + unz64_s* s; int err; if (file==NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s=(unz64_s*)file; if (!s->current_file_ok) return UNZ_END_OF_LIST_OF_FILE; if (s->gi.number_entry != 0xffff) /* 2^16 files overflow hack */ @@ -805,7 +1213,7 @@ extern int ZEXPORT unzGoToNextFile (file) s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename + s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ; s->num_file++; - err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, &s->cur_file_info_internal, NULL,0,NULL,0,NULL,0); s->current_file_ok = (err == UNZ_OK); @@ -821,21 +1229,18 @@ extern int ZEXPORT unzGoToNextFile (file) UNZ_OK if the file is found. It becomes the current file. UNZ_END_OF_LIST_OF_FILE if the file is not found */ -extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity) - unzFile file; - const char *szFileName; - int iCaseSensitivity; +extern int ZEXPORT unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity) { - unz_s* s; + unz64_s* s; int err; /* We remember the 'current' position in the file so that we can jump * back there if we fail. */ - unz_file_info cur_file_infoSaved; - unz_file_info_internal cur_file_info_internalSaved; - uLong num_fileSaved; - uLong pos_in_central_dirSaved; + unz_file_info64 cur_file_infoSaved; + unz_file_info64_internal cur_file_info_internalSaved; + ZPOS64_T num_fileSaved; + ZPOS64_T pos_in_central_dirSaved; if (file==NULL) @@ -844,7 +1249,7 @@ extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity) if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP) return UNZ_PARAMERROR; - s=(unz_s*)file; + s=(unz64_s*)file; if (!s->current_file_ok) return UNZ_END_OF_LIST_OF_FILE; @@ -859,7 +1264,7 @@ extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity) while (err == UNZ_OK) { char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1]; - err = unzGetCurrentFileInfo(file,NULL, + err = unzGetCurrentFileInfo64(file,NULL, szCurrentFileName,sizeof(szCurrentFileName)-1, NULL,0,NULL,0); if (err == UNZ_OK) @@ -895,20 +1300,18 @@ extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity) /* typedef struct unz_file_pos_s { - uLong pos_in_zip_directory; // offset in file - uLong num_of_file; // # of file + ZPOS64_T pos_in_zip_directory; // offset in file + ZPOS64_T num_of_file; // # of file } unz_file_pos; */ -extern int ZEXPORT unzGetFilePos(file, file_pos) - unzFile file; - unz_file_pos* file_pos; +extern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos* file_pos) { - unz_s* s; + unz64_s* s; if (file==NULL || file_pos==NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s=(unz64_s*)file; if (!s->current_file_ok) return UNZ_END_OF_LIST_OF_FILE; @@ -918,23 +1321,35 @@ extern int ZEXPORT unzGetFilePos(file, file_pos) return UNZ_OK; } -extern int ZEXPORT unzGoToFilePos(file, file_pos) - unzFile file; - unz_file_pos* file_pos; +extern int ZEXPORT unzGetFilePos( + unzFile file, + unz_file_pos* file_pos) +{ + unz64_file_pos file_pos64; + int err = unzGetFilePos64(file,&file_pos64); + if (err==UNZ_OK) + { + file_pos->pos_in_zip_directory = (uLong)file_pos64.pos_in_zip_directory; + file_pos->num_of_file = (uLong)file_pos64.num_of_file; + } + return err; +} + +extern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos) { - unz_s* s; + unz64_s* s; int err; if (file==NULL || file_pos==NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s=(unz64_s*)file; /* jump to the right spot */ s->pos_in_central_dir = file_pos->pos_in_zip_directory; s->num_file = file_pos->num_of_file; /* set the current file */ - err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, &s->cur_file_info_internal, NULL,0,NULL,0,NULL,0); /* return results */ @@ -942,6 +1357,19 @@ extern int ZEXPORT unzGoToFilePos(file, file_pos) return err; } +extern int ZEXPORT unzGoToFilePos( + unzFile file, + unz_file_pos* file_pos) +{ + unz64_file_pos file_pos64; + if (file_pos == NULL) + return UNZ_PARAMERROR; + + file_pos64.pos_in_zip_directory = file_pos->pos_in_zip_directory; + file_pos64.num_of_file = file_pos->num_of_file; + return unzGoToFilePos64(file,&file_pos64); +} + /* // Unzip Helper Functions - should be here? /////////////////////////////////////////// @@ -954,13 +1382,9 @@ extern int ZEXPORT unzGoToFilePos(file, file_pos) store in *piSizeVar the size of extra info in local header (filename and size of extra field data) */ -local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar, - poffset_local_extrafield, - psize_local_extrafield) - unz_s* s; - uInt* piSizeVar; - uLong *poffset_local_extrafield; - uInt *psize_local_extrafield; +local int unz64local_CheckCurrentFileCoherencyHeader (unz64_s* s, uInt* piSizeVar, + ZPOS64_T * poffset_local_extrafield, + uInt * psize_local_extrafield) { uLong uMagic,uData,uFlags; uLong size_filename; @@ -971,65 +1395,66 @@ local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar, *poffset_local_extrafield = 0; *psize_local_extrafield = 0; - if (ZSEEK(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile + + if (ZSEEK64(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile + s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0) return UNZ_ERRNO; if (err==UNZ_OK) - if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) + { + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) err=UNZ_ERRNO; else if (uMagic!=0x04034b50) err=UNZ_BADZIPFILE; + } - if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) + if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) err=UNZ_ERRNO; /* else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) err=UNZ_BADZIPFILE; */ - if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK) + if (unz64local_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK) err=UNZ_ERRNO; - if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) + if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) err=UNZ_ERRNO; else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method)) err=UNZ_BADZIPFILE; if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) && +/* #ifdef HAVE_BZIP2 */ + (s->cur_file_info.compression_method!=Z_BZIP2ED) && +/* #endif */ (s->cur_file_info.compression_method!=Z_DEFLATED)) err=UNZ_BADZIPFILE; - if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */ + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */ err=UNZ_ERRNO; - if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */ + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */ err=UNZ_ERRNO; - else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && - ((uFlags & 8)==0)) + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && ((uFlags & 8)==0)) err=UNZ_BADZIPFILE; - if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */ + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */ err=UNZ_ERRNO; - else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && - ((uFlags & 8)==0)) + else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && ((uFlags & 8)==0)) err=UNZ_BADZIPFILE; - if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */ + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */ err=UNZ_ERRNO; - else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && - ((uFlags & 8)==0)) + else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && ((uFlags & 8)==0)) err=UNZ_BADZIPFILE; - - if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK) + if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK) err=UNZ_ERRNO; else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename)) err=UNZ_BADZIPFILE; *piSizeVar += (uInt)size_filename; - if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK) + if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK) err=UNZ_ERRNO; *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + size_filename; @@ -1044,18 +1469,14 @@ local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar, Open for reading data the current file in the zipfile. If there is no error and the file is opened, the return value is UNZ_OK. */ -extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password) - unzFile file; - int* method; - int* level; - int raw; - const char* password; +extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method, + int* level, int raw, const char* password) { int err=UNZ_OK; uInt iSizeVar; - unz_s* s; - file_in_zip_read_info_s* pfile_in_zip_read_info; - uLong offset_local_extrafield; /* offset of the local extra field */ + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + ZPOS64_T offset_local_extrafield; /* offset of the local extra field */ uInt size_local_extrafield; /* size of the local extra field */ # ifndef NOUNCRYPT char source[12]; @@ -1066,19 +1487,17 @@ extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password) if (file==NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s=(unz64_s*)file; if (!s->current_file_ok) return UNZ_PARAMERROR; if (s->pfile_in_zip_read != NULL) unzCloseCurrentFile(file); - if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar, - &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) + if (unz64local_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) return UNZ_BADZIPFILE; - pfile_in_zip_read_info = (file_in_zip_read_info_s*) - ALLOC(sizeof(file_in_zip_read_info_s)); + pfile_in_zip_read_info = (file_in_zip64_read_info_s*)ALLOC(sizeof(file_in_zip64_read_info_s)); if (pfile_in_zip_read_info==NULL) return UNZ_INTERNALERROR; @@ -1111,31 +1530,60 @@ extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password) } if ((s->cur_file_info.compression_method!=0) && +/* #ifdef HAVE_BZIP2 */ + (s->cur_file_info.compression_method!=Z_BZIP2ED) && +/* #endif */ (s->cur_file_info.compression_method!=Z_DEFLATED)) + err=UNZ_BADZIPFILE; pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc; pfile_in_zip_read_info->crc32=0; - pfile_in_zip_read_info->compression_method = - s->cur_file_info.compression_method; + pfile_in_zip_read_info->total_out_64=0; + pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method; pfile_in_zip_read_info->filestream=s->filestream; pfile_in_zip_read_info->z_filefunc=s->z_filefunc; pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile; pfile_in_zip_read_info->stream.total_out = 0; - if ((s->cur_file_info.compression_method==Z_DEFLATED) && - (!raw)) + if ((s->cur_file_info.compression_method==Z_BZIP2ED) && (!raw)) { +#ifdef HAVE_BZIP2 + pfile_in_zip_read_info->bstream.bzalloc = (void *(*) (void *, int, int))0; + pfile_in_zip_read_info->bstream.bzfree = (free_func)0; + pfile_in_zip_read_info->bstream.opaque = (voidpf)0; + pfile_in_zip_read_info->bstream.state = (voidpf)0; + pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; pfile_in_zip_read_info->stream.zfree = (free_func)0; pfile_in_zip_read_info->stream.opaque = (voidpf)0; pfile_in_zip_read_info->stream.next_in = (voidpf)0; pfile_in_zip_read_info->stream.avail_in = 0; + err=BZ2_bzDecompressInit(&pfile_in_zip_read_info->bstream, 0, 0); + if (err == Z_OK) + pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED; + else + { + TRYFREE(pfile_in_zip_read_info); + return err; + } +#else + pfile_in_zip_read_info->raw=1; +#endif + } + else if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw)) + { + pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; + pfile_in_zip_read_info->stream.zfree = (free_func)0; + pfile_in_zip_read_info->stream.opaque = (voidpf)0; + pfile_in_zip_read_info->stream.next_in = 0; + pfile_in_zip_read_info->stream.avail_in = 0; + err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); if (err == Z_OK) - pfile_in_zip_read_info->stream_initialised=1; + pfile_in_zip_read_info->stream_initialised=Z_DEFLATED; else { TRYFREE(pfile_in_zip_read_info); @@ -1162,6 +1610,7 @@ extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password) pfile_in_zip_read_info->stream.avail_in = (uInt)0; s->pfile_in_zip_read = pfile_in_zip_read_info; + s->encrypted = 0; # ifndef NOUNCRYPT if (password != NULL) @@ -1169,12 +1618,12 @@ extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password) int i; s->pcrc_32_tab = get_crc_table(); init_keys(password,s->keys,s->pcrc_32_tab); - if (ZSEEK(s->z_filefunc, s->filestream, + if (ZSEEK64(s->z_filefunc, s->filestream, s->pfile_in_zip_read->pos_in_zipfile + s->pfile_in_zip_read->byte_before_the_zipfile, SEEK_SET)!=0) return UNZ_INTERNALERROR; - if(ZREAD(s->z_filefunc, s->filestream,source, 12)<12) + if(ZREAD64(s->z_filefunc, s->filestream,source, 12)<12) return UNZ_INTERNALERROR; for (i = 0; i<12; i++) @@ -1189,28 +1638,39 @@ extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password) return UNZ_OK; } -extern int ZEXPORT unzOpenCurrentFile (file) - unzFile file; +extern int ZEXPORT unzOpenCurrentFile (unzFile file) { return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL); } -extern int ZEXPORT unzOpenCurrentFilePassword (file, password) - unzFile file; - const char* password; +extern int ZEXPORT unzOpenCurrentFilePassword (unzFile file, const char* password) { return unzOpenCurrentFile3(file, NULL, NULL, 0, password); } -extern int ZEXPORT unzOpenCurrentFile2 (file,method,level,raw) - unzFile file; - int* method; - int* level; - int raw; +extern int ZEXPORT unzOpenCurrentFile2 (unzFile file, int* method, int* level, int raw) { return unzOpenCurrentFile3(file, method, level, raw, NULL); } +/** Addition for GDAL : START */ + +extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64( unzFile file) +{ + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + s=(unz64_s*)file; + if (file==NULL) + return 0; //UNZ_PARAMERROR; + pfile_in_zip_read_info=s->pfile_in_zip_read; + if (pfile_in_zip_read_info==NULL) + return 0; //UNZ_PARAMERROR; + return pfile_in_zip_read_info->pos_in_zipfile + + pfile_in_zip_read_info->byte_before_the_zipfile; +} + +/** Addition for GDAL : END */ + /* Read bytes from the current file. buf contain buffer where data must be copied @@ -1221,18 +1681,15 @@ extern int ZEXPORT unzOpenCurrentFile2 (file,method,level,raw) return <0 with error code if there is an error (UNZ_ERRNO for IO error, or zLib error for uncompress error) */ -extern int ZEXPORT unzReadCurrentFile (file, buf, len) - unzFile file; - voidp buf; - unsigned len; +extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len) { int err=UNZ_OK; uInt iRead = 0; - unz_s* s; - file_in_zip_read_info_s* pfile_in_zip_read_info; + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s=(unz64_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) @@ -1270,13 +1727,13 @@ extern int ZEXPORT unzReadCurrentFile (file, buf, len) uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed; if (uReadThis == 0) return UNZ_EOF; - if (ZSEEK(pfile_in_zip_read_info->z_filefunc, + if (ZSEEK64(pfile_in_zip_read_info->z_filefunc, pfile_in_zip_read_info->filestream, pfile_in_zip_read_info->pos_in_zipfile + pfile_in_zip_read_info->byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET)!=0) return UNZ_ERRNO; - if (ZREAD(pfile_in_zip_read_info->z_filefunc, + if (ZREAD64(pfile_in_zip_read_info->z_filefunc, pfile_in_zip_read_info->filestream, pfile_in_zip_read_info->read_buffer, uReadThis)!=uReadThis) @@ -1322,6 +1779,8 @@ extern int ZEXPORT unzReadCurrentFile (file, buf, len) *(pfile_in_zip_read_info->stream.next_out+i) = *(pfile_in_zip_read_info->stream.next_in+i); + pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uDoCopy; + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, pfile_in_zip_read_info->stream.next_out, uDoCopy); @@ -1333,11 +1792,54 @@ extern int ZEXPORT unzReadCurrentFile (file, buf, len) pfile_in_zip_read_info->stream.total_out += uDoCopy; iRead += uDoCopy; } - else + else if (pfile_in_zip_read_info->compression_method==Z_BZIP2ED) { +#ifdef HAVE_BZIP2 uLong uTotalOutBefore,uTotalOutAfter; const Bytef *bufBefore; uLong uOutThis; + + pfile_in_zip_read_info->bstream.next_in = (char*)pfile_in_zip_read_info->stream.next_in; + pfile_in_zip_read_info->bstream.avail_in = pfile_in_zip_read_info->stream.avail_in; + pfile_in_zip_read_info->bstream.total_in_lo32 = pfile_in_zip_read_info->stream.total_in; + pfile_in_zip_read_info->bstream.total_in_hi32 = 0; + pfile_in_zip_read_info->bstream.next_out = (char*)pfile_in_zip_read_info->stream.next_out; + pfile_in_zip_read_info->bstream.avail_out = pfile_in_zip_read_info->stream.avail_out; + pfile_in_zip_read_info->bstream.total_out_lo32 = pfile_in_zip_read_info->stream.total_out; + pfile_in_zip_read_info->bstream.total_out_hi32 = 0; + + uTotalOutBefore = pfile_in_zip_read_info->bstream.total_out_lo32; + bufBefore = (const Bytef *)pfile_in_zip_read_info->bstream.next_out; + + err=BZ2_bzDecompress(&pfile_in_zip_read_info->bstream); + + uTotalOutAfter = pfile_in_zip_read_info->bstream.total_out_lo32; + uOutThis = uTotalOutAfter-uTotalOutBefore; + + pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis; + + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis)); + pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis; + iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); + + pfile_in_zip_read_info->stream.next_in = (Bytef*)pfile_in_zip_read_info->bstream.next_in; + pfile_in_zip_read_info->stream.avail_in = pfile_in_zip_read_info->bstream.avail_in; + pfile_in_zip_read_info->stream.total_in = pfile_in_zip_read_info->bstream.total_in_lo32; + pfile_in_zip_read_info->stream.next_out = (Bytef*)pfile_in_zip_read_info->bstream.next_out; + pfile_in_zip_read_info->stream.avail_out = pfile_in_zip_read_info->bstream.avail_out; + pfile_in_zip_read_info->stream.total_out = pfile_in_zip_read_info->bstream.total_out_lo32; + + if (err==BZ_STREAM_END) + return (iRead==0) ? UNZ_EOF : iRead; + if (err!=BZ_OK) + break; +#endif + } // end Z_BZIP2ED + else + { + ZPOS64_T uTotalOutBefore,uTotalOutAfter; + const Bytef *bufBefore; + ZPOS64_T uOutThis; int flush=Z_SYNC_FLUSH; uTotalOutBefore = pfile_in_zip_read_info->stream.total_out; @@ -1357,6 +1859,8 @@ extern int ZEXPORT unzReadCurrentFile (file, buf, len) uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; uOutThis = uTotalOutAfter-uTotalOutBefore; + pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis; + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis)); @@ -1382,14 +1886,13 @@ extern int ZEXPORT unzReadCurrentFile (file, buf, len) /* Give the current position in uncompressed data */ -extern z_off_t ZEXPORT unztell (file) - unzFile file; +extern z_off_t ZEXPORT unztell (unzFile file) { - unz_s* s; - file_in_zip_read_info_s* pfile_in_zip_read_info; + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s=(unz64_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) @@ -1398,18 +1901,33 @@ extern z_off_t ZEXPORT unztell (file) return (z_off_t)pfile_in_zip_read_info->stream.total_out; } +extern ZPOS64_T ZEXPORT unztell64 (unzFile file) +{ + + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return (ZPOS64_T)-1; + s=(unz64_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return (ZPOS64_T)-1; + + return pfile_in_zip_read_info->total_out_64; +} + /* return 1 if the end of file was reached, 0 elsewhere */ -extern int ZEXPORT unzeof (file) - unzFile file; +extern int ZEXPORT unzeof (unzFile file) { - unz_s* s; - file_in_zip_read_info_s* pfile_in_zip_read_info; + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s=(unz64_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) @@ -1424,9 +1942,9 @@ extern int ZEXPORT unzeof (file) /* - Read extra field from the current file (opened by unzOpenCurrentFile) - This is the local-header version of the extra field (sometimes, there is - more info in the local-header version than in the central-header) +Read extra field from the current file (opened by unzOpenCurrentFile) +This is the local-header version of the extra field (sometimes, there is +more info in the local-header version than in the central-header) if buf==NULL, it return the size of the local extra field that can be read @@ -1435,19 +1953,16 @@ extern int ZEXPORT unzeof (file) the return value is the number of bytes copied in buf, or (if <0) the error code */ -extern int ZEXPORT unzGetLocalExtrafield (file,buf,len) - unzFile file; - voidp buf; - unsigned len; +extern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len) { - unz_s* s; - file_in_zip_read_info_s* pfile_in_zip_read_info; + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; uInt read_now; - uLong size_to_read; + ZPOS64_T size_to_read; if (file==NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s=(unz64_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) @@ -1467,14 +1982,14 @@ extern int ZEXPORT unzGetLocalExtrafield (file,buf,len) if (read_now==0) return 0; - if (ZSEEK(pfile_in_zip_read_info->z_filefunc, + if (ZSEEK64(pfile_in_zip_read_info->z_filefunc, pfile_in_zip_read_info->filestream, pfile_in_zip_read_info->offset_local_extrafield + pfile_in_zip_read_info->pos_local_extrafield, ZLIB_FILEFUNC_SEEK_SET)!=0) return UNZ_ERRNO; - if (ZREAD(pfile_in_zip_read_info->z_filefunc, + if (ZREAD64(pfile_in_zip_read_info->z_filefunc, pfile_in_zip_read_info->filestream, buf,read_now)!=read_now) return UNZ_ERRNO; @@ -1486,16 +2001,15 @@ extern int ZEXPORT unzGetLocalExtrafield (file,buf,len) Close the file in zip opened with unzipOpenCurrentFile Return UNZ_CRCERROR if all the file was read but the CRC is not good */ -extern int ZEXPORT unzCloseCurrentFile (file) - unzFile file; +extern int ZEXPORT unzCloseCurrentFile (unzFile file) { int err=UNZ_OK; - unz_s* s; - file_in_zip_read_info_s* pfile_in_zip_read_info; + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s=(unz64_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) @@ -1512,8 +2026,13 @@ extern int ZEXPORT unzCloseCurrentFile (file) TRYFREE(pfile_in_zip_read_info->read_buffer); pfile_in_zip_read_info->read_buffer = NULL; - if (pfile_in_zip_read_info->stream_initialised) + if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED) inflateEnd(&pfile_in_zip_read_info->stream); +#ifdef HAVE_BZIP2 + else if (pfile_in_zip_read_info->stream_initialised == Z_BZIP2ED) + BZ2_bzDecompressEnd(&pfile_in_zip_read_info->bstream); +#endif + pfile_in_zip_read_info->stream_initialised = 0; TRYFREE(pfile_in_zip_read_info); @@ -1529,29 +2048,25 @@ extern int ZEXPORT unzCloseCurrentFile (file) uSizeBuf is the size of the szComment buffer. return the number of byte copied or an error code <0 */ -extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf) - unzFile file; - char *szComment; - uLong uSizeBuf; +extern int ZEXPORT unzGetGlobalComment (unzFile file, char * szComment, uLong uSizeBuf) { - int err=UNZ_OK; - unz_s* s; + unz64_s* s; uLong uReadThis ; if (file==NULL) - return UNZ_PARAMERROR; - s=(unz_s*)file; + return (int)UNZ_PARAMERROR; + s=(unz64_s*)file; uReadThis = uSizeBuf; if (uReadThis>s->gi.size_comment) uReadThis = s->gi.size_comment; - if (ZSEEK(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0) + if (ZSEEK64(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0) return UNZ_ERRNO; if (uReadThis>0) { *szComment='\0'; - if (ZREAD(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis) + if (ZREAD64(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis) return UNZ_ERRNO; } @@ -1561,14 +2076,13 @@ extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf) } /* Additions by RX '2004 */ -extern uLong ZEXPORT unzGetOffset (file) - unzFile file; +extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file) { - unz_s* s; + unz64_s* s; if (file==NULL) - return UNZ_PARAMERROR; - s=(unz_s*)file; + return 0; //UNZ_PARAMERROR; + s=(unz64_s*)file; if (!s->current_file_ok) return 0; if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff) @@ -1577,22 +2091,35 @@ extern uLong ZEXPORT unzGetOffset (file) return s->pos_in_central_dir; } -extern int ZEXPORT unzSetOffset (file, pos) - unzFile file; - uLong pos; +extern uLong ZEXPORT unzGetOffset (unzFile file) +{ + ZPOS64_T offset64; + + if (file==NULL) + return 0; //UNZ_PARAMERROR; + offset64 = unzGetOffset64(file); + return (uLong)offset64; +} + +extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos) { - unz_s* s; + unz64_s* s; int err; if (file==NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s=(unz64_s*)file; s->pos_in_central_dir = pos; s->num_file = s->gi.number_entry; /* hack */ - err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, &s->cur_file_info_internal, NULL,0,NULL,0,NULL,0); s->current_file_ok = (err == UNZ_OK); return err; } + +extern int ZEXPORT unzSetOffset (unzFile file, uLong pos) +{ + return unzSetOffset64(file,pos); +} diff --git a/zlib/contrib/minizip/unzip.h b/zlib/contrib/minizip/unzip.h index b247937c807..3183968b771 100644 --- a/zlib/contrib/minizip/unzip.h +++ b/zlib/contrib/minizip/unzip.h @@ -1,20 +1,20 @@ /* unzip.h -- IO for uncompress .zip files using zlib - Version 1.01e, February 12th, 2005 + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) - Copyright (C) 1998-2005 Gilles Vollant + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g - WinZip, InfoZip tools and compatible. + Modifications of Unzip for Zip64 + Copyright (C) 2007-2008 Even Rouault - Multi volume ZipFile (span) are not supported. - Encryption compatible with pkzip 2.04g only supported - Old compressions used by old PKZip 1.x are not supported + Modifications for Zip64 support on both zip and unzip + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + For more info read MiniZip_info.txt - I WAIT FEEDBACK at mail info@winimage.com - Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution + --------------------------------------------------------------------------------- - Condition of use and distribution are the same than zlib : + Condition of use and distribution are the same than zlib : This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -32,18 +32,16 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. + --------------------------------------------------------------------------------- -*/ + Changes + + See header of unzip64.c -/* for more info about .ZIP format, see - http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip - http://www.info-zip.org/pub/infozip/doc/ - PkWare has also a specification at : - ftp://ftp.pkware.com/probdesc.zip */ -#ifndef _unz_H -#define _unz_H +#ifndef _unz64_H +#define _unz64_H #ifdef __cplusplus extern "C" { @@ -53,10 +51,16 @@ extern "C" { #include "zlib.h" #endif -#ifndef _ZLIBIOAPI_H +#ifndef _ZLIBIOAPI_H #include "ioapi.h" #endif +#ifdef HAVE_BZIP2 +#include "bzlib.h" +#endif + +#define Z_BZIP2ED 12 + #if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) /* like the STRICT of WIN32, we define a pointer that cannot be converted from (void*) without cast */ @@ -89,15 +93,42 @@ typedef struct tm_unz_s /* unz_global_info structure contain global data about the ZIPfile These data comes from the end of central dir */ +typedef struct unz_global_info64_s +{ + ZPOS64_T number_entry; /* total number of entries in + the central dir on this disk */ + uLong size_comment; /* size of the global comment of the zipfile */ +} unz_global_info64; + typedef struct unz_global_info_s { uLong number_entry; /* total number of entries in - the central dir on this disk */ + the central dir on this disk */ uLong size_comment; /* size of the global comment of the zipfile */ } unz_global_info; - /* unz_file_info contain information about a file in the zipfile */ +typedef struct unz_file_info64_s +{ + uLong version; /* version made by 2 bytes */ + uLong version_needed; /* version needed to extract 2 bytes */ + uLong flag; /* general purpose bit flag 2 bytes */ + uLong compression_method; /* compression method 2 bytes */ + uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ + uLong crc; /* crc-32 4 bytes */ + ZPOS64_T compressed_size; /* compressed size 8 bytes */ + ZPOS64_T uncompressed_size; /* uncompressed size 8 bytes */ + uLong size_filename; /* filename length 2 bytes */ + uLong size_file_extra; /* extra field length 2 bytes */ + uLong size_file_comment; /* file comment length 2 bytes */ + + uLong disk_num_start; /* disk number start 2 bytes */ + uLong internal_fa; /* internal file attributes 2 bytes */ + uLong external_fa; /* external file attributes 4 bytes */ + + tm_unz tmu_date; +} unz_file_info64; + typedef struct unz_file_info_s { uLong version; /* version made by 2 bytes */ @@ -133,6 +164,7 @@ extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1, extern unzFile ZEXPORT unzOpen OF((const char *path)); +extern unzFile ZEXPORT unzOpen64 OF((const void *path)); /* Open a Zip file. path contain the full pathname (by example, on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer @@ -141,8 +173,14 @@ extern unzFile ZEXPORT unzOpen OF((const char *path)); return value is NULL. Else, the return value is a unzFile Handle, usable with other function of this unzip package. + the "64" function take a const void* pointer, because the path is just the + value passed to the open64_file_func callback. + Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path + is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char* + does not describe the reality */ + extern unzFile ZEXPORT unzOpen2 OF((const char *path, zlib_filefunc_def* pzlib_filefunc_def)); /* @@ -150,6 +188,13 @@ extern unzFile ZEXPORT unzOpen2 OF((const char *path, for read/write the zip file (see ioapi.h) */ +extern unzFile ZEXPORT unzOpen2_64 OF((const void *path, + zlib_filefunc64_def* pzlib_filefunc_def)); +/* + Open a Zip file, like unz64Open, but provide a set of file low level API + for read/write the zip file (see ioapi.h) +*/ + extern int ZEXPORT unzClose OF((unzFile file)); /* Close a ZipFile opened with unzipOpen. @@ -159,6 +204,9 @@ extern int ZEXPORT unzClose OF((unzFile file)); extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, unz_global_info *pglobal_info)); + +extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file, + unz_global_info64 *pglobal_info)); /* Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed @@ -221,8 +269,31 @@ extern int ZEXPORT unzGoToFilePos( unzFile file, unz_file_pos* file_pos); +typedef struct unz64_file_pos_s +{ + ZPOS64_T pos_in_zip_directory; /* offset in zip file directory */ + ZPOS64_T num_of_file; /* # of file */ +} unz64_file_pos; + +extern int ZEXPORT unzGetFilePos64( + unzFile file, + unz64_file_pos* file_pos); + +extern int ZEXPORT unzGoToFilePos64( + unzFile file, + const unz64_file_pos* file_pos); + /* ****************************************** */ +extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file, + unz_file_info64 *pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); + extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, unz_file_info *pfile_info, char *szFileName, @@ -244,6 +315,14 @@ extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, (commentBufferSize is the size of the buffer) */ + +/** Addition for GDAL : START */ + +extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file)); + +/** Addition for GDAL : END */ + + /***************************************************************************/ /* for reading the content of the current zipfile, you can open it, read data from it, and close it (you can close it before reading all the file) @@ -312,6 +391,8 @@ extern int ZEXPORT unzReadCurrentFile OF((unzFile file, */ extern z_off_t ZEXPORT unztell OF((unzFile file)); + +extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file)); /* Give the current position in uncompressed data */ @@ -340,9 +421,11 @@ extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file, /***************************************************************************/ /* Get the current file offset */ +extern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file); extern uLong ZEXPORT unzGetOffset (unzFile file); /* Set the current file offset */ +extern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos); extern int ZEXPORT unzSetOffset (unzFile file, uLong pos); @@ -351,4 +434,4 @@ extern int ZEXPORT unzSetOffset (unzFile file, uLong pos); } #endif -#endif /* _unz_H */ +#endif /* _unz64_H */ diff --git a/zlib/contrib/minizip/zip.c b/zlib/contrib/minizip/zip.c index 7fbe0027437..3c34fc8bd49 100644 --- a/zlib/contrib/minizip/zip.c +++ b/zlib/contrib/minizip/zip.c @@ -1,12 +1,24 @@ /* zip.c -- IO on .zip files using zlib - Version 1.01e, February 12th, 2005 + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) - 27 Dec 2004 Rolf Kalbermatter - Modification to zipOpen2 to support globalComment retrieval. + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - Copyright (C) 1998-2005 Gilles Vollant + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + Changes + Oct-2009 - Mathias Svensson - Remove old C style function prototypes + Oct-2009 - Mathias Svensson - Added Zip64 Support when creating new file archives + Oct-2009 - Mathias Svensson - Did some code cleanup and refactoring to get better overview of some functions. + Oct-2009 - Mathias Svensson - Added zipRemoveExtraInfoBlock to strip extra field data from its ZIP64 data + It is used when recreting zip archive with RAW when deleting items from a zip. + ZIP64 data is automaticly added to items that needs it, and existing ZIP64 data need to be removed. + Oct-2009 - Mathias Svensson - Added support for BZIP2 as compression mode (bzip2 lib is required) + Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer - Read zip.h for more info */ @@ -39,7 +51,7 @@ #endif #ifndef Z_BUFSIZE -#define Z_BUFSIZE (16384) +#define Z_BUFSIZE (64*1024) //(16384) #endif #ifndef Z_MAXFILENAMEINZIP @@ -60,6 +72,10 @@ /* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */ + +// NOT sure that this work on ALL platform +#define MAKEULONG64(a, b) ((ZPOS64_T)(((unsigned long)(a)) | ((ZPOS64_T)((unsigned long)(b))) << 32)) + #ifndef SEEK_CUR #define SEEK_CUR 1 #endif @@ -79,8 +95,7 @@ # define DEF_MEM_LEVEL MAX_MEM_LEVEL #endif #endif -const char zip_copyright[] = - " zip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll"; +const char zip_copyright[] =" zip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll"; #define SIZEDATA_INDATABLOCK (4096-(4*4)) @@ -88,6 +103,8 @@ const char zip_copyright[] = #define LOCALHEADERMAGIC (0x04034b50) #define CENTRALHEADERMAGIC (0x02014b50) #define ENDHEADERMAGIC (0x06054b50) +#define ZIP64ENDHEADERMAGIC (0x6064b50) +#define ZIP64ENDLOCHEADERMAGIC (0x7064b50) #define FLAG_LOCALHEADER_OFFSET (0x06) #define CRC_LOCALHEADER_OFFSET (0x0e) @@ -113,13 +130,19 @@ typedef struct linkedlist_data_s typedef struct { z_stream stream; /* zLib stream structure for inflate */ +#ifdef HAVE_BZIP2 + bz_stream bstream; /* bzLib stream structure for bziped */ +#endif + int stream_initialised; /* 1 is stream is initialised */ uInt pos_in_buffered_data; /* last written byte in buffered_data */ - uLong pos_local_header; /* offset of the local header of the file + ZPOS64_T pos_local_header; /* offset of the local header of the file currenty writing */ char* central_header; /* central header data for the current file */ + uLong size_centralExtra; uLong size_centralheader; /* size of the central header for cur file */ + uLong size_centralExtraFree; /* Extra bytes allocated to the centralheader but that are not used */ uLong flag; /* flag of the file currently writing */ int method; /* compression method of file currenty wr.*/ @@ -128,29 +151,34 @@ typedef struct uLong dosDate; uLong crc32; int encrypt; + int zip64; /* Add ZIP64 extened information in the extra field */ + ZPOS64_T pos_zip64extrainfo; + ZPOS64_T totalCompressedData; + ZPOS64_T totalUncompressedData; #ifndef NOCRYPT unsigned long keys[3]; /* keys defining the pseudo-random sequence */ const unsigned long* pcrc_32_tab; int crypt_header_size; #endif -} curfile_info; +} curfile64_info; typedef struct { - zlib_filefunc_def z_filefunc; + zlib_filefunc64_32_def z_filefunc; voidpf filestream; /* io structore of the zipfile */ linkedlist_data central_dir;/* datablock with central dir in construction*/ int in_opened_file_inzip; /* 1 if a file in the zip is currently writ.*/ - curfile_info ci; /* info on the file curretly writing */ + curfile64_info ci; /* info on the file curretly writing */ + + ZPOS64_T begin_pos; /* position of the beginning of the zipfile */ + ZPOS64_T add_position_when_writting_offset; + ZPOS64_T number_entry; - uLong begin_pos; /* position of the beginning of the zipfile */ - uLong add_position_when_writting_offset; - uLong number_entry; #ifndef NO_ADDFILEINEXISTINGZIP char *globalcomment; #endif -} zip_internal; +} zip64_internal; #ifndef NOCRYPT @@ -172,8 +200,7 @@ local linkedlist_datablock_internal* allocate_new_datablock() return ldi; } -local void free_datablock(ldi) - linkedlist_datablock_internal* ldi; +local void free_datablock(linkedlist_datablock_internal* ldi) { while (ldi!=NULL) { @@ -183,24 +210,19 @@ local void free_datablock(ldi) } } -local void init_linkedlist(ll) - linkedlist_data* ll; +local void init_linkedlist(linkedlist_data* ll) { ll->first_block = ll->last_block = NULL; } -local void free_linkedlist(ll) - linkedlist_data* ll; +local void free_linkedlist(linkedlist_data* ll) { free_datablock(ll->first_block); ll->first_block = ll->last_block = NULL; } -local int add_data_in_datablock(ll,buf,len) - linkedlist_data* ll; - const void* buf; - uLong len; +local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len) { linkedlist_datablock_internal* ldi; const unsigned char* from_copy; @@ -258,18 +280,13 @@ local int add_data_in_datablock(ll,buf,len) #ifndef NO_ADDFILEINEXISTINGZIP /* =========================================================================== Inputs a long in LSB order to the given file - nbByte == 1, 2 or 4 (byte, short or long) + nbByte == 1, 2 ,4 or 8 (byte, short or long, ZPOS64_T) */ -local int ziplocal_putValue OF((const zlib_filefunc_def* pzlib_filefunc_def, - voidpf filestream, uLong x, int nbByte)); -local int ziplocal_putValue (pzlib_filefunc_def, filestream, x, nbByte) - const zlib_filefunc_def* pzlib_filefunc_def; - voidpf filestream; - uLong x; - int nbByte; +local int zip64local_putValue OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte)); +local int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte) { - unsigned char buf[4]; + unsigned char buf[8]; int n; for (n = 0; n < nbByte; n++) { @@ -284,17 +301,14 @@ local int ziplocal_putValue (pzlib_filefunc_def, filestream, x, nbByte) } } - if (ZWRITE(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte) + if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte) return ZIP_ERRNO; else return ZIP_OK; } -local void ziplocal_putValue_inmemory OF((void* dest, uLong x, int nbByte)); -local void ziplocal_putValue_inmemory (dest, x, nbByte) - void* dest; - uLong x; - int nbByte; +local void zip64local_putValue_inmemory OF((void* dest, ZPOS64_T x, int nbByte)); +local void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte) { unsigned char* buf=(unsigned char*)dest; int n; @@ -315,14 +329,12 @@ local void ziplocal_putValue_inmemory (dest, x, nbByte) /****************************************************************************/ -local uLong ziplocal_TmzDateToDosDate(ptm,dosDate) - const tm_zip* ptm; - uLong dosDate; +local uLong zip64local_TmzDateToDosDate(const tm_zip* ptm) { uLong year = (uLong)ptm->tm_year; - if (year>1980) + if (year>=1980) year-=1980; - else if (year>80) + else if (year>=80) year-=80; return (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) | @@ -332,18 +344,12 @@ local uLong ziplocal_TmzDateToDosDate(ptm,dosDate) /****************************************************************************/ -local int ziplocal_getByte OF(( - const zlib_filefunc_def* pzlib_filefunc_def, - voidpf filestream, - int *pi)); +local int zip64local_getByte OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi)); -local int ziplocal_getByte(pzlib_filefunc_def,filestream,pi) - const zlib_filefunc_def* pzlib_filefunc_def; - voidpf filestream; - int *pi; +local int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def,voidpf filestream,int* pi) { unsigned char c; - int err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1); + int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1); if (err==1) { *pi = (int)c; @@ -351,7 +357,7 @@ local int ziplocal_getByte(pzlib_filefunc_def,filestream,pi) } else { - if (ZERROR(*pzlib_filefunc_def,filestream)) + if (ZERROR64(*pzlib_filefunc_def,filestream)) return ZIP_ERRNO; else return ZIP_EOF; @@ -362,25 +368,19 @@ local int ziplocal_getByte(pzlib_filefunc_def,filestream,pi) /* =========================================================================== Reads a long in LSB order from the given gz_stream. Sets */ -local int ziplocal_getShort OF(( - const zlib_filefunc_def* pzlib_filefunc_def, - voidpf filestream, - uLong *pX)); - -local int ziplocal_getShort (pzlib_filefunc_def,filestream,pX) - const zlib_filefunc_def* pzlib_filefunc_def; - voidpf filestream; - uLong *pX; +local int zip64local_getShort OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX)); + +local int zip64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX) { uLong x ; - int i; + int i = 0; int err; - err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i); + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); x = (uLong)i; if (err==ZIP_OK) - err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i); + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); x += ((uLong)i)<<8; if (err==ZIP_OK) @@ -390,33 +390,27 @@ local int ziplocal_getShort (pzlib_filefunc_def,filestream,pX) return err; } -local int ziplocal_getLong OF(( - const zlib_filefunc_def* pzlib_filefunc_def, - voidpf filestream, - uLong *pX)); +local int zip64local_getLong OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX)); -local int ziplocal_getLong (pzlib_filefunc_def,filestream,pX) - const zlib_filefunc_def* pzlib_filefunc_def; - voidpf filestream; - uLong *pX; +local int zip64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX) { uLong x ; - int i; + int i = 0; int err; - err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i); + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); x = (uLong)i; if (err==ZIP_OK) - err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i); + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); x += ((uLong)i)<<8; if (err==ZIP_OK) - err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i); + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); x += ((uLong)i)<<16; if (err==ZIP_OK) - err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i); + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); x += ((uLong)i)<<24; if (err==ZIP_OK) @@ -426,6 +420,54 @@ local int ziplocal_getLong (pzlib_filefunc_def,filestream,pX) return err; } +local int zip64local_getLong64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX)); + + +local int zip64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX) +{ + ZPOS64_T x; + int i = 0; + int err; + + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x = (ZPOS64_T)i; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<8; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<16; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<24; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<32; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<40; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<48; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<56; + + if (err==ZIP_OK) + *pX = x; + else + *pX = 0; + + return err; +} + #ifndef BUFREADCOMMENT #define BUFREADCOMMENT (0x400) #endif @@ -433,87 +475,391 @@ local int ziplocal_getLong (pzlib_filefunc_def,filestream,pX) Locate the Central directory of a zipfile (at the end, just before the global comment) */ -local uLong ziplocal_SearchCentralDir OF(( - const zlib_filefunc_def* pzlib_filefunc_def, - voidpf filestream)); +local ZPOS64_T zip64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)); -local uLong ziplocal_SearchCentralDir(pzlib_filefunc_def,filestream) - const zlib_filefunc_def* pzlib_filefunc_def; - voidpf filestream; +local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) { - unsigned char* buf; - uLong uSizeFile; - uLong uBackRead; - uLong uMaxBack=0xffff; /* maximum size of global comment */ - uLong uPosFound=0; + unsigned char* buf; + ZPOS64_T uSizeFile; + ZPOS64_T uBackRead; + ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ + ZPOS64_T uPosFound=0; + + if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + return 0; - if (ZSEEK(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) - return 0; + uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); - uSizeFile = ZTELL(*pzlib_filefunc_def,filestream); + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; - if (uMaxBack>uSizeFile) - uMaxBack = uSizeFile; + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return 0; - buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); - if (buf==NULL) - return 0; + uBackRead = 4; + while (uBackRead<uMaxBack) + { + uLong uReadSize; + ZPOS64_T uReadPos ; + int i; + if (uBackRead+BUFREADCOMMENT>uMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + break; + + if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + break; + + for (i=(int)uReadSize-3; (i--)>0;) + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && + ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) + { + uPosFound = uReadPos+i; + break; + } + + if (uPosFound!=0) + break; + } + TRYFREE(buf); + return uPosFound; +} - uBackRead = 4; - while (uBackRead<uMaxBack) +/* +Locate the End of Zip64 Central directory locator and from there find the CD of a zipfile (at the end, just before +the global comment) +*/ +local ZPOS64_T zip64local_SearchCentralDir64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)); + +local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) +{ + unsigned char* buf; + ZPOS64_T uSizeFile; + ZPOS64_T uBackRead; + ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ + ZPOS64_T uPosFound=0; + uLong uL; + ZPOS64_T relativeOffset; + + if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + return 0; + + uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); + + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return 0; + + uBackRead = 4; + while (uBackRead<uMaxBack) + { + uLong uReadSize; + ZPOS64_T uReadPos; + int i; + if (uBackRead+BUFREADCOMMENT>uMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + break; + + if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + break; + + for (i=(int)uReadSize-3; (i--)>0;) { - uLong uReadSize,uReadPos ; - int i; - if (uBackRead+BUFREADCOMMENT>uMaxBack) - uBackRead = uMaxBack; - else - uBackRead+=BUFREADCOMMENT; - uReadPos = uSizeFile-uBackRead ; + // Signature "0x07064b50" Zip64 end of central directory locater + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07)) + { + uPosFound = uReadPos+i; + break; + } + } - uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? - (BUFREADCOMMENT+4) : (uSizeFile-uReadPos); - if (ZSEEK(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) - break; + if (uPosFound!=0) + break; + } - if (ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) - break; + TRYFREE(buf); + if (uPosFound == 0) + return 0; - for (i=(int)uReadSize-3; (i--)>0;) - if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && - ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) - { - uPosFound = uReadPos+i; - break; - } + /* Zip64 end of central directory locator */ + if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0) + return 0; + + /* the signature, already checked */ + if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK) + return 0; + + /* number of the disk with the start of the zip64 end of central directory */ + if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK) + return 0; + if (uL != 0) + return 0; + + /* relative offset of the zip64 end of central directory record */ + if (zip64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=ZIP_OK) + return 0; + + /* total number of disks */ + if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK) + return 0; + if (uL != 1) + return 0; - if (uPosFound!=0) - break; + /* Goto Zip64 end of central directory record */ + if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0) + return 0; + + /* the signature */ + if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK) + return 0; + + if (uL != 0x06064b50) // signature of 'Zip64 end of central directory' + return 0; + + return relativeOffset; +} + +int LoadCentralDirectoryRecord(zip64_internal* pziinit) +{ + int err=ZIP_OK; + ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + + ZPOS64_T size_central_dir; /* size of the central directory */ + ZPOS64_T offset_central_dir; /* offset of start of central directory */ + ZPOS64_T central_pos; + uLong uL; + + uLong number_disk; /* number of the current dist, used for + spaning ZIP, unsupported, always 0*/ + uLong number_disk_with_CD; /* number the the disk with central dir, used + for spaning ZIP, unsupported, always 0*/ + ZPOS64_T number_entry; + ZPOS64_T number_entry_CD; /* total number of entries in + the central dir + (same than number_entry on nospan) */ + uLong VersionMadeBy; + uLong VersionNeeded; + uLong size_comment; + + int hasZIP64Record = 0; + + // check first if we find a ZIP64 record + central_pos = zip64local_SearchCentralDir64(&pziinit->z_filefunc,pziinit->filestream); + if(central_pos > 0) + { + hasZIP64Record = 1; + } + else if(central_pos == 0) + { + central_pos = zip64local_SearchCentralDir(&pziinit->z_filefunc,pziinit->filestream); + } + +/* disable to allow appending to empty ZIP archive + if (central_pos==0) + err=ZIP_ERRNO; +*/ + + if(hasZIP64Record) + { + ZPOS64_T sizeEndOfCentralDirectory; + if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos, ZLIB_FILEFUNC_SEEK_SET) != 0) + err=ZIP_ERRNO; + + /* the signature, already checked */ + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK) + err=ZIP_ERRNO; + + /* size of zip64 end of central directory record */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &sizeEndOfCentralDirectory)!=ZIP_OK) + err=ZIP_ERRNO; + + /* version made by */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionMadeBy)!=ZIP_OK) + err=ZIP_ERRNO; + + /* version needed to extract */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionNeeded)!=ZIP_OK) + err=ZIP_ERRNO; + + /* number of this disk */ + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK) + err=ZIP_ERRNO; + + /* number of the disk with the start of the central directory */ + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK) + err=ZIP_ERRNO; + + /* total number of entries in the central directory on this disk */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &number_entry)!=ZIP_OK) + err=ZIP_ERRNO; + + /* total number of entries in the central directory */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&number_entry_CD)!=ZIP_OK) + err=ZIP_ERRNO; + + if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0)) + err=ZIP_BADZIPFILE; + + /* size of the central directory */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&size_central_dir)!=ZIP_OK) + err=ZIP_ERRNO; + + /* offset of start of central directory with respect to the + starting disk number */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&offset_central_dir)!=ZIP_OK) + err=ZIP_ERRNO; + + // TODO.. + // read the comment from the standard central header. + size_comment = 0; + } + else + { + // Read End of central Directory info + if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) + err=ZIP_ERRNO; + + /* the signature, already checked */ + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK) + err=ZIP_ERRNO; + + /* number of this disk */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK) + err=ZIP_ERRNO; + + /* number of the disk with the start of the central directory */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK) + err=ZIP_ERRNO; + + /* total number of entries in the central dir on this disk */ + number_entry = 0; + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + err=ZIP_ERRNO; + else + number_entry = uL; + + /* total number of entries in the central dir */ + number_entry_CD = 0; + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + err=ZIP_ERRNO; + else + number_entry_CD = uL; + + if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0)) + err=ZIP_BADZIPFILE; + + /* size of the central directory */ + size_central_dir = 0; + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + err=ZIP_ERRNO; + else + size_central_dir = uL; + + /* offset of start of central directory with respect to the starting disk number */ + offset_central_dir = 0; + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + err=ZIP_ERRNO; + else + offset_central_dir = uL; + + + /* zipfile global comment length */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &size_comment)!=ZIP_OK) + err=ZIP_ERRNO; + } + + if ((central_pos<offset_central_dir+size_central_dir) && + (err==ZIP_OK)) + err=ZIP_BADZIPFILE; + + if (err!=ZIP_OK) + { + ZCLOSE64(pziinit->z_filefunc, pziinit->filestream); + return ZIP_ERRNO; + } + + if (size_comment>0) + { + pziinit->globalcomment = (char*)ALLOC(size_comment+1); + if (pziinit->globalcomment) + { + size_comment = ZREAD64(pziinit->z_filefunc, pziinit->filestream, pziinit->globalcomment,size_comment); + pziinit->globalcomment[size_comment]=0; } - TRYFREE(buf); - return uPosFound; + } + + byte_before_the_zipfile = central_pos - (offset_central_dir+size_central_dir); + pziinit->add_position_when_writting_offset = byte_before_the_zipfile; + + { + ZPOS64_T size_central_dir_to_read = size_central_dir; + size_t buf_size = SIZEDATA_INDATABLOCK; + void* buf_read = (void*)ALLOC(buf_size); + if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir + byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET) != 0) + err=ZIP_ERRNO; + + while ((size_central_dir_to_read>0) && (err==ZIP_OK)) + { + ZPOS64_T read_this = SIZEDATA_INDATABLOCK; + if (read_this > size_central_dir_to_read) + read_this = size_central_dir_to_read; + + if (ZREAD64(pziinit->z_filefunc, pziinit->filestream,buf_read,(uLong)read_this) != read_this) + err=ZIP_ERRNO; + + if (err==ZIP_OK) + err = add_data_in_datablock(&pziinit->central_dir,buf_read, (uLong)read_this); + + size_central_dir_to_read-=read_this; + } + TRYFREE(buf_read); + } + pziinit->begin_pos = byte_before_the_zipfile; + pziinit->number_entry = number_entry_CD; + + if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir+byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET) != 0) + err=ZIP_ERRNO; + + return err; } + + #endif /* !NO_ADDFILEINEXISTINGZIP*/ + /************************************************************/ -extern zipFile ZEXPORT zipOpen2 (pathname, append, globalcomment, pzlib_filefunc_def) - const char *pathname; - int append; - zipcharpc* globalcomment; - zlib_filefunc_def* pzlib_filefunc_def; +extern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def) { - zip_internal ziinit; - zip_internal* zi; + zip64_internal ziinit; + zip64_internal* zi; int err=ZIP_OK; - - if (pzlib_filefunc_def==NULL) - fill_fopen_filefunc(&ziinit.z_filefunc); + ziinit.z_filefunc.zseek32_file = NULL; + ziinit.z_filefunc.ztell32_file = NULL; + if (pzlib_filefunc64_32_def==NULL) + fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64); else - ziinit.z_filefunc = *pzlib_filefunc_def; + ziinit.z_filefunc = *pzlib_filefunc64_32_def; - ziinit.filestream = (*(ziinit.z_filefunc.zopen_file)) - (ziinit.z_filefunc.opaque, + ziinit.filestream = ZOPEN64(ziinit.z_filefunc, pathname, (append == APPEND_STATUS_CREATE) ? (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) : @@ -521,7 +867,11 @@ extern zipFile ZEXPORT zipOpen2 (pathname, append, globalcomment, pzlib_filefunc if (ziinit.filestream == NULL) return NULL; - ziinit.begin_pos = ZTELL(ziinit.z_filefunc,ziinit.filestream); + + if (append == APPEND_STATUS_CREATEAFTER) + ZSEEK64(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END); + + ziinit.begin_pos = ZTELL64(ziinit.z_filefunc,ziinit.filestream); ziinit.in_opened_file_inzip = 0; ziinit.ci.stream_initialised = 0; ziinit.number_entry = 0; @@ -529,10 +879,11 @@ extern zipFile ZEXPORT zipOpen2 (pathname, append, globalcomment, pzlib_filefunc init_linkedlist(&(ziinit.central_dir)); - zi = (zip_internal*)ALLOC(sizeof(zip_internal)); + + zi = (zip64_internal*)ALLOC(sizeof(zip64_internal)); if (zi==NULL) { - ZCLOSE(ziinit.z_filefunc,ziinit.filestream); + ZCLOSE64(ziinit.z_filefunc,ziinit.filestream); return NULL; } @@ -541,122 +892,8 @@ extern zipFile ZEXPORT zipOpen2 (pathname, append, globalcomment, pzlib_filefunc ziinit.globalcomment = NULL; if (append == APPEND_STATUS_ADDINZIP) { - uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ - - uLong size_central_dir; /* size of the central directory */ - uLong offset_central_dir; /* offset of start of central directory */ - uLong central_pos,uL; - - uLong number_disk; /* number of the current dist, used for - spaning ZIP, unsupported, always 0*/ - uLong number_disk_with_CD; /* number the the disk with central dir, used - for spaning ZIP, unsupported, always 0*/ - uLong number_entry; - uLong number_entry_CD; /* total number of entries in - the central dir - (same than number_entry on nospan) */ - uLong size_comment; - - central_pos = ziplocal_SearchCentralDir(&ziinit.z_filefunc,ziinit.filestream); - if (central_pos==0) - err=ZIP_ERRNO; - - if (ZSEEK(ziinit.z_filefunc, ziinit.filestream, - central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) - err=ZIP_ERRNO; - - /* the signature, already checked */ - if (ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&uL)!=ZIP_OK) - err=ZIP_ERRNO; - - /* number of this disk */ - if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_disk)!=ZIP_OK) - err=ZIP_ERRNO; - - /* number of the disk with the start of the central directory */ - if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_disk_with_CD)!=ZIP_OK) - err=ZIP_ERRNO; - - /* total number of entries in the central dir on this disk */ - if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_entry)!=ZIP_OK) - err=ZIP_ERRNO; - - /* total number of entries in the central dir */ - if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_entry_CD)!=ZIP_OK) - err=ZIP_ERRNO; - - if ((number_entry_CD!=number_entry) || - (number_disk_with_CD!=0) || - (number_disk!=0)) - err=ZIP_BADZIPFILE; - - /* size of the central directory */ - if (ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&size_central_dir)!=ZIP_OK) - err=ZIP_ERRNO; - - /* offset of start of central directory with respect to the - starting disk number */ - if (ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&offset_central_dir)!=ZIP_OK) - err=ZIP_ERRNO; - - /* zipfile global comment length */ - if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&size_comment)!=ZIP_OK) - err=ZIP_ERRNO; - - if ((central_pos<offset_central_dir+size_central_dir) && - (err==ZIP_OK)) - err=ZIP_BADZIPFILE; - - if (err!=ZIP_OK) - { - ZCLOSE(ziinit.z_filefunc, ziinit.filestream); - return NULL; - } - - if (size_comment>0) - { - ziinit.globalcomment = ALLOC(size_comment+1); - if (ziinit.globalcomment) - { - size_comment = ZREAD(ziinit.z_filefunc, ziinit.filestream,ziinit.globalcomment,size_comment); - ziinit.globalcomment[size_comment]=0; - } - } - - byte_before_the_zipfile = central_pos - - (offset_central_dir+size_central_dir); - ziinit.add_position_when_writting_offset = byte_before_the_zipfile; - - { - uLong size_central_dir_to_read = size_central_dir; - size_t buf_size = SIZEDATA_INDATABLOCK; - void* buf_read = (void*)ALLOC(buf_size); - if (ZSEEK(ziinit.z_filefunc, ziinit.filestream, - offset_central_dir + byte_before_the_zipfile, - ZLIB_FILEFUNC_SEEK_SET) != 0) - err=ZIP_ERRNO; - - while ((size_central_dir_to_read>0) && (err==ZIP_OK)) - { - uLong read_this = SIZEDATA_INDATABLOCK; - if (read_this > size_central_dir_to_read) - read_this = size_central_dir_to_read; - if (ZREAD(ziinit.z_filefunc, ziinit.filestream,buf_read,read_this) != read_this) - err=ZIP_ERRNO; - - if (err==ZIP_OK) - err = add_data_in_datablock(&ziinit.central_dir,buf_read, - (uLong)read_this); - size_central_dir_to_read-=read_this; - } - TRYFREE(buf_read); - } - ziinit.begin_pos = byte_before_the_zipfile; - ziinit.number_entry = number_entry_CD; - - if (ZSEEK(ziinit.z_filefunc, ziinit.filestream, - offset_central_dir+byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0) - err=ZIP_ERRNO; + // Read and Cache Central Directory Records + err = LoadCentralDirectoryRecord(&ziinit); } if (globalcomment) @@ -680,37 +917,150 @@ extern zipFile ZEXPORT zipOpen2 (pathname, append, globalcomment, pzlib_filefunc } } -extern zipFile ZEXPORT zipOpen (pathname, append) - const char *pathname; - int append; +extern zipFile ZEXPORT zipOpen2 (const char *pathname, int append, zipcharpc* globalcomment, zlib_filefunc_def* pzlib_filefunc32_def) { - return zipOpen2(pathname,append,NULL,NULL); + if (pzlib_filefunc32_def != NULL) + { + zlib_filefunc64_32_def zlib_filefunc64_32_def_fill; + fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def); + return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill); + } + else + return zipOpen3(pathname, append, globalcomment, NULL); } -extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi, - extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, - comment, method, level, raw, - windowBits, memLevel, strategy, - password, crcForCrypting) - zipFile file; - const char* filename; - const zip_fileinfo* zipfi; - const void* extrafield_local; - uInt size_extrafield_local; - const void* extrafield_global; - uInt size_extrafield_global; - const char* comment; - int method; - int level; - int raw; - int windowBits; - int memLevel; - int strategy; - const char* password; - uLong crcForCrypting; +extern zipFile ZEXPORT zipOpen2_64 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_def* pzlib_filefunc_def) +{ + if (pzlib_filefunc_def != NULL) + { + zlib_filefunc64_32_def zlib_filefunc64_32_def_fill; + zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def; + zlib_filefunc64_32_def_fill.ztell32_file = NULL; + zlib_filefunc64_32_def_fill.zseek32_file = NULL; + return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill); + } + else + return zipOpen3(pathname, append, globalcomment, NULL); +} + + + +extern zipFile ZEXPORT zipOpen (const char* pathname, int append) { - zip_internal* zi; + return zipOpen3((const void*)pathname,append,NULL,NULL); +} + +extern zipFile ZEXPORT zipOpen64 (const void* pathname, int append) +{ + return zipOpen3(pathname,append,NULL,NULL); +} + +int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local) +{ + /* write the local header */ + int err; + uInt size_filename = (uInt)strlen(filename); + uInt size_extrafield = size_extrafield_local; + + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC, 4); + + if (err==ZIP_OK) + { + if(zi->ci.zip64) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);/* version needed to extract */ + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */ + } + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2); + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2); + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4); + + // CRC / Compressed size / Uncompressed size will be filled in later and rewritten later + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */ + if (err==ZIP_OK) + { + if(zi->ci.zip64) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* compressed size, unknown */ + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */ + } + if (err==ZIP_OK) + { + if(zi->ci.zip64) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* uncompressed size, unknown */ + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */ + } + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2); + + if(zi->ci.zip64) + { + size_extrafield += 20; + } + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield,2); + + if ((err==ZIP_OK) && (size_filename > 0)) + { + if (ZWRITE64(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename) + err = ZIP_ERRNO; + } + + if ((err==ZIP_OK) && (size_extrafield_local > 0)) + { + if (ZWRITE64(zi->z_filefunc, zi->filestream, extrafield_local, size_extrafield_local) != size_extrafield_local) + err = ZIP_ERRNO; + } + + + if ((err==ZIP_OK) && (zi->ci.zip64)) + { + // write the Zip64 extended info + short HeaderID = 1; + short DataSize = 16; + ZPOS64_T CompressedSize = 0; + ZPOS64_T UncompressedSize = 0; + + // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file) + zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream); + + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2); + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2); + + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8); + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8); + } + + return err; +} + +/* + NOTE. + When writing RAW the ZIP64 extended information in extrafield_local and extrafield_global needs to be stripped + before calling this function it can be done with zipRemoveExtraInfoBlock + + It is not done here because then we need to realloc a new buffer since parameters are 'const' and I want to minimize + unnecessary allocations. + */ +extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting, + uLong versionMadeBy, uLong flagBase, int zip64) +{ + zip64_internal* zi; uInt size_filename; uInt size_comment; uInt i; @@ -723,10 +1073,16 @@ extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi, if (file == NULL) return ZIP_PARAMERROR; + +#ifdef HAVE_BZIP2 + if ((method!=0) && (method!=Z_DEFLATED) && (method!=Z_BZIP2ED)) + return ZIP_PARAMERROR; +#else if ((method!=0) && (method!=Z_DEFLATED)) - return ZIP_PARAMERROR; + return ZIP_PARAMERROR; +#endif - zi = (zip_internal*)file; + zi = (zip64_internal*)file; if (zi->in_opened_file_inzip == 1) { @@ -735,7 +1091,6 @@ extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi, return err; } - if (filename==NULL) filename="-"; @@ -752,10 +1107,11 @@ extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi, { if (zipfi->dosDate != 0) zi->ci.dosDate = zipfi->dosDate; - else zi->ci.dosDate = ziplocal_TmzDateToDosDate(&zipfi->tmz_date,zipfi->dosDate); + else + zi->ci.dosDate = zip64local_TmzDateToDosDate(&zipfi->tmz_date); } - zi->ci.flag = 0; + zi->ci.flag = flagBase; if ((level==8) || (level==9)) zi->ci.flag |= 2; if ((level==2)) @@ -771,37 +1127,43 @@ extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi, zi->ci.stream_initialised = 0; zi->ci.pos_in_buffered_data = 0; zi->ci.raw = raw; - zi->ci.pos_local_header = ZTELL(zi->z_filefunc,zi->filestream) ; - zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + - size_extrafield_global + size_comment; - zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader); + zi->ci.pos_local_header = ZTELL64(zi->z_filefunc,zi->filestream); + + zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + size_extrafield_global + size_comment; + zi->ci.size_centralExtraFree = 32; // Extra space we have reserved in case we need to add ZIP64 extra info data - ziplocal_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4); + zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader + zi->ci.size_centralExtraFree); + + zi->ci.size_centralExtra = size_extrafield_global; + zip64local_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4); /* version info */ - ziplocal_putValue_inmemory(zi->ci.central_header+4,(uLong)VERSIONMADEBY,2); - ziplocal_putValue_inmemory(zi->ci.central_header+6,(uLong)20,2); - ziplocal_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2); - ziplocal_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2); - ziplocal_putValue_inmemory(zi->ci.central_header+12,(uLong)zi->ci.dosDate,4); - ziplocal_putValue_inmemory(zi->ci.central_header+16,(uLong)0,4); /*crc*/ - ziplocal_putValue_inmemory(zi->ci.central_header+20,(uLong)0,4); /*compr size*/ - ziplocal_putValue_inmemory(zi->ci.central_header+24,(uLong)0,4); /*uncompr size*/ - ziplocal_putValue_inmemory(zi->ci.central_header+28,(uLong)size_filename,2); - ziplocal_putValue_inmemory(zi->ci.central_header+30,(uLong)size_extrafield_global,2); - ziplocal_putValue_inmemory(zi->ci.central_header+32,(uLong)size_comment,2); - ziplocal_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/ + zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)versionMadeBy,2); + zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)20,2); + zip64local_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2); + zip64local_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2); + zip64local_putValue_inmemory(zi->ci.central_header+12,(uLong)zi->ci.dosDate,4); + zip64local_putValue_inmemory(zi->ci.central_header+16,(uLong)0,4); /*crc*/ + zip64local_putValue_inmemory(zi->ci.central_header+20,(uLong)0,4); /*compr size*/ + zip64local_putValue_inmemory(zi->ci.central_header+24,(uLong)0,4); /*uncompr size*/ + zip64local_putValue_inmemory(zi->ci.central_header+28,(uLong)size_filename,2); + zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)size_extrafield_global,2); + zip64local_putValue_inmemory(zi->ci.central_header+32,(uLong)size_comment,2); + zip64local_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/ if (zipfi==NULL) - ziplocal_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2); + zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2); else - ziplocal_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2); + zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2); if (zipfi==NULL) - ziplocal_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4); + zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4); else - ziplocal_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4); + zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4); - ziplocal_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header- zi->add_position_when_writting_offset,4); + if(zi->ci.pos_local_header >= 0xffffffff) + zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)0xffffffff,4); + else + zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header - zi->add_position_when_writting_offset,4); for (i=0;i<size_filename;i++) *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i); @@ -816,63 +1178,66 @@ extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi, if (zi->ci.central_header == NULL) return ZIP_INTERNALERROR; - /* write the local header */ - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC,4); - - if (err==ZIP_OK) - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */ - if (err==ZIP_OK) - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2); - - if (err==ZIP_OK) - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2); - - if (err==ZIP_OK) - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4); - - if (err==ZIP_OK) - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */ - if (err==ZIP_OK) - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */ - if (err==ZIP_OK) - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */ - - if (err==ZIP_OK) - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2); - - if (err==ZIP_OK) - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield_local,2); - - if ((err==ZIP_OK) && (size_filename>0)) - if (ZWRITE(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename) - err = ZIP_ERRNO; - - if ((err==ZIP_OK) && (size_extrafield_local>0)) - if (ZWRITE(zi->z_filefunc,zi->filestream,extrafield_local,size_extrafield_local) - !=size_extrafield_local) - err = ZIP_ERRNO; + zi->ci.zip64 = zip64; + zi->ci.totalCompressedData = 0; + zi->ci.totalUncompressedData = 0; + zi->ci.pos_zip64extrainfo = 0; + + err = Write_LocalFileHeader(zi, filename, size_extrafield_local, extrafield_local); + +#ifdef HAVE_BZIP2 + zi->ci.bstream.avail_in = (uInt)0; + zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.bstream.next_out = (char*)zi->ci.buffered_data; + zi->ci.bstream.total_in_hi32 = 0; + zi->ci.bstream.total_in_lo32 = 0; + zi->ci.bstream.total_out_hi32 = 0; + zi->ci.bstream.total_out_lo32 = 0; +#endif zi->ci.stream.avail_in = (uInt)0; zi->ci.stream.avail_out = (uInt)Z_BUFSIZE; zi->ci.stream.next_out = zi->ci.buffered_data; zi->ci.stream.total_in = 0; zi->ci.stream.total_out = 0; + zi->ci.stream.data_type = Z_BINARY; +#ifdef HAVE_BZIP2 + if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED || zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) +#else if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) +#endif { - zi->ci.stream.zalloc = (alloc_func)0; - zi->ci.stream.zfree = (free_func)0; - zi->ci.stream.opaque = (voidpf)0; + if(zi->ci.method == Z_DEFLATED) + { + zi->ci.stream.zalloc = (alloc_func)0; + zi->ci.stream.zfree = (free_func)0; + zi->ci.stream.opaque = (voidpf)0; - if (windowBits>0) - windowBits = -windowBits; + if (windowBits>0) + windowBits = -windowBits; - err = deflateInit2(&zi->ci.stream, level, - Z_DEFLATED, windowBits, memLevel, strategy); + err = deflateInit2(&zi->ci.stream, level, Z_DEFLATED, windowBits, memLevel, strategy); + + if (err==Z_OK) + zi->ci.stream_initialised = Z_DEFLATED; + } + else if(zi->ci.method == Z_BZIP2ED) + { +#ifdef HAVE_BZIP2 + // Init BZip stuff here + zi->ci.bstream.bzalloc = 0; + zi->ci.bstream.bzfree = 0; + zi->ci.bstream.opaque = (voidpf)0; + + err = BZ2_bzCompressInit(&zi->ci.bstream, level, 0,35); + if(err == BZ_OK) + zi->ci.stream_initialised = Z_BZIP2ED; +#endif + } - if (err==Z_OK) - zi->ci.stream_initialised = 1; } + # ifndef NOCRYPT zi->ci.crypt_header_size = 0; if ((err==Z_OK) && (password != NULL)) @@ -886,7 +1251,7 @@ extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi, sizeHead=crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,crcForCrypting); zi->ci.crypt_header_size = sizeHead; - if (ZWRITE(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead) + if (ZWRITE64(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead) err = ZIP_ERRNO; } # endif @@ -896,53 +1261,105 @@ extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi, return err; } -extern int ZEXPORT zipOpenNewFileInZip2(file, filename, zipfi, - extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, - comment, method, level, raw) - zipFile file; - const char* filename; - const zip_fileinfo* zipfi; - const void* extrafield_local; - uInt size_extrafield_local; - const void* extrafield_global; - uInt size_extrafield_global; - const char* comment; - int method; - int level; - int raw; +extern int ZEXPORT zipOpenNewFileInZip4 (zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting, + uLong versionMadeBy, uLong flagBase) +{ + return zipOpenNewFileInZip4_64 (file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + windowBits, memLevel, strategy, + password, crcForCrypting, versionMadeBy, flagBase, 0); +} + +extern int ZEXPORT zipOpenNewFileInZip3 (zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting) +{ + return zipOpenNewFileInZip4_64 (file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + windowBits, memLevel, strategy, + password, crcForCrypting, VERSIONMADEBY, 0, 0); +} + +extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting, int zip64) +{ + return zipOpenNewFileInZip4_64 (file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + windowBits, memLevel, strategy, + password, crcForCrypting, VERSIONMADEBY, 0, zip64); +} + +extern int ZEXPORT zipOpenNewFileInZip2(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw) { - return zipOpenNewFileInZip3 (file, filename, zipfi, + return zipOpenNewFileInZip4_64 (file, filename, zipfi, extrafield_local, size_extrafield_local, extrafield_global, size_extrafield_global, comment, method, level, raw, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, - NULL, 0); + NULL, 0, VERSIONMADEBY, 0, 0); } -extern int ZEXPORT zipOpenNewFileInZip (file, filename, zipfi, - extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, - comment, method, level) - zipFile file; - const char* filename; - const zip_fileinfo* zipfi; - const void* extrafield_local; - uInt size_extrafield_local; - const void* extrafield_global; - uInt size_extrafield_global; - const char* comment; - int method; - int level; +extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, int zip64) { - return zipOpenNewFileInZip2 (file, filename, zipfi, + return zipOpenNewFileInZip4_64 (file, filename, zipfi, extrafield_local, size_extrafield_local, extrafield_global, size_extrafield_global, - comment, method, level, 0); + comment, method, level, raw, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, zip64); } -local int zipFlushWriteBuffer(zi) - zip_internal* zi; +extern int ZEXPORT zipOpenNewFileInZip64 (zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void*extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int zip64) +{ + return zipOpenNewFileInZip4_64 (file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, 0, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, zip64); +} + +extern int ZEXPORT zipOpenNewFileInZip (zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void*extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level) +{ + return zipOpenNewFileInZip4_64 (file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, 0, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, 0); +} + +local int zip64FlushWriteBuffer(zip64_internal* zi) { int err=ZIP_OK; @@ -952,169 +1369,372 @@ local int zipFlushWriteBuffer(zi) uInt i; int t; for (i=0;i<zi->ci.pos_in_buffered_data;i++) - zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab, - zi->ci.buffered_data[i],t); + zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab, zi->ci.buffered_data[i],t); #endif } - if (ZWRITE(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data) - !=zi->ci.pos_in_buffered_data) + + if (ZWRITE64(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data) != zi->ci.pos_in_buffered_data) err = ZIP_ERRNO; + + zi->ci.totalCompressedData += zi->ci.pos_in_buffered_data; + +#ifdef HAVE_BZIP2 + if(zi->ci.method == Z_BZIP2ED) + { + zi->ci.totalUncompressedData += zi->ci.bstream.total_in_lo32; + zi->ci.bstream.total_in_lo32 = 0; + zi->ci.bstream.total_in_hi32 = 0; + } + else +#endif + { + zi->ci.totalUncompressedData += zi->ci.stream.total_in; + zi->ci.stream.total_in = 0; + } + + zi->ci.pos_in_buffered_data = 0; + return err; } -extern int ZEXPORT zipWriteInFileInZip (file, buf, len) - zipFile file; - const void* buf; - unsigned len; +extern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,unsigned int len) { - zip_internal* zi; + zip64_internal* zi; int err=ZIP_OK; if (file == NULL) return ZIP_PARAMERROR; - zi = (zip_internal*)file; + zi = (zip64_internal*)file; if (zi->in_opened_file_inzip == 0) return ZIP_PARAMERROR; - zi->ci.stream.next_in = (void*)buf; - zi->ci.stream.avail_in = len; - zi->ci.crc32 = crc32(zi->ci.crc32,buf,len); + zi->ci.crc32 = crc32(zi->ci.crc32,buf,(uInt)len); - while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0)) +#ifdef HAVE_BZIP2 + if(zi->ci.method == Z_BZIP2ED && (!zi->ci.raw)) { - if (zi->ci.stream.avail_out == 0) + zi->ci.bstream.next_in = (void*)buf; + zi->ci.bstream.avail_in = len; + err = BZ_RUN_OK; + + while ((err==BZ_RUN_OK) && (zi->ci.bstream.avail_in>0)) + { + if (zi->ci.bstream.avail_out == 0) { - if (zipFlushWriteBuffer(zi) == ZIP_ERRNO) - err = ZIP_ERRNO; - zi->ci.stream.avail_out = (uInt)Z_BUFSIZE; - zi->ci.stream.next_out = zi->ci.buffered_data; + if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) + err = ZIP_ERRNO; + zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.bstream.next_out = (char*)zi->ci.buffered_data; } - if(err != ZIP_OK) - break; + if(err != BZ_RUN_OK) + break; - if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) + if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) { - uLong uTotalOutBefore = zi->ci.stream.total_out; - err=deflate(&zi->ci.stream, Z_NO_FLUSH); - zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ; + uLong uTotalOutBefore_lo = zi->ci.bstream.total_out_lo32; +// uLong uTotalOutBefore_hi = zi->ci.bstream.total_out_hi32; + err=BZ2_bzCompress(&zi->ci.bstream, BZ_RUN); + zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore_lo) ; } - else - { - uInt copy_this,i; - if (zi->ci.stream.avail_in < zi->ci.stream.avail_out) - copy_this = zi->ci.stream.avail_in; - else - copy_this = zi->ci.stream.avail_out; - for (i=0;i<copy_this;i++) - *(((char*)zi->ci.stream.next_out)+i) = - *(((const char*)zi->ci.stream.next_in)+i); - { - zi->ci.stream.avail_in -= copy_this; - zi->ci.stream.avail_out-= copy_this; - zi->ci.stream.next_in+= copy_this; - zi->ci.stream.next_out+= copy_this; - zi->ci.stream.total_in+= copy_this; - zi->ci.stream.total_out+= copy_this; - zi->ci.pos_in_buffered_data += copy_this; - } - } + } + + if(err == BZ_RUN_OK) + err = ZIP_OK; + } + else +#endif + { + zi->ci.stream.next_in = (Bytef*)buf; + zi->ci.stream.avail_in = len; + + while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0)) + { + if (zi->ci.stream.avail_out == 0) + { + if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) + err = ZIP_ERRNO; + zi->ci.stream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.stream.next_out = zi->ci.buffered_data; + } + + + if(err != ZIP_OK) + break; + + if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) + { + uLong uTotalOutBefore = zi->ci.stream.total_out; + err=deflate(&zi->ci.stream, Z_NO_FLUSH); + if(uTotalOutBefore > zi->ci.stream.total_out) + { + int bBreak = 0; + bBreak++; + } + + zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ; + } + else + { + uInt copy_this,i; + if (zi->ci.stream.avail_in < zi->ci.stream.avail_out) + copy_this = zi->ci.stream.avail_in; + else + copy_this = zi->ci.stream.avail_out; + + for (i = 0; i < copy_this; i++) + *(((char*)zi->ci.stream.next_out)+i) = + *(((const char*)zi->ci.stream.next_in)+i); + { + zi->ci.stream.avail_in -= copy_this; + zi->ci.stream.avail_out-= copy_this; + zi->ci.stream.next_in+= copy_this; + zi->ci.stream.next_out+= copy_this; + zi->ci.stream.total_in+= copy_this; + zi->ci.stream.total_out+= copy_this; + zi->ci.pos_in_buffered_data += copy_this; + } + } + }// while(...) } return err; } -extern int ZEXPORT zipCloseFileInZipRaw (file, uncompressed_size, crc32) - zipFile file; - uLong uncompressed_size; - uLong crc32; +extern int ZEXPORT zipCloseFileInZipRaw (zipFile file, uLong uncompressed_size, uLong crc32) +{ + return zipCloseFileInZipRaw64 (file, uncompressed_size, crc32); +} + +extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32) { - zip_internal* zi; - uLong compressed_size; + zip64_internal* zi; + ZPOS64_T compressed_size; + uLong invalidValue = 0xffffffff; + short datasize = 0; int err=ZIP_OK; if (file == NULL) return ZIP_PARAMERROR; - zi = (zip_internal*)file; + zi = (zip64_internal*)file; if (zi->in_opened_file_inzip == 0) return ZIP_PARAMERROR; zi->ci.stream.avail_in = 0; if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) - while (err==ZIP_OK) + { + while (err==ZIP_OK) + { + uLong uTotalOutBefore; + if (zi->ci.stream.avail_out == 0) + { + if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) + err = ZIP_ERRNO; + zi->ci.stream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.stream.next_out = zi->ci.buffered_data; + } + uTotalOutBefore = zi->ci.stream.total_out; + err=deflate(&zi->ci.stream, Z_FINISH); + zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ; + } + } + else if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) { +#ifdef HAVE_BZIP2 + err = BZ_FINISH_OK; + while (err==BZ_FINISH_OK) + { uLong uTotalOutBefore; - if (zi->ci.stream.avail_out == 0) + if (zi->ci.bstream.avail_out == 0) { - if (zipFlushWriteBuffer(zi) == ZIP_ERRNO) - err = ZIP_ERRNO; - zi->ci.stream.avail_out = (uInt)Z_BUFSIZE; - zi->ci.stream.next_out = zi->ci.buffered_data; + if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) + err = ZIP_ERRNO; + zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.bstream.next_out = (char*)zi->ci.buffered_data; } - uTotalOutBefore = zi->ci.stream.total_out; - err=deflate(&zi->ci.stream, Z_FINISH); - zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ; + uTotalOutBefore = zi->ci.bstream.total_out_lo32; + err=BZ2_bzCompress(&zi->ci.bstream, BZ_FINISH); + if(err == BZ_STREAM_END) + err = Z_STREAM_END; + + zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore); + } + + if(err == BZ_FINISH_OK) + err = ZIP_OK; +#endif } if (err==Z_STREAM_END) err=ZIP_OK; /* this is normal */ if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK)) - if (zipFlushWriteBuffer(zi)==ZIP_ERRNO) + { + if (zip64FlushWriteBuffer(zi)==ZIP_ERRNO) err = ZIP_ERRNO; + } if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) { - err=deflateEnd(&zi->ci.stream); + int tmp_err = deflateEnd(&zi->ci.stream); + if (err == ZIP_OK) + err = tmp_err; zi->ci.stream_initialised = 0; } +#ifdef HAVE_BZIP2 + else if((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) + { + int tmperr = BZ2_bzCompressEnd(&zi->ci.bstream); + if (err==ZIP_OK) + err = tmperr; + zi->ci.stream_initialised = 0; + } +#endif if (!zi->ci.raw) { crc32 = (uLong)zi->ci.crc32; - uncompressed_size = (uLong)zi->ci.stream.total_in; + uncompressed_size = zi->ci.totalUncompressedData; } - compressed_size = (uLong)zi->ci.stream.total_out; + compressed_size = zi->ci.totalCompressedData; + # ifndef NOCRYPT compressed_size += zi->ci.crypt_header_size; # endif - ziplocal_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/ - ziplocal_putValue_inmemory(zi->ci.central_header+20, - compressed_size,4); /*compr size*/ + // update Current Item crc and sizes, + if(compressed_size >= 0xffffffff || uncompressed_size >= 0xffffffff || zi->ci.pos_local_header >= 0xffffffff) + { + /*version Made by*/ + zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)45,2); + /*version needed*/ + zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)45,2); + + } + + zip64local_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/ + + + if(compressed_size >= 0xffffffff) + zip64local_putValue_inmemory(zi->ci.central_header+20, invalidValue,4); /*compr size*/ + else + zip64local_putValue_inmemory(zi->ci.central_header+20, compressed_size,4); /*compr size*/ + + /// set internal file attributes field if (zi->ci.stream.data_type == Z_ASCII) - ziplocal_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2); - ziplocal_putValue_inmemory(zi->ci.central_header+24, - uncompressed_size,4); /*uncompr size*/ + zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2); + + if(uncompressed_size >= 0xffffffff) + zip64local_putValue_inmemory(zi->ci.central_header+24, invalidValue,4); /*uncompr size*/ + else + zip64local_putValue_inmemory(zi->ci.central_header+24, uncompressed_size,4); /*uncompr size*/ + + // Add ZIP64 extra info field for uncompressed size + if(uncompressed_size >= 0xffffffff) + datasize += 8; + + // Add ZIP64 extra info field for compressed size + if(compressed_size >= 0xffffffff) + datasize += 8; + + // Add ZIP64 extra info field for relative offset to local file header of current file + if(zi->ci.pos_local_header >= 0xffffffff) + datasize += 8; + + if(datasize > 0) + { + char* p = NULL; + + if((uLong)(datasize + 4) > zi->ci.size_centralExtraFree) + { + // we can not write more data to the buffer that we have room for. + return ZIP_BADZIPFILE; + } + + p = zi->ci.central_header + zi->ci.size_centralheader; + + // Add Extra Information Header for 'ZIP64 information' + zip64local_putValue_inmemory(p, 0x0001, 2); // HeaderID + p += 2; + zip64local_putValue_inmemory(p, datasize, 2); // DataSize + p += 2; + + if(uncompressed_size >= 0xffffffff) + { + zip64local_putValue_inmemory(p, uncompressed_size, 8); + p += 8; + } + + if(compressed_size >= 0xffffffff) + { + zip64local_putValue_inmemory(p, compressed_size, 8); + p += 8; + } + + if(zi->ci.pos_local_header >= 0xffffffff) + { + zip64local_putValue_inmemory(p, zi->ci.pos_local_header, 8); + p += 8; + } + + // Update how much extra free space we got in the memory buffer + // and increase the centralheader size so the new ZIP64 fields are included + // ( 4 below is the size of HeaderID and DataSize field ) + zi->ci.size_centralExtraFree -= datasize + 4; + zi->ci.size_centralheader += datasize + 4; + + // Update the extra info size field + zi->ci.size_centralExtra += datasize + 4; + zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)zi->ci.size_centralExtra,2); + } if (err==ZIP_OK) - err = add_data_in_datablock(&zi->central_dir,zi->ci.central_header, - (uLong)zi->ci.size_centralheader); + err = add_data_in_datablock(&zi->central_dir, zi->ci.central_header, (uLong)zi->ci.size_centralheader); + free(zi->ci.central_header); if (err==ZIP_OK) { - long cur_pos_inzip = ZTELL(zi->z_filefunc,zi->filestream); - if (ZSEEK(zi->z_filefunc,zi->filestream, - zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0) + // Update the LocalFileHeader with the new values. + + ZPOS64_T cur_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream); + + if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0) err = ZIP_ERRNO; if (err==ZIP_OK) - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */ - if (err==ZIP_OK) /* compressed size, unknown */ - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4); + if(uncompressed_size >= 0xffffffff) + { + if(zi->ci.pos_zip64extrainfo > 0) + { + // Update the size in the ZIP64 extended field. + if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_zip64extrainfo + 4,ZLIB_FILEFUNC_SEEK_SET)!=0) + err = ZIP_ERRNO; + + if (err==ZIP_OK) /* compressed size, unknown */ + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, uncompressed_size, 8); + + if (err==ZIP_OK) /* uncompressed size, unknown */ + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8); + } + } + else + { + if (err==ZIP_OK) /* compressed size, unknown */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4); - if (err==ZIP_OK) /* uncompressed size, unknown */ - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4); + if (err==ZIP_OK) /* uncompressed size, unknown */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4); + } - if (ZSEEK(zi->z_filefunc,zi->filestream, - cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0) + if (ZSEEK64(zi->z_filefunc,zi->filestream, cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0) err = ZIP_ERRNO; } @@ -1124,24 +1744,150 @@ extern int ZEXPORT zipCloseFileInZipRaw (file, uncompressed_size, crc32) return err; } -extern int ZEXPORT zipCloseFileInZip (file) - zipFile file; +extern int ZEXPORT zipCloseFileInZip (zipFile file) { return zipCloseFileInZipRaw (file,0,0); } -extern int ZEXPORT zipClose (file, global_comment) - zipFile file; - const char* global_comment; +int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip) { - zip_internal* zi; + int err = ZIP_OK; + ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writting_offset; + + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4); + + /*num disks*/ + if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); + + /*relative offset*/ + if (err==ZIP_OK) /* Relative offset to the Zip64EndOfCentralDirectory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream, pos,8); + + /*total disks*/ /* Do not support spawning of disk so always say 1 here*/ + if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4); + + return err; +} + +int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) +{ + int err = ZIP_OK; + + uLong Zip64DataSize = 44; + + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDHEADERMAGIC,4); + + if (err==ZIP_OK) /* size of this 'zip64 end of central directory' */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)Zip64DataSize,8); // why ZPOS64_T of this ? + + if (err==ZIP_OK) /* version made by */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2); + + if (err==ZIP_OK) /* version needed */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2); + + if (err==ZIP_OK) /* number of this disk */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); + + if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); + + if (err==ZIP_OK) /* total number of entries in the central dir on this disk */ + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8); + + if (err==ZIP_OK) /* total number of entries in the central dir */ + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8); + + if (err==ZIP_OK) /* size of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)size_centraldir,8); + + if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */ + { + ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset; + err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8); + } + return err; +} +int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) +{ + int err = ZIP_OK; + + /*signature*/ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4); + + if (err==ZIP_OK) /* number of this disk */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2); + + if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2); + + if (err==ZIP_OK) /* total number of entries in the central dir on this disk */ + { + { + if(zi->number_entry >= 0xFFFF) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2); + } + } + + if (err==ZIP_OK) /* total number of entries in the central dir */ + { + if(zi->number_entry >= 0xFFFF) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2); + } + + if (err==ZIP_OK) /* size of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4); + + if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */ + { + ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset; + if(pos >= 0xffffffff) + { + err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4); + } + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4); + } + + return err; +} + +int Write_GlobalComment(zip64_internal* zi, const char* global_comment) +{ + int err = ZIP_OK; + uInt size_global_comment = 0; + + if(global_comment != NULL) + size_global_comment = (uInt)strlen(global_comment); + + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2); + + if (err == ZIP_OK && size_global_comment > 0) + { + if (ZWRITE64(zi->z_filefunc,zi->filestream, global_comment, size_global_comment) != size_global_comment) + err = ZIP_ERRNO; + } + return err; +} + +extern int ZEXPORT zipClose (zipFile file, const char* global_comment) +{ + zip64_internal* zi; int err = 0; uLong size_centraldir = 0; - uLong centraldir_pos_inzip; - uInt size_global_comment; + ZPOS64_T centraldir_pos_inzip; + ZPOS64_T pos; + if (file == NULL) return ZIP_PARAMERROR; - zi = (zip_internal*)file; + + zi = (zip64_internal*)file; if (zi->in_opened_file_inzip == 1) { @@ -1152,61 +1898,42 @@ extern int ZEXPORT zipClose (file, global_comment) if (global_comment==NULL) global_comment = zi->globalcomment; #endif - if (global_comment==NULL) - size_global_comment = 0; - else - size_global_comment = (uInt)strlen(global_comment); - centraldir_pos_inzip = ZTELL(zi->z_filefunc,zi->filestream); + centraldir_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream); + if (err==ZIP_OK) { - linkedlist_datablock_internal* ldi = zi->central_dir.first_block ; + linkedlist_datablock_internal* ldi = zi->central_dir.first_block; while (ldi!=NULL) { if ((err==ZIP_OK) && (ldi->filled_in_this_block>0)) - if (ZWRITE(zi->z_filefunc,zi->filestream, - ldi->data,ldi->filled_in_this_block) - !=ldi->filled_in_this_block ) + { + if (ZWRITE64(zi->z_filefunc,zi->filestream, ldi->data, ldi->filled_in_this_block) != ldi->filled_in_this_block) err = ZIP_ERRNO; + } size_centraldir += ldi->filled_in_this_block; ldi = ldi->next_datablock; } } - free_datablock(zi->central_dir.first_block); - - if (err==ZIP_OK) /* Magic End */ - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4); - - if (err==ZIP_OK) /* number of this disk */ - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2); - - if (err==ZIP_OK) /* number of the disk with the start of the central directory */ - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2); - - if (err==ZIP_OK) /* total number of entries in the central dir on this disk */ - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2); + free_linkedlist(&(zi->central_dir)); - if (err==ZIP_OK) /* total number of entries in the central dir */ - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2); + pos = centraldir_pos_inzip - zi->add_position_when_writting_offset; + if(pos >= 0xffffffff) + { + ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream); + Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip); - if (err==ZIP_OK) /* size of the central directory */ - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4); + Write_Zip64EndOfCentralDirectoryLocator(zi, Zip64EOCDpos); + } - if (err==ZIP_OK) /* offset of start of central directory with respect to the - starting disk number */ - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream, - (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4); + if (err==ZIP_OK) + err = Write_EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip); - if (err==ZIP_OK) /* zipfile comment length */ - err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2); + if(err == ZIP_OK) + err = Write_GlobalComment(zi, global_comment); - if ((err==ZIP_OK) && (size_global_comment>0)) - if (ZWRITE(zi->z_filefunc,zi->filestream, - global_comment,size_global_comment) != size_global_comment) - err = ZIP_ERRNO; - - if (ZCLOSE(zi->z_filefunc,zi->filestream) != 0) + if (ZCLOSE64(zi->z_filefunc,zi->filestream) != 0) if (err == ZIP_OK) err = ZIP_ERRNO; @@ -1217,3 +1944,61 @@ extern int ZEXPORT zipClose (file, global_comment) return err; } + +extern int ZEXPORT zipRemoveExtraInfoBlock (char* pData, int* dataLen, short sHeader) +{ + char* p = pData; + int size = 0; + char* pNewHeader; + char* pTmp; + short header; + short dataSize; + + int retVal = ZIP_OK; + + if(pData == NULL || *dataLen < 4) + return ZIP_PARAMERROR; + + pNewHeader = (char*)ALLOC(*dataLen); + pTmp = pNewHeader; + + while(p < (pData + *dataLen)) + { + header = *(short*)p; + dataSize = *(((short*)p)+1); + + if( header == sHeader ) // Header found. + { + p += dataSize + 4; // skip it. do not copy to temp buffer + } + else + { + // Extra Info block should not be removed, So copy it to the temp buffer. + memcpy(pTmp, p, dataSize + 4); + p += dataSize + 4; + size += dataSize + 4; + } + + } + + if(size < *dataLen) + { + // clean old extra info block. + memset(pData,0, *dataLen); + + // copy the new extra info block over the old + if(size > 0) + memcpy(pData, pNewHeader, size); + + // set the new extra info size + *dataLen = size; + + retVal = ZIP_OK; + } + else + retVal = ZIP_ERRNO; + + TRYFREE(pNewHeader); + + return retVal; +} diff --git a/zlib/contrib/minizip/zip.h b/zlib/contrib/minizip/zip.h index acacce83b9b..8aaebb62343 100644 --- a/zlib/contrib/minizip/zip.h +++ b/zlib/contrib/minizip/zip.h @@ -1,19 +1,15 @@ -/* zip.h -- IO for compress .zip files using zlib - Version 1.01e, February 12th, 2005 +/* zip.h -- IO on .zip files using zlib + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) - Copyright (C) 1998-2005 Gilles Vollant + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - This unzip package allow creates .ZIP file, compatible with PKZip 2.04g - WinZip, InfoZip tools and compatible. - Multi volume ZipFile (span) are not supported. - Encryption compatible with pkzip 2.04g only supported - Old compressions used by old PKZip 1.x are not supported + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) - For uncompress .zip file, look at unzip.h + For more info read MiniZip_info.txt - - I WAIT FEEDBACK at mail info@winimage.com - Visit also http://www.winimage.com/zLibDll/unzip.html for evolution + --------------------------------------------------------------------------- Condition of use and distribution are the same than zlib : @@ -33,23 +29,23 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. + --------------------------------------------------------------------------- -*/ + Changes + + See header of zip.h -/* for more info about .ZIP format, see - http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip - http://www.info-zip.org/pub/infozip/doc/ - PkWare has also a specification at : - ftp://ftp.pkware.com/probdesc.zip */ -#ifndef _zip_H -#define _zip_H +#ifndef _zip12_H +#define _zip12_H #ifdef __cplusplus extern "C" { #endif +//#define HAVE_BZIP2 + #ifndef _ZLIB_H #include "zlib.h" #endif @@ -58,6 +54,12 @@ extern "C" { #include "ioapi.h" #endif +#ifdef HAVE_BZIP2 +#include "bzlib.h" +#endif + +#define Z_BZIP2ED 12 + #if defined(STRICTZIP) || defined(STRICTZIPUNZIP) /* like the STRICT of WIN32, we define a pointer that cannot be converted from (void*) without cast */ @@ -112,6 +114,7 @@ typedef const char* zipcharpc; #define APPEND_STATUS_ADDINZIP (2) extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append)); +extern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append)); /* Create a zipfile. pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on @@ -136,6 +139,11 @@ extern zipFile ZEXPORT zipOpen2 OF((const char *pathname, zipcharpc* globalcomment, zlib_filefunc_def* pzlib_filefunc_def)); +extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname, + int append, + zipcharpc* globalcomment, + zlib_filefunc64_def* pzlib_filefunc_def)); + extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file, const char* filename, const zip_fileinfo* zipfi, @@ -146,6 +154,19 @@ extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file, const char* comment, int method, int level)); + +extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int zip64)); + /* Open a file in the ZIP for writing. filename : the filename in zip (if NULL, '-' without quote will be used @@ -157,6 +178,9 @@ extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file, if comment != NULL, comment contain the comment string method contain the compression method (0 for store, Z_DEFLATED for deflate) level contain the level of compression (can be Z_DEFAULT_COMPRESSION) + zip64 is set to 1 if a zip64 extended information block should be added to the local file header. + this MUST be '1' if the uncompressed size is >= 0xffffffff. + */ @@ -172,6 +196,19 @@ extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file, int level, int raw)); + +extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int zip64)); /* Same than zipOpenNewFileInZip, except if raw=1, we write raw file */ @@ -191,13 +228,79 @@ extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file, int memLevel, int strategy, const char* password, - uLong crcForCtypting)); + uLong crcForCrypting)); + +extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting, + int zip64 + )); /* Same than zipOpenNewFileInZip2, except windowBits,memLevel,,strategy : see parameter strategy in deflateInit2 password : crypting password (NULL for no crypting) - crcForCtypting : crc of file to compress (needed for crypting) + crcForCrypting : crc of file to compress (needed for crypting) + */ + +extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting, + uLong versionMadeBy, + uLong flagBase + )); + + +extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting, + uLong versionMadeBy, + uLong flagBase, + int zip64 + )); +/* + Same than zipOpenNewFileInZip4, except + versionMadeBy : value for Version made by field + flag : value for flag field (compression level info will be added) */ @@ -216,8 +319,13 @@ extern int ZEXPORT zipCloseFileInZip OF((zipFile file)); extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file, uLong uncompressed_size, uLong crc32)); + +extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file, + ZPOS64_T uncompressed_size, + uLong crc32)); + /* - Close the current file in the zipfile, for fiel opened with + Close the current file in the zipfile, for file opened with parameter raw=1 in zipOpenNewFileInZip2 uncompressed_size and crc32 are value for the uncompressed size */ @@ -228,8 +336,27 @@ extern int ZEXPORT zipClose OF((zipFile file, Close the zipfile */ + +extern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader)); +/* + zipRemoveExtraInfoBlock - Added by Mathias Svensson + + Remove extra information block from a extra information data for the local file header or central directory header + + It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode. + + 0x0001 is the signature header for the ZIP64 extra information blocks + + usage. + Remove ZIP64 Extra information from a central director extra field data + zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001); + + Remove ZIP64 Extra information from a Local File Header extra field data + zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001); +*/ + #ifdef __cplusplus } #endif -#endif /* _zip_H */ +#endif /* _zip64_H */ diff --git a/zlib/contrib/pascal/zlibd32.mak b/zlib/contrib/pascal/zlibd32.mak index 88fafa0b14d..0d0699a69a3 100644 --- a/zlib/contrib/pascal/zlibd32.mak +++ b/zlib/contrib/pascal/zlibd32.mak @@ -18,10 +18,10 @@ LDFLAGS = # variables ZLIB_LIB = zlib.lib -OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj -OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj -OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infback.obj -OBJP2 = +inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj # targets @@ -38,7 +38,13 @@ crc32.obj: crc32.c zlib.h zconf.h crc32.h deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h -gzio.obj: gzio.c zutil.h zlib.h zconf.h +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ inffast.h inffixed.h diff --git a/zlib/contrib/pascal/zlibpas.pas b/zlib/contrib/pascal/zlibpas.pas index 836848c2b7b..637ae3a3f8e 100644 --- a/zlib/contrib/pascal/zlibpas.pas +++ b/zlib/contrib/pascal/zlibpas.pas @@ -10,7 +10,7 @@ unit zlibpas; interface const - ZLIB_VERSION = '1.2.3'; + ZLIB_VERSION = '1.2.5'; type alloc_func = function(opaque: Pointer; items, size: Integer): Pointer; diff --git a/zlib/contrib/puff/puff.c b/zlib/contrib/puff/puff.c index ce0cc405e38..650694e9ed8 100644 --- a/zlib/contrib/puff/puff.c +++ b/zlib/contrib/puff/puff.c @@ -1,8 +1,8 @@ /* * puff.c - * Copyright (C) 2002-2004 Mark Adler + * Copyright (C) 2002-2010 Mark Adler * For conditions of distribution and use, see copyright notice in puff.h - * version 1.8, 9 Jan 2004 + * version 2.1, 4 Apr 2010 * * puff.c is a simple inflate written to be an unambiguous way to specify the * deflate format. It is not written for speed but rather simplicity. As a @@ -61,6 +61,14 @@ * 1.7 3 Mar 2003 - Added test code for distribution * - Added zlib-like license * 1.8 9 Jan 2004 - Added some comments on no distance codes case + * 1.9 21 Feb 2008 - Fix bug on 16-bit integer architectures [Pohland] + * - Catch missing end-of-block symbol error + * 2.0 25 Jul 2008 - Add #define to permit distance too far back + * - Add option in TEST code for puff to write the data + * - Add option in TEST code to skip input bytes + * - Allow TEST code to read from piped stdin + * 2.1 4 Apr 2010 - Avoid variable initialization for happier compilers + * - Avoid unsigned comparisons for even happier compilers */ #include <setjmp.h> /* for setjmp(), longjmp(), and jmp_buf */ @@ -194,7 +202,7 @@ struct huffman { * Decode a code from the stream s using huffman table h. Return the symbol or * a negative value if there is an error. If all of the lengths are zero, i.e. * an empty code, or if the code is incomplete and an invalid code is received, - * then -9 is returned after reading MAXBITS bits. + * then -10 is returned after reading MAXBITS bits. * * Format notes: * @@ -226,14 +234,14 @@ local int decode(struct state *s, struct huffman *h) for (len = 1; len <= MAXBITS; len++) { code |= bits(s, 1); /* get next bit */ count = h->count[len]; - if (code < first + count) /* if length len, return symbol */ + if (code - count < first) /* if length len, return symbol */ return h->symbol[index + (code - first)]; index += count; /* else update for next length */ first += count; first <<= 1; code <<= 1; } - return -9; /* ran out of codes */ + return -10; /* ran out of codes */ } /* @@ -263,7 +271,7 @@ local int decode(struct state *s, struct huffman *h) code |= bitbuf & 1; bitbuf >>= 1; count = *next++; - if (code < first + count) { /* if length len, return symbol */ + if (code - count < first) { /* if length len, return symbol */ s->bitbuf = bitbuf; s->bitcnt = (s->bitcnt - len) & 7; return h->symbol[index + (code - first)]; @@ -280,7 +288,7 @@ local int decode(struct state *s, struct huffman *h) bitbuf = s->in[s->incnt++]; if (left > 8) left = 8; } - return -9; /* ran out of codes */ + return -10; /* ran out of codes */ } #endif /* SLOW */ @@ -448,21 +456,27 @@ local int codes(struct state *s, else if (symbol > 256) { /* length */ /* get and compute length */ symbol -= 257; - if (symbol >= 29) return -9; /* invalid fixed code */ + if (symbol >= 29) return -10; /* invalid fixed code */ len = lens[symbol] + bits(s, lext[symbol]); /* get and check distance */ symbol = decode(s, distcode); if (symbol < 0) return symbol; /* invalid symbol */ dist = dists[symbol] + bits(s, dext[symbol]); +#ifndef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR if (dist > s->outcnt) - return -10; /* distance too far back */ + return -11; /* distance too far back */ +#endif /* copy length bytes from distance bytes back */ if (s->out != NIL) { if (s->outcnt + len > s->outlen) return 1; while (len--) { - s->out[s->outcnt] = s->out[s->outcnt - dist]; + s->out[s->outcnt] = +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + dist > s->outcnt ? 0 : +#endif + s->out[s->outcnt - dist]; s->outcnt++; } } @@ -504,8 +518,7 @@ local int fixed(struct state *s) static int virgin = 1; static short lencnt[MAXBITS+1], lensym[FIXLCODES]; static short distcnt[MAXBITS+1], distsym[MAXDCODES]; - static struct huffman lencode = {lencnt, lensym}; - static struct huffman distcode = {distcnt, distsym}; + static struct huffman lencode, distcode; /* build fixed huffman tables if first call (may not be thread safe) */ if (virgin) { @@ -528,6 +541,12 @@ local int fixed(struct state *s) lengths[symbol] = 5; construct(&distcode, lengths, MAXDCODES); + /* construct lencode and distcode */ + lencode.count = lencnt; + lencode.symbol = lensym; + distcode.count = distcnt; + distcode.symbol = distsym; + /* do this just once */ virgin = 0; } @@ -631,11 +650,16 @@ local int dynamic(struct state *s) short lengths[MAXCODES]; /* descriptor code lengths */ short lencnt[MAXBITS+1], lensym[MAXLCODES]; /* lencode memory */ short distcnt[MAXBITS+1], distsym[MAXDCODES]; /* distcode memory */ - struct huffman lencode = {lencnt, lensym}; /* length code */ - struct huffman distcode = {distcnt, distsym}; /* distance code */ + struct huffman lencode, distcode; /* length and distance codes */ static const short order[19] = /* permutation of code length codes */ {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + /* construct lencode and distcode */ + lencode.count = lencnt; + lencode.symbol = lensym; + distcode.count = distcnt; + distcode.symbol = distsym; + /* get number of lengths in each table, check lengths */ nlen = bits(s, 5) + 257; ndist = bits(s, 5) + 1; @@ -680,6 +704,10 @@ local int dynamic(struct state *s) } } + /* check for end-of-block code -- there better be one! */ + if (lengths[256] == 0) + return -9; + /* build huffman table for literal/length codes */ err = construct(&lencode, lengths, nlen); if (err < 0 || (err > 0 && nlen - lencode.count[0] != 1)) @@ -724,8 +752,9 @@ local int dynamic(struct state *s) * -6: dynamic block code description: repeat more than specified lengths * -7: dynamic block code description: invalid literal/length code lengths * -8: dynamic block code description: invalid distance code lengths - * -9: invalid literal/length or distance code in fixed or dynamic block - * -10: distance is too far back in fixed or dynamic block + * -9: dynamic block code description: missing end-of-block code + * -10: invalid literal/length or distance code in fixed or dynamic block + * -11: distance is too far back in fixed or dynamic block * * Format notes: * @@ -783,54 +812,143 @@ int puff(unsigned char *dest, /* pointer to destination pointer */ } #ifdef TEST -/* Example of how to use puff() */ +/* Examples of how to use puff(). + + Usage: puff [-w] [-nnn] file + ... | puff [-w] [-nnn] + + where file is the input file with deflate data, nnn is the number of bytes + of input to skip before inflating (e.g. to skip a zlib or gzip header), and + -w is used to write the decompressed data to stdout */ + #include <stdio.h> #include <stdlib.h> -#include <sys/types.h> -#include <sys/stat.h> -local unsigned char *yank(char *name, unsigned long *len) +/* Return size times approximately the cube root of 2, keeping the result as 1, + 3, or 5 times a power of 2 -- the result is always > size, until the result + is the maximum value of an unsigned long, where it remains. This is useful + to keep reallocations less than ~33% over the actual data. */ +local size_t bythirds(size_t size) +{ + int n; + size_t m; + + m = size; + for (n = 0; m; n++) + m >>= 1; + if (n < 3) + return size + 1; + n -= 3; + m = size >> n; + m += m == 6 ? 2 : 1; + m <<= n; + return m > size ? m : (size_t)(-1); +} + +/* Read the input file *name, or stdin if name is NULL, into allocated memory. + Reallocate to larger buffers until the entire file is read in. Return a + pointer to the allocated data, or NULL if there was a memory allocation + failure. *len is the number of bytes of data read from the input file (even + if load() returns NULL). If the input file was empty or could not be opened + or read, *len is zero. */ +local void *load(char *name, size_t *len) { - unsigned long size; - unsigned char *buf; + size_t size; + void *buf, *swap; FILE *in; - struct stat s; *len = 0; - if (stat(name, &s)) return NULL; - if ((s.st_mode & S_IFMT) != S_IFREG) return NULL; - size = (unsigned long)(s.st_size); - if (size == 0 || (off_t)size != s.st_size) return NULL; - in = fopen(name, "r"); - if (in == NULL) return NULL; - buf = malloc(size); - if (buf != NULL && fread(buf, 1, size, in) != size) { - free(buf); - buf = NULL; + buf = malloc(size = 4096); + if (buf == NULL) + return NULL; + in = name == NULL ? stdin : fopen(name, "rb"); + if (in != NULL) { + for (;;) { + *len += fread((char *)buf + *len, 1, size - *len, in); + if (*len < size) break; + size = bythirds(size); + if (size == *len || (swap = realloc(buf, size)) == NULL) { + free(buf); + buf = NULL; + break; + } + buf = swap; + } + fclose(in); } - fclose(in); - *len = size; return buf; } int main(int argc, char **argv) { - int ret; - unsigned char *source; - unsigned long len, sourcelen, destlen; - - if (argc < 2) return 2; - source = yank(argv[1], &len); - if (source == NULL) return 2; - sourcelen = len; - ret = puff(NIL, &destlen, source, &sourcelen); + int ret, put = 0; + unsigned skip = 0; + char *arg, *name = NULL; + unsigned char *source = NULL, *dest; + size_t len = 0; + unsigned long sourcelen, destlen; + + /* process arguments */ + while (arg = *++argv, --argc) + if (arg[0] == '-') { + if (arg[1] == 'w' && arg[2] == 0) + put = 1; + else if (arg[1] >= '0' && arg[1] <= '9') + skip = (unsigned)atoi(arg + 1); + else { + fprintf(stderr, "invalid option %s\n", arg); + return 3; + } + } + else if (name != NULL) { + fprintf(stderr, "only one file name allowed\n"); + return 3; + } + else + name = arg; + source = load(name, &len); + if (source == NULL) { + fprintf(stderr, "memory allocation failure\n"); + return 4; + } + if (len == 0) { + fprintf(stderr, "could not read %s, or it was empty\n", + name == NULL ? "<stdin>" : name); + free(source); + return 3; + } + if (skip >= len) { + fprintf(stderr, "skip request of %d leaves no input\n", skip); + free(source); + return 3; + } + + /* test inflate data with offset skip */ + len -= skip; + sourcelen = (unsigned long)len; + ret = puff(NIL, &destlen, source + skip, &sourcelen); if (ret) - printf("puff() failed with return code %d\n", ret); + fprintf(stderr, "puff() failed with return code %d\n", ret); else { - printf("puff() succeeded uncompressing %lu bytes\n", destlen); - if (sourcelen < len) printf("%lu compressed bytes unused\n", - len - sourcelen); + fprintf(stderr, "puff() succeeded uncompressing %lu bytes\n", destlen); + if (sourcelen < len) fprintf(stderr, "%lu compressed bytes unused\n", + len - sourcelen); + } + + /* if requested, inflate again and write decompressd data to stdout */ + if (put) { + dest = malloc(destlen); + if (dest == NULL) { + fprintf(stderr, "memory allocation failure\n"); + free(source); + return 4; + } + puff(dest, &destlen, source + skip, &sourcelen); + fwrite(dest, 1, destlen, stdout); + free(dest); } + + /* clean up */ free(source); return ret; } diff --git a/zlib/contrib/puff/puff.h b/zlib/contrib/puff/puff.h index ef612520b3b..88d1b3844ff 100644 --- a/zlib/contrib/puff/puff.h +++ b/zlib/contrib/puff/puff.h @@ -1,6 +1,6 @@ /* puff.h - Copyright (C) 2002, 2003 Mark Adler, all rights reserved - version 1.7, 3 Mar 2002 + Copyright (C) 2002-2010 Mark Adler, all rights reserved + version 2.1, 4 Apr 2010 This software is provided 'as-is', without any express or implied warranty. In no event will the author be held liable for any damages diff --git a/zlib/contrib/testzlib/testzlib.c b/zlib/contrib/testzlib/testzlib.c index e5574f45e7f..135888eb10f 100644 --- a/zlib/contrib/testzlib/testzlib.c +++ b/zlib/contrib/testzlib/testzlib.c @@ -103,12 +103,12 @@ DWORD GetMsecSincePerfCounter(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPe MyDoMinus64(&ticks,endTime64,beginTime64);
QueryPerformanceFrequency(&ticksPerSecond);
-
+
{
ticksShifted = Int64ShrlMod32(*(DWORDLONG*)&ticks,dwLog);
tickSecShifted = Int64ShrlMod32(*(DWORDLONG*)&ticksPerSecond,dwLog);
-
- }
+
+ }
dwRet = (DWORD)((((DWORD)ticksShifted)*1000)/(DWORD)(tickSecShifted));
dwRet *=1;
diff --git a/zlib/contrib/vstudio/readme.txt b/zlib/contrib/vstudio/readme.txt index 16159f9cd0d..904888ba393 100644 --- a/zlib/contrib/vstudio/readme.txt +++ b/zlib/contrib/vstudio/readme.txt @@ -1,8 +1,8 @@ -Building instructions for the DLL versions of Zlib 1.2.3
+Building instructions for the DLL versions of Zlib 1.2.4
========================================================
This directory contains projects that build zlib and minizip using
-Microsoft Visual C++ 7.0/7.1, and Visual C++ .
+Microsoft Visual C++ 9.0/10.0, and Visual C++ .
You don't need to build these projects yourself. You can download the
binaries from:
@@ -10,36 +10,23 @@ binaries from: More information can be found at this site.
+first compile assembly code by running
+bld_ml64.bat in contrib\masmx64
+bld_ml32.bat in contrib\masmx86
+
-Build instructions for Visual Studio 7.x (32 bits)
---------------------------------------------------
-- Uncompress current zlib, including all contrib/* files
-- Download the crtdll library from
- http://www.winimage.com/zLibDll/crtdll.zip
- Unzip crtdll.zip to extract crtdll.lib on contrib\vstudio\vc7.
-- Open contrib\vstudio\vc7\zlibvc.sln with Microsoft Visual C++ 7.x
- (Visual Studio .Net 2002 or 2003).
-Build instructions for Visual Studio 2005 (32 bits or 64 bits)
+
+Build instructions for Visual Studio 2008 (32 bits or 64 bits)
--------------------------------------------------------------
- Uncompress current zlib, including all contrib/* files
-- For 32 bits only: download the crtdll library from
- http://www.winimage.com/zLibDll/crtdll.zip
- Unzip crtdll.zip to extract crtdll.lib on contrib\vstudio\vc8.
-- Open contrib\vstudio\vc8\zlibvc.sln with Microsoft Visual C++ 8.0
-
-Build instructions for Visual Studio 2005 64 bits, PSDK compiler
-----------------------------------------------------------------
-at the time of writing this text file, Visual Studio 2005 (and
- Microsoft Visual C++ 8.0) is on the beta 2 stage.
-Using you can get the free 64 bits compiler from Platform SDK,
- which is NOT a beta, and compile using the Visual studio 2005 IDE
-see http://www.winimage.com/misc/sdk64onvs2005/ for instruction
+- Open contrib\vstudio\vc9\zlibvc.sln with Microsoft Visual C++ 2008.0
+- Or run: vcbuild /rebuild contrib\vstudio\vc9\zlibvc.sln "Release|Win32"
+Build instructions for Visual Studio 2010 (32 bits or 64 bits)
+--------------------------------------------------------------
- Uncompress current zlib, including all contrib/* files
-- start Visual Studio 2005 from a platform SDK command prompt, using
- the /useenv switch
-- Open contrib\vstudio\vc8\zlibvc.sln with Microsoft Visual C++ 8.0
+- Open contrib\vstudio\vc10\zlibvc.sln with Microsoft Visual C++ 2010.0
Important
diff --git a/zlib/contrib/vstudio/vc10/miniunz.vcxproj b/zlib/contrib/vstudio/vc10/miniunz.vcxproj new file mode 100644 index 00000000000..74e15c90d3c --- /dev/null +++ b/zlib/contrib/vstudio/vc10/miniunz.vcxproj @@ -0,0 +1,310 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C52F9E7B-498A-42BE-8DB4-85A15694382A}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\miniunz.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters b/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters new file mode 100644 index 00000000000..0b2a3de2dfe --- /dev/null +++ b/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{048af943-022b-4db6-beeb-a54c34774ee2}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{c1d600d2-888f-4aea-b73e-8b0dd9befa0c}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{0844199a-966b-4f19-81db-1e0125e141b9}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\miniunz.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/miniunz.vcxproj.user b/zlib/contrib/vstudio/vc10/miniunz.vcxproj.user new file mode 100644 index 00000000000..695b5c78b91 --- /dev/null +++ b/zlib/contrib/vstudio/vc10/miniunz.vcxproj.user @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/minizip.vcxproj b/zlib/contrib/vstudio/vc10/minizip.vcxproj new file mode 100644 index 00000000000..917e15652b1 --- /dev/null +++ b/zlib/contrib/vstudio/vc10/minizip.vcxproj @@ -0,0 +1,307 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniZip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniZip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniZip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniZip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\minizip.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters b/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters new file mode 100644 index 00000000000..dd73cd31329 --- /dev/null +++ b/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{c0419b40-bf50-40da-b153-ff74215b79de}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{bb87b070-735b-478e-92ce-7383abb2f36c}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{f46ab6a6-548f-43cb-ae96-681abb5bd5db}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\minizip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/minizip.vcxproj.user b/zlib/contrib/vstudio/vc10/minizip.vcxproj.user new file mode 100644 index 00000000000..695b5c78b91 --- /dev/null +++ b/zlib/contrib/vstudio/vc10/minizip.vcxproj.user @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/testzlib.vcxproj b/zlib/contrib/vstudio/vc10/testzlib.vcxproj new file mode 100644 index 00000000000..9088d176f8c --- /dev/null +++ b/zlib/contrib/vstudio/vc10/testzlib.vcxproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}</ProjectGuid>
+ <RootNamespace>testzlib</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\testzlib\testzlib.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters b/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters new file mode 100644 index 00000000000..249daa89caf --- /dev/null +++ b/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{c1f6a2e3-5da5-4955-8653-310d3efe05a9}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{c2aaffdc-2c95-4d6f-8466-4bec5890af2c}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{c274fe07-05f2-461c-964b-f6341e4e7eb5}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\compress.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\crc32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\deflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\infback.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inftrees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\testzlib\testzlib.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\trees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\uncompr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\zutil.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/testzlib.vcxproj.user b/zlib/contrib/vstudio/vc10/testzlib.vcxproj.user new file mode 100644 index 00000000000..695b5c78b91 --- /dev/null +++ b/zlib/contrib/vstudio/vc10/testzlib.vcxproj.user @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj b/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj new file mode 100644 index 00000000000..2d628158b47 --- /dev/null +++ b/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj @@ -0,0 +1,310 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C52F9E7B-498A-42BE-8DB4-85A15694366A}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\testzlib\testzlib.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters b/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters new file mode 100644 index 00000000000..53a8693bb0a --- /dev/null +++ b/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{fa61a89f-93fc-4c89-b29e-36224b7592f4}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{d4b85da0-2ba2-4934-b57f-e2584e3848ee}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{e573e075-00bd-4a7d-bd67-a8cc9bfc5aca}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\testzlib\testzlib.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.user b/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.user new file mode 100644 index 00000000000..695b5c78b91 --- /dev/null +++ b/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.user @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc7/zlib.rc b/zlib/contrib/vstudio/vc10/zlib.rc index 72cb8b4c31e..f82245087dd 100644 --- a/zlib/contrib/vstudio/vc7/zlib.rc +++ b/zlib/contrib/vstudio/vc10/zlib.rc @@ -2,8 +2,8 @@ #define IDR_VERSION1 1
IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
- FILEVERSION 1,2,3,0
- PRODUCTVERSION 1,2,3,0
+ FILEVERSION 1,2,5,0
+ PRODUCTVERSION 1,2,5,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS 0
FILEOS VOS_DOS_WINDOWS32
@@ -16,13 +16,13 @@ BEGIN //language ID = U.S. English, char set = Windows, Multilingual
BEGIN
- VALUE "FileDescription", "zlib data compression library\0"
- VALUE "FileVersion", "1.2.3.0\0"
+ VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
+ VALUE "FileVersion", "1.2.5\0"
VALUE "InternalName", "zlib\0"
VALUE "OriginalFilename", "zlib.dll\0"
VALUE "ProductName", "ZLib.DLL\0"
VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
- VALUE "LegalCopyright", "(C) 1995-2003 Jean-loup Gailly & Mark Adler\0"
+ VALUE "LegalCopyright", "(C) 1995-2010 Jean-loup Gailly & Mark Adler\0"
END
END
BLOCK "VarFileInfo"
diff --git a/zlib/contrib/vstudio/vc10/zlibstat.vcxproj b/zlib/contrib/vstudio/vc10/zlibstat.vcxproj new file mode 100644 index 00000000000..2682fca24a6 --- /dev/null +++ b/zlib/contrib/vstudio/vc10/zlibstat.vcxproj @@ -0,0 +1,457 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\gzclose.c" />
+ <ClCompile Include="..\..\..\gzlib.c" />
+ <ClCompile Include="..\..\..\gzread.c" />
+ <ClCompile Include="..\..\..\gzwrite.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\minizip\ioapi.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\minizip\unzip.c" />
+ <ClCompile Include="..\..\minizip\zip.c" />
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters b/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters new file mode 100644 index 00000000000..c8c7f7ea395 --- /dev/null +++ b/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{174213f6-7f66-4ae8-a3a8-a1e0a1e6ffdd}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\compress.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\crc32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\deflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzclose.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzlib.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzread.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzwrite.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\infback.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inftrees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\ioapi.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\trees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\uncompr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\unzip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\zip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\zutil.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc">
+ <Filter>Source Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def">
+ <Filter>Source Files</Filter>
+ </None>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.user b/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.user new file mode 100644 index 00000000000..695b5c78b91 --- /dev/null +++ b/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.user @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc7/zlibvc.def b/zlib/contrib/vstudio/vc10/zlibvc.def index a40e71541f3..0269ef722c1 100644 --- a/zlib/contrib/vstudio/vc7/zlibvc.def +++ b/zlib/contrib/vstudio/vc10/zlibvc.def @@ -1,7 +1,7 @@ +LIBRARY
+; zlib data compression and ZIP file I/O library
-VERSION 1.23
-
-HEAPSIZE 1048576,8192
+VERSION 1.24
EXPORTS
adler32 @1
@@ -90,3 +90,41 @@ EXPORTS unzGoToFilePos @101
fill_win32_filefunc @110
+
+; zlibwapi v1.2.4 added:
+ fill_win32_filefunc64 @111
+ fill_win32_filefunc64A @112
+ fill_win32_filefunc64W @113
+
+ unzOpen64 @120
+ unzOpen2_64 @121
+ unzGetGlobalInfo64 @122
+ unzGetCurrentFileInfo64 @124
+ unzGetCurrentFileZStreamPos64 @125
+ unztell64 @126
+ unzGetFilePos64 @127
+ unzGoToFilePos64 @128
+
+ zipOpen64 @130
+ zipOpen2_64 @131
+ zipOpenNewFileInZip64 @132
+ zipOpenNewFileInZip2_64 @133
+ zipOpenNewFileInZip3_64 @134
+ zipOpenNewFileInZip4_64 @135
+ zipCloseFileInZipRaw64 @136
+
+; zlib1 v1.2.4 added:
+ adler32_combine @140
+ crc32_combine @142
+ deflateSetHeader @144
+ deflateTune @145
+ gzbuffer @146
+ gzclose_r @147
+ gzclose_w @148
+ gzdirect @149
+ gzoffset @150
+ inflateGetHeader @156
+ inflateMark @157
+ inflatePrime @158
+ inflateReset2 @159
+ inflateUndermine @160
diff --git a/zlib/contrib/vstudio/vc10/zlibvc.sln b/zlib/contrib/vstudio/vc10/zlibvc.sln new file mode 100644 index 00000000000..6f6ffd5eea1 --- /dev/null +++ b/zlib/contrib/vstudio/vc10/zlibvc.sln @@ -0,0 +1,135 @@ +
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcxproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcxproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlibdll", "testzlibdll.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcxproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Itanium = Debug|Itanium
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Itanium = Release|Itanium
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium
+ ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32
+ ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.Build.0 = Debug|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.Build.0 = Debug|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.Build.0 = Release|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.Build.0 = Debug|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.Build.0 = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.Build.0 = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/zlib/contrib/vstudio/vc10/zlibvc.vcxproj b/zlib/contrib/vstudio/vc10/zlibvc.vcxproj new file mode 100644 index 00000000000..98623989343 --- /dev/null +++ b/zlib/contrib/vstudio/vc10/zlibvc.vcxproj @@ -0,0 +1,659 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{8FD826F8-3739-44E6-8CC8-997122E53B8D}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\gzclose.c" />
+ <ClCompile Include="..\..\..\gzlib.c" />
+ <ClCompile Include="..\..\..\gzread.c" />
+ <ClCompile Include="..\..\..\gzwrite.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\minizip\ioapi.c" />
+ <ClCompile Include="..\..\minizip\iowin32.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\minizip\unzip.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\zip.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\deflate.h" />
+ <ClInclude Include="..\..\..\infblock.h" />
+ <ClInclude Include="..\..\..\infcodes.h" />
+ <ClInclude Include="..\..\..\inffast.h" />
+ <ClInclude Include="..\..\..\inftrees.h" />
+ <ClInclude Include="..\..\..\infutil.h" />
+ <ClInclude Include="..\..\..\zconf.h" />
+ <ClInclude Include="..\..\..\zlib.h" />
+ <ClInclude Include="..\..\..\zutil.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters b/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters new file mode 100644 index 00000000000..180b71cd61d --- /dev/null +++ b/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters @@ -0,0 +1,118 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{07934a85-8b61-443d-a0ee-b2eedb74f3cd}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{1d99675b-433d-4a21-9e50-ed4ab8b19762}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;fi;fd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{431c0958-fa71-44d0-9084-2d19d100c0cc}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\compress.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\crc32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\deflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzclose.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzlib.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzread.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzwrite.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\infback.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inftrees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\ioapi.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\iowin32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\trees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\uncompr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\unzip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\zip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\zutil.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc">
+ <Filter>Source Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def">
+ <Filter>Source Files</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\deflate.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\infblock.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\infcodes.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\inffast.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\inftrees.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\infutil.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\zconf.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\zlib.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\zutil.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.user b/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.user new file mode 100644 index 00000000000..695b5c78b91 --- /dev/null +++ b/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.user @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file diff --git a/zlib/contrib/vstudio/vc7/miniunz.vcproj b/zlib/contrib/vstudio/vc7/miniunz.vcproj deleted file mode 100644 index ad5117c8451..00000000000 --- a/zlib/contrib/vstudio/vc7/miniunz.vcproj +++ /dev/null @@ -1,126 +0,0 @@ -<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.00"
- Name="miniunz"
- ProjectGUID="{C52F9E7B-498A-42BE-8DB4-85A15694382A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..;..\..\minizip"
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="5"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/miniunz.exe"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/miniunz.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- OmitFramePointers="TRUE"
- AdditionalIncludeDirectories="..\..\..;..\..\minizip"
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE"
- StringPooling="TRUE"
- RuntimeLibrary="4"
- EnableFunctionLevelLinking="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/miniunz.exe"
- LinkIncremental="1"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- OptimizeForWindows98="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- </Configuration>
- </Configurations>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
- <File
- RelativePath="..\..\minizip\miniunz.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc">
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
- </Filter>
- <File
- RelativePath="ReleaseDll\zlibwapi.lib">
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/zlib/contrib/vstudio/vc7/minizip.vcproj b/zlib/contrib/vstudio/vc7/minizip.vcproj deleted file mode 100644 index fb5b6320d50..00000000000 --- a/zlib/contrib/vstudio/vc7/minizip.vcproj +++ /dev/null @@ -1,126 +0,0 @@ -<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.00"
- Name="minizip"
- ProjectGUID="{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..;..\..\minizip"
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="5"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/minizip.exe"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/minizip.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- OmitFramePointers="TRUE"
- AdditionalIncludeDirectories="..\..\..;..\..\minizip"
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE"
- StringPooling="TRUE"
- RuntimeLibrary="4"
- EnableFunctionLevelLinking="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/minizip.exe"
- LinkIncremental="1"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- OptimizeForWindows98="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- </Configuration>
- </Configurations>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
- <File
- RelativePath="..\..\minizip\minizip.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc">
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
- </Filter>
- <File
- RelativePath="ReleaseDll\zlibwapi.lib">
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/zlib/contrib/vstudio/vc7/testzlib.vcproj b/zlib/contrib/vstudio/vc7/testzlib.vcproj deleted file mode 100644 index 97bc3e8c86d..00000000000 --- a/zlib/contrib/vstudio/vc7/testzlib.vcproj +++ /dev/null @@ -1,126 +0,0 @@ -<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.00"
- Name="testZlibDll"
- ProjectGUID="{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\.."
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="5"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/testzlib.exe"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- OmitFramePointers="TRUE"
- AdditionalIncludeDirectories="..\..\.."
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE"
- StringPooling="TRUE"
- RuntimeLibrary="4"
- EnableFunctionLevelLinking="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/testzlib.exe"
- LinkIncremental="1"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- OptimizeForWindows98="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- </Configuration>
- </Configurations>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
- <File
- RelativePath="..\..\testzlib\testzlib.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc">
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
- </Filter>
- <File
- RelativePath="ReleaseDll\zlibwapi.lib">
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/zlib/contrib/vstudio/vc7/zlibstat.vcproj b/zlib/contrib/vstudio/vc7/zlibstat.vcproj deleted file mode 100644 index 766d7a4d6e7..00000000000 --- a/zlib/contrib/vstudio/vc7/zlibstat.vcproj +++ /dev/null @@ -1,246 +0,0 @@ -<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.00"
- Name="zlibstat"
- SccProjectName=""
- SccLocalPath="">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\zlibstatDebug"
- IntermediateDirectory=".\zlibstatDebug"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI"
- ExceptionHandling="FALSE"
- RuntimeLibrary="5"
- PrecompiledHeaderFile=".\zlibstatDebug/zlibstat.pch"
- AssemblerListingLocation=".\zlibstatDebug/"
- ObjectFile=".\zlibstatDebug/"
- ProgramDataBaseFileName=".\zlibstatDebug/"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"
- DebugInformationFormat="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- AdditionalOptions="/NODEFAULTLIB "
- OutputFile=".\zlibstatDebug\zlibstat.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- Culture="1036"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="ReleaseAxp|Win32"
- OutputDirectory=".\zlibsta0"
- IntermediateDirectory=".\zlibsta0"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE">
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI"
- StringPooling="TRUE"
- ExceptionHandling="FALSE"
- RuntimeLibrary="4"
- EnableFunctionLevelLinking="TRUE"
- PrecompiledHeaderFile=".\zlibsta0/zlibstat.pch"
- AssemblerListingLocation=".\zlibsta0/"
- ObjectFile=".\zlibsta0/"
- ProgramDataBaseFileName=".\zlibsta0/"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- AdditionalOptions="/NODEFAULTLIB "
- OutputFile=".\zlibsta0\zlibstat.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\zlibstat"
- IntermediateDirectory=".\zlibstat"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE">
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI;ASMV;ASMINF"
- StringPooling="TRUE"
- ExceptionHandling="FALSE"
- RuntimeLibrary="4"
- EnableFunctionLevelLinking="TRUE"
- PrecompiledHeaderFile=".\zlibstat/zlibstat.pch"
- AssemblerListingLocation=".\zlibstat/"
- ObjectFile=".\zlibstat/"
- ProgramDataBaseFileName=".\zlibstat/"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- AdditionalOptions="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj /NODEFAULTLIB "
- OutputFile=".\zlibstat\zlibstat.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- Culture="1036"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="ReleaseWithoutAsm|Win32"
- OutputDirectory="zlibstatWithoutAsm"
- IntermediateDirectory="zlibstatWithoutAsm"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE">
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI"
- StringPooling="TRUE"
- ExceptionHandling="FALSE"
- RuntimeLibrary="4"
- EnableFunctionLevelLinking="TRUE"
- PrecompiledHeaderFile=".\zlibstat/zlibstat.pch"
- AssemblerListingLocation=".\zlibstatWithoutAsm/"
- ObjectFile=".\zlibstatWithoutAsm/"
- ProgramDataBaseFileName=".\zlibstatWithoutAsm/"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- AdditionalOptions=" /NODEFAULTLIB "
- OutputFile=".\zlibstatWithoutAsm\zlibstat.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- Culture="1036"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- </Configuration>
- </Configurations>
- <Files>
- <Filter
- Name="Source Files"
- Filter="">
- <File
- RelativePath="..\..\..\adler32.c">
- </File>
- <File
- RelativePath="..\..\..\compress.c">
- </File>
- <File
- RelativePath="..\..\..\crc32.c">
- </File>
- <File
- RelativePath="..\..\..\deflate.c">
- </File>
- <File
- RelativePath="..\..\masmx86\gvmat32c.c">
- </File>
- <File
- RelativePath="..\..\..\gzio.c">
- </File>
- <File
- RelativePath="..\..\..\infback.c">
- </File>
- <File
- RelativePath="..\..\..\inffast.c">
- </File>
- <File
- RelativePath="..\..\..\inflate.c">
- </File>
- <File
- RelativePath="..\..\..\inftrees.c">
- </File>
- <File
- RelativePath="..\..\minizip\ioapi.c">
- </File>
- <File
- RelativePath="..\..\..\trees.c">
- </File>
- <File
- RelativePath="..\..\..\uncompr.c">
- </File>
- <File
- RelativePath="..\..\minizip\unzip.c">
- </File>
- <File
- RelativePath="..\..\minizip\zip.c">
- </File>
- <File
- RelativePath=".\zlib.rc">
- </File>
- <File
- RelativePath=".\zlibvc.def">
- </File>
- <File
- RelativePath="..\..\..\zutil.c">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/zlib/contrib/vstudio/vc7/zlibvc.sln b/zlib/contrib/vstudio/vc7/zlibvc.sln deleted file mode 100644 index 927b42b7bde..00000000000 --- a/zlib/contrib/vstudio/vc7/zlibvc.sln +++ /dev/null @@ -1,78 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 7.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testZlibDll", "testzlib.vcproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}"
-EndProject
-Global
- GlobalSection(SolutionConfiguration) = preSolution
- ConfigName.0 = Debug
- ConfigName.1 = Release
- ConfigName.2 = ReleaseAxp
- ConfigName.3 = ReleaseWithoutAsm
- ConfigName.4 = ReleaseWithoutCrtdll
- EndGlobalSection
- GlobalSection(ProjectDependencies) = postSolution
- EndGlobalSection
- GlobalSection(ProjectConfiguration) = postSolution
- {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug.ActiveCfg = Debug|Win32
- {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug.Build.0 = Debug|Win32
- {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release.ActiveCfg = Release|Win32
- {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release.Build.0 = Release|Win32
- {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseAxp.ActiveCfg = ReleaseAxp|Win32
- {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseAxp.Build.0 = ReleaseAxp|Win32
- {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm.ActiveCfg = ReleaseWithoutAsm|Win32
- {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm.Build.0 = ReleaseWithoutAsm|Win32
- {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutCrtdll.ActiveCfg = ReleaseAxp|Win32
- {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutCrtdll.Build.0 = ReleaseAxp|Win32
- {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug.ActiveCfg = Debug|Win32
- {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug.Build.0 = Debug|Win32
- {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release.ActiveCfg = Release|Win32
- {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release.Build.0 = Release|Win32
- {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseAxp.ActiveCfg = ReleaseAxp|Win32
- {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseAxp.Build.0 = ReleaseAxp|Win32
- {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm.ActiveCfg = ReleaseWithoutAsm|Win32
- {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm.Build.0 = ReleaseWithoutAsm|Win32
- {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutCrtdll.ActiveCfg = ReleaseWithoutCrtdll|Win32
- {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutCrtdll.Build.0 = ReleaseWithoutCrtdll|Win32
- {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug.ActiveCfg = Debug|Win32
- {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug.Build.0 = Debug|Win32
- {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release.ActiveCfg = Release|Win32
- {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release.Build.0 = Release|Win32
- {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseAxp.ActiveCfg = Release|Win32
- {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseAxp.Build.0 = Release|Win32
- {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm.ActiveCfg = Release|Win32
- {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm.Build.0 = Release|Win32
- {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutCrtdll.ActiveCfg = Release|Win32
- {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutCrtdll.Build.0 = Release|Win32
- {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug.ActiveCfg = Debug|Win32
- {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug.Build.0 = Debug|Win32
- {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release.ActiveCfg = Release|Win32
- {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release.Build.0 = Release|Win32
- {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseAxp.ActiveCfg = Release|Win32
- {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseAxp.Build.0 = Release|Win32
- {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm.ActiveCfg = Release|Win32
- {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm.Build.0 = Release|Win32
- {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutCrtdll.ActiveCfg = Release|Win32
- {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutCrtdll.Build.0 = Release|Win32
- {AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.Debug.ActiveCfg = Debug|Win32
- {AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.Debug.Build.0 = Debug|Win32
- {AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.Release.ActiveCfg = Release|Win32
- {AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.Release.Build.0 = Release|Win32
- {AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.ReleaseAxp.ActiveCfg = Release|Win32
- {AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.ReleaseAxp.Build.0 = Release|Win32
- {AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.ReleaseWithoutAsm.ActiveCfg = Release|Win32
- {AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.ReleaseWithoutAsm.Build.0 = Release|Win32
- {AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.ReleaseWithoutCrtdll.ActiveCfg = Release|Win32
- {AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.ReleaseWithoutCrtdll.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- EndGlobalSection
- GlobalSection(ExtensibilityAddIns) = postSolution
- EndGlobalSection
-EndGlobal
diff --git a/zlib/contrib/vstudio/vc7/zlibvc.vcproj b/zlib/contrib/vstudio/vc7/zlibvc.vcproj deleted file mode 100644 index 8533b49475e..00000000000 --- a/zlib/contrib/vstudio/vc7/zlibvc.vcproj +++ /dev/null @@ -1,445 +0,0 @@ -<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.00"
- Name="zlibvc"
- SccProjectName=""
- SccLocalPath="">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\DebugDll"
- IntermediateDirectory=".\DebugDll"
- ConfigurationType="2"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF"
- ExceptionHandling="FALSE"
- RuntimeLibrary="1"
- PrecompiledHeaderFile=".\DebugDll/zlibvc.pch"
- AssemblerListingLocation=".\DebugDll/"
- ObjectFile=".\DebugDll/"
- ProgramDataBaseFileName=".\DebugDll/"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalOptions="/MACHINE:I386"
- AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj"
- OutputFile=".\DebugDll\zlibwapi.dll"
- LinkIncremental="2"
- SuppressStartupBanner="TRUE"
- ModuleDefinitionFile=".\zlibvc.def"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile=".\DebugDll/zlibwapi.pdb"
- SubSystem="2"
- ImportLibrary=".\DebugDll/zlibwapi.lib"/>
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- MkTypLibCompatible="TRUE"
- SuppressStartupBanner="TRUE"
- TargetEnvironment="1"
- TypeLibraryName=".\DebugDll/zlibvc.tlb"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1036"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- </Configuration>
- <Configuration
- Name="ReleaseWithoutAsm|Win32"
- OutputDirectory=".\zlibDllWithoutAsm"
- IntermediateDirectory=".\zlibDllWithoutAsm"
- ConfigurationType="2"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- WholeProgramOptimization="TRUE">
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32,ZLIB_WINAPI"
- StringPooling="TRUE"
- ExceptionHandling="FALSE"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="TRUE"
- PrecompiledHeaderFile=".\zlibDllWithoutAsm/zlibvc.pch"
- AssemblerOutput="2"
- AssemblerListingLocation=".\zlibDllWithoutAsm/"
- ObjectFile=".\zlibDllWithoutAsm/"
- ProgramDataBaseFileName=".\zlibDllWithoutAsm/"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalOptions="/MACHINE:I386"
- AdditionalDependencies="crtdll.lib"
- OutputFile=".\zlibDllWithoutAsm\zlibwapi.dll"
- LinkIncremental="1"
- SuppressStartupBanner="TRUE"
- IgnoreAllDefaultLibraries="TRUE"
- ModuleDefinitionFile=".\zlibvc.def"
- ProgramDatabaseFile=".\zlibDllWithoutAsm/zlibwapi.pdb"
- GenerateMapFile="TRUE"
- MapFileName=".\zlibDllWithoutAsm/zlibwapi.map"
- SubSystem="2"
- OptimizeForWindows98="1"
- ImportLibrary=".\zlibDllWithoutAsm/zlibwapi.lib"/>
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="TRUE"
- SuppressStartupBanner="TRUE"
- TargetEnvironment="1"
- TypeLibraryName=".\zlibDllWithoutAsm/zlibvc.tlb"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1036"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- </Configuration>
- <Configuration
- Name="ReleaseWithoutCrtdll|Win32"
- OutputDirectory=".\zlibDllWithoutCrtDll"
- IntermediateDirectory=".\zlibDllWithoutCrtDll"
- ConfigurationType="2"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- WholeProgramOptimization="TRUE">
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF"
- StringPooling="TRUE"
- ExceptionHandling="FALSE"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="TRUE"
- PrecompiledHeaderFile=".\zlibDllWithoutCrtDll/zlibvc.pch"
- AssemblerOutput="2"
- AssemblerListingLocation=".\zlibDllWithoutCrtDll/"
- ObjectFile=".\zlibDllWithoutCrtDll/"
- ProgramDataBaseFileName=".\zlibDllWithoutCrtDll/"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalOptions="/MACHINE:I386"
- AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj "
- OutputFile=".\zlibDllWithoutCrtDll\zlibwapi.dll"
- LinkIncremental="1"
- SuppressStartupBanner="TRUE"
- IgnoreAllDefaultLibraries="FALSE"
- ModuleDefinitionFile=".\zlibvc.def"
- ProgramDatabaseFile=".\zlibDllWithoutCrtDll/zlibwapi.pdb"
- GenerateMapFile="TRUE"
- MapFileName=".\zlibDllWithoutCrtDll/zlibwapi.map"
- SubSystem="2"
- OptimizeForWindows98="1"
- ImportLibrary=".\zlibDllWithoutCrtDll/zlibwapi.lib"/>
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="TRUE"
- SuppressStartupBanner="TRUE"
- TargetEnvironment="1"
- TypeLibraryName=".\zlibDllWithoutCrtDll/zlibvc.tlb"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1036"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- </Configuration>
- <Configuration
- Name="ReleaseAxp|Win32"
- OutputDirectory=".\zlibvc__"
- IntermediateDirectory=".\zlibvc__"
- ConfigurationType="2"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- WholeProgramOptimization="TRUE">
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32,ZLIB_WINAPI"
- StringPooling="TRUE"
- ExceptionHandling="FALSE"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="TRUE"
- PrecompiledHeaderFile=".\zlibvc__/zlibvc.pch"
- AssemblerOutput="2"
- AssemblerListingLocation=".\zlibvc__/"
- ObjectFile=".\zlibvc__/"
- ProgramDataBaseFileName=".\zlibvc__/"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="crtdll.lib"
- OutputFile="zlibvc__\zlibwapi.dll"
- LinkIncremental="1"
- SuppressStartupBanner="TRUE"
- IgnoreAllDefaultLibraries="TRUE"
- ModuleDefinitionFile=".\zlibvc.def"
- ProgramDatabaseFile=".\zlibvc__/zlibwapi.pdb"
- GenerateMapFile="TRUE"
- MapFileName=".\zlibvc__/zlibwapi.map"
- SubSystem="2"
- ImportLibrary=".\zlibvc__/zlibwapi.lib"/>
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="TRUE"
- SuppressStartupBanner="TRUE"
- TargetEnvironment="1"
- TypeLibraryName=".\zlibvc__/zlibvc.tlb"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1036"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\ReleaseDll"
- IntermediateDirectory=".\ReleaseDll"
- ConfigurationType="2"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- WholeProgramOptimization="TRUE">
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF"
- StringPooling="TRUE"
- ExceptionHandling="FALSE"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="TRUE"
- PrecompiledHeaderFile=".\ReleaseDll/zlibvc.pch"
- AssemblerOutput="2"
- AssemblerListingLocation=".\ReleaseDll/"
- ObjectFile=".\ReleaseDll/"
- ProgramDataBaseFileName=".\ReleaseDll/"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalOptions="/MACHINE:I386"
- AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj crtdll.lib"
- OutputFile=".\ReleaseDll\zlibwapi.dll"
- LinkIncremental="1"
- SuppressStartupBanner="TRUE"
- IgnoreAllDefaultLibraries="TRUE"
- ModuleDefinitionFile=".\zlibvc.def"
- ProgramDatabaseFile=".\ReleaseDll/zlibwapi.pdb"
- GenerateMapFile="TRUE"
- MapFileName=".\ReleaseDll/zlibwapi.map"
- SubSystem="2"
- OptimizeForWindows98="1"
- ImportLibrary=".\ReleaseDll/zlibwapi.lib"/>
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="TRUE"
- SuppressStartupBanner="TRUE"
- TargetEnvironment="1"
- TypeLibraryName=".\Release/zlibvc.tlb"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1036"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- </Configuration>
- </Configurations>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90">
- <File
- RelativePath="..\..\..\adler32.c">
- </File>
- <File
- RelativePath="..\..\..\compress.c">
- </File>
- <File
- RelativePath="..\..\..\crc32.c">
- </File>
- <File
- RelativePath="..\..\..\deflate.c">
- </File>
- <File
- RelativePath="..\..\masmx86\gvmat32c.c">
- <FileConfiguration
- Name="ReleaseWithoutAsm|Win32"
- ExcludedFromBuild="TRUE">
- <Tool
- Name="VCCLCompilerTool"/>
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\..\gzio.c">
- </File>
- <File
- RelativePath="..\..\..\infback.c">
- </File>
- <File
- RelativePath="..\..\..\inffast.c">
- </File>
- <File
- RelativePath="..\..\..\inflate.c">
- </File>
- <File
- RelativePath="..\..\..\inftrees.c">
- </File>
- <File
- RelativePath="..\..\minizip\ioapi.c">
- </File>
- <File
- RelativePath="..\..\minizip\iowin32.c">
- </File>
- <File
- RelativePath="..\..\..\trees.c">
- </File>
- <File
- RelativePath="..\..\..\uncompr.c">
- </File>
- <File
- RelativePath="..\..\minizip\unzip.c">
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="ZLIB_INTERNAL"/>
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\..\minizip\zip.c">
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="ZLIB_INTERNAL"/>
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\zlib.rc">
- </File>
- <File
- RelativePath=".\zlibvc.def">
- </File>
- <File
- RelativePath="..\..\..\zutil.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;fi;fd">
- <File
- RelativePath="..\..\..\deflate.h">
- </File>
- <File
- RelativePath="..\..\..\infblock.h">
- </File>
- <File
- RelativePath="..\..\..\infcodes.h">
- </File>
- <File
- RelativePath="..\..\..\inffast.h">
- </File>
- <File
- RelativePath="..\..\..\inftrees.h">
- </File>
- <File
- RelativePath="..\..\..\infutil.h">
- </File>
- <File
- RelativePath="..\..\..\zconf.h">
- </File>
- <File
- RelativePath="..\..\..\zlib.h">
- </File>
- <File
- RelativePath="..\..\..\zutil.h">
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe">
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/zlib/contrib/vstudio/vc8/miniunz.vcproj b/zlib/contrib/vstudio/vc9/miniunz.vcproj index 4af53e8a311..7da32b91eaf 100644 --- a/zlib/contrib/vstudio/vc8/miniunz.vcproj +++ b/zlib/contrib/vstudio/vc9/miniunz.vcproj @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="8,00"
+ Version="9.00"
Name="miniunz"
ProjectGUID="{C52F9E7B-498A-42BE-8DB4-85A15694382A}"
Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
@@ -76,6 +77,8 @@ GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)/miniunz.pdb"
SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
TargetMachine="1"
/>
<Tool
@@ -97,16 +100,13 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
- Name="Debug|x64"
- OutputDirectory="x64\MiniUnzip$(ConfigurationName)"
- IntermediateDirectory="x64\MiniUnzip$(ConfigurationName)\Tmp"
+ Name="Release|Win32"
+ OutputDirectory="x86\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="x86\MiniUnzip$(ConfigurationName)\Tmp"
ConfigurationType="1"
InheritedPropertySheets="UpgradeFromVC70.vsprops"
CharacterSet="2"
@@ -125,17 +125,19 @@ />
<Tool
Name="VCMIDLTool"
- TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="0"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
AdditionalIncludeDirectories="..\..\..;..\..\minizip"
- PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
- MinimalRebuild="true"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"
+ StringPooling="true"
BasicRuntimeChecks="0"
- RuntimeLibrary="3"
+ RuntimeLibrary="0"
BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
AssemblerListingLocation="$(IntDir)\"
WarningLevel="3"
@@ -153,14 +155,18 @@ />
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"
+ AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"
OutputFile="$(OutDir)/miniunz.exe"
- LinkIncremental="2"
+ LinkIncremental="1"
GenerateManifest="false"
GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/miniunz.pdb"
SubSystem="1"
- TargetMachine="17"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -181,16 +187,13 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
- Name="Debug|Itanium"
- OutputDirectory="ia64\MiniUnzip$(ConfigurationName)"
- IntermediateDirectory="ia64\MiniUnzip$(ConfigurationName)\Tmp"
+ Name="Debug|x64"
+ OutputDirectory="x64\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="x64\MiniUnzip$(ConfigurationName)\Tmp"
ConfigurationType="1"
InheritedPropertySheets="UpgradeFromVC70.vsprops"
CharacterSet="2"
@@ -209,7 +212,7 @@ />
<Tool
Name="VCMIDLTool"
- TargetEnvironment="2"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
@@ -237,14 +240,14 @@ />
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"
+ AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"
OutputFile="$(OutDir)/miniunz.exe"
LinkIncremental="2"
GenerateManifest="false"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)/miniunz.pdb"
SubSystem="1"
- TargetMachine="5"
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -272,9 +275,9 @@ />
</Configuration>
<Configuration
- Name="Release|Win32"
- OutputDirectory="x86\MiniUnzip$(ConfigurationName)"
- IntermediateDirectory="x86\MiniUnzip$(ConfigurationName)\Tmp"
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="ia64\MiniUnzip$(ConfigurationName)\Tmp"
ConfigurationType="1"
InheritedPropertySheets="UpgradeFromVC70.vsprops"
CharacterSet="2"
@@ -293,19 +296,17 @@ />
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="2"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- OmitFramePointers="true"
+ Optimization="0"
AdditionalIncludeDirectories="..\..\..;..\..\minizip"
- PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"
- StringPooling="true"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
BasicRuntimeChecks="0"
- RuntimeLibrary="0"
+ RuntimeLibrary="3"
BufferSecurityCheck="false"
- EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
AssemblerListingLocation="$(IntDir)\"
WarningLevel="3"
@@ -323,16 +324,14 @@ />
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"
+ AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"
OutputFile="$(OutDir)/miniunz.exe"
- LinkIncremental="1"
+ LinkIncremental="2"
GenerateManifest="false"
GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/miniunz.pdb"
SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- OptimizeForWindows98="1"
- TargetMachine="1"
+ TargetMachine="5"
/>
<Tool
Name="VCALinkTool"
diff --git a/zlib/contrib/vstudio/vc8/minizip.vcproj b/zlib/contrib/vstudio/vc9/minizip.vcproj index 85f64c4d2ac..e57e07d90c3 100644 --- a/zlib/contrib/vstudio/vc8/minizip.vcproj +++ b/zlib/contrib/vstudio/vc9/minizip.vcproj @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="8,00"
+ Version="9.00"
Name="minizip"
ProjectGUID="{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}"
Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
@@ -76,6 +77,8 @@ GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)/minizip.pdb"
SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
TargetMachine="1"
/>
<Tool
@@ -97,16 +100,13 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
- Name="Debug|x64"
- OutputDirectory="x64\$(ConfigurationName)"
- IntermediateDirectory="x64\$(ConfigurationName)"
+ Name="Release|Win32"
+ OutputDirectory="x86\MiniZip$(ConfigurationName)"
+ IntermediateDirectory="x86\MiniZip$(ConfigurationName)\Tmp"
ConfigurationType="1"
InheritedPropertySheets="UpgradeFromVC70.vsprops"
CharacterSet="2"
@@ -125,17 +125,19 @@ />
<Tool
Name="VCMIDLTool"
- TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="0"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
AdditionalIncludeDirectories="..\..\..;..\..\minizip"
- PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
- MinimalRebuild="true"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"
+ StringPooling="true"
BasicRuntimeChecks="0"
- RuntimeLibrary="3"
+ RuntimeLibrary="0"
BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
AssemblerListingLocation="$(IntDir)\"
WarningLevel="3"
@@ -153,14 +155,17 @@ />
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"
+ AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"
OutputFile="$(OutDir)/minizip.exe"
- LinkIncremental="2"
- GenerateManifest="false"
+ LinkIncremental="1"
GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/minizip.pdb"
SubSystem="1"
- TargetMachine="17"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -181,16 +186,13 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
- Name="Debug|Itanium"
- OutputDirectory="ia64\$(ConfigurationName)"
- IntermediateDirectory="ia64\$(ConfigurationName)"
+ Name="Debug|x64"
+ OutputDirectory="x64\$(ConfigurationName)"
+ IntermediateDirectory="x64\$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="UpgradeFromVC70.vsprops"
CharacterSet="2"
@@ -209,7 +211,7 @@ />
<Tool
Name="VCMIDLTool"
- TargetEnvironment="2"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
@@ -237,14 +239,14 @@ />
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"
+ AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"
OutputFile="$(OutDir)/minizip.exe"
LinkIncremental="2"
GenerateManifest="false"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)/minizip.pdb"
SubSystem="1"
- TargetMachine="5"
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -272,9 +274,9 @@ />
</Configuration>
<Configuration
- Name="Release|Win32"
- OutputDirectory="x86\MiniZip$(ConfigurationName)"
- IntermediateDirectory="x86\MiniZip$(ConfigurationName)\Tmp"
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\$(ConfigurationName)"
+ IntermediateDirectory="ia64\$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="UpgradeFromVC70.vsprops"
CharacterSet="2"
@@ -293,19 +295,17 @@ />
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="2"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- OmitFramePointers="true"
+ Optimization="0"
AdditionalIncludeDirectories="..\..\..;..\..\minizip"
- PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"
- StringPooling="true"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
BasicRuntimeChecks="0"
- RuntimeLibrary="0"
+ RuntimeLibrary="3"
BufferSecurityCheck="false"
- EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
AssemblerListingLocation="$(IntDir)\"
WarningLevel="3"
@@ -323,15 +323,14 @@ />
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"
+ AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"
OutputFile="$(OutDir)/minizip.exe"
- LinkIncremental="1"
+ LinkIncremental="2"
+ GenerateManifest="false"
GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/minizip.pdb"
SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- OptimizeForWindows98="1"
- TargetMachine="1"
+ TargetMachine="5"
/>
<Tool
Name="VCALinkTool"
diff --git a/zlib/contrib/vstudio/vc8/testzlib.vcproj b/zlib/contrib/vstudio/vc9/testzlib.vcproj index 68c3539911b..9cb0bf877f3 100644 --- a/zlib/contrib/vstudio/vc8/testzlib.vcproj +++ b/zlib/contrib/vstudio/vc9/testzlib.vcproj @@ -1,11 +1,12 @@ <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="8,00"
+ Version="9,00"
Name="testzlib"
ProjectGUID="{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}"
RootNamespace="testzlib"
Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
@@ -47,7 +48,7 @@ Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\.."
- PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
MinimalRebuild="true"
BasicRuntimeChecks="0"
RuntimeLibrary="1"
@@ -70,13 +71,15 @@ />
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj"
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj"
OutputFile="$(OutDir)/testzlib.exe"
LinkIncremental="2"
GenerateManifest="false"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
TargetMachine="1"
/>
<Tool
@@ -98,9 +101,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -128,7 +128,7 @@ <Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="..\..\.."
- PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
BasicRuntimeChecks="0"
RuntimeLibrary="3"
BufferSecurityCheck="false"
@@ -167,9 +167,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -200,7 +197,7 @@ Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\.."
- PreprocessorDefinitions="ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"
+ PreprocessorDefinitions="ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
MinimalRebuild="true"
BasicRuntimeChecks="0"
RuntimeLibrary="3"
@@ -250,9 +247,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -285,7 +279,7 @@ InlineFunctionExpansion="1"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\..\.."
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
StringPooling="true"
BasicRuntimeChecks="0"
RuntimeLibrary="0"
@@ -316,6 +310,8 @@ OptimizeReferences="2"
EnableCOMDATFolding="2"
OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
TargetMachine="1"
/>
<Tool
@@ -337,9 +333,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -368,7 +361,7 @@ <Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="..\..\.."
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
BasicRuntimeChecks="0"
RuntimeLibrary="2"
BufferSecurityCheck="false"
@@ -407,9 +400,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -443,7 +433,7 @@ InlineFunctionExpansion="1"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\..\.."
- PreprocessorDefinitions="ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"
+ PreprocessorDefinitions="ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
StringPooling="true"
BasicRuntimeChecks="0"
RuntimeLibrary="2"
@@ -495,9 +485,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -530,7 +517,7 @@ InlineFunctionExpansion="1"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\..\.."
- PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
StringPooling="true"
BasicRuntimeChecks="0"
RuntimeLibrary="0"
@@ -553,7 +540,7 @@ />
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj"
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj"
OutputFile="$(OutDir)/testzlib.exe"
LinkIncremental="1"
GenerateManifest="false"
@@ -562,6 +549,8 @@ OptimizeReferences="2"
EnableCOMDATFolding="2"
OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
TargetMachine="1"
/>
<Tool
@@ -583,9 +572,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -614,9 +600,9 @@ <Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="..\..\.."
- PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
BasicRuntimeChecks="0"
- RuntimeLibrary="2"
+ RuntimeLibrary="0"
BufferSecurityCheck="false"
AssemblerListingLocation="$(IntDir)\"
/>
@@ -653,9 +639,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -689,7 +672,7 @@ InlineFunctionExpansion="1"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\..\.."
- PreprocessorDefinitions="ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"
+ PreprocessorDefinitions="ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
StringPooling="true"
BasicRuntimeChecks="0"
RuntimeLibrary="2"
@@ -741,9 +724,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -772,82 +752,6 @@ >
</File>
<File
- RelativePath="..\..\masmx86\gvmat32c.c"
- >
- <FileConfiguration
- Name="Debug|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Itanium"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="ReleaseWithoutAsm|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="ReleaseWithoutAsm|Itanium"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Itanium"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win64 (AMD64)"
- ExcludedFromBuild="TRUE"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win64 (AMD64)"
- ExcludedFromBuild="TRUE"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="ReleaseAsm|Win64 (AMD64)"
- ExcludedFromBuild="TRUE"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- </File>
- <File
RelativePath="..\..\..\infback.c"
>
</File>
diff --git a/zlib/contrib/vstudio/vc8/testzlibdll.vcproj b/zlib/contrib/vstudio/vc9/testzlibdll.vcproj index f38ab5e08ae..b1ddde05f98 100644 --- a/zlib/contrib/vstudio/vc8/testzlibdll.vcproj +++ b/zlib/contrib/vstudio/vc9/testzlibdll.vcproj @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="8,00"
+ Version="9.00"
Name="TestZlibDll"
ProjectGUID="{C52F9E7B-498A-42BE-8DB4-85A15694366A}"
Keyword="Win32Proj"
- SignManifests="true"
+ TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
@@ -77,6 +77,8 @@ GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
TargetMachine="1"
/>
<Tool
@@ -98,16 +100,13 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
- Name="Debug|x64"
- OutputDirectory="x64\TestZlibDll$(ConfigurationName)"
- IntermediateDirectory="x64\TestZlibDll$(ConfigurationName)\Tmp"
+ Name="Release|Win32"
+ OutputDirectory="x86\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x86\TestZlibDll$(ConfigurationName)\Tmp"
ConfigurationType="1"
InheritedPropertySheets="UpgradeFromVC70.vsprops"
CharacterSet="2"
@@ -126,17 +125,19 @@ />
<Tool
Name="VCMIDLTool"
- TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="0"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
AdditionalIncludeDirectories="..\..\..;..\..\minizip"
- PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
- MinimalRebuild="true"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"
+ StringPooling="true"
BasicRuntimeChecks="0"
- RuntimeLibrary="3"
+ RuntimeLibrary="0"
BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
AssemblerListingLocation="$(IntDir)\"
WarningLevel="3"
@@ -154,14 +155,18 @@ />
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"
+ AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"
OutputFile="$(OutDir)/testzlib.exe"
- LinkIncremental="2"
+ LinkIncremental="1"
GenerateManifest="false"
GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
SubSystem="1"
- TargetMachine="17"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -182,16 +187,13 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
- Name="Debug|Itanium"
- OutputDirectory="ia64\TestZlibDll$(ConfigurationName)"
- IntermediateDirectory="ia64\TestZlibDll$(ConfigurationName)\Tmp"
+ Name="Debug|x64"
+ OutputDirectory="x64\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x64\TestZlibDll$(ConfigurationName)\Tmp"
ConfigurationType="1"
InheritedPropertySheets="UpgradeFromVC70.vsprops"
CharacterSet="2"
@@ -210,7 +212,7 @@ />
<Tool
Name="VCMIDLTool"
- TargetEnvironment="2"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
@@ -238,14 +240,14 @@ />
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"
+ AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"
OutputFile="$(OutDir)/testzlib.exe"
LinkIncremental="2"
GenerateManifest="false"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
SubSystem="1"
- TargetMachine="5"
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -273,9 +275,9 @@ />
</Configuration>
<Configuration
- Name="Release|Win32"
- OutputDirectory="x86\TestZlibDll$(ConfigurationName)"
- IntermediateDirectory="x86\TestZlibDll$(ConfigurationName)\Tmp"
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="ia64\TestZlibDll$(ConfigurationName)\Tmp"
ConfigurationType="1"
InheritedPropertySheets="UpgradeFromVC70.vsprops"
CharacterSet="2"
@@ -294,19 +296,17 @@ />
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="2"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- OmitFramePointers="true"
+ Optimization="0"
AdditionalIncludeDirectories="..\..\..;..\..\minizip"
- PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"
- StringPooling="true"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
BasicRuntimeChecks="0"
- RuntimeLibrary="0"
+ RuntimeLibrary="3"
BufferSecurityCheck="false"
- EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
AssemblerListingLocation="$(IntDir)\"
WarningLevel="3"
@@ -324,16 +324,14 @@ />
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"
+ AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"
OutputFile="$(OutDir)/testzlib.exe"
- LinkIncremental="1"
+ LinkIncremental="2"
GenerateManifest="false"
GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- OptimizeForWindows98="1"
- TargetMachine="1"
+ TargetMachine="5"
/>
<Tool
Name="VCALinkTool"
diff --git a/zlib/contrib/vstudio/vc8/zlib.rc b/zlib/contrib/vstudio/vc9/zlib.rc index 72cb8b4c31e..f82245087dd 100644 --- a/zlib/contrib/vstudio/vc8/zlib.rc +++ b/zlib/contrib/vstudio/vc9/zlib.rc @@ -2,8 +2,8 @@ #define IDR_VERSION1 1
IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
- FILEVERSION 1,2,3,0
- PRODUCTVERSION 1,2,3,0
+ FILEVERSION 1,2,5,0
+ PRODUCTVERSION 1,2,5,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS 0
FILEOS VOS_DOS_WINDOWS32
@@ -16,13 +16,13 @@ BEGIN //language ID = U.S. English, char set = Windows, Multilingual
BEGIN
- VALUE "FileDescription", "zlib data compression library\0"
- VALUE "FileVersion", "1.2.3.0\0"
+ VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
+ VALUE "FileVersion", "1.2.5\0"
VALUE "InternalName", "zlib\0"
VALUE "OriginalFilename", "zlib.dll\0"
VALUE "ProductName", "ZLib.DLL\0"
VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
- VALUE "LegalCopyright", "(C) 1995-2003 Jean-loup Gailly & Mark Adler\0"
+ VALUE "LegalCopyright", "(C) 1995-2010 Jean-loup Gailly & Mark Adler\0"
END
END
BLOCK "VarFileInfo"
diff --git a/zlib/contrib/vstudio/vc8/zlibstat.vcproj b/zlib/contrib/vstudio/vc9/zlibstat.vcproj index fb97037acf6..61c76c7c5bc 100644 --- a/zlib/contrib/vstudio/vc8/zlibstat.vcproj +++ b/zlib/contrib/vstudio/vc9/zlibstat.vcproj @@ -1,9 +1,10 @@ <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="8,00"
+ Version="9,00"
Name="zlibstat"
ProjectGUID="{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}"
+ TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
@@ -47,7 +48,7 @@ Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
ExceptionHandling="0"
RuntimeLibrary="1"
BufferSecurityCheck="false"
@@ -121,7 +122,7 @@ Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
ExceptionHandling="0"
RuntimeLibrary="3"
BufferSecurityCheck="false"
@@ -195,7 +196,7 @@ Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
ExceptionHandling="0"
RuntimeLibrary="3"
BufferSecurityCheck="false"
@@ -268,7 +269,7 @@ Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ASMV;ASMINF"
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="0"
@@ -294,7 +295,7 @@ <Tool
Name="VCLibrarianTool"
AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB"
- AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj "
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj "
OutputFile="$(OutDir)\zlibstat.lib"
SuppressStartupBanner="true"
/>
@@ -343,7 +344,7 @@ Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ASMV;ASMINF;WIN64"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="2"
@@ -418,7 +419,7 @@ Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="2"
@@ -491,7 +492,7 @@ Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="0"
@@ -565,7 +566,7 @@ Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="2"
@@ -639,7 +640,7 @@ Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="2"
@@ -708,59 +709,23 @@ >
</File>
<File
- RelativePath="..\..\masmx86\gvmat32c.c"
+ RelativePath="..\..\..\gzclose.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzguts.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzlib.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzread.c"
>
- <FileConfiguration
- Name="Debug|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Itanium"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Itanium"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="ReleaseWithoutAsm|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="ReleaseWithoutAsm|Itanium"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
</File>
<File
- RelativePath="..\..\..\gzio.c"
+ RelativePath="..\..\..\gzwrite.c"
>
</File>
<File
diff --git a/zlib/contrib/vstudio/vc8/zlibvc.def b/zlib/contrib/vstudio/vc9/zlibvc.def index a40e71541f3..0269ef722c1 100644 --- a/zlib/contrib/vstudio/vc8/zlibvc.def +++ b/zlib/contrib/vstudio/vc9/zlibvc.def @@ -1,7 +1,7 @@ +LIBRARY
+; zlib data compression and ZIP file I/O library
-VERSION 1.23
-
-HEAPSIZE 1048576,8192
+VERSION 1.24
EXPORTS
adler32 @1
@@ -90,3 +90,41 @@ EXPORTS unzGoToFilePos @101
fill_win32_filefunc @110
+
+; zlibwapi v1.2.4 added:
+ fill_win32_filefunc64 @111
+ fill_win32_filefunc64A @112
+ fill_win32_filefunc64W @113
+
+ unzOpen64 @120
+ unzOpen2_64 @121
+ unzGetGlobalInfo64 @122
+ unzGetCurrentFileInfo64 @124
+ unzGetCurrentFileZStreamPos64 @125
+ unztell64 @126
+ unzGetFilePos64 @127
+ unzGoToFilePos64 @128
+
+ zipOpen64 @130
+ zipOpen2_64 @131
+ zipOpenNewFileInZip64 @132
+ zipOpenNewFileInZip2_64 @133
+ zipOpenNewFileInZip3_64 @134
+ zipOpenNewFileInZip4_64 @135
+ zipCloseFileInZipRaw64 @136
+
+; zlib1 v1.2.4 added:
+ adler32_combine @140
+ crc32_combine @142
+ deflateSetHeader @144
+ deflateTune @145
+ gzbuffer @146
+ gzclose_r @147
+ gzclose_w @148
+ gzdirect @149
+ gzoffset @150
+ inflateGetHeader @156
+ inflateMark @157
+ inflatePrime @158
+ inflateReset2 @159
+ inflateUndermine @160
diff --git a/zlib/contrib/vstudio/vc8/zlibvc.sln b/zlib/contrib/vstudio/vc9/zlibvc.sln index a815a5549f6..b4829671f62 100644 --- a/zlib/contrib/vstudio/vc8/zlibvc.sln +++ b/zlib/contrib/vstudio/vc9/zlibvc.sln @@ -1,6 +1,6 @@ 
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}"
@@ -45,8 +45,8 @@ Global {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium
{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32
{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32
- {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = ReleaseWithoutAsm|x64
- {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = ReleaseWithoutAsm|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64
{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium
{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium
{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32
@@ -103,8 +103,8 @@ Global {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64
{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium
{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium
- {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium
- {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium
{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium
{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -119,8 +119,8 @@ Global {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64
{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium
{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium
- {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium
- {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium
{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium
{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -135,8 +135,8 @@ Global {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64
{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium
{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium
- {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium
- {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/zlib/contrib/vstudio/vc8/zlibvc.vcproj b/zlib/contrib/vstudio/vc9/zlibvc.vcproj index e717011df7e..c9a89471e70 100644 --- a/zlib/contrib/vstudio/vc8/zlibvc.vcproj +++ b/zlib/contrib/vstudio/vc9/zlibvc.vcproj @@ -1,9 +1,11 @@ <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="8,00"
+ Version="9,00"
Name="zlibvc"
ProjectGUID="{8FD826F8-3739-44E6-8CC8-997122E53B8D}"
+ RootNamespace="zlibvc"
+ TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
@@ -52,7 +54,7 @@ Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32,_CRT_SECURE_NO_DEPRECATE,ZLIB_WINAPI,ASMV,ASMINF"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF"
ExceptionHandling="0"
RuntimeLibrary="1"
BufferSecurityCheck="false"
@@ -79,7 +81,7 @@ <Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
- AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj"
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj"
OutputFile="$(OutDir)\zlibwapi.dll"
LinkIncremental="2"
SuppressStartupBanner="true"
@@ -90,6 +92,8 @@ GenerateMapFile="true"
MapFileName="$(OutDir)/zlibwapi.map"
SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
ImportLibrary="$(OutDir)/zlibwapi.lib"
/>
<Tool
@@ -111,9 +115,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -150,7 +151,7 @@ Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32,_CRT_SECURE_NO_DEPRECATE,ZLIB_WINAPI,ASMV,ASMINF;WIN64"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64"
ExceptionHandling="0"
RuntimeLibrary="3"
BufferSecurityCheck="false"
@@ -209,9 +210,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -248,7 +246,7 @@ Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;WIN64"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64"
ExceptionHandling="0"
RuntimeLibrary="3"
BufferSecurityCheck="false"
@@ -306,9 +304,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -346,7 +341,7 @@ Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32,_CRT_SECURE_NO_DEPRECATE,ZLIB_WINAPI"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="2"
@@ -386,6 +381,8 @@ MapFileName="$(OutDir)/zlibwapi.map"
SubSystem="2"
OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
ImportLibrary="$(OutDir)/zlibwapi.lib"
/>
<Tool
@@ -407,9 +404,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -447,7 +441,7 @@ Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32,_CRT_SECURE_NO_DEPRECATE,ZLIB_WINAPI;WIN64"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="2"
@@ -508,9 +502,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -548,7 +539,7 @@ Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32,_CRT_SECURE_NO_DEPRECATE,ZLIB_WINAPI;WIN64"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="2"
@@ -609,9 +600,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -649,10 +637,10 @@ Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;ASMV;ASMINF"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF"
StringPooling="true"
ExceptionHandling="0"
- RuntimeLibrary="2"
+ RuntimeLibrary="0"
BufferSecurityCheck="false"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
@@ -678,7 +666,7 @@ <Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
- AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj "
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj "
OutputFile="$(OutDir)\zlibwapi.dll"
LinkIncremental="1"
SuppressStartupBanner="true"
@@ -690,6 +678,8 @@ MapFileName="$(OutDir)/zlibwapi.map"
SubSystem="2"
OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
ImportLibrary="$(OutDir)/zlibwapi.lib"
/>
<Tool
@@ -711,9 +701,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -751,7 +738,7 @@ Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;ASMV;ASMINF;WIN64"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="2"
@@ -813,9 +800,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -853,7 +837,7 @@ Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
- PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;WIN64"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="2"
@@ -914,9 +898,6 @@ Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
@@ -945,67 +926,23 @@ >
</File>
<File
- RelativePath="..\..\masmx86\gvmat32c.c"
+ RelativePath="..\..\..\gzclose.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzguts.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzlib.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzread.c"
>
- <FileConfiguration
- Name="Debug|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Itanium"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="ReleaseWithoutAsm|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="ReleaseWithoutAsm|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="ReleaseWithoutAsm|Itanium"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Itanium"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
</File>
<File
- RelativePath="..\..\..\gzio.c"
+ RelativePath="..\..\..\gzwrite.c"
>
</File>
<File
diff --git a/zlib/crc32.c b/zlib/crc32.c index 0a85d9925e9..74bbb1ea201 100644 --- a/zlib/crc32.c +++ b/zlib/crc32.c @@ -1,5 +1,5 @@ /* crc32.c -- compute the CRC-32 of a data stream - * Copyright (C) 1995-2005 Mark Adler + * Copyright (C) 1995-2006, 2010 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h * * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster @@ -53,7 +53,7 @@ /* Definitions for doing the crc four data bytes at a time. */ #ifdef BYFOUR -# define REV(w) (((w)>>24)+(((w)>>8)&0xff00)+ \ +# define REV(w) ((((w)>>24)&0xff)+(((w)>>8)&0xff00)+ \ (((w)&0xff00)<<8)+(((w)&0xff)<<24)) local unsigned long crc32_little OF((unsigned long, const unsigned char FAR *, unsigned)); @@ -68,6 +68,8 @@ local unsigned long gf2_matrix_times OF((unsigned long *mat, unsigned long vec)); local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat)); +local uLong crc32_combine_(uLong crc1, uLong crc2, z_off64_t len2); + #ifdef DYNAMIC_CRC_TABLE @@ -219,7 +221,7 @@ const unsigned long FAR * ZEXPORT get_crc_table() unsigned long ZEXPORT crc32(crc, buf, len) unsigned long crc; const unsigned char FAR *buf; - unsigned len; + uInt len; { if (buf == Z_NULL) return 0UL; @@ -367,22 +369,22 @@ local void gf2_matrix_square(square, mat) } /* ========================================================================= */ -uLong ZEXPORT crc32_combine(crc1, crc2, len2) +local uLong crc32_combine_(crc1, crc2, len2) uLong crc1; uLong crc2; - z_off_t len2; + z_off64_t len2; { int n; unsigned long row; unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */ unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */ - /* degenerate case */ - if (len2 == 0) + /* degenerate case (also disallow negative lengths) */ + if (len2 <= 0) return crc1; /* put operator for one zero bit in odd */ - odd[0] = 0xedb88320L; /* CRC-32 polynomial */ + odd[0] = 0xedb88320UL; /* CRC-32 polynomial */ row = 1; for (n = 1; n < GF2_DIM; n++) { odd[n] = row; @@ -421,3 +423,20 @@ uLong ZEXPORT crc32_combine(crc1, crc2, len2) crc1 ^= crc2; return crc1; } + +/* ========================================================================= */ +uLong ZEXPORT crc32_combine(crc1, crc2, len2) + uLong crc1; + uLong crc2; + z_off_t len2; +{ + return crc32_combine_(crc1, crc2, len2); +} + +uLong ZEXPORT crc32_combine64(crc1, crc2, len2) + uLong crc1; + uLong crc2; + z_off64_t len2; +{ + return crc32_combine_(crc1, crc2, len2); +} diff --git a/zlib/deflate.c b/zlib/deflate.c index 1febd40adb2..9d2ae7f5af7 100644 --- a/zlib/deflate.c +++ b/zlib/deflate.c @@ -1,5 +1,5 @@ /* deflate.c -- compress data using the deflation algorithm - * Copyright (C) 1995-2005 Jean-loup Gailly. + * Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -52,7 +52,7 @@ #include "deflate.h" const char deflate_copyright[] = - " deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly "; + " deflate 1.2.5 Copyright 1995-2010 Jean-loup Gailly and Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -79,19 +79,18 @@ local block_state deflate_fast OF((deflate_state *s, int flush)); #ifndef FASTEST local block_state deflate_slow OF((deflate_state *s, int flush)); #endif +local block_state deflate_rle OF((deflate_state *s, int flush)); +local block_state deflate_huff OF((deflate_state *s, int flush)); local void lm_init OF((deflate_state *s)); local void putShortMSB OF((deflate_state *s, uInt b)); local void flush_pending OF((z_streamp strm)); local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); -#ifndef FASTEST #ifdef ASMV void match_init OF((void)); /* asm code initialization */ uInt longest_match OF((deflate_state *s, IPos cur_match)); #else local uInt longest_match OF((deflate_state *s, IPos cur_match)); #endif -#endif -local uInt longest_match_fast OF((deflate_state *s, IPos cur_match)); #ifdef DEBUG local void check_match OF((deflate_state *s, IPos start, IPos match, @@ -110,11 +109,6 @@ local void check_match OF((deflate_state *s, IPos start, IPos match, #endif /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ -#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) -/* Minimum amount of lookahead, except at the end of the input file. - * See deflate.c for comments about the MIN_MATCH+1. - */ - /* Values for max_lazy_match, good_match and max_chain_length, depending on * the desired pack level (0..9). The values given below have been tuned to * exclude worst case performance for pathological files. Better values may be @@ -288,6 +282,8 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); + s->high_water = 0; /* nothing written to s->window yet */ + s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); @@ -332,8 +328,8 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) strm->adler = adler32(strm->adler, dictionary, dictLength); if (length < MIN_MATCH) return Z_OK; - if (length > MAX_DIST(s)) { - length = MAX_DIST(s); + if (length > s->w_size) { + length = s->w_size; dictionary += dictLength - length; /* use the tail of the dictionary */ } zmemcpy(s->window, dictionary, length); @@ -435,9 +431,10 @@ int ZEXPORT deflateParams(strm, level, strategy) } func = configuration_table[s->level].func; - if (func != configuration_table[level].func && strm->total_in != 0) { + if ((strategy != s->strategy || func != configuration_table[level].func) && + strm->total_in != 0) { /* Flush the last buffer: */ - err = deflate(strm, Z_PARTIAL_FLUSH); + err = deflate(strm, Z_BLOCK); } if (s->level != level) { s->level = level; @@ -481,33 +478,66 @@ int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) * resulting from using fixed blocks instead of stored blocks, which deflate * can emit on compressed data for some combinations of the parameters. * - * This function could be more sophisticated to provide closer upper bounds - * for every combination of windowBits and memLevel, as well as wrap. - * But even the conservative upper bound of about 14% expansion does not - * seem onerous for output buffer allocation. + * This function could be more sophisticated to provide closer upper bounds for + * every combination of windowBits and memLevel. But even the conservative + * upper bound of about 14% expansion does not seem onerous for output buffer + * allocation. */ uLong ZEXPORT deflateBound(strm, sourceLen) z_streamp strm; uLong sourceLen; { deflate_state *s; - uLong destLen; + uLong complen, wraplen; + Bytef *str; - /* conservative upper bound */ - destLen = sourceLen + - ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 11; + /* conservative upper bound for compressed data */ + complen = sourceLen + + ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5; - /* if can't get parameters, return conservative bound */ + /* if can't get parameters, return conservative bound plus zlib wrapper */ if (strm == Z_NULL || strm->state == Z_NULL) - return destLen; + return complen + 6; - /* if not default parameters, return conservative bound */ + /* compute wrapper length */ s = strm->state; + switch (s->wrap) { + case 0: /* raw deflate */ + wraplen = 0; + break; + case 1: /* zlib wrapper */ + wraplen = 6 + (s->strstart ? 4 : 0); + break; + case 2: /* gzip wrapper */ + wraplen = 18; + if (s->gzhead != Z_NULL) { /* user-supplied gzip header */ + if (s->gzhead->extra != Z_NULL) + wraplen += 2 + s->gzhead->extra_len; + str = s->gzhead->name; + if (str != Z_NULL) + do { + wraplen++; + } while (*str++); + str = s->gzhead->comment; + if (str != Z_NULL) + do { + wraplen++; + } while (*str++); + if (s->gzhead->hcrc) + wraplen += 2; + } + break; + default: /* for compiler happiness */ + wraplen = 6; + } + + /* if not default parameters, return conservative bound */ if (s->w_bits != 15 || s->hash_bits != 8 + 7) - return destLen; + return complen + wraplen; /* default settings: return tight bound for that case */ - return compressBound(sourceLen); + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + + (sourceLen >> 25) + 13 - 6 + wraplen; } /* ========================================================================= @@ -557,7 +587,7 @@ int ZEXPORT deflate (strm, flush) deflate_state *s; if (strm == Z_NULL || strm->state == Z_NULL || - flush > Z_FINISH || flush < 0) { + flush > Z_BLOCK || flush < 0) { return Z_STREAM_ERROR; } s = strm->state; @@ -581,7 +611,7 @@ int ZEXPORT deflate (strm, flush) put_byte(s, 31); put_byte(s, 139); put_byte(s, 8); - if (s->gzhead == NULL) { + if (s->gzhead == Z_NULL) { put_byte(s, 0); put_byte(s, 0); put_byte(s, 0); @@ -608,7 +638,7 @@ int ZEXPORT deflate (strm, flush) (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? 4 : 0)); put_byte(s, s->gzhead->os & 0xff); - if (s->gzhead->extra != NULL) { + if (s->gzhead->extra != Z_NULL) { put_byte(s, s->gzhead->extra_len & 0xff); put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); } @@ -650,7 +680,7 @@ int ZEXPORT deflate (strm, flush) } #ifdef GZIP if (s->status == EXTRA_STATE) { - if (s->gzhead->extra != NULL) { + if (s->gzhead->extra != Z_NULL) { uInt beg = s->pending; /* start of bytes to update crc */ while (s->gzindex < (s->gzhead->extra_len & 0xffff)) { @@ -678,7 +708,7 @@ int ZEXPORT deflate (strm, flush) s->status = NAME_STATE; } if (s->status == NAME_STATE) { - if (s->gzhead->name != NULL) { + if (s->gzhead->name != Z_NULL) { uInt beg = s->pending; /* start of bytes to update crc */ int val; @@ -709,7 +739,7 @@ int ZEXPORT deflate (strm, flush) s->status = COMMENT_STATE; } if (s->status == COMMENT_STATE) { - if (s->gzhead->comment != NULL) { + if (s->gzhead->comment != Z_NULL) { uInt beg = s->pending; /* start of bytes to update crc */ int val; @@ -787,7 +817,9 @@ int ZEXPORT deflate (strm, flush) (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { block_state bstate; - bstate = (*(configuration_table[s->level].func))(s, flush); + bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : + (s->strategy == Z_RLE ? deflate_rle(s, flush) : + (*(configuration_table[s->level].func))(s, flush)); if (bstate == finish_started || bstate == finish_done) { s->status = FINISH_STATE; @@ -808,13 +840,17 @@ int ZEXPORT deflate (strm, flush) if (bstate == block_done) { if (flush == Z_PARTIAL_FLUSH) { _tr_align(s); - } else { /* FULL_FLUSH or SYNC_FLUSH */ + } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ _tr_stored_block(s, (char*)0, 0L, 0); /* For a full flush, this empty block will be recognized * as a special marker by inflate_sync(). */ if (flush == Z_FULL_FLUSH) { CLEAR_HASH(s); /* forget history */ + if (s->lookahead == 0) { + s->strstart = 0; + s->block_start = 0L; + } } } flush_pending(strm); @@ -1167,12 +1203,13 @@ local uInt longest_match(s, cur_match) return s->lookahead; } #endif /* ASMV */ -#endif /* FASTEST */ + +#else /* FASTEST */ /* --------------------------------------------------------------------------- - * Optimized version for level == 1 or strategy == Z_RLE only + * Optimized version for FASTEST only */ -local uInt longest_match_fast(s, cur_match) +local uInt longest_match(s, cur_match) deflate_state *s; IPos cur_match; /* current match */ { @@ -1225,6 +1262,8 @@ local uInt longest_match_fast(s, cur_match) return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead; } +#endif /* FASTEST */ + #ifdef DEBUG /* =========================================================================== * Check that the match at match_start is indeed a match. @@ -1303,7 +1342,6 @@ local void fill_window(s) later. (Using level 0 permanently is not an optimal usage of zlib, so we don't care about this pathological case.) */ - /* %%% avoid this when Z_RLE */ n = s->hash_size; p = &s->head[n]; do { @@ -1355,27 +1393,61 @@ local void fill_window(s) */ } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ + if (s->high_water < s->window_size) { + ulg curr = s->strstart + (ulg)(s->lookahead); + ulg init; + + if (s->high_water < curr) { + /* Previous high water mark below current data -- zero WIN_INIT + * bytes or up to end of window, whichever is less. + */ + init = s->window_size - curr; + if (init > WIN_INIT) + init = WIN_INIT; + zmemzero(s->window + curr, (unsigned)init); + s->high_water = curr + init; + } + else if (s->high_water < (ulg)curr + WIN_INIT) { + /* High water mark at or above current data, but below current data + * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up + * to end of window, whichever is less. + */ + init = (ulg)curr + WIN_INIT - s->high_water; + if (init > s->window_size - s->high_water) + init = s->window_size - s->high_water; + zmemzero(s->window + s->high_water, (unsigned)init); + s->high_water += init; + } + } } /* =========================================================================== * Flush the current block, with given end-of-file flag. * IN assertion: strstart is set to the end of the current match. */ -#define FLUSH_BLOCK_ONLY(s, eof) { \ +#define FLUSH_BLOCK_ONLY(s, last) { \ _tr_flush_block(s, (s->block_start >= 0L ? \ (charf *)&s->window[(unsigned)s->block_start] : \ (charf *)Z_NULL), \ (ulg)((long)s->strstart - s->block_start), \ - (eof)); \ + (last)); \ s->block_start = s->strstart; \ flush_pending(s->strm); \ Tracev((stderr,"[FLUSH]")); \ } /* Same but force premature exit if necessary. */ -#define FLUSH_BLOCK(s, eof) { \ - FLUSH_BLOCK_ONLY(s, eof); \ - if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \ +#define FLUSH_BLOCK(s, last) { \ + FLUSH_BLOCK_ONLY(s, last); \ + if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \ } /* =========================================================================== @@ -1449,7 +1521,7 @@ local block_state deflate_fast(s, flush) deflate_state *s; int flush; { - IPos hash_head = NIL; /* head of the hash chain */ + IPos hash_head; /* head of the hash chain */ int bflush; /* set if current block must be flushed */ for (;;) { @@ -1469,6 +1541,7 @@ local block_state deflate_fast(s, flush) /* Insert the string window[strstart .. strstart+2] in the * dictionary, and set hash_head to the head of the hash chain: */ + hash_head = NIL; if (s->lookahead >= MIN_MATCH) { INSERT_STRING(s, s->strstart, hash_head); } @@ -1481,19 +1554,8 @@ local block_state deflate_fast(s, flush) * of window index 0 (in particular we have to avoid a match * of the string with itself at the start of the input file). */ -#ifdef FASTEST - if ((s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) || - (s->strategy == Z_RLE && s->strstart - hash_head == 1)) { - s->match_length = longest_match_fast (s, hash_head); - } -#else - if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) { - s->match_length = longest_match (s, hash_head); - } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { - s->match_length = longest_match_fast (s, hash_head); - } -#endif - /* longest_match() or longest_match_fast() sets match_start */ + s->match_length = longest_match (s, hash_head); + /* longest_match() sets match_start */ } if (s->match_length >= MIN_MATCH) { check_match(s, s->strstart, s->match_start, s->match_length); @@ -1555,7 +1617,7 @@ local block_state deflate_slow(s, flush) deflate_state *s; int flush; { - IPos hash_head = NIL; /* head of hash chain */ + IPos hash_head; /* head of hash chain */ int bflush; /* set if current block must be flushed */ /* Process the input block. */ @@ -1576,6 +1638,7 @@ local block_state deflate_slow(s, flush) /* Insert the string window[strstart .. strstart+2] in the * dictionary, and set hash_head to the head of the hash chain: */ + hash_head = NIL; if (s->lookahead >= MIN_MATCH) { INSERT_STRING(s, s->strstart, hash_head); } @@ -1591,12 +1654,8 @@ local block_state deflate_slow(s, flush) * of window index 0 (in particular we have to avoid a match * of the string with itself at the start of the input file). */ - if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) { - s->match_length = longest_match (s, hash_head); - } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { - s->match_length = longest_match_fast (s, hash_head); - } - /* longest_match() or longest_match_fast() sets match_start */ + s->match_length = longest_match (s, hash_head); + /* longest_match() sets match_start */ if (s->match_length <= 5 && (s->strategy == Z_FILTERED #if TOO_FAR <= 32767 @@ -1674,7 +1733,6 @@ local block_state deflate_slow(s, flush) } #endif /* FASTEST */ -#if 0 /* =========================================================================== * For Z_RLE, simply look for runs of bytes, generate matches only of distance * one. Do not maintain a hash table. (It will be regenerated if this run of @@ -1684,11 +1742,9 @@ local block_state deflate_rle(s, flush) deflate_state *s; int flush; { - int bflush; /* set if current block must be flushed */ - uInt run; /* length of run */ - uInt max; /* maximum length of run */ - uInt prev; /* byte at distance one to match */ - Bytef *scan; /* scan for end of run */ + int bflush; /* set if current block must be flushed */ + uInt prev; /* byte at distance one to match */ + Bytef *scan, *strend; /* scan goes up to strend for length of run */ for (;;) { /* Make sure that we always have enough lookahead, except @@ -1704,23 +1760,33 @@ local block_state deflate_rle(s, flush) } /* See how many times the previous byte repeats */ - run = 0; - if (s->strstart > 0) { /* if there is a previous byte, that is */ - max = s->lookahead < MAX_MATCH ? s->lookahead : MAX_MATCH; + s->match_length = 0; + if (s->lookahead >= MIN_MATCH && s->strstart > 0) { scan = s->window + s->strstart - 1; - prev = *scan++; - do { - if (*scan++ != prev) - break; - } while (++run < max); + prev = *scan; + if (prev == *++scan && prev == *++scan && prev == *++scan) { + strend = s->window + s->strstart + MAX_MATCH; + do { + } while (prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + scan < strend); + s->match_length = MAX_MATCH - (int)(strend - scan); + if (s->match_length > s->lookahead) + s->match_length = s->lookahead; + } } /* Emit match if have run of MIN_MATCH or longer, else emit literal */ - if (run >= MIN_MATCH) { - check_match(s, s->strstart, s->strstart - 1, run); - _tr_tally_dist(s, 1, run - MIN_MATCH, bflush); - s->lookahead -= run; - s->strstart += run; + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->strstart - 1, s->match_length); + + _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + s->strstart += s->match_length; + s->match_length = 0; } else { /* No match, output a literal byte */ Tracevv((stderr,"%c", s->window[s->strstart])); @@ -1733,4 +1799,36 @@ local block_state deflate_rle(s, flush) FLUSH_BLOCK(s, flush == Z_FINISH); return flush == Z_FINISH ? finish_done : block_done; } -#endif + +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +local block_state deflate_huff(s, flush) + deflate_state *s; + int flush; +{ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s->lookahead == 0) { + fill_window(s); + if (s->lookahead == 0) { + if (flush == Z_NO_FLUSH) + return need_more; + break; /* flush the current block */ + } + } + + /* Output a literal byte */ + s->match_length = 0; + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + if (bflush) FLUSH_BLOCK(s, 0); + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} diff --git a/zlib/deflate.h b/zlib/deflate.h index b056f027ef6..184857545fc 100644 --- a/zlib/deflate.h +++ b/zlib/deflate.h @@ -1,5 +1,5 @@ /* deflate.h -- internal compression state - * Copyright (C) 1995-2004 Jean-loup Gailly + * Copyright (C) 1995-2010 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -260,6 +260,13 @@ typedef struct internal_state { * are always zero. */ + ulg high_water; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ + } FAR deflate_state; /* Output a byte on the stream. @@ -278,14 +285,18 @@ typedef struct internal_state { * distances are limited to MAX_DIST instead of WSIZE. */ +#define WIN_INIT MAX_MATCH +/* Number of bytes after end of data in window to initialize in order to avoid + memory checker errors from longest match routines */ + /* in trees.c */ -void _tr_init OF((deflate_state *s)); -int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); -void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len, - int eof)); -void _tr_align OF((deflate_state *s)); -void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, - int eof)); +void ZLIB_INTERNAL _tr_init OF((deflate_state *s)); +int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); +void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf, + ulg stored_len, int last)); +void ZLIB_INTERNAL _tr_align OF((deflate_state *s)); +void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, + ulg stored_len, int last)); #define d_code(dist) \ ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) @@ -298,11 +309,11 @@ void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, /* Inline versions of _tr_tally for speed: */ #if defined(GEN_TREES_H) || !defined(STDC) - extern uch _length_code[]; - extern uch _dist_code[]; + extern uch ZLIB_INTERNAL _length_code[]; + extern uch ZLIB_INTERNAL _dist_code[]; #else - extern const uch _length_code[]; - extern const uch _dist_code[]; + extern const uch ZLIB_INTERNAL _length_code[]; + extern const uch ZLIB_INTERNAL _dist_code[]; #endif # define _tr_tally_lit(s, c, flush) \ diff --git a/zlib/algorithm.txt b/zlib/doc/algorithm.txt index b022dde312a..34960bddacc 100644 --- a/zlib/algorithm.txt +++ b/zlib/doc/algorithm.txt @@ -121,7 +121,7 @@ At least for deflate's output that generates new trees every several 10's of kbytes. You can imagine that filling in a 2^15 entry table for a 15-bit code would take too long if you're only decoding several thousand symbols. At the other extreme, you could make a new table for every bit in the code. In fact, -that's essentially a Huffman tree. But then you spend two much time +that's essentially a Huffman tree. But then you spend too much time traversing the tree while decoding, even for short symbols. So the number of bits for the first lookup table is a trade of the time to diff --git a/zlib/doc/rfc1950.txt b/zlib/doc/rfc1950.txt new file mode 100644 index 00000000000..ce6428a0f2e --- /dev/null +++ b/zlib/doc/rfc1950.txt @@ -0,0 +1,619 @@ + + + + + + +Network Working Group P. Deutsch +Request for Comments: 1950 Aladdin Enterprises +Category: Informational J-L. Gailly + Info-ZIP + May 1996 + + + ZLIB Compressed Data Format Specification version 3.3 + +Status of This Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +IESG Note: + + The IESG takes no position on the validity of any Intellectual + Property Rights statements contained in this document. + +Notices + + Copyright (c) 1996 L. Peter Deutsch and Jean-Loup Gailly + + Permission is granted to copy and distribute this document for any + purpose and without charge, including translations into other + languages and incorporation into compilations, provided that the + copyright notice and this notice are preserved, and that any + substantive changes or deletions from the original are clearly + marked. + + A pointer to the latest version of this and related documentation in + HTML format can be found at the URL + <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>. + +Abstract + + This specification defines a lossless compressed data format. The + data can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a priori + bounded amount of intermediate storage. The format presently uses + the DEFLATE compression method but can be easily extended to use + other compression methods. It can be implemented readily in a manner + not covered by patents. This specification also defines the ADLER-32 + checksum (an extension and improvement of the Fletcher checksum), + used for detection of data corruption, and provides an algorithm for + computing it. + + + + +Deutsch & Gailly Informational [Page 1] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................ 3 + 1.6. Changes from previous versions ............................ 3 + 2. Detailed specification ......................................... 3 + 2.1. Overall conventions ....................................... 3 + 2.2. Data format ............................................... 4 + 2.3. Compliance ................................................ 7 + 3. References ..................................................... 7 + 4. Source code .................................................... 8 + 5. Security Considerations ........................................ 8 + 6. Acknowledgements ............................................... 8 + 7. Authors' Addresses ............................................. 8 + 8. Appendix: Rationale ............................................ 9 + 9. Appendix: Sample code ..........................................10 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + + * Can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a + priori bounded amount of intermediate storage, and hence can + be used in data communications or similar structures such as + Unix filters; + + * Can use a number of different compression methods; + + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely. + + The data format defined by this specification does not attempt to + allow random access to compressed data. + + + + + + + +Deutsch & Gailly Informational [Page 2] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into zlib format and/or decompress data from zlib + format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. + + 1.3. Scope + + The specification specifies a compressed data format that can be + used for in-memory compression of a sequence of arbitrary bytes. + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any data set that conforms to all + the specifications presented here; a compliant compressor must + produce data sets that conform to all the specifications presented + here. + + 1.5. Definitions of terms and conventions used + + byte: 8 bits stored or transmitted as a unit (same as an octet). + (For this specification, a byte is exactly 8 bits, even on + machines which store a character on a number of bits different + from 8.) See below, for the numbering of bits within a byte. + + 1.6. Changes from previous versions + + Version 3.1 was the first public release of this specification. + In version 3.2, some terminology was changed and the Adler-32 + sample code was rewritten for clarity. In version 3.3, the + support for a preset dictionary was introduced, and the + specification was converted to RFC style. + +2. Detailed specification + + 2.1. Overall conventions + + In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + + + +Deutsch & Gailly Informational [Page 3] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the MOST-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00000010|00001000| + +--------+--------+ + ^ ^ + | | + | + less significant byte = 8 + + more significant byte = 2 x 256 + + 2.2. Data format + + A zlib stream has the following structure: + + 0 1 + +---+---+ + |CMF|FLG| (more-->) + +---+---+ + + + + + + + + +Deutsch & Gailly Informational [Page 4] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + (if FLG.FDICT set) + + 0 1 2 3 + +---+---+---+---+ + | DICTID | (more-->) + +---+---+---+---+ + + +=====================+---+---+---+---+ + |...compressed data...| ADLER32 | + +=====================+---+---+---+---+ + + Any data which may appear after ADLER32 are not part of the zlib + stream. + + CMF (Compression Method and flags) + This byte is divided into a 4-bit compression method and a 4- + bit information field depending on the compression method. + + bits 0 to 3 CM Compression method + bits 4 to 7 CINFO Compression info + + CM (Compression method) + This identifies the compression method used in the file. CM = 8 + denotes the "deflate" compression method with a window size up + to 32K. This is the method used by gzip and PNG (see + references [1] and [2] in Chapter 3, below, for the reference + documents). CM = 15 is reserved. It might be used in a future + version of this specification to indicate the presence of an + extra field before the compressed data. + + CINFO (Compression info) + For CM = 8, CINFO is the base-2 logarithm of the LZ77 window + size, minus eight (CINFO=7 indicates a 32K window size). Values + of CINFO above 7 are not allowed in this version of the + specification. CINFO is not defined in this specification for + CM not equal to 8. + + FLG (FLaGs) + This flag byte is divided as follows: + + bits 0 to 4 FCHECK (check bits for CMF and FLG) + bit 5 FDICT (preset dictionary) + bits 6 to 7 FLEVEL (compression level) + + The FCHECK value must be such that CMF and FLG, when viewed as + a 16-bit unsigned integer stored in MSB order (CMF*256 + FLG), + is a multiple of 31. + + + + +Deutsch & Gailly Informational [Page 5] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + FDICT (Preset dictionary) + If FDICT is set, a DICT dictionary identifier is present + immediately after the FLG byte. The dictionary is a sequence of + bytes which are initially fed to the compressor without + producing any compressed output. DICT is the Adler-32 checksum + of this sequence of bytes (see the definition of ADLER32 + below). The decompressor can use this identifier to determine + which dictionary has been used by the compressor. + + FLEVEL (Compression level) + These flags are available for use by specific compression + methods. The "deflate" method (CM = 8) sets these flags as + follows: + + 0 - compressor used fastest algorithm + 1 - compressor used fast algorithm + 2 - compressor used default algorithm + 3 - compressor used maximum compression, slowest algorithm + + The information in FLEVEL is not needed for decompression; it + is there to indicate if recompression might be worthwhile. + + compressed data + For compression method 8, the compressed data is stored in the + deflate compressed data format as described in the document + "DEFLATE Compressed Data Format Specification" by L. Peter + Deutsch. (See reference [3] in Chapter 3, below) + + Other compressed data formats are not specified in this version + of the zlib specification. + + ADLER32 (Adler-32 checksum) + This contains a checksum value of the uncompressed data + (excluding any dictionary data) computed according to Adler-32 + algorithm. This algorithm is a 32-bit extension and improvement + of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073 + standard. See references [4] and [5] in Chapter 3, below) + + Adler-32 is composed of two sums accumulated per byte: s1 is + the sum of all bytes, s2 is the sum of all s1 values. Both sums + are done modulo 65521. s1 is initialized to 1, s2 to zero. The + Adler-32 checksum is stored as s2*65536 + s1 in most- + significant-byte first (network) order. + + + + + + + + +Deutsch & Gailly Informational [Page 6] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + 2.3. Compliance + + A compliant compressor must produce streams with correct CMF, FLG + and ADLER32, but need not support preset dictionaries. When the + zlib data format is used as part of another standard data format, + the compressor may use only preset dictionaries that are specified + by this other data format. If this other format does not use the + preset dictionary feature, the compressor must not set the FDICT + flag. + + A compliant decompressor must check CMF, FLG, and ADLER32, and + provide an error indication if any of these have incorrect values. + A compliant decompressor must give an error indication if CM is + not one of the values defined in this specification (only the + value 8 is permitted in this version), since another value could + indicate the presence of new features that would cause subsequent + data to be interpreted incorrectly. A compliant decompressor must + give an error indication if FDICT is set and DICTID is not the + identifier of a known preset dictionary. A decompressor may + ignore FLEVEL and still be compliant. When the zlib data format + is being used as a part of another standard format, a compliant + decompressor must support all the preset dictionaries specified by + the other format. When the other format does not use the preset + dictionary feature, a compliant decompressor must reject any + stream in which the FDICT flag is set. + +3. References + + [1] Deutsch, L.P.,"GZIP Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [2] Thomas Boutell, "PNG (Portable Network Graphics) specification", + available in ftp://ftp.uu.net/graphics/png/documents/ + + [3] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [4] Fletcher, J. G., "An Arithmetic Checksum for Serial + Transmissions," IEEE Transactions on Communications, Vol. COM-30, + No. 1, January 1982, pp. 247-252. + + [5] ITU-T Recommendation X.224, Annex D, "Checksum Algorithms," + November, 1993, pp. 144, 145. (Available from + gopher://info.itu.ch). ITU-T X.244 is also the same as ISO 8073. + + + + + + + +Deutsch & Gailly Informational [Page 7] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +4. Source code + + Source code for a C language implementation of a "zlib" compliant + library is available at ftp://ftp.uu.net/pub/archiving/zip/zlib/. + +5. Security Considerations + + A decoder that fails to check the ADLER32 checksum value may be + subject to undetected data corruption. + +6. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Jean-Loup Gailly and Mark Adler designed the zlib format and wrote + the related software described in this specification. Glenn + Randers-Pehrson converted this document to RFC and HTML format. + +7. Authors' Addresses + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: <ghost@aladdin.com> + + + Jean-Loup Gailly + + EMail: <gzip@prep.ai.mit.edu> + + Questions about the technical content of this specification can be + sent by email to + + Jean-Loup Gailly <gzip@prep.ai.mit.edu> and + Mark Adler <madler@alumni.caltech.edu> + + Editorial comments on this specification can be sent by email to + + L. Peter Deutsch <ghost@aladdin.com> and + Glenn Randers-Pehrson <randeg@alumni.rpi.edu> + + + + + + +Deutsch & Gailly Informational [Page 8] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +8. Appendix: Rationale + + 8.1. Preset dictionaries + + A preset dictionary is specially useful to compress short input + sequences. The compressor can take advantage of the dictionary + context to encode the input in a more compact manner. The + decompressor can be initialized with the appropriate context by + virtually decompressing a compressed version of the dictionary + without producing any output. However for certain compression + algorithms such as the deflate algorithm this operation can be + achieved without actually performing any decompression. + + The compressor and the decompressor must use exactly the same + dictionary. The dictionary may be fixed or may be chosen among a + certain number of predefined dictionaries, according to the kind + of input data. The decompressor can determine which dictionary has + been chosen by the compressor by checking the dictionary + identifier. This document does not specify the contents of + predefined dictionaries, since the optimal dictionaries are + application specific. Standard data formats using this feature of + the zlib specification must precisely define the allowed + dictionaries. + + 8.2. The Adler-32 algorithm + + The Adler-32 algorithm is much faster than the CRC32 algorithm yet + still provides an extremely low probability of undetected errors. + + The modulo on unsigned long accumulators can be delayed for 5552 + bytes, so the modulo operation time is negligible. If the bytes + are a, b, c, the second sum is 3a + 2b + c + 3, and so is position + and order sensitive, unlike the first sum, which is just a + checksum. That 65521 is prime is important to avoid a possible + large class of two-byte errors that leave the check unchanged. + (The Fletcher checksum uses 255, which is not prime and which also + makes the Fletcher check insensitive to single byte changes 0 <-> + 255.) + + The sum s1 is initialized to 1 instead of zero to make the length + of the sequence part of s2, so that the length does not have to be + checked separately. (Any sequence of zeroes has a Fletcher + checksum of zero.) + + + + + + + + +Deutsch & Gailly Informational [Page 9] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +9. Appendix: Sample code + + The following C code computes the Adler-32 checksum of a data buffer. + It is written for clarity, not for speed. The sample code is in the + ANSI C programming language. Non C users may find it easier to read + with these hints: + + & Bitwise AND operator. + >> Bitwise right shift operator. When applied to an + unsigned quantity, as here, right shift inserts zero bit(s) + at the left. + << Bitwise left shift operator. Left shift inserts zero + bit(s) at the right. + ++ "n++" increments the variable n. + % modulo operator: a % b is the remainder of a divided by b. + + #define BASE 65521 /* largest prime smaller than 65536 */ + + /* + Update a running Adler-32 checksum with the bytes buf[0..len-1] + and return the updated checksum. The Adler-32 checksum should be + initialized to 1. + + Usage example: + + unsigned long adler = 1L; + + while (read_buffer(buffer, length) != EOF) { + adler = update_adler32(adler, buffer, length); + } + if (adler != original_adler) error(); + */ + unsigned long update_adler32(unsigned long adler, + unsigned char *buf, int len) + { + unsigned long s1 = adler & 0xffff; + unsigned long s2 = (adler >> 16) & 0xffff; + int n; + + for (n = 0; n < len; n++) { + s1 = (s1 + buf[n]) % BASE; + s2 = (s2 + s1) % BASE; + } + return (s2 << 16) + s1; + } + + /* Return the adler32 of the bytes buf[0..len-1] */ + + + + +Deutsch & Gailly Informational [Page 10] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + unsigned long adler32(unsigned char *buf, int len) + { + return update_adler32(1L, buf, len); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deutsch & Gailly Informational [Page 11] + diff --git a/zlib/doc/rfc1951.txt b/zlib/doc/rfc1951.txt new file mode 100644 index 00000000000..403c8c722ff --- /dev/null +++ b/zlib/doc/rfc1951.txt @@ -0,0 +1,955 @@ + + + + + + +Network Working Group P. Deutsch +Request for Comments: 1951 Aladdin Enterprises +Category: Informational May 1996 + + + DEFLATE Compressed Data Format Specification version 1.3 + +Status of This Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +IESG Note: + + The IESG takes no position on the validity of any Intellectual + Property Rights statements contained in this document. + +Notices + + Copyright (c) 1996 L. Peter Deutsch + + Permission is granted to copy and distribute this document for any + purpose and without charge, including translations into other + languages and incorporation into compilations, provided that the + copyright notice and this notice are preserved, and that any + substantive changes or deletions from the original are clearly + marked. + + A pointer to the latest version of this and related documentation in + HTML format can be found at the URL + <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>. + +Abstract + + This specification defines a lossless compressed data format that + compresses data using a combination of the LZ77 algorithm and Huffman + coding, with efficiency comparable to the best currently available + general-purpose compression methods. The data can be produced or + consumed, even for an arbitrarily long sequentially presented input + data stream, using only an a priori bounded amount of intermediate + storage. The format can be implemented readily in a manner not + covered by patents. + + + + + + + + +Deutsch Informational [Page 1] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................ 3 + 1.6. Changes from previous versions ............................ 4 + 2. Compressed representation overview ............................. 4 + 3. Detailed specification ......................................... 5 + 3.1. Overall conventions ....................................... 5 + 3.1.1. Packing into bytes .................................. 5 + 3.2. Compressed block format ................................... 6 + 3.2.1. Synopsis of prefix and Huffman coding ............... 6 + 3.2.2. Use of Huffman coding in the "deflate" format ....... 7 + 3.2.3. Details of block format ............................. 9 + 3.2.4. Non-compressed blocks (BTYPE=00) ................... 11 + 3.2.5. Compressed blocks (length and distance codes) ...... 11 + 3.2.6. Compression with fixed Huffman codes (BTYPE=01) .... 12 + 3.2.7. Compression with dynamic Huffman codes (BTYPE=10) .. 13 + 3.3. Compliance ............................................... 14 + 4. Compression algorithm details ................................. 14 + 5. References .................................................... 16 + 6. Security Considerations ....................................... 16 + 7. Source code ................................................... 16 + 8. Acknowledgements .............................................. 16 + 9. Author's Address .............................................. 17 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + * Can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a + priori bounded amount of intermediate storage, and hence + can be used in data communications or similar structures + such as Unix filters; + * Compresses data with efficiency comparable to the best + currently available general-purpose compression methods, + and in particular considerably better than the "compress" + program; + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely; + + + +Deutsch Informational [Page 2] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + * Is compatible with the file format produced by the current + widely used gzip utility, in that conforming decompressors + will be able to read data produced by the existing gzip + compressor. + + The data format defined by this specification does not attempt to: + + * Allow random access to compressed data; + * Compress specialized data (e.g., raster graphics) as well + as the best currently available specialized algorithms. + + A simple counting argument shows that no lossless compression + algorithm can compress every possible input data set. For the + format defined here, the worst case expansion is 5 bytes per 32K- + byte block, i.e., a size increase of 0.015% for large data sets. + English text usually compresses by a factor of 2.5 to 3; + executable files usually compress somewhat less; graphical data + such as raster images may compress much more. + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into "deflate" format and/or decompress data from + "deflate" format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. Familiarity with the technique of Huffman coding + is helpful but not required. + + 1.3. Scope + + The specification specifies a method for representing a sequence + of bytes as a (usually shorter) sequence of bits, and a method for + packing the latter bit sequence into bytes. + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any data set that conforms to all + the specifications presented here; a compliant compressor must + produce data sets that conform to all the specifications presented + here. + + 1.5. Definitions of terms and conventions used + + Byte: 8 bits stored or transmitted as a unit (same as an octet). + For this specification, a byte is exactly 8 bits, even on machines + + + +Deutsch Informational [Page 3] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + which store a character on a number of bits different from eight. + See below, for the numbering of bits within a byte. + + String: a sequence of arbitrary bytes. + + 1.6. Changes from previous versions + + There have been no technical changes to the deflate format since + version 1.1 of this specification. In version 1.2, some + terminology was changed. Version 1.3 is a conversion of the + specification to RFC style. + +2. Compressed representation overview + + A compressed data set consists of a series of blocks, corresponding + to successive blocks of input data. The block sizes are arbitrary, + except that non-compressible blocks are limited to 65,535 bytes. + + Each block is compressed using a combination of the LZ77 algorithm + and Huffman coding. The Huffman trees for each block are independent + of those for previous or subsequent blocks; the LZ77 algorithm may + use a reference to a duplicated string occurring in a previous block, + up to 32K input bytes before. + + Each block consists of two parts: a pair of Huffman code trees that + describe the representation of the compressed data part, and a + compressed data part. (The Huffman trees themselves are compressed + using Huffman encoding.) The compressed data consists of a series of + elements of two types: literal bytes (of strings that have not been + detected as duplicated within the previous 32K input bytes), and + pointers to duplicated strings, where a pointer is represented as a + pair <length, backward distance>. The representation used in the + "deflate" format limits distances to 32K bytes and lengths to 258 + bytes, but does not limit the size of a block, except for + uncompressible blocks, which are limited as noted above. + + Each type of value (literals, distances, and lengths) in the + compressed data is represented using a Huffman code, using one code + tree for literals and lengths and a separate code tree for distances. + The code trees for each block appear in a compact form just before + the compressed data for that block. + + + + + + + + + + +Deutsch Informational [Page 4] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +3. Detailed specification + + 3.1. Overall conventions In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the least-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00001000|00000010| + +--------+--------+ + ^ ^ + | | + | + more significant byte = 2 x 256 + + less significant byte = 8 + + 3.1.1. Packing into bytes + + This document does not address the issue of the order in which + bits of a byte are transmitted on a bit-sequential medium, + since the final data format described here is byte- rather than + + + +Deutsch Informational [Page 5] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + bit-oriented. However, we describe the compressed block format + in below, as a sequence of data elements of various bit + lengths, not a sequence of bytes. We must therefore specify + how to pack these data elements into bytes to form the final + compressed byte sequence: + + * Data elements are packed into bytes in order of + increasing bit number within the byte, i.e., starting + with the least-significant bit of the byte. + * Data elements other than Huffman codes are packed + starting with the least-significant bit of the data + element. + * Huffman codes are packed starting with the most- + significant bit of the code. + + In other words, if one were to print out the compressed data as + a sequence of bytes, starting with the first byte at the + *right* margin and proceeding to the *left*, with the most- + significant bit of each byte on the left as usual, one would be + able to parse the result from right to left, with fixed-width + elements in the correct MSB-to-LSB order and Huffman codes in + bit-reversed order (i.e., with the first bit of the code in the + relative LSB position). + + 3.2. Compressed block format + + 3.2.1. Synopsis of prefix and Huffman coding + + Prefix coding represents symbols from an a priori known + alphabet by bit sequences (codes), one code for each symbol, in + a manner such that different symbols may be represented by bit + sequences of different lengths, but a parser can always parse + an encoded string unambiguously symbol-by-symbol. + + We define a prefix code in terms of a binary tree in which the + two edges descending from each non-leaf node are labeled 0 and + 1 and in which the leaf nodes correspond one-for-one with (are + labeled with) the symbols of the alphabet; then the code for a + symbol is the sequence of 0's and 1's on the edges leading from + the root to the leaf labeled with that symbol. For example: + + + + + + + + + + + +Deutsch Informational [Page 6] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + /\ Symbol Code + 0 1 ------ ---- + / \ A 00 + /\ B B 1 + 0 1 C 011 + / \ D 010 + A /\ + 0 1 + / \ + D C + + A parser can decode the next symbol from an encoded input + stream by walking down the tree from the root, at each step + choosing the edge corresponding to the next input bit. + + Given an alphabet with known symbol frequencies, the Huffman + algorithm allows the construction of an optimal prefix code + (one which represents strings with those symbol frequencies + using the fewest bits of any possible prefix codes for that + alphabet). Such a code is called a Huffman code. (See + reference [1] in Chapter 5, references for additional + information on Huffman codes.) + + Note that in the "deflate" format, the Huffman codes for the + various alphabets must not exceed certain maximum code lengths. + This constraint complicates the algorithm for computing code + lengths from symbol frequencies. Again, see Chapter 5, + references for details. + + 3.2.2. Use of Huffman coding in the "deflate" format + + The Huffman codes used for each alphabet in the "deflate" + format have two additional rules: + + * All codes of a given bit length have lexicographically + consecutive values, in the same order as the symbols + they represent; + + * Shorter codes lexicographically precede longer codes. + + + + + + + + + + + + +Deutsch Informational [Page 7] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + We could recode the example above to follow this rule as + follows, assuming that the order of the alphabet is ABCD: + + Symbol Code + ------ ---- + A 10 + B 0 + C 110 + D 111 + + I.e., 0 precedes 10 which precedes 11x, and 110 and 111 are + lexicographically consecutive. + + Given this rule, we can define the Huffman code for an alphabet + just by giving the bit lengths of the codes for each symbol of + the alphabet in order; this is sufficient to determine the + actual codes. In our example, the code is completely defined + by the sequence of bit lengths (2, 1, 3, 3). The following + algorithm generates the codes as integers, intended to be read + from most- to least-significant bit. The code lengths are + initially in tree[I].Len; the codes are produced in + tree[I].Code. + + 1) Count the number of codes for each code length. Let + bl_count[N] be the number of codes of length N, N >= 1. + + 2) Find the numerical value of the smallest code for each + code length: + + code = 0; + bl_count[0] = 0; + for (bits = 1; bits <= MAX_BITS; bits++) { + code = (code + bl_count[bits-1]) << 1; + next_code[bits] = code; + } + + 3) Assign numerical values to all codes, using consecutive + values for all codes of the same length with the base + values determined at step 2. Codes that are never used + (which have a bit length of zero) must not be assigned a + value. + + for (n = 0; n <= max_code; n++) { + len = tree[n].Len; + if (len != 0) { + tree[n].Code = next_code[len]; + next_code[len]++; + } + + + +Deutsch Informational [Page 8] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + } + + Example: + + Consider the alphabet ABCDEFGH, with bit lengths (3, 3, 3, 3, + 3, 2, 4, 4). After step 1, we have: + + N bl_count[N] + - ----------- + 2 1 + 3 5 + 4 2 + + Step 2 computes the following next_code values: + + N next_code[N] + - ------------ + 1 0 + 2 0 + 3 2 + 4 14 + + Step 3 produces the following code values: + + Symbol Length Code + ------ ------ ---- + A 3 010 + B 3 011 + C 3 100 + D 3 101 + E 3 110 + F 2 00 + G 4 1110 + H 4 1111 + + 3.2.3. Details of block format + + Each block of compressed data begins with 3 header bits + containing the following data: + + first bit BFINAL + next 2 bits BTYPE + + Note that the header bits do not necessarily begin on a byte + boundary, since a block does not necessarily occupy an integral + number of bytes. + + + + + +Deutsch Informational [Page 9] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + BFINAL is set if and only if this is the last block of the data + set. + + BTYPE specifies how the data are compressed, as follows: + + 00 - no compression + 01 - compressed with fixed Huffman codes + 10 - compressed with dynamic Huffman codes + 11 - reserved (error) + + The only difference between the two compressed cases is how the + Huffman codes for the literal/length and distance alphabets are + defined. + + In all cases, the decoding algorithm for the actual data is as + follows: + + do + read block header from input stream. + if stored with no compression + skip any remaining bits in current partially + processed byte + read LEN and NLEN (see next section) + copy LEN bytes of data to output + otherwise + if compressed with dynamic Huffman codes + read representation of code trees (see + subsection below) + loop (until end of block code recognized) + decode literal/length value from input stream + if value < 256 + copy value (literal byte) to output stream + otherwise + if value = end of block (256) + break from loop + otherwise (value = 257..285) + decode distance from input stream + + move backwards distance bytes in the output + stream, and copy length bytes from this + position to the output stream. + end loop + while not last block + + Note that a duplicated string reference may refer to a string + in a previous block; i.e., the backward distance may cross one + or more block boundaries. However a distance cannot refer past + the beginning of the output stream. (An application using a + + + +Deutsch Informational [Page 10] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + preset dictionary might discard part of the output stream; a + distance can refer to that part of the output stream anyway) + Note also that the referenced string may overlap the current + position; for example, if the last 2 bytes decoded have values + X and Y, a string reference with <length = 5, distance = 2> + adds X,Y,X,Y,X to the output stream. + + We now specify each compression method in turn. + + 3.2.4. Non-compressed blocks (BTYPE=00) + + Any bits of input up to the next byte boundary are ignored. + The rest of the block consists of the following information: + + 0 1 2 3 4... + +---+---+---+---+================================+ + | LEN | NLEN |... LEN bytes of literal data...| + +---+---+---+---+================================+ + + LEN is the number of data bytes in the block. NLEN is the + one's complement of LEN. + + 3.2.5. Compressed blocks (length and distance codes) + + As noted above, encoded data blocks in the "deflate" format + consist of sequences of symbols drawn from three conceptually + distinct alphabets: either literal bytes, from the alphabet of + byte values (0..255), or <length, backward distance> pairs, + where the length is drawn from (3..258) and the distance is + drawn from (1..32,768). In fact, the literal and length + alphabets are merged into a single alphabet (0..285), where + values 0..255 represent literal bytes, the value 256 indicates + end-of-block, and values 257..285 represent length codes + (possibly in conjunction with extra bits following the symbol + code) as follows: + + + + + + + + + + + + + + + + +Deutsch Informational [Page 11] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + Extra Extra Extra + Code Bits Length(s) Code Bits Lengths Code Bits Length(s) + ---- ---- ------ ---- ---- ------- ---- ---- ------- + 257 0 3 267 1 15,16 277 4 67-82 + 258 0 4 268 1 17,18 278 4 83-98 + 259 0 5 269 2 19-22 279 4 99-114 + 260 0 6 270 2 23-26 280 4 115-130 + 261 0 7 271 2 27-30 281 5 131-162 + 262 0 8 272 2 31-34 282 5 163-194 + 263 0 9 273 3 35-42 283 5 195-226 + 264 0 10 274 3 43-50 284 5 227-257 + 265 1 11,12 275 3 51-58 285 0 258 + 266 1 13,14 276 3 59-66 + + The extra bits should be interpreted as a machine integer + stored with the most-significant bit first, e.g., bits 1110 + represent the value 14. + + Extra Extra Extra + Code Bits Dist Code Bits Dist Code Bits Distance + ---- ---- ---- ---- ---- ------ ---- ---- -------- + 0 0 1 10 4 33-48 20 9 1025-1536 + 1 0 2 11 4 49-64 21 9 1537-2048 + 2 0 3 12 5 65-96 22 10 2049-3072 + 3 0 4 13 5 97-128 23 10 3073-4096 + 4 1 5,6 14 6 129-192 24 11 4097-6144 + 5 1 7,8 15 6 193-256 25 11 6145-8192 + 6 2 9-12 16 7 257-384 26 12 8193-12288 + 7 2 13-16 17 7 385-512 27 12 12289-16384 + 8 3 17-24 18 8 513-768 28 13 16385-24576 + 9 3 25-32 19 8 769-1024 29 13 24577-32768 + + 3.2.6. Compression with fixed Huffman codes (BTYPE=01) + + The Huffman codes for the two alphabets are fixed, and are not + represented explicitly in the data. The Huffman code lengths + for the literal/length alphabet are: + + Lit Value Bits Codes + --------- ---- ----- + 0 - 143 8 00110000 through + 10111111 + 144 - 255 9 110010000 through + 111111111 + 256 - 279 7 0000000 through + 0010111 + 280 - 287 8 11000000 through + 11000111 + + + +Deutsch Informational [Page 12] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + The code lengths are sufficient to generate the actual codes, + as described above; we show the codes in the table for added + clarity. Literal/length values 286-287 will never actually + occur in the compressed data, but participate in the code + construction. + + Distance codes 0-31 are represented by (fixed-length) 5-bit + codes, with possible additional bits as shown in the table + shown in Paragraph 3.2.5, above. Note that distance codes 30- + 31 will never actually occur in the compressed data. + + 3.2.7. Compression with dynamic Huffman codes (BTYPE=10) + + The Huffman codes for the two alphabets appear in the block + immediately after the header bits and before the actual + compressed data, first the literal/length code and then the + distance code. Each code is defined by a sequence of code + lengths, as discussed in Paragraph 3.2.2, above. For even + greater compactness, the code length sequences themselves are + compressed using a Huffman code. The alphabet for code lengths + is as follows: + + 0 - 15: Represent code lengths of 0 - 15 + 16: Copy the previous code length 3 - 6 times. + The next 2 bits indicate repeat length + (0 = 3, ... , 3 = 6) + Example: Codes 8, 16 (+2 bits 11), + 16 (+2 bits 10) will expand to + 12 code lengths of 8 (1 + 6 + 5) + 17: Repeat a code length of 0 for 3 - 10 times. + (3 bits of length) + 18: Repeat a code length of 0 for 11 - 138 times + (7 bits of length) + + A code length of 0 indicates that the corresponding symbol in + the literal/length or distance alphabet will not occur in the + block, and should not participate in the Huffman code + construction algorithm given earlier. If only one distance + code is used, it is encoded using one bit, not zero bits; in + this case there is a single code length of one, with one unused + code. One distance code of zero bits means that there are no + distance codes used at all (the data is all literals). + + We can now define the format of the block: + + 5 Bits: HLIT, # of Literal/Length codes - 257 (257 - 286) + 5 Bits: HDIST, # of Distance codes - 1 (1 - 32) + 4 Bits: HCLEN, # of Code Length codes - 4 (4 - 19) + + + +Deutsch Informational [Page 13] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + (HCLEN + 4) x 3 bits: code lengths for the code length + alphabet given just above, in the order: 16, 17, 18, + 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 + + These code lengths are interpreted as 3-bit integers + (0-7); as above, a code length of 0 means the + corresponding symbol (literal/length or distance code + length) is not used. + + HLIT + 257 code lengths for the literal/length alphabet, + encoded using the code length Huffman code + + HDIST + 1 code lengths for the distance alphabet, + encoded using the code length Huffman code + + The actual compressed data of the block, + encoded using the literal/length and distance Huffman + codes + + The literal/length symbol 256 (end of data), + encoded using the literal/length Huffman code + + The code length repeat codes can cross from HLIT + 257 to the + HDIST + 1 code lengths. In other words, all code lengths form + a single sequence of HLIT + HDIST + 258 values. + + 3.3. Compliance + + A compressor may limit further the ranges of values specified in + the previous section and still be compliant; for example, it may + limit the range of backward pointers to some value smaller than + 32K. Similarly, a compressor may limit the size of blocks so that + a compressible block fits in memory. + + A compliant decompressor must accept the full range of possible + values defined in the previous section, and must accept blocks of + arbitrary size. + +4. Compression algorithm details + + While it is the intent of this document to define the "deflate" + compressed data format without reference to any particular + compression algorithm, the format is related to the compressed + formats produced by LZ77 (Lempel-Ziv 1977, see reference [2] below); + since many variations of LZ77 are patented, it is strongly + recommended that the implementor of a compressor follow the general + algorithm presented here, which is known not to be patented per se. + The material in this section is not part of the definition of the + + + +Deutsch Informational [Page 14] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + specification per se, and a compressor need not follow it in order to + be compliant. + + The compressor terminates a block when it determines that starting a + new block with fresh trees would be useful, or when the block size + fills up the compressor's block buffer. + + The compressor uses a chained hash table to find duplicated strings, + using a hash function that operates on 3-byte sequences. At any + given point during compression, let XYZ be the next 3 input bytes to + be examined (not necessarily all different, of course). First, the + compressor examines the hash chain for XYZ. If the chain is empty, + the compressor simply writes out X as a literal byte and advances one + byte in the input. If the hash chain is not empty, indicating that + the sequence XYZ (or, if we are unlucky, some other 3 bytes with the + same hash function value) has occurred recently, the compressor + compares all strings on the XYZ hash chain with the actual input data + sequence starting at the current point, and selects the longest + match. + + The compressor searches the hash chains starting with the most recent + strings, to favor small distances and thus take advantage of the + Huffman encoding. The hash chains are singly linked. There are no + deletions from the hash chains; the algorithm simply discards matches + that are too old. To avoid a worst-case situation, very long hash + chains are arbitrarily truncated at a certain length, determined by a + run-time parameter. + + To improve overall compression, the compressor optionally defers the + selection of matches ("lazy matching"): after a match of length N has + been found, the compressor searches for a longer match starting at + the next input byte. If it finds a longer match, it truncates the + previous match to a length of one (thus producing a single literal + byte) and then emits the longer match. Otherwise, it emits the + original match, and, as described above, advances N bytes before + continuing. + + Run-time parameters also control this "lazy match" procedure. If + compression ratio is most important, the compressor attempts a + complete second search regardless of the length of the first match. + In the normal case, if the current match is "long enough", the + compressor reduces the search for a longer match, thus speeding up + the process. If speed is most important, the compressor inserts new + strings in the hash table only when no match was found, or when the + match is not "too long". This degrades the compression ratio but + saves time since there are both fewer insertions and fewer searches. + + + + + +Deutsch Informational [Page 15] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +5. References + + [1] Huffman, D. A., "A Method for the Construction of Minimum + Redundancy Codes", Proceedings of the Institute of Radio + Engineers, September 1952, Volume 40, Number 9, pp. 1098-1101. + + [2] Ziv J., Lempel A., "A Universal Algorithm for Sequential Data + Compression", IEEE Transactions on Information Theory, Vol. 23, + No. 3, pp. 337-343. + + [3] Gailly, J.-L., and Adler, M., ZLIB documentation and sources, + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [4] Gailly, J.-L., and Adler, M., GZIP documentation and sources, + available as gzip-*.tar in ftp://prep.ai.mit.edu/pub/gnu/ + + [5] Schwartz, E. S., and Kallick, B. "Generating a canonical prefix + encoding." Comm. ACM, 7,3 (Mar. 1964), pp. 166-169. + + [6] Hirschberg and Lelewer, "Efficient decoding of prefix codes," + Comm. ACM, 33,4, April 1990, pp. 449-459. + +6. Security Considerations + + Any data compression method involves the reduction of redundancy in + the data. Consequently, any corruption of the data is likely to have + severe effects and be difficult to correct. Uncompressed text, on + the other hand, will probably still be readable despite the presence + of some corrupted bytes. + + It is recommended that systems using this data format provide some + means of validating the integrity of the compressed data. See + reference [3], for example. + +7. Source code + + Source code for a C language implementation of a "deflate" compliant + compressor and decompressor is available within the zlib package at + ftp://ftp.uu.net/pub/archiving/zip/zlib/. + +8. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Phil Katz designed the deflate format. Jean-Loup Gailly and Mark + Adler wrote the related software described in this specification. + Glenn Randers-Pehrson converted this document to RFC and HTML format. + + + +Deutsch Informational [Page 16] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +9. Author's Address + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: <ghost@aladdin.com> + + Questions about the technical content of this specification can be + sent by email to: + + Jean-Loup Gailly <gzip@prep.ai.mit.edu> and + Mark Adler <madler@alumni.caltech.edu> + + Editorial comments on this specification can be sent by email to: + + L. Peter Deutsch <ghost@aladdin.com> and + Glenn Randers-Pehrson <randeg@alumni.rpi.edu> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deutsch Informational [Page 17] + diff --git a/zlib/doc/rfc1952.txt b/zlib/doc/rfc1952.txt new file mode 100644 index 00000000000..a8e51b4567f --- /dev/null +++ b/zlib/doc/rfc1952.txt @@ -0,0 +1,675 @@ + + + + + + +Network Working Group P. Deutsch +Request for Comments: 1952 Aladdin Enterprises +Category: Informational May 1996 + + + GZIP file format specification version 4.3 + +Status of This Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +IESG Note: + + The IESG takes no position on the validity of any Intellectual + Property Rights statements contained in this document. + +Notices + + Copyright (c) 1996 L. Peter Deutsch + + Permission is granted to copy and distribute this document for any + purpose and without charge, including translations into other + languages and incorporation into compilations, provided that the + copyright notice and this notice are preserved, and that any + substantive changes or deletions from the original are clearly + marked. + + A pointer to the latest version of this and related documentation in + HTML format can be found at the URL + <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>. + +Abstract + + This specification defines a lossless compressed data format that is + compatible with the widely used GZIP utility. The format includes a + cyclic redundancy check value for detecting data corruption. The + format presently uses the DEFLATE method of compression but can be + easily extended to use other compression methods. The format can be + implemented readily in a manner not covered by patents. + + + + + + + + + + +Deutsch Informational [Page 1] + +RFC 1952 GZIP File Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................. 3 + 1.6. Changes from previous versions ............................ 3 + 2. Detailed specification ......................................... 4 + 2.1. Overall conventions ....................................... 4 + 2.2. File format ............................................... 5 + 2.3. Member format ............................................. 5 + 2.3.1. Member header and trailer ........................... 6 + 2.3.1.1. Extra field ................................... 8 + 2.3.1.2. Compliance .................................... 9 + 3. References .................................................. 9 + 4. Security Considerations .................................... 10 + 5. Acknowledgements ........................................... 10 + 6. Author's Address ........................................... 10 + 7. Appendix: Jean-Loup Gailly's gzip utility .................. 11 + 8. Appendix: Sample CRC Code .................................. 11 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + * Can compress or decompress a data stream (as opposed to a + randomly accessible file) to produce another data stream, + using only an a priori bounded amount of intermediate + storage, and hence can be used in data communications or + similar structures such as Unix filters; + * Compresses data with efficiency comparable to the best + currently available general-purpose compression methods, + and in particular considerably better than the "compress" + program; + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely; + * Is compatible with the file format produced by the current + widely used gzip utility, in that conforming decompressors + will be able to read data produced by the existing gzip + compressor. + + + + +Deutsch Informational [Page 2] + +RFC 1952 GZIP File Format Specification May 1996 + + + The data format defined by this specification does not attempt to: + + * Provide random access to compressed data; + * Compress specialized data (e.g., raster graphics) as well as + the best currently available specialized algorithms. + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into gzip format and/or decompress data from gzip + format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. + + 1.3. Scope + + The specification specifies a compression method and a file format + (the latter assuming only that a file can store a sequence of + arbitrary bytes). It does not specify any particular interface to + a file system or anything about character sets or encodings + (except for file names and comments, which are optional). + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any file that conforms to all the + specifications presented here; a compliant compressor must produce + files that conform to all the specifications presented here. The + material in the appendices is not part of the specification per se + and is not relevant to compliance. + + 1.5. Definitions of terms and conventions used + + byte: 8 bits stored or transmitted as a unit (same as an octet). + (For this specification, a byte is exactly 8 bits, even on + machines which store a character on a number of bits different + from 8.) See below for the numbering of bits within a byte. + + 1.6. Changes from previous versions + + There have been no technical changes to the gzip format since + version 4.1 of this specification. In version 4.2, some + terminology was changed, and the sample CRC code was rewritten for + clarity and to eliminate the requirement for the caller to do pre- + and post-conditioning. Version 4.3 is a conversion of the + specification to RFC style. + + + +Deutsch Informational [Page 3] + +RFC 1952 GZIP File Format Specification May 1996 + + +2. Detailed specification + + 2.1. Overall conventions + + In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + This document does not address the issue of the order in which + bits of a byte are transmitted on a bit-sequential medium, since + the data format described here is byte- rather than bit-oriented. + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the least-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00001000|00000010| + +--------+--------+ + ^ ^ + | | + | + more significant byte = 2 x 256 + + less significant byte = 8 + + + +Deutsch Informational [Page 4] + +RFC 1952 GZIP File Format Specification May 1996 + + + 2.2. File format + + A gzip file consists of a series of "members" (compressed data + sets). The format of each member is specified in the following + section. The members simply appear one after another in the file, + with no additional information before, between, or after them. + + 2.3. Member format + + Each member has the following structure: + + +---+---+---+---+---+---+---+---+---+---+ + |ID1|ID2|CM |FLG| MTIME |XFL|OS | (more-->) + +---+---+---+---+---+---+---+---+---+---+ + + (if FLG.FEXTRA set) + + +---+---+=================================+ + | XLEN |...XLEN bytes of "extra field"...| (more-->) + +---+---+=================================+ + + (if FLG.FNAME set) + + +=========================================+ + |...original file name, zero-terminated...| (more-->) + +=========================================+ + + (if FLG.FCOMMENT set) + + +===================================+ + |...file comment, zero-terminated...| (more-->) + +===================================+ + + (if FLG.FHCRC set) + + +---+---+ + | CRC16 | + +---+---+ + + +=======================+ + |...compressed blocks...| (more-->) + +=======================+ + + 0 1 2 3 4 5 6 7 + +---+---+---+---+---+---+---+---+ + | CRC32 | ISIZE | + +---+---+---+---+---+---+---+---+ + + + + +Deutsch Informational [Page 5] + +RFC 1952 GZIP File Format Specification May 1996 + + + 2.3.1. Member header and trailer + + ID1 (IDentification 1) + ID2 (IDentification 2) + These have the fixed values ID1 = 31 (0x1f, \037), ID2 = 139 + (0x8b, \213), to identify the file as being in gzip format. + + CM (Compression Method) + This identifies the compression method used in the file. CM + = 0-7 are reserved. CM = 8 denotes the "deflate" + compression method, which is the one customarily used by + gzip and which is documented elsewhere. + + FLG (FLaGs) + This flag byte is divided into individual bits as follows: + + bit 0 FTEXT + bit 1 FHCRC + bit 2 FEXTRA + bit 3 FNAME + bit 4 FCOMMENT + bit 5 reserved + bit 6 reserved + bit 7 reserved + + If FTEXT is set, the file is probably ASCII text. This is + an optional indication, which the compressor may set by + checking a small amount of the input data to see whether any + non-ASCII characters are present. In case of doubt, FTEXT + is cleared, indicating binary data. For systems which have + different file formats for ascii text and binary data, the + decompressor can use FTEXT to choose the appropriate format. + We deliberately do not specify the algorithm used to set + this bit, since a compressor always has the option of + leaving it cleared and a decompressor always has the option + of ignoring it and letting some other program handle issues + of data conversion. + + If FHCRC is set, a CRC16 for the gzip header is present, + immediately before the compressed data. The CRC16 consists + of the two least significant bytes of the CRC32 for all + bytes of the gzip header up to and not including the CRC16. + [The FHCRC bit was never set by versions of gzip up to + 1.2.4, even though it was documented with a different + meaning in gzip 1.2.4.] + + If FEXTRA is set, optional extra fields are present, as + described in a following section. + + + +Deutsch Informational [Page 6] + +RFC 1952 GZIP File Format Specification May 1996 + + + If FNAME is set, an original file name is present, + terminated by a zero byte. The name must consist of ISO + 8859-1 (LATIN-1) characters; on operating systems using + EBCDIC or any other character set for file names, the name + must be translated to the ISO LATIN-1 character set. This + is the original name of the file being compressed, with any + directory components removed, and, if the file being + compressed is on a file system with case insensitive names, + forced to lower case. There is no original file name if the + data was compressed from a source other than a named file; + for example, if the source was stdin on a Unix system, there + is no file name. + + If FCOMMENT is set, a zero-terminated file comment is + present. This comment is not interpreted; it is only + intended for human consumption. The comment must consist of + ISO 8859-1 (LATIN-1) characters. Line breaks should be + denoted by a single line feed character (10 decimal). + + Reserved FLG bits must be zero. + + MTIME (Modification TIME) + This gives the most recent modification time of the original + file being compressed. The time is in Unix format, i.e., + seconds since 00:00:00 GMT, Jan. 1, 1970. (Note that this + may cause problems for MS-DOS and other systems that use + local rather than Universal time.) If the compressed data + did not come from a file, MTIME is set to the time at which + compression started. MTIME = 0 means no time stamp is + available. + + XFL (eXtra FLags) + These flags are available for use by specific compression + methods. The "deflate" method (CM = 8) sets these flags as + follows: + + XFL = 2 - compressor used maximum compression, + slowest algorithm + XFL = 4 - compressor used fastest algorithm + + OS (Operating System) + This identifies the type of file system on which compression + took place. This may be useful in determining end-of-line + convention for text files. The currently defined values are + as follows: + + + + + + +Deutsch Informational [Page 7] + +RFC 1952 GZIP File Format Specification May 1996 + + + 0 - FAT filesystem (MS-DOS, OS/2, NT/Win32) + 1 - Amiga + 2 - VMS (or OpenVMS) + 3 - Unix + 4 - VM/CMS + 5 - Atari TOS + 6 - HPFS filesystem (OS/2, NT) + 7 - Macintosh + 8 - Z-System + 9 - CP/M + 10 - TOPS-20 + 11 - NTFS filesystem (NT) + 12 - QDOS + 13 - Acorn RISCOS + 255 - unknown + + XLEN (eXtra LENgth) + If FLG.FEXTRA is set, this gives the length of the optional + extra field. See below for details. + + CRC32 (CRC-32) + This contains a Cyclic Redundancy Check value of the + uncompressed data computed according to CRC-32 algorithm + used in the ISO 3309 standard and in section 8.1.1.6.2 of + ITU-T recommendation V.42. (See http://www.iso.ch for + ordering ISO documents. See gopher://info.itu.ch for an + online version of ITU-T V.42.) + + ISIZE (Input SIZE) + This contains the size of the original (uncompressed) input + data modulo 2^32. + + 2.3.1.1. Extra field + + If the FLG.FEXTRA bit is set, an "extra field" is present in + the header, with total length XLEN bytes. It consists of a + series of subfields, each of the form: + + +---+---+---+---+==================================+ + |SI1|SI2| LEN |... LEN bytes of subfield data ...| + +---+---+---+---+==================================+ + + SI1 and SI2 provide a subfield ID, typically two ASCII letters + with some mnemonic value. Jean-Loup Gailly + <gzip@prep.ai.mit.edu> is maintaining a registry of subfield + IDs; please send him any subfield ID you wish to use. Subfield + IDs with SI2 = 0 are reserved for future use. The following + IDs are currently defined: + + + +Deutsch Informational [Page 8] + +RFC 1952 GZIP File Format Specification May 1996 + + + SI1 SI2 Data + ---------- ---------- ---- + 0x41 ('A') 0x70 ('P') Apollo file type information + + LEN gives the length of the subfield data, excluding the 4 + initial bytes. + + 2.3.1.2. Compliance + + A compliant compressor must produce files with correct ID1, + ID2, CM, CRC32, and ISIZE, but may set all the other fields in + the fixed-length part of the header to default values (255 for + OS, 0 for all others). The compressor must set all reserved + bits to zero. + + A compliant decompressor must check ID1, ID2, and CM, and + provide an error indication if any of these have incorrect + values. It must examine FEXTRA/XLEN, FNAME, FCOMMENT and FHCRC + at least so it can skip over the optional fields if they are + present. It need not examine any other part of the header or + trailer; in particular, a decompressor may ignore FTEXT and OS + and always produce binary output, and still be compliant. A + compliant decompressor must give an error indication if any + reserved bit is non-zero, since such a bit could indicate the + presence of a new field that would cause subsequent data to be + interpreted incorrectly. + +3. References + + [1] "Information Processing - 8-bit single-byte coded graphic + character sets - Part 1: Latin alphabet No.1" (ISO 8859-1:1987). + The ISO 8859-1 (Latin-1) character set is a superset of 7-bit + ASCII. Files defining this character set are available as + iso_8859-1.* in ftp://ftp.uu.net/graphics/png/documents/ + + [2] ISO 3309 + + [3] ITU-T recommendation V.42 + + [4] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [5] Gailly, J.-L., GZIP documentation, available as gzip-*.tar in + ftp://prep.ai.mit.edu/pub/gnu/ + + [6] Sarwate, D.V., "Computation of Cyclic Redundancy Checks via Table + Look-Up", Communications of the ACM, 31(8), pp.1008-1013. + + + + +Deutsch Informational [Page 9] + +RFC 1952 GZIP File Format Specification May 1996 + + + [7] Schwaderer, W.D., "CRC Calculation", April 85 PC Tech Journal, + pp.118-133. + + [8] ftp://ftp.adelaide.edu.au/pub/rocksoft/papers/crc_v3.txt, + describing the CRC concept. + +4. Security Considerations + + Any data compression method involves the reduction of redundancy in + the data. Consequently, any corruption of the data is likely to have + severe effects and be difficult to correct. Uncompressed text, on + the other hand, will probably still be readable despite the presence + of some corrupted bytes. + + It is recommended that systems using this data format provide some + means of validating the integrity of the compressed data, such as by + setting and checking the CRC-32 check value. + +5. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Jean-Loup Gailly designed the gzip format and wrote, with Mark Adler, + the related software described in this specification. Glenn + Randers-Pehrson converted this document to RFC and HTML format. + +6. Author's Address + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: <ghost@aladdin.com> + + Questions about the technical content of this specification can be + sent by email to: + + Jean-Loup Gailly <gzip@prep.ai.mit.edu> and + Mark Adler <madler@alumni.caltech.edu> + + Editorial comments on this specification can be sent by email to: + + L. Peter Deutsch <ghost@aladdin.com> and + Glenn Randers-Pehrson <randeg@alumni.rpi.edu> + + + +Deutsch Informational [Page 10] + +RFC 1952 GZIP File Format Specification May 1996 + + +7. Appendix: Jean-Loup Gailly's gzip utility + + The most widely used implementation of gzip compression, and the + original documentation on which this specification is based, were + created by Jean-Loup Gailly <gzip@prep.ai.mit.edu>. Since this + implementation is a de facto standard, we mention some more of its + features here. Again, the material in this section is not part of + the specification per se, and implementations need not follow it to + be compliant. + + When compressing or decompressing a file, gzip preserves the + protection, ownership, and modification time attributes on the local + file system, since there is no provision for representing protection + attributes in the gzip file format itself. Since the file format + includes a modification time, the gzip decompressor provides a + command line switch that assigns the modification time from the file, + rather than the local modification time of the compressed input, to + the decompressed output. + +8. Appendix: Sample CRC Code + + The following sample code represents a practical implementation of + the CRC (Cyclic Redundancy Check). (See also ISO 3309 and ITU-T V.42 + for a formal specification.) + + The sample code is in the ANSI C programming language. Non C users + may find it easier to read with these hints: + + & Bitwise AND operator. + ^ Bitwise exclusive-OR operator. + >> Bitwise right shift operator. When applied to an + unsigned quantity, as here, right shift inserts zero + bit(s) at the left. + ! Logical NOT operator. + ++ "n++" increments the variable n. + 0xNNN 0x introduces a hexadecimal (base 16) constant. + Suffix L indicates a long value (at least 32 bits). + + /* Table of CRCs of all 8-bit messages. */ + unsigned long crc_table[256]; + + /* Flag: has the table been computed? Initially false. */ + int crc_table_computed = 0; + + /* Make the table for a fast CRC. */ + void make_crc_table(void) + { + unsigned long c; + + + +Deutsch Informational [Page 11] + +RFC 1952 GZIP File Format Specification May 1996 + + + int n, k; + for (n = 0; n < 256; n++) { + c = (unsigned long) n; + for (k = 0; k < 8; k++) { + if (c & 1) { + c = 0xedb88320L ^ (c >> 1); + } else { + c = c >> 1; + } + } + crc_table[n] = c; + } + crc_table_computed = 1; + } + + /* + Update a running crc with the bytes buf[0..len-1] and return + the updated crc. The crc should be initialized to zero. Pre- and + post-conditioning (one's complement) is performed within this + function so it shouldn't be done by the caller. Usage example: + + unsigned long crc = 0L; + + while (read_buffer(buffer, length) != EOF) { + crc = update_crc(crc, buffer, length); + } + if (crc != original_crc) error(); + */ + unsigned long update_crc(unsigned long crc, + unsigned char *buf, int len) + { + unsigned long c = crc ^ 0xffffffffL; + int n; + + if (!crc_table_computed) + make_crc_table(); + for (n = 0; n < len; n++) { + c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8); + } + return c ^ 0xffffffffL; + } + + /* Return the CRC of the bytes buf[0..len-1]. */ + unsigned long crc(unsigned char *buf, int len) + { + return update_crc(0L, buf, len); + } + + + + +Deutsch Informational [Page 12] + diff --git a/zlib/doc/txtvsbin.txt b/zlib/doc/txtvsbin.txt new file mode 100644 index 00000000000..3d0f0634f72 --- /dev/null +++ b/zlib/doc/txtvsbin.txt @@ -0,0 +1,107 @@ +A Fast Method for Identifying Plain Text Files +============================================== + + +Introduction +------------ + +Given a file coming from an unknown source, it is sometimes desirable +to find out whether the format of that file is plain text. Although +this may appear like a simple task, a fully accurate detection of the +file type requires heavy-duty semantic analysis on the file contents. +It is, however, possible to obtain satisfactory results by employing +various heuristics. + +Previous versions of PKZip and other zip-compatible compression tools +were using a crude detection scheme: if more than 80% (4/5) of the bytes +found in a certain buffer are within the range [7..127], the file is +labeled as plain text, otherwise it is labeled as binary. A prominent +limitation of this scheme is the restriction to Latin-based alphabets. +Other alphabets, like Greek, Cyrillic or Asian, make extensive use of +the bytes within the range [128..255], and texts using these alphabets +are most often misidentified by this scheme; in other words, the rate +of false negatives is sometimes too high, which means that the recall +is low. Another weakness of this scheme is a reduced precision, due to +the false positives that may occur when binary files containing large +amounts of textual characters are misidentified as plain text. + +In this article we propose a new, simple detection scheme that features +a much increased precision and a near-100% recall. This scheme is +designed to work on ASCII, Unicode and other ASCII-derived alphabets, +and it handles single-byte encodings (ISO-8859, MacRoman, KOI8, etc.) +and variable-sized encodings (ISO-2022, UTF-8, etc.). Wider encodings +(UCS-2/UTF-16 and UCS-4/UTF-32) are not handled, however. + + +The Algorithm +------------- + +The algorithm works by dividing the set of bytecodes [0..255] into three +categories: +- The white list of textual bytecodes: + 9 (TAB), 10 (LF), 13 (CR), 32 (SPACE) to 255. +- The gray list of tolerated bytecodes: + 7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB), 27 (ESC). +- The black list of undesired, non-textual bytecodes: + 0 (NUL) to 6, 14 to 31. + +If a file contains at least one byte that belongs to the white list and +no byte that belongs to the black list, then the file is categorized as +plain text; otherwise, it is categorized as binary. (The boundary case, +when the file is empty, automatically falls into the latter category.) + + +Rationale +--------- + +The idea behind this algorithm relies on two observations. + +The first observation is that, although the full range of 7-bit codes +[0..127] is properly specified by the ASCII standard, most control +characters in the range [0..31] are not used in practice. The only +widely-used, almost universally-portable control codes are 9 (TAB), +10 (LF) and 13 (CR). There are a few more control codes that are +recognized on a reduced range of platforms and text viewers/editors: +7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB) and 27 (ESC); but these +codes are rarely (if ever) used alone, without being accompanied by +some printable text. Even the newer, portable text formats such as +XML avoid using control characters outside the list mentioned here. + +The second observation is that most of the binary files tend to contain +control characters, especially 0 (NUL). Even though the older text +detection schemes observe the presence of non-ASCII codes from the range +[128..255], the precision rarely has to suffer if this upper range is +labeled as textual, because the files that are genuinely binary tend to +contain both control characters and codes from the upper range. On the +other hand, the upper range needs to be labeled as textual, because it +is used by virtually all ASCII extensions. In particular, this range is +used for encoding non-Latin scripts. + +Since there is no counting involved, other than simply observing the +presence or the absence of some byte values, the algorithm produces +consistent results, regardless what alphabet encoding is being used. +(If counting were involved, it could be possible to obtain different +results on a text encoded, say, using ISO-8859-16 versus UTF-8.) + +There is an extra category of plain text files that are "polluted" with +one or more black-listed codes, either by mistake or by peculiar design +considerations. In such cases, a scheme that tolerates a small fraction +of black-listed codes would provide an increased recall (i.e. more true +positives). This, however, incurs a reduced precision overall, since +false positives are more likely to appear in binary files that contain +large chunks of textual data. Furthermore, "polluted" plain text should +be regarded as binary by general-purpose text detection schemes, because +general-purpose text processing algorithms might not be applicable. +Under this premise, it is safe to say that our detection method provides +a near-100% recall. + +Experiments have been run on many files coming from various platforms +and applications. We tried plain text files, system logs, source code, +formatted office documents, compiled object code, etc. The results +confirm the optimistic assumptions about the capabilities of this +algorithm. + + +-- +Cosmin Truta +Last updated: 2006-May-28 diff --git a/zlib/example.c b/zlib/example.c index 7d7342d4aa8..e30389750b2 100644 --- a/zlib/example.c +++ b/zlib/example.c @@ -1,12 +1,12 @@ /* example.c -- usage example of the zlib compression library - * Copyright (C) 1995-2004 Jean-loup Gailly. + * Copyright (C) 1995-2006 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id: example.c,v 1.1.1.2 2002/03/11 21:53:23 tromey Exp $ */ -#include <stdio.h> #include "zlib.h" +#include <stdio.h> #ifdef STDC # include <string.h> diff --git a/zlib/examples/README.examples b/zlib/examples/README.examples index 5632d7a4cc3..56a31714e56 100644 --- a/zlib/examples/README.examples +++ b/zlib/examples/README.examples @@ -1,4 +1,10 @@ -This directory contains examples of the use of zlib. +This directory contains examples of the use of zlib and other relevant +programs and documentation. + +enough.c + calculation and justification of ENOUGH parameter in inftrees.h + - calculates the maximum table space used in inflate tree + construction over all possible Huffman codes fitblk.c compress just enough input to nearly fill a requested output size @@ -23,9 +29,10 @@ gzjoin.c gzlog.c gzlog.h - efficiently maintain a message log file in gzip format - - illustrates use of raw deflate and Z_SYNC_FLUSH - - illustrates use of gzip header extra field + efficiently and robustly maintain a message log file in gzip format + - illustrates use of raw deflate, Z_PARTIAL_FLUSH, deflatePrime(), + and deflateSetDictionary() + - illustrates use of a gzip header extra field zlib_how.html painfully comprehensive description of zpipe.c (see below) diff --git a/zlib/examples/enough.c b/zlib/examples/enough.c new file mode 100644 index 00000000000..c40410badef --- /dev/null +++ b/zlib/examples/enough.c @@ -0,0 +1,569 @@ +/* enough.c -- determine the maximum size of inflate's Huffman code tables over + * all possible valid and complete Huffman codes, subject to a length limit. + * Copyright (C) 2007, 2008 Mark Adler + * Version 1.3 17 February 2008 Mark Adler + */ + +/* Version history: + 1.0 3 Jan 2007 First version (derived from codecount.c version 1.4) + 1.1 4 Jan 2007 Use faster incremental table usage computation + Prune examine() search on previously visited states + 1.2 5 Jan 2007 Comments clean up + As inflate does, decrease root for short codes + Refuse cases where inflate would increase root + 1.3 17 Feb 2008 Add argument for initial root table size + Fix bug for initial root table size == max - 1 + Use a macro to compute the history index + */ + +/* + Examine all possible Huffman codes for a given number of symbols and a + maximum code length in bits to determine the maximum table size for zilb's + inflate. Only complete Huffman codes are counted. + + Two codes are considered distinct if the vectors of the number of codes per + length are not identical. So permutations of the symbol assignments result + in the same code for the counting, as do permutations of the assignments of + the bit values to the codes (i.e. only canonical codes are counted). + + We build a code from shorter to longer lengths, determining how many symbols + are coded at each length. At each step, we have how many symbols remain to + be coded, what the last code length used was, and how many bit patterns of + that length remain unused. Then we add one to the code length and double the + number of unused patterns to graduate to the next code length. We then + assign all portions of the remaining symbols to that code length that + preserve the properties of a correct and eventually complete code. Those + properties are: we cannot use more bit patterns than are available; and when + all the symbols are used, there are exactly zero possible bit patterns + remaining. + + The inflate Huffman decoding algorithm uses two-level lookup tables for + speed. There is a single first-level table to decode codes up to root bits + in length (root == 9 in the current inflate implementation). The table + has 1 << root entries and is indexed by the next root bits of input. Codes + shorter than root bits have replicated table entries, so that the correct + entry is pointed to regardless of the bits that follow the short code. If + the code is longer than root bits, then the table entry points to a second- + level table. The size of that table is determined by the longest code with + that root-bit prefix. If that longest code has length len, then the table + has size 1 << (len - root), to index the remaining bits in that set of + codes. Each subsequent root-bit prefix then has its own sub-table. The + total number of table entries required by the code is calculated + incrementally as the number of codes at each bit length is populated. When + all of the codes are shorter than root bits, then root is reduced to the + longest code length, resulting in a single, smaller, one-level table. + + The inflate algorithm also provides for small values of root (relative to + the log2 of the number of symbols), where the shortest code has more bits + than root. In that case, root is increased to the length of the shortest + code. This program, by design, does not handle that case, so it is verified + that the number of symbols is less than 2^(root + 1). + + In order to speed up the examination (by about ten orders of magnitude for + the default arguments), the intermediate states in the build-up of a code + are remembered and previously visited branches are pruned. The memory + required for this will increase rapidly with the total number of symbols and + the maximum code length in bits. However this is a very small price to pay + for the vast speedup. + + First, all of the possible Huffman codes are counted, and reachable + intermediate states are noted by a non-zero count in a saved-results array. + Second, the intermediate states that lead to (root + 1) bit or longer codes + are used to look at all sub-codes from those junctures for their inflate + memory usage. (The amount of memory used is not affected by the number of + codes of root bits or less in length.) Third, the visited states in the + construction of those sub-codes and the associated calculation of the table + size is recalled in order to avoid recalculating from the same juncture. + Beginning the code examination at (root + 1) bit codes, which is enabled by + identifying the reachable nodes, accounts for about six of the orders of + magnitude of improvement for the default arguments. About another four + orders of magnitude come from not revisiting previous states. Out of + approximately 2x10^16 possible Huffman codes, only about 2x10^6 sub-codes + need to be examined to cover all of the possible table memory usage cases + for the default arguments of 286 symbols limited to 15-bit codes. + + Note that an unsigned long long type is used for counting. It is quite easy + to exceed the capacity of an eight-byte integer with a large number of + symbols and a large maximum code length, so multiple-precision arithmetic + would need to replace the unsigned long long arithmetic in that case. This + program will abort if an overflow occurs. The big_t type identifies where + the counting takes place. + + An unsigned long long type is also used for calculating the number of + possible codes remaining at the maximum length. This limits the maximum + code length to the number of bits in a long long minus the number of bits + needed to represent the symbols in a flat code. The code_t type identifies + where the bit pattern counting takes place. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <assert.h> + +#define local static + +/* special data types */ +typedef unsigned long long big_t; /* type for code counting */ +typedef unsigned long long code_t; /* type for bit pattern counting */ +struct tab { /* type for been here check */ + size_t len; /* length of bit vector in char's */ + char *vec; /* allocated bit vector */ +}; + +/* The array for saving results, num[], is indexed with this triplet: + + syms: number of symbols remaining to code + left: number of available bit patterns at length len + len: number of bits in the codes currently being assigned + + Those indices are constrained thusly when saving results: + + syms: 3..totsym (totsym == total symbols to code) + left: 2..syms - 1, but only the evens (so syms == 8 -> 2, 4, 6) + len: 1..max - 1 (max == maximum code length in bits) + + syms == 2 is not saved since that immediately leads to a single code. left + must be even, since it represents the number of available bit patterns at + the current length, which is double the number at the previous length. + left ends at syms-1 since left == syms immediately results in a single code. + (left > sym is not allowed since that would result in an incomplete code.) + len is less than max, since the code completes immediately when len == max. + + The offset into the array is calculated for the three indices with the + first one (syms) being outermost, and the last one (len) being innermost. + We build the array with length max-1 lists for the len index, with syms-3 + of those for each symbol. There are totsym-2 of those, with each one + varying in length as a function of sym. See the calculation of index in + count() for the index, and the calculation of size in main() for the size + of the array. + + For the deflate example of 286 symbols limited to 15-bit codes, the array + has 284,284 entries, taking up 2.17 MB for an 8-byte big_t. More than + half of the space allocated for saved results is actually used -- not all + possible triplets are reached in the generation of valid Huffman codes. + */ + +/* The array for tracking visited states, done[], is itself indexed identically + to the num[] array as described above for the (syms, left, len) triplet. + Each element in the array is further indexed by the (mem, rem) doublet, + where mem is the amount of inflate table space used so far, and rem is the + remaining unused entries in the current inflate sub-table. Each indexed + element is simply one bit indicating whether the state has been visited or + not. Since the ranges for mem and rem are not known a priori, each bit + vector is of a variable size, and grows as needed to accommodate the visited + states. mem and rem are used to calculate a single index in a triangular + array. Since the range of mem is expected in the default case to be about + ten times larger than the range of rem, the array is skewed to reduce the + memory usage, with eight times the range for mem than for rem. See the + calculations for offset and bit in beenhere() for the details. + + For the deflate example of 286 symbols limited to 15-bit codes, the bit + vectors grow to total approximately 21 MB, in addition to the 4.3 MB done[] + array itself. + */ + +/* Globals to avoid propagating constants or constant pointers recursively */ +local int max; /* maximum allowed bit length for the codes */ +local int root; /* size of base code table in bits */ +local int large; /* largest code table so far */ +local size_t size; /* number of elements in num and done */ +local int *code; /* number of symbols assigned to each bit length */ +local big_t *num; /* saved results array for code counting */ +local struct tab *done; /* states already evaluated array */ + +/* Index function for num[] and done[] */ +#define INDEX(i,j,k) (((size_t)((i-1)>>1)*((i-2)>>1)+(j>>1)-1)*(max-1)+k-1) + +/* Free allocated space. Uses globals code, num, and done. */ +local void cleanup(void) +{ + size_t n; + + if (done != NULL) { + for (n = 0; n < size; n++) + if (done[n].len) + free(done[n].vec); + free(done); + } + if (num != NULL) + free(num); + if (code != NULL) + free(code); +} + +/* Return the number of possible Huffman codes using bit patterns of lengths + len through max inclusive, coding syms symbols, with left bit patterns of + length len unused -- return -1 if there is an overflow in the counting. + Keep a record of previous results in num to prevent repeating the same + calculation. Uses the globals max and num. */ +local big_t count(int syms, int len, int left) +{ + big_t sum; /* number of possible codes from this juncture */ + big_t got; /* value returned from count() */ + int least; /* least number of syms to use at this juncture */ + int most; /* most number of syms to use at this juncture */ + int use; /* number of bit patterns to use in next call */ + size_t index; /* index of this case in *num */ + + /* see if only one possible code */ + if (syms == left) + return 1; + + /* note and verify the expected state */ + assert(syms > left && left > 0 && len < max); + + /* see if we've done this one already */ + index = INDEX(syms, left, len); + got = num[index]; + if (got) + return got; /* we have -- return the saved result */ + + /* we need to use at least this many bit patterns so that the code won't be + incomplete at the next length (more bit patterns than symbols) */ + least = (left << 1) - syms; + if (least < 0) + least = 0; + + /* we can use at most this many bit patterns, lest there not be enough + available for the remaining symbols at the maximum length (if there were + no limit to the code length, this would become: most = left - 1) */ + most = (((code_t)left << (max - len)) - syms) / + (((code_t)1 << (max - len)) - 1); + + /* count all possible codes from this juncture and add them up */ + sum = 0; + for (use = least; use <= most; use++) { + got = count(syms - use, len + 1, (left - use) << 1); + sum += got; + if (got == -1 || sum < got) /* overflow */ + return -1; + } + + /* verify that all recursive calls are productive */ + assert(sum != 0); + + /* save the result and return it */ + num[index] = sum; + return sum; +} + +/* Return true if we've been here before, set to true if not. Set a bit in a + bit vector to indicate visiting this state. Each (syms,len,left) state + has a variable size bit vector indexed by (mem,rem). The bit vector is + lengthened if needed to allow setting the (mem,rem) bit. */ +local int beenhere(int syms, int len, int left, int mem, int rem) +{ + size_t index; /* index for this state's bit vector */ + size_t offset; /* offset in this state's bit vector */ + int bit; /* mask for this state's bit */ + size_t length; /* length of the bit vector in bytes */ + char *vector; /* new or enlarged bit vector */ + + /* point to vector for (syms,left,len), bit in vector for (mem,rem) */ + index = INDEX(syms, left, len); + mem -= 1 << root; + offset = (mem >> 3) + rem; + offset = ((offset * (offset + 1)) >> 1) + rem; + bit = 1 << (mem & 7); + + /* see if we've been here */ + length = done[index].len; + if (offset < length && (done[index].vec[offset] & bit) != 0) + return 1; /* done this! */ + + /* we haven't been here before -- set the bit to show we have now */ + + /* see if we need to lengthen the vector in order to set the bit */ + if (length <= offset) { + /* if we have one already, enlarge it, zero out the appended space */ + if (length) { + do { + length <<= 1; + } while (length <= offset); + vector = realloc(done[index].vec, length); + if (vector != NULL) + memset(vector + done[index].len, 0, length - done[index].len); + } + + /* otherwise we need to make a new vector and zero it out */ + else { + length = 1 << (len - root); + while (length <= offset) + length <<= 1; + vector = calloc(length, sizeof(char)); + } + + /* in either case, bail if we can't get the memory */ + if (vector == NULL) { + fputs("abort: unable to allocate enough memory\n", stderr); + cleanup(); + exit(1); + } + + /* install the new vector */ + done[index].len = length; + done[index].vec = vector; + } + + /* set the bit */ + done[index].vec[offset] |= bit; + return 0; +} + +/* Examine all possible codes from the given node (syms, len, left). Compute + the amount of memory required to build inflate's decoding tables, where the + number of code structures used so far is mem, and the number remaining in + the current sub-table is rem. Uses the globals max, code, root, large, and + done. */ +local void examine(int syms, int len, int left, int mem, int rem) +{ + int least; /* least number of syms to use at this juncture */ + int most; /* most number of syms to use at this juncture */ + int use; /* number of bit patterns to use in next call */ + + /* see if we have a complete code */ + if (syms == left) { + /* set the last code entry */ + code[len] = left; + + /* complete computation of memory used by this code */ + while (rem < left) { + left -= rem; + rem = 1 << (len - root); + mem += rem; + } + assert(rem == left); + + /* if this is a new maximum, show the entries used and the sub-code */ + if (mem > large) { + large = mem; + printf("max %d: ", mem); + for (use = root + 1; use <= max; use++) + if (code[use]) + printf("%d[%d] ", code[use], use); + putchar('\n'); + fflush(stdout); + } + + /* remove entries as we drop back down in the recursion */ + code[len] = 0; + return; + } + + /* prune the tree if we can */ + if (beenhere(syms, len, left, mem, rem)) + return; + + /* we need to use at least this many bit patterns so that the code won't be + incomplete at the next length (more bit patterns than symbols) */ + least = (left << 1) - syms; + if (least < 0) + least = 0; + + /* we can use at most this many bit patterns, lest there not be enough + available for the remaining symbols at the maximum length (if there were + no limit to the code length, this would become: most = left - 1) */ + most = (((code_t)left << (max - len)) - syms) / + (((code_t)1 << (max - len)) - 1); + + /* occupy least table spaces, creating new sub-tables as needed */ + use = least; + while (rem < use) { + use -= rem; + rem = 1 << (len - root); + mem += rem; + } + rem -= use; + + /* examine codes from here, updating table space as we go */ + for (use = least; use <= most; use++) { + code[len] = use; + examine(syms - use, len + 1, (left - use) << 1, + mem + (rem ? 1 << (len - root) : 0), rem << 1); + if (rem == 0) { + rem = 1 << (len - root); + mem += rem; + } + rem--; + } + + /* remove entries as we drop back down in the recursion */ + code[len] = 0; +} + +/* Look at all sub-codes starting with root + 1 bits. Look at only the valid + intermediate code states (syms, left, len). For each completed code, + calculate the amount of memory required by inflate to build the decoding + tables. Find the maximum amount of memory required and show the code that + requires that maximum. Uses the globals max, root, and num. */ +local void enough(int syms) +{ + int n; /* number of remaing symbols for this node */ + int left; /* number of unused bit patterns at this length */ + size_t index; /* index of this case in *num */ + + /* clear code */ + for (n = 0; n <= max; n++) + code[n] = 0; + + /* look at all (root + 1) bit and longer codes */ + large = 1 << root; /* base table */ + if (root < max) /* otherwise, there's only a base table */ + for (n = 3; n <= syms; n++) + for (left = 2; left < n; left += 2) + { + /* look at all reachable (root + 1) bit nodes, and the + resulting codes (complete at root + 2 or more) */ + index = INDEX(n, left, root + 1); + if (root + 1 < max && num[index]) /* reachable node */ + examine(n, root + 1, left, 1 << root, 0); + + /* also look at root bit codes with completions at root + 1 + bits (not saved in num, since complete), just in case */ + if (num[index - 1] && n <= left << 1) + examine((n - left) << 1, root + 1, (n - left) << 1, + 1 << root, 0); + } + + /* done */ + printf("done: maximum of %d table entries\n", large); +} + +/* + Examine and show the total number of possible Huffman codes for a given + maximum number of symbols, initial root table size, and maximum code length + in bits -- those are the command arguments in that order. The default + values are 286, 9, and 15 respectively, for the deflate literal/length code. + The possible codes are counted for each number of coded symbols from two to + the maximum. The counts for each of those and the total number of codes are + shown. The maximum number of inflate table entires is then calculated + across all possible codes. Each new maximum number of table entries and the + associated sub-code (starting at root + 1 == 10 bits) is shown. + + To count and examine Huffman codes that are not length-limited, provide a + maximum length equal to the number of symbols minus one. + + For the deflate literal/length code, use "enough". For the deflate distance + code, use "enough 30 6". + + This uses the %llu printf format to print big_t numbers, which assumes that + big_t is an unsigned long long. If the big_t type is changed (for example + to a multiple precision type), the method of printing will also need to be + updated. + */ +int main(int argc, char **argv) +{ + int syms; /* total number of symbols to code */ + int n; /* number of symbols to code for this run */ + big_t got; /* return value of count() */ + big_t sum; /* accumulated number of codes over n */ + + /* set up globals for cleanup() */ + code = NULL; + num = NULL; + done = NULL; + + /* get arguments -- default to the deflate literal/length code */ + syms = 286; + root = 9; + max = 15; + if (argc > 1) { + syms = atoi(argv[1]); + if (argc > 2) { + root = atoi(argv[2]); + if (argc > 3) + max = atoi(argv[3]); + } + } + if (argc > 4 || syms < 2 || root < 1 || max < 1) { + fputs("invalid arguments, need: [sym >= 2 [root >= 1 [max >= 1]]]\n", + stderr); + return 1; + } + + /* if not restricting the code length, the longest is syms - 1 */ + if (max > syms - 1) + max = syms - 1; + + /* determine the number of bits in a code_t */ + n = 0; + while (((code_t)1 << n) != 0) + n++; + + /* make sure that the calculation of most will not overflow */ + if (max > n || syms - 2 >= (((code_t)0 - 1) >> (max - 1))) { + fputs("abort: code length too long for internal types\n", stderr); + return 1; + } + + /* reject impossible code requests */ + if (syms - 1 > ((code_t)1 << max) - 1) { + fprintf(stderr, "%d symbols cannot be coded in %d bits\n", + syms, max); + return 1; + } + + /* allocate code vector */ + code = calloc(max + 1, sizeof(int)); + if (code == NULL) { + fputs("abort: unable to allocate enough memory\n", stderr); + return 1; + } + + /* determine size of saved results array, checking for overflows, + allocate and clear the array (set all to zero with calloc()) */ + if (syms == 2) /* iff max == 1 */ + num = NULL; /* won't be saving any results */ + else { + size = syms >> 1; + if (size > ((size_t)0 - 1) / (n = (syms - 1) >> 1) || + (size *= n, size > ((size_t)0 - 1) / (n = max - 1)) || + (size *= n, size > ((size_t)0 - 1) / sizeof(big_t)) || + (num = calloc(size, sizeof(big_t))) == NULL) { + fputs("abort: unable to allocate enough memory\n", stderr); + cleanup(); + return 1; + } + } + + /* count possible codes for all numbers of symbols, add up counts */ + sum = 0; + for (n = 2; n <= syms; n++) { + got = count(n, 1, 2); + sum += got; + if (got == -1 || sum < got) { /* overflow */ + fputs("abort: can't count that high!\n", stderr); + cleanup(); + return 1; + } + printf("%llu %d-codes\n", got, n); + } + printf("%llu total codes for 2 to %d symbols", sum, syms); + if (max < syms - 1) + printf(" (%d-bit length limit)\n", max); + else + puts(" (no length limit)"); + + /* allocate and clear done array for beenhere() */ + if (syms == 2) + done = NULL; + else if (size > ((size_t)0 - 1) / sizeof(struct tab) || + (done = calloc(size, sizeof(struct tab))) == NULL) { + fputs("abort: unable to allocate enough memory\n", stderr); + cleanup(); + return 1; + } + + /* find and show maximum inflate table usage */ + if (root > max) /* reduce root to max length */ + root = max; + if (syms < ((code_t)1 << (root + 1))) + enough(syms); + else + puts("cannot handle minimum code lengths > root"); + + /* done */ + cleanup(); + return 0; +} diff --git a/zlib/examples/gun.c b/zlib/examples/gun.c index bfec590a002..72b0882ab86 100644 --- a/zlib/examples/gun.c +++ b/zlib/examples/gun.c @@ -1,7 +1,7 @@ /* gun.c -- simple gunzip to give an example of the use of inflateBack() - * Copyright (C) 2003, 2005 Mark Adler + * Copyright (C) 2003, 2005, 2008, 2010 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h - Version 1.3 12 June 2005 Mark Adler */ + Version 1.6 17 January 2010 Mark Adler */ /* Version history: 1.0 16 Feb 2003 First version for testing of inflateBack() @@ -15,6 +15,9 @@ 1.2 20 Mar 2005 Add Unix compress (LZW) decompression Copy file attributes from input file to output file 1.3 12 Jun 2005 Add casts for error messages [Oberhumer] + 1.4 8 Dec 2006 LZW decompression speed improvements + 1.5 9 Feb 2008 Avoid warning in latest version of gcc + 1.6 17 Jan 2010 Avoid signed/unsigned comparison warnings */ /* @@ -197,14 +200,14 @@ local int lunpipe(unsigned have, unsigned char *next, struct ind *indp, int outfile, z_stream *strm) { int last; /* last byte read by NEXT(), or -1 if EOF */ - int chunk; /* bytes left in current chunk */ + unsigned chunk; /* bytes left in current chunk */ int left; /* bits left in rem */ unsigned rem; /* unused bits from input */ int bits; /* current bits per code */ unsigned code; /* code, table traversal index */ unsigned mask; /* mask for current bits codes */ int max; /* maximum bits per code for this stream */ - int flags; /* compress flags, then block compress flag */ + unsigned flags; /* compress flags, then block compress flag */ unsigned end; /* last valid entry in prefix/suffix tables */ unsigned temp; /* current code */ unsigned prev; /* previous code */ @@ -212,6 +215,7 @@ local int lunpipe(unsigned have, unsigned char *next, struct ind *indp, unsigned stack; /* next position for reversed string */ unsigned outcnt; /* bytes in output buffer */ struct outd outd; /* output structure */ + unsigned char *p; /* set up output */ outd.outfile = outfile; @@ -322,10 +326,12 @@ local int lunpipe(unsigned have, unsigned char *next, struct ind *indp, } /* walk through linked list to generate output in reverse order */ + p = match + stack; while (code >= 256) { - match[stack++] = suffix[code]; + *p++ = suffix[code]; code = prefix[code]; } + stack = p - match; match[stack++] = (unsigned char)code; final = code; @@ -349,9 +355,11 @@ local int lunpipe(unsigned have, unsigned char *next, struct ind *indp, } outcnt = 0; } + p = match + stack; do { - outbuf[outcnt++] = match[--stack]; - } while (stack); + outbuf[outcnt++] = *--p; + } while (p > match); + stack = 0; /* loop for next code with final and prev as the last match, rem and left provide the first 0..7 bits of the next code, end is the last @@ -375,7 +383,7 @@ local int gunpipe(z_stream *strm, int infile, int outfile) { int ret, first, last; unsigned have, flags, len; - unsigned char *next; + unsigned char *next = NULL; struct ind ind, *indp; struct outd outd; @@ -471,10 +479,10 @@ local int gunpipe(z_stream *strm, int infile, int outfile) /* check trailer */ ret = Z_BUF_ERROR; - if (NEXT() != (outd.crc & 0xff) || - NEXT() != ((outd.crc >> 8) & 0xff) || - NEXT() != ((outd.crc >> 16) & 0xff) || - NEXT() != ((outd.crc >> 24) & 0xff)) { + if (NEXT() != (int)(outd.crc & 0xff) || + NEXT() != (int)((outd.crc >> 8) & 0xff) || + NEXT() != (int)((outd.crc >> 16) & 0xff) || + NEXT() != (int)((outd.crc >> 24) & 0xff)) { /* crc error */ if (last != -1) { strm->msg = (char *)"incorrect data check"; @@ -482,10 +490,10 @@ local int gunpipe(z_stream *strm, int infile, int outfile) } break; } - if (NEXT() != (outd.total & 0xff) || - NEXT() != ((outd.total >> 8) & 0xff) || - NEXT() != ((outd.total >> 16) & 0xff) || - NEXT() != ((outd.total >> 24) & 0xff)) { + if (NEXT() != (int)(outd.total & 0xff) || + NEXT() != (int)((outd.total >> 8) & 0xff) || + NEXT() != (int)((outd.total >> 16) & 0xff) || + NEXT() != (int)((outd.total >> 24) & 0xff)) { /* length error */ if (last != -1) { strm->msg = (char *)"incorrect length check"; @@ -642,8 +650,8 @@ int main(int argc, char **argv) argv++; test = 0; if (argc && strcmp(*argv, "-h") == 0) { - fprintf(stderr, "gun 1.3 (12 Jun 2005)\n"); - fprintf(stderr, "Copyright (c) 2005 Mark Adler\n"); + fprintf(stderr, "gun 1.6 (17 Jan 2010)\n"); + fprintf(stderr, "Copyright (C) 2003-2010 Mark Adler\n"); fprintf(stderr, "usage: gun [-t] [file1.gz [file2.Z ...]]\n"); return 0; } diff --git a/zlib/examples/gzlog.c b/zlib/examples/gzlog.c index f71f817c8b6..d70aacabaeb 100644 --- a/zlib/examples/gzlog.c +++ b/zlib/examples/gzlog.c @@ -1,413 +1,1058 @@ /* * gzlog.c - * Copyright (C) 2004 Mark Adler + * Copyright (C) 2004, 2008 Mark Adler, all rights reserved * For conditions of distribution and use, see copyright notice in gzlog.h - * version 1.0, 26 Nov 2004 - * + * version 2.0, 25 Apr 2008 */ -#include <string.h> /* memcmp() */ -#include <stdlib.h> /* malloc(), free(), NULL */ -#include <sys/types.h> /* size_t, off_t */ -#include <unistd.h> /* read(), close(), sleep(), ftruncate(), */ - /* lseek() */ -#include <fcntl.h> /* open() */ -#include <sys/file.h> /* flock() */ -#include "zlib.h" /* deflateInit2(), deflate(), deflateEnd() */ +/* + gzlog provides a mechanism for frequently appending short strings to a gzip + file that is efficient both in execution time and compression ratio. The + strategy is to write the short strings in an uncompressed form to the end of + the gzip file, only compressing when the amount of uncompressed data has + reached a given threshold. + + gzlog also provides protection against interruptions in the process due to + system crashes. The status of the operation is recorded in an extra field + in the gzip file, and is only updated once the gzip file is brought to a + valid state. The last data to be appended or compressed is saved in an + auxiliary file, so that if the operation is interrupted, it can be completed + the next time an append operation is attempted. + + gzlog maintains another auxiliary file with the last 32K of data from the + compressed portion, which is preloaded for the compression of the subsequent + data. This minimizes the impact to the compression ratio of appending. + */ + +/* + Operations Concept: + + Files (log name "foo"): + foo.gz -- gzip file with the complete log + foo.add -- last message to append or last data to compress + foo.dict -- dictionary of the last 32K of data for next compression + foo.temp -- temporary dictionary file for compression after this one + foo.lock -- lock file for reading and writing the other files + foo.repairs -- log file for log file recovery operations (not compressed) + + gzip file structure: + - fixed-length (no file name) header with extra field (see below) + - compressed data ending initially with empty stored block + - uncompressed data filling out originally empty stored block and + subsequent stored blocks as needed (16K max each) + - gzip trailer + - no junk at end (no other gzip streams) + + When appending data, the information in the first three items above plus the + foo.add file are sufficient to recover an interrupted append operation. The + extra field has the necessary information to restore the start of the last + stored block and determine where to append the data in the foo.add file, as + well as the crc and length of the gzip data before the append operation. + + The foo.add file is created before the gzip file is marked for append, and + deleted after the gzip file is marked as complete. So if the append + operation is interrupted, the data to add will still be there. If due to + some external force, the foo.add file gets deleted between when the append + operation was interrupted and when recovery is attempted, the gzip file will + still be restored, but without the appended data. + + When compressing data, the information in the first two items above plus the + foo.add file are sufficient to recover an interrupted compress operation. + The extra field has the necessary information to find the end of the + compressed data, and contains both the crc and length of just the compressed + data and of the complete set of data including the contents of the foo.add + file. + + Again, the foo.add file is maintained during the compress operation in case + of an interruption. If in the unlikely event the foo.add file with the data + to be compressed is missing due to some external force, a gzip file with + just the previous compressed data will be reconstructed. In this case, all + of the data that was to be compressed is lost (approximately one megabyte). + This will not occur if all that happened was an interruption of the compress + operation. + + The third state that is marked is the replacement of the old dictionary with + the new dictionary after a compress operation. Once compression is + complete, the gzip file is marked as being in the replace state. This + completes the gzip file, so an interrupt after being so marked does not + result in recompression. Then the dictionary file is replaced, and the gzip + file is marked as completed. This state prevents the possibility of + restarting compression with the wrong dictionary file. + + All three operations are wrapped by a lock/unlock procedure. In order to + gain exclusive access to the log files, first a foo.lock file must be + exclusively created. When all operations are complete, the lock is + released by deleting the foo.lock file. If when attempting to create the + lock file, it already exists and the modify time of the lock file is more + than five minutes old (set by the PATIENCE define below), then the old + lock file is considered stale and deleted, and the exclusive creation of + the lock file is retried. To assure that there are no false assessments + of the staleness of the lock file, the operations periodically touch the + lock file to update the modified date. + + Following is the definition of the extra field with all of the information + required to enable the above append and compress operations and their + recovery if interrupted. Multi-byte values are stored little endian + (consistent with the gzip format). File pointers are eight bytes long. + The crc's and lengths for the gzip trailer are four bytes long. (Note that + the length at the end of a gzip file is used for error checking only, and + for large files is actually the length modulo 2^32.) The stored block + length is two bytes long. The gzip extra field two-byte identification is + "ap" for append. It is assumed that writing the extra field to the file is + an "atomic" operation. That is, either all of the extra field is written + to the file, or none of it is, if the operation is interrupted right at the + point of updating the extra field. This is a reasonable assumption, since + the extra field is within the first 52 bytes of the file, which is smaller + than any expected block size for a mass storage device (usually 512 bytes or + larger). + + Extra field (35 bytes): + - Pointer to first stored block length -- this points to the two-byte length + of the first stored block, which is followed by the two-byte, one's + complement of that length. The stored block length is preceded by the + three-bit header of the stored block, which is the actual start of the + stored block in the deflate format. See the bit offset field below. + - Pointer to the last stored block length. This is the same as above, but + for the last stored block of the uncompressed data in the gzip file. + Initially this is the same as the first stored block length pointer. + When the stored block gets to 16K (see the MAX_STORE define), then a new + stored block as added, at which point the last stored block length pointer + is different from the first stored block length pointer. When they are + different, the first bit of the last stored block header is eight bits, or + one byte back from the block length. + - Compressed data crc and length. This is the crc and length of the data + that is in the compressed portion of the deflate stream. These are used + only in the event that the foo.add file containing the data to compress is + lost after a compress operation is interrupted. + - Total data crc and length. This is the crc and length of all of the data + stored in the gzip file, compressed and uncompressed. It is used to + reconstruct the gzip trailer when compressing, as well as when recovering + interrupted operations. + - Final stored block length. This is used to quickly find where to append, + and allows the restoration of the original final stored block state when + an append operation is interrupted. + - First stored block start as the number of bits back from the final stored + block first length byte. This value is in the range of 3..10, and is + stored as the low three bits of the final byte of the extra field after + subtracting three (0..7). This allows the last-block bit of the stored + block header to be updated when a new stored block is added, for the case + when the first stored block and the last stored block are the same. (When + they are different, the numbers of bits back is known to be eight.) This + also allows for new compressed data to be appended to the old compressed + data in the compress operation, overwriting the previous first stored + block, or for the compressed data to be terminated and a valid gzip file + reconstructed on the off chance that a compression operation was + interrupted and the data to compress in the foo.add file was deleted. + - The operation in process. This is the next two bits in the last byte (the + bits under the mask 0x18). The are interpreted as 0: nothing in process, + 1: append in process, 2: compress in process, 3: replace in process. + - The top three bits of the last byte in the extra field are reserved and + are currently set to zero. + + Main procedure: + - Exclusively create the foo.lock file using the O_CREAT and O_EXCL modes of + the system open() call. If the modify time of an existing lock file is + more than PATIENCE seconds old, then the lock file is deleted and the + exclusive create is retried. + - Load the extra field from the foo.gz file, and see if an operation was in + progress but not completed. If so, apply the recovery procedure below. + - Perform the append procedure with the provided data. + - If the uncompressed data in the foo.gz file is 1MB or more, apply the + compress procedure. + - Delete the foo.lock file. + + Append procedure: + - Put what to append in the foo.add file so that the operation can be + restarted if this procedure is interrupted. + - Mark the foo.gz extra field with the append operation in progress. + + Restore the original last-block bit and stored block length of the last + stored block from the information in the extra field, in case a previous + append operation was interrupted. + - Append the provided data to the last stored block, creating new stored + blocks as needed and updating the stored blocks last-block bits and + lengths. + - Update the crc and length with the new data, and write the gzip trailer. + - Write over the extra field (with a single write operation) with the new + pointers, lengths, and crc's, and mark the gzip file as not in process. + Though there is still a foo.add file, it will be ignored since nothing + is in process. If a foo.add file is leftover from a previously + completed operation, it is truncated when writing new data to it. + - Delete the foo.add file. + + Compress and replace procedures: + - Read all of the uncompressed data in the stored blocks in foo.gz and write + it to foo.add. Also write foo.temp with the last 32K of that data to + provide a dictionary for the next invocation of this procedure. + - Rewrite the extra field marking foo.gz with a compression in process. + * If there is no data provided to compress (due to a missing foo.add file + when recovering), reconstruct and truncate the foo.gz file to contain + only the previous compressed data and proceed to the step after the next + one. Otherwise ... + - Compress the data with the dictionary in foo.dict, and write to the + foo.gz file starting at the bit immediately following the last previously + compressed block. If there is no foo.dict, proceed anyway with the + compression at slightly reduced efficiency. (For the foo.dict file to be + missing requires some external failure beyond simply the interruption of + a compress operation.) During this process, the foo.lock file is + periodically touched to assure that that file is not considered stale by + another process before we're done. The deflation is terminated with a + non-last empty static block (10 bits long), that is then located and + written over by a last-bit-set empty stored block. + - Append the crc and length of the data in the gzip file (previously + calculated during the append operations). + - Write over the extra field with the updated stored block offsets, bits + back, crc's, and lengths, and mark foo.gz as in process for a replacement + of the dictionary. + @ Delete the foo.add file. + - Replace foo.dict with foo.temp. + - Write over the extra field, marking foo.gz as complete. + + Recovery procedure: + - If not a replace recovery, read in the foo.add file, and provide that data + to the appropriate recovery below. If there is no foo.add file, provide + a zero data length to the recovery. In that case, the append recovery + restores the foo.gz to the previous compressed + uncompressed data state. + For the the compress recovery, a missing foo.add file results in foo.gz + being restored to the previous compressed-only data state. + - Append recovery: + - Pick up append at + step above + - Compress recovery: + - Pick up compress at * step above + - Replace recovery: + - Pick up compress at @ step above + - Log the repair with a date stamp in foo.repairs + */ + +#include <sys/types.h> +#include <stdio.h> /* rename, fopen, fprintf, fclose */ +#include <stdlib.h> /* malloc, free */ +#include <string.h> /* strlen, strrchr, strcpy, strncpy, strcmp */ +#include <fcntl.h> /* open */ +#include <unistd.h> /* lseek, read, write, close, unlink, sleep, */ + /* ftruncate, fsync */ +#include <errno.h> /* errno */ +#include <time.h> /* time, ctime */ +#include <sys/stat.h> /* stat */ +#include <sys/time.h> /* utimes */ +#include "zlib.h" /* crc32 */ + +#include "gzlog.h" /* header for external access */ -#include "gzlog.h" /* interface */ #define local static +typedef unsigned int uint; +typedef unsigned long ulong; + +/* Macro for debugging to deterministically force recovery operations */ +#ifdef DEBUG + #include <setjmp.h> /* longjmp */ + jmp_buf gzlog_jump; /* where to go back to */ + int gzlog_bail = 0; /* which point to bail at (1..8) */ + int gzlog_count = -1; /* number of times through to wait */ +# define BAIL(n) do { if (n == gzlog_bail && gzlog_count-- == 0) \ + longjmp(gzlog_jump, gzlog_bail); } while (0) +#else +# define BAIL(n) +#endif + +/* how old the lock file can be in seconds before considering it stale */ +#define PATIENCE 300 + +/* maximum stored block size in Kbytes -- must be in 1..63 */ +#define MAX_STORE 16 -/* log object structure */ -typedef struct { - int id; /* object identifier */ - int fd; /* log file descriptor */ - off_t extra; /* offset of extra "ap" subfield */ - off_t mark_off; /* offset of marked data */ - off_t last_off; /* offset of last block */ - unsigned long crc; /* uncompressed crc */ - unsigned long len; /* uncompressed length (modulo 2^32) */ - unsigned stored; /* length of current stored block */ -} gz_log; - -#define GZLOGID 19334 /* gz_log object identifier */ - -#define LOCK_RETRY 1 /* retry lock once a second */ -#define LOCK_PATIENCE 1200 /* try about twenty minutes before forcing */ - -/* acquire a lock on a file */ -local int lock(int fd) +/* number of stored Kbytes to trigger compression (must be >= 32 to allow + dictionary construction, and <= 204 * MAX_STORE, in order for >> 10 to + discard the stored block headers contribution of five bytes each) */ +#define TRIGGER 1024 + +/* size of a deflate dictionary (this cannot be changed) */ +#define DICT 32768U + +/* values for the operation (2 bits) */ +#define NO_OP 0 +#define APPEND_OP 1 +#define COMPRESS_OP 2 +#define REPLACE_OP 3 + +/* macros to extract little-endian integers from an unsigned byte buffer */ +#define PULL2(p) ((p)[0]+((uint)((p)[1])<<8)) +#define PULL4(p) (PULL2(p)+((ulong)PULL2(p+2)<<16)) +#define PULL8(p) (PULL4(p)+((off_t)PULL4(p+4)<<32)) + +/* macros to store integers into a byte buffer in little-endian order */ +#define PUT2(p,a) do {(p)[0]=a;(p)[1]=(a)>>8;} while(0) +#define PUT4(p,a) do {PUT2(p,a);PUT2(p+2,a>>16);} while(0) +#define PUT8(p,a) do {PUT4(p,a);PUT4(p+4,a>>32);} while(0) + +/* internal structure for log information */ +#define LOGID "\106\035\172" /* should be three non-zero characters */ +struct log { + char id[4]; /* contains LOGID to detect inadvertent overwrites */ + int fd; /* file descriptor for .gz file, opened read/write */ + char *path; /* allocated path, e.g. "/var/log/foo" or "foo" */ + char *end; /* end of path, for appending suffices such as ".gz" */ + off_t first; /* offset of first stored block first length byte */ + int back; /* location of first block id in bits back from first */ + uint stored; /* bytes currently in last stored block */ + off_t last; /* offset of last stored block first length byte */ + ulong ccrc; /* crc of compressed data */ + ulong clen; /* length (modulo 2^32) of compressed data */ + ulong tcrc; /* crc of total data */ + ulong tlen; /* length (modulo 2^32) of total data */ + time_t lock; /* last modify time of our lock file */ +}; + +/* gzip header for gzlog */ +local unsigned char log_gzhead[] = { + 0x1f, 0x8b, /* magic gzip id */ + 8, /* compression method is deflate */ + 4, /* there is an extra field (no file name) */ + 0, 0, 0, 0, /* no modification time provided */ + 0, 0xff, /* no extra flags, no OS specified */ + 39, 0, 'a', 'p', 35, 0 /* extra field with "ap" subfield */ + /* 35 is EXTRA, 39 is EXTRA + 4 */ +}; + +#define HEAD sizeof(log_gzhead) /* should be 16 */ + +/* initial gzip extra field content (52 == HEAD + EXTRA + 1) */ +local unsigned char log_gzext[] = { + 52, 0, 0, 0, 0, 0, 0, 0, /* offset of first stored block length */ + 52, 0, 0, 0, 0, 0, 0, 0, /* offset of last stored block length */ + 0, 0, 0, 0, 0, 0, 0, 0, /* compressed data crc and length */ + 0, 0, 0, 0, 0, 0, 0, 0, /* total data crc and length */ + 0, 0, /* final stored block data length */ + 5 /* op is NO_OP, last bit 8 bits back */ +}; + +#define EXTRA sizeof(log_gzext) /* should be 35 */ + +/* initial gzip data and trailer */ +local unsigned char log_gzbody[] = { + 1, 0, 0, 0xff, 0xff, /* empty stored block (last) */ + 0, 0, 0, 0, /* crc */ + 0, 0, 0, 0 /* uncompressed length */ +}; + +#define BODY sizeof(log_gzbody) + +/* Exclusively create foo.lock in order to negotiate exclusive access to the + foo.* files. If the modify time of an existing lock file is greater than + PATIENCE seconds in the past, then consider the lock file to have been + abandoned, delete it, and try the exclusive create again. Save the lock + file modify time for verification of ownership. Return 0 on success, or -1 + on failure, usually due to an access restriction or invalid path. Note that + if stat() or unlink() fails, it may be due to another process noticing the + abandoned lock file a smidge sooner and deleting it, so those are not + flagged as an error. */ +local int log_lock(struct log *log) { - int patience; + int fd; + struct stat st; - /* try to lock every LOCK_RETRY seconds for LOCK_PATIENCE seconds */ - patience = LOCK_PATIENCE; - do { - if (flock(fd, LOCK_EX + LOCK_NB) == 0) - return 0; - (void)sleep(LOCK_RETRY); - patience -= LOCK_RETRY; - } while (patience > 0); + strcpy(log->end, ".lock"); + while ((fd = open(log->path, O_CREAT | O_EXCL, 0644)) < 0) { + if (errno != EEXIST) + return -1; + if (stat(log->path, &st) == 0 && time(NULL) - st.st_mtime > PATIENCE) { + unlink(log->path); + continue; + } + sleep(2); /* relinquish the CPU for two seconds while waiting */ + } + close(fd); + if (stat(log->path, &st) == 0) + log->lock = st.st_mtime; + return 0; +} - /* we've run out of patience -- give up */ - return -1; +/* Update the modify time of the lock file to now, in order to prevent another + task from thinking that the lock is stale. Save the lock file modify time + for verification of ownership. */ +local void log_touch(struct log *log) +{ + struct stat st; + + strcpy(log->end, ".lock"); + utimes(log->path, NULL); + if (stat(log->path, &st) == 0) + log->lock = st.st_mtime; } -/* release lock */ -local void unlock(int fd) +/* Check the log file modify time against what is expected. Return true if + this is not our lock. If it is our lock, touch it to keep it. */ +local int log_check(struct log *log) { - (void)flock(fd, LOCK_UN); + struct stat st; + + strcpy(log->end, ".lock"); + if (stat(log->path, &st) || st.st_mtime != log->lock) + return 1; + log_touch(log); + return 0; } -/* release a log object */ -local void log_clean(gz_log *log) +/* Unlock a previously acquired lock, but only if it's ours. */ +local void log_unlock(struct log *log) { - unlock(log->fd); - (void)close(log->fd); - free(log); + if (log_check(log)) + return; + strcpy(log->end, ".lock"); + unlink(log->path); + log->lock = 0; } -/* read an unsigned long from a byte buffer little-endian */ -local unsigned long make_ulg(unsigned char *buf) +/* Check the gzip header and read in the extra field, filling in the values in + the log structure. Return op on success or -1 if the gzip header was not as + expected. op is the current operation in progress last written to the extra + field. This assumes that the gzip file has already been opened, with the + file descriptor log->fd. */ +local int log_head(struct log *log) { - int n; - unsigned long val; + int op; + unsigned char buf[HEAD + EXTRA]; - val = (unsigned long)(*buf++); - for (n = 8; n < 32; n += 8) - val += (unsigned long)(*buf++) << n; - return val; + if (lseek(log->fd, 0, SEEK_SET) < 0 || + read(log->fd, buf, HEAD + EXTRA) != HEAD + EXTRA || + memcmp(buf, log_gzhead, HEAD)) { + return -1; + } + log->first = PULL8(buf + HEAD); + log->last = PULL8(buf + HEAD + 8); + log->ccrc = PULL4(buf + HEAD + 16); + log->clen = PULL4(buf + HEAD + 20); + log->tcrc = PULL4(buf + HEAD + 24); + log->tlen = PULL4(buf + HEAD + 28); + log->stored = PULL2(buf + HEAD + 32); + log->back = 3 + (buf[HEAD + 34] & 7); + op = (buf[HEAD + 34] >> 3) & 3; + return op; } -/* read an off_t from a byte buffer little-endian */ -local off_t make_off(unsigned char *buf) +/* Write over the extra field contents, marking the operation as op. Use fsync + to assure that the device is written to, and in the requested order. This + operation, and only this operation, is assumed to be atomic in order to + assure that the log is recoverable in the event of an interruption at any + point in the process. Return -1 if the write to foo.gz failed. */ +local int log_mark(struct log *log, int op) { - int n; - off_t val; + int ret; + unsigned char ext[EXTRA]; - val = (off_t)(*buf++); - for (n = 8; n < 64; n += 8) - val += (off_t)(*buf++) << n; - return val; + PUT8(ext, log->first); + PUT8(ext + 8, log->last); + PUT4(ext + 16, log->ccrc); + PUT4(ext + 20, log->clen); + PUT4(ext + 24, log->tcrc); + PUT4(ext + 28, log->tlen); + PUT2(ext + 32, log->stored); + ext[34] = log->back - 3 + (op << 3); + fsync(log->fd); + ret = lseek(log->fd, HEAD, SEEK_SET) < 0 || + write(log->fd, ext, EXTRA) != EXTRA ? -1 : 0; + fsync(log->fd); + return ret; } -/* write an unsigned long little-endian to byte buffer */ -local void dice_ulg(unsigned long val, unsigned char *buf) +/* Rewrite the last block header bits and subsequent zero bits to get to a byte + boundary, setting the last block bit if last is true, and then write the + remainder of the stored block header (length and one's complement). Leave + the file pointer after the end of the last stored block data. Return -1 if + there is a read or write failure on the foo.gz file */ +local int log_last(struct log *log, int last) { - int n; + int back, len, mask; + unsigned char buf[6]; + + /* determine the locations of the bytes and bits to modify */ + back = log->last == log->first ? log->back : 8; + len = back > 8 ? 2 : 1; /* bytes back from log->last */ + mask = 0x80 >> ((back - 1) & 7); /* mask for block last-bit */ + + /* get the byte to modify (one or two back) into buf[0] -- don't need to + read the byte if the last-bit is eight bits back, since in that case + the entire byte will be modified */ + buf[0] = 0; + if (back != 8 && (lseek(log->fd, log->last - len, SEEK_SET) < 0 || + read(log->fd, buf, 1) != 1)) + return -1; + + /* change the last-bit of the last stored block as requested -- note + that all bits above the last-bit are set to zero, per the type bits + of a stored block being 00 and per the convention that the bits to + bring the stream to a byte boundary are also zeros */ + buf[1] = 0; + buf[2 - len] = (*buf & (mask - 1)) + (last ? mask : 0); - for (n = 0; n < 4; n++) { - *buf++ = val & 0xff; - val >>= 8; + /* write the modified stored block header and lengths, move the file + pointer to after the last stored block data */ + PUT2(buf + 2, log->stored); + PUT2(buf + 4, log->stored ^ 0xffff); + return lseek(log->fd, log->last - len, SEEK_SET) < 0 || + write(log->fd, buf + 2 - len, len + 4) != len + 4 || + lseek(log->fd, log->stored, SEEK_CUR) < 0 ? -1 : 0; +} + +/* Append len bytes from data to the locked and open log file. len may be zero + if recovering and no .add file was found. In that case, the previous state + of the foo.gz file is restored. The data is appended uncompressed in + deflate stored blocks. Return -1 if there was an error reading or writing + the foo.gz file. */ +local int log_append(struct log *log, unsigned char *data, size_t len) +{ + uint put; + off_t end; + unsigned char buf[8]; + + /* set the last block last-bit and length, in case recovering an + interrupted append, then position the file pointer to append to the + block */ + if (log_last(log, 1)) + return -1; + + /* append, adding stored blocks and updating the offset of the last stored + block as needed, and update the total crc and length */ + while (len) { + /* append as much as we can to the last block */ + put = (MAX_STORE << 10) - log->stored; + if (put > len) + put = (uint)len; + if (put) { + if (write(log->fd, data, put) != put) + return -1; + BAIL(1); + log->tcrc = crc32(log->tcrc, data, put); + log->tlen += put; + log->stored += put; + data += put; + len -= put; + } + + /* if we need to, add a new empty stored block */ + if (len) { + /* mark current block as not last */ + if (log_last(log, 0)) + return -1; + + /* point to new, empty stored block */ + log->last += 4 + log->stored + 1; + log->stored = 0; + } + + /* mark last block as last, update its length */ + if (log_last(log, 1)) + return -1; + BAIL(2); } + + /* write the new crc and length trailer, and truncate just in case (could + be recovering from partial append with a missing foo.add file) */ + PUT4(buf, log->tcrc); + PUT4(buf + 4, log->tlen); + if (write(log->fd, buf, 8) != 8 || + (end = lseek(log->fd, 0, SEEK_CUR)) < 0 || ftruncate(log->fd, end)) + return -1; + + /* write the extra field, marking the log file as done, delete .add file */ + if (log_mark(log, NO_OP)) + return -1; + strcpy(log->end, ".add"); + unlink(log->path); /* ignore error, since may not exist */ + return 0; } -/* write an off_t little-endian to byte buffer */ -local void dice_off(off_t val, unsigned char *buf) +/* Replace the foo.dict file with the foo.temp file. Also delete the foo.add + file, since the compress operation may have been interrupted before that was + done. Returns 1 if memory could not be allocated, or -1 if reading or + writing foo.gz fails, or if the rename fails for some reason other than + foo.temp not existing. foo.temp not existing is a permitted error, since + the replace operation may have been interrupted after the rename is done, + but before foo.gz is marked as complete. */ +local int log_replace(struct log *log) { - int n; + int ret; + char *dest; + + /* delete foo.add file */ + strcpy(log->end, ".add"); + unlink(log->path); /* ignore error, since may not exist */ + BAIL(3); + + /* rename foo.name to foo.dict, replacing foo.dict if it exists */ + strcpy(log->end, ".dict"); + dest = malloc(strlen(log->path) + 1); + if (dest == NULL) + return -2; + strcpy(dest, log->path); + strcpy(log->end, ".temp"); + ret = rename(log->path, dest); + free(dest); + if (ret && errno != ENOENT) + return -1; + BAIL(4); - for (n = 0; n < 8; n++) { - *buf++ = val & 0xff; - val >>= 8; + /* mark the foo.gz file as done */ + return log_mark(log, NO_OP); +} + +/* Compress the len bytes at data and append the compressed data to the + foo.gz deflate data immediately after the previous compressed data. This + overwrites the previous uncompressed data, which was stored in foo.add + and is the data provided in data[0..len-1]. If this operation is + interrupted, it picks up at the start of this routine, with the foo.add + file read in again. If there is no data to compress (len == 0), then we + simply terminate the foo.gz file after the previously compressed data, + appending a final empty stored block and the gzip trailer. Return -1 if + reading or writing the log.gz file failed, or -2 if there was a memory + allocation failure. */ +local int log_compress(struct log *log, unsigned char *data, size_t len) +{ + int fd; + uint got, max; + ssize_t dict; + off_t end; + z_stream strm; + unsigned char buf[DICT]; + + /* compress and append compressed data */ + if (len) { + /* set up for deflate, allocating memory */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + if (deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, -15, 8, + Z_DEFAULT_STRATEGY) != Z_OK) + return -2; + + /* read in dictionary (last 32K of data that was compressed) */ + strcpy(log->end, ".dict"); + fd = open(log->path, O_RDONLY, 0); + if (fd >= 0) { + dict = read(fd, buf, DICT); + close(fd); + if (dict < 0) { + deflateEnd(&strm); + return -1; + } + if (dict) + deflateSetDictionary(&strm, buf, (uint)dict); + } + log_touch(log); + + /* prime deflate with last bits of previous block, position write + pointer to write those bits and overwrite what follows */ + if (lseek(log->fd, log->first - (log->back > 8 ? 2 : 1), + SEEK_SET) < 0 || + read(log->fd, buf, 1) != 1 || lseek(log->fd, -1, SEEK_CUR) < 0) { + deflateEnd(&strm); + return -1; + } + deflatePrime(&strm, (8 - log->back) & 7, *buf); + + /* compress, finishing with a partial non-last empty static block */ + strm.next_in = data; + max = (((uint)0 - 1) >> 1) + 1; /* in case int smaller than size_t */ + do { + strm.avail_in = len > max ? max : (uint)len; + len -= strm.avail_in; + do { + strm.avail_out = DICT; + strm.next_out = buf; + deflate(&strm, len ? Z_NO_FLUSH : Z_PARTIAL_FLUSH); + got = DICT - strm.avail_out; + if (got && write(log->fd, buf, got) != got) { + deflateEnd(&strm); + return -1; + } + log_touch(log); + } while (strm.avail_out == 0); + } while (len); + deflateEnd(&strm); + BAIL(5); + + /* find start of empty static block -- scanning backwards the first one + bit is the second bit of the block, if the last byte is zero, then + we know the byte before that has a one in the top bit, since an + empty static block is ten bits long */ + if ((log->first = lseek(log->fd, -1, SEEK_CUR)) < 0 || + read(log->fd, buf, 1) != 1) + return -1; + log->first++; + if (*buf) { + log->back = 1; + while ((*buf & ((uint)1 << (8 - log->back++))) == 0) + ; /* guaranteed to terminate, since *buf != 0 */ + } + else + log->back = 10; + + /* update compressed crc and length */ + log->ccrc = log->tcrc; + log->clen = log->tlen; + } + else { + /* no data to compress -- fix up existing gzip stream */ + log->tcrc = log->ccrc; + log->tlen = log->clen; } + + /* complete and truncate gzip stream */ + log->last = log->first; + log->stored = 0; + PUT4(buf, log->tcrc); + PUT4(buf + 4, log->tlen); + if (log_last(log, 1) || write(log->fd, buf, 8) != 8 || + (end = lseek(log->fd, 0, SEEK_CUR)) < 0 || ftruncate(log->fd, end)) + return -1; + BAIL(6); + + /* mark as being in the replace operation */ + if (log_mark(log, REPLACE_OP)) + return -1; + + /* execute the replace operation and mark the file as done */ + return log_replace(log); } -/* initial, empty gzip file for appending */ -local char empty_gz[] = { - 0x1f, 0x8b, /* magic gzip id */ - 8, /* compression method is deflate */ - 4, /* there is an extra field */ - 0, 0, 0, 0, /* no modification time provided */ - 0, 0xff, /* no extra flags, no OS */ - 20, 0, 'a', 'p', 16, 0, /* extra field with "ap" subfield */ - 32, 0, 0, 0, 0, 0, 0, 0, /* offset of uncompressed data */ - 32, 0, 0, 0, 0, 0, 0, 0, /* offset of last block */ - 1, 0, 0, 0xff, 0xff, /* empty stored block (last) */ - 0, 0, 0, 0, /* crc */ - 0, 0, 0, 0 /* uncompressed length */ -}; +/* log a repair record to the .repairs file */ +local void log_log(struct log *log, int op, char *record) +{ + time_t now; + FILE *rec; -/* initialize a log object with locking */ -void *gzlog_open(char *path) + now = time(NULL); + strcpy(log->end, ".repairs"); + rec = fopen(log->path, "a"); + if (rec == NULL) + return; + fprintf(rec, "%.24s %s recovery: %s\n", ctime(&now), op == APPEND_OP ? + "append" : (op == COMPRESS_OP ? "compress" : "replace"), record); + fclose(rec); + return; +} + +/* Recover the interrupted operation op. First read foo.add for recovering an + append or compress operation. Return -1 if there was an error reading or + writing foo.gz or reading an existing foo.add, or -2 if there was a memory + allocation failure. */ +local int log_recover(struct log *log, int op) { - unsigned xlen; - unsigned char temp[20]; - unsigned sub_len; - int good; - gz_log *log; - - /* allocate log structure */ - log = malloc(sizeof(gz_log)); - if (log == NULL) - return NULL; - log->id = GZLOGID; + int fd, ret = 0; + unsigned char *data = NULL; + size_t len = 0; + struct stat st; - /* open file, creating it if necessary, and locking it */ - log->fd = open(path, O_RDWR | O_CREAT, 0600); - if (log->fd < 0) { - free(log); - return NULL; + /* log recovery */ + log_log(log, op, "start"); + + /* load foo.add file if expected and present */ + if (op == APPEND_OP || op == COMPRESS_OP) { + strcpy(log->end, ".add"); + if (stat(log->path, &st) == 0 && st.st_size) { + len = (size_t)(st.st_size); + if (len != st.st_size || (data = malloc(st.st_size)) == NULL) { + log_log(log, op, "allocation failure"); + return -2; + } + if ((fd = open(log->path, O_RDONLY, 0)) < 0) { + log_log(log, op, ".add file read failure"); + return -1; + } + ret = read(fd, data, len) != len; + close(fd); + if (ret) { + log_log(log, op, ".add file read failure"); + return -1; + } + log_log(log, op, "loaded .add file"); + } + else + log_log(log, op, "missing .add file!"); + } + + /* recover the interrupted operation */ + switch (op) { + case APPEND_OP: + ret = log_append(log, data, len); + break; + case COMPRESS_OP: + ret = log_compress(log, data, len); + break; + case REPLACE_OP: + ret = log_replace(log); } - if (lock(log->fd)) { + + /* log status */ + log_log(log, op, ret ? "failure" : "complete"); + + /* clean up */ + if (data != NULL) + free(data); + return ret; +} + +/* Close the foo.gz file (if open) and release the lock. */ +local void log_close(struct log *log) +{ + if (log->fd >= 0) close(log->fd); - free(log); - return NULL; + log->fd = -1; + log_unlock(log); +} + +/* Open foo.gz, verify the header, and load the extra field contents, after + first creating the foo.lock file to gain exclusive access to the foo.* + files. If foo.gz does not exist or is empty, then write the initial header, + extra, and body content of an empty foo.gz log file. If there is an error + creating the lock file due to access restrictions, or an error reading or + writing the foo.gz file, or if the foo.gz file is not a proper log file for + this object (e.g. not a gzip file or does not contain the expected extra + field), then return true. If there is an error, the lock is released. + Otherwise, the lock is left in place. */ +local int log_open(struct log *log) +{ + int op; + + /* release open file resource if left over -- can occur if lock lost + between gzlog_open() and gzlog_write() */ + if (log->fd >= 0) + close(log->fd); + log->fd = -1; + + /* negotiate exclusive access */ + if (log_lock(log) < 0) + return -1; + + /* open the log file, foo.gz */ + strcpy(log->end, ".gz"); + log->fd = open(log->path, O_RDWR | O_CREAT, 0644); + if (log->fd < 0) { + log_close(log); + return -1; } - /* if file is empty, write new gzip stream */ + /* if new, initialize foo.gz with an empty log, delete old dictionary */ if (lseek(log->fd, 0, SEEK_END) == 0) { - if (write(log->fd, empty_gz, sizeof(empty_gz)) != sizeof(empty_gz)) { - log_clean(log); - return NULL; + if (write(log->fd, log_gzhead, HEAD) != HEAD || + write(log->fd, log_gzext, EXTRA) != EXTRA || + write(log->fd, log_gzbody, BODY) != BODY) { + log_close(log); + return -1; } + strcpy(log->end, ".dict"); + unlink(log->path); } - /* check gzip header */ - (void)lseek(log->fd, 0, SEEK_SET); - if (read(log->fd, temp, 12) != 12 || temp[0] != 0x1f || - temp[1] != 0x8b || temp[2] != 8 || (temp[3] & 4) == 0) { - log_clean(log); - return NULL; + /* verify log file and load extra field information */ + if ((op = log_head(log)) < 0) { + log_close(log); + return -1; } - /* process extra field to find "ap" sub-field */ - xlen = temp[10] + (temp[11] << 8); - good = 0; - while (xlen) { - if (xlen < 4 || read(log->fd, temp, 4) != 4) - break; - sub_len = temp[2]; - sub_len += temp[3] << 8; - xlen -= 4; - if (memcmp(temp, "ap", 2) == 0 && sub_len == 16) { - good = 1; - break; - } - if (xlen < sub_len) - break; - (void)lseek(log->fd, sub_len, SEEK_CUR); - xlen -= sub_len; + /* check for interrupted process and if so, recover */ + if (op != NO_OP && log_recover(log, op)) { + log_close(log); + return -1; } - if (!good) { - log_clean(log); + + /* touch the lock file to prevent another process from grabbing it */ + log_touch(log); + return 0; +} + +/* See gzlog.h for the description of the external methods below */ +gzlog *gzlog_open(char *path) +{ + size_t n; + struct log *log; + + /* check arguments */ + if (path == NULL || *path == 0) return NULL; - } - /* read in "ap" sub-field */ - log->extra = lseek(log->fd, 0, SEEK_CUR); - if (read(log->fd, temp, 16) != 16) { - log_clean(log); + /* allocate and initialize log structure */ + log = malloc(sizeof(struct log)); + if (log == NULL) + return NULL; + strcpy(log->id, LOGID); + log->fd = -1; + + /* save path and end of path for name construction */ + n = strlen(path); + log->path = malloc(n + 9); /* allow for ".repairs" */ + if (log->path == NULL) { + free(log); return NULL; } - log->mark_off = make_off(temp); - log->last_off = make_off(temp + 8); - - /* get crc, length of gzip file */ - (void)lseek(log->fd, log->last_off, SEEK_SET); - if (read(log->fd, temp, 13) != 13 || - memcmp(temp, "\001\000\000\377\377", 5) != 0) { - log_clean(log); + strcpy(log->path, path); + log->end = log->path + n; + + /* gain exclusive access and verify log file -- may perform a + recovery operation if needed */ + if (log_open(log)) { + free(log->path); + free(log); return NULL; } - log->crc = make_ulg(temp + 5); - log->len = make_ulg(temp + 9); - /* set up to write over empty last block */ - (void)lseek(log->fd, log->last_off + 5, SEEK_SET); - log->stored = 0; - return (void *)log; + /* return pointer to log structure */ + return log; } -/* maximum amount to put in a stored block before starting a new one */ -#define MAX_BLOCK 16384 - -/* write a block to a log object */ -int gzlog_write(void *obj, char *data, size_t len) +/* gzlog_compress() return values: + 0: all good + -1: file i/o error (usually access issue) + -2: memory allocation failure + -3: invalid log pointer argument */ +int gzlog_compress(gzlog *logd) { - size_t some; - unsigned char temp[5]; - gz_log *log; + int fd, ret; + uint block; + size_t len, next; + unsigned char *data, buf[5]; + struct log *log = logd; - /* check object */ - log = (gz_log *)obj; - if (log == NULL || log->id != GZLOGID) - return 1; + /* check arguments */ + if (log == NULL || strcmp(log->id, LOGID) || len < 0) + return -3; - /* write stored blocks until all of the input is written */ - do { - some = MAX_BLOCK - log->stored; - if (some > len) - some = len; - if (write(log->fd, data, some) != some) - return 1; - log->crc = crc32(log->crc, data, some); - log->len += some; - len -= some; - data += some; - log->stored += some; - - /* if the stored block is full, end it and start another */ - if (log->stored == MAX_BLOCK) { - (void)lseek(log->fd, log->last_off, SEEK_SET); - temp[0] = 0; - dice_ulg(log->stored + ((unsigned long)(~log->stored) << 16), - temp + 1); - if (write(log->fd, temp, 5) != 5) - return 1; - log->last_off = lseek(log->fd, log->stored, SEEK_CUR); - (void)lseek(log->fd, 5, SEEK_CUR); - log->stored = 0; - } - } while (len); - return 0; -} + /* see if we lost the lock -- if so get it again and reload the extra + field information (it probably changed), recover last operation if + necessary */ + if (log_check(log) && log_open(log)) + return -1; -/* recompress the remaining stored deflate data in place */ -local int recomp(gz_log *log) -{ - z_stream strm; - size_t len, max; - unsigned char *in; - unsigned char *out; - unsigned char temp[16]; - - /* allocate space and read it all in (it's around 1 MB) */ - len = log->last_off - log->mark_off; - max = len + (len >> 12) + (len >> 14) + 11; - out = malloc(max); - if (out == NULL) - return 1; - in = malloc(len); - if (in == NULL) { - free(out); - return 1; - } - (void)lseek(log->fd, log->mark_off, SEEK_SET); - if (read(log->fd, in, len) != len) { - free(in); - free(out); - return 1; - } + /* create space for uncompressed data */ + len = ((size_t)(log->last - log->first) & ~(((size_t)1 << 10) - 1)) + + log->stored; + if ((data = malloc(len)) == NULL) + return -2; - /* recompress in memory, decoding stored data as we go */ - /* note: this assumes that unsigned is four bytes or more */ - /* consider not making that assumption */ - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - if (deflateInit2(&strm, Z_BEST_COMPRESSION, Z_DEFLATED, -15, 8, - Z_DEFAULT_STRATEGY) != Z_OK) { - free(in); - free(out); - return 1; - } - strm.next_in = in; - strm.avail_out = max; - strm.next_out = out; - while (len >= 5) { - if (strm.next_in[0] != 0) + /* do statement here is just a cheap trick for error handling */ + do { + /* read in the uncompressed data */ + if (lseek(log->fd, log->first - 1, SEEK_SET) < 0) break; - strm.avail_in = strm.next_in[1] + (strm.next_in[2] << 8); - strm.next_in += 5; - len -= 5; - if (strm.avail_in != 0) { - if (len < strm.avail_in) + next = 0; + while (next < len) { + if (read(log->fd, buf, 5) != 5) break; - len -= strm.avail_in; - (void)deflate(&strm, Z_NO_FLUSH); - if (strm.avail_in != 0 || strm.avail_out == 0) + block = PULL2(buf + 1); + if (next + block > len || + read(log->fd, (char *)data + next, block) != block) break; + next += block; } - } - (void)deflate(&strm, Z_SYNC_FLUSH); - (void)deflateEnd(&strm); - free(in); - if (len != 0 || strm.avail_out == 0) { - free(out); - return 1; - } + if (lseek(log->fd, 0, SEEK_CUR) != log->last + 4 + log->stored) + break; + log_touch(log); - /* overwrite stored data with compressed data */ - (void)lseek(log->fd, log->mark_off, SEEK_SET); - len = max - strm.avail_out; - if (write(log->fd, out, len) != len) { - free(out); - return 1; - } - free(out); - - /* write last empty block, crc, and length */ - log->mark_off = log->last_off = lseek(log->fd, 0, SEEK_CUR); - temp[0] = 1; - dice_ulg(0xffffL << 16, temp + 1); - dice_ulg(log->crc, temp + 5); - dice_ulg(log->len, temp + 9); - if (write(log->fd, temp, 13) != 13) - return 1; + /* write the uncompressed data to the .add file */ + strcpy(log->end, ".add"); + fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd < 0) + break; + ret = write(fd, data, len) != len; + if (ret | close(fd)) + break; + log_touch(log); - /* truncate file to discard remaining stored data and old trailer */ - ftruncate(log->fd, lseek(log->fd, 0, SEEK_CUR)); + /* write the dictionary for the next compress to the .temp file */ + strcpy(log->end, ".temp"); + fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd < 0) + break; + next = DICT > len ? len : DICT; + ret = write(fd, (char *)data + len - next, next) != next; + if (ret | close(fd)) + break; + log_touch(log); - /* update extra field to point to new last empty block */ - (void)lseek(log->fd, log->extra, SEEK_SET); - dice_off(log->mark_off, temp); - dice_off(log->last_off, temp + 8); - if (write(log->fd, temp, 16) != 16) - return 1; - return 0; -} + /* roll back to compressed data, mark the compress in progress */ + log->last = log->first; + log->stored = 0; + if (log_mark(log, COMPRESS_OP)) + break; + BAIL(7); + + /* compress and append the data (clears mark) */ + ret = log_compress(log, data, len); + free(data); + return ret; + } while (0); -/* maximum accumulation of stored blocks before compressing */ -#define MAX_STORED 1048576 + /* broke out of do above on i/o error */ + free(data); + return -1; +} -/* close log object */ -int gzlog_close(void *obj) +/* gzlog_write() return values: + 0: all good + -1: file i/o error (usually access issue) + -2: memory allocation failure + -3: invalid log pointer argument */ +int gzlog_write(gzlog *logd, void *data, size_t len) { - unsigned char temp[8]; - gz_log *log; + int fd, ret; + struct log *log = logd; - /* check object */ - log = (gz_log *)obj; - if (log == NULL || log->id != GZLOGID) - return 1; + /* check arguments */ + if (log == NULL || strcmp(log->id, LOGID) || len < 0) + return -3; + if (data == NULL || len == 0) + return 0; - /* go to start of most recent block being written */ - (void)lseek(log->fd, log->last_off, SEEK_SET); - - /* if some stuff was put there, update block */ - if (log->stored) { - temp[0] = 0; - dice_ulg(log->stored + ((unsigned long)(~log->stored) << 16), - temp + 1); - if (write(log->fd, temp, 5) != 5) - return 1; - log->last_off = lseek(log->fd, log->stored, SEEK_CUR); - } + /* see if we lost the lock -- if so get it again and reload the extra + field information (it probably changed), recover last operation if + necessary */ + if (log_check(log) && log_open(log)) + return -1; - /* write last block (empty) */ - if (write(log->fd, "\001\000\000\377\377", 5) != 5) - return 1; + /* create and write .add file */ + strcpy(log->end, ".add"); + fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd < 0) + return -1; + ret = write(fd, data, len) != len; + if (ret | close(fd)) + return -1; + log_touch(log); - /* write updated crc and uncompressed length */ - dice_ulg(log->crc, temp); - dice_ulg(log->len, temp + 4); - if (write(log->fd, temp, 8) != 8) - return 1; + /* mark log file with append in progress */ + if (log_mark(log, APPEND_OP)) + return -1; + BAIL(8); - /* put offset of that last block in gzip extra block */ - (void)lseek(log->fd, log->extra + 8, SEEK_SET); - dice_off(log->last_off, temp); - if (write(log->fd, temp, 8) != 8) - return 1; + /* append data (clears mark) */ + if (log_append(log, data, len)) + return -1; - /* if more than 1 MB stored, then time to compress it */ - if (log->last_off - log->mark_off > MAX_STORED) { - if (recomp(log)) - return 1; - } + /* check to see if it's time to compress -- if not, then done */ + if (((log->last - log->first) >> 10) + (log->stored >> 10) < TRIGGER) + return 0; + + /* time to compress */ + return gzlog_compress(log); +} + +/* gzlog_close() return values: + 0: ok + -3: invalid log pointer argument */ +int gzlog_close(gzlog *logd) +{ + struct log *log = logd; - /* unlock and close file */ - log_clean(log); + /* check arguments */ + if (log == NULL || strcmp(log->id, LOGID)) + return -3; + + /* close the log file and release the lock */ + log_close(log); + + /* free structure and return */ + if (log->path != NULL) + free(log->path); + strcpy(log->id, "bad"); + free(log); return 0; } diff --git a/zlib/examples/gzlog.h b/zlib/examples/gzlog.h index a800bd53917..c46142673db 100644 --- a/zlib/examples/gzlog.h +++ b/zlib/examples/gzlog.h @@ -1,6 +1,6 @@ /* gzlog.h - Copyright (C) 2004 Mark Adler, all rights reserved - version 1.0, 26 Nov 2004 + Copyright (C) 2004, 2008 Mark Adler, all rights reserved + version 2.0, 25 Apr 2008 This software is provided 'as-is', without any express or implied warranty. In no event will the author be held liable for any damages @@ -21,38 +21,69 @@ Mark Adler madler@alumni.caltech.edu */ +/* Version History: + 1.0 26 Nov 2004 First version + 2.0 25 Apr 2008 Complete redesign for recovery of interrupted operations + Interface changed slightly in that now path is a prefix + Compression now occurs as needed during gzlog_write() + gzlog_write() now always leaves the log file as valid gzip + */ + /* The gzlog object allows writing short messages to a gzipped log file, opening the log file locked for small bursts, and then closing it. The log - object works by appending stored data to the gzip file until 1 MB has been - accumulated. At that time, the stored data is compressed, and replaces the - uncompressed data in the file. The log file is truncated to its new size at - that time. After closing, the log file is always valid gzip file that can - decompressed to recover what was written. - - A gzip header "extra" field contains two file offsets for appending. The - first points to just after the last compressed data. The second points to - the last stored block in the deflate stream, which is empty. All of the - data between those pointers is uncompressed. + object works by appending stored (uncompressed) data to the gzip file until + 1 MB has been accumulated. At that time, the stored data is compressed, and + replaces the uncompressed data in the file. The log file is truncated to + its new size at that time. After each write operation, the log file is a + valid gzip file that can decompressed to recover what was written. + + The gzlog operations can be interupted at any point due to an application or + system crash, and the log file will be recovered the next time the log is + opened with gzlog_open(). */ +#ifndef GZLOG_H +#define GZLOG_H + +/* gzlog object type */ +typedef void gzlog; + /* Open a gzlog object, creating the log file if it does not exist. Return - NULL on error. Note that gzlog_open() could take a long time to return if - there is difficulty in locking the file. */ -void *gzlog_open(char *path); - -/* Write to a gzlog object. Return non-zero on error. This function will - simply write data to the file uncompressed. Compression of the data - will not occur until gzlog_close() is called. It is expected that - gzlog_write() is used for a short message, and then gzlog_close() is - called. If a large amount of data is to be written, then the application - should write no more than 1 MB at a time with gzlog_write() before - calling gzlog_close() and then gzlog_open() again. */ -int gzlog_write(void *log, char *data, size_t len); - -/* Close a gzlog object. Return non-zero on error. The log file is locked - until this function is called. This function will compress stored data - at the end of the gzip file if at least 1 MB has been accumulated. Note - that the file will not be a valid gzip file until this function completes. - */ -int gzlog_close(void *log); + NULL on error. Note that gzlog_open() could take a while to complete if it + has to wait to verify that a lock is stale (possibly for five minutes), or + if there is significant contention with other instantiations of this object + when locking the resource. path is the prefix of the file names created by + this object. If path is "foo", then the log file will be "foo.gz", and + other auxiliary files will be created and destroyed during the process: + "foo.dict" for a compression dictionary, "foo.temp" for a temporary (next) + dictionary, "foo.add" for data being added or compressed, "foo.lock" for the + lock file, and "foo.repairs" to log recovery operations performed due to + interrupted gzlog operations. A gzlog_open() followed by a gzlog_close() + will recover a previously interrupted operation, if any. */ +gzlog *gzlog_open(char *path); + +/* Write to a gzlog object. Return zero on success, -1 if there is a file i/o + error on any of the gzlog files (this should not happen if gzlog_open() + succeeded, unless the device has run out of space or leftover auxiliary + files have permissions or ownership that prevent their use), -2 if there is + a memory allocation failure, or -3 if the log argument is invalid (e.g. if + it was not created by gzlog_open()). This function will write data to the + file uncompressed, until 1 MB has been accumulated, at which time that data + will be compressed. The log file will be a valid gzip file upon successful + return. */ +int gzlog_write(gzlog *log, void *data, size_t len); + +/* Force compression of any uncompressed data in the log. This should be used + sparingly, if at all. The main application would be when a log file will + not be appended to again. If this is used to compress frequently while + appending, it will both significantly increase the execution time and + reduce the compression ratio. The return codes are the same as for + gzlog_write(). */ +int gzlog_compress(gzlog *log); + +/* Close a gzlog object. Return zero on success, -3 if the log argument is + invalid. The log object is freed, and so cannot be referenced again. */ +int gzlog_close(gzlog *log); + +#endif diff --git a/zlib/examples/zlib_how.html b/zlib/examples/zlib_how.html index 40998dbf08a..444ff1c9a32 100644 --- a/zlib/examples/zlib_how.html +++ b/zlib/examples/zlib_how.html @@ -4,7 +4,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>zlib Usage Example</title> -<!-- Copyright (c) 2004 Mark Adler. --> +<!-- Copyright (c) 2004, 2005 Mark Adler. --> </head> <body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#00A000"> <h2 align="center"> zlib Usage Example </h2> @@ -21,13 +21,16 @@ Without further adieu, here is the program <a href="zpipe.c"><tt>zpipe.c</tt></a <pre><b> /* zpipe.c: example of proper use of zlib's inflate() and deflate() Not copyrighted -- provided to the public domain - Version 1.2 9 November 2004 Mark Adler */ + Version 1.4 11 December 2005 Mark Adler */ /* Version history: 1.0 30 Oct 2004 First version 1.1 8 Nov 2004 Add void casting for unused return values Use switch statement for inflate() return values 1.2 9 Nov 2004 Add assertions to document zlib guarantees + 1.3 6 Apr 2005 Remove incorrect assertion in inf() + 1.4 11 Dec 2005 Add hack to avoid MSDOS end-of-line conversions + Avoid some compiler warnings for input and output buffers */ </b></pre><!-- --> We now include the header files for the required definitions. From @@ -47,6 +50,21 @@ functions <tt>inflateInit()</tt>, <tt>inflate()</tt>, and #include <assert.h> #include "zlib.h" </b></pre><!-- --> +This is an ugly hack required to avoid corruption of the input and output data on +Windows/MS-DOS systems. Without this, those systems would assume that the input and output +files are text, and try to convert the end-of-line characters from one standard to +another. That would corrupt binary data, and in particular would render the compressed data unusable. +This sets the input and output to binary which suppresses the end-of-line conversions. +<tt>SET_BINARY_MODE()</tt> will be used later on <tt>stdin</tt> and <tt>stdout</tt>, at the beginning of <tt>main()</tt>. +<pre><b> +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) +# include <fcntl.h> +# include <io.h> +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif +</b></pre><!-- --> <tt>CHUNK</tt> is simply the buffer size for feeding data to and pulling data from the <em>zlib</em> routines. Larger buffer sizes would be more efficient, especially for <tt>inflate()</tt>. If the memory is available, buffers sizes @@ -80,8 +98,8 @@ is used to pass information to and from the <em>zlib</em> routines, and to maint int ret, flush; unsigned have; z_stream strm; - char in[CHUNK]; - char out[CHUNK]; + unsigned char in[CHUNK]; + unsigned char out[CHUNK]; </b></pre><!-- --> The first thing we do is to initialize the <em>zlib</em> state for compression using <tt>deflateInit()</tt>. This must be done before the first use of <tt>deflate()</tt>. @@ -313,8 +331,8 @@ can tell from the <em>zlib</em> stream itself when the stream is complete. int ret; unsigned have; z_stream strm; - char in[CHUNK]; - char out[CHUNK]; + unsigned char in[CHUNK]; + unsigned char out[CHUNK]; </b></pre><!-- --> The initialization of the state is the same, except that there is no compression level, of course, and two more elements of the structure are initialized. <tt>avail_in</tt> @@ -494,6 +512,10 @@ int main(int argc, char **argv) { int ret; + /* avoid end-of-line conversions */ + SET_BINARY_MODE(stdin); + SET_BINARY_MODE(stdout); + /* do compression if no arguments */ if (argc == 1) { ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION); @@ -518,6 +540,6 @@ int main(int argc, char **argv) } </b></pre> <hr> -<i>Copyright (c) 2004 by Mark Adler<br>Last modified 13 November 2004</i> +<i>Copyright (c) 2004, 2005 by Mark Adler<br>Last modified 11 December 2005</i> </body> </html> diff --git a/zlib/examples/zpipe.c b/zlib/examples/zpipe.c index 26abb56a9ca..83535d16935 100644 --- a/zlib/examples/zpipe.c +++ b/zlib/examples/zpipe.c @@ -1,6 +1,6 @@ /* zpipe.c: example of proper use of zlib's inflate() and deflate() Not copyrighted -- provided to the public domain - Version 1.2 9 November 2004 Mark Adler */ + Version 1.4 11 December 2005 Mark Adler */ /* Version history: 1.0 30 Oct 2004 First version @@ -8,6 +8,8 @@ Use switch statement for inflate() return values 1.2 9 Nov 2004 Add assertions to document zlib guarantees 1.3 6 Apr 2005 Remove incorrect assertion in inf() + 1.4 11 Dec 2005 Add hack to avoid MSDOS end-of-line conversions + Avoid some compiler warnings for input and output buffers */ #include <stdio.h> @@ -15,6 +17,14 @@ #include <assert.h> #include "zlib.h" +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) +# include <fcntl.h> +# include <io.h> +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif + #define CHUNK 16384 /* Compress from file source to file dest until EOF on source. @@ -28,8 +38,8 @@ int def(FILE *source, FILE *dest, int level) int ret, flush; unsigned have; z_stream strm; - char in[CHUNK]; - char out[CHUNK]; + unsigned char in[CHUNK]; + unsigned char out[CHUNK]; /* allocate deflate state */ strm.zalloc = Z_NULL; @@ -84,8 +94,8 @@ int inf(FILE *source, FILE *dest) int ret; unsigned have; z_stream strm; - char in[CHUNK]; - char out[CHUNK]; + unsigned char in[CHUNK]; + unsigned char out[CHUNK]; /* allocate inflate state */ strm.zalloc = Z_NULL; @@ -167,6 +177,10 @@ int main(int argc, char **argv) { int ret; + /* avoid end-of-line conversions */ + SET_BINARY_MODE(stdin); + SET_BINARY_MODE(stdout); + /* do compression if no arguments */ if (argc == 1) { ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION); diff --git a/zlib/examples/zran.c b/zlib/examples/zran.c index 8c7717eb2cd..617a13086fa 100644 --- a/zlib/examples/zran.c +++ b/zlib/examples/zran.c @@ -351,7 +351,7 @@ int main(int argc, char **argv) int len; off_t offset; FILE *in; - struct access *index; + struct access *index = NULL; unsigned char buf[CHUNK]; /* open input file */ diff --git a/zlib/gzclose.c b/zlib/gzclose.c new file mode 100644 index 00000000000..caeb99a3177 --- /dev/null +++ b/zlib/gzclose.c @@ -0,0 +1,25 @@ +/* gzclose.c -- zlib gzclose() function + * Copyright (C) 2004, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +/* gzclose() is in a separate file so that it is linked in only if it is used. + That way the other gzclose functions can be used instead to avoid linking in + unneeded compression or decompression routines. */ +int ZEXPORT gzclose(file) + gzFile file; +{ +#ifndef NO_GZCOMPRESS + gz_statep state; + + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + + return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file); +#else + return gzclose_r(file); +#endif +} diff --git a/zlib/gzguts.h b/zlib/gzguts.h new file mode 100644 index 00000000000..0f8fb79f87d --- /dev/null +++ b/zlib/gzguts.h @@ -0,0 +1,132 @@ +/* gzguts.h -- zlib internal header definitions for gz* operations + * Copyright (C) 2004, 2005, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#ifdef _LARGEFILE64_SOURCE +# ifndef _LARGEFILE_SOURCE +# define _LARGEFILE_SOURCE 1 +# endif +# ifdef _FILE_OFFSET_BITS +# undef _FILE_OFFSET_BITS +# endif +#endif + +#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ) +# define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) +#else +# define ZLIB_INTERNAL +#endif + +#include <stdio.h> +#include "zlib.h" +#ifdef STDC +# include <string.h> +# include <stdlib.h> +# include <limits.h> +#endif +#include <fcntl.h> + +#ifdef NO_DEFLATE /* for compatibility with old definition */ +# define NO_GZCOMPRESS +#endif + +#ifdef _MSC_VER +# include <io.h> +# define vsnprintf _vsnprintf +#endif + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + +/* gz* functions always use library allocation functions */ +#ifndef STDC + extern voidp malloc OF((uInt size)); + extern void free OF((voidpf ptr)); +#endif + +/* get errno and strerror definition */ +#if defined UNDER_CE +# include <windows.h> +# define zstrerror() gz_strwinerror((DWORD)GetLastError()) +#else +# ifdef STDC +# include <errno.h> +# define zstrerror() strerror(errno) +# else +# define zstrerror() "stdio error (consult errno)" +# endif +#endif + +/* provide prototypes for these when building zlib without LFS */ +#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0 + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); + ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); +#endif + +/* default i/o buffer size -- double this for output when reading */ +#define GZBUFSIZE 8192 + +/* gzip modes, also provide a little integrity check on the passed structure */ +#define GZ_NONE 0 +#define GZ_READ 7247 +#define GZ_WRITE 31153 +#define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */ + +/* values for gz_state how */ +#define LOOK 0 /* look for a gzip header */ +#define COPY 1 /* copy input directly */ +#define GZIP 2 /* decompress a gzip stream */ + +/* internal gzip file state data structure */ +typedef struct { + /* used for both reading and writing */ + int mode; /* see gzip modes above */ + int fd; /* file descriptor */ + char *path; /* path or fd for error messages */ + z_off64_t pos; /* current position in uncompressed data */ + unsigned size; /* buffer size, zero if not allocated yet */ + unsigned want; /* requested buffer size, default is GZBUFSIZE */ + unsigned char *in; /* input buffer */ + unsigned char *out; /* output buffer (double-sized when reading) */ + unsigned char *next; /* next output data to deliver or write */ + /* just for reading */ + unsigned have; /* amount of output data unused at next */ + int eof; /* true if end of input file reached */ + z_off64_t start; /* where the gzip data started, for rewinding */ + z_off64_t raw; /* where the raw data started, for seeking */ + int how; /* 0: get header, 1: copy, 2: decompress */ + int direct; /* true if last read direct, false if gzip */ + /* just for writing */ + int level; /* compression level */ + int strategy; /* compression strategy */ + /* seek request */ + z_off64_t skip; /* amount to skip (already rewound if backwards) */ + int seek; /* true if seek request pending */ + /* error information */ + int err; /* error code */ + char *msg; /* error message */ + /* zlib inflate or deflate stream */ + z_stream strm; /* stream structure in-place (not a pointer) */ +} gz_state; +typedef gz_state FAR *gz_statep; + +/* shared functions */ +void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *)); +#if defined UNDER_CE +char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error)); +#endif + +/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t + value -- needed when comparing unsigned to z_off64_t, which is signed + (possible z_off64_t types off_t, off64_t, and long are all signed) */ +#ifdef INT_MAX +# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX) +#else +unsigned ZLIB_INTERNAL gz_intmax OF((void)); +# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) +#endif diff --git a/zlib/gzio.c b/zlib/gzio.c deleted file mode 100644 index a35877440f5..00000000000 --- a/zlib/gzio.c +++ /dev/null @@ -1,1026 +0,0 @@ -/* gzio.c -- IO on .gz files - * Copyright (C) 1995-2005 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h - * - * Compile this file with -DNO_GZCOMPRESS to avoid the compression code. - */ - -/* @(#) $Id: gzio.c,v 1.1.1.2 2002/03/11 21:53:24 tromey Exp $ */ - -#include <stdio.h> - -#include "zutil.h" - -#ifdef NO_DEFLATE /* for compatibility with old definition */ -# define NO_GZCOMPRESS -#endif - -#ifndef NO_DUMMY_DECL -struct internal_state {int dummy;}; /* for buggy compilers */ -#endif - -#ifndef Z_BUFSIZE -# ifdef MAXSEG_64K -# define Z_BUFSIZE 4096 /* minimize memory usage for 16-bit DOS */ -# else -# define Z_BUFSIZE 16384 -# endif -#endif -#ifndef Z_PRINTF_BUFSIZE -# define Z_PRINTF_BUFSIZE 4096 -#endif - -#ifdef __MVS__ -# pragma map (fdopen , "\174\174FDOPEN") - FILE *fdopen(int, const char *); -#endif - -#ifndef STDC -extern voidp malloc OF((uInt size)); -extern void free OF((voidpf ptr)); -#endif - -#define ALLOC(size) malloc(size) -#define TRYFREE(p) {if (p) free(p);} - -static int const gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */ - -/* gzip flag byte */ -#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ -#define HEAD_CRC 0x02 /* bit 1 set: header CRC present */ -#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ -#define ORIG_NAME 0x08 /* bit 3 set: original file name present */ -#define COMMENT 0x10 /* bit 4 set: file comment present */ -#define RESERVED 0xE0 /* bits 5..7: reserved */ - -typedef struct gz_stream { - z_stream stream; - int z_err; /* error code for last stream operation */ - int z_eof; /* set if end of input file */ - FILE *file; /* .gz file */ - Byte *inbuf; /* input buffer */ - Byte *outbuf; /* output buffer */ - uLong crc; /* crc32 of uncompressed data */ - char *msg; /* error message */ - char *path; /* path name for debugging only */ - int transparent; /* 1 if input file is not a .gz file */ - char mode; /* 'w' or 'r' */ - z_off_t start; /* start of compressed data in file (header skipped) */ - z_off_t in; /* bytes into deflate or inflate */ - z_off_t out; /* bytes out of deflate or inflate */ - int back; /* one character push-back */ - int last; /* true if push-back is last character */ -} gz_stream; - - -local gzFile gz_open OF((const char *path, const char *mode, int fd)); -local int do_flush OF((gzFile file, int flush)); -local int get_byte OF((gz_stream *s)); -local void check_header OF((gz_stream *s)); -local int destroy OF((gz_stream *s)); -local void putLong OF((FILE *file, uLong x)); -local uLong getLong OF((gz_stream *s)); - -/* =========================================================================== - Opens a gzip (.gz) file for reading or writing. The mode parameter - is as in fopen ("rb" or "wb"). The file is given either by file descriptor - or path name (if fd == -1). - gz_open returns NULL if the file could not be opened or if there was - insufficient memory to allocate the (de)compression state; errno - can be checked to distinguish the two cases (if errno is zero, the - zlib error is Z_MEM_ERROR). -*/ -local gzFile gz_open (path, mode, fd) - const char *path; - const char *mode; - int fd; -{ - int err; - int level = Z_DEFAULT_COMPRESSION; /* compression level */ - int strategy = Z_DEFAULT_STRATEGY; /* compression strategy */ - char *p = (char*)mode; - gz_stream *s; - char fmode[80]; /* copy of mode, without the compression level */ - char *m = fmode; - - if (!path || !mode) return Z_NULL; - - s = (gz_stream *)ALLOC(sizeof(gz_stream)); - if (!s) return Z_NULL; - - s->stream.zalloc = (alloc_func)0; - s->stream.zfree = (free_func)0; - s->stream.opaque = (voidpf)0; - s->stream.next_in = s->inbuf = Z_NULL; - s->stream.next_out = s->outbuf = Z_NULL; - s->stream.avail_in = s->stream.avail_out = 0; - s->file = NULL; - s->z_err = Z_OK; - s->z_eof = 0; - s->in = 0; - s->out = 0; - s->back = EOF; - s->crc = crc32(0L, Z_NULL, 0); - s->msg = NULL; - s->transparent = 0; - - s->path = (char*)ALLOC(strlen(path)+1); - if (s->path == NULL) { - return destroy(s), (gzFile)Z_NULL; - } - strcpy(s->path, path); /* do this early for debugging */ - - s->mode = '\0'; - do { - if (*p == 'r') s->mode = 'r'; - if (*p == 'w' || *p == 'a') s->mode = 'w'; - if (*p >= '0' && *p <= '9') { - level = *p - '0'; - } else if (*p == 'f') { - strategy = Z_FILTERED; - } else if (*p == 'h') { - strategy = Z_HUFFMAN_ONLY; - } else if (*p == 'R') { - strategy = Z_RLE; - } else { - *m++ = *p; /* copy the mode */ - } - } while (*p++ && m != fmode + sizeof(fmode)); - if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL; - - if (s->mode == 'w') { -#ifdef NO_GZCOMPRESS - err = Z_STREAM_ERROR; -#else - err = deflateInit2(&(s->stream), level, - Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, strategy); - /* windowBits is passed < 0 to suppress zlib header */ - - s->stream.next_out = s->outbuf = (Byte*)ALLOC(Z_BUFSIZE); -#endif - if (err != Z_OK || s->outbuf == Z_NULL) { - return destroy(s), (gzFile)Z_NULL; - } - } else { - s->stream.next_in = s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); - - err = inflateInit2(&(s->stream), -MAX_WBITS); - /* windowBits is passed < 0 to tell that there is no zlib header. - * Note that in this case inflate *requires* an extra "dummy" byte - * after the compressed stream in order to complete decompression and - * return Z_STREAM_END. Here the gzip CRC32 ensures that 4 bytes are - * present after the compressed stream. - */ - if (err != Z_OK || s->inbuf == Z_NULL) { - return destroy(s), (gzFile)Z_NULL; - } - } - s->stream.avail_out = Z_BUFSIZE; - - errno = 0; - s->file = fd < 0 ? F_OPEN(path, fmode) : (FILE*)fdopen(fd, fmode); - - if (s->file == NULL) { - return destroy(s), (gzFile)Z_NULL; - } - if (s->mode == 'w') { - /* Write a very simple .gz header: - */ - fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1], - Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE); - s->start = 10L; - /* We use 10L instead of ftell(s->file) to because ftell causes an - * fflush on some systems. This version of the library doesn't use - * start anyway in write mode, so this initialization is not - * necessary. - */ - } else { - check_header(s); /* skip the .gz header */ - s->start = ftell(s->file) - s->stream.avail_in; - } - - return (gzFile)s; -} - -/* =========================================================================== - Opens a gzip (.gz) file for reading or writing. -*/ -gzFile ZEXPORT gzopen (path, mode) - const char *path; - const char *mode; -{ - return gz_open (path, mode, -1); -} - -/* =========================================================================== - Associate a gzFile with the file descriptor fd. fd is not dup'ed here - to mimic the behavio(u)r of fdopen. -*/ -gzFile ZEXPORT gzdopen (fd, mode) - int fd; - const char *mode; -{ - char name[46]; /* allow for up to 128-bit integers */ - - if (fd < 0) return (gzFile)Z_NULL; - sprintf(name, "<fd:%d>", fd); /* for debugging */ - - return gz_open (name, mode, fd); -} - -/* =========================================================================== - * Update the compression level and strategy - */ -int ZEXPORT gzsetparams (file, level, strategy) - gzFile file; - int level; - int strategy; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; - - /* Make room to allow flushing */ - if (s->stream.avail_out == 0) { - - s->stream.next_out = s->outbuf; - if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) { - s->z_err = Z_ERRNO; - } - s->stream.avail_out = Z_BUFSIZE; - } - - return deflateParams (&(s->stream), level, strategy); -} - -/* =========================================================================== - Read a byte from a gz_stream; update next_in and avail_in. Return EOF - for end of file. - IN assertion: the stream s has been sucessfully opened for reading. -*/ -local int get_byte(s) - gz_stream *s; -{ - if (s->z_eof) return EOF; - if (s->stream.avail_in == 0) { - errno = 0; - s->stream.avail_in = (uInt)fread(s->inbuf, 1, Z_BUFSIZE, s->file); - if (s->stream.avail_in == 0) { - s->z_eof = 1; - if (ferror(s->file)) s->z_err = Z_ERRNO; - return EOF; - } - s->stream.next_in = s->inbuf; - } - s->stream.avail_in--; - return *(s->stream.next_in)++; -} - -/* =========================================================================== - Check the gzip header of a gz_stream opened for reading. Set the stream - mode to transparent if the gzip magic header is not present; set s->err - to Z_DATA_ERROR if the magic header is present but the rest of the header - is incorrect. - IN assertion: the stream s has already been created sucessfully; - s->stream.avail_in is zero for the first time, but may be non-zero - for concatenated .gz files. -*/ -local void check_header(s) - gz_stream *s; -{ - int method; /* method byte */ - int flags; /* flags byte */ - uInt len; - int c; - - /* Assure two bytes in the buffer so we can peek ahead -- handle case - where first byte of header is at the end of the buffer after the last - gzip segment */ - len = s->stream.avail_in; - if (len < 2) { - if (len) s->inbuf[0] = s->stream.next_in[0]; - errno = 0; - len = (uInt)fread(s->inbuf + len, 1, Z_BUFSIZE >> len, s->file); - if (len == 0 && ferror(s->file)) s->z_err = Z_ERRNO; - s->stream.avail_in += len; - s->stream.next_in = s->inbuf; - if (s->stream.avail_in < 2) { - s->transparent = s->stream.avail_in; - return; - } - } - - /* Peek ahead to check the gzip magic header */ - if (s->stream.next_in[0] != gz_magic[0] || - s->stream.next_in[1] != gz_magic[1]) { - s->transparent = 1; - return; - } - s->stream.avail_in -= 2; - s->stream.next_in += 2; - - /* Check the rest of the gzip header */ - method = get_byte(s); - flags = get_byte(s); - if (method != Z_DEFLATED || (flags & RESERVED) != 0) { - s->z_err = Z_DATA_ERROR; - return; - } - - /* Discard time, xflags and OS code: */ - for (len = 0; len < 6; len++) (void)get_byte(s); - - if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */ - len = (uInt)get_byte(s); - len += ((uInt)get_byte(s))<<8; - /* len is garbage if EOF but the loop below will quit anyway */ - while (len-- != 0 && get_byte(s) != EOF) ; - } - if ((flags & ORIG_NAME) != 0) { /* skip the original file name */ - while ((c = get_byte(s)) != 0 && c != EOF) ; - } - if ((flags & COMMENT) != 0) { /* skip the .gz file comment */ - while ((c = get_byte(s)) != 0 && c != EOF) ; - } - if ((flags & HEAD_CRC) != 0) { /* skip the header crc */ - for (len = 0; len < 2; len++) (void)get_byte(s); - } - s->z_err = s->z_eof ? Z_DATA_ERROR : Z_OK; -} - - /* =========================================================================== - * Cleanup then free the given gz_stream. Return a zlib error code. - Try freeing in the reverse order of allocations. - */ -local int destroy (s) - gz_stream *s; -{ - int err = Z_OK; - - if (!s) return Z_STREAM_ERROR; - - TRYFREE(s->msg); - - if (s->stream.state != NULL) { - if (s->mode == 'w') { -#ifdef NO_GZCOMPRESS - err = Z_STREAM_ERROR; -#else - err = deflateEnd(&(s->stream)); -#endif - } else if (s->mode == 'r') { - err = inflateEnd(&(s->stream)); - } - } - if (s->file != NULL && fclose(s->file)) { -#ifdef ESPIPE - if (errno != ESPIPE) /* fclose is broken for pipes in HP/UX */ -#endif - err = Z_ERRNO; - } - if (s->z_err < 0) err = s->z_err; - - TRYFREE(s->inbuf); - TRYFREE(s->outbuf); - TRYFREE(s->path); - TRYFREE(s); - return err; -} - -/* =========================================================================== - Reads the given number of uncompressed bytes from the compressed file. - gzread returns the number of bytes actually read (0 for end of file). -*/ -int ZEXPORT gzread (file, buf, len) - gzFile file; - voidp buf; - unsigned len; -{ - gz_stream *s = (gz_stream*)file; - Bytef *start = (Bytef*)buf; /* starting point for crc computation */ - Byte *next_out; /* == stream.next_out but not forced far (for MSDOS) */ - - if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR; - - if (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO) return -1; - if (s->z_err == Z_STREAM_END) return 0; /* EOF */ - - next_out = (Byte*)buf; - s->stream.next_out = (Bytef*)buf; - s->stream.avail_out = len; - - if (s->stream.avail_out && s->back != EOF) { - *next_out++ = s->back; - s->stream.next_out++; - s->stream.avail_out--; - s->back = EOF; - s->out++; - start++; - if (s->last) { - s->z_err = Z_STREAM_END; - return 1; - } - } - - while (s->stream.avail_out != 0) { - - if (s->transparent) { - /* Copy first the lookahead bytes: */ - uInt n = s->stream.avail_in; - if (n > s->stream.avail_out) n = s->stream.avail_out; - if (n > 0) { - zmemcpy(s->stream.next_out, s->stream.next_in, n); - next_out += n; - s->stream.next_out = next_out; - s->stream.next_in += n; - s->stream.avail_out -= n; - s->stream.avail_in -= n; - } - if (s->stream.avail_out > 0) { - s->stream.avail_out -= - (uInt)fread(next_out, 1, s->stream.avail_out, s->file); - } - len -= s->stream.avail_out; - s->in += len; - s->out += len; - if (len == 0) s->z_eof = 1; - return (int)len; - } - if (s->stream.avail_in == 0 && !s->z_eof) { - - errno = 0; - s->stream.avail_in = (uInt)fread(s->inbuf, 1, Z_BUFSIZE, s->file); - if (s->stream.avail_in == 0) { - s->z_eof = 1; - if (ferror(s->file)) { - s->z_err = Z_ERRNO; - break; - } - } - s->stream.next_in = s->inbuf; - } - s->in += s->stream.avail_in; - s->out += s->stream.avail_out; - s->z_err = inflate(&(s->stream), Z_NO_FLUSH); - s->in -= s->stream.avail_in; - s->out -= s->stream.avail_out; - - if (s->z_err == Z_STREAM_END) { - /* Check CRC and original size */ - s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); - start = s->stream.next_out; - - if (getLong(s) != s->crc) { - s->z_err = Z_DATA_ERROR; - } else { - (void)getLong(s); - /* The uncompressed length returned by above getlong() may be - * different from s->out in case of concatenated .gz files. - * Check for such files: - */ - check_header(s); - if (s->z_err == Z_OK) { - inflateReset(&(s->stream)); - s->crc = crc32(0L, Z_NULL, 0); - } - } - } - if (s->z_err != Z_OK || s->z_eof) break; - } - s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); - - if (len == s->stream.avail_out && - (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO)) - return -1; - return (int)(len - s->stream.avail_out); -} - - -/* =========================================================================== - Reads one byte from the compressed file. gzgetc returns this byte - or -1 in case of end of file or error. -*/ -int ZEXPORT gzgetc(file) - gzFile file; -{ - unsigned char c; - - return gzread(file, &c, 1) == 1 ? c : -1; -} - - -/* =========================================================================== - Push one byte back onto the stream. -*/ -int ZEXPORT gzungetc(c, file) - int c; - gzFile file; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL || s->mode != 'r' || c == EOF || s->back != EOF) return EOF; - s->back = c; - s->out--; - s->last = (s->z_err == Z_STREAM_END); - if (s->last) s->z_err = Z_OK; - s->z_eof = 0; - return c; -} - - -/* =========================================================================== - Reads bytes from the compressed file until len-1 characters are - read, or a newline character is read and transferred to buf, or an - end-of-file condition is encountered. The string is then terminated - with a null character. - gzgets returns buf, or Z_NULL in case of error. - - The current implementation is not optimized at all. -*/ -char * ZEXPORT gzgets(file, buf, len) - gzFile file; - char *buf; - int len; -{ - char *b = buf; - if (buf == Z_NULL || len <= 0) return Z_NULL; - - while (--len > 0 && gzread(file, buf, 1) == 1 && *buf++ != '\n') ; - *buf = '\0'; - return b == buf && len > 0 ? Z_NULL : b; -} - - -#ifndef NO_GZCOMPRESS -/* =========================================================================== - Writes the given number of uncompressed bytes into the compressed file. - gzwrite returns the number of bytes actually written (0 in case of error). -*/ -int ZEXPORT gzwrite (file, buf, len) - gzFile file; - voidpc buf; - unsigned len; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; - - s->stream.next_in = (Bytef*)buf; - s->stream.avail_in = len; - - while (s->stream.avail_in != 0) { - - if (s->stream.avail_out == 0) { - - s->stream.next_out = s->outbuf; - if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) { - s->z_err = Z_ERRNO; - break; - } - s->stream.avail_out = Z_BUFSIZE; - } - s->in += s->stream.avail_in; - s->out += s->stream.avail_out; - s->z_err = deflate(&(s->stream), Z_NO_FLUSH); - s->in -= s->stream.avail_in; - s->out -= s->stream.avail_out; - if (s->z_err != Z_OK) break; - } - s->crc = crc32(s->crc, (const Bytef *)buf, len); - - return (int)(len - s->stream.avail_in); -} - - -/* =========================================================================== - Converts, formats, and writes the args to the compressed file under - control of the format string, as in fprintf. gzprintf returns the number of - uncompressed bytes actually written (0 in case of error). -*/ -#ifdef STDC -#include <stdarg.h> - -int ZEXPORTVA gzprintf (gzFile file, const char *format, /* args */ ...) -{ - char buf[Z_PRINTF_BUFSIZE]; - va_list va; - int len; - - buf[sizeof(buf) - 1] = 0; - va_start(va, format); -#ifdef NO_vsnprintf -# ifdef HAS_vsprintf_void - (void)vsprintf(buf, format, va); - va_end(va); - for (len = 0; len < sizeof(buf); len++) - if (buf[len] == 0) break; -# else - len = vsprintf(buf, format, va); - va_end(va); -# endif -#else -# ifdef HAS_vsnprintf_void - (void)vsnprintf(buf, sizeof(buf), format, va); - va_end(va); - len = strlen(buf); -# else - len = vsnprintf(buf, sizeof(buf), format, va); - va_end(va); -# endif -#endif - if (len <= 0 || len >= (int)sizeof(buf) || buf[sizeof(buf) - 1] != 0) - return 0; - return gzwrite(file, buf, (unsigned)len); -} -#else /* not ANSI C */ - -int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, - a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) - gzFile file; - const char *format; - int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, - a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; -{ - char buf[Z_PRINTF_BUFSIZE]; - int len; - - buf[sizeof(buf) - 1] = 0; -#ifdef NO_snprintf -# ifdef HAS_sprintf_void - sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8, - a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); - for (len = 0; len < sizeof(buf); len++) - if (buf[len] == 0) break; -# else - len = sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8, - a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); -# endif -#else -# ifdef HAS_snprintf_void - snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8, - a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); - len = strlen(buf); -# else - len = snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8, - a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); -# endif -#endif - if (len <= 0 || len >= sizeof(buf) || buf[sizeof(buf) - 1] != 0) - return 0; - return gzwrite(file, buf, len); -} -#endif - -/* =========================================================================== - Writes c, converted to an unsigned char, into the compressed file. - gzputc returns the value that was written, or -1 in case of error. -*/ -int ZEXPORT gzputc(file, c) - gzFile file; - int c; -{ - unsigned char cc = (unsigned char) c; /* required for big endian systems */ - - return gzwrite(file, &cc, 1) == 1 ? (int)cc : -1; -} - - -/* =========================================================================== - Writes the given null-terminated string to the compressed file, excluding - the terminating null character. - gzputs returns the number of characters written, or -1 in case of error. -*/ -int ZEXPORT gzputs(file, s) - gzFile file; - const char *s; -{ - return gzwrite(file, (char*)s, (unsigned)strlen(s)); -} - - -/* =========================================================================== - Flushes all pending output into the compressed file. The parameter - flush is as in the deflate() function. -*/ -local int do_flush (file, flush) - gzFile file; - int flush; -{ - uInt len; - int done = 0; - gz_stream *s = (gz_stream*)file; - - if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; - - s->stream.avail_in = 0; /* should be zero already anyway */ - - for (;;) { - len = Z_BUFSIZE - s->stream.avail_out; - - if (len != 0) { - if ((uInt)fwrite(s->outbuf, 1, len, s->file) != len) { - s->z_err = Z_ERRNO; - return Z_ERRNO; - } - s->stream.next_out = s->outbuf; - s->stream.avail_out = Z_BUFSIZE; - } - if (done) break; - s->out += s->stream.avail_out; - s->z_err = deflate(&(s->stream), flush); - s->out -= s->stream.avail_out; - - /* Ignore the second of two consecutive flushes: */ - if (len == 0 && s->z_err == Z_BUF_ERROR) s->z_err = Z_OK; - - /* deflate has finished flushing only when it hasn't used up - * all the available space in the output buffer: - */ - done = (s->stream.avail_out != 0 || s->z_err == Z_STREAM_END); - - if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break; - } - return s->z_err == Z_STREAM_END ? Z_OK : s->z_err; -} - -int ZEXPORT gzflush (file, flush) - gzFile file; - int flush; -{ - gz_stream *s = (gz_stream*)file; - int err = do_flush (file, flush); - - if (err) return err; - fflush(s->file); - return s->z_err == Z_STREAM_END ? Z_OK : s->z_err; -} -#endif /* NO_GZCOMPRESS */ - -/* =========================================================================== - Sets the starting position for the next gzread or gzwrite on the given - compressed file. The offset represents a number of bytes in the - gzseek returns the resulting offset location as measured in bytes from - the beginning of the uncompressed stream, or -1 in case of error. - SEEK_END is not implemented, returns error. - In this version of the library, gzseek can be extremely slow. -*/ -z_off_t ZEXPORT gzseek (file, offset, whence) - gzFile file; - z_off_t offset; - int whence; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL || whence == SEEK_END || - s->z_err == Z_ERRNO || s->z_err == Z_DATA_ERROR) { - return -1L; - } - - if (s->mode == 'w') { -#ifdef NO_GZCOMPRESS - return -1L; -#else - if (whence == SEEK_SET) { - offset -= s->in; - } - if (offset < 0) return -1L; - - /* At this point, offset is the number of zero bytes to write. */ - if (s->inbuf == Z_NULL) { - s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); /* for seeking */ - if (s->inbuf == Z_NULL) return -1L; - zmemzero(s->inbuf, Z_BUFSIZE); - } - while (offset > 0) { - uInt size = Z_BUFSIZE; - if (offset < Z_BUFSIZE) size = (uInt)offset; - - size = gzwrite(file, s->inbuf, size); - if (size == 0) return -1L; - - offset -= size; - } - return s->in; -#endif - } - /* Rest of function is for reading only */ - - /* compute absolute position */ - if (whence == SEEK_CUR) { - offset += s->out; - } - if (offset < 0) return -1L; - - if (s->transparent) { - /* map to fseek */ - s->back = EOF; - s->stream.avail_in = 0; - s->stream.next_in = s->inbuf; - if (fseek(s->file, offset, SEEK_SET) < 0) return -1L; - - s->in = s->out = offset; - return offset; - } - - /* For a negative seek, rewind and use positive seek */ - if (offset >= s->out) { - offset -= s->out; - } else if (gzrewind(file) < 0) { - return -1L; - } - /* offset is now the number of bytes to skip. */ - - if (offset != 0 && s->outbuf == Z_NULL) { - s->outbuf = (Byte*)ALLOC(Z_BUFSIZE); - if (s->outbuf == Z_NULL) return -1L; - } - if (offset && s->back != EOF) { - s->back = EOF; - s->out++; - offset--; - if (s->last) s->z_err = Z_STREAM_END; - } - while (offset > 0) { - int size = Z_BUFSIZE; - if (offset < Z_BUFSIZE) size = (int)offset; - - size = gzread(file, s->outbuf, (uInt)size); - if (size <= 0) return -1L; - offset -= size; - } - return s->out; -} - -/* =========================================================================== - Rewinds input file. -*/ -int ZEXPORT gzrewind (file) - gzFile file; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL || s->mode != 'r') return -1; - - s->z_err = Z_OK; - s->z_eof = 0; - s->back = EOF; - s->stream.avail_in = 0; - s->stream.next_in = s->inbuf; - s->crc = crc32(0L, Z_NULL, 0); - if (!s->transparent) (void)inflateReset(&s->stream); - s->in = 0; - s->out = 0; - return fseek(s->file, s->start, SEEK_SET); -} - -/* =========================================================================== - Returns the starting position for the next gzread or gzwrite on the - given compressed file. This position represents a number of bytes in the - uncompressed data stream. -*/ -z_off_t ZEXPORT gztell (file) - gzFile file; -{ - return gzseek(file, 0L, SEEK_CUR); -} - -/* =========================================================================== - Returns 1 when EOF has previously been detected reading the given - input stream, otherwise zero. -*/ -int ZEXPORT gzeof (file) - gzFile file; -{ - gz_stream *s = (gz_stream*)file; - - /* With concatenated compressed files that can have embedded - * crc trailers, z_eof is no longer the only/best indicator of EOF - * on a gz_stream. Handle end-of-stream error explicitly here. - */ - if (s == NULL || s->mode != 'r') return 0; - if (s->z_eof) return 1; - return s->z_err == Z_STREAM_END; -} - -/* =========================================================================== - Returns 1 if reading and doing so transparently, otherwise zero. -*/ -int ZEXPORT gzdirect (file) - gzFile file; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL || s->mode != 'r') return 0; - return s->transparent; -} - -/* =========================================================================== - Outputs a long in LSB order to the given file -*/ -local void putLong (file, x) - FILE *file; - uLong x; -{ - int n; - for (n = 0; n < 4; n++) { - fputc((int)(x & 0xff), file); - x >>= 8; - } -} - -/* =========================================================================== - Reads a long in LSB order from the given gz_stream. Sets z_err in case - of error. -*/ -local uLong getLong (s) - gz_stream *s; -{ - uLong x = (uLong)get_byte(s); - int c; - - x += ((uLong)get_byte(s))<<8; - x += ((uLong)get_byte(s))<<16; - c = get_byte(s); - if (c == EOF) s->z_err = Z_DATA_ERROR; - x += ((uLong)c)<<24; - return x; -} - -/* =========================================================================== - Flushes all pending output if necessary, closes the compressed file - and deallocates all the (de)compression state. -*/ -int ZEXPORT gzclose (file) - gzFile file; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL) return Z_STREAM_ERROR; - - if (s->mode == 'w') { -#ifdef NO_GZCOMPRESS - return Z_STREAM_ERROR; -#else - if (do_flush (file, Z_FINISH) != Z_OK) - return destroy((gz_stream*)file); - - putLong (s->file, s->crc); - putLong (s->file, (uLong)(s->in & 0xffffffff)); -#endif - } - return destroy((gz_stream*)file); -} - -#ifdef STDC -# define zstrerror(errnum) strerror(errnum) -#else -# define zstrerror(errnum) "" -#endif - -/* =========================================================================== - Returns the error message for the last error which occurred on the - given compressed file. errnum is set to zlib error number. If an - error occurred in the file system and not in the compression library, - errnum is set to Z_ERRNO and the application may consult errno - to get the exact error code. -*/ -const char * ZEXPORT gzerror (file, errnum) - gzFile file; - int *errnum; -{ - char *m; - gz_stream *s = (gz_stream*)file; - - if (s == NULL) { - *errnum = Z_STREAM_ERROR; - return (const char*)ERR_MSG(Z_STREAM_ERROR); - } - *errnum = s->z_err; - if (*errnum == Z_OK) return (const char*)""; - - m = (char*)(*errnum == Z_ERRNO ? zstrerror(errno) : s->stream.msg); - - if (m == NULL || *m == '\0') m = (char*)ERR_MSG(s->z_err); - - TRYFREE(s->msg); - s->msg = (char*)ALLOC(strlen(s->path) + strlen(m) + 3); - if (s->msg == Z_NULL) return (const char*)ERR_MSG(Z_MEM_ERROR); - strcpy(s->msg, s->path); - strcat(s->msg, ": "); - strcat(s->msg, m); - return (const char*)s->msg; -} - -/* =========================================================================== - Clear the error and end-of-file flags, and do the same for the real file. -*/ -void ZEXPORT gzclearerr (file) - gzFile file; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL) return; - if (s->z_err != Z_STREAM_END) s->z_err = Z_OK; - s->z_eof = 0; - clearerr(s->file); -} diff --git a/zlib/gzlib.c b/zlib/gzlib.c new file mode 100644 index 00000000000..603e60ed544 --- /dev/null +++ b/zlib/gzlib.c @@ -0,0 +1,537 @@ +/* gzlib.c -- zlib functions common to reading and writing gzip files + * Copyright (C) 2004, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 +# define LSEEK lseek64 +#else +# define LSEEK lseek +#endif + +/* Local functions */ +local void gz_reset OF((gz_statep)); +local gzFile gz_open OF((const char *, int, const char *)); + +#if defined UNDER_CE + +/* Map the Windows error number in ERROR to a locale-dependent error message + string and return a pointer to it. Typically, the values for ERROR come + from GetLastError. + + The string pointed to shall not be modified by the application, but may be + overwritten by a subsequent call to gz_strwinerror + + The gz_strwinerror function does not change the current setting of + GetLastError. */ +char ZLIB_INTERNAL *gz_strwinerror (error) + DWORD error; +{ + static char buf[1024]; + + wchar_t *msgbuf; + DWORD lasterr = GetLastError(); + DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM + | FORMAT_MESSAGE_ALLOCATE_BUFFER, + NULL, + error, + 0, /* Default language */ + (LPVOID)&msgbuf, + 0, + NULL); + if (chars != 0) { + /* If there is an \r\n appended, zap it. */ + if (chars >= 2 + && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') { + chars -= 2; + msgbuf[chars] = 0; + } + + if (chars > sizeof (buf) - 1) { + chars = sizeof (buf) - 1; + msgbuf[chars] = 0; + } + + wcstombs(buf, msgbuf, chars + 1); + LocalFree(msgbuf); + } + else { + sprintf(buf, "unknown win32 error (%ld)", error); + } + + SetLastError(lasterr); + return buf; +} + +#endif /* UNDER_CE */ + +/* Reset gzip file state */ +local void gz_reset(state) + gz_statep state; +{ + if (state->mode == GZ_READ) { /* for reading ... */ + state->have = 0; /* no output data available */ + state->eof = 0; /* not at end of file */ + state->how = LOOK; /* look for gzip header */ + state->direct = 1; /* default for empty file */ + } + state->seek = 0; /* no seek request pending */ + gz_error(state, Z_OK, NULL); /* clear error */ + state->pos = 0; /* no uncompressed data yet */ + state->strm.avail_in = 0; /* no input data yet */ +} + +/* Open a gzip file either by name or file descriptor. */ +local gzFile gz_open(path, fd, mode) + const char *path; + int fd; + const char *mode; +{ + gz_statep state; + + /* allocate gzFile structure to return */ + state = malloc(sizeof(gz_state)); + if (state == NULL) + return NULL; + state->size = 0; /* no buffers allocated yet */ + state->want = GZBUFSIZE; /* requested buffer size */ + state->msg = NULL; /* no error message yet */ + + /* interpret mode */ + state->mode = GZ_NONE; + state->level = Z_DEFAULT_COMPRESSION; + state->strategy = Z_DEFAULT_STRATEGY; + while (*mode) { + if (*mode >= '0' && *mode <= '9') + state->level = *mode - '0'; + else + switch (*mode) { + case 'r': + state->mode = GZ_READ; + break; +#ifndef NO_GZCOMPRESS + case 'w': + state->mode = GZ_WRITE; + break; + case 'a': + state->mode = GZ_APPEND; + break; +#endif + case '+': /* can't read and write at the same time */ + free(state); + return NULL; + case 'b': /* ignore -- will request binary anyway */ + break; + case 'f': + state->strategy = Z_FILTERED; + break; + case 'h': + state->strategy = Z_HUFFMAN_ONLY; + break; + case 'R': + state->strategy = Z_RLE; + break; + case 'F': + state->strategy = Z_FIXED; + default: /* could consider as an error, but just ignore */ + ; + } + mode++; + } + + /* must provide an "r", "w", or "a" */ + if (state->mode == GZ_NONE) { + free(state); + return NULL; + } + + /* save the path name for error messages */ + state->path = malloc(strlen(path) + 1); + if (state->path == NULL) { + free(state); + return NULL; + } + strcpy(state->path, path); + + /* open the file with the appropriate mode (or just use fd) */ + state->fd = fd != -1 ? fd : + open(path, +#ifdef O_LARGEFILE + O_LARGEFILE | +#endif +#ifdef O_BINARY + O_BINARY | +#endif + (state->mode == GZ_READ ? + O_RDONLY : + (O_WRONLY | O_CREAT | ( + state->mode == GZ_WRITE ? + O_TRUNC : + O_APPEND))), + 0666); + if (state->fd == -1) { + free(state->path); + free(state); + return NULL; + } + if (state->mode == GZ_APPEND) + state->mode = GZ_WRITE; /* simplify later checks */ + + /* save the current position for rewinding (only if reading) */ + if (state->mode == GZ_READ) { + state->start = LSEEK(state->fd, 0, SEEK_CUR); + if (state->start == -1) state->start = 0; + } + + /* initialize stream */ + gz_reset(state); + + /* return stream */ + return (gzFile)state; +} + +/* -- see zlib.h -- */ +gzFile ZEXPORT gzopen(path, mode) + const char *path; + const char *mode; +{ + return gz_open(path, -1, mode); +} + +/* -- see zlib.h -- */ +gzFile ZEXPORT gzopen64(path, mode) + const char *path; + const char *mode; +{ + return gz_open(path, -1, mode); +} + +/* -- see zlib.h -- */ +gzFile ZEXPORT gzdopen(fd, mode) + int fd; + const char *mode; +{ + char *path; /* identifier for error messages */ + gzFile gz; + + if (fd == -1 || (path = malloc(7 + 3 * sizeof(int))) == NULL) + return NULL; + sprintf(path, "<fd:%d>", fd); /* for debugging */ + gz = gz_open(path, fd, mode); + free(path); + return gz; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzbuffer(file, size) + gzFile file; + unsigned size; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* make sure we haven't already allocated memory */ + if (state->size != 0) + return -1; + + /* check and set requested size */ + if (size == 0) + return -1; + state->want = size; + return 0; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzrewind(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're reading and that there's no error */ + if (state->mode != GZ_READ || state->err != Z_OK) + return -1; + + /* back up and start over */ + if (LSEEK(state->fd, state->start, SEEK_SET) == -1) + return -1; + gz_reset(state); + return 0; +} + +/* -- see zlib.h -- */ +z_off64_t ZEXPORT gzseek64(file, offset, whence) + gzFile file; + z_off64_t offset; + int whence; +{ + unsigned n; + z_off64_t ret; + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* check that there's no error */ + if (state->err != Z_OK) + return -1; + + /* can only seek from start or relative to current position */ + if (whence != SEEK_SET && whence != SEEK_CUR) + return -1; + + /* normalize offset to a SEEK_CUR specification */ + if (whence == SEEK_SET) + offset -= state->pos; + else if (state->seek) + offset += state->skip; + state->seek = 0; + + /* if within raw area while reading, just go there */ + if (state->mode == GZ_READ && state->how == COPY && + state->pos + offset >= state->raw) { + ret = LSEEK(state->fd, offset - state->have, SEEK_CUR); + if (ret == -1) + return -1; + state->have = 0; + state->eof = 0; + state->seek = 0; + gz_error(state, Z_OK, NULL); + state->strm.avail_in = 0; + state->pos += offset; + return state->pos; + } + + /* calculate skip amount, rewinding if needed for back seek when reading */ + if (offset < 0) { + if (state->mode != GZ_READ) /* writing -- can't go backwards */ + return -1; + offset += state->pos; + if (offset < 0) /* before start of file! */ + return -1; + if (gzrewind(file) == -1) /* rewind, then skip to offset */ + return -1; + } + + /* if reading, skip what's in output buffer (one less gzgetc() check) */ + if (state->mode == GZ_READ) { + n = GT_OFF(state->have) || (z_off64_t)state->have > offset ? + (unsigned)offset : state->have; + state->have -= n; + state->next += n; + state->pos += n; + offset -= n; + } + + /* request skip (if not zero) */ + if (offset) { + state->seek = 1; + state->skip = offset; + } + return state->pos + offset; +} + +/* -- see zlib.h -- */ +z_off_t ZEXPORT gzseek(file, offset, whence) + gzFile file; + z_off_t offset; + int whence; +{ + z_off64_t ret; + + ret = gzseek64(file, (z_off64_t)offset, whence); + return ret == (z_off_t)ret ? (z_off_t)ret : -1; +} + +/* -- see zlib.h -- */ +z_off64_t ZEXPORT gztell64(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* return position */ + return state->pos + (state->seek ? state->skip : 0); +} + +/* -- see zlib.h -- */ +z_off_t ZEXPORT gztell(file) + gzFile file; +{ + z_off64_t ret; + + ret = gztell64(file); + return ret == (z_off_t)ret ? (z_off_t)ret : -1; +} + +/* -- see zlib.h -- */ +z_off64_t ZEXPORT gzoffset64(file) + gzFile file; +{ + z_off64_t offset; + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* compute and return effective offset in file */ + offset = LSEEK(state->fd, 0, SEEK_CUR); + if (offset == -1) + return -1; + if (state->mode == GZ_READ) /* reading */ + offset -= state->strm.avail_in; /* don't count buffered input */ + return offset; +} + +/* -- see zlib.h -- */ +z_off_t ZEXPORT gzoffset(file) + gzFile file; +{ + z_off64_t ret; + + ret = gzoffset64(file); + return ret == (z_off_t)ret ? (z_off_t)ret : -1; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzeof(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return 0; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return 0; + + /* return end-of-file state */ + return state->mode == GZ_READ ? + (state->eof && state->strm.avail_in == 0 && state->have == 0) : 0; +} + +/* -- see zlib.h -- */ +const char * ZEXPORT gzerror(file, errnum) + gzFile file; + int *errnum; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return NULL; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return NULL; + + /* return error information */ + if (errnum != NULL) + *errnum = state->err; + return state->msg == NULL ? "" : state->msg; +} + +/* -- see zlib.h -- */ +void ZEXPORT gzclearerr(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return; + + /* clear error and end-of-file */ + if (state->mode == GZ_READ) + state->eof = 0; + gz_error(state, Z_OK, NULL); +} + +/* Create an error message in allocated memory and set state->err and + state->msg accordingly. Free any previous error message already there. Do + not try to free or allocate space if the error is Z_MEM_ERROR (out of + memory). Simply save the error message as a static string. If there is an + allocation failure constructing the error message, then convert the error to + out of memory. */ +void ZLIB_INTERNAL gz_error(state, err, msg) + gz_statep state; + int err; + const char *msg; +{ + /* free previously allocated message and clear */ + if (state->msg != NULL) { + if (state->err != Z_MEM_ERROR) + free(state->msg); + state->msg = NULL; + } + + /* set error code, and if no message, then done */ + state->err = err; + if (msg == NULL) + return; + + /* for an out of memory error, save as static string */ + if (err == Z_MEM_ERROR) { + state->msg = (char *)msg; + return; + } + + /* construct error message with path */ + if ((state->msg = malloc(strlen(state->path) + strlen(msg) + 3)) == NULL) { + state->err = Z_MEM_ERROR; + state->msg = (char *)"out of memory"; + return; + } + strcpy(state->msg, state->path); + strcat(state->msg, ": "); + strcat(state->msg, msg); + return; +} + +#ifndef INT_MAX +/* portably return maximum value for an int (when limits.h presumed not + available) -- we need to do this to cover cases where 2's complement not + used, since C standard permits 1's complement and sign-bit representations, + otherwise we could just use ((unsigned)-1) >> 1 */ +unsigned ZLIB_INTERNAL gz_intmax() +{ + unsigned p, q; + + p = 1; + do { + q = p; + p <<= 1; + p++; + } while (p > q); + return q >> 1; +} +#endif diff --git a/zlib/gzread.c b/zlib/gzread.c new file mode 100644 index 00000000000..548201ab009 --- /dev/null +++ b/zlib/gzread.c @@ -0,0 +1,653 @@ +/* gzread.c -- zlib functions for reading gzip files + * Copyright (C) 2004, 2005, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +/* Local functions */ +local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *)); +local int gz_avail OF((gz_statep)); +local int gz_next4 OF((gz_statep, unsigned long *)); +local int gz_head OF((gz_statep)); +local int gz_decomp OF((gz_statep)); +local int gz_make OF((gz_statep)); +local int gz_skip OF((gz_statep, z_off64_t)); + +/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from + state->fd, and update state->eof, state->err, and state->msg as appropriate. + This function needs to loop on read(), since read() is not guaranteed to + read the number of bytes requested, depending on the type of descriptor. */ +local int gz_load(state, buf, len, have) + gz_statep state; + unsigned char *buf; + unsigned len; + unsigned *have; +{ + int ret; + + *have = 0; + do { + ret = read(state->fd, buf + *have, len - *have); + if (ret <= 0) + break; + *have += ret; + } while (*have < len); + if (ret < 0) { + gz_error(state, Z_ERRNO, zstrerror()); + return -1; + } + if (ret == 0) + state->eof = 1; + return 0; +} + +/* Load up input buffer and set eof flag if last data loaded -- return -1 on + error, 0 otherwise. Note that the eof flag is set when the end of the input + file is reached, even though there may be unused data in the buffer. Once + that data has been used, no more attempts will be made to read the file. + gz_avail() assumes that strm->avail_in == 0. */ +local int gz_avail(state) + gz_statep state; +{ + z_streamp strm = &(state->strm); + + if (state->err != Z_OK) + return -1; + if (state->eof == 0) { + if (gz_load(state, state->in, state->size, + (unsigned *)&(strm->avail_in)) == -1) + return -1; + strm->next_in = state->in; + } + return 0; +} + +/* Get next byte from input, or -1 if end or error. */ +#define NEXT() ((strm->avail_in == 0 && gz_avail(state) == -1) ? -1 : \ + (strm->avail_in == 0 ? -1 : \ + (strm->avail_in--, *(strm->next_in)++))) + +/* Get a four-byte little-endian integer and return 0 on success and the value + in *ret. Otherwise -1 is returned and *ret is not modified. */ +local int gz_next4(state, ret) + gz_statep state; + unsigned long *ret; +{ + int ch; + unsigned long val; + z_streamp strm = &(state->strm); + + val = NEXT(); + val += (unsigned)NEXT() << 8; + val += (unsigned long)NEXT() << 16; + ch = NEXT(); + if (ch == -1) + return -1; + val += (unsigned long)ch << 24; + *ret = val; + return 0; +} + +/* Look for gzip header, set up for inflate or copy. state->have must be zero. + If this is the first time in, allocate required memory. state->how will be + left unchanged if there is no more input data available, will be set to COPY + if there is no gzip header and direct copying will be performed, or it will + be set to GZIP for decompression, and the gzip header will be skipped so + that the next available input data is the raw deflate stream. If direct + copying, then leftover input data from the input buffer will be copied to + the output buffer. In that case, all further file reads will be directly to + either the output buffer or a user buffer. If decompressing, the inflate + state and the check value will be initialized. gz_head() will return 0 on + success or -1 on failure. Failures may include read errors or gzip header + errors. */ +local int gz_head(state) + gz_statep state; +{ + z_streamp strm = &(state->strm); + int flags; + unsigned len; + + /* allocate read buffers and inflate memory */ + if (state->size == 0) { + /* allocate buffers */ + state->in = malloc(state->want); + state->out = malloc(state->want << 1); + if (state->in == NULL || state->out == NULL) { + if (state->out != NULL) + free(state->out); + if (state->in != NULL) + free(state->in); + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + state->size = state->want; + + /* allocate inflate memory */ + state->strm.zalloc = Z_NULL; + state->strm.zfree = Z_NULL; + state->strm.opaque = Z_NULL; + state->strm.avail_in = 0; + state->strm.next_in = Z_NULL; + if (inflateInit2(&(state->strm), -15) != Z_OK) { /* raw inflate */ + free(state->out); + free(state->in); + state->size = 0; + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + } + + /* get some data in the input buffer */ + if (strm->avail_in == 0) { + if (gz_avail(state) == -1) + return -1; + if (strm->avail_in == 0) + return 0; + } + + /* look for the gzip magic header bytes 31 and 139 */ + if (strm->next_in[0] == 31) { + strm->avail_in--; + strm->next_in++; + if (strm->avail_in == 0 && gz_avail(state) == -1) + return -1; + if (strm->avail_in && strm->next_in[0] == 139) { + /* we have a gzip header, woo hoo! */ + strm->avail_in--; + strm->next_in++; + + /* skip rest of header */ + if (NEXT() != 8) { /* compression method */ + gz_error(state, Z_DATA_ERROR, "unknown compression method"); + return -1; + } + flags = NEXT(); + if (flags & 0xe0) { /* reserved flag bits */ + gz_error(state, Z_DATA_ERROR, "unknown header flags set"); + return -1; + } + NEXT(); /* modification time */ + NEXT(); + NEXT(); + NEXT(); + NEXT(); /* extra flags */ + NEXT(); /* operating system */ + if (flags & 4) { /* extra field */ + len = (unsigned)NEXT(); + len += (unsigned)NEXT() << 8; + while (len--) + if (NEXT() < 0) + break; + } + if (flags & 8) /* file name */ + while (NEXT() > 0) + ; + if (flags & 16) /* comment */ + while (NEXT() > 0) + ; + if (flags & 2) { /* header crc */ + NEXT(); + NEXT(); + } + /* an unexpected end of file is not checked for here -- it will be + noticed on the first request for uncompressed data */ + + /* set up for decompression */ + inflateReset(strm); + strm->adler = crc32(0L, Z_NULL, 0); + state->how = GZIP; + state->direct = 0; + return 0; + } + else { + /* not a gzip file -- save first byte (31) and fall to raw i/o */ + state->out[0] = 31; + state->have = 1; + } + } + + /* doing raw i/o, save start of raw data for seeking, copy any leftover + input to output -- this assumes that the output buffer is larger than + the input buffer, which also assures space for gzungetc() */ + state->raw = state->pos; + state->next = state->out; + if (strm->avail_in) { + memcpy(state->next + state->have, strm->next_in, strm->avail_in); + state->have += strm->avail_in; + strm->avail_in = 0; + } + state->how = COPY; + state->direct = 1; + return 0; +} + +/* Decompress from input to the provided next_out and avail_out in the state. + If the end of the compressed data is reached, then verify the gzip trailer + check value and length (modulo 2^32). state->have and state->next are set + to point to the just decompressed data, and the crc is updated. If the + trailer is verified, state->how is reset to LOOK to look for the next gzip + stream or raw data, once state->have is depleted. Returns 0 on success, -1 + on failure. Failures may include invalid compressed data or a failed gzip + trailer verification. */ +local int gz_decomp(state) + gz_statep state; +{ + int ret; + unsigned had; + unsigned long crc, len; + z_streamp strm = &(state->strm); + + /* fill output buffer up to end of deflate stream */ + had = strm->avail_out; + do { + /* get more input for inflate() */ + if (strm->avail_in == 0 && gz_avail(state) == -1) + return -1; + if (strm->avail_in == 0) { + gz_error(state, Z_DATA_ERROR, "unexpected end of file"); + return -1; + } + + /* decompress and handle errors */ + ret = inflate(strm, Z_NO_FLUSH); + if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) { + gz_error(state, Z_STREAM_ERROR, + "internal error: inflate stream corrupt"); + return -1; + } + if (ret == Z_MEM_ERROR) { + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + if (ret == Z_DATA_ERROR) { /* deflate stream invalid */ + gz_error(state, Z_DATA_ERROR, + strm->msg == NULL ? "compressed data error" : strm->msg); + return -1; + } + } while (strm->avail_out && ret != Z_STREAM_END); + + /* update available output and crc check value */ + state->have = had - strm->avail_out; + state->next = strm->next_out - state->have; + strm->adler = crc32(strm->adler, state->next, state->have); + + /* check gzip trailer if at end of deflate stream */ + if (ret == Z_STREAM_END) { + if (gz_next4(state, &crc) == -1 || gz_next4(state, &len) == -1) { + gz_error(state, Z_DATA_ERROR, "unexpected end of file"); + return -1; + } + if (crc != strm->adler) { + gz_error(state, Z_DATA_ERROR, "incorrect data check"); + return -1; + } + if (len != (strm->total_out & 0xffffffffL)) { + gz_error(state, Z_DATA_ERROR, "incorrect length check"); + return -1; + } + state->how = LOOK; /* ready for next stream, once have is 0 (leave + state->direct unchanged to remember how) */ + } + + /* good decompression */ + return 0; +} + +/* Make data and put in the output buffer. Assumes that state->have == 0. + Data is either copied from the input file or decompressed from the input + file depending on state->how. If state->how is LOOK, then a gzip header is + looked for (and skipped if found) to determine wither to copy or decompress. + Returns -1 on error, otherwise 0. gz_make() will leave state->have as COPY + or GZIP unless the end of the input file has been reached and all data has + been processed. */ +local int gz_make(state) + gz_statep state; +{ + z_streamp strm = &(state->strm); + + if (state->how == LOOK) { /* look for gzip header */ + if (gz_head(state) == -1) + return -1; + if (state->have) /* got some data from gz_head() */ + return 0; + } + if (state->how == COPY) { /* straight copy */ + if (gz_load(state, state->out, state->size << 1, &(state->have)) == -1) + return -1; + state->next = state->out; + } + else if (state->how == GZIP) { /* decompress */ + strm->avail_out = state->size << 1; + strm->next_out = state->out; + if (gz_decomp(state) == -1) + return -1; + } + return 0; +} + +/* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */ +local int gz_skip(state, len) + gz_statep state; + z_off64_t len; +{ + unsigned n; + + /* skip over len bytes or reach end-of-file, whichever comes first */ + while (len) + /* skip over whatever is in output buffer */ + if (state->have) { + n = GT_OFF(state->have) || (z_off64_t)state->have > len ? + (unsigned)len : state->have; + state->have -= n; + state->next += n; + state->pos += n; + len -= n; + } + + /* output buffer empty -- return if we're at the end of the input */ + else if (state->eof && state->strm.avail_in == 0) + break; + + /* need more data to skip -- load up output buffer */ + else { + /* get more output, looking for header if required */ + if (gz_make(state) == -1) + return -1; + } + return 0; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzread(file, buf, len) + gzFile file; + voidp buf; + unsigned len; +{ + unsigned got, n; + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're reading and that there's no error */ + if (state->mode != GZ_READ || state->err != Z_OK) + return -1; + + /* since an int is returned, make sure len fits in one, otherwise return + with an error (this avoids the flaw in the interface) */ + if ((int)len < 0) { + gz_error(state, Z_BUF_ERROR, "requested length does not fit in int"); + return -1; + } + + /* if len is zero, avoid unnecessary operations */ + if (len == 0) + return 0; + + /* process a skip request */ + if (state->seek) { + state->seek = 0; + if (gz_skip(state, state->skip) == -1) + return -1; + } + + /* get len bytes to buf, or less than len if at the end */ + got = 0; + do { + /* first just try copying data from the output buffer */ + if (state->have) { + n = state->have > len ? len : state->have; + memcpy(buf, state->next, n); + state->next += n; + state->have -= n; + } + + /* output buffer empty -- return if we're at the end of the input */ + else if (state->eof && strm->avail_in == 0) + break; + + /* need output data -- for small len or new stream load up our output + buffer */ + else if (state->how == LOOK || len < (state->size << 1)) { + /* get more output, looking for header if required */ + if (gz_make(state) == -1) + return -1; + continue; /* no progress yet -- go back to memcpy() above */ + /* the copy above assures that we will leave with space in the + output buffer, allowing at least one gzungetc() to succeed */ + } + + /* large len -- read directly into user buffer */ + else if (state->how == COPY) { /* read directly */ + if (gz_load(state, buf, len, &n) == -1) + return -1; + } + + /* large len -- decompress directly into user buffer */ + else { /* state->how == GZIP */ + strm->avail_out = len; + strm->next_out = buf; + if (gz_decomp(state) == -1) + return -1; + n = state->have; + state->have = 0; + } + + /* update progress */ + len -= n; + buf = (char *)buf + n; + got += n; + state->pos += n; + } while (len); + + /* return number of bytes read into user buffer (will fit in int) */ + return (int)got; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzgetc(file) + gzFile file; +{ + int ret; + unsigned char buf[1]; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're reading and that there's no error */ + if (state->mode != GZ_READ || state->err != Z_OK) + return -1; + + /* try output buffer (no need to check for skip request) */ + if (state->have) { + state->have--; + state->pos++; + return *(state->next)++; + } + + /* nothing there -- try gzread() */ + ret = gzread(file, buf, 1); + return ret < 1 ? -1 : buf[0]; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzungetc(c, file) + int c; + gzFile file; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're reading and that there's no error */ + if (state->mode != GZ_READ || state->err != Z_OK) + return -1; + + /* process a skip request */ + if (state->seek) { + state->seek = 0; + if (gz_skip(state, state->skip) == -1) + return -1; + } + + /* can't push EOF */ + if (c < 0) + return -1; + + /* if output buffer empty, put byte at end (allows more pushing) */ + if (state->have == 0) { + state->have = 1; + state->next = state->out + (state->size << 1) - 1; + state->next[0] = c; + state->pos--; + return c; + } + + /* if no room, give up (must have already done a gzungetc()) */ + if (state->have == (state->size << 1)) { + gz_error(state, Z_BUF_ERROR, "out of room to push characters"); + return -1; + } + + /* slide output data if needed and insert byte before existing data */ + if (state->next == state->out) { + unsigned char *src = state->out + state->have; + unsigned char *dest = state->out + (state->size << 1); + while (src > state->out) + *--dest = *--src; + state->next = dest; + } + state->have++; + state->next--; + state->next[0] = c; + state->pos--; + return c; +} + +/* -- see zlib.h -- */ +char * ZEXPORT gzgets(file, buf, len) + gzFile file; + char *buf; + int len; +{ + unsigned left, n; + char *str; + unsigned char *eol; + gz_statep state; + + /* check parameters and get internal structure */ + if (file == NULL || buf == NULL || len < 1) + return NULL; + state = (gz_statep)file; + + /* check that we're reading and that there's no error */ + if (state->mode != GZ_READ || state->err != Z_OK) + return NULL; + + /* process a skip request */ + if (state->seek) { + state->seek = 0; + if (gz_skip(state, state->skip) == -1) + return NULL; + } + + /* copy output bytes up to new line or len - 1, whichever comes first -- + append a terminating zero to the string (we don't check for a zero in + the contents, let the user worry about that) */ + str = buf; + left = (unsigned)len - 1; + if (left) do { + /* assure that something is in the output buffer */ + if (state->have == 0) { + if (gz_make(state) == -1) + return NULL; /* error */ + if (state->have == 0) { /* end of file */ + if (buf == str) /* got bupkus */ + return NULL; + break; /* got something -- return it */ + } + } + + /* look for end-of-line in current output buffer */ + n = state->have > left ? left : state->have; + eol = memchr(state->next, '\n', n); + if (eol != NULL) + n = (unsigned)(eol - state->next) + 1; + + /* copy through end-of-line, or remainder if not found */ + memcpy(buf, state->next, n); + state->have -= n; + state->next += n; + state->pos += n; + left -= n; + buf += n; + } while (left && eol == NULL); + + /* found end-of-line or out of space -- terminate string and return it */ + buf[0] = 0; + return str; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzdirect(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + + /* check that we're reading */ + if (state->mode != GZ_READ) + return 0; + + /* if the state is not known, but we can find out, then do so (this is + mainly for right after a gzopen() or gzdopen()) */ + if (state->how == LOOK && state->have == 0) + (void)gz_head(state); + + /* return 1 if reading direct, 0 if decompressing a gzip stream */ + return state->direct; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzclose_r(file) + gzFile file; +{ + int ret; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + + /* check that we're reading */ + if (state->mode != GZ_READ) + return Z_STREAM_ERROR; + + /* free memory and close file */ + if (state->size) { + inflateEnd(&(state->strm)); + free(state->out); + free(state->in); + } + gz_error(state, Z_OK, NULL); + free(state->path); + ret = close(state->fd); + free(state); + return ret ? Z_ERRNO : Z_OK; +} diff --git a/zlib/gzwrite.c b/zlib/gzwrite.c new file mode 100644 index 00000000000..e8defc6887a --- /dev/null +++ b/zlib/gzwrite.c @@ -0,0 +1,531 @@ +/* gzwrite.c -- zlib functions for writing gzip files + * Copyright (C) 2004, 2005, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +/* Local functions */ +local int gz_init OF((gz_statep)); +local int gz_comp OF((gz_statep, int)); +local int gz_zero OF((gz_statep, z_off64_t)); + +/* Initialize state for writing a gzip file. Mark initialization by setting + state->size to non-zero. Return -1 on failure or 0 on success. */ +local int gz_init(state) + gz_statep state; +{ + int ret; + z_streamp strm = &(state->strm); + + /* allocate input and output buffers */ + state->in = malloc(state->want); + state->out = malloc(state->want); + if (state->in == NULL || state->out == NULL) { + if (state->out != NULL) + free(state->out); + if (state->in != NULL) + free(state->in); + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + + /* allocate deflate memory, set up for gzip compression */ + strm->zalloc = Z_NULL; + strm->zfree = Z_NULL; + strm->opaque = Z_NULL; + ret = deflateInit2(strm, state->level, Z_DEFLATED, + 15 + 16, 8, state->strategy); + if (ret != Z_OK) { + free(state->in); + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + + /* mark state as initialized */ + state->size = state->want; + + /* initialize write buffer */ + strm->avail_out = state->size; + strm->next_out = state->out; + state->next = strm->next_out; + return 0; +} + +/* Compress whatever is at avail_in and next_in and write to the output file. + Return -1 if there is an error writing to the output file, otherwise 0. + flush is assumed to be a valid deflate() flush value. If flush is Z_FINISH, + then the deflate() state is reset to start a new gzip stream. */ +local int gz_comp(state, flush) + gz_statep state; + int flush; +{ + int ret, got; + unsigned have; + z_streamp strm = &(state->strm); + + /* allocate memory if this is the first time through */ + if (state->size == 0 && gz_init(state) == -1) + return -1; + + /* run deflate() on provided input until it produces no more output */ + ret = Z_OK; + do { + /* write out current buffer contents if full, or if flushing, but if + doing Z_FINISH then don't write until we get to Z_STREAM_END */ + if (strm->avail_out == 0 || (flush != Z_NO_FLUSH && + (flush != Z_FINISH || ret == Z_STREAM_END))) { + have = (unsigned)(strm->next_out - state->next); + if (have && ((got = write(state->fd, state->next, have)) < 0 || + (unsigned)got != have)) { + gz_error(state, Z_ERRNO, zstrerror()); + return -1; + } + if (strm->avail_out == 0) { + strm->avail_out = state->size; + strm->next_out = state->out; + } + state->next = strm->next_out; + } + + /* compress */ + have = strm->avail_out; + ret = deflate(strm, flush); + if (ret == Z_STREAM_ERROR) { + gz_error(state, Z_STREAM_ERROR, + "internal error: deflate stream corrupt"); + return -1; + } + have -= strm->avail_out; + } while (have); + + /* if that completed a deflate stream, allow another to start */ + if (flush == Z_FINISH) + deflateReset(strm); + + /* all done, no errors */ + return 0; +} + +/* Compress len zeros to output. Return -1 on error, 0 on success. */ +local int gz_zero(state, len) + gz_statep state; + z_off64_t len; +{ + int first; + unsigned n; + z_streamp strm = &(state->strm); + + /* consume whatever's left in the input buffer */ + if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + return -1; + + /* compress len zeros (len guaranteed > 0) */ + first = 1; + while (len) { + n = GT_OFF(state->size) || (z_off64_t)state->size > len ? + (unsigned)len : state->size; + if (first) { + memset(state->in, 0, n); + first = 0; + } + strm->avail_in = n; + strm->next_in = state->in; + state->pos += n; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return -1; + len -= n; + } + return 0; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzwrite(file, buf, len) + gzFile file; + voidpc buf; + unsigned len; +{ + unsigned put = len; + unsigned n; + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return 0; + + /* since an int is returned, make sure len fits in one, otherwise return + with an error (this avoids the flaw in the interface) */ + if ((int)len < 0) { + gz_error(state, Z_BUF_ERROR, "requested length does not fit in int"); + return 0; + } + + /* if len is zero, avoid unnecessary operations */ + if (len == 0) + return 0; + + /* allocate memory if this is the first time through */ + if (state->size == 0 && gz_init(state) == -1) + return 0; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return 0; + } + + /* for small len, copy to input buffer, otherwise compress directly */ + if (len < state->size) { + /* copy to input buffer, compress when full */ + do { + if (strm->avail_in == 0) + strm->next_in = state->in; + n = state->size - strm->avail_in; + if (n > len) + n = len; + memcpy(strm->next_in + strm->avail_in, buf, n); + strm->avail_in += n; + state->pos += n; + buf = (char *)buf + n; + len -= n; + if (len && gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + } while (len); + } + else { + /* consume whatever's left in the input buffer */ + if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + + /* directly compress user buffer to file */ + strm->avail_in = len; + strm->next_in = (voidp)buf; + state->pos += len; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + } + + /* input was all buffered or compressed (put will fit in int) */ + return (int)put; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzputc(file, c) + gzFile file; + int c; +{ + unsigned char buf[1]; + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return -1; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return -1; + } + + /* try writing to input buffer for speed (state->size == 0 if buffer not + initialized) */ + if (strm->avail_in < state->size) { + if (strm->avail_in == 0) + strm->next_in = state->in; + strm->next_in[strm->avail_in++] = c; + state->pos++; + return c; + } + + /* no room in buffer or not initialized, use gz_write() */ + buf[0] = c; + if (gzwrite(file, buf, 1) != 1) + return -1; + return c; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzputs(file, str) + gzFile file; + const char *str; +{ + int ret; + unsigned len; + + /* write string */ + len = (unsigned)strlen(str); + ret = gzwrite(file, str, len); + return ret == 0 && len != 0 ? -1 : ret; +} + +#ifdef STDC +#include <stdarg.h> + +/* -- see zlib.h -- */ +int ZEXPORTVA gzprintf (gzFile file, const char *format, ...) +{ + int size, len; + gz_statep state; + z_streamp strm; + va_list va; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return 0; + + /* make sure we have some buffer space */ + if (state->size == 0 && gz_init(state) == -1) + return 0; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return 0; + } + + /* consume whatever's left in the input buffer */ + if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + + /* do the printf() into the input buffer, put length in len */ + size = (int)(state->size); + state->in[size - 1] = 0; + va_start(va, format); +#ifdef NO_vsnprintf +# ifdef HAS_vsprintf_void + (void)vsprintf(state->in, format, va); + va_end(va); + for (len = 0; len < size; len++) + if (state->in[len] == 0) break; +# else + len = vsprintf(state->in, format, va); + va_end(va); +# endif +#else +# ifdef HAS_vsnprintf_void + (void)vsnprintf(state->in, size, format, va); + va_end(va); + len = strlen(state->in); +# else + len = vsnprintf((char *)(state->in), size, format, va); + va_end(va); +# endif +#endif + + /* check that printf() results fit in buffer */ + if (len <= 0 || len >= (int)size || state->in[size - 1] != 0) + return 0; + + /* update buffer and position, defer compression until needed */ + strm->avail_in = (unsigned)len; + strm->next_in = state->in; + state->pos += len; + return len; +} + +#else /* !STDC */ + +/* -- see zlib.h -- */ +int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, + a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) + gzFile file; + const char *format; + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, + a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; +{ + int size, len; + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return 0; + + /* make sure we have some buffer space */ + if (state->size == 0 && gz_init(state) == -1) + return 0; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return 0; + } + + /* consume whatever's left in the input buffer */ + if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + + /* do the printf() into the input buffer, put length in len */ + size = (int)(state->size); + state->in[size - 1] = 0; +#ifdef NO_snprintf +# ifdef HAS_sprintf_void + sprintf(state->in, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); + for (len = 0; len < size; len++) + if (state->in[len] == 0) break; +# else + len = sprintf(state->in, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +# endif +#else +# ifdef HAS_snprintf_void + snprintf(state->in, size, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); + len = strlen(state->in); +# else + len = snprintf(state->in, size, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +# endif +#endif + + /* check that printf() results fit in buffer */ + if (len <= 0 || len >= (int)size || state->in[size - 1] != 0) + return 0; + + /* update buffer and position, defer compression until needed */ + strm->avail_in = (unsigned)len; + strm->next_in = state->in; + state->pos += len; + return len; +} + +#endif + +/* -- see zlib.h -- */ +int ZEXPORT gzflush(file, flush) + gzFile file; + int flush; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return Z_STREAM_ERROR; + + /* check flush parameter */ + if (flush < 0 || flush > Z_FINISH) + return Z_STREAM_ERROR; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return -1; + } + + /* compress remaining data with requested flush */ + gz_comp(state, flush); + return state->err; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzsetparams(file, level, strategy) + gzFile file; + int level; + int strategy; +{ + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return Z_STREAM_ERROR; + + /* if no change is requested, then do nothing */ + if (level == state->level && strategy == state->strategy) + return Z_OK; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return -1; + } + + /* change compression parameters for subsequent input */ + if (state->size) { + /* flush previous input with previous parameters before changing */ + if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1) + return state->err; + deflateParams(strm, level, strategy); + } + state->level = level; + state->strategy = strategy; + return Z_OK; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzclose_w(file) + gzFile file; +{ + int ret = 0; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + + /* check that we're writing */ + if (state->mode != GZ_WRITE) + return Z_STREAM_ERROR; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + ret += gz_zero(state, state->skip); + } + + /* flush, free memory, and close file */ + ret += gz_comp(state, Z_FINISH); + (void)deflateEnd(&(state->strm)); + free(state->out); + free(state->in); + gz_error(state, Z_OK, NULL); + free(state->path); + ret += close(state->fd); + free(state); + return ret ? Z_ERRNO : Z_OK; +} diff --git a/zlib/infback.c b/zlib/infback.c index 455dbc9ee84..af3a8c965d5 100644 --- a/zlib/infback.c +++ b/zlib/infback.c @@ -1,5 +1,5 @@ /* infback.c -- inflate using a call-back interface - * Copyright (C) 1995-2005 Mark Adler + * Copyright (C) 1995-2009 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -55,7 +55,7 @@ int stream_size; state->wbits = windowBits; state->wsize = 1U << windowBits; state->window = window; - state->write = 0; + state->wnext = 0; state->whave = 0; return Z_OK; } @@ -253,7 +253,7 @@ void FAR *out_desc; unsigned bits; /* bits in bit buffer */ unsigned copy; /* number of stored or match bytes to copy */ unsigned char FAR *from; /* where to copy match bytes from */ - code this; /* current decoding table entry */ + code here; /* current decoding table entry */ code last; /* parent table entry */ unsigned len; /* length to copy for repeats, bits to drop */ int ret; /* return code */ @@ -389,19 +389,19 @@ void FAR *out_desc; state->have = 0; while (state->have < state->nlen + state->ndist) { for (;;) { - this = state->lencode[BITS(state->lenbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if (this.val < 16) { - NEEDBITS(this.bits); - DROPBITS(this.bits); - state->lens[state->have++] = this.val; + if (here.val < 16) { + NEEDBITS(here.bits); + DROPBITS(here.bits); + state->lens[state->have++] = here.val; } else { - if (this.val == 16) { - NEEDBITS(this.bits + 2); - DROPBITS(this.bits); + if (here.val == 16) { + NEEDBITS(here.bits + 2); + DROPBITS(here.bits); if (state->have == 0) { strm->msg = (char *)"invalid bit length repeat"; state->mode = BAD; @@ -411,16 +411,16 @@ void FAR *out_desc; copy = 3 + BITS(2); DROPBITS(2); } - else if (this.val == 17) { - NEEDBITS(this.bits + 3); - DROPBITS(this.bits); + else if (here.val == 17) { + NEEDBITS(here.bits + 3); + DROPBITS(here.bits); len = 0; copy = 3 + BITS(3); DROPBITS(3); } else { - NEEDBITS(this.bits + 7); - DROPBITS(this.bits); + NEEDBITS(here.bits + 7); + DROPBITS(here.bits); len = 0; copy = 11 + BITS(7); DROPBITS(7); @@ -438,7 +438,16 @@ void FAR *out_desc; /* handle error breaks in while */ if (state->mode == BAD) break; - /* build code tables */ + /* check for end-of-block code (better have one) */ + if (state->lens[256] == 0) { + strm->msg = (char *)"invalid code -- missing end-of-block"; + state->mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ state->next = state->codes; state->lencode = (code const FAR *)(state->next); state->lenbits = 9; @@ -474,28 +483,28 @@ void FAR *out_desc; /* get a literal, length, or end-of-block code */ for (;;) { - this = state->lencode[BITS(state->lenbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if (this.op && (this.op & 0xf0) == 0) { - last = this; + if (here.op && (here.op & 0xf0) == 0) { + last = here; for (;;) { - this = state->lencode[last.val + + here = state->lencode[last.val + (BITS(last.bits + last.op) >> last.bits)]; - if ((unsigned)(last.bits + this.bits) <= bits) break; + if ((unsigned)(last.bits + here.bits) <= bits) break; PULLBYTE(); } DROPBITS(last.bits); } - DROPBITS(this.bits); - state->length = (unsigned)this.val; + DROPBITS(here.bits); + state->length = (unsigned)here.val; /* process literal */ - if (this.op == 0) { - Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + if (here.op == 0) { + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? "inflate: literal '%c'\n" : - "inflate: literal 0x%02x\n", this.val)); + "inflate: literal 0x%02x\n", here.val)); ROOM(); *put++ = (unsigned char)(state->length); left--; @@ -504,21 +513,21 @@ void FAR *out_desc; } /* process end of block */ - if (this.op & 32) { + if (here.op & 32) { Tracevv((stderr, "inflate: end of block\n")); state->mode = TYPE; break; } /* invalid code */ - if (this.op & 64) { + if (here.op & 64) { strm->msg = (char *)"invalid literal/length code"; state->mode = BAD; break; } /* length code -- get extra bits, if any */ - state->extra = (unsigned)(this.op) & 15; + state->extra = (unsigned)(here.op) & 15; if (state->extra != 0) { NEEDBITS(state->extra); state->length += BITS(state->extra); @@ -528,30 +537,30 @@ void FAR *out_desc; /* get distance code */ for (;;) { - this = state->distcode[BITS(state->distbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = state->distcode[BITS(state->distbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if ((this.op & 0xf0) == 0) { - last = this; + if ((here.op & 0xf0) == 0) { + last = here; for (;;) { - this = state->distcode[last.val + + here = state->distcode[last.val + (BITS(last.bits + last.op) >> last.bits)]; - if ((unsigned)(last.bits + this.bits) <= bits) break; + if ((unsigned)(last.bits + here.bits) <= bits) break; PULLBYTE(); } DROPBITS(last.bits); } - DROPBITS(this.bits); - if (this.op & 64) { + DROPBITS(here.bits); + if (here.op & 64) { strm->msg = (char *)"invalid distance code"; state->mode = BAD; break; } - state->offset = (unsigned)this.val; + state->offset = (unsigned)here.val; /* get distance extra bits, if any */ - state->extra = (unsigned)(this.op) & 15; + state->extra = (unsigned)(here.op) & 15; if (state->extra != 0) { NEEDBITS(state->extra); state->offset += BITS(state->extra); diff --git a/zlib/inffast.c b/zlib/inffast.c index bbee92ed1e6..2f1d60b43b8 100644 --- a/zlib/inffast.c +++ b/zlib/inffast.c @@ -1,5 +1,5 @@ /* inffast.c -- fast decoding - * Copyright (C) 1995-2004 Mark Adler + * Copyright (C) 1995-2008, 2010 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -64,7 +64,7 @@ requires strm->avail_out >= 258 for each loop to avoid checking for output space. */ -void inflate_fast(strm, start) +void ZLIB_INTERNAL inflate_fast(strm, start) z_streamp strm; unsigned start; /* inflate()'s starting value for strm->avail_out */ { @@ -79,7 +79,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ #endif unsigned wsize; /* window size or zero if not using window */ unsigned whave; /* valid bytes in the window */ - unsigned write; /* window write index */ + unsigned wnext; /* window write index */ unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ unsigned long hold; /* local strm->hold */ unsigned bits; /* local strm->bits */ @@ -87,7 +87,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ code const FAR *dcode; /* local strm->distcode */ unsigned lmask; /* mask for first level of length codes */ unsigned dmask; /* mask for first level of distance codes */ - code this; /* retrieved table entry */ + code here; /* retrieved table entry */ unsigned op; /* code bits, operation, extra bits, or */ /* window position, window bytes to copy */ unsigned len; /* match length, unused bytes */ @@ -106,7 +106,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ #endif wsize = state->wsize; whave = state->whave; - write = state->write; + wnext = state->wnext; window = state->window; hold = state->hold; bits = state->bits; @@ -124,20 +124,20 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ hold += (unsigned long)(PUP(in)) << bits; bits += 8; } - this = lcode[hold & lmask]; + here = lcode[hold & lmask]; dolen: - op = (unsigned)(this.bits); + op = (unsigned)(here.bits); hold >>= op; bits -= op; - op = (unsigned)(this.op); + op = (unsigned)(here.op); if (op == 0) { /* literal */ - Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? "inflate: literal '%c'\n" : - "inflate: literal 0x%02x\n", this.val)); - PUP(out) = (unsigned char)(this.val); + "inflate: literal 0x%02x\n", here.val)); + PUP(out) = (unsigned char)(here.val); } else if (op & 16) { /* length base */ - len = (unsigned)(this.val); + len = (unsigned)(here.val); op &= 15; /* number of extra bits */ if (op) { if (bits < op) { @@ -155,14 +155,14 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ hold += (unsigned long)(PUP(in)) << bits; bits += 8; } - this = dcode[hold & dmask]; + here = dcode[hold & dmask]; dodist: - op = (unsigned)(this.bits); + op = (unsigned)(here.bits); hold >>= op; bits -= op; - op = (unsigned)(this.op); + op = (unsigned)(here.op); if (op & 16) { /* distance base */ - dist = (unsigned)(this.val); + dist = (unsigned)(here.val); op &= 15; /* number of extra bits */ if (bits < op) { hold += (unsigned long)(PUP(in)) << bits; @@ -187,12 +187,34 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ if (dist > op) { /* see if copy from window */ op = dist - op; /* distance back in window */ if (op > whave) { - strm->msg = (char *)"invalid distance too far back"; - state->mode = BAD; - break; + if (state->sane) { + strm->msg = + (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + if (len <= op - whave) { + do { + PUP(out) = 0; + } while (--len); + continue; + } + len -= op - whave; + do { + PUP(out) = 0; + } while (--op > whave); + if (op == 0) { + from = out - dist; + do { + PUP(out) = PUP(from); + } while (--len); + continue; + } +#endif } from = window - OFF; - if (write == 0) { /* very common case */ + if (wnext == 0) { /* very common case */ from += wsize - op; if (op < len) { /* some from window */ len -= op; @@ -202,17 +224,17 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ from = out - dist; /* rest from output */ } } - else if (write < op) { /* wrap around window */ - from += wsize + write - op; - op -= write; + else if (wnext < op) { /* wrap around window */ + from += wsize + wnext - op; + op -= wnext; if (op < len) { /* some from end of window */ len -= op; do { PUP(out) = PUP(from); } while (--op); from = window - OFF; - if (write < len) { /* some from start of window */ - op = write; + if (wnext < len) { /* some from start of window */ + op = wnext; len -= op; do { PUP(out) = PUP(from); @@ -222,7 +244,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ } } else { /* contiguous in window */ - from += write - op; + from += wnext - op; if (op < len) { /* some from window */ len -= op; do { @@ -259,7 +281,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ } } else if ((op & 64) == 0) { /* 2nd level distance code */ - this = dcode[this.val + (hold & ((1U << op) - 1))]; + here = dcode[here.val + (hold & ((1U << op) - 1))]; goto dodist; } else { @@ -269,7 +291,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ } } else if ((op & 64) == 0) { /* 2nd level length code */ - this = lcode[this.val + (hold & ((1U << op) - 1))]; + here = lcode[here.val + (hold & ((1U << op) - 1))]; goto dolen; } else if (op & 32) { /* end-of-block */ @@ -305,7 +327,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe): - Using bit fields for code structure - Different op definition to avoid & for extra bits (do & for table bits) - - Three separate decoding do-loops for direct, window, and write == 0 + - Three separate decoding do-loops for direct, window, and wnext == 0 - Special case for distance > 1 copies to do overlapped load and store copy - Explicit branch predictions (based on measured branch probabilities) - Deferring match copy and interspersed it with decoding subsequent codes diff --git a/zlib/inffast.h b/zlib/inffast.h index 1e88d2d97b5..e5c1aa4ca8c 100644 --- a/zlib/inffast.h +++ b/zlib/inffast.h @@ -1,5 +1,5 @@ /* inffast.h -- header to use inffast.c - * Copyright (C) 1995-2003 Mark Adler + * Copyright (C) 1995-2003, 2010 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -8,4 +8,4 @@ subject to change. Applications should only use zlib.h. */ -void inflate_fast OF((z_streamp strm, unsigned start)); +void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start)); diff --git a/zlib/inflate.c b/zlib/inflate.c index 792fdee8e9c..a8431abeacf 100644 --- a/zlib/inflate.c +++ b/zlib/inflate.c @@ -1,5 +1,5 @@ /* inflate.c -- zlib decompression - * Copyright (C) 1995-2005 Mark Adler + * Copyright (C) 1995-2010 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -45,7 +45,7 @@ * - Rearrange window copies in inflate_fast() for speed and simplification * - Unroll last copy for window match in inflate_fast() * - Use local copies of window variables in inflate_fast() for speed - * - Pull out common write == 0 case for speed in inflate_fast() + * - Pull out common wnext == 0 case for speed in inflate_fast() * - Make op and len in inflate_fast() unsigned for consistency * - Add FAR to lcode and dcode declarations in inflate_fast() * - Simplified bad distance check in inflate_fast() @@ -117,28 +117,52 @@ z_streamp strm; state->head = Z_NULL; state->wsize = 0; state->whave = 0; - state->write = 0; + state->wnext = 0; state->hold = 0; state->bits = 0; state->lencode = state->distcode = state->next = state->codes; + state->sane = 1; + state->back = -1; Tracev((stderr, "inflate: reset\n")); return Z_OK; } -int ZEXPORT inflatePrime(strm, bits, value) +int ZEXPORT inflateReset2(strm, windowBits) z_streamp strm; -int bits; -int value; +int windowBits; { + int wrap; struct inflate_state FAR *state; + /* get the state */ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; - if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR; - value &= (1L << bits) - 1; - state->hold += value << state->bits; - state->bits += bits; - return Z_OK; + + /* extract wrap request from windowBits parameter */ + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } + else { + wrap = (windowBits >> 4) + 1; +#ifdef GUNZIP + if (windowBits < 48) + windowBits &= 15; +#endif + } + + /* set number of window bits, free window if different */ + if (windowBits && (windowBits < 8 || windowBits > 15)) + return Z_STREAM_ERROR; + if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) { + ZFREE(strm, state->window); + state->window = Z_NULL; + } + + /* update state and reset the rest of it */ + state->wrap = wrap; + state->wbits = (unsigned)windowBits; + return inflateReset(strm); } int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size) @@ -147,6 +171,7 @@ int windowBits; const char *version; int stream_size; { + int ret; struct inflate_state FAR *state; if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || @@ -164,24 +189,13 @@ int stream_size; if (state == Z_NULL) return Z_MEM_ERROR; Tracev((stderr, "inflate: allocated\n")); strm->state = (struct internal_state FAR *)state; - if (windowBits < 0) { - state->wrap = 0; - windowBits = -windowBits; - } - else { - state->wrap = (windowBits >> 4) + 1; -#ifdef GUNZIP - if (windowBits < 48) windowBits &= 15; -#endif - } - if (windowBits < 8 || windowBits > 15) { + state->window = Z_NULL; + ret = inflateReset2(strm, windowBits); + if (ret != Z_OK) { ZFREE(strm, state); strm->state = Z_NULL; - return Z_STREAM_ERROR; } - state->wbits = (unsigned)windowBits; - state->window = Z_NULL; - return inflateReset(strm); + return ret; } int ZEXPORT inflateInit_(strm, version, stream_size) @@ -192,6 +206,27 @@ int stream_size; return inflateInit2_(strm, DEF_WBITS, version, stream_size); } +int ZEXPORT inflatePrime(strm, bits, value) +z_streamp strm; +int bits; +int value; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (bits < 0) { + state->hold = 0; + state->bits = 0; + return Z_OK; + } + if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR; + value &= (1L << bits) - 1; + state->hold += value << state->bits; + state->bits += bits; + return Z_OK; +} + /* Return state with length and distance decoding tables and index sizes set to fixed code decoding. Normally this returns fixed tables from inffixed.h. @@ -340,7 +375,7 @@ unsigned out; /* if window not in use yet, initialize */ if (state->wsize == 0) { state->wsize = 1U << state->wbits; - state->write = 0; + state->wnext = 0; state->whave = 0; } @@ -348,22 +383,22 @@ unsigned out; copy = out - strm->avail_out; if (copy >= state->wsize) { zmemcpy(state->window, strm->next_out - state->wsize, state->wsize); - state->write = 0; + state->wnext = 0; state->whave = state->wsize; } else { - dist = state->wsize - state->write; + dist = state->wsize - state->wnext; if (dist > copy) dist = copy; - zmemcpy(state->window + state->write, strm->next_out - copy, dist); + zmemcpy(state->window + state->wnext, strm->next_out - copy, dist); copy -= dist; if (copy) { zmemcpy(state->window, strm->next_out - copy, copy); - state->write = copy; + state->wnext = copy; state->whave = state->wsize; } else { - state->write += dist; - if (state->write == state->wsize) state->write = 0; + state->wnext += dist; + if (state->wnext == state->wsize) state->wnext = 0; if (state->whave < state->wsize) state->whave += dist; } } @@ -564,7 +599,7 @@ int flush; unsigned in, out; /* save starting available input and output */ unsigned copy; /* number of stored or match bytes to copy */ unsigned char FAR *from; /* where to copy match bytes from */ - code this; /* current decoding table entry */ + code here; /* current decoding table entry */ code last; /* parent table entry */ unsigned len; /* length to copy for repeats, bits to drop */ int ret; /* return code */ @@ -619,7 +654,9 @@ int flush; } DROPBITS(4); len = BITS(4) + 8; - if (len > state->wbits) { + if (state->wbits == 0) + state->wbits = len; + else if (len > state->wbits) { strm->msg = (char *)"invalid window size"; state->mode = BAD; break; @@ -771,7 +808,7 @@ int flush; strm->adler = state->check = adler32(0L, Z_NULL, 0); state->mode = TYPE; case TYPE: - if (flush == Z_BLOCK) goto inf_leave; + if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; case TYPEDO: if (state->last) { BYTEBITS(); @@ -791,7 +828,11 @@ int flush; fixedtables(state); Tracev((stderr, "inflate: fixed codes block%s\n", state->last ? " (last)" : "")); - state->mode = LEN; /* decode codes */ + state->mode = LEN_; /* decode codes */ + if (flush == Z_TREES) { + DROPBITS(2); + goto inf_leave; + } break; case 2: /* dynamic block */ Tracev((stderr, "inflate: dynamic codes block%s\n", @@ -816,6 +857,9 @@ int flush; Tracev((stderr, "inflate: stored length %u\n", state->length)); INITBITS(); + state->mode = COPY_; + if (flush == Z_TREES) goto inf_leave; + case COPY_: state->mode = COPY; case COPY: copy = state->length; @@ -876,19 +920,19 @@ int flush; case CODELENS: while (state->have < state->nlen + state->ndist) { for (;;) { - this = state->lencode[BITS(state->lenbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if (this.val < 16) { - NEEDBITS(this.bits); - DROPBITS(this.bits); - state->lens[state->have++] = this.val; + if (here.val < 16) { + NEEDBITS(here.bits); + DROPBITS(here.bits); + state->lens[state->have++] = here.val; } else { - if (this.val == 16) { - NEEDBITS(this.bits + 2); - DROPBITS(this.bits); + if (here.val == 16) { + NEEDBITS(here.bits + 2); + DROPBITS(here.bits); if (state->have == 0) { strm->msg = (char *)"invalid bit length repeat"; state->mode = BAD; @@ -898,16 +942,16 @@ int flush; copy = 3 + BITS(2); DROPBITS(2); } - else if (this.val == 17) { - NEEDBITS(this.bits + 3); - DROPBITS(this.bits); + else if (here.val == 17) { + NEEDBITS(here.bits + 3); + DROPBITS(here.bits); len = 0; copy = 3 + BITS(3); DROPBITS(3); } else { - NEEDBITS(this.bits + 7); - DROPBITS(this.bits); + NEEDBITS(here.bits + 7); + DROPBITS(here.bits); len = 0; copy = 11 + BITS(7); DROPBITS(7); @@ -925,7 +969,16 @@ int flush; /* handle error breaks in while */ if (state->mode == BAD) break; - /* build code tables */ + /* check for end-of-block code (better have one) */ + if (state->lens[256] == 0) { + strm->msg = (char *)"invalid code -- missing end-of-block"; + state->mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ state->next = state->codes; state->lencode = (code const FAR *)(state->next); state->lenbits = 9; @@ -946,88 +999,102 @@ int flush; break; } Tracev((stderr, "inflate: codes ok\n")); + state->mode = LEN_; + if (flush == Z_TREES) goto inf_leave; + case LEN_: state->mode = LEN; case LEN: if (have >= 6 && left >= 258) { RESTORE(); inflate_fast(strm, out); LOAD(); + if (state->mode == TYPE) + state->back = -1; break; } + state->back = 0; for (;;) { - this = state->lencode[BITS(state->lenbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if (this.op && (this.op & 0xf0) == 0) { - last = this; + if (here.op && (here.op & 0xf0) == 0) { + last = here; for (;;) { - this = state->lencode[last.val + + here = state->lencode[last.val + (BITS(last.bits + last.op) >> last.bits)]; - if ((unsigned)(last.bits + this.bits) <= bits) break; + if ((unsigned)(last.bits + here.bits) <= bits) break; PULLBYTE(); } DROPBITS(last.bits); + state->back += last.bits; } - DROPBITS(this.bits); - state->length = (unsigned)this.val; - if ((int)(this.op) == 0) { - Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + DROPBITS(here.bits); + state->back += here.bits; + state->length = (unsigned)here.val; + if ((int)(here.op) == 0) { + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? "inflate: literal '%c'\n" : - "inflate: literal 0x%02x\n", this.val)); + "inflate: literal 0x%02x\n", here.val)); state->mode = LIT; break; } - if (this.op & 32) { + if (here.op & 32) { Tracevv((stderr, "inflate: end of block\n")); + state->back = -1; state->mode = TYPE; break; } - if (this.op & 64) { + if (here.op & 64) { strm->msg = (char *)"invalid literal/length code"; state->mode = BAD; break; } - state->extra = (unsigned)(this.op) & 15; + state->extra = (unsigned)(here.op) & 15; state->mode = LENEXT; case LENEXT: if (state->extra) { NEEDBITS(state->extra); state->length += BITS(state->extra); DROPBITS(state->extra); + state->back += state->extra; } Tracevv((stderr, "inflate: length %u\n", state->length)); + state->was = state->length; state->mode = DIST; case DIST: for (;;) { - this = state->distcode[BITS(state->distbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = state->distcode[BITS(state->distbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if ((this.op & 0xf0) == 0) { - last = this; + if ((here.op & 0xf0) == 0) { + last = here; for (;;) { - this = state->distcode[last.val + + here = state->distcode[last.val + (BITS(last.bits + last.op) >> last.bits)]; - if ((unsigned)(last.bits + this.bits) <= bits) break; + if ((unsigned)(last.bits + here.bits) <= bits) break; PULLBYTE(); } DROPBITS(last.bits); + state->back += last.bits; } - DROPBITS(this.bits); - if (this.op & 64) { + DROPBITS(here.bits); + state->back += here.bits; + if (here.op & 64) { strm->msg = (char *)"invalid distance code"; state->mode = BAD; break; } - state->offset = (unsigned)this.val; - state->extra = (unsigned)(this.op) & 15; + state->offset = (unsigned)here.val; + state->extra = (unsigned)(here.op) & 15; state->mode = DISTEXT; case DISTEXT: if (state->extra) { NEEDBITS(state->extra); state->offset += BITS(state->extra); DROPBITS(state->extra); + state->back += state->extra; } #ifdef INFLATE_STRICT if (state->offset > state->dmax) { @@ -1036,11 +1103,6 @@ int flush; break; } #endif - if (state->offset > state->whave + out - left) { - strm->msg = (char *)"invalid distance too far back"; - state->mode = BAD; - break; - } Tracevv((stderr, "inflate: distance %u\n", state->offset)); state->mode = MATCH; case MATCH: @@ -1048,12 +1110,32 @@ int flush; copy = out - left; if (state->offset > copy) { /* copy from window */ copy = state->offset - copy; - if (copy > state->write) { - copy -= state->write; + if (copy > state->whave) { + if (state->sane) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + Trace((stderr, "inflate.c too far\n")); + copy -= state->whave; + if (copy > state->length) copy = state->length; + if (copy > left) copy = left; + left -= copy; + state->length -= copy; + do { + *put++ = 0; + } while (--copy); + if (state->length == 0) state->mode = LEN; + break; +#endif + } + if (copy > state->wnext) { + copy -= state->wnext; from = state->window + (state->wsize - copy); } else - from = state->window + (state->write - copy); + from = state->window + (state->wnext - copy); if (copy > state->length) copy = state->length; } else { /* copy from output */ @@ -1146,7 +1228,8 @@ int flush; strm->adler = state->check = UPDATE(state->check, strm->next_out - out, out); strm->data_type = state->bits + (state->last ? 64 : 0) + - (state->mode == TYPE ? 128 : 0); + (state->mode == TYPE ? 128 : 0) + + (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) ret = Z_BUF_ERROR; return ret; @@ -1366,3 +1449,32 @@ z_streamp source; dest->state = (struct internal_state FAR *)copy; return Z_OK; } + +int ZEXPORT inflateUndermine(strm, subvert) +z_streamp strm; +int subvert; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + state->sane = !subvert; +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + return Z_OK; +#else + state->sane = 1; + return Z_DATA_ERROR; +#endif +} + +long ZEXPORT inflateMark(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16; + state = (struct inflate_state FAR *)strm->state; + return ((long)(state->back) << 16) + + (state->mode == COPY ? state->length : + (state->mode == MATCH ? state->was - state->length : 0)); +} diff --git a/zlib/inflate.h b/zlib/inflate.h index 07bd3e78a7c..95f4986d400 100644 --- a/zlib/inflate.h +++ b/zlib/inflate.h @@ -1,5 +1,5 @@ /* inflate.h -- internal inflate state definition - * Copyright (C) 1995-2004 Mark Adler + * Copyright (C) 1995-2009 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -32,11 +32,13 @@ typedef enum { TYPE, /* i: waiting for type bits, including last-flag bit */ TYPEDO, /* i: same, but skip check to exit inflate on new block */ STORED, /* i: waiting for stored size (length and complement) */ + COPY_, /* i/o: same as COPY below, but only first time in */ COPY, /* i/o: waiting for input or output to copy stored block */ TABLE, /* i: waiting for dynamic block table lengths */ LENLENS, /* i: waiting for code length code lengths */ CODELENS, /* i: waiting for length/lit and distance code lengths */ - LEN, /* i: waiting for length/lit code */ + LEN_, /* i: same as LEN below, but only first time in */ + LEN, /* i: waiting for length/lit/eob code */ LENEXT, /* i: waiting for length extra bits */ DIST, /* i: waiting for distance code */ DISTEXT, /* i: waiting for distance extra bits */ @@ -53,19 +55,21 @@ typedef enum { /* State transitions between above modes - - (most modes can go to the BAD or MEM mode -- not shown for clarity) + (most modes can go to BAD or MEM on error -- not shown for clarity) Process header: - HEAD -> (gzip) or (zlib) - (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME - NAME -> COMMENT -> HCRC -> TYPE + HEAD -> (gzip) or (zlib) or (raw) + (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT -> + HCRC -> TYPE (zlib) -> DICTID or TYPE DICTID -> DICT -> TYPE + (raw) -> TYPEDO Read deflate blocks: - TYPE -> STORED or TABLE or LEN or CHECK - STORED -> COPY -> TYPE - TABLE -> LENLENS -> CODELENS -> LEN - Read deflate codes: + TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK + STORED -> COPY_ -> COPY -> TYPE + TABLE -> LENLENS -> CODELENS -> LEN_ + LEN_ -> LEN + Read deflate codes in fixed or dynamic block: LEN -> LENEXT or LIT or TYPE LENEXT -> DIST -> DISTEXT -> MATCH -> LEN LIT -> LEN @@ -73,7 +77,7 @@ typedef enum { CHECK -> LENGTH -> DONE */ -/* state maintained between inflate() calls. Approximately 7K bytes. */ +/* state maintained between inflate() calls. Approximately 10K bytes. */ struct inflate_state { inflate_mode mode; /* current inflate mode */ int last; /* true if processing last block */ @@ -88,7 +92,7 @@ struct inflate_state { unsigned wbits; /* log base 2 of requested window size */ unsigned wsize; /* window size or zero if not using window */ unsigned whave; /* valid bytes in the window */ - unsigned write; /* window write index */ + unsigned wnext; /* window write index */ unsigned char FAR *window; /* allocated sliding window, if needed */ /* bit accumulator */ unsigned long hold; /* input bit accumulator */ @@ -112,4 +116,7 @@ struct inflate_state { unsigned short lens[320]; /* temporary storage for code lengths */ unsigned short work[288]; /* work area for code table building */ code codes[ENOUGH]; /* space for code tables */ + int sane; /* if false, allow invalid distance too far */ + int back; /* bits back of last unprocessed length/lit */ + unsigned was; /* initial length of match */ }; diff --git a/zlib/inftrees.c b/zlib/inftrees.c index 8a9c13ff03d..11e9c52accb 100644 --- a/zlib/inftrees.c +++ b/zlib/inftrees.c @@ -1,5 +1,5 @@ /* inftrees.c -- generate Huffman trees for efficient decoding - * Copyright (C) 1995-2005 Mark Adler + * Copyright (C) 1995-2010 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate_copyright[] = - " inflate 1.2.3 Copyright 1995-2005 Mark Adler "; + " inflate 1.2.5 Copyright 1995-2010 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -29,7 +29,7 @@ const char inflate_copyright[] = table index bits. It will differ if the request is greater than the longest code or if it is less than the shortest code. */ -int inflate_table(type, lens, codes, table, bits, work) +int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work) codetype type; unsigned short FAR *lens; unsigned codes; @@ -50,7 +50,7 @@ unsigned short FAR *work; unsigned fill; /* index for replicating entries */ unsigned low; /* low bits for current root entry */ unsigned mask; /* mask for low root bits */ - code this; /* table entry for duplication */ + code here; /* table entry for duplication */ code FAR *next; /* next available space in table */ const unsigned short FAR *base; /* base value table to use */ const unsigned short FAR *extra; /* extra bits table to use */ @@ -62,7 +62,7 @@ unsigned short FAR *work; 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 201, 196}; + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 73, 195}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, @@ -115,15 +115,15 @@ unsigned short FAR *work; if (count[max] != 0) break; if (root > max) root = max; if (max == 0) { /* no symbols to code at all */ - this.op = (unsigned char)64; /* invalid code marker */ - this.bits = (unsigned char)1; - this.val = (unsigned short)0; - *(*table)++ = this; /* make a table to force an error */ - *(*table)++ = this; + here.op = (unsigned char)64; /* invalid code marker */ + here.bits = (unsigned char)1; + here.val = (unsigned short)0; + *(*table)++ = here; /* make a table to force an error */ + *(*table)++ = here; *bits = 1; return 0; /* no symbols, but wait for decoding to report error */ } - for (min = 1; min <= MAXBITS; min++) + for (min = 1; min < max; min++) if (count[min] != 0) break; if (root < min) root = min; @@ -166,11 +166,10 @@ unsigned short FAR *work; entered in the tables. used keeps track of how many table entries have been allocated from the - provided *table space. It is checked when a LENS table is being made - against the space in *table, ENOUGH, minus the maximum space needed by - the worst case distance code, MAXD. This should never happen, but the - sufficiency of ENOUGH has not been proven exhaustively, hence the check. - This assumes that when type == LENS, bits == 9. + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftrees.h + for more information. sym increments through all symbols, and the loop terminates when all codes of length max, i.e. all codes, have been processed. This @@ -209,24 +208,25 @@ unsigned short FAR *work; mask = used - 1; /* mask for comparing low */ /* check available table space */ - if (type == LENS && used >= ENOUGH - MAXD) + if ((type == LENS && used >= ENOUGH_LENS) || + (type == DISTS && used >= ENOUGH_DISTS)) return 1; /* process all codes and make table entries */ for (;;) { /* create table entry */ - this.bits = (unsigned char)(len - drop); + here.bits = (unsigned char)(len - drop); if ((int)(work[sym]) < end) { - this.op = (unsigned char)0; - this.val = work[sym]; + here.op = (unsigned char)0; + here.val = work[sym]; } else if ((int)(work[sym]) > end) { - this.op = (unsigned char)(extra[work[sym]]); - this.val = base[work[sym]]; + here.op = (unsigned char)(extra[work[sym]]); + here.val = base[work[sym]]; } else { - this.op = (unsigned char)(32 + 64); /* end of block */ - this.val = 0; + here.op = (unsigned char)(32 + 64); /* end of block */ + here.val = 0; } /* replicate for those indices with low len bits equal to huff */ @@ -235,7 +235,7 @@ unsigned short FAR *work; min = fill; /* save offset to next table */ do { fill -= incr; - next[(huff >> drop) + fill] = this; + next[(huff >> drop) + fill] = here; } while (fill != 0); /* backwards increment the len-bit code huff */ @@ -277,7 +277,8 @@ unsigned short FAR *work; /* check for enough space */ used += 1U << curr; - if (type == LENS && used >= ENOUGH - MAXD) + if ((type == LENS && used >= ENOUGH_LENS) || + (type == DISTS && used >= ENOUGH_DISTS)) return 1; /* point entry in root table to sub-table */ @@ -295,20 +296,20 @@ unsigned short FAR *work; through high index bits. When the current sub-table is filled, the loop drops back to the root table to fill in any remaining entries there. */ - this.op = (unsigned char)64; /* invalid code marker */ - this.bits = (unsigned char)(len - drop); - this.val = (unsigned short)0; + here.op = (unsigned char)64; /* invalid code marker */ + here.bits = (unsigned char)(len - drop); + here.val = (unsigned short)0; while (huff != 0) { /* when done with sub-table, drop back to root table */ if (drop != 0 && (huff & mask) != low) { drop = 0; len = root; next = *table; - this.bits = (unsigned char)len; + here.bits = (unsigned char)len; } /* put invalid code marker in table */ - next[huff >> drop] = this; + next[huff >> drop] = here; /* backwards increment the len-bit code huff */ incr = 1U << (len - 1); diff --git a/zlib/inftrees.h b/zlib/inftrees.h index b1104c87e76..baa53a0b1a1 100644 --- a/zlib/inftrees.h +++ b/zlib/inftrees.h @@ -1,5 +1,5 @@ /* inftrees.h -- header to use inftrees.c - * Copyright (C) 1995-2005 Mark Adler + * Copyright (C) 1995-2005, 2010 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -35,21 +35,28 @@ typedef struct { 01000000 - invalid code */ -/* Maximum size of dynamic tree. The maximum found in a long but non- - exhaustive search was 1444 code structures (852 for length/literals - and 592 for distances, the latter actually the result of an - exhaustive search). The true maximum is not known, but the value - below is more than safe. */ -#define ENOUGH 2048 -#define MAXD 592 +/* Maximum size of the dynamic table. The maximum number of code structures is + 1444, which is the sum of 852 for literal/length codes and 592 for distance + codes. These values were found by exhaustive searches using the program + examples/enough.c found in the zlib distribtution. The arguments to that + program are the number of symbols, the initial root table size, and the + maximum bit length of a code. "enough 286 9 15" for literal/length codes + returns returns 852, and "enough 30 6 15" for distance codes returns 592. + The initial root table size (9 or 6) is found in the fifth argument of the + inflate_table() calls in inflate.c and infback.c. If the root table size is + changed, then these maximum sizes would be need to be recalculated and + updated. */ +#define ENOUGH_LENS 852 +#define ENOUGH_DISTS 592 +#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS) -/* Type of code to build for inftable() */ +/* Type of code to build for inflate_table() */ typedef enum { CODES, LENS, DISTS } codetype; -extern int inflate_table OF((codetype type, unsigned short FAR *lens, +int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens, unsigned codes, code FAR * FAR *table, unsigned FAR *bits, unsigned short FAR *work)); diff --git a/zlib/make_vms.com b/zlib/make_vms.com index c2a1fb54b2f..6576490e651 100644 --- a/zlib/make_vms.com +++ b/zlib/make_vms.com @@ -1,33 +1,57 @@ $! make libz under VMS written by $! Martin P.J. Zinser -$! <zinser@zinser.no-ip.info or zinser@sysdev.deutsche-boerse.com> $! -$ on error then goto err_exit +$! In case of problems with the install you might contact me at +$! zinser@zinser.no-ip.info(preferred) or +$! zinser@sysdev.deutsche-boerse.com (work) +$! +$! Make procedure history for Zlib $! +$!------------------------------------------------------------------------------ +$! Version history +$! 0.01 20060120 First version to receive a number +$! 0.02 20061008 Adapt to new Makefile.in +$! 0.03 20091224 Add support for large file check +$! 0.04 20100110 Add new gzclose, gzlib, gzread, gzwrite +$! 0.05 20100221 Exchange zlibdefs.h by zconf.h.in $! -$! Just some general constants... +$ on error then goto err_exit +$ set proc/parse=ext $! $ true = 1 $ false = 0 $ tmpnam = "temp_" + f$getjpi("","pid") -$ SAY = "WRITE SYS$OUTPUT" +$ tt = tmpnam + ".txt" +$ tc = tmpnam + ".c" +$ th = tmpnam + ".h" +$ define/nolog tconfig 'th' +$ its_decc = false +$ its_vaxc = false +$ its_gnuc = false +$ s_case = False $! $! Setup variables holding "config" information $! -$ Make = "" +$ Make = "" $ name = "Zlib" $ version = "?.?.?" $ v_string = "ZLIB_VERSION" $ v_file = "zlib.h" -$ ccopt = "" -$ lopts = "" +$ ccopt = "" +$ lopts = "" +$ dnsrl = "" +$ aconf_in_file = "zconf.h.in#zconf.h_in" +$ conf_check_string = "" $ linkonly = false $ optfile = name + ".opt" -$ its_decc = false -$ its_vaxc = false -$ its_gnuc = false -$ axp = f$getsyi("HW_MODEL").ge.1024 -$ s_case = false +$ libdefs = "" +$ axp = f$getsyi("HW_MODEL").ge.1024 .and. f$getsyi("HW_MODEL").lt.4096 +$! +$ whoami = f$parse(f$enviornment("Procedure"),,,,"NO_CONCEAL") +$ mydef = F$parse(whoami,,,"DEVICE") +$ mydir = f$parse(whoami,,,"DIRECTORY") - "][" +$ myproc = f$parse(whoami,,,"Name") + f$parse(whoami,,,"type") +$! $! Check for MMK/MMS $! $ If F$Search ("Sys$System:MMS.EXE") .nes. "" Then Make = "MMS" @@ -36,11 +60,16 @@ $! $! $ gosub find_version $! +$ open/write topt tmp.opt +$ open/write optf 'optfile' +$! $ gosub check_opts $! $! Look for the compiler used $! $ gosub check_compiler +$ close topt +$! $ if its_decc $ then $ ccopt = "/prefix=all" + ccopt @@ -60,6 +89,52 @@ $ then $ if f$trnlnm("SYS").eqs."" then define sys sys$library: $ endif $! +$! Build a fake configure input header +$! +$ open/write conf_hin config.hin +$ write conf_hin "#undef _LARGEFILE64_SOURCE" +$ close conf_hin +$! +$! +$ i = 0 +$FIND_ACONF: +$ fname = f$element(i,"#",aconf_in_file) +$ if fname .eqs. "#" then goto AMISS_ERR +$ if f$search(fname) .eqs. "" +$ then +$ i = i + 1 +$ goto find_aconf +$ endif +$ open/read/err=aconf_err aconf_in 'fname' +$ open/write aconf zconf.h +$ACONF_LOOP: +$ read/end_of_file=aconf_exit aconf_in line +$ work = f$edit(line, "compress,trim") +$ if f$extract(0,6,work) .nes. "#undef" +$ then +$ if f$extract(0,12,work) .nes. "#cmakedefine" +$ then +$ write aconf line +$ endif +$ else +$ cdef = f$element(1," ",work) +$ gosub check_config +$ endif +$ goto aconf_loop +$ACONF_EXIT: +$ write aconf "#define VMS 1" +$ write aconf "#include <unistd.h>" +$ write aconf "#include <unixio.h>" +$ write aconf "#ifdef _LARGEFILE" +$ write aconf "#define off64_t __off64_t" +$ write aconf "#define fopen64 fopen" +$ write aconf "#define fseeko64 fseeko" +$ write aconf "#define lseek64 lseek" +$ write aconf "#define ftello64 ftell" +$ write aconf "#endif" +$ close aconf_in +$ close aconf +$ if f$search("''th'") .nes. "" then delete 'th';* $! Build the thing plain or with mms $! $ write sys$output "Compiling Zlib sources ..." @@ -74,8 +149,14 @@ $ CALL MAKE crc32.OBJ "CC ''CCOPT' crc32" - crc32.c zlib.h zconf.h $ CALL MAKE deflate.OBJ "CC ''CCOPT' deflate" - deflate.c deflate.h zutil.h zlib.h zconf.h -$ CALL MAKE gzio.OBJ "CC ''CCOPT' gzio" - - gzio.c zutil.h zlib.h zconf.h +$ CALL MAKE gzclose.OBJ "CC ''CCOPT' gzclose" - + gzclose.c zutil.h zlib.h zconf.h +$ CALL MAKE gzlib.OBJ "CC ''CCOPT' gzlib" - + gzlib.c zutil.h zlib.h zconf.h +$ CALL MAKE gzread.OBJ "CC ''CCOPT' gzread" - + gzread.c zutil.h zlib.h zconf.h +$ CALL MAKE gzwrite.OBJ "CC ''CCOPT' gzwrite" - + gzwrite.c zutil.h zlib.h zconf.h $ CALL MAKE infback.OBJ "CC ''CCOPT' infback" - infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h $ CALL MAKE inffast.OBJ "CC ''CCOPT' inffast" - @@ -107,7 +188,7 @@ $ call make minigzip.exe - $ endif $ else $ gosub crea_mms -$ SAY "Make ''name' ''version' with ''Make' " +$ write sys$output "Make ''name' ''version' with ''Make' " $ 'make' $ endif $! @@ -133,6 +214,15 @@ $ write sys$output "C compiler required to build ''name'" $ goto err_exit $ERR_EXIT: $ set message/facil/ident/sever/text +$ close/nolog optf +$ close/nolog topt +$ close/nolog conf_hin +$ close/nolog aconf_in +$ close/nolog aconf +$ close/nolog out +$ close/nolog min +$ close/nolog mod +$ close/nolog h_in $ write sys$output "Exiting..." $ exit 2 $! @@ -180,61 +270,72 @@ $!------------------------------------------------------------------------------ $! $! Check command line options and set symbols accordingly $! +$!------------------------------------------------------------------------------ +$! Version history +$! 0.01 20041206 First version to receive a number +$! 0.02 20060126 Add new "HELP" target $ CHECK_OPTS: $ i = 1 $ OPT_LOOP: $ if i .lt. 9 $ then $ cparm = f$edit(p'i',"upcase") -$ if cparm .eqs. "DEBUG" -$ then -$ ccopt = ccopt + "/noopt/deb" -$ lopts = lopts + "/deb" -$ endif -$ if f$locate("CCOPT=",cparm) .lt. f$length(cparm) -$ then -$ start = f$locate("=",cparm) + 1 -$ len = f$length(cparm) - start -$ ccopt = ccopt + f$extract(start,len,cparm) -$ if f$locate("AS_IS",f$edit(ccopt,"UPCASE")) .lt. f$length(ccopt) - - then s_case = true -$ endif -$ if cparm .eqs. "LINK" then linkonly = true -$ if f$locate("LOPTS=",cparm) .lt. f$length(cparm) -$ then -$ start = f$locate("=",cparm) + 1 -$ len = f$length(cparm) - start -$ lopts = lopts + f$extract(start,len,cparm) -$ endif -$ if f$locate("CC=",cparm) .lt. f$length(cparm) +$! +$! Check if parameter actually contains something +$! +$ if f$edit(cparm,"trim") .nes. "" $ then -$ start = f$locate("=",cparm) + 1 -$ len = f$length(cparm) - start -$ cc_com = f$extract(start,len,cparm) - if (cc_com .nes. "DECC") .and. - - (cc_com .nes. "VAXC") .and. - - (cc_com .nes. "GNUC") +$ if cparm .eqs. "DEBUG" $ then -$ write sys$output "Unsupported compiler choice ''cc_com' ignored" -$ write sys$output "Use DECC, VAXC, or GNUC instead" -$ else -$ if cc_com .eqs. "DECC" then its_decc = true -$ if cc_com .eqs. "VAXC" then its_vaxc = true -$ if cc_com .eqs. "GNUC" then its_gnuc = true +$ ccopt = ccopt + "/noopt/deb" +$ lopts = lopts + "/deb" $ endif -$ endif -$ if f$locate("MAKE=",cparm) .lt. f$length(cparm) -$ then -$ start = f$locate("=",cparm) + 1 -$ len = f$length(cparm) - start -$ mmks = f$extract(start,len,cparm) -$ if (mmks .eqs. "MMK") .or. (mmks .eqs. "MMS") +$ if f$locate("CCOPT=",cparm) .lt. f$length(cparm) $ then -$ make = mmks -$ else -$ write sys$output "Unsupported make choice ''mmks' ignored" -$ write sys$output "Use MMK or MMS instead" +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ ccopt = ccopt + f$extract(start,len,cparm) +$ if f$locate("AS_IS",f$edit(ccopt,"UPCASE")) .lt. f$length(ccopt) - + then s_case = true +$ endif +$ if cparm .eqs. "LINK" then linkonly = true +$ if f$locate("LOPTS=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ lopts = lopts + f$extract(start,len,cparm) $ endif +$ if f$locate("CC=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ cc_com = f$extract(start,len,cparm) + if (cc_com .nes. "DECC") .and. - + (cc_com .nes. "VAXC") .and. - + (cc_com .nes. "GNUC") +$ then +$ write sys$output "Unsupported compiler choice ''cc_com' ignored" +$ write sys$output "Use DECC, VAXC, or GNUC instead" +$ else +$ if cc_com .eqs. "DECC" then its_decc = true +$ if cc_com .eqs. "VAXC" then its_vaxc = true +$ if cc_com .eqs. "GNUC" then its_gnuc = true +$ endif +$ endif +$ if f$locate("MAKE=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ mmks = f$extract(start,len,cparm) +$ if (mmks .eqs. "MMK") .or. (mmks .eqs. "MMS") +$ then +$ make = mmks +$ else +$ write sys$output "Unsupported make choice ''mmks' ignored" +$ write sys$output "Use MMK or MMS instead" +$ endif +$ endif +$ if cparm .eqs. "HELP" then gosub bhelp $ endif $ i = i + 1 $ goto opt_loop @@ -244,6 +345,11 @@ $!------------------------------------------------------------------------------ $! $! Look for the compiler used $! +$! Version history +$! 0.01 20040223 First version to receive a number +$! 0.02 20040229 Save/set value of decc$no_rooted_search_lists +$! 0.03 20060202 Extend handling of GNU C +$! 0.04 20090402 Compaq -> hp $CHECK_COMPILER: $ if (.not. (its_decc .or. its_vaxc .or. its_gnuc)) $ then @@ -257,9 +363,26 @@ $! $ if (.not. (its_decc .or. its_vaxc .or. its_gnuc)) $ then goto CC_ERR $ else -$ if its_decc then write sys$output "CC compiler check ... Compaq C" -$ if its_vaxc then write sys$output "CC compiler check ... VAX C" -$ if its_gnuc then write sys$output "CC compiler check ... GNU C" +$ if its_decc +$ then +$ write sys$output "CC compiler check ... hp C" +$ if f$trnlnm("decc$no_rooted_search_lists") .nes. "" +$ then +$ dnrsl = f$trnlnm("decc$no_rooted_search_lists") +$ endif +$ define/nolog decc$no_rooted_search_lists 1 +$ else +$ if its_vaxc then write sys$output "CC compiler check ... VAX C" +$ if its_gnuc +$ then +$ write sys$output "CC compiler check ... GNU C" +$ if f$trnlnm(topt) then write topt "gnu_cc:[000000]gcclib.olb/lib" +$ if f$trnlnm(optf) then write optf "gnu_cc:[000000]gcclib.olb/lib" +$ cc = "gcc" +$ endif +$ if f$trnlnm(topt) then write topt "sys$share:vaxcrtl.exe/share" +$ if f$trnlnm(optf) then write optf "sys$share:vaxcrtl.exe/share" +$ endif $ endif $ return $!------------------------------------------------------------------------------ @@ -276,7 +399,8 @@ $ deck # written by Martin P.J. Zinser # <zinser@zinser.no-ip.info or zinser@sysdev.deutsche-boerse.com> -OBJS = adler32.obj, compress.obj, crc32.obj, gzio.obj, uncompr.obj, infback.obj\ +OBJS = adler32.obj, compress.obj, crc32.obj, gzclose.obj, gzlib.obj\ + gzread.obj, gzwrite.obj, uncompr.obj, infback.obj\ deflate.obj, trees.obj, zutil.obj, inflate.obj, \ inftrees.obj, inffast.obj @@ -308,7 +432,10 @@ compress.obj : compress.c zlib.h zconf.h crc32.obj : crc32.c zutil.h zlib.h zconf.h deflate.obj : deflate.c deflate.h zutil.h zlib.h zconf.h example.obj : example.c zlib.h zconf.h -gzio.obj : gzio.c zutil.h zlib.h zconf.h +gzclose.obj : gzclose.c zutil.h zlib.h zconf.h +gzlib.obj : gzlib.c zutil.h zlib.h zconf.h +gzread.obj : gzread.c zutil.h zlib.h zconf.h +gzwrite.obj : gzwrite.c zutil.h zlib.h zconf.h inffast.obj : inffast.c zutil.h zlib.h zconf.h inftrees.h inffast.h inflate.obj : inflate.c zutil.h zlib.h zconf.h inftrees.obj : inftrees.c zutil.h zlib.h zconf.h inftrees.h @@ -328,7 +455,7 @@ $! $CREA_OLIST: $ open/read min makefile.in $ open/write mod modules.opt -$ src_check = "OBJS =" +$ src_check = "OBJC =" $MRLOOP: $ read/end=mrdone min rec $ if (f$extract(0,6,rec) .nes. src_check) then goto mrloop @@ -382,13 +509,182 @@ $ close h_in $ return $!------------------------------------------------------------------------------ $! +$CHECK_CONFIG: +$! +$ in_ldef = f$locate(cdef,libdefs) +$ if (in_ldef .lt. f$length(libdefs)) +$ then +$ write aconf "#define ''cdef' 1" +$ libdefs = f$extract(0,in_ldef,libdefs) + - + f$extract(in_ldef + f$length(cdef) + 1, - + f$length(libdefs) - in_ldef - f$length(cdef) - 1, - + libdefs) +$ else +$ if (f$type('cdef') .eqs. "INTEGER") +$ then +$ write aconf "#define ''cdef' ", 'cdef' +$ else +$ if (f$type('cdef') .eqs. "STRING") +$ then +$ write aconf "#define ''cdef' ", """", '''cdef'', """" +$ else +$ gosub check_cc_def +$ endif +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Check if this is a define relating to the properties of the C/C++ +$! compiler +$! +$ CHECK_CC_DEF: +$ if (cdef .eqs. "_LARGEFILE64_SOURCE") +$ then +$ copy sys$input: 'tc' +$ deck +#include "tconfig" +#define _LARGEFILE +#include <stdio.h> + +int main(){ +FILE *fp; + fp = fopen("temp.txt","r"); + fseeko(fp,1,SEEK_SET); + fclose(fp); +} + +$ eod +$ test_inv = false +$ comm_h = false +$ gosub cc_prop_check +$ return +$ endif +$ write aconf "/* ", line, " */" +$ return +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler +$! +$! Version history +$! 0.01 20031020 First version to receive a number +$! 0.02 20031022 Added logic for defines with value +$! 0.03 20040309 Make sure local config file gets not deleted +$! 0.04 20041230 Also write include for configure run +$! 0.05 20050103 Add processing of "comment defines" +$CC_PROP_CHECK: +$ cc_prop = true +$ is_need = false +$ is_need = (f$extract(0,4,cdef) .eqs. "NEED") .or. (test_inv .eq. true) +$ if f$search(th) .eqs. "" then create 'th' +$ set message/nofac/noident/nosever/notext +$ on error then continue +$ cc 'tmpnam' +$ if .not. ($status) then cc_prop = false +$ on error then continue +$! The headers might lie about the capabilities of the RTL +$ link 'tmpnam',tmp.opt/opt +$ if .not. ($status) then cc_prop = false +$ set message/fac/ident/sever/text +$ on error then goto err_exit +$ delete/nolog 'tmpnam'.*;*/exclude='th' +$ if (cc_prop .and. .not. is_need) .or. - + (.not. cc_prop .and. is_need) +$ then +$ write sys$output "Checking for ''cdef'... yes" +$ if f$type('cdef_val'_yes) .nes. "" +$ then +$ if f$type('cdef_val'_yes) .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_yes) +$ if f$type('cdef_val'_yes) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_yes) +$ else +$ call write_config f$fao("#define !AS 1",cdef) +$ endif +$ if (cdef .eqs. "HAVE_FSEEKO") .or. (cdef .eqs. "_LARGE_FILES") .or. - + (cdef .eqs. "_LARGEFILE64_SOURCE") then - + call write_config f$string("#define _LARGEFILE 1") +$ else +$ write sys$output "Checking for ''cdef'... no" +$ if (comm_h) +$ then + call write_config f$fao("/* !AS */",line) +$ else +$ if f$type('cdef_val'_no) .nes. "" +$ then +$ if f$type('cdef_val'_no) .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_no) +$ if f$type('cdef_val'_no) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_no) +$ else +$ call write_config f$fao("#undef !AS",cdef) +$ endif +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler with multiple result values +$! +$! Version history +$! 0.01 20040127 First version +$! 0.02 20050103 Reconcile changes from cc_prop up to version 0.05 +$CC_MPROP_CHECK: +$ cc_prop = true +$ i = 1 +$ idel = 1 +$ MT_LOOP: +$ if f$type(result_'i') .eqs. "STRING" +$ then +$ set message/nofac/noident/nosever/notext +$ on error then continue +$ cc 'tmpnam'_'i' +$ if .not. ($status) then cc_prop = false +$ on error then continue +$! The headers might lie about the capabilities of the RTL +$ link 'tmpnam'_'i',tmp.opt/opt +$ if .not. ($status) then cc_prop = false +$ set message/fac/ident/sever/text +$ on error then goto err_exit +$ delete/nolog 'tmpnam'_'i'.*;* +$ if (cc_prop) +$ then +$ write sys$output "Checking for ''cdef'... ", mdef_'i' +$ if f$type(mdef_'i') .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,mdef_'i') +$ if f$type('cdef_val'_yes) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,mdef_'i') +$ goto msym_clean +$ else +$ i = i + 1 +$ goto mt_loop +$ endif +$ endif +$ write sys$output "Checking for ''cdef'... no" +$ call write_config f$fao("#undef !AS",cdef) +$ MSYM_CLEAN: +$ if (idel .le. msym_max) +$ then +$ delete/sym mdef_'idel' +$ idel = idel + 1 +$ goto msym_clean +$ endif +$ return +$!------------------------------------------------------------------------------ +$! $! Analyze Object files for OpenVMS AXP to extract Procedure and Data $! information to build a symbol vector for a shareable image $! All the "brains" of this logic was suggested by Hartmut Becker $! (Hartmut.Becker@compaq.com). All the bugs were introduced by me -$! (zinser@decus.de), so if you do have problem reports please do not +$! (zinser@zinser.no-ip.info), so if you do have problem reports please do not $! bother Hartmut/HP, but get in touch with me $! +$! Version history +$! 0.01 20040406 Skip over shareable images in option file +$! 0.02 20041109 Fix option file for shareable images with case_sensitive=YES +$! 0.03 20050107 Skip over Identification labels in option file +$! 0.04 20060117 Add uppercase alias to code compiled with /name=as_is +$! $ ANAL_OBJ_AXP: Subroutine $ V = 'F$Verify(0) $ SAY := "WRITE_ SYS$OUTPUT" @@ -409,6 +705,17 @@ $ create a.tmp $ open/append atmp a.tmp $ loop: $ read/end=end_loop in line +$ if f$locate("/SHARE",f$edit(line,"upcase")) .lt. f$length(line) +$ then +$ write sys$output "ANAL_SKP_SHR-i-skipshare, ''line'" +$ goto loop +$ endif +$ if f$locate("IDENTIFICATION=",f$edit(line,"upcase")) .lt. f$length(line) +$ then +$ write sys$output "ANAL_OBJ_AXP-i-ident: Identification ", - + f$element(1,"=",line) +$ goto loop +$ endif $ f= f$search(line) $ if f .eqs. "" $ then @@ -450,8 +757,31 @@ $ edito/edt/command=sys$input f.tmp sub/symbol: "/symbol_vector=(/whole sub/"/=DATA)/whole exit -$ sort/nodupl d.tmp,f.tmp 'p2' -$ delete a.tmp;*,b.tmp;*,c.tmp;*,d.tmp;*,e.tmp;*,f.tmp;* +$ sort/nodupl d.tmp,f.tmp g.tmp +$ open/read raw_vector g.tmp +$ open/write case_vector 'p2' +$ RAWLOOP: +$ read/end=end_rawloop raw_vector raw_element +$ write case_vector raw_element +$ if f$locate("=PROCEDURE)",raw_element) .lt. f$length(raw_element) +$ then +$ name = f$element(1,"=",raw_element) - "(" +$ if f$edit(name,"UPCASE") .nes. name then - + write case_vector f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)", - + f$edit(name,"UPCASE"), name) +$ endif +$ if f$locate("=DATA)",raw_element) .lt. f$length(raw_element) +$ then +$ name = f$element(1,"=",raw_element) - "(" +$ if f$edit(name,"UPCASE") .nes. name then - + write case_vector f$fao(" symbol_vector=(!AS/!AS=DATA)", - + f$edit(name,"UPCASE"), name) +$ endif +$ goto rawloop +$ END_RAWLOOP: +$ close raw_vector +$ close case_vector +$ delete a.tmp;*,b.tmp;*,c.tmp;*,d.tmp;*,e.tmp;*,f.tmp;*,g.tmp;* $ if f$search("x.tmp") .nes. "" - then $ delete x.tmp;* $! @@ -459,3 +789,16 @@ $ EXIT_AA: $ if V then set verify $ endsubroutine $!------------------------------------------------------------------------------ +$! +$! Write configuration to both permanent and temporary config file +$! +$! Version history +$! 0.01 20031029 First version to receive a number +$! +$WRITE_CONFIG: SUBROUTINE +$ write aconf 'p1' +$ open/append confh 'th' +$ write confh 'p1' +$ close confh +$ENDSUBROUTINE +$!------------------------------------------------------------------------------ diff --git a/zlib/minigzip.c b/zlib/minigzip.c index 0f57171c472..7aa1c0f4ddd 100644 --- a/zlib/minigzip.c +++ b/zlib/minigzip.c @@ -1,5 +1,5 @@ /* minigzip.c -- simulate gzip using the zlib compression library - * Copyright (C) 1995-2005 Jean-loup Gailly. + * Copyright (C) 1995-2006, 2010 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -15,8 +15,8 @@ /* @(#) $Id: minigzip.c,v 1.1.1.2 2002/03/11 21:53:26 tromey Exp $ */ -#include <stdio.h> #include "zlib.h" +#include <stdio.h> #ifdef STDC # include <string.h> @@ -32,6 +32,9 @@ #if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) # include <fcntl.h> # include <io.h> +# ifdef UNDER_CE +# include <stdlib.h> +# endif # define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) #else # define SET_BINARY_MODE(file) @@ -50,9 +53,75 @@ # include <unix.h> /* for fileno */ #endif +#if !defined(Z_HAVE_UNISTD_H) && !defined(_LARGEFILE64_SOURCE) #ifndef WIN32 /* unlink already in stdio.h for WIN32 */ extern int unlink OF((const char *)); #endif +#endif + +#if defined(UNDER_CE) +# include <windows.h> +# define perror(s) pwinerror(s) + +/* Map the Windows error number in ERROR to a locale-dependent error + message string and return a pointer to it. Typically, the values + for ERROR come from GetLastError. + + The string pointed to shall not be modified by the application, + but may be overwritten by a subsequent call to strwinerror + + The strwinerror function does not change the current setting + of GetLastError. */ + +static char *strwinerror (error) + DWORD error; +{ + static char buf[1024]; + + wchar_t *msgbuf; + DWORD lasterr = GetLastError(); + DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM + | FORMAT_MESSAGE_ALLOCATE_BUFFER, + NULL, + error, + 0, /* Default language */ + (LPVOID)&msgbuf, + 0, + NULL); + if (chars != 0) { + /* If there is an \r\n appended, zap it. */ + if (chars >= 2 + && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') { + chars -= 2; + msgbuf[chars] = 0; + } + + if (chars > sizeof (buf) - 1) { + chars = sizeof (buf) - 1; + msgbuf[chars] = 0; + } + + wcstombs(buf, msgbuf, chars + 1); + LocalFree(msgbuf); + } + else { + sprintf(buf, "unknown win32 error (%ld)", error); + } + + SetLastError(lasterr); + return buf; +} + +static void pwinerror (s) + const char *s; +{ + if (s && *s) + fprintf(stderr, "%s: %s\n", s, strwinerror(GetLastError ())); + else + fprintf(stderr, "%s\n", strwinerror(GetLastError ())); +} + +#endif /* UNDER_CE */ #ifndef GZ_SUFFIX # define GZ_SUFFIX ".gz" @@ -198,6 +267,11 @@ void file_compress(file, mode) FILE *in; gzFile out; + if (strlen(file) + strlen(GZ_SUFFIX) >= sizeof(outfile)) { + fprintf(stderr, "%s: filename too long\n", prog); + exit(1); + } + strcpy(outfile, file); strcat(outfile, GZ_SUFFIX); @@ -227,7 +301,12 @@ void file_uncompress(file) char *infile, *outfile; FILE *out; gzFile in; - uInt len = (uInt)strlen(file); + size_t len = strlen(file); + + if (len + strlen(GZ_SUFFIX) >= sizeof(buf)) { + fprintf(stderr, "%s: filename too long\n", prog); + exit(1); + } strcpy(buf, file); @@ -258,7 +337,8 @@ void file_uncompress(file) /* =========================================================================== - * Usage: minigzip [-d] [-f] [-h] [-r] [-1 to -9] [files...] + * Usage: minigzip [-c] [-d] [-f] [-h] [-r] [-1 to -9] [files...] + * -c : write to standard output * -d : decompress * -f : compress with Z_FILTERED * -h : compress with Z_HUFFMAN_ONLY @@ -270,17 +350,30 @@ int main(argc, argv) int argc; char *argv[]; { + int copyout = 0; int uncompr = 0; gzFile file; - char outmode[20]; + char *bname, outmode[20]; strcpy(outmode, "wb6 "); prog = argv[0]; + bname = strrchr(argv[0], '/'); + if (bname) + bname++; + else + bname = argv[0]; argc--, argv++; + if (!strcmp(bname, "gunzip")) + uncompr = 1; + else if (!strcmp(bname, "zcat")) + copyout = uncompr = 1; + while (argc > 0) { - if (strcmp(*argv, "-d") == 0) + if (strcmp(*argv, "-c") == 0) + copyout = 1; + else if (strcmp(*argv, "-d") == 0) uncompr = 1; else if (strcmp(*argv, "-f") == 0) outmode[3] = 'f'; @@ -310,11 +403,36 @@ int main(argc, argv) gz_compress(stdin, file); } } else { + if (copyout) { + SET_BINARY_MODE(stdout); + } do { if (uncompr) { - file_uncompress(*argv); + if (copyout) { + file = gzopen(*argv, "rb"); + if (file == NULL) + fprintf(stderr, "%s: can't gzopen %s\n", prog, *argv); + else + gz_uncompress(file, stdout); + } else { + file_uncompress(*argv); + } } else { - file_compress(*argv, outmode); + if (copyout) { + FILE * in = fopen(*argv, "rb"); + + if (in == NULL) { + perror(*argv); + } else { + file = gzdopen(fileno(stdout), outmode); + if (file == NULL) error("can't gzdopen stdout"); + + gz_compress(in, file); + } + + } else { + file_compress(*argv, outmode); + } } } while (argv++, --argc); } diff --git a/zlib/msdos/Makefile.bor b/zlib/msdos/Makefile.bor index 8f8132d1223..0c1b99c9b9f 100644 --- a/zlib/msdos/Makefile.bor +++ b/zlib/msdos/Makefile.bor @@ -41,10 +41,10 @@ LDFLAGS=-m$(MODEL) -f- # variables ZLIB_LIB = zlib_$(MODEL).lib -OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj -OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj -OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infback.obj -OBJP2 = +inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj # targets @@ -61,7 +61,13 @@ crc32.obj: crc32.c zlib.h zconf.h crc32.h deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h -gzio.obj: gzio.c zutil.h zlib.h zconf.h +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ inffast.h inffixed.h diff --git a/zlib/msdos/Makefile.dj2 b/zlib/msdos/Makefile.dj2 index 283d1d96160..29b03954d7b 100644 --- a/zlib/msdos/Makefile.dj2 +++ b/zlib/msdos/Makefile.dj2 @@ -51,8 +51,8 @@ AR=ar rcs prefix=/usr/local exec_prefix = $(prefix) -OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ - zutil.o inflate.o infback.o inftrees.o inffast.o +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o OBJA = # to use the asm code: make OBJA=match.o diff --git a/zlib/msdos/Makefile.emx b/zlib/msdos/Makefile.emx index ed4c31fbbde..9c1b57a5857 100644 --- a/zlib/msdos/Makefile.emx +++ b/zlib/msdos/Makefile.emx @@ -33,8 +33,8 @@ AR=ar rcs prefix=/usr/local exec_prefix = $(prefix) -OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ - zutil.o inflate.o infback.o inftrees.o inffast.o +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o TEST_OBJS = example.o minigzip.o diff --git a/zlib/msdos/Makefile.msc b/zlib/msdos/Makefile.msc index b8fc665efba..cd2816fbf31 100644 --- a/zlib/msdos/Makefile.msc +++ b/zlib/msdos/Makefile.msc @@ -37,8 +37,8 @@ LDFLAGS=/noi/e/st:0x1500/noe/farcall/packcode # variables ZLIB_LIB = zlib_$(MODEL).lib -OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj -OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj # targets @@ -55,7 +55,13 @@ crc32.obj: crc32.c zlib.h zconf.h crc32.h deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h -gzio.obj: gzio.c zutil.h zlib.h zconf.h +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ inffast.h inffixed.h diff --git a/zlib/msdos/Makefile.tc b/zlib/msdos/Makefile.tc index 480750ade25..bcd0d1889c5 100644 --- a/zlib/msdos/Makefile.tc +++ b/zlib/msdos/Makefile.tc @@ -26,10 +26,10 @@ LDFLAGS=-m$(MODEL) -f- # variables ZLIB_LIB = zlib_$(MODEL).lib -OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj -OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj -OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infback.obj -OBJP2 = +inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj # targets @@ -46,7 +46,13 @@ crc32.obj: crc32.c zlib.h zconf.h crc32.h deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h -gzio.obj: gzio.c zutil.h zlib.h zconf.h +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ inffast.h inffixed.h diff --git a/zlib/nintendods/Makefile b/zlib/nintendods/Makefile new file mode 100644 index 00000000000..21337d01ab2 --- /dev/null +++ b/zlib/nintendods/Makefile @@ -0,0 +1,126 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- + +ifeq ($(strip $(DEVKITARM)),) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM") +endif + +include $(DEVKITARM)/ds_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# DATA is a list of directories containing data files +# INCLUDES is a list of directories containing header files +#--------------------------------------------------------------------------------- +TARGET := $(shell basename $(CURDIR)) +BUILD := build +SOURCES := ../../ +DATA := data +INCLUDES := include + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +ARCH := -mthumb -mthumb-interwork + +CFLAGS := -Wall -O2\ + -march=armv5te -mtune=arm946e-s \ + -fomit-frame-pointer -ffast-math \ + $(ARCH) + +CFLAGS += $(INCLUDE) -DARM9 +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions + +ASFLAGS := $(ARCH) -march=armv5te -mtune=arm946e-s +LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(LIBNDS) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/lib/libz.a + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +.PHONY: $(BUILD) clean all + +#--------------------------------------------------------------------------------- +all: $(BUILD) + @[ -d $@ ] || mkdir -p include + @cp ../../*.h include + +lib: + @[ -d $@ ] || mkdir -p $@ + +$(BUILD): lib + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) lib + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT) : $(OFILES) + +#--------------------------------------------------------------------------------- +%.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/zlib/nintendods/README b/zlib/nintendods/README new file mode 100644 index 00000000000..ba7a37dbe8e --- /dev/null +++ b/zlib/nintendods/README @@ -0,0 +1,5 @@ +This Makefile requires devkitARM (http://www.devkitpro.org/category/devkitarm/) and works inside "contrib/nds". It is based on a devkitARM template. + +Eduardo Costa <eduardo.m.costa@gmail.com> +January 3, 2009 + diff --git a/zlib/as400/bndsrc b/zlib/old/as400/bndsrc index 9cf94bb3567..9cf94bb3567 100644 --- a/zlib/as400/bndsrc +++ b/zlib/old/as400/bndsrc diff --git a/zlib/as400/compile.clp b/zlib/old/as400/compile.clp index 85549515006..85549515006 100644 --- a/zlib/as400/compile.clp +++ b/zlib/old/as400/compile.clp diff --git a/zlib/as400/readme.txt b/zlib/old/as400/readme.txt index beae13f565b..beae13f565b 100644 --- a/zlib/as400/readme.txt +++ b/zlib/old/as400/readme.txt diff --git a/zlib/as400/zlib.inc b/zlib/old/as400/zlib.inc index 7bbfb7e4171..a9a4f5cf4f6 100644 --- a/zlib/as400/zlib.inc +++ b/zlib/old/as400/zlib.inc @@ -1,7 +1,7 @@ * ZLIB.INC - Interface to the general purpose compression library * * ILE RPG400 version by Patrick Monnerat, DATASPHERE. - * Version 1.2.3 + * Version 1.2.3.9 * * * WARNING: @@ -22,8 +22,8 @@ * * Versioning information. * - D ZLIB_VERSION C '1.2.3' - D ZLIB_VERNUM C X'1230' + D ZLIB_VERSION C '1.2.3.9' + D ZLIB_VERNUM C X'1239' * * Other equates. * diff --git a/zlib/projects/visualc6/README.txt b/zlib/old/visualc6/README.txt index d0296c272c3..d0296c272c3 100644 --- a/zlib/projects/visualc6/README.txt +++ b/zlib/old/visualc6/README.txt diff --git a/zlib/projects/visualc6/example.dsp b/zlib/old/visualc6/example.dsp index e072a37ff00..d3580525bd4 100644 --- a/zlib/projects/visualc6/example.dsp +++ b/zlib/old/visualc6/example.dsp @@ -7,25 +7,25 @@ CFG=example - Win32 LIB Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
-!MESSAGE
+!MESSAGE
!MESSAGE NMAKE /f "example.mak".
-!MESSAGE
+!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
+!MESSAGE
!MESSAGE NMAKE /f "example.mak" CFG="example - Win32 LIB Debug"
-!MESSAGE
+!MESSAGE
!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "example - Win32 DLL Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "example - Win32 DLL Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
!MESSAGE "example - Win32 DLL ASM Release" (based on "Win32 (x86) Console Application")
!MESSAGE "example - Win32 DLL ASM Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE "example - Win32 LIB Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "example - Win32 LIB Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "example - Win32 DLL Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "example - Win32 DLL Debug" (based on "Win32 (x86) Console Application")
!MESSAGE "example - Win32 LIB ASM Release" (based on "Win32 (x86) Console Application")
!MESSAGE "example - Win32 LIB ASM Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
+!MESSAGE "example - Win32 LIB Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "example - Win32 LIB Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
@@ -34,22 +34,22 @@ CFG=example - Win32 LIB Debug CPP=cl.exe
RSC=rc.exe
-!IF "$(CFG)" == "example - Win32 DLL Release"
+!IF "$(CFG)" == "example - Win32 DLL ASM Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "example___Win32_DLL_Release"
-# PROP BASE Intermediate_Dir "example___Win32_DLL_Release"
+# PROP BASE Output_Dir "example___Win32_DLL_ASM_Release"
+# PROP BASE Intermediate_Dir "example___Win32_DLL_ASM_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Win32_DLL_Release"
-# PROP Intermediate_Dir "Win32_DLL_Release"
+# PROP Output_Dir "Win32_DLL_ASM_Release"
+# PROP Intermediate_Dir "Win32_DLL_ASM_Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
@@ -60,22 +60,22 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 /nologo /subsystem:console /machine:I386
-!ELSEIF "$(CFG)" == "example - Win32 DLL Debug"
+!ELSEIF "$(CFG)" == "example - Win32 DLL ASM Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "example___Win32_DLL_Debug"
-# PROP BASE Intermediate_Dir "example___Win32_DLL_Debug"
+# PROP BASE Output_Dir "example___Win32_DLL_ASM_Debug"
+# PROP BASE Intermediate_Dir "example___Win32_DLL_ASM_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Win32_DLL_Debug"
-# PROP Intermediate_Dir "Win32_DLL_Debug"
+# PROP Output_Dir "Win32_DLL_ASM_Debug"
+# PROP Intermediate_Dir "Win32_DLL_ASM_Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
@@ -86,22 +86,22 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-!ELSEIF "$(CFG)" == "example - Win32 DLL ASM Release"
+!ELSEIF "$(CFG)" == "example - Win32 DLL Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "example___Win32_DLL_ASM_Release"
-# PROP BASE Intermediate_Dir "example___Win32_DLL_ASM_Release"
+# PROP BASE Output_Dir "example___Win32_DLL_Release"
+# PROP BASE Intermediate_Dir "example___Win32_DLL_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Win32_DLL_ASM_Release"
-# PROP Intermediate_Dir "Win32_DLL_ASM_Release"
+# PROP Output_Dir "Win32_DLL_Release"
+# PROP Intermediate_Dir "Win32_DLL_Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
@@ -112,22 +112,22 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 /nologo /subsystem:console /machine:I386
-!ELSEIF "$(CFG)" == "example - Win32 DLL ASM Debug"
+!ELSEIF "$(CFG)" == "example - Win32 DLL Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "example___Win32_DLL_ASM_Debug"
-# PROP BASE Intermediate_Dir "example___Win32_DLL_ASM_Debug"
+# PROP BASE Output_Dir "example___Win32_DLL_Debug"
+# PROP BASE Intermediate_Dir "example___Win32_DLL_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Win32_DLL_ASM_Debug"
-# PROP Intermediate_Dir "Win32_DLL_ASM_Debug"
+# PROP Output_Dir "Win32_DLL_Debug"
+# PROP Intermediate_Dir "Win32_DLL_Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
@@ -138,22 +138,22 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-!ELSEIF "$(CFG)" == "example - Win32 LIB Release"
+!ELSEIF "$(CFG)" == "example - Win32 LIB ASM Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "example___Win32_LIB_Release"
-# PROP BASE Intermediate_Dir "example___Win32_LIB_Release"
+# PROP BASE Output_Dir "example___Win32_LIB_ASM_Release"
+# PROP BASE Intermediate_Dir "example___Win32_LIB_ASM_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Win32_LIB_Release"
-# PROP Intermediate_Dir "Win32_LIB_Release"
+# PROP Output_Dir "Win32_LIB_ASM_Release"
+# PROP Intermediate_Dir "Win32_LIB_ASM_Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
@@ -164,22 +164,22 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 /nologo /subsystem:console /machine:I386
-!ELSEIF "$(CFG)" == "example - Win32 LIB Debug"
+!ELSEIF "$(CFG)" == "example - Win32 LIB ASM Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "example___Win32_LIB_Debug"
-# PROP BASE Intermediate_Dir "example___Win32_LIB_Debug"
+# PROP BASE Output_Dir "example___Win32_LIB_ASM_Debug"
+# PROP BASE Intermediate_Dir "example___Win32_LIB_ASM_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Win32_LIB_Debug"
-# PROP Intermediate_Dir "Win32_LIB_Debug"
+# PROP Output_Dir "Win32_LIB_ASM_Debug"
+# PROP Intermediate_Dir "Win32_LIB_ASM_Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
@@ -190,22 +190,22 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-!ELSEIF "$(CFG)" == "example - Win32 LIB ASM Release"
+!ELSEIF "$(CFG)" == "example - Win32 LIB Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "example___Win32_LIB_ASM_Release"
-# PROP BASE Intermediate_Dir "example___Win32_LIB_ASM_Release"
+# PROP BASE Output_Dir "example___Win32_LIB_Release"
+# PROP BASE Intermediate_Dir "example___Win32_LIB_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Win32_LIB_ASM_Release"
-# PROP Intermediate_Dir "Win32_LIB_ASM_Release"
+# PROP Output_Dir "Win32_LIB_Release"
+# PROP Intermediate_Dir "Win32_LIB_Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
@@ -216,22 +216,22 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 /nologo /subsystem:console /machine:I386
-!ELSEIF "$(CFG)" == "example - Win32 LIB ASM Debug"
+!ELSEIF "$(CFG)" == "example - Win32 LIB Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "example___Win32_LIB_ASM_Debug"
-# PROP BASE Intermediate_Dir "example___Win32_LIB_ASM_Debug"
+# PROP BASE Output_Dir "example___Win32_LIB_Debug"
+# PROP BASE Intermediate_Dir "example___Win32_LIB_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Win32_LIB_ASM_Debug"
-# PROP Intermediate_Dir "Win32_LIB_ASM_Debug"
+# PROP Output_Dir "Win32_LIB_Debug"
+# PROP Intermediate_Dir "Win32_LIB_Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
@@ -242,18 +242,18 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-!ENDIF
+!ENDIF
# Begin Target
-# Name "example - Win32 DLL Release"
-# Name "example - Win32 DLL Debug"
# Name "example - Win32 DLL ASM Release"
# Name "example - Win32 DLL ASM Debug"
-# Name "example - Win32 LIB Release"
-# Name "example - Win32 LIB Debug"
+# Name "example - Win32 DLL Release"
+# Name "example - Win32 DLL Debug"
# Name "example - Win32 LIB ASM Release"
# Name "example - Win32 LIB ASM Debug"
+# Name "example - Win32 LIB Release"
+# Name "example - Win32 LIB Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
diff --git a/zlib/projects/visualc6/minigzip.dsp b/zlib/old/visualc6/minigzip.dsp index f32024eaf5f..71034684d82 100644 --- a/zlib/projects/visualc6/minigzip.dsp +++ b/zlib/old/visualc6/minigzip.dsp @@ -7,25 +7,25 @@ CFG=minigzip - Win32 LIB Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
-!MESSAGE
+!MESSAGE
!MESSAGE NMAKE /f "minigzip.mak".
-!MESSAGE
+!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
+!MESSAGE
!MESSAGE NMAKE /f "minigzip.mak" CFG="minigzip - Win32 LIB Debug"
-!MESSAGE
+!MESSAGE
!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "minigzip - Win32 DLL Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "minigzip - Win32 DLL Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
!MESSAGE "minigzip - Win32 DLL ASM Release" (based on "Win32 (x86) Console Application")
!MESSAGE "minigzip - Win32 DLL ASM Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE "minigzip - Win32 LIB Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "minigzip - Win32 LIB Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "minigzip - Win32 DLL Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "minigzip - Win32 DLL Debug" (based on "Win32 (x86) Console Application")
!MESSAGE "minigzip - Win32 LIB ASM Release" (based on "Win32 (x86) Console Application")
!MESSAGE "minigzip - Win32 LIB ASM Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
+!MESSAGE "minigzip - Win32 LIB Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "minigzip - Win32 LIB Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
@@ -34,22 +34,22 @@ CFG=minigzip - Win32 LIB Debug CPP=cl.exe
RSC=rc.exe
-!IF "$(CFG)" == "minigzip - Win32 DLL Release"
+!IF "$(CFG)" == "minigzip - Win32 DLL ASM Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "minigzip___Win32_DLL_Release"
-# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_Release"
+# PROP BASE Output_Dir "minigzip___Win32_DLL_ASM_Release"
+# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_ASM_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Win32_DLL_Release"
-# PROP Intermediate_Dir "Win32_DLL_Release"
+# PROP Output_Dir "Win32_DLL_ASM_Release"
+# PROP Intermediate_Dir "Win32_DLL_ASM_Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
@@ -60,22 +60,22 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 /nologo /subsystem:console /machine:I386
-!ELSEIF "$(CFG)" == "minigzip - Win32 DLL Debug"
+!ELSEIF "$(CFG)" == "minigzip - Win32 DLL ASM Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "minigzip___Win32_DLL_Debug"
-# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_Debug"
+# PROP BASE Output_Dir "minigzip___Win32_DLL_ASM_Debug"
+# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_ASM_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Win32_DLL_Debug"
-# PROP Intermediate_Dir "Win32_DLL_Debug"
+# PROP Output_Dir "Win32_DLL_ASM_Debug"
+# PROP Intermediate_Dir "Win32_DLL_ASM_Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
@@ -86,22 +86,22 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-!ELSEIF "$(CFG)" == "minigzip - Win32 DLL ASM Release"
+!ELSEIF "$(CFG)" == "minigzip - Win32 DLL Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "minigzip___Win32_DLL_ASM_Release"
-# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_ASM_Release"
+# PROP BASE Output_Dir "minigzip___Win32_DLL_Release"
+# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Win32_DLL_ASM_Release"
-# PROP Intermediate_Dir "Win32_DLL_ASM_Release"
+# PROP Output_Dir "Win32_DLL_Release"
+# PROP Intermediate_Dir "Win32_DLL_Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
@@ -112,22 +112,22 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 /nologo /subsystem:console /machine:I386
-!ELSEIF "$(CFG)" == "minigzip - Win32 DLL ASM Debug"
+!ELSEIF "$(CFG)" == "minigzip - Win32 DLL Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "minigzip___Win32_DLL_ASM_Debug"
-# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_ASM_Debug"
+# PROP BASE Output_Dir "minigzip___Win32_DLL_Debug"
+# PROP BASE Intermediate_Dir "minigzip___Win32_DLL_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Win32_DLL_ASM_Debug"
-# PROP Intermediate_Dir "Win32_DLL_ASM_Debug"
+# PROP Output_Dir "Win32_DLL_Debug"
+# PROP Intermediate_Dir "Win32_DLL_Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
@@ -138,22 +138,22 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-!ELSEIF "$(CFG)" == "minigzip - Win32 LIB Release"
+!ELSEIF "$(CFG)" == "minigzip - Win32 LIB ASM Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "minigzip___Win32_LIB_Release"
-# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_Release"
+# PROP BASE Output_Dir "minigzip___Win32_LIB_ASM_Release"
+# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_ASM_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Win32_LIB_Release"
-# PROP Intermediate_Dir "Win32_LIB_Release"
+# PROP Output_Dir "Win32_LIB_ASM_Release"
+# PROP Intermediate_Dir "Win32_LIB_ASM_Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
@@ -164,22 +164,22 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 /nologo /subsystem:console /machine:I386
-!ELSEIF "$(CFG)" == "minigzip - Win32 LIB Debug"
+!ELSEIF "$(CFG)" == "minigzip - Win32 LIB ASM Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "minigzip___Win32_LIB_Debug"
-# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_Debug"
+# PROP BASE Output_Dir "minigzip___Win32_LIB_ASM_Debug"
+# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_ASM_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Win32_LIB_Debug"
-# PROP Intermediate_Dir "Win32_LIB_Debug"
+# PROP Output_Dir "Win32_LIB_ASM_Debug"
+# PROP Intermediate_Dir "Win32_LIB_ASM_Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
@@ -190,22 +190,22 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-!ELSEIF "$(CFG)" == "minigzip - Win32 LIB ASM Release"
+!ELSEIF "$(CFG)" == "minigzip - Win32 LIB Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "minigzip___Win32_LIB_ASM_Release"
-# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_ASM_Release"
+# PROP BASE Output_Dir "minigzip___Win32_LIB_Release"
+# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Win32_LIB_ASM_Release"
-# PROP Intermediate_Dir "Win32_LIB_ASM_Release"
+# PROP Output_Dir "Win32_LIB_Release"
+# PROP Intermediate_Dir "Win32_LIB_Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
@@ -216,22 +216,22 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 /nologo /subsystem:console /machine:I386
-!ELSEIF "$(CFG)" == "minigzip - Win32 LIB ASM Debug"
+!ELSEIF "$(CFG)" == "minigzip - Win32 LIB Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "minigzip___Win32_LIB_ASM_Debug"
-# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_ASM_Debug"
+# PROP BASE Output_Dir "minigzip___Win32_LIB_Debug"
+# PROP BASE Intermediate_Dir "minigzip___Win32_LIB_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Win32_LIB_ASM_Debug"
-# PROP Intermediate_Dir "Win32_LIB_ASM_Debug"
+# PROP Output_Dir "Win32_LIB_Debug"
+# PROP Intermediate_Dir "Win32_LIB_Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
# SUBTRACT BASE CPP /YX
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
@@ -242,18 +242,18 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-!ENDIF
+!ENDIF
# Begin Target
-# Name "minigzip - Win32 DLL Release"
-# Name "minigzip - Win32 DLL Debug"
# Name "minigzip - Win32 DLL ASM Release"
# Name "minigzip - Win32 DLL ASM Debug"
-# Name "minigzip - Win32 LIB Release"
-# Name "minigzip - Win32 LIB Debug"
+# Name "minigzip - Win32 DLL Release"
+# Name "minigzip - Win32 DLL Debug"
# Name "minigzip - Win32 LIB ASM Release"
# Name "minigzip - Win32 LIB ASM Debug"
+# Name "minigzip - Win32 LIB Release"
+# Name "minigzip - Win32 LIB Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
diff --git a/zlib/projects/visualc6/zlib.dsp b/zlib/old/visualc6/zlib.dsp index 0fe0604ccd7..00f54ea4222 100644 --- a/zlib/projects/visualc6/zlib.dsp +++ b/zlib/old/visualc6/zlib.dsp @@ -8,48 +8,48 @@ CFG=zlib - Win32 LIB Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
-!MESSAGE
+!MESSAGE
!MESSAGE NMAKE /f "zlib.mak".
-!MESSAGE
+!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
+!MESSAGE
!MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 LIB Debug"
-!MESSAGE
+!MESSAGE
!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "zlib - Win32 DLL Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "zlib - Win32 DLL Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
!MESSAGE "zlib - Win32 DLL ASM Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "zlib - Win32 DLL ASM Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "zlib - Win32 LIB Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "zlib - Win32 LIB Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "zlib - Win32 DLL Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "zlib - Win32 DLL Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "zlib - Win32 LIB ASM Release" (based on "Win32 (x86) Static Library")
!MESSAGE "zlib - Win32 LIB ASM Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
+!MESSAGE "zlib - Win32 LIB Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "zlib - Win32 LIB Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
-!IF "$(CFG)" == "zlib - Win32 DLL Release"
+!IF "$(CFG)" == "zlib - Win32 DLL ASM Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "zlib___Win32_DLL_Release"
-# PROP BASE Intermediate_Dir "zlib___Win32_DLL_Release"
+# PROP BASE Output_Dir "zlib___Win32_DLL_ASM_Release"
+# PROP BASE Intermediate_Dir "zlib___Win32_DLL_ASM_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Win32_DLL_Release"
-# PROP Intermediate_Dir "Win32_DLL_Release"
+# PROP Output_Dir "Win32_DLL_ASM_Release"
+# PROP Intermediate_Dir "Win32_DLL_ASM_Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
CPP=cl.exe
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
# SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /D "ASMV" /D "ASMINF" /FD /c
# SUBTRACT CPP /YX /Yc /Yu
MTL=midl.exe
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
@@ -62,25 +62,25 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 /nologo /dll /machine:I386 /out:"Win32_DLL_Release\zlib1.dll"
+# ADD LINK32 /nologo /dll /machine:I386 /out:"Win32_DLL_ASM_Release\zlib1.dll"
-!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "zlib___Win32_DLL_Debug"
-# PROP BASE Intermediate_Dir "zlib___Win32_DLL_Debug"
+# PROP BASE Output_Dir "zlib___Win32_DLL_ASM_Debug"
+# PROP BASE Intermediate_Dir "zlib___Win32_DLL_ASM_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Win32_DLL_Debug"
-# PROP Intermediate_Dir "Win32_DLL_Debug"
+# PROP Output_Dir "Win32_DLL_ASM_Debug"
+# PROP Intermediate_Dir "Win32_DLL_ASM_Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
CPP=cl.exe
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
# SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /D "ASMV" /D "ASMINF" /FR /FD /GZ /c
# SUBTRACT CPP /YX /Yc /Yu
MTL=midl.exe
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
@@ -93,25 +93,25 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 /nologo /dll /debug /machine:I386 /out:"Win32_DLL_Debug\zlib1d.dll" /pdbtype:sept
+# ADD LINK32 /nologo /dll /debug /machine:I386 /out:"Win32_DLL_ASM_Debug\zlib1d.dll" /pdbtype:sept
-!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Release"
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "zlib___Win32_DLL_ASM_Release"
-# PROP BASE Intermediate_Dir "zlib___Win32_DLL_ASM_Release"
+# PROP BASE Output_Dir "zlib___Win32_DLL_Release"
+# PROP BASE Intermediate_Dir "zlib___Win32_DLL_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Win32_DLL_ASM_Release"
-# PROP Intermediate_Dir "Win32_DLL_ASM_Release"
+# PROP Output_Dir "Win32_DLL_Release"
+# PROP Intermediate_Dir "Win32_DLL_Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
CPP=cl.exe
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
# SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "ASMV" /D "ASMINF" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
# SUBTRACT CPP /YX /Yc /Yu
MTL=midl.exe
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
@@ -124,25 +124,25 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 /nologo /dll /machine:I386 /out:"Win32_DLL_ASM_Release\zlib1.dll"
+# ADD LINK32 /nologo /dll /machine:I386 /out:"Win32_DLL_Release\zlib1.dll"
-!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Debug"
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "zlib___Win32_DLL_ASM_Debug"
-# PROP BASE Intermediate_Dir "zlib___Win32_DLL_ASM_Debug"
+# PROP BASE Output_Dir "zlib___Win32_DLL_Debug"
+# PROP BASE Intermediate_Dir "zlib___Win32_DLL_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Win32_DLL_ASM_Debug"
-# PROP Intermediate_Dir "Win32_DLL_ASM_Debug"
+# PROP Output_Dir "Win32_DLL_Debug"
+# PROP Intermediate_Dir "Win32_DLL_Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
CPP=cl.exe
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
# SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "ASMV" /D "ASMINF" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
# SUBTRACT CPP /YX /Yc /Yu
MTL=midl.exe
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
@@ -155,24 +155,24 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 /nologo /dll /debug /machine:I386 /out:"Win32_DLL_ASM_Debug\zlib1d.dll" /pdbtype:sept
+# ADD LINK32 /nologo /dll /debug /machine:I386 /out:"Win32_DLL_Debug\zlib1d.dll" /pdbtype:sept
-!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "zlib___Win32_LIB_Release"
-# PROP BASE Intermediate_Dir "zlib___Win32_LIB_Release"
+# PROP BASE Output_Dir "zlib___Win32_LIB_ASM_Release"
+# PROP BASE Intermediate_Dir "zlib___Win32_LIB_ASM_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Win32_LIB_Release"
-# PROP Intermediate_Dir "Win32_LIB_Release"
+# PROP Output_Dir "Win32_LIB_ASM_Release"
+# PROP Intermediate_Dir "Win32_LIB_ASM_Release"
# PROP Target_Dir ""
CPP=cl.exe
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
# SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /D "ASMV" /D "ASMINF" /FD /c
# SUBTRACT CPP /YX /Yc /Yu
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d "NDEBUG"
@@ -184,22 +184,22 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
-!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "zlib___Win32_LIB_Debug"
-# PROP BASE Intermediate_Dir "zlib___Win32_LIB_Debug"
+# PROP BASE Output_Dir "zlib___Win32_LIB_ASM_Debug"
+# PROP BASE Intermediate_Dir "zlib___Win32_LIB_ASM_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Win32_LIB_Debug"
-# PROP Intermediate_Dir "Win32_LIB_Debug"
+# PROP Output_Dir "Win32_LIB_ASM_Debug"
+# PROP Intermediate_Dir "Win32_LIB_ASM_Debug"
# PROP Target_Dir ""
CPP=cl.exe
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
# SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /D "ASMV" /D "ASMINF" /FR /FD /GZ /c
# SUBTRACT CPP /YX /Yc /Yu
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d "_DEBUG"
@@ -209,24 +209,24 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"Win32_LIB_Debug\zlibd.lib"
+# ADD LIB32 /nologo /out:"Win32_LIB_ASM_Debug\zlibd.lib"
-!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Release"
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "zlib___Win32_LIB_ASM_Release"
-# PROP BASE Intermediate_Dir "zlib___Win32_LIB_ASM_Release"
+# PROP BASE Output_Dir "zlib___Win32_LIB_Release"
+# PROP BASE Intermediate_Dir "zlib___Win32_LIB_Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Win32_LIB_ASM_Release"
-# PROP Intermediate_Dir "Win32_LIB_ASM_Release"
+# PROP Output_Dir "Win32_LIB_Release"
+# PROP Intermediate_Dir "Win32_LIB_Release"
# PROP Target_Dir ""
CPP=cl.exe
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c
# SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "ASMV" /D "ASMINF" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "NDEBUG" /FD /c
# SUBTRACT CPP /YX /Yc /Yu
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d "NDEBUG"
@@ -238,22 +238,22 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
-!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Debug"
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "zlib___Win32_LIB_ASM_Debug"
-# PROP BASE Intermediate_Dir "zlib___Win32_LIB_ASM_Debug"
+# PROP BASE Output_Dir "zlib___Win32_LIB_Debug"
+# PROP BASE Intermediate_Dir "zlib___Win32_LIB_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Win32_LIB_ASM_Debug"
-# PROP Intermediate_Dir "Win32_LIB_ASM_Debug"
+# PROP Output_Dir "Win32_LIB_Debug"
+# PROP Intermediate_Dir "Win32_LIB_Debug"
# PROP Target_Dir ""
CPP=cl.exe
# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c
# SUBTRACT BASE CPP /YX /Yc /Yu
-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "ASMV" /D "ASMINF" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_DEBUG" /FR /FD /GZ /c
# SUBTRACT CPP /YX /Yc /Yu
RSC=rc.exe
# ADD BASE RSC /l 0x409 /d "_DEBUG"
@@ -263,20 +263,20 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"Win32_LIB_ASM_Debug\zlibd.lib"
+# ADD LIB32 /nologo /out:"Win32_LIB_Debug\zlibd.lib"
-!ENDIF
+!ENDIF
# Begin Target
-# Name "zlib - Win32 DLL Release"
-# Name "zlib - Win32 DLL Debug"
# Name "zlib - Win32 DLL ASM Release"
# Name "zlib - Win32 DLL ASM Debug"
-# Name "zlib - Win32 LIB Release"
-# Name "zlib - Win32 LIB Debug"
+# Name "zlib - Win32 DLL Release"
+# Name "zlib - Win32 DLL Debug"
# Name "zlib - Win32 LIB ASM Release"
# Name "zlib - Win32 LIB ASM Debug"
+# Name "zlib - Win32 LIB Release"
+# Name "zlib - Win32 LIB Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
@@ -298,7 +298,19 @@ SOURCE=..\..\deflate.c # End Source File
# Begin Source File
-SOURCE=..\..\gzio.c
+SOURCE=..\..\gzclose.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gzlib.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gzread.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gzwrite.c
# End Source File
# Begin Source File
@@ -328,31 +340,31 @@ SOURCE=..\..\uncompr.c SOURCE=..\..\win32\zlib.def
-!IF "$(CFG)" == "zlib - Win32 DLL Release"
+!IF "$(CFG)" == "zlib - Win32 DLL ASM Release"
-!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Debug"
-!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Release"
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Release"
-!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Debug"
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"
-!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Release"
# PROP Exclude_From_Build 1
-!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Debug"
# PROP Exclude_From_Build 1
-!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Release"
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"
# PROP Exclude_From_Build 1
-!ELSEIF "$(CFG)" == "zlib - Win32 LIB ASM Debug"
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"
# PROP Exclude_From_Build 1
-!ENDIF
+!ENDIF
# End Source File
# Begin Source File
@@ -419,15 +431,7 @@ SOURCE=..\..\win32\zlib1.rc SOURCE=..\..\contrib\masmx86\gvmat32.asm
-!IF "$(CFG)" == "zlib - Win32 DLL Release"
-
-# PROP Exclude_From_Build 1
-
-!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"
-
-# PROP Exclude_From_Build 1
-
-!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Release"
+!IF "$(CFG)" == "zlib - Win32 DLL ASM Release"
# Begin Custom Build - Assembling...
IntDir=.\Win32_DLL_ASM_Release
@@ -451,11 +455,11 @@ InputName=gvmat32 # End Custom Build
-!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Release"
# PROP Exclude_From_Build 1
-!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"
# PROP Exclude_From_Build 1
@@ -483,24 +487,22 @@ InputName=gvmat32 # End Custom Build
-!ENDIF
-
-# End Source File
-# Begin Source File
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"
-SOURCE=..\..\contrib\masmx86\gvmat32c.c
+# PROP Exclude_From_Build 1
-!IF "$(CFG)" == "zlib - Win32 DLL Release"
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"
# PROP Exclude_From_Build 1
-# ADD CPP /I "..\.."
-!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"
+!ENDIF
-# PROP Exclude_From_Build 1
-# ADD CPP /I "..\.."
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\contrib\masmx86\gvmat32c.c
-!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Release"
+!IF "$(CFG)" == "zlib - Win32 DLL ASM Release"
# ADD CPP /I "..\.."
@@ -508,12 +510,12 @@ SOURCE=..\..\contrib\masmx86\gvmat32c.c # ADD CPP /I "..\.."
-!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Release"
# PROP Exclude_From_Build 1
# ADD CPP /I "..\.."
-!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"
# PROP Exclude_From_Build 1
# ADD CPP /I "..\.."
@@ -526,22 +528,24 @@ SOURCE=..\..\contrib\masmx86\gvmat32c.c # ADD CPP /I "..\.."
-!ENDIF
-
-# End Source File
-# Begin Source File
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"
-SOURCE=..\..\contrib\masmx86\inffas32.asm
+# PROP Exclude_From_Build 1
+# ADD CPP /I "..\.."
-!IF "$(CFG)" == "zlib - Win32 DLL Release"
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"
# PROP Exclude_From_Build 1
+# ADD CPP /I "..\.."
-!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"
+!ENDIF
-# PROP Exclude_From_Build 1
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\contrib\masmx86\inffas32.asm
-!ELSEIF "$(CFG)" == "zlib - Win32 DLL ASM Release"
+!IF "$(CFG)" == "zlib - Win32 DLL ASM Release"
# Begin Custom Build - Assembling...
IntDir=.\Win32_DLL_ASM_Release
@@ -565,11 +569,11 @@ InputName=inffas32 # End Custom Build
-!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Release"
# PROP Exclude_From_Build 1
-!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"
+!ELSEIF "$(CFG)" == "zlib - Win32 DLL Debug"
# PROP Exclude_From_Build 1
@@ -597,7 +601,15 @@ InputName=inffas32 # End Custom Build
-!ENDIF
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Release"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF "$(CFG)" == "zlib - Win32 LIB Debug"
+
+# PROP Exclude_From_Build 1
+
+!ENDIF
# End Source File
# End Group
diff --git a/zlib/projects/visualc6/zlib.dsw b/zlib/old/visualc6/zlib.dsw index 3a771fce07d..3a771fce07d 100644 --- a/zlib/projects/visualc6/zlib.dsw +++ b/zlib/old/visualc6/zlib.dsw diff --git a/zlib/old/zlib.html b/zlib/old/zlib.html deleted file mode 100644 index 8c1b190c38b..00000000000 --- a/zlib/old/zlib.html +++ /dev/null @@ -1,971 +0,0 @@ -<html> -<head> - <title> - zlib general purpose compression library version 1.1.4 - </title> -</head> -<body bgcolor="White" text="Black" vlink="Red" alink="Navy" link="Red"> -<!-- background="zlibbg.gif" --> - -<h1> zlib 1.1.4 Manual </h1> -<hr> -<a name="Contents"><h2>Contents</h2> -<ol type="I"> -<li> <a href="#Prologue">Prologue</a> -<li> <a href="#Introduction">Introduction</a> -<li> <a href="#Utility functions">Utility functions</a> -<li> <a href="#Basic functions">Basic functions</a> -<li> <a href="#Advanced functions">Advanced functions</a> -<li> <a href="#Constants">Constants</a> -<li> <a href="#struct z_stream_s">struct z_stream_s</a> -<li> <a href="#Checksum functions">Checksum functions</a> -<li> <a href="#Misc">Misc</a> -</ol> -<hr> -<a name="Prologue"><h2> Prologue </h2> - 'zlib' general purpose compression library version 1.1.4, March 11th, 2002 - <p> - Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler - <p> - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - <p> - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - <ol> - <li> The origin of this software must not be misrepresented ; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - <li> Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - <li> This notice may not be removed or altered from any source distribution. - </ol> - - <dl> - <dt>Jean-loup Gailly - <dd><a href="mailto:jloup@gzip.org">jloup@gzip.org</a> - <dt>Mark Adler - <dd><a href="mailto:madler@alumni.caltech.edu">madler@alumni.caltech.edu</a> - </dl> - - The data format used by the zlib library is described by RFCs (Request for - Comments) 1950 to 1952 in the files - <a href="ftp://ds.internic.net/rfc/rfc1950.txt"> - ftp://ds.internic.net/rfc/rfc1950.txt </a> - (zlib format), - <a href="ftp://ds.internic.net/rfc/rfc1951.txt"> - rfc1951.txt </a> - (<a href="#deflate">deflate</a> format) and - <a href="ftp://ds.internic.net/rfc/rfc1952.txt"> - rfc1952.txt </a> - (gzip format). - <p> - This manual is converted from zlib.h by - <a href="mailto:piaip@csie.ntu.edu.tw"> piaip </a> - <p> - Visit <a href="http://ftp.cdrom.com/pub/infozip/zlib/"> - http://ftp.cdrom.com/pub/infozip/zlib/</a> - for the official zlib web page. - <p> - -<hr> -<a name="Introduction"><h2> Introduction </h2> - The 'zlib' compression library provides in-memory compression and - decompression functions, including integrity checks of the uncompressed - data. This version of the library supports only one compression method - (deflation) but other algorithms will be added later and will have the same - stream interface. - <p> - - Compression can be done in a single step if the buffers are large - enough (for example if an input file is mmap'ed), or can be done by - repeated calls of the compression function. In the latter case, the - application must provide more input and/or consume the output - (providing more output space) before each call. - <p> - - The library also supports reading and writing files in gzip (.gz) format - with an interface similar to that of stdio. - <p> - - The library does not install any signal handler. The decoder checks - the consistency of the compressed data, so the library should never - crash even in case of corrupted input. - <p> - -<hr> -<a name="Utility functions"><h2> Utility functions </h2> - The following utility functions are implemented on top of the - <a href="#Basic functions">basic stream-oriented functions</a>. - To simplify the interface, some - default options are assumed (compression level and memory usage, - standard memory allocation functions). The source code of these - utility functions can easily be modified if you need special options. -<h3> Function list </h3> -<ul> -<li> int <a href="#compress">compress</a> (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen); -<li> int <a href="#compress2">compress2</a> (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level); -<li> int <a href="#uncompress">uncompress</a> (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen); -<li> typedef voidp gzFile; -<li> gzFile <a href="#gzopen">gzopen</a> (const char *path, const char *mode); -<li> gzFile <a href="#gzdopen">gzdopen</a> (int fd, const char *mode); -<li> int <a href="#gzsetparams">gzsetparams</a> (gzFile file, int level, int strategy); -<li> int <a href="#gzread">gzread</a> (gzFile file, voidp buf, unsigned len); -<li> int <a href="#gzwrite">gzwrite</a> (gzFile file, const voidp buf, unsigned len); -<li> int VA <a href="#gzprintf">gzprintf</a> (gzFile file, const char *format, ...); -<li> int <a href="#gzputs">gzputs</a> (gzFile file, const char *s); -<li> char * <a href="#gzgets">gzgets</a> (gzFile file, char *buf, int len); -<li> int <a href="#gzputc">gzputc</a> (gzFile file, int c); -<li> int <a href="#gzgetc">gzgetc</a> (gzFile file); -<li> int <a href="#gzflush">gzflush</a> (gzFile file, int flush); -<li> z_off_t <a href="#gzseek">gzseek</a> (gzFile file, z_off_t offset, int whence); -<li> z_off_t <a href="#gztell">gztell</a> (gzFile file); -<li> int <a href="#gzrewind">gzrewind</a> (gzFile file); -<li> int <a href="#gzeof">gzeof</a> (gzFile file); -<li> int <a href="#gzclose">gzclose</a> (gzFile file); -<li> const char * <a href="#gzerror">gzerror</a> (gzFile file, int *errnum); -</ul> -<h3> Function description </h3> -<dl> -<font color="Blue"><dt> int <a name="compress">compress</a> (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);</font> -<dd> - Compresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be at least 0.1% larger than - sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the - compressed buffer.<p> - This function can be used to <a href="#compress">compress</a> a whole file at once if the - input file is mmap'ed.<p> - <a href="#compress">compress</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not - enough memory, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if there was not enough room in the output - buffer.<p> - -<font color="Blue"><dt> int <a name="compress2">compress2</a> (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level);</font> -<dd> - Compresses the source buffer into the destination buffer. The level - parameter has the same meaning as in <a href="#deflateInit">deflateInit</a>. sourceLen is the byte - length of the source buffer. Upon entry, destLen is the total size of the - destination buffer, which must be at least 0.1% larger than sourceLen plus - 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. - <p> - - <a href="#compress2">compress2</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not enough - memory, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if there was not enough room in the output buffer, - <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the level parameter is invalid. - <p> - -<font color="Blue"><dt> int <a name="uncompress">uncompress</a> (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);</font> -<dd> - Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be large enough to hold the - entire uncompressed data. (The size of the uncompressed data must have - been saved previously by the compressor and transmitted to the decompressor - by some mechanism outside the scope of this compression library.) - Upon exit, destLen is the actual size of the compressed buffer. <p> - This function can be used to decompress a whole file at once if the - input file is mmap'ed. - <p> - - <a href="#uncompress">uncompress</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not - enough memory, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if there was not enough room in the output - buffer, or <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if the input data was corrupted. - <p> - -<dt> typedef voidp gzFile; -<dd> <p> - -<font color="Blue"><dt> gzFile <a name="gzopen">gzopen</a> (const char *path, const char *mode);</font> -<dd> - Opens a gzip (.gz) file for reading or writing. The mode parameter - is as in fopen ("rb" or "wb") but can also include a compression level - ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for - Huffman only compression as in "wb1h". (See the description - of <a href="#deflateInit2">deflateInit2</a> for more information about the strategy parameter.) - <p> - - <a href="#gzopen">gzopen</a> can be used to read a file which is not in gzip format ; in this - case <a href="#gzread">gzread</a> will directly read from the file without decompression. - <p> - - <a href="#gzopen">gzopen</a> returns NULL if the file could not be opened or if there was - insufficient memory to allocate the (de)compression <a href="#state">state</a> ; errno - can be checked to distinguish the two cases (if errno is zero, the - zlib error is <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a>). - <p> - -<font color="Blue"><dt> gzFile <a name="gzdopen">gzdopen</a> (int fd, const char *mode);</font> -<dd> - <a href="#gzdopen">gzdopen</a>() associates a gzFile with the file descriptor fd. File - descriptors are obtained from calls like open, dup, creat, pipe or - fileno (in the file has been previously opened with fopen). - The mode parameter is as in <a href="#gzopen">gzopen</a>. - <p> - The next call of <a href="#gzclose">gzclose</a> on the returned gzFile will also close the - file descriptor fd, just like fclose(fdopen(fd), mode) closes the file - descriptor fd. If you want to keep fd open, use <a href="#gzdopen">gzdopen</a>(dup(fd), mode). - <p> - <a href="#gzdopen">gzdopen</a> returns NULL if there was insufficient memory to allocate - the (de)compression <a href="#state">state</a>. - <p> - -<font color="Blue"><dt> int <a name="gzsetparams">gzsetparams</a> (gzFile file, int level, int strategy);</font> -<dd> - Dynamically update the compression level or strategy. See the description - of <a href="#deflateInit2">deflateInit2</a> for the meaning of these parameters. - <p> - <a href="#gzsetparams">gzsetparams</a> returns <a href="#Z_OK">Z_OK</a> if success, or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the file was not - opened for writing. - <p> - -<font color="Blue"><dt> int <a name="gzread">gzread</a> (gzFile file, voidp buf, unsigned len);</font> -<dd> - Reads the given number of uncompressed bytes from the compressed file. - If the input file was not in gzip format, <a href="#gzread">gzread</a> copies the given number - of bytes into the buffer. - <p> - <a href="#gzread">gzread</a> returns the number of uncompressed bytes actually read (0 for - end of file, -1 for error). - <p> - -<font color="Blue"><dt> int <a name="gzwrite">gzwrite</a> (gzFile file, const voidp buf, unsigned len);</font> -<dd> - Writes the given number of uncompressed bytes into the compressed file. - <a href="#gzwrite">gzwrite</a> returns the number of uncompressed bytes actually written - (0 in case of error). - <p> - -<font color="Blue"><dt> int VA <a name="gzprintf">gzprintf</a> (gzFile file, const char *format, ...);</font> -<dd> - Converts, formats, and writes the args to the compressed file under - control of the format string, as in fprintf. <a href="#gzprintf">gzprintf</a> returns the number of - uncompressed bytes actually written (0 in case of error). - <p> - -<font color="Blue"><dt> int <a name="gzputs">gzputs</a> (gzFile file, const char *s);</font> -<dd> - Writes the given null-terminated string to the compressed file, excluding - the terminating null character. - <p> - <a href="#gzputs">gzputs</a> returns the number of characters written, or -1 in case of error. - <p> - -<font color="Blue"><dt> char * <a name="gzgets">gzgets</a> (gzFile file, char *buf, int len);</font> -<dd> - Reads bytes from the compressed file until len-1 characters are read, or - a newline character is read and transferred to buf, or an end-of-file - condition is encountered. The string is then terminated with a null - character. - <p> - <a href="#gzgets">gzgets</a> returns buf, or <a href="#Z_NULL">Z_NULL</a> in case of error. - <p> - -<font color="Blue"><dt> int <a name="gzputc">gzputc</a> (gzFile file, int c);</font> -<dd> - Writes c, converted to an unsigned char, into the compressed file. - <a href="#gzputc">gzputc</a> returns the value that was written, or -1 in case of error. - <p> - -<font color="Blue"><dt> int <a name="gzgetc">gzgetc</a> (gzFile file);</font> -<dd> - Reads one byte from the compressed file. <a href="#gzgetc">gzgetc</a> returns this byte - or -1 in case of end of file or error. - <p> - -<font color="Blue"><dt> int <a name="gzflush">gzflush</a> (gzFile file, int flush);</font> -<dd> - Flushes all pending output into the compressed file. The parameter - flush is as in the <a href="#deflate">deflate</a>() function. The return value is the zlib - error number (see function <a href="#gzerror">gzerror</a> below). <a href="#gzflush">gzflush</a> returns <a href="#Z_OK">Z_OK</a> if - the flush parameter is <a href="#Z_FINISH">Z_FINISH</a> and all output could be flushed. - <p> - <a href="#gzflush">gzflush</a> should be called only when strictly necessary because it can - degrade compression. - <p> - -<font color="Blue"><dt> z_off_t <a name="gzseek">gzseek</a> (gzFile file, z_off_t offset, int whence);</font> -<dd> - Sets the starting position for the next <a href="#gzread">gzread</a> or <a href="#gzwrite">gzwrite</a> on the - given compressed file. The offset represents a number of bytes in the - uncompressed data stream. The whence parameter is defined as in lseek(2); - the value SEEK_END is not supported. - <p> - If the file is opened for reading, this function is emulated but can be - extremely slow. If the file is opened for writing, only forward seeks are - supported ; <a href="#gzseek">gzseek</a> then compresses a sequence of zeroes up to the new - starting position. - <p> - <a href="#gzseek">gzseek</a> returns the resulting offset location as measured in bytes from - the beginning of the uncompressed stream, or -1 in case of error, in - particular if the file is opened for writing and the new starting position - would be before the current position. - <p> - -<font color="Blue"><dt> int <a name="gzrewind">gzrewind</a> (gzFile file);</font> -<dd> - Rewinds the given file. This function is supported only for reading. - <p> - <a href="#gzrewind">gzrewind</a>(file) is equivalent to (int)<a href="#gzseek">gzseek</a>(file, 0L, SEEK_SET) - <p> - -<font color="Blue"><dt> z_off_t <a name="gztell">gztell</a> (gzFile file);</font> -<dd> - Returns the starting position for the next <a href="#gzread">gzread</a> or <a href="#gzwrite">gzwrite</a> on the - given compressed file. This position represents a number of bytes in the - uncompressed data stream. - <p> - - <a href="#gztell">gztell</a>(file) is equivalent to <a href="#gzseek">gzseek</a>(file, 0L, SEEK_CUR) - <p> - -<font color="Blue"><dt> int <a name="gzeof">gzeof</a> (gzFile file);</font> -<dd> - Returns 1 when EOF has previously been detected reading the given - input stream, otherwise zero. - <p> - -<font color="Blue"><dt> int <a name="gzclose">gzclose</a> (gzFile file);</font> -<dd> - Flushes all pending output if necessary, closes the compressed file - and deallocates all the (de)compression <a href="#state">state</a>. The return value is the zlib - error number (see function <a href="#gzerror">gzerror</a> below). - <p> - -<font color="Blue"><dt> const char * <a name="gzerror">gzerror</a> (gzFile file, int *errnum);</font> -<dd> - Returns the error message for the last error which occurred on the - given compressed file. errnum is set to zlib error number. If an - error occurred in the file system and not in the compression library, - errnum is set to <a href="#Z_ERRNO">Z_ERRNO</a> and the application may consult errno - to get the exact error code. - <p> -</dl> -<hr> -<a name="Basic functions"><h2> Basic functions </h2> -<h3> Function list </h3> -<ul> -<li> const char * <a href="#zlibVersion">zlibVersion</a> (void); -<li> int <a href="#deflateInit">deflateInit</a> (<a href="#z_streamp">z_streamp</a> strm, int level); -<li> int <a href="#deflate">deflate</a> (<a href="#z_streamp">z_streamp</a> strm, int flush); -<li> int <a href="#deflateEnd">deflateEnd</a> (<a href="#z_streamp">z_streamp</a> strm); -<li> int <a href="#inflateInit">inflateInit</a> (<a href="#z_streamp">z_streamp</a> strm); -<li> int <a href="#inflate">inflate</a> (<a href="#z_streamp">z_streamp</a> strm, int flush); -<li> int <a href="#inflateEnd">inflateEnd</a> (<a href="#z_streamp">z_streamp</a> strm); -</ul> - -<h3> Function description </h3> -<dl> -<font color="Blue"><dt> const char * <a name="zlibVersion">zlibVersion</a> (void);</font> -<dd> The application can compare <a href="#zlibVersion">zlibVersion</a> and ZLIB_VERSION for consistency. - If the first character differs, the library code actually used is - not compatible with the zlib.h header file used by the application. - This check is automatically made by <a href="#deflateInit">deflateInit</a> and <a href="#inflateInit">inflateInit</a>. - <p> - -<font color="Blue"><dt> int <a name="deflateInit">deflateInit</a> (<a href="#z_streamp">z_streamp</a> strm, int level);</font> -<dd> - Initializes the internal stream <a href="#state">state</a> for compression. The fields - <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and <a href="#opaque">opaque</a> must be initialized before by the caller. - If <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> are set to <a href="#Z_NULL">Z_NULL</a>, <a href="#deflateInit">deflateInit</a> updates them to - use default allocation functions. - <p> - - The compression level must be <a href="#Z_DEFAULT_COMPRESSION">Z_DEFAULT_COMPRESSION</a>, or between 0 and 9: - 1 gives best speed, 9 gives best compression, 0 gives no compression at - all (the input data is simply copied a block at a time). - <p> - - <a href="#Z_DEFAULT_COMPRESSION">Z_DEFAULT_COMPRESSION</a> requests a default compromise between speed and - compression (currently equivalent to level 6). - <p> - - <a href="#deflateInit">deflateInit</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not - enough memory, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if level is not a valid compression level, - <a href="#Z_VERSION_ERROR">Z_VERSION_ERROR</a> if the zlib library version (<a href="#zlib_version">zlib_version</a>) is incompatible - with the version assumed by the caller (ZLIB_VERSION). - <a href="#msg">msg</a> is set to null if there is no error message. <a href="#deflateInit">deflateInit</a> does not - perform any compression: this will be done by <a href="#deflate">deflate</a>(). - <p> - -<font color="Blue"><dt> int <a name="deflate">deflate</a> (<a href="#z_streamp">z_streamp</a> strm, int flush);</font> -<dd> - <a href="#deflate">deflate</a> compresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce some - output latency (reading input without producing any output) except when - forced to flush.<p> - - The detailed semantics are as follows. <a href="#deflate">deflate</a> performs one or both of the - following actions: - - <ul> - <li> Compress more input starting at <a href="#next_in">next_in</a> and update <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a> - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a> are updated and - processing will resume at this point for the next call of <a href="#deflate">deflate</a>(). - - <li> - Provide more output starting at <a href="#next_out">next_out</a> and update <a href="#next_out">next_out</a> and <a href="#avail_out">avail_out</a> - accordingly. This action is forced if the parameter flush is non zero. - Forcing flush frequently degrades the compression ratio, so this parameter - should be set only when necessary (in interactive applications). - Some output may be provided even if flush is not set. - </ul> <p> - - Before the call of <a href="#deflate">deflate</a>(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating <a href="#avail_in">avail_in</a> or <a href="#avail_out">avail_out</a> accordingly ; <a href="#avail_out">avail_out</a> - should never be zero before the call. The application can consume the - compressed output when it wants, for example when the output buffer is full - (<a href="#avail_out">avail_out</a> == 0), or after each call of <a href="#deflate">deflate</a>(). If <a href="#deflate">deflate</a> returns <a href="#Z_OK">Z_OK</a> - and with zero <a href="#avail_out">avail_out</a>, it must be called again after making room in the - output buffer because there might be more output pending. - <p> - - If the parameter flush is set to <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a>, all pending output is - flushed to the output buffer and the output is aligned on a byte boundary, so - that the decompressor can get all input data available so far. (In particular - <a href="#avail_in">avail_in</a> is zero after the call if enough output space has been provided - before the call.) Flushing may degrade compression for some compression - algorithms and so it should be used only when necessary. - <p> - - If flush is set to <a href="#Z_FULL_FLUSH">Z_FULL_FLUSH</a>, all output is flushed as with - <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a>, and the compression <a href="#state">state</a> is reset so that decompression can - restart from this point if previous compressed data has been damaged or if - random access is desired. Using <a href="#Z_FULL_FLUSH">Z_FULL_FLUSH</a> too often can seriously degrade - the compression. - <p> - - If <a href="#deflate">deflate</a> returns with <a href="#avail_out">avail_out</a> == 0, this function must be called again - with the same value of the flush parameter and more output space (updated - <a href="#avail_out">avail_out</a>), until the flush is complete (<a href="#deflate">deflate</a> returns with non-zero - <a href="#avail_out">avail_out</a>). - <p> - - If the parameter flush is set to <a href="#Z_FINISH">Z_FINISH</a>, pending input is processed, - pending output is flushed and <a href="#deflate">deflate</a> returns with <a href="#Z_STREAM_END">Z_STREAM_END</a> if there - was enough output space ; if <a href="#deflate">deflate</a> returns with <a href="#Z_OK">Z_OK</a>, this function must be - called again with <a href="#Z_FINISH">Z_FINISH</a> and more output space (updated <a href="#avail_out">avail_out</a>) but no - more input data, until it returns with <a href="#Z_STREAM_END">Z_STREAM_END</a> or an error. After - <a href="#deflate">deflate</a> has returned <a href="#Z_STREAM_END">Z_STREAM_END</a>, the only possible operations on the - stream are <a href="#deflateReset">deflateReset</a> or <a href="#deflateEnd">deflateEnd</a>. - <p> - - <a href="#Z_FINISH">Z_FINISH</a> can be used immediately after <a href="#deflateInit">deflateInit</a> if all the compression - is to be done in a single step. In this case, <a href="#avail_out">avail_out</a> must be at least - 0.1% larger than <a href="#avail_in">avail_in</a> plus 12 bytes. If <a href="#deflate">deflate</a> does not return - <a href="#Z_STREAM_END">Z_STREAM_END</a>, then it must be called again as described above. - <p> - - <a href="#deflate">deflate</a>() sets strm-> <a href="#adler">adler</a> to the <a href="#adler32">adler32</a> checksum of all input read - so far (that is, <a href="#total_in">total_in</a> bytes). - <p> - - <a href="#deflate">deflate</a>() may update <a href="#data_type">data_type</a> if it can make a good guess about - the input data type (<a href="#Z_ASCII">Z_ASCII</a> or <a href="#Z_BINARY">Z_BINARY</a>). In doubt, the data is considered - binary. This field is only for information purposes and does not affect - the compression algorithm in any manner. - <p> - - <a href="#deflate">deflate</a>() returns <a href="#Z_OK">Z_OK</a> if some progress has been made (more input - processed or more output produced), <a href="#Z_STREAM_END">Z_STREAM_END</a> if all input has been - consumed and all output has been produced (only when flush is set to - <a href="#Z_FINISH">Z_FINISH</a>), <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the stream <a href="#state">state</a> was inconsistent (for example - if <a href="#next_in">next_in</a> or <a href="#next_out">next_out</a> was NULL), <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if no progress is possible - (for example <a href="#avail_in">avail_in</a> or <a href="#avail_out">avail_out</a> was zero). - <p> - -<font color="Blue"><dt> int <a name="deflateEnd">deflateEnd</a> (<a href="#z_streamp">z_streamp</a> strm);</font> -<dd> - All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. - <p> - - <a href="#deflateEnd">deflateEnd</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the - stream <a href="#state">state</a> was inconsistent, <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if the stream was freed - prematurely (some input or output was discarded). In the error case, - <a href="#msg">msg</a> may be set but then points to a static string (which must not be - deallocated). - <p> - -<font color="Blue"><dt> int <a name="inflateInit">inflateInit</a> (<a href="#z_streamp">z_streamp</a> strm);</font> -<dd> - Initializes the internal stream <a href="#state">state</a> for decompression. The fields - <a href="#next_in">next_in</a>, <a href="#avail_in">avail_in</a>, <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and <a href="#opaque">opaque</a> must be initialized before by - the caller. If <a href="#next_in">next_in</a> is not <a href="#Z_NULL">Z_NULL</a> and <a href="#avail_in">avail_in</a> is large enough (the exact - value depends on the compression method), <a href="#inflateInit">inflateInit</a> determines the - compression method from the zlib header and allocates all data structures - accordingly ; otherwise the allocation will be deferred to the first call of - <a href="#inflate">inflate</a>. If <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> are set to <a href="#Z_NULL">Z_NULL</a>, <a href="#inflateInit">inflateInit</a> updates them to - use default allocation functions. - <p> - - <a href="#inflateInit">inflateInit</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not enough - memory, <a href="#Z_VERSION_ERROR">Z_VERSION_ERROR</a> if the zlib library version is incompatible with the - version assumed by the caller. <a href="#msg">msg</a> is set to null if there is no error - message. <a href="#inflateInit">inflateInit</a> does not perform any decompression apart from reading - the zlib header if present: this will be done by <a href="#inflate">inflate</a>(). (So <a href="#next_in">next_in</a> and - <a href="#avail_in">avail_in</a> may be modified, but <a href="#next_out">next_out</a> and <a href="#avail_out">avail_out</a> are unchanged.) - <p> - -<font color="Blue"><dt> int <a name="inflate">inflate</a> (<a href="#z_streamp">z_streamp</a> strm, int flush);</font> -<dd> - <a href="#inflate">inflate</a> decompresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may some - introduce some output latency (reading input without producing any output) - except when forced to flush. - <p> - - The detailed semantics are as follows. <a href="#inflate">inflate</a> performs one or both of the - following actions: - - <ul> - <li> Decompress more input starting at <a href="#next_in">next_in</a> and update <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a> - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), <a href="#next_in">next_in</a> is updated and processing - will resume at this point for the next call of <a href="#inflate">inflate</a>(). - - <li> Provide more output starting at <a href="#next_out">next_out</a> and update <a href="#next_out">next_out</a> and - <a href="#avail_out">avail_out</a> accordingly. <a href="#inflate">inflate</a>() provides as much output as possible, - until there is no more input data or no more space in the output buffer - (see below about the flush parameter). - </ul> <p> - - Before the call of <a href="#inflate">inflate</a>(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating the next_* and avail_* values accordingly. - The application can consume the uncompressed output when it wants, for - example when the output buffer is full (<a href="#avail_out">avail_out</a> == 0), or after each - call of <a href="#inflate">inflate</a>(). If <a href="#inflate">inflate</a> returns <a href="#Z_OK">Z_OK</a> and with zero <a href="#avail_out">avail_out</a>, it - must be called again after making room in the output buffer because there - might be more output pending. - <p> - - If the parameter flush is set to <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a>, <a href="#inflate">inflate</a> flushes as much - output as possible to the output buffer. The flushing behavior of <a href="#inflate">inflate</a> is - not specified for values of the flush parameter other than <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a> - and <a href="#Z_FINISH">Z_FINISH</a>, but the current implementation actually flushes as much output - as possible anyway. - <p> - - <a href="#inflate">inflate</a>() should normally be called until it returns <a href="#Z_STREAM_END">Z_STREAM_END</a> or an - error. However if all decompression is to be performed in a single step - (a single call of <a href="#inflate">inflate</a>), the parameter flush should be set to - <a href="#Z_FINISH">Z_FINISH</a>. In this case all pending input is processed and all pending - output is flushed ; <a href="#avail_out">avail_out</a> must be large enough to hold all the - uncompressed data. (The size of the uncompressed data may have been saved - by the compressor for this purpose.) The next operation on this stream must - be <a href="#inflateEnd">inflateEnd</a> to deallocate the decompression <a href="#state">state</a>. The use of <a href="#Z_FINISH">Z_FINISH</a> - is never required, but can be used to inform <a href="#inflate">inflate</a> that a faster routine - may be used for the single <a href="#inflate">inflate</a>() call. - <p> - - If a preset dictionary is needed at this point (see <a href="#inflateSetDictionary">inflateSetDictionary</a> - below), <a href="#inflate">inflate</a> sets strm-<a href="#adler">adler</a> to the <a href="#adler32">adler32</a> checksum of the - dictionary chosen by the compressor and returns <a href="#Z_NEED_DICT">Z_NEED_DICT</a> ; otherwise - it sets strm-> <a href="#adler">adler</a> to the <a href="#adler32">adler32</a> checksum of all output produced - so far (that is, <a href="#total_out">total_out</a> bytes) and returns <a href="#Z_OK">Z_OK</a>, <a href="#Z_STREAM_END">Z_STREAM_END</a> or - an error code as described below. At the end of the stream, <a href="#inflate">inflate</a>() - checks that its computed <a href="#adler32">adler32</a> checksum is equal to that saved by the - compressor and returns <a href="#Z_STREAM_END">Z_STREAM_END</a> only if the checksum is correct. - <p> - - <a href="#inflate">inflate</a>() returns <a href="#Z_OK">Z_OK</a> if some progress has been made (more input processed - or more output produced), <a href="#Z_STREAM_END">Z_STREAM_END</a> if the end of the compressed data has - been reached and all uncompressed output has been produced, <a href="#Z_NEED_DICT">Z_NEED_DICT</a> if a - preset dictionary is needed at this point, <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if the input data was - corrupted (input stream not conforming to the zlib format or incorrect - <a href="#adler32">adler32</a> checksum), <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the stream structure was inconsistent - (for example if <a href="#next_in">next_in</a> or <a href="#next_out">next_out</a> was NULL), <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not - enough memory, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> if no progress is possible or if there was not - enough room in the output buffer when <a href="#Z_FINISH">Z_FINISH</a> is used. In the <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> - case, the application may then call <a href="#inflateSync">inflateSync</a> to look for a good - compression block. - <p> - -<font color="Blue"><dt> int <a name="inflateEnd">inflateEnd</a> (<a href="#z_streamp">z_streamp</a> strm);</font> -<dd> - All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. - <p> - - <a href="#inflateEnd">inflateEnd</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the stream <a href="#state">state</a> - was inconsistent. In the error case, <a href="#msg">msg</a> may be set but then points to a - static string (which must not be deallocated). -</dl> -<hr> -<a name="Advanced functions"><h2> Advanced functions </h2> - The following functions are needed only in some special applications. -<h3> Function list </h3> -<ul> -<li> int <a href="#deflateInit2">deflateInit2</a> (<a href="#z_streamp">z_streamp</a> strm, -<li> int <a href="#deflateSetDictionary">deflateSetDictionary</a> (<a href="#z_streamp">z_streamp</a> strm, const Bytef *dictionary, uInt dictLength); -<li> int <a href="#deflateCopy">deflateCopy</a> (<a href="#z_streamp">z_streamp</a> dest, <a href="#z_streamp">z_streamp</a> source); -<li> int <a href="#deflateReset">deflateReset</a> (<a href="#z_streamp">z_streamp</a> strm); -<li> int <a href="#deflateParams">deflateParams</a> (<a href="#z_streamp">z_streamp</a> strm, int level, int strategy); -<li> int <a href="#inflateInit2">inflateInit2</a> (<a href="#z_streamp">z_streamp</a> strm, int windowBits); -<li> int <a href="#inflateSetDictionary">inflateSetDictionary</a> (<a href="#z_streamp">z_streamp</a> strm, const Bytef *dictionary, uInt dictLength); -<li> int <a href="#inflateSync">inflateSync</a> (<a href="#z_streamp">z_streamp</a> strm); -<li> int <a href="#inflateReset">inflateReset</a> (<a href="#z_streamp">z_streamp</a> strm); - -</ul> -<h3> Function description </h3> -<dl> -<font color="Blue"><dt> int <a name="deflateInit2">deflateInit2</a> (<a href="#z_streamp">z_streamp</a> strm, int level, int method, int windowBits, int memLevel, int strategy);</font> - -<dd> This is another version of <a href="#deflateInit">deflateInit</a> with more compression options. The - fields <a href="#next_in">next_in</a>, <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and <a href="#opaque">opaque</a> must be initialized before by - the caller.<p> - - The method parameter is the compression method. It must be <a href="#Z_DEFLATED">Z_DEFLATED</a> in - this version of the library.<p> - - The windowBits parameter is the base two logarithm of the window size - (the size of the history buffer). It should be in the range 8..15 for this - version of the library. Larger values of this parameter result in better - compression at the expense of memory usage. The default value is 15 if - <a href="#deflateInit">deflateInit</a> is used instead.<p> - - The memLevel parameter specifies how much memory should be allocated - for the internal compression <a href="#state">state</a>. memLevel=1 uses minimum memory but - is slow and reduces compression ratio ; memLevel=9 uses maximum memory - for optimal speed. The default value is 8. See zconf.h for total memory - usage as a function of windowBits and memLevel.<p> - - The strategy parameter is used to tune the compression algorithm. Use the - value <a href="#Z_DEFAULT_STRATEGY">Z_DEFAULT_STRATEGY</a> for normal data, <a href="#Z_FILTERED">Z_FILTERED</a> for data produced by a - filter (or predictor), or <a href="#Z_HUFFMAN_ONLY">Z_HUFFMAN_ONLY</a> to force Huffman encoding only (no - string match). Filtered data consists mostly of small values with a - somewhat random distribution. In this case, the compression algorithm is - tuned to <a href="#compress">compress</a> them better. The effect of <a href="#Z_FILTERED">Z_FILTERED</a> is to force more - Huffman coding and less string matching ; it is somewhat intermediate - between Z_DEFAULT and <a href="#Z_HUFFMAN_ONLY">Z_HUFFMAN_ONLY</a>. The strategy parameter only affects - the compression ratio but not the correctness of the compressed output even - if it is not set appropriately.<p> - - <a href="#deflateInit2">deflateInit2</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not enough - memory, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if a parameter is invalid (such as an invalid - method). <a href="#msg">msg</a> is set to null if there is no error message. <a href="#deflateInit2">deflateInit2</a> does - not perform any compression: this will be done by <a href="#deflate">deflate</a>().<p> - -<font color="Blue"><dt> int <a name="deflateSetDictionary">deflateSetDictionary</a> (<a href="#z_streamp">z_streamp</a> strm, const Bytef *dictionary, uInt dictLength);</font> -<dd> - Initializes the compression dictionary from the given byte sequence - without producing any compressed output. This function must be called - immediately after <a href="#deflateInit">deflateInit</a>, <a href="#deflateInit2">deflateInit2</a> or <a href="#deflateReset">deflateReset</a>, before any - call of <a href="#deflate">deflate</a>. The compressor and decompressor must use exactly the same - dictionary (see <a href="#inflateSetDictionary">inflateSetDictionary</a>).<p> - - The dictionary should consist of strings (byte sequences) that are likely - to be encountered later in the data to be compressed, with the most commonly - used strings preferably put towards the end of the dictionary. Using a - dictionary is most useful when the data to be compressed is short and can be - predicted with good accuracy ; the data can then be compressed better than - with the default empty dictionary.<p> - - Depending on the size of the compression data structures selected by - <a href="#deflateInit">deflateInit</a> or <a href="#deflateInit2">deflateInit2</a>, a part of the dictionary may in effect be - discarded, for example if the dictionary is larger than the window size in - <a href="#deflate">deflate</a> or deflate2. Thus the strings most likely to be useful should be - put at the end of the dictionary, not at the front.<p> - - Upon return of this function, strm-> <a href="#adler">adler</a> is set to the Adler32 value - of the dictionary ; the decompressor may later use this value to determine - which dictionary has been used by the compressor. (The Adler32 value - applies to the whole dictionary even if only a subset of the dictionary is - actually used by the compressor.)<p> - - <a href="#deflateSetDictionary">deflateSetDictionary</a> returns <a href="#Z_OK">Z_OK</a> if success, or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if a - parameter is invalid (such as NULL dictionary) or the stream <a href="#state">state</a> is - inconsistent (for example if <a href="#deflate">deflate</a> has already been called for this stream - or if the compression method is bsort). <a href="#deflateSetDictionary">deflateSetDictionary</a> does not - perform any compression: this will be done by <a href="#deflate">deflate</a>().<p> - -<font color="Blue"><dt> int <a name="deflateCopy">deflateCopy</a> (<a href="#z_streamp">z_streamp</a> dest, <a href="#z_streamp">z_streamp</a> source);</font> -<dd> - Sets the destination stream as a complete copy of the source stream.<p> - - This function can be useful when several compression strategies will be - tried, for example when there are several ways of pre-processing the input - data with a filter. The streams that will be discarded should then be freed - by calling <a href="#deflateEnd">deflateEnd</a>. Note that <a href="#deflateCopy">deflateCopy</a> duplicates the internal - compression <a href="#state">state</a> which can be quite large, so this strategy is slow and - can consume lots of memory.<p> - - <a href="#deflateCopy">deflateCopy</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not - enough memory, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the source stream <a href="#state">state</a> was inconsistent - (such as <a href="#zalloc">zalloc</a> being NULL). <a href="#msg">msg</a> is left unchanged in both source and - destination.<p> - -<font color="Blue"><dt> int <a name="deflateReset">deflateReset</a> (<a href="#z_streamp">z_streamp</a> strm);</font> -<dd> This function is equivalent to <a href="#deflateEnd">deflateEnd</a> followed by <a href="#deflateInit">deflateInit</a>, - but does not free and reallocate all the internal compression <a href="#state">state</a>. - The stream will keep the same compression level and any other attributes - that may have been set by <a href="#deflateInit2">deflateInit2</a>.<p> - - <a href="#deflateReset">deflateReset</a> returns <a href="#Z_OK">Z_OK</a> if success, or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the source - stream <a href="#state">state</a> was inconsistent (such as <a href="#zalloc">zalloc</a> or <a href="#state">state</a> being NULL).<p> - -<font color="Blue"><dt> int <a name="deflateParams">deflateParams</a> (<a href="#z_streamp">z_streamp</a> strm, int level, int strategy);</font> -<dd> - Dynamically update the compression level and compression strategy. The - interpretation of level and strategy is as in <a href="#deflateInit2">deflateInit2</a>. This can be - used to switch between compression and straight copy of the input data, or - to switch to a different kind of input data requiring a different - strategy. If the compression level is changed, the input available so far - is compressed with the old level (and may be flushed); the new level will - take effect only at the next call of <a href="#deflate">deflate</a>().<p> - - Before the call of <a href="#deflateParams">deflateParams</a>, the stream <a href="#state">state</a> must be set as for - a call of <a href="#deflate">deflate</a>(), since the currently available input may have to - be compressed and flushed. In particular, strm-> <a href="#avail_out">avail_out</a> must be - non-zero.<p> - - <a href="#deflateParams">deflateParams</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the source - stream <a href="#state">state</a> was inconsistent or if a parameter was invalid, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> - if strm->avail_out was zero.<p> - -<font color="Blue"><dt> int <a name="inflateInit2">inflateInit2</a> (<a href="#z_streamp">z_streamp</a> strm, int windowBits);</font> - -<dd> This is another version of <a href="#inflateInit">inflateInit</a> with an extra parameter. The - fields <a href="#next_in">next_in</a>, <a href="#avail_in">avail_in</a>, <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and <a href="#opaque">opaque</a> must be initialized - before by the caller.<p> - - The windowBits parameter is the base two logarithm of the maximum window - size (the size of the history buffer). It should be in the range 8..15 for - this version of the library. The default value is 15 if <a href="#inflateInit">inflateInit</a> is used - instead. If a compressed stream with a larger window size is given as - input, <a href="#inflate">inflate</a>() will return with the error code <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> instead of - trying to allocate a larger window.<p> - - <a href="#inflateInit2">inflateInit2</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_MEM_ERROR">Z_MEM_ERROR</a> if there was not enough - memory, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if a parameter is invalid (such as a negative - memLevel). <a href="#msg">msg</a> is set to null if there is no error message. <a href="#inflateInit2">inflateInit2</a> - does not perform any decompression apart from reading the zlib header if - present: this will be done by <a href="#inflate">inflate</a>(). (So <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a> may be - modified, but <a href="#next_out">next_out</a> and <a href="#avail_out">avail_out</a> are unchanged.)<p> - -<font color="Blue"><dt> int <a name="inflateSetDictionary">inflateSetDictionary</a> (<a href="#z_streamp">z_streamp</a> strm, const Bytef *dictionary, uInt dictLength);</font> -<dd> - Initializes the decompression dictionary from the given uncompressed byte - sequence. This function must be called immediately after a call of <a href="#inflate">inflate</a> - if this call returned <a href="#Z_NEED_DICT">Z_NEED_DICT</a>. The dictionary chosen by the compressor - can be determined from the Adler32 value returned by this call of - <a href="#inflate">inflate</a>. The compressor and decompressor must use exactly the same - dictionary (see <a href="#deflateSetDictionary">deflateSetDictionary</a>).<p> - - <a href="#inflateSetDictionary">inflateSetDictionary</a> returns <a href="#Z_OK">Z_OK</a> if success, <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if a - parameter is invalid (such as NULL dictionary) or the stream <a href="#state">state</a> is - inconsistent, <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if the given dictionary doesn't match the - expected one (incorrect Adler32 value). <a href="#inflateSetDictionary">inflateSetDictionary</a> does not - perform any decompression: this will be done by subsequent calls of - <a href="#inflate">inflate</a>().<p> - -<font color="Blue"><dt> int <a name="inflateSync">inflateSync</a> (<a href="#z_streamp">z_streamp</a> strm);</font> - -<dd> Skips invalid compressed data until a full flush point (see above the - description of <a href="#deflate">deflate</a> with <a href="#Z_FULL_FLUSH">Z_FULL_FLUSH</a>) can be found, or until all - available input is skipped. No output is provided.<p> - - <a href="#inflateSync">inflateSync</a> returns <a href="#Z_OK">Z_OK</a> if a full flush point has been found, <a href="#Z_BUF_ERROR">Z_BUF_ERROR</a> - if no more input was provided, <a href="#Z_DATA_ERROR">Z_DATA_ERROR</a> if no flush point has been found, - or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the stream structure was inconsistent. In the success - case, the application may save the current current value of <a href="#total_in">total_in</a> which - indicates where valid compressed data was found. In the error case, the - application may repeatedly call <a href="#inflateSync">inflateSync</a>, providing more input each time, - until success or end of the input data.<p> - -<font color="Blue"><dt> int <a name="inflateReset">inflateReset</a> (<a href="#z_streamp">z_streamp</a> strm);</font> -<dd> - This function is equivalent to <a href="#inflateEnd">inflateEnd</a> followed by <a href="#inflateInit">inflateInit</a>, - but does not free and reallocate all the internal decompression <a href="#state">state</a>. - The stream will keep attributes that may have been set by <a href="#inflateInit2">inflateInit2</a>. - <p> - - <a href="#inflateReset">inflateReset</a> returns <a href="#Z_OK">Z_OK</a> if success, or <a href="#Z_STREAM_ERROR">Z_STREAM_ERROR</a> if the source - stream <a href="#state">state</a> was inconsistent (such as <a href="#zalloc">zalloc</a> or <a href="#state">state</a> being NULL). - <p> -</dl> - -<hr> -<a name="Checksum functions"><h2> Checksum functions </h2> - These functions are not related to compression but are exported - anyway because they might be useful in applications using the - compression library. -<h3> Function list </h3> -<ul> -<li> uLong <a href="#adler32">adler32</a> (uLong <a href="#adler">adler</a>, const Bytef *buf, uInt len); -<li> uLong <a href="#crc32">crc32</a> (uLong crc, const Bytef *buf, uInt len); -</ul> -<h3> Function description </h3> -<dl> -<font color="Blue"><dt> uLong <a name="adler32">adler32</a> (uLong <a href="#adler">adler</a>, const Bytef *buf, uInt len);</font> -<dd> - Update a running Adler-32 checksum with the bytes buf[0..len-1] and - return the updated checksum. If buf is NULL, this function returns - the required initial value for the checksum. - <p> - An Adler-32 checksum is almost as reliable as a CRC32 but can be computed - much faster. Usage example: - <pre> - - uLong <a href="#adler">adler</a> = <a href="#adler32">adler32</a>(0L, <a href="#Z_NULL">Z_NULL</a>, 0); - - while (read_buffer(buffer, length) != EOF) { - <a href="#adler">adler</a> = <a href="#adler32">adler32</a>(<a href="#adler">adler</a>, buffer, length); - } - if (<a href="#adler">adler</a> != original_adler) error(); - </pre> - -<font color="Blue"><dt> uLong <a name="crc32">crc32</a> (uLong crc, const Bytef *buf, uInt len);</font> -<dd> - Update a running crc with the bytes buf[0..len-1] and return the updated - crc. If buf is NULL, this function returns the required initial value - for the crc. Pre- and post-conditioning (one's complement) is performed - within this function so it shouldn't be done by the application. - Usage example: - <pre> - - uLong crc = <a href="#crc32">crc32</a>(0L, <a href="#Z_NULL">Z_NULL</a>, 0); - - while (read_buffer(buffer, length) != EOF) { - crc = <a href="#crc32">crc32</a>(crc, buffer, length); - } - if (crc != original_crc) error(); - </pre> -</dl> -<hr> -<a name="struct z_stream_s"><h2> struct z_stream_s </h2> -<font color="Blue"> -<a name="z_stream_s"> -<pre> -typedef struct z_stream_s { - Bytef *<a name="next_in">next_in</a>; /* next input byte */ - uInt <a name="avail_in">avail_in</a>; /* number of bytes available at <a href="#next_in">next_in</a> */ - uLong <a name="total_in">total_in</a>; /* total nb of input bytes read so far */ - - Bytef *<a name="next_out">next_out</a>; /* next output byte should be put there */ - uInt <a name="avail_out">avail_out</a>; /* remaining free space at <a href="#next_out">next_out</a> */ - uLong <a name="total_out">total_out</a>; /* total nb of bytes output so far */ - - char *<a name="msg">msg</a>; /* last error message, NULL if no error */ - struct internal_state FAR *<a name="state">state</a>; /* not visible by applications */ - - alloc_func <a name="zalloc">zalloc</a>; /* used to allocate the internal <a href="#state">state</a> */ - free_func <a name="zfree">zfree</a>; /* used to free the internal <a href="#state">state</a> */ - voidpf <a name="opaque">opaque</a>; /* private data object passed to <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> */ - - int <a name="data_type">data_type</a>; /* best guess about the data type: ascii or binary */ - uLong <a name="adler">adler</a>; /* <a href="#adler32">adler32</a> value of the uncompressed data */ - uLong <a name="reserved">reserved</a>; /* <a href="#reserved">reserved</a> for future use */ -} <a href="#z_stream_s">z_stream</a> ; - -typedef <a href="#z_stream_s">z_stream</a> FAR * <a name="z_streamp">z_streamp</a>; ÿ -</pre> -</font> - The application must update <a href="#next_in">next_in</a> and <a href="#avail_in">avail_in</a> when <a href="#avail_in">avail_in</a> has - dropped to zero. It must update <a href="#next_out">next_out</a> and <a href="#avail_out">avail_out</a> when <a href="#avail_out">avail_out</a> - has dropped to zero. The application must initialize <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a> and - <a href="#opaque">opaque</a> before calling the init function. All other fields are set by the - compression library and must not be updated by the application. <p> - - The <a href="#opaque">opaque</a> value provided by the application will be passed as the first - parameter for calls of <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a>. This can be useful for custom - memory management. The compression library attaches no meaning to the - <a href="#opaque">opaque</a> value. <p> - - <a href="#zalloc">zalloc</a> must return <a href="#Z_NULL">Z_NULL</a> if there is not enough memory for the object. - If zlib is used in a multi-threaded application, <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> must be - thread safe. <p> - - On 16-bit systems, the functions <a href="#zalloc">zalloc</a> and <a href="#zfree">zfree</a> must be able to allocate - exactly 65536 bytes, but will not be required to allocate more than this - if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, - pointers returned by <a href="#zalloc">zalloc</a> for objects of exactly 65536 bytes *must* - have their offset normalized to zero. The default allocation function - provided by this library ensures this (see zutil.c). To reduce memory - requirements and avoid any allocation of 64K objects, at the expense of - compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). - <p> - - The fields <a href="#total_in">total_in</a> and <a href="#total_out">total_out</a> can be used for statistics or - progress reports. After compression, <a href="#total_in">total_in</a> holds the total size of - the uncompressed data and may be saved for use in the decompressor - (particularly if the decompressor wants to decompress everything in - a single step). <p> - -<hr> -<a name="Constants"><h2> Constants </h2> -<font color="Blue"> -<pre> -#define <a name="Z_NO_FLUSH">Z_NO_FLUSH</a> 0 -#define <a name="Z_PARTIAL_FLUSH">Z_PARTIAL_FLUSH</a> 1 - /* will be removed, use <a href="#Z_SYNC_FLUSH">Z_SYNC_FLUSH</a> instead */ -#define <a name="Z_SYNC_FLUSH">Z_SYNC_FLUSH</a> 2 -#define <a name="Z_FULL_FLUSH">Z_FULL_FLUSH</a> 3 -#define <a name="Z_FINISH">Z_FINISH</a> 4 -/* Allowed flush values ; see <a href="#deflate">deflate</a>() below for details */ - -#define <a name="Z_OK">Z_OK</a> 0 -#define <a name="Z_STREAM_END">Z_STREAM_END</a> 1 -#define <a name="Z_NEED_DICT">Z_NEED_DICT</a> 2 -#define <a name="Z_ERRNO">Z_ERRNO</a> (-1) -#define <a name="Z_STREAM_ERROR">Z_STREAM_ERROR</a> (-2) -#define <a name="Z_DATA_ERROR">Z_DATA_ERROR</a> (-3) -#define <a name="Z_MEM_ERROR">Z_MEM_ERROR</a> (-4) -#define <a name="Z_BUF_ERROR">Z_BUF_ERROR</a> (-5) -#define <a name="Z_VERSION_ERROR">Z_VERSION_ERROR</a> (-6) -/* Return codes for the compression/decompression functions. Negative - * values are errors, positive values are used for special but normal events. - */ - -#define <a name="Z_NO_COMPRESSION">Z_NO_COMPRESSION</a> 0 -#define <a name="Z_BEST_SPEED">Z_BEST_SPEED</a> 1 -#define <a name="Z_BEST_COMPRESSION">Z_BEST_COMPRESSION</a> 9 -#define <a name="Z_DEFAULT_COMPRESSION">Z_DEFAULT_COMPRESSION</a> (-1) -/* compression levels */ - -#define <a name="Z_FILTERED">Z_FILTERED</a> 1 -#define <a name="Z_HUFFMAN_ONLY">Z_HUFFMAN_ONLY</a> 2 -#define <a name="Z_DEFAULT_STRATEGY">Z_DEFAULT_STRATEGY</a> 0 -/* compression strategy ; see <a href="#deflateInit2">deflateInit2</a>() below for details */ - -#define <a name="Z_BINARY">Z_BINARY</a> 0 -#define <a name="Z_ASCII">Z_ASCII</a> 1 -#define <a name="Z_UNKNOWN">Z_UNKNOWN</a> 2 -/* Possible values of the <a href="#data_type">data_type</a> field */ - -#define <a name="Z_DEFLATED">Z_DEFLATED</a> 8 -/* The <a href="#deflate">deflate</a> compression method (the only one supported in this version) */ - -#define <a name="Z_NULL">Z_NULL</a> 0 /* for initializing <a href="#zalloc">zalloc</a>, <a href="#zfree">zfree</a>, <a href="#opaque">opaque</a> */ - -#define <a name="zlib_version">zlib_version</a> <a href="#zlibVersion">zlibVersion</a>() -/* for compatibility with versions less than 1.0.2 */ -</pre> -</font> - -<hr> -<a name="Misc"><h2> Misc </h2> - <a href="#deflateInit">deflateInit</a> and <a href="#inflateInit">inflateInit</a> are macros to allow checking the zlib version - and the compiler's view of <a href="#z_stream_s">z_stream</a>. - <p> - Other functions: - <dl> - <font color="Blue"><dt> const char * <a name="zError">zError</a> (int err);</font> - <font color="Blue"><dt> int <a name="inflateSyncPoint">inflateSyncPoint</a> (<a href="#z_streamp">z_streamp</a> z);</font> - <font color="Blue"><dt> const uLongf * <a name="get_crc_table">get_crc_table</a> (void);</font> - </dl> - <hr> - <font size="-1"> - Last update: Wed Oct 13 20:42:34 1999<br> - piapi@csie.ntu.edu.tw - </font> - -</body> -</html> diff --git a/zlib/projects/README.projects b/zlib/projects/README.projects deleted file mode 100644 index 1c029e4a340..00000000000 --- a/zlib/projects/README.projects +++ /dev/null @@ -1,41 +0,0 @@ -This directory contains project files for building zlib under various -Integrated Development Environments (IDE). - -If you wish to submit a new project to this directory, you should comply -to the following requirements. Otherwise (e.g. if you wish to integrate -a custom piece of code that changes the zlib interface or its behavior), -please consider submitting the project to the contrib directory. - - -Requirements -============ - -- The project must build zlib using the source files from the official - zlib source distribution, exclusively. - -- If the project produces redistributable builds (e.g. shared objects - or DLL files), these builds must be compatible to those produced by - makefiles, if such makefiles exist in the zlib distribution. - In particular, if the project produces a DLL build for the Win32 - platform, this build must comply to the officially-ammended Win32 DLL - Application Binary Interface (ABI), described in win32/DLL_FAQ.txt. - -- The project may provide additional build targets, which depend on - 3rd-party (unofficially-supported) software, present in the contrib - directory. For example, it is possible to provide an "ASM build", - besides the officially-supported build, and have ASM source files - among its dependencies. - -- If there are significant differences between the project files created - by different versions of an IDE (e.g. Visual C++ 6.0 vs. 7.0), the name - of the project directory should contain the version number of the IDE - for which the project is intended (e.g. "visualc6" for Visual C++ 6.0, - or "visualc7" for Visual C++ 7.0 and 7.1). - - -Current projects -================ - -visualc6/ by Simon-Pierre Cadieux <methodex@methodex.ca> - and Cosmin Truta <cosmint@cs.ubbcluj.ro> - Project for Microsoft Visual C++ 6.0 diff --git a/zlib/qnx/package.qpg b/zlib/qnx/package.qpg index 8a4a47c723a..2bc63b21ace 100644 --- a/zlib/qnx/package.qpg +++ b/zlib/qnx/package.qpg @@ -25,10 +25,10 @@ <QPG:Files> <QPG:Add file="../zconf.h" install="/opt/include/" user="root:sys" permission="644"/> <QPG:Add file="../zlib.h" install="/opt/include/" user="root:sys" permission="644"/> - <QPG:Add file="../libz.so.1.2.3" install="/opt/lib/" user="root:bin" permission="644"/> - <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.3"/> - <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.3"/> - <QPG:Add file="../libz.so.1.2.3" install="/opt/lib/" component="slib"/> + <QPG:Add file="../libz.so.1.2.5" install="/opt/lib/" user="root:bin" permission="644"/> + <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.5"/> + <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.5"/> + <QPG:Add file="../libz.so.1.2.5" install="/opt/lib/" component="slib"/> </QPG:Files> <QPG:PackageFilter> @@ -63,7 +63,7 @@ </QPM:ProductDescription> <QPM:ReleaseDescription> - <QPM:ReleaseVersion>1.2.3</QPM:ReleaseVersion> + <QPM:ReleaseVersion>1.2.5</QPM:ReleaseVersion> <QPM:ReleaseUrgency>Medium</QPM:ReleaseUrgency> <QPM:ReleaseStability>Stable</QPM:ReleaseStability> <QPM:ReleaseNoteMinor></QPM:ReleaseNoteMinor> diff --git a/zlib/treebuild.xml b/zlib/treebuild.xml new file mode 100644 index 00000000000..6b8f5428d44 --- /dev/null +++ b/zlib/treebuild.xml @@ -0,0 +1,116 @@ +<?xml version="1.0" ?> +<package name="zlib" version="1.2.5"> + <library name="zlib" dlversion="1.2.5" dlname="z"> + <property name="description"> zip compression library </property> + <property name="include-target-dir" value="$(@PACKAGE/install-includedir)" /> + + <!-- fixme: not implemented yet --> + <property name="compiler/c/inline" value="yes" /> + + <include-file name="zlib.h" scope="public" mode="644" /> + <include-file name="zconf.h" scope="public" mode="644" /> + + <source name="adler32.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + </source> + <source name="compress.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + </source> + <source name="crc32.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + <depend name="crc32.h" /> + </source> + <source name="gzclose.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + <depend name="gzguts.h" /> + </source> + <source name="gzlib.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + <depend name="gzguts.h" /> + </source> + <source name="gzread.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + <depend name="gzguts.h" /> + </source> + <source name="gzwrite.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + <depend name="gzguts.h" /> + </source> + <source name="uncompr.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + </source> + <source name="deflate.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + <depend name="zutil.h" /> + <depend name="deflate.h" /> + </source> + <source name="trees.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + <depend name="zutil.h" /> + <depend name="deflate.h" /> + <depend name="trees.h" /> + </source> + <source name="zutil.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + <depend name="zutil.h" /> + </source> + <source name="inflate.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + <depend name="zutil.h" /> + <depend name="inftrees.h" /> + <depend name="inflate.h" /> + <depend name="inffast.h" /> + </source> + <source name="infback.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + <depend name="zutil.h" /> + <depend name="inftrees.h" /> + <depend name="inflate.h" /> + <depend name="inffast.h" /> + </source> + <source name="inftrees.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + <depend name="zutil.h" /> + <depend name="inftrees.h" /> + </source> + <source name="inffast.c"> + <depend name="zlib.h" /> + <depend name="zconf.h" /> + <depend name="zutil.h" /> + <depend name="inftrees.h" /> + <depend name="inflate.h" /> + <depend name="inffast.h" /> + </source> + </library> +</package> + +<!-- +CFLAGS=-O +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-g -DDEBUG +#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ +# -Wstrict-prototypes -Wmissing-prototypes + +# OBJA = +# to use the asm code: make OBJA=match.o +# +match.o: match.S + $(CPP) match.S > _match.s + $(CC) -c _match.s + mv _match.o match.o + rm -f _match.s +--> diff --git a/zlib/trees.c b/zlib/trees.c index 91eef7e1c11..049a91a0b69 100644 --- a/zlib/trees.c +++ b/zlib/trees.c @@ -1,5 +1,6 @@ /* trees.c -- output deflated data using Huffman coding - * Copyright (C) 1995-2005 Jean-loup Gailly + * Copyright (C) 1995-2010 Jean-loup Gailly + * detect_data_type() function provided freely by Cosmin Truta, 2006 * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -152,7 +153,7 @@ local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, int blcodes)); local void compress_block OF((deflate_state *s, ct_data *ltree, ct_data *dtree)); -local void set_data_type OF((deflate_state *s)); +local int detect_data_type OF((deflate_state *s)); local unsigned bi_reverse OF((unsigned value, int length)); local void bi_windup OF((deflate_state *s)); local void bi_flush OF((deflate_state *s)); @@ -203,12 +204,12 @@ local void send_bits(s, value, length) * unused bits in value. */ if (s->bi_valid > (int)Buf_size - length) { - s->bi_buf |= (value << s->bi_valid); + s->bi_buf |= (ush)value << s->bi_valid; put_short(s, s->bi_buf); s->bi_buf = (ush)value >> (Buf_size - s->bi_valid); s->bi_valid += length - Buf_size; } else { - s->bi_buf |= value << s->bi_valid; + s->bi_buf |= (ush)value << s->bi_valid; s->bi_valid += length; } } @@ -218,12 +219,12 @@ local void send_bits(s, value, length) { int len = length;\ if (s->bi_valid > (int)Buf_size - len) {\ int val = value;\ - s->bi_buf |= (val << s->bi_valid);\ + s->bi_buf |= (ush)val << s->bi_valid;\ put_short(s, s->bi_buf);\ s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ s->bi_valid += len - Buf_size;\ } else {\ - s->bi_buf |= (value) << s->bi_valid;\ + s->bi_buf |= (ush)(value) << s->bi_valid;\ s->bi_valid += len;\ }\ } @@ -250,11 +251,13 @@ local void tr_static_init() if (static_init_done) return; /* For some embedded targets, global variables are not initialized: */ +#ifdef NO_INIT_GLOBAL_POINTERS static_l_desc.static_tree = static_ltree; static_l_desc.extra_bits = extra_lbits; static_d_desc.static_tree = static_dtree; static_d_desc.extra_bits = extra_dbits; static_bl_desc.extra_bits = extra_blbits; +#endif /* Initialize the mapping length (0..255) -> length code (0..28) */ length = 0; @@ -348,13 +351,14 @@ void gen_trees_header() static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); } - fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n"); + fprintf(header, "const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {\n"); for (i = 0; i < DIST_CODE_LEN; i++) { fprintf(header, "%2u%s", _dist_code[i], SEPARATOR(i, DIST_CODE_LEN-1, 20)); } - fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); + fprintf(header, + "const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { fprintf(header, "%2u%s", _length_code[i], SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); @@ -379,7 +383,7 @@ void gen_trees_header() /* =========================================================================== * Initialize the tree data structures for a new zlib stream. */ -void _tr_init(s) +void ZLIB_INTERNAL _tr_init(s) deflate_state *s; { tr_static_init(); @@ -864,13 +868,13 @@ local void send_all_trees(s, lcodes, dcodes, blcodes) /* =========================================================================== * Send a stored block */ -void _tr_stored_block(s, buf, stored_len, eof) +void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) deflate_state *s; charf *buf; /* input block */ ulg stored_len; /* length of input block */ - int eof; /* true if this is the last block for a file */ + int last; /* one if this is the last block for a file */ { - send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */ + send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */ #ifdef DEBUG s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; s->compressed_len += (stored_len + 4) << 3; @@ -889,7 +893,7 @@ void _tr_stored_block(s, buf, stored_len, eof) * To simplify the code, we assume the worst case of last real code encoded * on one bit only. */ -void _tr_align(s) +void ZLIB_INTERNAL _tr_align(s) deflate_state *s; { send_bits(s, STATIC_TREES<<1, 3); @@ -918,11 +922,11 @@ void _tr_align(s) * Determine the best encoding for the current block: dynamic trees, static * trees or store, and output the encoded block to the zip file. */ -void _tr_flush_block(s, buf, stored_len, eof) +void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) deflate_state *s; charf *buf; /* input block, or NULL if too old */ ulg stored_len; /* length of input block */ - int eof; /* true if this is the last block for a file */ + int last; /* one if this is the last block for a file */ { ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ int max_blindex = 0; /* index of last bit length code of non zero freq */ @@ -931,8 +935,8 @@ void _tr_flush_block(s, buf, stored_len, eof) if (s->level > 0) { /* Check if the file is binary or text */ - if (stored_len > 0 && s->strm->data_type == Z_UNKNOWN) - set_data_type(s); + if (s->strm->data_type == Z_UNKNOWN) + s->strm->data_type = detect_data_type(s); /* Construct the literal and distance trees */ build_tree(s, (tree_desc *)(&(s->l_desc))); @@ -978,20 +982,20 @@ void _tr_flush_block(s, buf, stored_len, eof) * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to * transform a block into a stored block. */ - _tr_stored_block(s, buf, stored_len, eof); + _tr_stored_block(s, buf, stored_len, last); #ifdef FORCE_STATIC } else if (static_lenb >= 0) { /* force static trees */ #else } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) { #endif - send_bits(s, (STATIC_TREES<<1)+eof, 3); + send_bits(s, (STATIC_TREES<<1)+last, 3); compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree); #ifdef DEBUG s->compressed_len += 3 + s->static_len; #endif } else { - send_bits(s, (DYN_TREES<<1)+eof, 3); + send_bits(s, (DYN_TREES<<1)+last, 3); send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, max_blindex+1); compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree); @@ -1005,21 +1009,21 @@ void _tr_flush_block(s, buf, stored_len, eof) */ init_block(s); - if (eof) { + if (last) { bi_windup(s); #ifdef DEBUG s->compressed_len += 7; /* align on byte boundary */ #endif } Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, - s->compressed_len-7*eof)); + s->compressed_len-7*last)); } /* =========================================================================== * Save the match info and tally the frequency counts. Return true if * the current block must be flushed. */ -int _tr_tally (s, dist, lc) +int ZLIB_INTERNAL _tr_tally (s, dist, lc) deflate_state *s; unsigned dist; /* distance of matched string */ unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ @@ -1118,24 +1122,45 @@ local void compress_block(s, ltree, dtree) } /* =========================================================================== - * Set the data type to BINARY or TEXT, using a crude approximation: - * set it to Z_TEXT if all symbols are either printable characters (33 to 255) - * or white spaces (9 to 13, or 32); or set it to Z_BINARY otherwise. + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "black list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). * IN assertion: the fields Freq of dyn_ltree are set. */ -local void set_data_type(s) +local int detect_data_type(s) deflate_state *s; { + /* black_mask is the bit mask of black-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + unsigned long black_mask = 0xf3ffc07fUL; int n; - for (n = 0; n < 9; n++) + /* Check for non-textual ("black-listed") bytes. */ + for (n = 0; n <= 31; n++, black_mask >>= 1) + if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0)) + return Z_BINARY; + + /* Check for textual ("white-listed") bytes. */ + if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 + || s->dyn_ltree[13].Freq != 0) + return Z_TEXT; + for (n = 32; n < LITERALS; n++) if (s->dyn_ltree[n].Freq != 0) - break; - if (n == 9) - for (n = 14; n < 32; n++) - if (s->dyn_ltree[n].Freq != 0) - break; - s->strm->data_type = (n == 32) ? Z_TEXT : Z_BINARY; + return Z_TEXT; + + /* There are no "black-listed" or "white-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; } /* =========================================================================== diff --git a/zlib/trees.h b/zlib/trees.h index 72facf900f7..d35639d82a2 100644 --- a/zlib/trees.h +++ b/zlib/trees.h @@ -70,7 +70,7 @@ local const ct_data static_dtree[D_CODES] = { {{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} }; -const uch _dist_code[DIST_CODE_LEN] = { +const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = { 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, @@ -99,7 +99,7 @@ const uch _dist_code[DIST_CODE_LEN] = { 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 }; -const uch _length_code[MAX_MATCH-MIN_MATCH+1]= { +const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= { 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, diff --git a/zlib/uncompr.c b/zlib/uncompr.c index 8519d9bfaf8..8a2e1f97194 100644 --- a/zlib/uncompr.c +++ b/zlib/uncompr.c @@ -1,5 +1,5 @@ /* uncompr.c -- decompress a memory buffer - * Copyright (C) 1995-2003 Jean-loup Gailly. + * Copyright (C) 1995-2003, 2010 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -16,8 +16,6 @@ been saved previously by the compressor and transmitted to the decompressor by some mechanism outside the scope of this compression library.) Upon exit, destLen is the actual size of the compressed buffer. - This function can be used to decompress a whole file at once if the - input file is mmap'ed. uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output diff --git a/zlib/watcom/watcom_f.mak b/zlib/watcom/watcom_f.mak new file mode 100644 index 00000000000..37f4d74c19c --- /dev/null +++ b/zlib/watcom/watcom_f.mak @@ -0,0 +1,43 @@ +# Makefile for zlib +# OpenWatcom flat model +# Last updated: 28-Dec-2005 + +# To use, do "wmake -f watcom_f.mak" + +C_SOURCE = adler32.c compress.c crc32.c deflate.c & + gzclose.c gzlib.c gzread.c gzwrite.c & + infback.c inffast.c inflate.c inftrees.c & + trees.c uncompr.c zutil.c + +OBJS = adler32.obj compress.obj crc32.obj deflate.obj & + gzclose.obj gzlib.obj gzread.obj gzwrite.obj & + infback.obj inffast.obj inflate.obj inftrees.obj & + trees.obj uncompr.obj zutil.obj + +CC = wcc386 +LINKER = wcl386 +CFLAGS = -zq -mf -3r -fp3 -s -bt=dos -oilrtfm -fr=nul -wx +ZLIB_LIB = zlib_f.lib + +.C.OBJ: + $(CC) $(CFLAGS) $[@ + +all: $(ZLIB_LIB) example.exe minigzip.exe + +$(ZLIB_LIB): $(OBJS) + wlib -b -c $(ZLIB_LIB) -+adler32.obj -+compress.obj -+crc32.obj + wlib -b -c $(ZLIB_LIB) -+gzclose.obj -+gzlib.obj -+gzread.obj -+gzwrite.obj + wlib -b -c $(ZLIB_LIB) -+deflate.obj -+infback.obj + wlib -b -c $(ZLIB_LIB) -+inffast.obj -+inflate.obj -+inftrees.obj + wlib -b -c $(ZLIB_LIB) -+trees.obj -+uncompr.obj -+zutil.obj + +example.exe: $(ZLIB_LIB) example.obj + $(LINKER) -ldos32a -fe=example.exe example.obj $(ZLIB_LIB) + +minigzip.exe: $(ZLIB_LIB) minigzip.obj + $(LINKER) -ldos32a -fe=minigzip.exe minigzip.obj $(ZLIB_LIB) + +clean: .SYMBOLIC + del *.obj + del $(ZLIB_LIB) + @echo Cleaning done diff --git a/zlib/watcom/watcom_l.mak b/zlib/watcom/watcom_l.mak new file mode 100644 index 00000000000..193eed7b318 --- /dev/null +++ b/zlib/watcom/watcom_l.mak @@ -0,0 +1,43 @@ +# Makefile for zlib +# OpenWatcom large model +# Last updated: 28-Dec-2005 + +# To use, do "wmake -f watcom_l.mak" + +C_SOURCE = adler32.c compress.c crc32.c deflate.c & + gzclose.c gzlib.c gzread.c gzwrite.c & + infback.c inffast.c inflate.c inftrees.c & + trees.c uncompr.c zutil.c + +OBJS = adler32.obj compress.obj crc32.obj deflate.obj & + gzclose.obj gzlib.obj gzread.obj gzwrite.obj & + infback.obj inffast.obj inflate.obj inftrees.obj & + trees.obj uncompr.obj zutil.obj + +CC = wcc +LINKER = wcl +CFLAGS = -zq -ml -s -bt=dos -oilrtfm -fr=nul -wx +ZLIB_LIB = zlib_l.lib + +.C.OBJ: + $(CC) $(CFLAGS) $[@ + +all: $(ZLIB_LIB) example.exe minigzip.exe + +$(ZLIB_LIB): $(OBJS) + wlib -b -c $(ZLIB_LIB) -+adler32.obj -+compress.obj -+crc32.obj + wlib -b -c $(ZLIB_LIB) -+gzclose.obj -+gzlib.obj -+gzread.obj -+gzwrite.obj + wlib -b -c $(ZLIB_LIB) -+deflate.obj -+infback.obj + wlib -b -c $(ZLIB_LIB) -+inffast.obj -+inflate.obj -+inftrees.obj + wlib -b -c $(ZLIB_LIB) -+trees.obj -+uncompr.obj -+zutil.obj + +example.exe: $(ZLIB_LIB) example.obj + $(LINKER) -fe=example.exe example.obj $(ZLIB_LIB) + +minigzip.exe: $(ZLIB_LIB) minigzip.obj + $(LINKER) -fe=minigzip.exe minigzip.obj $(ZLIB_LIB) + +clean: .SYMBOLIC + del *.obj + del $(ZLIB_LIB) + @echo Cleaning done diff --git a/zlib/win32/DLL_FAQ.txt b/zlib/win32/DLL_FAQ.txt index fb18e071189..12c009018c3 100644 --- a/zlib/win32/DLL_FAQ.txt +++ b/zlib/win32/DLL_FAQ.txt @@ -16,7 +16,7 @@ in the zlib distribution, or at the following location: Pointers to a precompiled ZLIB1.DLL can be found in the zlib web site at: - http://www.zlib.org/ + http://www.zlib.net/ Applications that link to ZLIB1.DLL can rely on the following specification: @@ -350,9 +350,9 @@ in the zlib distribution, or at the following location: your build is unofficial. You should give it a different file name, and/or install it in a private directory that can be accessed by your application only, and is not visible to the - others (e.g. it's not in the SYSTEM or the SYSTEM32 directory, - and it's not in the PATH). Otherwise, your build may clash - with applications that link to the official build. + others (i.e. it's neither in the PATH, nor in the SYSTEM or + SYSTEM32 directories). Otherwise, your build may clash with + applications that link to the official build. For example, in Cygwin, zlib is linked to the Cygwin runtime CYGWIN1.DLL, and it is distributed under the name CYGZ.DLL. diff --git a/zlib/win32/Makefile.bor b/zlib/win32/Makefile.bor index b802519ca35..3981d4246b7 100644 --- a/zlib/win32/Makefile.bor +++ b/zlib/win32/Makefile.bor @@ -1,9 +1,6 @@ # Makefile for zlib # Borland C++ for Win32 # -# Updated for zlib 1.2.x by Cosmin Truta, 11-Mar-2003 -# Last updated: 28-Aug-2003 -# # Usage: # make -f win32/Makefile.bor # make -f win32/Makefile.bor LOCAL_ZLIB=-DASMV OBJA=match.obj OBJPA=+match.obj @@ -27,11 +24,11 @@ LDFLAGS = $(LOC) # variables ZLIB_LIB = zlib.lib -OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj -OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj #OBJA = -OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infback.obj -OBJP2 = +inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj #OBJPA= @@ -52,7 +49,13 @@ crc32.obj: crc32.c zlib.h zconf.h crc32.h deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h -gzio.obj: gzio.c zutil.h zlib.h zconf.h +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ inffast.h inffixed.h @@ -99,8 +102,8 @@ minigzip.exe: minigzip.obj $(ZLIB_LIB) # cleanup clean: + -del $(ZLIB_LIB) -del *.obj - -del *.lib -del *.exe -del *.tds -del zlib.bak diff --git a/zlib/win32/Makefile.emx b/zlib/win32/Makefile.emx index 7b08424cedf..4d6ab0efa66 100644 --- a/zlib/win32/Makefile.emx +++ b/zlib/win32/Makefile.emx @@ -33,8 +33,8 @@ AR=ar rcs prefix=/usr/local exec_prefix = $(prefix) -OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ - zutil.o inflate.o infback.o inftrees.o inffast.o +OBJS = adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o \ + gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o TEST_OBJS = example.o minigzip.o diff --git a/zlib/win32/Makefile.gcc b/zlib/win32/Makefile.gcc index 62a84301560..0a33bf6a704 100644 --- a/zlib/win32/Makefile.gcc +++ b/zlib/win32/Makefile.gcc @@ -27,24 +27,33 @@ STATICLIB = libz.a SHAREDLIB = zlib1.dll IMPLIB = libzdll.a +# +# Set to 1 if shared object needs to be installed +# +SHARED_MODE=0 + #LOC = -DASMV #LOC = -DDEBUG -g -CC = gcc +PREFIX = +CC = $(PREFIX)gcc CFLAGS = $(LOC) -O3 -Wall +EXTRA_CFLAGS = -DNO_VIZ AS = $(CC) ASFLAGS = $(LOC) -Wall LD = $(CC) -LDFLAGS = $(LOC) -s +LDFLAGS = $(LOC) -AR = ar +AR = $(PREFIX)ar ARFLAGS = rcs -RC = windres +RC = $(PREFIX)windres RCFLAGS = --define GCC_WINDRES +STRIP = $(PREFIX)strip + CP = cp -fp # If GNU install is available, replace $(CP) with install. INSTALL = $(CP) @@ -53,22 +62,22 @@ RM = rm -f prefix = /usr/local exec_prefix = $(prefix) -OBJS = adler32.o compress.o crc32.o deflate.o gzio.o infback.o \ - inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o +OBJS = adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o \ + gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o OBJA = -all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) example minigzip example_d minigzip_d +all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) example.exe minigzip.exe example_d.exe minigzip_d.exe -test: example minigzip +test: example.exe minigzip.exe ./example echo hello world | ./minigzip | ./minigzip -d -testdll: example_d minigzip_d +testdll: example_d.exe minigzip_d.exe ./example_d echo hello world | ./minigzip_d | ./minigzip_d -d .c.o: - $(CC) $(CFLAGS) -c -o $@ $< + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $< .S.o: $(AS) $(ASFLAGS) -c -o $@ $< @@ -79,43 +88,54 @@ $(STATICLIB): $(OBJS) $(OBJA) $(IMPLIB): $(SHAREDLIB) $(SHAREDLIB): win32/zlib.def $(OBJS) $(OBJA) zlibrc.o - dllwrap --driver-name $(CC) --def win32/zlib.def \ - --implib $(IMPLIB) -o $@ $(OBJS) $(OBJA) zlibrc.o - strip $@ + $(CC) -shared -Wl,--out-implib,$(IMPLIB) $(LDFLAGS) \ + -o $@ win32/zlib.def $(OBJS) $(OBJA) zlibrc.o + $(STRIP) $@ -example: example.o $(STATICLIB) +example.exe: example.o $(STATICLIB) $(LD) $(LDFLAGS) -o $@ example.o $(STATICLIB) + $(STRIP) $@ -minigzip: minigzip.o $(STATICLIB) +minigzip.exe: minigzip.o $(STATICLIB) $(LD) $(LDFLAGS) -o $@ minigzip.o $(STATICLIB) + $(STRIP) $@ -example_d: example.o $(IMPLIB) +example_d.exe: example.o $(IMPLIB) $(LD) $(LDFLAGS) -o $@ example.o $(IMPLIB) + $(STRIP) $@ -minigzip_d: minigzip.o $(IMPLIB) +minigzip_d.exe: minigzip.o $(IMPLIB) $(LD) $(LDFLAGS) -o $@ minigzip.o $(IMPLIB) + $(STRIP) $@ zlibrc.o: win32/zlib1.rc $(RC) $(RCFLAGS) -o $@ win32/zlib1.rc -# INCLUDE_PATH and LIBRARY_PATH must be set. +# BINARY_PATH, INCLUDE_PATH and LIBRARY_PATH must be set. .PHONY: install uninstall clean -install: zlib.h zconf.h $(LIB) - -@if not exist $(INCLUDE_PATH)/nul mkdir $(INCLUDE_PATH) - -@if not exist $(LIBRARY_PATH)/nul mkdir $(LIBRARY_PATH) +install: zlib.h zconf.h $(STATICLIB) $(IMPLIB) + -@mkdir -p $(INCLUDE_PATH) + -@mkdir -p $(LIBRARY_PATH) + -if [ "$(SHARED_MODE)" = "1" ]; then \ + mkdir -p $(BINARY_PATH); \ + $(INSTALL) $(SHAREDLIB) $(BINARY_PATH); \ + $(INSTALL) $(IMPLIB) $(LIBRARY_PATH); \ + fi -$(INSTALL) zlib.h $(INCLUDE_PATH) -$(INSTALL) zconf.h $(INCLUDE_PATH) -$(INSTALL) $(STATICLIB) $(LIBRARY_PATH) - -$(INSTALL) $(IMPLIB) $(LIBRARY_PATH) uninstall: + -if [ "$(SHARED_MODE)" = "1" ]; then \ + $(RM) $(BINARY_PATH)/$(SHAREDLIB); \ + $(RM) $(LIBRARY_PATH)/$(IMPLIB); \ + fi -$(RM) $(INCLUDE_PATH)/zlib.h -$(RM) $(INCLUDE_PATH)/zconf.h -$(RM) $(LIBRARY_PATH)/$(STATICLIB) - -$(RM) $(LIBRARY_PATH)/$(IMPLIB) clean: -$(RM) $(STATICLIB) @@ -130,7 +150,10 @@ compress.o: zlib.h zconf.h crc32.o: crc32.h zlib.h zconf.h deflate.o: deflate.h zutil.h zlib.h zconf.h example.o: zlib.h zconf.h -gzio.o: zutil.h zlib.h zconf.h +gzclose.o: zlib.h zconf.h gzguts.h +gzlib.o: zlib.h zconf.h gzguts.h +gzread.o: zlib.h zconf.h gzguts.h +gzwrite.o: zlib.h zconf.h gzguts.h inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h diff --git a/zlib/win32/Makefile.msc b/zlib/win32/Makefile.msc index 528ecaaf24e..fa10a1aa5f1 100644 --- a/zlib/win32/Makefile.msc +++ b/zlib/win32/Makefile.msc @@ -1,22 +1,17 @@ -# Makefile for zlib -- Microsoft (Visual) C -# -# Authors: -# Cosmin Truta, 11-Mar-2003 -# Christian Spieler, 19-Mar-2003 -# -# Last updated: -# Cosmin Truta, 27-Aug-2003 +# Makefile for zlib using Microsoft (Visual) C +# zlib is copyright (C) 1995-2006 Jean-loup Gailly and Mark Adler # # Usage: -# nmake -f win32/Makefile.msc (standard build) -# nmake -f win32/Makefile.msc LOC=-DFOO (nonstandard build) -# nmake -f win32/Makefile.msc LOC=-DASMV OBJA=match.obj (use ASM code) - +# nmake -f win32/Makefile.msc (standard build) +# nmake -f win32/Makefile.msc LOC=-DFOO (nonstandard build) +# nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" \ +# OBJA="inffas32.obj match686.obj" (use ASM code, x86) +# nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF" \ +# OBJA="inffasx64.obj gvmat64.obj inffas8664.c" (use ASM code, x64) # optional build flags LOC = - # variables STATICLIB = zlib.lib SHAREDLIB = zlib1.dll @@ -27,14 +22,15 @@ AS = ml LD = link AR = lib RC = rc -CFLAGS = -nologo -MD -O2 $(LOC) -ASFLAGS = -coff -LDFLAGS = -nologo -release +CFLAGS = -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" $(LOC) +WFLAGS = -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE +ASFLAGS = -coff -Zi $(LOC) +LDFLAGS = -nologo -debug -incremental:no -opt:ref ARFLAGS = -nologo RCFLAGS = /dWIN32 /r -OBJS = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj \ - inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJS = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj \ + gzwrite.obj infback.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj OBJA = @@ -49,24 +45,40 @@ $(IMPLIB): $(SHAREDLIB) $(SHAREDLIB): win32/zlib.def $(OBJS) $(OBJA) zlib1.res $(LD) $(LDFLAGS) -def:win32/zlib.def -dll -implib:$(IMPLIB) \ - -out:$@ $(OBJS) $(OBJA) zlib1.res + -out:$@ -base:0x5A4C0000 $(OBJS) $(OBJA) zlib1.res + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;2 example.exe: example.obj $(STATICLIB) $(LD) $(LDFLAGS) example.obj $(STATICLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 minigzip.exe: minigzip.obj $(STATICLIB) $(LD) $(LDFLAGS) minigzip.obj $(STATICLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 example_d.exe: example.obj $(IMPLIB) $(LD) $(LDFLAGS) -out:$@ example.obj $(IMPLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 minigzip_d.exe: minigzip.obj $(IMPLIB) $(LD) $(LDFLAGS) -out:$@ minigzip.obj $(IMPLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 .c.obj: - $(CC) -c $(CFLAGS) $< + $(CC) -c $(WFLAGS) $(CFLAGS) $< -.asm.obj: +{contrib/masmx64}.c.obj: + $(CC) -c $(WFLAGS) $(CFLAGS) $< + +{contrib/masmx64}.asm.obj: + $(AS) -c $(ASFLAGS) $< + +{contrib/masmx86}.asm.obj: $(AS) -c $(ASFLAGS) $< adler32.obj: adler32.c zlib.h zconf.h @@ -77,7 +89,13 @@ crc32.obj: crc32.c zlib.h zconf.h crc32.h deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h -gzio.obj: gzio.c zutil.h zlib.h zconf.h +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ inffast.h inffixed.h @@ -96,6 +114,17 @@ uncompr.obj: uncompr.c zlib.h zconf.h zutil.obj: zutil.c zutil.h zlib.h zconf.h +gvmat64.obj: contrib\masmx64\gvmat64.asm + +inffasx64.obj: contrib\masmx64\inffasx64.asm + +inffas8664.obj: contrib\masmx64\inffas8664.c zutil.h zlib.h zconf.h \ + inftrees.h inflate.h inffast.h + +inffas32.obj: contrib\masmx86\inffas32.asm + +match686.obj: contrib\masmx86\match686.asm + example.obj: example.c zlib.h zconf.h minigzip.obj: minigzip.c zlib.h zconf.h @@ -123,4 +152,6 @@ clean: -del *.res -del *.exp -del *.exe + -del *.pdb + -del *.manifest -del foo.gz diff --git a/zlib/win32/README-WIN32.txt b/zlib/win32/README-WIN32.txt new file mode 100644 index 00000000000..1e4c093c5e7 --- /dev/null +++ b/zlib/win32/README-WIN32.txt @@ -0,0 +1,103 @@ +ZLIB DATA COMPRESSION LIBRARY + +zlib 1.2.4 is a general purpose data compression library. All the code is +thread safe. The data format used by the zlib library is described by RFCs +(Request for Comments) 1950 to 1952 in the files +http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) +and rfc1952.txt (gzip format). + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact zlib@gzip.org). Two compiled +examples are distributed in this package, example and minigzip. The example_d +and minigzip_d flavors validate that the zlib1.dll file is working correctly. + +Questions about zlib should be sent to <zlib@gzip.org>. The zlib home page +is http://zlib.net/ . Before reporting a problem, please check this site to +verify that you have the latest version of zlib; otherwise get the latest +version and check whether the problem still exists or not. + +PLEASE read DLL_FAQ.txt, and the the zlib FAQ http://zlib.net/zlib_faq.html +before asking for help. + + +Manifest: + +The package zlib-1.2.4-win32-x86.zip contains the following files: + + README-WIN32.txt This document + ChangeLog Changes since previous zlib packages + DLL_FAQ.txt Frequently asked questions about zlib1.dll + zlib.3.pdf Documentation of this library in Adobe Acrobat format + + example.exe A statically-bound example (using zlib.lib, not the dll) + example.pdb Symbolic information for debugging example.exe + + example_d.exe A zlib1.dll bound example (using zdll.lib) + example_d.pdb Symbolic information for debugging example_d.exe + + minigzip.exe A statically-bound test program (using zlib.lib, not the dll) + minigzip.pdb Symbolic information for debugging minigzip.exe + + minigzip_d.exe A zlib1.dll bound test program (using zdll.lib) + minigzip_d.pdb Symbolic information for debugging minigzip_d.exe + + zlib.h Install these files into the compilers' INCLUDE path to + zconf.h compile programs which use zlib.lib or zdll.lib + + zdll.lib Install these files into the compilers' LIB path if linking + zdll.exp a compiled program to the zlib1.dll binary + + zlib.lib Install these files into the compilers' LIB path to link zlib + zlib.pdb into compiled programs, without zlib1.dll runtime dependency + (zlib.pdb provides debugging info to the compile time linker) + + zlib1.dll Install this binary shared library into the system PATH, or + the program's runtime directory (where the .exe resides) + zlib1.pdb Install in the same directory as zlib1.dll, in order to debug + an application crash using WinDbg or similar tools. + +All .pdb files above are entirely optional, but are very useful to a developer +attempting to diagnose program misbehavior or a crash. Many additional +important files for developers can be found in the zlib124.zip source package +available from http://zlib.net/ - review that package's README file for details. + + +Acknowledgments: + +The deflate format used by zlib was defined by Phil Katz. The deflate and +zlib specifications were written by L. Peter Deutsch. Thanks to all the +people who reported problems and suggested various improvements in zlib; they +are too numerous to cite here. + + +Copyright notice: + + (C) 1995-2010 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. + +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. diff --git a/zlib/win32/zlib.def b/zlib/win32/zlib.def index a47cbc10cae..03df8bf822a 100644 --- a/zlib/win32/zlib.def +++ b/zlib/win32/zlib.def @@ -13,12 +13,18 @@ EXPORTS deflateCopy deflateReset deflateParams + deflateTune deflateBound deflatePrime + deflateSetHeader inflateSetDictionary inflateSync inflateCopy inflateReset + inflateReset2 + inflatePrime + inflateMark + inflateGetHeader inflateBack inflateBackEnd zlibCompileFlags @@ -29,6 +35,7 @@ EXPORTS uncompress gzopen gzdopen + gzbuffer gzsetparams gzread gzwrite @@ -42,19 +49,26 @@ EXPORTS gzseek gzrewind gztell + gzoffset gzeof + gzdirect gzclose + gzclose_r + gzclose_w gzerror gzclearerr ; checksum functions adler32 crc32 + adler32_combine + crc32_combine ; various hacks, don't look :) deflateInit_ deflateInit2_ inflateInit_ inflateInit2_ inflateBackInit_ + zError inflateSyncPoint get_crc_table - zError + inflateUndermine diff --git a/zlib/win32/zlib1.rc b/zlib/win32/zlib1.rc index 99025c97422..0d1d7ffcf70 100644 --- a/zlib/win32/zlib1.rc +++ b/zlib/win32/zlib1.rc @@ -1,19 +1,20 @@ -#include <windows.h> +#include <winver.h> +#include "../zlib.h" #ifdef GCC_WINDRES VS_VERSION_INFO VERSIONINFO #else VS_VERSION_INFO VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE #endif - FILEVERSION 1,2,2,0 - PRODUCTVERSION 1,2,2,0 + FILEVERSION ZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0 + PRODUCTVERSION ZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK #ifdef _DEBUG FILEFLAGS 1 #else FILEFLAGS 0 #endif - FILEOS VOS_DOS_WINDOWS32 + FILEOS VOS__WINDOWS32 FILETYPE VFT_DLL FILESUBTYPE 0 // not used BEGIN @@ -23,13 +24,13 @@ BEGIN //language ID = U.S. English, char set = Windows, Multilingual BEGIN VALUE "FileDescription", "zlib data compression library\0" - VALUE "FileVersion", "1.2.3\0" + VALUE "FileVersion", ZLIB_VERSION "\0" VALUE "InternalName", "zlib1.dll\0" - VALUE "LegalCopyright", "(C) 1995-2004 Jean-loup Gailly & Mark Adler\0" + VALUE "LegalCopyright", "(C) 1995-2006 Jean-loup Gailly & Mark Adler\0" VALUE "OriginalFilename", "zlib1.dll\0" VALUE "ProductName", "zlib\0" - VALUE "ProductVersion", "1.2.3\0" - VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" + VALUE "ProductVersion", ZLIB_VERSION "\0" + VALUE "Comments", "For more information visit http://www.zlib.net/\0" END END BLOCK "VarFileInfo" diff --git a/zlib/zconf.h b/zlib/zconf.h index 05fc8017862..89c483eb5ac 100644 --- a/zlib/zconf.h +++ b/zlib/zconf.h @@ -1,5 +1,5 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2005 Jean-loup Gailly. + * Copyright (C) 1995-2010 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -11,52 +11,124 @@ /* * If you *really* need a unique prefix for all types and library functions, * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". */ -#ifdef Z_PREFIX -# define deflateInit_ z_deflateInit_ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ + +/* all linked symbols */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 # define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy # define deflateEnd z_deflateEnd -# define inflateInit_ z_inflateInit_ -# define inflate z_inflate -# define inflateEnd z_inflateEnd # define deflateInit2_ z_deflateInit2_ -# define deflateSetDictionary z_deflateSetDictionary -# define deflateCopy z_deflateCopy -# define deflateReset z_deflateReset +# define deflateInit_ z_deflateInit_ # define deflateParams z_deflateParams -# define deflateBound z_deflateBound # define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzgetc z_gzgetc +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzwrite z_gzwrite +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetHeader z_inflateGetHeader # define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 # define inflateSetDictionary z_inflateSetDictionary # define inflateSync z_inflateSync # define inflateSyncPoint z_inflateSyncPoint -# define inflateCopy z_inflateCopy -# define inflateReset z_inflateReset -# define inflateBack z_inflateBack -# define inflateBackEnd z_inflateBackEnd -# define compress z_compress -# define compress2 z_compress2 -# define compressBound z_compressBound +# define inflateUndermine z_inflateUndermine +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table # define uncompress z_uncompress -# define adler32 z_adler32 -# define crc32 z_crc32 -# define get_crc_table z_get_crc_table # define zError z_zError +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef # define alloc_func z_alloc_func +# define charf z_charf # define free_func z_free_func +# define gzFile z_gzFile +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp # define in_func z_in_func +# define intf z_intf # define out_func z_out_func -# define Byte z_Byte # define uInt z_uInt -# define uLong z_uLong -# define Bytef z_Bytef -# define charf z_charf -# define intf z_intf # define uIntf z_uIntf +# define uLong z_uLong # define uLongf z_uLongf -# define voidpf z_voidpf # define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + #endif #if defined(__MSDOS__) && !defined(MSDOS) @@ -284,49 +356,73 @@ typedef uLong FAR uLongf; typedef Byte *voidp; #endif -#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ -# include <sys/types.h> /* for off_t */ -# include <unistd.h> /* for SEEK_* and off_t */ +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef STDC +# include <sys/types.h> /* for off_t */ +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# include <unistd.h> /* for SEEK_* and off_t */ # ifdef VMS -# include <unixio.h> /* for off_t */ +# include <unixio.h> /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t # endif -# define z_off_t off_t #endif + #ifndef SEEK_SET # define SEEK_SET 0 /* Seek from beginning of file. */ # define SEEK_CUR 1 /* Seek from current position. */ # define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ #endif + #ifndef z_off_t # define z_off_t long #endif +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 +# define z_off64_t off64_t +#else +# define z_off64_t z_off_t +#endif + #if defined(__OS400__) # define NO_vsnprintf #endif #if defined(__MVS__) # define NO_vsnprintf -# ifdef FAR -# undef FAR -# endif #endif /* MVS linker does not support external names larger than 8 bytes */ #if defined(__MVS__) -# pragma map(deflateInit_,"DEIN") -# pragma map(deflateInit2_,"DEIN2") -# pragma map(deflateEnd,"DEEND") -# pragma map(deflateBound,"DEBND") -# pragma map(inflateInit_,"ININ") -# pragma map(inflateInit2_,"ININ2") -# pragma map(inflateEnd,"INEND") -# pragma map(inflateSync,"INSY") -# pragma map(inflateSetDictionary,"INSEDI") -# pragma map(compressBound,"CMBND") -# pragma map(inflate_table,"INTABL") -# pragma map(inflate_fast,"INFA") -# pragma map(inflate_copyright,"INCOPY") + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") #endif /* Solaris 2.5.1 doesn't have vsnprintf */ diff --git a/zlib/zconf.h.cmakein b/zlib/zconf.h.cmakein new file mode 100644 index 00000000000..a2f71b1f32e --- /dev/null +++ b/zlib/zconf.h.cmakein @@ -0,0 +1,430 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2010 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H +#cmakedefine Z_PREFIX +#cmakedefine Z_HAVE_UNISTD_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ + +/* all linked symbols */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzgetc z_gzgetc +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzwrite z_gzwrite +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetHeader z_inflateGetHeader +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# define uncompress z_uncompress +# define zError z_zError +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# define gzFile z_gzFile +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include <windows.h> + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef STDC +# include <sys/types.h> /* for off_t */ +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# include <unistd.h> /* for SEEK_* and off_t */ +# ifdef VMS +# include <unixio.h> /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +#endif + +#ifndef SEEK_SET +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 +# define z_off64_t off64_t +#else +# define z_off64_t z_off_t +#endif + +#if defined(__OS400__) +# define NO_vsnprintf +#endif + +#if defined(__MVS__) +# define NO_vsnprintf +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/zlib/zconf.in.h b/zlib/zconf.h.in index 03a9431c8be..02ce56c4313 100644 --- a/zlib/zconf.in.h +++ b/zlib/zconf.h.in @@ -1,5 +1,5 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2005 Jean-loup Gailly. + * Copyright (C) 1995-2010 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -11,52 +11,124 @@ /* * If you *really* need a unique prefix for all types and library functions, * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". */ -#ifdef Z_PREFIX -# define deflateInit_ z_deflateInit_ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ + +/* all linked symbols */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 # define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy # define deflateEnd z_deflateEnd -# define inflateInit_ z_inflateInit_ -# define inflate z_inflate -# define inflateEnd z_inflateEnd # define deflateInit2_ z_deflateInit2_ -# define deflateSetDictionary z_deflateSetDictionary -# define deflateCopy z_deflateCopy -# define deflateReset z_deflateReset +# define deflateInit_ z_deflateInit_ # define deflateParams z_deflateParams -# define deflateBound z_deflateBound # define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzgetc z_gzgetc +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzwrite z_gzwrite +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetHeader z_inflateGetHeader # define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 # define inflateSetDictionary z_inflateSetDictionary # define inflateSync z_inflateSync # define inflateSyncPoint z_inflateSyncPoint -# define inflateCopy z_inflateCopy -# define inflateReset z_inflateReset -# define inflateBack z_inflateBack -# define inflateBackEnd z_inflateBackEnd -# define compress z_compress -# define compress2 z_compress2 -# define compressBound z_compressBound +# define inflateUndermine z_inflateUndermine +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table # define uncompress z_uncompress -# define adler32 z_adler32 -# define crc32 z_crc32 -# define get_crc_table z_get_crc_table # define zError z_zError +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef # define alloc_func z_alloc_func +# define charf z_charf # define free_func z_free_func +# define gzFile z_gzFile +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp # define in_func z_in_func +# define intf z_intf # define out_func z_out_func -# define Byte z_Byte # define uInt z_uInt -# define uLong z_uLong -# define Bytef z_Bytef -# define charf z_charf -# define intf z_intf # define uIntf z_uIntf +# define uLong z_uLong # define uLongf z_uLongf -# define voidpf z_voidpf # define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + #endif #if defined(__MSDOS__) && !defined(MSDOS) @@ -284,49 +356,73 @@ typedef uLong FAR uLongf; typedef Byte *voidp; #endif -#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ -# include <sys/types.h> /* for off_t */ -# include <unistd.h> /* for SEEK_* and off_t */ +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef STDC +# include <sys/types.h> /* for off_t */ +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# include <unistd.h> /* for SEEK_* and off_t */ # ifdef VMS -# include <unixio.h> /* for off_t */ +# include <unixio.h> /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t # endif -# define z_off_t off_t #endif + #ifndef SEEK_SET # define SEEK_SET 0 /* Seek from beginning of file. */ # define SEEK_CUR 1 /* Seek from current position. */ # define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ #endif + #ifndef z_off_t # define z_off_t long #endif +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 +# define z_off64_t off64_t +#else +# define z_off64_t z_off_t +#endif + #if defined(__OS400__) # define NO_vsnprintf #endif #if defined(__MVS__) # define NO_vsnprintf -# ifdef FAR -# undef FAR -# endif #endif /* MVS linker does not support external names larger than 8 bytes */ #if defined(__MVS__) -# pragma map(deflateInit_,"DEIN") -# pragma map(deflateInit2_,"DEIN2") -# pragma map(deflateEnd,"DEEND") -# pragma map(deflateBound,"DEBND") -# pragma map(inflateInit_,"ININ") -# pragma map(inflateInit2_,"ININ2") -# pragma map(inflateEnd,"INEND") -# pragma map(inflateSync,"INSY") -# pragma map(inflateSetDictionary,"INSEDI") -# pragma map(compressBound,"CMBND") -# pragma map(inflate_table,"INTABL") -# pragma map(inflate_fast,"INFA") -# pragma map(inflate_copyright,"INCOPY") + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") #endif #endif /* ZCONF_H */ diff --git a/zlib/zlib.3 b/zlib/zlib.3 index 90b8162870f..27adc4cd10a 100644 --- a/zlib/zlib.3 +++ b/zlib/zlib.3 @@ -1,4 +1,4 @@ -.TH ZLIB 3 "18 July 2005" +.TH ZLIB 3 "19 Apr 2010" .SH NAME zlib \- compression/decompression library .SH SYNOPSIS @@ -9,15 +9,15 @@ for full description] The .I zlib library is a general purpose data compression library. -The code is thread safe. +The code is thread safe, assuming that the standard library functions +used are thread safe, such as memory allocation routines. It provides in-memory compression and decompression functions, including integrity checks of the uncompressed data. This version of the library supports only one compression method (deflation) -but other algorithms will be added later -and will have the same stream interface. +but other algorithms may be added later +with the same stream interface. .LP Compression can be done in a single step if the buffers are large enough -(for example if an input file is mmap'ed), or can be done by repeated calls of the compression function. In the latter case, the application must provide more input and/or consume the output @@ -30,7 +30,7 @@ with an interface similar to that of stdio. .LP The library does not install any signal handler. The decoder checks the consistency of the compressed data, -so the library should never crash even in case of corrupted input. +so the library should never crash even in the case of corrupted input. .LP All functions of the compression library are documented in the file .IR zlib.h . @@ -38,18 +38,19 @@ The distribution source includes examples of use of the library in the files .I example.c and -.IR minigzip.c . +.IR minigzip.c, +as well as other examples in the +.IR examples/ +directory. .LP Changes to this version are documented in the file .I ChangeLog -that accompanies the source, -and are concerned primarily with bug fixes and portability enhancements. +that accompanies the source. .LP -A Java implementation of .I zlib -is available in the Java Development Kit 1.1: +is available in Java using the java.util.zip package: .IP -http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html +http://java.sun.com/developer/technicalArticles/Programming/compression/ .LP A Perl interface to .IR zlib , @@ -57,7 +58,7 @@ written by Paul Marquess (pmqs@cpan.org), is available at CPAN (Comprehensive Perl Archive Network) sites, including: .IP -http://www.cpan.org/modules/by-module/Compress/ +http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .LP A Python interface to .IR zlib , @@ -66,14 +67,11 @@ is available in Python 1.5 and later versions: .IP http://www.python.org/doc/lib/module-zlib.html .LP -A .I zlib -binding for -.IR tcl (1), -written by Andreas Kupries (a.kupries@westend.com), -is availlable at: +is built into +.IR tcl: .IP -http://www.westend.com/~kupries/doc/trf/man/man.html +http://wiki.tcl.tk/4610 .LP An experimental package to read and write files in .zip format, written on top of @@ -81,40 +79,34 @@ written on top of by Gilles Vollant (info@winimage.com), is available at: .IP -http://www.winimage.com/zLibDll/unzip.html +http://www.winimage.com/zLibDll/minizip.html and also in the .I contrib/minizip directory of the main .I zlib -web site. +source distribution. .SH "SEE ALSO" The .I zlib -web site can be found at either of these locations: +web site can be found at: .IP -http://www.zlib.org -.br -http://www.gzip.org/zlib/ +http://zlib.net/ .LP The data format used by the zlib library is described by RFC (Request for Comments) 1950 to 1952 in the files: .IP -http://www.ietf.org/rfc/rfc1950.txt (concerning zlib format) +http://www.ietf.org/rfc/rfc1950.txt (for the zlib header and trailer format) .br -http://www.ietf.org/rfc/rfc1951.txt (concerning deflate format) +http://www.ietf.org/rfc/rfc1951.txt (for the deflate compressed data format) .br -http://www.ietf.org/rfc/rfc1952.txt (concerning gzip format) -.LP -These documents are also available in other formats from: -.IP -ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html +http://www.ietf.org/rfc/rfc1952.txt (for the gzip header and trailer format) .LP -Mark Nelson (markn@ieee.org) wrote an article about +Mark Nelson wrote an article about .I zlib for the Jan. 1997 issue of Dr. Dobb's Journal; a copy of the article is available at: .IP -http://dogma.net/markn/articles/zlibtool/zlibtool.htm +http://marknelson.us/1997/01/01/zlib-engine/ .SH "REPORTING PROBLEMS" Before reporting a problem, please check the @@ -127,14 +119,14 @@ Please read the .I zlib FAQ at: .IP -http://www.gzip.org/zlib/zlib_faq.html +http://zlib.net/zlib_faq.html .LP before asking for help. Send questions and/or comments to zlib@gzip.org, or (for the Windows DLL version) to Gilles Vollant (info@winimage.com). .SH AUTHORS -Version 1.2.3 -Copyright (C) 1995-2005 Jean-loup Gailly (jloup@gzip.org) +Version 1.2.5 +Copyright (C) 1995-2010 Jean-loup Gailly (jloup@gzip.org) and Mark Adler (madler@alumni.caltech.edu). .LP This software is provided "as-is," diff --git a/zlib/zlib.h b/zlib/zlib.h index 022817927ce..bfbba83e8ee 100644 --- a/zlib/zlib.h +++ b/zlib/zlib.h @@ -1,7 +1,7 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.3, July 18th, 2005 + version 1.2.5, April 19th, 2010 - Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -37,41 +37,44 @@ extern "C" { #endif -#define ZLIB_VERSION "1.2.3" -#define ZLIB_VERNUM 0x1230 +#define ZLIB_VERSION "1.2.5" +#define ZLIB_VERNUM 0x1250 +#define ZLIB_VER_MAJOR 1 +#define ZLIB_VER_MINOR 2 +#define ZLIB_VER_REVISION 5 +#define ZLIB_VER_SUBREVISION 0 /* - The 'zlib' compression library provides in-memory compression and - decompression functions, including integrity checks of the uncompressed - data. This version of the library supports only one compression method - (deflation) but other algorithms will be added later and will have the same - stream interface. - - Compression can be done in a single step if the buffers are large - enough (for example if an input file is mmap'ed), or can be done by - repeated calls of the compression function. In the latter case, the - application must provide more input and/or consume the output + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed data. + This version of the library supports only one compression method (deflation) + but other algorithms will be added later and will have the same stream + interface. + + Compression can be done in a single step if the buffers are large enough, + or can be done by repeated calls of the compression function. In the latter + case, the application must provide more input and/or consume the output (providing more output space) before each call. - The compressed data format used by default by the in-memory functions is + The compressed data format used by default by the in-memory functions is the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped around a deflate stream, which is itself documented in RFC 1951. - The library also supports reading and writing files in gzip (.gz) format + The library also supports reading and writing files in gzip (.gz) format with an interface similar to that of stdio using the functions that start with "gz". The gzip format is different from the zlib format. gzip is a gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. - This library can optionally read and write gzip streams in memory as well. + This library can optionally read and write gzip streams in memory as well. - The zlib format was designed to be compact and fast for use in memory + The zlib format was designed to be compact and fast for use in memory and on communications channels. The gzip format was designed for single- file compression on file systems, has a larger header than zlib to maintain directory information, and uses a different, slower check method than zlib. - The library does not install any signal handler. The decoder checks - the consistency of the compressed data, so the library should never - crash even in case of corrupted input. + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never crash + even in case of corrupted input. */ typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); @@ -126,45 +129,45 @@ typedef struct gz_header_s { typedef gz_header FAR *gz_headerp; /* - The application must update next_in and avail_in when avail_in has - dropped to zero. It must update next_out and avail_out when avail_out - has dropped to zero. The application must initialize zalloc, zfree and - opaque before calling the init function. All other fields are set by the - compression library and must not be updated by the application. - - The opaque value provided by the application will be passed as the first - parameter for calls of zalloc and zfree. This can be useful for custom - memory management. The compression library attaches no meaning to the + The application must update next_in and avail_in when avail_in has dropped + to zero. It must update next_out and avail_out when avail_out has dropped + to zero. The application must initialize zalloc, zfree and opaque before + calling the init function. All other fields are set by the compression + library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the opaque value. - zalloc must return Z_NULL if there is not enough memory for the object. + zalloc must return Z_NULL if there is not enough memory for the object. If zlib is used in a multi-threaded application, zalloc and zfree must be thread safe. - On 16-bit systems, the functions zalloc and zfree must be able to allocate - exactly 65536 bytes, but will not be required to allocate more than this - if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, - pointers returned by zalloc for objects of exactly 65536 bytes *must* - have their offset normalized to zero. The default allocation function - provided by this library ensures this (see zutil.c). To reduce memory - requirements and avoid any allocation of 64K objects, at the expense of - compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). - - The fields total_in and total_out can be used for statistics or - progress reports. After compression, total_in holds the total size of - the uncompressed data and may be saved for use in the decompressor - (particularly if the decompressor wants to decompress everything in - a single step). + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this if + the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers + returned by zalloc for objects of exactly 65536 bytes *must* have their + offset normalized to zero. The default allocation function provided by this + library ensures this (see zutil.c). To reduce memory requirements and avoid + any allocation of 64K objects, at the expense of compression ratio, compile + the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or progress + reports. After compression, total_in holds the total size of the + uncompressed data and may be saved for use in the decompressor (particularly + if the decompressor wants to decompress everything in a single step). */ /* constants */ #define Z_NO_FLUSH 0 -#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_PARTIAL_FLUSH 1 #define Z_SYNC_FLUSH 2 #define Z_FULL_FLUSH 3 #define Z_FINISH 4 #define Z_BLOCK 5 +#define Z_TREES 6 /* Allowed flush values; see deflate() and inflate() below for details */ #define Z_OK 0 @@ -176,8 +179,8 @@ typedef gz_header FAR *gz_headerp; #define Z_MEM_ERROR (-4) #define Z_BUF_ERROR (-5) #define Z_VERSION_ERROR (-6) -/* Return codes for the compression/decompression functions. Negative - * values are errors, positive values are used for special but normal events. +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. */ #define Z_NO_COMPRESSION 0 @@ -207,119 +210,140 @@ typedef gz_header FAR *gz_headerp; #define zlib_version zlibVersion() /* for compatibility with versions < 1.0.2 */ + /* basic functions */ ZEXTERN const char * ZEXPORT zlibVersion OF((void)); /* The application can compare zlibVersion and ZLIB_VERSION for consistency. - If the first character differs, the library code actually used is - not compatible with the zlib.h header file used by the application. - This check is automatically made by deflateInit and inflateInit. + If the first character differs, the library code actually used is not + compatible with the zlib.h header file used by the application. This check + is automatically made by deflateInit and inflateInit. */ /* ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); - Initializes the internal stream state for compression. The fields - zalloc, zfree and opaque must be initialized before by the caller. - If zalloc and zfree are set to Z_NULL, deflateInit updates them to - use default allocation functions. + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. If + zalloc and zfree are set to Z_NULL, deflateInit updates them to use default + allocation functions. The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: - 1 gives best speed, 9 gives best compression, 0 gives no compression at - all (the input data is simply copied a block at a time). - Z_DEFAULT_COMPRESSION requests a default compromise between speed and - compression (currently equivalent to level 6). + 1 gives best speed, 9 gives best compression, 0 gives no compression at all + (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION + requests a default compromise between speed and compression (currently + equivalent to level 6). - deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if level is not a valid compression level, + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if level is not a valid compression level, or Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible - with the version assumed by the caller (ZLIB_VERSION). - msg is set to null if there is no error message. deflateInit does not - perform any compression: this will be done by deflate(). + with the version assumed by the caller (ZLIB_VERSION). msg is set to null + if there is no error message. deflateInit does not perform any compression: + this will be done by deflate(). */ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); /* deflate compresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce some - output latency (reading input without producing any output) except when + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when forced to flush. - The detailed semantics are as follows. deflate performs one or both of the + The detailed semantics are as follows. deflate performs one or both of the following actions: - Compress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not + accordingly. If not all input can be processed (because there is not enough room in the output buffer), next_in and avail_in are updated and processing will resume at this point for the next call of deflate(). - Provide more output starting at next_out and update next_out and avail_out - accordingly. This action is forced if the parameter flush is non zero. + accordingly. This action is forced if the parameter flush is non zero. Forcing flush frequently degrades the compression ratio, so this parameter - should be set only when necessary (in interactive applications). - Some output may be provided even if flush is not set. - - Before the call of deflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating avail_in or avail_out accordingly; avail_out - should never be zero before the call. The application can consume the - compressed output when it wants, for example when the output buffer is full - (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK - and with zero avail_out, it must be called again after making room in the - output buffer because there might be more output pending. + should be set only when necessary (in interactive applications). Some + output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating avail_in or avail_out accordingly; avail_out should + never be zero before the call. The application can consume the compressed + output when it wants, for example when the output buffer is full (avail_out + == 0), or after each call of deflate(). If deflate returns Z_OK and with + zero avail_out, it must be called again after making room in the output + buffer because there might be more output pending. Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to - decide how much data to accumualte before producing output, in order to + decide how much data to accumulate before producing output, in order to maximize compression. If the parameter flush is set to Z_SYNC_FLUSH, all pending output is flushed to the output buffer and the output is aligned on a byte boundary, so - that the decompressor can get all input data available so far. (In particular - avail_in is zero after the call if enough output space has been provided - before the call.) Flushing may degrade compression for some compression - algorithms and so it should be used only when necessary. + that the decompressor can get all input data available so far. (In + particular avail_in is zero after the call if enough output space has been + provided before the call.) Flushing may degrade compression for some + compression algorithms and so it should be used only when necessary. This + completes the current deflate block and follows it with an empty stored block + that is three bits plus filler bits to the next byte, followed by four bytes + (00 00 ff ff). + + If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the + output buffer, but the output is not aligned to a byte boundary. All of the + input data so far will be available to the decompressor, as for Z_SYNC_FLUSH. + This completes the current deflate block and follows it with an empty fixed + codes block that is 10 bits long. This assures that enough bytes are output + in order for the decompressor to finish the block before the empty fixed code + block. + + If flush is set to Z_BLOCK, a deflate block is completed and emitted, as + for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to + seven bits of the current block are held to be written as the next byte after + the next deflate block is completed. In this case, the decompressor may not + be provided enough bits at this point in order to complete decompression of + the data provided so far to the compressor. It may need to wait for the next + block to be emitted. This is for advanced applications that need to control + the emission of deflate blocks. If flush is set to Z_FULL_FLUSH, all output is flushed as with Z_SYNC_FLUSH, and the compression state is reset so that decompression can restart from this point if previous compressed data has been damaged or if - random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade compression. If deflate returns with avail_out == 0, this function must be called again with the same value of the flush parameter and more output space (updated avail_out), until the flush is complete (deflate returns with non-zero - avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that avail_out is greater than six to avoid repeated flush markers due to avail_out == 0 on return. If the parameter flush is set to Z_FINISH, pending input is processed, - pending output is flushed and deflate returns with Z_STREAM_END if there - was enough output space; if deflate returns with Z_OK, this function must be + pending output is flushed and deflate returns with Z_STREAM_END if there was + enough output space; if deflate returns with Z_OK, this function must be called again with Z_FINISH and more output space (updated avail_out) but no - more input data, until it returns with Z_STREAM_END or an error. After - deflate has returned Z_STREAM_END, the only possible operations on the - stream are deflateReset or deflateEnd. + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the stream + are deflateReset or deflateEnd. Z_FINISH can be used immediately after deflateInit if all the compression - is to be done in a single step. In this case, avail_out must be at least - the value returned by deflateBound (see below). If deflate does not return + is to be done in a single step. In this case, avail_out must be at least the + value returned by deflateBound (see below). If deflate does not return Z_STREAM_END, then it must be called again as described above. deflate() sets strm->adler to the adler32 checksum of all input read so far (that is, total_in bytes). deflate() may update strm->data_type if it can make a good guess about - the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered - binary. This field is only for information purposes and does not affect - the compression algorithm in any manner. + the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered + binary. This field is only for information purposes and does not affect the + compression algorithm in any manner. deflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if all input has been consumed and all output has been produced (only when flush is set to Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example - if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible - (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not + if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and deflate() can be called again with more input and more output space to continue compressing. */ @@ -328,13 +352,13 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); /* All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. + This function discards any unprocessed input and does not flush any pending + output. deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state was inconsistent, Z_DATA_ERROR if the stream was freed - prematurely (some input or output was discarded). In the error case, - msg may be set but then points to a static string (which must not be + prematurely (some input or output was discarded). In the error case, msg + may be set but then points to a static string (which must not be deallocated). */ @@ -342,10 +366,10 @@ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); /* ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); - Initializes the internal stream state for decompression. The fields + Initializes the internal stream state for decompression. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by - the caller. If next_in is not Z_NULL and avail_in is large enough (the exact - value depends on the compression method), inflateInit determines the + the caller. If next_in is not Z_NULL and avail_in is large enough (the + exact value depends on the compression method), inflateInit determines the compression method from the zlib header and allocates all data structures accordingly; otherwise the allocation will be deferred to the first call of inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to @@ -353,95 +377,108 @@ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the - version assumed by the caller. msg is set to null if there is no error - message. inflateInit does not perform any decompression apart from reading - the zlib header if present: this will be done by inflate(). (So next_in and - avail_in may be modified, but next_out and avail_out are unchanged.) + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit() does not process any header information -- that is deferred + until inflate() is called. */ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); /* inflate decompresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce + buffer becomes empty or the output buffer becomes full. It may introduce some output latency (reading input without producing any output) except when forced to flush. - The detailed semantics are as follows. inflate performs one or both of the + The detailed semantics are as follows. inflate performs one or both of the following actions: - Decompress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in is updated and processing - will resume at this point for the next call of inflate(). + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing will + resume at this point for the next call of inflate(). - Provide more output starting at next_out and update next_out and avail_out - accordingly. inflate() provides as much output as possible, until there - is no more input data or no more space in the output buffer (see below - about the flush parameter). - - Before the call of inflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating the next_* and avail_* values accordingly. - The application can consume the uncompressed output when it wants, for - example when the output buffer is full (avail_out == 0), or after each - call of inflate(). If inflate returns Z_OK and with zero avail_out, it - must be called again after making room in the output buffer because there - might be more output pending. - - The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, - Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much - output as possible to the output buffer. Z_BLOCK requests that inflate() stop - if and when it gets to the next deflate block boundary. When decoding the - zlib or gzip format, this will cause inflate() to return immediately after - the header and before the first block. When doing a raw inflate, inflate() - will go ahead and process the first block, and will return when it gets to - the end of that block, or when it runs out of data. + accordingly. inflate() provides as much output as possible, until there is + no more input data or no more space in the output buffer (see below about + the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating the next_* and avail_* values accordingly. The + application can consume the uncompressed output when it wants, for example + when the output buffer is full (avail_out == 0), or after each call of + inflate(). If inflate returns Z_OK and with zero avail_out, it must be + called again after making room in the output buffer because there might be + more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH, + Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() + stop if and when it gets to the next deflate block boundary. When decoding + the zlib or gzip format, this will cause inflate() to return immediately + after the header and before the first block. When doing a raw inflate, + inflate() will go ahead and process the first block, and will return when it + gets to the end of that block, or when it runs out of data. The Z_BLOCK option assists in appending to or combining deflate streams. Also to assist in this, on return inflate() will set strm->data_type to the - number of unused bits in the last byte taken from strm->next_in, plus 64 - if inflate() is currently decoding the last block in the deflate stream, - plus 128 if inflate() returned immediately after decoding an end-of-block - code or decoding the complete header up to just before the first byte of the - deflate stream. The end-of-block will not be indicated until all of the - uncompressed data from that block has been written to strm->next_out. The - number of unused bits may in general be greater than seven, except when - bit 7 of data_type is set, in which case the number of unused bits will be - less than eight. + number of unused bits in the last byte taken from strm->next_in, plus 64 if + inflate() is currently decoding the last block in the deflate stream, plus + 128 if inflate() returned immediately after decoding an end-of-block code or + decoding the complete header up to just before the first byte of the deflate + stream. The end-of-block will not be indicated until all of the uncompressed + data from that block has been written to strm->next_out. The number of + unused bits may in general be greater than seven, except when bit 7 of + data_type is set, in which case the number of unused bits will be less than + eight. data_type is set as noted here every time inflate() returns for all + flush options, and so can be used to determine the amount of currently + consumed input in bits. + + The Z_TREES option behaves as Z_BLOCK does, but it also returns when the + end of each deflate block header is reached, before any actual data in that + block is decoded. This allows the caller to determine the length of the + deflate block header for later use in random access within a deflate block. + 256 is added to the value of strm->data_type when inflate() returns + immediately after reaching the end of the deflate block header. inflate() should normally be called until it returns Z_STREAM_END or an - error. However if all decompression is to be performed in a single step - (a single call of inflate), the parameter flush should be set to - Z_FINISH. In this case all pending input is processed and all pending - output is flushed; avail_out must be large enough to hold all the - uncompressed data. (The size of the uncompressed data may have been saved - by the compressor for this purpose.) The next operation on this stream must - be inflateEnd to deallocate the decompression state. The use of Z_FINISH - is never required, but can be used to inform inflate that a faster approach - may be used for the single inflate() call. + error. However if all decompression is to be performed in a single step (a + single call of inflate), the parameter flush should be set to Z_FINISH. In + this case all pending input is processed and all pending output is flushed; + avail_out must be large enough to hold all the uncompressed data. (The size + of the uncompressed data may have been saved by the compressor for this + purpose.) The next operation on this stream must be inflateEnd to deallocate + the decompression state. The use of Z_FINISH is never required, but can be + used to inform inflate that a faster approach may be used for the single + inflate() call. In this implementation, inflate() always flushes as much output as possible to the output buffer, and always uses the faster approach on the - first call. So the only effect of the flush parameter in this implementation + first call. So the only effect of the flush parameter in this implementation is on the return value of inflate(), as noted below, or when it returns early - because Z_BLOCK is used. + because Z_BLOCK or Z_TREES is used. If a preset dictionary is needed after this call (see inflateSetDictionary below), inflate sets strm->adler to the adler32 checksum of the dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise it sets strm->adler to the adler32 checksum of all output produced so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described - below. At the end of the stream, inflate() checks that its computed adler32 + below. At the end of the stream, inflate() checks that its computed adler32 checksum is equal to that saved by the compressor and returns Z_STREAM_END only if the checksum is correct. - inflate() will decompress and check either zlib-wrapped or gzip-wrapped - deflate data. The header type is detected automatically. Any information - contained in the gzip header is not retained, so applications that need that - information should instead use raw inflate, see inflateInit2() below, or - inflateBack() and perform their own processing of the gzip header and - trailer. + inflate() can decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically, if requested when + initializing with inflateInit2(). Any information contained in the gzip + header is not retained, so applications that need that information should + instead use raw inflate, see inflateInit2() below, or inflateBack() and + perform their own processing of the gzip header and trailer. inflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if the end of the compressed data has @@ -449,27 +486,28 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); preset dictionary is needed at this point, Z_DATA_ERROR if the input data was corrupted (input stream not conforming to the zlib format or incorrect check value), Z_STREAM_ERROR if the stream structure was inconsistent (for example - if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, + next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if no progress is possible or if there was not enough room in the - output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and inflate() can be called again with more input and more output space to - continue decompressing. If Z_DATA_ERROR is returned, the application may then - call inflateSync() to look for a good compression block if a partial recovery - of the data is desired. + continue decompressing. If Z_DATA_ERROR is returned, the application may + then call inflateSync() to look for a good compression block if a partial + recovery of the data is desired. */ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); /* All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. + This function discards any unprocessed input and does not flush any pending + output. inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state - was inconsistent. In the error case, msg may be set but then points to a + was inconsistent. In the error case, msg may be set but then points to a static string (which must not be deallocated). */ + /* Advanced functions */ /* @@ -484,55 +522,57 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, int memLevel, int strategy)); - This is another version of deflateInit with more compression options. The - fields next_in, zalloc, zfree and opaque must be initialized before by - the caller. + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by the + caller. - The method parameter is the compression method. It must be Z_DEFLATED in + The method parameter is the compression method. It must be Z_DEFLATED in this version of the library. The windowBits parameter is the base two logarithm of the window size - (the size of the history buffer). It should be in the range 8..15 for this - version of the library. Larger values of this parameter result in better - compression at the expense of memory usage. The default value is 15 if + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if deflateInit is used instead. - windowBits can also be -8..-15 for raw deflate. In this case, -windowBits - determines the window size. deflate() will then generate raw deflate data + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data with no zlib header or trailer, and will not compute an adler32 check value. - windowBits can also be greater than 15 for optional gzip encoding. Add + windowBits can also be greater than 15 for optional gzip encoding. Add 16 to windowBits to write a simple gzip header and trailer around the - compressed data instead of a zlib wrapper. The gzip header will have no - file name, no extra data, no comment, no modification time (set to zero), - no header crc, and the operating system will be set to 255 (unknown). If a + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), no + header crc, and the operating system will be set to 255 (unknown). If a gzip stream is being written, strm->adler is a crc32 instead of an adler32. The memLevel parameter specifies how much memory should be allocated - for the internal compression state. memLevel=1 uses minimum memory but - is slow and reduces compression ratio; memLevel=9 uses maximum memory - for optimal speed. The default value is 8. See zconf.h for total memory - usage as a function of windowBits and memLevel. + for the internal compression state. memLevel=1 uses minimum memory but is + slow and reduces compression ratio; memLevel=9 uses maximum memory for + optimal speed. The default value is 8. See zconf.h for total memory usage + as a function of windowBits and memLevel. - The strategy parameter is used to tune the compression algorithm. Use the + The strategy parameter is used to tune the compression algorithm. Use the value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no string match), or Z_RLE to limit match distances to one (run-length - encoding). Filtered data consists mostly of small values with a somewhat - random distribution. In this case, the compression algorithm is tuned to - compress them better. The effect of Z_FILTERED is to force more Huffman + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman coding and less string matching; it is somewhat intermediate between - Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as - Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy - parameter only affects the compression ratio but not the correctness of the - compressed output even if it is not set appropriately. Z_FIXED prevents the - use of dynamic Huffman codes, allowing for a simpler decoder for special - applications. - - deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid - method). msg is set to null if there is no error message. deflateInit2 does - not perform any compression: this will be done by deflate(). + Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as + fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The + strategy parameter only affects the compression ratio but not the + correctness of the compressed output even if it is not set appropriately. + Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler + decoder for special applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid + method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is + incompatible with the version assumed by the caller (ZLIB_VERSION). msg is + set to null if there is no error message. deflateInit2 does not perform any + compression: this will be done by deflate(). */ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, @@ -540,37 +580,37 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, uInt dictLength)); /* Initializes the compression dictionary from the given byte sequence - without producing any compressed output. This function must be called - immediately after deflateInit, deflateInit2 or deflateReset, before any - call of deflate. The compressor and decompressor must use exactly the same + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any call + of deflate. The compressor and decompressor must use exactly the same dictionary (see inflateSetDictionary). The dictionary should consist of strings (byte sequences) that are likely to be encountered later in the data to be compressed, with the most commonly - used strings preferably put towards the end of the dictionary. Using a + used strings preferably put towards the end of the dictionary. Using a dictionary is most useful when the data to be compressed is short and can be predicted with good accuracy; the data can then be compressed better than with the default empty dictionary. Depending on the size of the compression data structures selected by deflateInit or deflateInit2, a part of the dictionary may in effect be - discarded, for example if the dictionary is larger than the window size in - deflate or deflate2. Thus the strings most likely to be useful should be - put at the end of the dictionary, not at the front. In addition, the - current implementation of deflate will use at most the window size minus - 262 bytes of the provided dictionary. + discarded, for example if the dictionary is larger than the window size + provided in deflateInit or deflateInit2. Thus the strings most likely to be + useful should be put at the end of the dictionary, not at the front. In + addition, the current implementation of deflate will use at most the window + size minus 262 bytes of the provided dictionary. Upon return of this function, strm->adler is set to the adler32 value of the dictionary; the decompressor may later use this value to determine - which dictionary has been used by the compressor. (The adler32 value + which dictionary has been used by the compressor. (The adler32 value applies to the whole dictionary even if only a subset of the dictionary is actually used by the compressor.) If a raw deflate was requested, then the adler32 value is not computed and strm->adler is not set. deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is inconsistent (for example if deflate has already been called for this stream - or if the compression method is bsort). deflateSetDictionary does not + or if the compression method is bsort). deflateSetDictionary does not perform any compression: this will be done by deflate(). */ @@ -581,26 +621,26 @@ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, This function can be useful when several compression strategies will be tried, for example when there are several ways of pre-processing the input - data with a filter. The streams that will be discarded should then be freed + data with a filter. The streams that will be discarded should then be freed by calling deflateEnd. Note that deflateCopy duplicates the internal - compression state which can be quite large, so this strategy is slow and - can consume lots of memory. + compression state which can be quite large, so this strategy is slow and can + consume lots of memory. deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and + (such as zalloc being Z_NULL). msg is left unchanged in both source and destination. */ ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); /* This function is equivalent to deflateEnd followed by deflateInit, - but does not free and reallocate all the internal compression state. - The stream will keep the same compression level and any other attributes - that may have been set by deflateInit2. + but does not free and reallocate all the internal compression state. The + stream will keep the same compression level and any other attributes that + may have been set by deflateInit2. - deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). */ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, @@ -610,18 +650,18 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, Dynamically update the compression level and compression strategy. The interpretation of level and strategy is as in deflateInit2. This can be used to switch between compression and straight copy of the input data, or - to switch to a different kind of input data requiring a different - strategy. If the compression level is changed, the input available so far - is compressed with the old level (and may be flushed); the new level will - take effect only at the next call of deflate(). + to switch to a different kind of input data requiring a different strategy. + If the compression level is changed, the input available so far is + compressed with the old level (and may be flushed); the new level will take + effect only at the next call of deflate(). Before the call of deflateParams, the stream state must be set as for - a call of deflate(), since the currently available input may have to - be compressed and flushed. In particular, strm->avail_out must be non-zero. + a call of deflate(), since the currently available input may have to be + compressed and flushed. In particular, strm->avail_out must be non-zero. deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source - stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR - if strm->avail_out was zero. + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if + strm->avail_out was zero. */ ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, @@ -645,9 +685,10 @@ ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, uLong sourceLen)); /* deflateBound() returns an upper bound on the compressed size after - deflation of sourceLen bytes. It must be called after deflateInit() - or deflateInit2(). This would be used to allocate an output buffer - for deflation in a single pass, and so would be called before deflate(). + deflation of sourceLen bytes. It must be called after deflateInit() or + deflateInit2(), and after deflateSetHeader(), if used. This would be used + to allocate an output buffer for deflation in a single pass, and so would be + called before deflate(). */ ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, @@ -655,21 +696,21 @@ ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, int value)); /* deflatePrime() inserts bits in the deflate output stream. The intent - is that this function is used to start off the deflate output with the - bits leftover from a previous deflate stream when appending to it. As such, - this function can only be used for raw deflate, and must be used before the - first deflate() call after a deflateInit2() or deflateReset(). bits must be - less than or equal to 16, and that many of the least significant bits of - value will be inserted in the output. - - deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + is that this function is used to start off the deflate output with the bits + leftover from a previous deflate stream when appending to it. As such, this + function can only be used for raw deflate, and must be used before the first + deflate() call after a deflateInit2() or deflateReset(). bits must be less + than or equal to 16, and that many of the least significant bits of value + will be inserted in the output. + + deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, gz_headerp head)); /* - deflateSetHeader() provides gzip header information for when a gzip + deflateSetHeader() provides gzip header information for when a gzip stream is requested by deflateInit2(). deflateSetHeader() may be called after deflateInit2() or deflateReset() and before the first call of deflate(). The text, time, os, extra field, name, and comment information @@ -682,11 +723,11 @@ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, 1.3.x) do not support header crc's, and will report that it is a "multi-part gzip file" and give up. - If deflateSetHeader is not used, the default gzip header has text false, + If deflateSetHeader is not used, the default gzip header has text false, the time set to zero, and os set to 255, with no extra, name, or comment fields. The gzip header is returned to the default state by deflateReset(). - deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ @@ -694,43 +735,50 @@ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, int windowBits)); - This is another version of inflateInit with an extra parameter. The + This is another version of inflateInit with an extra parameter. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by the caller. The windowBits parameter is the base two logarithm of the maximum window size (the size of the history buffer). It should be in the range 8..15 for - this version of the library. The default value is 15 if inflateInit is used - instead. windowBits must be greater than or equal to the windowBits value + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value provided to deflateInit2() while compressing, or it must be equal to 15 if - deflateInit2() was not used. If a compressed stream with a larger window + deflateInit2() was not used. If a compressed stream with a larger window size is given as input, inflate() will return with the error code Z_DATA_ERROR instead of trying to allocate a larger window. - windowBits can also be -8..-15 for raw inflate. In this case, -windowBits - determines the window size. inflate() will then process raw deflate data, + windowBits can also be zero to request that inflate use the window size in + the zlib header of the compressed stream. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, not looking for a zlib or gzip header, not generating a check value, and not - looking for any check values for comparison at the end of the stream. This + looking for any check values for comparison at the end of the stream. This is for use with other formats that use the deflate compressed data format - such as zip. Those formats provide their own check values. If a custom + such as zip. Those formats provide their own check values. If a custom format is developed using the raw deflate format for compressed data, it is recommended that a check value such as an adler32 or a crc32 be applied to the uncompressed data as is done in the zlib, gzip, and zip formats. For - most applications, the zlib format should be used as is. Note that comments + most applications, the zlib format should be used as is. Note that comments above on the use in deflateInit2() applies to the magnitude of windowBits. - windowBits can also be greater than 15 for optional gzip decoding. Add + windowBits can also be greater than 15 for optional gzip decoding. Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection, or add 16 to decode only the gzip format (the zlib format will - return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is - a crc32 instead of an adler32. + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a + crc32 instead of an adler32. inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg - is set to null if there is no error message. inflateInit2 does not perform - any decompression apart from reading the zlib header if present: this will - be done by inflate(). (So next_in and avail_in may be modified, but next_out - and avail_out are unchanged.) + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit2 does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit2() does not process any header information -- that is + deferred until inflate() is called. */ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, @@ -738,8 +786,8 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, uInt dictLength)); /* Initializes the decompression dictionary from the given uncompressed byte - sequence. This function must be called immediately after a call of inflate, - if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor can be determined from the adler32 value returned by that call of inflate. The compressor and decompressor must use exactly the same dictionary (see deflateSetDictionary). For raw inflate, this function can be called @@ -748,26 +796,26 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, dictionary that was used for compression is provided. inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the - expected one (incorrect adler32 value). inflateSetDictionary does not + expected one (incorrect adler32 value). inflateSetDictionary does not perform any decompression: this will be done by subsequent calls of inflate(). */ ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); /* - Skips invalid compressed data until a full flush point (see above the - description of deflate with Z_FULL_FLUSH) can be found, or until all - available input is skipped. No output is provided. - - inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR - if no more input was provided, Z_DATA_ERROR if no flush point has been found, - or Z_STREAM_ERROR if the stream structure was inconsistent. In the success - case, the application may save the current current value of total_in which - indicates where valid compressed data was found. In the error case, the - application may repeatedly call inflateSync, providing more input each time, - until success or end of the input data. + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been + found, or Z_STREAM_ERROR if the stream structure was inconsistent. In the + success case, the application may save the current current value of total_in + which indicates where valid compressed data was found. In the error case, + the application may repeatedly call inflateSync, providing more input each + time, until success or end of the input data. */ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, @@ -782,18 +830,30 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and + (such as zalloc being Z_NULL). msg is left unchanged in both source and destination. */ ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); /* This function is equivalent to inflateEnd followed by inflateInit, - but does not free and reallocate all the internal decompression state. - The stream will keep attributes that may have been set by inflateInit2. + but does not free and reallocate all the internal decompression state. The + stream will keep attributes that may have been set by inflateInit2. - inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, + int windowBits)); +/* + This function is the same as inflateReset, but it also permits changing + the wrap and window size requests. The windowBits parameter is interpreted + the same as it is for inflateInit2. + + inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL), or if + the windowBits parameter is invalid. */ ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, @@ -801,54 +861,87 @@ ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, int value)); /* This function inserts bits in the inflate input stream. The intent is - that this function is used to start inflating at a bit position in the - middle of a byte. The provided bits will be used before any bytes are used - from next_in. This function should only be used with raw inflate, and - should be used before the first inflate() call after inflateInit2() or - inflateReset(). bits must be less than or equal to 16, and that many of the - least significant bits of value will be inserted in the input. - - inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + If bits is negative, then the input stream bit buffer is emptied. Then + inflatePrime() can be called again to put bits in the buffer. This is used + to clear out bits leftover after feeding inflate a block description prior + to feeding inflate codes. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ +ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); +/* + This function returns two values, one in the lower 16 bits of the return + value, and the other in the remaining upper bits, obtained by shifting the + return value down 16 bits. If the upper value is -1 and the lower value is + zero, then inflate() is currently decoding information outside of a block. + If the upper value is -1 and the lower value is non-zero, then inflate is in + the middle of a stored block, with the lower value equaling the number of + bytes from the input remaining to copy. If the upper value is not -1, then + it is the number of bits back from the current bit position in the input of + the code (literal or length/distance pair) currently being processed. In + that case the lower value is the number of bytes already emitted for that + code. + + A code is being processed if inflate is waiting for more input to complete + decoding of the code, or if it has completed decoding but is waiting for + more output space to write the literal or match data. + + inflateMark() is used to mark locations in the input data for random + access, which may be at bit positions, and to note those cases where the + output of a code may span boundaries of random access blocks. The current + location in the input stream can be determined from avail_in and data_type + as noted in the description for the Z_BLOCK flush parameter for inflate. + + inflateMark returns the value noted above or -1 << 16 if the provided + source stream state was inconsistent. +*/ + ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, gz_headerp head)); /* - inflateGetHeader() requests that gzip header information be stored in the + inflateGetHeader() requests that gzip header information be stored in the provided gz_header structure. inflateGetHeader() may be called after inflateInit2() or inflateReset(), and before the first call of inflate(). As inflate() processes the gzip stream, head->done is zero until the header is completed, at which time head->done is set to one. If a zlib stream is being decoded, then head->done is set to -1 to indicate that there will be - no gzip header information forthcoming. Note that Z_BLOCK can be used to - force inflate() to return immediately after header processing is complete - and before any actual data is decompressed. + no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be + used to force inflate() to return immediately after header processing is + complete and before any actual data is decompressed. - The text, time, xflags, and os fields are filled in with the gzip header + The text, time, xflags, and os fields are filled in with the gzip header contents. hcrc is set to true if there is a header CRC. (The header CRC - was valid if done is set to one.) If extra is not Z_NULL, then extra_max + was valid if done is set to one.) If extra is not Z_NULL, then extra_max contains the maximum number of bytes to write to extra. Once done is true, extra_len contains the actual extra field length, and extra contains the extra field, or that field truncated if extra_max is less than extra_len. If name is not Z_NULL, then up to name_max characters are written there, terminated with a zero unless the length is greater than name_max. If comment is not Z_NULL, then up to comm_max characters are written there, - terminated with a zero unless the length is greater than comm_max. When - any of extra, name, or comment are not Z_NULL and the respective field is - not present in the header, then that field is set to Z_NULL to signal its + terminated with a zero unless the length is greater than comm_max. When any + of extra, name, or comment are not Z_NULL and the respective field is not + present in the header, then that field is set to Z_NULL to signal its absence. This allows the use of deflateSetHeader() with the returned structure to duplicate the header. However if those fields are set to allocated memory, then the application will need to save those pointers elsewhere so that they can be eventually freed. - If inflateGetHeader is not used, then the header information is simply + If inflateGetHeader is not used, then the header information is simply discarded. The header is always checked for validity, including the header CRC if present. inflateReset() will reset the process to discard the header information. The application would need to call inflateGetHeader() again to retrieve the header from the next gzip stream. - inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ @@ -869,9 +962,9 @@ ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, See inflateBack() for the usage of these routines. inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of - the paramaters are invalid, Z_MEM_ERROR if the internal state could not - be allocated, or Z_VERSION_ERROR if the version of the library does not - match the version of the header file. + the paramaters are invalid, Z_MEM_ERROR if the internal state could not be + allocated, or Z_VERSION_ERROR if the version of the library does not match + the version of the header file. */ typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); @@ -891,15 +984,15 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, inflateBackInit() must be called first to allocate the internal state and to initialize the state with the user-provided window buffer. inflateBack() may then be used multiple times to inflate a complete, raw - deflate stream with each call. inflateBackEnd() is then called to free - the allocated state. + deflate stream with each call. inflateBackEnd() is then called to free the + allocated state. A raw deflate stream is one with no zlib or gzip header or trailer. This routine would normally be used in a utility that reads zip or gzip files and writes out uncompressed files. The utility would decode the - header and process the trailer on its own, hence this routine expects - only the raw deflate stream to decompress. This is different from the - normal behavior of inflate(), which expects either a zlib or gzip header and + header and process the trailer on its own, hence this routine expects only + the raw deflate stream to decompress. This is different from the normal + behavior of inflate(), which expects either a zlib or gzip header and trailer around the deflate stream. inflateBack() uses two subroutines supplied by the caller that are then @@ -925,7 +1018,7 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in must also be initialized, and then if strm->avail_in is not zero, input will - initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. The in_desc and out_desc parameters of inflateBack() is passed as the first parameter of in() and out() respectively when they are called. These @@ -935,15 +1028,15 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, On return, inflateBack() will set strm->next_in and strm->avail_in to pass back any unused input that was provided by the last in() call. The return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR - if in() or out() returned an error, Z_DATA_ERROR if there was a format - error in the deflate stream (in which case strm->msg is set to indicate the - nature of the error), or Z_STREAM_ERROR if the stream was not properly - initialized. In the case of Z_BUF_ERROR, an input or output error can be - distinguished using strm->next_in which will be Z_NULL only if in() returned - an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to - out() returning non-zero. (in() will always be called before out(), so - strm->next_in is assured to be defined if out() returns non-zero.) Note - that inflateBack() cannot return Z_OK. + if in() or out() returned an error, Z_DATA_ERROR if there was a format error + in the deflate stream (in which case strm->msg is set to indicate the nature + of the error), or Z_STREAM_ERROR if the stream was not properly initialized. + In the case of Z_BUF_ERROR, an input or output error can be distinguished + using strm->next_in which will be Z_NULL only if in() returned an error. If + strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning + non-zero. (in() will always be called before out(), so strm->next_in is + assured to be defined if out() returns non-zero.) Note that inflateBack() + cannot return Z_OK. */ ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); @@ -999,23 +1092,22 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); /* utility functions */ /* - The following utility functions are implemented on top of the - basic stream-oriented functions. To simplify the interface, some - default options are assumed (compression level and memory usage, - standard memory allocation functions). The source code of these - utility functions can easily be modified if you need special options. + The following utility functions are implemented on top of the basic + stream-oriented functions. To simplify the interface, some default options + are assumed (compression level and memory usage, standard memory allocation + functions). The source code of these utility functions can be modified if + you need special options. */ ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); /* Compresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be at least the value returned - by compressBound(sourceLen). Upon exit, destLen is the actual size of the + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the compressed buffer. - This function can be used to compress a whole file at once if the - input file is mmap'ed. + compress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer. @@ -1025,11 +1117,11 @@ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level)); /* - Compresses the source buffer into the destination buffer. The level + Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte - length of the source buffer. Upon entry, destLen is the total size of the + length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least the value returned by - compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressBound(sourceLen). Upon exit, destLen is the actual size of the compressed buffer. compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough @@ -1040,22 +1132,20 @@ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); /* compressBound() returns an upper bound on the compressed size after - compress() or compress2() on sourceLen bytes. It would be used before - a compress() or compress2() call to allocate the destination buffer. + compress() or compress2() on sourceLen bytes. It would be used before a + compress() or compress2() call to allocate the destination buffer. */ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); /* Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be large enough to hold the - entire uncompressed data. (The size of the uncompressed data must have - been saved previously by the compressor and transmitted to the decompressor - by some mechanism outside the scope of this compression library.) - Upon exit, destLen is the actual size of the compressed buffer. - This function can be used to decompress a whole file at once if the - input file is mmap'ed. + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be large enough to hold the entire + uncompressed data. (The size of the uncompressed data must have been saved + previously by the compressor and transmitted to the decompressor by some + mechanism outside the scope of this compression library.) Upon exit, destLen + is the actual size of the uncompressed buffer. uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output @@ -1063,136 +1153,199 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, */ -typedef voidp gzFile; + /* gzip file access functions */ + +/* + This library supports reading and writing files in gzip (.gz) format with + an interface similar to that of stdio, using the functions that start with + "gz". The gzip format is different from the zlib format. gzip is a gzip + wrapper, documented in RFC 1952, wrapped around a deflate stream. +*/ + +typedef voidp gzFile; /* opaque gzip file descriptor */ -ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); /* - Opens a gzip (.gz) file for reading or writing. The mode parameter - is as in fopen ("rb" or "wb") but can also include a compression level - ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for - Huffman only compression as in "wb1h", or 'R' for run-length encoding - as in "wb1R". (See the description of deflateInit2 for more information - about the strategy parameter.) +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); + + Opens a gzip (.gz) file for reading or writing. The mode parameter is as + in fopen ("rb" or "wb") but can also include a compression level ("wb9") or + a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only + compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F' + for fixed code compression as in "wb9F". (See the description of + deflateInit2 for more information about the strategy parameter.) Also "a" + can be used instead of "w" to request that the gzip stream that will be + written be appended to the file. "+" will result in an error, since reading + and writing to the same gzip file is not supported. gzopen can be used to read a file which is not in gzip format; in this case gzread will directly read from the file without decompression. - gzopen returns NULL if the file could not be opened or if there was - insufficient memory to allocate the (de)compression state; errno - can be checked to distinguish the two cases (if errno is zero, the - zlib error is Z_MEM_ERROR). */ + gzopen returns NULL if the file could not be opened, if there was + insufficient memory to allocate the gzFile state, or if an invalid mode was + specified (an 'r', 'w', or 'a' was not provided, or '+' was provided). + errno can be checked to determine if the reason gzopen failed was that the + file could not be opened. +*/ -ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); /* - gzdopen() associates a gzFile with the file descriptor fd. File - descriptors are obtained from calls like open, dup, creat, pipe or - fileno (in the file has been previously opened with fopen). - The mode parameter is as in gzopen. - The next call of gzclose on the returned gzFile will also close the - file descriptor fd, just like fclose(fdopen(fd), mode) closes the file - descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). - gzdopen returns NULL if there was insufficient memory to allocate - the (de)compression state. + gzdopen associates a gzFile with the file descriptor fd. File descriptors + are obtained from calls like open, dup, creat, pipe or fileno (if the file + has been previously opened with fopen). The mode parameter is as in gzopen. + + The next call of gzclose on the returned gzFile will also close the file + descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor + fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, + mode);. The duplicated descriptor should be saved to avoid a leak, since + gzdopen does not close fd if it fails. + + gzdopen returns NULL if there was insufficient memory to allocate the + gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not + provided, or '+' was provided), or if fd is -1. The file descriptor is not + used until the next gz* read, write, seek, or close operation, so gzdopen + will not detect if fd is invalid (unless fd is -1). +*/ + +ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); +/* + Set the internal buffer size used by this library's functions. The + default buffer size is 8192 bytes. This function must be called after + gzopen() or gzdopen(), and before any other calls that read or write the + file. The buffer memory allocation is always deferred to the first read or + write. Two buffers are allocated, either both of the specified size when + writing, or one of the specified size and the other twice that size when + reading. A larger buffer size of, for example, 64K or 128K bytes will + noticeably increase the speed of decompression (reading). + + The new buffer size also affects the maximum length for gzprintf(). + + gzbuffer() returns 0 on success, or -1 on failure, such as being called + too late. */ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); /* - Dynamically update the compression level or strategy. See the description + Dynamically update the compression level or strategy. See the description of deflateInit2 for the meaning of these parameters. + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not opened for writing. */ -ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); /* - Reads the given number of uncompressed bytes from the compressed file. - If the input file was not in gzip format, gzread copies the given number - of bytes into the buffer. - gzread returns the number of uncompressed bytes actually read (0 for - end of file, -1 for error). */ + Reads the given number of uncompressed bytes from the compressed file. If + the input file was not in gzip format, gzread copies the given number of + bytes into the buffer. + + After reaching the end of a gzip stream in the input, gzread will continue + to read, looking for another gzip stream, or failing that, reading the rest + of the input file directly without decompression. The entire input file + will be read if gzread is called until it returns less than the requested + len. + + gzread returns the number of uncompressed bytes actually read, less than + len for end of file, or -1 for error. +*/ -ZEXTERN int ZEXPORT gzwrite OF((gzFile file, - voidpc buf, unsigned len)); +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); /* Writes the given number of uncompressed bytes into the compressed file. - gzwrite returns the number of uncompressed bytes actually written - (0 in case of error). + gzwrite returns the number of uncompressed bytes written or 0 in case of + error. */ -ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); /* - Converts, formats, and writes the args to the compressed file under - control of the format string, as in fprintf. gzprintf returns the number of - uncompressed bytes actually written (0 in case of error). The number of - uncompressed bytes written is limited to 4095. The caller should assure that - this limit is not exceeded. If it is exceeded, then gzprintf() will return - return an error (0) with nothing written. In this case, there may also be a - buffer overflow with unpredictable consequences, which is possible only if - zlib was compiled with the insecure functions sprintf() or vsprintf() - because the secure snprintf() or vsnprintf() functions were not available. + Converts, formats, and writes the arguments to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written, or 0 in case of error. The number of + uncompressed bytes written is limited to 8191, or one less than the buffer + size given to gzbuffer(). The caller should assure that this limit is not + exceeded. If it is exceeded, then gzprintf() will return an error (0) with + nothing written. In this case, there may also be a buffer overflow with + unpredictable consequences, which is possible only if zlib was compiled with + the insecure functions sprintf() or vsprintf() because the secure snprintf() + or vsnprintf() functions were not available. This can be determined using + zlibCompileFlags(). */ ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); /* - Writes the given null-terminated string to the compressed file, excluding + Writes the given null-terminated string to the compressed file, excluding the terminating null character. - gzputs returns the number of characters written, or -1 in case of error. + + gzputs returns the number of characters written, or -1 in case of error. */ ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); /* - Reads bytes from the compressed file until len-1 characters are read, or - a newline character is read and transferred to buf, or an end-of-file - condition is encountered. The string is then terminated with a null - character. - gzgets returns buf, or Z_NULL in case of error. + Reads bytes from the compressed file until len-1 characters are read, or a + newline character is read and transferred to buf, or an end-of-file + condition is encountered. If any characters are read or if len == 1, the + string is terminated with a null character. If no characters are read due + to an end-of-file or len < 1, then the buffer is left untouched. + + gzgets returns buf which is a null-terminated string, or it returns NULL + for end-of-file or in case of error. If there was an error, the contents at + buf are indeterminate. */ -ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); /* - Writes c, converted to an unsigned char, into the compressed file. - gzputc returns the value that was written, or -1 in case of error. + Writes c, converted to an unsigned char, into the compressed file. gzputc + returns the value that was written, or -1 in case of error. */ -ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); /* - Reads one byte from the compressed file. gzgetc returns this byte - or -1 in case of end of file or error. + Reads one byte from the compressed file. gzgetc returns this byte or -1 + in case of end of file or error. */ -ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); /* - Push one character back onto the stream to be read again later. - Only one character of push-back is allowed. gzungetc() returns the - character pushed, or -1 on failure. gzungetc() will fail if a - character has been pushed but not read yet, or if c is -1. The pushed - character will be discarded if the stream is repositioned with gzseek() - or gzrewind(). + Push one character back onto the stream to be read as the first character + on the next read. At least one character of push-back is allowed. + gzungetc() returns the character pushed, or -1 on failure. gzungetc() will + fail if c is -1, and may fail if a character has been pushed but not read + yet. If gzungetc is used immediately after gzopen or gzdopen, at least the + output buffer size of pushed characters is allowed. (See gzbuffer above.) + The pushed character will be discarded if the stream is repositioned with + gzseek() or gzrewind(). */ -ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); /* - Flushes all pending output into the compressed file. The parameter - flush is as in the deflate() function. The return value is the zlib - error number (see function gzerror below). gzflush returns Z_OK if - the flush parameter is Z_FINISH and all output could be flushed. - gzflush should be called only when strictly necessary because it can - degrade compression. + Flushes all pending output into the compressed file. The parameter flush + is as in the deflate() function. The return value is the zlib error number + (see function gzerror below). gzflush is only permitted when writing. + + If the flush parameter is Z_FINISH, the remaining data is written and the + gzip stream is completed in the output. If gzwrite() is called again, a new + gzip stream will be started in the output. gzread() is able to read such + concatented gzip streams. + + gzflush should be called only when strictly necessary because it will + degrade compression if called too often. */ -ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, - z_off_t offset, int whence)); /* - Sets the starting position for the next gzread or gzwrite on the - given compressed file. The offset represents a number of bytes in the - uncompressed data stream. The whence parameter is defined as in lseek(2); +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); + + Sets the starting position for the next gzread or gzwrite on the given + compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be - extremely slow. If the file is opened for writing, only forward seeks are + extremely slow. If the file is opened for writing, only forward seeks are supported; gzseek then compresses a sequence of zeroes up to the new starting position. - gzseek returns the resulting offset location as measured in bytes from + gzseek returns the resulting offset location as measured in bytes from the beginning of the uncompressed stream, or -1 in case of error, in particular if the file is opened for writing and the new starting position would be before the current position. @@ -1202,68 +1355,127 @@ ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); /* Rewinds the given file. This function is supported only for reading. - gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) */ +/* ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); + + Returns the starting position for the next gzread or gzwrite on the given + compressed file. This position represents a number of bytes in the + uncompressed data stream, and is zero when starting, even if appending or + reading a gzip stream from the middle of a file using gzdopen(). + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + /* - Returns the starting position for the next gzread or gzwrite on the - given compressed file. This position represents a number of bytes in the - uncompressed data stream. +ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); - gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) + Returns the current offset in the file being read or written. This offset + includes the count of bytes that precede the gzip stream, for example when + appending or when using gzdopen() for reading. When reading, the offset + does not include as yet unused buffered input. This information can be used + for a progress indicator. On error, gzoffset() returns -1. */ ZEXTERN int ZEXPORT gzeof OF((gzFile file)); /* - Returns 1 when EOF has previously been detected reading the given - input stream, otherwise zero. + Returns true (1) if the end-of-file indicator has been set while reading, + false (0) otherwise. Note that the end-of-file indicator is set only if the + read tried to go past the end of the input, but came up short. Therefore, + just like feof(), gzeof() may return false even if there is no more data to + read, in the event that the last read request was for the exact number of + bytes remaining in the input file. This will happen if the input file size + is an exact multiple of the buffer size. + + If gzeof() returns true, then the read functions will return no more data, + unless the end-of-file indicator is reset by gzclearerr() and the input file + has grown since the previous end of file was detected. */ ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); /* - Returns 1 if file is being read directly without decompression, otherwise - zero. + Returns true (1) if file is being copied directly while reading, or false + (0) if file is a gzip stream being decompressed. This state can change from + false to true while reading the input file if the end of a gzip stream is + reached, but is followed by data that is not another gzip stream. + + If the input file is empty, gzdirect() will return true, since the input + does not contain a gzip stream. + + If gzdirect() is used immediately after gzopen() or gzdopen() it will + cause buffers to be allocated to allow reading the file to determine if it + is a gzip file. Therefore if gzbuffer() is used, it should be called before + gzdirect(). */ ZEXTERN int ZEXPORT gzclose OF((gzFile file)); /* - Flushes all pending output if necessary, closes the compressed file - and deallocates all the (de)compression state. The return value is the zlib - error number (see function gzerror below). + Flushes all pending output if necessary, closes the compressed file and + deallocates the (de)compression state. Note that once file is closed, you + cannot call gzerror with file, since its structures have been deallocated. + gzclose must not be called more than once on the same file, just as free + must not be called more than once on the same allocation. + + gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a + file operation error, or Z_OK on success. +*/ + +ZEXTERN int ZEXPORT gzclose_r OF((gzFile file)); +ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); +/* + Same as gzclose(), but gzclose_r() is only for use when reading, and + gzclose_w() is only for use when writing or appending. The advantage to + using these instead of gzclose() is that they avoid linking in zlib + compression or decompression code that is not used when only reading or only + writing respectively. If gzclose() is used, then both compression and + decompression code will be included the application when linking to a static + zlib library. */ ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); /* - Returns the error message for the last error which occurred on the - given compressed file. errnum is set to zlib error number. If an - error occurred in the file system and not in the compression library, - errnum is set to Z_ERRNO and the application may consult errno - to get the exact error code. + Returns the error message for the last error which occurred on the given + compressed file. errnum is set to zlib error number. If an error occurred + in the file system and not in the compression library, errnum is set to + Z_ERRNO and the application may consult errno to get the exact error code. + + The application must not modify the returned string. Future calls to + this function may invalidate the previously returned string. If file is + closed, then the string previously returned by gzerror will no longer be + available. + + gzerror() should be used to distinguish errors from end-of-file for those + functions above that do not distinguish those cases in their return values. */ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); /* - Clears the error and end-of-file flags for file. This is analogous to the - clearerr() function in stdio. This is useful for continuing to read a gzip + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip file that is being written concurrently. */ + /* checksum functions */ /* These functions are not related to compression but are exported - anyway because they might be useful in applications using the - compression library. + anyway because they might be useful in applications using the compression + library. */ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); /* Update a running Adler-32 checksum with the bytes buf[0..len-1] and - return the updated checksum. If buf is NULL, this function returns - the required initial value for the checksum. - An Adler-32 checksum is almost as reliable as a CRC32 but can be computed - much faster. Usage example: + return the updated checksum. If buf is Z_NULL, this function returns the + required initial value for the checksum. + + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. + + Usage example: uLong adler = adler32(0L, Z_NULL, 0); @@ -1273,9 +1485,10 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); if (adler != original_adler) error(); */ +/* ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, z_off_t len2)); -/* + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of @@ -1285,9 +1498,11 @@ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); /* Update a running CRC-32 with the bytes buf[0..len-1] and return the - updated CRC-32. If buf is NULL, this function returns the required initial - value for the for the crc. Pre- and post-conditioning (one's complement) is - performed within this function so it shouldn't be done by the application. + updated CRC-32. If buf is Z_NULL, this function returns the required + initial value for the for the crc. Pre- and post-conditioning (one's + complement) is performed within this function so it shouldn't be done by the + application. + Usage example: uLong crc = crc32(0L, Z_NULL, 0); @@ -1298,9 +1513,9 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); if (crc != original_crc) error(); */ +/* ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); -/* Combine two CRC-32 check values into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, CRC-32 check values were calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 @@ -1339,16 +1554,57 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) #define inflateBackInit(strm, windowBits, window) \ inflateBackInit_((strm), (windowBits), (window), \ - ZLIB_VERSION, sizeof(z_stream)) + ZLIB_VERSION, sizeof(z_stream)) +/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or + * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if + * both are true, the application gets the *64 functions, and the regular + * functions are changed to 64 bits) -- in case these are set on systems + * without large file support, _LFS64_LARGEFILE must also be true + */ +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); + ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); +#endif + +#if !defined(ZLIB_INTERNAL) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0 +# define gzopen gzopen64 +# define gzseek gzseek64 +# define gztell gztell64 +# define gzoffset gzoffset64 +# define adler32_combine adler32_combine64 +# define crc32_combine crc32_combine64 +# ifdef _LARGEFILE64_SOURCE + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); + ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); +# endif +#else + ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); + ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); + ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); + ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); +#endif +/* hack for buggy compilers */ #if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) - struct internal_state {int dummy;}; /* hack for buggy compilers */ + struct internal_state {int dummy;}; #endif +/* undocumented functions */ ZEXTERN const char * ZEXPORT zError OF((int)); -ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); +ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); #ifdef __cplusplus } diff --git a/zlib/zlib.map b/zlib/zlib.map new file mode 100644 index 00000000000..f282d3624a5 --- /dev/null +++ b/zlib/zlib.map @@ -0,0 +1,68 @@ +ZLIB_1.2.0 { + global: + compressBound; + deflateBound; + inflateBack; + inflateBackEnd; + inflateBackInit_; + inflateCopy; + local: + deflate_copyright; + inflate_copyright; + inflate_fast; + inflate_table; + zcalloc; + zcfree; + z_errmsg; + gz_error; + gz_intmax; + _*; +}; + +ZLIB_1.2.0.2 { + gzclearerr; + gzungetc; + zlibCompileFlags; +} ZLIB_1.2.0; + +ZLIB_1.2.0.8 { + deflatePrime; +} ZLIB_1.2.0.2; + +ZLIB_1.2.2 { + adler32_combine; + crc32_combine; + deflateSetHeader; + inflateGetHeader; +} ZLIB_1.2.0.8; + +ZLIB_1.2.2.3 { + deflateTune; + gzdirect; +} ZLIB_1.2.2; + +ZLIB_1.2.2.4 { + inflatePrime; +} ZLIB_1.2.2.3; + +ZLIB_1.2.3.3 { + adler32_combine64; + crc32_combine64; + gzopen64; + gzseek64; + gztell64; + inflateUndermine; +} ZLIB_1.2.2.4; + +ZLIB_1.2.3.4 { + inflateReset2; + inflateMark; +} ZLIB_1.2.3.3; + +ZLIB_1.2.3.5 { + gzbuffer; + gzoffset; + gzoffset64; + gzclose_r; + gzclose_w; +} ZLIB_1.2.3.4; diff --git a/zlib/zlib.pc.in b/zlib/zlib.pc.in new file mode 100644 index 00000000000..7e5acf9c77e --- /dev/null +++ b/zlib/zlib.pc.in @@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +sharedlibdir=@sharedlibdir@ +includedir=@includedir@ + +Name: zlib +Description: zlib compression library +Version: @VERSION@ + +Requires: +Libs: -L${libdir} -L${sharedlibdir} -lz +Cflags: -I${includedir} diff --git a/zlib/zlib2ansi b/zlib/zlib2ansi new file mode 100644 index 00000000000..15e3e165f37 --- /dev/null +++ b/zlib/zlib2ansi @@ -0,0 +1,152 @@ +#!/usr/bin/perl + +# Transform K&R C function definitions into ANSI equivalent. +# +# Author: Paul Marquess +# Version: 1.0 +# Date: 3 October 2006 + +# TODO +# +# Asumes no function pointer parameters. unless they are typedefed. +# Assumes no literal strings that look like function definitions +# Assumes functions start at the beginning of a line + +use strict; +use warnings; + +local $/; +$_ = <>; + +my $sp = qr{ \s* (?: /\* .*? \*/ )? \s* }x; # assume no nested comments + +my $d1 = qr{ $sp (?: [\w\*\s]+ $sp)* $sp \w+ $sp [\[\]\s]* $sp }x ; +my $decl = qr{ $sp (?: \w+ $sp )+ $d1 }xo ; +my $dList = qr{ $sp $decl (?: $sp , $d1 )* $sp ; $sp }xo ; + + +while (s/^ + ( # Start $1 + ( # Start $2 + .*? # Minimal eat content + ( ^ \w [\w\s\*]+ ) # $3 -- function name + \s* # optional whitespace + ) # $2 - Matched up to before parameter list + + \( \s* # Literal "(" + optional whitespace + ( [^\)]+ ) # $4 - one or more anythings except ")" + \s* \) # optional whitespace surrounding a Literal ")" + + ( (?: $dList )+ ) # $5 + + $sp ^ { # literal "{" at start of line + ) # Remember to $1 + //xsom + ) +{ + my $all = $1 ; + my $prefix = $2; + my $param_list = $4 ; + my $params = $5; + + StripComments($params); + StripComments($param_list); + $param_list =~ s/^\s+//; + $param_list =~ s/\s+$//; + + my $i = 0 ; + my %pList = map { $_ => $i++ } + split /\s*,\s*/, $param_list; + my $pMatch = '(\b' . join('|', keys %pList) . '\b)\W*$' ; + + my @params = split /\s*;\s*/, $params; + my @outParams = (); + foreach my $p (@params) + { + if ($p =~ /,/) + { + my @bits = split /\s*,\s*/, $p; + my $first = shift @bits; + $first =~ s/^\s*//; + push @outParams, $first; + $first =~ /^(\w+\s*)/; + my $type = $1 ; + push @outParams, map { $type . $_ } @bits; + } + else + { + $p =~ s/^\s+//; + push @outParams, $p; + } + } + + + my %tmp = map { /$pMatch/; $_ => $pList{$1} } + @outParams ; + + @outParams = map { " $_" } + sort { $tmp{$a} <=> $tmp{$b} } + @outParams ; + + print $prefix ; + print "(\n" . join(",\n", @outParams) . ")\n"; + print "{" ; + +} + +# Output any trailing code. +print ; +exit 0; + + +sub StripComments +{ + + no warnings; + + # Strip C & C++ coments + # From the perlfaq + $_[0] =~ + + s{ + /\* ## Start of /* ... */ comment + [^*]*\*+ ## Non-* followed by 1-or-more *'s + ( + [^/*][^*]*\*+ + )* ## 0-or-more things which don't start with / + ## but do end with '*' + / ## End of /* ... */ comment + + | ## OR C++ Comment + // ## Start of C++ comment // + [^\n]* ## followed by 0-or-more non end of line characters + + | ## OR various things which aren't comments: + + ( + " ## Start of " ... " string + ( + \\. ## Escaped char + | ## OR + [^"\\] ## Non "\ + )* + " ## End of " ... " string + + | ## OR + + ' ## Start of ' ... ' string + ( + \\. ## Escaped char + | ## OR + [^'\\] ## Non '\ + )* + ' ## End of ' ... ' string + + | ## OR + + . ## Anything other char + [^/"'\\]* ## Chars which doesn't start a comment, string or escape + ) + }{$2}gxs; + +} diff --git a/zlib/zutil.c b/zlib/zutil.c index 04730f8bffb..cea4a311c3f 100644 --- a/zlib/zutil.c +++ b/zlib/zutil.c @@ -1,5 +1,5 @@ /* zutil.c -- target dependent utility functions for the compression library - * Copyright (C) 1995-2005 Jean-loup Gailly. + * Copyright (C) 1995-2005, 2010 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -34,25 +34,25 @@ uLong ZEXPORT zlibCompileFlags() uLong flags; flags = 0; - switch (sizeof(uInt)) { + switch ((int)(sizeof(uInt))) { case 2: break; case 4: flags += 1; break; case 8: flags += 2; break; default: flags += 3; } - switch (sizeof(uLong)) { + switch ((int)(sizeof(uLong))) { case 2: break; case 4: flags += 1 << 2; break; case 8: flags += 2 << 2; break; default: flags += 3 << 2; } - switch (sizeof(voidpf)) { + switch ((int)(sizeof(voidpf))) { case 2: break; case 4: flags += 1 << 4; break; case 8: flags += 2 << 4; break; default: flags += 3 << 4; } - switch (sizeof(z_off_t)) { + switch ((int)(sizeof(z_off_t))) { case 2: break; case 4: flags += 1 << 6; break; case 8: flags += 2 << 6; break; @@ -117,9 +117,9 @@ uLong ZEXPORT zlibCompileFlags() # ifndef verbose # define verbose 0 # endif -int z_verbose = verbose; +int ZLIB_INTERNAL z_verbose = verbose; -void z_error (m) +void ZLIB_INTERNAL z_error (m) char *m; { fprintf(stderr, "%s\n", m); @@ -146,7 +146,7 @@ const char * ZEXPORT zError(err) #ifndef HAVE_MEMCPY -void zmemcpy(dest, source, len) +void ZLIB_INTERNAL zmemcpy(dest, source, len) Bytef* dest; const Bytef* source; uInt len; @@ -157,7 +157,7 @@ void zmemcpy(dest, source, len) } while (--len != 0); } -int zmemcmp(s1, s2, len) +int ZLIB_INTERNAL zmemcmp(s1, s2, len) const Bytef* s1; const Bytef* s2; uInt len; @@ -170,7 +170,7 @@ int zmemcmp(s1, s2, len) return 0; } -void zmemzero(dest, len) +void ZLIB_INTERNAL zmemzero(dest, len) Bytef* dest; uInt len; { @@ -213,7 +213,7 @@ local ptr_table table[MAX_PTR]; * a protected system like OS/2. Use Microsoft C instead. */ -voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) +voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size) { voidpf buf = opaque; /* just to make some compilers happy */ ulg bsize = (ulg)items*size; @@ -237,7 +237,7 @@ voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) return buf; } -void zcfree (voidpf opaque, voidpf ptr) +void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) { int n; if (*(ush*)&ptr != 0) { /* object < 64K */ @@ -272,13 +272,13 @@ void zcfree (voidpf opaque, voidpf ptr) # define _hfree hfree #endif -voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) +voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size) { if (opaque) opaque = 0; /* to make compiler happy */ return _halloc((long)items, size); } -void zcfree (voidpf opaque, voidpf ptr) +void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) { if (opaque) opaque = 0; /* to make compiler happy */ _hfree(ptr); @@ -297,7 +297,7 @@ extern voidp calloc OF((uInt items, uInt size)); extern void free OF((voidpf ptr)); #endif -voidpf zcalloc (opaque, items, size) +voidpf ZLIB_INTERNAL zcalloc (opaque, items, size) voidpf opaque; unsigned items; unsigned size; @@ -307,7 +307,7 @@ voidpf zcalloc (opaque, items, size) (voidpf)calloc(items, size); } -void zcfree (opaque, ptr) +void ZLIB_INTERNAL zcfree (opaque, ptr) voidpf opaque; voidpf ptr; { diff --git a/zlib/zutil.h b/zlib/zutil.h index 3880b085d8b..31a5353dcb3 100644 --- a/zlib/zutil.h +++ b/zlib/zutil.h @@ -1,5 +1,5 @@ /* zutil.h -- internal interface and configuration of the compression library - * Copyright (C) 1995-2005 Jean-loup Gailly. + * Copyright (C) 1995-2010 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -13,31 +13,21 @@ #ifndef ZUTIL_H #define ZUTIL_H -#define ZLIB_INTERNAL +#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ) +# define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) +#else +# define ZLIB_INTERNAL +#endif + #include "zlib.h" #ifdef STDC -# ifndef _WIN32_WCE +# if !(defined(_WIN32_WCE) && defined(_MSC_VER)) # include <stddef.h> # endif # include <string.h> # include <stdlib.h> #endif -#ifdef NO_ERRNO_H -# ifdef _WIN32_WCE - /* The Microsoft C Run-Time Library for Windows CE doesn't have - * errno. We define it as a global variable to simplify porting. - * Its value is always 0 and should not be used. We rename it to - * avoid conflict with other libraries that use the same workaround. - */ -# define errno z_errno -# endif - extern int errno; -#else -# ifndef _WIN32_WCE -# include <errno.h> -# endif -#endif #ifndef local # define local static @@ -89,7 +79,7 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ #if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) # define OS_CODE 0x00 # if defined(__TURBOC__) || defined(__BORLANDC__) -# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) +# if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) /* Allow compilation with ANSI keywords only enabled */ void _Cdecl farfree( void *block ); void *_Cdecl farmalloc( unsigned long nbytes ); @@ -118,7 +108,7 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ #ifdef OS2 # define OS_CODE 0x06 # ifdef M_I86 - #include <malloc.h> +# include <malloc.h> # endif #endif @@ -151,7 +141,7 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # define fdopen(fd,mode) NULL /* No fdopen() */ #endif -#if (defined(_MSC_VER) && (_MSC_VER > 600)) +#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX # if defined(_WIN32_WCE) # define fdopen(fd,mode) NULL /* No fdopen() */ # ifndef _PTRDIFF_T_DEFINED @@ -163,6 +153,18 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # endif #endif +#if defined(__BORLANDC__) + #pragma warn -8004 + #pragma warn -8008 + #pragma warn -8066 +#endif + +/* provide prototypes for these when building zlib without LFS */ +#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0 + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); +#endif + /* common defaults */ #ifndef OS_CODE @@ -197,7 +199,9 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # ifdef WIN32 /* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ # if !defined(vsnprintf) && !defined(NO_vsnprintf) -# define vsnprintf _vsnprintf +# if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 ) +# define vsnprintf _vsnprintf +# endif # endif # endif # ifdef __SASC @@ -232,16 +236,16 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # define zmemzero(dest, len) memset(dest, 0, len) # endif #else - extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); - extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); - extern void zmemzero OF((Bytef* dest, uInt len)); + void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); + int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); + void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len)); #endif /* Diagnostic functions */ #ifdef DEBUG # include <stdio.h> - extern int z_verbose; - extern void z_error OF((char *m)); + extern int ZLIB_INTERNAL z_verbose; + extern void ZLIB_INTERNAL z_error OF((char *m)); # define Assert(cond,msg) {if(!(cond)) z_error(msg);} # define Trace(x) {if (z_verbose>=0) fprintf x ;} # define Tracev(x) {if (z_verbose>0) fprintf x ;} @@ -258,8 +262,9 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ #endif -voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); -void zcfree OF((voidpf opaque, voidpf ptr)); +voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items, + unsigned size)); +void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr)); #define ZALLOC(strm, items, size) \ (*((strm)->zalloc))((strm)->opaque, (items), (size)) |