mirror of
https://github.com/golang/go
synced 2024-09-05 07:54:46 +00:00
cmd/gc: disallow pointer constants
Fixes #7760. LGTM=iant R=iant, remyoudompheng CC=golang-codereviews https://golang.org/cl/130720043
This commit is contained in:
parent
fb0b923f67
commit
7f40e5e6e5
|
@ -1566,7 +1566,6 @@ isgoconst(Node *n)
|
|||
case ORSH:
|
||||
case OSUB:
|
||||
case OXOR:
|
||||
case OCONV:
|
||||
case OIOTA:
|
||||
case OCOMPLEX:
|
||||
case OREAL:
|
||||
|
@ -1574,7 +1573,12 @@ isgoconst(Node *n)
|
|||
if(isgoconst(n->left) && (n->right == N || isgoconst(n->right)))
|
||||
return 1;
|
||||
break;
|
||||
|
||||
|
||||
case OCONV:
|
||||
if(okforconst[n->type->etype] && isgoconst(n->left))
|
||||
return 1;
|
||||
break;
|
||||
|
||||
case OLEN:
|
||||
case OCAP:
|
||||
l = n->left;
|
||||
|
|
25
test/fixedbugs/issue7760.go
Normal file
25
test/fixedbugs/issue7760.go
Normal file
|
@ -0,0 +1,25 @@
|
|||
// errorcheck
|
||||
|
||||
// Copyright 2014 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.
|
||||
|
||||
// Verify that pointers can't be used as constants.
|
||||
|
||||
package main
|
||||
|
||||
import "unsafe"
|
||||
|
||||
type myPointer unsafe.Pointer
|
||||
|
||||
const _ = unsafe.Pointer(uintptr(1)) // ERROR "is not (a )?constant"
|
||||
const _ = myPointer(uintptr(1)) // ERROR "is not (a )?constant"
|
||||
|
||||
const _ = (*int)(unsafe.Pointer(uintptr(1))) // ERROR "is not (a )?constant"
|
||||
const _ = (*int)(myPointer(uintptr(1))) // ERROR "is not (a )?constant"
|
||||
|
||||
const _ = uintptr(unsafe.Pointer(uintptr(1))) // ERROR "is not (a )?constant"
|
||||
const _ = uintptr(myPointer(uintptr(1))) // ERROR "is not (a )?constant"
|
||||
|
||||
const _ = []byte("") // ERROR "is not (a )?constant"
|
||||
const _ = []rune("") // ERROR "is not (a )?constant"
|
Loading…
Reference in a new issue