diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-21 07:20:48 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-21 07:20:48 +0000 |
commit | 1869ca576befbe5457337f88ec2e183aa66eb96f (patch) | |
tree | 5a7be8ba6dc1abd3f95a537fbc5e0ad6a7afb4ef /gcc | |
parent | 63b82f0a74f7ec778b00401a1a273c9df747b758 (diff) | |
download | gcc-1869ca576befbe5457337f88ec2e183aa66eb96f.tar.gz |
2010-01-21 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 156107
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@156108 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
165 files changed, 4375 insertions, 1519 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 85e0daeacb9..90061ec7f5a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,377 @@ +2010-01-20 Janis Johnson <janis187@us.ibm.com> + Jason Merrill <jason@redhat.com> + + * tree.h (TYPE_TRANSPARENT_UNION): Replace with ... + (TYPE_TRANSPARENT_AGGR): this, for union and record. + * calls.c (initialize argument_information): Handle it. + * c-common.c (handle_transparent_union_attribute): Use new name. + * c-decl.c (finish_struct): Ditto. + * c-typeck.c (type_lists_compatible_p): Ditto. + (convert_for_assignment): Use new name and also handle record. + * function.c (aggregate_value_p): Handle it. + (pass_by_reference): Ditto. + (assign_parm_data_types): Ditto. + * print-tree.c (print_node): Ditto. + * lto-streamer-in.c (unpack_ts_type_value_fields): Ditto. + * lto-streamer-out.c (pack_ts_type_value_fields): Ditto. + * tree.c (first_field): New fn. + +2010-01-21 Dave Korn <dave.korn.cygwin@gmail.com> + + PR target/42818 + * config/i386/cygwin.h (CXX_WRAP_SPEC_LIST): Always apply wrappers, + even when linking statically, for now. + +2010-01-20 Alexandre Oliva <aoliva@redhat.com> + + PR debug/42715 + * var-tracking.c (use_type): Choose MO_VAL_SET for REGs set + without a cselib val. + (count_uses): Accept MO_VAL_SET with no val on stores. + (add_stores): Likewise. + +2010-01-20 Jakub Jelinek <jakub@redhat.com> + + * var-tracking.c (check_value_val): Add a compile time assertion. + (dv_is_decl_p): Simplify. + (dv_as_decl, dv_as_value, dv_from_decl, dv_from_value): Only use + gcc_assert if ENABLE_CHECKING. + +2010-01-20 Alexandre Oliva <aoliva@redhat.com> + + PR debug/42782 + * var-tracking.c: Include tree-flow.h. + (mem_dies_at_call): New. + (dataflow_set_preserve_mem_locs): Use it. + (dataflow_set_remove_mem_locs): Likewise. + (dump_var): Renamed from dump_variable. Adjust all callers. + (dump_var_slot): Renamed from dump_variable_slot. Likewise. + * Makefile.in (var-tracking.o): Adjust deps. + +2010-01-20 Joern Rennecke <amylaar@spamcop.net> + + * doc/tm.texi (TARGET_SCHED_SET_SCHED_FLAGS): Fix argument list. + +2010-01-20 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/42717 + * tree-ssa-dce.c (get_live_post_dom): Remove. + (forward_edge_to_pdom): Take an arbitrary edge to copy + degenerate PHI args from. + (remove_dead_stmt): Use the first post-dominator even if it + does not contain live statements as redirection destination. + +2010-01-20 Richard Guenther <rguenther@suse.de> + + * tree-inline.c (estimate_num_insns): Handle EH builtins. + +2010-01-20 Jakub Jelinek <jakub@redhat.com> + + * sel-sched.c (create_speculation_check): Remove set but not used + variable twin. + (try_transformation_cache): Remove set but not used variable ds. + (calculate_privileged_insns): Remove set but not used variables + cur_insn and min_spec_insn. + (find_best_expr): Remove set but not used variable avail_n. + * tree-predcom.c (base_names_in_chain_on): Remove set but not used + variable e. + * cgraphunit.c (assemble_thunk): Remove set but not used variable + false_label. + * haifa-sched.c (remove_notes): Remove set but not used variable prev. + * graphite-clast-to-gimple.c (gloog): Remove set but not used variable + new_scop_exit_edge. + +2010-01-20 Felyza Wishbringer <fwishbringer@gmail.com> + + PR bootstrap/42786 + * config.gcc (i[34567]86-*-*): Fix handling of athlon64 and athlon-fx + cpu types. Add support for *-sse3 cpu types. + (x86_64-*-*): Ditto. + +2010-01-20 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/42803 + * varasm.c (narrowing_initializer_constant_valid_p): Add CACHE + argument, call initializer_constant_valid_p_1 instead of + initializer_constant_valid_p, pass CACHE to it, return NULL + immediately if first call returns NULL. + (initializer_constant_valid_p_1): New function. + (initializer_constant_valid_p): Use it. + +2010-01-20 Thomas Quinot <quinot@adacore.com> + + * tree.def (PLACEHOLDER_EXPR): Fix comment. + +2010-01-20 Jakub Jelinek <jakub@redhat.com> + + * dwarf2out.c (mem_loc_descriptor): Use DW_OP_mod for UMOD instead + of MOD, handle MOD using DW_OP_{over,over,div,mul,minus}. + (loc_list_from_tree): Don't handle unsigned division. Handle + signed modulo using DW_OP_{over,over,div,mul,minus}. + * unwind-dw2.c (execute_stack_op): Handle DW_OP_mod using unsigned + modulo instead of signed. + +2010-01-20 DJ Delorie <dj@redhat.com> + + * config/h8300/h8300.c (F): Add "in_epilogue" flag. + (Fpa): Pass it + (h8300_emit_stack_adjustment): Propogate it. + (push): Pass it. + (h8300_expand_prologue): Likewise. + (h8300_expand_epilogue): Likewise. + +2010-01-19 Michael Matz <matz@suse.de> + + PR tree-optimization/41783 + * tree-data-ref.c (toplevel): Include flags.h. + (dump_data_dependence_relation): Also dump the inputs if the + result will be unknown. + (split_constant_offset_1): Look through some conversions. + * tree-predcom.c (determine_roots_comp): Restart a new chain if + the offset from last element is too large. + (ref_at_iteration): Deal also with MISALIGNED_INDIRECT_REF. + (reassociate_to_the_same_stmt): Handle vector registers. + * tree-vect-data-refs.c (vect_equal_offsets): Handle unary operations + (e.g. conversions). + * tree-vect-loop-manip.c (vect_gen_niters_for_prolog_loop): Add + wide_prolog_niters argument, emit widening instructions. + (vect_do_peeling_for_alignment): Adjust caller, use widened + variant of the iteration cound. + * Makefile.in (tree-data-ref.o): Add $(FLAGS_H). + +2010-01-19 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> + + PR target/38697 + * config/arm/neon-testgen.m (emit_automatics): New parameter + features. Adjust for Fixed_return_reg feature. + (test_intrinsic): Call emit_automatics with new feature. + * config/arm/neon.ml: Update copyright years. + (features): New Fixed_return_reg feature. + (ops): Update feature for Vget_low. + +2010-01-19 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/42719 + * tree-outof-ssa.c (trivially_conflicts_p): Don't consider debug + stmt uses. + + PR debug/42728 + * fwprop.c (all_uses_available_at): Return false if def_set dest + is a REG that is used in def_insn. + +2010-01-19 Joern Rennecke <amylaar@spamcop.net> + + * doc/tm.texi (TARGET_FIXED_CONDITION_CODE_REGS): Add argument names. + + (TARGET_CC_MODES_COMPATIBLE): Put return value in braces. + Add argument names. + + (TARGET_SCHED_INIT_SCHED_CONTEXT): Clarify language. + + * target.h (struct gcc_target) <secondary_reload>: Change type + of last argument to secondary_reload_info *. + +2010-01-18 Uros Bizjak <ubizjak@gmail.com> + + PR target/42774 + * config/alpha/predicates.md (aligned_memory_operand): Return 0 for + memory references with unaligned offsets. Remove CQImode handling. + (unaligned_memory_operand): Return 1 for memory references with + unaligned offsets. Remove CQImode handling. + +2010-01-18 Richard Guenther <rguenther@suse.de> + + PR middle-end/39954 + * cfgexpand.c (expand_call_stmt): TER pointer arguments in + builtin calls. + +2010-01-18 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/42781 + * tree-ssa-structalias.c (find_what_var_points_to): Skip + restrict processing only if the original variable was + artificial. + +2010-01-18 Joern Rennecke <amylaar@spamcop.net> + + * doc/tm.texi (TARGET_ASM_FUNCTION_EPILOGUE): Update text on where to + find number of popped argument bytes. + + (TARGET_INVALID_WITHIN_DOLOOP): Put return value in braces. + Fix the text that describes the return value for invalid insns. + + (TARGET_SCHED_NEEDS_BLOCK_P): Fix return type. Fix argument list. + + (TARGET_SCHED_IS_COSTLY_DEPENDENCE): Fix argument types. + Clarify what 'cost of the -dependence' is. Fix quoting. + + * toplev.c (default_get_pch_validity): Rename argument to "sz". + * doc/tm.texi (TARGET_GET_PCH_VALIDITY): Likewise. + +2010-01-17 Jakub Jelinek <jakub@redhat.com> + + * dwarf2out.c (mem_loc_descriptor): Don't ICE on + {S,U}S_{PLUS,MINUS,NEG,ABS,ASHIFT}. + +2010-01-17 Richard Guenther <rguenther@suse.de> + + PR middle-end/42248 + * function.c (split_complex_args): Take a VEC to modify. + (assign_parms_augmented_arg_list): Build a VEC instead of + a chain of PARM_DECLs. + (assign_parms_unsplit_complex): Take a VEC of arguments. + Do not fixup unmodified parms. + (assign_parms): Deal with the VEC. + (gimplify_parameters): Likewise. + +2010-01-17 Richard Guenther <rguenther@suse.de> + + * tree-ssa-uncprop.c (uncprop_into_successor_phis): Fix PHI + node existence check. + * tree-vect-loop.c (vect_analyze_loop_form): Likewise. + * tree-cfgcleanup.c (merge_phi_nodes): Likewise. + * tree-ssa-dce.c (forward_edge_to_pdom): Likewise. + * tree-cfg.c (gimple_execute_on_growing_pred): Likewise. + (gimple_execute_on_growing_pred): Likewise. + +2010-01-17 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/42773 + * tree-ssa-pre.c (phi_translate_set): Fix check for PHI node existence. + (compute_antic_aux): Likewise. + (compute_partial_antic_aux): Likewise. + +2010-01-17 Jie Zhang <jie.zhang@analog.com> + + PR debug/42767 + * dwarf2out.c (mem_loc_descriptor): Handle SS_TRUNCATE + and US_TRUNCATE. + +2010-01-17 Joern Rennecke <amylaar@spamcop.net> + + * doc/tm.texi (TARGET_INIT_LIBFUNCS): Put @findex entries in order of + appearance. + + (TARGET_LEGITIMATE_ADDRESS_P): Add return type. + Fix markup for strict argument. + + (TARGET_SCHED_REORDER2): Fix argument types. + + (TARGET_SCHED_DFA_PRE_CYCLE_INSN): Fix return type. + (TARGET_SCHED_DFA_POST_CYCLE_INSN): Likewise. + + (TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE): Fix name. + (TARGET_SCHED_DFA_POST_ADVANCE_CYCLE): Likewise. + + (TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD): + Add argument name. + + (TARGET_SCHED_ALLOC_SCHED_CONTEXT): Remove duplicate documentation. + (TARGET_SCHED_INIT_SCHED_CONTEXT): Likewise. + (TARGET_SCHED_SET_SCHED_CONTEXT): Likewise. + (TARGET_SCHED_CLEAR_SCHED_CONTEXT): Likewise. + (TARGET_SCHED_FREE_SCHED_CONTEXT): Likewise. + + (TARGET_SCHED_SET_SCHED_CONTEXT): Fix typo. + + (TARGET_SCHED_GEN_SPEC_CHECK): Fix name. + + (TARGET_ASM_RELOC_RW_MASK): Add return type. + (TARGET_MANGLE_DECL_ASSEMBLER_NAME): Fix return type. + + (TARGET_STRIP_NAME_ENCODING): Fix markup of return type and parameter. + + (TARGET_ASM_FILE_START): Put @findex before paragraph start. + Use prototype. + + (TARGET_ASM_NAMED_SECTION): Fix argument list. + + (TARGET_HAVE_NAMED_SECTIONS): Use @deftypevr. + (TARGET_HAVE_SWITCHABLE_BSS_SECTIONS): Likewise. + + (TARGET_ASM_RECORD_GCC_SWITCHES_SECTION): Use @deftypevr. + + (TARGET_ASM_ASSEMBLE_VISIBILITY): Fix argument types. + + (TARGET_ASM_MARK_DECL_PRESERVED): Fix argument and markup + referring to it. Fix language. + + (TARGET_HAVE_CTORS_DTORS): Use @deftypevr. + + (TARGET_ASM_FINAL_POSTSCAN_INSN): Adjust name of first argument. + + (TARGET_ASM_EMIT_UNWIND_LABEL): Add argument types. + + (TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL): Add type to argument. + + (TARGET_UNWIND_EMIT): Remove space between 'FILE *' and + '@var{stream}. Remove stray 'and'. + + (TARGET_ARM_EABI_UNWINDER): Use @deftypevr. + + (TARGET_ASM_OUTPUT_DWARF_DTPREL): Adjust name of first argument. + + (TARGET_SET_DEFAULT_TYPE_ATTRIBUTES): Add missing article. + + (TARGET_OPTION_VALID_ATTRIBUTE_P): Fix name, it was + misspelled as TARGET_VALID_OPTION_ATTRIBUTE_P. + + (TARGET_GET_PCH_VALIDITY): Put 'void *' in braces. + Fix description of return value. + Rename argument "sz" to "len." + + (TARGET_CXX_GUARD_MASK_BIT): Add missing article. + Clarify meaning of 'true' return value. + + (TARGET_SHIFT_TRUNCATION_MASK): Fix return type. + + (TARGET_MODE_REP_EXTENDED): Fix two inconsisent uses of + rep_mode versus mode_rep. + + (TARGET_HANDLE_PRAGMA_EXTERN_PREFIX): Document. + + (TARGET_BUILTIN_DECL): Fix name. + + (TARGET_COMMUTATIVE_P): Fix type of first argument. + + (TARGET_SET_CURRENT_FUNCTION): Mention possibility of cfun being NULL. + + (TARGET_BRANCH_TARGET_REGISTER_CLASS): Fix return type. + + (TARGET_USE_LOCAL_THUNK_ALIAS_P): Document as macro instead of hook. + + (TARGET_RELAXED_ORDERING): Use @deftypevr. + + (TARGET_GET_DRAP_RTX): Note that this is a hook. + Clarify language. + + (TARGET_BUILTIN_RECIPROCAL): Fix argument types. + Rename argument tm_fn to md_fn. + + (TARGET_OPTION_PRINT): Fix argument list. + +2010-01-16 Harsha Jagasia <harsha.jagasia@amd.com> + + PR target/42664 + * config/i386/i386.c (ix86_fixup_binary_operands): + Revert FMA4 fixup of operands. + +2010-01-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + PR gcc/42525 + * Makefile.in (write_entries_to_file, install-plugin): + Use \012 instead of \n with tr. + +2010-01-16 Richard Sandiford <r.sandiford@uk.ibm.com> + + * configure.ac (HAVE_AS_REF): New C macro. + * configure: Regenerate. + * config.in: Likewise. + * collect2.c (main): Only postpone SCAN_DWEH to the second pass + if HAVE_AS_REF. + * config/rs6000/aix.h (ASM_OUTPUT_DWARF_TABLE_REF): Only define + if HAVE_AS_REF. + 2010-01-16 Joern Rennecke <amylaar@spamcop.net> * doc/tm.texi (TARGET_USE_BLOCKS_FOR_CONSTANT_P): Fix argument types. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 3d99ded7fcf..27796e14032 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20100116 +20100121 diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 11cfc741d62..06549807afe 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -291,7 +291,7 @@ write_entries_to_file = $(shell rm -f $(2) || :) $(shell touch $(2)) \ echo $$i; i=`expr $$i + $(write_entries_to_file_split)`; done), \ $(shell echo "$(wordlist $(range), \ $(shell expr $(range) + $(write_entries_to_file_split) - 1), $(1))" \ - | tr ' ' '\n' >> $(2))) + | tr ' ' '\012' >> $(2))) # -------- # UNSORTED @@ -2571,7 +2571,7 @@ tree-scalar-evolution.o: tree-scalar-evolution.c $(CONFIG_H) $(SYSTEM_H) \ $(TIMEVAR_H) $(CFGLOOP_H) $(SCEV_H) $(TREE_PASS_H) $(FLAGS_H) \ gt-tree-scalar-evolution.h tree-data-ref.o: tree-data-ref.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ - $(GGC_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) $(DIAGNOSTIC_H) \ + $(GGC_H) $(FLAGS_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) $(DIAGNOSTIC_H) \ $(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) $(CFGLOOP_H) \ $(TREE_DATA_REF_H) $(TREE_PASS_H) langhooks.h sese.o: sese.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ @@ -3068,7 +3068,8 @@ regstat.o : regstat.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ var-tracking.o : var-tracking.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(RTL_H) $(TREE_H) hard-reg-set.h insn-config.h reload.h $(FLAGS_H) \ $(BASIC_BLOCK_H) output.h sbitmap.h alloc-pool.h $(FIBHEAP_H) $(HASHTAB_H) \ - $(REGS_H) $(EXPR_H) $(TIMEVAR_H) $(TREE_PASS_H) cselib.h $(TARGET_H) + $(REGS_H) $(EXPR_H) $(TIMEVAR_H) $(TREE_PASS_H) $(TREE_FLOW_H) \ + cselib.h $(TARGET_H) profile.o : profile.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(TREE_H) $(FLAGS_H) output.h $(REGS_H) $(EXPR_H) $(FUNCTION_H) \ $(TOPLEV_H) $(COVERAGE_H) $(TREE_FLOW_H) value-prof.h cfghooks.h \ @@ -4362,7 +4363,7 @@ install-plugin: installdirs lang.install-plugin s-header-vars # We keep the directory structure for files in config and .def files. All # other files are flattened to a single directory. $(mkinstalldirs) $(DESTDIR)$(plugin_includedir) - headers=`echo $(PLUGIN_HEADERS) $(MELT_PLUGIN_HEADERS) | tr ' ' '\n' | sort -u`; \ + headers=`echo $(PLUGIN_HEADERS) $(MELT_PLUGIN_HEADERS) | tr ' ' '\012' | sort -u`; \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`; \ for file in $$headers; do \ if [ -f $$file ] ; then \ diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index fe779ad8beb..a794e5b7342 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,17 @@ +2010-01-18 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/utils.c (create_var_decl_1): Fix formatting nits. + +2010-01-18 Jan Hubicka <jh@suse.cz> + + PR middle-end/42068 + * gcc-interface/utils.c (create_var_decl_1): Do not set COMMON flag for + unit local variables. + +2010-01-17 Laurent GUERBY <laurent@guerby.net> + + * gcc-interface/Makefile.in: Fix typo in arm*-*-linux-gnueabi. + 2010-01-11 Mikael Pettersson <mikpe@it.uu.se> * gcc-interface/Makefile.in: Add arm*-*-linux-gnueabi. diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in index 1aa7ca1ba1f..41fd39a5200 100644 --- a/gcc/ada/gcc-interface/Makefile.in +++ b/gcc/ada/gcc-interface/Makefile.in @@ -1792,7 +1792,7 @@ ifeq ($(strip $(filter-out powerpc% linux%,$(arch) $(osys))),) LIBRARY_VERSION := $(LIB_VERSION) endif -ifeq ($(strip $(filter-out arm% linux-gnueabi,$(arch) $(osys)-$(word4,$(targ)))),) +ifeq ($(strip $(filter-out arm% linux-gnueabi,$(arch) $(osys)-$(word 4,$(targ)))),) LIBGNAT_TARGET_PAIRS = \ a-intnam.ads<a-intnam-linux.ads \ s-inmaop.adb<s-inmaop-posix.adb \ diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index 38795a0cea6..1444d6e8bcc 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 1992-2009, Free Software Foundation, Inc. * + * Copyright (C) 1992-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- * @@ -1385,24 +1385,26 @@ create_var_decl_1 (tree var_name, tree asm_name, tree type, tree var_init, /* At the global level, an initializer requiring code to be generated produces elaboration statements. Check that such statements are allowed, that is, not violating a No_Elaboration_Code restriction. */ - if (global_bindings_p () && var_init != 0 && ! init_const) + if (global_bindings_p () && var_init != 0 && !init_const) Check_Elaboration_Code_Allowed (gnat_node); + DECL_INITIAL (var_decl) = var_init; + TREE_READONLY (var_decl) = const_flag; + DECL_EXTERNAL (var_decl) = extern_flag; + TREE_PUBLIC (var_decl) = public_flag || extern_flag; + TREE_CONSTANT (var_decl) = constant_p; + TREE_THIS_VOLATILE (var_decl) = TREE_SIDE_EFFECTS (var_decl) + = TYPE_VOLATILE (type); + /* Ada doesn't feature Fortran-like COMMON variables so we shouldn't try to fiddle with DECL_COMMON. However, on platforms that don't support global BSS sections, uninitialized global variables would go in DATA instead, thus increasing the size of the executable. */ if (!flag_no_common && TREE_CODE (var_decl) == VAR_DECL + && TREE_PUBLIC (var_decl) && !have_global_bss_p ()) DECL_COMMON (var_decl) = 1; - DECL_INITIAL (var_decl) = var_init; - TREE_READONLY (var_decl) = const_flag; - DECL_EXTERNAL (var_decl) = extern_flag; - TREE_PUBLIC (var_decl) = public_flag || extern_flag; - TREE_CONSTANT (var_decl) = constant_p; - TREE_THIS_VOLATILE (var_decl) = TREE_SIDE_EFFECTS (var_decl) - = TYPE_VOLATILE (type); /* If it's public and not external, always allocate storage for it. At the global binding level we need to allocate static storage for the diff --git a/gcc/c-common.c b/gcc/c-common.c index 7552077d280..f9bdf38f2d2 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -6247,7 +6247,7 @@ handle_transparent_union_attribute (tree *node, tree name, *node = type = build_duplicate_type (type); } - TYPE_TRANSPARENT_UNION (type) = 1; + TYPE_TRANSPARENT_AGGR (type) = 1; return NULL_TREE; } diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 91d58844550..e48cdc88e4e 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -6953,10 +6953,10 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes, /* If this was supposed to be a transparent union, but we can't make it one, warn and turn off the flag. */ if (TREE_CODE (t) == UNION_TYPE - && TYPE_TRANSPARENT_UNION (t) + && TYPE_TRANSPARENT_AGGR (t) && (!TYPE_FIELDS (t) || TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t)))) { - TYPE_TRANSPARENT_UNION (t) = 0; + TYPE_TRANSPARENT_AGGR (t) = 0; warning_at (loc, 0, "union cannot be made transparent"); } diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 17bdbf92b3b..567c2a51282 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -1622,7 +1622,7 @@ type_lists_compatible_p (const_tree args1, const_tree args2, and wait (union wait *) to be compatible. */ if (TREE_CODE (a1) == UNION_TYPE && (TYPE_NAME (a1) == 0 - || TYPE_TRANSPARENT_UNION (a1)) + || TYPE_TRANSPARENT_AGGR (a1)) && TREE_CODE (TYPE_SIZE (a1)) == INTEGER_CST && tree_int_cst_equal (TYPE_SIZE (a1), TYPE_SIZE (a2))) @@ -1643,7 +1643,7 @@ type_lists_compatible_p (const_tree args1, const_tree args2, } else if (TREE_CODE (a2) == UNION_TYPE && (TYPE_NAME (a2) == 0 - || TYPE_TRANSPARENT_UNION (a2)) + || TYPE_TRANSPARENT_AGGR (a2)) && TREE_CODE (TYPE_SIZE (a2)) == INTEGER_CST && tree_int_cst_equal (TYPE_SIZE (a2), TYPE_SIZE (a1))) @@ -5014,9 +5014,10 @@ convert_for_assignment (location_t location, tree type, tree rhs, && comptypes (type, rhstype)) return convert_and_check (type, rhs); - /* Conversion to a transparent union from its member types. + /* Conversion to a transparent union or record from its member types. This applies only to function arguments. */ - if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type) + if (((codel == UNION_TYPE || codel == RECORD_TYPE) + && TYPE_TRANSPARENT_AGGR (type)) && errtype == ic_argpass) { tree memb, marginal_memb = NULL_TREE; diff --git a/gcc/calls.c b/gcc/calls.c index fe4bf0dbce5..ce54bbea846 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -1010,11 +1010,12 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED, if (type == error_mark_node || !COMPLETE_TYPE_P (type)) args[i].tree_value = integer_zero_node, type = integer_type_node; - /* If TYPE is a transparent union, pass things the way we would - pass the first field of the union. We have already verified that - the modes are the same. */ - if (TREE_CODE (type) == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)) - type = TREE_TYPE (TYPE_FIELDS (type)); + /* If TYPE is a transparent union or record, pass things the way + we would pass the first field of the union or record. We have + already verified that the modes are the same. */ + if ((TREE_CODE (type) == UNION_TYPE || TREE_CODE (type) == RECORD_TYPE) + && TYPE_TRANSPARENT_AGGR (type)) + type = TREE_TYPE (first_field (type)); /* Decide where to pass this arg. diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 70d2b355aa1..788242c3d82 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -1746,15 +1746,31 @@ expand_call_stmt (gimple stmt) tree exp; tree lhs = gimple_call_lhs (stmt); size_t i; + bool builtin_p; + tree decl; exp = build_vl_exp (CALL_EXPR, gimple_call_num_args (stmt) + 3); CALL_EXPR_FN (exp) = gimple_call_fn (stmt); + decl = gimple_call_fndecl (stmt); + builtin_p = decl && DECL_BUILT_IN (decl); + TREE_TYPE (exp) = gimple_call_return_type (stmt); CALL_EXPR_STATIC_CHAIN (exp) = gimple_call_chain (stmt); for (i = 0; i < gimple_call_num_args (stmt); i++) - CALL_EXPR_ARG (exp, i) = gimple_call_arg (stmt, i); + { + tree arg = gimple_call_arg (stmt, i); + gimple def; + /* TER addresses into arguments of builtin functions so we have a + chance to infer more correct alignment information. See PR39954. */ + if (builtin_p + && TREE_CODE (arg) == SSA_NAME + && (def = get_gimple_for_ssa_name (arg)) + && gimple_assign_rhs_code (def) == ADDR_EXPR) + arg = gimple_assign_rhs1 (def); + CALL_EXPR_ARG (exp, i) = arg; + } if (gimple_has_side_effects (stmt)) TREE_SIDE_EFFECTS (exp) = 1; diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index ebe662ad639..9cd5f16f488 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -1465,7 +1465,7 @@ assemble_thunk (struct cgraph_node *node) if (restmp && !this_adjusting) { - tree true_label = NULL_TREE, false_label = NULL_TREE; + tree true_label = NULL_TREE; if (TREE_CODE (TREE_TYPE (restmp)) == POINTER_TYPE) { @@ -1479,7 +1479,6 @@ assemble_thunk (struct cgraph_node *node) else_bb = create_basic_block (NULL, (void *) 0, else_bb); remove_edge (single_succ_edge (bb)); true_label = gimple_block_label (then_bb); - false_label = gimple_block_label (else_bb); stmt = gimple_build_cond (NE_EXPR, restmp, fold_convert (TREE_TYPE (restmp), integer_zero_node), diff --git a/gcc/collect2.c b/gcc/collect2.c index 777510b4e40..914015f06f9 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -1677,8 +1677,11 @@ main (int argc, char **argv) control whether we need a first pass link later on or not, and what will remain to be scanned there. */ - scanfilter this_filter - = shared_obj ? ld1_filter : (ld1_filter & ~SCAN_DWEH); + scanfilter this_filter = ld1_filter; +#if HAVE_AS_REF + if (!shared_obj) + this_filter &= ~SCAN_DWEH; +#endif while (export_object_lst < object) scan_prog_file (*export_object_lst++, PASS_OBJ, this_filter); diff --git a/gcc/config.gcc b/gcc/config.gcc index 59fa4d78d9c..1c7cb37f918 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1144,7 +1144,7 @@ i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu | i tmake_file="${tmake_file} i386/t-linux64" need_64bit_hwint=yes case X"${with_cpu}" in - Xgeneric|Xatom|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx) + Xgeneric|Xatom|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx|Xathlon64-sse3|Xk8-sse3|Xopteron-sse3) ;; X) if test x$with_cpu_64 = x; then @@ -1153,7 +1153,7 @@ i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu | i ;; *) echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2 - echo "generic atom core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx" 1>&2 + echo "generic atom core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx athlon64-sse3 k8-sse3 opteron-sse3" 1>&2 exit 1 ;; esac @@ -1260,7 +1260,7 @@ i[34567]86-*-solaris2*) need_64bit_hwint=yes use_gcc_stdint=wrap case X"${with_cpu}" in - Xgeneric|Xatom|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx) + Xgeneric|Xatom|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx|Xathlon64-sse3|Xk8-sse3|Xopteron-sse3) ;; X) if test x$with_cpu_64 = x; then @@ -1269,7 +1269,7 @@ i[34567]86-*-solaris2*) ;; *) echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2 - echo "generic atom core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx" 1>&2 + echo "generic atom core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx athlon64-sse3 k8-sse3 opteron-sse3" 1>&2 exit 1 ;; esac @@ -1339,7 +1339,7 @@ i[34567]86-*-mingw* | x86_64-*-mingw*) if test x$enable_targets = xall; then tm_defines="${tm_defines} TARGET_BI_ARCH=1" case X"${with_cpu}" in - Xgeneric|Xatom|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx) + Xgeneric|Xatom|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx|Xathlon64-sse3|Xk8-sse3|Xopteron-sse3) ;; X) if test x$with_cpu_64 = x; then @@ -1348,7 +1348,7 @@ i[34567]86-*-mingw* | x86_64-*-mingw*) ;; *) echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2 - echo "generic atom core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx" 1>&2 + echo "generic atom core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx athlon64-sse3 k8-sse3 opteron-sse3" 1>&2 exit 1 ;; esac @@ -2629,8 +2629,11 @@ if test x$with_cpu = x ; then case ${target_noncanonical} in amdfam10-*|barcelona-*) with_cpu=amdfam10 + ;; + k8_sse3-*|opteron_sse3-*|athlon64_sse3-*) + with_cpu=k8-sse3 ;; - k8-*|opteron-*|athlon_64-*) + k8-*|opteron-*|athlon64-*|athlon_fx-*) with_cpu=k8 ;; athlon_xp-*|athlon_mp-*|athlon_4-*) @@ -2676,7 +2679,10 @@ if test x$with_cpu = x ; then amdfam10-*|barcelona-*) with_cpu=amdfam10 ;; - k8-*|opteron-*|athlon_64-*) + k8_sse3-*|opteron_sse3-*|athlon64_sse3-*) + with_cpu=k8-sse3 + ;; + k8-*|opteron-*|athlon64-*|athlon_fx-*) with_cpu=k8 ;; nocona-*) @@ -2970,7 +2976,7 @@ case "${target}" in esac # OK ;; - "" | amdfam10 | barcelona | k8 | opteron | athlon64 | athlon-fx | nocona | core2 | atom | generic) + "" | amdfam10 | barcelona | k8-sse3 | opteron-sse3 | athlon64-sse3 | k8 | opteron | athlon64 | athlon-fx | nocona | core2 | atom | generic) # OK ;; *) diff --git a/gcc/config.in b/gcc/config.in index 1686be9d0ea..a3744f99dcb 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -393,6 +393,12 @@ #endif +/* Define if your assembler supports .ref */ +#ifndef USED_FOR_TARGET +#undef HAVE_AS_REF +#endif + + /* Define if your assembler supports .register. */ #ifndef USED_FOR_TARGET #undef HAVE_AS_REGISTER_PSEUDO_OP diff --git a/gcc/config/alpha/predicates.md b/gcc/config/alpha/predicates.md index b52d9dce028..0852f692998 100644 --- a/gcc/config/alpha/predicates.md +++ b/gcc/config/alpha/predicates.md @@ -439,13 +439,11 @@ (match_code "mem")) { rtx base; + int offset; if (MEM_ALIGN (op) >= 32) return 1; - if (mode == CQImode) - return 0; - op = XEXP (op, 0); /* LEGITIMIZE_RELOAD_ADDRESS creates (plus (plus reg const_hi) const_lo) @@ -453,14 +451,29 @@ if (reload_in_progress && GET_CODE (op) == PLUS && GET_CODE (XEXP (op, 0)) == PLUS) - base = XEXP (XEXP (op, 0), 0); + { + base = XEXP (XEXP (op, 0), 0); + offset = INTVAL (XEXP (op, 1)); + } else { if (! memory_address_p (mode, op)) return 0; - base = (GET_CODE (op) == PLUS ? XEXP (op, 0) : op); + if (GET_CODE (op) == PLUS) + { + base = XEXP (op, 0); + offset = INTVAL (XEXP (op, 1)); + } + else + { + base = op; + offset = 0; + } } + if (offset % GET_MODE_SIZE (mode)) + return 0; + return (REG_P (base) && REGNO_POINTER_ALIGN (REGNO (base)) >= 32); }) @@ -471,13 +484,11 @@ (match_code "mem")) { rtx base; + int offset; if (MEM_ALIGN (op) >= 32) return 0; - if (mode == CQImode) - return 1; - op = XEXP (op, 0); /* LEGITIMIZE_RELOAD_ADDRESS creates (plus (plus reg const_hi) const_lo) @@ -485,14 +496,29 @@ if (reload_in_progress && GET_CODE (op) == PLUS && GET_CODE (XEXP (op, 0)) == PLUS) - base = XEXP (XEXP (op, 0), 0); + { + base = XEXP (XEXP (op, 0), 0); + offset = INTVAL (XEXP (op, 1)); + } else { if (! memory_address_p (mode, op)) return 0; - base = (GET_CODE (op) == PLUS ? XEXP (op, 0) : op); + if (GET_CODE (op) == PLUS) + { + base = XEXP (op, 0); + offset = INTVAL (XEXP (op, 1)); + } + else + { + base = op; + offset = 0; + } } + if (offset % GET_MODE_SIZE (mode)) + return 1; + return (REG_P (base) && REGNO_POINTER_ALIGN (REGNO (base)) < 32); }) diff --git a/gcc/config/arm/neon-testgen.ml b/gcc/config/arm/neon-testgen.ml index f1c431a3841..be86386cbf0 100644 --- a/gcc/config/arm/neon-testgen.ml +++ b/gcc/config/arm/neon-testgen.ml @@ -1,5 +1,5 @@ (* Auto-generate ARM Neon intrinsics tests. - Copyright (C) 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. Contributed by CodeSourcery. This file is part of GCC. @@ -58,7 +58,7 @@ let emit_prologue chan test_name = (* Emit declarations of local variables that are going to be passed to an intrinsic, together with one to take a returned value if needed. *) -let emit_automatics chan c_types = +let emit_automatics chan c_types features = let emit () = ignore ( List.fold_left (fun arg_number -> fun (flags, ty) -> @@ -75,11 +75,17 @@ let emit_automatics chan c_types = in match c_types with (_, return_ty) :: tys -> - if return_ty <> "void" then - (* The intrinsic returns a value. *) - (Printf.fprintf chan " %s out_%s;\n" return_ty return_ty; - emit ()) - else + if return_ty <> "void" then begin + (* The intrinsic returns a value. We need to do explict register + allocation for vget_low tests or they fail because of copy + elimination. *) + ((if List.mem Fixed_return_reg features then + Printf.fprintf chan " register %s out_%s asm (\"d18\");\n" + return_ty return_ty + else + Printf.fprintf chan " %s out_%s;\n" return_ty return_ty); + emit ()) + end else (* The intrinsic does not return a value. *) emit () | _ -> assert false @@ -257,7 +263,7 @@ let test_intrinsic dir opcode features shape name munge elt_ty = (* Emit file and function prologues. *) emit_prologue chan test_name; (* Emit local variable declarations. *) - emit_automatics chan c_types; + emit_automatics chan c_types features; Printf.fprintf chan "\n"; (* Emit the call to the intrinsic. *) emit_call chan const_valuator c_types name elt_ty; diff --git a/gcc/config/arm/neon.ml b/gcc/config/arm/neon.ml index 466b06b0fff..f77f05cc825 100644 --- a/gcc/config/arm/neon.ml +++ b/gcc/config/arm/neon.ml @@ -1,7 +1,7 @@ (* Common code for ARM NEON header file, documentation and test case generators. - Copyright (C) 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. Contributed by CodeSourcery. This file is part of GCC. @@ -234,6 +234,7 @@ type features = cases. The function supplied must return the integer to be written into the testcase for the argument number (0-based) supplied to it. *) | Const_valuator of (int -> int) + | Fixed_return_reg exception MixedMode of elts * elts @@ -1089,9 +1090,13 @@ let ops = Use_operands [| Dreg; Qreg |], "vget_high", notype_1, pf_su_8_64; Vget_low, [Instruction_name ["vmov"]; - Disassembles_as [Use_operands [| Dreg; Dreg |]]], + Disassembles_as [Use_operands [| Dreg; Dreg |]]; + Fixed_return_reg], Use_operands [| Dreg; Qreg |], "vget_low", - notype_1, pf_su_8_64; + notype_1, pf_su_8_32; + Vget_low, [No_op], + Use_operands [| Dreg; Qreg |], "vget_low", + notype_1, [S64; U64]; (* Conversions. *) Vcvt, [InfoWord], All (2, Dreg), "vcvt", conv_1, diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index 7bb1e7a6c5c..e9e2216c270 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -83,7 +83,7 @@ static int h8300_interrupt_function_p (tree); static int h8300_saveall_function_p (tree); static int h8300_monitor_function_p (tree); static int h8300_os_task_function_p (tree); -static void h8300_emit_stack_adjustment (int, HOST_WIDE_INT); +static void h8300_emit_stack_adjustment (int, HOST_WIDE_INT, bool); static HOST_WIDE_INT round_frame_size (HOST_WIDE_INT); static unsigned int compute_saved_regs (void); static void push (int); @@ -509,9 +509,10 @@ byte_reg (rtx x, int b) /* We use this to wrap all emitted insns in the prologue. */ static rtx -F (rtx x) +F (rtx x, bool set_it) { - RTX_FRAME_RELATED_P (x) = 1; + if (set_it) + RTX_FRAME_RELATED_P (x) = 1; return x; } @@ -528,7 +529,7 @@ Fpa (rtx par) int i; for (i = 0; i < len; i++) - F (XVECEXP (par, 0, i)); + F (XVECEXP (par, 0, i), true); return par; } @@ -537,7 +538,7 @@ Fpa (rtx par) SIZE to adjust the stack pointer. */ static void -h8300_emit_stack_adjustment (int sign, HOST_WIDE_INT size) +h8300_emit_stack_adjustment (int sign, HOST_WIDE_INT size, bool in_prologue) { /* If the frame size is 0, we don't have anything to do. */ if (size == 0) @@ -552,9 +553,9 @@ h8300_emit_stack_adjustment (int sign, HOST_WIDE_INT size) && !(cfun->static_chain_decl != NULL && sign < 0)) { rtx r3 = gen_rtx_REG (Pmode, 3); - F (emit_insn (gen_movhi (r3, GEN_INT (sign * size)))); + F (emit_insn (gen_movhi (r3, GEN_INT (sign * size))), in_prologue); F (emit_insn (gen_addhi3 (stack_pointer_rtx, - stack_pointer_rtx, r3))); + stack_pointer_rtx, r3)), in_prologue); } else { @@ -568,11 +569,11 @@ h8300_emit_stack_adjustment (int sign, HOST_WIDE_INT size) rtx x = emit_insn (gen_addhi3 (stack_pointer_rtx, stack_pointer_rtx, GEN_INT (sign * size))); if (size < 4) - F (x); + F (x, in_prologue); } else F (emit_insn (gen_addsi3 (stack_pointer_rtx, - stack_pointer_rtx, GEN_INT (sign * size)))); + stack_pointer_rtx, GEN_INT (sign * size))), in_prologue); } } @@ -622,7 +623,7 @@ push (int rn) x = gen_push_h8300hs_advanced (reg); else x = gen_push_h8300hs_normal (reg); - x = F (emit_insn (x)); + x = F (emit_insn (x), 1); REG_NOTES (x) = gen_rtx_EXPR_LIST (REG_INC, stack_pointer_rtx, 0); } @@ -854,7 +855,7 @@ h8300_expand_prologue (void) { /* Push fp. */ push (HARD_FRAME_POINTER_REGNUM); - F (emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx)); + F (emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx), 1); } /* Push the rest of the registers in ascending order. */ @@ -885,7 +886,7 @@ h8300_expand_prologue (void) } /* Leave room for locals. */ - h8300_emit_stack_adjustment (-1, round_frame_size (get_frame_size ())); + h8300_emit_stack_adjustment (-1, round_frame_size (get_frame_size ()), true); } /* Return nonzero if we can use "rts" for the function currently being @@ -920,7 +921,7 @@ h8300_expand_epilogue (void) returned_p = false; /* Deallocate locals. */ - h8300_emit_stack_adjustment (1, frame_size); + h8300_emit_stack_adjustment (1, frame_size, false); /* Pop the saved registers in descending order. */ saved_regs = compute_saved_regs (); diff --git a/gcc/config/i386/cygwin.h b/gcc/config/i386/cygwin.h index 86eff635ae6..0a395c64ecc 100644 --- a/gcc/config/i386/cygwin.h +++ b/gcc/config/i386/cygwin.h @@ -87,7 +87,7 @@ along with GCC; see the file COPYING3. If not see /* To implement C++ function replacement we always wrap the cxx malloc-like operators. See N2800 #17.6.4.6 [replacement.functions] */ -#define CXX_WRAP_SPEC_LIST "%{!static: %{!static-libstdc++: \ +#define CXX_WRAP_SPEC_LIST " \ --wrap _Znwj \ --wrap _Znaj \ --wrap _ZdlPv \ @@ -96,7 +96,7 @@ along with GCC; see the file COPYING3. If not see --wrap _ZnajRKSt9nothrow_t \ --wrap _ZdlPvRKSt9nothrow_t \ --wrap _ZdaPvRKSt9nothrow_t \ - }}" +" #if defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS) diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 1926c504ad1..6b1c9b9c61f 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -13387,16 +13387,6 @@ ix86_fixup_binary_operands (enum rtx_code code, enum machine_mode mode, if (MEM_P (src1) && !rtx_equal_p (dst, src1)) src1 = force_reg (mode, src1); - /* In order for the multiply-add patterns to get matched, we need - to aid combine by forcing all operands into registers to start. */ - if (optimize && TARGET_FMA4) - { - if (MEM_P (src2)) - src2 = force_reg (GET_MODE (src2), src2); - else if (MEM_P (src1)) - src1 = force_reg (GET_MODE (src1), src1); - } - operands[1] = src1; operands[2] = src2; return dst; diff --git a/gcc/config/rs6000/aix.h b/gcc/config/rs6000/aix.h index 4676110b44e..380b0b8b532 100644 --- a/gcc/config/rs6000/aix.h +++ b/gcc/config/rs6000/aix.h @@ -43,11 +43,13 @@ collect has a chance to see them, so scan the object files directly. */ #define COLLECT_EXPORT_LIST +#if HAVE_AS_REF /* Issue assembly directives that create a reference to the given DWARF table identifier label from the current function section. This is defined to ensure we drag frame frame tables associated with needed function bodies in a link with garbage collection activated. */ #define ASM_OUTPUT_DWARF_TABLE_REF rs6000_aix_asm_output_dwarf_table_ref +#endif /* Handle #pragma weak and #pragma pack. */ #define HANDLE_SYSV_PRAGMA 1 diff --git a/gcc/configure b/gcc/configure index daa43835784..6e6a54adde3 100755 --- a/gcc/configure +++ b/gcc/configure @@ -23636,6 +23636,50 @@ if test $gcc_cv_as_powerpc_tls_markers = yes; then $as_echo "#define HAVE_AS_TLS_MARKERS 1" >>confdefs.h fi + + case $target in + *-*-aix*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .ref support" >&5 +$as_echo_n "checking assembler for .ref support... " >&6; } +if test "${gcc_cv_as_aix_ref+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + gcc_cv_as_aix_ref=no + if test $in_tree_gas = yes; then + if test $gcc_cv_gas_vers -ge `expr \( \( 2.21.0 \* 1000 \) + gcc_cv_as_aix_ref=yes \) \* 1000 + ` + then : +fi + elif test x$gcc_cv_as != x; then + echo ' .csect stuff[rw] + stuff: + .long 1 + .extern sym + .ref sym + ' > 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 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } + then + gcc_cv_as_aix_ref=yes + else + echo "configure: failed program was" >&5 + cat conftest.s >&5 + fi + rm -f conftest.o conftest.s + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_aix_ref" >&5 +$as_echo "$gcc_cv_as_aix_ref" >&6; } +if test $gcc_cv_as_aix_ref = yes; then + +$as_echo "#define HAVE_AS_REF 1" >>confdefs.h + +fi + ;; + esac ;; mips*-*-*) diff --git a/gcc/configure.ac b/gcc/configure.ac index dc329f5f20d..14d649b41b6 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -3326,6 +3326,21 @@ LCF0: [ bl __tls_get_addr(x@tlsgd)],, [AC_DEFINE(HAVE_AS_TLS_MARKERS, 1, [Define if your assembler supports arg info for __tls_get_addr.])]) + + case $target in + *-*-aix*) + gcc_GAS_CHECK_FEATURE([.ref support], + gcc_cv_as_aix_ref, [2.21.0],, + [ .csect stuff[[rw]] + stuff: + .long 1 + .extern sym + .ref sym + ],, + [AC_DEFINE(HAVE_AS_REF, 1, + [Define if your assembler supports .ref])]) + ;; + esac ;; mips*-*-*) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9f73d86c22e..43da561ffd2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,78 @@ +2010-01-20 Janis Johnson <janis187@us.ibm.com> + Jason Merrill <jason@redhat.com> + + * mangle.c (write_type): Mangle transparent record as member type. + * semantics.c (begin_class_definition): Recognize decimal classes + and set TYPE_TRANSPARENT_AGGR. + +2010-01-20 Jason Merrill <jason@redhat.com> + + PR c++/42338 + * mangle.c (write_expression): Handle tree codes that have extra + arguments in the middle-end. + +2010-01-20 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/42038 + * except.c (expand_start_catch_block): Deal correctly with + do_begin_catch returning error_mark_node. + +2010-01-20 Jason Merrill <jason@redhat.com> + + PR c++/41788 + * class.c (layout_class_type): Set packed_maybe_necessary for packed + non-PODs. + + PR c++/41920 + * semantics.c (build_lambda_object): Call mark_used on captured + variables. + + PR c++/40750 + * decl.c (grokdeclarator): Clear type_quals for a member function + declared using a typedef. Don't complain about adding cv-quals + to a function typedef in C++0x mode. + +2010-01-20 Jakub Jelinek <jakub@redhat.com> + + * decl.c (create_array_type_for_decl): Remove set but not used + variable error_msg. Remove break stmts after return stmts. + +2010-01-19 Dodji Seketeli <dodji@redhat.com> + + * error.c (dump_template_parms, count_non_default_template_args): + Revert fix of PR c++/42634. + +2010-01-18 Dodji Seketeli <dodji@redhat.com> + + PR c++/42634 + * error.c (dump_template_parms): Use innermost template + arguments before calling count_non_default_template_args. + (count_non_default_template_args): We are being called with + template innermost arguments now. There is no need to ensure + that again. + +2010-01-18 Dodji Seketeli <dodji@redhat.com> + + PR c++/42766 + * cvt.c (build_expr_type_conversion): Look through OVERLOAD. + +2010-01-17 Dodji Seketeli <dodji@redhat.com> + + PR c++/42697 + *pt.c (tsubst_decl): Revert commit for PR c++/42697. + +2010-01-17 Dodji Seketeli <dodji@redhat.com> + + PR c++/42697 + *pt.c (tsubst_decl): Get the arguments of a specialization from + the specialization template, not from the most general template. + +2010-01-16 Jason Merrill <jason@redhat.com> + + PR c++/42761 + * semantics.c (finish_decltype_type): Within a template, treat + unresolved CALL_EXPR as dependent. + 2010-01-15 Dodji Seketeli <dodji@redhat.com> * error.c (dump_template_parms,count_non_default_template_args): diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 16d566682a6..f88914d3c22 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -5216,6 +5216,11 @@ layout_class_type (tree t, tree *virtuals_p) build_decl (input_location, FIELD_DECL, NULL_TREE, char_type_node)); + /* If this is a non-POD, declaring it packed makes a difference to how it + can be used as a field; don't let finalize_record_size undo it. */ + if (TYPE_PACKED (t) && !layout_pod_type_p (t)) + rli->packed_maybe_necessary = true; + /* Let the back end lay out the type. */ finish_record_layout (rli, /*free_p=*/true); diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index b4cc2b3ed8c..cbe85965a59 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -1203,6 +1203,7 @@ build_expr_type_conversion (int desires, tree expr, bool complain) int win = 0; tree candidate; tree cand = TREE_VALUE (conv); + cand = OVL_CURRENT (cand); if (winner && winner == cand) continue; diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 2409aa31b15..920d75b75a8 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -7422,15 +7422,11 @@ static tree create_array_type_for_decl (tree name, tree type, tree size) { tree itype = NULL_TREE; - const char* error_msg; /* If things have already gone awry, bail now. */ if (type == error_mark_node || size == error_mark_node) return error_mark_node; - /* Assume that everything will go OK. */ - error_msg = NULL; - /* If there are some types which cannot be array elements, issue an error-message and return. */ switch (TREE_CODE (type)) @@ -7441,7 +7437,6 @@ create_array_type_for_decl (tree name, tree type, tree size) else error ("creating array of void"); return error_mark_node; - break; case FUNCTION_TYPE: if (name) @@ -7449,7 +7444,6 @@ create_array_type_for_decl (tree name, tree type, tree size) else error ("creating array of functions"); return error_mark_node; - break; case REFERENCE_TYPE: if (name) @@ -7457,7 +7451,6 @@ create_array_type_for_decl (tree name, tree type, tree size) else error ("creating array of references"); return error_mark_node; - break; case METHOD_TYPE: if (name) @@ -7465,7 +7458,6 @@ create_array_type_for_decl (tree name, tree type, tree size) else error ("creating array of function members"); return error_mark_node; - break; default: break; @@ -8157,7 +8149,7 @@ grokdeclarator (const cp_declarator *declarator, /* This was an error in C++98 (cv-qualifiers cannot be added to a function type), but DR 295 makes the code well-formed by dropping the extra qualifiers. */ - if (pedantic) + if (pedantic && cxx_dialect == cxx98) { tree bad_type = build_qualified_type (type, type_quals); pedwarn (input_location, OPT_pedantic, @@ -9054,6 +9046,7 @@ grokdeclarator (const cp_declarator *declarator, /* The qualifiers on the function type become the qualifiers on the non-static member function. */ memfn_quals |= cp_type_quals (type); + type_quals = TYPE_UNQUALIFIED; } } diff --git a/gcc/cp/except.c b/gcc/cp/except.c index 83164c86a7e..4f4f85b490d 100644 --- a/gcc/cp/except.c +++ b/gcc/cp/except.c @@ -1,6 +1,6 @@ /* Handle exceptional things in C++. Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009 + 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. Contributed by Michael Tiemann <tiemann@cygnus.com> Rewritten by Mike Stump <mrs@cygnus.com>, based upon an @@ -417,7 +417,7 @@ tree expand_start_catch_block (tree decl) { tree exp; - tree type; + tree type, init; if (! doing_eh (1)) return NULL_TREE; @@ -450,10 +450,12 @@ expand_start_catch_block (tree decl) /* Call __cxa_end_catch at the end of processing the exception. */ push_eh_cleanup (type); + init = do_begin_catch (); + /* If there's no decl at all, then all we need to do is make sure to tell the runtime that we've begun handling the exception. */ - if (decl == NULL || decl == error_mark_node) - finish_expr_stmt (do_begin_catch ()); + if (decl == NULL || decl == error_mark_node || init == error_mark_node) + finish_expr_stmt (init); /* If the C++ object needs constructing, we need to do that before calling __cxa_begin_catch, so that std::uncaught_exception gets @@ -463,7 +465,7 @@ expand_start_catch_block (tree decl) { exp = do_get_exception_ptr (); initialize_handler_parm (decl, exp); - finish_expr_stmt (do_begin_catch ()); + finish_expr_stmt (init); } /* Otherwise the type uses a bitwise copy, and we don't have to worry @@ -471,7 +473,6 @@ expand_start_catch_block (tree decl) copy with the return value of __cxa_end_catch instead. */ else { - tree init = do_begin_catch (); tree init_type = type; /* Pointers are passed by values, everything else by reference. */ diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index 13b0ed47af3..c14f5b7d844 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -1732,6 +1732,12 @@ write_type (tree type) if (find_substitution (type)) return; + /* According to the C++ ABI, some library classes are passed the + same as the scalar type of their single member and use the same + mangling. */ + if (TREE_CODE (type) == RECORD_TYPE && TYPE_TRANSPARENT_AGGR (type)) + type = TREE_TYPE (first_field (type)); + if (write_CV_qualifiers_for_type (type) > 0) /* If TYPE was CV-qualified, we just wrote the qualifiers; now mangle the unqualified type. The recursive call is needed here @@ -2481,7 +2487,7 @@ write_expression (tree expr) } else { - int i; + int i, len; const char *name; /* When we bind a variable or function to a non-type template @@ -2582,7 +2588,27 @@ write_expression (tree expr) break; default: - for (i = 0; i < TREE_OPERAND_LENGTH (expr); ++i) + /* In the middle-end, some expressions have more operands than + they do in templates (and mangling). */ + switch (code) + { + case PREINCREMENT_EXPR: + case PREDECREMENT_EXPR: + case POSTINCREMENT_EXPR: + case POSTDECREMENT_EXPR: + len = 1; + break; + + case ARRAY_REF: + len = 2; + break; + + default: + len = TREE_OPERAND_LENGTH (expr); + break; + } + + for (i = 0; i < len; ++i) { tree operand = TREE_OPERAND (expr, i); /* As a GNU extension, the middle operand of a diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index b2f9fd31f56..d9ba591b3f5 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2368,6 +2368,18 @@ begin_class_definition (tree t, tree attributes) error ("definition of %q#T inside template parameter list", t); return error_mark_node; } + + /* According to the C++ ABI, decimal classes defined in ISO/IEC TR 24733 + are passed the same as decimal scalar types. */ + if (TREE_CODE (t) == RECORD_TYPE) + { + const char *n = type_as_string (t, TFF_CLASS_KEY_OR_ENUM); + if ((strcmp (n, "class std::decimal::decimal32") == 0) + || (strcmp (n, "class std::decimal::decimal64") == 0) + || (strcmp (n, "class std::decimal::decimal128") == 0)) + TYPE_TRANSPARENT_AGGR (t) = 1; + } + /* A non-implicit typename comes from code like: template <typename T> struct A { @@ -4803,6 +4815,7 @@ finish_decltype_type (tree expr, bool id_expression_or_member_access_p) if (type && !type_uses_auto (type)) return type; + treat_as_dependent: type = cxx_make_type (DECLTYPE_TYPE); DECLTYPE_TYPE_EXPR (type) = expr; DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type) @@ -4930,6 +4943,11 @@ finish_decltype_type (tree expr, bool id_expression_or_member_access_p) && (TREE_CODE (TREE_TYPE (target_type)) == FUNCTION_TYPE || TREE_CODE (TREE_TYPE (target_type)) == METHOD_TYPE)) type = TREE_TYPE (TREE_TYPE (target_type)); + else if (processing_template_decl) + /* Within a template finish_call_expr doesn't resolve + CALL_EXPR_FN, so even though this decltype isn't really + dependent let's defer resolving it. */ + goto treat_as_dependent; else sorry ("unable to determine the declared type of expression %<%E%>", expr); @@ -5402,6 +5420,9 @@ build_lambda_object (tree lambda_expr) tree field = TREE_PURPOSE (node); tree val = TREE_VALUE (node); + if (DECL_P (val)) + mark_used (val); + /* Mere mortals can't copy arrays with aggregate initialization, so do some magic to make it work here. */ if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE) diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 16e984e55a2..c8f211de384 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -4698,11 +4698,9 @@ number of arguments. @findex current_function_pops_args Your definition of the macro @code{RETURN_POPS_ARGS} decides which functions pop their own arguments. @code{TARGET_ASM_FUNCTION_EPILOGUE} -needs to know what was decided. The variable that is called -@code{current_function_pops_args} is the number of bytes of its -arguments that a function should pop. @xref{Scalar Return}. -@c what is the "its arguments" in the above sentence referring to, pray -@c tell? --mew 5feb93 +needs to know what was decided. The number of bytes of the current +function's arguments that this function should pop is available in +@code{crtl->args.pops_args}. @xref{Scalar Return}. @end deftypefn @itemize @bullet @@ -5253,8 +5251,8 @@ provide alternate names for GCC's internal library functions if there are ABI-mandated names that the compiler should provide. @end defmac -@findex init_one_libfunc @findex set_optab_libfunc +@findex init_one_libfunc @deftypefn {Target Hook} void TARGET_INIT_LIBFUNCS (void) This hook should declare additional library routines or rename existing ones, using the functions @code{set_optab_libfunc} and @@ -5412,12 +5410,12 @@ the maximum number that @code{TARGET_LEGITIMATE_ADDRESS_P} would ever accept. @end defmac -@deftypefn {Target Hook} TARGET_LEGITIMATE_ADDRESS_P (enum machine_mode @var{mode}, rtx @var{x}, bool @var{strict}) +@deftypefn {Target Hook} bool TARGET_LEGITIMATE_ADDRESS_P (enum machine_mode @var{mode}, rtx @var{x}, bool @var{strict}) A function that returns whether @var{x} (an RTX) is a legitimate memory address on the target machine for a memory operand of mode @var{mode}. Legitimate addresses are defined in two variants: a strict variant and a -non-strict one. The @code{strict} parameter chooses which variant is +non-strict one. The @var{strict} parameter chooses which variant is desired by the caller. The strict variant is used in the reload pass. It must be defined so @@ -5619,10 +5617,10 @@ of @var{x}. The default version returns false for all constants. @end deftypefn -@deftypefn {Target Hook} tree TARGET_BUILTIN_RECIPROCAL (enum tree_code @var{fn}, bool @var{tm_fn}, bool @var{sqrt}) +@deftypefn {Target Hook} tree TARGET_BUILTIN_RECIPROCAL (unsigned @var{fn}, bool @var{md_fn}, bool @var{sqrt}) This hook should return the DECL of a function that implements reciprocal of the builtin function with builtin function code @var{fn}, or -@code{NULL_TREE} if such a function is not available. @var{tm_fn} is true +@code{NULL_TREE} if such a function is not available. @var{md_fn} is true when @var{fn} is a code of a machine-dependent builtin function. When @var{sqrt} is true, additional optimizations that apply only to the reciprocal of a square root function are performed, and only reciprocals of @code{sqrt} @@ -6000,7 +5998,7 @@ like: @end smallexample @end defmac -@deftypefn {Target Hook} bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int *, unsigned int *) +@deftypefn {Target Hook} bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int *@var{p1}, unsigned int *@var{p2}) On targets which do not use @code{(cc0)}, and which use a hard register rather than a pseudo-register to hold condition codes, the regular CSE passes are often not able to identify cases in which the @@ -6009,13 +6007,13 @@ small pass which optimizes such cases. This hook should return true to enable this pass, and it should set the integers to which its arguments point to the hard register numbers used for condition codes. When there is only one such register, as is true on most systems, the -integer pointed to by the second argument should be set to +integer pointed to by @var{p2} should be set to @code{INVALID_REGNUM}. The default version of this hook returns false. @end deftypefn -@deftypefn {Target Hook} enum machine_mode TARGET_CC_MODES_COMPATIBLE (enum machine_mode, enum machine_mode) +@deftypefn {Target Hook} {enum machine_mode} TARGET_CC_MODES_COMPATIBLE (enum machine_mode @var{m1}, enum machine_mode @var{m2}) On targets which use multiple condition code modes in class @code{MODE_CC}, it is sometimes the case that a comparison can be validly done in more than one mode. On such a system, define this @@ -6422,7 +6420,7 @@ can issue this cycle; normally this is just @code{issue_rate}. See also @samp{TARGET_SCHED_REORDER2}. @end deftypefn -@deftypefn {Target Hook} int TARGET_SCHED_REORDER2 (FILE *@var{file}, int @var{verbose}, rtx *@var{ready}, int *@var{n_ready}, @var{clock}) +@deftypefn {Target Hook} int TARGET_SCHED_REORDER2 (FILE *@var{file}, int @var{verbose}, rtx *@var{ready}, int *@var{n_readyp}, int @var{clock}) Like @samp{TARGET_SCHED_REORDER}, but called at a different time. That function is called whenever the scheduler starts a new cycle. This one is called once per iteration over a cycle, immediately after @@ -6475,7 +6473,7 @@ This is the cleanup hook corresponding to @code{TARGET_SCHED_INIT_GLOBAL}. @var{verbose} is the verbose level provided by @option{-fsched-verbose-@var{n}}. @end deftypefn -@deftypefn {Target Hook} int TARGET_SCHED_DFA_PRE_CYCLE_INSN (void) +@deftypefn {Target Hook} rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void) The hook returns an RTL insn. The automaton state used in the pipeline hazard recognizer is changed as if the insn were scheduled when the new simulated processor cycle starts. Usage of the hook may @@ -6489,7 +6487,7 @@ when the new simulated processor cycle starts. The hook can be used to initialize data used by the previous hook. @end deftypefn -@deftypefn {Target Hook} int TARGET_SCHED_DFA_POST_CYCLE_INSN (void) +@deftypefn {Target Hook} rtx TARGET_SCHED_DFA_POST_CYCLE_INSN (void) The hook is analogous to @samp{TARGET_SCHED_DFA_PRE_CYCLE_INSN} but used to changed the state as if the insn were scheduled when the new simulated processor cycle finishes. @@ -6500,14 +6498,14 @@ The hook is analogous to @samp{TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN} but used to initialize data used by the previous hook. @end deftypefn -@deftypefn {Target Hook} void TARGET_SCHED_DFA_PRE_CYCLE_ADVANCE (void) +@deftypefn {Target Hook} void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void) The hook to notify target that the current simulated cycle is about to finish. The hook is analogous to @samp{TARGET_SCHED_DFA_PRE_CYCLE_INSN} but used to change the state in more complicated situations - e.g., when advancing state on a single insn is not enough. @end deftypefn -@deftypefn {Target Hook} void TARGET_SCHED_DFA_POST_CYCLE_ADVANCE (void) +@deftypefn {Target Hook} void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void) The hook to notify target that new simulated cycle has just started. The hook is analogous to @samp{TARGET_SCHED_DFA_POST_CYCLE_INSN} but used to change the state in more complicated situations - e.g., when advancing @@ -6543,11 +6541,11 @@ schedules to choose the best one. The default is no multipass scheduling. @end deftypefn -@deftypefn {Target Hook} int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD (rtx) +@deftypefn {Target Hook} int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD (rtx @var{insn}) This hook controls what insns from the ready insn queue will be considered for the multipass insn scheduling. If the hook returns -zero for insn passed as the parameter, the insn will be not chosen to +zero for @var{insn}, the insn will be not chosen to be issued. The default is that any ready insns can be chosen to be issued. @@ -6567,13 +6565,13 @@ correspondingly processor cycle on which the previous insn has been issued and the current processor cycle. @end deftypefn -@deftypefn {Target Hook} bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct dep_def *@var{_dep}, int @var{cost}, int @var{distance}) +@deftypefn {Target Hook} bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep *@var{_dep}, int @var{cost}, int @var{distance}) This hook is used to define which dependences are considered costly by the target, so costly that it is not advisable to schedule the insns that are involved in the dependence too close to one another. The parameters to this hook are as follows: The first parameter @var{_dep} is the dependence being evaluated. The second parameter @var{cost} is the cost of the -dependence, and the third +dependence as estimated by the scheduler, and the third parameter @var{distance} is the distance in cycles between the two insns. The hook returns @code{true} if considering the distance between the two insns the dependence between them is considered costly by the target, @@ -6585,7 +6583,7 @@ delays, however: (b) there's a better chance to predict the actual grouping that will be formed, and (c) correctly emulating the grouping can be very important. In such targets one may want to allow issuing dependent insns closer to one another---i.e., closer than the dependence distance; however, -not in cases of "costly dependences", which this hooks allows to define. +not in cases of ``costly dependences'', which this hooks allows to define. @end deftypefn @deftypefn {Target Hook} void TARGET_SCHED_H_I_D_EXTENDED (void) @@ -6601,35 +6599,11 @@ Return a pointer to a store large enough to hold target scheduling context. @deftypefn {Target Hook} void TARGET_SCHED_INIT_SCHED_CONTEXT (void *@var{tc}, bool @var{clean_p}) Initialize store pointed to by @var{tc} to hold target scheduling context. It @var{clean_p} is true then initialize @var{tc} as if scheduler is at the -beginning of the block. Otherwise, make a copy of the current context in -@var{tc}. -@end deftypefn - -@deftypefn {Target Hook} void TARGET_SCHED_SET_SCHED_CONTEXT (void *@var{tc}) -Copy target scheduling context pointer to by @var{tc} to the current context. -@end deftypefn - -@deftypefn {Target Hook} void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *@var{tc}) -Deallocate internal data in target scheduling context pointed to by @var{tc}. -@end deftypefn - -@deftypefn {Target Hook} void TARGET_SCHED_FREE_SCHED_CONTEXT (void *@var{tc}) -Deallocate a store for target scheduling context pointed to by @var{tc}. -@end deftypefn - -@deftypefn {Target Hook} {void *} TARGET_SCHED_ALLOC_SCHED_CONTEXT (void) -Return a pointer to a store large enough to hold target scheduling context. -@end deftypefn - -@deftypefn {Target Hook} void TARGET_SCHED_INIT_SCHED_CONTEXT (void *@var{tc}, bool @var{clean_p}) -Initialize store pointed to by @var{tc} to hold target scheduling context. -It @var{clean_p} is true then initialize @var{tc} as if scheduler is at the -beginning of the block. Otherwise, make a copy of the current context in -@var{tc}. +beginning of the block. Otherwise, copy the current context into @var{tc}. @end deftypefn @deftypefn {Target Hook} void TARGET_SCHED_SET_SCHED_CONTEXT (void *@var{tc}) -Copy target scheduling context pointer to by @var{tc} to the current context. +Copy target scheduling context pointed to by @var{tc} to the current context. @end deftypefn @deftypefn {Target Hook} void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *@var{tc}) @@ -6651,13 +6625,13 @@ speculation. If the return value equals 1 then @var{new_pat} is assigned the generated speculative pattern. @end deftypefn -@deftypefn {Target Hook} int TARGET_SCHED_NEEDS_BLOCK_P (rtx @var{insn}) +@deftypefn {Target Hook} bool TARGET_SCHED_NEEDS_BLOCK_P (int @var{dep_status}) This hook is called by the insn scheduler during generation of recovery code -for @var{insn}. It should return nonzero, if the corresponding check -instruction should branch to recovery code, or zero otherwise. +for @var{insn}. It should return @code{true}, if the corresponding check +instruction should branch to recovery code, or @code{false} otherwise. @end deftypefn -@deftypefn {Target Hook} rtx TARGET_SCHED_GEN_CHECK (rtx @var{insn}, rtx @var{label}, int @var{mutate_p}) +@deftypefn {Target Hook} rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx @var{insn}, rtx @var{label}, int @var{mutate_p}) This hook is called by the insn scheduler to generate a pattern for recovery check instruction. If @var{mutate_p} is zero, then @var{insn} is a speculative instruction for which the check should be generated. @@ -6679,14 +6653,10 @@ the hook is used to cancel data speculative insns when the ALAT table is nearly full. @end deftypefn -@deftypefn {Target Hook} void TARGET_SCHED_SET_SCHED_FLAGS (unsigned int *@var{flags}, spec_info_t @var{spec_info}) +@deftypefn {Target Hook} void TARGET_SCHED_SET_SCHED_FLAGS (struct spec_info_def *@var{spec_info}) This hook is used by the insn scheduler to find out what features should be -enabled/used. @var{flags} initially may have either the SCHED_RGN or SCHED_EBB -bit set. This denotes the scheduler pass for which the data should be -provided. The target backend should modify @var{flags} by modifying -the bits corresponding to the following features: USE_DEPS_LIST, USE_GLAT, -DETACH_LIFE_INFO, and DO_SPECULATION@. For the DO_SPECULATION feature -an additional structure @var{spec_info} should be filled by the target. +enabled/used. +The structure *@var{spec_info} should be filled in by the target. The structure describes speculation types that can be used in the scheduler. @end deftypefn @@ -6872,7 +6842,7 @@ any assembly code, and before calling any of the section-returning hooks described below. @end deftypefn -@deftypefn {Target Hook} TARGET_ASM_RELOC_RW_MASK (void) +@deftypefn {Target Hook} int TARGET_ASM_RELOC_RW_MASK (void) Return a mask describing how relocations should be treated when selecting sections. Bit 1 should be set if global relocations should be placed in a read-write section; bit 0 should be set if @@ -6940,7 +6910,7 @@ constants in @code{flag_pic} mode in @code{data_section} and everything else in @code{readonly_data_section}. @end deftypefn -@deftypefn {Target Hook} void TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree @var{decl}, tree @var{id}) +@deftypefn {Target Hook} tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree @var{decl}, tree @var{id}) Define this hook if you need to postprocess the assembler name generated by target-independent code. The @var{id} provided to this hook will be the computed name (e.g., the macro @code{DECL_NAME} of the @var{decl} in C, @@ -6988,7 +6958,7 @@ in @file{varasm.c}, sets a number of commonly-useful bits in before overriding it. @end deftypefn -@deftypefn {Target Hook} const char *TARGET_STRIP_NAME_ENCODING (const char *name) +@deftypefn {Target Hook} {const char *} TARGET_STRIP_NAME_ENCODING (const char *@var{name}) Decode @var{name} and return the real name part, sans the characters that @code{TARGET_ENCODE_SECTION_INFO} may have added. @@ -7095,8 +7065,8 @@ instructions do. @c prevent bad page break with this line This describes the overall framework of an assembly file. -@deftypefn {Target Hook} void TARGET_ASM_FILE_START () @findex default_file_start +@deftypefn {Target Hook} void TARGET_ASM_FILE_START (void) Output to @code{asm_out_file} any text which the assembler expects to find at the beginning of a file. The default behavior is controlled by two flags, documented below. Unless your target's assembler is @@ -7184,26 +7154,24 @@ A C statement to output something to the assembler file to handle a macro is not defined, nothing is output for a @samp{#ident} directive. @end defmac -@deftypefn {Target Hook} void TARGET_ASM_NAMED_SECTION (const char *@var{name}, unsigned int @var{flags}, unsigned int @var{align}) +@deftypefn {Target Hook} void TARGET_ASM_NAMED_SECTION (const char *@var{name}, unsigned int @var{flags}, tree @var{decl}) Output assembly directives to switch to section @var{name}. The section should have attributes as specified by @var{flags}, which is a bit mask -of the @code{SECTION_*} flags defined in @file{output.h}. If @var{align} -is nonzero, it contains an alignment in bytes to be used for the section, -otherwise some target default should be used. Only targets that must -specify an alignment within the section directive need pay attention to -@var{align} -- we will still use @code{ASM_OUTPUT_ALIGN}. +of the @code{SECTION_*} flags defined in @file{output.h}. If @var{decl} +is non-NULL, it is the @code{VAR_DECL} or @code{FUNCTION_DECL} with which +this section is associated. @end deftypefn -@deftypefn {Target Hook} bool TARGET_HAVE_NAMED_SECTIONS +@deftypevr {Target Hook} bool TARGET_HAVE_NAMED_SECTIONS This flag is true if the target supports @code{TARGET_ASM_NAMED_SECTION}. -@end deftypefn +@end deftypevr @anchor{TARGET_HAVE_SWITCHABLE_BSS_SECTIONS} -@deftypefn {Target Hook} bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS +@deftypevr {Target Hook} bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS This flag is true if we can create zeroed data by switching to a BSS section and then using @code{ASM_OUTPUT_SKIP} to allocate the space. This is true on most ELF targets. -@end deftypefn +@end deftypevr @deftypefn {Target Hook} {unsigned int} TARGET_SECTION_TYPE_FLAGS (tree @var{decl}, const char *@var{name}, int @var{reloc}) Choose a set of section attributes for use by @code{TARGET_ASM_NAMED_SECTION} @@ -7263,11 +7231,11 @@ provided by the @code{TARGET_ASM_RECORD_GCC_SWITCHES_SECTION} target hook. @end deftypefn -@deftypefn {Target Hook} {const char *} TARGET_ASM_RECORD_GCC_SWITCHES_SECTION +@deftypevr {Target Hook} {const char *} TARGET_ASM_RECORD_GCC_SWITCHES_SECTION This is the name of the section that will be created by the example ELF implementation of the @code{TARGET_ASM_RECORD_GCC_SWITCHES} target hook. -@end deftypefn +@end deftypevr @need 2000 @node Data Output @@ -7802,7 +7770,7 @@ setting the @code{DECL_ONE_ONLY} flag is enough to mark a declaration to be emitted as one-only. @end defmac -@deftypefn {Target Hook} void TARGET_ASM_ASSEMBLE_VISIBILITY (tree @var{decl}, const char *@var{visibility}) +@deftypefn {Target Hook} void TARGET_ASM_ASSEMBLE_VISIBILITY (tree @var{decl}, int @var{visibility}) This target hook is a function to output to @var{asm_out_file} some commands that will make the symbol(s) associated with @var{decl} have hidden, protected or internal visibility as specified by @var{visibility}. @@ -7844,10 +7812,10 @@ pseudo-op to declare a library function name external. The name of the library function is given by @var{symref}, which is a @code{symbol_ref}. @end deftypefn -@deftypefn {Target Hook} void TARGET_ASM_MARK_DECL_PRESERVED (tree @var{decl}) +@deftypefn {Target Hook} void TARGET_ASM_MARK_DECL_PRESERVED (const char *@var{symbol}) This target hook is a function to output to @var{asm_out_file} an assembler -directive to annotate used symbol. Darwin target use .no_dead_code_strip -directive. +directive to annotate @var{symbol} as used. The Darwin target uses the +.no_dead_code_strip directive. @end deftypefn @defmac ASM_OUTPUT_LABELREF (@var{stream}, @var{name}) @@ -8215,11 +8183,11 @@ of objects. If zero, the compiler will issue an error message upon encountering an @code{init_priority} attribute. @end defmac -@deftypefn {Target Hook} bool TARGET_HAVE_CTORS_DTORS +@deftypevr {Target Hook} bool TARGET_HAVE_CTORS_DTORS This value is true if the target supports some ``native'' method of collecting constructors and destructors to be run at startup and exit. It is false if we must use @command{collect2}. -@end deftypefn +@end deftypevr @deftypefn {Target Hook} void TARGET_ASM_CONSTRUCTOR (rtx @var{symbol}, int @var{priority}) If defined, a function that outputs assembler code to arrange to call @@ -8361,7 +8329,7 @@ writing conditional output routines in those patterns. If this macro is not defined, it is equivalent to a null statement. @end defmac -@deftypefn {Target Hook} void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *@var{FILE}, rtx @var{insn}, rtx *@var{opvec}, int @var{noperands}) +@deftypefn {Target Hook} void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *@var{file}, rtx @var{insn}, rtx *@var{opvec}, int @var{noperands}) If defined, this target hook is a function which is executed just after the output of assembler code for @var{insn}, to change the mode of the assembler if necessary. @@ -8579,7 +8547,7 @@ If this macro is not defined, nothing special is output at the end of the jump-table. @end defmac -@deftypefn {Target Hook} void TARGET_ASM_EMIT_UNWIND_LABEL (@var{stream}, @var{decl}, @var{for_eh}, @var{empty}) +@deftypefn {Target Hook} void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *@var{stream}, tree @var{decl}, int @var{for_eh}, int @var{empty}) This target hook emits a label at the beginning of each FDE@. It should be defined on targets where FDEs need special labels, and it should write the appropriate label, for the FDE associated with the @@ -8591,7 +8559,7 @@ true if this is a placeholder label for an omitted FDE@. The default is that FDEs are not given nonlocal labels. @end deftypefn -@deftypefn {Target Hook} void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (@var{stream}) +@deftypefn {Target Hook} void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *@var{stream}) This target hook emits a label at the beginning of the exception table. It should be defined on targets where it is desirable for the table to be broken up according to function. @@ -8599,8 +8567,8 @@ to be broken up according to function. The default is that no label is emitted. @end deftypefn -@deftypefn {Target Hook} void TARGET_UNWIND_EMIT (FILE * @var{stream}, rtx @var{insn}) -This target hook emits and assembly directives required to unwind the +@deftypefn {Target Hook} void TARGET_UNWIND_EMIT (FILE *@var{stream}, rtx @var{insn}) +This target hook emits assembly directives required to unwind the given instruction. This is only used when TARGET_UNWIND_INFO is set. @end deftypefn @@ -8725,12 +8693,12 @@ if the reference was output. Returning @code{false} will cause the reference to be output using the normal Dwarf2 routines. @end deftypefn -@deftypefn {Target Hook} bool TARGET_ARM_EABI_UNWINDER -This hook should be set to @code{true} on targets that use an ARM EABI +@deftypevr {Target Hook} bool TARGET_ARM_EABI_UNWINDER +This flag should be set to @code{true} on targets that use an ARM EABI based unwinding library, and @code{false} on other targets. This effects the format of unwinding tables, and how the unwinder in entered after running a cleanup. The default is @code{false}. -@end deftypefn +@end deftypevr @node Alignment Output @subsection Assembler Commands for Alignment @@ -9207,7 +9175,7 @@ is used on some systems to avoid garbage collecting a DWARF table which is referenced by a function. @end defmac -@deftypefn {Target Hook} void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *@var{FILE}, int @var{size}, rtx @var{x}) +@deftypefn {Target Hook} void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *@var{file}, int @var{size}, rtx @var{x}) If defined, this target hook is a function which outputs a DTP-relative reference to the given TLS symbol of the specified size. @end deftypefn @@ -9485,7 +9453,7 @@ supposed always to be compatible. @deftypefn {Target Hook} void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree @var{type}) If defined, this target hook is a function which assigns default attributes to -newly defined @var{type}. +the newly defined @var{type}. @end deftypefn @deftypefn {Target Hook} tree TARGET_MERGE_TYPE_ATTRIBUTES (tree @var{type1}, tree @var{type2}) @@ -9555,7 +9523,7 @@ attributes, @code{false} otherwise. By default, if a function has a target specific attribute attached to it, it will not be inlined. @end deftypefn -@deftypefn {Target Hook} bool TARGET_VALID_OPTION_ATTRIBUTE_P (tree @var{fndecl}, tree @var{name}, tree @var{args}, int @var{flags}) +@deftypefn {Target Hook} bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree @var{fndecl}, tree @var{name}, tree @var{args}, int @var{flags}) This hook is called to parse the @code{attribute(option("..."))}, and it allows the function to set different target machine compile time options for the current function that might be different than the @@ -9580,7 +9548,7 @@ information in the @var{struct cl_target_option} structure for function specific options. @end deftypefn -@deftypefn {Target Hook} void TARGET_OPTION_PRINT (struct cl_target_option *@var{ptr}) +@deftypefn {Target Hook} void TARGET_OPTION_PRINT (FILE *@var{file}, int @var{indent}, struct cl_target_option *@var{ptr}) This hook is called to print any additional target specific information in the @var{struct cl_target_option} structure for function specific options. @@ -9722,8 +9690,9 @@ Default: empty. @section Parameters for Precompiled Header Validity Checking @cindex parameters, precompiled headers -@deftypefn {Target Hook} void *TARGET_GET_PCH_VALIDITY (size_t *@var{sz}) -This hook returns the data needed by @code{TARGET_PCH_VALID_P} and sets +@deftypefn {Target Hook} {void *} TARGET_GET_PCH_VALIDITY (size_t *@var{sz}) +This hook returns a pointer to the data needed by +@code{TARGET_PCH_VALID_P} and sets @samp{*@var{sz}} to the size of the data in bytes. @end deftypefn @@ -9762,8 +9731,8 @@ default is long_long_integer_type_node. @deftypefn {Target Hook} bool TARGET_CXX_GUARD_MASK_BIT (void) This hook determines how guard variables are used. It should return -@code{false} (the default) if first byte should be used. A return value of -@code{true} indicates the least significant bit should be used. +@code{false} (the default) if the first byte should be used. A return value of +@code{true} indicates that only the least significant bit should be used. @end deftypefn @deftypefn {Target Hook} tree TARGET_CXX_GET_COOKIE_SIZE (tree @var{type}) @@ -10103,7 +10072,7 @@ You need not define this macro if it would always have the value of zero. @end defmac @anchor{TARGET_SHIFT_TRUNCATION_MASK} -@deftypefn {Target Hook} int TARGET_SHIFT_TRUNCATION_MASK (enum machine_mode @var{mode}) +@deftypefn {Target Hook} {unsigned HOST_WIDE_INT} TARGET_SHIFT_TRUNCATION_MASK (enum machine_mode @var{mode}) This function describes how the standard shift patterns for @var{mode} deal with shifts by negative amounts or by more than the width of the mode. @xref{shift patterns}. @@ -10152,7 +10121,7 @@ otherwise. (Currently, none of the targets use zero-extended representation this way so unlike @code{LOAD_EXTEND_OP}, @code{TARGET_MODE_REP_EXTENDED} is expected to return either @code{SIGN_EXTEND} or @code{UNKNOWN}. Also no target extends -@var{mode} to @var{mode_rep} so that @var{mode_rep} is not the next +@var{mode} to @var{rep_mode} so that @var{rep_mode} is not the next widest integral mode and currently we take advantage of this fact.) Similarly to @code{LOAD_EXTEND_OP} you may return a non-@code{UNKNOWN} @@ -10466,6 +10435,10 @@ Define this macro, as well as arguments of @samp{#pragma pack}. @end defmac +@deftypevr {Target Hook} bool TARGET_HANDLE_PRAGMA_EXTERN_PREFIX +True if @code{#pragma extern_prefix} is to be supported. +@end deftypevr + @defmac TARGET_DEFAULT_PACK_STRUCT If your target requires a structure packing default other than 0 (meaning the machine default), define this macro to the necessary value (in bytes). @@ -10655,7 +10628,7 @@ only language front ends that use those two functions will call @samp{TARGET_INIT_BUILTINS}. @end deftypefn -@deftypefn {Target Hook} tree TARGET_BUILTIN_FUNCTION (unsigned @var{code}, bool @var{initialize_p}) +@deftypefn {Target Hook} tree TARGET_BUILTIN_DECL (unsigned @var{code}, bool @var{initialize_p}) Define this hook if you have any machine-specific built-in functions that need to be defined. It should be a function that returns the builtin function declaration for the builtin function code @var{code}. @@ -10699,10 +10672,11 @@ simplified expression for the call's result. If @var{ignore} is true the value will be ignored. @end deftypefn -@deftypefn {Target Hook} const char * TARGET_INVALID_WITHIN_DOLOOP (rtx @var{insn}) +@deftypefn {Target Hook} {const char *} TARGET_INVALID_WITHIN_DOLOOP (const_rtx @var{insn}) Take an instruction in @var{insn} and return NULL if it is valid within a -low-overhead loop, otherwise return a string why doloop could not be applied. +low-overhead loop, otherwise return a string explaining why doloop +could not be applied. Many targets use special registers for low-overhead looping. For any instruction that clobbers these this function should return a string indicating @@ -10722,7 +10696,7 @@ filling of delay slots can result in branches being redirected, and this may in turn cause a branch offset to overflow. @end defmac -@deftypefn {Target Hook} bool TARGET_COMMUTATIVE_P (rtx @var{x}, @var{outer_code}) +@deftypefn {Target Hook} bool TARGET_COMMUTATIVE_P (const_rtx @var{x}, int @var{outer_code}) This target hook returns @code{true} if @var{x} is considered to be commutative. Usually, this is just COMMUTATIVE_P (@var{x}), but the HP PA doesn't consider PLUS to be commutative inside a MEM@. @var{outer_code} is the rtx code @@ -10775,6 +10749,8 @@ GCC sets @code{cfun} to a dummy function context during initialization of some parts of the back end. The hook function is not invoked in this situation; you need not worry about the hook being invoked recursively, or when the back end is in a partially-initialized state. +@code{cfun} might be @code{NULL} to indicate processing at top level, +outside of any function scope. @end deftypefn @defmac TARGET_OBJECT_SUFFIX @@ -10829,7 +10805,7 @@ cannot_modify_jumps_past_reload_p () @end smallexample @end deftypefn -@deftypefn {Target Hook} int TARGET_BRANCH_TARGET_REGISTER_CLASS (void) +@deftypefn {Target Hook} {enum reg_class} TARGET_BRANCH_TARGET_REGISTER_CLASS (void) This target hook returns a register class for which branch target register optimizations should be applied. All registers in this class should be usable interchangeably. After reload, registers in this class will be @@ -10889,13 +10865,13 @@ systems, this is used for Framework includes, which have semantics that are different from @option{-I}. @end deftypefn -@deftypefn {Target Hook} bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree @var{fndecl}) -This target hook returns @code{true} if it is safe to use a local alias +@defmac bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree @var{fndecl}) +This target macro returns @code{true} if it is safe to use a local alias for a virtual function @var{fndecl} when constructing thunks, -@code{false} otherwise. By default, the hook returns @code{true} for all +@code{false} otherwise. By default, the macro returns @code{true} for all functions, if a target supports aliases (i.e.@: defines @code{ASM_OUTPUT_DEF}), @code{false} otherwise, -@end deftypefn +@end defmac @defmac TARGET_FORMAT_TYPES If defined, this macro is the name of a global variable containing @@ -10926,7 +10902,7 @@ routine for target specific customizations of the system printf and scanf formatter settings. @end defmac -@deftypefn {Target Hook} bool TARGET_RELAXED_ORDERING +@deftypevr {Target Hook} bool TARGET_RELAXED_ORDERING If set to @code{true}, means that the target's memory model does not guarantee that loads which do not depend on one another will access main memory in the order of the instruction stream; if ordering is @@ -10934,7 +10910,7 @@ important, an explicit memory barrier must be used. This is true of many recent processors which implement a policy of ``relaxed,'' ``weak,'' or ``release'' memory consistency, such as Alpha, PowerPC, and ia64. The default is @code{false}. -@end deftypefn +@end deftypevr @deftypefn {Target Hook} {const char *} TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN (const_tree @var{typelist}, const_tree @var{funcdecl}, const_tree @var{val}) If defined, this macro returns the diagnostic message when it is @@ -11018,9 +10994,10 @@ necessary. @end deftypefn @deftypefn {Target Hook} rtx TARGET_GET_DRAP_RTX (void) -Define this macro to an rtx for Dynamic Realign Argument Pointer if a +This hook should return an rtx for Dynamic Realign Argument Pointer (DRAP) if a different argument pointer register is needed to access the function's -argument list when stack is aligned. +argument list due to stack realignment. Return @code{NULL} if no DRAP +is needed. @end deftypefn @deftypefn {Target Hook} bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void) diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 02c0afd1171..0a6045a4a87 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -1,6 +1,6 @@ /* Output Dwarf2 format symbol table information from GCC. Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, - 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. Contributed by Gary Funck (gary@intrepid.com). Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com). Extensively modified by Jason Merrill (jason@cygnus.com). @@ -13129,7 +13129,7 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode, op = DW_OP_div; goto do_binop; - case MOD: + case UMOD: op = DW_OP_mod; goto do_binop; @@ -13171,6 +13171,24 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode, add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0)); break; + case MOD: + op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, + VAR_INIT_STATUS_INITIALIZED); + op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, + VAR_INIT_STATUS_INITIALIZED); + + if (op0 == 0 || op1 == 0) + break; + + mem_loc_result = op0; + add_loc_descr (&mem_loc_result, op1); + add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0)); + add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0)); + add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0)); + add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0)); + add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0)); + break; + case NOT: op = DW_OP_not; goto do_unop; @@ -13442,8 +13460,18 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode, case US_MULT: case SS_DIV: case US_DIV: + case SS_PLUS: + case US_PLUS: + case SS_MINUS: + case US_MINUS: + case SS_NEG: + case US_NEG: + case SS_ABS: + case SS_ASHIFT: + case US_ASHIFT: + case SS_TRUNCATE: + case US_TRUNCATE: case UDIV: - case UMOD: case UNORDERED: case ORDERED: case UNEQ: @@ -14497,6 +14525,8 @@ loc_list_from_tree (tree loc, int want_address) case CEIL_DIV_EXPR: case ROUND_DIV_EXPR: case TRUNC_DIV_EXPR: + if (TYPE_UNSIGNED (TREE_TYPE (loc))) + return 0; op = DW_OP_div; goto do_binop; @@ -14508,8 +14538,25 @@ loc_list_from_tree (tree loc, int want_address) case CEIL_MOD_EXPR: case ROUND_MOD_EXPR: case TRUNC_MOD_EXPR: - op = DW_OP_mod; - goto do_binop; + if (TYPE_UNSIGNED (TREE_TYPE (loc))) + { + op = DW_OP_mod; + goto do_binop; + } + list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0); + list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0); + if (list_ret == 0 || list_ret1 == 0) + return 0; + + add_loc_list (&list_ret, list_ret1); + if (list_ret == 0) + return 0; + add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0)); + add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0)); + add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0)); + add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0)); + add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0)); + break; case MULT_EXPR: op = DW_OP_mul; diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index af85555a2e7..8c8e08038ca 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,52 @@ +2010-01-20 Joern Rennecke <amylaar@spamcop.net> + + * module.c (mio_f2k_derived): Use enumerator as initializer of + enum variable. + + PR bootstrap/42812 + * gfortran.h (struct gfc_namespace) <resolved>: Change to signed + bitfield of width 2. + +2010-01-19 Janus Weil <janus@gcc.gnu.org> + + PR fortran/42804 + * resolve.c (extract_compcall_passed_object): Set locus for + passed-object argument. + (extract_ppc_passed_object): Set locus and correctly remove PPC + reference. + +2010-01-19 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/42783 + * trans-decl.c (add_argument_checking): Do not use the backend + decl directly to test for the presence of an optional dummy + argument. Use gfc_conv_expr_present, remembering to set the + symbol referenced. + + PR fortran/42772 + * trans-decl.c (gfc_generate_function_code): Small white space + changes. If 'recurcheckvar' is NULL do not try to reset it. + +2010-01-19 Janus Weil <janus@gcc.gnu.org> + + PR fortran/42545 + * resolve.c (resolve_fl_derived): Set the accessibility of the parent + component for extended types. + * symbol.c (gfc_find_component): Remove a wrongly-worded error message + and take care of parent component accessibility. + +2010-01-17 Janus Weil <janus@gcc.gnu.org> + + PR fortran/42677 + * gfortran.h (symbol_attribute): Remove 'ambiguous_interfaces'. + * interface.c (check_interface1): Move a warning message here from + resolve_fl_procedure. + (check_sym_interfaces): Removed 'attr.ambiguous_interfaces'. + * module.c (read_module): Remove call to gfc_check_interfaces, since + this comes too early here. + * resolve.c (resolve_fl_procedure): Move warning message to + check_interface1. + 2010-01-14 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/42684 diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 345a7015dce..dd86c1554b0 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -714,9 +714,6 @@ typedef struct modification of type or type parameters is permitted. */ unsigned referenced:1; - /* Set if the symbol has ambiguous interfaces. */ - unsigned ambiguous_interfaces:1; - /* Set if this is the symbol for the main program. */ unsigned is_main_program:1; @@ -1375,8 +1372,9 @@ typedef struct gfc_namespace /* Set to 1 if namespace is an interface body with "IMPORT" used. */ unsigned has_import_set:1; - /* Set to 1 if resolved has been called for this namespace. */ - unsigned resolved:1; + /* Set to 1 if resolved has been called for this namespace. + Holds -1 during resolution. */ + signed resolved:2; /* Set to 1 if code has been generated for this namespace. */ unsigned translated:1; diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 2a5ece1c465..f27d75c333f 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -1132,16 +1132,16 @@ check_interface1 (gfc_interface *p, gfc_interface *q0, NULL, 0)) { if (referenced) - { - gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L", - p->sym->name, q->sym->name, interface_name, - &p->where); - } - - if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc) + gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L", + p->sym->name, q->sym->name, interface_name, + &p->where); + else if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc) gfc_warning ("Ambiguous interfaces '%s' and '%s' in %s at %L", p->sym->name, q->sym->name, interface_name, &p->where); + else + gfc_warning ("Although not referenced, '%s' has ambiguous " + "interfaces at %L", interface_name, &p->where); return 1; } } @@ -1157,7 +1157,6 @@ static void check_sym_interfaces (gfc_symbol *sym) { char interface_name[100]; - bool k; gfc_interface *p; if (sym->ns != gfc_current_ns) @@ -1184,9 +1183,8 @@ check_sym_interfaces (gfc_symbol *sym) /* Originally, this test was applied to host interfaces too; this is incorrect since host associated symbols, from any source, cannot be ambiguous with local symbols. */ - k = sym->attr.referenced || !sym->attr.use_assoc; - if (check_interface1 (sym->generic, sym->generic, 1, interface_name, k)) - sym->attr.ambiguous_interfaces = 1; + check_interface1 (sym->generic, sym->generic, 1, interface_name, + sym->attr.referenced || !sym->attr.use_assoc); } } diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 667bab83c49..c72cac141ba 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -3474,7 +3474,7 @@ mio_f2k_derived (gfc_namespace *f2k) else while (peek_atom () != ATOM_RPAREN) { - gfc_intrinsic_op op = 0; /* Silence GCC. */ + gfc_intrinsic_op op = GFC_INTRINSIC_BEGIN; /* Silence GCC. */ mio_lparen (); mio_intrinsic_op (&op); @@ -4482,8 +4482,6 @@ read_module (void) module_name); } - gfc_check_interfaces (gfc_current_ns); - /* Now we should be in a position to fill f2k_derived with derived type extensions, since everything has been loaded. */ set_module_locus (&extensions); diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 9212521b2f3..fe98b7e0a54 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -4777,6 +4777,7 @@ extract_compcall_passed_object (gfc_expr* e) po->expr_type = EXPR_VARIABLE; po->symtree = e->symtree; po->ref = gfc_copy_ref (e->ref); + po->where = e->where; } if (gfc_resolve_expr (po) == FAILURE) @@ -4831,11 +4832,12 @@ extract_ppc_passed_object (gfc_expr *e) po->expr_type = EXPR_VARIABLE; po->symtree = e->symtree; po->ref = gfc_copy_ref (e->ref); + po->where = e->where; /* Remove PPC reference. */ ref = &po->ref; while ((*ref)->next) - (*ref) = (*ref)->next; + ref = &(*ref)->next; gfc_free_ref_list (*ref); *ref = NULL; @@ -9077,10 +9079,6 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) { gfc_formal_arglist *arg; - if (sym->attr.ambiguous_interfaces && !sym->attr.referenced) - gfc_warning ("Although not referenced, '%s' at %L has ambiguous " - "interfaces", sym->name, &sym->declared_at); - if (sym->attr.function && resolve_fl_var_and_proc (sym, mp_flag) == FAILURE) return FAILURE; @@ -10498,6 +10496,12 @@ resolve_fl_derived (gfc_symbol *sym) && resolve_typespec_used (&c->ts, &c->loc, c->name) == FAILURE) return FAILURE; + /* If this type is an extension, set the accessibility of the parent + component. */ + if (super_type && c == sym->components + && strcmp (super_type->name, c->name) == 0) + c->attr.access = super_type->attr.access; + /* If this type is an extension, see if this component has the same name as an inherited type-bound procedure. */ if (super_type diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index a5787de04ab..e363c5e2703 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -1958,23 +1958,17 @@ gfc_find_component (gfc_symbol *sym, const char *name, else if (sym->attr.use_assoc && !noaccess) { - if (p->attr.access == ACCESS_PRIVATE) + bool is_parent_comp = sym->attr.extension && (p == sym->components); + if (p->attr.access == ACCESS_PRIVATE || + (p->attr.access != ACCESS_PUBLIC + && sym->component_access == ACCESS_PRIVATE + && !is_parent_comp)) { if (!silent) gfc_error ("Component '%s' at %C is a PRIVATE component of '%s'", name, sym->name); return NULL; } - - /* If there were components given and all components are private, error - out at this place. */ - if (p->attr.access != ACCESS_PUBLIC && sym->component_access == ACCESS_PRIVATE) - { - if (!silent) - gfc_error ("All components of '%s' are PRIVATE in structure" - " constructor at %C", sym->name); - return NULL; - } } return p; diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 612c6f61296..062310af6af 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -3999,8 +3999,9 @@ add_argument_checking (stmtblock_t *block, gfc_symbol *sym) cl->passed_length, fold_convert (gfc_charlen_type_node, integer_zero_node)); - not_absent = fold_build2 (NE_EXPR, boolean_type_node, - fsym->backend_decl, null_pointer_node); + /* The symbol needs to be referenced for gfc_get_symbol_decl. */ + fsym->attr.referenced = 1; + not_absent = gfc_conv_expr_present (fsym); absent_failed = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, not_0length, not_absent); @@ -4256,7 +4257,7 @@ gfc_generate_function_code (gfc_namespace * ns) stmtblock_t block; stmtblock_t body; tree result; - tree recurcheckvar = NULL; + tree recurcheckvar = NULL_TREE; gfc_symbol *sym; int rank; bool is_recursive; @@ -4330,8 +4331,9 @@ gfc_generate_function_code (gfc_namespace * ns) is_recursive = sym->attr.recursive || (sym->attr.entry_master && sym->ns->entries->sym->attr.recursive); - if ((gfc_option.rtcheck & GFC_RTCHECK_RECURSION) && !is_recursive - && !gfc_option.flag_recursive) + if ((gfc_option.rtcheck & GFC_RTCHECK_RECURSION) + && !is_recursive + && !gfc_option.flag_recursive) { char * msg; @@ -4348,7 +4350,7 @@ gfc_generate_function_code (gfc_namespace * ns) } if (TREE_TYPE (DECL_RESULT (fndecl)) != void_type_node - && sym->attr.subroutine) + && sym->attr.subroutine) { tree alternate_return; alternate_return = gfc_get_fake_result_decl (sym, 0); @@ -4395,8 +4397,9 @@ gfc_generate_function_code (gfc_namespace * ns) else result = sym->result->backend_decl; - if (result != NULL_TREE && sym->attr.function - && !sym->attr.pointer) + if (result != NULL_TREE + && sym->attr.function + && !sym->attr.pointer) { if (sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.alloc_comp) @@ -4413,8 +4416,10 @@ gfc_generate_function_code (gfc_namespace * ns) gfc_add_expr_to_block (&block, tmp); /* Reset recursion-check variable. */ - if ((gfc_option.rtcheck & GFC_RTCHECK_RECURSION) && !is_recursive - && !gfc_option.flag_openmp) + if ((gfc_option.rtcheck & GFC_RTCHECK_RECURSION) + && !is_recursive + && !gfc_option.flag_openmp + && recurcheckvar != NULL_TREE) { gfc_add_modify (&block, recurcheckvar, boolean_false_node); recurcheckvar = NULL; @@ -4445,12 +4450,14 @@ gfc_generate_function_code (gfc_namespace * ns) { gfc_add_expr_to_block (&block, tmp); /* Reset recursion-check variable. */ - if ((gfc_option.rtcheck & GFC_RTCHECK_RECURSION) && !is_recursive - && !gfc_option.flag_openmp) - { - gfc_add_modify (&block, recurcheckvar, boolean_false_node); - recurcheckvar = NULL; - } + if ((gfc_option.rtcheck & GFC_RTCHECK_RECURSION) + && !is_recursive + && !gfc_option.flag_openmp + && recurcheckvar != NULL_TREE) + { + gfc_add_modify (&block, recurcheckvar, boolean_false_node); + recurcheckvar = NULL_TREE; + } } diff --git a/gcc/function.c b/gcc/function.c index ac5ba94f9d1..f85f780e916 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -1890,6 +1890,11 @@ aggregate_value_p (const_tree exp, const_tree fntype) if (TREE_CODE (type) == VOID_TYPE) return 0; + /* If a record should be passed the same as its first (and only) member + don't pass it as an aggregate. */ + if (TREE_CODE (type) == RECORD_TYPE && TYPE_TRANSPARENT_AGGR (type)) + return aggregate_value_p (first_field (type), fntype); + /* If the front end has decided that this needs to be passed by reference, do so. */ if ((TREE_CODE (exp) == PARM_DECL || TREE_CODE (exp) == RESULT_DECL) @@ -2004,6 +2009,14 @@ pass_by_reference (CUMULATIVE_ARGS *ca, enum machine_mode mode, /* GCC post 3.4 passes *all* variable sized types by reference. */ if (!TYPE_SIZE (type) || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST) return true; + + /* If a record type should be passed the same as its first (and only) + member, use the type and mode of that member. */ + if (TREE_CODE (type) == RECORD_TYPE && TYPE_TRANSPARENT_AGGR (type)) + { + type = TREE_TYPE (first_field (type)); + mode = TYPE_MODE (type); + } } return targetm.calls.pass_by_reference (ca, mode, type, named_arg); @@ -2082,25 +2095,13 @@ assign_parms_initialize_all (struct assign_parm_data_all *all) entries of the component type. Return a new list of substitutions are needed, else the old list. */ -static tree -split_complex_args (tree args) +static void +split_complex_args (VEC(tree, heap) **args) { + unsigned i; tree p; - /* Before allocating memory, check for the common case of no complex. */ - for (p = args; p; p = TREE_CHAIN (p)) - { - tree type = TREE_TYPE (p); - if (TREE_CODE (type) == COMPLEX_TYPE - && targetm.calls.split_complex_arg (type)) - goto found; - } - return args; - - found: - args = copy_list (args); - - for (p = args; p; p = TREE_CHAIN (p)) + for (i = 0; VEC_iterate (tree, *args, i, p); ++i) { tree type = TREE_TYPE (p); if (TREE_CODE (type) == COMPLEX_TYPE @@ -2111,6 +2112,7 @@ split_complex_args (tree args) bool addressable = TREE_ADDRESSABLE (p); /* Rewrite the PARM_DECL's type with its component. */ + p = copy_node (p); TREE_TYPE (p) = subtype; DECL_ARG_TYPE (p) = TREE_TYPE (DECL_ARG_TYPE (p)); DECL_MODE (p) = VOIDmode; @@ -2124,6 +2126,7 @@ split_complex_args (tree args) DECL_IGNORED_P (p) = addressable; TREE_ADDRESSABLE (p) = 0; layout_decl (p, 0); + VEC_replace (tree, *args, i, p); /* Build a second synthetic decl. */ decl = build_decl (EXPR_LOCATION (p), @@ -2132,27 +2135,27 @@ split_complex_args (tree args) DECL_ARTIFICIAL (decl) = addressable; DECL_IGNORED_P (decl) = addressable; layout_decl (decl, 0); - - /* Splice it in; skip the new decl. */ - TREE_CHAIN (decl) = TREE_CHAIN (p); - TREE_CHAIN (p) = decl; - p = decl; + VEC_safe_insert (tree, heap, *args, ++i, decl); } } - - return args; } /* A subroutine of assign_parms. Adjust the parameter list to incorporate the hidden struct return argument, and (abi willing) complex args. Return the new parameter list. */ -static tree +static VEC(tree, heap) * assign_parms_augmented_arg_list (struct assign_parm_data_all *all) { tree fndecl = current_function_decl; tree fntype = TREE_TYPE (fndecl); - tree fnargs = DECL_ARGUMENTS (fndecl); + VEC(tree, heap) *fnargs = NULL; + tree arg; + + for (arg = DECL_ARGUMENTS (fndecl); arg; arg = TREE_CHAIN (arg)) + VEC_safe_push (tree, heap, fnargs, arg); + + all->orig_fnargs = DECL_ARGUMENTS (fndecl); /* If struct value address is treated as the first argument, make it so. */ if (aggregate_value_p (DECL_RESULT (fndecl), fndecl) @@ -2168,16 +2171,16 @@ assign_parms_augmented_arg_list (struct assign_parm_data_all *all) DECL_ARTIFICIAL (decl) = 1; DECL_IGNORED_P (decl) = 1; - TREE_CHAIN (decl) = fnargs; - fnargs = decl; + TREE_CHAIN (decl) = all->orig_fnargs; + all->orig_fnargs = decl; + VEC_safe_insert (tree, heap, fnargs, 0, decl); + all->function_result_decl = decl; } - all->orig_fnargs = fnargs; - /* If the target wants to split complex arguments into scalars, do so. */ if (targetm.calls.split_complex_arg) - fnargs = split_complex_args (fnargs); + split_complex_args (&fnargs); return fnargs; } @@ -2228,12 +2231,13 @@ assign_parm_find_data_types (struct assign_parm_data_all *all, tree parm, passed_mode = TYPE_MODE (passed_type); nominal_mode = TYPE_MODE (nominal_type); - /* If the parm is to be passed as a transparent union, use the type of - the first field for the tests below. We have already verified that - the modes are the same. */ - if (TREE_CODE (passed_type) == UNION_TYPE - && TYPE_TRANSPARENT_UNION (passed_type)) - passed_type = TREE_TYPE (TYPE_FIELDS (passed_type)); + /* If the parm is to be passed as a transparent union or record, use the + type of the first field for the tests below. We have already verified + that the modes are the same. */ + if ((TREE_CODE (passed_type) == UNION_TYPE + || TREE_CODE (passed_type) == RECORD_TYPE) + && TYPE_TRANSPARENT_AGGR (passed_type)) + passed_type = TREE_TYPE (first_field (passed_type)); /* See if this arg was passed by invisible reference. */ if (pass_by_reference (&all->args_so_far, passed_mode, @@ -3065,12 +3069,14 @@ assign_parm_setup_stack (struct assign_parm_data_all *all, tree parm, undo the frobbing that we did in assign_parms_augmented_arg_list. */ static void -assign_parms_unsplit_complex (struct assign_parm_data_all *all, tree fnargs) +assign_parms_unsplit_complex (struct assign_parm_data_all *all, + VEC(tree, heap) *fnargs) { tree parm; tree orig_fnargs = all->orig_fnargs; + unsigned i = 0; - for (parm = orig_fnargs; parm; parm = TREE_CHAIN (parm)) + for (parm = orig_fnargs; parm; parm = TREE_CHAIN (parm), ++i) { if (TREE_CODE (TREE_TYPE (parm)) == COMPLEX_TYPE && targetm.calls.split_complex_arg (TREE_TYPE (parm))) @@ -3078,8 +3084,8 @@ assign_parms_unsplit_complex (struct assign_parm_data_all *all, tree fnargs) rtx tmp, real, imag; enum machine_mode inner = GET_MODE_INNER (DECL_MODE (parm)); - real = DECL_RTL (fnargs); - imag = DECL_RTL (TREE_CHAIN (fnargs)); + real = DECL_RTL (VEC_index (tree, fnargs, i)); + imag = DECL_RTL (VEC_index (tree, fnargs, i + 1)); if (inner != GET_MODE (real)) { real = gen_lowpart_SUBREG (inner, real); @@ -3112,8 +3118,8 @@ assign_parms_unsplit_complex (struct assign_parm_data_all *all, tree fnargs) tmp = gen_rtx_CONCAT (DECL_MODE (parm), real, imag); SET_DECL_RTL (parm, tmp); - real = DECL_INCOMING_RTL (fnargs); - imag = DECL_INCOMING_RTL (TREE_CHAIN (fnargs)); + real = DECL_INCOMING_RTL (VEC_index (tree, fnargs, i)); + imag = DECL_INCOMING_RTL (VEC_index (tree, fnargs, i + 1)); if (inner != GET_MODE (real)) { real = gen_lowpart_SUBREG (inner, real); @@ -3121,20 +3127,8 @@ assign_parms_unsplit_complex (struct assign_parm_data_all *all, tree fnargs) } tmp = gen_rtx_CONCAT (DECL_MODE (parm), real, imag); set_decl_incoming_rtl (parm, tmp, false); - fnargs = TREE_CHAIN (fnargs); + i++; } - else - { - SET_DECL_RTL (parm, DECL_RTL (fnargs)); - set_decl_incoming_rtl (parm, DECL_INCOMING_RTL (fnargs), false); - - /* Set MEM_EXPR to the original decl, i.e. to PARM, - instead of the copy of decl, i.e. FNARGS. */ - if (DECL_INCOMING_RTL (parm) && MEM_P (DECL_INCOMING_RTL (parm))) - set_mem_expr (DECL_INCOMING_RTL (parm), parm); - } - - fnargs = TREE_CHAIN (fnargs); } } @@ -3145,7 +3139,9 @@ static void assign_parms (tree fndecl) { struct assign_parm_data_all all; - tree fnargs, parm; + tree parm; + VEC(tree, heap) *fnargs; + unsigned i; crtl->args.internal_arg_pointer = targetm.calls.internal_arg_pointer (); @@ -3153,7 +3149,7 @@ assign_parms (tree fndecl) assign_parms_initialize_all (&all); fnargs = assign_parms_augmented_arg_list (&all); - for (parm = fnargs; parm; parm = TREE_CHAIN (parm)) + for (i = 0; VEC_iterate (tree, fnargs, i, parm); ++i) { struct assign_parm_data_one data; @@ -3216,9 +3212,11 @@ assign_parms (tree fndecl) assign_parm_setup_stack (&all, parm, &data); } - if (targetm.calls.split_complex_arg && fnargs != all.orig_fnargs) + if (targetm.calls.split_complex_arg) assign_parms_unsplit_complex (&all, fnargs); + VEC_free (tree, heap, fnargs); + /* Output all parameter conversion instructions (possibly including calls) now that all parameters have been copied out of hard registers. */ emit_insn (all.first_conversion_insn); @@ -3370,13 +3368,15 @@ gimple_seq gimplify_parameters (void) { struct assign_parm_data_all all; - tree fnargs, parm; + tree parm; gimple_seq stmts = NULL; + VEC(tree, heap) *fnargs; + unsigned i; assign_parms_initialize_all (&all); fnargs = assign_parms_augmented_arg_list (&all); - for (parm = fnargs; parm; parm = TREE_CHAIN (parm)) + for (i = 0; VEC_iterate (tree, fnargs, i, parm); ++i) { struct assign_parm_data_one data; @@ -3454,6 +3454,8 @@ gimplify_parameters (void) } } + VEC_free (tree, heap, fnargs); + return stmts; } diff --git a/gcc/fwprop.c b/gcc/fwprop.c index 0c5c7280ad5..708ab3f8edc 100644 --- a/gcc/fwprop.c +++ b/gcc/fwprop.c @@ -818,17 +818,23 @@ all_uses_available_at (rtx def_insn, rtx target_insn) } else { + rtx def_reg = REG_P (SET_DEST (def_set)) ? SET_DEST (def_set) : NULL_RTX; + /* Look at all the uses of DEF_INSN, and see if they are not killed between DEF_INSN and TARGET_INSN. */ for (use_rec = DF_INSN_INFO_USES (insn_info); *use_rec; use_rec++) { df_ref use = *use_rec; + if (def_reg && rtx_equal_p (DF_REF_REG (use), def_reg)) + return false; if (use_killed_between (use, def_insn, target_insn)) return false; } for (use_rec = DF_INSN_INFO_EQ_USES (insn_info); *use_rec; use_rec++) { df_ref use = *use_rec; + if (def_reg && rtx_equal_p (DF_REF_REG (use), def_reg)) + return false; if (use_killed_between (use, def_insn, target_insn)) return false; } diff --git a/gcc/graphite-clast-to-gimple.c b/gcc/graphite-clast-to-gimple.c index 6651e95b48f..cc48859b37e 100644 --- a/gcc/graphite-clast-to-gimple.c +++ b/gcc/graphite-clast-to-gimple.c @@ -1430,7 +1430,6 @@ create_params_index (htab_t index_table, CloogProgram *prog) { bool gloog (scop_p scop, htab_t bb_pbb_mapping) { - edge new_scop_exit_edge = NULL; VEC (tree, heap) *newivs = VEC_alloc (tree, heap, 10); loop_p context_loop; sese region = SCOP_REGION (scop); @@ -1471,10 +1470,10 @@ gloog (scop_p scop, htab_t bb_pbb_mapping) create_params_index (params_index, pc.prog); - new_scop_exit_edge = translate_clast (region, context_loop, pc.stmt, - if_region->true_region->entry, - rename_map, &newivs, newivs_index, - bb_pbb_mapping, 1, params_index); + translate_clast (region, context_loop, pc.stmt, + if_region->true_region->entry, + rename_map, &newivs, newivs_index, + bb_pbb_mapping, 1, params_index); graphite_verify (); sese_adjust_liveout_phis (region, rename_map, if_region->region->exit->src, diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index 0a85b6ee9fa..b7f0cfce359 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -1835,27 +1835,22 @@ concat_note_lists (rtx from_end, rtx *to_endp) void remove_notes (rtx head, rtx tail) { - rtx next_tail, prev, insn, next; + rtx next_tail, insn, next; note_list = 0; if (head == tail && !INSN_P (head)) return; next_tail = NEXT_INSN (tail); - prev = PREV_INSN (head); for (insn = head; insn != next_tail; insn = next) { next = NEXT_INSN (insn); if (!NOTE_P (insn)) - { - prev = insn; - continue; - } + continue; switch (NOTE_KIND (insn)) { case NOTE_INSN_BASIC_BLOCK: - prev = insn; continue; case NOTE_INSN_EPILOGUE_BEG: diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 579982c5c46..3fefe43059a 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,13 @@ +2010-01-20 Joern Rennecke <amylaar@spamcop.net> + + * lang.c (java_post_options): Constify variable "dot". + + * jcf-parse.c (set_source_filename): Constify variable "dot". + (load_class): Constify variable "separator". + Use get_identifier_with_length. + + * jvspec.c (lang_specific_driver): Constify two variables named "p". + 2010-01-09 Jakub Jelinek <jakub@redhat.com> * jcf-dump.c (version): Update copyright notice dates. diff --git a/gcc/java/jcf-parse.c b/gcc/java/jcf-parse.c index 1a2de9ee8b0..2fe97bc6b46 100644 --- a/gcc/java/jcf-parse.c +++ b/gcc/java/jcf-parse.c @@ -333,7 +333,7 @@ set_source_filename (JCF *jcf, int index) { const char *class_name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (current_class))); - char *dot = strrchr (class_name, '.'); + const char *dot = strrchr (class_name, '.'); if (dot != NULL) { /* Length of prefix, not counting final dot. */ @@ -1355,7 +1355,7 @@ load_class (tree class_or_name, int verbose) { while (1) { - char *separator; + const char *separator; /* We've already loaded it. */ if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE) @@ -1372,12 +1372,9 @@ load_class (tree class_or_name, int verbose) for an inner class. */ if ((separator = strrchr (IDENTIFIER_POINTER (name), '$')) || (separator = strrchr (IDENTIFIER_POINTER (name), '.'))) - { - int c = *separator; - *separator = '\0'; - name = get_identifier (IDENTIFIER_POINTER (name)); - *separator = c; - } + name = get_identifier_with_length (IDENTIFIER_POINTER (name), + (separator + - IDENTIFIER_POINTER (name))); /* Otherwise, we failed, we bail. */ else break; diff --git a/gcc/java/jvspec.c b/gcc/java/jvspec.c index 0f58d47d20c..a021aa45f22 100644 --- a/gcc/java/jvspec.c +++ b/gcc/java/jvspec.c @@ -542,14 +542,14 @@ lang_specific_driver (int *in_argc, const char *const **in_argv, if (! strncmp (argv[i], "-fCLASSPATH=", 12) || ! strncmp (argv[i], "-fclasspath=", 12)) { - char *p = strchr (argv[i], '='); + const char *p = strchr (argv[i], '='); jcf_path_classpath_arg (p + 1); --j; continue; } if (! strncmp (argv[i], "-fbootclasspath=", 16)) { - char *p = strchr (argv[i], '='); + const char *p = strchr (argv[i], '='); jcf_path_bootclasspath_arg (p + 1); --j; continue; diff --git a/gcc/java/lang.c b/gcc/java/lang.c index f1d8f44ce86..22fe4ffd09b 100644 --- a/gcc/java/lang.c +++ b/gcc/java/lang.c @@ -587,7 +587,7 @@ java_post_options (const char **pfilename) { if (dependency_tracking) { - char *dot; + const char *dot; /* If the target is set and the output filename is set, then there's no processing to do here. Otherwise we must diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c index f316459e083..e41917702f1 100644 --- a/gcc/lto-streamer-in.c +++ b/gcc/lto-streamer-in.c @@ -1742,8 +1742,8 @@ unpack_ts_type_value_fields (struct bitpack_d *bp, tree expr) TYPE_STRING_FLAG (expr) = (unsigned) bp_unpack_value (bp, 1); TYPE_NO_FORCE_BLK (expr) = (unsigned) bp_unpack_value (bp, 1); TYPE_NEEDS_CONSTRUCTING(expr) = (unsigned) bp_unpack_value (bp, 1); - if (TREE_CODE (expr) == UNION_TYPE) - TYPE_TRANSPARENT_UNION (expr) = (unsigned) bp_unpack_value (bp, 1); + if (TREE_CODE (expr) == UNION_TYPE || TREE_CODE (expr) == RECORD_TYPE) + TYPE_TRANSPARENT_AGGR (expr) = (unsigned) bp_unpack_value (bp, 1); TYPE_PACKED (expr) = (unsigned) bp_unpack_value (bp, 1); TYPE_RESTRICT (expr) = (unsigned) bp_unpack_value (bp, 1); TYPE_CONTAINS_PLACEHOLDER_INTERNAL (expr) diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c index d5431ba5a6e..b5fc3e26c20 100644 --- a/gcc/lto-streamer-out.c +++ b/gcc/lto-streamer-out.c @@ -518,8 +518,8 @@ pack_ts_type_value_fields (struct bitpack_d *bp, tree expr) bp_pack_value (bp, TYPE_STRING_FLAG (expr), 1); bp_pack_value (bp, TYPE_NO_FORCE_BLK (expr), 1); bp_pack_value (bp, TYPE_NEEDS_CONSTRUCTING(expr), 1); - if (TREE_CODE (expr) == UNION_TYPE) - bp_pack_value (bp, TYPE_TRANSPARENT_UNION (expr), 1); + if (TREE_CODE (expr) == UNION_TYPE || TREE_CODE (expr) == RECORD_TYPE) + bp_pack_value (bp, TYPE_TRANSPARENT_AGGR (expr), 1); bp_pack_value (bp, TYPE_PACKED (expr), 1); bp_pack_value (bp, TYPE_RESTRICT (expr), 1); bp_pack_value (bp, TYPE_CONTAINS_PLACEHOLDER_INTERNAL (expr), 2); diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index 5b09d0d8028..3e0cf425227 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,15 @@ +2010-01-20 Joseph Myers <joseph@codesourcery.com> + + * zh_CN.po: Update. + +2010-01-18 Joseph Myers <joseph@codesourcery.com> + + * zh_CN.po: Update. + +2010-01-17 Joseph Myers <joseph@codesourcery.com> + + * sv.po: Update. + 2010-01-14 Shujing Zhao <pearly.zhao@oracle.com> PR translation/39521 diff --git a/gcc/po/sv.po b/gcc/po/sv.po index b348cfbcb2b..816d8e161c6 100644 --- a/gcc/po/sv.po +++ b/gcc/po/sv.po @@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: gcc 4.5-b20091203\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2009-12-03 21:28+0000\n" -"PO-Revision-Date: 2010-01-09 12:45+0100\n" +"PO-Revision-Date: 2010-01-17 11:35+0100\n" "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "MIME-Version: 1.0\n" @@ -19743,9 +19743,9 @@ msgid "ISO C90 forbids variable length array" msgstr "ISO C90 förbjuder vektorer med variabel längd" #: c-decl.c:4670 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "the size of array %qE can%'t be evaluated" -msgstr "storleken på vektor %qs kan inte beräknas" +msgstr "storleken på vektor %qE kan inte beräknas" #: c-decl.c:4674 #, gcc-internal-format @@ -19753,9 +19753,9 @@ msgid "the size of array can %'t be evaluated" msgstr "storleken på vektorn kan inte beräknas" #: c-decl.c:4680 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "variable length array %qE is used" -msgstr "vektor %qs med variabel längd används" +msgstr "vektor %qE med variabel längd används" #: c-decl.c:4684 cp/decl.c:7348 #, gcc-internal-format @@ -19763,24 +19763,24 @@ msgid "variable length array is used" msgstr "vektor med variabel längd används" #: c-decl.c:4862 c-decl.c:5208 c-decl.c:5218 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "variably modified %qE at file scope" -msgstr "variabel %qs har filräckvidd" +msgstr "variabelt ändrad %qE i filräckvidd" #: c-decl.c:4864 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "variably modified field at file scope" -msgstr "variabel %qs har filräckvidd" +msgstr "variabelt ändrat fält i filräckvidd" #: c-decl.c:4884 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "type defaults to %<int%> in declaration of %qE" -msgstr "typen sätts skönsmässigt till %<int%> i deklarationen av %qs" +msgstr "typen sätts skönsmässigt till %<int%> i deklarationen av %qE" #: c-decl.c:4888 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "type defaults to %<int%> in type name" -msgstr "typen sätts skönsmässigt till %<int%> i deklarationen av %qs" +msgstr "typen sätts skönsmässigt till %<int%> i typnamnet" #: c-decl.c:4921 #, gcc-internal-format @@ -19798,9 +19798,9 @@ msgid "duplicate %<volatile%>" msgstr "dubblerad %<volatile%>" #: c-decl.c:4929 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "conflicting named address spaces (%s vs %s)" -msgstr "motstridande superklassnamn %qs" +msgstr "motstridande namngivna adressrymder (%s respektive %s)" #: c-decl.c:4951 #, gcc-internal-format @@ -19823,24 +19823,24 @@ msgid "function definition declared %<__thread%>" msgstr "funktionsdefinition deklarerad som %<__thread%>" #: c-decl.c:4974 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "storage class specified for structure field %qE" -msgstr "lagringsklass angiven för postfält %qs" +msgstr "lagringsklass angiven för postfält %qE" #: c-decl.c:4977 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "storage class specified for structure field" -msgstr "lagringsklass angiven för postfält %qs" +msgstr "lagringsklass angiven för postfält" #: c-decl.c:4981 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "storage class specified for parameter %qE" -msgstr "lagringsklass angiven för parameter %qs" +msgstr "lagringsklass angiven för parameter %qE" #: c-decl.c:4984 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "storage class specified for unnamed parameter" -msgstr "lagringsklass angiven för parameter %qs" +msgstr "lagringsklass angiven för namnlös parameter" #: c-decl.c:4987 cp/decl.c:8284 #, gcc-internal-format @@ -19848,34 +19848,34 @@ msgid "storage class specified for typename" msgstr "lagringsklass angiven för typnamn" #: c-decl.c:5004 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE initialized and declared %<extern%>" -msgstr "%qs initierad och deklarerad %<extern%>" +msgstr "%qE initierad och deklarerad %<extern%>" #: c-decl.c:5008 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE has both %<extern%> and initializer" -msgstr "%qs har både %<extern%> och initierare" +msgstr "%qE har både %<extern%> och initierare" #: c-decl.c:5013 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "file-scope declaration of %qE specifies %<auto%>" -msgstr "filnivådeklaration av %qs anger %<auto%>" +msgstr "filnivådeklaration av %qE anger %<auto%>" #: c-decl.c:5017 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "file-scope declaration of %qE specifies %<register%>" -msgstr "filnivådeklaration av %qs anger %<auto%>" +msgstr "filnivådeklaration av %qE anger %<register%>" #: c-decl.c:5022 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "nested function %qE declared %<extern%>" -msgstr "nästad funktion %qs är deklarerad %<extern%>" +msgstr "nästad funktion %qE är deklarerad %<extern%>" #: c-decl.c:5025 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "function-scope %qE implicitly auto and declared %<__thread%>" -msgstr "funktionsdefinitionsområde %qs implicit auto och deklarerat %<__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) @@ -19886,24 +19886,24 @@ msgid "static or type qualifiers in non-parameter array declarator" msgstr "static- eller typkvalificerare i vektordeklarerare som inte är parameter" #: c-decl.c:5120 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "declaration of %qE as array of voids" -msgstr "deklaration av %qs som ett fält med void" +msgstr "deklaration av %qE som en vektor av void" #: c-decl.c:5122 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "declaration of type name as array of voids" -msgstr "deklaration av %qs som ett fält med void" +msgstr "deklaration av typnamn som en vektor av void" #: c-decl.c:5129 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "declaration of %qE as array of functions" -msgstr "deklaration av %qs som ett fält med funktioner" +msgstr "deklaration av %qE som en vektor av funktioner" #: c-decl.c:5132 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "declaration of type name as array of functions" -msgstr "deklaration av %qs som ett fält med funktioner" +msgstr "deklaration av typnamn som en vektor av funktioner" #: c-decl.c:5139 c-decl.c:6837 #, gcc-internal-format @@ -19911,44 +19911,44 @@ msgid "invalid use of structure with flexible array member" msgstr "ogiltig användning av post med flexibel vektormedlem" #: c-decl.c:5165 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "size of array %qE has non-integer type" -msgstr "storlek på vektorn %qs är inte av heltalstyp" +msgstr "storlek på vektorn %qE är inte av heltalstyp" #: c-decl.c:5169 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "size of unnamed array has non-integer type" -msgstr "storlek på vektorn %qs är inte av heltalstyp" +msgstr "storlek på en namnlös vektor är inte av heltalstyp" #: c-decl.c:5179 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C forbids zero-size array %qE" -msgstr "ISO C förbjuder vektor %qs med storlek noll" +msgstr "ISO C förbjuder vektor %qE med storlek noll" #: c-decl.c:5182 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C forbids zero-size array" -msgstr "ISO C++ förbjuder vektor med storlek noll" +msgstr "ISO C förbjuder vektorer med storlek noll" #: c-decl.c:5191 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "size of array %qE is negative" -msgstr "storlek på vektorn %qs är negativ" +msgstr "storleken på vektorn %qE är negativ" #: c-decl.c:5193 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "size of unnamed array is negative" -msgstr "storleken på vektorn är negativ" +msgstr "storleken på en namnlös vektor är negativ" #: c-decl.c:5269 c-decl.c:5631 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "size of array %qE is too large" -msgstr "storleken på vektorn %qs är för stor" +msgstr "storleken på vektorn %qE är för stor" #: c-decl.c:5272 c-decl.c:5633 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "size of unnamed array is too large" -msgstr "storleken på vektorn är för stor" +msgstr "storleken på en namnlös vektor är för stor" #: c-decl.c:5309 #, gcc-internal-format @@ -19967,24 +19967,24 @@ msgid "array type has incomplete element type" msgstr "fälttyp har ofullständig elementtyp" #: c-decl.c:5433 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE declared as function returning a function" -msgstr "%qs är deklarerad som en funktion som returnerar en funktion" +msgstr "%qE är deklarerad som en funktion som returnerar en funktion" #: c-decl.c:5436 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "type name declared as function returning a function" -msgstr "%qs är deklarerad som en funktion som returnerar en funktion" +msgstr "typnamn är deklarerat som en funktion som returnerar en funktion" #: c-decl.c:5443 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE declared as function returning an array" -msgstr "%qs är deklarerad som en funktion som returnerar en vektor" +msgstr "%qE är deklarerad som en funktion som returnerar en vektor" #: c-decl.c:5446 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "type name declared as function returning an array" -msgstr "%qs är deklarerad som en funktion som returnerar en vektor" +msgstr "typnamn är deklarerat som en funktion som returnerar en vektor" #: c-decl.c:5476 #, gcc-internal-format @@ -20002,9 +20002,9 @@ msgid "ISO C forbids qualified function types" msgstr "ISO C förbjuder kvalificerade funktionstyper" #: c-decl.c:5576 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs combined with %<auto%> qualifier for %qE" -msgstr "motstridiga typkvalificerare för %q+D" +msgstr "%qs kombinerad med %<auto%>-kvalificerare för %E" #: c-decl.c:5580 #, gcc-internal-format @@ -20012,29 +20012,29 @@ msgid "%qs combined with %<register%> qualifier for %qE" msgstr "%qs kombinerat med %<register%>-kvalificerare för %qE" #: c-decl.c:5586 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs specified for auto variable %qE" -msgstr "%Hogiltig typ för iterationsvariabeln %qE" +msgstr "%qs angiven för auto-variabel %qE" #: c-decl.c:5602 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs specified for parameter %qE" -msgstr "lagringsklass angiven för parameter %qs" +msgstr "%qs angiven för parameter %qE" #: c-decl.c:5605 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs specified for unnamed parameter" -msgstr "lagringsklass angiven för parameter %qs" +msgstr "%qs angiven för namnlös parameter" #: c-decl.c:5611 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs specified for structure field %qE" -msgstr "lagringsklass angiven för postfält %qs" +msgstr "%qs angiven för postfält %qE" #: c-decl.c:5614 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs specified for structure field" -msgstr "lagringsklass angiven för postfält %qs" +msgstr "%qs angiven för postfält" #: c-decl.c:5655 #, gcc-internal-format @@ -20068,24 +20068,24 @@ msgid "parameter %q+D declared %<inline%>" msgstr "parametern %q+D deklarerad %<inline%>" #: c-decl.c:5796 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "field %qE declared as a function" -msgstr "fältet %qs deklarerat som en funktion" +msgstr "fältet %qE deklarerat som en funktion" #: c-decl.c:5803 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "field %qE has incomplete type" -msgstr "fält %qs har ofullständig typ" +msgstr "fält %qE har ofullständig typ" #: c-decl.c:5805 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unnamed field has incomplete type" -msgstr "namnet %qT har ofullständig typ" +msgstr "namnlöst fält har ofullständig typ" #: c-decl.c:5822 c-decl.c:5833 c-decl.c:5836 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid storage class for function %qE" -msgstr "ogiltig lagringsklass för funktionen %qs" +msgstr "ogiltig lagringsklass för funktionen %qE" #: c-decl.c:5856 #, gcc-internal-format @@ -20108,9 +20108,9 @@ msgid "variable %q+D declared %<inline%>" msgstr "variabeln %q+D deklarerad %<inline%>" #: c-decl.c:5966 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "non-nested function with variably modified type" -msgstr "hopp in i räckvidd för identifierare med variabel typ" +msgstr "onästad funktion med variabelt modifierad typ" #: c-decl.c:5968 #, gcc-internal-format @@ -20133,9 +20133,9 @@ msgid "parameter %u (%q+D) has incomplete type" msgstr "parameter %u (%q+D) har ofullständig typ" #: c-decl.c:6098 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "parameter %u has incomplete type" -msgstr "%Jparameter %u har ofullständig typ" +msgstr "parameter %u har ofullständig typ" #: c-decl.c:6108 #, gcc-internal-format @@ -20143,9 +20143,9 @@ msgid "parameter %u (%q+D) has void type" msgstr "parameter %u (%q+D) har void-typ" #: c-decl.c:6112 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "parameter %u has void type" -msgstr "%Jparameter %u har void-typ" +msgstr "parameter %u har void-typ" #: c-decl.c:6182 #, gcc-internal-format @@ -20180,19 +20180,19 @@ msgid "its scope is only this definition or declaration, which is probably not w msgstr "dess scope-område är endast denna definition eller deklaration, vilket troligen inte är vad du vill." #: c-decl.c:6361 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "enum type defined here" -msgstr "%q+#D definierades tidigare här" +msgstr "enum-typ definierad här" #: c-decl.c:6367 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "struct defined here" -msgstr "%q+#D definierades tidigare här" +msgstr "post definierad här" #: c-decl.c:6373 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "union defined here" -msgstr "%q+#D definierades tidigare här" +msgstr "union definierad här" #: c-decl.c:6446 #, gcc-internal-format @@ -20255,19 +20255,19 @@ msgid "struct has no members" msgstr "posten har inga medlemmar" #: c-decl.c:6817 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "flexible array member in union" -msgstr "%Jflexibel vektormedlem i union" +msgstr "flexibel vektormedlem i union" #: c-decl.c:6823 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "flexible array member not at end of struct" -msgstr "%Jflexibel vektormedlem inte vid slutet av post" +msgstr "flexibel vektormedlem inte vid slutet av post" #: c-decl.c:6829 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "flexible array member in otherwise empty struct" -msgstr "%Jflexibel vektor medlem i i övrigt tom post" +msgstr "flexibel vektor medlem i i övrigt tom post" #: c-decl.c:6946 #, gcc-internal-format @@ -20301,9 +20301,9 @@ msgid "enumerator value for %qE is not an integer constant" msgstr "uppräkningsvärde för %qE är inte en heltalskonstant" #: c-decl.c:7256 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "enumerator value for %qE is not an integer constant expression" -msgstr "uppräkningsvärde för %qE är inte en heltalskonstant" +msgstr "uppräkningsvärde för %qE är inte ett konstant heltalsuttryck" #: c-decl.c:7280 #, gcc-internal-format @@ -20316,9 +20316,9 @@ msgid "ISO C restricts enumerator values to range of %<int%>" msgstr "ISO C begränsar uppräkningsvärden till intervallet hos %<int%>" #: c-decl.c:7373 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "inline function %qD given attribute noinline" -msgstr "inline-funktionen %q+D har fått attributet noinline" +msgstr "inline-funktionen %qD har fått attributet noinline" #: c-decl.c:7391 #, gcc-internal-format @@ -20331,89 +20331,89 @@ msgid "return type defaults to %<int%>" msgstr "returtyp sätts skönsmässigt till %<int%>" #: c-decl.c:7475 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "no previous prototype for %qD" -msgstr "ingen tidigare prototyp för %q+D" +msgstr "ingen tidigare prototyp för %qD" #: c-decl.c:7484 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD was used with no prototype before its definition" -msgstr "%q+D 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:7491 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "no previous declaration for %qD" -msgstr "ingen tidigare deklaration av %q+D" +msgstr "ingen tidigare deklaration av %qD" #: c-decl.c:7501 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD was used with no declaration before its definition" -msgstr "%q+D 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:7524 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "return type of %qD is not %<int%>" -msgstr "returtypen på %q+D är inte %<int%>" +msgstr "returtypen för %qD är inte %<int%>" #: c-decl.c:7530 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD is normally a non-static function" -msgstr "%q+D är normalt en icke-statisk funktion" +msgstr "%qD är normalt en icke-statisk funktion" #: c-decl.c:7565 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "old-style parameter declarations in prototyped function definition" -msgstr "%Jgammaldags parameterdeklarationer i funktionsdefinition med prototyp" +msgstr "gammaldags parameterdeklarationer i funktionsdefinition med prototyp" #: c-decl.c:7579 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "traditional C rejects ISO C style function definitions" -msgstr "%Jtraditionell 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:7595 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "parameter name omitted" -msgstr "%Jparameternamn utelämnat" +msgstr "parameternamn utelämnat" #: c-decl.c:7630 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "old-style function definition" -msgstr "%Jgammaldags funktionsdefinition" +msgstr "gammaldags funktionsdefinition" #: c-decl.c:7639 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "parameter name missing from parameter list" -msgstr "%Jparameternamn saknas i parameterlista" +msgstr "parameternamn saknas i parameterlista" #: c-decl.c:7651 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD declared as a non-parameter" -msgstr "%q+D deklarerad som en icke-parameter" +msgstr "%qD deklarerad som en icke-parameter" #: c-decl.c:7657 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "multiple parameters named %qD" -msgstr "flera parametrar med namnet %q+D" +msgstr "flera parametrar med namnet %qD" #: c-decl.c:7666 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "parameter %qD declared with void type" -msgstr "parameter %q+D deklarerad med typen void" +msgstr "parameter %qD deklarerad med typen void" #: c-decl.c:7695 c-decl.c:7699 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "type of %qD defaults to %<int%>" -msgstr "typen på %q+D sätts skönsmässigt till %<int%>" +msgstr "typen på %qD sätts skönsmässigt till %<int%>" #: c-decl.c:7719 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "parameter %qD has incomplete type" -msgstr "parametern %q+D har ofullständig typ" +msgstr "parametern %qD har ofullständig typ" #: c-decl.c:7726 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "declaration for parameter %qD but no such parameter" -msgstr "deklaration av parameter %q+D med det finns ingen sådan parameter" +msgstr "deklaration av parameter %qD med det finns ingen sådan parameter" #: c-decl.c:7778 #, gcc-internal-format @@ -20469,14 +20469,14 @@ 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" #: c-decl.c:8141 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "declaration of static variable %qD in %<for%> loop initial declaration" -msgstr "deklaration av statisk variabel %q+D i %<for%>-slingas initiala deklaration" +msgstr "deklaration av statisk variabel %qD i %<for%>-slingas initiala deklaration" #: c-decl.c:8145 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "declaration of %<extern%> variable %qD in %<for%> loop initial declaration" -msgstr "deklaration av %<extern%>-variabel %q+D i %<for%>-slingas initiala deklaration" +msgstr "deklaration av %<extern%>-variabel %qD i %<for%>-slingas initiala deklaration" #: c-decl.c:8152 #, gcc-internal-format @@ -20494,9 +20494,9 @@ msgid "%<enum %E%> declared in %<for%> loop initial declaration" msgstr "%<enum %E%> är deklarerad i %<for%>-slingas initiala deklaration" #: c-decl.c:8165 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "declaration of non-variable %qD in %<for%> loop initial declaration" -msgstr "deklaration av icke-variabel %q+D i %<for%>-slingas initiala deklaration" +msgstr "deklaration av icke-variabel %qD i %<for%>-slingas initiala deklaration" #: c-decl.c:8416 #, gcc-internal-format @@ -20953,15 +20953,15 @@ msgid "badly nested C headers from preprocessor" msgstr "felaktigt inkapslade C-huvuden från preprocessorn" #: c-lex.c:267 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ignoring #pragma %s %s" -msgstr "%Hignorerar #pragma %s %s" +msgstr "ignorerar #pragma %s %s" #. ... or not. #: c-lex.c:383 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "stray %<@%> in program" -msgstr "%Höverblivet %<@%> i program" +msgstr "överblivet %<@%> i program" #: c-lex.c:398 #, gcc-internal-format @@ -20994,9 +20994,9 @@ msgid "this decimal constant would be unsigned in ISO C90" msgstr "denna decimala konstant skulle varit teckenlös i ISO C90" #: c-lex.c:633 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unsuffixed float constant" -msgstr "icke-standardsuffix på flyttalskonstant" +msgstr "flyttalskonstant utan suffix" #: c-lex.c:665 #, gcc-internal-format @@ -21229,9 +21229,9 @@ msgid "too late for # directive to set debug directory" msgstr "för sent för #-direktiv att ange felsökningskatalog" #: c-parser.c:232 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "identifier %qE conflicts with C++ keyword" -msgstr "identifieraren %qs står i konflikt med ett C++-nyckelord" +msgstr "identifieraren %qE står i konflikt med ett nyckelord i C++" #: c-parser.c:996 #, gcc-internal-format @@ -21736,9 +21736,9 @@ msgid "#pragma pack (pop) encountered without matching #pragma pack (push)" msgstr "#pragma pack (pop) påträffat utan matchande #pragma pack (push)" #: c-pragma.c:115 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "#pragma pack(pop, %E) encountered without matching #pragma pack(push, %E)" -msgstr "#pragma pack(pop, %s) påträffat utan matchande #pragma pack(push, %s)" +msgstr "#pragma pack(pop, %E) påträffat utan matchande #pragma pack(push, %E)" #: c-pragma.c:129 #, gcc-internal-format @@ -21776,9 +21776,9 @@ msgid "malformed %<#pragma pack(pop[, id])%> - ignored" msgstr "fel utformat %<#pragma pack(pop[, id])%> - ignoreras" #: c-pragma.c:183 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unknown action %qE for %<#pragma pack%> - ignored" -msgstr "okänd åtgärd %qs för %<#pragma pack%> - ignoreras" +msgstr "okänd åtgärd %qE för %<#pragma pack%> - ignoreras" #: c-pragma.c:212 #, gcc-internal-format @@ -21991,19 +21991,19 @@ msgid "#pragma message: %s" msgstr "#pragma message: %s" #: c-pragma.c:1061 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid location for %<pragma %s%>, ignored" -msgstr "ogiltig konstant i %<#pragma pack%> - ignoreras" +msgstr "ogiltig plats för %<#pragma %s%>, ignoreras" #: c-pragma.c:1068 c-pragma.c:1082 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "malformed %<#pragma %s%>, ignored" -msgstr "felformaterat %<#pragma message%>, ignoreras" +msgstr "felformaterat %<#pragma %s%>, ignoreras" #: c-pragma.c:1088 -#, fuzzy, gcc-internal-format +#, 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-pragma.c:1106 #, gcc-internal-format @@ -22011,9 +22011,9 @@ msgid "%<#pragma STDC FLOAT_CONST_DECIMAL64%> is not supported for C++" msgstr "%<#pragma STDC FLOAT_CONST_DECIMAL64%> stöds inte för C++" #: c-pragma.c:1115 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<#pragma STDC FLOAT_CONST_DECIMAL64%> is not supported on this target" -msgstr "#pragma extern_prefix stöds inte på denna målarkitektur" +msgstr "%<#pragma STDC FLOAT_CONST_DECIMAL64%> stöds inte på denna målarkitektur" #: c-pragma.c:1121 #, gcc-internal-format @@ -22082,9 +22082,9 @@ msgid "types are not quite compatible" msgstr "typerna är inte riktigt kompatibla" #: c-typeck.c:1198 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "pointer target types incompatible in C++" -msgstr "pekare-på-medlemstyp %qT är inkompatibel med objekttyp %qT" +msgstr "pekares måltyper är inkompatibla i C++" #: c-typeck.c:1528 #, gcc-internal-format @@ -22165,9 +22165,9 @@ msgid "function called through a non-compatible type" msgstr "funktion anropad via en inkompatibel typ" #: c-typeck.c:2657 c-typeck.c:2711 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "function with qualified void return type called" -msgstr "funktionsdefinition som har kvalificerad void-returtyp" +msgstr "funktion med kvalificerad void-returtyp anropad" #: c-typeck.c:2834 #, gcc-internal-format @@ -22235,9 +22235,9 @@ msgid "comparison with string literal results in unspecified behavior" msgstr "jämförelse med strängliteral resulterar i odefinierat beteende" #: c-typeck.c:3122 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "comparison between %qT and %qT" -msgstr "jämförelse mellan %q#T och %q#T" +msgstr "jämförelse mellan %qT och %qT" #: c-typeck.c:3174 #, gcc-internal-format @@ -22295,9 +22295,9 @@ msgid "decrement of pointer to unknown structure" msgstr "minskning av pekare på okänd post" #: c-typeck.c:3581 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "taking address of expression of type %<void%>" -msgstr "tar adress till något temporärt" +msgstr "tar adressen till uttryck av typ %<void%>" #: c-typeck.c:3750 #, gcc-internal-format @@ -22395,9 +22395,9 @@ msgid "ISO C forbids conditional expr with only one void side" msgstr "ISO C förbjuder villkorliga uttryck med bara en sida void" #: c-typeck.c:4075 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "pointers to disjoint address spaces used in conditional expression" -msgstr "pekartyper stämmer inte i villkorsuttryck" +msgstr "pekare till skilda adressrymder använda i villkorsuttryck" #: c-typeck.c:4083 c-typeck.c:4092 #, gcc-internal-format @@ -22523,14 +22523,14 @@ msgid "expected %qT but argument is of type %qT" msgstr "%qT förväntades men argumentet har typ %qT" #: c-typeck.c:4907 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "enum conversion when passing argument %d of %qE is invalid in C++" -msgstr "pekarmål när argument %d till %qE skickades skiljer i teckenhet" +msgstr "enum-konvertering när argument %d till %qE skickades är ogiltigt i C++" #: c-typeck.c:4913 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "enum conversion in return is invalid in C++" -msgstr "ogiltig konvertering i retursats" +msgstr "enum-konvertering i retursats är ogiltigt i C++" #: c-typeck.c:4942 #, gcc-internal-format @@ -22588,19 +22588,19 @@ 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++" #: c-typeck.c:5148 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "passing argument %d of %qE from pointer to non-enclosed address space" -msgstr "skickar argument %d till %qE från inkompatibel pekartyp" +msgstr "skickar argument %d till %qE från pekare till adressutrymme som inte är inneslutet" #: c-typeck.c:5152 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "assignment from pointer to non-enclosed address space" -msgstr "typkonvertering från pekare till heltal av annan storlek" +msgstr "tilldelning från pekare till adressutrymme som inte är inneslutet" #: c-typeck.c:5156 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "initialization from pointer to non-enclosed address space" -msgstr "initiering från inkompatibel pekartyp" +msgstr "initiering från pekare till adressutrymme som inte är inneslutet" #: c-typeck.c:5160 #, gcc-internal-format @@ -22808,9 +22808,9 @@ msgid "%<long%> switch expression not converted to %<int%> in ISO C" msgstr "%<long%>-switch-uttryck konverteras inte till %<int%> i ISO C" #: c-typeck.c:8463 c-typeck.c:8471 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "case label is not an integer constant expression" -msgstr "storlek på vektorn är inte ett konstantuttryck av heltalstyp" +msgstr "case-etikett är inte ett konstant heltalsuttryck" #: c-typeck.c:8477 cp/parser.c:7750 #, gcc-internal-format @@ -22823,9 +22823,9 @@ msgid "%<default%> label not within a switch statement" msgstr "%<default%>-etikett som inte ligger i en switch-sats" #: c-typeck.c:8562 cp/parser.c:8041 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "suggest explicit braces to avoid ambiguous %<else%>" -msgstr "%Hfö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:8671 cp/cp-gimplify.c:92 cp/parser.c:8391 #, gcc-internal-format @@ -22878,9 +22878,9 @@ msgid "comparing floating point with == or != is unsafe" msgstr "jämföra flyttal med == eller != är osäkert" #: c-typeck.c:9397 c-typeck.c:9485 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "comparison of pointers to disjoint address spaces" -msgstr "jämförelse av skilda pekartyper saknar en typkonvertering" +msgstr "jämförelse av pekare till skilda adressutrymmen" #: c-typeck.c:9404 c-typeck.c:9410 #, gcc-internal-format @@ -23288,9 +23288,9 @@ msgid "missing REG_EH_REGION note in the end of bb %i" msgstr "REG_EH_REGION-notering saknas i slutet av bb %i" #: cfgrtl.c:1909 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "too many eh edges %i" -msgstr "för många utgående bågar från bb %i" +msgstr "för många eh-bågar %i" #: cfgrtl.c:1917 #, gcc-internal-format @@ -23303,7 +23303,7 @@ msgid "fallthru edge after unconditional jump %i" msgstr "fall igenom-båge efter ovillkorligt hopp %i" #: cfgrtl.c:1927 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "wrong number of branch edges after unconditional jump %i" msgstr "fel antal förgreningsbågar efter ovillkorligt hopp %i" @@ -23438,9 +23438,9 @@ msgid "caller edge frequency is too large" msgstr "frekvensen anropande båge är för stor" #: cgraphunit.c:633 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "caller edge frequency %i does not match BB freqency %i" -msgstr "frekvensen anropande båge är för stor" +msgstr "anropsbåges frekvens %i stämmer inte med GB-frekvens %i" #: cgraphunit.c:645 #, gcc-internal-format @@ -23503,9 +23503,9 @@ msgid "shared call_stmt:" msgstr "delat anropssats:" #: cgraphunit.c:750 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "edge points to same body alias:" -msgstr "bågpekare till fel deklaration:" +msgstr "båge pekar till samma kroppalias:" #: cgraphunit.c:756 #, gcc-internal-format @@ -23528,9 +23528,9 @@ msgid "verify_cgraph_node failed" msgstr "verify_cgraph_node misslyckades" #: cgraphunit.c:896 cgraphunit.c:916 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<externally_visible%> attribute have effect only on public objects" -msgstr "%Jattributet %<externally_visible%> har bara effekt på publika objekt" +msgstr "attributet %<externally_visible%> har bara effekt på publika objekt" #: cgraphunit.c:1126 #, gcc-internal-format @@ -23543,9 +23543,9 @@ msgid "nodes with unreleased memory found" msgstr "noder med ej frigjort minne funna" #: collect2.c:1505 opts.c:1137 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "LTO support has not been enabled in this configuration" -msgstr "-m64 stöds inte i denna konfiguration" +msgstr "LTO-stöd har inte aktiverats i denna konfiguration" #: collect2.c:1598 #, gcc-internal-format @@ -23648,14 +23648,14 @@ msgid "%qs has overflowed" msgstr "%qs har spillt över" #: coverage.c:350 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "no coverage for function %qE found" -msgstr "det finns ingen täckning för funktionen %qs" +msgstr "det finns ingen täckning för funktionen %qE" #: coverage.c:363 coverage.c:366 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "coverage mismatch for function %qE while reading counter %qs" -msgstr "mismatch i täckning för funktionen %qs när räknaren %qs lästes" +msgstr "mismatch i täckning för funktionen %qE när räknaren %qs lästes" #: coverage.c:382 #, gcc-internal-format @@ -23773,9 +23773,9 @@ msgid "region_array is corrupted for region %i" msgstr "region_array är trasig för region %i" #: except.c:3347 except.c:3378 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "lp_array is corrupted for lp %i" -msgstr "region_array är trasig för region %i" +msgstr "lp_array är trasig för region %i" #: except.c:3364 #, gcc-internal-format @@ -23788,9 +23788,9 @@ msgid "negative nesting depth of region %i" msgstr "negativt nästningsdjup för region %i" #: except.c:3383 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "region of lp %i is wrong" -msgstr "yttre block för region %i är fel" +msgstr "region för lp %i är fel" #: except.c:3410 #, gcc-internal-format @@ -23798,14 +23798,14 @@ msgid "tree list ends on depth %i" msgstr "trädlista slutar på djup %i" #: except.c:3415 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "region_array does not match region_tree" -msgstr "vektor stämmer inte med regionträdet" +msgstr "region_array stämmer inte med region_tree" #: except.c:3420 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "lp_array does not match region_tree" -msgstr "vektor stämmer inte med regionträdet" +msgstr "lp_array stämmer inte med region_tree" #: except.c:3427 #, gcc-internal-format @@ -23836,14 +23836,14 @@ msgid "the frame size of %wd bytes is larger than %wd bytes" msgstr "ramstorleken på %wd byte är större än %wd byte" #: final.c:4367 toplev.c:1921 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "could not open final insn dump file %qs: %s" -msgstr "kunde inte öppna dump-fil %qs: %s" +msgstr "det gick inte att öppna slutgilgit instruktionsdumpfil %qs: %s" #: final.c:4423 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "could not close final insn dump file %qs: %s" -msgstr "kunde inte öppna dump-fil %qs: %s" +msgstr "det gick inte att stänga slutgiltig instruktionsdumpfil %qs: %s" #: fixed-value.c:104 #, gcc-internal-format @@ -23896,9 +23896,9 @@ msgid "fold check: original tree changed by fold" msgstr "vikningskontroll: originalträdet ändrat av vikning" #: function.c:254 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "total size of local objects too large" -msgstr "%Jtotal storlek på lokala objekt är för stor" +msgstr "total storlek på lokala objekt är för stor" #: function.c:919 varasm.c:2167 #, gcc-internal-format @@ -23979,9 +23979,9 @@ msgid "spec failure: unrecognized spec option '%c'" msgstr "spec-fel: okänd spec-flagga \"%c\"" #: gcc.c:6673 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%s: could not determine length of compare-debug file %s" -msgstr "det gick inte att skriva till svarsfilen %s" +msgstr "%s: det gick inte att avgöra längden på compare-debug-filen %s" #: gcc.c:6684 #, gcc-internal-format @@ -23989,9 +23989,9 @@ msgid "%s: -fcompare-debug failure (length)" msgstr "%s: -fcompare-debug misslyckades (längd)" #: gcc.c:6694 gcc.c:6735 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%s: could not open compare-debug file %s" -msgstr "%s:kunde inte öppna utdatafilen \"%s\"\n" +msgstr "%s: det gick inte att öppna compare-debug-filen %s" #: gcc.c:6714 gcc.c:6751 #, gcc-internal-format @@ -24107,9 +24107,9 @@ 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" #: gimplify.c:2373 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "using result of function returning %<void%>" -msgstr "ingen retursats i funktion som returnerar icke-void" +msgstr "använder resultat från funktion som returnerar %<void%>" #: gimplify.c:4759 #, gcc-internal-format @@ -24127,29 +24127,29 @@ msgid "memory input %d is not directly addressable" msgstr "minnesindata %d är inte direkt adresserbar" #: gimplify.c:5391 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE not specified in enclosing parallel" -msgstr "%qs inte angiven i omgivande parallel" +msgstr "%qE inte angiven i omgivande parallel" #: gimplify.c:5393 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "enclosing parallel" -msgstr "%Homgivande parallel" +msgstr "omgivande parallel" #: gimplify.c:5498 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "iteration variable %qE should be private" -msgstr "instansvariabel %qs skall vara privat" +msgstr "instansvariabel %qE skall vara privat" #: gimplify.c:5512 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "iteration variable %qE should not be firstprivate" -msgstr "iterationsvariabel %qD får inte vara firstprivate" +msgstr "iterationsvariabel %qE får inte vara firstprivate" #: gimplify.c:5515 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "iteration variable %qE should not be reduction" -msgstr "iterationsvariabel %qs skall inte vara reduction" +msgstr "iterationsvariabel %qE skall inte vara reduction" #: gimplify.c:5678 #, fuzzy, gcc-internal-format diff --git a/gcc/po/zh_CN.po b/gcc/po/zh_CN.po index 7a85b4d1f99..bf0543eea94 100644 --- a/gcc/po/zh_CN.po +++ b/gcc/po/zh_CN.po @@ -1,14 +1,14 @@ # Simplified Chinese translation for gcc. # Copyright (C) 2005 Free Software Foundation, Inc. # This file is distributed under the same license as the gcc package. -# Meng Jie <zuxy.meng@gmail.com>, 2005-2009. +# Meng Jie <zuxy.meng@gmail.com>, 2005-2010. # msgid "" msgstr "" "Project-Id-Version: gcc 4.5-b20091203\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2009-12-03 21:28+0000\n" -"PO-Revision-Date: 2010-01-11 10:18+0800\n" +"PO-Revision-Date: 2010-01-20 13:46+0800\n" "Last-Translator: Meng Jie <zuxy.meng@gmail.com>\n" "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" "MIME-Version: 1.0\n" @@ -422,7 +422,7 @@ msgstr "ç©ºçš„æ ‡é‡åˆå§‹å€¼è®¾å®šé¡¹" #: c-typeck.c:6651 msgid "extra elements in scalar initializer" -msgstr "æ ‡é‡åˆå§‹åŒ–设定ä¸æœ‰å¤šä½™å…ƒç´ " +msgstr "æ ‡é‡åˆå§‹å€¼è®¾å®šä¸æœ‰å¤šä½™å…ƒç´ " #: c-typeck.c:6759 c-typeck.c:6837 msgid "array index in non-array initializer" @@ -430,7 +430,7 @@ msgstr "在éžæ•°ç»„åˆå§‹å€¼è®¾å®šé¡¹ä¸å‡ºçŽ°æ•°ç»„索引" #: c-typeck.c:6764 c-typeck.c:6893 msgid "field name not in record or union initializer" -msgstr "å—段åä¸åœ¨è®°å½•æˆ–è”åˆåˆå§‹åŒ–设定ä¸" +msgstr "å—段åä¸åœ¨è®°å½•æˆ–è”åˆåˆå§‹å€¼è®¾å®šä¸" #: c-typeck.c:6810 msgid "array index in initializer not of integer type" @@ -458,7 +458,7 @@ msgstr "åˆå§‹å€¼è®¾å®šä¸æ•°æ®ç´¢å¼•èŒƒå›´è¶…出数组边界" #: c-typeck.c:6948 c-typeck.c:6975 c-typeck.c:7494 msgid "initialized field with side-effects overwritten" -msgstr "带副作用的å—段åˆå§‹åŒ–设定被覆盖" +msgstr "带副作用的å—段åˆå§‹å€¼è®¾å®šè¢«è¦†ç›–" #: c-typeck.c:6950 c-typeck.c:6977 c-typeck.c:7496 msgid "initialized field overwritten" @@ -4340,7 +4340,7 @@ msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’必须是一个 POINTER #: fortran/check.c:653 #, no-c-format msgid "Array section with a vector subscript at %L shall not be the target of a pointer" -msgstr "%L处由å‘é‡ä¸‹æ ‡é€‰æ‹©çš„部分数组ä¸åº”æ˜¯æŒ‡é’ˆçš„ç›®æ ‡" +msgstr "%L处由å‘é‡ä¸‹æ ‡é€‰æ‹©çš„数组段ä¸åº”æ˜¯æŒ‡é’ˆçš„ç›®æ ‡" #: fortran/check.c:664 #, no-c-format @@ -4487,12 +4487,12 @@ msgstr "%3$L处内建函数‘%2$s’的‘%1$s’实å‚类型必须为 REAL 或 #: fortran/check.c:2335 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be of a dummy variable" -msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’必须是一个哑元å˜é‡" +msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’必须是一个哑元" #: fortran/check.c:2343 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be of an OPTIONAL dummy variable" -msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’必须是一个 OPTIONAL å“‘å˜é‡" +msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’必须是一个 OPTIONAL å“‘å…ƒ" #: fortran/check.c:2359 #, no-c-format @@ -4717,7 +4717,7 @@ msgstr "%2$C处的过程‘%1$s’已ç»åœ¨%3$L处被定义" #: fortran/decl.c:821 #, no-c-format msgid "Name '%s' at %C is already defined as a generic interface at %L" -msgstr "%2$C 处的åå—‘%1$s’已ç»åœ¨ %3$L 处被定义为一般接å£" +msgstr "%2$C处的åå—‘%1$s’已ç»åœ¨%3$L处被定义为泛型接å£" #: fortran/decl.c:834 #, no-c-format @@ -5279,7 +5279,7 @@ msgstr "%C处的 ENTRY è¯å¥ä¸èƒ½å‡ºçŽ°åœ¨ IF-THEN å—ä¸" #: fortran/decl.c:4855 #, no-c-format msgid "ENTRY statement at %C cannot appear within a DO block" -msgstr "%C处的 ENTRY è¯å¥ä¸èƒ½å‡ºçŽ°åœ¨ DO ä¸" +msgstr "%C处的 ENTRY è¯å¥ä¸èƒ½å‡ºçŽ°åœ¨ DO å—ä¸" #: fortran/decl.c:4859 #, no-c-format @@ -5503,9 +5503,9 @@ msgid "Unexpected characters in PARAMETER statement at %C" msgstr "%C处 PARAMETER è¯å¥ä¸æœ‰éžé¢„期的å—符" #: fortran/decl.c:6313 -#, fuzzy, no-c-format +#, no-c-format msgid "Blanket SAVE statement at %C follows previous SAVE statement" -msgstr "%C 处覆盖层 SAVE è¯å¥è·Ÿéšä»¥å‰çš„ SAVE è¯å¥" +msgstr "%C处覆盖 SAVE è¯å¥è·Ÿéšä»¥å‰çš„ SAVE è¯å¥" #: fortran/decl.c:6325 #, no-c-format @@ -5780,9 +5780,9 @@ msgid "There's already a non-generic procedure with binding name '%s' for the de msgstr "%3$C处派生类型‘%2$s’已ç»æœ‰ä¸€ä¸ªç»‘定å为‘%1$s’的éžæ³›åž‹è¿‡ç¨‹" #: fortran/decl.c:7627 -#, fuzzy, no-c-format +#, no-c-format msgid "Binding at %C must have the same access as already defined binding '%s'" -msgstr "在 %C 处的æ†ç»‘必须有与已ç»å®šä¹‰çš„æ†ç»‘“%sâ€ç›¸åŒçš„访问æƒé™" +msgstr "%C处的绑定必须有与已ç»å®šä¹‰çš„绑定‘%s’相åŒçš„访问æƒé™" #: fortran/decl.c:7676 #, no-c-format @@ -5790,9 +5790,9 @@ msgid "Expected specific binding name at %C" msgstr "%C处需è¦ç‰¹å®šçš„绑定å" #: fortran/decl.c:7686 -#, fuzzy, no-c-format +#, no-c-format msgid "'%s' already defined as specific binding for the generic '%s' at %C" -msgstr "在 %3$C 处“%1$sâ€å·²ç»ä¸ºæ™®é€šçš„“%2$sâ€å®šä¹‰ä¸ºç‰¹å®šçš„é™å®š" +msgstr "%3$C处‘%1$s’已ç»å®šä¹‰ä¸ºæ³›åž‹çš„‘%2$s’特定的é™å®š" #: fortran/decl.c:7702 #, no-c-format @@ -5800,9 +5800,9 @@ msgid "Junk after GENERIC binding at %C" msgstr "%C 处的泛型绑定åŽæœ‰åžƒåœ¾å—符" #: fortran/decl.c:7727 -#, fuzzy, no-c-format +#, no-c-format msgid "FINAL declaration at %C must be inside a derived type CONTAINS section" -msgstr "%C 处的 FINAL 声明必须是在派生类型 CONTAINS 节内" +msgstr "%C处的 FINAL 声明必须在一个派生类型的 CONTAINS 节内" #: fortran/decl.c:7738 #, no-c-format @@ -5835,9 +5835,9 @@ msgid "'%s' at %C is already defined as FINAL procedure!" msgstr "%2$C 处的‘%1$s’已ç»è¢«å®šä¹‰ä¸º FINALï¼" #: fortran/decl.c:7866 -#, fuzzy, no-c-format +#, no-c-format msgid "Unknown attribute in !GCC$ ATTRIBUTES statement at %C" -msgstr "%C处 !GCC$ ATTRIBUTES è¯å¥ä¸çš„è¯æ³•é”™è¯¯" +msgstr "%C处 !GCC$ ATTRIBUTES è¯å¥ä¸æœ‰æœªçŸ¥çš„属性" #: fortran/decl.c:7913 #, no-c-format @@ -5918,14 +5918,14 @@ msgid "elemental function arguments at %C are not compliant" msgstr "%C处基本函数的实å‚ä¸å…¼å®¹" #: fortran/expr.c:1967 -#, fuzzy, no-c-format +#, no-c-format msgid "Numeric or CHARACTER operands are required in expression at %L" -msgstr "%L 处的表达å¼ä¸éœ€è¦æ•°å—或 CHARACTER æ“作数" +msgstr "%L处的表达å¼ä¸éœ€è¦æ•°å—或 CHARACTER æ“作数" #: fortran/expr.c:1992 -#, fuzzy, no-c-format +#, no-c-format msgid "Concatenation operator in expression at %L must have two CHARACTER operands" -msgstr "%L 处的表达å¼ä¸çš„并置è¿ç®—符必须有两个 CHARACTER æ“作数" +msgstr "%L处表达å¼ä¸çš„毗连è¿ç®—符必须有两个 CHARACTER æ“作数" #: fortran/expr.c:1999 #, no-c-format @@ -5953,14 +5953,14 @@ msgid "Numeric operands are required in expression at %L" msgstr "%L处的表达å¼éœ€è¦æ•°å—æ“作数" #: fortran/expr.c:2137 -#, fuzzy, no-c-format +#, no-c-format msgid "Assumed character length variable '%s' in constant expression at %L" -msgstr "%2$L 处常é‡è¡¨è¾¾å¼ä¸å‡å®šå—符长度å˜é‡â€œ%1$sâ€" +msgstr "%2$L处常é‡è¡¨è¾¾å¼ä¸æœ‰å‡å®šå—符长度å˜é‡â€˜%1$s’" #: fortran/expr.c:2195 -#, fuzzy, no-c-format +#, no-c-format msgid "transformational intrinsic '%s' at %L is not permitted in an initialization expression" -msgstr "在 %2$L 处å˜æ¢å†…建的 %1$s 在åˆå§‹åŒ–表达å¼ä¸ä¸è¢«å…许" +msgstr "%2$L处的转æ¢å†…建函数‘%1$s’ä¸å…许用在åˆå§‹åŒ–表达å¼ä¸" #: fortran/expr.c:2226 #, no-c-format @@ -5978,14 +5978,14 @@ msgid "Intrinsic function '%s' at %L is not permitted in an initialization expre msgstr "%2$L处内建函数‘%1$s’ä¸å…许出现在在åˆå§‹åŒ–表达å¼ä¸" #: fortran/expr.c:2327 -#, fuzzy, no-c-format +#, no-c-format msgid "PARAMETER '%s' is used at %L before its definition is complete" -msgstr "在其定义完æˆä»¥å‰åœ¨ %2$L 处使用 PARAMETE“%1$sâ€" +msgstr "%2$L处 PARAMETER‘%1$s’在其定义完全之å‰è¢«ä½¿ç”¨" #: fortran/expr.c:2347 -#, fuzzy, no-c-format +#, no-c-format msgid "Assumed size array '%s' at %L is not permitted in an initialization expression" -msgstr "在 %L 处的å‡å®šå¤§å°æ•°ç»„“%1$sâ€åœ¨åˆå§‹åŒ–表达å¼ä¸ä¸è¢«å…许" +msgstr "%L处å‡å®šå¤§å°æ•°ç»„‘%1$s’ä¸èƒ½ç”¨åœ¨åœ¨åˆå§‹åŒ–表达å¼ä¸" #: fortran/expr.c:2353 #, no-c-format @@ -5998,9 +5998,9 @@ msgid "Deferred array '%s' at %L is not permitted in an initialization expressio msgstr "%2$L处的延迟数组‘%1$s’ä¸å…许出现在åˆå§‹åŒ–表达å¼ä¸" #: fortran/expr.c:2365 -#, fuzzy, no-c-format +#, no-c-format msgid "Array '%s' at %L is a variable, which does not reduce to a constant expression" -msgstr "%2$L 处数组“%1$sâ€æ˜¯ä¸ªå˜é‡ï¼Œä¸èƒ½è¢«å½’约为常é‡è¡¨è¾¾å¼" +msgstr "%2$L处数组‘%1$s’是个å˜é‡ï¼Œä¸èƒ½è¢«å½’约为常é‡è¡¨è¾¾å¼" #: fortran/expr.c:2375 #, no-c-format @@ -6035,17 +6035,17 @@ msgstr "%2$Lå¤„è§„æ ¼å‡½æ•°â€˜%1$s’ä¸èƒ½æ˜¯ RECURSIVE" #: fortran/expr.c:2685 #, no-c-format msgid "Dummy argument '%s' not allowed in expression at %L" -msgstr "哑元实å‚‘%s’ä¸èƒ½å‡ºçŽ°åœ¨%L处的表达å¼ä¸" +msgstr "虚å‚‘%s’ä¸èƒ½å‡ºçŽ°åœ¨%L处的表达å¼ä¸" #: fortran/expr.c:2692 #, no-c-format msgid "Dummy argument '%s' at %L cannot be OPTIONAL" -msgstr "%2$L处的哑元实å‚‘%1$s’ä¸èƒ½æ˜¯ OPTIONAL" +msgstr "%2$L处的虚å‚‘%1$s’ä¸èƒ½æ˜¯ OPTIONAL" #: fortran/expr.c:2699 #, no-c-format msgid "Dummy argument '%s' at %L cannot be INTENT(OUT)" -msgstr "%2$L处的‘%1$s’哑元实å‚ä¸èƒ½æ˜¯ INTENT(OUT)" +msgstr "%2$L处的‘%1$s’虚å‚ä¸èƒ½æ˜¯ INTENT(OUT)" #: fortran/expr.c:2730 #, no-c-format @@ -6073,9 +6073,9 @@ msgid "Incompatible ranks in %s (%d and %d) at %L" msgstr "%4$L%1$s ä¸ç§©(%2$d å’Œ %3$d)ä¸å…¼å®¹" #: fortran/expr.c:2847 -#, fuzzy, no-c-format +#, no-c-format msgid "Different shape for %s at %L on dimension %d (%d and %d)" -msgstr "%s ä¸åŒçš„外形在 %L 处关于维次 %d (%d å’Œ %d)" +msgstr "%2$L处 %1$s 在第 %3$d 维上外形ä¸åŒ(%4$d å’Œ %5$d)" #: fortran/expr.c:2893 fortran/expr.c:3153 #, no-c-format @@ -6147,9 +6147,9 @@ msgid "Arithmetic NaN of bit-wise transferred BOZ at %L. This check can be disab msgstr "%L处按ä½è½¬æ¢ BOZ 时产生算术 NaN。这一检查å¯ç”¨ -fno-range-check 选项ç¦ç”¨" #: fortran/expr.c:3055 -#, fuzzy, no-c-format +#, no-c-format msgid "Incompatible types in DATA statement at %L; attempted conversion of %s to %s" -msgstr "%L 处 DATA è¯å¥ä¸ç±»åž‹ä¸å…¼å®¹ï¼›ä¼å›¾ä»Ž %s 到 %s 转æ¢" +msgstr "%L处 DATA è¯å¥ä¸ç±»åž‹ä¸å…¼å®¹ï¼›è¯•å›¾ä»Ž %s 转æ¢åˆ° %s" #: fortran/expr.c:3091 #, no-c-format @@ -6157,9 +6157,9 @@ msgid "Pointer assignment target is not a POINTER at %L" msgstr "%Lå¤„æŒ‡é’ˆèµ‹å€¼çš„ç›®æ ‡ä¸æ˜¯ä¸€ä¸ª POINTER" #: fortran/expr.c:3100 -#, fuzzy, no-c-format +#, no-c-format msgid "'%s' in the pointer assignment at %L cannot be an l-value since it is a procedure" -msgstr "在 %2$L 处指针赋值ä¸çš„“%1$sâ€ä¸èƒ½æ˜¯ä¸€ä¸ªå€¼å› 为它是个过程" +msgstr "%2$L处指针赋值ä¸çš„‘%1$s’ä¸èƒ½æ˜¯ä¸€ä¸ªå·¦å€¼ï¼Œå› 为它是一个过程" #: fortran/expr.c:3131 #, no-c-format @@ -6172,9 +6172,9 @@ msgid "Fortran 2003: Bounds specification for '%s' in pointer assignment at %L" msgstr "Fortran 2003:%2$L处指针赋值è¯å¥ä¸â€˜%1$sâ€™çš„è¾¹ç•Œè§„æ ¼" #: fortran/expr.c:3142 -#, fuzzy, no-c-format +#, no-c-format msgid "Pointer bounds remapping at %L is not yet implemented in gfortran" -msgstr "在 %L 处的指针é™å®šé‡æ˜ 射在 gfortran ä¸è¿˜æœªå®žçŽ°" +msgstr "%L处的指针é™å®šé‡æ˜ 射在 gfortran ä¸å°šæœªå®žçŽ°" #: fortran/expr.c:3162 #, no-c-format @@ -6217,14 +6217,14 @@ msgid "Interface mismatch in procedure pointer assignment at %L: %s" msgstr "%L处过程指针赋值ä¸æŽ¥å£ä¸åŒ¹é…:%s" #: fortran/expr.c:3282 -#, fuzzy, no-c-format +#, no-c-format msgid "Different types in pointer assignment at %L; attempted assignment of %s to %s" -msgstr "%L 处指针赋值时类型ä¸åŒï¼›ä¼å›¾èµ‹å€¼ %s 到 %s" +msgstr "%L处指针赋值时类型ä¸åŒï¼›è¯•å›¾å°† %s 赋值给 %s" #: fortran/expr.c:3290 -#, fuzzy, no-c-format +#, no-c-format msgid "Different kind type parameters in pointer assignment at %L" -msgstr "%L 处指针赋值时ä¸åŒç±»åž‹çš„å‚æ•°" +msgstr "%L处指针赋值时å‚æ•°ç§åˆ«ç±»åž‹ä¸åŒ" #: fortran/expr.c:3297 #, no-c-format @@ -6232,9 +6232,9 @@ msgid "Different ranks in pointer assignment at %L" msgstr "%L处指针赋值时秩ä¸åŒ" #: fortran/expr.c:3319 -#, fuzzy, no-c-format +#, no-c-format msgid "Pointer assignment target is neither TARGET nor POINTER at %L" -msgstr "%L å¤„æŒ‡é’ˆèµ‹å€¼çš„ç›®æ ‡æ—¢ä¸æ˜¯ TARGET 也ä¸æ˜¯ POINTER" +msgstr "%Lå¤„æŒ‡é’ˆèµ‹å€¼çš„ç›®æ ‡æ—¢ä¸æ˜¯ TARGET 也ä¸æ˜¯ POINTER" #: fortran/expr.c:3326 #, no-c-format @@ -6247,9 +6247,9 @@ msgid "Pointer assignment with vector subscript on rhs at %L" msgstr "%L处指针赋值的å³æ‰‹è¾¹å¸¦æœ‰å‘é‡ä¸‹æ ‡" #: fortran/expr.c:3340 -#, fuzzy, no-c-format +#, no-c-format msgid "Pointer assignment target has PROTECTED attribute at %L" -msgstr "%L å¤„æŒ‡é’ˆèµ‹å€¼ç›®æ ‡å¯¹è±¡æœ‰ PROTECTED 属性" +msgstr "%Lå¤„æŒ‡é’ˆèµ‹å€¼ç›®æ ‡å¯¹è±¡æœ‰ PROTECTED 属性" #: fortran/gfortranspec.c:245 #, c-format @@ -6376,9 +6376,9 @@ msgid "Intrinsic operator interface at %L must be a FUNCTION" msgstr "%L处内建è¿ç®—符接å£å¿…须是一个 FUNCTION" #: fortran/interface.c:655 -#, fuzzy, no-c-format +#, no-c-format msgid "First argument of defined assignment at %L must be INTENT(OUT) or INTENT(INOUT)" -msgstr "%L 处定义赋值的第一个å‚数必须是 INTENT(OUT) 或 INTENT(INOUT)" +msgstr "%L处定义赋值的第一个å‚数必须是 INTENT(OUT) 或 INTENT(INOUT)" #: fortran/interface.c:662 #, no-c-format @@ -6443,12 +6443,12 @@ msgstr "%2$L处实å‚‘%1$s’秩ä¸åŒ¹é…(%3$d å’Œ %4$d)" #: fortran/interface.c:1486 #, no-c-format msgid "Fortran 2003: Scalar CHARACTER actual argument with array dummy argument '%s' at %L" -msgstr "Fortran 2003:%2$Lå¤„æ ‡é‡ CHARACTER 实å‚带有数组哑å‚数‘%1$s’" +msgstr "Fortran 2003:%2$Lå¤„æ ‡é‡ CHARACTER 实å‚带有数组虚å‚‘%1$s’" #: fortran/interface.c:1511 -#, fuzzy, no-c-format +#, no-c-format msgid "Element of assumed-shaped array passed to dummy argument '%s' at %L" -msgstr "%2$L 处å‡å®šå¤–å½¢çš„æ•°ç»„çš„å…ƒç´ ä¼ é€’ç»™å“‘å‚数“%1$sâ€" +msgstr "%2$L处å‡å®šå¤–å½¢çš„æ•°ç»„çš„å…ƒç´ ä¼ é€’ç»™è™šå‚‘%1$s’" #: fortran/interface.c:1828 #, no-c-format @@ -6456,9 +6456,9 @@ msgid "Keyword argument '%s' at %L is not in the procedure" msgstr "%2$L处关键å—实å‚‘%1$s’ä¸åœ¨è¿‡ç¨‹é‡Œ" #: fortran/interface.c:1836 -#, fuzzy, no-c-format +#, no-c-format msgid "Keyword argument '%s' at %L is already associated with another actual argument" -msgstr "在 %C 处关键å—å‚数“%sâ€å·²ç»ä¸Žåˆ«çš„实å‚相关" +msgstr "%C处关键å—实å‚‘%s’已ç»ä¸Žåˆ«çš„实å‚相关" #: fortran/interface.c:1846 #, no-c-format @@ -6476,24 +6476,24 @@ msgid "Unexpected alternate return spec in subroutine call at %L" msgstr "%L处å进程调用ä¸çš„替代返回é™å®šä¸Žé¢„期ä¸ç¬¦" #: fortran/interface.c:1889 -#, fuzzy, no-c-format +#, no-c-format msgid "Character length mismatch (%ld/%ld) between actual argument and pointer or allocatable dummy argument '%s' at %L" -msgstr "在实å‚和指针或 %4$L 处å¯åˆ†é…å“‘å‚数“%3$sâ€å®žå‚之间的å—符长度失é…(%1$lu/%2$lu)" +msgstr "%4$L处实å‚和指针或å¯åˆ†é…虚å‚‘%3$s’间å—符长度ä¸åŒ¹é…(%1$lu/%2$lu)" #: fortran/interface.c:1896 -#, fuzzy, no-c-format +#, no-c-format msgid "Character length mismatch (%ld/%ld) between actual argument and assumed-shape dummy argument '%s' at %L" -msgstr "在 %4$L 处实å‚å’Œå‡å®šæˆå½¢å“‘å‚数“%3$sâ€ä¹‹é—´çš„å—符长度失é…(%1$lu/%2$lu)" +msgstr "%4$L处实å‚å’Œå‡å®šå¤–形虚å‚‘%3$s’间å—符长度ä¸åŒ¹é…(%1$lu/%2$lu)" #: fortran/interface.c:1912 -#, fuzzy, no-c-format +#, no-c-format msgid "Character length of actual argument shorter than of dummy argument '%s' (%lu/%lu) at %L" -msgstr "在 %L 处实å‚çš„å—符长度çŸäºŽå“‘å‚数“%sâ€(%lu/%lu)" +msgstr "%4$L处实å‚çš„å—符长度çŸäºŽè™šå‚‘%1$s’(%2$lu/%3$lu)" #: fortran/interface.c:1917 -#, fuzzy, no-c-format +#, no-c-format msgid "Actual argument contains too few elements for dummy argument '%s' (%lu/%lu) at %L" -msgstr "在 %4$L 处实å‚包å«çš„å…ƒç´ å¯¹äºŽå“‘å‚数“%1$sâ€(%2$lu/%3$lu)æ¥è¯´å¤ªå°‘了" +msgstr "%4$L处实å‚包å«çš„å…ƒç´ å¯¹äºŽè™šå‚‘%1$s’(%2$lu/%3$lu)而言太少" #: fortran/interface.c:1934 #, no-c-format @@ -6528,32 +6528,32 @@ msgstr "‘%s’的实å‚在%L处必须是 ALLOCATABLE çš„" #: fortran/interface.c:2001 #, no-c-format msgid "Actual argument at %L must be definable as the dummy argument '%s' is INTENT = OUT/INOUT" -msgstr "%L处的实å‚必须是å¯å®šä¹‰çš„ï¼Œå› ä¸ºå“‘å‚数‘%s’是 INTENT = OUT/INOUT" +msgstr "%L处的实å‚必须是å¯å®šä¹‰çš„ï¼Œå› ä¸ºè™šå‚‘%s’是 INTENT = OUT/INOUT" #: fortran/interface.c:2010 -#, fuzzy, no-c-format +#, no-c-format msgid "Actual argument at %L is use-associated with PROTECTED attribute and dummy argument '%s' is INTENT = OUT/INOUT" -msgstr "在 %1$L 处实际å‚数是使用相关的 PROTECTED 属性并且å‡å‚数“%2$sâ€æ˜¯ INTENT = OUT/INOUT" +msgstr "%L处实å‚与 PROTECTED 属性使用相关,而虚å‚‘%s’是 INTENT = OUT/INOUT" #: fortran/interface.c:2023 #, no-c-format msgid "Array-section actual argument with vector subscripts at %L is incompatible with INTENT(OUT), INTENT(INOUT) or VOLATILE attribute of the dummy argument '%s'" -msgstr "%L处带有å‘é‡ä¸‹æ ‡çš„数组节实际å‚数与哑实å‚‘%s’的 INTENT(OUT)ã€INTENT(INOUT) 或 VOLATILE 属性ä¸å…¼å®¹" +msgstr "%L处带有å‘é‡ä¸‹æ ‡çš„数组节实际å‚数与虚å‚‘%s’的 INTENT(OUT)ã€INTENT(INOUT) 或 VOLATILE 属性ä¸å…¼å®¹" #: fortran/interface.c:2040 -#, fuzzy, no-c-format +#, no-c-format msgid "Assumed-shape actual argument at %L is incompatible with the non-assumed-shape dummy argument '%s' due to VOLATILE attribute" -msgstr "在 %L 处å‡å®šå¤–形实际的å‚数由于 VOLATILE 属性与éžé‡‡å–å‡å®šå¤–å½¢å‡å‚数“%sâ€ä¸å…¼å®¹" +msgstr "%L处å‡å®šå¤–形的实å‚由于 VOLATILE 属性而与éžå‡å®šå¤–形虚å‚‘%s’ä¸å…¼å®¹" #: fortran/interface.c:2052 -#, fuzzy, no-c-format +#, no-c-format msgid "Array-section actual argument at %L is incompatible with the non-assumed-shape dummy argument '%s' due to VOLATILE attribute" -msgstr "在 %L 处数组节实际的å‚数由于 VOLATILE 属性与éžå‡å®šå¤–å½¢å‡å‚数“%sâ€ä¸å…¼å®¹" +msgstr "%L处数组节实å‚由于 VOLATILE 属性而与éžå‡å®šå¤–形虚å‚‘%s’ä¸å…¼å®¹" #: fortran/interface.c:2071 -#, fuzzy, no-c-format +#, no-c-format msgid "Pointer-array actual argument at %L requires an assumed-shape or pointer-array dummy argument '%s' due to VOLATILE attribute" -msgstr "在 %L 处指针数组实际的å‚数由于 VOLATILE 属性è¦æ±‚一个å‡å®šå¤–形或指针数组å‡å‚æ•° “%sâ€" +msgstr "%L处指针数组的实å‚由于 VOLATILE 属性è¦æ±‚一个å‡å®šå¤–形或指针数组虚å‚‘%s’" #: fortran/interface.c:2101 #, no-c-format @@ -6561,24 +6561,24 @@ msgid "Missing actual argument for argument '%s' at %L" msgstr "å‚数‘%s’在%L处缺少实å‚" #: fortran/interface.c:2287 -#, fuzzy, no-c-format +#, no-c-format msgid "Same actual argument associated with INTENT(%s) argument '%s' and INTENT(%s) argument '%s' at %L" -msgstr "åŒæ ·çš„与 INTENT(%1$s) å‚数“%2$sâ€ç›¸å…³çš„实际å‚数和在 %4$L 处 INTENT(%3$s) å‚数“%sâ€" +msgstr "%5$L处åŒæ ·çš„实际å‚数与 INTENT(%1$s) 实å‚‘%2$s’和 INTENT(%3$s)实å‚‘%4$s’相关è”" #: fortran/interface.c:2343 -#, fuzzy, no-c-format +#, no-c-format msgid "Procedure argument at %L is INTENT(IN) while interface specifies INTENT(%s)" -msgstr "当接å£æŒ‡å®š INTENT(%2$s) 时在 %1$L 处过程å‚数是 INTENT(IN)" +msgstr "%L处过程实å‚是 INTENT(IN) 而接å£æŒ‡å®šäº† INTENT(%s)" #: fortran/interface.c:2353 -#, fuzzy, no-c-format +#, no-c-format msgid "Procedure argument at %L is local to a PURE procedure and is passed to an INTENT(%s) argument" -msgstr "在 %1$L 处的过程å‚数对于 PURE 过程是局部的å‚æ•°å¹¶ä¸”è¢«ä¼ é€’ç»™ä¸€ä¸ª INTENT(%2$s) å‚æ•°" +msgstr "%L处的过程å‚数对于 PURE è¿‡ç¨‹æ˜¯å±€éƒ¨çš„ï¼Œä½†è¢«ä¼ é€’ç»™ä¸€ä¸ª INTENT(%2s) å‚æ•°" #: fortran/interface.c:2361 -#, fuzzy, no-c-format +#, no-c-format msgid "Procedure argument at %L is local to a PURE procedure and has the POINTER attribute" -msgstr "在 %2$L 处的过程å‚数对于 PURE 过程是局部的å‚数并且有 POINTER 属性" +msgstr "%L处的过程å‚数对于 PURE 过程是局部的,但是有 POINTER 属性" #: fortran/interface.c:2387 #, no-c-format @@ -6586,9 +6586,9 @@ msgid "Procedure '%s' called with an implicit interface at %L" msgstr "调用过程‘%s’带éšå¼æŽ¥å£ï¼Œä½äºŽ %L" #: fortran/interface.c:2398 -#, fuzzy, no-c-format +#, no-c-format msgid "Keyword argument requires explicit interface for procedure '%s' at %L" -msgstr "%2$L 处过程“%1$sâ€çš„关键å—å‚æ•°è¦æ±‚显å¼çš„接å£" +msgstr "%2$L处过程‘%1$s’的关键å—å‚æ•°è¦æ±‚显å¼çš„接å£" #: fortran/interface.c:2430 #, no-c-format @@ -6606,9 +6606,9 @@ msgid "Entity '%s' at %C is already present in the interface" msgstr "%2$C处实体‘%1$s’已ç»å‡ºçŽ°åœ¨æŽ¥å£ä¸" #: fortran/intrinsic.c:961 -#, fuzzy, no-c-format +#, no-c-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 "在 %2$L 处内在的“%1$sâ€ä¸åŒ…å«åœ¨é€‰ä¸çš„æ ‡å‡†ä¸ï¼Œä½†æ˜¯ %3$s 和“%4$sâ€å°†æŒ‰å£°æ˜Žäº† EXTERNAL æ¥å¤„ç†ã€‚ 使用一个适当的 -std=* 选项或定义 -fall-intrinsics 以å…许这个内在的。" +msgstr "%2$L处内建的‘%1$s’ä¸åŒ…å«åœ¨é€‰ä¸çš„æ ‡å‡†ä¸ï¼Œä½†æ˜¯ %3$s 和‘%4$s’将按声明为 EXTERNAL æ¥å¤„ç†ã€‚使用一个适当的 -std=* 选项或定义 -fall-intrinsics 以å…许这个建函数。" #: fortran/intrinsic.c:3241 #, no-c-format @@ -6616,9 +6616,9 @@ msgid "Too many arguments in call to '%s' at %L" msgstr "%2$L处对‘%1$s’的调用给出的å‚数太多" #: fortran/intrinsic.c:3256 -#, fuzzy, no-c-format +#, no-c-format msgid "The argument list functions %%VAL, %%LOC or %%REF are not allowed in this context at %L" -msgstr "å‚数列表功能 %%VALã€%%LOC 或 %%REF 在 %L 处该上下文ä¸ä¸è¢«å…许" +msgstr "å‚数列表函数 %%VALã€%%LOC 或 %%REF 在%L处该上下文ä¸ä¸è¢«å…许" #: fortran/intrinsic.c:3259 #, no-c-format @@ -6626,9 +6626,9 @@ msgid "Can't find keyword named '%s' in call to '%s' at %L" msgstr "%3$L处对‘%2$s’的调用ä¸æ‰¾ä¸åˆ°å为‘%1$s’的关键å—" #: fortran/intrinsic.c:3266 -#, fuzzy, no-c-format +#, no-c-format msgid "Argument '%s' is appears twice in call to '%s' at %L" -msgstr "å‚数“%1$sâ€ï¼Œåœ¨ %3$L 处调用“%2$sâ€æ—¶å‡ºçŽ°ä¸¤æ¬¡" +msgstr "%3$L处å‚数‘%1$s’在调用‘%2$s’时出现两次" #: fortran/intrinsic.c:3280 #, no-c-format @@ -6656,9 +6656,9 @@ msgid "Fortran 2003: Function '%s' as initialization expression at %L" msgstr "Fortran 2003:函数‘%s’在%L处用作åˆå§‹åŒ–表达å¼" #: fortran/intrinsic.c:3857 -#, fuzzy, no-c-format +#, no-c-format msgid "Fortran 2003: Elemental function as initialization expression with non-integer/non-character arguments at %L" -msgstr "Fortran 2003:作为åˆå§‹è¡¨è¾¾å¼çš„基本函数在 %L 处用整数或éžå—符的å‚æ•°" +msgstr "Fortran 2003:作为åˆå§‹è¡¨è¾¾å¼çš„基本函数在%L处使用了éžæ•´æ•°æˆ–éžå—符的å‚æ•°" #: fortran/intrinsic.c:3918 #, no-c-format @@ -6681,14 +6681,14 @@ msgid "Can't convert %s to %s at %L" msgstr "ä¸èƒ½å°† %s 转æ¢ä¸º %s,于 %L" #: fortran/intrinsic.c:4135 -#, fuzzy, no-c-format +#, no-c-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 "在 %L 处声明的“%sâ€å¯èƒ½é®ç›–内在的相åŒåå—。 为了调用内在的,è¦æ±‚显å¼çš„ INTRINSIC 声明。" +msgstr "%L处声明的‘%s’å¯èƒ½æŽ©ç›–åŒå的内建函数。调用内建函数å¯èƒ½éœ€è¦æ˜¾å¼çš„ INTRINSIC 声明。" #: fortran/intrinsic.c:4140 -#, fuzzy, no-c-format +#, no-c-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 "在 %L 处声明的“%sâ€ä¹Ÿæ˜¯ä¸€ä¸ªå†…在的åå—。 åªèƒ½é€šè¿‡ç»è¿‡ä¸€ä¸ªæ˜¾å¼æŽ¥å£æˆ–声明 EXTERNAL æ¥è°ƒç”¨å®ƒã€‚" +msgstr "%2$L处声明的‘%1$s’也是一个内建函数的åå—。它åªèƒ½é€šè¿‡ä¸€ä¸ªæ˜¾å¼æŽ¥å£æˆ–声明 EXTERNAL æ¥è°ƒç”¨ã€‚" #: fortran/io.c:167 fortran/primary.c:771 #, no-c-format @@ -6878,9 +6878,9 @@ msgid "Variable '%s' at %L has not been assigned a format label" msgstr "å˜é‡â€˜%s’在 %L 尚未分é…åˆ°æ ¼å¼æ ‡å·" #: fortran/io.c:1405 -#, fuzzy, no-c-format +#, no-c-format msgid "Scalar '%s' in FORMAT tag at %L is not an ASSIGNED variable" -msgstr "%2$L 处的 FORMAT æ ‡è®°ä¸çš„æ ‡é‡â€œ%1$sâ€ä¸æ˜¯ä¸€ä¸ª ASSIGNED å˜é‡" +msgstr "%2$L处的 FORMAT æ ‡è®°ä¸çš„æ ‡é‡â€˜%1$s’ä¸æ˜¯ä¸€ä¸ª ASSIGNED å˜é‡" #: fortran/io.c:1417 #, no-c-format @@ -7038,9 +7038,9 @@ msgid "Duplicate NML specification at %C" msgstr "%C处é‡å¤çš„ NML è§„æ ¼" #: fortran/io.c:2585 -#, fuzzy, no-c-format +#, no-c-format msgid "Symbol '%s' at %C must be a NAMELIST group name" -msgstr "%2$C 处的符å·â€œ%1$sâ€å¿…须是个 NAMELIST 组å" +msgstr "%2$C处的符å·â€˜%1$s’必须是个 NAMELIST 组å" #: fortran/io.c:2650 #, no-c-format @@ -7058,9 +7058,9 @@ msgid "UNIT specification at %L must be an INTEGER expression or a CHARACTER var msgstr "%L处的 UNIT è§„æ ¼å¿…é¡»æ˜¯ INTEGER 表达å¼æˆ–一个 CHARACTER å˜é‡" #: fortran/io.c:2758 -#, fuzzy, no-c-format +#, no-c-format msgid "Invalid form of WRITE statement at %L, UNIT required" -msgstr "%L 处 WRITE è¯å¥çš„éžæ³•å½¢å¼ï¼Œè¦æ±‚ UNIT" +msgstr "%L处 WRITE è¯å¥å½¢å¼æ— æ•ˆï¼Œéœ€è¦ UNIT" #: fortran/io.c:2769 #, no-c-format @@ -7113,9 +7113,9 @@ msgid "Expected expression in %s statement at %C" msgstr "%2$Cå¤„éœ€è¦ %1$s è¯å¥" #: fortran/io.c:3000 -#, fuzzy, no-c-format +#, no-c-format msgid "Variable '%s' in input list at %C cannot be INTENT(IN)" -msgstr "在 %2$C 处输入列表ä¸å˜é‡â€œ%1$sâ€ä¸èƒ½æ˜¯ INTENT(IN)" +msgstr "%2$C处输入列表ä¸çš„å˜é‡â€˜%1$s’ä¸èƒ½æ˜¯ INTENT(IN)" #: fortran/io.c:3010 #, no-c-format @@ -7123,9 +7123,9 @@ msgid "Cannot read to variable '%s' in PURE procedure at %C" msgstr "ä¸èƒ½åœ¨%2$C处的 PURE 过程ä¸è¯»å–å˜é‡â€˜%1$s’" #: fortran/io.c:3027 -#, fuzzy, no-c-format +#, no-c-format msgid "Cannot write to internal file unit '%s' at %C inside a PURE procedure" -msgstr "在 PURE 过程ä¸ä¸èƒ½å†™ %2$C 处的内部文件å•å…ƒâ€œ%1$sâ€" +msgstr "%2$C处 PURE 过程ä¸ä¸èƒ½å†™å…¥å†…部文件å•å…ƒâ€˜%1$s’" #. A general purpose syntax error. #: fortran/io.c:3088 fortran/io.c:3692 fortran/gfortran.h:2364 @@ -7249,9 +7249,9 @@ msgid "Name at %C is too long" msgstr "%C çš„åå—太长" #: fortran/match.c:556 -#, fuzzy, no-c-format +#, no-c-format msgid "Invalid character '$' at %C. Use -fdollar-ok to allow it as an extension" -msgstr "在 %C å¤„æ— æ•ˆçš„å—符 '$'。使用 -fdollar-ok å…许它作为一个扩展" +msgstr "%Cå¤„æ— æ•ˆçš„å—符‘$’。使用 -fdollar-ok 以å…许它作为一个扩展" #: fortran/match.c:607 fortran/match.c:655 #, no-c-format @@ -7299,14 +7299,14 @@ msgid "Syntax error in IF-expression at %C" msgstr "%C处 IF 表达å¼è¯æ³•é”™è¯¯" #: fortran/match.c:1456 -#, fuzzy, no-c-format +#, no-c-format msgid "Block label not appropriate for arithmetic IF statement at %C" -msgstr "%C 处的算术 IF è¯å¥å—æ ‡è®°ä¸é€‚åˆ" +msgstr "%C处的å—æ ‡å·ä¸é€‚于算术 IF è¯å¥" #: fortran/match.c:1494 -#, fuzzy, no-c-format +#, no-c-format msgid "Block label is not appropriate for IF statement at %C" -msgstr "%C 处的 IF è¯å¥å—æ ‡è®°ä¸é€‚åˆ" +msgstr "%C处的å—æ ‡å·ä¸é€‚于 IF è¯å¥" #: fortran/match.c:1574 fortran/primary.c:3007 #, no-c-format @@ -7339,9 +7339,9 @@ msgid "Unexpected junk after ELSE IF statement at %C" msgstr "%C处 ELSE IF è¯å¥åŽæœ‰éžé¢„期的垃圾å—符" #: fortran/match.c:1862 -#, fuzzy, no-c-format +#, no-c-format msgid "Name '%s' in %s statement at %C is not a loop name" -msgstr "DATA å™è¿°ä¸å…许出现在 %C 处 %s å™è¿°ä¸çš„å称“%sâ€ä¸æ˜¯ä¸ªå›žåœˆå称" +msgstr "%3$C处 %2$s è¯å¥ä¸çš„åå—‘%1$s’ä¸æ˜¯ä¸€ä¸ªå¾ªçŽ¯å" #: fortran/match.c:1878 #, no-c-format @@ -7384,9 +7384,9 @@ msgid "Deleted feature: Assigned GOTO statement at %C" msgstr "å·²åˆ é™¤çš„ç‰¹æ€§ï¼š%C处赋值 GOTO è¯å¥" #: fortran/match.c:2148 fortran/match.c:2200 -#, fuzzy, no-c-format +#, no-c-format msgid "Statement label list in GOTO at %C cannot be empty" -msgstr "%C 处 GOTO ä¸çš„è¯å¥æ ‡å·åˆ—表ä¸èƒ½ä¸ºç©º" +msgstr "%C处 GOTO ä¸çš„è¯å¥æ ‡å·åˆ—表ä¸èƒ½ä¸ºç©º" #: fortran/match.c:2210 #, no-c-format @@ -7420,9 +7420,9 @@ msgid "Bad allocate-object at %C for a PURE procedure" msgstr "%C处 PURE 过程ä¸åˆ†é…对象错误" #: fortran/match.c:2465 -#, fuzzy, no-c-format +#, no-c-format msgid "Type of entity at %L is type incompatible with typespec" -msgstr "æˆå‘˜æŒ‡é’ˆç±»åž‹%qT与对象类型%qTä¸å…¼å®¹" +msgstr "%L处实体类型与 typepec 类型ä¸å…¼å®¹" #: fortran/match.c:2473 #, no-c-format @@ -7510,9 +7510,9 @@ msgid "Junk after CALL at %C" msgstr "%C处在 CALL 以åŽæœ‰åžƒåœ¾å—符" #: fortran/match.c:2931 -#, fuzzy, no-c-format +#, no-c-format msgid "Expected type-bound procedure or procedure pointer component at %C" -msgstr "å‚数‘%s’在%L处需è¦ä¸€ä¸ªè¿‡ç¨‹" +msgstr "%C处需è¦ä¸€ä¸ªç±»åž‹é™å®šçš„过程或过程指针组件" #: fortran/match.c:3150 #, no-c-format @@ -7528,14 +7528,14 @@ msgstr "符å·â€˜%s’在%C处已ç»æ˜¯ä¸€ä¸ªéž COMMON 的外部符å·" #. cause it's just semantic, and we can see if there #. are more errors. #: fortran/match.c:3245 -#, fuzzy, no-c-format +#, no-c-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 "在公共å—“%3$sâ€ä¸çš„ %2$L 处的å˜é‡â€œ%1$sâ€å¿…须被声明为与 C å¯äº’æ“ä½œçš„ç±»å› ä¸ºå…¬å…±å—“%4$sâ€æ˜¯ bind(c)" +msgstr "%4$C处公共å—‘%3$s’ä¸çš„%2$L处的å˜é‡â€˜%1$s’必须声明为有与 C å¯äº’æ“作的ç§åˆ«ï¼Œå› 为公共å—‘%5$s’是 bind(c)" #: fortran/match.c:3254 -#, fuzzy, no-c-format +#, no-c-format msgid "Variable '%s' in common block '%s' at %C can not be bind(c) since it is not global" -msgstr "在 %3$C 处的公共å—“%2$sâ€ä¸çš„å˜é‡â€œ%1$sâ€ä¸èƒ½æ˜¯ bind(c)ï¼Œå› ä¸ºå®ƒä¸æ˜¯å…¨å±€çš„" +msgstr "%3$C处的公共å—‘%2$s’ä¸çš„å˜é‡â€˜%1$s’ä¸èƒ½æ˜¯ bind(c)ï¼Œå› ä¸ºå®ƒä¸æ˜¯å…¨å±€çš„" #: fortran/match.c:3261 #, no-c-format @@ -7543,9 +7543,9 @@ msgid "Symbol '%s' at %C is already in a COMMON block" msgstr "符å·â€˜%s’在%C处已ç»åœ¨ä¸€ä¸ª COMMON å—ä¸" #: fortran/match.c:3269 -#, fuzzy, no-c-format +#, no-c-format msgid "Initialized symbol '%s' at %C can only be COMMON in BLOCK DATA" -msgstr "在 %C 处åˆå§‹åŒ–的符å·â€œ%sâ€ä»…å¯ä»¥æ˜¯åœ¨ BLOCK DATA ä¸çš„ COMMON" +msgstr "%2$C处已åˆå§‹åŒ–的符å·â€˜%1$s’仅å¯ä»¥æ˜¯åœ¨ BLOCK DATA ä¸çš„ COMMON" #: fortran/match.c:3296 #, no-c-format @@ -7553,44 +7553,44 @@ msgid "Array specification for symbol '%s' in COMMON at %C must be explicit" msgstr "%2$C处 COMMON ä¸ç¬¦å·â€˜%1$sâ€™çš„æ•°ç»„è§„æ ¼å¿…é¡»æ˜¯æ˜¾å¼çš„" #: fortran/match.c:3306 -#, fuzzy, no-c-format +#, no-c-format msgid "Symbol '%s' in COMMON at %C cannot be a POINTER array" -msgstr "%2$C 处 COMMON ä¸çš„符å·â€œ%1$sâ€ä¸èƒ½æ˜¯ä¸ª POINTER 数组" +msgstr "%2$C处 COMMON ä¸çš„符å·â€˜%1$s’ä¸èƒ½æ˜¯ä¸ª POINTER 数组" #: fortran/match.c:3338 -#, fuzzy, no-c-format +#, no-c-format msgid "Symbol '%s', in COMMON block '%s' at %C is being indirectly equivalenced to another COMMON block '%s'" -msgstr "在 %3$C 处 COMMON å—“%2$sâ€çš„ä¸ç¬¦å· '%1$s 是间接地ç‰ä»·å¦ä¸€ä¸ª COMMON å— '%4$s'çš„" +msgstr "%3$C处 COMMON å—‘%2$s’的ä¸ç¬¦å·â€˜%1$s’间接地ç‰ä»·äºŽå¦ä¸€ä¸ª COMMON å—‘%4$s’" #: fortran/match.c:3446 -#, fuzzy, no-c-format +#, no-c-format msgid "Namelist group name '%s' at %C already has a basic type of %s" -msgstr "在 %2$C 处的组å列表“%1$sâ€å·²ç»æœ‰ä¸€ä¸ªåŸºæœ¬ç±»åž‹ %3$s" +msgstr "%2$C处的组å列表‘%1$s’已ç»æœ‰ä¸€ä¸ªåŸºæœ¬ç±»åž‹ %3$s" #: fortran/match.c:3454 -#, fuzzy, no-c-format +#, no-c-format msgid "Namelist group name '%s' at %C already is USE associated and cannot be respecified." -msgstr "在 %2$C 处的组å列表“%1$sâ€å·²ç»æ˜¯ç›¸å…³çš„ USE 并且ä¸èƒ½é‡æ–°æŒ‡å®š" +msgstr "%2$C处组å列表‘%1$s’已ç»ä¸º USE ç›¸å…³å› æ¤ä¸èƒ½è¢«é‡æ–°æŒ‡å®šã€‚" #: fortran/match.c:3481 -#, fuzzy, no-c-format +#, no-c-format msgid "Assumed size array '%s' in namelist '%s' at %C is not allowed" -msgstr "ä¸å…许 %3$L 处 %2$s åå—列表ä¸å‡å®šå¤§å°çš„数组“%1$sâ€" +msgstr "%3$C处åå—列表‘%2$s’ä¸çš„å‡å®šå¤§å°æ•°ç»„‘%1$s’ä¸è¢«å…许" #: fortran/match.c:3488 -#, fuzzy, no-c-format +#, no-c-format msgid "Assumed character length '%s' in namelist '%s' at %C is not allowed" -msgstr "%3$C 处åå—列表 '%2$s’的å‡å®šå—符长度“%1$sâ€ä¸è¢«å…许" +msgstr "%3$C处åå—列表‘%2$s’ä¸å‡å®šå—符长度‘%1$s’ä¸è¢«å…许" #: fortran/match.c:3615 -#, fuzzy, no-c-format +#, no-c-format msgid "Derived type component %C is not a permitted EQUIVALENCE member" -msgstr "派生类型组件 %C 是个ä¸è®¸å¯çš„ EQUIVALENCE æˆå‘˜" +msgstr "派生类型组件%Cä¸æ˜¯å…许的 EQUIVALENCE æˆå‘˜" #: fortran/match.c:3623 -#, fuzzy, no-c-format +#, no-c-format msgid "Array reference in EQUIVALENCE at %C cannot be an array section" -msgstr "%C 处 EQUIVALENCE ä¸çš„数组引用ä¸èƒ½æ˜¯ä¸ªæ•°ç»„部分" +msgstr "%C处 EQUIVALENCE ä¸çš„数组引用ä¸èƒ½æ˜¯ä¸ªæ•°ç»„段" #: fortran/match.c:3651 #, no-c-format @@ -7598,9 +7598,9 @@ msgid "EQUIVALENCE at %C requires two or more objects" msgstr "%C处的 EQUIVALENCE 需è¦ä¸¤ä¸ªæˆ–更多的对象" #: fortran/match.c:3665 -#, fuzzy, no-c-format +#, no-c-format msgid "Attempt to indirectly overlap COMMON blocks %s and %s by EQUIVALENCE at %C" -msgstr "试图由在 %3$C 处的 EQUIVALENCE 去间接地é‡å COMMON å— %1$s å’Œ %2$s" +msgstr "%3$C处的 EQUIVALENCE 试图间接地é‡å COMMON å— %1$s å’Œ %2$s" #: fortran/match.c:3678 #, no-c-format @@ -7668,9 +7668,9 @@ msgid "ELSEWHERE statement at %C not enclosed in WHERE block" msgstr "%C处的 ELSEWHERE è¯å¥ä¸åœ¨ WHERE å—ä¸" #: fortran/match.c:4410 -#, fuzzy, no-c-format +#, no-c-format msgid "Label '%s' at %C doesn't match WHERE label '%s'" -msgstr "%2$C å¤„çš„æ ‡å·â€œ%1$sâ€ä¸åŒ¹é… WHERE æ ‡å·â€œ%2$sâ€" +msgstr "%2$Cå¤„çš„æ ‡å·â€˜%1$s’ä¸åŒ¹é… WHERE æ ‡å·â€˜%3$s’" #: fortran/match.c:4510 #, no-c-format @@ -7719,9 +7719,9 @@ msgid "Fortran 2003: module nature in USE statement at %C" msgstr "Fortran 2003:%C处的 USE è¯å¥ä¸æ¨¡å—本性" #: fortran/module.c:531 -#, fuzzy, no-c-format +#, no-c-format msgid "Module nature in USE statement at %C shall be either INTRINSIC or NON_INTRINSIC" -msgstr "在 %C 处 USE è¯å¥ä¸çš„模å—本性应该是 INTRINSIC 或 NON_INTRINSIC ä¸çš„任何一个" +msgstr "%C处 USE è¯å¥ä¸çš„模å—本性应该是 INTRINSIC 或 NON_INTRINSIC ä¸çš„一个" #: fortran/module.c:544 #, no-c-format @@ -7744,9 +7744,9 @@ msgid "Fortran 2003: Renaming operators in USE statements at %C" msgstr "Fortran 2003:%C处的 USE è¯å¥ä¸æ›´åè¿ç®—符" #: fortran/module.c:657 -#, fuzzy, no-c-format +#, no-c-format msgid "The name '%s' at %C has already been used as an external module name." -msgstr "%2$C 处的åå—“%1$sâ€å·²ç»è¢«ç”¨ä½œå¤–部模å—å。" +msgstr "%2$C处的åå—‘%1$s’已ç»è¢«ç”¨ä½œå¤–部模å—å。" #: fortran/module.c:934 #, no-c-format @@ -7841,9 +7841,9 @@ msgid "Bad type in constant expression" msgstr "常é‡è¡¨è¾¾å¼ä¸ç±»åž‹é”™è¯¯" #: fortran/module.c:3152 -#, fuzzy, no-c-format +#, no-c-format msgid "Namelist %s cannot be renamed by USE association to %s" -msgstr "åå—列表 %s ä¸èƒ½ç”¨å¯¹ %s çš„å…³è”æ¥æ›´å" +msgstr "åå—列表 %s ä¸èƒ½ä¸ºå¯¹ %s çš„ USE å…³è”æ¥æ›´å" #: fortran/module.c:4436 #, no-c-format @@ -7886,14 +7886,14 @@ msgid "Can't delete temporary module file '%s': %s" msgstr "æ— æ³•åˆ é™¤ä¸´æ—¶æ¨¡å—文件‘%s’:%s" #: fortran/module.c:5133 fortran/module.c:5216 -#, fuzzy, no-c-format +#, no-c-format msgid "Symbol '%s' referenced at %L does not exist in intrinsic module ISO_C_BINDING." -msgstr "%2$L 处引用的符å·â€œ%1$sâ€åœ¨å†…å»ºæ¨¡å— ISO_C_BINDING ä¸ä¸å˜åœ¨" +msgstr "%2$L处引用的符å·â€˜%1$sâ€™åœ¨å†…å»ºæ¨¡å— ISO_C_BINDING ä¸ä¸å˜åœ¨." #: fortran/module.c:5251 -#, fuzzy, no-c-format +#, no-c-format msgid "Symbol '%s' referenced at %L not found in intrinsic module ISO_C_BINDING" -msgstr "%2$L 处引用的符å·â€œ%1$sâ€åœ¨å†…å»ºæ¨¡å— ISO_C_BINDING ä¸æ‰¾ä¸åˆ°" +msgstr "%2$L处引用的符å·â€˜%1$sâ€™åœ¨å†…å»ºæ¨¡å— ISO_C_BINDING ä¸æ‰¾ä¸åˆ°" #: fortran/module.c:5273 #, no-c-format @@ -7901,29 +7901,29 @@ msgid "Symbol '%s' already declared" msgstr "符å·â€˜%s’已ç»è¢«å£°æ˜Žè¿‡" #: fortran/module.c:5328 -#, fuzzy, no-c-format +#, no-c-format msgid "Use of intrinsic module '%s' at %C conflicts with non-intrinsic module name used previously" -msgstr "在 %2$C 处内在的模å—“%1$sâ€çš„使用与以å‰ä½¿ç”¨çš„éžå†…在的模å—åå—相冲çª" +msgstr "%2$C处对内建模å—‘%1$s’的使用与以å‰ä½¿ç”¨çš„éžå†…建模å—åå—冲çª" #: fortran/module.c:5341 -#, fuzzy, no-c-format +#, no-c-format msgid "Symbol '%s' referenced at %L does not exist in intrinsic module ISO_FORTRAN_ENV" -msgstr "%2$L 处引用的符å·â€œ%1$sâ€åœ¨å†…å»ºæ¨¡å— ISO_FORTRAN_ENV ä¸ä¸å˜åœ¨" +msgstr "%2$L处引用的符å·â€˜%1$sâ€™åœ¨å†…å»ºæ¨¡å— ISO_FORTRAN_ENV ä¸ä¸å˜åœ¨" #: fortran/module.c:5349 -#, fuzzy, no-c-format +#, no-c-format msgid "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module ISO_FORTRAN_ENV at %L is incompatible with option %s" -msgstr "从在 %L å¤„å†…åœ¨çš„æ¨¡å— ISO_FORTRAN_ENV 使用 NUMERIC_STORAGE_SIZE 命å常数与选项 %s 是ä¸å¯å…¼å®¹çš„" +msgstr "%Lå¤„åœ¨å†…å»ºæ¨¡å— ISO_FORTRAN_ENV ä¸å¯¹ NUMERIC_STORAGE_SIZE 命å常数的使用与选项 %s ä¸å…¼å®¹" #: fortran/module.c:5377 -#, fuzzy, no-c-format +#, no-c-format msgid "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module ISO_FORTRAN_ENV at %C is incompatible with option %s" -msgstr "从在 %C å¤„å†…åœ¨çš„æ¨¡å— ISO_FORTRAN_ENV 使用 NUMERIC_STORAGE_SIZE 命å常数与选项 %s 是ä¸å¯å…¼å®¹çš„" +msgstr "%Cå¤„åœ¨å†…å»ºæ¨¡å— ISO_FORTRAN_ENV ä¸å¯¹ NUMERIC_STORAGE_SIZE 命å常数的使用与选项 %s ä¸å…¼å®¹" #: fortran/module.c:5393 -#, fuzzy, no-c-format +#, no-c-format msgid "Symbol '%s' referenced at %L not found in intrinsic module ISO_FORTRAN_ENV" -msgstr "%2$L 处引用的符å·â€œ%1$sâ€åœ¨å†…å»ºæ¨¡å— ISO_FORTRAN_ENV ä¸æ‰¾ä¸åˆ°" +msgstr "%2$L处引用的符å·â€˜%1$sâ€™åœ¨å†…å»ºæ¨¡å— ISO_FORTRAN_ENV ä¸æ‰¾ä¸åˆ°" #: fortran/module.c:5427 #, no-c-format @@ -7946,9 +7946,9 @@ msgid "Can't open module file '%s' for reading at %C: %s" msgstr "æ— æ³•æ‰“å¼€æ¨¡å—文件‘%s’读å–,在%C处:%s" #: fortran/module.c:5458 -#, fuzzy, no-c-format +#, no-c-format msgid "Use of non-intrinsic module '%s' at %C conflicts with intrinsic module name used previously" -msgstr "在 %2$C 处éžå†…在的模å—“%1$sâ€çš„使用与以å‰ä½¿ç”¨çš„内在的模å—åå—相冲çª" +msgstr "%2$C处对éžå†…建模å—‘%1$s’的使用与之å‰å¯¹å†…建模å—åå—的使用相冲çª" #: fortran/module.c:5473 msgid "Unexpected end of module" @@ -7960,9 +7960,9 @@ msgid "File '%s' opened at %C is not a GFORTRAN module file" msgstr "%2$C处打开的文件的‘%1$s’并éžä¸€ä¸ª GFORTRAN 模å—文件" #: fortran/module.c:5485 -#, fuzzy, no-c-format +#, no-c-format msgid "Parse error when checking module version for file '%s' opened at %C" -msgstr "当为在 %C 处打开的文件“%sâ€æ£€æŸ¥æ¨¡å—版本时è¯æ³•åˆ†æžé”™è¯¯" +msgstr "当为在%2$C处打开的文件‘%1$s’检查模å—版本时è¯æ³•åˆ†æžé”™è¯¯" #: fortran/module.c:5490 #, no-c-format @@ -7985,9 +7985,9 @@ msgid "Syntax error in OpenMP variable list at %C" msgstr "%C处的 OpenMP å˜é‡åˆ—表è¯æ³•é”™è¯¯" #: fortran/openmp.c:293 -#, fuzzy, no-c-format +#, no-c-format msgid "%s is not INTRINSIC procedure name at %C" -msgstr "%2$C 处 %1$s ä¸æ˜¯ INTRINSIC 过程å" +msgstr "%2$C处 %1$s ä¸æ˜¯ INTRINSIC 过程å" #: fortran/openmp.c:404 #, no-c-format @@ -8026,9 +8026,9 @@ msgstr "%2$L处对象‘%1$s’ä¸æ˜¯ä¸€ä¸ªå˜é‡" #: fortran/openmp.c:824 fortran/openmp.c:834 fortran/openmp.c:841 #: fortran/openmp.c:851 -#, fuzzy, no-c-format +#, no-c-format msgid "Symbol '%s' present on multiple clauses at %L" -msgstr "%L 处符å·â€œ%1$sâ€å‡ºçŽ°åœ¨å¤šä¸ªåˆ†å¥ä¸Š" +msgstr "%2$L处符å·â€˜%1$s’出现在多个分å¥ä¸Š" #: fortran/openmp.c:874 #, no-c-format @@ -8036,19 +8036,19 @@ msgid "Non-THREADPRIVATE object '%s' in COPYIN clause at %L" msgstr "%2$L处 COPYIN 分å¥ä¸çš„éž THREADPRIVATE 对象‘%1$s’" #: fortran/openmp.c:877 -#, fuzzy, no-c-format +#, no-c-format msgid "COPYIN clause object '%s' at %L has ALLOCATABLE components" -msgstr "%2$L 处 COPYIN 分å¥å¯¹è±¡â€œ%1$sâ€æœ‰ ALLOCATABLE 组件" +msgstr "%2$L处 COPYIN 分å¥å¯¹è±¡â€˜%1$s’有 ALLOCATABLE 组件" #: fortran/openmp.c:885 -#, fuzzy, no-c-format +#, no-c-format msgid "Assumed size array '%s' in COPYPRIVATE clause at %L" -msgstr "%3$L 处 COPYPRIVATE 分å¥ä¸å‡å®šå¤§å°çš„数组“%1$sâ€" +msgstr "%2$L处 COPYPRIVATE 分å¥ä¸æœ‰å‡å®šå¤§å°çš„数组‘%1$s’" #: fortran/openmp.c:888 -#, fuzzy, no-c-format +#, no-c-format msgid "COPYPRIVATE clause object '%s' at %L has ALLOCATABLE components" -msgstr "%2$L 处 COPYPRIVATE 分å¥å¯¹è±¡â€œ%1$sâ€æœ‰ ALLOCATABLE 组件" +msgstr "%2$L处 COPYPRIVATE 分å¥å¯¹è±¡â€˜%1$s’有 ALLOCATABLE 组件" #: fortran/openmp.c:896 #, no-c-format @@ -8056,9 +8056,9 @@ msgid "THREADPRIVATE object '%s' in SHARED clause at %L" msgstr "%2$L处 SHARED 分å¥ä¸çš„ THREADPRIVATE 对象‘%1$s’" #: fortran/openmp.c:899 -#, fuzzy, no-c-format +#, no-c-format msgid "Cray pointee '%s' in SHARED clause at %L" -msgstr "%2$L 处 SHARED 分å¥ä¸çš„ Cray 指针“%1$sâ€" +msgstr "%2$L处 SHARED 分å¥ä¸ä¸º Cray 指针引用的‘%1$s’" #: fortran/openmp.c:907 #, no-c-format @@ -8071,14 +8071,14 @@ msgid "Cray pointee '%s' in %s clause at %L" msgstr "%3$L处 %2$s 分å¥ä¸ çš„Cray æŒ‡é’ˆç›®æ ‡â€˜%1$s’" #: fortran/openmp.c:915 -#, fuzzy, no-c-format +#, no-c-format msgid "POINTER object '%s' in %s clause at %L" -msgstr "%3$L 处 %2$s 分å¥ä¸çš„ POINTER 对象“%1$sâ€" +msgstr "%3$L处 %2$s 分å¥ä¸çš„ POINTER 对象‘%1$s’" #: fortran/openmp.c:920 -#, fuzzy, no-c-format +#, no-c-format msgid "%s clause object '%s' has ALLOCATABLE components at %L" -msgstr "%3$L 处“%1$sâ€åˆ†å¥å¯¹è±¡â€œ%2$sâ€æœ‰ ALLOCATABLE 组件" +msgstr "%3$L处 %1$s 分å¥å¯¹è±¡â€˜%2$s’有 ALLOCATABLE 组件" #: fortran/openmp.c:923 #, no-c-format @@ -8091,9 +8091,9 @@ msgid "Assumed size array '%s' in %s clause at %L" msgstr "%3$L处 %2$s 分å¥ä¸å‡å®šå¤§å°çš„数组‘%1$s’" #: fortran/openmp.c:932 -#, fuzzy, no-c-format +#, no-c-format msgid "Variable '%s' in %s clause is used in NAMELIST statement at %L" -msgstr "在“%2$sâ€åˆ†å¥ä¸å˜é‡â€œ%1$sâ€å·²è¢«ç”¨åœ¨ NAMELIST è¯å¥ä¸" +msgstr "%2$s 分å¥ä¸çš„å˜é‡â€˜%1$s’被用在%3$L处的 NAMELIST è¯å¥ä¸" #: fortran/openmp.c:941 #, no-c-format @@ -8191,9 +8191,9 @@ msgid "!$OMP DO iteration variable present on clause other than PRIVATE or LASTP msgstr "%L处 !$OMP DO è¿ä»£å˜é‡å‡ºçŽ°åœ¨éž PRIVATE 或 LASTPRIVATE 分å¥ä¸" #: fortran/openmp.c:1463 -#, fuzzy, no-c-format +#, no-c-format msgid "!$OMP DO collapsed loops don't form rectangular iteration space at %L" -msgstr "在 %L 处,!$OMP DO 崩溃的循环ä¸å½¢æˆçŸ©å½¢è¿ä»£ç©ºç™½" +msgstr "%L处 !$OMP DO 折å 的循环ä¸å½¢æˆçŸ©å½¢è¿ä»£ç©ºé—´" #: fortran/openmp.c:1477 #, no-c-format @@ -8402,14 +8402,14 @@ msgid "Unexpected end of file in '%s'" msgstr "‘%s’ä¸éžé¢„期的文件结尾" #: fortran/parse.c:1817 -#, fuzzy, no-c-format +#, no-c-format msgid "Derived-type '%s' with SEQUENCE must not have a CONTAINS section at %C" -msgstr "有 SEQUENCE 的派生类“%1$sâ€å¿…须没有 %C 处的 CONTAINS 段" +msgstr "%2$C处带有 SEQUENCE 派生类型‘%1$s’ä¸èƒ½æœ‰ CONTAINS 节" #: fortran/parse.c:1820 -#, fuzzy, no-c-format +#, no-c-format msgid "Derived-type '%s' with BIND(C) must not have a CONTAINS section at %C" -msgstr "有 BIND(C) 的派生类“%1$sâ€å¿…须没有 %C 处的 CONTAINS 段" +msgstr "带 BIND(C) 的派生类‘%s’在%C处ä¸èƒ½æœ‰ CONTAINS 节" #: fortran/parse.c:1840 #, no-c-format @@ -8517,9 +8517,9 @@ msgid "FUNCTION at %C does not belong in a generic subroutine interface" msgstr "%C处的 FUNCTION ä¸å±žäºŽä¸€ä¸ªæ³›åž‹å‡½æ•°æŽ¥å£" #: fortran/parse.c:2261 -#, fuzzy, no-c-format +#, no-c-format msgid "Name '%s' of ABSTRACT INTERFACE at %C cannot be the same as an intrinsic type" -msgstr "在 %2$C 处的 ABSTRACT INTERFACE çš„åå—“%1$sâ€ä¸èƒ½ä¸Žå†…å»ºç±»åž‹ä¸€æ ·" +msgstr "%2$C处的 ABSTRACT INTERFACE çš„åå—‘%1$s’ä¸èƒ½ä¸Žå†…å»ºç±»åž‹ä¸€æ ·" #: fortran/parse.c:2292 #, no-c-format @@ -8527,9 +8527,9 @@ msgid "Unexpected %s statement at %C in INTERFACE body" msgstr "éžé¢„期的 %s è¯å¥å‡ºçŽ°åœ¨%C处的 INTERFACE 体ä¸" #: fortran/parse.c:2310 -#, fuzzy, no-c-format +#, no-c-format msgid "INTERFACE procedure '%s' at %L has the same name as the enclosing procedure" -msgstr "在 %2$L 处 INTERFACE 过程“%1$sâ€æœ‰ä¸ŽåŒ…装过程相åŒçš„åå—" +msgstr "%2$L处 INTERFACE 过程‘%1$s’有与外围过程相åŒçš„åå—" #: fortran/parse.c:2431 #, no-c-format @@ -8582,9 +8582,9 @@ msgid "Duplicate ELSE statements at %L and %C" msgstr "%L å’Œ%C处é‡å¤çš„ ELSE è¯å¥" #: fortran/parse.c:2846 -#, fuzzy, no-c-format +#, no-c-format msgid "Expected a CASE or END SELECT statement following SELECT CASE at %C" -msgstr "在 %C 处期待的一个 CASE 或 END SELECT è¯å¥åŽè·Ÿ SELECT CASE" +msgstr "%C处 SELECT CASE 之åŽéœ€è¦ CASE 或 END SELECT è¯å¥" #: fortran/parse.c:2929 #, no-c-format @@ -8657,9 +8657,9 @@ msgid "Global name '%s' at %L is already being used as a %s at %L" msgstr "%2$L处的åå—‘%1$s’已ç»åœ¨%4$L处被用作 %3$s" #: fortran/parse.c:3889 -#, fuzzy, no-c-format +#, no-c-format msgid "Blank BLOCK DATA at %C conflicts with prior BLOCK DATA at %L" -msgstr "在 %C 的空白 BLOCK DATA 与在 %L 处优先的 BLOCK DATA 冲çª" +msgstr "%C处空白 BLOCK DATA 与%L处先å‰çš„ BLOCK DATA 冲çª" #: fortran/parse.c:3915 #, no-c-format @@ -8785,9 +8785,9 @@ msgid "Unterminated character constant beginning at %C" msgstr "开始于 %C 的未终结的å—符常é‡" #: fortran/primary.c:1000 -#, fuzzy, no-c-format +#, no-c-format msgid "Character '%s' in string at %C is not representable in character kind %d" -msgstr "在 %2$C 处å—符串ä¸çš„å—符“%1$sâ€åœ¨å—符ç§ç±»%3$dä¸ä¸æ˜¯å¯è¡¨ç¤ºçš„" +msgstr "%2$C处å—符串ä¸çš„å—符‘%1$s’在å—符ç§åˆ« %3$d ä¸ä¸å¯è¡¨ç¤º" #: fortran/primary.c:1083 #, no-c-format @@ -8815,9 +8815,9 @@ msgid "Fortran 2003: PARAMETER symbol in complex constant at %C" msgstr "Fortran 2003:%C处å¤æ•°å¸¸é‡ä¸çš„ PARAMETER 符å·" #: fortran/primary.c:1168 -#, fuzzy, no-c-format +#, no-c-format msgid "Error converting PARAMETER constant in complex constant at %C" -msgstr "åœ¨è½¬æ¢ %C 处å¤æ•°å¸¸é‡ä¸çš„ PARAMETER 常é‡æ—¶å‡ºé”™" +msgstr "%C处在å¤æ•°å¸¸é‡ä¸è½¬æ¢ PARAMETER 常é‡æ—¶å‡ºé”™" #: fortran/primary.c:1297 #, no-c-format @@ -8865,9 +8865,9 @@ msgid "Fortran 2003: Structure constructor with missing optional arguments at %C msgstr "Fortran 2003:%Cå¤„çš„ç»“æž„æž„é€ å‡½æ•°ä¸¢å¤±å¯é€‰çš„å‚æ•°" #: fortran/primary.c:2204 -#, fuzzy, no-c-format +#, no-c-format msgid "No initializer for component '%s' given in the structure constructor at %C!" -msgstr "对 %C å¤„ç»“æž„æž„é€ ä¸ç»™å‡ºçš„“%1$sâ€ç»„件没有åˆå§‹åŒ–器" +msgstr "%Cå¤„ç»“æž„æž„é€ å‡½æ•°ä¸æ²¡æœ‰ç»™å‡ºç»„件‘%1$s’的åˆå§‹å€¼è®¾å®š" #: fortran/primary.c:2260 #, no-c-format @@ -8880,9 +8880,9 @@ msgid "Fortran 2003: Structure constructor with named arguments at %C" msgstr "Fortran 2003:%Cå¤„çš„ç»“æž„æž„é€ å‡½æ•°æœ‰æœ‰åçš„å‚æ•°" #: fortran/primary.c:2303 -#, fuzzy, no-c-format +#, no-c-format msgid "Component initializer without name after component named %s at %C!" -msgstr "在 %C 处组件指åçš„ %såŽç»„件åˆå§‹åŒ–器没有åå—ï¼" +msgstr "%2$C处å为 %s 的组åˆä¹‹åŽçš„组件åˆå§‹å€¼è®¾å®šæ²¡æœ‰åå—ï¼" #: fortran/primary.c:2306 #, no-c-format @@ -8895,9 +8895,9 @@ msgid "Component '%s' is initialized twice in the structure constructor at %C!" msgstr "%2$Cå¤„ç»“æž„æž„é€ å‡½æ•°ä¸ç»„件‘%1$s’被åˆå§‹åŒ–两次ï¼" #: fortran/primary.c:2395 -#, fuzzy, no-c-format +#, no-c-format msgid "component '%s' at %L has already been set by a parent derived type constructor" -msgstr "%3$L 处的组件“%1$sâ€å·²è¢«çˆ¶è¾ˆæ´¾ç”Ÿç±»åž‹ç»“构器设置" +msgstr "%2$L处的组件‘%1$sâ€™å·²è¢«åŸºç±»æ´¾ç”Ÿç±»åž‹æž„é€ å‡½æ•°æ‰€è®¾ç½®" #: fortran/primary.c:2418 #, no-c-format @@ -8975,19 +8975,19 @@ msgid "Alternate return specifier in function '%s' at %L is not allowed" msgstr "函数‘%s’ä¸çš„替代返回é™å®šç¬¦åœ¨%L处ä¸è¢«å…许" #: fortran/resolve.c:181 -#, fuzzy, no-c-format +#, no-c-format msgid "Dummy procedure '%s' of PURE procedure at %L must also be PURE" -msgstr "在 %L 处 PURE 过程的哑过程“%sâ€å¿…须也是 PURE" +msgstr "%2$L处 PURE 过程的哑过程‘%1$s’必须也是 PURE" #: fortran/resolve.c:188 -#, fuzzy, no-c-format +#, no-c-format msgid "Dummy procedure at %L not allowed in ELEMENTAL procedure" -msgstr "在 %L 处的哑程åºä¸å…许出现在 ELEMENTAL 程åºä¸" +msgstr "%L处的哑过程ä¸å…许出现在 ELEMENTAL 过程ä¸" #: fortran/resolve.c:201 fortran/resolve.c:1414 -#, fuzzy, no-c-format +#, no-c-format msgid "Unable to find a specific INTRINSIC procedure for the reference '%s' at %L" -msgstr "在 %2$L 处对“%1$sâ€çš„引用ä¸èƒ½æ‰¾åˆ°ç‰¹å®šçš„ INTRINSIC 过程" +msgstr "%2$L处对‘%1$s’的引用找ä¸åˆ°ç‰¹å®šçš„ INTRINSIC 过程" #: fortran/resolve.c:249 #, no-c-format @@ -8995,9 +8995,9 @@ msgid "Argument '%s' of pure function '%s' at %L must be INTENT(IN)" msgstr "%3$L处纯函数‘%2$s’的实å‚‘%1$s’必须是 INTENT(IN)" #: fortran/resolve.c:254 -#, fuzzy, no-c-format +#, no-c-format msgid "Argument '%s' of pure subroutine '%s' at %L must have its INTENT specified" -msgstr "在 %3$L 处的纯的å例程“%2$sâ€çš„å‚数“%1$sâ€å¿…须有它的 INTENT 指定符" +msgstr "%3$L处纯å进程‘%2$s’的å‚数‘%1$s’必须指定其 INTENT" #: fortran/resolve.c:263 #, no-c-format @@ -9005,14 +9005,14 @@ msgid "Argument '%s' of elemental procedure at %L must be scalar" msgstr "å…ƒç´ è¿‡ç¨‹çš„å®žå‚‘%s’在%Lå¤„å¿…é¡»æ˜¯æ ‡é‡" #: fortran/resolve.c:270 -#, fuzzy, no-c-format +#, no-c-format msgid "Argument '%s' of elemental procedure at %L cannot have the POINTER attribute" -msgstr "在 %2$L 处基本过程的å‚数“%1$sâ€ä¸èƒ½æœ‰ POINTER 属性" +msgstr "%2$L处基本过程的å‚数‘%1$s’ä¸èƒ½æœ‰ POINTER 属性" #: fortran/resolve.c:278 -#, fuzzy, no-c-format +#, no-c-format msgid "Dummy procedure '%s' not allowed in elemental procedure '%s' at %L" -msgstr "哑过程“%1$sâ€ä¸èƒ½å‡ºçŽ°åœ¨ %3$L 处的基本的过程“%2$sâ€ä¸" +msgstr "%3$L处哑过程‘%1$s’ä¸èƒ½å‡ºçŽ°åœ¨åŸºæœ¬è¿‡ç¨‹â€˜%2$s’ä¸" #: fortran/resolve.c:290 #, no-c-format @@ -9020,9 +9020,9 @@ msgid "Argument '%s' of statement function at %L must be scalar" msgstr "è¯å¥å‡½æ•°çš„实å‚‘%s’在%Lå¤„å¿…é¡»æ˜¯æ ‡é‡" #: fortran/resolve.c:300 -#, fuzzy, no-c-format +#, no-c-format msgid "Character-valued argument '%s' of statement function at %L must have constant length" -msgstr "在 %1$L 处è¯å¥å‡½æ•°çš„å—符值å‚数“%2$sâ€å¿…须是常数长度" +msgstr "%2$L处è¯å¥å‡½æ•°æœ‰å—符值的å‚数‘%1$s’必须有常é‡é•¿åº¦" #: fortran/resolve.c:357 #, no-c-format @@ -9030,9 +9030,9 @@ msgid "Contained function '%s' at %L has no IMPLICIT type" msgstr "%2$L处的包å«å‡½æ•°â€˜%1$s’没有éšå¼ç±»åž‹" #: fortran/resolve.c:360 -#, fuzzy, no-c-format +#, no-c-format msgid "Result '%s' of contained function '%s' at %L has no IMPLICIT type" -msgstr "%3$L 处的包å«å‡½æ•°â€œ%2$sâ€çš„结果“%1$sâ€æ²¡æœ‰ IMPLICIT 类型" +msgstr "%3$L处包å«å‡½æ•°â€˜%2$s’的结果‘%1$s’没有 IMPLICIT 类型" #: fortran/resolve.c:386 msgid "module procedure" @@ -9043,9 +9043,9 @@ msgid "internal function" msgstr "内部函数" #: fortran/resolve.c:384 -#, fuzzy, no-c-format +#, no-c-format msgid "Character-valued %s '%s' at %L must not be assumed length" -msgstr "è¯å¥å‡½æ•°â€˜%s’在%L处ä¸å…许用作实å‚" +msgstr "%3$L处有å—符值的 %1$s‘%2$s’ä¸èƒ½æ˜¯å‡å®šé•¿åº¦çš„" #: fortran/resolve.c:559 #, no-c-format @@ -9053,9 +9053,9 @@ msgid "Function %s at %L has entries with mismatched array specifications" msgstr "%2$L处函数‘%1$s’有ä¸åŒ¹é…çš„æ•°ç»„è§„æ ¼è¯´æ˜Ž" #: fortran/resolve.c:576 -#, fuzzy, no-c-format +#, no-c-format msgid "Extension: Function %s at %L with entries returning variables of different string lengths" -msgstr "Extension: 在 %2$L 处具有返回ä¸åŒå—符串长度的å˜é‡è¡¨é¡¹çš„函数 %1$s" +msgstr "扩展:%2$L处函数 %1$s 有返回ä¸åŒå—符串长度的å˜é‡çš„表项" #: fortran/resolve.c:603 #, no-c-format @@ -9088,29 +9088,29 @@ msgid "ENTRY result %s can't be of type %s in FUNCTION %s at %L" msgstr "%4$L处函数 %2$s ä¸å…¥å£è¿”回值 %1$s ä¸èƒ½å…·æœ‰ %3$s å…·åž‹" #: fortran/resolve.c:719 -#, fuzzy, no-c-format +#, no-c-format msgid "Variable '%s' at %L is in COMMON but only in BLOCK DATA initialization is allowed" -msgstr "在 %L 处å˜é‡â€œ%sâ€æ˜¯åœ¨ COMMONä¸, 但仅容许在 BLOCK DATA åˆå§‹åŒ–ä¸" +msgstr "%2$L处å˜é‡â€˜%s’在 COMMONä¸ï¼Œä½†å…¶åˆå§‹åŒ–仅容许出现在 BLOCK DATA ä¸" #: fortran/resolve.c:723 -#, fuzzy, no-c-format +#, no-c-format msgid "Initialized variable '%s' at %L is in a blank COMMON but initialization is only allowed in named common blocks" -msgstr "在 %2$L 处åˆå§‹åŒ–çš„å˜é‡â€œ%1$sâ€æ˜¯åœ¨ä¸€ä¸ªç©ºç™½ COMMON ä¸ï¼Œä½†æ˜¯åˆå§‹åŒ–仅容许在命å公用的å—ä¸" +msgstr "%2$L处被åˆå§‹åŒ–çš„å˜é‡â€˜%1$s’是在一个空白 COMMON ä¸ï¼Œä½†æ˜¯åˆå§‹åŒ–仅容许出现在有å公用å—ä¸" #: fortran/resolve.c:734 -#, fuzzy, no-c-format +#, no-c-format msgid "Derived type variable '%s' in COMMON at %L has neither the SEQUENCE nor the BIND(C) attribute" -msgstr "%2$L 处 COMMON ä¸çš„派生类型å˜é‡â€œ%1$sâ€å¿…须既ä¸æ˜¯ SEQUENCE 也ä¸æ˜¯ BIND(C) 属性" +msgstr "%2$L处 COMMON ä¸çš„派生类型å˜é‡â€˜%1$s’既没有 SEQUENCE 也没有 BIND(C) 属性" #: fortran/resolve.c:738 -#, fuzzy, no-c-format +#, no-c-format msgid "Derived type variable '%s' in COMMON at %L has an ultimate component that is allocatable" -msgstr "%2$L 处 COMMON ä¸çš„派生类型å˜é‡â€œ%1$sâ€æœ‰ä¸€ä¸ªå¯åˆ†é…çš„æ ¹æœ¬çš„ç»„ä»¶" +msgstr "%2$L处 COMMON ä¸çš„派生类型å˜é‡â€˜%1$s’有一个å¯åˆ†é…的最终组件" #: fortran/resolve.c:742 -#, fuzzy, no-c-format +#, no-c-format msgid "Derived type variable '%s' in COMMON at %L may not have default initializer" -msgstr "在 %2$L 处 COMMON ä¸çš„派生类型å˜é‡â€œ%1$sâ€ä¸èƒ½æœ‰é»˜è®¤çš„åˆå§‹åŒ–器" +msgstr "%2$L处 COMMON ä¸çš„派生类型å˜é‡â€˜%1$s’ä¸èƒ½æœ‰é»˜è®¤çš„åˆå§‹å€¼è®¾å®š" #: fortran/resolve.c:772 #, no-c-format @@ -9158,9 +9158,9 @@ msgid "The element in the derived type constructor at %L, for pointer component msgstr "%L处指针组件‘%sâ€™çš„æ´¾ç”Ÿç±»åž‹æž„é€ å‡½æ•°ä¸çš„å…ƒç´ åº”è¯¥æ˜¯ POINTER 或 TARGET" #: fortran/resolve.c:1034 -#, fuzzy, no-c-format +#, no-c-format msgid "The upper bound in the last dimension must appear in the reference to the assumed size array '%s' at %L" -msgstr "在最åŽç»´ä¸ä¸Šéƒ¨çš„æ†ç»‘ 必须出现在对在 %L 处å‡å®šå¤§å°æ•°ç»„“%sâ€çš„引用ä¸" +msgstr "最åŽä¸€ç»´çš„上é™å¿…须出现在对在%2$L处å‡å®šå¤§å°æ•°ç»„‘%1$s’的引用ä¸" #: fortran/resolve.c:1096 #, no-c-format @@ -9173,9 +9173,9 @@ msgid "GENERIC procedure '%s' is not allowed as an actual argument at %L" msgstr "GENERIC 过程‘%s’在%L处ä¸å…许用作实å‚" #: fortran/resolve.c:1202 -#, fuzzy, no-c-format +#, no-c-format msgid "Type specified for intrinsic function '%s' at %L is ignored" -msgstr "在 %2$L 处内建函数“%1$sâ€ä¸ç±»åž‹æŒ‡å®šç¬¦è¢«å¿½ç•¥" +msgstr "%2$L处为内建函数‘%1$s’指定的类型被忽略" #: fortran/resolve.c:1215 #, no-c-format @@ -9193,9 +9193,9 @@ msgid "The intrinsic '%s' declared INTRINSIC at %L is not available in the curre msgstr "在%2$L处由内建函数‘%1$s’声明的 INTRINSIC 在当å‰çš„æ ‡å‡†è®¾ç½®ä¸æ˜¯ä¸å¯ç”¨çš„,但在 %3$s 下å¯ç”¨ã€‚使用一个适当的 -std=* 选项或å¯ç”¨ -fall-intrinsics 以便使用它。" #: fortran/resolve.c:1273 -#, fuzzy, no-c-format +#, no-c-format msgid "Non-RECURSIVE procedure '%s' at %L is possibly calling itself recursively. Declare it RECURSIVE or use -frecursive" -msgstr "在 %L 处éžRECURSIVE 过程“%sâ€å¯èƒ½é€’归地调用它自己 。 把它声明为 RECURSIVE 或使用 -frecursive" +msgstr "%2$Lå¤„éž RECURSIVE 过程‘%1$s’å¯èƒ½é€’归地调用它自己。请将它声明为 RECURSIVE 或使用 -frecursive" #: fortran/resolve.c:1307 fortran/resolve.c:7213 fortran/resolve.c:8001 #, no-c-format @@ -9218,9 +9218,9 @@ msgid "Internal procedure '%s' is not allowed as an actual argument at %L" msgstr "内部过程‘%s’在%L处ä¸å…许用作实å‚" #: fortran/resolve.c:1387 -#, fuzzy, no-c-format +#, no-c-format msgid "ELEMENTAL non-INTRINSIC procedure '%s' is not allowed as an actual argument at %L" -msgstr "ELEMENTAL non-INTRINSIC 程åºâ€œ%sâ€åœ¨ %L 处ä¸å…许åšä¸ºå®žé™…引数" +msgstr "ELEMENTAL éž INTRINSIC 过程‘%s’ä¸å…许在%L处作为实际å‚æ•°" #: fortran/resolve.c:1436 #, no-c-format @@ -9248,18 +9248,18 @@ msgid "Passing internal procedure at %L by location not allowed" msgstr "ä¸å…许按ä½ç½®ä¼ 递%L处的内部过程" #: fortran/resolve.c:1645 -#, fuzzy, no-c-format +#, no-c-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 "在 %2$L 处的“%1$sâ€æ˜¯ä¸ªæ•°ç»„且是 OPTIONAL çš„; 如果它缺失, 它ä¸èƒ½æ˜¯ä¸€ä¸ª ELEMENTAL 过程的实际的å‚数,除éžæœ‰ä¸€ä¸ªå…·æœ‰ç›¸åŒè¡Œåˆ—çš„éžå¯é€‰çš„å‚æ•°(12.4.1.5)" +msgstr "%2$L处的‘%1$s’是个数组且是å¯é€‰çš„;如果它缺失, 它ä¸èƒ½æ˜¯ä¸€ä¸ª ELEMENTAL 过程的实际å‚数,除éžæœ‰ä¸€ä¸ªå…·æœ‰ç›¸åŒç§©çš„éžå¯é€‰çš„å‚æ•°(12.4.1.5)" #: fortran/resolve.c:1668 msgid "elemental procedure" msgstr "基本过程" #: fortran/resolve.c:1684 -#, fuzzy, no-c-format +#, no-c-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 "在 %1$L 处 ELEMENTAL å程åºâ€œ%4$sâ€çš„ INTENT(%2$s) å‡â€œ%3$sâ€çš„实际的å‚æ•°æ˜¯ä¸€ä¸ªæ ‡é‡ï¼Œä½†æ˜¯å¦ä¸€ä¸ªå®žé™…å‚数是个数组" +msgstr "%1$L处 ELEMENTAL å程åºâ€˜%4$s’的 INTENT(%2$s) 哑‘%3$s’的实际å‚æ•°æ˜¯ä¸€ä¸ªæ ‡é‡ï¼Œä½†æ˜¯å¦ä¸€ä¸ªå®žé™…å‚数是一个数组" #: fortran/resolve.c:1830 #, no-c-format @@ -9272,14 +9272,14 @@ msgid "There is no specific function for the generic '%s' at %L" msgstr "%2$L处的泛型‘%1$s’没有指定的函数" #: fortran/resolve.c:1939 -#, fuzzy, no-c-format +#, no-c-format msgid "Generic function '%s' at %L is not consistent with a specific intrinsic interface" -msgstr "在 %2$C 处通用函数“%1$sâ€ä¸Žç‰¹å®šçš„内建接å£ä¸ä¸€è‡´" +msgstr "%2$L处泛型函数‘%1$s’与特定的内建接å£ä¸ä¸€è‡´" #: fortran/resolve.c:1977 -#, fuzzy, no-c-format +#, no-c-format msgid "Function '%s' at %L is INTRINSIC but is not compatible with an intrinsic" -msgstr "在 %2$L 处的函数“%1$sâ€æ˜¯ INTRINSIC,但ä¸æ˜¯ä¸Žä¸€ä¸ªå†…建函数ä¸å…¼å®¹" +msgstr "%2$L处的函数‘%1$s’是 INTRINSIC,但与内建函数ä¸å…¼å®¹" #: fortran/resolve.c:2026 #, no-c-format @@ -9302,29 +9302,29 @@ msgid "More actual than formal arguments in '%s' call at %L" msgstr "%2$L处‘%1$s’调用过程时实å‚比形å‚多" #: fortran/resolve.c:2348 -#, fuzzy, no-c-format +#, no-c-format msgid "Parameter '%s' to '%s' at %L must be either a TARGET or an associated pointer" -msgstr "%3$L 处的å‚数“%1$sâ€åˆ°â€œ%2$sâ€å¿…é¡»æ—¢éž TARGET 也éžç›¸å…³çš„指针" +msgstr "%3$L处‘%2$s’的å‚数‘%1$s’必须是一个 TARGET 或者相关è”的指针" #: fortran/resolve.c:2371 -#, fuzzy, no-c-format +#, no-c-format msgid "Allocatable variable '%s' used as a parameter to '%s' at %L must not be an array of zero size" -msgstr "å¯åˆ†é…å˜é‡â€œ%sâ€ç”¨ä½œåœ¨ %L 处“%sâ€ä¸€ä¸ªå‚æ•°å¿…é¡»ä¸æ˜¯é›¶å¤§å°çš„数组" +msgstr "%3$L用作‘%2$s’的å‚æ•°çš„å¯åˆ†é…å˜é‡â€˜%1$s’ä¸èƒ½æ˜¯å¤§å°ä¸ºé›¶çš„数组" #: fortran/resolve.c:2388 -#, fuzzy, no-c-format +#, no-c-format msgid "Assumed-shape array '%s' at %L cannot be an argument to the procedure '%s' because it is not C interoperable" -msgstr "%2$L 处å‡å®šæˆå½¢æ•°ç»„“%1$sâ€ä¸èƒ½æ˜¯åŽ»åˆ°è¿‡ç¨‹â€œ%3$sâ€çš„å‚æ•°ï¼Œå› ä¸ºè¯¥è¿‡ç¨‹æ˜¯ä¸èƒ½ä¸Ž C 互æ“作的" +msgstr "%2$L处å‡å®šå¤–形数组‘%1$s’ä¸èƒ½æ˜¯è¿‡ç¨‹â€˜%3$s’的å‚æ•°ï¼Œå› ä¸ºè¯¥è¿‡ç¨‹æ˜¯ä¸èƒ½ä¸Ž C 互æ“作的" #: fortran/resolve.c:2398 -#, fuzzy, no-c-format +#, no-c-format msgid "Deferred-shape array '%s' at %L cannot be an argument to the procedure '%s' because it is not C interoperable" -msgstr "%2$L 处推迟æˆå½¢æ•°ç»„“%1$sâ€ä¸èƒ½æ˜¯åŽ»åˆ°è¿‡ç¨‹â€œ%3$sâ€çš„å‚æ•°ï¼Œå› ä¸ºè¯¥è¿‡ç¨‹æ˜¯ä¸èƒ½ä¸Ž C 互æ“作的" +msgstr "%2$L处延迟外形数组‘%1$s’ä¸èƒ½æ˜¯è¿‡ç¨‹â€˜%3$s’的å‚æ•°ï¼Œå› ä¸ºå®ƒä¸èƒ½ä¸Ž C 互æ“作" #: fortran/resolve.c:2421 fortran/resolve.c:2458 -#, fuzzy, no-c-format +#, no-c-format msgid "CHARACTER argument '%s' to '%s' at %L must have a length of 1" -msgstr "在 %3$L 处的 CHARACTER å‚数“%1$sâ€åˆ°â€œ%2$sâ€é•¿åº¦å¿…须为 1" +msgstr "%3$L处的‘%2$s’的 CHARACTER å‚数‘%1$s’长度必须为 1" #. Case 1c, section 15.1.2.5, J3/04-007: an associated #. scalar pointer. @@ -9356,45 +9356,45 @@ msgid "'%s' at %L is not a function" msgstr "%2$L处的‘%1$s’ä¸æ˜¯ä¸€ä¸ªå‡½æ•°" #: fortran/resolve.c:2539 fortran/resolve.c:3153 -#, fuzzy, no-c-format +#, no-c-format msgid "ABSTRACT INTERFACE '%s' must not be referenced at %L" -msgstr "%2$L 处的 ABSTRACT INTERFACE“%1$sâ€å¿…é¡»ä¸è¢«å¼•ç”¨" +msgstr "%2$L处的 ABSTRACT INTERFACE‘%1$s’ä¸èƒ½è¢«å¼•ç”¨" #. Internal procedures are taken care of in resolve_contained_fntype. #: fortran/resolve.c:2585 -#, fuzzy, no-c-format +#, no-c-format msgid "Function '%s' is declared CHARACTER(*) and cannot be used at %L since it is not a dummy argument" -msgstr "函数“%sâ€å£°æ˜Žäº† CHARACTER(*) 而ä¸èƒ½è¢«ä½¿ç”¨åœ¨ %L å¤„ï¼Œå› ä¸ºå®ƒä¸æ˜¯ä¸€ä¸ªå‡å‚æ•°" +msgstr "函数‘%s’被声明为 CHARACTER(*)从而ä¸èƒ½è¢«ä½¿ç”¨åœ¨%Lå¤„ï¼Œå› ä¸ºå®ƒä¸æ˜¯ä¸€ä¸ªè™šå‚" #: fortran/resolve.c:2638 -#, fuzzy, no-c-format +#, no-c-format msgid "User defined non-ELEMENTAL function '%s' at %L not allowed in WORKSHARE construct" -msgstr "在 %2$L å¤„ç”¨æˆ·å®šä¹‰çš„éž ELEMENTAL 函数“%1$sâ€ä¸ 容许在 WORKSHARE é€ ä¸" +msgstr "%2$Lå¤„ç”¨æˆ·å®šä¹‰çš„éž ELEMENTAL 函数‘%1$s’ä¸å®¹è®¸å‡ºçŽ°åœ¨ WORKSHARE æž„é€ ä¸" #: fortran/resolve.c:2688 -#, fuzzy, no-c-format +#, no-c-format msgid "reference to non-PURE function '%s' at %L inside a FORALL %s" -msgstr "对在 %L 处一个 FORALL %s 内部éž-PURE 函数“%sâ€çš„引用" +msgstr "%2$Lå¤„å¯¹éž PURE 函数‘%1$s’的引用出现在 FORALL %3$s ä¸" #: fortran/resolve.c:2695 -#, fuzzy, no-c-format +#, no-c-format msgid "Function reference to '%s' at %L is to a non-PURE procedure within a PURE procedure" -msgstr "%2$L 处引用“%1$sâ€çš„的函数是对一个 PURE è¿‡ç¨‹å†…çš„éž PURE 过程的引用" +msgstr "%2$L处对‘%1$s’的函数引用是在一个 PURE è¿‡ç¨‹å†…çš„å¯¹éž PURE 过程的引用" #: fortran/resolve.c:2711 -#, fuzzy, no-c-format +#, no-c-format msgid "ENTRY '%s' at %L cannot be called recursively, as function '%s' is not RECURSIVE" -msgstr "在 %2$L 处 ENTRY“%1$sâ€ä¸èƒ½é€’å½’è°ƒç”¨ï¼Œå› ä¸ºå‡½æ•°â€œ%3$sâ€å¹¶éž RECURSIVE" +msgstr "%2$L处 ENTRY‘%1$s’ä¸èƒ½é€’å½’è°ƒç”¨ï¼Œå› ä¸ºå‡½æ•°â€˜%3$sâ€™å¹¶éž RECURSIVE" #: fortran/resolve.c:2715 -#, fuzzy, no-c-format +#, no-c-format msgid "Function '%s' at %L cannot be called recursively, as it is not RECURSIVE" -msgstr "在 %2$L 处的函数“%1$sâ€ä¸èƒ½è¢«é€’å½’è°ƒç”¨ï¼Œå› ä¸ºå®ƒå¹¶éž RECURSIVE" +msgstr "%2$L处的函数‘%1$s’ä¸èƒ½è¢«é€’å½’è°ƒç”¨ï¼Œå› ä¸ºå®ƒå¹¶éž RECURSIVE" #: fortran/resolve.c:2763 -#, fuzzy, no-c-format +#, no-c-format msgid "Subroutine call to '%s' in FORALL block at %L is not PURE" -msgstr "在 %2$L 处调用 FORALL å—内“%1$sâ€çš„å例程ä¸æ˜¯ PURE" +msgstr "%2$L处 FORALL å—内对‘%1$s’å例程的调用ä¸æ˜¯ PURE" #: fortran/resolve.c:2766 #, no-c-format @@ -9407,24 +9407,24 @@ msgid "There is no specific subroutine for the generic '%s' at %L" msgstr "泛型‘%s’在%L处没有特定的å进程" #: fortran/resolve.c:2838 -#, fuzzy, no-c-format +#, no-c-format msgid "Generic subroutine '%s' at %L is not consistent with an intrinsic subroutine interface" -msgstr "通用å进程“%sâ€(于 %L 处)与一个内建å例程接å£ä¸ä¸€è‡´" +msgstr "%2$L处泛型å进程‘%1$s’与一个内建å进程接å£ä¸ä¸€è‡´" #: fortran/resolve.c:2946 -#, fuzzy, no-c-format +#, no-c-format msgid "Missing SHAPE parameter for call to %s at %L" -msgstr "在 %2$L 处在调用“%1$sâ€æ—¶ç¼ºå°‘ SHAPE 实å‚“%sâ€" +msgstr "%2$L处调用‘%1$s’时缺少 SHAPE 实å‚" #: fortran/resolve.c:2954 -#, fuzzy, no-c-format +#, no-c-format msgid "SHAPE parameter for call to %s at %L must be a rank 1 INTEGER array" -msgstr "%2$L处调用“%1$sâ€çš„SHAPE å‚数必须是一个行列 1 INTEGER 数组" +msgstr "%2$L处调用‘%1$s’的 SHAPE å‚数必须是一个秩为 1 çš„ INTEGER 数组" #: fortran/resolve.c:3021 -#, fuzzy, no-c-format +#, no-c-format msgid "Subroutine '%s' at %L is INTRINSIC but is not compatible with an intrinsic" -msgstr "在 %2$L 处的å例程“%sâ€æ˜¯ INTRINSIC,但ä¸æ˜¯ä¸Žä¸€ä¸ªå†…建å例程å¯å…¼å®¹" +msgstr "%2$L处的å进程‘%1$s’是 INTRINSIC,但与内建函数ä¸å…¼å®¹" #: fortran/resolve.c:3065 #, no-c-format @@ -9432,19 +9432,19 @@ msgid "Unable to resolve the specific subroutine '%s' at %L" msgstr "ä¸èƒ½è§£å†³%2$L处的指定å例程‘%1$s’" #: fortran/resolve.c:3125 -#, fuzzy, no-c-format +#, no-c-format msgid "'%s' at %L has a type, which is not consistent with the CALL at %L" -msgstr "在 %2$L 处的“%1$sâ€çš„类型与在 %3$L 处 CALL 的类型ä¸ä¸€è‡´" +msgstr "%2$L处的‘%1$s’的类型与%3$L处 CALL 的类型ä¸ä¸€è‡´" #: fortran/resolve.c:3163 -#, fuzzy, no-c-format +#, no-c-format msgid "ENTRY '%s' at %L cannot be called recursively, as subroutine '%s' is not RECURSIVE" -msgstr "在 %2$L 处 ENTRY“%1$sâ€ä¸èƒ½é€’å½’è°ƒç”¨ï¼Œå› ä¸ºå例程“%3$sâ€å¹¶éž RECURSIVE" +msgstr "%2$L处 ENTRY‘%1$s’ä¸èƒ½è¢«é€’å½’è°ƒç”¨ï¼Œå› ä¸ºå进程‘%3$sâ€™å¹¶éž RECURSIVE" #: fortran/resolve.c:3167 -#, fuzzy, no-c-format +#, no-c-format msgid "SUBROUTINE '%s' at %L cannot be called recursively, as it is not RECURSIVE" -msgstr "在 %2$L 处 SUBROUTINE“%1$sâ€ä¸èƒ½é€’å½’è°ƒç”¨ï¼Œå› ä¸ºå®ƒå¹¶éž RECURSIVE" +msgstr "%2$L处 SUBROUTINE‘%1$s’ä¸èƒ½é€’å½’è°ƒç”¨ï¼Œå› ä¸ºå®ƒå¹¶éž RECURSIVE" #: fortran/resolve.c:3245 #, no-c-format @@ -9551,9 +9551,9 @@ msgid "Upper array reference at %L is out of bounds (%ld > %ld) in dimension %d" msgstr "%1$L处数组上é™å¼•ç”¨åœ¨ç¬¬ %4$d ç»´ä¸è¶Šç•Œ(%2$ld > %3$ld)" #: fortran/resolve.c:3843 -#, fuzzy, no-c-format +#, no-c-format msgid "Rightmost upper bound of assumed size array section not specified at %L" -msgstr "在 %L 处最å³ä¸Šçš„æ†ç»‘çš„å‡å®šå¤§å°æ•°ç»„节ä¸è§„定" +msgstr "%L处未指定å‡å®šå¤§å°æ•°ç»„段的最å³ç«¯ä¸Šé™" #: fortran/resolve.c:3853 #, no-c-format @@ -9566,9 +9566,9 @@ msgid "Array index at %L must be scalar" msgstr "%Lå¤„æ•°ç»„ç´¢å¼•å¿…é¡»æ˜¯æ ‡é‡" #: fortran/resolve.c:3887 -#, fuzzy, no-c-format +#, no-c-format msgid "Array index at %L must be of INTEGER type, found %s" -msgstr "%L 处数组索引必须具有 INTEGER 类型,找到 %s" +msgstr "%L处数组索引必须具有 INTEGER 类型而ä¸æ˜¯ %s" #: fortran/resolve.c:3893 #, no-c-format @@ -9626,19 +9626,19 @@ msgid "Substring end index at %L is too large" msgstr "%L处å串结æŸç´¢å¼•å¤ªå¤§" #: fortran/resolve.c:4285 -#, fuzzy, no-c-format +#, no-c-format msgid "Component to the right of a part reference with nonzero rank must not have the POINTER attribute at %L" -msgstr "%L 处具有éžé›¶è¡Œåˆ—部分引用的å³ä¾§çš„组件ä¸å¿…须有 POINTER 属性" +msgstr "%L处对有éžé›¶ç§©çš„部分引用的å³ä¾§çš„组件ä¸èƒ½æœ‰ POINTER 属性" #: fortran/resolve.c:4292 -#, fuzzy, no-c-format +#, no-c-format msgid "Component to the right of a part reference with nonzero rank must not have the ALLOCATABLE attribute at %L" -msgstr "%L 处具有éžé›¶è¡Œåˆ—部分引用的å³ä¾§çš„组件ä¸å¿…须有 ALLOCATABLE 属性" +msgstr "%L处对有éžé›¶ç§©çš„部分引用的å³ä¾§çš„组件ä¸èƒ½æœ‰ ALLOCATABLE 属性" #: fortran/resolve.c:4311 -#, fuzzy, no-c-format +#, no-c-format msgid "Two or more part references with nonzero rank must not be specified at %L" -msgstr "%L 处具有éžé›¶è¡Œåˆ—部分引用的两个或多个部分ä¸å¿…指定" +msgstr "%L处ä¸èƒ½æŒ‡å®šä¸¤ä¸ªæˆ–以上秩ä¸ä¸ºé›¶çš„部分引用" #: fortran/resolve.c:4494 #, no-c-format @@ -9662,9 +9662,9 @@ msgstr "%L处类型é™å®šè¿‡ç¨‹è°ƒç”¨çš„基类型是 ABSTRACT 类型‘%s’" #. Nothing matching found! #: fortran/resolve.c:4989 -#, fuzzy, no-c-format +#, no-c-format msgid "Found no matching specific binding for the call to the GENERIC '%s' at %L" -msgstr "对在 %2$L 处的 GENERIC“%1$sâ€çš„调用没有找到匹é…特别的é™å®š" +msgstr "%2$L处对 GENERIC‘%1$s’的调用没有找到匹é…特别的é™å®š" #. To resolve class member calls, we borrow this bit #. of code to select the specific procedures. @@ -9679,9 +9679,9 @@ msgid "'%s' at %L should be a FUNCTION" msgstr "%2$L处的‘%1$s’应该是一个 FUNCTION" #: fortran/resolve.c:5137 -#, fuzzy, no-c-format +#, no-c-format msgid "no typebound available procedure named '%s' at %L" -msgstr "å‚数‘%s’在%L处需è¦ä¸€ä¸ªè¿‡ç¨‹" +msgstr "%2$L处没有类型绑定的å为‘%1$s’的å¯ç”¨è¿‡ç¨‹" #: fortran/resolve.c:5598 #, no-c-format @@ -9814,9 +9814,9 @@ msgid "Stat-variable at %L must be a scalar INTEGER variable" msgstr "%L处 stat å˜é‡å¿…é¡»æ˜¯ä¸€ä¸ªæ ‡é‡ INTEGER å˜é‡" #: fortran/resolve.c:6258 -#, fuzzy, no-c-format +#, no-c-format msgid "Stat-variable at %L shall not be %sd within the same %s statement" -msgstr "%C READ è¯å¥éœ€è¦å˜é‡" +msgstr "%1$L处的统计å˜é‡ä¸èƒ½åœ¨åŒä¸€ä¸ª %3$s è¯å¥ä¸è¢« %2$s" #: fortran/resolve.c:6266 #, no-c-format @@ -9834,9 +9834,9 @@ msgid "Illegal errmsg-variable at %L for a PURE procedure" msgstr "%L处 PURE 过程éžæ³• errmsg å˜é‡" #: fortran/resolve.c:6282 -#, fuzzy, no-c-format +#, no-c-format msgid "Errmsg-variable at %L must be a scalar CHARACTER variable" -msgstr "%L处指定的 UNIT 必须是 INTEGER 表达å¼æˆ–一个 CHARACTER å˜é‡" +msgstr "%L处错误信æ¯å˜é‡å¿…é¡»æ˜¯ä¸€ä¸ªæ ‡é‡ CHARACTER å˜é‡" #: fortran/resolve.c:6287 #, no-c-format @@ -9853,9 +9853,9 @@ msgstr "%L处分é…的对象也出现在%L处" #. issue an error and get the next case from P. #. FIXME: Sort P and Q by line number. #: fortran/resolve.c:6472 -#, fuzzy, no-c-format +#, no-c-format msgid "CASE label at %L overlaps with CASE label at %L" -msgstr "在 %L 处CASE æ ‡è®°ä¸Žåœ¨ %L 处的 CASE æ ‡è®°é‡å " +msgstr "%L处的 CASE æ ‡å·ä¸Ž%L处的 CASE æ ‡å·é‡å " #: fortran/resolve.c:6523 #, no-c-format @@ -9888,14 +9888,14 @@ msgid "Argument of SELECT statement at %L must be a scalar expression" msgstr "%L处 SELECT è¯å¥ä¸çš„实å‚å¿…é¡»ä¸ºæ ‡é‡" #: fortran/resolve.c:6684 fortran/resolve.c:6906 -#, fuzzy, no-c-format +#, no-c-format msgid "The DEFAULT CASE at %L cannot be followed by a second DEFAULT CASE at %L" -msgstr "在 %L 处的 DEFAULT CASE ä¸èƒ½è·Ÿéšç¬¬äºŒä¸ªåœ¨ %L 处的 DEFAULT CASE " +msgstr "%L处的 DEFAULT CASE 为%L处的第二个 DEFAULT CASE 所跟éš" #: fortran/resolve.c:6710 -#, fuzzy, no-c-format +#, no-c-format msgid "Logical range in CASE statement at %L is not allowed" -msgstr "%L 处 CASE è¯å¥ä¸çš„逻辑范围是ä¸è¢«å…许的" +msgstr "%L处 CASE è¯å¥ä¸çš„逻辑范围是ä¸è¢«å…许的" #: fortran/resolve.c:6722 #, no-c-format @@ -9908,9 +9908,9 @@ msgid "Range specification at %L can never be matched" msgstr "%Lå¤„èŒƒå›´è§„æ ¼æ— æ³•åŒ¹é…" #: fortran/resolve.c:6839 -#, fuzzy, no-c-format +#, no-c-format msgid "Logical SELECT CASE block at %L has more that two cases" -msgstr "在 %L 处逻辑的 SELECT CASE å—多于两个的情况" +msgstr "%L处逻辑 SELECT CASE å—有多于两个的情况" #: fortran/resolve.c:6884 #, no-c-format @@ -9948,9 +9948,9 @@ msgid "Data transfer element at %L cannot be a full reference to an assumed-size msgstr "%L处数æ®ä¼ è¾“å…ƒç´ ä¸èƒ½æ˜¯å¯¹ä¸€ä¸ªå‡å®šå¤§å°æ•°ç»„的全引用" #: fortran/resolve.c:7220 -#, fuzzy, no-c-format +#, no-c-format msgid "Statement at %L is not a valid branch target statement for the branch statement at %L" -msgstr "在 %L 处的è¯å¥å¯¹äºŽåœ¨ %L 处的分支è¯å¥ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„åˆ†æ”¯ç›®æ ‡è¯å¥" +msgstr "%L处的è¯å¥å¯¹%L处的分支è¯å¥è€Œè¨€ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„åˆ†æ”¯ç›®æ ‡è¯å¥" #: fortran/resolve.c:7229 #, no-c-format @@ -9961,9 +9961,9 @@ msgstr "%L处的分支å¯èƒ½å¯¼è‡´æ— 穷循环" #. allowed in Fortran 66, so we allow it as extension. No #. further checks are necessary in this case. #: fortran/resolve.c:7257 -#, fuzzy, no-c-format +#, no-c-format msgid "Label at %L is not in the same block as the GOTO statement at %L" -msgstr "在 %L å¤„æ ‡è®°ä¸åœ¨ %L 处 GOTO è¯å¥åŒæ ·çš„å—ä¸" +msgstr "%Lå¤„çš„æ ‡å·ä¸Ž%L处 GOTO è¯å¥ä¸åœ¨ç›¸åŒçš„å—ä¸" #: fortran/resolve.c:7332 #, no-c-format @@ -9976,9 +9976,9 @@ msgid "WHERE assignment target at %L has inconsistent shape" msgstr "%L处 WHERE èµ‹å€¼ç›®æ ‡å¤–å½¢ä¸ä¸€è‡´" #: fortran/resolve.c:7356 fortran/resolve.c:7443 -#, fuzzy, no-c-format +#, no-c-format msgid "Non-ELEMENTAL user-defined assignment in WHERE at %L" -msgstr "在 %L 处 WHERE ä¸éž ELEMENTAL 用户定义的赋值" +msgstr "%L处 WHERE ä¸ç”¨æˆ·å®šä¹‰çš„éž ELEMENTAL 用户赋值" #: fortran/resolve.c:7366 fortran/resolve.c:7453 #, no-c-format @@ -9991,14 +9991,14 @@ msgid "Assignment to a FORALL index variable at %L" msgstr "%Lå¤„å‘ FORALL 索引å˜é‡èµ‹å€¼" #: fortran/resolve.c:7406 -#, fuzzy, no-c-format +#, no-c-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 "在 %2$L 处ä¸åœ¨èµ‹å€¼å·¦ä¾§ä½¿ç”¨å¸¦æœ‰ç´¢å¼•â€œ%1$sâ€çš„ FORALL,所以å¯èƒ½å¼•èµ·å¯¹è¿™ä¸ªå¯¹è±¡çš„多个赋值" +msgstr "%2$L处带索引‘%1$s’的 FORALL 没有被用在赋值的左侧,所以å¯èƒ½å¯¼è‡´å¯¹è¿™ä¸ªå¯¹è±¡çš„多个赋值" #: fortran/resolve.c:7575 -#, fuzzy, no-c-format +#, no-c-format msgid "An outer FORALL construct already has an index with this name %L" -msgstr "外部的 FORALL æž„é€ å·²ç»æœ‰ä¸€ä¸ªæœ‰æ¤åå— %L 的索引" +msgstr "%L处外部 FORALL æž„é€ å·²ç»æœ‰ä¸€ä¸ªåŒå的索引" #: fortran/resolve.c:7654 #, no-c-format @@ -10006,9 +10006,9 @@ msgid "WHERE/ELSEWHERE clause at %L requires a LOGICAL array" msgstr "%L处的 WHERE/ELSEWHERE åå¥éœ€è¦ä¸€ä¸ª LOGICAL 数组" #: fortran/resolve.c:7806 -#, fuzzy, no-c-format +#, no-c-format msgid "CHARACTER expression will be truncated in assignment (%d/%d) at %L" -msgstr "CHARACTER 表达å¼åœ¨ %3$L 处赋值(%1$d/%2$d)时被截æ–" +msgstr "CHARACTER 表达å¼åœ¨%3$L处赋值时将被截æ–(%1$d/%2$d)" #: fortran/resolve.c:7831 #, no-c-format @@ -10016,9 +10016,9 @@ msgid "Cannot assign to variable '%s' in PURE procedure at %L" msgstr "ä¸èƒ½åœ¨%2$L处的 PURE 过程ä¸ä¸ºå˜é‡â€˜%1$s’赋值" #: fortran/resolve.c:7843 -#, fuzzy, no-c-format +#, no-c-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 "在 %L 处 impure å˜é‡è¢«èµ‹å€¼åˆ°ä¸€ä¸ª PURE 过程(12.6)ä¸çš„ POINTER 组件的派生类型å˜é‡" +msgstr "%L处一个éžçº¯å˜é‡åœ¨ PURE 过程ä¸è¢«èµ‹å€¼ç»™å¸¦æœ‰ POINTER 组件派生类型å˜é‡(12.6)" #: fortran/resolve.c:7854 #, no-c-format @@ -10031,9 +10031,9 @@ msgid "ASSIGNED GOTO statement at %L requires an INTEGER variable" msgstr "ASSIGNED GOTO è¯å¥åœ¨%L处需è¦ä¸€ä¸ª INTEGER å˜é‡" #: fortran/resolve.c:7967 -#, fuzzy, no-c-format +#, no-c-format msgid "Variable '%s' has not been assigned a target label at %L" -msgstr "å˜é‡â€œ%sâ€åœ¨ %L å°šæœªæŒ‡æ´¾åˆ°ç›®æ ‡å·æ ‡" +msgstr "å˜é‡â€˜%s’在 %L å°šæœªæŒ‡æ´¾ç›®æ ‡æ ‡å·" #: fortran/resolve.c:7978 #, no-c-format @@ -10041,19 +10041,19 @@ msgid "Alternate RETURN statement at %L requires a SCALAR-INTEGER return specifi msgstr "%L处的替代 RETURN è¯å¥éœ€è¦ä¸€ä¸ª SCALAR-INTEGER 返回é™å®šç¬¦" #: fortran/resolve.c:8009 -#, fuzzy, no-c-format +#, no-c-format msgid "ASSIGN statement at %L requires a scalar default INTEGER variable" -msgstr "在 %L 处的 ASSIGN è¯å¥éœ€è¦ä¸€ä¸ªæ ‡é‡é»˜è®¤çš„ INTEGER å˜é‡" +msgstr "%L处的 ASSIGN è¯å¥éœ€è¦ä¸€ä¸ªé»˜è®¤æ ‡é‡ INTEGER å˜é‡" #: fortran/resolve.c:8024 -#, fuzzy, no-c-format +#, no-c-format msgid "Arithmetic IF statement at %L requires a numeric expression" -msgstr "%L 处的算数 IF è¯å¥è¦æ±‚一个数å—表达å¼" +msgstr "%L处的算术 IF è¯å¥è¦æ±‚一个数å—表达å¼" #: fortran/resolve.c:8087 -#, fuzzy, no-c-format +#, no-c-format msgid "Exit condition of DO WHILE loop at %L must be a scalar LOGICAL expression" -msgstr "%L 处的 DO WHILE 循环的推退æ¡ä»¶å¿…é¡»æ˜¯ä¸€ä¸ªæ ‡é‡ LOGICAL 表达å¼" +msgstr "%L处 DO WHILE 循环的退出æ¡ä»¶å¿…é¡»æ˜¯ä¸€ä¸ªæ ‡é‡ LOGICAL 表达å¼" #: fortran/resolve.c:8169 #, no-c-format @@ -10061,37 +10061,37 @@ msgid "FORALL mask clause at %L requires a LOGICAL expression" msgstr "%L处的 FORMALL 掩ç åå¥éœ€è¦ä¸€ä¸ª LOGICAL 表达å¼" #: fortran/resolve.c:8241 fortran/resolve.c:8297 -#, fuzzy, no-c-format +#, no-c-format msgid "Binding label '%s' for common block '%s' at %L collides with the global entity '%s' at %L" -msgstr "%3$L 处的公共å—“%2$sâ€çš„æ†ç»‘æ ‡è®°â€œ%1$sâ€ä¸Ž %4$L å¤„çš„å…¨å±€æ ‡è®°é¡¹â€œ%3$sâ€å†²çª" +msgstr "%3$L处公共å—‘%2$sâ€™çš„ç»‘å®šæ ‡å·â€˜%1$s’与 %5$L 处的全局实体‘%4$s’冲çª" #. Common block names match but binding labels do not. #: fortran/resolve.c:8262 -#, fuzzy, no-c-format +#, no-c-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 "%3$L 处的公共å—“%2$sâ€çš„æ†ç»‘æ ‡è®°â€œ%1$sâ€ä¸Ž %6$L 处公共å—“%5$sâ€çš„æ†ç»‘æ ‡è®°ä¸åŒ¹é… “%4$sâ€ä¸åŒ¹é…" +msgstr "%3$L处公共å—‘%2$sâ€™çš„ç»‘å®šæ ‡å·â€˜%1$s’与%6$L处公共å—‘%5$sâ€™çš„ç»‘å®šæ ‡è®°â€˜%4$s’ä¸åŒ¹é…" #: fortran/resolve.c:8309 -#, fuzzy, no-c-format +#, no-c-format msgid "Binding label '%s' for common block '%s' at %L collides with global entity '%s' at %L" -msgstr "%3$L 处的公共å—“%2$sâ€çš„æ†ç»‘æ ‡è®°â€œ%1$sâ€ä¸Ž %4$L å¤„çš„å…¨å±€æ ‡è®°é¡¹â€œ%3$sâ€å†²çª" +msgstr "%3$L处公共å—‘%2$sâ€™çš„ç»‘å®šæ ‡å·â€˜%1$s’与 %5$L 处的全局实体‘%4$s’冲çª" #. Make sure global procedures don't collide with anything. #: fortran/resolve.c:8361 -#, fuzzy, no-c-format +#, no-c-format msgid "Binding label '%s' at %L collides with the global entity '%s' at %L" -msgstr "%2$L 处的æ†ç»‘æ ‡è®°â€œ%1$sâ€ä¸Ž %4$L 处的全局实体“%3$sâ€å†²çª" +msgstr "%2$Lå¤„çš„ç»‘å®šæ ‡å·â€˜%1$s’与 %4$L 处的全局实体‘%3$s’冲çª" #. Make sure procedures in interface bodies don't collide. #: fortran/resolve.c:8374 -#, fuzzy, no-c-format +#, no-c-format msgid "Binding label '%s' in interface body at %L collides with the global entity '%s' at %L" -msgstr "%2$L 处的接å£ä½““%2$sâ€ä¸çš„çš„æ†ç»‘æ ‡è®°â€œ%1$sâ€ä¸Ž %4$L 处的全局实体“%3$sâ€å†²çª" +msgstr "%2$L处接å£ä½“å†…çš„ç»‘å®šæ ‡å·â€˜%1$s’与%4L处的全局实体‘%3$s’冲çª" #: fortran/resolve.c:8387 -#, fuzzy, no-c-format +#, no-c-format msgid "Binding label '%s' at %L collides with global entity '%s' at %L" -msgstr "%2$L 处的æ†ç»‘æ ‡è®°â€œ%1$sâ€ä¸Ž %4$L 处的全局实体“%3$sâ€å†²çª" +msgstr "%2$L处的æ†ç»‘æ ‡å·â€˜%1$s’与 %4$L 处的全局实体‘%3$s’冲çª" #: fortran/resolve.c:8464 #, no-c-format @@ -10109,9 +10109,9 @@ msgid "Allocatable array '%s' at %L must have a deferred shape" msgstr "å¯åˆ†é…的数组‘%s’在%L处必须有延迟的外形" #: fortran/resolve.c:8781 -#, fuzzy, no-c-format +#, no-c-format msgid "Scalar object '%s' at %L may not be ALLOCATABLE" -msgstr "%2$L å¤„æ ‡é‡å¯¹è±¡â€œ%1$sâ€ä¸èƒ½ä¸º ALLOCATABLE" +msgstr "%2$Lå¤„æ ‡é‡å¯¹è±¡â€˜%1$s’ä¸èƒ½ä¸º ALLOCATABLE" #: fortran/resolve.c:8789 #, no-c-format @@ -10124,19 +10124,19 @@ msgid "Array '%s' at %L cannot have a deferred shape" msgstr "数组‘%s’在%L处ä¸èƒ½æœ‰å»¶è¿Ÿçš„外形" #: fortran/resolve.c:8828 -#, fuzzy, no-c-format +#, no-c-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 "在 %2$L 处类型“%1$sâ€ä¸èƒ½æ˜¯ä¸»æœºç›¸å…³çš„ï¼Œå› ä¸ºå®ƒè¢«åœ¨ %3$L 处声明的一个ä¸å…¼å®¹çš„åŒå对象所阻ç¢" +msgstr "‘%s’在%L处ä¸èƒ½æ˜¯ä¸»æœºç›¸å…³çš„ï¼Œå› ä¸ºå®ƒè¢«åœ¨%L处声明的一个ä¸å…¼å®¹çš„åŒå对象所阻ç¢" #: fortran/resolve.c:8851 -#, fuzzy, no-c-format +#, no-c-format msgid "Object '%s' at %L must have the SAVE attribute for default initialization of a component" -msgstr "%2$L 处的对象“%1$sâ€å¯¹äºŽæˆåˆ†çš„默认åˆå§‹åŒ–必须有 SAVE 属性," +msgstr "%2$L处的对象‘%1$s’为默认åˆå§‹åŒ–组件必须有 SAVE 属性" #: fortran/resolve.c:8862 -#, fuzzy, no-c-format +#, no-c-format msgid "Type '%s' of CLASS variable '%s' at %L is not extensible" -msgstr "函数‘%s’ä¸çš„替代返回é™å®šç¬¦åœ¨%L处ä¸è¢«å…许" +msgstr "%3$L处 CLASS å˜é‡â€˜%2$s’的类型‘%1$s’ä¸èƒ½è¢«æ‰©å±•" #: fortran/resolve.c:8872 #, no-c-format @@ -10151,9 +10151,9 @@ msgid "The module or main program array '%s' at %L must have constant shape" msgstr "%2$L处的模å—或主程åºæ•°ç»„‘%1$s’必须有常é‡å¤–å½¢" #: fortran/resolve.c:8932 -#, fuzzy, no-c-format +#, no-c-format msgid "Entity with assumed character length at %L must be a dummy argument or a PARAMETER" -msgstr "%L 处å‡å®šå—符长度的实体必须是个哑å‚数或是个 PARAMETER" +msgstr "%L处å‡å®šå—符长度的实体必须是个虚å‚或是个 PARAMETER" #: fortran/resolve.c:8951 #, no-c-format @@ -10196,9 +10196,9 @@ msgid "Although not referenced, '%s' at %L has ambiguous interfaces" msgstr "尽管没有被引用,%2$L处的‘%1$s’的接å£ä¹Ÿæœ‰æ§ä¹‰" #: fortran/resolve.c:9045 -#, fuzzy, no-c-format +#, no-c-format msgid "Character-valued statement function '%s' at %L must have constant length" -msgstr "%2$L 处的å—符值è¯å¥å‡½æ•°â€œ%1$sâ€å¿…须有一个常é‡é•¿åº¦" +msgstr "%2$L处有å—符值的è¯å¥å‡½æ•°â€˜%1$s’必须有常é‡é•¿åº¦" #: fortran/resolve.c:9053 #, no-c-format @@ -10206,14 +10206,14 @@ msgid "Automatic character length function '%s' at %L must have an explicit inte msgstr "%2$L处的自动å—符长度函数‘%1$s’必须有一个显å¼çš„接å£" #: fortran/resolve.c:9078 -#, fuzzy, no-c-format +#, no-c-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:“%1$sâ€æ˜¯ PRIVATE ç±»åž‹å› è€Œä¸èƒ½æ˜¯åœ¨ %3$L 处的 PUBLIC 类型“%2$sâ€çš„å“‘å‚æ•°" +msgstr "Fortran 2003:%3$L处‘%1$s’是 PRIVATE ç±»åž‹å› è€Œä¸èƒ½æ˜¯ PUBLIC 类型‘%2$s’的虚å‚" #: fortran/resolve.c:9101 fortran/resolve.c:9126 -#, fuzzy, no-c-format +#, no-c-format msgid "Fortran 2003: Procedure '%s' in PUBLIC interface '%s' at %L takes dummy arguments of '%s' which is PRIVATE" -msgstr "Fortran 2003: 在 %3$L 处 PUBLIC 接å£â€œ%2$sâ€ä¸çš„过程“%1$sâ€å–了一个 PRIVATE çš„å‡å‚数“%4$sâ€" +msgstr "Fortran 2003: %3$L处 PUBLIC 接å£â€˜%2$s’ä¸çš„过程‘%1$s’有 PRIVATE 的虚å‚‘%4$s’" #: fortran/resolve.c:9144 #, no-c-format @@ -10226,9 +10226,9 @@ msgid "External object '%s' at %L may not have an initializer" msgstr "外部对象‘%s’在%L处ä¸èƒ½æœ‰åˆå§‹å€¼è®¾å®š" #: fortran/resolve.c:9161 -#, fuzzy, no-c-format +#, no-c-format msgid "ELEMENTAL function '%s' at %L must have a scalar result" -msgstr "%2$L 处的 ELEMENTAL 函数“%1$sâ€å¿…é¡»æœ‰ä¸€ä¸ªæ ‡é‡ç»“æžœ" +msgstr "%2$L处 ELEMENTAL 函数‘%1$sâ€™å¿…é¡»æœ‰ä¸€ä¸ªæ ‡é‡è¿”回值" #: fortran/resolve.c:9182 #, no-c-format @@ -10256,14 +10256,14 @@ msgid "Obsolescent feature: CHARACTER(*) function '%s' at %L" msgstr "已过时的特性:%2$L处的 CHARACTER(*) 函数‘%1$s’" #: fortran/resolve.c:9258 -#, fuzzy, no-c-format +#, no-c-format msgid "PROCEDURE attribute conflicts with SAVE attribute in '%s' at %L" -msgstr "PROCEDURE 属性与在 %2$L 处“%1$sâ€ä¸çš„ SAVE 属性冲çª" +msgstr "PROCEDURE 属性与%2$L处‘%1$s’ä¸çš„ SAVE 属性冲çª" #: fortran/resolve.c:9264 -#, fuzzy, no-c-format +#, no-c-format msgid "PROCEDURE attribute conflicts with INTENT attribute in '%s' at %L" -msgstr "PROCEDURE 属性与 %2$L 处“%1$sâ€ä¸çš„ INTENT 属性冲çª" +msgstr "PROCEDURE 属性与%2$L处‘%1$s’ä¸çš„ INTENT 属性冲çª" #: fortran/resolve.c:9270 #, no-c-format @@ -10281,14 +10281,14 @@ msgid "Procedure pointer result '%s' at %L is missing the pointer attribute" msgstr "%2$L处过程指针结果‘%1$s’缺少指针属性" #: fortran/resolve.c:9330 -#, fuzzy, no-c-format +#, no-c-format msgid "FINAL procedure '%s' at %L is not a SUBROUTINE" -msgstr "%L 处 FINAL 过程的å‚æ•°å¿…é¡»ä¸æ˜¯ POINTER" +msgstr "%2$L处 FINAL 过程‘%1$s’ä¸æ˜¯ä¸€ä¸ª SUBROUTINE" #: fortran/resolve.c:9338 -#, fuzzy, no-c-format +#, no-c-format msgid "FINAL procedure at %L must have exactly one argument" -msgstr "%L 处的 FINAL 过程必须åªæœ‰ä¸€ä¸ªå‚æ•°" +msgstr "%L处的 FINAL 过程有且åªæœ‰ä¸€ä¸ªå‚æ•°" #: fortran/resolve.c:9347 #, no-c-format @@ -10321,14 +10321,14 @@ msgid "Non-scalar FINAL procedure at %L should have assumed shape argument" msgstr "%L处的éžæ ‡é‡ FINAL 过程应当有å‡å®šå¤–形的å‚æ•°" #: fortran/resolve.c:9402 -#, fuzzy, no-c-format +#, no-c-format msgid "FINAL procedure '%s' declared at %L has the same rank (%d) as '%s'" -msgstr "在 %2$L 处声明的 FINAL 过程“%1$sâ€æœ‰ä¸Žâ€œ%4$sâ€ç›¸åŒçš„行列“%3$dâ€" +msgstr "%2$L处声明的 FINAL 过程‘%1$s’有与‘%4$s’相åŒçš„秩(%3$d)" #: fortran/resolve.c:9435 -#, fuzzy, no-c-format +#, no-c-format msgid "Only array FINAL procedures declared for derived type '%s' defined at %L, suggest also scalar one" -msgstr "仅数组 FINAL 过程声明了在 %L 处定义的派生类型“%sâ€ï¼Œè¿˜å»ºè®®å®šä¹‰ä¸€ä¸ªæ ‡é‡" +msgstr "仅为定义在%2$L处的派生类型‘%1$s’声明了数组 FINAL è¿‡ç¨‹ï¼Œå»ºè®®ä¹Ÿå®šä¹‰ä¸€ä¸ªæ ‡é‡è¿‡ç¨‹" #. TODO: Remove this error when finalization is finished. #: fortran/resolve.c:9440 @@ -10387,19 +10387,19 @@ msgid "'%s' at %L overrides a PUBLIC procedure and must not be PRIVATE" msgstr "%2$L处的‘%1$s’覆盖了一个 PUBLIC è¿‡ç¨‹å› æ¤å¿…é¡»ä¸æ˜¯ PRIVATE" #: fortran/resolve.c:9580 -#, fuzzy, no-c-format +#, no-c-format msgid "Dummy argument '%s' of '%s' at %L should be named '%s' as to match the corresponding argument of the overridden procedure" -msgstr "在 %3$L 处的“%2$sâ€çš„“%1$sâ€åº”该命å为与被跨越过程的相应å‚数匹é…的“%1$sâ€" +msgstr "%3$L处‘%2$s’的虚å‚‘%1$s’应该命å为‘%4$s’以匹é…被覆盖过程的相应å‚æ•°" #: fortran/resolve.c:9593 #, no-c-format msgid "Types mismatch for dummy argument '%s' of '%s' %L in respect to the overridden procedure" -msgstr "%3$L处‘%2$s’的哑元实å‚‘%1$s’相对于覆盖过程类型ä¸åŒ¹é…" +msgstr "%3$L处‘%2$s’的虚å‚‘%1$s’相对于覆盖过程类型ä¸åŒ¹é…" #: fortran/resolve.c:9603 -#, fuzzy, no-c-format +#, no-c-format msgid "'%s' at %L must have the same number of formal arguments as the overridden procedure" -msgstr "在 %2$L 处的“%1$sâ€å¿…须有与被跨越的过程相åŒçš„å½¢å¼å‚æ•°" +msgstr "%2$L处的‘%1$s’必须有与被覆盖的过程相åŒæ•°é‡çš„å½¢å¼å‚æ•°" #: fortran/resolve.c:9612 #, no-c-format @@ -10412,34 +10412,34 @@ msgid "'%s' at %L overrides a binding with PASS and must also be PASS" msgstr "%2$L处的‘%1$s’覆盖了一个具有 PASS çš„ç»‘å®šå› æ¤ä¹Ÿå¿…须是 PASS" #: fortran/resolve.c:9630 -#, fuzzy, no-c-format +#, no-c-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 "在 %2$L 处的“%1$sâ€çš„ä¼ é€’å¯¹è±¡çš„å“‘å‚æ•°å¿…é¡»ä¸Žè¢«è·¨è¶Šçš„è¿‡ç¨‹ä¼ é€’å¯¹è±¡çš„å“‘å‚数有相åŒçš„ä½ç½®" +msgstr "%2$L处的‘%1$sâ€™çš„ä¼ é€’å¯¹è±¡è™šå‚å¿…é¡»ä¸Žè¢«è¦†ç›–çš„è¿‡ç¨‹ä¼ é€’å¯¹è±¡çš„è™šå‚ä½ç½®ç›¸åŒ" #: fortran/resolve.c:9664 -#, fuzzy, no-c-format +#, no-c-format msgid "'%s' and '%s' can't be mixed FUNCTION/SUBROUTINE for GENERIC '%s' at %L" -msgstr "在 %L 处对于 GENERIC“%sâ€çš„ FUNCTION/SUBROUTINE ä¸èƒ½æ··åˆâ€œ%sâ€å’Œâ€œ%sâ€" +msgstr "%4$L处‘%1$s’和‘%2$s’对 GENERIC‘%3$s’ä¸èƒ½æ˜¯æ··åˆçš„ FUNCTION/SUBROUTINE" #: fortran/resolve.c:9673 -#, fuzzy, no-c-format +#, no-c-format msgid "'%s' and '%s' for GENERIC '%s' at %L are ambiguous" -msgstr "在 %L 处 GENERIC“%sâ€çš„“%sâ€å’Œâ€œ%sâ€æ˜¯äºŒä¹‰æ€§çš„" +msgstr "%4$L处 GENERIC‘%3$s’的‘%1$s’和‘%2$s’有æ§ä¹‰" #: fortran/resolve.c:9732 -#, fuzzy, no-c-format +#, no-c-format msgid "Undefined specific binding '%s' as target of GENERIC '%s' at %L" -msgstr "没有定义的特别绑定“%1$sâ€ä½œä¸ºåœ¨ %3$L 处的 GENERIC“%2$sâ€" +msgstr "未定义的指定绑定‘%1$s’用作%3$L处的 GENERIC‘%2$sâ€™çš„ç›®æ ‡" #: fortran/resolve.c:9744 -#, fuzzy, no-c-format +#, no-c-format msgid "GENERIC '%s' at %L must target a specific binding, '%s' is GENERIC, too" -msgstr "在 %L 处 GENERIC“%sâ€å¿…é¡»æŠŠç›®æ ‡å®šåˆ°ä¸€ä¸ªç‰¹å®šçš„æ†ç»‘,“%sâ€æ˜¯ GENERIC,必须也是" +msgstr "%2$L处 GENERIC‘%1$s’必须定ä½ä¸€ä¸ªç‰¹å®šçš„绑定,‘%3$s’也是 GENERIC" #: fortran/resolve.c:9774 -#, fuzzy, no-c-format +#, no-c-format msgid "GENERIC '%s' at %L can't overwrite specific binding with the same name" -msgstr "在 %L 处 GENERIC“%sâ€æ— 法盖写与特殊相åŒåå—æ†ç»‘" +msgstr "%2$L处 GENERIC‘%1$sâ€™æ— æ³•è¦†ç›–åŒå的特定绑定" #: fortran/resolve.c:9830 #, no-c-format @@ -10447,24 +10447,24 @@ msgid "Type-bound operator at %L can't be NOPASS" msgstr "%L处类型é™å®šçš„æ“作数ä¸èƒ½æ˜¯ NOPASS" #: fortran/resolve.c:9993 -#, fuzzy, no-c-format +#, no-c-format msgid "'%s' must be a module procedure or an external procedure with an explicit interface at %L" -msgstr "“%sâ€æ˜¯å¿…须是一个模å—过程或有显å¼æŽ¥å£çš„外部过程于 %L 处" +msgstr "%2$L处的‘%1$s’必须是一个模å—过程或带有显å¼æŽ¥å£çš„外部过程" #: fortran/resolve.c:10030 -#, fuzzy, no-c-format +#, no-c-format msgid "Procedure '%s' with PASS(%s) at %L has no argument '%s'" -msgstr "%3$L 处与 PASS(%2$s)一起的过程“%1$sâ€æ²¡æœ‰å‚数“%4$sâ€" +msgstr "%3$L处有 PASS(%2$s)的过程‘%1$s’没有å‚数‘%4$s’" #: fortran/resolve.c:10044 -#, fuzzy, no-c-format +#, no-c-format msgid "Procedure '%s' with PASS at %L must have at least one argument" -msgstr "%2$L 处与 PASS 一起的过程“%1$sâ€å¿…须至少有一个å‚æ•°" +msgstr "%2$L处有 PASS 的过程‘%1$s’必须至少带一个å‚æ•°" #: fortran/resolve.c:10055 fortran/resolve.c:10424 -#, fuzzy, no-c-format +#, no-c-format msgid "Non-polymorphic passed-object dummy argument of '%s' at %L" -msgstr "%2$L处声明了未使用的哑元实å‚‘%1$s’" +msgstr "%2$L处éžå¤šæ€çš„ä¼ é€’å¯¹è±¡è™šå‚‘%1$s’" #: fortran/resolve.c:10063 #, no-c-format @@ -10472,14 +10472,14 @@ msgid "Argument '%s' of '%s' with PASS(%s) at %L must be of the derived-type '%s msgstr " %4$L处的具有 PASS(%3$s) 的‘%2$s’的å‚数‘%1$s’必须具有派生类型‘%5$s’" #: fortran/resolve.c:10091 -#, fuzzy, no-c-format +#, no-c-format msgid "Procedure '%s' at %L has the same name as a component of '%s'" -msgstr "在 %2$L 处过程“%1$sâ€æœ‰ä¸Žâ€œ%3$sâ€ç»„件å相åŒçš„åå—" +msgstr "%2$L处过程‘%1$s’和‘%3$s’的组件é‡å" #: fortran/resolve.c:10100 -#, fuzzy, no-c-format +#, no-c-format msgid "Procedure '%s' at %L has the same name as an inherited component of '%s'" -msgstr "在 %2$L 处过程“%1$sâ€æœ‰ä¸Žâ€œ%3$sâ€ç»§æ‰¿ç»„件å相åŒçš„åå—" +msgstr "%2$L处过程‘%1$s’和‘%3$s’的继承组件é‡å" #: fortran/resolve.c:10187 #, no-c-format @@ -10487,14 +10487,14 @@ msgid "Derived-type '%s' declared at %L must be ABSTRACT because '%s' is DEFERRE msgstr "%2$L处声明的派生类型‘%1$s’必须是 ABSTRACTï¼Œå› ä¸ºâ€˜%3$s’是 DEFERRED 且没有被覆盖" #: fortran/resolve.c:10248 -#, fuzzy, no-c-format +#, no-c-format msgid "Non-extensible derived-type '%s' at %L must not be ABSTRACT" -msgstr "%2$L 处ä¸èƒ½ä¼¸å±•çš„派生类型“%1$sâ€å¿…é¡»ä¸æ˜¯ä¸ª ABSTRACT" +msgstr "%2$L处ä¸èƒ½æ‰©å±•çš„派生类型‘%1$s’ä¸èƒ½æ˜¯ ABSTRACT" #: fortran/resolve.c:10258 -#, fuzzy, no-c-format +#, no-c-format msgid "Interface '%s', used by procedure pointer component '%s' at %L, is declared in a later PROCEDURE statement" -msgstr "内部过程‘%s’在%L处ä¸å…许用作实å‚" +msgstr "%3$L处为过程指针组件‘%2$s’所使用的接å£â€˜%1$s’在之åŽçš„ PROCEDURE è¯å¥ä¸è¢«å£°æ˜Ž" #: fortran/resolve.c:10319 #, no-c-format @@ -10512,9 +10512,9 @@ msgid "Procedure pointer component '%s' with PASS at %L must have at least one a msgstr "%2$L处的具有 PASS 的过程指针组件‘%1$s’必须至少有一个实å‚" #: fortran/resolve.c:10388 -#, fuzzy, no-c-format +#, no-c-format msgid "Argument '%s' of '%s' with PASS(%s) at %L must be of the derived type '%s'" -msgstr " %4$L 处的具有 PASS(%3$s) 的“%2$sâ€çš„å‚数“%1$sâ€å¿…须是派生类型“%5$sâ€" +msgstr "%4$L处具有 PASS(%3$s) 的‘%2$s’的å‚数‘%1$s’必须有派生类型‘%5$s’" #: fortran/resolve.c:10398 #, no-c-format @@ -10532,9 +10532,9 @@ msgid "Argument '%s' of '%s' with PASS(%s) at %L may not be ALLOCATABLE" msgstr "%4$L处带有 PASS(%3$s)的‘%2$s’的å‚数‘%1s’ä¸èƒ½æ˜¯ ALLOCATABLE" #: fortran/resolve.c:10439 -#, fuzzy, no-c-format +#, no-c-format msgid "Component '%s' of '%s' at %L has the same name as an inherited type-bound procedure" -msgstr "在 %3$L 处的“%2$sâ€çš„组件“%1$sâ€æœ‰ä¸Žç»§æ‰¿çš„ç•Œé™ç±»åž‹è¿‡ç¨‹åŒçš„åå—" +msgstr "%3$L处‘%2$s’的组件‘%1$s’与一个继承的类型é™å®šè¿‡ç¨‹åŒå" #: fortran/resolve.c:10451 #, no-c-format @@ -10542,19 +10542,19 @@ msgid "Character length of component '%s' needs to be a constant specification e msgstr "%2$L处组件‘%1$s’的å—符长度必须是一个常é‡è§„æ ¼è¡¨è¾¾å¼" #: fortran/resolve.c:10466 -#, fuzzy, no-c-format +#, no-c-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: 组件“%1$sâ€æ˜¯ä¸€ä¸ª PRIVATE 类型并且ä¸èƒ½æ˜¯ä¸€ä¸ªåœ¨ %3$L 处的 PUBLIC 的组件“%2$sâ€" +msgstr "Fortran 2003:%3$L处组åˆâ€˜%1$s’是一个 PRIVATE ç±»åž‹ï¼Œå› æ¤ä¸èƒ½æ˜¯ PUBLIC‘%2$s’的组åˆ" #: fortran/resolve.c:10476 -#, fuzzy, no-c-format +#, no-c-format msgid "Component %s of SEQUENCE type declared at %L does not have the SEQUENCE attribute" -msgstr "在 %2$L 处 SEQUENCE 类型声明的组件 %1$s 没有 SEQUENCE 属性" +msgstr "%2$L处声明的有 SEQUENCE 类型的组件 %1$s 没有 SEQUENCE 属性" #: fortran/resolve.c:10487 -#, fuzzy, no-c-format +#, no-c-format msgid "The pointer component '%s' of '%s' at %L is a type that has not been declared" -msgstr "在 %3$L 处的“%2$sâ€çš„组件“%1$sâ€æ˜¯ä¸ªå°šæœªå£°æ˜Žçš„类型" +msgstr "%3$L处‘%2$s’的指针组件‘%1$s’类型尚未声明" #: fortran/resolve.c:10498 #, no-c-format @@ -10562,59 +10562,59 @@ msgid "Component '%s' with CLASS at %L must be allocatable or pointer" msgstr "%2$L处具有 CLASS 的组件‘%1$s’必须是å¯åˆ†é…的或指针" #: fortran/resolve.c:10526 -#, fuzzy, no-c-format +#, no-c-format msgid "Component '%s' of '%s' at %L must have constant array bounds" -msgstr "在 %3$L 处的组件“%2$sâ€çš„“%1$sâ€å¿…须常é‡æ•°ç»„ç•Œé™" +msgstr "%3$L处‘%2$s’的组件‘%1$s’必须有常é‡æ•°ç»„ç•Œé™" #: fortran/resolve.c:10571 -#, fuzzy, no-c-format +#, no-c-format msgid "NAMELIST object '%s' was declared PRIVATE and cannot be member of PUBLIC namelist '%s' at %L" -msgstr "NAMELIST 对象“%sâ€å£°æ˜Žäº† PRIVATE 而ä¸èƒ½æ˜¯åœ¨ %L 处 PUBLIC åå—列表“%sâ€çš„æˆå‘˜" +msgstr "%3$L处 NAMELIST 对象‘%1$s’声明为 PRIVATE å› æ¤ä¸èƒ½æ˜¯ PUBLIC åå—列表‘%2$s’的æˆå‘˜" #: fortran/resolve.c:10581 -#, fuzzy, no-c-format +#, no-c-format msgid "NAMELIST object '%s' has use-associated PRIVATE components and cannot be member of namelist '%s' at %L" -msgstr "NAMELIST 对象“%1$sâ€æœ‰ä½¿ç”¨ç›¸å…³çš„ PRIVATE 组件并且ä¸èƒ½æ˜¯åœ¨ %3$L 处 NAMELIST“%2$sâ€çš„æˆå‘˜" +msgstr "%3$L处 NAMELIST 对象‘%1$s’有使用相关的 PRIVATE ç»„ä»¶å› æ¤ä¸èƒ½æ˜¯ NAMELIST‘%2$s’的æˆå‘˜" #: fortran/resolve.c:10594 -#, fuzzy, no-c-format +#, no-c-format msgid "NAMELIST object '%s' has PRIVATE components and cannot be a member of PUBLIC namelist '%s' at %L" -msgstr "NAMELIST 对象“%1$sâ€æœ‰ PRIVATE 组件并且ä¸èƒ½æ˜¯åœ¨ %3$L 处 PUBLIC åå—列表“%2$sâ€çš„一个æˆå‘˜" +msgstr "%3$L处 NAMELIST 对象‘%1$s’有 PRIVATE ç»„ä»¶å› æ¤ä¸èƒ½æ˜¯ PUBLIC åå—列表‘%2$s’的æˆå‘˜" #: fortran/resolve.c:10606 -#, fuzzy, no-c-format +#, no-c-format msgid "NAMELIST array object '%s' must not have assumed shape in namelist '%s' at %L" -msgstr "NAMELIST 数组对象“%1$sâ€åœ¨ %3$L 处åå—列表“%2$sâ€ä¸å¿…须没有å‡å®šå¤–å½¢" +msgstr "%3$L处 NAMELIST 数组对象‘%1$s’在åå—列表‘%2$s’ä¸èƒ½æœ‰å‡å®šå¤–å½¢" #: fortran/resolve.c:10615 -#, fuzzy, no-c-format +#, no-c-format msgid "NAMELIST array object '%s' must have constant shape in namelist '%s' at %L" -msgstr "NAMELIST 数组对象“%1$sâ€åœ¨ %3$L 处åå—列表“%2$sâ€ä¸å¿…须有æ’定的外形" +msgstr "%3$L处 NAMELIST 数组对象‘%1$s’在åå—列表‘%2$s’必须有常外形" #: fortran/resolve.c:10627 -#, fuzzy, no-c-format +#, no-c-format msgid "NAMELIST object '%s' in namelist '%s' at %L cannot have ALLOCATABLE components" -msgstr "%L 处åå—列表“%2$sâ€ä¸çš„ NAMELIST 对象“%1$sâ€ä¸èƒ½æœ‰ ALLOCATABLE 组件" +msgstr "%3$L处 NAMELIST 数组对象‘%1$s’在åå—列表‘%2$s’必须有 ALLOCATABLE 组件" #: fortran/resolve.c:10635 -#, fuzzy, no-c-format +#, no-c-format msgid "NAMELIST object '%s' in namelist '%s' at %L cannot have POINTER components" -msgstr "%3$L 处åå—列表“%2$sâ€ä¸çš„ NAMELIST 对象“%1$sâ€ä¸èƒ½æœ‰ POINTER 组件" +msgstr "%3$L处 NAMELIST 数组对象‘%1$s’在åå—列表‘%2$s’ä¸èƒ½æœ‰ POINTER 组件" #: fortran/resolve.c:10661 -#, fuzzy, no-c-format +#, no-c-format msgid "PROCEDURE attribute conflicts with NAMELIST attribute in '%s' at %L" -msgstr "PROCEDURE 属性与在 %2$L 处“%1$sâ€ä¸çš„ NAMELIST 属性冲çª" +msgstr "PROCEDURE 属性与%2$L处‘%1$s’ä¸çš„ NAMELIST 属性冲çª" #: fortran/resolve.c:10680 -#, fuzzy, no-c-format +#, no-c-format msgid "Parameter array '%s' at %L cannot be automatic or of deferred shape" -msgstr "在 %L 处的å‚数数组“%1$sâ€ä¸èƒ½æ˜¯è‡ªåŠ¨çš„或有延迟的外形" +msgstr "%2$L处的å‚数数组‘%1$s’ä¸èƒ½æ˜¯è‡ªåŠ¨çš„或有延迟的外形" #: fortran/resolve.c:10692 -#, fuzzy, no-c-format +#, no-c-format msgid "Implicitly typed PARAMETER '%s' at %L doesn't match a later IMPLICIT type" -msgstr "在 %2$L 处éšå¼åœ°æ‰“å—çš„ PARAMETER“%1$sâ€ä¸Žä¸€ä¸ªæ›´åŽé¢çš„ IMPLICIT 类型ä¸åŒ¹é…" +msgstr "%2$L处éšå¼ç±»åž‹çš„ PARAMETER‘%1$s’与éšåŽçš„ IMPLICIT 类型ä¸åŒ¹é…" #: fortran/resolve.c:10703 #, no-c-format @@ -10627,24 +10627,24 @@ msgid "PROCEDURE '%s' at %L may not be used as its own interface" msgstr "%2$L处的 PROCEDURE‘%1$s’ä¸èƒ½è¢«ç”¨ä½œå…¶è‡ªèº«çš„接å£" #: fortran/resolve.c:10772 -#, fuzzy, no-c-format +#, no-c-format msgid "Interface '%s', used by procedure '%s' at %L, is declared in a later PROCEDURE statement" -msgstr "%3$L 处“%2$sâ€è¿‡ç¨‹æ‰€ç”¨çš„接å£â€œ%1$sâ€æ˜¯åœ¨ä»¥åŽçš„ PROCEDURE è¯å¥ä¸å£°æ˜Ž" +msgstr "为过程‘%2$s’在%3$L处使用的接å£â€˜%1$s’是在之åŽçš„ PROCEDURE è¯å¥ä¸å£°æ˜Žçš„" #: fortran/resolve.c:10825 -#, fuzzy, no-c-format +#, no-c-format msgid "Interface '%s' of procedure '%s' at %L must be explicit" -msgstr "在 %3$L 处过程“%2$sâ€çš„接å£â€œ%1$sâ€å¿…须是显å¼çš„" +msgstr "%3$L处过程‘%2$s’的接å£â€˜%1$s’必须是显å¼çš„" #: fortran/resolve.c:10892 #, no-c-format msgid "Assumed size array at %L must be a dummy argument" -msgstr "%L处å‡å®šå¤§å°çš„数组必须是一个哑元" +msgstr "%L处å‡å®šå¤§å°çš„数组必须是一个虚å‚" #: fortran/resolve.c:10895 #, no-c-format msgid "Assumed shape array at %L must be a dummy argument" -msgstr "%L处å‡å®šå¤–形的数组必须是一个哑元" +msgstr "%L处å‡å®šå¤–形的数组必须是一个虚å‚" #: fortran/resolve.c:10907 #, no-c-format @@ -10652,39 +10652,39 @@ msgid "Symbol at %L is not a DUMMY variable" msgstr "%L处的符å·ä¸æ˜¯ä¸€ä¸ª DUMMY å˜é‡" #: fortran/resolve.c:10913 -#, fuzzy, no-c-format +#, no-c-format msgid "'%s' at %L cannot have the VALUE attribute because it is not a dummy argument" -msgstr "%2$L 处的“%1$sâ€ä¸èƒ½æœ‰ VALUE å±žæ€§ï¼Œå› ä¸ºå®ƒä¸æ˜¯ä¸ªå“‘å‚æ•°" +msgstr "%2$L 处的“%1$sâ€ä¸èƒ½æœ‰ VALUE å±žæ€§ï¼Œå› ä¸ºå®ƒä¸æ˜¯ä¸ªè™šå‚" #: fortran/resolve.c:10923 -#, fuzzy, no-c-format +#, no-c-format msgid "Character dummy variable '%s' at %L with VALUE attribute must have constant length" -msgstr "在 %2$L 处具有 VALUE 属性的å—符哑å˜é‡â€œ%1$sâ€å¿…须有是常数长度" +msgstr "%2$L处带 VALUE 属性的å—符哑元‘%1$s’必须具有常数长度" #: fortran/resolve.c:10932 -#, fuzzy, no-c-format +#, no-c-format msgid "C interoperable character dummy variable '%s' at %L with VALUE attribute must have length one" -msgstr "在 %2$L 处具有 C å¯äº’æ“作的 VALUE 属性的å—符哑å˜é‡â€œ%1$sâ€å¿…须长度1" +msgstr "%2$L处带 VALUE 属性与 C å¯äº’æ“作的å—符哑元‘%1$s’长度必须为 1" #: fortran/resolve.c:10958 -#, fuzzy, no-c-format +#, no-c-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 "在 %2$L 处å˜é‡â€œ%1$sâ€ä¸èƒ½æ˜¯ä½¿ç»“åˆ BIND(C) å› ä¸ºå®ƒæ—¢ä¸æ˜¯ä¸€ä¸ª COMMON å—也ä¸æ˜¯äºŽæ¨¡å—级范围声明的" +msgstr "%2$L处å˜é‡â€˜%1$s’ä¸èƒ½æ˜¯ BIND(C) å› ä¸ºå®ƒæ—¢ä¸æ˜¯ä¸€ä¸ª COMMON å—也ä¸æ˜¯äºŽæ¨¡å—级作用域声明的" #: fortran/resolve.c:11011 -#, fuzzy, no-c-format +#, no-c-format msgid "The derived type '%s' at %L is of type '%s', which has not been defined" -msgstr "在 %2$L 处的派生类型“%1$sâ€æ˜¯å°šæœªå®šä¹‰çš„类型“%3$sâ€" +msgstr "%2$L处派生类型‘%1$s’的类型‘%3$s’尚未定义" #: fortran/resolve.c:11052 -#, fuzzy, no-c-format +#, no-c-format msgid "Fortran 2003: PUBLIC %s '%s' at %L of PRIVATE derived type '%s'" -msgstr "Fortran 2003: PRIVATE 派生类型“%3$sâ€çš„ %2$L 处的 PUBLIC %s“%1$sâ€" +msgstr "Fortran 2003:%3$L处 PUBLIC %1$s‘%2$s’具有 PRIVATE 派生类型‘%4$s’" #: fortran/resolve.c:11071 -#, fuzzy, no-c-format +#, no-c-format msgid "The INTENT(OUT) dummy argument '%s' at %L is ASSUMED SIZE and so cannot have a default initializer" -msgstr "在 %L 处INTENT(OUT) å‡å‚数“%sâ€æ˜¯ ASSUMED SIZE 所以ä¸èƒ½å¤Ÿæœ‰ä¸€ä¸ªé»˜è®¤åˆå§‹åŒ–器" +msgstr "%2$L处INTENT(OUT) 虚å‚‘%1$s’是 ASSUMED SIZE,所以ä¸èƒ½æœ‰ä¸€ä¸ªé»˜è®¤åˆå§‹å€¼è®¾å®š" #: fortran/resolve.c:11145 #, no-c-format @@ -10692,14 +10692,14 @@ msgid "Threadprivate at %L isn't SAVEd" msgstr "%L处的线程ç§æœ‰å˜é‡æœªè¢«ä¿å˜" #: fortran/resolve.c:11233 -#, fuzzy, no-c-format +#, no-c-format msgid "BLOCK DATA element '%s' at %L must be in COMMON" -msgstr "BLOCK DATA å…ƒç´ â€œ%sâ€(在 %L 上)必须在 COMMON ä¸" +msgstr "%2$L处 BLOCK DATA å…ƒç´ â€˜%1$s’必须在 COMMON ä¸" #: fortran/resolve.c:11239 -#, fuzzy, no-c-format +#, no-c-format msgid "DATA array '%s' at %L must be specified in a previous declaration" -msgstr "在 %L 处的 DATA 数组“%sâ€å¿…须在一个先å‰çš„声明ä¸è§„定" +msgstr "%2$L处 BLOCK DATA å…ƒç´ â€˜%1$s’必在å‰ä¸€ä¸ªå£°æ˜Žä¸æŒ‡å®š" #: fortran/resolve.c:11255 #, no-c-format @@ -10707,9 +10707,9 @@ msgid "DATA element '%s' at %L is a pointer and so must be a full array" msgstr "%2$L处的 DATA å…ƒç´ â€˜%1$s’是一个指针所以必须是一个完全的数组" #: fortran/resolve.c:11301 -#, fuzzy, no-c-format +#, no-c-format msgid "Nonconstant array section at %L in DATA statement" -msgstr "%L 处 DATA è¯å¥ä¸æœ‰éžå¸¸é‡æ•°ç»„部分" +msgstr "%L处 DATA è¯å¥ä¸æœ‰éžå¸¸é‡æ•°ç»„段" #: fortran/resolve.c:11314 #, no-c-format @@ -10787,14 +10787,14 @@ msgid "Named constant '%s' at %L cannot be an EQUIVALENCE object" msgstr "%2$L处的有å常é‡â€˜%1$s’ä¸èƒ½æ˜¯ä¸€ä¸ª EQUIVALENCE 对象" #: fortran/resolve.c:11978 -#, fuzzy, no-c-format +#, no-c-format msgid "Array '%s' at %L with non-constant bounds cannot be an EQUIVALENCE object" -msgstr "具有éžå¸¸é‡é™å®šçš„ %2$L 处的数组“%1$sâ€ä¸èƒ½æ˜¯ä¸€ä¸ª EQUIVALENCE 对象" +msgstr "%2$L处有éžå¸¸é‡ç•Œé™çš„数组‘%1$s’ä¸èƒ½æ˜¯ä¸€ä¸ª EQUIVALENCE 对象" #: fortran/resolve.c:11989 -#, fuzzy, no-c-format +#, no-c-format msgid "Structure component '%s' at %L cannot be an EQUIVALENCE object" -msgstr "%2$L 处的结构组件“%1$sâ€ä¸èƒ½æ˜¯ä¸€ä¸ª EQUIVALENCE 对象" +msgstr "%2$L处结构组件‘%1$s’ä¸èƒ½æ˜¯ä¸€ä¸ª EQUIVALENCE 对象" #: fortran/resolve.c:12000 #, no-c-format @@ -10802,9 +10802,9 @@ msgid "Substring at %L has length zero" msgstr "%L çš„åå—符串长度为零" #: fortran/resolve.c:12044 -#, fuzzy, no-c-format +#, no-c-format msgid "Fortran 2003: PUBLIC function '%s' at %L of PRIVATE type '%s'" -msgstr "Fortran 2003:PRIVATE 类型“%3$sâ€çš„ %2$L 处的 PUBLIC 函数“%1$sâ€" +msgstr "Fortran 2003:%2$L处 PRIVATE 类型‘%3$s’的 PUBLIC 函数‘%1$s’" #: fortran/resolve.c:12057 #, no-c-format @@ -10817,9 +10817,9 @@ msgid "User operator procedure '%s' at %L must be a FUNCTION" msgstr "%2$L处的用户è¿ç®—符‘%1$s’必须是一个 FUNCTION" #: fortran/resolve.c:12084 -#, fuzzy, no-c-format +#, no-c-format msgid "User operator procedure '%s' at %L cannot be assumed character length" -msgstr "在 %2$L 处用户è¿ç®—符过程“%1$sâ€ä¸èƒ½æ˜¯å‡å®šçš„å—符长度" +msgstr "%2$L处用户è¿ç®—符过程‘%1$s’ä¸èƒ½æœ‰å‡å®šå—符长度" #: fortran/resolve.c:12092 #, no-c-format @@ -10842,19 +10842,19 @@ msgid "Operator interface at %L must have, at most, two arguments" msgstr "%L处的è¿ç®—符接å£å¿…须有至多两个实å‚" #: fortran/resolve.c:12203 -#, fuzzy, no-c-format +#, no-c-format msgid "Contained procedure '%s' at %L of a PURE procedure must also be PURE" -msgstr "在 PURE 过程的 %2$L 处的包å«çš„过程的“%1$sâ€å¿…须也是 PURE" +msgstr "%2$L处 PURE 过程ä¸åŒ…å«çš„过程‘%1$s’必须也是 PURE" #: fortran/scanner.c:760 -#, fuzzy, no-c-format +#, no-c-format msgid "!$OMP at %C starts a commented line as it neither is followed by a space nor is a continuation line" -msgstr "在 %C 处 !$OMP 开始一个注释行,它既ä¸æ˜¯è·Ÿéšä¸€ä¸ªç©ºç™½ç¬¦ä¹Ÿä¸æ˜¯ä¸€ä¸ªç»è¡Œç¬¦" +msgstr "%C处的 !$OMP å¼€å§‹äº†ä¸€ä¸ªæ³¨é‡Šè¡Œï¼Œå› ä¸ºå®ƒæ—¢ä¸æ˜¯ç”±ä¸€ä¸ªç©ºç™½ç¬¦è·Ÿéšä¹Ÿä¸æ˜¯ä¸€ä¸ªç»è¡Œ" #: fortran/scanner.c:1078 fortran/scanner.c:1221 -#, fuzzy, no-c-format +#, no-c-format msgid "Limit of %d continuations exceeded in statement at %C" -msgstr "%2$C 处è¯å¥ä¸è¶…出 %1$d 个连ç»çš„é™åˆ¶" +msgstr "%2$C处è¯å¥è¶…出 %1$d 个ç»è¡Œçš„é™åˆ¶" #: fortran/scanner.c:1090 fortran/scanner.c:1177 #, no-c-format @@ -10904,7 +10904,7 @@ msgstr "%s 的结果在%L处上溢其ç§åˆ«" #: fortran/simplify.c:91 #, no-c-format msgid "Result of %s underflows its kind at %L" -msgstr "%s 的结果在%L处下溢其ç§ç±»" +msgstr "%s 的结果在%L处下溢其ç§åˆ«" #: fortran/simplify.c:96 #, no-c-format @@ -10937,9 +10937,9 @@ msgid "Argument of %s function at %L outside of range [0,127]" msgstr "%2$L处 %1$s 函数的å‚æ•°ä¸åœ¨[0,127]范围内" #: fortran/simplify.c:705 -#, fuzzy, no-c-format +#, no-c-format msgid "Argument of %s function at %L is too large for the collating sequence of kind %d" -msgstr "%2$L 处的 %1$s 函数的å‚数对于对比åºåˆ— $3$d æ¥è¯´å¤ªå¤§" +msgstr "%2$L处的 %1$s 函数的å‚数对于ç§åˆ«ä¸º %3$d 的对比åºåˆ—æ¥è¯´å¤ªå¤§" #: fortran/simplify.c:744 #, no-c-format @@ -10984,7 +10984,7 @@ msgstr "%L处 IBCLR 的第二个å‚æ•°æ— æ•ˆ" #: fortran/simplify.c:2275 #, no-c-format msgid "Second argument of IBCLR exceeds bit size at %L" -msgstr "%L处IBCLR 的第二个å‚数超过ä½å¤§å°" +msgstr "%L处 IBCLR 的第二个å‚数超过ä½å¤§å°" #: fortran/simplify.c:2309 #, no-c-format @@ -11137,9 +11137,9 @@ msgid "Argument of SQRT at %L has a negative value" msgstr "%L处 SQRT çš„å‚数为负" #: fortran/simplify.c:5623 -#, fuzzy, no-c-format +#, no-c-format msgid "Intrinsic TRANSFER at %L has partly undefined result: source size %ld < result size %ld" -msgstr "在 %L 处内在的 TRANSFER 有部分未定义的结果: æºå°ºå¯¸ %ld < 结果尺寸 %ld" +msgstr "%L处内建 TRANSFER 有部分未定义的结果:æºå°ºå¯¸ %ld < 结果尺寸 %ld" #: fortran/simplify.c:6078 #, no-c-format @@ -11180,9 +11180,9 @@ msgstr "%2$L处éšå¼å£°æ˜Žçš„ BIND(C) å˜é‡â€˜%1$s’ä¸èƒ½ä¸Ž C 互æ“作" #. Dummy args to a BIND(C) routine may not be interoperable if #. they are implicitly typed. #: fortran/symbol.c:292 -#, fuzzy, no-c-format +#, no-c-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 "%2$L 处éšå¼å£°æ˜Žçš„å˜é‡â€œ%1$sâ€ä¸èƒ½ä¸Ž C 互æ“作,但它对 %4$L 处的 BIND(C) 过程“%3$sâ€æ˜¯ä¸ªå“‘å‚æ•°" +msgstr "%2$L处éšå¼å£°æ˜Žçš„å˜é‡â€˜%1$s’ä¸èƒ½ä¸Ž C 互æ“作,但它是%4$L处的 BIND(C) 过程‘%3$s’的虚å‚" #: fortran/symbol.c:333 #, no-c-format @@ -11245,19 +11245,19 @@ msgid "Duplicate %s attribute specified at %L" msgstr "é‡å¤çš„ %s 属性在%L处被指定" #: fortran/symbol.c:847 -#, fuzzy, no-c-format +#, no-c-format msgid "ALLOCATABLE specified outside of INTERFACE body at %L" -msgstr "规定的 ALLOCATABLE 在 INTERFACE 主体外é¢(在 %L 上)" +msgstr "%L 处 ALLOCATABLE 指定在 INTERFACE 体之外" #: fortran/symbol.c:873 -#, fuzzy, no-c-format +#, no-c-format msgid "DIMENSION specified for '%s' outside its INTERFACE body at %L" -msgstr "为“%sâ€è§„定的 DIMENSION 在 %L 处它的 INTERFACE 主体外é¢" +msgstr "%2$L处为‘%1$s’的 DIMENSION 指定在其 INTERFACE 体之外" #: fortran/symbol.c:991 -#, fuzzy, no-c-format +#, no-c-format msgid "Cray Pointee at %L appears in multiple pointer() statements" -msgstr "在 %L 处的Cray Pointee 出现在多个 pointer() è¯å¥ä¸" +msgstr "%L处 Cray 指针指å‘的对象出现在多个 pointer() è¯å¥ä¸" #: fortran/symbol.c:1010 #, no-c-format @@ -11290,9 +11290,9 @@ msgid "%s attribute of '%s' conflicts with %s attribute at %L" msgstr "‘%2$s’的 %1$s 属性与%4$L处的 %3$s 属性冲çª" #: fortran/symbol.c:1417 -#, fuzzy, no-c-format +#, no-c-format msgid "%s procedure at %L is already declared as %s procedure" -msgstr "%2$L 处的 %1$s 过程已ç»è¢«å£°æ˜Žä¸º %3$s 过程" +msgstr "%2$L处的 %1$s 过程已ç»è¢«å£°æ˜Žä¸º %3$s 过程" #: fortran/symbol.c:1452 #, no-c-format @@ -11315,9 +11315,9 @@ msgid "Fortran 2003: BIND(C) at %L" msgstr "Fortran 2003:%L处的 BIND(C)" #: fortran/symbol.c:1517 -#, fuzzy, no-c-format +#, no-c-format msgid "Duplicate EXTENDS attribute specified at %L" -msgstr "%L 处指定了é‡å¤çš„ EXTENDS 属性" +msgstr "%L处指定了é‡å¤çš„ EXTENDS 属性" #: fortran/symbol.c:1521 #, no-c-format @@ -11330,9 +11330,9 @@ msgid "Symbol '%s' at %L already has an explicit interface" msgstr "符å·â€˜%s’在%L处已ç»æœ‰äº†æ˜¾å¼æŽ¥å£" #: fortran/symbol.c:1550 -#, fuzzy, no-c-format +#, no-c-format msgid "'%s' at %L has attributes specified outside its INTERFACE body" -msgstr "在 %L 处的“%sâ€æœ‰åœ¨å®ƒçš„ INTERFACE 主体外é¢è§„定的属性" +msgstr "%2$L处的‘%1$s’有在其 INTERFACE 体外指定的属性" #: fortran/symbol.c:1583 #, no-c-format @@ -11410,25 +11410,25 @@ msgid "Label %d at %C previously used as branch target" msgstr "%2$Cå¤„çš„æ ‡å· %1$d å…ˆå‰ç”¨ä½œåˆ†æ”¯ç›®æ ‡" #: fortran/symbol.c:2463 -#, fuzzy, no-c-format +#, no-c-format msgid "Name '%s' at %C is an ambiguous reference to '%s' from module '%s'" -msgstr "在 %2$C 处的åå—“%1$sâ€æ˜¯ä¸ªä»Žæ¨¡å—“%4$sâ€å¯¹â€œ%3$sâ€äºŒä¹‰æ€§çš„引用" +msgstr "%2$C处的åå—‘%1$s’是从模å—‘%4$s’对‘%3$s’有æ§ä¹‰çš„引用" #: fortran/symbol.c:2466 -#, fuzzy, no-c-format +#, no-c-format msgid "Name '%s' at %C is an ambiguous reference to '%s' from current program unit" -msgstr "在 %C 处åå—“%sâ€æ˜¯ä»Žå½“å‰çš„程åºå•å…ƒå¯¹â€œ%sâ€çš„二义性的引用" +msgstr "%2$C处的åå—‘%1$s’是从当å‰ç¨‹åºå•å…ƒå¯¹â€˜%3$s’有æ§ä¹‰çš„引用" #. Symbol is from another namespace. #: fortran/symbol.c:2625 -#, fuzzy, no-c-format +#, no-c-format msgid "Symbol '%s' at %C has already been host associated" -msgstr "在 %C 处符å·â€œ%sâ€å·²ç»ä¸Žä¸»æœºç›¸å…³è”" +msgstr "%2$C处符å·â€˜%1$s’已ç»ä¸Žä¸»æœºç›¸å…³è”" #: fortran/symbol.c:3459 -#, fuzzy, no-c-format +#, no-c-format msgid "Derived type '%s' declared at %L must have the BIND attribute to be C interoperable" -msgstr "%2$L 处的派生类型“%1$sâ€å¿…须使 BIND 属性为å¯ä¸Ž C 互æ“作" +msgstr "%2$L处声明的派生类型‘%1$s’必须使用 BIND 属性方å¯ä¸Ž C 互æ“作" #: fortran/symbol.c:3470 #, no-c-format @@ -11436,9 +11436,9 @@ msgid "Derived type '%s' at %L is empty" msgstr "派生类型‘%s’在%L处是空的" #: fortran/symbol.c:3487 -#, fuzzy, no-c-format +#, no-c-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 "%2$L 处的组件“%1$sâ€ä¸èƒ½æœ‰ POINTER å±žæ€§ï¼Œå› ä¸ºå®ƒæ˜¯ %4$L 处派生类型 BIND(C)“%3$sâ€çš„æˆå‘˜" +msgstr "%2$L处的组件‘%1$s’ä¸èƒ½æœ‰ POINTER å±žæ€§ï¼Œå› ä¸ºå®ƒæ˜¯%4$L处派生类型 BIND(C)‘%3$s’的æˆå‘˜" #: fortran/symbol.c:3497 #, no-c-format @@ -11446,34 +11446,34 @@ msgid "Procedure pointer component '%s' at %L cannot be a member of the BIND(C) msgstr "%2$L 处的过程指针组件‘%1$s’ä¸èƒ½æ˜¯%4$L处 BIND(C) 派生类型‘%3$s’的æˆå‘˜" #: fortran/symbol.c:3508 -#, fuzzy, no-c-format +#, no-c-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 "%2$L 处的组件“%1$sâ€ä¸èƒ½æœ‰ ALLOCATABLE å±žæ€§ï¼Œå› ä¸ºå®ƒæ˜¯ %4$L 处派生类型 BIND(C)“%3$sâ€çš„æˆå‘˜" +msgstr "%2$L处的组件‘%1$s’ä¸èƒ½æœ‰ ALLOCATABLE å±žæ€§ï¼Œå› ä¸ºå®ƒæ˜¯%4$L处派生类型 BIND(C)‘%3$s’的æˆå‘˜" #. If the derived type is bind(c), all fields must be #. interop. #: fortran/symbol.c:3546 -#, fuzzy, no-c-format +#, no-c-format msgid "Component '%s' in derived type '%s' at %L may not be C interoperable, even though derived type '%s' is BIND(C)" -msgstr "%3$L 处的派生类型“%2$sâ€ç»„件“%1$sâ€ä¸å¯èƒ½æ˜¯ C 互æ“作的,å³ä½¿æ´¾ç”Ÿç±»åž‹â€œ%3$sâ€æ˜¯ BIND(C)" +msgstr "%3$L处的派生类型‘%2$s’的组件‘%1$s’ä¸èƒ½ä¸Ž C 互æ“作,å³ä½¿æ´¾ç”Ÿç±»åž‹â€˜%4$s’是 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 #. all fields must interop too. #: fortran/symbol.c:3555 -#, fuzzy, no-c-format +#, no-c-format msgid "Component '%s' in derived type '%s' at %L may not be C interoperable" -msgstr "%2$L 派生类型“%2$sâ€ä¸çš„组件“%1$sâ€ä¸èƒ½ä¸Ž C 互æ“作" +msgstr "%3$L处派生类型‘%2$s’ä¸çš„组件‘%1$s’ä¸èƒ½ä¸Ž C 互æ“作" #: fortran/symbol.c:3569 -#, fuzzy, no-c-format +#, no-c-format msgid "Derived type '%s' at %L cannot be declared with both PRIVATE and BIND(C) attributes" -msgstr "%2$L 处的派生类型“%1$sâ€ä¸èƒ½ç”¨ PRIVATE å’Œ BIND(C) 属性æ¥å£°æ˜Ž" +msgstr "%2$L处派生类型‘%1$s’ä¸èƒ½åŒæ—¶è¢«å£°æ˜Žä¸ºå…·æœ‰ PRIVATE å’Œ BIND(C)属性" #: fortran/symbol.c:3577 -#, fuzzy, no-c-format +#, no-c-format msgid "Derived type '%s' at %L cannot have the SEQUENCE attribute because it is BIND(C)" -msgstr "%2$L 处派生类型“%1$sâ€ä¸èƒ½æœ‰ SEQUENCE å±žæ€§ï¼Œå› ä¸ºå®ƒæ˜¯ BIND(C)" +msgstr "%2$L处派生类型‘%1$s’ä¸èƒ½æœ‰ SEQUENCE å±žæ€§ï¼Œå› ä¸ºå®ƒæ˜¯ BIND(C)" #: fortran/symbol.c:4507 #, no-c-format @@ -11491,9 +11491,9 @@ msgid "'%s' of '%s' is PRIVATE at %L" msgstr "‘%2$s’的‘%1$s’在%3$L处是 PRIVATE" #: fortran/target-memory.c:659 -#, fuzzy, no-c-format +#, no-c-format msgid "Overlapping unequal initializers in EQUIVALENCE at %L" -msgstr "在 %L 处 EQUIVALENCEä¸é‡è¿ä¸ç‰çš„åˆå§‹åŒ–器" +msgstr "%L 处 EQUIVALENCE ä¸ä¸ç‰çš„åˆå§‹å€¼è®¾å®šé‡å " #: fortran/target-memory.c:746 #, no-c-format @@ -11509,9 +11509,9 @@ msgstr "在%L处建立临时数组" #. Problems occur when we get something like #. integer :: a(lots) = (/(i, i=1, lots)/) #: fortran/trans-array.c:4112 -#, fuzzy, no-c-format +#, no-c-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 "在 %L å¤„æ•°ç»„æž„é€ æˆå‘˜ä¸çš„å…ƒç´ æ•°éœ€è¦ä¸€ä¸ªå®¹è®¸ %d 上é™çš„å¢žåŠ ã€‚ è§ -fmax-array-constructor 选项" +msgstr "%Lå¤„æ•°ç»„æž„é€ å‡½æ•°ä¸çš„å…ƒç´ æ•°è¶…è¿‡å®¹è®¸çš„ä¸Šé™ %d。请å‚è§ -fmax-array-constructor 选项" #: fortran/trans-array.c:5577 #, no-c-format @@ -11519,9 +11519,9 @@ msgid "Creating array temporary at %L for argument '%s'" msgstr "%L处为å˜é‡â€˜%s’建立临时数组" #: fortran/trans-common.c:400 -#, fuzzy, no-c-format +#, no-c-format msgid "Named COMMON block '%s' at %L shall be of the same size" -msgstr "%2$L 处的 COMMON å—“%1$sâ€åº”该是åŒæ ·çš„大å°" +msgstr "%2$L处的 COMMON å—‘%1$s’应该有åŒæ ·çš„大å°" #: fortran/trans-common.c:839 #, no-c-format @@ -11529,40 +11529,40 @@ msgid "Bad array reference at %L" msgstr "%L处数组引用错误" #: fortran/trans-common.c:847 -#, fuzzy, no-c-format +#, no-c-format msgid "Illegal reference type at %L as EQUIVALENCE object" -msgstr "在 %L 处的éžæ³•å¼•ç”¨ç±»åž‹ä½œä¸º EQUIVALENCE 对象" +msgstr "%L处的éžæ³•å¼•ç”¨ç±»åž‹ä½œä¸º EQUIVALENCE 对象" #: fortran/trans-common.c:887 -#, fuzzy, no-c-format +#, no-c-format msgid "Inconsistent equivalence rules involving '%s' at %L and '%s' at %L" -msgstr "ä¸ä¸€è‡´çš„ç‰ä»·è§„åˆ™æ¶‰åŠ %2$L 处的“%1$sâ€å’Œ %4$L 处的“%3$sâ€" +msgstr "涉åŠ%2$L处的‘%1$s’和%4$L处的‘%3$s’的ç‰ä»·è§„则ä¸ä¸€è‡´" #. Aligning this field would misalign a previous field. #: fortran/trans-common.c:1020 -#, fuzzy, no-c-format +#, no-c-format msgid "The equivalence set for variable '%s' declared at %L violates alignment requirements" -msgstr "对于在 %L 处声明的å˜é‡â€œ%sâ€ç‰ä»·è®¾ç½®ç ´å对准需求" +msgstr "%2$L处声明的å˜é‡â€˜%1$s’的ç‰ä»·è®¾ç½®è¿å了对é½éœ€æ±‚" #: fortran/trans-common.c:1087 -#, fuzzy, no-c-format +#, no-c-format msgid "Equivalence for '%s' does not match ordering of COMMON '%s' at %L" -msgstr "“%1$sâ€çš„ç‰ä»·ä¸åŒ¹é…在 %3$L 处 COMMON 的“%2$sâ€çš„次åº" +msgstr "%3$L处‘%1$s’的ç‰ä»·è®¾ç½®ä¸åŒ¹é… COMMON ‘%2$s’的次åº" #: fortran/trans-common.c:1102 -#, fuzzy, no-c-format +#, no-c-format msgid "The equivalence set for '%s' cause an invalid extension to COMMON '%s' at %L" -msgstr "对“%1$sâ€ç‰ä»·è®¾ç½®å¼•èµ·ä¸€ä¸ªå¯¹åœ¨ %3$L 处 COMMON“%2$sâ€çš„æ— æ•ˆçš„æ‰©å±• " +msgstr "%3$L处‘%1$s’的ç‰ä»·è®¾ç½®é€ æˆäº† COMMON‘%2$sâ€™çš„ä¸€ä¸ªæ— æ•ˆçš„æ‰©å±•" #: fortran/trans-common.c:1117 -#, fuzzy, no-c-format +#, no-c-format msgid "Padding of %d bytes required before '%s' in COMMON '%s' at %L; reorder elements or use -fno-align-commons" -msgstr "需è¦åœ¨ %4$L 处 COMMON“%3$sâ€ä¸çš„“%2$sâ€ä»¥å‰å¡«å…… %1$d å—节;é‡æŽ’åºå…ƒç´ 或使用 -fno-align-commons" +msgstr "%4$L处 COMMON‘%3$s’ä¸â€˜%2$s’之å‰éœ€è¦å¡«å…… %1$d å—节; é‡æŽ’åºå…ƒç´ 或使用 -fno-align-commons" #: fortran/trans-common.c:1122 -#, fuzzy, no-c-format +#, no-c-format msgid "Padding of %d bytes required before '%s' in COMMON at %L; reorder elements or use -fno-align-commons" -msgstr "在 %L 处 COMMON ä¸â€œ%sâ€å¤„以å‰éœ€è¦å¡«å…… %d å—节; é‡æŽ’åºå…ƒç´ 或使用 -fno-align-commons" +msgstr "%3$L处 COMMON ä¸â€˜%2$s’之å‰éœ€è¦å¡«å…… %1$d å—节; é‡æŽ’åºå…ƒç´ 或使用 -fno-align-commons" #: fortran/trans-common.c:1145 #, no-c-format @@ -11570,19 +11570,19 @@ msgid "COMMON '%s' at %L does not exist" msgstr "%2$L处的 COMMON‘%1$s’并ä¸å˜åœ¨" #: fortran/trans-common.c:1153 -#, fuzzy, no-c-format +#, no-c-format msgid "COMMON '%s' at %L requires %d bytes of padding at start; reorder elements or use -fno-align-commons" -msgstr "在 %L 处的 COMMON“%sâ€éœ€è¦ %d å—节填充在开始处;é‡æŽ’åºå…ƒç´ 或使用 -fno-align-commons" +msgstr "%2$L处的 COMMON‘%1$sâ€™éœ€è¦ %3$d å—节填充在开始处;é‡æŽ’åºå…ƒç´ 或使用 -fno-align-commons" #: fortran/trans-common.c:1157 -#, fuzzy, no-c-format +#, no-c-format msgid "COMMON at %L requires %d bytes of padding at start; reorder elements or use -fno-align-commons" -msgstr "在 %L 处的 COMMON éœ€è¦ %d å—节填充在开始处;é‡æŽ’åºå…ƒç´ 或使用 -fno-align-commons" +msgstr "%L处的 COMMON éœ€è¦ %d å—节填充在开始处;é‡æŽ’åºå…ƒç´ 或使用 -fno-align-commons" #: fortran/trans-const.c:294 -#, fuzzy, no-c-format +#, no-c-format msgid "Assigning value other than 0 or 1 to LOGICAL has undefined result at %L" -msgstr "在 %L 处对 LOGICAL 赋 0 或 1 外显的值有未定义的结果" +msgstr "%Lå¤„å‘ LOGICAL 赋 0 或 1 以外的值有未定义的结果" #: fortran/trans-const.c:358 #, no-c-format @@ -11597,12 +11597,12 @@ msgstr "%2$L处函数‘%1$s’的返回值没有设置" #: fortran/trans-decl.c:3782 #, no-c-format msgid "Dummy argument '%s' at %L was declared INTENT(OUT) but was not set" -msgstr "%2$L处的哑元å‚数‘%1$s’被声明为 INTENT(OUT),但没有设置" +msgstr "%2$L处的虚å‚‘%1$s’被声明为 INTENT(OUT),但没有设置" #: fortran/trans-decl.c:3787 #, no-c-format msgid "Unused dummy argument '%s' at %L" -msgstr "%2$L处声明了未使用的哑元实å‚‘%1$s’" +msgstr "%2$L处声明了未使用的虚å‚‘%1$s’" #: fortran/trans-decl.c:3793 #, no-c-format @@ -11622,12 +11622,12 @@ msgstr "%3$L处声明的的函数‘%2$s’的返回值‘%1$s’没有设置" #: fortran/trans-decl.c:3963 #, c-format msgid "Actual string length does not match the declared one for dummy argument '%s' (%ld/%ld)" -msgstr "å—符串的实际长度ä¸åŒ¹é…其哑元实å‚声明‘%s’(%ld/%ld)" +msgstr "å—符串的实际长度ä¸åŒ¹é…其虚å‚声明‘%s’(%ld/%ld)" #: fortran/trans-decl.c:3971 #, c-format msgid "Actual string length is shorter than the declared one for dummy argument '%s' (%ld/%ld)" -msgstr "å—符串的实际长度çŸäºŽå…¶å“‘元实å‚声明‘%s’(%ld/%ld)" +msgstr "å—符串的实际长度çŸäºŽå…¶è™šå‚声明‘%s’(%ld/%ld)" #: fortran/trans-expr.c:1616 msgid "internal error: bad hash value in dynamic dispatch" @@ -11651,7 +11651,7 @@ msgstr "%2$L处派生类型‘%1$s’有ç§æœ‰ç»„件" #: fortran/trans-stmt.c:484 #, no-c-format msgid "An alternate return at %L without a * dummy argument" -msgstr "%L ä¸å¸¦ * 哑实å‚的替代返回" +msgstr "%L ä¸å¸¦ * 虚å‚的替代返回" #: fortran/trans.c:50 msgid "Array bound mismatch" @@ -12162,7 +12162,7 @@ msgstr "å°† MODULE 文件放入‘directory’" #: fortran/lang.opt:73 msgid "Warn about possible aliasing of dummy arguments" -msgstr "为å¯èƒ½çš„å“‘å…ƒé‡å 给出è¦å‘Š" +msgstr "为å¯èƒ½çš„虚å‚é‡å 给出è¦å‘Š" #: fortran/lang.opt:77 msgid "Warn about alignment of COMMON blocks" @@ -12225,9 +12225,8 @@ msgid "All intrinsics procedures are available regardless of selected standard" msgstr "æ— è®ºé€‰æ‹©ä½•ç§æ ‡å‡†ï¼Œæ‰€æœ‰å†…建过程å‡å¯ç”¨" #: fortran/lang.opt:153 -#, fuzzy msgid "Do not treat local variables and COMMON blocks as if they were named in SAVE statements" -msgstr "ä¸æŠŠå±€éƒ¨å˜é‡ å’Œ COMMON å—如它们在 SAVE è¯å¥ä¸å‘½åçš„é‚£æ ·æ¥å¤„ç†" +msgstr "ä¸æŠŠå±€éƒ¨å˜é‡ å’Œ COMMON å—如它们在 SAVE è¯å¥ä¸è¢«å‘½åé‚£æ ·æ¥å¤„ç†" #: fortran/lang.opt:157 msgid "Specify that backslash in string introduces an escape character" @@ -12242,9 +12241,8 @@ msgid "-fblas-matmul-limit=<n> Size of the smallest matrix for which matm msgstr "-fblas-matmul-limit=<n> 使用 BLAS 进行矩阵乘法的矩阵大å°ä¸‹é™" #: fortran/lang.opt:169 -#, fuzzy msgid "Produce a warning at runtime if a array temporary has been created for a procedure argument" -msgstr "在è¿è¡Œæ—¶é—´æ—¶åˆ»ä¸Šå¦‚果临时为一个过程å‚数创建一个数组产生一个è¦å‘Š" +msgstr "对为过程实å‚而临时创建的数组产生一个è¿è¡Œæ—¶è¦å‘Š" #: fortran/lang.opt:173 msgid "Use big-endian format for unformatted files" @@ -12408,7 +12406,7 @@ msgstr "åœ¨å †æ ˆä¸Šåˆ†é…局部å˜é‡ä»¥å…许间接递归" #: fortran/lang.opt:341 msgid "Copy array sections into a contiguous block on procedure entry" -msgstr "在过程入å£å¤„将数组节å¤åˆ¶åˆ°ä¸€ä¸ªè¿žç»çš„å—ä¸" +msgstr "在过程入å£å¤„将数组段å¤åˆ¶åˆ°ä¸€ä¸ªè¿žç»çš„å—ä¸" #: fortran/lang.opt:345 msgid "Specify which runtime checks are to be performed" @@ -13442,7 +13440,7 @@ msgstr "å‡å®šæ ˆå¯¹é½åˆ° 2 çš„æ¤æ¬¡æ–¹ä¸Š" #: config/i386/i386.opt:185 msgid "Use push instructions to save outgoing arguments" -msgstr "使用 push 指令ä¿å˜å‚æ•°" +msgstr "使用 push 指令ä¿å˜è¾“出å‚æ•°" #: config/i386/i386.opt:189 msgid "Use red-zone in the x86-64 code" @@ -13886,18 +13884,16 @@ msgid "Determine which dependences between insns are considered costly" msgstr "指定指令间的哪些ä¾èµ–关系将被认为是有开销的" #: config/rs6000/rs6000.opt:310 -#, fuzzy msgid "Specify which post scheduling nop insertion scheme to apply" -msgstr "指定应用的事åŽè°ƒåº¦ nop æ’入计划" +msgstr "指定è¦åº”ç”¨çš„è°ƒåº¦åŽ NOP æ’入机制" #: config/rs6000/rs6000.opt:314 msgid "Specify alignment of structure fields default/natural" msgstr "指定结构å—段默认或自然的对é½" #: config/rs6000/rs6000.opt:318 -#, fuzzy msgid "Specify scheduling priority for dispatch slot restricted insns" -msgstr "为é™åˆ¶ insns çš„è°ƒé£æ§½æŒ‡å®šè°ƒåº¦ä¼˜å…ˆçº§æ•°" +msgstr "指定分é…槽å—é™çš„指令的调度优先级" #: config/rs6000/rs6000.opt:322 msgid "Single-precision floating point unit" @@ -14670,9 +14666,8 @@ msgid "Relax branches" msgstr "放宽跳转" #: config/avr/avr.opt:60 -#, fuzzy msgid "Make the linker relaxation machine assume that a program counter wrap-around occures." -msgstr "链接器æ¾é©°æœºå™¨å‡å®šä¸€ä¸ªç¨‹åºè®¡æ•°å™¨çŽ¯ç»•å‘生 。" +msgstr "使链接器æ¾é©°æœºå‡å®šä¼šå‘生程åºè®¡æ•°å™¨çŽ¯ç»•" #: config/crx/crx.opt:23 msgid "Support multiply accumulate instructions" @@ -16105,7 +16100,7 @@ msgstr "é‡è½½è™šå‡½æ•°å时给出è¦å‘Š" #: c.opt:377 msgid "Warn about overriding initializers without side effects" -msgstr "è¦†ç›–æ— å‰¯ä½œç”¨çš„åˆå§‹åŒ–设定时给出è¦å‘Š" +msgstr "è¦†ç›–æ— å‰¯ä½œç”¨çš„åˆå§‹å€¼è®¾å®šæ—¶ç»™å‡ºè¦å‘Š" #: c.opt:381 msgid "Warn about packed bit-fields whose offset changed in GCC 4.4" @@ -17006,9 +17001,8 @@ msgid "Delete useless null pointer checks" msgstr "åˆ é™¤æ— ç”¨çš„ç©ºæŒ‡é’ˆæ£€æŸ¥" #: common.opt:451 -#, fuzzy msgid "How often to emit source location at the beginning of line-wrapped diagnostics" -msgstr "于折行诊æ–起点å‘表æºä½ç½®ç¨‹åº¦" +msgstr "指定在自动æ¢è¡Œçš„诊æ–ä¿¡æ¯å¼€å§‹ç»™å‡ºæºä½ç½®çš„频率" #: common.opt:455 msgid "Amend appropriate diagnostic messages with the command line option that controls them" @@ -17031,9 +17025,8 @@ msgid "Suppress output of instruction numbers, line number notes and addresses i msgstr "在调试转储ä¸ä¸è¾“出指令数ã€è¡Œå·æ ‡è®°å’Œåœ°å€" #: common.opt:475 -#, fuzzy msgid "Suppress output of previous and next insn numbers in debugging dumps" -msgstr "在调试转储ä¸ä¸è¾“出地å€" +msgstr "在调试转储ä¸ä¸è¾“出å‰ä¸€æ¡å’ŒåŽä¸€æ¡æŒ‡ä»¤å·ç " #: common.opt:479 msgid "Enable CFI tables via GAS assembler directives." @@ -17440,9 +17433,8 @@ msgid "Set the top-level directory for storing the profile data." msgstr "指定å˜å‚¨çš„å–æ ·æ•°æ®çš„顶级目录" #: common.opt:932 -#, fuzzy msgid "Enable correction of flow inconsistent profile data input" -msgstr "å¯ç”¨æµä¸ä¸€è‡´ç‰¹å¾æ•°æ®è¾“入修æ£" +msgstr "å¯ç”¨å¯¹æµä¸ä¸€è‡´å–æ ·æ•°æ®è¾“入的修æ£" #: common.opt:936 msgid "Enable common options for generating profile info for profile feedback directed optimizations" @@ -19267,12 +19259,12 @@ msgstr "与%q+D类型冲çª" #: c-decl.c:1759 #, gcc-internal-format msgid "conflicting named address spaces (generic vs %s) for %q+D" -msgstr "为%2$q+D指定了冲çªçš„有å寻å€ç©ºé—´(普通和 %1$s)" +msgstr "为%2$q+D指定了冲çªçš„有å寻å€ç©ºé—´(泛型和 %1$s)" #: c-decl.c:1763 #, gcc-internal-format msgid "conflicting named address spaces (%s vs generic) for %q+D" -msgstr "为%2$q+D指定了冲çªçš„有å寻å€ç©ºé—´(%1$s 和普通)" +msgstr "为%2$q+D指定了冲çªçš„有å寻å€ç©ºé—´(%1$s 和泛型)" #: c-decl.c:1767 #, gcc-internal-format @@ -23178,9 +23170,9 @@ msgid "edge from %d to %d should not be marked irreducible" msgstr "从 %d 到 %d çš„è¾¹ä¸åº”è¢«æ ‡è®°ä¸ºä¸å¯å½’约的" #: cfgloop.c:1473 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "corrupted head of the exits list of loop %d" -msgstr "循环 %dçš„é€€å‡ºåˆ—è¡¨å¤´éƒ¨è¢«ç ´å" +msgstr "循环 %d 的退出列表头已æŸå" #: cfgloop.c:1491 #, gcc-internal-format @@ -23188,9 +23180,9 @@ msgid "corrupted exits list of loop %d" msgstr "循环 %d 的出å£åˆ—表已æŸå" #: cfgloop.c:1500 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "nonempty exits list of loop %d, but exits are not recorded" -msgstr "循环 %déžç©ºé€€å‡ºåˆ—表,但是退出未被记录" +msgstr "循环 %d 退出列表éžç©ºï¼Œä½†æ˜¯é€€å‡ºæœªè¢«è®°å½•" #: cfgloop.c:1526 #, gcc-internal-format @@ -23198,9 +23190,9 @@ msgid "Exit %d->%d not recorded" msgstr "退出 %d->%d 未被记录" #: cfgloop.c:1544 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "Wrong list of exited loops for edge %d->%d" -msgstr " 边缘 %d->%d 的错误退出的循环列表" +msgstr "è¾¹ %d->%d 已退出的循环列表错误" #: cfgloop.c:1553 #, gcc-internal-format @@ -23208,9 +23200,9 @@ msgid "Too many loop exits recorded" msgstr "记录了太多的循环出å£" #: cfgloop.c:1564 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%d exits recorded for loop %d (having %d exits)" -msgstr "%1$d 为循环 %2$d 记录的退出(有 %3$d 的退出)" +msgstr "循环 %2$d 记录了 %1$d 个退出(有 %3$d 个退出)" #: cfgrtl.c:1817 #, gcc-internal-format @@ -23218,19 +23210,19 @@ msgid "BB_RTL flag not set for block %d" msgstr "å— %d 没有设置 BB_RTL æ ‡å¿—" #: cfgrtl.c:1824 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "insn %d basic block pointer is %d, should be %d" -msgstr "insn %d 基本å—指针是 %d,应该是 %d" +msgstr "指令 %d 基本å—指针是 %d,应该是 %d" #: cfgrtl.c:1835 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "insn %d in header of bb %d has non-NULL basic block" -msgstr "bb %2$d 的头部指令 %1$d 有éžé›¶çš„基本å—" +msgstr "åŸºæœ¬å— %2$d 头ä¸çš„指令 %1$d 有éžç©ºçš„基本å—" #: cfgrtl.c:1843 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "insn %d in footer of bb %d has non-NULL basic block" -msgstr "bb %2$d 的脚部指令 %1$d 有éžé›¶çš„基本å—" +msgstr "åŸºæœ¬å— %2$d å°¾ä¸çš„指令 %1$d 有éžç©ºçš„基本å—" #: cfgrtl.c:1865 #, gcc-internal-format @@ -23238,14 +23230,14 @@ msgid "verify_flow_info: REG_BR_PROB does not match cfg %wi %i" msgstr "verify_flow_info:REG_BR_PROB ä¸åŒ¹é… cfg %wi %i" #: cfgrtl.c:1880 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "fallthru edge crosses section boundary (bb %i)" -msgstr "fallthru 边缘交å‰èŠ‚分界线(bb %i)" +msgstr "直通边越过了节分界(åŸºæœ¬å— %i)" #: cfgrtl.c:1904 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "missing REG_EH_REGION note in the end of bb %i" -msgstr "åœ¨ç»“æŸ bb %i 处丢失 REG_EH_REGION 注æ„" +msgstr "åŸºæœ¬å— %i 结尾缺少 REG_EH_REGION 记录" #: cfgrtl.c:1909 #, gcc-internal-format @@ -23283,9 +23275,9 @@ msgid "abnormal edges for no purpose in bb %i" msgstr "åœ¨åŸºæœ¬å— %i ä¸æ— 用途的å常边" #: cfgrtl.c:1961 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "insn %d inside basic block %d but block_for_insn is NULL" -msgstr "指令 %d åœ¨åŸºæœ¬å— %d 内,但 block_for_insn å´ä¸º NULL" +msgstr "指令 %d åœ¨åŸºæœ¬å— %d 内,但 block_for_insn 为 NULL" #: cfgrtl.c:1965 #, gcc-internal-format @@ -23313,9 +23305,9 @@ msgid "insn %d outside of basic blocks has non-NULL bb field" msgstr "基本å—外指令 %d æœ‰éž NULL çš„ bb 域" #: cfgrtl.c:2073 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "end insn %d for block %d not found in the insn stream" -msgstr "ç»“æŸ insn %d äºŽå— %d 在 insn æµä¸æ‰¾ä¸åˆ°" +msgstr "å— %2$d 的结æŸæŒ‡ä»¤ %1$d 在指令æµä¸æ‰¾ä¸åˆ°" #: cfgrtl.c:2086 #, gcc-internal-format @@ -23323,9 +23315,9 @@ msgid "insn %d is in multiple basic blocks (%d and %d)" msgstr "指令 %d 在多个基本å—内(%d å’Œ %d)" #: cfgrtl.c:2098 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "head insn %d for block %d not found in the insn stream" -msgstr "头部 insn %d å¯¹äºŽå— %d 在 insn æµä¸æ‰¾ä¸åˆ°" +msgstr "å— %2$d 的头指令 %1$d 在指令æµä¸æ‰¾ä¸åˆ°" #: cfgrtl.c:2117 #, gcc-internal-format @@ -23333,9 +23325,9 @@ msgid "missing barrier after block %i" msgstr "å— %i åŽç¼ºå°‘å±éšœ" #: cfgrtl.c:2133 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" -msgstr "verify_flow_info:ä¸æ£ç¡®çš„å—直通 %i->%i" +msgstr "verify_flow_info:直通边 %i->%i å—ä¸æ£ç¡®" #: cfgrtl.c:2142 #, gcc-internal-format @@ -23348,9 +23340,9 @@ msgid "basic blocks not laid down consecutively" msgstr "基本å—ä¸è¿žè´¯" #: cfgrtl.c:2212 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" -msgstr "在 insn 链 (%d) != n_basic_blocks (%d)ä¸çš„ bb 注æ„æ•°" +msgstr "指令链ä¸è®°å½•çš„基本å—æ•° (%d) != n_basic_blocks (%d)" #: cgraph.c:1754 #, gcc-internal-format @@ -23473,9 +23465,9 @@ msgid "edge points to wrong declaration:" msgstr "边指å‘错误的声明:" #: cgraphunit.c:765 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "missing callgraph edge for call stmt:" -msgstr "丢失调用è¯å¥çš„ callgraph 的边缘" +msgstr "调用è¯å¥ç¼ºå°‘ callgraph 边:" #: cgraphunit.c:781 #, gcc-internal-format @@ -23498,7 +23490,7 @@ msgid "failed to reclaim unneeded function" msgstr "æ— æ³•æ”¶å›žä¸éœ€è¦çš„函数" #: cgraphunit.c:1855 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "nodes with unreleased memory found" msgstr "找到未释放内å˜çš„节点" @@ -23583,9 +23575,9 @@ msgid "%qs is version %q.*s, expected version %q.*s" msgstr "%qs的版本是%q.*s,需è¦çš„版本%q.*s" #: coverage.c:276 coverage.c:284 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "coverage mismatch for function %u while reading execution counters" -msgstr "读å–执行计数器时 %u 的函数覆盖ä¸åŒ¹é…" +msgstr "读å–执行计数器时函数 %u 覆盖ä¸åŒ¹é…" #: coverage.c:278 coverage.c:372 #, gcc-internal-format @@ -23658,9 +23650,9 @@ msgid " %s" msgstr " %s" #: dbxout.c:3258 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "common symbol debug info is not structured as symbol+offset" -msgstr "公用的符å·è°ƒè¯•ä¿¡æ¯ä¸æ˜¯æž„é€ ä¸ºç¬¦å·+å移的形å¼" +msgstr "公共符å·è°ƒè¯•ä¿¡æ¯æ²¡æœ‰æž„é€ ä¸ºç¬¦å·+å移的形å¼" #: diagnostic.c:728 #, gcc-internal-format @@ -24062,9 +24054,9 @@ msgid "can't seek PCH file: %m" msgstr "æ— æ³•åœ¨ PCH 文件ä¸å®šä½ï¼š%m" #: gimple.c:1032 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "gimple check: expected %s(%s), have %s(%s) in %s, at %s:%d" -msgstr "简å•æ£€æŸ¥ï¼šæœŸå¾…çš„ %s(%s),得到 %s(%s) 在 %s ä¸ï¼ŒäºŽ %s:%d" +msgstr "gimple æ£€æŸ¥ï¼šéœ€è¦ %s(%s),得到 %s(%s) 在 %s ä¸ï¼ŒäºŽ %s:%d" #: gimplify.c:2373 #, gcc-internal-format @@ -24238,9 +24230,9 @@ msgid "gimple bytecode streams do not support the target attribute" msgstr "gimple å—节ç æµä¸æ”¯æŒç›®æ ‡å±žæ€§" #: lto-streamer-out.c:1194 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "tree code %qs is not supported in gimple streams" -msgstr "32 ä½ç³»ç»Ÿä¸æ”¯æŒ -mcmodel=" +msgstr "æ ‘ä»£ç %qs在 gimple æµä¸ä¸è¢«æ”¯æŒ" #: lto-streamer-out.c:1238 #, gcc-internal-format @@ -24420,9 +24412,9 @@ msgid "-flto and -fwhopr are mutually exclusive" msgstr "-flto and -fwhopr 互斥" #: opts.c:1435 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unrecognized include_flags 0x%x passed to print_specific_help" -msgstr "ä¸å¯è¯†åˆ«çš„ include_flags 0x%x ä¼ é€’åˆ° print_specific_help" +msgstr "ä¼ é€’ç»™ print_specific_help çš„ include_flags 0x%x ä¸å¯è¯†åˆ«" #: opts.c:1773 #, gcc-internal-format @@ -24526,9 +24518,9 @@ msgid "invalid parameter %qs" msgstr "æ— æ•ˆçš„å‚æ•°%qs" #: passes.c:581 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "Invalid pass positioning operation" -msgstr "对%<__fpreg%>çš„æ“ä½œæ— æ•ˆ" +msgstr "æ— æ•ˆçš„è¶Ÿå®šä½æ“作" #: passes.c:621 #, gcc-internal-format @@ -24639,9 +24631,9 @@ msgid "correcting inconsistent profile data" msgstr "改æ£ä¸ä¸€è‡´çš„å–æ ·æ•°æ®" #: profile.c:640 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "corrupted profile info: profile data is not flow-consistent" -msgstr "æŸåçš„æ ·æœ¬ä¿¡æ¯ï¼šæ ·æœ¬æ•°æ®ä¸æ˜¯æµè¿žè´¯çš„" +msgstr "æŸåçš„æ ·æœ¬ä¿¡æ¯ï¼šæ ·æœ¬æ•°æ®ä¸æ˜¯æµä¸€è‡´çš„" #: profile.c:657 #, gcc-internal-format @@ -24786,19 +24778,19 @@ msgid "output operand is constant in %<asm%>" msgstr "%<asm%>的输出æ“作数是常é‡" #: rtl.c:635 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "RTL check: access of elt %d of '%s' with last elt %d in %s, at %s:%d" -msgstr "RTL 检查:在 %5$s:%6$d 处,%4$s ä¸ä¸Žæœ€åŽçš„ elt %3$d 一起的å‘é‡çš„“%2$sâ€çš„ elt %1$d访问" +msgstr "RTL 检查:在 %4$s ä¸è®¿é—®äº†â€˜%2$s’的 elt %1$d,最åŽçš„ elt %3$d,于 %5$s:%6$d" #: rtl.c:645 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" -msgstr "RTL 检查:期待的 elt %d 类型“%câ€ï¼Œå´æœ‰â€œ%câ€(rtx %s)在 %s ä¸ï¼ŒäºŽ %s:%d" +msgstr "RTL 检查:在 %5$s ä¸éœ€è¦ elt %1$d 类型‘%2$c’,得到了‘%3$c’(rtx %4$s),于 %6$s:%7$d" #: rtl.c:655 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" -msgstr "RTL 检查:期待的 elt %d 类型“%câ€æˆ–“%câ€ï¼Œå´æœ‰â€œ%câ€(rtx %s)在 %sä¸ï¼ŒäºŽ %s:%d" +msgstr "RTL 检查:在 %6$s ä¸éœ€è¦ elt %1$d 类型‘%2$c’或‘%3$c’,得到了‘%4$c’(rtx %5$s),于 %7$s:%8$d" #: rtl.c:664 #, gcc-internal-format @@ -24811,19 +24803,19 @@ msgid "RTL check: expected code '%s' or '%s', have '%s' in %s, at %s:%d" msgstr "RTL 检查:需è¦ä»£ç ‘%s’或‘%s’,å´å¾—到‘%s’在 %s,于 %s:%d" #: rtl.c:701 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "RTL check: attempt to treat non-block symbol as a block symbol in %s, at %s:%d" -msgstr "RTL 检查:在 %2$s:%3$d 处,试图把éžå—符å·å¤„ç†ä¸º %1$s ä¸çš„å—符å·" +msgstr "RTL 检查:在 %s ä¸è¯•å›¾å°†éžå—符å·å¤„ç†ä¸ºå—符å·ï¼ŒäºŽ %s:%d" #: rtl.c:711 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" -msgstr "RTL 检查:在 %4$s:%5$d 处,%4$s ä¸ä¸Žæœ€åŽçš„ elt %2$d 一起的å‘é‡çš„ elt %1$d 的访问" +msgstr "RTL 检查:在 %3$s ä¸è®¿é—®äº†å‘é‡ elt %1$d,最åŽçš„ elt %2$d,于 %4$s:%5$d" #: rtl.c:722 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "RTL flag check: %s used with unexpected rtx code '%s' in %s, at %s:%d" -msgstr "RTL 检查:“%3$sâ€ä¸ä¸ŽéžæœŸå¾… rtx 代ç “%2$sâ€ä¸€èµ·ä½¿ç”¨çš„“%1$sâ€ï¼ŒäºŽ %4$s:%5$d" +msgstr "RTL æ ‡è®°æ£€æŸ¥ï¼š%3$s ä¸ä¸Žéžé¢„期 rtx 代ç ‘%2$s’一起使用的 %1$s,于 %4$s:%5$d" #: stmt.c:312 #, gcc-internal-format @@ -25271,9 +25263,9 @@ msgid "ASSERT_EXPR with an always-false condition" msgstr "ASSERT_EXPR 具有一个总是å‡çš„æ¡ä»¶" #: tree-cfg.c:2559 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "MODIFY_EXPR not expected while having tuples." -msgstr "当有元组的时候ä¸æœŸæœ› MODIFY_EXPR。" +msgstr "当有元组的时候ä¸åº”有 MODIFY_EXPR。" #: tree-cfg.c:2580 #, gcc-internal-format @@ -25306,19 +25298,19 @@ msgid "invalid conditional operand" msgstr "æ— æ•ˆçš„æ¡ä»¶æ“作数" #: tree-cfg.c:2671 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid position or size operand to BIT_FIELD_REF" -msgstr "对 BIT_FIELD_REF çš„éžæ³•ä½ç½®æˆ–大å°æ“作数" +msgstr "BIT_FIELD_REF ä½ç½®æˆ–大å°æ“ä½œæ•°æ— æ•ˆ" #: tree-cfg.c:2678 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "integral result type precision does not match field size of BIT_FIELD_REF" -msgstr "整体的结果类型精度ä¸åŒ¹é… BIT_FIELD_REF å—段尺寸 " +msgstr "整体结果类型精度ä¸åŒ¹é… BIT_FIELD_REF å—段尺寸" #: tree-cfg.c:2686 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "mode precision of non-integral result does not match field size of BIT_FIELD_REF" -msgstr "éžæ•´ä½“结果ä¸åŒ¹é… BIT_FIELD_REF çš„å—段尺寸的方å¼ç²¾åº¦" +msgstr "éžæ•´ä½“结果的模å¼ç²¾åº¦ä¸åŒ¹é… BIT_FIELD_REF çš„å—段尺寸" #: tree-cfg.c:2697 #, gcc-internal-format @@ -25596,9 +25588,9 @@ msgid "statement marked for throw, but doesn%'t" msgstr "è¯å¥è¢«æ ‡è®°ä¸ºæŠ›å‡ºå¼‚常,但实际上并未抛出" #: tree-cfg.c:3943 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "statement marked for throw in middle of block" -msgstr "è¯å¥åœ¨å—çš„ä¸éƒ¨è¢«æ ‡è®°ä¸ºæŠ›å‡º" +msgstr "è¯å¥åœ¨å—ä¸è¢«æ ‡è®°ä¸ºæŠ›å‡º" #: tree-cfg.c:4015 #, gcc-internal-format @@ -25606,7 +25598,7 @@ msgid "Dead STMT in EH table" msgstr "在 EH 表ä¸æ»äº†çš„ STMT" #: tree-cfg.c:4053 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "gimple_bb (phi) is set to a wrong basic block" msgstr "gimple_bb (phi) 设置为一个错误的基本å—" @@ -25616,9 +25608,9 @@ msgid "missing PHI def" msgstr "缺少 PHI 定义" #: tree-cfg.c:4075 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "PHI argument is not a GIMPLE value" -msgstr "PHI å‚æ•°ä¸æ˜¯ GIMPLE å˜é‡å€¼" +msgstr "PHI å‚æ•°ä¸æ˜¯ GIMPLE å˜é‡" #: tree-cfg.c:4084 tree-cfg.c:4157 #, gcc-internal-format @@ -25631,7 +25623,7 @@ msgid "invalid GIMPLE statement" msgstr "æ— æ•ˆçš„ GIMPLE è¯å¥" #: tree-cfg.c:4116 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "gimple_bb (stmt) is set to a wrong basic block" msgstr "gimple_bb (stmt) 设置为一个错误的基本å—" @@ -25641,9 +25633,9 @@ msgid "incorrect entry in label_to_block_map" msgstr "label_to_block_map ä¸æ¡ç›®ä¸æ£ç¡®" #: tree-cfg.c:4139 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "incorrect setting of landing pad number" -msgstr "æ ¼å¼å—符串的æ“作数å·æ— 效" +msgstr "ç€é™†åœºå·ç 设置ä¸æ£ç¡®" #: tree-cfg.c:4173 #, gcc-internal-format @@ -25691,9 +25683,9 @@ msgid "true/false edge after a non-GIMPLE_COND in bb %d" msgstr "åŸºæœ¬å— %d ä¸éž GIMPLE_COND åŽçš„真å‡è¾¹" #: tree-cfg.c:4335 tree-cfg.c:4357 tree-cfg.c:4370 tree-cfg.c:4439 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "wrong outgoing edge flags at end of bb %d" -msgstr "于 bb %d结æŸå¤„é”™è¯¯çš„ç¦»åŽ»è¾¹ç¼˜æ ‡å¿— " +msgstr "åŸºæœ¬å— %d ç»“å°¾å¤„æœ‰é”™è¯¯çš„å‡ºè¾¹æ ‡è®°" #: tree-cfg.c:4345 #, gcc-internal-format @@ -25947,9 +25939,9 @@ msgid "found a real definition for a non-register" msgstr "为一个éžå¯„å˜å™¨æ‰¾åˆ°ä¸€ä¸ªçœŸå®žå®šä¹‰" #: tree-ssa.c:614 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "found a default name with a non-empty defining statement" -msgstr "找到一个éžç©ºå®šä¹‰è¯å¥çš„默认åå—" +msgstr "找到一个有éžç©ºå®šä¹‰è¯å¥çš„默认åå—" #: tree-ssa.c:642 #, gcc-internal-format @@ -28399,9 +28391,9 @@ msgid "Invalid mul type specified (%s) - expected mac, mul or none" msgstr "æŒ‡å®šäº†æ— æ•ˆçš„ mul 类型(%s) - éœ€è¦ macã€mul 或 none" #: config/picochip/picochip.c:638 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unexpected mode %s encountered in picochip_emit_save_register\n" -msgstr "在 picochip_emit_save_register ä¸é‡åˆ°æ„å¤–çš„æ–¹å¼ %s\n" +msgstr "picochip_emit_save_register é‡åˆ°éžé¢„æœŸçš„æ¨¡å¼ %s\n" #: config/picochip/picochip.c:805 #, gcc-internal-format @@ -30776,7 +30768,7 @@ msgstr "数组%q#Dçš„å…ƒç´ ç±»åž‹ä¸å®Œå…¨" #: cp/decl.c:4348 cp/decl.c:5588 #, gcc-internal-format msgid "declaration of %q#D has no initializer" -msgstr "%q#D声明有缺少åˆå§‹åŒ–设定" +msgstr "%q#D声明有缺少åˆå§‹å€¼è®¾å®š" #: cp/decl.c:4350 #, gcc-internal-format @@ -30854,12 +30846,12 @@ msgstr "未åˆå§‹åŒ–的常é‡%qD" #: cp/decl.c:4807 #, gcc-internal-format msgid "invalid type %qT as initializer for a vector of type %qT" -msgstr "æ— æ•ˆç±»åž‹%qT被用作类型为%qTçš„å‘é‡çš„åˆå§‹åŒ–设定" +msgstr "æ— æ•ˆç±»åž‹%qT被用作类型为%qTçš„å‘é‡çš„åˆå§‹å€¼è®¾å®š" #: cp/decl.c:4849 #, gcc-internal-format msgid "initializer for %qT must be brace-enclosed" -msgstr "%qTçš„åˆå§‹åŒ–设定必须在花括å·å†…" +msgstr "%qTçš„åˆå§‹å€¼è®¾å®šå¿…须在花括å·å†…" #: cp/decl.c:4867 #, gcc-internal-format @@ -32675,12 +32667,12 @@ msgstr "在æ¤å¤„åˆå§‹åŒ–åŽè¢«åˆå§‹åŒ–" #: cp/init.c:687 #, gcc-internal-format msgid "multiple initializations given for %qD" -msgstr "为%qD给定了多个åˆå§‹åŒ–设定" +msgstr "为%qD给定了多个åˆå§‹å€¼è®¾å®š" #: cp/init.c:691 #, gcc-internal-format msgid "multiple initializations given for base %qT" -msgstr "为基类%qT给定了多个åˆå§‹åŒ–设定" +msgstr "为基类%qT给定了多个åˆå§‹å€¼è®¾å®š" #: cp/init.c:759 #, gcc-internal-format @@ -32945,7 +32937,7 @@ msgstr "%qD修饰åŽçš„åå—将在 GCC 的未æ¥ç‰ˆæœ¬ä¸æœ‰å˜åŒ–" #: cp/method.c:388 #, gcc-internal-format msgid "generic thunk code fails for method %q#D which uses %<...%>" -msgstr "通用的转æ¢å±‚代ç (thunk)对使用了%<...%>的方法%q#D失效" +msgstr "泛型的转æ¢å±‚代ç (thunk)对使用了%<...%>的方法%q#D失效" #: cp/method.c:569 #, gcc-internal-format diff --git a/gcc/print-tree.c b/gcc/print-tree.c index eebd1c35ba1..b5656adcaa3 100644 --- a/gcc/print-tree.c +++ b/gcc/print-tree.c @@ -605,8 +605,9 @@ print_node (FILE *file, const char *prefix, tree node, int indent) /* The transparent-union flag is used for different things in different nodes. */ - if (code == UNION_TYPE && TYPE_TRANSPARENT_UNION (node)) - fputs (" transparent-union", file); + if ((code == UNION_TYPE || code == RECORD_TYPE) + && TYPE_TRANSPARENT_AGGR (node)) + fputs (" transparent-aggr", file); else if (code == ARRAY_TYPE && TYPE_NONALIASED_COMPONENT (node)) fputs (" nonaliased-component", file); diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c index 6ec404b6270..0981440fde7 100644 --- a/gcc/sel-sched.c +++ b/gcc/sel-sched.c @@ -1866,14 +1866,13 @@ create_speculation_check (expr_t c_expr, ds_t check_ds, insn_t orig_insn) if (recovery_block != NULL) { rtx twin_rtx; - insn_t twin; twin_rtx = copy_rtx (PATTERN (EXPR_INSN_RTX (c_expr))); twin_rtx = create_insn_rtx_from_pattern (twin_rtx, NULL_RTX); - twin = sel_gen_recovery_insn_from_rtx_after (twin_rtx, - INSN_EXPR (orig_insn), - INSN_SEQNO (insn), - bb_note (recovery_block)); + sel_gen_recovery_insn_from_rtx_after (twin_rtx, + INSN_EXPR (orig_insn), + INSN_SEQNO (insn), + bb_note (recovery_block)); } /* If we've generated a data speculation check, make sure @@ -2411,10 +2410,6 @@ try_transformation_cache (expr_t expr, insn_t insn, EXPR_TARGET_AVAILABLE (expr) = false; if (pti->type == TRANS_SPECULATION) { - ds_t ds; - - ds = EXPR_SPEC_DONE_DS (expr); - EXPR_SPEC_DONE_DS (expr) = pti->ds; EXPR_NEEDS_SPEC_CHECK_P (expr) |= pti->needs_check; } @@ -4216,7 +4211,6 @@ static int calculate_privileged_insns (void) { expr_t cur_expr, min_spec_expr = NULL; - insn_t cur_insn, min_spec_insn; int privileged_n = 0, i; for (i = 0; i < ready.n_ready; i++) @@ -4225,12 +4219,8 @@ calculate_privileged_insns (void) continue; if (! min_spec_expr) - { - min_spec_insn = ready_element (&ready, i); - min_spec_expr = find_expr_for_ready (i, true); - } + min_spec_expr = find_expr_for_ready (i, true); - cur_insn = ready_element (&ready, i); cur_expr = find_expr_for_ready (i, true); if (EXPR_SPEC (cur_expr) > EXPR_SPEC (min_spec_expr)) @@ -4384,7 +4374,7 @@ find_best_expr (av_set_t *av_vliw_ptr, blist_t bnds, fence_t fence, best = fill_ready_list (av_vliw_ptr, bnds, fence, pneed_stall); if (best == NULL && ready.n_ready > 0) { - int privileged_n, index, avail_n; + int privileged_n, index; can_issue_more = invoke_reorder_hooks (fence); if (can_issue_more > 0) @@ -4393,7 +4383,7 @@ find_best_expr (av_set_t *av_vliw_ptr, blist_t bnds, fence_t fence, scheduled due to liveness restrictions on its destination register. In the future, we'd like to choose once and then just probe insns in the order of their priority. */ - avail_n = invoke_dfa_lookahead_guard (); + invoke_dfa_lookahead_guard (); privileged_n = calculate_privileged_insns (); can_issue_more = choose_best_insn (fence, privileged_n, &index); if (can_issue_more) diff --git a/gcc/target.h b/gcc/target.h index e5df4ef0597..ae3b352342f 100644 --- a/gcc/target.h +++ b/gcc/target.h @@ -1021,7 +1021,7 @@ struct gcc_target /* Return the class for a secondary reload, and fill in extra information. */ enum reg_class (*secondary_reload) (bool, rtx, enum reg_class, enum machine_mode, - struct secondary_reload_info *); + secondary_reload_info *); /* This target hook allows the backend to perform additional processing while initializing for variable expansion. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 995ba7989e0..9c89203d503 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,211 @@ +2010-01-20 Janis Johnson <janis187@us.ibm.com> + + * g++.dg/compat/decimal/compat-common.h: New file. + * g++.dg/compat/decimal/decimal-dummy.h: New file. + * g++.dg/compat/decimal/pass_x.h: New file. + * g++.dg/compat/decimal/pass_y.h: New file. + * g++.dg/compat/decimal/pass-1_main.C: New file. + * g++.dg/compat/decimal/pass-1_x.C: New file. + * g++.dg/compat/decimal/pass-1_y.C: New file. + * g++.dg/compat/decimal/pass-2_main.C: New file. + * g++.dg/compat/decimal/pass-2_x.C: New file. + * g++.dg/compat/decimal/pass-2_y.C: New file. + * g++.dg/compat/decimal/pass-3_main.C: New file. + * g++.dg/compat/decimal/pass-3_x.C: New file. + * g++.dg/compat/decimal/pass-3_y.C: New file. + * g++.dg/compat/decimal/pass-4_main.C: New file. + * g++.dg/compat/decimal/pass-4_x.C: New file. + * g++.dg/compat/decimal/pass-4_y.C: New file. + * g++.dg/compat/decimal/pass-5_main.C: New file. + * g++.dg/compat/decimal/pass-5_x.C: New file. + * g++.dg/compat/decimal/pass-5_y.C: New file. + * g++.dg/compat/decimal/pass-6_main.C: New file. + * g++.dg/compat/decimal/pass-6_x.C: New file. + * g++.dg/compat/decimal/pass-6_y.C: New file. + * g++.dg/compat/decimal/return_x.h: New file. + * g++.dg/compat/decimal/return_y.h: New file. + * g++.dg/compat/decimal/return-1_main.C: New file. + * g++.dg/compat/decimal/return-1_x.C: New file. + * g++.dg/compat/decimal/return-1_y.C: New file. + * g++.dg/compat/decimal/return-2_main.C: New file. + * g++.dg/compat/decimal/return-2_x.C: New file. + * g++.dg/compat/decimal/return-2_y.C: New file. + * g++.dg/compat/decimal/return-3_main.C: New file. + * g++.dg/compat/decimal/return-3_x.C: New file. + * g++.dg/compat/decimal/return-3_y.C: New file. + * g++.dg/compat/decimal/return-4_main.C: New file. + * g++.dg/compat/decimal/return-4_x.C: New file. + * g++.dg/compat/decimal/return-4_y.C: New file. + * g++.dg/compat/decimal/return-5_main.C: New file. + * g++.dg/compat/decimal/return-5_x.C: New file. + * g++.dg/compat/decimal/return-5_y.C: New file. + * g++.dg/compat/decimal/return-6_main.C: New file. + * g++.dg/compat/decimal/return-6_x.C: New file. + * g++.dg/compat/decimal/return-6_y.C: New file. + +2010-01-20 Alexandre Oliva <aoliva@redhat.com> + + PR debug/42715 + * gcc.dg/pr42715.c: New. + +2010-01-20 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/42038 + * g++.dg/parse/crash55.C: New. + +2010-01-20 Alexandre Oliva <aoliva@redhat.com> + + PR debug/42782 + * gcc.dg/guality/pr42782.c: New. + +2010-01-20 Jason Merrill <jason@redhat.com> + + PR c++/41788 + * g++.dg/abi/packed1.C: New. + + PR c++/41920 + * g++.dg/cpp0x/lambda/lambda-warn1.C: New. + + PR c++/40750 + * g++.dg/parse/fn-typedef1.C: New. + * g++.dg/other/cv_quals.C: Adjust. + +2010-01-20 Anthony Green <green@moxielogic.com> + + * gcc.dg/cpp/_Pragma6.c: Skip this test for moxie-*-* (no + pack(push) pragma). + * gcc.dg/pr19340.c: Skip this test for moxie-*-* (no scheduling). + * gcc.dg/20020312-2.c: Port this to the moxie core. + * gcc.dg/weak/typeof-2.c: Ditto. + +2010-01-20 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/42717 + * gcc.c-torture/compile/pr42717.c: New testcase. + +2010-01-20 Jakub Jelinek <jakub@redhat.com> + + * gcc.dg/cleanup-13.c: Expect DW_OP_mod to do unsigned modulo instead + of signed, add a few new tests. + + PR middle-end/42803 + * g++.dg/parse/limits-initializer1.C: New test. + +2010-01-19 Janus Weil <janus@gcc.gnu.org> + + PR fortran/42804 + * gfortran.dg/proc_ptr_comp_pass_6.f90: New test. + * gfortran.dg/typebound_call_12.f03: New test. + +2010-01-19 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/42783 + * gfortran.dg/bounds_check_15.f90 : New test. + +2010-01-19 Michael Matz <matz@suse.de> + + PR tree-optimization/41783 + * gfortran.dg/vect/fast-math-mgrid-resid.f: New. + +2010-01-19 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> + + PR target/38697. + * gcc.target/arm/neon/vget_lowf32.c: Regenerate. + * gcc.target/arm/neon/vget_lowp16.c: Likewise. + * gcc.target/arm/neon/vget_lowp8.c: Likewise. + * gcc.target/arm/neon/vget_lows16.c: Likewise. + * gcc.target/arm/neon/vget_lows32.c: Likewise. + * gcc.target/arm/neon/vget_lows64.c: Likewise. + * gcc.target/arm/neon/vget_lows8.c: Likewise. + * gcc.target/arm/neon/vget_lowu16.c: Likewise. + * gcc.target/arm/neon/vget_lowu32.c: Likewise. + * gcc.target/arm/neon/vget_lowu64.c: Likewise. + * gcc.target/arm/neon/vget_lowu8.c: Likewise. + +2010-01-19 Janus Weil <janus@gcc.gnu.org> + + PR fortran/42545 + * gfortran.dg/extends_6.f03: Modified an error message. + * gfortran.dg/extends_10.f03: New test. + * gfortran.dg/private_type_6.f03: Modified an error message. + * gfortran.dg/structure_constructor_8.f03: Ditto. + +2010-01-19 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/42719 + * gcc.dg/pr42719.c: New test. + + PR debug/42728 + * gcc.dg/pr42728.c: New test. + +2010-01-19 Anthony Green <green@moxielogic.com> + + * gcc.dg/tree-ssa/20040204-1.c: Expect this test to pass. + +2010-01-18 Anthony Green <green@moxielogic.com> + + * gcc.dg/tree-ssa/asm-3.c (REGISTER): Pick an appropriate register + for moxie. + +2010-01-19 Dodji Seketeli <dodji@redhat.com> + + * g++.dg/template/error45.C: reverted as part of reverting the + fix of PR c++/42634. + +2010-01-18 Dodji Seketeli <dodji@redhat.com> + + PR c++/42634 + * g++.dg/template/error45.C: New test. + +2010-01-18 Dodji Seketeli <dodji@redhat.com> + + PR c++/42766 + * g++.dg/conversion/op6.C: New test. + +2010-01-18 Uros Bizjak <ubizjak@gmail.com> + + PR target/42774 + * gcc.target/alpha/pr42774.c: New test. + +2010-01-18 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/42781 + * gfortran.fortran-torture/compile/pr42781.f90: New testcase. + +2010-01-17 Richard Guenther <rguenther@suse.de> + + PR middle-end/42248 + * gcc.c-torture/execute/pr42248.c: New testcase. + +2010-01-17 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/42773 + * g++.dg/torture/pr42773.C: New testcase. + +2010-01-17 Janus Weil <janus@gcc.gnu.org> + + PR fortran/42677 + * gfortran.dg/interface_assignment_5.f90: New test. + +2010-01-17 Dodji Seketeli <dodji@redhat.com> + + PR c++/42697 + * g++.dg/template/crash94.C: Reverted. + +2010-01-17 Dodji Seketeli <dodji@redhat.com> + + PR c++/42697 + +2010-01-17 Jie Zhang <jie.zhang@analog.com> + + PR debug/42767 + * gcc.dg/debug/pr42767.c: New. + +2010-01-15 Jason Merrill <jason@redhat.com> + + PR c++/42761 + * g++.dg/cpp0x/decltype22.C: New. + 2010-01-16 Jakub Jelinek <jakub@redhat.com> PR middle-end/42760 diff --git a/gcc/testsuite/g++.dg/abi/mangle39.C b/gcc/testsuite/g++.dg/abi/mangle39.C new file mode 100644 index 00000000000..30a08b0c32f --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/mangle39.C @@ -0,0 +1,28 @@ +// PR c++/42338 +// { dg-options "-std=c++0x" } +// { dg-final { scan-assembler "_Z1fIPiEDTcmppfp_Li0EET_" } } +// { dg-final { scan-assembler "_Z1gIiEvRK1AIT_EDTixfp_Li0EE" } } + +template<typename T> +auto f(T t) -> decltype(++t, 0) +{ + ++t; + return 0; +} + +template <class T> +struct A +{ + T operator[](int) const { return 0; } +}; + +template< typename T > +void g(const A<T> &a, decltype(a[0]) t) { } + +int main() +{ + f((int*)0); + + A<int> a; + g(a,1); +} diff --git a/gcc/testsuite/g++.dg/abi/packed1.C b/gcc/testsuite/g++.dg/abi/packed1.C new file mode 100644 index 00000000000..4e759728a17 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/packed1.C @@ -0,0 +1,24 @@ +// PR c++/41788 +// { dg-options "-Wpacked" } +// { dg-do run } + +extern "C" void abort (); + +struct INNER { + virtual int foo() const { return 1; } +} __attribute__ ((packed)); + +struct OUTER { + char c; + INNER inner; +} __attribute__ ((packed)); + +int main() +{ + OUTER outer; + int s = sizeof(outer); + int o = (char *)&outer.inner - (char *)&outer; + if (s != sizeof (char) + sizeof (void*) + || o != sizeof (char)) + abort (); +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/compat-common.h b/gcc/testsuite/g++.dg/compat/decimal/compat-common.h new file mode 100644 index 00000000000..43c22d722f7 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/compat-common.h @@ -0,0 +1,55 @@ +/* Several of the binary compatibility tests use these macros to + allow debugging the test or tracking down a failure by getting an + indication of whether each individual check passed or failed. + When DBG is defined, each check is shown by a dot (pass) or 'F' + (fail) rather than aborting as soon as a failure is detected. */ + +#ifdef DBG +#include <stdio.h> +#define DEBUG_INIT setbuf (stdout, NULL); +#define DEBUG_FPUTS(x) fputs (x, stdout); +#define DEBUG_DOT putc ('.', stdout); +#define DEBUG_NL putc ('\n', stdout); +#define DEBUG_FAIL putc ('F', stdout); fails++; +#define DEBUG_CHECK { DEBUG_FAIL } else { DEBUG_DOT } +#define DEBUG_FINI if (fails) DEBUG_FPUTS ("failed\n") \ + else DEBUG_FPUTS ("passed\n") +#else +#define DEBUG_INIT +#define DEBUG_FPUTS(x) +#define DEBUG_DOT +#define DEBUG_NL +#define DEBUG_FAIL abort (); +#define DEBUG_CHECK abort (); +#define DEBUG_FINI +#endif + +#ifdef SKIP_COMPLEX +#ifndef SKIP_COMPLEX_INT +#define SKIP_COMPLEX_INT +#endif +#endif + +#ifndef SKIP_COMPLEX +#ifdef __GNUC__ +#define CINT(x, y) (x + y * __extension__ 1i) +#define CDBL(x, y) (x + y * __extension__ 1i) +#else +#ifdef __SUNPRO_C +/* ??? Complex support without <complex.h>. */ +#else +#include <complex.h> +#endif +#ifndef SKIP_COMPLEX_INT +#define CINT(x, y) ((_Complex int) (x + y * _Complex_I)) +#endif +#define CDBL(x, y) (x + y * _Complex_I) +#endif +#endif + +#ifdef __cplusplus +extern "C" void abort (void); +#else +extern void abort (void); +#endif +extern int fails; diff --git a/gcc/testsuite/g++.dg/compat/decimal/decimal-dummy.h b/gcc/testsuite/g++.dg/compat/decimal/decimal-dummy.h new file mode 100644 index 00000000000..ec347f9b7eb --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/decimal-dummy.h @@ -0,0 +1,67 @@ +namespace std { +namespace decimal { + + class decimal32 + { + public: + typedef float __dec32 __attribute__((mode(SD))); + decimal32 () : __val(0.e-101DF) {} + decimal32 (__dec32 x) : __val(x) {} + __dec32 __val; + }; + + class decimal64 + { + public: + typedef float __dec64 __attribute__((mode(DD))); + decimal64 () : __val(0.e-398dd) {} + decimal64 (__dec64 x) : __val(x) {} + __dec64 __val; + }; + + class decimal128 + { + public: + typedef float __dec128 __attribute__((mode(TD))); + decimal128 () : __val(0.e-6176DL) {} + decimal128 (__dec128 x) : __val(x) {} + __dec128 __val; + }; + + inline decimal32 operator+ (decimal32 lhs, decimal32 rhs) + { + decimal32 tmp; + tmp.__val = lhs.__val + rhs.__val; + return tmp; + } + + inline decimal64 operator+ (decimal64 lhs, decimal64 rhs) + { + decimal64 tmp; + tmp.__val = lhs.__val + rhs.__val; + return tmp; + } + + inline decimal128 operator+ (decimal128 lhs, decimal128 rhs) + { + decimal128 tmp; + tmp.__val = lhs.__val + rhs.__val; + return tmp; + } + + inline bool operator!= (decimal32 lhs, decimal32 rhs) + { + return lhs.__val != rhs.__val; + } + + inline bool operator!= (decimal64 lhs, decimal64 rhs) + { + return lhs.__val != rhs.__val; + } + + inline bool operator!= (decimal128 lhs, decimal128 rhs) + { + return lhs.__val != rhs.__val; + } +} +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-1_main.C b/gcc/testsuite/g++.dg/compat/decimal/pass-1_main.C new file mode 100644 index 00000000000..963dc3bbfab --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-1_main.C @@ -0,0 +1,13 @@ +/* { dg-require-effective-target dfp } */ + +/* Test passing decimal scalars by value. */ + +extern void pass_1_x (void); +int fails; + +int +main () +{ + pass_1_x (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-1_x.C b/gcc/testsuite/g++.dg/compat/decimal/pass-1_x.C new file mode 100644 index 00000000000..265a1317b00 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-1_x.C @@ -0,0 +1,30 @@ +typedef float dec32 __attribute__((mode(SD))); +typedef float dec64 __attribute__((mode(DD))); +typedef float dec128 __attribute__((mode(TD))); + +#include "pass_x.h" + +void +pass_1_x (void) +{ +DEBUG_INIT + +#define T(NAME) testit##NAME (); + +#ifndef SKIP_DECIMAL32 +T(d32) +#endif +#ifndef SKIP_DECIMAL64 +T(d64) +#endif +#ifndef SKIP_DECIMAL128 +T(d128) +#endif + +DEBUG_FINI + +if (fails != 0) + abort (); + +#undef T +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-1_y.C b/gcc/testsuite/g++.dg/compat/decimal/pass-1_y.C new file mode 100644 index 00000000000..5da7f87d51e --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-1_y.C @@ -0,0 +1,5 @@ +typedef float dec32 __attribute__((mode(SD))); +typedef float dec64 __attribute__((mode(DD))); +typedef float dec128 __attribute__((mode(TD))); + +#include "pass_y.h" diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-2_main.C b/gcc/testsuite/g++.dg/compat/decimal/pass-2_main.C new file mode 100644 index 00000000000..533e4b276dc --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-2_main.C @@ -0,0 +1,13 @@ +/* { dg-require-effective-target dfp } */ + +/* Test passing decimal classes by value. */ + +extern void pass_2_x (void); +int fails; + +int +main () +{ + pass_2_x (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-2_x.C b/gcc/testsuite/g++.dg/compat/decimal/pass-2_x.C new file mode 100644 index 00000000000..8a67bda0ed8 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-2_x.C @@ -0,0 +1,32 @@ +#include "decimal-dummy.h" + +#define dec32 std::decimal::decimal32 +#define dec64 std::decimal::decimal64 +#define dec128 std::decimal::decimal128 + +#include "pass_x.h" + +void +pass_2_x (void) +{ +DEBUG_INIT + +#define T(NAME) testit##NAME (); + +#ifndef SKIP_DECIMAL32 +T(d32) +#endif +#ifndef SKIP_DECIMAL64 +T(d64) +#endif +#ifndef SKIP_DECIMAL128 +T(d128) +#endif + +DEBUG_FINI + +if (fails != 0) + abort (); + +#undef T +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-2_y.C b/gcc/testsuite/g++.dg/compat/decimal/pass-2_y.C new file mode 100644 index 00000000000..97471457dbe --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-2_y.C @@ -0,0 +1,7 @@ +#include "decimal-dummy.h" + +#define dec32 std::decimal::decimal32 +#define dec64 std::decimal::decimal64 +#define dec128 std::decimal::decimal128 + +#include "pass_y.h" diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-3_main.C b/gcc/testsuite/g++.dg/compat/decimal/pass-3_main.C new file mode 100644 index 00000000000..de09992c224 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-3_main.C @@ -0,0 +1,13 @@ +/* { dg-require-effective-target dfp } */ + +/* Test passing decimal scalars and classes by value. */ + +extern void pass_3_x (void); +int fails; + +int +main () +{ + pass_3_x (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-3_x.C b/gcc/testsuite/g++.dg/compat/decimal/pass-3_x.C new file mode 100644 index 00000000000..17e4d1c8b5a --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-3_x.C @@ -0,0 +1,30 @@ +typedef float dec32 __attribute__((mode(SD))); +typedef float dec64 __attribute__((mode(DD))); +typedef float dec128 __attribute__((mode(TD))); + +#include "pass_x.h" + +void +pass_3_x (void) +{ +DEBUG_INIT + +#define T(NAME) testit##NAME (); + +#ifndef SKIP_DECIMAL32 +T(d32) +#endif +#ifndef SKIP_DECIMAL64 +T(d64) +#endif +#ifndef SKIP_DECIMAL128 +T(d128) +#endif + +DEBUG_FINI + +if (fails != 0) + abort (); + +#undef T +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-3_y.C b/gcc/testsuite/g++.dg/compat/decimal/pass-3_y.C new file mode 100644 index 00000000000..97471457dbe --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-3_y.C @@ -0,0 +1,7 @@ +#include "decimal-dummy.h" + +#define dec32 std::decimal::decimal32 +#define dec64 std::decimal::decimal64 +#define dec128 std::decimal::decimal128 + +#include "pass_y.h" diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-4_main.C b/gcc/testsuite/g++.dg/compat/decimal/pass-4_main.C new file mode 100644 index 00000000000..d5a0a47d478 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-4_main.C @@ -0,0 +1,13 @@ +/* { dg-require-effective-target dfp } */ + +/* Test passing decimal classes and scalars by value. */ + +extern void pass_4_x (void); +int fails; + +int +main () +{ + pass_4_x (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-4_x.C b/gcc/testsuite/g++.dg/compat/decimal/pass-4_x.C new file mode 100644 index 00000000000..b0483ac278f --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-4_x.C @@ -0,0 +1,32 @@ +#include "decimal-dummy.h" + +#define dec32 std::decimal::decimal32 +#define dec64 std::decimal::decimal64 +#define dec128 std::decimal::decimal128 + +#include "pass_x.h" + +void +pass_4_x (void) +{ +DEBUG_INIT + +#define T(NAME) testit##NAME (); + +#ifndef SKIP_DECIMAL32 +T(d32) +#endif +#ifndef SKIP_DECIMAL64 +T(d64) +#endif +#ifndef SKIP_DECIMAL128 +T(d128) +#endif + +DEBUG_FINI + +if (fails != 0) + abort (); + +#undef T +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-4_y.C b/gcc/testsuite/g++.dg/compat/decimal/pass-4_y.C new file mode 100644 index 00000000000..5da7f87d51e --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-4_y.C @@ -0,0 +1,5 @@ +typedef float dec32 __attribute__((mode(SD))); +typedef float dec64 __attribute__((mode(DD))); +typedef float dec128 __attribute__((mode(TD))); + +#include "pass_y.h" diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-5_main.C b/gcc/testsuite/g++.dg/compat/decimal/pass-5_main.C new file mode 100644 index 00000000000..9b25a49c72e --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-5_main.C @@ -0,0 +1,13 @@ +/* { dg-require-effective-target dfp } */ + +/* Test passing decimal scalars and typedef'd classes by value. */ + +extern void pass_5_x (void); +int fails; + +int +main () +{ + pass_5_x (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-5_x.C b/gcc/testsuite/g++.dg/compat/decimal/pass-5_x.C new file mode 100644 index 00000000000..11c4d96c9cd --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-5_x.C @@ -0,0 +1,30 @@ +typedef float dec32 __attribute__((mode(SD))); +typedef float dec64 __attribute__((mode(DD))); +typedef float dec128 __attribute__((mode(TD))); + +#include "pass_x.h" + +void +pass_5_x (void) +{ +DEBUG_INIT + +#define T(NAME) testit##NAME (); + +#ifndef SKIP_DECIMAL32 +T(d32) +#endif +#ifndef SKIP_DECIMAL64 +T(d64) +#endif +#ifndef SKIP_DECIMAL128 +T(d128) +#endif + +DEBUG_FINI + +if (fails != 0) + abort (); + +#undef T +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-5_y.C b/gcc/testsuite/g++.dg/compat/decimal/pass-5_y.C new file mode 100644 index 00000000000..5a2c1fba01b --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-5_y.C @@ -0,0 +1,7 @@ +#include "decimal-dummy.h" + +typedef std::decimal::decimal32 dec32; +typedef std::decimal::decimal64 dec64; +typedef std::decimal::decimal128 dec128; + +#include "pass_y.h" diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-6_main.C b/gcc/testsuite/g++.dg/compat/decimal/pass-6_main.C new file mode 100644 index 00000000000..1b686a21dd0 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-6_main.C @@ -0,0 +1,13 @@ +/* { dg-require-effective-target dfp } */ + +/* Test passing typedef'd decimal classes and scalars by value. */ + +extern void pass_6_x (void); +int fails; + +int +main () +{ + pass_6_x (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-6_x.C b/gcc/testsuite/g++.dg/compat/decimal/pass-6_x.C new file mode 100644 index 00000000000..e59ca7f722d --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-6_x.C @@ -0,0 +1,32 @@ +#include "decimal-dummy.h" + +typedef std::decimal::decimal32 dec32; +typedef std::decimal::decimal64 dec64; +typedef std::decimal::decimal128 dec128; + +#include "pass_x.h" + +void +pass_6_x (void) +{ +DEBUG_INIT + +#define T(NAME) testit##NAME (); + +#ifndef SKIP_DECIMAL32 +T(d32) +#endif +#ifndef SKIP_DECIMAL64 +T(d64) +#endif +#ifndef SKIP_DECIMAL128 +T(d128) +#endif + +DEBUG_FINI + +if (fails != 0) + abort (); + +#undef T +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass-6_y.C b/gcc/testsuite/g++.dg/compat/decimal/pass-6_y.C new file mode 100644 index 00000000000..5da7f87d51e --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass-6_y.C @@ -0,0 +1,5 @@ +typedef float dec32 __attribute__((mode(SD))); +typedef float dec64 __attribute__((mode(DD))); +typedef float dec128 __attribute__((mode(TD))); + +#include "pass_y.h" diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass_x.h b/gcc/testsuite/g++.dg/compat/decimal/pass_x.h new file mode 100644 index 00000000000..5b25dc9bf1a --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass_x.h @@ -0,0 +1,151 @@ +#include "compat-common.h" + +#define T(NAME, TYPE, INITVAL) \ +TYPE g01##NAME, g02##NAME, g03##NAME, g04##NAME; \ +TYPE g05##NAME, g06##NAME, g07##NAME, g08##NAME; \ +TYPE g09##NAME, g10##NAME, g11##NAME, g12##NAME; \ +TYPE g13##NAME, g14##NAME, g15##NAME, g16##NAME; \ + \ +extern void init##NAME (TYPE *p, TYPE v); \ +extern void checkg##NAME (void); \ +extern void \ +test##NAME (TYPE x01, TYPE x02, TYPE x03, TYPE x04, \ + TYPE x05, TYPE x06, TYPE x07, TYPE x08, \ + TYPE x09, TYPE x10, TYPE x11, TYPE x12, \ + TYPE x13, TYPE x14, TYPE x15, TYPE x16); \ +extern void testva##NAME (int n, ...); \ + \ +extern void \ +check##NAME (TYPE x, TYPE v) \ +{ \ + if (x != v + INITVAL) \ + DEBUG_CHECK \ +} \ + \ +extern void \ +test2_##NAME (TYPE x01, TYPE x02, TYPE x03, TYPE x04, \ + TYPE x05, TYPE x06, TYPE x07, TYPE x08) \ +{ \ + test##NAME (x01, g02##NAME, x02, g04##NAME, \ + x03, g06##NAME, x04, g08##NAME, \ + x05, g10##NAME, x06, g12##NAME, \ + x07, g14##NAME, x08, g16##NAME); \ +} \ + \ +extern void \ +testit##NAME (void) \ +{ \ + DEBUG_FPUTS (#NAME) \ + DEBUG_FPUTS (" init: ") \ + init##NAME (&g01##NAME, 1); \ + init##NAME (&g02##NAME, 2); \ + init##NAME (&g03##NAME, 3); \ + init##NAME (&g04##NAME, 4); \ + init##NAME (&g05##NAME, 5); \ + init##NAME (&g06##NAME, 6); \ + init##NAME (&g07##NAME, 7); \ + init##NAME (&g08##NAME, 8); \ + init##NAME (&g09##NAME, 9); \ + init##NAME (&g10##NAME, 10); \ + init##NAME (&g11##NAME, 11); \ + init##NAME (&g12##NAME, 12); \ + init##NAME (&g13##NAME, 13); \ + init##NAME (&g14##NAME, 14); \ + init##NAME (&g15##NAME, 15); \ + init##NAME (&g16##NAME, 16); \ + checkg##NAME (); \ + DEBUG_NL \ + DEBUG_FPUTS (#NAME) \ + DEBUG_FPUTS (" test: ") \ + test##NAME (g01##NAME, g02##NAME, g03##NAME, g04##NAME, \ + g05##NAME, g06##NAME, g07##NAME, g08##NAME, \ + g09##NAME, g10##NAME, g11##NAME, g12##NAME, \ + g13##NAME, g14##NAME, g15##NAME, g16##NAME); \ + DEBUG_NL \ + DEBUG_FPUTS (#NAME) \ + DEBUG_FPUTS (" testva: ") \ + DEBUG_NL \ + testva##NAME (1, \ + g01##NAME); \ + DEBUG_NL \ + testva##NAME (2, \ + g01##NAME, g02##NAME); \ + DEBUG_NL \ + testva##NAME (3, \ + g01##NAME, g02##NAME, g03##NAME); \ + DEBUG_NL \ + testva##NAME (4, \ + g01##NAME, g02##NAME, g03##NAME, g04##NAME); \ + DEBUG_NL \ + testva##NAME (5, \ + g01##NAME, g02##NAME, g03##NAME, g04##NAME, \ + g05##NAME); \ + DEBUG_NL \ + testva##NAME (6, \ + g01##NAME, g02##NAME, g03##NAME, g04##NAME, \ + g05##NAME, g06##NAME); \ + DEBUG_NL \ + testva##NAME (7, \ + g01##NAME, g02##NAME, g03##NAME, g04##NAME, \ + g05##NAME, g06##NAME, g07##NAME); \ + DEBUG_NL \ + testva##NAME (8, \ + g01##NAME, g02##NAME, g03##NAME, g04##NAME, \ + g05##NAME, g06##NAME, g07##NAME, g08##NAME); \ + DEBUG_NL \ + testva##NAME (9, \ + g01##NAME, g02##NAME, g03##NAME, g04##NAME, \ + g05##NAME, g06##NAME, g07##NAME, g08##NAME, \ + g09##NAME); \ + DEBUG_NL \ + testva##NAME (10, \ + g01##NAME, g02##NAME, g03##NAME, g04##NAME, \ + g05##NAME, g06##NAME, g07##NAME, g08##NAME, \ + g09##NAME, g10##NAME); \ + DEBUG_NL \ + testva##NAME (11, \ + g01##NAME, g02##NAME, g03##NAME, g04##NAME, \ + g05##NAME, g06##NAME, g07##NAME, g08##NAME, \ + g09##NAME, g10##NAME, g11##NAME); \ + DEBUG_NL \ + testva##NAME (12, \ + g01##NAME, g02##NAME, g03##NAME, g04##NAME, \ + g05##NAME, g06##NAME, g07##NAME, g08##NAME, \ + g09##NAME, g10##NAME, g11##NAME, g12##NAME); \ + DEBUG_NL \ + testva##NAME (13, \ + g01##NAME, g02##NAME, g03##NAME, g04##NAME, \ + g05##NAME, g06##NAME, g07##NAME, g08##NAME, \ + g09##NAME, g10##NAME, g11##NAME, g12##NAME, \ + g13##NAME); \ + DEBUG_NL \ + testva##NAME (14, \ + g01##NAME, g02##NAME, g03##NAME, g04##NAME, \ + g05##NAME, g06##NAME, g07##NAME, g08##NAME, \ + g09##NAME, g10##NAME, g11##NAME, g12##NAME, \ + g13##NAME, g14##NAME); \ + DEBUG_NL \ + testva##NAME (15, \ + g01##NAME, g02##NAME, g03##NAME, g04##NAME, \ + g05##NAME, g06##NAME, g07##NAME, g08##NAME, \ + g09##NAME, g10##NAME, g11##NAME, g12##NAME, \ + g13##NAME, g14##NAME, g15##NAME); \ + DEBUG_NL \ + testva##NAME (16, \ + g01##NAME, g02##NAME, g03##NAME, g04##NAME, \ + g05##NAME, g06##NAME, g07##NAME, g08##NAME, \ + g09##NAME, g10##NAME, g11##NAME, g12##NAME, \ + g13##NAME, g14##NAME, g15##NAME, g16##NAME); \ + DEBUG_NL \ + DEBUG_FPUTS (#NAME) \ + DEBUG_FPUTS (" test2: ") \ + test2_##NAME (g01##NAME, g03##NAME, g05##NAME, g07##NAME, \ + g09##NAME, g11##NAME, g13##NAME, g15##NAME); \ + DEBUG_NL \ +} + +T(d32, dec32, (dec32)1.5DF) +T(d64, dec64, (dec64)2.5DD) +T(d128, dec128, (dec128)3.5DL) + +#undef T diff --git a/gcc/testsuite/g++.dg/compat/decimal/pass_y.h b/gcc/testsuite/g++.dg/compat/decimal/pass_y.h new file mode 100644 index 00000000000..f835b198352 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/pass_y.h @@ -0,0 +1,89 @@ +#include <stdarg.h> + +#include "compat-common.h" + +#ifdef SKIP_VA +const int test_va = 0; +#else +const int test_va = 1; +#endif + +#define T(NAME, TYPE, INITVAL) \ +extern TYPE g01##NAME, g02##NAME, g03##NAME, g04##NAME; \ +extern TYPE g05##NAME, g06##NAME, g07##NAME, g08##NAME; \ +extern TYPE g09##NAME, g10##NAME, g11##NAME, g12##NAME; \ +extern TYPE g13##NAME, g14##NAME, g15##NAME, g16##NAME; \ + \ +extern void check##NAME (TYPE x, TYPE v); \ + \ +extern void \ +init##NAME (TYPE *p, TYPE v) \ +{ \ + *p = v + INITVAL; \ +} \ + \ +extern void \ +checkg##NAME (void) \ +{ \ + check##NAME (g01##NAME, 1); \ + check##NAME (g02##NAME, 2); \ + check##NAME (g03##NAME, 3); \ + check##NAME (g04##NAME, 4); \ + check##NAME (g05##NAME, 5); \ + check##NAME (g06##NAME, 6); \ + check##NAME (g07##NAME, 7); \ + check##NAME (g08##NAME, 8); \ + check##NAME (g09##NAME, 9); \ + check##NAME (g10##NAME, 10); \ + check##NAME (g11##NAME, 11); \ + check##NAME (g12##NAME, 12); \ + check##NAME (g13##NAME, 13); \ + check##NAME (g14##NAME, 14); \ + check##NAME (g15##NAME, 15); \ + check##NAME (g16##NAME, 16); \ +} \ + \ +extern void \ +test##NAME (TYPE x01, TYPE x02, TYPE x03, TYPE x04, \ + TYPE x05, TYPE x06, TYPE x07, TYPE x08, \ + TYPE x09, TYPE x10, TYPE x11, TYPE x12, \ + TYPE x13, TYPE x14, TYPE x15, TYPE x16) \ +{ \ + check##NAME (x01, 1); \ + check##NAME (x02, 2); \ + check##NAME (x03, 3); \ + check##NAME (x04, 4); \ + check##NAME (x05, 5); \ + check##NAME (x06, 6); \ + check##NAME (x07, 7); \ + check##NAME (x08, 8); \ + check##NAME (x09, 9); \ + check##NAME (x10, 10); \ + check##NAME (x11, 11); \ + check##NAME (x12, 12); \ + check##NAME (x13, 13); \ + check##NAME (x14, 14); \ + check##NAME (x15, 15); \ + check##NAME (x16, 16); \ +} \ + \ +extern void \ +testva##NAME (int n, ...) \ +{ \ + int i; \ + va_list ap; \ + if (test_va) \ + { \ + va_start (ap, n); \ + for (i = 0; i < n; i++) \ + { \ + TYPE t = va_arg (ap, TYPE); \ + check##NAME (t, i+1); \ + } \ + va_end (ap); \ + } \ +} + +T(d32, dec32, (dec32)1.5DF) +T(d64, dec64, (dec64)2.5DD) +T(d128, dec128, (dec128)3.5DL) diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-1_main.C b/gcc/testsuite/g++.dg/compat/decimal/return-1_main.C new file mode 100644 index 00000000000..c663bb01cf3 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-1_main.C @@ -0,0 +1,13 @@ +/* { dg-require-effective-target dfp } */ + +/* Test function return values for decimal float scalars. */ + +extern void return_1_x (void); +int fails; + +int +main () +{ + return_1_x (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-1_x.C b/gcc/testsuite/g++.dg/compat/decimal/return-1_x.C new file mode 100644 index 00000000000..e391bd1f1f3 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-1_x.C @@ -0,0 +1,24 @@ +typedef float dec32 __attribute__((mode(SD))); +typedef float dec64 __attribute__((mode(DD))); +typedef float dec128 __attribute__((mode(TD))); + +#include "return_x.h" + +void +return_1_x (void) +{ +DEBUG_INIT + +#define T(NAME) testit##NAME (); + +T(d32) +T(d64) +T(d128) + +DEBUG_FINI + +if (fails != 0) + abort (); + +#undef T +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-1_y.C b/gcc/testsuite/g++.dg/compat/decimal/return-1_y.C new file mode 100644 index 00000000000..0b4d4bf38c6 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-1_y.C @@ -0,0 +1,5 @@ +typedef float dec32 __attribute__((mode(SD))); +typedef float dec64 __attribute__((mode(DD))); +typedef float dec128 __attribute__((mode(TD))); + +#include "return_y.h" diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-2_main.C b/gcc/testsuite/g++.dg/compat/decimal/return-2_main.C new file mode 100644 index 00000000000..afa27f269df --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-2_main.C @@ -0,0 +1,13 @@ +/* { dg-require-effective-target dfp } */ + +/* Test function return values for decimal classes. */ + +extern void return_2_x (void); +int fails; + +int +main () +{ + return_2_x (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-2_x.C b/gcc/testsuite/g++.dg/compat/decimal/return-2_x.C new file mode 100644 index 00000000000..d96c01479c2 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-2_x.C @@ -0,0 +1,26 @@ +#include "decimal-dummy.h" + +#define dec32 std::decimal::decimal32 +#define dec64 std::decimal::decimal64 +#define dec128 std::decimal::decimal128 + +#include "return_x.h" + +void +return_2_x (void) +{ +DEBUG_INIT + +#define T(NAME) testit##NAME (); + +T(d32) +T(d64) +T(d128) + +DEBUG_FINI + +if (fails != 0) + abort (); + +#undef T +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-2_y.C b/gcc/testsuite/g++.dg/compat/decimal/return-2_y.C new file mode 100644 index 00000000000..c68088b30cf --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-2_y.C @@ -0,0 +1,7 @@ +#include "decimal-dummy.h" + +#define dec32 std::decimal::decimal32 +#define dec64 std::decimal::decimal64 +#define dec128 std::decimal::decimal128 + +#include "return_y.h" diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-3_main.C b/gcc/testsuite/g++.dg/compat/decimal/return-3_main.C new file mode 100644 index 00000000000..468f3fc0c34 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-3_main.C @@ -0,0 +1,13 @@ +/* { dg-require-effective-target dfp } */ + +/* Test function return values for decimal float scalars and classes. */ + +extern void return_3_x (void); +int fails; + +int +main () +{ + return_3_x (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-3_x.C b/gcc/testsuite/g++.dg/compat/decimal/return-3_x.C new file mode 100644 index 00000000000..52e599c7631 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-3_x.C @@ -0,0 +1,24 @@ +typedef float dec32 __attribute__((mode(SD))); +typedef float dec64 __attribute__((mode(DD))); +typedef float dec128 __attribute__((mode(TD))); + +#include "return_x.h" + +void +return_3_x (void) +{ +DEBUG_INIT + +#define T(NAME) testit##NAME (); + +T(d32) +T(d64) +T(d128) + +DEBUG_FINI + +if (fails != 0) + abort (); + +#undef T +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-3_y.C b/gcc/testsuite/g++.dg/compat/decimal/return-3_y.C new file mode 100644 index 00000000000..c68088b30cf --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-3_y.C @@ -0,0 +1,7 @@ +#include "decimal-dummy.h" + +#define dec32 std::decimal::decimal32 +#define dec64 std::decimal::decimal64 +#define dec128 std::decimal::decimal128 + +#include "return_y.h" diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-4_main.C b/gcc/testsuite/g++.dg/compat/decimal/return-4_main.C new file mode 100644 index 00000000000..365d8becd59 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-4_main.C @@ -0,0 +1,13 @@ +/* { dg-require-effective-target dfp } */ + +/* Test function return values for decimal float classes and scalars. */ + +extern void return_4_x (void); +int fails; + +int +main () +{ + return_4_x (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-4_x.C b/gcc/testsuite/g++.dg/compat/decimal/return-4_x.C new file mode 100644 index 00000000000..b9d28fa5b9a --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-4_x.C @@ -0,0 +1,26 @@ +#include "decimal-dummy.h" + +#define dec32 std::decimal::decimal32 +#define dec64 std::decimal::decimal64 +#define dec128 std::decimal::decimal128 + +#include "return_x.h" + +void +return_4_x (void) +{ +DEBUG_INIT + +#define T(NAME) testit##NAME (); + +T(d32) +T(d64) +T(d128) + +DEBUG_FINI + +if (fails != 0) + abort (); + +#undef T +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-4_y.C b/gcc/testsuite/g++.dg/compat/decimal/return-4_y.C new file mode 100644 index 00000000000..0b4d4bf38c6 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-4_y.C @@ -0,0 +1,5 @@ +typedef float dec32 __attribute__((mode(SD))); +typedef float dec64 __attribute__((mode(DD))); +typedef float dec128 __attribute__((mode(TD))); + +#include "return_y.h" diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-5_main.C b/gcc/testsuite/g++.dg/compat/decimal/return-5_main.C new file mode 100644 index 00000000000..2c334832797 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-5_main.C @@ -0,0 +1,14 @@ +/* { dg-require-effective-target dfp } */ + +/* Test function return values for decimal float scalars and typedef'd + classes. */ + +extern void return_5_x (void); +int fails; + +int +main () +{ + return_5_x (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-5_x.C b/gcc/testsuite/g++.dg/compat/decimal/return-5_x.C new file mode 100644 index 00000000000..a2bb6173b2f --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-5_x.C @@ -0,0 +1,24 @@ +typedef float dec32 __attribute__((mode(SD))); +typedef float dec64 __attribute__((mode(DD))); +typedef float dec128 __attribute__((mode(TD))); + +#include "return_x.h" + +void +return_5_x (void) +{ +DEBUG_INIT + +#define T(NAME) testit##NAME (); + +T(d32) +T(d64) +T(d128) + +DEBUG_FINI + +if (fails != 0) + abort (); + +#undef T +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-5_y.C b/gcc/testsuite/g++.dg/compat/decimal/return-5_y.C new file mode 100644 index 00000000000..0f780167a4e --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-5_y.C @@ -0,0 +1,7 @@ +#include "decimal-dummy.h" + +typedef std::decimal::decimal32 dec32; +typedef std::decimal::decimal64 dec64; +typedef std::decimal::decimal128 dec128; + +#include "return_y.h" diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-6_main.C b/gcc/testsuite/g++.dg/compat/decimal/return-6_main.C new file mode 100644 index 00000000000..94526bdcb81 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-6_main.C @@ -0,0 +1,14 @@ +/* { dg-require-effective-target dfp } */ + +/* Test function return values for typedef'd decimal float classes + and scalars. */ + +extern void return_6_x (void); +int fails; + +int +main () +{ + return_6_x (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-6_x.C b/gcc/testsuite/g++.dg/compat/decimal/return-6_x.C new file mode 100644 index 00000000000..e0a487dbe3b --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-6_x.C @@ -0,0 +1,26 @@ +#include "decimal-dummy.h" + +typedef std::decimal::decimal32 dec32; +typedef std::decimal::decimal64 dec64; +typedef std::decimal::decimal128 dec128; + +#include "return_x.h" + +void +return_6_x (void) +{ +DEBUG_INIT + +#define T(NAME) testit##NAME (); + +T(d32) +T(d64) +T(d128) + +DEBUG_FINI + +if (fails != 0) + abort (); + +#undef T +} diff --git a/gcc/testsuite/g++.dg/compat/decimal/return-6_y.C b/gcc/testsuite/g++.dg/compat/decimal/return-6_y.C new file mode 100644 index 00000000000..0b4d4bf38c6 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return-6_y.C @@ -0,0 +1,5 @@ +typedef float dec32 __attribute__((mode(SD))); +typedef float dec64 __attribute__((mode(DD))); +typedef float dec128 __attribute__((mode(TD))); + +#include "return_y.h" diff --git a/gcc/testsuite/g++.dg/compat/decimal/return_x.h b/gcc/testsuite/g++.dg/compat/decimal/return_x.h new file mode 100644 index 00000000000..401adfb5c93 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return_x.h @@ -0,0 +1,90 @@ +#include "compat-common.h" + +#ifdef SKIP_VA +const int test_va = 0; +#else +const int test_va = 1; +#endif + +#define T(NAME, TYPE, INITVAL) \ +TYPE g01##NAME, g02##NAME, g03##NAME, g04##NAME; \ +TYPE g05##NAME, g06##NAME, g07##NAME, g08##NAME; \ +TYPE g09##NAME, g10##NAME, g11##NAME, g12##NAME; \ +TYPE g13##NAME, g14##NAME, g15##NAME, g16##NAME; \ + \ +extern void init##NAME (TYPE *p, TYPE v); \ +extern void checkg##NAME (void); \ +extern TYPE test0##NAME (void); \ +extern TYPE test1##NAME (TYPE); \ +extern TYPE testva##NAME (int n, ...); \ + \ +extern void \ +check##NAME (TYPE x, TYPE v) \ +{ \ + if (x != v) \ + DEBUG_CHECK \ +} \ + \ +extern void \ +testit##NAME (void) \ +{ \ + TYPE rslt; \ + DEBUG_FPUTS (#NAME) \ + DEBUG_FPUTS (" init: ") \ + init##NAME (&g01##NAME, 1); \ + init##NAME (&g02##NAME, 2); \ + init##NAME (&g03##NAME, 3); \ + init##NAME (&g04##NAME, 4); \ + init##NAME (&g05##NAME, 5); \ + init##NAME (&g06##NAME, 6); \ + init##NAME (&g07##NAME, 7); \ + init##NAME (&g08##NAME, 8); \ + init##NAME (&g09##NAME, 9); \ + init##NAME (&g10##NAME, 10); \ + init##NAME (&g11##NAME, 11); \ + init##NAME (&g12##NAME, 12); \ + init##NAME (&g13##NAME, 13); \ + init##NAME (&g14##NAME, 14); \ + init##NAME (&g15##NAME, 15); \ + init##NAME (&g16##NAME, 16); \ + checkg##NAME (); \ + DEBUG_NL \ + DEBUG_FPUTS (#NAME) \ + DEBUG_FPUTS (" test0: ") \ + rslt = test0##NAME (); \ + check##NAME (rslt, g01##NAME); \ + DEBUG_NL \ + DEBUG_FPUTS (#NAME) \ + DEBUG_FPUTS (" test1: ") \ + rslt = test1##NAME (g01##NAME); \ + check##NAME (rslt, g01##NAME); \ + if (test_va) \ + { \ + DEBUG_NL \ + DEBUG_FPUTS (#NAME) \ + DEBUG_FPUTS (" testva: ") \ + rslt = testva##NAME (1, g01##NAME); \ + check##NAME (rslt, g01##NAME); \ + rslt = testva##NAME (5, g01##NAME, g02##NAME, g03##NAME, \ + g04##NAME, g05##NAME); \ + check##NAME (rslt, g05##NAME); \ + rslt = testva##NAME (9, g01##NAME, g02##NAME, g03##NAME, \ + g04##NAME, g05##NAME, g06##NAME, \ + g07##NAME, g08##NAME, g09##NAME); \ + check##NAME (rslt, g09##NAME); \ + rslt = testva##NAME (16, g01##NAME, g02##NAME, g03##NAME, \ + g04##NAME, g05##NAME, g06##NAME, \ + g07##NAME, g08##NAME, g09##NAME, \ + g10##NAME, g11##NAME, g12##NAME, \ + g13##NAME, g14##NAME, g15##NAME, \ + g16##NAME); \ + check##NAME (rslt, g16##NAME); \ + } \ + DEBUG_NL \ +} + +T(d32, dec32, (dec32)1.5DF); +T(d64, dec64, (dec64)2.5DD); +T(d128, dec128, (dec128)3.5DL); + +#undef T diff --git a/gcc/testsuite/g++.dg/compat/decimal/return_y.h b/gcc/testsuite/g++.dg/compat/decimal/return_y.h new file mode 100644 index 00000000000..285526e2e36 --- /dev/null +++ b/gcc/testsuite/g++.dg/compat/decimal/return_y.h @@ -0,0 +1,67 @@ +#include <stdarg.h> + +#include "compat-common.h" + +#define T(NAME, TYPE, INITVAL) \ +extern TYPE g01##NAME, g02##NAME, g03##NAME, g04##NAME; \ +extern TYPE g05##NAME, g06##NAME, g07##NAME, g08##NAME; \ +extern TYPE g09##NAME, g10##NAME, g11##NAME, g12##NAME; \ +extern TYPE g13##NAME, g14##NAME, g15##NAME, g16##NAME; \ + \ +extern void check##NAME (TYPE x, TYPE v); \ + \ +extern void \ +init##NAME (TYPE *p, TYPE v) \ +{ \ + *p = v + INITVAL; \ +} \ + \ +extern void \ +checkg##NAME (void) \ +{ \ + check##NAME (g01##NAME, 1+INITVAL); \ + check##NAME (g02##NAME, 2+INITVAL); \ + check##NAME (g03##NAME, 3+INITVAL); \ + check##NAME (g04##NAME, 4+INITVAL); \ + check##NAME (g05##NAME, 5+INITVAL); \ + check##NAME (g06##NAME, 6+INITVAL); \ + check##NAME (g07##NAME, 7+INITVAL); \ + check##NAME (g08##NAME, 8+INITVAL); \ + check##NAME (g09##NAME, 9+INITVAL); \ + check##NAME (g10##NAME, 10+INITVAL); \ + check##NAME (g11##NAME, 11+INITVAL); \ + check##NAME (g12##NAME, 12+INITVAL); \ + check##NAME (g13##NAME, 13+INITVAL); \ + check##NAME (g14##NAME, 14+INITVAL); \ + check##NAME (g15##NAME, 15+INITVAL); \ + check##NAME (g16##NAME, 16+INITVAL); \ +} \ + \ +extern TYPE \ +test0##NAME (void) \ +{ \ + return g01##NAME; \ +} \ + \ +extern TYPE \ +test1##NAME (TYPE x01) \ +{ \ + return x01; \ +} \ + \ +extern TYPE \ +testva##NAME (int n, ...) \ +{ \ + int i; \ + TYPE rslt; \ + va_list ap; \ + va_start (ap, n); \ + for (i = 0; i < n; i++) \ + rslt = va_arg (ap, TYPE); \ + va_end (ap); \ + return rslt; \ +} + +T(d32, dec32, (dec32)1.5) +T(d64, dec64, (dec64)2.5) +T(d128, dec128, (dec128)3.5) diff --git a/gcc/testsuite/g++.dg/conversion/op6.C b/gcc/testsuite/g++.dg/conversion/op6.C new file mode 100644 index 00000000000..9aec9f0a808 --- /dev/null +++ b/gcc/testsuite/g++.dg/conversion/op6.C @@ -0,0 +1,18 @@ +// Origin: PR c++/42766 +// { dg-do compile } + +template<class T> class smart_pointer { +public: + operator T* () const { } + operator bool () const { } + operator bool () { } +}; +class Context { }; +typedef smart_pointer<Context> ContextP; +class SvnClient { + ~SvnClient(); + ContextP svnContext; +}; +SvnClient::~SvnClient() { + delete svnContext; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype22.C b/gcc/testsuite/g++.dg/cpp0x/decltype22.C new file mode 100644 index 00000000000..74811cfe701 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/decltype22.C @@ -0,0 +1,13 @@ +// PR c++/42761 +// { dg-options "-std=c++0x" } + +template<typename _Tp> _Tp* fn(); + +template <class T> struct A +{ + template <class U, + class S = decltype(fn<T>())> + struct B { }; +}; + +A<int> a; diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn1.C new file mode 100644 index 00000000000..b384d5cff6d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn1.C @@ -0,0 +1,8 @@ +// PR c++/41920 +// { dg-options "-std=c++0x -Wall -Wextra" } + +int foo(int i) +{ + auto bar = [=](){ return i; }; + return bar(); +} diff --git a/gcc/testsuite/g++.dg/other/cv_func.C b/gcc/testsuite/g++.dg/other/cv_func.C index 4f103824d93..788c173b423 100644 --- a/gcc/testsuite/g++.dg/other/cv_func.C +++ b/gcc/testsuite/g++.dg/other/cv_func.C @@ -4,7 +4,6 @@ typedef int FIC(int) const; typedef int FI(int); FIC f; // { dg-error "qualified" } -// { dg-error "ignoring" "ignoring" { target *-*-* } 6 } struct S { FIC f; // OK @@ -15,7 +14,7 @@ struct S { }; FIC S::*pm = &S::f; const FI S::*pm2 = &S::f; // { dg-error "qualifier" } -// { dg-error "cannot convert" "cannot convert" { target *-*-* } 17 } +// { dg-error "cannot convert" "cannot convert" { target *-*-* } 16 } const FIC S::*pm3 = &S::f; // { dg-error "qualifier" } int S::f(int) const diff --git a/gcc/testsuite/g++.dg/parse/crash55.C b/gcc/testsuite/g++.dg/parse/crash55.C new file mode 100644 index 00000000000..7676d49bcd9 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/crash55.C @@ -0,0 +1,8 @@ +// PR c++/42038 + +extern int __cxa_begin_catch; + +void f(void) +{ + try { } catch (int) { } // { dg-error "cannot be used" } +} diff --git a/gcc/testsuite/g++.dg/parse/fn-typedef1.C b/gcc/testsuite/g++.dg/parse/fn-typedef1.C new file mode 100644 index 00000000000..ebdc012f59c --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/fn-typedef1.C @@ -0,0 +1,19 @@ +// PR c++/40750 +// { dg-do run } + +extern "C" void abort (); + +typedef void Fn() const; + +struct Foo { + Fn fn; +}; + +bool called = false; +void Foo::fn() const { called = true; } + +int main() { + Foo f; f.fn(); + if (!called) + abort(); +} diff --git a/gcc/testsuite/g++.dg/parse/limits-initializer1.C b/gcc/testsuite/g++.dg/parse/limits-initializer1.C new file mode 100644 index 00000000000..4b507912f36 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/limits-initializer1.C @@ -0,0 +1,37 @@ +// PR middle-end/42803 +// { dg-do compile } +// { dg-options "-O0" } + +#define X2 (a + a) +#define X4 (X2 + X2) +#define X8 (X4 + X4) +#define X16 (X8 + X8) +#define X32 (X16 + X16) +#define X64 (X32 + X32) +#define X128 (X64 + X64) +#define X256 (X128 + X128) +#define X512 (X256 + X256) +#define X1024 (X512 + X512) +#define X2048 (X1024 + X1024) +#define X4096 (X2048 + X2048) +#define X8192 (X4096 + X4096) +#define X16384 (X8192 + X8192) +#define X32768 (X16384 + X16384) +#define X65536 (X32768 + X32768) +#define X131072 (X65536 + X65536) +#define X262144 (X131072 + X131072) + +int +foo (int a) +{ + int v = X262144; + return v; +} + +// Emit an error to just make sure we don't waste too much time +// in the middle-end compiling this. +int +bar (void) +{ + return x; // { dg-error "was not declared in this scope" } +} diff --git a/gcc/testsuite/g++.dg/torture/pr42773.C b/gcc/testsuite/g++.dg/torture/pr42773.C new file mode 100644 index 00000000000..478ad278aa6 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr42773.C @@ -0,0 +1,54 @@ +// { dg-do compile } +// { dg-options "-fno-exceptions" } + +typedef unsigned int uint; +struct QShared { + bool deref() { + return !--count; + } + uint count; +}; +template <class T> class QValueListNode { +public: + QValueListNode<T>* next; + QValueListNode<T>* prev; +}; +template <class T> class QValueListPrivate : public QShared { +public: + typedef QValueListNode<T> Node; + typedef QValueListNode<T>* NodePtr; + QValueListPrivate(); + void derefAndDelete() { + if ( deref() ) delete this; + } + ~QValueListPrivate(); + NodePtr node; +}; +template <class T> QValueListPrivate<T>::QValueListPrivate() { + node = new Node; + node->next = node->prev = node; +} +template <class T> QValueListPrivate<T>::~QValueListPrivate() { + NodePtr p = node->next; + while( p != node ) { + NodePtr x = p->next; + delete p; + p = x; + } +} +template <class T> class QValueList { +public: + QValueList() { + sh = new QValueListPrivate<T>; + } + ~QValueList() { + sh->derefAndDelete(); + } + QValueListPrivate<T>* sh; +}; +class Cell { + QValueList<Cell*> obscuringCells() const; +}; +QValueList<Cell*> Cell::obscuringCells() const { + QValueList<Cell*> empty; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr42717.c b/gcc/testsuite/gcc.c-torture/compile/pr42717.c new file mode 100644 index 00000000000..4fe6f93e797 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr42717.c @@ -0,0 +1,30 @@ +static signed char +foo (signed char si1, unsigned char si2) +{ + return (si1 ^ si2) & (-si2 ^ si2) ? : si1 - si2; +} + +struct S0 +{ +}; + +unsigned char g_21; + +struct S0 g_34; + +void +bar (unsigned char p_20) +{ + unsigned char *l_22 = &g_21; + unsigned char l_23 = 0; + struct S0 *l = &g_34; + goto lbl_42; + for (; l_23; l_23 = foo (l_23, 1)) + { + for (p_20 = 0; 0; p_20 = foo (p_20, 1)) + lbl_42:; + (l == &g_34) ? 0 : ""; +lbl_85:*l_22 = p_20; + } + goto lbl_85; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr42248.c b/gcc/testsuite/gcc.c-torture/execute/pr42248.c new file mode 100644 index 00000000000..bbb91b343b1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr42248.c @@ -0,0 +1,27 @@ +typedef struct { + _Complex double a; + _Complex double b; +} Scf10; + +Scf10 g1s; + +void +check (Scf10 x, _Complex double y) +{ + if (x.a != y) __builtin_abort (); +} + +void +init (Scf10 *p, _Complex double y) +{ + p->a = y; +} + +int +main () +{ + init (&g1s, (_Complex double)1); + check (g1s, (_Complex double)1); + + return 0; +} diff --git a/gcc/testsuite/gcc.dg/20020312-2.c b/gcc/testsuite/gcc.dg/20020312-2.c index 057c19e1a99..bf8225a1a6b 100644 --- a/gcc/testsuite/gcc.dg/20020312-2.c +++ b/gcc/testsuite/gcc.dg/20020312-2.c @@ -46,6 +46,8 @@ extern void abort (void); /* No pic register. */ #elif defined(__mn10300__) /* No pic register. */ +#elif defined(__moxie__) +/* No pic register. */ #elif defined(__hppa__) /* PIC register is %r27 or %r19, but is used even without -fpic. */ #elif defined(__pdp11__) diff --git a/gcc/testsuite/gcc.dg/cleanup-13.c b/gcc/testsuite/gcc.dg/cleanup-13.c index 0a5a9e9153e..5a0d4c69f5a 100644 --- a/gcc/testsuite/gcc.dg/cleanup-13.c +++ b/gcc/testsuite/gcc.dg/cleanup-13.c @@ -210,9 +210,22 @@ OP_const1s(-123) OP_abs OP_const1u(123) OP_eq ASSERT_TOS_NON0 \ OP_lit3 OP_lit6 OP_and OP_lit2 OP_eq ASSERT_TOS_NON0 \ OP_lit3 OP_lit6 OP_or OP_lit7 OP_eq ASSERT_TOS_NON0 \ OP_lit17 OP_lit2 OP_minus OP_lit15 OP_eq ASSERT_TOS_NON0 \ +/* Divide is signed truncating toward zero. */ \ OP_const1s(-6) OP_const1s(-2) OP_div OP_lit3 OP_eq ASSERT_TOS_NON0 \ -OP_const1s(-6) OP_const1s(-4) OP_mod OP_const1s(-2) \ +OP_const1s(-7) OP_const1s(3) OP_div OP_const1s(-2) \ OP_eq ASSERT_TOS_NON0 \ +/* Modulo is unsigned. */ \ +OP_const1s(-6) OP_const1s(-4) OP_mod OP_const1s(-6) \ + OP_eq ASSERT_TOS_NON0 \ +OP_const1s(-6) OP_lit4 OP_mod OP_lit2 OP_eq ASSERT_TOS_NON0 \ +OP_lit6 OP_const1s(-4) OP_mod OP_lit6 OP_eq ASSERT_TOS_NON0 \ +/* Signed modulo can be implemented using "over over div mul minus". */\ +OP_const1s(-6) OP_const1s(-4) OP_over OP_over OP_div OP_mul OP_minus \ + OP_const1s(-2) OP_eq ASSERT_TOS_NON0 \ +OP_const1s(-7) OP_lit3 OP_over OP_over OP_div OP_mul OP_minus \ + OP_const1s(-1) OP_eq ASSERT_TOS_NON0 \ +OP_lit7 OP_const1s(-3) OP_over OP_over OP_div OP_mul OP_minus \ + OP_lit1 OP_eq ASSERT_TOS_NON0 \ OP_lit16 OP_lit31 OP_plus_uconst(1) OP_mul OP_const2u(512) \ OP_eq ASSERT_TOS_NON0 \ OP_lit5 OP_not OP_lit31 OP_and OP_lit26 OP_eq ASSERT_TOS_NON0 \ diff --git a/gcc/testsuite/gcc.dg/cpp/_Pragma6.c b/gcc/testsuite/gcc.dg/cpp/_Pragma6.c index 986b40cb156..a5324f2f9be 100644 --- a/gcc/testsuite/gcc.dg/cpp/_Pragma6.c +++ b/gcc/testsuite/gcc.dg/cpp/_Pragma6.c @@ -2,7 +2,7 @@ /* This is supposed to succeed only if the target defines HANDLE_PRAGMA_PACK_PUSH_POP and doesn't define HANDLE_PRAGMA_PACK_WITH_EXPANSION. */ -/* { dg-do compile { target { ! { powerpc-ibm-aix* *-*-solaris2* fido-*-* m68k-*-* sh*-[us]*-elf m32c-*-* *-*-vxworks } } } } */ +/* { dg-do compile { target { ! { powerpc-ibm-aix* *-*-solaris2* fido-*-* m68k-*-* sh*-[us]*-elf m32c-*-* *-*-vxworks moxie-*-* } } } } */ #define push bar #define foo _Pragma ("pack(push)") diff --git a/gcc/testsuite/gcc.dg/debug/pr42767.c b/gcc/testsuite/gcc.dg/debug/pr42767.c new file mode 100644 index 00000000000..1f0e25fe58e --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/pr42767.c @@ -0,0 +1,18 @@ +/* PR debug/42767 */ +/* { dg-do compile } */ +/* { dg-options "-O1 -g" } */ + +struct lineno_cache_entry +{ + unsigned long size; +}; +_bfd_link_section_stabs (struct lineno_cache_entry * stabsec) +{ + unsigned long count; + unsigned char *sym; + unsigned char *symend; + unsigned long skip; + count = stabsec->size / 12; + for (; sym < symend; sym += 1); + stabsec->size = (count - skip) * 12; +} diff --git a/gcc/testsuite/gcc.dg/guality/pr42782.c b/gcc/testsuite/gcc.dg/guality/pr42782.c new file mode 100644 index 00000000000..6a880814aaf --- /dev/null +++ b/gcc/testsuite/gcc.dg/guality/pr42782.c @@ -0,0 +1,24 @@ +/* { dg-options "-g" } */ + +#include "guality.h" + +void __attribute__ ((__noinline__)) +g (void) +{ + asm volatile (""); +} + +int +f (int a) +{ + g (); + GUALCHKVAL (a); + return a; +} + +int +main (int argc, char *argv[]) +{ + f (argc + 2); + f (argc + 5); +} diff --git a/gcc/testsuite/gcc.dg/pr19340.c b/gcc/testsuite/gcc.dg/pr19340.c index 844d80677d0..58a919b4586 100644 --- a/gcc/testsuite/gcc.dg/pr19340.c +++ b/gcc/testsuite/gcc.dg/pr19340.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O1 -fschedule-insns2 -fsched2-use-traces" } */ -/* { dg-skip-if "No scheduling" { mmix-*-* cris-*-* crisv32-*-* fido-*-* m68k-*-* m32c-*-* avr-*-* } { "*" } { "" } } */ +/* { dg-skip-if "No scheduling" { mmix-*-* cris-*-* crisv32-*-* fido-*-* m68k-*-* m32c-*-* avr-*-* moxie-*-* } { "*" } { "" } } */ extern double f (double x); diff --git a/gcc/testsuite/gcc.dg/pr42715.c b/gcc/testsuite/gcc.dg/pr42715.c new file mode 100644 index 00000000000..72bdfc86244 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr42715.c @@ -0,0 +1,59 @@ +/* { dg-do compile { target fpic } } */ +/* { dg-options "-fPIC -g -O2 -w" } */ +/* var-tracking failed to clobber the reg holding v at the asm insn, + so v ended up bound to an intermediate PIC expression. */ + +struct A { unsigned a1; char a2[15]; }; +struct B { long b1; unsigned char b2; long b3; }; +struct C { void *c1; unsigned c2; unsigned c3; }; + +static struct A v1; +struct A *const v2 = &v1; + +static inline +int foo (void) +{ + int *v; + __asm__ __volatile__ ("" : "=r" (v)); + return v[1]; +} + +static void +bar (struct C *x) +{ + if (x->c2 == x->c3 && x->c1) + f1 (foo (), x->c1, x->c3 * sizeof (x->c1[0])); +} + +void +baz (struct B *y) +{ + int i; + const char *j; + char *k; + char x[64]; + for (i = 0; i < sizeof (struct B); i++, y) + { + switch (y->b2) + { + case 0x20: + if (__builtin_strchr (j, '=')) + continue; + } + switch (y->b2) + { + case 0x80: + bar (&x); + f2 (y->b3); + case 0x2e: + case 0x4e: + break; + default: + if (v2->a1) + f2 (y->b2); + } + k[0] = '\0'; + if (v2->a1) + f2 (y->b1); + } +} diff --git a/gcc/testsuite/gcc.dg/pr42719.c b/gcc/testsuite/gcc.dg/pr42719.c new file mode 100644 index 00000000000..94a58e41a1a --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr42719.c @@ -0,0 +1,14 @@ +/* PR tree-optimization/42719 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftracer -fcompare-debug" } */ + +int *v; + +void +foo (int a) +{ + int i, j; + for (j = i = a; i != -1; j = i, i = v[i]) + ; + v[j] = v[a]; +} diff --git a/gcc/testsuite/gcc.dg/pr42728.c b/gcc/testsuite/gcc.dg/pr42728.c new file mode 100644 index 00000000000..7b2fbb690fb --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr42728.c @@ -0,0 +1,11 @@ +/* PR debug/42728 */ +/* { dg-do compile } */ +/* { dg-options "-O1 -fcompare-debug" } */ + +void +foo (char *a) +{ + char *b; + for (; *a; a++) + a = b++; +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20040204-1.c b/gcc/testsuite/gcc.dg/tree-ssa/20040204-1.c index d7aea1b8430..e7566642cc0 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/20040204-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/20040204-1.c @@ -33,5 +33,5 @@ void test55 (int x, int y) that the && should be emitted (based on BRANCH_COST). Fix this by teaching dom to look through && and register all components as true. */ -/* { dg-final { scan-tree-dump-times "link_error" 0 "optimized" { xfail { ! "powerpc*-*-* cris-*-* crisv32-*-* mmix-*-* mips*-*-* m68k*-*-*" } } } } */ +/* { dg-final { scan-tree-dump-times "link_error" 0 "optimized" { xfail { ! "powerpc*-*-* cris-*-* crisv32-*-* mmix-*-* mips*-*-* m68k*-*-* moxie-*-*" } } } } */ /* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/asm-3.c b/gcc/testsuite/gcc.dg/tree-ssa/asm-3.c index e35d179c547..5ed282e49a1 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/asm-3.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/asm-3.c @@ -5,8 +5,12 @@ #ifdef __hppa__ #define REGISTER "1" #else +#ifdef __moxie__ +#define REGISTER "8" +#else #define REGISTER "0" #endif +#endif static inline int source(void) { diff --git a/gcc/testsuite/gcc.dg/weak/typeof-2.c b/gcc/testsuite/gcc.dg/weak/typeof-2.c index 5d97dc5c240..63f427fc8c9 100644 --- a/gcc/testsuite/gcc.dg/weak/typeof-2.c +++ b/gcc/testsuite/gcc.dg/weak/typeof-2.c @@ -43,4 +43,6 @@ int bar3 (int x) // Likewise for m68k targets. // { dg-final { if [string match fido-*-* $target_triplet ] {return} } } // { dg-final { if [string match m68k-*-* $target_triplet ] {return} } } +// Likewise for moxie targets. +// { dg-final { if [string match moxie-*-* $target_triplet ] {return} } } // { dg-final { scan-assembler "baz3.*baz3.*baz3.*baz3.*baz3.*baz3" } } diff --git a/gcc/testsuite/gcc.target/alpha/pr42774.c b/gcc/testsuite/gcc.target/alpha/pr42774.c new file mode 100644 index 00000000000..65688002b3a --- /dev/null +++ b/gcc/testsuite/gcc.target/alpha/pr42774.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mcpu=ev4" } */ + +unsigned int ntfs_getinfo(void *p) +{ + char bootsect[8]; + + __builtin_memcpy(bootsect, p, sizeof bootsect); + return *(unsigned short *)(bootsect + 3); +} diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c b/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c index ae63430f737..a14a57636d0 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c @@ -9,7 +9,7 @@ void test_vget_lowf32 (void) { - float32x2_t out_float32x2_t; + register float32x2_t out_float32x2_t asm ("d18"); float32x4_t arg0_float32x4_t; out_float32x2_t = vget_low_f32 (arg0_float32x4_t); diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c b/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c index c24ac0cf12a..5c130f0b44d 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c @@ -9,7 +9,7 @@ void test_vget_lowp16 (void) { - poly16x4_t out_poly16x4_t; + register poly16x4_t out_poly16x4_t asm ("d18"); poly16x8_t arg0_poly16x8_t; out_poly16x4_t = vget_low_p16 (arg0_poly16x8_t); diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c b/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c index 45d65bcafc1..4b4f599fc4e 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c @@ -9,7 +9,7 @@ void test_vget_lowp8 (void) { - poly8x8_t out_poly8x8_t; + register poly8x8_t out_poly8x8_t asm ("d18"); poly8x16_t arg0_poly8x16_t; out_poly8x8_t = vget_low_p8 (arg0_poly8x16_t); diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c b/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c index 8e6c29aa7fa..ee6e9904b67 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c @@ -9,7 +9,7 @@ void test_vget_lows16 (void) { - int16x4_t out_int16x4_t; + register int16x4_t out_int16x4_t asm ("d18"); int16x8_t arg0_int16x8_t; out_int16x4_t = vget_low_s16 (arg0_int16x8_t); diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c b/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c index e018afd7fab..08315286d9b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c @@ -9,7 +9,7 @@ void test_vget_lows32 (void) { - int32x2_t out_int32x2_t; + register int32x2_t out_int32x2_t asm ("d18"); int32x4_t arg0_int32x4_t; out_int32x2_t = vget_low_s32 (arg0_int32x4_t); diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c b/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c index e2e2bd66fb9..9c1440ceb5b 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c @@ -15,5 +15,4 @@ void test_vget_lows64 (void) out_int64x1_t = vget_low_s64 (arg0_int64x2_t); } -/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c b/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c index 0be24de35e2..7d324f33713 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c @@ -9,7 +9,7 @@ void test_vget_lows8 (void) { - int8x8_t out_int8x8_t; + register int8x8_t out_int8x8_t asm ("d18"); int8x16_t arg0_int8x16_t; out_int8x8_t = vget_low_s8 (arg0_int8x16_t); diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c b/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c index 67bcd5090e7..b0c4384531f 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c +++ b/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c @@ -9,7 +9,7 @@ void test_vget_lowu16 (void) { - uint16x4_t out_uint16x4_t; + register uint16x4_t out_uint16x4_t asm ("d18"); uint16x8_t arg0_uint16x8_t; out_uint16x4_t = vget_low_u16 (arg0_uint16x8_t); diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c b/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c index d21d97acd01..fdd8e79e974 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c +++ b/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c @@ -9,7 +9,7 @@ void test_vget_lowu32 (void) { - uint32x2_t out_uint32x2_t; + register uint32x2_t out_uint32x2_t asm ("d18"); uint32x4_t arg0_uint32x4_t; out_uint32x2_t = vget_low_u32 (arg0_uint32x4_t); diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c b/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c index 79cf1c53d20..e6f7627cbd4 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c +++ b/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c @@ -15,5 +15,4 @@ void test_vget_lowu64 (void) out_uint64x1_t = vget_low_u64 (arg0_uint64x2_t); } -/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c b/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c index 03996493c78..d4e3c714d93 100644 --- a/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c +++ b/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c @@ -9,7 +9,7 @@ void test_vget_lowu8 (void) { - uint8x8_t out_uint8x8_t; + register uint8x8_t out_uint8x8_t asm ("d18"); uint8x16_t arg0_uint8x16_t; out_uint8x8_t = vget_low_u8 (arg0_uint8x16_t); diff --git a/gcc/testsuite/gfortran.dg/bounds_check_15.f90 b/gcc/testsuite/gfortran.dg/bounds_check_15.f90 new file mode 100644 index 00000000000..947ffb2f4b4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bounds_check_15.f90 @@ -0,0 +1,33 @@ +! { dg-do run } +! { dg-options "-fbounds-check" } +! Test the fix for PR42783, in which a bogus array bounds violation +! with missing optional array argument. +! +! Contributed by Harald Anlauf <anlauf@gmx.de> +! +program gfcbug99 + implicit none + character(len=8), parameter :: mnem_list(2) = "A" + + call foo (mnem_list) ! This call succeeds + call foo () ! This call fails +contains + subroutine foo (mnem_list) + character(len=8) ,intent(in) ,optional :: mnem_list(:) + + integer :: i,j + character(len=256) :: ml + ml = '' + j = 0 + if (present (mnem_list)) then + do i = 1, size (mnem_list) + if (mnem_list(i) /= "") then + j = j + 1 + if (j > len (ml)/8) call abort () + ml((j-1)*8+1:(j-1)*8+8) = mnem_list(i) + end if + end do + end if + if (j > 0) print *, trim (ml(1:8)) + end subroutine foo +end program gfcbug99 diff --git a/gcc/testsuite/gfortran.dg/extends_10.f03 b/gcc/testsuite/gfortran.dg/extends_10.f03 new file mode 100644 index 00000000000..fbcaa7efc3f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/extends_10.f03 @@ -0,0 +1,34 @@ +! { dg-do compile } +! +! PR 42545: type extension: parent component has wrong accessibility +! +! Reported by Reinhold Bader <bader@lrz.de> + +module mo + implicit none + type :: t1 + integer :: i = 1 + end type + type, extends(t1) :: t2 + private + real :: x = 2.0 + end type + type :: u1 + integer :: j = 1 + end type + type, extends(u1) :: u2 + real :: y = 2.0 + end type + private :: u1 +end module + +program pr + use mo + implicit none + type(t2) :: a + type(u2) :: b + print *,a%t1%i + print *,b%u1%j ! { dg-error "is a PRIVATE component of" } +end program + +! { dg-final { cleanup-modules "mo" } } diff --git a/gcc/testsuite/gfortran.dg/extends_6.f03 b/gcc/testsuite/gfortran.dg/extends_6.f03 index 866fbbd1c50..a50a9b751b1 100644 --- a/gcc/testsuite/gfortran.dg/extends_6.f03 +++ b/gcc/testsuite/gfortran.dg/extends_6.f03 @@ -30,7 +30,7 @@ end module m end type two o_dt%day = 5 ! VALID but failed in first version of EXTENDS patch - o_dt%yr = 5 ! { dg-error "All components of 'date' are PRIVATE" } + o_dt%yr = 5 ! { dg-error "is a PRIVATE component of" } t = two(one = one(4), i = 5, r=4.4) ! { dg-error "has already been set" } diff --git a/gcc/testsuite/gfortran.dg/interface_assignment_5.f90 b/gcc/testsuite/gfortran.dg/interface_assignment_5.f90 new file mode 100644 index 00000000000..8444dd0847e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/interface_assignment_5.f90 @@ -0,0 +1,49 @@ +! { dg-do compile } +! +! PR 42677: [4.5 Regression] Bogus Error: Ambiguous interfaces '...' in intrinsic assignment operator +! +! Contributed by Harald Anlauf <anlauf@gmx.de> + +module mod1 + implicit none + type t_m + integer :: i = 0 + end type t_m +!------------------------------------------------------------------------------ + interface assignment (=) + module procedure assign_m + end interface +!------------------------------------------------------------------------------ +contains + subroutine assign_m (y, x) + type(t_m) ,intent(inout) :: y + type(t_m) ,intent(in) :: x + end subroutine assign_m +end module mod1 +!============================================================================== +module mod2 + use mod1, only: t_m, assignment(=) + implicit none + type t_atm + integer :: k + end type t_atm +!------------------------------------------------------------------------------ + interface assignment(=) + module procedure assign_to_atm + end interface +!------------------------------------------------------------------------------ + interface + pure subroutine delete_m (x) + use mod1 + type(t_m) ,intent(in) :: x + end subroutine delete_m + end interface +!------------------------------------------------------------------------------ +contains + subroutine assign_to_atm (atm, r) + type(t_atm) ,intent(inout) :: atm + integer ,intent(in) :: r + end subroutine assign_to_atm +end module mod2 + +! { dg-final { cleanup-modules "mod1 mod2" } } diff --git a/gcc/testsuite/gfortran.dg/private_type_6.f90 b/gcc/testsuite/gfortran.dg/private_type_6.f90 index 5e13ed53477..4af3f704f98 100644 --- a/gcc/testsuite/gfortran.dg/private_type_6.f90 +++ b/gcc/testsuite/gfortran.dg/private_type_6.f90 @@ -18,7 +18,7 @@ program foo_test implicit none TYPE(footype) :: foo TYPE(bartype) :: foo2 - foo = footype(1) ! { dg-error "All components of 'footype' are PRIVATE" } + foo = footype(1) ! { dg-error "is a PRIVATE component" } foo2 = bartype(1,2) ! { dg-error "is a PRIVATE component" } foo2%dummy2 = 5 ! { dg-error "is a PRIVATE component" } end program foo_test diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_pass_6.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_pass_6.f90 new file mode 100644 index 00000000000..8898a597d53 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_pass_6.f90 @@ -0,0 +1,35 @@ +! { dg-do compile } +! { dg-options "-fcheck=bounds" } +! +! PR 42804: ICE with -fcheck=bounds and type bound procedure call on array element +! +! Contributed by Ian Harvey <ian_harvey@bigpond.com> + +MODULE ModA + IMPLICIT NONE + TYPE, PUBLIC :: A + PROCEDURE(a_proc),pointer :: Proc + END TYPE A +CONTAINS + SUBROUTINE a_proc(this, stat) + CLASS(A), INTENT(INOUT) :: this + INTEGER, INTENT(OUT) :: stat + WRITE (*, *) 'a_proc' + stat = 0 + END SUBROUTINE a_proc +END MODULE ModA + +PROGRAM ProgA + USE ModA + IMPLICIT NONE + INTEGER :: ierr + INTEGER :: i + TYPE(A), ALLOCATABLE :: arr(:) + ALLOCATE(arr(2)) + DO i = 1, 2 + arr(i)%proc => a_proc + CALL arr(i)%Proc(ierr) + END DO +END PROGRAM ProgA + +! { dg-final { cleanup-modules "ModA" } } diff --git a/gcc/testsuite/gfortran.dg/structure_constructor_8.f03 b/gcc/testsuite/gfortran.dg/structure_constructor_8.f03 index 520b52853d5..b86d0ecccaf 100644 --- a/gcc/testsuite/gfortran.dg/structure_constructor_8.f03 +++ b/gcc/testsuite/gfortran.dg/structure_constructor_8.f03 @@ -51,7 +51,7 @@ PROGRAM test struct1 = haspriv_t (b = 2, a = 1) ! { dg-error "is a PRIVATE component" } ! This should fail as all components are private - struct2 = allpriv_t (5) ! { dg-error "of 'allpriv_t' are PRIVATE" } + struct2 = allpriv_t (5) ! { dg-error "is a PRIVATE component" } ! This should fail as the type itself is private, and the expression should ! be deduced as call to an undefined function. diff --git a/gcc/testsuite/gfortran.dg/typebound_call_12.f03 b/gcc/testsuite/gfortran.dg/typebound_call_12.f03 new file mode 100644 index 00000000000..afb0fda71a4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_call_12.f03 @@ -0,0 +1,36 @@ +! { dg-do compile } +! { dg-options "-fcheck=bounds" } +! +! PR 42804: ICE with -fcheck=bounds and type bound procedure call on array element +! +! Contributed by Ian Harvey <ian_harvey@bigpond.com> + +MODULE ModA + IMPLICIT NONE + PRIVATE + TYPE, PUBLIC :: A + CONTAINS + PROCEDURE :: Proc => a_proc + END TYPE A +CONTAINS + SUBROUTINE a_proc(this, stat) + CLASS(A), INTENT(INOUT) :: this + INTEGER, INTENT(OUT) :: stat + WRITE (*, *) 'a_proc' + stat = 0 + END SUBROUTINE a_proc +END MODULE ModA + +PROGRAM ProgA + USE ModA + IMPLICIT NONE + INTEGER :: ierr + INTEGER :: i + TYPE(A), ALLOCATABLE :: arr(:) + ALLOCATE(arr(2)) + DO i = 1, 2 + CALL arr(i)%Proc(ierr) + END DO +END PROGRAM ProgA + +! { dg-final { cleanup-modules "ModA" } } diff --git a/gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f b/gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f new file mode 100644 index 00000000000..2d1844b367a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f @@ -0,0 +1,44 @@ +! { dg-do compile } +! { dg-require-effective-target vect_double } +! { dg-options "-O3 -ffast-math -fpredictive-commoning -ftree-vectorize -fdump-tree-optimized" } + +******* RESID COMPUTES THE RESIDUAL: R = V - AU +* +* THIS SIMPLE IMPLEMENTATION COSTS 27A + 4M PER RESULT, WHERE +* A AND M DENOTE THE COSTS OF ADDITION (OR SUBTRACTION) AND +* MULTIPLICATION, RESPECTIVELY. BY USING SEVERAL TWO-DIMENSIONAL +* BUFFERS ONE CAN REDUCE THIS COST TO 13A + 4M IN THE GENERAL +* CASE, OR 10A + 3M WHEN THE COEFFICIENT A(1) IS ZERO. +* + SUBROUTINE RESID(U,V,R,N,A) + INTEGER N + REAL*8 U(N,N,N),V(N,N,N),R(N,N,N),A(0:3) + INTEGER I3, I2, I1 +C + DO 600 I3=2,N-1 + DO 600 I2=2,N-1 + DO 600 I1=2,N-1 + 600 R(I1,I2,I3)=V(I1,I2,I3) + > -A(0)*( U(I1, I2, I3 ) ) + > -A(1)*( U(I1-1,I2, I3 ) + U(I1+1,I2, I3 ) + > + U(I1, I2-1,I3 ) + U(I1, I2+1,I3 ) + > + U(I1, I2, I3-1) + U(I1, I2, I3+1) ) + > -A(2)*( U(I1-1,I2-1,I3 ) + U(I1+1,I2-1,I3 ) + > + U(I1-1,I2+1,I3 ) + U(I1+1,I2+1,I3 ) + > + U(I1, I2-1,I3-1) + U(I1, I2+1,I3-1) + > + U(I1, I2-1,I3+1) + U(I1, I2+1,I3+1) + > + U(I1-1,I2, I3-1) + U(I1-1,I2, I3+1) + > + U(I1+1,I2, I3-1) + U(I1+1,I2, I3+1) ) + > -A(3)*( U(I1-1,I2-1,I3-1) + U(I1+1,I2-1,I3-1) + > + U(I1-1,I2+1,I3-1) + U(I1+1,I2+1,I3-1) + > + U(I1-1,I2-1,I3+1) + U(I1+1,I2-1,I3+1) + > + U(I1-1,I2+1,I3+1) + U(I1+1,I2+1,I3+1) ) +C + RETURN + END +! we want to check that predictive commoning did something on the +! vectorized loop, which means we have to have exactly 13 vector +! additions. +! { dg-final { scan-tree-dump-times "vect_var\[^\\n\]*\\+ " 13 "optimized" } } +! { dg-final { cleanup-tree-dump "vect" } } +! { dg-final { cleanup-tree-dump "optimized" } } diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr42781.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/pr42781.f90 new file mode 100644 index 00000000000..95228506345 --- /dev/null +++ b/gcc/testsuite/gfortran.fortran-torture/compile/pr42781.f90 @@ -0,0 +1,59 @@ +! ICE with gfortran 4.5 at -O1: +!gfcbug98.f90: In function ‘convert_cof’: +!gfcbug98.f90:36:0: internal compiler error: in pt_solutions_same_restrict_base, +!at tree-ssa-structalias.c:5072 +module foo + implicit none + type t_time + integer :: secs = 0 + end type t_time +contains + elemental function time_cyyyymmddhh (cyyyymmddhh) result (time) + type (t_time) :: time + character(len=10),intent(in) :: cyyyymmddhh + end function time_cyyyymmddhh + + function nf90_open(path, mode, ncid) + character(len = *), intent(in) :: path + integer, intent(in) :: mode + integer, intent(out) :: ncid + integer :: nf90_open + end function nf90_open +end module foo +!============================================================================== +module gfcbug98 + use foo + implicit none + + type t_fileinfo + character(len=10) :: atime = ' ' + end type t_fileinfo + + type t_body + real :: bg(10) + end type t_body +contains + subroutine convert_cof (ifile) + character(len=*) ,intent(in) :: ifile + + character(len=5) :: version + type(t_fileinfo) :: gattr + type(t_time) :: atime + type(t_body),allocatable :: tmp_dat(:) + real ,allocatable :: BDA(:, :, :) + + call open_input + call convert_data + contains + subroutine open_input + integer :: i,j + version = '' + j = nf90_open(ifile, 1, i) + end subroutine open_input + !-------------------------------------------------------------------------- + subroutine convert_data + BDA(1,:,1) = tmp_dat(1)% bg(:) + atime = time_cyyyymmddhh (gattr% atime) + end subroutine convert_data + end subroutine convert_cof +end module gfcbug98 diff --git a/gcc/toplev.c b/gcc/toplev.c index 51d4a2a313f..c7a6a63f6c6 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1524,20 +1524,20 @@ option_affects_pch_p (int option, struct cl_option_state *state) most targets, but completely right for very few. */ void * -default_get_pch_validity (size_t *len) +default_get_pch_validity (size_t *sz) { struct cl_option_state state; size_t i; char *result, *r; - *len = 2; + *sz = 2; if (targetm.check_pch_target_flags) - *len += sizeof (target_flags); + *sz += sizeof (target_flags); for (i = 0; i < cl_options_count; i++) if (option_affects_pch_p (i, &state)) - *len += state.size; + *sz += state.size; - result = r = XNEWVEC (char, *len); + result = r = XNEWVEC (char, *sz); r[0] = flag_pic; r[1] = flag_pie; r += 2; diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 0a3d544eece..d9276981eea 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -6937,7 +6937,7 @@ gimple_execute_on_growing_pred (edge e) { basic_block bb = e->dest; - if (phi_nodes (bb)) + if (!gimple_seq_empty_p (phi_nodes (bb))) reserve_phi_args_for_new_edge (bb); } @@ -6947,7 +6947,7 @@ gimple_execute_on_growing_pred (edge e) static void gimple_execute_on_shrinking_pred (edge e) { - if (phi_nodes (e->dest)) + if (!gimple_seq_empty_p (phi_nodes (e->dest))) remove_phi_args (e); } diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c index 5904407a35b..201298dc535 100644 --- a/gcc/tree-cfgcleanup.c +++ b/gcc/tree-cfgcleanup.c @@ -875,7 +875,7 @@ merge_phi_nodes (void) /* We have to feed into another basic block with PHI nodes. */ - if (!phi_nodes (dest) + if (gimple_seq_empty_p (phi_nodes (dest)) /* We don't want to deal with a basic block with abnormal edges. */ || has_abnormal_incoming_edge_p (bb)) diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index dbdd3237d5e..9f5a623b2fa 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -79,6 +79,7 @@ along with GCC; see the file COPYING3. If not see #include "coretypes.h" #include "tm.h" #include "ggc.h" +#include "flags.h" #include "tree.h" /* These RTL headers are needed for basic-block.h. */ @@ -380,6 +381,19 @@ dump_data_dependence_relation (FILE *outf, if (!ddr || DDR_ARE_DEPENDENT (ddr) == chrec_dont_know) { + if (ddr) + { + dra = DDR_A (ddr); + drb = DDR_B (ddr); + if (dra) + dump_data_reference (outf, dra); + else + fprintf (outf, " (nil)\n"); + if (drb) + dump_data_reference (outf, drb); + else + fprintf (outf, " (nil)\n"); + } fprintf (outf, " (don't know)\n)\n"); return; } @@ -631,6 +645,24 @@ split_constant_offset_1 (tree type, tree op0, enum tree_code code, tree op1, return split_constant_offset_1 (type, var0, subcode, var1, var, off); } + CASE_CONVERT: + { + /* We must not introduce undefined overflow, and we must not change the value. + Hence we're okay if the inner type doesn't overflow to start with + (pointer or signed), the outer type also is an integer or pointer + and the outer precision is at least as large as the inner. */ + tree itype = TREE_TYPE (op0); + if ((POINTER_TYPE_P (itype) + || (INTEGRAL_TYPE_P (itype) && TYPE_OVERFLOW_UNDEFINED (itype))) + && TYPE_PRECISION (type) >= TYPE_PRECISION (itype) + && (POINTER_TYPE_P (type) || INTEGRAL_TYPE_P (type))) + { + split_constant_offset (op0, &var0, off); + *var = fold_convert (type, var0); + return true; + } + return false; + } default: return false; diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index d7e515a4d1b..e08842ca829 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -3310,6 +3310,12 @@ estimate_num_insns (gimple stmt, eni_weights *weights) cost = weights->target_builtin_call_cost; break; + /* Exception state returns or moves registers around. */ + case BUILT_IN_EH_FILTER: + case BUILT_IN_EH_POINTER: + case BUILT_IN_EH_COPY_VALUES: + return 0; + default: break; } diff --git a/gcc/tree-outof-ssa.c b/gcc/tree-outof-ssa.c index a82cec824fd..32aa464948b 100644 --- a/gcc/tree-outof-ssa.c +++ b/gcc/tree-outof-ssa.c @@ -956,6 +956,8 @@ trivially_conflicts_p (basic_block bb, tree result, tree arg) FOR_EACH_IMM_USE_FAST (use, imm_iter, result) { gimple use_stmt = USE_STMT (use); + if (is_gimple_debug (use_stmt)) + continue; /* Now, if there's a use of RESULT that lies outside this basic block, then there surely is a conflict with ARG. */ if (gimple_bb (use_stmt) != bb) diff --git a/gcc/tree-predcom.c b/gcc/tree-predcom.c index 78d45b88364..ae59cd9fe79 100644 --- a/gcc/tree-predcom.c +++ b/gcc/tree-predcom.c @@ -1180,6 +1180,7 @@ determine_roots_comp (struct loop *loop, unsigned i; dref a; chain_p chain = NULL; + double_int last_ofs = double_int_zero; /* Invariants are handled specially. */ if (comp->comp_step == RS_INVARIANT) @@ -1194,13 +1195,20 @@ determine_roots_comp (struct loop *loop, for (i = 0; VEC_iterate (dref, comp->refs, i, a); i++) { - if (!chain || !DR_IS_READ (a->ref)) + if (!chain || !DR_IS_READ (a->ref) + || double_int_ucmp (uhwi_to_double_int (MAX_DISTANCE), + double_int_add (a->offset, + double_int_neg (last_ofs))) <= 0) { if (nontrivial_chain_p (chain)) - VEC_safe_push (chain_p, heap, *chains, chain); + { + add_looparound_copies (loop, chain); + VEC_safe_push (chain_p, heap, *chains, chain); + } else release_chain (chain); chain = make_rooted_chain (a); + last_ofs = a->offset; continue; } @@ -1338,9 +1346,11 @@ ref_at_iteration (struct loop *loop, tree ref, int iter) else if (!INDIRECT_REF_P (ref)) return unshare_expr (ref); - if (TREE_CODE (ref) == INDIRECT_REF) + if (INDIRECT_REF_P (ref)) { - ret = build1 (INDIRECT_REF, TREE_TYPE (ref), NULL_TREE); + /* Take care for INDIRECT_REF and MISALIGNED_INDIRECT_REF at + the same time. */ + ret = copy_node (ref); idx = TREE_OPERAND (ref, 0); idx_p = &TREE_OPERAND (ret, 0); } @@ -1879,7 +1889,6 @@ base_names_in_chain_on (struct loop *loop, tree name, tree var) { gimple stmt, phi; imm_use_iterator iter; - edge e; SSA_NAME_VAR (name) = var; @@ -1898,11 +1907,6 @@ base_names_in_chain_on (struct loop *loop, tree name, tree var) if (!phi) return; - if (gimple_bb (phi) == loop->header) - e = loop_latch_edge (loop); - else - e = single_pred_edge (gimple_bb (stmt)); - name = PHI_RESULT (phi); SSA_NAME_VAR (name) = var; } @@ -2205,11 +2209,17 @@ reassociate_to_the_same_stmt (tree name1, tree name2) /* Insert the new statement combining NAME1 and NAME2 before S1, and combine it with the rhs of S1. */ var = create_tmp_var (type, "predreastmp"); + if (TREE_CODE (type) == COMPLEX_TYPE + || TREE_CODE (type) == VECTOR_TYPE) + DECL_GIMPLE_REG_P (var) = 1; add_referenced_var (var); new_name = make_ssa_name (var, NULL); new_stmt = gimple_build_assign_with_ops (code, new_name, name1, name2); var = create_tmp_var (type, "predreastmp"); + if (TREE_CODE (type) == COMPLEX_TYPE + || TREE_CODE (type) == VECTOR_TYPE) + DECL_GIMPLE_REG_P (var) = 1; add_referenced_var (var); tmp_name = make_ssa_name (var, NULL); diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c index cdb64323b41..4e3499aa6e1 100644 --- a/gcc/tree-ssa-dce.c +++ b/gcc/tree-ssa-dce.c @@ -917,27 +917,6 @@ remove_dead_phis (basic_block bb) return something_changed; } -/* Find first live post dominator of BB. */ - -static basic_block -get_live_post_dom (basic_block bb) -{ - basic_block post_dom_bb; - - - /* The post dominance info has to be up-to-date. */ - gcc_assert (dom_info_state (CDI_POST_DOMINATORS) == DOM_OK); - - /* Get the immediate post dominator of bb. */ - post_dom_bb = get_immediate_dominator (CDI_POST_DOMINATORS, bb); - /* And look for first live one. */ - while (post_dom_bb != EXIT_BLOCK_PTR - && !TEST_BIT (bb_contains_live_stmts, post_dom_bb->index)) - post_dom_bb = get_immediate_dominator (CDI_POST_DOMINATORS, post_dom_bb); - - return post_dom_bb; -} - /* Forward edge E to respective POST_DOM_BB and update PHIs. */ static edge @@ -958,13 +937,12 @@ forward_edge_to_pdom (edge e, basic_block post_dom_bb) if (e2 != e) return e2; - if (phi_nodes (post_dom_bb)) + if (!gimple_seq_empty_p (phi_nodes (post_dom_bb))) { /* We are sure that for every live PHI we are seeing control dependent BB. - This means that we can look up the end of control dependent path leading - to the PHI itself. */ + This means that we can pick any edge to duplicate PHI args from. */ FOR_EACH_EDGE (e2, ei, post_dom_bb->preds) - if (e2 != e && dominated_by_p (CDI_POST_DOMINATORS, e->src, e2->src)) + if (e2 != e) break; for (gsi = gsi_start_phis (post_dom_bb); !gsi_end_p (gsi);) { @@ -972,40 +950,27 @@ forward_edge_to_pdom (edge e, basic_block post_dom_bb) tree op; source_location locus; - /* Dead PHI do not imply control dependency. */ - if (!gimple_plf (phi, STMT_NECESSARY) - && is_gimple_reg (gimple_phi_result (phi))) - { - gsi_next (&gsi); - continue; - } - if (gimple_phi_arg_def (phi, e->dest_idx)) - { - gsi_next (&gsi); - continue; - } - - /* We didn't find edge to update. This can happen for PHIs on virtuals - since there is no control dependency relation on them. We are lost - here and must force renaming of the symbol. */ + /* PHIs for virtuals have no control dependency relation on them. + We are lost here and must force renaming of the symbol. */ if (!is_gimple_reg (gimple_phi_result (phi))) { mark_virtual_phi_result_for_renaming (phi); remove_phi_node (&gsi, true); continue; } - if (!e2) - { - op = gimple_phi_arg_def (phi, e->dest_idx == 0 ? 1 : 0); - locus = gimple_phi_arg_location (phi, e->dest_idx == 0 ? 1 : 0); - } - else + + /* Dead PHI do not imply control dependency. */ + if (!gimple_plf (phi, STMT_NECESSARY)) { - op = gimple_phi_arg_def (phi, e2->dest_idx); - locus = gimple_phi_arg_location (phi, e2->dest_idx); + gsi_next (&gsi); + continue; } + + op = gimple_phi_arg_def (phi, e2->dest_idx); + locus = gimple_phi_arg_location (phi, e2->dest_idx); add_phi_arg (phi, op, e, locus); - gcc_assert (e2 || degenerate_phi_p (phi)); + /* The resulting PHI if not dead can only be degenerate. */ + gcc_assert (degenerate_phi_p (phi)); gsi_next (&gsi); } } @@ -1041,7 +1006,7 @@ remove_dead_stmt (gimple_stmt_iterator *i, basic_block bb) edge e, e2; edge_iterator ei; - post_dom_bb = get_live_post_dom (bb); + post_dom_bb = get_immediate_dominator (CDI_POST_DOMINATORS, bb); e = find_edge (bb, post_dom_bb); diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index cafebe67770..c1e5cd7c701 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -1823,7 +1823,7 @@ phi_translate_set (bitmap_set_t dest, bitmap_set_t set, basic_block pred, pre_expr expr; int i; - if (!phi_nodes (phiblock)) + if (gimple_seq_empty_p (phi_nodes (phiblock))) { bitmap_set_copy (dest, set); return; @@ -2269,14 +2269,14 @@ compute_antic_aux (basic_block block, bool block_has_abnormal_pred_edge) goto maybe_dump_sets; } - if (phi_nodes (first)) + if (!gimple_seq_empty_p (phi_nodes (first))) phi_translate_set (ANTIC_OUT, ANTIC_IN (first), block, first); else bitmap_set_copy (ANTIC_OUT, ANTIC_IN (first)); for (i = 0; VEC_iterate (basic_block, worklist, i, bprime); i++) { - if (phi_nodes (bprime)) + if (!gimple_seq_empty_p (phi_nodes (bprime))) { bitmap_set_t tmp = bitmap_set_new (); phi_translate_set (tmp, ANTIC_IN (bprime), block, bprime); @@ -2426,7 +2426,7 @@ compute_partial_antic_aux (basic_block block, FOR_EACH_EXPR_ID_IN_SET (ANTIC_IN (bprime), i, bi) bitmap_value_insert_into_set (PA_OUT, expression_for_id (i)); - if (phi_nodes (bprime)) + if (!gimple_seq_empty_p (phi_nodes (bprime))) { bitmap_set_t pa_in = bitmap_set_new (); phi_translate_set (pa_in, PA_IN (bprime), block, bprime); diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 753eefee909..3db28745f1a 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -4776,18 +4776,19 @@ set_uids_in_ptset (bitmap into, bitmap from, struct pt_solution *pt) /* Compute the points-to solution *PT for the variable VI. */ static void -find_what_var_points_to (varinfo_t vi, struct pt_solution *pt) +find_what_var_points_to (varinfo_t orig_vi, struct pt_solution *pt) { unsigned int i; bitmap_iterator bi; bitmap finished_solution; bitmap result; + varinfo_t vi; memset (pt, 0, sizeof (struct pt_solution)); /* This variable may have been collapsed, let's get the real variable. */ - vi = get_varinfo (find (vi->id)); + vi = get_varinfo (find (orig_vi->id)); /* Translate artificial variables into SSA_NAME_PTR_INFO attributes. */ @@ -4822,7 +4823,7 @@ find_what_var_points_to (varinfo_t vi, struct pt_solution *pt) /* Instead of doing extra work, simply do not create elaborate points-to information for pt_anything pointers. */ if (pt->anything - && (vi->is_artificial_var + && (orig_vi->is_artificial_var || !pt->vars_contains_restrict)) return; diff --git a/gcc/tree-ssa-uncprop.c b/gcc/tree-ssa-uncprop.c index 8e7715431f4..96c08d3c8f2 100644 --- a/gcc/tree-ssa-uncprop.c +++ b/gcc/tree-ssa-uncprop.c @@ -456,7 +456,7 @@ uncprop_into_successor_phis (basic_block bb) /* If there are no PHI nodes in this destination, then there is no sense in recording any equivalences. */ - if (!phis) + if (gimple_seq_empty_p (phis)) continue; /* Record any equivalency associated with E. */ diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index 89918535372..37ae9b5e3bf 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -294,7 +294,7 @@ vect_update_interleaving_chain (struct data_reference *drb, static bool vect_equal_offsets (tree offset1, tree offset2) { - bool res0, res1; + bool res; STRIP_NOPS (offset1); STRIP_NOPS (offset2); @@ -303,16 +303,19 @@ vect_equal_offsets (tree offset1, tree offset2) return true; if (TREE_CODE (offset1) != TREE_CODE (offset2) - || !BINARY_CLASS_P (offset1) - || !BINARY_CLASS_P (offset2)) + || (!BINARY_CLASS_P (offset1) && !UNARY_CLASS_P (offset1))) return false; - res0 = vect_equal_offsets (TREE_OPERAND (offset1, 0), - TREE_OPERAND (offset2, 0)); - res1 = vect_equal_offsets (TREE_OPERAND (offset1, 1), - TREE_OPERAND (offset2, 1)); + res = vect_equal_offsets (TREE_OPERAND (offset1, 0), + TREE_OPERAND (offset2, 0)); - return (res0 && res1); + if (!res || !BINARY_CLASS_P (offset1)) + return res; + + res = vect_equal_offsets (TREE_OPERAND (offset1, 1), + TREE_OPERAND (offset2, 1)); + + return res; } diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c index a0d3ce57cab..f4056b05891 100644 --- a/gcc/tree-vect-loop-manip.c +++ b/gcc/tree-vect-loop-manip.c @@ -1961,7 +1961,8 @@ vect_do_peeling_for_loop_bound (loop_vec_info loop_vinfo, tree *ratio, use TYPE_VECTOR_SUBPARTS. */ static tree -vect_gen_niters_for_prolog_loop (loop_vec_info loop_vinfo, tree loop_niters) +vect_gen_niters_for_prolog_loop (loop_vec_info loop_vinfo, tree loop_niters, + tree *wide_prolog_niters) { struct data_reference *dr = LOOP_VINFO_UNALIGNED_DR (loop_vinfo); struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo); @@ -2045,6 +2046,19 @@ vect_gen_niters_for_prolog_loop (loop_vec_info loop_vinfo, tree loop_niters) add_referenced_var (var); stmts = NULL; iters_name = force_gimple_operand (iters, &stmts, false, var); + if (types_compatible_p (sizetype, niters_type)) + *wide_prolog_niters = iters_name; + else + { + gimple_seq seq = NULL; + tree wide_iters = fold_convert (sizetype, iters); + var = create_tmp_var (sizetype, "prolog_loop_niters"); + add_referenced_var (var); + *wide_prolog_niters = force_gimple_operand (wide_iters, &seq, false, + var); + if (seq) + gimple_seq_add_seq (&stmts, seq); + } /* Insert stmt on loop preheader edge. */ if (stmts) @@ -2115,6 +2129,7 @@ vect_do_peeling_for_alignment (loop_vec_info loop_vinfo) struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo); tree niters_of_prolog_loop, ni_name; tree n_iters; + tree wide_prolog_niters; struct loop *new_loop; unsigned int th = 0; int min_profitable_iters; @@ -2125,7 +2140,8 @@ vect_do_peeling_for_alignment (loop_vec_info loop_vinfo) initialize_original_copy_tables (); ni_name = vect_build_loop_niters (loop_vinfo, NULL); - niters_of_prolog_loop = vect_gen_niters_for_prolog_loop (loop_vinfo, ni_name); + niters_of_prolog_loop = vect_gen_niters_for_prolog_loop (loop_vinfo, ni_name, + &wide_prolog_niters); /* Get profitability threshold for vectorized loop. */ @@ -2150,7 +2166,7 @@ vect_do_peeling_for_alignment (loop_vec_info loop_vinfo) TREE_TYPE (n_iters), n_iters, niters_of_prolog_loop); /* Update the init conditions of the access functions of all data refs. */ - vect_update_inits_of_drs (loop_vinfo, niters_of_prolog_loop); + vect_update_inits_of_drs (loop_vinfo, wide_prolog_niters); /* After peeling we have to reset scalar evolution analyzer. */ scev_reset (); diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index f160cb458b4..9e17eb36670 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -981,7 +981,7 @@ vect_analyze_loop_form (struct loop *loop) before the loop if needed), where the loop header contains all the executable statements, and the latch is empty. */ if (!empty_block_p (loop->latch) - || phi_nodes (loop->latch)) + || !gimple_seq_empty_p (phi_nodes (loop->latch))) { if (vect_print_dump_info (REPORT_BAD_FORM_LOOPS)) fprintf (vect_dump, "not vectorized: unexpected loop form."); diff --git a/gcc/tree.c b/gcc/tree.c index 7fa7649d2f9..5d44841769f 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -1983,6 +1983,18 @@ fields_length (const_tree type) return count; } +/* Returns the first FIELD_DECL in the TYPE_FIELDS of the RECORD_TYPE or + UNION_TYPE TYPE, or NULL_TREE if none. */ + +tree +first_field (const_tree type) +{ + tree t = TYPE_FIELDS (type); + while (t && TREE_CODE (t) != FIELD_DECL) + t = TREE_CHAIN (t); + return t; +} + /* Concatenate two chains of nodes (chained through TREE_CHAIN) by modifying the last node in chain 1 to point to chain 2. This is the Lisp primitive `nconc'. */ diff --git a/gcc/tree.def b/gcc/tree.def index 60ac1ade865..cb36f40f874 100644 --- a/gcc/tree.def +++ b/gcc/tree.def @@ -567,11 +567,11 @@ DEFTREECODE (WITH_CLEANUP_EXPR, "with_cleanup_expr", tcc_expression, 1) BLKmode, because it will not be forced out of memory. */ DEFTREECODE (CLEANUP_POINT_EXPR, "cleanup_point_expr", tcc_expression, 1) -/* The following two codes are used in languages that have types where - some field in an object of the type contains a value that is used in - the computation of another field's offset or size and/or the size of - the type. The positions and/or sizes of fields can vary from object - to object of the same type or even for one and the same object within +/* The following code is used in languages that have types where some + field in an object of the type contains a value that is used in the + computation of another field's offset or size and/or the size of the + type. The positions and/or sizes of fields can vary from object to + object of the same type or even for one and the same object within its scope. Record types with discriminants in Ada or schema types in Pascal are diff --git a/gcc/tree.h b/gcc/tree.h index a0e1f677761..f5827d59f89 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -2251,16 +2251,18 @@ extern enum machine_mode vector_type_mode (const_tree); #define TYPE_NEEDS_CONSTRUCTING(NODE) \ (TYPE_CHECK (NODE)->type.needs_constructing_flag) -/* Indicates that objects of this type (a UNION_TYPE), should be passed - the same way that the first union alternative would be passed. */ -#define TYPE_TRANSPARENT_UNION(NODE) \ - (UNION_TYPE_CHECK (NODE)->type.transparent_union_flag) +/* Indicates that a UNION_TYPE object should be passed the same way that + the first union alternative would be passed, or that a RECORD_TYPE + object should be passed the same way that the first (and only) member + would be passed. */ +#define TYPE_TRANSPARENT_AGGR(NODE) \ + (RECORD_OR_UNION_CHECK (NODE)->type.transparent_aggr_flag) /* For an ARRAY_TYPE, indicates that it is not permitted to take the address of a component of the type. This is the counterpart of DECL_NONADDRESSABLE_P for arrays, see the definition of this flag. */ #define TYPE_NONALIASED_COMPONENT(NODE) \ - (ARRAY_TYPE_CHECK (NODE)->type.transparent_union_flag) + (ARRAY_TYPE_CHECK (NODE)->type.transparent_aggr_flag) /* Indicated that objects of this type should be laid out in as compact a way as possible. */ @@ -2285,7 +2287,7 @@ struct GTY(()) tree_type { unsigned int precision : 10; unsigned no_force_blk_flag : 1; unsigned needs_constructing_flag : 1; - unsigned transparent_union_flag : 1; + unsigned transparent_aggr_flag : 1; unsigned restrict_flag : 1; unsigned contains_placeholder_bits : 2; @@ -4360,6 +4362,10 @@ extern int list_length (const_tree); extern int fields_length (const_tree); +/* Returns the first FIELD_DECL in a type. */ + +extern tree first_field (const_tree); + /* Given an initializer INIT, return TRUE if INIT is zero or some aggregate of zeros. Otherwise return FALSE. */ diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c index 28373c20bd8..3cf3189bb4f 100644 --- a/gcc/unwind-dw2.c +++ b/gcc/unwind-dw2.c @@ -1,6 +1,6 @@ /* DWARF2 exception handling and frame unwind runtime interface routines. Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, - 2008, 2009 Free Software Foundation, Inc. + 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GCC. @@ -765,7 +765,7 @@ execute_stack_op (const unsigned char *op_ptr, const unsigned char *op_end, result = second - first; break; case DW_OP_mod: - result = (_Unwind_Sword) second % (_Unwind_Sword) first; + result = second % first; break; case DW_OP_mul: result = second * first; diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index e5f95d97fcf..79e8d560895 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -106,9 +106,17 @@ #include "expr.h" #include "timevar.h" #include "tree-pass.h" +#include "tree-flow.h" #include "cselib.h" #include "target.h" +/* var-tracking.c assumes that tree code with the same value as VALUE rtx code + has no chance to appear in REG_EXPR/MEM_EXPRs and isn't a decl. + Currently the value is the same as IDENTIFIER_NODE, which has such + a property. If this compile time assertion ever fails, make sure that + the new tree code that equals (int) VALUE has the same property. */ +extern char check_value_val[(int) VALUE == (int) IDENTIFIER_NODE ? 1 : -1]; + /* Type of micro operation. */ enum micro_operation_type { @@ -446,8 +454,8 @@ static bool compute_bb_dataflow (basic_block); static void vt_find_locations (void); static void dump_attrs_list (attrs); -static int dump_variable_slot (void **, void *); -static void dump_variable (variable); +static int dump_var_slot (void **, void *); +static void dump_var (variable); static void dump_vars (htab_t); static void dump_dataflow_set (dataflow_set *); static void dump_dataflow_sets (void); @@ -722,26 +730,7 @@ adjust_stack_reference (rtx mem, HOST_WIDE_INT adjustment) static inline bool dv_is_decl_p (decl_or_value dv) { - if (!dv) - return true; - - /* Make sure relevant codes don't overlap. */ - switch ((int)TREE_CODE ((tree)dv)) - { - case (int)VAR_DECL: - case (int)PARM_DECL: - case (int)RESULT_DECL: - case (int)FUNCTION_DECL: - case (int)DEBUG_EXPR_DECL: - case (int)COMPONENT_REF: - return true; - - case (int)VALUE: - return false; - - default: - gcc_unreachable (); - } + return !dv || (int) TREE_CODE ((tree) dv) != (int) VALUE; } /* Return true if a decl_or_value is a VALUE rtl. */ @@ -755,7 +744,9 @@ dv_is_value_p (decl_or_value dv) static inline tree dv_as_decl (decl_or_value dv) { +#ifdef ENABLE_CHECKING gcc_assert (dv_is_decl_p (dv)); +#endif return (tree) dv; } @@ -763,7 +754,9 @@ dv_as_decl (decl_or_value dv) static inline rtx dv_as_value (decl_or_value dv) { +#ifdef ENABLE_CHECKING gcc_assert (dv_is_value_p (dv)); +#endif return (rtx)dv; } @@ -809,7 +802,9 @@ dv_from_decl (tree decl) { decl_or_value dv; dv = decl; +#ifdef ENABLE_CHECKING gcc_assert (dv_is_decl_p (dv)); +#endif return dv; } @@ -819,7 +814,9 @@ dv_from_value (rtx value) { decl_or_value dv; dv = value; +#ifdef ENABLE_CHECKING gcc_assert (dv_is_value_p (dv)); +#endif return dv; } @@ -3716,13 +3713,32 @@ find_mem_expr_in_1pdv (tree expr, rtx val, htab_t vars) return where; } +/* Return TRUE if the value of MEM may vary across a call. */ + +static bool +mem_dies_at_call (rtx mem) +{ + tree expr = MEM_EXPR (mem); + tree decl; + + if (!expr) + return true; + + decl = get_base_address (expr); + + if (!decl) + return true; + + if (!DECL_P (decl)) + return true; + + return (may_be_aliased (decl) + || (!TREE_READONLY (decl) && is_global_var (decl))); +} + /* Remove all MEMs from the location list of a hash table entry for a one-part variable, except those whose MEM attributes map back to - the variable itself, directly or within a VALUE. - - ??? We could also preserve MEMs that reference stack slots that are - annotated as not addressable. This is arguably even more reliable - than the current heuristic. */ + the variable itself, directly or within a VALUE. */ static int dataflow_set_preserve_mem_locs (void **slot, void *data) @@ -3744,16 +3760,18 @@ dataflow_set_preserve_mem_locs (void **slot, void *data) { for (loc = var->var_part[0].loc_chain; loc; loc = loc->next) { - /* We want to remove a MEM that doesn't refer to DECL. */ + /* We want to remove dying MEMs that doesn't refer to + DECL. */ if (GET_CODE (loc->loc) == MEM && (MEM_EXPR (loc->loc) != decl - || MEM_OFFSET (loc->loc))) + || MEM_OFFSET (loc->loc)) + && !mem_dies_at_call (loc->loc)) break; - /* We want to move here a MEM that does refer to DECL. */ + /* We want to move here MEMs that do refer to DECL. */ else if (GET_CODE (loc->loc) == VALUE && find_mem_expr_in_1pdv (decl, loc->loc, shared_hash_htab (set->vars))) - break; + break; } if (!loc) @@ -3790,7 +3808,8 @@ dataflow_set_preserve_mem_locs (void **slot, void *data) if (GET_CODE (loc->loc) != MEM || (MEM_EXPR (loc->loc) == decl - && MEM_OFFSET (loc->loc) == 0)) + && MEM_OFFSET (loc->loc) == 0) + || !mem_dies_at_call (loc->loc)) { if (old_loc != loc->loc && emit_notes) { @@ -3838,7 +3857,8 @@ dataflow_set_remove_mem_locs (void **slot, void *data) if (var->refcount > 1 || shared_hash_shared (set->vars)) { for (loc = var->var_part[0].loc_chain; loc; loc = loc->next) - if (GET_CODE (loc->loc) == MEM) + if (GET_CODE (loc->loc) == MEM + && mem_dies_at_call (loc->loc)) break; if (!loc) @@ -3852,7 +3872,8 @@ dataflow_set_remove_mem_locs (void **slot, void *data) for (locp = &var->var_part[0].loc_chain, loc = *locp; loc; loc = *locp) { - if (GET_CODE (loc->loc) != MEM) + if (GET_CODE (loc->loc) != MEM + || !mem_dies_at_call (loc->loc)) { locp = &loc->next; continue; @@ -4034,7 +4055,7 @@ dataflow_set_different_1 (void **slot, void *data) if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "dataflow difference found: removal of:\n"); - dump_variable (var1); + dump_var (var1); } /* Stop traversing the hash table. */ @@ -4048,8 +4069,8 @@ dataflow_set_different_1 (void **slot, void *data) if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "dataflow difference found: old and new follow:\n"); - dump_variable (var1); - dump_variable (var2); + dump_var (var1); + dump_var (var2); } /* Stop traversing the hash table. */ @@ -4405,7 +4426,6 @@ static enum micro_operation_type use_type (rtx loc, struct count_use_info *cui, enum machine_mode *modep) { tree expr; - cselib_val *val; if (cui && cui->sets) { @@ -4426,19 +4446,24 @@ use_type (rtx loc, struct count_use_info *cui, enum machine_mode *modep) return MO_CLOBBER; } - if ((REG_P (loc) || MEM_P (loc)) - && (val = find_use_val (loc, GET_MODE (loc), cui))) + if (REG_P (loc) || MEM_P (loc)) { if (modep) *modep = GET_MODE (loc); if (cui->store_p) { if (REG_P (loc) - || cselib_lookup (XEXP (loc, 0), GET_MODE (loc), 0)) + || (find_use_val (loc, GET_MODE (loc), cui) + && cselib_lookup (XEXP (loc, 0), GET_MODE (loc), 0))) return MO_VAL_SET; } - else if (!cselib_preserved_value_p (val)) - return MO_VAL_USE; + else + { + cselib_val *val = find_use_val (loc, GET_MODE (loc), cui); + + if (val && !cselib_preserved_value_p (val)) + return MO_VAL_USE; + } } } @@ -4559,7 +4584,8 @@ count_uses (rtx *ploc, void *cuip) cselib_preserve_value (val); } else - gcc_assert (mopt == MO_VAL_LOC); + gcc_assert (mopt == MO_VAL_LOC + || (mopt == MO_VAL_SET && cui->store_p)); break; @@ -4947,6 +4973,9 @@ add_stores (rtx loc, const_rtx expr, void *cuip) v = find_use_val (oloc, mode, cui); + if (!v) + goto log_and_return; + resolve = preserve = !cselib_preserved_value_p (v); nloc = replace_expr_with_values (oloc); @@ -5703,11 +5732,11 @@ dump_attrs_list (attrs list) /* Print the information about variable *SLOT to dump file. */ static int -dump_variable_slot (void **slot, void *data ATTRIBUTE_UNUSED) +dump_var_slot (void **slot, void *data ATTRIBUTE_UNUSED) { variable var = (variable) *slot; - dump_variable (var); + dump_var (var); /* Continue traversing the hash table. */ return 1; @@ -5716,7 +5745,7 @@ dump_variable_slot (void **slot, void *data ATTRIBUTE_UNUSED) /* Print the information about variable VAR to dump file. */ static void -dump_variable (variable var) +dump_var (variable var) { int i; location_chain node; @@ -5763,7 +5792,7 @@ dump_vars (htab_t vars) if (htab_elements (vars) > 0) { fprintf (dump_file, "Variables:\n"); - htab_traverse (vars, dump_variable_slot, NULL); + htab_traverse (vars, dump_var_slot, NULL); } } diff --git a/gcc/varasm.c b/gcc/varasm.c index 7ed59055745..310647e7e2b 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -1,7 +1,7 @@ /* Output variables, constants and external declarations, for GNU compiler. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, - 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 - Free Software Foundation, Inc. + 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, + 2010 Free Software Foundation, Inc. This file is part of GCC. @@ -4093,6 +4093,9 @@ constructor_static_from_elts_p (const_tree ctor) && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (ctor))); } +static tree initializer_constant_valid_p_1 (tree value, tree endtype, + tree *cache); + /* A subroutine of initializer_constant_valid_p. VALUE is a MINUS_EXPR, PLUS_EXPR or POINTER_PLUS_EXPR. This looks for cases of VALUE which are valid when ENDTYPE is an integer of any size; in @@ -4102,7 +4105,7 @@ constructor_static_from_elts_p (const_tree ctor) returns NULL. */ static tree -narrowing_initializer_constant_valid_p (tree value, tree endtype) +narrowing_initializer_constant_valid_p (tree value, tree endtype, tree *cache) { tree op0, op1; @@ -4141,11 +4144,14 @@ narrowing_initializer_constant_valid_p (tree value, tree endtype) op1 = inner; } - op0 = initializer_constant_valid_p (op0, endtype); - op1 = initializer_constant_valid_p (op1, endtype); + op0 = initializer_constant_valid_p_1 (op0, endtype, cache); + if (!op0) + return NULL_TREE; + op1 = initializer_constant_valid_p_1 (op1, endtype, + cache ? cache + 2 : NULL); /* Both initializers must be known. */ - if (op0 && op1) + if (op1) { if (op0 == op1 && (op0 == null_pointer_node @@ -4166,7 +4172,8 @@ narrowing_initializer_constant_valid_p (tree value, tree endtype) return NULL_TREE; } -/* Return nonzero if VALUE is a valid constant-valued expression +/* Helper function of initializer_constant_valid_p. + Return nonzero if VALUE is a valid constant-valued expression for use in initializing a static variable; one that can be an element of a "constant" initializer. @@ -4174,10 +4181,12 @@ narrowing_initializer_constant_valid_p (tree value, tree endtype) if it is relocatable, return the variable that determines the relocation. We assume that VALUE has been folded as much as possible; therefore, we do not need to check for such things as - arithmetic-combinations of integers. */ + arithmetic-combinations of integers. -tree -initializer_constant_valid_p (tree value, tree endtype) + Use CACHE (pointer to 2 tree values) for caching if non-NULL. */ + +static tree +initializer_constant_valid_p_1 (tree value, tree endtype, tree *cache) { tree ret; @@ -4190,18 +4199,33 @@ initializer_constant_valid_p (tree value, tree endtype) tree elt; bool absolute = true; + if (cache && cache[0] == value) + return cache[1]; FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (value), idx, elt) { tree reloc; - reloc = initializer_constant_valid_p (elt, TREE_TYPE (elt)); + reloc = initializer_constant_valid_p_1 (elt, TREE_TYPE (elt), + NULL); if (!reloc) - return NULL_TREE; + { + if (cache) + { + cache[0] = value; + cache[1] = NULL_TREE; + } + return NULL_TREE; + } if (reloc != null_pointer_node) absolute = false; } /* For a non-absolute relocation, there is no single variable that can be "the variable that determines the relocation." */ + if (cache) + { + cache[0] = value; + cache[1] = absolute ? null_pointer_node : error_mark_node; + } return absolute ? null_pointer_node : error_mark_node; } @@ -4241,7 +4265,8 @@ initializer_constant_valid_p (tree value, tree endtype) } case NON_LVALUE_EXPR: - return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype); + return initializer_constant_valid_p_1 (TREE_OPERAND (value, 0), + endtype, cache); case VIEW_CONVERT_EXPR: { @@ -4256,13 +4281,13 @@ initializer_constant_valid_p (tree value, tree endtype) if (AGGREGATE_TYPE_P (src_type) && !AGGREGATE_TYPE_P (dest_type)) { if (TYPE_MODE (endtype) == TYPE_MODE (dest_type)) - return initializer_constant_valid_p (src, endtype); + return initializer_constant_valid_p_1 (src, endtype, cache); else return NULL_TREE; } /* Allow all other kinds of view-conversion. */ - return initializer_constant_valid_p (src, endtype); + return initializer_constant_valid_p_1 (src, endtype, cache); } CASE_CONVERT: @@ -4277,18 +4302,18 @@ initializer_constant_valid_p (tree value, tree endtype) || (FLOAT_TYPE_P (dest_type) && FLOAT_TYPE_P (src_type)) || (TREE_CODE (dest_type) == OFFSET_TYPE && TREE_CODE (src_type) == OFFSET_TYPE)) - return initializer_constant_valid_p (src, endtype); + return initializer_constant_valid_p_1 (src, endtype, cache); /* Allow length-preserving conversions between integer types. */ if (INTEGRAL_TYPE_P (dest_type) && INTEGRAL_TYPE_P (src_type) && (TYPE_PRECISION (dest_type) == TYPE_PRECISION (src_type))) - return initializer_constant_valid_p (src, endtype); + return initializer_constant_valid_p_1 (src, endtype, cache); /* Allow conversions between other integer types only if explicit value. */ if (INTEGRAL_TYPE_P (dest_type) && INTEGRAL_TYPE_P (src_type)) { - tree inner = initializer_constant_valid_p (src, endtype); + tree inner = initializer_constant_valid_p_1 (src, endtype, cache); if (inner == null_pointer_node) return null_pointer_node; break; @@ -4297,7 +4322,7 @@ initializer_constant_valid_p (tree value, tree endtype) /* Allow (int) &foo provided int is as wide as a pointer. */ if (INTEGRAL_TYPE_P (dest_type) && POINTER_TYPE_P (src_type) && (TYPE_PRECISION (dest_type) >= TYPE_PRECISION (src_type))) - return initializer_constant_valid_p (src, endtype); + return initializer_constant_valid_p_1 (src, endtype, cache); /* Likewise conversions from int to pointers, but also allow conversions from 0. */ @@ -4311,14 +4336,14 @@ initializer_constant_valid_p (tree value, tree endtype) if (integer_zerop (src)) return null_pointer_node; else if (TYPE_PRECISION (dest_type) <= TYPE_PRECISION (src_type)) - return initializer_constant_valid_p (src, endtype); + return initializer_constant_valid_p_1 (src, endtype, cache); } /* Allow conversions to struct or union types if the value inside is okay. */ if (TREE_CODE (dest_type) == RECORD_TYPE || TREE_CODE (dest_type) == UNION_TYPE) - return initializer_constant_valid_p (src, endtype); + return initializer_constant_valid_p_1 (src, endtype, cache); } break; @@ -4328,66 +4353,102 @@ initializer_constant_valid_p (tree value, tree endtype) with -frounding-math we hit this with addition of two constants. */ if (TREE_CODE (endtype) == REAL_TYPE) return NULL_TREE; + if (cache && cache[0] == value) + return cache[1]; if (! INTEGRAL_TYPE_P (endtype) || TYPE_PRECISION (endtype) >= TYPE_PRECISION (TREE_TYPE (value))) { - tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0), - endtype); - tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1), - endtype); + tree ncache[4] = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE }; + tree valid0 + = initializer_constant_valid_p_1 (TREE_OPERAND (value, 0), + endtype, ncache); + tree valid1 + = initializer_constant_valid_p_1 (TREE_OPERAND (value, 1), + endtype, ncache + 2); /* If either term is absolute, use the other term's relocation. */ if (valid0 == null_pointer_node) - return valid1; - if (valid1 == null_pointer_node) - return valid0; + ret = valid1; + else if (valid1 == null_pointer_node) + ret = valid0; + /* Support narrowing pointer differences. */ + else + ret = narrowing_initializer_constant_valid_p (value, endtype, + ncache); } - + else /* Support narrowing pointer differences. */ - ret = narrowing_initializer_constant_valid_p (value, endtype); - if (ret != NULL_TREE) - return ret; - - break; + ret = narrowing_initializer_constant_valid_p (value, endtype, NULL); + if (cache) + { + cache[0] = value; + cache[1] = ret; + } + return ret; case MINUS_EXPR: if (TREE_CODE (endtype) == REAL_TYPE) return NULL_TREE; + if (cache && cache[0] == value) + return cache[1]; if (! INTEGRAL_TYPE_P (endtype) || TYPE_PRECISION (endtype) >= TYPE_PRECISION (TREE_TYPE (value))) { - tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0), - endtype); - tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1), - endtype); + tree ncache[4] = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE }; + tree valid0 + = initializer_constant_valid_p_1 (TREE_OPERAND (value, 0), + endtype, ncache); + tree valid1 + = initializer_constant_valid_p_1 (TREE_OPERAND (value, 1), + endtype, ncache + 2); /* Win if second argument is absolute. */ if (valid1 == null_pointer_node) - return valid0; + ret = valid0; /* Win if both arguments have the same relocation. Then the value is absolute. */ - if (valid0 == valid1 && valid0 != 0) - return null_pointer_node; - + else if (valid0 == valid1 && valid0 != 0) + ret = null_pointer_node; /* Since GCC guarantees that string constants are unique in the generated code, a subtraction between two copies of the same constant string is absolute. */ - if (valid0 && TREE_CODE (valid0) == STRING_CST - && valid1 && TREE_CODE (valid1) == STRING_CST - && operand_equal_p (valid0, valid1, 1)) - return null_pointer_node; + else if (valid0 && TREE_CODE (valid0) == STRING_CST + && valid1 && TREE_CODE (valid1) == STRING_CST + && operand_equal_p (valid0, valid1, 1)) + ret = null_pointer_node; + /* Support narrowing differences. */ + else + ret = narrowing_initializer_constant_valid_p (value, endtype, + ncache); } - - /* Support narrowing differences. */ - ret = narrowing_initializer_constant_valid_p (value, endtype); - if (ret != NULL_TREE) - return ret; - - break; + else + /* Support narrowing differences. */ + ret = narrowing_initializer_constant_valid_p (value, endtype, NULL); + if (cache) + { + cache[0] = value; + cache[1] = ret; + } + return ret; default: break; } - return 0; + return NULL_TREE; +} + +/* Return nonzero if VALUE is a valid constant-valued expression + for use in initializing a static variable; one that can be an + element of a "constant" initializer. + + Return null_pointer_node if the value is absolute; + if it is relocatable, return the variable that determines the relocation. + We assume that VALUE has been folded as much as possible; + therefore, we do not need to check for such things as + arithmetic-combinations of integers. */ +tree +initializer_constant_valid_p (tree value, tree endtype) +{ + return initializer_constant_valid_p_1 (value, endtype, NULL); } /* Return true if VALUE is a valid constant-valued expression |