aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-10-12Generalize compute_objsize to return maximum size/offset instead of failing ↵Martin Sebor25-204/+2339
(PR middle-end/97023). Also resolves: PR middle-end/97342 - bogus -Wstringop-overflow with nonzero signed and unsigned offsets PR middle-end/97023 - missing warning on buffer overflow in chained mempcpy PR middle-end/96384 - bogus -Wstringop-overflow= storing into multidimensional array with index in range gcc/ChangeLog: PR middle-end/97342 PR middle-end/97023 PR middle-end/96384 * builtins.c (access_ref::access_ref): Initialize new member. Use new enum. (access_ref::size_remaining): Define new member function. (inform_access): Handle expressions referencing objects. (gimple_call_alloc_size): Call get_size_range instead of get_range. (gimple_call_return_array): New function. (get_range): Rename... (get_offset_range): ...to this. Improve detection of ranges from types of expressions. (gimple_call_return_array): Adjust calls to get_range per above. (compute_objsize): Same. Set maximum size or offset instead of failing for unknown objects and handle more kinds of expressions. (compute_objsize): Call access_ref::size_remaining. (compute_objsize): Have transitional wrapper fail for pointers into unknown objects. (expand_builtin_strncmp): Call access_ref::size_remaining and handle new cases. * builtins.h (access_ref::size_remaining): Declare new member function. (access_ref::set_max_size_range): Define new member function. (access_ref::add_ofset, access_ref::add_max_ofset): Same. (access_ref::add_base0): New data member. * calls.c (get_size_range): Change argument type. Handle new condition. * calls.h (get_size_range): Adjust signature. (enum size_range_flags): Define new type. * gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref): Correct argument to get_size_range. * tree-ssa-strlen.c (get_range): Handle anti-ranges. (maybe_warn_overflow): Check DECL_P before assuming it's one. gcc/testsuite/ChangeLog: PR middle-end/97342 PR middle-end/97023 PR middle-end/96384 * c-c++-common/Wrestrict.c: Adjust comment. * gcc.dg/Wstringop-overflow-34.c: Remove xfail. * gcc.dg/Wstringop-overflow-43.c: Remove xfails. Adjust regex patterns. * gcc.dg/pr51683.c: Prune out expected warning. * gcc.target/i386/pr60693.c: Same. * g++.dg/warn/Wplacement-new-size-8.C: New test. * gcc.dg/Wstringop-overflow-41.c: New test. * gcc.dg/Wstringop-overflow-44.s: New test. * gcc.dg/Wstringop-overflow-45.c: New test. * gcc.dg/Wstringop-overflow-46.c: New test. * gcc.dg/Wstringop-overflow-47.c: New test. * gcc.dg/Wstringop-overflow-49.c: New test. * gcc.dg/Wstringop-overflow-50.c: New test. * gcc.dg/Wstringop-overflow-51.c: New test. * gcc.dg/Wstringop-overflow-52.c: New test. * gcc.dg/Wstringop-overflow-53.c: New test. * gcc.dg/Wstringop-overflow-54.c: New test. * gcc.dg/Wstringop-overflow-55.c: New test. * gcc.dg/Wstringop-overread-5.c: New test.
2020-10-12Correct handling of indices into arrays with elements larger than 1 (PR ↵Martin Sebor13-323/+391
c++/96511) Resolves: PR c++/96511 - Incorrect -Wplacement-new on POINTER_PLUS into an array with 4-byte elements PR middle-end/96384 - bogus -Wstringop-overflow= storing into multidimensional array with index in range gcc/ChangeLog: PR c++/96511 PR middle-end/96384 * builtins.c (get_range): Return full range of type when neither value nor its range is available. Fail for ranges inverted due to the signedness of offsets. (compute_objsize): Handle more special array members. Handle POINTER_PLUS_EXPR and VIEW_CONVERT_EXPR that come up in front end code. (access_ref::offset_bounded): Define new member function. * builtins.h (access_ref::eval): New data member. (access_ref::offset_bounded): New member function. (access_ref::offset_zero): New member function. (compute_objsize): Declare a new overload. * gimple-array-bounds.cc (array_bounds_checker::check_array_ref): Use enum special_array_member. * tree.c (component_ref_size): Use special_array_member. * tree.h (special_array_member): Define a new type. (component_ref_size): Change signature. gcc/cp/ChangeLog: PR c++/96511 PR middle-end/96384 * init.c (warn_placement_new_too_small): Call builtin_objsize instead of duplicating what it does. gcc/testsuite/ChangeLog: PR c++/96511 PR middle-end/96384 * g++.dg/init/strlen.C: Add expected warning. * g++.dg/warn/Wplacement-new-size-1.C: Relax warnings. * g++.dg/warn/Wplacement-new-size-2.C: Same. * g++.dg/warn/Wplacement-new-size-6.C: Same. * gcc.dg/Warray-bounds-58.c: Adjust * gcc.dg/Wstringop-overflow-37.c: Same. * g++.dg/warn/Wplacement-new-size-7.C: New test.
2020-10-12Cleanup ipa-modrefJan Hubicka2-257/+528
this is largely mechanical patch fixing some suboptimal datastructure decision in modref. It records three different things 1) optimization_summaries that are used by tree-ssa-alias to disambiguate (computed by local passes or ipa execute) 2) summaries produced by local analysis and used by the ipa execute 3) summaries_lto produced by analysis when streaming is expected, streamed, used by ipa execute All three items are stored in "summaries" datastructure where 1 dn 2 are mixed and differentiated by "finished" flags. This use extra memory and also makes it impossible to use modref while producing other IPA summaries (by ipa-prop and ipa-devirt). This patch separates the summaries into three special purpose datastructures. There is one fix to propagation in ipa_merge_modref_summary_after_inlining where check to ignore stores was placed incorrectly. This seems to lead to increased clobber disambiguations: Alias oracle query stats: refs_may_alias_p: 64267006 disambiguations, 74475486 queries ref_maybe_used_by_call_p: 142119 disambiguations, 65169365 queries call_may_clobber_ref_p: 22975 disambiguations, 28762 queries nonoverlapping_component_refs_p: 0 disambiguations, 36803 queries nonoverlapping_refs_since_match_p: 19401 disambiguations, 55550 must overlaps, 75722 queries aliasing_component_refs_p: 54714 disambiguations, 759027 queries TBAA oracle: 23636760 disambiguations 56001742 queries 16112157 are in alias set 0 10614737 queries asked about the same object 125 queries asked about the same alias set 0 access volatile 3994423 are dependent in the DAG 1643540 are aritificially in conflict with void * Modref stats: modref use: 11667 disambiguations, 40207 queries modref clobber: 1508990 disambiguations, 1829697 queries 3916688 tbaa queries (2.140621 per modref query) 623504 base compares (0.340769 per modref query) PTA query stats: pt_solution_includes: 967354 disambiguations, 13605701 queries pt_solutions_intersect: 1032982 disambiguations, 13121107 queries Bootstrapped/regtested x86_64-linux. I plan to commit it tomorrow if there are no complains. gcc/ChangeLog: 2020-10-11 Jan Hubicka <hubicka@ucw.cz> * ipa-modref.c (modref_summaries): Remove field IPA. (class modref_summary_lto): New global variable. (class modref_summaries_lto): New. (modref_summary::modref_summary): Remove loads_lto and stores_lto. (modref_summary::~modref_summary): Remove loads_lto and stores_lto. (modref_summary::useful_p): Do not use lto_useful. (modref_records_lto): New typedef. (struct modref_summary_lto): New type. (modref_summary_lto::modref_summary_lto): New member function. (modref_summary_lto::~modref_summary_lto): New member function. (modref_summary_lto::useful_p): New member function. (modref_summary::dump): Do not handle lto. (modref_summary_lto::dump): New member function. (get_modref_function_summary): Use optimization_summary. (merge_call_side_effects): Use optimization_summary. (analyze_call): Use optimization_summary. (struct summary_ptrs): New struture. (analyze_load): Update to handle separate lto and non-lto summaries. (analyze_store): Likewise. (analyze_stmt): Likewise. (remove_summary): Break out from ... (analyze_function): ... here; update to handle seprated summaries. (modref_summaries::insert): Do not handle lto summary. (modref_summaries_lto::insert): New member function. (modref_summaries::duplicate): Do not handle lto summary. (modref_summaries_lto::duplicate): New member function. (read_modref_records): Expect nolto_ret or lto_ret to be NULL> (modref_write): Write lto summary. (read_section): Handle separated summaries. (modref_read): Initialize separated summaries. (modref_transform): Handle separated summaries. (pass_modref::execute): Turn summary to optimization_summary; handle separate summaries. (ignore_edge): Handle separate summaries. (ipa_merge_modref_summary_after_inlining): Likewise. (collapse_loads): Likewise. (modref_propagate_in_scc): Likewise. (pass_ipa_modref::execute): Likewise. (ipa_modref_c_finalize): Likewise. * ipa-modref.h (modref_records_lto): Remove typedef. (struct modref_summary): Remove stores_lto, loads_lto and finished fields; remove lto_useful_p member function.
2020-10-12tree-optimization/97357: Fix testcaseChristophe Lyon1-1/+1
Calling _setjmp causing a warning when targeting newlib. 2020-10-12 Christophe Lyon <christophe.lyon@linaro.org> gcc/testsuite/ PR tree-optimization/97357 * gcc.dg/pr97357.c: Call setjmp instead of _setjmp.
2020-10-12optimize permutes in SLP, remove vect_attempt_slp_rearrange_stmtsRichard Biener5-226/+503
This introduces a permute optimization phase for SLP which is intended to cover the existing permute eliding for SLP reductions plus handling commonizing the easy cases. It currently uses graphds to compute a postorder on the reverse SLP graph and it handles all cases vect_attempt_slp_rearrange_stmts did (hopefully - I've adjusted most testcases that triggered it a few days ago). It restricts itself to move around bijective permutations to simplify things for now, mainly around constant nodes. As a prerequesite it makes the SLP graph cyclic (ugh). It looks like it would pay off to compute a PRE/POST order visit array once and elide all the recursive SLP graph walks and their visited hash-set. At least for the time where we do not change the SLP graph during such walk. I do not like using graphds too much but at least I don't have to re-implement yet another RPO walk, so maybe it isn't too bad. It now computes permute placement during iteration and thus should get cycles more obviously correct. Richard. 2020-10-06 Richard Biener <rguenther@suse.de> * tree-vect-data-refs.c (vect_slp_analyze_instance_dependence): Use SLP_TREE_REPRESENTATIVE. * tree-vectorizer.h (_slp_tree::vertex): New member used for graphds interfacing. * tree-vect-slp.c (vect_build_slp_tree_2): Allocate space for PHI SLP children. (vect_analyze_slp_backedges): New function filling in SLP node children for PHIs that correspond to backedge values. (vect_analyze_slp): Call vect_analyze_slp_backedges for the graph. (vect_slp_analyze_node_operations): Deal with a cyclic graph. (vect_schedule_slp_instance): Likewise. (vect_schedule_slp): Likewise. (slp_copy_subtree): Remove. (vect_slp_rearrange_stmts): Likewise. (vect_attempt_slp_rearrange_stmts): Likewise. (vect_slp_build_vertices): New functions. (vect_slp_permute): Likewise. (vect_slp_perms_eq): Likewise. (vect_optimize_slp): Remove special code to elide permutations with SLP reductions. Implement generic permute optimization. * gcc.dg/vect/bb-slp-50.c: New testcase. * gcc.dg/vect/bb-slp-51.c: Likewise.
2020-10-12arm: Use E_FOOmode instead of FOOmode in arm_preferred_simd_modeChristophe Lyon1-5/+5
gcc-4.8.5 does not accept case clauses with non-literal type, which happens for "QImode" as it expands to (scalar_int_mode ((scalar_int_mode::from_int) E_QImode)). Use E_QImode instead in arm_preferred_simd_mode, to fix the build. Same for HImode, SImode, HFmode and SFmode as introduced by a recent patch. 2020-10-12 Christophe Lyon <christophe.lyon@linaro.org> gcc/ * config/arm/arm.c (arm_preferred_simd_mode): Use E_FOOmode instead of FOOmode.
2020-10-12SLP: fix SVE issuesMartin Liska3-0/+25
The patch fixes the following 2 issues: .MASK_STORE_LANES (&a, 4B, max_mask_34, vect_array.12); here we miss to return the last argument as stored value. ivtmp_32 = ivtmp_31 + POLY_INT_CST [4, 4]; here we miss a bail out in vect_recog_over_widening_pattern. gcc/ChangeLog: PR tree-optimization/97079 * internal-fn.c (internal_fn_stored_value_index): Handle also .MASK_STORE_LANES. * tree-vect-patterns.c (vect_recog_over_widening_pattern): Bail out for unsupported TREE_TYPE. gcc/testsuite/ChangeLog: PR tree-optimization/97079 * gcc.target/aarch64/sve/pr97079.c: New test.
2020-10-12fix SLP subgraph detection wrt fully shared lanesRichard Biener1-7/+10
When a VEC_PERM SLP node just permutes existing lanes this confuses the SLP subgraph detection where I tried to elide a node-based visited hash-map in a way that doesn't work. Fixed by adding such. 2020-10-12 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_bb_partition_graph_r): Use visited hash-map. (vect_bb_partition_graph): Likewise.
2020-10-12vect: Fix an ICE in vect_recog_mask_conversion_patternDuan bo2-6/+68
When processing the cond expression, vect_recog_mask_conversion_pattern doesn't consider the situation that two operands of rhs1 are different vectypes, leading to a vect ICE. This patch adds the identification and handling of the situation to fix the problem. gcc/ChangeLog: PR target/96757 * tree-vect-patterns.c (vect_recog_mask_conversion_pattern): Add the identification and handling of the dropped situation in the cond expression processing phase. gcc/testsuite/ChangeLog: PR target/96757 * gcc.target/aarch64/pr96757.c: New test.
2020-10-12nvptx - invoke.texi: Update default of -misaTobias Burnus1-1/+1
Followup to commit 383400a6078d75bbfa1216c9af2c37f7e88740c9 gcc/ChangeLog * doc/invoke.texi (nvptx's -misa): Update default to sm_35.
2020-10-12PR target/97349 AArch64: Incorrect types for some Neon vdupq_n_<...> intrinsicsKyrylo Tkachov2-7/+19
This patch fixes the PR by adjusting the input types of the intrinsic prototypes to the ones mandated by ACLE Turns out the tests in the testsuite were already using the correct ones, but implicit conversions hid the bug... Bootstrapped and tested on aarch64-none-linux-gnu. gcc/ PR target/97349 * config/aarch64/arm_neon.h (vdupq_n_p8, vdupq_n_p16, vdupq_n_p64, vdupq_n_s8, vdupq_n_s16, vdupq_n_u8, vdupq_n_u16): Fix argument type. gcc/testsuite/ PR target/97349 * gcc.target/aarch64/simd/pr97349.c: New test.
2020-10-12IBM Z: Change vector copysign to use bitwise operationsIlya Leoshkevich3-28/+45
The vector copysign pattern incorrectly assumes that vector if_then_else operates on bits, not on elements. This can theoretically mislead the optimizers. Fix by changing it to use bitwise operations, like commit 2930bb321794 ("PR94613: Fix vec_sel builtin for IBM Z") did for vec_sel builtin. gcc/ChangeLog: 2020-10-07 Ilya Leoshkevich <iii@linux.ibm.com> * config/s390/s390-protos.h (s390_build_signbit_mask): New function. * config/s390/s390.c (s390_contiguous_bitmask_vector_p): Bitcast the argument to an integral mode. (s390_expand_vec_init): Do not call s390_contiguous_bitmask_vector_p with a scalar argument. (s390_build_signbit_mask): New function. * config/s390/vector.md (copysign<mode>3): Use bitwise operations.
2020-10-12libphobos: Override tool_timeout value in testsuiteIain Buclaw1-0/+4
Some of the larger tests in the phobos testsuite on occasion trigger the default timeout limit. Increasing the limit to 10 minutes should give compilation enough time to finish. libphobos/ChangeLog: * testsuite/lib/libphobos.exp: Define tool_timeout, set to 600.
2020-10-12d: Merge upstream dmd 70aabfb51Iain Buclaw9-1/+49
Fixes a symbol resolver bug where a private alias becomes public if used before its declaration. Reviewed-on: https://github.com/dlang/dmd/pull/11831 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 70aabfb51
2020-10-12d: Merge upstream dmd 3a9790525Iain Buclaw3-8/+8
Fixes the return codes to match the documentation of Target::isVectorTypeSupported. Reviewed-on: https://github.com/dlang/dmd/pull/11830 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 3a9790525 * d-target.cc (Target::isVectorTypeSupported): Adjust return codes for invalid size and invalid base type.
2020-10-12Ignore shifts larger than precision in operator_rshift::op1_range.Aldy Hernandez2-0/+15
gcc/ChangeLog: PR tree-optimization/97371 * range-op.cc (operator_rshift::op1_range): Ignore shifts larger than or equal to type precision. gcc/testsuite/ChangeLog: * gcc.dg/pr97371.c: New test.
2020-10-12IPA: prevent an UBSAN errorMartin Liska1-1/+1
Prevents the following UBSAN error: ./xgcc -B. /home/marxin/Programming/gcc/gcc/testsuite/g++.dg/torture/pr49770.C -O2 -c /home/marxin/Programming/gcc2/gcc/ipa-modref-tree.h:482:22: runtime error: load of value 2, which is not a valid value for type 'bool' #0 0x1fdb4d1 in modref_tree<int>::merge(modref_tree<int>*, vec<modref_parm_map, va_heap, vl_ptr>*) /home/marxin/Programming/gcc2/gcc/ipa-modref-tree.h:482 #1 0x1fcadaa in merge_call_side_effects(modref_summary*, gimple*, modref_summary*, bool) /home/marxin/Programming/gcc2/gcc/ipa-modref.c:511 #2 0x1fcbadd in analyze_call /home/marxin/Programming/gcc2/gcc/ipa-modref.c:642 #3 0x1fcc061 in analyze_stmt /home/marxin/Programming/gcc2/gcc/ipa-modref.c:732 #4 0x1fccf31 in analyze_function /home/marxin/Programming/gcc2/gcc/ipa-modref.c:823 #5 0x1fd17e5 in execute /home/marxin/Programming/gcc2/gcc/ipa-modref.c:1441 #6 0x25cca6e in execute_one_pass(opt_pass*) /home/marxin/Programming/gcc2/gcc/passes.c:2509 #7 0x25cd39b in execute_pass_list_1 /home/marxin/Programming/gcc2/gcc/passes.c:2597 #8 0x25cd450 in execute_pass_list_1 /home/marxin/Programming/gcc2/gcc/passes.c:2598 #9 0x25cd4ee in execute_pass_list(function*, opt_pass*) /home/marxin/Programming/gcc2/gcc/passes.c:2608 #10 0x25c7a5a in do_per_function_toporder(void (*)(function*, void*), void*) /home/marxin/Programming/gcc2/gcc/passes.c:1726 #11 0x25cfa3f in execute_ipa_pass_list(opt_pass*) /home/marxin/Programming/gcc2/gcc/passes.c:2941 #12 0x173572d in ipa_passes /home/marxin/Programming/gcc2/gcc/cgraphunit.c:2642 #13 0x17364ee in symbol_table::compile() /home/marxin/Programming/gcc2/gcc/cgraphunit.c:2777 #14 0x17372d9 in symbol_table::finalize_compilation_unit() /home/marxin/Programming/gcc2/gcc/cgraphunit.c:3022 #15 0x2a1f00a in compile_file /home/marxin/Programming/gcc2/gcc/toplev.c:485 #16 0x2a27dc8 in do_compile /home/marxin/Programming/gcc2/gcc/toplev.c:2321 #17 0x2a283cc in toplev::main(int, char**) /home/marxin/Programming/gcc2/gcc/toplev.c:2460 #18 0x54f21cd in main /home/marxin/Programming/gcc2/gcc/main.c:39 #19 0x7ffff6f0de09 in __libc_start_main ../csu/libc-start.c:314 #20 0x9eac09 in _start (/home/marxin/Programming/gcc2/objdir/gcc/cc1plus+0x9eac09) gcc/ChangeLog: * ipa-modref.c (merge_call_side_effects): Clear modref_parm_map fields in the vector.
2020-10-12More consistently split SLP groupsRichard Biener1-1/+1
This appropriately makes matches all true after successful SLP discovery to reliably succeed splitting. We were picking up an eventual all false built-up from scalars state in some cases. 2020-10-12 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_analyze_slp_instance): Set matches to true after successful discovery but forced split.
2020-10-12[nvptx] Fix -msoft-stack-reserve-local formatTom de Vries1-1/+1
Currently, in order to use the switch -msoft-stack-reserve-local with the default arg 128, you have to specify '-msoft-stack-reserve-local128'. Fix the switch format such that you specify '-msoft-stack-reserve-local=128' instead. Tested on nvptx. gcc/ChangeLog: 2020-10-12 Tom de Vries <tdevries@suse.de> * config/nvptx/nvptx.opt (-msoft-stack-reserve-local): Rename to ... (-msoft-stack-reserve-local=): ... this.
2020-10-12tree-optimization/97357 - avoid abnormals in loop splitting conditionsRichard Biener2-0/+42
This avoids abnormals in another place. 2020-10-12 Richard Biener <rguenther@suse.de> PR tree-optimization/97357 * tree-ssa-loop-split.c (ssa_semi_invariant_p): Abnormal SSA names are not semi invariant. * gcc.dg/pr97357.c: New testcase.
2020-10-12Fortran : ICE in gfc_validate_kind PR96099Mark Eggleston3-1/+18
Only check for kind if the type supports kind. 2020-10-12 Mark Eggleston <markeggleston@gcc.gnu.org> gcc/fortran/ChangeLog: PR fortran/96099 * decl.c (gfc_match_implicit): Check for numeric and logical types. 2020-10-12 Mark Eggleston <markeggleston@gcc.gnu.org> gcc/testsuite/ChangeLog: PR fortran/96099 * gfortran.dg/pr96099_1.f90: New test. * gfortran.dg/pr96099_2.f90: New test.
2020-10-12Daily bump.GCC Administrator9-1/+194
2020-10-11import elementary functions as intrinsicsAlexandre Oliva4-50/+50
Importing them as intrinsics enables GCC to treat them as builtins whose behavior is known by GCC. Specifically, if they aren't intrinsics, calls to Sin and Cos won't be combined into sincos. We still need to make Sin and Cos wrappers inline in user-exposed interfaces to get users the benefit of this transformation. That is forthcoming in a separate patch. for gcc/ada/ChangeLog * libgnat/a-numaux.ads: Make all imports Intrinsic. * libgnat/a-numaux__darwin.ads: Likewise. * libgnat/a-numaux__libc-x86.ads: Likewise. * libgnat/a-numaux__vxworks.ads: Likewise.
2020-10-11aix: remove libgomp and libatomic archives before creating FAT archivesClément Chigot2-0/+6
AIX caches shared objects in archives with read-other permission. libgomp and libatomic might be in use during the build or testing, which may cause archiver operations on them to fail. This patch adjusts the Makefile fragments to delete the library archives before creating fresh archives containing both the 32 bit and 64 bit shared objects. libatomic/ChangeLog: 2020-10-11 Clement Chigot <clement.chigot@atos.net> * config/t-aix: Delete and recreate libatomic before creating FAT library. libgomp/ChangeLog: 2020-10-11 Clement Chigot <clement.chigot@atos.net> * config/t-aix: Delete and recreate libgomp before creating FAT library.
2020-10-11Objective-C, Darwin : Make protocols private extern and weak.Iain Sandoe1-9/+27
Newer linkers want protocols to be private-extern and weak. This is conditional on the runtime version. gcc/objc/ChangeLog: * objc-next-runtime-abi-02.c (create_global_decl): Update to allow the caller to specify declaration or definition. (create_hidden_decl): Likewise. (next_runtime_abi_02_protocol_decl): Make the symbol weak and hidden for later OS runtime versions. (build_v2_protocol_list_address_table): Likewise.
2020-10-11libobjc, Darwin : Fix powerpc encoding regression.Iain Sandoe1-2/+1
This corrects a typo in the recipe for the special type alignment rules that are used for 32bit powerpc Darwin platforms. libobjc/ChangeLog: * encoding.c (_darwin_rs6000_special_round_type_align): Use DFMode in the emulation of the special round type.
2020-10-11Objective-C++ : Fix bitfield ivars.Iain Sandoe1-6/+1
This fixes a regression present from 8.x; It used to be OK to test for a DECL_INITIAL value to flag that an ivar was a bitfield (the initial value was the width). This still works on C / Objective-C, but no longer on C++. Replace the test with DECL_C_BIT_FIELD() which is set for both C and C++. gcc/objc/ChangeLog: * objc-next-runtime-abi-02.c (objc_v2_build_ivar_ref): Test DECL_C_BIT_FIELD to detect that an ivar is a bitfield.
2020-10-11testsuite, Objective-c++ : Update diagnostic plugin test.Iain Sandoe1-10/+23
The @selector() and @protocol() operators produce var decls these do not work with the example plugin. Unfortunatetely, unlike the ObjC front end, it is not so easy to construct a substitute expression that works reliably. Where it does not work we xfail for now. gcc/testsuite/ChangeLog: * obj-c++.dg/plugin/diagnostic-test-expressions-1.mm: Adjust testcase to include expressions for @selector and @protocol. XFAIL where this is still not sufficient to obtain a disgnostic range.
2020-10-11testsuite, objective-c++ : Add a dummy retain/release to testuite object.Iain Sandoe2-0/+16
On newer systems, the throw/catch process sends retain and release messages to thrown objects. While these are not needed in the testsuite cases, they cause the tests to fail because the selector is not handled. Add dummy methods to the testsuite object. gcc/testsuite/ChangeLog: * objc-obj-c++-shared/TestsuiteObject.h: Add dummy retain and release method declarations. * objc-obj-c++-shared/TestsuiteObject.m: Add dummy retain and release implementations.
2020-10-11testsuite, objective-c++ : GC is not available from Darwin16.Iain Sandoe1-1/+1
Update the dg-skip to cover newer systems. gcc/testsuite/ChangeLog: * obj-c++.dg/objc-gc-3.mm:i Skip for Darwin >= 16.
2020-10-11aix: add FAT library support for libstdc++fs.aClément Chigot1-3/+8
Make libstdc++fs.a a 32/64 bit FAT library. It is too complicated for the FAT library Makefile fragment to determine if --enable-libstdcxx-filesystem-ts has been enabled. This patch checks the existence of libstdc++fs.a at build time and adds the complementary object file if it was built. libstdc++-v3/Changelog: 2020-10-11 Clement Chigot <clement.chigot@atos.net> * config/os/aix/t-aix: Add complementary mode object file to libstdc++fs.a
2020-10-11testsuite, Objective-C++ : Skip an ancient test on newer systems.Iain Sandoe1-2/+2
This test contains elements incompatible with modern Objective-C headers, it is only of relevance to Darwin8 or potentially on systems with SDKs that could target Darwin8, so skip it on newer systems. gcc/testsuite/ChangeLog: * obj-c++.dg/cxx-ivars-3.mm: Skip for macOS >= 10.7.
2020-10-11testsuite, Objective-c++ : Fix GNU API tests to work with NeXT where possible.Iain Sandoe3-2/+8
The version 2 GNU Objective C API is mostly compatible with the NeXT one. However, there are a few testsuite tweaks needed (and one test fails for NeXT without considerable increase in complexity). gcc/testsuite/ChangeLog: * obj-c++.dg/gnu-api-2-class-meta.mm: Add a flag to cause NeXT headers to expose prototypes for messaging. * obj-c++.dg/gnu-api-2-class.mm: Likewise. * obj-c++.dg/gnu-api-2-objc.mm: Skip this because of the extra protocols pulled in by system headers.
2020-10-11testsuite, Objective-C : Fix two plugin diagnostics tests for Darwin.Iain Sandoe1-6/+19
The @selector and @protocol keywords produce a var decl without useful location information. The current diagnostics plugin does not look at VAR_DECLs (and it would not be helpful if it did in this case, since a single decl is shared across all the users). However, ee can, in this case, make expressions that produce useful information. gcc/testsuite/ChangeLog: * objc.dg/plugin/diagnostic-test-expressions-1.m: Use assignment expressions for @selector and @protocol to obtain a useful diagnostic range.
2020-10-11testsuite, Objective-C : Fix call-super-2.m for newer NeXT headers.Iain Sandoe1-1/+5
We were using a callout to runtime.h which, eventually brings in the system runtime.h. One newer versions of the Darwin/NeXT headers this declares the objc_getClass() function as returning Class, rather than the internal representation of that. This breaks a fragile assumption in objc-act that the use of these internal functions can be deduced by looking at the function type. Ultimately, the fragility should be fixed - but this fixes up the test so that it only uses the compiler's forward declaration of the function. gcc/testsuite/ChangeLog: * objc.dg/call-super-2.m: Remove inclusion of runtime.h. Add a FIXME about the test portability.
2020-10-11testsuite, Objective-C : Update forward-1.m.Iain Sandoe1-4/+42
Newer versions of the runtime / NSObject don't respond to forward:. This uses the replacement. gcc/testsuite/ChangeLog: * objc.dg/torture/forward-1.m: Implement forwarding using the native NeXT (NSInvocation) method for Darwin.
2020-10-11testsuite, Objective-C : Add initialize method to root class.Iain Sandoe1-0/+6
Older versions of the runtime don't like it when the root class has a missing initialize method. They try to forward to an non- existent super class resulting in a crash. TODO: maybe we can diagnose this. gcc/testsuite/ChangeLog: * objc.dg/ivar-scope-4.m: Add inititialize method to the root class.
2020-10-11testsuite, Objective-C : Adjust gnu-api tests for Darwin.Iain Sandoe3-3/+12
The GNU v2 API matches the next v2 API in most respects. However, some of the tests depend on access to items that the later NeXT headers consider to be 'internal implementation details' and are not exposed (we arrange that with a DEFINE). One test is skipped here because, although it works internally, the number of objects returned is larger for the NeXT runtime in some cases (where the headers have been updated to bring in more of the system details). gcc/testsuite/ChangeLog: * objc.dg/gnu-api-2-class-meta.m: Add a flag to cause NeXT headers to expose prototypes for messaging. Mark the root class if the objc_root_class attribute is available. Use char ** as the second arg to main. * objc.dg/gnu-api-2-class.m: Use dispatch prototype. * objc.dg/gnu-api-2-objc.m: Skip on NeXT because of extra prototypes pulled in by headers.
2020-10-11testsuite, Objective-C : Update a test for newer OS versions.Iain Sandoe1-1/+1
Objective-C GC is not available for any recent Darwin version, nor is it available for the upcoming release of Darwin20. gcc/testsuite/ChangeLog: * objc.dg/objc-gc-4.m: Disable for macOS 10.15 and 11.x.
2020-10-11testsuite, Objective-C : Compatibility fixes.Iain Sandoe3-1/+6
Changes to deal with warnings and/or errors seen when compiling the tests with clang. gcc/testsuite/ChangeLog: * objc-obj-c++-shared/TestsuiteObject.h: If the compiler supports objc_root_object attributes, then mark the testsuite object accordingly. * objc-obj-c++-shared/TestsuiteObject.m: Avoid direct access to isa, which is an error for modern Objective-C. * objc/execute/class-tests-1.h: Declare a string function we use locally (avoid pulling in the whole of string.h).
2020-10-11Darwin, Objective-C : Adjust objective-c symbol linkage with version.Iain Sandoe2-7/+34
Earlier linkers cannot handle publicly-visible (or linker-visible) metadata, so we need to make the output of these conditional on version. gcc/ChangeLog: * config/darwin.c (darwin_globalize_label): Make a subset of metadate symbols global. (darwin_label_is_anonymous_local_objc_name): Make a subset of metadata symbols linker-visible. (darwin_override_options): Track more target OS versions, make the next_runtime version track this (unless it's set to 0 for GNU runtime). gcc/objc/ChangeLog: * objc-next-runtime-abi-02.c (FIXUP_NEEDED): Rename ... (USE_FIXUP_BEFORE): ... to this. (next_runtime_02_initialize): Likewise. (next_runtime_abi_02_get_arg_type_list_base): Likewise. (next_runtime_abi_02_build_objc_method_call): Likewise.
2020-10-11Darwin, Objective-C : Update meta-data linkage.Iain Sandoe1-1/+42
Newer versions of ld64 require that some meta-data symbols are global, and that a larger set are linker-visible. gcc/ChangeLog: * config/darwin.c (darwin_globalize_label): Add protocol meta-data labels to the set that are global. (darwin_label_is_anonymous_local_objc_name): Arrange for meta- data start labels to be linker-visible.
2020-10-11Objective-C, Darwin : Update message call codegen.Iain Sandoe1-46/+187
Platform compilers based on LLVM do not use the objc_sendMsg_fixit and friends for newer editions of the OS (runtimes for Arm64 do not even have those entries). We need to arrange to allow for this codegen on modern Darwin. The _fixit versions are needed for some OS versions (at least, up to 10.6) since the super2 call is not implemented there. It does not seem worth making the codegen more fine-grained at present. Other parts of the codegen need to be made conditional on either the runtime version or the linker capabilities. gcc/objc/ChangeLog: * objc-next-runtime-abi-02.c (TAG_MSGSENDSUPER): Revised spelling. (TAG_MSGSENDID): Likewise. (TAG_MSGSENDSUPER_STRET): Likewise. (TAG_MSGSENDID_STRET): Likewise. (FIXUP_NEEDED): Likewise. (TAG_FIXUP): New. (next_runtime_02_initialize): Adjust message calls to use fixup variants only when required. (next_runtime_abi_02_get_arg_type_list_base): Correct indent. (build_v2_build_objc_method_call): New. (build_v2_objc_method_fixup_call): Split out from ... (next_runtime_abi_02_build_objc_method_call): ... here. Arrange to adjust the call on the basis of the target runtime.
2020-10-11Objective-C, Darwin : Revise the runtime selection options.Iain Sandoe2-3/+3
For the NeXT/Darwin runtime as installed on macOS, we now need to deal with changes in ABI and APIs over the range of system versions supported. For the first phase of these changes, we will make the existing flag_next_runtime carry a value that represents the target OS version. It might be necessary to extend the value to represent the ABI ('fragile', V1/V2) or the linker capabilities (some changes to the linker-visible and public symbols are dependent on linker version). TODO: arrange to set the default NEXT_OBJC_RUNTIME on the basis of the configured target version. gcc/ChangeLog: * config/darwin.c (darwin_objc2_section): Allow for values > 1 to represent the next runtime. (darwin_objc1_section): Likewise. * config/darwin.h (NEXT_OBJC_RUNTIME): Set the default next runtime value to be 10.5.8.
2020-10-11Objective-C++, Darwin : Make metadata 'extern "C"'.Iain Sandoe1-3/+6
For current system toolchains NeXT runtime metadata symbols are not mangled for Objective-C++ (i.e. they are considered to be 'extern "C"'). This change becomes essential when we start to emit metadata refs as hidden and weak which is required by later editions of the runtime and linkers. gcc/objc/ChangeLog: * objc-runtime-shared-support.c (start_var_decl): Make the decl_assembler_name follow the metadata name for C++ on NeXT runtime platforms.
2020-10-11Ojective-C, Darwin : Adjust category superclass ref names (NFC).Iain Sandoe1-3/+3
Make the order of the class and superclass match the metadata order from clang. Makes it easier to compare produced meta- data between implementations. gcc/objc/ChangeLog: * objc-next-runtime-abi-02.c (next_runtime_abi_02_category_decl): Adjust category superclass name ordering.
2020-10-11Objective-C, Darwin : Update protocol metadata to current version.Iain Sandoe1-16/+87
Later versions of the NeXT runtime protocol metadata contain additional fields. This patch adds these fields and populates a new list of method types. gcc/objc/ChangeLog: * objc-next-runtime-abi-02.c (build_v2_super_template): Add new fields to the template. (build_v2_protocol_template): Build new field entries. (generate_v2_meth_descriptor_table): Adjust to allow recording all method types. (generate_v2_meth_type_list): New. (build_v2_protocol_initializer): Initialize the additional fields. (generate_v2_protocols): Record method types for all entries and generate the additional method type table.
2020-10-11Daily bump.GCC Administrator5-1/+140
2020-10-11Fix parameter map computation in ipa-modrefJan Hubicka1-1/+1
* ipa-modref.c (modref_transform): Fix parameter map computation.
2020-10-10[nvptx] Replace dots in function namesTom de Vries1-3/+54
When function splitting clones a function sinf in the host compiler, the clone is callled sinf.part.0. However, ptx does not allows dots in identifiers, so we run into: ... ptxas test.o, line 23; fatal : Parsing error near '.part': syntax error ptxas fatal : Ptx assembly aborted due to errors nvptx-as: ptxas returned 255 exit status ... Rename such functions by replacing the dots with dollar signs. Tested check-gcc on nvptx. Tested libgomp on x86_64-linux with nvptx accelerator. gcc/ChangeLog: 2020-10-10 Tom de Vries <tdevries@suse.de> PR target/97318 * config/nvptx/nvptx.c (nvptx_replace_dot): New function. (write_fn_proto, write_fn_proto_from_insn, nvptx_output_call_insn): Use nvptx_replace_dot.