Skip to content

Commit 249e46b

Browse files
committed
Add monomorphization errors
1 parent 6fdfcb3 commit 249e46b

File tree

4 files changed

+318
-153
lines changed

4 files changed

+318
-153
lines changed

compiler/rustc_codegen_gcc/src/errors.rs

Lines changed: 197 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use rustc_errors::{DiagnosticArgValue, IntoDiagnosticArg};
22
use rustc_macros::SessionDiagnostic;
3-
use rustc_span::Span;
3+
use rustc_middle::ty::Ty;
4+
use rustc_span::{Span, Symbol};
45
use std::borrow::Cow;
56

67
struct ExitCode {
@@ -29,6 +30,201 @@ impl RanlibFailure {
2930
}
3031
}
3132

33+
#[derive(SessionDiagnostic)]
34+
#[diag(codegen_gcc::invalid_monomorphization_basic_integer, code = "E0511")]
35+
pub(crate) struct InvalidMonomorphizationBasicInteger<'a> {
36+
#[primary_span]
37+
pub span: Span,
38+
pub name: Symbol,
39+
pub ty: Ty<'a>,
40+
}
41+
42+
#[derive(SessionDiagnostic)]
43+
#[diag(codegen_gcc::invalid_monomorphization_invalid_float_vector, code = "E0511")]
44+
pub(crate) struct InvalidMonomorphizationInvalidFloatVector<'a> {
45+
#[primary_span]
46+
pub span: Span,
47+
pub name: Symbol,
48+
pub elem_ty: &'a str,
49+
pub vec_ty: Ty<'a>,
50+
}
51+
52+
#[derive(SessionDiagnostic)]
53+
#[diag(codegen_gcc::invalid_monomorphization_not_float, code = "E0511")]
54+
pub(crate) struct InvalidMonomorphizationNotFloat<'a> {
55+
#[primary_span]
56+
pub span: Span,
57+
pub name: Symbol,
58+
pub ty: Ty<'a>,
59+
}
60+
61+
#[derive(SessionDiagnostic)]
62+
#[diag(codegen_gcc::invalid_monomorphization_unrecognized, code = "E0511")]
63+
pub(crate) struct InvalidMonomorphizationUnrecognized {
64+
#[primary_span]
65+
pub span: Span,
66+
pub name: Symbol,
67+
}
68+
69+
#[derive(SessionDiagnostic)]
70+
#[diag(codegen_gcc::invalid_monomorphization_expected_signed_unsigned, code = "E0511")]
71+
pub(crate) struct InvalidMonomorphizationExpectedSignedUnsigned<'a> {
72+
#[primary_span]
73+
pub span: Span,
74+
pub name: Symbol,
75+
pub elem_ty: Ty<'a>,
76+
pub vec_ty: Ty<'a>,
77+
}
78+
79+
#[derive(SessionDiagnostic)]
80+
#[diag(codegen_gcc::invalid_monomorphization_unsupported_element, code = "E0511")]
81+
pub(crate) struct InvalidMonomorphizationUnsupportedElement<'a> {
82+
#[primary_span]
83+
pub span: Span,
84+
pub name: Symbol,
85+
pub in_ty: Ty<'a>,
86+
pub elem_ty: Ty<'a>,
87+
pub ret_ty: Ty<'a>,
88+
}
89+
90+
#[derive(SessionDiagnostic)]
91+
#[diag(codegen_gcc::invalid_monomorphization_invalid_bitmask, code = "E0511")]
92+
pub(crate) struct InvalidMonomorphizationInvalidBitmask<'a> {
93+
#[primary_span]
94+
pub span: Span,
95+
pub name: Symbol,
96+
pub ty: Ty<'a>,
97+
pub expected_int_bits: u64,
98+
pub expected_bytes: u64,
99+
}
100+
101+
#[derive(SessionDiagnostic)]
102+
#[diag(codegen_gcc::invalid_monomorphization_simd_shuffle, code = "E0511")]
103+
pub(crate) struct InvalidMonomorphizationSimdShuffle<'a> {
104+
#[primary_span]
105+
pub span: Span,
106+
pub name: Symbol,
107+
pub ty: Ty<'a>,
108+
}
109+
110+
#[derive(SessionDiagnostic)]
111+
#[diag(codegen_gcc::invalid_monomorphization_expected_simd, code = "E0511")]
112+
pub(crate) struct InvalidMonomorphizationExpectedSimd<'a> {
113+
#[primary_span]
114+
pub span: Span,
115+
pub name: Symbol,
116+
pub position: &'a str,
117+
pub found_ty: Ty<'a>,
118+
}
119+
120+
#[derive(SessionDiagnostic)]
121+
#[diag(codegen_gcc::invalid_monomorphization_mask_type, code = "E0511")]
122+
pub(crate) struct InvalidMonomorphizationMaskType<'a> {
123+
#[primary_span]
124+
pub span: Span,
125+
pub name: Symbol,
126+
pub ty: Ty<'a>,
127+
}
128+
129+
#[derive(SessionDiagnostic)]
130+
#[diag(codegen_gcc::invalid_monomorphization_return_length, code = "E0511")]
131+
pub(crate) struct InvalidMonomorphizationReturnLength<'a> {
132+
#[primary_span]
133+
pub span: Span,
134+
pub name: Symbol,
135+
pub in_len: u64,
136+
pub ret_ty: Ty<'a>,
137+
pub out_len: u64,
138+
}
139+
140+
#[derive(SessionDiagnostic)]
141+
#[diag(codegen_gcc::invalid_monomorphization_return_length_input_type, code = "E0511")]
142+
pub(crate) struct InvalidMonomorphizationReturnLengthInputType<'a> {
143+
#[primary_span]
144+
pub span: Span,
145+
pub name: Symbol,
146+
pub in_len: u64,
147+
pub in_ty: Ty<'a>,
148+
pub ret_ty: Ty<'a>,
149+
pub out_len: u64,
150+
}
151+
152+
#[derive(SessionDiagnostic)]
153+
#[diag(codegen_gcc::invalid_monomorphization_return_element, code = "E0511")]
154+
pub(crate) struct InvalidMonomorphizationReturnElement<'a> {
155+
#[primary_span]
156+
pub span: Span,
157+
pub name: Symbol,
158+
pub in_elem: Ty<'a>,
159+
pub in_ty: Ty<'a>,
160+
pub ret_ty: Ty<'a>,
161+
pub out_ty: Ty<'a>,
162+
}
163+
164+
#[derive(SessionDiagnostic)]
165+
#[diag(codegen_gcc::invalid_monomorphization_return_type, code = "E0511")]
166+
pub(crate) struct InvalidMonomorphizationReturnType<'a> {
167+
#[primary_span]
168+
pub span: Span,
169+
pub name: Symbol,
170+
pub in_elem: Ty<'a>,
171+
pub in_ty: Ty<'a>,
172+
pub ret_ty: Ty<'a>,
173+
}
174+
175+
#[derive(SessionDiagnostic)]
176+
#[diag(codegen_gcc::invalid_monomorphization_inserted_type, code = "E0511")]
177+
pub(crate) struct InvalidMonomorphizationInsertedType<'a> {
178+
#[primary_span]
179+
pub span: Span,
180+
pub name: Symbol,
181+
pub in_elem: Ty<'a>,
182+
pub in_ty: Ty<'a>,
183+
pub out_ty: Ty<'a>,
184+
}
185+
186+
#[derive(SessionDiagnostic)]
187+
#[diag(codegen_gcc::invalid_monomorphization_return_integer_type, code = "E0511")]
188+
pub(crate) struct InvalidMonomorphizationReturnIntegerType<'a> {
189+
#[primary_span]
190+
pub span: Span,
191+
pub name: Symbol,
192+
pub ret_ty: Ty<'a>,
193+
pub out_ty: Ty<'a>,
194+
}
195+
196+
#[derive(SessionDiagnostic)]
197+
#[diag(codegen_gcc::invalid_monomorphization_mismatched_lengths, code = "E0511")]
198+
pub(crate) struct InvalidMonomorphizationMismatchedLengths {
199+
#[primary_span]
200+
pub span: Span,
201+
pub name: Symbol,
202+
pub m_len: u64,
203+
pub v_len: u64,
204+
}
205+
206+
#[derive(SessionDiagnostic)]
207+
#[diag(codegen_gcc::invalid_monomorphization_unsupported_cast, code = "E0511")]
208+
pub(crate) struct InvalidMonomorphizationUnsupportedCast<'a> {
209+
#[primary_span]
210+
pub span: Span,
211+
pub name: Symbol,
212+
pub in_ty: Ty<'a>,
213+
pub in_elem: Ty<'a>,
214+
pub ret_ty: Ty<'a>,
215+
pub out_elem: Ty<'a>,
216+
}
217+
218+
#[derive(SessionDiagnostic)]
219+
#[diag(codegen_gcc::invalid_monomorphization_unsupported_operation, code = "E0511")]
220+
pub(crate) struct InvalidMonomorphizationUnsupportedOperation<'a> {
221+
#[primary_span]
222+
pub span: Span,
223+
pub name: Symbol,
224+
pub in_ty: Ty<'a>,
225+
pub in_elem: Ty<'a>,
226+
}
227+
32228
#[derive(SessionDiagnostic)]
33229
#[diag(codegen_gcc::layout_size_overflow)]
34230
pub(crate) struct LayoutSizeOverflow {

compiler/rustc_codegen_gcc/src/intrinsic/mod.rs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ mod simd;
44
use gccjit::{ComparisonOp, Function, RValue, ToRValue, Type, UnaryOp, FunctionType};
55
use rustc_codegen_ssa::MemFlags;
66
use rustc_codegen_ssa::base::wants_msvc_seh;
7-
use rustc_codegen_ssa::common::{IntPredicate, span_invalid_monomorphization_error};
7+
use rustc_codegen_ssa::common::IntPredicate;
88
use rustc_codegen_ssa::mir::operand::{OperandRef, OperandValue};
99
use rustc_codegen_ssa::mir::place::PlaceRef;
1010
use rustc_codegen_ssa::traits::{ArgAbiMethods, BaseTypeMethods, BuilderMethods, ConstMethods, IntrinsicCallMethods};
@@ -20,6 +20,7 @@ use crate::abi::GccType;
2020
use crate::builder::Builder;
2121
use crate::common::{SignType, TypeReflection};
2222
use crate::context::CodegenCx;
23+
use crate::errors::InvalidMonomorphizationBasicInteger;
2324
use crate::type_of::LayoutGccExt;
2425
use crate::intrinsic::simd::generic_simd_intrinsic;
2526

@@ -242,15 +243,7 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallMethods<'tcx> for Builder<'a, 'gcc, 'tcx> {
242243
_ => bug!(),
243244
},
244245
None => {
245-
span_invalid_monomorphization_error(
246-
tcx.sess,
247-
span,
248-
&format!(
249-
"invalid monomorphization of `{}` intrinsic: \
250-
expected basic integer type, found `{}`",
251-
name, ty
252-
),
253-
);
246+
tcx.sess.emit_err(InvalidMonomorphizationBasicInteger { span, name, ty });
254247
return;
255248
}
256249
}

0 commit comments

Comments
 (0)