diff options
| author | Jay Kwak <82421531+jkwak-work@users.noreply.github.com> | 2024-06-06 11:21:23 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-06 11:21:23 -0700 |
| commit | fa664d1419659e3c56db823c60f2b9cc088455cd (patch) | |
| tree | 26cbe8f09e0d30317889b7f9a2498670cf93d9e6 | |
| parent | f1490526be567059a8e4b98aa41eef698065aee1 (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.yml | 2 | ||||
| -rw-r--r-- | source/slang/CMakeLists.txt | 7 | ||||
| -rw-r--r-- | source/slang/slang-check-impl.h | 2 | ||||
| -rw-r--r-- | source/slang/slang-emit-spirv.cpp | 15 | ||||
| -rw-r--r-- | source/slang/slang-ir-bit-field-accessors.cpp | 2 | ||||
| -rw-r--r-- | source/slang/slang-ir-legalize-types.cpp | 4 | ||||
| -rw-r--r-- | source/slang/slang-ir-link.cpp | 1 | ||||
| -rw-r--r-- | source/slang/slang-ir-spirv-legalize.cpp | 4 | ||||
| -rw-r--r-- | source/slang/slang-ir-uniformity.cpp | 4 | ||||
| -rw-r--r-- | source/slang/slang-options.cpp | 32 | ||||
| -rw-r--r-- | tools/slang-capability-generator/capability-generator-main.cpp | 2 |
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"; |
