Skip to content
Snippets Groups Projects
  1. Jan 07, 2025
    • Eric Botcazou's avatar
      ada: Elide the copy for bit-packed aggregates in (safe) assignments · a47c6d8a
      Eric Botcazou authored
      The in-place expansion has been historically disabled for them, but there
      does not seem to be any good reason left for this.
      
      gcc/ada/ChangeLog:
      
      	* exp_aggr.adb (Expand_Array_Aggregate): Do not exclude aggregates
      	of bit-packed array types in assignments from in-place expansion.
      a47c6d8a
    • Piotr Trojanek's avatar
      ada: Reject references to attribute Result in Exceptional_Cases · eccfadd5
      Piotr Trojanek authored
      Functions with aspect Side_Effects should not reference attribute Result in
      consequences of their aspect Exceptional_Cases.
      
      gcc/ada/ChangeLog:
      
      	* sem_prag.adb (Analyze_Exceptional_Cases_In_Decl_Part): Reject
      	references to attribute Result.
      eccfadd5
    • Piotr Trojanek's avatar
      ada: Move checks for consequences of Exceptional_Cases to GNAT · 0307abc8
      Piotr Trojanek authored
      Previously checks for consequence expressions of Exceptional_Cases aspects were
      done in GNATprove backend. However, we can do them in the frontend, where they
      will apply to all subprograms, regardless of the SPARK_Mode aspect.
      
      gcc/ada/ChangeLog:
      
      	* sem_prag.adb (Analyze_Exceptional_Cases_In_Decl_Part): Move check
      	from GNATprove backend to GNAT frontend.
      0307abc8
    • Piotr Trojanek's avatar
      ada: Fix comments about Subprogram_Variant and Exceptional_Cases · d734902a
      Piotr Trojanek authored
      The comment about Subprogram_Variant was outdated after more types have been
      allowed by the corresponding SPARK RM rule; the comment about Exceptional_Cases
      was incorrect, after being copy-pasted.
      
      gcc/ada/ChangeLog:
      
      	* sem_prag.adb (Analyze_Exceptional_Contract, Analyze_Variant): Fix
      	comments.
      d734902a
    • Steve Baird's avatar
      ada: Put_Image spec incorrectly ignored for Fixed_Point_Type'Base'Image call. · 67e3db71
      Steve Baird authored
      If a Put_Image aspect specification (introduced in Ada 2022) is given for a
      fixed point type Fx, then in some cases a call to Fx'Base'Image would
      incorrectly ignore the aspect specification and would instead return the
      pre-Ada2022 version of the image. However, a call to Fx'Image would do the
      right thing.
      
      gcc/ada/ChangeLog:
      
      	* exp_put_image.adb (Image_Should_Call_Put_Image): Cope with the case
      	where the attribute prefix for an Image attribute reference
      	denotes an Itype constructed for a fixed point type. Calling
      	Has_Aspect with such an Itype misses applicable aspect
      	specifications; we need to look on the right list. This comes up
      	if the prefix of the attribute reference is
      	Some_Fixed_Point_Type'Base.
      67e3db71
    • Gary Dismukes's avatar
      ada: Error on instantiation with defaulted formal type referencing other formal type · f409c452
      Gary Dismukes authored
      The compiler wasn't accounting for default subtypes on generic formal types
      that reference other formal types of the same generic, leading to errors
      about invalid subtypes. Several other problems that could lead to blowups
      or incorrect errors were noticed through testing related cases and fixed
      along the way.
      
      gcc/ada/ChangeLog:
      
      	* sem_ch12.adb (Analyze_One_Association): In the case of a formal type
      	that has a Default_Subtype_Mark that does not have its Entity field set,
      	this means the default refers to another formal type of the same generic
      	formal part, so locate the matching subtype in the Result_Renamings and
      	set Match's Entity to that subtype prior to the call to Instantiate_Type.
      	(Validate_Formal_TypeDefault.Reference_Formal): Add test of Entity being
      	Present, to prevent blowups on End_Label ids (which don't have Entity set).
      	(Validate_Formal_Type_Default.Validate_Derived_Type_Default): Apply
      	Base_Type to Formal.
      	(Validate_Formal_Type_Default): Guard interface-related semantic checks
      	with a test of Is_Tagged_Type.
      f409c452
    • Eric Botcazou's avatar
      ada: Use the syntax of Ada 2012 if-expression in -gnatR3 output · 90f504df
      Eric Botcazou authored
      This uses the syntax of Ada 2012 if-expression in the output produced by the
      -gnatR3 switch for dynamic expressions.
      
      gcc/ada/ChangeLog:
      
      	* repinfo.adb (List_GCC_Expression.Print_Expr) <Cond_Expr>: Do not
      	output the final "end".
      90f504df
    • Johannes Kanig's avatar
      ada: Preserve Warning_Doc_Switch in gnatprove invocation · c5ce2451
      Johannes Kanig authored
      When invoked by gnat2why, the Warning_Doc_Switch was unintenionally
      reset.
      
      gcc/ada/ChangeLog:
      
      	* gnat1drv.adb: (SPARK_Library_Warning): preserve Warning_Doc_Switch
      c5ce2451
    • Eric Botcazou's avatar
      ada: Restrict previous change made to expansion of allocators · bd1df4e8
      Eric Botcazou authored
      There is no need to build a cleanup if exceptions cannot be propagated.
      
      gcc/ada/ChangeLog:
      
      	* exp_ch4.adb (Expand_Allocator_Expression): Do not build a cleanup
      	if restriction No_Exception_Propagation is active.
      	* exp_ch6.adb (Make_Build_In_Place_Call_In_Allocator): Likewise.
      bd1df4e8
    • Andre Vehreschild's avatar
      Fortran: Ensure deep copy of allocatable components in cylic types [PR114612] · 25b380dc
      Andre Vehreschild authored
      gcc/fortran/ChangeLog:
      
      	PR fortran/114612
      
      	* trans-array.cc (structure_alloc_comps): Ensure deep copy is
      	also done for types having cycles.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/alloc_comp_deep_copy_4.f03: New test.
      25b380dc
    • Deng Jianbo's avatar
      LoongArch: Optimize initializing fp resgister to zero · 61400b66
      Deng Jianbo authored
      In LoongArch, currently uses instruction movgr2fr.{d|w} to move zero
      from fixed-point register to floating-pointer regsiter for initializing
      fp register to zero. When LSX or LASX is enabled, we can use instruction
      vxor.v which has lower latency than instruction movgr2fr.{d|w} to set fp
      register to zero directly.
      
      gcc/ChangeLog:
      
      	* config/loongarch/loongarch.cc (loongarch_output_move):
      	Optimize instructions for initializing fp regsiter to zero.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/loongarch/mov-zero-1.c: New test.
      	* gcc.target/loongarch/mov-zero-2.c: New test.
      61400b66
    • Gaius Mulley's avatar
      [PR modula2/118010, modula2/118183] Unable to rebuild the bootstrap tools and Wtypemismatch · 1ea6fef4
      Gaius Mulley authored
      
      This patch combines fixes for both PR-118010 (Wtypemismatch) and PR-118183
      (unable to rebuild the bootstrap tools).  PR-118010 required a new data
      type (COFF_T) to be exported from SYSTEM and used in all return
      types for libc.lseek.  The patch also includes COFF_T implemented in mc
      and this data type has been propagated though the translated versions
      of pge and mc.  Finally the patch adjusts the modula-2 declaration of
      location_t to reflect the new gcc 64 bit type.
      
      A new command line option -fm2-file-offset-bits= has been implemented to
      override the default 64 bit declaration of COFF_T.
      
      gcc/ChangeLog:
      
      	PR modula2/118010
      	* doc/gm2.texi (Compiler options): New option
      	-fm2-file-offset-bits=.
      
      gcc/m2/ChangeLog:
      
      	PR modula2/118010
      	PR modula2/118183
      	* gm2-compiler/M2GCCDeclare.mod (Import): COffT, GetCOffTType.
      	(DeclareDefaultSimpleTypes): Declare COFF_T.
      	* gm2-compiler/M2GenGCC.mod (GetParamSize): Correct first
      	parameter to BuildSize to use location rather than a token position.
      	* gm2-compiler/M2Options.def (SetFileOffsetBits): New procedure.
      	(GetFileOffsetBits): New procedure function.
      	* gm2-compiler/M2Options.mod (SetFileOffsetBits): New procedure.
      	(GetFileOffsetBits): New procedure function.
      	(OffTBits): New variable.
      	* gm2-compiler/M2System.def (COffT): New variable.
      	* gm2-compiler/M2System.mod (MakeExtraSystemTypes): Declare
      	COffT.
      	* gm2-compiler/P1SymBuild.mod (EndBuildProcedure): Call
      	PutProcedureDefined.
      	* gm2-compiler/P2SymBuild.mod (Debug): Reimplement.
      	* gm2-compiler/SymbolTable.mod (InitProcedureDeclaration):
      	Initialize ProcedureTok.
      	* gm2-gcc/gcctypes.def (location_t): Declare as CARDINAL64.
      	* gm2-gcc/m2linemap.cc (m2linemap_GetLocationBinary): Add
      	call to linemap_add indication a LC_LEAVE.
      	* gm2-gcc/m2options.h (M2Options_SetFileOffsetBits): New procedure.
      	(M2Options_GetFileOffsetBits): New procedure function.
      	* gm2-gcc/m2type.cc (m2_offt_type_node): New variable.
      	(m2type_GetCSizeTType): Reword comment.
      	(m2type_GetCSSizeTType): Reword comment.
      	(m2type_GetCOffTType): New function.
      	(build_m2_offt_type_node): New function.
      	(m2type_InitSystemTypes): Initialize m2_offt_type_node.
      	* gm2-gcc/m2type.def (GetCSizeTType): Reword comment.
      	(GetCOffTType): New procedure function.
      	* gm2-gcc/m2type.h (m2type_GetCOffTType): New prototype.
      	* gm2-lang.cc (gm2_langhook_handle_option): New clause
      	OPT_fm2_file_offset_bits_.
      	* gm2-libs-coroutines/SYSTEM.def: Add COFF_T to export list.
      	* gm2-libs-iso/SYSTEM.def: Ditto.
      	* gm2-libs-min/SYSTEM.def: Ditto.
      	* gm2-libs/SYSTEM.def: Add COFF_T and CARDINAL64 to export list.
      	* gm2-libs/libc.def (lseek): Change return type to COFF_T.
      	* lang.opt (-fm2-file-offset-bits=): New option.
      	* mc-boot-ch/Glibc.c (libc_lseek): Change result to use off_t.
      	* mc-boot/GASCII.cc: Rebuilt.
      	* mc-boot/GASCII.h: Ditto.
      	* mc-boot/GArgs.cc: Ditto.
      	* mc-boot/GArgs.h: Ditto.
      	* mc-boot/GAssertion.cc: Ditto.
      	* mc-boot/GAssertion.h: Ditto.
      	* mc-boot/GBreak.cc: Ditto.
      	* mc-boot/GBreak.h: Ditto.
      	* mc-boot/GCOROUTINES.h: Ditto.
      	* mc-boot/GCmdArgs.cc: Ditto.
      	* mc-boot/GCmdArgs.h: Ditto.
      	* mc-boot/GDebug.cc: Ditto.
      	* mc-boot/GDebug.h: Ditto.
      	* mc-boot/GDynamicStrings.cc: Ditto.
      	* mc-boot/GDynamicStrings.h: Ditto.
      	* mc-boot/GEnvironment.cc: Ditto.
      	* mc-boot/GEnvironment.h: Ditto.
      	* mc-boot/GFIO.cc: Ditto.
      	* mc-boot/GFIO.h: Ditto.
      	* mc-boot/GFormatStrings.cc: Ditto.
      	* mc-boot/GFormatStrings.h: Ditto.
      	* mc-boot/GFpuIO.cc: Ditto.
      	* mc-boot/GFpuIO.h: Ditto.
      	* mc-boot/GIO.cc: Ditto.
      	* mc-boot/GIO.h: Ditto.
      	* mc-boot/GIndexing.cc: Ditto.
      	* mc-boot/GIndexing.h: Ditto.
      	* mc-boot/GM2Dependent.cc: Ditto.
      	* mc-boot/GM2Dependent.h: Ditto.
      	* mc-boot/GM2EXCEPTION.cc: Ditto.
      	* mc-boot/GM2EXCEPTION.h: Ditto.
      	* mc-boot/GM2RTS.cc: Ditto.
      	(M2RTS_Halt): Call libc_exit.
      	(M2RTS_HaltC): Ditto.
      	* mc-boot/GM2RTS.h: Rebuilt.
      	* mc-boot/GMemUtils.cc: Ditto.
      	* mc-boot/GMemUtils.h: Ditto.
      	* mc-boot/GNumberIO.cc: Ditto.
      	* mc-boot/GNumberIO.h: Ditto.
      	* mc-boot/GPushBackInput.cc: Ditto.
      	* mc-boot/GPushBackInput.h: Ditto.
      	* mc-boot/GRTExceptions.cc: Ditto.
      	* mc-boot/GRTExceptions.h: Ditto.
      	* mc-boot/GRTco.h: Ditto.
      	* mc-boot/GRTentity.h: Ditto.
      	* mc-boot/GRTint.cc: Ditto.
      	* mc-boot/GRTint.h: Ditto.
      	* mc-boot/GSArgs.cc: Ditto.
      	* mc-boot/GSArgs.h: Ditto.
      	* mc-boot/GSFIO.cc: Ditto.
      	* mc-boot/GSFIO.h: Ditto.
      	* mc-boot/GSYSTEM.h: Ditto.
      	* mc-boot/GSelective.h: Ditto.
      	* mc-boot/GStdIO.cc: Ditto.
      	* mc-boot/GStdIO.h: Ditto.
      	* mc-boot/GStorage.cc: Ditto.
      	* mc-boot/GStorage.h: Ditto.
      	* mc-boot/GStrCase.cc: Ditto.
      	* mc-boot/GStrCase.h: Ditto.
      	* mc-boot/GStrIO.cc: Ditto.
      	* mc-boot/GStrIO.h: Ditto.
      	* mc-boot/GStrLib.cc: Ditto.
      	* mc-boot/GStrLib.h: Ditto.
      	* mc-boot/GStringConvert.cc: Ditto.
      	* mc-boot/GStringConvert.h: Ditto.
      	* mc-boot/GSysExceptions.h: Ditto.
      	* mc-boot/GSysStorage.cc: Ditto.
      	* mc-boot/GSysStorage.h: Ditto.
      	* mc-boot/GTimeString.cc: Ditto.
      	* mc-boot/GTimeString.h: Ditto.
      	* mc-boot/GUnixArgs.h: Ditto.
      	* mc-boot/Galists.cc: Ditto.
      	* mc-boot/Galists.h: Ditto.
      	* mc-boot/Gdecl.cc: Ditto.
      	* mc-boot/Gdecl.h: Rebuilt.
      	* mc-boot/Gdtoa.h: Ditto.
      	* mc-boot/Gerrno.h: Ditto.
      	* mc-boot/Gkeyc.cc: Ditto.
      	* mc-boot/Gkeyc.h: Rebuilt.
      	* mc-boot/Gldtoa.h: Ditto.
      	* mc-boot/Glibc.h: Ditto.
      	* mc-boot/Glibm.h: Ditto.
      	* mc-boot/Glists.cc: Ditto.
      	* mc-boot/Glists.h: Ditto.
      	* mc-boot/GmcComment.cc: Ditto.
      	* mc-boot/GmcComment.h: Ditto.
      	* mc-boot/GmcComp.cc: Ditto.
      	* mc-boot/GmcComp.h: Ditto.
      	* mc-boot/GmcDebug.cc: Ditto.
      	* mc-boot/GmcDebug.h: Ditto.
      	* mc-boot/GmcError.cc: Ditto.
      	* mc-boot/GmcError.h: Ditto.
      	* mc-boot/GmcFileName.cc: Ditto.
      	* mc-boot/GmcFileName.h: Ditto.
      	* mc-boot/GmcLexBuf.cc: Ditto.
      	* mc-boot/GmcLexBuf.h: Ditto.
      	* mc-boot/GmcMetaError.cc: Ditto.
      	* mc-boot/GmcMetaError.h: Ditto.
      	* mc-boot/GmcOptions.cc: Ditto.
      	* mc-boot/GmcOptions.h: Ditto.
      	* mc-boot/GmcPreprocess.cc: Ditto.
      	* mc-boot/GmcPreprocess.h: Ditto.
      	* mc-boot/GmcPretty.cc: Ditto.
      	* mc-boot/GmcPretty.h: Ditto.
      	* mc-boot/GmcPrintf.cc: Ditto.
      	* mc-boot/GmcPrintf.h: Ditto.
      	* mc-boot/GmcQuiet.cc: Ditto.
      	* mc-boot/GmcQuiet.h: Ditto.
      	* mc-boot/GmcReserved.cc: Ditto.
      	* mc-boot/GmcReserved.h: Ditto.
      	* mc-boot/GmcSearch.cc: Ditto.
      	* mc-boot/GmcSearch.h: Ditto.
      	* mc-boot/GmcStack.cc: Ditto.
      	* mc-boot/GmcStack.h: Ditto.
      	* mc-boot/GmcStream.cc: Ditto.
      	* mc-boot/GmcStream.h: Ditto.
      	* mc-boot/Gmcflex.h: Ditto.
      	* mc-boot/Gmcp1.cc: Ditto.
      	* mc-boot/Gmcp1.h: Ditto.
      	* mc-boot/Gmcp2.cc: Ditto.
      	* mc-boot/Gmcp2.h: Ditto.
      	* mc-boot/Gmcp3.cc: Ditto.
      	* mc-boot/Gmcp3.h: Ditto.
      	* mc-boot/Gmcp4.cc: Ditto.
      	* mc-boot/Gmcp4.h: Ditto.
      	* mc-boot/Gmcp5.cc: Ditto.
      	* mc-boot/Gmcp5.h: Ditto.
      	* mc-boot/GnameKey.cc: Ditto.
      	* mc-boot/GnameKey.h: Ditto.
      	* mc-boot/GsymbolKey.cc: Ditto.
      	* mc-boot/GsymbolKey.h: Ditto.
      	* mc-boot/Gtermios.h: Ditto.
      	* mc-boot/Gtop.cc: Ditto.
      	* mc-boot/Gvarargs.cc: Ditto.
      	* mc-boot/Gvarargs.h: Ditto.
      	* mc-boot/Gwlists.cc: Ditto.
      	* mc-boot/Gwlists.h: Ditto.
      	* mc-boot/Gwrapc.h: Ditto.
      	* mc/decl.mod (cofft): New enum.
      	(cardinal64): Ditto.
      	(cofftN): New variable.
      	(cardinal64N): Ditto.
      	(isProcedure): Remove.
      	(getSymName): Add clause for cofft and cardinal64.
      	(makeBase): Ditto.
      	(isOrdinal): Ditto.
      	(getType): Ditto.
      	(doGetExprType): Ditto.
      	(getScope): Ditto.
      	(doExprC): Ditto.
      	(isSystem): Ditto.
      	(doSystemC): Ditto.
      	(doDependants): Ditto.
      	(visitDependants): Ditto.
      	(genKind): Ditto.
      	(doSystemM2): Ditto.
      	(doDupExpr): Ditto.
      	(makeSystem): Initialize cofftN and cardinal64N.
      	* mc/keyc.mod (useUIntMin): Remove.
      	(useUIntMax): Ditto.
      	* pge-boot/GIndexing.h: Rebuilt.
      	* pge-boot/GSEnvironment.h: Ditto.
      	* pge-boot/GScan.h: Ditto.
      	* pge-boot/Glibc.h: Ditto.
      
      Signed-off-by: default avatarGaius Mulley <gaiusmod2@gmail.com>
      1ea6fef4
    • Andre Vehreschild's avatar
      Fortran: Extend cylic type detection for deallocate [PR116669] · d8970909
      Andre Vehreschild authored
      Using cycles in derived/class types lead to the compiler doing a endless
      recursion in several locations, when the cycle was not immediate.
      An immediate cyclic dependency is present in, for example T T::comp.
      Cylcic dependencies of the form T T2::comp; T2 T::comp2; are now
      detected and the recursive bit in the derived type's attr is set.
      
      gcc/fortran/ChangeLog:
      
      	PR fortran/116669
      
      	* class.cc (gfc_find_derived_vtab): Use attr to determine cyclic
      	type dependendies.
      	* expr.cc (gfc_has_default_initializer): Prevent endless
      	recursion by storing already visited derived types.
      	* resolve.cc (resolve_cyclic_derived_type): Determine if a type
      	is used in its hierarchy in a cyclic way.
      	(resolve_fl_derived0): Call resolve_cyclic_derived_type.
      	(resolve_fl_derived): Ensure vtab is generated when cyclic
      	derived types have allocatable components.
      	* trans-array.cc (structure_alloc_comps): Prevent endless loop
      	for derived type cycles.
      	* trans-expr.cc (gfc_get_ultimate_alloc_ptr_comps_caf_token):
      	Off topic, just prevent memory leaks.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/class_array_15.f03: Freeing more memory.
      	* gfortran.dg/recursive_alloc_comp_6.f90: New test.
      d8970909
    • Jennifer Schmitz's avatar
      AArch64: Remove AARCH64_EXTRA_TUNE_USE_NEW_VECTOR_COSTS · 70035b6c
      Jennifer Schmitz authored
      This patch removes the AARCH64_EXTRA_TUNE_USE_NEW_VECTOR_COSTS tunable and
      use_new_vector_costs entry in aarch64-tuning-flags.def and makes the
      AARCH64_EXTRA_TUNE_USE_NEW_VECTOR_COSTS paths in the backend the
      default. To that end, the function aarch64_use_new_vector_costs_p and its uses
      were removed. To prevent costing vec_to_scalar operations with 0, as
      described in
      https://gcc.gnu.org/pipermail/gcc-patches/2024-October/665481.html
      
      ,
      we adjusted vectorizable_store such that the variable n_adjacent_stores
      also covers vec_to_scalar operations. This way vec_to_scalar operations
      are not costed individually, but as a group.
      As suggested by Richard Sandiford, the "known_ne" in the multilane-check
      was replaced by "maybe_ne" in order to treat nunits==1+1X as a vector
      rather than a scalar.
      
      Two tests were adjusted due to changes in codegen. In both cases, the
      old code performed loop unrolling once, but the new code does not:
      Example from gcc.target/aarch64/sve/strided_load_2.c (compiled with
      -O2 -ftree-vectorize -march=armv8.2-a+sve -mtune=generic -moverride=tune=none):
      f_int64_t_32:
              cbz     w3, .L92
              mov     x4, 0
              uxtw    x3, w3
      +       cntd    x5
      +       whilelo p7.d, xzr, x3
      +       mov     z29.s, w5
              mov     z31.s, w2
      -       whilelo p6.d, xzr, x3
      -       mov     x2, x3
      -       index   z30.s, #0, #1
      -       uqdecd  x2
      -       ptrue   p5.b, all
      -       whilelo p7.d, xzr, x2
      +       index   z30.d, #0, #1
      +       ptrue   p6.b, all
              .p2align 3,,7
       .L94:
      -       ld1d    z27.d, p7/z, [x0, #1, mul vl]
      -       ld1d    z28.d, p6/z, [x0]
      -       movprfx z29, z31
      -       mul     z29.s, p5/m, z29.s, z30.s
      -       incw    x4
      -       uunpklo z0.d, z29.s
      -       uunpkhi z29.d, z29.s
      -       ld1d    z25.d, p6/z, [x1, z0.d, lsl 3]
      -       ld1d    z26.d, p7/z, [x1, z29.d, lsl 3]
      -       add     z25.d, z28.d, z25.d
      +       ld1d    z27.d, p7/z, [x0, x4, lsl 3]
      +       movprfx z28, z31
      +       mul     z28.s, p6/m, z28.s, z30.s
      +       ld1d    z26.d, p7/z, [x1, z28.d, uxtw 3]
              add     z26.d, z27.d, z26.d
      -       st1d    z26.d, p7, [x0, #1, mul vl]
      -       whilelo p7.d, x4, x2
      -       st1d    z25.d, p6, [x0]
      -       incw    z30.s
      -       incb    x0, all, mul #2
      -       whilelo p6.d, x4, x3
      +       st1d    z26.d, p7, [x0, x4, lsl 3]
      +       add     z30.s, z30.s, z29.s
      +       incd    x4
      +       whilelo p7.d, x4, x3
              b.any   .L94
       .L92:
              ret
      
      Example from gcc.target/aarch64/sve/strided_store_2.c (compiled with
      -O2 -ftree-vectorize -march=armv8.2-a+sve -mtune=generic -moverride=tune=none):
      f_int64_t_32:
              cbz     w3, .L84
      -       addvl   x5, x1, #1
              mov     x4, 0
              uxtw    x3, w3
      -       mov     z31.s, w2
      +       cntd    x5
              whilelo p7.d, xzr, x3
      -       mov     x2, x3
      -       index   z30.s, #0, #1
      -       uqdecd  x2
      -       ptrue   p5.b, all
      -       whilelo p6.d, xzr, x2
      +       mov     z29.s, w5
      +       mov     z31.s, w2
      +       index   z30.d, #0, #1
      +       ptrue   p6.b, all
              .p2align 3,,7
       .L86:
      -       ld1d    z28.d, p7/z, [x1, x4, lsl 3]
      -       ld1d    z27.d, p6/z, [x5, x4, lsl 3]
      -       movprfx z29, z30
      -       mul     z29.s, p5/m, z29.s, z31.s
      -       add     z28.d, z28.d, #1
      -       uunpklo z26.d, z29.s
      -       st1d    z28.d, p7, [x0, z26.d, lsl 3]
      -       incw    x4
      -       uunpkhi z29.d, z29.s
      +       ld1d    z27.d, p7/z, [x1, x4, lsl 3]
      +       movprfx z28, z30
      +       mul     z28.s, p6/m, z28.s, z31.s
              add     z27.d, z27.d, #1
      -       whilelo p6.d, x4, x2
      -       st1d    z27.d, p7, [x0, z29.d, lsl 3]
      -       incw    z30.s
      +       st1d    z27.d, p7, [x0, z28.d, uxtw 3]
      +       incd    x4
      +       add     z30.s, z30.s, z29.s
              whilelo p7.d, x4, x3
              b.any   .L86
       .L84:
      	ret
      
      The patch was bootstrapped and tested on aarch64-linux-gnu, no
      regression.
      OK for mainline?
      
      Signed-off-by: default avatarJennifer Schmitz <jschmitz@nvidia.com>
      
      gcc/
      	* tree-vect-stmts.cc (vectorizable_store): Extend the use of
      	n_adjacent_stores to also cover vec_to_scalar operations.
      	* config/aarch64/aarch64-tuning-flags.def: Remove
      	use_new_vector_costs as tuning option.
      	* config/aarch64/aarch64.cc (aarch64_use_new_vector_costs_p):
      	Remove.
      	(aarch64_vector_costs::add_stmt_cost): Remove use of
      	aarch64_use_new_vector_costs_p.
      	(aarch64_vector_costs::finish_cost): Remove use of
      	aarch64_use_new_vector_costs_p.
      	* config/aarch64/tuning_models/cortexx925.h: Remove
      	AARCH64_EXTRA_TUNE_USE_NEW_VECTOR_COSTS.
      	* config/aarch64/tuning_models/fujitsu_monaka.h: Likewise.
      	* config/aarch64/tuning_models/generic_armv8_a.h: Likewise.
      	* config/aarch64/tuning_models/generic_armv9_a.h: Likewise.
      	* config/aarch64/tuning_models/neoverse512tvb.h: Likewise.
      	* config/aarch64/tuning_models/neoversen2.h: Likewise.
      	* config/aarch64/tuning_models/neoversen3.h: Likewise.
      	* config/aarch64/tuning_models/neoversev1.h: Likewise.
      	* config/aarch64/tuning_models/neoversev2.h: Likewise.
      	* config/aarch64/tuning_models/neoversev3.h: Likewise.
      	* config/aarch64/tuning_models/neoversev3ae.h: Likewise.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/strided_load_2.c: Adjust expected outcome.
      	* gcc.target/aarch64/sve/strided_store_2.c: Likewise.
      70035b6c
    • Sam James's avatar
      testsuite: add testcase for fixed PR98000 · e53277d8
      Sam James authored
      gcc/testsuite/ChangeLog:
      	PR ipa/98000
      	* g++.dg/ipa/pr98000.C: New test.
      Unverified
      e53277d8
    • Sam James's avatar
      testsuite: add testcase for fixed PR117546 · f9ff4784
      Sam James authored
      PR117546 was fixed by Eric's r14-10693-gadab597af288d6 change, but
      the testcase here is sufficiently different to be worth including
      in torture/.
      
      gcc/testsuite/ChangeLog:
      	PR ipa/117546
      	* gcc.dg/torture/pr117546.c: New test.
      Unverified
      f9ff4784
    • GCC Administrator's avatar
      Daily bump. · e58b0dd3
      GCC Administrator authored
      e58b0dd3
  2. Jan 06, 2025
    • Alexandre Oliva's avatar
      expand: drop stack adjustments after barrier [PR118006] · 1b1a33f7
      Alexandre Oliva authored
      A gimple block with __builtin_unreachable () can't have code after it,
      and gimple optimizers ensure there isn't any, even without
      optimization.  But if the block requires stack adjustments,
      e.g. because of a call that passes arguments on the stack, expand will
      emit that after the barrier, and then rtl checkers rightfully
      complain.  Arrange to discard adjustments after a barrier.
      
      Strub expanders seem to be necessary to bring about the exact
      conditions that require stack adjustments after the block that ends
      with a __builtin_unreachable call.
      
      
      for  gcc/ChangeLog
      
      	PR middle-end/118006
      	* cfgexpand.cc (expand_gimple_basic_block): Do not emit
      	pending stack adjustments after a barrier.
      
      for  gcc/testsuite/ChangeLog
      
      	PR middle-end/118006
      	* gcc.target/i386/strub-pr118006.c: New.
      1b1a33f7
    • Akram Ahmad's avatar
      aarch64: remove extra XTN in vector concatenation · 6069f02a
      Akram Ahmad authored
      GIMPLE code which performs a narrowing truncation on the result of a
      vector concatenation currently results in an unnecessary XTN being
      emitted following a UZP1 to concate the operands. In cases such as this,
      UZP1 should instead use a smaller arrangement specifier to replace the
      XTN instruction. This is seen in cases such as in this GIMPLE example:
      
      	int32x2_t foo (svint64_t a, svint64_t b)
      	{
      	  vector(2) int vect__2.8;
      	  long int _1;
      	  long int _3;
      	  vector(2) long int _12;
      
      	  <bb 2> [local count: 1073741824]:
      	  _1 = svaddv_s64 ({ -1, 0, 0, 0, 0, 0, 0, 0, ... }, a_6(D));
      	  _3 = svaddv_s64 ({ -1, 0, 0, 0, 0, 0, 0, 0, ... }, b_7(D));
      	  _12 = {_1, _3};
      	  vect__2.8_13 = (vector(2) int) _12;
      	  return vect__2.8_13;
      
      	}
      
      Original assembly generated:
      
      	bar:
      	        ptrue   p3.b, all
      	        uaddv   d0, p3, z0.d
      	        uaddv   d1, p3, z1.d
      	        uzp1    v0.2d, v0.2d, v1.2d
      	        xtn     v0.2s, v0.2d
      	        ret
      
      This patch therefore defines the *aarch64_trunc_concat<mode> insn which
      truncates the concatenation result, rather than concatenating the
      truncated operands (such as in *aarch64_narrow_trunc<mode>), resulting
      in the following optimised assembly being emitted:
      
      	bar:
      	        ptrue   p3.b, all
      	        uaddv   d0, p3, z0.d
      	        uaddv   d1, p3, z1.d
      	        uzp1    v0.2s, v0.2s, v1.2s
      	        ret
      
      This patch passes all regression tests on aarch64 with no new failures.
      A supporting test for this optimisation is also written and passes.
      
      OK for master? I do not have commit rights so I cannot push the patch
      myself.
      
      gcc/ChangeLog:
      
      	* config/aarch64/aarch64-simd.md: (*aarch64_trunc_concat)
      	new insn definition.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/aarch64/sve/truncated_concatenation_1.c: new test
      	for the above example and other modes covered by insn
      	definitions.
      6069f02a
    • Stefan Schulze Frielinghaus's avatar
      Fix type in some Min() calls (#119248) · 7a7903de
      Stefan Schulze Frielinghaus authored
      This is a follow-up to 6dec33834d1fd89f16e271dde9607c1de9554144 and
      pull requests #116957 and #119114.
      
      Cherry picked from LLVM commit 65a2eb0b1589590ae78cc1e5f05cd004b3b3bec5.
      
      libsanitizer/ChangeLog:
      
      	PR sanitizer/117725
      	* sanitizer_common/sanitizer_common_interceptors.inc: Cherry
      	picked from LLVM commit 65a2eb0b1589590ae78cc1e5f05cd004b3b3bec5.
      7a7903de
    • Vitaly Buka's avatar
      Fix few size types in memprof (#119114) · f0b82562
      Vitaly Buka authored
      
      Fix type in a few related Min() calls.
      
      Follow up to #116957.
      
      Cherry picked from LLVM commit 6dec33834d1fd89f16e271dde9607c1de9554144
      (removed memprof part).
      
      libsanitizer/ChangeLog:
      
      	PR sanitizer/117725
      	* asan/asan_interceptors.cpp: Cherry picked from LLVM commit
      	6dec33834d1fd89f16e271dde9607c1de9554144.
      	* sanitizer_common/sanitizer_common_interceptors.inc: Ditto.
      
      Co-authored-by: default avatarStefan Schulze Frielinghaus <stefansf@linux.ibm.com>
      f0b82562
    • Stefan Schulze Frielinghaus's avatar
      Add type __sanitizer::ssize (#116957) · 1bd03564
      Stefan Schulze Frielinghaus authored
      Since the sanitizer merge in commit r15-5164-gfa321004f3f628 of GCC
      which entails LLVM commit 61a6439f35b6de28ff4aff4450d6fca970292fd5, GCCs
      bootstrap is broken on s390 -m31. This is due to commit
      ec68dc1ca4d967b599f1202855917d5ec9cae52f which introduces stricter type
      checking which is why GCC bootstrap fails with
      
      ```
      In file included from /gcc/src/libsanitizer/interception/interception.h:18,
                       from /gcc/src/libsanitizer/interception/interception_type_test.cpp:14:
      /gcc/src/libsanitizer/interception/interception_type_test.cpp:30:61: error: static assertion failed
         30 | COMPILER_CHECK((__sanitizer::is_same<::SSIZE_T, ::ssize_t>::value));
            |                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
      /gcc/src/libsanitizer/sanitizer_common/sanitizer_internal_defs.h:363:44: note: in definition of macro 'COMPILER_CHECK'
        363 | #define COMPILER_CHECK(pred) static_assert(pred, "")
            |                                            ^~~~
      make[8]: *** [Makefile:469: interception_type_test.lo] Error 1
      ```
      
      The culprit seems to be that we don't check for equality of type sizes
      anymore but rather whether the types are indeed the same. On s390 -m31
      we have that `sizeof(int)==sizeof(long)` holds which is why previously
      the checks succeeded. They fail now because
      
      ```
      size_t      => unsigned long
      ssize_t     => long
      ptrdiff_t   => int
      ::SSIZE_T   => __sanitizer::sptr => int
      ::PTRDIFF_T => __sanitizer::sptr => int
      ```
      
      This is fixed by mapping `SSIZE_T` to `long` in the end.
      
      ```
      typedef long ssize;
      typedef sptr ssize;
      
      ```
      
      Cherry picked from LLVM commit ce44640fe29550461120d22b0358e6cac4aed822.
      
      libsanitizer/ChangeLog:
      
      	PR sanitizer/117725
      	* interception/interception.h: Cherry picked from LLVM commit
      	ce44640fe29550461120d22b0358e6cac4aed822.
      	* sanitizer_common/sanitizer_internal_defs.h: Ditto.
      1bd03564
    • Stefan Schulze Frielinghaus's avatar
      Replace uptr by usize/SIZE_T in interfaces · 0bb38b27
      Stefan Schulze Frielinghaus authored
      For some targets uptr is mapped to unsigned int and size_t to unsigned
      long and sizeof(int)==sizeof(long) holds.  Still, these are distinct
      types and type checking may fail.  Therefore, replace uptr by
      usize/SIZE_T wherever a size_t is expected.
      
      Part of #116957
      
      Cherry picked from LLVM commit 9a156f6b2b0c892d8713ba907f07f027b24953d8
      (removed memprof, msan, and nsan parts).
      
      libsanitizer/ChangeLog:
      
      	PR sanitizer/117725
      	* asan/asan_interceptors.cpp: Cherry picked LLVM commit
      	9a156f6b2b0c892d8713ba907f07f027b24953d8.
      	* asan/asan_interceptors.h: Ditto.
      	* asan/asan_interceptors_memintrinsics.h: Ditto.
      	* sanitizer_common/sanitizer_common_interceptors.inc: Ditto.
      	* sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc:
      	Ditto.
      	* sanitizer_common/sanitizer_platform_limits_posix.h: Ditto.
      	* tsan/tsan_interceptors_posix.cpp: Ditto.
      0bb38b27
    • Ian Lance Taylor's avatar
      crypto/tls: fix Config.Time in tests using expired certificates · ed1493e1
      Ian Lance Taylor authored
      This is a backport of https://go.dev/cl/640237 from the main repo.
      
      Fixes PR go/118286
      
      Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/640435
      ed1493e1
    • Stafford Horne's avatar
      or1k: add .note.GNU-stack section on linux · 803808b4
      Stafford Horne authored
      In the OpenRISC build we get the following warning:
      
          ld: warning: __modsi3_s.o: missing .note.GNU-stack section implies executable stack
          ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
      
      Fix this by adding a .note.GNU-stack to indicate the stack does not need to be
      executable for the lib1funcs.
      
      Note, this is also needed for the upcoming glibc 2.41.
      
      libgcc/
      	* config/or1k/lib1funcs.S: Add .note.GNU-stack section on linux.
      803808b4
    • Fangrui Song's avatar
      Respect -fprofile-prefix-map for getcwd in .gcno files · fa778ba7
      Fangrui Song authored
      so that
      `gcc -c a.cc --coverage -fprofile-prefix-map=$PWD=.`
      does not emit $PWD in the generated a.gcno file.
      
      gcc/ChangeLog:
      
      	PR gcov-profile/96092
      	* coverage.cc (coverage_init): Remap getpwd().
      fa778ba7
    • Jennifer Schmitz's avatar
      SVE intrinsics: Fold svmul by -1 to svneg for unsigned types · f9c99d40
      Jennifer Schmitz authored
      As follow-up to
      https://gcc.gnu.org/pipermail/gcc-patches/2024-October/665472.html
      
      ,
      this patch implements folding of svmul by -1 to svneg for
      unsigned SVE vector types. The key idea is to reuse the existing code that
      does this fold for signed types and feed it as callback to a helper function
      that adds the necessary type conversions.
      
      For example, for the test case
      svuint64_t foo (svuint64_t x, svbool_t pg)
      {
        return svmul_n_u64_x (pg, x, -1);
      }
      
      the following gimple sequence is emitted (-O2 -mcpu=grace):
      svuint64_t foo (svuint64_t x, svbool_t pg)
      {
        svint64_t D.12921;
        svint64_t D.12920;
        svuint64_t D.12919;
      
        D.12920 = VIEW_CONVERT_EXPR<svint64_t>(x);
        D.12921 = svneg_s64_x (pg, D.12920);
        D.12919 = VIEW_CONVERT_EXPR<svuint64_t>(D.12921);
        goto <D.12922>;
        <D.12922>:
        return D.12919;
      }
      
      In general, the new helper gimple_folder::convert_and_fold
      - takes a target type and a function pointer,
      - converts the lhs and all non-boolean vector types to the target type,
      - passes the converted lhs and arguments to the callback,
      - receives the new gimple statement from the callback function,
      - adds the necessary view converts to the gimple sequence,
      - and returns the new call.
      
      Because all arguments are converted to the same target types, the helper
      function is only suitable for folding calls whose arguments are all of
      the same type. If necessary, this could be extended to convert the
      arguments to different types differentially.
      
      The patch was bootstrapped and tested on aarch64-linux-gnu, no regression.
      OK for mainline?
      
      Signed-off-by: default avatarJennifer Schmitz <jschmitz@nvidia.com>
      
      gcc/ChangeLog:
      
      	* config/aarch64/aarch64-sve-builtins-base.cc
      	(svmul_impl::fold): Wrap code for folding to svneg in lambda
      	function and pass to gimple_folder::convert_and_fold to enable
      	the transform for unsigned types.
      	* config/aarch64/aarch64-sve-builtins.cc
      	(gimple_folder::convert_and_fold): New function that converts
      	operands to target type before calling callback function, adding the
      	necessary conversion statements.
      	(gimple_folder::redirect_call): Set fntype of redirected call.
      	(get_vector_type): Move from here to aarch64-sve-builtins.h.
      	* config/aarch64/aarch64-sve-builtins.h
      	(gimple_folder::convert_and_fold): Declare function.
      	(get_vector_type): Move here as inline function.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/aarch64/sve/acle/asm/mul_u8.c: Adjust expected outcome.
      	* gcc.target/aarch64/sve/acle/asm/mul_u16.c: Likewise.
      	* gcc.target/aarch64/sve/acle/asm/mul_u32.c: Likewise.
      	* gcc.target/aarch64/sve/acle/asm/mul_u64.c: New test and adjust
      	expected outcome.
      f9c99d40
    • Eric Botcazou's avatar
      Ada: fix spurious relinking of gnatbind for cross compilers · 144ddb0c
      Eric Botcazou authored
      The problem has been introduced by r15-1881.
      
      gcc/ada
      	PR ada/118247
      	* gcc-interface/Make-lang.in (GNATTOOLS_CROSS_MV): Copy gnatbind
      	instead of moving it.
      144ddb0c
    • Martin Jambor's avatar
      ipa-cp: Make dumping of bit masks representing -1 nicer · 72b27315
      Martin Jambor authored
      Dumps of the lattices representing bit-values and of propagation
      results of bit-values can print a really long hexadecimal value when
      the bit-value represents -1 (all bits set).  This patch simply detect
      that situation and prints the string "-1" in that case, making the
      dumps somewhat nicer.
      
      gcc/ChangeLog:
      
      2025-01-03  Martin Jambor  <mjambor@suse.cz>
      
      	* ipa-cp.cc (ipcp_print_widest_int): New function.
      	(ipcp_store_vr_results): Use it.
      	(ipcp_bits_lattice::print): Likewise.  Fix formatting.
      Unverified
      72b27315
    • Mark Wielaard's avatar
      tree-switch-conversion: don't apply switch size limit on jump tables · 668cad04
      Mark Wielaard authored
      commit 56946c80 ("gimple: Add limit after which slower switchlower
      algs are used [PR117091] [PR117352]") introduced a limit on the number
      of cases of a switch. It also bails out on finding jump tables if the
      switch is too large. This introduces a compile time regression during
      bootstrap. A riscv bootstrap takes hours longer. Particularly
      insn-attrtab.cc will take hours instead of minutes. Fix this by not
      applying the switch size limit on jump tables.
      
      An alternative would be to implement greedy switch clustering for jump
      tables as is done for switch bitmap clustering.
      
      gcc/ChangeLog:
      
      	PR tree-optimization/118032
      	* tree-switch-conversion.cc (jump_table_cluster::find_jump_tables):
      	Remove param_switch_lower_slow_alg_max_cases check.
      668cad04
    • Tamar Christina's avatar
      AArch64: Implement four and eight chunk VLA concats [PR118272] · 830bead4
      Tamar Christina authored
      The following testcase
      
        #pragma GCC target ("+sve")
        extern char __attribute__ ((simd, const)) fn3 (int, short);
        void test_fn3 (float *a, float *b, double *c, int n)
        {
          for (int i = 0; i < n; ++i)
            a[i] = fn3 (b[i], c[i]);
        }
      
      at -Ofast ICEs because my previous patch only added support for combining 2
      partial SVE vectors into a bigger vector.  However There can also 4 and 8
      piece subvectors.
      
      This patch fixes this by implementing the missing expansions.
      
      gcc/ChangeLog:
      
      	PR target/96342
      	PR target/118272
      	* config/aarch64/aarch64-sve.md (vec_init<mode><Vquad>,
      	vec_initvnx16qivnx2qi): New.
      	* config/aarch64/aarch64.cc (aarch64_sve_expand_vector_init_subvector):
      	Rewrite to support any arbitrary combinations.
      	* config/aarch64/iterators.md (SVE_NO2E): Update to use SVE_NO4E
      	(SVE_NO2E, Vquad): New.
      
      gcc/testsuite/ChangeLog:
      
      	PR target/96342
      	PR target/118272
      	* gcc.target/aarch64/vect-simd-clone-3.c: New test.
      830bead4
    • Eric Botcazou's avatar
      ada: Fix small thinko in previous change to two-pass aggregate expansion · f345ae3e
      Eric Botcazou authored
      We need a type tailored to the base index type to compute the length.
      
      gcc/ada/ChangeLog:
      
      	* exp_aggr.adb (Two_Pass_Aggregate_Expansion): Use the base type of
      	the index type to find the type used to compute the length.
      f345ae3e
    • Eric Botcazou's avatar
      ada: Streamline runtime support of finalization collections · ad8242d6
      Eric Botcazou authored
      Finalization collections are declared as (limited) controlled types so that
      they can be naturally attached to a finalization master, but the same result
      can be achieved by means of (limited) finalizable types, which need not be
      tagged and thus avoid dragging the runtime support of tagged types.
      
      gcc/ada/ChangeLog:
      
      	* libgnat/s-finpri.ads: Remove clause for Ada.Finalization.
      	(Finalization_Collection): Change to limited private type with the
      	Finalizable aspect.
      	(Initialize): Remove "overriding" keyword.
      	(Finalize): Likewise.
      	* libgnat/s-finpri.adb (Initialize): Likewise.
      	(Finalize): Likewise.
      ad8242d6
    • Eric Botcazou's avatar
      ada: Fix predicate involving array indexing rejected in generic package · 0d736433
      Eric Botcazou authored
      The indexing is rejected with the message:
      
        error: reference to current instance of type does not denote a type
      
      when it is applied to a prefix which is the current instance of the type
      to which the predicate is applied.
      
      There is already a specific handling of component selection for this case
      present in Find_Selected_Component, so this adds an equivalent specific
      handling of indexing for this case to Analyze_Indexed_Component_Form.
      
      gcc/ada/ChangeLog:
      
      	PR ada/117569
      	* sem_ch4.adb (Analyze_Indexed_Component_Form): Do not rewrite the
      	node as a type conversion if it is the current instance of a type
      	in a generic unit.
      	* sem_ch8.adb (Find_Selected_Component): Restrict the special case
      	of the current instance of a type to a generic unit.
      0d736433
    • Bob Duff's avatar
      ada: Fix incorrect RM reference in s-imagef.adb · 06bc21f4
      Bob Duff authored
      gcc/ada/ChangeLog:
      
      	* libgnat/s-imagef.adb (Set_Image_Integer):
      	Change "RM A.3.10" to be "RM A.10.9".
      06bc21f4
    • Alexandre Oliva's avatar
      ada: Reduce footprint of C++ exception interoperation support · 2d2b018d
      Alexandre Oliva authored
      The initial C++ base-type exception interoperation support change
      brought all of GNAT.CPP* along with raise-gcc, because of
      [__gnat_]Convert_Caught_Object.  Move that private but pragma-exported
      function to GNAT.CPP.Std.Type_Info, so that it can rely on the C++
      virtual/dispatch calls that justified the introduction of the Ada
      wrapper type, to avoid emulating virtual calls in C or bringing in a
      dependency on the C++ compiler and runtime.
      
      Drop the CharPtr package instantiation, that brought a huge amount of
      unnecessary code, and use string and storage primitives instead, using
      the strcmp builtin directly for the C string compares.
      
      Move the conversion to Ada String in Name to the wrapper interface in
      GNAT.CPP.Std, adjusting the private internal type to shave off a few
      more bytes from the only unit that raise-gcc will still need.
      
      Finally, disable heap finalization for Type_Info_Ptr, to avoid
      dragging in all of the finalization code.  Thank to Eric Botcazou for
      the suggestion.
      
      gcc/ada/ChangeLog:
      
      	* libgnat/g-cppexc.adb (Convert_Caught_Object): Move...
      	* libgnat/g-cstyin.adb (Convert_Caught_Object):  ... here.
      	Use object call notation.
      	(strcmp): New.
      	(Char_Arr, CharPtr, Char_Pointer, To_chars_ptr): Drop.  Do not
      	import Interfaces.C.Pointers.
      	(To_Pointer): Convert from System.Address.
      	(Name_Starts_With_Asterisk): Rename local variable.
      	(Name_Past_Asterisk): Rewrite with System.Address and strcmp.
      	Import System.Storage_Elements.
      	(Equals): Use strcmp.
      	(Before): Fix logic error.  Use strcmp.
      	(Name): Move conversion to String...
      	* libgnat/g-cppstd.adb (Name): ... here.  Import
      	Interfaces.C.Strings.
      	* libgnat/g-cppstd.ads (Type_Info_Ptr): Disable heap
      	finalization.
      	* libgnat/g-cstyin.ads (Name): Change return type.
      2d2b018d
    • Claire Dross's avatar
      ada: Support new SPARK aspect Exit_Cases · f49b098e
      Claire Dross authored
      The aspect Exit_Cases allows annotating a subprogram with a list of
      cases specifying, for all input which satisfy a guard, how the
      subprogram is allowed to terminate. For now, it can only be either
      returning normally or propagating an exception. This contract is not
      checked at runtime, it is only meant for static verification in SPARK.
      
      gcc/ada/ChangeLog:
      
      	* aspects.ads: Add aspect Aspect_Exit_Cases.
      	* contracts.adb (Analyze_Entry_Or_Subprogram_Contract): Handle Exit_Cases.
      	(Expand_Subprogram_Contract): Idem.
      	* einfo-utils.adb (Get_Pragma): Allow Pragma_Exit_Cases.
      	* einfo-utils.ads (Get_Pragma): Idem.
      	* exp_prag.adb (Expand_Pragma_Exit_Cases): Ignore the pragma, currently we don't expand it.
      	* exp_prag.ads (Expand_Pragma_Exit_Cases): Idem.
      	* inline.adb (Remove_Aspects_And_Pragmas): Add Exit_Cases to the list.
      	(Remove_Items): Idem.
      	* par-prag.adb (Last_Arg_Is_Reason): Idem.
      	* sem_ch12.adb: Idem.
      	* sem_ch13.adb: Idem.
      	* sem_util.adb: Idem.
      	* sem_util.ads: Idem.
      	* sinfo.ads: Idem.
      	* snames.ads-tmpl: Add names Name_Exit_Cases, Name_Exception_Raised, and Name_Normal_Return
      	as well as pragma Pragma_Exit_Cases.
      	* sem_prag.adb (Analyze_Exit_Cases_In_Decl_Part): Make sure that a
      	pragma or aspect Exit_Cases is well formed.
      	(Analyze_Pragma): Make sure that a pragma or aspect Exit_Cases is at the right place.
      	* sem_prag.ads (Analyze_Exit_Cases_In_Decl_Part): Declaration.
      	* doc/gnat_rm/implementation_defined_pragmas.rst: Document the Exit_Cases pragma.
      	* doc/gnat_rm/implementation_defined_aspects.rst: Document the Exit_Cases aspect.
      	* gnat_rm.texi: Regenerate.
      f49b098e
    • Bob Duff's avatar
      ada: Correct xref of operator expression function body · e3a67dcc
      Bob Duff authored
      For an expression function body that is an operator,
      make sure the xref entry in the ALI file points one past the
      double quote mark. For example, if the name is ">", point
      to the greater-than symbol, not the double quote.
      This was already the case for proper bodies.
      
      gcc/ada/ChangeLog:
      
      	* sem_util.adb (Copy_Subprogram_Spec): When copying
      	an N_Defining_Operator_Symbol, create an
      	N_Defining_Operator_Symbol rather than an N_Defining_Identifier.
      	This will cause Lib.Xref to "skip the initial quote for
      	navigation purposes" (as per comments in Lib.Xref body).
      e3a67dcc
    • Eric Botcazou's avatar
      ada: Small housekeeping work in Exp_Aggr · e4ed78fa
      Eric Botcazou authored
      This moves a few declarations around and tweaks a few comments.
      
      gcc/ada/ChangeLog:
      
      	* exp_aggr.adb (Case_Table_Type): Fix reference in comment.
      	(In_Place_Assign_OK): Move declaration around.
      	(Is_Build_In_Place_Aggregate_Return): Likewise and adjust.
      	(Expand_Array_Aggregate): Streamline for the sake of consistency.
      	(Aggr_Assignment_OK_For_Backend): Remove reference to Gigi/gcc.
      	(Backend_Processing_Possible): Likewise.
      	(Expand_Array_Aggregate): Add comment.
      e4ed78fa
    • Bob Duff's avatar
      ada: cleanup documentation for shift and rotate · 3861ac19
      Bob Duff authored
      Documentation updated.
      
      gcc/ada/ChangeLog:
      
      	* sinfo.ads (Shift_Count_OK): Update comments.
      	(Is_Power_Of_2_For_Shift): Likewise.
      3861ac19
Loading