aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2020-09-13Improve costs for DImode shifts of interger constants.John David Anglin1-12/+21
2020-09-13 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * config/pa/pa.c (hppa_rtx_costs) [ASHIFT, ASHIFTRT, LSHIFTRT]: Provide accurate costs for DImode shifts of integer constants.
2020-09-13Daily bump.GCC Administrator5-1/+70
2020-09-12d: Return promoted types in d_type_promotes_to when linkage is not DIain Buclaw4-3/+113
This enables warnings to be shown when a bad type is passed to va_arg inside an extern(C) or extern(C++) function. gcc/d/ChangeLog: PR d/97002 * d-codegen.cc (d_build_call): Set input_location on CALL_EXPR. * d-lang.cc: Include function.h. (d_type_promotes_to): Do default conversions for C and C++ functions. * intrinsics.cc (expand_intrinsic_vaarg): Use build1_loc to build VA_ARG_EXPR. gcc/testsuite/ChangeLog: PR d/97002 * gdc.dg/pr97002.d: New test.
2020-09-12d: Build TYPE_DECLs for non-numeric enum types.Iain Buclaw3-11/+24
This is done so that the DWARF pass will emit a DW_TAG_typedef where the member type of an enum can't be represented in an ENUMERAL_TYPE. gcc/d/ChangeLog: * d-builtins.cc (d_build_d_type_nodes): Call build_ctype() on all basic front-end types. * decl.cc (DeclVisitor::visit (EnumDeclaration *)): Always add decl to current binding level. (build_type_decl): Build TYPE_DECL as a typedef if not for an enum or record type. * types.cc (TypeVisitor::visit (TypeEnum *)): Set underlying type for ENUMERAL_TYPEs. Build TYPE_DECL for non-numeric enums.
2020-09-12Add new shrpsi instruction variands to gcc/config/pa/pa.md.John David Anglin1-21/+119
2020-09-12 Roger Sayle <roger@nextmovesoftware.com> John David Anglin <danglin@gcc.gnu.org> gcc/ChangeLog * config/pa/pa.md (shrpsi4_1, shrpsi4_2): New define_insns split out from previous shrpsi4 providing two commutitive variants using plus_xor_ior_operator as a predicate. (shrpdi4_1, shrpdi4_2, shrpdi_3, shrpdi_4): Likewise DImode versions where _1 and _2 take register shifts, and _3 and _4 for integers. (rotlsi3_internal): Name this anonymous instruction. (rotrdi3): New DImode insn copied from rotrsi3. (rotldi3): New DImode expander copied from rotlsi3. (rotldi4_internal): New DImode insn copied from rotsi3_internal.
2020-09-12Add preliminary support for 128-bit integer typesEric Botcazou6-2/+40
This is only the gigi part, in preparation for the bulk of the implementation. gcc/ada/ChangeLog: * fe.h: Fix pilot error in previous change. * gcc-interface/gigi.h (enum standard_datatypes): Add ADT_mulv128_decl. (mulv128_decl): New macro. (get_target_long_long_long_size): Declare. * gcc-interface/decl.c (gnat_to_gnu_entity): Use a maximum size of 128 bits for discrete types if Enable_128bit_Types is true. * gcc-interface/targtyps.c: Include target.h. (get_target_long_long_long_size): New function. * gcc-interface/trans.c (gigi): Initialize mulv128_decl if need be. (build_binary_op_trapv): Call it for 128-bit multiplication. * gcc-interface/utils.c (make_type_from_size): Enforce a maximum size of 128 bits if Enable_128bit_Types is true.
2020-09-12Fix small inconsistency in new predicateEric Botcazou1-6/+2
This can result on the mainline in a segfault when an object declared at library level is used in the declaration of another, local object. gcc/ada/ChangeLog: * gcc-interface/trans.c (lvalue_for_aggr_p) <N_Object_Declaration>: Return false unconditionally.
2020-09-12Minor tweak to line debug infoEric Botcazou1-0/+6
This prevents the SLOC of the expression for a tag from being present in the line debug info every time it is referenced for coverage purposes. gcc/ada/ChangeLog: * gcc-interface/trans.c (gnat_to_gnu) <N_Object_Declaration>: Clear the SLOC of the expression of a tag.
2020-09-12Accept absolute address clause for array of UNC nominal subtypeEric Botcazou1-0/+13
This changes the compiler to accept again absolute address clause for aliased array of unconstrained nominal subtype, instead of erroring out in this case. gcc/ada/ChangeLog: * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Only give a warning for the overlay of an aliased array with an unconstrained nominal subtype if the address is absolute.
2020-09-12Daily bump.GCC Administrator7-1/+255
2020-09-11PowerPC: rename some functions.Michael Meissner1-24/+69
gcc/ 2020-09-11 Michael Meissner <meissner@linux.ibm.com> * config/rs6000/rs6000.c (rs6000_maybe_emit_maxc_minc): Rename from rs6000_emit_p9_fp_minmax. Change return type to bool. Add comments to document NaN/signed zero behavior. (rs6000_maybe_emit_fp_cmove): Rename from rs6000_emit_p9_fp_cmove. (have_compare_and_set_mask): New helper function. (rs6000_emit_cmove): Update calls to new names and the new helper function.
2020-09-11i386: Fix array index in expanderNathan Sidwell1-1/+1
I noticed a compiler warning about out-of-bound access. Fixed thusly. gcc/ * config/i386/sse.md (mov<mode>): Fix operand indices.
2020-09-11c++: Concepts and local externsNathan Sidwell2-4/+48
I discovered that we'd accept constraints on block-scope function decls inside templates. This fixes that. gcc/cp/ * decl.c (grokfndecl): Don't attach to local extern.
2020-09-11[PATCH,rs6000] Testsuite fixup pr96139 testsWill Schmidt3-5/+5
Hi, As reported, the recently added pr96139 tests will fail on older targets because the tests are missing the appropriate -mvsx or -maltivec options. This adds the options and clarifies the dg-require statements. The pr96139-c.c test needs -maltivec to work, but does not actually use vectors, so does not require -mvsx like the others. Sniff-regtested OK when specifying older targets on a power7 host. --target_board=unix/'{-mcpu=power4,-mcpu=power5,-mcpu=power6,-mcpu=power7, -mcpu=power8,-mcpu=power9}''{-m64,-m32}'" gcc/testsuite/ChangeLog: * gcc.target/powerpc/pr96139-a.c: Specify -mvsx option and update the dg-require stanza to match. * gcc.target/powerpc/pr96139-b.c: Same. * gcc.target/powerpc/pr96139-c.c: Specify -maltivec option and update the dg-require stanza to match.
2020-09-11Fix fma test case [PR97018]Sunil K Pandey12-12/+12
These tests are written for 256 bit vector. For -march=cascadelake, vector size changed to 512 bit. It doubles the number of fma instruction and test fail. Fix is to explicitly disable 512 bit vector by passing additional option -mno-avx512f. Tested on x86-64. gcc/testsuite/ChangeLog: PR target/97018 * gcc.target/i386/l_fma_double_1.c: Add option -mno-avx512f. * gcc.target/i386/l_fma_double_2.c: Likewise. * gcc.target/i386/l_fma_double_3.c: Likewise. * gcc.target/i386/l_fma_double_4.c: Likewise. * gcc.target/i386/l_fma_double_5.c: Likewise. * gcc.target/i386/l_fma_double_6.c: Likewise. * gcc.target/i386/l_fma_float_1.c: Likewise. * gcc.target/i386/l_fma_float_2.c: Likewise. * gcc.target/i386/l_fma_float_3.c: Likewise. * gcc.target/i386/l_fma_float_4.c: Likewise. * gcc.target/i386/l_fma_float_5.c: Likewise. * gcc.target/i386/l_fma_float_6.c: Likewise.
2020-09-11Move/correct offset adjustment (PR middle-end/96903).Martin Sebor3-8/+194
Resolves: PR middle-end/96903 - bogus warning on memcpy at negative offset from array end gcc/ChangeLog: PR middle-end/96903 * builtins.c (compute_objsize): Remove incorrect offset adjustment. (compute_objsize): Adjust offset range here instead. gcc/testsuite/ChangeLog: PR middle-end/96903 * gcc.dg/Wstringop-overflow-42.c:: Add comment. * gcc.dg/Wstringop-overflow-43.c: New test.
2020-09-11objc++: Always pop scope with method definitions [PR97015]Nathan Sidwell2-36/+27
Syntax errors in method definition lists could leave us in a function scope. My recent change for block scope externs didn't like that. This reimplements the parsing loop to finish the method definition we started. AFAICT the original code was attempting to provide some error recovery. Also while there, simply do the token peeking at the top of the loop, rather than at the two(!) ends. gcc/cp/ * parser.c (cp_parser_objc_method_definition_list): Reimplement loop, make sure we pop scope. gcc/testsuite/ * obj-c++.dg/syntax-error-9.mm: Adjust expected errors.
2020-09-11c++: Remove LOOKUP_CONSTINIT.Marek Polacek6-29/+19
Since we now have DECL_DECLARED_CONSTINIT_P, we no longer need LOOKUP_CONSTINIT. gcc/cp/ChangeLog: * cp-tree.h (LOOKUP_CONSTINIT): Remove. (LOOKUP_REWRITTEN): Adjust. * decl.c (duplicate_decls): Set DECL_DECLARED_CONSTINIT_P. (check_initializer): Use DECL_DECLARED_CONSTINIT_P instead of LOOKUP_CONSTINIT. (cp_finish_decl): Don't set DECL_DECLARED_CONSTINIT_P. Use DECL_DECLARED_CONSTINIT_P instead of LOOKUP_CONSTINIT. (grokdeclarator): Set DECL_DECLARED_CONSTINIT_P. * decl2.c (grokfield): Don't handle LOOKUP_CONSTINIT. * parser.c (cp_parser_decomposition_declaration): Remove LOOKUP_CONSTINIT handling. (cp_parser_init_declarator): Likewise. * pt.c (tsubst_expr): Likewise. (instantiate_decl): Likewise. * typeck2.c (store_init_value): Use DECL_DECLARED_CONSTINIT_P instead of LOOKUP_CONSTINIT.
2020-09-11tree-optimization/97020 - account SLP cost in loop vect againRichard Biener1-2/+9
The previous re-org made the cost of SLP vector stmts in loop vectorization ignored. The following rectifies this mistake. 2020-09-11 Richard Biener <rguenther@suse.de> PR tree-optimization/97020 * tree-vect-slp.c (vect_slp_analyze_operations): Apply SLP costs when doing loop vectorization.
2020-09-11testsuite: gimplefe-44 requires exceptionsAndrew Stubbs1-0/+1
This avoids an ICE on amdgcn. gcc/testsuite/ChangeLog: * gcc.dg/gimplefe-44.c: Require exceptions.
2020-09-11libgccjit: Add new gcc_jit_global_set_initializer entry pointAndrea Corallo12-13/+476
gcc/jit/ChangeLog 2020-08-01 Andrea Corallo <andrea.corallo@arm.com> * docs/topics/compatibility.rst (LIBGCCJIT_ABI_14): New ABI tag. * docs/topics/expressions.rst (gcc_jit_global_set_initializer): Document new entry point in section 'Global variables'. * jit-playback.c (global_new_decl, global_finalize_lvalue): New method. (playback::context::new_global): Make use of global_new_decl, global_finalize_lvalue. (load_blob_in_ctor): New template function in use by the following. (playback::context::new_global_initialized): New method. * jit-playback.h (class context): Decl 'new_global_initialized', 'global_new_decl', 'global_finalize_lvalue'. (lvalue::set_initializer): Add implementation. * jit-recording.c (recording::memento_of_get_pointer::get_size) (recording::memento_of_get_type::get_size): Add implementation. (recording::global::write_initializer_reproducer): New function in use by 'recording::global::write_reproducer'. (recording::global::replay_into) (recording::global::write_to_dump) (recording::global::write_reproducer): Handle initialized case. * jit-recording.h (class type): Decl 'get_size' and 'num_elements'. * libgccjit++.h (class lvalue): Declare new 'set_initializer' method. (class lvalue): Decl 'is_global' and 'set_initializer'. (class global) Decl 'write_initializer_reproducer'. Add 'm_initializer', 'm_initializer_num_bytes' fields. Implement 'set_initializer'. Add a destructor to free 'm_initializer'. * libgccjit.c (gcc_jit_global_set_initializer): New function. * libgccjit.h (gcc_jit_global_set_initializer): New function declaration. * libgccjit.map (LIBGCCJIT_ABI_14): New ABI tag. gcc/testsuite/ChangeLog 2020-08-01 Andrea Corallo <andrea.corallo@arm.com> * jit.dg/all-non-failing-tests.h: Add test-blob.c. * jit.dg/test-global-set-initializer.c: New testcase.
2020-09-11[libatomic] Add nvptx supportTom de Vries1-0/+16
Add nvptx support to libatomic. Given that atomic_test_and_set is not implemented for nvptx (PR96964), the compiler translates __atomic_test_and_set falling back onto the "Failing all else, assume a single threaded environment and simply perform the operation" case in expand_atomic_test_and_set, so it doesn't map onto an actual atomic operation. Still, that counts as supported for the configure test of libatomic, so we end up with HAVE_ATOMIC_TAS_1/2/4/8/16 == 1, and the corresponding __atomic_test_and_set_1/2/4/8/16 in libatomic all using that non-atomic implementation. Fix this by adding an atomic_test_and_set expansion for nvptx, that uses libatomics __atomic_test_and_set_1. This again makes the configure tests for HAVE_ATOMIC_TAS_1/2/4/8/16 fail, so instead we use this case in tas_n.c: ... /* If this type is smaller than word-sized, fall back to a word-sized compare-and-swap loop. */ bool SIZE(libat_test_and_set) (UTYPE *mptr, int smodel) ... which for __atomic_test_and_set_8 uses INVERT_MASK_8. Add INVERT_MASK_8 in libatomic_i.h, as well as MASK_8. Tested libatomic testsuite on nvptx. gcc/ChangeLog: PR target/96964 * config/nvptx/nvptx.md (define_expand "atomic_test_and_set"): New expansion. libatomic/ChangeLog: PR target/96898 * configure.tgt: Add nvptx. * libatomic_i.h (MASK_8, INVERT_MASK_8): New macro definition. * config/nvptx/host-config.h: New file. * config/nvptx/lock.c: New file.
2020-09-11amdgcn: align TImode registersAndrew Stubbs2-1/+4
This prevents execution failures caused by partially overlapping input and output registers. This is the same solution already used for DImode. gcc/ChangeLog: * config/gcn/gcn.c (gcn_hard_regno_mode_ok): Align TImode registers. * config/gcn/gcn.md: Assert that TImode registers do not early clobber.
2020-09-11improve BB vectorization dump locationsRichard Biener4-79/+73
This tries to improve BB vectorization dumps by providing more precise locations. Currently the vect_location is simply the very last stmt in a basic-block that has a location. So for double a[4], b[4]; int x[4], y[4]; void foo() { a[0] = b[0]; // line 5 a[1] = b[1]; a[2] = b[2]; a[3] = b[3]; x[0] = y[0]; // line 9 x[1] = y[1]; x[2] = y[2]; x[3] = y[3]; } // line 13 we show the user with -O3 -fopt-info-vec t.c:13:1: optimized: basic block part vectorized using 16 byte vectors while with the patch we point to both independently vectorized opportunities: t.c:5:8: optimized: basic block part vectorized using 16 byte vectors t.c:9:8: optimized: basic block part vectorized using 16 byte vectors there's the possibility that the location regresses in case the root stmt in the SLP instance has no location. For a SLP subgraph with multiple entries the location also chooses one entry at random, not sure in which case we want to dump both. Still as the plan is to extend the basic-block vectorization scope from single basic-block to multiple ones this is a first step to preserve something sensible. Implementation-wise this makes both costing and code-generation happen on the subgraphs as analyzed. 2020-09-11 Richard Biener <rguenther@suse.de> * tree-vectorizer.h (_slp_instance::location): New method. (vect_schedule_slp): Adjust prototype. * tree-vectorizer.c (vec_info::remove_stmt): Adjust the BB region begin if we removed the stmt it points to. * tree-vect-loop.c (vect_transform_loop): Adjust. * tree-vect-slp.c (_slp_instance::location): Implement. (vect_analyze_slp_instance): For BB vectorization set vect_location to that of the instance. (vect_slp_analyze_operations): Likewise. (vect_bb_vectorization_profitable_p): Remove wrapper. (vect_slp_analyze_bb_1): Remove cost check here. (vect_slp_region): Cost check and code generate subgraphs separately, report optimized locations and missed optimizations due to profitability for each of them. (vect_schedule_slp): Get the vector of SLP graph entries to vectorize as argument.
2020-09-11Fix ICE on nested packed variant record typeEric Botcazou3-5/+75
This is a regression present on the mainline and 10 branch: the compiler aborts on code accessing a component of a packed record type whose type is a packed discriminated record type with variant part. gcc/ada/ChangeLog: * gcc-interface/utils.c (type_has_variable_size): New function. (create_field_decl): In the packed case, also force byte alignment when the type of the field has variable size. gcc/testsuite/ChangeLog: * gnat.dg/pack27.adb: New test. * gnat.dg/pack27_pkg.ads: New helper.
2020-09-11Add missing stride entry in debug infoEric Botcazou1-0/+4
This adds a missing stride entry for bit-packed arrays of record types. gcc/ada/ChangeLog: * gcc-interface/misc.c (get_array_bit_stride): Return TYPE_ADA_SIZE for record and union types.
2020-09-11Drop GNAT encodings for fixed-point typesEric Botcazou1-3/+2
GDB can now deal with the DWARF representation just fine. gcc/ada/ChangeLog: * gcc-interface/misc.c (gnat_get_fixed_point_type): Bail out only when the GNAT encodings are specifically used.
2020-09-11Fix crash on array component with nonstandard index typeEric Botcazou2-6/+20
This is a regression present on mainline, 10 and 9 branches: the compiler goes into an infinite recursion eventually exhausting the stack for the declaration of a discriminated record type with an array component having a discriminant as bound and an index type that is an enumeration type with a non-standard representation clause. gcc/ada/ChangeLog: * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Subtype>: Only create extra subtypes for discriminants if the RM size of the base type of the index type is lower than that of the index type. gcc/testsuite/ChangeLog: * gnat.dg/specs/discr7.ads: New test.
2020-09-11Adjust email addressEric Botcazou1-8/+8
2020-09-11Adjust email addressEric Botcazou2-2/+2
2020-09-11Adjust email addressEric Botcazou2-23/+23
2020-09-11tree-optimization/97013 - avoid duplicate 'vectorization is not profitable'Richard Biener1-8/+2
This avoids dumping 'vectorization is not profitable' one more time if none of the opportunities in a BB is profitable. 2020-09-11 Richard Biener <rguenther@suse.de> PR tree-optimization/97013 * tree-vect-slp.c (vect_slp_analyze_bb_1): Remove duplicate dumping.
2020-09-11random vectorizer fixesRichard Biener1-5/+14
This fixes random things found when doing SLP discovery from arbitrary sets of stmts. 2020-09-10 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_build_slp_tree_1): Check vector types for all lanes are compatible. (vect_analyze_slp_instance): Appropriately check for stores. (vect_schedule_slp): Likewise.
2020-09-11[nvptx] Fix UB in nvptx_assemble_valueTom de Vries1-1/+3
When nvptx_assemble_value is called with size == 16, this bitshift runs into UB: ... val &= ((unsigned HOST_WIDE_INT)2 << (size * BITS_PER_UNIT - 1)) - 1; ... Fix this by checking the shift amount. Tested on nvptx. gcc/ChangeLog: * config/nvptx/nvptx.c (nvptx_assemble_value): Fix undefined behaviour.
2020-09-11[nvptx] Fix printing of 128-bit constant (negative case)Tom de Vries2-1/+19
For this code: ... __int128 min_one = -1; ... we currently generate: ... .visible .global .align 8 .u64 min_one[2] = { -1, 0 }; ... Fix this in nvptx_assemble_value, such that we have instead: ... .visible .global .align 8 .u64 min_one[2] = { -1, -1 }; ... gcc/ChangeLog: * config/nvptx/nvptx.c (nvptx_assemble_value): Handle negative __int128. gcc/testsuite/ChangeLog: * gcc.target/nvptx/int128.c: New test.
2020-09-10[PATCH][PR96791] disable POImode ld/st for memcpyAaron Sawdey1-4/+5
This is a (hopefully temporary) fix to PR96791. This will make the default be -mno-block-ops-vector-pair even on power10, so we will not hit the issue of DSE trying to truncate a POImode register. I am still concerned it will be possible to hit this because the MMA builtins will also generate POImode stores, but I think any example of that will be somewhat more contrived. gcc/ChangeLog: * config/rs6000/rs6000.c (rs6000_option_override_internal): Change default.
2020-09-10analyzer: stricter handling of non-pure builtins [PR96798]David Malcolm5-0/+138
Amongst other things PR analyzer/96798 notes that region_model::on_call_pre treats any builtin that hasn't been coded yet as a no-op (albeit with an unknown return value), which is wrong for non-pure builtins. This patch updates that function's handling of such builtins so that it instead conservatively assumes that any escaped/reachable regions can be affected by the call, and implements enough handling of specific builtins to avoid regressing the testsuite (I hope). gcc/analyzer/ChangeLog: PR analyzer/96798 * region-model-impl-calls.cc (region_model::impl_call_memcpy): New. (region_model::impl_call_strcpy): New. * region-model.cc (region_model::on_call_pre): Flag unhandled builtins that are non-pure as having unknown side-effects. Implement BUILT_IN_MEMCPY, BUILT_IN_MEMCPY_CHK, BUILT_IN_STRCPY, BUILT_IN_STRCPY_CHK, BUILT_IN_FPRINTF, BUILT_IN_FPRINTF_UNLOCKED, BUILT_IN_PUTC, BUILT_IN_PUTC_UNLOCKED, BUILT_IN_FPUTC, BUILT_IN_FPUTC_UNLOCKED, BUILT_IN_FPUTS, BUILT_IN_FPUTS_UNLOCKED, BUILT_IN_FWRITE, BUILT_IN_FWRITE_UNLOCKED, BUILT_IN_PRINTF, BUILT_IN_PRINTF_UNLOCKED, BUILT_IN_PUTCHAR, BUILT_IN_PUTCHAR_UNLOCKED, BUILT_IN_PUTS, BUILT_IN_PUTS_UNLOCKED, BUILT_IN_VFPRINTF, BUILT_IN_VPRINTF. * region-model.h (region_model::impl_call_memcpy): New decl. (region_model::impl_call_strcpy): New decl. gcc/testsuite/ChangeLog: PR analyzer/96798 * gcc.dg/analyzer/memcpy-1.c: New test. * gcc.dg/analyzer/strcpy-1.c: New test.
2020-09-11Daily bump.GCC Administrator6-1/+220
2020-09-10PowerPC: Change cmove function return to bool.Michael Meissner2-18/+18
In doing the other work for adding ISA 3.1 128-bit minimum, maximum, and conditional move support, I noticed the two functions that process conditional moves return 'int' instead of 'bool'. This patch changes these functions to return 'bool'. gcc/ 2020-09-10 Michael Meissner <meissner@linux.ibm.com> * config/rs6000/rs6000-protos.h (rs6000_emit_cmove): Change return type to bool. (rs6000_emit_int_cmove): Change return type to bool. * config/rs6000/rs6000.c (rs6000_emit_cmove): Change return type to bool. (rs6000_emit_int_cmove): Change return type to bool.
2020-09-10[nvptx] Fix printing of 128-bit constantTom de Vries1-1/+5
Currently, for this code from c-c++-common/spec-barrier-1.c: ... __int128 g = 9; ... we generate: ... // BEGIN GLOBAL VAR DEF: g .visible .global .align 8 .u64 g[2] = { 9, 9 }; ... and consequently the test-case fails in execution. The problem is caused by a shift in nvptx_assemble_value: ... val >>= part * BITS_PER_UNIT; ... where the shift amount is equal to the number of bits in val, which is undefined behaviour. Fix this by detecting the situation and setting val to 0. Tested on nvptx. gcc/ChangeLog: PR target/97004 * config/nvptx/nvptx.c (nvptx_assemble_value): Handle shift by number of bits in shift operand.
2020-09-10lto: Fix up lto BLOCK tree streamingJakub Jelinek1-1/+1
When I've tried to backport recent LTO changes of mine, I've ran into FAIL: g++.dg/ubsan/align-3.C -O2 -flto -fno-use-linker-plugin -flto-partition=none output pattern test FAIL: g++.dg/ubsan/align-3.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects output pattern test regressions that don't for some reason show up on the trunk. I've tracked it down to input_location_and_block being called recursively, first on some UBSAN_NULL ifn call's location which needs to stream a BLOCK that hasn't been streamed yet, which in turn needs to stream some locations for the decls in the BLOCK. Looking at that align-3.C testcase on the trunk, I also see the recursive lto_output_location_1 calls as well. First on block: $18 = <block 0x7fffea738480> which is in the block tree from what I can see just fine (see the end of mail). Now, output_function has code that should stream the BLOCK tree leafs: /* Output DECL_INITIAL for the function, which contains the tree of lexical scopes. */ stream_write_tree (ob, DECL_INITIAL (function), true); /* As we do not recurse into BLOCK_SUBBLOCKS but only BLOCK_SUPERCONTEXT collect block tree leafs and stream those. */ auto_vec<tree> block_tree_leafs; if (DECL_INITIAL (function)) collect_block_tree_leafs (DECL_INITIAL (function), block_tree_leafs); streamer_write_uhwi (ob, block_tree_leafs.length ()); for (unsigned i = 0; i < block_tree_leafs.length (); ++i) stream_write_tree (ob, block_tree_leafs[i], true); static void collect_block_tree_leafs (tree root, vec<tree> &leafs) { for (root = BLOCK_SUBBLOCKS (root); root; root = BLOCK_CHAIN (root)) if (! BLOCK_SUBBLOCKS (root)) leafs.safe_push (root); else collect_block_tree_leafs (BLOCK_SUBBLOCKS (root), leafs); } but the problem is that it is broken, it doesn't cover all block leafs, but only leafs with an odd depth from DECL_INITIAL (and only some of those). The following patch fixes that, but I guess we are going to stream at that point significantly more blocks than before (though I guess most of the time we'd stream them later on when streaming the gimple_locations that refer to them). 2020-09-10 Jakub Jelinek <jakub@redhat.com> * lto-streamer-out.c (collect_block_tree_leafs): Recurse on root rather than BLOCK_SUBBLOCKS (root).
2020-09-10c++: TINFO_VAR_DECLARED_CONSTINIT -> DECL_DECLARED_CONSTINIT_PNathan Sidwell3-28/+11
We need to record whether template function-scopestatic decls are constinit. That's currently held on the var's TEMPLATE_INFO data. But I want to get rid of such decl's template header as they're not really templates, and they're never instantiated separately from their containing function's definition. (Just like auto vars, which don't get them for instance). This patch moves the flag into a spare decl_lang_flag. gcc/cp/ * cp-tree.h (TINFO_VAR_DECLARED_CONSTINIT): Replace with ... (DECL_DECLARED_CONSTINIT_P): ... this. * decl.c (start_decl): No need to retrofit_lang_decl for constinit flag. (cp_finish_decl): Use DECL_DECLARED_CONSTINIT_P. * pt.c (tsubst_decl): No need to handle constinit flag propagation. (tsubst_expr): Or here.
2020-09-10aarch64: Add support for Cortex-R82Alex Coplan3-3/+6
This adds support for Arm's Cortex-R82 CPU to GCC. For more information about this CPU, see [0]. [0] : https://developer.arm.com/ip-products/processors/cortex-r/cortex-r82 gcc/ChangeLog: * config/aarch64/aarch64-cores.def: Add Cortex-R82. * config/aarch64/aarch64-tune.md: Regenerate. * doc/invoke.texi: Add entry for Cortex-R82.
2020-09-10aarch64: Add support for Armv8-RAlex Coplan6-3/+20
This adds support for Armv8-R AArch64 to GCC. It adds the -march value armv8-r and sets the ACLE feature macro __ARM_ARCH_PROFILE correctly when -march is set to armv8-r. gcc/ChangeLog: * common/config/aarch64/aarch64-common.c (aarch64_get_extension_string_for_isa_flags): Don't force +crc for Armv8-R. * config/aarch64/aarch64-arches.def: Add entry for Armv8-R. * config/aarch64/aarch64-c.c (aarch64_define_unconditional_macros): Set __ARM_ARCH_PROFILE correctly for Armv8-R. * config/aarch64/aarch64.h (AARCH64_FL_V8_R): New. (AARCH64_FL_FOR_ARCH8_R): New. (AARCH64_ISA_V8_R): New. * doc/invoke.texi: Add Armv8-R to architecture table. gcc/testsuite/ChangeLog: * gcc.target/aarch64/acle/armv8-r.c: New test.
2020-09-10d: Enable miscellaneous warnings by -Wextra flagIain Buclaw1-3/+3
These warnings are handled outside of the D core language front-end, so shouldn't be enabled by -Wall. gcc/d/ChangeLog: * lang.opt (Waddress): Enable warning by -Wextra. (Wcast-result): Likewise. (Wunknown-pragmas): Likewise.
2020-09-10d: Don't warn about variables initialized with 'void'Iain Buclaw1-22/+13
There is no problem with using `T var = void', it is if the variable remains uninitialized on first use that a warning should be issued. gcc/d/ChangeLog: * decl.cc (DeclVisitor::visit (VarDeclaration *)): Don't warn about variables initialized with 'void'.
2020-09-10d: Warn when casting from a D class to a C++ class.Iain Buclaw4-2/+44
Before, the warning was only issued when casting in the other direction. Now a warning is printed for both directions. gcc/d/ChangeLog: * d-convert.cc (convert_expr): Warn when casting from a D class to a C++ class. gcc/testsuite/ChangeLog: * gdc.dg/Waddress.d: New test. * gdc.dg/Wcastresult1.d: New test. * gdc.dg/Wcastresult2.d: New test.
2020-09-10Fix bogus error on Value_Size clause for variant record typeEric Botcazou2-2/+20
This is a regression present on the mainline and 10 branch: the compiler rejects a Value_Size clause on a discriminated record type with variant. gcc/ada/ChangeLog: * gcc-interface/decl.c (set_rm_size): Do not take into account the Value_Size clause if it is not for the entity itself. gcc/testsuite/ChangeLog: * gnat.dg/specs/size_clause5.ads: New test.
2020-09-10Fix uninitialized variable with nested variant record typesEric Botcazou4-5/+83
This fixes a wrong code issue with nested variant record types: the compiler generates move instructions that depend on an uninitialized variable, which was initially a SAVE_EXPR not instantiated early enough. gcc/ada/ChangeLog: * gcc-interface/decl.c (build_subst_list): For a definition, make sure to instantiate the SAVE_EXPRs generated by the elaboration of the constraints in front of the elaboration of the type itself. gcc/testsuite/ChangeLog: * gnat.dg/discr59.adb: New test. * gnat.dg/discr59_pkg1.ads: New helper. * gnat.dg/discr59_pkg2.ads: Likewise.
2020-09-10Add emergency dump after an ICEEric Botcazou1-0/+4
This is only for internal debugging purposes. gcc/ada/ChangeLog: * gcc-interface/misc.c: Include tree-pass.h. (internal_error_function): Call emergency_dump_function.