1. 23 Mar, 2018 20 commits
    • re PR c++/85015 (internal compiler error: tree check: expected class 'type',… · c9db39e1
      re PR c++/85015 (internal compiler error: tree check: expected class 'type', have 'exceptional' (error_mark) in build_int_cst, at tree.c:1360)
      
      	PR c++/85015
      	* decl.c (compute_array_index_type): Set osize to mark_rvalue_use
      	result.
      
      	* g++.dg/cpp0x/pr85015.C: New test.
      
      From-SVN: r258822
      Jakub Jelinek committed
    • re PR c++/84942 (internal compiler error: in fold_convert_const_int_from_real,… · c1e7c3f2
      re PR c++/84942 (internal compiler error: in fold_convert_const_int_from_real, at fold-const.c:2011)
      
      	PR c++/84942
      	* pt.c (tsubst_copy_and_build) <case FIX_TRUNC_EXPR>: Replace
      	cp_build_unary_op call with gcc_unreachable ().
      
      	* g++.dg/cpp1y/pr84942.C: New test.
      
      From-SVN: r258821
      Jakub Jelinek committed
    • re PR inline-asm/85030 (internal compiler error: Floating point exception (validate_subreg())) · a426543a
      2018-03-23  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR inline-asm/85030
      	* lra-constraints.c (process_alt_operands): Don't match BLKmode
      	and non BLKmode operands.
      
      2018-03-23  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR inline-asm/85030
      	* testsuite/gcc.target/i386/pr85030.c: New.
      
      From-SVN: r258820
      Vladimir Makarov committed
    • [arm] PR target/85026: Fix ldrsh length estimate in Thumb state · 63028caa
      This bug has been reported against GCC 7.3.0 but it is latent in all release branches and on trunk.
      We underestimate the length of the LRSH instruction in Thumb state.
      Unlike other load instructions LDRSH can be encoded in 16 bits only when using a register offset.
      In the testcase we have "ldrsh   r2, [r4]" being assigned a length of 2, which is wrong.
      So we don't calculate branch ranges properly and cause the assembler error.
      
      The fix is to make the unaligned_loadhis insn similar to the *arm_extendqihi_insn insn that outputs an LDRSB.
      Just remove the wrong 2-byte alternative. I don't think this is worth inventing a new "register-offset-only" constraint.
      This also makes the patch safer for backporting.
      
      Bootstrapped and tested on arm-none-linux-gnueabihf.
      
      	PR target/85026
      	* config/arm/arm.md (unaligned_loadhis): Remove first alternative.
      	Clean up attributes.
      
      	* g++.dg/pr85026.C: New test.
      
      From-SVN: r258818
      Kyrylo Tkachov committed
    • XFAIL AIX. · 2fce761f
      From-SVN: r258816
      David Edelsohn committed
    • [ARM] Fix pr84826.c failure for thumb1 · c084d13e
      *** gcc/testsuite/ChangeLog ***
      
      2018-03-23  Sudakshina Das  <sudi.das@arm.com>
      
      	PR target/84826
      	* gcc.target/arm/pr84826.c: Add dg directive.
      
      From-SVN: r258805
      Sudakshina Das committed
    • re PR c++/85045 (ICE+SIGILL on valid C++ code: … · 889a3a30
      re PR c++/85045 (ICE+SIGILL on valid C++ code:  cxx_pretty_printer::postfix_expression(tree_node*) (), at  cp/cxx-pretty-print.c:482)
      
      	PR c++/85045
      	* c-pretty-print.c (c_pretty_printer::multiplicative_expression)
      	<case RDIV_EXPR>: Tweak condition.
      
      	* cxx-pretty-print.c (cxx_pretty_printer::multiplicative_expression):
      	Handle EXACT_DIV_EXPR and RDIV_EXPR.  Tweak condition.
      	(cxx_pretty_printer::expression): Handle EXACT_DIV_EXPR and RDIV_EXPR.
      
      	* g++.dg/cpp0x/Wnarrowing5.C: New test.
      	* gcc.dg/pr85045.c: New test.
      
      From-SVN: r258804
      Marek Polacek committed
    • Implement P0962 · 50531a2a
      * parser.c (cp_parser_perform_range_for_lookup): Change
      the condition for deciding whether to use members.
      
      From-SVN: r258803
      Ville Voutilainen committed
    • re PR c++/85033 (internal compiler error: in fold_offsetof_1, at c-family/c-common.c:6269) · b01556f7
      	PR c++/85033
      	* semantics.c (finish_offsetof): Don't allow CONST_DECLs.
      
      	* g++.dg/ext/builtin-offsetof2.C: New test.
      
      From-SVN: r258801
      Marek Polacek committed
    • re PR bootstrap/85020 (gcc fails to bootstrap with profiledbootstrap and… · f300628b
      re PR bootstrap/85020 (gcc fails to bootstrap with profiledbootstrap and --with-build-config=bootstrap-lto)
      
      2018-03-23  Eric Botcazou  <ebotcazou@adacore.com>
      
      	PR debug/85020
      	* gnat.dg/lto22.adb: New test.
      	* gnat.dg/lto22_pkg1.ad[sb]: New helper.
      	* gnat.dg/lto22_pkg2.ads: Likewise.
      
      From-SVN: r258799
      Eric Botcazou committed
    • re PR bootstrap/85020 (gcc fails to bootstrap with profiledbootstrap and… · 71f70d0c
      re PR bootstrap/85020 (gcc fails to bootstrap with profiledbootstrap and --with-build-config=bootstrap-lto)
      
      2018-03-23  Richard Biener  <rguenther@suse.de>
      
      	PR debug/85020
      	* dwarf2out.c (rtl_for_decl_location): Do not generate RTL early when
      	we are going to emit early debug for LTO.
      
      From-SVN: r258798
      Richard Biener committed
    • re PR c/80778 (gcc.dg/auto-type-1.c ICEs with -flto) · 9ecdd81a
      	PR c/80778
      	* gcc.dg/lto/pr80778_0.c: New test.
      
      From-SVN: r258797
      Jakub Jelinek committed
    • re PR inline-asm/85034 (-O1 internal compiler error: in… · b3d89380
      re PR inline-asm/85034 (-O1 internal compiler error: in elimination_costs_in_insn, at reload1.c:3633)
      
      	PR inline-asm/85034
      	* function.c (match_asm_constraints_1): Don't optimize if input
      	doesn't satisfy general_operand predicate for output's mode.
      
      	* gcc.target/i386/pr85034.c: New test.
      
      From-SVN: r258796
      Jakub Jelinek committed
    • re PR inline-asm/85022 (internal compiler error: in write_dependence_p, at alias.c:3003) · 6f5799be
      	PR inline-asm/85022
      	* alias.c (write_dependence_p): Don't require for x_canonicalized
      	non-VOIDmode if x has VOIDmode.
      
      	* c-c++-common/torture/pr85022.c: New test.
      
      From-SVN: r258795
      Jakub Jelinek committed
    • re PR sanitizer/85029 (-fsanitize=undefined internal compiler error: in… · ee3a999f
      re PR sanitizer/85029 (-fsanitize=undefined internal compiler error: in maybe_optimize_ubsan_ptr_ifn, at sanopt.c:493)
      
      	PR sanitizer/85029
      	* sanopt.c (maybe_optimize_ubsan_ptr_ifn): If DECL_REGISTER (base),
      	just don't try to optimize it rather than assert it never happens.
      
      	* g++.dg/ubsan/pr85029.C: New test.
      
      From-SVN: r258794
      Jakub Jelinek committed
    • [PR c++/71251] check tmpl parms in template using decl · 631270a5
      Check that template using decls have the correct number of parm lists.
      
      for  gcc/cp/ChangeLog
      
      	PR c++/71251
      	* parser.c (cp_parser_alias_declaration): Call
      	parser_check_template_parameters.
      
      for  gcc/testsuite/ChangeLog
      
      	PR c++/71251
      	* g++.dg/cpp0x/pr71251.C: New.
      
      From-SVN: r258793
      Alexandre Oliva committed
    • [PR c++/84789] do not fail to resolve typename into template-independent · 5904d9d9
      Although resolve_typename_type always takes a template-dependent
      type-id, and it usually resolves it to another template-dependent
      type-id, it is not correct to require the latter: in declarators,
      template-dependent scopes may turn out to name template-independent
      types, as in the pr84789-2.C and pr84789-3.C testcases.
      
      The ill-formed testcase pr84789.C trips the same too-strict assert,
      and also gets fixed by removing the assertion on the simplified scope.
      However, whereas when the dependent type cannot be resolved, we get an
      error that suggests 'typename' is missing:
      
      pr84789.C:12:3: error: need ‘typename’ before ‘typename B<T>::A::I::I’
      because ‘typename B<T>::A::I’ is a dependent scope
         B<T>::A::I::I i;
         ^~~~
      
      when it can, we got errors that did not point at that possibility,
      which may be confusing:
      
      pr84789.C:9:15: error: ‘A::I’ {aka ‘int’} is not a class type
         B<T>::A::I::I i; // { dg-error "typename" }
                     ^
      pr84789.C:9:15: error: ‘I’ in ‘A::I’ {aka ‘int’} does not name a type
      
      Changing the parser diagnostic code that reports an invalid type name
      so that it does not attempt to reparse the name as a declarator gets
      us the superior diagnostic of a missing 'typename' keyword.
      
      
      for  gcc/cp/ChangeLog
      
      	PR c++/84789
      	* pt.c (resolve_typename_type): Drop assert that stopped
      	simplification to template-independent types.  Add assert to
      	verify the initial scope is template dependent.
      	* parser.c (cp_parser_parse_and_diagnose_invalid_type_name):
      	Reparse the id expression as a type-name, not a declarator.
      
      for  gcc/testsuite/ChangeLog
      
      	PR c++/84789
      	* g++.dg/template/pr84789.C: New.
      	* g++.dg/template/pr84789-2.C: New.
      	* g++.dg/template/pr84789-3.C: New.
      	* g++.dg/parse/dtor11.C: Accept alternate error message.
      
      From-SVN: r258792
      Alexandre Oliva committed
    • [PR c++/84729] reject parenthesized array init · 3ec16e36
      A parenthesized initializer was only accepted when new()ing an array in
      permissive mode.  We were not careful, however, to convert the
      TREE_LIST initializer to the array element type in this extension.
      
      Instead of fixing it, converting the initializer to the base type
      after turning the TREE_LIST initializer to a compound_expr, we disable
      this deprecated extension.
      
      
      for  gcc/cp/ChangeLog
      
      	PR c++/84729
      	* init.c (build_vec_init): Error at parenthesized array init.
      
      for  gcc/testsuite/ChangeLog
      
      	PR c++/84729
      	* g++.dg/pr84729.C: New.
              * g++.old-deja/g++.ext/arrnew2.C: Require error.
      	* g++.old-deja/g++.robertl/eb58.C: Likewise.
      	* g++.old-deja/g++.robertl/eb63.C: Likewise.
      
      From-SVN: r258791
      Alexandre Oliva committed
    • Disable auto_is_implicit_function_template_parm_p while parsing attributes · 91f9108f
      We don't want functions to become implicit templates just because of
      random uses of auto in unexpected places.  Disabling the special
      handling of auto while parsing attributes, for example, makes for
      more sensible errors.
      
      
      for  gcc/cp/ChangeLog
      
      	PR c++/84610
      	PR c++/84642
      	PR c++/84942
      	* cp-tree.h (temp_override): New template class, generalizing
      	a cleanup that was only used...
      	* parser.c (cp_parser_parameter_declaration_clause):
      	... here for auto_is_implicit_function_template_parm_p.
      	(cp_parser_gnu_attributes_opt): Use it here as well.
      	(cp_parser_std_attribute): Likewise.
      
      From-SVN: r258790
      Alexandre Oliva committed
    • Daily bump. · c95bcbe3
      From-SVN: r258789
      GCC Administrator committed
  2. 22 Mar, 2018 15 commits
    • re PR fortran/84922 (fortran reports inconsistency in rank of arguments in… · b74fa126
      re PR fortran/84922 (fortran reports inconsistency in rank of arguments in interface and contained procedures)
      
      2018-03-22  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/84922
      	* decl.c (get_proc_name): If the MODULE prefix appears in interface
      	body, then it must appear on the contained subroutine or function.
      	While here, fix nearby mis-indented code.
      
      2018-03-22  Steven G. Kargl  <kargl@gcc.gnu.org
      
      	PR fortran/84922
      	* gfortran.dg/interface_42.f90: New test.
      	* gfortran.dg/interface_43.f90: New test.
      
      From-SVN: r258784
      Steven G. Kargl committed
    • rs6000-builtin.def: Remove various BU_ALTIVEC_X macro expansions for definition of... · 0bf86d46
      gcc/ChangeLog:
      
      2018-03-22  Kelvin Nilsen  <kelvin@gcc.gnu.org>
      
      	* config/rs6000/rs6000-builtin.def: Remove various BU_ALTIVEC_X
      	macro expansions for definition of ST_INTERNAL_<mode> and
      	LD_INTERNAL_<mode> builtins.
      	* config/rs6000/rs6000-protos.h (rs6000_address_for_altivec):
      	Remove prototype.
      	* config/rs6000/rs6000.c (altivec_expand_ld_builtin): Delete this
      	function.
      	(altivec_expand_st_builtin): Likewise.
      	(altivec_expand_builtin): Remove calls to deleted functions.
      	(rs6000_address_for_altivec): Delete this function.
      	* config/rs6000/vector.md: Remove expands for
      	vector_altivec_load_<mode> and vector_altivec_store_<mode>.
      
      From-SVN: r258783
      Kelvin Nilsen committed
    • [ARM][PR target/84826] Fix ICE in extract_insn, at recog.c:2304 on · bb4ac03b
      arm-linux-gnueabi
      
      The ICE in the bug report was happening because the macro
      USE_RETURN_INSN (FALSE) was returning different values at different points
      in the compilation. This was internally occurring because the function
      arm_compute_static_chain_stack_bytes () which was dependent on
      arm_r3_live_at_start_p () was giving a different value after the cond_exec
      instructions were created in ce3 causing the liveness of r3 to escape up
      to the start block.
      
      The function arm_compute_static_chain_stack_bytes () should really only
      compute the value once duringepilogue/prologue stage. This pass introduces
      a new member 'static_chain_stack_bytes' to the target definition of the
      struct machine_function which gets calculated in expand_prologue and is the
      value that is returned by arm_compute_static_chain_stack_bytes () beyond that.
      
      ChangeLog entries:
      
      *** gcc/ChangeLog ***
      
      2018-03-22  Sudakshina Das  <sudi.das@arm.com>
      
      	PR target/84826
      	* config/arm/arm.h (machine_function): Add static_chain_stack_bytes.
      	* config/arm/arm.c (arm_compute_static_chain_stack_bytes): Avoid
      	re-computing once computed.
      	(arm_expand_prologue): Compute machine->static_chain_stack_bytes.
      	(arm_init_machine_status): Initialize
      	machine->static_chain_stack_bytes.
      
      *** gcc/testsuite/ChangeLog ***
      
      2018-03-22  Sudakshina Das  <sudi.das@arm.com>
      
      	PR target/84826
      	* gcc.target/arm/pr84826.c: New test.
      
      From-SVN: r258777
      Sudakshina Das committed
    • [testsuite] Make sure dg-do is before dg-require-effective-target. · 253db553
      2018-03-22  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	gcc/testsuite/
      	* gcc.target/arm/addr-modes-float.c: Move dg-do before
      	dg-require-effective-target.
      	* gcc.target/arm/addr-modes-int.c: Likewise.
      	* gcc.target/nios2/lo-addr-tls.c: Likewise.
      
      From-SVN: r258776
      Christophe Lyon committed
    • re PR target/84760 (Finish implementation of __builtin_altivec_lvx_v1ti) · b51b0c9d
      gcc/ChangeLog:
      
      2018-03-22  Kelvin Nilsen  <kelvin@gcc.gnu.org>
      
      	PR target/84760
      	* doc/extend.texi: Add four new prototypes for vec_ld.
      	* config/rs6000/rs6000-builtin.def (LVX_V1TI): Reorder symbol
      	definitions for more logical presentation.
      	* config/rs6000/rs6000-c.c: (altivec_overloaded_builtins): Add
      	entries for V1TI variants of __builtin_altivec_ld builtin.
      	* config/rs6000/rs6000.c: (altivec_expand_lv_builtin): Add test and
      	handling of V1TI variant of LVX icode pattern.
      	(altivec_expand_builtin): Add case for ALTIVEC_BUILTIN_LVX_V1TI.
      	(rs6000_gimple_fold_builtin): Likewise.
      	(altivec_init_builtins): Add code to define
      	__builtin_altivec_lvx_v1ti function.
      
      gcc/testsuite/ChangeLog:
      
      2018-03-22  Kelvin Nilsen  <kelvin@gcc.gnu.org>
      
      	PR target/84760
      	* gcc.target/powerpc/altivec-ld-1.c: New test.
      
      From-SVN: r258774
      Kelvin Nilsen committed
    • PR libstdc++/85040 fix std::less<void> etc. ambiguities · 7c69a7d9
      	PR libstdc++/85040
      	* include/bits/stl_function.h (greater::__not_overloaded)
      	(less::__not_overloaded, greater_equal::__not_overloaded)
      	(less_equal::__not_overloaded): Fix ambiguous specializations.
      	* testsuite/20_util/function_objects/comparisons_pointer.cc: Add
      	tests for type with overlaoded operators.
      
      From-SVN: r258773
      Jonathan Wakely committed
    • pr83126.c: Require pthread for the test. · ece7d31f
      	gcc/testsuite
      	* gcc.dg/graphite/pr83126.c: Require pthread for the test.
      
      From-SVN: r258768
      Bin Cheng committed
    • xfail experimental/memory_resource/resource_adaptor.cc on 32-bit Solaris/x86 (PR libstdc++/77691) · 83872062
      	PR libstdc++/77691
      	* testsuite/experimental/memory_resource/resource_adaptor.cc:
      	xfail execution on 32-bit Solaris/x86.
      
      From-SVN: r258766
      Rainer Orth committed
    • re PR inline-asm/84941 (internal compiler error: in reg_overlap_mentioned_p, at… · 3c896da0
      re PR inline-asm/84941 (internal compiler error: in reg_overlap_mentioned_p, at rtlanal.c:1870 (reg_overlap_mentioned_p()/match_asm_constraints_1()))
      
      	PR inline-asm/84941
      	* function.c (match_asm_constraints_1): Don't do the optimization
      	if input isn't a REG, SUBREG, MEM or constant.
      
      	* gcc.dg/pr84941.c: New test.
      
      From-SVN: r258764
      Jakub Jelinek committed
    • Fix PR85025: libgcc/config/i386/shadow-stack-unwind.h is wrong. · f2620385
      	PR target/85025
      	* config/i386/shadow-stack-unwind.h (_Unwind_Frames_Extra):
      	Fix a typo, tmp => 255.
      
      From-SVN: r258763
      Igor Tsimbalist committed
    • [tail-merge] Don't merge bbs with bb_has_abnormal_pred · 71b7c365
      2018-03-22  Tom de Vries  <tom@codesourcery.com>
      
      	PR tree-optimization/84956
      	* tree-ssa-tail-merge.c (find_clusters_1): Skip bbs with
      	bb_has_abnormal_pred.
      
      	* gcc.dg/pr84956.c: New test.
      
      From-SVN: r258758
      Tom de Vries committed
    • re PR sanitizer/85018 (Many sanitizer tests ICE since r258681) · f13ed3ed
      	PR sanitizer/85018
      	* dwarf2asm.c (dw2_output_indirect_constant_1): Set
      	DECL_INITIAL (decl) to decl at the end.
      	* varasm.c (use_blocks_for_decl_p): Revert the 2018-03-20 change,
      	adjust the comment.
      
      From-SVN: r258757
      Jakub Jelinek committed
    • re PR c++/84854 (ICE: unexpected expression in cxx_eval_constant_expression, at… · 08ad2797
      re PR c++/84854 (ICE: unexpected expression in cxx_eval_constant_expression, at cp/constexpr.c:4774)
      
      	PR c++/84854
      	* semantics.c (finish_if_stmt_cond): Check if the type of the condition
      	is boolean.
      
      	* g++.dg/cpp1z/constexpr-if15.C: New test.
      	* g++.dg/cpp1z/constexpr-if16.C: New test.
      
      From-SVN: r258756
      Marek Polacek committed
    • PR c++/81311 - wrong C++17 overload resolution. · 2170d4b6
      	* call.c (build_user_type_conversion_1): Remove C++17 code.
      	(conv_binds_ref_to_prvalue): New.
      	(build_over_call): Handle C++17 copy elision.
      	(build_special_member_call): Only do C++17 copy elision here if the
      	argument is already the right type.
      
      From-SVN: r258755
      Jason Merrill committed
    • Daily bump. · a0e46153
      From-SVN: r258754
      GCC Administrator committed
  3. 21 Mar, 2018 5 commits
    • Adjust __builtin_tgmath handling of integer arguments to _FloatN narrowing macros. · c5c5822a
      When adding __builtin_tgmath to support a better tgmath.h
      implementation, I noted that further changes might be needed regarding
      the TS 18661 functions that round their results to a narrower type,
      because of unresolved issues with how the corresponding type-generic
      macros are defined in TS 18661.
      
      The resolution of those issues is still in flux, but the latest
      version does indeed require something slightly different from
      __builtin_tgmath.  It specifies that integer arguments to type-generic
      macros such as f32xadd are treated as _Float64 not double - which was
      also present in earlier versions of the resolution - but then it also
      specifies different handling for _Float64 arguments and double
      arguments, which wasn't in earlier versions.  Specifically, in the
      latest version
      <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2213.pdf>, f32xadd
      with _Float64 arguments would call f32xaddf64, while f32xadd with
      double arguments would call f32xaddf64x.  Since integer arguments are
      converted directly to the argument type of the selected function (not
      to double / _Float64x unless that ends up as the argument type), this
      is a user-visible difference in semantics that means __builtin_tgmath
      actually needs to implement treating integer arguments as _Float64 in
      this case (the rest of the latest semantics can then be implemented in
      the header, with a few inline functions there).
      
      To avoid releasing with the older version of the __builtin_tgmath
      semantics that doesn't work with the latest proposed DR#13 resolution,
      this patch implements a rule in __builtin_tgmath that maps integer
      types to _Float64 (respectively _Complex _Float64 for complex integer
      types) where all the specified functions return the same _FloatN or
      _FloatNx type.  This does not affect any existing uses of
      __builtin_tgmath in glibc's or GCC's tgmath.h since I haven't yet
      added any of these type-generic macros to glibc when adding the
      corresponding narrowing functions.
      
      Bootstrapped with no regressions on x86_64-pc-linux-gnu.
      
      	* doc/extend.texi (__builtin_tgmath): Document when complex
      	integer types are treated as _Complex _Float64.
      
      gcc/c:
      	* c-parser.c (c_parser_postfix_expression): For __builtin_tgmath
      	where all functions return the same _FloatN or _FloatNx type,
      	treat integer types as _Float64 instead of double.
      
      gcc/testsuite:
      	* gcc.dg/builtin-tgmath-3.c: New test.
      
      From-SVN: r258751
      Joseph Myers committed
    • [doc] Remove pasto in __builtin_extend_pointer doc · f4274af8
      2018-03-21  Tom de Vries  <tom@codesourcery.com>
      
      	* doc/extend.texi (__builtin_extend_pointer): Remove pasto.
      
      From-SVN: r258750
      Tom de Vries committed
    • [PR c++/71965] silence multi-dim array init sorry without tf_error · 0186f684
      We shouldn't substitute templates into short-circuited-out concepts
      constraints, but we do, and to add insult to injury, we issue a
      sorry() error when a concept that shouldn't even have been substituted
      attempts to perform a multi-dimensional array initialization with a
      new{} expression.
      
      Although fixing the requirements short-circuiting is probably too
      risky at this point, we can get closer to the intended effect by
      silencing that sorry just as we silence other errors.
      
      for  gcc/cp/ChangeLog
      
      	PR c++/71965
      	* init.c (build_vec_init): Silence error, former sorry,
      	without tf_error.
      
      for  gcc/testsuite/ChangeLog
      
      	PR c++/71965
      	* g++.dg/concepts/pr71965.C: New.
      
      From-SVN: r258749
      Alexandre Oliva committed
    • [PR c++/84610,84642] recover from implicit template parms gracefully · 7446b353
      If we get a parse error during an attempted fully implicit function
      template parse, and need to skip to the end of the statement or block,
      we may discard the function parms scope rather than the enclosing
      injected implicit template parms scope.  If we rollback a tentative
      parse and try something else, we'll no longer be in a function parms
      scope, but rather in a template parms scope, but we may still attempt
      to synthesize implicit template parms and then fail the assert that
      checks we're in a function parms scope.
      
      This patch introduces an alternative to
      finish_fully_implicit_template_p, to be used during error recovery,
      that floats the implicit template parm scope to the top so that it
      gets discarded as we finish and discard the failed implicit template
      data, while other scopes are retained as expected.  It also clears the
      implicit template parser data as we finish the template, so that it
      doesn't linger on referencing discarded or used scopes and parms.
      
      for gcc/cp/ChangeLog
      
      	PR c++/84610
      	PR c++/84642
      	* parser.c (abort_fully_implicit_template_p): New.
      	(cp_parser_skip_to_end_of_statement): Use it.
      	(cp_parser_skip_to_end_of_block_or_statement): Likewise.
      	(finish_fully_implicit_template_p): Clear
      	implicit_template_parms and implicit_template_scope.
      
      for  gcc/testsuite/ChangeLog
      
      	PR c++/84610
      	PR c++/84642
      	* g++.dg/cpp0x/pr84610.C: New.
      	* g++.dg/cpp0x/pr84642.C: New.
      
      From-SVN: r258748
      Alexandre Oliva committed
    • re PR c/84999 (ICE in make_vector_type, at tree.c:9561) · aa1c9429
      	PR c/84999
      	* c-typeck.c (build_binary_op): If c_common_type_for_size fails when
      	building vector comparison, diagnose it and return error_mark_node.
      
      	* c-c++-common/pr84999.c: New test.
      
      From-SVN: r258747
      Jakub Jelinek committed