File 1420.diff of Package OpenShadingLanguage

Index: b/INSTALL.md
===================================================================
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -16,7 +16,7 @@ NEW or CHANGED dependencies since the la
 
 * A suitable C++11 compiler to build OSL itself, which may be any of:
    - GCC 4.8.5 or newer (tested through gcc 11)
-   - Clang 3.4 or newer (tested through clang 12)
+   - Clang 3.4 or newer (tested through clang 13)
    - Microsoft Visual Studio 2015 or newer
    - Intel C++ compiler icc version 13 (?) or newer
 
@@ -43,7 +43,7 @@ NEW or CHANGED dependencies since the la
     DYLD_LIBRARY_PATH on OS X) and then OSL's build scripts will be able
     to find it.
 
-* **[LLVM](http://www.llvm.org) 7, 8, 9, 10, 11, or 12**, including
+* **[LLVM](http://www.llvm.org) 7, 8, 9, 10, 11, 12, or 13**, including clang
   clang libraries.
 
   Note that LLVM 10+ is not compatible with C++11, and requires C++14 or
@@ -73,13 +73,13 @@ Build process
 
 Here are the steps to check out, build, and test the OSL distribution:
 
-0. Install and build dependencies.
+1. Install and build dependencies.
 
-1. Check out a copy of the source code from the Git repository:
+2. Check out a copy of the source code from the Git repository:
 
         git clone https://github.com/AcademySoftwareFoundation/OpenShadingLanguage.git osl
 
-2. Change to the distribution directory and 'make'
+3. Change to the distribution directory and 'make'
 
         cd osl
         make
@@ -95,7 +95,7 @@ Here are the steps to check out, build,
    "make STOP_ON_WARNING=0", that create a build that will only stop for
    full errors, not warnings.
 
-3. After compilation, you'll end up with a full OSL distribution in
+4. After compilation, you'll end up with a full OSL distribution in
    dist/ARCH, where ARCH is the architecture you are building on, one of
    "linux", "linux64", "macosx", "windows", or "windows64".
 
@@ -103,14 +103,14 @@ Here are the steps to check out, build,
    instead type 'make debug' at the top level, you will end up with
    a debug build (no optimization, full symbols) in "dist/ARCH.debug".
 
-4. Add the "dist/ARCH/bin" to your $PATH, and "dist/ARCH/lib" to your
+5. Add the "dist/ARCH/bin" to your $PATH, and "dist/ARCH/lib" to your
    $LD_LIBRAY_PATH (or $DYLD_LIBRARY_PATH on OS X), or copy the contents
    of those files to appropriate directories.  Public include files
    (those needed when building applications that incorporate OSL)
    can be found in "dist/ARCH/include", and documentation can be found
    in "dist/ARCH/share/doc".
 
-5. After building (and setting your library path), you can run the
+6. After building (and setting your library path), you can run the
    test suite with:
 
         make test
Index: b/src/include/OSL/llvm_util.h
===================================================================
--- a/src/include/OSL/llvm_util.h
+++ b/src/include/OSL/llvm_util.h
@@ -577,6 +577,9 @@ public:
                     llvm::Value *src, int srcalign, int len);
 
     /// Dereference a pointer:  return *ptr
+    /// type is the type of the thing being pointed to.
+    llvm::Value *op_load (llvm::Type* type, llvm::Value *ptr);
+    // Blind pointer version that's deprecated as of LLVM13:
     llvm::Value *op_load (llvm::Value *ptr);
 
     /// Store to a dereferenced pointer:   *ptr = val
@@ -589,17 +592,25 @@ public:
 
     /// Generate a GEP (get element pointer) where the element index is an
     /// llvm::Value, which can be generated from either a constant or a
-    /// runtime-computed integer element index.
+    /// runtime-computed integer element index. `type` is the type of the data
+    /// we're retrieving.
+    llvm::Value *GEP (llvm::Type* type, llvm::Value *ptr, llvm::Value *elem);
+    // Blind pointer version that's deprecated as of LLVM13:
     llvm::Value *GEP (llvm::Value *ptr, llvm::Value *elem);
 
     /// Generate a GEP (get element pointer) with an integer element
-    /// offset.
+    /// offset. `type` is the type of the data we're retrieving.
+    llvm::Value *GEP (llvm::Type* type, llvm::Value *ptr, int elem);
+    // Blind pointer version that's deprecated as of LLVM13:
     llvm::Value *GEP (llvm::Value *ptr, int elem);
 
     /// Generate a GEP (get element pointer) with two integer element
     /// offsets.  This is just a special (and common) case of GEP where
     /// we have a 2-level hierarchy and we have fixed element indices
-    /// that are known at compile time.
+    /// that are known at compile time.  `type` is the type of the data we're
+    /// retrieving.
+    llvm::Value *GEP (llvm::Type* type, llvm::Value *ptr, int elem1, int elem2);
+    // Blind pointer version that's deprecated as of LLVM13:
     llvm::Value *GEP (llvm::Value *ptr, int elem1, int elem2);
 
     // Arithmetic ops.  It auto-detects the type (int vs float).
Index: b/src/liboslexec/llvm_util.cpp
===================================================================
--- a/src/liboslexec/llvm_util.cpp
+++ b/src/liboslexec/llvm_util.cpp
@@ -2592,9 +2592,17 @@ LLVM_Util::op_memcpy (llvm::Value *dst,
 
 
 llvm::Value *
+LLVM_Util::op_load (llvm::Type* type, llvm::Value* ptr)
+{
+    return builder().CreateLoad (type, ptr);
+}
+
+
+
+llvm::Value *
 LLVM_Util::op_load (llvm::Value *ptr)
 {
-    return builder().CreateLoad (ptr);
+    return op_load(ptr->getType()->getPointerElementType(), ptr);
 }
 
 
@@ -2608,9 +2616,26 @@ LLVM_Util::op_store (llvm::Value *val, l
 
 
 llvm::Value *
+LLVM_Util::GEP (llvm::Type* type, llvm::Value* ptr, llvm::Value* elem)
+{
+    return builder().CreateGEP(type, ptr, elem);
+}
+
+
+
+llvm::Value *
 LLVM_Util::GEP (llvm::Value *ptr, llvm::Value *elem)
 {
-    return builder().CreateGEP (ptr, elem);
+    return GEP(ptr->getType()->getScalarType()->getPointerElementType(), ptr,
+               elem);
+}
+
+
+
+llvm::Value *
+LLVM_Util::GEP (llvm::Type* type, llvm::Value* ptr, int elem)
+{
+    return builder().CreateConstGEP1_32(type, ptr, elem);
 }
 
 
@@ -2618,7 +2643,16 @@ LLVM_Util::GEP (llvm::Value *ptr, llvm::
 llvm::Value *
 LLVM_Util::GEP (llvm::Value *ptr, int elem)
 {
-    return builder().CreateConstGEP1_32 (ptr, elem);
+    return GEP(ptr->getType()->getScalarType()->getPointerElementType(), ptr,
+               elem);
+}
+
+
+
+llvm::Value *
+LLVM_Util::GEP(llvm::Type* type, llvm::Value* ptr, int elem1, int elem2)
+{
+    return builder().CreateConstGEP2_32 (type, ptr, elem1, elem2);
 }
 
 
@@ -2626,7 +2660,8 @@ LLVM_Util::GEP (llvm::Value *ptr, int el
 llvm::Value *
 LLVM_Util::GEP (llvm::Value *ptr, int elem1, int elem2)
 {
-    return builder().CreateConstGEP2_32 (nullptr, ptr, elem1, elem2);
+    return GEP(ptr->getType()->getScalarType()->getPointerElementType(), ptr,
+               elem1, elem2);
 }
 
 
Index: b/src/liboslexec/runtimeoptimize.cpp
===================================================================
--- a/src/liboslexec/runtimeoptimize.cpp
+++ b/src/liboslexec/runtimeoptimize.cpp
@@ -2301,7 +2301,6 @@ RuntimeOptimizer::optimize_instance ()
     // passes, but we have a hard cutoff just to be sure we don't
     // ever get into an infinite loop from an unforseen cycle where we
     // end up inadvertently transforming A => B => A => etc.
-    int totalchanged = 0;
     int reallydone = 0;   // Force a few passes after we think we're done
     int npasses = shadingsys().opt_passes();
     for (m_pass = 0;  m_pass < npasses;  ++m_pass) {
@@ -2362,7 +2361,6 @@ RuntimeOptimizer::optimize_instance ()
         // If nothing changed, we're done optimizing.  But wait, it may be
         // that after re-tracking variable lifetimes, we can notice new
         // optimizations!  So force another pass, then we're really done.
-        totalchanged += changed;
         if (changed < 1) {
             if (++reallydone > 3)
                 break;
openSUSE Build Service is sponsored by