1. 28 Feb, 2018 1 commit
  2. 14 Jan, 2018 1 commit
    • rs6000-p8swap.c (rs6000_sum_of_two_registers_p): New function. · a3a821c9
      gcc/ChangeLog:
      
      2018-01-10  Kelvin Nilsen  <kelvin@gcc.gnu.org>
      
      	* config/rs6000/rs6000-p8swap.c (rs6000_sum_of_two_registers_p):
      	New function.
      	(rs6000_quadword_masked_address_p): Likewise.
      	(quad_aligned_load_p): Likewise.
      	(quad_aligned_store_p): Likewise.
      	(const_load_sequence_p): Add comment to describe the outer-most loop.
      	(mimic_memory_attributes_and_flags): New function.
      	(rs6000_gen_stvx): Likewise.
      	(replace_swapped_aligned_store): Likewise.
      	(rs6000_gen_lvx): Likewise.
      	(replace_swapped_aligned_load): Likewise.
      	(replace_swapped_load_constant): Capitalize argument name in
      	comment describing this function.
      	(rs6000_analyze_swaps): Add a third pass to search for vector loads
      	and stores that access quad-word aligned addresses and replace
      	with stvx or lvx instructions when appropriate.
      	* config/rs6000/rs6000-protos.h (rs6000_sum_of_two_registers_p):
      	New function prototype.
      	(rs6000_quadword_masked_address_p): Likewise.
      	(rs6000_gen_lvx): Likewise.
      	(rs6000_gen_stvx): Likewise.
      	* config/rs6000/vsx.md (*vsx_le_perm_load_<mode>): For modes
      	VSX_D (V2DF, V2DI), modify this split to select lvx instruction
      	when memory address is aligned.
      	(*vsx_le_perm_load_<mode>): For modes VSX_W (V4SF, V4SI), modify
      	this split to select lvx instruction when memory address is aligned.
      	(*vsx_le_perm_load_v8hi): Modify this split to select lvx
      	instruction when memory address is aligned.
      	(*vsx_le_perm_load_v16qi): Likewise.
      	(four unnamed splitters): Modify to select the stvx instruction
      	when memory is aligned.
      
      gcc/testsuite/ChangeLog:
      
      2018-01-10  Kelvin Nilsen  <kelvin@gcc.gnu.org>
      
      	* gcc.target/powerpc/pr48857.c: Modify dejagnu directives to look
      	for lvx and stvx instead of lxvd2x and stxvd2x and require
      	little-endian target.  Add comments.
      	* gcc.target/powerpc/swaps-p8-28.c: Add functions for more
      	comprehensive testing.
      	* gcc.target/powerpc/swaps-p8-29.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-30.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-31.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-32.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-33.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-34.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-35.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-36.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-37.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-38.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-39.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-40.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-41.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-42.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-43.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-44.c: Likewise.
      	* gcc.target/powerpc/swaps-p8-45.c: Likewise.
      	* gcc.target/powerpc/vec-extract-2.c: Add comment and remove
      	scan-assembler-not directives that forbid lvx and xxpermdi.
      	* gcc.target/powerpc/vec-extract-3.c: Likewise.
      	* gcc.target/powerpc/vec-extract-5.c: Likewise.
      	* gcc.target/powerpc/vec-extract-6.c: Likewise.
      	* gcc.target/powerpc/vec-extract-7.c: Likewise.
      	* gcc.target/powerpc/vec-extract-8.c: Likewise.
      	* gcc.target/powerpc/vec-extract-9.c: Likewise.
      	* gcc.target/powerpc/vsx-vector-6-le.c: Change
      	scan-assembler-times directives to reflect different numbers of
      	expected xxlnor, xxlor, xvcmpgtdp, and xxland instructions.
      
      libcpp/ChangeLog:
      
      2018-01-10  Kelvin Nilsen  <kelvin@gcc.gnu.org>
      
      	* lex.c (search_line_fast): Remove illegal coercion of an
      	unaligned pointer value to vector pointer type and replace with
      	use of __builtin_vec_vsx_ld () built-in function, which operates
      	on unaligned pointer values.
      
      From-SVN: r256656
      Kelvin Nilsen committed
  3. 03 Jan, 2018 1 commit
  4. 20 Dec, 2017 1 commit
  5. 13 Nov, 2017 1 commit
    • Implement __VA_OPT__ · fb771b9d
      This implements __VA_OPT__, a new preprocessor feature added in C++2A.
      The paper can be found here:
      
      http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0306r4.html
      
      gcc/ChangeLog
      
              * doc/cpp.texi (Variadic Macros): Document __VA_OPT__.
      
      gcc/testsuite/ChangeLog
      
              * c-c++-common/cpp/va-opt-pedantic.c: New file.
              * c-c++-common/cpp/va-opt.c: New file.
              * c-c++-common/cpp/va-opt-error.c: New file.
      
      libcpp/ChangeLog
      
              * pch.c (cpp_read_state): Set n__VA_OPT__.
              * macro.c (vaopt_state): New class.
              (_cpp_arguments_ok): Check va_opt flag.
              (replace_args, create_iso_definition): Use vaopt_state.
              * lex.c (lex_identifier_intern): Possibly issue errors for
              __VA_OPT__.
              (lex_identifier): Likewise.
              (maybe_va_opt_error): New function.
              * internal.h (struct lexer_state) <va_args_ok>: Update comment.
              (struct spec_nodes) <n__VA_OPT__>: New field.
              * init.c (struct lang_flags) <va_opt>: New field.
              (lang_defaults): Add entries for C++2A.  Update all entries for
              va_opt.
              (cpp_set_lang): Initialize va_opt.
              * include/cpplib.h (struct cpp_options) <va_opt>: New field.
              * identifiers.c (_cpp_init_hashtable): Initialize n__VA_OPT__.
      
      From-SVN: r254707
      Tom Tromey committed
  6. 06 Nov, 2017 1 commit
    • re PR c++/80955 (Macros expanded in definition of user-defined literals) · 7d19c460
      /libcpp
      2017-11-06  Mukesh Kapoor  <mukesh.kapoor@oracle.com>
      
      	PR c++/80955
      	* lex.c (lex_string): When checking for a valid macro for the
      	warning related to -Wliteral-suffix (CPP_W_LITERAL_SUFFIX),
      	check that the macro name does not start with an underscore
      	before calling is_macro().
      
      /gcc/testsuite
      2017-11-06  Mukesh Kapoor  <mukesh.kapoor@oracle.com>
      
      	PR c++/80955
      	* g++.dg/cpp0x/udlit-macros.C: New.
      
      From-SVN: r254443
      Mukesh Kapoor committed
  7. 05 Nov, 2017 1 commit
  8. 05 Jun, 2017 1 commit
    • libcpp: add callback for comment-handling · 05945a1b
      gcc/testsuite/ChangeLog:
      	* g++.dg/plugin/comment_plugin.c: New test plugin.
      	* g++.dg/plugin/comments-1.C: New test file.
      	* g++.dg/plugin/plugin.exp (plugin_test_list): Add the above.
      
      libcpp/ChangeLog:
      	* include/cpplib.h (struct cpp_callbacks): Add "comment"
      	callback.
      	* lex.c (_cpp_lex_direct): Call the comment callback if non-NULL.
      
      From-SVN: r248901
      David Malcolm committed
  9. 03 Apr, 2017 1 commit
    • Fix numerous typos in comments · 5764ee3c
      gcc:
      
      	* alias.c (base_alias_check): Fix typo in comment.
      	* cgraph.h (class ipa_polymorphic_call_context): Likewise.
      	* cgraphunit.c (symbol_table::compile): Likewise.
      	* collect2.c (maybe_run_lto_and_relink): Likewise.
      	* config/arm/arm.c (arm_thumb1_mi_thunk): Likewise.
      	* config/avr/avr-arch.h (avr_arch_info_t): Likewise.
      	* config/avr/avr.c (avr_map_op_t): Likewise.
      	* config/cr16/cr16.h (DATA_ALIGNMENT): Likewise.
      	* config/epiphany/epiphany.c (TARGET_ARG_PARTIAL_BYTES): Likewise.
      	* config/epiphany/epiphany.md (movcc): Likewise.
      	* config/i386/i386.c (legitimize_pe_coff_extern_decl): Likewise.
      	* config/m68k/m68k.c (struct _sched_ib, m68k_sched_variable_issue):
      	Likewise.
      	* config/mips/mips.c (mips_save_restore_reg): Likewise.
      	* config/rx/rx.c (rx_is_restricted_memory_address): Likewise.
      	* config/s390/s390.c (Z10_EARLYLOAD_DISTANCE): Likewise.
      	* config/sh/sh.c (sh_rtx_costs): Likewise.
      	* fold-const.c (fold_truth_andor): Likewise.
      	* genautomata.c (collapse_flag): Likewise.
      	* gengtype.h (struct type::u::s): Likewise.
      	* gensupport.c (has_subst_attribute, add_mnemonic_string): Likewise.
      	* input.c (FORMAT_AMOUNT): Likewise.
      	* ipa-cp.c (class ipcp_lattice, agg_replacements_to_vector)
      	(known_aggs_to_agg_replacement_list): Likewise.
      	* ipa-inline-analysis.c: Likewise.
      	* ipa-inline.h (estimate_edge_time, estimate_edge_hints): Likewise.
      	* ipa-polymorphic-call.c
      	(ipa_polymorphic_call_context::restrict_to_inner_class): Likewise.
      	* loop-unroll.c (analyze_insn_to_expand_var): Likewise.
      	* lra.c (lra_optional_reload_pseudos, lra_subreg_reload_pseudos):
      	Likewise.
      	* modulo-sched.c (apply_reg_moves): Likewise.
      	* omp-expand.c (build_omp_regions_1): Likewise.
      	* trans-mem.c (struct tm_wrapper_hasher): Likewise.
      	* tree-ssa-loop-ivopts.c (may_eliminate_iv): Likewise.
      	* tree-ssa-loop-niter.c (maybe_lower_iteration_bound): Likewise.
      	* tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Likewise.
      	* value-prof.c: Likewise.
      	* var-tracking.c (val_reset): Likewise.
      
      gcc/ada:
      
      	* doc/gnat_ugn/gnat_and_program_execution.rst: Fix typo.
      	* g-socket.adb (To_Host_Entry): Fix typo in comment.
      	* gnat_ugn.texi: Fix typo.
      	* raise.c (_gnat_builtin_longjmp): Fix capitalization in comment.
      	* s-stposu.adb (Allocate_Any_Controlled): Fix typo in comment.
      	* sem_ch3.adb (Build_Derived_Record_Type): Likewise.
      	* sem_util.adb (Mark_Coextensions): Likewise.
      	* sem_util.ads (Available_Full_View_Of_Component): Likewise.
      
      gcc/c:
      
      	* c-array-notation.c: Fix typo in comment.
      
      gcc/c-family:
      
      	* c-warn.c (do_warn_double_promotion): Fix typo in comment.
      
      gcc/cp:
      
              * class.c (update_vtable_entry_for_fn): Fix typo in comment.
      	* decl2.c (one_static_initialization_or_destruction): Likewise.
      	* name-lookup.c (store_bindings): Likewise.
      	* parser.c (make_call_declarator): Likewise.
      	* pt.c (check_explicit_specialization): Likewise.
      
      gcc/testsuite:
      
      	* g++.old-deja/g++.benjamin/scope02.C: Fix typo in comment.
      	* gcc.dg/20031012-1.c: Likewise.
      	* gcc.dg/ipa/ipcp-1.c: Likewise.
      	* gcc.dg/torture/matrix-3.c: Likewise.
      	* gcc.target/powerpc/ppc-spe.c: Likewise.
      	* gcc.target/rx/zero-width-bitfield.c: Likewise.
      
      libcpp:
      
      	* include/line-map.h (LINEMAPS_MACRO_MAPS): Fix typo in comment.
      	* lex.c (search_line_fast): Likewise.
      	* pch.h (cpp_valid_state): Likewise.
      
      libdecnumber:
      
      	* decCommon.c (decFloatFromPackedChecked): Fix typo in comment.
      	* decNumber.c (decNumberPower, decMultiplyOp): Likewise.
      
      libgcc:
      
      	* config/c6x/pr-support.c (__gnu_unwind_execute): Fix typo in comment.
      
      libitm:
      
      	* libitm_i.h (sutrct gtm_thread): Fix typo in comment.
      
      From-SVN: r246664
      Jonathan Wakely committed
  10. 21 Mar, 2017 1 commit
  11. 01 Jan, 2017 1 commit
  12. 15 Dec, 2016 1 commit
    • Fix use-after-free lexing unterminated raw strings (PR preprocessor/78811) · a3998c2f
      gcc/ChangeLog:
      	PR preprocessor/78680
      	PR preprocessor/78811
      	* input.c (struct selftest::lexer_test): Add field
      	m_implicitly_expect_EOF.
      	(selftest::lexer_error_sink): New class.
      	(selftest::lexer_error_sink::s_singleton): New global.
      	(selftest::lexer_test::lexer_test): Initialize new field
      	"m_implicitly_expect_EOF".
      	(selftest::lexer_test::~lexer_test): Conditionalize the
      	check for the EOF token on the new field.
      	(selftest::test_lexer_string_locations_raw_string_unterminated):
      	New function.
      	(selftest::input_c_tests): Call the new test.
      
      libcpp/ChangeLog:
      	PR preprocessor/78680
      	PR preprocessor/78811
      	* lex.c (_cpp_lex_direct): Only determine the end-location of
      	the token and build a range for non-reserved start locations.
      	Do not do it for EOF tokens.
      
      From-SVN: r243721
      David Malcolm committed
  13. 12 Dec, 2016 1 commit
    • re PR preprocessor/78680 (ICE in get_substring_ranges_for_loc, at input.c:1398) · 470a60b2
      Fix for PR preprocessor/78680
      
      PR preprocessor/78680 identifies a crash when attempting to issue
      a -Wformat warning, where the format string includes a string token
      split across multiple physical source lines via backslash-continued
      lines.
      
      The issue is that libcpp is generating bogus range information for
      such tokens.
      
      For example, in:
      
      void fn1() {
        __builtin_printf("\
           %ld.\n\
              2\n"); };
      
      the range of the string token is printed as:
      
         __builtin_printf("\
                          ^~
      
      whereas the range ought to be:
      
        __builtin_printf("\
                         ^~
           %ld.\n\
           ~~~~~~~
              2\n"); };
              ~~~~
      
      The root cause is that the line notes expressing the update
      of the buffer in lex.c aren't yet updated when the end-point of
      the token is computed
      
      3095	    tok_range.m_finish
      3096	      = linemap_position_for_column (pfile->line_table,
      3097					     CPP_BUF_COLUMN (buffer, buffer->cur));
      
      so that the physical line is still regarded as that of the start
      of the token, and, where CPP_BUF_COLUMN uses (BUF)->line_base,
      line_base is still the location of the first physical line in the
      and hence the column information is too large (as if it were the
      offset in the *logical* line).
      
      (the printed range is somewhat misleading; the actual buggy range
      extends beyond the "\ in the line, but within diagnostic-show-locus.c
      layout::print_annotation_line only prints up to the xbound set by
      layout::print_source_line and so truncates most of the buggy range).
      
      The fix is to ensure that line notes are handled before calculating
      the end-point of the token range.
      
      This leads to the range for the string token being correctly
      computed, as:
      
        __builtin_printf("\
                         ^~
           %ld.\n\
           ~~~~~~~
              2\n"); };
              ~~~~
      
      and this leads to get_substring_ranges_for_loc failing gracefully,
      rather than crashing.
      
      gcc/testsuite/ChangeLog:
      	PR preprocessor/78680
      	* gcc.dg/format/pr78680.c: New test case.
      	* gcc.dg/plugin/diagnostic-test-expressions-1.c
      	(test_multiline_token): New function.
      	* gcc.dg/plugin/diagnostic-test-string-literals-1.c
      	(test_backslash_continued_logical_lines): New function.
      
      libcpp/ChangeLog:
      	PR preprocessor/78680
      	* lex.c (_cpp_lex_direct): Ensure line notes are processed before
      	computing the end-point of the token.
      
      From-SVN: r243567
      David Malcolm committed
  14. 08 Nov, 2016 1 commit
  15. 11 Oct, 2016 1 commit
    • gcc/ · 70f6d5e1
      	* common.opt (Wimplicit-fallthrough) Turn into alias to
      	-Wimplicit-fallthrough=3.  Remove EnabledBy.
      	(Wimplicit-fallthrough=): New option.
      	* gimplify.c (warn_implicit_fallthrough_r): Use
      	OPT_Wimplicit_fallthrough_ instead of OPT_Wimplicit_fallthrough.
      	* doc/invoke.texi (-Wimplicit-fallthrough): Document as alias
      	to -Wimplicit-fallthrough=3.
      	(-Wimplicit-fallthrough=): Document.
      gcc/c-family/
      	* c.opt (Wextra): Add as C/C++/ObjC/ObjC++ option.
      	(Wimplicit-fallthrough=): Enable for these languages by -Wextra.
      	* c-opts.c (sanitize_cpp_opts): Initialize
      	cpp_opts->cpp_warn_implicit_fallthrough.
      gcc/testsuite/
      	* c-c++-common/Wimplicit-fallthrough-25.c: New test.
      	* c-c++-common/Wimplicit-fallthrough-26.c: New test.
      	* c-c++-common/Wimplicit-fallthrough-27.c: New test.
      	* c-c++-common/Wimplicit-fallthrough-28.c: New test.
      	* c-c++-common/Wimplicit-fallthrough-29.c: New test.
      	* c-c++-common/Wimplicit-fallthrough-30.c: New test.
      	* c-c++-common/Wimplicit-fallthrough-31.c: New test.
      	* c-c++-common/Wimplicit-fallthrough-32.c: New test.
      	* c-c++-common/Wimplicit-fallthrough-33.c: New test.
      libcpp/
      	* include/cpplib.h (struct cpp_options): Add
      	cpp_warn_implicit_fallthrough.
      	* init.c (cpp_create_reader): Initialize it to 0.
      	* lex.c (fallthrough_comment_p): Handle different
      	cpp_warn_implicit_fallthrough levels.  Whitespace fixes.
      
      From-SVN: r241013
      Jakub Jelinek committed
  16. 08 Oct, 2016 3 commits
  17. 05 Oct, 2016 1 commit
  18. 26 Sep, 2016 1 commit
  19. 12 Aug, 2016 1 commit
    • re PR c/7652 (-Wswitch-break : Warn if a switch case falls through) · 191816a3
      	PR c/7652
      gcc/
      	* alias.c (find_base_value): Adjust fall through comment.
      	* cfgexpand.c (expand_debug_expr): Likewise.
      	* combine.c (find_split_point): Likewise.
      	(expand_compound_operation): Likewise.  Add FALLTHRU.
      	(make_compound_operation): Adjust fall through comment.
      	(canon_reg_for_combine): Add FALLTHRU.
      	(force_to_mode): Adjust fall through comment.
      	(simplify_shift_const_1): Likewise.
      	(simplify_comparison): Likewise.
      	* config/aarch64/aarch64-builtins.c (aarch64_simd_expand_args): Add
      	FALLTHRU.
      	* config/aarch64/predicates.md: Likewise.
      	* config/i386/i386.c (function_arg_advance_32): Likewise.
      	(ix86_gimplify_va_arg): Likewise.
      	(print_reg): Likewise.
      	(ix86_print_operand): Likewise.
      	(ix86_build_const_vector): Likewise.
      	(ix86_expand_branch): Likewise.
      	(ix86_sched_init_global): Adjust fall through comment.
      	(ix86_expand_args_builtin): Add FALLTHRU.
      	(ix86_expand_builtin): Likewise.
      	(ix86_expand_vector_init_one_var): Likewise.
      	* config/rs6000/rs6000.c (rs6000_emit_vector_compare_inner): Likewise.
      	(rs6000_adjust_cost): Likewise.
      	(insn_must_be_first_in_group): Likewise.
      	* config/rs6000/rs6000.md: Likewise.  Adjust fall through comment.
      	* dbxout.c (dbxout_symbol): Adjust fall through comment.
      	* df-scan.c (df_uses_record): Likewise.
      	* dojump.c (do_jump): Add FALLTHRU.
      	* dwarf2out.c (mem_loc_descriptor): Likewise.  Adjust fall through
      	comment.
      	(resolve_args_picking_1): Adjust fall through comment.
      	(loc_list_from_tree_1): Likewise.
      	* expmed.c (make_tree): Likewise.
      	* expr.c (expand_expr_real_2): Add FALLTHRU.
      	(expand_expr_real_1): Likewise.  Adjust fall through comment.
      	* fold-const.c (const_binop): Adjust fall through comment.
      	(fold_truth_not_expr): Likewise.
      	(fold_cond_expr_with_comparison): Add FALLTHRU.
      	(fold_binary_loc): Likewise.
      	(contains_label_1): Adjust fall through comment.
      	(multiple_of_p): Likewise.
      	* gcov-tool.c (process_args): Add FALLTHRU.
      	* genattrtab.c (check_attr_test): Likewise.
      	(write_test_expr): Likewise.
      	* genconfig.c (walk_insn_part): Likewise.
      	* genpreds.c (validate_exp): Adjust fall through comment.
      	(needs_variable): Likewise.
      	* gensupport.c (get_alternatives_number): Add FALLTHRU.
      	(subst_dup): Likewise.
      	* gimple-pretty-print.c (dump_gimple_assign): Likewise.
      	* gimplify.c (gimplify_addr_expr): Adjust fall through comment.
      	(gimplify_scan_omp_clauses): Add FALLTHRU.
      	(goa_stabilize_expr): Likewise.
      	* graphite-isl-ast-to-gimple.c (substitute_ssa_name): Adjust fall
      	through comment.
      	* hsa-gen.c (get_address_from_value): Likewise.
      	* ipa-icf.c (sem_function::hash_stmt): Likewise.
      	* ira.c (ira_setup_alts): Add FALLTHRU.
      	* lra-eliminations.c (lra_eliminate_regs_1): Adjust fall through
      	comment.
      	* lto-streamer-out.c (lto_output_tree_ref): Add FALLTHRU.
      	* opts.c (common_handle_option): Likewise.
      	* read-rtl.c (read_rtx_code): Likewise.
      	* real.c (round_for_format): Likewise.
      	* recog.c (asm_operand_ok): Likewise.
      	* reginfo.c (reg_scan_mark_refs): Adjust fall through comment.
      	* reload1.c (set_label_offsets): Likewise.
      	(eliminate_regs_1): Likewise.
      	(reload_reg_reaches_end_p): Likewise.
      	* rtlanal.c (commutative_operand_precedence): Add FALLTHRU.
      	(rtx_cost): Likewise.
      	* sched-rgn.c (is_exception_free): Likewise.
      	* simplify-rtx.c (simplify_rtx): Adjust fall through comment.
      	* stor-layout.c (int_mode_for_mode): Likewise.
      	* toplev.c (print_to_asm_out_file): Likewise.
      	(print_to_stderr): Likewise.
      	* tree-cfg.c (gimple_verify_flow_info): Likewise.
      	* tree-chrec.c (chrec_fold_plus_1): Add FALLTHRU.
      	(chrec_fold_multiply): Likewise.
      	(evolution_function_is_invariant_rec_p): Likewise.
      	(for_each_scev_op): Likewise.
      	* tree-data-ref.c (siv_subscript_p): Likewise.
      	(get_references_in_stmt): Likewise.
      	* tree.c (find_placeholder_in_expr): Adjust fall through comment.
      	(substitute_in_expr): Likewise.
      	(type_cache_hasher::equal): Likewise.
      	(walk_type_fields): Likewise.
      	* var-tracking.c (adjust_mems): Add FALLTHRU.
      	(set_dv_changed): Adjust fall through comment.
      	* varasm.c (default_function_section): Add FALLTHRU.
      gcc/c-family/
      	* c-common.c (scalar_to_vector): Adjust fall through comment.
      	* c-opts.c (c_common_handle_option): Likewise.
      	* c-pragma.c (handle_pragma_pack): Add FALLTHRU.
      	* c-pretty-print.c (c_pretty_printer::postfix_expression): Adjust
      	fall through comment.
      	* cilk.c (extract_free_variables): Add FALLTHRU.
      gcc/c/
      	* c-parser.c (c_parser_external_declaration): Add FALLTHRU.
      	(c_parser_postfix_expression): Likewise.
      	* c-typeck.c (build_unary_op): Adjust fall through comment.
      	(c_mark_addressable): Likewise.
      gcc/cp/
      	* call.c (add_builtin_candidate): Add FALLTHRU.
      	(build_integral_nontype_arg_conv): Adjust fall through comment.
      	(build_new_op_1): Add FALLTHRU.
      	(convert_like_real): Adjust fall through comment.
      	* class.c (fixed_type_or_null): Likewise.
      	* constexpr.c (cxx_eval_constant_expression): Likewise.
      	(potential_constant_expression_1): Likewise.  Add FALLTHRU.
      	* cp-gimplify.c (cp_gimplify_expr): Adjust fall through comment.
      	(cp_fold): Add FALLTHRU.
      	* cvt.c (build_expr_type_conversion): Adjust fall through comment.
      	* cxx-pretty-print.c (pp_cxx_unqualified_id): Add FALLTHRU.
      	(pp_cxx_qualified_id): Likewise.
      	(cxx_pretty_printer::constant): Adjust fall through comment.
      	(cxx_pretty_printer::primary_expression): Add FALLTHRU.
      	(pp_cxx_pm_expression): Adjust fall through comment.
      	(cxx_pretty_printer::expression): Add FALLTHRU.
      	(cxx_pretty_printer::declaration_specifiers): Reformat code.
      	(pp_cxx_type_specifier_seq): Adjust fall through comment.
      	(pp_cxx_ptr_operator): Likewise.  Add FALLTHRU.
      	* error.c (dump_type): Adjust fall through comment.
      	(dump_decl): Likewise.
      	* mangle.c (write_type): Likewise.
      	* method.c (synthesized_method_walk): Add FALLTHRU.
      	* name-lookup.c (arg_assoc_type): Likewise.
      	* parser.c (cp_lexer_print_token): Adjust fall through comment.
      	(cp_parser_primary_expression): Add FALLTHRU.
      	(cp_parser_operator): Likewise.
      	* pt.c (find_parameter_packs_r): Likewise.
      	(tsubst_aggr_type): Adjust fall through comment.
      	* semantics.c (finish_omp_clauses): Add FALLTHRU.
      	* tree.c (lvalue_kind): Likewise.
      gcc/fortran/
      	* decl.c (match_attr_spec): Add FALLTHRU.
      	* primary.c (match_arg_list_function): Likewise.
      	* resolve.c (resolve_operator): Adjust fall through comment.
      	(fixup_charlen): Add FALLTHRU.
      	(resolve_allocate_expr): Adjust fall through comment.
      	* trans-array.c (gfc_conv_ss_startstride): Add FALLTHRU.
      	* trans-intrinsic.c (gfc_conv_intrinsic_len): Adjust fall through
      	comment.
      gcc/java/
      	* expr.c (java_truthvalue_conversion): Adjust fall through comment.
      	* jcf-io.c (verify_constant_pool): Likewise.
      	* typeck.c (promote_type): Likewise.
      gcc/objc/
      	* objc-encoding.c (encode_type): Add FALLTHRU.
      libcpp/
      	* lex.c (search_line_fast): Add FALLTHRU.
      	(_cpp_lex_direct): Likewise.
      	(cpp_token_val_index): Adjust fall through comment.
      	* macro.c (parse_params): Add FALLTHRU.
      	* pch.c (count_defs): Adjust fall through comment.
      	(write_defs): Likewise.
      libiberty/
      	* cp-demangle.c (d_print_mod): Add FALLTHRU.
      
      From-SVN: r239410
      Marek Polacek committed
  20. 05 Aug, 2016 1 commit
    • On-demand locations within string-literals · 88fa5555
      gcc/c-family/ChangeLog:
      	* c-common.c: Include "substring-locations.h".
      	(get_cpp_ttype_from_string_type): New function.
      	(g_string_concat_db): New global.
      	(substring_loc::get_range): New method.
      	* c-common.h (g_string_concat_db): New declaration.
      	(class substring_loc): New class.
      	* c-lex.c (lex_string): When concatenating strings, capture the
      	locations of all tokens using a new obstack, and record the
      	concatenation locations within g_string_concat_db.
      	* c-opts.c (c_common_init_options): Construct g_string_concat_db
      	on the ggc-heap.
      
      gcc/ChangeLog:
      	* input.c (string_concat::string_concat): New constructor.
      	(string_concat_db::string_concat_db): New constructor.
      	(string_concat_db::record_string_concatenation): New method.
      	(string_concat_db::get_string_concatenation): New method.
      	(string_concat_db::get_key_loc): New method.
      	(class auto_cpp_string_vec): New class.
      	(get_substring_ranges_for_loc): New function.
      	(get_source_range_for_substring): New function.
      	(get_num_source_ranges_for_substring): New function.
      	(class selftest::lexer_test_options): New class.
      	(struct selftest::lexer_test): New struct.
      	(class selftest::ebcdic_execution_charset): New class.
      	(selftest::ebcdic_execution_charset::s_singleton): New variable.
      	(selftest::lexer_test::lexer_test): New constructor.
      	(selftest::lexer_test::~lexer_test): New destructor.
      	(selftest::lexer_test::get_token): New method.
      	(selftest::assert_char_at_range): New function.
      	(ASSERT_CHAR_AT_RANGE): New macro.
      	(selftest::assert_num_substring_ranges): New function.
      	(ASSERT_NUM_SUBSTRING_RANGES): New macro.
      	(selftest::assert_has_no_substring_ranges): New function.
      	(ASSERT_HAS_NO_SUBSTRING_RANGES): New macro.
      	(selftest::test_lexer_string_locations_simple): New function.
      	(selftest::test_lexer_string_locations_ebcdic): New function.
      	(selftest::test_lexer_string_locations_hex): New function.
      	(selftest::test_lexer_string_locations_oct): New function.
      	(selftest::test_lexer_string_locations_letter_escape_1): New function.
      	(selftest::test_lexer_string_locations_letter_escape_2): New function.
      	(selftest::test_lexer_string_locations_ucn4): New function.
      	(selftest::test_lexer_string_locations_ucn8): New function.
      	(selftest::uint32_from_big_endian): New function.
      	(selftest::test_lexer_string_locations_wide_string): New function.
      	(selftest::uint16_from_big_endian): New function.
      	(selftest::test_lexer_string_locations_string16): New function.
      	(selftest::test_lexer_string_locations_string32): New function.
      	(selftest::test_lexer_string_locations_u8): New function.
      	(selftest::test_lexer_string_locations_utf8_source): New function.
      	(selftest::test_lexer_string_locations_concatenation_1): New
      	function.
      	(selftest::test_lexer_string_locations_concatenation_2): New
      	function.
      	(selftest::test_lexer_string_locations_concatenation_3): New
      	function.
      	(selftest::test_lexer_string_locations_macro): New function.
      	(selftest::test_lexer_string_locations_stringified_macro_argument):
      	New function.
      	(selftest::test_lexer_string_locations_non_string): New function.
      	(selftest::test_lexer_string_locations_long_line): New function.
      	(selftest::test_lexer_char_constants): New function.
      	(selftest::input_c_tests): Call the new test functions once per
      	case within the line_table test matrix.
      	* input.h (struct string_concat): New struct.
      	(struct location_hash): New struct.
      	(class string_concat_db): New class.
      	* substring-locations.h: New header.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/plugin/diagnostic-test-string-literals-1.c: New file.
      	* gcc.dg/plugin/diagnostic-test-string-literals-2.c: New file.
      	* gcc.dg/plugin/diagnostic_plugin_test_string_literals.c: New file.
      	* gcc.dg/plugin/plugin.exp (plugin_test_list): Add the above new files.
      
      libcpp/ChangeLog:
      	* charset.c (cpp_substring_ranges::cpp_substring_ranges): New
      	constructor.
      	(cpp_substring_ranges::~cpp_substring_ranges): New destructor.
      	(cpp_substring_ranges::add_range): New method.
      	(cpp_substring_ranges::add_n_ranges): New method.
      	(_cpp_valid_ucn): Add "char_range" and "loc_reader" params; if
      	they are non-NULL, read position information from *loc_reader
      	and update char_range->m_finish accordingly.
      	(convert_ucn): Add "char_range", "loc_reader", and "ranges"
      	params.  If loc_reader is non-NULL, read location information from
      	it, and update *ranges accordingly, using char_range.
      	Conditionalize the conversion into tbuf on tbuf being non-NULL.
      	(convert_hex): Likewise, conditionalizing the call to
      	emit_numeric_escape on tbuf.
      	(convert_oct): Likewise.
      	(convert_escape): Add params "loc_reader" and "ranges".  If
      	loc_reader is non-NULL, read location information from it, and
      	update *ranges accordingly.  Conditionalize the conversion into
      	tbuf on tbuf being non-NULL.
      	(cpp_interpret_string): Rename to...
      	(cpp_interpret_string_1): ...this, adding params "loc_readers" and
      	"out".  Use "to" to conditionalize the initialization and usage of
      	"tbuf", such as running the converter.  If "loc_readers" is
      	non-NULL, use the instances within it, reading location
      	information from them, and passing them to convert_escape; likewise
      	write to "out" if loc_readers is non-NULL.  Check for leading
      	quote and issue an error if it is not present.  Update boundary
      	check from "== limit" to ">= limit" to protect against erroneous
      	location values to calls that are not parsing string literals.
      	(cpp_interpret_string): Reimplement in terms to
      	cpp_interpret_string_1.
      	(noop_error_cb): New function.
      	(cpp_interpret_string_ranges): New function.
      	(cpp_string_location_reader::cpp_string_location_reader): New
      	constructor.
      	(cpp_string_location_reader::get_next): New method.
      	* include/cpplib.h (class cpp_string_location_reader): New class.
      	(class cpp_substring_ranges): New class.
      	(cpp_interpret_string_ranges): New prototype.
      	* internal.h (_cpp_valid_ucn): Add params "char_range" and
      	"loc_reader".
      	* lex.c (forms_identifier_p): Pass NULL for new params to
      	_cpp_valid_ucn.
      
      From-SVN: r239175
      David Malcolm committed
  21. 20 May, 2016 1 commit
    • Change ENABLE_VALGRIND_CHECKING to · ceb17928
      	* config.in: Regenerated.
      	* configure: Likewise.
      	* configure.ac: Handle --enable-valgrind-annotations.
      	* lex.c (new_buff): Use ENABLE_VALGRIND_ANNOTATIONS instead
      	of ENABLE_VALGRIND_CHECKING.
      	(_cpp_free_buff): Likewise.
      
      From-SVN: r236496
      Martin Liska committed
  22. 04 Jan, 2016 1 commit
  23. 13 Nov, 2015 1 commit
    • Source range tracking in libcpp and C FE, with bit-packing optimization · ebedc9a3
      This patch combines:
        [PATCH 05/10] Add ranges to libcpp tokens (via ad-hoc data, unoptimized)
        [PATCH 06/10] Track expression ranges in C frontend
        [PATCH 07/10] Add plugin to recursively dump the source-ranges in a tree (v2)
        [PATCH 08/10] Wire things up so that libcpp users get token underlines
        [PATCH 09/10] Delay some resolution of ad-hoc locations, preserving ranges
        [PATCH 10/10] Compress short ranges into source_location
        [PATCH] libcpp: add examples to source_location description
      along with fixes for the nits identified during review.
      
      gcc/ChangeLog:
      	* Makefile.in (OBJS): Add gcc-rich-location.o.
      	* diagnostic.c (diagnostic_append_note): Pass line_table to
      	rich_location ctor.
      	(emit_diagnostic): Likewise.
      	(inform): Likewise.
      	(inform_n): Likewise.
      	(warning): Likewise.
      	(warning_at): Likewise.
      	(warning_n): Likewise.
      	(pedwarn): Likewise.
      	(permerror): Likewise.
      	(error): Likewise.
      	(error_n): Likewise.
      	(error_at): Likewise.
      	(sorry): Likewise.
      	(fatal_error): Likewise.
      	(internal_error): Likewise.
      	(internal_error_no_backtrace): Likewise.
      	(source_range::debug): Likewise.
      	* gcc-rich-location.c: New file.
      	* gcc-rich-location.h: New file.
      	* genmatch.c (fatal_at): Pass line_table to rich_location ctor.
      	(warning_at): Likewise.
      	* gimple.h (gimple_set_block): Use set_block function.
      	* input.c (dump_line_table_statistics): Dump stats on how many
      	ranges were optimized vs how many needed ad-hoc table.
      	(write_digit_row): Add "map" param; use its range_bits
      	to calculate the per-character offset.
      	(dump_location_info): Print the range and column bits for each
      	ordinary map.  Use the range bits to calculate the per-character
      	offset.  Pass the map as a new param to the various calls to
      	write_digit_row.  Eliminate uses of
      	ORDINARY_MAP_NUMBER_OF_COLUMN_BITS.
      	* print-tree.c (print_node): Print any source range information.
      	* rtl-error.c (diagnostic_for_asm): Likewise.
      	* toplev.c (general_init): Initialize line_table's
      	default_range_bits.
      	* tree-cfg.c (move_block_to_fn): Likewise.
      	(move_block_to_fn): Likewise.
      	* tree-inline.c (copy_phis_for_bb): Likewise.
      	* tree.c (tree_set_block): Likewise.
      	(get_pure_location): New function.
      	(set_source_range): New functions.
      	(set_block): New function.
      	(set_source_range): New functions.
      	* tree.h (CAN_HAVE_RANGE_P): New.
      	(EXPR_LOCATION_RANGE): New.
      	(EXPR_HAS_RANGE): New.
      	(get_expr_source_range): New inline function.
      	(DECL_LOCATION_RANGE): New.
      	(set_source_range): New decls.
      	(get_decl_source_range): New inline function.
      
      gcc/ada/ChangeLog:
      	* gcc-interface/trans.c (Sloc_to_locus): Add line_table param when
      	calling linemap_position_for_line_and_column.
      
      gcc/c-family/ChangeLog:
      	* c-common.c (c_fully_fold_internal): Capture existing souce_range,
      	and store it on the result.
      	* c-opts.c (c_common_init_options): Set
      	global_dc->colorize_source_p.
      
      gcc/c/ChangeLog:
      	* c-decl.c (warn_defaults_to): Pass line_table to
      	rich_location ctor.
      	* c-errors.c (pedwarn_c99): Likewise.
      	(pedwarn_c90): Likewise.
      	* c-parser.c (set_c_expr_source_range): New functions.
      	(c_token::get_range): New method.
      	(c_token::get_finish): New method.
      	(c_parser_expr_no_commas): Call set_c_expr_source_range on the ret
      	based on the range from the start of the LHS to the end of the
      	RHS.
      	(c_parser_conditional_expression): Likewise, based on the range
      	from the start of the cond.value to the end of exp2.value.
      	(c_parser_binary_expression): Call set_c_expr_source_range on
      	the stack values for TRUTH_ANDIF_EXPR and TRUTH_ORIF_EXPR.
      	(c_parser_cast_expression): Call set_c_expr_source_range on ret
      	based on the cast_loc through to the end of the expr.
      	(c_parser_unary_expression): Likewise, based on the
      	op_loc through to the end of op.
      	(c_parser_sizeof_expression) Likewise, based on the start of the
      	sizeof token through to either the closing paren or the end of
      	expr.
      	(c_parser_postfix_expression): Likewise, using the token range,
      	or from the open paren through to the close paren for
      	parenthesized expressions.
      	(c_parser_postfix_expression_after_primary): Likewise, for
      	various kinds of expression.
      	* c-tree.h (struct c_expr): Add field "src_range".
      	(c_expr::get_start): New method.
      	(c_expr::get_finish): New method.
      	(set_c_expr_source_range): New decls.
      	* c-typeck.c (parser_build_unary_op): Call set_c_expr_source_range
      	on ret for prefix unary ops.
      	(parser_build_binary_op): Likewise, running from the start of
      	arg1.value through to the end of arg2.value.
      
      gcc/cp/ChangeLog:
      	* error.c (pedwarn_cxx98): Pass line_table to rich_location ctor.
      
      gcc/fortran/ChangeLog:
      	* error.c (gfc_warning): Pass line_table to rich_location ctor.
      	(gfc_warning_now_at): Likewise.
      	(gfc_warning_now): Likewise.
      	(gfc_error_now): Likewise.
      	(gfc_fatal_error): Likewise.
      	(gfc_error): Likewise.
      	(gfc_internal_error): Likewise.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/diagnostic-token-ranges.c: New file.
      	* gcc.dg/diagnostic-tree-expr-ranges-2.c: New file.
      	* gcc.dg/plugin/diagnostic-test-expressions-1.c: New file.
      	* gcc.dg/plugin/diagnostic-test-show-trees-1.c: New file.
      	* gcc.dg/plugin/diagnostic_plugin_show_trees.c: New file.
      	* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c (get_loc): Add
      	line_table param when calling
      	linemap_position_for_line_and_column.
      	(test_show_locus): Pass line_table to rich_location ctors.
      	(plugin_init): Remove setting of global_dc->colorize_source_p.
      	* gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.c:
      	New file.
      	* gcc.dg/plugin/plugin.exp (plugin_test_list): Add
      	diagnostic_plugin_test_tree_expression_range.c,
      	diagnostic-test-expressions-1.c, diagnostic_plugin_show_trees.c,
      	and diagnostic-test-show-trees-1.c.
      
      libcpp/ChangeLog:
      	* errors.c (cpp_diagnostic): Pass pfile->line_table to
      	rich_location ctor.
      	(cpp_diagnostic_with_line): Likewise.
      	* include/cpplib.h (struct cpp_token): Update comment for src_loc
      	to indicate that the range of the token is "baked into" the
      	source_location.
      	* include/line-map.h (source_location): Update the descriptive
      	comment to reflect the packing scheme for short ranges, adding
      	worked examples of location encoding.
      	(struct line_map_ordinary): Drop field "column_bits" in favor
      	of field "m_column_and_range_bits"; add field "m_range_bits".
      	(ORDINARY_MAP_NUMBER_OF_COLUMN_BITS): Delete.
      	(location_adhoc_data): Add source_range field.
      	(struct line_maps): Add fields "default_range_bits",
      	"num_optimized_ranges" and "num_unoptimized_ranges".
      	(get_combined_adhoc_loc): Add source_range param.
      	(get_range_from_loc): New declaration.
      	(pure_location_p): New prototype.
      	(COMBINE_LOCATION_DATA):  Add source_range param.
      	(SOURCE_LINE): Update for renaming of column_bits.
      	(SOURCE_COLUMN): Likewise.  Shift the column right by the map's
      	range_bits.
      	(LAST_SOURCE_LINE_LOCATION): Update for renaming of column_bits.
      	(linemap_position_for_line_and_column): Add line_maps * params.
      	(rich_location::rich_location): Likewise.
      	* lex.c (_cpp_lex_direct): Capture the range of the token, baking
      	it into token->src_loc via a call to COMBINE_LOCATION_DATA.
      	* line-map.c (LINE_MAP_MAX_COLUMN_NUMBER): Reduce from 1U << 17 to
      	1U << 12.
      	(location_adhoc_data_hash): Add the src_range into
      	the hash value.
      	(location_adhoc_data_eq): Require equality of the src_range
      	values.
      	(can_be_stored_compactly_p): New function.
      	(get_combined_adhoc_loc): Add src_range param, and store it,
      	via a bit-packing scheme for short ranges, otherwise within the
      	lookaside table.  Remove the requirement that data is non-NULL.
      	(get_range_from_adhoc_loc): New function.
      	(get_range_from_loc): New function.
      	(pure_location_p): New function.
      	(linemap_add): Ensure that start_location has zero for the
      	range_bits, unless we're past LINE_MAP_MAX_LOCATION_WITH_COLS.
      	Initialize range_bits to zero.  Assert that the start_location
      	is "pure".
      	(linemap_line_start): Assert that the
      	column_and_range_bits >= range_bits.
      	Update determinination of whether we need to start a new map
      	using the effective column bits, without the range bits.
      	Use the set's default_range_bits in new maps, apart from
      	those with column_bits == 0, which should also have 0 range_bits.
      	Increase the column bits for new maps by the range bits.
      	When adding lines to an existing map, use set->highest_line
      	directly rather than offsetting highest by SOURCE_COLUMN.
      	Add assertions to sanity-check the return value.
      	(linemap_position_for_column): Offset to_column by range_bits.
      	Update set->highest_location if necessary.
      	(linemap_position_for_line_and_column): Add line_maps * param.
      	Update the calculation to offset the column by range_bits, and
      	conditionalize it on being <= LINE_MAP_MAX_LOCATION_WITH_COLS.
      	Bound it by LINEMAPS_MACRO_LOWEST_LOCATION.  Update
      	set->highest_location if necessary.
      	(linemap_position_for_loc_and_offset): Handle ad-hoc locations;
      	pass "set" to linemap_position_for_line_and_column.
      	(linemap_macro_map_loc_unwind_toward_spelling): Add line_maps
      	param.  Handle ad-hoc locations.
      	(linemap_location_in_system_header_p): Pass on "set" to call to
      	linemap_macro_map_loc_unwind_toward_spelling.
      	(linemap_macro_loc_to_spelling_point): Retain ad-hoc locations.
      	Pass on "set" to call to
      	linemap_macro_map_loc_unwind_toward_spelling.
      	(linemap_resolve_location): Retain ad-hoc locations.  Pass on
      	"set" to call to linemap_macro_map_loc_unwind_toward_spelling.
      	(linemap_unwind_toward_expansion):  Pass on "set" to call to
      	linemap_macro_map_loc_unwind_toward_spelling.
      	(linemap_expand_location): Extract the data pointer before
      	extracting the location.
      	(rich_location::rich_location): Add line_maps param; use it to
      	extract the range from the source_location.
      	* location-example.txt: Regenerate, showing new representation.
      
      From-SVN: r230331
      David Malcolm committed
  24. 03 Nov, 2015 1 commit
  25. 02 Jul, 2015 1 commit
    • re PR preprocessor/53690 ([C++11] \u0000 and \U00000000 are wrongly encoded as U+0001.) · fbb22910
      /libcpp
      2015-07-02  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/53690
      	* charset.c (_cpp_valid_ucn): Add cppchar_t * parameter and change
      	return type to bool.  Fix encoding of \u0000 and \U00000000 in C++.
      	(convert_ucn): Adjust call.
      	* lex.c (forms_identifier_p): Likewise.
      	* internal.h (_cpp_valid_ucn): Adjust declaration.
      
      /gcc/testsuite
      2015-07-02  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/53690
      	* g++.dg/cpp/pr53690.C: New.
      
      From-SVN: r225353
      Paolo Carlini committed
  26. 30 Jun, 2015 2 commits
    • Implement N4197 - Adding u8 character literals · fe95b036
      
      libcpp:
      
      2015-06-30  Edward Smith-Rowland  <3dw4rd@verizon.net>
      
      	Implement N4197 - Adding u8 character literals
      	* include/cpplib.h (UTF8CHAR, UTF8CHAR_USERDEF): New cpp tokens;
      	(struct cpp_options): Add utf8_char_literals.
      	* init.c (struct lang_flags): Add utf8_char_literals;
      	(struct lang_flags lang_defaults): Add column for utf8_char_literals.
      	* macro.c (stringify_arg()): Treat CPP_UTF8CHAR token; 
      	* expr.c (cpp_userdef_char_remove_type(), cpp_userdef_char_add_type()):
      	Treat CPP_UTF8CHAR_USERDEF, CPP_UTF8CHAR tokens;
      	(cpp_userdef_char_p()): Treat CPP_UTF8CHAR_USERDEF token;
      	(eval_token(), _cpp_parse_expr()): Treat CPP_UTF8CHAR token.
      	* lex.c (lex_string(), _cpp_lex_direct()): Include CPP_UTF8CHAR tokens.
      	* charset.c (converter_for_type(), cpp_interpret_charconst()):
      	Treat CPP_UTF8CHAR token.
      
      
      gcc/c-family:
      
      2015-06-30  Edward Smith-Rowland  <3dw4rd@verizon.net>
      
      	Implement N4197 - Adding u8 character literals
      	* c-family/c-ada-spec.c (print_ada_macros()): Treat CPP_UTF8CHAR
      	like CPP_CHAR.
      	* c-family/c-common.c (c_parse_error()): print CPP_UTF8CHAR
      	and CPP_UTF8CHAR_USERDEF tokens.
      	* c-family/c-lex.c (c_lex_with_flags()): Treat CPP_UTF8CHAR_USERDEF
      	and CPP_UTF8CHAR tokens; (lex_charconst()): Treat CPP_UTF8CHAR token.
      
      
      gcc/cp:
      
      2015-06-30  Edward Smith-Rowland  <3dw4rd@verizon.net>
      
      	Implement N4197 - Adding u8 character literals
      	* parser.c (cp_parser_primary_expression()): Treat CPP_UTF8CHAR
      	and CPP_UTF8CHAR_USERDEF tokens;
      	(cp_parser_parenthesized_expression_list()): Treat CPP_UTF8CHAR token.
      
      
      gcc/testsuite:
      
      2015-06-30  Edward Smith-Rowland  <3dw4rd@verizon.net>
      
      	Implement N4197 - Adding u8 character literals
      	* g++.dg/cpp1z/utf8.C: New.
      	* g++.dg/cpp1z/utf8-neg.C: New.
      	* g++.dg/cpp1z/udlit-utf8char.C: New.
      
      From-SVN: r225185
      Edward Smith-Rowland committed
    • lex.c (search_line_sse42): New main loop using asm flag outputs. · dc6bcf52
      	* lex.c (search_line_sse42) [__GCC_ASM_FLAG_OUTPUTS__]: New main
      	loop using asm flag outputs.
      
      From-SVN: r225160
      Uros Bizjak committed
  27. 09 May, 2015 1 commit
  28. 06 Apr, 2015 1 commit
  29. 02 Apr, 2015 1 commit
  30. 17 Mar, 2015 1 commit
  31. 04 Mar, 2015 1 commit
    • re PR target/65261 (bootstrap-ubsan ppc64le: gcc/libcpp/lex.c:552:30: runtime… · 44d95244
      re PR target/65261 (bootstrap-ubsan ppc64le: gcc/libcpp/lex.c:552:30: runtime error: load of misaligned address 0x01002172dfc6 for type 'const uchar', which requires 16 byte alignment)
      
      Fix PR65261
      
      Running bootstrap-ubsan on ppc64le shows many instances of:
      
        libcpp/lex.c:552:30: runtime error: load of misaligned address
        0x01001f31d37a for type 'const uchar', which requires 16 byte alignment
      
      But the unaligned vector loads are intended in this case, because they
      are preferable to forced-alignment on POWER8. So just silence the ubsan
      errors.
      
      2015-03-02  Markus Trippelsdorf  <markus@trippelsdorf.de>
      
      include/
      	PR target/65261
      	* ansidecl.h (ATTRIBUTE_NO_SANITIZE_UNDEFINED): New macro.
      
      libcpp/
      	PR target/65261
      	* lex.c (search_line_fast): Silence ubsan errors.
      
      From-SVN: r221190
      Markus Trippelsdorf committed
  32. 30 Jan, 2015 1 commit
  33. 05 Jan, 2015 1 commit
  34. 20 Nov, 2014 2 commits
  35. 06 Nov, 2014 1 commit
    • Preserve original spellings of extended identifiers. · be5ffc59
      This patch makes cpplib track the original spellings of extended
      identifiers, as well as the canonical UTF-8 version, in order to
      follow standard semantics properly without needing a convoluted and
      undocumented canonicalization in translation phase 1 (see bug 9449
      comments 39-46 regarding such a canonicalization).
      
      The spelling is tracked in cpp_identifier and cpp_macro_arg without
      making cpp_token any larger.  The original spelling is used for checks
      of duplicate macro definitions, stringizing (see the C++ tests added;
      this case is only an issue for C++ not C because C makes it
      implementation-defined whether a \ is inserted before the \ of a UCN
      in a string or character constant when stringizing, while C++ does
      not), pasting (relevant when the result is then stringized for C++)
      and when macro definitions are output as text (e.g. for -d options).
      
      Once a macro has been defined, only the original spelling of the
      argument names needs keeping in the argument list.  While it is being
      defined, however, both spellings are needed: the original one for
      subsequent saving for checks of duplicate macro definitions, and the
      canonical one which is the node marked specially to generate macro
      argument tokens rather than normal identifier tokens.  The buffer that
      is used to save the original values of the identifier tokens is
      changed so that it stores both those original values and a pointer to
      the canonical hash nodes, so that those canonical nodes can be found
      when their values need restoring after the macro definition has been
      parsed.
      
      I believe this covers the known standards issues in extended
      identifiers support (the remaining unimplemented C99 areas in GCC all
      being floating-point-related), except for C++ translation of extended
      characters to UCNs in phase 1 (which I have no plans to work on).
      There are however probably issues left with handling of extended
      identifiers in other places, as listed in
      <https://gcc.gnu.org/ml/gcc-patches/2014-11/msg00337.html> (those
      issues are generally the sort of thing that could be addressed as bugs
      outside development stage 1).  (The bulk of the potential issues Zack
      was concerned about in 2003-5, that resulted in extended identifiers
      being disabled in the absence of -fextended-identifiers, were
      effectively eliminated by the audit and fixes I did in 2009, however;
      that todo list reflects what was left over after that audit.)
      
      Bootstrapped with no regressions on x86_64-unknown-linux-gnu.
      
      libcpp:
      	* include/cpp-id-data.h (struct cpp_macro): Update comment
      	regarding parameters.
      	* include/cpplib.h (struct cpp_macro_arg, struct cpp_identifier):
      	Add spelling fields.
      	(struct cpp_token): Update comment on macro_arg.
      	* internal.h (_cpp_save_parameter): Add extra argument.
      	(_cpp_spell_ident_ucns): New declaration.
      	* lex.c (lex_identifier): Add SPELLING argument.  Set *SPELLING to
      	original spelling of identifier.
      	(_cpp_lex_direct): Update calls to lex_identifier.
      	(_cpp_spell_ident_ucns): New function, factored out of
      	cpp_spell_token.
      	(cpp_spell_token): Adjust FORSTRING argument semantics to return
      	original spelling of identifiers.  Use _cpp_spell_ident_ucns in
      	!FORSTRING case.
      	(_cpp_equiv_tokens): Check spellings of identifiers and macro
      	arguments are identical.
      	* macro.c (macro_arg_saved_data): New structure.
      	(paste_tokens): Use original spellings of identifiers from
      	cpp_spell_token.
      	(_cpp_save_parameter): Add argument SPELLING.  Save both canonical
      	node and its value.
      	(parse_params): Update calls to _cpp_save_parameter.
      	(lex_expansion_token): Save spelling of macro argument tokens.
      	(_cpp_create_definition): Extract canonical node from saved data.
      	(cpp_macro_definition): Use UCNs in spelling of macro name.  Use
      	original spellings of macro argument tokens and identifiers.
      	* traditional.c (scan_parameters): Update call to
      	_cpp_save_parameter.
      
      gcc:
      	* doc/invoke.texi (-std=c99, -std=c11): Don't refer to corner
      	cases of extended identifiers.
      
      gcc/testsuite:
      	* g++.dg/cpp/ucnid-2.C, g++.dg/cpp/ucnid-3.C,
      	gcc.dg/cpp/ucnid-11.c, gcc.dg/cpp/ucnid-12.c,
      	gcc.dg/cpp/ucnid-13.c, gcc.dg/cpp/ucnid-14.c,
      	gcc.dg/cpp/ucnid-15.c: New tests.
      
      From-SVN: r217202
      Joseph Myers committed
  36. 03 Oct, 2014 1 commit
    • lex.c (search_line_fast): Add new version to be used for Power8 and later… · 0ccaaab0
      lex.c (search_line_fast): Add new version to be used for Power8 and later targets when Altivec is enabled.
      
      2014-10-03  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
      
      	* lex.c (search_line_fast): Add new version to be used for Power8
      	and later targets when Altivec is enabled.  Restrict the existing
      	Altivec version to big-endian systems so that lvsr is not used on
      	little endian, where it is deprecated.  Remove LE-specific code
      	from the now-BE-only version.
      
      From-SVN: r215873
      Bill Schmidt committed