From 91ac60fc525c78f158541dc412edf7fd9804a00c Mon Sep 17 00:00:00 2001 From: Sebastian Neubauer Date: Fri, 8 May 2020 13:52:18 +0200 Subject: [PATCH] Explicitly mark some enums as unsigned This allows casting from and to any unsigned value, previously this was undefined behavior. This fixes ubsan complaining in `TParseContext::layoutQualifierCheck`, where `~EShLangComputeMask` is used. --- glslang/MachineIndependent/Versions.h | 2 +- glslang/Public/ShaderLang.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 8667411..c128d46 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -52,7 +52,7 @@ // Don't maintain an ordinal set of enums (0,1,2,3...) to avoid all possible // defects from mixing the two different forms. // -typedef enum { +typedef enum : unsigned { EBadProfile = 0, ENoProfile = (1 << 0), // only for desktop, before profiles showed up ECoreProfile = (1 << 1), diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index acb2a07..ad98494 100755 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -109,7 +109,7 @@ typedef enum { LAST_ELEMENT_MARKER(EShLangCount), } EShLanguage; // would be better as stage, but this is ancient now -typedef enum { +typedef enum : unsigned { EShLangVertexMask = (1 << EShLangVertex), EShLangTessControlMask = (1 << EShLangTessControl), EShLangTessEvaluationMask = (1 << EShLangTessEvaluation), @@ -240,7 +240,7 @@ typedef enum { // // Message choices for what errors and warnings are given. // -enum EShMessages { +enum EShMessages : unsigned { EShMsgDefault = 0, // default is to give all required errors and extra warnings EShMsgRelaxedErrors = (1 << 0), // be liberal in accepting input EShMsgSuppressWarnings = (1 << 1), // suppress all warnings, except those required by the specification -- 2.7.4