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
- Fix false positive when divisor is a real number.
- Fix false negative when divident is real, but divisor is complex.
- Fix false negative when due to promotion the division is performed in
higher precision than the divident.
- Fix false negative in divide and assign (`a /= b`).
Fixes: llvm#131127
---------
Co-authored-by: Zahira Ammarguellat <[email protected]>
_Complexdoublediv_ccf(_Complexfloat a, _Complexfloat b) {
14
+
return a / b;
15
+
}
16
+
17
+
_Complexdoublediv_cr(_Complexdouble a, double b) {
18
+
return a / b;
19
+
}
20
+
21
+
_Complexdoublediv_cr_mixed1(_Complexdouble a, float b) {
22
+
return a / b;
23
+
}
24
+
25
+
_Complexdoublediv_cr_mixed2(_Complexfloat a, double b) {
26
+
return a / b;
27
+
}
28
+
29
+
_Complexdoublediv_rr(double a, double b) {
30
+
return a / b;
31
+
}
32
+
33
+
_Complexintdiv_ii(_Complexint a, _Complexint b) {
34
+
return a / b;
35
+
}
36
+
37
+
structUserT {
38
+
friend UserT operator/(UserT, _Complexdouble);
39
+
friend UserT operator/(_Complexdouble, UserT);
40
+
};
41
+
42
+
UserT div_uc(UserT a, _Complexdouble b) {
43
+
return a / b;
44
+
}
45
+
46
+
UserT div_cu(_Complexdouble a, UserT b) {
47
+
return a / b;
48
+
}
49
+
50
+
#ifdef DIV_CC
51
+
_Complexdoublediv_cc(_Complexdouble a, const_Complexdouble b) {
52
+
return a / b; // #1
53
+
}
54
+
#endif// DIV_CC
55
+
56
+
#ifdef DIV_RC
57
+
_Complexdoublediv_rc(double a, _Complexfloat b) {
58
+
return a / b; // #1
59
+
}
60
+
#endif// DIV_RC
61
+
62
+
#ifdef DIVASSIGN
63
+
_Complexdoubledivassign(_Complexdouble a, _Complexdouble b) {
64
+
return a /= b; // #1
65
+
}
66
+
#endif// DIVASSIGN
67
+
68
+
#ifdef DIVMIXEDFD
69
+
_Complexdoubledivmixedfd(_Complexfloat a, _Complexdouble b) {
70
+
return a / b; // #1
71
+
}
72
+
#endif// DIVMIXEDFD
73
+
74
+
#ifdef DIVMIXEDFD2
75
+
_Complexdoubledivmixedfd2(_Complexdouble a, _Complexfloat b) {
76
+
return a / b; // #1
77
+
}
78
+
#endif// DIVMIXEDFD2
79
+
80
+
#ifdef DIVMIXEDID
81
+
_Complexdoubledivmixedid(_Complexint a, _Complexdouble b) {
82
+
return a / b; // #1
83
+
}
84
+
#endif// DIVMIXEDID
85
+
86
+
#ifdef DIVASSIGN_MIXEDFD
87
+
_Complexdoubledivassign_mixedfd(_Complexfloat a, _Complexdouble b) {
88
+
return a /= b; // #1
89
+
}
90
+
#endif// DIVMIXEDFD
91
+
92
+
// no-diag-no-diagnostics
93
+
// expected-warning@#1 {{excess precision is requested but the target does not support excess precision which may result in observable differences in complex division behavior}}
0 commit comments