aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2020-12-01x86: Add -mneeded for GNU_PROPERTY_X86_ISA_1_V[234] markerH.J. Lu10-82/+175
GCC 11 supports -march=x86-64-v[234] to enable x86 micro-architecture ISA levels: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97250 Binutils has been updated to support GNU_PROPERTY_X86_ISA_1_V[234] marker: https://gitlab.com/x86-psABIs/x86-64-ABI/-/merge_requests/13 with commit b0ab06937385e0ae25cebf1991787d64f439bf12 Author: H.J. Lu <hjl.tools@gmail.com> Date: Fri Oct 30 06:49:57 2020 -0700 x86: Support GNU_PROPERTY_X86_ISA_1_BASELINE marker and commit 32930e4edbc06bc6f10c435dbcc63131715df678 Author: H.J. Lu <hjl.tools@gmail.com> Date: Fri Oct 9 05:05:57 2020 -0700 x86: Support GNU_PROPERTY_X86_ISA_1_V[234] marker in x86 ELF binaries. Add -mneeded to emit GNU_PROPERTY_X86_ISA_1_NEEDED property to indicate the micro-architecture ISA level required to execute the binary. gcc/ * config.gcc: Replace cet.o with gnu-property.o. Replace i386/t-cet with i386/t-gnu-property. * config/i386/cet.c: Renamed to ... * config/i386/gnu-property.c: This. (emit_gnu_property): New function. (file_end_indicate_exec_stack_and_cet): Renamed to ... (file_end_indicate_exec_stack_and_gnu_property): This. Call emit_gnu_property to generate GNU_PROPERTY_X86_FEATURE_1_AND and GNU_PROPERTY_X86_ISA_1_NEEDED properties. * config/i386/i386.opt (mneeded): New. * config/i386/linux-common.h (file_end_indicate_exec_stack_and_cet): Renamed to ... (file_end_indicate_exec_stack_and_gnu_property): This. (TARGET_ASM_FILE_END): Updated. * config/i386/t-cet: Renamed to ... * config/i386/t-gnu-property: This. (cet.o): Renamed to ... (gnu-property.o): This. * doc/invoke.texi: Document -mneeded. gcc/testsuite/ * gcc.target/i386/x86-needed-1.c: New test. * gcc.target/i386/x86-needed-2.c: Likewise. * gcc.target/i386/x86-needed-3.c: Likewise.
2020-12-02Daily bump.GCC Administrator5-1/+340
2020-12-01Optimize max/min pattern with comparisonEugene Rozenfeld3-0/+106
gcc/ PR tree-optimization/96708 * match.pd: New pattern for comparing X with MAX (X, Y) or MIN (X, y). gcc/testsuite * gcc.dg/pr96708-negative.c: New test. * gcc.dg/pr96708-positive.c: New test.
2020-12-01Fix mcore multilib specificationJeff Law1-1/+1
gcc * config/mcore/t-mcore (MULTILIB_EXCEPTIONS): Define.
2020-12-02Add pretty-printing support for __is_nothrow_{assignable,constructible}.Ville Voutilainen1-0/+6
gcc/cp/ChangeLog: PR c++/98054 * cxx-pretty-print.c (pp_cxx_trait_expression): Add support for __is_nothrow_{assignable,constructible}.
2020-12-01PR middle-end/97595 - bogus -Wstringop-overflow due to DECL_SIZE_UNIT ↵Martin Sebor4-6/+49
underreporting field size gcc/ChangeLog: PR middle-end/97595 * tree.c (component_ref_size): Fail when DECL_SIZE != TYPE_SIZE. * tree.h (DECL_SIZE, TYPE_SIZE): Update comment. gcc/testsuite/ChangeLog: PR middle-end/97595 * g++.dg/warn/Warray-bounds-14.C: New test. * g++.dg/warn/Wstringop-overflow-6.C: New test.
2020-12-01Fix more minor testsuite fallout from improved switch optimizationJeff Law1-1/+1
gcc/testsuite * gcc.dg/tree-ssa/pr96480.c: Disable jump table optimization
2020-12-01Feature: Macros for identifying the wide and narrow execution string literal ↵JeanHeyd Meneide3-0/+29
encoding gcc/c-family * c-cppbuiltin.c (c_cpp_builtins): Add predefined {__GNUC_EXECUTION_CHARSET_NAME} and _WIDE_EXECUTION_CHARSET_NAME} macros. gcc/ * doc/cpp.texi: Document new macros. gcc/testsuite/ * c-c++-common/cpp/wide-narrow-predef-macros.c: New test. libcpp/ * charset.c (init_iconv_desc): Initialize "to" and "from" fields. * directives.c (cpp_get_narrow_charset_name): New function. (cpp_get_wide_charset_name): Likewise. * include/cpplib.h (cpp_get_narrow_charset_name): Prototype. (cpp_get_wide_charset_name): Likewise. * internal.h (cset_converter): Add "to" and "from" fields.
2020-12-01Fix compromised tests after recent switch table improvementsJeff Law1-1/+1
gcc/testsuite * gcc.dg/pr46309-2.c: Add -fno-bit-tests and -fno-jump-tables to avoid compromising the test.
2020-12-01openmp: Avoid ICE on depend clause on depobj OpenMP construct [PR98072]Jakub Jelinek2-0/+13
Since r11-5430 we ICE on the following testcase. When parsing the depobj directive we don't really use cp_parser_omp_all_clauses routine which ATM disables generation of location wrappers and the newly added assertion that there are no location wrappers thus triggers. Fixed by adding the location wrappers suppression sentinel. Longer term, we should handle location wrappers inside of OpenMP clauses. 2020-12-01 Jakub Jelinek <jakub@redhat.com> PR c++/98072 * parser.c (cp_parser_omp_depobj): Suppress location wrappers when parsing depend clause. * c-c++-common/gomp/depobj-2.c: New test.
2020-12-01PR middle-end/97373 - missing warning on sprintf into allocated destinationMartin Sebor6-90/+444
gcc/ChangeLog: PR middle-end/97373 * builtins.c (compute_objsize): Rename... (compute_objsize_r): to this. Change order and types of arguments. Use new argument. Adjust calls to self. (access_ref::get_ref): New member function. (pointer_query::pointer_query): New member function. (pointer_query::get_ref): Same. (pointer_query::put_ref): Same. (handle_min_max_size): Change order and types of arguments. (maybe_emit_free_warning): Add a test. * builtins.h (class pointer_query): New class. (compute_objsize): Declare an overload. * gimple-ssa-sprintf.c (get_destination_size): Add argument. (handle_printf_call): Change argument type. * tree-ssa-strlen.c (adjust_last_stmt): Add an argument and use it. (maybe_warn_overflow): Same. (handle_builtin_strcpy): Same. (maybe_diag_stxncpy_trunc): Same. (handle_builtin_memcpy): Change argument type. Adjust calls. (handle_builtin_strcat): Same. (handle_builtin_memset): Same. (handle_store): Same. (strlen_check_and_optimize_call): Same. (check_and_optimize_stmt): Same. (strlen_dom_walker): Add new data members. (strlen_dom_walker::before_dom_children): Use new member. (printf_strlen_execute): Dump cache performance counters. Remove objsize pass cleanup. * tree-ssa-strlen.h (maybe_diag_stxncpy_trunc): Add argument. (handle_printf_call): Change argument type. gcc/testsuite/ChangeLog: PR middle-end/97373 * gcc.dg/tree-ssa/builtin-sprintf-warn-25.c: New test.
2020-12-01Make -fzero-call-used-regs work on the SPARCEric Botcazou2-0/+54
This contains both a generic fixlet for targets implementing the leaf register optimization (SPARC and Xtensa) and the implementation of the target hook TARGET_ZERO_CALL_USED_REGS which is needed to make this work on the SPARC. gcc/ChangeLog: * function.c (gen_call_used_regs_seq): In a function subject to the leaf register optimization, skip registers that are not present. * config/sparc/sparc.c (TARGET_ZERO_CALL_USED_REGS): Define to... (sparc_zero_call_used_regs): ...this. New function.
2020-12-01testsuite: replace .* with a better regexMartin Liska5-5/+5
gcc/testsuite/ChangeLog: * g++.dg/tree-ssa/if-to-switch-1.C: Do not allow newlines in .* pattern. * gcc.dg/tree-ssa/if-to-switch-1.c: Likewise. * gcc.dg/tree-ssa/if-to-switch-2.c: Likewise. * gcc.dg/tree-ssa/if-to-switch-3.c: Likewise. * gcc.dg/tree-ssa/if-to-switch-5.c: Likewise.
2020-12-01Darwin, D : Adjust the X spec to cater for duplicate use.Iain Sandoe1-2/+2
The '-X' flag is an obsolete spelling for a command to tell the linker to 'strip local symbols'. This has been the default action for a long time - but, as per the usual GCC approach, although the flag is retired, we have not removed it; rather, we just delete it in the driver self-spec. The D language adds this flag as a front end option (to emit json) which means that deleting it in the driver disables that function in D. This patch works around the duplication by removing the unused flag in the link_spec instead of the driver self-spec. gcc/ChangeLog: * config/darwin.h: Remove unused 'X' specs in the link spec rather than driver self-specs.
2020-12-01if-to-switch: Fix test-suite patterns.Martin Liska5-7/+7
gcc/testsuite/ChangeLog: PR testsuite/98085 * g++.dg/tree-ssa/if-to-switch-1.C: Do not expect precise number of BBs. * gcc.dg/tree-ssa/if-to-switch-1.c: Likewise. * gcc.dg/tree-ssa/if-to-switch-2.c: Likewise. Find better name for the function. * gcc.dg/tree-ssa/if-to-switch-3.c: Likewise. Find better name for the function. * gcc.dg/tree-ssa/if-to-switch-5.c: Likewise.
2020-12-01C++ Module keywordsNathan Sidwell4-0/+17
This adds the module keywords. These are special internal tokens generated by the preprocessor's module-control-line token peeking logic. Spelling them with a space means that they turn back into regular tokens in preprocessor output (but do skew the column numbering :() gcc/c-family/ * c-common.c (module, import, export): New internal tokens (with trailing space). * c-common.h (RID__MODULE, RID__IMPORT & RID__EXPORT): Enumerate them. (D_CXX_MODULES, D_CXX_MODULES_FLAGS): Enable them. * c-cppbuiltin.c (c_cpp_builtins): Feature macro. gcc/cp/ * lex.c (init_reswords): Maybe enable module keywords.
2020-12-01C++ Module parameters & timersNathan Sidwell2-0/+7
Here is the new parameter and instrumentation timers for modules. gcc/ * params.opt (lazy-modules): New. * timevar.def (TV_MODULE_IMPORT, TV_MODULE_EXPORT) (TV_MODULE_MAPPER): New.
2020-12-01C++ Module optionsNathan Sidwell4-7/+126
This adds the C++ module options, and wires them into lang-specs. The options are not connected to any machinery. The options! They do nothing! gcc/c-family/ * c-opts.c (c_common_init_options): Ask for module dependencies. (c_common_handle_option): Handle -Mmodules -Mno-modules. * c-pch.c (c_common_valid_pch): ... does not play with C++ modules. * c.opt (Mmodules, Mno-modules): New preprocessor dependency options. (fmodules-ts, fmodule-header, fmodule-implicit-inline) (fmodule-only, fmodule-mapper, fmodule-lazy) (fmodule-version-ignore, Winvalid-imported-macros) (flang-info-include-translate, flang-info-include-translate-not): New options gcc/cp/ * lang-specs.h: Add module-related options.
2020-12-01Improve double-word mod even on powerpc [PR97459]Jakub Jelinek1-2/+1
I have noticed that while my (already committed, thanks for review) patch works on x86, it doesn't work on powerpc*. The problem is that we don't have lshr double-word optab (neither TImode nor for -m32 DImode), but as expander has code for double-word shift, that doesn't really matter. As the implementation is prepared to punt whenever something can't be expanded with OPTAB_DIRECT and in the end also punts if any library calls would be emitted, the optab_handler checks were just to save compile time. On the other side, for even divisors, we know that (1 << bit) % (2 * x) for bit > 0 will never be equal to 1, because both dividend and divisor are even and so remainder will be even too, so we can save some compile time by adding an early exit. The even divisors can be handled with the approach Thomas wrote about (perhaps generalized into divisors equal to what expand_doubleword_mod can handle times some power of two where we can handle power of two modulo cheaply), but that would be done in a different function... And we could use ctz to find the power of two... 2020-12-01 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/97459 * optabs.c (expand_doubleword_mod): Punt early for even op1. (expand_binop): Don't require lshr_optab double-word handler.
2020-12-01loop-invariant: JUMP_INSNs aren't loop invariant [PR97954]Jakub Jelinek2-0/+16
The following testcase ICEs because loop invariant motion moves asm goto with a single output as invariant. Normally, jumps aren't really moved, because if they are single set, they have their SET_DEST (pc) and pc_rtx has VOIDmode on which one of the functions find_invariant_insn calls bails out. The code already punts on insns that can throw or trap. And for asm goto without outputs, it isn't single set, or asm goto with two or more outputs it isn't single set either. 2020-12-01 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/97954 * loop-invariant.c (find_invariant_insn): Punt on JUMP_P insns. * gcc.dg/pr97954.c: New test.
2020-12-01configury : Fix LEB128 support for non-GNU assemblers.Iain Sandoe2-38/+46
The current configuration test for LEB128 support in the assembler is (a) specific to GNU assemblers and (b) only checks that the directives are accepted, not that they give correct output. The patch extends the asm test to cover one failure case present in assemblers based off an older version of GAS (where a 64 bit value with the MSB set presented to a .uleb128 directive causes a fail). The test is now generalized such that it does not make use of any specific test for assembler source/version, but checks that the output is as expected. We cater for scanning the object with objdump (either binutils or LLVM) or Darwin otool. gcc/ChangeLog: * configure.ac (check leb128 support): Check that assemblers both accept the LEB128 directives and also give the expected output. Add a test for uleb128 with the MSB set for a 64 bit value. * configure: Regenerated.
2020-12-01Regenerate a configure script omitted in r11-5520.Iain Sandoe1-4/+4
Additional change for : hppa64-hpux11 build to remove source paths from embedded path. gcc/ChangeLog: * configure: Regnerated.
2020-12-01testsuite: Correct check_effective_target_hwaddress_execMatthew Malcomson1-1/+18
This test should ensure that we can compile with hwasan, that such a compiled binary runs as expected, *and* that we're running on a kernel which implements the capability to ignore the top bytes of pointers in syscalls. It was expected that a basic test of `int main(void) { return 0; }` would check this, since there is a check called during `__hwasan_init` in libhwasan to ensure that the kernel we're running on provides a `prctl` to request the relaxed ABI. Unfortunately, the check in libhwasan has a bug in it, and does not correctly fail when the kernel feature is not around. This means that check is not automatically provided by the runtime. The sanitizer runtime will be fixed but would like to install this fix here in case fixing the library is not quick enough for the release (and so that people running the testsuite do not see spurious errors in the meantime). Tested by running testsuite on an AArch64 machine with and without the required kernel. Observed that the test does indeed fail when the kernel feature is unavailable and pass when the feature is available. Note that this test is directly targetting AArch64 by using `prctl` numbers specific to it. That's unfortunate, but once the runtime fix has gone in we will be able to remove that requirement. Ok for trunk? gcc/testsuite/ChangeLog: * lib/hwasan-dg.exp (check_effective_target_hwaddress_exec): Fix check for correct kernel version.
2020-12-01C++ : Adjust warning for misplaced attributes.Iain Sandoe1-2/+5
This removes the reference to Objective-C++ for the warning that attributes may not be placed before linkage specifications. It also adds a note that they may be placed after that. gcc/cp/ChangeLog: * parser.c (cp_parser_declaration): Add a not about where attributes may be placed.
2020-12-01Introduce can_vec_cmp_compare_pIlya Leoshkevich3-28/+109
This is the same as dcd2ca63ec5c ("Introduce can_vcond_compare_p function"), but for vec_cmp. The reason it's needed is that since 5d9ade39b872 ("IBM Z: Fix PR97326: Enable fp compares in vec_cmp") and 4acba4859013 ("IBM Z: Restrict vec_cmp<m><n> on z13") s390's vec_cmp expander advertises that it supports floating point comparisons except signaling ones on z13, but the common code ignores the latter restriction. gcc/ChangeLog: 2020-11-25 Ilya Leoshkevich <iii@linux.ibm.com> * optabs-tree.c (vec_cmp_icode_p): New function. (vec_cmp_eq_icode_p): New function. (expand_vec_cmp_expr_p): Use vec_cmp_icode_p and vec_cmp_eq_icode_p. (vcond_icode_p): Use get_rtx_code_1, just to be uniform with vec_cmp_icode_p. * optabs.c (unsigned_optab_p): New function. (insn_predicate_matches_p): New function. (can_vec_cmp_compare_p): New function. (can_vcond_compare_p): Use unsigned_optab_p and insn_predicate_matches_p. (get_rtx_code): Use get_rtx_code_1. (get_rtx_code_1): Version of get_rtx_code that returns UNKNOWN instead of asserting. * optabs.h (can_vec_cmp_compare_p): New function. (get_rtx_code_1): New function.
2020-12-01Add if-chain to switch conversion pass.Martin Liska20-32/+866
gcc/ChangeLog: PR tree-optimization/14799 PR ipa/88702 * Makefile.in: Add gimple-if-to-switch.o. * dbgcnt.def (DEBUG_COUNTER): Add new debug counter. * passes.def: Include new pass_if_to_switch pass. * timevar.def (TV_TREE_IF_TO_SWITCH): New timevar. * tree-pass.h (make_pass_if_to_switch): New. * tree-ssa-reassoc.c (struct operand_entry): Move to the header. (dump_range_entry): Move to header file. (debug_range_entry): Likewise. (no_side_effect_bb): Make it global. * tree-switch-conversion.h (simple_cluster::simple_cluster): Add inline for couple of functions in order to prevent error about multiple defined symbols. * gimple-if-to-switch.cc: New file. * tree-ssa-reassoc.h: New file. gcc/testsuite/ChangeLog: PR tree-optimization/14799 PR ipa/88702 * gcc.dg/tree-ssa/pr96480.c: Disable if-to-switch conversion. * gcc.dg/tree-ssa/reassoc-32.c: Likewise. * g++.dg/tree-ssa/if-to-switch-1.C: New test. * gcc.dg/tree-ssa/if-to-switch-1.c: New test. * gcc.dg/tree-ssa/if-to-switch-2.c: New test. * gcc.dg/tree-ssa/if-to-switch-3.c: New test. * gcc.dg/tree-ssa/if-to-switch-4.c: New test. * gcc.dg/tree-ssa/if-to-switch-5.c: New test. * gcc.dg/tree-ssa/if-to-switch-6.c: New test. * gcc.dg/tree-ssa/if-to-switch-7.c: New test. * gcc.dg/tree-ssa/if-to-switch-8.c: New test.
2020-12-01gcc/testsuite/s390: Add test cases for float_tMarius Hillenbrand2-0/+28
Add two test cases that check for acceptable combinations of float_t and FLT_EVAL_METHOD on s390x. Tested against an as-is glibc and one modified so that it derives float_t from FLT_EVAL_METHOD. gcc/testsuite/ChangeLog: 2020-12-01 Marius Hillenbrand <mhillen@linux.ibm.com> * gcc.target/s390/float_t-1.c: New test. * gcc.target/s390/float_t-2.c: New test.
2020-12-01IBM Z: Configure excess precision for float at compile-timeMarius Hillenbrand5-9/+154
Historically, float_t has been defined as double on s390 and gcc would emit double precision insns for evaluating float expressions when in standard-compliant mode. Configure that behavior at compile-time as prep for changes in glibc: When glibc ties float_t to double, keep the old behavior; when glibc derives float_t from FLT_EVAL_METHOD (as on most other archs), revert to the default behavior (i.e., FLT_EVAL_METHOD_PROMOTE_TO_FLOAT). Provide a configure option --enable-s390-excess-float-precision to override the check. gcc/ChangeLog: 2020-12-01 Marius Hillenbrand <mhillen@linux.ibm.com> * configure.ac: Add configure option --enable-s390-excess-float-precision and check to derive default from glibc. * config/s390/s390.c: Guard s390_excess_precision with an ifdef for ENABLE_S390_EXCESS_FLOAT_PRECISION. * doc/install.texi: Document --enable-s390-excess-float-precision. * configure: Regenerate. * config.in: Regenerate.
2020-12-01testsuite: remove LIT annotation and reduceMartin Liska1-303/+17
I noticed the test-case contains LIT annotation and it is possible to reduce. I did that with compiler that was affected by the PR. gcc/testsuite/ChangeLog: * g++.dg/torture/pr93347.C: Reduce and remove LIT keywords.
2020-12-01IPA: drop implicit_section againMartin Liska2-1/+22
As mentioned in the PR, since 4656461585bfd0b9 implicit_section was not set to false when set_section was called with the argument equal to NULL. gcc/ChangeLog: PR ipa/98057 * symtab.c (symtab_node::set_section_for_node): Drop implicit_section if x_section is NULL. gcc/testsuite/ChangeLog: PR ipa/98057 * g++.dg/ipa/pr98057.C: New test.
2020-12-01x86_64: Fix up -fpic -mcmodel=large -fno-plt [PR98063]Jakub Jelinek2-1/+24
On the following testcase with -fpic -mcmodel=large -fno-plt we emit call puts@GOTPCREL(%rip) but that is not really appropriate for CM_LARGE_PIC, the .text can be larger than 2GB in that case and the .got slot further away from %rip than what can fit into the signed 32-bit immediate. The following patch computes the address of the .got slot the way it is computed for that model for function pointer loads, and calls that. 2020-12-01 Jakub Jelinek <jakub@redhat.com> PR target/98063 * config/i386/i386-expand.c (ix86_expand_call): Handle non-plt CM_LARGE_PIC calls. * gcc.target/i386/pr98063.c: New test.
2020-12-01middle-end/98070 - fix realloc builtin fnspecRichard Biener1-1/+1
realloc clobbers errno, note that. 2020-12-01 Richard Biener <rguenther@suse.de> PR middle-end/98070 * builtins.c (builtin_fnspec): realloc is ".Cw ".
2020-12-01c++, debug: Treat -std=c++20 -gdwarf-5 like C++14 rather than C++98Jakub Jelinek3-1/+16
I have noticed that while we use DW_LANG_C_plus_plus_14 for -std=c++17 -gdwarf-5, we use DW_LANG_C_plus_plus (aka C++98) for -std=c++20 -gdwarf-5. The following patch makes those two match. 2020-12-01 Jakub Jelinek <jakub@redhat.com> * dwarf2out.c (gen_compile_unit_die): Treat GNU C++20 like C++14 for -gdwarf-5. * g++.dg/debug/dwarf2/lang-cpp17.C: New test. * g++.dg/debug/dwarf2/lang-cpp20.C: New test.
2020-12-01driver: Don't imply -dD for -g3 -g0 [PR97989]Jakub Jelinek3-1/+17
The driver enables -dD when preprocessing when -g3 is specified, for obvious reasons that we need the macros to be preserved somewhere for them to make up the debug info. But it enables it even if -g3 is later overridden to -g2, -g1 or -g0, where we in the end don't emit .debug_mac{ros,info}. The following patch passes -dD only if we'll need it. 2020-12-01 Jakub Jelinek <jakub@redhat.com> PR debug/97989 * gcc.c (cpp_unique_options): Add -dD if %:debug-level-gt(2) rather than g3|ggdb3|gstabs3|gxcoff3|gvms3. * gcc.dg/cpp/pr97989-1.c: New test. * gcc.dg/cpp/pr97989-2.c: New test.
2020-12-01RISC-V: Drop some commited accidentally code.Kito Cheng1-1/+0
gcc/ChangeLog: * config.gcc (riscv*-*-*): Drop some commited accidentally code.
2020-12-01Daily bump.GCC Administrator6-1/+626
2020-11-30Unbreak build with --disable-analyzerDavid Malcolm1-0/+3
I broke the build with --disable-analyzer with g:66dde7bc64b75d4a338266333c9c490b12d49825, due to: ../../src/gcc/analyzer/analyzer-pass.cc: In member function ‘virtual unsigned int {anonymous}::pass_analyzer::execute(function*)’: ../../src/gcc/analyzer/analyzer-pass.cc:86:3: error: ‘sorry_no_analyzer’ was not declared in this scope 86 | sorry_no_analyzer (); | ^~~~~~~~~~~~~~~~~ Fixed by including the relevant header file. Sorry about the breakage. gcc/analyzer/ChangeLog: * analyzer-pass.cc: Include "analyzer/analyzer.h" for the declaration of sorry_no_analyzer; include "tree.h" and "function.h" as these are needed by it.
2020-11-30Add function comments for recently added member functions.Jeff Law1-0/+7
gcc/ * symtab.c (set_section_for_node): Add function comment. (set_section_from_node): Likewise.
2020-11-30internal/cpu: don't define CacheLinePadSize for mips64xIan Lance Taylor1-1/+1
For libgo the definition comes from the generated file cpugen.go. Fixes PR go/98041 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/273866
2020-11-30compiler, runtime: check len/cap for append(s, make(T, l)...)Ian Lance Taylor3-23/+19
The overflow checks done in growslice always reported an error for the capacity argument, even if it was the length argument that overflowed. This change lets the code pass the current issue4085b.go test. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/273806
2020-11-30libgo: define SO_RCVTIMEO on 32-bit GNU/LinuxIan Lance Taylor1-1/+1
Fixes golang/go#42872 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/273892
2020-11-30compiler: improve error messages for expected curly braceIan Lance Taylor5-12/+10
For golang/go#17328 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/273890
2020-11-30compiler: use correct assignment order for type assertionsIan Lance Taylor2-3/+27
For "a, b := v.(T)" we must set a before b. For golang/go#13433 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/273906
2020-11-30compiler: always use int context for index valuesIan Lance Taylor3-33/+18
For golang/go#14844 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/273889
2020-11-30compiler: better error messages for missing interface methodIan Lance Taylor3-3/+12
For golang/go#10700 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/273886
2020-11-30compiler: improve error for import of non-stringIan Lance Taylor3-34/+6
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/273867
2020-11-30Add analyzer plugin support and CPython GIL exampleDavid Malcolm14-4/+658
This patch adds a new GCC plugin event: PLUGIN_ANALYZER_INIT, called when -fanalyzer is starting, allowing for GCC plugins to register additional state-machine-based checks within -fanalyzer. The idea is that 3rd-party code might want to add domain-specific checks for its own APIs - with the caveat that the analyzer is itself still rather experimental. As an example, the patch adds a proof-of-concept plugin to the testsuite for checking CPython code: verifying that code that relinquishes CPython's global interpreter lock doesn't attempt to do anything with PyObjects in the sections where the lock isn't held. It also adds a warning about nested releases of the lock, which is forbidden. For example: demo.c: In function 'foo': demo.c:11:3: warning: use of PyObject '*(obj)' without the GIL 11 | Py_INCREF (obj); | ^~~~~~~~~ 'test': events 1-3 | | 15 | void test (PyObject *obj) | | ^~~~ | | | | | (1) entry to 'test' | 16 | { | 17 | Py_BEGIN_ALLOW_THREADS | | ~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) releasing the GIL here | 18 | foo (obj); | | ~~~~~~~~~ | | | | | (3) calling 'foo' from 'test' | +--> 'foo': events 4-5 | | 9 | foo (PyObject *obj) | | ^~~ | | | | | (4) entry to 'foo' | 10 | { | 11 | Py_INCREF (obj); | | ~~~~~~~~~ | | | | | (5) PyObject '*(obj)' used here without the GIL | Doing so requires adding some logic for ignoring macro expansions in analyzer diagnostics, since the insides of Py_INCREF and Py_BEGIN_ALLOW_THREADS are not of interest to the user for these cases. gcc/analyzer/ChangeLog: * analyzer-pass.cc (pass_analyzer::execute): Move sorry call to... (sorry_no_analyzer): New. * analyzer.h (class state_machine): New forward decl. (class logger): New forward decl. (class plugin_analyzer_init_iface): New. (sorry_no_analyzer): New decl. * checker-path.cc (checker_path::fixup_locations): New. * checker-path.h (checker_event::set_location): New. (checker_path::fixup_locations): New decl. * diagnostic-manager.cc (diagnostic_manager::emit_saved_diagnostic): Call checker_path::fixup_locations, and call fixup_location on the primary location. * engine.cc: Include "plugin.h". (class plugin_analyzer_init_impl): New. (impl_run_checkers): Invoke PLUGIN_ANALYZER_INIT callbacks. * pending-diagnostic.h (pending_diagnostic::fixup_location): New vfunc. gcc/ChangeLog: * doc/plugins.texi (Plugin callbacks): Add PLUGIN_ANALYZER_INIT. * plugin.c (register_callback): Likewise. (invoke_plugin_callbacks_full): Likewise. * plugin.def (PLUGIN_ANALYZER_INIT): New event. gcc/testsuite/ChangeLog: * gcc.dg/plugin/analyzer_gil_plugin.c: New test. * gcc.dg/plugin/gil-1.c: New test. * gcc.dg/plugin/gil.h: New header. * gcc.dg/plugin/plugin.exp (plugin_test_list): Add the new plugin and test.
2020-11-30Remove dead cc0 code from H8 portJeff Law8-607/+100
gcc/ * config/h8300/bitfield.md: Remove "cc" attribute on any insns where it remained. * config/h8300/combiner.md: Likewise. * config/h8300/jumpcall.md: Likewise. * config/h8300/logical.md: Likewise. * config/h8300/testcompare.md: Likewise. * config/h8300/h8300.md (old_cc attr): Renamed from cc attr. * config/h8300/h8300.c (notice_update_cc): Remove. (compute_plussi_cc): Change references to CC_* to OLD_CC_. (compute_logical_op_cc): Likewise. (shift_one, shift_two): Likewise. (compute_a_shift_cc): Likewise. (get_shift_alg): Likewise. (struct shift_insn): Change type of cc_valid field. (struct shift_info): Likewise. * config/h8300/save.md: Remove accidentially created file.
2020-11-30profopt-execute: unset testname_with_flags if create_gcov failsIlya Leoshkevich1-0/+1
When diffing test results, there sometimes occur spurious "New tests that PASS" / "Old tests that passed, that have disappeared" messages. The reason is that if create_gcov is not installed, then the cached testname_with_flags is not cleared and is carried over to the next test. gcc/testsuite/ChangeLog: 2020-11-26 Ilya Leoshkevich <iii@linux.ibm.com> * lib/profopt.exp: Unset testname_with_flags if create_gcov fails.
2020-11-30dse: Cope with bigger-than-integer modes [PR98037]Richard Sandiford2-2/+9
dse.c:find_shift_sequence tries to represent a store and load back as a shift right followed by a truncation. It therefore needs to find an integer mode in which to do the shift right. The loop it uses has the form: FOR_EACH_MODE_FROM (new_mode_iter, smallest_int_mode_for_size (GET_MODE_BITSIZE (read_mode))) which implicitly assumes that read_mode has an equivalent integer mode. As shown in the testcase, not all modes have such an integer mode. This patch just makes the code start from the smallest integer mode and skip modes that are too small. The loop already breaks at the first mode wider than word_mode. gcc/ PR rtl-optimization/98037 * dse.c (find_shift_sequence): Iterate over all integers and skip modes that are too small. gcc/testsuite/ PR rtl-optimization/98037 * gcc.target/aarch64/sve/acle/general/pr98037.c: New test.