aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2020-11-24[Ada] Fix internal error on multiple nested instantiationsEric Botcazou1-11/+8
gcc/ada/ * sem_ch12.adb (Analyze_Associations) <Explicit_Freeze_Check>: Test that the instance is in a statement sequence instead of local scope. (Freeze_Subprogram_Body): Use the special delayed placement with regard to the parent instance only if its Sloc is strictly greater. (Install_Body): Likewise.
2020-11-24[Ada] Fix String_Literal aspect spec checking problem for scalars.Steve Baird1-1/+1
gcc/ada/ * sem_ch13.adb (Validate_Literal_Aspect): Call to Base_Type needed in order to correctly check result type of String_Literal function when the first named subtype differs from the base type (e.g.: type T is range 1 .. 10 with String_Literal => ... ; ).
2020-11-24[Ada] Handle correctly current instance of PO in local subprogram GlobalYannick Moy3-18/+53
gcc/ada/ * sem_prag.adb (Analyze_Global_Item): Handle specially the current instance of a PO. * sem_util.ads (Is_Effectively_Volatile, Is_Effectively_Volatile_For_Reading): Add parameter Ignore_Protected. * sem_util.adb (Is_Effectively_Volatile, Is_Effectively_Volatile_For_Reading): Add parameter Ignore_Protected to compute the query results ignoring protected objects/types. (Is_Effectively_Volatile_Object, Is_Effectively_Volatile_Object_For_Reading): Adapt to new signature.
2020-11-24[Ada] Documentation: update -gnatyk descriptionGhjuvan Lacambre2-3/+5
gcc/ada/ * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Update documentation on -gnatyk. * gnat_ugn.texi: Regenerate.
2020-11-24[Ada] Fix spurious error on child library-level subprogram with aspectsYannick Moy1-0/+1
gcc/ada/ * sem_ch10.adb (Analyze_Compilation_Unit): Move aspects from body to the newly created spec.
2020-11-24[Ada] Wrong finalization in call with if expressionArnaud Charlet1-68/+24
gcc/ada/ * exp_ch6.adb (Add_Cond_Expression_Extra_Actual): Simplify handling of function calls and remove bug in handling of transient objects. Minor reformatting along the way.
2020-11-24[Ada] Implement Big_Integer.From_String fullyArnaud Charlet1-1/+186
gcc/ada/ * libgnat/a-nbnbin.adb (From_String): Implement fully.
2020-11-24[Ada] Fix resolution of subtype_indication in delta aggregatesPiotr Trojanek1-15/+22
gcc/ada/ * sem_aggr.adb (Resolve_Delta_Array_Aggregate): If the choice is a subtype_indication then call Resolve_Discrete_Subtype_Indication; both for choices immediately inside array delta aggregates and inside iterated_component_association within array delta aggregates.
2020-11-24[Ada] Use high-level Present instead of low-level equality testPiotr Trojanek6-6/+6
gcc/ada/ * lib-load.adb, lib-writ.adb, lib.adb, par-load.adb, rtsfind.adb, sem_ch10.adb: Use Present where possible.
2020-11-24[Ada] Reject Global/Depends contracts on null proceduresYannick Moy1-1/+11
gcc/ada/ * sem_prag.adb (Analyze_Depends_Global): Reject Global and Depends on null procedure.
2020-11-24[Ada] Wrong handling of _ in Big_Reals.From_StringArnaud Charlet1-1/+1
gcc/ada/ * libgnat/a-nbnbre.adb (From_String): Handle properly '_' characters.
2020-11-24[Ada] Remove SPARK-specific expansion of array aggregatesPiotr Trojanek2-132/+9
gcc/ada/ * exp_spark.adb (Expand_SPARK_Array_Aggregate, Expand_SPARK_N_Aggregate): Remove, no longer needed. * sem_aggr.adb (Resolve_Iterated_Component_Association): Only remove references in the analyzed expression when generating code and the expression needs to be analyzed anew after being rewritten into a loop.
2020-11-24[Ada] Document characteristics of decimal fixed point typesEric Botcazou2-3/+8
gcc/ada/ * doc/gnat_rm/implementation_defined_characteristics.rst: Complete entry of 3.5.9(10). * gnat_rm.texi: Regenerate.
2020-11-24i386: Add *setcc_hi_1* define_insn_and_split [PR97950]Jakub Jelinek2-8/+161
As the following testcase shows, unlike char, int or long long sized __builtin_*_overflow{,_p}, for short sized one in most cases the ce1 pass doesn't optimize the jo/jno or jc/jnc jumps with setting of a pseudo to 0/1 into seto/setc. The reason is missing *setcc_hi_1* pattern. The following patch implements it using mode iterators so that on i486 and pentium? one can get the zero extension through and instead of movzbw. 2020-11-24 Jakub Jelinek <jakub@redhat.com> PR target/97950 * config/i386/i386.md (*setcc_si_1_and): Macroize into... (*setcc_<mode>_1_and): New define_insn_and_split with SWI24 iterator. (*setcc_si_1_movzbl): Macroize into... (*setcc_<mode>_1_movzbl): New define_insn_and_split with SWI24 iterator. * gcc.target/i386/pr97950.c: New test.
2020-11-24middle-end: Prefer no RMW in __builtin_clear_padding implementation where ↵Jakub Jelinek1-7/+81
possible Currently the __builtin_clear_padding expansion code emits no code for full words that don't have any padding bits, and most of the time if the only padding bytes are from the start of the word it attempts to merge them with previous padding store (via {}) or if the only padding bytes are from the end of the word, it attempts to merge it with following padding bytes. For everything else it was using a RMW, except when it found an aligned char/short/int covering all the padding bytes and all those padding bytes were all ones in that store. The following patch changes it, such that we only use RMW if the padding has any bytes which have some padding and some non-padding bits (i.e. bitfields are involved), often it is the same amount of instructions in the end and avoids being thread-unsafe unless necessary (and avoids having to wait for the reads to make it into the CPU). So, if there are no bitfields, the function will just store some zero bytes, shorts, ints, long longs etc. where needed. 2020-11-24 Jakub Jelinek <jakub@redhat.com> * gimple-fold.c (clear_padding_flush): If a word contains only 0 or 0xff bytes of padding other than all set, all clear, all set followed by all clear or all clear followed by all set, don't emit a RMW operation on the whole word or parts of it, but instead clear the individual bytes of padding. For paddings of one byte size, don't use char[1] and {}, but instead just char and 0.
2020-11-24testsuite: Add testcase for already fixed bug [PR97964]Jakub Jelinek1-0/+18
This testcase started failing with r8-2090 and works again starting with r11-4755. 2020-11-24 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/97964 * gcc.dg/tree-ssa/pr97964.c: New test.
2020-11-24More explicit checking of which OMP constructs we're expecting, part IIThomas Schwinge1-0/+15
In particular, more precisely highlight what applies generally vs. the special handling for the current 'parloops'-based OpenACC 'kernels' implementation. gcc/ * omp-expand.c (expand_oacc_for): More explicit checking of which OMP constructs we're expecting.
2020-11-24[testsuite] Avoid Tcl 8.5-specific behaviorThomas Schwinge5-0/+35
gcc/ * doc/install.texi (Prerequisites) <Tcl>: Add comment. gcc/testsuite/ * c-c++-common/goacc/kernels-decompose-1.c: Avoid Tcl 8.5-specific behavior. * c-c++-common/goacc/kernels-decompose-2.c: Likewise. * gfortran.dg/goacc/kernels-decompose-1.f95: Likewise. * gfortran.dg/goacc/kernels-decompose-2.f95: Likewise. libgomp/ * testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c: Avoid Tcl 8.5-specific behavior. * testsuite/libgomp.oacc-fortran/pr94358-1.f90: Likewise. Reported-by: David Edelsohn <dje.gcc@gmail.com>
2020-11-24[testsuite] Emit 'warning' instead of 'error' diagnostics for ↵Thomas Schwinge1-2/+2
'dg-optimized', 'dg-missed' The diagnostics produced by 'dg-optimized', 'dg-missed' aren't error diagnostics (fatal, meaning: causes compilation to fail) but rather warning diagnostics (non-fatal, doesn't cause compilation to fail). Thus, same as 'dg-message', these should use 'saved-dg-warning' instead of 'saved-dg-error', which then prints: "(test for *warnings*, line [...]) instead of currently: "(test for *errors*, line [...])". This is a small bug-fix for commit ed2d9d3720adef3a260b8a55e17e744352a901fc "dumpfile.c: use prefixes other than 'note: ' for MSG_{OPTIMIZED_LOCATIONS|MISSED_OPTIMIZATION}", which added 'dg-optimized', 'dg-missed'. gcc/testsuite/ * lib/gcc-dg.exp (dg-optimized, dg-missed): Use 'saved-dg-warning' instead of 'saved-dg-error'.
2020-11-24[testsuite] Enable column location checking for 'dg-optimized', 'dg-missed'Thomas Schwinge3-6/+6
'process-message' would like the 'msgprefix' argument without trailing space. This is a small bug-fix for commit ed2d9d3720adef3a260b8a55e17e744352a901fc "dumpfile.c: use prefixes other than 'note: ' for MSG_{OPTIMIZED_LOCATIONS|MISSED_OPTIMIZATION}", which added 'dg-optimized', 'dg-missed'. gcc/testsuite/ * lib/gcc-dg.exp (dg-optimized, dg-missed): Fix 'process-message' call. * gcc.dg/vect/nodump-vect-opt-info-1.c: Demonstrate. * gcc.dg/vect/nodump-vect-opt-info-2.c: Likewise.
2020-11-24openmp: Fix C ICE on OpenMP atomicsJakub Jelinek2-3/+24
c_parser_binary_expression was using build2 to create a temporary holder for binary expression that c_parser_atomic and c_finish_omp_atomic can then handle. The latter performs then all the needed checking. Unfortunately, build2 performs some checking too, e.g. PLUS_EXPR vs. POINTER_PLUS_EXPR or matching types of the arguments, nothing we can guarantee at the parsing time. So we need something like C++ build_min_nt*. This patch implements that inline. 2020-11-24 Jakub Jelinek <jakub@redhat.com> PR c/97958 * c-parser.c (c_parser_binary_expression): For omp atomic binary expressions, use make_node instead of build2 to avoid checking build2 performs. * c-c++-common/gomp/pr97958.c: New test.
2020-11-24middle-end, c++: Treat shifts by negative as undefined [PR96929]Jakub Jelinek5-26/+48
The PR38359 change made the -1 >> x to -1 optimization less useful by requiring that the x must be non-negative. Shifts by negative amount are UB, but we for historic reasons had in some (but not all) places some hack to treat shifts by negative value as the other direction shifts by the negated amount. The following patch just removes that special handling, instead we punt on optimizing those (and ideally path isolation should catch that up and turn those into __builtin_unreachable, perhaps with __builtin_warning next to it). Folding the shifts in some places as if they were rotates and in other as if they were saturating just leads to inconsistencies. For C++ constexpr diagnostics and -fpermissive, I've added code to pretend fold-const.c has not changed, without -fpermissive it will be an error anyway and I think it is better not to change all the diagnostics. During x86_64-linux and i686-linux bootstrap/regtest, my statistics gathering patch noted 185 unique -m32/-m64 x TU x function_name x shift_kind x fold-const/tree-ssa-ccp cases. I have investigated the 64 ../../gcc/config/i386/i386.c x86_output_aligned_bss LSHIFT_EXPR wide_int_bitop 64 ../../gcc/config/i386/i386-expand.c emit_memmov LSHIFT_EXPR wide_int_bitop 64 ../../gcc/config/i386/i386-expand.c ix86_expand_carry_flag_compare LSHIFT_EXPR wide_int_bitop 64 ../../gcc/expmed.c expand_divmod LSHIFT_EXPR wide_int_bitop 64 ../../gcc/lra-lives.c process_bb_lives LSHIFT_EXPR wide_int_bitop 64 ../../gcc/rtlanal.c nonzero_bits1 LSHIFT_EXPR wide_int_bitop 64 ../../gcc/varasm.c optimize_constant_pool.isra LSHIFT_EXPR wide_int_bitop cases and all of them are either during jump threading (dom) or during PRE. For jump threading, the most common case is 1 << floor_log2 (whatever) where floor_log2 is return HOST_BITS_PER_WIDE_INT - 1 - clz_hwi (x); and clz_hwi is if (x == 0) return HOST_BITS_PER_WIDE_INT; return __builtin_clz* (x); and so has range [-1, 63] and a comparison against == 0 which makes the threader think it might be nice to jump thread the case leading to 1 << -1. I think it is better to keep the 1 << -1 s in the IL for this and let path isolation turn that into __builtin_unreachable () if the user wishes so. 2020-11-24 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/96929 * fold-const.c (wide_int_binop) <case LSHIFT_EXPR, case RSHIFT_EXPR>: Return false on negative second argument rather than trying to handle it as shift in the other direction. * tree-ssa-ccp.c (bit_value_binop) <case LSHIFT_EXPR, case RSHIFT_EXPR>: Punt on negative shift count rather than trying to handle it as shift in the other direction. * match.pd (-1 >> x to -1): Remove tree_expr_nonnegative_p check. * constexpr.c (cxx_eval_binary_expression): For shifts by constant with MSB set, emulate older wide_int_binop behavior to preserve diagnostics and -fpermissive behavior. * gcc.dg/tree-ssa/pr96929.c: New test.
2020-11-23Fix expected output after recent changesJeff Law3-6/+6
gcc/testsuite * gcc.dg/tree-ssa/pr23401.c: Update expected output. * gcc.dg/tree-ssa/pr27810.c: Update expected output. * gcc.dg/tree-ssa/slsr-8.c: Update expected output.
2020-11-23test: Update some cases for vect_partial_vectors_usage_1Kewen Lin4-13/+4
Commit r11-3393 improved the epilogue loop handling of partial vectors and we won't use partial vectors to vectorize a single iteration scalar loop any more. The affected test cases have only one single iteration in their epilogues, so we shouldn't expect the vectorization with partial vector there. Tested with explicit --param=vect-partial-vector-usage=1 and default enablement. gcc/testsuite/ChangeLog: * gcc.dg/vect/slp-perm-1.c: Adjust for partial vectors. * gcc.dg/vect/slp-perm-5.c: Likewise. * gcc.dg/vect/slp-perm-6.c: Likewise. * gcc.dg/vect/slp-perm-7.c: Likewise.
2020-11-24tree-opt: Fix segfault in tree-if-conv.c with -march=armv8.2-a+sve [PR97849]Prathamesh Kulkarni2-6/+23
The issue here is that rpo vn may eliminate target ssa_name referred to in redundant_ssa_names, and thus ifcvt_local_dce may replace candidate ssa_name with invalid ssa_name resulting in incorrect IR. The patch simply does ssa_name replacement before calling do_rpo_vn, which fixes the issue. gcc/ 2020-11-24 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> PR tree-optimization/97849 * tree-if-conv.c (tree_if_conversion): Move ssa_name replacement code from ifcvt_local_dce to this function before calling do_rpo_vn. gcc/testsuite/ 2020-11-24 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> PR tree-optimization/97849 * gcc.dg/tree-ssa/pr97849.c: New test.
2020-11-23Dump type attributes in dump_function_to_file.Martin Sebor2-4/+29
gcc/ChangeLog: * tree-cfg.c (dump_function_to_file): Print type attributes and return type. gcc/testsuite/ChangeLog: * gcc.dg/attr-access-5.c: New test.
2020-11-24Daily bump.GCC Administrator6-1/+200
2020-11-23c: Allow comparison of pointers to complete and incomplete types for C11 ↵Joseph Myers5-2/+210
[PR95630] As noted in bug 95630, C11 removed a restriction in C99 on comparing pointers to compatible complete and incomplete types (this was one of the changes in N1439, which was largely a terminological change to make incomplete types a subset of object types rather than a different kind of type). Implement that change by using pedwarn_c99 with OPT_Wpedantic for this diagnostic. Bootstrapped with no regressions for x86_64-pc-linux-gnu. gcc/c/ 2020-11-23 Joseph Myers <joseph@codesourcery.com> PR c/95630 * c-typeck.c (build_binary_op): Use pedwarn_c99 with OPT_Wpedantic for comparisons of complete and incomplete pointers. gcc/testsuite/ 2020-11-23 Joseph Myers <joseph@codesourcery.com> PR c/95630 * gcc.dg/c11-compare-incomplete-1.c, gcc.dg/c11-compare-incomplete-2.c, gcc.dg/c99-compare-incomplete-1.c, gcc.dg/c99-compare-incomplete-2.c: New tests.
2020-11-23ipa: special pass-through op for Fortran stridesMartin Jambor4-73/+179
when Fortran functions pass array descriptors they receive as a parameter to another function, they actually rebuild it. Thanks to work done mainly by Feng, IPA-CP can already handle the cases when they pass directly the values loaded from the original descriptor. Unfortunately, perhaps the most important one, stride, is first checked against zero and is replaced with one in that case: _12 = *a_11(D).dim[0].stride; if (_12 != 0) goto <bb 4>; [50.00%] else goto <bb 3>; [50.00%] <bb 3> // empty BB <bb 4> # iftmp.22_9 = PHI <_12(2), 1(3)> ... parm.6.dim[0].stride = iftmp.22_9; ... __x_MOD_foo (&parm.6, b_31(D)); in the most important and hopefully common cases, the incoming value is already 1 and we fail to propagate it. I would therefore like to propose the following way of encoding this situation in pass-through jump functions using using ASSERTT_EXPR operation code meaning that if the incoming value is the same as the "operand" in the jump function, it is passed on, otherwise the result is unknown. This of course captures only the single (but most important) case but is an improvement and does not need enlarging the jump function structure and is simple to pattern match. Encoding that zero needs to be changed to one would need another field and matching it would be slightly more complicated too. gcc/ 2020-06-12 Martin Jambor <mjambor@suse.cz> * ipa-prop.h (ipa_pass_through_data): Expand comment describing operation. * ipa-prop.c (analyze_agg_content_value): Detect new special case and encode it as ASSERT_EXPR. * ipa-cp.c (values_equal_for_ipcp_p): Move before ipa_get_jf_arith_result. (ipa_get_jf_arith_result): Special case ASSERT_EXPR. gcc/testsuite/ 2020-06-12 Martin Jambor <mjambor@suse.cz> * gfortran.dg/ipcp-array-2.f90: New test.
2020-11-23Adjust rtx_costs for h8300Jeff Law1-0/+10
So the primary purpose of this patch is to make it easier to write tests for removal of useless test/compare insns on the H8. In simplest terms the costing model in the H8 port tends to encourage changing something like: x = y + 4; if (x == 0) into: x = y + 4; if (y == -4) This is a marginal de-optimization on the H8. So fixing it makes the code ever-so-slightly better in isolation. Fixing this also improves redundant test/compare elimination and makes writing tests for redundant test/compare elimination far easier. gcc/ * config/h8300/h8300.c (h8300_rtx_costs): Handle the various comparison rtx codes too.
2020-11-23testsuite: Adjust pruningNathan Sidwell1-3/+7
Here is the patch to adjust the include-stack pruning messages to also strip out c++ modules. The ICE regexp was a little too strict such that if someone overrides the bug-reporting URL it doesn't trigger. May as well relax it too. gcc/testsuite/ * lib/prune.exp (prune_gcc_output): Adjust include stack pruning for modules. (print_ices): Relax regexp.
2020-11-23log/syslog: correct asm name for C functionIan Lance Taylor1-1/+1
Patch from Rainer Orth. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/272259
2020-11-23Release ipa-prop's agg.items and make alocation more carefulJan Hubicka2-2/+10
This saves about 316MB WPAing Firefox * ipa-prop.c (build_agg_jump_func_from_list, ipa_read_jump_function): Reserve agg.items precisely. * ipa-prop.h (ipa_node_params::~ipa_node_params): Release descriptors (ipa_edge_args::~ipa_edge_args): Release agg.items.
2020-11-23Do not leak SSANAMES in lto streamerJan Hubicka4-13/+12
* lto-streamer-in.c (input_cfg): Do not init ssa operands. (input_function): Do not init tree_ssa and set in_ssa_p. (input_ssa_names): Do it here. * tree-ssa.c (init_tree_ssa): Add additional SIZE parameter, default to 0 * tree-ssanames.c (init_ssanames): Do not round size up to 50, allocate precisely. * tree-ssa.h (init_tree_ssa): Update prototype.
2020-11-23Diagnostic for module importationNathan Sidwell1-5/+16
This tweaks the 'included from ...' printing to deal with imports in the 'include' path. One new thing is that there can now be two 'include' names on a single line. For example 'in module X, included at Y'. This reads better than placing them on different lines. gcc/ * diagnostic.c (diagnostic_report_current_module): Adjust for C++ module importation.
2020-11-23c++: Add empty module.ccNathan Sidwell2-1/+25
This adds an empty module.cc file, along with make rules to build it. gcc/cp/ * module.cc: New dummy file. * Make-lang.in: Add rules to build module.o
2020-11-23MSP430: Remove target-specific handling of the "persistent" attributeJozef Lawrynowicz5-132/+36
The "persistent" attribute is now handled generically, and does not need specific support in the MSP430 back end. gcc/ChangeLog: * config/msp430/msp430.c (msp430_section_attr): Don't warn for "lower" attribute used with "noinit" or "persistent" attributes. (msp430_persist_attr): Remove. (attr_lower_exclusions): Remove ATTR_PERSIST exclusion. (attr_upper_exclusions): Likewise. (attr_either_exclusions): Likewise. (attr_persist_exclusions): Remove. (msp430_attribute_table): Remove ATTR_PERSIST handling. (msp430_handle_generic_attribute): Remove ATTR_PERSIST section conflict handling. (TARGET_ASM_INIT_SECTIONS): Remove. (msp430_init_sections): Remove. (msp430_select_section): Use default_elf_select_section for decls with the "persistent" attribute. (msp430_section_type_flags): Remove ".persistent" section handling. * doc/extend.texi (MSP430 Variable Attributes): Remove "noinit" and "persistent" documentation. gcc/testsuite/ChangeLog: * g++.target/msp430/data-attributes.C: Remove expected warnings for "lower" attribute conflicts. Adjust expected wording for "persistent" attribute misuse. * gcc.target/msp430/data-attributes-2.c: Likewise. * gcc.target/msp430/pr78818-auto-warn.c: Likewise.
2020-11-23fix hybrid SLP discovery debug stmt issueRichard Biener2-0/+38
This properly skips debug USE_STMTs when looking for non-SLP sinks. 2020-11-23 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (maybe_push_to_hybrid_worklist): Skip debug stmts. * g++.dg/vect/simd-12.cc: New testcase.
2020-11-23Implement the "persistent" attributeJozef Lawrynowicz16-69/+303
The "persistent" attribute is used for variables that are initialized by the program loader, but are not initialized by the runtime startup code. "persistent" variables are placed in a non-volatile area of memory, which allows their value to "persist" between processor resets. gcc/c-family/ChangeLog: * c-attribs.c (handle_special_var_sec_attribute): New. (handle_noinit_attribute): Remove. (attr_noinit_exclusions): Rename to... (attr_section_exclusions): ...this, and add "persistent" attribute exclusion. (c_common_attribute_table): Add "persistent" attribute. gcc/ChangeLog: * doc/extend.texi (Common Variable Attributes): Document the "persistent" variable attribute. * doc/sourcebuild.texi (Effective-Target Keywords): Document the "persistent" effective target keyword. * tree.h (DECL_PERSISTENT_P): Define. * varasm.c (bss_initializer_p): Return false for a DECL_PERSISTENT_P decl initialized to zero. (default_section_type_flags): Handle the ".persistent" section. (default_elf_select_section): Likewise. (default_unique_section): Likewise. gcc/testsuite/ChangeLog: * gcc.c-torture/execute/noinit-attribute.c: Moved to... * c-c++-common/torture/attr-noinit-main.inc: ...here. * lib/target-supports.exp (check_effective_target_persistent): New. * c-c++-common/torture/attr-noinit-1.c: New test. * c-c++-common/torture/attr-noinit-2.c: New test. * c-c++-common/torture/attr-noinit-3.c: New test. * c-c++-common/torture/attr-noinit-invalid.c: New test. * c-c++-common/torture/attr-persistent-1.c: New test. * c-c++-common/torture/attr-persistent-2.c: New test. * c-c++-common/torture/attr-persistent-3.c: New test. * c-c++-common/torture/attr-persistent-invalid.c: New test. * c-c++-common/torture/attr-persistent-main.inc: New test.
2020-11-23cp/decl.c: Set DECL_INITIAL before attribute processingJozef Lawrynowicz4-0/+110
Attribute handlers may want to examine DECL_INITIAL for a decl, to validate the attribute being applied. For C++, DECL_INITIAL is currently not set until cp_finish_decl, by which time attribute validation has already been performed. For msp430-elf this causes the "persistent" attribute to always be rejected for C++, since DECL_INITIAL must be non-null for the attribute to be applied to a decl. This patch ensures DECL_INITIAL is set for initialized decls early in start_decl, before attribute handlers run. This allows the initialization status of the decl to be examined by the handlers. DECL_INITIAL must be restored to it's initial value after attribute validation is performed, so as to not interfere with later decl processing. gcc/cp/ChangeLog: * decl.c (start_decl): Set DECL_INITIAL for initialized decls before attribute processing. gcc/testsuite/ChangeLog: * gcc.target/msp430/data-attributes-2.c: Adjust test. * g++.target/msp430/data-attributes.C: New test. * g++.target/msp430/msp430.exp: New test.
2020-11-23Fix "noinit" attribute being ignored for -O0 and -fdata-sectionsJozef Lawrynowicz4-5/+16
Variables with the "noinit" attribute are ignored at -O0 because they are treated like a regular bss variable and placed in the .bss section. With -fdata-sections they are ignored because they are not handled in resolve_unique_section. gcc/ChangeLog: * tree.h (DECL_NOINIT_P): Define. * varasm.c (DECL_NOINIT_P): Check DECL_NOINIT_P before using unnamed bss/lcomm sections for bss_initializer variables. (default_elf_select_section): Use DECL_NOINIT_P instead of looking up attribute for .noinit section selection. (default_unique_section): Check DECL_NOINIT_P for .noinit section selection. gcc/testsuite/ChangeLog: * gcc.c-torture/execute/noinit-attribute.c: Don't override optimization options set by torture test harness. * lib/target-supports.exp (check_effective_target_noinit): Adjust comment formatting.
2020-11-23Document bootstrap-asan configure optionMatthew Malcomson1-0/+4
Document how to configure using asan (bootstrap-asan option to the --with-build-config configure argument). gcc/ChangeLog: * doc/install.texi: Document bootstrap-asan option.
2020-11-23testsuite/arm: add missing -mthumb to several testsChristophe Lyon11-11/+11
Some tests force -mcpu=cortex-mXX but do not add -mthumb, causing errors if GCC is not configured to default to Thumb code (--with-mode=thumb): cc1: error: target CPU does not support ARM mode This patch adds -mthumb where relevant. 2020-11-23 Christophe Lyon <christophe.lyon@linaro.org> gcc/testsuite/ * gcc.target/arm/cortex-m55-nodsp-flag-hard.c: Add -mthumb. * gcc.target/arm/cortex-m55-nodsp-flag-softfp.c: Likewise. * gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c: Likewise. * gcc.target/arm/cortex-m55-nofp-flag-hard.c: Likewise. * gcc.target/arm/cortex-m55-nofp-flag-softfp.c: Likewise. * gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c: Likewise. * gcc.target/arm/cortex-m55-nomve-flag-hard.c: Likewise. * gcc.target/arm/cortex-m55-nomve-flag-softfp.c: Likewise. * gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c: Likewise. * gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c: Likewise. * gcc.target/arm/mve/intrinsics/pr97327.c: Likewise.
2020-11-23c++: Add missing verify_type_context call [PR97904]Richard Sandiford3-4/+66
When adding the verify_type_context target hook, I'd missed a site that needs to check an array element type. gcc/cp/ PR c++/97904 * pt.c (tsubst): Use verify_type_context to check the type of an array element. gcc/testsuite/ PR c++/97904 * g++.dg/ext/sve-sizeless-1.C: Add more template tests. * g++.dg/ext/sve-sizeless-2.C: Likewise.
2020-11-23Daily bump.GCC Administrator4-1/+161
2020-11-22i386: Use SWI48DWI mode iterator for abs and maxmin [PR97873]Uros Bizjak2-101/+126
Generate special double mode sequence also for TImode on 64bit targets. 2020-11-22 Uroš Bizjak <ubizjak@gmail.com> PR target/97873 gcc/ * config/i386/i386.md (abs<mode>2): Use SWI48DWI mode iterator. (*abs<dwi>2_doubleword): Use DWIH mode iterator. (<maxmin:code><mode>3): Use SWI48DWI mode iterator. (*<maxmin:code><dwi>3_doubleword): Use DWIH mode iterator. gcc/testsuite/ * gcc.target/i386/pr97873-2.c: New test.
2020-11-22H8 cc0 conversionAustin Law23-1172/+2834
gcc/ * config/h8300/addsub.md: Turn existing patterns into define_insn_and_split style patterns where the splitter adds a clobber of the condition code register. Drop "cc" attribute. Add _clobber_flags patterns to match output of the splitters. (add<mod>3_incdec): Remove pattern (adds/subs splitter): Only run before reload. * config/h8300/bitfield.md: Turn existing patterns into define_insn_and_split style patterns where the splitter adds a clobber of the condition code register. Drop "cc" attribute. Add _clobber_flags patterns to match output of the splitters. (cstoreqi4, cstorehi4, cstoresi4): Comment out (*bstzhireg, *cmpstz, *bstz, *bistz, *cmpcondset): Likewise (*condbset, *cmpcondbclr, *condbclr): Likewise. (*cmpcondbsetreg, *condbsetreg, *cmpcondbclrreg): Likewise. (*condbclrreg): Likewise. * config/h8300/combiner.md: Turn existing patterns into define_insn_and_split style patterns where the splitter adds a clobber of the condition code register. Drop "cc" attribute. Add _clobber_flags patterns to match output of the splitters. Add appropriate CC register clobbers to existing splitters. (*addsi3_and_r_1): Disable for now. (*addsi3_and_not_r_1, bit-test branches): Likewise. * config/h8300/divmod.md: Turn existing patterns into define_insn_and_split style patterns where the splitter adds a clobber of the condition code register. Drop "cc" attribute. Add _clobber_flags patterns to match output of the splitters. * config/h8300/extensions.md: Turn existing patterns into define_insn_and_split style patterns where the splitter adds a clobber of the condition code register. Drop "cc" attribute. Add _clobber_flags patterns to match output of the splitters. * config/h8300/genmova.sh: Drop "cc" attribute from patterns. * config/h8300/mova.md: Drop "cc" attribute from patterns. * config/h8300/h8300-modes.def: Add CCZN and CCZNV modes. * config/h8300/h8300-protos.h (output_plussi): Update prototype. (compute_plussi_length): Likewise. (h8300_select_cc_mode): Add prototype. (compute_a_shift_cc): Remove prototype (cmpute_logical_op_cc): Likewise. * config/h8300/h8300.c (names_big): Add "cc" register. (names_extended, names_upper_extended): Likewise. (h8300_emit_stack_adjustment): Be more selective about setting RTX_FRAME_RELATED_P. (h8300_print_operand): Handle CCZN mode (h8300_select_cc_mode): New function. (notice_update_cc): if-0 out. Only kept for reference purposes. (h8300_expand_store): Likewise. (h8300_binary_length): Handle new insn forms. (output_plussi): Add argument for NEED_FLAGS and handle that case. (compute_plussi_length): Likewise. (compute_logical_op_cc): Return integer. (TARGET_FLAGS_REGNUM): Define. * config/h8300/h8300.h (FIRST_PSEUDO_REGISTER): Bump for cc register. (FIXED_REGISTERS, CALL_USED_REGISTERS): Handle cc register. (REG_ALLOC_ORDER, REGISTER_NAMES): Likewise. (SELECT_CC_MODE): Define. * config/h8300/h8300.md: Add CC_REG. Do not include peepholes.md for now. * config/h8300/jumpcall.md (cbranchqi4): Consolidate into cbranch<mode>4. (cbranchhi4, cbranchsi4): Likewise. (cbranch<mode>4): New expander. (branch): New define_insn_and_split for use before reload. (branch_1, branch_1_false): New patterns to match splitter output. Remove code to manage cc_status.flags. * config/h8300/logical.md: Turn existing patterns into define_insn_and_split style patterns where the splitter adds a clobber of the condition code register. Drop "cc" attribute. Add _clobber_flags patterns to match output of the splitters. Move various peepholes into this file. * config/h8300/movepush.md: Turn existing patterns into define_insn_and_split style patterns where the splitter adds a clobber of the condition code register. Drop "cc" attribute. Add _clobber_flags patterns to match output of the splitters. * config/h8300/multiply.md: Turn existing patterns into define_insn_and_split style patterns where the splitter adds a clobber of the condition code register. Drop "cc" attribute. Add _clobber_flags patterns to match output of the splitters. * config/h8300/other.md: Turn existing patterns into define_insn_and_split style patterns where the splitter adds a clobber of the condition code register. Drop "cc" attribute. Add _clobber_flags patterns to match output of the splitters. * config/h8300/peepholes.md: Remove peepholes that were moved elsewhere. * config/h8300/predicates.md (simple_memory_operand): New. * config/h8300/proepi.md: Drop "cc" attribute setting. * config/h8300/shiftrotate.md: Turn existing patterns into define_insn_and_split style patterns where the splitter adds a clobber of the condition code register. Drop "cc" attribute. Add _clobber_flags patterns to match output of the splitters. * config/h8300/testcompare.md: Turn existing patterns into define_insn_and_split style patterns where the splitter adds a clobber of the condition code register. Drop "cc" attribute. Add _clobber_flags patterns to match output of the splitters. Disable various patterns for now. Move some peepholes that were previously in peepholes.md here.
2020-11-22d: Fix OutOfMemoryError thrown when appending to an array with a side effectIain Buclaw2-24/+72
When appending a character to an array, the result of that concat assignment was not the new value of the array, similarly, when appending an array to another array, side effects were evaluated in reverse to the expected order of evaluation. As of this change, the address of the left-hand side expression is saved and re-used as the result. Its evaluation is now also forced to occur before the concat operation itself is called. gcc/d/ChangeLog: PR d/97889 * expr.cc (ExprVisitor::visit (CatAssignExp *)): Enforce LTR order of evaluation on left and right hand side expressions. gcc/testsuite/ChangeLog: PR d/97889 * gdc.dg/torture/pr97889.d: New test.
2020-11-22widening_mul: pattern recognize further forms of __builtin_add_overflow ↵Jakub Jelinek2-14/+307
[PR95853] The following patch recognizes some further forms of additions with overflow checks as shown in the testcase, in particular where the unsigned addition is performed in a wider mode just to catch overflow with a > narrower_utype_max check. 2020-11-22 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/95853 * tree-ssa-math-opts.c (uaddsub_overflow_check_p): Add maxval argument, if non-NULL, instead look for r > maxval or r <= maxval comparisons. (match_uaddsub_overflow): Pattern recognize even other forms of __builtin_add_overflow, in particular when addition is performed in a wider type and result compared to maximum of the narrower type. * gcc.dg/pr95853.c: New test.
2020-11-22Partially revert recent H8 patch for conditional branchesJeff Law1-25/+41
So I'd forgotten an important tidbit on the H8 port. Specifically for a branch instruction, the target label must be operand 0 for the length computations. This really only affects the main conditional branch pattern. The other conditional branch patterns are split and ultimately funnel into the main pattern. This patch fixes the issue by partially reverting an earlier change. This issue didn't show up until late in the optimization work on cc0 removal of the H8 port, but was caught by the testsuite. So there's no new test. Built and regression tested H8 with this change, with and without the cc0 removal patches. gcc/ * config/h8300/jumpcall.md (branch_true, branch_false): Revert recent change. Ensure operand[0] is always the target label.