static char return_expr_occurred;
static arith func_size;
static label func_res_label;
-static char *last_fn_given = "";
+static char *last_fn_given = (char *)0;
static label file_name_label;
begin_proc(ds, idf) /* to be called when entering a procedure */
LocalInit();
prc_entry(name);
if (! options['L']) { /* profiling */
- if (strcmp(last_fn_given, FileName) != 0) {
+ if (!last_fn_given || strcmp(last_fn_given, FileName) != 0) {
/* previous function came from other file */
C_df_dlb(file_name_label = data_label());
C_con_scon(last_fn_given = FileName,
{
struct token tk;
int t = GetToken(&tk);
+ static char *saved_name = (char *)0;
SkipToNewLine();
LineNumber = l; /* the number of the next input line */
extern char *source; /* defined in main.c */
if (FileName != source) { /* source points into argv */
- free(FileName);
+ /* Since we are looking one token ahead, we can't
+ * free the string when it is mentioned in dot.
+ */
+ if (dot.tok_file != FileName) {
+ free(FileName);
+ } else if (dot.tok_file != saved_name) {
+ if (saved_name) free(saved_name);
+ saved_name = dot.tok_file;
+ }
}
FileName = tk.tk_bts;
}