File 0497-beam_makeops-Instructions-marked-no_next-must-not-fa.patch of Package erlang

From 9c0be17312ff517474621108cb0379eef211c8b0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20H=C3=B6gberg?= <john@erlang.org>
Date: Thu, 5 Sep 2019 11:49:54 +0200
Subject: [PATCH 02/12] beam_makeops: Instructions marked -no_next must not
 fall through

---
 erts/emulator/utils/beam_makeops | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/erts/emulator/utils/beam_makeops b/erts/emulator/utils/beam_makeops
index 605a402f2a..cc21f9b5b4 100755
--- a/erts/emulator/utils/beam_makeops
+++ b/erts/emulator/utils/beam_makeops
@@ -1315,7 +1315,7 @@ sub combine_instruction_group {
             my $inc = 0;
 
             unless ($i == $#slots) {
-                $flags = "-no_next";
+                $flags = "-micro_instruction";
                 my $next_offset = $label_to_offset{$next};
                 $inc = ($offset + $size) - $next_offset;
                 $transfer_to_next = "I += $inc;\n" if $inc;
@@ -1553,8 +1553,10 @@ sub code_gen {
     my $dispatch_next;
     my $instr_offset = $group_size + $offset + 1;
 
-    if ($flags =~ /-no_next/) {
+    if ($flags =~ /-micro_instruction/) {
         $dispatch_next = "";
+    } elsif ($flags =~ /-no_next/) {
+        $dispatch_next = "ASSERT(!\"Fell through '$name' (-no_next)\");";
     } elsif ($flags =~ /-no_prefetch/) {
         $dispatch_next = "\nI += $instr_offset;\n" .
             "ASSERT(VALID_INSTR(*I));\n" .
-- 
2.16.4

openSUSE Build Service is sponsored by