aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2023-01-28Rename file rust-ast-full-test.cc to rust-ast.ccParthib2-1/+1
2023-01-21Revert 10-second timeout for each testvagrant1-4/+1
2023-01-14Merge #1736bors[bot]2-14/+16
1736: Change how CompileVarDecl outputs Bvariable's r=philberty a=powerboat9 This allows patterns to declare multiple/no variables Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com> --- Co-authored-by: Owen Avery <powerboat9.gamer@gmail.com>
2023-01-12Change how CompileVarDecl outputs Bvariable'sOwen Avery2-14/+16
This allows patterns to declare multiple/no variables Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2023-01-12Merge #1733bors[bot]2-0/+72
1733: diagnostics: Add underline for tokens in diagnostics. r=CohenArthur a=TuringKi Currently, the diagnostics only point to the corresponding token's start position by carets, and lack of underlines for full token. This commit add support for such underlines in diagnostics by encoding range information in location_t. the results like this: ``` ../gcc/testsuite/rust/compile/bad_as_bool_char.rs:5:14: error: invalid cast 'bool' to 'f32' [E0054] 5 | let fone = t as f32; // { dg-error "invalid cast" } | ^ ~~~ ../gcc/testsuite/rust/compile/bad_as_bool_char.rs:6:15: error: invalid cast 'bool' to 'f64' [E0054] 6 | let fzero = f as f64; // { dg-error "invalid cast" } | ^ ~~~ ../gcc/testsuite/rust/compile/bad_as_bool_char.rs:8:12: error: invalid cast 'u8' to 'bool' [E0054] 8 | let nb = 0u8 as bool; // { dg-error "invalid cast .u8. to .bool. \\\[E0054\\\]" } | ^~~ ~~~~ ../gcc/testsuite/rust/compile/bad_as_bool_char.rs:9:12: error: invalid cast 'bool' to 'char' [E0054] 9 | let nc = true as char; // { dg-error "invalid cast" } | ^~~~ ~~~~ ../gcc/testsuite/rust/compile/bad_as_bool_char.rs:13:12: error: invalid cast 'char' to 'f32' [E0054] 13 | let fa = a as f32; // { dg-error "invalid cast" } | ^ ~~~ ../gcc/testsuite/rust/compile/bad_as_bool_char.rs:14:12: error: invalid cast 'char' to 'bool' [E0054] 14 | let bb = b as bool; // { dg-error "invalid cast .char. to .bool. \\\[E0054\\\]" } | ^ ~~~~ ../gcc/testsuite/rust/compile/bad_as_bool_char.rs:17:12: error: invalid cast 'u32' to 'char' [E0054] 17 | let ab = t32 as char; // { dg-error "invalid cast" } | ^~~ ~~~~ ``` This commit is split from pr #1718. Signed-off-by: Xiao Ma <mxlol233@outlook.com> Co-authored-by: mxlol233 <mxlol233@outlook.com>
2023-01-12diagnostics: Add underline for tokens in diagnostics.mxlol2332-0/+72
Currently, the diagnostics only point to the corresponding token's start position by carets, and lack of underlines for full token. This commit add support for such underlines in diagnostics by encoding range information in location_t. Signed-off-by: Xiao Ma <mxlol233@outlook.com>
2023-01-11Add get_locus function for abstract class MetaItemInner.mxlol2333-0/+22
This commit adds virtual function get_locus to base class MetaItemInner, which is helpful when we need to print diagnostics on some sub-classes of MetaItemInner. Signed-off-by: Xiao Ma <mxlol233@outlook.com>
2023-01-11Merge #1730bors[bot]1-8/+6
1730: Improve type checking on let statements r=philberty a=powerboat9 Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com> --- Improves the typechecking of patterns in let statements. Co-authored-by: Owen Avery <powerboat9.gamer@gmail.com>
2023-01-10Reuse TypeCheckPattern on LetStmt'sOwen Avery1-8/+6
Update Rust type-checking to reuse TypeCheckPattern on HIR::LetStmt's. This will unify the paths and improve error handling. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2023-01-10Support associated type bound argumentsPhilip Herron9-38/+236
This patch adds support for the GenercArgsBinding type, where you can specify the associated types of a trait bound using `<Foo=i32>` style syntax. Note that the type-resolution relys on the i32 impl for Add as type resolution will resolve the `a+a` to the core::ops::Add method so code generation will require this to exist. I have ameded testsuite/rust/compile/bounds.rs as this code is wrongly creating an HIR::GenericArgs with a trait-object type and causing issues. the parsing is still correct but we dont have the mechanism to represent this in AST and HIR properly. I think we will need a new HIR::GenericArgs AssociatedTypeBindingBound or something similar. We are still lacking bounds checking during are type coercions and unifications so running this example using an f32 will wrongly pass type checking, this will need addressed next. Fixes #1720 Signed-off-by: Philip Herron <herron.philip@googlemail.com> gcc/rust/ChangeLog: * hir/tree/rust-hir-path.h: * typecheck/rust-hir-path-probe.h: * typecheck/rust-hir-trait-resolve.cc: * typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): * typecheck/rust-tyty-bounds.cc (TypeCheckBase::get_predicate_from_bound): (TypeBoundPredicate::TypeBoundPredicate): (TypeBoundPredicate::operator=): (TypeBoundPredicate::apply_generic_arguments): (TypeBoundPredicateItem::get_tyty_for_receiver): (TypeBoundPredicate::get_num_associated_bindings): (TypeBoundPredicate::lookup_associated_type): (TypeBoundPredicate::get_associated_type_items): * typecheck/rust-tyty.cc (SubstitutionRef::get_mappings_from_generic_args): (SubstitutionRef::infer_substitions): (SubstitutionRef::solve_missing_mappings_from_this): * typecheck/rust-tyty.h: gcc/testsuite/ChangeLog: * rust/compile/bounds.rs: change to use -fsyntax-only * rust/execute/torture/issue-1720.rs: New test.
2023-01-10Add name resolution to generic argument associated item bindingsPhilip Herron1-0/+5
When specifying generic arguments to Traits we can also specify the associated types using `<BindingName=i32>` syntax we need to add name resolution to the type argument here and rely on the type resolution pass to ensure the associated type exists and to setup the associated types accordingly. Addresses #1720 Signed-off-by: Philip Herron <herron.philip@googlemail.com> gcc/rust/ChangeLog: * resolve/rust-ast-resolve-type.cc (ResolveGenericArgs::go):
2023-01-09Merge #1708bors[bot]19-80/+301
1708: Parse declarative macro (decl_macro 2.0) r=CohenArthur a=tamaroning This PR is currentry wip. Opinions and advices are welcome! Co-authored-by: Raiki Tamura <tamaron1203@gmail.com>
2023-01-10Implement declarative macro 2.0 parserRaiki Tamura19-80/+301
Signed-off-by: Raiki Tamura <tamaron1203@gmail.com>
2023-01-05Merge #1707 #1717bors[bot]4-15/+22
1707: Fix frust very long typo r=CohenArthur a=CohenArthur Missing space character 1717: format: Fix git whitespace errors r=CohenArthur a=CohenArthur Addresses #1680 Fixes #1680 Probably does not need a changelog since I assume this commit will just be dropped when we merge Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
2023-01-05Merge #1711bors[bot]4-1/+44
1711: unsafe: check use of `target_feature` attribute r=CohenArthur a=snprajwal The `target_feature` attribute is for conditional compilation and may or may not compile on all platforms. Using it requires an unsafe function or block. Addresses #1411 Co-authored-by: Prajwal S N <prajwalnadig21@gmail.com>
2023-01-05Merge #1709bors[bot]2-2/+9
1709: Check const functions for mutable references r=CohenArthur a=dme2 Fixes #1552 Co-authored-by: Dave <dme2223@gmail.com>
2023-01-04format: Fix git whitespace errorsArthur Cohen3-14/+21
2023-01-04rust: add bound parsing in parse_generic_arg.mxlol2332-0/+27
Signed-off-by: Xiao Ma <mxlol233@outlook.com>
2023-01-02Check for mutable references in const functionsDave2-2/+9
Use StackedContext instead. Fix error string Signed-off-by: Dave Evans <dave@dmetwo.org> (Squashed commits) Check for mutable references in const functions using StackedContext Signed-off-by: Dave Evans <dave@dmetwo.org>
2023-01-02unsafe: check use of `target_feature` attributePrajwal S N4-1/+44
The `target_feature` attribute is for conditional compilation and may or may not compile on all platforms. Using it requires an unsafe function or block. Signed-off-by: Prajwal S N <prajwalnadig21@gmail.com>
2022-12-16fatal_error_flag: Fix typo in error messageArthur Cohen1-1/+1
2022-12-16add math intrinsicsRaiki Tamura2-4/+291
2022-12-15Merge #1700bors[bot]2536-29233/+118394
1700: Merge upstream, last commit before GCC/Rust upstreaming r=CohenArthur a=tschwinge Co-authored-by: Eric Botcazou <ebotcazou@adacore.com> Co-authored-by: Richard Biener <rguenther@suse.de> Co-authored-by: Patrick Palka <ppalka@redhat.com> Co-authored-by: Jonathan Wakely <jwakely@redhat.com> Co-authored-by: Harald Anlauf <anlauf@gmx.de> Co-authored-by: Ian Lance Taylor <iant@golang.org> Co-authored-by: GCC Administrator <gccadmin@gcc.gnu.org> Co-authored-by: David Malcolm <dmalcolm@redhat.com> Co-authored-by: Lulu Cheng <chenglulu@loongson.cn> Co-authored-by: Alexandre Oliva <oliva@adacore.com> Co-authored-by: Paul-Antoine Arras <pa@codesourcery.com> Co-authored-by: Tobias Burnus <tobias@codesourcery.com> Co-authored-by: Jakub Jelinek <jakub@redhat.com> Co-authored-by: Martin Liska <mliska@suse.cz> Co-authored-by: Iskander Shakirzyanov <iskander@ispras.ru> Co-authored-by: Iain Buclaw <ibuclaw@gdcproject.org> Co-authored-by: Kyrylo Tkachov <kyrylo.tkachov@arm.com> Co-authored-by: John David Anglin <danglin@gcc.gnu.org>
2022-12-14rust: fix link serialization [PR108113]Marc Poulhiès1-1/+5
The Make-lang.in was missing the link serialization support. PR rust/108113 gcc/rust * Make-lang.in (rust.serial): New variable. (rust1$(exeext)): Depend on $(rust.prev). Call LINK_PROGRESS. Signed-off-by: Marc Poulhiès <dkm@kataplop.net>
2022-12-14Adjust for "Make Warray-bounds alias to Warray-bounds= [PR107787]"Thomas Schwinge1-1/+1
See GCC upstream commit 7c01d029fca669263b9c2dcb8837c42f7ae3a77f "Make Warray-bounds alias to Warray-bounds= [PR107787]".
2022-12-14Merge commit '3d6dbb6fc5d1d14bf36a879b6f4a00ae91090a63' into HEADThomas Schwinge1-0/+3
2022-12-14c++: Quash -Wdangling-reference for member operator* [PR107488]Marek Polacek2-1/+33
-Wdangling-reference complains here: std::vector<int> v = ...; std::vector<int>::const_iterator it = v.begin(); while (it != v.end()) { const int &r = *it++; // warning } because it sees a call to __gnu_cxx::__normal_iterator<const int*, std::vector<int> >::operator* which returns a reference and its argument is a TARGET_EXPR representing the result of __gnu_cxx::__normal_iterator<const int*, std::vector<int> >::operator++ But 'r' above refers to one of the int elements of the vector 'v', not to a temporary object. Therefore the warning is a false positive. I suppose code like the above is relatively common (the warning broke cppunit-1.15.1 and a few other projects), so presumably it makes sense to suppress the warning when it comes to member operator*. In this case it's defined as reference operator*() const _GLIBCXX_NOEXCEPT { return *_M_current; } and I'm guessing a lot of member operator* are like that, at least when it comes to iterators. I've looked at _Fwd_list_iterator, _Fwd_list_const_iterator, __shared_ptr_access, _Deque_iterator, istream_iterator, etc, and they're all like that, so adding #pragmas would be quite tedious. :/ PR c++/107488 gcc/cp/ChangeLog: * call.cc (do_warn_dangling_reference): Quash -Wdangling-reference for member operator*. gcc/testsuite/ChangeLog: * g++.dg/warn/Wdangling-reference5.C: New test. (cherry picked from commit 32a06ce38a38bf37db468f0e6c83520fcc221534)
2022-12-14'rust-warn += -Wno-unused-parameter'Thomas Schwinge1-0/+3
(cherry picked from #1670 commit 7ceb5e29c80c1fc91e208ae6955a22b0b73a2e6b)
2022-12-13Merge commit 'b4fddbe9592e9feb37ce567d90af822b75995531' into HEADThomas Schwinge2536-29232/+118425
2022-12-13tree-optimization/108076 - if-conversion and forced labelsRichard Biener2-2/+29
When doing if-conversion we simply throw away labels without checking whether they are possibly targets of non-local gotos or have their address taken. The following rectifies this and refuses to if-convert such loops. PR tree-optimization/108076 * tree-if-conv.cc (if_convertible_loop_p_1): Reject blocks with non-local or forced labels that we later remove labels from. * gcc.dg/torture/pr108076.c: New testcase.
2022-12-13rs6000: enable cbranchcc4Haochen Gui3-0/+36
This patch enables "have_cbranchcc4" on rs6000 by defining a "cbranchcc4" expander. "have_cbrnachcc4" is a flag in ifcvt.cc to indicate if branching by CC bits is valid or not. With this flag enabled, some branches can be optimized to conditional moves. 2022-12-07 Haochen Gui <guihaoc@linux.ibm.com> gcc/ * config/rs6000/rs6000.md (cbranchcc4): New expander. gcc/testsuite * gcc.target/powerpc/cbranchcc4-1.c: New. * gcc.target/powerpc/cbranchcc4-2.c: New.
2022-12-13optabs: make prepare_cmp_insn goto fail when cbranchcc4 checks unsatisfiedHaochen Gui1-4/+8
prepare_cmp_insn is a help function to generate comparison rtx. It should not assume that cbranchcc4 exists and all sub-CC modes are supported on a target. When the check fails, it could go to fail and return a NULL rtx as its callers check the return value for CCmode. The test case (gcc.target/powerpc/cbranchcc4-1.c) which covers failure path will be committed with an rs6000 specific patch. 2022-12-05 Haochen Gui <guihaoc@linux.ibm.com> gcc/ * optabs.cc (prepare_cmp_insn): Return a NULL rtx other than assertion failure when targets don't have cbranch optab or predicate check fails.
2022-12-13Daily bump.GCC Administrator6-1/+161
2022-12-12Revert "c++: build initializer_list<string> in a loop [PR105838]"Jason Merrill5-48/+8
This patch broke a couple of different patterns; reverting while I work on a fix. PR c++/108701 This reverts commit bd0485f20f4794f9787237706a6308473a8e9415.
2022-12-12libgo: bump major versionIan Lance Taylor1-1/+1
PR go/108057 The current version is the same as for the previous GCC release, but there have been minor changes like new type descriptors that make it impossible to run Go programs built with the previous GCC release with the current libgo. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/456976
2022-12-12Fortran: improve checking of assumed-size array spec [PR102180]Harald Anlauf2-3/+35
gcc/fortran/ChangeLog: PR fortran/102180 * array.cc (match_array_element_spec): Add check for bad assumed-implied-spec. (gfc_match_array_spec): Reorder logic so that the first bad array element spec may trigger an error. gcc/testsuite/ChangeLog: PR fortran/102180 * gfortran.dg/pr102180.f90: New test.
2022-12-12d: Fix undefined reference to nested lambda in template (PR108055)Iain Buclaw5-5/+84
Sometimes, nested lambdas of templated functions get no code generation due to them being marked as instantianted outside of all modules being compiled in the current compilation unit. This despite enclosing template instances being marked as instantiated inside the current compilation unit. To fix, all enclosing templates are now checked in `function_defined_in_root_p'. Because of this change, `function_needs_inline_definition_p' has also been fixed up to only check whether the regular function definition itself is to be emitted in the current compilation unit. PR d/108055 gcc/d/ChangeLog: * decl.cc (function_defined_in_root_p): Check all enclosing template instances for definition in a root module. (function_needs_inline_definition_p): Replace call to function_defined_in_root_p with test for outer module `isRoot'. gcc/testsuite/ChangeLog: * gdc.dg/torture/imports/pr108055conv.d: New. * gdc.dg/torture/imports/pr108055spec.d: New. * gdc.dg/torture/imports/pr108055write.d: New. * gdc.dg/torture/pr108055.d: New test.
2022-12-12AArch64: Enable TARGET_CONST_ANCHORWilco Dijkstra3-1/+70
Enable TARGET_CONST_ANCHOR to allow complex constants to be created via immediate add/sub. Use a 24-bit range as that enables a 3 or 4-instruction immediate to be replaced by 2 add/sub instructions. Fix the costing of add/sub to support 24-bit and 12-bit shifted immediates. The generated code for the testcase is now the same or better than LLVM. It also results in a small codesize reduction on SPEC. gcc/ * config/aarch64/aarch64.cc (aarch64_rtx_costs): Add correct costs for 24-bit and 12-bit shifted immediate add/sub. (TARGET_CONST_ANCHOR): Define. * config/aarch64/predicates.md (aarch64_pluslong_immediate): Fix range check. gcc/testsuite/ * gcc.target/aarch64/movk_3.c: New test.
2022-12-12middle-end: simplify complex if expressions where comparisons are inverse of ↵Tamar Christina3-0/+198
one another. This optimizes the following sequence ((a < b) & c) | ((a >= b) & d) into (a < b ? c : d) & 1 for scalar and on vector we can omit the & 1. Also recognizes (-(a < b) & c) | (-(a >= b) & d) into a < b ? c : d This changes the code generation from zoo2: cmp w0, w1 cset w0, lt cset w1, ge and w0, w0, w2 and w1, w1, w3 orr w0, w0, w1 ret into cmp w0, w1 csel w0, w2, w3, lt and w0, w0, 1 ret and significantly reduces the number of selects we have to do in the vector code. gcc/ChangeLog: * match.pd: Add new rule. gcc/testsuite/ChangeLog: * gcc.target/aarch64/if-compare_1.c: New test. * gcc.target/aarch64/if-compare_2.c: New test.
2022-12-12AArch64: Fix vector re-interpretation between partial SIMD modesTamar Christina1-4/+6
While writing a patch series I started getting incorrect codegen out from VEC_PERM on partial struct types. It turns out that this was happening because the TARGET_CAN_CHANGE_MODE_CLASS implementation has a slight bug in it. The hook only checked for SIMD to Partial but never Partial to SIMD. This resulted in incorrect subregs to be generated from the fallback code in VEC_PERM_EXPR expansions. I have unfortunately not been able to trigger it using a standalone testcase as the mid-end optimizes away the permute every time I try to describe a permute that would result in the bug. The patch now rejects any conversion of partial SIMD struct types, unless they are both partial structures of the same number of registers or one is a SIMD type who's size is less than 8 bytes. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_can_change_mode_class): Restrict conversions between partial struct types properly.
2022-12-12AArch64: Support new tbranch optab.Tamar Christina3-8/+122
This implements the new tbranch optab for AArch64. we cannot emit one big RTL for the final instruction immediately. The reason that all comparisons in the AArch64 backend expand to separate CC compares, and separate testing of the operands is for ifcvt. The separate CC compare is needed so ifcvt can produce csel, cset etc from the compares. Unlike say combine, ifcvt can not do recog on a parallel with a clobber. Should we emit the instruction directly then ifcvt will not be able to say, make a csel, because we have no patterns which handle zero_extract and compare. (unlike combine ifcvt cannot transform the extract into an AND). While you could provide various patterns for this (and I did try) you end up with broken patterns because you can't add the clobber to the CC register. If you do, ifcvt recog fails. i.e. int f1 (int x) { if (x & 1) return 1; return x; } We lose csel here. Secondly the reason the compare with an explicit CC mode is needed is so that ifcvt can transform the operation into a version that doesn't require the flags to be set. But it only does so if it know the explicit usage of the CC reg. For instance int foo (int a, int b) { return ((a & (1 << 25)) ? 5 : 4); } Doesn't require a comparison, the optimal form is: foo(int, int): ubfx x0, x0, 25, 1 add w0, w0, 4 ret and no compare is actually needed. If you represent the instruction using an ANDS instead of a zero_extract then you get close, but you end up with an ands followed by an add, which is a slower operation. gcc/ChangeLog: * config/aarch64/aarch64.md (*tb<optab><mode>1): Rename to... (*tb<optab><ALLI:mode><GPI:mode>1): ... this. (tbranch_<code><mode>4): New. * config/aarch64/iterators.md(ZEROM, zerom): New. gcc/testsuite/ChangeLog: * gcc.target/aarch64/tbz_1.c: New test.
2022-12-12middle-end: Add new tbranch optab to add support for bit-test-and-branch ↵Tamar Christina7-25/+159
operations This adds a new test-and-branch optab that can be used to do a conditional test of a bit and branch. This is similar to the cbranch optab but instead can test any arbitrary bit inside the register. This patch recognizes boolean comparisons and single bit mask tests. gcc/ChangeLog: * dojump.cc (do_jump): Pass along value. (do_jump_by_parts_greater_rtx): Likewise. (do_jump_by_parts_zero_rtx): Likewise. (do_jump_by_parts_equality_rtx): Likewise. (do_compare_rtx_and_jump): Likewise. (do_compare_and_jump): Likewise. * dojump.h (do_compare_rtx_and_jump): New. * optabs.cc (emit_cmp_and_jump_insn_1): Refactor to take optab to check. (validate_test_and_branch): New. (emit_cmp_and_jump_insns): Optiobally take a value, and when value is supplied then check if it's suitable for tbranch. * optabs.def (tbranch_eq$a4, tbranch_ne$a4): New. * doc/md.texi (tbranch_@var{op}@var{mode}4): Document it. * optabs.h (emit_cmp_and_jump_insns): New. * tree.h (tree_zero_one_valued_p): New.
2022-12-12aarch64: Make existing V2HF be usable.Tamar Christina5-45/+90
The backend has an existing V2HFmode that is used by pairwise operations. This mode was however never made fully functional. Amongst other things it was never declared as a vector type which made it unusable from the mid-end. It's also lacking an implementation for load/stores so reload ICEs if this mode is every used. This finishes the implementation by providing the above. Note that I have created a new iterator VHSDF_P instead of extending VHSDF because the previous iterator is used in far more things than just load/stores. It's also used for instance in intrinsics and extending this would force me to provide support for mangling the type while we never expose it through intrinsics. gcc/ChangeLog: * config/aarch64/aarch64-simd.md (*aarch64_simd_movv2hf): New. (mov<mode>, movmisalign<mode>, aarch64_dup_lane<mode>, aarch64_store_lane0<mode>, aarch64_simd_vec_set<mode>, @aarch64_simd_vec_copy_lane<mode>, vec_set<mode>, reduc_<optab>_scal_<mode>, reduc_<fmaxmin>_scal_<mode>, aarch64_reduc_<optab>_internal<mode>, aarch64_get_lane<mode>, vec_init<mode><Vel>, vec_extract<mode><Vel>): Support V2HF. (aarch64_simd_dupv2hf): New. * config/aarch64/aarch64.cc (aarch64_classify_vector_mode): Add E_V2HFmode. * config/aarch64/iterators.md (VHSDF_P): New. (V2F, VMOVE, nunits, Vtype, Vmtype, Vetype, stype, VEL, Vel, q, vp): Add V2HF. * config/arm/types.md (neon_fp_reduc_add_h): New. gcc/testsuite/ChangeLog: * gcc.target/aarch64/sve/slp_1.c: Update testcase.
2022-12-12aarch64: Add __ARM_FEATURE_PAUTH and __ARM_FEATURE_BTI ACLE definesKyrylo Tkachov4-0/+27
Recent ACLE additions specified the __ARM_FEATURE_PAUTH and __ARM_FEATURE_BTI macros [1] that the compiler should define when the pointer authentication and BTI instructions are available (and don't act as NOPs). We've received requests to enable them in GCC for aarch64, similar to clang [2]. It's a fairly simple patch and should be non-intrusive at this stage. Pointer authentication has its own "pauth" feature flag, whereas BTI depends on an architecture level of Armv8.5-a or later. Bootstrapped and tested on aarch64-none-linux-gnu. [1] https://github.com/ARM-software/acle/blob/main/main/acle.md#pointer-authentication [2] https://reviews.llvm.org/rG7d40baa82b1f272f68de63f3c4f68d970bdcd6ed gcc/ChangeLog: * config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins): Define __ARM_FEATURE_PAUTH and __ARM_FEATURE_BTI when appropriate. * config/aarch64/aarch64.h (TARGET_BTI): Define. gcc/testsuite/ChangeLog: * gcc.target/aarch64/acle/bti_def.c: New test. * gcc.target/aarch64/acle/pauth_def.c: New test.
2022-12-12Revert parts of ADDR_EXPR/CONSTRUCTOR treatment change in match.pdRichard Biener3-23/+28
This reverts the part that substitutes from the definition of an SSA name to the capture, thus ADDR_EXPR@0 eventually yielding &y_1->a[i_2] instead of _3. That's because I didn't think of how to deal with substituting @0 in the result pattern. So the following re-instantiates the SSA def CONSTRUCTOR handling and in the ADDR_EXPR helpers used by match.pd handles SSA names defined to ADDR_EXPRs transparently. * genmatch.cc (dt_simplify::gen): Revert last change. * match.pd: Revert simplification of CONSTUCTOR leaf handling. (&x cmp SSA_NAME): Handle ADDR_EXPR in SSA defs. * fold-const.cc (split_address_to_core_and_offset): Handle ADDR_EXPRs in SSA defs. (address_compare): Likewise.
2022-12-12tree-optimization/89317 - another pattern for &p->x != p + 4Richard Biener3-11/+19
As seen in the original testcase for PR89317 we are missing comparison simplification patterns for &p->x != p + 4. Fixed by making an existing one apply. To make the pattern apply during CCP we need to simplify ccp_fold to not use GENERIC folding of conditions but also use GIMPLE folding. PR tree-optimization/89317 * tree-ssa-ccp.cc (ccp_fold): Handle GIMPLE_COND via gimple_fold_stmt_to_constant_1. * match.pd (&a != &a + c): Apply to pointer_plus with non-ADDR_EXPR base as well. * gcc.dg/tree-ssa/pr89317.c: Amend.
2022-12-12Daily bump.GCC Administrator5-1/+81
2022-12-11Fortran: fix ICE on bad use of statement function [PR107995]Steve Kargl2-0/+16
gcc/fortran/ChangeLog: PR fortran/107995 * interface.cc (gfc_check_dummy_characteristics): Reject statement function dummy arguments. gcc/testsuite/ChangeLog: PR fortran/107995 * gfortran.dg/pr107995.f90: New test.
2022-12-11d: Fix internal compiler error: in visit, at d/imports.cc:72 (PR108050)Iain Buclaw6-2/+34
The visitor for lowering IMPORTED_DECLs did not have an override for dealing with importing OverloadSet symbols. This has now been implemented in the code generator. PR d/108050 gcc/d/ChangeLog: * decl.cc (DeclVisitor::visit (Import *)): Handle build_import_decl returning a TREE_LIST. * imports.cc (ImportVisitor::visit (OverloadSet *)): New override. gcc/testsuite/ChangeLog: * gdc.dg/imports/pr108050/mod1.d: New. * gdc.dg/imports/pr108050/mod2.d: New. * gdc.dg/imports/pr108050/package.d: New. * gdc.dg/pr108050.d: New test.
2022-12-11d: Merge upstream dmd, druntime c8ae4adb2e, phobos 792c8b7c1.Iain Buclaw105-1230/+1903
D front-end changes: - Import dmd v2.101.0. - Deprecate the ability to call `__traits(getAttributes)' on overload sets. - Deprecate non-empty `for' statement increment clause with no effect. - Array literals assigned to `scope' array variables can now be allocated on the stack. D runtime changes: - Import druntime v2.101.0. Phobos changes: - Import phobos v2.101.0. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd c8ae4adb2e. * typeinfo.cc (check_typeinfo_type): Update for new front-end interface. (TypeInfoVisitor::visit (TypeInfoStructDeclaration *)): Remove warning that toHash() must be declared 'nothrow @safe`. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime c8ae4adb2e. * src/MERGE: Merge upstream phobos 792c8b7c1.