diff -ruN mrustc-0.11.2.orig/src/ast/ast.cpp mrustc-0.11.2/src/ast/ast.cpp --- mrustc-0.11.2.orig/src/ast/ast.cpp 2025-05-05 19:48:49.015447489 -0400 +++ mrustc-0.11.2/src/ast/ast.cpp 2025-05-06 21:59:55.063318921 -0400 @@ -243,9 +243,9 @@ Function::Function(Span sp, ::std::string abi, Flags flags, GenericParams params, TypeRef ret_type, Arglist args, bool is_variadic): m_span(sp), - m_params( move(params) ), - m_rettype( move(ret_type) ), - m_args( move(args) ), + m_params( std::move(params) ), + m_rettype( std::move(ret_type) ), + m_args( std::move(args) ), m_is_variadic(is_variadic), m_abi( mv$(abi) ), m_flags(flags) diff -ruN mrustc-0.11.2.orig/src/ast/ast.hpp mrustc-0.11.2/src/ast/ast.hpp --- mrustc-0.11.2.orig/src/ast/ast.hpp 2025-05-05 19:48:49.015447489 -0400 +++ mrustc-0.11.2/src/ast/ast.hpp 2025-05-06 22:00:48.786212819 -0400 @@ -101,8 +101,8 @@ //TypeAlias() {} TypeAlias(GenericParams params, TypeRef type): - m_params( move(params) ), - m_type( move(type) ) + m_params( std::move(params) ), + m_type( std::move(type) ) {} static TypeAlias new_associated_type(GenericParams params, GenericParams type_bounds, TypeRef default_type) { TypeAlias rv { std::move(params), std::move(default_type) }; @@ -164,8 +164,8 @@ Static(Class s_class, TypeRef type, Expr value): m_class(s_class), - m_type( move(type) ), - m_value( move(value) ) + m_type( std::move(type) ), + m_value( std::move(value) ) {} const Class& s_class() const { return m_class; } @@ -421,8 +421,8 @@ Enum() {} Enum( GenericParams params, ::std::vector variants ): - m_params( move(params) ), - m_variants( move(variants) ) + m_params( std::move(params) ), + m_variants( std::move(variants) ) {} const GenericParams& params() const { return m_params; } @@ -483,11 +483,11 @@ { } Struct( GenericParams params, ::std::vector fields ): - m_params( move(params) ), + m_params( std::move(params) ), m_data( StructData::make_Struct({mv$(fields)}) ) {} Struct( GenericParams params, ::std::vector fields ): - m_params( move(params) ), + m_params( std::move(params) ), m_data( StructData::make_Tuple({mv$(fields)}) ) {} @@ -511,7 +511,7 @@ } m_markings; Union( GenericParams params, ::std::vector fields ): - m_params( move(params) ), + m_params( std::move(params) ), m_variants( mv$(fields) ) {} diff -ruN mrustc-0.11.2.orig/src/ast/expr.hpp mrustc-0.11.2/src/ast/expr.hpp --- mrustc-0.11.2.orig/src/ast/expr.hpp 2025-05-05 19:48:49.015447489 -0400 +++ mrustc-0.11.2/src/ast/expr.hpp 2025-05-06 22:01:28.556431607 -0400 @@ -76,8 +76,8 @@ m_block_type(type), m_yields_final_value(yields_final_value), m_label(""), - m_local_mod( move(local_mod) ), - m_nodes( move(nodes) ) + m_local_mod( std::move(local_mod) ), + m_nodes( std::move(nodes) ) { } @@ -106,9 +106,9 @@ bool m_is_braced; ExprNode_Macro(AST::Path name, RcString ident, ::TokenTree&& tokens, bool is_braced=false): - m_path( move(name) ), + m_path( std::move(name) ), m_ident(ident), - m_tokens( move(tokens) ) + m_tokens( std::move(tokens) ) , m_is_braced(is_braced) {} @@ -132,11 +132,11 @@ ::std::vector<::std::string> m_flags; ExprNode_Asm(::std::string text, ::std::vector output, ::std::vector input, ::std::vector<::std::string> clobbers, ::std::vector<::std::string> flags): - m_text( move(text) ), - m_output( move(output) ), - m_input( move(input) ), - m_clobbers( move(clobbers) ), - m_flags( move(flags) ) + m_text( std::move(text) ), + m_output( std::move(output) ), + m_input( std::move(input) ), + m_clobbers( std::move(clobbers) ), + m_flags( std::move(flags) ) { } @@ -169,8 +169,8 @@ ExprNode_Asm2(AsmCommon::Options options, std::vector lines, std::vector params) : m_options(options) - , m_lines( move(lines) ) - , m_params( move(params) ) + , m_lines( std::move(lines) ) + , m_params( std::move(params) ) { } @@ -194,8 +194,8 @@ ExprNode_Flow(Type type, Ident target, ExprNodeP value): m_type(type), - m_target( move(target) ), - m_value( move(value) ) + m_target( std::move(target) ), + m_value( std::move(value) ) { } @@ -212,10 +212,10 @@ ::std::pair m_letelse_slots; ExprNode_LetBinding(Pattern pat, TypeRef type, ExprNodeP value, ExprNodeP else_arm={}) - : m_pat( move(pat) ) - , m_type( move(type) ) - , m_value( move(value) ) - , m_else( move(else_arm) ) + : m_pat( std::move(pat) ) + , m_type( std::move(type) ) + , m_value( std::move(value) ) + , m_else( std::move(else_arm) ) { } @@ -237,8 +237,8 @@ ExprNode_Assign(): m_op(NONE) {} ExprNode_Assign(Operation op, ExprNodeP slot, ExprNodeP value): m_op(op), - m_slot( move(slot) ), - m_value( move(value) ) + m_slot( std::move(slot) ), + m_value( std::move(value) ) { } @@ -251,8 +251,8 @@ ::std::vector m_args; ExprNode_CallPath(Path&& path, ::std::vector&& args): - m_path( move(path) ), - m_args( move(args) ) + m_path( std::move(path) ), + m_args( std::move(args) ) { } @@ -266,9 +266,9 @@ ::std::vector m_args; ExprNode_CallMethod(ExprNodeP obj, PathNode method, ::std::vector args): - m_val( move(obj) ), - m_method( move(method) ), - m_args( move(args) ) + m_val( std::move(obj) ), + m_method( std::move(method) ), + m_args( std::move(args) ) { } @@ -282,8 +282,8 @@ ::std::vector m_args; ExprNode_CallObject(ExprNodeP val, ::std::vector< ExprNodeP >&& args): - m_val( move(val) ), - m_args( move(args) ) + m_val( std::move(val) ), + m_args( std::move(args) ) { } NODE_METHODS(); @@ -531,9 +531,9 @@ t_values m_values; ExprNode_StructLiteral(Path path, ExprNodeP base_value, t_values&& values ): - m_path( move(path) ), - m_base_value( move(base_value) ), - m_values( move(values) ) + m_path( std::move(path) ), + m_base_value( std::move(base_value) ), + m_values( std::move(values) ) {} NODE_METHODS(); @@ -548,8 +548,8 @@ t_values m_values; ExprNode_StructLiteralPattern(Path path, t_values&& values) - : m_path( move(path) ) - , m_values( move(values) ) + : m_path( std::move(path) ) + , m_values( std::move(values) ) {} NODE_METHODS(); @@ -646,8 +646,8 @@ TypeRef m_type; ExprNode_Cast(ExprNodeP value, TypeRef&& dst_type): - m_value( move(value) ), - m_type( move(dst_type) ) + m_value( std::move(value) ), + m_type( std::move(dst_type) ) { } NODE_METHODS(); @@ -661,8 +661,8 @@ TypeRef m_type; ExprNode_TypeAnnotation(ExprNodeP value, TypeRef&& dst_type): - m_value( move(value) ), - m_type( move(dst_type) ) + m_value( std::move(value) ), + m_type( std::move(dst_type) ) { } NODE_METHODS(); diff -ruN mrustc-0.11.2.orig/src/ast/lifetime_ref.hpp mrustc-0.11.2/src/ast/lifetime_ref.hpp --- mrustc-0.11.2.orig/src/ast/lifetime_ref.hpp 2025-05-05 20:46:46.568398964 -0400 +++ mrustc-0.11.2/src/ast/lifetime_ref.hpp 2025-05-05 19:59:44.934652489 -0400 @@ -6,6 +6,7 @@ * - AST Lifetime reference */ #pragma once +#include #include "../common.hpp" #include "ident.hpp" diff -ruN mrustc-0.11.2.orig/src/debug.cpp mrustc-0.11.2/src/debug.cpp --- mrustc-0.11.2.orig/src/debug.cpp 2025-05-05 20:46:46.568562659 -0400 +++ mrustc-0.11.2/src/debug.cpp 2025-05-05 19:57:59.149549205 -0400 @@ -5,6 +5,7 @@ * debug.cpp * - Debug printing (with indenting) */ +#include #include #include #include diff -ruN mrustc-0.11.2.orig/src/hir/expr.hpp mrustc-0.11.2/src/hir/expr.hpp --- mrustc-0.11.2.orig/src/hir/expr.hpp 2025-05-05 19:48:49.017523096 -0400 +++ mrustc-0.11.2/src/hir/expr.hpp 2025-05-06 22:02:51.568333466 -0400 @@ -156,8 +156,8 @@ ExprNode_Asm2(Span sp, AsmCommon::Options options, std::vector lines, std::vector params) : ExprNode(mv$(sp)) , m_options(options) - , m_lines( move(lines) ) - , m_params( move(params) ) + , m_lines( std::move(lines) ) + , m_params( std::move(params) ) { } diff -ruN mrustc-0.11.2.orig/src/hir/generic_ref.hpp mrustc-0.11.2/src/hir/generic_ref.hpp --- mrustc-0.11.2.orig/src/hir/generic_ref.hpp 2025-05-05 20:46:46.568679102 -0400 +++ mrustc-0.11.2/src/hir/generic_ref.hpp 2025-05-05 19:59:36.463727568 -0400 @@ -6,6 +6,7 @@ * - Reference to a generic */ #pragma once +#include #include /// Binding index for a Generic that indicates "Self" diff -ruN mrustc-0.11.2.orig/src/hir/type_ref.hpp mrustc-0.11.2/src/hir/type_ref.hpp --- mrustc-0.11.2.orig/src/hir/type_ref.hpp 2025-05-05 20:46:46.568770980 -0400 +++ mrustc-0.11.2/src/hir/type_ref.hpp 2025-05-05 19:59:57.743537961 -0400 @@ -7,6 +7,7 @@ */ #pragma once +#include #include #include diff -ruN mrustc-0.11.2.orig/src/macro_rules/macro_rules.hpp mrustc-0.11.2/src/macro_rules/macro_rules.hpp --- mrustc-0.11.2.orig/src/macro_rules/macro_rules.hpp 2025-05-05 19:48:49.012008507 -0400 +++ mrustc-0.11.2/src/macro_rules/macro_rules.hpp 2025-05-06 22:02:05.491732403 -0400 @@ -102,7 +102,7 @@ name( op ), name_index(index), tok( mv$(sep) ), - subpats( move(ents) ), + subpats( std::move(ents) ), type(PAT_LOOP) { } diff -ruN mrustc-0.11.2.orig/src/trans/codegen_c.cpp mrustc-0.11.2/src/trans/codegen_c.cpp --- mrustc-0.11.2.orig/src/trans/codegen_c.cpp 2025-05-05 19:48:49.014366958 -0400 +++ mrustc-0.11.2/src/trans/codegen_c.cpp 2025-05-06 22:09:34.173707709 -0400 @@ -1287,10 +1287,11 @@ break; } // HACK: Work around [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117423] by disabling an optimisation stage - if( opt.opt_level > 0 ) + // Disabled for Maple Linux. See build-chroot.sh for details. ~ahill + /* if( opt.opt_level > 0 ) { args.push_back("-fno-tree-sra"); - } + } */ if( opt.emit_debug_info ) { args.push_back("-g"); @@ -4785,7 +4786,8 @@ switch (v.first[0]) { case '=': m_of << "="; break; - case '+': m_of << "+"; break; + // Patched for Maple Linux. See build-chroot.sh for details. ~ahill + case '+': m_of << "="; break; default: MIR_TODO(mir_res, "Handle asm! output leader '" << v.first[0] << "'"); } m_of << H::convert_reg(v.first.c_str() + 1); @@ -5428,12 +5430,14 @@ if(i != 0) m_of << ","; m_of << " "; m_of << "\""; - if( !p.output && !p.input ) { + // Patched for Maple Linux. See build-chroot.sh for details. ~ahill + m_of << "="; + /*if( !p.output && !p.input ) { m_of << "+"; } else { m_of << (p.input ? "+" : "="); - } + }*/ TU_MATCH_HDRA((p.spec), {) TU_ARMA(Class, c) // https://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html diff -ruN mrustc-0.11.2.orig/src/trans/target.cpp mrustc-0.11.2/src/trans/target.cpp --- mrustc-0.11.2.orig/src/trans/target.cpp 2025-05-05 19:48:49.014366958 -0400 +++ mrustc-0.11.2/src/trans/target.cpp 2025-05-06 22:07:39.775297252 -0400 @@ -405,7 +405,8 @@ TargetSpec init_from_spec_name(const ::std::string& target_name) { // Options for all the fully-GNU environments - #define BACKEND_C_OPTS_GNU {"-ffunction-sections", "-pthread"}, {"-Wl,--start-group"}, {"-Wl,--end-group", "-Wl,--gc-sections", "-l", "atomic"} + // Patched for Maple Linux. See build-chroot.sh for details. ~ahill + #define BACKEND_C_OPTS_GNU {"-ffunction-sections", "-pthread"}, {"-Wl,--start-group"}, {"-Wl,--end-group", "-Wl,--gc-sections"} // If there's a '/' or a '\' in the filename, open it as a path, otherwise assume it's a triple. if( target_name.find('/') != ::std::string::npos || target_name.find('\\') != ::std::string::npos ) { diff -ruN mrustc-0.11.2.orig/src/trans/codegen_c.cpp mrustc-0.11.2/src/trans/codegen_c.cpp --- mrustc-0.11.2.orig/src/trans/codegen_c.cpp 2024-12-29 22:28:18.000000000 -0500 +++ mrustc-0.11.2/src/trans/codegen_c.cpp 2025-05-07 12:57:51.573401275 -0400 @@ -1295,6 +1295,7 @@ { args.push_back("-g"); } + args.push_back("-fno-delete-null-pointer-checks"); // TODO: Why? args.push_back("-fPIC"); args.push_back("-o");