summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2018-07-22 09:28:08 +0200
committerLioncash <mathew1800@gmail.com>2018-07-22 09:30:35 +0200
commit0797657bc02ca8f29d38206e56e3de80689c6350 (patch)
tree9c61a1ffea8a03b5a0ef0287672dee4d924d44e3 /src
parentMerge pull request #765 from lioncash/file (diff)
downloadyuzu-0797657bc02ca8f29d38206e56e3de80689c6350.tar
yuzu-0797657bc02ca8f29d38206e56e3de80689c6350.tar.gz
yuzu-0797657bc02ca8f29d38206e56e3de80689c6350.tar.bz2
yuzu-0797657bc02ca8f29d38206e56e3de80689c6350.tar.lz
yuzu-0797657bc02ca8f29d38206e56e3de80689c6350.tar.xz
yuzu-0797657bc02ca8f29d38206e56e3de80689c6350.tar.zst
yuzu-0797657bc02ca8f29d38206e56e3de80689c6350.zip
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_decompiler.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
index f47fd217d..ba827181b 100644
--- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
@@ -78,14 +78,18 @@ private:
/// Adds and analyzes a new subroutine if it is not added yet.
const Subroutine& AddSubroutine(u32 begin, u32 end, const std::string& suffix) {
- auto iter = subroutines.find(Subroutine{begin, end, suffix});
- if (iter != subroutines.end())
+ Subroutine subroutine{begin, end, suffix, ExitMethod::Undetermined, {}};
+
+ const auto iter = subroutines.find(subroutine);
+ if (iter != subroutines.end()) {
return *iter;
+ }
- Subroutine subroutine{begin, end, suffix};
subroutine.exit_method = Scan(begin, end, subroutine.labels);
- if (subroutine.exit_method == ExitMethod::Undetermined)
+ if (subroutine.exit_method == ExitMethod::Undetermined) {
throw DecompileFail("Recursive function detected");
+ }
+
return *subroutines.insert(std::move(subroutine)).first;
}