]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
SET_GROUPS instr: don't generate more than one
authorJustin Viiret <justin.viiret@intel.com>
Mon, 8 Feb 2016 02:32:21 +0000 (13:32 +1100)
committerMatthew Barr <matthew.barr@intel.com>
Tue, 1 Mar 2016 00:34:26 +0000 (11:34 +1100)
src/rose/rose_build_bytecode.cpp

index 81b28197daec67376f75797523e217f954407afd..558603f7075f4d0f796420626eebb5a709bb193f 100644 (file)
@@ -3269,10 +3269,6 @@ void makeRoleInfixTriggers(RoseBuildImpl &build, build_context &bc,
     sort(begin(infix_program), end(infix_program));
     unique_copy(begin(infix_program), end(infix_program),
                 back_inserter(program));
-
-    // Groups may be cleared by an infix going quiet. Set groups immediately
-    // after infixes are triggered.
-    makeRoleGroups(g[u].groups, program);
 }
 
 static
@@ -3373,9 +3369,13 @@ vector<RoseInstruction> makeProgram(RoseBuildImpl &build, build_context &bc,
 
     makeRoleReports(build, bc, v, program);
     makeRoleInfixTriggers(build, bc, v, program);
+
+    // Note: SET_GROUPS instruction must be after infix triggers, as an infix
+    // going dead may switch off groups.
+    makeRoleGroups(g[v].groups, program);
+
     makeRoleSuffix(build, bc, v, program);
     makeRoleSetState(bc, v, program);
-    makeRoleGroups(g[v].groups, program);
 
     return program;
 }