Skip to content

Releases/gcc 12 #65

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2,949 commits into
base: master
Choose a base branch
from
Open

Releases/gcc 12 #65

wants to merge 2,949 commits into from

Conversation

jacopobrusini
Copy link

Support for Apple Silicon!!!

@jwakely
Copy link
Contributor

jwakely commented Feb 21, 2024

This is an unofficial mirror that has nothing to do with the GCC project, so submitting pull requests here is a waste of time.

Also, I have no idea what this pull request is trying to do but it would never be accepted even if it was submitted to the right place.

NinaRanns pushed a commit to NinaRanns/gcc that referenced this pull request Jan 28, 2025
…on-r15-7214-g0710024b5bd861

Contracts nonattr rebase on r15 7214 g0710024b5bd861
jwakely and others added 27 commits April 2, 2025 10:24
The call to __valarray_copy constructs an _Array object to refer to
this->_M_data but that means that accesses to this->_M_data are through
a restrict-qualified pointer. This leads to undefined behaviour when
copying from an _Expr object that actually aliases this->_M_data.

Replace the call to __valarray_copy with a plain loop. I think this
removes the only use of that overload of __valarray_copy, so it could
probably be removed. I haven't done that here.

libstdc++-v3/ChangeLog:

	PR libstdc++/99117
	* include/std/valarray (valarray::operator=(const _Expr&)):
	Use loop to copy instead of __valarray_copy with _Array.
	* testsuite/26_numerics/valarray/99117.cc: New test.

(cherry picked from commit b58f0e5)
The compiler doesn't know about the invariant that the _S_empty_rep()
object is immutable and so _M_length and _M_refcount are always zero.
This means that we get warnings about writing possibly-non-zero length
strings into buffers that can't hold them. If we teach the compiler that
the empty rep is always zero length, it knows it can be copied into any
buffer.

For Stage 1 we might want to also consider adding this to capacity():

	if (_S_empty_rep()._M_capacity != 0)
	  __builtin_unreachable();

And this to _Rep::_M_is_leaked() and _Rep::_M_is_shared():

	  if (_S_empty_rep()._M_refcount != 0)
	    __builtin_unreachable();

libstdc++-v3/ChangeLog:

	PR tree-optimization/107087
	* include/bits/cow_string.h (basic_string::size()): Add
	optimizer hint that _S_empty_rep()._M_length is always zero.
	(basic_string::length()): Call size().

(cherry picked from commit 4969dcd)
The implementation solves the eigensystem for a NxN complex Hermitian matrix
by first solving it for a 2Nx2N real symmetric matrix and then interpreting
the 2Nx1 real vectors as Nx1 complex ones, but the last step does not work.

The patch fixes the last step and also performs a small cleanup throughout
the implementation, mostly in the commentary and without functional changes.

gcc/ada/
	* libgnat/a-ngcoar.adb (Eigensystem): Adjust notation and fix the
	layout of the real symmetric matrix in the main comment.  Adjust
	the layout of the associated code accordingly and correctly turn
	the 2Nx1 real vectors into Nx1 complex ones.
	(Eigenvalues): Minor similar tweaks.
	* libgnat/a-ngrear.adb (Jacobi): Minor tweaks in the main comment.
	Adjust notation and corresponding parameter names of functions.
	Fix call to Unit_Matrix routine.  Adjust the comment describing
	the various kinds of iterations to match the implementation.
When we sink common stores in cselim or the sink pass we have to
make sure to not introduce overlapping lifetimes for abnormals
used in the ref.  The easiest is to avoid sinking stmts which
reference abnormals at all which is what the following does.

	PR tree-optimization/118717
	* tree-ssa-phiopt.cc (cond_if_else_store_replacement_1):
	Do not common stores referencing abnormal SSA names.
	* tree-ssa-sink.cc (sink_common_stores_to_bb): Likewise.

	* gcc.dg/torture/pr118717.c: New testcase.

(cherry picked from commit fbcbbfe)
…bject_size

VN again is the culprit for exploiting address equivalences before
__builtin_object_size got the chance to do its job.  This time
it isn't about union members but adjacent structure fields where
an address to one after the last element of an array field can
spill over to the next field.

The following protects all out-of-bound accesses on the upper bound
side (singling out TYPE_MAX_VALUE + 1 is more expensive).  It
ignores other out-of-bound addresses that would invoke UB.

Zero-sized arrays are a bit awkward because the C++ represents them
with a -1U upper bound.

There's a similar issue for zero-sized components whose address can
be the same as the adjacent field in C.

	PR tree-optimization/117912
	* tree-ssa-sccvn.cc (copy_reference_ops_from_ref): For addresses
	of zero-sized components do not set ->off if the object size pass
	didn't run.
	For OOB ARRAY_REF accesses in address expressions avoid setting
	->off if the object size pass didn't run.
	(valueize_refs_1): Likewise.

	* c-c++-common/torture/pr117912-1.c: New testcase.
	* c-c++-common/torture/pr117912-2.c: Likewise.
	* c-c++-common/torture/pr117912-3.c: Likewise.

(cherry picked from commit 233972a)
When trying to change a IV from IV0 < IV1 to IV0' != IV1' we apply
fancy adjustments to the may_be_zero condition we compute rather
than using the obvious IV0->base >= IV1->base expression (to be
able to use > instead of >=?).  This doesn't seem to go well.

	PR tree-optimization/117574
	* tree-ssa-loop-niter.cc (number_of_iterations_lt_to_ne):
	Use the obvious may_be_zero condition.

	* gcc.dg/torture/pr117574-1.c: New testcase.

(cherry picked from commit ff5a14a)
Here's another fix for a missing check that an IV value fits in a
HIW.  It's originally from Stefan.

	PR tree-optimization/117119
	* tree-data-ref.cc (initialize_matrix_A): Check whether
	an INTEGER_CST fits in HWI, otherwise return chrec_dont_know.

	* gcc.dg/torture/pr117119.c: New testcase.

Co-Authored-By: Stefan Schulze Frielinghaus <stefansf@linux.ibm.com>
(cherry picked from commit d3904a3)
Path isolation computes post-dominators on demand but can end up
splitting blocks after that, wrecking it.  We can delay splitting
of blocks until we no longer need the post-dom info which is what
the following patch does to solve the issue.

	PR tree-optimization/116850
	* gimple-ssa-isolate-paths.cc (bb_split_points): New global.
	(insert_trap): Delay BB splitting if post-doms are computed.
	(find_explicit_erroneous_behavior): Process delayed BB
	splitting after releasing post dominators.
	(gimple_ssa_isolate_erroneous_paths): Do not free post-dom
	info here.

	* gcc.dg/pr116850.c: New testcase.

(cherry picked from commit 6416365)
The following avoids building an array type with function or method
element type during diagnosing an array bound violation as this
will result in an error, rejecting a program with a not too useful
error message.  Instead build such array type manually.

	PR tree-optimization/116481
	* pointer-query.cc (build_printable_array_type):
	Build an array types with function or method element type
	manually to avoid bogus diagnostic.

	* gcc.dg/pr116481.c: New testcase.

(cherry picked from commit 1506027)
fold_truth_andor_1 via make_bit_field_ref builds an address of
a CALL_EXPR which isn't valid GENERIC and later causes an ICE.
The following simply avoids the folding for f ().a != 1 || f ().b != 2
as it is a premature optimization anyway.  The alternative would
have been to build a TARGET_EXPR around the call.  To get this far
f () has to be const as otherwise the two calls are not semantically
equivalent for the optimization.

	PR middle-end/115641
	* fold-const.cc (decode_field_reference): If the inner
	reference isn't something we can take the address of, fail.

	* gcc.dg/torture/pr115641.c: New testcase.

(cherry picked from commit 3670c70)
The following makes sure to strip type conversions added by
build_fold_addr_expr before placing the result in a call argument.

	PR tree-optimization/114246
	* tree-ssa-dse.cc (increment_start_addr): Strip useless
	type conversions from the adjusted address.

	* gcc.dg/torture/pr114246.c: New testcase.

(cherry picked from commit 0249744)
…tion

  In this PR case LRA rematerialized a value from inheritance insn
instead of output reload one.  This resulted in considering a
rematerilization candidate value available when it was actually
not.  As a consequence an insn after rematerliazation used the
unexpected value and this use resulted in fp exception.  The patch
fixes this bug.

gcc/ChangeLog:

	PR rtl-optimization/115568
	* lra-remat.cc (create_cands): Check that output reload insn is
	adjacent to given insn.  Update a comment.

gcc/testsuite/ChangeLog:

	PR rtl-optimization/115568
	* gcc.target/i386/pr115568.c: New.

(cherry picked from commit 9854544)
The previous change to fix LRA rematerialization broke compare-debug
for i586 bootstrap.  Fixed by using prev_nonnote_nondebug_insn
instead of prev_nonnote_insn.

	PR rtl-optimization/119689
	PR rtl-optimization/115568
	* lra-remat.cc (create_cands): Use prev_nonnote_nondebug_insn
	to check whether insn2 is directly before insn.

	* g++.target/i386/pr119689.C: New testcase.

(cherry picked from commit 088887d)
The gcc4-compatible copy-on-write std::string does not conform to the
C++11 requirements on data race avoidance in standard containers.
Specifically, calling non-const member functions such as begin() and
data() needs to do the "copy on write" operation and so is most
definitely a modification of the object. As such, those non-const
members must not be called concurrently with any other uses of the
string object.

libstdc++-v3/ChangeLog:

	PR libstdc++/21334
	* doc/xml/manual/using.xml: Document that container data race
	avoidance rules do not apply to COW std::string.
	* doc/html/*: Regenerate.

(cherry picked from commit dd35f66)
jianghc724 and others added 30 commits June 25, 2025 11:04
CLDEMOTE is not enabled on clients according to SDM. SDM only mentioned
it will be enabled on Xeon and Atom servers, not clients. Remove them
since Alder Lake (where it is introduced).

gcc/ChangeLog:

	* config/i386/i386.h (PTA_ALDERLAKE): Use PTA_GOLDMONT_PLUS
	as base to remove PTA_CLDEMOTE.
	* doc/invoke.texi: Update texi file.
When the C++ frontend clones a CTOR we do not copy ASM_EXPR constraints
fully as walk_tree does not recurse to TREE_PURPOSE of TREE_LIST nodes.
At this point doing that seems too dangerous so the following instead
avoids gimplification of ASM_EXPRs to clobber the shared constraints
and unshares it there, like it also unshares TREE_VALUE when it
re-writes a "+" output constraint to separate "=" output and matching
input constraint.

	PR middle-end/66279
	* gimplify.cc (gimplify_asm_expr): Copy TREE_PURPOSE before
	rewriting it for "+" processing.

	* g++.dg/pr66279.C: New testcase.

(cherry picked from commit 95f5d6c)
Add missing check to stmt_kills_ref_p for case that function
is terminated by EH before call return value kills the ref. In the PR
I tried to construct testcase but I don't know how to do that until I
annotate EH code with fnspec attributes which I will do in separate patch
and add a testcase.

	PR ipa/106057
	* tree-ssa-alias.cc (stmt_kills_ref_p): Check for external throw.

(cherry picked from commit 7fd3478)
gcc/ChangeLog:

	PR ipa/116055
	* ipa-modref.cc (analyze_function): Do not ICE when flags regress.

(cherry picked from commit 98baaa1)
The following testcase is miscompiled since the introduction of UBSan,
cp_build_array_ref COND_EXPR handling replaces
(cond ? a : b)[idx] with cond ? a[idx] : b[idx], but if there are
SAVE_EXPRs inside of idx, they will be evaluated just in one of the
branches and the other uses uninitialized temporaries.

Fixed by keeping doing what it did if idx doesn't have side effects
and is invariant.  Otherwise if op1/op2 are ARRAY_TYPE arrays with
invariant addresses or pointers with invariant values, use
SAVE_EXPR <op0>, SAVE_EXPR <idx>, SAVE_EXPR <op0> as a new condition
and SAVE_EXPR <idx> instead of idx for the recursive calls.
Otherwise punt, but if op1/op2 are ARRAY_TYPE, furthermore call
cp_default_conversion on array, so that COND_EXPR with ARRAY_TYPE doesn't
survive in the IL until expansion.

2025-07-01  Jakub Jelinek  <jakub@redhat.com>

	PR c++/120471
gcc/cp/
	* typeck.cc (cp_build_array_ref) <case COND_EXPR>: If idx is not
	INTEGER_CST, don't optimize the case (but cp_default_conversion on
	array early if it has ARRAY_TYPE) or use
	SAVE_EXPR <op0>, SAVE_EXPR <idx>, SAVE_EXPR <op0> as new op0 depending
	on flag_strong_eval_order and whether op1 and op2 are arrays with
	invariant address or tree invariant pointers.  Formatting fixes.
gcc/testsuite/
	* g++.dg/ubsan/pr120471.C: New test.
	* g++.dg/parse/pr120471.C: New test.

(cherry picked from commit 988e87b)
No idea how this slipped in, I'm terribly sorry.
Strangely nothing in the testsuite has caught this, so I've added
a new test for that.

2025-07-03  Jakub Jelinek  <jakub@redhat.com>

	PR c++/120940
	* typeck.cc (cp_build_array_ref): Fix a pasto.

	* g++.dg/parse/pr120940.C: New test.
	* g++.dg/warn/Wduplicated-branches9.C: New test.

(cherry picked from commit dc90649)
…16809].

From macOSX15 SDK,  the unwinder no longer exports some of the symbols used
in that library which (a) causes bootstrap fail and (b) means that the
legacy library is no longer useful.

No open branch of GCC emits references to this library - and any already
-built code that depends on the symbols would need rework anyway.

We have been asked to extend this back to the earliest OS vesion supported
by the SDK (10.12).

	PR target/116809

libgcc/ChangeLog:

	* config.host: Build legacy libgcc_s.1 on hosts before macOS 10.12.
	* config/i386/t-darwin: Remove reference to legacy libgcc_s.1
	* config/rs6000/t-darwin: Likewise.
	* config/t-darwin-libgccs1: New file.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
(cherry picked from commit d9cafa0)
fixincludes/ChangeLog:

	* fixincl.x: Regenerate.
	* inclhack.def (apple_local_stdio_fn_deprecation): Also apply to
	_stdio.h.

(cherry picked from commit 1dc1431)
For binaries to be notarised, the SDK version must be available.
Since we do not, at present, parse this information we have been
passing "0.0" to ld64.  This now results in a warning and a fail
to notarise.  As a quick-fix, we can fall back to letting ld64
figure out the SDK version (which it does for -macos_version_min).

TODO: Parse the SDKSetting.plist at some point.

cherry-picked from 952e172 and fc728cf

	PR target/119172

gcc/ChangeLog:

	* config.in: Regenerate.
	* config/darwin.h (DARWIN_PLATFORM_ID): Add the option to
	use -macos_version_min where available.
	* configure: Regenerate.
	* configure.ac: Check for ld64 support of -macos_version_min.

Co-authored-by: Andrew Pinski <quic_apinski@quicinc.com>

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
The latest editions of XCode have altered the identify reported by 'ld -v'
(again).  This means that GCC configure no longer detects the version.

Fixed by adding the new name to the set checked.

gcc/ChangeLog:

	* configure: Regenerate.
	* configure.ac: Recognise PROJECT:ld-mmmm.nn.aa as an identifier
	for Darwin's static linker.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
(cherry picked from commit 7f56a8e)
The addition of the multiply_defined suppress flag has been handled for some
considerable time now in the Darwin specs; remove it from the testsuite libs.
Avoid duplicates in the specs.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

gcc/ChangeLog:

	* config/darwin.h: Avoid duplicate multiply_defined specs on
	earlier Darwin versions with shared libgcc.

libstdc++-v3/ChangeLog:

	* testsuite/lib/libstdc++.exp: Remove additional flag handled
	by Darwin specs.

gcc/testsuite/ChangeLog:

	* lib/g++.exp: Remove additional flag handled by Darwin specs.
	* lib/obj-c++.exp: Likewise.

(cherry picked from commit 3c776fd)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.