summaryrefslogtreecommitdiffstats
path: root/elaborate.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'elaborate.cxx')
-rw-r--r--elaborate.cxx32
1 files changed, 19 insertions, 13 deletions
diff --git a/elaborate.cxx b/elaborate.cxx
index e38cef51..5cac937b 100644
--- a/elaborate.cxx
+++ b/elaborate.cxx
@@ -420,9 +420,12 @@ semantic_pass_symbols (systemtap_session& s)
try
{
- sym.current_function = fd;
- sym.current_probe = 0;
- fd->body->visit (& sym);
+ if (fd->body)
+ {
+ sym.current_function = fd;
+ sym.current_probe = 0;
+ fd->body->visit (& sym);
+ }
}
catch (const semantic_error& e)
{
@@ -478,7 +481,7 @@ int
semantic_pass (systemtap_session& s)
{
s.register_library_aliases();
- register_standard_tapsets(s.pattern_root);
+ register_standard_tapsets(s);
int rc = semantic_pass_symbols (s);
if (rc == 0) rc = semantic_pass_types (s);
@@ -794,15 +797,18 @@ semantic_pass_types (systemtap_session& s)
for (unsigned j=0; j<s.functions.size(); j++)
{
functiondecl* fn = s.functions[j];
- ti.current_function = fn;
- ti.t = pe_unknown;
- fn->body->visit (& ti);
- // NB: we don't have to assert a known type for
- // functions here, to permit a "void" function.
- // The translator phase will omit the "retvalue".
- //
- // if (fn->type == pe_unknown)
- // ti.unresolved (fn->tok);
+ if (fn->body)
+ {
+ ti.current_function = fn;
+ ti.t = pe_unknown;
+ fn->body->visit (& ti);
+ // NB: we don't have to assert a known type for
+ // functions here, to permit a "void" function.
+ // The translator phase will omit the "retvalue".
+ //
+ // if (fn->type == pe_unknown)
+ // ti.unresolved (fn->tok);
+ }
}
for (unsigned j=0; j<s.probes.size(); j++)