[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