You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: tests/ui/autodiff/autodiff_illegal.rs
+40-32
Original file line number
Diff line number
Diff line change
@@ -30,16 +30,24 @@ pub fn f4(x: f64) {
30
30
unimplemented!()
31
31
}
32
32
33
+
34
+
#[autodiff(df5,Forward,Dual,Dual)]
35
+
fnf5(x:f32,y:f32) -> f32{
36
+
//~^^ ERROR expected 3 activities, but found 2
37
+
x + y
38
+
}
39
+
40
+
33
41
// We can't use Dual in Reverse mode
34
-
#[autodiff(df5,Reverse,Dual)]
35
-
pubfnf5(x:f64){
42
+
#[autodiff(df6,Reverse,Dual)]
43
+
pubfnf6(x:f64){
36
44
//~^^ ERROR Dual can not be used in Reverse Mode
37
45
unimplemented!()
38
46
}
39
47
40
48
// We can't use Duplicated in Forward mode
41
-
#[autodiff(df6,Forward,Duplicated)]
42
-
pubfnf6(x:f64){
49
+
#[autodiff(df7,Forward,Duplicated)]
50
+
pubfnf7(x:f64){
43
51
//~^^ ERROR Duplicated can not be used in Forward Mode
44
52
//~^^ ERROR Duplicated can not be used for this type
45
53
unimplemented!()
@@ -62,21 +70,21 @@ fn dummy() {
62
70
63
71
// Malformed, where args?
64
72
#[autodiff]
65
-
pubfnf7(x:f64){
73
+
pubfnf8(x:f64){
66
74
//~^ ERROR autodiff requires at least a name and mode
67
75
unimplemented!()
68
76
}
69
77
70
78
// Malformed, where args?
71
79
#[autodiff()]
72
-
pubfnf8(x:f64){
80
+
pubfnf9(x:f64){
73
81
//~^ ERROR autodiff requires at least a name and mode
74
82
unimplemented!()
75
83
}
76
84
77
85
// Invalid attribute syntax
78
86
#[autodiff = ""]
79
-
pubfnf9(x:f64){
87
+
pubfnf10(x:f64){
80
88
//~^ ERROR autodiff requires at least a name and mode
81
89
unimplemented!()
82
90
}
@@ -85,29 +93,29 @@ fn fn_exists() {}
85
93
86
94
// We colide with an already existing function
87
95
#[autodiff(fn_exists,Reverse,Active)]
88
-
pubfnf10(x:f64){
96
+
pubfnf11(x:f64){
89
97
//~^^ ERROR the name `fn_exists` is defined multiple times [E0428]
90
98
unimplemented!()
91
99
}
92
100
93
101
// Malformed, missing a mode
94
-
#[autodiff(df11)]
95
-
pubfnf11(){
102
+
#[autodiff(df12)]
103
+
pubfnf12(){
96
104
//~^ ERROR autodiff requires at least a name and mode
97
105
unimplemented!()
98
106
}
99
107
100
108
// Invalid Mode
101
-
#[autodiff(df12,Debug)]
102
-
pubfnf12(){
109
+
#[autodiff(df13,Debug)]
110
+
pubfnf13(){
103
111
//~^^ ERROR unknown Mode: `Debug`. Use `Forward` or `Reverse`
104
112
unimplemented!()
105
113
}
106
114
107
115
// Invalid, please pick one Mode
108
116
// or use two autodiff macros.
109
-
#[autodiff(df13,Forward,Reverse)]
110
-
pubfnf13(){
117
+
#[autodiff(df14,Forward,Reverse)]
118
+
pubfnf14(){
111
119
//~^^ ERROR did not recognize Activity: `Reverse`
112
120
unimplemented!()
113
121
}
@@ -117,8 +125,8 @@ struct Foo {}
117
125
// We can't handle Active structs, because that would mean (in the general case), that we would
118
126
// need to allocate and initialize arbitrary user types. We have Duplicated/Dual input args for
119
127
// that. FIXME: Give a nicer error and suggest to the user to have a `&mut Foo` input instead.
120
-
#[autodiff(df14,Reverse,Active,Active)]
121
-
fnf14(x:f32) -> Foo{
128
+
#[autodiff(df15,Reverse,Active,Active)]
129
+
fnf15(x:f32) -> Foo{
122
130
unimplemented!()
123
131
}
124
132
@@ -127,15 +135,15 @@ type MyFloat = f32;
127
135
// We would like to support type alias to f32/f64 in argument type in the future,
128
136
// but that requires us to implement our checks at a later stage
129
137
// like THIR which has type information available.
130
-
#[autodiff(df15,Reverse,Active,Active)]
131
-
fnf15(x:MyFloat) -> f32{
138
+
#[autodiff(df16,Reverse,Active,Active)]
139
+
fnf16(x:MyFloat) -> f32{
132
140
//~^^ ERROR failed to resolve: use of undeclared type `MyFloat` [E0433]
133
141
unimplemented!()
134
142
}
135
143
136
144
// We would like to support type alias to f32/f64 in return type in the future
137
-
#[autodiff(df16,Reverse,Active,Active)]
138
-
fnf16(x:f32) -> MyFloat{
145
+
#[autodiff(df17,Reverse,Active,Active)]
146
+
fnf17(x:f32) -> MyFloat{
139
147
unimplemented!()
140
148
}
141
149
@@ -145,41 +153,41 @@ struct F64Trans {
145
153
}
146
154
147
155
// We would like to support `#[repr(transparent)]` f32/f64 wrapper in return type in the future
148
-
#[autodiff(df17,Reverse,Active,Active)]
149
-
fnf17(x:f64) -> F64Trans{
156
+
#[autodiff(df18,Reverse,Active,Active)]
157
+
fnf18(x:f64) -> F64Trans{
150
158
unimplemented!()
151
159
}
152
160
153
161
// We would like to support `#[repr(transparent)]` f32/f64 wrapper in argument type in the future
154
-
#[autodiff(df18,Reverse,Active,Active)]
155
-
fnf18(x:F64Trans) -> f64{
162
+
#[autodiff(df19,Reverse,Active,Active)]
163
+
fnf19(x:F64Trans) -> f64{
156
164
//~^^ ERROR failed to resolve: use of undeclared type `F64Trans` [E0433]
157
165
unimplemented!()
158
166
}
159
167
160
168
// Invalid return activity
161
-
#[autodiff(df19,Forward,Dual,Active)]
162
-
fnf19(x:f32) -> f32{
169
+
#[autodiff(df20,Forward,Dual,Active)]
170
+
fnf20(x:f32) -> f32{
163
171
//~^^ ERROR invalid return activity Active in Forward Mode
164
172
unimplemented!()
165
173
}
166
174
167
-
#[autodiff(df20,Reverse,Active,Dual)]
168
-
fnf20(x:f32) -> f32{
175
+
#[autodiff(df21,Reverse,Active,Dual)]
176
+
fnf21(x:f32) -> f32{
169
177
//~^^ ERROR invalid return activity Dual in Reverse Mode
170
178
unimplemented!()
171
179
}
172
180
173
181
// Duplicated cannot be used as return activity
174
-
#[autodiff(df21,Reverse,Active,Duplicated)]
175
-
fnf21(x:f32) -> f32{
182
+
#[autodiff(df22,Reverse,Active,Duplicated)]
183
+
fnf22(x:f32) -> f32{
176
184
//~^^ ERROR invalid return activity Duplicated in Reverse Mode
177
185
unimplemented!()
178
186
}
179
187
180
188
structDoesNotImplDefault;
181
-
#[autodiff(df22,Forward,Dual)]
182
-
pubfnf22() -> DoesNotImplDefault{
189
+
#[autodiff(df23,Forward,Dual)]
190
+
pubfnf23() -> DoesNotImplDefault{
183
191
//~^^ ERROR the function or associated item `default` exists for tuple `(DoesNotImplDefault, DoesNotImplDefault)`, but its trait bounds were not satisfied
error[E0433]: failed to resolve: use of undeclared type `MyFloat`
143
-
--> $DIR/autodiff_illegal.rs:130:1
149
+
--> $DIR/autodiff_illegal.rs:138:1
144
150
|
145
-
LL | #[autodiff(df15, Reverse, Active, Active)]
151
+
LL | #[autodiff(df16, Reverse, Active, Active)]
146
152
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ use of undeclared type `MyFloat`
147
153
148
154
error[E0433]: failed to resolve: use of undeclared type `F64Trans`
149
-
--> $DIR/autodiff_illegal.rs:154:1
155
+
--> $DIR/autodiff_illegal.rs:162:1
150
156
|
151
-
LL | #[autodiff(df18, Reverse, Active, Active)]
157
+
LL | #[autodiff(df19, Reverse, Active, Active)]
152
158
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ use of undeclared type `F64Trans`
153
159
154
160
error[E0599]: the function or associated item `default` exists for tuple `(DoesNotImplDefault, DoesNotImplDefault)`, but its trait bounds were not satisfied
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function or associated item cannot be called on `(DoesNotImplDefault, DoesNotImplDefault)` due to unsatisfied trait bounds
161
167
|
162
168
= note: the following trait bounds were not satisfied:
@@ -168,7 +174,7 @@ LL + #[derive(Default)]
168
174
LL | struct DoesNotImplDefault;
169
175
|
170
176
171
-
error: aborting due to 23 previous errors
177
+
error: aborting due to 24 previous errors
172
178
173
179
Some errors have detailed explanations: E0428, E0433, E0599, E0658.
174
180
For more information about an error, try `rustc --explain E0428`.
0 commit comments