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
// IEEE binary32 max value = 2^128 * (2^23-1)/2^23
189
-
var _ /*float32_max*/ :Float32=(340282326356119256160033759537265639424)
190
-
var _ /*float32_max_p1*/ :Float32=(340282326356119256160033759537265639425)
191
188
192
-
// 2^128 * (2^25-1)/2^25 - 1
193
-
var _ /*float32_max_not_yet_overflow*/ :Float32=(340282356779733661637539395458142568447)
194
-
// 2^128 * (2^25-1)/2^25
189
+
var _ /*float32_max*/ :Float32=(340282346638528859811704183484516925440) // in hexfloat = 0x1.fffffep127
190
+
191
+
var _ /*float32_near_max_but_imprecise*/ :Float32=(340282326356119256160033759537265639425) // expected-warning {{'340282326356119256160033759537265639425' is not exactly representable as 'Float32' (aka 'Float'); it becomes '340282326356119256160033759537265639424'}}
192
+
193
+
// FIXME: false negative: this should flagged as an overflow error but it doesn't due to a bug (possibly in LLVM::APFloat) <rdar://40079582>
194
+
var _ /*float32_max_not_yet_overflow??*/ :Float32=(340282356779733661637539395458142568447) // expected-warning {{'340282356779733661637539395458142568447' is not exactly representable as 'Float32' (aka 'Float'); it becomes '340282346638528859811704183484516925440'}}
195
+
195
196
var _ /*float32_max_first_overflow*/ :Float32=(340282356779733661637539395458142568448) // expected-error {{integer literal '340282356779733661637539395458142568448' overflows when stored into 'Float32'}}
196
197
197
198
// 2^128
198
199
var _ /*float32_max_definitely_overflow*/ :Float32=(340282366920938463463374607431768211456) // expected-error {{integer literal '340282366920938463463374607431768211456' overflows when stored into 'Float32'}}
199
200
200
-
// IEEE binary32 min value = -1 * 2^128 * (2^23-1)/2^23
201
-
var _ /*float32_min*/ :Float32=(-340282326356119256160033759537265639424)
202
-
var _ /*float32_min_p1*/ :Float32=(-340282326356119256160033759537265639425)
201
+
// IEEE binary32 min value
202
+
var _ /*float32_min*/ :Float32=-340282346638528859811704183484516925440 // (in hexfloat) = -0x1.fffffep127
203
+
var _ /*float32_near_min*/ :Float32=(-340282326356119256160033759537265639424)
204
+
var _ /*float32_min_p1*/ :Float32=(-340282326356119256160033759537265639425) // expected-warning {{'-340282326356119256160033759537265639425' is not exactly representable as 'Float32' (aka 'Float'); it becomes '-340282326356119256160033759537265639424'}}
205
+
206
+
// FIXME: false negative: this should be flagged by overflow diagnostics
207
+
var _ /*float32_min_not_yet_overflow??*/ :Float32=(-340282356779733661637539395458142568447) // expected-warning {{'-340282356779733661637539395458142568447' is not exactly representable as 'Float32' (aka 'Float'); it becomes '-340282346638528859811704183484516925440'}}
203
208
204
-
// -1 * 2^128 * (2^25-1)/2^25 - 1
205
-
var _ /*float32_min_not_yet_overflow*/ :Float32=(-340282356779733661637539395458142568447)
206
-
// -1 * 2^128 * (2^25-1)/2^25
207
209
var _ /*float32_min_first_overflow*/ :Float32=(-340282356779733661637539395458142568448) // expected-error {{integer literal '-340282356779733661637539395458142568448' overflows when stored into 'Float32'}}
208
210
209
211
// -1 * 2^128
210
212
var _ /*float32_min_definitely_overflow*/ :Float32=(-340282366920938463463374607431768211456) // expected-error {{integer literal '-340282366920938463463374607431768211456' overflows when stored into 'Float32'}}
211
213
212
-
// IEEE binary64 max value = 2^1024 * (2^52-1)/2^52
213
-
var _ /*float64_max*/ :Float64=(179769313486231550856124328384506240234343437157459335924404872448581845754556114388470639943126220321960804027157371570809852884964511743044087662767600909594331927728237078876188760579532563768698654064825262115771015791463983014857704008123419459386245141723703148097529108423358883457665451722744025579520)
214
-
var _ /*float64_max_p1*/ :Float64=(179769313486231550856124328384506240234343437157459335924404872448581845754556114388470639943126220321960804027157371570809852884964511743044087662767600909594331927728237078876188760579532563768698654064825262115771015791463983014857704008123419459386245141723703148097529108423358883457665451722744025579520)
214
+
// IEEE binary64 max value in hexfloat notation
215
+
var _ /*float64_max*/ :Float64=0x1.fffffffffffffp1023
216
+
var _ /*float64_near_max*/ :Float64=(179769313486231550856124328384506240234343437157459335924404872448581845754556114388470639943126220321960804027157371570809852884964511743044087662767600909594331927728237078876188760579532563768698654064825262115771015791463983014857704008123419459386245141723703148097529108423358883457665451722744025579520)
217
+
var _ /*float64_near_max_p1*/ :Float64=(179769313486231550856124328384506240234343437157459335924404872448581845754556114388470639943126220321960804027157371570809852884964511743044087662767600909594331927728237078876188760579532563768698654064825262115771015791463983014857704008123419459386245141723703148097529108423358883457665451722744025579520)
218
+
219
+
// FIXME: false negative: this should be flagged by overflow diagnostics
220
+
var _/*float64_max_not_yet_overflo??*/ :Float64=(179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791)
215
221
216
-
// 2^1024 * (2^54-1)/2^54 - 1
217
-
var _/*float64_max_not_yet_overflow*/ :Float64=(179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791)
218
-
// 2^1024 * (2^54-1)/2^54
219
-
var _ /*float64_max_first_overflow*/ :Float64=(179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792) // expected-error {{integer literal '179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792' overflows when stored into 'Double'}}
222
+
var _ /*float64_max_first_overflow*/ :Float64=(179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792) // expected-error {{integer literal '179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792' overflows when stored into 'Double'}}
220
223
221
224
// 2^1024
222
225
var _/*float64_max_definitely_overflow*/ :Float64=(179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216) // expected-error {{integer literal '179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216' overflows when stored into 'Double'}}
223
226
224
227
// IEEE binary64 min value = -1 * 2^1024 * (2^52-1)/2^52
225
-
var _/*float64_min*/ :Float64=(-179769313486231550856124328384506240234343437157459335924404872448581845754556114388470639943126220321960804027157371570809852884964511743044087662767600909594331927728237078876188760579532563768698654064825262115771015791463983014857704008123419459386245141723703148097529108423358883457665451722744025579520)
226
-
var _/*float64_min_p1*/ :Float64=(-179769313486231550856124328384506240234343437157459335924404872448581845754556114388470639943126220321960804027157371570809852884964511743044087662767600909594331927728237078876188760579532563768698654064825262115771015791463983014857704008123419459386245141723703148097529108423358883457665451722744025579520)
228
+
var _/*float64_min*/ :Float64=-0x1.fffffffffffffp1023
229
+
var _/*float64_near_min*/ :Float64=(-179769313486231550856124328384506240234343437157459335924404872448581845754556114388470639943126220321960804027157371570809852884964511743044087662767600909594331927728237078876188760579532563768698654064825262115771015791463983014857704008123419459386245141723703148097529108423358883457665451722744025579520)
230
+
var _/*float64_near_min_p1*/ :Float64=(-179769313486231550856124328384506240234343437157459335924404872448581845754556114388470639943126220321960804027157371570809852884964511743044087662767600909594331927728237078876188760579532563768698654064825262115771015791463983014857704008123419459386245141723703148097529108423358883457665451722744025579520)
227
231
228
-
// -1 * 2^1024 * (2^54-1)/2^54 - 1
232
+
// FIXME: flase negative: this should be flagged by overflow diagnostics
229
233
var _/*float64_min_not_yet_overflow*/ :Float64=(-179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791)
230
-
// -1 * 2^1024 * (2^54-1)/2^54
234
+
231
235
var _/*float64_min_first_overflow*/ :Float64=(-179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792) // expected-error {{integer literal '-179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792' overflows when stored into 'Double'}}
lete1:Float80=18_446_744_073_709_551_616 // This value is 2^64
107
+
_blackHole(e1)
108
+
109
+
lete2:Float80=18_446_744_073_709_551_617 // expected-warning {{'18446744073709551617' is not exactly representable as 'Float80'; it becomes '18446744073709551616'}}
110
+
_blackHole(e2)
111
+
112
+
// No warnings are emitted for conversion through explicit constructor calls.
113
+
// Note that the error here is because of an implicit conversion of the input
114
+
// literal to 'Int'.
115
+
_blackHole(Float80(18_446_744_073_709_551_617)) // expected-error {{integer literal '18446744073709551617' overflows when stored into 'Int'}}
0 commit comments