]> git.ipfire.org Git - thirdparty/gcc.git/log
thirdparty/gcc.git
4 days agoc++/modules: Fix ICE when writing imported using-directive [PR122915]
Nathaniel Shead [Mon, 1 Dec 2025 12:32:40 +0000 (23:32 +1100)] 
c++/modules: Fix ICE when writing imported using-directive [PR122915]

The crash in the PR is caused because we are attempting to write a
using-directive that we never made a dep for.  This should only happen
for imported using-directives, where if we never opened the relevant
namespace in the module purview we don't think there's anything
interesting to discover and so never walk it.

There's actually no reason we need to emit imported using-directives at
all, however, unless they came from a partition, because importers will
be able to get that directive directly from the originating module if it
was going to be visible anyway.  And we will always walk and create a
dependency (marked !import_p) for partition decls.  So this patch fixes
the ICE by just skipping such cases.

To help validate this the patch also starts setting DECL_MODULE_IMPORT_P
correctly for using-directives.

PR c++/122915

gcc/cp/ChangeLog:

* module.cc (module_state::write_using_directives): Don't emit
imported using-directives.
(module_state::read_using_directives): Rename
add_using_namespace to add_imported_using_namespace.
* name-lookup.cc (add_using_namespace): Handle imported
using-directives.
(add_imported_using_namespace): Rename to match new
functionality.
* name-lookup.h (add_using_namespace): Rename to...
(add_imported_using_namespace): ...this.

gcc/testsuite/ChangeLog:

* g++.dg/modules/namespace-16_a.C: New test.
* g++.dg/modules/namespace-16_b.C: New test.
* g++.dg/modules/namespace-16_c.C: New test.
* g++.dg/modules/namespace-16_d.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
4 days agoc++/modules: Fix assertion in write_function_def for DECL_LOCAL_DECL_P
Nathaniel Shead [Sun, 30 Nov 2025 03:43:33 +0000 (14:43 +1100)] 
c++/modules: Fix assertion in write_function_def for DECL_LOCAL_DECL_P

I hadn't retested r16-5727-g858f3007278337 on trunk before pushing and
I'd missed that it interacts badly with the assertion added by
r16-5305-gc38bf35f0c7fa1.  This adjusts the assertion to not check OMP
user-defined reductions (as they won't have import_export_decl called on
them anyway).

PR c++/119864
PR c++/122939

gcc/cp/ChangeLog:

* module.cc (trees_out::write_function_def): Don't crash on
OMP used-defined type reduction function definitions.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Patrick Palka <ppalka@redhat.com>
4 days ago[PATCH][PR target/122942] RISC-V: Add zifencei extension to the rva23s64 and rvb23s64...
Peter Bergner [Mon, 1 Dec 2025 23:03:44 +0000 (16:03 -0700)] 
[PATCH][PR target/122942] RISC-V: Add zifencei extension to the rva23s64 and rvb23s64 profiles [PR122942]

While verifying our Ascalon extensions list was complete (it isn't, follow-on
patch coming), I noticed that the rva23s64 and rvb23s64 profiles were missing
the mandatory zifencei extension, hence the following patch.

This was bootstrapped and regtested with no regressions.
Ok for trunk?

Peter

The RVA23S64 and RVB23S64 profiles both state that zifencei is a mandatory
extension.  Add it to both profiles.

gcc/
PR target/122942
* config/riscv/riscv-profiles.def (rva23s64): Add zifencei.
(rvb23s64): Likewise.

4 days agoa68: install link from A68_INSTALL_NAME to A68_TARGET_INSTALL_NAME [PR algol68/122944]
Jose E. Marchesi [Mon, 1 Dec 2025 21:53:59 +0000 (22:53 +0100)] 
a68: install link from A68_INSTALL_NAME to A68_TARGET_INSTALL_NAME [PR algol68/122944]

After bootstrapping gcc 16-20251130, configured with
  --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu \
  --prefix=/arch/x86_64-linux-gnu/gnu-inst-gcc/$version \
  --enable-shared --enable-nls --enable-threads=posix --enable-__cxa_atexit \
  --with-multilib-list=m64 \
  --with-as=/arch/x86_64-linux-gnu/gnu-inst-binutils/2.38/bin/as \
  --with-ld=/arch/x86_64-linux-gnu/gnu-inst-binutils/2.38/bin/ld \
  --with-gmp=/arch/x86_64-linux-gnu/gnu-inst-gcc/$version \
  --with-mpfr=/arch/x86_64-linux-gnu/gnu-inst-gcc/$version \
  --with-mpc=/arch/x86_64-linux-gnu/gnu-inst-gcc/$version \
  --with-isl=/arch/x86_64-linux-gnu/gnu-inst-gcc/$version \
  --enable-languages=c,c++,objc,obj-c++,lto,jit,fortran,ada,go,d,m2,algol68,cobol \
  --enable-host-shared
then "make" (takes 8 hours) and "make install" (takes 8 minutes),
the bin/ directory contains the programs
  gcc-ar, gcc-nm, gcc-ranlib,
  c++, g++, gcc, gccgo, gcobc, gcobol, gdc, gfortran, gm2
both as <program> and <target>-<program>. However, ga68 is only
present without the '<target>-' prefix.

This patch fixes this.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/algol68/ChangeLog

PR algol68/122944
* Make-lang.in (algol68.install-common): Link
A68_TARGET_INSTALL_NAME in bindir.

4 days agodoc: add mention to Algol 68 in the Installing GCC manual
Jose E. Marchesi [Mon, 1 Dec 2025 11:03:50 +0000 (12:03 +0100)] 
doc: add mention to Algol 68 in the Installing GCC manual

The "Downloading the source" sectio in the "Installing GCC" manual
mentions all the compilers distributed within the GCC source
distribution.  This patch adds mentions to the ga68 compiler and its
libga68 run-time library.

Care is taken to describe the Algol 68 compiler as experimental,
according to the stipulations agreed with the SC.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* doc/install.texi (Downloading the source): Mention Algol 68.

4 days agolibstdc++: Inconsistent const in flat_map's value_type [PR122921]
Patrick Palka [Mon, 1 Dec 2025 22:08:01 +0000 (17:08 -0500)] 
libstdc++: Inconsistent const in flat_map's value_type [PR122921]

flat_map's value_type is pair<key_type, mapped_type>, which we correctly
define within the container but incorrectly within the iterator.

PR libstdc++/122921

libstdc++-v3/ChangeLog:

* include/std/flat_map (_Flat_map_impl::_Iterator::value_type):
Remove const from key_type to make consistent with the
container's value_type.
* testsuite/23_containers/flat_map/1.cc (test09): New test.
* testsuite/23_containers/flat_multimap/1.cc (test09): New test.

Reported-by: Vincent X
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
4 days agocobol: Expose warnings as command-line options.
James K. Lowden [Mon, 1 Dec 2025 21:08:55 +0000 (16:08 -0500)] 
cobol: Expose warnings as command-line options.

Introduce 45 warning options, integrated with dialects.
Update documentation with warning options and syntax supported by
each dialect.

gcc/cobol/ChangeLog:

PR cobol/119329
PR cobol/119331
PR cobol/120786
* Make-lang.in: Add cobol/messages.o to cobol1 sources.
* cbldiag.h (yywarn): Remove function.
(struct cbl_loc_t): Introduce new location type independent of Bison.
(enum cbl_diag_id_t): Enumerate diagnostic messages.
(cbl_message): New function.
(dialect_ok): Test for dialect, emit standard message.
(dialect_not_ok): Emit standard message if syntax excluded by dialect.
(dialect_error): Remove function.
(cbl_unimplementedw): Use cbl_diag_id_t.
(cbl_unimplemented): Whitespace.
* cdf.y: Update token values.
* cobol1.cc (enable_exceptions): Use cbl_message.
(cobol_warning): Declare function.
(cobol_langhook_handle_option): Add 44 new warning options.
(cobol_langhook_type_for_mode): Remove function.
* except.cc (cbl_enabled_exception_t::dump): Remove function.
* exceptg.h (class exception_turn_t): Use cbl_diag_id_t.
* gcobol.1: Document dialect syntax and new warning options.
* genapi.cc (parser_label_label): Remove unused warning.
* gengen.cc (gg_find_field_in_struct): Use cbl_internal_error.
(gg_printf): Same.
(gg_fprintf): Same.
(gg_define_function): Same.
(gg_get_function_decl): Same.
(gg_call_expr): Same.
(gg_call): Same.
* lang-specs.h: Add warning options.
* lang.opt: Add ISO dialect and options.
* lexio.cc (parse_replacing_term): Use cbl_message.
(parse_replacing_pair): Same.
(preprocess_filter_add): Same.
(cdftext::echo_input): Same.
(cdftext::lex_open): Same.
(cdftext::open_input): Same.
* messages.cc: New file implements cbl_message.
* parse.y: Use cbl_message.
* parse_ante.h (dialect_proscribed): Remove function.
(parser_move_carefully): Use dialect_ok.
(goodnight_gracie): Convert warning to debug message.
* scan.l: Use dialect_ok.
* scan_ante.h (scanner_parsing): Use cbl_diag_id_t.
(scanner_parsing_toggle): Same.
(scanner_parsing_pop): Same.
(verify_ws): Same.
(level_of): Same.
(typed_name): Same.
(integer_of): Same.
* scan_post.h (datetime_format_of): Use cbl_internal_error.
(prelex): Emit only debug messages.
* show_parse.h: Use cbl_internal_error.
* symbols.cc (symbols_update): Remove dialect test because parser's problem.
(cbl_field_t::internalize): Use cbl_message.
* symbols.h (enum cbl_dialect_t): Add ISO to cbl_dialect_t.
(cbl_dialect_str): Recognize ISO dialect.
(dialect_has): New function.
(cbl_diagnostic_kind): New function.
(cbl_dialect_kind): New function.
(struct cbl_alphabet_t): Emit only debug message.
* token_names.h: Regenerate.
* util.cc (gb4): Emit only debug message.
(current_token_location): Add overload to set token_location.
(yywarn): Remove function.
(cobol_fileline_set): Use cbl_message.
(cobol_parse_files): Same.
(cbl_message): New diagnostic message function uses cbl_diag_id_t.
(cbl_diagnostic_kind): New function.
(cbl_diagnostic_option): New function.
(cbl_unimplementedw): Use cbl_diag_id_t.
(dialect_error): Remove function.
* util.h (cbl_message): Remove obsolete prototype for cbl_message.

4 days agoarm: Fix constraints in MVE asrl and lsll patterns [PR122858]
Christophe Lyon [Wed, 26 Nov 2025 13:03:37 +0000 (13:03 +0000)] 
arm: Fix constraints in MVE asrl and lsll patterns [PR122858]

The second alternative for operand 1 needs a new constraint which does
not overlap with Pg, except that it can handle 32 to generate an
optimal mov.

This patch introduces a new Ph constraint which has the [32..255]
range.

This fixes a lot of regressions when running the testsuite for an MVE
target such as -march=armv8.1-m.main+mve.fp+fp.dp -mfloat-abi=hard.

gcc/ChangeLog:

PR target/122858
* config/arm/constraints.md (Ph): New constraint.
* config/arm/mve.md (mve_asrl_imm, mve_lsll_imm): Fix constraints
of operand 1 and handle 32 as special shift amount.

gcc/testsuite/ChangeLog:

PR target/122858
* gcc.target/arm/mve/pr122858.c: New test.

4 days agofortran: Honor array constructor type-spec during folding [PR107721]
Christopher Albert [Mon, 24 Nov 2025 23:13:03 +0000 (00:13 +0100)] 
fortran: Honor array constructor type-spec during folding [PR107721]

When an array constructor has an explicit type-spec, all elements must be
converted to that type and character elements must be padded/truncated to
the specified length.  This was working for simple cases but failing when:

1. Elements were parenthesized: [integer :: ([1.0])]
2. Constructors were nested: [[integer :: [1.0]]]
3. Character constructors were used with concatenation operators:
   [character(16) :: 'a', 'b'] // '|'
4. Nested character constructors with concatenation:
   [character(16) :: ['a', 'b']] // '|'
5. Outer constructor without type-spec wrapping inner with type-spec:
   [[character(16) :: ['a', 'b']]] // '|'
6. Nested character constructors with different type-specs:
   [character(16) :: [character(2) :: 'abcd']]

The root cause was twofold:

First, parenthesized expressions like ([1.0]) create EXPR_OP nodes that were
not being simplified before type conversion in check_constructor_type(),
so type conversion was applied to the EXPR_OP rather than its contents.

Second, character array constructors with explicit type-spec were not being
resolved before CONCAT operations in eval_intrinsic(), so elements retained
their original lengths instead of being padded to the type-spec length.
Additionally, nested array constructors needed their type-spec propagated
from the outer constructor.

The fix adds:
- Simplification of non-constant expressions in check_constructor_type()
  before attempting type conversion
- Call to gfc_check_constructor_type() in eval_intrinsic() to ensure
  type-spec conversion happens before any operations on array constructors
- Character array constructor resolution before CONCAT operations
- Recursive type-spec propagation for nested array constructors.
  When a nested array constructor has its own explicit type-spec, it is
  resolved first to enforce its own length (truncation/padding) before
  propagating the outer type-spec and resolving again.
- Detection of nested character constructors with explicit type-spec
  (via length_from_typespec) when the outer constructor has no type-spec

PR fortran/107721
PR fortran/102417

gcc/fortran/ChangeLog:

* arith.cc (eval_intrinsic): Call gfc_check_constructor_type on
array constructor operands with explicit type-spec to ensure
element type conversion before operations.  Resolve character
array constructors before CONCAT operations.
(reduce_binary_ac, reduce_binary_ca, reduce_binary_aa): Preserve
character length info in result arrays.
* array.cc (check_constructor_type): Simplify non-constant
expressions before type checking to handle parenthesized elements.
Handle nested character array constructors with explicit type-spec
when outer constructor has no type-spec.
(gfc_resolve_character_array_constructor): Recursively propagate
type-spec to nested array constructors.  If the nested constructor
has an explicit type-spec, resolve it first before propagating
the outer type-spec.

gcc/testsuite/ChangeLog:

* gfortran.dg/array_constructor_typespec_1.f90: New test.

Co-authored-by: Harald Anlauf <anlauf@gcc.gnu.org>
Signed-off-by: Christopher Albert <albert@tugraz.at>
4 days agoc++: Fix ODR regressions caused by P2115R0 changes [PR122905]
Jakub Jelinek [Mon, 1 Dec 2025 16:54:05 +0000 (17:54 +0100)] 
c++: Fix ODR regressions caused by P2115R0 changes [PR122905]

The following testcase fails due to ODR warnings starting with the
r16-3233 change (P2115R0 PR120503 implementation).

The problem is that for C++20 we mangle differently the anonymous
union at the class scope from C++17, in C++17 the
unnamed enumeration that has an enumerator as a name for linkage purposes
before it is counted as TYPE_UNNAMED_P in nested_anon_class_index,
but for C++20 it is not, therefore the ODR warning.

While the term defined in https://eel.is/c++draft/dcl.enum#12.sentence-2
is defined for all enum types, its only use in
https://eel.is/c++draft/basic.link#4.5 is solely for enumeration types at
namespace scope, changing anything for those at class scope or block scope
has undesirable ABI consequences.

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

PR c++/122905
* decl.cc (enum_with_enumerator_for_linkage_p): Only return true
for namespace scope types.

* g++.dg/lto/pr122905.h: New file.
* g++.dg/lto/pr122905_0.C: New test.
* g++.dg/lto/pr122905_1.C: New test.

4 days agoRISC-V: vsetvl: Add null check for fault-first loop [PR122652].
Robin Dapp [Wed, 12 Nov 2025 09:17:47 +0000 (10:17 +0100)] 
RISC-V: vsetvl: Add null check for fault-first loop [PR122652].

For a fault-first load we store the first instruction that read its VL
result.  The loop to do so uses next_nondebug_insn () which returns
nullptr when we are at the end.  Check for that before accessing the
next insn.

PR target/122652

gcc/ChangeLog:

* config/riscv/riscv-vsetvl.cc: Add nullptr check.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/base/pr122652.c: New test.

4 days agogfortran.texi: Remove spurious @menu entry
Tobias Burnus [Mon, 1 Dec 2025 14:52:14 +0000 (15:52 +0100)] 
gfortran.texi: Remove spurious @menu entry

Fixed the issue:
  gfortran.texi:2542: warning: node up `Unsigned integers' in menu
  `Default exponents' and in sectioning `Extensions implemented in
  GNU Fortran' differ

There is an 'Unsigned integers' @menu entry under @section level
'Extensions implemented in GNU Fortran', where it should be. But some
spurious '@menu' entry, only with 'Unsigned integers' in it, was under
'@subsection Default exponents' just before the node of the
'@subsection Unsigned integers'. - The latter worked but was bogus
and lead the warning. Hence, it is now gone.

gcc/fortran/ChangeLog:

* gfortran.texi (Default exponents): Remove spurious @menu entry.

4 days agolibgomp, amdgcn: document HSA_XNACK
Andrew Stubbs [Fri, 28 Nov 2025 16:20:46 +0000 (16:20 +0000)] 
libgomp, amdgcn: document HSA_XNACK

Mention that the HSA_XNACK variable is automatically set by the toolchain.

libgomp/ChangeLog:

* libgomp.texi (AMD GCN): Mention HSA_XNACK is set automatically.

5 days agotestsuite: fortran: Fix gfortran.dg/alloc_comp_deep_copy_5.f90 etc. with non-gas...
Rainer Orth [Mon, 1 Dec 2025 13:17:32 +0000 (14:17 +0100)] 
testsuite: fortran: Fix gfortran.dg/alloc_comp_deep_copy_5.f90 etc. with non-gas/gld [PR122596]

The gfortran.dg/alloc_comp_deep_copy_[56].f90 tests FAIL on Solaris:

FAIL: gfortran.dg/alloc_comp_deep_copy_5.f90   -O0  (test for excess errors)
UNRESOLVED: gfortran.dg/alloc_comp_deep_copy_5.f90   -O0  compilation failed to produce executable

and many more when using either or both the native assembler or linker:

Excess errors:
Assembler:
        "", line 1 : Illegal flag (-)

which is due to passing --noexecstack to the assembler.  This is wrong in
general unless GNU as is used.  Likewise, -Wl,-z,noexecstack has the same
issue.

This is *not* a target issue: the tests PASS as-is when using gas/gld on
Solaris (thus the current { target { ! *-*-darwin* } } is wrong, too).
Instead, the gas and gld effective-target keywords should be used to
control whether the flags are used, which is what this patch does.

Tested on i386-pc-solaris2.11, sparc-sun-solaris2.11,
x86_64-pc-linux-gnu, and x86_64-apple-darwin25.1.0.

2025-11-27  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

gcc/testsuite:
PR testsuite/122596
* gfortran.dg/alloc_comp_deep_copy_5.f90: Restrict
-Wa,--noexecstack, -Wl,-z,noexecstack to gas, gld.
* gfortran.dg/alloc_comp_deep_copy_6.f90: Likewise.

5 days agotestsuite: xfail g++.dg/gcov/pr16855*.C on Solaris [PR52477,PR81337]
Rainer Orth [Mon, 1 Dec 2025 13:04:03 +0000 (14:04 +0100)] 
testsuite: xfail g++.dg/gcov/pr16855*.C on Solaris [PR52477,PR81337]

The g++.dg/gcov/pr16855*.C tests FAIL on Solaris:

FAIL: g++.dg/gcov/pr16855.C  -std=gnu++17  gcov: 1 failures in line counts, 0 in branch percentages, 0 in condition/decision, 0 in prime-paths, 0 in return percentages, 0 in intermediate format, 0 failed in filters
FAIL: g++.dg/gcov/pr16855.C  -std=gnu++17  line 24: is #####:should be 1
FAIL: g++.dg/gcov/pr16855.C  -std=gnu++26  gcov: 6 failures in line counts, 0 in branch percentages, 0 in condition/decision, 0 in prime-paths, 0 in return percentages, 0 in intermediate format, 0 failed in filters
FAIL: g++.dg/gcov/pr16855.C  -std=gnu++26  line 15: is 3:should be 1
FAIL: g++.dg/gcov/pr16855.C  -std=gnu++26  line 22: is 3:should be 1
FAIL: g++.dg/gcov/pr16855.C  -std=gnu++26  line 24: is #####:should be 1
FAIL: g++.dg/gcov/pr16855.C  -std=gnu++26  line 38: is 3:should be 1
FAIL: g++.dg/gcov/pr16855.C  -std=gnu++26  line 44: is 3:should be 1
FAIL: g++.dg/gcov/pr16855.C  -std=gnu++26  line 49: is 3:should be 1

Same for -std=gnu++98.

The issue has long been known and the failures generate an excessive
amount of noise.  Since the PRs haven't seen any activity in years, this
patch xfail's them.

Tested on i386-pc-solaris2.11, sparc-sun-solaris2.11,
x86_64-pc-linux-gnu, and x86_64-apple-darwin25.1.0.

2025-11-26  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

gcc/testsuite:
PR c++/81337
PR c++/52477
* g++.dg/gcov/pr16855.C (Test::~Test): xfail on *-*-solaris2*
(dg-final): Likewise.
* g++.dg/gcov/pr16855-priority.C (Test::~Test): Likewise.
(dg-final): Likewise.

5 days agolibstdc++: Use chrono::nanoseconds for __wait_until_impl parameter
Jonathan Wakely [Mon, 1 Dec 2025 12:54:50 +0000 (12:54 +0000)] 
libstdc++: Use chrono::nanoseconds for __wait_until_impl parameter

Use the chrono::nanoseconds typedef instead of the equivalent
__wait_clock_t::duration typedef, and add a comment explaining why we
use a duration not a time_point.

libstdc++-v3/ChangeLog:

* include/bits/atomic_timed_wait.h (__wait_until_impl): Use
chrono::nanoseconds for parameter.
* src/c++20/atomic.cc (__wait_until_impl): Likewise.

5 days agolibstdc++: Fix spinloop in atomic timed waiting function [PR122878]
Jonathan Wakely [Thu, 27 Nov 2025 11:40:46 +0000 (11:40 +0000)] 
libstdc++: Fix spinloop in atomic timed waiting function [PR122878]

The __spin_until_impl function was presumably intended to just spin for
a short time, then give up and let the caller wait on a futex or
condvar. However, __spin_until_impl will never stop spinning unless
either the value changes or the timeout is reached. This means that when
__spin_until_impl returns, the caller should immediately return (because
either the value we were waiting for has changed, or the timeout
happened). So __wait_until_impl should never block on a futex or
condvar. However, the check for the return value of __spin_until_impl
would only return if the value changed (i.e. !__res._M_timeout). So if
the timeout occurred, it would fall through and block on the
futex/condvar, even though the timeout has already been reached.

This was causing a major performance regression in the timed waiting
functions of std::counting_semaphore.

The simplest fix is to replace __spin_until_impl entirely, just calling
__spin_impl to spin a small, finite number of times, and then return
immediately if either the value changed or the timeout happened. This
ensures that we don't block on the futex/condvar unnecessarily.

Removing __spin_until_impl also has the advantage that we no longer keep
calling steady_clock::now() on every iteration to check for a timeout.
That was also adding significant overhead to the timed waiting
functions.

libstdc++-v3/ChangeLog:

PR libstdc++/122878
* src/c++20/atomic.cc (__spin_until_impl): Remove.
(__wait_until_impl): Use __spin_impl instead of
__spin_until_impl and return if timeout is reached after
spinning.

Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
5 days agolibstdc++: Refactor futex usage in src/c++20/atomic.cc
Jonathan Wakely [Thu, 27 Nov 2025 10:24:39 +0000 (10:24 +0000)] 
libstdc++: Refactor futex usage in src/c++20/atomic.cc

The __futex_wait_flags scoped enum doesn't really have any benefit in
this file, because this code is no longer in the <atomic> header and so
we don't need to worry so much about namespace pollution. Just defining
the constants as int (and locally in the functions where they're needed)
avoids needing a static_cast<int> from the enum type.

I also noticed that _GLIBCXX_HAVE_LINUX_FUTEX_PRIVATE was never defined,
which meant we never used the FUTEX_PRIVATE_FLAG to tell the kernel that
all futex ops are process-private.

Also add comments and deleted definitions describing the API expected
for targets that define _GLIBCXX_HAVE_PLATFORM_WAIT.

libstdc++-v3/ChangeLog:

* src/c++20/atomic.cc: Document platform wait API.
(__futex_wait_flags): Remove enumeration type.
(futex_private_flag): Define constant for FUTEX_PRIVATE_FLAG.
(__platform_wait): Use local variables for futex op constants.
(__platform_notify): Likewise.
(__platform_wait_until): Likewise. Adjust parameter types for
consistency with __platform_wait.

Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
5 days agoalgol68: Fix SPARC build
Rainer Orth [Mon, 1 Dec 2025 12:36:35 +0000 (13:36 +0100)] 
algol68: Fix SPARC build

Algol68 bootstrap currently fails on Solaris/SPARC:

n file included from ./tm_p.h:4,
                 from gcc/algol68/a68-imports.cc:36:
gcc/config/sparc/sparc-protos.h:46:47: error: use of enum ‘memmodel’ without previous declaration
   46 | extern void sparc_emit_membar_for_model (enum memmodel, int, int);
      |                                               ^~~~~~~~

tm_p.h needs memmodel.h on some targets, like SPARC.

Bootstrapped on sparc-sun-solaris2.11.

2025-12-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

gcc/algol68:
* a68-exports.cc: Include memmodel.h.
* a68-imports.cc: Likeswise.

5 days agolibgomp, amdgcn: Implement Managed Memory
Andrew Stubbs [Thu, 20 Nov 2025 17:18:13 +0000 (17:18 +0000)] 
libgomp, amdgcn: Implement Managed Memory

This patch implements "managed" memory for AMD GCN GPUs in OpenMP.  It
builds on the support added to the NVPTX libgomp for CUDA Managed Memory, a
week or two ago.

These features were first posted here a few years ago, as part of a larger
Unified Shared Memory patch series, and then in a slightly changed version just
over a year ago.  Hopefully this time the controversial bits have been removed.

Since we do not use HIP we cannot use hipMallocManaged, so this patch attempts
to replicate the same effect by setting the appropriate attributes.  This works
on more devices than support proper USM, but still I cannot be sure that the
settings are correct for every device out there (I have tested on gfx900,
gfx906, gfx908, gfx90a, and gfx1100).

The HSA header file update uses the most recent files relicensed for us by AMD,
at the time of the first patch posting.  Those files have certainly moved on in
the upstream sources, but I did not ask to get those relicensed.

include/ChangeLog:

* hsa.h: Import newer version.
* hsa_ext_amd.h: Likewise.
* hsa_ext_image.h: Likewise.

libgomp/ChangeLog:

* Makefile.in: Regenerate.
* libgomp-plugin.h (gomp_simple_alloc_init_context): New prototype.
(gomp_simple_alloc_register_memory): New prototype.
(gomp_simple_alloc): New prototype.
(gomp_simple_free): New prototype.
(gomp_simple_realloc): New prototype.
* libgomp.h (gomp_simple_alloc_init_context): Move to libgomp-plugin.h.
(gomp_simple_alloc_register_memory): Likewise.
(gomp_simple_alloc): Likewise.
(gomp_simple_free): Likewise.
(gomp_simple_realloc): Likewise.
* libgomp.texi: Update AMD managed memory description.
* plugin/Makefrag.am (libgomp_plugin_gcn_la_SOURCES): Add
simple-allocator.c and plugin/mutex.c.
* plugin/plugin-gcn.c: Include sys/mman.h and unistd.h.
(struct hsa_runtime_fn_info): Add hsa_amd_svm_attributes_set_fn.
(dump_hsa_system_info): Add HSA_AMD_SYSTEM_INFO_SVM_SUPPORTED and
HSA_AMD_SYSTEM_INFO_SVM_ACCESSIBLE_BY_DEFAULT to the GCN_DEBUG output.
(init_hsa_runtime_functions): Add hsa_amd_svm_attributes_set.
(isa_matches_agent): Add a new error message for the case where the
ISA doesn't match but the name does.
(managed_ctx): New variable.
(managed_heap_create): New function.
(GOMP_OFFLOAD_managed_alloc): Likewise.
(GOMP_OFFLOAD_managed_free): Likewise.
* simple-allocator.c (gomp_fatal): New macro.
* testsuite/lib/libgomp.exp (check_effective_target_omp_managedmem):
Add amdgcn support checker.
(check_effective_target_offload_target_amdgcn_with_xnack): New.
* testsuite/libgomp.c-c++-common/requires-4.c: Ignore xnack warning.
* testsuite/libgomp.c-c++-common/requires-4a.c: Ignore xnack warning.
* testsuite/libgomp.c-c++-common/requires-5.c: Ignore xnack warning.
* testsuite/libgomp.c++/alloc-managed-1.C: Add -mxnack=on, if needed.
* testsuite/libgomp.c/alloc-managed-1.c: Likewise.
* testsuite/libgomp.c/alloc-managed-2.c: Likewise.
* testsuite/libgomp.c/alloc-managed-3.c: Likewise.
* testsuite/libgomp.c/alloc-managed-4.c: Likewise.
* testsuite/libgomp.fortran/alloc-managed-1.f90: Likewise.
* plugin/mutex.c: New file.

5 days agoFix algol68 changelogs
Jose E. Marchesi [Mon, 1 Dec 2025 10:41:53 +0000 (11:41 +0100)] 
Fix algol68 changelogs

This commit creates initial gcc/algol68/ChangeLog and
libga68/ChangeLog files with copyright notices and content moved from
the top-level ChangeLog and gcc/ChangeLog.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
5 days agoUpdate changelog infrastructure for algol68 and libga68
Jose E. Marchesi [Mon, 1 Dec 2025 10:39:26 +0000 (11:39 +0100)] 
Update changelog infrastructure for algol68 and libga68

This commit updates contrib/gcc-changelog/git_commit.py to add
gcc/algol68 and libga68 to default_changelog_locations.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
contrib/ChangeLog

* gcc-changelog/git_commit.py: Add gcc/algol68 and libga68 to
default_changelog_locations.

5 days agoOpenMP/Fortran: Allow explicit map followed by implicit deep mapping [PR120505]
Paul-Antoine Arras [Fri, 28 Nov 2025 14:40:44 +0000 (15:40 +0100)] 
OpenMP/Fortran: Allow explicit map followed by implicit deep mapping [PR120505]

Consider the following source code, assuming tiles is allocatable:

```
!$omp target enter data map(var%tiles(1)%den1, var%tiles(1)%den2) !        (1)
[...]
!$omp target ! implicitly maps var, which triggers deep mapping of tiles   (2)
```

Each omp directive causes a run-time error in libgomp:
(1) libgomp: Mapped array elements must be the same (0x14d729c0 vs 0x14d72a18)
(2) libgomp: Trying to map into device [0x3704ca50..0x3704cb00) object when
             [0x3704ca50..0x3704caa8) is already mapped

Regarding (1), the OpenMP spec has the following restriction: "If multiple list
items are explicitly mapped on the same construct and have the same containing
array or have base pointers that share original storage, and if any of the list
items do not have corresponding list items that are present in the device data
environment prior to a task encountering the construct, then the list items must
refer to *the same array elements* of either the containing array or the
implicit array of the base pointers."
Because tiles is allocatable, we cannot prove at compile time that array
elements are the same, so the check is deferred to libgomp. But there the
condition enforcing that all addresses are the same is too strict, so this patch
relaxes it to only check that addresses are sorted in increasing order.

The OpenMP spec allows (2) as long as it is implicit, without extending the
original mapping. So this patch sets the GOMP_MAP_IMPLICIT flag appropriately
on deep maps at compile time to let libgomp know that it is fine.

This patch ensures that such user code is accepted by:
(1) Setting the GOMP_MAP_IMPLICIT flag appropriately on deep maps;
(2) Relaxing the restriction on struct mapping from different containing arrays,
so that the element index need not be the same, instead addresses must be sorted
in increasing order.

This fixes the two errors currently seen when running SPEC HPC clvleaf
benchmark. However, further mapping issues prevent the benchmark from running to
completion.

PR fortran/120505

gcc/ChangeLog:

* omp-low.cc (lower_omp_target): Set GOMP_MAP_IMPLICIT flag.

libgomp/ChangeLog:

* target.c (gomp_map_vars_internal): Allow struct mapping from different
containing array elements as long as adresses are in increasing order.
* testsuite/libgomp.c-c++-common/map-arrayofstruct-2.c: Adjust
dg-output.
* testsuite/libgomp.c-c++-common/map-arrayofstruct-3.c: Likewise.
* testsuite/libgomp.fortran/map-subarray-5.f90: Likewise.
* testsuite/libgomp.fortran/map-subarray-10.f90: New test.
* testsuite/libgomp.fortran/map-subarray-9.f90: New test.

5 days agoa68: Fix algol68 build on i686-linux
Jakub Jelinek [Mon, 1 Dec 2025 09:44:48 +0000 (10:44 +0100)] 
a68: Fix algol68 build on i686-linux

GCC with enabled algol68 fails to build on i686-linux, the error is
../../gcc/algol68/a68-low-multiples.cc:636:31: error: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘size_t’ {aka ‘unsigned int’} [-Werror=format=]
xasprintf is printf family, so it can't use %zd portably, so the
following patch uses what is used elsewhere, the HOST_SIZE_T_PRINT*
macros with (fmt_size_t) cast - the macros pick the smallest of
%d, %ld and %lld depending on SIZE_MAX, but it could still disagree
on the exact type and cause warnings or for hosts with say 24-bit
size_t it could be even larger, so the cast is needed to handle that.

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

* algol68/a68-low-multiples.cc (copy_multiple_dimension_elems): Use
HOST_SIZE_T_PRINT_DEC in xasprintf format string and cast to
fmt_size_t.

5 days agox86: Emit the TLS call after deleted instructions
H.J. Lu [Mon, 1 Dec 2025 02:05:44 +0000 (10:05 +0800)] 
x86: Emit the TLS call after deleted instructions

For a basic block with only deleted instructions:

(code_label 348 23 349 45 3 (nil) [0 uses])
(note 349 348 436 45 [bb 45] NOTE_INSN_BASIC_BLOCK)
(note 436 349 362 45 NOTE_INSN_DELETED)

emit the TLS call after deleted instructions.

gcc/

PR target/122906
* config/i386/i386-features.cc (ix86_emit_tls_call): Emit the
TLS call after deleted instructions.

gcc/testsuite/

PR target/122906
* g++.target/i386/pr122906-1.C: New test.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
5 days agolibcc1: Check for libgen.h header
John David Anglin [Mon, 1 Dec 2025 01:51:13 +0000 (20:51 -0500)] 
libcc1: Check for libgen.h header

The basename() function is declared in libgen.h.

2025-11-30  John David Anglin  <danglin@gcc.gnu.org>

libcc1/ChangeLog:

* configure.ac: Check for libgen.h header.
* configure: Regenerate.

5 days agoDaily bump.
GCC Administrator [Mon, 1 Dec 2025 00:16:36 +0000 (00:16 +0000)] 
Daily bump.

5 days ago[PATCH] [Testsuite] Fix testcases after LICM of self-write
Kugan Vivekanandarajah [Sun, 30 Nov 2025 22:29:16 +0000 (09:29 +1100)] 
[PATCH] [Testsuite] Fix testcases after LICM of self-write

Adjust the testcase as above.

gcc/testsuite/ChangeLog:

2025-11-26  Kugan Vivekanandarajah  <kvivekananda@nvidia.com>

* gcc.dg/vect/tsvc/vect-tsvc-s293.c: Remove xfail.
* gcc.target/aarch64/vect-ld1r-compile.c: Add
-fno-tree-loop-distribute-patterns to prevent memset detection.

Signed-off-by: Kugan Vivekanandarajah <kvivekananda@nvidia.com>
5 days agoa68: some small a68-diagnostics.cc improvements
Jose E. Marchesi [Sun, 30 Nov 2025 19:42:43 +0000 (20:42 +0100)] 
a68: some small a68-diagnostics.cc improvements

This commit fixes a few problems in algol68/a68-diagnostics.cc,
reported by David Malcolm in-list.

gcc/ChangeLog

* algol68/a68-diagnostics.cc (diagnostic): Copypasto "a meek"
should be "a firm".  Support printing line number for programs
longer than 9 lines.  Use obstack_append_str rather than
obstack_grow.
(obstack_append_str): New function.

5 days agofortran: testsuite: fix matching of language lists in diagnostics
Jose E. Marchesi [Sun, 30 Nov 2025 12:48:00 +0000 (13:48 +0100)] 
fortran: testsuite: fix matching of language lists in diagnostics

A few Fortran tests that pass both Fortran and C programs in the same
compilation check for warnings like:

  { dg-warning "command-line option '-fcheck=all' is valid for Fortran but not for C" "" { target *-*-* } 0 }

The problem is that the warning may actually indicate the option is
valid for other languages other than Fortran.  Like in:

  warning: command-line option ‘-fcheck=all’ is valid for Algol68/Fortran but not for C

This patch modifies the regexps used in the tests in order to match
the language list strings generated by opts-global.cc:write_langs.

Tested in x86_64-linux-gnu with make check-gfortran.

gcc/testsuite/ChangeLog

PR fortran/122923
* gfortran.dg/ISO_Fortran_binding_17.f90: Recognize language
list in warning regexp.
* gfortran.dg/c-interop/allocate-errors.f90: Likewise.
* gfortran.dg/c-interop/establish-errors.f90: Likewise.
* gfortran.dg/c-interop/pr113338.f90: Likewise.
* gfortran.dg/c-interop/section-errors.f90: Likewise.
* gfortran.dg/c-interop/select-errors.f90: Likewise.
* gfortran.dg/c-interop/setpointer-errors.f90: Likewise.

5 days agoc++: Fix error recovery in cp_hide_range_decl [PR122465]
Jakub Jelinek [Sun, 30 Nov 2025 14:52:27 +0000 (15:52 +0100)] 
c++: Fix error recovery in cp_hide_range_decl [PR122465]

The following testcase shows that range_decl in cp_hide_range_decl is
sometimes also NULL_TREE and not just error_mark_node, and the function
IMHO should treat both the same, not try to hide anything in that case
because it doesn't know what should be hidden.  This ICEs during
error recovery since something like cp_hide_range_decl has been introduced
(earlier it wasn't called that way).

The fix tweaks cp_parser_simple_declaration, such that it stores error_mark_node
instead of NULL_TREE into *maybe_range_for_decl in the erroneous cases.

2025-11-30  Jakub Jelinek  <jakub@redhat.com>

PR c++/122465
* parser.cc (cp_parser_simple_declaration): Adjust function comment.
Set *maybe_range_for_decl to error_mark_node instead of keeping it
NULL_TREE in error cases or when followed by CPP_COLON.

* g++.dg/cpp0x/pr122465.C: New test.

6 days agovect: support vectorization of early break forced live IVs as scalar
Tamar Christina [Sun, 30 Nov 2025 07:29:50 +0000 (07:29 +0000)] 
vect: support vectorization of early break forced live IVs as scalar

Consider this simple loop

long long arr[1024];
long long *f()
{
    int i;
    for (i = 0; i < 1024; i++)
      if (arr[i] == 42)
        break;
    return arr + i;
}

where today we generate this at -O3:

.L2:
        add     v29.4s, v29.4s, v25.4s
        add     v28.4s, v28.4s, v26.4s
        cmp     x2, x1
        beq     .L9
.L6:
        ldp     q30, q31, [x1], 32
        cmeq    v30.2d, v30.2d, v27.2d
        cmeq    v31.2d, v31.2d, v27.2d
        addhn   v31.2s, v31.2d, v30.2d
        fmov    x3, d31
        cbz     x3, .L2

but which is highly inefficient.  This loops has 3 IVs (PR119577), one normal
scalar one, two vector ones, one counting up and one counting down (PR115120)
and has a forced unrolling due to an increase in VF because of the mismatch in
modes between the IVs and the loop body (PR119860).

This patch fixed all three of these issues and we now generate:

.L2:
        add     w2, w2, 2
        cmp     w2, 1024
        beq     .L13
.L5:
        ldr     q31, [x1]
        add     x1, x1, 16
        cmeq    v31.2d, v31.2d, v30.2d
        umaxp   v31.4s, v31.4s, v31.4s
        fmov    x0, d31
        cbz     x0, .L2

or with sve

.L3:
        add     x1, x1, x3
        whilelo p7.d, w1, w2
        b.none  .L11
.L4:
        ld1d    z30.d, p7/z, [x0, x1, lsl 3]
        cmpeq   p7.d, p7/z, z30.d, z31.d
        b.none  .L3

which shows that the new scalar IV is efficiently merged with the loop
control one based on IVopts.

To accomplish this the patch reworks how we handle "forced lived inductions"
with regard to vectorization.

Prior to this change when we vectorize a loop with early break any induction
variables would be forced live.  Forcing live means that even though the values
aren't used inside the loop we must preserve the values such that when we start
the scalar loop we can pass the correct initial values.

However this had several side-effects:

1. We must be able to vectorize the induction.
2. The induction variable participates in VF determination.  This would often
   times lead to a higher VF than would have normally been needed.  As such the
   vector loops become less profitable.
3. IVcannon on constant loop iterations inserts a downward counting IV in
   addition to the upwards one in order to support things like doloops.
   Normally this duplicate IV is removed by IV opts, but IV doesn't understand
   vector inductions.  As such we end up with 3 IVs.

This patch fixes all three of these by choosing instead to create a new scalar
IV that's adjusted within the loop and to update all the IV statements outside
the loop by using this new IV.

We re-use vect_update_ivs_after_vectorizer for all exits now and put in a dummy
value representing the IV that is to be generated later.

To do this we delay when we call vect_update_ivs_after_vectorizer until after
the skip_epilogue edge is created and vect_update_ivs_after_vectorizer now
updates all out of loop usages of IVs and not just that in the merge edge to
the scalar loop.  This not only generates better code, but negates the need to
fixup the "forced live" scalar IVs later on.

This new scalar IV is then materialized in
vect_update_ivs_after_vectorizer_for_early_breaks.  When PFA using masks by
skipping iterations we now roll up the pfa IV into the new scalar IV by
adjusting the first iteration back from start - niters_peel and then take the
MAX <scal_iv, 0> to correctly handle the first iteration.

Because we are now re-using vect_update_ivs_after_vectorizer we have an issue
with UB clamping on non-linear inductions.

At the moment when doing early exit updating I just ignore the possibility of UB
since if the main exit is OK, the early exit is one iteration behind the main
one and so should be ok.

Things however get complicated with PEELED loops.

gcc/ChangeLog:

PR tree-optimization/115120
PR tree-optimization/119577
PR tree-optimization/119860
* tree-vect-loop-manip.cc (vect_can_advance_ivs_p): Check for nonlinear
mult induction and early break.
(vect_update_ivs_after_vectorizer): Support early break exits.
(vect_do_peeling): Support scalar IVs.
* tree-vect-loop.cc (vect_peel_nonlinear_iv_init): Support early break.
(vect_update_nonlinear_iv): use `unsigned_type_for` such that function
works for both vector and scalar types.
(vectorizable_induction, vectorizable_live_operation): Remove vector
early break IV code.
(vect_update_ivs_after_vectorizer_for_early_breaks): New.
(vect_transform_loop): Support new scalar IV for early break.
* tree-vect-slp.cc (vect_analyze_slp): Remove SLP build for early break
IVs.
* tree-vect-stmts.cc (vect_stmt_relevant_p): No longer mark early break
IVs as completely unused rather than used_only_live.  They no longer
contribute to the vector loop and so should not be analyzed.
(can_vectorize_live_stmts): Remove vector early vreak IV code.
* tree-vectorizer.h (LOOP_VINFO_EARLY_BRK_NITERS_VAR): New.
(class loop_vec_info): Add early_break_niters_var.

gcc/testsuite/ChangeLog:

PR tree-optimization/115120
PR tree-optimization/119577
PR tree-optimization/119860
* gcc.dg/vect/vect-early-break_39.c: Update.
* gcc.dg/vect/vect-early-break_139.c: New testcase.
* gcc.target/aarch64/sve/peel_ind_10.c: Update.
* gcc.target/aarch64/sve/peel_ind_11.c: Update.
* gcc.target/aarch64/sve/peel_ind_12.c: Update.
* gcc.target/aarch64/sve/peel_ind_5.c: Update.
* gcc.target/aarch64/sve/peel_ind_6.c: Update.
* gcc.target/aarch64/sve/peel_ind_7.c: Update.
* gcc.target/aarch64/sve/peel_ind_9.c: Update.
* gcc.target/aarch64/sve/pr119351.c

6 days agoRegenerate .opt.urls
Andrew Pinski [Sun, 30 Nov 2025 03:50:53 +0000 (19:50 -0800)] 
Regenerate .opt.urls

Looks like Jose forgot to one last regenerate of the opt.urls file.

Pushed as obvious after quickly looking to make sure they look decent.

gcc/ada/ChangeLog:

* gcc-interface/lang.opt.urls: Regenerate.

gcc/ChangeLog:

* algol68/lang.opt.urls: Regenerate.

gcc/c-family/ChangeLog:

* c.opt.urls: Regenerate.

gcc/cobol/ChangeLog:

* lang.opt.urls: Regenerate.

gcc/d/ChangeLog:

* lang.opt.urls: Regenerate.

gcc/fortran/ChangeLog:

* lang.opt.urls: Regenerate.

gcc/go/ChangeLog:

* lang.opt.urls: Regenerate.

gcc/m2/ChangeLog:

* lang.opt.urls: Regenerate.

gcc/rust/ChangeLog:

* lang.opt.urls: Regenerate.

Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
6 days agoa68: build system changes
Jose E. Marchesi [Sat, 29 Nov 2025 15:57:51 +0000 (16:57 +0100)] 
a68: build system changes

This commit adds support for building the Algol 68 front-end to the
build system.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
ChangeLog

* Makefile.def (libga68): New module.
(configure-target-libga68): Likewise.
* Makefile.tpl (GA68): Define.
(GA68_FOR_BUILD): Likewise.
(GA68FLAGS): Likewise.
* configure.ac (--enable-libga68): New option.
(--enable-algol68-gc): Likewise.
(GA68): Subst.
(GA68FLAGS): Likewise.
Invoke ACX_PROG_GA68.
* configure: Regenerate.
* Makefile.in: Likewise.

config/ChangeLog

* acx.m4 (ACX_PROG_GA68): New defun.

gcc/ChangeLog

* Makefile.in (OPT_URLS_HTML_DEPS): Add ga68/Option-Index.html.
* algol68/Make-lang.in: New file.
* algol68/config-lang.in: Likewise.

6 days agoa68: updates to common documentation
Jose E. Marchesi [Sat, 29 Nov 2025 15:54:32 +0000 (16:54 +0100)] 
a68: updates to common documentation

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* doc/install.texi (Configuration): Mention algol68 option for
--enable-languages.
(Algol 68-Specific Options): New section.
* doc/sourcebuild.texi (Top Level): Add entry for libga68.

6 days agoa68: powerpc specific support
Jose E. Marchesi [Sat, 11 Oct 2025 17:43:16 +0000 (19:43 +0200)] 
a68: powerpc specific support

Some code in the rs6000 port relies on parsing the language name.
This commit makes that code to recognize "GNU Algol 68".

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* config/rs6000/rs6000-logue.cc (rs6000_output_function_epilogue):
Handle "GNU Algol 68" in language_string.

6 days agoa68: darwin specific support
Jose E. Marchesi [Sat, 11 Oct 2025 17:43:02 +0000 (19:43 +0200)] 
a68: darwin specific support

This commit:

- Adapts specs in config/darwin.h for libga68.a.

- Amends section processing for non-LTO use in libibery on Darwin.

  The initial implementation of the Mach-O simple object code was
  mainly targeting LTO cases.  The implementation was not suitable for
  cases where we are just looking for a regular named section.

Signed-off-by: Iain Sandoe <iains.gcc@gmail.com>
gcc/ChangeLog

* config/darwin.h: Adapt specs for libga68.a.

libiberty/ChangeLog:

* simple-object-mach-o.c
(simple_object_mach_o_segment): Handle non-LTO sections.

6 days agoa68: DWARF language codes
Jose E. Marchesi [Sat, 11 Oct 2025 17:42:30 +0000 (19:42 +0200)] 
a68: DWARF language codes

This commit makes GCC aware of the DWARF numbers recently allocated
for Algol 68.

For DWARF 5, DW_LANG_Algol68 = 0x44.
For DWARF 6, DW_LNAME_Algol68 = 0x2e
    with versioning schema YYYY, starting with 1973 for the original
    Revised language. The language extensions we are working on will
    be encoded in subsequent versions, 2025 etc.

See https://dwarfstd.org/issues/250304.1.html for more information.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* dwarf2out.cc: Set DW_LANG_Algol68 an DW_LNAME_Algol68.

include/ChangeLog

* dwarf2.h (DW_LANG_Algol68): Define.
(DW_LNAME_Algol68): Likewise.

6 days agoa68: command-line options
Jose E. Marchesi [Sat, 11 Oct 2025 17:42:08 +0000 (19:42 +0200)] 
a68: command-line options

This commit adds a new common command-line option to the compiler
driver (-static-libga68) as well as several other front-end specific
options.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/lang.opt: New file.
* algol68/lang.opt.urls: Generate.
* common.opt: New option -static-libga68.
* common.opt.urls: Generate.
* gcc.cc: Handle OPT_static_libga68.
* regenerate-opt-urls.py (PER_LANGUAGE_OPTION_INDEXES): Add Algol68.

6 days agoa68: documentation
Jose E. Marchesi [Sat, 11 Oct 2025 17:41:38 +0000 (19:41 +0200)] 
a68: documentation

This commit adds a new section to the GCC Internals Manual and also
adds two new manuals.

ga68.texi is The GNU Algol 68 Compiler user manual.  It describes how
to use the compiler and all the GNU extensions implemented on top of
the Algol 68 programming language.

ga68-internals.texi is The GNU algol68 Compiler Internals manual.  It
describes the implementation of the front-end and it is of interest
primarily for developers.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/ga68-internals.texi: New file.
* algol68/ga68.texi: Likewise.

6 days agoa68: top-level misc files
Jose E. Marchesi [Sat, 11 Oct 2025 17:40:13 +0000 (19:40 +0200)] 
a68: top-level misc files

This commit updates a few administrative files in the top-level
directory.

The MAINTAINERS file is updated with new entries for the Algol 68
front-end and the libga68 run-time library.

SECURITY.txt is updated to add libga68 to the list of the other
run-time libraries.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
ChangeLog

* MAINTAINERS: Add Algol 68 subsystems.
* SECURITY.txt: add libga68 to list of libraries.

6 days agoa68: testsuite: mcgt tests
Jose E. Marchesi [Sat, 11 Oct 2025 17:58:33 +0000 (19:58 +0200)] 
a68: testsuite: mcgt tests

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/testsuite/ChangeLog

* algol68/compile/mcgt-1.3b.a68: New file.
* algol68/compile/mcgt-7.1.3a-bis.a68: Likewise.
* algol68/compile/mcgt-7.1.3a.a68: Likewise.
* algol68/execute/mcgt/execute.exp: Likewise.
* algol68/execute/mcgt/mcgt-1.3a.a68: Likewise.
* algol68/execute/mcgt/mcgt-1.3c.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.2.1a.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.2.2a.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.2.3a.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.3a.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.3b.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.3c.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.3e.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.4.2a.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.4.2b.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.4.2c.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.4.3a.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.6a.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.6b.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.7d.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.7e.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.8a.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.8b.a68: Likewise.
* algol68/execute/mcgt/mcgt-2.9.1a.a68: Likewise.
* algol68/execute/mcgt/mcgt-3.5.1a.a68: Likewise.
* algol68/execute/mcgt/mcgt-3.5d.a68: Likewise.
* algol68/execute/mcgt/mcgt-3.7.2a.a68: Likewise.
* algol68/execute/mcgt/mcgt-3.8.2a.a68: Likewise.
* algol68/execute/mcgt/mcgt-3.9.1b.a68: Likewise.
* algol68/execute/mcgt/mcgt-4.1.2a.a68: Likewise.
* algol68/execute/mcgt/mcgt-4.1.3a.a68: Likewise.
* algol68/execute/mcgt/mcgt-4.1.6a.a68: Likewise.
* algol68/execute/mcgt/mcgt-4.1.6b.a68: Likewise.
* algol68/execute/mcgt/mcgt-4.1.6c.a68: Likewise.
* algol68/execute/mcgt/mcgt-4.2.6a.a68: Likewise.
* algol68/execute/mcgt/mcgt-4.2.6b.a68: Likewise.
* algol68/execute/mcgt/mcgt-4.2.6d.a68: Likewise.
* algol68/execute/mcgt/mcgt-4.3.1a.a68: Likewise.
* algol68/execute/mcgt/mcgt-4.3.1b.a68: Likewise.
* algol68/execute/mcgt/mcgt-4.3.2a.a68: Likewise.
* algol68/execute/mcgt/mcgt-5.1.2a.a68: Likewise.
* algol68/execute/mcgt/mcgt-5.1.3a.a68: Likewise.
* algol68/execute/mcgt/mcgt-5.1.3c.a68: Likewise.
* algol68/execute/mcgt/mcgt-5.1.5a.a68: Likewise.
* algol68/execute/mcgt/mcgt-6.2.2a.a68: Likewise.
* algol68/execute/mcgt/mcgt-6.2.2b.a68: Likewise.
* algol68/execute/mcgt/mcgt-6.2.2c.a68: Likewise.
* algol68/execute/mcgt/mcgt-7.1.1a.a68: Likewise.
* algol68/execute/mcgt/mcgt-7.1.1b.a68: Likewise.
* algol68/execute/mcgt/mcgt-7.1.3a.a68: Likewise.
* algol68/execute/mcgt/mcgt-7.3.2a.a68: Likewise.
* algol68/execute/mcgt/mcgt-7.3.6a.a68: Likewise.
* algol68/execute/mcgt/mcgt-7.3.6b.a68: Likewise.
* algol68/execute/mcgt/mcgt-7.5.3a.a68: Likewise.

6 days agoa68: testsuite: revised MC Algol 68 test set
Jose E. Marchesi [Sat, 11 Oct 2025 17:58:04 +0000 (19:58 +0200)] 
a68: testsuite: revised MC Algol 68 test set

We cannot distribute the MC Test Set with GCC as of now, due to not
clear distribution terms of the stuff.  Until this gets clarified with
the CWI (then Mathematical Centrum) a README.mcts file explains how to
manually fetch and install the test set.

gcc/testsuite/ChangeLog

* algol68/README.mcts: New file.

6 days agoa68: testsuite: compilation tests
Jose E. Marchesi [Sat, 11 Oct 2025 17:57:40 +0000 (19:57 +0200)] 
a68: testsuite: compilation tests

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/testsuite/ChangeLog

* algol68/compile/a68includes/goodbye-supper.a68
* algol68/compile/a68includes/goodbye.a68: Likewise.
* algol68/compile/a68includes/hello-supper.a68: Likewise.
* algol68/compile/a68includes/hello.a68: Likewise.
* algol68/compile/actual-bounds-expected-1.a68: Likewise.
* algol68/compile/actual-bounds-expected-2.a68: Likewise.
* algol68/compile/actual-bounds-expected-3.a68: Likewise.
* algol68/compile/balancing-1.a68: Likewise.
* algol68/compile/bold-nestable-comment-1.a68: Likewise.
* algol68/compile/bold-taggle-1.a68: Likewise.
* algol68/compile/brief-nestable-comment-1.a68: Likewise.
* algol68/compile/brief-nestable-comment-2.a68: Likewise.
* algol68/compile/char-break-1.a68: Likewise.
* algol68/compile/compile.exp: Likewise.
* algol68/compile/conditional-clause-1.a68: Likewise.
* algol68/compile/error-bold-taggle-1.a68: Likewise.
* algol68/compile/error-coercion-1.a68: Likewise.
* algol68/compile/error-coercion-2.a68: Likewise.
* algol68/compile/error-coercion-flex-1.a68: Likewise.
* algol68/compile/error-conformance-clause-1.a68: Likewise.
* algol68/compile/error-contraction-1.a68: Likewise.
* algol68/compile/error-contraction-2.a68: Likewise.
* algol68/compile/error-incestuous-union-1.a68: Likewise.
* algol68/compile/error-label-after-decl-1.a68: Likewise.
* algol68/compile/error-nestable-comments-1.a68: Likewise.
* algol68/compile/error-nested-comment-1.a68: Likewise.
* algol68/compile/error-no-bounds-allowed-1.a68: Likewise.
* algol68/compile/error-string-break-1.a68: Likewise.
* algol68/compile/error-string-break-2.a68: Likewise.
* algol68/compile/error-string-break-3.a68: Likewise.
* algol68/compile/error-string-break-4.a68: Likewise.
* algol68/compile/error-string-break-5.a68: Likewise.
* algol68/compile/error-string-break-6.a68: Likewise.
* algol68/compile/error-string-break-7.a68: Likewise.
* algol68/compile/error-supper-1.a68: Likewise.
* algol68/compile/error-supper-2.a68: Likewise.
* algol68/compile/error-supper-3.a68: Likewise.
* algol68/compile/error-supper-4.a68: Likewise.
* algol68/compile/error-supper-5.a68: Likewise.
* algol68/compile/error-supper-6.a68: Likewise.
* algol68/compile/error-underscore-in-mode-1.a68: Likewise.
* algol68/compile/error-underscore-in-tag-1.a68: Likewise.
* algol68/compile/error-upper-1.a68: Likewise.
* algol68/compile/error-widening-1.a68: Likewise.
* algol68/compile/error-widening-2.a68: Likewise.
* algol68/compile/error-widening-3.a68: Likewise.
* algol68/compile/error-widening-4.a68: Likewise.
* algol68/compile/error-widening-5.a68: Likewise.
* algol68/compile/error-widening-6.a68: Likewise.
* algol68/compile/error-widening-7.a68: Likewise.
* algol68/compile/error-widening-8.a68: Likewise.
* algol68/compile/error-widening-9.a68: Likewise.
* algol68/compile/hidden-operators-1.a68: Likewise.
* algol68/compile/implicit-widening-1.a68: Likewise.
* algol68/compile/include-supper.a68: Likewise.
* algol68/compile/include.a68: Likewise.
* algol68/compile/labeled-unit-1.a68: Likewise.
* algol68/compile/nested-comment-1.a68: Likewise.
* algol68/compile/nested-comment-2.a68: Likewise.
* algol68/compile/operators-firmly-related.a68: Likewise.
* algol68/compile/recursive-modes-1.a68: Likewise.
* algol68/compile/recursive-modes-2.a68: Likewise.
* algol68/compile/serial-clause-jump-1.a68: Likewise.
* algol68/compile/snobol.a68: Likewise.
* algol68/compile/supper-1.a68: Likewise.
* algol68/compile/supper-10.a68: Likewise.
* algol68/compile/supper-11.a68: Likewise.
* algol68/compile/supper-12.a68: Likewise.
* algol68/compile/supper-13.a68: Likewise.
* algol68/compile/supper-2.a68: Likewise.
* algol68/compile/supper-3.a68: Likewise.
* algol68/compile/supper-4.a68: Likewise.
* algol68/compile/supper-5.a68: Likewise.
* algol68/compile/supper-6.a68: Likewise.
* algol68/compile/supper-7.a68: Likewise.
* algol68/compile/supper-8.a68: Likewise.
* algol68/compile/supper-9.a68: Likewise.
* algol68/compile/uniting-1.a68: Likewise.
* algol68/compile/upper-1.a68: Likewise.
* algol68/compile/warning-scope-1.a68: Likewise.
* algol68/compile/warning-scope-2.a68: Likewise.
* algol68/compile/warning-scope-3.a68: Likewise.
* algol68/compile/warning-scope-4.a68: Likewise.
* algol68/compile/warning-scope-5.a68: Likewise.
* algol68/compile/warning-scope-6.a68: Likewise.
* algol68/compile/warning-scope-7.a68: Likewise.
* algol68/compile/warning-voiding-1.a68: Likewise.
* algol68/compile/warning-voiding-2.a68: Likewise.

6 days agoa68: testsuite: execution tests 2/2
Jose E. Marchesi [Sat, 11 Oct 2025 17:57:22 +0000 (19:57 +0200)] 
a68: testsuite: execution tests 2/2

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/testsuite/ChangeLog

* algol68/execute/loop-7.a68: New file.
* algol68/execute/loop-8.a68: Likewise.
* algol68/execute/loop-9.a68: Likewise.
* algol68/execute/loop-overflow-underflow.a68: Likewise.
* algol68/execute/lt-int-1.a68: Likewise.
* algol68/execute/lt-string-stride-1.a68: Likewise.
* algol68/execute/lwb-1.a68: Likewise.
* algol68/execute/minus-int-1.a68: Likewise.
* algol68/execute/minusab-1.a68: Likewise.
* algol68/execute/minusab-2.a68: Likewise.
* algol68/execute/minusab-3.a68: Likewise.
* algol68/execute/minusab-4.a68: Likewise.
* algol68/execute/mod-int-1.a68: Likewise.
* algol68/execute/modab-1.a68: Likewise.
* algol68/execute/modab-2.a68: Likewise.
* algol68/execute/mode-indication-1.a68: Likewise.
* algol68/execute/mult-char-1.a68: Likewise.
* algol68/execute/mult-int-1.a68: Likewise.
* algol68/execute/mult-string-1.a68: Likewise.
* algol68/execute/mult-string-2.a68: Likewise.
* algol68/execute/mult-string-3.a68: Likewise.
* algol68/execute/mult-string-4.a68: Likewise.
* algol68/execute/multab-1.a68: Likewise.
* algol68/execute/multab-2.a68: Likewise.
* algol68/execute/multab-3.a68: Likewise.
* algol68/execute/mutual-recursion-1.a68: Likewise.
* algol68/execute/ne-bits-1.a68: Likewise.
* algol68/execute/ne-char-char-1.a68: Likewise.
* algol68/execute/ne-int-1.a68: Likewise.
* algol68/execute/ne-string-1.a68: Likewise.
* algol68/execute/neg-int-1.a68: Likewise.
* algol68/execute/not-bits-1.a68: Likewise.
* algol68/execute/odd-1.a68: Likewise.
* algol68/execute/op-1.a68: Likewise.
* algol68/execute/op-2.a68: Likewise.
* algol68/execute/op-3.a68: Likewise.
* algol68/execute/operator-declaration-1.a68: Likewise.
* algol68/execute/or-bits-1.a68: Likewise.
* algol68/execute/orf-1.a68: Likewise.
* algol68/execute/over-int-1.a68: Likewise.
* algol68/execute/overab-1.a68: Likewise.
* algol68/execute/overab-2.a68: Likewise.
* algol68/execute/particular-program-1.a68: Likewise.
* algol68/execute/plus-char-1.a68: Likewise.
* algol68/execute/plus-int-1.a68: Likewise.
* algol68/execute/plus-string-1.a68: Likewise.
* algol68/execute/plus-string-2.a68: Likewise.
* algol68/execute/plus-string-stride-1.a68: Likewise.
* algol68/execute/plusab-1.a68: Likewise.
* algol68/execute/plusab-2.a68: Likewise.
* algol68/execute/plusab-3.a68: Likewise.
* algol68/execute/plusab-4.a68: Likewise.
* algol68/execute/plusab-string-1.a68: Likewise.
* algol68/execute/plusto-char-1.a68: Likewise.
* algol68/execute/plusto-string-1.a68: Likewise.
* algol68/execute/posix-argc-argv-1.a68: Likewise.
* algol68/execute/posix-fopen-1.a68: Likewise.
* algol68/execute/posix-fputc-fputs-1.a68: Likewise.
* algol68/execute/posix-getenv-1.a68: Likewise.
* algol68/execute/posix-perror-1.a68: Likewise.
* algol68/execute/posix-putchar-1.a68: Likewise.
* algol68/execute/posix-stdinouterr-1.a68: Likewise.
* algol68/execute/posix-strerror-1.a68: Likewise.
* algol68/execute/posix-stride-1.a68: Likewise.
* algol68/execute/pow-int-1.a68: Likewise.
* algol68/execute/pow-real-1.a68: Likewise.
* algol68/execute/proc-1.a68: Likewise.
* algol68/execute/proc-10.a68: Likewise.
* algol68/execute/proc-12.a68: Likewise.
* algol68/execute/proc-13.a68: Likewise.
* algol68/execute/proc-14.a68: Likewise.
* algol68/execute/proc-15.a68: Likewise.
* algol68/execute/proc-16.a68: Likewise.
* algol68/execute/proc-17.a68: Likewise.
* algol68/execute/proc-18.a68: Likewise.
* algol68/execute/proc-19.a68: Likewise.
* algol68/execute/proc-2.a68: Likewise.
* algol68/execute/proc-20.a68: Likewise.
* algol68/execute/proc-21.a68: Likewise.
* algol68/execute/proc-22.a68: Likewise.
* algol68/execute/proc-23.a68: Likewise.
* algol68/execute/proc-25.a68: Likewise.
* algol68/execute/proc-26.a68: Likewise.
* algol68/execute/proc-27.a68: Likewise.
* algol68/execute/proc-28.a68: Likewise.
* algol68/execute/proc-29.a68: Likewise.
* algol68/execute/proc-3.a68: Likewise.
* algol68/execute/proc-4.a68: Likewise.
* algol68/execute/proc-5.a68: Likewise.
* algol68/execute/proc-6.a68: Likewise.
* algol68/execute/proc-7.a68: Likewise.
* algol68/execute/proc-8.a68: Likewise.
* algol68/execute/procedured-goto-1.a68: Likewise.
* algol68/execute/quine.a68: Likewise.
* algol68/execute/random-1.a68: Likewise.
* algol68/execute/re-im-1.a68: Likewise.
* algol68/execute/rela-string-1.a68: Likewise.
* algol68/execute/repr-1.a68: Likewise.
* algol68/execute/round-1.a68: Likewise.
* algol68/execute/row-display-1.a68: Likewise.
* algol68/execute/row-display-2.a68: Likewise.
* algol68/execute/row-display-3.a68: Likewise.
* algol68/execute/row-display-4.a68: Likewise.
* algol68/execute/row-display-5.a68: Likewise.
* algol68/execute/rowing-1.a68: Likewise.
* algol68/execute/rowing-10.a68: Likewise.
* algol68/execute/rowing-11.a68: Likewise.
* algol68/execute/rowing-12.a68: Likewise.
* algol68/execute/rowing-13.a68: Likewise.
* algol68/execute/rowing-2.a68: Likewise.
* algol68/execute/rowing-3.a68: Likewise.
* algol68/execute/rowing-4.a68: Likewise.
* algol68/execute/rowing-5.a68: Likewise.
* algol68/execute/rowing-6.a68: Likewise.
* algol68/execute/rowing-7.a68: Likewise.
* algol68/execute/rowing-8.a68: Likewise.
* algol68/execute/rowing-9.a68: Likewise.
* algol68/execute/selection-1.a68: Likewise.
* algol68/execute/selection-2.a68: Likewise.
* algol68/execute/selection-3.a68: Likewise.
* algol68/execute/selection-4.a68: Likewise.
* algol68/execute/selection-5.a68: Likewise.
* algol68/execute/selection-multiple-1.a68: Likewise.
* algol68/execute/selection-multiple-2.a68: Likewise.
* algol68/execute/serial-clause-1.a68: Likewise.
* algol68/execute/serial-clause-10.a68: Likewise.
* algol68/execute/serial-clause-2.a68: Likewise.
* algol68/execute/serial-clause-3.a68: Likewise.
* algol68/execute/serial-clause-4.a68: Likewise.
* algol68/execute/serial-clause-5.a68: Likewise.
* algol68/execute/serial-clause-6.a68: Likewise.
* algol68/execute/serial-clause-7.a68: Likewise.
* algol68/execute/serial-clause-8.a68: Likewise.
* algol68/execute/serial-clause-9.a68: Likewise.
* algol68/execute/serial-dsa-1.a68: Likewise.
* algol68/execute/serial-dsa-2.a68: Likewise.
* algol68/execute/serial-dsa-3.a68: Likewise.
* algol68/execute/serial-dsa-4.a68: Likewise.
* algol68/execute/serial-dsa-5.a68: Likewise.
* algol68/execute/serial-dsa-6.a68: Likewise.
* algol68/execute/sign-int-1.a68: Likewise.
* algol68/execute/sign-real-1.a68: Likewise.
* algol68/execute/sin-1.a68: Likewise.
* algol68/execute/skip-1.a68: Likewise.
* algol68/execute/skip-2.a68: Likewise.
* algol68/execute/skip-struct-1.a68: Likewise.
* algol68/execute/slice-indexing-1.a68: Likewise.
* algol68/execute/slice-indexing-2.a68: Likewise.
* algol68/execute/slice-indexing-3.a68: Likewise.
* algol68/execute/slice-indexing-4.a68: Likewise.
* algol68/execute/slice-indexing-5.a68: Likewise.
* algol68/execute/slice-indexing-6.a68: Likewise.
* algol68/execute/slice-indexing-7.a68: Likewise.
* algol68/execute/sqrt-1.a68: Likewise.
* algol68/execute/string-1.a68: Likewise.
* algol68/execute/string-2.a68: Likewise.
* algol68/execute/string-4.a68: Likewise.
* algol68/execute/string-break-1.a68: Likewise.
* algol68/execute/struct-self-1.a68: Likewise.
* algol68/execute/struct-self-2.a68: Likewise.
* algol68/execute/struct-self-3.a68: Likewise.
* algol68/execute/structure-display-1.a68: Likewise.
* algol68/execute/structure-display-2.a68: Likewise.
* algol68/execute/structure-display-3.a68: Likewise.
* algol68/execute/structure-display-4.a68: Likewise.
* algol68/execute/structure-display-5.a68: Likewise.
* algol68/execute/tan-1.a68: Likewise.
* algol68/execute/timesab-string-1.a68: Likewise.
* algol68/execute/trimmer-1.a68: Likewise.
* algol68/execute/trimmer-10.a68: Likewise.
* algol68/execute/trimmer-2.a68: Likewise.
* algol68/execute/trimmer-3.a68: Likewise.
* algol68/execute/trimmer-4.a68: Likewise.
* algol68/execute/trimmer-5.a68: Likewise.
* algol68/execute/trimmer-6.a68: Likewise.
* algol68/execute/trimmer-7.a68: Likewise.
* algol68/execute/trimmer-8.a68: Likewise.
* algol68/execute/trimmer-9.a68: Likewise.
* algol68/execute/trimmer-matrix-1.a68: Likewise.
* algol68/execute/trimmer-matrix-2.a68: Likewise.
* algol68/execute/trimmer-matrix-3.a68: Likewise.
* algol68/execute/trimmer-matrix-4.a68: Likewise.
* algol68/execute/trimmer-matrix-5.a68: Likewise.
* algol68/execute/trimmer-matrix-6.a68: Likewise.
* algol68/execute/trimmer-name-1.a68: Likewise.
* algol68/execute/undefined-1.a68: Likewise.
* algol68/execute/undefined-2.a68: Likewise.
* algol68/execute/undefined-3.a68: Likewise.
* algol68/execute/undefined-4.a68: Likewise.
* algol68/execute/undefined-5.a68: Likewise.
* algol68/execute/uniting-1.a68: Likewise.
* algol68/execute/uniting-2.a68: Likewise.
* algol68/execute/uniting-3.a68: Likewise.
* algol68/execute/uniting-4.a68: Likewise.
* algol68/execute/up-down-bits-1.a68: Likewise.
* algol68/execute/upb-1.a68: Likewise.
* algol68/execute/vacuum-1.a68: Likewise.
* algol68/execute/variable-declaration-1.a68: Likewise.
* algol68/execute/variable-declaration-2.a68: Likewise.
* algol68/execute/variable-declaration-3.a68: Likewise.
* algol68/execute/variable-declaration-4.a68: Likewise.
* algol68/execute/variable-declaration-5.a68: Likewise.
* algol68/execute/variable-declaration-6.a68: Likewise.
* algol68/execute/variable-declaration-heap-1.a68: Likewise.
* algol68/execute/variable-declaration-heap-2.a68: Likewise.
* algol68/execute/variable-declaration-multiple-1.a68: Likewise.
* algol68/execute/variable-declaration-multiple-2.a68: Likewise.
* algol68/execute/variable-declaration-multiple-3.a68: Likewise.
* algol68/execute/variable-declaration-multiple-4.a68: Likewise.
* algol68/execute/variable-declaration-multiple-5.a68: Likewise.
* algol68/execute/variable-declaration-multiple-6.a68: Likewise.
* algol68/execute/variable-declaration-multiple-7.a68: Likewise.
* algol68/execute/variable-declaration-multiple-8.a68: Likewise.
* algol68/execute/variable-declaration-multiple-9.a68: Likewise.
* algol68/execute/voiding-1.a68: Likewise.
* algol68/execute/widening-1.a68: Likewise.
* algol68/execute/widening-2.a68: Likewise.
* algol68/execute/widening-bits-1.a68: Likewise.
* algol68/execute/widening-bits-2.a68: Likewise.
* algol68/execute/widening-bits-3.a68: Likewise.
* algol68/execute/xor-bits-1.a68: Likewise.
* algol68/execute/environment-enquiries-8.a68: Likewise.

6 days agoa68: testsuite: execution tests 1/2
Jose E. Marchesi [Sat, 11 Oct 2025 17:56:27 +0000 (19:56 +0200)] 
a68: testsuite: execution tests 1/2

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/testsuite/ChangeLog

* algol68/execute/abs-bits-1.a68: New file.
* algol68/execute/abs-bool-1.a68: Likewise.
* algol68/execute/abs-char-1.a68: Likewise.
* algol68/execute/abs-int-1.a68: Likewise.
* algol68/execute/abs-int-negative-1.a68: Likewise.
* algol68/execute/abs-int-negative-gnu-1.a68: Likewise.
* algol68/execute/acos-1.a68: Likewise.
* algol68/execute/affirm-int-1.a68: Likewise.
* algol68/execute/and-bits-1.a68: Likewise.
* algol68/execute/andf-1.a68: Likewise.
* algol68/execute/ascription-1.a68: Likewise.
* algol68/execute/asin-1.a68: Likewise.
* algol68/execute/assert-1.a68: Likewise.
* algol68/execute/assignation-char-1.a68: Likewise.
* algol68/execute/assignation-int-1.a68: Likewise.
* algol68/execute/assignation-int-2.a68: Likewise.
* algol68/execute/assignation-int-3.a68: Likewise.
* algol68/execute/assignation-int-4.a68: Likewise.
* algol68/execute/assignation-int-5.a68: Likewise.
* algol68/execute/assignation-multiple-1.a68: Likewise.
* algol68/execute/assignation-multiple-2.a68: Likewise.
* algol68/execute/assignation-struct-1.a68: Likewise.
* algol68/execute/assignation-struct-2.a68: Likewise.
* algol68/execute/atan-1.a68: Likewise.
* algol68/execute/balancing-1.a68: Likewise.
* algol68/execute/balancing-rows-1.a68: Likewise.
* algol68/execute/bin-1.a68: Likewise.
* algol68/execute/bin-negative-1.a68: Likewise.
* algol68/execute/bin-negative-gnu-1.a68: Likewise.
* algol68/execute/boolops-1.a68: Likewise.
* algol68/execute/call-1.a68: Likewise.
* algol68/execute/call-2.a68: Likewise.
* algol68/execute/case-clause-1.a68: Likewise.
* algol68/execute/case-clause-2.a68: Likewise.
* algol68/execute/case-clause-3.a68: Likewise.
* algol68/execute/case-clause-4.a68: Likewise.
* algol68/execute/closed-clause-1.a68: Likewise.
* algol68/execute/closed-clause-2.a68: Likewise.
* algol68/execute/collateral-clause-1.a68: Likewise.
* algol68/execute/collateral-clause-2.a68: Likewise.
* algol68/execute/collateral-clause-3.a68: Likewise.
* algol68/execute/collateral-clause-4.a68: Likewise.
* algol68/execute/collateral-clause-5.a68: Likewise.
* algol68/execute/collateral-clause-6.a68: Likewise.
* algol68/execute/completer-1.a68: Likewise.
* algol68/execute/completer-10.a68: Likewise.
* algol68/execute/completer-2.a68: Likewise.
* algol68/execute/completer-3.a68: Likewise.
* algol68/execute/completer-4.a68: Likewise.
* algol68/execute/completer-5.a68: Likewise.
* algol68/execute/completer-6.a68: Likewise.
* algol68/execute/completer-7.a68: Likewise.
* algol68/execute/completer-8.a68: Likewise.
* algol68/execute/completer-9.a68: Likewise.
* algol68/execute/cond-clause-1.a68: Likewise.
* algol68/execute/cond-clause-2.a68: Likewise.
* algol68/execute/cond-clause-3.a68: Likewise.
* algol68/execute/cond-clause-4.a68: Likewise.
* algol68/execute/cond-clause-5.a68: Likewise.
* algol68/execute/cond-clause-6.a68: Likewise.
* algol68/execute/cond-clause-7.a68: Likewise.
* algol68/execute/cond-clause-8.a68: Likewise.
* algol68/execute/cond-clause-9.a68: Likewise.
* algol68/execute/conformity-clause-1.a68: Likewise.
* algol68/execute/conformity-clause-2.a68: Likewise.
* algol68/execute/conformity-clause-3.a68: Likewise.
* algol68/execute/conformity-clause-4.a68: Likewise.
* algol68/execute/conformity-clause-5.a68: Likewise.
* algol68/execute/conformity-clause-6.a68: Likewise.
* algol68/execute/conformity-clause-7.a68: Likewise.
* algol68/execute/conformity-clause-8.a68: Likewise.
* algol68/execute/conformity-clause-9.a68: Likewise.
* algol68/execute/conj-1.a68: Likewise.
* algol68/execute/cos-1.a68: Likewise.
* algol68/execute/declarer-1.a68: Likewise.
* algol68/execute/declarer-2.a68: Likewise.
* algol68/execute/deprocedure-1.a68: Likewise.
* algol68/execute/deprocedure-2.a68: Likewise.
* algol68/execute/deref-1.a68: Likewise.
* algol68/execute/deref-2.a68: Likewise.
* algol68/execute/deref-3.a68: Likewise.
* algol68/execute/deref-4.a68: Likewise.
* algol68/execute/deref-5.a68: Likewise.
* algol68/execute/deref-6.a68: Likewise.
* algol68/execute/deref-7.a68: Likewise.
* algol68/execute/deref-8.a68: Likewise.
* algol68/execute/div-int-1.a68: Likewise.
* algol68/execute/divab-real-1.a68: Likewise.
* algol68/execute/elem-bits-1.a68: Likewise.
* algol68/execute/elems-1.a68: Likewise.
* algol68/execute/elems-2.a68: Likewise.
* algol68/execute/entier-1.a68: Likewise.
* algol68/execute/environment-enquiries-1.a68: Likewise.
* algol68/execute/environment-enquiries-2.a68: Likewise.
* algol68/execute/environment-enquiries-3.a68: Likewise.
* algol68/execute/environment-enquiries-4.a68: Likewise.
* algol68/execute/environment-enquiries-5.a68: Likewise.
* algol68/execute/environment-enquiries-6.a68: Likewise.
* algol68/execute/environment-enquiries-7.a68: Likewise.
* algol68/execute/environment-enquiries-8.a68: Likewise.
* algol68/execute/eq-bits-1.a68: Likewise.
* algol68/execute/eq-char-char-1.a68: Likewise.
* algol68/execute/eq-int-1.a68: Likewise.
* algol68/execute/eq-string-1.a68: Likewise.
* algol68/execute/eq-string-stride-1.a68: Likewise.
* algol68/execute/execute.exp: Likewise.
* algol68/execute/factorial-1.a68: Likewise.
* algol68/execute/flat-assignation-1.a68: Likewise.
* algol68/execute/flat-assignation-2.a68: Likewise.
* algol68/execute/flex-1.a68: Likewise.
* algol68/execute/flex-2.a68: Likewise.
* algol68/execute/flex-3.a68: Likewise.
* algol68/execute/flex-4.a68: Likewise.
* algol68/execute/flex-5.a68: Likewise.
* algol68/execute/formula-1.a68: Likewise.
* algol68/execute/formula-2.a68: Likewise.
* algol68/execute/fsize-1.a68: Likewise.
* algol68/execute/ge-int-1.a68: Likewise.
* algol68/execute/ge-string-stride-1.a68: Likewise.
* algol68/execute/gen-flex-1.a68: Likewise.
* algol68/execute/gen-heap-1.a68: Likewise.
* algol68/execute/gen-heap-2.a68: Likewise.
* algol68/execute/gen-heap-3.a68: Likewise.
* algol68/execute/gen-heap-bool-1.a68: Likewise.
* algol68/execute/gen-heap-int-1.a68: Likewise.
* algol68/execute/gen-heap-real-1.a68: Likewise.
* algol68/execute/gen-heap-struct-1.a68: Likewise.
* algol68/execute/gen-heap-struct-2.a68: Likewise.
* algol68/execute/gen-heap-struct-3.a68: Likewise.
* algol68/execute/gen-loc-1.a68: Likewise.
* algol68/execute/gen-loc-2.a68: Likewise.
* algol68/execute/gen-loc-3.a68: Likewise.
* algol68/execute/gen-loc-4.a68: Likewise.
* algol68/execute/gen-multiple-1.a68: Likewise.
* algol68/execute/gen-union-1.a68: Likewise.
* algol68/execute/gen-union-2.a68: Likewise.
* algol68/execute/gen-union-3.a68: Likewise.
* algol68/execute/goto-1.a68: Likewise.
* algol68/execute/goto-2.a68: Likewise.
* algol68/execute/goto-3.a68: Likewise.
* algol68/execute/goto-4.a68: Likewise.
* algol68/execute/goto-5.a68: Likewise.
* algol68/execute/gt-int-1.a68: Likewise.
* algol68/execute/gt-string-stride-1.a68: Likewise.
* algol68/execute/i-1.a68: Likewise.
* algol68/execute/i-2.a68: Likewise.
* algol68/execute/identification-1.a68: Likewise.
* algol68/execute/identification-2.a68: Likewise.
* algol68/execute/identity-declaration-1.a68: Likewise.
* algol68/execute/identity-declaration-2.a68: Likewise.
* algol68/execute/identity-declaration-3.a68: Likewise.
* algol68/execute/identity-declaration-4.a68: Likewise.
* algol68/execute/identity-declaration-5.a68: Likewise.
* algol68/execute/identity-declaration-multiple-1.a68: Likewise.
* algol68/execute/identity-declaration-multiple-2.a68: Likewise.
* algol68/execute/identity-declaration-multiple-3.a68: Likewise.
* algol68/execute/identity-declaration-multiple-5.a68: Likewise.
* algol68/execute/identity-declaration-multiple-empty-1.a68: Likewise.
* algol68/execute/identity-declaration-multiple-empty-2.a68: Likewise.
* algol68/execute/identity-declaration-multiple-empty-3.a68: Likewise.
* algol68/execute/identity-declaration-multiple-empty-4.a68: Likewise.
* algol68/execute/identity-declaration-struct-1.a68: Likewise.
* algol68/execute/infinity-1.a68: Likewise.
* algol68/execute/le-ge-bits-1.a68: Likewise.
* algol68/execute/le-int-1.a68: Likewise.
* algol68/execute/le-string-stride-1.a68: Likewise.
* algol68/execute/leng-shorten-bits-1.a68: Likewise.
* algol68/execute/leng-shorten-ints-1.a68: Likewise.
* algol68/execute/leng-shorten-reals-1.a68: Likewise.
* algol68/execute/lengths-shorths-1.a68: Likewise.
* algol68/execute/lisp-1.a68: Likewise.
* algol68/execute/lisp-2.a68: Likewise.
* algol68/execute/ln-1.a68: Likewise.
* algol68/execute/log-1.a68: Likewise.
* algol68/execute/loop-1.a68: Likewise.
* algol68/execute/loop-10.a68: Likewise.
* algol68/execute/loop-11.a68: Likewise.
* algol68/execute/loop-12.a68: Likewise.
* algol68/execute/loop-13.a68: Likewise.
* algol68/execute/loop-14.a68: Likewise.
* algol68/execute/loop-2.a68: Likewise.
* algol68/execute/loop-3.a68: Likewise.
* algol68/execute/loop-4.a68: Likewise.
* algol68/execute/loop-5.a68: Likewise.
* algol68/execute/loop-6.a68: Likewise.

6 days agoa68: testsuite: infrastructure
Jose E. Marchesi [Sat, 11 Oct 2025 17:56:00 +0000 (19:56 +0200)] 
a68: testsuite: infrastructure

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/testsuite/ChangeLog

* lib/algol68-dg.exp: New file.
* lib/algol68-torture.exp: Likewise.
* lib/algol68.exp: Likewise.

6 days agoa68: libga68: build system (generated files)
Jose E. Marchesi [Sat, 11 Oct 2025 17:55:39 +0000 (19:55 +0200)] 
a68: libga68: build system (generated files)

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
ChangeLog

* libga68/config.h.in: Regenerate.
* libga68/configure: Likewise.
* libga68/Makefile.in: Likewise.
* libga68/aclocal.m4: Likewise.

6 days agoa68: libga68: build system
Jose E. Marchesi [Sat, 11 Oct 2025 17:55:19 +0000 (19:55 +0200)] 
a68: libga68: build system

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
ChangeLog

* libga68/Makefile.am: New file.
* libga68/configure.ac: Likewise.
* libga68/Makefile.in: Generate.
* libga68/aclocal.m4: Likewise.

6 days agoa68: libga68: sources, spec and misc files
Jose E. Marchesi [Sat, 11 Oct 2025 17:54:57 +0000 (19:54 +0200)] 
a68: libga68: sources, spec and misc files

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
ChangeLog

* libga68/README: New file.
* libga68/ga68-alloc.c: Likewise.
* libga68/ga68-error.c: Likewise.
* libga68/ga68-posix.c: Likewise.
* libga68/ga68-standenv.c: Likewise.
* libga68/ga68-unistr.c: Likewise.
* libga68/ga68.h: Likewise.
* libga68/libga68.c: Likewise.
* libga68/libga68.spec.in: Likewise.

6 days agoa68: low: modes
Jose E. Marchesi [Sat, 11 Oct 2025 17:54:37 +0000 (19:54 +0200)] 
a68: low: modes

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-low-moids.cc: New file.

6 days agoa68: low: units and coercions
Jose E. Marchesi [Sat, 11 Oct 2025 17:54:10 +0000 (19:54 +0200)] 
a68: low: units and coercions

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-low-coercions.cc: New file.
* algol68/a68-low-generator.cc: Likewise.
* algol68/a68-low-units.cc: Likewise.

6 days agoa68: low: ranges
Jose E. Marchesi [Sat, 11 Oct 2025 17:53:49 +0000 (19:53 +0200)] 
a68: low: ranges

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-low-ranges.cc: New file.

6 days agoa68: low: builtins
Jose E. Marchesi [Sat, 11 Oct 2025 17:53:33 +0000 (19:53 +0200)] 
a68: low: builtins

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-low-builtins.cc: New file.

6 days agoa68: low: runtime
Jose E. Marchesi [Sat, 11 Oct 2025 17:53:12 +0000 (19:53 +0200)] 
a68: low: runtime

Libcalls for operations implemented in the run-time environment.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-low-runtime.cc: New file.
* algol68/a68-low-runtime.def: Likewise.

6 days agoa68: low: clauses and declarations
Jose E. Marchesi [Sat, 11 Oct 2025 17:52:52 +0000 (19:52 +0200)] 
a68: low: clauses and declarations

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-low-clauses.cc: New file.
* algol68/a68-low-decls.cc: Likewise.

6 days agoa68: low: standard prelude
Jose E. Marchesi [Sat, 11 Oct 2025 17:52:33 +0000 (19:52 +0200)] 
a68: low: standard prelude

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-low-posix.cc: New file.
* algol68/a68-low-prelude.cc: Likewise.

6 days agoa68: low: stowed values
Jose E. Marchesi [Sat, 11 Oct 2025 17:52:14 +0000 (19:52 +0200)] 
a68: low: stowed values

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-low-multiples.cc: New file.
* algol68/a68-low-structs.cc: Likewise.
* algol68/a68-low-unions.cc: Likewise.

6 days agoa68: low: plain values
Jose E. Marchesi [Sat, 11 Oct 2025 17:51:55 +0000 (19:51 +0200)] 
a68: low: plain values

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-low-bits.cc: New file.
* algol68/a68-low-bools.cc: Likewise.
* algol68/a68-low-chars.cc: Likewise.
* algol68/a68-low-complex.cc: Likewise.
* algol68/a68-low-ints.cc: Likewise.
* algol68/a68-low-procs.cc: Likewise.
* algol68/a68-low-reals.cc: Likewise.
* algol68/a68-low-refs.cc: Likewise.
* algol68/a68-low-strings.cc: Likewise.

6 days agoa68: low: lowering entry point and misc handlers
Jose E. Marchesi [Sat, 11 Oct 2025 17:51:29 +0000 (19:51 +0200)] 
a68: low: lowering entry point and misc handlers

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-low.cc: New file.
* algol68/a68-low-misc.cc: Likewise.

6 days agoa68: parser: pragmats infrastructure
Jose E. Marchesi [Sat, 22 Nov 2025 01:19:52 +0000 (02:19 +0100)] 
a68: parser: pragmats infrastructure

This patch adds the infrastructure for adding handlers for pragmats,
along with some intial support for the "access Module" pragmat.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-parser-pragmat.cc: New file.

6 days agoa68: parser: dynamic stack usage in serial clauses
Jose E. Marchesi [Sat, 11 Oct 2025 17:50:49 +0000 (19:50 +0200)] 
a68: parser: dynamic stack usage in serial clauses

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-parser-serial-dsa.cc: New file.

6 days agoa68: parser: extraction of tags from phrases
Jose E. Marchesi [Sat, 11 Oct 2025 17:50:32 +0000 (19:50 +0200)] 
a68: parser: extraction of tags from phrases

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
Co-authored-by: Marcel van der Veer <algol68g@xs4all.nl>
6 days agoa68: parser: debug facilities
Jose E. Marchesi [Sat, 11 Oct 2025 17:50:12 +0000 (19:50 +0200)] 
a68: parser: debug facilities

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-parser-debug.cc: New file.

6 days agoa68: parser: static scope checker
Jose E. Marchesi [Sat, 11 Oct 2025 17:49:55 +0000 (19:49 +0200)] 
a68: parser: static scope checker

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
Co-authored-by: Marcel van der Veer <algol68g@xs4all.nl>
6 days agoa68: parser: symbol table management
Jose E. Marchesi [Sat, 11 Oct 2025 17:49:38 +0000 (19:49 +0200)] 
a68: parser: symbol table management

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
Co-authored-by: Marcel van der Veer <algol68g@xs4all.nl>
6 days agoa68: parser: parsing of modes
Jose E. Marchesi [Sat, 11 Oct 2025 17:49:23 +0000 (19:49 +0200)] 
a68: parser: parsing of modes

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
Co-authored-by: Marcel van der Veer <algol68g@xs4all.nl>
6 days agoa68: parser: standard prelude definitions
Jose E. Marchesi [Sat, 11 Oct 2025 17:48:58 +0000 (19:48 +0200)] 
a68: parser: standard prelude definitions

Definitions of standard identifiers, procedures and modes.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
Co-authored-by: Marcel van der Veer <algol68g@xs4all.nl>
6 days agoa68: parser: syntax check for declarers
Jose E. Marchesi [Sat, 11 Oct 2025 17:48:35 +0000 (19:48 +0200)] 
a68: parser: syntax check for declarers

Thi pass checks the syntax of formal, actual and virtual declarers.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
Co-authored-by: Marcel van der Veer <algol68g@xs4all.nl>
6 days agoa68: parser: bottom-up parser
Jose E. Marchesi [Sat, 11 Oct 2025 17:48:18 +0000 (19:48 +0200)] 
a68: parser: bottom-up parser

Bottom-up parser for the Algol 68 front-end.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
Co-authored-by: Marcel van der Veer <algol68g@xs4all.nl>
6 days agoa68: parser: parenthesis checker
Jose E. Marchesi [Sat, 11 Oct 2025 17:47:56 +0000 (19:47 +0200)] 
a68: parser: parenthesis checker

This pass makes sure all brackets (parenthesis) are matched in the
source program.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
Co-authored-by: Marcel van der Veer <algol68g@xs4all.nl>
6 days agoa68: parser: top-down parser
Jose E. Marchesi [Sat, 11 Oct 2025 17:47:34 +0000 (19:47 +0200)] 
a68: parser: top-down parser

Top-down parser for the Algol 68 front-end.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
Co-authored-by: Marcel van der Veer <algol68g@xs4all.nl>
6 days agoa68: parser: keyword tables management
Jose E. Marchesi [Sat, 11 Oct 2025 17:47:15 +0000 (19:47 +0200)] 
a68: parser: keyword tables management

This commit adds code to manage the table of keywords (bold words) in
the Algol 68 front-end.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
Co-authored-by: Marcel van der Veer <algol68g@xs4all.nl>
6 days agoa68: parser: scanner
Jose E. Marchesi [Sat, 11 Oct 2025 17:46:56 +0000 (19:46 +0200)] 
a68: parser: scanner

Lexer for the Algol 68 front-end.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
Co-authored-by: Marcel van der Veer <algol68g@xs4all.nl>
6 days agoa68: parser: AST nodes attributes/types
Jose E. Marchesi [Sat, 11 Oct 2025 17:46:33 +0000 (19:46 +0200)] 
a68: parser: AST nodes attributes/types

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-parser-attrs.def: New file.

6 days agoa68: parser: entry point
Jose E. Marchesi [Sat, 11 Oct 2025 17:46:09 +0000 (19:46 +0200)] 
a68: parser: entry point

This commit adds the parsing support code and the entry point to the
parser.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
Co-authored-by: Marcel van der Veer <algol68g@xs4all.nl>
6 days agoa68: modules imports
Jose E. Marchesi [Sat, 22 Nov 2025 01:19:31 +0000 (02:19 +0100)] 
a68: modules imports

This patch adds support for importing module interfaces, read from
object files, shared objects, archives or stand-alone files.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-imports.cc: New file.

6 days agoa68: modules exports
Jose E. Marchesi [Sat, 22 Nov 2025 01:19:13 +0000 (02:19 +0100)] 
a68: modules exports

This commit adds the code that handles the exports information for the
module definitions in prelude packets.  The exports info is generated
in a section in the output object file.

A precise description of the binary format in which the exports are
encoded is expressed in an included GNU poke pickle ga68-exports.pk.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-exports.cc: New file.
* algol68/ga68-exports.pk: Likewise.

6 days agoa68: front-end diagnostics
Jose E. Marchesi [Sat, 11 Oct 2025 17:45:45 +0000 (19:45 +0200)] 
a68: front-end diagnostics

This commit adds the diagnostics infrastructure for the Algol 68
front-end.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
Co-authored-by: Marcel van der Veer <algol68g@xs4all.nl>
gcc/ChangeLog

* algol68/a68-diagnostics.cc: New file.

6 days agoa68: unicode support routines
Jose E. Marchesi [Sat, 11 Oct 2025 17:45:27 +0000 (19:45 +0200)] 
a68: unicode support routines

This commit adds several utility functions to deal with Unicode
strings.

These functions have been adapted from the libunistring gnulib module.

gcc/ChangeLog

* algol68/a68-unistr.c: New file.

6 days agoa68: a681 compiler proper
Jose E. Marchesi [Sat, 11 Oct 2025 17:45:09 +0000 (19:45 +0200)] 
a68: a681 compiler proper

This commit adds the language hooks and the target hooks for the Algol
68 front-end, which implement the a681 compiler proper.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/a68-lang.cc: New file.

6 days agoa68: ga68 compiler driver
Jose E. Marchesi [Sat, 11 Oct 2025 17:44:39 +0000 (19:44 +0200)] 
a68: ga68 compiler driver

This commit adds the main sources for the ga68 compiler driver.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog:

* algol68/a68spec.cc: New file.
* algol68/lang-specs.h: Likewise.

6 days agoa68: gcc/algol68 misc files
Jose E. Marchesi [Sat, 11 Oct 2025 17:43:37 +0000 (19:43 +0200)] 
a68: gcc/algol68 misc files

README contains a description of the front-end, and brief instructions
for developers.

At the moment the front-end doesn't define any custom tree node, as of
yet.  gcc/algol68/a68-tree.def is a placeholder where to have these
node codes.

a68-types.h and a68.h are the main header files used by the front-end.
Together they provide data definitions and prototypes of functions
defined in the .cc files.

ga68.vw contains a revised-report like formal description of the
language implemented by this compiler.  This includes GNU extensions.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/ChangeLog

* algol68/README: New file.
* algol68/a68-tree.def: Likewise.
* algol68/a68-types.h: Likewise.
* algol68/a68.h: Likewise.
* algol68/ga68.vw: Likewise.

6 days agoDaily bump.
GCC Administrator [Sun, 30 Nov 2025 00:16:27 +0000 (00:16 +0000)] 
Daily bump.

6 days agoc++: Support template block-scope OpenMP user-defined reductions in modules [PR119864]
Nathaniel Shead [Sat, 15 Nov 2025 04:27:13 +0000 (15:27 +1100)] 
c++: Support template block-scope OpenMP user-defined reductions in modules [PR119864]

There were two issues preventing OpenMP reductions of UDTs from working
in modules.

Firstly, we were failing a number of checking asserts in the streaming
logic because the declaration is a DECL_LOCAL_DECL_P but was not
correctly added to the BLOCK of the function template.  This is because
cp_parser_omp_declare_reduction only called pushdecl when
!processing_template_decl; correcting this fixed this issue.

The second issue is that modules saw this as a function definition and
so attempted to call allocate_struct_function on it, which crashes.
Given that these reduction functions don't really behave like real
function definitions in any other way, I think the cleanest solution is
to just skip all the function definition post-processing in modules;
this seems to work to get the test functioning correctly, from what I
can see.

PR c++/119864

gcc/cp/ChangeLog:

* module.cc (trees_in::read_function_def): Don't call
post_process on OpenMP UDT reductions.
* parser.cc (cp_parser_omp_declare_reduction): Call push_decl
for block_scope, even when processing_template_decl.

gcc/testsuite/ChangeLog:

* g++.dg/modules/omp-4_a.C: New test.
* g++.dg/modules/omp-4_b.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Jakub Jelinek <jakub@redhat.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
6 days agoc++: Allow lambda expressions in template type parameters [PR116952]
Eczbek [Tue, 25 Nov 2025 05:26:50 +0000 (00:26 -0500)] 
c++: Allow lambda expressions in template type parameters [PR116952]

PR c++/116952

gcc/cp/ChangeLog:

* parser.cc (cp_parser_lambda_expression): Revert
r11-8166-ge1666ebd9ad31d change prohibiting lambda in non-type
parameter.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/lambda-uneval14.C: Revise incorrect test.
* g++.dg/cpp2a/lambda-uneval29.C: New test.

Co-authored-by: Jason Merrill <jason@redhat.com>
6 days agoc++: Limit P2795R5 handling of jumps across vacuous inits to !processing_template_dec...
Jakub Jelinek [Sat, 29 Nov 2025 16:37:58 +0000 (17:37 +0100)] 
c++: Limit P2795R5 handling of jumps across vacuous inits to !processing_template_decl [PR122758]

The extra handling of jumps across vacuous inits for -std=c++26
or -ftrivial-auto-var-init={zero,pattern} added for P2795R5 is undesirable
when processing_template_decl, because it creates labels without DECL_NAME
and GOTO_EXPRs to those and those can't be tsubsted.
I was afraid the pop_labels and check_goto_1 and check_previous_goto_1
handling might not happen again during instantiation, but clearly it does
happen fully (and has to, because whether some declaration has vacuous
initialization or not can't be decided in some cases when parsing the
template, if dependent types are involved).

So, this patch just restricts the P2795R5 PR114457 r16-4212 changes
to !processing_template_decl and adds 2 copies of the erroneous2.C testcase,
one changing the function into a function template where nothing is
dependent and another one where most of the declarations are dependent.

2025-11-29  Jakub Jelinek  <jakub@redhat.com>

PR c++/122758
* decl.cc (pop_labels): Don't call adjust_backward_gotos if
processing_template_decl.
(decl_instrument_init_bypass_p): Always return false if
processing_template_decl.
(check_goto_1): Don't push anything to direct_goto vector
if processing_template_decl.

* g++.dg/cpp26/erroneous5.C: New test.
* g++.dg/cpp26/erroneous6.C: New test.

7 days agoBump libgo SONAME
Richard Biener [Fri, 28 Nov 2025 13:33:06 +0000 (14:33 +0100)] 
Bump libgo SONAME

The following bumps the libgo SONAME to prevent PR119098 from re-appearing
for GCC 15/16.

For PR go/122802

7 days agoBump libgcobol SONAME
Richard Biener [Fri, 28 Nov 2025 13:50:38 +0000 (14:50 +0100)] 
Bump libgcobol SONAME

This bumps the libgcobol SONAME for GCC 16 since compared to GCC 15
there are removed symbols and key data structures have changed.

PR cobol/122803
libgcobol/
* configure.ac (LIBGCOBOL_VERSION): Bump to 2:0:0.
* configure: Re-generate.

7 days agodoc: make regenerate-opt-urls
Sandra Loosemore [Sat, 29 Nov 2025 03:17:01 +0000 (03:17 +0000)] 
doc: make regenerate-opt-urls

gcc/ChangeLog
* common.opt.urls: Regenerated.
* config/aarch64/aarch64.opt.urls: Regenerated.
* config/alpha/alpha.opt.urls: Regenerated.
* config/arm/arm.opt.urls: Regenerated.
* config/avr/avr.opt.urls: Regenerated.
* config/bpf/bpf.opt.urls: Regenerated.
* config/c6x/c6x.opt.urls: Regenerated.
* config/cris/cris.opt.urls: Regenerated.
* config/cris/elf.opt.urls: Regenerated.
* config/csky/csky.opt.urls: Regenerated.
* config/darwin.opt.urls: Regenerated.
* config/epiphany/epiphany.opt.urls: Regenerated.
* config/frv/frv.opt.urls: Regenerated.
* config/ft32/ft32.opt.urls: Regenerated.
* config/gcn/gcn.opt.urls: Regenerated.
* config/i386/i386.opt.urls: Regenerated.
* config/ia64/ia64.opt.urls: Regenerated.
* config/loongarch/loongarch.opt.urls: Regenerated.
* config/m68k/m68k.opt.urls: Regenerated.
* config/microblaze/microblaze.opt.urls: Regenerated.
* config/mips/mips.opt.urls: Regenerated.
* config/mmix/mmix.opt.urls: Regenerated.
* config/or1k/or1k.opt.urls: Regenerated.
* config/pa/pa.opt.urls: Regenerated.
* config/pdp11/pdp11.opt.urls: Regenerated.
* config/rs6000/rs6000.opt.urls: Regenerated.
* config/s390/s390.opt.urls: Regenerated.
* config/sparc/sparc.opt.urls: Regenerated.
* config/v850/v850.opt.urls: Regenerated.
* config/vax/vax.opt.urls: Regenerated.
* config/visium/visium.opt.urls: Regenerated.

7 days agodoc: Fix alphabetization of FRV/FT32 option documentation sections.
Sandra Loosemore [Sat, 29 Nov 2025 02:40:24 +0000 (02:40 +0000)] 
doc: Fix alphabetization of FRV/FT32 option documentation sections.

The FRV and FT32 options were incorrectly alphabetized with respect to
each other in the Options Summary, the menu for the Submodel Options
section, and in the order of their respective subsections.  Fixed
thusly.

gcc/ChangeLog
* doc/invoke.texi (Options Summary): Switch ordering of FRV
and FT32.
(Submodel Options): Likewise in the menu and section ordering.

7 days agodoc, linux: Clean up GNU/Linux option documentation [PR122243]
Sandra Loosemore [Mon, 17 Nov 2025 15:30:15 +0000 (15:30 +0000)] 
doc, linux: Clean up GNU/Linux option documentation [PR122243]

gcc/ChangeLog
PR other/122243
* doc/invoke.texi: Document -mno-android.

7 days agodoc, frv: Clean up FRV option documentation [PR122243]
Sandra Loosemore [Wed, 5 Nov 2025 15:39:14 +0000 (15:39 +0000)] 
doc, frv: Clean up FRV option documentation [PR122243]

frv.opt has a few options that have never been documented in the
manual.  In the initial commit of the FRV port (prior to the adoption
of .opt files) they were marked as "Internal debug switch" so I have
explicitly made them "Undocumented", consistently with other options
similarly marked in the original port.

The documentation changes all straightforward here, to bring this
section into conformance with conventions being applied through this
chapter of the manual.

gcc/ChangeLog
PR other/122243
* config/frv/frv.opt (mbranch-cost=): Mark as Undocumented.
(mcond-exec-insns=): Likewise.
(mcond-exec-tempss=): Likewise.
* doc/invoke.texi (Option Summary) <FRV Options>: Remove duplicate
positive/negative forms from the list.
(FRV Options): Combine documentation of positive/negative forms
where they were listed separately.  Add @opindex entries for
negative forms.

7 days agodoc, ft32: Clean up FT32 options and documentation [PR122243]
Sandra Loosemore [Mon, 17 Nov 2025 00:00:18 +0000 (00:00 +0000)] 
doc, ft32: Clean up FT32 options and documentation [PR122243]

gcc/ChangeLog
PR other/122243
* config/ft32/ft32.opt (mlra): Mark obsolete option as Undocumented.
* doc/invoke.texi (Option Summary) <FT32 Options>: Remove -mlra.
(FT32 Options): Likewise.  Add @opindex entries for negative
option forms.

7 days agodoc, fr30: Clean up FR30 option documentation [PR122243]
Sandra Loosemore [Sun, 16 Nov 2025 23:11:33 +0000 (23:11 +0000)] 
doc, fr30: Clean up FR30 option documentation [PR122243]

gcc/ChangeLog
PR other/122243
* doc/invoke.texi (FR30 Options): Add @opindex for -mno-small-model.

7 days agodoc, bpf: Clean up eBPF option documentation [PR122243]
Sandra Loosemore [Wed, 5 Nov 2025 15:38:11 +0000 (15:38 +0000)] 
doc, bpf: Clean up eBPF option documentation [PR122243]

gcc/ChangeLog
PR other/122243
* doc/invoke.texi (Option Summary) <eBPF Options>: Fix formatting
issues.  Remove redundant entry for -mno-co-re.
(eBPF Options): Add missing @opindex entries.  Combine documentation
for -mco-re and -mno-co-re.

7 days agodoc, alpha: Document missing alpha options [PR122243]
Sandra Loosemore [Tue, 18 Nov 2025 14:41:33 +0000 (14:41 +0000)] 
doc, alpha: Document missing alpha options [PR122243]

gcc/ChangeLog
PR other/122243
* config/alpha/alpha.opt (mgas): Mark as Undocumented.
* doc/invoke.texi (Option Summary) <DEC Alpha Options>:  Add
-mtls-kernel, -mtls-size=, -mlong-double-128, and -mlong-double-64.
(DEC Alpha Options): Likewise.

7 days agodoc, darwin: Clean up Darwin options and documentation [PR122243]
Sandra Loosemore [Tue, 18 Nov 2025 23:34:09 +0000 (23:34 +0000)] 
doc, darwin: Clean up Darwin options and documentation [PR122243]

The Darwin target options documentation was a bit of a mess, with several
undocumented options, some that were listed in the option summary or mentioned
in discussion of other options but not actually documented, and a large
number of options listed in darwin.opt as being obsolete.

I've undocumented all the obsolete options to streamline things, plus a few
others that seem to have been intentially undocumented or supplanted by
other options.  For the others that were probably supposed to documented,
I did my best to guess what they're for by reading the code or just
copying the documentation string in the .opt file, but it's certainly
possible I screwed some up.

gcc/ChangeLog
PR other/122243
* config/darwin.opt (findirect-virtual-calls): Mark as Undocumented.
(fterminated-vtables): Likewise.
(multi_module): Likewise.
(multiply_defined): Likewise.
(multiply_defined_unused): Likewise.
(no_dead_strip_inits_and_terms): Likewise.
(noprefixbinding): Likewise.
(nomultidefs): Likewise.
(noprebind): Likewise.
(noseglinkedit): Likewise.
(ObjC, ObjC++): Add documentation strings.
(object): Mark as Undocumented.
(prebind): Likewise.
(prebind_all_twolevel_modules): Likewise.
(private_bundle): Likewise.
(sectobjectsymbols): Likewise.
(sectorder): Likewise.
(seg_addr_table_filename): Likewise.
(segcreate): Likewise.
(seglinkedit): Likewise.
(single_module): Likewise.
(X): Likewise.
(y): Likewise.
(Mach): Likewise.
* doc/invoke.texi (Option Summary) <Darwin Options>: Improve
alphabetization of the list.  Remove obsolete/undocumented
options and add missing entries.
(Darwin Options): Add documentation for -arch, -dependency-file,
-fapple-kext, -matt-stubs, -fconstant-cfstrings, -mdynamic-no-pic,
-asm_macosx_version_min, -msymbol-stubs, -mtarget-linker,
-ObjC, -ObjC++, -Wnonportable-cfstrings.  Update the list
of options passed to the linker to remove obsolete options
and add missing ones; also move the block of @opindex entries
before the list items instead of putting it in the middle.

7 days agodoc, mingw: Clean up Cygwin and MinGW option documentation [PR122243]
Sandra Loosemore [Tue, 18 Nov 2025 05:01:02 +0000 (05:01 +0000)] 
doc, mingw: Clean up Cygwin and MinGW option documentation [PR122243]

gcc/ChangeLog
PR other/122243
* doc/invoke.texi (Option Summary) <Cygwin and MinGW Options>:
Correct spelling of -mthreads and add missing options.
(Cygwin and MinGW Options): Add @opindex for negative forms.

7 days agodoc, csky: C-SKY option documentation cleanup [PR122243]
Sandra Loosemore [Wed, 5 Nov 2025 20:54:16 +0000 (20:54 +0000)] 
doc, csky: C-SKY option documentation cleanup [PR122243]

gcc/ChangeLog
PR other/122243
* doc/invoke.texi (Option Summary) <C-SKY Options>: Remove
entries for "Undocumented" options -EB, -EL, -mhard-float,
-msoft-float, and nonexistent option -mcse-cc.
(C-SKY Options): Likewise.  Also remove references to "Undocumented"
option -mstm and uniformly index/document the -mno- forms for
consistency with other options in this section that already do so.