resolver: Fix for-loop conditional validation
It wasn't unwrapping the reference before type checking Change-Id: I4bfc038c468c32c2a164bbcbef0a97a3e385d5ba Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/60210 Auto-Submit: Ben Clayton <bclayton@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: James Price <jrprice@google.com> Commit-Queue: Ben Clayton <bclayton@google.com>
This commit is contained in:
parent
f5490c732d
commit
ada4864ffe
|
@ -2155,7 +2155,7 @@ bool Resolver::ForLoopStatement(ast::ForLoopStatement* stmt) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!TypeOf(condition)->Is<sem::Bool>()) {
|
if (!TypeOf(condition)->UnwrapRef()->Is<sem::Bool>()) {
|
||||||
AddError(
|
AddError(
|
||||||
"for-loop condition must be bool, got " + TypeNameOf(condition),
|
"for-loop condition must be bool, got " + TypeNameOf(condition),
|
||||||
condition->source());
|
condition->source());
|
||||||
|
|
|
@ -768,6 +768,16 @@ TEST_F(ResolverTest, Stmt_Loop_ContinueInContinuing_Indirect) {
|
||||||
EXPECT_TRUE(r()->Resolve()) << r()->error();
|
EXPECT_TRUE(r()->Resolve()) << r()->error();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(ResolverTest, Stmt_ForLoop_CondIsBoolRef) {
|
||||||
|
// var cond : bool = true;
|
||||||
|
// for (; cond; ) {
|
||||||
|
// }
|
||||||
|
|
||||||
|
auto* cond = Var("cond", ty.bool_(), Expr(true));
|
||||||
|
WrapInFunction(Decl(cond), For(nullptr, "cond", nullptr, Block()));
|
||||||
|
EXPECT_TRUE(r()->Resolve()) << r()->error();
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(ResolverTest, Stmt_ForLoop_CondIsNotBool) {
|
TEST_F(ResolverTest, Stmt_ForLoop_CondIsNotBool) {
|
||||||
// for (; 1.0f; ) {
|
// for (; 1.0f; ) {
|
||||||
// }
|
// }
|
||||||
|
|
Loading…
Reference in New Issue