Merge pull request #1 from KhronosGroup/master

sync to KhronosGroup/glslang
diff --git a/BUILD.bazel b/BUILD.bazel
index d70bc7f..5930608 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -85,7 +85,7 @@
         "SPIRV/GLSL.ext.KHR.h",
         "SPIRV/GLSL.ext.NV.h",
         "SPIRV/GLSL.std.450.h",
-        "SPIRV/NonSemanticDebugPrintf.h",

+        "SPIRV/NonSemanticDebugPrintf.h",
         "SPIRV/spirv.hpp",
     ],
     outs = [
@@ -94,7 +94,7 @@
         "include/SPIRV/GLSL.ext.KHR.h",
         "include/SPIRV/GLSL.ext.NV.h",
         "include/SPIRV/GLSL.std.450.h",
-        "include/SPIRV/NonSemanticDebugPrintf.h",

+        "include/SPIRV/NonSemanticDebugPrintf.h",
         "include/SPIRV/spirv.hpp",
     ],
     cmd = "mkdir -p $(@D)/include/SPIRV && cp $(SRCS) $(@D)/include/SPIRV/",
diff --git a/BUILD.gn b/BUILD.gn
index 87c28e9..49b4b0a 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -70,7 +70,7 @@
     "SPIRV/InReadableOrder.cpp",
     "SPIRV/Logger.cpp",
     "SPIRV/Logger.h",
-    "SPIRV/NonSemanticDebugPrintf.h",

+    "SPIRV/NonSemanticDebugPrintf.h",
     "SPIRV/SPVRemapper.cpp",
     "SPIRV/SPVRemapper.h",
     "SPIRV/SpvBuilder.cpp",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a80cd5f..b4b0fac 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -142,7 +142,10 @@
         add_compile_options(/Os /GR-)
     else()
         add_compile_options(-Os -fno-exceptions)
-        add_link_options(-Os)
+        if(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
+            add_compile_options(-Wno-unused-parameter)
+            add_compile_options(-Wno-unused-variable -Wno-unused-const-variable)
+        endif()
     endif()
 endif(ENABLE_GLSLANG_JS)
 
@@ -150,7 +153,7 @@
 if(${CMAKE_VERSION} VERSION_LESS 3.1)
     # CMake versions before 3.1 do not understand CMAKE_CXX_STANDARD
     # remove this block once CMake >=3.1 has fixated in the ecosystem
-    add_compile_options(-std=c++11)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 else()
     set(CMAKE_CXX_STANDARD 11)
     set(CMAKE_CXX_STANDARD_REQUIRED ON)
diff --git a/README.md b/README.md
index 5188ab4..ff844c0 100755
--- a/README.md
+++ b/README.md
@@ -209,27 +209,29 @@
 the web grammar subset (see more about the web subset in the next section).
 
 ### Building to WASM for the Web and Node
+### Building a standalone JS/WASM library for the Web and Node
 
 Use the steps in [Build Steps](#build-steps), with the following notes/exceptions:
-* For building the web subset of core glslang:
+* `emsdk` needs to be present in your executable search path, *PATH* for
+  Bash-like environments:
+  + [Instructions located here](https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install)
+* Wrap cmake call: `emcmake cmake`
+* Set `-DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF`.
+* Set `-DENABLE_HLSL=OFF` if HLSL is not needed.
+* For a standalone JS/WASM library, turn on `-DENABLE_GLSLANG_JS=ON`.
+* For building a minimum-size web subset of core glslang:
+  + turn on `-DENABLE_GLSLANG_WEBMIN=ON` (disables HLSL)
   + execute `updateGrammar web` from the glslang subdirectory
     (or if using your own scripts, `m4` needs a `-DGLSLANG_WEB` argument)
-  + set `-DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF`
-  + turn on `-DENABLE_GLSLANG_JS=ON`
-  + optionally, for a minimum-size binary, turn on `-DENABLE_GLSLANG_WEBMIN=ON`
-  + optionally, for GLSL compilation error messages, turn on `-DENABLE_GLSLANG_WEB_DEVEL=ON`
-* `emsdk` needs to be present in your executable search path, *PATH* for
-  Bash-like environments
-  + [Instructions located
-    here](https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install)
-* Wrap cmake call: `emcmake cmake`
+  + optionally, for GLSL compilation error messages, turn on
+    `-DENABLE_GLSLANG_WEBMIN_DEVEL=ON`
 * To get a fully minimized build, make sure to use `brotli` to compress the .js
   and .wasm files
 
 Example:
 
 ```sh
-emcmake cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_WEB=ON \
+emcmake cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_JS=ON \
     -DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF ..
 ```
 
diff --git a/SPIRV/Logger.cpp b/SPIRV/Logger.cpp
index 7ea0c63..cdc8469 100644
--- a/SPIRV/Logger.cpp
+++ b/SPIRV/Logger.cpp
@@ -69,4 +69,4 @@
 
 } // end spv namespace
 
-#endif
\ No newline at end of file
+#endif
diff --git a/Test/foo.h b/Test/foo.h
index 7f79340..236277c 100644
--- a/Test/foo.h
+++ b/Test/foo.h
@@ -1 +1 @@
-#error should not be included
\ No newline at end of file
+#error should not be included
diff --git a/Test/inc2/foo.h b/Test/inc2/foo.h
index fd09e80..ea1e5ba 100644
--- a/Test/inc2/foo.h
+++ b/Test/inc2/foo.h
@@ -1 +1 @@
-float4 i6;
\ No newline at end of file
+float4 i6;
diff --git a/_config.yml b/_config.yml
index c50ff38..e8b995b 100644
--- a/_config.yml
+++ b/_config.yml
@@ -1 +1 @@
-theme: jekyll-theme-merlot
\ No newline at end of file
+theme: jekyll-theme-merlot
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index ebc6cd3..b032f91 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -946,7 +946,7 @@
     bool hasAttachment() const { return false; }
     TLayoutFormat getFormat() const { return ElfNone; }
     bool isPushConstant() const { return false; }
-    bool isShaderRecordNV() const { return false; }
+    bool isShaderRecord() const { return false; }
     bool hasBufferReference() const { return false; }
     bool hasBufferReferenceAlign() const { return false; }
     bool isNonUniform() const { return false; }
diff --git a/glslang/Include/glslang_c_shader_types.h b/glslang/Include/glslang_c_shader_types.h
index 5755281..769f4c4 100644
--- a/glslang/Include/glslang_c_shader_types.h
+++ b/glslang/Include/glslang_c_shader_types.h
@@ -1,4 +1,4 @@
-/**
+/**
     This code is based on the glslang_c_interface implementation by Viktor Latypov
 **/
 
diff --git a/glslang/Include/revision.template b/glslang/Include/revision.template
index 6c13630..4a16bee 100644
--- a/glslang/Include/revision.template
+++ b/glslang/Include/revision.template
@@ -1,13 +1,13 @@
-// The file revision.h should be updated to the latest version, somehow, on

-// check-in, if glslang has changed.

-//

-// revision.template is the source for revision.h when using SubWCRev as the

-// method of updating revision.h.  You don't have to do it this way, the

-// requirement is only that revision.h gets updated.

-//

-// revision.h is under source control so that not all consumers of glslang

-// source have to figure out how to create revision.h just to get a build

-// going.  However, if it is not updated, it can be a version behind.

-

-#define GLSLANG_REVISION "$WCREV$"

-#define GLSLANG_DATE     "$WCDATE$"

+// The file revision.h should be updated to the latest version, somehow, on
+// check-in, if glslang has changed.
+//
+// revision.template is the source for revision.h when using SubWCRev as the
+// method of updating revision.h.  You don't have to do it this way, the
+// requirement is only that revision.h gets updated.
+//
+// revision.h is under source control so that not all consumers of glslang
+// source have to figure out how to create revision.h just to get a build
+// going.  However, if it is not updated, it can be a version behind.
+
+#define GLSLANG_REVISION "$WCREV$"
+#define GLSLANG_DATE     "$WCDATE$"
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index cbcbe1a..d2ece76 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -8983,9 +8983,10 @@
         }
         break;
     case EShLangIntersect:
-        if (profile != EEsProfile && version >= 460)
+        if (profile != EEsProfile && version >= 460) {
             symbolTable.relateToOperator("reportIntersectionNV", EOpReportIntersection);
             symbolTable.relateToOperator("reportIntersectionEXT", EOpReportIntersection);
+	}
         break;
     case EShLangAnyHit:
         if (profile != EEsProfile && version >= 460) {
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index c541703..593ed6f 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -1562,4 +1562,4 @@
 
 } // end namespace glslang
 
-#endif // not GLSLANG_WEB
\ No newline at end of file
+#endif // not GLSLANG_WEB
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 25b8b78..240944e 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -503,7 +503,7 @@
     bool getAutoMapBindings() const { return false; }
     bool getAutoMapLocations() const { return false; }
     int getNumPushConstants() const { return 0; }
-    void addShaderRecordNVCount() { }
+    void addShaderRecordCount() { }
     void addTaskNVCount() { }
     void setUseVulkanMemoryModel() { }
     bool usingVulkanMemoryModel() const { return false; }
diff --git a/glslang/MachineIndependent/parseConst.cpp b/glslang/MachineIndependent/parseConst.cpp
index e4f04d9..7c04743 100644
--- a/glslang/MachineIndependent/parseConst.cpp
+++ b/glslang/MachineIndependent/parseConst.cpp
@@ -175,7 +175,7 @@
                     if (nodeComps == 1) {
                         // If there is a single scalar parameter to a matrix
                         // constructor, it is used to initialize all the
-                        // components on the matrix’s diagonal, with the
+                        // components on the matrix's diagonal, with the
                         // remaining components initialized to 0.0.
                         if (i == startIndex || (i - startIndex) % (matrixRows + 1) == 0 )
                             leftUnionArray[i] = rightUnionArray[count];
diff --git a/glslang/MachineIndependent/propagateNoContraction.cpp b/glslang/MachineIndependent/propagateNoContraction.cpp
index 83a3230..9def592 100644
--- a/glslang/MachineIndependent/propagateNoContraction.cpp
+++ b/glslang/MachineIndependent/propagateNoContraction.cpp
@@ -867,4 +867,4 @@
 }
 };
 
-#endif // GLSLANG_WEB
\ No newline at end of file
+#endif // GLSLANG_WEB
diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h
index efdc893..0c33de4 100644
--- a/glslang/MachineIndependent/reflection.h
+++ b/glslang/MachineIndependent/reflection.h
@@ -220,4 +220,4 @@
 
 #endif // _REFLECTION_INCLUDED
 
-#endif // GLSLANG_WEB
\ No newline at end of file
+#endif // GLSLANG_WEB
diff --git a/glslang/OSDependent/Web/CMakeLists.txt b/glslang/OSDependent/Web/CMakeLists.txt
index 015d6d7..697b0b7 100644
--- a/glslang/OSDependent/Web/CMakeLists.txt
+++ b/glslang/OSDependent/Web/CMakeLists.txt
@@ -3,27 +3,31 @@
     glslang_set_link_args(glslang.js)
     target_link_libraries(glslang.js glslang SPIRV)
 
+    # Link library names that start with "-" are treated as link flags.
+    # "-Os" should be OK in MSVC; don't use /Os because CMake won't
+    # treat it as a link flag.
+    target_link_libraries(glslang.js "-Os")
+
     if(EMSCRIPTEN)
         set_target_properties(glslang.js PROPERTIES
             OUTPUT_NAME "glslang"
             SUFFIX ".js")
         em_link_pre_js(glslang.js "${CMAKE_CURRENT_SOURCE_DIR}/glslang.pre.js")
 
-        target_link_options(glslang.js PRIVATE "SHELL: -Os")
-        target_link_options(glslang.js PRIVATE "SHELL: --llvm-lto 1")
-        target_link_options(glslang.js PRIVATE "SHELL: --closure 1")
-        target_link_options(glslang.js PRIVATE "SHELL: -s MODULARIZE=1")
-        target_link_options(glslang.js PRIVATE "SHELL: -s ALLOW_MEMORY_GROWTH=1")
-        target_link_options(glslang.js PRIVATE "SHELL: -s FILESYSTEM=0")
+        target_link_libraries(glslang.js "--llvm-lto 1")
+        target_link_libraries(glslang.js "--closure 1")
+        target_link_libraries(glslang.js "-s MODULARIZE=1")
+        target_link_libraries(glslang.js "-s ALLOW_MEMORY_GROWTH=1")
+        target_link_libraries(glslang.js "-s FILESYSTEM=0")
 
         if(ENABLE_EMSCRIPTEN_SINGLE_FILE)
-            target_link_options(glslang.js PRIVATE "SHELL: -s SINGLE_FILE=1")
+            target_link_libraries(glslang.js "-s SINGLE_FILE=1")
         endif(ENABLE_EMSCRIPTEN_SINGLE_FILE)
 
         if(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
-            target_link_options(glslang.js PRIVATE "SHELL: -s ENVIRONMENT=node -s BINARYEN_ASYNC_COMPILATION=0")
+            target_link_libraries(glslang.js "-s ENVIRONMENT=node -s BINARYEN_ASYNC_COMPILATION=0")
         else()
-            target_link_options(glslang.js PRIVATE "SHELL: -s ENVIRONMENT=web,worker")
+            target_link_libraries(glslang.js "-s ENVIRONMENT=web,worker")
         endif()
 
         if(NOT ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)