Commit Graph

190323 Commits

Author SHA1 Message Date
GCC Administrator e8decbe783 Daily bump. 2021-12-12 00:16:45 +00:00
Antoni Boucher c6b7f68bfd libgccjit: Add support for TLS variable [PR95415]
2021-12-11  Antoni Boucher  <bouanto@zoho.com>

gcc/jit/
	PR target/95415
	* docs/topics/compatibility.rst (LIBGCCJIT_ABI_17): New ABI
	tag.
	* docs/topics/expressions.rst: Add document for the function
	gcc_jit_lvalue_set_tls_model.
	* jit-playback.h: New function (set_tls_model).
	* jit-recording.c: New function (set_tls_model), new
	variables (tls_models and tls_model_enum_strings) and support
	for setting the tls model.
	* jit-recording.h: New function (set_tls_model) and new
	field m_tls_model.
	* libgccjit.c: New function (gcc_jit_lvalue_set_tls_model).
	* libgccjit.h: New function (gcc_jit_lvalue_set_tls_model)
	and new enum (gcc_jit_tls_model).
	* libgccjit.map (LIBGCCJIT_ABI_17): New ABI tag.

gcc/testsuite/
	PR target/95415
	* jit.dg/all-non-failing-tests.h: Add test-tls.c.
	* jit.dg/test-tls.c: New test.
2021-12-11 19:01:15 -05:00
Antoni Boucher 611fdb0fc5 libgccjit: Add support for types used by atomic builtins [PR96066] [PR96067]
2021-12-11  Antoni Boucher  <bouanto@zoho.com>

gcc/jit/
	PR target/96066
	PR target/96067
	* jit-builtins.c: Implement missing types for builtins.
	* jit-recording.c:: Allow sending a volatile const void * as
	argument.
	* jit-recording.h: New functions (is_volatile, is_const) and
	allow comparing qualified types.

gcc/testsuite/
	PR target/96066
	PR target/96067
	* jit.dg/all-non-failing-tests.h: Add test-builtin-types.c.
	* jit.dg/test-builtin-types.c
	* jit.dg/test-error-bad-assignment.c
	* jit.dg/test-fuzzer.c: Add fuzzing for type qualifiers.

Signed-off-by: Antoni Boucher <bouanto@zoho.com>
2021-12-11 17:19:35 -05:00
Harald Anlauf 7e913caad0 Fortran: fix checking of elemental functions of type CLASS
gcc/fortran/ChangeLog:

	PR fortran/103606
	* resolve.c (resolve_fl_procedure): Do not access CLASS components
	before class container has been built.

gcc/testsuite/ChangeLog:

	PR fortran/103606
	* gfortran.dg/pr103606.f90: New test.
2021-12-11 21:49:47 +01:00
Jan Hubicka 2f217f7218 Avoid updating hot bb threshold in call speculation code
This patch removes apparently forgotten debugging hack (which got in during
the speculative call patchset) which reduces hot bb threshold.  This does not
make sense since it is set and reset randomly as the summaries are processed.
One problem is that we set the BB threshold to make certain BBs hot and hten
unrolling or vectorization may reduce it to some fraction of the count that
makes it cold.  We may want to add some buffer and divide the value by,
say 32, but that shoulid be done independently of speculative calls.

gcc/ChangeLog:

2021-12-11  Jan Hubicka  <hubicka@ucw.cz>

	* ipa-profile.c (ipa_profile): Do not update hot bb threshold.
2021-12-11 20:45:02 +01:00
Jan Hubicka c87ff87586 Fix handling of thunks in ipa-modref
Thunks are not transparent for ipa-modref summary since it cares about offsets
from pointer parameters and also for virtual thunk about the read from memory
in there.  We however use function_or_virtual_thunk_symbol to get the summary
that may lead to wrong code (and does in two testsuite testcases with patch
I am working on).  This is a first aid fix that is bacportable to gcc 11.
We could easily produce summary for thunk on demand.  I will look into it
incrementally.  It is not very important since we usually inline the thunk when
we devirutalize...

Bootstrapped/regtested x86_64-linux, will commit it shortly.

gcc/ChangeLog:

2021-12-11  Jan Hubicka  <hubicka@ucw.cz>

	* ipa-modref.c (get_modref_function_summary): Use ultimate_alias_target.
	(ignore_edge): Likewise.
	(compute_parm_map): Likewise.
	(modref_propagate_in_scc): Likewise.
	(modref_propagate_flags_in_scc): Likewise.
2021-12-11 20:37:18 +01:00
Rasmus Villemoes 365c7c6ac5 libgcc: vxcrtstuff.c: make ctor/dtor functions static
When the translation unit itself creates pointers to the ctors/dtors
in a specific section handled by the linker (whether .init_array or
.ctors.*), there's no reason for the functions to have external
linkage. That ends up polluting the symbol table in the running
kernel.

This makes vxcrtstuff.c on par with the generic crtstuff.c which also
defines e.g. frame_dummy and __do_global_dtors_aux static.

libgcc/
	* config/vxcrtstuff.c: Make constructor and destructor
	functions static when possible.
2021-12-11 14:33:29 +01:00
Rasmus Villemoes 8b2885dee5 libgcc: vxcrtstuff.c: remove ctor/dtor declarations
These declarations prevent the priority given in the
constructor/destructor attributes from taking effect, thus emitting
the function pointers in the ordinary (lowest-priority)
.init_array/.fini_array sections.

libgcc/
	* config/vxcrtstuff.c: Remove constructor/destructor
	declarations.
2021-12-11 14:33:18 +01:00
Jason Merrill 2e8067041d libstdc++: check length in string append [PR103534]
In the testcase for 103534 we get a warning about append leading to memcpy
of a very large number of bytes overflowing the buffer.  This turns out to
be because we weren't calling _M_check_length for string append.  Rather
than do that directly, let's go through the public pointer append that calls
it.

	PR c++/103534

libstdc++-v3/ChangeLog:

	* include/bits/basic_string.h (append (basic_string)): Call pointer
	append instead of _M_append directly.

gcc/testsuite/ChangeLog:

	* g++.dg/warn/Wstringop-overflow-8.C: New test.
2021-12-10 23:58:13 -05:00
GCC Administrator 0bceef1671 Daily bump. 2021-12-11 00:16:30 +00:00
Iain Sandoe b504917e43 libgcc, Darwin: Update darwin10 unwinder shim dependencies.
We include libgcc_tm.h to provide a prototype for this shim
so add that to the make dependencies.

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

libgcc/ChangeLog:

	* config/t-darwin: Add libgcc_tm.h to the dependencies
	for darwin10-unwind-find-enc-func.
2021-12-10 23:15:15 +00:00
David Malcolm a2f4b4b76c jit: set DECL_CONTEXT of RESULT_DECL [PR103562]
libgccjit was failing to set the DECL_CONTEXT of function RESULT_DECLs,
leading to them failing to be properly handled by the inlining machinery.
Fixed thusly.

gcc/jit/ChangeLog:
	PR jit/103562
	* jit-playback.c (gcc::jit::playback::context::new_function): Set
	DECL_CONTEXT of the result_decl.

gcc/testsuite/ChangeLog:
	PR jit/103562
	* jit.dg/all-non-failing-tests.h: Add comment about...
	* jit.dg/test-pr103562.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-12-10 17:51:24 -05:00
Jason Merrill 1e2eee7b29 symtab: fix comment typo
gcc/ChangeLog:

	* symtab.c (symtab_node::equal_address_to): Fix comment typo.
2021-12-10 14:45:23 -05:00
Marek Polacek 0df964ba28 c++: Add test for C++23 auto(x)
I was curious if our auto(x) works in contexts like bit-field width
and similar.  It appears that it does.  Might be worth adding a test
for it.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp23/auto-fncast10.C: New test.
2021-12-10 13:09:13 -05:00
Harald Anlauf bb6a1ebb85 Fortran: fix check for pointer dummy arguments with INTENT(IN)
gcc/fortran/ChangeLog:

	PR fortran/103418
	* check.c (variable_check): Replace previous check of procedure
	dummy arguments with INTENT(IN) attribute when passed to intrinsic
	procedures by gfc_check_vardef_context.
	* expr.c (gfc_check_vardef_context): Correct check of INTENT(IN)
	dummy arguments for the case of sub-components of a CLASS pointer.

gcc/testsuite/ChangeLog:

	PR fortran/103418
	* gfortran.dg/move_alloc_8.f90: Adjust error messages.
	* gfortran.dg/pointer_intent_9.f90: New test.
2021-12-10 18:53:09 +01:00
Jakub Jelinek 982a2c9b78 libstdc++: Add std::time_get %r support [PR71367]
This incremental patch adds std::time_get %r support (%p was added already
in the previous patch).  The _M_am_fm_format method previously in the header
unfortunately had wrong arguments and so was useless, so the largest
complication in this patch is exporting a new symbol in the right symbol
version.

2021-12-10  Jakub Jelinek  <jakub@redhat.com>

	PR libstdc++/71367
	* config/locale/dragonfly/time_members.cc (_M_initialize_timepunct):
	Initialize "C" _M_am_pm_format to %I:%M:%S %p rather than empty
	string.
	* config/locale/gnu/time_members.cc (_M_initialize_timepunct):
	Likewise.
	* config/locale/generic/time_members.cc (_M_initialize_timepunct):
	Likewise.
	* include/bits/locale_facets_nonio.h (_M_am_pm_format): New method.
	* include/bits/locale_facets_nonio.tcc (_M_extract_via_format): Handle
	%r.
	* config/abi/pre/gnu.ver (GLIBCXX_3.4.30): Export _M_am_pm_format
	with const _CharT** argument, ensure it isn't exported in GLIBCXX_3.4.
	* testsuite/22_locale/time_get/get/char/71367.cc: New test.
	* testsuite/22_locale/time_get/get/wchar_t/71367.cc: New test.
2021-12-10 17:05:04 +01:00
Jakub Jelinek c82e492616 libstdc++: Some time_get fixes [PR78714]
The following patch is an attempt to fix various time_get related issues.
Sorry, it is long...

One of them is PR78714.  It seems _M_extract_via_format has been written
with how strftime behaves in mind rather than how strptime behaves.
There is a significant difference between the two, for strftime %a and %A
behave differently etc., one emits an abbreviated name, the other full name.
For strptime both should behave the same and accept both the full or
abbreviated names.  This needed large changes in _M_extract_name, which
was assuming the names are unique and names aren't prefixes of other names.
The _M_extract_name changes allow to deal with those cases.  As can be
seen in the new testcase, e.g. for %b and english locales we need to
accept both Apr and April.  If we see Apr in the input, the code looks
at whether there is end right after those 3 chars or if the next
character doesn't match characters in the longer names; in that case
it accepts the abbreviated name.  Otherwise, if the input has Apri, it
commits to a longer name and fails if it isn't April.  This behavior is
different from strptime, which for %bix and Aprix accepts it, but for
an input iterator I'm afraid we can't do better, we can't go back (peek
more than the current character).

Another case is that %d and %e in strptime should work the same, while
previously the code was hardcoding that %d would be 01 to 31 and %e
 1 to 31 (with leading 0 replaced by space).
strptime POSIX 2009 documentation seems to suggest for numbers it should
accept up to the specified number of digits rather than exactly that number
of digits:
The pattern "[x,y]" indicates that the value shall fall within the range
given (both bounds being inclusive), and the maximum number of characters scanned
shall be the maximum required to represent any value in the range without leading
zeros.
so by my reading "1:" is valid for "%H:".
The glibc strptime implementation actually skips any amount of whitespace
in all the cases where a number is read, my current patch skips a single
space at the start of %d/%e but not the others, but doesn't subtract the
space length from the len characters.
One option would be to do the leading whitespace skipping in _M_extract_num
but take it into account how many digits can be read.
This matters for " 12:" and "%H:", but not for " 12:" and " %H:"
as in the latter case the space in the format string results in all the
whitespace at the start to be consumed.
Note, the allowing of a single digit rather than 2 changes a behavior in
other ways, e.g. when seeing 40 in a number for range [1, 31] we reject
it as before, but previously we'd keep *ret == '4' because it was assuming
it has to be 2 digits and 40 isn't valid, so we know error already on the
4, but now we accept the 4 as value and fail iff the next format string
doesn't match the 0.
Also, previously it wasn't really checking the number was in the right
range, it would accept 00 for [1, 31] numbers, or would accept 39.

Another thing is that %I was parsing 12 as tm_hour 12 rather than as tm_hour 0
like e.g. glibc does.

Another thing is that %t was matching a single tab and %n a single newline,
while strptime docs say it skips over whitespace (again, zero or more).

Another thing is that %p wasn't handled at all, I think this was the main
cause of
FAIL: 22_locale/time_get/get_time/char/2.cc execution test
FAIL: 22_locale/time_get/get_time/char/wrapped_env.cc execution test
FAIL: 22_locale/time_get/get_time/char/wrapped_locale.cc execution test
FAIL: 22_locale/time_get/get_time/wchar_t/2.cc execution test
FAIL: 22_locale/time_get/get_time/wchar_t/wrapped_env.cc execution test
FAIL: 22_locale/time_get/get_time/wchar_t/wrapped_locale.cc execution test
before this patch, because en_HK* locales do use %I and %p in it.
The patch handles %p only if it follows %I (i.e. when the hour is parsed
first), which is the more usual case (in glibc):
grep '%I' localedata/locales/* | grep '%I.*%p' | wc -l
282
grep '%I' localedata/locales/* | grep -v '%I.*%p' | wc -l
44
grep '%I' localedata/locales/* | grep -v '%p' | wc -l
17
The last case use %P instead of %p in t_fmt_ampm, not sure if that one
is never used by strptime because %P isn't handled by strptime.
Anyway, the right thing to handle even %p%I would be to pass some state
around through all the _M_extract_via_format calls like glibc passes
  struct __strptime_state
  {
    unsigned int have_I : 1;
    unsigned int have_wday : 1;
    unsigned int have_yday : 1;
    unsigned int have_mon : 1;
    unsigned int have_mday : 1;
    unsigned int have_uweek : 1;
    unsigned int have_wweek : 1;
    unsigned int is_pm : 1;
    unsigned int want_century : 1;
    unsigned int want_era : 1;
    unsigned int want_xday : 1;
    enum ptime_locale_status decided : 2;
    signed char week_no;
    signed char century;
    int era_cnt;
  } s;
around.  That is for the %p case used like:
  if (s.have_I && s.is_pm)
    tm->tm_hour += 12;
during finalization, but handles tons of other cases which it is unclear
if libstdc++ needs or doesn't need to handle, e.g. strptime if one
specifies year and yday computes wday/mon/day from it, etc. basically for
the redundant fields computes them from other fields if those have been
parsed and are sufficient to determine it.
To do this we'd need to change ABI for the _M_extract_via_format,
though sure, we could add a wrapper around the new one with the old
arguments that would just use a dummy state.  And we'd need a new
_M_whatever finalizer that would do those post parsing tweaks.

Also, %% wasn't handled.

For a whitespace in the strings there was inconsistent behavior,
_M_extract_via_format would require exactly that whitespace char (say
matching space, or matching tab), while the caller follows what
https://eel.is/c++draft/locale.time.get#members-8.5 says, that
when encountering whitespace it skips whitespace in the format and
then whitespace in the input if any.  I've changed _M_extract_via_format
to skip whitespace in the input (looping over format isn't IMHO necessary,
because next iteration of the loop will handle that too).

Tested on x86_64-linux by make check-target-libstdc++-v3, ok for trunk
if it passes full bootstrap/regtest?

For the new 3.cc testcases, I have included hopefully correctly
corresponding C testcase using strptime in an attachment, and to the
extent where it can be compared (e.g. strptime on failure just
returns NULL, doesn't tell where it exactly stopped) I think the
only difference is that
  str = "Novembur";
  format = "%bembur";
  ret = strptime (str, format, &time);
case where strptime accepts it but there is no way to do it with input
operator.

I admit I don't have libc++ or other STL libraries around to be able to
check how much the new 3.cc matches or disagrees with other implementations.

Now, the things not handled by this patch but which should be fixed (I
probably need to go back to compiler work) or at least looked at:

1) seems %j, %r, %U, %w and %W aren't handled (not sure if all of them
   are already in POSIX 2009 or some are later)
2) I haven't touched the %y/%Y/%C and year handling stuff, that is
   definitely not matching what POSIX 2009 says:
       C       All  but the last two digits of the year {2}; leading zeros shall be permitted but shall not be required. A leading '+' or '−' character shall be permitted before
               any leading zeros but shall not be required.
       y       The  last  two  digits of the year. When format contains neither a C conversion specifier nor a Y conversion specifier, values in the range [69,99] shall refer to
               years 1969 to 1999 inclusive and values in the range [00,68] shall refer to years 2000 to 2068 inclusive; leading zeros shall be permitted but shall  not  be  re‐
               quired. A leading '+' or '−' character shall be permitted before any leading zeros but shall not be required.

               Note:     It is expected that in a future version of this standard the default century inferred from a 2-digit year will change. (This would apply to all commands
                         accepting a 2-digit year as input.)
       Y       The full year {4}; leading zeros shall be permitted but shall not be required. A leading '+' or '−' character shall be permitted  before  any  leading  zeros  but
               shall not be required.
   I've tried to avoid making changes to _M_extract_num for these as well
   to keep current status quo (the __len == 4 cases).  One thing is what
   to do for things with %C %y and/or %Y in the formats, another thing
   is what to do in the methods that directly perform _M_extract_num
   for year
3) the above question what to do for leading whitespace of any numbers
   being parsed
4) the %p%I issue mentioned above and generally what to do if we
   pass state and have finalizers at the end of parsing
5) _M_extract_via_format is also inconsistent with its callers on handling
   the non-whitespace characters in between format specifiers, the caller
   follows https://eel.is/c++draft/locale.time.get#members-8.6 and does
   case insensitive comparison:
          // TODO real case-insensitive comparison
          else if (__ctype.tolower(*__s) == __ctype.tolower(*__fmt) ||
                   __ctype.toupper(*__s) == __ctype.toupper(*__fmt))
   while _M_extract_via_format only compares exact characters:
              // Verify format and input match, extract and discard.
              if (__format[__i] == *__beg)
                ++__beg;
   (another question is if there is a better way how to do real
   case-insensitive comparison of 2 characters and whether we e.g. need
   to handle the Turkish i/İ and ı/I which have different number of bytes
   in UTF-8)
6) _M_extract_name does something weird for case-sensitivity,
      // NB: Some of the locale data is in the form of all lowercase
      // names, and some is in the form of initially-capitalized
      // names. Look for both.
      if (__beg != __end)
   and
            if (__c == __names[__i1][0]
                || __c == __ctype.toupper(__names[__i1][0]))
   for the first letter while just
        __name[__pos] == *__beg
   on all the following letters.  strptime says:
   In case a text string (such as the name of a day of the week or a month
   name) is to be matched, the comparison is case insensitive.
   so supposedly all the _M_extract_name comparisons should be case
   insensitive.

2021-12-10  Jakub Jelinek  <jakub@redhat.com>

	PR libstdc++/78714
	* include/bits/locale_facets_nonio.tcc (_M_extract_via_format):
	Mention in function comment it interprets strptime format string
	rather than strftime.  Handle %a and %A the same by accepting both
	full and abbreviated names.  Similarly handle %h, %b and %B the same.
	Handle %d and %e the same by accepting possibly optional single space
	and 1 or 2 digits.  For %I store tm_hour 0 instead of tm_hour 12.  For
	%t and %n skip any whitespace.  Handle %p and %%.  For whitespace in
	the string skip any whitespace.
	(_M_extract_num): For __len == 2 accept 1 or 2 digits rather than
	always 2.  Don't punt early if __value * __mult is larget than __max
	or smaller than __min - __mult, instead punt if __value > __max.
	At the end verify __value is in between __min and __max and punt
	otherwise.
	(_M_extract_name): Allow non-unique names or names which are prefixes
	of other names.  Don't recompute lengths of names for every character.
	* testsuite/22_locale/time_get/get/char/3.cc: New test.
	* testsuite/22_locale/time_get/get/wchar_t/3.cc: New test.
	* testsuite/22_locale/time_get/get_date/char/12791.cc (test01): Use
	62 instead 60 and expect 6 to be accepted and thus *ret01 == '2'.
	* testsuite/22_locale/time_get/get_date/wchar_t/12791.cc (test01):
	Similarly.
	* testsuite/22_locale/time_get/get_time/char/2.cc (test02): Add " PM"
	to the string.
	* testsuite/22_locale/time_get/get_time/char/5.cc (test01): Expect
	tm_hour 1 rather than 0.
	* testsuite/22_locale/time_get/get_time/wchar_t/2.cc (test02): Add
	" PM" to the string.
	* testsuite/22_locale/time_get/get_time/wchar_t/5.cc (test01): Expect
	tm_hour 1 rather than 0.
2021-12-10 17:03:58 +01:00
Douglas B Rupp 57b291c27e Fix inaccuracies in VxWorks LINK_SPEC
-v needs to generate a -V not -v, as most/all other ports do.

The latter causes collect2 to output exec'd collect-ld with same
switches, which in turn causes a configure test which accumulates
linker switches to contain duplicates, leading to a libstdc++ configure
failure in some configurations.

-V is typically used in such contexts to output the available
emulations.

The change also removes reference to %(link_target), long obsolete.

2021-12-07  Doug Rupp  <rupp@adacore.com>

	* config/vxworks.h (LINK_SPEC): Remove %(link_target).
	Change %{v:-v} to %{v:-V}.
2021-12-10 14:21:20 +00:00
Olivier Hainque 8a404feb40 Remove assignment to STMP_FIXINC from t-vxworks
Just redundant with the default Makefile setting.

2021-12-07  Olivier Hainque  <hainque@adacore.com>

	* config/t-vxworks: Remove assignment to STMP_FIXINC.
2021-12-10 14:21:20 +00:00
Jonathan Wakely ffb632517f libstdc++: Guard mutex and condvar with gthreads macro [PR103638]
A mutex and condition variable is used for timed waits on atomics if
there is no "platform wait" (e.g. futex) supported. But the use of those
types wasn't guarded by the _GLIBCXX_HAS_GTHREADS macro, causing errors
for --disable-threads builds. This fix allows <atomic> to work on
targets with futexes but no gthreads.

libstdc++-v3/ChangeLog:

	PR libstdc++/103638
	* include/bits/atomic_timed_wait.h: Check _GLIBCXX_HAS_GTHREADS
	before using std::mutex and std::__condvar.
2021-12-10 14:05:46 +00:00
Jonathan Wakely ca1c7065e9 libstdc++: Fix definition of _GLIBCXX_NO_SLEEP config macro
If no OS function to sleep (e.g. nanosleep, usleep, Win32 Sleep etc.) is
available then configure defines the macro NO_SLEEP. But this will not
get prefixed with "_GLIBCXX_" because include/Makefile.am only does that
for macros beginning with "HAVE_". The configure script should define
_GLIBCXX_NO_SLEEP instead (which is what the code actually checks for).

libstdc++-v3/ChangeLog:

	* acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Add _GLIBCXX_
	prefix to NO_SLEEP macro.
	* config.h.in: Regenerate.
	* configure: Regenerate.
2021-12-10 14:05:46 +00:00
Rasmus Villemoes 68fd247e15 Replace t-ppccomm by t-vxworks in libgcc/config/rs6000
This removes ibm-ldouble.c and a few eabi crt files from the build
closure, which were producing objects we don't use anyway.

2021-12-07  Rasmus Villemoes  <rv@rasmusvillemoes.dk>

libgcc/
	* config/rs6000/t-vxworks: New file.
	* config.host (powerpc*-*-vxworks*): Use it instead of
	t-ppccomm.
2021-12-10 13:17:22 +00:00
Martin Liska 207775085f param: Add missing . in description.
Fixes:
FAIL: compiler driver --help=param option(s): "^ +-.*[^:.]$" absent from output: "
--param=max-inline-functions-called-once-loop-depth= Maximum loop depth of a call which is considered for inlining functions called once"
FAIL: compiler driver --help=params option(s): "[^.]$" absent from output: "e"

gcc/ChangeLog:

	* params.opt: Add missing dot.
2021-12-10 13:31:21 +01:00
Roger Sayle 2a1c3b69c0 PR ipa/103601: ICE compiling CSiBE in ipa-modref's insert_kill.
This patch fixes PR ipa/103061 which is P1 regression that shows up as
an ICE in ipa-modref-tree.c's insert_kill when compiling the CSiBE
benchmark.  I believe the underlying cause is that the new kill tracking
functionality wasn't anticipating memory accesses that are zero bits
wide!?.  The failing source code (test case) contains the unusual lines:
typedef struct { } spinlock_t;
and
q->lock = (spinlock_t) { };
Making spinlock_t larger, or removing the assignment work around the issue.

The one line patch below to useful_for_kill_p teaches IPA that a memory
write is only useful as a "kill" if it is more than zero bits wide.
In theory, the existing known_size_p (size) test is now redundant, as
poly_int64 currently uses the value -1 for unknown size values,
but the proposed change makes the semantics clear, and defends against
possible future changes in representation.

2021-12-10  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	PR ipa/103601
	* ipa-modref-tree.h (useful_for_kill_p): Zero width accesses aren't
	useful for kill tracking.

gcc/testsuite/ChangeLog
	PR ipa/103601
	* gcc.dg/ipa/pr103601.c: New test case.
2021-12-10 12:02:04 +00:00
Andrew Stubbs 4a87a8e4b1 amdgcn: Change offload variable table discovery
Up to now the libgomp GCN plugin has been finding the offload variables
by using a symbol lookup, but the AMD runtime requires that the symbols are
global for that to work. This was ensured by mkoffload as a post-procssing
step, but the LLVM 13 assembler no longer accepts this in the case where the
variable was previously declared differently.

This patch switches to locating the symbols directly from the
offload_var_table, which means that only one symbol needs to be forced
global.

This changes breaks the libgomp image compatibility so GOMP_VERSION_GCN has
also been bumped.

gcc/ChangeLog:

	* config/gcn/mkoffload.c (process_asm): Process the variable table
	completely differently.
	(process_obj): Encode the varaible data differently.

include/ChangeLog:

	* gomp-constants.h (GOMP_VERSION_GCN): Bump.

libgomp/ChangeLog:

	* plugin/plugin-gcn.c (struct gcn_image_desc): Remove global_variables.
	(GOMP_OFFLOAD_load_image): Locate the offload variables via the
	table, not individual symbols.
2021-12-10 10:45:09 +00:00
Joel Hutton a5f65cf7ad pr103523: Check for PLUS/MINUS support
Check for PLUS_EXPR/MINUS_EXPR support in vectorizable_induction.
PR103523 is an ICE on valid code:

void d(float *a, float b, int c) {
    float e;
    for (; c; c--, e += b)
      a[c] = e;
}

This is due to not checking for PLUS_EXPR support, which is missing in
VNx2sf mode. This causes an ICE at expand time. This patch adds a check
for support in vectorizable_induction.

gcc/ChangeLog:

	PR tree-optimization/103523
	* tree-vect-loop.c (vectorizable_induction): Check for
	PLUS_EXPR/MINUS_EXPR support.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/pr103523.c: New test.
2021-12-10 10:28:01 +00:00
Jonathan Wakely db184a3453 libstdc++: Fix diagnostic pragma push that should be pop
libstdc++-v3/ChangeLog:

	* include/bits/char_traits.h: Change pragma push to pop.
2021-12-10 09:06:37 +00:00
Iain Buclaw 9c7d5e8846 d: Merge upstream dmd 3982604c5, druntime bc58b1e9, phobos 12329adb6.
D front-end changes:

    - Import dmd mainline development.
    - Split off enum EXP from enum TOK.
    - Integer promotions now follow C integral promotions by default.
    - Implements __traits(initSymbol).
    - Lowering of array construction has been moved to the dmd
      front-end.
    - Fix segfault in dmd.lexer from unaligned read (PR103529).

Druntime changes:

    - Import druntime mainline development.
    - Define SIG_BLOCK for Solaris (PR103528).

Phobos changes:

    - Import phobos mainline development.

gcc/d/ChangeLog:

	PR d/103529
	* dmd/MERGE: Merge upstream dmd 3982604c5.
	* Make-lang.in (D_FRONTEND_OBJS): Add d/root-optional.o.
	* d-attribs.cc (build_attributes): Update for new front-end interface.
	* d-codegen.cc (d_build_call): Likewise.
	* d-compiler.cc (Compiler::paintAsType): Likewise.
	* d-lang.cc (d_handle_option): Remove OPT_fpreview_intpromote, add
	handling of OPT_frevert_intpromote.
	* d-port.cc (Port::valcpy): Assert buffer is aligned.
	* d-target.cc (Target::isVectorOpSupported): Update for new front-end
	interface.
	* decl.cc (layout_class_initializer): Likewise.
	* expr.cc (lvalue_p): Likewise.
	(binop_assignment): Likewise.
	(ExprVisitor::visit): Likewise.
	(ExprVisitor::visit (AssignExp *)): Remove generation of _d_arrayctor
	and _d_arraysetctor library helpers.
	(ExprVisitor::visit (VarExp *)): Support __traits(initSymbol).
	* intrinsics.cc (expand_intrinsic_rotate): Update for new front-end
	interface.
	* lang.opt (fpreview=intpromote): Remove.
	(frevert=intpromote): New.
	* runtime.def (ARRAYCTOR): Remove.
	(ARRAYSETCTOR): Remove.
	* toir.cc (IRVisitor::visit): Update for new front-end interface.
	* types.cc (layout_aggregate_members): Likewise.
	* dmd/root/optional.d: New file.
	* dmd/root/optional.h: New file.

libphobos/ChangeLog:

	PR d/103528
	* libdruntime/MERGE: Merge upstream druntime bc58b1e9.
	* libdruntime/Makefile.am (DRUNTIME_DSOURCES_LINUX): Remove
	core/sys/linux/syscalls.d.
	* libdruntime/Makefile.in: Regenerate.
	* src/MERGE: Merge upstream phobos 12329adb6.
	* testsuite/libphobos.config/config.exp: Add test22523.
	* libdruntime/core/sys/linux/syscalls.d: Removed.
	* testsuite/libphobos.config/test22523.d: New test.
2021-12-10 05:25:41 +01:00
Thomas Rodgers 38c60e5075 libstdc++: Make atomic<T*>::wait() const [PR102994]
This was an oversight in the original commit adding wait/notify
to atomic<T>.

libstdc++-v3/ChangeLog:

	PR libstdc++/102994
	* include/bits/atomic_base.h (__atomic_base<_PTp*>::wait()):
	Add const qualifier.
	* include/std/atomic (atomic<_Tp*>::wait(), atomic_wait()):
	Likewise.
	* testsuite/29_atomics/atomic/wait_notify/102994.cc:
	New test.
2021-12-09 17:57:03 -08:00
Cui,Lili 35a4fe8091 x86: Update -mtune=tremont
Silvermont has a special handle in add_stmt_cost function, because it has in
order SIMD pipeline. But for Tremont, its SIMD pipeline is out of order,
remove Tremont from this special handle.

gcc/ChangeLog

	* config/i386/i386.c (ix86_vector_costs::add_stmt_cost): Remove Tremont.
2021-12-10 09:39:32 +08:00
Iain Buclaw 213b7d9cf7 d: Align methods to MINIMUM_METHOD_BOUNDARY.
Aligns all D defined methods to MINIMUM_METHOD_BOUNDARY, improving
interoperability with C++ methods.

gcc/d/ChangeLog:

	* decl.cc (get_symbol_decl): Align methods to MINIMUM_METHOD_BOUNDARY.
2021-12-10 02:02:13 +01:00
GCC Administrator 4b4839e325 Daily bump. 2021-12-10 00:16:29 +00:00
Jonathan Wakely 2c7fb16b52 libstdc++: Fix ambiguous comparisons for iterators in C++20
Since r11-1571 (c++: Refinements to "more constrained") was changed in
the front end, the following comment from stl_iterator.h stopped being
true:

  // These extra overloads are not needed in C++20, because the ones above
  // are constrained with a requires-clause and so overload resolution will
  // prefer them to greedy unconstrained function templates.

The requires-clause is no longer considered when comparing unrelated
function templates. That means that the constrained operator== specified
in the standard is no longer more constrained than the pathological
comparison operators defined in the testsuite_greedy_ops.h header. This
was causing several tests to FAIL in C++20 mode:

FAIL: 23_containers/deque/types/1.cc (test for excess errors)
FAIL: 23_containers/vector/types/1.cc (test for excess errors)
FAIL: 24_iterators/move_iterator/greedy_ops.cc (test for excess errors)
FAIL: 24_iterators/normal_iterator/greedy_ops.cc (test for excess errors)
FAIL: 24_iterators/reverse_iterator/greedy_ops.cc (test for excess errors)

The solution is to restore some of the non-standard comparison operators
that are more specialized than the greedy operators in the testsuite.

libstdc++-v3/ChangeLog:

	* include/bits/stl_iterator.h (operator==, operator<=>): Define
	overloads for homogeneous specializations of reverse_iterator,
	__normal_iterator and move_iterator.
2021-12-09 23:19:03 +00:00
Jonathan Wakely 9042302ef0 libstdc++: Remove bogus dg-error for effective-target c++20
This test no longer has additional errors for C++20 mode, so remove the
dg-error that is now failing, and the unnecessary dg-prune-output.

libstdc++-v3/ChangeLog:

	* testsuite/20_util/scoped_allocator/69293_neg.cc: Remove
	dg-error for c++20.
2021-12-09 23:18:24 +00:00
Jonathan Wakely a8e02a00a0 libstdc++: Make std::make_exception_ptr work with -fno-exceptions [PR85813]
This allows std::make_exception_ptr to be used in a translation unit
compiled with -fno-exceptions. This works because the new implementation
added for PR 68297 doesn't need to throw or catch anything. The catch is
there to handle exceptions from the constructor of the exception object,
which we can assume won't happen in a -fno-exceptions TU and so use the
__catch macro instead. If the constructor does throw (because it's
defined in a different TU which was compiled with exceptions enabled)
then that exception will propagate to the make_exception_ptr caller.
That seems acceptable for a program that is trying to mix & match TUs
compiled with and without exceptions, and using types that throw when
constructed. That should be rare, and can't reasonably be expected to
have sensible behaviour.

This also enables the new implementation for targets that use a
non-standard calling convention for the exceptionDestructor callback
(specifically, mingw, which uses __thiscall). All we need to do is mark
the __dest_thunk function template with the right calling convention.

Finally, the useless no-op definition of make_exception_ptr (which is
only used if both RTTI and exceptions are disabled) is marked
always_inline, to ensure that the linker won't keep that definition and
discard the functional ones when both definitions of the function are
present in the link. An alternative would be to add the abi_tag
attribute to the useless definition, but making it always_inline should
work, and it's small enough to always be inlined reliably.

libstdc++-v3/ChangeLog:

	PR libstdc++/85813
	* libsupc++/exception_ptr.h (__dest_thunk): Add macro for
	destructor calling convention.
	(make_exception_ptr): Enable non-throwing implementation for
	-fno-exceptions and for non-standard calling conventions. Use
	always_inline attribute on the useless no-rtti no-exceptions
	definition.
	* testsuite/18_support/exception_ptr/64241.cc: Add -fno-rtti so
	the no-op implementation is still used.
2021-12-09 23:12:20 +00:00
Jonathan Wakely a1ca039fc0 libstdc++: Fix std::exception_ptr regressions [PR103630]
This restores support for std::make_exception_ptr<E&> and for using
std::exception_ptr in C++98.

Because the new non-throwing implementation needs to use std::decay to
handle references the original throwing implementation is used for
C++98.

We also need to change the typeid expression so it doesn't yield the
dynamic type when the function parameter is a reference to a polymorphic
type. Otherwise the new exception object could be caught by any handler
matching the dynamic type, even though the actual exception object is
only a copy of the base class, sliced to the static type.

libstdc++-v3/ChangeLog:

	PR libstdc++/103630
	* libsupc++/exception_ptr.h (exception_ptr): Fix exception
	specifications on inline definitions.
	(make_exception_ptr): Decay the template parameter. Use typeid
	of the static type.
	* testsuite/18_support/exception_ptr/103630.cc: New test.
2021-12-09 23:02:37 +00:00
Jonathan Wakely a219139e98 libstdc++: Implement std::ios_base::noreplace for C++23 [PR59769]
This implements my P2467R0 proposal to support opening an fstream in
exclusive mode. The new constant is also supported pre-C++23 as
std::ios_base::__noreplace.

This proposal hasn't been approved for C++23 yet, but I am confident it
will be, as this is restoring a feture found in pre-ISO C++ iostreams
implementations (and still present in the MSVC library as _Noreplace).
If the proposal fails for C++23 we can remove the ios::noreplace
name and just keep ios::__noreplace as an extension.

libstdc++-v3/ChangeLog:

	PR libstdc++/59769
	* config/io/basic_file_stdio.cc (fopen_mode): Add support for
	exclusive mode.
	* include/bits/ios_base.h (_S_noreplace): Define new enumerator.
	(ios_base::__noreplace): Define.
	(ios_base::noreplace): Define for C++23.
	* include/std/version (__cpp_lib_ios_noreplace): Define.
	* testsuite/27_io/basic_ofstream/open/char/noreplace.cc: New test.
	* testsuite/27_io/basic_ofstream/open/wchar_t/noreplace.cc: New test.
2021-12-09 22:59:48 +00:00
Jonathan Wakely 9e18a25331 libstdc++: Allow std::condition_variable waits to be cancelled [PR103382]
std::condition_variable::wait(unique_lock<mutex>&) is incorrectly marked
noexcept, which means that the __forced_unwind exception used by NPTL
cancellation will terminate the process. It should allow exceptions to
pass through, so that a thread can be cleanly cancelled when waiting on
a condition variable.

The new behaviour is exported as a new version of the symbol, to avoid
an ABI break for existing code linked to the non-throwing definition of
the function. Code linked against older releases will have a reference
to the @GLIBCXX_3.4.11 version, andcode compiled against the new
libstdc++ will get a reference to the @@GLIBCXX_3.4.30 version.

libstdc++-v3/ChangeLog:

	PR libstdc++/103382
	* config/abi/pre/gnu.ver (GLIBCXX_3.4.11): Do not export old
	symbol if .symver renaming is supported.
	(GLIBCXX_3.4.30): Export new symbol if .symver renaming is
	supported.
	* doc/xml/manual/evolution.xml: Document change.
	* doc/html/manual/api.html: Regenerate.
	* include/bits/std_mutex.h (__condvar::wait, __condvar::wait_until):
	Remove noexcept.
	* include/std/condition_variable (condition_variable::wait):
	Likewise.
	* src/c++11/condition_variable.cc (condition_variable::wait):
	Likewise.
	* src/c++11/compatibility-condvar.cc (__nothrow_wait_cv::wait):
	Define nothrow wrapper around std::condition_variable::wait and
	export the old symbol as an alias to it.
	* testsuite/30_threads/condition_variable/members/103382.cc: New test.
2021-12-09 22:58:19 +00:00
Jonathan Wakely db5fa0837e libstdc++: Avoid unnecessary allocations in std::map insertions [PR92300]
Inserting a pair<Key, Value> into a map<Key, Value> will allocate a new
node and construct a pair<const Key, Value> in the node, then check if
the Key is already present in the map. That is because pair<Key, Value>
is not the same type as the map's value_type. But it only differs in the
const-qualification on the Key, and so we should be able to do the
lookup directly, without allocating a new node. This avoids allocating
and then deallocating a node for the case where the key is already found
and nothing gets inserted.

We can take this optimization further and lookup the key directly for a
pair<Key, X>, pair<const Key, X>, pair<Key&, X> etc. for any X. A strict
reading of the standard says we can only do this when we know the
allocator won't do anything funky with the value when constructing a
pair<const Key, Value> from a slightly different type. Inserting that
type only requires the value_type to be Cpp17EmplaceInsertable into the
container, and that doesn't have any requirement that the value is
unchanged (unlike Cpp17CopyInsertable and Cpp17MoveInsertable). For that
reason, the optimization is only done for maps using std::allocator.

A similar optimization can be done for map.emplace(key, value) where the
first argument is similar to the key_type and so can be looked up
without allocating a new node and constructing a key_type.

Finally, both of the insert and emplace cases can use the same
optimization when key_type is a scalar type and some other scalar is
being passed as the insert/emplace argument. Converting from one scalar
type to another won't have surprising value-altering behaviour, and has
no side effects (unlike e.g. constructing a std::string from a const
char* argument, which might allocate).

We don't need to do this for std::multimap, because we always insert the
new node even if the key is already present. So there's no benefit to
doing the lookup before allocating the new node.

libstdc++-v3/ChangeLog:

	PR libstdc++/92300
	* include/bits/stl_map.h (insert(Pair&&), emplace(Args&&...)):
	Check whether the arguments can be looked up directly without
	constructing a temporary node first.
	* include/bits/stl_pair.h (__is_pair): Move to here, from ...
	* include/bits/uses_allocator_args.h (__is_pair): ... here.
	* testsuite/23_containers/map/modifiers/emplace/92300.cc: New test.
	* testsuite/23_containers/map/modifiers/insert/92300.cc: New test.
2021-12-09 22:56:57 +00:00
Jonathan Wakely fb9875ebf1 libstdc++: Do not leak empty COW strings
When non-const references, pointers or iterators are obtained to the
contents of a COW std::basic_string, the implementation has to assume it
could result in a write to the contents. If the string was previously
shared, it does the "copy-on-write" step of creating a new copy of the
data that is not shared by another object.  It also marks the string as
"leaked", so that no future copies of it will share ownership either.

However, if the string is empty then the only character in the sequence
is the terminating null, and modifying that is undefined behaviour. This
means that non-const references/pointers/iterators to an empty string
are effectively const. Since no direct modification is possible, there
is no need to "leak" the string, it can be safely shared with other
objects. This avoids unnecessary allocations to create new copies of
empty strings that can't be modified anyway.

We already did this optimization for strings that share ownership of the
static _S_empty_rep() object, but not for strings that have non-zero
capacity, and not for fully-dynamic-strings (where the _S_empty_rep()
object is never used).

With this change we avoid two allocations in the return statement:

  std::string s;
  s.reserve(1);       // allocate
  std::string s2 = s;
  std::string s3 = s;
  return s[0] + s2[0] + s3[0]; // leak+allocate twice

libstdc++-v3/ChangeLog:

	* include/bits/cow_string.h (basic_string::_M_leak_hard): Do not
	reallocate an empty string.
2021-12-09 22:51:06 +00:00
Jonathan Wakely f8463b0e3e libstdc++: Disable over-zealous warnings about std::string copies [PR103332]
These warnings are triggered by perfectly valid code using std::string.
They're particularly bad when --enable-fully-dynamic-string is used,
because even std::string().begin() will give a warning.

Use pragmas to stop the troublesome warnings for copies done by
std::char_traits.

libstdc++-v3/ChangeLog:

	PR libstdc++/103332
	PR libstdc++/102958
	PR libstdc++/103483
	* include/bits/char_traits.h: Suppress stringop and array-bounds
	warnings.
2021-12-09 22:51:06 +00:00
Jonathan Wakely fe9571a35d libstdc++: Fix non-reserved name in std::allocator base class [PR64135]
The possible base classes of std::allocator are new_allocator and
malloc_allocator, which both cause a non-reserved name to be declared in
every program that includes the definition of std::allocator. This is
non-conforming.

This change replaces __gnu_cxx::new_allocator with std::__new_allocator
which is identical except for using a reserved name. The non-standard
extension __gnu_cxx::new_allocator is preserved as a thin wrapper over
std::__new_allocator. There is no problem with the extension using a
non-reserved name now that it's not included by default in other
headers.

The same change could be done to __gnu_cxx::malloc_allocator but as it's
not the default configuration it can wait.

libstdc++-v3/ChangeLog:

	PR libstdc++/64135
	* config/allocator/new_allocator_base.h: Include
	<bits/new_allocator.h> instead of <ext/new_allocator.h>.
	(__allocator_base): Use std::__new_allocator instead of
	__gnu_cxx::new_allocator.
	* doc/xml/manual/allocator.xml: Document new default base class
	for std::allocator.
	* doc/xml/manual/evolution.xml: Likewise.
	* doc/html/*: Regenerate.
	* include/Makefile.am: Add bits/new_allocator.h.
	* include/Makefile.in: Regenerate.
	* include/experimental/memory_resource (new_delete_resource):
	Use std::__new_allocator instead of __gnu_cxx::new_allocator.
	* include/ext/new_allocator.h (new_allocator): Derive from
	std::__new_allocator. Move implementation to ...
	* include/bits/new_allocator.h: New file.
	* testsuite/20_util/allocator/64135.cc: New test.
2021-12-09 22:50:10 +00:00
Jan Hubicka f157c5362b Limit inlining functions called once
as dicussed in PR ipa/103454 there are several benchmarks that regresses
for -finline-functions-called once. Runtmes:
 - tramp3d with -Ofast. 31%
 - exchange2 with -Ofast 11-21%
 - roms O2 9%-10%
 - tonto 2.5-3.5% with LTO
Build times:
 - specfp2006 41% (mostly wrf that builds 71% faster)
 - specint2006 1.5-3%
 - specfp2017 64% (again mostly wrf)
 - specint2017 2.5-3.5%

This patch adds two params to tweak the behaviour:
 1) max-inline-functions-called-once-loop-depth limiting the loop depth
    (this is useful primarily for exchange where the inlined function is in
     loop depth 9)
 2) max-inline-functions-called-once-insns
    We already have large-function-insns/growth parameters, but these are
    limiting also inlining small functions, so reducing them will regress
    very large functions that are hot.

    Because inlining functions called once is meant just as a cleanup pass
    I think it makes sense to have separate limit for it.
gcc/ChangeLog:

2021-12-09  Jan Hubicka  <hubicka@ucw.cz>

	* doc/invoke.texi (max-inline-functions-called-once-loop-depth,
	max-inline-functions-called-once-insns): New parameters.
	* ipa-inline.c (check_callers): Handle
	param_inline_functions_called_once_loop_depth and
	param_inline_functions_called_once_insns.
	(edge_badness): Fix linebreaks.
	* params.opt (param=max-inline-functions-called-once-loop-depth,
	param=max-inline-functions-called-once-insn): New params.
2021-12-09 21:02:17 +01:00
Martin Sebor 243a980437 Extend the offset and size of merged object references [PR103215].
Resolves:
PR tree-optimization/103215 - bogus -Warray-bounds with two pointers with different offsets each

gcc/ChangeLog:

	PR tree-optimization/103215
	* pointer-query.cc (access_ref::merge_ref): Extend the offset and
	size of the merged object instead of using the larger.

gcc/testsuite/ChangeLog:

	PR tree-optimization/103215
	* gcc.dg/Wstringop-overflow-58.c: Adjust and xfail expected warnings.
	* gcc.dg/Wstringop-overflow-59.c: Same.
	* gcc.dg/warn-strnlen-no-nul.c: Same.
	* gcc.dg/Warray-bounds-91.c: New test.
	* gcc.dg/Warray-bounds-92.c: New test.
	* gcc.dg/Wstringop-overflow-85.c: New test.
	* gcc.dg/Wstringop-overflow-87.c: New test.
2021-12-09 12:51:40 -07:00
Martin Sebor 9eeca99ccc Avoid expecting nonzero size for access none void* arguments [PR101751].
Resolves:
PR middle-end/101751 - attribute access none with void pointer expects nonzero size

gcc/ChangeLog:

	PR middle-end/101751
	* doc/extend.texi (attribute access): Adjust.
	* gimple-ssa-warn-access.cc (pass_waccess::maybe_check_access_sizes):
	Treat access mode none on a void* argument as expecting as few as
	zero bytes.

gcc/testsuite/ChangeLog:

	PR middle-end/101751
	* gcc.dg/Wstringop-overflow-86.c: New test.
2021-12-09 11:28:43 -07:00
Frederic Konrad a2c12cb708 Fix path to t-ppc64-fp for ppc*-vxworks7* libgcc tmake_file
This fixes a basic mistake in the relative path used to reference
a rs6000 specific Makefile fragment in the libgcc configuration bits
for powerpc*-vxworks7.

2021-01-14  Fred Konrad  <konrad@adacore.com>

libgcc/
	* config.host (powerpc*-wrs-vxworks7*): Fix path to
	rs6000/t-ppc64-fp, relative to config/ not libgcc/.
2021-12-09 17:50:36 +00:00
Jakub Jelinek fa9f40bacb pch: Fix aarch64 build [PR71934]
On Thu, Dec 09, 2021 at 05:42:10PM +0100, Christophe Lyon wrote:
> This also broke aarch64 I think:
> In file included from
> /tmp/6140018_6.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/config/aarch64/aarch64-sve-builtins.cc:3920:0:
> ./gt-aarch64-sve-builtins.h: In function 'void
> gt_pch_p_19registered_function(void*, void*, gt_pointer_operator, void*)':
> ./gt-aarch64-sve-builtins.h:86:44: error: no matching function for call to
> 'gt_pch_nx(aarch64_sve::function_instance*, void (*&)(void*, void*, void*),
> void*&)'
>      gt_pch_nx (&((*x).instance), op, cookie);

Fixed thusly.

2021-12-09  Jakub Jelinek  <jakub@redhat.com>

	PR pch/71934
	* config/aarch64/aarch64-sve-builtins.cc (gt_pch_nx): Change type of
	second argument from function with 2 pointer arguments to function
	with 3 pointer arguments.
2021-12-09 17:56:53 +01:00
Olivier Hainque 1486e4bd01 Leverage VX_CPU_PREFIX in aarch64-vxworks.h
This change tightens the CPU macro definitions issued
for VxWorks system headers on aarch64 to incorporate
the common VX_CPU_PREFIX facility, as the powerpc port
does.

The net effect for current configurations is the addition
of an actual "_VX_" prefix to the references to architecture
representative values. The absence of this prefix is most
often compensated for in system headers, but not always (when
going through particular #include paths), and this caused
a couple of spurious test failures.

2021-12-09  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/aarch64/aarch64-vxworks.h (TARGET_OS_CPP_BUILTINS):
	Use VX_CPU_PREFIX in CPU definitions.
2021-12-09 16:55:27 +00:00
Martin Sebor 6dfb1059b3 Add a new dump function.
gcc/ChangeLog:

	* pointer-query.cc (access_ref::dump): Define new function
	(pointer_query::dump): Call it.
	* pointer-query.h (access_ref::dump): Declare new function.
2021-12-09 09:51:48 -07:00
Martin Sebor 1334d889d4 Refactor compute_objsize_r into helpers.
gcc/ChangeLog:

	* pointer-query.cc (compute_objsize_r): Add an argument.
	(gimple_call_return_array): Pass a new argument to compute_objsize_r.
	(access_ref::merge_ref): Same.
	(access_ref::inform_access): Add an argument and use it.
	(access_data::access_data): Initialize new member.
	(handle_min_max_size): Pass a new argument to compute_objsize_r.
	(handle_decl): New function.
	(handle_array_ref): Pass a new argument to compute_objsize_r.
	Avoid incrementing deref.
	(set_component_ref_size): New function.
	(handle_component_ref): New function.
	(handle_mem_ref): Pass a new argument to compute_objsize_r.
	Only increment deref after successfully computing object size.
	(handle_ssa_name): New function.
	(compute_objsize_r): Move code into helpers and call them.
	(compute_objsize): Pass a new argument to compute_objsize_r.
	* pointer-query.h (access_ref::inform_access): Add an argument.
	(access_data::ostype): New member.
2021-12-09 09:51:48 -07:00