aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2020-11-16further optimize non-store-motion LIMRichard Biener1-8/+16
This removes useless work from LIM when store-motion is disabled. 2020-11-16 Richard Biener <rguenther@suse.de> * tree-ssa-loop-im.c (analyze_memory_references): Add store_motion parameter and elide unnecessary work. (tree_ssa_lim_initialize): Likewise. (loop_invariant_motion_in_fun): Pass down store_motion.
2020-11-16IBM Z: Do not run long double tests on old machinesIlya Leoshkevich26-25/+60
gcc/testsuite/ChangeLog: 2020-11-12 Ilya Leoshkevich <iii@linux.ibm.com> * gcc.target/s390/s390.exp (check_effective_target_s390_z14_hw): New predicate. * gcc.target/s390/vector/long-double-caller-abi-run.c: Use the new predicate. * gcc.target/s390/vector/long-double-copysign.c: Likewise. * gcc.target/s390/vector/long-double-from-double.c: Likewise. * gcc.target/s390/vector/long-double-from-float.c: Likewise. * gcc.target/s390/vector/long-double-from-i16.c: Likewise. * gcc.target/s390/vector/long-double-from-i32.c: Likewise. * gcc.target/s390/vector/long-double-from-i64.c: Likewise. * gcc.target/s390/vector/long-double-from-i8.c: Likewise. * gcc.target/s390/vector/long-double-from-u16.c: Likewise. * gcc.target/s390/vector/long-double-from-u32.c: Likewise. * gcc.target/s390/vector/long-double-from-u64.c: Likewise. * gcc.target/s390/vector/long-double-from-u8.c: Likewise. * gcc.target/s390/vector/long-double-to-double.c: Likewise. * gcc.target/s390/vector/long-double-to-float.c: Likewise. * gcc.target/s390/vector/long-double-to-i16.c: Likewise. * gcc.target/s390/vector/long-double-to-i32.c: Likewise. * gcc.target/s390/vector/long-double-to-i64.c: Likewise. * gcc.target/s390/vector/long-double-to-i8.c: Likewise. * gcc.target/s390/vector/long-double-to-u16.c: Likewise. * gcc.target/s390/vector/long-double-to-u32.c: Likewise. * gcc.target/s390/vector/long-double-to-u64.c: Likewise. * gcc.target/s390/vector/long-double-to-u8.c: Likewise. * gcc.target/s390/vector/long-double-wfaxb.c: Likewise. * gcc.target/s390/vector/long-double-wfdxb.c: Likewise. * gcc.target/s390/vector/long-double-wfsxb-1.c: Likewise.
2020-11-16modref: add missing Param Optimization keywordsMartin Liska1-5/+5
Fixes: FAIL: compiler driver --help=common option(s): "^ +-.*[^:.]$" absent from output: " --param=modref-max-depth= Maximum depth of DFS walk used by modref escape analysis" gcc/ChangeLog: * params.opt: All modref parameters miss Optimization and Param keyword as seen in testsuite failure.
2020-11-16Fix -param=modref-max-depth in params.optJan Hubicka1-1/+1
* params.opt (-param=modref-max-depth=): Add missing full stop.
2020-11-16pointer-compare-1.c: Add __attribute__((used))H.J. Lu1-3/+4
c-c++-common/asan/pointer-compare-1.c assumes the certain order for variable placement. Add __attribute__((used)) to avoid variable placement changes due to SHF_GNU_RETAIN. PR testsuite/97803 * c-c++-common/asan/pointer-compare-1.c (global1): Add __attribute__((used)) (global2): Likewise. (small_global): Likewise. (large_global): Likewise.
2020-11-16gcov: Add -fprofile-info-section supportSebastian Huber5-2/+87
Register the profile information in the specified section instead of using a constructor/destructor. A pointer to the profile information generated by -fprofile-arcs or -ftest-coverage is placed in the specified section for each translation unit. This option disables the profile information registration through a constructor and it disables the profile information processing through a destructor. I am not sure how I can test this option. One approach would be to assemble a test file, then scan it and check that a .gcov_info section is present and no __gcov_init() and __gcov_exit() calls are present. Is there an example for this in the test suite? gcc/ * common.opt (fprofile-info-section): New. * coverage.c (build_gcov_info_var_registration): New. (coverage_obj_init): Evaluate profile_info_section and use build_gcov_info_var_registration(). * doc/invoke.texi (fprofile-info-section): Document. * opts.c (common_handle_option): Process fprofile-info-section option. gcc/testsuite/ChangeLog: * gcc.dg/profile-info-section.c: New test.
2020-11-16tree-optimization/97838 - fix SLP leaf detectionRichard Biener2-5/+28
This properly handles reduction PHI nodes with unrepresented initial value as leaf in the SLP graph. 2020-11-16 Richard Biener <rguenther@suse.de> PR tree-optimization/97838 * tree-vect-slp.c (vect_slp_build_vertices): Properly handle not backwards reachable cycles. (vect_optimize_slp): Check a node is leaf before marking it visited. * gcc.dg/vect/pr97838.c: New testcase.
2020-11-16Prefer bit-test over the jump table.Martin Liska3-8/+20
gcc/ChangeLog: PR tree-optimization/97736 * tree-switch-conversion.c (switch_decision_tree::analyze_switch_statement): Prefer bit tests. gcc/testsuite/ChangeLog: PR tree-optimization/97736 * gcc.dg/tree-ssa/switch-1.c: Prefer bit tests. * g++.dg/tree-ssa/pr97736.C: New test.
2020-11-16tree-optimization/97835 - fix step vector construction for SLP inductionRichard Biener2-1/+22
We're stripping conversions off access functions of inductions and thus the step can be of different sign. Fix bogus step CTORs by converting the elements rather than the whole vector. 2020-11-16 Richard Biener <rguenther@suse.de> PR tree-optimization/97835 * tree-vect-loop.c (vectorizable_induction): Convert step scalars rather than step vector. * gcc.dg/vect/pr97835.c: New testcase.
2020-11-16tree-optimization/97830 - fix compare of incomplete type size in VNRichard Biener2-1/+28
This avoids passing NULL to expressions_equal_p. 2020-11-16 Richard Biener <rguenther@suse.de> PR tree-optimization/97830 * tree-ssa-sccvn.c (vn_reference_eq): Check for incomplete types before comparing TYPE_SIZE. * gcc.dg/pr97830.c: New testcase.
2020-11-16Put PREFETCHW back to march=broadwellCui,Lili2-24/+29
PREFETCHW should be both in march=broadwell and march=silvermont. I move PREFETCHW from march=broadwell to march=silvermont in previous patch. gcc/ChangeLog: * config/i386/i386.h: Add PREFETCHW to march=broadwell. * doc/invoke.texi: Put PREFETCHW back to relation arch.
2020-11-16Daily bump.GCC Administrator4-1/+109
2020-11-15MSP430: Fix inconsistent naming of hwmult libfuncsJozef Lawrynowicz2-23/+1
The naming scheme used by GCC to reference MSP430 hardware multiply library functions is inconsistent. Sometimes the "GCC" names (e.g. mulsi2) are used, other times the "MSPABI" names (e.g. __mspabi_mpyl) are used. Also, sometimes an identifier for the hardware multiply support is appended to the GCC name, when the functions are defined, but this is not required. This patch fixes those issues, so the names used to refer to the hardware multiply library functions follow a consistent pattern. gcc/ChangeLog: * config/msp430/msp430.c (msp430_output_labelref): Don't process mspabi hwmult library function names into GCC-style names. libgcc/ChangeLog: * config/msp430/lib2hw_mul.S: Omit _hw* suffix from GCC names for hwmult library functions. gcc/testsuite/ChangeLog: * gcc.target/msp430/rtx-cost-Os-f5series.c: Adjust test to use new hwmult library function name.
2020-11-15MSP430: Define function to check 16-bit hwmult supportJozef Lawrynowicz1-12/+39
gcc/ChangeLog: * config/msp430/msp430.c (msp430_use_16bit_hwmult): New. (use_32bit_hwmult): Rename to.. (msp430_use_32bit_hwmult): ..this. (msp430_muldiv_costs): Use msp430_use_16bit_hwmult and msp430_use_32bit_hwmult. (msp430_expand_helper): Use msp430_use_16bit_hwmult and msp430_use_32bit_hwmult. (msp430_output_labelref): Use msp430_use_32bit_hwmult.
2020-11-15testsuite: fix ipa/modref-2.c on ilp32David Edelsohn1-2/+3
ipa/modref-2.c output for Parm 1 depends on the word size. This patch updates the testcase to expect the appropriate result for ilp32 and lp64. gcc/testsuite/ChangeLog: * gcc.dg/ipa/modref-2.c: Add ilp32 expected result.
2020-11-15testsuite: Update scanning symbol sections to support AIX.David Edelsohn6-26/+26
gcc/testsuite: * lib/scanasm.exp (parse_section_of_symbols): Also look for AIX XCOFF CSECT notation. * g++.dg/opt/const4.C: Also look for AIX XCOFF "[RO]". * gcc.dg/20021029-1.c: Likewise. * gcc.dg/array-quals-1.c: Likewise and "[RW]". * g++.dg/gomp/tls-5.C: Also look for AIX XCOFF "[TL]". * gcc.dg/pr25376.c: Accept AIX decoration around named section and function descriptor.
2020-11-15VAX: Use `rtx_code' to hold the RTL expression code in `vax_rtx_costs'Maciej W. Rozycki1-1/+1
Use `enum rtx_code' rather than `int' to hold the the RTL expression code in `vax_rtx_costs', matching the type these codes have been defined with and making debugging just a tiny little bit easier. gcc/ * config/vax/vax.c (vax_rtx_costs): Use `rtx_code' rather than `int' for `code'.
2020-11-15VAX/testsuite: Fix compilation options for `bswapdi-1.c'Maciej W. Rozycki1-0/+2
Correct a regression in `vax-netbsdelf' gcc testing: .../gcc/testsuite/gcc.target/vax/bswapdi-1.c: In function '__bswapdi2': .../gcc/testsuite/gcc.target/vax/bswapdi-1.c:5:19: error: use of C99 long long integer constant [-Wlong-long] .../gcc/testsuite/gcc.target/vax/bswapdi-1.c:6:14: error: use of C99 long long integer constant [-Wlong-long] .../gcc/testsuite/gcc.target/vax/bswapdi-1.c:7:14: error: use of C99 long long integer constant [-Wlong-long] .../gcc/testsuite/gcc.target/vax/bswapdi-1.c:8:14: error: use of C99 long long integer constant [-Wlong-long] .../gcc/testsuite/gcc.target/vax/bswapdi-1.c:9:14: error: use of C99 long long integer constant [-Wlong-long] .../gcc/testsuite/gcc.target/vax/bswapdi-1.c:10:14: error: use of C99 long long integer constant [-Wlong-long] .../gcc/testsuite/gcc.target/vax/bswapdi-1.c:11:14: error: use of C99 long long integer constant [-Wlong-long] .../gcc/testsuite/gcc.target/vax/bswapdi-1.c:12:14: error: use of C99 long long integer constant [-Wlong-long] compiler exited with status 1 FAIL: gcc.target/vax/bswapdi-1.c (test for excess errors) which is due to the defaults from `vax.exp': # If a testcase doesn't have special options, use these. global DEFAULT_CFLAGS if ![info exists DEFAULT_CFLAGS] then { set DEFAULT_CFLAGS " -ansi -pedantic-errors" } Use an empty override then as the options used do not matter for the objective of this test case. gcc/testsuite/ * gcc.target/vax/bswapdi-1.c (dg-options): New setting.
2020-11-15VAX: Fix a typo in NO_EXTERNAL_INDIRECT_ADDRESSMaciej W. Rozycki1-1/+1
Fix a typo in a NO_EXTERNAL_INDIRECT_ADDRESS macro check around an assertion verifying DImode addition operands to be valid for PIC. gcc/ * config/vax/vax.c (vax_output_int_add) <E_DImode>: Fix a typo in NO_EXTERNAL_INDIRECT_ADDRESS.
2020-11-15VAX: Correct a typo in PIC symbolic addition operand checksMaciej W. Rozycki1-1/+1
Fix a typo and check both SImode addition operands for being incorrectly symbolic in PIC mode before issuing a diagnostic dump of the offending RTL expression. gcc/ * config/vax/vax.c (vax_output_int_add) <E_SImode>: Also check `operands[2]' for being symbolic with PIC rather than checking `operands[1]' twice.
2020-11-15c++: Check abstract type only on object creation. [PR86252]Jason Merrill11-243/+151
Abstract checking has been problematic for a while; when I implemented an earlier issue resolution to do more checking it led to undesirable instantiations, and so backed some of it out. During the C++20 process we decided with P0929R2 that we should go the other way, and only check abstractness when we're actually creating an object, not when merely forming an array or function type. This means that we can remove the machinery for checking whether a newly complete class makes some earlier declaration ill-formed. This change was moved as a DR, so I'm applying it to all standard levels. This could be reconsidered if it causes problems, but I don't expect it to. The change to the libstdc++ result_of test brings the expected behavior in line with that for incomplete types, but as in PR97841 I think the libstdc++ handling of incomplete types in this and other type_traits is itself wrong, so I expect these lines and others to change again before long. gcc/cp/ChangeLog: * decl.c (cp_finish_decl): Only check abstractness on definition. (require_complete_types_for_parms): Check abstractness here. (create_array_type_for_decl): Not here. (grokdeclarator, grokparms, complete_vars): Not here. * pt.c (tsubst, tsubst_arg_types, tsubst_function_type): Not here. * typeck2.c (struct pending_abstract_type): Remove. (struct abstract_type_hasher): Remove. (abstract_pending_vars, complete_type_check_abstract): Remove. (abstract_virtuals_error_sfinae): Handle arrays. * call.c (conv_is_prvalue): Split out from... (conv_binds_ref_to_prvalue): ...here. (implicit_conversion_1): Rename from implicit_conversion. (implicit_conversion): An abstract prvalue is bad. (convert_like_internal): Don't complain if expr is already error_mark_node. gcc/testsuite/ChangeLog: * g++.dg/other/abstract1.C: Adjust. * g++.dg/other/abstract2.C: Adjust. * g++.dg/other/abstract4.C: Adjust. * g++.dg/other/abstract5.C: Adjust. * g++.dg/other/abstract8.C: New test. * g++.dg/template/sfinae-dr657.C: Adjust. * g++.old-deja/g++.other/decl3.C: Adjust. libstdc++-v3/ChangeLog: * testsuite/20_util/result_of/sfinae_friendly_1.cc: Adjust.
2020-11-15Remove duplicate vr_values::extract_range_builtin code.Aldy Hernandez2-227/+21
Now that we know the vr_values and ranger versions are in sync, it is safe to remove the vr_values version and just call the ranger one. I am leaving the UBSAN bits in place since they make use of relationals which are still not implemented in the ranger. gcc/ChangeLog: * vr-values.c (vr_values::extract_range_builtin): Rename to... (vr_values::extract_range_from_ubsan_builtin): ...this. Remove everything but UBSAN code. (vr_values::extract_range_basic): Call ranger version for everything except UBSAN built-ins. * vr-values.h (class vr_values): Rename extract_range_builtin to extract_range_from_ubsan_builtin.
2020-11-15Do not put reload insns in the last empty BB.Vladimir N. Makarov1-4/+12
gcc/ * lra.c (lra_process_new_insns): Don't put reload insns in the last empty BB.
2020-11-15Mare return to clear EAF_UNUSED flag.Jan Hubicka2-2/+21
gcc/ChangeLog: * ipa-modref.c (analyze_ssa_name_flags): Make return to clear EAF_UNUSED flag. gcc/testsuite/ChangeLog: * gcc.c-torture/execute/pr97836.c: New test.
2020-11-15Daily bump.GCC Administrator3-1/+105
2020-11-14testsuite, Objective-C : Amend PR23214 for Darwin11.Iain Sandoe1-1/+1
The test needs to use Object rather than NSObject on this and earlier OS versions. Although the PR reports against the GNU runtime, we run this on NeXT as well. gcc/testsuite/ChangeLog: * objc.dg/pr23214.m: Use Object as the root object before Darwin12 (and NSObject after).
2020-11-14Escape parameters in gcc.dg/torture/pta-ptrarith-1.cJan Hubicka1-0/+3
* gcc.dg/torture/pta-ptrarith-1.c: Escape parameters.
2020-11-14Detect EAF flags in ipa-modrefJan Hubicka5-20/+414
A minimal patch for the EAF flags discovery. It works only in local ipa-modref and gives up on cyclic SSA graphs. It improves pt_solution_includes disambiguations twice. gcc/Changelog: * gimple.c: Include ipa-modref-tree.h and ipa-modref.h. (gimple_call_arg_flags): Use modref to determine flags. * ipa-modref.c: Include gimple-ssa.h, tree-phinodes.h, tree-ssa-operands.h, stringpool.h and tree-ssanames.h. (analyze_ssa_name_flags): Declare. (modref_summary::useful_p): Summary is also useful if arg flags are known. (dump_eaf_flags): New function. (modref_summary::dump): Use it. (get_modref_function_summary): Be read for current_function_decl being NULL. (memory_access_to): New function. (deref_flags): New function. (call_lhs_flags): New function. (analyze_parms): New function. (analyze_function): Use it. * ipa-modref.h (struct modref_summary): Add arg_flags. * doc/invoke.texi (ipa-modref-max-depth): Document. * params.opt (ipa-modref-max-depth): New param.
2020-11-14dwarf2: Emit DW_TAG_unspecified_parameters even in late DWARF [PR97599]Jakub Jelinek1-0/+8
Aldy's PR71855 fix avoided emitting multiple redundant DW_TAG_unspecified_parameters sub-DIEs of a single DIE by restricting it to early dwarf only. That unfortunately means if we need to emit another DIE for the function (whether it is for LTO, or e.g. because of IPA cloning), we don't emit DW_TAG_unspecified_parameters, it remains solely in the DW_AT_abstract_origin's referenced DIE. But DWARF consumers don't really use DW_TAG_unspecified_parameters from there, like we duplicate DW_TAG_formal_parameter sub-DIEs even in the clones because either they have some more specific location, or e.g. a function clone could have fewer or different argument types etc., they need to assume that originally stdarg function isn't later stdarg etc. Unfortunately, while for DW_TAG_formal_parameter sub-DIEs, we can use the hash tabs to look the PARM_DECLs if we already have the DIEs, for DW_TAG_unspecified_parameters we don't have an easy way to look it up. The following patch handles it by trying to figure out if we are creating a fresh new DIE (in that case we add DW_TAG_unspecified_parameters if it is stdarg), or if gen_subprogram_die is called again on an pre-existing DIE to fill in some further details (then it will not touch it). Except for lto, subr_die != old_die would be good enough, but unfortunately for LTO the new DIE that will refer to early dwarf created DIE is created on the fly during lookup_decl_die. So the patch tracks if the DIE has no children before any children are added to it. 2020-11-14 Jakub Jelinek <jakub@redhat.com> PR debug/97599 * dwarf2out.c (gen_subprogram_die): Call gen_unspecified_parameters_die even if not early dwarf, but only if subr_die is a newly created DIE.
2020-11-14Simplify testing symbol sectionsMatthew Glazar12-6/+292
gcc/testsuite * lib/scanasm.exp (dg-scan): Extract file globbing code ... (dg_glob_remote): ... into this new procedure. (scan-assembler-symbol-section): Define. (scan-symbol-section): Define. * g++.dg/gomp/tls-5.C: Add symbol section test. * g++.dg/opt/const4.C: Likewise. * gcc.dg/20021029-1.c: Likewise. * gcc.dg/array-quals-1.c: Likewise. * gcc.dg/darwin-sections.c: Likewise. * gcc.dg/pr25376.c: Likewise. * gcc.test-framework/test-framework.exp: Load scanasm and test .S files. * gcc.test-framework/dg-scan-symbol-section-1-exp-F.S: New test. * gcc.test-framework/dg-scan-symbol-section-2-exp-F.S: New test. * gcc.test-framework/dg-scan-symbol-section-3-exp-F.S: New test. * gcc.test-framework/dg-scan-symbol-section-exp-P.S: New test.
2020-11-13PR target/97682 - Fix to reuse t1 register between call address and epilogue.Monk Chiang5-16/+181
- When expanding the call pattern, choose t1 register be a jump register. Epilogue also uses a t1 register to adjust Stack point. The call pattern and epilogue will initial t1 twice, if both are generated in the same function. The call pattern will emit 'la t1,symbol' and 'jalr t1'instructions. Epilogue also emits 'li t1,4096' and 'addi sp,sp,t1' instructions. But li and addi instructions will be placed between la and jalr instructions. The la instruction will be removed by some optimizations, because t1 register define twice, the first define instruction look likes duplicate. - To resolve this issue, Prologue and Epilogue use the t0 register be a temporary register, the call pattern use the t1 register be a temporary register. gcc/ 2020-11-13 Monk Chiang <monk.chiang@sifive.com> PR target/97682 * config/riscv/riscv.h (RISCV_PROLOGUE_TEMP_REGNUM): Change register to t0. (RISCV_CALL_ADDRESS_TEMP_REGNUM): New Marco, define t1 register. (RISCV_CALL_ADDRESS_TEMP): Use it for call instructions. * config/riscv/riscv.c (riscv_legitimize_call_address): Use RISCV_CALL_ADDRESS_TEMP. (riscv_compute_frame_info): Change temporary register to t0 form t1. (riscv_trampoline_init): Adjust comment. gcc/testsuite/ 2020-11-13 Monk Chiang <monk.chiang@sifive.com> PR target/97682 * g++.target/riscv/pr97682.C: New test. * gcc.target/riscv/interrupt-3.c: Check register for t0. * gcc.target/riscv/interrupt-4.c: Likewise.
2020-11-13Asan changes for RISC-V.Jim Wilson4-3/+22
We have only riscv64 asan support, there is no riscv32 support as yet. So I need to be able to conditionally enable asan support for the riscv target. I implemented this by returning zero from the asan_shadow_offset function. This requires a change to toplev.c and docs in target.def. gcc/ * config/riscv/riscv.c (riscv_asan_shadow_offset): New. (TARGET_ASAN_SHADOW_OFFSET): New. * doc/tm.texi: Regenerated. * target.def (asan_shadow_offset); Mention that it can return zero. * toplev.c (process_options): Check for and handle zero return from targetm.asan_shadow_offset call. Co-Authored-By: cooper.joshua <cooper.joshua@linux.alibaba.com>
2020-11-14openmp: Add support for non-VLA {,first}private allocate on omp taskJakub Jelinek2-27/+105
This patch adds support for custom allocators on private/firstprivate clauses for task (and taskloop) constructs. Private didn't need anything special, but firstprivate if it is passed by reference needs the GOMP_alloc calls in the copyfn and GOMP_free in the task body. 2020-11-14 Jakub Jelinek <jakub@redhat.com> * gimplify.c (gimplify_omp_for): Add OMP_CLAUSE_ALLOCATE_ALLOCATOR decls as firstprivate on task clauses even when allocate clause decl is not lastprivate. * omp-low.c (install_var_field): Don't dereference omp_is_reference types if mask is 33 rather than 1. (scan_sharing_clauses): Populate allocate_map even for task constructs. For now remove it back for variables mentioned in reduction and in_reduction clauses on task/taskloop constructs or on VLA task firstprivates. For firstprivate on task construct, install the var field into field_map with by_ref and 33 instead of false and 1 if mentioned in allocate clause. (lower_private_allocate): Set TREE_THIS_NOTRAP on the created MEM_REF. (lower_rec_input_clauses): Handle allocate for task firstprivatized non-VLA variables. (create_task_copyfn): Likewise. * testsuite/libgomp.c-c++-common/allocate-1.c (struct S): New type. (foo): Add tests for non-VLA private and firstprivate clauses on omp task. (bar): Likewise. Remove taking of address from private/firstprivate variables. * testsuite/libgomp.c++/allocate-1.C (struct S): New type. (foo): Add p, q, px and s arguments. Add tests for array reductions and for non-VLA private and firstprivate clauses on omp task. (bar): Removed. (main): Adjust foo caller. Don't call bar.
2020-11-14Daily bump.GCC Administrator9-1/+957
2020-11-13c: C2x binary constantsJoseph Myers8-5/+52
C2x adds binary integer constants (approved at the last WG14 meeting, though not yet added to the working draft in git). Configure libcpp to consider these a standard feature in C2x mode, with appropriate updates to diagnostics including support for diagnosing them with -std=c2x -Wc11-c2x-compat. Bootstrapped with no regressions for x86_64-pc-linux-gnu. gcc/testsuite/ 2020-11-13 Joseph Myers <joseph@codesourcery.com> * gcc.dg/binary-constants-2.c, gcc.dg/binary-constants-3.c, gcc.dg/system-binary-constants-1.c: Update expected diagnostics. * gcc.dg/c11-binary-constants-1.c, gcc.dg/c11-binary-constants-2.c, gcc.dg/c2x-binary-constants-1.c, gcc.dg/c2x-binary-constants-2.c, gcc.dg/c2x-binary-constants-3.c: New tests. libcpp/ 2020-11-13 Joseph Myers <joseph@codesourcery.com> * expr.c (cpp_classify_number): Update diagnostic for binary constants for C. Also diagnose binary constants for -Wc11-c2x-compat. * init.c (lang_defaults): Enable binary constants for GNUC2X and STDC2X.
2020-11-13Revert accidental commitJan Hubicka1-2/+0
* tree-ssa-alias.c (ao_ref_base_alias_ptr_type): Remove accidental commit. (ao_ref_alias_ptr_type): Remove accidental commit.
2020-11-13testsuite: guality/redeclaration1.C test workaroundJakub Jelinek1-2/+6
Apparently older GDB versions didn't handle this test right and so while it has been properly printing 42 on line 14 (e.g. on x86_64), it issued a weird error on line 17 (and because it didn't print any value, guality testsuite wasn't marking it as FAIL). That has been apparently fixed in GDB 10, where it now (on x86_64) prints properly. Unfortunately that revealed that the test can suffer from instruction scheduling, where e.g. on i686 (but various other arches) the very first insn of the function (or whatever b 14 is on) happens to be load of the S::i variable from memory and that insn has the inner lexical scope, so GDB 10 prints there 24 instead of 42. The following insn is then the first store to l and there the automatic i is in scope and prints as 42 and then the second store to l where the inner lexical scope is current and prints 24 again. The test wasn't meant about insn scheduling but about whether we emit the DIEs properly, so this hack attempts to prevent the undesirable scheduling. 2020-11-13 Jakub Jelinek <jakub@redhat.com> * g++.dg/guality/redeclaration1.C (p): New variable. (S::f): Increment what p points to before storing S::i into l. Adjust gdb-test line numbers. (main): Initialize p to address of an automatic variable.
2020-11-13c++: Predefine __STDCPP_THREADS__ in the compiler if thread model is not ↵Jakub Jelinek1-0/+7
single [PR63287] The following patch predefines __STDCPP_THREADS__ macro to 1 if c++11 or later and thread model (e.g. printed by gcc -v) is not single. There are two targets not handled by this patch, those that define THREAD_MODEL_SPEC. In one case - QNX - it looks just like a mistake to me, instead of setting thread_model=posix in config.gcc it uses THREAD_MODEL_SPEC macro to set it unconditionally to posix. The other is hpux10, which uses -threads option to decide if threads are enabled or not, but that option isn't really passed to the compiler. I think that is something that really should be solved in config/pa/ instead, e.g. in the config/xxx/xxx-c.c targets usually set their own predefined macros and it could handle this, and either pass the option also to the compiler, or say predefine __STDCPP_THREADS__ if _DCE_THREADS macro is defined already (or -D_DCE_THREADS found on the command line), or whatever else. 2020-11-13 Jakub Jelinek <jakub@redhat.com> PR c++/63287 * c-cppbuiltin.c: Include configargs.h. (c_cpp_builtins): For C++11 and later if THREAD_MODEL_SPEC is not defined, predefine __STDCPP_THREADS__ to 1 unless thread_model is "single".
2020-11-13In 'gcc/omp-oacc-kernels-decompose.cc', use langhook instead of accessing ↵Kwok Cheung Yeung1-3/+8
language-specific decl information gcc/ * omp-oacc-kernels-decompose.cc (maybe_build_inner_data_region): Use langhook instead of accessing language-specific decl information.
2020-11-13Decompose OpenACC 'kernels' constructs into parts, a sequence of compute ↵Gergö Barany21-13/+2289
constructs Not yet enabled by default: for now, the current mode of OpenACC 'kernels' constructs handling still remains '-fopenacc-kernels=parloops', but that is to change later. gcc/ * omp-oacc-kernels-decompose.cc: New. * Makefile.in (OBJS): Add it. * passes.def: Instantiate it. * tree-pass.h (make_pass_omp_oacc_kernels_decompose): Declare. * flag-types.h (enum openacc_kernels): Add. * doc/invoke.texi (-fopenacc-kernels): Document. * gimple.h (enum gf_mask): Add 'GF_OMP_TARGET_KIND_OACC_PARALLEL_KERNELS_PARALLELIZED', 'GF_OMP_TARGET_KIND_OACC_PARALLEL_KERNELS_GANG_SINGLE', 'GF_OMP_TARGET_KIND_OACC_DATA_KERNELS'. (is_gimple_omp_oacc, is_gimple_omp_offloaded): Handle these. * gimple-pretty-print.c (dump_gimple_omp_target): Likewise. * omp-expand.c (expand_omp_target, build_omp_regions_1) (omp_make_gimple_edges): Likewise. * omp-low.c (scan_sharing_clauses, scan_omp_for) (check_omp_nesting_restrictions, lower_oacc_reductions) (lower_oacc_head_mark, lower_omp_target): Likewise. * omp-offload.c (execute_oacc_device_lower): Likewise. gcc/c-family/ * c.opt (fopenacc-kernels): Add. gcc/fortran/ * lang.opt (fopenacc-kernels): Add. gcc/testsuite/ * c-c++-common/goacc/kernels-decompose-1.c: New. * c-c++-common/goacc/kernels-decompose-2.c: New. * c-c++-common/goacc/kernels-decompose-ice-1.c: New. * c-c++-common/goacc/kernels-decompose-ice-2.c: New. * gfortran.dg/goacc/kernels-decompose-1.f95: New. * gfortran.dg/goacc/kernels-decompose-2.f95: New. * c-c++-common/goacc/if-clause-2.c: Adjust. * gfortran.dg/goacc/kernels-tree.f95: Likewise. libgomp/ * testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c: New. * testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/declare-vla.c: Adjust. * testsuite/libgomp.oacc-fortran/pr94358-1.f90: Likewise. Co-authored-by: Thomas Schwinge <thomas@codesourcery.com>
2020-11-13More explicit checking of which OMP constructs we're expectingThomas Schwinge1-14/+45
In particular, more precisely highlight what applies generally vs. the special handling for the current 'parloops'-based OpenACC 'kernels' implementation. gcc/ * omp-low.c (scan_sharing_clauses, scan_omp_for) (lower_oacc_reductions, lower_omp_target): More explicit checking of which OMP constructs we're expecting.
2020-11-13Attach an attribute to all outlined OpenACC compute regionsThomas Schwinge6-27/+114
This allows for making some things more explicit, later on. gcc/ * omp-expand.c (expand_omp_target): Attach an attribute to all outlined OpenACC compute regions. * omp-offload.c (execute_oacc_device_lower): Adjust. gcc/testsuite/ * c-c++-common/goacc/classify-parallel.c: Adjust. * gfortran.dg/goacc/classify-parallel.f95: Likewise. * c-c++-common/goacc/classify-serial.c: New. * gfortran.dg/goacc/classify-serial.f95: Likewise.
2020-11-13c++: Add feature test macro for C++20 using enum.Jason Merrill2-0/+7
Missing piece from the 'using enum' implementation patch. gcc/c-family/ChangeLog: * c-cppbuiltin.c (c_cpp_builtins): Define __cpp_using_enum. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/feat-cxx2a.C: Check it.
2020-11-13Fix modref insertion hook.Jan Hubicka1-1/+3
* ipa-modref.c (modref_summaries::insert, modref_summaries_lto::insert): Remove summary if ipa-modref is disabled.
2020-11-13Copied arguments are readonlyJan Hubicka1-1/+1
* attr-fnspec.h (attr_fnspec::arg_readonly_p): Accept '1'...'9'.
2020-11-13Clarify the documentation for the ms_abi fucntion attributePeter Jones1-3/+4
gcc/ * doc/extend.texi: Clarify the documentation for the ms_abi function attribute.
2020-11-13Re: Fix gimple_expr_code?Andrew MacLeod2-26/+28
have gimple_expr_code return the correct code for GIMPLE_ASSIGN. use gassign and gcond in gimple_range_handler. * gimple-range.h (gimple_range_handler): Cast to gimple stmt kinds before asking for code and type. * gimple.h (gimple_expr_code): Call gassign and gcond routines to get their expr_code.
2020-11-13c++: Implement C++20 'using enum'. [PR91367]Jason Merrill20-135/+648
This feature allows the programmer to import enumerator names into the current scope so later mentions don't need to use the fully-qualified name. These usings are not subject to the usual restrictions on using-decls: in particular, they can move between class and non-class scopes, and between classes that are not related by inheritance. This last caused difficulty for our normal approach to using-decls within a class hierarchy, as we assume that the class where we looked up a used declaration is derived from the class where it was first declared. So to simplify things, in that case we make a clone of the CONST_DECL in the using class. Thanks to Nathan for the start of this work: in particular, the lookup_using_decl rewrite. The changes to dwarf2out revealed an existing issue with the D front-end: we were doing the wrong thing for importing a D CONST_DECL, because dwarf2out_imported_module_or_decl_1 was looking through it to its type, expecting it to be an enumerator, but in one case in thread.d, the constant had type int. Adding the ability to import a C++ enumerator also fixed that, but that led to a crash in force_decl_die, which didn't know what to do with a CONST_DECL. So now it does. Co-authored-by: Nathan Sidwell <nathan@acm.org> gcc/cp/ChangeLog: * cp-tree.h (USING_DECL_UNRELATED_P): New. (CONST_DECL_USING_P): New. * class.c (handle_using_decl): If USING_DECL_UNRELATED_P, clone the CONST_DECL. * name-lookup.c (supplement_binding_1): A clone hides its using-declaration. (lookup_using_decl): Rewrite to separate lookup and validation. (do_class_using_decl): Adjust. (finish_nonmember_using_decl): Adjust. * parser.c (make_location): Add cp_token overload. (finish_using_decl): Split out from... (cp_parser_using_declaration): ...here. Don't look through enums. (cp_parser_using_enum): New. (cp_parser_block_declaration): Call it. (cp_parser_member_declaration): Call it. * semantics.c (finish_id_expression_1): Handle enumerator used from class scope. gcc/ChangeLog: * dwarf2out.c (gen_enumeration_type_die): Call equate_decl_number_to_die for enumerators. (gen_member_die): Don't move enumerators to their enclosing class. (dwarf2out_imported_module_or_decl_1): Allow importing individual enumerators. (force_decl_die): Handle CONST_DECL. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/inh-ctor28.C: Adjust expected diagnostic. * g++.dg/cpp0x/inh-ctor33.C: Likewise. * g++.dg/cpp0x/using-enum-1.C: Add comment. * g++.dg/cpp0x/using-enum-2.C: Allowed in C++20. * g++.dg/cpp0x/using-enum-3.C: Likewise. * g++.dg/cpp1z/class-deduction69.C: Adjust diagnostic. * g++.dg/inherit/using5.C: Likewise. * g++.dg/cpp2a/using-enum-1.C: New test. * g++.dg/cpp2a/using-enum-2.C: New test. * g++.dg/cpp2a/using-enum-3.C: New test. * g++.dg/cpp2a/using-enum-4.C: New test. * g++.dg/cpp2a/using-enum-5.C: New test. * g++.dg/cpp2a/using-enum-6.C: New test. * g++.dg/debug/dwarf2/using-enum.C: New test.
2020-11-13[PATCH] Implementation of asm goto outputsVladimir N. Makarov20-59/+455
gcc/ * cfgexpand.c (expand_asm_stmt): Output asm goto with outputs too. Place insns after asm goto on edges. * doc/extend.texi: Reflect the changes in asm goto documentation. * gimple.c (gimple_build_asm_1): Remove an assert checking output absence for asm goto. * gimple.h (gimple_asm_label_op, gimple_asm_set_label_op): Take possible asm goto outputs into account. * ira.c (ira): Remove critical edges for potential asm goto output reloads. (ira_nullify_asm_goto): New function. * ira.h (ira_nullify_asm_goto): New prototype. * lra-assigns.c (lra_split_hard_reg_for): Use ira_nullify_asm_goto. Check that splitting is done inside a basic block. * lra-constraints.c (curr_insn_transform): Permit output reloads for any jump insn. * lra-spills.c (lra_final_code_change): Remove USEs added in ira for asm gotos. * lra.c (lra_process_new_insns): Place output reload insns after jumps in the beginning of destination BBs. * reload.c (find_reloads): Report error for asm gotos with outputs. Modify them to keep CFG consistency to avoid crashes. * tree-into-ssa.c (rewrite_stmt): Don't put debug stmt after asm goto. gcc/c/ * c-parser.c (c_parser_asm_statement): Parse outputs for asm goto too. * c-typeck.c (build_asm_expr): Remove an assert checking output absence for asm goto. gcc/cp * parser.c (cp_parser_asm_definition): Parse outputs for asm goto too. gcc/testsuite/ * c-c++-common/asmgoto-2.c: Permit output in asm goto. * gcc.c-torture/compile/asmgoto-2.c: New. * gcc.c-torture/compile/asmgoto-3.c: New. * gcc.c-torture/compile/asmgoto-4.c: New. * gcc.c-torture/compile/asmgoto-5.c: New.
2020-11-13openmp: Support allocate for C/C++ array section reductionsJakub Jelinek2-20/+55
This adds allocate clause support for array section reductions. Furthermore, it fixes one bug that would cause inscan reductions with allocate to be rejected by C, and for now just ignores allocate for inscan/task reductions, that will need slightly more work. 2020-11-13 Jakub Jelinek <jakub@redhat.com> gcc/ * omp-low.c (scan_sharing_clauses): For now remove for reduction clauses with inscan or task modifiers decl from allocate_map. (lower_private_allocate): Handle TYPE_P (new_var). (lower_rec_input_clauses): Handle allocate clause for C/C++ array reductions. gcc/c/ * c-typeck.c (c_finish_omp_clauses): Don't clear OMP_CLAUSE_REDUCTION_INSCAN unless reduction_seen == -2. libgomp/ * testsuite/libgomp.c-c++-common/allocate-1.c (foo): Add tests for array reductions. (main): Adjust foo callers.