For a special opcode the address of the next insn was 
not computed correctly. It would point to an insn in 
the middle of the the pattern that identifies a special opcode.
That didn't hurt much but was confusing. Now fixed.


git-svn-id: svn://svn.valgrind.org/vex/trunk@2187 8f6e269a-dfd6-0310-a8e1-e2731360e62c
diff --git a/priv/guest_s390_toIR.c b/priv/guest_s390_toIR.c
index 8ec201b..ce0722c 100644
--- a/priv/guest_s390_toIR.c
+++ b/priv/guest_s390_toIR.c
@@ -12943,9 +12943,12 @@
 
       /* Handle special instruction that follows that preamble. */
       if (0) vex_printf("special function handling...\n");
-      bytes += S390_SPECIAL_OP_PREAMBLE_SIZE;
-      status = s390_decode_special_and_irgen(bytes);
-      insn_length = S390_SPECIAL_OP_SIZE;
+
+      insn_length = S390_SPECIAL_OP_PREAMBLE_SIZE + S390_SPECIAL_OP_SIZE;
+      guest_IA_next_instr = guest_IA_curr_instr + insn_length;
+
+      status =
+         s390_decode_special_and_irgen(bytes + S390_SPECIAL_OP_PREAMBLE_SIZE);
    } else {
       /* Handle normal instructions. */
       switch (insn_length) {