diff options
Diffstat (limited to 'bootstrap/env.c')
| -rw-r--r-- | bootstrap/env.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/bootstrap/env.c b/bootstrap/env.c index ec80e62..773550a 100644 --- a/bootstrap/env.c +++ b/bootstrap/env.c @@ -33,6 +33,8 @@ envput(struct env *env, const struct decl *decl) { if ((d0 = envfind(&env_noparent, INT_MAX, decl->name))) { // modify existing forward declarations? + if (decl == d0 || !memcmp(d0, decl, sizeof *d0)) + return d0; if (d0->t == Dmacro && !memcmp(&decl->macro, &d0->macro, sizeof decl->macro)) return d0; if (d0->t == Dtepl && !memcmp(&decl->tepl, &d0->tepl, sizeof decl->tepl)) @@ -52,6 +54,7 @@ envput(struct env *env, const struct decl *decl) { } } if (d0->t == Dfn && d0->externp == decl->externp && d0->fn.selfty == decl->fn.selfty && !d0->fn.body && decl->fn.body) { + *(int *)&decl->fn.id = d0->fn.id; goto ok; } if (d0->t == Dfn && d0->externp == decl->externp && d0->fn.selfty == decl->fn.selfty && !d0->fn.body) |