]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/gc: reject complex calls with mismatched argument types.
authorRémy Oudompheng <oudomphe@phare.normalesup.org>
Mon, 11 Mar 2013 21:55:14 +0000 (22:55 +0100)
committerRémy Oudompheng <oudomphe@phare.normalesup.org>
Mon, 11 Mar 2013 21:55:14 +0000 (22:55 +0100)
The specification says "the two arguments must be of the same
floating-point type."

R=rsc, gri
CC=golang-dev
https://golang.org/cl/7671045

src/cmd/gc/typecheck.c
test/cmplx.go

index 47e555f94511a237b1c7ccb585a7f8a6b03404b1..fd19c49bf650549bf8d91fe70b6bfea162c6db8f 100644 (file)
@@ -1182,9 +1182,9 @@ reswitch:
                defaultlit2(&l, &r, 0);
                n->left = l;
                n->right = r;
-               if(l->type->etype != r->type->etype) {
+               if(!eqtype(l->type, r->type)) {
                badcmplx:
-                       yyerror("invalid operation: %N (complex of types %T, %T)", n, l->type, r->type);
+                       yyerror("invalid operation: %N (mismatched types %T and %T)", n, l->type, r->type);
                        goto error;
                }
                switch(l->type->etype) {
index 248672e7dd5076dda87a359fad00338e39149f74..2d8a6229d62d59126fc26ad477c50a5e988c5798 100644 (file)
@@ -9,12 +9,23 @@
 
 package main
 
+type (
+       Float32    float32
+       Float64    float64
+       Complex64  complex64
+       Complex128 complex128
+)
+
 var (
        f32 float32
        f64 float64
+       F32 Float32
+       F64 Float64
 
        c64  complex64
        c128 complex128
+       C64  Complex64
+       C128 Complex128
 )
 
 func main() {
@@ -25,4 +36,19 @@ func main() {
        _ = complex128(0)     // ok
        _ = complex(f32, f64) // ERROR "complex"
        _ = complex(f64, f32) // ERROR "complex"
+       _ = complex(f32, F32) // ERROR "complex"
+       _ = complex(F32, f32) // ERROR "complex"
+       _ = complex(f64, F64) // ERROR "complex"
+       _ = complex(F64, f64) // ERROR "complex"
+
+       c128 = complex(f32, f32) // ERROR "cannot use"
+       c64 = complex(f64, f64)  // ERROR "cannot use"
+
+       c64 = complex(1.0, 2.0) // ok, constant is untyped
+       c128 = complex(1.0, 2.0)
+       C64 = complex(1.0, 2.0)
+       C128 = complex(1.0, 2.0)
+
+       C64 = complex(f32, f32)  // ERROR "cannot use"
+       C128 = complex(f64, f64) // ERROR "cannot use"
 }