summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Kwak <82421531+jkwak-work@users.noreply.github.com>2024-06-06 11:21:23 -0700
committerGitHub <noreply@github.com>2024-06-06 11:21:23 -0700
commitfa664d1419659e3c56db823c60f2b9cc088455cd (patch)
tree26cbe8f09e0d30317889b7f9a2498670cf93d9e6
parentf1490526be567059a8e4b98aa41eef698065aee1 (diff)
Fix build warnings and treat warnings as error on CI (#4276)
* Fix build warnings and treat warnings as error
-rw-r--r--.github/workflows/ci.yml2
-rw-r--r--source/slang/CMakeLists.txt7
-rw-r--r--source/slang/slang-check-impl.h2
-rw-r--r--source/slang/slang-emit-spirv.cpp15
-rw-r--r--source/slang/slang-ir-bit-field-accessors.cpp2
-rw-r--r--source/slang/slang-ir-legalize-types.cpp4
-rw-r--r--source/slang/slang-ir-link.cpp1
-rw-r--r--source/slang/slang-ir-spirv-legalize.cpp4
-rw-r--r--source/slang/slang-ir-uniformity.cpp4
-rw-r--r--source/slang/slang-options.cpp32
-rw-r--r--tools/slang-capability-generator/capability-generator-main.cpp2
11 files changed, 32 insertions, 43 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a60a047f1..2a64d3972 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -18,7 +18,7 @@ jobs:
compiler: gcc
platform: x64
config: debug
- warnings-as-errors: false
+ warnings-as-errors: true
test-category: smoke
full-gpu-tests: false
runs-on: ubuntu-20.04
diff --git a/source/slang/CMakeLists.txt b/source/slang/CMakeLists.txt
index 7b51dee2d..d708bde1e 100644
--- a/source/slang/CMakeLists.txt
+++ b/source/slang/CMakeLists.txt
@@ -271,9 +271,10 @@ slang_add_target(
PUBLIC_HEADERS ${slang_SOURCE_DIR}/slang*.h
)
-if(MSVC)
- # Treat warnings as error
- target_compile_options(slang PRIVATE /WX)
+if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+ # a warning is disabled for a memset boundary check.
+ # everything looked fine and it is unclear why the checking fails
+ target_compile_options(slang PRIVATE -Wno-error=stringop-overflow)
endif()
if(SLANG_EMBED_STDLIB_SOURCE)
diff --git a/source/slang/slang-check-impl.h b/source/slang/slang-check-impl.h
index 1bb450a6a..2554d0d85 100644
--- a/source/slang/slang-check-impl.h
+++ b/source/slang/slang-check-impl.h
@@ -552,7 +552,7 @@ namespace Slang
/// Cached information about how to convert between two types.
struct ImplicitCastMethod
{
- OverloadCandidate conversionFuncOverloadCandidate;
+ OverloadCandidate conversionFuncOverloadCandidate = OverloadCandidate();
ConversionCost cost = kConversionCost_Impossible;
bool isAmbiguous = false;
};
diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp
index d3d0b16c5..08f32fa16 100644
--- a/source/slang/slang-emit-spirv.cpp
+++ b/source/slang/slang-emit-spirv.cpp
@@ -6240,21 +6240,6 @@ struct SPIRVEmitContext
}
}
- template<typename T1, typename T2, typename T3>
- SpvInst* emitOpExecutionModeLocalSizeId(
- IRInst* inst,
- SpvWord entryPoint,
- const T1& xSize,
- const T2& ySize,
- const T3& zSize
- )
- {
- static_assert(isSingular<T1>);
- static_assert(isSingular<T2>);
- static_assert(isSingular<T3>);
- requireSPIRVExecutionMode(inst, entryPoint, SpvExecutionModeLocalSizeId, xSize, ySize, zSize);
- }
-
SPIRVEmitContext(IRModule* module, TargetProgram* program, DiagnosticSink* sink)
: SPIRVEmitSharedContext(module, program, sink)
, m_irModule(module)
diff --git a/source/slang/slang-ir-bit-field-accessors.cpp b/source/slang/slang-ir-bit-field-accessors.cpp
index 21b663bf8..4d9a73ce5 100644
--- a/source/slang/slang-ir-bit-field-accessors.cpp
+++ b/source/slang/slang-ir-bit-field-accessors.cpp
@@ -79,7 +79,7 @@ static void synthesizeBitFieldGetter(IRFunc* func, IRBitFieldAccessorDecoration*
static IRIntegerValue setLowBits(IRIntegerValue bits)
{
SLANG_ASSERT(bits >= 0 && bits <= 64);
- return ~(bits >= 64 ? 0 : (~0 << bits));
+ return ~(bits >= 64 ? 0 : (~0ULL << bits));
}
static void synthesizeBitFieldSetter(IRFunc* func, IRBitFieldAccessorDecoration* dec)
diff --git a/source/slang/slang-ir-legalize-types.cpp b/source/slang/slang-ir-legalize-types.cpp
index 6bde87765..503b528b2 100644
--- a/source/slang/slang-ir-legalize-types.cpp
+++ b/source/slang/slang-ir-legalize-types.cpp
@@ -2112,8 +2112,8 @@ static LegalVal legalizeLocalVar(
context->replacedInstructions.add(irLocalVar);
return newVal;
}
- break;
}
+ UNREACHABLE_RETURN(LegalVal());
}
static LegalVal legalizeParam(
@@ -3539,6 +3539,7 @@ static LegalVal legalizeGlobalVar(
}
break;
}
+ UNREACHABLE_RETURN(LegalVal());
}
static LegalVal legalizeGlobalParam(
@@ -3588,6 +3589,7 @@ static LegalVal legalizeGlobalParam(
}
break;
}
+ UNREACHABLE_RETURN(LegalVal());
}
static constexpr int kHasBeenAddedOrProcessedScratchBitIndex = 0;
diff --git a/source/slang/slang-ir-link.cpp b/source/slang/slang-ir-link.cpp
index 26d96690f..eb660c8a7 100644
--- a/source/slang/slang-ir-link.cpp
+++ b/source/slang/slang-ir-link.cpp
@@ -1509,6 +1509,7 @@ static bool doesTargetAllowUnresolvedFuncSymbol(TargetRequest* req)
case CodeGenTarget::SPIRV:
if (req->getOptionSet().getBoolOption(CompilerOptionName::IncompleteLibrary))
return true;
+ return false;
default:
return false;
}
diff --git a/source/slang/slang-ir-spirv-legalize.cpp b/source/slang/slang-ir-spirv-legalize.cpp
index 0965377c8..fb002122a 100644
--- a/source/slang/slang-ir-spirv-legalize.cpp
+++ b/source/slang/slang-ir-spirv-legalize.cpp
@@ -1844,8 +1844,8 @@ struct SPIRVLegalizationContext : public SourceEmitterBase
if (oldValueType != newValueType || !ptrType->hasAddressSpace())
{
IRBuilder builder(m_module);
- return builder.getPtrType(ptrType->getOp(), newValueType,
- ptrType->hasAddressSpace() ? ptrType->getAddressSpace() : SpvStorageClassPhysicalStorageBuffer);
+ IRIntegerValue addressSpace = (ptrType->hasAddressSpace() ? ptrType->getAddressSpace() : IRIntegerValue(SpvStorageClassPhysicalStorageBuffer));
+ return builder.getPtrType(ptrType->getOp(), newValueType, addressSpace);
}
return ptrType;
}
diff --git a/source/slang/slang-ir-uniformity.cpp b/source/slang/slang-ir-uniformity.cpp
index 6f81e85f0..44ac6cb34 100644
--- a/source/slang/slang-ir-uniformity.cpp
+++ b/source/slang/slang-ir-uniformity.cpp
@@ -388,7 +388,7 @@ namespace Slang
addToWorkList(callInst);
for (UInt argi = 0; argi < callInst->getArgCount(); argi++)
{
- if (auto ptrType = as<IRPtrTypeBase>(callInst->getArg(argi)->getDataType()))
+ if (as<IRPtrTypeBase>(callInst->getArg(argi)->getDataType()))
{
addToWorkList(callInst->getArg(argi));
// Conservatively treat the entire composite at root addr as non-uniform.
@@ -424,7 +424,7 @@ namespace Slang
nonUniformInsts.add(code);
}
}
- if (auto entryPointDecor = globalInst->findDecoration<IREntryPointDecoration>())
+ if (globalInst->findDecoration<IREntryPointDecoration>())
{
auto func = as<IRFunc>(globalInst);
if (!func)
diff --git a/source/slang/slang-options.cpp b/source/slang/slang-options.cpp
index a51ea01fe..7b4b02f68 100644
--- a/source/slang/slang-options.cpp
+++ b/source/slang/slang-options.cpp
@@ -2527,24 +2527,24 @@ SlangResult OptionsParser::_parse(
// target that handles that format.
Dictionary<CodeGenTarget, int> mapFormatToTargetIndex;
- // If there was no explicit `-target` specified, then we will look
- // at the `-o` options to see what we can infer.
- //
- if (m_rawTargets.getCount() == 0)
- {
- // If there are no targets and no outputs
- if (m_rawOutputs.getCount() == 0)
- {
- m_requestImpl->m_emitIr = true;
- }
- else
+ // If there was no explicit `-target` specified, then we will look
+ // at the `-o` options to see what we can infer.
+ //
+ if (m_rawTargets.getCount() == 0)
{
- for (auto& rawOutput : m_rawOutputs)
+ // If there are no targets and no outputs
+ if (m_rawOutputs.getCount() == 0)
{
- // Some outputs don't imply a target format, and we shouldn't use those for inference.
- auto impliedFormat = rawOutput.impliedFormat;
- if (impliedFormat == CodeGenTarget::Unknown)
- continue;
+ m_requestImpl->m_emitIr = true;
+ }
+ else
+ {
+ for (auto& rawOutput : m_rawOutputs)
+ {
+ // Some outputs don't imply a target format, and we shouldn't use those for inference.
+ auto impliedFormat = rawOutput.impliedFormat;
+ if (impliedFormat == CodeGenTarget::Unknown)
+ continue;
int targetIndex = 0;
if (!mapFormatToTargetIndex.tryGetValue(impliedFormat, targetIndex))
diff --git a/tools/slang-capability-generator/capability-generator-main.cpp b/tools/slang-capability-generator/capability-generator-main.cpp
index a8e3e397d..6a299d91f 100644
--- a/tools/slang-capability-generator/capability-generator-main.cpp
+++ b/tools/slang-capability-generator/capability-generator-main.cpp
@@ -667,7 +667,7 @@ void outputUIntSetAsBufferValues(const String& nameOfBuffer, StringBuilder& resu
for (Index i = 0; i < set.getBuffer().getCount(); i++)
{
- resultBuilder << " generatedSet.addRawElement(UIntSet::Element(" << set.getBuffer()[i] << "), " << i << ");\n";
+ resultBuilder << " generatedSet.addRawElement(UIntSet::Element(" << set.getBuffer()[i] << "UL), " << i << ");\n";
}
resultBuilder << " return generatedSet;\n";
resultBuilder << "}\n";