From de345b68b2ff0ea589b2754a23bf252c66b0a645 Mon Sep 17 00:00:00 2001 From: Nicholas Wilson Date: Wed, 27 Sep 2023 11:38:45 +0800 Subject: [PATCH 1/2] [Dcompute] don't crash on `VarDelaration`s with no type --- gen/semantic-dcompute.cpp | 6 +++++- tests/semantic/dcompute_enum.d | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tests/semantic/dcompute_enum.d diff --git a/gen/semantic-dcompute.cpp b/gen/semantic-dcompute.cpp index 157656a02f5..97ada25b166 100644 --- a/gen/semantic-dcompute.cpp +++ b/gen/semantic-dcompute.cpp @@ -92,7 +92,11 @@ struct DComputeSemanticAnalyser : public StoppableVisitor { return; } - if (decl->type->ty == TY::Taarray) { + if (!decl->type) { + stop = true; + return; + } + else if (decl->type->ty == TY::Taarray) { decl->error("associative arrays not allowed in `@compute` code"); stop = true; } diff --git a/tests/semantic/dcompute_enum.d b/tests/semantic/dcompute_enum.d new file mode 100644 index 00000000000..7941de100cd --- /dev/null +++ b/tests/semantic/dcompute_enum.d @@ -0,0 +1,19 @@ +// RUN: %ldc -o- -mdcompute-targets=cuda-430 %s + +@compute(CompileFor.deviceOnly) module dcompute_enum; +pragma(LDC_no_moduleinfo); +import ldc.dcompute; +template isUnsigned(T) +{ + static if (!__traits(isUnsigned, T)) + enum isUnsigned = false; + else static if (is(T U == enum)) + enum isUnsigned = isUnsigned!U; + else + enum isUnsigned = __traits(isZeroInit, T) // Not char, wchar, or dchar. + && !is(immutable T == immutable bool) && !is(T == __vector); +} +@kernel void tst (uint* dst) +{ + dst[0] = isUnsigned!(typeof(dst[0])); +} From 14aba030c24cd6445422a2ce00e9f4a54417841e Mon Sep 17 00:00:00 2001 From: Nicholas Wilson Date: Wed, 27 Sep 2023 12:33:48 +0800 Subject: [PATCH 2/2] Update dcompute_enum.d --- tests/semantic/dcompute_enum.d | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/semantic/dcompute_enum.d b/tests/semantic/dcompute_enum.d index 7941de100cd..eb1401c7eaf 100644 --- a/tests/semantic/dcompute_enum.d +++ b/tests/semantic/dcompute_enum.d @@ -1,5 +1,5 @@ // RUN: %ldc -o- -mdcompute-targets=cuda-430 %s - +// REQUIRES: target_NVPTX @compute(CompileFor.deviceOnly) module dcompute_enum; pragma(LDC_no_moduleinfo); import ldc.dcompute;