// Process top-level declarations in phases.
- // Phase 1: type, and names and types of funcs.
+ // Phase 1: const, type, and names and types of funcs.
// This will gather all the information about types
// and methods but doesn't depend on any of it.
defercheckwidth()
timings.Start("fe", "typecheck", "top1")
for i := 0; i < len(xtop); i++ {
n := xtop[i]
- if op := n.Op; op != ODCL && op != OAS && op != OAS2 && op != ODCLCONST {
+ if op := n.Op; op != ODCL && op != OAS && op != OAS2 {
xtop[i] = typecheck(n, Etop)
}
}
- // Phase 2: Constant declarations.
- // To have named types fully type checked, depends on phase 1.
-
- // Don't use range--typecheck can add closures to xtop.
- timings.Start("fe", "typecheck", "top2")
- for i := 0; i < len(xtop); i++ {
- n := xtop[i]
- if op := n.Op; op == ODCLCONST {
- xtop[i] = typecheck(n, Etop)
- }
- }
-
- // Phase 3: Variable assignments.
+ // Phase 2: Variable assignments.
// To check interface assignments, depends on phase 1.
- // To use constants, depends on phase 2.
// Don't use range--typecheck can add closures to xtop.
- timings.Start("fe", "typecheck", "top3")
+ timings.Start("fe", "typecheck", "top2")
for i := 0; i < len(xtop); i++ {
n := xtop[i]
if op := n.Op; op == ODCL || op == OAS || op == OAS2 {
+++ /dev/null
-// errorcheck
-
-// Copyright 2018 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.
-
-// Tests that all types and functions are type-checked before any constant
-// declaration is. Issue #24755.
-package p
-
-type I interface{ F() }
-type T struct{}
-
-const _ = I(T{}) // ERROR "const initializer I\(T literal\) is not a constant"
-
-func (T) F() {}