Skip to content

Commit 6033cca

Browse files
committed
Revert "rustc_target: add "unwind" payloads to Abi"
This reverts commit df45c57.
1 parent a994dcc commit 6033cca

File tree

29 files changed

+52
-277
lines changed

29 files changed

+52
-277
lines changed

compiler/rustc_ast_lowering/src/item.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -319,10 +319,10 @@ impl<'hir> LoweringContext<'_, 'hir> {
319319
},
320320
ItemKind::ForeignMod(ref fm) => {
321321
if fm.abi.is_none() {
322-
self.maybe_lint_missing_abi(span, id, abi::Abi::C { unwind: false });
322+
self.maybe_lint_missing_abi(span, id, abi::Abi::C);
323323
}
324324
hir::ItemKind::ForeignMod {
325-
abi: fm.abi.map_or(abi::Abi::C { unwind: false }, |abi| self.lower_abi(abi)),
325+
abi: fm.abi.map_or(abi::Abi::C, |abi| self.lower_abi(abi)),
326326
items: self
327327
.arena
328328
.alloc_from_iter(fm.items.iter().map(|x| self.lower_foreign_item_ref(x))),
@@ -1334,8 +1334,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
13341334
match ext {
13351335
Extern::None => abi::Abi::Rust,
13361336
Extern::Implicit => {
1337-
self.maybe_lint_missing_abi(span, id, abi::Abi::C { unwind: false });
1338-
abi::Abi::C { unwind: false }
1337+
self.maybe_lint_missing_abi(span, id, abi::Abi::C);
1338+
abi::Abi::C
13391339
}
13401340
Extern::Explicit(abi) => self.lower_abi(abi),
13411341
}

compiler/rustc_ast_passes/src/feature_gate.rs

-32
Original file line numberDiff line numberDiff line change
@@ -164,38 +164,6 @@ impl<'a> PostExpansionVisitor<'a> {
164164
"C-cmse-nonsecure-call ABI is experimental and subject to change"
165165
);
166166
}
167-
"C-unwind" => {
168-
gate_feature_post!(
169-
&self,
170-
c_unwind,
171-
span,
172-
"C-unwind ABI is experimental and subject to change"
173-
);
174-
}
175-
"stdcall-unwind" => {
176-
gate_feature_post!(
177-
&self,
178-
c_unwind,
179-
span,
180-
"stdcall-unwind ABI is experimental and subject to change"
181-
);
182-
}
183-
"system-unwind" => {
184-
gate_feature_post!(
185-
&self,
186-
c_unwind,
187-
span,
188-
"system-unwind ABI is experimental and subject to change"
189-
);
190-
}
191-
"thiscall-unwind" => {
192-
gate_feature_post!(
193-
&self,
194-
c_unwind,
195-
span,
196-
"thiscall-unwind ABI is experimental and subject to change"
197-
);
198-
}
199167
abi => self
200168
.sess
201169
.parse_sess

compiler/rustc_codegen_cranelift/src/abi/mod.rs

+2-5
Original file line numberDiff line numberDiff line change
@@ -476,11 +476,8 @@ pub(crate) fn codegen_terminator_call<'tcx>(
476476

477477
// FIXME find a cleaner way to support varargs
478478
if fn_sig.c_variadic {
479-
if !matches!(fn_sig.abi, Abi::C { .. }) {
480-
fx.tcx.sess.span_fatal(
481-
span,
482-
&format!("Variadic call for non-C abi {:?}", fn_sig.abi),
483-
);
479+
if fn_sig.abi != Abi::C {
480+
fx.tcx.sess.span_fatal(span, &format!("Variadic call for non-C abi {:?}", fn_sig.abi));
484481
}
485482
let sig_ref = fx.bcx.func.dfg.call_signature(call_inst).unwrap();
486483
let abi_params = call_args

compiler/rustc_feature/src/active.rs

-3
Original file line numberDiff line numberDiff line change
@@ -644,9 +644,6 @@ declare_features! (
644644
/// Allows associated types in inherent impls.
645645
(active, inherent_associated_types, "1.52.0", Some(8995), None),
646646

647-
/// Allows `extern "C-unwind" fn` to enable unwinding across ABI boundaries.
648-
(active, c_unwind, "1.52.0", Some(74990), None),
649-
650647
// -------------------------------------------------------------------------
651648
// feature-group-end: actual feature gates
652649
// -------------------------------------------------------------------------

compiler/rustc_middle/src/ty/layout.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -2654,14 +2654,14 @@ where
26542654
RustIntrinsic | PlatformIntrinsic | Rust | RustCall => Conv::Rust,
26552655

26562656
// It's the ABI's job to select this, not ours.
2657-
System { .. } => bug!("system abi should be selected elsewhere"),
2657+
System => bug!("system abi should be selected elsewhere"),
26582658
EfiApi => bug!("eficall abi should be selected elsewhere"),
26592659

2660-
Stdcall { .. } => Conv::X86Stdcall,
2660+
Stdcall => Conv::X86Stdcall,
26612661
Fastcall => Conv::X86Fastcall,
26622662
Vectorcall => Conv::X86VectorCall,
2663-
Thiscall { .. } => Conv::X86ThisCall,
2664-
C { .. } => Conv::C,
2663+
Thiscall => Conv::X86ThisCall,
2664+
C => Conv::C,
26652665
Unadjusted => Conv::C,
26662666
Win64 => Conv::X86_64Win64,
26672667
SysV64 => Conv::X86_64SysV,

compiler/rustc_mir/src/interpret/terminator.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,9 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
248248
};
249249
if normalize_abi(caller_abi) != normalize_abi(callee_abi) {
250250
throw_ub_format!(
251-
"calling a function with ABI {} using caller ABI {}",
252-
callee_abi.name(),
253-
caller_abi.name()
251+
"calling a function with ABI {:?} using caller ABI {:?}",
252+
callee_abi,
253+
caller_abi
254254
)
255255
}
256256
}

compiler/rustc_span/src/symbol.rs

-1
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,6 @@ symbols! {
330330
bridge,
331331
bswap,
332332
c_str,
333-
c_unwind,
334333
c_variadic,
335334
call,
336335
call_mut,

compiler/rustc_symbol_mangling/src/v0.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ impl Printer<'tcx> for SymbolMangler<'tcx> {
440440
}
441441
match sig.abi {
442442
Abi::Rust => {}
443-
Abi::C { unwind: false } => cx.push("KC"),
443+
Abi::C => cx.push("KC"),
444444
abi => {
445445
cx.push("K");
446446
let name = abi.name();

compiler/rustc_target/src/spec/abi.rs

+14-51
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,24 @@ mod tests;
88
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, Debug)]
99
#[derive(HashStable_Generic, Encodable, Decodable)]
1010
pub enum Abi {
11+
// N.B., this ordering MUST match the AbiDatas array below.
12+
// (This is ensured by the test indices_are_correct().)
13+
1114
// Multiplatform / generic ABIs
1215
//
1316
// These ABIs come first because every time we add a new ABI, we
1417
// have to re-bless all the hashing tests. These are used in many
1518
// places, so giving them stable values reduces test churn. The
1619
// specific values are meaningless.
17-
Rust,
18-
C { unwind: bool },
20+
Rust = 0,
21+
C = 1,
1922

2023
// Single platform ABIs
2124
Cdecl,
22-
Stdcall { unwind: bool },
25+
Stdcall,
2326
Fastcall,
2427
Vectorcall,
25-
Thiscall { unwind: bool },
28+
Thiscall,
2629
Aapcs,
2730
Win64,
2831
SysV64,
@@ -36,7 +39,7 @@ pub enum Abi {
3639
CCmseNonSecureCall,
3740

3841
// Multiplatform / generic ABIs
39-
System { unwind: bool },
42+
System,
4043
RustIntrinsic,
4144
RustCall,
4245
PlatformIntrinsic,
@@ -58,16 +61,13 @@ pub struct AbiData {
5861
const AbiDatas: &[AbiData] = &[
5962
// Cross-platform ABIs
6063
AbiData { abi: Abi::Rust, name: "Rust", generic: true },
61-
AbiData { abi: Abi::C { unwind: false }, name: "C", generic: true },
62-
AbiData { abi: Abi::C { unwind: true }, name: "C-unwind", generic: true },
64+
AbiData { abi: Abi::C, name: "C", generic: true },
6365
// Platform-specific ABIs
6466
AbiData { abi: Abi::Cdecl, name: "cdecl", generic: false },
65-
AbiData { abi: Abi::Stdcall { unwind: false }, name: "stdcall", generic: false },
66-
AbiData { abi: Abi::Stdcall { unwind: true }, name: "stdcall-unwind", generic: false },
67+
AbiData { abi: Abi::Stdcall, name: "stdcall", generic: false },
6768
AbiData { abi: Abi::Fastcall, name: "fastcall", generic: false },
6869
AbiData { abi: Abi::Vectorcall, name: "vectorcall", generic: false },
69-
AbiData { abi: Abi::Thiscall { unwind: false }, name: "thiscall", generic: false },
70-
AbiData { abi: Abi::Thiscall { unwind: true }, name: "thiscall-unwind", generic: false },
70+
AbiData { abi: Abi::Thiscall, name: "thiscall", generic: false },
7171
AbiData { abi: Abi::Aapcs, name: "aapcs", generic: false },
7272
AbiData { abi: Abi::Win64, name: "win64", generic: false },
7373
AbiData { abi: Abi::SysV64, name: "sysv64", generic: false },
@@ -84,8 +84,7 @@ const AbiDatas: &[AbiData] = &[
8484
},
8585
AbiData { abi: Abi::CCmseNonSecureCall, name: "C-cmse-nonsecure-call", generic: false },
8686
// Cross-platform ABIs
87-
AbiData { abi: Abi::System { unwind: false }, name: "system", generic: true },
88-
AbiData { abi: Abi::System { unwind: true }, name: "system-unwind", generic: true },
87+
AbiData { abi: Abi::System, name: "system", generic: true },
8988
AbiData { abi: Abi::RustIntrinsic, name: "rust-intrinsic", generic: true },
9089
AbiData { abi: Abi::RustCall, name: "rust-call", generic: true },
9190
AbiData { abi: Abi::PlatformIntrinsic, name: "platform-intrinsic", generic: true },
@@ -104,41 +103,7 @@ pub fn all_names() -> Vec<&'static str> {
104103
impl Abi {
105104
#[inline]
106105
pub fn index(self) -> usize {
107-
// N.B., this ordering MUST match the AbiDatas array above.
108-
// (This is ensured by the test indices_are_correct().)
109-
use Abi::*;
110-
match self {
111-
// Cross-platform ABIs
112-
Rust => 0,
113-
C { unwind: false } => 1,
114-
C { unwind: true } => 2,
115-
// Platform-specific ABIs
116-
Cdecl => 3,
117-
Stdcall { unwind: false } => 4,
118-
Stdcall { unwind: true } => 5,
119-
Fastcall => 6,
120-
Vectorcall => 7,
121-
Thiscall { unwind: false } => 8,
122-
Thiscall { unwind: true } => 9,
123-
Aapcs => 10,
124-
Win64 => 11,
125-
SysV64 => 12,
126-
PtxKernel => 13,
127-
Msp430Interrupt => 14,
128-
X86Interrupt => 15,
129-
AmdGpuKernel => 16,
130-
EfiApi => 17,
131-
AvrInterrupt => 18,
132-
AvrNonBlockingInterrupt => 19,
133-
CCmseNonSecureCall => 20,
134-
// Cross-platform ABIs
135-
System { unwind: false } => 21,
136-
System { unwind: true } => 22,
137-
RustIntrinsic => 23,
138-
RustCall => 24,
139-
PlatformIntrinsic => 25,
140-
Unadjusted => 26,
141-
}
106+
self as usize
142107
}
143108

144109
#[inline]
@@ -157,8 +122,6 @@ impl Abi {
157122

158123
impl fmt::Display for Abi {
159124
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
160-
match self {
161-
abi => write!(f, "\"{}\"", abi.name()),
162-
}
125+
write!(f, "\"{}\"", self.name())
163126
}
164127
}

compiler/rustc_target/src/spec/arm_base.rs

+1-10
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,5 @@ use crate::spec::abi::Abi;
22

33
// All the calling conventions trigger an assertion(Unsupported calling convention) in llvm on arm
44
pub fn unsupported_abis() -> Vec<Abi> {
5-
vec![
6-
Abi::Stdcall { unwind: false },
7-
Abi::Stdcall { unwind: true },
8-
Abi::Fastcall,
9-
Abi::Vectorcall,
10-
Abi::Thiscall { unwind: false },
11-
Abi::Thiscall { unwind: true },
12-
Abi::Win64,
13-
Abi::SysV64,
14-
]
5+
vec![Abi::Stdcall, Abi::Fastcall, Abi::Vectorcall, Abi::Thiscall, Abi::Win64, Abi::SysV64]
156
}

compiler/rustc_target/src/spec/mipsel_unknown_none.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,10 @@ pub fn target() -> Target {
2323
panic_strategy: PanicStrategy::Abort,
2424
relocation_model: RelocModel::Static,
2525
unsupported_abis: vec![
26-
Abi::Stdcall { unwind: false },
27-
Abi::Stdcall { unwind: true },
26+
Abi::Stdcall,
2827
Abi::Fastcall,
2928
Abi::Vectorcall,
30-
Abi::Thiscall { unwind: false },
31-
Abi::Thiscall { unwind: true },
29+
Abi::Thiscall,
3230
Abi::Win64,
3331
Abi::SysV64,
3432
],

compiler/rustc_target/src/spec/mod.rs

+6-13
Original file line numberDiff line numberDiff line change
@@ -1284,31 +1284,24 @@ impl Target {
12841284
/// Given a function ABI, turn it into the correct ABI for this target.
12851285
pub fn adjust_abi(&self, abi: Abi) -> Abi {
12861286
match abi {
1287-
Abi::System { unwind } => {
1287+
Abi::System => {
12881288
if self.is_like_windows && self.arch == "x86" {
1289-
Abi::Stdcall { unwind }
1289+
Abi::Stdcall
12901290
} else {
1291-
Abi::C { unwind }
1291+
Abi::C
12921292
}
12931293
}
12941294
// These ABI kinds are ignored on non-x86 Windows targets.
12951295
// See https://docs.microsoft.com/en-us/cpp/cpp/argument-passing-and-naming-conventions
12961296
// and the individual pages for __stdcall et al.
1297-
Abi::Stdcall { unwind } | Abi::Thiscall { unwind } => {
1298-
if self.is_like_windows && self.arch != "x86" { Abi::C { unwind } } else { abi }
1299-
}
1300-
Abi::Fastcall | Abi::Vectorcall => {
1301-
if self.is_like_windows && self.arch != "x86" {
1302-
Abi::C { unwind: false }
1303-
} else {
1304-
abi
1305-
}
1297+
Abi::Stdcall | Abi::Fastcall | Abi::Vectorcall | Abi::Thiscall => {
1298+
if self.is_like_windows && self.arch != "x86" { Abi::C } else { abi }
13061299
}
13071300
Abi::EfiApi => {
13081301
if self.arch == "x86_64" {
13091302
Abi::Win64
13101303
} else {
1311-
Abi::C { unwind: false }
1304+
Abi::C
13121305
}
13131306
}
13141307
abi => abi,

compiler/rustc_target/src/spec/nvptx64_nvidia_cuda.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,10 @@ pub fn target() -> Target {
4949
// create the tests for this.
5050
unsupported_abis: vec![
5151
Abi::Cdecl,
52-
Abi::Stdcall { unwind: false },
53-
Abi::Stdcall { unwind: true },
52+
Abi::Stdcall,
5453
Abi::Fastcall,
5554
Abi::Vectorcall,
56-
Abi::Thiscall { unwind: false },
57-
Abi::Thiscall { unwind: true },
55+
Abi::Thiscall,
5856
Abi::Aapcs,
5957
Abi::Win64,
6058
Abi::SysV64,

compiler/rustc_target/src/spec/riscv_base.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@ use crate::spec::abi::Abi;
55
pub fn unsupported_abis() -> Vec<Abi> {
66
vec![
77
Abi::Cdecl,
8-
Abi::Stdcall { unwind: false },
9-
Abi::Stdcall { unwind: true },
8+
Abi::Stdcall,
109
Abi::Fastcall,
1110
Abi::Vectorcall,
12-
Abi::Thiscall { unwind: false },
13-
Abi::Thiscall { unwind: true },
11+
Abi::Thiscall,
1412
Abi::Aapcs,
1513
Abi::Win64,
1614
Abi::SysV64,

compiler/rustc_typeck/src/collect.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2678,7 +2678,7 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs {
26782678
} else if tcx.sess.check_name(attr, sym::used) {
26792679
codegen_fn_attrs.flags |= CodegenFnAttrFlags::USED;
26802680
} else if tcx.sess.check_name(attr, sym::cmse_nonsecure_entry) {
2681-
if !matches!(tcx.fn_sig(id).abi(), abi::Abi::C { .. }) {
2681+
if tcx.fn_sig(id).abi() != abi::Abi::C {
26822682
struct_span_err!(
26832683
tcx.sess,
26842684
attr.span,

compiler/rustc_typeck/src/lib.rs

+8-13
Original file line numberDiff line numberDiff line change
@@ -118,19 +118,14 @@ use astconv::AstConv;
118118
use bounds::Bounds;
119119

120120
fn require_c_abi_if_c_variadic(tcx: TyCtxt<'_>, decl: &hir::FnDecl<'_>, abi: Abi, span: Span) {
121-
match (decl.c_variadic, abi) {
122-
// The function has the correct calling convention, or isn't a "C-variadic" function.
123-
(false, _) | (true, Abi::C { .. }) | (true, Abi::Cdecl) => {}
124-
// The function is a "C-variadic" function with an incorrect calling convention.
125-
(true, _) => {
126-
let mut err = struct_span_err!(
127-
tcx.sess,
128-
span,
129-
E0045,
130-
"C-variadic function must have C or cdecl calling convention"
131-
);
132-
err.span_label(span, "C-variadics require C or cdecl calling convention").emit();
133-
}
121+
if decl.c_variadic && !(abi == Abi::C || abi == Abi::Cdecl) {
122+
let mut err = struct_span_err!(
123+
tcx.sess,
124+
span,
125+
E0045,
126+
"C-variadic function must have C or cdecl calling convention"
127+
);
128+
err.span_label(span, "C-variadics require C or cdecl calling convention").emit();
134129
}
135130
}
136131

0 commit comments

Comments
 (0)