summaryrefslogtreecommitdiffstats
path: root/tapsets.cxx
diff options
context:
space:
mode:
authorfche <fche>2006-11-17 20:35:46 +0000
committerfche <fche>2006-11-17 20:35:46 +0000
commit9f36b77f43db9975865f01f5bda68a824d24fcfb (patch)
tree60261fe605b33632d186073155b592e36a5b9ed1 /tapsets.cxx
parent2566011f0b812d7b4e7cbcf8b28c1e8c05de5d94 (diff)
downloadsystemtap-steved-9f36b77f43db9975865f01f5bda68a824d24fcfb.tar.gz
systemtap-steved-9f36b77f43db9975865f01f5bda68a824d24fcfb.tar.xz
systemtap-steved-9f36b77f43db9975865f01f5bda68a824d24fcfb.zip
2006-11-17 Frank Ch. Eigler <fche@redhat.com>
* tapsets.cxx (d_v_e_c_v::visit_target_symbol): Restore lost exception-saving functionality that improves error messages for incorrect $target expressions. (translate_components): Systematize error messages somewhat. * translate.cxx (emit_function, emit_probe): Clarify "array locals" error message. 2006-11-17 Frank Ch. Eigler <fche@redhat.com> * semko/thirtysix.stp, transko/three.stp: New tests.
Diffstat (limited to 'tapsets.cxx')
-rw-r--r--tapsets.cxx13
1 files changed, 8 insertions, 5 deletions
diff --git a/tapsets.cxx b/tapsets.cxx
index d8e068d8..c17b43c2 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -1396,7 +1396,7 @@ struct dwflpp
|| ({ const char *member = dwarf_diename_integrate (die);
member == NULL || string(member) != components[i].second; }))
if (dwarf_siblingof (die, die_mem) != 0)
- throw semantic_error ("field name " + components[i].second + " not found");
+ throw semantic_error ("field '" + components[i].second + "' not found");
if (dwarf_attr_integrate (die, DW_AT_data_member_location,
attr_mem) == NULL)
@@ -1404,9 +1404,9 @@ struct dwflpp
/* Union members don't usually have a location,
but just use the containing union's location. */
if (typetag != DW_TAG_union_type)
- throw semantic_error ("no location for field "
+ throw semantic_error ("no location for field '"
+ components[i].second
- + " :" + string(dwarf_errmsg (-1)));
+ + "' :" + string(dwarf_errmsg (-1)));
}
else
translate_location (pool, attr_mem, pc, NULL, tail);
@@ -1414,9 +1414,9 @@ struct dwflpp
break;
case DW_TAG_base_type:
- throw semantic_error ("field "
+ throw semantic_error ("field '"
+ components[i].second
- + " vs base type "
+ + "' vs. base type "
+ string(dwarf_diename_integrate (die) ?: "<anonymous type>"));
break;
case -1:
@@ -2937,6 +2937,9 @@ dwarf_var_expanding_copy_visitor::visit_target_symbol (target_symbol *e)
// up not being referenced after all, so it can be optimized out
// quietly.
provide <target_symbol*> (this, e);
+ semantic_error* saveme = new semantic_error (er); // copy it
+ saveme->tok1 = e->tok; // XXX: token not passed to q.dw code generation routines
+ e->saved_conversion_error = saveme;
delete fdecl;
delete ec;
return;