summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-compiler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-compiler.cpp')
-rw-r--r--source/slang/slang-compiler.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/source/slang/slang-compiler.cpp b/source/slang/slang-compiler.cpp
index 2ab376181..3cfb845d7 100644
--- a/source/slang/slang-compiler.cpp
+++ b/source/slang/slang-compiler.cpp
@@ -2382,6 +2382,37 @@ SlangResult dissassembleDXILUsingDXC(
BackEndCompileRequest* compileRequest,
EndToEndCompileRequest* endToEndReq)
{
+ // If we are about to generate output code, but we still
+ // have unspecialized generic/existential parameters,
+ // then there is a problem.
+ //
+ auto program = compileRequest->getProgram();
+ auto specializationParamCount = program->getSpecializationParamCount();
+ if( specializationParamCount != 0 )
+ {
+ auto sink = compileRequest->getSink();
+
+ for( Index ii = 0; ii < specializationParamCount; ++ii )
+ {
+ auto specializationParam = program->getSpecializationParam(ii);
+ if( auto decl = as<Decl>(specializationParam.object) )
+ {
+ sink->diagnose(specializationParam.loc, Diagnostics::specializationParameterOfNameNotSpecialized, decl);
+ }
+ else if( auto type = as<Type>(specializationParam.object) )
+ {
+ sink->diagnose(specializationParam.loc, Diagnostics::specializationParameterOfNameNotSpecialized, type);
+ }
+ else
+ {
+ sink->diagnose(specializationParam.loc, Diagnostics::specializationParameterNotSpecialized);
+ }
+ }
+
+ return;
+ }
+
+
// Go through the code-generation targets that the user
// has specified, and generate code for each of them.
//