Merge branch 'releases/gcc-13' into devel/omp/gcc-13

Merge up to r13-7985-g319e887bdddfb8b9244f9310a54c1f08b7e8f0e8 (26th Oct 2023)
This commit is contained in:
Tobias Burnus 2023-10-26 11:19:57 +02:00
commit ad85577c40
48 changed files with 995 additions and 229 deletions

View File

@ -1,3 +1,76 @@
2023-10-24 Mark Harmstone <mark@harmstone.com>
Backported from master:
2023-10-24 Mark Harmstone <mark@harmstone.com>
* opts.cc (debug_type_names): Remove stabs and xcoff.
(df_set_names): Adjust.
2023-10-23 Oleg Endo <olegendo@gcc.gnu.org>
PR target/111001
* config/sh/sh_treg_combine.cc (sh_treg_combine::record_set_of_reg):
Skip over nop move insns.
2023-10-23 Kewen Lin <linkw@linux.ibm.com>
Backported from master:
2023-10-12 Kewen Lin <linkw@linux.ibm.com>
PR target/111367
* config/rs6000/rs6000.md (stack_protect_setsi): Support prefixed
instruction emission and incorporate to stack_protect_set<mode>.
(stack_protect_setdi): Rename to ...
(stack_protect_set<mode>): ... this, adjust constraint.
(stack_protect_testsi): Support prefixed instruction emission and
incorporate to stack_protect_test<mode>.
(stack_protect_testdi): Rename to ...
(stack_protect_test<mode>): ... this, adjust constraint.
2023-10-20 Oleg Endo <olegendo@gcc.gnu.org>
PR target/101177
* config/sh/sh.md (unnamed split pattern): Fix comparison of
find_regno_note result.
2023-10-18 Richard Sandiford <richard.sandiford@arm.com>
Backported from master:
2023-09-07 Richard Sandiford <richard.sandiford@arm.com>
PR target/111528
* lra-eliminations.cc (lra_eliminate_regs_1): Use simplify_gen_binary
rather than gen_rtx_PLUS.
2023-10-17 liuhongt <hongtao.liu@intel.com>
Backported from master:
2023-07-06 liuhongt <hongtao.liu@intel.com>
PR target/110170
* config/i386/i386.md (movdf_internal): Disparage slightly for
2 alternatives (r,v) and (v,r) by adding constraint modifier
'?'.
2023-10-16 Kewen Lin <linkw@linux.ibm.com>
Backported from master:
2023-09-25 Kewen Lin <linkw@linux.ibm.com>
PR target/111380
* config/rs6000/rs6000.cc (rs6000_can_inline_p): Adopt
target_option_default_node when the callee has no option
attributes, also simplify the existing code accordingly.
2023-10-16 Kewen Lin <linkw@linux.ibm.com>
Backported from master:
2023-09-25 Kewen Lin <linkw@linux.ibm.com>
PR target/111366
* config/rs6000/rs6000.cc (rs6000_update_ipa_fn_target_info): Skip
empty inline asm.
2023-10-13 Andrew MacLeod <amacleod@redhat.com>
PR tree-optimization/111622

View File

@ -1 +1 @@
20231016
20231026

View File

@ -1,3 +1,18 @@
2023-10-20 Marek Polacek <polacek@redhat.com>
Backported from master:
2023-10-20 Marek Polacek <polacek@redhat.com>
PR c/111884
* c-common.cc (c_common_get_alias_set): Return -1 for char8_t only
in C++.
2023-10-19 Lewis Hyatt <lhyatt@gmail.com>
PR c++/89038
* c-pragma.cc (handle_pragma_diagnostic_impl): Handle
-Wunknown-pragmas during early processing.
2023-07-27 Release Manager
* GCC 13.2.0 released.

View File

@ -3806,12 +3806,13 @@ c_common_get_alias_set (tree t)
if (!TYPE_P (t))
return -1;
/* Unlike char, char8_t doesn't alias. */
if (flag_char8_t && t == char8_type_node)
/* Unlike char, char8_t doesn't alias in C++. (In C, char8_t is not
a distinct type.) */
if (flag_char8_t && t == char8_type_node && c_dialect_cxx ())
return -1;
/* The C standard guarantees that any object may be accessed via an
lvalue that has narrow character type (except char8_t). */
lvalue that has narrow character type. */
if (t == char_type_node
|| t == signed_char_type_node
|| t == unsigned_char_type_node)

View File

@ -1006,7 +1006,8 @@ handle_pragma_diagnostic_impl ()
/* option_string + 1 to skip the initial '-' */
unsigned int option_index = find_opt (data.option_str + 1, lang_mask);
if (early && !c_option_is_from_cpp_diagnostics (option_index))
if (early && !(c_option_is_from_cpp_diagnostics (option_index)
|| option_index == OPT_Wunknown_pragmas))
return;
if (option_index == OPT_SPECIAL_unknown)

View File

@ -3744,9 +3744,9 @@
;; Possible store forwarding (partial memory) stall in alternatives 4, 6 and 7.
(define_insn "*movdf_internal"
[(set (match_operand:DF 0 "nonimmediate_operand"
"=Yf*f,m ,Yf*f,?r ,!o,?*r ,!o,!o,?r,?m,?r,?r,v,v,v,m,*x,*x,*x,m ,r ,v,r ,o ,r ,m")
"=Yf*f,m ,Yf*f,?r ,!o,?*r ,!o,!o,?r,?m,?r,?r,v,v,v,m,*x,*x,*x,m ,?r,?v,r ,o ,r ,m")
(match_operand:DF 1 "general_operand"
"Yf*fm,Yf*f,G ,roF,r ,*roF,*r,F ,rm,rC,C ,F ,C,v,m,v,C ,*x,m ,*x,v,r ,roF,rF,rmF,rC"))]
"Yf*fm,Yf*f,G ,roF,r ,*roF,*r,F ,rm,rC,C ,F ,C,v,m,v,C ,*x,m ,*x, v, r,roF,rF,rmF,rC"))]
"!(MEM_P (operands[0]) && MEM_P (operands[1]))
&& (lra_in_progress || reload_completed
|| !CONST_DOUBLE_P (operands[1])

View File

@ -1157,3 +1157,8 @@ struct GTY (()) machine_function
(TARGET_HARD_FLOAT_ABI ? (TARGET_DOUBLE_FLOAT_ABI ? 8 : 4) : 0)
#define FUNCTION_VALUE_REGNO_P(N) ((N) == GP_RETURN || (N) == FP_RETURN)
/* LoongArch maintains ICache/DCache coherency by hardware,
we just need "ibar" to avoid instruction hazard here. */
#undef CLEAR_INSN_CACHE
#define CLEAR_INSN_CACHE(beg, end) __builtin_loongarch_ibar (0)

View File

@ -110,6 +110,7 @@
(define_constants
[(RETURN_ADDR_REGNUM 1)
(TP_REGNUM 2)
(T0_REGNUM 12)
(T1_REGNUM 13)
(S0_REGNUM 23)
@ -3446,6 +3447,12 @@
[(set_attr "length" "0")
(set_attr "type" "ghost")])
;; Named pattern for expanding thread pointer reference.
(define_expand "get_thread_pointer<mode>"
[(set (match_operand:P 0 "register_operand" "=r")
(reg:P TP_REGNUM))]
"HAVE_AS_TLS"
{})
(define_split
[(match_operand 0 "small_data_pattern")]

View File

@ -12354,33 +12354,26 @@
DONE;
})
(define_insn "stack_protect_setsi"
[(set (match_operand:SI 0 "memory_operand" "=m")
(unspec:SI [(match_operand:SI 1 "memory_operand" "m")] UNSPEC_SP_SET))
(set (match_scratch:SI 2 "=&r") (const_int 0))]
"TARGET_32BIT"
"lwz%U1%X1 %2,%1\;stw%U0%X0 %2,%0\;li %2,0"
[(set_attr "type" "three")
(set_attr "length" "12")])
;; We can't use the prefixed attribute here because there are two memory
;; instructions. We can't split the insn due to the fact that this operation
;; needs to be done in one piece.
(define_insn "stack_protect_setdi"
[(set (match_operand:DI 0 "memory_operand" "=Y")
(unspec:DI [(match_operand:DI 1 "memory_operand" "Y")] UNSPEC_SP_SET))
(set (match_scratch:DI 2 "=&r") (const_int 0))]
"TARGET_64BIT"
(define_insn "stack_protect_set<mode>"
[(set (match_operand:P 0 "memory_operand" "=YZ")
(unspec:P [(match_operand:P 1 "memory_operand" "YZ")] UNSPEC_SP_SET))
(set (match_scratch:P 2 "=&r") (const_int 0))]
""
{
if (prefixed_memory (operands[1], DImode))
output_asm_insn ("pld %2,%1", operands);
if (prefixed_memory (operands[1], <MODE>mode))
/* Prefixed load only supports D-form but no update and X-form. */
output_asm_insn ("p<ptrload> %2,%1", operands);
else
output_asm_insn ("ld%U1%X1 %2,%1", operands);
output_asm_insn ("<ptrload>%U1%X1 %2,%1", operands);
if (prefixed_memory (operands[0], DImode))
output_asm_insn ("pstd %2,%0", operands);
if (prefixed_memory (operands[0], <MODE>mode))
/* Prefixed store only supports D-form but no update and X-form. */
output_asm_insn ("pst<wd> %2,%0", operands);
else
output_asm_insn ("std%U0%X0 %2,%0", operands);
output_asm_insn ("st<wd>%U0%X0 %2,%0", operands);
return "li %2,0";
}
@ -12426,45 +12419,33 @@
DONE;
})
(define_insn "stack_protect_testsi"
[(set (match_operand:CCEQ 0 "cc_reg_operand" "=x,?y")
(unspec:CCEQ [(match_operand:SI 1 "memory_operand" "m,m")
(match_operand:SI 2 "memory_operand" "m,m")]
UNSPEC_SP_TEST))
(set (match_scratch:SI 4 "=r,r") (const_int 0))
(clobber (match_scratch:SI 3 "=&r,&r"))]
"TARGET_32BIT"
"@
lwz%U1%X1 %3,%1\;lwz%U2%X2 %4,%2\;xor. %3,%3,%4\;li %4,0
lwz%U1%X1 %3,%1\;lwz%U2%X2 %4,%2\;cmplw %0,%3,%4\;li %3,0\;li %4,0"
[(set_attr "length" "16,20")])
;; We can't use the prefixed attribute here because there are two memory
;; instructions. We can't split the insn due to the fact that this operation
;; needs to be done in one piece.
(define_insn "stack_protect_testdi"
(define_insn "stack_protect_test<mode>"
[(set (match_operand:CCEQ 0 "cc_reg_operand" "=x,?y")
(unspec:CCEQ [(match_operand:DI 1 "memory_operand" "Y,Y")
(match_operand:DI 2 "memory_operand" "Y,Y")]
(unspec:CCEQ [(match_operand:P 1 "memory_operand" "YZ,YZ")
(match_operand:P 2 "memory_operand" "YZ,YZ")]
UNSPEC_SP_TEST))
(set (match_scratch:DI 4 "=r,r") (const_int 0))
(clobber (match_scratch:DI 3 "=&r,&r"))]
"TARGET_64BIT"
(set (match_scratch:P 4 "=r,r") (const_int 0))
(clobber (match_scratch:P 3 "=&r,&r"))]
""
{
if (prefixed_memory (operands[1], DImode))
output_asm_insn ("pld %3,%1", operands);
if (prefixed_memory (operands[1], <MODE>mode))
/* Prefixed load only supports D-form but no update and X-form. */
output_asm_insn ("p<ptrload> %3,%1", operands);
else
output_asm_insn ("ld%U1%X1 %3,%1", operands);
output_asm_insn ("<ptrload>%U1%X1 %3,%1", operands);
if (prefixed_memory (operands[2], DImode))
output_asm_insn ("pld %4,%2", operands);
if (prefixed_memory (operands[2], <MODE>mode))
output_asm_insn ("p<ptrload> %4,%2", operands);
else
output_asm_insn ("ld%U2%X2 %4,%2", operands);
output_asm_insn ("<ptrload>%U2%X2 %4,%2", operands);
if (which_alternative == 0)
output_asm_insn ("xor. %3,%3,%4", operands);
else
output_asm_insn ("cmpld %0,%3,%4\;li %3,0", operands);
output_asm_insn ("cmpl<wd> %0,%3,%4\;li %3,0", operands);
return "li %4,0";
}

View File

@ -842,7 +842,7 @@
if (SUBREG_P (reg))
reg = SUBREG_REG (reg);
gcc_assert (REG_P (reg));
if (find_regno_note (curr_insn, REG_DEAD, REGNO (reg)) != NULL_RTX)
if (find_regno_note (curr_insn, REG_DEAD, REGNO (reg)) == NULL_RTX)
FAIL;
/* FIXME: Maybe also search the predecessor basic blocks to catch

View File

@ -729,7 +729,14 @@ sh_treg_combine::record_set_of_reg (rtx reg, rtx_insn *start_insn,
}
else if (REG_P (new_entry.cstore.set_src ()))
{
// If it's a reg-reg copy follow the copied reg.
// If it's a reg-reg copy follow the copied reg, but ignore
// nop copies of the reg onto itself.
if (REGNO (new_entry.cstore.set_src ()) == REGNO (reg))
{
i = prev_nonnote_nondebug_insn_bb (i);
continue;
}
new_entry.cstore_reg_reg_copies.push_back (new_entry.cstore);
reg = new_entry.cstore.set_src ();
i = new_entry.cstore.insn;

View File

@ -16333,6 +16333,11 @@ function you need to include @code{larchintrin.h}.
void __break (imm0_32767)
@end smallexample
Returns the value that is currently set in the @samp{tp} register.
@smallexample
void * __builtin_thread_pointer (void)
@end smallexample
@node MIPS DSP Built-in Functions
@subsection MIPS DSP Built-in Functions

View File

@ -1,3 +1,12 @@
2023-10-21 Harald Anlauf <anlauf@gmx.de>
Backported from master:
2023-10-17 Harald Anlauf <anlauf@gmx.de>
PR fortran/111837
* frontend-passes.cc (traverse_io_block): Dependency check of loop
nest shall be triangular, not banded.
2023-10-04 Paul Thomas <pault@gcc.gnu.org>
Backported from master:

View File

@ -1326,7 +1326,7 @@ traverse_io_block (gfc_code *code, bool *has_reached, gfc_code *prev)
if (iters[i])
{
gfc_expr *var = iters[i]->var;
for (int j = i - 1; j < i; j++)
for (int j = 0; j < i; j++)
{
if (iters[j]
&& (var_in_expr (var, iters[j]->start)

View File

@ -397,8 +397,8 @@ lra_eliminate_regs_1 (rtx_insn *insn, rtx x, machine_mode mem_mode,
rtx to = subst_p ? ep->to_rtx : ep->from_rtx;
if (! update_p && ! full_p)
return gen_rtx_PLUS (Pmode, to, XEXP (x, 1));
return simplify_gen_binary (PLUS, Pmode, to, XEXP (x, 1));
if (maybe_ne (update_sp_offset, 0))
offset = ep->to_rtx == stack_pointer_rtx ? update_sp_offset : 0;
else

View File

@ -1,3 +1,49 @@
2023-10-18 Gaius Mulley <gaiusmod2@gmail.com>
PR modula2/111756
* Make-lang.in (CM2DEP): New define conditionally set if
($(CXXDEPMODE),depmode=gcc3).
(m2/gm2-gcc/%.o): Ensure $(@D)/$(DEPDIR) is created.
Add $(CM2DEP) to the $(COMPILER) command and use $(POSTCOMPILE).
(m2/gm2-gcc/m2configure.o): Ditto.
(m2/gm2-lang.o): Ditto.
(m2/m2pp.o): Ditto.
(m2/gm2-gcc/rtegraph.o): Ditto.
(m2/mc-boot/$(SRC_PREFIX)%.o): Ditto.
(m2/mc-boot-ch/$(SRC_PREFIX)%.o): Ditto.
(m2/mc-boot-ch/$(SRC_PREFIX)%.o): Ditto.
(m2/mc-boot/main.o): Ditto.
(mcflex.o): Ditto.
(m2/gm2-libs-boot/M2RTS.o): Ditto.
(m2/gm2-libs-boot/%.o): Ditto.
(m2/gm2-libs-boot/%.o): Ditto.
(m2/gm2-libs-boot/RTcodummy.o): Ditto.
(m2/gm2-libs-boot/RTintdummy.o): Ditto.
(m2/gm2-libs-boot/wrapc.o): Ditto.
(m2/gm2-libs-boot/UnixArgs.o): Ditto.
(m2/gm2-libs-boot/choosetemp.o): Ditto.
(m2/gm2-libs-boot/errno.o): Ditto.
(m2/gm2-libs-boot/dtoa.o): Ditto.
(m2/gm2-libs-boot/ldtoa.o): Ditto.
(m2/gm2-libs-boot/termios.o): Ditto.
(m2/gm2-libs-boot/SysExceptions.o): Ditto.
(m2/gm2-libs-boot/SysStorage.o): Ditto.
(m2/gm2-compiler-boot/M2GCCDeclare.o): Ditto.
(m2/gm2-compiler-boot/M2Error.o): Ditto.
(m2/gm2-compiler-boot/%.o): Ditto.
(m2/gm2-compiler-boot/%.o): Ditto.
(m2/gm2-compiler-boot/m2flex.o): Ditto.
(m2/gm2-compiler/m2flex.o): Ditto.
(m2/gm2-libs/choosetemp.o): Ditto.
(m2/boot-bin/mklink$(exeext)): Ditto.
(m2/pge-boot/%.o): Ditto.
(m2/pge-boot/%.o): Ditto.
* README: Remove out of date info.
* gm2-compiler/M2Quads.mod (BuildStringAdrParam): Correct
procedure end name.
* gm2-compiler/SymbolTable.mod (GetVarPointerCheck): Add
default FALSE return value.
2023-09-26 Gaius Mulley <gaiusmod2@gmail.com>
Backported from master:

View File

@ -27,6 +27,13 @@ GM2_CROSS_NAME = `echo gm2|sed '$(program_transform_cross_name)'`
M2_MAINTAINER = no
# CM2DEP must match the COMPILE and POSTCOMPILE defines in gcc/Make-lang.in
ifeq ($(CXXDEPMODE),depmode=gcc3)
CM2DEP=-MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo
else
CM2DEP=
endif
GM2_1 = ./gm2 -B./m2/stage1 -g -fm2-g
GM2_FOR_TARGET = $(STAGE_CC_WRAPPER) ./gm2 -B./ -B$(build_tooldir)/bin/ -L$(objdir)/../ld $(TFLAGS)
@ -567,35 +574,40 @@ GCC_HEADER_DEPENDENCIES_FOR_M2 = $(BUILD-BOOT-H) $(TIMEVAR_H) m2/gm2config.h $(C
$(generated_files) insn-attr-common.h
m2/gm2-gcc/%.o: $(srcdir)/m2/gm2-gcc/%.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2)
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(COMPILER) -c -g $(ALL_COMPILERFLAGS) \
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(COMPILER) $(CM2DEP) -c -g $(ALL_COMPILERFLAGS) \
$(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
$(POSTCOMPILE)
m2/gm2-gcc/m2configure.o: $(srcdir)/m2/gm2-gcc/m2configure.cc \
$(SYSTEM_H) $(GCC_H) $(CONFIG_H) \
m2/gm2config.h $(TARGET_H) $(PLUGIN_HEADERS) \
$(generated_files) $(C_TREE_H) insn-attr-common.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(COMPILER) $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(COMPILER) $(CM2DEP) $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
$(DRIVER_DEFINES) \
-DLIBSUBDIR=\"$(libsubdir)\" \
-DPREFIX=\"$(prefix)\" \
-c $(srcdir)/m2/gm2-gcc/m2configure.cc $(OUTPUT_OPTION)
$(POSTCOMPILE)
m2/gm2-lang.o: $(srcdir)/m2/gm2-lang.cc gt-m2-gm2-lang.h $(GCC_HEADER_DEPENDENCIES_FOR_M2)
$(COMPILER) -c -g $(GM2GCC) $(ALL_COMPILERFLAGS) \
$(COMPILER) $(CM2DEP) -c -g $(GM2GCC) $(ALL_COMPILERFLAGS) \
-DLIBSUBDIR=\"$(libsubdir)\" \
$(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
$(POSTCOMPILE)
m2/m2pp.o : $(srcdir)/m2/m2pp.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2)
$(COMPILER) -c -g -DGM2 $(ALL_COMPILERFLAGS) \
$(COMPILER) $(CM2DEP) -c -g -DGM2 $(ALL_COMPILERFLAGS) \
$(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
$(POSTCOMPILE)
m2/gm2-gcc/rtegraph.o: $(srcdir)/m2/gm2-gcc/rtegraph.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) \
gt-m2-rtegraph.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(COMPILER) -c -g $(GM2GCC) $(ALL_COMPILERFLAGS) \
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(COMPILER) $(CM2DEP) -c -g $(GM2GCC) $(ALL_COMPILERFLAGS) \
$(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
$(POSTCOMPILE)
m2/gm2-gcc/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-gcc/%.def $(MCDEPS)
-test -d $(@D) || $(mkinstalldirs) $(@D)
@ -1373,126 +1385,150 @@ m2/boot-bin/mc$(exeext): $(BUILD-MC-BOOT-O) $(BUILD-MC-INTERFACE-O) \
mcflex.o m2/gm2-libs-boot/RTcodummy.o -lm
m2/mc-boot/$(SRC_PREFIX)%.o: m2/mc-boot/$(SRC_PREFIX)%.cc m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) $(CXXFLAGS) -g -c -I. -I$(srcdir)/m2/mc-boot-ch -I$(srcdir)/m2/mc-boot -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) $(CXXFLAGS) $(GM2_PICFLAGS) -g -c -I. -I$(srcdir)/m2/mc-boot-ch -I$(srcdir)/m2/mc-boot -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/mc-boot-ch/$(SRC_PREFIX)%.o: m2/mc-boot-ch/$(SRC_PREFIX)%.c m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) $(CXXFLAGS) -DHAVE_CONFIG_H -g -c -I. -Im2/gm2-libs -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -Im2/gm2-libs $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) $(CXXFLAGS) $(GM2_PICFLAGS) -DHAVE_CONFIG_H -g -c -I. -Im2/gm2-libs -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -Im2/gm2-libs $< -o $@
$(POSTCOMPILE)
m2/mc-boot-ch/$(SRC_PREFIX)%.o: m2/mc-boot-ch/$(SRC_PREFIX)%.cc m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) $(CXXFLAGS) -DHAVE_CONFIG_H -g -c -I. -Im2/gm2-libs -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) -Im2/gm2-libs $< -o $@
m2/mc-boot/main.o: $(M2LINK) $(srcdir)/m2/init/mcinit
-test -d $(@D) || $(mkinstalldirs) $(@D)
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
unset CC ; $(M2LINK) -s --langc++ --exit --name m2/mc-boot/main.cc $(srcdir)/m2/init/mcinit
$(CXX) $(CXXFLAGS) -g -c -I. -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) m2/mc-boot/main.cc -o $@
$(CXX) $(CM2DEP) $(CXXFLAGS) $(GM2_PICFLAGS) -g -c -I. -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) m2/mc-boot/main.cc -o $@
$(POSTCOMPILE)
mcflex.o: mcflex.c m2/gm2-libs/gm2-libs-host.h
$(CC) $(CFLAGS) -I$(srcdir)/m2/mc -g -c $< -o $@ # remember that mcReserved.h is copied into m2/mc
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CC) $(CM2DEP) $(CFLAGS) $(GM2_PICFLAGS) -I$(srcdir)/m2/mc -g -c $< -o $@ # remember that mcReserved.h is copied into m2/mc
$(POSTCOMPILE)
mcflex.c: $(srcdir)/m2/mc/mc.flex
flex -t $< > $@
m2/gm2-libs-boot/M2RTS.o: $(srcdir)/m2/gm2-libs/M2RTS.mod $(MCDEPS) $(BUILD-BOOT-H)
-test -d $(@D) || $(mkinstalldirs) $(@D)
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(MC) --suppress-noreturn -o=m2/gm2-libs-boot/M2RTS.c $(srcdir)/m2/gm2-libs/M2RTS.mod
$(COMPILER) -c -DIN_GCC $(CFLAGS) -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(MCINCLUDES) $(INCLUDES) m2/gm2-libs-boot/M2RTS.c -o $@
$(COMPILER) $(CM2DEP) -c -DIN_GCC $(CFLAGS) $(GM2_PICFLAGS) -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(MCINCLUDES) $(INCLUDES) m2/gm2-libs-boot/M2RTS.c -o $@
$(POSTCOMPILE)
m2/gm2-libs-boot/%.o: $(srcdir)/m2/gm2-libs-boot/%.mod $(MCDEPS) $(BUILD-BOOT-H)
-test -d $(@D) || $(mkinstalldirs) $(@D)
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(MC) -o=m2/gm2-libs-boot/$*.c $(srcdir)/m2/gm2-libs-boot/$*.mod
$(COMPILER) -c -DIN_GCC $(CFLAGS) $(MCINCLUDES) m2/gm2-libs-boot/$*.c -o $@
$(COMPILER) $(CM2DEP) -c -DIN_GCC $(CFLAGS) $(GM2_PICFLAGS) $(MCINCLUDES) m2/gm2-libs-boot/$*.c -o $@
$(POSTCOMPILE)
m2/gm2-libs-boot/%.o: $(srcdir)/m2/gm2-libs/%.mod $(MCDEPS) $(BUILD-BOOT-H)
-test -d $(@D) || $(mkinstalldirs) $(@D)
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(MC) -o=m2/gm2-libs-boot/$*.c $(srcdir)/m2/gm2-libs/$*.mod
$(COMPILER) -c -DIN_GCC $(CFLAGS) -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(MCINCLUDES) $(INCLUDES) m2/gm2-libs-boot/$*.c -o $@
$(COMPILER) $(CM2DEP) -c -DIN_GCC $(CFLAGS) $(GM2_PICFLAGS) -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(MCINCLUDES) $(INCLUDES) m2/gm2-libs-boot/$*.c -o $@
$(POSTCOMPILE)
m2/gm2-libs-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libs/%.def $(MCDEPS)
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(MC) -o=$@ $(srcdir)/m2/gm2-libs/$*.def
m2/gm2-libs-boot/RTcodummy.o: $(srcdir)/m2/gm2-libs-ch/RTcodummy.c m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) -c -DIN_GCC $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) -c -DIN_GCC $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-libs-boot/RTintdummy.o: $(srcdir)/m2/gm2-libs-ch/RTintdummy.c m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) -c -DIN_GCC $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) -c -DIN_GCC $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-libs-boot/wrapc.o: $(srcdir)/m2/gm2-libs-ch/wrapc.c m2/gm2-libs-boot/$(SRC_PREFIX)wrapc.h m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) -c -DHAVE_CONFIG_H $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libs $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) -c -DHAVE_CONFIG_H $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libs $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-libs-boot/UnixArgs.o: $(srcdir)/m2/gm2-libs-ch/UnixArgs.cc m2/gm2-libs-boot/$(SRC_PREFIX)UnixArgs.h m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) -c -DIN_GCC $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) -c -DIN_GCC $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-libs-boot/choosetemp.o: m2/gm2-libs-ch/choosetemp.c m2/gm2-libiberty/Gchoosetemp.h m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libiberty -I$(srcdir)/m2/gm2-libiberty/ $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libiberty -I$(srcdir)/m2/gm2-libiberty/ $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-libs-boot/errno.o: $(srcdir)/m2/gm2-libs-ch/errno.c m2/gm2-libs-boot/$(SRC_PREFIX)errno.h m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-libs-boot/dtoa.o: $(srcdir)/m2/gm2-libs-ch/dtoa.cc m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-libs-boot/ldtoa.o: $(srcdir)/m2/gm2-libs-ch/ldtoa.cc m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-libs-boot/termios.o: $(srcdir)/m2/gm2-libs-ch/termios.c $(BUILD-LIBS-BOOT-H) m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-libs-boot/SysExceptions.o: $(srcdir)/m2/gm2-libs-ch/SysExceptions.c \
m2/gm2-libs-boot/$(SRC_PREFIX)SysExceptions.h m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-libs-boot/SysStorage.o: $(srcdir)/m2/gm2-libs/SysStorage.mod $(MCDEPS) $(BUILD-BOOT-H)
-test -d $(@D) || $(mkinstalldirs) $(@D)
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(MC) -o=m2/gm2-libs-boot/SysStorage.c $(srcdir)/m2/gm2-libs/SysStorage.mod
$(COMPILER) -DIN_GCC -c $(CFLAGS) \
-I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(MCINCLUDES) $(INCLUDES) \
m2/gm2-libs-boot/SysStorage.c -o m2/gm2-libs-boot/SysStorage.o
$(COMPILER) $(CM2DEP) -DIN_GCC -c $(CFLAGS) $(GM2_PICFLAGS) \
-I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(MCINCLUDES) $(INCLUDES) \
m2/gm2-libs-boot/SysStorage.c -o m2/gm2-libs-boot/SysStorage.o
$(POSTCOMPILE)
m2/gm2-compiler-boot/M2GCCDeclare.o: $(srcdir)/m2/gm2-compiler/M2GCCDeclare.mod $(MCDEPS) $(BUILD-BOOT-H)
-test -d $(@D) || $(mkinstalldirs) $(@D)
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(MC) --extended-opaque -o=m2/gm2-compiler-boot/M2GCCDeclare.c $<
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \
-I. -I$(srcdir)/../include -I$(srcdir) \
-I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \
-I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/M2GCCDeclare.c -o $@
$(COMPILER) $(CM2DEP) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \
-I. -I$(srcdir)/../include -I$(srcdir) \
-I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \
-I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/M2GCCDeclare.c -o $@
$(POSTCOMPILE)
m2/gm2-compiler-boot/M2Error.o: $(srcdir)/m2/gm2-compiler/M2Error.mod $(MCDEPS) $(BUILD-BOOT-H)
-test -d $(@D) || $(mkinstalldirs) $(@D)
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(MC) --extended-opaque -o=m2/gm2-compiler-boot/M2Error.c $<
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \
-I. -I$(srcdir)/../include -I$(srcdir) \
-I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \
-I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/M2Error.c -o $@
$(COMPILER) $(CM2DEP) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \
-I. -I$(srcdir)/../include -I$(srcdir) \
-I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \
-I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/M2Error.c -o $@
$(POSTCOMPILE)
m2/gm2-compiler-boot/%.o: $(srcdir)/m2/gm2-compiler/%.mod $(BUILD-BOOT-H) $(MCDEPS) $(BUILD-BOOT-H)
-test -d $(@D) || $(mkinstalldirs) $(@D)
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(MC) -o=m2/gm2-compiler-boot/$*.c $(srcdir)/m2/gm2-compiler/$*.mod
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \
-I. -I$(srcdir)/../include -I$(srcdir) \
-I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot -Im2/gm2-libiberty \
-I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/$*.c -o $@
$(COMPILER) $(CM2DEP) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \
-I. -I$(srcdir)/../include -I$(srcdir) \
-I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot -Im2/gm2-libiberty \
-I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/$*.c -o $@
$(POSTCOMPILE)
m2/gm2-compiler-boot/%.o: m2/gm2-compiler-boot/%.mod $(MCDEPS) $(BUILD-BOOT-H)
-test -d $(@D) || $(mkinstalldirs) $(@D)
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(MC) -o=m2/gm2-compiler-boot/$*.c m2/gm2-compiler-boot/$*.mod
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \
-I. -I$(srcdir)/../include -I$(srcdir) \
-I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \
-I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/$*.c -o $@
$(COMPILER) $(CM2DEP) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(GM2GCC) \
-I. -I$(srcdir)/../include -I$(srcdir) \
-I. -Im2/gm2-libs-boot -Im2/gm2-compiler-boot \
-I$(srcdir)/m2/gm2-libiberty $(MCINCLUDES) $(INCLUDES) m2/gm2-compiler-boot/$*.c -o $@
$(POSTCOMPILE)
m2/gm2-compiler-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-compiler/%.def $(MCDEPS)
-test -d $(@D) || $(mkinstalldirs) $(@D)
@ -1501,10 +1537,11 @@ m2/gm2-compiler-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-compiler/%.def $(MCDEPS)
m2/gm2-compiler-boot/m2flex.o: m2/gm2-compiler/m2flex.c $(BUILD-BOOT-H) $(TIMEVAR_H) \
$(BUILD-LIBS-BOOT-H) m2/gm2-compiler-boot/$(SRC_PREFIX)NameKey.h \
$(CONFIG_H) m2/gm2config.h $(TARGET_H) $(PLUGIN_HEADERS)
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(COMPILER) -c -g $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(COMPILER) $(CM2DEP) -c -g $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
$(GM2GCC) $(INCLUDES) -I$(srcdir)/m2 \
-Im2 -Im2/gm2-compiler-boot -Im2/gm2-libs-boot $< -o $@
$(POSTCOMPILE)
m2/gm2-compiler/m2flex.c: $(srcdir)/m2/m2.flex $(TIMEVAR_H) insn-attr-common.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
@ -1521,23 +1558,24 @@ m2/gm2-compiler/%.o: $(srcdir)/m2/gm2-compiler/%.mod
$(GM2_1) $(GM2_FLAGS) -c -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $< -o $@
m2/gm2-compiler/m2flex.o: m2/gm2-compiler/m2flex.c m2/gm2-libs/gm2-libs-host.h $(TIMEVAR_H)
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(COMPILER) -c -g $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
$(GM2GCC) -Im2/gm2-compiler-boot -Im2/gm2-libs-boot $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(COMPILER) $(CM2DEP) -c -g $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
$(GM2GCC) -Im2/gm2-compiler-boot -Im2/gm2-libs-boot $< -o $@
$(POSTCOMPILE)
m2/gm2-compiler/%.o: m2/gm2-compiler/%.mod
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(GM2_1) $(GM2_FLAGS) -c -I$(srcdir)/m2/gm2-compiler -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/m2/gm2-libiberty $< -o $@
m2/gm2-libs-iso/%.o: $(srcdir)/m2/gm2-libs-iso/%.c m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) -DBUILD_GM2_LIBS_TARGET -DBUILD_GM2_LIBS -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) -DBUILD_GM2_LIBS_TARGET -DBUILD_GM2_LIBS -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-libs-iso/%.o: $(srcdir)/m2/gm2-libs-iso/%.mod
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(GM2_1) $(GM2_ISO_FLAGS) -c -B./ -Im2/gm2-libs-iso:$(srcdir)/m2/gm2-libs-iso -I$(srcdir)/m2/gm2-libs $< -o $@
# We build the cc1gm2$(exeext) from the boot stage and then proceed to build it
# again using itself.
@ -1632,16 +1670,19 @@ m2/gm2-libs/%.o: $(srcdir)/m2/gm2-libs/%.mod $(MCDEPS) $(BUILD-BOOT-H)
$(GM2_1) -c $(GM2_FLAGS) -Im2/gm2-libs -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $< -o $@
m2/gm2-libs/%.o: $(srcdir)/m2/gm2-libs-ch/%.c m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) -DBUILD_GM2_LIBS -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) -DBUILD_GM2_LIBS -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-libs/%.o: $(srcdir)/m2/gm2-libs-ch/%.cc m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-libs/choosetemp.o: m2/gm2-libs-ch/choosetemp.c m2/gm2-libiberty/Gchoosetemp.h m2/gm2-libs/gm2-libs-host.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) -c $(CFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libiberty -I$(srcdir)/m2/gm2-libiberty/ $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot -Im2/gm2-libiberty -I$(srcdir)/m2/gm2-libiberty/ $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-libs-boot/libgm2.a: m2/boot-bin/mc$(exeext) $(BUILD-LIBS-BOOT)
-test -d $(@D) || $(mkinstalldirs) $(@D)
@ -1660,8 +1701,9 @@ m2/gm2-compiler-boot/gm2.a: m2/boot-bin/mc$(exeext) m2/boot-bin/mklink$(exeext)
m2/gm2-compiler-boot/gm2.a: m2/boot-bin/mc$(exeext)
m2/boot-bin/mklink$(exeext): $(srcdir)/m2/tools-src/mklink.c
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) $(CFLAGS) -I$(srcdir)/m2 -Im2/gm2-libs-boot -Im2/gm2-compiler-boot -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) $(CFLAGS) $(LDFLAGS) -I$(srcdir)/m2 -Im2/gm2-libs-boot -Im2/gm2-compiler-boot -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) $< -o $@
$(POSTCOMPILE)
m2/gm2-compiler-boot/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-compiler-boot/%.def $(MCDEPS)
-test -d $(@D) || $(mkinstalldirs) $(@D)
@ -1740,12 +1782,14 @@ ifeq ($(M2_MAINTAINER),yes)
include m2/Make-maintainer
else
m2/pge-boot/%.o: m2/pge-boot/%.c m2/gm2-libs/gm2-libs-host.h m2/gm2config.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) $(CFLAGS) $(INCLUDES) -I$(srcdir)/m2/pge-boot -Im2/gm2-libs -g -c $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) $(CFLAGS) $(GM2_PICFLAGS) $(INCLUDES) -I$(srcdir)/m2/pge-boot -Im2/gm2-libs -g -c $< -o $@
$(POSTCOMPILE)
m2/pge-boot/%.o: m2/pge-boot/%.cc m2/gm2-libs/gm2-libs-host.h m2/gm2config.h
-test -d $(@D) || $(mkinstalldirs) $(@D)
$(CXX) $(CXXFLAGS) $(INCLUDES) -I$(srcdir)/m2/pge-boot -Im2/gm2-libs -g -c $< -o $@
-test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR)
$(CXX) $(CM2DEP) $(CXXFLAGS) $(GM2_PICFLAGS) $(INCLUDES) -I$(srcdir)/m2/pge-boot -Im2/gm2-libs -g -c $< -o $@
$(POSTCOMPILE)
$(PGE): $(BUILD-PGE-O)
+$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(BUILD-PGE-O) -lm

View File

@ -1,25 +1,4 @@
Building GNU Modula-2
=====================
Please see the GCC documentation (gcc.texi) and section
(Installing GCC).
Regression testing GM2
======================
cd host-build ; make check-m2
runs all regression tests.
Stress testing GM2
==================
cd host-build/gcc ; make gm2.paranoid
builds gm2 using itself and then compiles each module with both
versions of gm2 comparing the emitted assembler code.
Contributing to GNU Modula-2
============================

View File

@ -2593,7 +2593,7 @@ BEGIN
PushTtok (m2strnul, tok) ;
PushT (1) ;
BuildAdrFunction
END BuildAdrFunction ;
END BuildStringAdrParam ;
(*

View File

@ -6713,7 +6713,8 @@ BEGIN
WITH pSym^.Var DO
RETURN( IsPointerCheck )
END
END
END ;
RETURN FALSE
END GetVarPointerCheck ;

View File

@ -49,7 +49,7 @@ static void set_Wstrict_aliasing (struct gcc_options *opts, int onoff);
const char *const debug_type_names[] =
{
"none", "stabs", "dwarf-2", "xcoff", "vms", "ctf", "btf"
"none", "dwarf-2", "vms", "ctf", "btf"
};
/* Bitmasks of fundamental debug info formats indexed by enum
@ -64,7 +64,7 @@ static uint32_t debug_type_masks[] =
/* Names of the set of debug formats requested by user. Updated and accessed
via debug_set_names. */
static char df_set_names[sizeof "none stabs dwarf-2 xcoff vms ctf btf"];
static char df_set_names[sizeof "none dwarf-2 vms ctf btf"];
/* Get enum debug_info_type of the specified debug format, for error messages.
Can be used only for individual debug format types. */

View File

@ -1,3 +1,56 @@
2023-10-23 Kewen Lin <linkw@linux.ibm.com>
Backported from master:
2023-10-12 Kewen Lin <linkw@linux.ibm.com>
PR target/111367
* g++.target/powerpc/pr111367.C: New test.
2023-10-21 Harald Anlauf <anlauf@gmx.de>
Backported from master:
2023-10-17 Harald Anlauf <anlauf@gmx.de>
PR fortran/111837
* gfortran.dg/implied_do_io_8.f90: New test.
2023-10-20 Marek Polacek <polacek@redhat.com>
Backported from master:
2023-10-20 Marek Polacek <polacek@redhat.com>
PR c/111884
* c-c++-common/alias-1.c: New test.
2023-10-19 Lewis Hyatt <lhyatt@gmail.com>
PR c++/89038
* c-c++-common/cpp/Wunknown-pragmas-1.c: New test.
2023-10-17 liuhongt <hongtao.liu@intel.com>
Backported from master:
2023-07-06 liuhongt <hongtao.liu@intel.com>
* gcc.target/i386/pr110170-3.c: New test.
2023-10-16 Kewen Lin <linkw@linux.ibm.com>
Backported from master:
2023-09-25 Kewen Lin <linkw@linux.ibm.com>
PR target/111380
* gcc.target/powerpc/pr111380-1.c: New test.
* gcc.target/powerpc/pr111380-2.c: New test.
2023-10-16 Kewen Lin <linkw@linux.ibm.com>
Backported from master:
2023-09-25 Kewen Lin <linkw@linux.ibm.com>
PR target/111366
* g++.target/powerpc/pr111366.C: New test.
2023-10-11 Andrew MacLeod <amacleod@redhat.com>
PR tree-optimization/111694

View File

@ -0,0 +1,23 @@
/* PR c/111884 */
/* { dg-do compile } */
/* { dg-options "-O2 -Wall" } */
/* { dg-additional-options "-std=c++20" { target c++ } } */
/* { dg-additional-options "-std=c2x" { target c } } */
int f(int i)
{
int f = 1;
return i[(unsigned char *)&f];
}
int g(int i)
{
int f = 1;
return i[(signed char *)&f];
}
int h(int i)
{
int f = 1;
return i[(char *)&f];
}

View File

@ -0,0 +1,13 @@
/* PR c++/89038 */
/* { dg-additional-options "-Wunknown-pragmas" } */
#pragma oops /* { dg-warning "-:-Wunknown-pragmas" } */
#pragma GGC diagnostic push /* { dg-warning "-:-Wunknown-pragmas" } */
#pragma GCC diagnostics push /* { dg-warning "-:-Wunknown-pragmas" } */
/* Test we can disable the warnings. */
#pragma GCC diagnostic ignored "-Wunknown-pragmas"
#pragma oops /* { dg-bogus "-:-Wunknown-pragmas" } */
#pragma GGC diagnostic push /* { dg-bogus "-:-Wunknown-pragmas" } */
#pragma GCC diagnostics push /* { dg-bogus "-:-Wunknown-pragmas" } */

View File

@ -0,0 +1,22 @@
/* { dg-do assemble } */
/* { dg-require-effective-target power10_ok } */
/* { dg-options "-mdejagnu-cpu=power10 -fstack-protector-strong" } */
/* Verify object file can be generated successfully. */
struct SortAscending
{
};
typedef unsigned long long size_t;
void VQSort (long long *, size_t, SortAscending);
void
BenchAllColdSort ()
{
typedef long long T;
constexpr size_t kSize = 10 * 1000;
alignas (16) T items[kSize];
VQSort (items, kSize, SortAscending ());
}

View File

@ -0,0 +1,11 @@
/* { dg-do compile { target { ! ia32 } } } */
/* { dg-options "-O2 -fno-if-conversion -fno-if-conversion2" } */
/* { dg-final { scan-assembler-not {(?n)movq.*r} } } */
void __cond_swap(double* __x, double* __y) {
_Bool __r = (*__x < *__y);
double __tmp = __r ? *__x : *__y;
*__y = __r ? *__y : *__x;
*__x = __tmp;
}

View File

@ -0,0 +1,10 @@
/* { dg-do compile } */
/* { dg-require-effective-target tls_native } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler "or\t\\\$r4,\\\$r2,\\\$r0" } } */
void *
get_tp ()
{
return __builtin_thread_pointer ();
}

View File

@ -0,0 +1,18 @@
! { dg-do run }
! { dg-additional-options "-fcheck=bounds" }
! PR fortran/111837 - out of bounds access with front-end optimization
program implied_do_bug
implicit none
integer :: i,j,k
real :: arr(1,1,1)
integer :: ni(1)
ni(1) = 1
arr = 1
write(*,*) (((arr(i,j,k), i=1,ni(k)), k=1,1), j=1,1)
write(*,*) (((arr(i,j,k), i=1,ni(k)), j=1,1), k=1,1)
write(*,*) (((arr(k,i,j), i=1,ni(k)), k=1,1), j=1,1)
write(*,*) (((arr(k,i,j), i=1,ni(k)), j=1,1), k=1,1)
write(*,*) (((arr(j,k,i), i=1,ni(k)), k=1,1), j=1,1)
write(*,*) (((arr(j,k,i), i=1,ni(k)), j=1,1), k=1,1)
end

View File

@ -1,3 +1,22 @@
2023-10-19 Georg-Johann Lay <avr@gjlay.de>
* libf7-asm.sx (mul_mant): Implement for devices without MUL.
* asm-defs.h (wmov) [!HAVE_MUL]: Fix regno computation.
* t-libf7 (F7_ASM_FLAGS): Add -g0.
2023-10-17 Georg-Johann Lay <avr@gjlay.de>
* f7-renames.h: Re-renerate.
2023-10-17 Georg-Johann Lay <avr@gjlay.de>
* libf7.h (F7_SIZEOF): New macro.
* libf7-asm.sx: Use F7_SIZEOF instead of magic number "10".
(F7MOD_D_fma_, __fma): New module and function.
(fma) [-mdouble=64]: Define as alias for __fma.
(fmal) [-mlong-double=64]: Define as alias for __fma.
* libf7-common.mk (F7_ASM_PARTS): Add D_fma.
2023-10-12 Georg-Johann Lay <avr@gjlay.de>
* libf7.c (F7MOD_atan2_, f7_atan2): New module and function.

View File

@ -134,14 +134,14 @@
..regno = 0
.irp reg, \
X, x, XL, xl, Xl, xL, x, x \
X, x, XL, xl, Xl, xL, x, x, \
Y, y, YL, yl, Yl, yL, y, y, \
Z, z, ZL, zl, Zl, zL, z, z
.ifc \reg,\dst
..dst = (..regno / 8) + 26
..dst = 2 * (..regno / 8) + 26
.endif
.ifc \reg,\src
..src = (..regno / 8) + 26
..src = 2 * (..regno / 8) + 26
.endif
..regno = ..regno + 1
.endr

View File

@ -3,16 +3,16 @@
Generated by: f7renames.sh.
Generated using: F7_PREFIX = __f7_ from t-libf7.
F7F, F7F_cst, F7F_asm from libf7-common.mk.
Included by: libf7.h.
Used by: libf7.c, libf7.h, libf7-asm.sx, f7-wraps.h.
F7F, F7F_cst, F7F_asm from libf7-common.mk.
Included by: libf7.h.
Used by: libf7.c, libf7.h, libf7-asm.sx, f7-wraps.h.
*/
#ifndef F7_RENAMES_H
#define F7_RENAMES_H
#define F7_(name) __f7_##name
#define F7P __f7_
#define F7P __f7_
/* Renames for libf7.c, libf7.h. */

View File

@ -283,8 +283,8 @@ DEFUN copy
cp XL, ZL
cpc XH, ZH
breq 9f
adiw XL, 10
adiw ZL, 10
adiw XL, F7_SIZEOF
adiw ZL, F7_SIZEOF
set
bld ZERO, 1
bld ZERO, 3 ; ZERO = 0b1010 = 10.
@ -312,8 +312,8 @@ DEFUN copy_P
st X+, TMP
dec ZERO
brne .Loop
sbiw X, 10
sbiw Z, 10
sbiw X, F7_SIZEOF
sbiw Z, F7_SIZEOF
ret
ENDF copy_P
#endif /* F7MOD_copy_P_ */
@ -1067,6 +1067,100 @@ DEFUN mul_mant
ENDF mul_mant
#endif /* F7MOD_mul_mant_ && MUL */
#if defined F7MOD_mul_mant_ && ! defined (__AVR_HAVE_MUL__)
#define AA TMP
#define A0 13
#define A1 A0+1
#define A2 A0+2
#define A3 A0+3
#define A4 A0+4
#define A5 r26
#define A6 r27
#define BB ZERO
#define Bits r29
#define Bytes r28
DEFUN mul_mant
do_prologue_saves 7
bst r18, 0 ; T = 1: Don't round.
;; Save result address for later.
push r25
push r24
;; Load 1st operand mantissa.
wmov r30, r22
clr AA
LDD A0, Z+0+Off
LDD A1, Z+1+Off
LDD A2, Z+2+Off
LDD A3, Z+3+Off
LDD A4, Z+4+Off
LDD A5, Z+5+Off
LDD A6, Z+6+Off
;; Let Z point one past .mant of the 2nd input operand.
wmov r30, r20
adiw r30, Expo
;; Clear the result mantissa.
.global __clr_8
XCALL __clr_8
;; Loop over the bytes of B's mantissa from highest to lowest.
;; "+1" because we jump into the loop.
ldi Bytes, 1 + F7_MANT_BYTES
;; Divide one operand by 2 so that the result mantissa won't overflow.
;; This is accounted for by "Carry = 1" below.
ldi Bits, 1
rjmp .Loop_entry
.Loop_bytes:
ld BB, -Z
;; Loop over the bits of B's mantissa from highest to lowest.
ldi Bits, 8
.Loop_bits:
lsl BB
brcc .Lnext_bit
ADD CA, AA
adc C0, A0
adc C1, A1
adc C2, A2
adc C3, A3
adc C4, A4
adc C5, A5
adc C6, A6
.Lnext_bit:
.Loop_entry:
LSR A6
ror A5
ror A4
ror A3
ror A2
ror A1
ror A0
ror AA
dec Bits
brne .Loop_bits
dec Bytes
brne .Loop_bytes
;; Finally...
pop ZL
pop ZH
;; The result has to be left-shifted by one (multiplied by 2) in order
;; to undo the division by 2 of the 1st operand.
ldi Carry, 1
F7call normalize.maybe_round.store_with_flags
do_epilogue_restores 7
ENDF mul_mant
#endif /* F7MOD_mul_mant_ && ! MUL */
#if defined (F7MOD_div_)
@ -1328,6 +1422,58 @@ ENDF sqrt_approx
#undef Carry
#ifdef F7MOD_D_fma_
_DEFUN __fma
DALIAS fma
LALIAS fmal
#define n_pushed 4
#define n_frame (2 * F7_SIZEOF)
do_prologue_saves n_pushed, n_frame
;; Y = FramePointer + 1
adiw Y, 1
;; FP + 1 = (f7_t) arg1
wmov r16, Y
;; The double argument arg1 is already in R18[].
XCALL F7_NAME (set_double_impl)
;; The double argument arg2 is in R10[]. Move it to R18[].
wmov r18, r10
wmov r20, r12
wmov r22, r14
;; R16, R17 are clobbered. Fetch them from where prologue_saves put them.
ldd r24, Y + n_frame + 3 ; Saved R16
ldd r25, Y + n_frame + 2 ; Saved R17
;; FP + 1 + 10 = (f7_t) arg2
subi r16, lo8 (-F7_SIZEOF)
sbci r17, hi8 (-F7_SIZEOF)
XCALL F7_NAME (set_double_impl)
wmov r24, Y ; &arg1
wmov r22, r16 ; &arg2
XCALL F7_NAME (Imul) ; arg1 *= arg2
;; The 3rd double argument arg3 was passed on the stack. Move it to R18[],
;; Don't use f7_set_pdouble() because that function is unused (for now).
.irp n, 0, 1, 2, 3, 4, 5, 6, 7
ldd 18+\n, Y + n_frame + n_pushed + PC_SIZE + \n
.endr
XCALL F7_NAME (set_double_impl)
wmov r24, Y ; &arg1
wmov r22, r16 ; &arg2
XCALL F7_NAME (Iadd) ; arg1 += arg2
wmov r24, Y ; &arg1
XCALL F7_NAME (get_double)
do_epilogue_restores n_pushed, n_frame
_ENDF __fma
#endif /* F7MOD_D_fma_ */
#ifdef F7MOD_D_fabs_
_DEFUN __fabs
DALIAS fabs
@ -1493,7 +1639,7 @@ LABEL call_dx ; WHAT = R13 = 0
wmov r14, Z
#define n_pushed 4
#define n_frame 10
#define n_frame F7_SIZEOF
do_prologue_saves n_pushed, n_frame
;; Y = FramePointer + 1
@ -1565,7 +1711,7 @@ LABEL call_xdd
ret
#define n_pushed 4
#define n_frame 20
#define n_frame (2 * F7_SIZEOF)
call.2:
do_prologue_saves n_pushed, n_frame
@ -1576,9 +1722,8 @@ call.2:
;; First double argument is already in R18[].
XCALL F7_NAME (set_double_impl)
;; FP + 11 = (f7_t) arg2
wmov r16, Y
subi r16, lo8 (-10)
sbci r17, hi8 (-10)
subi r16, lo8 (-F7_SIZEOF)
sbci r17, hi8 (-F7_SIZEOF)
;; Move second double argument to R18[].
wmov r18, r10
wmov r20, r12

View File

@ -22,7 +22,7 @@ F7_ASM_PARTS += addsub_mant_scaled store load
F7_ASM_PARTS += to_integer to_unsigned clz normalize_with_carry normalize
F7_ASM_PARTS += store_expo sqrt16 sqrt_approx div
F7_ASM_PARTS += D_class
F7_ASM_PARTS += D_class D_fma
F7_ASM_PARTS += D_isnan D_isinf D_isfinite D_signbit D_copysign D_neg D_fabs
F7_ASM_PARTS += call_dd call_ddd

View File

@ -29,6 +29,7 @@
#define F7_MANT_BYTES 7
#define F7_MANT_BITS (8 * F7_MANT_BYTES)
#define F7_SIZEOF (1 + F7_MANT_BYTES + 2)
/* Using the following GCC features:
-- Unnamed structs / unions (GNU-C)

View File

@ -86,7 +86,7 @@ F7_C_FLAGS += $(F7_FLAGS) \
-fno-tree-loop-optimize \
-fno-tree-loop-im -fno-move-loop-invariants
F7_ASM_FLAGS += $(F7_FLAGS)
F7_ASM_FLAGS += $(F7_FLAGS) -g0
$(patsubst %, f7_c_%.o, $(CALL_PROLOGUES)) \
: F7_C_FLAGS += -mcall-prologues

View File

@ -1,3 +1,61 @@
2023-10-25 Jonathan Wakely <jwakely@redhat.com>
Backported from master:
2023-10-25 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/111936
* src/libbacktrace/Makefile.am: Add -prefer-pic to libtool
compile commands.
* src/libbacktrace/Makefile.in: Regenerate.
2023-10-25 Paul M. Bendixen <paulbendixen@gmail.com>
Backported from master:
2023-10-24 Paul M. Bendixen <paulbendixen@gmail.com>
* include/Makefile.am: Move cstdarg, cstdalign and cstdbool to
freestanding.
* include/Makefile.in: Regenerate.
2023-10-23 François Dumont <fdumont@gcc.gnu.org>
* include/bits/hashtable_policy.h
(_Hash_code_base::_M_hash_code(const _Hash&, const _Hash_node_value<>&)): Remove.
(_Hash_code_base::_M_hash_code<_H2>(const _H2&, const _Hash_node_value<>&)): Remove.
* include/bits/hashtable.h
(_M_src_hash_code<_H2>(const _H2&, const key_type&, const __node_value_type&)): New.
(_M_merge_unique<>, _M_merge_multi<>): Use latter.
* testsuite/23_containers/unordered_map/modifiers/merge.cc
(test04, test05, test06): New test cases.
2023-10-21 Benjamin Brock <brock@cs.berkeley.edu>
Backported from master:
2023-10-21 Benjamin Brock <brock@cs.berkeley.edu>
* include/std/ranges (zip_view, adjacent_view): Implement
workaround for LLVM-61763.
2023-10-21 Jonathan Wakely <jwakely@redhat.com>
Backported from master:
2023-10-21 Jonathan Wakely <jwakely@redhat.com>
* include/bits/fs_dir.h (operator==(default_sentinel_t)): Fix
indentation.
2023-10-21 Nathaniel Shead <nathanieloshead@gmail.com>
Backported from master:
2023-09-29 Nathaniel Shead <nathanieloshead@gmail.com>
* include/bits/basic_string.h: (basic_string(basic_string&&)):
Activate _M_local_buf when needed.
(basic_string(basic_string&&, const _Alloc&)): Likewise.
* include/bits/basic_string.tcc: (basic_string::swap): Likewise.
* include/std/variant: (__detail::__variant::__construct_n): New.
(__detail::__variant::__emplace): Use __construct_n.
2023-10-02 Tim Song <t.canens.cpp@gmail.com>
Backported from master:

View File

@ -849,6 +849,9 @@ c_base_builddir = .
c_base_freestanding = \
${c_base_srcdir}/cfloat \
${c_base_srcdir}/climits \
${c_base_srcdir}/cstdalign \
${c_base_srcdir}/cstdarg \
${c_base_srcdir}/cstdbool \
${c_base_srcdir}/cstddef \
${c_base_srcdir}/cstdint \
${c_base_srcdir}/cstdlib
@ -869,9 +872,6 @@ c_base_headers = \
${c_base_srcdir}/cmath \
${c_base_srcdir}/csetjmp \
${c_base_srcdir}/csignal \
${c_base_srcdir}/cstdalign \
${c_base_srcdir}/cstdarg \
${c_base_srcdir}/cstdbool \
${c_base_srcdir}/cstdio \
${c_base_srcdir}/cstring \
${c_base_srcdir}/ctgmath \

View File

@ -1194,6 +1194,9 @@ c_base_builddir = .
c_base_freestanding = \
${c_base_srcdir}/cfloat \
${c_base_srcdir}/climits \
${c_base_srcdir}/cstdalign \
${c_base_srcdir}/cstdarg \
${c_base_srcdir}/cstdbool \
${c_base_srcdir}/cstddef \
${c_base_srcdir}/cstdint \
${c_base_srcdir}/cstdlib
@ -1212,9 +1215,6 @@ c_base_freestanding = \
@GLIBCXX_HOSTED_TRUE@ ${c_base_srcdir}/cmath \
@GLIBCXX_HOSTED_TRUE@ ${c_base_srcdir}/csetjmp \
@GLIBCXX_HOSTED_TRUE@ ${c_base_srcdir}/csignal \
@GLIBCXX_HOSTED_TRUE@ ${c_base_srcdir}/cstdalign \
@GLIBCXX_HOSTED_TRUE@ ${c_base_srcdir}/cstdarg \
@GLIBCXX_HOSTED_TRUE@ ${c_base_srcdir}/cstdbool \
@GLIBCXX_HOSTED_TRUE@ ${c_base_srcdir}/cstdio \
@GLIBCXX_HOSTED_TRUE@ ${c_base_srcdir}/cstring \
@GLIBCXX_HOSTED_TRUE@ ${c_base_srcdir}/ctgmath \

View File

@ -669,6 +669,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
{
if (__str._M_is_local())
{
(void)_M_use_local_data();
traits_type::copy(_M_local_buf, __str._M_local_buf,
__str.length() + 1);
}
@ -682,7 +683,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
// basic_stringbuf relies on writing into unallocated capacity so
// we mess up the contents if we put a '\0' in the string.
_M_length(__str.length());
__str._M_data(__str._M_local_data());
__str._M_data(__str._M_use_local_data());
__str._M_set_length(0);
}
@ -708,6 +709,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
{
if (__str._M_is_local())
{
(void)_M_use_local_data();
traits_type::copy(_M_local_buf, __str._M_local_buf,
__str.length() + 1);
_M_length(__str.length());
@ -719,7 +721,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
_M_data(__str._M_data());
_M_length(__str.length());
_M_capacity(__str._M_allocated_capacity);
__str._M_data(__str._M_local_buf);
__str._M_data(__str._M_use_local_data());
__str._M_set_length(0);
}
else

View File

@ -79,6 +79,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
else if (__s.length())
{
(void)_M_use_local_data();
traits_type::copy(_M_local_buf, __s._M_local_buf,
__s.length() + 1);
_M_length(__s.length());
@ -87,6 +88,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
else if (length())
{
(void)__s._M_use_local_data();
traits_type::copy(__s._M_local_buf, _M_local_buf,
length() + 1);
__s._M_length(length());
@ -97,6 +99,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
else
{
const size_type __tmp_capacity = __s._M_allocated_capacity;
(void)__s._M_use_local_data();
traits_type::copy(__s._M_local_buf, _M_local_buf,
length() + 1);
_M_data(__s._M_data());
@ -108,6 +111,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const size_type __tmp_capacity = _M_allocated_capacity;
if (__s._M_is_local())
{
(void)_M_use_local_data();
traits_type::copy(_M_local_buf, __s._M_local_buf,
__s.length() + 1);
__s._M_data(_M_data());

View File

@ -449,10 +449,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
}
#if __cplusplus >= 202002L
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 3719. Directory iterators should be usable with default sentinel
bool operator==(default_sentinel_t) const noexcept
{ return !_M_dir; }
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 3719. Directory iterators should be usable with default sentinel
bool operator==(default_sentinel_t) const noexcept
{ return !_M_dir; }
#endif
#if __cpp_impl_three_way_comparison < 201907L
@ -565,10 +565,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
}
#if __cplusplus >= 202002L
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 3719. Directory iterators should be usable with default sentinel
bool operator==(default_sentinel_t) const noexcept
{ return !_M_dirs; }
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 3719. Directory iterators should be usable with default sentinel
bool operator==(default_sentinel_t) const noexcept
{ return !_M_dirs; }
#endif
#if __cpp_impl_three_way_comparison < 201907L

View File

@ -1066,6 +1066,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return { __n, this->_M_node_allocator() };
}
// Only use the possibly cached node's hash code if its hash function
// _H2 matches _Hash and is stateless. Otherwise recompute it using _Hash.
template<typename _H2>
__hash_code
_M_src_hash_code(const _H2&, const key_type& __k,
const __node_value_type& __src_n) const
{
if constexpr (std::is_same_v<_H2, _Hash>)
if constexpr (std::is_empty_v<_Hash>)
return this->_M_hash_code(__src_n);
return this->_M_hash_code(__k);
}
public:
// Extract a node.
node_type
@ -1103,7 +1117,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
auto __pos = __i++;
const key_type& __k = _ExtractKey{}(*__pos);
__hash_code __code
= this->_M_hash_code(__src.hash_function(), *__pos._M_cur);
= _M_src_hash_code(__src.hash_function(), __k, *__pos._M_cur);
size_type __bkt = _M_bucket_index(__code);
if (_M_find_node(__bkt, __k, __code) == nullptr)
{
@ -1131,8 +1145,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
for (auto __i = __src.cbegin(), __end = __src.cend(); __i != __end;)
{
auto __pos = __i++;
const key_type& __k = _ExtractKey{}(*__pos);
__hash_code __code
= this->_M_hash_code(__src.hash_function(), *__pos._M_cur);
= _M_src_hash_code(__src.hash_function(), __k, *__pos._M_cur);
auto __nh = __src.extract(__pos);
__hint = _M_insert_multi_node(__hint, __code, __nh._M_ptr)._M_cur;
__nh._M_ptr = nullptr;

View File

@ -1319,19 +1319,6 @@ namespace __detail
return _M_hash()(__k);
}
__hash_code
_M_hash_code(const _Hash&,
const _Hash_node_value<_Value, true>& __n) const
{ return __n._M_hash_code; }
// Compute hash code using _Hash as __n _M_hash_code, if present, was
// computed using _H2.
template<typename _H2>
__hash_code
_M_hash_code(const _H2&,
const _Hash_node_value<_Value, __cache_hash_code>& __n) const
{ return _M_hash_code(_ExtractKey{}(__n._M_v())); }
__hash_code
_M_hash_code(const _Hash_node_value<_Value, false>& __n) const
{ return _M_hash_code(_ExtractKey{}(__n._M_v())); }

View File

@ -4535,6 +4535,9 @@ namespace views::__adaptor
class zip_view<_Vs...>::_Iterator
: public __detail::__zip_view_iter_cat<_Const, _Vs...>
{
#ifdef __clang__ // LLVM-61763 workaround
public:
#endif
__detail::__tuple_or_pair_t<iterator_t<__detail::__maybe_const_t<_Const, _Vs>>...> _M_current;
constexpr explicit
@ -4555,11 +4558,13 @@ namespace views::__adaptor
return input_iterator_tag{};
}
#ifndef __clang__ // LLVM-61763 workaround
template<copy_constructible _Fp, input_range... _Ws>
requires (view<_Ws> && ...) && (sizeof...(_Ws) > 0) && is_object_v<_Fp>
&& regular_invocable<_Fp&, range_reference_t<_Ws>...>
&& std::__detail::__can_reference<invoke_result_t<_Fp&, range_reference_t<_Ws>...>>
friend class zip_transform_view;
#endif
public:
// iterator_category defined in __zip_view_iter_cat
@ -5230,6 +5235,9 @@ namespace views::__adaptor
template<bool _Const>
class adjacent_view<_Vp, _Nm>::_Iterator
{
#ifdef __clang__ // LLVM-61763 workaround
public:
#endif
using _Base = __detail::__maybe_const_t<_Const, _Vp>;
array<iterator_t<_Base>, _Nm> _M_current = array<iterator_t<_Base>, _Nm>();
@ -5270,12 +5278,14 @@ namespace views::__adaptor
friend class adjacent_view;
#ifndef __clang__ // LLVM-61763 workaround
template<forward_range _Wp, copy_constructible _Fp, size_t _Mm>
requires view<_Wp> && (_Mm > 0) && is_object_v<_Fp>
&& regular_invocable<__detail::__unarize<_Fp&, _Mm>, range_reference_t<_Wp>>
&& std::__detail::__can_reference<invoke_result_t<__detail::__unarize<_Fp&, _Mm>,
range_reference_t<_Wp>>>
friend class adjacent_transform_view;
#endif
public:
using iterator_category = input_iterator_tag;

View File

@ -320,6 +320,33 @@ namespace __variant
__get(_Variant&& __v) noexcept
{ return __variant::__get_n<_Np>(std::forward<_Variant>(__v)._M_u); }
// Gets the _Uninitialized to construct into for __u.
template<size_t _Np, typename _Union>
constexpr decltype(auto)
__construct_n(_Union& __u) noexcept
{
if constexpr (_Np == 0)
return &__u._M_first;
else if constexpr (_Np == 1)
{
std::_Construct(&__u._M_rest);
return &__u._M_rest._M_first;
}
else if constexpr (_Np == 2)
{
std::_Construct(&__u._M_rest);
std::_Construct(&__u._M_rest._M_rest);
return &__u._M_rest._M_rest._M_first;
}
else
{
std::_Construct(&__u._M_rest);
std::_Construct(&__u._M_rest._M_rest);
std::_Construct(&__u._M_rest._M_rest._M_rest);
return __variant::__construct_n<_Np - 3>(__u._M_rest._M_rest._M_rest);
}
}
template<typename... _Types>
struct _Traits
{
@ -536,8 +563,9 @@ namespace __variant
__emplace(_Variant_storage<_Triv, _Types...>& __v, _Args&&... __args)
{
__v._M_reset();
auto* __addr = std::__addressof(__variant::__get_n<_Np>(__v._M_u));
std::_Construct(__addr, std::forward<_Args>(__args)...);
auto* __addr = __variant::__construct_n<_Np>(__v._M_u);
std::_Construct(__addr, in_place_index<0>,
std::forward<_Args>(__args)...);
// Construction didn't throw, so can set the new index now:
__v._M_index = _Np;
}

View File

@ -48,9 +48,13 @@ WARN_FLAGS = -W -Wall -Wwrite-strings -Wmissing-format-attribute \
-Wcast-qual -Werror
C_WARN_FLAGS = $(WARN_FLAGS) -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -Wno-unused-but-set-variable
CXX_WARN_FLAGS = $(WARN_FLAGS) -Wno-unused-parameter
AM_CFLAGS = $(C_WARN_FLAGS)
AM_CFLAGS = \
$(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
$(C_WARN_FLAGS)
AM_CFLAGS += $(EXTRA_CFLAGS)
AM_CXXFLAGS = $(CXX_WARN_FLAGS) -fno-rtti -fno-exceptions
AM_CXXFLAGS = \
$(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
$(CXX_WARN_FLAGS) -fno-rtti -fno-exceptions
AM_CXXFLAGS += $(EXTRA_CXXFLAGS)
obj_prefix = std_stacktrace

View File

@ -498,9 +498,10 @@ libstdc___libbacktrace_la_CPPFLAGS = \
C_WARN_FLAGS = $(WARN_FLAGS) -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -Wno-unused-but-set-variable
CXX_WARN_FLAGS = $(WARN_FLAGS) -Wno-unused-parameter
AM_CFLAGS = $(C_WARN_FLAGS) $(EXTRA_CFLAGS)
AM_CXXFLAGS = $(CXX_WARN_FLAGS) -fno-rtti -fno-exceptions \
$(EXTRA_CXXFLAGS)
AM_CFLAGS = $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
$(C_WARN_FLAGS) $(EXTRA_CFLAGS)
AM_CXXFLAGS = $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
$(CXX_WARN_FLAGS) -fno-rtti -fno-exceptions $(EXTRA_CXXFLAGS)
obj_prefix = std_stacktrace
# Each FILE.c in SOURCES will be compiled to SHORTNAME-FILE.o

View File

@ -17,15 +17,29 @@
// { dg-do run { target c++17 } }
#include <string>
#include <functional>
#include <unordered_map>
#include <algorithm>
#include <testsuite_hooks.h>
using test_type = std::unordered_map<int, int>;
struct hash {
auto operator()(int i) const noexcept { return ~std::hash<int>()(i); }
};
template<typename T>
struct xhash
{
auto operator()(const T& i) const noexcept
{ return ~std::hash<T>()(i); }
};
namespace std
{
template<typename T>
struct __is_fast_hash<xhash<T>> : __is_fast_hash<std::hash<T>>
{ };
}
struct equal : std::equal_to<> { };
template<typename C1, typename C2>
@ -64,7 +78,7 @@ test02()
{
const test_type c0{ {1, 10}, {2, 20}, {3, 30} };
test_type c1 = c0;
std::unordered_map<int, int, hash, equal> c2( c0.begin(), c0.end() );
std::unordered_map<int, int, xhash<int>, equal> c2( c0.begin(), c0.end() );
c1.merge(c2);
VERIFY( c1 == c0 );
@ -89,7 +103,7 @@ test03()
{
const test_type c0{ {1, 10}, {2, 20}, {3, 30} };
test_type c1 = c0;
std::unordered_multimap<int, int, hash, equal> c2( c0.begin(), c0.end() );
std::unordered_multimap<int, int, xhash<int>, equal> c2( c0.begin(), c0.end() );
c1.merge(c2);
VERIFY( c1 == c0 );
VERIFY( equal_elements(c2, c0) );
@ -125,10 +139,164 @@ test03()
VERIFY( c2.empty() );
}
void
test04()
{
const std::unordered_map<std::string, int> c0
{ {"one", 10}, {"two", 20}, {"three", 30} };
std::unordered_map<std::string, int> c1 = c0;
std::unordered_multimap<std::string, int> c2( c0.begin(), c0.end() );
c1.merge(c2);
VERIFY( c1 == c0 );
VERIFY( equal_elements(c2, c0) );
c1.clear();
c1.merge(c2);
VERIFY( c1 == c0 );
VERIFY( c2.empty() );
c2.merge(c1);
VERIFY( c1.empty() );
VERIFY( equal_elements(c2, c0) );
c1 = c0;
c2.merge(c1);
VERIFY( c1.empty() );
VERIFY( c2.size() == (2 * c0.size()) );
VERIFY( c2.count("one") == 2 );
VERIFY( c2.count("two") == 2 );
VERIFY( c2.count("three") == 2 );
c1.merge(c2);
VERIFY( c1 == c0 );
VERIFY( equal_elements(c2, c0) );
c1.merge(std::move(c2));
VERIFY( c1 == c0 );
VERIFY( equal_elements(c2, c0) );
c1.clear();
c1.merge(std::move(c2));
VERIFY( c1 == c0 );
VERIFY( c2.empty() );
}
void
test05()
{
const std::unordered_map<std::string, int> c0
{ {"one", 10}, {"two", 20}, {"three", 30} };
std::unordered_map<std::string, int> c1 = c0;
std::unordered_multimap<std::string, int, xhash<std::string>, equal> c2( c0.begin(), c0.end() );
c1.merge(c2);
VERIFY( c1 == c0 );
VERIFY( equal_elements(c2, c0) );
c1.clear();
c1.merge(c2);
VERIFY( c1 == c0 );
VERIFY( c2.empty() );
c2.merge(c1);
VERIFY( c1.empty() );
VERIFY( equal_elements(c2, c0) );
c1 = c0;
c2.merge(c1);
VERIFY( c1.empty() );
VERIFY( c2.size() == (2 * c0.size()) );
VERIFY( c2.count("one") == 2 );
VERIFY( c2.count("two") == 2 );
VERIFY( c2.count("three") == 2 );
c1.merge(c2);
VERIFY( c1 == c0 );
VERIFY( equal_elements(c2, c0) );
c1.merge(std::move(c2));
VERIFY( c1 == c0 );
VERIFY( equal_elements(c2, c0) );
c1.clear();
c1.merge(std::move(c2));
VERIFY( c1 == c0 );
VERIFY( c2.empty() );
}
template<typename T>
using hash_f =
std::function<std::size_t(const T&)>;
std::size_t
hash_func(const std::string& str)
{ return std::hash<std::string>{}(str); }
std::size_t
xhash_func(const std::string& str)
{ return xhash<std::string>{}(str); }
namespace std
{
template<typename T>
struct __is_fast_hash<hash_f<T>> : __is_fast_hash<std::hash<T>>
{ };
}
void
test06()
{
const std::unordered_map<std::string, int, hash_f<std::string>, equal>
c0({ {"one", 10}, {"two", 20}, {"three", 30} }, 3, &hash_func);
std::unordered_map<std::string, int, hash_f<std::string>, equal>
c1(3, &hash_func);
c1 = c0;
std::unordered_multimap<std::string, int, hash_f<std::string>, equal>
c2(c0.begin(), c0.end(), 3, &xhash_func);
c1.merge(c2);
VERIFY( c1 == c0 );
VERIFY( equal_elements(c2, c0) );
c1.clear();
c1.merge(c2);
VERIFY( c1 == c0 );
VERIFY( c2.empty() );
c2.merge(c1);
VERIFY( c1.empty() );
VERIFY( equal_elements(c2, c0) );
c1 = c0;
c2.merge(c1);
VERIFY( c1.empty() );
VERIFY( c2.size() == (2 * c0.size()) );
VERIFY( c2.count("one") == 2 );
VERIFY( c2.count("two") == 2 );
VERIFY( c2.count("three") == 2 );
c1.merge(c2);
VERIFY( c1 == c0 );
VERIFY( equal_elements(c2, c0) );
c1.merge(std::move(c2));
VERIFY( c1 == c0 );
VERIFY( equal_elements(c2, c0) );
c1.clear();
c1.merge(std::move(c2));
VERIFY( c1 == c0 );
VERIFY( c2.empty() );
}
int
main()
{
test01();
test02();
test03();
test04();
test05();
test06();
}