[gcc r13-8591] jit, Darwin: Implement library exports list.
https://gcc.gnu.org/g:045de0ab586409ce2e447ed4dd5c6786fe46254f commit r13-8591-g045de0ab586409ce2e447ed4dd5c6786fe46254f Author: Iain Sandoe Date: Sat Jan 13 17:20:47 2024 + jit, Darwin: Implement library exports list. Currently, we have no exports list for libgccjit, which means that all symbols are exported, including those from libstdc++ which is linked statically into the lib. This causes failures when the shared libstdc++ is used but some c++ symbols are satisfied from libgccjit. This implements an export file for Darwin (which is currently manually created by cross-checking libgccjit.map). Ideally we'd script this, at some point. Update libtool current and age to reflect the current ABI version (we are not bumping the SO name at this stage). This fixes a number of new failures in jit testing. gcc/jit/ChangeLog: * Make-lang.in: Implement exports list, and use a shared libgcc. * libgccjit.exports: New file. Signed-off-by: Iain Sandoe (cherry picked from commit b120e355e59142bd15d6b010461d07236288d843) Diff: --- gcc/jit/Make-lang.in | 47 ++ gcc/jit/libgccjit.exports | 219 ++ 2 files changed, 249 insertions(+), 17 deletions(-) diff --git a/gcc/jit/Make-lang.in b/gcc/jit/Make-lang.in index a65f13853ae..55079209264 100644 --- a/gcc/jit/Make-lang.in +++ b/gcc/jit/Make-lang.in @@ -55,7 +55,17 @@ else ifneq (,$(findstring darwin,$(host))) -LIBGCCJIT_AGE = 1 +# NOTE that we are building here for the host, and so tests for target- +# specific functionality will only work when host == target. This causes +# fails when building cross-compilers with different object formats (at +# least when the respective linkers do not accept the same command line +# options). Fortunately, for Darwin we can safely hard-code the relevant +# host options, since all usable linkers support them). + +LIBGCCJIT_CURRENT = 24 +LIBGCCJIT_REVISION = 0 +LIBGCCJIT_AGE = 24 +LIBGCCJIT_COMPAT = 0 LIBGCCJIT_BASENAME = libgccjit LIBGCCJIT_SONAME = \ @@ -63,18 +73,18 @@ LIBGCCJIT_SONAME = \ LIBGCCJIT_FILENAME = $(LIBGCCJIT_BASENAME).$(LIBGCCJIT_VERSION_NUM).dylib LIBGCCJIT_LINKER_NAME = $(LIBGCCJIT_BASENAME).dylib -# Conditionalize the use of the LD_VERSION_SCRIPT_OPTION and -# LD_SONAME_OPTION depending if configure found them, using $(if) -# We have to define a COMMA here, otherwise the commas in the "true" -# result are treated as separators by the $(if). +# Darwin does not have a version script option. Exported symbols are controlled +# by the following, and library versioning is done using libtool. +# We have to define a COMMA here, otherwise the commas are treated as +# separators. COMMA := , LIBGCCJIT_VERSION_SCRIPT_OPTION = \ - $(if $(LD_VERSION_SCRIPT_OPTION),\ - -Wl$(COMMA)$(LD_VERSION_SCRIPT_OPTION)$(COMMA)$(srcdir)/jit/libgccjit.map) + -Wl$(COMMA)-exported_symbols_list$(COMMA)$(srcdir)/jit/libgccjit.exports +# For Darwin host, we need a l64 or ld64-compatible linker, that uses +# -install_name to introduce this. LIBGCCJIT_SONAME_OPTION = \ - $(if $(LD_SONAME_OPTION), \ --Wl$(COMMA)$(LD_SONAME_OPTION)$(COMMA)$(LIBGCCJIT_SONAME)) + -Wl$(COMMA)-install_name$(COMMA)$(LIBGCCJIT_SONAME) LIBGCCJIT_SONAME_SYMLINK = $(LIBGCCJIT_FILENAME) LIBGCCJIT_LINKER_NAME_SYMLINK = $(LIBGCCJIT_LINKER_NAME) @@ -143,15 +153,18 @@ ifneq (,$(findstring mingw,$(target))) # Create import library LIBGCCJIT_EXTRA_OPTS = -Wl,--out-implib,$(LIBGCCJIT_IMPORT_LIB) else - ifneq (,$(findstring darwin,$(host))) -# TODO : Construct a Darwin-style symbol export file. -LIBGCCJIT_EXTRA_OPTS = -Wl,-compatibility_version,$(LIBGCCJIT_VERSION_NUM) \ - -Wl,-current_version,$(LIBGCCJIT_VERSION_NUM).$(LIBGCCJIT_MINOR_NUM).$(LIBGCCJIT_AGE) \ - $(LIBGCCJIT_VERSION_SCRIPT_OPTION) \ - $(LIBGCCJIT_SONAME_OPTION) +LIBGCCJIT_VERS = $(LIBGCCJIT_CURRENT).$(LIBGCCJIT_REVISION).$(LIBGCCJIT_AGE) +LIBGCCJIT_EXTRA_OPTS = -Wl,-current_version,$(LIBGCCJIT_VERS) \ + -Wl,-compatibility_version,$(LIBGCCJIT_COMPAT) \ + $(LIBGCCJIT_VERSION_SCRIPT_OPTION) $(LIBGCCJIT_SONAME_OPTION) +# Use the default (shared) libgcc. +JIT_LDFLAGS = $(filter-out -static-libgcc, $(LDFLAGS)) +ifeq (,$(findstring darwin8,$(host))) +JIT_LDFLAGS += -Wl,-rpath,@loader_path +endif else - +JIT_LDFLAGS = $(LDFLAGS) LIBGCCJIT_EXTRA_OPTS = $(LIBGCCJIT_VERSION_SCRIPT_OPTION) \ $(LIBGCCJIT_SONAME_OPTION) endif @@ -170,7 +183,7 @@ $(LIBGCCJIT_FILENAME): $(jit_OBJS) \ $(LIBDEPS) $(srcdir)/jit/libgccjit.map \ $(EXTRA_GCC_OBJS_EXCLUSIVE) $(jit.prev) @$(call LINK_PROGRESS,$(INDEX.jit),start) - +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ -shared \ + +$(LLINKER) $(ALL_LINKERFLAGS) $(JIT_LDFLAGS) -o $@ -shared \ $(jit_OBJS) libbackend.a libcommon-target.a libcommon.a \ $(CPPLIB)
[gcc r13-8590] libphobos, Darwin: Enable libphobos for most Darwin.
https://gcc.gnu.org/g:fe805c444cc9c6a5f21cf55ff51775d4c0b5fa00 commit r13-8590-gfe805c444cc9c6a5f21cf55ff51775d4c0b5fa00 Author: Iain Sandoe Date: Mon Apr 1 13:58:20 2024 +0100 libphobos, Darwin: Enable libphobos for most Darwin. Earlier Darwin systems can be made to work too - but they need non- standard 'binutils', so for now these must be enabled specifically. libphobos/ChangeLog: * configure.tgt: Enable libphobos for Darwin >= 12. Signed-off-by: Iain Sandoe Diff: --- libphobos/configure.tgt | 9 + 1 file changed, 9 insertions(+) diff --git a/libphobos/configure.tgt b/libphobos/configure.tgt index 1f21f63620c..65fba8f8cbe 100644 --- a/libphobos/configure.tgt +++ b/libphobos/configure.tgt @@ -27,6 +27,9 @@ case "${target}" in *-*-dragonfly*) LIBPHOBOS_SUPPORTED=yes ;; + aarch64-*-darwin2*) + LIBPHOBOS_SUPPORTED=yes + ;; aarch64*-*-linux*) LIBPHOBOS_SUPPORTED=yes ;; @@ -55,6 +58,12 @@ case "${target}" in sparc*-*-solaris2.11*) LIBPHOBOS_SUPPORTED=yes ;; + *-*-darwin9* | *-*-darwin1[01]*) + LIBDRUNTIME_ONLY=yes + ;; + x86_64-*-darwin1[2-9]* | x86_64-*-darwin2* | i?86-*-darwin1[2-7]) + LIBPHOBOS_SUPPORTED=yes + ;; x86_64-*-freebsd* | i?86-*-freebsd*) LIBPHOBOS_SUPPORTED=yes ;;
[gcc r13-8589] testsuite: Remove duplicate -lgcov [PR114034]
https://gcc.gnu.org/g:a040eea6b65456625443dcfbf6b21913f2003c8b commit r13-8589-ga040eea6b65456625443dcfbf6b21913f2003c8b Author: Iain Sandoe Date: Sun Mar 31 11:22:58 2024 +0100 testsuite: Remove duplicate -lgcov [PR114034] Duplicate library entries now cause linker warnings with newer linker versions on Darwin which leads to these tests regressing. The library is already added by the test flags so there is no need to put an extra one in the options. PR testsuite/114034 gcc/testsuite/ChangeLog: * g++.dg/gcov/gcov-dump-1.C: Remove extra -lgcov. * g++.dg/gcov/gcov-dump-2.C: Likewise. Signed-off-by: Iain Sandoe (cherry picked from commit 799a056cf804f433ce0050a5a6bf900f7a01ecb1) Diff: --- gcc/testsuite/g++.dg/gcov/gcov-dump-1.C | 2 +- gcc/testsuite/g++.dg/gcov/gcov-dump-2.C | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/g++.dg/gcov/gcov-dump-1.C b/gcc/testsuite/g++.dg/gcov/gcov-dump-1.C index f0e81e9b042..774a7269ff2 100644 --- a/gcc/testsuite/g++.dg/gcov/gcov-dump-1.C +++ b/gcc/testsuite/g++.dg/gcov/gcov-dump-1.C @@ -1,4 +1,4 @@ -/* { dg-options "-fprofile-generate -ftest-coverage -lgcov" } */ +/* { dg-options "-fprofile-generate -ftest-coverage " } */ /* { dg-do run { target native } } */ int value; diff --git a/gcc/testsuite/g++.dg/gcov/gcov-dump-2.C b/gcc/testsuite/g++.dg/gcov/gcov-dump-2.C index 6234a81a586..e748989d2c0 100644 --- a/gcc/testsuite/g++.dg/gcov/gcov-dump-2.C +++ b/gcc/testsuite/g++.dg/gcov/gcov-dump-2.C @@ -1,4 +1,4 @@ -/* { dg-options "-fprofile-generate -ftest-coverage -lgcov" } */ +/* { dg-options "-fprofile-generate -ftest-coverage " } */ /* { dg-do run { target native } } */ int value;
[gcc r14-9817] analyzer: respect GCC_COLORS in out-of-bounds diagrams [PR114588]
https://gcc.gnu.org/g:4b02dd48f531ea88587edd2b75b6e5243b4389e8 commit r14-9817-g4b02dd48f531ea88587edd2b75b6e5243b4389e8 Author: David Malcolm Date: Fri Apr 5 14:49:53 2024 -0400 analyzer: respect GCC_COLORS in out-of-bounds diagrams [PR114588] gcc/analyzer/ChangeLog: PR analyzer/114588 * access-diagram.cc (access_diagram_impl::access_diagram_impl): Replace hardcoded colors for valid_style and invalid_style with calls to text_art::get_style_from_color_cap_name. gcc/ChangeLog: PR analyzer/114588 * diagnostic-color.cc (color_dict): Add "valid" and "invalid" as color capability names. * doc/invoke.texi: Document them in description of GCC_COLORS. * text-art/style.cc: Include "diagnostic-color.h". (text_art::get_style_from_color_cap_name): New. * text-art/types.h (get_style_from_color_cap_name): New decl. Signed-off-by: David Malcolm Diff: --- gcc/analyzer/access-diagram.cc | 8 ++-- gcc/diagnostic-color.cc| 2 ++ gcc/doc/invoke.texi| 10 +- gcc/text-art/style.cc | 18 ++ gcc/text-art/types.h | 2 ++ 5 files changed, 33 insertions(+), 7 deletions(-) diff --git a/gcc/analyzer/access-diagram.cc b/gcc/analyzer/access-diagram.cc index 4cb6570e90b..85e1049bb89 100644 --- a/gcc/analyzer/access-diagram.cc +++ b/gcc/analyzer/access-diagram.cc @@ -2059,14 +2059,10 @@ public: /* Register painting styles. */ { - style valid_style; - valid_style.m_fg_color = style::named_color::GREEN; - valid_style.m_bold = true; + style valid_style (get_style_from_color_cap_name ("valid")); m_valid_style_id = m_sm.get_or_create_id (valid_style); - style invalid_style; - invalid_style.m_fg_color = style::named_color::RED; - invalid_style.m_bold = true; + style invalid_style (get_style_from_color_cap_name ("invalid")); m_invalid_style_id = m_sm.get_or_create_id (invalid_style); } diff --git a/gcc/diagnostic-color.cc b/gcc/diagnostic-color.cc index 4859f36da6a..f01a0fc2e37 100644 --- a/gcc/diagnostic-color.cc +++ b/gcc/diagnostic-color.cc @@ -101,6 +101,8 @@ static struct color_cap color_dict[] = { "diff-delete", SGR_SEQ (COLOR_FG_RED), 11, false }, { "diff-insert", SGR_SEQ (COLOR_FG_GREEN), 11, false }, { "type-diff", SGR_SEQ (COLOR_BOLD COLOR_SEPARATOR COLOR_FG_GREEN), 9, false }, + { "valid", SGR_SEQ (COLOR_BOLD COLOR_SEPARATOR COLOR_FG_GREEN), 5, false }, + { "invalid", SGR_SEQ (COLOR_BOLD COLOR_SEPARATOR COLOR_FG_RED), 7, false }, { NULL, NULL, 0, false } }; diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e2edf7a6c13..1006510fc6a 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -5244,7 +5244,7 @@ The default @env{GCC_COLORS} is error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\ quote=01:path=01;36:fixit-insert=32:fixit-delete=31:\ diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\ -type-diff=01;32:fnname=01;32:targs=35 +type-diff=01;32:fnname=01;32:targs=35:valid=01;31:invalid=01;32 @end smallexample @noindent where @samp{01;31} is bold red, @samp{01;35} is bold magenta, @@ -5327,6 +5327,14 @@ SGR substring for inserted lines within generated patches. @item type-diff= SGR substring for highlighting mismatching types within template arguments in the C++ frontend. + +@vindex valid GCC_COLORS @r{capability} +@item valid= +SGR substring for highlighting valid elements within text art diagrams. + +@vindex invalid GCC_COLORS @r{capability} +@item invalid= +SGR substring for highlighting invalid elements within text art diagrams. @end table @opindex fdiagnostics-urls diff --git a/gcc/text-art/style.cc b/gcc/text-art/style.cc index e74efe23014..5c58d432cf4 100644 --- a/gcc/text-art/style.cc +++ b/gcc/text-art/style.cc @@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see #include "text-art/selftests.h" #include "text-art/types.h" #include "color-macros.h" +#include "diagnostic-color.h" using namespace text_art; @@ -256,6 +257,23 @@ style::print_changes (pretty_printer *pp, } } +/* Look up the current SGR codes for a color capability NAME + (from GCC_COLORS or the defaults), and convert them to + a text_art::style. */ + +style +text_art::get_style_from_color_cap_name (const char *name) +{ + const char *sgr_codes = colorize_start (true, name); + gcc_assert (sgr_codes); + + /* Parse the sgr codes. We expect the resulting styled_string to be + empty; we're interested in the final style created during parsing. */ + style_manager sm; + styled_string styled_str (sm, sgr_codes); + return sm.get_style (sm.get_num_styles () - 1); +} + /* class text_art::style_manager. */ style_manager::style_manager () diff --git a/gcc/text-art/types.h b/gcc/text-art/types.h index 02de2e86122..2b9f8b387c7 100644 ---
[gcc r14-9816] testsuite, Darwin: Account for block labels in function body scans.
https://gcc.gnu.org/g:75b49c0e9012f5ecef0d32f3f6a0d8da66517576 commit r14-9816-g75b49c0e9012f5ecef0d32f3f6a0d8da66517576 Author: Iain Sandoe Date: Fri Apr 5 10:54:58 2024 +0100 testsuite, Darwin: Account for block labels in function body scans. When we have '-O3 -g' we emit a bunch of LB{B,E} local labels which were not currently being discarded, leading to some test fails. Fixed by adding this case to the ignored labels. gcc/testsuite/ChangeLog: * lib/scanasm.exp: Add 'LB*' to the local labels that are ignored for Darwin. Signed-off-by: Iain Sandoe Diff: --- gcc/testsuite/lib/scanasm.exp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/lib/scanasm.exp b/gcc/testsuite/lib/scanasm.exp index 741a5a048b8..6cf9997240d 100644 --- a/gcc/testsuite/lib/scanasm.exp +++ b/gcc/testsuite/lib/scanasm.exp @@ -895,7 +895,7 @@ proc configure_check-function-bodies { config } { # example). set up_config(fluff) {^\s*(?://)} } elseif { [istarget *-*-darwin*] } { - set up_config(fluff) {^\s*(?:\.|//|@)|^L[0-9ACESV]} + set up_config(fluff) {^\s*(?:\.|//|@)|^L[0-9ABCESV]} } else { # Skip lines beginning with labels ('.L[...]:') or other directives # ('.align', '.cfi_startproc', '.quad [...]', '.text', etc.), '//' or
[gcc r14-9815] c++: add fixed test [PR91079]
https://gcc.gnu.org/g:2b2d3a135a43cbafadd8957e0b2543f38c390437 commit r14-9815-g2b2d3a135a43cbafadd8957e0b2543f38c390437 Author: Marek Polacek Date: Fri Apr 5 13:40:33 2024 -0400 c++: add fixed test [PR91079] Fixed by r12-2975. PR c++/91079 DR 1881 gcc/testsuite/ChangeLog: * g++.dg/ext/is_std_layout5.C: New test. Diff: --- gcc/testsuite/g++.dg/ext/is_std_layout5.C | 13 + 1 file changed, 13 insertions(+) diff --git a/gcc/testsuite/g++.dg/ext/is_std_layout5.C b/gcc/testsuite/g++.dg/ext/is_std_layout5.C new file mode 100644 index 000..875f3c0948d --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/is_std_layout5.C @@ -0,0 +1,13 @@ +// PR c++/91079 +// DR 1881 - Standard-layout classes and unnamed bit-fields +// { dg-do compile { target c++11 } } + +struct A { int a : 4; }; +struct B : A { int b : 3; }; +static_assert(__is_standard_layout(A), ""); +static_assert(!__is_standard_layout(B), ""); + +struct C { int : 0; }; +struct D : C { int : 0; }; +static_assert(__is_standard_layout(C), ""); +static_assert(!__is_standard_layout(D), "");
[gcc r14-9814] aarch64: Fix whitespace in aarch64-ldp-fusion.cc:alias_walker
https://gcc.gnu.org/g:e7d015b2506a1d9e84d9f7182e42e097147527e1 commit r14-9814-ge7d015b2506a1d9e84d9f7182e42e097147527e1 Author: Alex Coplan Date: Fri Apr 5 17:53:47 2024 +0100 aarch64: Fix whitespace in aarch64-ldp-fusion.cc:alias_walker I spotted this whitespace error during the review of https://gcc.gnu.org/pipermail/gcc-patches/2024-April/648846.html gcc/ChangeLog: * config/aarch64/aarch64-ldp-fusion.cc (struct alias_walker): Fix double space after const qualifier on valid (). Diff: --- gcc/config/aarch64/aarch64-ldp-fusion.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/aarch64/aarch64-ldp-fusion.cc b/gcc/config/aarch64/aarch64-ldp-fusion.cc index 22ed95eb743..365dcf48b22 100644 --- a/gcc/config/aarch64/aarch64-ldp-fusion.cc +++ b/gcc/config/aarch64/aarch64-ldp-fusion.cc @@ -2138,7 +2138,7 @@ struct alias_walker { virtual bool conflict_p (int ) const = 0; virtual insn_info *insn () const = 0; - virtual bool valid () const = 0; + virtual bool valid () const = 0; virtual void advance () = 0; };
[gcc r14-9813] ipa: Force args obtined through pass-through maps to the expected type (PR 113964)
https://gcc.gnu.org/g:8cd0d29270d4ed86c69b80c08de66dcb6c1e22fe commit r14-9813-g8cd0d29270d4ed86c69b80c08de66dcb6c1e22fe Author: Martin Jambor Date: Fri Apr 5 18:18:39 2024 +0200 ipa: Force args obtined through pass-through maps to the expected type (PR 113964) Interactions of IPA-CP and IPA-SRA on the same data is a rather big source of issues, I'm afraid. PR 113964 is a situation where IPA-CP propagates an unsigned short in a union parameter into a function which itself calls a different function which has a same union parameter and both these union parameters are split with IPA-SRA. The leaf function however uses a signed short member of the union. In the calling function, we get the unsigned constant as the replacement for the union and it is then passed in the call without any type compatibility checks. Apparently on riscv64 it matters whether the parameter is signed or unsigned short and so the leaf function can see different values. Fixed by using useless_type_conversion_p at the appropriate place and if it fails, use force_value_to type as elsewhere in similar situations. gcc/ChangeLog: 2024-04-04 Martin Jambor PR ipa/113964 * ipa-param-manipulation.cc (ipa_param_adjustments::modify_call): Force values obtined through pass-through maps to the expected split type. gcc/testsuite/ChangeLog: 2024-04-04 Patrick O'Neill Martin Jambor PR ipa/113964 * gcc.dg/ipa/pr114247.c: New test. Diff: --- gcc/ipa-param-manipulation.cc | 6 ++ gcc/testsuite/gcc.dg/ipa/pr114247.c | 31 +++ 2 files changed, 37 insertions(+) diff --git a/gcc/ipa-param-manipulation.cc b/gcc/ipa-param-manipulation.cc index f4b5e850c2b..ad36b8389c0 100644 --- a/gcc/ipa-param-manipulation.cc +++ b/gcc/ipa-param-manipulation.cc @@ -740,6 +740,12 @@ ipa_param_adjustments::modify_call (cgraph_edge *cs, } if (repl) { + if (!useless_type_conversion_p(apm->type, repl->typed.type)) + { + repl = force_value_to_type (apm->type, repl); + repl = force_gimple_operand_gsi (, repl, + true, NULL, true, GSI_SAME_STMT); + } vargs.quick_push (repl); continue; } diff --git a/gcc/testsuite/gcc.dg/ipa/pr114247.c b/gcc/testsuite/gcc.dg/ipa/pr114247.c new file mode 100644 index 000..60aa2bc0122 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr114247.c @@ -0,0 +1,31 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fsigned-char -fno-strict-aliasing -fwrapv" } */ + +union a { + unsigned short b; + int c; + signed short d; +}; +int e, f = 1, g; +long h; +const int **i; +void j(union a k, int l, unsigned m) { + const int *a[100]; + i = [0]; + h = k.d; +} +static int o(union a k) { + k.d = -1; + while (1) +if (f) + break; + j(k, g, e); + return 0; +} +int main() { + union a n = {1}; + o(n); + if (h != -1) +__builtin_abort(); + return 0; +}
[gcc r14-9812] Regenerate common.opt.urls
https://gcc.gnu.org/g:0c22f67526d72aa451633d5212259a8f75e59a44 commit r14-9812-g0c22f67526d72aa451633d5212259a8f75e59a44 Author: Mark Wielaard Date: Fri Apr 5 17:22:16 2024 +0200 Regenerate common.opt.urls The new support for gcov modified condition/decision coverage introduced two new flags for gcc, -Wcoverage-too-many-conditions and -fcondition-coverage. But didn't regenerate the gcc/common.opt.urls. Fixes: 08a52331803f ("Add condition coverage (MC/DC)") gcc/ChangeLog: * common.opt.urls: Regenerate. Diff: --- gcc/common.opt.urls | 6 ++ 1 file changed, 6 insertions(+) diff --git a/gcc/common.opt.urls b/gcc/common.opt.urls index db4354989fc..f71ed80a34b 100644 --- a/gcc/common.opt.urls +++ b/gcc/common.opt.urls @@ -280,6 +280,9 @@ UrlSuffix(gcc/Warning-Options.html#index-Wcoverage-mismatch) Wcoverage-invalid-line-number UrlSuffix(gcc/Warning-Options.html#index-Wcoverage-invalid-line-number) +Wcoverage-too-many-conditions +UrlSuffix(gcc/Warning-Options.html#index-Wcoverage-too-many-conditions) + Wmissing-profile UrlSuffix(gcc/Warning-Options.html#index-Wmissing-profile) @@ -1057,6 +1060,9 @@ UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-abs-path) ; duplicate: 'gcc/Instrumentation-Options.html#index-fprofile-arcs' ; duplicate: 'gcc/Other-Builtins.html#index-fprofile-arcs-1' +fcondition-coverage +UrlSuffix(gcc/Instrumentation-Options.html#index-fcondition-coverage) + fprofile-dir= UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-dir)
[gcc r14-9811] aarch64: Fix bogus cnot optimisation [PR114603]
https://gcc.gnu.org/g:67cbb1c638d6ab3a9cb77e674541e2b291fb67df commit r14-9811-g67cbb1c638d6ab3a9cb77e674541e2b291fb67df Author: Richard Sandiford Date: Fri Apr 5 14:47:15 2024 +0100 aarch64: Fix bogus cnot optimisation [PR114603] aarch64-sve.md had a pattern that combined: cmpeq pb.T, pa/z, zc.T, #0 mov zd.T, pb/z, #1 into: cnotzd.T, pa/m, zc.T But this is only valid if pa.T is a ptrue. In other cases, the original would set inactive elements of zd.T to 0, whereas the combined form would copy elements from zc.T. gcc/ PR target/114603 * config/aarch64/aarch64-sve.md (@aarch64_pred_cnot): Replace with... (@aarch64_ptrue_cnot): ...this, requiring operand 1 to be a ptrue. (*cnot): Require operand 1 to be a ptrue. * config/aarch64/aarch64-sve-builtins-base.cc (svcnot_impl::expand): Use aarch64_ptrue_cnot for _x operations that are predicated with a ptrue. Represent other _x operations as fully-defined _m operations. gcc/testsuite/ PR target/114603 * gcc.target/aarch64/sve/acle/general/cnot_1.c: New test. Diff: --- gcc/config/aarch64/aarch64-sve-builtins-base.cc| 25 ++ gcc/config/aarch64/aarch64-sve.md | 22 +-- .../gcc.target/aarch64/sve/acle/general/cnot_1.c | 23 3 files changed, 50 insertions(+), 20 deletions(-) diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.cc b/gcc/config/aarch64/aarch64-sve-builtins-base.cc index 257ca5bf6ad..5be2315a3c6 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-base.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-base.cc @@ -517,15 +517,22 @@ public: expand (function_expander ) const override { machine_mode mode = e.vector_mode (0); -if (e.pred == PRED_x) - { - /* The pattern for CNOT includes an UNSPEC_PRED_Z, so needs - a ptrue hint. */ - e.add_ptrue_hint (0, e.gp_mode (0)); - return e.use_pred_x_insn (code_for_aarch64_pred_cnot (mode)); - } - -return e.use_cond_insn (code_for_cond_cnot (mode), 0); +machine_mode pred_mode = e.gp_mode (0); +/* The underlying _x pattern is effectively: + +dst = src == 0 ? 1 : 0 + + rather than an UNSPEC_PRED_X. Using this form allows autovec + constructs to be matched by combine, but it means that the + predicate on the src == 0 comparison must be all-true. + + For simplicity, represent other _x operations as fully-defined _m + operations rather than using a separate bespoke pattern. */ +if (e.pred == PRED_x + && gen_lowpart (pred_mode, e.args[0]) == CONSTM1_RTX (pred_mode)) + return e.use_pred_x_insn (code_for_aarch64_ptrue_cnot (mode)); +return e.use_cond_insn (code_for_cond_cnot (mode), + e.pred == PRED_x ? 1 : 0); } }; diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md index eca8623e587..0434358122d 100644 --- a/gcc/config/aarch64/aarch64-sve.md +++ b/gcc/config/aarch64/aarch64-sve.md @@ -3363,24 +3363,24 @@ ;; - CNOT ;; - -;; Predicated logical inverse. -(define_expand "@aarch64_pred_cnot" +;; Logical inverse, predicated with a ptrue. +(define_expand "@aarch64_ptrue_cnot" [(set (match_operand:SVE_FULL_I 0 "register_operand") (unspec:SVE_FULL_I [(unspec: [(match_operand: 1 "register_operand") - (match_operand:SI 2 "aarch64_sve_ptrue_flag") + (const_int SVE_KNOWN_PTRUE) (eq: - (match_operand:SVE_FULL_I 3 "register_operand") - (match_dup 4))] + (match_operand:SVE_FULL_I 2 "register_operand") + (match_dup 3))] UNSPEC_PRED_Z) - (match_dup 5) - (match_dup 4)] + (match_dup 4) + (match_dup 3)] UNSPEC_SEL))] "TARGET_SVE" { -operands[4] = CONST0_RTX (mode); -operands[5] = CONST1_RTX (mode); +operands[3] = CONST0_RTX (mode); +operands[4] = CONST1_RTX (mode); } ) @@ -3389,7 +3389,7 @@ (unspec:SVE_I [(unspec: [(match_operand: 1 "register_operand") - (match_operand:SI 5 "aarch64_sve_ptrue_flag") + (const_int SVE_KNOWN_PTRUE) (eq: (match_operand:SVE_I 2 "register_operand") (match_operand:SVE_I 3 "aarch64_simd_imm_zero"))] @@ -11001,4 +11001,4 @@ GET_MODE (operands[2])); return "sel\t%0., %3, %2., %1."; } -) \ No newline at end of file +) diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c new file mode
[gcc r14-9810] c-family: remove dead #undef
https://gcc.gnu.org/g:e4d074321bcafa6504ee6b77754b4450a4622f9d commit r14-9810-ge4d074321bcafa6504ee6b77754b4450a4622f9d Author: Marek Polacek Date: Thu Apr 4 19:28:00 2024 -0400 c-family: remove dead #undef The #undef was added in r0-90320-g100d537d7a7b5c but it never did anything. gcc/c-family/ChangeLog: * c-warn.cc (warn_about_parentheses): Remove an #undef. Diff: --- gcc/c-family/c-warn.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/gcc/c-family/c-warn.cc b/gcc/c-family/c-warn.cc index 8168696fa45..bff87be05ae 100644 --- a/gcc/c-family/c-warn.cc +++ b/gcc/c-family/c-warn.cc @@ -2176,7 +2176,6 @@ warn_about_parentheses (location_t loc, enum tree_code code, } return; } -#undef NOT_A_BOOLEAN_EXPR_P } /* If LABEL (a LABEL_DECL) has not been used, issue a warning. */
[gcc r14-9809] c++: constexpr error with fn redecl in local scope [PR111132]
https://gcc.gnu.org/g:8c9063825ce726fcbbc067d8a6d062cc2d4acf5e commit r14-9809-g8c9063825ce726fcbbc067d8a6d062cc2d4acf5e Author: Marek Polacek Date: Tue Apr 2 12:59:38 2024 -0400 c++: constexpr error with fn redecl in local scope [PR32] We evaluate constexpr functions on the original, pre-genericization bodies. That means that the function body we're evaluating will not have gone through cp_genericize_r's "Map block scope extern declarations to visible declarations with the same name and type in outer scopes if any". Here: constexpr bool bar() { return true; } // #1 constexpr bool foo() { constexpr bool bar(void); // #2 return bar(); } it means that we: 1) register_constexpr_fundef (#1) 2) cp_genericize (#1) nothing interesting happens 3) register_constexpr_fundef (foo) does copy_fn, so we have two copies of the BIND_EXPR 4) cp_genericize (foo) this remaps #2 to #1, but only on one copy of the BIND_EXPR 5) retrieve_constexpr_fundef (foo) we find it, no problem 6) retrieve_constexpr_fundef (#2) and here #2 isn't found in constexpr_fundef_table, because we're working on the BIND_EXPR copy where #2 wasn't mapped to #1 so we fail. We've only registered #1. It should work to use DECL_LOCAL_DECL_ALIAS (which used to be extern_decl_map). We evaluate constexpr functions on pre-cp_fold bodies to avoid diagnostic problems, but the remapping I'm proposing should not interfere with diagnostics. This is not a problem for a global scope redeclaration; there we go through duplicate_decls which keeps the DECL_UID: DECL_UID (olddecl) = olddecl_uid; and DECL_UID is what constexpr_fundef_hasher::hash uses. PR c++/32 gcc/cp/ChangeLog: * constexpr.cc (get_function_named_in_call): Use cp_get_fndecl_from_callee. * cvt.cc (cp_get_fndecl_from_callee): If there's a DECL_LOCAL_DECL_ALIAS, use it. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/constexpr-redeclaration3.C: New test. * g++.dg/cpp0x/constexpr-redeclaration4.C: New test. Diff: --- gcc/cp/constexpr.cc | 10 -- gcc/cp/cvt.cc | 18 -- gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration3.C | 13 + gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration4.C | 14 ++ 4 files changed, 47 insertions(+), 8 deletions(-) diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index fa346fe01c9..410ccdf597f 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -702,16 +702,14 @@ build_constexpr_constructor_member_initializers (tree type, tree body) /* We have an expression tree T that represents a call, either CALL_EXPR or AGGR_INIT_EXPR. If the call is lexically to a named function, - retrun the _DECL for that function. */ + return the _DECL for that function. */ static tree get_function_named_in_call (tree t) { - tree fun = cp_get_callee (t); - if (fun && TREE_CODE (fun) == ADDR_EXPR - && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL) -fun = TREE_OPERAND (fun, 0); - return fun; + tree callee = cp_get_callee (t); + tree fun = cp_get_fndecl_from_callee (callee, /*fold*/false); + return fun ? fun : callee; } /* Subroutine of check_constexpr_fundef. BODY is the body of a function diff --git a/gcc/cp/cvt.cc b/gcc/cp/cvt.cc index cbed847b343..db086c017e8 100644 --- a/gcc/cp/cvt.cc +++ b/gcc/cp/cvt.cc @@ -1001,8 +1001,22 @@ cp_get_fndecl_from_callee (tree fn, bool fold /* = true */) { if (fn == NULL_TREE) return fn; + + /* We evaluate constexpr functions on the original, pre-genericization + bodies. So block-scope extern declarations have not been mapped to + declarations in outer scopes. Use the namespace-scope declaration, + if any, so that retrieve_constexpr_fundef can find it (PR32). */ + auto fn_or_local_alias = [] (tree f) +{ + if (DECL_LOCAL_DECL_P (f)) + if (tree alias = DECL_LOCAL_DECL_ALIAS (f)) + if (alias != error_mark_node) + return alias; + return f; +}; + if (TREE_CODE (fn) == FUNCTION_DECL) -return fn; +return fn_or_local_alias (fn); tree type = TREE_TYPE (fn); if (type == NULL_TREE || !INDIRECT_TYPE_P (type)) return NULL_TREE; @@ -1013,7 +1027,7 @@ cp_get_fndecl_from_callee (tree fn, bool fold /* = true */) || TREE_CODE (fn) == FDESC_EXPR) fn = TREE_OPERAND (fn, 0); if (TREE_CODE (fn) == FUNCTION_DECL) -return fn; +return fn_or_local_alias (fn); return NULL_TREE; } diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration3.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration3.C new file mode 100644 index 000..2b41b456fc3 --- /dev/null +++
[gcc r14-9808] vect: Don't clear base_misaligned in update_epilogue_loop_vinfo [PR114566]
https://gcc.gnu.org/g:a844095e17c1a5aada1364c6f6eaade87ead463c commit r14-9808-ga844095e17c1a5aada1364c6f6eaade87ead463c Author: Jakub Jelinek Date: Fri Apr 5 14:56:14 2024 +0200 vect: Don't clear base_misaligned in update_epilogue_loop_vinfo [PR114566] The following testcase is miscompiled, because in the vectorized epilogue the vectorizer assumes it can use aligned loads/stores (if the base decl gets alignment increased), but it actually doesn't increase that. This is because r10-4203-g97c1460367 added the hunk following patch removes. The explanation feels reasonable, but actually it is not true as the testcase proves. The thing is, we vectorize the main loop with 64-byte vectors and the corresponding data refs have base_alignment 16 (the a array has DECL_ALIGN 128) and offset_alignment 32. Now, because of the offset_alignment 32 rather than 64, we need to use unaligned loads/stores in the main loop (and ditto in the first load/store in vectorized epilogue). But the second load/store in the vectorized epilogue uses only 32-byte vectors and because it is a multiple of offset_alignment, it checks if we could increase alignment of the a VAR_DECL, the function returns true, sets base_misaligned = true and says the access is then aligned. But when update_epilogue_loop_vinfo clears base_misaligned with the assumption that the var had to have the alignment increased already, the update of DECL_ALIGN doesn't happen anymore. Now, I'd think this base_alignment = false was needed before r10-4030-gd2db7f7901 change was committed where it incorrectly overwrote DECL_ALIGN even if it was already larger, rather than just always increasing it. But with that change in, it doesn't make sense to me anymore. Note, the testcase is latent on the trunk, but reproduces on the 13 branch. 2024-04-05 Jakub Jelinek PR tree-optimization/114566 * tree-vect-loop.cc (update_epilogue_loop_vinfo): Don't clear base_misaligned. * gcc.target/i386/avx512f-pr114566.c: New test. Diff: --- gcc/testsuite/gcc.target/i386/avx512f-pr114566.c | 34 gcc/tree-vect-loop.cc| 8 +- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr114566.c b/gcc/testsuite/gcc.target/i386/avx512f-pr114566.c new file mode 100644 index 000..abfab1bfcd5 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512f-pr114566.c @@ -0,0 +1,34 @@ +/* PR tree-optimization/114566 */ +/* { dg-do run } */ +/* { dg-options "-O3 -mavx512f" } */ +/* { dg-additional-options "-fstack-protector-strong" { target fstack_protector } } */ +/* { dg-require-effective-target avx512f } */ + +#define AVX512F +#include "avx512f-helper.h" + +__attribute__((noipa)) int +foo (float x, float y) +{ + float a[8][56]; + __builtin_memset (a, 0, sizeof (a)); + + for (int j = 0; j < 8; j++) +for (int k = 0; k < 56; k++) + { + float b = k * y; + if (b < 0.) + b = 0.; + if (b > 0.) + b = 0.; + a[j][k] += b; + } + + return __builtin_log (x); +} + +void +TEST (void) +{ + foo (86.25f, 0.625f); +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 984636edbc5..3ffcac8c613 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -11590,9 +11590,7 @@ find_in_mapping (tree t, void *context) corresponding dr_vec_info need to be reconnected to the EPILOGUE's stmt_vec_infos, their statements need to point to their corresponding copy, if they are gather loads or scatter stores then their reference needs to be - updated to point to its corresponding copy and finally we set - 'base_misaligned' to false as we have already peeled for alignment in the - prologue of the main loop. */ + updated to point to its corresponding copy. */ static void update_epilogue_loop_vinfo (class loop *epilogue, tree advance) @@ -11736,10 +11734,6 @@ update_epilogue_loop_vinfo (class loop *epilogue, tree advance) } DR_STMT (dr) = STMT_VINFO_STMT (stmt_vinfo); stmt_vinfo->dr_aux.stmt = stmt_vinfo; - /* The vector size of the epilogue is smaller than that of the main loop -so the alignment is either the same or lower. This means the dr will -thus by definition be aligned. */ - STMT_VINFO_DR_INFO (stmt_vinfo)->base_misaligned = false; } epilogue_vinfo->shared->datarefs_copy.release ();
[gcc r14-9807] modula2: Add m2.install-dvi in gcc/m2/Make-lang.in
https://gcc.gnu.org/g:6f1005649ff5f544eefba29ba4fb121dba0c6683 commit r14-9807-g6f1005649ff5f544eefba29ba4fb121dba0c6683 Author: Christophe Lyon Date: Thu Apr 4 16:15:12 2024 + modula2: Add m2.install-dvi in gcc/m2/Make-lang.in m2 has a m2.dvi build rule, but lacks the m2.install-dvi one. 2024-04-04 Christophe Lyon gcc/m2/ * Make-lang.in (m2.install-dvi): New rule. Diff: --- gcc/m2/Make-lang.in | 12 1 file changed, 12 insertions(+) diff --git a/gcc/m2/Make-lang.in b/gcc/m2/Make-lang.in index e56240b4c44..0abd8ce1455 100644 --- a/gcc/m2/Make-lang.in +++ b/gcc/m2/Make-lang.in @@ -162,6 +162,18 @@ m2.dvi: doc/m2.dvi doc/m2.dvi: $(TEXISRC) $(objdir)/m2/images/gnu.eps $(TEXI2DVI) -c -I $(objdir)/m2 -I $(srcdir)/doc/include -o $@ $(srcdir)/doc/gm2.texi +M2_DVIFILES = doc/m2.dvi + +m2.install-dvi: $(M2_DVIFILES) + @$(NORMAL_INSTALL) + test -z "$(dvidir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(dvidir)/gcc" + @list='$(M2_DVIFILES)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(dvi__strip_dir) \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/gcc/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/gcc/$$f"; \ + done + doc/m2.ps: doc/m2.dvi dvips -o $@ $<
[gcc r14-9806] nvptx: In mkoffload.cc, call diagnostic_color_init + gcc_init_libintl: Restore 'libgomp.c/reverse-of
https://gcc.gnu.org/g:679f81a32f706645f45900fdb1659fb5fe607f77 commit r14-9806-g679f81a32f706645f45900fdb1659fb5fe607f77 Author: Thomas Schwinge Date: Fri Apr 5 14:04:53 2024 +0200 nvptx: In mkoffload.cc, call diagnostic_color_init + gcc_init_libintl: Restore 'libgomp.c/reverse-offload-sm30.c' testing With commit 7520a4992c94254016085a461c58c972497c4483 "nvptx: In mkoffload.cc, call diagnostic_color_init + gcc_init_libintl", we regressed: [-PASS:-]{+FAIL:+} libgomp.c/reverse-offload-sm30.c at line 15 (test for warnings, line ) [-PASS:-]{+FAIL:+} libgomp.c/reverse-offload-sm30.c (test for excess errors) libgomp/ * testsuite/libgomp.c/reverse-offload-sm30.c: Set 'GCC_COLORS' to the empty string. Diff: --- libgomp/testsuite/libgomp.c/reverse-offload-sm30.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libgomp/testsuite/libgomp.c/reverse-offload-sm30.c b/libgomp/testsuite/libgomp.c/reverse-offload-sm30.c index 7f10fd4ded9..cae75f03462 100644 --- a/libgomp/testsuite/libgomp.c/reverse-offload-sm30.c +++ b/libgomp/testsuite/libgomp.c/reverse-offload-sm30.c @@ -12,4 +12,7 @@ main () return 0; } +/* The 'mkoffload's currently don't obey '-fno-diagnostics-color' etc., so use a different way to effect the same thing: + { dg-set-compiler-env-var GCC_COLORS "" } + ..., so that the following regexp doesn't have to deal with color code escape sequences. */ /* { dg-warning "'omp requires reverse_offload' requires at least 'sm_35' for '-foffload-options=nvptx-none=-march=' - disabling offload-code generation for this device type" "" { target *-*-* } 0 } */
[gcc r14-9805] Revert "Fix ICE with -g and -std=c23 related to incomplete types [PR114361]"
https://gcc.gnu.org/g:8057f9aa1f7e70490064de796d7a8d42d446caf8 commit r14-9805-g8057f9aa1f7e70490064de796d7a8d42d446caf8 Author: Martin Uecker Date: Fri Apr 5 12:14:56 2024 +0200 Revert "Fix ICE with -g and -std=c23 related to incomplete types [PR114361]" This reverts commit 871bb5ad2dd56343d80b6a6d269e85efdce5 because it breaks LTO and needs a bit more work. See PR 114574. Diff: --- gcc/c/c-decl.cc | 1 - gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c | 14 -- gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c | 13 - gcc/testsuite/gcc.dg/pr114361.c | 11 --- 4 files changed, 39 deletions(-) diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index f2083b9d96f..c747abe9f4e 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -9722,7 +9722,6 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes, C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t); C_TYPE_VARIABLY_MODIFIED (x) = C_TYPE_VARIABLY_MODIFIED (t); C_TYPE_INCOMPLETE_VARS (x) = NULL_TREE; - TYPE_CANONICAL (x) = TYPE_CANONICAL (t); } /* Update type location to the one of the definition, instead of e.g. diff --git a/gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c b/gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c deleted file mode 100644 index 82d652569e9..000 --- a/gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c +++ /dev/null @@ -1,14 +0,0 @@ -/* { dg-do compile } - * { dg-options "-std=c23 -g" } */ - -struct a; -typedef struct a b; - -void g() { -struct a { b* x; }; -} - -struct a { b* x; }; - - - diff --git a/gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c b/gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c deleted file mode 100644 index bc47a04ece5..000 --- a/gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c +++ /dev/null @@ -1,13 +0,0 @@ -/* { dg-do compile } - * { dg-options "-std=c23 -g" } */ - -struct a; -typedef struct a b; - -void f() { - extern struct a { b* x; } t; -} - -extern struct a { b* x; } t; - - diff --git a/gcc/testsuite/gcc.dg/pr114361.c b/gcc/testsuite/gcc.dg/pr114361.c deleted file mode 100644 index 0f3feb53566..000 --- a/gcc/testsuite/gcc.dg/pr114361.c +++ /dev/null @@ -1,11 +0,0 @@ -/* PR c/114361 */ -/* { dg-do compile } */ -/* { dg-options "-std=gnu23 -g" } */ - -void f() -{ -typedef struct foo bar; -typedef __typeof( ({ (struct foo { bar *x; }){ }; }) ) wuz; -struct foo { wuz *x; }; -} -
[gcc r14-9804] libatomic: Regenerate configure properly
https://gcc.gnu.org/g:9627cbbadbb935943c3d8336c057a021bbac2000 commit r14-9804-g9627cbbadbb935943c3d8336c057a021bbac2000 Author: Jakub Jelinek Date: Fri Apr 5 12:15:06 2024 +0200 libatomic: Regenerate configure properly Seems configure hasn't been regenerated properly after the last acinclude.m4 change. 2024-04-05 Jakub Jelinek * configure: Regenerate. Diff: --- libatomic/configure | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libatomic/configure b/libatomic/configure index 8ca72f08dfd..32cb3ecac26 100755 --- a/libatomic/configure +++ b/libatomic/configure @@ -11456,7 +11456,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11461 "configure" +#line 11459 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11562,7 +11562,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11567 "configure" +#line 11565 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -14739,6 +14739,7 @@ _ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : @@ -16031,6 +16032,7 @@ if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi + if test -z "${LIBAT_BUILD_VERSIONED_SHLIB_TRUE}" && test -z "${LIBAT_BUILD_VERSIONED_SHLIB_FALSE}"; then as_fn_error $? "conditional \"LIBAT_BUILD_VERSIONED_SHLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5
gcc-wwwdocs branch master updated. 8765e9c73ae14cfad592b8a3885fe1bcc3ff96cd
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "gcc-wwwdocs". The branch, master has been updated via 8765e9c73ae14cfad592b8a3885fe1bcc3ff96cd (commit) via 62e1ccdc5b71b7fa9162c336c0964d13c6fa5c79 (commit) from c9e275660a19c804dd8c591c73cb9b169a9d7573 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log - commit 8765e9c73ae14cfad592b8a3885fe1bcc3ff96cd Author: Tobias Burnus Date: Fri Apr 5 11:58:56 2024 +0200 gcc-14/changes.html: Mention OpenACC 2.7's 'readonly' modifier diff --git a/htdocs/gcc-14/changes.html b/htdocs/gcc-14/changes.html index 6ddd2788..2d8968cf 100644 --- a/htdocs/gcc-14/changes.html +++ b/htdocs/gcc-14/changes.html @@ -121,7 +121,9 @@ a work-in-progress. OpenACC 2.7: The self clause was added to be used on compute constructs and the default clause for data - constructs. + constructs. Additionally, the readonly modifier is now + handled in the copyin clause and cache + directive. OpenACC 3.2: The following API routines are now available in Fortran using the openacc module or the openacc_lib.h header file: commit 62e1ccdc5b71b7fa9162c336c0964d13c6fa5c79 Author: Tobias Burnus Date: Fri Apr 5 11:58:06 2024 +0200 gcc-14/changes.html: Comment out of empty sections diff --git a/htdocs/gcc-14/changes.html b/htdocs/gcc-14/changes.html index 1cc68430..6ddd2788 100644 --- a/htdocs/gcc-14/changes.html +++ b/htdocs/gcc-14/changes.html @@ -748,7 +748,7 @@ __asm (".global __flmap_lock" "\n\t" -Operating Systems + @@ -994,7 +994,7 @@ it emits: -Other significant improvements + --- Summary of changes: htdocs/gcc-14/changes.html | 8 +--- 1 file changed, 5 insertions(+), 3 deletions(-) hooks/post-receive -- gcc-wwwdocs
[gcc r14-9803] middle-end/114599 - fix bitmap allocation for check_ifunc_callee_symtab_nodes
https://gcc.gnu.org/g:9ab8fdfeef5b1a47b358e08a98177b2fad65fed9 commit r14-9803-g9ab8fdfeef5b1a47b358e08a98177b2fad65fed9 Author: Richard Biener Date: Fri Apr 5 10:16:41 2024 +0200 middle-end/114599 - fix bitmap allocation for check_ifunc_callee_symtab_nodes There's no default bitmap obstack during global CTORs, so allocate the bitmap locally. PR middle-end/114599 PR gcov-profile/114115 * symtab.cc (ifunc_ref_map): Do not use auto_bitmap. (is_caller_ifunc_resolver): Optimize bitmap_bit_p/bitmap_set_bit pair. (symtab_node::check_ifunc_callee_symtab_nodes): Properly allocate ifunc_ref_map here. Diff: --- gcc/symtab.cc | 11 +++ 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/gcc/symtab.cc b/gcc/symtab.cc index 3256133891d..3b018ab3ea2 100644 --- a/gcc/symtab.cc +++ b/gcc/symtab.cc @@ -1383,7 +1383,7 @@ check_ifunc_resolver (cgraph_node *node, void *data) return false; } -static auto_bitmap ifunc_ref_map; +static bitmap ifunc_ref_map; /* Return true if any caller of NODE is an ifunc resolver. */ @@ -1404,9 +1404,8 @@ is_caller_ifunc_resolver (cgraph_node *node) /* Skip if it has been visited. */ unsigned int uid = e->caller->get_uid (); - if (bitmap_bit_p (ifunc_ref_map, uid)) + if (!bitmap_set_bit (ifunc_ref_map, uid)) continue; - bitmap_set_bit (ifunc_ref_map, uid); if (is_caller_ifunc_resolver (e->caller)) { @@ -1437,6 +1436,9 @@ symtab_node::check_ifunc_callee_symtab_nodes (void) { symtab_node *node; + bitmap_obstack_initialize (NULL); + ifunc_ref_map = BITMAP_ALLOC (NULL); + FOR_EACH_SYMBOL (node) { cgraph_node *cnode = dyn_cast (node); @@ -1455,7 +1457,8 @@ symtab_node::check_ifunc_callee_symtab_nodes (void) cnode->called_by_ifunc_resolver = true; } - bitmap_clear (ifunc_ref_map); + BITMAP_FREE (ifunc_ref_map); + bitmap_obstack_release (NULL); } /* Verify symbol table for internal consistency. */
[gcc r14-9802] testsuite: Fix up error on gcov1.d
https://gcc.gnu.org/g:effd947fcc2bbe0dfbc7d470eab4bc65bd9b46c8 commit r14-9802-geffd947fcc2bbe0dfbc7d470eab4bc65bd9b46c8 Author: Jakub Jelinek Date: Fri Apr 5 11:05:01 2024 +0200 testsuite: Fix up error on gcov1.d On Fri, Feb 23, 2024 at 12:18:00PM +0100, Jørgen Kvalsvik wrote: > This is a mostly straight port from the gcov-19.c tests from the C test > suite. The only notable differences from C to D are that D flips the > true/false outcomes for loop headers, and the D front end ties loop and > ternary conditions to slightly different locus. > > The test for >64 conditions warning is disabled as it either needs > support from the testing framework or a something similar to #pragma GCC > diagnostic push to not cause a test failure from detecting a warning. > > gcc/testsuite/ChangeLog: > > * gdc.dg/gcov.exp: New test. > * gdc.dg/gcov1.d: New test. Unfortunately, this doesn't work. I see PASS: gdc.dg/gcov1.d execution test ERROR: (DejaGnu) proc "run-gcov conditions { --conditions gcov1.d }" does not exist. The error code is TCL LOOKUP COMMAND run-gcov The info on the error is: invalid command name "run-gcov" while executing "::tcl_unknown run-gcov conditions { --conditions gcov1.d }" ("uplevel" body line 1) invoked from within "uplevel 1 ::tcl_unknown $args" ERROR: gdc.dg/gcov1.d : error executing dg-final: invalid command name "run-gcov" both on x86_64-linux and i686-linux. The problem is that the test hasn't been added to a new directory, but to a directory already covered by a different *.exp file - dg.exp. Now, usually either one has a test directory like gcc.misc-tests where there are many *.exp files but each *.exp file globs for its own tests, or there is one *.exp per directory and covers everything in there. By having both dg.exp and gcov.exp in the same directory with dg.exp covering all *.d files in there and gcov gcov*.d in there, the gcov*.d tests are tested twice, once using the dg.exp driver and once using gcov.exp driver. With the latter, they do work properly, with the former they don't because gcov.exp lib file isn't loaded and so run-gcov isn't available. The following patch fixes that similarly how g++.dg/modules/modules.exp, gcc.target/s390/s390.exp or gcc.target/i386/i386.exp deal with that, by pruning some tests based on glob patterns from the list. 2024-04-05 Jakub Jelinek * gdc.dg/dg.exp: Prune gcov*.d from the list of tests to run. * gdc.dg/gcov.exp: Update copyright years. Diff: --- gcc/testsuite/gdc.dg/dg.exp | 3 ++- gcc/testsuite/gdc.dg/gcov.exp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/gdc.dg/dg.exp b/gcc/testsuite/gdc.dg/dg.exp index 786b5359b85..50527c5372f 100644 --- a/gcc/testsuite/gdc.dg/dg.exp +++ b/gcc/testsuite/gdc.dg/dg.exp @@ -30,7 +30,8 @@ dg-init # Main loop. gdc-dg-runtest [lsort \ - [glob -nocomplain $srcdir/$subdir/*.d ] ] "" $DEFAULT_DFLAGS + [prune [glob -nocomplain $srcdir/$subdir/*.d ] \ + $srcdir/$subdir/gcov*.d ] ] "" $DEFAULT_DFLAGS # All done. dg-finish diff --git a/gcc/testsuite/gdc.dg/gcov.exp b/gcc/testsuite/gdc.dg/gcov.exp index 4218771b208..ea70ea85f28 100644 --- a/gcc/testsuite/gdc.dg/gcov.exp +++ b/gcc/testsuite/gdc.dg/gcov.exp @@ -1,4 +1,4 @@ -# Copyright (C) 1997-2023 Free Software Foundation, Inc. +# Copyright (C) 1997-2024 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
[gcc r14-9801] c++: Fix ICE with weird copy assignment operator [PR114572]
https://gcc.gnu.org/g:592536eb3c0a97a55b1019ff0216ef77e6ca847e commit r14-9801-g592536eb3c0a97a55b1019ff0216ef77e6ca847e Author: Jakub Jelinek Date: Fri Apr 5 09:31:28 2024 +0200 c++: Fix ICE with weird copy assignment operator [PR114572] While ctors/dtors don't return anything (undeclared void or this pointer on arm) and copy assignment operators normally return a reference to *this, it isn't invalid to return uselessly some class object which might need destructing, but the OpenMP clause handling code wasn't expecting that. The following patch fixes that. 2024-04-05 Jakub Jelinek PR c++/114572 * cp-gimplify.cc (cxx_omp_clause_apply_fn): Call build_cplus_new on build_call_a result if it has class type. * testsuite/libgomp.c++/pr114572.C: New test. Diff: --- gcc/cp/cp-gimplify.cc| 4 libgomp/testsuite/libgomp.c++/pr114572.C | 24 2 files changed, 28 insertions(+) diff --git a/gcc/cp/cp-gimplify.cc b/gcc/cp/cp-gimplify.cc index f3baae6ade7..ab5acd18c99 100644 --- a/gcc/cp/cp-gimplify.cc +++ b/gcc/cp/cp-gimplify.cc @@ -2480,6 +2480,8 @@ cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2) TREE_PURPOSE (parm), fn, i - is_method, tf_warning_or_error); t = build_call_a (fn, i, argarray); + if (MAYBE_CLASS_TYPE_P (TREE_TYPE (t))) + t = build_cplus_new (TREE_TYPE (t), t, tf_warning_or_error); t = fold_convert (void_type_node, t); t = fold_build_cleanup_point_expr (TREE_TYPE (t), t); append_to_statement_list (t, ); @@ -2513,6 +2515,8 @@ cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2) TREE_PURPOSE (parm), fn, i - is_method, tf_warning_or_error); t = build_call_a (fn, i, argarray); + if (MAYBE_CLASS_TYPE_P (TREE_TYPE (t))) + t = build_cplus_new (TREE_TYPE (t), t, tf_warning_or_error); t = fold_convert (void_type_node, t); return fold_build_cleanup_point_expr (TREE_TYPE (t), t); } diff --git a/libgomp/testsuite/libgomp.c++/pr114572.C b/libgomp/testsuite/libgomp.c++/pr114572.C new file mode 100644 index 000..21d5c847f8d --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/pr114572.C @@ -0,0 +1,24 @@ +// PR c++/114572 +// { dg-do run } +// { dg-options "-fopenmp -O0" } + +#include + +struct S +{ + S () : s (0) {} + ~S () {} + S operator= (const S ) { s = x.s; return *this; } + int s; +}; + +int +main () +{ + S s; + #pragma omp parallel for lastprivate(s) + for (int i = 0; i < 10; ++i) +s.s = i; + if (s.s != 9) +abort (); +}
[gcc r14-9800] go: Add go.install-dvi rule in go/Make-lang.in
https://gcc.gnu.org/g:12b04452b40d49bb5322653cb5716b1ebf71b73d commit r14-9800-g12b04452b40d49bb5322653cb5716b1ebf71b73d Author: Christophe Lyon Date: Thu Apr 4 16:18:52 2024 + go: Add go.install-dvi rule in go/Make-lang.in go has a go.dvi build rule, but lacks the go.install-dvi one. 2024-04-04 Christophe Lyon gcc/go/ * Make-lang.in (go.install-dvi): New rule. Diff: --- gcc/go/Make-lang.in | 10 ++ 1 file changed, 10 insertions(+) diff --git a/gcc/go/Make-lang.in b/gcc/go/Make-lang.in index 9a31eafa219..5c569a40389 100644 --- a/gcc/go/Make-lang.in +++ b/gcc/go/Make-lang.in @@ -175,6 +175,16 @@ go.install-pdf: doc/gccgo.pdf $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \ done +go.install-dvi: doc/gccgo.dvi + @$(NORMAL_INSTALL) + test -z "$(dvidir)" || $(mkinstalldirs) "$(DESTDIR)$(dvidir)/gcc" + @for p in doc/gccgo.dvi; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(dvi__strip_dir) \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/gcc/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/gcc/$$f"; \ + done + go.install-html: $(build_htmldir)/go @$(NORMAL_INSTALL) test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)"