Skip to content
Snippets Groups Projects
  1. Nov 23, 2020
    • Jozef Lawrynowicz's avatar
      Implement the "persistent" attribute · 762ca203
      Jozef Lawrynowicz authored
      The "persistent" attribute is used for variables that are initialized
      by the program loader, but are not initialized by the runtime startup
      code. "persistent" variables are placed in a non-volatile area of
      memory, which allows their value to "persist" between processor resets.
      
      gcc/c-family/ChangeLog:
      
      	* c-attribs.c (handle_special_var_sec_attribute): New.
      	(handle_noinit_attribute): Remove.
      	(attr_noinit_exclusions): Rename to...
      	(attr_section_exclusions): ...this, and add "persistent" attribute
      	exclusion.
      	(c_common_attribute_table): Add "persistent" attribute.
      
      gcc/ChangeLog:
      
      	* doc/extend.texi (Common Variable Attributes): Document the
      	"persistent" variable attribute.
      	* doc/sourcebuild.texi (Effective-Target Keywords): Document
      	the "persistent" effective target keyword.
      	* tree.h (DECL_PERSISTENT_P): Define.
      	* varasm.c (bss_initializer_p): Return false for a
      	DECL_PERSISTENT_P decl initialized to zero.
      	(default_section_type_flags): Handle the ".persistent" section.
      	(default_elf_select_section): Likewise.
      	(default_unique_section): Likewise.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.c-torture/execute/noinit-attribute.c: Moved to...
      	* c-c++-common/torture/attr-noinit-main.inc: ...here.
      	* lib/target-supports.exp (check_effective_target_persistent): New.
      	* c-c++-common/torture/attr-noinit-1.c: New test.
      	* c-c++-common/torture/attr-noinit-2.c: New test.
      	* c-c++-common/torture/attr-noinit-3.c: New test.
      	* c-c++-common/torture/attr-noinit-invalid.c: New test.
      	* c-c++-common/torture/attr-persistent-1.c: New test.
      	* c-c++-common/torture/attr-persistent-2.c: New test.
      	* c-c++-common/torture/attr-persistent-3.c: New test.
      	* c-c++-common/torture/attr-persistent-invalid.c: New test.
      	* c-c++-common/torture/attr-persistent-main.inc: New test.
      762ca203
    • Jozef Lawrynowicz's avatar
      cp/decl.c: Set DECL_INITIAL before attribute processing · fb8309d4
      Jozef Lawrynowicz authored
      Attribute handlers may want to examine DECL_INITIAL for a decl, to
      validate the attribute being applied. For C++, DECL_INITIAL is currently
      not set until cp_finish_decl, by which time attribute validation has
      already been performed.
      
      For msp430-elf this causes the "persistent" attribute to always be
      rejected for C++, since DECL_INITIAL must be non-null for the
      attribute to be applied to a decl.
      
      This patch ensures DECL_INITIAL is set for initialized decls early in
      start_decl, before attribute handlers run. This allows the
      initialization status of the decl to be examined by the handlers.
      DECL_INITIAL must be restored to it's initial value after attribute
      validation is performed, so as to not interfere with later decl
      processing.
      
      gcc/cp/ChangeLog:
      
      	* decl.c (start_decl): Set DECL_INITIAL for initialized decls
      	before attribute processing.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/msp430/data-attributes-2.c: Adjust test.
      	* g++.target/msp430/data-attributes.C: New test.
      	* g++.target/msp430/msp430.exp: New test.
      fb8309d4
    • Jozef Lawrynowicz's avatar
      Fix "noinit" attribute being ignored for -O0 and -fdata-sections · b510765d
      Jozef Lawrynowicz authored
      Variables with the "noinit" attribute are ignored at -O0 because they
      are treated like a regular bss variable and placed in the .bss section.
      
      With -fdata-sections they are ignored because they are not handled in
      resolve_unique_section.
      
      gcc/ChangeLog:
      
      	* tree.h (DECL_NOINIT_P): Define.
      	* varasm.c (DECL_NOINIT_P): Check DECL_NOINIT_P before using
      	unnamed bss/lcomm sections for bss_initializer variables.
      	(default_elf_select_section): Use DECL_NOINIT_P instead of
      	looking up attribute for .noinit section selection.
      	(default_unique_section): Check DECL_NOINIT_P for .noinit
      	section selection.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.c-torture/execute/noinit-attribute.c: Don't override
      	optimization options set by torture test harness.
      	* lib/target-supports.exp (check_effective_target_noinit): Adjust
      	comment formatting.
      b510765d
    • Matthew Malcomson's avatar
      Document bootstrap-asan configure option · 4a8c5435
      Matthew Malcomson authored
      Document how to configure using asan (bootstrap-asan option to the
      --with-build-config configure argument).
      
      gcc/ChangeLog:
      
      	* doc/install.texi: Document bootstrap-asan option.
      4a8c5435
    • Christophe Lyon's avatar
      testsuite/arm: add missing -mthumb to several tests · 771a4552
      Christophe Lyon authored
      Some tests force -mcpu=cortex-mXX but do not add -mthumb, causing
      errors if GCC is not configured to default to Thumb code
      (--with-mode=thumb):
      cc1: error: target CPU does not support ARM mode
      
      This patch adds -mthumb where relevant.
      
      2020-11-23  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	gcc/testsuite/
      	* gcc.target/arm/cortex-m55-nodsp-flag-hard.c: Add -mthumb.
      	* gcc.target/arm/cortex-m55-nodsp-flag-softfp.c: Likewise.
      	* gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c: Likewise.
      	* gcc.target/arm/cortex-m55-nofp-flag-hard.c: Likewise.
      	* gcc.target/arm/cortex-m55-nofp-flag-softfp.c: Likewise.
      	* gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c: Likewise.
      	* gcc.target/arm/cortex-m55-nomve-flag-hard.c: Likewise.
      	* gcc.target/arm/cortex-m55-nomve-flag-softfp.c: Likewise.
      	* gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c: Likewise.
      	* gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c: Likewise.
      	* gcc.target/arm/mve/intrinsics/pr97327.c: Likewise.
      771a4552
    • Richard Sandiford's avatar
      c++: Add missing verify_type_context call [PR97904] · d3585f5d
      Richard Sandiford authored
      When adding the verify_type_context target hook, I'd missed
      a site that needs to check an array element type.
      
      gcc/cp/
      	PR c++/97904
      	* pt.c (tsubst): Use verify_type_context to check the type
      	of an array element.
      
      gcc/testsuite/
      	PR c++/97904
      	* g++.dg/ext/sve-sizeless-1.C: Add more template tests.
      	* g++.dg/ext/sve-sizeless-2.C: Likewise.
      d3585f5d
    • GCC Administrator's avatar
      Daily bump. · b1a5e1b2
      GCC Administrator authored
      b1a5e1b2
  2. Nov 22, 2020
    • Uros Bizjak's avatar
      i386: Use SWI48DWI mode iterator for abs and maxmin [PR97873] · e23f47ec
      Uros Bizjak authored
      Generate special double mode sequence also for TImode on 64bit targets.
      
      2020-11-22  Uroš Bizjak  <ubizjak@gmail.com>
      
      	PR target/97873
      
      gcc/
      	* config/i386/i386.md (abs<mode>2): Use SWI48DWI mode iterator.
      	(*abs<dwi>2_doubleword): Use DWIH mode iterator.
      
      	(<maxmin:code><mode>3): Use SWI48DWI mode iterator.
      	(*<maxmin:code><dwi>3_doubleword): Use DWIH mode iterator.
      
      gcc/testsuite/
      	* gcc.target/i386/pr97873-2.c: New test.
      e23f47ec
    • Austin Law's avatar
      H8 cc0 conversion · f16897cb
      Austin Law authored
      gcc/
      	* config/h8300/addsub.md: Turn existing patterns into
      	define_insn_and_split style patterns where the splitter
      	adds a clobber of the condition code register.  Drop "cc"
      	attribute.  Add _clobber_flags patterns to match output of
      	the splitters.
      	(add<mod>3_incdec): Remove pattern
      	(adds/subs splitter): Only run before reload.
      	* config/h8300/bitfield.md: Turn existing patterns into
      	define_insn_and_split style patterns where the splitter
      	adds a clobber of the condition code register.  Drop "cc"
      	attribute.  Add _clobber_flags patterns to match output
      	of the splitters.
      	(cstoreqi4, cstorehi4, cstoresi4): Comment out
      	(*bstzhireg, *cmpstz, *bstz, *bistz, *cmpcondset): Likewise
      	(*condbset, *cmpcondbclr, *condbclr): Likewise.
      	(*cmpcondbsetreg, *condbsetreg, *cmpcondbclrreg): Likewise.
      	(*condbclrreg): Likewise.
      	* config/h8300/combiner.md: Turn existing patterns into
      	define_insn_and_split style patterns where the splitter
      	adds a clobber of the condition code register.  Drop "cc"
      	attribute.  Add _clobber_flags patterns to match output of
      	the splitters.  Add appropriate CC register clobbers to
      	existing splitters.
      	(*addsi3_and_r_1): Disable for now.
      	(*addsi3_and_not_r_1, bit-test branches): Likewise.
      	* config/h8300/divmod.md: Turn existing patterns into
      	define_insn_and_split style patterns where the splitter
      	adds a clobber of the condition code register.  Drop "cc"
      	attribute.  Add _clobber_flags patterns to match output of
      	the splitters.
      	* config/h8300/extensions.md: Turn existing patterns into
      	define_insn_and_split style patterns where the splitter
      	adds a clobber of the condition code register.  Drop "cc"
      	attribute.  Add _clobber_flags patterns to match output of
      	the splitters.
      	* config/h8300/genmova.sh: Drop "cc" attribute from patterns.
      	* config/h8300/mova.md: Drop "cc" attribute from patterns.
      	* config/h8300/h8300-modes.def: Add CCZN and CCZNV modes.
      	* config/h8300/h8300-protos.h (output_plussi): Update prototype.
      	(compute_plussi_length): Likewise.
      	(h8300_select_cc_mode): Add prototype.
      	(compute_a_shift_cc): Remove prototype
      	(cmpute_logical_op_cc): Likewise.
      	* config/h8300/h8300.c (names_big): Add "cc" register.
      	(names_extended, names_upper_extended): Likewise.
      	(h8300_emit_stack_adjustment): Be more selective about setting
      	RTX_FRAME_RELATED_P.
      	(h8300_print_operand): Handle CCZN mode
      	(h8300_select_cc_mode): New function.
      	(notice_update_cc): if-0 out.  Only kept for reference purposes.
      	(h8300_expand_store): Likewise.
      	(h8300_binary_length): Handle new insn forms.
      	(output_plussi): Add argument for NEED_FLAGS and handle that case.
      	(compute_plussi_length): Likewise.
      	(compute_logical_op_cc): Return integer.
      	(TARGET_FLAGS_REGNUM): Define.
      	* config/h8300/h8300.h (FIRST_PSEUDO_REGISTER): Bump for cc register.
      	(FIXED_REGISTERS, CALL_USED_REGISTERS): Handle cc register.
      	(REG_ALLOC_ORDER, REGISTER_NAMES): Likewise.
      	(SELECT_CC_MODE): Define.
      	* config/h8300/h8300.md: Add CC_REG.
      	Do not include peepholes.md for now.
      	* config/h8300/jumpcall.md (cbranchqi4): Consolidate into
      	cbranch<mode>4.
      	(cbranchhi4, cbranchsi4): Likewise.
      	(cbranch<mode>4): New expander.
      	(branch): New define_insn_and_split for use before reload.
      	(branch_1, branch_1_false): New patterns to match splitter output.
      	Remove code to manage cc_status.flags.
      	* config/h8300/logical.md: Turn existing patterns into
      	define_insn_and_split style patterns where the splitter
      	adds a clobber of the condition code register.  Drop "cc"
      	attribute.  Add _clobber_flags patterns to match output of
      	the splitters.  Move various peepholes into this file.
      	* config/h8300/movepush.md: Turn existing patterns into
      	define_insn_and_split style patterns where the splitter
      	adds a clobber of the condition code register.  Drop "cc"
      	attribute.  Add _clobber_flags patterns to match output of
      	the splitters.
      	* config/h8300/multiply.md: Turn existing patterns into
      	define_insn_and_split style patterns where the splitter
      	adds a clobber of the condition code register.  Drop "cc"
      	attribute.  Add _clobber_flags patterns to match output of
      	the splitters.
      	* config/h8300/other.md: Turn existing patterns into
      	define_insn_and_split style patterns where the splitter
      	adds a clobber of the condition code register.  Drop "cc"
      	attribute.  Add _clobber_flags patterns to match output of
      	the splitters.
      	* config/h8300/peepholes.md: Remove peepholes that were moved
      	elsewhere.
      	* config/h8300/predicates.md (simple_memory_operand): New.
      	* config/h8300/proepi.md: Drop "cc" attribute setting.
      	* config/h8300/shiftrotate.md: Turn existing patterns into
      	define_insn_and_split style patterns where the splitter
      	adds a clobber of the condition code register.  Drop "cc"
      	attribute.  Add _clobber_flags patterns to match output of
      	the splitters.
      	* config/h8300/testcompare.md: Turn existing patterns into
      	define_insn_and_split style patterns where the splitter
      	adds a clobber of the condition code register.  Drop "cc"
      	attribute.  Add _clobber_flags patterns to match output of
      	the splitters.  Disable various patterns for now.
      	Move some peepholes that were previously in peepholes.md here.
      f16897cb
    • Iain Buclaw's avatar
      d: Fix OutOfMemoryError thrown when appending to an array with a side effect · 23045f8b
      Iain Buclaw authored
      When appending a character to an array, the result of that concat
      assignment was not the new value of the array, similarly, when appending
      an array to another array, side effects were evaluated in reverse to the
      expected order of evaluation.
      
      As of this change, the address of the left-hand side expression is
      saved and re-used as the result.  Its evaluation is now also forced to
      occur before the concat operation itself is called.
      
      gcc/d/ChangeLog:
      
      	PR d/97889
      	* expr.cc (ExprVisitor::visit (CatAssignExp *)): Enforce LTR order of
      	evaluation on left and right hand side expressions.
      
      gcc/testsuite/ChangeLog:
      
      	PR d/97889
      	* gdc.dg/torture/pr97889.d: New test.
      23045f8b
    • Jakub Jelinek's avatar
      widening_mul: pattern recognize further forms of __builtin_add_overflow [PR95853] · c1fb592f
      Jakub Jelinek authored
      The following patch recognizes some further forms of additions with overflow
      checks as shown in the testcase, in particular where the unsigned addition is
      performed in a wider mode just to catch overflow with a > narrower_utype_max
      check.
      
      2020-11-22  Jakub Jelinek  <jakub@redhat.com>
      
      	PR tree-optimization/95853
      	* tree-ssa-math-opts.c (uaddsub_overflow_check_p): Add maxval
      	argument, if non-NULL, instead look for r > maxval or r <= maxval
      	comparisons.
      	(match_uaddsub_overflow): Pattern recognize even other forms of
      	__builtin_add_overflow, in particular when addition is performed
      	in a wider type and result compared to maximum of the narrower
      	type.
      
      	* gcc.dg/pr95853.c: New test.
      c1fb592f
    • Jeff Law's avatar
      Partially revert recent H8 patch for conditional branches · fdd2fb17
      Jeff Law authored
      So I'd forgotten an important tidbit on the H8 port.  Specifically
      for a branch instruction, the target label must be operand 0 for
      the length computations.
      
      This really only affects the main conditional branch pattern.
      The other conditional branch patterns are split and ultimately
      funnel into the main pattern.  This patch fixes the issue by
      partially reverting an earlier change.  This issue didn't show up
      until late in the optimization work on cc0 removal of the H8 port,
      but was caught by the testsuite.  So there's no new test.
      
      Built and regression tested H8 with this change, with and without
      the cc0 removal patches.
      
      gcc/
      
      	* config/h8300/jumpcall.md (branch_true, branch_false): Revert
      	recent change.  Ensure operand[0] is always the target label.
      fdd2fb17
    • Iain Sandoe's avatar
      Darwin : Avoid a C++ ODR violation seen with LTO. · 3c52cd51
      Iain Sandoe authored
      We have a similar code pattern in darwin-c.c to one in c-pragmas
      (most likely a cut & paste) with a struct type used locally to the
      TU.  With C++ we need to rename the type to avoid an ODR violation.
      
      gcc/ChangeLog:
      
      	* config/darwin-c.c (struct f_align_stack): Rename
      	to type from align_stack to f_align_stack.
      	(push_field_alignment): Likewise.
      	(pop_field_alignment): Likewise.
      3c52cd51
    • GCC Administrator's avatar
      Daily bump. · 7a97e2fc
      GCC Administrator authored
      7a97e2fc
  3. Nov 21, 2020
    • Marek Polacek's avatar
      c++: Extend -Wrange-loop-construct for binding-to-temp [PR94695] · c51e31a0
      Marek Polacek authored
      This patch finishes the second half of -Wrange-loop-construct I promised
      to implement: it warns when a loop variable in a range-based for-loop is
      initialized with a value of a different type resulting in a copy.  For
      instance:
      
        int arr[10];
        for (const double &x : arr) { ... }
      
      where in every iteration we have to create and destroy a temporary value
      of type double, to which we bind the reference.  This could negatively
      impact performance.
      
      As per Clang, this doesn't warn when the range returns a copy, hence the
      glvalue_p check.
      
      gcc/ChangeLog:
      
      	PR c++/94695
      	* doc/invoke.texi: Update the -Wrange-loop-construct description.
      
      gcc/cp/ChangeLog:
      
      	PR c++/94695
      	* parser.c (warn_for_range_copy): Warn when the loop variable is
      	initialized with a value of a different type resulting in a copy.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/94695
      	* g++.dg/warn/Wrange-loop-construct2.C: New test.
      c51e31a0
    • Marek Polacek's avatar
      c++: Reject identifier label in constexpr [PR97846] · 6f20c42c
      Marek Polacek authored
      [dcl.constexpr]/3 says that the function-body of a constexpr function
      shall not contain an identifier label, but we aren't enforcing that.
      
      This patch implements that.  Of course, we can't reject artificial
      labels.
      
      gcc/cp/ChangeLog:
      
      	PR c++/97846
      	* constexpr.c (potential_constant_expression_1): Reject
      	LABEL_EXPRs that use non-artifical LABEL_DECLs.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/97846
      	* g++.dg/cpp1y/constexpr-label.C: New test.
      6f20c42c
    • Marek Polacek's avatar
      c++: Fix ICE-on-invalid with -Wvexing-parse [PR97881] · 0999f260
      Marek Polacek authored
      This invalid (?) code broke my assumption that if decl_specifiers->type
      is null, there must be any type-specifiers.  Turn the assert into an if
      to fix this crash.
      
      gcc/cp/ChangeLog:
      
      	PR c++/97881
      	* parser.c (warn_about_ambiguous_parse): Only assume "int" if we
      	actually saw any type-specifiers.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/97881
      	* g++.dg/warn/Wvexing-parse9.C: New test.
      0999f260
    • David Edelsohn's avatar
      testsuite: localclass2 require LTO · 1cb50c0a
      David Edelsohn authored
      The testcase uses LTO but does not include the dg-require LTO.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/debug/localclass2.C: Require LTO.
      1cb50c0a
    • Marek Polacek's avatar
      c++: Allow template lambdas without lambda-declarator [PR97839] · 78cd6a63
      Marek Polacek authored
      Our implementation of template lambdas incorrectly requires the optional
      lambda-declarator.  This was probably required by an early draft of
      generic lambdas, but now the production is [expr.prim.lambda.general]:
      
       lambda-expression:
          lambda-introducer lambda-declarator [opt] compound-statement
          lambda-introducer < template-parameter-list > requires-clause [opt]
      	  lambda-declarator [opt] compound-statement
      
      Therefore, we should accept the following test.
      
      gcc/cp/ChangeLog:
      
      	PR c++/97839
      	* parser.c (cp_parser_lambda_declarator_opt): Don't require ().
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/97839
      	* g++.dg/cpp2a/lambda-generic8.C: New test.
      78cd6a63
    • Jan Hubicka's avatar
      Use OEP_MATCH_SIDE_EFFECTS in compare_ao_refs · ddaad23e
      Jan Hubicka authored
      	* tree-ssa-alias.c (ao_compare::compare_ao_refs,
      	ao_compare::hash_ao_ref): Use OEP_MATCH_SIDE_EFFECTS.
      ddaad23e
    • Marek Polacek's avatar
      c++: Fix wrong error with constexpr destructor [PR97427] · caf17f3a
      Marek Polacek authored
      When I implemented the code to detect modifying const objects in
      constexpr contexts, we couldn't have constexpr destructors, so I didn't
      consider them.  But now we can and that caused a bogus error in this
      testcase: [class.dtor]p5 says that "const and volatile semantics are not
      applied on an object under destruction.  They stop being in effect when
      the destructor for the most derived object starts." so we have to clear
      the TREE_READONLY flag we set on the object after the constructors have
      been called to mark it as no-longer-under-construction.  In the ~Foo
      call it's now an object under destruction, so don't report those errors.
      
      gcc/cp/ChangeLog:
      
      	PR c++/97427
      	* constexpr.c (cxx_set_object_constness): New function.
      	(cxx_eval_call_expression): Set new_obj for destructors too.
      	Call cxx_set_object_constness to set/unset TREE_READONLY of
      	the object under construction/destruction.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/97427
      	* g++.dg/cpp2a/constexpr-dtor10.C: New test.
      caf17f3a
    • Jonathan Wakely's avatar
      libstdc++: Fix atomic waiting for non-linux targets · 62d19588
      Jonathan Wakely authored
      This fixes some UNRESOLVED tests on (at least) Solaris and Darwin, and
      disables some tests that hang forever on Solaris. A proper fix is still
      needed.
      
      libstdc++-v3/ChangeLog:
      
      	* include/bits/atomic_base.h (atomic_flag::wait): Use correct
      	type for __atomic_wait call.
      	* include/bits/atomic_timed_wait.h (__atomic_wait_until): Check
      	_GLIBCXX_HAVE_LINUX_FUTEX.
      	* include/bits/atomic_wait.h (__atomic_notify): Likewise.
      	* include/bits/semaphore_base.h (_GLIBCXX_HAVE_POSIX_SEMAPHORE):
      	Only define if SEM_VALUE_MAX or _POSIX_SEM_VALUE_MAX is defined.
      	* testsuite/29_atomics/atomic/wait_notify/bool.cc: Disable on
      	non-linux targes.
      	* testsuite/29_atomics/atomic/wait_notify/generic.cc: Likewise.
      	* testsuite/29_atomics/atomic/wait_notify/pointers.cc: Likewise.
      	* testsuite/29_atomics/atomic_flag/wait_notify/1.cc: Likewise.
      	* testsuite/29_atomics/atomic_float/wait_notify.cc: Likewise.
      62d19588
    • Jan Hubicka's avatar
      Update vec-35.c and vect-35-big-array.c · d4a20f90
      Jan Hubicka authored
      We now determine depnedencies across union fields correctly.
      
      	* gcc.dg/vect/vect-35-big-array.c: Excpect 2 loops to be vectorized.
      	* gcc.dg/vect/vect-35.c: Excpect 2 loops to be vectorized.
      d4a20f90
    • Jan Hubicka's avatar
      Improve hasing of anonymous namespace types · 8ee8afa3
      Jan Hubicka authored
      	* ipa-icf.c (sem_function::equals_wpa): Do not compare ODR type with
      	-fno-devirtualize.
      	(sem_item_optimizer::update_hash_by_addr_refs): Hash anonymous ODR
      	types by TYPE_UID of their main variant.
      8ee8afa3
    • Aaron Sawdey's avatar
      Re-enable vector pair memcpy/memmove expansion · c84add5c
      Aaron Sawdey authored
      After the MMA opaque mode patch goes in, we can re-enable
      use of vector pair in the inline expansion of memcpy/memmove.
      
      gcc/
      	* config/rs6000/rs6000.c (rs6000_option_override_internal):
      	Enable vector pair memcpy/memmove expansion.
      c84add5c
    • Aaron Sawdey's avatar
      Make MMA builtins use opaque modes · f8f8909a
      Aaron Sawdey authored
      This patch changes powerpc MMA builtins to use the new opaque
      mode class and use modes OO (32 bytes) and XO (64 bytes)
      instead of POI/PXI. Using the opaque modes prevents
      optimization from trying to do anything with vector
      pair/quad, which was the problem we were seeing with the
      partial integer modes.
      
      gcc/
      	* config/rs6000/mma.md (unspec): Add assemble/extract UNSPECs.
      	(movoi): Change to movoo.
      	(*movpoi): Change to *movoo.
      	(movxi): Change to movxo.
      	(*movpxi): Change to *movxo.
      	(mma_assemble_pair): Change to OO mode.
      	(*mma_assemble_pair): New define_insn_and_split.
      	(mma_disassemble_pair): New define_expand.
      	(*mma_disassemble_pair): New define_insn_and_split.
      	(mma_assemble_acc): Change to XO mode.
      	(*mma_assemble_acc): Change to XO mode.
      	(mma_disassemble_acc): New define_expand.
      	(*mma_disassemble_acc): New define_insn_and_split.
      	(mma_<acc>): Change to XO mode.
      	(mma_<vv>): Change to XO mode.
      	(mma_<avv>): Change to XO mode.
      	(mma_<pv>): Change to OO mode.
      	(mma_<apv>): Change to XO/OO mode.
      	(mma_<vvi4i4i8>): Change to XO mode.
      	(mma_<avvi4i4i8>): Change to XO mode.
      	(mma_<vvi4i4i2>): Change to XO mode.
      	(mma_<avvi4i4i2>): Change to XO mode.
      	(mma_<vvi4i4>): Change to XO mode.
      	(mma_<avvi4i4>): Change to XO mode.
      	(mma_<pvi4i2>): Change to XO/OO mode.
      	(mma_<apvi4i2>): Change to XO/OO mode.
      	(mma_<vvi4i4i4>): Change to XO mode.
      	(mma_<avvi4i4i4>): Change to XO mode.
      	* config/rs6000/predicates.md (input_operand): Allow opaque.
      	(mma_disassemble_output_operand): New predicate.
      	* config/rs6000/rs6000-builtin.def:
      	Changes to disassemble builtins.
      	* config/rs6000/rs6000-call.c (rs6000_return_in_memory):
      	Disallow __vector_pair/__vector_quad as return types.
      	(rs6000_promote_function_mode): Remove function return type
      	check because we can't test it here any more.
      	(rs6000_function_arg): Do not allow __vector_pair/__vector_quad
      	as as function arguments.
      	(rs6000_gimple_fold_mma_builtin):
      	Handle mma_disassemble_* builtins.
      	(rs6000_init_builtins): Create types for XO/OO modes.
      	* config/rs6000/rs6000-modes.def: DElete OI, XI,
      	POI, and PXI modes, and create XO and OO modes.
      	* config/rs6000/rs6000-string.c (expand_block_move):
      	Update to OO mode.
      	* config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok_uncached):
      	Update for XO/OO modes.
      	(rs6000_rtx_costs): Make UNSPEC_MMA_XXSETACCZ cost 0.
      	(rs6000_modes_tieable_p): Update for XO/OO modes.
      	(rs6000_debug_reg_global): Update for XO/OO modes.
      	(rs6000_setup_reg_addr_masks): Update for XO/OO modes.
      	(rs6000_init_hard_regno_mode_ok): Update for XO/OO modes.
      	(reg_offset_addressing_ok_p): Update for XO/OO modes.
      	(rs6000_emit_move): Update for XO/OO modes.
      	(rs6000_preferred_reload_class): Update for XO/OO modes.
      	(rs6000_split_multireg_move): Update for XO/OO modes.
      	(rs6000_mangle_type): Update for opaque types.
      	(rs6000_invalid_conversion): Update for XO/OO modes.
      	* config/rs6000/rs6000.h (VECTOR_ALIGNMENT_P):
      	Update for XO/OO modes.
      	* config/rs6000/rs6000.md (RELOAD): Update for XO/OO modes.
      gcc/testsuite/
      	* gcc.target/powerpc/mma-double-test.c (main): Call abort for failure.
      	* gcc.target/powerpc/mma-single-test.c (main): Call abort for failure.
      	* gcc.target/powerpc/pr96506.c: Rename to pr96506-1.c.
      	* gcc.target/powerpc/pr96506-2.c: New test.
      f8f8909a
    • Aaron Sawdey's avatar
      Additional small changes to support opaque modes · 1e2d8575
      Aaron Sawdey authored
      After building some larger codes using opaque types and some c++ codes
      using opaque types it became clear I needed to go through and look for
      places where opaque types and modes needed to be handled. A whole pile
      of one-liners.
      
      gcc/
      	* typeclass.h: Add opaque_type_class.
      	* builtins.c (type_to_class): Identify opaque type class.
      	* dwarf2out.c (is_base_type): Handle opaque types.
      	(gen_type_die_with_usage): Handle opaque types.
      	* expr.c (count_type_elements): Opaque types should
      	never have initializers.
      	* ipa-devirt.c (odr_types_equivalent_p): No type-specific handling
      	for opaque types is needed as it eventually checks the underlying
      	mode which is what is important.
      	* tree-streamer.c (record_common_node): Handle opaque types.
      	* tree.c (type_contains_placeholder_1): Handle opaque types.
      	(type_cache_hasher::equal): No additional comparison needed for
      	opaque types.
      gcc/c-family
      	* c-pretty-print.c (c_pretty_printer::simple_type_specifier):
      	Treat opaque types like other types.
      	(c_pretty_printer::direct_abstract_declarator): Opaque types are
      	supported types.
      gcc/c
      	* c-aux-info.c (gen_type): Support opaque types.
      gcc/cp
      	* error.c (dump_type): Handle opaque types.
      	(dump_type_prefix): Handle opaque types.
      	(dump_type_suffix): Handle opaque types.
      	(dump_expr): Handle opaque types.
      	* pt.c (tsubst): Allow opaque types in templates.
      	(unify): Allow opaque types in templates.
      	* typeck.c (structural_comptypes): Handle comparison
      	of opaque types.
      1e2d8575
    • Iain Sandoe's avatar
      Darwin, libgfortran : Do not use environ directly from the library. · a3454130
      Iain Sandoe authored
      On macOS / Darwin, the environ variable can be used directly in the
      code of an executable, but cannot be used in the code of a shared
      library (i.e. libgfortran.dylib), in this case.
      
      In such cases, the  function _NSGetEnviron should be called to get
      the address of 'environ'.
      
      libgfortran/ChangeLog:
      
      	* intrinsics/execute_command_line.c (environ): Use
      	_NSGetEnviron to get the environment pointer on Darwin.
      a3454130
    • Iain Sandoe's avatar
      Darwin, libsanitizer : Support libsanitizer for x86_64-darwin20. · 93f1186f
      Iain Sandoe authored
      The sanitizer is supported for at least x86_64 and Darwin20.
      
      libsanitizer/ChangeLog:
      
      	* configure.tgt: Allow x86_64 Darwin2x.
      93f1186f
    • Ian Lance Taylor's avatar
    • GCC Administrator's avatar
      Daily bump. · 82e5048e
      GCC Administrator authored
      82e5048e
  4. Nov 20, 2020
    • Michael Meissner's avatar
      Include math.h in nextafter-2.c test. · 81a3f3d1
      Michael Meissner authored
      Since the test is compiled with -fno-builtin, include math.h to allow for
      implementations (like the PowerPC) that have multiple versions of long double
      that are selectable by switch.  Math.h could possibly switch what function
      nextafterl points to.
      
      gcc/testsuite/
      2020-11-17  Michael Meissner  <meissner@linux.ibm.com>
      
      	* gcc.dg/nextafter-2.c: Include math.h.
      81a3f3d1
    • Michael Meissner's avatar
      Power10: Add missing IEEE 128-bit XSCMP* built-in mappings. · 9bdb34ce
      Michael Meissner authored
      This patch adds support for mapping the scalar_cmp_exp_qp_* built-in functions
      to handle arguments that are either TFmode or KFmode, depending on whether long
      double uses the IEEE 128-bit representation (TFmode) or the IBM 128-bit
      representation (KFmode).  This shows up in the float128-cmp2-runnable.c test
      when long double uses the IEEE 128-bit representation.
      
      gcc/
      2020-11-20  Michael Meissner  <meissner@linux.ibm.com>
      
      	* config/rs6000/rs6000-call.c (rs6000_expand_builtin): Add missing
      	XSCMP* cases for IEEE 128-bit long double.
      9bdb34ce
    • Thomas Rodgers's avatar
      libstdc++: Add C++2a synchronization support · 83a1beee
      Thomas Rodgers authored
      Add support for -
        * atomic_flag::wait/notify_one/notify_all
        * atomic::wait/notify_one/notify_all
        * counting_semaphore
        * binary_semaphore
        * latch
      
      libstdc++-v3/ChangeLog:
      
      	* include/Makefile.am (bits_headers): Add new header.
      	* include/Makefile.in: Regenerate.
      	* include/bits/atomic_base.h (__atomic_flag::wait): Define.
      	(__atomic_flag::notify_one): Likewise.
      	(__atomic_flag::notify_all): Likewise.
      	(__atomic_base<_Itp>::wait): Likewise.
      	(__atomic_base<_Itp>::notify_one): Likewise.
      	(__atomic_base<_Itp>::notify_all): Likewise.
      	(__atomic_base<_Ptp*>::wait): Likewise.
      	(__atomic_base<_Ptp*>::notify_one): Likewise.
      	(__atomic_base<_Ptp*>::notify_all): Likewise.
      	(__atomic_impl::wait): Likewise.
      	(__atomic_impl::notify_one): Likewise.
      	(__atomic_impl::notify_all): Likewise.
      	(__atomic_float<_Fp>::wait): Likewise.
      	(__atomic_float<_Fp>::notify_one): Likewise.
      	(__atomic_float<_Fp>::notify_all): Likewise.
      	(__atomic_ref<_Tp>::wait): Likewise.
      	(__atomic_ref<_Tp>::notify_one): Likewise.
      	(__atomic_ref<_Tp>::notify_all): Likewise.
      	(atomic_wait<_Tp>): Likewise.
      	(atomic_wait_explicit<_Tp>): Likewise.
      	(atomic_notify_one<_Tp>): Likewise.
      	(atomic_notify_all<_Tp>): Likewise.
      	* include/bits/atomic_wait.h: New file.
      	* include/bits/atomic_timed_wait.h: New file.
      	* include/bits/semaphore_base.h: New file.
      	* include/std/atomic (atomic<bool>::wait): Define.
      	(atomic<bool>::wait_one): Likewise.
      	(atomic<bool>::wait_all): Likewise.
      	(atomic<_Tp>::wait): Likewise.
      	(atomic<_Tp>::wait_one): Likewise.
      	(atomic<_Tp>::wait_all): Likewise.
      	(atomic<_Tp*>::wait): Likewise.
      	(atomic<_Tp*>::wait_one): Likewise.
      	(atomic<_Tp*>::wait_all): Likewise.
      	* include/std/latch: New file.
      	* include/std/semaphore: New file.
      	* include/std/version: Add __cpp_lib_semaphore and
      	__cpp_lib_latch defines.
      	* testsuite/29_atomics/atomic/wait_notify/bool.cc: New test.
      	* testsuite/29_atomics/atomic/wait_notify/pointers.cc: Likewise.
      	* testsuite/29_atomics/atomic/wait_notify/generic.cc: Liekwise.
      	* testsuite/29_atomics/atomic_flag/wait_notify/1.cc: Likewise.
      	* testsuite/29_atomics/atomic_float/wait_notify.cc: Likewise.
      	* testsuite/29_atomics/atomic_integral/wait_notify.cc: Likewise.
      	* testsuite/29_atomics/atomic_ref/wait_notify.cc: Likewise.
      	* testsuite/30_threads/semaphore/1.cc: New test.
      	* testsuite/30_threads/semaphore/2.cc: Likewise.
      	* testsuite/30_threads/semaphore/least_max_value_neg.cc: Likewise.
      	* testsuite/30_threads/semaphore/try_acquire.cc: Likewise.
      	* testsuite/30_threads/semaphore/try_acquire_for.cc: Likewise.
      	* testsuite/30_threads/semaphore/try_acquire_posix.cc: Likewise.
      	* testsuite/30_threads/semaphore/try_acquire_until.cc: Likewise.
      	* testsuite/30_threads/latch/1.cc: New test.
      	* testsuite/30_threads/latch/2.cc: New test.
      	* testsuite/30_threads/latch/3.cc: New test.
      	* testsuite/util/atomic/wait_notify_util.h: New File.
      83a1beee
    • Jason Merrill's avatar
      dwarf2: ICE with local class in unused function [PR97918] · 89d9c634
      Jason Merrill authored
      Here, since we only mention bar<B>, we never emit debug information for it.
      But we do emit debug information for H<J>::h, so we need to refer to the
      debug info for bar<B>::J even though there is no bar<B>.  We deal with this
      sort of thing in dwarf2out with the limbo_die_list; parentless dies like J
      get attached to the CU at EOF.  But here, we were flushing the limbo list,
      then generating the template argument DIE for H<J> that refers to J, which
      adds J to the limbo list, too late to be flushed.  So let's flush a little
      later.
      
      gcc/ChangeLog:
      
      	PR c++/97918
      	* dwarf2out.c (dwarf2out_early_finish): flush_limbo_die_list
      	after gen_scheduled_generic_parms_dies.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/97918
      	* g++.dg/debug/localclass2.C: New test.
      89d9c634
    • Martin Sebor's avatar
      PR middle-end/97861 - ICE on an invalid redeclaration of a function with attribute access · 27c5416f
      Martin Sebor authored
      gcc/c-family/ChangeLog:
      	* c-warn.c (warn_parm_array_mismatch): Bail on invalid redeclarations
      	with fewer arguments.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/attr-access-4.c: New test.
      27c5416f
    • François Dumont's avatar
      libstdc++: Limit memory allocation in stable_sort/inplace_merge (PR 83938) · ba23e045
      François Dumont authored
      
      Reduce memory allocation in stable_sort/inplace_merge algorithms to what is needed
      by the implementation.
      
      Co-authored-by: default avatarJohn Chang <john.chang@samba.tv>
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/83938
      	* include/bits/stl_tempbuf.h (get_temporary_buffer): Change __len
      	computation in the loop to avoid truncation.
      	* include/bits/stl_algo.h:
      	(__inplace_merge): Take temporary buffer length from smallest range.
      	(__stable_sort): Limit temporary buffer length.
      	* testsuite/25_algorithms/inplace_merge/1.cc (test4): New.
      	* testsuite/performance/25_algorithms/stable_sort.cc: Test stable_sort
      	under different heap memory conditions.
      	* testsuite/performance/25_algorithms/inplace_merge.cc: New test.
      ba23e045
    • Maciej W. Rozycki's avatar
      libada: Check for the presence of _SC_NPROCESSORS_ONLN · 9e071b6e
      Maciej W. Rozycki authored
      Check for the presence of _SC_NPROCESSORS_ONLN rather than using a list
      of OS-specific macros to decide whether to use `sysconf' like elsewhere
      across GCC sources, fixing a compilation error:
      
      adaint.c: In function '__gnat_number_of_cpus':
      adaint.c:2398:26: error: '_SC_NPROCESSORS_ONLN' undeclared (first use in this function)
       2398 |   cores = (int) sysconf (_SC_NPROCESSORS_ONLN);
            |                          ^~~~~~~~~~~~~~~~~~~~
      adaint.c:2398:26: note: each undeclared identifier is reported only once for each function it appears in
      
      at least with with VAX/NetBSD 1.6.2.
      
      	gcc/ada/
      	* adaint.c (__gnat_number_of_cpus): Check for the presence of
      	_SC_NPROCESSORS_ONLN rather than a list of OS-specific macros
      	to decide whether to use `sysconf'.
      9e071b6e
    • Maciej W. Rozycki's avatar
      NetBSD/libgcc: Check for TARGET_DL_ITERATE_PHDR in the unwinder · f50c417a
      Maciej W. Rozycki authored
      Disable USE_PT_GNU_EH_FRAME frame unwinder support for old OS versions,
      fixing compilation errors:
      
      .../libgcc/unwind-dw2-fde-dip.c:75:21: error: unknown type name 'Elf_Phdr'
         75 | # define ElfW(type) Elf_##type
            |                     ^~~~
      .../libgcc/unwind-dw2-fde-dip.c:132:9: note: in expansion of macro 'ElfW'
        132 |   const ElfW(Phdr) *p_eh_frame_hdr;
            |         ^~~~
      .../libgcc/unwind-dw2-fde-dip.c:75:21: error: unknown type name 'Elf_Phdr'
         75 | # define ElfW(type) Elf_##type
            |                     ^~~~
      .../libgcc/unwind-dw2-fde-dip.c:133:9: note: in expansion of macro 'ElfW'
        133 |   const ElfW(Phdr) *p_dynamic;
            |         ^~~~
      .../libgcc/unwind-dw2-fde-dip.c:165:37: warning: 'struct dl_phdr_info' declared inside parameter list will not be visible outside of this definition or declaration
        165 | _Unwind_IteratePhdrCallback (struct dl_phdr_info *info, size_t size, void *ptr)
            |                                     ^~~~~~~~~~~~
      [...]
      
      and producing a working cross-compiler at least with VAX/NetBSD 1.6.2.
      
      	libgcc/
      	* unwind-dw2-fde-dip.c [__OpenBSD__ || __NetBSD__]
      	(USE_PT_GNU_EH_FRAME): Do not define if !TARGET_DL_ITERATE_PHDR.
      f50c417a
    • Martin Sebor's avatar
      PR middle-end/97879 - ICE on invalid mode in attribute access · df90f070
      Martin Sebor authored
      gcc/c-family/ChangeLog:
      
      	PR middle-end/97879
      	* c-attribs.c (handle_access_attribute): Handle ATTR_FLAG_INTERNAL.
      	Error out on invalid modes.
      
      gcc/c/ChangeLog:
      	PR middle-end/97879
      	* c-decl.c (start_function): Set ATTR_FLAG_INTERNAL in flags.
      
      gcc/ChangeLog:
      
      	PR middle-end/97879
      	* tree-core.h (enum attribute_flags): Add ATTR_FLAG_INTERNAL.
      
      gcc/testsuite/ChangeLog:
      
      	PR middle-end/97879
      	* gcc.dg/attr-access-3.c: New test.
      df90f070
Loading