Remove unnecessary semi-colons and add warning about them

These are causing integration issues with Chromium down stream since
it is more strict about these.
diff --git a/BUILD.gn b/BUILD.gn
index 55f21ad..b2878af 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -168,6 +168,7 @@
       "-Wno-unused-variable",
       "-Wno-missing-field-initializers",
       "-Wno-newline-eof",
+      "-Wextra-semi",
     ]
   }
   if (is_win && !is_clang) {
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c2adeb0..60ccd02 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -90,12 +90,12 @@
 
 if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
     add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs
-                        -Wunused-parameter -Wunused-value  -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable -fno-exceptions)
+                        -Wunused-parameter -Wunused-value -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable -fno-exceptions -Wextra-semi)
     add_compile_options(-Wno-reorder)  # disable this from -Wall, since it happens all over.
     add_compile_options(-fno-rtti)
 elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
     add_compile_options(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs
-                        -Wunused-parameter -Wunused-value  -Wunused-variable)
+                        -Wunused-parameter -Wunused-value -Wunused-variable -Wextra-semi)
     add_compile_options(-Wno-reorder)  # disable this from -Wall, since it happens all over.
     add_compile_options(-fno-rtti)
 elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "MSVC")
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 2d50074..f4e0fdb 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -100,11 +100,11 @@
     spv::Decoration precision;
 
 #ifdef GLSLANG_WEB
-        void addNoContraction(spv::Builder&, spv::Id) const { };
-        void addNonUniform(spv::Builder&, spv::Id) const { };
+        void addNoContraction(spv::Builder&, spv::Id) const { }
+        void addNonUniform(spv::Builder&, spv::Id) const { }
 #else
-        void addNoContraction(spv::Builder& builder, spv::Id t) { builder.addDecoration(t, noContraction); };
-        void addNonUniform(spv::Builder& builder, spv::Id t)  { builder.addDecoration(t, nonUniform); };
+        void addNoContraction(spv::Builder& builder, spv::Id t) { builder.addDecoration(t, noContraction); }
+        void addNonUniform(spv::Builder& builder, spv::Id t)  { builder.addDecoration(t, nonUniform); }
     protected:
         spv::Decoration noContraction;
         spv::Decoration nonUniform;
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index 59ead22..ef933b4 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -135,8 +135,8 @@
     bool isYuv()         const { return yuv; }
 #endif
     void setCombined(bool c) { combined = c; }
-    void setBasicType(TBasicType t) { type = t; };
-    TBasicType getBasicType()  const { return type; };
+    void setBasicType(TBasicType t) { type = t; }
+    TBasicType getBasicType()  const { return type; }
     bool isShadow()      const { return shadow; }
     bool isArrayed()     const { return arrayed; }
 
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index 5cee05e..39363f1 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -283,7 +283,7 @@
                   const TString* entryPoint = nullptr);
     virtual ~TParseContext();
 
-    bool obeyPrecisionQualifiers() const { return precisionManager.respectingPrecisionQualifiers(); };
+    bool obeyPrecisionQualifiers() const { return precisionManager.respectingPrecisionQualifiers(); }
     void setPrecisionDefaults();
 
     void setLimits(const TBuiltInResource&) override;
diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h
index 01afc5a..684e88d 100644
--- a/glslang/MachineIndependent/iomapper.h
+++ b/glslang/MachineIndependent/iomapper.h
@@ -114,7 +114,7 @@
     bool doAutoLocationMapping() const;
     TSlotSet::iterator findSlot(int set, int slot);
     bool checkEmpty(int set, int slot);
-    bool validateInOut(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; };
+    bool validateInOut(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; }
     int reserveSlot(int set, int slot, int size = 1);
     int getFreeSlot(int set, int base, int size = 1);
     int resolveSet(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
@@ -125,7 +125,7 @@
     void addStage(EShLanguage stage) override {
         if (stage < EShLangCount)
             stageMask[stage] = true;
-    };
+    }
     uint32_t computeTypeLocationSize(const TType& type, EShLanguage stage);
 
     TSlotSetMap slots;
@@ -191,7 +191,7 @@
     typedef std::map<TString, int> TVarSlotMap;  // <resourceName, location/binding>
     typedef std::map<int, TVarSlotMap> TSlotMap; // <resourceKey, TVarSlotMap>
     TDefaultGlslIoResolver(const TIntermediate& intermediate);
-    bool validateBinding(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; };
+    bool validateBinding(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; }
     TResourceType getResourceType(const glslang::TType& type) override;
     int resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) override;
     int resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
@@ -209,7 +209,7 @@
     int buildStorageKey(EShLanguage stage, TStorageQualifier type) {
         assert(static_cast<uint32_t>(stage) <= 0x0000ffff && static_cast<uint32_t>(type) <= 0x0000ffff);
         return (stage << 16) | type;
-    };
+    }
 
 protected:
     // Use for mark pre stage, to get more interface symbol information.
@@ -242,7 +242,7 @@
         const_cast<TString&>(first) = _Right.first;
         second = _Right.second;
         return (*this);
-    };
+    }
 };
 typedef std::vector<TVarLivePair> TVarLiveVector;
 
@@ -253,7 +253,7 @@
     virtual ~TIoMapper() {}
     // grow the reflection stage by stage
     bool virtual addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*);
-    bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; };
+    bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; }
 };
 
 // I/O mapper for OpenGL
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index 9782475..4cc6c2f 100755
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -487,7 +487,7 @@
         environment.target.version = version;
     }
 
-    void getStrings(const char* const* &s, int& n) { s = strings; n = numStrings; };
+    void getStrings(const char* const* &s, int& n) { s = strings; n = numStrings; }
 
 #ifdef ENABLE_HLSL
     void setEnvTargetHlslFunctionality1() { environment.target.hlslFunctionality1 = true; }
@@ -775,7 +775,7 @@
     TProgram();
     virtual ~TProgram();
     void addShader(TShader* shader) { stages[shader->stage].push_back(shader); }
-    std::list<TShader*>& getShaders(EShLanguage stage) { return stages[stage]; };
+    std::list<TShader*>& getShaders(EShLanguage stage) { return stages[stage]; }
     // Link Validation interface
     bool link(EShMessages);
     const char* getInfoLog();