OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc3/] [gcc/] [testsuite/] [gfortran.dg/] [typebound_operator_4.f03] - Blame information for rev 302

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 302 jeremybenn
! { dg-do compile }
2
 
3
! Type-bound procedures
4
! Check for errors with operator calls.
5
 
6
MODULE m
7
  IMPLICIT NONE
8
 
9
  TYPE myint
10
    INTEGER :: value
11
  CONTAINS
12
    PROCEDURE, PASS :: add_int
13
    PROCEDURE, PASS :: assign_int
14
    GENERIC, PRIVATE :: OPERATOR(.PLUS.) => add_int
15
    GENERIC, PRIVATE :: OPERATOR(+) => add_int
16
    GENERIC, PRIVATE :: ASSIGNMENT(=) => assign_int
17
  END TYPE myint
18
 
19
  TYPE myreal
20
    REAL :: value
21
  CONTAINS
22
    PROCEDURE, PASS :: add_real
23
    PROCEDURE, PASS :: assign_real
24
    GENERIC :: OPERATOR(.PLUS.) => add_real
25
    GENERIC :: OPERATOR(+) => add_real
26
    GENERIC :: ASSIGNMENT(=) => assign_real
27
  END TYPE myreal
28
 
29
CONTAINS
30
 
31
  PURE TYPE(myint) FUNCTION add_int (a, b)
32
    CLASS(myint), INTENT(IN) :: a
33
    INTEGER, INTENT(IN) :: b
34
    add_int = myint (a%value + b)
35
  END FUNCTION add_int
36
 
37
  PURE SUBROUTINE assign_int (dest, from)
38
    CLASS(myint), INTENT(OUT) :: dest
39
    INTEGER, INTENT(IN) :: from
40
    dest%value = from
41
  END SUBROUTINE assign_int
42
 
43
  TYPE(myreal) FUNCTION add_real (a, b)
44
    CLASS(myreal), INTENT(IN) :: a
45
    REAL, INTENT(IN) :: b
46
    add_real = myreal (a%value + b)
47
  END FUNCTION add_real
48
 
49
  SUBROUTINE assign_real (dest, from)
50
    CLASS(myreal), INTENT(OUT) :: dest
51
    REAL, INTENT(IN) :: from
52
    dest%value = from
53
  END SUBROUTINE assign_real
54
 
55
  SUBROUTINE in_module ()
56
    TYPE(myint) :: x
57
    x = 0 ! { dg-bogus "Can't convert" }
58
    x = x + 42 ! { dg-bogus "Operands of" }
59
    x = x .PLUS. 5 ! { dg-bogus "Unknown operator" }
60
  END SUBROUTINE in_module
61
 
62
  PURE SUBROUTINE iampure ()
63
    TYPE(myint) :: x
64
 
65
    x = 0 ! { dg-bogus "is not PURE" }
66
    x = x + 42 ! { dg-bogus "to a non-PURE procedure" }
67
    x = x .PLUS. 5 ! { dg-bogus "to a non-PURE procedure" }
68
  END SUBROUTINE iampure
69
 
70
END MODULE m
71
 
72
PURE SUBROUTINE iampure2 ()
73
  USE m
74
  IMPLICIT NONE
75
  TYPE(myreal) :: x
76
 
77
  x = 0.0 ! { dg-error "is not PURE" }
78
  x = x + 42.0 ! { dg-error "to a non-PURE procedure" }
79
  x = x .PLUS. 5.0 ! { dg-error "to a non-PURE procedure" }
80
END SUBROUTINE iampure2
81
 
82
PROGRAM main
83
  USE m
84
  IMPLICIT NONE
85
  TYPE(myint) :: x
86
 
87
  x = 0 ! { dg-error "Can't convert" }
88
  x = x + 42 ! { dg-error "Operands of" }
89
  x = x .PLUS. 5 ! { dg-error "Unknown operator" }
90
END PROGRAM main
91
 
92
! { dg-final { cleanup-modules "m" } }

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.