summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--elaborate.cxx3
-rw-r--r--testsuite/systemtap.base/optionalprobe.exp9
-rw-r--r--testsuite/systemtap.base/optionalprobe.stp6
3 files changed, 18 insertions, 0 deletions
diff --git a/elaborate.cxx b/elaborate.cxx
index 47b77c9b..53f2a8f6 100644
--- a/elaborate.cxx
+++ b/elaborate.cxx
@@ -406,6 +406,9 @@ match_node::find_and_build (systemtap_session& s,
sub_map_iterator_t i = sub.find (match);
if (i == sub.end()) // no match
{
+ if (loc->optional) /* PR10102: to tolerate mismatched optional probe */
+ return;
+
string alternatives;
for (sub_map_iterator_t i = sub.begin(); i != sub.end(); i++)
alternatives += string(" ") + i->first.str();
diff --git a/testsuite/systemtap.base/optionalprobe.exp b/testsuite/systemtap.base/optionalprobe.exp
new file mode 100644
index 00000000..5484003c
--- /dev/null
+++ b/testsuite/systemtap.base/optionalprobe.exp
@@ -0,0 +1,9 @@
+set test "optionalprobe"
+spawn stap -p2 -w $srcdir/$subdir/$test.stp
+expect {
+ -timeout 60
+ -re "# probes\r\n" { exp_continue }
+ -re "^begin" { pass $test }
+ eof { fail $test }
+ timeout { fail "$test unexpected timeout" }
+}
diff --git a/testsuite/systemtap.base/optionalprobe.stp b/testsuite/systemtap.base/optionalprobe.stp
new file mode 100644
index 00000000..239cf6e3
--- /dev/null
+++ b/testsuite/systemtap.base/optionalprobe.stp
@@ -0,0 +1,6 @@
+#! stap
+
+# test optional probe
+
+probe foo ?, bar !, foo* ?, bar* !, begin {
+}