// Package blank is a go/doc test for the handling of _. See issue ...
PACKAGE blank

IMPORTPATH
	testdata/blank

IMPORTS
	os

FILENAMES
	testdata/blank.go

CONSTANTS
	// T constants counting from unexported constants. 
	const (
		C1	T
		C2
	
		C3
	
		C4	int
	)

	// Constants with an imported type that needs to be propagated. 
	const (
		Default		os.FileMode	= 0644
		Useless				= 0312
		WideOpen			= 0777
	)

	// Package constants. 
	const (
		I1	int
		I2
	)


TYPES
	// S has a padding field. 
	type S struct {
		H	uint32
	
		A	uint8
		// contains filtered or unexported fields
	}

	// 
	type T int

	// T constants counting from a blank constant. 
	const (
		T1	T
		T2
	)

