uchar dodata; // compile literal assignment as data statement
uchar used;
uchar isddd;
+ uchar paren; // was parenthesized
uchar pun; // dont registerize variable ONAME
// most nodes
| '(' expr_or_type ')'
{
$$ = $2;
+ $$->paren++;
}
| pexpr '.' '(' expr_or_type ')'
{
}
| pexpr '{' braced_keyval_list '}'
{
+ if($1->paren)
+ yyerror("cannot parenthesize type in composite literal");
// composite expression
$$ = nod(OCOMPLIT, N, $1);
$$->list = $3;
| '(' ntype ')'
{
$$ = $2;
+ $$->paren++;
}
non_expr_type:
| '(' ntype ')'
{
$$ = $2;
+ $$->paren++;
}
convtype:
yyerror("bad receiver in method");
break;
}
+ if(rcvr->right->paren || (rcvr->right->op == OIND && rcvr->right->left->paren))
+ yyerror("cannot parenthesize receiver type");
$$ = nod(ODCLFUNC, N, N);
$$->nname = methodname1(name, rcvr->right);
$1->val = $2;
$$ = list1($1);
}
+| '(' embed ')' oliteral
+ {
+ $2->val = $4;
+ $$ = list1($2);
+ yyerror("cannot parenthesize embedded type");
+ }
| '*' embed oliteral
{
$2->right = nod(OIND, $2->right, N);
$2->val = $3;
$$ = list1($2);
}
+| '(' '*' embed ')' oliteral
+ {
+ $3->right = nod(OIND, $3->right, N);
+ $3->val = $5;
+ $$ = list1($3);
+ yyerror("cannot parenthesize embedded type");
+ }
+| '*' '(' embed ')' oliteral
+ {
+ $3->right = nod(OIND, $3->right, N);
+ $3->val = $5;
+ $$ = list1($3);
+ yyerror("cannot parenthesize embedded type");
+ }
packname:
LNAME
{
$$ = nod(ODCLFIELD, N, oldname($1));
}
+| '(' packname ')'
+ {
+ $$ = nod(ODCLFIELD, N, oldname($2));
+ yyerror("cannot parenthesize embedded type");
+ }
indcl:
'(' oarg_type_list_ocomma ')' fnres
pair{(bool)(false), "true"},
pair{(*int8)(nil), "*int8(0)"},
pair{(**int8)(nil), "**int8(0)"},
- pair{([5]int32){}, "[5]int32{0, 0, 0, 0, 0}"},
+ pair{[5]int32{}, "[5]int32{0, 0, 0, 0, 0}"},
pair{(**integer)(nil), "**reflect_test.integer(0)"},
pair{(map[string]int32)(nil), "map[string] int32{<can't iterate on maps>}"},
pair{(chan<- string)(nil), "chan<- string"},
- pair{(struct {
+ pair{struct {
c chan *int32
d float32
- }){},
+ }{},
"struct { c chan *int32; d float32 }{chan *int32, 0}",
},
pair{(func(a int8, b int32))(nil), "func(int8, int32)(0)"},
- pair{(struct {
- c func(chan *integer, *int8)
- }){},
+ pair{struct{ c func(chan *integer, *int8) }{},
"struct { c func(chan *reflect_test.integer, *int8) }{func(chan *reflect_test.integer, *int8)(0)}",
},
- pair{(struct {
+ pair{struct {
a int8
b int32
- }){},
+ }{},
"struct { a int8; b int32 }{0, 0}",
},
- pair{(struct {
+ pair{struct {
a int8
b int8
c int32
- }){},
+ }{},
"struct { a int8; b int8; c int32 }{0, 0, 0}",
},
}
+++ /dev/null
-// errchk $G $D/$F.go
-
-// Copyright 2010 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.
-
-package main
-
-type T struct {
- // accepted by both compilers, legal according to spec
- x int
- y (int)
- int
- *float
- // not accepted by both compilers, not legal according to spec
- (complex) // ERROR "non-declaration|expected"
- (*string) // ERROR "non-declaration|expected"
- *(bool) // ERROR "non-declaration|expected"
-}
-
-// accepted by both compilers, legal according to spec
-func (p T) m() {}
-
-// accepted by 6g, not accepted by gccgo, not legal according to spec
-func (p (T)) f() {} // ERROR "expected"
-func (p *(T)) g() {} // ERROR "expected"
-func (p (*T)) h() {} // ERROR "expected"
--- /dev/null
+// errchk $G $D/$F.go
+
+// Copyright 2010 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.
+
+package main
+
+type T struct {
+ // legal according to spec
+ x int
+ y (int)
+ int
+ *float
+ // not legal according to spec
+ (complex) // ERROR "non-declaration|expected|parenthesize"
+ (*string) // ERROR "non-declaration|expected|parenthesize"
+ *(bool) // ERROR "non-declaration|expected|parenthesize"
+}
+
+// legal according to spec
+func (p T) m() {}
+
+// not legal according to spec
+func (p (T)) f() {} // ERROR "parenthesize"
+func (p *(T)) g() {} // ERROR "parenthesize"
+func (p (*T)) h() {} // ERROR "parenthesize"
_ = T{}
// illegal composite literals: parentheses not allowed around literal type
- _ = (struct{}){} // ERROR "xxx"
- _ = ([42]int){} // ERROR "xxx"
- _ = ([...]int){} // ERROR "xxx"
- _ = ([]int){} // ERROR "xxx"
- _ = (map[int]int){} // ERROR "xxx"
- _ = (T){} // ERROR "xxx"
+ _ = (struct{}){} // ERROR "parenthesize"
+ _ = ([42]int){} // ERROR "parenthesize"
+ _ = ([...]int){} // ERROR "parenthesize"
+ _ = ([]int){} // ERROR "parenthesize"
+ _ = (map[int]int){} // ERROR "parenthesize"
+ _ = (T){} // ERROR "parenthesize"
}
=========== bugs/bug260.go
FAIL
BUG: bug260 failed
-
-=========== bugs/bug299.go
-BUG: errchk: bugs/bug299.go:25: missing expected error: 'expected'
-errchk: bugs/bug299.go:26: missing expected error: 'expected'
-errchk: bugs/bug299.go:27: missing expected error: 'expected'
-errchk: bugs/bug299.go: unmatched error messages:
-==================================================
-bugs/bug299.go:19: syntax error: unexpected }
-==================================================
-
-=========== bugs/bug300.go
-BUG: errchk: command succeeded unexpectedly