From c5c2364ed43570ea9326de86e9820f60a3731c0c Mon Sep 17 00:00:00 2001 From: James Shubin Date: Tue, 11 May 2021 03:23:33 -0400 Subject: [PATCH] lang: funcs: core: fmt: Add an additional invariant to printf This adds an invariant for printf that I might have missed. It may be redundant, or it may help. --- lang/funcs/core/fmt/printf_func.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lang/funcs/core/fmt/printf_func.go b/lang/funcs/core/fmt/printf_func.go index 2f4a45e4..34326212 100644 --- a/lang/funcs/core/fmt/printf_func.go +++ b/lang/funcs/core/fmt/printf_func.go @@ -111,6 +111,16 @@ func (obj *PrintfFunc) Unify(expr interfaces.Expr) ([]interfaces.Invariant, erro return nil, fmt.Errorf("unable to build function with no args") } + var invariants []interfaces.Invariant + var invar interfaces.Invariant + + // first arg must be a string + invar = &interfaces.EqualsInvariant{ + Expr: cfavInvar.Args[0], + Type: types.TypeStr, + } + invariants = append(invariants, invar) + value, err := cfavInvar.Args[0].Value() // is it known? if err != nil { return nil, fmt.Errorf("format string is not known statically") @@ -130,8 +140,6 @@ func (obj *PrintfFunc) Unify(expr interfaces.Expr) ([]interfaces.Invariant, erro ordered := []string{formatName} mapped[formatName] = dummyFormat - var invariants []interfaces.Invariant - var invar interfaces.Invariant for i, x := range typList { argName, err := obj.ArgGen(i + 1) // skip 0th if err != nil {