[master] e0169b190 vcc: New "unused" toplev
Walid Boudebouda
walid.boudebouda at gmail.com
Mon Dec 8 14:34:04 UTC 2025
commit e0169b190e09ee8078d69ccbe2f54d68a63b9fca
Author: Walid Boudebouda <walid.boudebouda at gmail.com>
Date: Mon Dec 1 18:40:27 2025 +0100
vcc: New "unused" toplev
This allows a finer grained control over symbol references compared
to the existing vcc_feature flag -err_unref.
Refs #4410
diff --git a/lib/libvcc/vcc_parse.c b/lib/libvcc/vcc_parse.c
index e00b133e0..d3b045dce 100644
--- a/lib/libvcc/vcc_parse.c
+++ b/lib/libvcc/vcc_parse.c
@@ -212,6 +212,36 @@ vcc_Compound(struct vcc *tl)
}
}
+/*--------------------------------------------------------------------
+ */
+
+static void
+vcc_ParseUnused(struct vcc *tl)
+{
+ struct symbol *sym;
+ struct token *t;
+ struct inifin *ifp;
+
+ vcc_NextToken(tl);
+ ExpectErr(tl, ID);
+ t = tl->t;
+ sym = VCC_SymbolGet(tl, SYM_MAIN, SYM_NONE, SYMTAB_EXISTING, XREF_REF);
+ ERRCHK(tl);
+ AN(sym);
+ if (sym->kind != SYM_BACKEND && sym->kind != SYM_PROBE &&
+ sym->kind != SYM_ACL && sym->kind != SYM_SUB) {
+ vcc_ErrWhere2(tl, t, tl->t);
+ VSB_printf(tl->sb, "Symbol '%s' cannot follow 'unused'.\n",
+ sym->name);
+ return;
+ }
+ AN(sym->rname);
+ ifp = New_IniFin(tl);
+ VSB_printf(ifp->ini, "\t(void)%s;\n", sym->rname);
+ ifp->ignore_errors = 1;
+ SkipToken(tl, ';');
+}
+
/*--------------------------------------------------------------------
* SYNTAX:
* Function:
@@ -348,6 +378,7 @@ vcc_ParseVcl(struct vcc *tl)
* Backend definitions
* VMOD import directives
* VCL version declarations
+ * Unused symbols declarations
* End of input
*/
@@ -365,6 +396,7 @@ static struct toplev {
{ "probe", vcc_ParseProbe, VCL_41, VCL_HIGH },
{ "import", vcc_ParseImport, VCL_41, VCL_HIGH },
{ "vcl", vcc_ParseVcl, VCL_41, VCL_HIGH },
+ { "unused", vcc_ParseUnused, VCL_41, VCL_HIGH},
{ NULL, NULL }
};
More information about the varnish-commit
mailing list