Skip to content

Commit c449dd0

Browse files
WIP: FIXUP: use lowered exprs for span lookup in select lowering diag.
TODO: …but it doesn't work!
1 parent b5fc75d commit c449dd0

File tree

2 files changed

+20
-43
lines changed

2 files changed

+20
-43
lines changed

naga/src/front/wgsl/lower/mod.rs

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2484,11 +2484,9 @@ impl<'source, 'temp> Lowerer<'source, 'temp> {
24842484
"select" => {
24852485
let mut args = ctx.prepare_args(arguments, 3, span);
24862486

2487-
let reject_orig = args.next()?;
2488-
let accept_orig = args.next()?;
24892487
let mut values = [
2490-
self.expression_for_abstract(reject_orig, ctx)?,
2491-
self.expression_for_abstract(accept_orig, ctx)?,
2488+
self.expression_for_abstract(args.next()?, ctx)?,
2489+
self.expression_for_abstract(args.next()?, ctx)?,
24922490
];
24932491
let condition = self.expression(args.next()?, ctx)?;
24942492

@@ -2500,18 +2498,15 @@ impl<'source, 'temp> Lowerer<'source, 'temp> {
25002498
) -> &'a proc::TypeResolution {
25012499
&ctx.typifier()[expr]
25022500
}
2503-
let diag_deets =
2504-
|ctx: &ExpressionContext<'_, '_, '_>,
2505-
ty_res: &proc::TypeResolution,
2506-
orig_expr| {
2507-
(
2508-
ctx.ast_expressions.get_span(orig_expr),
2509-
format!("`{}`", ctx.as_diagnostic_display(ty_res)),
2510-
)
2511-
};
2512-
for (&value, orig_value) in
2513-
values.iter().zip([reject_orig, accept_orig])
2514-
{
2501+
let diag_deets = |ctx: &ExpressionContext<'_, '_, '_>,
2502+
ty_res: &proc::TypeResolution,
2503+
expr| {
2504+
(
2505+
ctx.get_expression_span(expr),
2506+
format!("`{}`", ctx.as_diagnostic_display(ty_res)),
2507+
)
2508+
};
2509+
for value in values {
25152510
ctx.grow_types(value)?;
25162511

25172512
let value_ty_res = expr_ty_res(ctx, value);
@@ -2520,8 +2515,7 @@ impl<'source, 'temp> Lowerer<'source, 'temp> {
25202515
.vector_size_and_scalar()
25212516
.is_none()
25222517
{
2523-
let (arg_span, arg_type) =
2524-
diag_deets(ctx, value_ty_res, orig_value);
2518+
let (arg_span, arg_type) = diag_deets(ctx, value_ty_res, value);
25252519
return Err(Box::new(Error::SelectUnexpectedArgumentType {
25262520
arg_span,
25272521
arg_type,
@@ -2533,12 +2527,10 @@ impl<'source, 'temp> Lowerer<'source, 'temp> {
25332527
.map_err(|_idx| {
25342528
let [reject, accept] = values;
25352529
let [(reject_span, reject_type), (accept_span, accept_type)] =
2536-
[(reject_orig, reject), (accept_orig, accept)].map(
2537-
|(orig_expr, expr)| {
2538-
let ty_res = expr_ty_res(ctx, expr);
2539-
diag_deets(ctx, ty_res, orig_expr)
2540-
},
2541-
);
2530+
[reject, accept].map(|expr| {
2531+
let ty_res = expr_ty_res(ctx, expr);
2532+
diag_deets(ctx, ty_res, expr)
2533+
});
25422534
Error::SelectRejectAndAcceptHaveNoCommonType {
25432535
reject_span,
25442536
reject_type,

naga/tests/naga/wgsl_errors.rs

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2055,12 +2055,7 @@ fn select() {
20552055
",
20562056
"\
20572057
error: unexpected argument type for `select` call
2058-
┌─ wgsl:5:28
2059-
2060-
5 │ let p = select(&x, &y, which);
2061-
│ ^^ this value of type `ptr<function, i32>`
2062-
2063-
= note: expected a scalar or a `vecN` of scalars
2058+
= note: expected a scalar or a `vecN` of scalars
20642059
20652060
",
20662061
),
@@ -2075,12 +2070,7 @@ error: unexpected argument type for `select` call
20752070
",
20762071
"\
20772072
error: unexpected argument type for `select` call
2078-
┌─ wgsl:5:28
2079-
2080-
5 │ let s = select(x, y, which);
2081-
│ ^ this value of type `array<i32, 4>`
2082-
2083-
= note: expected a scalar or a `vecN` of scalars
2073+
= note: expected a scalar or a `vecN` of scalars
20842074
20852075
",
20862076
),
@@ -2096,14 +2086,9 @@ error: unexpected argument type for `select` call
20962086
",
20972087
"\
20982088
error: unexpected argument type for `select` call
2099-
┌─ wgsl:6:28
2100-
2101-
6 │ let s = select(x, y, which);
2102-
│ ^ this value of type `S`
2103-
2104-
= note: expected a scalar or a `vecN` of scalars
2089+
= note: expected a scalar or a `vecN` of scalars
21052090
2106-
"
2091+
",
21072092
),
21082093
(
21092094
"

0 commit comments

Comments
 (0)