summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* [PR c++/84729] convert new init to array elt typeaoliva/testmeAlexandre Oliva2018-03-102-2/+15
| | | | | | | | | | | | | | | | | | | A parenthesized initializer is 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. This patch fixes it: after turning the TREE_LIST initializer to a compound_expr, we convert it to the base type. for gcc/cp/ChangeLog PR c++/84729 * init.c (build_vec_init): Convert tree list to base type. for gcc/testsuite/ChangeLog PR c++/84729 * g++.dg/pr84729.C: New.
* [PR c++/84647] undeclared fn called in auto default arg in ptr declAlexandre Oliva2018-03-102-0/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We ICEd when attempting to convert a default arg for an auto parm, the default arg amounting to a call to an undeclared function, in a declaration of a pointer to function variable. It's all wrong, but because of the bogus implicit template, we accept the typeless expression at first. Later on, after we finish the implicit template because it's bogus (but deferring the reporting of the error to the end of cp_parser_init_declarator), no longer processing_template_decl, we attempt to perform the impossible conversion from NULL type to an unresolved and unresolvable type placeholder. We crash in implicit_conversion because FROM is NULL, and then (once we arrange to return a NULL conversion there) in perform_implicit_conversion_flags when trying to determine whether the expr is an invalid use of a nonstatic memfn. This patch makes implicit_conversion return NULL when the FROM type is NULL, and reports a proper error for typeless EXPRs in perform_implicit_conversion_flags. I considered testing for !processing_template_decl, but decided not to bother. FWIW, I'd tried temporarily incrementing processing_template_decl while completing the parsing of the bogus implicit template, but that didn't go very well: we'd skip the conversion all right, but start_decl would attempt to push_template_decl, and that would silently return error_mark_node, which would in turn silence the bogus implicit template error. With -fpermissive, all the other errors (misplaced auto, unexpected default arg in pointer declaration, and undeclared function call) would be turned to warnings or vanish altogether, so compilation would complete in spite of the bogus parsing and the failed template declaration. I decided not to explore that path further, and ended up working around the errors in the conversion, so as to make sure we'd get at least some error (we get all of them with the enclosed testcase). for gcc/cp/ChangeLog PR c++/84647 * call.c (implicit_conversion): Return NULL conv for NULL from type. (perform_implicit_conversion_flags): If conv is NULL, check for NULL expr type and report an error instead of ICEing. for gcc/testsuite/ChangeLog PR c++/84647 * g++.dg/cpp0x/pr84647.C: New.
* [PR c++/84610,84642] recover from implicit template parms gracefullyAlexandre Oliva2018-03-103-2/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* [LVU] reset view at function entry, omit views at line zeroaoliva2018-03-084-20/+109
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Location views might be associated with locations that lack line number information (line number zero), but since we omit .loc directives that would have been issued with line number zero, we also omit the symbolic view numbers that would have been issued at such points. Resetting views at function entry points address some of these issues, and alleviate the huge chains of symbolic views that have burdened assemblers since we disabled -ginternal-reset-location-views by default, but other problems of undefined views remain when it's not the whole function that lacks line number info, just parts of it. So, when we encounter a request to output a view that may have been referenced, but we decide to omit the .loc because the line is zero, we will now omit the view as well, i.e., we will internally regard that view as zero-numbered. for gcc/ChangeLog PR debug/84404 PR debug/84408 * dwarf2out.c (struct dw_line_info_table): Update comments for view == -1. (FORCE_RESET_NEXT_VIEW): New. (FORCE_RESETTING_VIEW_P): New. (RESETTING_VIEW_P): Check for -1 too. (ZERO_VIEW_P): Likewise. (new_line_info_table): Force-reset next view. (dwarf2out_begin_function): Likewise. (dwarf2out_source_line): Simplify zero_view_p initialization. Test FORCE_RESETTING_VIEW_P and RESETTING_VIEW_P instead of view directly. Omit view when omitting .loc at line 0. for gcc/testsuite/ChangeLog PR debug/84404 PR debug/84408 * gcc.dg/graphite/pr84404.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258355 138bc75d-0d04-0410-961f-82ee72b054a4
* PR tree-optimization/84740jakub2018-03-084-1/+33
| | | | | | | | | | * tree-switch-conversion.c (process_switch): Call build_constructors only if info.phi_count is non-zero. * gcc.dg/torture/pr84740.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258354 138bc75d-0d04-0410-961f-82ee72b054a4
* PR tree-optimization/84739jakub2018-03-084-1/+39
| | | | | | | | | | | * tree-tailcall.c (find_tail_calls): Check call arguments against DECL_ARGUMENTS (current_function_decl) rather than DECL_ARGUMENTS (func) when checking for tail recursion. * gcc.dg/pr84739.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258351 138bc75d-0d04-0410-961f-82ee72b054a4
* 2018-03-08 François Dumont <fdumont@gcc.gnu.org>fdumont2018-03-084-23/+46
| | | | | | | | | | | | | | | | * python/libstdcxx/v6/printers.py (NodeIteratorPrinter): New. (StdListIteratorPrinter): Inherit from latter. (StdFwdListIteratorPrinter): New, inherit from latter. (StdDebugIteratorPrinter.to_string): Use non-debug iterator printer when iterator has no associated container. (build_libstdcxx_dictionary): Add __gnu_cxx::_Fwd_list_iterator and __gnu_cxx::_Fwd_list_const_iterator printers. Remove __norm namespace registrations. * testsuite/libstdc++-prettyprinters/debug.cc: Adapt. * testsuite/libstdc++-prettyprinters/debug_cxx11.cc: Adapt. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258350 138bc75d-0d04-0410-961f-82ee72b054a4
* PR tree-optimization/83519 - missing -Wrestrict on an overlapping strcpy to ↵msebor2018-03-082-0/+46
| | | | | | | | | | | a non-member array gcc/testsuite/ChangeLog: * gcc.dg/Wrestrict-13.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258348 138bc75d-0d04-0410-961f-82ee72b054a4
* 2018-03-07 Steven G. Kargl <kargl@gcc.gnu.org>kargl2018-03-085-1/+59
| | | | | | | | | | | | | | | | PR fortran/64124 PR fortran/70409 * decl.c (gfc_match_char_spec): Try to reduce a charlen to a constant. 2018-03-07 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/64124 PR fortran/70409 * gfortran.dg/pr64124.f90: New tests. * gfortran.dg/pr70409.f90: New tests. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258347 138bc75d-0d04-0410-961f-82ee72b054a4
* Daily bump.gccadmin2018-03-081-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258345 138bc75d-0d04-0410-961f-82ee72b054a4
* * doc/contrib.texi: Add entries for Martin Liska, David Malcolm,jakub2018-03-072-4/+54
| | | | | | | | | Marek Polacek, extend Vladimir Makarov's, Jonathan Wakely's and Volker Reichelt's entry and add entries for people that perform GCC fuzzy testing and report numerous bugs. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258342 138bc75d-0d04-0410-961f-82ee72b054a4
* * lambda.c (is_capture_proxy_with_ref): Remove.jason2018-03-076-17/+10
| | | | | | * constexpr.c, expr.c, cp-tree.h, semantics.c: Adjust. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258341 138bc75d-0d04-0410-961f-82ee72b054a4
* rs6000: -mreadonly-in-sdata (PR82411)segher2018-03-076-1/+32
| | | | | | | | | | | | | | | | | | | | | This adds a new option -mreadonly-in-sdata (on by default) that controls whether readonly data can be put in sdata. (For EABI this does nothing, readonly data is put in sdata2 as usual). PR target/82411 * config/rs6000/rs6000.c (rs6000_elf_in_small_data_p): Don't put readonly data in sdata, if that is disabled. * config/rs6000/sysv4.opt (mreadonly-in-sdata): New option. * doc/invoke.texi (RS/6000 and PowerPC Options): Document -mreadonly-in-sdata option. gcc/testsuite/ PR target/82411 * gcc.target/powerpc/ppc-sdata-2.c: Skip if -mno-readonly-in-sdata. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258340 138bc75d-0d04-0410-961f-82ee72b054a4
* PR tree-optimization/84468 - bogus -Wstringop-truncation despite assignment ↵msebor2018-03-077-3/+462
| | | | | | | | | | | | | | | | | | | | | after conditional strncpy gcc/ChangeLog: PR tree-optimization/84468 * tree-ssa-strlen.c (maybe_diag_stxncpy_trunc): Consider successor basic block when looking for nul assignment. gcc/testsuite/ChangeLog: PR tree-optimization/84468 * g++.dg/warn/Wstringop-truncation-2.C: New test. * gcc.dg/Wstringop-truncation.c: New test. * gcc.dg/Wstringop-truncation-2.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258339 138bc75d-0d04-0410-961f-82ee72b054a4
* PR target/84277ebotcazou2018-03-078-21/+176
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * except.h (output_function_exception_table): Adjust prototype. * except.c (output_function_exception_table): Remove FNNAME parameter and add SECTION parameter. Ouput one part of the table at a time. * final.c (final_scan_insn_1) <NOTE_INSN_SWITCH_TEXT_SECTIONS>: Output the first part of the exception table and emit unwind directives. * config/i386/i386-protos.h (i386_pe_end_cold_function): Declare. (i386_pe_seh_cold_init): Likewise. * config/i386/cygming.h (ASM_DECLARE_COLD_FUNCTION_NAME): New macro. (ASM_DECLARE_COLD_FUNCTION_SIZE): Likewise. * config/i386/i386.c (x86_expand_epilogue): Fix wording in comment. (ix86_output_call_insn): Emit a nop in one more case for SEH. * config/i386/winnt.c: Include except.h. (struct seh_frame_state): Add reg_offset, after_prologue and in_cold_section fields. (i386_pe_seh_end_prologue): Set seh->after_prologue. (i386_pe_seh_cold_init): New function. (i386_pe_seh_fini): Add COLD parameter and bail out if it is not equal to seh->in_cold_section. (seh_emit_push): Record the offset of the push. (seh_emit_save): Record the offet of the save. (i386_pe_seh_unwind_emit): Deal with NOTE_INSN_SWITCH_TEXT_SECTIONS. Test seh->after_prologue to disregard the epilogue. (i386_pe_end_function): Pass FALSE to i386_pe_seh_fini. (i386_pe_end_cold_function): New function. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258338 138bc75d-0d04-0410-961f-82ee72b054a4
* runtime: push arena on AIX higher due to clashesian2018-03-072-3/+3
| | | | | | | Reviewed-on: https://go-review.googlesource.com/99117 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258337 138bc75d-0d04-0410-961f-82ee72b054a4
* runtime: use a fence instruction before rdtscian2018-03-072-5/+56
| | | | | | | | | | | | | | This implements the same choices made in the gc runtime, except that for 32-bit x86 we only use the fence instruction if the processor supports SSE2. The code here is hacked up for speed; the gc runtime uses straight assembler. Reviewed-on: https://go-review.googlesource.com/97715 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258336 138bc75d-0d04-0410-961f-82ee72b054a4
* Ada: Fix s-oscons.ads generationsh2018-03-072-2/+8
| | | | | | | | | | | | | | | | | The $(GNATLIBCFLAGS) are already included in $(GNATLIBCFLAGS_FOR_C). We must call the C compiler with the right machine flags. So, add $(GNATLIBCFLAGS_FOR_C) to $(OSCONS_EXTRACT). For example, on a bi-arch compiler supporting 32-bit and 64-bit instruction sets we pick otherwise only one variant due to a missing -m32 or -m64 flag. gcc/ada * gcc-interface/Makefile.in (OSCONS_CPP): Remove redundant $(GNATLIBCFLAGS). (OSCONS_EXTRACT): Add $(GNATLIBCFLAGS_FOR_C). git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258334 138bc75d-0d04-0410-961f-82ee72b054a4
* PR fortran/84565jakub2018-03-074-1/+15
| | | | | | | | | | * config/aarch64/predicates.md (aarch64_simd_reg_or_zero): Use aarch64_simd_or_scalar_imm_zero rather than aarch64_simd_imm_zero. * gfortran.dg/pr84565.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258333 138bc75d-0d04-0410-961f-82ee72b054a4
* PR c++/84704jakub2018-03-073-4/+24
| | | | | | | | | | * gimple-expr.c (create_tmp_var_raw): Set DECL_NAMELESS flag on tmp_var. * tree-pretty-print.c (dump_decl_name): For TDF_COMPARE_DEBUG, don't print names of DECL_NAMELESS DECL_IGNORED_P decls. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258317 138bc75d-0d04-0410-961f-82ee72b054a4
* PR middle-end/84723jakub2018-03-078-0/+97
| | | | | | | | | | | | | | | * multiple_target.c: Include tree-inline.h and intl.h. (expand_target_clones): Diagnose and fail if node->definition and !tree_versionable_function_p (node->decl). * gcc.target/i386/pr84723-1.c: New test. * gcc.target/i386/pr84723-2.c: New test. * gcc.target/i386/pr84723-3.c: New test. * gcc.target/i386/pr84723-4.c: New test. * gcc.target/i386/pr84723-5.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258316 138bc75d-0d04-0410-961f-82ee72b054a4
* Fix Changelog commit errro.denisc2018-03-071-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258314 138bc75d-0d04-0410-961f-82ee72b054a4
* * config/pa/pa.h (ASM_GENERATE_INTERNAL_LABEL): Revise to usedanglin2018-03-073-6/+34
| | | | | | | | | | | sprint_ul. (ASM_OUTPUT_ADDR_VEC_ELT): Revise for above change. (ASM_OUTPUT_ADDR_DIFF_ELT): Likewise. * config/pa/pa64-hpux.h (ASM_GENERATE_INTERNAL_LABEL): Revise as above. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258312 138bc75d-0d04-0410-961f-82ee72b054a4
* 2018-03-06 Steven G. Kargl <kargl@gcc.gnu.org>kargl2018-03-072-0/+35
| | | | | | | | PR fortran/64107 * gfortran.dg/pr64107.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258311 138bc75d-0d04-0410-961f-82ee72b054a4
* * config/pa/fptr.c (_dl_read_access_allowed): New.danglin2018-03-072-0/+25
| | | | | | | | (__canonicalize_funcptr_for_compare): Use it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258310 138bc75d-0d04-0410-961f-82ee72b054a4
* Daily bump.gccadmin2018-03-071-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258309 138bc75d-0d04-0410-961f-82ee72b054a4
* 2017-03-06 Thomas Koenig <tkoenig@gcc.gnu.org>tkoenig2018-03-066-26/+101
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PR fortran/84697 PR fortran/66128 * expr.c (simplify_parameter_variable): If p is a size zero array and not an ARRAY_EXPR insert an empty array constructor and return. * gfortran.h: Add prototype for gfc_is_size_zero_array. * simplify.c (is_size_zero_array): Make non-static and rename into (gfc_is_size_zero_array): Check for parameter arrays of zero size by comparing shape and absence of constructor. (gfc_simplify_all): Use gfc_is_size_zero_array instead of is_size_zero_array. (gfc_simplify_count): Likewise. (gfc_simplify_iall): Likewise. (gfc_simplify_iany): Likewise. (gfc_simplify_iparity): Likewise. (gfc_simplify_minval): Likewise. (gfc_simplify_maxval): Likewise. (gfc_simplify_product): Likewise. (gfc_simplify_sum): Likewise. 2017-03-06 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/84697 PR fortran/66128 * gfortran.dg/minmaxloc_zerosize_1.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258305 138bc75d-0d04-0410-961f-82ee72b054a4
* PR libstdc++/84601ville2018-03-064-29/+428
| | | | | | | | | | * include/std/optional (_Optional_payload): Split into multiple specializations that can handle different cases of trivial or non-trivial assignment operators. * testsuite/20_util/optional/84601.cc: New. * testsuite/20_util/optional/cons/value_neg.cc: Adjust. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258304 138bc75d-0d04-0410-961f-82ee72b054a4
* PR c++/84684mpolacek2018-03-064-0/+176
| | | | | | | | | | * constexpr.c (cxx_bind_parameters_in_call): Unshare evaluated arguments. * g++.dg/cpp1z/constexpr-84684.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258303 138bc75d-0d04-0410-961f-82ee72b054a4
* PR c/84721jakub2018-03-064-1/+17
| | | | | | | | | | * c-parser.c (add_debug_begin_stmt): Don't add DEBUG_BEGIN_STMT if !building_stmt_list_p (). * gcc.dg/pr84721.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258302 138bc75d-0d04-0410-961f-82ee72b054a4
* PR target/84710jakub2018-03-064-6/+26
| | | | | | | | | | * combine.c (try_combine): Use reg_or_subregno instead of handling just paradoxical SUBREGs and REGs. * gcc.dg/pr84710.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258301 138bc75d-0d04-0410-961f-82ee72b054a4
* 2018-03-06 Steven G. Kargl <kargl@gcc.gnu.org>kargl2018-03-065-4/+37
| | | | | | | | | | | | | | | PR fortran/56667 * primary.c (match_sym_complex_part): Give the matcher for an implied do-loop a chance to run. 2018-03-06 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/56667 * gfortran.dg/implied_do_2.f90: New test. * gfortran.dg/coarray_8.f90: Update for new error message. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258281 138bc75d-0d04-0410-961f-82ee72b054a4
* * gcc-interface/trans.c (convert_with_check): Fix typo in the conditionebotcazou2018-03-063-3/+9
| | | | | | | | guarding the overflow check emitted for the upper bound of a floating- point conversion. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258277 138bc75d-0d04-0410-961f-82ee72b054a4
* * gcc-interface/utils.c (def_builtin_1): Bail out on error_mark_node.ebotcazou2018-03-062-0/+7
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258276 138bc75d-0d04-0410-961f-82ee72b054a4
* [ARC] Cleanup unused functions.claziss2018-03-064-473/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove unused pieces of code. gcc/ 2018-03-06 Claudiu Zissulescu <claziss@synopsys.com> * config/arc/arc.c (arc_finalize_pic): Remove function. (arc_must_save_register): We use single base PIC register, remove checks to save/restore the PIC register. (arc_expand_prologue): Likewise. * config/arc/arc-protos.h (arc_set_default_type_attributes): Remove. (arc_verify_short): Likewise. (arc_attr_type): Likewise. * config/arc/arc.c (arc_set_default_type_attributes): Remove. (walk_stores): Likewise. (arc_address_cost): Make it static. (arc_verify_short): Likewise. (branch_dest): Likewise. (arc_attr_type): Likewise. * config/arc/arc.c (TARGET_ADJUST_INSN_LENGTH): Remove. (TARGET_INSN_LENGTH_PARAMETERS): Likewise. (arc_final_prescan_insn): Remove inserting the nops due to hardware hazards. It is done in reorg step. (insn_length_variant_t): Remove. (insn_length_parameters_t): Likewise. (arc_insn_length_parameters): Likewise. (arc_get_insn_variants): Likewise. * config/arc/arc.h (TARGET_UPSIZE_DBR): Remove. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258275 138bc75d-0d04-0410-961f-82ee72b054a4
* PR inline-asm/84683jakub2018-03-064-1/+22
| | | | | | | | | | * reg-stack.c (move_for_stack_reg): If any_malformed_asm, avoid assertion failure. * g++.dg/ext/pr84683.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258273 138bc75d-0d04-0410-961f-82ee72b054a4
* PR tree-optimization/84687jakub2018-03-065-0/+43
| | | | | | | | | | | * omp-simd-clone.c (simd_clone_create): Clear DECL_BUILT_IN_CLASS on new_node->decl. * match.pd (pow(C,x)*expN(y) -> expN(logN(C)*x+y)): New optimization. * gcc.dg/pr84687.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258272 138bc75d-0d04-0410-961f-82ee72b054a4
* [C++] [PR84231] overload on cond_expr in templateaoliva2018-03-067-9/+68
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A non-type-dependent COND_EXPR within a template is reconstructed with the original operands, after one with non-dependent proxies is built to determine its result type. This is problematic because the operands of a COND_EXPR determined to be an rvalue may have been converted to denote their rvalue nature. The reconstructed one, however, won't have such conversions, so lvalue_kind may not recognize it as an rvalue, which may lead to e.g. incorrect overload resolution decisions. If we mistake such a COND_EXPR for an lvalue, overload resolution might regard a conversion sequence that binds it to a non-const reference as viable, and then select that over one that binds it to a const reference. Only after template substitution would we rebuild the COND_EXPR, realize it is an rvalue, and conclude the reference binding is ill-formed, but at that point we'd have long discarded any alternate candidates we could have used. This patch modifies the logic that determines whether a (non-type-dependent) COND_EXPR in a template is an lvalue, to rely on its type, more specifically, on the presence of a REFERENCE_TYPE wrapper. In order to avoid a type bootstrapping problem, the REFERENCE_TYPE that wraps the type of some such COND_EXPRs is introduced earlier, so that we don't have to test for lvalueness of the expression using the very code that we wish to change. for gcc/cp/ChangeLog PR c++/84231 * tree.c (lvalue_kind): Use presence/absence of REFERENCE_TYPE only while processing template decls. * typeck.c (build_x_conditional_expr): Move wrapping of reference type around type... * call.c (build_conditional_expr_1): ... here. Rename is_lvalue to is_glvalue. * parser.c (cp_parser_fold_expression): Catch REFERENCE_REF_P INDIRECT_REF of COND_EXPR too. for gcc/testsuite/ChangeLog PR c++/84231 * g++.dg/pr84231.C: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258271 138bc75d-0d04-0410-961f-82ee72b054a4
* [PR c++/84593] ice on braced init with uninit ref fieldaoliva2018-03-064-1/+18
| | | | | | | | | | | | | | | | | | | | If an initializer expr is to be NULL in a ctor initializer list, we ICE in picflag_from_initializer and elsewhere. If we're missing an initializer for a reference field, we report the error, but then build a zero initializer to avoid the ICE. for gcc/cp/ChangeLog PR c++/84593 * init.c (build_zero_init_1): Zero-initialize references. for gcc/testsuite/ChangeLog PR c++/84593 * g++.dg/cpp1y/pr84593.C: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258270 138bc75d-0d04-0410-961f-82ee72b054a4
* [PR c++/84492] stmt expr ending with overloadaoliva2018-03-064-1/+59
| | | | | | | | | | | | | | | | | | | | | | We ICEd when returning a stmt expr that ends with an overloaded function, because instantiate_type did not know what to do with STMT_EXPRs. And it shouldn't have to: the expected type of a stmt expr cannot be used to resolve its value: an unresolved overload cannot supply the result of a stmt expr. Catch that and report the error in the stmt expr before we have a chance to instantiate it. for gcc/cp/ChangeLog PR c++/84492 * semantics.c (finish_stmt_expr_expr): Reject unresolved overloads used as stmt expr values. for gcc/testsuite/ChangeLog PR c++/84492 * g++.dg/pr84492.C: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258269 138bc75d-0d04-0410-961f-82ee72b054a4
* [gcc]wschmidt2018-03-065-3/+15
| | | | | | | | | | | | | | | | | | | | 2018-03-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com> * config/rs6000/rs6000-builtin.def (rs6000_speculation_barrier): Rename to ppc_speculation_barrier. * config/rs6000/rs6000.c (rs6000_init_builtins): Rename builtin to __builtin_ppc_speculation_barrier. [gcc/testsuite] 2018-03-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com> * gcc.target/powerpc/spec-barr-1.c: Change called function name to __builtin_ppc_speculation_barrier. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258268 138bc75d-0d04-0410-961f-82ee72b054a4
* Daily bump.gccadmin2018-03-061-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258267 138bc75d-0d04-0410-961f-82ee72b054a4
* PR c++/84708 - ICE with lambda in local class NSDMI.jason2018-03-053-12/+39
| | | | | | | * lambda.c (lambda_expr_this_capture): Handle local class NSDMI context. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258264 138bc75d-0d04-0410-961f-82ee72b054a4
* PR target/84700jakub2018-03-054-1/+29
| | | | | | | | | | | * combine.c (combine_simplify_rtx): Don't try to simplify if if_then_else_cond returned non-NULL, but either true_rtx or false_rtx are equal to x. * gcc.target/powerpc/pr84700.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258263 138bc75d-0d04-0410-961f-82ee72b054a4
* PR c++/84684jakub2018-03-052-3/+12
| | | | | | | | | * constexpr.c (constexpr_call_hasher::equal): Return false if lhs->hash != rhs->hash. Change return 1 to return true and return 0 to return false. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258262 138bc75d-0d04-0410-961f-82ee72b054a4
* rs6000: Don't align tiny loops to 32 bytes for POWER9segher2018-03-052-2/+6
| | | | | | | | | | | | | | For POWER4..POWER8 we align loops of 5..8 instructions to 32 bytes (instead of to 16 bytes) because that executes faster. This is no longer the case on POWER9, so we can just as well only align to 16 bytes. * config/rs6000/rs6000.c (rs6000_loop_align): Don't align tiny loops to 32 bytes when compiling for POWER9. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258260 138bc75d-0d04-0410-961f-82ee72b054a4
* libgo: fix typo in mksysinfo.sh scriptian2018-03-052-2/+2
| | | | | | | | | | Fix a small typo in the mksysinfo.sh script (incorrect input file for a grep command). Reviewed-on: https://go-review.googlesource.com/98635 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258259 138bc75d-0d04-0410-961f-82ee72b054a4
* [PR c++/84702] ICE with default tmpl arg of overload setnathan2018-03-054-0/+26
| | | | | | | | | | | | https://gcc.gnu.org/ml/gcc-patches/2018-03/msg00227.html PR c++/84702 * pt.c (process_template_arg): Mark lookup_keep on a default arg. PR c++/84702 * g++.dg/lookup/pr84702.C: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258258 138bc75d-0d04-0410-961f-82ee72b054a4
* PR target/84564jakub2018-03-054-4/+36
| | | | | | | | | | | * config/i386/i386.c (ix86_function_ok_for_sibcall): Check for regparm >= 3 with no arg reg available also for calls with flag_force_indirect_call. Pass decl to ix86_function_regparm. * gcc.target/i386/pr84564.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258256 138bc75d-0d04-0410-961f-82ee72b054a4
* PR c++/84707mpolacek2018-03-054-1/+22
| | | | | | | | | | * decl.c (duplicate_decls): Check DECL_NAME before accessing UDLIT_OPER_P. * g++.dg/cpp0x/inline-ns10.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258255 138bc75d-0d04-0410-961f-82ee72b054a4