Commit 72b6daa3 authored by Rob Pike's avatar Rob Pike

cmd/vet: check argument types in printf formats

Fixes #4404.

R=gri, rsc
CC=golang-dev
https://golang.org/cl/7378061
parent 39c476cb
...@@ -3,6 +3,6 @@ ...@@ -3,6 +3,6 @@
# license that can be found in the LICENSE file. # license that can be found in the LICENSE file.
test testshort: test testshort:
go build go build -tags unsafe
../../../test/errchk ./vet -printfuncs='Warn:1,Warnf:1' *.go ../../../test/errchk ./vet -printfuncs='Warn:1,Warnf:1' *.go
...@@ -10,7 +10,7 @@ import ( ...@@ -10,7 +10,7 @@ import (
"sync/atomic" "sync/atomic"
) )
// checkAtomicAssignment walks the assignment statement checking for comomon // checkAtomicAssignment walks the assignment statement checking for common
// mistaken usage of atomic package, such as: x = atomic.AddUint64(&x, 1) // mistaken usage of atomic package, such as: x = atomic.AddUint64(&x, 1)
func (f *File) checkAtomicAssignment(n *ast.AssignStmt) { func (f *File) checkAtomicAssignment(n *ast.AssignStmt) {
if !vet("atomic") { if !vet("atomic") {
......
...@@ -161,6 +161,7 @@ func doPackageDir(directory string) { ...@@ -161,6 +161,7 @@ func doPackageDir(directory string) {
type Package struct { type Package struct {
types map[ast.Expr]types.Type types map[ast.Expr]types.Type
values map[ast.Expr]interface{}
} }
// doPackage analyzes the single package constructed from the named files. // doPackage analyzes the single package constructed from the named files.
...@@ -188,8 +189,12 @@ func doPackage(names []string) { ...@@ -188,8 +189,12 @@ func doPackage(names []string) {
} }
pkg := new(Package) pkg := new(Package)
pkg.types = make(map[ast.Expr]types.Type) pkg.types = make(map[ast.Expr]types.Type)
pkg.values = make(map[ast.Expr]interface{})
exprFn := func(x ast.Expr, typ types.Type, val interface{}) { exprFn := func(x ast.Expr, typ types.Type, val interface{}) {
pkg.types[x] = typ pkg.types[x] = typ
if val != nil {
pkg.values[x] = val
}
} }
context := types.Context{ context := types.Context{
Expr: exprFn, Expr: exprFn,
......
This diff is collapsed.
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build unsafe
// This file contains a special test for the printf-checker that tests unsafe.Pointer.
package main
import (
"fmt"
"unsafe" // just for test case printing unsafe.Pointer
)
func UnsafePointerPrintfTest() {
var up *unsafe.Pointer
fmt.Printf("%p", up)
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment